From 723f36ec6dbf0e264ebda04401febf82faaee2c1 Mon Sep 17 00:00:00 2001 From: Vitaliy Lyudvichenko Date: Wed, 4 Oct 2017 18:15:40 +0300 Subject: [PATCH 001/109] Fixed integration tests after introduction of 'clickhouse server' commands. [#CLICKHOUSE-2] --- dbms/tests/integration/helpers/cluster.py | 1 + 1 file changed, 1 insertion(+) diff --git a/dbms/tests/integration/helpers/cluster.py b/dbms/tests/integration/helpers/cluster.py index 57f165d9099..b20749a08d3 100644 --- a/dbms/tests/integration/helpers/cluster.py +++ b/dbms/tests/integration/helpers/cluster.py @@ -176,6 +176,7 @@ services: - {logs_dir}:/var/log/clickhouse-server/ entrypoint: - /usr/bin/clickhouse + - server - --config-file=/etc/clickhouse-server/config.xml - --log-file=/var/log/clickhouse-server/clickhouse-server.log depends_on: {depends_on} From d498e8e152f38c0f81a02b97f6b56c86af731751 Mon Sep 17 00:00:00 2001 From: proller Date: Wed, 4 Oct 2017 18:18:05 +0300 Subject: [PATCH 002/109] Try fix work with not connected sockets (#1320) * Lazy fd_to_replica_state_idx init; Fix work with not connected sockets * Style * const --- dbms/src/Client/Connection.cpp | 4 ++-- dbms/src/Client/MultiplexedConnections.cpp | 13 ++++++++++--- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/dbms/src/Client/Connection.cpp b/dbms/src/Client/Connection.cpp index 8d3ab2a4f13..fc9315210b2 100644 --- a/dbms/src/Client/Connection.cpp +++ b/dbms/src/Client/Connection.cpp @@ -95,11 +95,11 @@ void Connection::disconnect() { //LOG_TRACE(log_wrapper.get(), "Disconnecting"); + in = nullptr; + out = nullptr; // can write to socket if (socket) socket->close(); socket = nullptr; - in = nullptr; - out = nullptr; connected = false; } diff --git a/dbms/src/Client/MultiplexedConnections.cpp b/dbms/src/Client/MultiplexedConnections.cpp index f13587d79c9..fb2baa105a6 100644 --- a/dbms/src/Client/MultiplexedConnections.cpp +++ b/dbms/src/Client/MultiplexedConnections.cpp @@ -20,7 +20,6 @@ MultiplexedConnections::MultiplexedConnections(Connection & connection, const Se ReplicaState replica_state; replica_state.connection = &connection; replica_states.push_back(replica_state); - fd_to_replica_state_idx.emplace(connection.socket->impl()->sockfd(), 0); active_connection_count = 1; } @@ -36,7 +35,6 @@ MultiplexedConnections::MultiplexedConnections( return; replica_states.reserve(connections.size()); - fd_to_replica_state_idx.reserve(connections.size()); for (size_t i = 0; i < connections.size(); ++i) { Connection * connection = &(*connections[i]); @@ -47,7 +45,6 @@ MultiplexedConnections::MultiplexedConnections( replica_state.connection = connection; replica_states.push_back(std::move(replica_state)); - fd_to_replica_state_idx.emplace(connection->socket->impl()->sockfd(), i); } active_connection_count = connections.size(); @@ -304,6 +301,16 @@ MultiplexedConnections::ReplicaState & MultiplexedConnections::getReplicaForRead } auto & socket = read_list[rand() % read_list.size()]; + if (fd_to_replica_state_idx.empty()) + { + fd_to_replica_state_idx.reserve(replica_states.size()); + size_t replica_state_number = 0; + for (const auto & replica_state : replica_states) + { + fd_to_replica_state_idx.emplace(replica_state.connection->socket->impl()->sockfd(), replica_state_number); + ++replica_state_number; + } + } return replica_states[fd_to_replica_state_idx.at(socket.impl()->sockfd())]; } From 95ebdd53c067569c5d7d445bfa1cbc8ea7768735 Mon Sep 17 00:00:00 2001 From: robot-metrika-test Date: Thu, 5 Oct 2017 12:22:56 +0300 Subject: [PATCH 003/109] Auto version update to [54297] --- dbms/cmake/version.cmake | 4 ++-- debian/changelog | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/dbms/cmake/version.cmake b/dbms/cmake/version.cmake index f8aceaeac86..cbaed040a12 100644 --- a/dbms/cmake/version.cmake +++ b/dbms/cmake/version.cmake @@ -1,6 +1,6 @@ # This strings autochanged from release_lib.sh: -set(VERSION_DESCRIBE v1.1.54294-testing) -set(VERSION_REVISION 54294) +set(VERSION_DESCRIBE v1.1.54297-testing) +set(VERSION_REVISION 54297) # end of autochange set (VERSION_MAJOR 1) diff --git a/debian/changelog b/debian/changelog index 1872c8a5e9b..403d0960054 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,5 +1,5 @@ -clickhouse (1.1.54294) unstable; urgency=low +clickhouse (1.1.54297) unstable; urgency=low * Modified source code - -- Fri, 29 Sep 2017 01:08:46 +0300 + -- Thu, 05 Oct 2017 12:22:56 +0300 From 704fee875041a209f9f5e63382daa8515d3c51ef Mon Sep 17 00:00:00 2001 From: proller Date: Fri, 6 Oct 2017 18:58:24 +0300 Subject: [PATCH 004/109] Tests: External: rename --use_http => --no_http and fix (#1324) --- .../generate_and_test.py | 49 +++++++++++-------- 1 file changed, 29 insertions(+), 20 deletions(-) diff --git a/dbms/tests/external_dictionaries/generate_and_test.py b/dbms/tests/external_dictionaries/generate_and_test.py index 097b152b56e..0815527b525 100755 --- a/dbms/tests/external_dictionaries/generate_and_test.py +++ b/dbms/tests/external_dictionaries/generate_and_test.py @@ -48,39 +48,43 @@ def generate_structure(args): [ 'file_flat', 0, True ], [ 'clickhouse_flat', 0, True ], [ 'executable_flat', 0, True ], - [ 'http_flat', 0, True ], [ 'file_hashed', 0, True ], [ 'clickhouse_hashed', 0, True ], [ 'executable_hashed', 0, True ], - [ 'http_hashed', 0, True ], [ 'clickhouse_cache', 0, True ], [ 'executable_cache', 0, True ], - [ 'http_cache', 0, True ], # Complex key dictionaries with (UInt8, UInt8) key [ 'file_complex_integers_key_hashed', 1, False ], [ 'clickhouse_complex_integers_key_hashed', 1, False ], [ 'executable_complex_integers_key_hashed', 1, False ], - [ 'http_complex_integers_key_hashed', 1, False ], [ 'clickhouse_complex_integers_key_cache', 1, False ], [ 'executable_complex_integers_key_cache', 1, False ], - [ 'http_complex_integers_key_cache', 1, False ], # Complex key dictionaries with (String, UInt8) key [ 'file_complex_mixed_key_hashed', 2, False ], [ 'clickhouse_complex_mixed_key_hashed', 2, False ], [ 'executable_complex_mixed_key_hashed', 2, False ], - [ 'http_complex_mixed_key_hashed', 2, False ], [ 'clickhouse_complex_mixed_key_cache', 2, False ], [ 'executable_complex_mixed_key_hashed', 2, False ], - [ 'http_complex_mixed_key_hashed', 2, False ], ]) - if args.use_https: + if not args.no_http: + dictionaries.extend([ + [ 'http_flat', 0, True ], + [ 'http_hashed', 0, True ], + [ 'http_cache', 0, True ], + [ 'http_complex_integers_key_hashed', 1, False ], + [ 'http_complex_integers_key_cache', 1, False ], + [ 'http_complex_mixed_key_hashed', 2, False ], + [ 'http_complex_mixed_key_hashed', 2, False ], + ]) + + if not args.no_https: dictionaries.extend([ [ 'https_flat', 0, True ], [ 'https_hashed', 0, True ], @@ -456,39 +460,44 @@ def generate_dictionaries(args): [ source_file % (generated_prefix + files[0]), layout_flat], [ source_clickhouse, layout_flat ], [ source_executable % (generated_prefix + files[0]), layout_flat ], - [ source_http % (files[0]), layout_flat ], [ source_file % (generated_prefix + files[0]), layout_hashed], [ source_clickhouse, layout_hashed ], [ source_executable % (generated_prefix + files[0]), layout_hashed ], - [ source_http % (files[0]), layout_hashed ], [ source_clickhouse, layout_cache ], [ source_executable_cache % (generated_prefix + files[0]), layout_cache ], - [ source_http % (files[0]), layout_cache ], # Complex key dictionaries with (UInt8, UInt8) key [ source_file % (generated_prefix + files[1]), layout_complex_key_hashed], [ source_clickhouse, layout_complex_key_hashed ], [ source_executable % (generated_prefix + files[1]), layout_complex_key_hashed ], - [ source_http % (files[1]), layout_complex_key_hashed ], [ source_clickhouse, layout_complex_key_cache ], [ source_executable_cache % (generated_prefix + files[1]), layout_complex_key_cache ], - [ source_http % (files[1]), layout_complex_key_cache ], # Complex key dictionaries with (String, UInt8) key [ source_file % (generated_prefix + files[2]), layout_complex_key_hashed], [ source_clickhouse, layout_complex_key_hashed ], [ source_executable % (generated_prefix + files[2]), layout_complex_key_hashed ], - [ source_http % (files[2]), layout_complex_key_hashed ], [ source_clickhouse, layout_complex_key_cache ], [ source_executable_cache % (generated_prefix + files[2]), layout_complex_key_cache ], - [ source_http % (files[2]), layout_complex_key_cache ], ] - if args.use_https: + + if not args.no_http: + sources_and_layouts.extend([ + [ source_http % (files[0]), layout_flat ], + [ source_http % (files[0]), layout_hashed ], + [ source_http % (files[0]), layout_cache ], + [ source_http % (files[1]), layout_complex_key_hashed ], + [ source_http % (files[1]), layout_complex_key_cache ], + [ source_http % (files[2]), layout_complex_key_hashed ], + [ source_http % (files[2]), layout_complex_key_cache ], + ]) + + if not args.no_https: sources_and_layouts.extend([ [ source_https % (files[0]), layout_flat ], [ source_https % (files[0]), layout_hashed ], @@ -549,13 +558,13 @@ def generate_dictionaries(args): def run_tests(args): - if args.use_http: + if not args.no_http: http_server = subprocess.Popen(["python", "http_server.py", "--port", str(args.http_port), "--host", args.http_host]); @atexit.register def http_killer(): http_server.kill() - if args.use_https: + if not args.no_https: https_server = subprocess.Popen(["python", "http_server.py", "--port", str(args.https_port), "--host", args.https_host, '--https']); @atexit.register def https_killer(): @@ -731,11 +740,11 @@ if __name__ == '__main__': parser.add_argument('--mongo_host', default = 'localhost', help = 'mongo server host') parser.add_argument('--use_mongo_user', action='store_true', help = 'Test mongodb with user-pass') - parser.add_argument('--use_http', default = True, help = 'Use http dictionaries') + parser.add_argument('--no_http', action='store_true', help = 'Dont use http dictionaries') parser.add_argument('--http_port', default = 58000, help = 'http server port') parser.add_argument('--http_host', default = 'localhost', help = 'http server host') parser.add_argument('--http_path', default = '/generated/', help = 'http server path') - parser.add_argument('--use_https', default = True, help = 'Use https dictionaries') + parser.add_argument('--no_https', action='store_true', help = 'Dont use https dictionaries') parser.add_argument('--https_port', default = 58443, help = 'https server port') parser.add_argument('--https_host', default = 'localhost', help = 'https server host') parser.add_argument('--https_path', default = '/generated/', help = 'https server path') From 19042816c4a1536cfab5eec51de427c6102d0cb9 Mon Sep 17 00:00:00 2001 From: proller Date: Fri, 6 Oct 2017 19:26:32 +0300 Subject: [PATCH 005/109] Fix compile with boost 1.65.1+ and clang 3.8 ( https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=222439 ) (#1325) --- dbms/src/Storages/MergeTree/MergeTreeDataSelectExecutor.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/dbms/src/Storages/MergeTree/MergeTreeDataSelectExecutor.cpp b/dbms/src/Storages/MergeTree/MergeTreeDataSelectExecutor.cpp index bd6e54623ac..1d17475d0ef 100644 --- a/dbms/src/Storages/MergeTree/MergeTreeDataSelectExecutor.cpp +++ b/dbms/src/Storages/MergeTree/MergeTreeDataSelectExecutor.cpp @@ -12,6 +12,7 @@ static constexpr bool is_integer = true; static constexpr int radix = 2; static constexpr int digits = 8 * sizeof(char) * 2; + static constexpr __uint128_t min () { return 0; } // used in boost 1.65.1+ }; } #endif From 3a7f4f04e248be7b44338e27b20aa50023eec559 Mon Sep 17 00:00:00 2001 From: Vladimir Chebotarev Date: Sat, 7 Oct 2017 15:03:44 +0300 Subject: [PATCH 006/109] libglibc-compatibility: Added longjmp tests and fixed longjmp problem. [#METR-21516] --- libs/libglibc-compatibility/CMakeLists.txt | 5 +++- .../glibc-compatibility.c | 29 +++++++++++++++++-- libs/libglibc-compatibility/musl/longjmp.s | 9 ++---- libs/libglibc-compatibility/musl/setjmp.s | 16 ++++++++++ .../tests/CMakeLists.txt | 6 ++++ libs/libglibc-compatibility/tests/longjmp.c | 23 +++++++++++++++ .../libglibc-compatibility/tests/siglongjmp.c | 23 +++++++++++++++ 7 files changed, 102 insertions(+), 9 deletions(-) create mode 100644 libs/libglibc-compatibility/musl/setjmp.s create mode 100644 libs/libglibc-compatibility/tests/CMakeLists.txt create mode 100644 libs/libglibc-compatibility/tests/longjmp.c create mode 100644 libs/libglibc-compatibility/tests/siglongjmp.c diff --git a/libs/libglibc-compatibility/CMakeLists.txt b/libs/libglibc-compatibility/CMakeLists.txt index 9521dba9eab..b4fb9fc424e 100644 --- a/libs/libglibc-compatibility/CMakeLists.txt +++ b/libs/libglibc-compatibility/CMakeLists.txt @@ -1,2 +1,5 @@ +# N.B. This library works on x86_64 only. enable_language (ASM) -add_library (glibc-compatibility glibc-compatibility.c musl/pipe2.c musl/fallocate.c musl/longjmp.s musl/vasprintf.c musl/lgamma.c) +add_library (glibc-compatibility glibc-compatibility.c musl/pipe2.c musl/fallocate.c musl/longjmp.s musl/setjmp.s musl/vasprintf.c musl/lgamma.c) + +add_subdirectory (tests) diff --git a/libs/libglibc-compatibility/glibc-compatibility.c b/libs/libglibc-compatibility/glibc-compatibility.c index 0f6ce057132..594517bd9e0 100644 --- a/libs/libglibc-compatibility/glibc-compatibility.c +++ b/libs/libglibc-compatibility/glibc-compatibility.c @@ -67,13 +67,38 @@ int __poll_chk(struct pollfd * fds, nfds_t nfds, int timeout, size_t fdslen) #include -void longjmp(jmp_buf env, int val); + +void __attribute__ ((__noreturn__)) musl_longjmp(jmp_buf env, int val); +int musl_setjmp(jmp_buf env); /// NOTE This disables some of FORTIFY_SOURCE functionality. void __longjmp_chk(jmp_buf env, int val) { - return longjmp(env, val); + if (env->__mask_was_saved != 0) + { + sigprocmask(SIG_SETMASK, &env->__saved_mask, NULL); + } + musl_longjmp(env, val); +} + +int _setjmp(jmp_buf env) +{ + return musl_setjmp(env); +} + +int sigsetjmp(sigjmp_buf env, int save_sigmask) +{ + if (save_sigmask) + { + env->__mask_was_saved = 1; + sigprocmask(SIG_BLOCK, NULL, &env->__saved_mask); + } + else + { + env->__mask_was_saved = 0; + } + return musl_setjmp(env); } #include diff --git a/libs/libglibc-compatibility/musl/longjmp.s b/libs/libglibc-compatibility/musl/longjmp.s index e175a4b9606..2ed7642906d 100644 --- a/libs/libglibc-compatibility/musl/longjmp.s +++ b/libs/libglibc-compatibility/musl/longjmp.s @@ -1,10 +1,7 @@ /* Copyright 2011-2012 Nicholas J. Kain, licensed under standard MIT license */ -.global _longjmp -.global longjmp -.type _longjmp,@function -.type longjmp,@function -_longjmp: -longjmp: +.global musl_longjmp +.type musl_longjmp,@function +musl_longjmp: mov %rsi,%rax /* val will be longjmp return */ test %rax,%rax jnz 1f diff --git a/libs/libglibc-compatibility/musl/setjmp.s b/libs/libglibc-compatibility/musl/setjmp.s new file mode 100644 index 00000000000..c612db84bd1 --- /dev/null +++ b/libs/libglibc-compatibility/musl/setjmp.s @@ -0,0 +1,16 @@ +/* Copyright 2011-2012 Nicholas J. Kain, licensed under standard MIT license */ +.global musl_setjmp +.type musl_setjmp,@function +musl_setjmp: + mov %rbx,(%rdi) /* rdi is jmp_buf, move registers onto it */ + mov %rbp,8(%rdi) + mov %r12,16(%rdi) + mov %r13,24(%rdi) + mov %r14,32(%rdi) + mov %r15,40(%rdi) + lea 8(%rsp),%rdx /* this is our rsp WITHOUT current ret addr */ + mov %rdx,48(%rdi) + mov (%rsp),%rdx /* save return addr ptr for new rip */ + mov %rdx,56(%rdi) + xor %rax,%rax /* always return 0 */ + ret diff --git a/libs/libglibc-compatibility/tests/CMakeLists.txt b/libs/libglibc-compatibility/tests/CMakeLists.txt new file mode 100644 index 00000000000..e2a8dfd75be --- /dev/null +++ b/libs/libglibc-compatibility/tests/CMakeLists.txt @@ -0,0 +1,6 @@ +foreach (T longjmp siglongjmp) + add_executable (${T} ${T}.c) + target_link_libraries (${T} glibc-compatibility) + set_target_properties (${T} PROPERTIES LINKER_LANGUAGE CXX) + add_check (${T}) +endforeach () diff --git a/libs/libglibc-compatibility/tests/longjmp.c b/libs/libglibc-compatibility/tests/longjmp.c new file mode 100644 index 00000000000..aa96e6276b4 --- /dev/null +++ b/libs/libglibc-compatibility/tests/longjmp.c @@ -0,0 +1,23 @@ +#include + +int main() +{ + jmp_buf env; + int val; + volatile int count = 0; + val = setjmp(env); + ++count; + if (count == 1 && val != 0) + { + return 1; + } + if (count == 2 && val == 42) + { + return 0; + } + if (count == 1) + { + longjmp(env, 42); + } + return 1; +} diff --git a/libs/libglibc-compatibility/tests/siglongjmp.c b/libs/libglibc-compatibility/tests/siglongjmp.c new file mode 100644 index 00000000000..e4befb34259 --- /dev/null +++ b/libs/libglibc-compatibility/tests/siglongjmp.c @@ -0,0 +1,23 @@ +#include + +int main() +{ + sigjmp_buf env; + int val; + volatile int count = 0; + val = sigsetjmp(env, 0); + ++count; + if (count == 1 && val != 0) + { + return 1; + } + if (count == 2 && val == 42) + { + return 0; + } + if (count == 1) + { + siglongjmp(env, 42); + } + return 1; +} From 31d2ed298254f87963e7fd9c60b9f82f2e34b5aa Mon Sep 17 00:00:00 2001 From: Vladimir Chebotarev Date: Sat, 7 Oct 2017 20:44:17 +0300 Subject: [PATCH 007/109] libglibc-compatibility: Changed musl longjmp to work with glibc setjmp. [#METR-21516] --- libs/libglibc-compatibility/CMakeLists.txt | 3 +- .../glibc-compatibility.c | 29 +------------- libs/libglibc-compatibility/musl/longjmp.s | 39 ++++++++++--------- libs/libglibc-compatibility/musl/setjmp.s | 16 -------- 4 files changed, 24 insertions(+), 63 deletions(-) delete mode 100644 libs/libglibc-compatibility/musl/setjmp.s diff --git a/libs/libglibc-compatibility/CMakeLists.txt b/libs/libglibc-compatibility/CMakeLists.txt index b4fb9fc424e..a567387c065 100644 --- a/libs/libglibc-compatibility/CMakeLists.txt +++ b/libs/libglibc-compatibility/CMakeLists.txt @@ -1,5 +1,4 @@ -# N.B. This library works on x86_64 only. enable_language (ASM) -add_library (glibc-compatibility glibc-compatibility.c musl/pipe2.c musl/fallocate.c musl/longjmp.s musl/setjmp.s musl/vasprintf.c musl/lgamma.c) +add_library (glibc-compatibility glibc-compatibility.c musl/pipe2.c musl/fallocate.c musl/longjmp.s musl/vasprintf.c musl/lgamma.c) add_subdirectory (tests) diff --git a/libs/libglibc-compatibility/glibc-compatibility.c b/libs/libglibc-compatibility/glibc-compatibility.c index 594517bd9e0..5f9c1378378 100644 --- a/libs/libglibc-compatibility/glibc-compatibility.c +++ b/libs/libglibc-compatibility/glibc-compatibility.c @@ -67,38 +67,13 @@ int __poll_chk(struct pollfd * fds, nfds_t nfds, int timeout, size_t fdslen) #include - -void __attribute__ ((__noreturn__)) musl_longjmp(jmp_buf env, int val); -int musl_setjmp(jmp_buf env); +void musl_glibc_longjmp(jmp_buf env, int val); /// NOTE This disables some of FORTIFY_SOURCE functionality. void __longjmp_chk(jmp_buf env, int val) { - if (env->__mask_was_saved != 0) - { - sigprocmask(SIG_SETMASK, &env->__saved_mask, NULL); - } - musl_longjmp(env, val); -} - -int _setjmp(jmp_buf env) -{ - return musl_setjmp(env); -} - -int sigsetjmp(sigjmp_buf env, int save_sigmask) -{ - if (save_sigmask) - { - env->__mask_was_saved = 1; - sigprocmask(SIG_BLOCK, NULL, &env->__saved_mask); - } - else - { - env->__mask_was_saved = 0; - } - return musl_setjmp(env); + musl_glibc_longjmp(env, val); } #include diff --git a/libs/libglibc-compatibility/musl/longjmp.s b/libs/libglibc-compatibility/musl/longjmp.s index 2ed7642906d..2d1e26f2f99 100644 --- a/libs/libglibc-compatibility/musl/longjmp.s +++ b/libs/libglibc-compatibility/musl/longjmp.s @@ -1,19 +1,22 @@ /* Copyright 2011-2012 Nicholas J. Kain, licensed under standard MIT license */ -.global musl_longjmp -.type musl_longjmp,@function -musl_longjmp: - mov %rsi,%rax /* val will be longjmp return */ - test %rax,%rax - jnz 1f - inc %rax /* if val==0, val=1 per longjmp semantics */ -1: - mov (%rdi),%rbx /* rdi is the jmp_buf, restore regs from it */ - mov 8(%rdi),%rbp - mov 16(%rdi),%r12 - mov 24(%rdi),%r13 - mov 32(%rdi),%r14 - mov 40(%rdi),%r15 - mov 48(%rdi),%rdx /* this ends up being the stack pointer */ - mov %rdx,%rsp - mov 56(%rdi),%rdx /* this is the instruction pointer */ - jmp *%rdx /* goto saved address without altering rsp */ +.global musl_glibc_longjmp +.type musl_glibc_longjmp,@function +musl_glibc_longjmp: + mov 0x30(%rdi),%r8 + mov 0x8(%rdi),%r9 + mov 0x38(%rdi),%rdx + ror $0x11,%r8 + xor %fs:0x30,%r8 /* this ends up being the stack pointer */ + ror $0x11,%r9 + xor %fs:0x30,%r9 + ror $0x11,%rdx + xor %fs:0x30,%rdx /* this is the instruction pointer */ + mov (%rdi),%rbx /* rdi is the jmp_buf, restore regs from it */ + mov 0x10(%rdi),%r12 + mov 0x18(%rdi),%r13 + mov 0x20(%rdi),%r14 + mov 0x28(%rdi),%r15 + mov %esi,%eax + mov %r8,%rsp + mov %r9,%rbp + jmpq *%rdx /* goto saved address without altering rsp */ diff --git a/libs/libglibc-compatibility/musl/setjmp.s b/libs/libglibc-compatibility/musl/setjmp.s deleted file mode 100644 index c612db84bd1..00000000000 --- a/libs/libglibc-compatibility/musl/setjmp.s +++ /dev/null @@ -1,16 +0,0 @@ -/* Copyright 2011-2012 Nicholas J. Kain, licensed under standard MIT license */ -.global musl_setjmp -.type musl_setjmp,@function -musl_setjmp: - mov %rbx,(%rdi) /* rdi is jmp_buf, move registers onto it */ - mov %rbp,8(%rdi) - mov %r12,16(%rdi) - mov %r13,24(%rdi) - mov %r14,32(%rdi) - mov %r15,40(%rdi) - lea 8(%rsp),%rdx /* this is our rsp WITHOUT current ret addr */ - mov %rdx,48(%rdi) - mov (%rsp),%rdx /* save return addr ptr for new rip */ - mov %rdx,56(%rdi) - xor %rax,%rax /* always return 0 */ - ret From 6628b5d30800d6419b647fac29040b8236c49d71 Mon Sep 17 00:00:00 2001 From: robot-metrika-test Date: Sat, 7 Oct 2017 22:01:53 +0300 Subject: [PATCH 008/109] Auto version update to [54299] --- dbms/cmake/version.cmake | 4 ++-- debian/changelog | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/dbms/cmake/version.cmake b/dbms/cmake/version.cmake index cbaed040a12..58f6c0dfb59 100644 --- a/dbms/cmake/version.cmake +++ b/dbms/cmake/version.cmake @@ -1,6 +1,6 @@ # This strings autochanged from release_lib.sh: -set(VERSION_DESCRIBE v1.1.54297-testing) -set(VERSION_REVISION 54297) +set(VERSION_DESCRIBE v1.1.54299-testing) +set(VERSION_REVISION 54299) # end of autochange set (VERSION_MAJOR 1) diff --git a/debian/changelog b/debian/changelog index 403d0960054..5c16f15c2d4 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,5 +1,5 @@ -clickhouse (1.1.54297) unstable; urgency=low +clickhouse (1.1.54299) unstable; urgency=low * Modified source code - -- Thu, 05 Oct 2017 12:22:56 +0300 + -- Sat, 07 Oct 2017 22:01:52 +0300 From 28bb5e25cf8c9ddbbb4330c2c262a1918d65e18f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marek=20Vavrus=CC=8Ca?= Date: Thu, 28 Sep 2017 00:01:54 -0700 Subject: [PATCH 009/109] AggregateFunctionTopK: read alphaMap for generic * the alpha_map vector always (de)serialises the actual version (could empty sometimes) * AggregateFunctionTopK generic variant deserialises it as well instead of ignoring it * AggregateFunctionTopK generic variant clears the array before deserialising refs #1283 --- .../AggregateFunctions/AggregateFunctionTopK.h | 4 ++++ dbms/src/Common/SpaceSaving.h | 16 +++++++++++++++- 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/dbms/src/AggregateFunctions/AggregateFunctionTopK.h b/dbms/src/AggregateFunctions/AggregateFunctionTopK.h index 64938d97f38..814b3564eb8 100644 --- a/dbms/src/AggregateFunctions/AggregateFunctionTopK.h +++ b/dbms/src/AggregateFunctions/AggregateFunctionTopK.h @@ -195,7 +195,9 @@ public: { auto & set = this->data(place).value; set.resize(reserved); + set.clear(); + // Specialised here because there's no deserialiser for StringRef size_t count = 0; readVarUInt(count, buf); for (size_t i = 0; i < count; ++i) { @@ -206,6 +208,8 @@ public: set.insert(ref, count, error); arena->rollback(ref.size); } + + set.readAlphaMap(buf); } void addImpl(AggregateDataPtr place, const IColumn & column, size_t row_num, Arena * arena) const diff --git a/dbms/src/Common/SpaceSaving.h b/dbms/src/Common/SpaceSaving.h index 6e5f39725aa..ebf8659b32a 100644 --- a/dbms/src/Common/SpaceSaving.h +++ b/dbms/src/Common/SpaceSaving.h @@ -130,6 +130,11 @@ public: return m_capacity; } + void clear() + { + return destroyElements(); + } + void resize(size_t new_capacity) { counter_list.reserve(new_capacity); @@ -255,6 +260,8 @@ public: writeVarUInt(size(), wb); for (auto counter : counter_list) counter->write(wb); + + writeVarUInt(alpha_map.size(), wb); for (auto alpha : alpha_map) writeVarUInt(alpha, wb); } @@ -273,7 +280,14 @@ public: push(counter); } - for (size_t i = 0; i < nextAlphaSize(m_capacity); ++i) + readAlphaMap(rb); + } + + void readAlphaMap(ReadBuffer & rb) + { + size_t alpha_size = 0; + readVarUInt(alpha_size, rb); + for (size_t i = 0; i < alpha_size; ++i) { UInt64 alpha = 0; readVarUInt(alpha, rb); From 6e5ea5cc10f7c07786faff0c593f347aa1d0d75b Mon Sep 17 00:00:00 2001 From: alexey-milovidov Date: Mon, 9 Oct 2017 01:09:00 +0300 Subject: [PATCH 010/109] Update AggregateFunctionTopK.h --- dbms/src/AggregateFunctions/AggregateFunctionTopK.h | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/dbms/src/AggregateFunctions/AggregateFunctionTopK.h b/dbms/src/AggregateFunctions/AggregateFunctionTopK.h index 814b3564eb8..656d25d0235 100644 --- a/dbms/src/AggregateFunctions/AggregateFunctionTopK.h +++ b/dbms/src/AggregateFunctions/AggregateFunctionTopK.h @@ -197,10 +197,11 @@ public: set.resize(reserved); set.clear(); - // Specialised here because there's no deserialiser for StringRef + // Specialized here because there's no deserialiser for StringRef size_t count = 0; readVarUInt(count, buf); - for (size_t i = 0; i < count; ++i) { + for (size_t i = 0; i < count; ++i) + { auto ref = readStringBinaryInto(*arena, buf); UInt64 count, error; readVarUInt(count, buf); @@ -215,7 +216,8 @@ public: void addImpl(AggregateDataPtr place, const IColumn & column, size_t row_num, Arena * arena) const { auto & set = this->data(place).value; - if (set.capacity() != reserved) { + if (set.capacity() != reserved) + { set.resize(reserved); } From 2dfb3fa4633d0479aa87b6405530fda129adcfd0 Mon Sep 17 00:00:00 2001 From: alexey-milovidov Date: Mon, 9 Oct 2017 01:10:13 +0300 Subject: [PATCH 011/109] Update AggregateFunctionTopK.h --- dbms/src/AggregateFunctions/AggregateFunctionTopK.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dbms/src/AggregateFunctions/AggregateFunctionTopK.h b/dbms/src/AggregateFunctions/AggregateFunctionTopK.h index 656d25d0235..be76c718f14 100644 --- a/dbms/src/AggregateFunctions/AggregateFunctionTopK.h +++ b/dbms/src/AggregateFunctions/AggregateFunctionTopK.h @@ -194,8 +194,8 @@ public: void deserialize(AggregateDataPtr place, ReadBuffer & buf, Arena * arena) const override { auto & set = this->data(place).value; - set.resize(reserved); set.clear(); + set.resize(reserved); // Specialized here because there's no deserialiser for StringRef size_t count = 0; From 1405415f9430c9f237b2a4703b51b325aa39932e Mon Sep 17 00:00:00 2001 From: Alexey Milovidov Date: Mon, 9 Oct 2017 01:53:38 +0300 Subject: [PATCH 012/109] Miscellaneous [#CLICKHOUSE-3]. --- dbms/src/AggregateFunctions/AggregateFunctionTopK.h | 12 ++++++------ dbms/src/Common/SpaceSaving.h | 6 ++++-- dbms/src/Interpreters/Settings.h | 12 ++++++------ dbms/src/Parsers/ParserQuery.cpp | 1 - utils/prepare-environment/install-clang.sh | 2 +- website/README.md | 9 +++++++++ 6 files changed, 26 insertions(+), 16 deletions(-) diff --git a/dbms/src/AggregateFunctions/AggregateFunctionTopK.h b/dbms/src/AggregateFunctions/AggregateFunctionTopK.h index be76c718f14..2e69421577d 100644 --- a/dbms/src/AggregateFunctions/AggregateFunctionTopK.h +++ b/dbms/src/AggregateFunctions/AggregateFunctionTopK.h @@ -107,8 +107,8 @@ public: ColumnArray::Offsets_t & offsets_to = arr_to.getOffsets(); const typename State::Set & set = this->data(place).value; - auto resultVec = set.topK(threshold); - size_t size = resultVec.size(); + auto result_vec = set.topK(threshold); + size_t size = result_vec.size(); offsets_to.push_back((offsets_to.size() == 0 ? 0 : offsets_to.back()) + size); @@ -117,7 +117,7 @@ public: data_to.resize(old_size + size); size_t i = 0; - for (auto it = resultVec.begin(); it != resultVec.end(); ++it, ++i) + for (auto it = result_vec.begin(); it != result_vec.end(); ++it, ++i) data_to[old_size + i] = it->key; } @@ -236,10 +236,10 @@ public: ColumnArray::Offsets_t & offsets_to = arr_to.getOffsets(); IColumn & data_to = arr_to.getData(); - auto resultVec = this->data(place).value.topK(threshold); - offsets_to.push_back((offsets_to.size() == 0 ? 0 : offsets_to.back()) + resultVec.size()); + auto result_vec = this->data(place).value.topK(threshold); + offsets_to.push_back((offsets_to.size() == 0 ? 0 : offsets_to.back()) + result_vec.size()); - for (auto & elem : resultVec) + for (auto & elem : result_vec) { deserializeAndInsert(elem.key, data_to); } diff --git a/dbms/src/Common/SpaceSaving.h b/dbms/src/Common/SpaceSaving.h index ebf8659b32a..079570b4129 100644 --- a/dbms/src/Common/SpaceSaving.h +++ b/dbms/src/Common/SpaceSaving.h @@ -30,7 +30,8 @@ namespace DB * Arena interface to allow specialized storage of keys. * POD keys do not require additional storage, so this interface is empty. */ -template struct SpaceSavingArena +template +struct SpaceSavingArena { SpaceSavingArena() {} const TKey emplace(const TKey & key) { return key; } @@ -42,7 +43,8 @@ template struct SpaceSavingArena * Keys of this type that are retained on insertion must be serialised into local storage, * otherwise the reference would be invalid after the processed block is released. */ -template <> struct SpaceSavingArena +template <> +struct SpaceSavingArena { const StringRef emplace(const StringRef & key) { diff --git a/dbms/src/Interpreters/Settings.h b/dbms/src/Interpreters/Settings.h index 16afbbe1fba..18275e27771 100644 --- a/dbms/src/Interpreters/Settings.h +++ b/dbms/src/Interpreters/Settings.h @@ -193,13 +193,13 @@ struct Settings M(SettingUInt64, table_function_remote_max_addresses, 1000) \ /** Settings to reduce the number of threads in case of slow reads. */ \ /** Pay attention only to readings that took at least that much time. */ \ - M(SettingMilliseconds, read_backoff_min_latency_ms, 1000) \ + M(SettingMilliseconds, read_backoff_min_latency_ms, 1000) \ /** Count events when the bandwidth is less than that many bytes per second. */ \ - M(SettingUInt64, read_backoff_max_throughput, 1048576) \ + M(SettingUInt64, read_backoff_max_throughput, 1048576) \ /** Do not pay attention to the event, if the previous one has passed less than a certain amount of time. */ \ - M(SettingMilliseconds, read_backoff_min_interval_between_events_ms, 1000) \ + M(SettingMilliseconds, read_backoff_min_interval_between_events_ms, 1000) \ /** The number of events after which the number of threads will be reduced. */ \ - M(SettingUInt64, read_backoff_min_events, 2) \ + M(SettingUInt64, read_backoff_min_events, 2) \ \ /** For testing of `exception safety` - throw an exception every time you allocate memory with the specified probability. */ \ M(SettingFloat, memory_tracker_fault_probability, 0.) \ @@ -298,8 +298,8 @@ struct Settings /** If true, and the date parameter of MergeTree engines is an expression (not a column name), \ * it will be interpreted as the partitioning expression, allowing custom partitions. \ * IMPORTANT: Don't use this setting just yet. \ - * It is for testing purposes, the syntax will likely change soon and the server will not be able \ - * to load the tables created this way. You have been warned. \ + * It is for testing purposes, the syntax will likely change soon and the server will not be able \ + * to load the tables created this way. You have been warned. \ */ \ M(SettingBool, experimental_merge_tree_allow_custom_partitions, false) diff --git a/dbms/src/Parsers/ParserQuery.cpp b/dbms/src/Parsers/ParserQuery.cpp index eb2cc792590..efdac16d74c 100644 --- a/dbms/src/Parsers/ParserQuery.cpp +++ b/dbms/src/Parsers/ParserQuery.cpp @@ -19,7 +19,6 @@ bool ParserQuery::parseImpl(Pos & pos, ASTPtr & node, Expected & expected) { ParserQueryWithOutput query_with_output_p; ParserInsertQuery insert_p(end); - ParserDropQuery drop_p; ParserUseQuery use_p; ParserSetQuery set_p; ParserOptimizeQuery optimize_p; diff --git a/utils/prepare-environment/install-clang.sh b/utils/prepare-environment/install-clang.sh index b58e0d8f20a..758a8b80f34 100755 --- a/utils/prepare-environment/install-clang.sh +++ b/utils/prepare-environment/install-clang.sh @@ -8,7 +8,7 @@ BRANCH=trunk THREADS=$(grep -c ^processor /proc/cpuinfo) cd ~ -sudo apt-get install -y subversion cmake3 +sudo apt-get install -y subversion cmake mkdir llvm cd llvm diff --git a/website/README.md b/website/README.md index 95bbeeab0cd..d6abca119c2 100644 --- a/website/README.md +++ b/website/README.md @@ -1,4 +1,13 @@ ClickHouse website quickstart: + +On Linux, do the following: +``` +sudo apt-get install nodejs +sudo ln -s /usr/bin/nodejs /usr/bin/node +sudo npm install gulp-cli -g +sudo npm install gulp -D +``` + 1. Make sure you have `npm`, `docker` and `python` installed and available in your `$PATH`. 2. Run `setup\_gulp.sh` once to install build prerequisites via npm. 3. Use `gulp build` to minify website to "public" subfolder or just `gulp` to run local webserver with livereload serving it (note: livereload browser extension is required to make it actually reload pages on edits automatically). From 975e8575c78892c6217792221ce67a6c37306c05 Mon Sep 17 00:00:00 2001 From: proller Date: Mon, 9 Oct 2017 20:22:15 +0300 Subject: [PATCH 013/109] Add test (failed on version 1.1.54292) (#1328) * Tests: External: rename --use_http => --no_http and fix * Add test (failed on version 1.1.54292) --- .../0_stateless/00507_nullable.reference | 2 + .../queries/0_stateless/00507_nullable.sql | 41 +++++++++++++++++++ 2 files changed, 43 insertions(+) create mode 100644 dbms/tests/queries/0_stateless/00507_nullable.reference create mode 100644 dbms/tests/queries/0_stateless/00507_nullable.sql diff --git a/dbms/tests/queries/0_stateless/00507_nullable.reference b/dbms/tests/queries/0_stateless/00507_nullable.reference new file mode 100644 index 00000000000..1c42f9991e2 --- /dev/null +++ b/dbms/tests/queries/0_stateless/00507_nullable.reference @@ -0,0 +1,2 @@ +1970-01-02 2 0 FAILED 2 +still alive diff --git a/dbms/tests/queries/0_stateless/00507_nullable.sql b/dbms/tests/queries/0_stateless/00507_nullable.sql new file mode 100644 index 00000000000..46e7aef5614 --- /dev/null +++ b/dbms/tests/queries/0_stateless/00507_nullable.sql @@ -0,0 +1,41 @@ +CREATE DATABASE IF NOT EXISTS test; +DROP TABLE IF EXISTS test.runs; +DROP TABLE IF EXISTS test.tests; + +CREATE TABLE test.runs +( + date Date, + id UInt64, + t_id UInt64, + status Enum8('OK' = 1, 'FAILED' = 2, 'SKIPPED' = 3, 'DISCOVERED' = 4), + run_id UInt64 DEFAULT id +) ENGINE = MergeTree(date, (t_id, id), 8192); + +CREATE TABLE test.tests +( + date Date, + id UInt64, + path Nullable(String), + suite_id Nullable(String) +) ENGINE = MergeTree(date, id, 8192); + +INSERT INTO test.tests (date, id) VALUES (1,1); +INSERT INTO test.runs (date, id) VALUES (1,1); +INSERT INTO test.runs (date, id, status) VALUES (1,2, 'FAILED'); +INSERT INTO test.tests (date, id, path) VALUES (1,2 ,'rtline1'); + +SELECT * +FROM test.runs AS r +WHERE (r.status = 'FAILED') AND ( +( + SELECT path + FROM test.tests AS t + WHERE t.id = r.id + LIMIT 1 +) LIKE 'rtline%') +LIMIT 1; + +SELECT 'still alive'; + +DROP TABLE test.runs; +DROP TABLE test.tests; From 56f7f1df72b6048936664d87223783c0fd2a3612 Mon Sep 17 00:00:00 2001 From: proller Date: Mon, 9 Oct 2017 20:41:27 +0300 Subject: [PATCH 014/109] fix cmake --- libs/libglibc-compatibility/tests/CMakeLists.txt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/libs/libglibc-compatibility/tests/CMakeLists.txt b/libs/libglibc-compatibility/tests/CMakeLists.txt index e2a8dfd75be..70a9e056226 100644 --- a/libs/libglibc-compatibility/tests/CMakeLists.txt +++ b/libs/libglibc-compatibility/tests/CMakeLists.txt @@ -1,3 +1,5 @@ +include (${ClickHouse_SOURCE_DIR}/cmake/add_check.cmake) + foreach (T longjmp siglongjmp) add_executable (${T} ${T}.c) target_link_libraries (${T} glibc-compatibility) From 47798f0b8a8e67f81750a326dfbb941d62e5b495 Mon Sep 17 00:00:00 2001 From: proller Date: Tue, 10 Oct 2017 16:32:31 +0300 Subject: [PATCH 015/109] Fix PerformanceTest runs --- dbms/src/Server/PerformanceTest.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dbms/src/Server/PerformanceTest.cpp b/dbms/src/Server/PerformanceTest.cpp index 26e779bfac4..c975898eb37 100644 --- a/dbms/src/Server/PerformanceTest.cpp +++ b/dbms/src/Server/PerformanceTest.cpp @@ -931,7 +931,7 @@ private: else throw DB::Exception("Unknown type " + config_exec_type + " in :" + test_name); - times_to_run = test_config->getUInt("times_to_run"); + times_to_run = test_config->getUInt("times_to_run", 1); stop_conditions_by_run.clear(); TestStopConditions stop_conditions_template; From cbf9aaca9573183826dfb80569804603979b7037 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marek=20Vavru=C5=A1a?= Date: Tue, 3 Oct 2017 17:05:50 -0700 Subject: [PATCH 016/109] dbms: fixed minor mistakes with build * Use std::abs instead of abs() to properly support floats --- dbms/src/Functions/FunctionsFindCluster.h | 4 ++-- dbms/src/Server/PerformanceTest.cpp | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/dbms/src/Functions/FunctionsFindCluster.h b/dbms/src/Functions/FunctionsFindCluster.h index 3b7fd9d9a5d..c8a4b5cf689 100644 --- a/dbms/src/Functions/FunctionsFindCluster.h +++ b/dbms/src/Functions/FunctionsFindCluster.h @@ -52,13 +52,13 @@ size_t find_centroid(Float64 x, std::vector& centroids) { // Centroids array has to have at least one element, and if it has only one element, // it is also the result of this Function. - Float64 distance = abs(centroids[0] - x); + Float64 distance = std::abs(centroids[0] - x); size_t index = 0; // Check if we have more clusters and if we have, whether some is closer to src[i] for (size_t j = 1; j < centroids.size(); ++j) { - Float64 next_distance = abs(centroids[j] - x); + Float64 next_distance = std::abs(centroids[j] - x); if (next_distance < distance) { diff --git a/dbms/src/Server/PerformanceTest.cpp b/dbms/src/Server/PerformanceTest.cpp index 26e779bfac4..aa913a0f921 100644 --- a/dbms/src/Server/PerformanceTest.cpp +++ b/dbms/src/Server/PerformanceTest.cpp @@ -390,7 +390,7 @@ struct Stats avg_speed_first = avg_speed_value; } - if (abs(avg_speed_value - avg_speed_first) >= precision) + if (std::abs(avg_speed_value - avg_speed_first) >= precision) { avg_speed_first = avg_speed_value; avg_speed_watch.restart(); From 011658bb0275bbf88795d0ff9e6211a2755d581e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marek=20Vavrus=CC=8Ca?= Date: Thu, 5 Oct 2017 21:40:18 -0700 Subject: [PATCH 017/109] contrib: include librdkafka as submodule --- .gitmodules | 3 +++ CMakeLists.txt | 1 + cmake/find_lz4.cmake | 1 + cmake/find_rdkafka.cmake | 17 +++++++++++++++++ contrib/CMakeLists.txt | 7 +++++++ contrib/librdkafka | 1 + dbms/CMakeLists.txt | 3 +++ 7 files changed, 33 insertions(+) create mode 100644 cmake/find_rdkafka.cmake create mode 160000 contrib/librdkafka diff --git a/.gitmodules b/.gitmodules index e69de29bb2d..e6a61f7d478 100644 --- a/.gitmodules +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "contrib/librdkafka"] + path = contrib/librdkafka + url = https://github.com/edenhill/librdkafka.git diff --git a/CMakeLists.txt b/CMakeLists.txt index a73871109ae..0b578387c47 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -229,6 +229,7 @@ include (cmake/find_rt.cmake) include (cmake/find_readline_edit.cmake) include (cmake/find_zookeeper.cmake) include (cmake/find_re2.cmake) +include (cmake/find_rdkafka.cmake) include (cmake/find_contrib_lib.cmake) find_contrib_lib(cityhash) diff --git a/cmake/find_lz4.cmake b/cmake/find_lz4.cmake index f7c703fe44a..c029a29c38e 100644 --- a/cmake/find_lz4.cmake +++ b/cmake/find_lz4.cmake @@ -8,6 +8,7 @@ endif () if (LZ4_LIBRARY AND LZ4_INCLUDE_DIR) include_directories (${LZ4_INCLUDE_DIR}) else () + set (LZ4_INCLUDE_DIR ${ClickHouse_SOURCE_DIR}/contrib/liblz4/include/lz4) set (USE_INTERNAL_LZ4_LIBRARY 1) set (LZ4_LIBRARY lz4) endif () diff --git a/cmake/find_rdkafka.cmake b/cmake/find_rdkafka.cmake new file mode 100644 index 00000000000..68a16c38524 --- /dev/null +++ b/cmake/find_rdkafka.cmake @@ -0,0 +1,17 @@ +option (USE_INTERNAL_RDKAFKA_LIBRARY "Set to FALSE to use system librdkafka instead of the bundled" ${NOT_UNBUNDLED}) + +if (NOT USE_INTERNAL_RDKAFKA_LIBRARY) + find_library (RDKAFKA_LIBRARY rdkafka) + find_path (RDKAFKA_INCLUDE_DIR NAMES librdkafka/rdkafka.h PATHS ${RDKAFKA_INCLUDE_PATHS}) +endif () + +if (RDKAFKA_LIBRARY AND RDKAFKA_INCLUDE_DIR) + include_directories (${RDKAFKA_INCLUDE_DIR}) +else () + set (USE_INTERNAL_RDKAFKA_LIBRARY 1) + set (RDKAFKA_INCLUDE_DIR "${ClickHouse_SOURCE_DIR}/contrib/librdkafka/src") + set (RDKAFKA_LIBRARY rdkafka) + set (USE_RDKAFKA 1) +endif () + +message (STATUS "Using librdkafka: ${RDKAFKA_INCLUDE_DIR} : ${RDKAFKA_LIBRARY}") diff --git a/contrib/CMakeLists.txt b/contrib/CMakeLists.txt index bb61c089acc..d9a2304068f 100644 --- a/contrib/CMakeLists.txt +++ b/contrib/CMakeLists.txt @@ -63,3 +63,10 @@ endif () if (NOT ARCH_ARM) add_subdirectory (libcpuid) endif () + +if (USE_INTERNAL_RDKAFKA_LIBRARY) + set(RDKAFKA_BUILD_EXAMPLES OFF) + set(RDKAFKA_BUILD_TESTS OFF) + mark_as_advanced(ZLIB_INCLUDE_DIR) + add_subdirectory (librdkafka) +endif () \ No newline at end of file diff --git a/contrib/librdkafka b/contrib/librdkafka new file mode 160000 index 00000000000..c44f40be965 --- /dev/null +++ b/contrib/librdkafka @@ -0,0 +1 @@ +Subproject commit c44f40be96556ab8145f0f5bcaa500d16d4e0fc4 diff --git a/dbms/CMakeLists.txt b/dbms/CMakeLists.txt index 6ae88e0df3e..73fc076a911 100644 --- a/dbms/CMakeLists.txt +++ b/dbms/CMakeLists.txt @@ -181,6 +181,7 @@ target_link_libraries (dbms ${Boost_SYSTEM_LIBRARY} ${Poco_Data_LIBRARY} ${BTRIE_LIBRARIES} + ${RDKAFKA_LIBRARY} ) if (Poco_DataODBC_FOUND) @@ -209,8 +210,10 @@ target_link_libraries (dbms target_include_directories (dbms BEFORE PRIVATE ${DIVIDE_INCLUDE_DIR}) target_include_directories (dbms BEFORE PRIVATE ${SPARCEHASH_INCLUDE_DIR}) +target_include_directories (dbms BEFORE PRIVATE ${LZ4_INCLUDE_DIR}) target_include_directories (dbms PUBLIC ${DBMS_INCLUDE_DIR}) target_include_directories (dbms PUBLIC ${PCG_RANDOM_INCLUDE_DIR}) +target_include_directories (dbms PUBLIC ${RDKAFKA_INCLUDE_DIR}) # only for copy_headers.sh: target_include_directories (dbms PRIVATE ${COMMON_INCLUDE_DIR}) From 4fb570fa5e51ae8ad22e5404e90f2e67c0ecb3fa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marek=20Vavrus=CC=8Ca?= Date: Tue, 3 Oct 2017 16:43:55 -0700 Subject: [PATCH 018/109] IStorage: allow notification on dependency change This allows sending notifications to supported table engines when their dependencies change. For example, a table can be notified when a MATERIALIZED VIEW is attached to it. This is a building block for building pipelines. --- dbms/src/DataStreams/PushingToViewsBlockOutputStream.h | 6 ++++-- dbms/src/Interpreters/Context.cpp | 10 ++++++++++ dbms/src/Interpreters/InterpreterInsertQuery.cpp | 2 +- dbms/src/Parsers/ASTInsertQuery.h | 4 ++++ dbms/src/Storages/IStorage.h | 4 ++++ 5 files changed, 23 insertions(+), 3 deletions(-) diff --git a/dbms/src/DataStreams/PushingToViewsBlockOutputStream.h b/dbms/src/DataStreams/PushingToViewsBlockOutputStream.h index 21198825a46..654e368e212 100644 --- a/dbms/src/DataStreams/PushingToViewsBlockOutputStream.h +++ b/dbms/src/DataStreams/PushingToViewsBlockOutputStream.h @@ -17,7 +17,7 @@ namespace DB class PushingToViewsBlockOutputStream : public IBlockOutputStream { public: - PushingToViewsBlockOutputStream(String database, String table, const Context & context_, const ASTPtr & query_ptr_) + PushingToViewsBlockOutputStream(String database, String table, const Context & context_, const ASTPtr & query_ptr_, bool no_destination = false) : context(context_), query_ptr(query_ptr_) { storage = context.getTable(database, table); @@ -34,7 +34,9 @@ public: dynamic_cast(*context.getTable(database_table.first, database_table.second)).getInnerQuery(), std::make_shared(database_table.first, database_table.second, context, ASTPtr())); - output = storage->write(query_ptr, context.getSettingsRef()); + /* Do not push to destination table if the flag is set */ + if (!no_destination) + output = storage->write(query_ptr, context.getSettingsRef()); } void write(const Block & block) override diff --git a/dbms/src/Interpreters/Context.cpp b/dbms/src/Interpreters/Context.cpp index 1e0023a1b3e..cb961fbf3b7 100644 --- a/dbms/src/Interpreters/Context.cpp +++ b/dbms/src/Interpreters/Context.cpp @@ -588,6 +588,11 @@ void Context::addDependency(const DatabaseAndTableName & from, const DatabaseAnd checkDatabaseAccessRights(from.first); checkDatabaseAccessRights(where.first); shared->view_dependencies[from].insert(where); + + // Notify table of dependencies change + auto table = tryGetTable(from.first, from.second); + if (table != nullptr) + table->updateDependencies(); } void Context::removeDependency(const DatabaseAndTableName & from, const DatabaseAndTableName & where) @@ -596,6 +601,11 @@ void Context::removeDependency(const DatabaseAndTableName & from, const Database checkDatabaseAccessRights(from.first); checkDatabaseAccessRights(where.first); shared->view_dependencies[from].erase(where); + + // Notify table of dependencies change + auto table = tryGetTable(from.first, from.second); + if (table != nullptr) + table->updateDependencies(); } Dependencies Context::getDependencies(const String & database_name, const String & table_name) const diff --git a/dbms/src/Interpreters/InterpreterInsertQuery.cpp b/dbms/src/Interpreters/InterpreterInsertQuery.cpp index e3ceec26f75..64f83fcb7a8 100644 --- a/dbms/src/Interpreters/InterpreterInsertQuery.cpp +++ b/dbms/src/Interpreters/InterpreterInsertQuery.cpp @@ -93,7 +93,7 @@ BlockIO InterpreterInsertQuery::execute() /// We create a pipeline of several streams, into which we will write data. BlockOutputStreamPtr out; - out = std::make_shared(query.database, query.table, context, query_ptr); + out = std::make_shared(query.database, query.table, context, query_ptr, query.no_destination); out = std::make_shared(out); diff --git a/dbms/src/Parsers/ASTInsertQuery.h b/dbms/src/Parsers/ASTInsertQuery.h index da3ce0cf465..4d8d424487e 100644 --- a/dbms/src/Parsers/ASTInsertQuery.h +++ b/dbms/src/Parsers/ASTInsertQuery.h @@ -17,6 +17,10 @@ public: ASTPtr columns; String format; ASTPtr select; + + // Set to true if the data should only be inserted into attached views + bool no_destination = false; + /// Data to insert const char * data = nullptr; const char * end = nullptr; diff --git a/dbms/src/Storages/IStorage.h b/dbms/src/Storages/IStorage.h index 9d3e72d64ea..dcfef278189 100644 --- a/dbms/src/Storages/IStorage.h +++ b/dbms/src/Storages/IStorage.h @@ -304,6 +304,10 @@ public: /// Otherwise - throws an exception with detailed information or returns false virtual bool checkTableCanBeDropped() const { return true; } + + /** Notify engine about updated dependencies for this storage. */ + virtual void updateDependencies() {} + protected: using ITableDeclaration::ITableDeclaration; using std::enable_shared_from_this::shared_from_this; From 7fc08389c97f83ccbb6c4607f22bd23bf9253373 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marek=20Vavrus=CC=8Ca?= Date: Tue, 3 Oct 2017 16:39:24 -0700 Subject: [PATCH 019/109] Storages: added Kafka table engine (read-only) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Added a new table engine backed by Apache Kafka, it allows near real-time ingestion or ETL with exactly-once semantics. It doesn’t store any data on disk, so data must be materialized into a physical table to allow random access. Currently it only supports reading, no insertion. --- dbms/src/Interpreters/Settings.h | 6 +- dbms/src/Storages/StorageFactory.cpp | 62 ++++ dbms/src/Storages/StorageKafka.cpp | 358 +++++++++++++++++++++++ dbms/src/Storages/StorageKafka.h | 87 ++++++ docs/en/operations/settings/settings.rst | 14 + docs/en/table_engines/kafka.rst | 44 +++ 6 files changed, 570 insertions(+), 1 deletion(-) create mode 100644 dbms/src/Storages/StorageKafka.cpp create mode 100644 dbms/src/Storages/StorageKafka.h create mode 100644 docs/en/table_engines/kafka.rst diff --git a/dbms/src/Interpreters/Settings.h b/dbms/src/Interpreters/Settings.h index 16afbbe1fba..4d2cf4f70c1 100644 --- a/dbms/src/Interpreters/Settings.h +++ b/dbms/src/Interpreters/Settings.h @@ -301,7 +301,11 @@ struct Settings * It is for testing purposes, the syntax will likely change soon and the server will not be able \ * to load the tables created this way. You have been warned. \ */ \ - M(SettingBool, experimental_merge_tree_allow_custom_partitions, false) + M(SettingBool, experimental_merge_tree_allow_custom_partitions, false) \ + /* Timeout for flushing data from streaming storages. */ \ + M(SettingMilliseconds, stream_flush_interval_ms, DEFAULT_QUERY_LOG_FLUSH_INTERVAL_MILLISECONDS) \ + /* Schema identifier (used by schema-based formats) */ \ + M(SettingString, schema, "") /// Possible limits for query execution. diff --git a/dbms/src/Storages/StorageFactory.cpp b/dbms/src/Storages/StorageFactory.cpp index c70a21235cb..29541034e45 100644 --- a/dbms/src/Storages/StorageFactory.cpp +++ b/dbms/src/Storages/StorageFactory.cpp @@ -5,6 +5,8 @@ #include #include +#include + #include #include #include @@ -33,6 +35,7 @@ #include #include #include +#include #include #include @@ -623,6 +626,65 @@ StoragePtr StorageFactory::get( StorageTrivialBuffer::Thresholds{max_time, max_rows, max_bytes}, destination_database, destination_table); } + else if (name == "Kafka") + { + /** Arguments of engine is following: + * - Kafka broker list + * - List of topics + * - Group ID (may be a constaint expression with a string result) + * - Message format (string) + * - Schema (optional, if the format supports it) + */ + ASTs & args_func = typeid_cast(*typeid_cast(*query).storage).children; + + const auto params_error_message = "Storage Kafka requires 4 parameters" + " - Kafka broker list, list of topics to consume, consumer group ID, message format"; + + if (args_func.size() != 1) + throw Exception(params_error_message, ErrorCodes::NUMBER_OF_ARGUMENTS_DOESNT_MATCH); + + ASTs & args = typeid_cast(*args_func.at(0)).children; + + if (args.size() != 4 && args.size() != 5) + throw Exception(params_error_message, ErrorCodes::NUMBER_OF_ARGUMENTS_DOESNT_MATCH); + + String brokers; + auto ast = typeid_cast(&*args[0]); + if (ast && ast->value.getType() == Field::Types::String) + brokers = safeGet(ast->value); + else + throw Exception(String("Kafka broker list must be a string"), ErrorCodes::BAD_ARGUMENTS); + + args[1] = evaluateConstantExpressionAsLiteral(args[1], local_context); + args[2] = evaluateConstantExpressionOrIdentifierAsLiteral(args[2], local_context); + args[3] = evaluateConstantExpressionOrIdentifierAsLiteral(args[3], local_context); + + // Additionally parse schema if supported + String schema; + if (args.size() == 5) + { + args[4] = evaluateConstantExpressionOrIdentifierAsLiteral(args[4], local_context); + schema = static_cast(*args[4]).value.safeGet(); + } + + // Parse topic list and consumer group + Names topics; + topics.push_back(static_cast(*args[1]).value.safeGet()); + String group = static_cast(*args[2]).value.safeGet(); + + // Parse format from string + String format; + ast = typeid_cast(&*args[3]); + if (ast && ast->value.getType() == Field::Types::String) + format = safeGet(ast->value); + else + throw Exception(String("Format must be a string"), ErrorCodes::BAD_ARGUMENTS); + + return StorageKafka::create( + table_name, database_name, context, columns, + materialized_columns, alias_columns, column_defaults, + brokers, group, topics, format, schema); + } else if (endsWith(name, "MergeTree")) { /** [Replicated][|Summing|Collapsing|Aggregating|Unsorted|Replacing|Graphite]MergeTree (2 * 7 combinations) engines diff --git a/dbms/src/Storages/StorageKafka.cpp b/dbms/src/Storages/StorageKafka.cpp new file mode 100644 index 00000000000..2672257b4fd --- /dev/null +++ b/dbms/src/Storages/StorageKafka.cpp @@ -0,0 +1,358 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +#include + +namespace DB +{ + +namespace ErrorCodes +{ + extern const int INCORRECT_DATA; + extern const int UNKNOWN_EXCEPTION; + extern const int CANNOT_READ_FROM_ISTREAM; +} + +/// How long to wait for a single message (applies to each individual message) +static const auto READ_POLL_MS = 1 * 1000; +static const auto CLEANUP_TIMEOUT_MS = 2 * 1000; + +/// How many messages to pull out of internal queue at once +static const auto BATCH_SIZE_MAX = 16UL; + +class ReadBufferFromKafkaConsumer : public ReadBuffer +{ + using Messages = std::vector; + + rd_kafka_t * consumer; + Messages messages; + Messages::iterator current; + Messages::iterator end; + Poco::Logger * log; + + bool nextImpl() override + { + if (current == end) + { + // Fetch next batch of messages + bool res = fetchMessages(); + if (!res) + { + LOG_ERROR(log, "Consumer error: " << rd_kafka_err2str(rd_kafka_last_error())); + return false; + } + + // No error, but no messages read + if (current == end) + return false; + } + + // Process next buffered message + rd_kafka_message_t * msg = *(current++); + if (msg->err) + { + if (msg->err != RD_KAFKA_RESP_ERR__PARTITION_EOF) + LOG_ERROR(log, "Consumer error: " << rd_kafka_err2str(msg->err) << " " << rd_kafka_message_errstr(msg)); + return false; + } + + // Consume message and mark the topic/partition offset + BufferBase::set(reinterpret_cast(msg->payload), msg->len, 0); + auto err = rd_kafka_offset_store(msg->rkt, msg->partition, msg->offset); + if (err) + LOG_ERROR(log, "Failed to store offsets: " << rd_kafka_err2str(err)); + + return true; + } + + void reset() + { + for (auto it = messages.begin(); it < end; ++it) + rd_kafka_message_destroy(*it); + + current = end = messages.begin(); + } + + bool fetchMessages() + { + rd_kafka_queue_t* queue = rd_kafka_queue_get_consumer(consumer); + if (queue == nullptr) + return false; + + reset(); + + auto result = rd_kafka_consume_batch_queue(queue, READ_POLL_MS, messages.data(), messages.size()); + if (result < 0) + return false; + + current = messages.begin(); + end = current + result; + return true; + } + +public: + ReadBufferFromKafkaConsumer(rd_kafka_t * consumer_, size_t batch_size, Poco::Logger * log_) + : ReadBuffer(nullptr, 0), consumer(consumer_), messages(batch_size), current(messages.begin()), end(messages.begin()), log(log_) {} + + ~ReadBufferFromKafkaConsumer() { reset(); } +}; + +class KafkaBlockInputStream : public IProfilingBlockInputStream +{ +public: + + KafkaBlockInputStream(StorageKafka & storage_, const Context & context_, const String & schema, size_t max_block_size) + : storage(storage_) + { + // Always skip unknown fields regardless of the context (JSON or TSKV) + Context context = context_; + context.setSetting("input_format_skip_unknown_fields", 1UL); + if (schema.size() > 0) + context.setSetting("schema", schema); + // Create a formatted reader on Kafka messages + LOG_TRACE(storage.log, "Creating formatted reader"); + read_buf = std::make_unique(storage.consumer, max_block_size, storage.log); + reader = FormatFactory().getInput(storage.format_name, *read_buf, storage.getSampleBlock(), context, max_block_size); + } + + ~KafkaBlockInputStream() override + { + } + + String getName() const override + { + return storage.getName(); + } + + String getID() const override + { + std::stringstream res_stream; + res_stream << "Kafka(" << storage.topics.size() << ", " << storage.format_name << ")"; + return res_stream.str(); + } + + Block readImpl() override + { + if (isCancelled()) + return {}; + + return reader->read(); + } + + void readPrefixImpl() override + { + reader->readPrefix(); + } + + void readSuffixImpl() override + { + reader->readSuffix(); + } + +private: + StorageKafka & storage; + rd_kafka_t * consumer; + Block sample_block; + std::unique_ptr read_buf; + BlockInputStreamPtr reader; +}; + +StorageKafka::StorageKafka( + const std::string & table_name_, + const std::string & database_name_, + Context & context_, + NamesAndTypesListPtr columns_, + const NamesAndTypesList & materialized_columns_, + const NamesAndTypesList & alias_columns_, + const ColumnDefaults & column_defaults_, + const String & brokers_, const String & group_, const Names & topics_, + const String & format_name_, const String & schema_name_) + : IStorage{materialized_columns_, alias_columns_, column_defaults_}, + table_name(table_name_), database_name(database_name_), context(context_), + columns(columns_), topics(topics_), format_name(format_name_), schema_name(schema_name_), + conf(rd_kafka_conf_new()), log(&Logger::get("StorageKafka (" + table_name_ + ")")) +{ + char errstr[512]; + + LOG_TRACE(log, "Setting brokers: " << brokers_); + if (rd_kafka_conf_set(conf, "metadata.broker.list", brokers_.c_str(), errstr, sizeof(errstr)) != RD_KAFKA_CONF_OK) + throw Exception(String(errstr), ErrorCodes::INCORRECT_DATA); + + LOG_TRACE(log, "Setting Group ID: " << group_ << " Client ID: clickhouse"); + + if (rd_kafka_conf_set(conf, "group.id", group_.c_str(), errstr, sizeof(errstr)) != RD_KAFKA_CONF_OK) + throw Exception(String(errstr), ErrorCodes::INCORRECT_DATA); + + if (rd_kafka_conf_set(conf, "client.id", "clickhouse", errstr, sizeof(errstr)) != RD_KAFKA_CONF_OK) + throw Exception(String(errstr), ErrorCodes::INCORRECT_DATA); + + // Don't store offsets of messages before they're processed + rd_kafka_conf_set(conf, "enable.auto.offset.store", "false", NULL, 0); + + // Try to fetch preferred number of bytes before timeout + const Settings & settings = context.getSettingsRef(); + auto min_bytes = settings.preferred_block_size_bytes.toString(); + rd_kafka_conf_set(conf, "fetch.min.bytes", min_bytes.c_str(), NULL, 0); +} + + +BlockInputStreams StorageKafka::read( + const Names & column_names, + const SelectQueryInfo & query_info, + const Context & context, + QueryProcessingStage::Enum & processed_stage, + size_t max_block_size, + unsigned num_streams) +{ + check(column_names); + processed_stage = QueryProcessingStage::FetchColumns; + + if (!conf) + return BlockInputStreams(); + + BlockInputStreams streams; + streams.reserve(num_streams); + + // Note: The block size is set to 1, otherwise it'd have to be able to return excess buffered messages + for (size_t i = 0; i < num_streams; ++i) + streams.push_back(std::make_shared(*this, context, schema_name, 1)); + + LOG_DEBUG(log, "Starting reading " << num_streams << " streams, " << max_block_size << " block size"); + return streams; +} + + +void StorageKafka::startup() +{ + // Create a consumer from saved configuration + char errstr[512]; + consumer = rd_kafka_new(RD_KAFKA_CONSUMER, conf, errstr, sizeof(errstr)); + if (consumer == nullptr) + throw Exception("Failed to create consumer handle: " + String(errstr), ErrorCodes::UNKNOWN_EXCEPTION); + + rd_kafka_poll_set_consumer(consumer); + + // Create a list of partitions + auto * topicList = rd_kafka_topic_partition_list_new(topics.size()); + for (const auto & t : topics) + { + LOG_TRACE(log, "Subscribing to topic: " + t); + rd_kafka_topic_partition_list_add(topicList, t.c_str(), RD_KAFKA_PARTITION_UA); + } + + // Subscribe to requested topics + auto err = rd_kafka_subscribe(consumer, topicList); + if (err) + throw Exception("Failed to subscribe: " + String(rd_kafka_err2str(err)), ErrorCodes::UNKNOWN_EXCEPTION); + + rd_kafka_topic_partition_list_destroy(topicList); + + // Start the reader thread + stream_thread = std::thread(&StorageKafka::streamThread, this); +} + + +void StorageKafka::shutdown() +{ + is_cancelled = true; + cancel_event.set(); + + LOG_TRACE(log, "Unsubscribing from assignments"); + rd_kafka_unsubscribe(consumer); + auto err = rd_kafka_consumer_close(consumer); + if (err) + { + LOG_ERROR(log, "Failed to close: " + String(rd_kafka_err2str(err))); + } + + LOG_TRACE(log, "Destroying consumer"); + rd_kafka_destroy(consumer); + if (stream_thread.joinable()) + stream_thread.join(); + + rd_kafka_wait_destroyed(CLEANUP_TIMEOUT_MS); +} + + +void StorageKafka::updateDependencies() +{ + cancel_event.set(); +} + + +void StorageKafka::streamThread() +{ + setThreadName("KafkaStreamThread"); + + while (!is_cancelled) + { + try + { + auto dependencies = context.getDependencies(database_name, table_name); + if (dependencies.size() > 0) + { + LOG_DEBUG(log, "Started streaming to " << dependencies.size() << " attached views"); + streamToViews(); + LOG_DEBUG(log, "Stopped streaming to views"); + } + } + catch (...) + { + tryLogCurrentException(__PRETTY_FUNCTION__); + } + + cancel_event.tryWait(READ_POLL_MS); + } + + LOG_DEBUG(log, "Stream thread finished"); +} + + +void StorageKafka::streamToViews() +{ + auto table = context.getTable(database_name, table_name); + if (!table) + { + LOG_WARNING(log, "Destination table " << database_name << "." << table_name << " doesn't exist."); + return; + } + + // Create an INSERT query for streaming data + auto insert = std::make_shared(); + insert->database = database_name; + insert->table = table_name; + insert->no_destination = true; // Only insert into dependent views + + // Limit the number of batched messages to allow early cancellations + const Settings & settings = context.getSettingsRef(); + const size_t block_size = std::min(settings.max_block_size.value, BATCH_SIZE_MAX); + BlockInputStreamPtr in = std::make_shared(*this, context, schema_name, block_size); + + // Limit read batch to maximum block size to allow DDL + IProfilingBlockInputStream::LocalLimits limits; + limits.max_execution_time = settings.stream_flush_interval_ms; + limits.timeout_overflow_mode = OverflowMode::BREAK; + if (IProfilingBlockInputStream * p_stream = dynamic_cast(in.get())) + p_stream->setLimits(limits); + + // Execute the query + InterpreterInsertQuery interpreter{insert, context}; + auto block_io = interpreter.execute(); + copyData(*in, *block_io.out); +} + + +} diff --git a/dbms/src/Storages/StorageKafka.h b/dbms/src/Storages/StorageKafka.h new file mode 100644 index 00000000000..4fc8786867c --- /dev/null +++ b/dbms/src/Storages/StorageKafka.h @@ -0,0 +1,87 @@ +#pragma once + +#include + +#include +#include +#include +#include +#include + +struct rd_kafka_s; +struct rd_kafka_conf_s; + +namespace DB +{ + +class StorageKafka; + +/** Implements a Kafka queue table engine that can be used as a persistent queue / buffer, + * or as a basic building block for creating pipelines with a continuous insertion / ETL. + */ +class StorageKafka : public ext::shared_ptr_helper, public IStorage +{ +friend class ext::shared_ptr_helper; +friend class KafkaBlockInputStream; +friend class KafkaBlockOutputStream; + +public: + std::string getName() const override { return "Kafka"; } + std::string getTableName() const override { return table_name; } + std::string getDatabaseName() const { return database_name; } + + const NamesAndTypesList & getColumnsListImpl() const override { return *columns; } + + void startup() override; + void shutdown() override; + + BlockInputStreams read( + const Names & column_names, + const SelectQueryInfo & query_info, + const Context & context, + QueryProcessingStage::Enum & processed_stage, + size_t max_block_size, + unsigned num_streams) override; + + void rename(const String & new_path_to_db, const String & new_database_name, const String & new_table_name) override + { + table_name = new_table_name; + database_name = new_database_name; + } + + void updateDependencies() override; + + +private: + String table_name; + String database_name; + Context & context; + NamesAndTypesListPtr columns; + Names topics; + const String format_name; + const String schema_name; + struct rd_kafka_conf_s * conf; + struct rd_kafka_s * consumer; + + std::mutex mutex; + Poco::Logger * log; + Poco::Event cancel_event; + std::atomic is_cancelled{false}; + std::thread stream_thread; + + StorageKafka( + const std::string & table_name_, + const std::string & database_name_, + Context & context_, + NamesAndTypesListPtr columns_, + const NamesAndTypesList & materialized_columns_, + const NamesAndTypesList & alias_columns_, + const ColumnDefaults & column_defaults_, + const String & brokers_, const String & group_, const Names & topics_, + const String & format_name_, const String & schema_name_); + + void streamThread(); + void streamToViews(); +}; + +} diff --git a/docs/en/operations/settings/settings.rst b/docs/en/operations/settings/settings.rst index 8a10065922f..6297a3e3373 100644 --- a/docs/en/operations/settings/settings.rst +++ b/docs/en/operations/settings/settings.rst @@ -209,3 +209,17 @@ output_format_json_quote_64bit_integers If the parameter is true (default value), UInt64 and Int64 numbers are printed as quoted strings in all JSON output formats. Such behavior is compatible with most JavaScript interpreters that stores all numbers as double-precision floating point numbers. Otherwise, they are printed as regular numbers. + +stream_flush_interval_ms +------------------------ +This setting only applies in cases when the server forms blocks from streaming table engines. +Either the timeout happens, or the stream produces ``max_insert_block_size`` rows. + +By default, 7500. + +Lower value results in stream flushing to table more often, so the data appears in the destination table faster. +Setting the value too low may result in excessive insertion frequency and lower ingestion efficiency. + +schema +------ +This parameter only applies when used in conjunction with formats requiring a schema definition, for example Cap'n Proto. The parameter value is specific to the format. diff --git a/docs/en/table_engines/kafka.rst b/docs/en/table_engines/kafka.rst new file mode 100644 index 00000000000..f3d3b9a855a --- /dev/null +++ b/docs/en/table_engines/kafka.rst @@ -0,0 +1,44 @@ +Kafka +----- + +A table engine backed by Apache Kafka, a streaming platform having three key capabilities: + +1. It lets you publish and subscribe to streams of records. In this respect it is similar to a message queue or enterprise messaging system. +2. It lets you store streams of records in a fault-tolerant way. +3. It lets you process streams of records as they occur. + +.. code-block:: text + + Kafka(broker_list, topic_list, group_name, format[, schema]) + +Engine parameters: +broker_list - A comma-separated list of brokers (``localhost:9092``). +topic_list - List of Kafka topics to consume (``my_topic``). +group_name - Kafka consumer group name (``group1``). Read offsets are tracked for each consumer group, if you want to consume messages exactly once across cluster, you should use the same group name. +format - Name of the format used to deserialize messages. It accepts the same values as the ``FORMAT`` SQL statement, for example ``JSONEachRow``. +schema - Optional schema value for formats that require a schema to interpret consumed messages, for example Cap'n Proto format requires a path to schema file and root object - ``schema.capnp:Message``. Self-describing formats such as JSON don't require any schema. + +Example: + +.. code-block:: sql + + CREATE TABLE queue (timestamp UInt64, level String, message String) ENGINE = Kafka('localhost:9092', 'topic', 'group1', 'JSONEachRow'); + SELECT * FROM queue LIMIT 5 + +The consumed messages are tracked automatically in the background, so each message will be read exactly once in a single consumer group. If you want to consume the same set of messages twice, you can create a copy of the table with a different ``group_name``. The consumer group is elastic and synchronised across the cluster, for example if you have 10 topic/partitions and 5 instances of the table across cluster, it will automatically assign 2 topic/partitions per instace. If you detach a table, or add new instances, it will rebalance topic/partition allocations automatically. See http://kafka.apache.org/intro for more information about how this works. + +Reading messages directly however is not very useful, the table engine is typically used to build real-time ingestion pipelines using MATERIALIZED VIEW. If a MATERIALIZED VIEW is attached to a Kafka table engine, it will start consuming messages in the background, and push them into the attached views. This allows you to continuously ingest messages from Kafka and transform them using the SELECT statement into appropriate format. + +Example: + +.. code-block:: sql + + CREATE TABLE queue (timestamp UInt64, level String, message String) ENGINE = Kafka('localhost:9092', 'topic', 'group1', 'JSONEachRow'); + + CREATE MATERIALIZED VIEW daily ENGINE = SummingMergeTree(day, (day, level), 8192) AS + SELECT toDate(toDateTime(timestamp)) AS day, level, count() as total + FROM queue GROUP BY day, level; + + SELECT level, sum(total) FROM daily GROUP BY level; + +The messages are streamed into the attached view immediately in the same way a continuous stream of INSERT statement would. To improve performance, consumed messages are squashed into batches of ``max_insert_block_size``. If the message batch cannot be completed within ``stream_flush_interval_ms`` period (by default 7500ms), it will be flushed to ensure time bounded insertion time. From 16cd8fbda6e4a9346f48e7badaa9048362a8d324 Mon Sep 17 00:00:00 2001 From: proller Date: Tue, 10 Oct 2017 20:55:35 +0300 Subject: [PATCH 020/109] clickhouse_report.sh : more info about OS and kernel --- utils/report/clickhouse_report.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/utils/report/clickhouse_report.sh b/utils/report/clickhouse_report.sh index 369529b50e0..253b8812066 100755 --- a/utils/report/clickhouse_report.sh +++ b/utils/report/clickhouse_report.sh @@ -18,3 +18,5 @@ top -bn1 tail -n200 /var/log/clickhouse-server/clickhouse-server.err.log tail -n200 /var/log/clickhouse-server/clickhouse-server.log tail -n100 /var/log/clickhouse-server/stderr +cat /etc/lsb-release +uname -a From 5505013ba9837916d5da7a2c6d45ee1b48ad4cbe Mon Sep 17 00:00:00 2001 From: Ivan Blinkov Date: Wed, 11 Oct 2017 14:19:17 +0300 Subject: [PATCH 021/109] Switch links to next event (#1332) * update presentations * CLICKHOUSE-2936: redirect from clickhouse.yandex.ru and clickhouse.yandex.com * update submodule * lost files * CLICKHOUSE-2981: prefer sphinx docs over original reference * CLICKHOUSE-2981: docs styles more similar to main website + add flags to switch language links * update presentations * Less confusing directory structure (docs -> doc/reference/) * Minify sphinx docs too * Website release script: fail fast + pass docker hash on deploy * Do not underline links in docs * shorter * cleanup docker images * tune nginx config * CLICKHOUSE-3043: get rid of habrastorage links * Lost translation * CLICKHOUSE-2936: temporary client-side redirect * behaves weird in test * put redirect back * CLICKHOUSE-3047: copy docs txts to public too * move to proper file * remove old pages to avoid confusion * Remove reference redirect warning for now * Refresh README.md * Yellow buttons in docs * Use svg flags instead of unicode ones in docs * fix test website instance * Put flags to separate files * wrong flag * Copy Yandex.Metrica introduction from main page to docs * Yet another home page structure change, couple new blocks (CLICKHOUSE-3045) * Update Contacts section * CLICKHOUSE-2849: more detailed legal information * CLICKHOUSE-2978 preparation - split by files * More changes in Contacts block * Tune texts on index page * update presentations * One more benchmark * Add usage sections to index page, adapted from slides * Get the roadmap started, based on slides from last ClickHouse Meetup * CLICKHOUSE-2977: some rendering tuning * Get rid of excessive section in the end of getting started * Make headers linkable * CLICKHOUSE-2981: links to editing reference - https://github.com/yandex/ClickHouse/issues/849 * CLICKHOUSE-2981: fix mobile styles in docs * Ban crawling of duplicating docs * Open some external links in new tab * Ban old docs too * Lots of trivial fixes in english docs * Lots of trivial fixes in russian docs * Remove getting started copies in markdown * Add Yandex.Webmaster * Fix some sphinx warnings * More warnings fixed in english docs * More sphinx warnings fixed * Add code-block:: text * More code-block:: text * These headers look not that well * Better switch between documentation languages * merge use_case.rst into ya_metrika_task.rst * Edit the agg_functions.rst texts * Add lost empty lines * Lost blank lines * Add new logo sizes * update presentations * Next step in migrating to new documentation * Fix all warnings in en reference * Fix all warnings in ru reference * Re-arrange existing reference * Move operation tips to main reference * Fix typos noticed by milovidov@ * Get rid of zookeeper.md * Looks like duplicate of tutorial.html * Fix some mess with html tags in tutorial * No idea why nobody noticed this before, but it was completely not clear whet to get the data * Match code block styling between main and tutorial pages (in favor of the latter) * Get rid of some copypaste in tutorial * Normalize header styles * Move example_datasets to sphinx * Move presentations submodule to website * Move and update README.md * No point in duplicating articles from habrahabr here * Move development-related docs as is for now * doc/reference/ -> docs/ (to match the URL on website) * Adapt links to match the previous commit * Adapt development docs to rst (still lacks translation and strikethrough support) * clean on release * blacklist presentations in gulp * strikethrough support in sphinx * just copy development folder for now * fix weird introduction in style article * Style guide translation (WIP) * Finish style guide translation to English * gulp clean separately * Update year in LICENSE * Initial CONTRIBUTING.md * Fix remaining links to old docs in tutorial * Some tutorial fixes * Typo * Another typo * Update list of authors from yandex-team accoding to git log * Fix diff with master * couple fixes in en what_is_clickhouse.rst * Try different link to blog in Russian * Swap words * Slightly larger line height * CLICKHOUSE-3089: disable hyphenation in docs * update presentations * Fix copying of txt files * update submodule * CLICKHOUSE-3108: fix overflow issues in mobile version * Less weird tutorial header in mobile version * CLICKHOUSE-3073: skip sourcemaps by default * CLICKHOUSE-3067: rename item in docs navigation * fix list markup * CLICKHOUSE-3067: some documentation style tuning * CLICKHOUSE-3067: less laggy single page documentation * update presentations * YQL-3278: add some links to ClickHouse Meetup in Berlin on October 5, 2017 * Add "time series" keyword * Switch link to next event * Switch link to next event #2 * smaller font --- README.md | 2 +- docs/en/conf.py | 1 - website/index.css | 2 +- website/index.html | 2 +- 4 files changed, 3 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 9ac4e4cc9d2..b48aed5ac0a 100644 --- a/README.md +++ b/README.md @@ -2,4 +2,4 @@ ClickHouse is an open-source column-oriented database management system that all [Read more...](https://clickhouse.yandex/) -[ClickHouse Meetup in Berlin on October 5, 2017](https://events.yandex.com/events/meetings/05-10-2017/) +[ClickHouse Community Meetup in Palo Alto on October 25, 2017](http://bit.ly/clickhouse-meetup-palo-alto-october-2017) diff --git a/docs/en/conf.py b/docs/en/conf.py index b35129346ce..c58139ce779 100644 --- a/docs/en/conf.py +++ b/docs/en/conf.py @@ -125,7 +125,6 @@ html_theme_options = { 'link': '#08f', 'link_hover': 'red', 'extra_nav_links': collections.OrderedDict([ - ('ClickHouse Meetup Berlin', 'https://events.yandex.com/events/meetings/05-10-2017/'), ('Switch to Russian ', '#ru'), ('Single page documentation', '/docs/en/single/'), ('Website home', '/'), diff --git a/website/index.css b/website/index.css index 3f72e172b83..47afa8bfd01 100644 --- a/website/index.css +++ b/website/index.css @@ -219,7 +219,7 @@ a:hover, a:active { #announcement-link { color: #000; text-decoration: underline; - font: 400 200%/133% 'Yandex Sans Display Web',Arial,sans-serif; + font: 400 150%/133% 'Yandex Sans Display Web',Arial,sans-serif; margin: 1em 0; } #announcement-link:hover { diff --git a/website/index.html b/website/index.html index a83c123da27..2787a11b008 100644 --- a/website/index.html +++ b/website/index.html @@ -92,7 +92,7 @@ From 8bebe667a30aa9c7164b915aa59416157fcdb447 Mon Sep 17 00:00:00 2001 From: AndreevDm Date: Wed, 11 Oct 2017 16:30:24 +0300 Subject: [PATCH 022/109] Update CHANGELOG_RU.md --- CHANGELOG_RU.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG_RU.md b/CHANGELOG_RU.md index 97dce55a89e..724fb015166 100644 --- a/CHANGELOG_RU.md +++ b/CHANGELOG_RU.md @@ -77,7 +77,7 @@ * Добавлен параметр max_size для агрегатной функции `groupArray(max_size)(column)`, и оптимизирована её производительность ## Основные изменения: -* Улучшение безопасности: все файлы сервера создаются с правами 0640 +* Улучшение безопасности: все файлы сервера создаются с правами 0640 (можно поменять, через параметр в конфиге) * Улучшены сообщения об ошибках в случае синтаксически неверных запросов * Значительно уменьшен расход оперативной памяти и улучшена производительность слияний больших MergeTree-кусков данных * Значительно увеличена производительность слияний данных для движка ReplacingMergeTree From 09828ed597b9a5dd1a7b0ff10e386e9d48ac0258 Mon Sep 17 00:00:00 2001 From: AndreevDm Date: Wed, 11 Oct 2017 16:35:30 +0300 Subject: [PATCH 023/109] Update CHANGELOG.md --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ef7ff17d2ee..b9c71f69f62 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -79,7 +79,7 @@ This is a bugfix release. The following bugs were fixed: ## Major changes: -* Improved security: all server files are created with 0640 permissions. +* Improved security: all server files are created with 0640 permissions (can be changed via config parameter). * Improved error messages for queries with invalid syntax. * Significantly reduced memory consumption and improved performance when merging large sections of MergeTree data. * Significantly increased the performance of data merges for the ReplacingMergeTree engine. From a68521e016de5f03ad9d9271b381979125de575a Mon Sep 17 00:00:00 2001 From: AndreevDm Date: Wed, 11 Oct 2017 16:36:05 +0300 Subject: [PATCH 024/109] Update CHANGELOG_RU.md --- CHANGELOG_RU.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG_RU.md b/CHANGELOG_RU.md index 724fb015166..f48d5e43a4c 100644 --- a/CHANGELOG_RU.md +++ b/CHANGELOG_RU.md @@ -77,7 +77,7 @@ * Добавлен параметр max_size для агрегатной функции `groupArray(max_size)(column)`, и оптимизирована её производительность ## Основные изменения: -* Улучшение безопасности: все файлы сервера создаются с правами 0640 (можно поменять, через параметр в конфиге) +* Улучшение безопасности: все файлы сервера создаются с правами 0640 (можно поменять, через параметр в конфиге). * Улучшены сообщения об ошибках в случае синтаксически неверных запросов * Значительно уменьшен расход оперативной памяти и улучшена производительность слияний больших MergeTree-кусков данных * Значительно увеличена производительность слияний данных для движка ReplacingMergeTree From 4814eb70722e3b5495f7793836dfb98de9c3c8c0 Mon Sep 17 00:00:00 2001 From: Alexey Milovidov Date: Wed, 11 Oct 2017 17:41:49 +0300 Subject: [PATCH 025/109] Whitespaces [#CLICKHOUSE-2]. --- dbms/src/Storages/System/StorageSystemTables.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/dbms/src/Storages/System/StorageSystemTables.cpp b/dbms/src/Storages/System/StorageSystemTables.cpp index f39186487ac..a1574e00e00 100644 --- a/dbms/src/Storages/System/StorageSystemTables.cpp +++ b/dbms/src/Storages/System/StorageSystemTables.cpp @@ -22,10 +22,10 @@ StorageSystemTables::StorageSystemTables(const std::string & name_) : name(name_), columns { - {"database", std::make_shared()}, - {"name", std::make_shared()}, - {"engine", std::make_shared()}, - {"metadata_modification_time", std::make_shared()} + {"database", std::make_shared()}, + {"name", std::make_shared()}, + {"engine", std::make_shared()}, + {"metadata_modification_time", std::make_shared()} } { } From a7f46a4e663927707266ecabd56b2f4c41ce8745 Mon Sep 17 00:00:00 2001 From: Alexey Milovidov Date: Wed, 11 Oct 2017 17:44:12 +0300 Subject: [PATCH 026/109] Implemented TODO [#CLICKHOUSE-2]. --- debian/clickhouse-server.init | 6 ------ 1 file changed, 6 deletions(-) diff --git a/debian/clickhouse-server.init b/debian/clickhouse-server.init index 9e51bf417c2..81a158a59f0 100755 --- a/debian/clickhouse-server.init +++ b/debian/clickhouse-server.init @@ -138,12 +138,6 @@ initdb() echo "Changing owner of [${CLICKHOUSE_LOGDIR}] to [${CLICKHOUSE_LOGDIR_USER}:${CLICKHOUSE_GROUP}]" chown ${CLICKHOUSE_LOGDIR_USER}:${CLICKHOUSE_GROUP} ${CLICKHOUSE_LOGDIR} fi - - # Temporary fix for old metrika user, remove after 2017-06-01 - if [ ! -z ${CLICKHOUSE_DATADIR_OLD} ] && [ -d ${CLICKHOUSE_DATADIR_OLD} ] && ! $(su -s $SHELL ${CLICKHOUSE_USER} -c "test -w ${CLICKHOUSE_DATADIR_OLD}") ; then - echo "Changing owner of old [${CLICKHOUSE_DATADIR_OLD}] to [${CLICKHOUSE_USER}:${CLICKHOUSE_GROUP}]" - chown -RL ${CLICKHOUSE_USER}:${CLICKHOUSE_GROUP} ${CLICKHOUSE_DATADIR_OLD} - fi } From 459d52a37140b231d2bbd24dc2e096735823348d Mon Sep 17 00:00:00 2001 From: Alexey Milovidov Date: Wed, 11 Oct 2017 18:00:34 +0300 Subject: [PATCH 027/109] Whitespaces [#CLICKHOUSE-2]. --- debian/clickhouse-server-base.postinst | 108 ++++++++++++------------- 1 file changed, 54 insertions(+), 54 deletions(-) diff --git a/debian/clickhouse-server-base.postinst b/debian/clickhouse-server-base.postinst index 3dc07fcb384..d5a7d8bad9f 100644 --- a/debian/clickhouse-server-base.postinst +++ b/debian/clickhouse-server-base.postinst @@ -11,74 +11,74 @@ CLICKHOUSE_SERVER_ETCDIR=/etc/clickhouse-server if [ "$1" = configure ]; then - if [ -x "/etc/init.d/clickhouse-server" ]; then - update-rc.d clickhouse-server defaults 19 19 >/dev/null || exit $? - fi + if [ -x "/etc/init.d/clickhouse-server" ]; then + update-rc.d clickhouse-server defaults 19 19 >/dev/null || exit $? + fi - # Make sure the administrative user exists - if ! getent passwd ${CLICKHOUSE_USER} > /dev/null; then - adduser --system --disabled-login --no-create-home --home /nonexistent \ - --shell /bin/false --group --gecos "Clickhouse server" clickhouse > /dev/null - fi + # Make sure the administrative user exists + if ! getent passwd ${CLICKHOUSE_USER} > /dev/null; then + adduser --system --disabled-login --no-create-home --home /nonexistent \ + --shell /bin/false --group --gecos "Clickhouse server" clickhouse > /dev/null + fi - # if the user was created manually, make sure the group is there as well - if ! getent group ${CLICKHOUSE_GROUP} > /dev/null; then - addgroup --system ${CLICKHOUSE_GROUP} > /dev/null - fi + # if the user was created manually, make sure the group is there as well + if ! getent group ${CLICKHOUSE_GROUP} > /dev/null; then + addgroup --system ${CLICKHOUSE_GROUP} > /dev/null + fi - # make sure user is in the correct group - if ! id -Gn ${CLICKHOUSE_USER} | grep -qw ${CLICKHOUSE_USER}; then - adduser ${CLICKHOUSE_USER} ${CLICKHOUSE_GROUP} > /dev/null - fi + # make sure user is in the correct group + if ! id -Gn ${CLICKHOUSE_USER} | grep -qw ${CLICKHOUSE_USER}; then + adduser ${CLICKHOUSE_USER} ${CLICKHOUSE_GROUP} > /dev/null + fi - # check validity of user and group - if [ "`id -u ${CLICKHOUSE_USER}`" -eq 0 ]; then - echo "The ${CLICKHOUSE_USER} system user must not have uid 0 (root). + # check validity of user and group + if [ "`id -u ${CLICKHOUSE_USER}`" -eq 0 ]; then + echo "The ${CLICKHOUSE_USER} system user must not have uid 0 (root). Please fix this and reinstall this package." >&2 - exit 1 - fi + exit 1 + fi - if [ "`id -g ${CLICKHOUSE_GROUP}`" -eq 0 ]; then - echo "The ${CLICKHOUSE_USER} system user must not have root as primary group. + if [ "`id -g ${CLICKHOUSE_GROUP}`" -eq 0 ]; then + echo "The ${CLICKHOUSE_USER} system user must not have root as primary group. Please fix this and reinstall this package." >&2 - exit 1 - fi + exit 1 + fi - if [ ! -d ${CLICKHOUSE_DATADIR} ]; then - # only for compatibility for old /opt/clickhouse, remove after 2017-06-01 - if [ -d ${CLICKHOUSE_DATADIR_OLD} ]; then - ln -s ${CLICKHOUSE_DATADIR_OLD} ${CLICKHOUSE_DATADIR} - else - # DONT remove after 2017-06-01 : - mkdir -p ${CLICKHOUSE_DATADIR} - chown ${CLICKHOUSE_USER}:${CLICKHOUSE_GROUP} ${CLICKHOUSE_DATADIR} - chmod 700 ${CLICKHOUSE_DATADIR} - fi - fi + if [ ! -d ${CLICKHOUSE_DATADIR} ]; then + # only for compatibility for old /opt/clickhouse, remove after 2017-06-01 + if [ -d ${CLICKHOUSE_DATADIR_OLD} ]; then + ln -s ${CLICKHOUSE_DATADIR_OLD} ${CLICKHOUSE_DATADIR} + else + # DONT remove after 2017-06-01 : + mkdir -p ${CLICKHOUSE_DATADIR} + chown ${CLICKHOUSE_USER}:${CLICKHOUSE_GROUP} ${CLICKHOUSE_DATADIR} + chmod 700 ${CLICKHOUSE_DATADIR} + fi + fi - if [ ! -d ${CLICKHOUSE_LOGDIR} ]; then - mkdir -p ${CLICKHOUSE_LOGDIR} - chown root:${CLICKHOUSE_GROUP} ${CLICKHOUSE_LOGDIR} - # Allow everyone to read logs, root and clickhouse to read-write - chmod 775 ${CLICKHOUSE_LOGDIR} - fi + if [ ! -d ${CLICKHOUSE_LOGDIR} ]; then + mkdir -p ${CLICKHOUSE_LOGDIR} + chown root:${CLICKHOUSE_GROUP} ${CLICKHOUSE_LOGDIR} + # Allow everyone to read logs, root and clickhouse to read-write + chmod 775 ${CLICKHOUSE_LOGDIR} + fi - if [ -d ${CLICKHOUSE_LOGDIR} ]; then - # only for compatibility for old metrika user, remove string after 2017-06-01 : - su -s /bin/sh ${CLICKHOUSE_USER} -c "test -w ${CLICKHOUSE_LOGDIR}" || chown -R root:${CLICKHOUSE_GROUP} ${CLICKHOUSE_LOGDIR}; chmod -R ug+rw ${CLICKHOUSE_LOGDIR} - fi + if [ -d ${CLICKHOUSE_LOGDIR} ]; then + # only for compatibility for old metrika user, remove string after 2017-06-01 : + su -s /bin/sh ${CLICKHOUSE_USER} -c "test -w ${CLICKHOUSE_LOGDIR}" || chown -R root:${CLICKHOUSE_GROUP} ${CLICKHOUSE_LOGDIR}; chmod -R ug+rw ${CLICKHOUSE_LOGDIR} + fi - if [ -d ${CLICKHOUSE_SERVER_ETCDIR} ]; then - # -R only for compatibility for old metrika user, remove -R after 2017-06-01 - su -s /bin/sh ${CLICKHOUSE_USER} -c "test -w ${CLICKHOUSE_SERVER_ETCDIR}" || chown -R ${CLICKHOUSE_USER}:${CLICKHOUSE_GROUP} ${CLICKHOUSE_SERVER_ETCDIR} - fi + if [ -d ${CLICKHOUSE_SERVER_ETCDIR} ]; then + # -R only for compatibility for old metrika user, remove -R after 2017-06-01 + su -s /bin/sh ${CLICKHOUSE_USER} -c "test -w ${CLICKHOUSE_SERVER_ETCDIR}" || chown -R ${CLICKHOUSE_USER}:${CLICKHOUSE_GROUP} ${CLICKHOUSE_SERVER_ETCDIR} + fi - # Clean old dynamic compilation results - if [ -d "${CLICKHOUSE_DATADIR}/build" ]; then - rm -f ${CLICKHOUSE_DATADIR}/build/*.cpp ${CLICKHOUSE_DATADIR}/build/*.so ||: - fi + # Clean old dynamic compilation results + if [ -d "${CLICKHOUSE_DATADIR}/build" ]; then + rm -f ${CLICKHOUSE_DATADIR}/build/*.cpp ${CLICKHOUSE_DATADIR}/build/*.so ||: + fi fi From f42ae974d16c241ed54e7bf0e41875cf32618298 Mon Sep 17 00:00:00 2001 From: proller Date: Wed, 11 Oct 2017 21:22:28 +0300 Subject: [PATCH 028/109] Remove wrong test --- .../0_stateless/00507_nullable.reference | 2 - .../queries/0_stateless/00507_nullable.sql | 41 ------------------- 2 files changed, 43 deletions(-) delete mode 100644 dbms/tests/queries/0_stateless/00507_nullable.reference delete mode 100644 dbms/tests/queries/0_stateless/00507_nullable.sql diff --git a/dbms/tests/queries/0_stateless/00507_nullable.reference b/dbms/tests/queries/0_stateless/00507_nullable.reference deleted file mode 100644 index 1c42f9991e2..00000000000 --- a/dbms/tests/queries/0_stateless/00507_nullable.reference +++ /dev/null @@ -1,2 +0,0 @@ -1970-01-02 2 0 FAILED 2 -still alive diff --git a/dbms/tests/queries/0_stateless/00507_nullable.sql b/dbms/tests/queries/0_stateless/00507_nullable.sql deleted file mode 100644 index 46e7aef5614..00000000000 --- a/dbms/tests/queries/0_stateless/00507_nullable.sql +++ /dev/null @@ -1,41 +0,0 @@ -CREATE DATABASE IF NOT EXISTS test; -DROP TABLE IF EXISTS test.runs; -DROP TABLE IF EXISTS test.tests; - -CREATE TABLE test.runs -( - date Date, - id UInt64, - t_id UInt64, - status Enum8('OK' = 1, 'FAILED' = 2, 'SKIPPED' = 3, 'DISCOVERED' = 4), - run_id UInt64 DEFAULT id -) ENGINE = MergeTree(date, (t_id, id), 8192); - -CREATE TABLE test.tests -( - date Date, - id UInt64, - path Nullable(String), - suite_id Nullable(String) -) ENGINE = MergeTree(date, id, 8192); - -INSERT INTO test.tests (date, id) VALUES (1,1); -INSERT INTO test.runs (date, id) VALUES (1,1); -INSERT INTO test.runs (date, id, status) VALUES (1,2, 'FAILED'); -INSERT INTO test.tests (date, id, path) VALUES (1,2 ,'rtline1'); - -SELECT * -FROM test.runs AS r -WHERE (r.status = 'FAILED') AND ( -( - SELECT path - FROM test.tests AS t - WHERE t.id = r.id - LIMIT 1 -) LIKE 'rtline%') -LIMIT 1; - -SELECT 'still alive'; - -DROP TABLE test.runs; -DROP TABLE test.tests; From 27307685f6ad29aa0bd11234650fe16645b590cc Mon Sep 17 00:00:00 2001 From: Alexey Milovidov Date: Wed, 11 Oct 2017 22:07:03 +0300 Subject: [PATCH 029/109] Implemented TODO [#CLICKHOUSE-2]. --- debian/clickhouse-server-base.postinst | 15 ++++----------- 1 file changed, 4 insertions(+), 11 deletions(-) diff --git a/debian/clickhouse-server-base.postinst b/debian/clickhouse-server-base.postinst index d5a7d8bad9f..7dd4925c8e5 100644 --- a/debian/clickhouse-server-base.postinst +++ b/debian/clickhouse-server-base.postinst @@ -4,7 +4,6 @@ set -e CLICKHOUSE_USER=clickhouse CLICKHOUSE_GROUP=${CLICKHOUSE_USER} CLICKHOUSE_DATADIR=/var/lib/clickhouse -CLICKHOUSE_DATADIR_OLD=/opt/clickhouse # remove after 2017-06-01 CLICKHOUSE_LOGDIR=/var/log/clickhouse-server CLICKHOUSE_SERVER_ETCDIR=/etc/clickhouse-server @@ -45,15 +44,9 @@ Please fix this and reinstall this package." >&2 fi if [ ! -d ${CLICKHOUSE_DATADIR} ]; then - # only for compatibility for old /opt/clickhouse, remove after 2017-06-01 - if [ -d ${CLICKHOUSE_DATADIR_OLD} ]; then - ln -s ${CLICKHOUSE_DATADIR_OLD} ${CLICKHOUSE_DATADIR} - else - # DONT remove after 2017-06-01 : - mkdir -p ${CLICKHOUSE_DATADIR} - chown ${CLICKHOUSE_USER}:${CLICKHOUSE_GROUP} ${CLICKHOUSE_DATADIR} - chmod 700 ${CLICKHOUSE_DATADIR} - fi + mkdir -p ${CLICKHOUSE_DATADIR} + chown ${CLICKHOUSE_USER}:${CLICKHOUSE_GROUP} ${CLICKHOUSE_DATADIR} + chmod 700 ${CLICKHOUSE_DATADIR} fi if [ ! -d ${CLICKHOUSE_LOGDIR} ]; then @@ -65,7 +58,7 @@ Please fix this and reinstall this package." >&2 if [ -d ${CLICKHOUSE_LOGDIR} ]; then - # only for compatibility for old metrika user, remove string after 2017-06-01 : + # only for compatibility for old metrika user, remove string after 2017-06-01 su -s /bin/sh ${CLICKHOUSE_USER} -c "test -w ${CLICKHOUSE_LOGDIR}" || chown -R root:${CLICKHOUSE_GROUP} ${CLICKHOUSE_LOGDIR}; chmod -R ug+rw ${CLICKHOUSE_LOGDIR} fi From 041623dee166e9c4dda1b6c45cdfbe532c7031dc Mon Sep 17 00:00:00 2001 From: Alexey Milovidov Date: Wed, 11 Oct 2017 22:11:51 +0300 Subject: [PATCH 030/109] Moved chown to correct place [#CLICKHOUSE-2]. --- debian/clickhouse-server-base.postinst | 7 ------- debian/clickhouse-server.init | 4 ++++ 2 files changed, 4 insertions(+), 7 deletions(-) diff --git a/debian/clickhouse-server-base.postinst b/debian/clickhouse-server-base.postinst index 7dd4925c8e5..476dccfd271 100644 --- a/debian/clickhouse-server-base.postinst +++ b/debian/clickhouse-server-base.postinst @@ -5,7 +5,6 @@ CLICKHOUSE_USER=clickhouse CLICKHOUSE_GROUP=${CLICKHOUSE_USER} CLICKHOUSE_DATADIR=/var/lib/clickhouse CLICKHOUSE_LOGDIR=/var/log/clickhouse-server -CLICKHOUSE_SERVER_ETCDIR=/etc/clickhouse-server if [ "$1" = configure ]; then @@ -63,12 +62,6 @@ Please fix this and reinstall this package." >&2 fi - if [ -d ${CLICKHOUSE_SERVER_ETCDIR} ]; then - # -R only for compatibility for old metrika user, remove -R after 2017-06-01 - su -s /bin/sh ${CLICKHOUSE_USER} -c "test -w ${CLICKHOUSE_SERVER_ETCDIR}" || chown -R ${CLICKHOUSE_USER}:${CLICKHOUSE_GROUP} ${CLICKHOUSE_SERVER_ETCDIR} - fi - - # Clean old dynamic compilation results if [ -d "${CLICKHOUSE_DATADIR}/build" ]; then rm -f ${CLICKHOUSE_DATADIR}/build/*.cpp ${CLICKHOUSE_DATADIR}/build/*.so ||: diff --git a/debian/clickhouse-server.init b/debian/clickhouse-server.init index 81a158a59f0..3261825b74b 100755 --- a/debian/clickhouse-server.init +++ b/debian/clickhouse-server.init @@ -95,6 +95,10 @@ check_config() initdb() { + if [ -d ${SYSCONFDIR} ]; then + su -s /bin/sh ${CLICKHOUSE_USER} -c "test -w ${SYSCONFDIR}" || chown ${CLICKHOUSE_USER}:${CLICKHOUSE_GROUP} ${SYSCONFDIR} + fi + if [ -x "$BINDIR/$GENERIC_PROGRAM" ]; then CLICKHOUSE_DATADIR_FROM_CONFIG=$(su -s $SHELL ${CLICKHOUSE_USER} -c "$BINDIR/$GENERIC_PROGRAM extract-from-config --config-file=\"$CLICKHOUSE_CONFIG\" --key=path") if [ "(" "$?" -ne "0" ")" -o "(" -z "${CLICKHOUSE_DATADIR_FROM_CONFIG}" ")" ]; then From bc4a78f168854fac4546d5a7130d078301003e1a Mon Sep 17 00:00:00 2001 From: Mikhail Filimonov Date: Wed, 11 Oct 2017 21:45:06 +0200 Subject: [PATCH 031/109] Fixing documentation fragment about "default" user. It is not mandatory anymore. --- docs/en/operations/access_rights.rst | 4 +++- docs/ru/operations/access_rights.rst | 4 +++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/docs/en/operations/access_rights.rst b/docs/en/operations/access_rights.rst index a2e0c8da2cb..020bb64f5f5 100644 --- a/docs/en/operations/access_rights.rst +++ b/docs/en/operations/access_rights.rst @@ -40,7 +40,9 @@ Users are recorded in the ``users`` section. Let's look at part of the ``users.x Here we can see that two users are declared: ``default`` and ``web``. We added the ``web`` user ourselves. -The ``default`` user is chosen in cases when the username is not passed, so this user must be present in the config file. The ``default`` user is also used for distributed query processing - the system accesses remote servers under this username. So the ``default`` user must have an empty password and must not have substantial restrictions or quotas - otherwise, distributed queries will fail. +The ``default`` user is chosen in cases when the username is not passed. The ``default`` user can also be used for distributed query processing - the system accesses remote servers using this username if no ``user`` and ``password`` were configured for that server inside cluster configuration (see also section about "Distributed" table engine). + +For connection to the server inside cluster you should use the user without any substantial restrictions or quotas - otherwise, distributed queries will fail. The password is specified in plain text directly in the config. In this regard, you should not consider these passwords as providing security against potential malicious attacks. Rather, they are necessary for protection from Yandex employees. diff --git a/docs/ru/operations/access_rights.rst b/docs/ru/operations/access_rights.rst index 4078b357252..83bb19c7808 100644 --- a/docs/ru/operations/access_rights.rst +++ b/docs/ru/operations/access_rights.rst @@ -60,7 +60,9 @@ Здесь видно объявление двух пользователей - ``default`` и ``web``. Пользователя ``web`` мы добавили самостоятельно. -Пользователь ``default`` выбирается в случаях, когда имя пользователя не передаётся, поэтому такой пользователь должен присутствовать в конфигурационном файле обязательно. Также пользователь ``default`` используется при распределённой обработки запроса - система ходит на удалённые серверы под ним. Поэтому, у пользователя ``default`` должен быть пустой пароль и не должно быть выставлено существенных ограничений или квот - иначе распределённые запросы сломаются. +Пользователь ``default`` выбирается в случаях, когда имя пользователя не передаётся. Также пользователь ``default`` может использоваться при распределённой обработке запроса - если в конфигурации кластера для сервера не указаны ``user`` и ``password``. (см. раздел о движке "Distributed"). + +Пользователь, который используется для обмена информацией между серверами, объединенными в кластер, не должен иметь существенных ограничений или квот - иначе распределённые запросы сломаются. Пароль указывается либо в открытом виде (не рекомендуется), либо в виде SHA-256. Хэш не содержит соль. В связи с этим, не следует рассматривать такие пароли, как защиту от потенциального злоумышленника. Скорее, они нужны для защиты от сотрудников. From dfb64cf0c0e7ceff288f5a2e2fa72806ecaa0a5c Mon Sep 17 00:00:00 2001 From: Yuri Dyachenko Date: Wed, 11 Oct 2017 23:38:56 +0300 Subject: [PATCH 032/109] append yurial/clickhouse-client to docs/interfaces --- docs/en/interfaces/third-party_client_libraries.rst | 1 + docs/ru/interfaces/third-party_client_libraries.rst | 1 + 2 files changed, 2 insertions(+) diff --git a/docs/en/interfaces/third-party_client_libraries.rst b/docs/en/interfaces/third-party_client_libraries.rst index 0ee86db23f7..cf87beb66f2 100644 --- a/docs/en/interfaces/third-party_client_libraries.rst +++ b/docs/en/interfaces/third-party_client_libraries.rst @@ -7,6 +7,7 @@ There exist third-party client libraries for ClickHouse: - `infi.clickhouse_orm `_ - `sqlalchemy-clickhouse `_ - `clickhouse-driver `_ + - `clickhouse-client `_ * PHP - `clickhouse-php-client `_ - `PhpClickHouseClient `_ diff --git a/docs/ru/interfaces/third-party_client_libraries.rst b/docs/ru/interfaces/third-party_client_libraries.rst index 7460e2300c0..d35207965e0 100644 --- a/docs/ru/interfaces/third-party_client_libraries.rst +++ b/docs/ru/interfaces/third-party_client_libraries.rst @@ -7,6 +7,7 @@ - `infi.clickhouse_orm `_ - `sqlalchemy-clickhouse `_ - `clickhouse-driver `_ + - `clickhouse-client `_ * PHP - `clickhouse-php-client `_ - `PhpClickHouseClient `_ From d468473d624f7d9f25d23c98bd3ceb9ca3a4cffd Mon Sep 17 00:00:00 2001 From: Alexey Milovidov Date: Thu, 12 Oct 2017 21:21:17 +0300 Subject: [PATCH 033/109] Fixed FREEZE PARTITION: using only active data parts; acquire snapshot of parts [#CLICKHOUSE-3369]. --- dbms/src/Storages/MergeTree/MergeTreeData.cpp | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/dbms/src/Storages/MergeTree/MergeTreeData.cpp b/dbms/src/Storages/MergeTree/MergeTreeData.cpp index 7d0c96b9431..efd704d3688 100644 --- a/dbms/src/Storages/MergeTree/MergeTreeData.cpp +++ b/dbms/src/Storages/MergeTree/MergeTreeData.cpp @@ -1732,6 +1732,7 @@ void MergeTreeData::freezePartition(const ASTPtr & partition_ast, const String & { std::experimental::optional prefix; String partition_id; + if (format_version < MERGE_TREE_DATA_MIN_FORMAT_VERSION_WITH_CUSTOM_PARTITIONING) { const auto & partition = dynamic_cast(*partition_ast); @@ -1762,24 +1763,23 @@ void MergeTreeData::freezePartition(const ASTPtr & partition_ast, const String & LOG_DEBUG(log, "Snapshot will be placed at " + backup_path); + /// Acquire a snapshot of active data parts to prevent removing while doing backup. + const auto data_parts = getDataParts(); + size_t parts_processed = 0; - Poco::DirectoryIterator end; - for (Poco::DirectoryIterator it(full_path); it != end; ++it) + for (const auto & part : data_parts) { - MergeTreePartInfo part_info; - if (!MergeTreePartInfo::tryParsePartName(it.name(), &part_info, format_version)) - continue; if (prefix) { - if (!startsWith(part_info.partition_id, prefix.value())) + if (!startsWith(part->info.partition_id, prefix.value())) continue; } - else if (part_info.partition_id != partition_id) + else if (part->info.partition_id != partition_id) continue; - LOG_DEBUG(log, "Freezing part " << it.name()); + LOG_DEBUG(log, "Freezing part " << part->name); - String part_absolute_path = it.path().absolute().toString(); + String part_absolute_path = Poco::Path(part->getFullPath()).absolute().toString(); if (!startsWith(part_absolute_path, clickhouse_path)) throw Exception("Part path " + part_absolute_path + " is not inside " + clickhouse_path, ErrorCodes::LOGICAL_ERROR); From d880762e0a55784648e98c17511f93f2821457d9 Mon Sep 17 00:00:00 2001 From: Alexey Milovidov Date: Thu, 12 Oct 2017 21:30:45 +0300 Subject: [PATCH 034/109] Removed tcp_ssl_port by default [#CLICKHOUSE-2]. --- dbms/src/Server/config.xml | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/dbms/src/Server/config.xml b/dbms/src/Server/config.xml index 4525a63a92b..22c62652ec4 100644 --- a/dbms/src/Server/config.xml +++ b/dbms/src/Server/config.xml @@ -8,12 +8,15 @@ 10 - 8123 + 9000 + + @@ -47,11 +50,6 @@
]]>
--> - 9000 - - - 9440 - 9009 From c0716da7184b07fbc7017454208484625b524b07 Mon Sep 17 00:00:00 2001 From: Vitaliy Lyudvichenko Date: Tue, 26 Sep 2017 18:14:13 +0300 Subject: [PATCH 035/109] Resolves #1273. Exception safe users update. [#CLICKHOUSE-3] --- dbms/src/Interpreters/Users.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/dbms/src/Interpreters/Users.cpp b/dbms/src/Interpreters/Users.cpp index 887649232ac..d539cececbb 100644 --- a/dbms/src/Interpreters/Users.cpp +++ b/dbms/src/Interpreters/Users.cpp @@ -308,13 +308,15 @@ User::User(const String & name_, const String & config_elem, Poco::Util::Abstrac void Users::loadFromConfig(Poco::Util::AbstractConfiguration & config) { - cont.clear(); + Container new_cont; Poco::Util::AbstractConfiguration::Keys config_keys; config.keys("users", config_keys); for (const std::string & key : config_keys) - cont.emplace(std::piecewise_construct, std::forward_as_tuple(key), std::forward_as_tuple(key, "users." + key, config)); + new_cont.emplace(std::piecewise_construct, std::forward_as_tuple(key), std::forward_as_tuple(key, "users." + key, config)); + + cont = std::move(new_cont); } const User & Users::get(const String & user_name, const String & password, const Poco::Net::IPAddress & address) const From a65e8d9ffc33a44ed9eb064cd24c4b0ead1f9bbc Mon Sep 17 00:00:00 2001 From: Vitaliy Lyudvichenko Date: Tue, 26 Sep 2017 18:17:31 +0300 Subject: [PATCH 036/109] Less noisy logging. [#CLICKHOSUE-2] --- .../MergeTree/ReplicatedMergeTreeCleanupThread.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/dbms/src/Storages/MergeTree/ReplicatedMergeTreeCleanupThread.cpp b/dbms/src/Storages/MergeTree/ReplicatedMergeTreeCleanupThread.cpp index dbcd0deb18d..96c416c3cbd 100644 --- a/dbms/src/Storages/MergeTree/ReplicatedMergeTreeCleanupThread.cpp +++ b/dbms/src/Storages/MergeTree/ReplicatedMergeTreeCleanupThread.cpp @@ -221,8 +221,11 @@ void ReplicatedMergeTreeCleanupThread::getBlocksSortedByTime(zkutil::ZooKeeperPt } auto not_cached_blocks = stat.numChildren - cached_block_stats->size(); - LOG_TRACE(log, "Checking " << stat.numChildren << " blocks (" << not_cached_blocks << " are not cached)" - << " to clear old ones from ZooKeeper. This might take several minutes."); + if (not_cached_blocks) + { + LOG_TRACE(log, "Checking " << stat.numChildren << " blocks (" << not_cached_blocks << " are not cached)" + << " to clear old ones from ZooKeeper. This might take several minutes."); + } std::vector> exists_futures; for (const String & block : blocks) From cabf6d779962f63427321f48c61bc5da8f4de820 Mon Sep 17 00:00:00 2001 From: Vitaliy Lyudvichenko Date: Mon, 2 Oct 2017 19:34:01 +0300 Subject: [PATCH 037/109] Add better logging if OPTIMIZE cannot be executed. [#CLICKHOUSE-2] --- dbms/src/Storages/MergeTree/MergeTreeDataMerger.cpp | 12 ++++++++---- dbms/src/Storages/StorageMergeTree.cpp | 2 +- dbms/src/Storages/StorageReplicatedMergeTree.cpp | 9 ++++++--- 3 files changed, 15 insertions(+), 8 deletions(-) diff --git a/dbms/src/Storages/MergeTree/MergeTreeDataMerger.cpp b/dbms/src/Storages/MergeTree/MergeTreeDataMerger.cpp index 05e097d7adc..1e5c0dce9fd 100644 --- a/dbms/src/Storages/MergeTree/MergeTreeDataMerger.cpp +++ b/dbms/src/Storages/MergeTree/MergeTreeDataMerger.cpp @@ -241,15 +241,19 @@ bool MergeTreeDataMerger::selectAllPartsToMergeWithinPartition( if (!final && parts.size() == 1) return false; - MergeTreeData::DataPartsVector::const_iterator it = parts.begin(); - MergeTreeData::DataPartsVector::const_iterator prev_it = it; + auto it = parts.begin(); + auto prev_it = it; size_t sum_bytes = 0; while (it != parts.end()) { - if ((it != parts.begin() || parts.size() == 1) /// For the case of one part, we check that it can be merged "with itself". - && !can_merge(*prev_it, *it)) + /// For the case of one part, we check that it can be merged "with itself". + if ((it != parts.begin() || parts.size() == 1) && !can_merge(*prev_it, *it)) + { + LOG_INFO(log, ((it != prev_it) ? "Parts " + (*prev_it)->name + " and " + (*it)->name : "Part " + (*it)->name) + << " cannot be used for merge"); return false; + } sum_bytes += (*it)->size_in_bytes; diff --git a/dbms/src/Storages/StorageMergeTree.cpp b/dbms/src/Storages/StorageMergeTree.cpp index a544f5bde26..ba69c2b3b50 100644 --- a/dbms/src/Storages/StorageMergeTree.cpp +++ b/dbms/src/Storages/StorageMergeTree.cpp @@ -337,7 +337,7 @@ bool StorageMergeTree::merge( Stopwatch stopwatch; auto new_part = merger.mergePartsToTemporaryPart( - future_part, *merge_entry_ptr, aio_threshold, time(0), merging_tagger->reserved_space.get(), deduplicate); + future_part, *merge_entry_ptr, aio_threshold, time(nullptr), merging_tagger->reserved_space.get(), deduplicate); merger.renameMergedTemporaryPart(new_part, future_part.parts, nullptr); diff --git a/dbms/src/Storages/StorageReplicatedMergeTree.cpp b/dbms/src/Storages/StorageReplicatedMergeTree.cpp index 4125de90068..583f07db82e 100644 --- a/dbms/src/Storages/StorageReplicatedMergeTree.cpp +++ b/dbms/src/Storages/StorageReplicatedMergeTree.cpp @@ -1887,10 +1887,10 @@ bool StorageReplicatedMergeTree::createLogEntryToMergeParts( { all_in_zk = false; - if (part->modification_time + MAX_AGE_OF_LOCAL_PART_THAT_WASNT_ADDED_TO_ZOOKEEPER < time(0)) + if (part->modification_time + MAX_AGE_OF_LOCAL_PART_THAT_WASNT_ADDED_TO_ZOOKEEPER < time(nullptr)) { LOG_WARNING(log, "Part " << part->name << " (that was selected for merge)" - << " with age " << (time(0) - part->modification_time) + << " with age " << (time(nullptr) - part->modification_time) << " seconds exists locally but not in ZooKeeper." << " Won't do merge with that part and will check it."); enqueuePartForCheck(part->name); @@ -1900,7 +1900,7 @@ bool StorageReplicatedMergeTree::createLogEntryToMergeParts( if (!all_in_zk) return false; - LogEntry entry; + ReplicatedMergeTreeLogEntryData entry; entry.type = LogEntry::MERGE_PARTS; entry.source_replica = replica_name; entry.new_part_name = merged_name; @@ -2442,7 +2442,10 @@ bool StorageReplicatedMergeTree::optimize(const ASTPtr & query, const ASTPtr & p } if (!selected) + { + LOG_INFO(log, "Cannot select parts for optimization"); return false; + } if (!createLogEntryToMergeParts(future_merged_part.parts, future_merged_part.name, deduplicate, &merge_entry)) return false; From c1285c7d6b11b8604870a887884b371556ed00b5 Mon Sep 17 00:00:00 2001 From: alexey-milovidov Date: Thu, 12 Oct 2017 22:28:07 +0300 Subject: [PATCH 038/109] Update MergeTreeDataMerger.cpp --- dbms/src/Storages/MergeTree/MergeTreeDataMerger.cpp | 2 -- 1 file changed, 2 deletions(-) diff --git a/dbms/src/Storages/MergeTree/MergeTreeDataMerger.cpp b/dbms/src/Storages/MergeTree/MergeTreeDataMerger.cpp index 1e5c0dce9fd..95787287ea3 100644 --- a/dbms/src/Storages/MergeTree/MergeTreeDataMerger.cpp +++ b/dbms/src/Storages/MergeTree/MergeTreeDataMerger.cpp @@ -250,8 +250,6 @@ bool MergeTreeDataMerger::selectAllPartsToMergeWithinPartition( /// For the case of one part, we check that it can be merged "with itself". if ((it != parts.begin() || parts.size() == 1) && !can_merge(*prev_it, *it)) { - LOG_INFO(log, ((it != prev_it) ? "Parts " + (*prev_it)->name + " and " + (*it)->name : "Part " + (*it)->name) - << " cannot be used for merge"); return false; } From 18af75a4f14a7eb0812e5ba67242c4e59702406f Mon Sep 17 00:00:00 2001 From: Vitaliy Lyudvichenko Date: Tue, 26 Sep 2017 20:19:16 +0300 Subject: [PATCH 039/109] Add metrics for RWLockFIFO. [#CLICKHOUSE-3246] --- dbms/src/Common/CurrentMetrics.cpp | 4 ++ dbms/src/Common/ProfileEvents.cpp | 4 ++ dbms/src/Common/RWLockFIFO.cpp | 61 ++++++++++++++++++++++++++++-- dbms/src/Common/RWLockFIFO.h | 24 +----------- dbms/src/Common/Stopwatch.h | 11 +++--- 5 files changed, 74 insertions(+), 30 deletions(-) diff --git a/dbms/src/Common/CurrentMetrics.cpp b/dbms/src/Common/CurrentMetrics.cpp index f664acd7ca3..ead086e2b67 100644 --- a/dbms/src/Common/CurrentMetrics.cpp +++ b/dbms/src/Common/CurrentMetrics.cpp @@ -35,6 +35,10 @@ M(StorageBufferBytes) \ M(DictCacheRequests) \ M(Revision) \ + M(RWLockWaitingReaders) \ + M(RWLockWaitingWriters) \ + M(RWLockActiveReaders) \ + M(RWLockActiveWriters) namespace CurrentMetrics diff --git a/dbms/src/Common/ProfileEvents.cpp b/dbms/src/Common/ProfileEvents.cpp index 1488d6c8c0d..93250278aa5 100644 --- a/dbms/src/Common/ProfileEvents.cpp +++ b/dbms/src/Common/ProfileEvents.cpp @@ -127,6 +127,10 @@ M(DataAfterMergeDiffersFromReplica) \ M(PolygonsAddedToPool) \ M(PolygonsInPoolAllocatedBytes) \ + M(RWLockAcquiredReadLocks) \ + M(RWLockAcquiredWriteLocks) \ + M(RWLockReadersWaitMilliseconds) \ + M(RWLockWritersWaitMilliseconds) namespace ProfileEvents { diff --git a/dbms/src/Common/RWLockFIFO.cpp b/dbms/src/Common/RWLockFIFO.cpp index ec5dc35c990..51a2f756475 100644 --- a/dbms/src/Common/RWLockFIFO.cpp +++ b/dbms/src/Common/RWLockFIFO.cpp @@ -1,7 +1,27 @@ #include "RWLockFIFO.h" +#include #include -#include #include +#include +#include + + +namespace ProfileEvents +{ + extern const Event RWLockAcquiredReadLocks; + extern const Event RWLockAcquiredWriteLocks; + extern const Event RWLockReadersWaitMilliseconds; + extern const Event RWLockWritersWaitMilliseconds; +} + + +namespace CurrentMetrics +{ + extern const Metric RWLockWaitingReaders; + extern const Metric RWLockWaitingWriters; + extern const Metric RWLockActiveReaders; + extern const Metric RWLockActiveWriters; +} namespace DB @@ -13,12 +33,42 @@ namespace ErrorCodes } -RWLockFIFO::LockHandler RWLockFIFO::getLock(RWLockFIFO::Type type, RWLockFIFO::Client client) +class RWLockFIFO::LockHandlerImpl { + RWLockFIFOPtr parent; GroupsContainer::iterator it_group; ClientsContainer::iterator it_client; + ThreadToHandler::iterator it_handler; + CurrentMetrics::Increment active_client_increment; + + LockHandlerImpl(RWLockFIFOPtr && parent, GroupsContainer::iterator it_group, ClientsContainer::iterator it_client); + +public: + + LockHandlerImpl(const LockHandlerImpl & other) = delete; + + ~LockHandlerImpl(); + + friend class RWLockFIFO; +}; + + +RWLockFIFO::LockHandler RWLockFIFO::getLock(RWLockFIFO::Type type, RWLockFIFO::Client client) +{ + Stopwatch watch(CLOCK_MONOTONIC_COARSE); + CurrentMetrics::Increment waiting_client_increment((type == Read) ? CurrentMetrics::RWLockWaitingReaders + : CurrentMetrics::RWLockWaitingWriters); + auto finalize_metrics = [type, &watch] () + { + ProfileEvents::increment((type == Read) ? ProfileEvents::RWLockAcquiredReadLocks + : ProfileEvents::RWLockAcquiredWriteLocks); + ProfileEvents::increment((type == Read) ? ProfileEvents::RWLockReadersWaitMilliseconds + : ProfileEvents::RWLockWritersWaitMilliseconds, watch.elapsedMilliseconds()); + }; auto this_thread_id = std::this_thread::get_id(); + GroupsContainer::iterator it_group; + ClientsContainer::iterator it_client; std::unique_lock lock(mutex); @@ -79,6 +129,7 @@ RWLockFIFO::LockHandler RWLockFIFO::getLock(RWLockFIFO::Type type, RWLockFIFO::C if (it_group == queue.begin()) { it_client->start_time = it_client->enqueue_time; + finalize_metrics(); return res; } @@ -86,6 +137,7 @@ RWLockFIFO::LockHandler RWLockFIFO::getLock(RWLockFIFO::Type type, RWLockFIFO::C it_group->cv.wait(lock, [&] () { return it_group == queue.begin(); } ); it_client->start_time = time(nullptr); + finalize_metrics(); return res; } @@ -133,6 +185,9 @@ RWLockFIFO::LockHandlerImpl::~LockHandlerImpl() RWLockFIFO::LockHandlerImpl::LockHandlerImpl(RWLockFIFOPtr && parent, RWLockFIFO::GroupsContainer::iterator it_group, RWLockFIFO::ClientsContainer::iterator it_client) - : parent{std::move(parent)}, it_group{it_group}, it_client{it_client} {} + : parent{std::move(parent)}, it_group{it_group}, it_client{it_client}, + active_client_increment{(it_client->type == RWLockFIFO::Read) ? CurrentMetrics::RWLockActiveReaders + : CurrentMetrics::RWLockActiveWriters} +{} } diff --git a/dbms/src/Common/RWLockFIFO.h b/dbms/src/Common/RWLockFIFO.h index 73517a936ad..c52b294153e 100644 --- a/dbms/src/Common/RWLockFIFO.h +++ b/dbms/src/Common/RWLockFIFO.h @@ -40,6 +40,7 @@ public: bool isStarted() { return start_time != 0; } + /// TODO: delete extra info below if there is no need fot it already. std::string info; int thread_number = 0; std::time_t enqueue_time = 0; @@ -50,6 +51,7 @@ public: /// Just use LockHandler::reset() to release the lock class LockHandlerImpl; + friend class LockHandlerImpl; using LockHandler = std::shared_ptr; @@ -87,28 +89,6 @@ private: explicit Group(Type type) : type{type} {} }; -public: - - class LockHandlerImpl - { - RWLockFIFOPtr parent; - GroupsContainer::iterator it_group; - ClientsContainer::iterator it_client; - ThreadToHandler::iterator it_handler; - - LockHandlerImpl(RWLockFIFOPtr && parent, GroupsContainer::iterator it_group, ClientsContainer::iterator it_client); - - public: - - LockHandlerImpl(const LockHandlerImpl & other) = delete; - - ~LockHandlerImpl(); - - friend class RWLockFIFO; - }; - -private: - mutable std::mutex mutex; GroupsContainer queue; ThreadToHandler thread_to_handler; diff --git a/dbms/src/Common/Stopwatch.h b/dbms/src/Common/Stopwatch.h index 35e1ccaed0e..b3a1807941f 100644 --- a/dbms/src/Common/Stopwatch.h +++ b/dbms/src/Common/Stopwatch.h @@ -20,11 +20,12 @@ public: */ Stopwatch(clockid_t clock_type_ = CLOCK_MONOTONIC) : clock_type(clock_type_) { restart(); } - void start() { setStart(); is_running = true; } - void stop() { updateElapsed(); is_running = false; } - void restart() { elapsed_ns = 0; start(); } - UInt64 elapsed() const { updateElapsed(); return elapsed_ns; } - double elapsedSeconds() const { updateElapsed(); return static_cast(elapsed_ns) / 1000000000ULL; } + void start() { setStart(); is_running = true; } + void stop() { updateElapsed(); is_running = false; } + void restart() { elapsed_ns = 0; start(); } + UInt64 elapsed() const { updateElapsed(); return elapsed_ns; } + UInt64 elapsedMilliseconds() const { updateElapsed(); return elapsed_ns / 1000000UL; } + double elapsedSeconds() const { updateElapsed(); return static_cast(elapsed_ns) / 1000000000ULL; } private: mutable UInt64 start_ns; From 1505ad6bacc93174f4e4d8ade8db213e91c45b9d Mon Sep 17 00:00:00 2001 From: proller Date: Mon, 2 Oct 2017 16:08:09 +0300 Subject: [PATCH 040/109] Executable dictionaries: fail if program returns non zero exit code (#CLICKHOUSE-3171) --- dbms/src/Common/ShellCommand.cpp | 8 +++---- dbms/src/DataStreams/OwningBlockInputStream.h | 1 + .../ExecutableDictionarySource.cpp | 23 ++++++++++++++++++- 3 files changed, 27 insertions(+), 5 deletions(-) diff --git a/dbms/src/Common/ShellCommand.cpp b/dbms/src/Common/ShellCommand.cpp index 00010799aee..371a967fd0e 100644 --- a/dbms/src/Common/ShellCommand.cpp +++ b/dbms/src/Common/ShellCommand.cpp @@ -65,10 +65,10 @@ namespace /// By these return codes from the child process, we learn (for sure) about errors when creating it. enum class ReturnCodes : int { - CANNOT_DUP_STDIN = 42, /// The value is not important, but it is chosen so that it's rare to conflict with the program return code. - CANNOT_DUP_STDOUT = 43, - CANNOT_DUP_STDERR = 44, - CANNOT_EXEC = 45, + CANNOT_DUP_STDIN = 1431655765, /// The value is not important, but it is chosen so that it's rare to conflict with the program return code. + CANNOT_DUP_STDOUT = 1431655766, + CANNOT_DUP_STDERR = 1431655767, + CANNOT_EXEC = 1431655768, }; } diff --git a/dbms/src/DataStreams/OwningBlockInputStream.h b/dbms/src/DataStreams/OwningBlockInputStream.h index 34110a6ac5a..1c1d1acf3bc 100644 --- a/dbms/src/DataStreams/OwningBlockInputStream.h +++ b/dbms/src/DataStreams/OwningBlockInputStream.h @@ -27,6 +27,7 @@ private: String getID() const override { return "Owning(" + stream->getID() + ")"; } +protected: BlockInputStreamPtr stream; std::unique_ptr own; }; diff --git a/dbms/src/Dictionaries/ExecutableDictionarySource.cpp b/dbms/src/Dictionaries/ExecutableDictionarySource.cpp index a3a3c40ba65..f45b99396d7 100644 --- a/dbms/src/Dictionaries/ExecutableDictionarySource.cpp +++ b/dbms/src/Dictionaries/ExecutableDictionarySource.cpp @@ -20,6 +20,20 @@ namespace DB static const size_t max_block_size = 8192; +class ShellCommandOwningBlockInputStream : public OwningBlockInputStream +{ +public: + ShellCommandOwningBlockInputStream(const BlockInputStreamPtr & stream, std::unique_ptr own) : OwningBlockInputStream(std::move(stream), std::move(own)) + { + } + + void readSuffix() override + { + OwningBlockInputStream::readSuffix(); + own->wait(); + } +}; + ExecutableDictionarySource::ExecutableDictionarySource(const DictionaryStructure & dict_struct_, const Poco::Util::AbstractConfiguration & config, const std::string & config_prefix, Block & sample_block, const Context & context) @@ -47,7 +61,7 @@ BlockInputStreamPtr ExecutableDictionarySource::loadAll() LOG_TRACE(log, "loadAll " + toString()); auto process = ShellCommand::execute(command); auto input_stream = context.getInputFormat(format, process->out, sample_block, max_block_size); - return std::make_shared>(input_stream, std::move(process)); + return std::make_shared(input_stream, std::move(process)); } @@ -86,6 +100,12 @@ private: void readSuffix() override { + IProfilingBlockInputStream::readSuffix(); + if (!wait_called) + { + wait_called = true; + command->wait(); + } thread.join(); /// To rethrow an exception, if any. task.get_future().get(); @@ -98,6 +118,7 @@ private: std::unique_ptr command; std::packaged_task task; std::thread thread; + bool wait_called = false; }; From 49690388659844d01f9553f078acaa00887ab704 Mon Sep 17 00:00:00 2001 From: proller Date: Tue, 3 Oct 2017 16:04:16 +0300 Subject: [PATCH 041/109] test me --- dbms/src/Dictionaries/ExecutableDictionarySource.cpp | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/dbms/src/Dictionaries/ExecutableDictionarySource.cpp b/dbms/src/Dictionaries/ExecutableDictionarySource.cpp index f45b99396d7..f8b6f18b574 100644 --- a/dbms/src/Dictionaries/ExecutableDictionarySource.cpp +++ b/dbms/src/Dictionaries/ExecutableDictionarySource.cpp @@ -1,16 +1,12 @@ #include #include - #include - #include #include #include #include - #include #include - #include @@ -23,7 +19,8 @@ static const size_t max_block_size = 8192; class ShellCommandOwningBlockInputStream : public OwningBlockInputStream { public: - ShellCommandOwningBlockInputStream(const BlockInputStreamPtr & stream, std::unique_ptr own) : OwningBlockInputStream(std::move(stream), std::move(own)) + ShellCommandOwningBlockInputStream(const BlockInputStreamPtr & stream, std::unique_ptr own) + : OwningBlockInputStream(std::move(stream), std::move(own)) { } From 44e6ecfe78034e2b31cc1b762deadfae594da766 Mon Sep 17 00:00:00 2001 From: alexey-milovidov Date: Thu, 12 Oct 2017 22:33:53 +0300 Subject: [PATCH 042/109] Update ShellCommand.cpp --- dbms/src/Common/ShellCommand.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/dbms/src/Common/ShellCommand.cpp b/dbms/src/Common/ShellCommand.cpp index 371a967fd0e..b3765874ac4 100644 --- a/dbms/src/Common/ShellCommand.cpp +++ b/dbms/src/Common/ShellCommand.cpp @@ -65,10 +65,10 @@ namespace /// By these return codes from the child process, we learn (for sure) about errors when creating it. enum class ReturnCodes : int { - CANNOT_DUP_STDIN = 1431655765, /// The value is not important, but it is chosen so that it's rare to conflict with the program return code. - CANNOT_DUP_STDOUT = 1431655766, - CANNOT_DUP_STDERR = 1431655767, - CANNOT_EXEC = 1431655768, + CANNOT_DUP_STDIN = 0x55555555, /// The value is not important, but it is chosen so that it's rare to conflict with the program return code. + CANNOT_DUP_STDOUT = 0x55555556, + CANNOT_DUP_STDERR = 0x55555557, + CANNOT_EXEC = 0x55555558, }; } From beb93bb9d6204eb0458798c6f5a57ab6e646d626 Mon Sep 17 00:00:00 2001 From: alexey-milovidov Date: Thu, 12 Oct 2017 22:35:01 +0300 Subject: [PATCH 043/109] Update ExecutableDictionarySource.cpp --- dbms/src/Dictionaries/ExecutableDictionarySource.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/dbms/src/Dictionaries/ExecutableDictionarySource.cpp b/dbms/src/Dictionaries/ExecutableDictionarySource.cpp index f8b6f18b574..9309d4d30af 100644 --- a/dbms/src/Dictionaries/ExecutableDictionarySource.cpp +++ b/dbms/src/Dictionaries/ExecutableDictionarySource.cpp @@ -16,6 +16,7 @@ namespace DB static const size_t max_block_size = 8192; +/// Owns ShellCommand and call wait for it. class ShellCommandOwningBlockInputStream : public OwningBlockInputStream { public: @@ -31,6 +32,7 @@ public: } }; + ExecutableDictionarySource::ExecutableDictionarySource(const DictionaryStructure & dict_struct_, const Poco::Util::AbstractConfiguration & config, const std::string & config_prefix, Block & sample_block, const Context & context) From c2647e0c60406b91448120cefbcb468fcd73c474 Mon Sep 17 00:00:00 2001 From: alexey-milovidov Date: Thu, 12 Oct 2017 22:35:33 +0300 Subject: [PATCH 044/109] Update ExecutableDictionarySource.cpp --- dbms/src/Dictionaries/ExecutableDictionarySource.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dbms/src/Dictionaries/ExecutableDictionarySource.cpp b/dbms/src/Dictionaries/ExecutableDictionarySource.cpp index 9309d4d30af..6d03b176c04 100644 --- a/dbms/src/Dictionaries/ExecutableDictionarySource.cpp +++ b/dbms/src/Dictionaries/ExecutableDictionarySource.cpp @@ -16,7 +16,7 @@ namespace DB static const size_t max_block_size = 8192; -/// Owns ShellCommand and call wait for it. +/// Owns ShellCommand and calls wait for it. class ShellCommandOwningBlockInputStream : public OwningBlockInputStream { public: From 54eb2bbb0ab7cedf7534594e34e113f8b6e4a1b3 Mon Sep 17 00:00:00 2001 From: Alexey Milovidov Date: Thu, 12 Oct 2017 22:40:42 +0300 Subject: [PATCH 045/109] Miscellaneous changes after merge [#CLICKHOUSE-2]. --- dbms/src/Dictionaries/ExecutableDictionarySource.cpp | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/dbms/src/Dictionaries/ExecutableDictionarySource.cpp b/dbms/src/Dictionaries/ExecutableDictionarySource.cpp index 6d03b176c04..23000fd1b30 100644 --- a/dbms/src/Dictionaries/ExecutableDictionarySource.cpp +++ b/dbms/src/Dictionaries/ExecutableDictionarySource.cpp @@ -16,6 +16,9 @@ namespace DB static const size_t max_block_size = 8192; +namespace +{ + /// Owns ShellCommand and calls wait for it. class ShellCommandOwningBlockInputStream : public OwningBlockInputStream { @@ -32,6 +35,8 @@ public: } }; +} + ExecutableDictionarySource::ExecutableDictionarySource(const DictionaryStructure & dict_struct_, const Poco::Util::AbstractConfiguration & config, const std::string & config_prefix, @@ -64,6 +69,9 @@ BlockInputStreamPtr ExecutableDictionarySource::loadAll() } +namespace +{ + /** A stream, that also runs and waits for background thread * (that will feed data into pipe to be read from the other side of the pipe). */ @@ -111,7 +119,7 @@ private: } String getName() const override { return "WithBackgroundThread"; } - String getID() const override { return "WithBackgroundThread(" + stream->getID() + ")"; } + String getID() const override { return "WithBackgroundThread(" + stream->getID() + ")"; } BlockInputStreamPtr stream; std::unique_ptr command; @@ -120,6 +128,8 @@ private: bool wait_called = false; }; +} + BlockInputStreamPtr ExecutableDictionarySource::loadIds(const std::vector & ids) { From cbc81a6a9f40f1e4ed0ccf98970e6a6a5cbcb98e Mon Sep 17 00:00:00 2001 From: proller Date: Thu, 12 Oct 2017 22:46:40 +0300 Subject: [PATCH 046/109] Received signal Segmentation fault (#1300) (#1302) * Received signal Segmentation fault (#1300) * Add test --- .../NullableAdapterBlockInputStream.cpp | 4 ++-- .../00504_insert_miss_columns.reference | 1 + .../0_stateless/00504_insert_miss_columns.sh | 14 ++++++++++++++ 3 files changed, 17 insertions(+), 2 deletions(-) create mode 100644 dbms/tests/queries/0_stateless/00504_insert_miss_columns.reference create mode 100755 dbms/tests/queries/0_stateless/00504_insert_miss_columns.sh diff --git a/dbms/src/DataStreams/NullableAdapterBlockInputStream.cpp b/dbms/src/DataStreams/NullableAdapterBlockInputStream.cpp index 49a349ec980..58a87c6ae44 100644 --- a/dbms/src/DataStreams/NullableAdapterBlockInputStream.cpp +++ b/dbms/src/DataStreams/NullableAdapterBlockInputStream.cpp @@ -102,8 +102,8 @@ void NullableAdapterBlockInputStream::buildActions( for (size_t i = 0; i < in_size; ++i) { - const auto & in_elem = in_sample.getByPosition(i); - const auto & out_elem = out_sample.getByPosition(i); + const auto & in_elem = in_sample.safeGetByPosition(i); + const auto & out_elem = out_sample.safeGetByPosition(i); if (isConvertableTypes(in_elem.type, out_elem.type)) { diff --git a/dbms/tests/queries/0_stateless/00504_insert_miss_columns.reference b/dbms/tests/queries/0_stateless/00504_insert_miss_columns.reference new file mode 100644 index 00000000000..bd110deb023 --- /dev/null +++ b/dbms/tests/queries/0_stateless/00504_insert_miss_columns.reference @@ -0,0 +1 @@ +server still alive diff --git a/dbms/tests/queries/0_stateless/00504_insert_miss_columns.sh b/dbms/tests/queries/0_stateless/00504_insert_miss_columns.sh new file mode 100755 index 00000000000..c3668528ab0 --- /dev/null +++ b/dbms/tests/queries/0_stateless/00504_insert_miss_columns.sh @@ -0,0 +1,14 @@ +#!/usr/bin/env bash + +# https://github.com/yandex/ClickHouse/issues/1300 + +clickhouse-client -q "DROP TABLE IF EXISTS test.advertiser"; +clickhouse-client -q "DROP TABLE IF EXISTS test.advertiser_test"; +clickhouse-client -q "CREATE TABLE test.advertiser ( action_date Date, adblock UInt8, imps Int64 ) Engine = SummingMergeTree( action_date, ( adblock ), 8192, ( imps ) )"; +clickhouse-client -q "CREATE TABLE test.advertiser_test ( action_date Date, adblock UInt8, imps Int64, Hash UInt64 ) Engine = SummingMergeTree( action_date, ( adblock, Hash ), 8192, ( imps ) )"; + +# This test will fail. It's ok. +clickhouse-client -q "INSERT INTO test.advertiser_test SELECT *, sipHash64( CAST(adblock AS String) ), CAST(1 AS Int8) FROM test.advertiser;" 2>/dev/null +clickhouse-client -q "DROP TABLE test.advertiser"; +clickhouse-client -q "DROP TABLE test.advertiser_test"; +clickhouse-client -q "SELECT 'server still alive'"; From f8548156a0b5d04c2e1f82774ed5f0c0d385e0fc Mon Sep 17 00:00:00 2001 From: proller Date: Thu, 12 Oct 2017 22:46:24 +0300 Subject: [PATCH 047/109] Improve tests: allow redefine some values (clickhouse path, ports, ...) --- dbms/src/Server/config.xml | 12 +++++++++++- dbms/tests/clickhouse-test | 20 ++++++-------------- dbms/tests/queries/shell_config.sh | 13 +++++++++++++ 3 files changed, 30 insertions(+), 15 deletions(-) create mode 100644 dbms/tests/queries/shell_config.sh diff --git a/dbms/src/Server/config.xml b/dbms/src/Server/config.xml index 22c62652ec4..9705d5ddaf8 100644 --- a/dbms/src/Server/config.xml +++ b/dbms/src/Server/config.xml @@ -127,7 +127,17 @@ - + + + + + + localhost + 9000 + + + + different observer, is ignored - Void -= priorityDelegate(this, &PriorityEventTest::onVoid, 3); - Void.notify(this); - assert (_count == 1); - - Simple += priorityDelegate(this, &PriorityEventTest::onSimple, 0); - // unregistering with a different priority --> different observer, is ignored - Simple -= priorityDelegate(this, &PriorityEventTest::onSimple, 3); - Simple.notify(this, tmp); - assert (_count == 2); - - ConstSimple += priorityDelegate(this, &PriorityEventTest::onConstSimple, 0); - ConstSimple -= priorityDelegate(this, &PriorityEventTest::onConstSimple, 3); - ConstSimple.notify(this, tmp); - assert (_count == 3); - - EventArgs* pArgs = &args; - Complex += priorityDelegate(this, &PriorityEventTest::onComplex, 0); - Complex -= priorityDelegate(this, &PriorityEventTest::onComplex, 3); - Complex.notify(this, pArgs); - assert (_count == 4); - - Complex2 += priorityDelegate(this, &PriorityEventTest::onComplex2, 0); - Complex2 -= priorityDelegate(this, &PriorityEventTest::onComplex2, 3); - Complex2.notify(this, args); - assert (_count == 5); - - const EventArgs* pCArgs = &args; - ConstComplex += priorityDelegate(this, &PriorityEventTest::onConstComplex, 0); - ConstComplex -= priorityDelegate(this, &PriorityEventTest::onConstComplex, 3); - ConstComplex.notify(this, pCArgs); - assert (_count == 6); - - Const2Complex += priorityDelegate(this, &PriorityEventTest::onConst2Complex, 0); - Const2Complex -= priorityDelegate(this, &PriorityEventTest::onConst2Complex, 3); - Const2Complex.notify(this, pArgs); - assert (_count == 7); - // check if 2nd notify also works - Const2Complex.notify(this, pArgs); - assert (_count == 8); - -} - -void PriorityEventTest::testDuplicateRegister() -{ - int tmp = 0; - - assert (_count == 0); - - Simple += priorityDelegate(this, &PriorityEventTest::onSimple, 0); - Simple += priorityDelegate(this, &PriorityEventTest::onSimple, 0); - Simple.notify(this, tmp); - assert (_count == 2); - Simple -= priorityDelegate(this, &PriorityEventTest::onSimple, 0); - Simple.notify(this, tmp); - assert (_count == 3); - - Simple += priorityDelegate(this, &PriorityEventTest::onSimpleOther, 1); - Simple.notify(this, tmp); - assert (_count == 4 + LARGEINC); - Simple -= priorityDelegate(this, &PriorityEventTest::onSimpleOther, 1); - Simple.notify(this, tmp); - assert (_count == 5 + LARGEINC); -} - -void PriorityEventTest::testDuplicateUnregister() -{ - // duplicate unregister shouldn't give an error, - int tmp = 0; - - assert (_count == 0); - - Simple -= priorityDelegate(this, &PriorityEventTest::onSimple, 0); // should work - Simple.notify(this, tmp); - assert (_count == 0); - - Simple += priorityDelegate(this, &PriorityEventTest::onSimple, 0); - Simple.notify(this, tmp); - assert (_count == 1); - - Simple -= priorityDelegate(this, &PriorityEventTest::onSimple, 0); - Simple.notify(this, tmp); - assert (_count == 1); - - Simple -= priorityDelegate(this, &PriorityEventTest::onSimple, 0); - Simple.notify(this, tmp); - assert (_count == 1); -} - - -void PriorityEventTest::testDisabling() -{ - int tmp = 0; - - assert (_count == 0); - - Simple += priorityDelegate(this, &PriorityEventTest::onSimple, 0); - Simple.disable(); - Simple.notify(this, tmp); - assert (_count == 0); - Simple.enable(); - Simple.notify(this, tmp); - assert (_count == 1); - - // unregister should also work with disabled event - Simple.disable(); - Simple -= priorityDelegate(this, &PriorityEventTest::onSimple, 0); - Simple.enable(); - Simple.notify(this, tmp); - assert (_count == 1); -} - -void PriorityEventTest::testPriorityOrder() -{ - DummyDelegate o1; - DummyDelegate o2; - - assert (_count == 0); - - Simple += PriorityDelegate(&o2, &DummyDelegate::onSimple2, 1); - Simple += PriorityDelegate(&o1, &DummyDelegate::onSimple, 0); - - int tmp = 0; - Simple.notify(this, tmp); - assert (tmp == 2); - - Simple -= PriorityDelegate(&o1, &DummyDelegate::onSimple, 0); - Simple -= PriorityDelegate(&o2, &DummyDelegate::onSimple2, 1); - - // now try with the wrong order - Simple += PriorityDelegate(&o2, &DummyDelegate::onSimple2, 0); - Simple += PriorityDelegate(&o1, &DummyDelegate::onSimple, 1); - - try - { - tmp = 0; - Simple.notify(this, tmp); - failmsg ("Notify should not work"); - } - catch (Poco::InvalidArgumentException&) - { - } - - Simple -= PriorityDelegate(&o2, &DummyDelegate::onSimple2, 0); - Simple -= PriorityDelegate(&o1, &DummyDelegate::onSimple, 1); -} - -void PriorityEventTest::testPriorityOrderExpire() -{ - // expire must not break order! - DummyDelegate o1; - DummyDelegate o2; - - assert (_count == 0); - - Simple += priorityDelegate(&o2, &DummyDelegate::onSimple2, 1, 500000); - Simple += priorityDelegate(&o1, &DummyDelegate::onSimple, 0, 500000); - int tmp = 0; - Simple.notify(this, tmp); - assert (tmp == 2); - - // both ways of unregistering should work - Simple -= priorityDelegate(&o1, &DummyDelegate::onSimple, 0, 500000); - Simple -= priorityDelegate(&o2, &DummyDelegate::onSimple2, 1); - Simple.notify(this, tmp); - assert (tmp == 2); - - // now start mixing of expire and non expire - tmp = 0; - Simple += priorityDelegate(&o2, &DummyDelegate::onSimple2, 1, 500000); - Simple += priorityDelegate(&o1, &DummyDelegate::onSimple, 0); - - Simple.notify(this, tmp); - assert (tmp == 2); - - Simple -= priorityDelegate(&o2, &DummyDelegate::onSimple2, 1); - // it is not forbidden to unregister a non expiring event with an expire decorator (it is just stupid ;-)) - Simple -= priorityDelegate(&o1, &DummyDelegate::onSimple, 0, 500000); - Simple.notify(this, tmp); - assert (tmp == 2); - - // now try with the wrong order - Simple += priorityDelegate(&o2, &DummyDelegate::onSimple2, 0, 500000); - Simple += priorityDelegate(&o1, &DummyDelegate::onSimple, 1); - - try - { - tmp = 0; - Simple.notify(this, tmp); - failmsg ("Notify should not work"); - } - catch (Poco::InvalidArgumentException&) - { - } - - Simple -= priorityDelegate(&o2, &DummyDelegate::onSimple2, 0, 500000); - Simple -= priorityDelegate(&o1, &DummyDelegate::onSimple, 1); - -} - -void PriorityEventTest::testExpire() -{ - int tmp = 0; - - assert (_count == 0); - - Simple += priorityDelegate(this, &PriorityEventTest::onSimple, 1, 500); - Simple.notify(this, tmp); - assert (_count == 1); - Poco::Thread::sleep(700); - Simple.notify(this, tmp); - assert (_count == 1); - Simple -= priorityDelegate(this, &PriorityEventTest::onSimple, 1, 500); - - Simple += priorityDelegate(&PriorityEventTest::onStaticSimple, 1, 500); - Simple += priorityDelegate(&PriorityEventTest::onStaticSimple2, 1, 500); - Simple += priorityDelegate(&PriorityEventTest::onStaticSimple3, 1, 500); - Simple.notify(this, tmp); - assert (_count == 3); - Poco::Thread::sleep(700); - Simple.notify(this, tmp); - assert (_count == 3); -} - - -void PriorityEventTest::testExpireReRegister() -{ - int tmp = 0; - - assert (_count == 0); - - Simple += priorityDelegate(this, &PriorityEventTest::onSimple, 1, 500); - Simple.notify(this, tmp); - assert (_count == 1); - Poco::Thread::sleep(200); - Simple.notify(this, tmp); - assert (_count == 2); - // renew registration - Simple += priorityDelegate(this, &PriorityEventTest::onSimple, 1, 600); - Poco::Thread::sleep(400); - Simple.notify(this, tmp); - assert (_count == 3); - Poco::Thread::sleep(300); - Simple.notify(this, tmp); - assert (_count == 3); -} - - -void PriorityEventTest::testReturnParams() -{ - DummyDelegate o1; - Simple += priorityDelegate(&o1, &DummyDelegate::onSimple, 0); - - int tmp = 0; - Simple.notify(this, tmp); - assert (tmp == 1); -} - -void PriorityEventTest::testOverwriteDelegate() -{ - DummyDelegate o1; - Simple += priorityDelegate(&o1, &DummyDelegate::onSimple, 0); - Simple += priorityDelegate(&o1, &DummyDelegate::onSimple2, 0); - - int tmp = 0; // onsimple requires 0 as input - Simple.notify(this, tmp); - assert (tmp == 2); -} - -void PriorityEventTest::testAsyncNotify() -{ - Poco::PriorityEvent* pSimple= new Poco::PriorityEvent(); - (*pSimple) += priorityDelegate(this, &PriorityEventTest::onAsync, 0); - assert (_count == 0); - int tmp = 0; - Poco::ActiveResultretArg = pSimple->notifyAsync(this, tmp); - delete pSimple; // must work even when the event got deleted! - pSimple = NULL; - assert (_count == 0); - retArg.wait(); - assert (retArg.data() == tmp); - assert (_count == LARGEINC); - -} - -void PriorityEventTest::onStaticVoid(const void* pSender) -{ - PriorityEventTest* p = const_cast(reinterpret_cast(pSender)); - p->_count++; -} - -void PriorityEventTest::onVoid(const void* pSender){ - _count++; -} - -void PriorityEventTest::onStaticSimple(const void* pSender, int& i) -{ - PriorityEventTest* p = const_cast(reinterpret_cast(pSender)); - p->_count++; -} - - -void PriorityEventTest::onStaticSimple2(void* pSender, int& i) -{ - PriorityEventTest* p = reinterpret_cast(pSender); - p->_count++; -} - - -void PriorityEventTest::onStaticSimple3(int& i) -{ -} - - -void PriorityEventTest::onSimpleNoSender(int& i) -{ - _count++; -} - - -void PriorityEventTest::onSimple(const void* pSender, int& i) -{ - _count++; -} - -void PriorityEventTest::onSimpleOther(const void* pSender, int& i) -{ - _count += LARGEINC ; -} - -void PriorityEventTest::onConstSimple(const void* pSender, const int& i) -{ - _count++; -} - -void PriorityEventTest::onComplex(const void* pSender, Poco::EventArgs* & i) -{ - _count++; -} - -void PriorityEventTest::onComplex2(const void* pSender, Poco::EventArgs & i) -{ - _count++; -} - -void PriorityEventTest::onConstComplex(const void* pSender, const Poco::EventArgs*& i) -{ - _count++; -} - -void PriorityEventTest::onConst2Complex(const void* pSender, const Poco::EventArgs * const & i) -{ - _count++; -} - -void PriorityEventTest::onAsync(const void* pSender, int& i) -{ - Poco::Thread::sleep(700); - _count += LARGEINC ; -} - -int PriorityEventTest::getCount() const -{ - return _count; -} - -void PriorityEventTest::setUp() -{ - _count = 0; - // must clear events, otherwise repeating test executions will fail - // because tests are only created once, only setup is called before - // each test run - Void.clear(); - Simple.clear(); - ConstSimple.clear(); - Complex.clear(); - Complex2.clear(); - ConstComplex.clear(); - Const2Complex.clear(); -} - - -void PriorityEventTest::tearDown() -{ -} - - -CppUnit::Test* PriorityEventTest::suite() -{ - CppUnit::TestSuite* pSuite = new CppUnit::TestSuite("PriorityEventTest"); - - CppUnit_addTest(pSuite, PriorityEventTest, testNoDelegate); - CppUnit_addTest(pSuite, PriorityEventTest, testSingleDelegate); - CppUnit_addTest(pSuite, PriorityEventTest, testReturnParams); - CppUnit_addTest(pSuite, PriorityEventTest, testDuplicateRegister); - CppUnit_addTest(pSuite, PriorityEventTest, testDuplicateUnregister); - CppUnit_addTest(pSuite, PriorityEventTest, testDisabling); - CppUnit_addTest(pSuite, PriorityEventTest, testPriorityOrder); - CppUnit_addTest(pSuite, PriorityEventTest, testPriorityOrderExpire); - CppUnit_addTest(pSuite, PriorityEventTest, testExpire); - CppUnit_addTest(pSuite, PriorityEventTest, testExpireReRegister); - CppUnit_addTest(pSuite, PriorityEventTest, testOverwriteDelegate); - CppUnit_addTest(pSuite, PriorityEventTest, testAsyncNotify); - return pSuite; -} diff --git a/contrib/libpoco/Foundation/testsuite/src/PriorityEventTest.h b/contrib/libpoco/Foundation/testsuite/src/PriorityEventTest.h deleted file mode 100644 index a7d972018eb..00000000000 --- a/contrib/libpoco/Foundation/testsuite/src/PriorityEventTest.h +++ /dev/null @@ -1,80 +0,0 @@ -// -// PriorityEventTest.h -// -// $Id: //poco/1.4/Foundation/testsuite/src/PriorityEventTest.h#1 $ -// -// Definition of the PriorityEventTest class. -// -// Copyright (c) 2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef PriorityEventTest_INCLUDED -#define PriorityEventTest_INCLUDED - - -#include "Poco/Foundation.h" -#include "CppUnit/TestCase.h" -#include "Poco/PriorityEvent.h" -#include "Poco/EventArgs.h" - - -class PriorityEventTest: public CppUnit::TestCase -{ - Poco::PriorityEvent Void; - Poco::PriorityEvent Simple; - Poco::PriorityEvent ConstSimple; - Poco::PriorityEvent Complex; - Poco::PriorityEvent Complex2; - Poco::PriorityEvent ConstComplex; - Poco::PriorityEvent Const2Complex; -public: - PriorityEventTest(const std::string& name); - ~PriorityEventTest(); - - void testNoDelegate(); - void testSingleDelegate(); - void testDuplicateRegister(); - void testDuplicateUnregister(); - void testDisabling(); - void testPriorityOrder(); - void testPriorityOrderExpire(); - void testExpire(); - void testExpireReRegister(); - void testReturnParams(); - void testOverwriteDelegate(); - void testAsyncNotify(); - - void setUp(); - void tearDown(); - static CppUnit::Test* suite(); - -protected: - static void onStaticVoid(const void* pSender); - - void onVoid(const void* pSender); - - static void onStaticSimple(const void* pSender, int& i); - static void onStaticSimple2(void* pSender, int& i); - static void onStaticSimple3(int& i); - - void onSimpleNoSender(int& i); - void onSimple(const void* pSender, int& i); - void onSimpleOther(const void* pSender, int& i); - void onConstSimple(const void* pSender, const int& i); - void onComplex(const void* pSender, Poco::EventArgs* & i); - void onComplex2(const void* pSender, Poco::EventArgs & i); - void onConstComplex(const void* pSender, const Poco::EventArgs*& i); - void onConst2Complex(const void* pSender, const Poco::EventArgs * const & i); - void onAsync(const void* pSender, int& i); - - int getCount() const; -private: - int _count; -}; - - -#endif // PriorityEventTest_INCLUDED diff --git a/contrib/libpoco/Foundation/testsuite/src/PriorityNotificationQueueTest.cpp b/contrib/libpoco/Foundation/testsuite/src/PriorityNotificationQueueTest.cpp deleted file mode 100644 index 8240a2a8451..00000000000 --- a/contrib/libpoco/Foundation/testsuite/src/PriorityNotificationQueueTest.cpp +++ /dev/null @@ -1,214 +0,0 @@ -// -// PriorityNotificationQueueTest.cpp -// -// $Id: //poco/1.4/Foundation/testsuite/src/PriorityNotificationQueueTest.cpp#1 $ -// -// Copyright (c) 2009, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "PriorityNotificationQueueTest.h" -#include "CppUnit/TestCaller.h" -#include "CppUnit/TestSuite.h" -#include "Poco/PriorityNotificationQueue.h" -#include "Poco/Notification.h" -#include "Poco/Thread.h" -#include "Poco/Runnable.h" -#include "Poco/RunnableAdapter.h" -#include "Poco/Random.h" - - -using Poco::PriorityNotificationQueue; -using Poco::Notification; -using Poco::Thread; -using Poco::RunnableAdapter; - - -namespace -{ - class QTestNotification: public Notification - { - public: - QTestNotification(const std::string& data): _data(data) - { - } - ~QTestNotification() - { - } - const std::string& data() const - { - return _data; - } - - private: - std::string _data; - }; -} - - -PriorityNotificationQueueTest::PriorityNotificationQueueTest(const std::string& name): CppUnit::TestCase(name) -{ -} - - -PriorityNotificationQueueTest::~PriorityNotificationQueueTest() -{ -} - - -void PriorityNotificationQueueTest::testQueueDequeue() -{ - PriorityNotificationQueue queue; - assert (queue.empty()); - assert (queue.size() == 0); - Notification* pNf = queue.dequeueNotification(); - assertNullPtr(pNf); - queue.enqueueNotification(new Notification, 1); - assert (!queue.empty()); - assert (queue.size() == 1); - pNf = queue.dequeueNotification(); - assertNotNullPtr(pNf); - assert (queue.empty()); - assert (queue.size() == 0); - pNf->release(); - - queue.enqueueNotification(new QTestNotification("first"), 1); - queue.enqueueNotification(new QTestNotification("fourth"), 4); - queue.enqueueNotification(new QTestNotification("third"), 3); - queue.enqueueNotification(new QTestNotification("second"), 2); - assert (!queue.empty()); - assert (queue.size() == 4); - QTestNotification* pTNf = dynamic_cast(queue.dequeueNotification()); - assertNotNullPtr(pTNf); - assert (pTNf->data() == "first"); - pTNf->release(); - assert (!queue.empty()); - assert (queue.size() == 3); - pTNf = dynamic_cast(queue.dequeueNotification()); - assertNotNullPtr(pTNf); - assert (pTNf->data() == "second"); - pTNf->release(); - assert (!queue.empty()); - assert (queue.size() == 2); - pTNf = dynamic_cast(queue.dequeueNotification()); - assertNotNullPtr(pTNf); - assert (pTNf->data() == "third"); - pTNf->release(); - assert (!queue.empty()); - assert (queue.size() == 1); - pTNf = dynamic_cast(queue.dequeueNotification()); - assertNotNullPtr(pTNf); - assert (pTNf->data() == "fourth"); - pTNf->release(); - assert (queue.empty()); - assert (queue.size() == 0); - - pNf = queue.dequeueNotification(); - assertNullPtr(pNf); -} - - -void PriorityNotificationQueueTest::testWaitDequeue() -{ - PriorityNotificationQueue queue; - queue.enqueueNotification(new QTestNotification("third"), 3); - queue.enqueueNotification(new QTestNotification("fourth"), 4); - assert (!queue.empty()); - assert (queue.size() == 2); - QTestNotification* pTNf = dynamic_cast(queue.waitDequeueNotification(10)); - assertNotNullPtr(pTNf); - assert (pTNf->data() == "third"); - pTNf->release(); - assert (!queue.empty()); - assert (queue.size() == 1); - pTNf = dynamic_cast(queue.waitDequeueNotification(10)); - assertNotNullPtr(pTNf); - assert (pTNf->data() == "fourth"); - pTNf->release(); - assert (queue.empty()); - assert (queue.size() == 0); - - Notification* pNf = queue.waitDequeueNotification(10); - assertNullPtr(pNf); -} - - -void PriorityNotificationQueueTest::testThreads() -{ - const int NOTIFICATION_COUNT = 5000; - - Thread t1("thread1"); - Thread t2("thread2"); - Thread t3("thread3"); - - RunnableAdapter ra(*this, &PriorityNotificationQueueTest::work); - t1.start(ra); - t2.start(ra); - t3.start(ra); - for (int i = 0; i < NOTIFICATION_COUNT; ++i) - { - _queue.enqueueNotification(new Notification, 1); - } - while (!_queue.empty()) Thread::sleep(50); - Thread::sleep(20); - _queue.wakeUpAll(); - t1.join(); - t2.join(); - t3.join(); - assert (_handled.size() == NOTIFICATION_COUNT); - assert (_handled.count("thread1") > 0); - assert (_handled.count("thread2") > 0); - assert (_handled.count("thread3") > 0); -} - - -void PriorityNotificationQueueTest::testDefaultQueue() -{ - PriorityNotificationQueue& queue = PriorityNotificationQueue::defaultQueue(); - assert (queue.empty()); - assert (queue.size() == 0); -} - - -void PriorityNotificationQueueTest::setUp() -{ - _handled.clear(); -} - - -void PriorityNotificationQueueTest::tearDown() -{ -} - - -void PriorityNotificationQueueTest::work() -{ - Poco::Random rnd; - Thread::sleep(50); - Notification* pNf = _queue.waitDequeueNotification(); - while (pNf) - { - pNf->release(); - _mutex.lock(); - _handled.insert(Thread::current()->name()); - _mutex.unlock(); - Thread::sleep(rnd.next(5)); - pNf = _queue.waitDequeueNotification(); - } -} - - -CppUnit::Test* PriorityNotificationQueueTest::suite() -{ - CppUnit::TestSuite* pSuite = new CppUnit::TestSuite("PriorityNotificationQueueTest"); - - CppUnit_addTest(pSuite, PriorityNotificationQueueTest, testQueueDequeue); - CppUnit_addTest(pSuite, PriorityNotificationQueueTest, testWaitDequeue); - CppUnit_addTest(pSuite, PriorityNotificationQueueTest, testThreads); - CppUnit_addTest(pSuite, PriorityNotificationQueueTest, testDefaultQueue); - - return pSuite; -} diff --git a/contrib/libpoco/Foundation/testsuite/src/PriorityNotificationQueueTest.h b/contrib/libpoco/Foundation/testsuite/src/PriorityNotificationQueueTest.h deleted file mode 100644 index 72652881d38..00000000000 --- a/contrib/libpoco/Foundation/testsuite/src/PriorityNotificationQueueTest.h +++ /dev/null @@ -1,52 +0,0 @@ -// -// PriorityNotificationQueueTest.h -// -// $Id: //poco/1.4/Foundation/testsuite/src/PriorityNotificationQueueTest.h#1 $ -// -// Definition of the PriorityNotificationQueueTest class. -// -// Copyright (c) 2009, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef PriorityNotificationQueueTest_INCLUDED -#define PriorityNotificationQueueTest_INCLUDED - - -#include "Poco/Foundation.h" -#include "CppUnit/TestCase.h" -#include "Poco/PriorityNotificationQueue.h" -#include "Poco/Mutex.h" -#include - - -class PriorityNotificationQueueTest: public CppUnit::TestCase -{ -public: - PriorityNotificationQueueTest(const std::string& name); - ~PriorityNotificationQueueTest(); - - void testQueueDequeue(); - void testWaitDequeue(); - void testThreads(); - void testDefaultQueue(); - - void setUp(); - void tearDown(); - - static CppUnit::Test* suite(); - -protected: - void work(); - -private: - Poco::PriorityNotificationQueue _queue; - std::multiset _handled; - Poco::FastMutex _mutex; -}; - - -#endif // PriorityNotificationQueueTest_INCLUDED diff --git a/contrib/libpoco/Foundation/testsuite/src/ProcessTest.cpp b/contrib/libpoco/Foundation/testsuite/src/ProcessTest.cpp deleted file mode 100644 index 3ea533fb007..00000000000 --- a/contrib/libpoco/Foundation/testsuite/src/ProcessTest.cpp +++ /dev/null @@ -1,214 +0,0 @@ -// -// ProcessTest.cpp -// -// $Id: //poco/1.4/Foundation/testsuite/src/ProcessTest.cpp#2 $ -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "ProcessTest.h" -#include "CppUnit/TestCaller.h" -#include "CppUnit/TestSuite.h" -#include "Poco/Process.h" -#include "Poco/Pipe.h" -#include "Poco/PipeStream.h" - - -using Poco::Process; -using Poco::ProcessHandle; -using Poco::Pipe; -using Poco::PipeInputStream; -using Poco::PipeOutputStream; - - -ProcessTest::ProcessTest(const std::string& name): CppUnit::TestCase(name) -{ -} - - -ProcessTest::~ProcessTest() -{ -} - - -void ProcessTest::testLaunch() -{ - std::string name("TestApp"); - std::string cmd; -#if defined(_DEBUG) - name += "d"; -#endif - -#if defined(POCO_OS_FAMILY_UNIX) - cmd = "./"; - cmd += name; -#elif defined(_WIN32_WCE) - cmd = "\\"; - cmd += name; - cmd += ".EXE"; -#else - cmd = name; -#endif - - std::vector args; - args.push_back("arg1"); - args.push_back("arg2"); - args.push_back("arg3"); - ProcessHandle ph = Process::launch(cmd, args); - int rc = ph.wait(); - assert (rc == 3); -} - - -void ProcessTest::testLaunchRedirectIn() -{ -#if !defined(_WIN32_WCE) - std::string name("TestApp"); - std::string cmd; -#if defined(_DEBUG) - name += "d"; -#endif - -#if defined(POCO_OS_FAMILY_UNIX) - cmd = "./"; - cmd += name; -#else - cmd = name; -#endif - - std::vector args; - args.push_back("-count"); - Pipe inPipe; - ProcessHandle ph = Process::launch(cmd, args, &inPipe, 0, 0); - PipeOutputStream ostr(inPipe); - ostr << std::string(100, 'x'); - ostr.close(); - int rc = ph.wait(); - assert (rc == 100); -#endif // !defined(_WIN32_WCE) -} - - -void ProcessTest::testLaunchRedirectOut() -{ -#if !defined(_WIN32_WCE) - std::string name("TestApp"); - std::string cmd; -#if defined(_DEBUG) - name += "d"; -#endif - -#if defined(POCO_OS_FAMILY_UNIX) - cmd = "./"; - cmd += name; -#else - cmd = name; -#endif - - std::vector args; - args.push_back("-hello"); - Pipe outPipe; - ProcessHandle ph = Process::launch(cmd, args, 0, &outPipe, 0); - PipeInputStream istr(outPipe); - std::string s; - int c = istr.get(); - while (c != -1) { s += (char) c; c = istr.get(); } - assert (s == "Hello, world!"); - int rc = ph.wait(); - assert (rc == 1); -#endif // !defined(_WIN32_WCE) -} - - -void ProcessTest::testLaunchEnv() -{ -#if !defined(_WIN32_WCE) - std::string name("TestApp"); - std::string cmd; -#if defined(_DEBUG) - name += "d"; -#endif - -#if defined(POCO_OS_FAMILY_UNIX) - cmd = "./"; - cmd += name; -#else - cmd = name; -#endif - - std::vector args; - args.push_back("-env"); - Pipe outPipe; - Process::Env env; - env["TESTENV"] = "test"; - ProcessHandle ph = Process::launch(cmd, args, 0, &outPipe, 0, env); - PipeInputStream istr(outPipe); - std::string s; - int c = istr.get(); - while (c != -1) { s += (char) c; c = istr.get(); } - assert (s == "test"); - int rc = ph.wait(); - assert (rc == 0); -#endif // !defined(_WIN32_WCE) -} - - -void ProcessTest::testIsRunning() -{ -#if !defined(_WIN32_WCE) - std::string name("TestApp"); - std::string cmd; -#if defined(_DEBUG) - name += "d"; -#endif - -#if defined(POCO_OS_FAMILY_UNIX) - cmd = "./"; - cmd += name; -#else - cmd = name; -#endif - - std::vector args; - args.push_back("-count"); - Pipe inPipe; - ProcessHandle ph = Process::launch(cmd, args, &inPipe, 0, 0); - Process::PID id = ph.id(); - assert (Process::isRunning(ph)); - assert (Process::isRunning(id)); - PipeOutputStream ostr(inPipe); - ostr << std::string(100, 'x'); - ostr.close(); - int rc = ph.wait(); - assert (!Process::isRunning(ph)); - assert (!Process::isRunning(id)); -#endif // !defined(_WIN32_WCE) -} - - -void ProcessTest::setUp() -{ -} - - -void ProcessTest::tearDown() -{ -} - - -CppUnit::Test* ProcessTest::suite() -{ - CppUnit::TestSuite* pSuite = new CppUnit::TestSuite("ProcessTest"); - - CppUnit_addTest(pSuite, ProcessTest, testLaunch); - CppUnit_addTest(pSuite, ProcessTest, testLaunchRedirectIn); - CppUnit_addTest(pSuite, ProcessTest, testLaunchRedirectOut); - CppUnit_addTest(pSuite, ProcessTest, testLaunchEnv); - CppUnit_addTest(pSuite, ProcessTest, testIsRunning); - - return pSuite; -} diff --git a/contrib/libpoco/Foundation/testsuite/src/ProcessTest.h b/contrib/libpoco/Foundation/testsuite/src/ProcessTest.h deleted file mode 100644 index a4fee2ea019..00000000000 --- a/contrib/libpoco/Foundation/testsuite/src/ProcessTest.h +++ /dev/null @@ -1,44 +0,0 @@ -// -// ProcessTest.h -// -// $Id: //poco/1.4/Foundation/testsuite/src/ProcessTest.h#2 $ -// -// Definition of the ProcessTest class. -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef ProcessTest_INCLUDED -#define ProcessTest_INCLUDED - - -#include "Poco/Foundation.h" -#include "CppUnit/TestCase.h" - - -class ProcessTest: public CppUnit::TestCase -{ -public: - ProcessTest(const std::string& name); - ~ProcessTest(); - - void testLaunch(); - void testLaunchRedirectIn(); - void testLaunchRedirectOut(); - void testLaunchEnv(); - void testIsRunning(); - - void setUp(); - void tearDown(); - - static CppUnit::Test* suite(); - -private: -}; - - -#endif // ProcessTest_INCLUDED diff --git a/contrib/libpoco/Foundation/testsuite/src/ProcessesTestSuite.cpp b/contrib/libpoco/Foundation/testsuite/src/ProcessesTestSuite.cpp deleted file mode 100644 index 7a7eedc4b0b..00000000000 --- a/contrib/libpoco/Foundation/testsuite/src/ProcessesTestSuite.cpp +++ /dev/null @@ -1,30 +0,0 @@ -// -// ProcessesTestSuite.cpp -// -// $Id: //poco/1.4/Foundation/testsuite/src/ProcessesTestSuite.cpp#1 $ -// -// Copyright (c) 2004-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "ProcessesTestSuite.h" -#include "ProcessTest.h" -#include "NamedMutexTest.h" -#include "NamedEventTest.h" -#include "SharedMemoryTest.h" - - -CppUnit::Test* ProcessesTestSuite::suite() -{ - CppUnit::TestSuite* pSuite = new CppUnit::TestSuite("ProcessesTestSuite"); - - pSuite->addTest(ProcessTest::suite()); - pSuite->addTest(NamedMutexTest::suite()); - pSuite->addTest(NamedEventTest::suite()); - pSuite->addTest(SharedMemoryTest::suite()); - - return pSuite; -} diff --git a/contrib/libpoco/Foundation/testsuite/src/ProcessesTestSuite.h b/contrib/libpoco/Foundation/testsuite/src/ProcessesTestSuite.h deleted file mode 100644 index 50a73942f22..00000000000 --- a/contrib/libpoco/Foundation/testsuite/src/ProcessesTestSuite.h +++ /dev/null @@ -1,29 +0,0 @@ -// -// ProcessesTestSuite.h -// -// $Id: //poco/1.4/Foundation/testsuite/src/ProcessesTestSuite.h#1 $ -// -// Definition of the ProcessesTestSuite class. -// -// Copyright (c) 2004-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef ProcessesTestSuite_INCLUDED -#define ProcessesTestSuite_INCLUDED - - -#include "CppUnit/TestSuite.h" - - -class ProcessesTestSuite -{ -public: - static CppUnit::Test* suite(); -}; - - -#endif // ProcessesTestSuite_INCLUDED diff --git a/contrib/libpoco/Foundation/testsuite/src/RWLockTest.cpp b/contrib/libpoco/Foundation/testsuite/src/RWLockTest.cpp deleted file mode 100644 index e8b6a30f11d..00000000000 --- a/contrib/libpoco/Foundation/testsuite/src/RWLockTest.cpp +++ /dev/null @@ -1,218 +0,0 @@ -// -// RWLockTest.cpp -// -// $Id: //poco/1.4/Foundation/testsuite/src/RWLockTest.cpp#1 $ -// -// Copyright (c) 2004-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "RWLockTest.h" -#include "CppUnit/TestCaller.h" -#include "CppUnit/TestSuite.h" -#include "Poco/RWLock.h" -#include "Poco/Thread.h" -#include "Poco/Runnable.h" - - -using Poco::RWLock; -using Poco::Thread; -using Poco::Runnable; - - -class RWLockRunnable: public Runnable -{ -public: - RWLockRunnable(RWLock& lock, volatile int& counter): _lock(lock), _counter(counter), _ok(true) - { - } - - void run() - { - int lastCount = 0; - for (int i = 0; i < 10000; ++i) - { - _lock.readLock(); - lastCount = _counter; - for (int k = 0; k < 100; ++k) - { - if (_counter != lastCount) _ok = false; - Thread::yield(); - } - _lock.unlock(); - _lock.writeLock(); - for (int k = 0; k < 100; ++k) - { - --_counter; - Thread::yield(); - } - for (int k = 0; k < 100; ++k) - { - ++_counter; - Thread::yield(); - } - ++_counter; - if (_counter <= lastCount) _ok = false; - _lock.unlock(); - } - } - - bool ok() const - { - return _ok; - } - -private: - RWLock& _lock; - volatile int& _counter; - bool _ok; -}; - - -class RWTryLockRunnable: public Runnable -{ -public: - RWTryLockRunnable(RWLock& lock, volatile int& counter): _lock(lock), _counter(counter), _ok(true) - { - } - - void run() - { - int lastCount = 0; - for (int i = 0; i < 10000; ++i) - { - while (!_lock.tryReadLock()) Thread::yield(); - lastCount = _counter; - for (int k = 0; k < 100; ++k) - { - if (_counter != lastCount) _ok = false; - Thread::yield(); - } - _lock.unlock(); - while (!_lock.tryWriteLock()) Thread::yield(); - for (int k = 0; k < 100; ++k) - { - --_counter; - Thread::yield(); - } - for (int k = 0; k < 100; ++k) - { - ++_counter; - Thread::yield(); - } - ++_counter; - if (_counter <= lastCount) _ok = false; - _lock.unlock(); - } - } - - bool ok() const - { - return _ok; - } - -private: - RWLock& _lock; - volatile int& _counter; - bool _ok; -}; - - -RWLockTest::RWLockTest(const std::string& name): CppUnit::TestCase(name) -{ -} - - -RWLockTest::~RWLockTest() -{ -} - - -void RWLockTest::testLock() -{ - RWLock lock; - int counter = 0; - RWLockRunnable r1(lock, counter); - RWLockRunnable r2(lock, counter); - RWLockRunnable r3(lock, counter); - RWLockRunnable r4(lock, counter); - RWLockRunnable r5(lock, counter); - Thread t1; - Thread t2; - Thread t3; - Thread t4; - Thread t5; - t1.start(r1); - t2.start(r2); - t3.start(r3); - t4.start(r4); - t5.start(r5); - t1.join(); - t2.join(); - t3.join(); - t4.join(); - t5.join(); - assert (counter == 50000); - assert (r1.ok()); - assert (r2.ok()); - assert (r3.ok()); - assert (r4.ok()); - assert (r5.ok()); -} - - -void RWLockTest::testTryLock() -{ - RWLock lock; - int counter = 0; - RWTryLockRunnable r1(lock, counter); - RWTryLockRunnable r2(lock, counter); - RWTryLockRunnable r3(lock, counter); - RWTryLockRunnable r4(lock, counter); - RWTryLockRunnable r5(lock, counter); - Thread t1; - Thread t2; - Thread t3; - Thread t4; - Thread t5; - t1.start(r1); - t2.start(r2); - t3.start(r3); - t4.start(r4); - t5.start(r5); - t1.join(); - t2.join(); - t3.join(); - t4.join(); - t5.join(); - assert (counter == 50000); - assert (r1.ok()); - assert (r2.ok()); - assert (r3.ok()); - assert (r4.ok()); - assert (r5.ok()); -} - - -void RWLockTest::setUp() -{ -} - - -void RWLockTest::tearDown() -{ -} - - -CppUnit::Test* RWLockTest::suite() -{ - CppUnit::TestSuite* pSuite = new CppUnit::TestSuite("RWLockTest"); - - CppUnit_addTest(pSuite, RWLockTest, testLock); - CppUnit_addTest(pSuite, RWLockTest, testTryLock); - - return pSuite; -} diff --git a/contrib/libpoco/Foundation/testsuite/src/RWLockTest.h b/contrib/libpoco/Foundation/testsuite/src/RWLockTest.h deleted file mode 100644 index fdda37e234a..00000000000 --- a/contrib/libpoco/Foundation/testsuite/src/RWLockTest.h +++ /dev/null @@ -1,41 +0,0 @@ -// -// RWLockTest.h -// -// $Id: //poco/1.4/Foundation/testsuite/src/RWLockTest.h#1 $ -// -// Definition of the RWLockTest class. -// -// Copyright (c) 2004-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef RWLockTest_INCLUDED -#define RWLockTest_INCLUDED - - -#include "Poco/Foundation.h" -#include "CppUnit/TestCase.h" - - -class RWLockTest: public CppUnit::TestCase -{ -public: - RWLockTest(const std::string& name); - ~RWLockTest(); - - void testLock(); - void testTryLock(); - - void setUp(); - void tearDown(); - - static CppUnit::Test* suite(); - -private: -}; - - -#endif // RWLockTest_INCLUDED diff --git a/contrib/libpoco/Foundation/testsuite/src/RandomStreamTest.cpp b/contrib/libpoco/Foundation/testsuite/src/RandomStreamTest.cpp deleted file mode 100644 index 2d641062f85..00000000000 --- a/contrib/libpoco/Foundation/testsuite/src/RandomStreamTest.cpp +++ /dev/null @@ -1,77 +0,0 @@ -// -// RandomStreamTest.cpp -// -// $Id: //poco/1.4/Foundation/testsuite/src/RandomStreamTest.cpp#1 $ -// -// Copyright (c) 2004-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "RandomStreamTest.h" -#include "CppUnit/TestCaller.h" -#include "CppUnit/TestSuite.h" -#include "Poco/RandomStream.h" -#include -#include - - -using Poco::RandomInputStream; - - -RandomStreamTest::RandomStreamTest(const std::string& name): CppUnit::TestCase(name) -{ -} - - -RandomStreamTest::~RandomStreamTest() -{ -} - - -void RandomStreamTest::testStream() -{ - RandomInputStream rnd; - - const int n = 16; - std::vector d(n, 0); - for (int i = 0; i < 1000; ++i) - { - unsigned char c; - rnd >> c; - d[c & 0x0F]++; - d[(c >> 4) & 0x0F]++; - } - int sum = 0; - for (int k = 0; k < n; ++k) sum += d[k]; - int avg = sum/n; - int var = 0; - for (int k = 0; k < n; ++k) var += (d[k] - avg)*(d[k] - avg); - var /= n; - int sd = int(std::sqrt((double) var)); - - assert (110 < avg && avg < 140); - assert (sd < 20); -} - - -void RandomStreamTest::setUp() -{ -} - - -void RandomStreamTest::tearDown() -{ -} - - -CppUnit::Test* RandomStreamTest::suite() -{ - CppUnit::TestSuite* pSuite = new CppUnit::TestSuite("RandomStreamTest"); - - CppUnit_addTest(pSuite, RandomStreamTest, testStream); - - return pSuite; -} diff --git a/contrib/libpoco/Foundation/testsuite/src/RandomStreamTest.h b/contrib/libpoco/Foundation/testsuite/src/RandomStreamTest.h deleted file mode 100644 index c5be0d9509c..00000000000 --- a/contrib/libpoco/Foundation/testsuite/src/RandomStreamTest.h +++ /dev/null @@ -1,40 +0,0 @@ -// -// RandomStreamTest.h -// -// $Id: //poco/1.4/Foundation/testsuite/src/RandomStreamTest.h#1 $ -// -// Definition of the RandomStreamTest class. -// -// Copyright (c) 2004-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef RandomStreamTest_INCLUDED -#define RandomStreamTest_INCLUDED - - -#include "Poco/Foundation.h" -#include "CppUnit/TestCase.h" - - -class RandomStreamTest: public CppUnit::TestCase -{ -public: - RandomStreamTest(const std::string& name); - ~RandomStreamTest(); - - void testStream(); - - void setUp(); - void tearDown(); - - static CppUnit::Test* suite(); - -private: -}; - - -#endif // RandomStreamTest_INCLUDED diff --git a/contrib/libpoco/Foundation/testsuite/src/RandomTest.cpp b/contrib/libpoco/Foundation/testsuite/src/RandomTest.cpp deleted file mode 100644 index c5ed5359098..00000000000 --- a/contrib/libpoco/Foundation/testsuite/src/RandomTest.cpp +++ /dev/null @@ -1,151 +0,0 @@ -// -// RandomTest.cpp -// -// $Id: //poco/1.4/Foundation/testsuite/src/RandomTest.cpp#1 $ -// -// Copyright (c) 2004-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "RandomTest.h" -#include "CppUnit/TestCaller.h" -#include "CppUnit/TestSuite.h" -#include "Poco/Random.h" -#include -#include - - -using Poco::UInt32; - - -RandomTest::RandomTest(const std::string& name): CppUnit::TestCase(name) -{ -} - - -RandomTest::~RandomTest() -{ -} - - -void RandomTest::testSequence1() -{ - Poco::Random rnd1; - Poco::Random rnd2; - rnd1.seed(12345); - rnd2.seed(12345); - for (int i = 0; i < 100; ++i) - { - assert (rnd1.next() == rnd2.next()); - } -} - - -void RandomTest::testSequence2() -{ - Poco::Random rnd1; - Poco::Random rnd2; - rnd1.seed(12345); - rnd2.seed(54321); - - bool equals = true; - for (int i = 0; i < 20; ++i) - { - if (rnd1.next() != rnd2.next()) - { - equals = false; - break; - } - } - assert (!equals); -} - - -void RandomTest::testDistribution1() -{ - Poco::Random rnd; - rnd.seed(123456); - const int n = 11; - int d[n] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; - for (int i = 0; i < 100; ++i) - { - d[rnd.next() % n] = 1; - } - int sum = 0; - for (int k = 0; k < n; ++k) sum += d[k]; - - assert (sum == n); -} - - -void RandomTest::testDistribution2() -{ - Poco::Random rnd; - rnd.seed(); - const int n = 101; - std::vector d(n, 0); - for (int i = 0; i < 10000; ++i) - { - d[rnd.next(n)]++; - } - int sum = 0; - for (int k = 0; k < n; ++k) sum += d[k]; - int avg = sum/n; - int var = 0; - for (int k = 0; k < n; ++k) var += (d[k] - avg)*(d[k] - avg); - var /= n; - int sd = int(std::sqrt((double) var)); - - assert (95 < avg && avg < 105); - assert (sd < 15); -} - - -void RandomTest::testDistribution3() -{ - Poco::Random rnd; - rnd.seed(); - const int n = 101; - std::vector d(n, 0); - for (int i = 0; i < 10000; ++i) - { - d[int(rnd.nextFloat()*n)]++; - } - int sum = 0; - for (int k = 0; k < n; ++k) sum += d[k]; - int avg = sum/n; - int var = 0; - for (int k = 0; k < n; ++k) var += (d[k] - avg)*(d[k] - avg); - var /= n; - int sd = int(std::sqrt((double) var)); - - assert (95 < avg && avg < 105); - assert (sd < 15); -} - - -void RandomTest::setUp() -{ -} - - -void RandomTest::tearDown() -{ -} - - -CppUnit::Test* RandomTest::suite() -{ - CppUnit::TestSuite* pSuite = new CppUnit::TestSuite("RandomTest"); - - CppUnit_addTest(pSuite, RandomTest, testSequence1); - CppUnit_addTest(pSuite, RandomTest, testSequence2); - CppUnit_addTest(pSuite, RandomTest, testDistribution1); - CppUnit_addTest(pSuite, RandomTest, testDistribution2); - CppUnit_addTest(pSuite, RandomTest, testDistribution3); - - return pSuite; -} diff --git a/contrib/libpoco/Foundation/testsuite/src/RandomTest.h b/contrib/libpoco/Foundation/testsuite/src/RandomTest.h deleted file mode 100644 index 4b04dc848da..00000000000 --- a/contrib/libpoco/Foundation/testsuite/src/RandomTest.h +++ /dev/null @@ -1,44 +0,0 @@ -// -// RandomTest.h -// -// $Id: //poco/1.4/Foundation/testsuite/src/RandomTest.h#1 $ -// -// Definition of the RandomTest class. -// -// Copyright (c) 2004-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef RandomTest_INCLUDED -#define RandomTest_INCLUDED - - -#include "Poco/Foundation.h" -#include "CppUnit/TestCase.h" - - -class RandomTest: public CppUnit::TestCase -{ -public: - RandomTest(const std::string& name); - ~RandomTest(); - - void testSequence1(); - void testSequence2(); - void testDistribution1(); - void testDistribution2(); - void testDistribution3(); - - void setUp(); - void tearDown(); - - static CppUnit::Test* suite(); - -private: -}; - - -#endif // RandomTest_INCLUDED diff --git a/contrib/libpoco/Foundation/testsuite/src/RegularExpressionTest.cpp b/contrib/libpoco/Foundation/testsuite/src/RegularExpressionTest.cpp deleted file mode 100644 index 8f395c5c53f..00000000000 --- a/contrib/libpoco/Foundation/testsuite/src/RegularExpressionTest.cpp +++ /dev/null @@ -1,299 +0,0 @@ -// -// RegularExpressionTest.cpp -// -// $Id: //poco/1.4/Foundation/testsuite/src/RegularExpressionTest.cpp#1 $ -// -// Copyright (c) 2004-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "RegularExpressionTest.h" -#include "CppUnit/TestCaller.h" -#include "CppUnit/TestSuite.h" -#include "Poco/RegularExpression.h" -#include "Poco/Exception.h" - - -using Poco::RegularExpression; -using Poco::RegularExpressionException; - - -RegularExpressionTest::RegularExpressionTest(const std::string& name): CppUnit::TestCase(name) -{ -} - - -RegularExpressionTest::~RegularExpressionTest() -{ -} - - -void RegularExpressionTest::testIndex() -{ - RegularExpression re("[0-9]+"); - RegularExpression::Match match; - assert (re.match("", 0, match) == 0); - assert (re.match("123", 3, match) == 0); -} - - -void RegularExpressionTest::testMatch1() -{ - RegularExpression re("[0-9]+"); - assert (re.match("123")); - assert (!re.match("123cd")); - assert (!re.match("abcde")); - assert (re.match("ab123", 2)); -} - - -void RegularExpressionTest::testMatch2() -{ - RegularExpression re("[0-9]+"); - RegularExpression::Match match; - assert (re.match("123", 0, match) == 1); - assert (match.offset == 0); - assert (match.length == 3); - - assert (re.match("abc123def", 0, match) == 1); - assert (match.offset == 3); - assert (match.length == 3); - - assert (re.match("abcdef", 0, match) == 0); - assert (match.offset == std::string::npos); - assert (match.length == 0); - - assert (re.match("abc123def", 3, match) == 1); - assert (match.offset == 3); - assert (match.length == 3); -} - - -void RegularExpressionTest::testMatch3() -{ - RegularExpression re("[0-9]+"); - RegularExpression::MatchVec match; - assert (re.match("123", 0, match) == 1); - assert (match.size() == 1); - assert (match[0].offset == 0); - assert (match[0].length == 3); - - assert (re.match("abc123def", 0, match) == 1); - assert (match.size() == 1); - assert (match[0].offset == 3); - assert (match[0].length == 3); - - assert (re.match("abcdef", 0, match) == 0); - assert (match.size() == 0); - - assert (re.match("abc123def", 3, match) == 1); - assert (match.size() == 1); - assert (match[0].offset == 3); - assert (match[0].length == 3); -} - - -void RegularExpressionTest::testMatch4() -{ - RegularExpression re("([0-9]+) ([0-9]+)"); - RegularExpression::MatchVec matches; - assert (re.match("123 456", 0, matches) == 3); - assert (matches.size() == 3); - assert (matches[0].offset == 0); - assert (matches[0].length == 7); - assert (matches[1].offset == 0); - assert (matches[1].length == 3); - assert (matches[2].offset == 4); - assert (matches[2].length == 3); - - assert (re.match("abc123 456def", 0, matches) == 3); - assert (matches.size() == 3); - assert (matches[0].offset == 3); - assert (matches[0].length == 7); - assert (matches[1].offset == 3); - assert (matches[1].length == 3); - assert (matches[2].offset == 7); - assert (matches[2].length == 3); -} - - -void RegularExpressionTest::testMatch5() -{ - std::string digits = "0123"; - assert (RegularExpression::match(digits, "[0-9]+")); - std::string alphas = "abcd"; - assert (!RegularExpression::match(alphas, "[0-9]+")); -} - - -void RegularExpressionTest::testMatch6() -{ - RegularExpression expr("^([a-z]*)?$"); - assert (expr.match("", 0, 0)); - assert (expr.match("abcde", 0, 0)); - assert (!expr.match("123", 0, 0)); -} - - -void RegularExpressionTest::testExtract() -{ - RegularExpression re("[0-9]+"); - std::string str; - assert (re.extract("123", str) == 1); - assert (str == "123"); - - assert (re.extract("abc123def", 0, str) == 1); - assert (str == "123"); - - assert (re.extract("abcdef", 0, str) == 0); - assert (str == ""); - - assert (re.extract("abc123def", 3, str) == 1); - assert (str == "123"); -} - - -void RegularExpressionTest::testSplit1() -{ - RegularExpression re("[0-9]+"); - std::vector strings; - assert (re.split("123", 0, strings) == 1); - assert (strings.size() == 1); - assert (strings[0] == "123"); - - assert (re.split("abc123def", 0, strings) == 1); - assert (strings.size() == 1); - assert (strings[0] == "123"); - - assert (re.split("abcdef", 0, strings) == 0); - assert (strings.empty()); - - assert (re.split("abc123def", 3, strings) == 1); - assert (strings.size() == 1); - assert (strings[0] == "123"); -} - - -void RegularExpressionTest::testSplit2() -{ - RegularExpression re("([0-9]+) ([0-9]+)"); - std::vector strings; - assert (re.split("123 456", 0, strings) == 3); - assert (strings.size() == 3); - assert (strings[0] == "123 456"); - assert (strings[1] == "123"); - assert (strings[2] == "456"); - - assert (re.split("abc123 456def", 0, strings) == 3); - assert (strings.size() == 3); - assert (strings[0] == "123 456"); - assert (strings[1] == "123"); - assert (strings[2] == "456"); -} - - -void RegularExpressionTest::testSubst1() -{ - RegularExpression re("[0-9]+"); - std::string s = "123"; - assert (re.subst(s, "ABC") == 1); - assert (s == "ABC"); - assert (re.subst(s, "123") == 0); - - s = "123"; - assert (re.subst(s, "AB$0CD") == 1); - assert (s == "AB123CD"); - - s = "123"; - assert (re.subst(s, "AB$1CD") == 1); - assert (s == "ABCD"); - - s = "123"; - assert (re.subst(s, "AB$2CD") == 1); - assert (s == "ABCD"); - - s = "123"; - assert (re.subst(s, "AB$$CD") == 1); - assert (s == "AB$$CD"); - - s = "123"; - assert (re.subst(s, "AB$0CD", RegularExpression::RE_NO_VARS) == 1); - assert (s == "AB$0CD"); -} - - -void RegularExpressionTest::testSubst2() -{ - RegularExpression re("([0-9]+) ([0-9]+)"); - std::string s = "123 456"; - assert (re.subst(s, "$2-$1") == 1); - assert (s == "456-123"); -} - - -void RegularExpressionTest::testSubst3() -{ - RegularExpression re("[0-9]+"); - std::string s = "123 456 789"; - assert (re.subst(s, "n", RegularExpression::RE_GLOBAL) == 3); - assert (s == "n n n"); -} - - -void RegularExpressionTest::testSubst4() -{ - RegularExpression re("[0-9]+"); - std::string s = "ABC 123 456 789 DEF"; - assert (re.subst(s, "n", RegularExpression::RE_GLOBAL) == 3); - assert (s == "ABC n n n DEF"); -} - - -void RegularExpressionTest::testError() -{ - try - { - RegularExpression re("(0-9]"); - failmsg("bad regexp - must throw exception"); - } - catch (RegularExpressionException&) - { - } -} - - -void RegularExpressionTest::setUp() -{ -} - - -void RegularExpressionTest::tearDown() -{ -} - - -CppUnit::Test* RegularExpressionTest::suite() -{ - CppUnit::TestSuite* pSuite = new CppUnit::TestSuite("RegularExpressionTest"); - - CppUnit_addTest(pSuite, RegularExpressionTest, testIndex); - CppUnit_addTest(pSuite, RegularExpressionTest, testMatch1); - CppUnit_addTest(pSuite, RegularExpressionTest, testMatch2); - CppUnit_addTest(pSuite, RegularExpressionTest, testMatch3); - CppUnit_addTest(pSuite, RegularExpressionTest, testMatch4); - CppUnit_addTest(pSuite, RegularExpressionTest, testMatch5); - CppUnit_addTest(pSuite, RegularExpressionTest, testMatch6); - CppUnit_addTest(pSuite, RegularExpressionTest, testExtract); - CppUnit_addTest(pSuite, RegularExpressionTest, testSplit1); - CppUnit_addTest(pSuite, RegularExpressionTest, testSplit2); - CppUnit_addTest(pSuite, RegularExpressionTest, testSubst1); - CppUnit_addTest(pSuite, RegularExpressionTest, testSubst2); - CppUnit_addTest(pSuite, RegularExpressionTest, testSubst3); - CppUnit_addTest(pSuite, RegularExpressionTest, testSubst4); - CppUnit_addTest(pSuite, RegularExpressionTest, testError); - - return pSuite; -} diff --git a/contrib/libpoco/Foundation/testsuite/src/RegularExpressionTest.h b/contrib/libpoco/Foundation/testsuite/src/RegularExpressionTest.h deleted file mode 100644 index 3ab98e29dc8..00000000000 --- a/contrib/libpoco/Foundation/testsuite/src/RegularExpressionTest.h +++ /dev/null @@ -1,54 +0,0 @@ -// -// RegularExpressionTest.h -// -// $Id: //poco/1.4/Foundation/testsuite/src/RegularExpressionTest.h#1 $ -// -// Definition of the RegularExpressionTest class. -// -// Copyright (c) 2004-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef RegularExpressionTest_INCLUDED -#define RegularExpressionTest_INCLUDED - - -#include "Poco/Foundation.h" -#include "CppUnit/TestCase.h" - - -class RegularExpressionTest: public CppUnit::TestCase -{ -public: - RegularExpressionTest(const std::string& name); - ~RegularExpressionTest(); - - void testIndex(); - void testMatch1(); - void testMatch2(); - void testMatch3(); - void testMatch4(); - void testMatch5(); - void testMatch6(); - void testExtract(); - void testSplit1(); - void testSplit2(); - void testSubst1(); - void testSubst2(); - void testSubst3(); - void testSubst4(); - void testError(); - - void setUp(); - void tearDown(); - - static CppUnit::Test* suite(); - -private: -}; - - -#endif // RegularExpressionTest_INCLUDED diff --git a/contrib/libpoco/Foundation/testsuite/src/SHA1EngineTest.cpp b/contrib/libpoco/Foundation/testsuite/src/SHA1EngineTest.cpp deleted file mode 100644 index a0e95f3c294..00000000000 --- a/contrib/libpoco/Foundation/testsuite/src/SHA1EngineTest.cpp +++ /dev/null @@ -1,68 +0,0 @@ -// -// SHA1EngineTest.cpp -// -// $Id: //poco/1.4/Foundation/testsuite/src/SHA1EngineTest.cpp#1 $ -// -// Copyright (c) 2004-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "SHA1EngineTest.h" -#include "CppUnit/TestCaller.h" -#include "CppUnit/TestSuite.h" -#include "Poco/SHA1Engine.h" - - -using Poco::SHA1Engine; -using Poco::DigestEngine; - - -SHA1EngineTest::SHA1EngineTest(const std::string& name): CppUnit::TestCase(name) -{ -} - - -SHA1EngineTest::~SHA1EngineTest() -{ -} - - -void SHA1EngineTest::testSHA1() -{ - SHA1Engine engine; - - // test vectors from FIPS 180-1 - - engine.update("abc"); - assert (DigestEngine::digestToHex(engine.digest()) == "a9993e364706816aba3e25717850c26c9cd0d89d"); - - engine.update("abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq"); - assert (DigestEngine::digestToHex(engine.digest()) == "84983e441c3bd26ebaae4aa1f95129e5e54670f1"); - - for (int i = 0; i < 1000000; ++i) - engine.update('a'); - assert (DigestEngine::digestToHex(engine.digest()) == "34aa973cd4c4daa4f61eeb2bdbad27316534016f"); -} - - -void SHA1EngineTest::setUp() -{ -} - - -void SHA1EngineTest::tearDown() -{ -} - - -CppUnit::Test* SHA1EngineTest::suite() -{ - CppUnit::TestSuite* pSuite = new CppUnit::TestSuite("SHA1EngineTest"); - - CppUnit_addTest(pSuite, SHA1EngineTest, testSHA1); - - return pSuite; -} diff --git a/contrib/libpoco/Foundation/testsuite/src/SHA1EngineTest.h b/contrib/libpoco/Foundation/testsuite/src/SHA1EngineTest.h deleted file mode 100644 index 1f097b87137..00000000000 --- a/contrib/libpoco/Foundation/testsuite/src/SHA1EngineTest.h +++ /dev/null @@ -1,40 +0,0 @@ -// -// SHA1EngineTest.h -// -// $Id: //poco/1.4/Foundation/testsuite/src/SHA1EngineTest.h#1 $ -// -// Definition of the SHA1EngineTest class. -// -// Copyright (c) 2004-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef SHA1EngineTest_INCLUDED -#define SHA1EngineTest_INCLUDED - - -#include "Poco/Foundation.h" -#include "CppUnit/TestCase.h" - - -class SHA1EngineTest: public CppUnit::TestCase -{ -public: - SHA1EngineTest(const std::string& name); - ~SHA1EngineTest(); - - void testSHA1(); - - void setUp(); - void tearDown(); - - static CppUnit::Test* suite(); - -private: -}; - - -#endif // SHA1EngineTest_INCLUDED diff --git a/contrib/libpoco/Foundation/testsuite/src/SemaphoreTest.cpp b/contrib/libpoco/Foundation/testsuite/src/SemaphoreTest.cpp deleted file mode 100644 index 515f6db1032..00000000000 --- a/contrib/libpoco/Foundation/testsuite/src/SemaphoreTest.cpp +++ /dev/null @@ -1,147 +0,0 @@ -// -// SemaphoreTest.cpp -// -// $Id: //poco/1.4/Foundation/testsuite/src/SemaphoreTest.cpp#1 $ -// -// Copyright (c) 2004-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "SemaphoreTest.h" -#include "CppUnit/TestCaller.h" -#include "CppUnit/TestSuite.h" -#include "Poco/Thread.h" -#include "Poco/Runnable.h" -#include "Poco/Semaphore.h" -#include "Poco/Exception.h" - - -using Poco::Thread; -using Poco::Runnable; -using Poco::Semaphore; -using Poco::TimeoutException; - - -class SemaRunnable: public Runnable -{ -public: - SemaRunnable(int n, int max): _ran(false), _sema(n, max) - { - } - - void run() - { - _sema.wait(); - _ran = true; - } - - bool ran() const - { - return _ran; - } - - void set() - { - _sema.set(); - } - - void wait() - { - _sema.wait(); - } - - void wait(long milliseconds) - { - _sema.wait(milliseconds); - } - - bool tryWait(long milliseconds) - { - return _sema.tryWait(milliseconds); - } - -private: - bool _ran; - Semaphore _sema; -}; - - -SemaphoreTest::SemaphoreTest(const std::string& name): CppUnit::TestCase(name) -{ -} - - -SemaphoreTest::~SemaphoreTest() -{ -} - - -void SemaphoreTest::testInitZero() -{ - SemaRunnable r(0, 3); - assert (!r.tryWait(10)); - r.set(); - r.wait(); - try - { - r.wait(100); - failmsg("must timeout"); - } - catch (TimeoutException&) - { - } - catch (...) - { - failmsg("wrong exception"); - } - r.set(); - r.set(); - assert (r.tryWait(0)); - r.wait(); - assert (!r.tryWait(10)); - - Thread t; - t.start(r); - Thread::sleep(100); - assert (!r.ran()); - r.set(); - t.join(); - assert (r.ran()); - assert (!r.tryWait(10)); -} - - -void SemaphoreTest::testInitNonZero() -{ - SemaRunnable r(2, 2); - r.wait(); - assert (r.tryWait(10)); - assert (!r.tryWait(10)); - r.set(); - assert (r.tryWait(10)); - assert (!r.tryWait(10)); -} - - -void SemaphoreTest::setUp() -{ -} - - -void SemaphoreTest::tearDown() -{ -} - - -CppUnit::Test* SemaphoreTest::suite() -{ - CppUnit::TestSuite* pSuite = new CppUnit::TestSuite("SemaphoreTest"); - - CppUnit_addTest(pSuite, SemaphoreTest, testInitZero); - CppUnit_addTest(pSuite, SemaphoreTest, testInitNonZero); - - return pSuite; -} diff --git a/contrib/libpoco/Foundation/testsuite/src/SemaphoreTest.h b/contrib/libpoco/Foundation/testsuite/src/SemaphoreTest.h deleted file mode 100644 index 5254fdc308d..00000000000 --- a/contrib/libpoco/Foundation/testsuite/src/SemaphoreTest.h +++ /dev/null @@ -1,41 +0,0 @@ -// -// SemaphoreTest.h -// -// $Id: //poco/1.4/Foundation/testsuite/src/SemaphoreTest.h#1 $ -// -// Definition of the SemaphoreTest class. -// -// Copyright (c) 2004-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef SemaphoreTest_INCLUDED -#define SemaphoreTest_INCLUDED - - -#include "Poco/Foundation.h" -#include "CppUnit/TestCase.h" - - -class SemaphoreTest: public CppUnit::TestCase -{ -public: - SemaphoreTest(const std::string& name); - ~SemaphoreTest(); - - void testInitZero(); - void testInitNonZero(); - - void setUp(); - void tearDown(); - - static CppUnit::Test* suite(); - -private: -}; - - -#endif // SemaphoreTest_INCLUDED diff --git a/contrib/libpoco/Foundation/testsuite/src/SharedLibraryTest.cpp b/contrib/libpoco/Foundation/testsuite/src/SharedLibraryTest.cpp deleted file mode 100644 index 80de58ec6f6..00000000000 --- a/contrib/libpoco/Foundation/testsuite/src/SharedLibraryTest.cpp +++ /dev/null @@ -1,151 +0,0 @@ -// -// SharedLibraryTest.cpp -// -// $Id: //poco/1.4/Foundation/testsuite/src/SharedLibraryTest.cpp#1 $ -// -// Copyright (c) 2004-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "SharedLibraryTest.h" -#include "CppUnit/TestCaller.h" -#include "CppUnit/TestSuite.h" -#include "Poco/SharedLibrary.h" -#include "Poco/Exception.h" - - -using Poco::SharedLibrary; -using Poco::NotFoundException; -using Poco::LibraryLoadException; -using Poco::LibraryAlreadyLoadedException; - - -typedef int (*GimmeFiveFunc)(); - - -SharedLibraryTest::SharedLibraryTest(const std::string& name): CppUnit::TestCase(name) -{ -} - - -SharedLibraryTest::~SharedLibraryTest() -{ -} - - -void SharedLibraryTest::testSharedLibrary1() -{ - std::string path = "TestLibrary"; - path.append(SharedLibrary::suffix()); - SharedLibrary sl; - assert (!sl.isLoaded()); - sl.load(path); - assert (sl.getPath() == path); - assert (sl.isLoaded()); - assert (sl.hasSymbol("pocoBuildManifest")); - assert (sl.hasSymbol("pocoInitializeLibrary")); - assert (sl.hasSymbol("pocoUninitializeLibrary")); - assert (sl.hasSymbol("gimmeFive")); - assert (!sl.hasSymbol("fooBar123")); - - void* p1 = sl.getSymbol("pocoBuildManifest"); - assertNotNullPtr(p1); - try - { - p1 = sl.getSymbol("fooBar123"); - failmsg("no such symbol - must throw exception"); - } - catch (NotFoundException&) - { - } - catch (...) - { - failmsg("wrong exception"); - } - sl.unload(); - assert (!sl.isLoaded()); -} - - -void SharedLibraryTest::testSharedLibrary2() -{ - std::string path = "TestLibrary"; - path.append(SharedLibrary::suffix()); - SharedLibrary sl(path); - assert (sl.getPath() == path); - assert (sl.isLoaded()); - - GimmeFiveFunc gimmeFive = (GimmeFiveFunc) sl.getSymbol("gimmeFive"); - assert (gimmeFive() == 5); - - sl.unload(); - assert (!sl.isLoaded()); -} - - -void SharedLibraryTest::testSharedLibrary3() -{ - std::string path = "NonexistentLibrary"; - path.append(SharedLibrary::suffix()); - SharedLibrary sl; - try - { - sl.load(path); - failmsg("no such library - must throw exception"); - } - catch (LibraryLoadException&) - { - } - catch (...) - { - failmsg("wrong exception"); - } - assert (!sl.isLoaded()); - - path = "TestLibrary"; - path.append(SharedLibrary::suffix()); - sl.load(path); - assert (sl.isLoaded()); - - try - { - sl.load(path); - failmsg("library already loaded - must throw exception"); - } - catch (LibraryAlreadyLoadedException&) - { - } - catch (...) - { - failmsg("wrong exception"); - } - assert (sl.isLoaded()); - - sl.unload(); - assert (!sl.isLoaded()); -} - - -void SharedLibraryTest::setUp() -{ -} - - -void SharedLibraryTest::tearDown() -{ -} - - -CppUnit::Test* SharedLibraryTest::suite() -{ - CppUnit::TestSuite* pSuite = new CppUnit::TestSuite("SharedLibraryTest"); - - CppUnit_addTest(pSuite, SharedLibraryTest, testSharedLibrary1); - CppUnit_addTest(pSuite, SharedLibraryTest, testSharedLibrary2); - CppUnit_addTest(pSuite, SharedLibraryTest, testSharedLibrary3); - - return pSuite; -} diff --git a/contrib/libpoco/Foundation/testsuite/src/SharedLibraryTest.h b/contrib/libpoco/Foundation/testsuite/src/SharedLibraryTest.h deleted file mode 100644 index e41190e58f8..00000000000 --- a/contrib/libpoco/Foundation/testsuite/src/SharedLibraryTest.h +++ /dev/null @@ -1,42 +0,0 @@ -// -// SharedLibraryTest.h -// -// $Id: //poco/1.4/Foundation/testsuite/src/SharedLibraryTest.h#1 $ -// -// Definition of the SharedLibraryTest class. -// -// Copyright (c) 2004-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef SharedLibraryTest_INCLUDED -#define SharedLibraryTest_INCLUDED - - -#include "Poco/Foundation.h" -#include "CppUnit/TestCase.h" - - -class SharedLibraryTest: public CppUnit::TestCase -{ -public: - SharedLibraryTest(const std::string& name); - ~SharedLibraryTest(); - - void testSharedLibrary1(); - void testSharedLibrary2(); - void testSharedLibrary3(); - - void setUp(); - void tearDown(); - - static CppUnit::Test* suite(); - -private: -}; - - -#endif // SharedLibraryTest_INCLUDED diff --git a/contrib/libpoco/Foundation/testsuite/src/SharedLibraryTestSuite.cpp b/contrib/libpoco/Foundation/testsuite/src/SharedLibraryTestSuite.cpp deleted file mode 100644 index b0521f842ef..00000000000 --- a/contrib/libpoco/Foundation/testsuite/src/SharedLibraryTestSuite.cpp +++ /dev/null @@ -1,31 +0,0 @@ -// -// SharedLibraryTestSuite.cpp -// -// $Id: //poco/1.4/Foundation/testsuite/src/SharedLibraryTestSuite.cpp#1 $ -// -// Copyright (c) 2004-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "SharedLibraryTestSuite.h" -#include "ClassLoaderTest.h" -#include "ManifestTest.h" -#include "SharedLibraryTest.h" - - -CppUnit::Test* SharedLibraryTestSuite::suite() -{ - CppUnit::TestSuite* pSuite = new CppUnit::TestSuite("SharedLibraryTestSuite"); - - pSuite->addTest(ManifestTest::suite()); - -#if !defined(_WIN32) || defined(_DLL) - pSuite->addTest(SharedLibraryTest::suite()); - pSuite->addTest(ClassLoaderTest::suite()); -#endif - - return pSuite; -} diff --git a/contrib/libpoco/Foundation/testsuite/src/SharedLibraryTestSuite.h b/contrib/libpoco/Foundation/testsuite/src/SharedLibraryTestSuite.h deleted file mode 100644 index fedd3ed2d78..00000000000 --- a/contrib/libpoco/Foundation/testsuite/src/SharedLibraryTestSuite.h +++ /dev/null @@ -1,29 +0,0 @@ -// -// SharedLibraryTestSuite.h -// -// $Id: //poco/1.4/Foundation/testsuite/src/SharedLibraryTestSuite.h#1 $ -// -// Definition of the SharedLibraryTestSuite class. -// -// Copyright (c) 2004-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef SharedLibraryTestSuite_INCLUDED -#define SharedLibraryTestSuite_INCLUDED - - -#include "CppUnit/TestSuite.h" - - -class SharedLibraryTestSuite -{ -public: - static CppUnit::Test* suite(); -}; - - -#endif // SharedLibraryTestSuite_INCLUDED diff --git a/contrib/libpoco/Foundation/testsuite/src/SharedMemoryTest.cpp b/contrib/libpoco/Foundation/testsuite/src/SharedMemoryTest.cpp deleted file mode 100644 index 1172239e1b3..00000000000 --- a/contrib/libpoco/Foundation/testsuite/src/SharedMemoryTest.cpp +++ /dev/null @@ -1,96 +0,0 @@ -// -// SharedMemoryTest.cpp -// -// $Id: //poco/1.4/Foundation/testsuite/src/SharedMemoryTest.cpp#1 $ -// -// Copyright (c) 2007, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "SharedMemoryTest.h" -#include "CppUnit/TestCaller.h" -#include "CppUnit/TestSuite.h" -#include "Poco/SharedMemory.h" -#include "Poco/Path.h" -#include "Poco/File.h" -#include "Poco/Exception.h" - - -using Poco::SharedMemory; - - -SharedMemoryTest::SharedMemoryTest(const std::string& name): CppUnit::TestCase(name) -{ -} - - -SharedMemoryTest::~SharedMemoryTest() -{ -} - - -void SharedMemoryTest::testCreate() -{ - SharedMemory mem("hi", 4096, SharedMemory::AM_WRITE); - assert (mem.end()-mem.begin() == 4096); - mem.begin()[0] = 'A'; - mem.end()[-1] = 'Z'; -} - - -void SharedMemoryTest::testCreateFromFile() -{ - Poco::Path p = findDataFile("testdata.txt"); - Poco::File f(p); - assert (f.exists() && f.isFile()); - SharedMemory mem(f, SharedMemory::AM_READ); - assert (mem.end() > mem.begin()); // valid? - assert (mem.end() - mem.begin() == f.getSize()); - assert (mem.begin()[0] == 'A'); - assert (mem.end()[-5] == 'Z'); -} - - -Poco::Path SharedMemoryTest::findDataFile(const std::string& afile) -{ - Poco::Path root; - root.makeAbsolute(); - Poco::Path result; - while (!Poco::Path::find(root.toString(), "data", result)) - { - root.makeParent(); - if (root.toString().empty() || root.toString() == "/" || root.toString() == "\\") - throw Poco::FileNotFoundException("Didn't find data subdir"); - } - result.makeDirectory(); - result.setFileName(afile); - Poco::File aFile(result.toString()); - if (!aFile.exists() || (aFile.exists() && !aFile.isFile())) - throw Poco::FileNotFoundException("Didn't find file " + afile); - - return result; -} - - -void SharedMemoryTest::setUp() -{ -} - - -void SharedMemoryTest::tearDown() -{ -} - - -CppUnit::Test* SharedMemoryTest::suite() -{ - CppUnit::TestSuite* pSuite = new CppUnit::TestSuite("SharedMemoryTest"); - - CppUnit_addTest(pSuite, SharedMemoryTest, testCreate); - CppUnit_addTest(pSuite, SharedMemoryTest, testCreateFromFile); - - return pSuite; -} diff --git a/contrib/libpoco/Foundation/testsuite/src/SharedMemoryTest.h b/contrib/libpoco/Foundation/testsuite/src/SharedMemoryTest.h deleted file mode 100644 index 3837f3740e9..00000000000 --- a/contrib/libpoco/Foundation/testsuite/src/SharedMemoryTest.h +++ /dev/null @@ -1,44 +0,0 @@ -// -// SharedMemoryTest.h -// -// $Id: //poco/Main/template/test.h#7 $ -// -// Definition of the SharedMemoryTest class. -// -// Copyright (c) 2007, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef SharedMemoryTest_INCLUDED -#define SharedMemoryTest_INCLUDED - - -#include "Poco/Foundation.h" -#include "Poco/Path.h" -#include "CppUnit/TestCase.h" - - -class SharedMemoryTest: public CppUnit::TestCase -{ -public: - SharedMemoryTest(const std::string& name); - ~SharedMemoryTest(); - - void testCreate(); - void testCreateFromFile(); - - void setUp(); - void tearDown(); - - static CppUnit::Test* suite(); - - static Poco::Path findDataFile(const std::string& afile); - -private: -}; - - -#endif // SharedMemoryTest_INCLUDED diff --git a/contrib/libpoco/Foundation/testsuite/src/SharedPtrTest.cpp b/contrib/libpoco/Foundation/testsuite/src/SharedPtrTest.cpp deleted file mode 100644 index 8dce9b1f464..00000000000 --- a/contrib/libpoco/Foundation/testsuite/src/SharedPtrTest.cpp +++ /dev/null @@ -1,219 +0,0 @@ -// -// SharedPtrTest.cpp -// -// $Id: //poco/1.4/Foundation/testsuite/src/SharedPtrTest.cpp#2 $ -// -// Copyright (c) 2004-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "SharedPtrTest.h" -#include "CppUnit/TestCaller.h" -#include "CppUnit/TestSuite.h" -#include "Poco/SharedPtr.h" -#include "Poco/Exception.h" - - -using Poco::SharedPtr; -using Poco::NullPointerException; - - -namespace -{ - class TestObject - { - public: - TestObject(const std::string& data): _data(data) - { - ++_count; - } - - virtual ~TestObject() - { - --_count; - } - - const std::string& data() - { - return _data; - } - - static int count() - { - return _count; - } - - private: - std::string _data; - static int _count; - }; - - int TestObject::_count = 0; - - class DerivedObject: public TestObject - { - public: - DerivedObject(const std::string& s, int i): TestObject(s), _number(i) - { - } - - int number() const - { - return _number; - } - - private: - int _number; - }; -} - - -SharedPtrTest::SharedPtrTest(const std::string& name): CppUnit::TestCase(name) -{ -} - - -SharedPtrTest::~SharedPtrTest() -{ -} - - -void SharedPtrTest::testSharedPtr() -{ - SharedPtr ptr1; - assertNull(ptr1.get()); - TestObject* pTO1 = new TestObject("one"); - TestObject* pTO2 = new TestObject("two"); - if (pTO2 < pTO1) - { - TestObject* pTmp = pTO1; - pTO1 = pTO2; - pTO2 = pTmp; - } - assert (pTO1 < pTO2); - ptr1 = pTO1; - assert (ptr1.referenceCount() == 1); - SharedPtr ptr2 = pTO2; - SharedPtr ptr3 = ptr1; - assert (ptr1.referenceCount() == 2); - SharedPtr ptr4; - assert (ptr1.get() == pTO1); - assert (ptr1 == pTO1); - assert (ptr2.get() == pTO2); - assert (ptr2 == pTO2); - assert (ptr3.get() == pTO1); - assert (ptr3 == pTO1); - - assert (ptr1 == pTO1); - assert (ptr1 != pTO2); - assert (ptr1 < pTO2); - assert (ptr1 <= pTO2); - assert (ptr2 > pTO1); - assert (ptr2 >= pTO1); - - assert (ptr1 == ptr3); - assert (ptr1 != ptr2); - assert (ptr1 < ptr2); - assert (ptr1 <= ptr2); - assert (ptr2 > ptr1); - assert (ptr2 >= ptr1); - - ptr1.swap(ptr2); - assert (ptr2 < ptr1); - ptr2.swap(ptr1); - - assert ((ptr1->data() == "one" && ptr2->data() == "two") || (ptr1->data() == "two" && ptr2->data() == "one")); - - try - { - assert (ptr4->data() == "four"); - fail ("must throw NullPointerException"); - } - catch (NullPointerException&) - { - } - - assert (!(ptr4 == ptr1)); - assert (!(ptr4 == ptr2)); - assert (ptr4 != ptr1); - assert (ptr4 != ptr2); - - ptr4 = ptr2; - assert (ptr4 == ptr2); - assert (!(ptr4 != ptr2)); - - assert (TestObject::count() == 2); - ptr1 = 0; - ptr2 = 0; - ptr3 = 0; - ptr4 = 0; - assert (TestObject::count() == 0); - - { - SharedPtr ptr = new TestObject(""); - assert (TestObject::count() == 1); - } - assert (TestObject::count() == 0); -} - - -void SharedPtrTest::testImplicitCast() -{ - { - // null assign test - SharedPtr ptr2; - assertNull(ptr2.get()); - SharedPtr ptr1 = ptr2; - } - { - SharedPtr ptr2(new DerivedObject("test", 666)); - assert (TestObject::count() == 1); - SharedPtr ptr1 = ptr2; - assert (TestObject::count() == 1); - } - assert (TestObject::count() == 0); - SharedPtr ptr1 = new DerivedObject("test", 666); - assert (TestObject::count() == 1); - ptr1 = 0; - assert (TestObject::count() == 0); -} - - -void SharedPtrTest::testExplicitCast() -{ - SharedPtr ptr1 = new DerivedObject("test", 666); - SharedPtr ptr2 = ptr1.cast(); - assert (ptr2.get() != 0); - - // cast the other way round must fail - ptr1 = new TestObject("test"); - assert (TestObject::count() == 2); - ptr2 = ptr1.cast(); - assert (TestObject::count() == 1); - assert (ptr2.get() == 0); -} - - -void SharedPtrTest::setUp() -{ -} - - -void SharedPtrTest::tearDown() -{ -} - - -CppUnit::Test* SharedPtrTest::suite() -{ - CppUnit::TestSuite* pSuite = new CppUnit::TestSuite("SharedPtrTest"); - - CppUnit_addTest(pSuite, SharedPtrTest, testSharedPtr); - CppUnit_addTest(pSuite, SharedPtrTest, testImplicitCast); - CppUnit_addTest(pSuite, SharedPtrTest, testExplicitCast); - - return pSuite; -} diff --git a/contrib/libpoco/Foundation/testsuite/src/SharedPtrTest.h b/contrib/libpoco/Foundation/testsuite/src/SharedPtrTest.h deleted file mode 100644 index 6b1eaf83192..00000000000 --- a/contrib/libpoco/Foundation/testsuite/src/SharedPtrTest.h +++ /dev/null @@ -1,43 +0,0 @@ -// -// SharedPtrTest.h -// -// $Id: //poco/1.4/Foundation/testsuite/src/SharedPtrTest.h#1 $ -// -// Definition of the SharedPtrTest class. -// -// Copyright (c) 2004-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef SharedPtrTest_INCLUDED -#define SharedPtrTest_INCLUDED - - -#include "Poco/Foundation.h" -#include "CppUnit/TestCase.h" - - -class SharedPtrTest: public CppUnit::TestCase -{ -public: - SharedPtrTest(const std::string& name); - ~SharedPtrTest(); - - void testSharedPtr(); - - void testImplicitCast(); - void testExplicitCast(); - - void setUp(); - void tearDown(); - - static CppUnit::Test* suite(); - -private: -}; - - -#endif // SharedPtrTest_INCLUDED diff --git a/contrib/libpoco/Foundation/testsuite/src/SimpleFileChannelTest.cpp b/contrib/libpoco/Foundation/testsuite/src/SimpleFileChannelTest.cpp deleted file mode 100644 index aa320bedb9b..00000000000 --- a/contrib/libpoco/Foundation/testsuite/src/SimpleFileChannelTest.cpp +++ /dev/null @@ -1,127 +0,0 @@ -// -// SimpleFileChannelTest.cpp -// -// $Id: //poco/1.4/Foundation/testsuite/src/SimpleFileChannelTest.cpp#1 $ -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "Poco/SimpleFileChannel.h" -#include "Poco/Message.h" -#include "Poco/Path.h" -#include "Poco/File.h" -#include "Poco/DirectoryIterator.h" -#include "Poco/Timestamp.h" -#include "Poco/DateTimeFormatter.h" -#include "Poco/AutoPtr.h" -#include "SimpleFileChannelTest.h" -#include "CppUnit/TestCaller.h" -#include "CppUnit/TestSuite.h" - - -using Poco::SimpleFileChannel; -using Poco::Message; -using Poco::Path; -using Poco::File; -using Poco::DirectoryIterator; -using Poco::Timestamp; -using Poco::DateTimeFormatter; -using Poco::AutoPtr; - - -SimpleFileChannelTest::SimpleFileChannelTest(const std::string& name): CppUnit::TestCase(name) -{ -} - - -SimpleFileChannelTest::~SimpleFileChannelTest() -{ -} - - -void SimpleFileChannelTest::testRotate() -{ - std::string name = filename(); - try - { - AutoPtr pChannel = new SimpleFileChannel(name); - pChannel->setProperty(SimpleFileChannel::PROP_ROTATION, "2 K"); - pChannel->open(); - Message msg("source", "This is a log file entry", Message::PRIO_INFORMATION); - for (int i = 0; i < 200; ++i) - { - pChannel->log(msg); - } - File f(name); - assert (f.exists()); - f = name + ".0"; - assert (f.exists()); - assert (f.getSize() >= 2048); - } - catch (...) - { - remove(name); - throw; - } - remove(name); -} - - -void SimpleFileChannelTest::setUp() -{ -} - - -void SimpleFileChannelTest::tearDown() -{ -} - - -void SimpleFileChannelTest::remove(const std::string& baseName) -{ - DirectoryIterator it(Path::current()); - DirectoryIterator end; - std::vector files; - while (it != end) - { - if (it.name().find(baseName) == 0) - { - files.push_back(it.name()); - } - ++it; - } - for (std::vector::iterator it = files.begin(); it != files.end(); ++it) - { - try - { - File f(*it); - f.remove(); - } - catch (...) - { - } - } -} - - -std::string SimpleFileChannelTest::filename() const -{ - std::string name = "log_"; - name.append(DateTimeFormatter::format(Timestamp(), "%Y%m%d%H%M%S")); - name.append(".log"); - return name; -} - - -CppUnit::Test* SimpleFileChannelTest::suite() -{ - CppUnit::TestSuite* pSuite = new CppUnit::TestSuite("SimpleFileChannelTest"); - - CppUnit_addTest(pSuite, SimpleFileChannelTest, testRotate); - - return pSuite; -} diff --git a/contrib/libpoco/Foundation/testsuite/src/SimpleFileChannelTest.h b/contrib/libpoco/Foundation/testsuite/src/SimpleFileChannelTest.h deleted file mode 100644 index 16901c01a7f..00000000000 --- a/contrib/libpoco/Foundation/testsuite/src/SimpleFileChannelTest.h +++ /dev/null @@ -1,42 +0,0 @@ -// -// SimpleFileChannelTest.h -// -// $Id: //poco/1.4/Foundation/testsuite/src/SimpleFileChannelTest.h#1 $ -// -// Definition of the SimpleFileChannelTest class. -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef SimpleFileChannelTest_INCLUDED -#define SimpleFileChannelTest_INCLUDED - - -#include "Poco/Foundation.h" -#include "CppUnit/TestCase.h" - - -class SimpleFileChannelTest: public CppUnit::TestCase -{ -public: - SimpleFileChannelTest(const std::string& name); - ~SimpleFileChannelTest(); - - void testRotate(); - - void setUp(); - void tearDown(); - - static CppUnit::Test* suite(); - -private: - void remove(const std::string& baseName); - std::string filename() const; -}; - - -#endif // SimpleFileChannelTest_INCLUDED diff --git a/contrib/libpoco/Foundation/testsuite/src/SimpleHashTableTest.cpp b/contrib/libpoco/Foundation/testsuite/src/SimpleHashTableTest.cpp deleted file mode 100644 index 294e57a06fd..00000000000 --- a/contrib/libpoco/Foundation/testsuite/src/SimpleHashTableTest.cpp +++ /dev/null @@ -1,160 +0,0 @@ -// -// SimpleHashTableTest.cpp -// -// $Id: //poco/1.4/Foundation/testsuite/src/SimpleHashTableTest.cpp#1 $ -// -// Copyright (c) 2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "SimpleHashTableTest.h" -#include "CppUnit/TestCaller.h" -#include "CppUnit/TestSuite.h" -#include "Poco/SimpleHashTable.h" -#include "Poco/NumberFormatter.h" - - -GCC_DIAG_OFF(unused-variable) - - -using namespace Poco; - - -SimpleHashTableTest::SimpleHashTableTest(const std::string& name): CppUnit::TestCase(name) -{ -} - - -SimpleHashTableTest::~SimpleHashTableTest() -{ -} - - -void SimpleHashTableTest::testInsert() -{ - std::string s1("str1"); - std::string s2("str2"); - SimpleHashTable hashTable; - assert (!hashTable.exists(s1)); - hashTable.insert(s1, 13); - assert (hashTable.exists(s1)); - assert (hashTable.get(s1) == 13); - int retVal = 0; - - assert (hashTable.get(s1, retVal)); - assert (retVal == 13); - try - { - hashTable.insert(s1, 22); - failmsg ("duplicate insert must fail"); - } - catch (Exception&){} - try - { - hashTable.get(s2); - failmsg ("getting a non inserted item must fail"); - } - catch (Exception&){} - - assert (!hashTable.exists(s2)); - hashTable.insert(s2, 13); - assert (hashTable.exists(s2)); -} - - -void SimpleHashTableTest::testUpdate() -{ - // add code for second test here - std::string s1("str1"); - std::string s2("str2"); - SimpleHashTable hashTable; - hashTable.insert(s1, 13); - hashTable.update(s1, 14); - assert (hashTable.exists(s1)); - assert (hashTable.get(s1) == 14); - int retVal = 0; - - assert (hashTable.get(s1, retVal)); - assert (retVal == 14); - - // updating a non existing item must work too - hashTable.update(s2, 15); - assert (hashTable.get(s2) == 15); -} - - -void SimpleHashTableTest::testOverflow() -{ - SimpleHashTable hashTable(31); - for (int i = 0; i < 31; ++i) - { - hashTable.insert(Poco::NumberFormatter::format(i), i*i); - } - - for (int i = 0; i < 31; ++i) - { - std::string tmp = Poco::NumberFormatter::format(i); - assert (hashTable.exists(tmp)); - assert (hashTable.get(tmp) == i*i); - } -} - - -void SimpleHashTableTest::testSize() -{ - SimpleHashTable hashTable(13); - assert (hashTable.size() == 0); - Poco::UInt32 h1 = hashTable.insert("1", 1); - assert (hashTable.size() == 1); - Poco::UInt32 h2 = hashTable.update("2", 2); - assert (hashTable.size() == 2); - hashTable.clear(); - assert (hashTable.size() == 0); -} - - -void SimpleHashTableTest::testResize() -{ - SimpleHashTable hashTable(13); - assert (hashTable.size() == 0); - hashTable.resize(2467); - for (int i = 0; i < 1024; ++i) - { - hashTable.insert(Poco::NumberFormatter::format(i), i*i); - } - hashTable.resize(3037); - - for (int i = 0; i < 1024; ++i) - { - std::string tmp = Poco::NumberFormatter::format(i); - assert (hashTable.exists(tmp)); - assert (hashTable.get(tmp) == i*i); - } -} - - -void SimpleHashTableTest::setUp() -{ -} - - -void SimpleHashTableTest::tearDown() -{ -} - - -CppUnit::Test* SimpleHashTableTest::suite() -{ - CppUnit::TestSuite* pSuite = new CppUnit::TestSuite("SimpleHashTableTest"); - - CppUnit_addTest(pSuite, SimpleHashTableTest, testInsert); - CppUnit_addTest(pSuite, SimpleHashTableTest, testUpdate); - CppUnit_addTest(pSuite, SimpleHashTableTest, testOverflow); - CppUnit_addTest(pSuite, SimpleHashTableTest, testSize); - CppUnit_addTest(pSuite, SimpleHashTableTest, testResize); - - return pSuite; -} diff --git a/contrib/libpoco/Foundation/testsuite/src/SimpleHashTableTest.h b/contrib/libpoco/Foundation/testsuite/src/SimpleHashTableTest.h deleted file mode 100644 index 6c31e9e4d5a..00000000000 --- a/contrib/libpoco/Foundation/testsuite/src/SimpleHashTableTest.h +++ /dev/null @@ -1,45 +0,0 @@ -// -// SimpleHashTableTest.h -// -// $Id: //poco/1.4/Foundation/testsuite/src/SimpleHashTableTest.h#1 $ -// -// Definition of the SimpleHashTableTest class. -// -// Copyright (c) 2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef SimpleHashTableTest_INCLUDED -#define SimpleHashTableTest_INCLUDED - - -#include "Poco/Foundation.h" -#include "CppUnit/TestCase.h" - - -class SimpleHashTableTest: public CppUnit::TestCase -{ -public: - SimpleHashTableTest(const std::string& name); - ~SimpleHashTableTest(); - - void testInsert(); - void testOverflow(); - void testUpdate(); - void testSize(); - void testResize(); - void testStatistic(); - - void setUp(); - void tearDown(); - - static CppUnit::Test* suite(); - -private: -}; - - -#endif // SimpleHashTableTest_INCLUDED diff --git a/contrib/libpoco/Foundation/testsuite/src/StopwatchTest.cpp b/contrib/libpoco/Foundation/testsuite/src/StopwatchTest.cpp deleted file mode 100644 index 87c8633f0ae..00000000000 --- a/contrib/libpoco/Foundation/testsuite/src/StopwatchTest.cpp +++ /dev/null @@ -1,78 +0,0 @@ -// -// StopwatchTest.cpp -// -// $Id: //poco/1.4/Foundation/testsuite/src/StopwatchTest.cpp#1 $ -// -// Copyright (c) 2004-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "StopwatchTest.h" -#include "CppUnit/TestCaller.h" -#include "CppUnit/TestSuite.h" -#include "Poco/Stopwatch.h" -#include "Poco/Timestamp.h" -#include "Poco/Thread.h" - - -using Poco::Stopwatch; -using Poco::Timestamp; -using Poco::Thread; - - -StopwatchTest::StopwatchTest(const std::string& name): CppUnit::TestCase(name) -{ -} - - -StopwatchTest::~StopwatchTest() -{ -} - - -void StopwatchTest::testStopwatch() -{ - Stopwatch sw; - sw.start(); - Thread::sleep(200); - sw.stop(); - Timestamp::TimeDiff d = sw.elapsed(); - assert (d >= 180000 && d <= 300000); - sw.start(); - Thread::sleep(100); - d = sw.elapsed(); - assert (d >= 280000 && d <= 400000); - Thread::sleep(100); - sw.stop(); - d = sw.elapsed(); - assert (d >= 380000 && d <= 500000); - sw.reset(); - sw.start(); - Thread::sleep(200); - sw.stop(); - d = sw.elapsed(); - assert (d >= 180000 && d <= 300000); -} - - -void StopwatchTest::setUp() -{ -} - - -void StopwatchTest::tearDown() -{ -} - - -CppUnit::Test* StopwatchTest::suite() -{ - CppUnit::TestSuite* pSuite = new CppUnit::TestSuite("StopwatchTest"); - - CppUnit_addTest(pSuite, StopwatchTest, testStopwatch); - - return pSuite; -} diff --git a/contrib/libpoco/Foundation/testsuite/src/StopwatchTest.h b/contrib/libpoco/Foundation/testsuite/src/StopwatchTest.h deleted file mode 100644 index 92ab4bd5892..00000000000 --- a/contrib/libpoco/Foundation/testsuite/src/StopwatchTest.h +++ /dev/null @@ -1,40 +0,0 @@ -// -// StopwatchTest.h -// -// $Id: //poco/1.4/Foundation/testsuite/src/StopwatchTest.h#1 $ -// -// Definition of the StopwatchTest class. -// -// Copyright (c) 2004-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef StopwatchTest_INCLUDED -#define StopwatchTest_INCLUDED - - -#include "Poco/Foundation.h" -#include "CppUnit/TestCase.h" - - -class StopwatchTest: public CppUnit::TestCase -{ -public: - StopwatchTest(const std::string& name); - ~StopwatchTest(); - - void testStopwatch(); - - void setUp(); - void tearDown(); - - static CppUnit::Test* suite(); - -private: -}; - - -#endif // StopwatchTest_INCLUDED diff --git a/contrib/libpoco/Foundation/testsuite/src/StreamConverterTest.cpp b/contrib/libpoco/Foundation/testsuite/src/StreamConverterTest.cpp deleted file mode 100644 index 3d3e6368d66..00000000000 --- a/contrib/libpoco/Foundation/testsuite/src/StreamConverterTest.cpp +++ /dev/null @@ -1,315 +0,0 @@ -// -// StreamConverterTest.cpp -// -// $Id: //poco/1.4/Foundation/testsuite/src/StreamConverterTest.cpp#1 $ -// -// Copyright (c) 2004-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "StreamConverterTest.h" -#include "CppUnit/TestCaller.h" -#include "CppUnit/TestSuite.h" -#include "Poco/StreamConverter.h" -#include "Poco/ASCIIEncoding.h" -#include "Poco/Latin1Encoding.h" -#include "Poco/UTF8Encoding.h" -#include "Poco/StreamCopier.h" -#include - - -using Poco::InputStreamConverter; -using Poco::OutputStreamConverter; -using Poco::Latin1Encoding; -using Poco::UTF8Encoding; -using Poco::ASCIIEncoding; -using Poco::StreamCopier; - - -StreamConverterTest::StreamConverterTest(const std::string& name): CppUnit::TestCase(name) -{ -} - - -StreamConverterTest::~StreamConverterTest() -{ -} - - -void StreamConverterTest::testIdentityASCIIIn() -{ - ASCIIEncoding encoding; - - std::istringstream istr1(""); - std::ostringstream ostr1; - InputStreamConverter converter1(istr1, encoding, encoding); - StreamCopier::copyStream(converter1, ostr1); - assert (ostr1.str() == ""); - assert (converter1.errors() == 0); - - std::istringstream istr2("foo bar"); - std::ostringstream ostr2; - InputStreamConverter converter2(istr2, encoding, encoding); - StreamCopier::copyStream(converter2, ostr2); - assert (ostr2.str() == "foo bar"); - assert (converter2.errors() == 0); - - std::istringstream istr3("x"); - std::ostringstream ostr3; - InputStreamConverter converter3(istr3, encoding, encoding); - StreamCopier::copyStream(converter3, ostr3); - assert (ostr3.str() == "x"); - assert (converter3.errors() == 0); -} - - -void StreamConverterTest::testIdentityASCIIOut() -{ - ASCIIEncoding encoding; - - std::ostringstream ostr1; - OutputStreamConverter converter1(ostr1, encoding, encoding); - converter1 << ""; - assert (ostr1.str() == ""); - assert (converter1.errors() == 0); - - std::ostringstream ostr2; - OutputStreamConverter converter2(ostr2, encoding, encoding); - converter2 << "foo bar"; - assert (ostr2.str() == "foo bar"); - assert (converter2.errors() == 0); - - std::ostringstream ostr3; - OutputStreamConverter converter3(ostr3, encoding, encoding); - converter3 << "x"; - assert (ostr3.str() == "x"); - assert (converter3.errors() == 0); -} - - -void StreamConverterTest::testIdentityUTF8In() -{ - UTF8Encoding encoding; - - std::istringstream istr1(""); - std::ostringstream ostr1; - InputStreamConverter converter1(istr1, encoding, encoding); - StreamCopier::copyStream(converter1, ostr1); - assert (ostr1.str() == ""); - assert (converter1.errors() == 0); - - std::istringstream istr2("foo bar"); - std::ostringstream ostr2; - InputStreamConverter converter2(istr2, encoding, encoding); - StreamCopier::copyStream(converter2, ostr2); - assert (ostr2.str() == "foo bar"); - assert (converter2.errors() == 0); - - std::istringstream istr3("x"); - std::ostringstream ostr3; - InputStreamConverter converter3(istr3, encoding, encoding); - StreamCopier::copyStream(converter3, ostr3); - assert (ostr3.str() == "x"); - assert (converter3.errors() == 0); - - const unsigned char greek[] = {0x20, 0xce, 0xba, 0xe1, 0xbd, 0xb9, 0xcf, 0x83, 0xce, 0xbc, 0xce, 0xb5, 0x20, 0x00}; - std::string text((const char*) greek); - - std::istringstream istr4(text); - std::ostringstream ostr4; - InputStreamConverter converter4(istr4, encoding, encoding); - StreamCopier::copyStream(converter4, ostr4); - assert (ostr4.str() == text); - assert (converter4.errors() == 0); - - const unsigned char supp[] = {0x41, 0x42, 0xf0, 0x90, 0x82, 0xa4, 0xf0, 0xaf, 0xa6, 0xa0, 0xf0, 0xaf, 0xa8, 0x9d, 0x00}; - std::string text2((const char*) supp); - - std::istringstream istr5(text2); - std::ostringstream ostr5; - InputStreamConverter converter5(istr5, encoding, encoding); - StreamCopier::copyStream(converter5, ostr5); - assert (ostr5.str() == text2); - assert (converter5.errors() == 0); - - -} - - -void StreamConverterTest::testIdentityUTF8Out() -{ - UTF8Encoding encoding; - - std::ostringstream ostr1; - OutputStreamConverter converter1(ostr1, encoding, encoding); - converter1 << ""; - assert (ostr1.str() == ""); - assert (converter1.errors() == 0); - - std::ostringstream ostr2; - OutputStreamConverter converter2(ostr2, encoding, encoding); - converter2 << "foo bar"; - assert (ostr2.str() == "foo bar"); - assert (converter2.errors() == 0); - - std::ostringstream ostr3; - OutputStreamConverter converter3(ostr3, encoding, encoding); - converter3 << "x"; - assert (ostr3.str() == "x"); - assert (converter3.errors() == 0); - - const unsigned char greek[] = {0x20, 0xce, 0xba, 0xe1, 0xbd, 0xb9, 0xcf, 0x83, 0xce, 0xbc, 0xce, 0xb5, 0x20, 0x00}; - std::string text((const char*) greek); - - std::ostringstream ostr4; - OutputStreamConverter converter4(ostr4, encoding, encoding); - converter4 << text; - assert (ostr4.str() == text); - assert (converter4.errors() == 0); -} - - -void StreamConverterTest::testUTF8toASCIIIn() -{ - UTF8Encoding utf8Encoding; - ASCIIEncoding asciiEncoding; - - const unsigned char greek[] = {0x20, 0xce, 0xba, 0xe1, 0xbd, 0xb9, 0xcf, 0x83, 0xce, 0xbc, 0xce, 0xb5, 0x20, 0x41, 0x42, 0x00}; - std::string text((const char*) greek); - - std::istringstream istr1(text); - std::ostringstream ostr1; - InputStreamConverter converter1(istr1, utf8Encoding, asciiEncoding); - StreamCopier::copyStream(converter1, ostr1); - assert (ostr1.str() == " ????? AB"); - assert (converter1.errors() == 0); - - std::istringstream istr2("abcde"); - std::ostringstream ostr2; - InputStreamConverter converter2(istr2, utf8Encoding, asciiEncoding); - StreamCopier::copyStream(converter2, ostr2); - assert (ostr2.str() == "abcde"); - assert (converter2.errors() == 0); -} - - -void StreamConverterTest::testUTF8toASCIIOut() -{ - UTF8Encoding utf8Encoding; - ASCIIEncoding asciiEncoding; - - const unsigned char greek[] = {0x20, 0xce, 0xba, 0xe1, 0xbd, 0xb9, 0xcf, 0x83, 0xce, 0xbc, 0xce, 0xb5, 0x20, 0x41, 0x42, 0x00}; - std::string text((const char*) greek); - - std::ostringstream ostr1; - OutputStreamConverter converter1(ostr1, utf8Encoding, asciiEncoding); - converter1 << text; - assert (ostr1.str() == " ????? AB"); - assert (converter1.errors() == 0); - - std::ostringstream ostr2; - OutputStreamConverter converter2(ostr2, utf8Encoding, asciiEncoding); - converter2 << "abcde"; - assert (ostr2.str() == "abcde"); - assert (converter2.errors() == 0); -} - - -void StreamConverterTest::testLatin1toUTF8In() -{ - UTF8Encoding utf8Encoding; - Latin1Encoding latin1Encoding; - - const unsigned char latin1Chars[] = {'g', 252, 'n', 't', 'e', 'r', 0}; - const unsigned char utf8Chars[] = {'g', 195, 188, 'n', 't', 'e', 'r', 0}; - std::string latin1Text((const char*) latin1Chars); - std::string utf8Text((const char*) utf8Chars); - - std::istringstream istr1(latin1Text); - std::ostringstream ostr1; - InputStreamConverter converter1(istr1, latin1Encoding, utf8Encoding); - StreamCopier::copyStream(converter1, ostr1); - assert (ostr1.str() == utf8Text); - assert (converter1.errors() == 0); -} - - -void StreamConverterTest::testLatin1toUTF8Out() -{ - UTF8Encoding utf8Encoding; - Latin1Encoding latin1Encoding; - - const unsigned char latin1Chars[] = {'g', 252, 'n', 't', 'e', 'r', 0}; - const unsigned char utf8Chars[] = {'g', 195, 188, 'n', 't', 'e', 'r', 0}; - std::string latin1Text((const char*) latin1Chars); - std::string utf8Text((const char*) utf8Chars); - - std::ostringstream ostr1; - OutputStreamConverter converter1(ostr1, latin1Encoding, utf8Encoding); - converter1 << latin1Text; - assert (ostr1.str() == utf8Text); - assert (converter1.errors() == 0); -} - - -void StreamConverterTest::testErrorsIn() -{ - UTF8Encoding utf8Encoding; - Latin1Encoding latin1Encoding; - - const unsigned char badChars[] = {'a', 'b', 255, 'c', 254, 0}; - std::string badText((const char*) badChars); - - std::istringstream istr1(badText); - std::ostringstream ostr1; - InputStreamConverter converter1(istr1, utf8Encoding, latin1Encoding); - StreamCopier::copyStream(converter1, ostr1); - assert (converter1.errors() == 2); -} - - -void StreamConverterTest::testErrorsOut() -{ - UTF8Encoding utf8Encoding; - Latin1Encoding latin1Encoding; - - const unsigned char badChars[] = {'a', 'b', 255, 'c', 254, 0}; - std::string badText((const char*) badChars); - - std::ostringstream ostr1; - OutputStreamConverter converter1(ostr1, utf8Encoding, latin1Encoding); - converter1 << badText; - assert (converter1.errors() == 1); -} - - -void StreamConverterTest::setUp() -{ -} - - -void StreamConverterTest::tearDown() -{ -} - - -CppUnit::Test* StreamConverterTest::suite() -{ - CppUnit::TestSuite* pSuite = new CppUnit::TestSuite("StreamConverterTest"); - - CppUnit_addTest(pSuite, StreamConverterTest, testIdentityASCIIIn); - CppUnit_addTest(pSuite, StreamConverterTest, testIdentityASCIIOut); - CppUnit_addTest(pSuite, StreamConverterTest, testIdentityUTF8In); - CppUnit_addTest(pSuite, StreamConverterTest, testIdentityUTF8Out); - CppUnit_addTest(pSuite, StreamConverterTest, testUTF8toASCIIIn); - CppUnit_addTest(pSuite, StreamConverterTest, testUTF8toASCIIOut); - CppUnit_addTest(pSuite, StreamConverterTest, testLatin1toUTF8In); - CppUnit_addTest(pSuite, StreamConverterTest, testLatin1toUTF8Out); - CppUnit_addTest(pSuite, StreamConverterTest, testErrorsIn); - CppUnit_addTest(pSuite, StreamConverterTest, testErrorsOut); - - return pSuite; -} diff --git a/contrib/libpoco/Foundation/testsuite/src/StreamConverterTest.h b/contrib/libpoco/Foundation/testsuite/src/StreamConverterTest.h deleted file mode 100644 index 2db255e2e45..00000000000 --- a/contrib/libpoco/Foundation/testsuite/src/StreamConverterTest.h +++ /dev/null @@ -1,49 +0,0 @@ -// -// StreamConverterTest.h -// -// $Id: //poco/1.4/Foundation/testsuite/src/StreamConverterTest.h#1 $ -// -// Definition of the StreamConverterTest class. -// -// Copyright (c) 2004-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef StreamConverterTest_INCLUDED -#define StreamConverterTest_INCLUDED - - -#include "Poco/Foundation.h" -#include "CppUnit/TestCase.h" - - -class StreamConverterTest: public CppUnit::TestCase -{ -public: - StreamConverterTest(const std::string& name); - ~StreamConverterTest(); - - void testIdentityASCIIIn(); - void testIdentityASCIIOut(); - void testIdentityUTF8In(); - void testIdentityUTF8Out(); - void testUTF8toASCIIIn(); - void testUTF8toASCIIOut(); - void testLatin1toUTF8In(); - void testLatin1toUTF8Out(); - void testErrorsIn(); - void testErrorsOut(); - - void setUp(); - void tearDown(); - - static CppUnit::Test* suite(); - -private: -}; - - -#endif // StreamConverterTest_INCLUDED diff --git a/contrib/libpoco/Foundation/testsuite/src/StreamCopierTest.cpp b/contrib/libpoco/Foundation/testsuite/src/StreamCopierTest.cpp deleted file mode 100644 index 2daa50e9b7c..00000000000 --- a/contrib/libpoco/Foundation/testsuite/src/StreamCopierTest.cpp +++ /dev/null @@ -1,190 +0,0 @@ -// -// StreamCopierTest.cpp -// -// $Id: //poco/1.4/Foundation/testsuite/src/StreamCopierTest.cpp#2 $ -// -// Copyright (c) 2004-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "StreamCopierTest.h" -#include "CppUnit/TestCaller.h" -#include "CppUnit/TestSuite.h" -#include "Poco/StreamCopier.h" -#include - - -using Poco::StreamCopier; - - -StreamCopierTest::StreamCopierTest(const std::string& name): CppUnit::TestCase(name) -{ -} - - -StreamCopierTest::~StreamCopierTest() -{ -} - - -void StreamCopierTest::testBufferedCopy() -{ - { - std::string src; - for (int i = 0; i < 255; ++i) src += char(i); - std::istringstream istr(src); - std::ostringstream ostr; - std::streamsize n = StreamCopier::copyStream(istr, ostr); - assert (ostr.str() == src); - assert (n == src.size()); - } - { - std::string src; - for (int i = 0; i < 512; ++i) src += char(i % 256); - std::istringstream istr(src); - std::ostringstream ostr; - std::streamsize n = StreamCopier::copyStream(istr, ostr, 100); - assert (ostr.str() == src); - assert (n == src.size()); - } - { - std::string src; - for (int i = 0; i < 512; ++i) src += char(i % 256); - std::istringstream istr(src); - std::ostringstream ostr; - std::streamsize n = StreamCopier::copyStream(istr, ostr, 128); - assert (ostr.str() == src); - assert (n == src.size()); - } - { - std::string src; - for (int i = 0; i < 512; ++i) src += char(i % 256); - std::istringstream istr(src); - std::ostringstream ostr; - std::streamsize n = StreamCopier::copyStream(istr, ostr, 512); - assert (ostr.str() == src); - assert (n == src.size()); - } -} - - -void StreamCopierTest::testUnbufferedCopy() -{ - std::string src; - for (int i = 0; i < 255; ++i) src += char(i); - std::istringstream istr(src); - std::ostringstream ostr; - std::streamsize n = StreamCopier::copyStreamUnbuffered(istr, ostr); - assert (ostr.str() == src); - assert (n == src.size()); -} - - -void StreamCopierTest::testCopyToString() -{ - std::string src; - for (int i = 0; i < 512; ++i) src += char(i % 256); - std::istringstream istr(src); - std::string dest; - std::streamsize n = StreamCopier::copyToString(istr, dest, 100); - assert (src == dest); - assert (n == src.size()); -} - - -#if defined(POCO_HAVE_INT64) -void StreamCopierTest::testBufferedCopy64() -{ - { - std::string src; - for (int i = 0; i < 255; ++i) src += char(i); - std::istringstream istr(src); - std::ostringstream ostr; - Poco::UInt64 n = StreamCopier::copyStream64(istr, ostr); - assert (ostr.str() == src); - assert (n == src.size()); - } - { - std::string src; - for (int i = 0; i < 512; ++i) src += char(i % 256); - std::istringstream istr(src); - std::ostringstream ostr; - Poco::UInt64 n = StreamCopier::copyStream64(istr, ostr, 100); - assert (ostr.str() == src); - assert (n == src.size()); - } - { - std::string src; - for (int i = 0; i < 512; ++i) src += char(i % 256); - std::istringstream istr(src); - std::ostringstream ostr; - Poco::UInt64 n = StreamCopier::copyStream64(istr, ostr, 128); - assert (ostr.str() == src); - assert (n == src.size()); - } - { - std::string src; - for (int i = 0; i < 512; ++i) src += char(i % 256); - std::istringstream istr(src); - std::ostringstream ostr; - Poco::UInt64 n = StreamCopier::copyStream64(istr, ostr, 512); - assert (ostr.str() == src); - assert (n == src.size()); - } -} - - -void StreamCopierTest::testUnbufferedCopy64() -{ - std::string src; - for (int i = 0; i < 255; ++i) src += char(i); - std::istringstream istr(src); - std::ostringstream ostr; - Poco::UInt64 n = StreamCopier::copyStreamUnbuffered64(istr, ostr); - assert (ostr.str() == src); - assert (n == src.size()); -} - - -void StreamCopierTest::testCopyToString64() -{ - std::string src; - for (int i = 0; i < 512; ++i) src += char(i % 256); - std::istringstream istr(src); - std::string dest; - Poco::UInt64 n = StreamCopier::copyToString64(istr, dest, 100); - assert (src == dest); - assert (n == src.size()); -} -#endif - - -void StreamCopierTest::setUp() -{ -} - - -void StreamCopierTest::tearDown() -{ -} - - -CppUnit::Test* StreamCopierTest::suite() -{ - CppUnit::TestSuite* pSuite = new CppUnit::TestSuite("StreamCopierTest"); - - CppUnit_addTest(pSuite, StreamCopierTest, testBufferedCopy); - CppUnit_addTest(pSuite, StreamCopierTest, testUnbufferedCopy); - CppUnit_addTest(pSuite, StreamCopierTest, testCopyToString); - -#if defined(POCO_HAVE_INT64) - CppUnit_addTest(pSuite, StreamCopierTest, testBufferedCopy64); - CppUnit_addTest(pSuite, StreamCopierTest, testUnbufferedCopy64); - CppUnit_addTest(pSuite, StreamCopierTest, testCopyToString64); -#endif - - return pSuite; -} diff --git a/contrib/libpoco/Foundation/testsuite/src/StreamCopierTest.h b/contrib/libpoco/Foundation/testsuite/src/StreamCopierTest.h deleted file mode 100644 index 51e43ffb5ef..00000000000 --- a/contrib/libpoco/Foundation/testsuite/src/StreamCopierTest.h +++ /dev/null @@ -1,47 +0,0 @@ -// -// StreamCopierTest.h -// -// $Id: //poco/1.4/Foundation/testsuite/src/StreamCopierTest.h#2 $ -// -// Definition of the StreamCopierTest class. -// -// Copyright (c) 2004-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef StreamCopierTest_INCLUDED -#define StreamCopierTest_INCLUDED - - -#include "Poco/Foundation.h" -#include "CppUnit/TestCase.h" - - -class StreamCopierTest: public CppUnit::TestCase -{ -public: - StreamCopierTest(const std::string& name); - ~StreamCopierTest(); - - void testBufferedCopy(); - void testUnbufferedCopy(); - void testCopyToString(); -#if defined(POCO_HAVE_INT64) - void testBufferedCopy64(); - void testUnbufferedCopy64(); - void testCopyToString64(); -#endif - - void setUp(); - void tearDown(); - - static CppUnit::Test* suite(); - -private: -}; - - -#endif // StreamCopierTest_INCLUDED diff --git a/contrib/libpoco/Foundation/testsuite/src/StreamTokenizerTest.cpp b/contrib/libpoco/Foundation/testsuite/src/StreamTokenizerTest.cpp deleted file mode 100644 index 5bd090e7e4b..00000000000 --- a/contrib/libpoco/Foundation/testsuite/src/StreamTokenizerTest.cpp +++ /dev/null @@ -1,291 +0,0 @@ -// -// StreamTokenizerTest.cpp -// -// $Id: //poco/1.4/Foundation/testsuite/src/StreamTokenizerTest.cpp#1 $ -// -// Copyright (c) 2004-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "StreamTokenizerTest.h" -#include "CppUnit/TestCaller.h" -#include "CppUnit/TestSuite.h" -#include "Poco/StreamTokenizer.h" -#include "Poco/Token.h" -#include "Poco/Ascii.h" -#include - - -using Poco::StreamTokenizer; -using Poco::Token; -using Poco::InvalidToken; -using Poco::EOFToken; -using Poco::WhitespaceToken; -using Poco::Ascii; - - -class IdentifierToken: public Token -{ -public: - IdentifierToken() - { - } - - ~IdentifierToken() - { - } - - Class tokenClass() const - { - return Token::IDENTIFIER_TOKEN; - } - - bool start(char c, std::istream& istr) - { - if (c != -1 && Ascii::isAlpha(c)) - { - _value = c; - return true; - } - else return false; - } - - void finish(std::istream& istr) - { - int c = istr.peek(); - while (c != -1 && Ascii::isAlphaNumeric(c)) - { - istr.get(); - _value += c; - c = istr.peek(); - } - } -}; - - -class IntLiteralToken: public Token -{ -public: - IntLiteralToken() - { - } - - ~IntLiteralToken() - { - } - - Class tokenClass() const - { - return Token::INTEGER_LITERAL_TOKEN; - } - - bool start(char c, std::istream& istr) - { - if (c != -1 && Ascii::isDigit(c)) - { - _value = c; - return true; - } - else return false; - } - - void finish(std::istream& istr) - { - int c = istr.peek(); - while (c != -1 && Ascii::isDigit(c)) - { - istr.get(); - _value += c; - c = istr.peek(); - } - } -}; - - -StreamTokenizerTest::StreamTokenizerTest(const std::string& name): CppUnit::TestCase(name) -{ -} - - -StreamTokenizerTest::~StreamTokenizerTest() -{ -} - - -void StreamTokenizerTest::testTokenizer1() -{ - std::string data = ""; - std::istringstream istr(data); - StreamTokenizer tokenizer(istr); - tokenizer.addToken(new WhitespaceToken()); - tokenizer.addToken(new IdentifierToken()); - tokenizer.addToken(new IntLiteralToken()); - - const Token* next = tokenizer.next(); - assert (next->tokenClass() == Token::EOF_TOKEN); -} - - -void StreamTokenizerTest::testTokenizer2() -{ - std::string data = "foo"; - std::istringstream istr(data); - StreamTokenizer tokenizer(istr); - tokenizer.addToken(new WhitespaceToken()); - tokenizer.addToken(new IdentifierToken()); - tokenizer.addToken(new IntLiteralToken()); - - const Token* next = tokenizer.next(); - assert (next->tokenClass() == Token::IDENTIFIER_TOKEN); - assert (next->tokenString() == "foo"); - - next = tokenizer.next(); - assert (next->tokenClass() == Token::EOF_TOKEN); -} - - -void StreamTokenizerTest::testTokenizer3() -{ - std::string data = "foo bar"; - std::istringstream istr(data); - StreamTokenizer tokenizer(istr); - tokenizer.addToken(new WhitespaceToken()); - tokenizer.addToken(new IdentifierToken()); - tokenizer.addToken(new IntLiteralToken()); - - const Token* next = tokenizer.next(); - assert (next->tokenClass() == Token::IDENTIFIER_TOKEN); - assert (next->tokenString() == "foo"); - - next = tokenizer.next(); - assert (next->tokenClass() == Token::IDENTIFIER_TOKEN); - assert (next->tokenString() == "bar"); - - next = tokenizer.next(); - assert (next->tokenClass() == Token::EOF_TOKEN); -} - - -void StreamTokenizerTest::testTokenizer4() -{ - std::string data = "foo 123"; - std::istringstream istr(data); - StreamTokenizer tokenizer(istr); - tokenizer.addToken(new WhitespaceToken()); - tokenizer.addToken(new IdentifierToken()); - tokenizer.addToken(new IntLiteralToken()); - - const Token* next = tokenizer.next(); - assert (next->tokenClass() == Token::IDENTIFIER_TOKEN); - assert (next->tokenString() == "foo"); - - next = tokenizer.next(); - assert (next->tokenClass() == Token::INTEGER_LITERAL_TOKEN); - assert (next->asInteger() == 123); - - next = tokenizer.next(); - assert (next->tokenClass() == Token::EOF_TOKEN); -} - - -void StreamTokenizerTest::testTokenizer5() -{ - std::string data = "foo # 123"; - std::istringstream istr(data); - StreamTokenizer tokenizer(istr); - tokenizer.addToken(new WhitespaceToken()); - tokenizer.addToken(new IdentifierToken()); - tokenizer.addToken(new IntLiteralToken()); - - const Token* next = tokenizer.next(); - assert (next->tokenClass() == Token::IDENTIFIER_TOKEN); - assert (next->tokenString() == "foo"); - - next = tokenizer.next(); - assert (next->tokenClass() == Token::INVALID_TOKEN); - assert (next->tokenString() == "#"); - - next = tokenizer.next(); - assert (next->tokenClass() == Token::INTEGER_LITERAL_TOKEN); - assert (next->asInteger() == 123); - - next = tokenizer.next(); - assert (next->tokenClass() == Token::EOF_TOKEN); -} - - -void StreamTokenizerTest::testTokenizer6() -{ - std::string data = "foo 123 #"; - std::istringstream istr(data); - StreamTokenizer tokenizer(istr); - tokenizer.addToken(new WhitespaceToken()); - tokenizer.addToken(new IdentifierToken()); - tokenizer.addToken(new IntLiteralToken()); - - const Token* next = tokenizer.next(); - assert (next->tokenClass() == Token::IDENTIFIER_TOKEN); - assert (next->tokenString() == "foo"); - - next = tokenizer.next(); - assert (next->tokenClass() == Token::INTEGER_LITERAL_TOKEN); - assert (next->asInteger() == 123); - - next = tokenizer.next(); - assert (next->tokenClass() == Token::INVALID_TOKEN); - assert (next->tokenString() == "#"); - - next = tokenizer.next(); - assert (next->tokenClass() == Token::EOF_TOKEN); -} - - -void StreamTokenizerTest::testTokenizer7() -{ - std::string data = " foo 123 "; - std::istringstream istr(data); - StreamTokenizer tokenizer(istr); - tokenizer.addToken(new WhitespaceToken()); - tokenizer.addToken(new IdentifierToken()); - tokenizer.addToken(new IntLiteralToken()); - - const Token* next = tokenizer.next(); - assert (next->tokenClass() == Token::IDENTIFIER_TOKEN); - assert (next->tokenString() == "foo"); - - next = tokenizer.next(); - assert (next->tokenClass() == Token::INTEGER_LITERAL_TOKEN); - assert (next->asInteger() == 123); - - next = tokenizer.next(); - assert (next->tokenClass() == Token::EOF_TOKEN); -} - - -void StreamTokenizerTest::setUp() -{ -} - - -void StreamTokenizerTest::tearDown() -{ -} - - -CppUnit::Test* StreamTokenizerTest::suite() -{ - CppUnit::TestSuite* pSuite = new CppUnit::TestSuite("StreamTokenizerTest"); - - CppUnit_addTest(pSuite, StreamTokenizerTest, testTokenizer1); - CppUnit_addTest(pSuite, StreamTokenizerTest, testTokenizer2); - CppUnit_addTest(pSuite, StreamTokenizerTest, testTokenizer3); - CppUnit_addTest(pSuite, StreamTokenizerTest, testTokenizer4); - CppUnit_addTest(pSuite, StreamTokenizerTest, testTokenizer5); - CppUnit_addTest(pSuite, StreamTokenizerTest, testTokenizer6); - CppUnit_addTest(pSuite, StreamTokenizerTest, testTokenizer7); - - return pSuite; -} diff --git a/contrib/libpoco/Foundation/testsuite/src/StreamTokenizerTest.h b/contrib/libpoco/Foundation/testsuite/src/StreamTokenizerTest.h deleted file mode 100644 index 7b7562b493d..00000000000 --- a/contrib/libpoco/Foundation/testsuite/src/StreamTokenizerTest.h +++ /dev/null @@ -1,46 +0,0 @@ -// -// StreamTokenizerTest.h -// -// $Id: //poco/1.4/Foundation/testsuite/src/StreamTokenizerTest.h#1 $ -// -// Definition of the StreamTokenizerTest class. -// -// Copyright (c) 2004-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef StreamTokenizerTest_INCLUDED -#define StreamTokenizerTest_INCLUDED - - -#include "Poco/Foundation.h" -#include "CppUnit/TestCase.h" - - -class StreamTokenizerTest: public CppUnit::TestCase -{ -public: - StreamTokenizerTest(const std::string& name); - ~StreamTokenizerTest(); - - void testTokenizer1(); - void testTokenizer2(); - void testTokenizer3(); - void testTokenizer4(); - void testTokenizer5(); - void testTokenizer6(); - void testTokenizer7(); - - void setUp(); - void tearDown(); - - static CppUnit::Test* suite(); - -private: -}; - - -#endif // StreamTokenizerTest_INCLUDED diff --git a/contrib/libpoco/Foundation/testsuite/src/StreamsTestSuite.cpp b/contrib/libpoco/Foundation/testsuite/src/StreamsTestSuite.cpp deleted file mode 100644 index 30421585eb4..00000000000 --- a/contrib/libpoco/Foundation/testsuite/src/StreamsTestSuite.cpp +++ /dev/null @@ -1,50 +0,0 @@ -// -// StreamsTestSuite.cpp -// -// $Id: //poco/1.4/Foundation/testsuite/src/StreamsTestSuite.cpp#1 $ -// -// Copyright (c) 2004-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "StreamsTestSuite.h" -#include "Base32Test.h" -#include "Base64Test.h" -#include "HexBinaryTest.h" -#include "StreamCopierTest.h" -#include "CountingStreamTest.h" -#include "NullStreamTest.h" -#include "ZLibTest.h" -#include "StreamTokenizerTest.h" -#include "BinaryReaderWriterTest.h" -#include "LineEndingConverterTest.h" -#include "TeeStreamTest.h" -#include "FileStreamTest.h" -#include "MemoryStreamTest.h" -#include "FIFOBufferStreamTest.h" - - -CppUnit::Test* StreamsTestSuite::suite() -{ - CppUnit::TestSuite* pSuite = new CppUnit::TestSuite("StreamsTestSuite"); - - pSuite->addTest(Base32Test::suite()); - pSuite->addTest(Base64Test::suite()); - pSuite->addTest(HexBinaryTest::suite()); - pSuite->addTest(StreamCopierTest::suite()); - pSuite->addTest(CountingStreamTest::suite()); - pSuite->addTest(NullStreamTest::suite()); - pSuite->addTest(ZLibTest::suite()); - pSuite->addTest(StreamTokenizerTest::suite()); - pSuite->addTest(BinaryReaderWriterTest::suite()); - pSuite->addTest(LineEndingConverterTest::suite()); - pSuite->addTest(TeeStreamTest::suite()); - pSuite->addTest(FileStreamTest::suite()); - pSuite->addTest(MemoryStreamTest::suite()); - pSuite->addTest(FIFOBufferStreamTest::suite()); - - return pSuite; -} diff --git a/contrib/libpoco/Foundation/testsuite/src/StreamsTestSuite.h b/contrib/libpoco/Foundation/testsuite/src/StreamsTestSuite.h deleted file mode 100644 index 8498e1e886b..00000000000 --- a/contrib/libpoco/Foundation/testsuite/src/StreamsTestSuite.h +++ /dev/null @@ -1,29 +0,0 @@ -// -// StreamsTestSuite.h -// -// $Id: //poco/1.4/Foundation/testsuite/src/StreamsTestSuite.h#1 $ -// -// Definition of the StreamsTestSuite class. -// -// Copyright (c) 2004-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef StreamsTestSuite_INCLUDED -#define StreamsTestSuite_INCLUDED - - -#include "CppUnit/TestSuite.h" - - -class StreamsTestSuite -{ -public: - static CppUnit::Test* suite(); -}; - - -#endif // StreamsTestSuite_INCLUDED diff --git a/contrib/libpoco/Foundation/testsuite/src/StringTest.cpp b/contrib/libpoco/Foundation/testsuite/src/StringTest.cpp deleted file mode 100644 index a317c5413a1..00000000000 --- a/contrib/libpoco/Foundation/testsuite/src/StringTest.cpp +++ /dev/null @@ -1,1126 +0,0 @@ -// -// StringTest.cpp -// -// $Id: //poco/1.4/Foundation/testsuite/src/StringTest.cpp#1 $ -// -// Copyright (c) 2004-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "StringTest.h" -#include "CppUnit/TestCaller.h" -#include "CppUnit/TestSuite.h" -#include "Poco/String.h" -#include "Poco/Format.h" -#include "Poco/MemoryStream.h" -#include "Poco/Stopwatch.h" -#include "Poco/Exception.h" -#include -#include -#include -#include -#include - - -using Poco::trimLeft; -using Poco::trimLeftInPlace; -using Poco::trimRight; -using Poco::trimRightInPlace; -using Poco::trim; -using Poco::trimInPlace; -using Poco::toUpper; -using Poco::toUpperInPlace; -using Poco::toLower; -using Poco::toLowerInPlace; -using Poco::icompare; -using Poco::istring; -using Poco::isubstr; -using Poco::translate; -using Poco::translateInPlace; -using Poco::replace; -using Poco::replaceInPlace; -using Poco::remove; -using Poco::removeInPlace; -using Poco::cat; -using Poco::strToInt; -using Poco::strToFloat; -using Poco::strToDouble; -using Poco::intToStr; -using Poco::uIntToStr; -using Poco::floatToStr; -using Poco::doubleToStr; -using Poco::thousandSeparator; -using Poco::decimalSeparator; -using Poco::format; -using Poco::CILess; -using Poco::MemoryInputStream; -using Poco::Stopwatch; -using Poco::RangeException; - - -StringTest::StringTest(const std::string& name): CppUnit::TestCase(name) -{ -} - - -StringTest::~StringTest() -{ -} - - -void StringTest::testTrimLeft() -{ - { - std::string s = "abc"; - assert (trimLeft(s) == "abc"); - } - std::string s = " abc "; - assert (trimLeft(s) == "abc "); - { - std::string s = " ab c "; - assert (trimLeft(s) == "ab c "); - } -} - - -void StringTest::testTrimLeftInPlace() -{ - { - std::string s = "abc"; - assert (trimLeftInPlace(s) == "abc"); - } - { - std::string s = " abc "; - assert (trimLeftInPlace(s) == "abc "); - } - { - std::string s = " ab c "; - assert (trimLeftInPlace(s) == "ab c "); - } -} - - -void StringTest::testTrimRight() -{ - { - std::string s = "abc"; - assert (trimRight(s) == "abc"); - } - { - std::string s = " abc "; - assert (trimRight(s) == " abc"); - } - { - std::string s = " ab c "; - assert (trimRight(s) == " ab c"); - } -} - - -void StringTest::testTrimRightInPlace() -{ - { - std::string s = "abc"; - assert (trimRightInPlace(s) == "abc"); - } - { - std::string s = " abc "; - assert (trimRightInPlace(s) == " abc"); - } - { - std::string s = " ab c "; - assert (trimRightInPlace(s) == " ab c"); - } -} - - -void StringTest::testTrim() -{ - { - std::string s = "abc"; - assert (trim(s) == "abc"); - } - { - std::string s = "abc "; - assert (trim(s) == "abc"); - } - { - std::string s = " ab c "; - assert (trim(s) == "ab c"); - } -} - - -void StringTest::testTrimInPlace() -{ - { - std::string s = "abc"; - assert (trimInPlace(s) == "abc"); - } - { - std::string s = " abc "; - assert (trimInPlace(s) == "abc"); - } - { - std::string s = " ab c "; - assert (trimInPlace(s) == "ab c"); - } -} - - -void StringTest::testToUpper() -{ - { - std::string s = "abc"; - assert (toUpper(s) == "ABC"); - } - { - std::string s = "Abc"; - assert (toUpper(s) == "ABC"); - } - { - std::string s = "abc"; - assert (toUpperInPlace(s) == "ABC"); - } - { - std::string s = "Abc"; - assert (toUpperInPlace(s) == "ABC"); - } -} - - -void StringTest::testToLower() -{ - { - std::string s = "ABC"; - assert (toLower(s) == "abc"); - } - { - std::string s = "aBC"; - assert (toLower(s) == "abc"); - } - { - std::string s = "ABC"; - assert (toLowerInPlace(s) == "abc"); - } - { - std::string s = "aBC"; - assert (toLowerInPlace(s) == "abc"); - } -} - - -void StringTest::testIstring() -{ - istring is1 = "AbC"; - istring is2 = "aBc"; - assert (is1 == is2); - - const char c1[] = { 'G', 0, (char) 0xFC, 'n', 't', 'e', 'r', '\0' }; - const char c2[] = { 'g', 0, (char) 0xDC, 'N', 'T', 'E', 'R', '\0' }; - is1 = c1; - is2 = c2; - assert (is1 == is2); - is1[0] = 'f'; - assert (is1 < is2); - is1[0] = 'F'; - assert (is1 < is2); - is1[0] = 'H'; - assert (is1 > is2); - is1[0] = 'h'; - assert (is1 > is2); - - is1 = "aAaBbBcCc"; - is2 = "bbb"; - assert (isubstr(is1, is2) == 3); - is2 = "bC"; - assert (isubstr(is1, is2) == 5); - is2 = "xxx"; - assert (isubstr(is1, is2) == istring::npos); -} - - -void StringTest::testIcompare() -{ - std::string s1 = "AAA"; - std::string s2 = "aaa"; - std::string s3 = "bbb"; - std::string s4 = "cCcCc"; - std::string s5; - assert (icompare(s1, s2) == 0); - assert (icompare(s1, s3) < 0); - assert (icompare(s1, s4) < 0); - assert (icompare(s3, s1) > 0); - assert (icompare(s4, s2) > 0); - assert (icompare(s2, s4) < 0); - assert (icompare(s1, s5) > 0); - assert (icompare(s5, s4) < 0); - - std::string ss1 = "xxAAAzz"; - std::string ss2 = "YaaaX"; - std::string ss3 = "YbbbX"; - assert (icompare(ss1, 2, 3, ss2, 1, 3) == 0); - assert (icompare(ss1, 2, 3, ss3, 1, 3) < 0); - assert (icompare(ss1, 2, 3, ss2, 1) == 0); - assert (icompare(ss1, 2, 3, ss3, 1) < 0); - assert (icompare(ss1, 2, 2, ss2, 1, 3) < 0); - assert (icompare(ss1, 2, 2, ss2, 1, 2) == 0); - assert (icompare(ss3, 1, 3, ss1, 2, 3) > 0); - - assert (icompare(s1, s2.c_str()) == 0); - assert (icompare(s1, s3.c_str()) < 0); - assert (icompare(s1, s4.c_str()) < 0); - assert (icompare(s3, s1.c_str()) > 0); - assert (icompare(s4, s2.c_str()) > 0); - assert (icompare(s2, s4.c_str()) < 0); - assert (icompare(s1, s5.c_str()) > 0); - assert (icompare(s5, s4.c_str()) < 0); - - assert (icompare(ss1, 2, 3, "aaa") == 0); - assert (icompare(ss1, 2, 2, "aaa") < 0); - assert (icompare(ss1, 2, 3, "AAA") == 0); - assert (icompare(ss1, 2, 2, "bb") < 0); - - assert (icompare(ss1, 2, "aaa") > 0); -} - - -void StringTest::testCILessThan() -{ - typedef std::map CIMapType; - CIMapType ciMap; - - ciMap["z"] = 1; - ciMap["b"] = 2; - ciMap["A"] = 3; - ciMap["Z"] = 4; - - assert (ciMap.size() == 3); - CIMapType::iterator it = ciMap.begin(); - assert (it->first == "A"); ++it; - assert (it->first == "b"); ++it; - assert (it->first == "z"); - assert (it->second == 4); - - typedef std::set CISetType; - - CISetType ciSet; - ciSet.insert("z"); - ciSet.insert("b"); - ciSet.insert("A"); - ciSet.insert("Z"); - - assert (ciSet.size() == 3); - CISetType::iterator sIt = ciSet.begin(); - assert (*sIt == "A"); ++sIt; - assert (*sIt == "b"); ++sIt; - assert (*sIt == "z"); -} - - -void StringTest::testTranslate() -{ - std::string s = "aabbccdd"; - assert (translate(s, "abc", "ABC") == "AABBCCdd"); - assert (translate(s, "abc", "AB") == "AABBdd"); - assert (translate(s, "abc", "") == "dd"); - assert (translate(s, "cba", "CB") == "BBCCdd"); - assert (translate(s, "", "CB") == "aabbccdd"); -} - - -void StringTest::testTranslateInPlace() -{ - std::string s = "aabbccdd"; - translateInPlace(s, "abc", "ABC"); - assert (s == "AABBCCdd"); -} - - -void StringTest::testReplace() -{ - std::string s("aabbccdd"); - - assert (replace(s, std::string("aa"), std::string("xx")) == "xxbbccdd"); - assert (replace(s, std::string("bb"), std::string("xx")) == "aaxxccdd"); - assert (replace(s, std::string("dd"), std::string("xx")) == "aabbccxx"); - assert (replace(s, std::string("bbcc"), std::string("xx")) == "aaxxdd"); - assert (replace(s, std::string("b"), std::string("xx")) == "aaxxxxccdd"); - assert (replace(s, std::string("bb"), std::string("")) == "aaccdd"); - assert (replace(s, std::string("b"), std::string("")) == "aaccdd"); - assert (replace(s, std::string("ee"), std::string("xx")) == "aabbccdd"); - assert (replace(s, std::string("dd"), std::string("")) == "aabbcc"); - - assert (replace(s, "aa", "xx") == "xxbbccdd"); - assert (replace(s, "bb", "xx") == "aaxxccdd"); - assert (replace(s, "dd", "xx") == "aabbccxx"); - assert (replace(s, "bbcc", "xx") == "aaxxdd"); - assert (replace(s, "bb", "") == "aaccdd"); - assert (replace(s, "b", "") == "aaccdd"); - assert (replace(s, "ee", "xx") == "aabbccdd"); - assert (replace(s, "dd", "") == "aabbcc"); - - s = "aabbaabb"; - assert (replace(s, std::string("aa"), std::string("")) == "bbbb"); - assert (replace(s, std::string("a"), std::string("")) == "bbbb"); - assert (replace(s, std::string("a"), std::string("x")) == "xxbbxxbb"); - assert (replace(s, std::string("a"), std::string("xx")) == "xxxxbbxxxxbb"); - assert (replace(s, std::string("aa"), std::string("xxx")) == "xxxbbxxxbb"); - - assert (replace(s, std::string("aa"), std::string("xx"), 2) == "aabbxxbb"); - - assert (replace(s, "aa", "") == "bbbb"); - assert (replace(s, "a", "") == "bbbb"); - assert (replace(s, "a", "x") == "xxbbxxbb"); - assert (replace(s, "a", "xx") == "xxxxbbxxxxbb"); - assert (replace(s, "aa", "xxx") == "xxxbbxxxbb"); - - assert (replace(s, "aa", "xx", 2) == "aabbxxbb"); - assert (replace(s, 'a', 'x', 2) == "aabbxxbb"); - assert (remove(s, 'a', 2) == "aabbbb"); - assert (remove(s, 'a') == "bbbb"); - assert (remove(s, 'b', 2) == "aaaa"); -} - - -void StringTest::testReplaceInPlace() -{ - std::string s("aabbccdd"); - - replaceInPlace(s, std::string("aa"), std::string("xx")); - assert (s == "xxbbccdd"); - - s = "aabbccdd"; - replaceInPlace(s, 'a', 'x'); - assert (s == "xxbbccdd"); - replaceInPlace(s, 'x'); - assert (s == "bbccdd"); - removeInPlace(s, 'b', 1); - assert (s == "bccdd"); - removeInPlace(s, 'd'); - assert (s == "bcc"); -} - - -void StringTest::testCat() -{ - std::string s1("one"); - std::string s2("two"); - std::string s3("three"); - std::string s4("four"); - std::string s5("five"); - std::string s6("six"); - - assert (cat(s1, s2) == "onetwo"); - assert (cat(s1, s2, s3) == "onetwothree"); - assert (cat(s1, s2, s3, s4) == "onetwothreefour"); - assert (cat(s1, s2, s3, s4, s5) == "onetwothreefourfive"); - assert (cat(s1, s2, s3, s4, s5, s6) == "onetwothreefourfivesix"); - - std::vector vec; - assert (cat(std::string(), vec.begin(), vec.end()) == ""); - assert (cat(std::string(","), vec.begin(), vec.end()) == ""); - vec.push_back(s1); - assert (cat(std::string(","), vec.begin(), vec.end()) == "one"); - vec.push_back(s2); - assert (cat(std::string(","), vec.begin(), vec.end()) == "one,two"); - vec.push_back(s3); - assert (cat(std::string(","), vec.begin(), vec.end()) == "one,two,three"); -} - - -void StringTest::testStringToInt() -{ -//gcc on Mac emits warnings that cannot be suppressed -#ifndef POCO_OS_FAMILY_BSD - stringToInt(); - stringToInt(); - stringToInt(); - stringToInt(); -#endif - stringToInt(); - stringToInt(); -#if defined(POCO_HAVE_INT64) - stringToInt(); - stringToInt(); -#endif -} - - -void StringTest::testStringToFloat() -{ - float result; - std::string sep(".,"); - - for (int i = 0; i < 2; ++i) - { - char ds = sep[i]; - for (int j = 0; j < 2; ++j) - { - char ts = sep[j]; - if (ts == ds) continue; - - assert(strToFloat("1", result, ds, ts)); - assertEqualDelta(1.0, result, 0.01); - assert(strToFloat(format("%c1", ds), result, ds, ts)); - assertEqualDelta(.1, result, 0.01); - assert(strToFloat(format("1%c", ds), result, ds, ts)); - assertEqualDelta(1., result, 0.01); - assert(strToFloat("0", result, ds, ts)); - assertEqualDelta(0.0, result, 0.01); - assert(strToFloat(format("0%c", ds), result, ds, ts)); - assertEqualDelta(0.0, result, 0.01); - assert(strToFloat(format("%c0", ds), result, ds, ts)); - assertEqualDelta(0.0, result, 0.01); - assert(strToFloat(format("0%c0", ds), result, ds, ts)); - assertEqualDelta(0.0, result, 0.01); - assert(strToFloat(format("0%c0", ds), result, ds, ts)); - assertEqualDelta(0., result, 0.01); - assert(strToFloat(format("0%c0", ds), result, ds, ts)); - assertEqualDelta(.0, result, 0.01); - assert(strToFloat(format("12%c34", ds), result, ds, ts)); - assertEqualDelta(12.34, result, 0.01); - assert(strToFloat(format("12%c34", ds), result, ds, ts)); - assertEqualDelta(12.34, result, 0.01); - assert(strToFloat(format("-12%c34", ds), result, ds, ts)); - assertEqualDelta(-12.34, result, 0.01); - assert(strToFloat(format("%c34", ds), result, ds, ts)); - assertEqualDelta(.34, result, 0.01); - assert(strToFloat(format("-%c34", ds), result, ds, ts)); - assertEqualDelta(-.34, result, 0.01); - assert(strToFloat(format("12%c", ds), result, ds, ts)); - assertEqualDelta(12., result, 0.01); - assert(strToFloat(format("-12%c", ds), result, ds, ts)); - assertEqualDelta(-12., result, 0.01); - assert(strToFloat("12", result, ds, ts)); - assertEqualDelta(12, result, 0.01); - assert(strToFloat("-12", result, ds, ts)); - assertEqualDelta(-12, result, 0.01); - assert(strToFloat(format("12%c34", ds), result, ds, ts)); - assertEqualDelta(12.34, result, 0.01); - - assert(strToFloat(format("1%c234%c34", ts, ds), result, ds, ts)); - assertEqualDelta(1234.34, result, 0.01); - assert(strToFloat(format("12%c345%c34", ts, ds), result, ds, ts)); - assertEqualDelta(12345.34, result, 0.01); - assert(strToFloat(format("123%c456%c34", ts, ds), result, ds, ts)); - assertEqualDelta(123456.34, result, 0.01); - assert(strToFloat(format("1%c234%c567%c34", ts, ts, ds), result, ds, ts)); - - if ((std::numeric_limits::max() / 10) < 1.23456e10) - fail ("test value larger than max value for this platform"); - else - { - float d = 12e34f; - assert(strToFloat(format("12e34", ds), result, ds, ts)); - assertEqualDelta(d, result, 0.01e34); - - d = 1.234e30f; - assert(strToFloat(format("1%c234e30", ds), result, ds, ts)); - assertEqualDelta(d, result, 0.01); - assert(strToFloat(format("1%c234E+30", ds), result, ds, ts)); - assertEqualDelta(d, result, 0.01); - } - - float d = 12.34e-10f; - assert(strToFloat(format("12%c34e-10", ds), result, ds, ts)); - assertEqualDelta(d, result, 0.01); - assert(strToFloat(format("-12%c34", ds), result, ds, ts)); - assertEqualDelta(-12.34, result, 0.01); - - assert(strToFloat(format(" 12%c34", ds), result, ds, ts)); - assertEqualDelta(12.34, result, 0.01); - assert(strToFloat(format("12%c34 ", ds), result, ds, ts)); - assertEqualDelta(12.34, result, 0.01); - assert(strToFloat(format(" 12%c34 ", ds), result, ds, ts)); - assertEqualDelta(12.34, result, 0.01); - } - } -} - - -void StringTest::testStringToDouble() -{ - double result; - std::string sep(".,"); - - for (int i = 0; i < 2; ++i) - { - char ds = sep[i]; - for (int j = 0; j < 2; ++j) - { - char ts = sep[j]; - if (ts == ds) continue; - - assert(strToDouble("1", result, ds, ts)); - assertEqualDelta(1.0, result, 0.01); - assert(strToDouble(format("%c1", ds), result, ds, ts)); - assertEqualDelta(.1, result, 0.01); - assert(strToDouble(format("1%c", ds), result, ds, ts)); - assertEqualDelta(1., result, 0.01); - assert(strToDouble("0", result, ds, ts)); - assertEqualDelta(0.0, result, 0.01); - assert(strToDouble(format("0%c", ds), result, ds, ts)); - assertEqualDelta(0.0, result, 0.01); - assert(strToDouble(format("%c0", ds), result, ds, ts)); - assertEqualDelta(0.0, result, 0.01); - assert(strToDouble(format("0%c0", ds), result, ds, ts)); - assertEqualDelta(0.0, result, 0.01); - assert(strToDouble(format("0%c0", ds), result, ds, ts)); - assertEqualDelta(0., result, 0.01); - assert(strToDouble(format("0%c0", ds), result, ds, ts)); - assertEqualDelta(.0, result, 0.01); - assert(strToDouble(format("12%c34", ds), result, ds, ts)); - assertEqualDelta(12.34, result, 0.01); - assert(strToDouble(format("12%c34", ds), result, ds, ts)); - assertEqualDelta(12.34, result, 0.01); - assert(strToDouble(format("-12%c34", ds), result, ds, ts)); - assertEqualDelta(-12.34, result, 0.01); - assert(strToDouble(format("%c34", ds), result, ds, ts)); - assertEqualDelta(.34, result, 0.01); - assert(strToDouble(format("-%c34", ds), result, ds, ts)); - assertEqualDelta(-.34, result, 0.01); - assert(strToDouble(format("12%c", ds), result, ds, ts)); - assertEqualDelta(12., result, 0.01); - assert(strToDouble(format("-12%c", ds), result, ds, ts)); - assertEqualDelta(-12., result, 0.01); - assert(strToDouble("12", result, ds, ts)); - assertEqualDelta(12, result, 0.01); - assert(strToDouble("-12", result, ds, ts)); - assertEqualDelta(-12, result, 0.01); - assert(strToDouble(format("12%c3456789012345678901234567890", ds), result, ds, ts)); - assertEqualDelta(12.34, result, 0.01); - - assert(strToDouble("1234345", result, ds, ts)); - assertEqualDelta(1234345, result, 0.00000001); - assert(strToDouble(format("1%c234%c345", ts, ts), result, ds, ts)); - assertEqualDelta(1234345, result, 0.00000001); - assert(strToDouble(format("1%c234%c3456789012345678901234567890", ts, ds), result, ds, ts)); - assertEqualDelta(1234.3456789, result, 0.00000001); - assert(strToDouble(format("12%c345%c3456789012345678901234567890", ts, ds), result, ds, ts)); - assertEqualDelta(12345.3456789, result, 0.00000001); - assert(strToDouble(format("123%c456%c3456789012345678901234567890", ts, ds), result, ds, ts)); - assertEqualDelta(123456.3456789, result, 0.00000001); - assert(strToDouble(format("1%c234%c567%c3456789012345678901234567890", ts, ts, ds), result, ds, ts)); - assertEqualDelta(1234567.3456789, result, 0.00000001); - assert(strToDouble(format("12%c345%c678%c3456789012345678901234567890", ts, ts, ds), result, ds, ts)); - assertEqualDelta(12345678.3456789, result, 0.00000001); - assert(strToDouble(format("123%c456%c789%c3456789012345678901234567890", ts, ts, ds), result, ds, ts)); - assertEqualDelta(123456789.3456789, result, 0.00000001); - - if ((std::numeric_limits::max() / 10) < 1.23456e10) - fail ("test value larger than max value for this platform"); - else - { - double d = 12e34; - assert(strToDouble(format("12e34", ds), result, ds, ts)); - assertEqualDelta(d, result, 0.01e34); - - d = 1.234e100; - assert(strToDouble(format("1%c234e100", ds), result, ds, ts)); - assertEqualDelta(d, result, 0.01); - assert(strToDouble(format("1%c234E+100", ds), result, ds, ts)); - assertEqualDelta(d, result, 0.01); - - d = 1.234e-100; - assert(strToDouble(format("1%c234E-100", ds), result, ds, ts)); - assertEqualDelta(d, result, 0.01); - - d = -1.234e100; - assert(strToDouble(format("-1%c234e+100", ds), result, ds, ts)); - assertEqualDelta(d, result, 0.01); - assert(strToDouble(format("-1%c234E100", ds), result, ds, ts)); - assertEqualDelta(d, result, 0.01); - - d = 1.234e-100; - assert(strToDouble(format(" 1%c234e-100 ", ds), result, ds, ts)); - assertEqualDelta(d, result, 0.01); - assert(strToDouble(format(" 1%c234e-100 ", ds), result, ds, ts)); - assertEqualDelta(d, result, 0.01); - assert(strToDouble(format(" 1%c234e-100 ", ds), result, ds, ts)); - assertEqualDelta(d, result, 0.01); - - d = 1234.234e-100; - assert(strToDouble(format(" 1%c234%c234e-100 ", ts, ds), result, ds, ts)); - assertEqualDelta(d, result, 0.01); - d = 12345.234e-100; - assert(strToDouble(format(" 12%c345%c234e-100 ", ts, ds), result, ds, ts)); - assertEqualDelta(d, result, 0.01); - d = 123456.234e-100; - assert(strToDouble(format(" 123%c456%c234e-100 ", ts, ds), result, ds, ts)); - assertEqualDelta(d, result, 0.01); - - d = -1234.234e-100; - assert(strToDouble(format(" -1%c234%c234e-100 ", ts, ds), result, ds, ts)); - assertEqualDelta(d, result, 0.01); - d = -12345.234e-100; - assert(strToDouble(format(" -12%c345%c234e-100 ", ts, ds), result, ds, ts)); - assertEqualDelta(d, result, 0.01); - d = -123456.234e-100; - char ou = 0; - assert(strToDouble(format(" -123%c456%c234e-100 ", ts, ds), result, ds, ts)); - assertEqualDelta(d, result, 0.01); - assert (ou == 0); - } - - double d = 12.34e-10; - assert(strToDouble(format("12%c34e-10", ds), result, ds, ts)); - assertEqualDelta(d, result, 0.01); - assert(strToDouble(format("-12%c34", ds), result, ds, ts)); - assertEqualDelta(-12.34, result, 0.01); - - assert(strToDouble(format(" 12%c34", ds), result, ds, ts)); - assertEqualDelta(12.34, result, 0.01); - assert(strToDouble(format("12%c34 ", ds), result, ds, ts)); - assertEqualDelta(12.34, result, 0.01); - assert(strToDouble(format(" 12%c34 ", ds), result, ds, ts)); - assertEqualDelta(12.34, result, 0.01); - } - } -} - - -void StringTest::testStringToFloatError() -{ - char ds = decimalSeparator(); - if (ds == 0) ds = '.'; - char ts = thousandSeparator(); - if (ts == 0) ts = ','; - assert (ds != ts); - - double result = 0.0; - assert (!strToDouble(format("a12%c3", ds), result)); - assert (!strToDouble(format("1b2%c3", ds), result)); - assert (!strToDouble(format("12c%c3", ds), result)); - assert (!strToDouble(format("12%cx3", ds), result)); - - assert(!strToDouble(format("123%c456%c234e1000000", ts, ds), result)); - assert(!strToDouble(format("123%c456%c234e+1000000", ts, ds), result)); - //assert(!strToDouble(0, result, ou)); // strToDouble is resilient to null pointers - assert(!strToDouble("", result)); -} - - -void StringTest::testNumericLocale() -{ -#if !defined(POCO_NO_LOCALE) && POCO_OS == POCO_OS_WINDOWS_NT - try - { - char buffer[POCO_MAX_FLT_STRING_LEN]; - - char dp = decimalSeparator(); - char ts = thousandSeparator(); - std::locale loc; - std::cout << "Original locale: '" << loc.name() << '\'' << std::endl; - std::cout << "Decimal point: '" << decimalSeparator() << '\'' << std::endl; - std::cout << "Thousand separator: '" << ts << '\'' << std::endl; - doubleToStr(buffer, POCO_MAX_FLT_STRING_LEN, 1.23); - assert (std::strncmp(buffer, "1.23", 4) == 0); - std::cout << "1.23 == '" << buffer << '\'' << std::endl; - - std::locale::global(std::locale("German")); - std::locale locGerman; - assert (',' == decimalSeparator()); - assert ('.' == thousandSeparator()); - std::cout << "New locale: '" << locGerman.name() << '\'' << std::endl; - std::cout << "Decimal point: '" << decimalSeparator() << '\'' << std::endl; - std::cout << "Thousand separator: '" << thousandSeparator() << '\'' << std::endl; - doubleToStr(buffer, POCO_MAX_FLT_STRING_LEN, 1.23); - assert (std::strncmp(buffer, "1.23", 4) == 0); - std::cout << "1.23 == '" << buffer << '\'' << std::endl; - - std::locale::global(std::locale("US")); - std::locale locUS; - assert ('.' == decimalSeparator()); - assert (',' == thousandSeparator()); - std::cout << "New locale: '" << locUS.name() << '\'' << std::endl; - std::cout << "Decimal point: '" << decimalSeparator() << '\'' << std::endl; - std::cout << "Thousand separator: '" << thousandSeparator() << '\'' << std::endl; - doubleToStr(buffer, POCO_MAX_FLT_STRING_LEN, 1.23); - assert (std::strncmp(buffer, "1.23", 4) == 0); - std::cout << "1.23 == '" << buffer << '\'' << std::endl; - - std::locale::global(loc); - dp = decimalSeparator(); - ts = thousandSeparator(); - std::cout << "Final locale: '" << loc.name() << '\'' << std::endl; - std::cout << "Decimal point: '" << decimalSeparator() << '\'' << std::endl; - std::cout << "Thousand separator: '" << thousandSeparator() << '\'' << std::endl; - doubleToStr(buffer, POCO_MAX_FLT_STRING_LEN, 1.23); - assert (std::strncmp(buffer, "1.23", 4) == 0); - std::cout << "1.23 == '" << buffer << '\'' << std::endl; - - assert (dp == decimalSeparator()); - assert (ts == thousandSeparator()); - } catch (std::runtime_error& ex) - { - std::cout << ex.what() << std::endl; - warnmsg ("Locale not found, skipping test"); - } -#endif -} - - -void StringTest::benchmarkStrToInt() -{ - Poco::Stopwatch sw; - std::string num = "123456789"; - int res; - sw.start(); - for (int i = 0; i < 1000000; ++i) parseStream(num, res); - sw.stop(); - std::cout << "parseStream Number: " << res << std::endl; - double timeStream = sw.elapsed() / 1000.0; - - char* pC = 0; - sw.restart(); - for (int i = 0; i < 1000000; ++i) res = std::strtol(num.c_str(), &pC, 10); - sw.stop(); - std::cout << "std::strtol Number: " << res << std::endl; - double timeStrtol = sw.elapsed() / 1000.0; - - sw.restart(); - for (int i = 0; i < 1000000; ++i) strToInt(num.c_str(), res, 10); - sw.stop(); - std::cout << "strToInt Number: " << res << std::endl; - double timeStrToInt = sw.elapsed() / 1000.0; - - sw.restart(); - for (int i = 0; i < 1000000; ++i) std::sscanf(num.c_str(), "%d", &res); - sw.stop(); - std::cout << "sscanf Number: " << res << std::endl; - double timeScanf = sw.elapsed() / 1000.0; - - int graph; - std::cout << std::endl << "Timing and speedup relative to I/O stream:" << std::endl << std::endl; - std::cout << std::setw(14) << "Stream:\t" << std::setw(10) << std::setfill(' ') << timeStream << "[ms]" << std::endl; - - std::cout << std::setw(14) << "std::strtol:\t" << std::setw(10) << std::setfill(' ') << timeStrtol << "[ms]" << - std::setw(10) << std::setfill(' ') << "Speedup: " << (timeStream / timeStrtol) << '\t' ; - graph = (int) (timeStream / timeStrtol); for (int i = 0; i < graph; ++i) std::cout << '|'; - - std::cout << std::endl << std::setw(14) << "strToInt:\t" << std::setw(10) << std::setfill(' ') << timeStrToInt << "[ms]" << - std::setw(10) << std::setfill(' ') << "Speedup: " << (timeStream / timeStrToInt) << '\t' ; - graph = (int) (timeStream / timeStrToInt); for (int i = 0; i < graph; ++i) std::cout << '|'; - - std::cout << std::endl << std::setw(14) << "std::sscanf:\t" << std::setw(10) << std::setfill(' ') << timeScanf << "[ms]" << - std::setw(10) << std::setfill(' ') << "Speedup: " << (timeStream / timeScanf) << '\t' ; - graph = (int) (timeStream / timeScanf); for (int i = 0; i < graph; ++i) std::cout << '|'; - std::cout << std::endl; -} - - -void StringTest::benchmarkStrToFloat() -{ - Poco::Stopwatch sw; - std::string num = "1.0372157551632929e-112"; - std::cout << "The Number: " << num << std::endl; - double res; - sw.start(); - for (int i = 0; i < 1000000; ++i) parseStream(num, res); - sw.stop(); - std::cout << "parseStream Number: " << std::setprecision(std::numeric_limits::digits10) << res << std::endl; - double timeStream = sw.elapsed() / 1000.0; - - // standard strtod - char* pC = 0; - sw.restart(); - for (int i = 0; i < 1000000; ++i) res = std::strtod(num.c_str(), &pC); - sw.stop(); - std::cout << "std::strtod Number: " << res << std::endl; - double timeStdStrtod = sw.elapsed() / 1000.0; - - // POCO Way - sw.restart(); - char ou = 0; - for (int i = 0; i < 1000000; ++i) strToDouble(num, res, ou); - sw.stop(); - std::cout << "strToDouble Number: " << res << std::endl; - double timeStrToDouble = sw.elapsed() / 1000.0; - - // standard sscanf - sw.restart(); - for (int i = 0; i < 1000000; ++i) std::sscanf(num.c_str(), "%lf", &res); - sw.stop(); - std::cout << "sscanf Number: " << res << std::endl; - double timeScanf = sw.elapsed() / 1000.0; - - // double-conversion Strtod - sw.restart(); - for (int i = 0; i < 1000000; ++i) strToDouble(num.c_str()); - sw.stop(); - std::cout << "Strtod Number: " << res << std::endl; - double timeStrtod = sw.elapsed() / 1000.0; - - int graph; - std::cout << std::endl << "Timing and speedup relative to I/O stream:" << std::endl << std::endl; - std::cout << std::setw(14) << "Stream:\t" << std::setw(10) << std::setfill(' ') << std::setprecision(4) << timeStream << "[ms]" << std::endl; - - std::cout << std::setw(14) << "std::strtod:\t" << std::setw(10) << std::setfill(' ') << timeStdStrtod << "[ms]" << - std::setw(10) << std::setfill(' ') << "Speedup: " << (timeStream / timeStdStrtod) << '\t' ; - graph = (int) (timeStream / timeStdStrtod); for (int i = 0; i < graph; ++i) std::cout << '#'; - - std::cout << std::endl << std::setw(14) << "strToDouble:\t" << std::setw(10) << std::setfill(' ') << timeStrToDouble << "[ms]" << - std::setw(10) << std::setfill(' ') << "Speedup: " << (timeStream / timeStrToDouble) << '\t' ; - graph = (int) (timeStream / timeStrToDouble); for (int i = 0; i < graph; ++i) std::cout << '#'; - - std::cout << std::endl << std::setw(14) << "std::sscanf:\t" << std::setw(10) << std::setfill(' ') << timeScanf << "[ms]" << - std::setw(10) << std::setfill(' ') << "Speedup: " << (timeStream / timeScanf) << '\t' ; - graph = (int) (timeStream / timeScanf); for (int i = 0; i < graph; ++i) std::cout << '#'; - - std::cout << std::endl << std::setw(14) << "StrtoD:\t" << std::setw(10) << std::setfill(' ') << timeScanf << "[ms]" << - std::setw(10) << std::setfill(' ') << "Speedup: " << (timeStream / timeStrtod) << '\t' ; - graph = (int) (timeStream / timeStrtod); for (int i = 0; i < graph; ++i) std::cout << '#'; - - std::cout << std::endl; -} - - -void StringTest::testIntToString() -{ - //intToStr(T number, unsigned short base, std::string& result, bool prefix = false, int width = -1, char fill = ' ', char thSep = 0) - - // decimal - std::string result; - assert (intToStr(0, 10, result)); - assert (result == "0"); - assert (intToStr(0, 10, result, false, 10, '0')); - assert (result == "0000000000"); - assert (intToStr(1234567890, 10, result)); - assert (result == "1234567890"); - assert (intToStr(-1234567890, 10, result)); - assert (result == "-1234567890"); - assert (intToStr(-1234567890, 10, result, false, 15, '0')); - assert (result == "-00001234567890"); - assert (intToStr(-1234567890, 10, result, false, 15)); - assert (result == " -1234567890"); - assert (intToStr(-1234567890, 10, result, false, 0, 0, ',')); - assert (result == "-1,234,567,890"); - - // binary - assert (intToStr(1234567890, 2, result)); - assert (result == "1001001100101100000001011010010"); - assert (intToStr(1234567890, 2, result, true)); - assert (result == "1001001100101100000001011010010"); - assert (intToStr(1234567890, 2, result, true, 35, '0')); - assert (result == "00001001001100101100000001011010010"); - assert (uIntToStr(0xFF, 2, result)); - assert (result == "11111111"); - assert (uIntToStr(0x0F, 2, result, false, 8, '0')); - assert (result == "00001111"); - assert (uIntToStr(0x0F, 2, result)); - assert (result == "1111"); - assert (uIntToStr(0xF0, 2, result)); - assert (result == "11110000"); - assert (uIntToStr(0xFFFF, 2, result)); - assert (result == "1111111111111111"); - assert (uIntToStr(0xFF00, 2, result)); - assert (result == "1111111100000000"); - assert (uIntToStr(0xFFFFFFFF, 2, result)); - assert (result == "11111111111111111111111111111111"); - assert (uIntToStr(0xFF00FF00, 2, result)); - assert (result == "11111111000000001111111100000000"); - assert (uIntToStr(0xF0F0F0F0, 2, result)); - assert (result == "11110000111100001111000011110000"); -#if defined(POCO_HAVE_INT64) - assert (uIntToStr(0xFFFFFFFFFFFFFFFF, 2, result)); - std::cout << 0xFFFFFFFFFFFFFFFF << std::endl; - assert (result == "1111111111111111111111111111111111111111111111111111111111111111"); - assert (uIntToStr(0xFF00000FF00000FF, 2, result)); - assert (result == "1111111100000000000000000000111111110000000000000000000011111111"); -#endif - - // octal - assert (uIntToStr(1234567890, 010, result)); - assert (result == "11145401322"); - assert (uIntToStr(1234567890, 010, result, true)); - assert (result == "011145401322"); - assert (uIntToStr(1234567890, 010, result, true, 15, '0')); - assert (result == "000011145401322"); - assert (uIntToStr(012345670, 010, result, true)); - assert (result == "012345670"); - assert (uIntToStr(012345670, 010, result)); - assert (result == "12345670"); - - // hexadecimal - assert (uIntToStr(0, 0x10, result, true)); - assert (result == "0x0"); - assert (uIntToStr(0, 0x10, result, true, 4, '0')); - assert (result == "0x00"); - assert (uIntToStr(0, 0x10, result, false, 4, '0')); - assert (result == "0000"); - assert (uIntToStr(1234567890, 0x10, result)); - assert (result == "499602D2"); - assert (uIntToStr(1234567890, 0x10, result, true)); - assert (result == "0x499602D2"); - assert (uIntToStr(1234567890, 0x10, result, true, 15, '0')); - assert (result == "0x00000499602D2"); - assert (uIntToStr(0x1234567890ABCDEF, 0x10, result, true)); - assert (result == "0x1234567890ABCDEF"); - assert (uIntToStr(0xDEADBEEF, 0x10, result)); - assert (result == "DEADBEEF"); -#if defined(POCO_HAVE_INT64) - assert (uIntToStr(0xFFFFFFFFFFFFFFFF, 0x10, result)); - assert (result == "FFFFFFFFFFFFFFFF"); - assert (uIntToStr(0xFFFFFFFFFFFFFFFF, 0x10, result, true)); - assert (result == "0xFFFFFFFFFFFFFFFF"); -#endif - - try - { - char pResult[POCO_MAX_INT_STRING_LEN]; - std::size_t sz = POCO_MAX_INT_STRING_LEN; - intToStr(0, 10, pResult, sz, false, (int) sz + 1, ' '); - fail ("must throw RangeException"); - } catch (RangeException&) { } -} - - -void StringTest::testFloatToString() -{ - double val = 1.03721575516329e-112; - std::string str; - - assert (doubleToStr(str, val, 14, 21) == "1.03721575516329e-112"); - assert (doubleToStr(str, val, 14, 22) == " 1.03721575516329e-112"); - val = -val; - assert (doubleToStr(str, val, 14, 22) == "-1.03721575516329e-112"); - assert (doubleToStr(str, val, 14, 23) == " -1.03721575516329e-112"); - - val = -10372157551632.9; - assert (doubleToStr(str, val, 1, 21, ',') == "-10,372,157,551,632.9"); - assert (doubleToStr(str, val, 1, 22, ',') == " -10,372,157,551,632.9"); - assert (doubleToStr(str, val, 2, 22, ',') == "-10,372,157,551,632.90"); - assert (doubleToStr(str, val, 2, 22, '.', ',') == "-10.372.157.551.632,90"); - assert (doubleToStr(str, val, 2, 22, ' ', ',') == "-10 372 157 551 632,90"); - - int ival = 1234567890; - assert(doubleToStr(str, ival, 1, 15, ',') == "1,234,567,890.0"); - ival = -123456789; - assert(doubleToStr(str, ival, 1, 14, ',') == "-123,456,789.0"); -} - - -void formatStream(double value, std::string& str) -{ - char buffer[128]; - Poco::MemoryOutputStream ostr(buffer, sizeof(buffer)); -#if !defined(POCO_NO_LOCALE) - ostr.imbue(std::locale::classic()); -#endif - ostr << std::setprecision(16) << value; - str.assign(buffer, static_cast(ostr.charsWritten())); -} - - -void formatSprintf(double value, std::string& str) -{ - char buffer[128]; - std::sprintf(buffer, "%.*g", 16, value); - str = buffer; -} - - -void StringTest::benchmarkFloatToStr() -{ - Poco::Stopwatch sw; - double val = 1.0372157551632929e-112; - std::cout << "The Number: " << std::setprecision(std::numeric_limits::digits10) << val << std::endl; - std::string str; - sw.start(); - for (int i = 0; i < 1000000; ++i) formatStream(val, str); - sw.stop(); - std::cout << "formatStream Number: " << str << std::endl; - double timeStream = sw.elapsed() / 1000.0; - - // standard sprintf - str = ""; - sw.restart(); - for (int i = 0; i < 1000000; ++i) formatSprintf(val, str); - sw.stop(); - std::cout << "std::sprintf Number: " << str << std::endl; - double timeSprintf = sw.elapsed() / 1000.0; - - // POCO Way (via double-conversion) - // no padding - sw.restart(); - char buffer[POCO_MAX_FLT_STRING_LEN]; - for (int i = 0; i < 1000000; ++i) doubleToStr(buffer, POCO_MAX_FLT_STRING_LEN, val); - sw.stop(); - std::cout << "doubleToStr(char) Number: " << buffer << std::endl; - double timeDoubleToStrChar = sw.elapsed() / 1000.0; - - // with padding - str = ""; - sw.restart(); - for (int i = 0; i < 1000000; ++i) doubleToStr(str, val); - sw.stop(); - std::cout << "doubleToStr(std::string) Number: " << str << std::endl; - double timeDoubleToStrString = sw.elapsed() / 1000.0; - - int graph; - std::cout << std::endl << "Timing and speedup relative to I/O stream:" << std::endl << std::endl; - std::cout << std::setw(14) << "Stream:\t" << std::setw(10) << std::setfill(' ') << std::setprecision(4) << timeStream << "[ms]" << std::endl; - - std::cout << std::setw(14) << "sprintf:\t" << std::setw(10) << std::setfill(' ') << timeSprintf << "[ms]" << - std::setw(10) << std::setfill(' ') << "Speedup: " << (timeStream / timeSprintf) << '\t' ; - graph = (int) (timeStream / timeSprintf); for (int i = 0; i < graph; ++i) std::cout << '#'; - - std::cout << std::endl << std::setw(14) << "doubleToChar:\t" << std::setw(10) << std::setfill(' ') << timeDoubleToStrChar << "[ms]" << - std::setw(10) << std::setfill(' ') << "Speedup: " << (timeStream / timeDoubleToStrChar) << '\t' ; - graph = (int) (timeStream / timeDoubleToStrChar); for (int i = 0; i < graph; ++i) std::cout << '#'; - - std::cout << std::endl << std::setw(14) << "doubleToString:\t" << std::setw(10) << std::setfill(' ') << timeDoubleToStrString << "[ms]" << - std::setw(10) << std::setfill(' ') << "Speedup: " << (timeStream / timeDoubleToStrString) << '\t' ; - graph = (int) (timeStream / timeDoubleToStrString); for (int i = 0; i < graph; ++i) std::cout << '#'; - - std::cout << std::endl; -} - - -void StringTest::setUp() -{ -} - - -void StringTest::tearDown() -{ -} - - -CppUnit::Test* StringTest::suite() -{ - CppUnit::TestSuite* pSuite = new CppUnit::TestSuite("StringTest"); - - CppUnit_addTest(pSuite, StringTest, testTrimLeft); - CppUnit_addTest(pSuite, StringTest, testTrimLeftInPlace); - CppUnit_addTest(pSuite, StringTest, testTrimRight); - CppUnit_addTest(pSuite, StringTest, testTrimInPlace); - CppUnit_addTest(pSuite, StringTest, testTrim); - CppUnit_addTest(pSuite, StringTest, testTrimRightInPlace); - CppUnit_addTest(pSuite, StringTest, testToUpper); - CppUnit_addTest(pSuite, StringTest, testToLower); - CppUnit_addTest(pSuite, StringTest, testIstring); - CppUnit_addTest(pSuite, StringTest, testIcompare); - CppUnit_addTest(pSuite, StringTest, testCILessThan); - CppUnit_addTest(pSuite, StringTest, testTranslate); - CppUnit_addTest(pSuite, StringTest, testTranslateInPlace); - CppUnit_addTest(pSuite, StringTest, testReplace); - CppUnit_addTest(pSuite, StringTest, testReplaceInPlace); - CppUnit_addTest(pSuite, StringTest, testCat); - CppUnit_addTest(pSuite, StringTest, testStringToInt); - CppUnit_addTest(pSuite, StringTest, testStringToFloat); - CppUnit_addTest(pSuite, StringTest, testStringToDouble); - CppUnit_addTest(pSuite, StringTest, testStringToFloatError); - CppUnit_addTest(pSuite, StringTest, testNumericLocale); - //CppUnit_addTest(pSuite, StringTest, benchmarkStrToFloat); - //CppUnit_addTest(pSuite, StringTest, benchmarkStrToInt); - CppUnit_addTest(pSuite, StringTest, testIntToString); - CppUnit_addTest(pSuite, StringTest, testFloatToString); - //CppUnit_addTest(pSuite, StringTest, benchmarkFloatToStr); - - return pSuite; -} diff --git a/contrib/libpoco/Foundation/testsuite/src/StringTest.h b/contrib/libpoco/Foundation/testsuite/src/StringTest.h deleted file mode 100644 index 58f4c959185..00000000000 --- a/contrib/libpoco/Foundation/testsuite/src/StringTest.h +++ /dev/null @@ -1,123 +0,0 @@ -// -// StringTest.h -// -// $Id: //poco/1.4/Foundation/testsuite/src/StringTest.h#1 $ -// -// Definition of the StringTest class. -// -// Copyright (c) 2004-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef StringTest_INCLUDED -#define StringTest_INCLUDED - - -#include "Poco/Foundation.h" -#include "CppUnit/TestCase.h" -#include "Poco/NumericString.h" -#include "Poco/MemoryStream.h" - - -class StringTest: public CppUnit::TestCase -{ -public: - StringTest(const std::string& name); - ~StringTest(); - - void testTrimLeft(); - void testTrimLeftInPlace(); - void testTrimRight(); - void testTrimRightInPlace(); - void testTrim(); - void testTrimInPlace(); - void testToUpper(); - void testToLower(); - void testIstring(); - void testIcompare(); - void testCILessThan(); - void testTranslate(); - void testTranslateInPlace(); - void testReplace(); - void testReplaceInPlace(); - void testCat(); - - void testStringToInt(); - void testStringToFloat(); - void testStringToDouble(); - void testStringToFloatError(); - void testNumericLocale(); - void benchmarkStrToFloat(); - void benchmarkStrToInt(); - - void testIntToString(); - void testFloatToString(); - void benchmarkFloatToStr(); - - void setUp(); - void tearDown(); - - static CppUnit::Test* suite(); - -private: - - template - void stringToInt() - { - T result = 0; - if (123 <= std::numeric_limits::max()) - assert(Poco::strToInt("123", result, 10)); assert(result == 123); - - assert(Poco::strToInt("0", result, 10)); assert(result == 0); - assert(Poco::strToInt("000", result, 10)); assert(result == 0); - - if (123 < std::numeric_limits::max()) - { assert(Poco::strToInt(" 123 ", result, 10)); assert(result == 123); } - if (123 < std::numeric_limits::max()) - { assert(Poco::strToInt(" 123", result, 10)); assert(result == 123); } - if (123 < std::numeric_limits::max()) - { assert(Poco::strToInt("123 ", result, 10)); assert(result == 123); } - if (std::numeric_limits::is_signed && (-123 > std::numeric_limits::min())) - { assert(Poco::strToInt("-123", result, 10)); assert(result == -123); } - if (0x123 < std::numeric_limits::max()) - { assert(Poco::strToInt("123", result, 0x10)); assert(result == 0x123); } - if (0x12ab < std::numeric_limits::max()) - { assert(Poco::strToInt("12AB", result, 0x10)); assert(result == 0x12ab); } - if (0x12ab < std::numeric_limits::max()) - { assert(Poco::strToInt("0X12AB", result, 0x10)); assert(result == 0x12ab); } - if (0x12ab < std::numeric_limits::max()) - { assert(Poco::strToInt("0x12AB", result, 0x10)); assert(result == 0x12ab); } - if (0x12ab < std::numeric_limits::max()) - { assert(Poco::strToInt("0x12aB", result, 0x10)); assert(result == 0x12ab); } - if (0x98fe < std::numeric_limits::max()) - { assert(Poco::strToInt("0X98Fe", result, 0x10)); assert(result == 0x98fe); } - if (123 < std::numeric_limits::max()) - { assert(Poco::strToInt("0x0", result, 0x10)); assert(result == 0); } - if (123 < std::numeric_limits::max()) - { assert(Poco::strToInt("00", result, 0x10)); assert(result == 0); } - if (0123 < std::numeric_limits::max()) - { assert(Poco::strToInt("123", result, 010)); assert(result == 0123); } - if (0123 < std::numeric_limits::max()) - { assert(Poco::strToInt("0123", result, 010)); assert(result == 0123); } - - assert(Poco::strToInt("0", result, 010)); assert(result == 0); - assert(Poco::strToInt("000", result, 010)); assert(result == 0); - } - - template - bool parseStream(const std::string& s, T& value) - { - Poco::MemoryInputStream istr(s.data(), s.size()); -#if !defined(POCO_NO_LOCALE) - istr.imbue(std::locale::classic()); -#endif - istr >> value; - return istr.eof() && !istr.fail(); - } -}; - - -#endif // StringTest_INCLUDED diff --git a/contrib/libpoco/Foundation/testsuite/src/StringTokenizerTest.cpp b/contrib/libpoco/Foundation/testsuite/src/StringTokenizerTest.cpp deleted file mode 100644 index 5a7bbabc658..00000000000 --- a/contrib/libpoco/Foundation/testsuite/src/StringTokenizerTest.cpp +++ /dev/null @@ -1,424 +0,0 @@ -// -// StringTokenizerTest.cpp -// -// $Id: //poco/svn/Foundation/testsuite/src/StringTokenizerTest.cpp#2 $ -// -// Copyright (c) 2004-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// -#include - -#include "StringTokenizerTest.h" -#include "CppUnit/TestCaller.h" -#include "CppUnit/TestSuite.h" -#include "Poco/StringTokenizer.h" -#include "Poco/Exception.h" - -GCC_DIAG_OFF(unused-variable) - -using Poco::StringTokenizer; -using Poco::RangeException; -using Poco::NotFoundException; - - -StringTokenizerTest::StringTokenizerTest(const std::string& name): CppUnit::TestCase(name) -{ -} - - -StringTokenizerTest::~StringTokenizerTest() -{ -} - - -void StringTokenizerTest::testStringTokenizer() -{ - { - StringTokenizer st("", ""); - assert (st.begin() == st.end()); - } - { - StringTokenizer st("", "", StringTokenizer::TOK_IGNORE_EMPTY); - assert (st.begin() == st.end()); - } - { - StringTokenizer st("", "", StringTokenizer::TOK_TRIM); - assert (st.begin() == st.end()); - } - { - StringTokenizer st("", "", StringTokenizer::TOK_TRIM | StringTokenizer::TOK_IGNORE_EMPTY); - assert (st.begin() == st.end()); - } - { - StringTokenizer st("abc", ""); - StringTokenizer::Iterator it = st.begin(); - assert (st.find("abc") == 0); - assert (it != st.end()); - assert (*it++ == "abc"); - assert (it == st.end()); - } - { - StringTokenizer st("abc ", "", StringTokenizer::TOK_TRIM); - StringTokenizer::Iterator it = st.begin(); - assert (st.find("abc") == 0); - assert (it != st.end()); - assert (*it++ == "abc"); - assert (it == st.end()); - } - { - StringTokenizer st(" abc ", "", StringTokenizer::TOK_TRIM); - StringTokenizer::Iterator it = st.begin(); - assert (st.find("abc") == 0); - assert (it != st.end()); - assert (*it++ == "abc"); - assert (it == st.end()); - } - { - StringTokenizer st(" abc", "", StringTokenizer::TOK_TRIM); - StringTokenizer::Iterator it = st.begin(); - assert (st.find("abc") == 0); - assert (it != st.end()); - assert (*it++ == "abc"); - assert (it == st.end()); - } - { - StringTokenizer st("abc", "b"); - StringTokenizer::Iterator it = st.begin(); - assert (st.find("a") == 0); - assert (st.find("c") == 1); - assert (it != st.end()); - assert (*it++ == "a"); - assert (it != st.end()); - assert (*it++ == "c"); - assert (it == st.end()); - } - { - StringTokenizer st("abc", "b", StringTokenizer::TOK_TRIM | StringTokenizer::TOK_IGNORE_EMPTY); - StringTokenizer::Iterator it = st.begin(); - assert (st.find("a") == 0); - assert (st.find("c") == 1); - assert (it != st.end()); - assert (*it++ == "a"); - assert (it != st.end()); - assert (*it++ == "c"); - assert (it == st.end()); - } - { - StringTokenizer st("abc", "bc"); - StringTokenizer::Iterator it = st.begin(); - assert (st.find("a") == 0); - assert (st.find("") == 1); - assert (it != st.end()); - assert (*it++ == "a"); - assert (it != st.end()); - assert (*it++ == ""); - assert (it != st.end()); - assert (*it++ == ""); - assert (it == st.end()); - } - { - StringTokenizer st("abc", "bc", StringTokenizer::TOK_TRIM); - StringTokenizer::Iterator it = st.begin(); - assert (st.find("a") == 0); - assert (st.find("") == 1); - assert (it != st.end()); - assert (*it++ == "a"); - assert (it != st.end()); - assert (*it++ == ""); - assert (it != st.end()); - assert (*it++ == ""); - assert (it == st.end()); - } - { - StringTokenizer st("abc", "bc", StringTokenizer::TOK_IGNORE_EMPTY); - StringTokenizer::Iterator it = st.begin(); - assert (st.find("a") == 0); - assert (it != st.end()); - assert (*it++ == "a"); - assert (it == st.end()); - } - { - StringTokenizer st("abc", "bc", StringTokenizer::TOK_TRIM | StringTokenizer::TOK_IGNORE_EMPTY); - StringTokenizer::Iterator it = st.begin(); - assert (st.find("a") == 0); - assert (it != st.end()); - assert (*it++ == "a"); - assert (it == st.end()); - } - { - StringTokenizer st("abc", "bc", StringTokenizer::TOK_TRIM | StringTokenizer::TOK_IGNORE_EMPTY); - StringTokenizer::Iterator it = st.begin(); - assert (st.find("a") == 0); - assert (it != st.end()); - assert (*it++ == "a"); - assert (it == st.end()); - } - { - StringTokenizer st("a a,c c", ","); - StringTokenizer::Iterator it = st.begin(); - assert (st.find("a a") == 0); - assert (st.find("c c") == 1); - assert (it != st.end()); - assert (*it++ == "a a"); - assert (it != st.end()); - assert (*it++ == "c c"); - assert (it == st.end()); - } - { - StringTokenizer st("a a,c c", ",", StringTokenizer::TOK_TRIM | StringTokenizer::TOK_IGNORE_EMPTY); - StringTokenizer::Iterator it = st.begin(); - assert (st.find("a a") == 0); - assert (st.find("c c") == 1); - assert (it != st.end()); - assert (*it++ == "a a"); - assert (it != st.end()); - assert (*it++ == "c c"); - assert (it == st.end()); - } - { - StringTokenizer st(" a a , , c c ", ","); - StringTokenizer::Iterator it = st.begin(); - assert (st.find(" a a ") == 0); - assert (st.find(" ") == 1); - assert (st.find(" c c ") == 2); - assert (it != st.end()); - assert (*it++ == " a a "); - assert (it != st.end()); - assert (*it++ == " "); - assert (it != st.end()); - assert (*it++ == " c c "); - assert (it == st.end()); - } - { - StringTokenizer st(" a a , , c c ", ",", StringTokenizer::TOK_TRIM); - StringTokenizer::Iterator it = st.begin(); - assert (st.find("a a") == 0); - assert (st.find("") == 1); - assert (st.find("c c") == 2); - assert (it != st.end()); - assert (*it++ == "a a"); - assert (it != st.end()); - assert (*it++ == ""); - assert (it != st.end()); - assert (*it++ == "c c"); - assert (it == st.end()); - } - { - StringTokenizer st(" a a , , c c ", ",", StringTokenizer::TOK_TRIM | StringTokenizer::TOK_IGNORE_EMPTY); - StringTokenizer::Iterator it = st.begin(); - assert (st.find("a a") == 0); - assert (st.find("c c") == 1); - assert (it != st.end()); - assert (*it++ == "a a"); - assert (it != st.end()); - assert (*it++ == "c c"); - assert (it == st.end()); - } - { - StringTokenizer st("abc,def,,ghi , jk, l ", ",", StringTokenizer::TOK_TRIM | StringTokenizer::TOK_IGNORE_EMPTY); - StringTokenizer::Iterator it = st.begin(); - assert (st.find("abc") == 0); - assert (st.find("def") == 1); - assert (st.find("ghi") == 2); - assert (st.find("jk") == 3); - assert (st.find("l") == 4); - assert (it != st.end()); - assert (*it++ == "abc"); - assert (it != st.end()); - assert (*it++ == "def"); - assert (it != st.end()); - assert (*it++ == "ghi"); - assert (it != st.end()); - assert (*it++ == "jk"); - assert (it != st.end()); - assert (*it++ == "l"); - assert (it == st.end()); - } - { - StringTokenizer st("abc,def,,ghi // jk, l ", ",/", StringTokenizer::TOK_TRIM | StringTokenizer::TOK_IGNORE_EMPTY); - StringTokenizer::Iterator it = st.begin(); - assert (st.find("abc") == 0); - assert (st.find("def") == 1); - assert (st.find("ghi") == 2); - assert (st.find("jk") == 3); - assert (st.find("l") == 4); - assert (it != st.end()); - assert (*it++ == "abc"); - assert (it != st.end()); - assert (*it++ == "def"); - assert (it != st.end()); - assert (*it++ == "ghi"); - assert (it != st.end()); - assert (*it++ == "jk"); - assert (it != st.end()); - assert (*it++ == "l"); - assert (it == st.end()); - } - { - StringTokenizer st("a/bc,def,,ghi // jk, l ", ",/", StringTokenizer::TOK_TRIM | StringTokenizer::TOK_IGNORE_EMPTY); - StringTokenizer::Iterator it = st.begin(); - assert (st.find("a") == 0); - assert (st.find("bc") == 1); - assert (st.find("def") == 2); - assert (st.find("ghi") == 3); - assert (st.find("jk") == 4); - assert (st.find("l") == 5); - assert (it != st.end()); - assert (*it++ == "a"); - assert (it != st.end()); - assert (*it++ == "bc"); - assert (it != st.end()); - assert (*it++ == "def"); - assert (it != st.end()); - assert (*it++ == "ghi"); - assert (it != st.end()); - assert (*it++ == "jk"); - assert (it != st.end()); - assert (*it++ == "l"); - assert (it == st.end()); - } - { - StringTokenizer st(",ab,cd,", ","); - StringTokenizer::Iterator it = st.begin(); - assert (st.find("") == 0); - assert (st.find("ab") == 1); - assert (st.find("cd") == 2); - assert (it != st.end()); - assert (*it++ == ""); - assert (it != st.end()); - assert (*it++ == "ab"); - assert (it != st.end()); - assert (*it++ == "cd"); - assert (it != st.end()); - assert (*it++ == ""); - assert (it == st.end()); - } - { - StringTokenizer st(",ab,cd,", ",", StringTokenizer::TOK_IGNORE_EMPTY); - StringTokenizer::Iterator it = st.begin(); - assert (st.find("ab") == 0); - assert (st.find("cd") == 1); - assert (it != st.end()); - assert (*it++ == "ab"); - assert (it != st.end()); - assert (*it++ == "cd"); - assert (it == st.end()); - } - { - StringTokenizer st(" , ab , cd , ", ",", StringTokenizer::TOK_TRIM | StringTokenizer::TOK_IGNORE_EMPTY); - StringTokenizer::Iterator it = st.begin(); - assert (st.find("ab") == 0); - assert (st.find("cd") == 1); - assert (it != st.end()); - assert (*it++ == "ab"); - assert (it != st.end()); - assert (*it++ == "cd"); - assert (it == st.end()); - } - { - StringTokenizer st("1 : 2 , : 3 ", ":,", StringTokenizer::TOK_TRIM | StringTokenizer::TOK_IGNORE_EMPTY); - assert (st.count() == 3); - assert (st[0] == "1"); - assert (st[1] == "2"); - assert (st[2] == "3"); - assert (st.find("1") == 0); - assert (st.find("2") == 1); - assert (st.find("3") == 2); - } -} - - -void StringTokenizerTest::testFind() -{ - StringTokenizer st("0,1,2,3,3,2,1,0", ",", StringTokenizer::TOK_TRIM | StringTokenizer::TOK_IGNORE_EMPTY); - - assert (st.count() == 8); - assert (2 == st.count("0")); - assert (2 == st.count("1")); - assert (2 == st.count("2")); - assert (2 == st.count("3")); - assert (0 == st.count("4")); - assert (0 == st.count("5")); - assert (0 == st.count("6")); - assert (0 == st.count("7")); - - assert (st[0] == "0"); - assert (st[1] == "1"); - assert (st[2] == "2"); - assert (st[3] == "3"); - assert (st[4] == "3"); - assert (st[5] == "2"); - assert (st[6] == "1"); - assert (st[7] == "0"); - - assert (st.has("0")); - assert (st.has("1")); - assert (st.has("2")); - assert (st.has("3")); - assert (!st.has("4")); - assert (!st.has("5")); - assert (!st.has("6")); - assert (!st.has("7")); - - assert (st.find("0") == 0); - assert (st.find("1") == 1); - assert (st.find("2") == 2); - assert (st.find("3") == 3); - - assert (st.find("0", 1) == 7); - assert (st.find("1", 2) == 6); - assert (st.find("2", 3) == 5); - assert (st.find("3", 4) == 4); - - try - { - std::size_t p = st.find("4"); - fail ("must fail"); - } - catch (NotFoundException&) { } - - try - { - std::string s = st[8]; - fail ("must fail"); - } - catch (RangeException&) { } - - st[0] = "1"; - st[7] = "1"; - assert (st[0] == "1"); - assert (st[7] == "1"); - assert (0 == st.count("0")); - assert (4 == st.count("1")); - - st.replace("2", "5"); - assert (0 == st.count("2")); - assert (2 == st.count("5")); - - st.replace("3", "6", 4); - assert (1 == st.count("3")); - assert (1 == st.count("6")); -} - - -void StringTokenizerTest::setUp() -{ -} - - -void StringTokenizerTest::tearDown() -{ -} - - -CppUnit::Test* StringTokenizerTest::suite() -{ - CppUnit::TestSuite* pSuite = new CppUnit::TestSuite("StringTokenizerTest"); - - CppUnit_addTest(pSuite, StringTokenizerTest, testStringTokenizer); - CppUnit_addTest(pSuite, StringTokenizerTest, testFind); - - return pSuite; -} diff --git a/contrib/libpoco/Foundation/testsuite/src/StringTokenizerTest.h b/contrib/libpoco/Foundation/testsuite/src/StringTokenizerTest.h deleted file mode 100644 index 5b552836846..00000000000 --- a/contrib/libpoco/Foundation/testsuite/src/StringTokenizerTest.h +++ /dev/null @@ -1,37 +0,0 @@ -// -// StringTokenizerTest.h -// -// $Id: //poco/svn/Foundation/testsuite/src/StringTokenizerTest.h#2 $ -// -// Definition of the StringTokenizerTest class. -// -// Copyright (c) 2004-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - -#ifndef StringTokenizerTest_INCLUDED -#define StringTokenizerTest_INCLUDED - -#include "Poco/Foundation.h" -#include "CppUnit/TestCase.h" - -class StringTokenizerTest: public CppUnit::TestCase -{ -public: - StringTokenizerTest(const std::string& name); - ~StringTokenizerTest(); - - void testStringTokenizer(); - void testFind(); - - void setUp(); - void tearDown(); - - static CppUnit::Test* suite(); - -private: -}; - -#endif // StringTokenizerTest_INCLUDED diff --git a/contrib/libpoco/Foundation/testsuite/src/TaskManagerTest.cpp b/contrib/libpoco/Foundation/testsuite/src/TaskManagerTest.cpp deleted file mode 100644 index 6deb5c50be1..00000000000 --- a/contrib/libpoco/Foundation/testsuite/src/TaskManagerTest.cpp +++ /dev/null @@ -1,502 +0,0 @@ -// -// TaskManagerTest.cpp -// -// $Id: //poco/1.4/Foundation/testsuite/src/TaskManagerTest.cpp#1 $ -// -// Copyright (c) 2004-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "TaskManagerTest.h" -#include "CppUnit/TestCaller.h" -#include "CppUnit/TestSuite.h" -#include "Poco/Exception.h" -#include "Poco/TaskManager.h" -#include "Poco/Task.h" -#include "Poco/TaskNotification.h" -#include "Poco/NotificationCenter.h" -#include "Poco/Thread.h" -#include "Poco/ThreadPool.h" -#include "Poco/Event.h" -#include "Poco/Observer.h" -#include "Poco/Exception.h" -#include "Poco/AutoPtr.h" - - -using Poco::TaskManager; -using Poco::Task; -using Poco::NotificationCenter; -using Poco::TaskStartedNotification; -using Poco::TaskCancelledNotification; -using Poco::TaskFinishedNotification; -using Poco::TaskFailedNotification; -using Poco::TaskProgressNotification; -using Poco::TaskCustomNotification; -using Poco::Thread; -using Poco::ThreadPool; -using Poco::Event; -using Poco::Observer; -using Poco::Exception; -using Poco::NoThreadAvailableException; -using Poco::SystemException; -using Poco::NullPointerException; -using Poco::AutoPtr; - - -namespace -{ - class TestTask: public Task - { - public: - TestTask(): - Task("TestTask"), - _fail(false) - { - } - - void runTask() - { - _event.wait(); - setProgress(0.5); - _event.wait(); - if (isCancelled()) - return; - if (_fail) - throw SystemException("warp core breach detected"); - setProgress(1.0); - _event.wait(); - } - - void fail() - { - _fail = true; - } - - void cont() - { - _event.set(); - } - - private: - Event _event; - bool _fail; - }; - - class SimpleTask: public Task - { - public: - SimpleTask(): Task("SimpleTask") - { - } - - void runTask() - { - sleep(10000); - } - }; - - class TaskObserver - { - public: - TaskObserver(): - _started(false), - _cancelled(false), - _finished(false), - _pException(0), - _progress(0.0) - { - } - - ~TaskObserver() - { - delete _pException; - } - - void taskStarted(TaskStartedNotification* pNf) - { - _started = true; - pNf->release(); - } - - void taskCancelled(TaskCancelledNotification* pNf) - { - _cancelled = true; - pNf->release(); - } - - void taskFinished(TaskFinishedNotification* pNf) - { - _finished = true; - pNf->release(); - } - - void taskFailed(TaskFailedNotification* pNf) - { - _pException = pNf->reason().clone(); - pNf->release(); - } - - void taskProgress(TaskProgressNotification* pNf) - { - _progress = pNf->progress(); - pNf->release(); - } - - bool started() const - { - return _started; - } - - bool cancelled() const - { - return _cancelled; - } - - bool finished() const - { - return _finished; - } - - float progress() const - { - return _progress; - } - - Exception* error() const - { - return _pException; - } - - private: - bool _started; - bool _cancelled; - bool _finished; - Exception* _pException; - float _progress; - }; - - - template - class CustomNotificationTask: public Task - { - public: - CustomNotificationTask(const T& t): - Task("CustomNotificationTask"), - _custom(t) - { - } - - void runTask() - { - sleep(10000); - } - - void setCustom(const T& custom) - { - _custom = custom; - postNotification(new TaskCustomNotification(this, _custom)); - } - - private: - T _custom; - }; - - - template - class CustomTaskObserver - { - public: - CustomTaskObserver(const C& custom): _custom(custom) - { - } - - ~CustomTaskObserver() - { - } - - void taskCustom(TaskCustomNotification* pNf) - { - _custom = pNf->custom(); - pNf->release(); - } - - const C& custom() const - { - return _custom; - } - - private: - C _custom; - }; -} - - -TaskManagerTest::TaskManagerTest(const std::string& name): CppUnit::TestCase(name) -{ -} - - -TaskManagerTest::~TaskManagerTest() -{ -} - - -void TaskManagerTest::testFinish() -{ - TaskManager tm; - TaskObserver to; - tm.addObserver(Observer(to, &TaskObserver::taskStarted)); - tm.addObserver(Observer(to, &TaskObserver::taskCancelled)); - tm.addObserver(Observer(to, &TaskObserver::taskFailed)); - tm.addObserver(Observer(to, &TaskObserver::taskFinished)); - tm.addObserver(Observer(to, &TaskObserver::taskProgress)); - AutoPtr pTT = new TestTask; - tm.start(pTT.duplicate()); - assert (pTT->progress() == 0); - Thread::sleep(200); - pTT->cont(); - while (pTT->progress() != 0.5) Thread::sleep(50); - assert (to.progress() == 0.5); - assert (to.started()); - assert (pTT->state() == Task::TASK_RUNNING); - TaskManager::TaskList list = tm.taskList(); - assert (list.size() == 1); - assert (tm.count() == 1); - pTT->cont(); - while (pTT->progress() != 1.0) Thread::sleep(50); - pTT->cont(); - while (pTT->state() != Task::TASK_FINISHED) Thread::sleep(50); - assert (pTT->state() == Task::TASK_FINISHED); - while (!to.finished()) Thread::sleep(50); - assert (to.finished()); - while (tm.count() == 1) Thread::sleep(50); - list = tm.taskList(); - assert (list.empty()); - assert (!to.error()); -} - - -void TaskManagerTest::testCancel() -{ - TaskManager tm; - TaskObserver to; - tm.addObserver(Observer(to, &TaskObserver::taskStarted)); - tm.addObserver(Observer(to, &TaskObserver::taskCancelled)); - tm.addObserver(Observer(to, &TaskObserver::taskFailed)); - tm.addObserver(Observer(to, &TaskObserver::taskFinished)); - tm.addObserver(Observer(to, &TaskObserver::taskProgress)); - AutoPtr pTT = new TestTask; - tm.start(pTT.duplicate()); - assert (pTT->progress() == 0); - Thread::sleep(200); - pTT->cont(); - while (pTT->progress() != 0.5) Thread::sleep(50); - assert (to.progress() == 0.5); - assert (to.started()); - assert (pTT->state() == Task::TASK_RUNNING); - TaskManager::TaskList list = tm.taskList(); - assert (list.size() == 1); - assert (tm.count() == 1); - tm.cancelAll(); - assert (to.cancelled()); - pTT->cont(); - while (pTT->state() != Task::TASK_FINISHED) Thread::sleep(50); - assert (pTT->state() == Task::TASK_FINISHED); - assert (to.finished()); - while (tm.count() == 1) Thread::sleep(50); - list = tm.taskList(); - assert (list.empty()); - assert (!to.error()); -} - - -void TaskManagerTest::testError() -{ - TaskManager tm; - TaskObserver to; - tm.addObserver(Observer(to, &TaskObserver::taskStarted)); - tm.addObserver(Observer(to, &TaskObserver::taskCancelled)); - tm.addObserver(Observer(to, &TaskObserver::taskFailed)); - tm.addObserver(Observer(to, &TaskObserver::taskFinished)); - tm.addObserver(Observer(to, &TaskObserver::taskProgress)); - AutoPtr pTT = new TestTask; - tm.start(pTT.duplicate()); - assert (pTT->progress() == 0); - Thread::sleep(200); - pTT->cont(); - while (pTT->progress() != 0.5) Thread::sleep(50); - assert (to.progress() == 0.5); - assert (to.started()); - assert (pTT->state() == Task::TASK_RUNNING); - TaskManager::TaskList list = tm.taskList(); - assert (list.size() == 1); - assert (tm.count() == 1); - pTT->fail(); - pTT->cont(); - while (pTT->state() != Task::TASK_FINISHED) Thread::sleep(50); - assert (pTT->state() == Task::TASK_FINISHED); - assert (to.finished()); - assert (to.error() != 0); - while (tm.count() == 1) Thread::sleep(50); - list = tm.taskList(); - assert (list.empty()); -} - - -void TaskManagerTest::testCustom() -{ - TaskManager tm; - - CustomTaskObserver ti(0); - tm.addObserver( - Observer, TaskCustomNotification > - (ti, &CustomTaskObserver::taskCustom)); - - AutoPtr > pCNT1 = new CustomNotificationTask(0); - tm.start(pCNT1.duplicate()); - assert (ti.custom() == 0); - - for (int i = 1; i < 10; ++i) - { - pCNT1->setCustom(i); - assert (ti.custom() == i); - } - - CustomTaskObserver ts(""); - tm.addObserver( - Observer, TaskCustomNotification > - (ts, &CustomTaskObserver::taskCustom)); - - AutoPtr > pCNT2 = new CustomNotificationTask(""); - tm.start(pCNT2.duplicate()); - assert (tm.taskList().size() == 2); - assert (ts.custom() == ""); - std::string str("notify me"); - pCNT2->setCustom(str); - assert (ts.custom() == str); - - S s; - s.i = 0; - s.str = ""; - - CustomTaskObserver ptst(&s); - - tm.addObserver( - Observer, TaskCustomNotification > - (ptst, &CustomTaskObserver::taskCustom)); - - AutoPtr > pCNT3 = new CustomNotificationTask(&s); - tm.start(pCNT3.duplicate()); - assert (tm.taskList().size() == 3); - assert (ptst.custom()->i == 0); - assert (ptst.custom()->str == ""); - s.i = 123; - s.str = "123"; - pCNT3->setCustom(&s); - assert (ptst.custom()->i == 123); - assert (ptst.custom()->str == "123"); - - s.i = 0; - s.str = ""; - - CustomTaskObserver tst(s); - - tm.addObserver( - Observer, TaskCustomNotification > - (tst, &CustomTaskObserver::taskCustom)); - - AutoPtr > pCNT4 = new CustomNotificationTask(s); - tm.start(pCNT4.duplicate()); - assert (tm.taskList().size() == 4); - assert (tst.custom().i == 0); - assert (tst.custom().str == ""); - s.i = 123; - s.str = "123"; - pCNT4->setCustom(s); - assert (tst.custom().i == 123); - assert (tst.custom().str == "123"); - - AutoPtr pST = new SimpleTask; - tm.start(pST.duplicate()); - assert (tm.taskList().size() == 5); - - tm.cancelAll(); - while (tm.count() > 0) Thread::sleep(50); - assert (tm.count() == 0); -} - - -void TaskManagerTest::testMultiTasks() -{ - TaskManager tm; - tm.start(new SimpleTask); - tm.start(new SimpleTask); - tm.start(new SimpleTask); - - TaskManager::TaskList list = tm.taskList(); - assert (list.size() == 3); - - tm.cancelAll(); - while (tm.count() > 0) Thread::sleep(100); - assert (tm.count() == 0); -} - - -void TaskManagerTest::testCustomThreadPool() -{ - ThreadPool tp(2, 5, 120); - TaskManager tm(tp); - - // fill up the thread pool - for (int i=0; i < tp.capacity(); ++i) - { - tm.start(new SimpleTask); - } - assert (tp.allocated() == tp.capacity()); - assert (tm.count() == tp.allocated()); - - // the next one should fail - try - { - tm.start(new SimpleTask); - failmsg("thread pool exhausted - must throw exception"); - } - catch (NoThreadAvailableException const&) - { - } - catch (...) - { - failmsg("wrong exception thrown"); - } - - assert (tm.count() == tp.allocated()); - - tp.joinAll(); -} - -void TaskManagerTest::setUp() -{ -} - - -void TaskManagerTest::tearDown() -{ -} - - -CppUnit::Test* TaskManagerTest::suite() -{ - CppUnit::TestSuite* pSuite = new CppUnit::TestSuite("TaskManagerTest"); - - CppUnit_addTest(pSuite, TaskManagerTest, testFinish); - CppUnit_addTest(pSuite, TaskManagerTest, testCancel); - CppUnit_addTest(pSuite, TaskManagerTest, testError); - CppUnit_addTest(pSuite, TaskManagerTest, testMultiTasks); - CppUnit_addTest(pSuite, TaskManagerTest, testCustom); - CppUnit_addTest(pSuite, TaskManagerTest, testCustomThreadPool); - - return pSuite; -} diff --git a/contrib/libpoco/Foundation/testsuite/src/TaskManagerTest.h b/contrib/libpoco/Foundation/testsuite/src/TaskManagerTest.h deleted file mode 100644 index 3cb9467feb5..00000000000 --- a/contrib/libpoco/Foundation/testsuite/src/TaskManagerTest.h +++ /dev/null @@ -1,51 +0,0 @@ -// -// TaskManagerTest.h -// -// $Id: //poco/1.4/Foundation/testsuite/src/TaskManagerTest.h#1 $ -// -// Definition of the TaskManagerTest class. -// -// Copyright (c) 2004-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef TaskManagerTest_INCLUDED -#define TaskManagerTest_INCLUDED - - -#include "Poco/Foundation.h" -#include "CppUnit/TestCase.h" - - -class TaskManagerTest: public CppUnit::TestCase -{ -public: - struct S - { - int i; - std::string str; - }; - - TaskManagerTest(const std::string& name); - ~TaskManagerTest(); - - void testFinish(); - void testCancel(); - void testError(); - void testCustom(); - void testMultiTasks(); - void testCustomThreadPool(); - - void setUp(); - void tearDown(); - - static CppUnit::Test* suite(); - -private: -}; - - -#endif // TaskManagerTest_INCLUDED diff --git a/contrib/libpoco/Foundation/testsuite/src/TaskTest.cpp b/contrib/libpoco/Foundation/testsuite/src/TaskTest.cpp deleted file mode 100644 index c8ef856a527..00000000000 --- a/contrib/libpoco/Foundation/testsuite/src/TaskTest.cpp +++ /dev/null @@ -1,141 +0,0 @@ -// -// TaskTest.cpp -// -// $Id: //poco/1.4/Foundation/testsuite/src/TaskTest.cpp#1 $ -// -// Copyright (c) 2004-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "TaskTest.h" -#include "CppUnit/TestCaller.h" -#include "CppUnit/TestSuite.h" -#include "Poco/Task.h" -#include "Poco/Thread.h" -#include "Poco/Event.h" -#include "Poco/AutoPtr.h" - - -using Poco::Task; -using Poco::Thread; -using Poco::Event; -using Poco::AutoPtr; - - -namespace -{ - class TestTask: public Task - { - public: - TestTask(): Task("TestTask") - { - } - - void runTask() - { - _event.wait(); - if (sleep(10)) - return; - setProgress(0.5); - _event.wait(); - if (isCancelled()) - return; - setProgress(1.0); - _event.wait(); - } - - void cont() - { - _event.set(); - } - - private: - Event _event; - }; -} - - -TaskTest::TaskTest(const std::string& name): CppUnit::TestCase(name) -{ -} - - -TaskTest::~TaskTest() -{ -} - - -void TaskTest::testFinish() -{ - AutoPtr pTT = new TestTask; - assert (pTT->state() == Task::TASK_IDLE); - Thread thr; - thr.start(*pTT); - assert (pTT->progress() == 0); - pTT->cont(); - while (pTT->progress() != 0.5) Thread::sleep(50); - assert (pTT->state() == Task::TASK_RUNNING); - pTT->cont(); - while (pTT->progress() != 1.0) Thread::sleep(50); - pTT->cont(); - thr.join(); - assert (pTT->state() == Task::TASK_FINISHED); -} - - -void TaskTest::testCancel1() -{ - AutoPtr pTT = new TestTask; - assert (pTT->state() == Task::TASK_IDLE); - Thread thr; - thr.start(*pTT); - assert (pTT->progress() == 0); - pTT->cont(); - while (pTT->progress() != 0.5) Thread::sleep(50); - assert (pTT->state() == Task::TASK_RUNNING); - pTT->cancel(); - assert (pTT->state() == Task::TASK_CANCELLING); - pTT->cont(); - thr.join(); - assert (pTT->state() == Task::TASK_FINISHED); -} - - -void TaskTest::testCancel2() -{ - AutoPtr pTT = new TestTask; - assert (pTT->state() == Task::TASK_IDLE); - Thread thr; - thr.start(*pTT); - assert (pTT->progress() == 0); - pTT->cancel(); - assert (pTT->state() == Task::TASK_CANCELLING); - pTT->cont(); - thr.join(); - assert (pTT->state() == Task::TASK_FINISHED); -} - - -void TaskTest::setUp() -{ -} - - -void TaskTest::tearDown() -{ -} - - -CppUnit::Test* TaskTest::suite() -{ - CppUnit::TestSuite* pSuite = new CppUnit::TestSuite("TaskTest"); - - CppUnit_addTest(pSuite, TaskTest, testFinish); - CppUnit_addTest(pSuite, TaskTest, testCancel1); - CppUnit_addTest(pSuite, TaskTest, testCancel2); - - return pSuite; -} diff --git a/contrib/libpoco/Foundation/testsuite/src/TaskTest.h b/contrib/libpoco/Foundation/testsuite/src/TaskTest.h deleted file mode 100644 index 5d022f2249c..00000000000 --- a/contrib/libpoco/Foundation/testsuite/src/TaskTest.h +++ /dev/null @@ -1,42 +0,0 @@ -// -// TaskTest.h -// -// $Id: //poco/1.4/Foundation/testsuite/src/TaskTest.h#1 $ -// -// Definition of the TaskTest class. -// -// Copyright (c) 2004-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef TaskTest_INCLUDED -#define TaskTest_INCLUDED - - -#include "Poco/Foundation.h" -#include "CppUnit/TestCase.h" - - -class TaskTest: public CppUnit::TestCase -{ -public: - TaskTest(const std::string& name); - ~TaskTest(); - - void testFinish(); - void testCancel1(); - void testCancel2(); - - void setUp(); - void tearDown(); - - static CppUnit::Test* suite(); - -private: -}; - - -#endif // TaskTest_INCLUDED diff --git a/contrib/libpoco/Foundation/testsuite/src/TaskTestSuite.cpp b/contrib/libpoco/Foundation/testsuite/src/TaskTestSuite.cpp deleted file mode 100644 index aa26bf39af7..00000000000 --- a/contrib/libpoco/Foundation/testsuite/src/TaskTestSuite.cpp +++ /dev/null @@ -1,26 +0,0 @@ -// -// TaskTestSuite.cpp -// -// $Id: //poco/1.4/Foundation/testsuite/src/TaskTestSuite.cpp#1 $ -// -// Copyright (c) 2004-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "TaskTestSuite.h" -#include "TaskTest.h" -#include "TaskManagerTest.h" - - -CppUnit::Test* TaskTestSuite::suite() -{ - CppUnit::TestSuite* pSuite = new CppUnit::TestSuite("TaskTestSuite"); - - pSuite->addTest(TaskTest::suite()); - pSuite->addTest(TaskManagerTest::suite()); - - return pSuite; -} diff --git a/contrib/libpoco/Foundation/testsuite/src/TaskTestSuite.h b/contrib/libpoco/Foundation/testsuite/src/TaskTestSuite.h deleted file mode 100644 index f0e6b441977..00000000000 --- a/contrib/libpoco/Foundation/testsuite/src/TaskTestSuite.h +++ /dev/null @@ -1,29 +0,0 @@ -// -// TaskTestSuite.h -// -// $Id: //poco/1.4/Foundation/testsuite/src/TaskTestSuite.h#1 $ -// -// Definition of the TaskTestSuite class. -// -// Copyright (c) 2004-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef TaskTestSuite_INCLUDED -#define TaskTestSuite_INCLUDED - - -#include "CppUnit/TestSuite.h" - - -class TaskTestSuite -{ -public: - static CppUnit::Test* suite(); -}; - - -#endif // TaskTestSuite_INCLUDED diff --git a/contrib/libpoco/Foundation/testsuite/src/TeeStreamTest.cpp b/contrib/libpoco/Foundation/testsuite/src/TeeStreamTest.cpp deleted file mode 100644 index d0d64e50f66..00000000000 --- a/contrib/libpoco/Foundation/testsuite/src/TeeStreamTest.cpp +++ /dev/null @@ -1,76 +0,0 @@ -// -// TeeStreamTest.cpp -// -// $Id: //poco/1.4/Foundation/testsuite/src/TeeStreamTest.cpp#1 $ -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "TeeStreamTest.h" -#include "CppUnit/TestCaller.h" -#include "CppUnit/TestSuite.h" -#include "Poco/TeeStream.h" -#include - - -using Poco::TeeInputStream; -using Poco::TeeOutputStream; - - -TeeStreamTest::TeeStreamTest(const std::string& name): CppUnit::TestCase(name) -{ -} - - -TeeStreamTest::~TeeStreamTest() -{ -} - - -void TeeStreamTest::testTeeInputStream() -{ - std::istringstream istr("foo"); - std::ostringstream ostr; - TeeInputStream tis(istr); - tis.addStream(ostr); - std::string s; - tis >> s; - assert (ostr.str() == "foo"); -} - - -void TeeStreamTest::testTeeOutputStream() -{ - std::ostringstream ostr1; - std::ostringstream ostr2; - TeeOutputStream tos(ostr1); - tos.addStream(ostr2); - tos << "bar" << std::flush; - assert (ostr1.str() == "bar"); - assert (ostr2.str() == "bar"); -} - - -void TeeStreamTest::setUp() -{ -} - - -void TeeStreamTest::tearDown() -{ -} - - -CppUnit::Test* TeeStreamTest::suite() -{ - CppUnit::TestSuite* pSuite = new CppUnit::TestSuite("TeeStreamTest"); - - CppUnit_addTest(pSuite, TeeStreamTest, testTeeInputStream); - CppUnit_addTest(pSuite, TeeStreamTest, testTeeOutputStream); - - return pSuite; -} diff --git a/contrib/libpoco/Foundation/testsuite/src/TeeStreamTest.h b/contrib/libpoco/Foundation/testsuite/src/TeeStreamTest.h deleted file mode 100644 index 48595589b20..00000000000 --- a/contrib/libpoco/Foundation/testsuite/src/TeeStreamTest.h +++ /dev/null @@ -1,41 +0,0 @@ -// -// TeeStreamTest.h -// -// $Id: //poco/1.4/Foundation/testsuite/src/TeeStreamTest.h#1 $ -// -// Definition of the TeeStreamTest class. -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef TeeStreamTest_INCLUDED -#define TeeStreamTest_INCLUDED - - -#include "Poco/Foundation.h" -#include "CppUnit/TestCase.h" - - -class TeeStreamTest: public CppUnit::TestCase -{ -public: - TeeStreamTest(const std::string& name); - ~TeeStreamTest(); - - void testTeeInputStream(); - void testTeeOutputStream(); - - void setUp(); - void tearDown(); - - static CppUnit::Test* suite(); - -private: -}; - - -#endif // TeeStreamTest_INCLUDED diff --git a/contrib/libpoco/Foundation/testsuite/src/TestApp.cpp b/contrib/libpoco/Foundation/testsuite/src/TestApp.cpp deleted file mode 100644 index c2a081ad378..00000000000 --- a/contrib/libpoco/Foundation/testsuite/src/TestApp.cpp +++ /dev/null @@ -1,51 +0,0 @@ -// -// TestApp.cpp -// -// $Id: //poco/1.4/Foundation/testsuite/src/TestApp.cpp#2 $ -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#if defined(_WIN32) -#define _CRT_SECURE_NO_DEPRECATE -#endif - - -#include -#include -#include - - -int main(int argc, char** argv) -{ - if (argc > 1) - { - std::string arg(argv[1]); - if (arg == "-hello") - { - std::cout << "Hello, world!"; - } - else if (arg == "-count") - { - int n = 0; - int c = std::cin.get(); - while (c != -1) { ++n; c = std::cin.get(); } - return n; - } - else if (arg == "-env") - { - const char* s = std::getenv("TESTENV"); - if (s) - { - std::cout << s; - return 0; - } - else return 1; - } - } - return argc - 1; -} diff --git a/contrib/libpoco/Foundation/testsuite/src/TestApp_WINCE.cpp b/contrib/libpoco/Foundation/testsuite/src/TestApp_WINCE.cpp deleted file mode 100644 index 9931a600673..00000000000 --- a/contrib/libpoco/Foundation/testsuite/src/TestApp_WINCE.cpp +++ /dev/null @@ -1,35 +0,0 @@ -// -// TestApp_WINCE.cpp -// -// $Id: //poco/1.4/Foundation/testsuite/src/TestApp_WINCE.cpp#1 $ -// -// Copyright (c) 2005-2010, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include -#include - - -int wmain(int argc, wchar_t* argv[]) -{ - if (argc > 1) - { - std::wstring arg(argv[1]); - if (arg == L"-hello") - { - std::cout << "Hello, world!"; - } - else if (arg == L"-count") - { - int n = 0; - int c = std::cin.get(); - while (c != -1) { ++n; c = std::cin.get(); } - return n; - } - } - return argc - 1; -} diff --git a/contrib/libpoco/Foundation/testsuite/src/TestChannel.cpp b/contrib/libpoco/Foundation/testsuite/src/TestChannel.cpp deleted file mode 100644 index 6c87be0b4a6..00000000000 --- a/contrib/libpoco/Foundation/testsuite/src/TestChannel.cpp +++ /dev/null @@ -1,42 +0,0 @@ -// -// TestChannel.cpp -// -// $Id: //poco/1.4/Foundation/testsuite/src/TestChannel.cpp#1 $ -// -// Copyright (c) 2004-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "TestChannel.h" - - -TestChannel::TestChannel() -{ -} - - -TestChannel::~TestChannel() -{ -} - - -void TestChannel::log(const Poco::Message& msg) -{ - _msgList.push_back(msg); - _lastMessage = msg; -} - - -TestChannel::MsgList& TestChannel::list() -{ - return _msgList; -} - - -void TestChannel::clear() -{ - _msgList.clear(); -} diff --git a/contrib/libpoco/Foundation/testsuite/src/TestChannel.h b/contrib/libpoco/Foundation/testsuite/src/TestChannel.h deleted file mode 100644 index 92a83d830d6..00000000000 --- a/contrib/libpoco/Foundation/testsuite/src/TestChannel.h +++ /dev/null @@ -1,43 +0,0 @@ -// -// TestChannel.h -// -// $Id: //poco/1.4/Foundation/testsuite/src/TestChannel.h#1 $ -// -// Definition of the TestChannel class. -// -// Copyright (c) 2004-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef TestChannel_INCLUDED -#define TestChannel_INCLUDED - - -#include "Poco/Channel.h" -#include "Poco/Message.h" -#include - - -class TestChannel: public Poco::Channel -{ -public: - typedef std::list MsgList; - - TestChannel(); - ~TestChannel(); - - void log(const Poco::Message& msg); - MsgList& list(); - void clear(); - const Poco::Message& getLastMessage() const { return _lastMessage; } - -private: - MsgList _msgList; - Poco::Message _lastMessage; -}; - - -#endif // TestChannel_INCLUDED diff --git a/contrib/libpoco/Foundation/testsuite/src/TestLibrary.cpp b/contrib/libpoco/Foundation/testsuite/src/TestLibrary.cpp deleted file mode 100644 index f4a13857457..00000000000 --- a/contrib/libpoco/Foundation/testsuite/src/TestLibrary.cpp +++ /dev/null @@ -1,97 +0,0 @@ -// -// TestLibrary.cpp -// -// $Id: //poco/1.4/Foundation/testsuite/src/TestLibrary.cpp#1 $ -// -// Copyright (c) 2004-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "TestPlugin.h" -#include "Poco/ClassLibrary.h" -#include - - -extern "C" int POCO_LIBRARY_API gimmeFive(); - - -class PluginA: public TestPlugin -{ -public: - PluginA() - { - } - - ~PluginA() - { - } - - std::string name() const - { - return "PluginA"; - } -}; - - -class PluginB: public TestPlugin -{ -public: - PluginB() - { - } - - ~PluginB() - { - } - - std::string name() const - { - return "PluginB"; - } -}; - - -class PluginC: public TestPlugin -{ -public: - PluginC() - { - } - - ~PluginC() - { - } - - std::string name() const - { - return "PluginC"; - } -}; - - -POCO_BEGIN_MANIFEST(TestPlugin) - POCO_EXPORT_CLASS(PluginA) - POCO_EXPORT_CLASS(PluginB) - POCO_EXPORT_SINGLETON(PluginC) -POCO_END_MANIFEST - - -void pocoInitializeLibrary() -{ - std::cout << "TestLibrary initializing" << std::endl; -} - - -void pocoUninitializeLibrary() -{ - std::cout << "TestLibrary uninitialzing" << std::endl; -} - - -int gimmeFive() -{ - return 5; -} diff --git a/contrib/libpoco/Foundation/testsuite/src/TestPlugin.cpp b/contrib/libpoco/Foundation/testsuite/src/TestPlugin.cpp deleted file mode 100644 index fa4ad6ed552..00000000000 --- a/contrib/libpoco/Foundation/testsuite/src/TestPlugin.cpp +++ /dev/null @@ -1,23 +0,0 @@ -// -// TestPlugin.cpp -// -// $Id: //poco/1.4/Foundation/testsuite/src/TestPlugin.cpp#1 $ -// -// Copyright (c) 2004-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "TestPlugin.h" - - -TestPlugin::TestPlugin() -{ -} - - -TestPlugin::~TestPlugin() -{ -} diff --git a/contrib/libpoco/Foundation/testsuite/src/TestPlugin.h b/contrib/libpoco/Foundation/testsuite/src/TestPlugin.h deleted file mode 100644 index 03c9f0370aa..00000000000 --- a/contrib/libpoco/Foundation/testsuite/src/TestPlugin.h +++ /dev/null @@ -1,31 +0,0 @@ -// -// TestPlugin.h -// -// $Id: //poco/1.4/Foundation/testsuite/src/TestPlugin.h#1 $ -// -// Definition of the TestPlugin class. -// -// Copyright (c) 2004-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef TestPlugin_INCLUDED -#define TestPlugin_INCLUDED - - -#include "Poco/Foundation.h" - - -class TestPlugin -{ -public: - TestPlugin(); - virtual ~TestPlugin(); - virtual std::string name() const = 0; -}; - - -#endif // TestPlugin_INCLUDED diff --git a/contrib/libpoco/Foundation/testsuite/src/TextBufferIteratorTest.cpp b/contrib/libpoco/Foundation/testsuite/src/TextBufferIteratorTest.cpp deleted file mode 100644 index 85854607c56..00000000000 --- a/contrib/libpoco/Foundation/testsuite/src/TextBufferIteratorTest.cpp +++ /dev/null @@ -1,266 +0,0 @@ -// -// TextBufferIteratorTest.cpp -// -// $Id: //poco/1.4/Foundation/testsuite/src/TextBufferIteratorTest.cpp#1 $ -// -// Copyright (c) 2010, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "TextBufferIteratorTest.h" -#include "CppUnit/TestCaller.h" -#include "CppUnit/TestSuite.h" -#include "Poco/TextBufferIterator.h" -#include "Poco/Latin1Encoding.h" -#include "Poco/UTF8Encoding.h" -#include "Poco/UTF16Encoding.h" - - -using Poco::TextBufferIterator; -using Poco::Latin1Encoding; -using Poco::UTF8Encoding; -using Poco::UTF16Encoding; - - -TextBufferIteratorTest::TextBufferIteratorTest(const std::string& name): CppUnit::TestCase(name) -{ -} - - -TextBufferIteratorTest::~TextBufferIteratorTest() -{ -} - - -void TextBufferIteratorTest::testEmptyLatin1() -{ - Latin1Encoding encoding; - const char* text = ""; - TextBufferIterator it(text, encoding); - TextBufferIterator end(it.end()); - - assert (it == end); -} - - -void TextBufferIteratorTest::testOneLatin1() -{ - Latin1Encoding encoding; - const char* text = "x"; - TextBufferIterator it(text, encoding); - TextBufferIterator end(it.end()); - - assert (it != end); - assert (*it == 'x'); - ++it; - assert (it == end); -} - - -void TextBufferIteratorTest::testLatin1() -{ - Latin1Encoding encoding; - const char* text = "Latin1"; - TextBufferIterator it(text, encoding); - TextBufferIterator end(it.end()); - - assert (it != end); - assert (*it++ == 'L'); - assert (it != end); - assert (*it++ == 'a'); - assert (it != end); - assert (*it++ == 't'); - assert (it != end); - assert (*it++ == 'i'); - assert (it != end); - assert (*it++ == 'n'); - assert (it != end); - assert (*it++ == '1'); - assert (it == end); - - const char* empty = ""; - it = TextBufferIterator(empty, encoding); - end = it.end(); - assert (it == end); -} - - -void TextBufferIteratorTest::testEmptyUTF8() -{ - UTF8Encoding encoding; - const char* text = ""; - TextBufferIterator it(text, encoding); - TextBufferIterator end(text); - - assert (it == end); -} - - -void TextBufferIteratorTest::testOneUTF8() -{ - UTF8Encoding encoding; - - // 1 byte sequence - const char* text = "x"; - TextBufferIterator it(text, encoding); - TextBufferIterator end(it.end()); - - assert (it != end); - assert (*it == 'x'); - ++it; - assert (it == end); - - unsigned char data[Poco::TextEncoding::MAX_SEQUENCE_LENGTH]; - - // 2 byte sequence - int n = encoding.convert(0xab, data, sizeof(data)); - assert (n == 2); - it = TextBufferIterator(reinterpret_cast(data), n, encoding); - end = it.end(); - - assert (it != end); - assert (*it++ == 0xab); - assert (it == end); - - // 3 byte sequence - n = encoding.convert(0xabcd, data, sizeof(data)); - assert (n == 3); - it = TextBufferIterator(reinterpret_cast(data), n, encoding); - end = it.end(); - - assert (it != end); - assert (*it++ == 0xabcd); - assert (it == end); - - // 4 byte sequence - n = encoding.convert(0xabcde, data, sizeof(data)); - assert (n == 4); - it = TextBufferIterator(reinterpret_cast(data), n, encoding); - end = it.end(); - - assert (it != end); - assert (*it++ == 0xabcde); - assert (it == end); - - // 5 byte sequence - not supported - n = encoding.convert(0xabcdef, data, sizeof(data)); - assert (n == 0); - - // 6 byte sequence - not supported - n = encoding.convert(0xfabcdef, data, sizeof(data)); - assert (n == 0); -} - - -void TextBufferIteratorTest::testUTF8() -{ - UTF8Encoding encoding; - const unsigned char text[] = {0x20, 0xce, 0xba, 0xe1, 0xbd, 0xb9, 0xcf, 0x83, 0xce, 0xbc, 0xce, 0xb5, 0x20, 0x00}; - TextBufferIterator it(reinterpret_cast(text), encoding); - TextBufferIterator end(it.end()); - - assert (it != end); - assert (*it++ == 0x0020); - assert (it != end); - assert (*it++ == 0x03ba); - assert (it != end); - assert (*it++ == 0x1f79); - assert (it != end); - assert (*it++ == 0x03c3); - assert (it != end); - assert (*it++ == 0x03bc); - assert (it != end); - assert (*it++ == 0x03b5); - assert (it != end); - assert (*it++ == 0x0020); - assert (it == end); -} - - -void TextBufferIteratorTest::testUTF8Supplementary() -{ - UTF8Encoding encoding; - const unsigned char text[] = {0x41, 0x42, 0xf0, 0x90, 0x82, 0xa4, 0xf0, 0xaf, 0xa6, 0xa0, 0xf0, 0xaf, 0xa8, 0x9d, 0x00}; - TextBufferIterator it(reinterpret_cast(text), encoding); - TextBufferIterator end(it.end()); - - assert (it != end); - assert (*it++ == 0x0041); - assert (it != end); - assert (*it++ == 0x0042); - assert (it != end); - assert (*it++ == 0x100a4); - assert (it != end); - assert (*it++ == 0x2f9a0); - assert (it != end); - assert (*it++ == 0x2fa1d); - assert (it == end); -} - - -void TextBufferIteratorTest::testUTF16Supplementary() -{ - UTF16Encoding encoding; - const Poco::UInt16 text[] = { 0x0041, 0x0042, 0xD800, 0xDCA4, 0xD87E, 0xDDA0, 0xD87E, 0xDE1D}; - TextBufferIterator it(reinterpret_cast(text), sizeof(text), encoding); - TextBufferIterator end(it.end()); - - assert (it != end); - assert (*it++ == 0x0041); - assert (it != end); - assert (*it++ == 0x0042); - assert (it != end); - assert (*it++ == 0x100a4); - assert (it != end); - assert (*it++ == 0x2f9a0); - assert (it != end); - assert (*it++ == 0x2fa1d); - assert (it == end); -} - - -void TextBufferIteratorTest::testSwap() -{ - Latin1Encoding encoding; - const char* text = "x"; - TextBufferIterator it1(text, encoding); - TextBufferIterator it2(text, encoding); - TextBufferIterator end(it1.end()); - - assert (it1 == it2); - it2.swap(end); - assert (it1 != it2); - it2.swap(end); - assert (it1 == it2); -} - - -void TextBufferIteratorTest::setUp() -{ -} - - -void TextBufferIteratorTest::tearDown() -{ -} - - -CppUnit::Test* TextBufferIteratorTest::suite() -{ - CppUnit::TestSuite* pSuite = new CppUnit::TestSuite("TextBufferIteratorTest"); - - CppUnit_addTest(pSuite, TextBufferIteratorTest, testEmptyLatin1); - CppUnit_addTest(pSuite, TextBufferIteratorTest, testOneLatin1); - CppUnit_addTest(pSuite, TextBufferIteratorTest, testLatin1); - CppUnit_addTest(pSuite, TextBufferIteratorTest, testEmptyUTF8); - CppUnit_addTest(pSuite, TextBufferIteratorTest, testOneUTF8); - CppUnit_addTest(pSuite, TextBufferIteratorTest, testUTF8); - CppUnit_addTest(pSuite, TextBufferIteratorTest, testUTF8Supplementary); - CppUnit_addTest(pSuite, TextBufferIteratorTest, testUTF16Supplementary); - CppUnit_addTest(pSuite, TextBufferIteratorTest, testSwap); - - return pSuite; -} diff --git a/contrib/libpoco/Foundation/testsuite/src/TextBufferIteratorTest.h b/contrib/libpoco/Foundation/testsuite/src/TextBufferIteratorTest.h deleted file mode 100644 index ab36e1c58f2..00000000000 --- a/contrib/libpoco/Foundation/testsuite/src/TextBufferIteratorTest.h +++ /dev/null @@ -1,48 +0,0 @@ -// -// TextBufferIteratorTest.h -// -// $Id: //poco/1.4/Foundation/testsuite/src/TextBufferIteratorTest.h#1 $ -// -// Definition of the TextBufferIteratorTest class. -// -// Copyright (c) 2010, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef TextBufferIteratorTest_INCLUDED -#define TextBufferIteratorTest_INCLUDED - - -#include "Poco/Foundation.h" -#include "CppUnit/TestCase.h" - - -class TextBufferIteratorTest: public CppUnit::TestCase -{ -public: - TextBufferIteratorTest(const std::string& name); - ~TextBufferIteratorTest(); - - void testEmptyLatin1(); - void testOneLatin1(); - void testLatin1(); - void testEmptyUTF8(); - void testOneUTF8(); - void testUTF8(); - void testUTF8Supplementary(); - void testUTF16Supplementary(); - void testSwap(); - - void setUp(); - void tearDown(); - - static CppUnit::Test* suite(); - -private: -}; - - -#endif // TextBufferIteratorTest_INCLUDED diff --git a/contrib/libpoco/Foundation/testsuite/src/TextConverterTest.cpp b/contrib/libpoco/Foundation/testsuite/src/TextConverterTest.cpp deleted file mode 100644 index afe304bc3e8..00000000000 --- a/contrib/libpoco/Foundation/testsuite/src/TextConverterTest.cpp +++ /dev/null @@ -1,357 +0,0 @@ -// -// TextConverterTest.cpp -// -// $Id: //poco/1.4/Foundation/testsuite/src/TextConverterTest.cpp#1 $ -// -// Copyright (c) 2004-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "TextConverterTest.h" -#include "CppUnit/TestCaller.h" -#include "CppUnit/TestSuite.h" -#include "Poco/TextConverter.h" -#include "Poco/ASCIIEncoding.h" -#include "Poco/Latin1Encoding.h" -#include "Poco/Latin2Encoding.h" -#include "Poco/Latin9Encoding.h" -#include "Poco/Windows1250Encoding.h" -#include "Poco/Windows1251Encoding.h" -#include "Poco/Windows1252Encoding.h" -#include "Poco/UTF8Encoding.h" - - -using namespace Poco; - - -TextConverterTest::TextConverterTest(const std::string& name): CppUnit::TestCase(name) -{ -} - - -TextConverterTest::~TextConverterTest() -{ -} - - -void TextConverterTest::testIdentityASCII() -{ - ASCIIEncoding encoding; - TextConverter converter(encoding, encoding); - - std::string empty; - std::string result0; - int errors = converter.convert(empty, result0); - assert (result0 == empty); - assert (errors == 0); - - std::string fooBar = "foo bar"; - std::string result1; - errors = converter.convert(fooBar, result1); - assert (result1 == fooBar); - assert (errors == 0); - - std::string result2; - errors = converter.convert(fooBar.data(), (int) fooBar.length(), result2); - assert (result2 == fooBar); - assert (errors == 0); - - std::string result3; - errors = converter.convert("", 0, result3); - assert (result3.empty()); - assert (errors == 0); - - std::string x = "x"; - std::string result4; - errors = converter.convert(x, result4); - assert (result4 == x); - assert (errors == 0); - - std::string result5; - errors = converter.convert("x", 1, result5); - assert (result5 == x); - assert (errors == 0); -} - - -void TextConverterTest::testIdentityUTF8() -{ - UTF8Encoding encoding; - TextConverter converter(encoding, encoding); - - std::string empty; - std::string result0; - int errors = converter.convert(empty, result0); - assert (result0 == empty); - assert (errors == 0); - - std::string fooBar = "foo bar"; - std::string result1; - errors = converter.convert(fooBar, result1); - assert (result1 == fooBar); - assert (errors == 0); - - std::string result2; - errors = converter.convert(fooBar.data(), (int) fooBar.length(), result2); - assert (result2 == fooBar); - assert (errors == 0); - - std::string result3; - errors = converter.convert("", 0, result3); - assert (result3.empty()); - assert (errors == 0); - - const unsigned char greek[] = {0x20, 0xce, 0xba, 0xe1, 0xbd, 0xb9, 0xcf, 0x83, 0xce, 0xbc, 0xce, 0xb5, 0x20, 0x00}; - std::string text((const char*) greek); - - std::string result4; - errors = converter.convert(text, result4); - assert (result4 == text); - assert (errors == 0); - - std::string result5; - errors = converter.convert((char*) greek, 13, result5); - assert (result5 == text); - assert (errors == 0); - - std::string x = "x"; - std::string result6; - errors = converter.convert(x, result6); - assert (result6 == x); - assert (errors == 0); - - std::string result7; - errors = converter.convert("x", 1, result7); - assert (result7 == x); - assert (errors == 0); - - std::string utfChar((char*) greek + 1, 2); - std::string result8; - errors = converter.convert(utfChar, result8); - assert (result8 == utfChar); - assert (errors == 0); - - std::string result9; - errors = converter.convert((char*) greek + 1, 2, result9); - assert (result9 == utfChar); - assert (errors == 0); -} - - -void TextConverterTest::testUTF8toASCII() -{ - UTF8Encoding utf8Encoding; - ASCIIEncoding asciiEncoding; - TextConverter converter(utf8Encoding, asciiEncoding); - - const unsigned char greek[] = {0x20, 0xce, 0xba, 0xe1, 0xbd, 0xb9, 0xcf, 0x83, 0xce, 0xbc, 0xce, 0xb5, 0x20, 0x41, 0x42, 0x00}; - std::string text((const char*) greek); - std::string result0; - int errors = converter.convert(text, result0); - assert (result0 == " ????? AB"); - assert (errors == 0); - - std::string result1; - errors = converter.convert("abcde", 5, result1); - assert (result1 == "abcde"); -} - - -void TextConverterTest::testLatin1toUTF8() -{ - Latin1Encoding latin1Encoding; - UTF8Encoding utf8Encoding; - TextConverter converter(latin1Encoding, utf8Encoding); - - const unsigned char latin1Chars[] = {'g', 252, 'n', 't', 'e', 'r', 0}; - const unsigned char utf8Chars[] = {'g', 195, 188, 'n', 't', 'e', 'r', 0}; - std::string latin1Text((const char*) latin1Chars); - std::string utf8Text((const char*) utf8Chars); - - std::string result0; - int errors = converter.convert(latin1Text, result0); - assert (result0 == utf8Text); - assert (errors == 0); - assertEqual((long) result0.size(), 7); - - std::string result1; - errors = converter.convert(latin1Chars, 6, result1); - assert (result1 == utf8Text); - assert (errors == 0); -} - - -void TextConverterTest::testLatin2toUTF8() -{ - Latin2Encoding latinEncoding; - UTF8Encoding utf8Encoding; - TextConverter converter(latinEncoding, utf8Encoding); - - const unsigned char latinChars[26] = { 0xb5, 0xb9, 0xe8, 0xbb, 0xbe, 0xfd, 0xe1, 0xed, 0xe9, 0xfa, 0xe4, 0xf4, - 0x20, 0xa5, 0xa9, 0xc8, 0xab, 0xae, 0xdd, 0xc1, 0xcd, 0xc9, 0xda, 0xc4, 0xd4, 0x00 }; - const unsigned char utf8Chars[] = "ľščťžýáíéúäô ĽŠČŤŽÝÁÍÉÚÄÔ"; - std::string latinText((const char*) latinChars); - std::string utf8Text((const char*) utf8Chars); - - std::string result0; - int errors = converter.convert(latinText, result0); - assertEqual (result0, utf8Text); - assertEqual (errors, 0); - assertEqual((long) result0.size(), 49); - - std::string result1; - errors = converter.convert(latinChars, 25, result1); - assertEqual (result1, utf8Text); - assertEqual (errors, 0); - assertEqual((long) result1.size(), 49); -} - - -void TextConverterTest::testLatin9toUTF8() -{ - Latin9Encoding latinEncoding; - UTF8Encoding utf8Encoding; - TextConverter converter(latinEncoding, utf8Encoding); - - const unsigned char latinChars[26] = { 0x3f, 0xa8, 0x3f, 0x3f, 0xb8, 0xfd, 0xe1, 0xed, 0xe9, 0xfa, 0xe4, 0xf4, - 0x20, 0x3f, 0xa6, 0x3f, 0x3f, 0xb4, 0xdd, 0xc1, 0xcd, 0xc9, 0xda, 0xc4, 0xd4, 0x00 }; - const unsigned char utf8Chars[] = "?š??žýáíéúäô ?Š??ŽÝÁÍÉÚÄÔ"; - std::string latinText((const char*) latinChars); - std::string utf8Text((const char*) utf8Chars); - - std::string result0; - int errors = converter.convert(latinText, result0); - assertEqual (result0, utf8Text); - assertEqual (errors, 0); - assertEqual((long) result0.size(), 43); - - std::string result1; - errors = converter.convert(latinChars, 25, result1); - assertEqual(result1, utf8Text); - assertEqual((long) errors, 0); - assertEqual((long) result1.size(), 43); -} - - -void TextConverterTest::testCP1250toUTF8() -{ - Windows1250Encoding latinEncoding; - UTF8Encoding utf8Encoding; - TextConverter converter(latinEncoding, utf8Encoding); - - const unsigned char latinChars[26] = { 0xbe, 0x9a, 0xe8, 0x9d, 0x9e, 0xfd, 0xe1, 0xed, 0xe9, 0xfa, 0xe4, 0xf4, - 0x20, 0xbc, 0x8a, 0xc8, 0x8d, 0x8e, 0xdd, 0xc1, 0xcd, 0xc9, 0xda, 0xc4, 0xd4, 0x00 }; - const unsigned char utf8Chars[] = "ľščťžýáíéúäô ĽŠČŤŽÝÁÍÉÚÄÔ"; - std::string latinText((const char*) latinChars); - std::string utf8Text((const char*) utf8Chars); - - std::string result0; - int errors = converter.convert(latinText, result0); - assertEqual (result0, utf8Text); - assertEqual (errors, 0); - assertEqual((long) result0.size(), 49); - - std::string result1; - errors = converter.convert(latinChars, 25, result1); - assertEqual(result1, utf8Text); - assertEqual((long) errors, 0); - assertEqual((long) result1.size(), 49); -} - - -void TextConverterTest::testCP1251toUTF8() -{ - Windows1251Encoding latinEncoding; - UTF8Encoding utf8Encoding; - TextConverter converter(latinEncoding, utf8Encoding); - - const unsigned char latinChars[32] = { 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff, 0x00 }; - const unsigned char utf8Chars[] = "бвгдежзийклмнопрстуфхцчшщъыьэюя"; - std::string latinText((const char*) latinChars); - std::string utf8Text((const char*) utf8Chars); - - std::string result0; - int errors = converter.convert(latinText, result0); - assertEqual (result0, utf8Text); - assertEqual (errors, 0); - assertEqual((long) result0.size(), 62); - - std::string result1; - errors = converter.convert(latinChars, 31, result1); - assertEqual (result1, utf8Text); - assertEqual (errors, 0); - assertEqual((long) result1.size(), 62); -} - - -void TextConverterTest::testCP1252toUTF8() -{ - Windows1252Encoding latinEncoding; - UTF8Encoding utf8Encoding; - TextConverter converter(latinEncoding, utf8Encoding); - - const unsigned char latinChars[26] = { 0x3f, 0x9a, 0x3f, 0x3f, 0x9e, 0xfd, 0xe1, 0xed, 0xe9, 0xfa, 0xe4, 0xf4, - 0x20, 0x3f, 0x8a, 0x3f, 0x3f, 0x8e, 0xdd, 0xc1, 0xcd, 0xc9, 0xda, 0xc4, 0xd4, 0x00 }; - const unsigned char utf8Chars[] = "?š??žýáíéúäô ?Š??ŽÝÁÍÉÚÄÔ"; - std::string latinText((const char*) latinChars); - std::string utf8Text((const char*) utf8Chars); - - std::string result0; - int errors = converter.convert(latinText, result0); - assertEqual(result0, utf8Text); - assertEqual(errors, 0); - assertEqual((long) result0.size(), 43); - - std::string result1; - errors = converter.convert(latinChars, 25, result1); - assertEqual(result1, utf8Text); - assertEqual(errors, 0); - assertEqual((long) result1.size(), 43); -} - - -void TextConverterTest::testErrors() -{ - UTF8Encoding utf8Encoding; - Latin1Encoding latin1Encoding; - TextConverter converter(utf8Encoding, latin1Encoding); - - const unsigned char badChars[] = {'a', 'b', 255, 'c', 254, 0}; - std::string badText((const char*) badChars); - - std::string result; - int errors = converter.convert(badText, result); - assert (errors == 2); -} - - -void TextConverterTest::setUp() -{ -} - - -void TextConverterTest::tearDown() -{ -} - - -CppUnit::Test* TextConverterTest::suite() -{ - CppUnit::TestSuite* pSuite = new CppUnit::TestSuite("TextConverterTest"); - - CppUnit_addTest(pSuite, TextConverterTest, testIdentityASCII); - CppUnit_addTest(pSuite, TextConverterTest, testIdentityUTF8); - CppUnit_addTest(pSuite, TextConverterTest, testUTF8toASCII); - CppUnit_addTest(pSuite, TextConverterTest, testLatin1toUTF8); - CppUnit_addTest(pSuite, TextConverterTest, testLatin2toUTF8); - CppUnit_addTest(pSuite, TextConverterTest, testLatin9toUTF8); - CppUnit_addTest(pSuite, TextConverterTest, testCP1250toUTF8); - CppUnit_addTest(pSuite, TextConverterTest, testCP1251toUTF8); - CppUnit_addTest(pSuite, TextConverterTest, testCP1252toUTF8); - CppUnit_addTest(pSuite, TextConverterTest, testErrors); - - return pSuite; -} diff --git a/contrib/libpoco/Foundation/testsuite/src/TextConverterTest.h b/contrib/libpoco/Foundation/testsuite/src/TextConverterTest.h deleted file mode 100644 index 897ca9a5a17..00000000000 --- a/contrib/libpoco/Foundation/testsuite/src/TextConverterTest.h +++ /dev/null @@ -1,49 +0,0 @@ -// -// TextConverterTest.h -// -// $Id: //poco/1.4/Foundation/testsuite/src/TextConverterTest.h#1 $ -// -// Definition of the TextConverterTest class. -// -// Copyright (c) 2004-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef TextConverterTest_INCLUDED -#define TextConverterTest_INCLUDED - - -#include "Poco/Foundation.h" -#include "CppUnit/TestCase.h" - - -class TextConverterTest: public CppUnit::TestCase -{ -public: - TextConverterTest(const std::string& name); - ~TextConverterTest(); - - void testIdentityASCII(); - void testIdentityUTF8(); - void testUTF8toASCII(); - void testLatin1toUTF8(); - void testLatin2toUTF8(); - void testLatin9toUTF8(); - void testCP1250toUTF8(); - void testCP1251toUTF8(); - void testCP1252toUTF8(); - void testErrors(); - - void setUp(); - void tearDown(); - - static CppUnit::Test* suite(); - -private: -}; - - -#endif // TextConverterTest_INCLUDED diff --git a/contrib/libpoco/Foundation/testsuite/src/TextEncodingTest.cpp b/contrib/libpoco/Foundation/testsuite/src/TextEncodingTest.cpp deleted file mode 100644 index f9b0460ba7e..00000000000 --- a/contrib/libpoco/Foundation/testsuite/src/TextEncodingTest.cpp +++ /dev/null @@ -1,113 +0,0 @@ -// -// TextEncodingTest.cpp -// -// $Id: //poco/1.4/Foundation/testsuite/src/TextEncodingTest.cpp#1 $ -// -// Copyright (c) 2004-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "TextEncodingTest.h" -#include "CppUnit/TestCaller.h" -#include "CppUnit/TestSuite.h" -#include "Poco/TextEncoding.h" -#include "Poco/Latin1Encoding.h" -#include "Poco/Latin2Encoding.h" -#include "Poco/Latin9Encoding.h" -#include "Poco/Windows1250Encoding.h" -#include "Poco/Windows1251Encoding.h" -#include "Poco/Windows1252Encoding.h" -#include "Poco/UTF8Encoding.h" - - -using namespace Poco; - - -TextEncodingTest::TextEncodingTest(const std::string& name): CppUnit::TestCase(name) -{ -} - - -TextEncodingTest::~TextEncodingTest() -{ -} - - -void TextEncodingTest::testTextEncoding() -{ - TextEncoding& utf8 = TextEncoding::byName("utf8"); - assert (std::string("UTF-8") == utf8.canonicalName()); - - TextEncoding& latin1 = TextEncoding::byName("latin1"); - assert (std::string("ISO-8859-1") == latin1.canonicalName()); - - TextEncoding& latin2 = TextEncoding::byName("latin2"); - assert (std::string("ISO-8859-2") == latin2.canonicalName()); - - TextEncoding& latin9 = TextEncoding::byName("latin9"); - assert (std::string("ISO-8859-15") == latin9.canonicalName()); - - TextEncoding& cp1250 = TextEncoding::byName("CP1250"); - assert (std::string("windows-1250") == cp1250.canonicalName()); - - TextEncoding& cp1251 = TextEncoding::byName("CP1251"); - assert (std::string("windows-1251") == cp1251.canonicalName()); - - TextEncoding& cp1252 = TextEncoding::byName("CP1252"); - assert (std::string("windows-1252") == cp1252.canonicalName()); - - - TextEncoding& glob = TextEncoding::global(); - assert (std::string("UTF-8") == glob.canonicalName()); - - TextEncoding::global(new Latin1Encoding); - TextEncoding& glob2 = TextEncoding::global(); - assert (std::string("ISO-8859-1") == glob2.canonicalName()); - - TextEncoding::global(new Latin2Encoding); - TextEncoding& glob3 = TextEncoding::global(); - assert (std::string("ISO-8859-2") == glob3.canonicalName()); - - TextEncoding::global(new Latin9Encoding); - TextEncoding& glob4 = TextEncoding::global(); - assert (std::string("ISO-8859-15") == glob4.canonicalName()); - - TextEncoding::global(new Windows1250Encoding); - TextEncoding& glob5 = TextEncoding::global(); - assert (std::string("windows-1250") == glob5.canonicalName()); - - TextEncoding::global(new Windows1251Encoding); - TextEncoding& glob6 = TextEncoding::global(); - assert (std::string("windows-1251") == glob6.canonicalName()); - - TextEncoding::global(new Windows1252Encoding); - TextEncoding& glob7 = TextEncoding::global(); - assert (std::string("windows-1252") == glob7.canonicalName()); - - TextEncoding::global(new UTF8Encoding); - TextEncoding& glob8 = TextEncoding::global(); - assert (std::string("UTF-8") == glob8.canonicalName()); -} - - -void TextEncodingTest::setUp() -{ -} - - -void TextEncodingTest::tearDown() -{ -} - - -CppUnit::Test* TextEncodingTest::suite() -{ - CppUnit::TestSuite* pSuite = new CppUnit::TestSuite("TextEncodingTest"); - - CppUnit_addTest(pSuite, TextEncodingTest, testTextEncoding); - - return pSuite; -} diff --git a/contrib/libpoco/Foundation/testsuite/src/TextEncodingTest.h b/contrib/libpoco/Foundation/testsuite/src/TextEncodingTest.h deleted file mode 100644 index 7a5f3d278d7..00000000000 --- a/contrib/libpoco/Foundation/testsuite/src/TextEncodingTest.h +++ /dev/null @@ -1,40 +0,0 @@ -// -// TextEncodingTest.h -// -// $Id: //poco/1.4/Foundation/testsuite/src/TextEncodingTest.h#1 $ -// -// Definition of the TextEncodingTest class. -// -// Copyright (c) 2007, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef TextEncodingTest_INCLUDED -#define TextEncodingTest_INCLUDED - - -#include "Poco/Foundation.h" -#include "CppUnit/TestCase.h" - - -class TextEncodingTest: public CppUnit::TestCase -{ -public: - TextEncodingTest(const std::string& name); - ~TextEncodingTest(); - - void testTextEncoding(); - - void setUp(); - void tearDown(); - - static CppUnit::Test* suite(); - -private: -}; - - -#endif // TextEncodingTest_INCLUDED diff --git a/contrib/libpoco/Foundation/testsuite/src/TextIteratorTest.cpp b/contrib/libpoco/Foundation/testsuite/src/TextIteratorTest.cpp deleted file mode 100644 index 42dc17e6028..00000000000 --- a/contrib/libpoco/Foundation/testsuite/src/TextIteratorTest.cpp +++ /dev/null @@ -1,272 +0,0 @@ -// -// TextIteratorTest.cpp -// -// $Id: //poco/1.4/Foundation/testsuite/src/TextIteratorTest.cpp#1 $ -// -// Copyright (c) 2004-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "TextIteratorTest.h" -#include "CppUnit/TestCaller.h" -#include "CppUnit/TestSuite.h" -#include "Poco/TextIterator.h" -#include "Poco/Latin1Encoding.h" -#include "Poco/UTF8Encoding.h" -#include "Poco/UTF16Encoding.h" - - -using Poco::TextIterator; -using Poco::Latin1Encoding; -using Poco::UTF8Encoding; -using Poco::UTF16Encoding; - - -TextIteratorTest::TextIteratorTest(const std::string& name): CppUnit::TestCase(name) -{ -} - - -TextIteratorTest::~TextIteratorTest() -{ -} - - -void TextIteratorTest::testEmptyLatin1() -{ - Latin1Encoding encoding; - std::string text; - TextIterator it(text, encoding); - TextIterator end(text); - - assert (it == end); -} - - -void TextIteratorTest::testOneLatin1() -{ - Latin1Encoding encoding; - std::string text("x"); - TextIterator it(text, encoding); - TextIterator end(text); - - assert (it != end); - assert (*it == 'x'); - ++it; - assert (it == end); -} - - -void TextIteratorTest::testLatin1() -{ - Latin1Encoding encoding; - std::string text("Latin1"); - TextIterator it(text, encoding); - TextIterator end(text); - - assert (it != end); - assert (*it++ == 'L'); - assert (it != end); - assert (*it++ == 'a'); - assert (it != end); - assert (*it++ == 't'); - assert (it != end); - assert (*it++ == 'i'); - assert (it != end); - assert (*it++ == 'n'); - assert (it != end); - assert (*it++ == '1'); - assert (it == end); - - std::string empty; - it = TextIterator(empty, encoding); - end = TextIterator(empty); - assert (it == end); -} - - -void TextIteratorTest::testEmptyUTF8() -{ - UTF8Encoding encoding; - std::string text; - TextIterator it(text, encoding); - TextIterator end(text); - - assert (it == end); -} - - -void TextIteratorTest::testOneUTF8() -{ - UTF8Encoding encoding; - - // 1 byte sequence - std::string text("x"); - TextIterator it(text, encoding); - TextIterator end(text); - - assert (it != end); - assert (*it == 'x'); - ++it; - assert (it == end); - - unsigned char data[Poco::TextEncoding::MAX_SEQUENCE_LENGTH]; - - // 2 byte sequence - int n = encoding.convert(0xab, data, sizeof(data)); - assert (n == 2); - text.assign((char*) data, n); - it = TextIterator(text, encoding); - end = TextIterator(text); - - assert (it != end); - assert (*it++ == 0xab); - assert (it == end); - - // 3 byte sequence - n = encoding.convert(0xabcd, data, sizeof(data)); - assert (n == 3); - text.assign((char*) data, n); - it = TextIterator(text, encoding); - end = TextIterator(text); - - assert (it != end); - assert (*it++ == 0xabcd); - assert (it == end); - - // 4 byte sequence - n = encoding.convert(0xabcde, data, sizeof(data)); - assert (n == 4); - text.assign((char*) data, n); - it = TextIterator(text, encoding); - end = TextIterator(text); - - assert (it != end); - assert (*it++ == 0xabcde); - assert (it == end); - - // 5 byte sequence - not supported - n = encoding.convert(0xabcdef, data, sizeof(data)); - assert (n == 0); - - // 6 byte sequence - not supported - n = encoding.convert(0xfabcdef, data, sizeof(data)); - assert (n == 0); -} - - -void TextIteratorTest::testUTF8() -{ - UTF8Encoding encoding; - const unsigned char greek[] = {0x20, 0xce, 0xba, 0xe1, 0xbd, 0xb9, 0xcf, 0x83, 0xce, 0xbc, 0xce, 0xb5, 0x20, 0x00}; - std::string text((const char*) greek); - TextIterator it(text, encoding); - TextIterator end(text); - - assert (it != end); - assert (*it++ == 0x0020); - assert (it != end); - assert (*it++ == 0x03ba); - assert (it != end); - assert (*it++ == 0x1f79); - assert (it != end); - assert (*it++ == 0x03c3); - assert (it != end); - assert (*it++ == 0x03bc); - assert (it != end); - assert (*it++ == 0x03b5); - assert (it != end); - assert (*it++ == 0x0020); - assert (it == end); -} - - -void TextIteratorTest::testUTF8Supplementary() -{ - UTF8Encoding encoding; - const unsigned char supp[] = {0x41, 0x42, 0xf0, 0x90, 0x82, 0xa4, 0xf0, 0xaf, 0xa6, 0xa0, 0xf0, 0xaf, 0xa8, 0x9d, 0x00}; - std::string text((const char*) supp); - TextIterator it(text, encoding); - TextIterator end(text); - - assert (it != end); - assert (*it++ == 0x0041); - assert (it != end); - assert (*it++ == 0x0042); - assert (it != end); - assert (*it++ == 0x100a4); - assert (it != end); - assert (*it++ == 0x2f9a0); - assert (it != end); - assert (*it++ == 0x2fa1d); - assert (it == end); -} - - -void TextIteratorTest::testUTF16Supplementary() -{ - UTF16Encoding encoding; - const Poco::UInt16 supp [] = { 0x0041, 0x0042, 0xD800, 0xDCA4, 0xD87E, 0xDDA0, 0xD87E, 0xDE1D, 0x00}; - std::string text((const char*) supp, 16); - TextIterator it(text, encoding); - TextIterator end(text); - - assert (it != end); - assert (*it++ == 0x0041); - assert (it != end); - assert (*it++ == 0x0042); - assert (it != end); - assert (*it++ == 0x100a4); - assert (it != end); - assert (*it++ == 0x2f9a0); - assert (it != end); - assert (*it++ == 0x2fa1d); - assert (it == end); -} - - -void TextIteratorTest::testSwap() -{ - Latin1Encoding encoding; - std::string text("x"); - TextIterator it1(text, encoding); - TextIterator it2(text, encoding); - TextIterator end(text); - - assert (it1 == it2); - it2.swap(end); - assert (it1 != it2); - it2.swap(end); - assert (it1 == it2); -} - - -void TextIteratorTest::setUp() -{ -} - - -void TextIteratorTest::tearDown() -{ -} - - -CppUnit::Test* TextIteratorTest::suite() -{ - CppUnit::TestSuite* pSuite = new CppUnit::TestSuite("TextIteratorTest"); - - CppUnit_addTest(pSuite, TextIteratorTest, testEmptyLatin1); - CppUnit_addTest(pSuite, TextIteratorTest, testOneLatin1); - CppUnit_addTest(pSuite, TextIteratorTest, testLatin1); - CppUnit_addTest(pSuite, TextIteratorTest, testEmptyUTF8); - CppUnit_addTest(pSuite, TextIteratorTest, testOneUTF8); - CppUnit_addTest(pSuite, TextIteratorTest, testUTF8); - CppUnit_addTest(pSuite, TextIteratorTest, testUTF8Supplementary); - CppUnit_addTest(pSuite, TextIteratorTest, testUTF16Supplementary); - CppUnit_addTest(pSuite, TextIteratorTest, testSwap); - - return pSuite; -} diff --git a/contrib/libpoco/Foundation/testsuite/src/TextIteratorTest.h b/contrib/libpoco/Foundation/testsuite/src/TextIteratorTest.h deleted file mode 100644 index e1760a92ce2..00000000000 --- a/contrib/libpoco/Foundation/testsuite/src/TextIteratorTest.h +++ /dev/null @@ -1,48 +0,0 @@ -// -// TextIteratorTest.h -// -// $Id: //poco/1.4/Foundation/testsuite/src/TextIteratorTest.h#1 $ -// -// Definition of the TextIteratorTest class. -// -// Copyright (c) 2004-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef TextIteratorTest_INCLUDED -#define TextIteratorTest_INCLUDED - - -#include "Poco/Foundation.h" -#include "CppUnit/TestCase.h" - - -class TextIteratorTest: public CppUnit::TestCase -{ -public: - TextIteratorTest(const std::string& name); - ~TextIteratorTest(); - - void testEmptyLatin1(); - void testOneLatin1(); - void testLatin1(); - void testEmptyUTF8(); - void testOneUTF8(); - void testUTF8(); - void testUTF8Supplementary(); - void testUTF16Supplementary(); - void testSwap(); - - void setUp(); - void tearDown(); - - static CppUnit::Test* suite(); - -private: -}; - - -#endif // TextIteratorTest_INCLUDED diff --git a/contrib/libpoco/Foundation/testsuite/src/TextTestSuite.cpp b/contrib/libpoco/Foundation/testsuite/src/TextTestSuite.cpp deleted file mode 100644 index 678a0aeee0f..00000000000 --- a/contrib/libpoco/Foundation/testsuite/src/TextTestSuite.cpp +++ /dev/null @@ -1,39 +0,0 @@ -// -// TextTestSuite.cpp -// -// $Id: //poco/1.4/Foundation/testsuite/src/TextTestSuite.cpp#1 $ -// -// Copyright (c) 2004-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "TextTestSuite.h" -#include "TextIteratorTest.h" -#include "TextBufferIteratorTest.h" -#include "TextConverterTest.h" -#include "StreamConverterTest.h" -#include "TextEncodingTest.h" -#include "UTF8StringTest.h" -#ifndef POCO_NO_WSTRING -#include "UnicodeConverterTest.h" -#endif - -CppUnit::Test* TextTestSuite::suite() -{ - CppUnit::TestSuite* pSuite = new CppUnit::TestSuite("TextTestSuite"); - - pSuite->addTest(TextIteratorTest::suite()); - pSuite->addTest(TextBufferIteratorTest::suite()); - pSuite->addTest(TextConverterTest::suite()); - pSuite->addTest(StreamConverterTest::suite()); - pSuite->addTest(TextEncodingTest::suite()); - pSuite->addTest(UTF8StringTest::suite()); -#ifndef POCO_NO_WSTRING - pSuite->addTest(UnicodeConverterTest::suite()); -#endif - - return pSuite; -} diff --git a/contrib/libpoco/Foundation/testsuite/src/TextTestSuite.h b/contrib/libpoco/Foundation/testsuite/src/TextTestSuite.h deleted file mode 100644 index 7181254c301..00000000000 --- a/contrib/libpoco/Foundation/testsuite/src/TextTestSuite.h +++ /dev/null @@ -1,29 +0,0 @@ -// -// TextTestSuite.h -// -// $Id: //poco/1.4/Foundation/testsuite/src/TextTestSuite.h#1 $ -// -// Definition of the TextTestSuite class. -// -// Copyright (c) 2004-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef TextTestSuite_INCLUDED -#define TextTestSuite_INCLUDED - - -#include "CppUnit/TestSuite.h" - - -class TextTestSuite -{ -public: - static CppUnit::Test* suite(); -}; - - -#endif // TextTestSuite_INCLUDED diff --git a/contrib/libpoco/Foundation/testsuite/src/ThreadLocalTest.cpp b/contrib/libpoco/Foundation/testsuite/src/ThreadLocalTest.cpp deleted file mode 100644 index 61fc60351ef..00000000000 --- a/contrib/libpoco/Foundation/testsuite/src/ThreadLocalTest.cpp +++ /dev/null @@ -1,124 +0,0 @@ -// -// ThreadLocalTest.cpp -// -// $Id: //poco/1.4/Foundation/testsuite/src/ThreadLocalTest.cpp#1 $ -// -// Copyright (c) 2004-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "ThreadLocalTest.h" -#include "CppUnit/TestCaller.h" -#include "CppUnit/TestSuite.h" -#include "Poco/ThreadLocal.h" -#include "Poco/Thread.h" -#include "Poco/Runnable.h" - - -using Poco::ThreadLocal; -using Poco::Thread; -using Poco::Runnable; - - -class TLTestRunnable: public Runnable -{ -public: - TLTestRunnable(int n): _n(n) - { - } - - void run() - { - *_count = 0; - for (int i = 0; i < _n; ++i) - ++(*_count); - _result = *_count; - } - - int result() - { - return _result; - } - -private: - int _n; - int _result; - static ThreadLocal _count; -}; - - -struct TLTestStruct -{ - int i; - std::string s; -}; - - -ThreadLocal TLTestRunnable::_count; - - -ThreadLocalTest::ThreadLocalTest(const std::string& name): CppUnit::TestCase(name) -{ -} - - -ThreadLocalTest::~ThreadLocalTest() -{ -} - - -void ThreadLocalTest::testLocality() -{ - TLTestRunnable r1(5000); - TLTestRunnable r2(7500); - TLTestRunnable r3(6000); - Thread t1; - Thread t2; - Thread t3; - t1.start(r1); - t2.start(r2); - t3.start(r3); - t1.join(); - t2.join(); - t3.join(); - - assert (r1.result() == 5000); - assert (r2.result() == 7500); - assert (r3.result() == 6000); -} - - -void ThreadLocalTest::testAccessors() -{ - ThreadLocal ts; - ts->i = 100; - ts->s = "foo"; - assert ((*ts).i == 100); - assert ((*ts).s == "foo"); - assert (ts.get().i == 100); - assert (ts.get().s == "foo"); -} - - -void ThreadLocalTest::setUp() -{ -} - - -void ThreadLocalTest::tearDown() -{ -} - - -CppUnit::Test* ThreadLocalTest::suite() -{ - CppUnit::TestSuite* pSuite = new CppUnit::TestSuite("ThreadLocalTest"); - - CppUnit_addTest(pSuite, ThreadLocalTest, testLocality); - CppUnit_addTest(pSuite, ThreadLocalTest, testAccessors); - - return pSuite; -} diff --git a/contrib/libpoco/Foundation/testsuite/src/ThreadLocalTest.h b/contrib/libpoco/Foundation/testsuite/src/ThreadLocalTest.h deleted file mode 100644 index e2656ed5c7c..00000000000 --- a/contrib/libpoco/Foundation/testsuite/src/ThreadLocalTest.h +++ /dev/null @@ -1,41 +0,0 @@ -// -// ThreadLocalTest.h -// -// $Id: //poco/1.4/Foundation/testsuite/src/ThreadLocalTest.h#1 $ -// -// Definition of the ThreadLocalTest class. -// -// Copyright (c) 2004-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef ThreadLocalTest_INCLUDED -#define ThreadLocalTest_INCLUDED - - -#include "Poco/Foundation.h" -#include "CppUnit/TestCase.h" - - -class ThreadLocalTest: public CppUnit::TestCase -{ -public: - ThreadLocalTest(const std::string& name); - ~ThreadLocalTest(); - - void testLocality(); - void testAccessors(); - - void setUp(); - void tearDown(); - - static CppUnit::Test* suite(); - -private: -}; - - -#endif // ThreadLocalTest_INCLUDED diff --git a/contrib/libpoco/Foundation/testsuite/src/ThreadPoolTest.cpp b/contrib/libpoco/Foundation/testsuite/src/ThreadPoolTest.cpp deleted file mode 100644 index 59da2160b0a..00000000000 --- a/contrib/libpoco/Foundation/testsuite/src/ThreadPoolTest.cpp +++ /dev/null @@ -1,164 +0,0 @@ -// -// ThreadPoolTest.cpp -// -// $Id: //poco/1.4/Foundation/testsuite/src/ThreadPoolTest.cpp#1 $ -// -// Copyright (c) 2004-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "ThreadPoolTest.h" -#include "CppUnit/TestCaller.h" -#include "CppUnit/TestSuite.h" -#include "Poco/ThreadPool.h" -#include "Poco/RunnableAdapter.h" -#include "Poco/Exception.h" -#include "Poco/Thread.h" - - -using Poco::ThreadPool; -using Poco::RunnableAdapter; -using Poco::Thread; - - -ThreadPoolTest::ThreadPoolTest(const std::string& name): CppUnit::TestCase(name), _event(false) -{ -} - - -ThreadPoolTest::~ThreadPoolTest() -{ -} - - -void ThreadPoolTest::testThreadPool() -{ - ThreadPool pool(2, 3, 3); - pool.setStackSize(1); - - assert (pool.allocated() == 2); - assert (pool.used() == 0); - assert (pool.capacity() == 3); - assert (pool.available() == 3); - pool.addCapacity(1); - assert (pool.allocated() == 2); - assert (pool.used() == 0); - assert (pool.capacity() == 4); - assert (pool.available() == 4); - - RunnableAdapter ra(*this, &ThreadPoolTest::count); - pool.start(ra); - assert (pool.allocated() == 2); - assert (pool.used() == 1); - assert (pool.capacity() == 4); - assert (pool.available() == 3); - - pool.start(ra); - assert (pool.allocated() == 2); - assert (pool.used() == 2); - assert (pool.capacity() == 4); - assert (pool.available() == 2); - - pool.start(ra); - assert (pool.allocated() == 3); - assert (pool.used() == 3); - assert (pool.capacity() == 4); - assert (pool.available() == 1); - - pool.start(ra); - assert (pool.allocated() == 4); - assert (pool.used() == 4); - assert (pool.capacity() == 4); - assert (pool.available() == 0); - - try - { - pool.start(ra); - failmsg("thread pool exhausted - must throw exception"); - } - catch (Poco::NoThreadAvailableException&) - { - } - catch (...) - { - failmsg("wrong exception thrown"); - } - - _event.set(); // go!!! - pool.joinAll(); - - assert (_count == 40000); - - assert (pool.allocated() == 4); - assert (pool.used() == 0); - assert (pool.capacity() == 4); - assert (pool.available() == 4); - - Thread::sleep(4000); - - pool.collect(); - assert (pool.allocated() == 2); - assert (pool.used() == 0); - assert (pool.capacity() == 4); - assert (pool.available() == 4); - - _count = 0; - _event.reset(); - pool.start(ra); - assert (pool.allocated() == 2); - assert (pool.used() == 1); - assert (pool.capacity() == 4); - assert (pool.available() == 3); - - pool.start(ra); - assert (pool.allocated() == 2); - assert (pool.used() == 2); - assert (pool.capacity() == 4); - assert (pool.available() == 2); - _event.set(); // go!!! - pool.joinAll(); - - assert (_count == 20000); - - assert (pool.allocated() == 2); - assert (pool.used() == 0); - assert (pool.capacity() == 4); - assert (pool.available() == 4); -} - - -void ThreadPoolTest::setUp() -{ - _event.reset(); - _count = 0; -} - - -void ThreadPoolTest::tearDown() -{ -} - - -void ThreadPoolTest::count() -{ - _event.wait(); - for (int i = 0; i < 10000; ++i) - { - _mutex.lock(); - ++_count; - _mutex.unlock(); - } -} - - -CppUnit::Test* ThreadPoolTest::suite() -{ - CppUnit::TestSuite* pSuite = new CppUnit::TestSuite("ThreadPoolTest"); - - CppUnit_addTest(pSuite, ThreadPoolTest, testThreadPool); - - return pSuite; -} diff --git a/contrib/libpoco/Foundation/testsuite/src/ThreadPoolTest.h b/contrib/libpoco/Foundation/testsuite/src/ThreadPoolTest.h deleted file mode 100644 index 80e662bd7e7..00000000000 --- a/contrib/libpoco/Foundation/testsuite/src/ThreadPoolTest.h +++ /dev/null @@ -1,48 +0,0 @@ -// -// ThreadPoolTest.h -// -// $Id: //poco/1.4/Foundation/testsuite/src/ThreadPoolTest.h#1 $ -// -// Definition of the ThreadPoolTest class. -// -// Copyright (c) 2004-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef ThreadPoolTest_INCLUDED -#define ThreadPoolTest_INCLUDED - - -#include "Poco/Foundation.h" -#include "CppUnit/TestCase.h" -#include "Poco/Event.h" -#include "Poco/Mutex.h" - - -class ThreadPoolTest: public CppUnit::TestCase -{ -public: - ThreadPoolTest(const std::string& name); - ~ThreadPoolTest(); - - void testThreadPool(); - - void setUp(); - void tearDown(); - - static CppUnit::Test* suite(); - -protected: - void count(); - -private: - Poco::FastMutex _mutex; - Poco::Event _event; - int _count; -}; - - -#endif // ThreadPoolTest_INCLUDED diff --git a/contrib/libpoco/Foundation/testsuite/src/ThreadTest.cpp b/contrib/libpoco/Foundation/testsuite/src/ThreadTest.cpp deleted file mode 100644 index e9fa730720b..00000000000 --- a/contrib/libpoco/Foundation/testsuite/src/ThreadTest.cpp +++ /dev/null @@ -1,483 +0,0 @@ -// -// ThreadTest.cpp -// -// $Id: //poco/1.4/Foundation/testsuite/src/ThreadTest.cpp#1 $ -// -// Copyright (c) 2004-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "ThreadTest.h" -#include "CppUnit/TestCaller.h" -#include "CppUnit/TestSuite.h" -#include "Poco/Thread.h" -#include "Poco/Runnable.h" -#include "Poco/ThreadTarget.h" -#include "Poco/Event.h" -#include "Poco/Timestamp.h" -#include "Poco/Timespan.h" -//#include -#if defined(__sun) && defined(__SVR4) && !defined(__EXTENSIONS__) -#define __EXTENSIONS__ -#endif -#include - - -using Poco::Thread; -using Poco::Runnable; -using Poco::ThreadTarget; -using Poco::Event; - - -class MyRunnable: public Runnable -{ -public: - MyRunnable(): _ran(false) - { - } - - void run() - { - Thread* pThread = Thread::current(); - if (pThread) - _threadName = pThread->name(); - _ran = true; - _event.wait(); - } - - bool ran() const - { - return _ran; - } - - const std::string& threadName() const - { - return _threadName; - } - - void notify() - { - _event.set(); - } - - static void staticFunc() - { - ++_staticVar; - } - - static int _staticVar; - -private: - bool _ran; - std::string _threadName; - Event _event; -}; - - -int MyRunnable::_staticVar = 0; - - -void freeFunc() -{ - ++MyRunnable::_staticVar; -} - - -void freeFunc(void* pData) -{ - MyRunnable::_staticVar += *reinterpret_cast(pData); -} - - -class NonJoinRunnable : public Runnable -{ -public: - NonJoinRunnable() : _finished(false) - { - } - - void run() - { - _finished = true; - } - - bool finished() const - { - return _finished; - } - -private: - bool _finished; -}; - - -class TrySleepRunnable : public Runnable -{ -public: - TrySleepRunnable() : _counter(0), _sleepy(true) - { - } - - void run() - { - _sleepy = !Thread::trySleep(300000); - ++_counter; - _sleepy = !Thread::trySleep(300000); - ++_counter; - _sleepy = !Thread::trySleep(100); - ++_counter; - } - - int counter() const - { - return _counter; - } - - bool isSleepy() const - { - return _sleepy; - } - -private: - int _counter; - bool _sleepy; -}; - - -ThreadTest::ThreadTest(const std::string& name): CppUnit::TestCase(name) -{ -} - - -ThreadTest::~ThreadTest() -{ -} - - -void ThreadTest::testThread() -{ - Thread thread; - MyRunnable r; - assert (!thread.isRunning()); - thread.start(r); - Thread::sleep(200); - assert (thread.isRunning()); - r.notify(); - thread.join(); - assert (!thread.isRunning()); - assert (r.ran()); - assert (!r.threadName().empty()); -} - - -void ThreadTest::testNamedThread() -{ - Thread thread("MyThread"); - MyRunnable r; - thread.start(r); - r.notify(); - thread.join(); - assert (r.ran()); - assert (r.threadName() == "MyThread"); -} - - -void ThreadTest::testCurrent() -{ - assertNullPtr (Thread::current()); -} - - -void ThreadTest::testThreads() -{ - Thread thread1("Thread1"); - Thread thread2("Thread2"); - Thread thread3("Thread3"); - Thread thread4("Thread4"); - - MyRunnable r1; - MyRunnable r2; - MyRunnable r3; - MyRunnable r4; - assert (!thread1.isRunning()); - assert (!thread2.isRunning()); - assert (!thread3.isRunning()); - assert (!thread4.isRunning()); - thread1.start(r1); - Thread::sleep(200); - assert (thread1.isRunning()); - assert (!thread2.isRunning()); - assert (!thread3.isRunning()); - assert (!thread4.isRunning()); - thread2.start(r2); - thread3.start(r3); - thread4.start(r4); - Thread::sleep(200); - assert (thread1.isRunning()); - assert (thread2.isRunning()); - assert (thread3.isRunning()); - assert (thread4.isRunning()); - r4.notify(); - thread4.join(); - assert (!thread4.isRunning()); - assert (thread1.isRunning()); - assert (thread2.isRunning()); - assert (thread3.isRunning()); - r3.notify(); - thread3.join(); - assert (!thread3.isRunning()); - r2.notify(); - thread2.join(); - assert (!thread2.isRunning()); - r1.notify(); - thread1.join(); - assert (!thread1.isRunning()); - assert (r1.ran()); - assert (r1.threadName() == "Thread1"); - assert (r2.ran()); - assert (r2.threadName() == "Thread2"); - assert (r3.ran()); - assert (r3.threadName() == "Thread3"); - assert (r4.ran()); - assert (r4.threadName() == "Thread4"); -} - - -void ThreadTest::testJoin() -{ - Thread thread; - MyRunnable r; - assert (!thread.isRunning()); - thread.start(r); - Thread::sleep(200); - assert (thread.isRunning()); - assert (!thread.tryJoin(100)); - r.notify(); - assert (thread.tryJoin(500)); - assert (!thread.isRunning()); -} - - -void ThreadTest::testNotJoin() -{ - Thread thread; - NonJoinRunnable r; - thread.start(r); - - while (!r.finished()) - { - Thread::sleep(10); - } - - Thread::sleep(100); - assert (!thread.isRunning()); -} - - -void ThreadTest::testTrySleep() -{ - Thread thread; - TrySleepRunnable r; - assert(r.isSleepy()); - assert(!thread.isRunning()); - assert(r.counter() == 0); - thread.start(r); - assert(thread.isRunning()); - assert(r.counter() == 0); - assert(r.isSleepy()); - Thread::sleep(100); - assert(r.counter() == 0); - assert(r.isSleepy()); - thread.wakeUp(); Thread::sleep(10); - assert(r.counter() == 1); - assert(r.isSleepy()); - Thread::sleep(100); - assert(r.counter() == 1); - thread.wakeUp(); Thread::sleep(10); - assert(r.counter() == 2); - assert(r.isSleepy()); - Thread::sleep(200); - assert(r.counter() == 3); - assert(!r.isSleepy()); - assert(!thread.isRunning()); - thread.wakeUp(); - assert(!thread.isRunning()); -} - - -void ThreadTest::testNotRun() -{ - Thread thread; -} - - -void ThreadTest::testNotRunJoin() -{ - Thread thread; - thread.join(); -} - - -void ThreadTest::testThreadTarget() -{ - ThreadTarget te(&MyRunnable::staticFunc); - Thread thread; - - assert (!thread.isRunning()); - - int tmp = MyRunnable::_staticVar; - thread.start(te); - thread.join(); - assert (tmp + 1 == MyRunnable::_staticVar); - - ThreadTarget te1(freeFunc); - assert (!thread.isRunning()); - - tmp = MyRunnable::_staticVar; - thread.start(te1); - thread.join(); - assert (tmp + 1 == MyRunnable::_staticVar); -} - - -void ThreadTest::testThreadFunction() -{ - Thread thread; - - assert (!thread.isRunning()); - - int tmp = MyRunnable::_staticVar; - thread.start(freeFunc, &tmp); - thread.join(); - assert (tmp * 2 == MyRunnable::_staticVar); - - assert (!thread.isRunning()); - - tmp = MyRunnable::_staticVar = 0; - thread.start(freeFunc, &tmp); - thread.join(); - assert (0 == MyRunnable::_staticVar); -} - - -struct Functor -{ - void operator () () - { - ++MyRunnable::_staticVar; - } -}; - - -void ThreadTest::testThreadFunctor() -{ - Thread thread; - - assert (!thread.isRunning()); - - MyRunnable::_staticVar = 0; - thread.startFunc(Functor()); - thread.join(); - assert (1 == MyRunnable::_staticVar); - - assert (!thread.isRunning()); - -#if __cplusplus >= 201103L - - Thread thread2; - - assert (!thread2.isRunning()); - - MyRunnable::_staticVar = 0; - thread.startFunc([] () {MyRunnable::_staticVar++;}); - thread.join(); - assert (1 == MyRunnable::_staticVar); - - assert (!thread2.isRunning()); - -#endif -} - - -void ThreadTest::testThreadStackSize() -{ - int stackSize = 50000000; - - Thread thread; - - assert (0 == thread.getStackSize()); - thread.setStackSize(stackSize); - assert (stackSize <= thread.getStackSize()); - int tmp = MyRunnable::_staticVar; - thread.start(freeFunc, &tmp); - thread.join(); - assert (tmp * 2 == MyRunnable::_staticVar); - - stackSize = 1; - thread.setStackSize(stackSize); - -#if !defined(POCO_OS_FAMILY_BSD) // on BSD family, stack size is rounded - #ifdef PTHREAD_STACK_MIN - assert (PTHREAD_STACK_MIN == thread.getStackSize()); - #else - assert (stackSize >= thread.getStackSize()); - #endif -#endif - - tmp = MyRunnable::_staticVar; - thread.start(freeFunc, &tmp); - thread.join(); - assert (tmp * 2 == MyRunnable::_staticVar); - - thread.setStackSize(0); - assert (0 == thread.getStackSize()); - tmp = MyRunnable::_staticVar; - thread.start(freeFunc, &tmp); - thread.join(); - assert (tmp * 2 == MyRunnable::_staticVar); -} - - -void ThreadTest::testSleep() -{ - Poco::Timestamp start; - Thread::sleep(200); - Poco::Timespan elapsed = start.elapsed(); - assert (elapsed.totalMilliseconds() >= 190 && elapsed.totalMilliseconds() < 250); -} - - -void ThreadTest::setUp() -{ -} - - -void ThreadTest::tearDown() -{ -} - - -CppUnit::Test* ThreadTest::suite() -{ - CppUnit::TestSuite* pSuite = new CppUnit::TestSuite("ThreadTest"); - - CppUnit_addTest(pSuite, ThreadTest, testThread); - CppUnit_addTest(pSuite, ThreadTest, testNamedThread); - CppUnit_addTest(pSuite, ThreadTest, testCurrent); - CppUnit_addTest(pSuite, ThreadTest, testThreads); - CppUnit_addTest(pSuite, ThreadTest, testJoin); - CppUnit_addTest(pSuite, ThreadTest, testNotJoin); - CppUnit_addTest(pSuite, ThreadTest, testNotRun); - CppUnit_addTest(pSuite, ThreadTest, testNotRunJoin); - CppUnit_addTest(pSuite, ThreadTest, testTrySleep); - CppUnit_addTest(pSuite, ThreadTest, testThreadTarget); - CppUnit_addTest(pSuite, ThreadTest, testThreadFunction); - CppUnit_addTest(pSuite, ThreadTest, testThreadFunctor); - CppUnit_addTest(pSuite, ThreadTest, testThreadStackSize); - CppUnit_addTest(pSuite, ThreadTest, testSleep); - - return pSuite; -} diff --git a/contrib/libpoco/Foundation/testsuite/src/ThreadTest.h b/contrib/libpoco/Foundation/testsuite/src/ThreadTest.h deleted file mode 100644 index 3e9f50dae18..00000000000 --- a/contrib/libpoco/Foundation/testsuite/src/ThreadTest.h +++ /dev/null @@ -1,53 +0,0 @@ -// -// ThreadTest.h -// -// $Id: //poco/1.4/Foundation/testsuite/src/ThreadTest.h#1 $ -// -// Definition of the ThreadTest class. -// -// Copyright (c) 2004-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef ThreadTest_INCLUDED -#define ThreadTest_INCLUDED - - -#include "Poco/Foundation.h" -#include "CppUnit/TestCase.h" - - -class ThreadTest: public CppUnit::TestCase -{ -public: - ThreadTest(const std::string& name); - ~ThreadTest(); - - void testThread(); - void testNamedThread(); - void testCurrent(); - void testThreads(); - void testJoin(); - void testNotJoin(); - void testNotRun(); - void testNotRunJoin(); - void testTrySleep(); - void testThreadTarget(); - void testThreadFunction(); - void testThreadFunctor(); - void testThreadStackSize(); - void testSleep(); - - void setUp(); - void tearDown(); - - static CppUnit::Test* suite(); - -private: -}; - - -#endif // ThreadTest_INCLUDED diff --git a/contrib/libpoco/Foundation/testsuite/src/ThreadingTestSuite.cpp b/contrib/libpoco/Foundation/testsuite/src/ThreadingTestSuite.cpp deleted file mode 100644 index 481396b8f04..00000000000 --- a/contrib/libpoco/Foundation/testsuite/src/ThreadingTestSuite.cpp +++ /dev/null @@ -1,42 +0,0 @@ -// -// ThreadingTestSuite.cpp -// -// $Id: //poco/1.4/Foundation/testsuite/src/ThreadingTestSuite.cpp#1 $ -// -// Copyright (c) 2004-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "ThreadingTestSuite.h" -#include "ThreadTest.h" -#include "SemaphoreTest.h" -#include "RWLockTest.h" -#include "ThreadPoolTest.h" -#include "TimerTest.h" -#include "ThreadLocalTest.h" -#include "ActivityTest.h" -#include "ActiveMethodTest.h" -#include "ActiveDispatcherTest.h" -#include "ConditionTest.h" - - -CppUnit::Test* ThreadingTestSuite::suite() -{ - CppUnit::TestSuite* pSuite = new CppUnit::TestSuite("ThreadingTestSuite"); - - pSuite->addTest(ThreadTest::suite()); - pSuite->addTest(SemaphoreTest::suite()); - pSuite->addTest(RWLockTest::suite()); - pSuite->addTest(ThreadPoolTest::suite()); - pSuite->addTest(TimerTest::suite()); - pSuite->addTest(ThreadLocalTest::suite()); - pSuite->addTest(ActivityTest::suite()); - pSuite->addTest(ActiveMethodTest::suite()); - pSuite->addTest(ActiveDispatcherTest::suite()); - pSuite->addTest(ConditionTest::suite()); - - return pSuite; -} diff --git a/contrib/libpoco/Foundation/testsuite/src/ThreadingTestSuite.h b/contrib/libpoco/Foundation/testsuite/src/ThreadingTestSuite.h deleted file mode 100644 index c42a17cb58f..00000000000 --- a/contrib/libpoco/Foundation/testsuite/src/ThreadingTestSuite.h +++ /dev/null @@ -1,29 +0,0 @@ -// -// ThreadingTestSuite.h -// -// $Id: //poco/1.4/Foundation/testsuite/src/ThreadingTestSuite.h#1 $ -// -// Definition of the ThreadingTestSuite class. -// -// Copyright (c) 2004-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef ThreadingTestSuite_INCLUDED -#define ThreadingTestSuite_INCLUDED - - -#include "CppUnit/TestSuite.h" - - -class ThreadingTestSuite -{ -public: - static CppUnit::Test* suite(); -}; - - -#endif // ThreadingTestSuite_INCLUDED diff --git a/contrib/libpoco/Foundation/testsuite/src/TimedNotificationQueueTest.cpp b/contrib/libpoco/Foundation/testsuite/src/TimedNotificationQueueTest.cpp deleted file mode 100644 index 7204c983040..00000000000 --- a/contrib/libpoco/Foundation/testsuite/src/TimedNotificationQueueTest.cpp +++ /dev/null @@ -1,271 +0,0 @@ -// -// TimedNotificationQueueTest.cpp -// -// $Id: //poco/1.4/Foundation/testsuite/src/TimedNotificationQueueTest.cpp#1 $ -// -// Copyright (c) 2009, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "TimedNotificationQueueTest.h" -#include "CppUnit/TestCaller.h" -#include "CppUnit/TestSuite.h" -#include "Poco/TimedNotificationQueue.h" -#include "Poco/Notification.h" -#include "Poco/Timestamp.h" - - -using Poco::TimedNotificationQueue; -using Poco::Notification; -using Poco::Timestamp; - - -namespace -{ - class QTestNotification: public Notification - { - public: - QTestNotification(const std::string& data): _data(data) - { - } - ~QTestNotification() - { - } - const std::string& data() const - { - return _data; - } - - private: - std::string _data; - }; -} - - -TimedNotificationQueueTest::TimedNotificationQueueTest(const std::string& name): CppUnit::TestCase(name) -{ -} - - -TimedNotificationQueueTest::~TimedNotificationQueueTest() -{ -} - - -void TimedNotificationQueueTest::testDequeue() -{ - TimedNotificationQueue queue; - assert (queue.empty()); - assert (queue.size() == 0); - Notification* pNf = queue.dequeueNotification(); - assertNullPtr(pNf); - queue.enqueueNotification(new Notification, Timestamp()); - assert (!queue.empty()); - assert (queue.size() == 1); - pNf = queue.dequeueNotification(); - assertNotNullPtr(pNf); - assert (queue.empty()); - assert (queue.size() == 0); - pNf->release(); - - Poco::Timestamp ts1; - ts1 += 100000; - Poco::Timestamp ts2; - ts2 += 200000; - Poco::Timestamp ts3; - ts3 += 300000; - Poco::Timestamp ts4; - ts4 += 400000; - - queue.enqueueNotification(new QTestNotification("first"), ts1); - queue.enqueueNotification(new QTestNotification("fourth"), ts4); - queue.enqueueNotification(new QTestNotification("third"), ts3); - queue.enqueueNotification(new QTestNotification("second"), ts2); - assert (!queue.empty()); - assert (queue.size() == 4); - QTestNotification* pTNf = 0; - while (!pTNf) - { - pTNf = dynamic_cast(queue.dequeueNotification()); - } - assertNotNullPtr(pTNf); - assert (pTNf->data() == "first"); - pTNf->release(); - assert (ts1.elapsed() >= 0); - assert (!queue.empty()); - assert (queue.size() == 3); - - pTNf = 0; - while (!pTNf) - { - pTNf = dynamic_cast(queue.dequeueNotification()); - } - assertNotNullPtr(pTNf); - assert (pTNf->data() == "second"); - pTNf->release(); - assert (ts2.elapsed() >= 0); - assert (!queue.empty()); - assert (queue.size() == 2); - - pTNf = 0; - while (!pTNf) - { - pTNf = dynamic_cast(queue.dequeueNotification()); - } - assertNotNullPtr(pTNf); - assert (pTNf->data() == "third"); - pTNf->release(); - assert (ts3.elapsed() >= 0); - assert (!queue.empty()); - assert (queue.size() == 1); - - pTNf = 0; - while (!pTNf) - { - pTNf = dynamic_cast(queue.dequeueNotification()); - } - assertNotNullPtr(pTNf); - assert (pTNf->data() == "fourth"); - pTNf->release(); - assert (ts4.elapsed() >= 0); - assert (queue.empty()); - assert (queue.size() == 0); - - pNf = queue.dequeueNotification(); - assertNullPtr(pNf); -} - - -void TimedNotificationQueueTest::testWaitDequeue() -{ - TimedNotificationQueue queue; - - Poco::Timestamp ts1; - ts1 += 100000; - Poco::Timestamp ts2; - ts2 += 200000; - Poco::Timestamp ts3; - ts3 += 300000; - Poco::Timestamp ts4; - ts4 += 400000; - - queue.enqueueNotification(new QTestNotification("first"), ts1); - queue.enqueueNotification(new QTestNotification("fourth"), ts4); - queue.enqueueNotification(new QTestNotification("third"), ts3); - queue.enqueueNotification(new QTestNotification("second"), ts2); - assert (!queue.empty()); - assert (queue.size() == 4); - QTestNotification* pTNf = dynamic_cast(queue.waitDequeueNotification()); - assertNotNullPtr(pTNf); - assert (pTNf->data() == "first"); - pTNf->release(); - assert (ts1.elapsed() >= 0); - assert (!queue.empty()); - assert (queue.size() == 3); - - pTNf = dynamic_cast(queue.waitDequeueNotification()); - assertNotNullPtr(pTNf); - assert (pTNf->data() == "second"); - pTNf->release(); - assert (ts2.elapsed() >= 0); - assert (!queue.empty()); - assert (queue.size() == 2); - - pTNf = dynamic_cast(queue.waitDequeueNotification()); - assertNotNullPtr(pTNf); - assert (pTNf->data() == "third"); - pTNf->release(); - assert (ts3.elapsed() >= 0); - assert (!queue.empty()); - assert (queue.size() == 1); - - pTNf = dynamic_cast(queue.waitDequeueNotification()); - assertNotNullPtr(pTNf); - assert (pTNf->data() == "fourth"); - pTNf->release(); - assert (ts4.elapsed() >= 0); - assert (queue.empty()); - assert (queue.size() == 0); -} - - -void TimedNotificationQueueTest::testWaitDequeueTimeout() -{ - TimedNotificationQueue queue; - - Poco::Timestamp ts1; - ts1 += 200000; - Poco::Timestamp ts2; - ts2 += 400000; - Poco::Timestamp ts3; - ts3 += 600000; - Poco::Timestamp ts4; - ts4 += 800000; - - queue.enqueueNotification(new QTestNotification("first"), ts1); - queue.enqueueNotification(new QTestNotification("fourth"), ts4); - queue.enqueueNotification(new QTestNotification("third"), ts3); - queue.enqueueNotification(new QTestNotification("second"), ts2); - assert (!queue.empty()); - assert (queue.size() == 4); - QTestNotification* pTNf = dynamic_cast(queue.waitDequeueNotification(10)); - assertNullPtr(pTNf); - pTNf = dynamic_cast(queue.waitDequeueNotification(20)); - assertNullPtr(pTNf); - pTNf = dynamic_cast(queue.waitDequeueNotification(200)); - assertNotNullPtr(pTNf); - assert (pTNf->data() == "first"); - pTNf->release(); - assert (ts1.elapsed() >= 0); - assert (!queue.empty()); - assert (queue.size() == 3); - - pTNf = dynamic_cast(queue.waitDequeueNotification(220)); - assertNotNullPtr(pTNf); - assert (pTNf->data() == "second"); - pTNf->release(); - assert (ts2.elapsed() >= 0); - assert (!queue.empty()); - assert (queue.size() == 2); - - pTNf = dynamic_cast(queue.waitDequeueNotification(220)); - assertNotNullPtr(pTNf); - assert (pTNf->data() == "third"); - pTNf->release(); - assert (ts3.elapsed() >= 0); - assert (!queue.empty()); - assert (queue.size() == 1); - - pTNf = dynamic_cast(queue.waitDequeueNotification(220)); - assertNotNullPtr(pTNf); - assert (pTNf->data() == "fourth"); - pTNf->release(); - assert (ts1.elapsed() >= 0); - assert (queue.empty()); - assert (queue.size() == 0); -} - - -void TimedNotificationQueueTest::setUp() -{ -} - - -void TimedNotificationQueueTest::tearDown() -{ -} - - -CppUnit::Test* TimedNotificationQueueTest::suite() -{ - CppUnit::TestSuite* pSuite = new CppUnit::TestSuite("TimedNotificationQueueTest"); - - CppUnit_addTest(pSuite, TimedNotificationQueueTest, testDequeue); - CppUnit_addTest(pSuite, TimedNotificationQueueTest, testWaitDequeue); - CppUnit_addTest(pSuite, TimedNotificationQueueTest, testWaitDequeueTimeout); - - return pSuite; -} diff --git a/contrib/libpoco/Foundation/testsuite/src/TimedNotificationQueueTest.h b/contrib/libpoco/Foundation/testsuite/src/TimedNotificationQueueTest.h deleted file mode 100644 index c5eeb2c7c78..00000000000 --- a/contrib/libpoco/Foundation/testsuite/src/TimedNotificationQueueTest.h +++ /dev/null @@ -1,48 +0,0 @@ -// -// TimedNotificationQueueTest.h -// -// $Id: //poco/1.4/Foundation/testsuite/src/TimedNotificationQueueTest.h#1 $ -// -// Definition of the TimedNotificationQueueTest class. -// -// Copyright (c) 2009, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef TimedNotificationQueueTest_INCLUDED -#define TimedNotificationQueueTest_INCLUDED - - -#include "Poco/Foundation.h" -#include "CppUnit/TestCase.h" -#include "Poco/TimedNotificationQueue.h" -#include "Poco/Mutex.h" -#include - - -class TimedNotificationQueueTest: public CppUnit::TestCase -{ -public: - TimedNotificationQueueTest(const std::string& name); - ~TimedNotificationQueueTest(); - - void testDequeue(); - void testWaitDequeue(); - void testWaitDequeueTimeout(); - - void setUp(); - void tearDown(); - - static CppUnit::Test* suite(); - -protected: - void work(); - -private: -}; - - -#endif // TimedNotificationQueueTest_INCLUDED diff --git a/contrib/libpoco/Foundation/testsuite/src/TimerTest.cpp b/contrib/libpoco/Foundation/testsuite/src/TimerTest.cpp deleted file mode 100644 index ecdef30be6f..00000000000 --- a/contrib/libpoco/Foundation/testsuite/src/TimerTest.cpp +++ /dev/null @@ -1,98 +0,0 @@ -// -// TimerTest.cpp -// -// $Id: //poco/1.4/Foundation/testsuite/src/TimerTest.cpp#1 $ -// -// Copyright (c) 2004-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "TimerTest.h" -#include "CppUnit/TestCaller.h" -#include "CppUnit/TestSuite.h" -#include "Poco/Thread.h" -#include "Poco/Stopwatch.h" - - -using Poco::Timer; -using Poco::TimerCallback; -using Poco::Thread; -using Poco::Stopwatch; - - -TimerTest::TimerTest(const std::string& name): CppUnit::TestCase(name) -{ -} - - -TimerTest::~TimerTest() -{ -} - - -void TimerTest::testTimer() -{ - Timer t(100, 200); - assert (t.getStartInterval() == 100); - assert (t.getPeriodicInterval() == 200); - - Stopwatch sw; - TimerCallback tc(*this, &TimerTest::onTimer); - sw.start(); - t.start(tc); - _event.wait(); - sw.stop(); - assert (sw.elapsed() >= 80000 && sw.elapsed() < 120000); - sw.restart(); - _event.wait(); - sw.stop(); - assert (sw.elapsed() >= 180000 && sw.elapsed() < 250000); - sw.restart(); - _event.wait(); - sw.stop(); - assert (sw.elapsed() >= 180000 && sw.elapsed() < 250000); - t.stop(); -} - - -void TimerTest::testDuplicateStop() -{ - Timer t(100, 200); - t.stop(); - t.stop(); - - TimerCallback tc(*this, &TimerTest::onTimer); - t.start(tc); - _event.wait(); - t.stop(); - t.stop(); -} - -void TimerTest::setUp() -{ -} - - -void TimerTest::tearDown() -{ -} - - -void TimerTest::onTimer(Timer& timer) -{ - _event.set(); -} - - -CppUnit::Test* TimerTest::suite() -{ - CppUnit::TestSuite* pSuite = new CppUnit::TestSuite("TimerTest"); - - CppUnit_addTest(pSuite, TimerTest, testTimer); - CppUnit_addTest(pSuite, TimerTest, testDuplicateStop); - - return pSuite; -} diff --git a/contrib/libpoco/Foundation/testsuite/src/TimerTest.h b/contrib/libpoco/Foundation/testsuite/src/TimerTest.h deleted file mode 100644 index c137a57b37e..00000000000 --- a/contrib/libpoco/Foundation/testsuite/src/TimerTest.h +++ /dev/null @@ -1,47 +0,0 @@ -// -// TimerTest.h -// -// $Id: //poco/1.4/Foundation/testsuite/src/TimerTest.h#1 $ -// -// Definition of the TimerTest class. -// -// Copyright (c) 2004-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef TimerTest_INCLUDED -#define TimerTest_INCLUDED - - -#include "Poco/Foundation.h" -#include "CppUnit/TestCase.h" -#include "Poco/Timer.h" -#include "Poco/Event.h" - - -class TimerTest: public CppUnit::TestCase -{ -public: - TimerTest(const std::string& name); - ~TimerTest(); - - void testTimer(); - void testDuplicateStop(); - - void setUp(); - void tearDown(); - - static CppUnit::Test* suite(); - -protected: - void onTimer(Poco::Timer& t); - -private: - Poco::Event _event; -}; - - -#endif // TimerTest_INCLUDED diff --git a/contrib/libpoco/Foundation/testsuite/src/TimespanTest.cpp b/contrib/libpoco/Foundation/testsuite/src/TimespanTest.cpp deleted file mode 100644 index 15e8afc7352..00000000000 --- a/contrib/libpoco/Foundation/testsuite/src/TimespanTest.cpp +++ /dev/null @@ -1,160 +0,0 @@ -// -// TimespanTest.cpp -// -// $Id: //poco/1.4/Foundation/testsuite/src/TimespanTest.cpp#1 $ -// -// Copyright (c) 2004-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "TimespanTest.h" -#include "CppUnit/TestCaller.h" -#include "CppUnit/TestSuite.h" -#include "Poco/Timespan.h" - - -using Poco::Timespan; - - -TimespanTest::TimespanTest(const std::string& name): CppUnit::TestCase(name) -{ -} - - -TimespanTest::~TimespanTest() -{ -} - - -void TimespanTest::testConversions() -{ - Timespan ts; - assert (ts.totalMicroseconds() == 0); - ts = Timespan::DAYS; - assert (ts.totalMicroseconds() == Timespan::DAYS); - assert (ts.totalMilliseconds() == 86400000); - assert (ts.totalSeconds() == 86400); - assert (ts.totalMinutes() == 60*24); - assert (ts.totalHours() == 24); - assert (ts.days() == 1); - - assert (ts.microseconds() == 0); - assert (ts.milliseconds() == 0); - assert (ts.seconds() == 0); - assert (ts.minutes() == 0); - assert (ts.hours() == 0); - - ts.assign(2, 12, 30, 10, 123456); - assert (ts.microseconds() == 456); - assert (ts.milliseconds() == 123); - assert (ts.seconds() == 10); - assert (ts.minutes() == 30); - assert (ts.hours() == 12); - assert (ts.days() == 2); - - ts.assign(0, 36, 30, 10, 123456); - assert (ts.microseconds() == 456); - assert (ts.milliseconds() == 123); - assert (ts.useconds() == 123456); - assert (ts.seconds() == 10); - assert (ts.minutes() == 30); - assert (ts.hours() == 12); - assert (ts.days() == 1); - - ts.assign(0, 0, 2190, 10, 123456); - assert (ts.microseconds() == 456); - assert (ts.milliseconds() == 123); - assert (ts.useconds() == 123456); - assert (ts.seconds() == 10); - assert (ts.minutes() == 30); - assert (ts.hours() == 12); - assert (ts.days() == 1); -} - - -void TimespanTest::testComparisons() -{ - Timespan ts1(10000000); - Timespan ts2(20000000); - Timespan ts3(20000000); - - assert (ts1 != ts2); - assert (!(ts1 == ts2)); - assert (ts1 <= ts2); - assert (ts1 < ts2); - assert (ts2 > ts1); - assert (ts2 >= ts1); - - assert (ts2 == ts3); - assert (!(ts2 != ts3)); - assert (ts2 >= ts3); - assert (ts2 <= ts3); - assert (!(ts2 > ts3)); - assert (!(ts2 < ts3)); - - assert (ts1 == 10000000); - assert (ts1 != 20000000); - assert (ts1 <= 10000000); - assert (ts1 <= 20000000); - assert (ts1 >= 10000000); - assert (ts1 >= 5000000); - assert (ts1 < 20000000); - assert (ts1 > 5000000); -} - - -void TimespanTest::testArithmetics() -{ - Timespan ts1(100000000); - Timespan ts2(50000000); - Timespan ts3; - ts3 = ts1 + ts2; - assert (ts3 == 150000000); - ts3 = ts1 + 30000000; - assert (ts3 == 130000000); - ts3 = ts1 - ts2; - assert (ts3 == 50000000); - ts3 = ts1 - 20000000; - assert (ts3 == 80000000); - ts3 += 20000000; - assert (ts3 == ts1); - ts3 -= ts2; - assert (ts3 == ts2); -} - - -void TimespanTest::testSwap() -{ - Timespan ts1(10000000); - Timespan ts2(50000000); - - assert (ts1 < ts2); - ts1.swap(ts2); - assert (ts2 < ts1); -} - - -void TimespanTest::setUp() -{ -} - - -void TimespanTest::tearDown() -{ -} - - -CppUnit::Test* TimespanTest::suite() -{ - CppUnit::TestSuite* pSuite = new CppUnit::TestSuite("TimespanTest"); - - CppUnit_addTest(pSuite, TimespanTest, testConversions); - CppUnit_addTest(pSuite, TimespanTest, testComparisons); - CppUnit_addTest(pSuite, TimespanTest, testArithmetics); - CppUnit_addTest(pSuite, TimespanTest, testSwap); - - return pSuite; -} diff --git a/contrib/libpoco/Foundation/testsuite/src/TimespanTest.h b/contrib/libpoco/Foundation/testsuite/src/TimespanTest.h deleted file mode 100644 index 9625722949e..00000000000 --- a/contrib/libpoco/Foundation/testsuite/src/TimespanTest.h +++ /dev/null @@ -1,43 +0,0 @@ -// -// TimespanTest.h -// -// $Id: //poco/1.4/Foundation/testsuite/src/TimespanTest.h#1 $ -// -// Definition of the TimespanTest class. -// -// Copyright (c) 2004-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef TimespanTest_INCLUDED -#define TimespanTest_INCLUDED - - -#include "Poco/Foundation.h" -#include "CppUnit/TestCase.h" - - -class TimespanTest: public CppUnit::TestCase -{ -public: - TimespanTest(const std::string& name); - ~TimespanTest(); - - void testConversions(); - void testComparisons(); - void testArithmetics(); - void testSwap(); - - void setUp(); - void tearDown(); - - static CppUnit::Test* suite(); - -private: -}; - - -#endif // TimespanTest_INCLUDED diff --git a/contrib/libpoco/Foundation/testsuite/src/TimestampTest.cpp b/contrib/libpoco/Foundation/testsuite/src/TimestampTest.cpp deleted file mode 100644 index 13679f0ffa3..00000000000 --- a/contrib/libpoco/Foundation/testsuite/src/TimestampTest.cpp +++ /dev/null @@ -1,102 +0,0 @@ -// -// TimestampTest.cpp -// -// $Id: //poco/1.4/Foundation/testsuite/src/TimestampTest.cpp#1 $ -// -// Copyright (c) 2004-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "TimestampTest.h" -#include "CppUnit/TestCaller.h" -#include "CppUnit/TestSuite.h" -#include "Poco/Timestamp.h" -#include "Poco/Thread.h" - - -using Poco::Timestamp; -using Poco::Thread; - - -TimestampTest::TimestampTest(const std::string& name): CppUnit::TestCase(name) -{ -} - - -TimestampTest::~TimestampTest() -{ -} - - -void TimestampTest::testTimestamp() -{ - Timestamp t1; - Thread::sleep(200); - Timestamp t2; - Timestamp t3 = t2; - assert (t1 != t2); - assert (!(t1 == t2)); - assert (t2 > t1); - assert (t2 >= t1); - assert (!(t1 > t2)); - assert (!(t1 >= t2)); - assert (t2 == t3); - assert (!(t2 != t3)); - assert (t2 >= t3); - assert (t2 <= t3); - Timestamp::TimeDiff d = (t2 - t1); - assert (d >= 180000 && d <= 300000); - - t1.swap(t2); - assert (t1 > t2); - t2.swap(t1); - - Timestamp::UtcTimeVal tv = t1.utcTime(); - Timestamp t4 = Timestamp::fromUtcTime(tv); - assert (t1 == t4); - - Timestamp epoch(0); - tv = epoch.utcTime(); - assert (tv >> 32 == 0x01B21DD2); - assert ((tv & 0xFFFFFFFF) == 0x13814000); - - Timestamp now; - Thread::sleep(201); - assert (now.elapsed() >= 200000); - assert (now.isElapsed(200000)); - assert (!now.isElapsed(2000000)); - -#if defined(_WIN32) - { - Timestamp now; - Poco::UInt32 low; - Poco::UInt32 high; - now.toFileTimeNP(low, high); - Timestamp ts = Timestamp::fromFileTimeNP(low, high); - assert (now == ts); - } -#endif -} - - -void TimestampTest::setUp() -{ -} - - -void TimestampTest::tearDown() -{ -} - - -CppUnit::Test* TimestampTest::suite() -{ - CppUnit::TestSuite* pSuite = new CppUnit::TestSuite("TimestampTest"); - - CppUnit_addTest(pSuite, TimestampTest, testTimestamp); - - return pSuite; -} diff --git a/contrib/libpoco/Foundation/testsuite/src/TimestampTest.h b/contrib/libpoco/Foundation/testsuite/src/TimestampTest.h deleted file mode 100644 index 6ed4c046ebb..00000000000 --- a/contrib/libpoco/Foundation/testsuite/src/TimestampTest.h +++ /dev/null @@ -1,40 +0,0 @@ -// -// TimestampTest.h -// -// $Id: //poco/1.4/Foundation/testsuite/src/TimestampTest.h#1 $ -// -// Definition of the TimestampTest class. -// -// Copyright (c) 2004-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef TimestampTest_INCLUDED -#define TimestampTest_INCLUDED - - -#include "Poco/Foundation.h" -#include "CppUnit/TestCase.h" - - -class TimestampTest: public CppUnit::TestCase -{ -public: - TimestampTest(const std::string& name); - ~TimestampTest(); - - void testTimestamp(); - - void setUp(); - void tearDown(); - - static CppUnit::Test* suite(); - -private: -}; - - -#endif // TimestampTest_INCLUDED diff --git a/contrib/libpoco/Foundation/testsuite/src/TimezoneTest.cpp b/contrib/libpoco/Foundation/testsuite/src/TimezoneTest.cpp deleted file mode 100644 index 53446a1ebd3..00000000000 --- a/contrib/libpoco/Foundation/testsuite/src/TimezoneTest.cpp +++ /dev/null @@ -1,63 +0,0 @@ -// -// TimezoneTest.cpp -// -// $Id: //poco/1.4/Foundation/testsuite/src/TimezoneTest.cpp#1 $ -// -// Copyright (c) 2004-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "TimezoneTest.h" -#include "CppUnit/TestCaller.h" -#include "CppUnit/TestSuite.h" -#include "Poco/Timezone.h" -#include - - -using Poco::Timezone; - - -TimezoneTest::TimezoneTest(const std::string& name): CppUnit::TestCase(name) -{ -} - - -TimezoneTest::~TimezoneTest() -{ -} - - -void TimezoneTest::testTimezone() -{ - std::string name = Timezone::name(); - std::string stdName = Timezone::standardName(); - std::string dstName = Timezone::dstName(); - std::cout << "Timezone Names: " << name << ", " << stdName << ", " << dstName << std::endl; - int utcOffset = Timezone::utcOffset(); - std::cout << "UTC Offset: " << utcOffset << std::endl; - int dst = Timezone::dst(); - std::cout << "DST Offset: " << dst << std::endl; -} - - -void TimezoneTest::setUp() -{ -} - - -void TimezoneTest::tearDown() -{ -} - - -CppUnit::Test* TimezoneTest::suite() -{ - CppUnit::TestSuite* pSuite = new CppUnit::TestSuite("TimezoneTest"); - - CppUnit_addTest(pSuite, TimezoneTest, testTimezone); - - return pSuite; -} diff --git a/contrib/libpoco/Foundation/testsuite/src/TimezoneTest.h b/contrib/libpoco/Foundation/testsuite/src/TimezoneTest.h deleted file mode 100644 index 420b6dbbec0..00000000000 --- a/contrib/libpoco/Foundation/testsuite/src/TimezoneTest.h +++ /dev/null @@ -1,40 +0,0 @@ -// -// TimezoneTest.h -// -// $Id: //poco/1.4/Foundation/testsuite/src/TimezoneTest.h#1 $ -// -// Definition of the TimezoneTest class. -// -// Copyright (c) 2004-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef TimezoneTest_INCLUDED -#define TimezoneTest_INCLUDED - - -#include "Poco/Foundation.h" -#include "CppUnit/TestCase.h" - - -class TimezoneTest: public CppUnit::TestCase -{ -public: - TimezoneTest(const std::string& name); - ~TimezoneTest(); - - void testTimezone(); - - void setUp(); - void tearDown(); - - static CppUnit::Test* suite(); - -private: -}; - - -#endif // TimezoneTest_INCLUDED diff --git a/contrib/libpoco/Foundation/testsuite/src/TuplesTest.cpp b/contrib/libpoco/Foundation/testsuite/src/TuplesTest.cpp deleted file mode 100644 index 241f195894a..00000000000 --- a/contrib/libpoco/Foundation/testsuite/src/TuplesTest.cpp +++ /dev/null @@ -1,587 +0,0 @@ -// -// TuplesTest.cpp -// -// $Id: //poco/1.4/Foundation/testsuite/src/TuplesTest.cpp#1 $ -// -// Copyright (c) 2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "TuplesTest.h" -#include "CppUnit/TestCaller.h" -#include "CppUnit/TestSuite.h" -#include "Poco/Tuple.h" -#include "Poco/Void.h" -#include -#include - - -using Poco::TypeList; -using Poco::NullTypeList; -using Poco::TypeListType; -using Poco::TypeGetter; -using Poco::TypeLocator; -using Poco::TypeAppender; -using Poco::TypeOneEraser; -using Poco::TypeAllEraser; -using Poco::TypeDuplicateEraser; -using Poco::TypeOneReplacer; -using Poco::TypeAllReplacer; -using Poco::Tuple; -using Poco::Void; -using Poco::Int8; -using Poco::UInt8; -using Poco::Int16; -using Poco::UInt16; -using Poco::Int32; -using Poco::UInt32; -using Poco::Int8; -using Poco::UInt8; -using Poco::Int16; -using Poco::UInt16; -using Poco::Int32; -using Poco::UInt32; - - -TuplesTest::TuplesTest(const std::string& name): CppUnit::TestCase(name) -{ -} - - -TuplesTest::~TuplesTest() -{ -} - - -void TuplesTest::testTuple1() -{ - Tuple t; - assert (t.length == 1); - t.set<0>(-1); - assert (t.get<0>() == -1); - - Tuple t2(-1); - assert (t2.get<0>() == -1); - - Tuple tCpy (t2); - assert (t2.get<0>() == tCpy.get<0>()); - assert (t2 == tCpy); - - Tuple tCpy2 = t2; - assert (t2.get<0>() == tCpy2.get<0>()); - assert (t2 == tCpy2); - tCpy2.set<0>(888); - assert (t2 != tCpy2); - assert (t < tCpy2); - - Tuple t3(0); - assert (t3.get<1>().empty()); - - Tuple > t4(0); - assert (t4.get<1>().empty()); - assert (t4.get<2>().empty()); -} - - -void TuplesTest::testTuple2() -{ - Tuple dummy1; - assert (dummy1.length == 2); - dummy1.set<0>(-1); - assert (dummy1.get<0>() == -1); - //test partial init - Tuple dummy11(0); - - Tuple dummy2; - dummy2.set<1>(-1); - assert (dummy2.get<1>() == -1); - - Tuple dummy3; - dummy3.set<1>(-1); - assert (dummy3.get<1>() == -1); - - Tuple aTuple; - aTuple.set<0>("str"); - aTuple.set<1>(1); - assert (aTuple.get<0>() == "str"); - assert (aTuple.get<1>() == 1); - - Tuple aTuple2(aTuple); - assert (aTuple == aTuple2); - aTuple2.set<1>(99); - assert (aTuple != aTuple2); - aTuple2.set<1>(100000); - assert (aTuple < aTuple2); -} - - -void TuplesTest::testTuple3() -{ - Tuple dummy1; - assert (dummy1.length == 3); - dummy1.set<0>(-1); - assert (dummy1.get<0>() == -1); - //test partial init - Tuple dummy11(0); - - Tuple dummy2; - dummy2.set<1>(-1); - assert (dummy2.get<1>() == -1); - - Tuple dummy3; - dummy3.set<2>(-1); - assert (dummy3.get<2>() == -1); - - Tuple aTuple; - aTuple.set<0>("str"); - aTuple.set<1>(1); - aTuple.set<2>(true); - assert (aTuple.get<0>() == "str"); - assert (aTuple.get<1>() == 1); - assert (aTuple.get<2>()); - - Tuple aTuple2(aTuple); - assert (aTuple == aTuple2); - aTuple2.set<2>(false); - assert (aTuple != aTuple2); - aTuple2.set<1>(100000); - assert (aTuple < aTuple2); -} - - -void TuplesTest::testTuple4() -{ - Tuple dummy1; - assert (dummy1.length == 4); - dummy1.set<0>(-1); - assert (dummy1.get<0>() == -1); - //test partial init - Tuple dummy11(0); - - Tuple dummy2; - dummy2.set<1>(-1); - assert (dummy2.get<1>() == -1); - - Tuple dummy3; - dummy3.set<3>(-1); - assert (dummy3.get<3>() == -1); - - Tuple aTuple; - aTuple.set<0>("str"); - aTuple.set<1>(1); - aTuple.set<2>(true); - aTuple.set<3>(3.14f); - assert (aTuple.get<0>() == "str"); - assert (aTuple.get<1>() == 1); - assert (aTuple.get<2>()); - assert (aTuple.get<3>() >= 3.13f && aTuple.get<3>() <= 3.15f); - - Tuple aTuple2(aTuple); - assert (aTuple == aTuple2); - aTuple2.set<2>(false); - assert (aTuple != aTuple2); - aTuple2.set<1>(100000); - assert (aTuple < aTuple2); -} - - -void TuplesTest::testTuple5() -{ - Tuple dummy1; - assert (dummy1.length == 5); - dummy1.set<0>(-1); - assert (dummy1.get<0>() == -1); - //test partial init - Tuple dummy11(0); - - Tuple dummy2; - dummy2.set<1>(-1); - assert (dummy2.get<1>() == -1); - - Tuple dummy3; - dummy3.set<4>(-1); - assert (dummy3.get<4>() == -1); - - Tuple aTuple; - aTuple.set<0>("str"); - aTuple.set<1>(1); - aTuple.set<2>(true); - aTuple.set<3>(3.14f); - aTuple.set<4>(' '); - assert (aTuple.get<0>() == "str"); - assert (aTuple.get<1>() == 1); - assert (aTuple.get<2>()); - assert (aTuple.get<3>() >= 3.13f && aTuple.get<3>() <= 3.15f); - assert (aTuple.get<4>() == ' '); - - Tuple aTuple2(aTuple); - assert (aTuple == aTuple2); - aTuple2.set<2>(false); - assert (aTuple != aTuple2); - aTuple2.set<1>(100000); - assert (aTuple < aTuple2); -} - - -void TuplesTest::testTuple6() -{ - Tuple aTuple; - assert (aTuple.length == 6); - Tuple - aTuple2("1", 1, true, 3.14f, 'c', 999); - assert (aTuple != aTuple2); - aTuple = aTuple2; - assert (aTuple == aTuple2); - aTuple2.get<1>()++; - assert (aTuple < aTuple2); -} - - -void TuplesTest::testTuple7() -{ - Tuple aTuple; - assert (aTuple.length == 7); - Tuple - aTuple2("1", 1, true, 3.14f, 'c', 999, 33.14); - assert (aTuple != aTuple2); - aTuple = aTuple2; - assert (aTuple == aTuple2); - aTuple2.get<1>()++; - assert (aTuple < aTuple2); -} - - -void TuplesTest::testTuple8() -{ - Tuple aTuple; - assert (aTuple.length == 8); - Tuple - aTuple2("1", 1, true, 3.14f, 'c', 999, 33.14, 32700); - assert (aTuple != aTuple2); - aTuple = aTuple2; - assert (aTuple == aTuple2); - aTuple2.get<1>()++; - assert (aTuple < aTuple2); -} - -void TuplesTest::testTuple9() -{ - Tuple aTuple; - assert (aTuple.length == 9); - Tuple - aTuple2("1", 1, true, 3.14f, 'c', 999, 33.14, 32700, "2"); - assert (aTuple != aTuple2); - aTuple = aTuple2; - assert (aTuple == aTuple2); - aTuple2.get<1>()++; - assert (aTuple < aTuple2); -} - - -void TuplesTest::testTuple10() -{ - typedef Tuple TupleType; - - TupleType aTuple; - assert (aTuple.length == 10); - TupleType aTuple2("1", 1, true, 3.14f, 'c', 999, 33.14, 32700, "2", 2); - assert (aTuple != aTuple2); - aTuple = aTuple2; - assert (aTuple == aTuple2); - aTuple2.get<1>()++; - assert (aTuple < aTuple2); -} - - -void TuplesTest::testTuple11() -{ - typedef Tuple TupleType; - - TupleType aTuple; - assert (aTuple.length == 11); - TupleType aTuple2("1", 1, true, 3.14f, 'c', 999, 33.14, 32700, "2", 2, "1"); - assert (aTuple != aTuple2); - aTuple = aTuple2; - assert (aTuple == aTuple2); - aTuple2.get<1>()++; - assert (aTuple < aTuple2); -} - - -void TuplesTest::testTuple12() -{ - typedef Tuple TupleType; - - TupleType aTuple; - assert (aTuple.length == 12); - TupleType aTuple2("1", 1, true, 3.14f, 'c', 999, 33.14, 32700, "2", 2, "1", 1); - assert (aTuple != aTuple2); - aTuple = aTuple2; - assert (aTuple == aTuple2); - aTuple2.get<1>()++; - assert (aTuple < aTuple2); -} - - -void TuplesTest::testTuple13() -{ - typedef Tuple TupleType; - - TupleType aTuple; - assert (aTuple.length == 13); - TupleType aTuple2("1", 1, true, 3.14f, 'c', 999, 33.14, 32700, "2", 2, "1", 1, true); - assert (aTuple != aTuple2); - aTuple = aTuple2; - assert (aTuple == aTuple2); - aTuple2.get<1>()++; - assert (aTuple < aTuple2); -} - - -void TuplesTest::testTuple14() -{ - typedef Tuple TupleType; - - TupleType aTuple; - assert (aTuple.length == 14); - TupleType aTuple2("1", 1, true, 3.14f, 'c', 999, 33.14, 32700, "2", 2, "1", 1, true, 3.14f); - assert (aTuple != aTuple2); - aTuple = aTuple2; - assert (aTuple == aTuple2); - aTuple2.get<1>()++; - assert (aTuple < aTuple2); -} - - -void TuplesTest::testTuple15() -{ - typedef Tuple TupleType; - - TupleType aTuple; - assert (aTuple.length == 15); - TupleType aTuple2("1", 1, true, 3.14f, 'c', 999, 33.14, 32700, "2", 2, "1", 1, true, 3.14f, 'c'); - assert (aTuple != aTuple2); - aTuple = aTuple2; - assert (aTuple == aTuple2); - aTuple2.get<1>()++; - assert (aTuple < aTuple2); -} - - -void TuplesTest::testTuple16() -{ - typedef Tuple TupleType; - - TupleType aTuple; - assert (aTuple.length == 16); - TupleType aTuple2("1", 1, true, 3.14f, 'c', 999, 33.14, 32700, "2", 2, "1", 1, true, 3.14f, 'c', 999); - assert (aTuple != aTuple2); - aTuple = aTuple2; - assert (aTuple == aTuple2); - aTuple2.get<1>()++; - assert (aTuple < aTuple2); -} - - -void TuplesTest::testTuple17() -{ - typedef Tuple TupleType; - - TupleType aTuple; - assert (aTuple.length == 17); - TupleType aTuple2("1", 1, true, 3.14f, 'c', 999, 33.14, 32700, "2", 2, "1", 1, true, 3.14f, 'c', 999, 33.14); - assert (aTuple != aTuple2); - aTuple = aTuple2; - assert (aTuple == aTuple2); - aTuple2.get<1>()++; - assert (aTuple < aTuple2); -} - - -void TuplesTest::testTuple18() -{ - typedef Tuple TupleType; - - TupleType aTuple; - assert (aTuple.length == 18); - TupleType aTuple2("1", 1, true, 3.14f, 'c', 999, 33.14, 32700, "2", 2, "1", 1, true, 3.14f, 'c', 999, 33.14, 32700); - assert (aTuple != aTuple2); - aTuple = aTuple2; - assert (aTuple == aTuple2); - aTuple2.get<1>()++; - assert (aTuple < aTuple2); -} - - -void TuplesTest::testTuple19() -{ - typedef Tuple TupleType; - - TupleType aTuple; - assert (aTuple.length == 19); - TupleType aTuple2("1", 1, true, 3.14f, 'c', 999, 33.14, 32700, "2", 2, "1", 1, true, 3.14f, 'c', 999, 33.14, 32700, "2"); - assert (aTuple != aTuple2); - aTuple = aTuple2; - assert (aTuple == aTuple2); - aTuple2.get<1>()++; - assert (aTuple < aTuple2); -} - - -void TuplesTest::testTuple20() -{ - typedef Tuple TupleType; - - TupleType aTuple; - assert (aTuple.length == 20); - - TupleType aTuple2("1", 1, true, 3.14f, 'c', 999, 33.14, 32700, "2", 2, "1", 1, true, 3.14f, 'c', 999, 33.14, 32700, "2", 2); - assert (aTuple != aTuple2); - aTuple = aTuple2; - assert (aTuple == aTuple2); - aTuple2.get<1>()++; - assert (aTuple < aTuple2); -} - - -void TuplesTest::testTupleOrder() -{ - typedef Tuple TupleType; - - TupleType aTuple; - assert (aTuple.length == 20); - - TupleType aTuple2("1", 1, true, 3.14f, 'c', 999, 33.14, 32700, "2", 2, "1", 1, true, 3.14f, 'c', 999, 33.14, 32700, "2", 2); - assert (aTuple != aTuple2); - aTuple = aTuple2; - assert (aTuple == aTuple2); - aTuple2.get<1>()++; - assert (aTuple < aTuple2); - - TupleType aTuple3; - aTuple3 = aTuple2; - aTuple3.get<1>()++; - assert (aTuple2 < aTuple3); - - testTupleStrictWeak(aTuple, aTuple2, aTuple3); - - std::vector tv; - tv.push_back(aTuple3); - tv.push_back(aTuple); - tv.push_back(aTuple2); - - assert (tv[0] == aTuple3); - assert (tv[1] == aTuple); - assert (tv[2] == aTuple2); - - std::sort(tv.begin(), tv.end()); - - assert (tv[0] == aTuple); - assert (tv[1] == aTuple2); - assert (tv[2] == aTuple3); - - std::map tm; - std::pair::iterator, bool> mIt = tm.insert(std::map::value_type(aTuple2, 2)); - assert (mIt.second); - mIt = tm.insert(std::map::value_type(aTuple, 1)); - assert (mIt.second); - mIt = tm.insert(std::map::value_type(aTuple3, 3)); - assert (mIt.second); - - std::map::iterator fIt = tm.find(aTuple2); - assert (2 == fIt->second); - - typedef Tuple StrTup; - typedef std::map StrTupMap; - - StrTup st1("123", "456", "789", "101112"); - StrTup st2("123", "456", "101112", "789"); - StrTup st3("123", "789", "789", "101112"); - StrTup st4("123", "101112", "456", "789"); - - testTupleStrictWeak(st2, st1, st3); - - StrTupMap strMap; - strMap.insert(StrTupMap::value_type(st1, 1)); - strMap.insert(StrTupMap::value_type(st2, 2)); - strMap.insert(StrTupMap::value_type(st3, 3)); - strMap.insert(StrTupMap::value_type(st4, 4)); - - assert (1 == strMap[st1]); - assert (2 == strMap[st2]); - assert (3 == strMap[st3]); - assert (4 == strMap[st4]); - - StrTupMap::iterator it = strMap.begin(); - assert (st4 == it->first); ++it; - assert (st2 == it->first); ++it; - assert (st1 == it->first); ++it; - assert (st3 == it->first); ++it; - assert (it == strMap.end()); -} - - -void TuplesTest::testMemOverhead() -{ - Tuple smallOne(0); - int sz = sizeof(smallOne); - assert (sz == 4 || sz == 8); //depending on architecture and alignment - Tuple notSoSmall(0); - sz = sizeof(notSoSmall); - assert (sz == 8 || sz == 16); //depending on architecture and alignment -} - - -void TuplesTest::setUp() -{ -} - - -void TuplesTest::tearDown() -{ -} - - -CppUnit::Test* TuplesTest::suite() -{ - CppUnit::TestSuite* pSuite = new CppUnit::TestSuite("TuplesTest"); - - CppUnit_addTest(pSuite, TuplesTest, testTuple1); - CppUnit_addTest(pSuite, TuplesTest, testTuple2); - CppUnit_addTest(pSuite, TuplesTest, testTuple3); - CppUnit_addTest(pSuite, TuplesTest, testTuple4); - CppUnit_addTest(pSuite, TuplesTest, testTuple5); - CppUnit_addTest(pSuite, TuplesTest, testTuple6); - CppUnit_addTest(pSuite, TuplesTest, testTuple7); - CppUnit_addTest(pSuite, TuplesTest, testTuple8); - CppUnit_addTest(pSuite, TuplesTest, testTuple9); - CppUnit_addTest(pSuite, TuplesTest, testTuple10); - CppUnit_addTest(pSuite, TuplesTest, testTuple11); - CppUnit_addTest(pSuite, TuplesTest, testTuple12); - CppUnit_addTest(pSuite, TuplesTest, testTuple13); - CppUnit_addTest(pSuite, TuplesTest, testTuple14); - CppUnit_addTest(pSuite, TuplesTest, testTuple15); - CppUnit_addTest(pSuite, TuplesTest, testTuple16); - CppUnit_addTest(pSuite, TuplesTest, testTuple17); - CppUnit_addTest(pSuite, TuplesTest, testTuple18); - CppUnit_addTest(pSuite, TuplesTest, testTuple19); - CppUnit_addTest(pSuite, TuplesTest, testTuple20); - CppUnit_addTest(pSuite, TuplesTest, testTupleOrder); - CppUnit_addTest(pSuite, TuplesTest, testMemOverhead); - - return pSuite; -} diff --git a/contrib/libpoco/Foundation/testsuite/src/TuplesTest.h b/contrib/libpoco/Foundation/testsuite/src/TuplesTest.h deleted file mode 100644 index 9190f2cd38e..00000000000 --- a/contrib/libpoco/Foundation/testsuite/src/TuplesTest.h +++ /dev/null @@ -1,68 +0,0 @@ -// -// TuplesTest.h -// -// $Id: //poco/1.4/Foundation/testsuite/src/TuplesTest.h#1 $ -// -// Definition of the TuplesTest class. -// -// Copyright (c) 2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef TuplesTest_INCLUDED -#define TuplesTest_INCLUDED - - -#include "Poco/Foundation.h" -#include "CppUnit/TestCase.h" - - -class TuplesTest: public CppUnit::TestCase -{ -public: - TuplesTest(const std::string& name); - ~TuplesTest(); - - void testTuple1(); - void testTuple2(); - void testTuple3(); - void testTuple4(); - void testTuple5(); - void testTuple6(); - void testTuple7(); - void testTuple8(); - void testTuple9(); - void testTuple10(); - void testTuple11(); - void testTuple12(); - void testTuple13(); - void testTuple14(); - void testTuple15(); - void testTuple16(); - void testTuple17(); - void testTuple18(); - void testTuple19(); - void testTuple20(); - void testTupleOrder(); - void testMemOverhead(); - void setUp(); - void tearDown(); - - static CppUnit::Test* suite(); - -private: - - template - void testTupleStrictWeak(const T& t1, const T& t2, const T& t3) - { - assert (t1 < t2 && !(t2 < t1)); // antisymmetric - assert (t1 < t2 && t2 < t3 && t1 < t3); // transitive - assert (!(t1 < t1)); // irreflexive - } -}; - - -#endif // TuplesTest_INCLUDED diff --git a/contrib/libpoco/Foundation/testsuite/src/TypeListTest.cpp b/contrib/libpoco/Foundation/testsuite/src/TypeListTest.cpp deleted file mode 100644 index 4e6375f11e8..00000000000 --- a/contrib/libpoco/Foundation/testsuite/src/TypeListTest.cpp +++ /dev/null @@ -1,305 +0,0 @@ -// -// TypeListTest.cpp -// -// $Id: //poco/1.4/Foundation/testsuite/src/TypeListTest.cpp#1 $ -// -// Copyright (c) 2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "TypeListTest.h" -#include "CppUnit/TestCaller.h" -#include "CppUnit/TestSuite.h" -#include "Poco/Tuple.h" -#include "Poco/TypeList.h" -#include "Poco/Void.h" -#include - -GCC_DIAG_OFF(unused-but-set-variable) -#if defined(_MSC_VER) -# pragma warning(disable:4800) // forcing value to bool 'true' or 'false' on MSVC 71 -#endif - -using Poco::TypeList; -using Poco::Tuple; -using Poco::NullTypeList; -using Poco::TypeListType; -using Poco::TypeGetter; -using Poco::TypeLocator; -using Poco::TypeAppender; -using Poco::TypeOneEraser; -using Poco::TypeAllEraser; -using Poco::TypeDuplicateEraser; -using Poco::TypeOneReplacer; -using Poco::TypeAllReplacer; -using Poco::Int8; -using Poco::UInt8; -using Poco::Int16; -using Poco::UInt16; -using Poco::Int32; -using Poco::UInt32; -using Poco::Int8; -using Poco::UInt8; -using Poco::Int16; -using Poco::UInt16; -using Poco::Int32; -using Poco::UInt32; -using Poco::Void; - - -TypeListTest::TypeListTest(const std::string& name): CppUnit::TestCase(name) -{ -} - - -TypeListTest::~TypeListTest() -{ -} - - -void TypeListTest::testTypeList() -{ - typedef TypeListType::HeadType Type15; - - Tuple::HeadType, - TypeGetter<1, Type15>::HeadType, - TypeGetter<2, Type15>::HeadType, - TypeGetter<3, Type15>::HeadType, - TypeGetter<4, Type15>::HeadType, - TypeGetter<5, Type15>::HeadType, - TypeGetter<6, Type15>::HeadType, - TypeGetter<7, Type15>::HeadType, - TypeGetter<8, Type15>::HeadType, - TypeGetter<9, Type15>::HeadType> tuple; - - static TypeLocator pos0; - static TypeLocator pos1; - static TypeLocator pos2; - static TypeLocator pos3; - static TypeLocator pos4; - static TypeLocator pos5; - static TypeLocator pos6; - static TypeLocator pos7; - static TypeLocator pos8; - static TypeLocator posUnknown; - - assert (pos0.value == 0); - assert (pos1.value == 1); - assert (pos2.value == 2); - assert (pos3.value == 3); - assert (pos4.value == 4); - assert (pos5.value == 5); - assert (pos6.value == 6); - assert (pos7.value == 7); - assert (pos8.value == 0); - assert (posUnknown.value == -1); - - tuple.set::value >(-123); - assert (-123 == tuple.get<4>()); - - assert (typeid(TypeGetter<0, Type15>::HeadType) == typeid(Int8)); - assert (typeid(TypeGetter<0, Type15>::ConstHeadType) == typeid(const Int8)); - assert (typeid(TypeGetter<1, Type15>::HeadType) == typeid(UInt8)); - assert (typeid(TypeGetter<1, Type15>::ConstHeadType) == typeid(const UInt8)); - assert (typeid(TypeGetter<2, Type15>::HeadType) == typeid(Int16)); - assert (typeid(TypeGetter<2, Type15>::ConstHeadType) == typeid(const Int16)); - assert (typeid(TypeGetter<3, Type15>::HeadType) == typeid(UInt16)); - assert (typeid(TypeGetter<3, Type15>::ConstHeadType) == typeid(const UInt16)); - assert (typeid(TypeGetter<4, Type15>::HeadType) == typeid(Int32)); - assert (typeid(TypeGetter<4, Type15>::ConstHeadType) == typeid(const Int32)); - assert (typeid(TypeGetter<5, Type15>::HeadType) == typeid(UInt32)); - assert (typeid(TypeGetter<5, Type15>::ConstHeadType) == typeid(const UInt32)); - assert (typeid(TypeGetter<6, Type15>::HeadType) == typeid(float)); - assert (typeid(TypeGetter<6, Type15>::ConstHeadType) == typeid(const float)); - assert (typeid(TypeGetter<7, Type15>::HeadType) == typeid(double)); - assert (typeid(TypeGetter<7, Type15>::ConstHeadType) == typeid(const double)); - assert (typeid(TypeGetter<8, Type15>::HeadType) == typeid(Int8)); - assert (typeid(TypeGetter<8, Type15>::ConstHeadType) == typeid(const Int8)); - assert (typeid(TypeGetter<9, Type15>::HeadType) == typeid(UInt8)); - assert (typeid(TypeGetter<9, Type15>::ConstHeadType) == typeid(const UInt8)); - assert (typeid(TypeGetter<10, Type15>::HeadType) == typeid(Int16)); - assert (typeid(TypeGetter<10, Type15>::ConstHeadType) == typeid(const Int16)); - assert (typeid(TypeGetter<11, Type15>::HeadType) == typeid(UInt16)); - assert (typeid(TypeGetter<11, Type15>::ConstHeadType) == typeid(const UInt16)); - assert (typeid(TypeGetter<12, Type15>::HeadType) == typeid(Int32)); - assert (typeid(TypeGetter<12, Type15>::ConstHeadType) == typeid(const Int32)); - assert (typeid(TypeGetter<13, Type15>::HeadType) == typeid(UInt32)); - assert (typeid(TypeGetter<13, Type15>::ConstHeadType) == typeid(const UInt32)); - assert (typeid(TypeGetter<14, Type15>::HeadType) == typeid(float)); - assert (typeid(TypeGetter<14, Type15>::ConstHeadType) == typeid(const float)); - - typedef TypeListType::HeadType Type1; - assert (1 == Type1::length); - typedef TypeListType::HeadType Type2; - assert (2 == Type2::length); - typedef TypeAppender::HeadType Type3; - assert (3 == Type3::length); - - assert (typeid(TypeGetter<0, Type3>::HeadType) == typeid(Int8)); - assert (typeid(TypeGetter<1, Type3>::HeadType) == typeid(Int16)); - assert (typeid(TypeGetter<2, Type3>::HeadType) == typeid(Int32)); - - static TypeLocator posNo1; - static TypeLocator posNo2; - static TypeLocator posNo3; - - assert (posNo1.value == 0); - assert (posNo2.value == 1); - assert (posNo3.value == 2); - - typedef TypeOneEraser::HeadType TypeEraser1; - assert (2 == TypeEraser1::length); - assert (typeid(TypeGetter<0, TypeEraser1>::HeadType) == typeid(Int16)); - assert (typeid(TypeGetter<1, TypeEraser1>::HeadType) == typeid(Int32)); - - typedef TypeOneEraser::HeadType TypeEraser2; - assert (2 == TypeEraser2::length); - assert (typeid(TypeGetter<0, TypeEraser2>::HeadType) == typeid(Int8)); - assert (typeid(TypeGetter<1, TypeEraser2>::HeadType) == typeid(Int32)); - - typedef TypeOneEraser::HeadType TypeEraser3; - assert (2 == TypeEraser3::length); - assert (typeid(TypeGetter<0, TypeEraser3>::HeadType) == typeid(Int8)); - assert (typeid(TypeGetter<1, TypeEraser3>::HeadType) == typeid(Int16)); - - typedef TypeListType::HeadType Type5; - typedef TypeAllEraser::HeadType TypeAllEraser3; - assert (2 == TypeAllEraser3::length); - assert (typeid(TypeGetter<0, TypeAllEraser3>::HeadType) == typeid(Int16)); - assert (typeid(TypeGetter<1, TypeAllEraser3>::HeadType) == typeid(Int16)); - - typedef TypeDuplicateEraser::HeadType TypeDuplicateEraser1; - assert (2 == TypeDuplicateEraser1::length); - assert (typeid(TypeGetter<0, TypeDuplicateEraser1>::HeadType) == typeid(Int8)); - assert (typeid(TypeGetter<1, TypeDuplicateEraser1>::HeadType) == typeid(Int16)); - - typedef TypeOneReplacer::HeadType TypeOneReplacer1; - assert (5 == TypeOneReplacer1::length); - assert (typeid(TypeGetter<0, TypeOneReplacer1>::HeadType) == typeid(Int32)); - assert (typeid(TypeGetter<1, TypeOneReplacer1>::HeadType) == typeid(Int16)); - assert (typeid(TypeGetter<2, TypeOneReplacer1>::HeadType) == typeid(Int8)); - assert (typeid(TypeGetter<3, TypeOneReplacer1>::HeadType) == typeid(Int16)); - assert (typeid(TypeGetter<4, TypeOneReplacer1>::HeadType) == typeid(Int8)); - - typedef TypeAllReplacer::HeadType TypeAllReplacer1; - assert (5 == TypeAllReplacer1::length); - assert (typeid(TypeGetter<0, TypeAllReplacer1>::HeadType) == typeid(Int32)); - assert (typeid(TypeGetter<1, TypeAllReplacer1>::HeadType) == typeid(Int16)); - assert (typeid(TypeGetter<2, TypeAllReplacer1>::HeadType) == typeid(Int32)); - assert (typeid(TypeGetter<3, TypeAllReplacer1>::HeadType) == typeid(Int16)); - assert (typeid(TypeGetter<4, TypeAllReplacer1>::HeadType) == typeid(Int32)); - - typedef TypeListType::HeadType TypeVoid; - assert (typeid(TypeGetter<0, TypeVoid>::HeadType) == typeid(Void)); - assert (typeid(TypeGetter<1, TypeVoid>::HeadType) == typeid(Void)); - assert (typeid(TypeGetter<2, TypeVoid>::HeadType) == typeid(Void)); - assert (typeid(TypeGetter<3, TypeVoid>::HeadType) == typeid(Void)); - assert (typeid(TypeGetter<4, TypeVoid>::HeadType) == typeid(Void)); - assert (typeid(TypeGetter<5, TypeVoid>::HeadType) == typeid(Void)); - assert (typeid(TypeGetter<6, TypeVoid>::HeadType) == typeid(Void)); - assert (typeid(TypeGetter<7, TypeVoid>::HeadType) == typeid(Void)); - assert (typeid(TypeGetter<8, TypeVoid>::HeadType) == typeid(Void)); - assert (typeid(TypeGetter<9, TypeVoid>::HeadType) == typeid(Void)); - assert (typeid(TypeGetter<10, TypeVoid>::HeadType) == typeid(Void)); - assert (typeid(TypeGetter<11, TypeVoid>::HeadType) == typeid(Void)); - assert (typeid(TypeGetter<12, TypeVoid>::HeadType) == typeid(Void)); - assert (typeid(TypeGetter<13, TypeVoid>::HeadType) == typeid(Void)); - assert (typeid(TypeGetter<14, TypeVoid>::HeadType) == typeid(Void)); - assert (typeid(TypeGetter<15, TypeVoid>::HeadType) == typeid(Void)); - assert (typeid(TypeGetter<16, TypeVoid>::HeadType) == typeid(Void)); - assert (typeid(TypeGetter<17, TypeVoid>::HeadType) == typeid(Void)); - assert (typeid(TypeGetter<18, TypeVoid>::HeadType) == typeid(Void)); - assert (typeid(TypeGetter<19, TypeVoid>::HeadType) == typeid(Void)); - - - typedef TypeOneReplacer::HeadType TypeFirstReplacer; - assert (typeid(TypeGetter<0, TypeFirstReplacer>::HeadType) == typeid(Int8)); - assert (typeid(TypeGetter<1, TypeFirstReplacer>::HeadType) == typeid(Void)); - assert (typeid(TypeGetter<2, TypeFirstReplacer>::HeadType) == typeid(Void)); - assert (typeid(TypeGetter<3, TypeFirstReplacer>::HeadType) == typeid(Void)); - assert (typeid(TypeGetter<4, TypeFirstReplacer>::HeadType) == typeid(Void)); - assert (typeid(TypeGetter<5, TypeFirstReplacer>::HeadType) == typeid(Void)); - assert (typeid(TypeGetter<6, TypeFirstReplacer>::HeadType) == typeid(Void)); - assert (typeid(TypeGetter<7, TypeFirstReplacer>::HeadType) == typeid(Void)); - assert (typeid(TypeGetter<8, TypeFirstReplacer>::HeadType) == typeid(Void)); - assert (typeid(TypeGetter<9, TypeFirstReplacer>::HeadType) == typeid(Void)); - assert (typeid(TypeGetter<10, TypeFirstReplacer>::HeadType) == typeid(Void)); - assert (typeid(TypeGetter<11, TypeFirstReplacer>::HeadType) == typeid(Void)); - assert (typeid(TypeGetter<12, TypeFirstReplacer>::HeadType) == typeid(Void)); - assert (typeid(TypeGetter<13, TypeFirstReplacer>::HeadType) == typeid(Void)); - assert (typeid(TypeGetter<14, TypeFirstReplacer>::HeadType) == typeid(Void)); - assert (typeid(TypeGetter<15, TypeFirstReplacer>::HeadType) == typeid(Void)); - assert (typeid(TypeGetter<16, TypeFirstReplacer>::HeadType) == typeid(Void)); - assert (typeid(TypeGetter<17, TypeFirstReplacer>::HeadType) == typeid(Void)); - assert (typeid(TypeGetter<18, TypeFirstReplacer>::HeadType) == typeid(Void)); - assert (typeid(TypeGetter<19, TypeFirstReplacer>::HeadType) == typeid(Void)); - - typedef TypeOneReplacer::HeadType TypeSecondReplacer; - assert (typeid(TypeGetter<0, TypeSecondReplacer>::HeadType) == typeid(Int8)); - assert (typeid(TypeGetter<1, TypeSecondReplacer>::HeadType) == typeid(Int16)); - - typedef TypeOneReplacer::HeadType TypeThirdReplacer; - assert (typeid(TypeGetter<0, TypeThirdReplacer>::HeadType) == typeid(Int8)); - assert (typeid(TypeGetter<1, TypeThirdReplacer>::HeadType) == typeid(Int16)); - assert (typeid(TypeGetter<2, TypeThirdReplacer>::HeadType) == typeid(Int32)); - - - typedef TypeAllReplacer::HeadType TypeFourthReplacer; - assert (typeid(TypeGetter<0, TypeFourthReplacer>::HeadType) == typeid(Int8)); - assert (typeid(TypeGetter<1, TypeFourthReplacer>::HeadType) == typeid(Int16)); - assert (typeid(TypeGetter<2, TypeFourthReplacer>::HeadType) == typeid(Int32)); - assert (typeid(TypeGetter<3, TypeFourthReplacer>::HeadType) == typeid(float)); - assert (typeid(TypeGetter<4, TypeFourthReplacer>::HeadType) == typeid(float)); - assert (typeid(TypeGetter<5, TypeFourthReplacer>::HeadType) == typeid(float)); - assert (typeid(TypeGetter<6, TypeFourthReplacer>::HeadType) == typeid(float)); - assert (typeid(TypeGetter<7, TypeFourthReplacer>::HeadType) == typeid(float)); - assert (typeid(TypeGetter<8, TypeFourthReplacer>::HeadType) == typeid(float)); - assert (typeid(TypeGetter<9, TypeFourthReplacer>::HeadType) == typeid(float)); - assert (typeid(TypeGetter<10, TypeFourthReplacer>::HeadType) == typeid(float)); - assert (typeid(TypeGetter<11, TypeFourthReplacer>::HeadType) == typeid(float)); - assert (typeid(TypeGetter<12, TypeFourthReplacer>::HeadType) == typeid(float)); - assert (typeid(TypeGetter<13, TypeFourthReplacer>::HeadType) == typeid(float)); - assert (typeid(TypeGetter<14, TypeFourthReplacer>::HeadType) == typeid(float)); - assert (typeid(TypeGetter<15, TypeFourthReplacer>::HeadType) == typeid(float)); - assert (typeid(TypeGetter<16, TypeFourthReplacer>::HeadType) == typeid(float)); - assert (typeid(TypeGetter<17, TypeFourthReplacer>::HeadType) == typeid(float)); - assert (typeid(TypeGetter<18, TypeFourthReplacer>::HeadType) == typeid(float)); - assert (typeid(TypeGetter<19, TypeFourthReplacer>::HeadType) == typeid(float)); -} - - -void TypeListTest::setUp() -{ -} - - -void TypeListTest::tearDown() -{ -} - - -CppUnit::Test* TypeListTest::suite() -{ - CppUnit::TestSuite* pSuite = new CppUnit::TestSuite("TypeListTest"); - - CppUnit_addTest(pSuite, TypeListTest, testTypeList); - - return pSuite; -} diff --git a/contrib/libpoco/Foundation/testsuite/src/TypeListTest.h b/contrib/libpoco/Foundation/testsuite/src/TypeListTest.h deleted file mode 100644 index 1aa0c34a671..00000000000 --- a/contrib/libpoco/Foundation/testsuite/src/TypeListTest.h +++ /dev/null @@ -1,39 +0,0 @@ -// -// TypeListTest.h -// -// $Id: //poco/1.4/Foundation/testsuite/src/TypeListTest.h#1 $ -// -// Definition of the TypeListTest class. -// -// Copyright (c) 2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef TypeListTest_INCLUDED -#define TypeListTest_INCLUDED - - -#include "Poco/Foundation.h" -#include "CppUnit/TestCase.h" - - -class TypeListTest: public CppUnit::TestCase -{ -public: - TypeListTest(const std::string& name); - ~TypeListTest(); - - void testTypeList(); - void setUp(); - void tearDown(); - - static CppUnit::Test* suite(); - -private: -}; - - -#endif // TypeListTest_INCLUDED diff --git a/contrib/libpoco/Foundation/testsuite/src/URIStreamOpenerTest.cpp b/contrib/libpoco/Foundation/testsuite/src/URIStreamOpenerTest.cpp deleted file mode 100644 index 80ddb7452bc..00000000000 --- a/contrib/libpoco/Foundation/testsuite/src/URIStreamOpenerTest.cpp +++ /dev/null @@ -1,226 +0,0 @@ -// -// URIStreamOpenerTest.cpp -// -// $Id: //poco/1.4/Foundation/testsuite/src/URIStreamOpenerTest.cpp#1 $ -// -// Copyright (c) 2004-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "URIStreamOpenerTest.h" -#include "CppUnit/TestCaller.h" -#include "CppUnit/TestSuite.h" -#include "Poco/URIStreamOpener.h" -#include "Poco/URIStreamFactory.h" -#include "Poco/URI.h" -#include "Poco/TemporaryFile.h" -#include "Poco/Path.h" -#include -#include - - -using Poco::URIStreamOpener; -using Poco::URIStreamFactory; -using Poco::URI; -using Poco::TemporaryFile; -using Poco::Path; - - -namespace -{ - class StringStreamFactory: public URIStreamFactory - { - public: - StringStreamFactory() - { - } - - std::istream* open(const URI& uri) - { - return new std::istringstream(uri.toString()); - } - }; -} - - -URIStreamOpenerTest::URIStreamOpenerTest(const std::string& name): CppUnit::TestCase(name) -{ -} - - -URIStreamOpenerTest::~URIStreamOpenerTest() -{ -} - - -void URIStreamOpenerTest::testStreamOpenerFile() -{ - TemporaryFile tempFile; - std::string path = tempFile.path(); - std::ofstream ostr(path.c_str()); - assert (ostr.good()); - ostr << "Hello, world!" << std::endl; - ostr.close(); - - URI uri; - uri.setScheme("file"); - uri.setPath(Path(path).toString(Path::PATH_UNIX)); - std::string uriString = uri.toString(); - - URIStreamOpener opener; - std::istream* istr = opener.open(uri); - assert (istr != 0); - assert (istr->good()); - delete istr; -} - - -void URIStreamOpenerTest::testStreamOpenerRelative() -{ - TemporaryFile tempFile; - std::string path = tempFile.path(); - std::ofstream ostr(path.c_str()); - assert (ostr.good()); - ostr << "Hello, world!" << std::endl; - ostr.close(); - - URI uri(Path(path).toString(Path::PATH_UNIX)); - std::string uriString = uri.toString(); - - URIStreamOpener opener; - std::istream* istr = opener.open(uri); - assert (istr != 0); - assert (istr->good()); - delete istr; -} - - -void URIStreamOpenerTest::testStreamOpenerURI() -{ - TemporaryFile tempFile; - std::string path = tempFile.path(); - std::ofstream ostr(path.c_str()); - assert (ostr.good()); - ostr << "Hello, world!" << std::endl; - ostr.close(); - - URI uri; - uri.setScheme("file"); - uri.setPath(Path(path).toString(Path::PATH_UNIX)); - std::string uriString = uri.toString(); - - URIStreamOpener opener; - std::istream* istr = opener.open(uriString); - assert (istr != 0); - assert (istr->good()); - delete istr; -} - - -void URIStreamOpenerTest::testStreamOpenerURIResolve() -{ - TemporaryFile tempFile; - std::string path = tempFile.path(); - std::ofstream ostr(path.c_str()); - assert (ostr.good()); - ostr << "Hello, world!" << std::endl; - ostr.close(); - - Path p(path); - p.makeAbsolute(); - Path parent(p.parent()); - - URI uri; - uri.setScheme("file"); - uri.setPath(parent.toString(Path::PATH_UNIX)); - std::string uriString = uri.toString(); - - URIStreamOpener opener; - std::istream* istr = opener.open(uriString, p.getFileName()); - assert (istr != 0); - assert (istr->good()); - delete istr; -} - - -void URIStreamOpenerTest::testStreamOpenerPath() -{ - TemporaryFile tempFile; - std::string path = tempFile.path(); - std::ofstream ostr(path.c_str()); - assert (ostr.good()); - ostr << "Hello, world!" << std::endl; - ostr.close(); - - URIStreamOpener opener; - std::istream* istr = opener.open(path); - assert (istr != 0); - assert (istr->good()); - delete istr; -} - - -void URIStreamOpenerTest::testStreamOpenerPathResolve() -{ - TemporaryFile tempFile; - std::string path = tempFile.path(); - std::ofstream ostr(path.c_str()); - assert (ostr.good()); - ostr << "Hello, world!" << std::endl; - ostr.close(); - - Path p(path); - Path parent(p.parent()); - std::string base = parent.toString(); - - URIStreamOpener opener; - std::istream* istr = opener.open(base, p.getFileName()); - assert (istr != 0); - assert (istr->good()); - delete istr; -} - - -void URIStreamOpenerTest::testRegisterUnregister() -{ - URIStreamOpener opener; - assert (!opener.supportsScheme("string")); - opener.registerStreamFactory("string", new StringStreamFactory); - assert (opener.supportsScheme("string")); - URI uri("string:foobar"); - std::istream* istr = opener.open(uri); - assert (istr != 0); - assert (istr->good()); - delete istr; - opener.unregisterStreamFactory("string"); - assert (!opener.supportsScheme("string")); -} - - -void URIStreamOpenerTest::setUp() -{ -} - - -void URIStreamOpenerTest::tearDown() -{ -} - - -CppUnit::Test* URIStreamOpenerTest::suite() -{ - CppUnit::TestSuite* pSuite = new CppUnit::TestSuite("URIStreamOpenerTest"); - - CppUnit_addTest(pSuite, URIStreamOpenerTest, testStreamOpenerFile); - CppUnit_addTest(pSuite, URIStreamOpenerTest, testStreamOpenerRelative); - CppUnit_addTest(pSuite, URIStreamOpenerTest, testStreamOpenerURI); - CppUnit_addTest(pSuite, URIStreamOpenerTest, testStreamOpenerURIResolve); - CppUnit_addTest(pSuite, URIStreamOpenerTest, testStreamOpenerPath); - CppUnit_addTest(pSuite, URIStreamOpenerTest, testStreamOpenerPathResolve); - CppUnit_addTest(pSuite, URIStreamOpenerTest, testRegisterUnregister); - - return pSuite; -} diff --git a/contrib/libpoco/Foundation/testsuite/src/URIStreamOpenerTest.h b/contrib/libpoco/Foundation/testsuite/src/URIStreamOpenerTest.h deleted file mode 100644 index 2d3543d7610..00000000000 --- a/contrib/libpoco/Foundation/testsuite/src/URIStreamOpenerTest.h +++ /dev/null @@ -1,46 +0,0 @@ -// -// URIStreamOpenerTest.h -// -// $Id: //poco/1.4/Foundation/testsuite/src/URIStreamOpenerTest.h#1 $ -// -// Definition of the URIStreamOpenerTest class. -// -// Copyright (c) 2004-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef URIStreamOpenerTest_INCLUDED -#define URIStreamOpenerTest_INCLUDED - - -#include "Poco/Foundation.h" -#include "CppUnit/TestCase.h" - - -class URIStreamOpenerTest: public CppUnit::TestCase -{ -public: - URIStreamOpenerTest(const std::string& name); - ~URIStreamOpenerTest(); - - void testStreamOpenerFile(); - void testStreamOpenerRelative(); - void testStreamOpenerURI(); - void testStreamOpenerURIResolve(); - void testStreamOpenerPath(); - void testStreamOpenerPathResolve(); - void testRegisterUnregister(); - - void setUp(); - void tearDown(); - - static CppUnit::Test* suite(); - -private: -}; - - -#endif // URIStreamOpenerTest_INCLUDED diff --git a/contrib/libpoco/Foundation/testsuite/src/URITest.cpp b/contrib/libpoco/Foundation/testsuite/src/URITest.cpp deleted file mode 100644 index e7753f7e20f..00000000000 --- a/contrib/libpoco/Foundation/testsuite/src/URITest.cpp +++ /dev/null @@ -1,878 +0,0 @@ -// -// URITest.cpp -// -// $Id: //poco/1.4/Foundation/testsuite/src/URITest.cpp#3 $ -// -// Copyright (c) 2004-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "URITest.h" -#include "CppUnit/TestCaller.h" -#include "CppUnit/TestSuite.h" -#include "Poco/URI.h" -#include "Poco/Path.h" - - -using Poco::URI; -using Poco::Path; - - -URITest::URITest(const std::string& name): CppUnit::TestCase(name) -{ -} - - -URITest::~URITest() -{ -} - - -void URITest::testConstruction() -{ - URI uri; - assert (uri.getScheme().empty()); - assert (uri.getAuthority().empty()); - assert (uri.getUserInfo().empty()); - assert (uri.getHost().empty()); - assert (uri.getPort() == 0); - assert (uri.getPath().empty()); - assert (uri.getQuery().empty()); - assert (uri.getFragment().empty()); - - uri.setScheme("ftp"); - assert (uri.getScheme() == "ftp"); - assert (uri.getPort() == 21); - - uri.setScheme("HTTP"); - assert (uri.getScheme() == "http"); - - uri.setAuthority("www.appinf.com"); - assert (uri.getAuthority() == "www.appinf.com"); - assert (uri.getPort() == 80); - - uri.setAuthority("user@services.appinf.com:8000"); - assert (uri.getUserInfo() == "user"); - assert (uri.getHost() == "services.appinf.com"); - assert (uri.getPort() == 8000); - - uri.setPath("/index.html"); - assert (uri.getPath() == "/index.html"); - - uri.setPath("/file%20with%20spaces.html"); - assert (uri.getPath() == "/file with spaces.html"); - - uri.setPathEtc("/query.cgi?query=foo"); - assert (uri.getPath() == "/query.cgi"); - assert (uri.getQuery() == "query=foo"); - assert (uri.getFragment().empty()); - assert (uri.getPathEtc() == "/query.cgi?query=foo"); - assert (uri.getPathAndQuery() == "/query.cgi?query=foo"); - - uri.setPathEtc("/query.cgi?query=bar#frag"); - assert (uri.getPath() == "/query.cgi"); - assert (uri.getQuery() == "query=bar"); - assert (uri.getFragment() == "frag"); - assert (uri.getPathEtc() == "/query.cgi?query=bar#frag"); - assert (uri.getPathAndQuery() == "/query.cgi?query=bar"); - - uri.setQuery("query=test"); - assert (uri.getQuery() == "query=test"); - - uri.setFragment("result"); - assert (uri.getFragment() == "result"); - - URI uri2("file", "/home/guenter/foo.bar"); - assert (uri2.getScheme() == "file"); - assert (uri2.getPath() == "/home/guenter/foo.bar"); - - URI uri3("http", "www.appinf.com", "/index.html"); - assert (uri3.getScheme() == "http"); - assert (uri3.getAuthority() == "www.appinf.com"); - assert (uri3.getPath() == "/index.html"); - - URI uri4("http", "www.appinf.com:8000", "/index.html"); - assert (uri4.getScheme() == "http"); - assert (uri4.getAuthority() == "www.appinf.com:8000"); - assert (uri4.getPath() == "/index.html"); - - URI uri5("http", "user@www.appinf.com:8000", "/index.html"); - assert (uri5.getScheme() == "http"); - assert (uri5.getUserInfo() == "user"); - assert (uri5.getHost() == "www.appinf.com"); - assert (uri5.getPort() == 8000); - assert (uri5.getAuthority() == "user@www.appinf.com:8000"); - assert (uri5.getPath() == "/index.html"); - - URI uri6("http", "user@www.appinf.com:80", "/index.html"); - assert (uri6.getScheme() == "http"); - assert (uri6.getUserInfo() == "user"); - assert (uri6.getHost() == "www.appinf.com"); - assert (uri6.getPort() == 80); - assert (uri6.getAuthority() == "user@www.appinf.com"); - assert (uri6.getPath() == "/index.html"); - - URI uri7("http", "user@www.appinf.com:", "/index.html"); - assert (uri7.getScheme() == "http"); - assert (uri7.getUserInfo() == "user"); - assert (uri7.getHost() == "www.appinf.com"); - assert (uri7.getPort() == 80); - assert (uri7.getAuthority() == "user@www.appinf.com"); - assert (uri7.getPath() == "/index.html"); - - URI uri8("http", "www.appinf.com", "/index.html", "query=test"); - assert (uri8.getScheme() == "http"); - assert (uri8.getAuthority() == "www.appinf.com"); - assert (uri8.getPath() == "/index.html"); - assert (uri8.getQuery() == "query=test"); - - URI uri9("http", "www.appinf.com", "/index.html", "query=test", "fragment"); - assert (uri9.getScheme() == "http"); - assert (uri9.getAuthority() == "www.appinf.com"); - assert (uri9.getPath() == "/index.html"); - assert (uri9.getPathEtc() == "/index.html?query=test#fragment"); - assert (uri9.getQuery() == "query=test"); - assert (uri9.getFragment() == "fragment"); - - uri9.clear(); - assert (uri9.getScheme().empty()); - assert (uri9.getAuthority().empty()); - assert (uri9.getUserInfo().empty()); - assert (uri9.getHost().empty()); - assert (uri9.getPort() == 0); - assert (uri9.getPath().empty()); - assert (uri9.getQuery().empty()); - assert (uri9.getFragment().empty()); - - URI uri10("ldap", "[2001:db8::7]", "/c=GB?objectClass?one"); - assert (uri10.getScheme() == "ldap"); - assert (uri10.getUserInfo().empty()); - assert (uri10.getHost() == "2001:db8::7"); - assert (uri10.getPort() == 389); - assert (uri10.getAuthority() == "[2001:db8::7]"); - assert (uri10.getPathEtc() == "/c=GB?objectClass?one"); - - URI uri11("http", "www.appinf.com", "/index.html?query=test#fragment"); - assert (uri11.getScheme() == "http"); - assert (uri11.getAuthority() == "www.appinf.com"); - assert (uri11.getPath() == "/index.html"); - assert (uri11.getPathEtc() == "/index.html?query=test#fragment"); - assert (uri11.getQuery() == "query=test"); - assert (uri11.getFragment() == "fragment"); -} - - -void URITest::testParse() -{ - URI uri("http://www.appinf.com"); - assert (uri.getScheme() == "http"); - assert (uri.getAuthority() == "www.appinf.com"); - assert (uri.getPath().empty()); - assert (uri.getQuery().empty()); - assert (uri.getFragment().empty()); - assert (!uri.isRelative()); - - uri = "http://www.appinf.com/"; - assert (uri.getScheme() == "http"); - assert (uri.getAuthority() == "www.appinf.com"); - assert (uri.getPath() == "/"); - assert (uri.getQuery().empty()); - assert (uri.getFragment().empty()); - assert (!uri.isRelative()); - - uri = "ftp://anonymous@ftp.appinf.com/pub/"; - assert (uri.getScheme() == "ftp"); - assert (uri.getUserInfo() == "anonymous"); - assert (uri.getHost() == "ftp.appinf.com"); - assert (uri.getPort() == 21); - assert (uri.getAuthority() == "anonymous@ftp.appinf.com"); - assert (uri.getPath() == "/pub/"); - assert (uri.getQuery().empty()); - assert (uri.getFragment().empty()); - assert (!uri.isRelative()); - assert (!uri.isRelative()); - - uri = "https://www.appinf.com/index.html#top"; - assert (uri.getScheme() == "https"); - assert (uri.getHost() == "www.appinf.com"); - assert (uri.getPort() == 443); - assert (uri.getPath() == "/index.html"); - assert (uri.getQuery().empty()); - assert (uri.getFragment() == "top"); - assert (!uri.isRelative()); - - uri = "http://www.appinf.com/search.cgi?keyword=test&scope=all"; - assert (uri.getScheme() == "http"); - assert (uri.getHost() == "www.appinf.com"); - assert (uri.getPort() == 80); - assert (uri.getPath() == "/search.cgi"); - assert (uri.getQuery() == "keyword=test&scope=all"); - assert (uri.getFragment().empty()); - assert (!uri.isRelative()); - - uri = "http://www.appinf.com/search.cgi?keyword=test&scope=all#result"; - assert (uri.getScheme() == "http"); - assert (uri.getHost() == "www.appinf.com"); - assert (uri.getPort() == 80); - assert (uri.getPath() == "/search.cgi"); - assert (uri.getQuery() == "keyword=test&scope=all"); - assert (uri.getFragment() == "result"); - assert (!uri.isRelative()); - - uri = "http://www.appinf.com/search.cgi?keyword=test%20encoded&scope=all#result"; - assert (uri.getScheme() == "http"); - assert (uri.getHost() == "www.appinf.com"); - assert (uri.getPort() == 80); - assert (uri.getPath() == "/search.cgi"); - assert (uri.getQuery() == "keyword=test encoded&scope=all"); - assert (uri.getFragment() == "result"); - assert (!uri.isRelative()); - - uri = "ldap://[2001:db8::7]/c=GB?objectClass?one"; - assert (uri.getScheme() == "ldap"); - assert (uri.getUserInfo().empty()); - assert (uri.getHost() == "2001:db8::7"); - assert (uri.getPort() == 389); - assert (uri.getAuthority() == "[2001:db8::7]"); - assert (uri.getPath() == "/c=GB"); - assert (uri.getQuery() == "objectClass?one"); - assert (uri.getFragment().empty()); - - uri = "mailto:John.Doe@example.com"; - assert (uri.getScheme() == "mailto"); - assert (uri.getUserInfo().empty()); - assert (uri.getHost().empty()); - assert (uri.getPort() == 0); - assert (uri.getAuthority().empty()); - assert (uri.getPath() == "John.Doe@example.com"); - assert (uri.getQuery().empty()); - assert (uri.getFragment().empty()); - - uri = "tel:+1-816-555-1212"; - assert (uri.getScheme() == "tel"); - assert (uri.getUserInfo().empty()); - assert (uri.getHost().empty()); - assert (uri.getPort() == 0); - assert (uri.getAuthority().empty()); - assert (uri.getPath() == "+1-816-555-1212"); - assert (uri.getQuery().empty()); - assert (uri.getFragment().empty()); - - uri = "telnet://192.0.2.16:80"; - assert (uri.getScheme() == "telnet"); - assert (uri.getUserInfo().empty()); - assert (uri.getHost() == "192.0.2.16"); - assert (uri.getPort() == 80); - assert (uri.getAuthority() == "192.0.2.16:80"); - assert (uri.getPath().empty()); - assert (uri.getQuery().empty()); - assert (uri.getFragment().empty()); - - uri = "urn:oasis:names:specification:docbook:dtd:xml:4.1.2"; - assert (uri.getScheme() == "urn"); - assert (uri.getUserInfo().empty()); - assert (uri.getHost().empty()); - assert (uri.getPort() == 0); - assert (uri.getAuthority().empty()); - assert (uri.getPath() == "oasis:names:specification:docbook:dtd:xml:4.1.2"); - assert (uri.getQuery().empty()); - assert (uri.getFragment().empty()); - - uri = ""; - assert (uri.getScheme().empty()); - assert (uri.getAuthority().empty()); - assert (uri.getUserInfo().empty()); - assert (uri.getHost().empty()); - assert (uri.getPort() == 0); - assert (uri.getPath().empty()); - assert (uri.getQuery().empty()); - assert (uri.getFragment().empty()); - assert (uri.empty()); - - // relative references - - uri = "/foo/bar"; - assert (uri.getScheme().empty()); - assert (uri.getAuthority().empty()); - assert (uri.getUserInfo().empty()); - assert (uri.getHost().empty()); - assert (uri.getPort() == 0); - assert (uri.getPath() == "/foo/bar"); - assert (uri.getQuery().empty()); - assert (uri.getFragment().empty()); - assert (uri.isRelative()); - - uri = "./foo/bar"; - assert (uri.getScheme().empty()); - assert (uri.getAuthority().empty()); - assert (uri.getUserInfo().empty()); - assert (uri.getHost().empty()); - assert (uri.getPort() == 0); - assert (uri.getPath() == "./foo/bar"); - assert (uri.getQuery().empty()); - assert (uri.getFragment().empty()); - assert (uri.isRelative()); - - uri = "../foo/bar"; - assert (uri.getScheme().empty()); - assert (uri.getAuthority().empty()); - assert (uri.getUserInfo().empty()); - assert (uri.getHost().empty()); - assert (uri.getPort() == 0); - assert (uri.getPath() == "../foo/bar"); - assert (uri.getQuery().empty()); - assert (uri.getFragment().empty()); - assert (uri.isRelative()); - - uri = "index.html"; - assert (uri.getScheme().empty()); - assert (uri.getAuthority().empty()); - assert (uri.getUserInfo().empty()); - assert (uri.getHost().empty()); - assert (uri.getPort() == 0); - assert (uri.getPath() == "index.html"); - assert (uri.getQuery().empty()); - assert (uri.getFragment().empty()); - assert (uri.isRelative()); - - uri = "index.html#frag"; - assert (uri.getScheme().empty()); - assert (uri.getAuthority().empty()); - assert (uri.getUserInfo().empty()); - assert (uri.getHost().empty()); - assert (uri.getPort() == 0); - assert (uri.getPath() == "index.html"); - assert (uri.getQuery().empty()); - assert (uri.getFragment() == "frag"); - assert (uri.isRelative()); - - uri = "?query=test"; - assert (uri.getScheme().empty()); - assert (uri.getAuthority().empty()); - assert (uri.getUserInfo().empty()); - assert (uri.getHost().empty()); - assert (uri.getPort() == 0); - assert (uri.getPath().empty()); - assert (uri.getQuery() == "query=test"); - assert (uri.getFragment().empty()); - assert (uri.isRelative()); - - uri = "?query=test#frag"; - assert (uri.getScheme().empty()); - assert (uri.getAuthority().empty()); - assert (uri.getUserInfo().empty()); - assert (uri.getHost().empty()); - assert (uri.getPort() == 0); - assert (uri.getPath().empty()); - assert (uri.getQuery() == "query=test"); - assert (uri.getFragment() == "frag"); - assert (uri.isRelative()); - - uri = "#frag"; - assert (uri.getScheme().empty()); - assert (uri.getAuthority().empty()); - assert (uri.getUserInfo().empty()); - assert (uri.getHost().empty()); - assert (uri.getPort() == 0); - assert (uri.getPath().empty()); - assert (uri.getQuery().empty()); - assert (uri.getFragment() == "frag"); - assert (uri.isRelative()); - - uri = "#"; - assert (uri.getScheme().empty()); - assert (uri.getAuthority().empty()); - assert (uri.getUserInfo().empty()); - assert (uri.getHost().empty()); - assert (uri.getPort() == 0); - assert (uri.getPath().empty()); - assert (uri.getQuery().empty()); - assert (uri.getFragment().empty()); - assert (uri.isRelative()); - - uri = "file:///a/b/c"; - assert (uri.getScheme() == "file"); - assert (uri.getAuthority().empty()); - assert (uri.getUserInfo().empty()); - assert (uri.getHost().empty()); - assert (uri.getPort() == 0); - assert (uri.getPath() == "/a/b/c"); - assert (uri.getQuery().empty()); - assert (uri.getFragment().empty()); - assert (!uri.isRelative()); - - uri = "file://localhost/a/b/c"; - assert (uri.getScheme() == "file"); - assert (uri.getAuthority() == "localhost"); - assert (uri.getUserInfo().empty()); - assert (uri.getHost() == "localhost"); - assert (uri.getPort() == 0); - assert (uri.getPath() == "/a/b/c"); - assert (uri.getQuery().empty()); - assert (uri.getFragment().empty()); - assert (!uri.isRelative()); - - uri = "file:///c:/Windows/system32/"; - assert (uri.getScheme() == "file"); - assert (uri.getAuthority().empty()); - assert (uri.getUserInfo().empty()); - assert (uri.getHost().empty()); - assert (uri.getPort() == 0); - assert (uri.getPath() == "/c:/Windows/system32/"); - assert (uri.getQuery().empty()); - assert (uri.getFragment().empty()); - assert (!uri.isRelative()); - - uri = "./c:/Windows/system32/"; - assert (uri.getScheme().empty()); - assert (uri.getAuthority().empty()); - assert (uri.getUserInfo().empty()); - assert (uri.getHost().empty()); - assert (uri.getPort() == 0); - assert (uri.getPath() == "./c:/Windows/system32/"); - assert (uri.getQuery().empty()); - assert (uri.getFragment().empty()); - assert (uri.isRelative()); - -} - - -void URITest::testToString() -{ - URI uri("http://www.appinf.com"); - assert (uri.toString() == "http://www.appinf.com"); - - uri = "http://www.appinf.com/"; - assert (uri.toString() == "http://www.appinf.com/"); - - uri = "ftp://anonymous@ftp.appinf.com/pub/"; - assert (uri.toString() == "ftp://anonymous@ftp.appinf.com/pub/"); - - uri = "https://www.appinf.com/index.html#top"; - assert (uri.toString() == "https://www.appinf.com/index.html#top"); - - uri = "http://www.appinf.com/search.cgi?keyword=test&scope=all"; - assert (uri.toString() == "http://www.appinf.com/search.cgi?keyword=test&scope=all"); - - uri = "http://www.appinf.com/search.cgi?keyword=test&scope=all#result"; - assert (uri.toString() == "http://www.appinf.com/search.cgi?keyword=test&scope=all#result"); - - uri = "http://www.appinf.com/search.cgi?keyword=test%20encoded&scope=all#result"; - assert (uri.toString() == "http://www.appinf.com/search.cgi?keyword=test%20encoded&scope=all#result"); - - uri = "ldap://[2001:db8::7]/c=GB?objectClass?one"; - assert (uri.toString() == "ldap://[2001:db8::7]/c=GB?objectClass?one"); - - uri = "mailto:John.Doe@example.com"; - assert (uri.toString() == "mailto:John.Doe@example.com"); - - uri = "tel:+1-816-555-1212"; - assert (uri.toString() == "tel:+1-816-555-1212"); - - uri = "telnet://192.0.2.16:80"; - assert (uri.toString() == "telnet://192.0.2.16:80"); - - uri = "urn:oasis:names:specification:docbook:dtd:xml:4.1.2"; - assert (uri.toString() == "urn:oasis:names:specification:docbook:dtd:xml:4.1.2"); - - uri = ""; - assert (uri.toString() == ""); - - // relative references - - uri = "/foo/bar"; - assert (uri.toString() == "/foo/bar"); - - uri = "./foo/bar"; - assert (uri.toString() == "./foo/bar"); - - uri = "../foo/bar"; - assert (uri.toString() == "../foo/bar"); - - uri = "//foo/bar"; - assert (uri.toString() == "//foo/bar"); - - uri = "index.html"; - assert (uri.toString() == "index.html"); - - uri = "index.html#frag"; - assert (uri.toString() == "index.html#frag"); - - uri = "?query=test"; - assert (uri.toString() == "?query=test"); - - uri = "?query=test#frag"; - assert (uri.toString() == "?query=test#frag"); - - uri = "#frag"; - assert (uri.toString() == "#frag"); - - uri = "#"; - assert (uri.toString() == ""); - - uri = "file:///a/b/c"; - assert (uri.toString() == "file:///a/b/c"); - - uri = "file://localhost/a/b/c"; - assert (uri.toString() == "file://localhost/a/b/c"); - - uri = "file:///c:/Windows/system32/"; - assert (uri.toString() == "file:///c:/Windows/system32/"); - - uri = "./c:/Windows/system32/"; - assert (uri.toString() == "./c:/Windows/system32/"); - - uri = "http://www.appinf.com"; - uri.setRawQuery("query=test"); - assert (uri.toString() == "http://www.appinf.com/?query=test"); -} - - -void URITest::testCompare() -{ - URI uri1("http://www.appinf.com"); - URI uri2("HTTP://www.appinf.com:80"); - assert (uri1 == uri2); - assert (uri1 == "http://www.appinf.com:"); - assert (uri1 != "http://www.google.com"); - - uri1 = "/foo/bar"; - assert (uri1 == "/foo/bar"); - assert (uri1 != "/foo/baz"); - - uri1 = "?query"; - assert (uri1 == "?query"); - assert (uri1 != "?query2"); - - uri1 = "#frag"; - assert (uri1 == "#frag"); - assert (uri1 != "#frag2"); - - uri1 = "/index.html#frag"; - assert (uri1 == "/index.html#frag"); - assert (uri1 != "/index.html"); -} - - -void URITest::testNormalize() -{ - URI uri("http://www.appinf.com"); - uri.normalize(); - assert (uri.toString() == "http://www.appinf.com"); - - uri = "http://www.appinf.com/"; - uri.normalize(); - assert (uri.toString() == "http://www.appinf.com/"); - - uri = "http://www.appinf.com/foo/bar/./index.html"; - uri.normalize(); - assert (uri.toString() == "http://www.appinf.com/foo/bar/index.html"); - - uri = "http://www.appinf.com/foo/bar/../index.html"; - uri.normalize(); - assert (uri.toString() == "http://www.appinf.com/foo/index.html"); - - uri = "http://www.appinf.com/foo/./bar/../index.html"; - uri.normalize(); - assert (uri.toString() == "http://www.appinf.com/foo/index.html"); - - uri = "http://www.appinf.com/foo/./bar/../index.html"; - uri.normalize(); - assert (uri.toString() == "http://www.appinf.com/foo/index.html"); - - uri = "http://www.appinf.com/foo/bar/../../index.html"; - uri.normalize(); - assert (uri.toString() == "http://www.appinf.com/index.html"); - - uri = "http://www.appinf.com/foo/bar/../../../index.html"; - uri.normalize(); - assert (uri.toString() == "http://www.appinf.com/index.html"); - - uri = "http://www.appinf.com/foo/bar/.././../index.html"; - uri.normalize(); - assert (uri.toString() == "http://www.appinf.com/index.html"); - - uri = "http://www.appinf.com/./foo/bar/index.html"; - uri.normalize(); - assert (uri.toString() == "http://www.appinf.com/foo/bar/index.html"); - - uri = "http://www.appinf.com/../foo/bar/index.html"; - uri.normalize(); - assert (uri.toString() == "http://www.appinf.com/foo/bar/index.html"); - - uri = "http://www.appinf.com/../foo/bar/"; - uri.normalize(); - assert (uri.toString() == "http://www.appinf.com/foo/bar/"); - - uri = "http://www.appinf.com/../foo/../"; - uri.normalize(); - assert (uri.toString() == "http://www.appinf.com/"); - - uri = "file:///c:/Windows/system32/"; - uri.normalize(); - assert (uri.toString() == "file:///c:/Windows/system32/"); - - uri.clear(); - uri.setPath("c:/windows/system32/"); - uri.normalize(); - assert (uri.toString() == "./c:/windows/system32/"); -} - - -void URITest::testResolve() -{ - URI uri("http://www.appinf.com"); - - uri.resolve("/index.html"); - assert (uri.toString() == "http://www.appinf.com/index.html"); - - uri.resolve("#frag"); - assert (uri.toString() == "http://www.appinf.com/index.html#frag"); - - uri = "http://www.appinf.com/html"; - uri.resolve("../images/foo.gif"); - assert (uri.toString() == "http://www.appinf.com/images/foo.gif"); - - uri = "http://www.appinf.com/html/"; - uri.resolve("."); - assert (uri.toString() == "http://www.appinf.com/html/"); - - uri = "http://www.appinf.com/html/"; - uri.resolve("."); - assert (uri.toString() == "http://www.appinf.com/html/"); - - uri = "http://www.appinf.com/html/"; - uri.resolve(".."); - assert (uri.toString() == "http://www.appinf.com/"); - - uri = "http://www.appinf.com/html/"; - uri.resolve("index.html"); - assert (uri.toString() == "http://www.appinf.com/html/index.html"); - - uri = "http://www.appinf.com/html/"; - uri.resolve("/index.html"); - assert (uri.toString() == "http://www.appinf.com/index.html"); - - uri = "/a/b/c/d/e"; - uri.resolve("./../../f/./g"); - assert (uri.toString() == "/a/b/f/g"); - - uri = "/a/b/../c/"; - uri.resolve("../d"); - assert (uri.toString() == "/a/d"); - - uri = "/a/b/../c/"; - uri.resolve("../d/"); - assert (uri.toString() == "/a/d/"); - - uri = "/a/b/c/"; - uri.resolve("../../../../d/"); - assert (uri.toString() == "/d/"); - - uri = "/a/b/c/"; - uri.resolve("%2e%2e/%2e%2e/%2e%2e/../d/"); - assert (uri.toString() == "/d/"); - - uri = "/a/b/c/"; - uri.resolve(""); - assert (uri.toString() == "/a/b/c/"); - - uri = "/a/b/c/"; - uri.resolve("/d/"); - assert (uri.toString() == "/d/"); - - uri = "/a/b/c"; - uri.resolve(""); - assert (uri.toString() == "/a/b/c"); - - uri = "/a/b/c"; - uri.resolve("?query=test"); - assert (uri.toString() == "/a/b/c?query=test"); - - uri = "/a/b/c"; - uri.resolve("#frag"); - assert (uri.toString() == "/a/b/c#frag"); - - uri = "http://www.appinf.com/html/"; - uri.resolve("http://www.google.com/"); - assert (uri.toString() == "http://www.google.com/"); - - uri = "http://www.appinf.com/"; - URI uri2(uri, "index.html"); - assert (uri2.toString() == "http://www.appinf.com/index.html"); - - uri = "index.html"; - URI uri3(uri, "search.html"); - assert (uri3.toString() == "search.html"); -} - - -void URITest::testSwap() -{ - URI uri1("http://www.appinf.com/search.cgi?keyword=test%20encoded&scope=all#result"); - URI uri2("mailto:John.Doe@example.com"); - - uri1.swap(uri2); - assert (uri1.toString() == "mailto:John.Doe@example.com"); - assert (uri2.toString() == "http://www.appinf.com/search.cgi?keyword=test%20encoded&scope=all#result"); -} - - -void URITest::testOther() -{ - // The search string is "hello%world"; google happens to ignore the '%' - // character, so it finds lots of hits for "hello world" programs. This is - // a convenient reproduction case, and a URL that actually works. - Poco::URI uri("http://google.com/search?q=hello%25world#frag%20ment"); - - assert(uri.getHost() == "google.com"); - assert(uri.getPath() == "/search"); - assert(uri.getQuery() == "q=hello%world"); - assert(uri.getRawQuery() == "q=hello%25world"); - assert(uri.getFragment() == "frag ment"); - assert(uri.toString() == "http://google.com/search?q=hello%25world#frag%20ment"); - assert(uri.getPathEtc() == "/search?q=hello%25world#frag%20ment"); - - uri.setQuery("q=foo&bar"); - assert(uri.getQuery() == "q=foo&bar"); - assert(uri.getRawQuery() == "q=foo&bar"); - assert(uri.toString() == "http://google.com/search?q=foo&bar#frag%20ment"); - assert(uri.getPathEtc() == "/search?q=foo&bar#frag%20ment"); - - uri.setQuery("q=foo/bar"); - assert(uri.getQuery() == "q=foo/bar"); - assert(uri.getRawQuery() == "q=foo%2Fbar"); - assert(uri.toString() == "http://google.com/search?q=foo%2Fbar#frag%20ment"); - assert(uri.getPathEtc() == "/search?q=foo%2Fbar#frag%20ment"); - - uri.setQuery("q=goodbye cruel world"); - assert(uri.getQuery() == "q=goodbye cruel world"); - assert(uri.getRawQuery() == "q=goodbye%20cruel%20world"); - assert(uri.toString() == "http://google.com/search?q=goodbye%20cruel%20world#frag%20ment"); - assert(uri.getPathEtc() == "/search?q=goodbye%20cruel%20world#frag%20ment"); - - uri.setRawQuery("q=pony%7eride"); - assert(uri.getQuery() == "q=pony~ride"); - assert(uri.getRawQuery() == "q=pony%7eride"); - assert(uri.toString() == "http://google.com/search?q=pony%7eride#frag%20ment"); - assert(uri.getPathEtc() == "/search?q=pony%7eride#frag%20ment"); - - uri.addQueryParameter("pa=ra&m1"); - assert(uri.getRawQuery() == "q=pony%7eride&pa%3Dra%26m1="); - assert(uri.getQuery() == "q=pony~ride&pa=ra&m1="); - uri.addQueryParameter("pa=ra&m2", "val&ue"); - assert(uri.getRawQuery() == "q=pony%7eride&pa%3Dra%26m1=&pa%3Dra%26m2=val%26ue"); - assert(uri.getQuery() == "q=pony~ride&pa=ra&m1=&pa=ra&m2=val&ue"); - - uri = "http://google.com/search?q=hello+world#frag%20ment"; - assert(uri.getHost() == "google.com"); - assert(uri.getPath() == "/search"); - assert(uri.getQuery() == "q=hello+world"); - assert(uri.getRawQuery() == "q=hello+world"); - assert(uri.getFragment() == "frag ment"); - assert(uri.toString() == "http://google.com/search?q=hello+world#frag%20ment"); - assert(uri.getPathEtc() == "/search?q=hello+world#frag%20ment"); -} - - -void URITest::testEncodeDecode() -{ - std::string str; - URI::encode("http://google.com/search?q=hello+world#frag ment", "+#?", str); - assert (str == "http://google.com/search%3Fq=hello%2Bworld%23frag%20ment"); - - str = ""; - URI::encode("http://google.com/search?q=hello+world#frag ment", "", str); - assert (str == "http://google.com/search?q=hello+world#frag%20ment"); - - str = ""; - URI::decode("http://google.com/search?q=hello+world#frag%20ment", str, true); - assert (str == "http://google.com/search?q=hello world#frag ment"); - - str = ""; - URI::decode("http://google.com/search?q=hello%2Bworld#frag%20ment", str); - assert (str == "http://google.com/search?q=hello+world#frag ment"); -} - - -void URITest::testFromPath() -{ - Path path1("/var/www/site/index.html", Path::PATH_UNIX); - URI uri1(path1); - assert (uri1.toString() == "file:///var/www/site/index.html"); - - Path path2("/var/www/site/with space.html", Path::PATH_UNIX); - URI uri2(path2); - assert (uri2.toString() == "file:///var/www/site/with%20space.html"); - - Path path3("c:\\www\\index.html", Path::PATH_WINDOWS); - URI uri3(path3); - assert (uri3.toString() == "file:///c:/www/index.html"); -} - - -void URITest::testQueryParameters() -{ - Poco::URI uri("http://google.com/search?q=hello+world&client=safari"); - URI::QueryParameters params = uri.getQueryParameters(); - assert (params.size() == 2); - assert (params[0].first == "q"); - assert (params[0].second == "hello world"); - assert (params[1].first == "client"); - assert (params[1].second == "safari"); - - uri.setQueryParameters(params); - assert (uri.toString() == "http://google.com/search?q=hello%20world&client=safari"); - - uri = "http://google.com/search?q=&client&"; - params = uri.getQueryParameters(); - assert (params.size() == 2); - assert (params[0].first == "q"); - assert (params[0].second == ""); - assert (params[1].first == "client"); - assert (params[1].second == ""); - - uri.setQueryParameters(params); - assert (uri.toString() == "http://google.com/search?q=&client="); - - params[0].second = "foo/bar?"; - uri.setQueryParameters(params); - assert (uri.toString() == "http://google.com/search?q=foo%2Fbar%3F&client="); - - params[0].second = "foo&bar"; - uri.setQueryParameters(params); - assert (uri.toString() == "http://google.com/search?q=foo%26bar&client="); -} - - -void URITest::setUp() -{ -} - - -void URITest::tearDown() -{ -} - - -CppUnit::Test* URITest::suite() -{ - CppUnit::TestSuite* pSuite = new CppUnit::TestSuite("URITest"); - - CppUnit_addTest(pSuite, URITest, testConstruction); - CppUnit_addTest(pSuite, URITest, testParse); - CppUnit_addTest(pSuite, URITest, testToString); - CppUnit_addTest(pSuite, URITest, testCompare); - CppUnit_addTest(pSuite, URITest, testNormalize); - CppUnit_addTest(pSuite, URITest, testResolve); - CppUnit_addTest(pSuite, URITest, testSwap); - CppUnit_addTest(pSuite, URITest, testEncodeDecode); - CppUnit_addTest(pSuite, URITest, testOther); - CppUnit_addTest(pSuite, URITest, testFromPath); - CppUnit_addTest(pSuite, URITest, testQueryParameters); - - return pSuite; -} diff --git a/contrib/libpoco/Foundation/testsuite/src/URITest.h b/contrib/libpoco/Foundation/testsuite/src/URITest.h deleted file mode 100644 index 83416c8f603..00000000000 --- a/contrib/libpoco/Foundation/testsuite/src/URITest.h +++ /dev/null @@ -1,50 +0,0 @@ -// -// URITest.h -// -// $Id: //poco/1.4/Foundation/testsuite/src/URITest.h#2 $ -// -// Definition of the URITest class. -// -// Copyright (c) 2004-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef URITest_INCLUDED -#define URITest_INCLUDED - - -#include "Poco/Foundation.h" -#include "CppUnit/TestCase.h" - - -class URITest: public CppUnit::TestCase -{ -public: - URITest(const std::string& name); - ~URITest(); - - void testConstruction(); - void testParse(); - void testToString(); - void testCompare(); - void testNormalize(); - void testResolve(); - void testSwap(); - void testEncodeDecode(); - void testOther(); - void testFromPath(); - void testQueryParameters(); - - void setUp(); - void tearDown(); - - static CppUnit::Test* suite(); - -private: -}; - - -#endif // URITest_INCLUDED diff --git a/contrib/libpoco/Foundation/testsuite/src/URITestSuite.cpp b/contrib/libpoco/Foundation/testsuite/src/URITestSuite.cpp deleted file mode 100644 index 7dbe1aa97bb..00000000000 --- a/contrib/libpoco/Foundation/testsuite/src/URITestSuite.cpp +++ /dev/null @@ -1,26 +0,0 @@ -// -// URITestSuite.cpp -// -// $Id: //poco/1.4/Foundation/testsuite/src/URITestSuite.cpp#1 $ -// -// Copyright (c) 2004-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "URITestSuite.h" -#include "URITest.h" -#include "URIStreamOpenerTest.h" - - -CppUnit::Test* URITestSuite::suite() -{ - CppUnit::TestSuite* pSuite = new CppUnit::TestSuite("URITestSuite"); - - pSuite->addTest(URITest::suite()); - pSuite->addTest(URIStreamOpenerTest::suite()); - - return pSuite; -} diff --git a/contrib/libpoco/Foundation/testsuite/src/URITestSuite.h b/contrib/libpoco/Foundation/testsuite/src/URITestSuite.h deleted file mode 100644 index 76d3c574f8e..00000000000 --- a/contrib/libpoco/Foundation/testsuite/src/URITestSuite.h +++ /dev/null @@ -1,29 +0,0 @@ -// -// URITestSuite.h -// -// $Id: //poco/1.4/Foundation/testsuite/src/URITestSuite.h#1 $ -// -// Definition of the URITestSuite class. -// -// Copyright (c) 2004-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef URITestSuite_INCLUDED -#define URITestSuite_INCLUDED - - -#include "CppUnit/TestSuite.h" - - -class URITestSuite -{ -public: - static CppUnit::Test* suite(); -}; - - -#endif // URITestSuite_INCLUDED diff --git a/contrib/libpoco/Foundation/testsuite/src/UTF8StringTest.cpp b/contrib/libpoco/Foundation/testsuite/src/UTF8StringTest.cpp deleted file mode 100644 index 1f14fea936c..00000000000 --- a/contrib/libpoco/Foundation/testsuite/src/UTF8StringTest.cpp +++ /dev/null @@ -1,106 +0,0 @@ -// -// UTF8StringTest.cpp -// -// $Id: //poco/1.4/Foundation/testsuite/src/UTF8StringTest.cpp#1 $ -// -// Copyright (c) 2004-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "UTF8StringTest.h" -#include "CppUnit/TestCaller.h" -#include "CppUnit/TestSuite.h" -#include "Poco/UTF8String.h" - - -using Poco::UTF8; - - -UTF8StringTest::UTF8StringTest(const std::string& name): CppUnit::TestCase(name) -{ -} - - -UTF8StringTest::~UTF8StringTest() -{ -} - - -void UTF8StringTest::testCompare() -{ - std::string a1("aaaaa"); - std::string b1("bbbbb"); - - assert (UTF8::icompare(a1, b1) < 0); - - std::string a2("aaaaa"); - std::string b2("BBBBB"); - - assert (UTF8::icompare(a2, b2) < 0); - - std::string a3("AAAAA"); - std::string b3("bbbbb"); - - assert (UTF8::icompare(a3, b3) < 0); - - std::string a4("aaaaa"); - std::string b4("AAAAA"); - - assert (UTF8::icompare(a4, b4) == 0); - - std::string a5("AAAAA"); - std::string b5("bbbbb"); - - assert (UTF8::icompare(a5, b5) < 0); - - std::string a6("\303\274\303\266\303\244"); // "u"o"a - std::string b6("\303\234\303\226\303\204"); // "U"O"A - - assert (UTF8::icompare(a6, b6) == 0); -} - - -void UTF8StringTest::testTransform() -{ - std::string s1("abcde"); - UTF8::toUpperInPlace(s1); - assert (s1 == "ABCDE"); - - std::string s2("aBcDe123"); - UTF8::toUpperInPlace(s2); - assert (s2 == "ABCDE123"); - - std::string s3("\303\274\303\266\303\244"); // "u"o"a - UTF8::toUpperInPlace(s3); - assert (s3 == "\303\234\303\226\303\204"); // "U"O"A - UTF8::toLowerInPlace(s3); - assert (s3 == "\303\274\303\266\303\244"); // "u"o"a - - // a mix of invalid sequences - std::string str = "\xC2\xE5\xF0\xF8\xE8\xED\xFB+-++"; - assert ("???" == UTF8::toLower(str)); -} - - -void UTF8StringTest::setUp() -{ -} - - -void UTF8StringTest::tearDown() -{ -} - - -CppUnit::Test* UTF8StringTest::suite() -{ - CppUnit::TestSuite* pSuite = new CppUnit::TestSuite("UTF8StringTest"); - - CppUnit_addTest(pSuite, UTF8StringTest, testCompare); - CppUnit_addTest(pSuite, UTF8StringTest, testTransform); - - return pSuite; -} diff --git a/contrib/libpoco/Foundation/testsuite/src/UTF8StringTest.h b/contrib/libpoco/Foundation/testsuite/src/UTF8StringTest.h deleted file mode 100644 index af59a299d6c..00000000000 --- a/contrib/libpoco/Foundation/testsuite/src/UTF8StringTest.h +++ /dev/null @@ -1,41 +0,0 @@ -// -// UTF8StringTest.h -// -// $Id: //poco/1.4/Foundation/testsuite/src/UTF8StringTest.h#1 $ -// -// Definition of the UTF8StringTest class. -// -// Copyright (c) 2007, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef UTF8StringTest_INCLUDED -#define UTF8StringTest_INCLUDED - - -#include "Poco/Foundation.h" -#include "CppUnit/TestCase.h" - - -class UTF8StringTest: public CppUnit::TestCase -{ -public: - UTF8StringTest(const std::string& name); - ~UTF8StringTest(); - - void testCompare(); - void testTransform(); - - void setUp(); - void tearDown(); - - static CppUnit::Test* suite(); - -private: -}; - - -#endif // UTF8StringTest_INCLUDED diff --git a/contrib/libpoco/Foundation/testsuite/src/UUIDGeneratorTest.cpp b/contrib/libpoco/Foundation/testsuite/src/UUIDGeneratorTest.cpp deleted file mode 100644 index 8e69d3e6dfc..00000000000 --- a/contrib/libpoco/Foundation/testsuite/src/UUIDGeneratorTest.cpp +++ /dev/null @@ -1,116 +0,0 @@ -// -// UUIDGeneratorTest.cpp -// -// $Id: //poco/1.4/Foundation/testsuite/src/UUIDGeneratorTest.cpp#1 $ -// -// Copyright (c) 2004-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "UUIDGeneratorTest.h" -#include "CppUnit/TestCaller.h" -#include "CppUnit/TestSuite.h" -#include "Poco/UUIDGenerator.h" -#include "Poco/UUID.h" -#include "Poco/SHA1Engine.h" -#include - - -using Poco::UUIDGenerator; -using Poco::UUID; - - -UUIDGeneratorTest::UUIDGeneratorTest(const std::string& name): CppUnit::TestCase(name) -{ -} - - -UUIDGeneratorTest::~UUIDGeneratorTest() -{ -} - - -void UUIDGeneratorTest::testTimeBased() -{ - UUIDGenerator& gen = UUIDGenerator::defaultGenerator(); - - std::set uuids; - for (int i = 0; i < 1000; ++i) - { - UUID uuid = gen.create(); - assert (uuid.version() == UUID::UUID_TIME_BASED); - assert (uuids.find(uuid) == uuids.end()); - uuids.insert(uuid); - } -} - - -void UUIDGeneratorTest::testRandom() -{ - UUIDGenerator& gen = UUIDGenerator::defaultGenerator(); - - std::set uuids; - for (int i = 0; i < 1000; ++i) - { - UUID uuid = gen.createRandom(); - assert (uuid.version() == UUID::UUID_RANDOM); - assert (uuids.find(uuid) == uuids.end()); - uuids.insert(uuid); - } -} - - -void UUIDGeneratorTest::testNameBased() -{ - UUIDGenerator& gen = UUIDGenerator::defaultGenerator(); - - UUID uuid1 = gen.createFromName(UUID::uri(), "http://www.appinf.com/uuid"); - assert (uuid1.version() == UUID::UUID_NAME_BASED); - assert (uuid1.variant() == 2); - - UUID uuid2 = gen.createFromName(UUID::uri(), "http://www.appinf.com/uuid2"); - assert (uuid2 != uuid1); - - UUID uuid3 = gen.createFromName(UUID::dns(), "www.appinf.com"); - assert (uuid3 != uuid1); - - UUID uuid4 = gen.createFromName(UUID::oid(), "1.3.6.1.4.1"); - assert (uuid4 != uuid1); - - UUID uuid5 = gen.createFromName(UUID::x500(), "cn=Guenter Obiltschnig, ou=People, o=Applied Informatics, c=at"); - assert (uuid5 != uuid1); - - UUID uuid6 = gen.createFromName(UUID::uri(), "http://www.appinf.com/uuid"); - assert (uuid6 == uuid1); - - Poco::SHA1Engine sha1; - UUID uuid7 = gen.createFromName(UUID::uri(), "http://www.appinf.com/uuid", sha1); - assert (uuid7.version() == UUID::UUID_NAME_BASED_SHA1); - assert (uuid7.variant() == 2); - assert (uuid7 != uuid1); -} - - -void UUIDGeneratorTest::setUp() -{ -} - - -void UUIDGeneratorTest::tearDown() -{ -} - - -CppUnit::Test* UUIDGeneratorTest::suite() -{ - CppUnit::TestSuite* pSuite = new CppUnit::TestSuite("UUIDGeneratorTest"); - - CppUnit_addTest(pSuite, UUIDGeneratorTest, testTimeBased); - CppUnit_addTest(pSuite, UUIDGeneratorTest, testRandom); - CppUnit_addTest(pSuite, UUIDGeneratorTest, testNameBased); - - return pSuite; -} diff --git a/contrib/libpoco/Foundation/testsuite/src/UUIDGeneratorTest.h b/contrib/libpoco/Foundation/testsuite/src/UUIDGeneratorTest.h deleted file mode 100644 index b9f93e7d357..00000000000 --- a/contrib/libpoco/Foundation/testsuite/src/UUIDGeneratorTest.h +++ /dev/null @@ -1,42 +0,0 @@ -// -// UUIDGeneratorTest.h -// -// $Id: //poco/1.4/Foundation/testsuite/src/UUIDGeneratorTest.h#1 $ -// -// Definition of the UUIDGeneratorTest class. -// -// Copyright (c) 2004-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef UUIDGeneratorTest_INCLUDED -#define UUIDGeneratorTest_INCLUDED - - -#include "Poco/Foundation.h" -#include "CppUnit/TestCase.h" - - -class UUIDGeneratorTest: public CppUnit::TestCase -{ -public: - UUIDGeneratorTest(const std::string& name); - ~UUIDGeneratorTest(); - - void testTimeBased(); - void testRandom(); - void testNameBased(); - - void setUp(); - void tearDown(); - - static CppUnit::Test* suite(); - -private: -}; - - -#endif // UUIDGeneratorTest_INCLUDED diff --git a/contrib/libpoco/Foundation/testsuite/src/UUIDTest.cpp b/contrib/libpoco/Foundation/testsuite/src/UUIDTest.cpp deleted file mode 100644 index 613fc046888..00000000000 --- a/contrib/libpoco/Foundation/testsuite/src/UUIDTest.cpp +++ /dev/null @@ -1,238 +0,0 @@ -// -// UUIDTest.cpp -// -// $Id: //poco/1.4/Foundation/testsuite/src/UUIDTest.cpp#2 $ -// -// Copyright (c) 2004-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "UUIDTest.h" -#include "CppUnit/TestCaller.h" -#include "CppUnit/TestSuite.h" -#include "Poco/UUID.h" -#include "Poco/Exception.h" - - -using Poco::UUID; - - -UUIDTest::UUIDTest(const std::string& name): CppUnit::TestCase(name) -{ -} - - -UUIDTest::~UUIDTest() -{ -} - - -void UUIDTest::testParse() -{ - UUID uuid("6ba7b810-9dad-11d1-80b4-00c04fd430c8"); - assert (uuid.toString() == "6ba7b810-9dad-11d1-80b4-00c04fd430c8"); - - uuid.parse("6BA7B810-9DAD-11D1-80B4-00C04FD430C8"); - assert (uuid.toString() == "6ba7b810-9dad-11d1-80b4-00c04fd430c8"); - - uuid.parse("6BA7B8109DAD11D180B400C04FD430C8"); - assert (uuid.toString() == "6ba7b810-9dad-11d1-80b4-00c04fd430c8"); - - try - { - uuid.parse("6xA7B8109DAD11D180B400C04FD430C8"); - fail("invalid UUID - must throw"); - } - catch (Poco::SyntaxException&) - { - } - - try - { - uuid.parse("6xa7b810-9dad-11d1-80b4-00c04fd430c8"); - fail("invalid UUID - must throw"); - } - catch (Poco::SyntaxException&) - { - } - - try - { - uuid.parse("6ba7b810-xdad-11d1-80b4-00c04fd430c8"); - fail("invalid UUID - must throw"); - } - catch (Poco::SyntaxException&) - { - } - - try - { - uuid.parse("6ba7b810-9dad-x1d1-80b4-00c04fd430c8"); - fail("invalid UUID - must throw"); - } - catch (Poco::SyntaxException&) - { - } - - try - { - uuid.parse("6ba7b810-9dad-11d1-x0b4-00c04fd430c8"); - fail("invalid UUID - must throw"); - } - catch (Poco::SyntaxException&) - { - } - - try - { - uuid.parse("6ba7b810-9dad-11d1-80b4-00x04fd430c8"); - fail("invalid UUID - must throw"); - } - catch (Poco::SyntaxException&) - { - } -} - - -void UUIDTest::testBuffer() -{ - UUID uuid("6ba7b810-9dad-11d1-80b4-00c04fd430c8"); - char buffer[16]; - uuid.copyTo(buffer); - UUID uuid2; - uuid2.copyFrom(buffer); - assert (uuid2.toString() == "6ba7b810-9dad-11d1-80b4-00c04fd430c8"); -} - - -void UUIDTest::testCompare() -{ - UUID null; - assert (null.isNull()); - assert (UUID::null().isNull()); - - UUID uuid1 = null; - UUID uuid2; - assert (uuid1.isNull()); - assert (uuid1 == null); - assert (!(uuid1 != null)); - assert (uuid1 >= null); - assert (uuid1 <= null); - assert (!(uuid1 > null)); - assert (!(uuid1 < null)); - assert (uuid1.toString() == "00000000-0000-0000-0000-000000000000"); - - uuid1 = UUID::dns(); - assert (!uuid1.isNull()); - assert (uuid1 != null); - assert (!(uuid1 == null)); - assert (uuid1 >= null); - assert (!(uuid1 <= null)); - assert (uuid1 > null); - assert (!(uuid1 < null)); - assert (uuid1.toString() == "6ba7b810-9dad-11d1-80b4-00c04fd430c8"); - - assert (null != uuid1); - assert (!(null == uuid1)); - assert (!(null >= uuid1)); - assert (null <= uuid1); - assert (!(null > uuid1)); - assert (null < uuid1); - - uuid2 = uuid1; - assert (uuid2 == uuid1); - assert (!(uuid2 != uuid1)); - assert (uuid2 >= uuid1); - assert (uuid2 <= uuid1); - assert (!(uuid2 > uuid1)); - assert (!(uuid2 < uuid1)); -} - - -void UUIDTest::testVersion() -{ - UUID uuid("db4fa7e9-9e62-4597-99e0-b1ec0b59800e"); - UUID::Version v = uuid.version(); - assert (v == UUID::UUID_RANDOM); - - uuid.parse("6ba7b810-9dad-11d1-80b4-00c04fd430c8"); - v = uuid.version(); - assert (v == UUID::UUID_TIME_BASED); - - uuid.parse("d2ee4220-3625-11d9-9669-0800200c9a66"); - v = uuid.version(); - assert (v == UUID::UUID_TIME_BASED); - - uuid.parse("360d3652-4411-4786-bbe6-b9675b548559"); - v = uuid.version(); - assert (v == UUID::UUID_RANDOM); -} - - -void UUIDTest::testVariant() -{ - UUID uuid("db4fa7e9-9e62-4597-99e0-b1ec0b59800e"); - int v = uuid.variant(); - assert (v == 2); - - uuid.parse("6ba7b810-9dad-11d1-80b4-00c04fd430c8"); - v = uuid.variant(); - assert (v == 2); - - uuid.parse("d2ee4220-3625-11d9-9669-0800200c9a66"); - v = uuid.variant(); - assert (v == 2); - - uuid.parse("360d3652-4411-4786-bbe6-b9675b548559"); - v = uuid.variant(); - assert (v == 2); -} - - -void UUIDTest::testSwap() -{ - UUID uuid1("db4fa7e9-9e62-4597-99e0-b1ec0b59800e"); - UUID uuid2("d2ee4220-3625-11d9-9669-0800200c9a66"); - uuid1.swap(uuid2); - assert (uuid1.toString() == "d2ee4220-3625-11d9-9669-0800200c9a66"); - assert (uuid2.toString() == "db4fa7e9-9e62-4597-99e0-b1ec0b59800e"); -} - -void UUIDTest::testTryParse() -{ - UUID uuid; - assert (uuid.tryParse("6BA7B810-9DAD-11D1-80B4-00C04FD430C8")); - assert (uuid.toString() == "6ba7b810-9dad-11d1-80b4-00c04fd430c8"); - - UUID notUuid; - assert (!notUuid.tryParse("not a uuid")); - assert (notUuid.isNull()); -} - -void UUIDTest::setUp() -{ -} - - -void UUIDTest::tearDown() -{ -} - - -CppUnit::Test* UUIDTest::suite() -{ - CppUnit::TestSuite* pSuite = new CppUnit::TestSuite("UUIDTest"); - - CppUnit_addTest(pSuite, UUIDTest, testParse); - CppUnit_addTest(pSuite, UUIDTest, testBuffer); - CppUnit_addTest(pSuite, UUIDTest, testCompare); - CppUnit_addTest(pSuite, UUIDTest, testVersion); - CppUnit_addTest(pSuite, UUIDTest, testVariant); - CppUnit_addTest(pSuite, UUIDTest, testSwap); - CppUnit_addTest(pSuite, UUIDTest, testTryParse); - - return pSuite; -} diff --git a/contrib/libpoco/Foundation/testsuite/src/UUIDTest.h b/contrib/libpoco/Foundation/testsuite/src/UUIDTest.h deleted file mode 100644 index baf877acad0..00000000000 --- a/contrib/libpoco/Foundation/testsuite/src/UUIDTest.h +++ /dev/null @@ -1,46 +0,0 @@ -// -// UUIDTest.h -// -// $Id: //poco/1.4/Foundation/testsuite/src/UUIDTest.h#1 $ -// -// Definition of the UUIDTest class. -// -// Copyright (c) 2004-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef UUIDTest_INCLUDED -#define UUIDTest_INCLUDED - - -#include "Poco/Foundation.h" -#include "CppUnit/TestCase.h" - - -class UUIDTest: public CppUnit::TestCase -{ -public: - UUIDTest(const std::string& name); - ~UUIDTest(); - - void testParse(); - void testBuffer(); - void testCompare(); - void testVersion(); - void testVariant(); - void testSwap(); - void testTryParse(); - - void setUp(); - void tearDown(); - - static CppUnit::Test* suite(); - -private: -}; - - -#endif // UUIDTest_INCLUDED diff --git a/contrib/libpoco/Foundation/testsuite/src/UUIDTestSuite.cpp b/contrib/libpoco/Foundation/testsuite/src/UUIDTestSuite.cpp deleted file mode 100644 index be2596b04dd..00000000000 --- a/contrib/libpoco/Foundation/testsuite/src/UUIDTestSuite.cpp +++ /dev/null @@ -1,26 +0,0 @@ -// -// UUIDTestSuite.cpp -// -// $Id: //poco/1.4/Foundation/testsuite/src/UUIDTestSuite.cpp#1 $ -// -// Copyright (c) 2004-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "UUIDTestSuite.h" -#include "UUIDTest.h" -#include "UUIDGeneratorTest.h" - - -CppUnit::Test* UUIDTestSuite::suite() -{ - CppUnit::TestSuite* pSuite = new CppUnit::TestSuite("UUIDTestSuite"); - - pSuite->addTest(UUIDTest::suite()); - pSuite->addTest(UUIDGeneratorTest::suite()); - - return pSuite; -} diff --git a/contrib/libpoco/Foundation/testsuite/src/UUIDTestSuite.h b/contrib/libpoco/Foundation/testsuite/src/UUIDTestSuite.h deleted file mode 100644 index e6e4c3dcb01..00000000000 --- a/contrib/libpoco/Foundation/testsuite/src/UUIDTestSuite.h +++ /dev/null @@ -1,29 +0,0 @@ -// -// UUIDTestSuite.h -// -// $Id: //poco/1.4/Foundation/testsuite/src/UUIDTestSuite.h#1 $ -// -// Definition of the UUIDTestSuite class. -// -// Copyright (c) 2004-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef UUIDTestSuite_INCLUDED -#define UUIDTestSuite_INCLUDED - - -#include "CppUnit/TestSuite.h" - - -class UUIDTestSuite -{ -public: - static CppUnit::Test* suite(); -}; - - -#endif // UUIDTestSuite_INCLUDED diff --git a/contrib/libpoco/Foundation/testsuite/src/UnicodeConverterTest.cpp b/contrib/libpoco/Foundation/testsuite/src/UnicodeConverterTest.cpp deleted file mode 100644 index 8e8cfbae016..00000000000 --- a/contrib/libpoco/Foundation/testsuite/src/UnicodeConverterTest.cpp +++ /dev/null @@ -1,75 +0,0 @@ -// -// UnicodeConverterTest.cpp -// -// $Id: //poco/1.4/Foundation/testsuite/src/UnicodeConverterTest.cpp#1 $ -// -// Copyright (c) 2004-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef POCO_NO_WSTRING - - -#include "Poco/UnicodeConverter.h" -#include "UnicodeConverterTest.h" -#include "CppUnit/TestCaller.h" -#include "CppUnit/TestSuite.h" -#include "Poco/UTFString.h" - - -using Poco::UnicodeConverter; -using Poco::UTF16Char; -using Poco::UTF16String; -using Poco::UTF32Char; -using Poco::UTF32String; - - -UnicodeConverterTest::UnicodeConverterTest(const std::string& name): CppUnit::TestCase(name) -{ -} - - -UnicodeConverterTest::~UnicodeConverterTest() -{ -} - - -void UnicodeConverterTest::testUTF16() -{ - - runTests(); -} - - -void UnicodeConverterTest::testUTF32() -{ - runTests(); -} - - -void UnicodeConverterTest::setUp() -{ -} - - -void UnicodeConverterTest::tearDown() -{ -} - - -CppUnit::Test* UnicodeConverterTest::suite() -{ - CppUnit::TestSuite* pSuite = new CppUnit::TestSuite("UnicodeConverterTest"); - - CppUnit_addTest(pSuite, UnicodeConverterTest, testUTF16); - CppUnit_addTest(pSuite, UnicodeConverterTest, testUTF32); - - return pSuite; -} - - -#endif - diff --git a/contrib/libpoco/Foundation/testsuite/src/UnicodeConverterTest.h b/contrib/libpoco/Foundation/testsuite/src/UnicodeConverterTest.h deleted file mode 100644 index 593f19bd120..00000000000 --- a/contrib/libpoco/Foundation/testsuite/src/UnicodeConverterTest.h +++ /dev/null @@ -1,76 +0,0 @@ -// -// UnicodeConverterTest.h -// -// $Id: //poco/1.4/Foundation/testsuite/src/UnicodeConverterTest.h#1 $ -// -// Definition of the UnicodeConverterTest class. -// -// Copyright (c) 2004-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef UnicodeConverterTest_INCLUDED -#define UnicodeConverterTest_INCLUDED - - -#include "Poco/Foundation.h" -#include "CppUnit/TestCase.h" -#include "Poco/UnicodeConverter.h" -#include "Poco/UTFString.h" -#include - - -class UnicodeConverterTest: public CppUnit::TestCase -{ -public: - UnicodeConverterTest(const std::string& name); - ~UnicodeConverterTest(); - - void testUTF16(); - void testUTF32(); - - void setUp(); - void tearDown(); - - static CppUnit::Test* suite(); - -private: - template - void runTests() - { - const unsigned char supp[] = {0x41, 0x42, 0xf0, 0x90, 0x82, 0xa4, 0xf0, 0xaf, 0xa6, 0xa0, 0xf0, 0xaf, 0xa8, 0x9d, 0x00}; - std::string text((const char*) supp); - - // Convert from UTF-8 to wide - T wtext, wtext2, wtext3; - Poco::UnicodeConverter::convert(text, wtext); - if (sizeof(typename T::value_type) == 2) - assert(Poco::UnicodeConverter::UTFStrlen(wtext.data()) == 8); - else if (sizeof(typename T::value_type) == 4) - assert(Poco::UnicodeConverter::UTFStrlen(wtext.data()) == 5); - Poco::UnicodeConverter::convert((const char*) supp, strlen((const char*) supp), wtext2); - Poco::UnicodeConverter::convert((const char*)supp, wtext3); - assert(wtext == wtext2); - assert(wtext == wtext3); - - std::string text2, text3, text4; - assert (text != text2); - assert (text != text3); - assert (text != text4); - - // Convert from wide to UTF-8 - Poco::UnicodeConverter::convert(wtext, text2); - Poco::UnicodeConverter::convert(wtext2, text3); - Poco::UnicodeConverter::convert(wtext3, text4); - - assert (text == text2); - assert (text == text3); - assert (text == text4); - } -}; - - -#endif // UnicodeConverterTest_INCLUDED diff --git a/contrib/libpoco/Foundation/testsuite/src/UniqueExpireCacheTest.cpp b/contrib/libpoco/Foundation/testsuite/src/UniqueExpireCacheTest.cpp deleted file mode 100644 index 9b95f293b57..00000000000 --- a/contrib/libpoco/Foundation/testsuite/src/UniqueExpireCacheTest.cpp +++ /dev/null @@ -1,256 +0,0 @@ -// -// UniqueExpireCacheTest.cpp -// -// $Id: //poco/1.4/Foundation/testsuite/src/UniqueExpireCacheTest.cpp#1 $ -// -// Copyright (c) 2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "UniqueExpireCacheTest.h" -#include "CppUnit/TestCaller.h" -#include "CppUnit/TestSuite.h" -#include "Poco/Exception.h" -#include "Poco/UniqueExpireCache.h" -#include "Poco/UniqueAccessExpireCache.h" -#include "Poco/ExpirationDecorator.h" -#include "Poco/AccessExpirationDecorator.h" -#include "Poco/Bugcheck.h" -#include "Poco/Thread.h" - - -using namespace Poco; - - -struct IntVal -{ - int value; - Poco::Timestamp validUntil; - IntVal(int val, Poco::Timestamp::TimeDiff v):value(val), validUntil() - { - validUntil += (v*1000); - } - - const Poco::Timestamp& getExpiration() const - { - return validUntil; - } -}; - -typedef AccessExpirationDecorator DIntVal; - -#define DURSLEEP 250 -#define DURHALFSLEEP DURSLEEP / 2 -#define DURWAIT 300 - - -UniqueExpireCacheTest::UniqueExpireCacheTest(const std::string& name): CppUnit::TestCase(name) -{ -} - - -UniqueExpireCacheTest::~UniqueExpireCacheTest() -{ -} - - -void UniqueExpireCacheTest::testClear() -{ - UniqueExpireCache aCache; - aCache.add(1, IntVal(2, DURSLEEP)); - aCache.add(3, IntVal(4, DURSLEEP)); - aCache.add(5, IntVal(6, DURSLEEP)); - assert (aCache.has(1)); - assert (aCache.has(3)); - assert (aCache.has(5)); - assert (aCache.get(1)->value == 2); - assert (aCache.get(3)->value == 4); - assert (aCache.get(5)->value == 6); - aCache.clear(); - assert (!aCache.has(1)); - assert (!aCache.has(3)); - assert (!aCache.has(5)); -} - - -void UniqueExpireCacheTest::testAccessClear() -{ - UniqueAccessExpireCache aCache; - aCache.add(1, DIntVal(2, DURSLEEP)); - aCache.add(3, DIntVal(4, DURSLEEP)); - aCache.add(5, DIntVal(6, DURSLEEP)); - assert (aCache.has(1)); - assert (aCache.has(3)); - assert (aCache.has(5)); - assert (aCache.get(1)->value() == 2); - assert (aCache.get(3)->value() == 4); - assert (aCache.get(5)->value() == 6); - aCache.clear(); - assert (!aCache.has(1)); - assert (!aCache.has(3)); - assert (!aCache.has(5)); -} - - -void UniqueExpireCacheTest::testAccessUpdate() -{ - UniqueAccessExpireCache aCache; - aCache.add(1, DIntVal(2, DURSLEEP)); - aCache.add(3, DIntVal(4, DURSLEEP)); - aCache.add(5, DIntVal(6, DURSLEEP)); - assert (aCache.has(1)); - assert (aCache.has(3)); - assert (aCache.has(5)); - assert (aCache.get(1)->value() == 2); - Thread::sleep(DURSLEEP/2); - assert (aCache.get(1)->value() == 2); - Thread::sleep(DURSLEEP/2); - assert (aCache.get(1)->value() == 2); - Thread::sleep(DURSLEEP/2); - assert (aCache.get(1)->value() == 2); - assert (!aCache.has(3)); - assert (!aCache.has(5)); - Thread::sleep(DURSLEEP*2); - - assert (!aCache.has(1)); - assert (!aCache.has(3)); - assert (!aCache.has(5)); - aCache.remove(666); //must work too -} - - -void UniqueExpireCacheTest::testExpire0() -{ - UniqueExpireCache aCache; - aCache.add(1, IntVal(2, 0)); - assert (!aCache.has(1)); -} - - - -void UniqueExpireCacheTest::testAccessExpire0() -{ - UniqueAccessExpireCache aCache; - aCache.add(1, DIntVal(2, Timespan(0, 0))); - assert (!aCache.has(1)); -} - - -void UniqueExpireCacheTest::testExpireN() -{ - // 3-1 represents the cache sorted by age, elements get replaced at the end of the list - // 3-1|5 -> 5 gets removed - UniqueExpireCache aCache; - aCache.add(1, IntVal(2, DURSLEEP)); // 1 - assert (aCache.has(1)); - SharedPtr tmp = aCache.get(1); - assert (!tmp.isNull()); - assert (tmp->value == 2); - Thread::sleep(DURWAIT); - assert (!aCache.has(1)); - - // tmp must still be valid, access it - assert (tmp->value == 2); - tmp = aCache.get(1); - assert (tmp.isNull()); - - aCache.add(1, IntVal(2, DURSLEEP)); // 1 - Thread::sleep(DURHALFSLEEP); - aCache.add(3, IntVal(4, DURSLEEP)); // 3-1 - assert (aCache.has(1)); - assert (aCache.has(3)); - tmp = aCache.get(1); - SharedPtr tmp2 = aCache.get(3); - assert (tmp->value == 2); - assert (tmp2->value == 4); - - Thread::sleep(DURHALFSLEEP+25); //3|1 - assert (!aCache.has(1)); - assert (aCache.has(3)); - assert (tmp->value == 2); // 1-3 - assert (tmp2->value == 4); // 3-1 - tmp2 = aCache.get(3); - assert (tmp2->value == 4); - Thread::sleep(DURHALFSLEEP+25); //3|1 - assert (!aCache.has(3)); - assert (tmp2->value == 4); - tmp = aCache.get(1); - tmp2 = aCache.get(3); - assert (!tmp); - assert (!tmp2); - - // removing illegal entries should work too - aCache.remove(666); - - aCache.clear(); - assert (!aCache.has(5)); - assert (!aCache.has(3)); -} - - -void UniqueExpireCacheTest::testDuplicateAdd() -{ - UniqueExpireCache aCache; - aCache.add(1, IntVal(2, DURSLEEP)); // 1 - assert (aCache.has(1)); - assert (aCache.get(1)->value == 2); - aCache.add(1, IntVal(3, DURSLEEP)); - assert (aCache.has(1)); - assert (aCache.get(1)->value == 3); -} - - -void UniqueExpireCacheTest::testAccessDuplicateAdd() -{ - UniqueAccessExpireCache aCache; - aCache.add(1, DIntVal(2, DURSLEEP)); // 1 - assert (aCache.has(1)); - assert (aCache.get(1)->value() == 2); - aCache.add(1, DIntVal(3, DURSLEEP)); - assert (aCache.has(1)); - assert (aCache.get(1)->value() == 3); -} - - -void UniqueExpireCacheTest::testExpirationDecorator() -{ - typedef ExpirationDecorator ExpireInt; - UniqueExpireCache aCache; - aCache.add(1, ExpireInt(2, DURSLEEP)); // 1 - assert (aCache.has(1)); - assert (aCache.get(1)->value() == 2); - aCache.add(1, ExpireInt(3, DURSLEEP)); - assert (aCache.has(1)); - assert (aCache.get(1)->value() == 3); -} - - -void UniqueExpireCacheTest::setUp() -{ -} - - -void UniqueExpireCacheTest::tearDown() -{ -} - - -CppUnit::Test* UniqueExpireCacheTest::suite() -{ - CppUnit::TestSuite* pSuite = new CppUnit::TestSuite("UniqueExpireCacheTest"); - - CppUnit_addTest(pSuite, UniqueExpireCacheTest, testClear); - CppUnit_addTest(pSuite, UniqueExpireCacheTest, testAccessClear); - CppUnit_addTest(pSuite, UniqueExpireCacheTest, testAccessUpdate); - CppUnit_addTest(pSuite, UniqueExpireCacheTest, testExpire0); - CppUnit_addTest(pSuite, UniqueExpireCacheTest, testAccessExpire0); - CppUnit_addTest(pSuite, UniqueExpireCacheTest, testExpireN); - CppUnit_addTest(pSuite, UniqueExpireCacheTest, testDuplicateAdd); - CppUnit_addTest(pSuite, UniqueExpireCacheTest, testAccessDuplicateAdd); - CppUnit_addTest(pSuite, UniqueExpireCacheTest, testExpirationDecorator); - - return pSuite; -} diff --git a/contrib/libpoco/Foundation/testsuite/src/UniqueExpireCacheTest.h b/contrib/libpoco/Foundation/testsuite/src/UniqueExpireCacheTest.h deleted file mode 100644 index 45071edda59..00000000000 --- a/contrib/libpoco/Foundation/testsuite/src/UniqueExpireCacheTest.h +++ /dev/null @@ -1,44 +0,0 @@ -// -// UniqueExpireCacheTest.h -// -// $Id: //poco/1.4/Foundation/testsuite/src/UniqueExpireCacheTest.h#1 $ -// -// Tests for ExpireCache -// -// Copyright (c) 2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - -#ifndef UniqueExpireCacheTest_INCLUDED -#define UniqueExpireCacheTest_INCLUDED - - -#include "Poco/Foundation.h" -#include "CppUnit/TestCase.h" - - -class UniqueExpireCacheTest: public CppUnit::TestCase -{ -public: - UniqueExpireCacheTest(const std::string& name); - ~UniqueExpireCacheTest(); - - void testClear(); - void testAccessClear(); - void testDuplicateAdd(); - void testAccessDuplicateAdd(); - void testExpire0(); - void testAccessExpire0(); - void testExpireN(); - void testExpirationDecorator(); - void testAccessUpdate(); - - void setUp(); - void tearDown(); - static CppUnit::Test* suite(); -}; - - -#endif // UniqueExpireCacheTest_INCLUDED diff --git a/contrib/libpoco/Foundation/testsuite/src/UniqueExpireLRUCacheTest.cpp b/contrib/libpoco/Foundation/testsuite/src/UniqueExpireLRUCacheTest.cpp deleted file mode 100644 index cac8e683f10..00000000000 --- a/contrib/libpoco/Foundation/testsuite/src/UniqueExpireLRUCacheTest.cpp +++ /dev/null @@ -1,327 +0,0 @@ -// -// UniqueExpireLRUCacheTest.cpp -// -// $Id: //poco/1.4/Foundation/testsuite/src/UniqueExpireLRUCacheTest.cpp#1 $ -// -// Copyright (c) 2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "UniqueExpireLRUCacheTest.h" -#include "CppUnit/TestCaller.h" -#include "CppUnit/TestSuite.h" -#include "Poco/Exception.h" -#include "Poco/UniqueExpireLRUCache.h" -#include "Poco/UniqueAccessExpireLRUCache.h" -#include "Poco/AccessExpirationDecorator.h" -#include "Poco/Bugcheck.h" -#include "Poco/Thread.h" - - -using namespace Poco; - - -struct IntVal -{ - int value; - Poco::Timestamp validUntil; - IntVal(int val, Poco::Timestamp::TimeDiff v):value(val), validUntil() - { - validUntil += (v*1000); - } - - const Poco::Timestamp& getExpiration() const - { - return validUntil; - } -}; - - -typedef AccessExpirationDecorator DIntVal; - - -#define DURSLEEP 250 -#define DURHALFSLEEP DURSLEEP / 2 -#define DURWAIT 300 - - -UniqueExpireLRUCacheTest::UniqueExpireLRUCacheTest(const std::string& name): CppUnit::TestCase(name) -{ -} - - -UniqueExpireLRUCacheTest::~UniqueExpireLRUCacheTest() -{ -} - - -void UniqueExpireLRUCacheTest::testClear() -{ - UniqueExpireLRUCache aCache; - aCache.add(1, IntVal(2, DURSLEEP)); - aCache.add(3, IntVal(4, DURSLEEP)); - aCache.add(5, IntVal(6, DURSLEEP)); - assert (aCache.has(1)); - assert (aCache.has(3)); - assert (aCache.has(5)); - assert (aCache.get(1)->value == 2); - assert (aCache.get(3)->value == 4); - assert (aCache.get(5)->value == 6); - aCache.clear(); - assert (!aCache.has(1)); - assert (!aCache.has(3)); - assert (!aCache.has(5)); -} - - - -void UniqueExpireLRUCacheTest::testAccessClear() -{ - UniqueAccessExpireLRUCache aCache; - aCache.add(1, DIntVal(2, DURSLEEP)); - aCache.add(3, DIntVal(4, DURSLEEP)); - aCache.add(5, DIntVal(6, DURSLEEP)); - assert (aCache.has(1)); - assert (aCache.has(3)); - assert (aCache.has(5)); - assert (aCache.get(1)->value() == 2); - assert (aCache.get(3)->value() == 4); - assert (aCache.get(5)->value() == 6); - aCache.clear(); - assert (!aCache.has(1)); - assert (!aCache.has(3)); - assert (!aCache.has(5)); -} - -void UniqueExpireLRUCacheTest::testExpire0() -{ - UniqueExpireLRUCache aCache; - aCache.add(1, IntVal(2, 0)); - assert (!aCache.has(1)); -} - - -void UniqueExpireLRUCacheTest::testExpireN() -{ - // 3-1 represents the cache sorted by age, elements get replaced at the end of the list - // 3-1|5 -> 5 gets removed - UniqueExpireLRUCache aCache(3); - aCache.add(1, IntVal(2, DURSLEEP)); // 1 - assert (aCache.has(1)); - SharedPtr tmp = aCache.get(1); - assert (!tmp.isNull()); - assert (tmp->value == 2); - Thread::sleep(DURWAIT); - assert (!aCache.has(1)); - - // tmp must still be valid, access it - assert (tmp->value == 2); - tmp = aCache.get(1); - assert (!tmp); - - aCache.add(1, IntVal(2, DURSLEEP)); // 1 - Thread::sleep(DURHALFSLEEP); - aCache.add(3, IntVal(4, DURSLEEP)); // 3-1 - assert (aCache.has(1)); - assert (aCache.has(3)); - tmp = aCache.get(1); - SharedPtr tmp2 = aCache.get(3); - assert (tmp->value == 2); - assert (tmp2->value == 4); - - Thread::sleep(DURHALFSLEEP+25); //3|1 - assert (!aCache.has(1)); - assert (aCache.has(3)); - assert (tmp->value == 2); // 1-3 - assert (tmp2->value == 4); // 3-1 - tmp2 = aCache.get(3); - assert (tmp2->value == 4); - Thread::sleep(DURHALFSLEEP+25); //3|1 - assert (!aCache.has(3)); - assert (tmp2->value == 4); - tmp = aCache.get(1); - tmp2 = aCache.get(3); - assert (!tmp); - assert (!tmp2); - - // removing illegal entries should work too - aCache.remove(666); - - aCache.clear(); - assert (!aCache.has(5)); - assert (!aCache.has(3)); -} - - -void UniqueExpireLRUCacheTest::testCacheSize0() -{ - // cache size 0 is illegal - try - { - UniqueExpireLRUCache aCache(0); - failmsg ("cache size of 0 is illegal, test should fail"); - } - catch (Poco::InvalidArgumentException&) - { - } -} - - -void UniqueExpireLRUCacheTest::testCacheSize1() -{ - UniqueExpireLRUCache aCache(1); - aCache.add(1, IntVal(2, DURSLEEP)); - assert (aCache.has(1)); - assert (aCache.get(1)->value == 2); - - aCache.add(3, IntVal(4, DURSLEEP)); // replaces 1 - assert (!aCache.has(1)); - assert (aCache.has(3)); - assert (aCache.get(3)->value == 4); - - aCache.add(5, IntVal(6, DURSLEEP)); - assert (!aCache.has(1)); - assert (!aCache.has(3)); - assert (aCache.has(5)); - assert (aCache.get(5)->value == 6); - - aCache.remove(5); - assert (!aCache.has(5)); - - // removing illegal entries should work too - aCache.remove(666); -} - - -void UniqueExpireLRUCacheTest::testCacheSize2() -{ - // 3-1 represents the cache sorted by pos, elements get replaced at the end of the list - // 3-1|5 -> 5 gets removed - UniqueExpireLRUCache aCache(2); - aCache.add(1, IntVal(2, DURSLEEP)); // 1 - assert (aCache.has(1)); - assert (aCache.get(1)->value == 2); - - aCache.add(3, IntVal(4, DURSLEEP)); // 3-1 - assert (aCache.has(1)); - assert (aCache.has(3)); - assert (aCache.get(1)->value == 2); // 1-3 - assert (aCache.get(3)->value == 4); // 3-1 - - aCache.add(5, IntVal(6, DURSLEEP)); // 5-3|1 - assert (!aCache.has(1)); - assert (aCache.has(3)); - assert (aCache.has(5)); - assert (aCache.get(5)->value == 6); // 5-3 - assert (aCache.get(3)->value == 4); // 3-5 - - // test remove from the end and the beginning of the list - aCache.remove(5); // 3 - assert (!aCache.has(5)); - assert (aCache.get(3)->value == 4); // 3 - aCache.add(5, IntVal(6, DURSLEEP)); // 5-3 - assert (aCache.get(3)->value == 4); // 3-5 - aCache.remove(3); // 5 - assert (!aCache.has(3)); - assert (aCache.get(5)->value == 6); // 5 - - // removing illegal entries should work too - aCache.remove(666); - - aCache.clear(); - assert (!aCache.has(5)); -} - - -void UniqueExpireLRUCacheTest::testCacheSizeN() -{ - // 3-1 represents the cache sorted by pos, elements get replaced at the end of the list - // 3-1|5 -> 5 gets removed - UniqueExpireLRUCache aCache(3); - aCache.add(1, IntVal(2, DURSLEEP)); // 1 - assert (aCache.has(1)); - assert (aCache.get(1)->value == 2); - - aCache.add(3, IntVal(4, DURSLEEP)); // 3-1 - assert (aCache.has(1)); - assert (aCache.has(3)); - assert (aCache.get(1)->value == 2); // 1-3 - assert (aCache.get(3)->value == 4); // 3-1 - - aCache.add(5, IntVal(6, DURSLEEP)); // 5-3-1 - assert (aCache.has(1)); - assert (aCache.has(3)); - assert (aCache.has(5)); - assert (aCache.get(5)->value == 6); // 5-3-1 - assert (aCache.get(3)->value == 4); // 3-5-1 - - aCache.add(7, IntVal(8, DURSLEEP)); // 7-5-3|1 - assert (!aCache.has(1)); - assert (aCache.has(7)); - assert (aCache.has(3)); - assert (aCache.has(5)); - assert (aCache.get(5)->value == 6); // 5-7-3 - assert (aCache.get(3)->value == 4); // 3-5-7 - assert (aCache.get(7)->value == 8); // 7-3-5 - - // test remove from the end and the beginning of the list - aCache.remove(5); // 7-3 - assert (!aCache.has(5)); - assert (aCache.get(3)->value == 4); // 3-7 - aCache.add(5, IntVal(6, DURSLEEP)); // 5-3-7 - assert (aCache.get(7)->value == 8); // 7-5-3 - aCache.remove(7); // 5-3 - assert (!aCache.has(7)); - assert (aCache.has(3)); - assert (aCache.get(5)->value == 6); // 5-3 - - // removing illegal entries should work too - aCache.remove(666); - - aCache.clear(); - assert (!aCache.has(5)); - assert (!aCache.has(3)); -} - - -void UniqueExpireLRUCacheTest::testDuplicateAdd() -{ - UniqueExpireLRUCache aCache(3); - aCache.add(1, IntVal(2, DURSLEEP)); // 1 - assert (aCache.has(1)); - assert (aCache.get(1)->value == 2); - aCache.add(1, IntVal(3, DURSLEEP)); - assert (aCache.has(1)); - assert (aCache.get(1)->value == 3); -} - - -void UniqueExpireLRUCacheTest::setUp() -{ -} - - -void UniqueExpireLRUCacheTest::tearDown() -{ -} - - -CppUnit::Test* UniqueExpireLRUCacheTest::suite() -{ - CppUnit::TestSuite* pSuite = new CppUnit::TestSuite("UniqueExpireLRUCacheTest"); - - CppUnit_addTest(pSuite, UniqueExpireLRUCacheTest, testClear); - CppUnit_addTest(pSuite, UniqueExpireLRUCacheTest, testAccessClear); - CppUnit_addTest(pSuite, UniqueExpireLRUCacheTest, testExpire0); - CppUnit_addTest(pSuite, UniqueExpireLRUCacheTest, testExpireN); - CppUnit_addTest(pSuite, UniqueExpireLRUCacheTest, testCacheSize0); - CppUnit_addTest(pSuite, UniqueExpireLRUCacheTest, testCacheSize1); - CppUnit_addTest(pSuite, UniqueExpireLRUCacheTest, testCacheSize2); - CppUnit_addTest(pSuite, UniqueExpireLRUCacheTest, testCacheSizeN); - CppUnit_addTest(pSuite, UniqueExpireLRUCacheTest, testDuplicateAdd); - - return pSuite; -} diff --git a/contrib/libpoco/Foundation/testsuite/src/UniqueExpireLRUCacheTest.h b/contrib/libpoco/Foundation/testsuite/src/UniqueExpireLRUCacheTest.h deleted file mode 100644 index bcacfbe7540..00000000000 --- a/contrib/libpoco/Foundation/testsuite/src/UniqueExpireLRUCacheTest.h +++ /dev/null @@ -1,44 +0,0 @@ -// -// UniqueExpireLRUCacheTest.h -// -// $Id: //poco/1.4/Foundation/testsuite/src/UniqueExpireLRUCacheTest.h#1 $ -// -// Tests for UniqueExpireLRUCache -// -// Copyright (c) 2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - -#ifndef UniqueExpireLRUCacheTest_INCLUDED -#define UniqueExpireLRUCacheTest_INCLUDED - - -#include "Poco/Foundation.h" -#include "CppUnit/TestCase.h" - - -class UniqueExpireLRUCacheTest: public CppUnit::TestCase -{ -public: - UniqueExpireLRUCacheTest(const std::string& name); - ~UniqueExpireLRUCacheTest(); - - void testClear(); - void testAccessClear(); - void testExpire0(); - void testExpireN(); - void testCacheSize0(); - void testCacheSize1(); - void testCacheSize2(); - void testCacheSizeN(); - void testDuplicateAdd(); - - void setUp(); - void tearDown(); - static CppUnit::Test* suite(); -}; - - -#endif // UniqueExpireLRUCacheTest_INCLUDED diff --git a/contrib/libpoco/Foundation/testsuite/src/VarTest.cpp b/contrib/libpoco/Foundation/testsuite/src/VarTest.cpp deleted file mode 100644 index f04c3bae6c7..00000000000 --- a/contrib/libpoco/Foundation/testsuite/src/VarTest.cpp +++ /dev/null @@ -1,2646 +0,0 @@ -// -// VarTest.cpp -// -// $Id: //poco/svn/Foundation/testsuite/src/VarTest.cpp#2 $ -// -// Copyright (c) 2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "VarTest.h" -#include "CppUnit/TestCaller.h" -#include "CppUnit/TestSuite.h" -#include "Poco/Exception.h" -#include "Poco/Dynamic/Var.h" -#include "Poco/Bugcheck.h" -#include "Poco/Dynamic/Struct.h" -#include "Poco/Dynamic/Pair.h" -#include -#include - - -GCC_DIAG_OFF(unused-variable) -#if defined(_MSC_VER) && _MSC_VER < 1400 - #pragma warning(disable:4800)//forcing value to bool 'true' or 'false' -#endif - - -using namespace Poco; -using namespace Poco::Dynamic; - - -class Dummy -{ -public: - Dummy(): _val(0) - { - } - - Dummy(int val): _val(val) - { - } - - operator int () const - { - return _val; - } - - bool operator == (int i) - { - return i == _val; - } - -private: - int _val; -}; - - -VarTest::VarTest(const std::string& name): CppUnit::TestCase(name) -{ -} - - -VarTest::~VarTest() -{ -} - - -void VarTest::testInt8() -{ - Poco::Int8 src = 32; - Var a1 = src; - - assert (a1.type() == typeid(Poco::Int8)); - - std::string s1; - Poco::Int8 s2; - Poco::Int16 s3; - Poco::Int32 s4; - Poco::Int64 s5; - Poco::UInt8 s6; - Poco::UInt16 s7; - Poco::UInt32 s8; - Poco::UInt64 s9; - float s10; - double s11; - bool s12; - char s13; - a1.convert(s1); - a1.convert(s2); - a1.convert(s3); - a1.convert(s4); - a1.convert(s5); - a1.convert(s6); - a1.convert(s7); - a1.convert(s8); - a1.convert(s9); - a1.convert(s10); - a1.convert(s11); - a1.convert(s12); - a1.convert(s13); - long s14; - unsigned long s15; - a1.convert(s14); - a1.convert(s15); - assert (s14 == 32); - assert (s15 == 32); - assert (s1 == "32"); - assert (s2 == 32); - assert (s3 == 32); - assert (s4 == 32); - assert (s5 == 32); - assert (s6 == 32); - assert (s7 == 32); - assert (s8 == 32); - assert (s9 == 32); - assert (s10 == 32.0f); - assert (s11 == 32.0); - assert (s12); - assert (s13 == ' '); - Var a2(a1); - std::string t2; - a2.convert(t2); - assert (s1 == t2); - - Int8 value = a1.extract(); - assert (value == 32); - - try - { - Int16 value2; value2 = a1.extract(); - fail("bad cast - must throw"); - } - catch (Poco::BadCastException&) - { - } - - Var a3 = a1 + 1; - assert (a3 == 33); - a3 = a1 - 1; - assert (a3 == 31); - a3 += 1; - assert (a3 == 32); - a3 -= 1; - assert (a3 == 31); - a3 = a1 / 2; - assert (a3 == 16); - a3 = a1 * 2; - assert (a3 == 64); - a3 /= 2; - assert (a3 == 32); - a3 *= 2; - assert (a3 == 64); -} - - -void VarTest::testInt16() -{ - Poco::Int16 src = 32; - Var a1 = src; - - assert (a1.type() == typeid(Poco::Int16)); - - std::string s1; - Poco::Int8 s2; - Poco::Int16 s3; - Poco::Int32 s4; - Poco::Int64 s5; - Poco::UInt8 s6; - Poco::UInt16 s7; - Poco::UInt32 s8; - Poco::UInt64 s9; - float s10; - double s11; - bool s12; - char s13; - a1.convert(s1); - a1.convert(s2); - a1.convert(s3); - a1.convert(s4); - a1.convert(s5); - a1.convert(s6); - a1.convert(s7); - a1.convert(s8); - a1.convert(s9); - a1.convert(s10); - a1.convert(s11); - a1.convert(s12); - a1.convert(s13); - long s14; - unsigned long s15; - a1.convert(s14); - a1.convert(s15); - assert (s14 == 32); - assert (s15 == 32); - assert (s1 == "32"); - assert (s2 == 32); - assert (s3 == 32); - assert (s4 == 32); - assert (s5 == 32); - assert (s6 == 32); - assert (s7 == 32); - assert (s8 == 32); - assert (s9 == 32); - assert (s10 == 32.0f); - assert (s11 == 32.0); - assert (s12); - assert (s13 == ' '); - Var a2(a1); - std::string t2; - a2.convert(t2); - assert (s1 == t2); - - Int16 value = a1.extract(); - assert (value == 32); - - try - { - Int32 value2; value2 = a1.extract(); - fail("bad cast - must throw"); - } - catch (Poco::BadCastException&) - { - } - - Var a3 = a1 + 1; - assert (a3 == 33); - a3 = a1 - 1; - assert (a3 == 31); - a3 += 1; - assert (a3 == 32); - a3 -= 1; - assert (a3 == 31); - a3 = a1 / 2; - assert (a3 == 16); - a3 = a1 * 2; - assert (a3 == 64); - a3 /= 2; - assert (a3 == 32); - a3 *= 2; - assert (a3 == 64); -} - - -void VarTest::testInt32() -{ - Poco::Int32 src = 32; - Var a1 = src; - - assert (a1.type() == typeid(Poco::Int32)); - - std::string s1; - Poco::Int8 s2; - Poco::Int16 s3; - Poco::Int32 s4; - Poco::Int64 s5; - Poco::UInt8 s6; - Poco::UInt16 s7; - Poco::UInt32 s8; - Poco::UInt64 s9; - float s10; - double s11; - bool s12; - char s13; - a1.convert(s1); - a1.convert(s2); - a1.convert(s3); - a1.convert(s4); - a1.convert(s5); - a1.convert(s6); - a1.convert(s7); - a1.convert(s8); - a1.convert(s9); - a1.convert(s10); - a1.convert(s11); - a1.convert(s12); - a1.convert(s13); - long s14; - unsigned long s15; - a1.convert(s14); - a1.convert(s15); - assert (s14 == 32); - assert (s15 == 32); - assert (s1 == "32"); - assert (s2 == 32); - assert (s3 == 32); - assert (s4 == 32); - assert (s5 == 32); - assert (s6 == 32); - assert (s7 == 32); - assert (s8 == 32); - assert (s9 == 32); - assert (s10 == 32.0f); - assert (s11 == 32.0); - assert (s12); - assert (s13 == ' '); - Var a2(a1); - std::string t2; - a2.convert(t2); - assert (s1 == t2); - - Int32 value = a1.extract(); - assert (value == 32); - - try - { - Int16 value2; value2 = a1.extract(); - fail("bad cast - must throw"); - } - catch (Poco::BadCastException&) - { - } - - Var a3 = a1 + 1; - assert (a3 == 33); - a3 = a1 - 1; - assert (a3 == 31); - a3 += 1; - assert (a3 == 32); - a3 -= 1; - assert (a3 == 31); - a3 = a1 / 2; - assert (a3 == 16); - a3 = a1 * 2; - assert (a3 == 64); - a3 /= 2; - assert (a3 == 32); - a3 *= 2; - assert (a3 == 64); -} - - -void VarTest::testInt64() -{ - Poco::Int64 src = 32; - Var a1 = src; - - assert (a1.type() == typeid(Poco::Int64)); - - std::string s1; - Poco::Int8 s2; - Poco::Int16 s3; - Poco::Int32 s4; - Poco::Int64 s5; - Poco::UInt8 s6; - Poco::UInt16 s7; - Poco::UInt32 s8; - Poco::UInt64 s9; - float s10; - double s11; - bool s12; - char s13; - a1.convert(s1); - a1.convert(s2); - a1.convert(s3); - a1.convert(s4); - a1.convert(s5); - a1.convert(s6); - a1.convert(s7); - a1.convert(s8); - a1.convert(s9); - a1.convert(s10); - a1.convert(s11); - a1.convert(s12); - a1.convert(s13); - long s14; - unsigned long s15; - a1.convert(s14); - a1.convert(s15); - assert (s14 == 32); - assert (s15 == 32); - assert (s1 == "32"); - assert (s2 == 32); - assert (s3 == 32); - assert (s4 == 32); - assert (s5 == 32); - assert (s6 == 32); - assert (s7 == 32); - assert (s8 == 32); - assert (s9 == 32); - assert (s10 == 32.0f); - assert (s11 == 32.0); - assert (s12); - assert (s13 == ' '); - Var a2(a1); - std::string t2; - a2.convert(t2); - assert (s1 == t2); - - Int64 value = a1.extract(); - assert (value == 32); - - try - { - Int16 value2; value2 = a1.extract(); - fail("bad cast - must throw"); - } - catch (Poco::BadCastException&) - { - } - - Var a3 = a1 + 1; - assert (a3 == 33); - a3 = a1 - 1; - assert (a3 == 31); - a3 += 1; - assert (a3 == 32); - a3 -= 1; - assert (a3 == 31); - a3 = a1 / 2; - assert (a3 == 16); - a3 = a1 * 2; - assert (a3 == 64); - a3 /= 2; - assert (a3 == 32); - a3 *= 2; - assert (a3 == 64); -} - - -void VarTest::testUInt8() -{ - Poco::UInt8 src = 32; - Var a1 = src; - - assert (a1.type() == typeid(Poco::UInt8)); - - std::string s1; - Poco::Int8 s2; - Poco::Int16 s3; - Poco::Int32 s4; - Poco::Int64 s5; - Poco::UInt8 s6; - Poco::UInt16 s7; - Poco::UInt32 s8; - Poco::UInt64 s9; - float s10; - double s11; - bool s12; - char s13; - a1.convert(s1); - a1.convert(s2); - a1.convert(s3); - a1.convert(s4); - a1.convert(s5); - a1.convert(s6); - a1.convert(s7); - a1.convert(s8); - a1.convert(s9); - a1.convert(s10); - a1.convert(s11); - a1.convert(s12); - a1.convert(s13); - long s14; - unsigned long s15; - a1.convert(s14); - a1.convert(s15); - assert (s14 == 32); - assert (s15 == 32); - assert (s1 == "32"); - assert (s2 == 32); - assert (s3 == 32); - assert (s4 == 32); - assert (s5 == 32); - assert (s6 == 32); - assert (s7 == 32); - assert (s8 == 32); - assert (s9 == 32); - assert (s10 == 32.0f); - assert (s11 == 32.0); - assert (s12); - assert (s13 == ' '); - Var a2(a1); - std::string t2; - a2.convert(t2); - assert (s1 == t2); - - UInt8 value = a1.extract(); - assert (value == 32); - - try - { - Int16 value2; value2 = a1.extract(); - fail("bad cast - must throw"); - } - catch (Poco::BadCastException&) - { - } - - Var a3 = a1 + 1; - assert (a3 == 33); - a3 = a1 - 1; - assert (a3 == 31); - a3 += 1; - assert (a3 == 32); - a3 -= 1; - assert (a3 == 31); - a3 = a1 / 2; - assert (a3 == 16); - a3 = a1 * 2; - assert (a3 == 64); - a3 /= 2; - assert (a3 == 32); - a3 *= 2; - assert (a3 == 64); -} - - -void VarTest::testUInt16() -{ - Poco::UInt16 src = 32; - Var a1 = src; - - assert (a1.type() == typeid(Poco::UInt16)); - - std::string s1; - Poco::Int8 s2; - Poco::Int16 s3; - Poco::Int32 s4; - Poco::Int64 s5; - Poco::UInt8 s6; - Poco::UInt16 s7; - Poco::UInt32 s8; - Poco::UInt64 s9; - float s10; - double s11; - bool s12; - char s13; - a1.convert(s1); - a1.convert(s2); - a1.convert(s3); - a1.convert(s4); - a1.convert(s5); - a1.convert(s6); - a1.convert(s7); - a1.convert(s8); - a1.convert(s9); - a1.convert(s10); - a1.convert(s11); - a1.convert(s12); - a1.convert(s13); - long s14; - unsigned long s15; - a1.convert(s14); - a1.convert(s15); - assert (s14 == 32); - assert (s15 == 32); - assert (s1 == "32"); - assert (s2 == 32); - assert (s3 == 32); - assert (s4 == 32); - assert (s5 == 32); - assert (s6 == 32); - assert (s7 == 32); - assert (s8 == 32); - assert (s9 == 32); - assert (s10 == 32.0f); - assert (s11 == 32.0); - assert (s12); - assert (s13 == ' '); - Var a2(a1); - std::string t2; - a2.convert(t2); - assert (s1 == t2); - - UInt16 value = a1.extract(); - assert (value == 32); - - try - { - Int16 value2; value2 = a1.extract(); - fail("bad cast - must throw"); - } - catch (Poco::BadCastException&) - { - } - - Var a3 = a1 + 1; - assert (a3 == 33); - a3 = a1 - 1; - assert (a3 == 31); - a3 += 1; - assert (a3 == 32); - a3 -= 1; - assert (a3 == 31); - a3 = a1 / 2; - assert (a3 == 16); - a3 = a1 * 2; - assert (a3 == 64); - a3 /= 2; - assert (a3 == 32); - a3 *= 2; - assert (a3 == 64); -} - - -void VarTest::testUInt32() -{ - Poco::UInt32 src = 32; - Var a1 = src; - - assert (a1.type() == typeid(Poco::UInt32)); - - std::string s1; - Poco::Int8 s2; - Poco::Int16 s3; - Poco::Int32 s4; - Poco::Int64 s5; - Poco::UInt8 s6; - Poco::UInt16 s7; - Poco::UInt32 s8; - Poco::UInt64 s9; - float s10; - double s11; - bool s12; - char s13; - a1.convert(s1); - a1.convert(s2); - a1.convert(s3); - a1.convert(s4); - a1.convert(s5); - a1.convert(s6); - a1.convert(s7); - a1.convert(s8); - a1.convert(s9); - a1.convert(s10); - a1.convert(s11); - a1.convert(s12); - a1.convert(s13); - long s14; - unsigned long s15; - a1.convert(s14); - a1.convert(s15); - assert (s14 == 32); - assert (s15 == 32); - assert (s1 == "32"); - assert (s2 == 32); - assert (s3 == 32); - assert (s4 == 32); - assert (s5 == 32); - assert (s6 == 32); - assert (s7 == 32); - assert (s8 == 32); - assert (s9 == 32); - assert (s10 == 32.0f); - assert (s11 == 32.0); - assert (s12); - assert (s13 == ' '); - Var a2(a1); - std::string t2; - a2.convert(t2); - assert (s1 == t2); - - UInt32 value = a1.extract(); - assert (value == 32); - - try - { - Int16 value2; value2 = a1.extract(); - fail("bad cast - must throw"); - } - catch (Poco::BadCastException&) - { - } - - Var a3 = a1 + 1; - assert (a3 == 33); - a3 = a1 - 1; - assert (a3 == 31); - a3 += 1; - assert (a3 == 32); - a3 -= 1; - assert (a3 == 31); - a3 = a1 / 2; - assert (a3 == 16); - a3 = a1 * 2; - assert (a3 == 64); - a3 /= 2; - assert (a3 == 32); - a3 *= 2; - assert (a3 == 64); -} - - -void VarTest::testUInt64() -{ - Poco::UInt64 src = 32; - Var a1 = src; - - assert (a1.type() == typeid(Poco::UInt64)); - - std::string s1; - Poco::Int8 s2; - Poco::Int16 s3; - Poco::Int32 s4; - Poco::Int64 s5; - Poco::UInt8 s6; - Poco::UInt16 s7; - Poco::UInt32 s8; - Poco::UInt64 s9; - float s10; - double s11; - bool s12; - char s13; - a1.convert(s1); - a1.convert(s2); - a1.convert(s3); - a1.convert(s4); - a1.convert(s5); - a1.convert(s6); - a1.convert(s7); - a1.convert(s8); - a1.convert(s9); - a1.convert(s10); - a1.convert(s11); - a1.convert(s12); - a1.convert(s13); - long s14; - unsigned long s15; - a1.convert(s14); - a1.convert(s15); - assert (s14 == 32); - assert (s15 == 32); - assert (s1 == "32"); - assert (s2 == 32); - assert (s3 == 32); - assert (s4 == 32); - assert (s5 == 32); - assert (s6 == 32); - assert (s7 == 32); - assert (s8 == 32); - assert (s9 == 32); - assert (s10 == 32.0f); - assert (s11 == 32.0); - assert (s12); - assert (s13 == ' '); - Var a2(a1); - std::string t2; - a2.convert(t2); - assert (s1 == t2); - - UInt64 value = a1.extract(); - assert (value == 32); - - try - { - Int16 value2; value2 = a1.extract(); - fail("bad cast - must throw"); - } - catch (Poco::BadCastException&) - { - } - - Var a3 = a1 + 1; - assert (a3 == 33); - a3 = a1 - 1; - assert (a3 == 31); - a3 += 1; - assert (a3 == 32); - a3 -= 1; - assert (a3 == 31); - a3 = a1 / 2; - assert (a3 == 16); - a3 = a1 * 2; - assert (a3 == 64); - a3 /= 2; - assert (a3 == 32); - a3 *= 2; - assert (a3 == 64); -} - - -void VarTest::testBool() -{ - bool src = true; - Var a1 = src; - - assert (a1.type() == typeid(bool)); - - std::string s1; - Poco::Int8 s2; - Poco::Int16 s3; - Poco::Int32 s4; - Poco::Int64 s5; - Poco::UInt8 s6; - Poco::UInt16 s7; - Poco::UInt32 s8; - Poco::UInt64 s9; - float s10; - double s11; - bool s12; - char s13; - a1.convert(s1); - a1.convert(s2); - a1.convert(s3); - a1.convert(s4); - a1.convert(s5); - a1.convert(s6); - a1.convert(s7); - a1.convert(s8); - a1.convert(s9); - a1.convert(s10); - a1.convert(s11); - a1.convert(s12); - a1.convert(s13); - long s14; - unsigned long s15; - a1.convert(s14); - a1.convert(s15); - assert (s14 == 1); - assert (s15 == 1); - assert (s1 == "true"); - assert (s2 == 1); - assert (s3 == 1); - assert (s4 == 1); - assert (s5 == 1); - assert (s6 == 1); - assert (s7 == 1); - assert (s8 == 1); - assert (s9 == 1); - assert (s10 == 1.0f); - assert (s11 == 1.0); - assert (s12); - assert (s13 == '\x1'); - Var a2(a1); - std::string t2; - a2.convert(t2); - assert (s1 == t2); - - bool value = a1.extract(); - assert (value); - - try - { - Int16 value2; value2 = a1.extract(); - fail("bad cast - must throw"); - } - catch (Poco::BadCastException&) - { - } -} - - -void VarTest::testChar() -{ - char src = ' '; - Var a1 = src; - - assert (a1.type() == typeid(char)); - - std::string s1; - Poco::Int8 s2; - Poco::Int16 s3; - Poco::Int32 s4; - Poco::Int64 s5; - Poco::UInt8 s6; - Poco::UInt16 s7; - Poco::UInt32 s8; - Poco::UInt64 s9; - float s10; - double s11; - bool s12; - char s13; - a1.convert(s1); - a1.convert(s2); - a1.convert(s3); - a1.convert(s4); - a1.convert(s5); - a1.convert(s6); - a1.convert(s7); - a1.convert(s8); - a1.convert(s9); - a1.convert(s10); - a1.convert(s11); - a1.convert(s12); - a1.convert(s13); - long s14; - unsigned long s15; - a1.convert(s14); - a1.convert(s15); - assert (s14 == 32); - assert (s15 == 32); - assert (s1 == " "); - assert (s2 == 32); - assert (s3 == 32); - assert (s4 == 32); - assert (s5 == 32); - assert (s6 == 32); - assert (s7 == 32); - assert (s8 == 32); - assert (s9 == 32); - assert (s10 == 32.0f); - assert (s11 == 32.0); - assert (s12); - assert (s13 == ' '); - Var a2(a1); - std::string t2; - a2.convert(t2); - assert (s1 == t2); - - char value = a1.extract(); - assert (value == ' '); - - try - { - Int16 value2; value2 = a1.extract(); - fail("bad cast - must throw"); - } - catch (Poco::BadCastException&) - { - } -} - - -void VarTest::testFloat() -{ - Var any("0"); - float f = any; - - float src = 32.0f; - Var a1 = src; - - assert (a1.type() == typeid(float)); - - std::string s1; - Poco::Int8 s2; - Poco::Int16 s3; - Poco::Int32 s4; - Poco::Int64 s5; - Poco::UInt8 s6; - Poco::UInt16 s7; - Poco::UInt32 s8; - Poco::UInt64 s9; - float s10; - double s11; - bool s12; - char s13; - a1.convert(s1); - a1.convert(s2); - a1.convert(s3); - a1.convert(s4); - a1.convert(s5); - a1.convert(s6); - a1.convert(s7); - a1.convert(s8); - a1.convert(s9); - a1.convert(s10); - a1.convert(s11); - a1.convert(s12); - a1.convert(s13); - long s14; - unsigned long s15; - a1.convert(s14); - a1.convert(s15); - assert (s14 == 32); - assert (s15 == 32); - assert (s1 == "32"); - assert (s2 == 32); - assert (s3 == 32); - assert (s4 == 32); - assert (s5 == 32); - assert (s6 == 32); - assert (s7 == 32); - assert (s8 == 32); - assert (s9 == 32); - assert (s10 == 32.0f); - assert (s11 == 32.0); - assert (s12); - assert (s13 == ' '); - Var a2(a1); - std::string t2; - a2.convert(t2); - assert (s1 == t2); - - float value = a1.extract(); - assert (value == 32.0f); - - try - { - Int16 value2; value2 = a1.extract(); - fail("bad cast - must throw"); - } - catch (Poco::BadCastException&) - { - } - - Var a3 = a1 + 1.0f; - assert (a3 == 33.0f); - a3 = a1 - 1.0f; - assert (a3 == 31.0f); - a3 += 1.0f; - assert (a3 == 32.0f); - a3 -= 1.0f; - assert (a3 == 31.0f); - a3 = a1 / 2.0f; - assert (a3 == 16.0f); - a3 = a1 * 2.0f; - assert (a3 == 64.0f); - a3 /= 2.0f; - assert (a3 == 32.0f); - a3 *= 2.0f; - assert (a3 == 64.0f); -} - - -void VarTest::testDouble() -{ - double d = 0; - Var v(d); - float f = v; - - double src = 32.0; - Var a1 = src; - - assert (a1.type() == typeid(double)); - - std::string s1; - Poco::Int8 s2; - Poco::Int16 s3; - Poco::Int32 s4; - Poco::Int64 s5; - Poco::UInt8 s6; - Poco::UInt16 s7; - Poco::UInt32 s8; - Poco::UInt64 s9; - float s10; - double s11; - bool s12; - char s13; - a1.convert(s1); - a1.convert(s2); - a1.convert(s3); - a1.convert(s4); - a1.convert(s5); - a1.convert(s6); - a1.convert(s7); - a1.convert(s8); - a1.convert(s9); - a1.convert(s10); - a1.convert(s11); - a1.convert(s12); - a1.convert(s13); - long s14; - unsigned long s15; - a1.convert(s14); - a1.convert(s15); - assert (s14 == 32); - assert (s15 == 32); - assert (s1 == "32"); - assert (s2 == 32); - assert (s3 == 32); - assert (s4 == 32); - assert (s5 == 32); - assert (s6 == 32); - assert (s7 == 32); - assert (s8 == 32); - assert (s9 == 32); - assert (s10 == 32.0f); - assert (s11 == 32.0); - assert (s12); - assert (s13 == ' '); - Var a2(a1); - std::string t2; - a2.convert(t2); - assert (s1 == t2); - - double value = a1.extract(); - assert (value == 32.0); - - try - { - Int16 value2; value2 = a1.extract(); - fail("bad cast - must throw"); - } - catch (Poco::BadCastException&) - { - } - - - Var a3 = a1 + 1.0; - assert (a3 == 33.0); - a3 = a1 - 1.0; - assert (a3 == 31.0); - a3 += 1.0; - assert (a3 == 32.0); - a3 -= 1.0; - assert (a3 == 31.0); - a3 = a1 / 2.0; - assert (a3 == 16.0); - a3 = a1 * 2.0; - assert (a3 == 64.0); - a3 /= 2.0; - assert (a3 == 32.0); - a3 *= 2.0; - assert (a3 == 64.0); -} - - -void VarTest::testString() -{ - Var a1("32"); - - assert (a1.type() == typeid(std::string)); - - std::string s1; - Poco::Int8 s2; - Poco::Int16 s3; - Poco::Int32 s4; - Poco::Int64 s5; - Poco::UInt8 s6; - Poco::UInt16 s7; - Poco::UInt32 s8; - Poco::UInt64 s9; - float s10; - double s11; - bool s12 = false; - char s13; - a1.convert(s1); - a1.convert(s2); - a1.convert(s3); - a1.convert(s4); - a1.convert(s5); - a1.convert(s6); - a1.convert(s7); - a1.convert(s8); - a1.convert(s9); - a1.convert(s10); - a1.convert(s11); - a1.convert(s12); - a1.convert(s13); - long s14; - unsigned long s15; - a1.convert(s14); - a1.convert(s15); - assert (s14 == 32); - assert (s15 == 32); - assert (s1 == "32"); - assert (s2 == 32); - assert (s3 == 32); - assert (s4 == 32); - assert (s5 == 32); - assert (s6 == 32); - assert (s7 == 32); - assert (s8 == 32); - assert (s9 == 32); - assert (s10 == 32.0f); - assert (s11 == 32.0); - assert (s12); - assert (s13 == '3'); - - const std::string& value = a1.extract(); - assert (value == "32"); - - try - { - Int16 value2; value2 = a1.extract(); - fail("bad cast - must throw"); - } - catch (Poco::BadCastException&) - { - } - - Var a4(123); - std::string s("456"); - Var a5 = a4 + s; - assert (a5 == "123456"); - a4 += s; - assert (a4 == "123456"); - Var a6 = a4 + "789"; - assert (a6 == "123456789"); - a4 += "789"; - assert (a4 == "123456789"); - - a4 = ""; - assert(!a4); - a4 = "0"; - assert(!a4); - a4 = "FaLsE"; - assert(!a4); -} - - -void VarTest::testLong() -{ - long src = 32; - Var a1 = src; - - assert (a1.type() == typeid(long)); - - std::string s1; - Poco::Int8 s2; - Poco::Int16 s3; - Poco::Int32 s4; - Poco::Int64 s5; - Poco::UInt8 s6; - Poco::UInt16 s7; - Poco::UInt32 s8; - Poco::UInt64 s9; - float s10; - double s11; - bool s12; - char s13; - a1.convert(s1); - a1.convert(s2); - a1.convert(s3); - a1.convert(s4); - a1.convert(s5); - a1.convert(s6); - a1.convert(s7); - a1.convert(s8); - a1.convert(s9); - a1.convert(s10); - a1.convert(s11); - a1.convert(s12); - a1.convert(s13); - long s14; - unsigned long s15; - a1.convert(s14); - a1.convert(s15); - assert (s14 == 32); - assert (s15 == 32); - assert (s1 == "32"); - assert (s2 == 32); - assert (s3 == 32); - assert (s4 == 32); - assert (s5 == 32); - assert (s6 == 32); - assert (s7 == 32); - assert (s8 == 32); - assert (s9 == 32); - assert (s10 == 32.0f); - assert (s11 == 32.0); - assert (s12); - assert (s13 == ' '); - Var a2(a1); - std::string t2; - a2.convert(t2); - assert (s1 == t2); - - long value = a1.extract(); - assert (value == 32); - - try - { - Int16 value2; value2 = a1.extract(); - fail("bad cast - must throw"); - } - catch (Poco::BadCastException&) - { - } - - Var a3 = a1 + 1; - assert (a3 == 33); - a3 = a1 - 1; - assert (a3 == 31); - a3 += 1; - assert (a3 == 32); - a3 -= 1; - assert (a3 == 31); - a3 = a1 / 2; - assert (a3 == 16); - a3 = a1 * 2; - assert (a3 == 64); - a3 /= 2; - assert (a3 == 32); - a3 *= 2; - assert (a3 == 64); -} - - -void VarTest::testULong() -{ - unsigned long src = 32; - Var a1 = src; - - assert (a1.type() == typeid(unsigned long)); - - std::string s1; - Poco::Int8 s2; - Poco::Int16 s3; - Poco::Int32 s4; - Poco::Int64 s5; - Poco::UInt8 s6; - Poco::UInt16 s7; - Poco::UInt32 s8; - Poco::UInt64 s9; - float s10; - double s11; - bool s12; - char s13; - a1.convert(s1); - a1.convert(s2); - a1.convert(s3); - a1.convert(s4); - a1.convert(s5); - a1.convert(s6); - a1.convert(s7); - a1.convert(s8); - a1.convert(s9); - a1.convert(s10); - a1.convert(s11); - a1.convert(s12); - a1.convert(s13); - long s14; - unsigned long s15; - a1.convert(s14); - a1.convert(s15); - assert (s14 == 32); - assert (s15 == 32); - assert (s1 == "32"); - assert (s2 == 32); - assert (s3 == 32); - assert (s4 == 32); - assert (s5 == 32); - assert (s6 == 32); - assert (s7 == 32); - assert (s8 == 32); - assert (s9 == 32); - assert (s10 == 32.0f); - assert (s11 == 32.0); - assert (s12); - assert (s13 == ' '); - Var a2(a1); - std::string t2; - a2.convert(t2); - assert (s1 == t2); - - unsigned long value = a1.extract(); - assert (value == 32); - - try - { - Int16 value2; value2 = a1.extract(); - fail("bad cast - must throw"); - } - catch (Poco::BadCastException&) - { - } - - Var a3 = a1 + 1; - assert (a3 == 33); - a3 = a1 - 1; - assert (a3 == 31); - a3 += 1; - assert (a3 == 32); - a3 -= 1; - assert (a3 == 31); - a3 = a1 / 2; - assert (a3 == 16); - a3 = a1 * 2; - assert (a3 == 64); - a3 /= 2; - assert (a3 == 32); - a3 *= 2; - assert (a3 == 64); -} - - -void VarTest::testUDT() -{ - Dummy d0; - assert (d0 == 0); - - Dummy d(1); - Var da = d; - assert (da.extract() == 1); - - Dummy d1 = d; - Var da1 = d1; - assert (da1.extract() == 1); - - try - { - float f = da1; - fail ("must fail"); - } - catch (BadCastException&) { } -} - - -void VarTest::testConversionOperator() -{ - Var any("42"); - int i = any; - assert (i == 42); - assert (any == i); - - any = 123; - std::string s1 = any.convert(); - assert (s1 == "123"); - assert (s1 == any); - assert (any == s1); - assert ("123" == any); - - any = 321; - s1 = any.convert(); - assert (s1 == "321"); - - any = "456"; - assert (any == "456"); - assert ("456" == any); - - any = 789; - std::string s2 = any.convert(); - assert (s2 == "789"); - assert (s2 == any); - assert (any == s2); - assert ("789" == any); - - Var any2 = "1.5"; - double d = any2; - assert (d == 1.5); - assert (any2 == d); -} - - -void VarTest::testComparisonOperators() -{ - Var any1 = 1; - Var any2 = "1"; - assert (any1 == any2); - assert (any1 == 1); - assert (1 == any1); - assert (any1 == "1"); - assert ("1" == any1); - assert (any1 <= 1); - assert (1 >= any1); - assert (any1 <= 2); - assert (2 >= any1); - assert (any1 < 2); - assert (2 > any1); - assert (any1 > 0); - assert (0 < any1); - assert (any1 >= 1); - assert (1 <= any1); - assert (any1 >= 0); - assert (0 <= any1); - - any1 = 1L; - assert (any1 == any2); - assert (any1 == 1L); - assert (1L == any1); - assert (any1 == "1"); - assert ("1" == any1); - assert (any1 != 2L); - assert (2L != any1); - assert (any1 != "2"); - assert ("2" != any1); - assert (any1 <= 1L); - assert (1L >= any1); - assert (any1 <= 2L); - assert (2L >= any1); - assert (any1 < 2L); - assert (2L > any1); - assert (any1 > 0); - assert (0 < any1); - assert (any1 >= 1L); - assert (1L <= any1); - assert (any1 >= 0); - assert (0 <= any1); - - any1 = 0x31; - assert (any1 == '1'); - assert ('1' == any1); - assert (any1 <= '1'); - assert ('1' >= any1); - assert (any1 <= '2'); - assert ('2' >= any1); - assert (any1 < '2'); - assert ('2' > any1); - assert (any1 > 0); - assert (0 < any1); - assert (any1 >= '1'); - assert ('1' <= any1); - assert (any1 >= 0); - assert (0 <= any1); - - any1 = "2"; - assert (any1 != any2); - assert (any1 != 1); - assert (1 != any1); - assert (any1 != "1"); - assert ("1" != any1); - - any1 = 1.5; - assert (any1 == 1.5); - assert (1.5 == any1); - assert (any1 == "1.5"); - assert ("1.5" == any1); - assert (any1 != 2.5); - assert (2.5 != any1); - assert (any1 != "2.5"); - assert ("2.5" != any1); - assert (any1 <= 1.5); - assert (1.5 >= any1); - assert (any1 <= 2.5); - assert (2.5 >= any1); - assert (any1 < 2.5); - assert (2.5 > any1); - assert (any1 > 0); - assert (0 < any1); - assert (any1 >= 1.5); - assert (1.5 <= any1); - assert (any1 >= 0); - assert (0 <= any1); - - any1 = 1.5f; - assert (any1 == 1.5f); - assert (1.5f == any1); - assert (any1 == "1.5"); - assert ("1.5" == any1); - assert (any1 != 2.5f); - assert (2.5f != any1); - assert (any1 != "2.5"); - assert ("2.5" != any1); - assert (any1 <= 1.5f); - assert (1.5f >= any1); - assert (any1 <= 2.5f); - assert (2.5f >= any1); - assert (any1 < 2.5f); - assert (2.5f > any1); - assert (any1 > 0); - assert (0 < any1); - assert (any1 >= 1.5f); - assert (1.5f <= any1); - assert (any1 >= 0); - assert (0 <= any1); -} - - -void VarTest::testArithmeticOperators() -{ - Var any1 = 1; - Var any2 = 2; - Var any3 = any1 + any2; - assert (any3 == 3); - int i = 1; - i += any1; - assert (2 == i); - - any1 = 3; - assert ((5 - any1) == 2); - any2 = 5; - any3 = any2 - any1; - assert (any3 == 2); - any3 -= 1; - assert (any3 == 1); - i = 5; - i -= any1; - assert (2 == i); - - any1 = 3; - assert ((5 * any1) == 15); - any2 = 5; - any3 = any1 * any2; - assert (any3 == 15); - any3 *= 3; - assert (any3 == 45); - i = 5; - i *= any1; - assert (15 == i); - - any1 = 3; - assert ((9 / any1) == 3); - any2 = 9; - any3 = any2 / any1; - assert (any3 == 3); - any3 /= 3; - assert (any3 == 1); - i = 9; - i /= any1; - assert (3 == i); - - any1 = 1.0f; - any2 = .5f; - any3 = .0f; - any3 = any1 + any2; - assert (any3 == 1.5f); - any3 += .5f; - assert (any3 == 2.0f); - - any1 = 1.0; - any2 = .5; - any3 = 0.0; - any3 = any1 + any2; - assert (any3 == 1.5); - any3 += .5; - assert (any3 == 2.0); - - any1 = 1; - any2 = "2"; - any3 = any1 + any2; - assert (any3 == 3); - any2 = "4"; - any3 += any2; - assert (any3 == 7); - assert (1 + any3 == 8); - - any1 = "123"; - any2 = "456"; - any3 = any1 + any2; - assert (any3 == "123456"); - any2 = "789"; - any3 += any2; - assert (any3 == "123456789"); - assert (("xyz" + any3) == "xyz123456789"); - - try { any3 = any1 - any2; fail ("must fail"); } - catch (InvalidArgumentException&){} - - try { any3 -= any2; fail ("must fail"); } - catch (InvalidArgumentException&){} - - try { any3 = any1 * any2; fail ("must fail"); } - catch (InvalidArgumentException&){} - - try { any3 *= any2; fail ("must fail"); } - catch (InvalidArgumentException&){} - - try { any3 = any1 / any2; fail ("must fail"); } - catch (InvalidArgumentException&){} - - try { any3 /= any2; fail ("must fail"); } - catch (InvalidArgumentException&){} - - any1 = 10; - - assert (any1++ == 10); - assert (any1 == 11); - assert (++any1 == 12); - - assert (any1-- == 12); - assert (any1 == 11); - assert (--any1 == 10); - - any1 = 1.23; - - try { ++any1; fail ("must fail"); } - catch (InvalidArgumentException&){} - - try { any1++; fail ("must fail"); } - catch (InvalidArgumentException&){} - - try { --any1; fail ("must fail"); } - catch (InvalidArgumentException&){} - - try { any1--; fail ("must fail"); } - catch (InvalidArgumentException&){} -} - - -void VarTest::testLimitsInt() -{ - testLimitsSigned(); - testLimitsSigned(); - testLimitsSigned(); - testLimitsFloatToInt(); - testLimitsFloatToInt(); - - testLimitsSigned(); - testLimitsSigned(); - testLimitsFloatToInt(); - testLimitsFloatToInt(); - - testLimitsSigned(); - testLimitsFloatToInt(); - testLimitsFloatToInt(); - - testLimitsSignedUnsigned(); - testLimitsSignedUnsigned(); - testLimitsSignedUnsigned(); - testLimitsSignedUnsigned(); - testLimitsFloatToInt(); - testLimitsFloatToInt(); - - testLimitsSignedUnsigned(); - testLimitsSignedUnsigned(); - testLimitsSignedUnsigned(); - testLimitsSignedUnsigned(); - testLimitsFloatToInt(); - testLimitsFloatToInt(); - - testLimitsSignedUnsigned(); - testLimitsSignedUnsigned(); - testLimitsSignedUnsigned(); - testLimitsSignedUnsigned(); - testLimitsFloatToInt(); - testLimitsFloatToInt(); - - testLimitsSignedUnsigned(); - testLimitsSignedUnsigned(); - testLimitsSignedUnsigned(); - testLimitsSignedUnsigned(); - testLimitsFloatToInt(); - testLimitsFloatToInt(); - - - testLimitsUnsigned(); - testLimitsUnsigned(); - testLimitsUnsigned(); - - testLimitsUnsigned(); - testLimitsUnsigned(); - - testLimitsUnsigned(); -} - - -void VarTest::testLimitsFloat() -{ - if (std::numeric_limits::max() != std::numeric_limits::max()) - { - double iMin = -1 * std::numeric_limits::max(); - Var da = iMin * 10; - try { float f; f = da; fail("must fail"); } - catch (RangeException&) {} - - double iMax = std::numeric_limits::max(); - da = iMax * 10; - try { float f; f = da; fail("must fail"); } - catch (RangeException&) {} - } -} - - -void VarTest::testCtor() -{ - // this is mainly to test a reported compiler error with assignment on HP aCC. - // (SF# 1733964) - - Var a1(42); - Var a2(a1); - Var a3; - - a3 = a1; - - assert (a2 == 42); - assert (a3 == 42); -} - - -void VarTest::testIsStruct() -{ - std::string s1("string"); - Poco::Int8 s2(-23); - Poco::Int16 s3(-33); - Poco::Int32 s4(-388); - Poco::Int64 s5(-23823838); - Poco::UInt8 s6(32u); - Poco::UInt16 s7(16000u); - Poco::UInt32 s8(334234u); - Poco::UInt64 s9(2328328382u); - float s10(13.333f); - double s11(13.555); - bool s12(true); - char s13('c'); - long s14(232323); - unsigned long s15(21233232u); - std::vector s16; - Struct s17; - Struct s18; - - Var d1(s1); - Var d2(s2); - Var d3(s3); - Var d4(s4); - Var d5(s5); - Var d6(s6); - Var d7(s7); - Var d8(s8); - Var d9(s9); - Var d10(s10); - Var d11(s11); - Var d12(s12); - Var d13(s13); - Var d14(s14); - Var d15(s15); - Var d16(s16); - Var d17(s17); - Var d18(s18); - - assert (!d1.isStruct()); - assert (!d2.isStruct()); - assert (!d3.isStruct()); - assert (!d4.isStruct()); - assert (!d5.isStruct()); - assert (!d6.isStruct()); - assert (!d7.isStruct()); - assert (!d8.isStruct()); - assert (!d9.isStruct()); - assert (!d10.isStruct()); - assert (!d11.isStruct()); - assert (!d12.isStruct()); - assert (!d13.isStruct()); - assert (!d14.isStruct()); - assert (!d15.isStruct()); - assert (!d16.isStruct()); - assert (d17.isStruct()); - assert (d18.isStruct()); -} - - -void VarTest::testIsArray() -{ - std::string s1("string"); - Poco::Int8 s2(-23); - Poco::Int16 s3(-33); - Poco::Int32 s4(-388); - Poco::Int64 s5(-23823838); - Poco::UInt8 s6(32u); - Poco::UInt16 s7(16000u); - Poco::UInt32 s8(334234u); - Poco::UInt64 s9(2328328382u); - float s10(13.333f); - double s11(13.555); - bool s12(true); - char s13('c'); - long s14(232323); - unsigned long s15(21233232u); - std::vector s16; - DynamicStruct s17; - - Var d0; - Var d1(s1); - Var d2(s2); - Var d3(s3); - Var d4(s4); - Var d5(s5); - Var d6(s6); - Var d7(s7); - Var d8(s8); - Var d9(s9); - Var d10(s10); - Var d11(s11); - Var d12(s12); - Var d13(s13); - Var d14(s14); - Var d15(s15); - Var d16(s16); - Var d17(s17); - - assert (!d0.isArray()); - assert (!d1.isArray()); - assert (!d2.isArray()); - assert (!d3.isArray()); - assert (!d4.isArray()); - assert (!d5.isArray()); - assert (!d6.isArray()); - assert (!d7.isArray()); - assert (!d8.isArray()); - assert (!d9.isArray()); - assert (!d10.isArray()); - assert (!d11.isArray()); - assert (!d12.isArray()); - assert (!d13.isArray()); - assert (!d14.isArray()); - assert (!d15.isArray()); - assert (d16.isArray()); - assert (!d17.isArray()); -} - - -void VarTest::testArrayIdxOperator() -{ - std::string s1("string"); - Poco::Int8 s2(-23); - Poco::Int16 s3(-33); - Poco::Int32 s4(-388); - Poco::Int64 s5(-23823838); - Poco::UInt8 s6(32u); - Poco::UInt16 s7(16000u); - Poco::UInt32 s8(334234u); - Poco::UInt64 s9(2328328382u); - float s10(13.333f); - double s11(13.555); - bool s12(true); - char s13('c'); - long s14(232323); - unsigned long s15(21233232u); - std::vector s16; - s16.push_back(s1); - s16.push_back(s2); - DynamicStruct s17; - - Var d1(s1); - Var d2(s2); - Var d3(s3); - Var d4(s4); - Var d5(s5); - Var d6(s6); - Var d7(s7); - Var d8(s8); - Var d9(s9); - Var d10(s10); - Var d11(s11); - Var d12(s12); - Var d13(s13); - Var d14(s14); - Var d15(s15); - Var d16(s16); - Var d17(s17); - - testGetIdxMustThrow(d1, 0); - testGetIdxNoThrow(d2, 0); - testGetIdxNoThrow(d3, 0); - testGetIdxNoThrow(d4, 0); - testGetIdxNoThrow(d5, 0); - testGetIdxNoThrow(d6, 0); - testGetIdxNoThrow(d7, 0); - testGetIdxNoThrow(d8, 0); - testGetIdxNoThrow(d9, 0); - testGetIdxNoThrow(d10, 0); - testGetIdxNoThrow(d11, 0); - testGetIdxNoThrow(d12, 0); - testGetIdxNoThrow(d13, 0); - testGetIdxNoThrow(d14, 0); - testGetIdxNoThrow(d15, 0); - testGetIdx(d16, 0, s1); - testGetIdx(d16, 1, s2); - - testGetIdxMustThrow(d1, 1); - testGetIdxMustThrow(d2, 1); - testGetIdxMustThrow(d3, 1); - testGetIdxMustThrow(d4, 1); - testGetIdxMustThrow(d5, 1); - testGetIdxMustThrow(d6, 1); - testGetIdxMustThrow(d7, 1); - testGetIdxMustThrow(d8, 1); - testGetIdxMustThrow(d9, 1); - testGetIdxMustThrow(d10, 1); - testGetIdxMustThrow(d11, 1); - testGetIdxMustThrow(d12, 1); - testGetIdxMustThrow(d13, 1); - testGetIdxMustThrow(d14, 1); - testGetIdxMustThrow(d15, 1); - testGetIdxMustThrow(d17, 1); -} - - -void VarTest::testDynamicStructBasics() -{ - DynamicStruct aStruct; - assert (aStruct.empty()); - assert (aStruct.size() == 0); - assert (aStruct.members().empty()); - - aStruct.insert("First Name", "Little"); - assert (!aStruct.empty()); - assert (aStruct.size() == 1); - assert (*(aStruct.members().begin()) == "First Name"); - assert (aStruct["First Name"] == "Little"); - aStruct.insert("Last Name", "POCO"); - assert (aStruct.members().size() == 2); - aStruct.erase("First Name"); - assert (aStruct.size() == 1); - assert (*(aStruct.members().begin()) == "Last Name"); -} - - -void VarTest::testDynamicStructString() -{ - DynamicStruct aStruct; - aStruct["First Name"] = "Junior"; - aStruct["Last Name"] = "POCO"; - Var a1(aStruct); - assert (a1["First Name"] == "Junior"); - assert (a1["Last Name"] == "POCO"); - a1["First Name"] = "Senior"; - assert (a1["First Name"] == "Senior"); - testGetIdxMustThrow(a1, 0); - - Struct s1; - s1["1"] = 1; - s1["2"] = 2; - s1["3"] = 3; - - Struct s2(s1); - assert (s2["1"] == 1); - assert (s2["2"] == 2); - assert (s2["3"] == 3); - - std::map m1; - m1["1"] = 1; - m1["2"] = 2; - m1["3"] = 3; - - Struct m2(m1); - assert (m2["1"] == 1); - assert (m2["2"] == 2); - assert (m2["3"] == 3); -} - - -void VarTest::testDynamicStructInt() -{ - Dynamic::Struct aStruct; - aStruct[0] = "Junior"; - aStruct[1] = "POCO"; - aStruct[2] = 10; - Var a1(aStruct); - assert (a1[0]== "Junior"); - assert (a1[1]== "POCO"); - assert (a1[2]== 10); - a1[0] = "Senior"; - assert (a1[0] == "Senior"); - - Struct s1; - s1[1] = "1"; - s1[2] = "2"; - s1[3] = "3"; - - Struct s2(s1); - assert (s2[1] == "1"); - assert (s2[2] == "2"); - assert (s2[3] == "3"); - - std::map m1; - m1[1] = "1"; - m1[2] = "2"; - m1[3] = "3"; - - Struct m2(m1); - assert (m2[1] == "1"); - assert (m2[2] == "2"); - assert (m2[3] == "3"); -} - - -void VarTest::testDynamicPair() -{ - Pair aPair; - assert (0 == aPair.first()); - try - { - std::string s = aPair.second().convert(); - fail ("must fail"); - } - catch (InvalidAccessException&) { } - - Var va(aPair); - assert ("{ \"0\" : null }" == va.convert()); - assert (aPair.toString() == va.convert()); - - aPair = Pair(4, "123"); - assert ("123" == aPair.second()); - - va = aPair; - assert ("{ \"4\" : \"123\" }" == va.convert()); - assert (aPair.toString() == va.convert()); - - int i = 1; - std::string s = "2"; - Pair iPair(i, s); - assert (1 == iPair.first()); - assert ("2" == iPair.second()); - - Pair sPair(s, i); - assert ("2" == sPair.first()); - assert (1 == sPair.second()); - - std::pair p = std::make_pair(i, s); - Pair pPair(p); - assert (1 == pPair.first()); - assert ("2" == pPair.second()); - - Var vp(pPair); - assert ("{ \"1\" : \"2\" }" == vp.convert()); - assert (pPair.toString() == vp.convert()); - - Var vs(sPair); - assert ("{ \"2\" : 1 }" == vs.convert()); - assert (sPair.toString() == vs.convert()); -} - - -void VarTest::testArrayToString() -{ - std::string s1("string"); - Poco::Int8 s2(23); - std::vector s16; - s16.push_back(s1); - s16.push_back(s2); - Var a1(s16); - std::string res = a1.convert(); - std::string expected("[ \"string\", 23 ]"); - assert (res == expected); -} - - -void VarTest::testArrayToStringEscape() -{ - std::string s1("\"quoted string\""); - Poco::Int8 s2(23); - std::vector s16; - s16.push_back(s1); - s16.push_back(s2); - Var a1(s16); - std::string res = a1.convert(); - std::string expected("[ \"\\\"quoted string\\\"\", 23 ]"); - assert (res == expected); -} - - -void VarTest::testStructToString() -{ - DynamicStruct aStruct; - aStruct["First Name"] = "Junior"; - aStruct["Last Name"] = "POCO"; - aStruct["Age"] = 1; - Var a1(aStruct); - std::string res = a1.convert(); - std::string expected = "{ \"Age\" : 1, \"First Name\" : \"Junior\", \"Last Name\" : \"POCO\" }"; - assert (res == expected); - assert (aStruct.toString() == res); -} - - -void VarTest::testStructToStringEscape() -{ - DynamicStruct aStruct; - aStruct["Value"] = "Value with \" and \n"; - Var a1(aStruct); - std::string res = a1.convert(); - std::string expected = "{ \"Value\" : \"Value with \\\" and \\n\" }"; - assert (res == expected); - assert (aStruct.toString() == res); -} - - -void VarTest::testArrayOfStructsToString() -{ - std::vector s16; - DynamicStruct aStruct; - aStruct["First Name"] = "Junior"; - aStruct["Last Name"] = "POCO"; - aStruct["Age"] = 1; - s16.push_back(aStruct); - aStruct["First Name"] = "Senior"; - aStruct["Last Name"] = "POCO"; - aStruct["Age"] = 100; - s16.push_back(aStruct); - std::vector s16Cpy = s16; - // recursive arrays! - s16Cpy.push_back(s16); - s16.push_back(s16Cpy); - Var a1(s16); - std::string res = a1.convert(); - std::string expected = "[ " - "{ \"Age\" : 1, \"First Name\" : \"Junior\", \"Last Name\" : \"POCO\" }, " - "{ \"Age\" : 100, \"First Name\" : \"Senior\", \"Last Name\" : \"POCO\" }, " - "[ " - "{ \"Age\" : 1, \"First Name\" : \"Junior\", \"Last Name\" : \"POCO\" }, " - "{ \"Age\" : 100, \"First Name\" : \"Senior\", \"Last Name\" : \"POCO\" }, " - "[ " - "{ \"Age\" : 1, \"First Name\" : \"Junior\", \"Last Name\" : \"POCO\" }, " - "{ \"Age\" : 100, \"First Name\" : \"Senior\", \"Last Name\" : \"POCO\" } " - "] ] ]"; - - assert (res == expected); - assert (a1.toString() == res); -} - - -void VarTest::testStructWithArraysToString() -{ - std::string s1("string"); - Poco::Int8 s2(23); - std::vector s16; - s16.push_back(s1); - s16.push_back(s2); - Var a1(s16); - DynamicStruct addr; - addr["Number"] = 4; - addr["Street"] = "Unknown"; - addr["Country"] = "Carinthia"; - DynamicStruct aStruct; - aStruct["First Name"] = "Junior"; - aStruct["Last Name"] = a1; - aStruct["Age"] = 1; - aStruct["Address"] = addr; - Var a2(aStruct); - std::string res = a2.convert(); - std::string expected = "{ \"Address\" : { \"Country\" : \"Carinthia\", \"Number\" : 4, \"Street\" : \"Unknown\" }, " - "\"Age\" : 1, \"First Name\" : \"Junior\", \"Last Name\" : [ \"string\", 23 ] }"; - - assert (res == expected); - assert (aStruct.toString() == res); -} - - -void VarTest::testJSONDeserializeString() -{ - Var a("test"); - std::string tst = Var::toString(a); - Var b = Var::parse(tst); - assert (b.convert() == "test"); - - Var c('c'); - tst = Var::toString(c); - Var b2 = Var::parse(tst); - char cc = b2.convert(); - assert (cc == 'c'); - - tst = "{ \"a\" : 1, \"b\" : 2 \n}"; - a = Var::parse(tst); - assert(a.toString() == "{ \"a\" : \"1\", \"b\" : \"2\" }"); - - tst = "{ \"a\" : 1, \"b\" : 2\n}"; - a = Var::parse(tst); - assert(a.toString() == "{ \"a\" : \"1\", \"b\" : \"2\" }"); -} - - -void VarTest::testJSONDeserializePrimitives() -{ - Poco::Int8 i8(-12); - Poco::UInt16 u16(2345); - Poco::Int32 i32(-24343); - Poco::UInt64 u64(1234567890); - u64 *= u64; - bool b = false; - float f = 3.1415f; - double d = 3.1415; - - std::string s8 = Var::toString(i8); - std::string s16 = Var::toString(u16); - std::string s32 = Var::toString(i32); - std::string s64 = Var::toString(u64); - std::string sb = Var::toString(b); - std::string sf = Var::toString(f); - std::string sd = Var::toString(d); - Var a8 = Var::parse(s8); - Var a16 = Var::parse(s16); - Var a32 = Var::parse(s32); - Var a64 = Var::parse(s64); - Var ab = Var::parse(sb); - Var af = Var::parse(sf); - Var ad = Var::parse(sd); - assert (a8 == i8); - assert (a16 == u16); - assert (a32 == i32); - assert (a64 == u64); - assert (ab == b); - assert (af == f); - assert (ad == d); -} - - -void VarTest::testJSONDeserializeArray() -{ - Poco::Int8 i8(-12); - Poco::UInt16 u16(2345); - Poco::Int32 i32(-24343); - Poco::UInt64 u64(1234567890); - u64 *= u64; - bool b = false; - float f = 3.1415f; - double d = 3.1415; - std::string s("test string"); - char c('x'); - std::vector aVec; - aVec.push_back(i8); - aVec.push_back(u16); - aVec.push_back(i32); - aVec.push_back(u64); - aVec.push_back(b); - aVec.push_back(f); - aVec.push_back(d); - aVec.push_back(s); - aVec.push_back(c); - - std::string sVec = Var::toString(aVec); - Var a = Var::parse(sVec); - assert (a[0] == i8); - assert (a[1] == u16); - assert (a[2] == i32); - assert (a[3] == u64); - assert (a[4] == b); - assert (a[5] == f); - assert (a[6] == d); - assert (a[7] == s); - assert (a[8] == c); -} - - -void VarTest::testJSONDeserializeComplex() -{ - Poco::Int8 i8(-12); - Poco::UInt16 u16(2345); - Poco::Int32 i32(-24343); - Poco::UInt64 u64(1234567890); - u64 *= u64; - bool b = false; - float f = 3.1415f; - double d = 3.1415; - std::string s("test string"); - char c('x'); - DynamicStruct aStr; - aStr["i8"] = i8; - aStr["u16"] = u16; - aStr["i32"] = i32; - aStr["u64"] = u64; - aStr["b"] = b; - aStr["f"] = f; - aStr["d"] = d; - aStr["s"] = s; - aStr["c"] = c; - std::vector aVec; - aVec.push_back(i8); - aVec.push_back(u16); - aVec.push_back(i32); - aVec.push_back(u64); - aVec.push_back(b); - aVec.push_back(f); - aVec.push_back(d); - aVec.push_back(s); - aVec.push_back(c); - aVec.push_back(aStr); - aStr["vec"] = aVec; - - std::string sStr = Var::toString(aStr); - Var a = Var::parse(sStr); - assert (a.isStruct()); - assert (aStr["i8"] == i8); - assert (aStr["u16"] == u16); - assert (aStr["i32"] == i32); - assert (aStr["u64"] == u64); - assert (aStr["b"] == b); - assert (aStr["f"] == f); - assert (aStr["d"] == d); - assert (aStr["s"] == s); - assert (aStr["c"] == c); - Var vecRet = a["vec"]; - assert (vecRet.isArray()); - assert (vecRet[0] == i8); - assert (vecRet[1] == u16); - assert (vecRet[2] == i32); - assert (vecRet[3] == u64); - assert (vecRet[4] == b); - assert (vecRet[5] == f); - assert (vecRet[6] == d); - assert (vecRet[7] == s); - assert (vecRet[8] == c); - Var strRet = vecRet[9]; - assert (strRet.isStruct()); -} - - -void VarTest::testJSONDeserializeStruct() -{ - Poco::Int8 i8(-12); - Poco::UInt16 u16(2345); - Poco::Int32 i32(-24343); - Poco::UInt64 u64(1234567890); - u64 *= u64; - bool b = false; - float f = 3.1415f; - double d = 3.1415; - std::string s("test string"); - char c('x'); - DynamicStruct aStr; - aStr["i8"] = i8; - aStr["u16"] = u16; - aStr["i32"] = i32; - aStr["u64"] = u64; - aStr["b"] = b; - aStr["f"] = f; - aStr["d"] = d; - aStr["s"] = s; - aStr["c"] = c; - - std::string sStr = Var::toString(aStr); - Var a = Var::parse(sStr); - assert (aStr["i8"] == i8); - assert (aStr["u16"] == u16); - assert (aStr["i32"] == i32); - assert (aStr["u64"] == u64); - assert (aStr["b"] == b); - assert (aStr["f"] == f); - assert (aStr["d"] == d); - assert (aStr["s"] == s); - assert (aStr["c"] == c); -} - - -void VarTest::testDate() -{ - Poco::DateTime dtNow(2007, 3, 13, 8, 12, 15); - - Poco::Timestamp tsNow = dtNow.timestamp(); - Poco::LocalDateTime ldtNow(dtNow.timestamp()); - Var dt(dtNow); - Var ts(tsNow); - Var ldt(ldtNow); - Var dtStr(dt.convert()); - Var tsStr(ts.convert()); - Var ldtStr(ldt.convert()); - DateTime dtRes = dtStr.convert(); - LocalDateTime ldtRes = ldtStr.convert(); - Timestamp tsRes = tsStr.convert(); - assert (dtNow == dtRes); - assert (ldtNow == ldtRes); - assert (tsNow == tsRes); -} - - -void VarTest::testGetIdxNoThrow(Var& a1, std::vector::size_type n) -{ - Var val1 = a1[n]; -} - - -void VarTest::testGetIdxMustThrow(Var& a1, std::vector::size_type n) -{ - try - { - Var val1 = a1[n]; - fail("bad cast - must throw"); - val1 = 0; // silence the compiler - } - catch (Poco::InvalidAccessException&) - { - } - catch (Poco::RangeException&) - { - } - - try - { - const Var& c1 = a1; - const Var& cval1 = c1[n]; - fail("bad const cast - must throw"); - assert (cval1 == c1); // silence the compiler - } - catch (Poco::InvalidAccessException&) - { - } - catch (Poco::RangeException&) - { - } -} - - -void VarTest::testEmpty() -{ - Var da; - assert (da.isEmpty()); - assert (da.type() == typeid(void)); - assert (!da.isArray()); - assert (!da.isInteger()); - assert (!da.isNumeric()); - assert (!da.isSigned()); - assert (!da.isString()); - assert (da == da); - assert (!(da != da)); - - assert (da != Var(1)); - assert (!(da == Var(1))); - assert (Var(1) != da); - assert (!(Var(1) == da)); - - da = "123"; - int i = da.convert(); - assert (123 == i); - std::string s = da.extract(); - assert ("123" == s); - assert (!da.isEmpty()); - da.empty(); - assert (da.isEmpty()); - assert (da.type() == typeid(void)); - assert (!da.isArray()); - assert (!da.isInteger()); - assert (!da.isNumeric()); - assert (!da.isSigned()); - assert (!da.isString()); - assert (da == da); - assert (!(da != da)); - - assert (da != Var(1)); - assert (!(da == Var(1))); - assert (Var(1) != da); - assert (!(Var(1) == da)); - - assert (da != ""); - assert ("" != da); - assert (!(da == "")); - assert (!("" == da)); - - testEmptyComparisons(); - testEmptyComparisons(); - testEmptyComparisons(); - testEmptyComparisons(); - testEmptyComparisons(); - testEmptyComparisons(); - testEmptyComparisons(); - testEmptyComparisons(); - testEmptyComparisons(); - testEmptyComparisons(); -#ifdef POCO_LONG_IS_64_BIT - testEmptyComparisons(); - testEmptyComparisons(); -#endif - testEmptyComparisons(); - testEmptyComparisons(); - - try - { - int i = da; - fail ("must fail"); - } catch (InvalidAccessException&) { } - - try - { - int i = da.extract(); - fail ("must fail"); - } catch (InvalidAccessException&) { } -} - - -void VarTest::testIterator() -{ - Var da; - assert (da.isEmpty()); - assert (da.begin() == da.end()); - - da = 1; - assert (!da.isEmpty()); - assert (da == 1); - assert (da[0] == 1); - try - { - da[1] = 2; - } - catch (RangeException&) {} - assert (da.begin() != da.end()); - - Var::Iterator it = da.begin(); - Var::Iterator end = da.end(); - assert (it != end); - assert (++it == end); - assert (--it == da.begin()); - it++; - assert (it == end); - try - { - ++it; - fail ("must fail"); - } - catch (RangeException&) {} - assert (it == end); - - da = "abc"; - assert (da.size() == 3); - assert (!da.isArray()); - assert (da.isString()); - //assert (da[0] == 'a'); - assert (da.at(0) == 'a'); - //assert (da[1] = 'b'); - assert (da.at(1) == 'b'); - //assert (da[2] = 'c'); - assert (da.at(2) == 'c'); - - da.at(0) = 'b'; - assert (da.at(0) == 'b'); - // TODO: allow treatment of strings like arrays - //da[1] = 'c'; - da.at(1) = 'c'; - assert (da.at(1) == 'c'); - //da[2] = 'a'; - da.at(2) = 'a'; - assert (da.at(2) == 'a'); - - it = da.begin(); - end = da.end(); - assert (it != end); - assert (++it != end); - assert (--it == da.begin()); - - testContainerIterator >(); - testContainerIterator >(); - testContainerIterator >(); -} - - -void VarTest::setUp() -{ -} - - -void VarTest::tearDown() -{ -} - - -CppUnit::Test* VarTest::suite() -{ - CppUnit::TestSuite* pSuite = new CppUnit::TestSuite("VarTest"); - - CppUnit_addTest(pSuite, VarTest, testInt8); - CppUnit_addTest(pSuite, VarTest, testInt16); - CppUnit_addTest(pSuite, VarTest, testInt32); - CppUnit_addTest(pSuite, VarTest, testInt64); - CppUnit_addTest(pSuite, VarTest, testUInt8); - CppUnit_addTest(pSuite, VarTest, testUInt16); - CppUnit_addTest(pSuite, VarTest, testUInt32); - CppUnit_addTest(pSuite, VarTest, testUInt64); - CppUnit_addTest(pSuite, VarTest, testBool); - CppUnit_addTest(pSuite, VarTest, testChar); - CppUnit_addTest(pSuite, VarTest, testFloat); - CppUnit_addTest(pSuite, VarTest, testDouble); - CppUnit_addTest(pSuite, VarTest, testLong); - CppUnit_addTest(pSuite, VarTest, testULong); - CppUnit_addTest(pSuite, VarTest, testString); - CppUnit_addTest(pSuite, VarTest, testUDT); - CppUnit_addTest(pSuite, VarTest, testConversionOperator); - CppUnit_addTest(pSuite, VarTest, testComparisonOperators); - CppUnit_addTest(pSuite, VarTest, testArithmeticOperators); - CppUnit_addTest(pSuite, VarTest, testLimitsInt); - CppUnit_addTest(pSuite, VarTest, testLimitsFloat); - CppUnit_addTest(pSuite, VarTest, testCtor); - CppUnit_addTest(pSuite, VarTest, testIsStruct); - CppUnit_addTest(pSuite, VarTest, testIsArray); - CppUnit_addTest(pSuite, VarTest, testArrayIdxOperator); - CppUnit_addTest(pSuite, VarTest, testDynamicPair); - CppUnit_addTest(pSuite, VarTest, testDynamicStructBasics); - CppUnit_addTest(pSuite, VarTest, testDynamicStructString); - CppUnit_addTest(pSuite, VarTest, testDynamicStructInt); - CppUnit_addTest(pSuite, VarTest, testArrayToString); - CppUnit_addTest(pSuite, VarTest, testArrayToStringEscape); - CppUnit_addTest(pSuite, VarTest, testStructToString); - CppUnit_addTest(pSuite, VarTest, testStructToStringEscape); - CppUnit_addTest(pSuite, VarTest, testArrayOfStructsToString); - CppUnit_addTest(pSuite, VarTest, testStructWithArraysToString); - CppUnit_addTest(pSuite, VarTest, testJSONDeserializeString); - CppUnit_addTest(pSuite, VarTest, testJSONDeserializePrimitives); - CppUnit_addTest(pSuite, VarTest, testJSONDeserializeArray); - CppUnit_addTest(pSuite, VarTest, testJSONDeserializeStruct); - CppUnit_addTest(pSuite, VarTest, testJSONDeserializeComplex); - CppUnit_addTest(pSuite, VarTest, testDate); - CppUnit_addTest(pSuite, VarTest, testEmpty); - CppUnit_addTest(pSuite, VarTest, testIterator); - - return pSuite; -} diff --git a/contrib/libpoco/Foundation/testsuite/src/VarTest.h b/contrib/libpoco/Foundation/testsuite/src/VarTest.h deleted file mode 100644 index 7e27108da43..00000000000 --- a/contrib/libpoco/Foundation/testsuite/src/VarTest.h +++ /dev/null @@ -1,204 +0,0 @@ -// -// VarTest.h -// -// $Id: //poco/svn/Foundation/testsuite/src/VarTest.h#2 $ -// -// Tests for Any types -// -// Copyright (c) 2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - -#ifndef VarTest_INCLUDED -#define VarTest_INCLUDED - - -#include "Poco/Foundation.h" -#include "Poco/Dynamic/Var.h" -#include "Poco/Dynamic/VarIterator.h" -#include "Poco/Exception.h" -#include "CppUnit/TestCase.h" - -GCC_DIAG_OFF(unused-but-set-variable) - -class VarTest: public CppUnit::TestCase -{ -public: - VarTest(const std::string& name); - ~VarTest(); - - void testInt8(); - void testInt16(); - void testInt32(); - void testInt64(); - void testUInt8(); - void testUInt16(); - void testUInt32(); - void testUInt64(); - void testBool(); - void testChar(); - void testFloat(); - void testDouble(); - void testLong(); - void testULong(); - void testString(); - void testUDT(); - void testConversionOperator(); - void testComparisonOperators(); - void testArithmeticOperators(); - void testLimitsInt(); - void testLimitsFloat(); - void testCtor(); - void testIsStruct(); - void testIsArray(); - void testArrayIdxOperator(); - void testDynamicPair(); - void testDynamicStructBasics(); - void testDynamicStructString(); - void testDynamicStructInt(); - void testArrayToString(); - void testArrayToStringEscape(); - void testStructToString(); - void testStructToStringEscape(); - void testArrayOfStructsToString(); - void testStructWithArraysToString(); - void testJSONDeserializeString(); - void testJSONDeserializePrimitives(); - void testJSONDeserializeArray(); - void testJSONDeserializeStruct(); - void testJSONDeserializeComplex(); - void testDate(); - void testEmpty(); - void testIterator(); - - - void setUp(); - void tearDown(); - static CppUnit::Test* suite(); - -private: - void testGetIdxMustThrow(Poco::Dynamic::Var& a1, std::vector::size_type n); - void testGetIdxNoThrow(Poco::Dynamic::Var& a1, std::vector::size_type n); - template - void testGetIdx(const Poco::Dynamic::Var& a1, std::vector::size_type n, const T& expectedResult) - { - Poco::Dynamic::Var val1 = a1[n]; - assert (val1 == expectedResult); - - const Poco::Dynamic::Var c1 = a1; - assert (a1 == c1); // silence the compiler - const Poco::Dynamic::Var cval1 = a1[n]; - assert (cval1 == expectedResult); - } - - - template - void testLimitsSigned() - { - TL iMin = std::numeric_limits::min(); - Poco::Dynamic::Var da = iMin - 1; - try { TS i; i = da.convert(); fail("must fail"); } - catch (Poco::RangeException&) {} - - TL iMax = std::numeric_limits::max(); - da = iMax + 1; - try { TS i; i = da.convert(); fail("must fail"); } - catch (Poco::RangeException&) {} - } - - template - void testLimitsFloatToInt() - { - Poco::Dynamic::Var da; - - if (std::numeric_limits::is_signed) - { - TL iMin = static_cast(std::numeric_limits::min()); - da = iMin * 10; - try { TS i; i = da.convert(); fail("must fail"); } - catch (Poco::RangeException&) {} - } - - TL iMax = static_cast(std::numeric_limits::max()); - da = iMax * 10; - try { TS i; i = da.convert(); fail("must fail"); } - catch (Poco::RangeException&) {} - } - - template - void testLimitsSignedUnsigned() - { - assert (std::numeric_limits::is_signed); - assert (!std::numeric_limits::is_signed); - - TS iMin = std::numeric_limits::min(); - Poco::Dynamic::Var da = iMin; - try { TU i; i = da.convert(); fail("must fail"); } - catch (Poco::RangeException&) {} - } - - template - void testLimitsUnsigned() - { - TL iMax = std::numeric_limits::max(); - Poco::Dynamic::Var da = iMax + 1; - try { TS i; i = da.convert(); fail("must fail"); } - catch (Poco::RangeException&) {} - } - - template - void testEmptyComparisons() - { - Poco::Dynamic::Var da; - T val = 0; - - assert (da != val); - assert (val != da); - assert (!(val == da)); - assert (!(da == val)); - assert (!(da < val)); - assert (!(val < da)); - assert (!(da > val)); - assert (!(val > da)); - assert (!(da <= val)); - assert (!(val <= da)); - assert (!(da >= val)); - assert (!(val >= da)); - } - - template - void testContainerIterator() - { - C cont; - cont.push_back(1); - cont.push_back("2"); - cont.push_back(3.5); - Poco::Dynamic::Var arr(cont); - assert (arr.size() == 3); - Poco::Dynamic::Var::Iterator it = arr.begin(); - Poco::Dynamic::Var::Iterator end = arr.end(); - int counter = 0; - for (; it != end; ++it) - { - switch (++counter) - { - case 1: - assert (*it == 1); - break; - case 2: - assert (*it == 2); - break; - case 3: - assert (*it == 3.5); - break; - default: - fail ("must fail - wrong size"); - } - } - } -}; - - -#endif // VarTest_INCLUDED diff --git a/contrib/libpoco/Foundation/testsuite/src/WinCEDriver.cpp b/contrib/libpoco/Foundation/testsuite/src/WinCEDriver.cpp deleted file mode 100644 index b1f6076f186..00000000000 --- a/contrib/libpoco/Foundation/testsuite/src/WinCEDriver.cpp +++ /dev/null @@ -1,32 +0,0 @@ -// -// WinCEDriver.cpp -// -// $Id: //poco/1.4/Foundation/testsuite/src/WinCEDriver.cpp#1 $ -// -// Console-based test driver for Windows CE. -// -// Copyright (c) 2004-2010, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "CppUnit/TestRunner.h" -#include "FoundationTestSuite.h" -#include - - -int wmain(int argc, wchar_t* argv[]) -{ - std::vector args; - for (int i = 0; i < argc; ++i) - { - char buffer[1024]; - std::wcstombs(buffer, argv[i], sizeof(buffer)); - args.push_back(std::string(buffer)); - } - CppUnit::TestRunner runner; - runner.addTest("FoundationTestSuite", FoundationTestSuite::suite()); - return runner.run(args) ? 0 : 1; -} diff --git a/contrib/libpoco/Foundation/testsuite/src/WinDriver.cpp b/contrib/libpoco/Foundation/testsuite/src/WinDriver.cpp deleted file mode 100644 index 7d981b3dcbc..00000000000 --- a/contrib/libpoco/Foundation/testsuite/src/WinDriver.cpp +++ /dev/null @@ -1,30 +0,0 @@ -// -// WinDriver.cpp -// -// $Id: //poco/1.4/Foundation/testsuite/src/WinDriver.cpp#1 $ -// -// Test driver for Windows. -// -// Copyright (c) 2004-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "WinTestRunner/WinTestRunner.h" -#include "FoundationTestSuite.h" - - -class TestDriver: public CppUnit::WinTestRunnerApp -{ - void TestMain() - { - CppUnit::WinTestRunner runner; - runner.addTest(FoundationTestSuite::suite()); - runner.run(); - } -}; - - -TestDriver theDriver; diff --git a/contrib/libpoco/Foundation/testsuite/src/ZLibTest.cpp b/contrib/libpoco/Foundation/testsuite/src/ZLibTest.cpp deleted file mode 100644 index c7dad81bf1e..00000000000 --- a/contrib/libpoco/Foundation/testsuite/src/ZLibTest.cpp +++ /dev/null @@ -1,203 +0,0 @@ -// -// ZLibTest.cpp -// -// $Id: //poco/1.4/Foundation/testsuite/src/ZLibTest.cpp#1 $ -// -// Copyright (c) 2004-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "ZLibTest.h" -#include "CppUnit/TestCaller.h" -#include "CppUnit/TestSuite.h" -#include "Poco/InflatingStream.h" -#include "Poco/DeflatingStream.h" -#include "Poco/MemoryStream.h" -#include "Poco/StreamCopier.h" -#include "Poco/Buffer.h" -#include - - -using Poco::InflatingInputStream; -using Poco::InflatingOutputStream; -using Poco::DeflatingOutputStream; -using Poco::DeflatingInputStream; -using Poco::InflatingStreamBuf; -using Poco::DeflatingStreamBuf; -using Poco::StreamCopier; - - -ZLibTest::ZLibTest(const std::string& name): CppUnit::TestCase(name) -{ -} - - -ZLibTest::~ZLibTest() -{ -} - - -void ZLibTest::testDeflate1() -{ - std::stringstream buffer; - DeflatingOutputStream deflater(buffer); - deflater << "abcdefabcdefabcdefabcdefabcdefabcdef" << std::endl; - deflater << "abcdefabcdefabcdefabcdefabcdefabcdef" << std::endl; - deflater.close(); - InflatingInputStream inflater(buffer); - std::string data; - inflater >> data; - assert (data == "abcdefabcdefabcdefabcdefabcdefabcdef"); - inflater >> data; - assert (data == "abcdefabcdefabcdefabcdefabcdefabcdef"); -} - - -void ZLibTest::testDeflate2() -{ - std::stringstream buffer; - DeflatingOutputStream deflater(buffer); - deflater << "abcdefabcdefabcdefabcdefabcdefabcdef" << std::endl; - deflater << "abcdefabcdefabcdefabcdefabcdefabcdef" << std::endl; - deflater.close(); - std::stringstream buffer2; - InflatingOutputStream inflater(buffer2); - StreamCopier::copyStream(buffer, inflater); - inflater.close(); - std::string data; - buffer2 >> data; - assert (data == "abcdefabcdefabcdefabcdefabcdefabcdef"); - buffer2 >> data; - assert (data == "abcdefabcdefabcdefabcdefabcdefabcdef"); -} - - -void ZLibTest::testDeflate3() -{ - std::stringstream buffer; - buffer << "abcdefabcdefabcdefabcdefabcdefabcdef" << std::endl; - buffer << "abcdefabcdefabcdefabcdefabcdefabcdef" << std::endl; - DeflatingInputStream deflater(buffer); - std::stringstream buffer2; - StreamCopier::copyStream(deflater, buffer2); - std::stringstream buffer3; - InflatingOutputStream inflater(buffer3); - StreamCopier::copyStream(buffer2, inflater); - inflater.close(); - std::string data; - buffer3 >> data; - assert (data == "abcdefabcdefabcdefabcdefabcdefabcdef"); - buffer3 >> data; - assert (data == "abcdefabcdefabcdefabcdefabcdefabcdef"); -} - - -void ZLibTest::testDeflate4() -{ - Poco::Buffer buffer(1024); - Poco::MemoryOutputStream ostr(buffer.begin(), static_cast(buffer.size())); - DeflatingOutputStream deflater(ostr, -10, Z_BEST_SPEED); - std::string data(36828, 'x'); - deflater << data; - deflater.close(); - Poco::MemoryInputStream istr(buffer.begin(), ostr.charsWritten()); - InflatingInputStream inflater(istr, -10); - std::string data2; - inflater >> data2; - assert (data2 == data); -} - - -void ZLibTest::testGzip1() -{ - std::stringstream buffer; - DeflatingOutputStream deflater(buffer, DeflatingStreamBuf::STREAM_GZIP); - deflater << "abcdefabcdefabcdefabcdefabcdefabcdef" << std::endl; - deflater << "abcdefabcdefabcdefabcdefabcdefabcdef" << std::endl; - deflater.close(); - InflatingInputStream inflater(buffer, InflatingStreamBuf::STREAM_GZIP); - std::string data; - inflater >> data; - assert (data == "abcdefabcdefabcdefabcdefabcdefabcdef"); - inflater >> data; - assert (data == "abcdefabcdefabcdefabcdefabcdefabcdef"); -} - - -void ZLibTest::testGzip2() -{ - // created with gzip ("Hello, world!"): - const unsigned char gzdata[] = - { - 0x1f, 0x8b, 0x08, 0x08, 0xb0, 0x73, 0xd0, 0x41, 0x00, 0x03, 0x68, 0x77, 0x00, 0xf3, 0x48, 0xcd, - 0xc9, 0xc9, 0xd7, 0x51, 0x28, 0xcf, 0x2f, 0xca, 0x49, 0x51, 0xe4, 0x02, 0x00, 0x18, 0xa7, 0x55, - 0x7b, 0x0e, 0x00, 0x00, 0x00, 0x00 - }; - - std::string gzstr((char*) gzdata, sizeof(gzdata)); - std::istringstream istr(gzstr); - InflatingInputStream inflater(istr, InflatingStreamBuf::STREAM_GZIP); - std::string data; - inflater >> data; - assert (data == "Hello,"); - inflater >> data; - assert (data == "world!"); -} - - -void ZLibTest::testGzip3() -{ - std::stringstream buffer; - DeflatingOutputStream deflater1(buffer, DeflatingStreamBuf::STREAM_GZIP); - deflater1 << "abcdefabcdefabcdefabcdefabcdefabcdef" << std::endl; - deflater1 << "abcdefabcdefabcdefabcdefabcdefabcdef" << std::endl; - deflater1.close(); - DeflatingOutputStream deflater2(buffer, DeflatingStreamBuf::STREAM_GZIP); - deflater2 << "bcdefabcdefabcdefabcdefabcdefabcdefa" << std::endl; - deflater2 << "bcdefabcdefabcdefabcdefabcdefabcdefa" << std::endl; - deflater2.close(); - InflatingInputStream inflater(buffer, InflatingStreamBuf::STREAM_GZIP); - std::string data; - inflater >> data; - assert (data == "abcdefabcdefabcdefabcdefabcdefabcdef"); - inflater >> data; - assert (data == "abcdefabcdefabcdefabcdefabcdefabcdef"); - data.clear(); - inflater >> data; - assert (data.empty()); - assert (inflater.eof()); - inflater.reset(); - inflater >> data; - assert (data == "bcdefabcdefabcdefabcdefabcdefabcdefa"); - inflater >> data; - assert (data == "bcdefabcdefabcdefabcdefabcdefabcdefa"); -} - - -void ZLibTest::setUp() -{ -} - - -void ZLibTest::tearDown() -{ -} - - -CppUnit::Test* ZLibTest::suite() -{ - CppUnit::TestSuite* pSuite = new CppUnit::TestSuite("ZLibTest"); - - CppUnit_addTest(pSuite, ZLibTest, testDeflate1); - CppUnit_addTest(pSuite, ZLibTest, testDeflate2); - CppUnit_addTest(pSuite, ZLibTest, testDeflate3); - CppUnit_addTest(pSuite, ZLibTest, testDeflate4); - CppUnit_addTest(pSuite, ZLibTest, testGzip1); - CppUnit_addTest(pSuite, ZLibTest, testGzip2); - CppUnit_addTest(pSuite, ZLibTest, testGzip3); - - return pSuite; -} diff --git a/contrib/libpoco/Foundation/testsuite/src/ZLibTest.h b/contrib/libpoco/Foundation/testsuite/src/ZLibTest.h deleted file mode 100644 index ab2f2a49dc2..00000000000 --- a/contrib/libpoco/Foundation/testsuite/src/ZLibTest.h +++ /dev/null @@ -1,46 +0,0 @@ -// -// ZLibTest.h -// -// $Id: //poco/1.4/Foundation/testsuite/src/ZLibTest.h#1 $ -// -// Definition of the ZLibTest class. -// -// Copyright (c) 2004-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef ZLibTest_INCLUDED -#define ZLibTest_INCLUDED - - -#include "Poco/Foundation.h" -#include "CppUnit/TestCase.h" - - -class ZLibTest: public CppUnit::TestCase -{ -public: - ZLibTest(const std::string& name); - ~ZLibTest(); - - void testDeflate1(); - void testDeflate2(); - void testDeflate3(); - void testDeflate4(); - void testGzip1(); - void testGzip2(); - void testGzip3(); - - void setUp(); - void tearDown(); - - static CppUnit::Test* suite(); - -private: -}; - - -#endif // ZLibTest_INCLUDED diff --git a/contrib/libpoco/Foundation/testsuite/testlibrary.opt b/contrib/libpoco/Foundation/testsuite/testlibrary.opt deleted file mode 100644 index 3455edd73d1..00000000000 --- a/contrib/libpoco/Foundation/testsuite/testlibrary.opt +++ /dev/null @@ -1 +0,0 @@ -SYMBOL_VECTOR=(pocoInitializeLibrary=procedure,pocoUninitializeLibrary=procedure,pocoBuildManifest=procedure,gimmeFive=procedure) diff --git a/contrib/libpoco/Foundation/wcelibcex-1.0/AUTHORS.txt b/contrib/libpoco/Foundation/wcelibcex-1.0/AUTHORS.txt deleted file mode 100644 index 7b5400993c8..00000000000 --- a/contrib/libpoco/Foundation/wcelibcex-1.0/AUTHORS.txt +++ /dev/null @@ -1,13 +0,0 @@ -List of WCELIBCEX authors: - -Active developers ------------------ - -* Mateusz Loskot (mateusz@loskot.net) - -* Stphane Dunand (sdunand@sirap.fr) - -Previously contributed ----------------------- - -* Piotr Wisniewski (pwisniewski@taxussi.com.pl) diff --git a/contrib/libpoco/Foundation/wcelibcex-1.0/BUILD.txt b/contrib/libpoco/Foundation/wcelibcex-1.0/BUILD.txt deleted file mode 100644 index d6e224f9c24..00000000000 --- a/contrib/libpoco/Foundation/wcelibcex-1.0/BUILD.txt +++ /dev/null @@ -1,41 +0,0 @@ -$Id: BUILD.txt 50 2007-01-08 12:16:50Z mloskot $ --------------------------------------------------------------------------------- - Building WCELIBCEX library --------------------------------------------------------------------------------- - -*** IMPORTANT *** -Remember to build WCELIBCEX as a static library, not DLL. -Provided project for Visual C++ 2005 is configured to -build WCELIBCEX as a static library -***************** - -Supported and tested platforms: - -- Windows CE 4.x - - Pocket PC 2003 - - Smartphone 2003 -- Windows CE 5.0 - - Windows Mobile 5.0 - - other custom operating systems based on Windows CE 5.0 - -If you've used WCELIBCEX on Windows CE OS not listed here, -please drop me a message on mateusz@loskot.net. - -Supported compilers: - -- Microsoft Visual C++ 2005 Standard or Professional -- Microsoft eMbedded Visual C++ 4.0 - -At the moment, there is no project file available for eVC++ 4.0. -The process of creating new project file for WCELIBCEX is pretty easy, -so there should be no problem with creating it for eVC++ 4.0. -In case of problems, write to wcelibcex-devel@lists.sourceforge.net. - -Building the library - -1. Go to 'msvc80' directory -2. Open 'wcelibcex_lib.sln' project in Visual C++ 2005 IDE -3. From the main toolbar, select prefered 'Solution Configuration' - and 'Solution Platform' -4. Run Build -> Build Solution -5. If no errors occured, the library is ready to use diff --git a/contrib/libpoco/Foundation/wcelibcex-1.0/COPYING.txt b/contrib/libpoco/Foundation/wcelibcex-1.0/COPYING.txt deleted file mode 100644 index 3ea708b2e84..00000000000 --- a/contrib/libpoco/Foundation/wcelibcex-1.0/COPYING.txt +++ /dev/null @@ -1,9 +0,0 @@ -Note about WCELIBCEX files copyright. - -File copyright is held by a file author. - -Files created for the first version of the WCELIBCEX project are -copyrighted by (c) 2006 Taxus SI Ltd., http://www.taxussi.com.pl - -See comment in header of source files for more details. -See LICENSE.txt for license agreement. diff --git a/contrib/libpoco/Foundation/wcelibcex-1.0/LICENSE.txt b/contrib/libpoco/Foundation/wcelibcex-1.0/LICENSE.txt deleted file mode 100644 index a1a2d4ba177..00000000000 --- a/contrib/libpoco/Foundation/wcelibcex-1.0/LICENSE.txt +++ /dev/null @@ -1,24 +0,0 @@ -WCELIBCEX - Windows CE C Library Extensions - -The source code of the WCELIBCEX library is -licensed under MIT License: - -http://opensource.org/licenses/mit-license.php - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the "Software"), -to deal in the Software without restriction, including without limitation -the rights to use, copy, modify, merge, publish, distribute, sublicense, -and/or sell copies of the Software, and to permit persons to whom -the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included -in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH -THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/contrib/libpoco/Foundation/wcelibcex-1.0/README.txt b/contrib/libpoco/Foundation/wcelibcex-1.0/README.txt deleted file mode 100644 index 2d7892d6824..00000000000 --- a/contrib/libpoco/Foundation/wcelibcex-1.0/README.txt +++ /dev/null @@ -1,22 +0,0 @@ -$Id: README.txt 50 2007-01-08 12:16:50Z mloskot $ -------------------------------------------------------------------------------- -WCELIBCEX - Windows CE C Library Extensions -------------------------------------------------------------------------------- - -The WCELIBCEX is a package of C library extensions for Windows CE -operating system. It is a supplement to standard C library -available on Windows CE system. - -Project developer: Mateusz Loskot - -Homepage: http://sourceforge.net/projects/wcelibcex -Wiki: http://wcelibcex.sourceforge.net - -For details, check following files: -AUTHORS.txt - list of developers and contributors -LICENSE.txt - license agreement -COPYING.txt - copyright and provenience notice -BUILD.txt - building instructions - -Initial version of WCELIBCEX was founded and copyrighted by Taxus SI Ltd., -http://www.taxussi.com.pl diff --git a/contrib/libpoco/Foundation/wcelibcex-1.0/msvc80/wcelibcex.vsprops b/contrib/libpoco/Foundation/wcelibcex-1.0/msvc80/wcelibcex.vsprops deleted file mode 100644 index 85d5e0fe85d..00000000000 --- a/contrib/libpoco/Foundation/wcelibcex-1.0/msvc80/wcelibcex.vsprops +++ /dev/null @@ -1,15 +0,0 @@ - - - - - diff --git a/contrib/libpoco/Foundation/wcelibcex-1.0/src/errno.h b/contrib/libpoco/Foundation/wcelibcex-1.0/src/errno.h deleted file mode 100644 index 8b1b1103cda..00000000000 --- a/contrib/libpoco/Foundation/wcelibcex-1.0/src/errno.h +++ /dev/null @@ -1,49 +0,0 @@ -/* - * $Id: errno.h 20 2006-11-18 17:00:30Z mloskot $ - * - * errno.h - system error numbers - * - * Created by Mateusz Loskot (mateusz@loskot.net) - * - * Copyright (c) 2006 Mateusz Loskot (mateusz@loskot.net) - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom - * the Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included - * in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY - * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH - * THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - * - * MIT License: - * http://opensource.org/licenses/mit-license.php - * - */ -#ifndef WCEEX_ERRNO_WRAPPER_H -#define WCEEX_ERRNO_WRAPPER_H 1 - -/* - * Windows CE SDK does not provide errno.h file. - * In order to simplify usage of wce_errno.h extension, this header is provided. - * It directly includes wce_errno.h file. - */ - -#if !defined(_WIN32_WCE) -# error "Only Winddows CE target is supported!" -#else -# include "wce_errno.h" -#endif - - -#endif /* #ifndef WCEEX_ERRNO_WRAPPER_H */ - diff --git a/contrib/libpoco/Foundation/wcelibcex-1.0/src/fcntl.h b/contrib/libpoco/Foundation/wcelibcex-1.0/src/fcntl.h deleted file mode 100644 index f980a314eaf..00000000000 --- a/contrib/libpoco/Foundation/wcelibcex-1.0/src/fcntl.h +++ /dev/null @@ -1,48 +0,0 @@ -/* - * $Id$ - * - * fcntl.h - wrapper on wce_fcntl.h header - * - * Created by Mateusz Loskot (mateusz@loskot.net) - * - * Copyright (c) 2006 Mateusz Loskot (mateusz@loskot.net) - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom - * the Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included - * in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY - * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH - * THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - * - * MIT License: - * http://opensource.org/licenses/mit-license.php - * - */ -#ifndef WCEEX_FCNTL_WRAPPER_H -#define WCEEX_FCNTL_WRAPPER_H 1 - -/* - * Windows CE SDK does not provide fcntl.h file. - * In order to simplify usage of wce_fcntl.h extension, this header is provided. - * It directly includes wce_fcntl.h file. - */ - -#if !defined(_WIN32_WCE) -# error "Only Winddows CE target is supported!" -#else -# include "wce_fcntl.h" -#endif - - -#endif /* #ifndef WCEEX_FCNTL_WRAPPER_H */ diff --git a/contrib/libpoco/Foundation/wcelibcex-1.0/src/wce_abort.c b/contrib/libpoco/Foundation/wcelibcex-1.0/src/wce_abort.c deleted file mode 100644 index 3a5274c19d1..00000000000 --- a/contrib/libpoco/Foundation/wcelibcex-1.0/src/wce_abort.c +++ /dev/null @@ -1,62 +0,0 @@ -/* - * $Id: wce_abort.c,v 1.2 2006/04/09 16:48:18 mloskot Exp $ - * - * Defines abort() function. - * - * Created by Mateusz Loskot (mateusz@loskot.net) - * - * Copyright (c) 2006 Taxus SI Ltd. - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom - * the Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included - * in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY - * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH - * THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - * - * MIT License: - * http://opensource.org/licenses/mit-license.php - * - * Contact: - * Taxus SI Ltd. - * http://www.taxussi.com.pl - * - */ - -#include - -/******************************************************************************* -* wceex_abort - Generate abnormal process termination. -* -* Description: -* -* The abort() function shall cause abnormal process termination to occur. -* Internally, mkdir() function wraps TerminateProcess call from -* Windows CE API. -* -* Return: -* -* The abort() function shall not return.* -* -* Reference: -* -* IEEE 1003.1, 2004 Edition -* -*******************************************************************************/ -void wceex_abort(void) -{ - /* No return */ - TerminateProcess(GetCurrentProcess(), 0); -} - diff --git a/contrib/libpoco/Foundation/wcelibcex-1.0/src/wce_access.c b/contrib/libpoco/Foundation/wcelibcex-1.0/src/wce_access.c deleted file mode 100644 index 36e9f34fe98..00000000000 --- a/contrib/libpoco/Foundation/wcelibcex-1.0/src/wce_access.c +++ /dev/null @@ -1,101 +0,0 @@ -/* - * $Id: wce_access.c,v 1.0 2006/11/29 16:37:06 stephaned Exp $ - * - * Defines _access(), _waccess() functions. - * - * Created by Stphane Dunand (sdunand@sirap.fr) - * - * Copyright (c) 2006 Stphane Dunand - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom - * the Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included - * in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY - * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH - * THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - * - * MIT License: - * http://opensource.org/licenses/mit-license.php - * - */ - -#include -#include -#include - -/******************************************************************************* -* wceex_waccess - Determine file-access permission -* -* Description: -* -* Return: -* 0 if the file has the given mode -* 1 if the named file does not exist or is not accessible in the given mode -* and errno set as : -* EACCES file's permission setting does not allow specified access -* ENOENT filename or path not found -* -* Reference: -* -*******************************************************************************/ - -int wceex_waccess( const wchar_t *path, int mode ) -{ - SHFILEINFO fi; - if( !SHGetFileInfo( path, 0, &fi, sizeof(fi), SHGFI_ATTRIBUTES ) ) - { - errno = ENOENT; - return -1; - } - // existence ? - if( mode == 0 ) - return 0; - // write permission ? - if( mode & 2 ) - { - if( fi.dwAttributes & SFGAO_READONLY ) - { - errno = EACCES; - return -1; - } - } - return 0; -} - -/******************************************************************************* -* wceex_access - Determine file-access permission -* -* Description: -* -* Return: -* 0 if the file has the given mode -* 1 if the named file does not exist or is not accessible in the given mode -* and errno set as : -* EACCES file's permission setting does not allow specified access -* ENOENT filename or path not found -* -* Reference: -* -*******************************************************************************/ - -int wceex_access( const char *path, int mode ) -{ - wchar_t wpath[_MAX_PATH]; - if( !MultiByteToWideChar( CP_ACP, 0, path, -1, wpath, _MAX_PATH ) ) - { - errno = ENOENT; - return -1; - } - return wceex_waccess( wpath, mode ); -} diff --git a/contrib/libpoco/Foundation/wcelibcex-1.0/src/wce_asctime.c b/contrib/libpoco/Foundation/wcelibcex-1.0/src/wce_asctime.c deleted file mode 100644 index 542db263213..00000000000 --- a/contrib/libpoco/Foundation/wcelibcex-1.0/src/wce_asctime.c +++ /dev/null @@ -1,138 +0,0 @@ -/* - * $Id: wce_asctime.c,v 1.2 2006/04/09 16:48:18 mloskot Exp $ - * - * Defines asctime() function. - * - * Created by Mateusz Loskot (mateusz@loskot.net) - * - * Copyright (c) 2006 Taxus SI Ltd. - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom - * the Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included - * in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY - * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH - * THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - * - * MIT License: - * http://opensource.org/licenses/mit-license.php - * - * Contact: - * Taxus SI Ltd. - * http://www.taxussi.com.pl - * - */ - -#include -#include - -/******************************************************************************* -* Internal definitions -*******************************************************************************/ - -/* Buffer to store string representation of tm struct. */ -#define TIME_STRING_SIZE 26 - -/* Buffer to store string representation of tm struct. */ -static char __wce_asc_result[TIME_STRING_SIZE]; - -/* Format of string returned. */ -static const char __wce_asc_format[] = "%.3s %.3s %02d %.2d:%.2d:%.2d %d\n"; - - -/******************************************************************************* -* wceex_asctime - Convert date and time to a string -* -* Description: -* -* The asctime function converts the broken-down time value that -* brokentime points to into a string in a standard format: -* "Mon Jan 30 13:46:22 2006\n" -* -* The abbreviations for the days of week are: -* Sun, Mon, Tue, Wed, Thu, Fri, and Sat. -* -* The abbreviations for the months are: -* Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, and Dec. -* -* The asctime() is not required to be thread-safe. -* -* Reference: -* -* IEEE Std 1003.1-2001 -* The GNU C Library Manual -* -*******************************************************************************/ -char * wceex_asctime(const struct tm *tmbuff) -{ - return wceex_asctime_r(tmbuff, __wce_asc_result); -} - - -/******************************************************************************* -* wceex_asctime_r - Convert date and time to a string -* -* Description: -* -* This function is similar to asctime but instead of placing the result -* in a static buffer it writes the string in the buffer pointed to by -* the parameter buffer. This buffer should have room for at least 26 bytes, -* including the terminating null. -* -* The asctime_r() is not required to be thread-safe. -* -* Return value: -* -* Upon success the function returns a pointer to the string the result was written into. -* Otherwise return NULL. -* -* Reference: -* -* IEEE Std 1003.1-2001 -* The GNU C Library Manual -* -*******************************************************************************/ -char * wceex_asctime_r(const struct tm *tmbuff, char *buff) -{ - int res; - static char wday_short[7][3] = { - "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" - }; - static char mon_short[12][3] = { - "Jan", "Feb", "Mar", "Apr", "May", "Jun", - "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" - }; - - if (tmbuff == NULL) - { - // XXX - mloskot - set errno with EINVAL - return NULL; - } - - /* Format: "%.3s %.3s%3d %.2d:%.2d:%.2d %d\n" */ - res = sprintf(buff, __wce_asc_format, - wday_short[tmbuff->tm_wday], - mon_short[tmbuff->tm_mon], - tmbuff->tm_mday, - tmbuff->tm_hour, - tmbuff->tm_min, - tmbuff->tm_sec, - 1900 + tmbuff->tm_year); - - if (res < 0) - return NULL; - else - return buff; -} - diff --git a/contrib/libpoco/Foundation/wcelibcex-1.0/src/wce_bsearch.c b/contrib/libpoco/Foundation/wcelibcex-1.0/src/wce_bsearch.c deleted file mode 100644 index d61392ca96c..00000000000 --- a/contrib/libpoco/Foundation/wcelibcex-1.0/src/wce_bsearch.c +++ /dev/null @@ -1,90 +0,0 @@ -/* - * $Id: wce_bsearch.c 20 2006-11-18 17:00:30Z mloskot $ - * - * Defines bsearch() function. - * - * Created by Mateusz Loskot (mateusz@loskot.net) - * - * Copyright (c) 2006 Mateusz Loskot - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom - * the Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included - * in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY - * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH - * THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - * - * MIT License: - * http://opensource.org/licenses/mit-license.php - * - */ - -#include -#include -#include - -/******************************************************************************* -* wceex_bsearch - TODO -* -* Description: -* -* Return: -* -* -* Reference: -* IEEE 1003.1, 2004 Edition -*******************************************************************************/ - -void* wceex_bsearch(const void *key, const void *base, size_t num, size_t width, - int (*compare)(const void *, const void *)) -{ - size_t left; - size_t middle; - size_t right; - int res; - - /* input parameters validation */ - assert(key != NULL); - assert(base != NULL); - assert(compare != NULL); - - res = 0; - left = 0; - right = num - 1; - - while (left <= right) - { - middle = (left + right) / 2; - - res = compare(((char*) base + (width * middle)), key); - if (res > 0) - { - /* search from middle to left */ - right = middle - 1; - } - else if (res < 0) - { - /* search from middle to right */ - left = middle + 1; - } - else if (res == 0) - { - /* middle points to the key element. */ - return ((char*) base + (width * middle)); - } - } - - /* key not found */ - return NULL; -} \ No newline at end of file diff --git a/contrib/libpoco/Foundation/wcelibcex-1.0/src/wce_clock.c b/contrib/libpoco/Foundation/wcelibcex-1.0/src/wce_clock.c deleted file mode 100644 index b06c7553ef4..00000000000 --- a/contrib/libpoco/Foundation/wcelibcex-1.0/src/wce_clock.c +++ /dev/null @@ -1,87 +0,0 @@ -/* - * $Id: wce_clock.c 20 2006-11-18 17:00:30Z mloskot $ - * - * Defines clock() function. - * - * Created by hav (TODO: Full name of hav) - * - * Copyright (c) 2006 (TODO: Full name of hav) - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom - * the Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included - * in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY - * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH - * THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - * - * MIT License: - * http://opensource.org/licenses/mit-license.php - * - */ - -#include -#include - -/******************************************************************************* -* wceex_clock - report CPU time used -* -* Description: -* -* The clock() function shall return the implementation's best approximation to -* the processor time used by the process since the beginning of -* an implementation-defined era related only to the process invocation. -* -* Windows CE specific: -* CLOCKS_PER_SEC is defined in available in Windows CE SDK. -* -* Return value: -* -* To determine the time in seconds, the value returned by clock() should be -* divided by the value of the macro CLOCKS_PER_SEC. -* CLOCKS_PER_SEC is defined to be one million in . -* If the processor time used is not available or its value cannot be represented, -* the function shall return the value ( clock_t)-1. -* -* Reference: -* -* IEEE Std 1003.1-2001 -* The GNU C Library Manual -* -*******************************************************************************/ - - - -clock_t wceex_clock() -{ - __int64 ticks; - SYSTEMTIME stCurrent; - FILETIME ftCurrent; - - GetSystemTime(&stCurrent); - - if (SystemTimeToFileTime(&stCurrent, &ftCurrent)) - { - ticks = *(__int64*)&ftCurrent; - } - else - { - /* The processor time used is not available or - * its value cannot be represented. - */ - ticks = -1; - } - - return (clock_t)ticks; -} - diff --git a/contrib/libpoco/Foundation/wcelibcex-1.0/src/wce_ctime.c b/contrib/libpoco/Foundation/wcelibcex-1.0/src/wce_ctime.c deleted file mode 100644 index 5b95ca10b67..00000000000 --- a/contrib/libpoco/Foundation/wcelibcex-1.0/src/wce_ctime.c +++ /dev/null @@ -1,100 +0,0 @@ -/* - * $Id: wce_ctime.c,v 1.2 2006/04/09 16:48:18 mloskot Exp $ - * - * Defines ctime() function. - * - * Created by Mateusz Loskot (mateusz@loskot.net) - * - * Copyright (c) 2006 Taxus SI Ltd. - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom - * the Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included - * in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY - * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH - * THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - * - * MIT License: - * http://opensource.org/licenses/mit-license.php - * - * Contact: - * Taxus SI Ltd. - * http://www.taxussi.com.pl - * - */ - -#include -#include - -/******************************************************************************* -* wceex_ctime - Convert a time value to a date and time string -* -* Description: -* -* The ctime function is similar to asctime, except that you specify -* the calendar time argument as a time_t simple time value rather -* than in broken-down local time format. -* It shall be equivalent to: asctime(localtime(clock)) -* -* The ctime() is not required to be thread-safe. -* -* Windows CE specific: -* ctime does not set the variable tzname. -* -* Reference: -* -* IEEE Std 1003.1-2001 -* The GNU C Library Manual -* -*******************************************************************************/ -char * wceex_ctime(const time_t *timer) -{ - return wceex_asctime(wceex_localtime(timer)); -} - - -/******************************************************************************* -* wceex_ctime_r - Convert a time value to a date and time string -* -* Description: -* -* This function is similar to ctime, but places the result in the string -* pointed to by buffer. -* -* The ctime() is not required to be thread-safe. -* -* Windows CE specific: -* ctime does not set the variable tzname. -* -* Return value: -* -* Upon success the function returns a pointer to the string the result was written into. -* Otherwise return NULL. -* -* Reference: -* -* IEEE Std 1003.1-2001 -* The GNU C Library Manual -* -*******************************************************************************/ -char * wceex_ctime_r(const time_t *timer, char *buf) -{ - /* - XXX - mloskot - it's waiting for localtime_r function. - - ({ struct tm tm; asctime_r (localtime_r (time, &tm), buf); }) - */ - return NULL; -} - diff --git a/contrib/libpoco/Foundation/wcelibcex-1.0/src/wce_direct.h b/contrib/libpoco/Foundation/wcelibcex-1.0/src/wce_direct.h deleted file mode 100644 index a6749134757..00000000000 --- a/contrib/libpoco/Foundation/wcelibcex-1.0/src/wce_direct.h +++ /dev/null @@ -1,58 +0,0 @@ -/* - * $Id: wce_direct.h,v 1.0 2006/11/29 16:38:05 stephaned Exp $ - * - * Created by Stphane Dunand (sdunand@sirap.fr) - * - * Copyright (c) 2006 Stphane Dunand - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom - * the Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included - * in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY - * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH - * THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - * - * MIT License: - * http://opensource.org/licenses/mit-license.php - * - */ -#ifndef WCEEX_DIRECT_H -#define WCEEX_DIRECT_H 1 - -#if !defined(_WIN32_WCE) -# error "Only Windows CE target is supported!" -#endif - -#include - -#ifdef __cplusplus -extern "C" { -#endif /* __cplusplus */ - -int wceex_wmkdir( const wchar_t* dirname ); - -char* wceex_getcwd( char *buffer, int maxlen ); -wchar_t* wceex_wgetcwd( wchar_t *buffer, int maxlen ); - -int wceex_chdir( const char *dirname ); -int wceex_wchdir( const wchar_t *dirname ); - -DWORD wceex_GetCurrentDirectoryW( DWORD nBufferLength, LPWSTR lpBuffer ); - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - -#endif /* #ifndef WCEEX_DIRECT_H */ - diff --git a/contrib/libpoco/Foundation/wcelibcex-1.0/src/wce_directorymanagement.c b/contrib/libpoco/Foundation/wcelibcex-1.0/src/wce_directorymanagement.c deleted file mode 100644 index ad88d63ce51..00000000000 --- a/contrib/libpoco/Foundation/wcelibcex-1.0/src/wce_directorymanagement.c +++ /dev/null @@ -1,227 +0,0 @@ -/* - * $Id: wce_directorymanagement.c,v 1.0 2006/11/29 17:00:28 stephaned Exp $ - * - * Defines _getcwd(), GetCurrentDirectoryW() _wgetcwd(), - * _chdir(), _wchdir functions. - * - * Created by Stphane Dunand (sdunand@sirap.fr) - * - * Copyright (c) 2006 Stphane Dunand - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom - * the Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included - * in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY - * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH - * THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - * - * MIT License: - * http://opensource.org/licenses/mit-license.php - * - */ - -#include -#include -#include -#include - -/******************************************************************************* -* InitCwd - Init the current directory with the path for the file used to create -* the calling process -* -* Description: -* -* Return: -* -* Reference: -* -*******************************************************************************/ - -static wchar_t Cwd[_MAX_PATH] = { '\0' }; - -static int InitCwd() -{ - if( Cwd[0] ) - return 0; - if( !GetModuleFileName( NULL, Cwd, _MAX_PATH ) ) - return errno = GetLastError(); - else - { - wchar_t* slash = wcsrchr( Cwd, '\\' ); - if( !slash ) - slash = wcsrchr( Cwd, '/' ); - if( slash ) - { - if( slash == Cwd ) - slash++; - *slash = 0; - } - return 0; - } -} - -/******************************************************************************* -* wceex_getcwd - Get the current working directory -* -* Description: -* -* Return: -* -* Reference: -* -*******************************************************************************/ - -char* wceex_getcwd( char *buffer, int maxlen ) -{ - if( !buffer && (buffer = (char*)malloc(maxlen)) == NULL ) - { - errno = ENOMEM; - return NULL; - } - if( InitCwd() ) - return NULL; - if( !WideCharToMultiByte( CP_ACP, 0, Cwd, -1, buffer, maxlen, NULL, NULL ) ) - { - errno = GetLastError(); - return NULL; - } - return buffer; -} - -/******************************************************************************* -* wceex_GetCurrentDirectoryW - Get the current working directory -* -* Description: -* -* Return: -* -* Reference: -* -*******************************************************************************/ - -DWORD wceex_GetCurrentDirectoryW( DWORD nBufferLength, LPWSTR lpBuffer ) -{ - *lpBuffer = 0; - if( InitCwd() ) - { - SetLastError( errno ); - return 0; - } - else - { - size_t slen = wcslen( Cwd ); - if( slen >= (size_t)nBufferLength ) - return slen + 1; - wcscpy( lpBuffer, Cwd ); - return slen; - } -} - -/******************************************************************************* -* wceex_wgetcwd - Get the current working directory -* -* Description: -* -* Return: -* -* Reference: -* -*******************************************************************************/ - -wchar_t* wceex_wgetcwd( wchar_t *buffer, int maxlen ) -{ - if( !buffer && (buffer = (wchar_t*)malloc(maxlen * sizeof(wchar_t))) == NULL ) - { - errno = ENOMEM; - return NULL; - } - else - { - DWORD slen = wceex_GetCurrentDirectoryW( maxlen, buffer ); - if( !slen ) - return NULL; - if( slen >= (DWORD)maxlen ) - { - errno = ERANGE; - return NULL; - } - return buffer; - } -} - -/******************************************************************************* -* wceex_wchdir - Change the current working directory -* -* Description: -* -* Return: -* -* Reference: -* -*******************************************************************************/ - -int wceex_wchdir( const wchar_t *dirname ) -{ - if( !dirname || *dirname == 0 ) - { - errno = ENOENT; - return -1; - } - else - { - SHFILEINFO fi; - if( !SHGetFileInfo( dirname, 0, &fi, sizeof(fi), SHGFI_ATTRIBUTES ) ) - { - errno = ENOENT; - return -1; - } - if( !(fi.dwAttributes & SFGAO_FOLDER) ) - { - errno = ENOENT; - return -1; - } - wcscpy( Cwd, dirname ); - return 0; - } -} - -/******************************************************************************* -* wceex_chdir - Change the current working directory -* -* Description: -* -* Return: -* -* Reference: -* -*******************************************************************************/ - -int wceex_chdir( const char *dirname ) -{ - if( !dirname || *dirname == 0 ) - { - errno = ENOENT; - return -1; - } - else - { - wchar_t wdirname[_MAX_PATH]; - if( !MultiByteToWideChar( CP_ACP, 0, dirname, -1, wdirname, _MAX_PATH ) ) - { - errno = ENOENT; - return -1; - } - return wceex_wchdir( wdirname ); - } -} diff --git a/contrib/libpoco/Foundation/wcelibcex-1.0/src/wce_errno.c b/contrib/libpoco/Foundation/wcelibcex-1.0/src/wce_errno.c deleted file mode 100644 index 0e6b1a8c94c..00000000000 --- a/contrib/libpoco/Foundation/wcelibcex-1.0/src/wce_errno.c +++ /dev/null @@ -1,42 +0,0 @@ -/* - * $Id: wce_errno.c,v 1.1 2006/02/19 22:04:53 mloskot Exp $ - * - * Global errno variable. - * - * Created by Mateusz Loskot (mateusz@loskot.net) - * - * Copyright (c) 2006 Taxus SI Ltd. - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom - * the Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included - * in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY - * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH - * THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - * - * MIT License: - * http://opensource.org/licenses/mit-license.php - * - * Contact: - * Taxus SI Ltd. - * http://www.taxussi.com.pl - * - */ - -/* - * XXX - mloskot - errno is required to be thread-safe - */ - -int errno; - diff --git a/contrib/libpoco/Foundation/wcelibcex-1.0/src/wce_errno.h b/contrib/libpoco/Foundation/wcelibcex-1.0/src/wce_errno.h deleted file mode 100644 index 290acd4fc4f..00000000000 --- a/contrib/libpoco/Foundation/wcelibcex-1.0/src/wce_errno.h +++ /dev/null @@ -1,105 +0,0 @@ -/* - * $Id: wce_errno.h,v 1.2 2006/04/09 16:48:18 mloskot Exp $ - * - * errno.h - system error numbers - * - * Created by Mateusz Loskot (mateusz@loskot.net) - * - * Copyright (c) 2006 Taxus SI Ltd. - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom - * the Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included - * in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY - * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH - * THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - * - * MIT License: - * http://opensource.org/licenses/mit-license.php - * - * Contact: - * Taxus SI Ltd. - * http://www.taxussi.com.pl - * - */ -#ifndef WCEEX_ERRNO_H -#define WCEEX_ERRNO_H 1 - -#if !defined(_WIN32_WCE) -# error "Only Winddows CE target is supported!" -#endif - - -#ifdef __cplusplus -extern "C" { -#endif /* __cplusplus */ - - -/* -#if defined(_MT) -# error "errno as global variable does not work with multi threads" -#endif -*/ -/* XXX - mloskot - make it thread-safe by calling (*_errno()) */ -extern int errno; - - -/* Error Codes */ - -#define EPERM 1 -#define ENOENT 2 -#define ESRCH 3 -#define EINTR 4 -#define EIO 5 -#define ENXIO 6 -#define E2BIG 7 -#define ENOEXEC 8 -#define EBADF 9 -#define ECHILD 10 -#define EAGAIN 11 -#define ENOMEM 12 -#define EACCES 13 -#define EFAULT 14 -#define EBUSY 16 -#define EEXIST 17 -#define EXDEV 18 -#define ENODEV 19 -#define ENOTDIR 20 -#define EISDIR 21 -#define EINVAL 22 -#define ENFILE 23 -#define EMFILE 24 -#define ENOTTY 25 -#define EFBIG 27 -#define ENOSPC 28 -#define ESPIPE 29 -#define EROFS 30 -#define EMLINK 31 -#define EPIPE 32 -#define EDOM 33 -#define ERANGE 34 -#define EDEADLK 36 -#define ENAMETOOLONG 38 -#define ENOLCK 39 -#define ENOSYS 40 -#define ENOTEMPTY 41 -#define EILSEQ 42 - - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - -#endif /* #ifndef WCEEX_ERRNO_H */ - diff --git a/contrib/libpoco/Foundation/wcelibcex-1.0/src/wce_fcntl.h b/contrib/libpoco/Foundation/wcelibcex-1.0/src/wce_fcntl.h deleted file mode 100644 index 47af3aa946d..00000000000 --- a/contrib/libpoco/Foundation/wcelibcex-1.0/src/wce_fcntl.h +++ /dev/null @@ -1,79 +0,0 @@ -/* - * $Id: wce_fcntl.h 20 2006-11-18 17:00:30Z mloskot $ - * - * fcntl.h - file control options - * - * Created by Mateusz Loskot (mateusz@loskot.net) - * - * Copyright (c) 2006 Mateusz Loskot - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom - * the Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included - * in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY - * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH - * THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - * - * MIT License: - * http://opensource.org/licenses/mit-license.php - * - */ -#ifndef WCEEX_FCNTL_H -#define WCEEX_FCNTL_H 1 - -#if !defined(_WIN32_WCE) -# error "Only Windows CE target is supported!" -#endif - -/* File control flags and functions - * - * Implementation based on the Open Group Base Specifications Issue 6, - * IEEE Std 1003.1, 2004 Edition - * - * Windows CE Notes: - * - * Mostly, these flags are not used, but defined to feed compiler. - * Also, some programs (ie. libtiff) translate textual file flags (r, rw, etc.) - * file control flags. - * Functions fcntl() and open() are not implemented. - */ - -/* File creation flags */ - -#define O_CREAT 0x0100 /* Open or create file if it does not exist. */ -#define O_EXCL 0x0200 /* Exclusive file use. */ -#define O_NOCTTY 0x0400 /* Do not assign controlling terminal. */ -#define O_TRUNC 0x1000 /* Open and truncate file. */ - -/* File access and status flags */ - -#define O_RDONLY 0x0000 /* Open for read only. */ -#define O_WRONLY 0x0001 /* Open for write only. */ -#define O_RDWR 0x0002 /* Open for reading and writing. */ -#define O_APPEND 0x2000 /* Set append mode. */ - - -#ifdef __cplusplus -extern "C" { -#endif /* __cplusplus */ - - - - - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - -#endif /* #ifndef WCEEX_FCNTL_H */ \ No newline at end of file diff --git a/contrib/libpoco/Foundation/wcelibcex-1.0/src/wce_findfile.c b/contrib/libpoco/Foundation/wcelibcex-1.0/src/wce_findfile.c deleted file mode 100644 index 525b0d19569..00000000000 --- a/contrib/libpoco/Foundation/wcelibcex-1.0/src/wce_findfile.c +++ /dev/null @@ -1,183 +0,0 @@ -/* - * $Id: wce_findfile.c,v 1.2 2006/04/09 16:48:18 mloskot Exp $ - * - * Defines functions to find files. - * - * Created by Mateusz Loskot (mateusz@loskot.net) - * - * Copyright (c) 2006 Taxus SI Ltd. - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom - * the Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included - * in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY - * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH - * THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - * - * MIT License: - * http://opensource.org/licenses/mit-license.php - * - * Contact: - * Taxus SI Ltd. - * http://www.taxussi.com.pl - * - */ - -#include -#include -#include - -/******************************************************************************* -* wceex_findclose - XXX -* -* Description: -* -* XXX -* -* Return: -* -* XXX -* -* Reference: -* -* IEEE 1003.1, 2004 Edition -* -*******************************************************************************/ -int wceex_findclose(intptr_t hFile) -{ - if(!FindClose((HANDLE)hFile)) - { - //errno = EINVAL; - return (-1); - } - return (0); - -} - -/******************************************************************************* -* wceex_findfirst - XXX -* -* Description: -* -* XXX -* -* Return: -* -* XXX -* -* Reference: -* -* IEEE 1003.1, 2004 Edition -* -*******************************************************************************/ -intptr_t wceex_findfirst(const char *filespec, struct _finddata_t *fileinfo) -{ - WIN32_FIND_DATA wfd; - HANDLE hFile; - DWORD err; - wchar_t wfilename[MAX_PATH]; - - mbstowcs(wfilename, filespec, strlen(filespec) + 1); - - /* XXX - mloskot - set errno values! */ - - hFile = FindFirstFile(wfilename, &wfd); - if(hFile == INVALID_HANDLE_VALUE) - { - err = GetLastError(); - switch (err) - { - case ERROR_NO_MORE_FILES: - case ERROR_FILE_NOT_FOUND: - case ERROR_PATH_NOT_FOUND: - //errno = ENOENT; - break; - - case ERROR_NOT_ENOUGH_MEMORY: - //errno = ENOMEM; - break; - - default: - //errno = EINVAL; - break; - } - return (-1); - } - - fileinfo->attrib = (wfd.dwFileAttributes == FILE_ATTRIBUTE_NORMAL) ? 0 : wfd.dwFileAttributes; - fileinfo->time_create = wceex_filetime_to_time(&wfd.ftCreationTime); - fileinfo->time_access = wceex_filetime_to_time(&wfd.ftLastAccessTime); - fileinfo->time_write = wceex_filetime_to_time(&wfd.ftLastWriteTime); - - fileinfo->size = wfd.nFileSizeLow; - wcstombs(fileinfo->name, wfd.cFileName, wcslen(wfd.cFileName) + 1); - - return (intptr_t)hFile; -} - -/******************************************************************************* -* wceex_findnext - XXX -* -* Description: -* -* XXX -* -* Return: -* -* XXX -* -* Reference: -* -* IEEE 1003.1, 2004 Edition -* -*******************************************************************************/ -int wceex_findnext(intptr_t handle, struct _finddata_t *fileinfo) -{ - WIN32_FIND_DATA wfd; - DWORD err; - - /* XXX - mloskot - set errno values! */ - - if (!FindNextFile((HANDLE)handle, &wfd)) - { - err = GetLastError(); - switch (err) { - case ERROR_NO_MORE_FILES: - case ERROR_FILE_NOT_FOUND: - case ERROR_PATH_NOT_FOUND: - //errno = ENOENT; - break; - - case ERROR_NOT_ENOUGH_MEMORY: - //errno = ENOMEM; - break; - - default: - //errno = EINVAL; - break; - } - return (-1); - } - - fileinfo->attrib = (wfd.dwFileAttributes == FILE_ATTRIBUTE_NORMAL)? 0 : wfd.dwFileAttributes; - fileinfo->time_create = wceex_filetime_to_time(&wfd.ftCreationTime); - fileinfo->time_access = wceex_filetime_to_time(&wfd.ftLastAccessTime); - fileinfo->time_write = wceex_filetime_to_time(&wfd.ftLastWriteTime); - - fileinfo->size = wfd.nFileSizeLow; - wcstombs(fileinfo->name, wfd.cFileName, wcslen(wfd.cFileName)+1); - - return 0; -} - diff --git a/contrib/libpoco/Foundation/wcelibcex-1.0/src/wce_getenv.c b/contrib/libpoco/Foundation/wcelibcex-1.0/src/wce_getenv.c deleted file mode 100644 index 181fa828c69..00000000000 --- a/contrib/libpoco/Foundation/wcelibcex-1.0/src/wce_getenv.c +++ /dev/null @@ -1,53 +0,0 @@ -/* - * $Id: wce_getenv.c 20 2006-11-18 17:00:30Z mloskot $ - * - * Defines getenv() function with dummy implementation. - * - * Created by Mateusz Loskot (mloskot@loskot.net) - * - * Copyright (c) 2006 Mateusz Loskot (mloskot@loskot.net) - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom - * the Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included - * in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY - * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH - * THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - * - * MIT License: - * http://opensource.org/licenses/mit-license.php - * - */ - - -/******************************************************************************* -* wceex_getenv - dummy getenv() function -* -* Description: -* -* There is no concept of environment variable in Windows CE operating system. -* This function acts as a dummy compilation enabler and ALWAYS returns NULL. -* -* Return: -* -* The wceex_getenv() function ALWAYS returns NULL.* -* -*******************************************************************************/ - -#include - -char* wceex_getenv(const char* varname) -{ - return NULL; -} diff --git a/contrib/libpoco/Foundation/wcelibcex-1.0/src/wce_getopt.c b/contrib/libpoco/Foundation/wcelibcex-1.0/src/wce_getopt.c deleted file mode 100644 index 9875985dacd..00000000000 --- a/contrib/libpoco/Foundation/wcelibcex-1.0/src/wce_getopt.c +++ /dev/null @@ -1,154 +0,0 @@ -/* - * $Id$ - * - * Copyright (c) 1987, 1993, 1994 - * The Regents of the University of California. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. Neither the name of the University nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ -#if 0 -static char sccsid[] = "@(#)getopt.c 8.3 (Berkeley) 4/27/95"; -__RCSID("$NetBSD: getopt.c,v 1.26 2003/08/07 16:43:40 agc Exp $"); -#endif - -#include -#include - -/* - * Declared in - */ -char *optarg; /* argument associated with option */ -int opterr = 1; /* if error message should be printed */ -int optind = 1; /* index into parent argv vector */ -int optopt; /* character checked for validity */ - -int optreset; /* reset getopt */ - -#define BADCH (int)'?' -#define BADARG (int)':' -#define EMSG "" - -/******************************************************************************* -* wceex_getopt - function is a command-line parser -* -* Description: -* -* The parameters argc and argv are the argument count and argument array as -* passed to main(). The argument optstring is a string of recognised option -* characters. If a character is followed by a colon, the option takes an argument. -* -* The variable optind is the index of the next element of the argv[] vector to be -* processed. It is initialised to 1 by the system, and getopt() updates it when it -* finishes with each element of argv[]. -* -* NOTE: Implementation of the getopt() function was grabbed from NetBSD -* operating system sources. See copyright note in the file header. -* -* Return: -* -* Returns the next option character specified on the command line. -* A colon (:) is returned if getopt() detects a missing argument and -* the first character of optstring was a colon (:). -* A question mark (?) is returned if getopt() encounters an option -* character not in optstring or detects a missing argument and the first -* character of optstring was not a colon (:). -* Otherwise getopt() returns -1 when all command line options are parsed. -* -* Reference: -* -* IEEE 1003.1, 2004 Edition -* -*******************************************************************************/ - -int wceex_getopt(int argc, char * const argv[], const char *optstring) -{ - static char *place = EMSG; /* option letter processing */ - char *oli; /* option letter list index */ - - if (optreset || *place == 0) { /* update scanning pointer */ - optreset = 0; - place = argv[optind]; - if (optind >= argc || *place++ != '-') { - /* Argument is absent or is not an option */ - place = EMSG; - return (-1); - } - optopt = *place++; - if (optopt == '-' && *place == 0) { - /* "--" => end of options */ - ++optind; - place = EMSG; - return (-1); - } - if (optopt == 0) { - /* Solitary '-', treat as a '-' option - if the program (eg su) is looking for it. */ - place = EMSG; - if (strchr(optstring, '-') == NULL) - return -1; - optopt = '-'; - } - } else - optopt = *place++; - - /* See if option letter is one the caller wanted... */ - if (optopt == ':' || (oli = strchr(optstring, optopt)) == NULL) { - if (*place == 0) - ++optind; - if (opterr && *optstring != ':') - (void)fprintf(stderr, - "unknown option -- %c\n", optopt); - return (BADCH); - } - - /* Does this option need an argument? */ - if (oli[1] != ':') { - /* don't need argument */ - optarg = NULL; - if (*place == 0) - ++optind; - } else { - /* Option-argument is either the rest of this argument or the - entire next argument. */ - if (*place) - optarg = place; - else if (argc > ++optind) - optarg = argv[optind]; - else { - /* option-argument absent */ - place = EMSG; - if (*optstring == ':') - return (BADARG); - if (opterr) - (void)fprintf(stderr, - "option requires an argument -- %c\n", - optopt); - return (BADCH); - } - place = EMSG; - ++optind; - } - return (optopt); /* return option letter */ -} diff --git a/contrib/libpoco/Foundation/wcelibcex-1.0/src/wce_gettimeofday.c b/contrib/libpoco/Foundation/wcelibcex-1.0/src/wce_gettimeofday.c deleted file mode 100644 index 0b33e734a21..00000000000 --- a/contrib/libpoco/Foundation/wcelibcex-1.0/src/wce_gettimeofday.c +++ /dev/null @@ -1,83 +0,0 @@ -/* - * $Id$ - * - * Defines gettimeofday function. - * - * Author of first version (timeval.h): by Wu Yongwei - * Author of Windows CE version: Mateusz Loskot (mateusz@loskot.net) - * - * All code here is considered in the public domain though we do wish our names - * could be retained if anyone uses them. - */ - -#define WIN32_LEAN_AND_MEAN -#include -#include -#include - -/******************************************************************************* -* wceex_gettimeofday - get the date and time -* -* Description: -* -* The gettimeofday() function shall obtain the current time, -* expressed as seconds and microseconds since the Epoch, -* and store it in the timeval structure pointed to by tp. -* The resolution of the system clock is unspecified. -* -* Return value: -* -* The gettimeofday() function shall return 0 and -* no value shall be reserved to indicate an error. -* -* Reference: -* -* IEEE Standard and an Open Group Technical Standard 1003.1, 2004 Edition -* -*******************************************************************************/ - -int wceex_gettimeofday(struct timeval *tp, struct timezone *tzp) -{ - SYSTEMTIME st; - FILETIME ft; - LARGE_INTEGER li; - TIME_ZONE_INFORMATION tzi; - __int64 t; - static int tzflag; - - if (NULL != tp) - { - GetSystemTime(&st); - SystemTimeToFileTime(&st, &ft); - li.LowPart = ft.dwLowDateTime; - li.HighPart = ft.dwHighDateTime; - t = li.QuadPart; /* In 100-nanosecond intervals */ - t -= EPOCHFILETIME; /* Offset to the Epoch time */ - t /= 10; /* In microseconds */ - tp->tv_sec = (long)(t / 1000000); - tp->tv_usec = (long)(t % 1000000); - } - - if (NULL != tzp) - { - GetTimeZoneInformation(&tzi); - - tzp->tz_minuteswest = tzi.Bias; - if (tzi.StandardDate.wMonth != 0) - { - tzp->tz_minuteswest += tzi.StandardBias * 60; - } - - if (tzi.DaylightDate.wMonth != 0) - { - tzp->tz_dsttime = 1; - } - else - { - tzp->tz_dsttime = 0; - } - } - - return 0; -} - diff --git a/contrib/libpoco/Foundation/wcelibcex-1.0/src/wce_io.h b/contrib/libpoco/Foundation/wcelibcex-1.0/src/wce_io.h deleted file mode 100644 index aeccb7ba536..00000000000 --- a/contrib/libpoco/Foundation/wcelibcex-1.0/src/wce_io.h +++ /dev/null @@ -1,110 +0,0 @@ -/* - * $Id: wce_io.h,v 1.2 2006/04/09 16:48:18 mloskot Exp $ - * - * io.h - file handling functions - * - * Created by Mateusz Loskot (mateusz@loskot.net) - * - * Copyright (c) 2006 Taxus SI Ltd. - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom - * the Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included - * in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY - * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH - * THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - * - * MIT License: - * http://opensource.org/licenses/mit-license.php - * - * Contact: - * Taxus SI Ltd. - * http://www.taxussi.com.pl - * - */ -#ifndef WCEEX_IO_H -#define WCEEX_IO_H 1 - -#if !defined(_WIN32_WCE) -# error "Only Winddows CE target is supported!" -#endif - -#include -#include - -#ifdef __cplusplus -extern "C" { -#endif /* __cplusplus */ - - -/******************************************************************************* - I/O Types and Structures -*******************************************************************************/ - -#ifndef _INTPTR_T_DEFINED -typedef long intptr_t; -# define _INTPTR_T_DEFINED -#endif - -#ifndef _FSIZE_T_DEFINED -typedef unsigned long fsize_t; -# define _FSIZE_T_DEFINED -#endif - -#define MAX_PATH 260 - -#ifndef _FINDDATA_T_DEFINED -struct _finddata_t -{ - unsigned attrib; /* File attributes */ - time_t time_create; /* -1L for FAT file systems */ - time_t time_access; /* -1L for FAT file systems */ - time_t time_write; /* Time of last modification */ - fsize_t size; /* Size of file in bytes */ - char name[MAX_PATH]; /* Name of file witout complete path */ -}; -# define _FINDDATA_T_DEFINED -#endif - -/* File attribute constants for _findfirst() */ - -/* XXX - mloskot - macra IS_xxx */ -#define _A_NORMAL 0x00 /* Normal file - No read/write restrictions */ -#define _A_RDONLY 0x01 /* Read only file */ -#define _A_HIDDEN 0x02 /* Hidden file */ -#define _A_SYSTEM 0x04 /* System file */ -#define _A_SUBDIR 0x10 /* Subdirectory */ -#define _A_ARCH 0x20 /* Archive file */ - - -/******************************************************************************* - I/O Functions -*******************************************************************************/ - -intptr_t wceex_findfirst(const char *filespec, struct _finddata_t *fileinfo); -int wceex_findnext(intptr_t handle, struct _finddata_t *fileinfo); -int wceex_findclose(intptr_t hFile); - -/******************************************************************************* - File-access permission functions -*******************************************************************************/ - -int wceex_waccess( const wchar_t *path, int mode ); -int wceex_access( const char *path, int mode ); - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - -#endif /* #ifndef WCEEX_IO_H */ diff --git a/contrib/libpoco/Foundation/wcelibcex-1.0/src/wce_lfind.c b/contrib/libpoco/Foundation/wcelibcex-1.0/src/wce_lfind.c deleted file mode 100644 index a4da2216922..00000000000 --- a/contrib/libpoco/Foundation/wcelibcex-1.0/src/wce_lfind.c +++ /dev/null @@ -1,81 +0,0 @@ -/* - * $Id: wce_lfind.c 20 2006-11-18 17:00:30Z mloskot $ - * - * Defines lfind() function. - * - * Created by Mateusz Loskot (mloskot@loskot.net) - * - * Implementation of this function was taken from LibTIFF - * project, http://www.remotesensing.org/libtiff/ - * The copyright note below has been copied without any changes. - * - * Copyright (c) 1989, 1993 - * The Regents of the University of California. All rights reserved. - * - * This code is derived from software contributed to Berkeley by - * Roger L. Snyder. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. Neither the name of the University nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -#include -#include -#include - -/******************************************************************************* -* wceex_lfind - TODO -* -* Description: -* -* Return: -* -* Reference: -* IEEE 1003.1, 2004 Edition -*******************************************************************************/ - -void* wceex_lfind(const void *key, const void *base, size_t *nmemb, size_t size, - int(*compar)(const void *, const void *)) -{ - char *element, *end; - - assert(key != NULL); - assert(base != NULL); - assert(compar != NULL); - - element = NULL; - end = (char *)base + (*nmemb * size); - - for (element = (char *)base; element < end; element += size) - { - if (!compar(element, key)) - { - /* key found */ - return element; - } - } - - return NULL; -} - diff --git a/contrib/libpoco/Foundation/wcelibcex-1.0/src/wce_localtime.c b/contrib/libpoco/Foundation/wcelibcex-1.0/src/wce_localtime.c deleted file mode 100644 index b6f50de2a51..00000000000 --- a/contrib/libpoco/Foundation/wcelibcex-1.0/src/wce_localtime.c +++ /dev/null @@ -1,228 +0,0 @@ -/* - * $Id: wce_localtime.c,v 1.2 2006/04/09 16:48:18 mloskot Exp $ - * - * Defines localtime() function. - * - * Created by Mateusz Loskot (mateusz@loskot.net) - * - * Copyright (c) 2006 Taxus SI Ltd. - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom - * the Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included - * in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY - * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH - * THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - * - * MIT License: - * http://opensource.org/licenses/mit-license.php - * - * Contact: - * Taxus SI Ltd. - * http://www.taxussi.com.pl - * - */ - -#include -#include -#include - -/******************************************************************************* - Constants and macros used internally -*******************************************************************************/ - -#define SECS_PER_MIN 60 -#define MINS_PER_HOUR 60 -#define HOURS_PER_DAY 24 -#define DAYS_PER_WEEK 7 -#define DAYS_PER_NYEAR 365 -#define DAYS_PER_LYEAR 366 -#define SECS_PER_HOUR (SECS_PER_MIN * MINS_PER_HOUR) -#define SECS_PER_DAY ((long) SECS_PER_HOUR * HOURS_PER_DAY) -#define MONS_PER_YEAR 12 - -#define TM_SUNDAY 0 -#define TM_MONDAY 1 -#define TM_TUESDAY 2 -#define TM_WEDNESDAY 3 -#define TM_THURSDAY 4 -#define TM_FRIDAY 5 -#define TM_SATURDAY 6 - -#define TM_JANUARY 0 -#define TM_FEBRUARY 1 -#define TM_MARCH 2 -#define TM_APRIL 3 -#define TM_MAY 4 -#define TM_JUNE 5 -#define TM_JULY 6 -#define TM_AUGUST 7 -#define TM_SEPTEMBER 8 -#define TM_OCTOBER 9 -#define TM_NOVEBER 10 -#define TM_DECEMBER 11 -#define TM_SUNDAY 0 - -#define TM_YEAR_BASE 1900 - -#define EPOCH_YEAR 1970 -#define EPOCH_WDAY TM_THURSDAY - -#define isleap(y) (((y) % 4) == 0 && ((y) % 100) != 0 || ((y) % 400) == 0) - -/******************************************************************************* - Local time functions -*******************************************************************************/ - -struct tm * __wceex_offtime(const time_t *timer, long tzoffset); - -/******************************************************************************* -* wceex_localtime - Convert time_t value to tm struct. -* -* Description: -* Use offset as difference in seconds between local time and UTC time. -* -*******************************************************************************/ -struct tm * wceex_localtime(const time_t *timer) -{ - register struct tm *tmp; - - long tzoffset; - TIME_ZONE_INFORMATION tzi; - - // Retrive timezone offset in seconds - tzoffset = 0; - if (GetTimeZoneInformation(&tzi) != 0xFFFFFFFF) - { - tzoffset += (tzi.Bias * 60); - if (tzi.StandardDate.wMonth != 0) - { - tzoffset += (tzi.StandardBias * 60); - } - } - - tzoffset *= -1; - tmp = __wceex_offtime(timer, tzoffset); - - return tmp; -} - -/******************************************************************************* -* wceex_gmtime - Convert time_t value to tm struct. -* -* Description: -* This function is similar to localtime, except that the broken-down -* time is expressed as Coordinated Universal Time (UTC) -* rather than relative to a local time zone. -* -*******************************************************************************/ -struct tm * wceex_gmtime(const time_t *timer) -{ - register struct tm *tmp; - - tmp = __wceex_offtime(timer, 0L); - - return tmp; -} - -/******************************************************************************* -* __wceex_offtime - Convert time_t value to tm struct. -* -* Description: -* Use offset as difference in seconds between local time and UTC time. -* -*******************************************************************************/ -static int mon_lengths[2][MONS_PER_YEAR] = -{ - 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31, - 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 -}; - -static int year_lengths[2] = { DAYS_PER_NYEAR, DAYS_PER_LYEAR }; - - -struct tm * __wceex_offtime(const time_t *timer, long tzoffset) -{ - register struct tm *tmp; - register long days; - register long rem; - register int y; - register int yleap; - register int *ip; - static struct tm tm; - - tmp = &tm; - days = *timer / SECS_PER_DAY; - rem = *timer % SECS_PER_DAY; - rem += tzoffset; - while (rem < 0) - { - rem += SECS_PER_DAY; - --days; - } - - while (rem >= SECS_PER_DAY) - { - rem -= SECS_PER_DAY; - ++days; - } - tmp->tm_hour = (int) (rem / SECS_PER_HOUR); - - rem = rem % SECS_PER_HOUR; - tmp->tm_min = (int) (rem / SECS_PER_MIN); - tmp->tm_sec = (int) (rem % SECS_PER_MIN); - tmp->tm_wday = (int) ((EPOCH_WDAY + days) % DAYS_PER_WEEK); - - if (tmp->tm_wday < 0) - tmp->tm_wday += DAYS_PER_WEEK; - - y = EPOCH_YEAR; - - if (days >= 0) - { - for ( ; ; ) - { - yleap = isleap(y); - if (days < (long) year_lengths[yleap]) - break; - - ++y; - days = days - (long) year_lengths[yleap]; - } - } - else - { - do - { - --y; - yleap = isleap(y); - days = days + (long) year_lengths[yleap]; - } while (days < 0); - } - - tmp->tm_year = y - TM_YEAR_BASE; - tmp->tm_yday = (int) days; - ip = mon_lengths[yleap]; - - for (tmp->tm_mon = 0; days >= (long) ip[tmp->tm_mon]; ++(tmp->tm_mon)) - { - days = days - (long) ip[tmp->tm_mon]; - } - - tmp->tm_mday = (int) (days + 1); - tmp->tm_isdst = 0; - - return tmp; -} - diff --git a/contrib/libpoco/Foundation/wcelibcex-1.0/src/wce_mkdir.c b/contrib/libpoco/Foundation/wcelibcex-1.0/src/wce_mkdir.c deleted file mode 100644 index 3f6b8e67103..00000000000 --- a/contrib/libpoco/Foundation/wcelibcex-1.0/src/wce_mkdir.c +++ /dev/null @@ -1,112 +0,0 @@ -/* - * $Id: wce_mkdir.c,v 1.3 2006/04/09 16:48:18 mloskot Exp $ - * - * Defines wmkdir, mkdir() functions. - * - * Created by Mateusz Loskot (mateusz@loskot.net) - * - * Copyright (c) 2006 Taxus SI Ltd. - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom - * the Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included - * in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY - * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH - * THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - * - * MIT License: - * http://opensource.org/licenses/mit-license.php - * - * Contact: - * Taxus SI Ltd. - * http://www.taxussi.com.pl - * - */ - -#include -#include - -/******************************************************************************* -* wceex_mkdir - Make a directory. -* -* Description: -* -* The mkdir() function shall create a new directory with name path. -* Internally, mkdir() function wraps CreateDirectory call from -* Windows CE API. -* -* Return: -* -* Upon successful completion, mkdir() shall return 0. -* Otherwise, -1 shall be returned, no directory shall be created, -* and errno shall be set with the error returned by CreateDirectory. -* -* Reference: -* IEEE 1003.1, 2004 Edition -*******************************************************************************/ -int wceex_mkdir(const char *filename) -{ - int res; - size_t len; - wchar_t *widestr; - - /* Covert filename buffer to Unicode. */ - len = MultiByteToWideChar (CP_ACP, 0, filename, -1, NULL, 0) ; - widestr = (wchar_t*)malloc(sizeof(wchar_t) * len); - - MultiByteToWideChar( CP_ACP, 0, filename, -1, widestr, len); - - /* Delete file using Win32 CE API call */ - res = CreateDirectory(widestr, NULL); - - /* Free wide-char string */ - free(widestr); - - if (res) - return 0; /* success */ - else - { - errno = GetLastError(); - return -1; - } -} - -/******************************************************************************* -* wceex_mkdir - Make a directory. -* -* Description: -* -* The wmkdir() function shall create a new directory with name path. -* Internally, wmkdir() function wraps CreateDirectory call from -* Windows CE API. -* -* Return: -* -* Upon successful completion, wmkdir() shall return 0. -* Otherwise, -1 shall be returned, no directory shall be created, -* and errno shall be set with the error returned by CreateDirectory. -* -* Reference: -* IEEE 1003.1, 2004 Edition -*******************************************************************************/ - -int wceex_wmkdir( const wchar_t* dirname ) -{ - if( !CreateDirectory( dirname, NULL ) ) - { - errno = GetLastError(); - return -1; - } - return 0; -} diff --git a/contrib/libpoco/Foundation/wcelibcex-1.0/src/wce_mktime.c b/contrib/libpoco/Foundation/wcelibcex-1.0/src/wce_mktime.c deleted file mode 100644 index 180a2c1c16d..00000000000 --- a/contrib/libpoco/Foundation/wcelibcex-1.0/src/wce_mktime.c +++ /dev/null @@ -1,155 +0,0 @@ -/* - * $Id: wce_mktime.c,v 1.2 2006/04/09 16:48:18 mloskot Exp $ - * - * Defines functions to convert struct tm to time_t value. - * - * Created by Mateusz Loskot (mateusz@loskot.net) - * - * Copyright (c) 2006 Taxus SI Ltd. - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom - * the Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included - * in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY - * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH - * THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - * - * MIT License: - * http://opensource.org/licenses/mit-license.php - * - * Contact: - * Taxus SI Ltd. - * http://www.taxussi.com.pl - * - */ - -#include -#include - -/* Function used intenally to convert struct tm to a time_t value. */ -static time_t __wceex_mktime_internal(struct tm *tmbuff, time_t _loctime_offset); - -/******************************************************************************* -* wceex_mktime - Convert local time to calendar value in seconds since epoch. -*******************************************************************************/ -time_t wceex_mktime(struct tm *tmbuff) -{ - time_t offset; - TIME_ZONE_INFORMATION tzi; - - offset = 0; - - // Retrive timezone offset in seconds - if (GetTimeZoneInformation(&tzi) != 0xFFFFFFFF) - { - offset += (tzi.Bias * 60); - if (tzi.StandardDate.wMonth != 0) - { - offset += (tzi.StandardBias * 60); - } - } - - return __wceex_mktime_internal(tmbuff, offset); -} - - -/******************************************************************************* -* wceex_gmmktime - Get Unix timestamp for a GMT date -* -* Description: -* Given a struct tm representing a calendar time in UTC, convert it to -* seconds since epoch. -* Note that this function does not canonicalize the provided -* struct tm, nor does it allow out of range values or years before 1970. -* The tm struct values of tm_wday and tm_yday are ignored. -* -* Return: -* Value of time if success, otherwise (time_t)-1 is returned. -* -*******************************************************************************/ -time_t wceex_gmmktime(struct tm *tmbuff) -{ - return __wceex_mktime_internal(tmbuff, 0); -} - -/******************************************************************************* -* __wceex_mktime_internal - Convert struct tm to a time_t value. -* -* Description: -* Use offset as difference in seconds between local time and UTC time. -* -/*******************************************************************************/ - -/* The number of days in each month. */ -#define MONTHS_NUMBER 12 - -static const int MONTHDAYS[] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; - -static time_t __wceex_mktime_internal(struct tm *tmbuff, time_t _loctime_offset) -{ - time_t tres; - int doy; - int i; - - /* We do allow some ill-formed dates, but we don't do anything special - with them and our callers really shouldn't pass them to us. Do - explicitly disallow the ones that would cause invalid array accesses - or other algorithm problems. */ - if (tmbuff->tm_mon < 0 || tmbuff->tm_mon > 11 || tmbuff->tm_year < (EPOCH_YEAR - TM_YEAR_BASE)) - { - return (time_t) -1; - } - - /* Convert calender time to a time_t value. */ - tres = 0; - - /* Sum total amount of days from the Epoch with respect to leap years. */ - for (i = EPOCH_YEAR; i < tmbuff->tm_year + TM_YEAR_BASE; i++) - { - tres += 365 + IS_LEAP_YEAR(i); - } - - /* Add days of months before current month. */ - doy = 0; - for (i = 0; i < tmbuff->tm_mon; i++) - { - doy += MONTHDAYS[i]; - } - tres += doy; - - /* Day of year */ - tmbuff->tm_yday = doy + tmbuff->tm_mday; - - if (tmbuff->tm_mon > 1 && IS_LEAP_YEAR(tmbuff->tm_year + TM_YEAR_BASE)) - { - tres++; - } - - /* Add days of current month and convert to total to hours. */ - tres = 24 * (tres + tmbuff->tm_mday - 1) + tmbuff->tm_hour; - - /* Add minutes part and convert total to minutes. */ - tres = 60 * tres + tmbuff->tm_min; - - /* Add seconds part and convert total to seconds. */ - tres = 60 * tres + tmbuff->tm_sec; - - /* For offset > 0 adjust time value for timezone - given as local to UTC time difference in seconds). */ - tres += _loctime_offset; - - return tres; -} - - diff --git a/contrib/libpoco/Foundation/wcelibcex-1.0/src/wce_path.c b/contrib/libpoco/Foundation/wcelibcex-1.0/src/wce_path.c deleted file mode 100644 index 28ecd56c4ca..00000000000 --- a/contrib/libpoco/Foundation/wcelibcex-1.0/src/wce_path.c +++ /dev/null @@ -1,479 +0,0 @@ -/* - * $Id: wce_path.c,v 1.0 2006/11/29 16:56:01 sdunand Exp $ - * - * Defines _splitpath, _wsplitpath, _makepath, _wmakepath, - * wceex_GetFullPathNameW, _fullpath, _wfullpath functions - * - * Created by Stphane Dunand (sdunand@sirap.fr) - * - * Copyright (c) 2006 Stphane Dunand - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom - * the Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included - * in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY - * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH - * THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - * - * MIT License: - * http://opensource.org/licenses/mit-license.php - * - */ - -#include -#include -#include -#include - -/******************************************************************************* -* wceex_splitpath -* -* Description: -* Break a path name into components. -* -* Return: -* -* Reference: -* -*******************************************************************************/ - -void wceex_splitpath( const char *path, - char *drive, char *dir, char *name, char *ext ) -{ - char *slash, *bslash; - if( drive ) - *drive = 0; - if( dir ) - *dir = 0; - if( name ) - *name = 0; - if( ext ) - *ext = 0; - if( !path || *path == 0 ) - return; - slash = strrchr( path, '/' ); - bslash = strrchr( path, '\\' ); - if( slash > bslash ) - bslash = slash; - if( bslash ) - { - if( dir ) - { - size_t count = (bslash - path); - if( count >= _MAX_DIR ) - count = _MAX_DIR - 1; - strncat( dir, path, count ); - } - bslash++; - } - else - bslash = (char*)path; - if( name ) - { - char* dot; - strncat( name, bslash, _MAX_FNAME - 1 ); - dot = strrchr( name, '.' ); - if( dot ) - *dot = 0; - } - if( ext ) - { - char* dot = strrchr( bslash, '.' ); - if( dot ) - strncat( ext, dot, _MAX_EXT - 1 ); - } -} - -/******************************************************************************* -* wceex_wsplitpath -* -* Description: -* Break a path name into components. -* -* Return: -* -* Reference: -* -*******************************************************************************/ - -void wceex_wsplitpath( const wchar_t *path, - wchar_t *drive, wchar_t *dir, wchar_t *name, wchar_t *ext ) -{ - wchar_t *slash, *bslash; - if( drive ) - *drive = 0; - if( dir ) - *dir = 0; - if( name ) - *name = 0; - if( ext ) - *ext = 0; - if( !path || *path == 0 ) - return; - slash = wcsrchr( path, '/' ); - bslash = wcsrchr( path, '\\' ); - if( slash > bslash ) - bslash = slash; - if( bslash ) - { - if( dir ) - { - size_t count = (bslash - path) / sizeof(wchar_t); - if( count >= _MAX_DIR ) - count = _MAX_DIR - 1; - wcsncat( dir, path, count ); - } - bslash++; - } - else - bslash = (wchar_t*)path; - if( name ) - { - wchar_t* dot; - wcsncat( name, bslash, _MAX_FNAME - 1 ); - dot = wcsrchr( name, '.' ); - if( dot ) - *dot = 0; - } - if( ext ) - { - wchar_t* dot = wcsrchr( bslash, '.' ); - if( dot ) - wcsncat( ext, dot, _MAX_EXT - 1 ); - } -} - -/******************************************************************************* -* wceex_makepath -* -* Description: -* Create a path name from components -* -* Return: -* -* Reference: -* -*******************************************************************************/ - -void wceex_makepath( char *path, - const char *drive, const char *dir, - const char *name, const char *ext ) -{ - char* ptr = path; - size_t slen, sbuf = _MAX_PATH - 1; - *path = 0; - if( drive && *drive ) - { - strncat( ptr, drive, sbuf ); - slen = strlen( ptr ); - ptr += slen; - sbuf -= slen; - } - if( dir && *dir && sbuf ) - { - strncat( ptr, dir, sbuf ); - slen = strlen( ptr ); - ptr += slen - 1; - sbuf -= slen; - // backslash ? - if( sbuf && *ptr != '\\' && *ptr != '/' ) - { - char* slash = strchr( path, '/' ); - if( !slash ) - slash = strchr( path, '\\' ); - ptr++; - if( slash ) - *ptr = *slash; - else - *ptr = '\\'; - ptr++; - *ptr = 0; - sbuf--; - } - ptr++; - } - if( name && *name && sbuf ) - { - strncat( ptr, name, sbuf ); - slen = strlen( ptr ); - ptr += slen; - sbuf -= slen; - } - if( ext && *ext && sbuf ) - { - if( *ext != '.' ) - { - *ptr = '.'; - ptr++; - *ptr = 0; - sbuf--; - } - if( sbuf ) - strncat( ptr, ext, sbuf ); - } -} - -/******************************************************************************* -* wceex_wmakepath -* -* Description: -* Create a path name from components -* -* Return: -* -* Reference: -* -*******************************************************************************/ - -void wceex_wmakepath( wchar_t *path, - const wchar_t *drive, const wchar_t *dir, - const wchar_t *name, const wchar_t *ext ) -{ - wchar_t* ptr = path; - size_t slen, sbuf = _MAX_PATH - 1; - *path = 0; - if( drive && *drive ) - { - wcsncat( ptr, drive, sbuf ); - slen = wcslen( ptr ); - ptr += slen; - sbuf -= slen; - } - if( dir && *dir && sbuf ) - { - wcsncat( ptr, dir, sbuf ); - slen = wcslen( ptr ); - ptr += slen - 1; - sbuf -= slen; - // backslash ? - if( sbuf && *ptr != '\\' && *ptr != '/' ) - { - wchar_t* slash = wcschr( path, '/' ); - if( !slash ) - slash = wcschr( path, '\\' ); - ptr++; - if( slash ) - *ptr = *slash; - else - *ptr = '\\'; - ptr++; - *ptr = 0; - sbuf--; - } - ptr++; - } - if( name && *name && sbuf ) - { - wcsncat( ptr, name, sbuf ); - slen = wcslen( ptr ); - ptr += slen; - sbuf -= slen; - } - if( ext && *ext && sbuf ) - { - if( *ext != '.' ) - { - *ptr = '.'; - ptr++; - *ptr = 0; - sbuf--; - } - if( sbuf ) - wcsncat( ptr, ext, sbuf ); - } -} - -/******************************************************************************* -* wceex_GetFullPathNameW -* -* Description: -* retrieves the full path and file name of a specified file. -* -* Return: -* -* Reference: -* -*******************************************************************************/ - -DWORD wceex_GetFullPathNameW( LPCWSTR lpFileName, DWORD nBufferLength, - LPWSTR lpBuffer, LPWSTR *lpFilePart ) -{ - int up = 0, down = 0; - size_t len_tot, len_buf = 0; - LPWSTR file; - - // reference to current working directory ? - if( wcsncmp( lpFileName, L".\\", 2 ) == 0 ) - down = 1; - else if( wcsncmp( lpFileName, L"./", 2 ) == 0 ) - down = 2; - if( wcsncmp( lpFileName, L"..\\", 3 ) == 0 ) - up = 1; - else if( wcsncmp( lpFileName, L"../", 3 ) == 0 ) - up = 2; - if( down || up ) - { - LPWSTR last; - len_buf = wceex_GetCurrentDirectoryW( nBufferLength, lpBuffer ); - if( !len_buf ) - return 0; - // backslash at the end ? - last = lpBuffer + len_buf - 1; - if( *last != '\\' && *last != '/' ) - { - // test sufficient buffer before add - len_buf++; - if( len_buf >= nBufferLength ) - return len_buf + wcslen( lpFileName ) + 1; - last++; - if( down == 1 || up == 1 ) - *last = '\\'; - else - *last = '/'; - *(last + 1) = 0; - } - if( down ) - { - lpBuffer = last + 1; - lpFileName += 2; - } - else if( up ) - { - LPWSTR fname = (LPWSTR)lpFileName; - for(;;) - { - // root ? - if( last == lpBuffer ) - { - errno = ERROR_BAD_PATHNAME; - return 0; - } - // erase last backslash - *last = 0; - // parent directory - if( up == 1 ) - last = wcsrchr( lpBuffer, '\\' ); - else - last = wcsrchr( lpBuffer, '/' ); - if( !last ) - { - errno = ERROR_BAD_PATHNAME; - return 0; - } - *(last + 1) = 0; - // next parent directory ? - fname += 3; - if( up == 1 ) - { - if( wcsncmp( fname, L"..\\", 3 ) ) - break; - } - else - { - if( wcsncmp( fname, L"../", 3 ) ) - break; - } - } - len_buf = wcslen( lpBuffer ); - lpBuffer = last + 1; - lpFileName = fname; - } - } - len_tot = len_buf + wcslen( lpFileName ); - if( len_tot >= nBufferLength ) - return len_tot + 1; - wcscpy( lpBuffer, lpFileName ); - // delimiter of file name ? - file = wcsrchr( lpBuffer, '\\' ); - if( !file ) - file = wcsrchr( lpBuffer, '/' ); - if( file ) - { - file++; - if( *file == 0 ) - *lpFilePart = NULL; - else - *lpFilePart = file; - } - else - *lpFilePart = lpBuffer; - return len_tot; -} - -/******************************************************************************* -* wceex_wfullpath -* -* Description: -* Create an absolute or full path name for the specified relative path name. -* -* Return: -* -* Reference: -* -*******************************************************************************/ - -wchar_t* wceex_wfullpath( wchar_t *absPath, const wchar_t *relPath, size_t maxLength ) -{ - wchar_t* lpFilePart; - DWORD ret = wceex_GetFullPathNameW( relPath, maxLength, absPath, &lpFilePart ); - if( !ret || ret > maxLength ) - { - *absPath = 0; - return NULL; - } - return absPath; -} - -/******************************************************************************* -* wceex_fullpath -* -* Description: -* Create an absolute or full path name for the specified relative path name. -* -* Return: -* -* Reference: -* -*******************************************************************************/ - -char* wceex_fullpath( char *absPath, const char *relPath, size_t maxLength ) -{ - wchar_t wrelPath[_MAX_PATH*2], *wabsPath, *wret; - if( !MultiByteToWideChar( CP_ACP, 0, relPath, -1, wrelPath, _MAX_PATH*2 ) ) - { - errno = ENOMEM; - *absPath = 0; - return NULL; - } - if( (wabsPath = (wchar_t*)malloc( maxLength * sizeof(wchar_t) )) == NULL ) - { - errno = ENOMEM; - *absPath = 0; - return NULL; - } - wret = wceex_wfullpath( wabsPath, wrelPath, maxLength ); - if( wret && !WideCharToMultiByte( CP_ACP, 0, wabsPath, -1, absPath, - maxLength, NULL, NULL ) ) - { - errno = GetLastError(); - wret = NULL; - } - free( wabsPath ); - if( !wret ) - { - *absPath = 0; - return NULL; - } - return absPath; -} diff --git a/contrib/libpoco/Foundation/wcelibcex-1.0/src/wce_rename.c b/contrib/libpoco/Foundation/wcelibcex-1.0/src/wce_rename.c deleted file mode 100644 index a9029f0f2a6..00000000000 --- a/contrib/libpoco/Foundation/wcelibcex-1.0/src/wce_rename.c +++ /dev/null @@ -1,91 +0,0 @@ -/* - * $Id: wce_rename.c,v 1.3 2006/04/09 16:48:18 mloskot Exp $ - * - * Defines rename() function. - * - * Created by Mateusz Loskot (mateusz@loskot.net) - * - * Copyright (c) 2006 Taxus SI Ltd. - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom - * the Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included - * in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY - * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH - * THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - * - * MIT License: - * http://opensource.org/licenses/mit-license.php - * - * Contact: - * Taxus SI Ltd. - * http://www.taxussi.com.pl - * - */ - -#include - -/******************************************************************************* -* wceex_rename - rename a file -* -* Description: -* -* The rename() function changes the name of a file. -* The oldfile argument points to the pathname of the file to be renamed. -* The newfile argument points to the new pathname of the file. -* -* XXX - mloskot - function does not set errno value yet. -* -* Return: -* -* Upon successful completion, rename() returns 0. Otherwise, -1 is returned. -* -* Reference: -* -* IEEE 1003.1, 2004 Edition -* -*******************************************************************************/ -int wceex_rename(const char *oldfile, const char *newfile) -{ - int res; - size_t lenold; - size_t lennew; - wchar_t *wsold; - wchar_t *wsnew; - - /* Covert filename buffer to Unicode. */ - - /* Old filename */ - lenold = MultiByteToWideChar (CP_ACP, 0, oldfile, -1, NULL, 0) ; - wsold = (wchar_t*)malloc(sizeof(wchar_t) * lenold); - MultiByteToWideChar( CP_ACP, 0, oldfile, -1, wsold, lenold); - - /* New filename */ - lennew = MultiByteToWideChar (CP_ACP, 0, newfile, -1, NULL, 0) ; - wsnew = (wchar_t*)malloc(sizeof(wchar_t) * lennew); - MultiByteToWideChar(CP_ACP, 0, newfile, -1, wsnew, lennew); - - /* Delete file using Win32 CE API call */ - res = MoveFile(wsold, wsnew); - - /* Free wide-char string */ - free(wsold); - free(wsnew); - - if (res) - return 0; /* success */ - else - return -1; -} - diff --git a/contrib/libpoco/Foundation/wcelibcex-1.0/src/wce_rewind.c b/contrib/libpoco/Foundation/wcelibcex-1.0/src/wce_rewind.c deleted file mode 100644 index 175ce183445..00000000000 --- a/contrib/libpoco/Foundation/wcelibcex-1.0/src/wce_rewind.c +++ /dev/null @@ -1,100 +0,0 @@ -/* - * $Id: wce_rewind.c,v 1.2 2006/04/09 16:48:18 mloskot Exp $ - * - * Defines rewind() function. - * - * Created by Mateusz Loskot (mateusz@loskot.net) - * - * Copyright (c) 2006 Taxus SI Ltd. - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom - * the Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included - * in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY - * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH - * THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - * - * MIT License: - * http://opensource.org/licenses/mit-license.php - * - * Contact: - * Taxus SI Ltd. - * http://www.taxussi.com.pl - * - */ - -#include -#include - -/******************************************************************************* -* wceex_rewind - Reset the file position indicator in a stream -* -* Description: -* -* The call rewind(stream) shall be equivalent to: -* (void) fseek(stream, 0L, SEEK_SET) -* -* Internally, rewind() function uses SetFilePointer call from -* Windows CE API. -* -* Windows CE specific: -* On Windows CE HANDLE type is defined as typedef void *HANDLE -* and FILE type is declared as typedef void FILE. -* -* Return: -* -* No return value. -* -* Reference: -* -* IEEE 1003.1, 2004 Edition -* -*******************************************************************************/ -void wceex_rewind(FILE * fp) -{ - int ret; - - /* TODO - mloskot: WARNING! - * fseek() does not clear error and end-of-file indicators for the stream - * So, that's why dirty asserts are used to get informed about potential problems. - */ - ret = fseek(fp, 0L, SEEK_SET); - - assert(0 == ret); - assert(0 == ferror(fp)); - assert(!feof(fp)); - - /* - - // XXX - mloskot: - // FILE* to HANDLE conversion needs hacks like _get_osfhandle() - // which are not available on Windows CE. - // Simple cast does not work. - // - // TODO: Does anyone know how to convert FILE* to HANDLE? - - DWORD dwError; - HANDLE hFile; - - hFile = (void*)fp; - - if (0xFFFFFFFF == SetFilePointer(hFile, 0, NULL, FILE_BEGIN)) - { - dwError = GetLastError(); - assert(NO_ERROR == dwError); - } - - */ -} - diff --git a/contrib/libpoco/Foundation/wcelibcex-1.0/src/wce_rmdir.c b/contrib/libpoco/Foundation/wcelibcex-1.0/src/wce_rmdir.c deleted file mode 100644 index 02d2bb3dc82..00000000000 --- a/contrib/libpoco/Foundation/wcelibcex-1.0/src/wce_rmdir.c +++ /dev/null @@ -1,92 +0,0 @@ -/* - * $Id: wce_rmdir.c,v 1.3 2006/04/09 16:48:18 mloskot Exp $ - * - * Defines rmdir() function. - * - * Created by Mateusz Loskot (mateusz@loskot.net) - * - * Copyright (c) 2006 Taxus SI Ltd. - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom - * the Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included - * in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY - * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH - * THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - * - * MIT License: - * http://opensource.org/licenses/mit-license.php - * - * Contact: - * Taxus SI Ltd. - * http://www.taxussi.com.pl - * - */ - -#include -#include -#include - -/******************************************************************************* -* wceex_rmdir - Remove empty directory from filesystem. -* -* Description: -* -* The rmdir() function shall remove a directory whose name is given by path. -* The directory shall be removed only if it is an empty directory. -* Internally, mkdir() function wraps RemoveDirectory call from -* Windows CE API. -* -* Return: -* -* Upon successful completion, rmdir() shall return 0. -* Otherwise, -1 shall be returned. If -1 is returned, the named directory -* shall not be changed. -* -* XXX - mloskot - errno is not set - todo. -* -* Reference: -* -* IEEE 1003.1, 2004 Edition -* -*******************************************************************************/ -int wceex_rmdir(const char *filename) -{ - int res; - size_t len; - wchar_t *widestr; - - /* Covert filename buffer to Unicode. */ - len = MultiByteToWideChar (CP_ACP, 0, filename, -1, NULL, 0) ; - widestr = (wchar_t*)malloc(sizeof(wchar_t) * len); - MultiByteToWideChar( CP_ACP, 0, filename, -1, widestr, len); - - /* Delete file using Win32 CE API call */ - res = RemoveDirectory(widestr); - - /* Free wide-char string */ - free(widestr); - - /* XXX - Consider following recommendations: */ - /* XXX - mloskot - update the st_ctime and st_mtime fields of the parent directory. */ - /* XXX - mloskot - set errno to [EEXIST] or [ENOTEMPTY] if function failed. */ - - if (res) - return 0; /* success */ - else - return -1; - -} - - diff --git a/contrib/libpoco/Foundation/wcelibcex-1.0/src/wce_setlocale.c b/contrib/libpoco/Foundation/wcelibcex-1.0/src/wce_setlocale.c deleted file mode 100644 index e2bcf9a6a32..00000000000 --- a/contrib/libpoco/Foundation/wcelibcex-1.0/src/wce_setlocale.c +++ /dev/null @@ -1,56 +0,0 @@ -/* - * $Id: wce_setlocale.c 20 2006-11-18 17:00:30Z mloskot $ - * - * Defines setlocale() function with dummy implementation. - * - * Created by Mateusz Loskot (mloskot@loskot.net) - * - * Copyright (c) 2006 Mateusz Loskot (mloskot@loskot.net) - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom - * the Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included - * in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY - * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH - * THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - * - * MIT License: - * http://opensource.org/licenses/mit-license.php - * - */ - - -/******************************************************************************* -* wceex_setlocale - dummy setlocale() function -* -* Description: -* -* C library on Windows CE includes file with prototype of -* setlocale() function but no implementation is available. -* -* Currently, wceex_setlocale() function does not provide any implementation. -* It does ALWAYS return empty string. -* -* TODO: Consider to implement working version of setlocale() based on -* GetLocaleInfo and SetLocaleInfo() calls from Windows CE API. -* Return: -* -* The wceex_setlocale() function ALWAYS returns empty string.* -* -*******************************************************************************/ - -char* wceex_setlocale(int category, const char* locale) -{ - return ""; -} diff --git a/contrib/libpoco/Foundation/wcelibcex-1.0/src/wce_stat.c b/contrib/libpoco/Foundation/wcelibcex-1.0/src/wce_stat.c deleted file mode 100644 index ff5b621f3a1..00000000000 --- a/contrib/libpoco/Foundation/wcelibcex-1.0/src/wce_stat.c +++ /dev/null @@ -1,233 +0,0 @@ -/* - * $Id: wce_stat.c,v 1.2 2006/04/09 16:48:18 mloskot Exp $ - * - * Defines stat() function. - * - * Created by Mateusz Loskot (mateusz@loskot.net) - * - * Copyright (c) 2006 Taxus SI Ltd. - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom - * the Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included - * in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY - * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH - * THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - * - * MIT License: - * http://opensource.org/licenses/mit-license.php - * - * Contact: - * Taxus SI Ltd. - * http://www.taxussi.com.pl - * - */ - -#include -#include -#include -#include - -/******************************************************************************* -* Forward declarations. -********************************************************************************/ - -/* Return mode of file. */ -static unsigned short __wceex_get_file_mode(const char* name, int attr); - - -/******************************************************************************* -* wceex_stat - Get file attributes for file and store them in buffer. -* -* Description: -* -* File times on Windows CE: Windows CE object store keeps track of only -* one time, the time the file was last written to. -* -* Return value: -* -* Upon successful completion, 0 shall be returned. -* Otherwise, -1 shall be returned and errno set to indicate the error. -* -* XXX - mloskot - errno is not yet implemented -* -* Reference: -* IEEE Std 1003.1, 2004 Edition -* -*******************************************************************************/ -int wceex_stat(const char* filename, struct stat *buffer) -{ - HANDLE findhandle; - WIN32_FIND_DATA findbuf; - wchar_t pathWCE[MAX_PATH]; - - //Don't allow wildcards to be interpreted by system - if(strpbrk(filename, "?*")) - //if(wcspbrk(path, L"?*")) - { - //errno = ENOENT; - return(-1); - } - - //search file/dir - mbstowcs(pathWCE, filename, strlen(filename) + 1); - findhandle = FindFirstFile(pathWCE, &findbuf); - if(findhandle == INVALID_HANDLE_VALUE) - { - //is root - if(_stricmp(filename, ".\\")==0) - { - findbuf.dwFileAttributes = FILE_ATTRIBUTE_DIRECTORY; - - //dummy values - findbuf.nFileSizeHigh = 0; - findbuf.nFileSizeLow = 0; - findbuf.cFileName[0] = '\0'; - - buffer->st_mtime = wceex_local_to_time_r(1980 - TM_YEAR_BASE, 0, 1, 0, 0, 0); - buffer->st_atime = buffer->st_mtime; - buffer->st_ctime = buffer->st_mtime; - } - - //treat as an error - else - { - //errno = ENOENT; - return(-1); - } - } - else - { - /* File is found*/ - - SYSTEMTIME SystemTime; - FILETIME LocalFTime; - - //Time of last modification - if(!FileTimeToLocalFileTime( &findbuf.ftLastWriteTime, &LocalFTime) || - !FileTimeToSystemTime(&LocalFTime, &SystemTime)) - { - //errno = ::GetLastError(); - FindClose( findhandle ); - return( -1 ); - } - - buffer->st_mtime = wceex_local_to_time(&SystemTime); - - //Time od last access of file - if(findbuf.ftLastAccessTime.dwLowDateTime || findbuf.ftLastAccessTime.dwHighDateTime) - { - if(!FileTimeToLocalFileTime(&findbuf.ftLastAccessTime, &LocalFTime) || - !FileTimeToSystemTime(&LocalFTime, &SystemTime)) - { - //errno = ::GetLastError(); - FindClose( findhandle ); - return( -1 ); - } - buffer->st_atime = wceex_local_to_time(&SystemTime); - } - else - { - buffer->st_atime = buffer->st_mtime; - } - - - //Time of creation of file - if(findbuf.ftCreationTime.dwLowDateTime || findbuf.ftCreationTime.dwHighDateTime) - { - if(!FileTimeToLocalFileTime(&findbuf.ftCreationTime, &LocalFTime) || - !FileTimeToSystemTime(&LocalFTime, &SystemTime)) - { - //errno = ::GetLastError(); - FindClose( findhandle ); - return( -1 ); - } - buffer->st_ctime = wceex_local_to_time(&SystemTime); - } - else - { - buffer->st_ctime = buffer->st_mtime; - } - - //close handle - FindClose(findhandle); - } - - //file mode - buffer->st_mode = __wceex_get_file_mode(filename, findbuf.dwFileAttributes); - - //file size - buffer->st_size = findbuf.nFileSizeLow; - - //drive letter 0 - buffer->st_rdev = buffer->st_dev = 0; - - //set the common fields - buffer->st_gid = 0; - buffer->st_ino = 0; - buffer->st_uid = 0; - - //1 dla nlink - buffer->st_nlink = 1; - - - return 0; -} - -/******************************************************************************* -* Return mode of file. -********************************************************************************/ - -/* Test path for presence of slach at the end. */ -#define IS_SLASH(a) ((a) =='\\' || (a) == '/') - -#define __DOSMODE_MASK 0xff - -static unsigned short __wceex_get_file_mode(const char* filename, int attr) -{ - unsigned short file_mode; - unsigned mode; - const char *p; - - mode = attr & __DOSMODE_MASK; - - /* XXX - mloskot - remove it */ - if ((p = filename)[1] == ':') - p += 2; - - /* Check to see if this is a directory. */ - file_mode = (unsigned short) - (((IS_SLASH(*p) && !p[1]) || (mode & FILE_ATTRIBUTE_DIRECTORY) || !*p) - ? S_IFDIR | S_IEXEC : S_IFREG); - - /* Check if attribute byte does have read-only bit, otherwise it is read-write. */ - file_mode |= (mode & FILE_ATTRIBUTE_READONLY) ? S_IREAD : (S_IREAD | S_IWRITE); - - /* See if file appears to be executable by the extension. */ - if (p = strrchr(filename, '.')) - { - if (!_stricmp(p, ".exe") || - !_stricmp(p, ".cmd") || - !_stricmp(p, ".bat") || - !_stricmp(p, ".com")) - file_mode |= S_IEXEC; - } - - /* Propagate user read/write/execute bits to group/other fields. */ - file_mode |= (file_mode & 0700) >> 3; - file_mode |= (file_mode & 0700) >> 6; - - return(file_mode); -} - diff --git a/contrib/libpoco/Foundation/wcelibcex-1.0/src/wce_stat.h b/contrib/libpoco/Foundation/wcelibcex-1.0/src/wce_stat.h deleted file mode 100644 index 7954dff7628..00000000000 --- a/contrib/libpoco/Foundation/wcelibcex-1.0/src/wce_stat.h +++ /dev/null @@ -1,142 +0,0 @@ -/* - * $Id: wce_stat.h,v 1.2 2006/04/09 16:48:18 mloskot Exp $ - * - * sys/stat.h - data returned by the stat() function - * - * Created by Mateusz Loskot (mateusz@loskot.net) - * - * Copyright (c) 2006 Taxus SI Ltd. - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom - * the Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included - * in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY - * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH - * THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - * - * MIT License: - * http://opensource.org/licenses/mit-license.php - * - * Contact: - * Taxus SI Ltd. - * http://www.taxussi.com.pl - * - */ -#ifndef WCEEX_STAT_H -#define WCEEX_STAT_H 1 - -#if !defined(_WIN32_WCE) -# error "Only Winddows CE target is supported!" -#endif - - -#include - -#ifdef __cplusplus -extern "C" { -#endif /* __cplusplus */ - -#ifndef _STAT_T_DEFINED -struct stat -{ - /* Drive number of the disk containing the file (same as st_rdev). */ - unsigned int st_dev; - - /* - * Number of the information node (the inode) for the file (UNIX-specific). - * On UNIX file systems, the inode describes the file date and time stamps, permissions, and content. - * When files are hard-linked to one another, they share the same inode. - * The inode, and therefore st_ino, has no meaning in the FAT, HPFS, or NTFS file systems. - */ - unsigned short st_ino; - - /* - * Bit mask for file-mode information. The _S_IFDIR bit is set if path specifies a directory; - * the _S_IFREG bit is set if path specifies an ordinary file or a device. - * User read/write bits are set according to the file's permission mode; - * user execute bits are set according to the filename extension. - */ - unsigned short st_mode; - - /* Always 1 on non-NTFS file systems. */ - short st_nlink; - - /* - * Numeric identifier of user who owns file (UNIX-specific). - * This field will always be zero on Windows NT systems. - * A redirected file is classified as a Windows NT file. - */ - short st_uid; - - /* - * Numeric identifier of group that owns file (UNIX-specific). - * This field will always be zero on Windows NT systems. - * A redirected file is classified as a Windows NT file - */ - short st_gid; - - /* Drive number of the disk containing the file (same as st_dev) */ - unsigned int st_rdev; - - long st_size; /* Size of the file in bytes */ - time_t st_atime; /* Time of last access of file */ - time_t st_mtime; /* Time of last modification of file */ - time_t st_ctime; /* Time of creation of file */ -}; -# define _STAT_T_DEFINED -#endif - -/* Encoding of the file mode. */ -#define __S_IFMT 0170000 /* These bits determine file type. */ - -/* File types. */ -#define S_IFDIR 0040000 /* Directory. */ -#define S_IFCHR 0020000 /* Character device. */ -#define S_IFREG 0100000 /* Regular file. */ -#define S_IFIFO 0010000 /* FIFO. */ - -/* Permission bits */ -#define S_ISUID 04000 /* Set user ID on execution. */ -#define S_ISGID 02000 /* Set group ID on execution. */ -#define S_IREAD 0000400 /* Read permission, owner */ -#define S_IWRITE 0000200 /* Write permission, owner */ -#define S_IEXEC 0000100 /* Execute/search permission, owner */ - -/* Macros to test file types masks.*/ - -#define __S_ISTYPE(mode, mask) (((mode) & __S_IFMT) == (mask)) - -#define S_ISDIR(mode) __S_ISTYPE((mode), S_IFDIR) /* Test for a directory. */ -#define S_ISCHR(mode) __S_ISTYPE((mode), S_IFCHR) /* Test for a character special file. */ -#define S_ISREG(mode) __S_ISTYPE((mode), S_IFREG) /* Test for a regular file. */ -#define S_ISFIFO(mode) __S_ISTYPE((mode), S_IFIFO) /* Test for a pipe or FIFO special file. */ - - -/* - * File functions declarations. - */ - -int wceex_stat(const char *filename, struct stat *buf); -/* XXX - mloskot - int wceex_fstat(int filedes, struct stat *buf); */ - -int wceex_mkdir(const char *filename); -int wceex_rmdir(const char *filename); - - - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - -#endif /* #ifndef WCEEX_STAT_H */ diff --git a/contrib/libpoco/Foundation/wcelibcex-1.0/src/wce_stdio.h b/contrib/libpoco/Foundation/wcelibcex-1.0/src/wce_stdio.h deleted file mode 100644 index bf91e58f519..00000000000 --- a/contrib/libpoco/Foundation/wcelibcex-1.0/src/wce_stdio.h +++ /dev/null @@ -1,61 +0,0 @@ -/* - * $Id: wce_stdio.h,v 1.2 2006/04/09 16:48:18 mloskot Exp $ - * - * stdio.h - standard buffered input/output - * - * Created by Mateusz Loskot (mateusz@loskot.net) - * - * Copyright (c) 2006 Taxus SI Ltd. - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom - * the Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included - * in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY - * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH - * THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - * - * MIT License: - * http://opensource.org/licenses/mit-license.php - * - * Contact: - * Taxus SI Ltd. - * http://www.taxussi.com.pl - * - */ -#ifndef WCEEX_STDIO_H -#define WCEEX_STDIO_H 1 - -#if !defined(_WIN32_WCE) -# error "Only Windows CE target is supported!" -#endif - - -#ifdef __cplusplus -extern "C" { -#endif /* __cplusplus */ - - -/* Functions declarations */ - -int wceex_rename(const char *oldfile, const char *newfile); -int wceex_unlink(const char *filename); -int wceex_wunlink(const wchar_t *filename); -void wceex_rewind(FILE *stream); - - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - -#endif /* #ifndef WCEEX_STDIO_H */ diff --git a/contrib/libpoco/Foundation/wcelibcex-1.0/src/wce_stdlib.h b/contrib/libpoco/Foundation/wcelibcex-1.0/src/wce_stdlib.h deleted file mode 100644 index 6dab1923d9a..00000000000 --- a/contrib/libpoco/Foundation/wcelibcex-1.0/src/wce_stdlib.h +++ /dev/null @@ -1,102 +0,0 @@ -/* - * $Id: wce_stdlib.h,v 1.2 2006/04/09 16:48:18 mloskot Exp $ - * - * stdlib.h - standard library definitions - * - * Created by Mateusz Loskot (mateusz@loskot.net) - * - * Copyright (c) 2006 Taxus SI Ltd. - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom - * the Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included - * in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY - * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH - * THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - * - * MIT License: - * http://opensource.org/licenses/mit-license.php - * - * Contact: - * Taxus SI Ltd. - * http://www.taxussi.com.pl - * - */ -#ifndef WCEEX_STDLIB_H -#define WCEEX_STDLIB_H 1 - -#if !defined(_WIN32_WCE) -# error "Only Windows CE target is supported!" -#endif - -/* - * Minimal set of required declarations to avoid inclusion of , - * because it defines 'LP' type and other which conflict with some libraries, - * like PROJ.4. - */ -typedef unsigned long DWORD; -typedef wchar_t *LPWSTR, *PWSTR; -typedef const wchar_t *LPCWSTR, *PCWSTR; - -#define _MAX_DIR 256 -#define _MAX_FNAME 256 -#define _MAX_EXT 256 - -#ifdef __cplusplus -extern "C" { -#endif /* __cplusplus */ - - -/* Generate an abnormal process abort. */ - -void wceex_abort(void); - -/* Searching and sorting utilities. */ - -void* wceex_bsearch(const void *key, const void *base, size_t nmemb, size_t size, - int (*compar)(const void *, const void *)); - -void* wceex_lfind(const void *key, const void *base, size_t *nmemb, size_t size, - int(*compar)(const void *, const void *)); - -/* File Management Functions */ - -void wceex_splitpath( const char *path, - char *drive, char *dir, char *name, char *ext ); -void wceex_wsplitpath( const wchar_t *path, - wchar_t *drive, wchar_t *dir, wchar_t *name, wchar_t *ext ); - -void wceex_makepath( char *path, - const char *drive, const char *dir, - const char *name, const char *ext ); -void wceex_wmakepath( wchar_t *path, - const wchar_t *drive, const wchar_t *dir, - const wchar_t *name, const wchar_t *ext ); - -char* wceex_fullpath( char *absPath, const char *relPath, size_t maxLength ); -wchar_t* wceex_wfullpath( wchar_t *absPath, const wchar_t *relPath, size_t maxLength ); - -DWORD wceex_GetFullPathNameW( LPCWSTR lpFileName, DWORD nBufferLength, - LPWSTR lpBuffer, LPWSTR *lpFilePart ); - -/* Dummy compilation enablers - functions that do not provide any implementation. */ - -char* wceex_getenv(const char* varname); - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - - -#endif /* #ifndef WCEEX_STDLIB_H */ diff --git a/contrib/libpoco/Foundation/wcelibcex-1.0/src/wce_strerror.c b/contrib/libpoco/Foundation/wcelibcex-1.0/src/wce_strerror.c deleted file mode 100644 index 97beadaf267..00000000000 --- a/contrib/libpoco/Foundation/wcelibcex-1.0/src/wce_strerror.c +++ /dev/null @@ -1,58 +0,0 @@ -/* - * $Id: wce_strerror.c,v 1.2 2006/04/09 16:48:18 mloskot Exp $ - * - * Defined strerror() function. - * - * Created by Mateusz Loskot (mateusz@loskot.net) - * - * Copyright (c) 2006 Taxus SI Ltd. - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom - * the Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included - * in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY - * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH - * THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - * - * MIT License: - * http://opensource.org/licenses/mit-license.php - * - * Contact: - * Taxus SI Ltd. - * http://www.taxussi.com.pl - * - */ - -/******************************************************************** -* strerror - get error message string -* -* Description: -* -* The strerror() function shall map the error number in errnum -* to a locale-dependent error message string and shall return -* a pointer to it. Typically, the values for errnum come -* from errno, but strerror() shall map any value of type -* int to a message. -* -* Return value: -* -* Upon successful completion, strerror_r() shall return 0. -* Otherwise, an error number shall be returned to indicate -* the error. -********************************************************************/ -char * wceex_strerror(int errnum) -{ - return ""; /* dummy error message */ -} - diff --git a/contrib/libpoco/Foundation/wcelibcex-1.0/src/wce_string.h b/contrib/libpoco/Foundation/wcelibcex-1.0/src/wce_string.h deleted file mode 100644 index dc71e08c5af..00000000000 --- a/contrib/libpoco/Foundation/wcelibcex-1.0/src/wce_string.h +++ /dev/null @@ -1,59 +0,0 @@ -/* - * $Id: wce_string.h,v 1.2 2006/04/09 16:48:18 mloskot Exp $ - * - * string.h - string operations - * - * Created by Mateusz Loskot (mateusz@loskot.net) - * - * Copyright (c) 2006 Taxus SI Ltd. - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom - * the Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included - * in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY - * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH - * THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - * - * MIT License: - * http://opensource.org/licenses/mit-license.php - * - * Contact: - * Taxus SI Ltd. - * http://www.taxussi.com.pl - * - */ -#ifndef WCEEX_STRING_H -#define WCEEX_STRING_H 1 - -#if !defined(_WIN32_WCE) -# error "Only Winddows CE target is supported!" -#endif - - -#ifdef __cplusplus -extern "C" { -#endif /* __cplusplus */ - - -/* Function declarations */ - -char * wceex_strerror(int errnum); - - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - -#endif /* #ifndef WCEEX_STRING_H */ - diff --git a/contrib/libpoco/Foundation/wcelibcex-1.0/src/wce_time.c b/contrib/libpoco/Foundation/wcelibcex-1.0/src/wce_time.c deleted file mode 100644 index 3a082eee993..00000000000 --- a/contrib/libpoco/Foundation/wcelibcex-1.0/src/wce_time.c +++ /dev/null @@ -1,126 +0,0 @@ -/* - * $Id: wce_time.c,v 1.2 2006/04/09 16:48:18 mloskot Exp $ - * - * Defines time() function. - * - * Created by Mateusz Loskot (mateusz@loskot.net) - * - * Copyright (c) 2006 Taxus SI Ltd. - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom - * the Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included - * in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY - * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH - * THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - * - * MIT License: - * http://opensource.org/licenses/mit-license.php - * - * Contact: - * Taxus SI Ltd. - * http://www.taxussi.com.pl - * - */ - -#include -#include - -/******************************************************************************* -* wceex_time - Return the value of time in seconds since the Epoch. -* -* Description: -* The timer argument points to an area where the return value is also stored. -* If timer is a null pointer, no value is stored. -* -* Return: -* Value of time if success, otherwise (time_t)-1 is returned. -* -* Reference: -* IEEE Standard and an Open Group Technical Standard 1003.1, 2004 Edition -*******************************************************************************/ -time_t wceex_time(time_t *timer) -{ - time_t t; - struct tm tmbuff; - SYSTEMTIME st; - - /* Retrive current system date time as UTC */ - GetSystemTime(&st); - - /* Build tm struct based on SYSTEMTIME values */ - - /* Date values */ - tmbuff.tm_year = st.wYear - TM_YEAR_BASE; - tmbuff.tm_mon = st.wMonth - 1; /* wMonth value 1-12 */ - tmbuff.tm_mday = st.wDay; - - /* Time values */ - tmbuff.tm_hour = st.wHour; - tmbuff.tm_min = st.wMinute; - tmbuff.tm_sec = st.wSecond; - tmbuff.tm_isdst = 0; /* Always 0 for UTC time. */ - tmbuff.tm_wday = st.wDayOfWeek; - tmbuff.tm_yday = 0; /* Value is set by wceex_gmmktime */ - - /* Convert tm struct to time_tUTC */ - t = wceex_gmmktime(&tmbuff); - - /* Assign time value. */ - if (timer != NULL) - { - *timer = t; - } - - return t; -} -/******************************************************************************* -* _wceex_tm_to_time_t - Convert time from tm struct format to time_t value. -* -* Description: -* The tmbuff points to structure that contains broken-down time. -* Input and output times are encoded as UTC. -* -* Return: -* Specified time since the Epoch encoded as a value of type time_t. -* (time_t)-1 is returned if time can not be represented by time_t. -* -* Reference: -* IEEE Standard and an Open Group Technical Standard 1003.1, 2004 Edition -*******************************************************************************/ -time_t __wceex_tm_to_time_t(const struct tm *tmbuff) -{ - time_t timer; - - /* If the year is <1970 or the value is negative, the relationship is undefined */ - if (tmbuff->tm_year < 70) - { - return (time_t) -1; - } - - /* If the year is >=1970 */ - /* Each and every day shall be accounted for by exactly 86400 seconds */ - - timer = tmbuff->tm_sec - + tmbuff->tm_min * 60 /* convert minutes to seconds */ - + tmbuff->tm_hour * 3600 /* convert hours to seconds */ - + tmbuff->tm_yday * 86400 /* convert day of year to seconds */ - + (tmbuff->tm_year - 70) * 31536000 /* convert year to seconds */ - + ((tmbuff->tm_year - 69) / 4) * 86400 /* add a day (seconds) every 4 years starting in 1973 */ - - ((tmbuff->tm_year - 1) / 100) * 86400 /* subtract a day back out every 100 years starting in 2001 */ - + ((tmbuff->tm_year + 299) / 400) * 86400; /* add a day back in every 400 years starting in 2001 */ - - return timer; -} - diff --git a/contrib/libpoco/Foundation/wcelibcex-1.0/src/wce_time.h b/contrib/libpoco/Foundation/wcelibcex-1.0/src/wce_time.h deleted file mode 100644 index aa5c23e9657..00000000000 --- a/contrib/libpoco/Foundation/wcelibcex-1.0/src/wce_time.h +++ /dev/null @@ -1,156 +0,0 @@ -/* - * $Id: wce_time.h,v 1.2 2006/04/09 16:48:18 mloskot Exp $ - * - * time.h and sys/time.h - time types and functions - * - * Created by Mateusz Loskot (mateusz@loskot.net) - * - * Copyright (c) 2006 Taxus SI Ltd. - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom - * the Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included - * in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY - * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH - * THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - * - * MIT License: - * http://opensource.org/licenses/mit-license.php - * - * Contact: - * Taxus SI Ltd. - * http://www.taxussi.com.pl - * - */ -#ifndef WCEEX_TIME_H -#define WCEEX_TIME_H 1 - -#if !defined(_WIN32_WCE) -# error "Only Winddows CE target is supported!" -#endif - -#ifdef __cplusplus -extern "C" { -#endif /* __cplusplus */ - -/******************************************************************************* - Types and macros definition -*******************************************************************************/ - -#ifndef _TIME_T_DEFINED -typedef long time_t; /* time value as number of seconds of the Epoch */ -#define _TIME_T_DEFINED -#endif /* _TIME_T_DEFINED */ - -#ifndef _TM_DEFINED -struct tm -{ - int tm_sec; /* seconds after the minute - [0,59] */ - int tm_min; /* minutes after the hour - [0,59] */ - int tm_hour; /* hours since midnight - [0,23] */ - int tm_mday; /* day of the month - [1,31] */ - int tm_mon; /* months since January - [0,11] */ - int tm_year; /* years since 1900 */ - int tm_wday; /* days since Sunday - [0,6] */ - int tm_yday; /* days since January 1 - [0,365] */ - int tm_isdst; /* daylight savings time flag */ -}; -#define _TM_DEFINED -#endif /* _TM_DEFINED */ - -#ifndef _TIMEZONE_DEFINED -struct timezone -{ - int tz_minuteswest; /* minutes W of Greenwich */ - int tz_dsttime; /* type of dst correction */ -}; -#define _TIMEZONE_DEFINED -#endif /* _TIMEZONE_DEFINED */ - -/* - * Constants used internally by time functions. - */ - -#if defined(_MSC_VER) || defined(__BORLANDC__) -#define EPOCHFILETIME (116444736000000000i64) -#else -#define EPOCHFILETIME (116444736000000000LL) -#endif - -/* Epoch base year */ -#define EPOCH_YEAR 1970 - -/* tm struct members conversion units */ -#define TM_YEAR_BASE 1900 /* tm_year base year */ -#define TM_MONTH_MIN 0 /* tm_mon = 0 - January */ -#define TM_MONTH_MAX 11 /* tm_mon = 11 - December */ - -#define MIN_SEC 60 /* seconds in a minute */ -#define HOUR_SEC 3600 /* seconds in an hour */ -#define DAY_SEC 86400 /* seconds in a day */ -#define YEAR_SEC (365 * DAY_SEC) /* seconds in a year */ -#define FOUR_YEAR_SEC (4 * YEAR_SEC + 1) /* seconds in a 4-year period */ - -/* -In every, 400 year period (greg) is an interval of the same -number of days: 365 x 400 + 97 = 146097 -Also, there are 97 leap days in every such 400 years interval -*/ -#define LEAP_DAYS_IN_GREG 97 -#define GREG_YEARS 400 -#define GREG_DAYS (365 * GREG_YEARS + LEAP_DAYS_IN_GREG) -#define GREG_SECS (GREG_DAYS * DAY_SEC) - -/* Checks if given year is a leap year. */ -#define IS_LEAP_YEAR(year) \ - (((year) % 4) == 0 && (((year) % 100) != 0 || ((year) % 400) == 0)) - -/******************************************************************************* - time.h functions -*******************************************************************************/ - -time_t wceex_time(time_t *timer); -time_t wceex_mktime(struct tm *tmbuff); -time_t wceex_gmmktime(struct tm *tmbuff); - -struct tm * wceex_localtime(const time_t *timer); -struct tm * wceex_gmtime(const time_t *timer); - -char * wceex_ctime(const time_t *timer); -char * wceex_ctime_r(const time_t *timer, char *buf); - -char * wceex_asctime(const struct tm *tmbuff); -char * wceex_asctime_r(const struct tm *tbuff, char *buff); - -/******************************************************************************* - sys/time.h functions -*******************************************************************************/ - -int wceex_gettimeofday(struct timeval *tp, struct timezone *tzp); - -/******************************************************************************* - Internal functions prototypes. -*******************************************************************************/ - -/* Internal function to get time value from tm struc. */ -extern time_t __wceex_mktime_utc(struct tm *tmbuff); - - - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - -#endif /* #ifndef WCEEX_TIME_H */ - diff --git a/contrib/libpoco/Foundation/wcelibcex-1.0/src/wce_timesys.c b/contrib/libpoco/Foundation/wcelibcex-1.0/src/wce_timesys.c deleted file mode 100644 index 4adeda0dac8..00000000000 --- a/contrib/libpoco/Foundation/wcelibcex-1.0/src/wce_timesys.c +++ /dev/null @@ -1,138 +0,0 @@ -/* - * $Id: wce_timesys.c,v 1.2 2006/04/09 16:48:18 mloskot Exp $ - * - * Defines function to convert time between formats SYSTEMTIME, - * FILETIME and time_t value. - * - * Created by Mateusz Loskot (mateusz@loskot.net) - * - * Copyright (c) 2006 Taxus SI Ltd. - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom - * the Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included - * in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY - * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH - * THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - * - * MIT License: - * http://opensource.org/licenses/mit-license.php - * - * Contact: - * Taxus SI Ltd. - * http://www.taxussi.com.pl - * - */ - -#include -#include -#include - -/******************************************************************************* -* wceex_filetime_to_time - Convert FILETIME to time as time_t value -* -* Description: -* -* -* Return: -* -* This function shall return the specified time since the Epoch -* encoded as a value of type time_t. -* -*******************************************************************************/ -time_t wceex_filetime_to_time(const FILETIME * pft) -{ - SYSTEMTIME st; - FILETIME lft; - - /* File time as 0 value cannot be represented as Epoch time. */ - - if (!pft->dwLowDateTime && !pft->dwHighDateTime) - { - return (time_t)-1; - } - - /* Convert to a broken down local time value */ - if (!FileTimeToLocalFileTime(pft, &lft) || - !FileTimeToSystemTime(&lft, &st)) - { - return (time_t)-1; - } - - return wceex_local_to_time(&st); -} - - -/******************************************************************************* -* wceex_local_to_time - Convert broken-down local time to value of type time_t -* -* Description: -* -* -* Return: -* -* This function shall return the specified time since the Epoch -* encoded as a value of type time_t. -* -*******************************************************************************/ -time_t wceex_local_to_time(const SYSTEMTIME *st) -{ - if (st == NULL) - { - return (time_t)-1; - } - - return wceex_local_to_time_r(st->wYear - TM_YEAR_BASE, - st->wMonth - 1, - st->wDay, st->wHour, - st->wMinute, - st->wSecond); -} - -/******************************************************************************* -* wceex_local_to_time - Convert broken-down local time to value of type time_t -* -* Description: -* -* Date and time are given as a set of separate values. -* Parameters: -* - year is Epoch-based, year - 1900 -* - mon is 0 based number of current month -* - day is 1 based number of current day -* - hour, min and sec represent current local time. -* -* Return: -* -* This function shall return the specified time since the Epoch -* encoded as a value of type time_t. -* -*******************************************************************************/ -time_t wceex_local_to_time_r(int year, int mon, int day, int hour, int min, int sec) -{ - struct tm tmbuff = { 0 }; - - tmbuff.tm_year = year; - tmbuff.tm_mon = mon; - tmbuff.tm_mday = day; - tmbuff.tm_hour = hour; - tmbuff.tm_min = min; - tmbuff.tm_sec = sec; - tmbuff.tm_isdst = 0; - tmbuff.tm_wday = 0; - tmbuff.tm_yday = 0; - - /* Convert tm struct to time_tUTC */ - return wceex_mktime(&tmbuff); -} - diff --git a/contrib/libpoco/Foundation/wcelibcex-1.0/src/wce_timesys.h b/contrib/libpoco/Foundation/wcelibcex-1.0/src/wce_timesys.h deleted file mode 100644 index 2fd483feb17..00000000000 --- a/contrib/libpoco/Foundation/wcelibcex-1.0/src/wce_timesys.h +++ /dev/null @@ -1,59 +0,0 @@ -/* - * $Id: wce_timesys.h,v 1.2 2006/04/09 16:48:18 mloskot Exp $ - * - * wce_timesys.h - SYSTEMTIME and FILETIME conversion utilities. - * - * Created by Mateusz Loskot (mateusz@loskot.net) - * - * Copyright (c) 2006 Taxus SI Ltd. - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom - * the Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included - * in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY - * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH - * THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - * - * MIT License: - * http://opensource.org/licenses/mit-license.php - * - * Contact: - * Taxus SI Ltd. - * http://www.taxussi.com.pl - */ -#ifndef WCEEX_TIMESYS_H -#define WCEEX_TIMESYS_H 1 - -#ifndef _WIN32_WCE -# error "Only Windows CE target compilation supported" -#endif - -#include -#include - -#ifdef __cplusplus -extern "C" { -#endif /* __cplusplus */ - -/* Function declarations. */ - -time_t wceex_filetime_to_time(const FILETIME * filetime); -time_t wceex_local_to_time(const SYSTEMTIME *systemtime); -time_t wceex_local_to_time_r(int year, int mon, int day, int hour, int min, int sec); - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - -#endif /* #ifndef WCEEX_TIMESYS_H */ diff --git a/contrib/libpoco/Foundation/wcelibcex-1.0/src/wce_types.h b/contrib/libpoco/Foundation/wcelibcex-1.0/src/wce_types.h deleted file mode 100644 index f2ef2aa3811..00000000000 --- a/contrib/libpoco/Foundation/wcelibcex-1.0/src/wce_types.h +++ /dev/null @@ -1,62 +0,0 @@ -/* - * $Id: wce_types.h,v 1.2 2006/04/09 16:48:18 mloskot Exp $ - * - * sys/types.h - data types - * - * Created by Mateusz Loskot (mateusz@loskot.net) - * - * Copyright (c) 2006 Taxus SI Ltd. - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom - * the Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included - * in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY - * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH - * THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - * - * MIT License: - * http://opensource.org/licenses/mit-license.php - * - * Contact: - * Taxus SI Ltd. - * http://www.taxussi.com.pl - */ -#ifndef WCEEX_SYS_TYPES_H -#define WCEEX_SYS_TYPES_H 1 - -#if !defined(_WIN32_WCE) -# error "Only Winddows CE target is supported!" -#endif - -#ifdef __cplusplus -extern "C" { -#endif /* __cplusplus */ - - -#ifndef _TIME_T_DEFINED -typedef long time_t; /* Used for time in seconds. */ -# define _TIME_T_DEFINED -#endif - -#ifndef _SIZE_T_DEFINED -typedef unsigned int size_t; /* Used for sizes of objects. */ -# define _SIZE_T_DEFINED -#endif - - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - -#endif /* #ifndef WCEEX_SYS_TYPES_H */ \ No newline at end of file diff --git a/contrib/libpoco/Foundation/wcelibcex-1.0/src/wce_unistd.h b/contrib/libpoco/Foundation/wcelibcex-1.0/src/wce_unistd.h deleted file mode 100644 index 2e10a6e5258..00000000000 --- a/contrib/libpoco/Foundation/wcelibcex-1.0/src/wce_unistd.h +++ /dev/null @@ -1,72 +0,0 @@ -/* - * $Id$ - * - * unistd.h - defines symbolic constants, types, and declares miscellaneous functions - * - * Created by Mateusz Loskot (mateusz@loskot.net) - * - * Copyright (c) 2006 Mateusz Loskot - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom - * the Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included - * in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY - * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH - * THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - * - * MIT License: - * http://opensource.org/licenses/mit-license.php - * - */ -#ifndef WCEEX_UNISTD_H -#define WCEEX_UNISTD_H 1 - -#if !defined(_WIN32_WCE) -# error "Only Winddows CE target is supported!" -#endif - -/* Defines NULL pointer value */ -#include - - -/* - * Symbolic constants for second argument to access() function. - * All constants and following expressions R_OK|W_OK, R_OK|X_OK - * and R_OK|W_OK|X_OK have distinct values. - */ - -#define R_OK 4 /* Test for read permission. */ -#define W_OK 2 /* Test for write permission. */ -#define X_OK 1 /* Test for execute (search) permission. */ -#define F_OK 0 /* Test for existence of file. */ - - -/* - * Variables used for communication with getopt() function - * to the caller. - */ - -/* Argument associated with option */ -extern char *optarg; - -/* Index into parent argv vector */ -extern int optind; - -/* If error message should be printed */ -extern int opterr; - -/* Character checked for validity */ -extern int optopt; - -#endif /* #ifndef WCEEX_UNISTD_H */ \ No newline at end of file diff --git a/contrib/libpoco/Foundation/wcelibcex-1.0/src/wce_unlink.c b/contrib/libpoco/Foundation/wcelibcex-1.0/src/wce_unlink.c deleted file mode 100644 index 66d7abc039f..00000000000 --- a/contrib/libpoco/Foundation/wcelibcex-1.0/src/wce_unlink.c +++ /dev/null @@ -1,100 +0,0 @@ -/* - * $Id: wce_unlink.c,v 1.2 2006/04/09 16:48:18 mloskot Exp $ - * - * Defines unlink() function. - * - * Created by Mateusz Loskot (mateusz@loskot.net) - * - * Copyright (c) 2006 Taxus SI Ltd. - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom - * the Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included - * in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY - * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH - * THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - * - * MIT License: - * http://opensource.org/licenses/mit-license.php - * - * Contact: - * Taxus SI Ltd. - * http://www.taxussi.com.pl - * - */ - -#include -#include - -/******************************************************************************* -* wceex_unlink -remove a directory entry. -* -* Return: -* -* Upon successful completion, 0 shall be returned. Otherwise, -1. -* -* Reference: -* -* IEEE 1003.1, 2004 Edition -* -*******************************************************************************/ -int wceex_unlink(const char *filename) -{ - int res; - int len; - wchar_t* pWideStr; - - /* Covert filename buffer to Unicode. */ - len = MultiByteToWideChar(CP_ACP, 0, filename, -1, NULL, 0) ; - pWideStr = (wchar_t*)malloc(sizeof(wchar_t) * len); - - MultiByteToWideChar(CP_ACP, 0, filename, -1, pWideStr, len); - - /* Delete file using Win32 CE API call */ - res = DeleteFile(pWideStr); - - /* Free wide-char string */ - free(pWideStr); - - if (res) - return 0; /* success */ - else - { - errno = GetLastError(); - return -1; - } -} - -/******************************************************************************* -* wceex_wunlink -remove a directory entry. -* -* Return: -* -* Upon successful completion, 0 shall be returned. Otherwise, -1. -* -* Reference: -* -* IEEE 1003.1, 2004 Edition -* -*******************************************************************************/ -int wceex_wunlink(const wchar_t *filename) -{ - if( DeleteFile(filename) ) - return 0; - else - { - errno = GetLastError(); - return -1; - } -} \ No newline at end of file diff --git a/contrib/libpoco/Foundation/wcelibcex-1.0/src/wce_winbase.c b/contrib/libpoco/Foundation/wcelibcex-1.0/src/wce_winbase.c deleted file mode 100644 index d042d66e195..00000000000 --- a/contrib/libpoco/Foundation/wcelibcex-1.0/src/wce_winbase.c +++ /dev/null @@ -1,38 +0,0 @@ -/* - * $Id: wce_winbase.c,v 1.0 2006/11/29 17:00:28 sdunand Exp $ - * - * Defines GetStdHandle() function with dummy implementation. - * - * Created by Stphane Dunand (sdunand@sirap.fr) - * - * Copyright (c) 2006 Stphane Dunand - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom - * the Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included - * in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY - * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH - * THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - * - * MIT License: - * http://opensource.org/licenses/mit-license.php - * - */ - -#include - -HANDLE GetStdHandle( DWORD nStdHandle ) -{ - return NULL; -} diff --git a/contrib/libpoco/Foundation/wcelibcex-1.0/src/wce_winbase.h b/contrib/libpoco/Foundation/wcelibcex-1.0/src/wce_winbase.h deleted file mode 100644 index 2713cad3273..00000000000 --- a/contrib/libpoco/Foundation/wcelibcex-1.0/src/wce_winbase.h +++ /dev/null @@ -1,54 +0,0 @@ -/* - * $Id: wce_winbase.h,v 1.0 2006/04/12 15:11:36 sdunand Exp $ - * - * Created by Stphane Dunand (sdunand@sirap.fr) - * - * Copyright (c) 2006 Stphane Dunand - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom - * the Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included - * in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY - * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH - * THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - * - * MIT License: - * http://opensource.org/licenses/mit-license.php - * - */ -#ifndef WCEEX_WINBASE_H -#define WCEEX_WINBASE_H 1 - -#if !defined(_WIN32_WCE) -# error "Only Windows CE target is supported!" -#endif - -#include - -#ifdef __cplusplus -extern "C" { -#endif /* __cplusplus */ - -#define STD_INPUT_HANDLE (DWORD)-10 -#define STD_OUTPUT_HANDLE (DWORD)-11 -#define STD_ERROR_HANDLE (DWORD)-12 - -HANDLE GetStdHandle( DWORD nStdHandle ); - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - -#endif /* #ifndef WCEEX_WINBASE_H */ - diff --git a/contrib/libpoco/LICENSE b/contrib/libpoco/LICENSE deleted file mode 100644 index 2f2f957ce4f..00000000000 --- a/contrib/libpoco/LICENSE +++ /dev/null @@ -1,32 +0,0 @@ -Boost Software License - Version 1.0 - August 17th, 2003 - -Permission is hereby granted, free of charge, to any person or organization -obtaining a copy of the software and accompanying documentation covered by -this license (the "Software") to use, reproduce, display, distribute, -execute, and transmit the Software, and to prepare derivative works of the -Software, and to permit third-parties to whom the Software is furnished to -do so, all subject to the following: - -The copyright notices in the Software and this entire statement, including -the above license grant, this restriction and the following disclaimer, -must be included in all copies of the Software, in whole or in part, and -all derivative works of the Software, unless such copies or derivative -works are solely in the form of machine-executable object code generated by -a source language processor. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT -SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE -FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE, -ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -DEALINGS IN THE SOFTWARE. - ---------------------------------------------------------------------------- -Note: -Individual files contain the following tag instead of the full license text. - - SPDX-License-Identifier: BSL-1.0 - -This enables machine processing of license information based on the SPDX -License Identifiers that are here available: http://spdx.org/licenses/ diff --git a/contrib/libpoco/MANIFEST b/contrib/libpoco/MANIFEST deleted file mode 100644 index 10961fb0d1a..00000000000 --- a/contrib/libpoco/MANIFEST +++ /dev/null @@ -1,5449 +0,0 @@ - -build -build/config -build/config/AIX -build/config/Android -build/config/Angstrom -build/config/ARM-Linux -build/config/BeagleBoard -build/config/CEGCCARM -build/config/CygLinux -build/config/CYGWIN -build/config/Darwin -build/config/Darwin-clang -build/config/Darwin-clang-libc++ -build/config/Darwin-gcc -build/config/Darwin32 -build/config/Darwin32-clang -build/config/Darwin32-clang-libc++ -build/config/Darwin32-gcc -build/config/Darwin64 -build/config/Darwin64-clang -build/config/Darwin64-clang-libc++ -build/config/Darwin64-gcc -build/config/DigiEL -build/config/ELDK -build/config/FreeBSD -build/config/FreeBSD-Linux-compat -build/config/GCCEMBEDLINUX -build/config/HP-UX -build/config/iPhone -build/config/iPhone-clang -build/config/iPhone-clang-libc++ -build/config/iPhoneSimulator -build/config/iPhoneSimulator-clang -build/config/iPhoneSimulator-clang-libc++ -build/config/Linux -build/config/MinGW -build/config/MinGW-CrossEnv -build/config/NIOS2-Linux -build/config/OpenPandora -build/config/OSF1 -build/config/PPC-Linux -build/config/QNX -build/config/SH-Linux -build/config/SmartOS-gcc -build/config/SSV-LINUX -build/config/SunOS -build/config/SunOS-GCC -build/config/SunOS-stdcxx-x86_64 -build/config/SunOS-SunForte -build/config/SunOS-SunStudio -build/config/SunOS-SunStudio11 -build/rules -build/rules/compile -build/rules/dylib -build/rules/exec -build/rules/global -build/rules/lib -build/rules/sample -build/script -build/script/makedepend.aCC -build/script/makedepend.clang -build/script/makedepend.cxx -build/script/makedepend.gcc -build/script/makedepend.qcc -build/script/makedepend.SunCC -build/script/makedepend.xlC -build/script/makeldpath -build/script/projname -build/script/shlibln -build/script/vxprogen -build/vms -build/vxconfig -build/vxconfig/PPC440diab_debug -build/vxconfig/PPC440diab_release -build_CE_vs90.cmd -build_vcexpress2008.cmd -build_vcexpress2010.cmd -build_vs100.cmd -build_vs110.cmd -build_vs120.cmd -build_vs90.cmd -buildwin.cmd -CHANGELOG -cmake -cmake/cmake_uninstall.cmake.in -cmake/FindApache2.cmake -cmake/FindAPR.cmake -cmake/FindMySQL.cmake -cmake/FindODBC.cmake -cmake/FindPCRE.cmake -cmake/FindPostgreSQL.cmake -cmake/FindSQLite3.cmake -cmake/PocoConfig.cmake.in -cmake/PocoConfigVersion.cmake.in -cmake/PocoMacros.cmake -cmake/README -CMakeLists.txt -components -configure -contrib -contrib/poco-doc.pl -CONTRIBUTORS -CppUnit -CppUnit/CppUnit.vxbuild -CppUnit/CppUnit_CE_vs90.sln -CppUnit/CppUnit_CE_vs90.vcproj -CppUnit/CppUnit_vs100.sln -CppUnit/CppUnit_vs100.vcxproj -CppUnit/CppUnit_vs100.vcxproj.filters -CppUnit/CppUnit_vs110.sln -CppUnit/CppUnit_vs110.vcxproj -CppUnit/CppUnit_vs110.vcxproj.filters -CppUnit/CppUnit_vs120.sln -CppUnit/CppUnit_vs120.vcxproj -CppUnit/CppUnit_vs120.vcxproj.filters -CppUnit/CppUnit_vs140.sln -CppUnit/CppUnit_vs140.vcxproj -CppUnit/CppUnit_vs140.vcxproj.filters -CppUnit/CppUnit_vs90.sln -CppUnit/CppUnit_vs90.vcproj -CppUnit/CppUnit_WEC2013_vs110.sln -CppUnit/CppUnit_WEC2013_vs110.vcxproj -CppUnit/CppUnit_WEC2013_vs110.vcxproj.filters -CppUnit/CppUnit_WEC2013_vs120.sln -CppUnit/CppUnit_WEC2013_vs120.vcxproj -CppUnit/CppUnit_WEC2013_vs120.vcxproj.filters -CppUnit/CppUnit_x64_vs100.sln -CppUnit/CppUnit_x64_vs100.vcxproj -CppUnit/CppUnit_x64_vs100.vcxproj.filters -CppUnit/CppUnit_x64_vs110.sln -CppUnit/CppUnit_x64_vs110.vcxproj -CppUnit/CppUnit_x64_vs110.vcxproj.filters -CppUnit/CppUnit_x64_vs120.sln -CppUnit/CppUnit_x64_vs120.vcxproj -CppUnit/CppUnit_x64_vs120.vcxproj.filters -CppUnit/CppUnit_x64_vs140.sln -CppUnit/CppUnit_x64_vs140.vcxproj -CppUnit/CppUnit_x64_vs140.vcxproj.filters -CppUnit/CppUnit_x64_vs90.sln -CppUnit/CppUnit_x64_vs90.vcproj -CppUnit/doc -CppUnit/doc/cookbook.htm -CppUnit/doc/license.htm -CppUnit/doc/README.html -CppUnit/doc/test.gif -CppUnit/include -CppUnit/include/CppUnit -CppUnit/include/CppUnit/CppUnit.h -CppUnit/include/CppUnit/CppUnitException.h -CppUnit/include/CppUnit/estring.h -CppUnit/include/CppUnit/Guards.h -CppUnit/include/CppUnit/Orthodox.h -CppUnit/include/CppUnit/RepeatedTest.h -CppUnit/include/CppUnit/Test.h -CppUnit/include/CppUnit/TestCaller.h -CppUnit/include/CppUnit/TestCase.h -CppUnit/include/CppUnit/TestDecorator.h -CppUnit/include/CppUnit/TestFailure.h -CppUnit/include/CppUnit/TestResult.h -CppUnit/include/CppUnit/TestRunner.h -CppUnit/include/CppUnit/TestSetup.h -CppUnit/include/CppUnit/TestSuite.h -CppUnit/include/CppUnit/TextTestResult.h -CppUnit/Makefile -CppUnit/src -CppUnit/src/CppUnitException.cpp -CppUnit/src/TestCase.cpp -CppUnit/src/TestDecorator.cpp -CppUnit/src/TestFailure.cpp -CppUnit/src/TestResult.cpp -CppUnit/src/TestRunner.cpp -CppUnit/src/TestSuite.cpp -CppUnit/src/TextTestResult.cpp -CppUnit/WinTestRunner -CppUnit/WinTestRunner/include -CppUnit/WinTestRunner/include/WinTestRunner -CppUnit/WinTestRunner/include/WinTestRunner/WinTestRunner.h -CppUnit/WinTestRunner/res -CppUnit/WinTestRunner/res/Resource.h -CppUnit/WinTestRunner/res/WinTestRunner.rc -CppUnit/WinTestRunner/src -CppUnit/WinTestRunner/src/ActiveTest.cpp -CppUnit/WinTestRunner/src/ActiveTest.h -CppUnit/WinTestRunner/src/DLLMain.cpp -CppUnit/WinTestRunner/src/GUITestResult.cpp -CppUnit/WinTestRunner/src/GUITestResult.h -CppUnit/WinTestRunner/src/ProgressBar.cpp -CppUnit/WinTestRunner/src/ProgressBar.h -CppUnit/WinTestRunner/src/SynchronizedTestResult.h -CppUnit/WinTestRunner/src/TestResultDecorator.h -CppUnit/WinTestRunner/src/TestRunnerDlg.cpp -CppUnit/WinTestRunner/src/TestRunnerDlg.h -CppUnit/WinTestRunner/src/WinTestRunner.cpp -CppUnit/WinTestRunner/WinTestRunner_vs100.vcxproj -CppUnit/WinTestRunner/WinTestRunner_vs100.vcxproj.filters -CppUnit/WinTestRunner/WinTestRunner_vs110.vcxproj -CppUnit/WinTestRunner/WinTestRunner_vs110.vcxproj.filters -CppUnit/WinTestRunner/WinTestRunner_vs90.vcproj -CppUnit/WinTestRunner/WinTestRunner_x64_vs100.vcxproj -CppUnit/WinTestRunner/WinTestRunner_x64_vs100.vcxproj.filters -CppUnit/WinTestRunner/WinTestRunner_x64_vs110.vcxproj -CppUnit/WinTestRunner/WinTestRunner_x64_vs110.vcxproj.filters -CppUnit/WinTestRunner/WinTestRunner_x64_vs90.vcproj -Crypto -Crypto/cmake -Crypto/cmake/PocoCryptoConfig.cmake -Crypto/CMakeLists.txt -Crypto/Crypto.progen -Crypto/Crypto_CE_VS90.sln -Crypto/Crypto_CE_VS90.vcproj -Crypto/Crypto_vs100.sln -Crypto/Crypto_vs100.vcxproj -Crypto/Crypto_vs100.vcxproj.filters -Crypto/Crypto_vs110.sln -Crypto/Crypto_vs110.vcxproj -Crypto/Crypto_vs110.vcxproj.filters -Crypto/Crypto_vs120.sln -Crypto/Crypto_vs120.vcxproj -Crypto/Crypto_vs120.vcxproj.filters -Crypto/Crypto_vs140.sln -Crypto/Crypto_vs140.vcxproj -Crypto/Crypto_vs140.vcxproj.filters -Crypto/Crypto_VS90.sln -Crypto/Crypto_VS90.vcproj -Crypto/Crypto_WEC2013_vs110.vcxproj -Crypto/Crypto_WEC2013_vs110.vcxproj.filters -Crypto/Crypto_WEC2013_vs120.sln -Crypto/Crypto_WEC2013_vs120.vcxproj -Crypto/Crypto_WEC2013_vs120.vcxproj.filters -Crypto/Crypto_x64_vs100.sln -Crypto/Crypto_x64_vs100.vcxproj -Crypto/Crypto_x64_vs100.vcxproj.filters -Crypto/Crypto_x64_vs110.sln -Crypto/Crypto_x64_vs110.vcxproj -Crypto/Crypto_x64_vs110.vcxproj.filters -Crypto/Crypto_x64_vs120.sln -Crypto/Crypto_x64_vs120.vcxproj -Crypto/Crypto_x64_vs120.vcxproj.filters -Crypto/Crypto_x64_vs140.sln -Crypto/Crypto_x64_vs140.vcxproj -Crypto/Crypto_x64_vs140.vcxproj.filters -Crypto/Crypto_x64_vs90.sln -Crypto/Crypto_x64_vs90.vcproj -Crypto/include -Crypto/include/Poco -Crypto/include/Poco/Crypto -Crypto/include/Poco/Crypto/Cipher.h -Crypto/include/Poco/Crypto/CipherFactory.h -Crypto/include/Poco/Crypto/CipherImpl.h -Crypto/include/Poco/Crypto/CipherKey.h -Crypto/include/Poco/Crypto/CipherKeyImpl.h -Crypto/include/Poco/Crypto/Crypto.h -Crypto/include/Poco/Crypto/CryptoStream.h -Crypto/include/Poco/Crypto/CryptoTransform.h -Crypto/include/Poco/Crypto/DigestEngine.h -Crypto/include/Poco/Crypto/OpenSSLInitializer.h -Crypto/include/Poco/Crypto/RSACipherImpl.h -Crypto/include/Poco/Crypto/RSADigestEngine.h -Crypto/include/Poco/Crypto/RSAKey.h -Crypto/include/Poco/Crypto/RSAKeyImpl.h -Crypto/include/Poco/Crypto/X509Certificate.h -Crypto/Makefile -Crypto/samples -Crypto/samples/CMakeLists.txt -Crypto/samples/genrsakey -Crypto/samples/genrsakey/CMakeLists.txt -Crypto/samples/genrsakey/genrsakey.progen -Crypto/samples/genrsakey/genrsakey_CE_VS90.vcproj -Crypto/samples/genrsakey/genrsakey_vs100.vcxproj -Crypto/samples/genrsakey/genrsakey_vs100.vcxproj.filters -Crypto/samples/genrsakey/genrsakey_vs110.vcxproj -Crypto/samples/genrsakey/genrsakey_vs110.vcxproj.filters -Crypto/samples/genrsakey/genrsakey_vs120.vcxproj -Crypto/samples/genrsakey/genrsakey_vs120.vcxproj.filters -Crypto/samples/genrsakey/genrsakey_vs140.vcxproj -Crypto/samples/genrsakey/genrsakey_vs140.vcxproj.filters -Crypto/samples/genrsakey/genrsakey_VS90.vcproj -Crypto/samples/genrsakey/genrsakey_WEC2013_vs110.vcxproj -Crypto/samples/genrsakey/genrsakey_WEC2013_vs110.vcxproj.filters -Crypto/samples/genrsakey/genrsakey_WEC2013_vs120.vcxproj -Crypto/samples/genrsakey/genrsakey_WEC2013_vs120.vcxproj.filters -Crypto/samples/genrsakey/genrsakey_x64_vs100.vcxproj -Crypto/samples/genrsakey/genrsakey_x64_vs100.vcxproj.filters -Crypto/samples/genrsakey/genrsakey_x64_vs110.vcxproj -Crypto/samples/genrsakey/genrsakey_x64_vs110.vcxproj.filters -Crypto/samples/genrsakey/genrsakey_x64_vs120.vcxproj -Crypto/samples/genrsakey/genrsakey_x64_vs120.vcxproj.filters -Crypto/samples/genrsakey/genrsakey_x64_vs140.vcxproj -Crypto/samples/genrsakey/genrsakey_x64_vs140.vcxproj.filters -Crypto/samples/genrsakey/genrsakey_x64_vs90.vcproj -Crypto/samples/genrsakey/Makefile -Crypto/samples/genrsakey/src -Crypto/samples/genrsakey/src/genrsakey.cpp -Crypto/samples/Makefile -Crypto/samples/samples.progen -Crypto/samples/samples_CE_VS90.sln -Crypto/samples/samples_vs100.sln -Crypto/samples/samples_vs110.sln -Crypto/samples/samples_vs120.sln -Crypto/samples/samples_vs140.sln -Crypto/samples/samples_VS90.sln -Crypto/samples/samples_WEC2013_vs120.sln -Crypto/samples/samples_x64_vs100.sln -Crypto/samples/samples_x64_vs110.sln -Crypto/samples/samples_x64_vs120.sln -Crypto/samples/samples_x64_vs140.sln -Crypto/samples/samples_x64_vs90.sln -Crypto/src -Crypto/src/Cipher.cpp -Crypto/src/CipherFactory.cpp -Crypto/src/CipherImpl.cpp -Crypto/src/CipherKey.cpp -Crypto/src/CipherKeyImpl.cpp -Crypto/src/CryptoStream.cpp -Crypto/src/CryptoTransform.cpp -Crypto/src/DigestEngine.cpp -Crypto/src/OpenSSLInitializer.cpp -Crypto/src/RSACipherImpl.cpp -Crypto/src/RSADigestEngine.cpp -Crypto/src/RSAKey.cpp -Crypto/src/RSAKeyImpl.cpp -Crypto/src/X509Certificate.cpp -Crypto/testsuite -Crypto/testsuite/CMakeLists.txt -Crypto/testsuite/Makefile -Crypto/testsuite/src -Crypto/testsuite/src/CryptoTest.cpp -Crypto/testsuite/src/CryptoTest.h -Crypto/testsuite/src/CryptoTestSuite.cpp -Crypto/testsuite/src/CryptoTestSuite.h -Crypto/testsuite/src/DigestEngineTest.cpp -Crypto/testsuite/src/DigestEngineTest.h -Crypto/testsuite/src/Driver.cpp -Crypto/testsuite/src/RSATest.cpp -Crypto/testsuite/src/RSATest.h -Crypto/testsuite/src/WinCEDriver.cpp -Crypto/testsuite/src/WinDriver.cpp -Crypto/testsuite/TestSuite.progen -Crypto/testsuite/TestSuite_CE_VS90.vcproj -Crypto/testsuite/TestSuite_vs100.vcxproj -Crypto/testsuite/TestSuite_vs100.vcxproj.filters -Crypto/testsuite/TestSuite_vs110.vcxproj -Crypto/testsuite/TestSuite_vs110.vcxproj.filters -Crypto/testsuite/TestSuite_vs120.vcxproj -Crypto/testsuite/TestSuite_vs120.vcxproj.filters -Crypto/testsuite/TestSuite_vs140.vcxproj -Crypto/testsuite/TestSuite_vs140.vcxproj.filters -Crypto/testsuite/TestSuite_VS90.vcproj -Crypto/testsuite/TestSuite_WEC2013_vs110.vcxproj -Crypto/testsuite/TestSuite_WEC2013_vs110.vcxproj.filters -Crypto/testsuite/TestSuite_WEC2013_vs120.vcxproj -Crypto/testsuite/TestSuite_WEC2013_vs120.vcxproj.filters -Crypto/testsuite/TestSuite_x64_vs100.vcxproj -Crypto/testsuite/TestSuite_x64_vs100.vcxproj.filters -Crypto/testsuite/TestSuite_x64_vs110.vcxproj -Crypto/testsuite/TestSuite_x64_vs110.vcxproj.filters -Crypto/testsuite/TestSuite_x64_vs120.vcxproj -Crypto/testsuite/TestSuite_x64_vs120.vcxproj.filters -Crypto/testsuite/TestSuite_x64_vs140.vcxproj -Crypto/testsuite/TestSuite_x64_vs140.vcxproj.filters -Crypto/testsuite/TestSuite_x64_vs90.vcproj -Data -Data/cmake -Data/cmake/PocoDataConfig.cmake -Data/CMakeLists.txt -Data/Data.progen -Data/Data_CE_vs90.sln -Data/Data_CE_vs90.vcproj -Data/Data_vs100.sln -Data/Data_vs100.vcxproj -Data/Data_vs100.vcxproj.filters -Data/Data_vs110.sln -Data/Data_vs110.vcxproj -Data/Data_vs110.vcxproj.filters -Data/Data_vs120.sln -Data/Data_vs120.vcxproj -Data/Data_vs120.vcxproj.filters -Data/Data_vs140.sln -Data/Data_vs140.vcxproj -Data/Data_vs140.vcxproj.filters -Data/Data_VS90.sln -Data/Data_VS90.vcproj -Data/Data_WEC2013_vs110.sln -Data/Data_WEC2013_vs110.vcxproj -Data/Data_WEC2013_vs110.vcxproj.filters -Data/Data_WEC2013_vs120.sln -Data/Data_WEC2013_vs120.vcxproj -Data/Data_WEC2013_vs120.vcxproj.filters -Data/Data_x64_vs100.sln -Data/Data_x64_vs100.vcxproj -Data/Data_x64_vs100.vcxproj.filters -Data/Data_x64_vs110.sln -Data/Data_x64_vs110.vcxproj -Data/Data_x64_vs110.vcxproj.filters -Data/Data_x64_vs120.sln -Data/Data_x64_vs120.vcxproj -Data/Data_x64_vs120.vcxproj.filters -Data/Data_x64_vs140.sln -Data/Data_x64_vs140.vcxproj -Data/Data_x64_vs140.vcxproj.filters -Data/Data_x64_vs90.sln -Data/Data_x64_vs90.vcproj -Data/doc -Data/doc/00200-DataUserManual.page -Data/doc/00300-DataDeveloperManual.page -Data/doc/99100-DataReleaseNotes.page -Data/include -Data/include/Poco -Data/include/Poco/Data -Data/include/Poco/Data/AbstractBinder.h -Data/include/Poco/Data/AbstractBinding.h -Data/include/Poco/Data/AbstractExtraction.h -Data/include/Poco/Data/AbstractExtractor.h -Data/include/Poco/Data/AbstractPreparation.h -Data/include/Poco/Data/AbstractPreparator.h -Data/include/Poco/Data/AbstractSessionImpl.h -Data/include/Poco/Data/ArchiveStrategy.h -Data/include/Poco/Data/AutoTransaction.h -Data/include/Poco/Data/Binding.h -Data/include/Poco/Data/Bulk.h -Data/include/Poco/Data/BulkBinding.h -Data/include/Poco/Data/BulkExtraction.h -Data/include/Poco/Data/Column.h -Data/include/Poco/Data/Connector.h -Data/include/Poco/Data/Constants.h -Data/include/Poco/Data/Data.h -Data/include/Poco/Data/DataException.h -Data/include/Poco/Data/Date.h -Data/include/Poco/Data/DynamicDateTime.h -Data/include/Poco/Data/DynamicLOB.h -Data/include/Poco/Data/Extraction.h -Data/include/Poco/Data/Limit.h -Data/include/Poco/Data/LOB.h -Data/include/Poco/Data/LOBStream.h -Data/include/Poco/Data/MetaColumn.h -Data/include/Poco/Data/PooledSessionHolder.h -Data/include/Poco/Data/PooledSessionImpl.h -Data/include/Poco/Data/Position.h -Data/include/Poco/Data/Preparation.h -Data/include/Poco/Data/Range.h -Data/include/Poco/Data/RecordSet.h -Data/include/Poco/Data/Row.h -Data/include/Poco/Data/RowFilter.h -Data/include/Poco/Data/RowFormatter.h -Data/include/Poco/Data/RowIterator.h -Data/include/Poco/Data/Session.h -Data/include/Poco/Data/SessionFactory.h -Data/include/Poco/Data/SessionImpl.h -Data/include/Poco/Data/SessionPool.h -Data/include/Poco/Data/SessionPoolContainer.h -Data/include/Poco/Data/SimpleRowFormatter.h -Data/include/Poco/Data/SQLChannel.h -Data/include/Poco/Data/Statement.h -Data/include/Poco/Data/StatementCreator.h -Data/include/Poco/Data/StatementImpl.h -Data/include/Poco/Data/Time.h -Data/include/Poco/Data/Transaction.h -Data/include/Poco/Data/TypeHandler.h -Data/Makefile -Data/MySQL -Data/MySQL/cmake -Data/MySQL/cmake/PocoDataMySQLConfig.cmake -Data/MySQL/CMakeLists.txt -Data/MySQL/include -Data/MySQL/include/Poco -Data/MySQL/include/Poco/Data -Data/MySQL/include/Poco/Data/MySQL -Data/MySQL/include/Poco/Data/MySQL/Binder.h -Data/MySQL/include/Poco/Data/MySQL/Connector.h -Data/MySQL/include/Poco/Data/MySQL/Extractor.h -Data/MySQL/include/Poco/Data/MySQL/MySQL.h -Data/MySQL/include/Poco/Data/MySQL/MySQLException.h -Data/MySQL/include/Poco/Data/MySQL/MySQLStatementImpl.h -Data/MySQL/include/Poco/Data/MySQL/ResultMetadata.h -Data/MySQL/include/Poco/Data/MySQL/SessionHandle.h -Data/MySQL/include/Poco/Data/MySQL/SessionImpl.h -Data/MySQL/include/Poco/Data/MySQL/StatementExecutor.h -Data/MySQL/include/Poco/Data/MySQL/Utility.h -Data/MySQL/Makefile -Data/MySQL/MySQL.progen -Data/MySQL/MySQL_vs100.sln -Data/MySQL/MySQL_vs100.vcxproj -Data/MySQL/MySQL_vs100.vcxproj.filters -Data/MySQL/MySQL_vs110.sln -Data/MySQL/MySQL_vs110.vcxproj -Data/MySQL/MySQL_vs110.vcxproj.filters -Data/MySQL/MySQL_vs120.sln -Data/MySQL/MySQL_vs120.vcxproj -Data/MySQL/MySQL_vs120.vcxproj.filters -Data/MySQL/MySQL_vs140.sln -Data/MySQL/MySQL_vs140.vcxproj -Data/MySQL/MySQL_vs140.vcxproj.filters -Data/MySQL/MySQL_VS90.sln -Data/MySQL/MySQL_VS90.vcproj -Data/MySQL/MySQL_x64_vs100.sln -Data/MySQL/MySQL_x64_vs100.vcxproj -Data/MySQL/MySQL_x64_vs100.vcxproj.filters -Data/MySQL/MySQL_x64_vs110.sln -Data/MySQL/MySQL_x64_vs110.vcxproj -Data/MySQL/MySQL_x64_vs110.vcxproj.filters -Data/MySQL/MySQL_x64_vs120.sln -Data/MySQL/MySQL_x64_vs120.vcxproj -Data/MySQL/MySQL_x64_vs120.vcxproj.filters -Data/MySQL/MySQL_x64_vs140.sln -Data/MySQL/MySQL_x64_vs140.vcxproj -Data/MySQL/MySQL_x64_vs140.vcxproj.filters -Data/MySQL/MySQL_x64_vs90.sln -Data/MySQL/MySQL_x64_vs90.vcproj -Data/MySQL/src -Data/MySQL/src/Binder.cpp -Data/MySQL/src/Connector.cpp -Data/MySQL/src/Extractor.cpp -Data/MySQL/src/MySQLException.cpp -Data/MySQL/src/MySQLStatementImpl.cpp -Data/MySQL/src/ResultMetadata.cpp -Data/MySQL/src/SessionHandle.cpp -Data/MySQL/src/SessionImpl.cpp -Data/MySQL/src/StatementExecutor.cpp -Data/MySQL/src/Utility.cpp -Data/MySQL/testsuite -Data/MySQL/testsuite/CMakeLists.txt -Data/MySQL/testsuite/Makefile -Data/MySQL/testsuite/src -Data/MySQL/testsuite/src/Driver.cpp -Data/MySQL/testsuite/src/MySQLTest.cpp -Data/MySQL/testsuite/src/MySQLTest.h -Data/MySQL/testsuite/src/MySQLTestSuite.cpp -Data/MySQL/testsuite/src/MySQLTestSuite.h -Data/MySQL/testsuite/src/SQLExecutor.cpp -Data/MySQL/testsuite/src/SQLExecutor.h -Data/MySQL/testsuite/src/WinDriver.cpp -Data/MySQL/testsuite/TestSuite.progen -Data/MySQL/testsuite/TestSuite_vs100.vcxproj -Data/MySQL/testsuite/TestSuite_vs100.vcxproj.filters -Data/MySQL/testsuite/TestSuite_vs110.vcxproj -Data/MySQL/testsuite/TestSuite_vs110.vcxproj.filters -Data/MySQL/testsuite/TestSuite_vs120.vcxproj -Data/MySQL/testsuite/TestSuite_vs120.vcxproj.filters -Data/MySQL/testsuite/TestSuite_vs140.vcxproj -Data/MySQL/testsuite/TestSuite_vs140.vcxproj.filters -Data/MySQL/testsuite/TestSuite_VS90.vcproj -Data/MySQL/testsuite/TestSuite_x64_vs100.vcxproj -Data/MySQL/testsuite/TestSuite_x64_vs100.vcxproj.filters -Data/MySQL/testsuite/TestSuite_x64_vs110.vcxproj -Data/MySQL/testsuite/TestSuite_x64_vs110.vcxproj.filters -Data/MySQL/testsuite/TestSuite_x64_vs120.vcxproj -Data/MySQL/testsuite/TestSuite_x64_vs120.vcxproj.filters -Data/MySQL/testsuite/TestSuite_x64_vs140.vcxproj -Data/MySQL/testsuite/TestSuite_x64_vs140.vcxproj.filters -Data/MySQL/testsuite/TestSuite_x64_vs90.vcproj -Data/ODBC -Data/ODBC/cmake -Data/ODBC/cmake/PocoDataODBCConfig.cmake -Data/ODBC/CMakeLists.txt -Data/ODBC/include -Data/ODBC/include/Poco -Data/ODBC/include/Poco/Data -Data/ODBC/include/Poco/Data/ODBC -Data/ODBC/include/Poco/Data/ODBC/Binder.h -Data/ODBC/include/Poco/Data/ODBC/ConnectionHandle.h -Data/ODBC/include/Poco/Data/ODBC/Connector.h -Data/ODBC/include/Poco/Data/ODBC/Diagnostics.h -Data/ODBC/include/Poco/Data/ODBC/EnvironmentHandle.h -Data/ODBC/include/Poco/Data/ODBC/Error.h -Data/ODBC/include/Poco/Data/ODBC/Extractor.h -Data/ODBC/include/Poco/Data/ODBC/Handle.h -Data/ODBC/include/Poco/Data/ODBC/ODBC.h -Data/ODBC/include/Poco/Data/ODBC/ODBCException.h -Data/ODBC/include/Poco/Data/ODBC/ODBCMetaColumn.h -Data/ODBC/include/Poco/Data/ODBC/ODBCStatementImpl.h -Data/ODBC/include/Poco/Data/ODBC/Parameter.h -Data/ODBC/include/Poco/Data/ODBC/Preparator.h -Data/ODBC/include/Poco/Data/ODBC/SessionImpl.h -Data/ODBC/include/Poco/Data/ODBC/TypeInfo.h -Data/ODBC/include/Poco/Data/ODBC/Unicode.h -Data/ODBC/include/Poco/Data/ODBC/Unicode_UNIXODBC.h -Data/ODBC/include/Poco/Data/ODBC/Unicode_WIN32.h -Data/ODBC/include/Poco/Data/ODBC/Utility.h -Data/ODBC/Makefile -Data/ODBC/ODBC.make -Data/ODBC/ODBC.progen -Data/ODBC/ODBC_vs100.sln -Data/ODBC/ODBC_vs100.vcxproj -Data/ODBC/ODBC_vs100.vcxproj.filters -Data/ODBC/ODBC_vs110.sln -Data/ODBC/ODBC_vs110.vcxproj -Data/ODBC/ODBC_vs110.vcxproj.filters -Data/ODBC/ODBC_vs120.sln -Data/ODBC/ODBC_vs120.vcxproj -Data/ODBC/ODBC_vs120.vcxproj.filters -Data/ODBC/ODBC_vs140.sln -Data/ODBC/ODBC_vs140.vcxproj -Data/ODBC/ODBC_vs140.vcxproj.filters -Data/ODBC/ODBC_VS90.sln -Data/ODBC/ODBC_VS90.vcproj -Data/ODBC/ODBC_x64_vs100.sln -Data/ODBC/ODBC_x64_vs100.vcxproj -Data/ODBC/ODBC_x64_vs100.vcxproj.filters -Data/ODBC/ODBC_x64_vs110.sln -Data/ODBC/ODBC_x64_vs110.vcxproj -Data/ODBC/ODBC_x64_vs110.vcxproj.filters -Data/ODBC/ODBC_x64_vs120.sln -Data/ODBC/ODBC_x64_vs120.vcxproj -Data/ODBC/ODBC_x64_vs120.vcxproj.filters -Data/ODBC/ODBC_x64_vs140.sln -Data/ODBC/ODBC_x64_vs140.vcxproj -Data/ODBC/ODBC_x64_vs140.vcxproj.filters -Data/ODBC/ODBC_x64_vs90.sln -Data/ODBC/ODBC_x64_vs90.vcproj -Data/ODBC/src -Data/ODBC/src/Binder.cpp -Data/ODBC/src/ConnectionHandle.cpp -Data/ODBC/src/Connector.cpp -Data/ODBC/src/EnvironmentHandle.cpp -Data/ODBC/src/Extractor.cpp -Data/ODBC/src/ODBCException.cpp -Data/ODBC/src/ODBCMetaColumn.cpp -Data/ODBC/src/ODBCStatementImpl.cpp -Data/ODBC/src/Parameter.cpp -Data/ODBC/src/Preparator.cpp -Data/ODBC/src/SessionImpl.cpp -Data/ODBC/src/TypeInfo.cpp -Data/ODBC/src/Unicode.cpp -Data/ODBC/src/Unicode_UNIXODBC.cpp -Data/ODBC/src/Unicode_WIN32.cpp -Data/ODBC/src/Utility.cpp -Data/ODBC/testsuite -Data/ODBC/testsuite/CMakeLists.txt -Data/ODBC/testsuite/Makefile -Data/ODBC/testsuite/src -Data/ODBC/testsuite/src/Driver.cpp -Data/ODBC/testsuite/src/ODBCAccessTest.cpp -Data/ODBC/testsuite/src/ODBCAccessTest.h -Data/ODBC/testsuite/src/ODBCDB2Test.cpp -Data/ODBC/testsuite/src/ODBCDB2Test.h -Data/ODBC/testsuite/src/ODBCMySQLTest.cpp -Data/ODBC/testsuite/src/ODBCMySQLTest.h -Data/ODBC/testsuite/src/ODBCOracleTest.cpp -Data/ODBC/testsuite/src/ODBCOracleTest.h -Data/ODBC/testsuite/src/ODBCPostgreSQLTest.cpp -Data/ODBC/testsuite/src/ODBCPostgreSQLTest.h -Data/ODBC/testsuite/src/ODBCSQLiteTest.cpp -Data/ODBC/testsuite/src/ODBCSQLiteTest.h -Data/ODBC/testsuite/src/ODBCSQLServerTest.cpp -Data/ODBC/testsuite/src/ODBCSQLServerTest.h -Data/ODBC/testsuite/src/ODBCTest.cpp -Data/ODBC/testsuite/src/ODBCTest.h -Data/ODBC/testsuite/src/ODBCTestSuite.cpp -Data/ODBC/testsuite/src/ODBCTestSuite.h -Data/ODBC/testsuite/src/SQLExecutor.cpp -Data/ODBC/testsuite/src/SQLExecutor.h -Data/ODBC/testsuite/src/WinDriver.cpp -Data/ODBC/testsuite/TestSuite.progen -Data/ODBC/testsuite/TestSuite_vs100.vcxproj -Data/ODBC/testsuite/TestSuite_vs100.vcxproj.filters -Data/ODBC/testsuite/TestSuite_vs110.vcxproj -Data/ODBC/testsuite/TestSuite_vs110.vcxproj.filters -Data/ODBC/testsuite/TestSuite_vs120.vcxproj -Data/ODBC/testsuite/TestSuite_vs120.vcxproj.filters -Data/ODBC/testsuite/TestSuite_vs140.vcxproj -Data/ODBC/testsuite/TestSuite_vs140.vcxproj.filters -Data/ODBC/testsuite/TestSuite_VS90.vcproj -Data/ODBC/testsuite/TestSuite_x64_vs100.vcxproj -Data/ODBC/testsuite/TestSuite_x64_vs100.vcxproj.filters -Data/ODBC/testsuite/TestSuite_x64_vs110.vcxproj -Data/ODBC/testsuite/TestSuite_x64_vs110.vcxproj.filters -Data/ODBC/testsuite/TestSuite_x64_vs120.vcxproj -Data/ODBC/testsuite/TestSuite_x64_vs120.vcxproj.filters -Data/ODBC/testsuite/TestSuite_x64_vs140.vcxproj -Data/ODBC/testsuite/TestSuite_x64_vs140.vcxproj.filters -Data/ODBC/testsuite/TestSuite_x64_vs90.vcproj -Data/samples -Data/samples/Binding -Data/samples/Binding/Binding.progen -Data/samples/Binding/Binding_CE_vs90.vcproj -Data/samples/Binding/Binding_vs100.vcxproj -Data/samples/Binding/Binding_vs100.vcxproj.filters -Data/samples/Binding/Binding_vs110.vcxproj -Data/samples/Binding/Binding_vs110.vcxproj.filters -Data/samples/Binding/Binding_vs120.vcxproj -Data/samples/Binding/Binding_vs120.vcxproj.filters -Data/samples/Binding/Binding_vs140.vcxproj -Data/samples/Binding/Binding_vs140.vcxproj.filters -Data/samples/Binding/Binding_vs90.vcproj -Data/samples/Binding/Binding_WEC2013_vs110.vcxproj -Data/samples/Binding/Binding_WEC2013_vs110.vcxproj.filters -Data/samples/Binding/Binding_WEC2013_vs120.vcxproj -Data/samples/Binding/Binding_WEC2013_vs120.vcxproj.filters -Data/samples/Binding/Binding_x64_vs100.vcxproj -Data/samples/Binding/Binding_x64_vs100.vcxproj.filters -Data/samples/Binding/Binding_x64_vs110.vcxproj -Data/samples/Binding/Binding_x64_vs110.vcxproj.filters -Data/samples/Binding/Binding_x64_vs120.vcxproj -Data/samples/Binding/Binding_x64_vs120.vcxproj.filters -Data/samples/Binding/Binding_x64_vs140.vcxproj -Data/samples/Binding/Binding_x64_vs140.vcxproj.filters -Data/samples/Binding/Binding_x64_vs90.vcproj -Data/samples/Binding/CMakeLists.txt -Data/samples/Binding/Makefile -Data/samples/Binding/src -Data/samples/Binding/src/Binding.cpp -Data/samples/CMakeLists.txt -Data/samples/Makefile -Data/samples/RecordSet -Data/samples/RecordSet/CMakeLists.txt -Data/samples/RecordSet/Makefile -Data/samples/RecordSet/RecordSet.progen -Data/samples/RecordSet/RecordSet_CE_vs90.vcproj -Data/samples/RecordSet/RecordSet_vs100.vcxproj -Data/samples/RecordSet/RecordSet_vs100.vcxproj.filters -Data/samples/RecordSet/RecordSet_vs110.vcxproj -Data/samples/RecordSet/RecordSet_vs110.vcxproj.filters -Data/samples/RecordSet/RecordSet_vs120.vcxproj -Data/samples/RecordSet/RecordSet_vs120.vcxproj.filters -Data/samples/RecordSet/RecordSet_vs140.vcxproj -Data/samples/RecordSet/RecordSet_vs140.vcxproj.filters -Data/samples/RecordSet/RecordSet_vs90.vcproj -Data/samples/RecordSet/RecordSet_WEC2013_vs110.vcxproj -Data/samples/RecordSet/RecordSet_WEC2013_vs110.vcxproj.filters -Data/samples/RecordSet/RecordSet_WEC2013_vs120.vcxproj -Data/samples/RecordSet/RecordSet_WEC2013_vs120.vcxproj.filters -Data/samples/RecordSet/RecordSet_x64_vs100.vcxproj -Data/samples/RecordSet/RecordSet_x64_vs100.vcxproj.filters -Data/samples/RecordSet/RecordSet_x64_vs110.vcxproj -Data/samples/RecordSet/RecordSet_x64_vs110.vcxproj.filters -Data/samples/RecordSet/RecordSet_x64_vs120.vcxproj -Data/samples/RecordSet/RecordSet_x64_vs120.vcxproj.filters -Data/samples/RecordSet/RecordSet_x64_vs140.vcxproj -Data/samples/RecordSet/RecordSet_x64_vs140.vcxproj.filters -Data/samples/RecordSet/RecordSet_x64_vs90.vcproj -Data/samples/RecordSet/src -Data/samples/RecordSet/src/RecordSet.cpp -Data/samples/RowFormatter -Data/samples/RowFormatter/CMakeLists.txt -Data/samples/RowFormatter/Makefile -Data/samples/RowFormatter/RowFormatter.progen -Data/samples/RowFormatter/RowFormatter_CE_vs90.vcproj -Data/samples/RowFormatter/RowFormatter_vs100.vcxproj -Data/samples/RowFormatter/RowFormatter_vs100.vcxproj.filters -Data/samples/RowFormatter/RowFormatter_vs110.vcxproj -Data/samples/RowFormatter/RowFormatter_vs110.vcxproj.filters -Data/samples/RowFormatter/RowFormatter_vs120.vcxproj -Data/samples/RowFormatter/RowFormatter_vs120.vcxproj.filters -Data/samples/RowFormatter/RowFormatter_vs140.vcxproj -Data/samples/RowFormatter/RowFormatter_vs140.vcxproj.filters -Data/samples/RowFormatter/RowFormatter_vs90.vcproj -Data/samples/RowFormatter/RowFormatter_WEC2013_vs110.vcxproj -Data/samples/RowFormatter/RowFormatter_WEC2013_vs110.vcxproj.filters -Data/samples/RowFormatter/RowFormatter_WEC2013_vs120.vcxproj -Data/samples/RowFormatter/RowFormatter_WEC2013_vs120.vcxproj.filters -Data/samples/RowFormatter/RowFormatter_x64_vs100.vcxproj -Data/samples/RowFormatter/RowFormatter_x64_vs100.vcxproj.filters -Data/samples/RowFormatter/RowFormatter_x64_vs110.vcxproj -Data/samples/RowFormatter/RowFormatter_x64_vs110.vcxproj.filters -Data/samples/RowFormatter/RowFormatter_x64_vs120.vcxproj -Data/samples/RowFormatter/RowFormatter_x64_vs120.vcxproj.filters -Data/samples/RowFormatter/RowFormatter_x64_vs140.vcxproj -Data/samples/RowFormatter/RowFormatter_x64_vs140.vcxproj.filters -Data/samples/RowFormatter/RowFormatter_x64_vs90.vcproj -Data/samples/RowFormatter/src -Data/samples/RowFormatter/src/RowFormatter.cpp -Data/samples/samples.progen -Data/samples/samples_CE_vs90.sln -Data/samples/samples_vs100.sln -Data/samples/samples_vs110.sln -Data/samples/samples_vs120.sln -Data/samples/samples_vs140.sln -Data/samples/samples_vs90.sln -Data/samples/samples_WEC2013_vs110.sln -Data/samples/samples_WEC2013_vs120.sln -Data/samples/samples_x64_vs100.sln -Data/samples/samples_x64_vs110.sln -Data/samples/samples_x64_vs120.sln -Data/samples/samples_x64_vs140.sln -Data/samples/samples_x64_vs90.sln -Data/samples/Tuple -Data/samples/Tuple/CMakeLists.txt -Data/samples/Tuple/Makefile -Data/samples/Tuple/src -Data/samples/Tuple/src/Tuple.cpp -Data/samples/Tuple/Tuple.progen -Data/samples/Tuple/Tuple_CE_vs90.vcproj -Data/samples/Tuple/Tuple_vs100.vcxproj -Data/samples/Tuple/Tuple_vs100.vcxproj.filters -Data/samples/Tuple/Tuple_vs110.vcxproj -Data/samples/Tuple/Tuple_vs110.vcxproj.filters -Data/samples/Tuple/Tuple_vs120.vcxproj -Data/samples/Tuple/Tuple_vs120.vcxproj.filters -Data/samples/Tuple/Tuple_vs140.vcxproj -Data/samples/Tuple/Tuple_vs140.vcxproj.filters -Data/samples/Tuple/Tuple_vs90.vcproj -Data/samples/Tuple/Tuple_WEC2013_vs110.vcxproj -Data/samples/Tuple/Tuple_WEC2013_vs110.vcxproj.filters -Data/samples/Tuple/Tuple_WEC2013_vs120.vcxproj -Data/samples/Tuple/Tuple_WEC2013_vs120.vcxproj.filters -Data/samples/Tuple/Tuple_x64_vs100.vcxproj -Data/samples/Tuple/Tuple_x64_vs100.vcxproj.filters -Data/samples/Tuple/Tuple_x64_vs110.vcxproj -Data/samples/Tuple/Tuple_x64_vs110.vcxproj.filters -Data/samples/Tuple/Tuple_x64_vs120.vcxproj -Data/samples/Tuple/Tuple_x64_vs120.vcxproj.filters -Data/samples/Tuple/Tuple_x64_vs140.vcxproj -Data/samples/Tuple/Tuple_x64_vs140.vcxproj.filters -Data/samples/Tuple/Tuple_x64_vs90.vcproj -Data/samples/TypeHandler -Data/samples/TypeHandler/CMakeLists.txt -Data/samples/TypeHandler/Makefile -Data/samples/TypeHandler/src -Data/samples/TypeHandler/src/TypeHandler.cpp -Data/samples/TypeHandler/TypeHandler.progen -Data/samples/TypeHandler/TypeHandler_CE_vs90.vcproj -Data/samples/TypeHandler/TypeHandler_vs100.vcxproj -Data/samples/TypeHandler/TypeHandler_vs100.vcxproj.filters -Data/samples/TypeHandler/TypeHandler_vs110.vcxproj -Data/samples/TypeHandler/TypeHandler_vs110.vcxproj.filters -Data/samples/TypeHandler/TypeHandler_vs120.vcxproj -Data/samples/TypeHandler/TypeHandler_vs120.vcxproj.filters -Data/samples/TypeHandler/TypeHandler_vs140.vcxproj -Data/samples/TypeHandler/TypeHandler_vs140.vcxproj.filters -Data/samples/TypeHandler/TypeHandler_vs90.vcproj -Data/samples/TypeHandler/TypeHandler_WEC2013_vs110.vcxproj -Data/samples/TypeHandler/TypeHandler_WEC2013_vs110.vcxproj.filters -Data/samples/TypeHandler/TypeHandler_WEC2013_vs120.vcxproj -Data/samples/TypeHandler/TypeHandler_WEC2013_vs120.vcxproj.filters -Data/samples/TypeHandler/TypeHandler_x64_vs100.vcxproj -Data/samples/TypeHandler/TypeHandler_x64_vs100.vcxproj.filters -Data/samples/TypeHandler/TypeHandler_x64_vs110.vcxproj -Data/samples/TypeHandler/TypeHandler_x64_vs110.vcxproj.filters -Data/samples/TypeHandler/TypeHandler_x64_vs120.vcxproj -Data/samples/TypeHandler/TypeHandler_x64_vs120.vcxproj.filters -Data/samples/TypeHandler/TypeHandler_x64_vs140.vcxproj -Data/samples/TypeHandler/TypeHandler_x64_vs140.vcxproj.filters -Data/samples/TypeHandler/TypeHandler_x64_vs90.vcproj -Data/samples/WebNotifier -Data/samples/WebNotifier/CMakeLists.txt -Data/samples/WebNotifier/Makefile -Data/samples/WebNotifier/src -Data/samples/WebNotifier/src/WebNotifier.cpp -Data/samples/WebNotifier/WebNotifier.progen -Data/samples/WebNotifier/WebNotifier_CE_vs90.vcproj -Data/samples/WebNotifier/WebNotifier_vs100.vcxproj -Data/samples/WebNotifier/WebNotifier_vs100.vcxproj.filters -Data/samples/WebNotifier/WebNotifier_vs110.vcxproj -Data/samples/WebNotifier/WebNotifier_vs110.vcxproj.filters -Data/samples/WebNotifier/WebNotifier_vs120.vcxproj -Data/samples/WebNotifier/WebNotifier_vs120.vcxproj.filters -Data/samples/WebNotifier/WebNotifier_vs140.vcxproj -Data/samples/WebNotifier/WebNotifier_vs140.vcxproj.filters -Data/samples/WebNotifier/WebNotifier_vs90.vcproj -Data/samples/WebNotifier/WebNotifier_WEC2013_vs110.vcxproj -Data/samples/WebNotifier/WebNotifier_WEC2013_vs110.vcxproj.filters -Data/samples/WebNotifier/WebNotifier_WEC2013_vs120.vcxproj -Data/samples/WebNotifier/WebNotifier_WEC2013_vs120.vcxproj.filters -Data/samples/WebNotifier/WebNotifier_x64_vs100.vcxproj -Data/samples/WebNotifier/WebNotifier_x64_vs100.vcxproj.filters -Data/samples/WebNotifier/WebNotifier_x64_vs110.vcxproj -Data/samples/WebNotifier/WebNotifier_x64_vs110.vcxproj.filters -Data/samples/WebNotifier/WebNotifier_x64_vs120.vcxproj -Data/samples/WebNotifier/WebNotifier_x64_vs120.vcxproj.filters -Data/samples/WebNotifier/WebNotifier_x64_vs140.vcxproj -Data/samples/WebNotifier/WebNotifier_x64_vs140.vcxproj.filters -Data/samples/WebNotifier/WebNotifier_x64_vs90.vcproj -Data/SQLite -Data/SQLite/cmake -Data/SQLite/cmake/PocoDataSQLiteConfig.cmake -Data/SQLite/CMakeLists.txt -Data/SQLite/include -Data/SQLite/include/Poco -Data/SQLite/include/Poco/Data -Data/SQLite/include/Poco/Data/SQLite -Data/SQLite/include/Poco/Data/SQLite/Binder.h -Data/SQLite/include/Poco/Data/SQLite/Connector.h -Data/SQLite/include/Poco/Data/SQLite/Extractor.h -Data/SQLite/include/Poco/Data/SQLite/Notifier.h -Data/SQLite/include/Poco/Data/SQLite/SessionImpl.h -Data/SQLite/include/Poco/Data/SQLite/SQLite.h -Data/SQLite/include/Poco/Data/SQLite/SQLiteException.h -Data/SQLite/include/Poco/Data/SQLite/SQLiteStatementImpl.h -Data/SQLite/include/Poco/Data/SQLite/Utility.h -Data/SQLite/Makefile -Data/SQLite/SQLite.progen -Data/SQLite/SQLite_CE_vs90.sln -Data/SQLite/SQLite_CE_vs90.vcproj -Data/SQLite/SQLite_vs100.sln -Data/SQLite/SQLite_vs100.vcxproj -Data/SQLite/SQLite_vs100.vcxproj.filters -Data/SQLite/SQLite_vs110.sln -Data/SQLite/SQLite_vs110.vcxproj -Data/SQLite/SQLite_vs110.vcxproj.filters -Data/SQLite/SQLite_vs120.sln -Data/SQLite/SQLite_vs120.vcxproj -Data/SQLite/SQLite_vs120.vcxproj.filters -Data/SQLite/SQLite_vs140.sln -Data/SQLite/SQLite_vs140.vcxproj -Data/SQLite/SQLite_vs140.vcxproj.filters -Data/SQLite/SQLite_VS90.sln -Data/SQLite/SQLite_VS90.vcproj -Data/SQLite/SQLite_WEC2013_vs110.sln -Data/SQLite/SQLite_WEC2013_vs110.vcxproj -Data/SQLite/SQLite_WEC2013_vs110.vcxproj.filters -Data/SQLite/SQLite_WEC2013_vs120.sln -Data/SQLite/SQLite_WEC2013_vs120.vcxproj -Data/SQLite/SQLite_WEC2013_vs120.vcxproj.filters -Data/SQLite/SQLite_x64_vs100.sln -Data/SQLite/SQLite_x64_vs100.vcxproj -Data/SQLite/SQLite_x64_vs100.vcxproj.filters -Data/SQLite/SQLite_x64_vs110.sln -Data/SQLite/SQLite_x64_vs110.vcxproj -Data/SQLite/SQLite_x64_vs110.vcxproj.filters -Data/SQLite/SQLite_x64_vs120.sln -Data/SQLite/SQLite_x64_vs120.vcxproj -Data/SQLite/SQLite_x64_vs120.vcxproj.filters -Data/SQLite/SQLite_x64_vs140.sln -Data/SQLite/SQLite_x64_vs140.vcxproj -Data/SQLite/SQLite_x64_vs140.vcxproj.filters -Data/SQLite/SQLite_x64_vs90.sln -Data/SQLite/SQLite_x64_vs90.vcproj -Data/SQLite/src -Data/SQLite/src/Binder.cpp -Data/SQLite/src/Connector.cpp -Data/SQLite/src/Extractor.cpp -Data/SQLite/src/Notifier.cpp -Data/SQLite/src/SessionImpl.cpp -Data/SQLite/src/sqlite3.c -Data/SQLite/src/sqlite3.h -Data/SQLite/src/SQLiteException.cpp -Data/SQLite/src/SQLiteStatementImpl.cpp -Data/SQLite/src/Utility.cpp -Data/SQLite/testsuite -Data/SQLite/testsuite/CMakeLists.txt -Data/SQLite/testsuite/Makefile -Data/SQLite/testsuite/src -Data/SQLite/testsuite/src/Driver.cpp -Data/SQLite/testsuite/src/SQLiteTest.cpp -Data/SQLite/testsuite/src/SQLiteTest.h -Data/SQLite/testsuite/src/SQLiteTestSuite.cpp -Data/SQLite/testsuite/src/SQLiteTestSuite.h -Data/SQLite/testsuite/src/WinCEDriver.cpp -Data/SQLite/testsuite/src/WinDriver.cpp -Data/SQLite/testsuite/TestSuite.progen -Data/SQLite/testsuite/TestSuite_CE_vs90.vcproj -Data/SQLite/testsuite/TestSuite_vs100.vcxproj -Data/SQLite/testsuite/TestSuite_vs100.vcxproj.filters -Data/SQLite/testsuite/TestSuite_vs110.vcxproj -Data/SQLite/testsuite/TestSuite_vs110.vcxproj.filters -Data/SQLite/testsuite/TestSuite_vs120.vcxproj -Data/SQLite/testsuite/TestSuite_vs120.vcxproj.filters -Data/SQLite/testsuite/TestSuite_vs140.vcxproj -Data/SQLite/testsuite/TestSuite_vs140.vcxproj.filters -Data/SQLite/testsuite/TestSuite_VS90.vcproj -Data/SQLite/testsuite/TestSuite_WEC2013_vs110.vcxproj -Data/SQLite/testsuite/TestSuite_WEC2013_vs110.vcxproj.filters -Data/SQLite/testsuite/TestSuite_WEC2013_vs120.vcxproj -Data/SQLite/testsuite/TestSuite_WEC2013_vs120.vcxproj.filters -Data/SQLite/testsuite/TestSuite_x64_vs100.vcxproj -Data/SQLite/testsuite/TestSuite_x64_vs100.vcxproj.filters -Data/SQLite/testsuite/TestSuite_x64_vs110.vcxproj -Data/SQLite/testsuite/TestSuite_x64_vs110.vcxproj.filters -Data/SQLite/testsuite/TestSuite_x64_vs120.vcxproj -Data/SQLite/testsuite/TestSuite_x64_vs120.vcxproj.filters -Data/SQLite/testsuite/TestSuite_x64_vs140.vcxproj -Data/SQLite/testsuite/TestSuite_x64_vs140.vcxproj.filters -Data/SQLite/testsuite/TestSuite_x64_vs90.vcproj -Data/src -Data/src/AbstractBinder.cpp -Data/src/AbstractBinding.cpp -Data/src/AbstractExtraction.cpp -Data/src/AbstractExtractor.cpp -Data/src/AbstractPreparation.cpp -Data/src/AbstractPreparator.cpp -Data/src/ArchiveStrategy.cpp -Data/src/Bulk.cpp -Data/src/Connector.cpp -Data/src/DataException.cpp -Data/src/Date.cpp -Data/src/DynamicLOB.cpp -Data/src/Limit.cpp -Data/src/MetaColumn.cpp -Data/src/PooledSessionHolder.cpp -Data/src/PooledSessionImpl.cpp -Data/src/Position.cpp -Data/src/Range.cpp -Data/src/RecordSet.cpp -Data/src/Row.cpp -Data/src/RowFilter.cpp -Data/src/RowFormatter.cpp -Data/src/RowIterator.cpp -Data/src/Session.cpp -Data/src/SessionFactory.cpp -Data/src/SessionImpl.cpp -Data/src/SessionPool.cpp -Data/src/SessionPoolContainer.cpp -Data/src/SimpleRowFormatter.cpp -Data/src/SQLChannel.cpp -Data/src/Statement.cpp -Data/src/StatementCreator.cpp -Data/src/StatementImpl.cpp -Data/src/Time.cpp -Data/src/Transaction.cpp -Data/testsuite -Data/testsuite/CMakeLists.txt -Data/testsuite/Makefile -Data/testsuite/src -Data/testsuite/src/Binder.cpp -Data/testsuite/src/Binder.h -Data/testsuite/src/Connector.cpp -Data/testsuite/src/Connector.h -Data/testsuite/src/DataTest.cpp -Data/testsuite/src/DataTest.h -Data/testsuite/src/DataTestSuite.cpp -Data/testsuite/src/DataTestSuite.h -Data/testsuite/src/Driver.cpp -Data/testsuite/src/Extractor.cpp -Data/testsuite/src/Extractor.h -Data/testsuite/src/Preparator.cpp -Data/testsuite/src/Preparator.h -Data/testsuite/src/SessionImpl.cpp -Data/testsuite/src/SessionImpl.h -Data/testsuite/src/SessionPoolTest.cpp -Data/testsuite/src/SessionPoolTest.h -Data/testsuite/src/StatementImpl.cpp -Data/testsuite/src/StatementImpl.h -Data/testsuite/src/TestStatementImpl.cpp -Data/testsuite/src/TestStatementImpl.h -Data/testsuite/src/WinCEDriver.cpp -Data/testsuite/src/WinDriver.cpp -Data/testsuite/TestSuite.progen -Data/testsuite/TestSuite_CE_vs90.vcproj -Data/testsuite/TestSuite_vs100.vcxproj -Data/testsuite/TestSuite_vs100.vcxproj.filters -Data/testsuite/TestSuite_vs110.vcxproj -Data/testsuite/TestSuite_vs110.vcxproj.filters -Data/testsuite/TestSuite_vs120.vcxproj -Data/testsuite/TestSuite_vs120.vcxproj.filters -Data/testsuite/TestSuite_vs140.vcxproj -Data/testsuite/TestSuite_vs140.vcxproj.filters -Data/testsuite/TestSuite_VS90.vcproj -Data/testsuite/TestSuite_WEC2013_vs110.vcxproj -Data/testsuite/TestSuite_WEC2013_vs110.vcxproj.filters -Data/testsuite/TestSuite_WEC2013_vs120.vcxproj -Data/testsuite/TestSuite_WEC2013_vs120.vcxproj.filters -Data/testsuite/TestSuite_x64_vs100.vcxproj -Data/testsuite/TestSuite_x64_vs100.vcxproj.filters -Data/testsuite/TestSuite_x64_vs110.vcxproj -Data/testsuite/TestSuite_x64_vs110.vcxproj.filters -Data/testsuite/TestSuite_x64_vs120.vcxproj -Data/testsuite/TestSuite_x64_vs120.vcxproj.filters -Data/testsuite/TestSuite_x64_vs140.vcxproj -Data/testsuite/TestSuite_x64_vs140.vcxproj.filters -Data/testsuite/TestSuite_x64_vs90.vcproj -DLLVersion.rc -doc -doc/00100-GuidedTour.page -doc/00200-GettingStarted.page -doc/80100-HowToGetHelp.page -doc/90100-Acknowledgements.page -doc/99100-ReleaseNotes.page -doc/99150-GMakeBuildNotes.page -doc/99150-WindowsPlatformNotes.page -doc/99200-WinCEPlatformNotes.page -doc/99250-VxWorksPlatformNotes.page -doc/99300-AndroidPlatformNotes.page -doc/Acknowledgements.html -Foundation -Foundation/cmake -Foundation/cmake/PocoFoundationConfig.cmake -Foundation/CMakeLists.txt -Foundation/Foundation.vxbuild -Foundation/Foundation_CE_vs90.sln -Foundation/Foundation_CE_vs90.vcproj -Foundation/Foundation_vs100.sln -Foundation/Foundation_vs100.vcxproj -Foundation/Foundation_vs100.vcxproj.filters -Foundation/Foundation_vs110.sln -Foundation/Foundation_vs110.vcxproj -Foundation/Foundation_vs110.vcxproj.filters -Foundation/Foundation_vs120.sln -Foundation/Foundation_vs120.vcxproj -Foundation/Foundation_vs120.vcxproj.filters -Foundation/Foundation_vs140.sln -Foundation/Foundation_vs140.vcxproj -Foundation/Foundation_vs140.vcxproj.filters -Foundation/Foundation_vs90.sln -Foundation/Foundation_vs90.vcproj -Foundation/Foundation_WEC2013_vs110.sln -Foundation/Foundation_WEC2013_vs110.vcxproj -Foundation/Foundation_WEC2013_vs110.vcxproj.filters -Foundation/Foundation_WEC2013_vs120.sln -Foundation/Foundation_WEC2013_vs120.vcxproj -Foundation/Foundation_WEC2013_vs120.vcxproj.filters -Foundation/Foundation_x64_vs100.sln -Foundation/Foundation_x64_vs100.vcxproj -Foundation/Foundation_x64_vs100.vcxproj.filters -Foundation/Foundation_x64_vs110.sln -Foundation/Foundation_x64_vs110.vcxproj -Foundation/Foundation_x64_vs110.vcxproj.filters -Foundation/Foundation_x64_vs120.sln -Foundation/Foundation_x64_vs120.vcxproj -Foundation/Foundation_x64_vs120.vcxproj.filters -Foundation/Foundation_x64_vs140.sln -Foundation/Foundation_x64_vs140.vcxproj -Foundation/Foundation_x64_vs140.vcxproj.filters -Foundation/Foundation_x64_vs90.sln -Foundation/Foundation_x64_vs90.vcproj -Foundation/include -Foundation/include/Poco -Foundation/include/Poco/AbstractCache.h -Foundation/include/Poco/AbstractDelegate.h -Foundation/include/Poco/AbstractEvent.h -Foundation/include/Poco/AbstractObserver.h -Foundation/include/Poco/AbstractPriorityDelegate.h -Foundation/include/Poco/AbstractStrategy.h -Foundation/include/Poco/AccessExpirationDecorator.h -Foundation/include/Poco/AccessExpireCache.h -Foundation/include/Poco/AccessExpireLRUCache.h -Foundation/include/Poco/AccessExpireStrategy.h -Foundation/include/Poco/ActiveDispatcher.h -Foundation/include/Poco/ActiveMethod.h -Foundation/include/Poco/ActiveResult.h -Foundation/include/Poco/ActiveRunnable.h -Foundation/include/Poco/ActiveStarter.h -Foundation/include/Poco/Activity.h -Foundation/include/Poco/Alignment.h -Foundation/include/Poco/Any.h -Foundation/include/Poco/ArchiveStrategy.h -Foundation/include/Poco/Array.h -Foundation/include/Poco/Ascii.h -Foundation/include/Poco/ASCIIEncoding.h -Foundation/include/Poco/AsyncChannel.h -Foundation/include/Poco/AtomicCounter.h -Foundation/include/Poco/AutoPtr.h -Foundation/include/Poco/AutoReleasePool.h -Foundation/include/Poco/Base32Decoder.h -Foundation/include/Poco/Base32Encoder.h -Foundation/include/Poco/Base64Decoder.h -Foundation/include/Poco/Base64Encoder.h -Foundation/include/Poco/BasicEvent.h -Foundation/include/Poco/BinaryReader.h -Foundation/include/Poco/BinaryWriter.h -Foundation/include/Poco/Buffer.h -Foundation/include/Poco/BufferAllocator.h -Foundation/include/Poco/BufferedBidirectionalStreamBuf.h -Foundation/include/Poco/BufferedStreamBuf.h -Foundation/include/Poco/Bugcheck.h -Foundation/include/Poco/ByteOrder.h -Foundation/include/Poco/Channel.h -Foundation/include/Poco/Checksum.h -Foundation/include/Poco/ClassLibrary.h -Foundation/include/Poco/ClassLoader.h -Foundation/include/Poco/Clock.h -Foundation/include/Poco/Condition.h -Foundation/include/Poco/Config.h -Foundation/include/Poco/Configurable.h -Foundation/include/Poco/ConsoleChannel.h -Foundation/include/Poco/CountingStream.h -Foundation/include/Poco/DateTime.h -Foundation/include/Poco/DateTimeFormat.h -Foundation/include/Poco/DateTimeFormatter.h -Foundation/include/Poco/DateTimeParser.h -Foundation/include/Poco/Debugger.h -Foundation/include/Poco/DefaultStrategy.h -Foundation/include/Poco/DeflatingStream.h -Foundation/include/Poco/Delegate.h -Foundation/include/Poco/DigestEngine.h -Foundation/include/Poco/DigestStream.h -Foundation/include/Poco/DirectoryIterator.h -Foundation/include/Poco/DirectoryIterator_UNIX.h -Foundation/include/Poco/DirectoryIterator_VMS.h -Foundation/include/Poco/DirectoryIterator_WIN32.h -Foundation/include/Poco/DirectoryIterator_WIN32U.h -Foundation/include/Poco/DirectoryIteratorStrategy.h -Foundation/include/Poco/DirectoryWatcher.h -Foundation/include/Poco/Dynamic -Foundation/include/Poco/Dynamic/Pair.h -Foundation/include/Poco/Dynamic/Struct.h -Foundation/include/Poco/Dynamic/Var.h -Foundation/include/Poco/Dynamic/VarHolder.h -Foundation/include/Poco/Dynamic/VarIterator.h -Foundation/include/Poco/DynamicAny.h -Foundation/include/Poco/DynamicAnyHolder.h -Foundation/include/Poco/DynamicFactory.h -Foundation/include/Poco/DynamicStruct.h -Foundation/include/Poco/Environment.h -Foundation/include/Poco/Environment_UNIX.h -Foundation/include/Poco/Environment_VMS.h -Foundation/include/Poco/Environment_VX.h -Foundation/include/Poco/Environment_WIN32.h -Foundation/include/Poco/Environment_WIN32U.h -Foundation/include/Poco/Environment_WINCE.h -Foundation/include/Poco/Error.h -Foundation/include/Poco/ErrorHandler.h -Foundation/include/Poco/Event.h -Foundation/include/Poco/Event_POSIX.h -Foundation/include/Poco/Event_VX.h -Foundation/include/Poco/Event_WIN32.h -Foundation/include/Poco/EventArgs.h -Foundation/include/Poco/EventLogChannel.h -Foundation/include/Poco/Exception.h -Foundation/include/Poco/ExpirationDecorator.h -Foundation/include/Poco/Expire.h -Foundation/include/Poco/ExpireCache.h -Foundation/include/Poco/ExpireLRUCache.h -Foundation/include/Poco/ExpireStrategy.h -Foundation/include/Poco/FIFOBuffer.h -Foundation/include/Poco/FIFOBufferStream.h -Foundation/include/Poco/FIFOEvent.h -Foundation/include/Poco/FIFOStrategy.h -Foundation/include/Poco/File.h -Foundation/include/Poco/File_UNIX.h -Foundation/include/Poco/File_VMS.h -Foundation/include/Poco/File_VX.h -Foundation/include/Poco/File_WIN32.h -Foundation/include/Poco/File_WIN32U.h -Foundation/include/Poco/File_WINCE.h -Foundation/include/Poco/FileChannel.h -Foundation/include/Poco/FileStream.h -Foundation/include/Poco/FileStream_POSIX.h -Foundation/include/Poco/FileStream_WIN32.h -Foundation/include/Poco/FileStreamFactory.h -Foundation/include/Poco/Format.h -Foundation/include/Poco/Formatter.h -Foundation/include/Poco/FormattingChannel.h -Foundation/include/Poco/Foundation.h -Foundation/include/Poco/FPEnvironment.h -Foundation/include/Poco/FPEnvironment_C99.h -Foundation/include/Poco/FPEnvironment_DEC.h -Foundation/include/Poco/FPEnvironment_DUMMY.h -Foundation/include/Poco/FPEnvironment_SUN.h -Foundation/include/Poco/FPEnvironment_WIN32.h -Foundation/include/Poco/FunctionDelegate.h -Foundation/include/Poco/FunctionPriorityDelegate.h -Foundation/include/Poco/Glob.h -Foundation/include/Poco/Hash.h -Foundation/include/Poco/HashFunction.h -Foundation/include/Poco/HashMap.h -Foundation/include/Poco/HashSet.h -Foundation/include/Poco/HashStatistic.h -Foundation/include/Poco/HashTable.h -Foundation/include/Poco/HexBinaryDecoder.h -Foundation/include/Poco/HexBinaryEncoder.h -Foundation/include/Poco/HMACEngine.h -Foundation/include/Poco/InflatingStream.h -Foundation/include/Poco/Instantiator.h -Foundation/include/Poco/KeyValueArgs.h -Foundation/include/Poco/Latin1Encoding.h -Foundation/include/Poco/Latin2Encoding.h -Foundation/include/Poco/Latin9Encoding.h -Foundation/include/Poco/LinearHashTable.h -Foundation/include/Poco/LineEndingConverter.h -Foundation/include/Poco/ListMap.h -Foundation/include/Poco/LocalDateTime.h -Foundation/include/Poco/LogFile.h -Foundation/include/Poco/LogFile_STD.h -Foundation/include/Poco/LogFile_VMS.h -Foundation/include/Poco/LogFile_WIN32.h -Foundation/include/Poco/LogFile_WIN32U.h -Foundation/include/Poco/Logger.h -Foundation/include/Poco/LoggingFactory.h -Foundation/include/Poco/LoggingRegistry.h -Foundation/include/Poco/LogStream.h -Foundation/include/Poco/LRUCache.h -Foundation/include/Poco/LRUStrategy.h -Foundation/include/Poco/Manifest.h -Foundation/include/Poco/MD4Engine.h -Foundation/include/Poco/MD5Engine.h -Foundation/include/Poco/MemoryPool.h -Foundation/include/Poco/MemoryStream.h -Foundation/include/Poco/Message.h -Foundation/include/Poco/MetaObject.h -Foundation/include/Poco/MetaProgramming.h -Foundation/include/Poco/Mutex.h -Foundation/include/Poco/Mutex_POSIX.h -Foundation/include/Poco/Mutex_VX.h -Foundation/include/Poco/Mutex_WIN32.h -Foundation/include/Poco/Mutex_WINCE.h -Foundation/include/Poco/NamedEvent.h -Foundation/include/Poco/NamedEvent_Android.h -Foundation/include/Poco/NamedEvent_UNIX.h -Foundation/include/Poco/NamedEvent_VMS.h -Foundation/include/Poco/NamedEvent_WIN32.h -Foundation/include/Poco/NamedEvent_WIN32U.h -Foundation/include/Poco/NamedMutex.h -Foundation/include/Poco/NamedMutex_Android.h -Foundation/include/Poco/NamedMutex_UNIX.h -Foundation/include/Poco/NamedMutex_VMS.h -Foundation/include/Poco/NamedMutex_WIN32.h -Foundation/include/Poco/NamedMutex_WIN32U.h -Foundation/include/Poco/NamedTuple.h -Foundation/include/Poco/NestedDiagnosticContext.h -Foundation/include/Poco/NObserver.h -Foundation/include/Poco/Notification.h -Foundation/include/Poco/NotificationCenter.h -Foundation/include/Poco/NotificationQueue.h -Foundation/include/Poco/NotificationStrategy.h -Foundation/include/Poco/Nullable.h -Foundation/include/Poco/NullChannel.h -Foundation/include/Poco/NullStream.h -Foundation/include/Poco/NumberFormatter.h -Foundation/include/Poco/NumberParser.h -Foundation/include/Poco/NumericString.h -Foundation/include/Poco/ObjectPool.h -Foundation/include/Poco/Observer.h -Foundation/include/Poco/OpcomChannel.h -Foundation/include/Poco/Optional.h -Foundation/include/Poco/Path.h -Foundation/include/Poco/Path_UNIX.h -Foundation/include/Poco/Path_VMS.h -Foundation/include/Poco/Path_WIN32.h -Foundation/include/Poco/Path_WIN32U.h -Foundation/include/Poco/Path_WINCE.h -Foundation/include/Poco/PatternFormatter.h -Foundation/include/Poco/PBKDF2Engine.h -Foundation/include/Poco/Pipe.h -Foundation/include/Poco/PipeImpl.h -Foundation/include/Poco/PipeImpl_DUMMY.h -Foundation/include/Poco/PipeImpl_POSIX.h -Foundation/include/Poco/PipeImpl_WIN32.h -Foundation/include/Poco/PipeStream.h -Foundation/include/Poco/Platform.h -Foundation/include/Poco/Platform_POSIX.h -Foundation/include/Poco/Platform_VMS.h -Foundation/include/Poco/Platform_VX.h -Foundation/include/Poco/Platform_WIN32.h -Foundation/include/Poco/Poco.h -Foundation/include/Poco/PriorityDelegate.h -Foundation/include/Poco/PriorityEvent.h -Foundation/include/Poco/PriorityExpire.h -Foundation/include/Poco/PriorityNotificationQueue.h -Foundation/include/Poco/PriorityStrategy.h -Foundation/include/Poco/Process.h -Foundation/include/Poco/Process_UNIX.h -Foundation/include/Poco/Process_VMS.h -Foundation/include/Poco/Process_VX.h -Foundation/include/Poco/Process_WIN32.h -Foundation/include/Poco/Process_WIN32U.h -Foundation/include/Poco/Process_WINCE.h -Foundation/include/Poco/PurgeStrategy.h -Foundation/include/Poco/Random.h -Foundation/include/Poco/RandomStream.h -Foundation/include/Poco/RecursiveDirectoryIterator.h -Foundation/include/Poco/RecursiveDirectoryIteratorImpl.h -Foundation/include/Poco/RefCountedObject.h -Foundation/include/Poco/RegularExpression.h -Foundation/include/Poco/RotateStrategy.h -Foundation/include/Poco/Runnable.h -Foundation/include/Poco/RunnableAdapter.h -Foundation/include/Poco/RWLock.h -Foundation/include/Poco/RWLock_Android.h -Foundation/include/Poco/RWLock_POSIX.h -Foundation/include/Poco/RWLock_VX.h -Foundation/include/Poco/RWLock_WIN32.h -Foundation/include/Poco/RWLock_WINCE.h -Foundation/include/Poco/ScopedLock.h -Foundation/include/Poco/ScopedUnlock.h -Foundation/include/Poco/Semaphore.h -Foundation/include/Poco/Semaphore_POSIX.h -Foundation/include/Poco/Semaphore_VX.h -Foundation/include/Poco/Semaphore_WIN32.h -Foundation/include/Poco/SHA1Engine.h -Foundation/include/Poco/SharedLibrary.h -Foundation/include/Poco/SharedLibrary_HPUX.h -Foundation/include/Poco/SharedLibrary_UNIX.h -Foundation/include/Poco/SharedLibrary_VMS.h -Foundation/include/Poco/SharedLibrary_VX.h -Foundation/include/Poco/SharedLibrary_WIN32.h -Foundation/include/Poco/SharedLibrary_WIN32U.h -Foundation/include/Poco/SharedMemory.h -Foundation/include/Poco/SharedMemory_DUMMY.h -Foundation/include/Poco/SharedMemory_POSIX.h -Foundation/include/Poco/SharedMemory_WIN32.h -Foundation/include/Poco/SharedPtr.h -Foundation/include/Poco/SignalHandler.h -Foundation/include/Poco/SimpleFileChannel.h -Foundation/include/Poco/SimpleHashTable.h -Foundation/include/Poco/SingletonHolder.h -Foundation/include/Poco/SortedDirectoryIterator.h -Foundation/include/Poco/SplitterChannel.h -Foundation/include/Poco/Stopwatch.h -Foundation/include/Poco/StrategyCollection.h -Foundation/include/Poco/StreamChannel.h -Foundation/include/Poco/StreamConverter.h -Foundation/include/Poco/StreamCopier.h -Foundation/include/Poco/StreamTokenizer.h -Foundation/include/Poco/StreamUtil.h -Foundation/include/Poco/String.h -Foundation/include/Poco/StringTokenizer.h -Foundation/include/Poco/SynchronizedObject.h -Foundation/include/Poco/SyslogChannel.h -Foundation/include/Poco/Task.h -Foundation/include/Poco/TaskManager.h -Foundation/include/Poco/TaskNotification.h -Foundation/include/Poco/TeeStream.h -Foundation/include/Poco/TemporaryFile.h -Foundation/include/Poco/TextBufferIterator.h -Foundation/include/Poco/TextConverter.h -Foundation/include/Poco/TextEncoding.h -Foundation/include/Poco/TextIterator.h -Foundation/include/Poco/Thread.h -Foundation/include/Poco/Thread_POSIX.h -Foundation/include/Poco/Thread_VX.h -Foundation/include/Poco/Thread_WIN32.h -Foundation/include/Poco/Thread_WINCE.h -Foundation/include/Poco/ThreadLocal.h -Foundation/include/Poco/ThreadPool.h -Foundation/include/Poco/ThreadTarget.h -Foundation/include/Poco/TimedNotificationQueue.h -Foundation/include/Poco/Timer.h -Foundation/include/Poco/Timespan.h -Foundation/include/Poco/Timestamp.h -Foundation/include/Poco/Timezone.h -Foundation/include/Poco/Token.h -Foundation/include/Poco/Tuple.h -Foundation/include/Poco/TypeList.h -Foundation/include/Poco/Types.h -Foundation/include/Poco/UnbufferedStreamBuf.h -Foundation/include/Poco/Unicode.h -Foundation/include/Poco/UnicodeConverter.h -Foundation/include/Poco/UniqueAccessExpireCache.h -Foundation/include/Poco/UniqueAccessExpireLRUCache.h -Foundation/include/Poco/UniqueAccessExpireStrategy.h -Foundation/include/Poco/UniqueExpireCache.h -Foundation/include/Poco/UniqueExpireLRUCache.h -Foundation/include/Poco/UniqueExpireStrategy.h -Foundation/include/Poco/UnWindows.h -Foundation/include/Poco/URI.h -Foundation/include/Poco/URIStreamFactory.h -Foundation/include/Poco/URIStreamOpener.h -Foundation/include/Poco/UTF16Encoding.h -Foundation/include/Poco/UTF32Encoding.h -Foundation/include/Poco/UTF8Encoding.h -Foundation/include/Poco/UTF8String.h -Foundation/include/Poco/UTFString.h -Foundation/include/Poco/UUID.h -Foundation/include/Poco/UUIDGenerator.h -Foundation/include/Poco/ValidArgs.h -Foundation/include/Poco/Version.h -Foundation/include/Poco/Void.h -Foundation/include/Poco/Windows1250Encoding.h -Foundation/include/Poco/Windows1251Encoding.h -Foundation/include/Poco/Windows1252Encoding.h -Foundation/include/Poco/WindowsConsoleChannel.h -Foundation/include/Poco/zconf.h -Foundation/include/Poco/zlib.h -Foundation/Makefile -Foundation/samples -Foundation/samples/ActiveMethod -Foundation/samples/ActiveMethod/ActiveMethod.progen -Foundation/samples/ActiveMethod/ActiveMethod_CE_vs90.vcproj -Foundation/samples/ActiveMethod/ActiveMethod_vs100.vcxproj -Foundation/samples/ActiveMethod/ActiveMethod_vs100.vcxproj.filters -Foundation/samples/ActiveMethod/ActiveMethod_vs110.vcxproj -Foundation/samples/ActiveMethod/ActiveMethod_vs110.vcxproj.filters -Foundation/samples/ActiveMethod/ActiveMethod_vs120.vcxproj -Foundation/samples/ActiveMethod/ActiveMethod_vs120.vcxproj.filters -Foundation/samples/ActiveMethod/ActiveMethod_vs140.vcxproj -Foundation/samples/ActiveMethod/ActiveMethod_vs140.vcxproj.filters -Foundation/samples/ActiveMethod/ActiveMethod_vs90.vcproj -Foundation/samples/ActiveMethod/ActiveMethod_WEC2013_vs110.vcxproj -Foundation/samples/ActiveMethod/ActiveMethod_WEC2013_vs110.vcxproj.filters -Foundation/samples/ActiveMethod/ActiveMethod_WEC2013_vs120.vcxproj -Foundation/samples/ActiveMethod/ActiveMethod_WEC2013_vs120.vcxproj.filters -Foundation/samples/ActiveMethod/ActiveMethod_x64_vs100.vcxproj -Foundation/samples/ActiveMethod/ActiveMethod_x64_vs100.vcxproj.filters -Foundation/samples/ActiveMethod/ActiveMethod_x64_vs110.vcxproj -Foundation/samples/ActiveMethod/ActiveMethod_x64_vs110.vcxproj.filters -Foundation/samples/ActiveMethod/ActiveMethod_x64_vs120.vcxproj -Foundation/samples/ActiveMethod/ActiveMethod_x64_vs120.vcxproj.filters -Foundation/samples/ActiveMethod/ActiveMethod_x64_vs140.vcxproj -Foundation/samples/ActiveMethod/ActiveMethod_x64_vs140.vcxproj.filters -Foundation/samples/ActiveMethod/ActiveMethod_x64_vs90.vcproj -Foundation/samples/ActiveMethod/CMakeLists.txt -Foundation/samples/ActiveMethod/Makefile -Foundation/samples/ActiveMethod/src -Foundation/samples/ActiveMethod/src/ActiveMethod.cpp -Foundation/samples/Activity -Foundation/samples/Activity/Activity.progen -Foundation/samples/Activity/Activity_CE_vs90.vcproj -Foundation/samples/Activity/Activity_vs100.vcxproj -Foundation/samples/Activity/Activity_vs100.vcxproj.filters -Foundation/samples/Activity/Activity_vs110.vcxproj -Foundation/samples/Activity/Activity_vs110.vcxproj.filters -Foundation/samples/Activity/Activity_vs120.vcxproj -Foundation/samples/Activity/Activity_vs120.vcxproj.filters -Foundation/samples/Activity/Activity_vs140.vcxproj -Foundation/samples/Activity/Activity_vs140.vcxproj.filters -Foundation/samples/Activity/Activity_vs90.vcproj -Foundation/samples/Activity/Activity_WEC2013_vs110.vcxproj -Foundation/samples/Activity/Activity_WEC2013_vs110.vcxproj.filters -Foundation/samples/Activity/Activity_WEC2013_vs120.vcxproj -Foundation/samples/Activity/Activity_WEC2013_vs120.vcxproj.filters -Foundation/samples/Activity/Activity_x64_vs100.vcxproj -Foundation/samples/Activity/Activity_x64_vs100.vcxproj.filters -Foundation/samples/Activity/Activity_x64_vs110.vcxproj -Foundation/samples/Activity/Activity_x64_vs110.vcxproj.filters -Foundation/samples/Activity/Activity_x64_vs120.vcxproj -Foundation/samples/Activity/Activity_x64_vs120.vcxproj.filters -Foundation/samples/Activity/Activity_x64_vs140.vcxproj -Foundation/samples/Activity/Activity_x64_vs140.vcxproj.filters -Foundation/samples/Activity/Activity_x64_vs90.vcproj -Foundation/samples/Activity/CMakeLists.txt -Foundation/samples/Activity/Makefile -Foundation/samples/Activity/src -Foundation/samples/Activity/src/Activity.cpp -Foundation/samples/base64decode -Foundation/samples/base64decode/base64decode.progen -Foundation/samples/base64decode/base64decode_CE_vs90.vcproj -Foundation/samples/base64decode/base64decode_vs100.vcxproj -Foundation/samples/base64decode/base64decode_vs100.vcxproj.filters -Foundation/samples/base64decode/base64decode_vs110.vcxproj -Foundation/samples/base64decode/base64decode_vs110.vcxproj.filters -Foundation/samples/base64decode/base64decode_vs120.vcxproj -Foundation/samples/base64decode/base64decode_vs120.vcxproj.filters -Foundation/samples/base64decode/base64decode_vs140.vcxproj -Foundation/samples/base64decode/base64decode_vs140.vcxproj.filters -Foundation/samples/base64decode/base64decode_vs90.vcproj -Foundation/samples/base64decode/base64decode_WEC2013_vs110.vcxproj -Foundation/samples/base64decode/base64decode_WEC2013_vs110.vcxproj.filters -Foundation/samples/base64decode/base64decode_WEC2013_vs120.vcxproj -Foundation/samples/base64decode/base64decode_WEC2013_vs120.vcxproj.filters -Foundation/samples/base64decode/base64decode_x64_vs100.vcxproj -Foundation/samples/base64decode/base64decode_x64_vs100.vcxproj.filters -Foundation/samples/base64decode/base64decode_x64_vs110.vcxproj -Foundation/samples/base64decode/base64decode_x64_vs110.vcxproj.filters -Foundation/samples/base64decode/base64decode_x64_vs120.vcxproj -Foundation/samples/base64decode/base64decode_x64_vs120.vcxproj.filters -Foundation/samples/base64decode/base64decode_x64_vs140.vcxproj -Foundation/samples/base64decode/base64decode_x64_vs140.vcxproj.filters -Foundation/samples/base64decode/base64decode_x64_vs90.vcproj -Foundation/samples/base64decode/CMakeLists.txt -Foundation/samples/base64decode/Makefile -Foundation/samples/base64decode/src -Foundation/samples/base64decode/src/base64decode.cpp -Foundation/samples/base64encode -Foundation/samples/base64encode/base64encode.progen -Foundation/samples/base64encode/base64encode_CE_vs90.vcproj -Foundation/samples/base64encode/base64encode_vs100.vcxproj -Foundation/samples/base64encode/base64encode_vs100.vcxproj.filters -Foundation/samples/base64encode/base64encode_vs110.vcxproj -Foundation/samples/base64encode/base64encode_vs110.vcxproj.filters -Foundation/samples/base64encode/base64encode_vs120.vcxproj -Foundation/samples/base64encode/base64encode_vs120.vcxproj.filters -Foundation/samples/base64encode/base64encode_vs140.vcxproj -Foundation/samples/base64encode/base64encode_vs140.vcxproj.filters -Foundation/samples/base64encode/base64encode_vs90.vcproj -Foundation/samples/base64encode/base64encode_WEC2013_vs110.vcxproj -Foundation/samples/base64encode/base64encode_WEC2013_vs110.vcxproj.filters -Foundation/samples/base64encode/base64encode_WEC2013_vs120.vcxproj -Foundation/samples/base64encode/base64encode_WEC2013_vs120.vcxproj.filters -Foundation/samples/base64encode/base64encode_x64_vs100.vcxproj -Foundation/samples/base64encode/base64encode_x64_vs100.vcxproj.filters -Foundation/samples/base64encode/base64encode_x64_vs110.vcxproj -Foundation/samples/base64encode/base64encode_x64_vs110.vcxproj.filters -Foundation/samples/base64encode/base64encode_x64_vs120.vcxproj -Foundation/samples/base64encode/base64encode_x64_vs120.vcxproj.filters -Foundation/samples/base64encode/base64encode_x64_vs140.vcxproj -Foundation/samples/base64encode/base64encode_x64_vs140.vcxproj.filters -Foundation/samples/base64encode/base64encode_x64_vs90.vcproj -Foundation/samples/base64encode/CMakeLists.txt -Foundation/samples/base64encode/Makefile -Foundation/samples/base64encode/src -Foundation/samples/base64encode/src/base64encode.cpp -Foundation/samples/BinaryReaderWriter -Foundation/samples/BinaryReaderWriter/BinaryReaderWriter.progen -Foundation/samples/BinaryReaderWriter/BinaryReaderWriter_CE_vs90.vcproj -Foundation/samples/BinaryReaderWriter/BinaryReaderWriter_vs100.vcxproj -Foundation/samples/BinaryReaderWriter/BinaryReaderWriter_vs100.vcxproj.filters -Foundation/samples/BinaryReaderWriter/BinaryReaderWriter_vs110.vcxproj -Foundation/samples/BinaryReaderWriter/BinaryReaderWriter_vs110.vcxproj.filters -Foundation/samples/BinaryReaderWriter/BinaryReaderWriter_vs120.vcxproj -Foundation/samples/BinaryReaderWriter/BinaryReaderWriter_vs120.vcxproj.filters -Foundation/samples/BinaryReaderWriter/BinaryReaderWriter_vs140.vcxproj -Foundation/samples/BinaryReaderWriter/BinaryReaderWriter_vs140.vcxproj.filters -Foundation/samples/BinaryReaderWriter/BinaryReaderWriter_vs90.vcproj -Foundation/samples/BinaryReaderWriter/BinaryReaderWriter_WEC2013_vs110.vcxproj -Foundation/samples/BinaryReaderWriter/BinaryReaderWriter_WEC2013_vs110.vcxproj.filters -Foundation/samples/BinaryReaderWriter/BinaryReaderWriter_WEC2013_vs120.vcxproj -Foundation/samples/BinaryReaderWriter/BinaryReaderWriter_WEC2013_vs120.vcxproj.filters -Foundation/samples/BinaryReaderWriter/BinaryReaderWriter_x64_vs100.vcxproj -Foundation/samples/BinaryReaderWriter/BinaryReaderWriter_x64_vs100.vcxproj.filters -Foundation/samples/BinaryReaderWriter/BinaryReaderWriter_x64_vs110.vcxproj -Foundation/samples/BinaryReaderWriter/BinaryReaderWriter_x64_vs110.vcxproj.filters -Foundation/samples/BinaryReaderWriter/BinaryReaderWriter_x64_vs120.vcxproj -Foundation/samples/BinaryReaderWriter/BinaryReaderWriter_x64_vs120.vcxproj.filters -Foundation/samples/BinaryReaderWriter/BinaryReaderWriter_x64_vs140.vcxproj -Foundation/samples/BinaryReaderWriter/BinaryReaderWriter_x64_vs140.vcxproj.filters -Foundation/samples/BinaryReaderWriter/BinaryReaderWriter_x64_vs90.vcproj -Foundation/samples/BinaryReaderWriter/CMakeLists.txt -Foundation/samples/BinaryReaderWriter/Makefile -Foundation/samples/BinaryReaderWriter/src -Foundation/samples/BinaryReaderWriter/src/BinaryReaderWriter.cpp -Foundation/samples/CMakeLists.txt -Foundation/samples/DateTime -Foundation/samples/DateTime/CMakeLists.txt -Foundation/samples/DateTime/DateTime.progen -Foundation/samples/DateTime/DateTime_CE_vs90.vcproj -Foundation/samples/DateTime/DateTime_vs100.vcxproj -Foundation/samples/DateTime/DateTime_vs100.vcxproj.filters -Foundation/samples/DateTime/DateTime_vs110.vcxproj -Foundation/samples/DateTime/DateTime_vs110.vcxproj.filters -Foundation/samples/DateTime/DateTime_vs120.vcxproj -Foundation/samples/DateTime/DateTime_vs120.vcxproj.filters -Foundation/samples/DateTime/DateTime_vs140.vcxproj -Foundation/samples/DateTime/DateTime_vs140.vcxproj.filters -Foundation/samples/DateTime/DateTime_vs90.vcproj -Foundation/samples/DateTime/DateTime_WEC2013_vs110.vcxproj -Foundation/samples/DateTime/DateTime_WEC2013_vs110.vcxproj.filters -Foundation/samples/DateTime/DateTime_WEC2013_vs120.vcxproj -Foundation/samples/DateTime/DateTime_WEC2013_vs120.vcxproj.filters -Foundation/samples/DateTime/DateTime_x64_vs100.vcxproj -Foundation/samples/DateTime/DateTime_x64_vs100.vcxproj.filters -Foundation/samples/DateTime/DateTime_x64_vs110.vcxproj -Foundation/samples/DateTime/DateTime_x64_vs110.vcxproj.filters -Foundation/samples/DateTime/DateTime_x64_vs120.vcxproj -Foundation/samples/DateTime/DateTime_x64_vs120.vcxproj.filters -Foundation/samples/DateTime/DateTime_x64_vs140.vcxproj -Foundation/samples/DateTime/DateTime_x64_vs140.vcxproj.filters -Foundation/samples/DateTime/DateTime_x64_vs90.vcproj -Foundation/samples/DateTime/Makefile -Foundation/samples/DateTime/src -Foundation/samples/DateTime/src/DateTime.cpp -Foundation/samples/deflate -Foundation/samples/deflate/CMakeLists.txt -Foundation/samples/deflate/deflate.progen -Foundation/samples/deflate/deflate_CE_vs90.vcproj -Foundation/samples/deflate/deflate_vs100.vcxproj -Foundation/samples/deflate/deflate_vs100.vcxproj.filters -Foundation/samples/deflate/deflate_vs110.vcxproj -Foundation/samples/deflate/deflate_vs110.vcxproj.filters -Foundation/samples/deflate/deflate_vs120.vcxproj -Foundation/samples/deflate/deflate_vs120.vcxproj.filters -Foundation/samples/deflate/deflate_vs140.vcxproj -Foundation/samples/deflate/deflate_vs140.vcxproj.filters -Foundation/samples/deflate/deflate_vs90.vcproj -Foundation/samples/deflate/deflate_WEC2013_vs110.vcxproj -Foundation/samples/deflate/deflate_WEC2013_vs110.vcxproj.filters -Foundation/samples/deflate/deflate_WEC2013_vs120.vcxproj -Foundation/samples/deflate/deflate_WEC2013_vs120.vcxproj.filters -Foundation/samples/deflate/deflate_x64_vs100.vcxproj -Foundation/samples/deflate/deflate_x64_vs100.vcxproj.filters -Foundation/samples/deflate/deflate_x64_vs110.vcxproj -Foundation/samples/deflate/deflate_x64_vs110.vcxproj.filters -Foundation/samples/deflate/deflate_x64_vs120.vcxproj -Foundation/samples/deflate/deflate_x64_vs120.vcxproj.filters -Foundation/samples/deflate/deflate_x64_vs140.vcxproj -Foundation/samples/deflate/deflate_x64_vs140.vcxproj.filters -Foundation/samples/deflate/deflate_x64_vs90.vcproj -Foundation/samples/deflate/Makefile -Foundation/samples/deflate/src -Foundation/samples/deflate/src/deflate.cpp -Foundation/samples/dir -Foundation/samples/dir/CMakeLists.txt -Foundation/samples/dir/dir.progen -Foundation/samples/dir/dir_CE_vs90.vcproj -Foundation/samples/dir/dir_vs100.vcxproj -Foundation/samples/dir/dir_vs100.vcxproj.filters -Foundation/samples/dir/dir_vs110.vcxproj -Foundation/samples/dir/dir_vs110.vcxproj.filters -Foundation/samples/dir/dir_vs120.vcxproj -Foundation/samples/dir/dir_vs120.vcxproj.filters -Foundation/samples/dir/dir_vs140.vcxproj -Foundation/samples/dir/dir_vs140.vcxproj.filters -Foundation/samples/dir/dir_vs90.vcproj -Foundation/samples/dir/dir_WEC2013_vs110.vcxproj -Foundation/samples/dir/dir_WEC2013_vs110.vcxproj.filters -Foundation/samples/dir/dir_WEC2013_vs120.vcxproj -Foundation/samples/dir/dir_WEC2013_vs120.vcxproj.filters -Foundation/samples/dir/dir_x64_vs100.vcxproj -Foundation/samples/dir/dir_x64_vs100.vcxproj.filters -Foundation/samples/dir/dir_x64_vs110.vcxproj -Foundation/samples/dir/dir_x64_vs110.vcxproj.filters -Foundation/samples/dir/dir_x64_vs120.vcxproj -Foundation/samples/dir/dir_x64_vs120.vcxproj.filters -Foundation/samples/dir/dir_x64_vs140.vcxproj -Foundation/samples/dir/dir_x64_vs140.vcxproj.filters -Foundation/samples/dir/dir_x64_vs90.vcproj -Foundation/samples/dir/Makefile -Foundation/samples/dir/src -Foundation/samples/dir/src/dir.cpp -Foundation/samples/grep -Foundation/samples/grep/CMakeLists.txt -Foundation/samples/grep/grep.progen -Foundation/samples/grep/grep_CE_vs90.vcproj -Foundation/samples/grep/grep_vs100.vcxproj -Foundation/samples/grep/grep_vs100.vcxproj.filters -Foundation/samples/grep/grep_vs110.vcxproj -Foundation/samples/grep/grep_vs110.vcxproj.filters -Foundation/samples/grep/grep_vs120.vcxproj -Foundation/samples/grep/grep_vs120.vcxproj.filters -Foundation/samples/grep/grep_vs140.vcxproj -Foundation/samples/grep/grep_vs140.vcxproj.filters -Foundation/samples/grep/grep_vs90.vcproj -Foundation/samples/grep/grep_WEC2013_vs110.vcxproj -Foundation/samples/grep/grep_WEC2013_vs110.vcxproj.filters -Foundation/samples/grep/grep_WEC2013_vs120.vcxproj -Foundation/samples/grep/grep_WEC2013_vs120.vcxproj.filters -Foundation/samples/grep/grep_x64_vs100.vcxproj -Foundation/samples/grep/grep_x64_vs100.vcxproj.filters -Foundation/samples/grep/grep_x64_vs110.vcxproj -Foundation/samples/grep/grep_x64_vs110.vcxproj.filters -Foundation/samples/grep/grep_x64_vs120.vcxproj -Foundation/samples/grep/grep_x64_vs120.vcxproj.filters -Foundation/samples/grep/grep_x64_vs140.vcxproj -Foundation/samples/grep/grep_x64_vs140.vcxproj.filters -Foundation/samples/grep/grep_x64_vs90.vcproj -Foundation/samples/grep/Makefile -Foundation/samples/grep/src -Foundation/samples/grep/src/grep.cpp -Foundation/samples/hmacmd5 -Foundation/samples/hmacmd5/CMakeLists.txt -Foundation/samples/hmacmd5/hmacmd5.progen -Foundation/samples/hmacmd5/hmacmd5_CE_vs90.vcproj -Foundation/samples/hmacmd5/hmacmd5_vs100.vcxproj -Foundation/samples/hmacmd5/hmacmd5_vs100.vcxproj.filters -Foundation/samples/hmacmd5/hmacmd5_vs110.vcxproj -Foundation/samples/hmacmd5/hmacmd5_vs110.vcxproj.filters -Foundation/samples/hmacmd5/hmacmd5_vs120.vcxproj -Foundation/samples/hmacmd5/hmacmd5_vs120.vcxproj.filters -Foundation/samples/hmacmd5/hmacmd5_vs140.vcxproj -Foundation/samples/hmacmd5/hmacmd5_vs140.vcxproj.filters -Foundation/samples/hmacmd5/hmacmd5_vs90.vcproj -Foundation/samples/hmacmd5/hmacmd5_WEC2013_vs110.vcxproj -Foundation/samples/hmacmd5/hmacmd5_WEC2013_vs110.vcxproj.filters -Foundation/samples/hmacmd5/hmacmd5_WEC2013_vs120.vcxproj -Foundation/samples/hmacmd5/hmacmd5_WEC2013_vs120.vcxproj.filters -Foundation/samples/hmacmd5/hmacmd5_x64_vs100.vcxproj -Foundation/samples/hmacmd5/hmacmd5_x64_vs100.vcxproj.filters -Foundation/samples/hmacmd5/hmacmd5_x64_vs110.vcxproj -Foundation/samples/hmacmd5/hmacmd5_x64_vs110.vcxproj.filters -Foundation/samples/hmacmd5/hmacmd5_x64_vs120.vcxproj -Foundation/samples/hmacmd5/hmacmd5_x64_vs120.vcxproj.filters -Foundation/samples/hmacmd5/hmacmd5_x64_vs140.vcxproj -Foundation/samples/hmacmd5/hmacmd5_x64_vs140.vcxproj.filters -Foundation/samples/hmacmd5/hmacmd5_x64_vs90.vcproj -Foundation/samples/hmacmd5/Makefile -Foundation/samples/hmacmd5/src -Foundation/samples/hmacmd5/src/hmacmd5.cpp -Foundation/samples/inflate -Foundation/samples/inflate/CMakeLists.txt -Foundation/samples/inflate/inflate.progen -Foundation/samples/inflate/inflate_CE_vs90.vcproj -Foundation/samples/inflate/inflate_vs100.vcxproj -Foundation/samples/inflate/inflate_vs100.vcxproj.filters -Foundation/samples/inflate/inflate_vs110.vcxproj -Foundation/samples/inflate/inflate_vs110.vcxproj.filters -Foundation/samples/inflate/inflate_vs120.vcxproj -Foundation/samples/inflate/inflate_vs120.vcxproj.filters -Foundation/samples/inflate/inflate_vs140.vcxproj -Foundation/samples/inflate/inflate_vs140.vcxproj.filters -Foundation/samples/inflate/inflate_vs90.vcproj -Foundation/samples/inflate/inflate_WEC2013_vs110.vcxproj -Foundation/samples/inflate/inflate_WEC2013_vs110.vcxproj.filters -Foundation/samples/inflate/inflate_WEC2013_vs120.vcxproj -Foundation/samples/inflate/inflate_WEC2013_vs120.vcxproj.filters -Foundation/samples/inflate/inflate_x64_vs100.vcxproj -Foundation/samples/inflate/inflate_x64_vs100.vcxproj.filters -Foundation/samples/inflate/inflate_x64_vs110.vcxproj -Foundation/samples/inflate/inflate_x64_vs110.vcxproj.filters -Foundation/samples/inflate/inflate_x64_vs120.vcxproj -Foundation/samples/inflate/inflate_x64_vs120.vcxproj.filters -Foundation/samples/inflate/inflate_x64_vs140.vcxproj -Foundation/samples/inflate/inflate_x64_vs140.vcxproj.filters -Foundation/samples/inflate/inflate_x64_vs90.vcproj -Foundation/samples/inflate/Makefile -Foundation/samples/inflate/src -Foundation/samples/inflate/src/inflate.cpp -Foundation/samples/LineEndingConverter -Foundation/samples/LineEndingConverter/CMakeLists.txt -Foundation/samples/LineEndingConverter/LineEndingConverter.progen -Foundation/samples/LineEndingConverter/LineEndingConverter_vs100.vcxproj -Foundation/samples/LineEndingConverter/LineEndingConverter_vs100.vcxproj.filters -Foundation/samples/LineEndingConverter/LineEndingConverter_vs110.vcxproj -Foundation/samples/LineEndingConverter/LineEndingConverter_vs110.vcxproj.filters -Foundation/samples/LineEndingConverter/LineEndingConverter_vs120.vcxproj -Foundation/samples/LineEndingConverter/LineEndingConverter_vs120.vcxproj.filters -Foundation/samples/LineEndingConverter/LineEndingConverter_vs140.vcxproj -Foundation/samples/LineEndingConverter/LineEndingConverter_vs140.vcxproj.filters -Foundation/samples/LineEndingConverter/LineEndingConverter_vs90.vcproj -Foundation/samples/LineEndingConverter/LineEndingConverter_x64_vs100.vcxproj -Foundation/samples/LineEndingConverter/LineEndingConverter_x64_vs100.vcxproj.filters -Foundation/samples/LineEndingConverter/LineEndingConverter_x64_vs110.vcxproj -Foundation/samples/LineEndingConverter/LineEndingConverter_x64_vs110.vcxproj.filters -Foundation/samples/LineEndingConverter/LineEndingConverter_x64_vs120.vcxproj -Foundation/samples/LineEndingConverter/LineEndingConverter_x64_vs120.vcxproj.filters -Foundation/samples/LineEndingConverter/LineEndingConverter_x64_vs140.vcxproj -Foundation/samples/LineEndingConverter/LineEndingConverter_x64_vs140.vcxproj.filters -Foundation/samples/LineEndingConverter/LineEndingConverter_x64_vs90.vcproj -Foundation/samples/LineEndingConverter/Makefile -Foundation/samples/LineEndingConverter/src -Foundation/samples/LineEndingConverter/src/LineEndingConverter.cpp -Foundation/samples/Logger -Foundation/samples/Logger/CMakeLists.txt -Foundation/samples/Logger/Logger.progen -Foundation/samples/Logger/Logger_CE_vs90.vcproj -Foundation/samples/Logger/Logger_vs100.vcxproj -Foundation/samples/Logger/Logger_vs100.vcxproj.filters -Foundation/samples/Logger/Logger_vs110.vcxproj -Foundation/samples/Logger/Logger_vs110.vcxproj.filters -Foundation/samples/Logger/Logger_vs120.vcxproj -Foundation/samples/Logger/Logger_vs120.vcxproj.filters -Foundation/samples/Logger/Logger_vs140.vcxproj -Foundation/samples/Logger/Logger_vs140.vcxproj.filters -Foundation/samples/Logger/Logger_vs90.vcproj -Foundation/samples/Logger/Logger_WEC2013_vs110.vcxproj -Foundation/samples/Logger/Logger_WEC2013_vs110.vcxproj.filters -Foundation/samples/Logger/Logger_WEC2013_vs120.vcxproj -Foundation/samples/Logger/Logger_WEC2013_vs120.vcxproj.filters -Foundation/samples/Logger/Logger_x64_vs100.vcxproj -Foundation/samples/Logger/Logger_x64_vs100.vcxproj.filters -Foundation/samples/Logger/Logger_x64_vs110.vcxproj -Foundation/samples/Logger/Logger_x64_vs110.vcxproj.filters -Foundation/samples/Logger/Logger_x64_vs120.vcxproj -Foundation/samples/Logger/Logger_x64_vs120.vcxproj.filters -Foundation/samples/Logger/Logger_x64_vs140.vcxproj -Foundation/samples/Logger/Logger_x64_vs140.vcxproj.filters -Foundation/samples/Logger/Logger_x64_vs90.vcproj -Foundation/samples/Logger/Makefile -Foundation/samples/Logger/src -Foundation/samples/Logger/src/Logger.cpp -Foundation/samples/LogRotation -Foundation/samples/LogRotation/CMakeLists.txt -Foundation/samples/LogRotation/LogRotation.progen -Foundation/samples/LogRotation/LogRotation_CE_vs90.vcproj -Foundation/samples/LogRotation/LogRotation_vs100.vcxproj -Foundation/samples/LogRotation/LogRotation_vs100.vcxproj.filters -Foundation/samples/LogRotation/LogRotation_vs110.vcxproj -Foundation/samples/LogRotation/LogRotation_vs110.vcxproj.filters -Foundation/samples/LogRotation/LogRotation_vs120.vcxproj -Foundation/samples/LogRotation/LogRotation_vs120.vcxproj.filters -Foundation/samples/LogRotation/LogRotation_vs140.vcxproj -Foundation/samples/LogRotation/LogRotation_vs140.vcxproj.filters -Foundation/samples/LogRotation/LogRotation_vs90.vcproj -Foundation/samples/LogRotation/LogRotation_WEC2013_vs110.vcxproj -Foundation/samples/LogRotation/LogRotation_WEC2013_vs110.vcxproj.filters -Foundation/samples/LogRotation/LogRotation_WEC2013_vs120.vcxproj -Foundation/samples/LogRotation/LogRotation_WEC2013_vs120.vcxproj.filters -Foundation/samples/LogRotation/LogRotation_x64_vs100.vcxproj -Foundation/samples/LogRotation/LogRotation_x64_vs100.vcxproj.filters -Foundation/samples/LogRotation/LogRotation_x64_vs110.vcxproj -Foundation/samples/LogRotation/LogRotation_x64_vs110.vcxproj.filters -Foundation/samples/LogRotation/LogRotation_x64_vs120.vcxproj -Foundation/samples/LogRotation/LogRotation_x64_vs120.vcxproj.filters -Foundation/samples/LogRotation/LogRotation_x64_vs140.vcxproj -Foundation/samples/LogRotation/LogRotation_x64_vs140.vcxproj.filters -Foundation/samples/LogRotation/LogRotation_x64_vs90.vcproj -Foundation/samples/LogRotation/Makefile -Foundation/samples/LogRotation/src -Foundation/samples/LogRotation/src/LogRotation.cpp -Foundation/samples/Makefile -Foundation/samples/md5 -Foundation/samples/md5/CMakeLists.txt -Foundation/samples/md5/Makefile -Foundation/samples/md5/md5.progen -Foundation/samples/md5/md5_CE_vs90.vcproj -Foundation/samples/md5/md5_vs100.vcxproj -Foundation/samples/md5/md5_vs100.vcxproj.filters -Foundation/samples/md5/md5_vs110.vcxproj -Foundation/samples/md5/md5_vs110.vcxproj.filters -Foundation/samples/md5/md5_vs120.vcxproj -Foundation/samples/md5/md5_vs120.vcxproj.filters -Foundation/samples/md5/md5_vs140.vcxproj -Foundation/samples/md5/md5_vs140.vcxproj.filters -Foundation/samples/md5/md5_vs90.vcproj -Foundation/samples/md5/md5_WEC2013_vs110.vcxproj -Foundation/samples/md5/md5_WEC2013_vs110.vcxproj.filters -Foundation/samples/md5/md5_WEC2013_vs120.vcxproj -Foundation/samples/md5/md5_WEC2013_vs120.vcxproj.filters -Foundation/samples/md5/md5_x64_vs100.vcxproj -Foundation/samples/md5/md5_x64_vs100.vcxproj.filters -Foundation/samples/md5/md5_x64_vs110.vcxproj -Foundation/samples/md5/md5_x64_vs110.vcxproj.filters -Foundation/samples/md5/md5_x64_vs120.vcxproj -Foundation/samples/md5/md5_x64_vs120.vcxproj.filters -Foundation/samples/md5/md5_x64_vs140.vcxproj -Foundation/samples/md5/md5_x64_vs140.vcxproj.filters -Foundation/samples/md5/md5_x64_vs90.vcproj -Foundation/samples/md5/src -Foundation/samples/md5/src/md5.cpp -Foundation/samples/NotificationQueue -Foundation/samples/NotificationQueue/CMakeLists.txt -Foundation/samples/NotificationQueue/Makefile -Foundation/samples/NotificationQueue/NotificationQueue.progen -Foundation/samples/NotificationQueue/NotificationQueue_CE_vs90.vcproj -Foundation/samples/NotificationQueue/NotificationQueue_vs100.vcxproj -Foundation/samples/NotificationQueue/NotificationQueue_vs100.vcxproj.filters -Foundation/samples/NotificationQueue/NotificationQueue_vs110.vcxproj -Foundation/samples/NotificationQueue/NotificationQueue_vs110.vcxproj.filters -Foundation/samples/NotificationQueue/NotificationQueue_vs120.vcxproj -Foundation/samples/NotificationQueue/NotificationQueue_vs120.vcxproj.filters -Foundation/samples/NotificationQueue/NotificationQueue_vs140.vcxproj -Foundation/samples/NotificationQueue/NotificationQueue_vs140.vcxproj.filters -Foundation/samples/NotificationQueue/NotificationQueue_vs90.vcproj -Foundation/samples/NotificationQueue/NotificationQueue_WEC2013_vs110.vcxproj -Foundation/samples/NotificationQueue/NotificationQueue_WEC2013_vs110.vcxproj.filters -Foundation/samples/NotificationQueue/NotificationQueue_WEC2013_vs120.vcxproj -Foundation/samples/NotificationQueue/NotificationQueue_WEC2013_vs120.vcxproj.filters -Foundation/samples/NotificationQueue/NotificationQueue_x64_vs100.vcxproj -Foundation/samples/NotificationQueue/NotificationQueue_x64_vs100.vcxproj.filters -Foundation/samples/NotificationQueue/NotificationQueue_x64_vs110.vcxproj -Foundation/samples/NotificationQueue/NotificationQueue_x64_vs110.vcxproj.filters -Foundation/samples/NotificationQueue/NotificationQueue_x64_vs120.vcxproj -Foundation/samples/NotificationQueue/NotificationQueue_x64_vs120.vcxproj.filters -Foundation/samples/NotificationQueue/NotificationQueue_x64_vs140.vcxproj -Foundation/samples/NotificationQueue/NotificationQueue_x64_vs140.vcxproj.filters -Foundation/samples/NotificationQueue/NotificationQueue_x64_vs90.vcproj -Foundation/samples/NotificationQueue/src -Foundation/samples/NotificationQueue/src/NotificationQueue.cpp -Foundation/samples/samples.progen -Foundation/samples/samples_CE_vs90.sln -Foundation/samples/samples_vs100.sln -Foundation/samples/samples_vs110.sln -Foundation/samples/samples_vs120.sln -Foundation/samples/samples_vs140.sln -Foundation/samples/samples_vs90.sln -Foundation/samples/samples_WEC2013_vs110.sln -Foundation/samples/samples_WEC2013_vs120.sln -Foundation/samples/samples_x64_vs100.sln -Foundation/samples/samples_x64_vs110.sln -Foundation/samples/samples_x64_vs120.sln -Foundation/samples/samples_x64_vs140.sln -Foundation/samples/samples_x64_vs90.sln -Foundation/samples/StringTokenizer -Foundation/samples/StringTokenizer/CMakeLists.txt -Foundation/samples/StringTokenizer/Makefile -Foundation/samples/StringTokenizer/src -Foundation/samples/StringTokenizer/src/StringTokenizer.cpp -Foundation/samples/StringTokenizer/StringTokenizer.progen -Foundation/samples/StringTokenizer/StringTokenizer_CE_vs90.vcproj -Foundation/samples/StringTokenizer/StringTokenizer_vs100.vcxproj -Foundation/samples/StringTokenizer/StringTokenizer_vs100.vcxproj.filters -Foundation/samples/StringTokenizer/StringTokenizer_vs110.vcxproj -Foundation/samples/StringTokenizer/StringTokenizer_vs110.vcxproj.filters -Foundation/samples/StringTokenizer/StringTokenizer_vs120.vcxproj -Foundation/samples/StringTokenizer/StringTokenizer_vs120.vcxproj.filters -Foundation/samples/StringTokenizer/StringTokenizer_vs140.vcxproj -Foundation/samples/StringTokenizer/StringTokenizer_vs140.vcxproj.filters -Foundation/samples/StringTokenizer/StringTokenizer_vs90.vcproj -Foundation/samples/StringTokenizer/StringTokenizer_WEC2013_vs110.vcxproj -Foundation/samples/StringTokenizer/StringTokenizer_WEC2013_vs110.vcxproj.filters -Foundation/samples/StringTokenizer/StringTokenizer_WEC2013_vs120.vcxproj -Foundation/samples/StringTokenizer/StringTokenizer_WEC2013_vs120.vcxproj.filters -Foundation/samples/StringTokenizer/StringTokenizer_x64_vs100.vcxproj -Foundation/samples/StringTokenizer/StringTokenizer_x64_vs100.vcxproj.filters -Foundation/samples/StringTokenizer/StringTokenizer_x64_vs110.vcxproj -Foundation/samples/StringTokenizer/StringTokenizer_x64_vs110.vcxproj.filters -Foundation/samples/StringTokenizer/StringTokenizer_x64_vs120.vcxproj -Foundation/samples/StringTokenizer/StringTokenizer_x64_vs120.vcxproj.filters -Foundation/samples/StringTokenizer/StringTokenizer_x64_vs140.vcxproj -Foundation/samples/StringTokenizer/StringTokenizer_x64_vs140.vcxproj.filters -Foundation/samples/StringTokenizer/StringTokenizer_x64_vs90.vcproj -Foundation/samples/Timer -Foundation/samples/Timer/CMakeLists.txt -Foundation/samples/Timer/Makefile -Foundation/samples/Timer/src -Foundation/samples/Timer/src/Timer.cpp -Foundation/samples/Timer/Timer.progen -Foundation/samples/Timer/Timer_CE_vs90.vcproj -Foundation/samples/Timer/Timer_vs100.vcxproj -Foundation/samples/Timer/Timer_vs100.vcxproj.filters -Foundation/samples/Timer/Timer_vs110.vcxproj -Foundation/samples/Timer/Timer_vs110.vcxproj.filters -Foundation/samples/Timer/Timer_vs120.vcxproj -Foundation/samples/Timer/Timer_vs120.vcxproj.filters -Foundation/samples/Timer/Timer_vs140.vcxproj -Foundation/samples/Timer/Timer_vs140.vcxproj.filters -Foundation/samples/Timer/Timer_vs90.vcproj -Foundation/samples/Timer/Timer_WEC2013_vs110.vcxproj -Foundation/samples/Timer/Timer_WEC2013_vs110.vcxproj.filters -Foundation/samples/Timer/Timer_WEC2013_vs120.vcxproj -Foundation/samples/Timer/Timer_WEC2013_vs120.vcxproj.filters -Foundation/samples/Timer/Timer_x64_vs100.vcxproj -Foundation/samples/Timer/Timer_x64_vs100.vcxproj.filters -Foundation/samples/Timer/Timer_x64_vs110.vcxproj -Foundation/samples/Timer/Timer_x64_vs110.vcxproj.filters -Foundation/samples/Timer/Timer_x64_vs120.vcxproj -Foundation/samples/Timer/Timer_x64_vs120.vcxproj.filters -Foundation/samples/Timer/Timer_x64_vs140.vcxproj -Foundation/samples/Timer/Timer_x64_vs140.vcxproj.filters -Foundation/samples/Timer/Timer_x64_vs90.vcproj -Foundation/samples/URI -Foundation/samples/URI/CMakeLists.txt -Foundation/samples/URI/Makefile -Foundation/samples/URI/src -Foundation/samples/URI/src/URI.cpp -Foundation/samples/URI/URI.progen -Foundation/samples/URI/URI_CE_vs90.vcproj -Foundation/samples/URI/URI_vs100.vcxproj -Foundation/samples/URI/URI_vs100.vcxproj.filters -Foundation/samples/URI/URI_vs110.vcxproj -Foundation/samples/URI/URI_vs110.vcxproj.filters -Foundation/samples/URI/URI_vs120.vcxproj -Foundation/samples/URI/URI_vs120.vcxproj.filters -Foundation/samples/URI/URI_vs140.vcxproj -Foundation/samples/URI/URI_vs140.vcxproj.filters -Foundation/samples/URI/URI_vs90.vcproj -Foundation/samples/URI/URI_WEC2013_vs110.vcxproj -Foundation/samples/URI/URI_WEC2013_vs110.vcxproj.filters -Foundation/samples/URI/URI_WEC2013_vs120.vcxproj -Foundation/samples/URI/URI_WEC2013_vs120.vcxproj.filters -Foundation/samples/URI/URI_x64_vs100.vcxproj -Foundation/samples/URI/URI_x64_vs100.vcxproj.filters -Foundation/samples/URI/URI_x64_vs110.vcxproj -Foundation/samples/URI/URI_x64_vs110.vcxproj.filters -Foundation/samples/URI/URI_x64_vs120.vcxproj -Foundation/samples/URI/URI_x64_vs120.vcxproj.filters -Foundation/samples/URI/URI_x64_vs140.vcxproj -Foundation/samples/URI/URI_x64_vs140.vcxproj.filters -Foundation/samples/URI/URI_x64_vs90.vcproj -Foundation/samples/uuidgen -Foundation/samples/uuidgen/CMakeLists.txt -Foundation/samples/uuidgen/Makefile -Foundation/samples/uuidgen/src -Foundation/samples/uuidgen/src/uuidgen.cpp -Foundation/samples/uuidgen/uuidgen.progen -Foundation/samples/uuidgen/uuidgen_CE_vs90.vcproj -Foundation/samples/uuidgen/uuidgen_vs100.vcxproj -Foundation/samples/uuidgen/uuidgen_vs100.vcxproj.filters -Foundation/samples/uuidgen/uuidgen_vs110.vcxproj -Foundation/samples/uuidgen/uuidgen_vs110.vcxproj.filters -Foundation/samples/uuidgen/uuidgen_vs120.vcxproj -Foundation/samples/uuidgen/uuidgen_vs120.vcxproj.filters -Foundation/samples/uuidgen/uuidgen_vs140.vcxproj -Foundation/samples/uuidgen/uuidgen_vs140.vcxproj.filters -Foundation/samples/uuidgen/uuidgen_vs90.vcproj -Foundation/samples/uuidgen/uuidgen_WEC2013_vs110.vcxproj -Foundation/samples/uuidgen/uuidgen_WEC2013_vs110.vcxproj.filters -Foundation/samples/uuidgen/uuidgen_WEC2013_vs120.vcxproj -Foundation/samples/uuidgen/uuidgen_WEC2013_vs120.vcxproj.filters -Foundation/samples/uuidgen/uuidgen_x64_vs100.vcxproj -Foundation/samples/uuidgen/uuidgen_x64_vs100.vcxproj.filters -Foundation/samples/uuidgen/uuidgen_x64_vs110.vcxproj -Foundation/samples/uuidgen/uuidgen_x64_vs110.vcxproj.filters -Foundation/samples/uuidgen/uuidgen_x64_vs120.vcxproj -Foundation/samples/uuidgen/uuidgen_x64_vs120.vcxproj.filters -Foundation/samples/uuidgen/uuidgen_x64_vs140.vcxproj -Foundation/samples/uuidgen/uuidgen_x64_vs140.vcxproj.filters -Foundation/samples/uuidgen/uuidgen_x64_vs90.vcproj -Foundation/src -Foundation/src/AbstractObserver.cpp -Foundation/src/ActiveDispatcher.cpp -Foundation/src/adler32.c -Foundation/src/ArchiveStrategy.cpp -Foundation/src/Ascii.cpp -Foundation/src/ASCIIEncoding.cpp -Foundation/src/AsyncChannel.cpp -Foundation/src/AtomicCounter.cpp -Foundation/src/Base32Decoder.cpp -Foundation/src/Base32Encoder.cpp -Foundation/src/Base64Decoder.cpp -Foundation/src/Base64Encoder.cpp -Foundation/src/bignum-dtoa.cc -Foundation/src/bignum-dtoa.h -Foundation/src/bignum.cc -Foundation/src/bignum.h -Foundation/src/BinaryReader.cpp -Foundation/src/BinaryWriter.cpp -Foundation/src/Bugcheck.cpp -Foundation/src/ByteOrder.cpp -Foundation/src/cached-powers.cc -Foundation/src/cached-powers.h -Foundation/src/Channel.cpp -Foundation/src/Checksum.cpp -Foundation/src/Clock.cpp -Foundation/src/compress.c -Foundation/src/Condition.cpp -Foundation/src/Configurable.cpp -Foundation/src/ConsoleChannel.cpp -Foundation/src/CountingStream.cpp -Foundation/src/crc32.c -Foundation/src/crc32.h -Foundation/src/DateTime.cpp -Foundation/src/DateTimeFormat.cpp -Foundation/src/DateTimeFormatter.cpp -Foundation/src/DateTimeParser.cpp -Foundation/src/Debugger.cpp -Foundation/src/deflate.c -Foundation/src/deflate.h -Foundation/src/DeflatingStream.cpp -Foundation/src/DigestEngine.cpp -Foundation/src/DigestStream.cpp -Foundation/src/DirectoryIterator.cpp -Foundation/src/DirectoryIterator_UNIX.cpp -Foundation/src/DirectoryIterator_VMS.cpp -Foundation/src/DirectoryIterator_WIN32.cpp -Foundation/src/DirectoryIterator_WIN32U.cpp -Foundation/src/DirectoryIteratorStrategy.cpp -Foundation/src/DirectoryWatcher.cpp -Foundation/src/diy-fp.cc -Foundation/src/diy-fp.h -Foundation/src/double-conversion.cc -Foundation/src/double-conversion.h -Foundation/src/Environment.cpp -Foundation/src/Environment_UNIX.cpp -Foundation/src/Environment_VMS.cpp -Foundation/src/Environment_VX.cpp -Foundation/src/Environment_WIN32.cpp -Foundation/src/Environment_WIN32U.cpp -Foundation/src/Environment_WINCE.cpp -Foundation/src/Error.cpp -Foundation/src/ErrorHandler.cpp -Foundation/src/Event.cpp -Foundation/src/Event_POSIX.cpp -Foundation/src/Event_VX.cpp -Foundation/src/Event_WIN32.cpp -Foundation/src/EventArgs.cpp -Foundation/src/EventLogChannel.cpp -Foundation/src/Exception.cpp -Foundation/src/fast-dtoa.cc -Foundation/src/fast-dtoa.h -Foundation/src/FIFOBufferStream.cpp -Foundation/src/File.cpp -Foundation/src/File_UNIX.cpp -Foundation/src/File_VMS.cpp -Foundation/src/File_VX.cpp -Foundation/src/File_WIN32.cpp -Foundation/src/File_WIN32U.cpp -Foundation/src/File_WINCE.cpp -Foundation/src/FileChannel.cpp -Foundation/src/FileStream.cpp -Foundation/src/FileStream_POSIX.cpp -Foundation/src/FileStream_WIN32.cpp -Foundation/src/FileStreamFactory.cpp -Foundation/src/fixed-dtoa.cc -Foundation/src/fixed-dtoa.h -Foundation/src/Format.cpp -Foundation/src/Formatter.cpp -Foundation/src/FormattingChannel.cpp -Foundation/src/FPEnvironment.cpp -Foundation/src/FPEnvironment_C99.cpp -Foundation/src/FPEnvironment_DEC.cpp -Foundation/src/FPEnvironment_DUMMY.cpp -Foundation/src/FPEnvironment_SUN.cpp -Foundation/src/FPEnvironment_WIN32.cpp -Foundation/src/Glob.cpp -Foundation/src/gzguts.h -Foundation/src/Hash.cpp -Foundation/src/HashStatistic.cpp -Foundation/src/HexBinaryDecoder.cpp -Foundation/src/HexBinaryEncoder.cpp -Foundation/src/ieee.h -Foundation/src/infback.c -Foundation/src/inffast.c -Foundation/src/inffast.h -Foundation/src/inffixed.h -Foundation/src/inflate.c -Foundation/src/inflate.h -Foundation/src/InflatingStream.cpp -Foundation/src/inftrees.c -Foundation/src/inftrees.h -Foundation/src/Latin1Encoding.cpp -Foundation/src/Latin2Encoding.cpp -Foundation/src/Latin9Encoding.cpp -Foundation/src/LineEndingConverter.cpp -Foundation/src/LocalDateTime.cpp -Foundation/src/LogFile.cpp -Foundation/src/LogFile_STD.cpp -Foundation/src/LogFile_VMS.cpp -Foundation/src/LogFile_WIN32.cpp -Foundation/src/LogFile_WIN32U.cpp -Foundation/src/Logger.cpp -Foundation/src/LoggingFactory.cpp -Foundation/src/LoggingRegistry.cpp -Foundation/src/LogStream.cpp -Foundation/src/Manifest.cpp -Foundation/src/MD4Engine.cpp -Foundation/src/MD5Engine.cpp -Foundation/src/MemoryPool.cpp -Foundation/src/MemoryStream.cpp -Foundation/src/Message.cpp -Foundation/src/MSG00001.bin -Foundation/src/Mutex.cpp -Foundation/src/Mutex_POSIX.cpp -Foundation/src/Mutex_VX.cpp -Foundation/src/Mutex_WIN32.cpp -Foundation/src/Mutex_WINCE.cpp -Foundation/src/NamedEvent.cpp -Foundation/src/NamedEvent_Android.cpp -Foundation/src/NamedEvent_UNIX.cpp -Foundation/src/NamedEvent_VMS.cpp -Foundation/src/NamedEvent_WIN32.cpp -Foundation/src/NamedEvent_WIN32U.cpp -Foundation/src/NamedMutex.cpp -Foundation/src/NamedMutex_Android.cpp -Foundation/src/NamedMutex_UNIX.cpp -Foundation/src/NamedMutex_VMS.cpp -Foundation/src/NamedMutex_WIN32.cpp -Foundation/src/NamedMutex_WIN32U.cpp -Foundation/src/NestedDiagnosticContext.cpp -Foundation/src/Notification.cpp -Foundation/src/NotificationCenter.cpp -Foundation/src/NotificationQueue.cpp -Foundation/src/NullChannel.cpp -Foundation/src/NullStream.cpp -Foundation/src/NumberFormatter.cpp -Foundation/src/NumberParser.cpp -Foundation/src/NumericString.cpp -Foundation/src/OpcomChannel.cpp -Foundation/src/Path.cpp -Foundation/src/Path_UNIX.cpp -Foundation/src/Path_VMS.cpp -Foundation/src/Path_WIN32.cpp -Foundation/src/Path_WIN32U.cpp -Foundation/src/Path_WINCE.cpp -Foundation/src/PatternFormatter.cpp -Foundation/src/pcre.h -Foundation/src/pcre_byte_order.c -Foundation/src/pcre_chartables.c -Foundation/src/pcre_compile.c -Foundation/src/pcre_config.c -Foundation/src/pcre_config.h -Foundation/src/pcre_dfa_exec.c -Foundation/src/pcre_exec.c -Foundation/src/pcre_fullinfo.c -Foundation/src/pcre_get.c -Foundation/src/pcre_globals.c -Foundation/src/pcre_internal.h -Foundation/src/pcre_jit_compile.c -Foundation/src/pcre_maketables.c -Foundation/src/pcre_newline.c -Foundation/src/pcre_ord2utf8.c -Foundation/src/pcre_refcount.c -Foundation/src/pcre_string_utils.c -Foundation/src/pcre_study.c -Foundation/src/pcre_tables.c -Foundation/src/pcre_ucd.c -Foundation/src/pcre_valid_utf8.c -Foundation/src/pcre_version.c -Foundation/src/pcre_xclass.c -Foundation/src/Pipe.cpp -Foundation/src/PipeImpl.cpp -Foundation/src/PipeImpl_DUMMY.cpp -Foundation/src/PipeImpl_POSIX.cpp -Foundation/src/PipeImpl_WIN32.cpp -Foundation/src/PipeStream.cpp -Foundation/src/pocomsg.mc -Foundation/src/PriorityNotificationQueue.cpp -Foundation/src/Process.cpp -Foundation/src/Process_UNIX.cpp -Foundation/src/Process_VMS.cpp -Foundation/src/Process_VX.cpp -Foundation/src/Process_WIN32.cpp -Foundation/src/Process_WIN32U.cpp -Foundation/src/Process_WINCE.cpp -Foundation/src/PurgeStrategy.cpp -Foundation/src/Random.cpp -Foundation/src/RandomStream.cpp -Foundation/src/RefCountedObject.cpp -Foundation/src/RegularExpression.cpp -Foundation/src/RotateStrategy.cpp -Foundation/src/Runnable.cpp -Foundation/src/RWLock.cpp -Foundation/src/RWLock_Android.cpp -Foundation/src/RWLock_POSIX.cpp -Foundation/src/RWLock_VX.cpp -Foundation/src/RWLock_WIN32.cpp -Foundation/src/RWLock_WINCE.cpp -Foundation/src/Semaphore.cpp -Foundation/src/Semaphore_POSIX.cpp -Foundation/src/Semaphore_VX.cpp -Foundation/src/Semaphore_WIN32.cpp -Foundation/src/SHA1Engine.cpp -Foundation/src/SharedLibrary.cpp -Foundation/src/SharedLibrary_HPUX.cpp -Foundation/src/SharedLibrary_UNIX.cpp -Foundation/src/SharedLibrary_VMS.cpp -Foundation/src/SharedLibrary_VX.cpp -Foundation/src/SharedLibrary_WIN32.cpp -Foundation/src/SharedLibrary_WIN32U.cpp -Foundation/src/SharedMemory.cpp -Foundation/src/SharedMemory_DUMMY.cpp -Foundation/src/SharedMemory_POSIX.cpp -Foundation/src/SharedMemory_WIN32.cpp -Foundation/src/SignalHandler.cpp -Foundation/src/SimpleFileChannel.cpp -Foundation/src/SortedDirectoryIterator.cpp -Foundation/src/SplitterChannel.cpp -Foundation/src/Stopwatch.cpp -Foundation/src/StreamChannel.cpp -Foundation/src/StreamConverter.cpp -Foundation/src/StreamCopier.cpp -Foundation/src/StreamTokenizer.cpp -Foundation/src/String.cpp -Foundation/src/StringTokenizer.cpp -Foundation/src/strtod.cc -Foundation/src/strtod.h -Foundation/src/SynchronizedObject.cpp -Foundation/src/SyslogChannel.cpp -Foundation/src/Task.cpp -Foundation/src/TaskManager.cpp -Foundation/src/TaskNotification.cpp -Foundation/src/TeeStream.cpp -Foundation/src/TemporaryFile.cpp -Foundation/src/TextBufferIterator.cpp -Foundation/src/TextConverter.cpp -Foundation/src/TextEncoding.cpp -Foundation/src/TextIterator.cpp -Foundation/src/Thread.cpp -Foundation/src/Thread_POSIX.cpp -Foundation/src/Thread_VX.cpp -Foundation/src/Thread_WIN32.cpp -Foundation/src/Thread_WINCE.cpp -Foundation/src/ThreadLocal.cpp -Foundation/src/ThreadPool.cpp -Foundation/src/ThreadTarget.cpp -Foundation/src/TimedNotificationQueue.cpp -Foundation/src/Timer.cpp -Foundation/src/Timespan.cpp -Foundation/src/Timestamp.cpp -Foundation/src/Timezone.cpp -Foundation/src/Timezone_UNIX.cpp -Foundation/src/Timezone_VX.cpp -Foundation/src/Timezone_WIN32.cpp -Foundation/src/Timezone_WINCE.cpp -Foundation/src/Token.cpp -Foundation/src/trees.c -Foundation/src/trees.h -Foundation/src/ucp.h -Foundation/src/Unicode.cpp -Foundation/src/UnicodeConverter.cpp -Foundation/src/URI.cpp -Foundation/src/URIStreamFactory.cpp -Foundation/src/URIStreamOpener.cpp -Foundation/src/UTF16Encoding.cpp -Foundation/src/UTF32Encoding.cpp -Foundation/src/UTF8Encoding.cpp -Foundation/src/UTF8String.cpp -Foundation/src/utils.h -Foundation/src/UUID.cpp -Foundation/src/UUIDGenerator.cpp -Foundation/src/Var.cpp -Foundation/src/VarHolder.cpp -Foundation/src/VarIterator.cpp -Foundation/src/Void.cpp -Foundation/src/Windows1250Encoding.cpp -Foundation/src/Windows1251Encoding.cpp -Foundation/src/Windows1252Encoding.cpp -Foundation/src/WindowsConsoleChannel.cpp -Foundation/src/zconf.h -Foundation/src/zlib.h -Foundation/src/zutil.c -Foundation/src/zutil.h -Foundation/testsuite -Foundation/testsuite/CMakeLists.txt -Foundation/testsuite/data -Foundation/testsuite/data/testdata.txt -Foundation/testsuite/Makefile -Foundation/testsuite/Makefile-Driver -Foundation/testsuite/Makefile-TestApp -Foundation/testsuite/Makefile-TestLibrary -Foundation/testsuite/src -Foundation/testsuite/src/ActiveDispatcherTest.cpp -Foundation/testsuite/src/ActiveDispatcherTest.h -Foundation/testsuite/src/ActiveMethodTest.cpp -Foundation/testsuite/src/ActiveMethodTest.h -Foundation/testsuite/src/ActivityTest.cpp -Foundation/testsuite/src/ActivityTest.h -Foundation/testsuite/src/AnyTest.cpp -Foundation/testsuite/src/AnyTest.h -Foundation/testsuite/src/ArrayTest.cpp -Foundation/testsuite/src/ArrayTest.h -Foundation/testsuite/src/AutoPtrTest.cpp -Foundation/testsuite/src/AutoPtrTest.h -Foundation/testsuite/src/AutoReleasePoolTest.cpp -Foundation/testsuite/src/AutoReleasePoolTest.h -Foundation/testsuite/src/Base32Test.cpp -Foundation/testsuite/src/Base32Test.h -Foundation/testsuite/src/Base64Test.cpp -Foundation/testsuite/src/Base64Test.h -Foundation/testsuite/src/BasicEventTest.cpp -Foundation/testsuite/src/BasicEventTest.h -Foundation/testsuite/src/BinaryReaderWriterTest.cpp -Foundation/testsuite/src/BinaryReaderWriterTest.h -Foundation/testsuite/src/ByteOrderTest.cpp -Foundation/testsuite/src/ByteOrderTest.h -Foundation/testsuite/src/CacheTestSuite.cpp -Foundation/testsuite/src/CacheTestSuite.h -Foundation/testsuite/src/ChannelTest.cpp -Foundation/testsuite/src/ChannelTest.h -Foundation/testsuite/src/ClassLoaderTest.cpp -Foundation/testsuite/src/ClassLoaderTest.h -Foundation/testsuite/src/ClockTest.cpp -Foundation/testsuite/src/ClockTest.h -Foundation/testsuite/src/ConditionTest.cpp -Foundation/testsuite/src/ConditionTest.h -Foundation/testsuite/src/CoreTest.cpp -Foundation/testsuite/src/CoreTest.h -Foundation/testsuite/src/CoreTestSuite.cpp -Foundation/testsuite/src/CoreTestSuite.h -Foundation/testsuite/src/CountingStreamTest.cpp -Foundation/testsuite/src/CountingStreamTest.h -Foundation/testsuite/src/CryptTestSuite.cpp -Foundation/testsuite/src/CryptTestSuite.h -Foundation/testsuite/src/DateTimeFormatterTest.cpp -Foundation/testsuite/src/DateTimeFormatterTest.h -Foundation/testsuite/src/DateTimeParserTest.cpp -Foundation/testsuite/src/DateTimeParserTest.h -Foundation/testsuite/src/DateTimeTest.cpp -Foundation/testsuite/src/DateTimeTest.h -Foundation/testsuite/src/DateTimeTestSuite.cpp -Foundation/testsuite/src/DateTimeTestSuite.h -Foundation/testsuite/src/DigestStreamTest.cpp -Foundation/testsuite/src/DigestStreamTest.h -Foundation/testsuite/src/DirectoryIteratorsTest.cpp -Foundation/testsuite/src/DirectoryIteratorsTest.h -Foundation/testsuite/src/DirectoryWatcherTest.cpp -Foundation/testsuite/src/DirectoryWatcherTest.h -Foundation/testsuite/src/Driver.cpp -Foundation/testsuite/src/DummyDelegate.cpp -Foundation/testsuite/src/DummyDelegate.h -Foundation/testsuite/src/DynamicFactoryTest.cpp -Foundation/testsuite/src/DynamicFactoryTest.h -Foundation/testsuite/src/DynamicTestSuite.cpp -Foundation/testsuite/src/DynamicTestSuite.h -Foundation/testsuite/src/EventTestSuite.cpp -Foundation/testsuite/src/EventTestSuite.h -Foundation/testsuite/src/ExpireCacheTest.cpp -Foundation/testsuite/src/ExpireCacheTest.h -Foundation/testsuite/src/ExpireLRUCacheTest.cpp -Foundation/testsuite/src/ExpireLRUCacheTest.h -Foundation/testsuite/src/FIFOBufferStreamTest.cpp -Foundation/testsuite/src/FIFOBufferStreamTest.h -Foundation/testsuite/src/FIFOEventTest.cpp -Foundation/testsuite/src/FIFOEventTest.h -Foundation/testsuite/src/FileChannelTest.cpp -Foundation/testsuite/src/FileChannelTest.h -Foundation/testsuite/src/FileStreamTest.cpp -Foundation/testsuite/src/FileStreamTest.h -Foundation/testsuite/src/FilesystemTestSuite.cpp -Foundation/testsuite/src/FilesystemTestSuite.h -Foundation/testsuite/src/FileTest.cpp -Foundation/testsuite/src/FileTest.h -Foundation/testsuite/src/FormatTest.cpp -Foundation/testsuite/src/FormatTest.h -Foundation/testsuite/src/FoundationTestSuite.cpp -Foundation/testsuite/src/FoundationTestSuite.h -Foundation/testsuite/src/FPETest.cpp -Foundation/testsuite/src/FPETest.h -Foundation/testsuite/src/GlobTest.cpp -Foundation/testsuite/src/GlobTest.h -Foundation/testsuite/src/HashingTestSuite.cpp -Foundation/testsuite/src/HashingTestSuite.h -Foundation/testsuite/src/HashMapTest.cpp -Foundation/testsuite/src/HashMapTest.h -Foundation/testsuite/src/HashSetTest.cpp -Foundation/testsuite/src/HashSetTest.h -Foundation/testsuite/src/HashTableTest.cpp -Foundation/testsuite/src/HashTableTest.h -Foundation/testsuite/src/HexBinaryTest.cpp -Foundation/testsuite/src/HexBinaryTest.h -Foundation/testsuite/src/HMACEngineTest.cpp -Foundation/testsuite/src/HMACEngineTest.h -Foundation/testsuite/src/LinearHashTableTest.cpp -Foundation/testsuite/src/LinearHashTableTest.h -Foundation/testsuite/src/LineEndingConverterTest.cpp -Foundation/testsuite/src/LineEndingConverterTest.h -Foundation/testsuite/src/ListMapTest.cpp -Foundation/testsuite/src/ListMapTest.h -Foundation/testsuite/src/LocalDateTimeTest.cpp -Foundation/testsuite/src/LocalDateTimeTest.h -Foundation/testsuite/src/LoggerTest.cpp -Foundation/testsuite/src/LoggerTest.h -Foundation/testsuite/src/LoggingFactoryTest.cpp -Foundation/testsuite/src/LoggingFactoryTest.h -Foundation/testsuite/src/LoggingRegistryTest.cpp -Foundation/testsuite/src/LoggingRegistryTest.h -Foundation/testsuite/src/LoggingTestSuite.cpp -Foundation/testsuite/src/LoggingTestSuite.h -Foundation/testsuite/src/LogStreamTest.cpp -Foundation/testsuite/src/LogStreamTest.h -Foundation/testsuite/src/LRUCacheTest.cpp -Foundation/testsuite/src/LRUCacheTest.h -Foundation/testsuite/src/ManifestTest.cpp -Foundation/testsuite/src/ManifestTest.h -Foundation/testsuite/src/MD4EngineTest.cpp -Foundation/testsuite/src/MD4EngineTest.h -Foundation/testsuite/src/MD5EngineTest.cpp -Foundation/testsuite/src/MD5EngineTest.h -Foundation/testsuite/src/MemoryPoolTest.cpp -Foundation/testsuite/src/MemoryPoolTest.h -Foundation/testsuite/src/MemoryStreamTest.cpp -Foundation/testsuite/src/MemoryStreamTest.h -Foundation/testsuite/src/NamedEventTest.cpp -Foundation/testsuite/src/NamedEventTest.h -Foundation/testsuite/src/NamedMutexTest.cpp -Foundation/testsuite/src/NamedMutexTest.h -Foundation/testsuite/src/NamedTuplesTest.cpp -Foundation/testsuite/src/NamedTuplesTest.h -Foundation/testsuite/src/NDCTest.cpp -Foundation/testsuite/src/NDCTest.h -Foundation/testsuite/src/NotificationCenterTest.cpp -Foundation/testsuite/src/NotificationCenterTest.h -Foundation/testsuite/src/NotificationQueueTest.cpp -Foundation/testsuite/src/NotificationQueueTest.h -Foundation/testsuite/src/NotificationsTestSuite.cpp -Foundation/testsuite/src/NotificationsTestSuite.h -Foundation/testsuite/src/NullStreamTest.cpp -Foundation/testsuite/src/NullStreamTest.h -Foundation/testsuite/src/NumberFormatterTest.cpp -Foundation/testsuite/src/NumberFormatterTest.h -Foundation/testsuite/src/NumberParserTest.cpp -Foundation/testsuite/src/NumberParserTest.h -Foundation/testsuite/src/ObjectPoolTest.cpp -Foundation/testsuite/src/ObjectPoolTest.h -Foundation/testsuite/src/PathTest.cpp -Foundation/testsuite/src/PathTest.h -Foundation/testsuite/src/PatternFormatterTest.cpp -Foundation/testsuite/src/PatternFormatterTest.h -Foundation/testsuite/src/PBKDF2EngineTest.cpp -Foundation/testsuite/src/PBKDF2EngineTest.h -Foundation/testsuite/src/PriorityEventTest.cpp -Foundation/testsuite/src/PriorityEventTest.h -Foundation/testsuite/src/PriorityNotificationQueueTest.cpp -Foundation/testsuite/src/PriorityNotificationQueueTest.h -Foundation/testsuite/src/ProcessesTestSuite.cpp -Foundation/testsuite/src/ProcessesTestSuite.h -Foundation/testsuite/src/ProcessTest.cpp -Foundation/testsuite/src/ProcessTest.h -Foundation/testsuite/src/RandomStreamTest.cpp -Foundation/testsuite/src/RandomStreamTest.h -Foundation/testsuite/src/RandomTest.cpp -Foundation/testsuite/src/RandomTest.h -Foundation/testsuite/src/RegularExpressionTest.cpp -Foundation/testsuite/src/RegularExpressionTest.h -Foundation/testsuite/src/RWLockTest.cpp -Foundation/testsuite/src/RWLockTest.h -Foundation/testsuite/src/SemaphoreTest.cpp -Foundation/testsuite/src/SemaphoreTest.h -Foundation/testsuite/src/SHA1EngineTest.cpp -Foundation/testsuite/src/SHA1EngineTest.h -Foundation/testsuite/src/SharedLibraryTest.cpp -Foundation/testsuite/src/SharedLibraryTest.h -Foundation/testsuite/src/SharedLibraryTestSuite.cpp -Foundation/testsuite/src/SharedLibraryTestSuite.h -Foundation/testsuite/src/SharedMemoryTest.cpp -Foundation/testsuite/src/SharedMemoryTest.h -Foundation/testsuite/src/SharedPtrTest.cpp -Foundation/testsuite/src/SharedPtrTest.h -Foundation/testsuite/src/SimpleFileChannelTest.cpp -Foundation/testsuite/src/SimpleFileChannelTest.h -Foundation/testsuite/src/SimpleHashTableTest.cpp -Foundation/testsuite/src/SimpleHashTableTest.h -Foundation/testsuite/src/StopwatchTest.cpp -Foundation/testsuite/src/StopwatchTest.h -Foundation/testsuite/src/StreamConverterTest.cpp -Foundation/testsuite/src/StreamConverterTest.h -Foundation/testsuite/src/StreamCopierTest.cpp -Foundation/testsuite/src/StreamCopierTest.h -Foundation/testsuite/src/StreamsTestSuite.cpp -Foundation/testsuite/src/StreamsTestSuite.h -Foundation/testsuite/src/StreamTokenizerTest.cpp -Foundation/testsuite/src/StreamTokenizerTest.h -Foundation/testsuite/src/StringTest.cpp -Foundation/testsuite/src/StringTest.h -Foundation/testsuite/src/StringTokenizerTest.cpp -Foundation/testsuite/src/StringTokenizerTest.h -Foundation/testsuite/src/TaskManagerTest.cpp -Foundation/testsuite/src/TaskManagerTest.h -Foundation/testsuite/src/TaskTest.cpp -Foundation/testsuite/src/TaskTest.h -Foundation/testsuite/src/TaskTestSuite.cpp -Foundation/testsuite/src/TaskTestSuite.h -Foundation/testsuite/src/TeeStreamTest.cpp -Foundation/testsuite/src/TeeStreamTest.h -Foundation/testsuite/src/TestApp.cpp -Foundation/testsuite/src/TestApp_WINCE.cpp -Foundation/testsuite/src/TestChannel.cpp -Foundation/testsuite/src/TestChannel.h -Foundation/testsuite/src/TestLibrary.cpp -Foundation/testsuite/src/TestPlugin.cpp -Foundation/testsuite/src/TestPlugin.h -Foundation/testsuite/src/TextBufferIteratorTest.cpp -Foundation/testsuite/src/TextBufferIteratorTest.h -Foundation/testsuite/src/TextConverterTest.cpp -Foundation/testsuite/src/TextConverterTest.h -Foundation/testsuite/src/TextEncodingTest.cpp -Foundation/testsuite/src/TextEncodingTest.h -Foundation/testsuite/src/TextIteratorTest.cpp -Foundation/testsuite/src/TextIteratorTest.h -Foundation/testsuite/src/TextTestSuite.cpp -Foundation/testsuite/src/TextTestSuite.h -Foundation/testsuite/src/ThreadingTestSuite.cpp -Foundation/testsuite/src/ThreadingTestSuite.h -Foundation/testsuite/src/ThreadLocalTest.cpp -Foundation/testsuite/src/ThreadLocalTest.h -Foundation/testsuite/src/ThreadPoolTest.cpp -Foundation/testsuite/src/ThreadPoolTest.h -Foundation/testsuite/src/ThreadTest.cpp -Foundation/testsuite/src/ThreadTest.h -Foundation/testsuite/src/TimedNotificationQueueTest.cpp -Foundation/testsuite/src/TimedNotificationQueueTest.h -Foundation/testsuite/src/TimerTest.cpp -Foundation/testsuite/src/TimerTest.h -Foundation/testsuite/src/TimespanTest.cpp -Foundation/testsuite/src/TimespanTest.h -Foundation/testsuite/src/TimestampTest.cpp -Foundation/testsuite/src/TimestampTest.h -Foundation/testsuite/src/TimezoneTest.cpp -Foundation/testsuite/src/TimezoneTest.h -Foundation/testsuite/src/TuplesTest.cpp -Foundation/testsuite/src/TuplesTest.h -Foundation/testsuite/src/TypeListTest.cpp -Foundation/testsuite/src/TypeListTest.h -Foundation/testsuite/src/UnicodeConverterTest.cpp -Foundation/testsuite/src/UnicodeConverterTest.h -Foundation/testsuite/src/UniqueExpireCacheTest.cpp -Foundation/testsuite/src/UniqueExpireCacheTest.h -Foundation/testsuite/src/UniqueExpireLRUCacheTest.cpp -Foundation/testsuite/src/UniqueExpireLRUCacheTest.h -Foundation/testsuite/src/URIStreamOpenerTest.cpp -Foundation/testsuite/src/URIStreamOpenerTest.h -Foundation/testsuite/src/URITest.cpp -Foundation/testsuite/src/URITest.h -Foundation/testsuite/src/URITestSuite.cpp -Foundation/testsuite/src/URITestSuite.h -Foundation/testsuite/src/UTF8StringTest.cpp -Foundation/testsuite/src/UTF8StringTest.h -Foundation/testsuite/src/UUIDGeneratorTest.cpp -Foundation/testsuite/src/UUIDGeneratorTest.h -Foundation/testsuite/src/UUIDTest.cpp -Foundation/testsuite/src/UUIDTest.h -Foundation/testsuite/src/UUIDTestSuite.cpp -Foundation/testsuite/src/UUIDTestSuite.h -Foundation/testsuite/src/VarTest.cpp -Foundation/testsuite/src/VarTest.h -Foundation/testsuite/src/WinCEDriver.cpp -Foundation/testsuite/src/WinDriver.cpp -Foundation/testsuite/src/ZLibTest.cpp -Foundation/testsuite/src/ZLibTest.h -Foundation/testsuite/TestApp_CE_vs90.vcproj -Foundation/testsuite/TestApp_vs100.vcxproj -Foundation/testsuite/TestApp_vs100.vcxproj.filters -Foundation/testsuite/TestApp_vs110.vcxproj -Foundation/testsuite/TestApp_vs110.vcxproj.filters -Foundation/testsuite/TestApp_vs120.vcxproj -Foundation/testsuite/TestApp_vs120.vcxproj.filters -Foundation/testsuite/TestApp_vs140.vcxproj -Foundation/testsuite/TestApp_vs140.vcxproj.filters -Foundation/testsuite/TestApp_vs90.vcproj -Foundation/testsuite/TestApp_WEC2013_vs110.vcxproj -Foundation/testsuite/TestApp_WEC2013_vs110.vcxproj.filters -Foundation/testsuite/TestApp_WEC2013_vs120.vcxproj -Foundation/testsuite/TestApp_WEC2013_vs120.vcxproj.filters -Foundation/testsuite/TestApp_x64_vs100.vcxproj -Foundation/testsuite/TestApp_x64_vs100.vcxproj.filters -Foundation/testsuite/TestApp_x64_vs110.vcxproj -Foundation/testsuite/TestApp_x64_vs110.vcxproj.filters -Foundation/testsuite/TestApp_x64_vs120.vcxproj -Foundation/testsuite/TestApp_x64_vs120.vcxproj.filters -Foundation/testsuite/TestApp_x64_vs140.vcxproj -Foundation/testsuite/TestApp_x64_vs140.vcxproj.filters -Foundation/testsuite/TestApp_x64_vs90.vcproj -Foundation/testsuite/testlibrary.opt -Foundation/testsuite/TestLibrary_CE_vs90.vcproj -Foundation/testsuite/TestLibrary_vs100.vcxproj -Foundation/testsuite/TestLibrary_vs100.vcxproj.filters -Foundation/testsuite/TestLibrary_vs110.vcxproj -Foundation/testsuite/TestLibrary_vs110.vcxproj.filters -Foundation/testsuite/TestLibrary_vs120.vcxproj -Foundation/testsuite/TestLibrary_vs120.vcxproj.filters -Foundation/testsuite/TestLibrary_vs140.vcxproj -Foundation/testsuite/TestLibrary_vs140.vcxproj.filters -Foundation/testsuite/TestLibrary_vs90.vcproj -Foundation/testsuite/TestLibrary_WEC2013_vs110.vcxproj -Foundation/testsuite/TestLibrary_WEC2013_vs110.vcxproj.filters -Foundation/testsuite/TestLibrary_WEC2013_vs120.vcxproj -Foundation/testsuite/TestLibrary_WEC2013_vs120.vcxproj.filters -Foundation/testsuite/TestLibrary_x64_vs100.vcxproj -Foundation/testsuite/TestLibrary_x64_vs100.vcxproj.filters -Foundation/testsuite/TestLibrary_x64_vs110.vcxproj -Foundation/testsuite/TestLibrary_x64_vs110.vcxproj.filters -Foundation/testsuite/TestLibrary_x64_vs120.vcxproj -Foundation/testsuite/TestLibrary_x64_vs120.vcxproj.filters -Foundation/testsuite/TestLibrary_x64_vs140.vcxproj -Foundation/testsuite/TestLibrary_x64_vs140.vcxproj.filters -Foundation/testsuite/TestLibrary_x64_vs90.vcproj -Foundation/testsuite/TestSuite.vxbuild -Foundation/testsuite/TestSuite_CE_vs90.vcproj -Foundation/testsuite/TestSuite_vs100.vcxproj -Foundation/testsuite/TestSuite_vs100.vcxproj.filters -Foundation/testsuite/TestSuite_vs110.vcxproj -Foundation/testsuite/TestSuite_vs110.vcxproj.filters -Foundation/testsuite/TestSuite_vs120.vcxproj -Foundation/testsuite/TestSuite_vs120.vcxproj.filters -Foundation/testsuite/TestSuite_vs140.vcxproj -Foundation/testsuite/TestSuite_vs140.vcxproj.filters -Foundation/testsuite/TestSuite_vs90.vcproj -Foundation/testsuite/TestSuite_WEC2013_vs110.vcxproj -Foundation/testsuite/TestSuite_WEC2013_vs110.vcxproj.filters -Foundation/testsuite/TestSuite_WEC2013_vs120.vcxproj -Foundation/testsuite/TestSuite_WEC2013_vs120.vcxproj.filters -Foundation/testsuite/TestSuite_x64_vs100.vcxproj -Foundation/testsuite/TestSuite_x64_vs100.vcxproj.filters -Foundation/testsuite/TestSuite_x64_vs110.vcxproj -Foundation/testsuite/TestSuite_x64_vs110.vcxproj.filters -Foundation/testsuite/TestSuite_x64_vs120.vcxproj -Foundation/testsuite/TestSuite_x64_vs120.vcxproj.filters -Foundation/testsuite/TestSuite_x64_vs140.vcxproj -Foundation/testsuite/TestSuite_x64_vs140.vcxproj.filters -Foundation/testsuite/TestSuite_x64_vs90.vcproj -Foundation/wcelibcex-1.0 -Foundation/wcelibcex-1.0/AUTHORS.txt -Foundation/wcelibcex-1.0/BUILD.txt -Foundation/wcelibcex-1.0/COPYING.txt -Foundation/wcelibcex-1.0/LICENSE.txt -Foundation/wcelibcex-1.0/msvc80 -Foundation/wcelibcex-1.0/msvc80/wcelibcex.vsprops -Foundation/wcelibcex-1.0/msvc80/wcelibcex_lib.sln -Foundation/wcelibcex-1.0/msvc80/wcelibcex_lib.vcproj -Foundation/wcelibcex-1.0/README.txt -Foundation/wcelibcex-1.0/src -Foundation/wcelibcex-1.0/src/errno.h -Foundation/wcelibcex-1.0/src/fcntl.h -Foundation/wcelibcex-1.0/src/wce_abort.c -Foundation/wcelibcex-1.0/src/wce_access.c -Foundation/wcelibcex-1.0/src/wce_asctime.c -Foundation/wcelibcex-1.0/src/wce_bsearch.c -Foundation/wcelibcex-1.0/src/wce_clock.c -Foundation/wcelibcex-1.0/src/wce_ctime.c -Foundation/wcelibcex-1.0/src/wce_direct.h -Foundation/wcelibcex-1.0/src/wce_directorymanagement.c -Foundation/wcelibcex-1.0/src/wce_errno.c -Foundation/wcelibcex-1.0/src/wce_errno.h -Foundation/wcelibcex-1.0/src/wce_fcntl.h -Foundation/wcelibcex-1.0/src/wce_findfile.c -Foundation/wcelibcex-1.0/src/wce_getenv.c -Foundation/wcelibcex-1.0/src/wce_getopt.c -Foundation/wcelibcex-1.0/src/wce_gettimeofday.c -Foundation/wcelibcex-1.0/src/wce_io.h -Foundation/wcelibcex-1.0/src/wce_lfind.c -Foundation/wcelibcex-1.0/src/wce_localtime.c -Foundation/wcelibcex-1.0/src/wce_mkdir.c -Foundation/wcelibcex-1.0/src/wce_mktime.c -Foundation/wcelibcex-1.0/src/wce_path.c -Foundation/wcelibcex-1.0/src/wce_rename.c -Foundation/wcelibcex-1.0/src/wce_rewind.c -Foundation/wcelibcex-1.0/src/wce_rmdir.c -Foundation/wcelibcex-1.0/src/wce_setlocale.c -Foundation/wcelibcex-1.0/src/wce_stat.c -Foundation/wcelibcex-1.0/src/wce_stat.h -Foundation/wcelibcex-1.0/src/wce_stdio.h -Foundation/wcelibcex-1.0/src/wce_stdlib.h -Foundation/wcelibcex-1.0/src/wce_strerror.c -Foundation/wcelibcex-1.0/src/wce_string.h -Foundation/wcelibcex-1.0/src/wce_time.c -Foundation/wcelibcex-1.0/src/wce_time.h -Foundation/wcelibcex-1.0/src/wce_timesys.c -Foundation/wcelibcex-1.0/src/wce_timesys.h -Foundation/wcelibcex-1.0/src/wce_types.h -Foundation/wcelibcex-1.0/src/wce_unistd.h -Foundation/wcelibcex-1.0/src/wce_unlink.c -Foundation/wcelibcex-1.0/src/wce_winbase.c -Foundation/wcelibcex-1.0/src/wce_winbase.h -JSON -JSON/cmake -JSON/cmake/PocoJSONConfig.cmake -JSON/CMakeLists.txt -JSON/include -JSON/include/Poco -JSON/include/Poco/JSON -JSON/include/Poco/JSON/Array.h -JSON/include/Poco/JSON/Handler.h -JSON/include/Poco/JSON/JSON.h -JSON/include/Poco/JSON/JSONException.h -JSON/include/Poco/JSON/Object.h -JSON/include/Poco/JSON/ParseHandler.h -JSON/include/Poco/JSON/Parser.h -JSON/include/Poco/JSON/PrintHandler.h -JSON/include/Poco/JSON/Query.h -JSON/include/Poco/JSON/Stringifier.h -JSON/include/Poco/JSON/Template.h -JSON/include/Poco/JSON/TemplateCache.h -JSON/JSON.progen -JSON/JSON_CE_vs90.sln -JSON/JSON_CE_vs90.vcproj -JSON/JSON_vs100.sln -JSON/JSON_vs100.vcxproj -JSON/JSON_vs100.vcxproj.filters -JSON/JSON_vs110.sln -JSON/JSON_vs110.vcxproj -JSON/JSON_vs110.vcxproj.filters -JSON/JSON_vs120.sln -JSON/JSON_vs120.vcxproj -JSON/JSON_vs120.vcxproj.filters -JSON/JSON_vs140.sln -JSON/JSON_vs140.vcxproj -JSON/JSON_vs140.vcxproj.filters -JSON/JSON_vs90.sln -JSON/JSON_vs90.vcproj -JSON/JSON_WEC2013_vs110.sln -JSON/JSON_WEC2013_vs110.vcxproj -JSON/JSON_WEC2013_vs110.vcxproj.filters -JSON/JSON_WEC2013_vs120.sln -JSON/JSON_WEC2013_vs120.vcxproj -JSON/JSON_WEC2013_vs120.vcxproj.filters -JSON/JSON_x64_vs100.sln -JSON/JSON_x64_vs100.vcxproj -JSON/JSON_x64_vs100.vcxproj.filters -JSON/JSON_x64_vs110.sln -JSON/JSON_x64_vs110.vcxproj -JSON/JSON_x64_vs110.vcxproj.filters -JSON/JSON_x64_vs120.sln -JSON/JSON_x64_vs120.vcxproj -JSON/JSON_x64_vs120.vcxproj.filters -JSON/JSON_x64_vs140.sln -JSON/JSON_x64_vs140.vcxproj -JSON/JSON_x64_vs140.vcxproj.filters -JSON/JSON_x64_vs90.sln -JSON/JSON_x64_vs90.vcproj -JSON/Makefile -JSON/samples -JSON/samples/Benchmark -JSON/samples/Benchmark/Benchmark.progen -JSON/samples/Benchmark/Benchmark_CE_vs90.vcproj -JSON/samples/Benchmark/Benchmark_vs100.vcxproj -JSON/samples/Benchmark/Benchmark_vs100.vcxproj.filters -JSON/samples/Benchmark/Benchmark_vs110.vcxproj -JSON/samples/Benchmark/Benchmark_vs110.vcxproj.filters -JSON/samples/Benchmark/Benchmark_vs120.vcxproj -JSON/samples/Benchmark/Benchmark_vs120.vcxproj.filters -JSON/samples/Benchmark/Benchmark_vs140.vcxproj -JSON/samples/Benchmark/Benchmark_vs140.vcxproj.filters -JSON/samples/Benchmark/Benchmark_vs90.vcproj -JSON/samples/Benchmark/Benchmark_WEC2013_vs110.vcxproj -JSON/samples/Benchmark/Benchmark_WEC2013_vs110.vcxproj.filters -JSON/samples/Benchmark/Benchmark_WEC2013_vs120.vcxproj -JSON/samples/Benchmark/Benchmark_WEC2013_vs120.vcxproj.filters -JSON/samples/Benchmark/Benchmark_x64_vs100.vcxproj -JSON/samples/Benchmark/Benchmark_x64_vs100.vcxproj.filters -JSON/samples/Benchmark/Benchmark_x64_vs110.vcxproj -JSON/samples/Benchmark/Benchmark_x64_vs110.vcxproj.filters -JSON/samples/Benchmark/Benchmark_x64_vs120.vcxproj -JSON/samples/Benchmark/Benchmark_x64_vs120.vcxproj.filters -JSON/samples/Benchmark/Benchmark_x64_vs140.vcxproj -JSON/samples/Benchmark/Benchmark_x64_vs140.vcxproj.filters -JSON/samples/Benchmark/Benchmark_x64_vs90.vcproj -JSON/samples/Benchmark/CMakeLists.txt -JSON/samples/Benchmark/Makefile -JSON/samples/Benchmark/src -JSON/samples/Benchmark/src/Benchmark.cpp -JSON/samples/CMakeLists.txt -JSON/samples/Makefile -JSON/samples/samples.progen -JSON/samples/samples_CE_vs90.sln -JSON/samples/samples_vs100.sln -JSON/samples/samples_vs110.sln -JSON/samples/samples_vs120.sln -JSON/samples/samples_vs140.sln -JSON/samples/samples_vs90.sln -JSON/samples/samples_WEC2013_vs110.sln -JSON/samples/samples_WEC2013_vs120.sln -JSON/samples/samples_x64_vs100.sln -JSON/samples/samples_x64_vs110.sln -JSON/samples/samples_x64_vs120.sln -JSON/samples/samples_x64_vs140.sln -JSON/samples/samples_x64_vs90.sln -JSON/src -JSON/src/Array.cpp -JSON/src/Handler.cpp -JSON/src/JSONException.cpp -JSON/src/Object.cpp -JSON/src/ParseHandler.cpp -JSON/src/Parser.cpp -JSON/src/PrintHandler.cpp -JSON/src/Query.cpp -JSON/src/Stringifier.cpp -JSON/src/Template.cpp -JSON/src/TemplateCache.cpp -JSON/testsuite -JSON/testsuite/CMakeLists.txt -JSON/testsuite/data -JSON/testsuite/data/invalid -JSON/testsuite/data/invalid/apostrophe -JSON/testsuite/data/invalid/apostrophe/input -JSON/testsuite/data/invalid/ascii-unicode-identifier -JSON/testsuite/data/invalid/ascii-unicode-identifier/input -JSON/testsuite/data/invalid/brace-comma -JSON/testsuite/data/invalid/brace-comma/input -JSON/testsuite/data/invalid/bracket-comma -JSON/testsuite/data/invalid/bracket-comma/input -JSON/testsuite/data/invalid/bracket-one-comma -JSON/testsuite/data/invalid/bracket-one-comma/input -JSON/testsuite/data/invalid/double-closing-brace -JSON/testsuite/data/invalid/double-closing-brace/input -JSON/testsuite/data/invalid/double-closing-bracket -JSON/testsuite/data/invalid/double-closing-bracket/input -JSON/testsuite/data/invalid/empty -JSON/testsuite/data/invalid/empty/input -JSON/testsuite/data/invalid/escaped-null-byte-in-string -JSON/testsuite/data/invalid/escaped-null-byte-in-string/input -JSON/testsuite/data/invalid/extra-comma-in-array -JSON/testsuite/data/invalid/extra-comma-in-array/input -JSON/testsuite/data/invalid/extra-comma-in-multiline-array -JSON/testsuite/data/invalid/extra-comma-in-multiline-array/input -JSON/testsuite/data/invalid/garbage-after-newline -JSON/testsuite/data/invalid/garbage-after-newline/input -JSON/testsuite/data/invalid/garbage-at-the-end -JSON/testsuite/data/invalid/garbage-at-the-end/input -JSON/testsuite/data/invalid/integer-starting-with-zero -JSON/testsuite/data/invalid/integer-starting-with-zero/input -JSON/testsuite/data/invalid/invalid-escape -JSON/testsuite/data/invalid/invalid-escape/input -JSON/testsuite/data/invalid/invalid-identifier -JSON/testsuite/data/invalid/invalid-identifier/input -JSON/testsuite/data/invalid/invalid-negative-integer -JSON/testsuite/data/invalid/invalid-negative-integer/input -JSON/testsuite/data/invalid/invalid-negative-real -JSON/testsuite/data/invalid/invalid-negative-real/input -JSON/testsuite/data/invalid/invalid-second-surrogate -JSON/testsuite/data/invalid/invalid-second-surrogate/input -JSON/testsuite/data/invalid/lone-open-brace -JSON/testsuite/data/invalid/lone-open-brace/input -JSON/testsuite/data/invalid/lone-open-bracket -JSON/testsuite/data/invalid/lone-open-bracket/input -JSON/testsuite/data/invalid/lone-second-surrogate -JSON/testsuite/data/invalid/lone-second-surrogate/input -JSON/testsuite/data/invalid/minus-sign-without-number -JSON/testsuite/data/invalid/minus-sign-without-number/input -JSON/testsuite/data/invalid/negative-integer-starting-with-zero -JSON/testsuite/data/invalid/negative-integer-starting-with-zero/input -JSON/testsuite/data/invalid/null -JSON/testsuite/data/invalid/null/input -JSON/testsuite/data/invalid/null-byte-in-string -JSON/testsuite/data/invalid/null-byte-in-string/input -JSON/testsuite/data/invalid/null-byte-outside-string -JSON/testsuite/data/invalid/null-byte-outside-string/input -JSON/testsuite/data/invalid/object-apostrophes -JSON/testsuite/data/invalid/object-apostrophes/input -JSON/testsuite/data/invalid/object-garbage-at-end -JSON/testsuite/data/invalid/object-garbage-at-end/input -JSON/testsuite/data/invalid/object-in-unterminated-array -JSON/testsuite/data/invalid/object-in-unterminated-array/input -JSON/testsuite/data/invalid/object-no-colon -JSON/testsuite/data/invalid/object-no-colon/input -JSON/testsuite/data/invalid/object-no-value -JSON/testsuite/data/invalid/object-no-value/input -JSON/testsuite/data/invalid/object-unterminated-value -JSON/testsuite/data/invalid/object-unterminated-value/input -JSON/testsuite/data/invalid/real-garbage-after-e -JSON/testsuite/data/invalid/real-garbage-after-e/input -JSON/testsuite/data/invalid/real-negative-overflow -JSON/testsuite/data/invalid/real-negative-overflow/input -JSON/testsuite/data/invalid/real-positive-overflow -JSON/testsuite/data/invalid/real-positive-overflow/input -JSON/testsuite/data/invalid/real-truncated-at-e -JSON/testsuite/data/invalid/real-truncated-at-e/input -JSON/testsuite/data/invalid/real-truncated-at-point -JSON/testsuite/data/invalid/real-truncated-at-point/input -JSON/testsuite/data/invalid/tab-character-in-string -JSON/testsuite/data/invalid/tab-character-in-string/input -JSON/testsuite/data/invalid/too-big-negative-integer -JSON/testsuite/data/invalid/too-big-negative-integer/input -JSON/testsuite/data/invalid/too-big-positive-integer -JSON/testsuite/data/invalid/too-big-positive-integer/input -JSON/testsuite/data/invalid/truncated-unicode-surrogate -JSON/testsuite/data/invalid/truncated-unicode-surrogate/input -JSON/testsuite/data/invalid/unicode-identifier -JSON/testsuite/data/invalid/unicode-identifier/input -JSON/testsuite/data/invalid/unterminated-array -JSON/testsuite/data/invalid/unterminated-array/input -JSON/testsuite/data/invalid/unterminated-array-and-object -JSON/testsuite/data/invalid/unterminated-array-and-object/input -JSON/testsuite/data/invalid/unterminated-empty-key -JSON/testsuite/data/invalid/unterminated-empty-key/input -JSON/testsuite/data/invalid/unterminated-key -JSON/testsuite/data/invalid/unterminated-key/input -JSON/testsuite/data/invalid/unterminated-object-and-array -JSON/testsuite/data/invalid/unterminated-object-and-array/input -JSON/testsuite/data/invalid/unterminated-string -JSON/testsuite/data/invalid/unterminated-string/input -JSON/testsuite/data/invalid-unicode -JSON/testsuite/data/invalid-unicode/encoded-surrogate-half -JSON/testsuite/data/invalid-unicode/encoded-surrogate-half/input -JSON/testsuite/data/invalid-unicode/invalid-utf-8-after-backslash -JSON/testsuite/data/invalid-unicode/invalid-utf-8-after-backslash/input -JSON/testsuite/data/invalid-unicode/invalid-utf-8-in-array -JSON/testsuite/data/invalid-unicode/invalid-utf-8-in-array/input -JSON/testsuite/data/invalid-unicode/invalid-utf-8-in-bigger-int -JSON/testsuite/data/invalid-unicode/invalid-utf-8-in-bigger-int/input -JSON/testsuite/data/invalid-unicode/invalid-utf-8-in-escape -JSON/testsuite/data/invalid-unicode/invalid-utf-8-in-escape/input -JSON/testsuite/data/invalid-unicode/invalid-utf-8-in-exponent -JSON/testsuite/data/invalid-unicode/invalid-utf-8-in-exponent/input -JSON/testsuite/data/invalid-unicode/invalid-utf-8-in-identifier -JSON/testsuite/data/invalid-unicode/invalid-utf-8-in-identifier/input -JSON/testsuite/data/invalid-unicode/invalid-utf-8-in-int -JSON/testsuite/data/invalid-unicode/invalid-utf-8-in-int/input -JSON/testsuite/data/invalid-unicode/invalid-utf-8-in-real-after-e -JSON/testsuite/data/invalid-unicode/invalid-utf-8-in-real-after-e/input -JSON/testsuite/data/invalid-unicode/invalid-utf-8-in-string -JSON/testsuite/data/invalid-unicode/invalid-utf-8-in-string/input -JSON/testsuite/data/invalid-unicode/lone-invalid-utf-8 -JSON/testsuite/data/invalid-unicode/lone-invalid-utf-8/input -JSON/testsuite/data/invalid-unicode/lone-utf-8-continuation-byte -JSON/testsuite/data/invalid-unicode/lone-utf-8-continuation-byte/input -JSON/testsuite/data/invalid-unicode/not-in-unicode-range -JSON/testsuite/data/invalid-unicode/not-in-unicode-range/input -JSON/testsuite/data/invalid-unicode/overlong-3-byte-encoding -JSON/testsuite/data/invalid-unicode/overlong-3-byte-encoding/input -JSON/testsuite/data/invalid-unicode/overlong-4-byte-encoding -JSON/testsuite/data/invalid-unicode/overlong-4-byte-encoding/input -JSON/testsuite/data/invalid-unicode/overlong-ascii-encoding -JSON/testsuite/data/invalid-unicode/overlong-ascii-encoding/input -JSON/testsuite/data/invalid-unicode/restricted-utf-8 -JSON/testsuite/data/invalid-unicode/restricted-utf-8/input -JSON/testsuite/data/invalid-unicode/truncated-utf-8 -JSON/testsuite/data/invalid-unicode/truncated-utf-8/input -JSON/testsuite/data/valid -JSON/testsuite/data/valid/complex-array -JSON/testsuite/data/valid/complex-array/input -JSON/testsuite/data/valid/complex-object -JSON/testsuite/data/valid/complex-object/input -JSON/testsuite/data/valid/empty-array -JSON/testsuite/data/valid/empty-array/input -JSON/testsuite/data/valid/empty-object -JSON/testsuite/data/valid/empty-object/input -JSON/testsuite/data/valid/empty-object-in-array -JSON/testsuite/data/valid/empty-object-in-array/input -JSON/testsuite/data/valid/empty-string -JSON/testsuite/data/valid/empty-string/input -JSON/testsuite/data/valid/escaped-utf-control-char -JSON/testsuite/data/valid/escaped-utf-control-char/input -JSON/testsuite/data/valid/false -JSON/testsuite/data/valid/false/input -JSON/testsuite/data/valid/negative-int -JSON/testsuite/data/valid/negative-int/input -JSON/testsuite/data/valid/negative-one -JSON/testsuite/data/valid/negative-one/input -JSON/testsuite/data/valid/negative-zero -JSON/testsuite/data/valid/negative-zero/input -JSON/testsuite/data/valid/null -JSON/testsuite/data/valid/null/input -JSON/testsuite/data/valid/one-byte-utf-8 -JSON/testsuite/data/valid/one-byte-utf-8/input -JSON/testsuite/data/valid/real-capital-e -JSON/testsuite/data/valid/real-capital-e/input -JSON/testsuite/data/valid/real-capital-e-negative-exponent -JSON/testsuite/data/valid/real-capital-e-negative-exponent/input -JSON/testsuite/data/valid/real-capital-e-positive-exponent -JSON/testsuite/data/valid/real-capital-e-positive-exponent/input -JSON/testsuite/data/valid/real-exponent -JSON/testsuite/data/valid/real-exponent/input -JSON/testsuite/data/valid/real-fraction-exponent -JSON/testsuite/data/valid/real-fraction-exponent/input -JSON/testsuite/data/valid/real-negative-exponent -JSON/testsuite/data/valid/real-negative-exponent/input -JSON/testsuite/data/valid/real-positive-exponent -JSON/testsuite/data/valid/real-positive-exponent/input -JSON/testsuite/data/valid/real-underflow -JSON/testsuite/data/valid/real-underflow/input -JSON/testsuite/data/valid/short-string -JSON/testsuite/data/valid/short-string/input -JSON/testsuite/data/valid/simple-ascii-string -JSON/testsuite/data/valid/simple-ascii-string/input -JSON/testsuite/data/valid/simple-int-0 -JSON/testsuite/data/valid/simple-int-0/input -JSON/testsuite/data/valid/simple-int-1 -JSON/testsuite/data/valid/simple-int-1/input -JSON/testsuite/data/valid/simple-int-123 -JSON/testsuite/data/valid/simple-int-123/input -JSON/testsuite/data/valid/simple-object -JSON/testsuite/data/valid/simple-object/input -JSON/testsuite/data/valid/simple-real -JSON/testsuite/data/valid/simple-real/input -JSON/testsuite/data/valid/string-escapes -JSON/testsuite/data/valid/string-escapes/input -JSON/testsuite/data/valid/three-byte-utf-8 -JSON/testsuite/data/valid/three-byte-utf-8/input -JSON/testsuite/data/valid/true -JSON/testsuite/data/valid/true/input -JSON/testsuite/data/valid/two-byte-utf-8 -JSON/testsuite/data/valid/two-byte-utf-8/input -JSON/testsuite/data/valid/utf-8-string -JSON/testsuite/data/valid/utf-8-string/input -JSON/testsuite/data/valid/utf-surrogate-four-byte-encoding -JSON/testsuite/data/valid/utf-surrogate-four-byte-encoding/input -JSON/testsuite/Makefile -JSON/testsuite/src -JSON/testsuite/src/Driver.cpp -JSON/testsuite/src/JSONTest.cpp -JSON/testsuite/src/JSONTest.h -JSON/testsuite/src/JSONTestSuite.cpp -JSON/testsuite/src/JSONTestSuite.h -JSON/testsuite/src/WinCEDriver.cpp -JSON/testsuite/src/WinDriver.cpp -JSON/testsuite/TestSuite.progen -JSON/testsuite/TestSuite_CE_vs90.vcproj -JSON/testsuite/TestSuite_vs100.vcxproj -JSON/testsuite/TestSuite_vs100.vcxproj.filters -JSON/testsuite/TestSuite_vs110.vcxproj -JSON/testsuite/TestSuite_vs110.vcxproj.filters -JSON/testsuite/TestSuite_vs120.vcxproj -JSON/testsuite/TestSuite_vs120.vcxproj.filters -JSON/testsuite/TestSuite_vs140.vcxproj -JSON/testsuite/TestSuite_vs140.vcxproj.filters -JSON/testsuite/TestSuite_vs90.vcproj -JSON/testsuite/TestSuite_WEC2013_vs110.vcxproj -JSON/testsuite/TestSuite_WEC2013_vs110.vcxproj.filters -JSON/testsuite/TestSuite_WEC2013_vs120.vcxproj -JSON/testsuite/TestSuite_WEC2013_vs120.vcxproj.filters -JSON/testsuite/TestSuite_x64_vs100.vcxproj -JSON/testsuite/TestSuite_x64_vs100.vcxproj.filters -JSON/testsuite/TestSuite_x64_vs110.vcxproj -JSON/testsuite/TestSuite_x64_vs110.vcxproj.filters -JSON/testsuite/TestSuite_x64_vs120.vcxproj -JSON/testsuite/TestSuite_x64_vs120.vcxproj.filters -JSON/testsuite/TestSuite_x64_vs140.vcxproj -JSON/testsuite/TestSuite_x64_vs140.vcxproj.filters -JSON/testsuite/TestSuite_x64_vs90.vcproj -libversion -LICENSE -Makefile -MANIFEST -MongoDB -MongoDB/cmake -MongoDB/cmake/PocoMongoDBConfig.cmake -MongoDB/CMakeLists.txt -MongoDB/include -MongoDB/include/Poco -MongoDB/include/Poco/MongoDB -MongoDB/include/Poco/MongoDB/Array.h -MongoDB/include/Poco/MongoDB/Binary.h -MongoDB/include/Poco/MongoDB/BSONReader.h -MongoDB/include/Poco/MongoDB/BSONWriter.h -MongoDB/include/Poco/MongoDB/Connection.h -MongoDB/include/Poco/MongoDB/Cursor.h -MongoDB/include/Poco/MongoDB/Database.h -MongoDB/include/Poco/MongoDB/DeleteRequest.h -MongoDB/include/Poco/MongoDB/Document.h -MongoDB/include/Poco/MongoDB/Element.h -MongoDB/include/Poco/MongoDB/GetMoreRequest.h -MongoDB/include/Poco/MongoDB/InsertRequest.h -MongoDB/include/Poco/MongoDB/JavaScriptCode.h -MongoDB/include/Poco/MongoDB/KillCursorsRequest.h -MongoDB/include/Poco/MongoDB/Message.h -MongoDB/include/Poco/MongoDB/MessageHeader.h -MongoDB/include/Poco/MongoDB/MongoDB.h -MongoDB/include/Poco/MongoDB/ObjectId.h -MongoDB/include/Poco/MongoDB/PoolableConnectionFactory.h -MongoDB/include/Poco/MongoDB/QueryRequest.h -MongoDB/include/Poco/MongoDB/RegularExpression.h -MongoDB/include/Poco/MongoDB/ReplicaSet.h -MongoDB/include/Poco/MongoDB/RequestMessage.h -MongoDB/include/Poco/MongoDB/ResponseMessage.h -MongoDB/include/Poco/MongoDB/UpdateRequest.h -MongoDB/Makefile -MongoDB/MongoDB.progen -MongoDB/MongoDB_CE_vs90.sln -MongoDB/MongoDB_CE_vs90.vcproj -MongoDB/MongoDB_vs100.sln -MongoDB/MongoDB_vs100.vcxproj -MongoDB/MongoDB_vs100.vcxproj.filters -MongoDB/MongoDB_vs110.sln -MongoDB/MongoDB_vs110.vcxproj -MongoDB/MongoDB_vs110.vcxproj.filters -MongoDB/MongoDB_vs120.sln -MongoDB/MongoDB_vs120.vcxproj -MongoDB/MongoDB_vs120.vcxproj.filters -MongoDB/MongoDB_vs140.sln -MongoDB/MongoDB_vs140.vcxproj -MongoDB/MongoDB_vs140.vcxproj.filters -MongoDB/MongoDB_vs90.sln -MongoDB/MongoDB_vs90.vcproj -MongoDB/MongoDB_x64_vs100.sln -MongoDB/MongoDB_x64_vs100.vcxproj -MongoDB/MongoDB_x64_vs100.vcxproj.filters -MongoDB/MongoDB_x64_vs110.sln -MongoDB/MongoDB_x64_vs110.vcxproj -MongoDB/MongoDB_x64_vs110.vcxproj.filters -MongoDB/MongoDB_x64_vs120.sln -MongoDB/MongoDB_x64_vs120.vcxproj -MongoDB/MongoDB_x64_vs120.vcxproj.filters -MongoDB/MongoDB_x64_vs140.sln -MongoDB/MongoDB_x64_vs140.vcxproj -MongoDB/MongoDB_x64_vs140.vcxproj.filters -MongoDB/MongoDB_x64_vs90.sln -MongoDB/MongoDB_x64_vs90.vcproj -MongoDB/samples -MongoDB/samples/CMakeLists.txt -MongoDB/samples/Makefile -MongoDB/samples/samples.progen -MongoDB/samples/samples_CE_vs90.sln -MongoDB/samples/samples_vs100.sln -MongoDB/samples/samples_vs110.sln -MongoDB/samples/samples_vs120.sln -MongoDB/samples/samples_vs140.sln -MongoDB/samples/samples_vs90.sln -MongoDB/samples/samples_x64_vs100.sln -MongoDB/samples/samples_x64_vs110.sln -MongoDB/samples/samples_x64_vs120.sln -MongoDB/samples/samples_x64_vs140.sln -MongoDB/samples/samples_x64_vs90.sln -MongoDB/samples/SQLToMongo -MongoDB/samples/SQLToMongo/CMakeLists.txt -MongoDB/samples/SQLToMongo/Makefile -MongoDB/samples/SQLToMongo/SQLToMongo.progen -MongoDB/samples/SQLToMongo/SQLToMongo_CE_vs90.vcproj -MongoDB/samples/SQLToMongo/SQLToMongo_vs100.vcxproj -MongoDB/samples/SQLToMongo/SQLToMongo_vs100.vcxproj.filters -MongoDB/samples/SQLToMongo/SQLToMongo_vs110.vcxproj -MongoDB/samples/SQLToMongo/SQLToMongo_vs110.vcxproj.filters -MongoDB/samples/SQLToMongo/SQLToMongo_vs120.vcxproj -MongoDB/samples/SQLToMongo/SQLToMongo_vs120.vcxproj.filters -MongoDB/samples/SQLToMongo/SQLToMongo_vs140.vcxproj -MongoDB/samples/SQLToMongo/SQLToMongo_vs140.vcxproj.filters -MongoDB/samples/SQLToMongo/SQLToMongo_vs90.vcproj -MongoDB/samples/SQLToMongo/SQLToMongo_x64_vs100.vcxproj -MongoDB/samples/SQLToMongo/SQLToMongo_x64_vs100.vcxproj.filters -MongoDB/samples/SQLToMongo/SQLToMongo_x64_vs110.vcxproj -MongoDB/samples/SQLToMongo/SQLToMongo_x64_vs110.vcxproj.filters -MongoDB/samples/SQLToMongo/SQLToMongo_x64_vs120.vcxproj -MongoDB/samples/SQLToMongo/SQLToMongo_x64_vs120.vcxproj.filters -MongoDB/samples/SQLToMongo/SQLToMongo_x64_vs140.vcxproj -MongoDB/samples/SQLToMongo/SQLToMongo_x64_vs140.vcxproj.filters -MongoDB/samples/SQLToMongo/SQLToMongo_x64_vs90.vcproj -MongoDB/samples/SQLToMongo/src -MongoDB/samples/SQLToMongo/src/SQLToMongo.cpp -MongoDB/src -MongoDB/src/Array.cpp -MongoDB/src/Binary.cpp -MongoDB/src/Connection.cpp -MongoDB/src/Cursor.cpp -MongoDB/src/Database.cpp -MongoDB/src/DeleteRequest.cpp -MongoDB/src/Document.cpp -MongoDB/src/Element.cpp -MongoDB/src/GetMoreRequest.cpp -MongoDB/src/InsertRequest.cpp -MongoDB/src/JavaScriptCode.cpp -MongoDB/src/KillCursorsRequest.cpp -MongoDB/src/Message.cpp -MongoDB/src/MessageHeader.cpp -MongoDB/src/ObjectId.cpp -MongoDB/src/QueryRequest.cpp -MongoDB/src/RegularExpression.cpp -MongoDB/src/ReplicaSet.cpp -MongoDB/src/RequestMessage.cpp -MongoDB/src/ResponseMessage.cpp -MongoDB/src/UpdateRequest.cpp -MongoDB/testsuite -MongoDB/testsuite/CMakeLists.txt -MongoDB/testsuite/Makefile -MongoDB/testsuite/src -MongoDB/testsuite/src/Driver.cpp -MongoDB/testsuite/src/MongoDBTest.cpp -MongoDB/testsuite/src/MongoDBTest.h -MongoDB/testsuite/src/MongoDBTestSuite.cpp -MongoDB/testsuite/src/MongoDBTestSuite.h -MongoDB/testsuite/src/WinCEDriver.cpp -MongoDB/testsuite/src/WinDriver.cpp -MongoDB/testsuite/TestSuite.progen -MongoDB/testsuite/TestSuite_CE_vs90.vcproj -MongoDB/testsuite/TestSuite_vs100.vcxproj -MongoDB/testsuite/TestSuite_vs100.vcxproj.filters -MongoDB/testsuite/TestSuite_vs110.vcxproj -MongoDB/testsuite/TestSuite_vs110.vcxproj.filters -MongoDB/testsuite/TestSuite_vs120.vcxproj -MongoDB/testsuite/TestSuite_vs120.vcxproj.filters -MongoDB/testsuite/TestSuite_vs140.vcxproj -MongoDB/testsuite/TestSuite_vs140.vcxproj.filters -MongoDB/testsuite/TestSuite_vs90.vcproj -MongoDB/testsuite/TestSuite_x64_vs100.vcxproj -MongoDB/testsuite/TestSuite_x64_vs100.vcxproj.filters -MongoDB/testsuite/TestSuite_x64_vs110.vcxproj -MongoDB/testsuite/TestSuite_x64_vs110.vcxproj.filters -MongoDB/testsuite/TestSuite_x64_vs120.vcxproj -MongoDB/testsuite/TestSuite_x64_vs120.vcxproj.filters -MongoDB/testsuite/TestSuite_x64_vs140.vcxproj -MongoDB/testsuite/TestSuite_x64_vs140.vcxproj.filters -MongoDB/testsuite/TestSuite_x64_vs90.vcproj -Net -Net/cmake -Net/cmake/PocoNetConfig.cmake -Net/CMakeLists.txt -Net/include -Net/include/Poco -Net/include/Poco/Net -Net/include/Poco/Net/AbstractHTTPRequestHandler.h -Net/include/Poco/Net/DatagramSocket.h -Net/include/Poco/Net/DatagramSocketImpl.h -Net/include/Poco/Net/DialogSocket.h -Net/include/Poco/Net/DNS.h -Net/include/Poco/Net/FilePartSource.h -Net/include/Poco/Net/FTPClientSession.h -Net/include/Poco/Net/FTPStreamFactory.h -Net/include/Poco/Net/HostEntry.h -Net/include/Poco/Net/HTMLForm.h -Net/include/Poco/Net/HTTPAuthenticationParams.h -Net/include/Poco/Net/HTTPBasicCredentials.h -Net/include/Poco/Net/HTTPBasicStreamBuf.h -Net/include/Poco/Net/HTTPBufferAllocator.h -Net/include/Poco/Net/HTTPChunkedStream.h -Net/include/Poco/Net/HTTPClientSession.h -Net/include/Poco/Net/HTTPCookie.h -Net/include/Poco/Net/HTTPCredentials.h -Net/include/Poco/Net/HTTPDigestCredentials.h -Net/include/Poco/Net/HTTPFixedLengthStream.h -Net/include/Poco/Net/HTTPHeaderStream.h -Net/include/Poco/Net/HTTPIOStream.h -Net/include/Poco/Net/HTTPMessage.h -Net/include/Poco/Net/HTTPRequest.h -Net/include/Poco/Net/HTTPRequestHandler.h -Net/include/Poco/Net/HTTPRequestHandlerFactory.h -Net/include/Poco/Net/HTTPResponse.h -Net/include/Poco/Net/HTTPServer.h -Net/include/Poco/Net/HTTPServerConnection.h -Net/include/Poco/Net/HTTPServerConnectionFactory.h -Net/include/Poco/Net/HTTPServerParams.h -Net/include/Poco/Net/HTTPServerRequest.h -Net/include/Poco/Net/HTTPServerRequestImpl.h -Net/include/Poco/Net/HTTPServerResponse.h -Net/include/Poco/Net/HTTPServerResponseImpl.h -Net/include/Poco/Net/HTTPServerSession.h -Net/include/Poco/Net/HTTPSession.h -Net/include/Poco/Net/HTTPSessionFactory.h -Net/include/Poco/Net/HTTPSessionInstantiator.h -Net/include/Poco/Net/HTTPStream.h -Net/include/Poco/Net/HTTPStreamFactory.h -Net/include/Poco/Net/ICMPClient.h -Net/include/Poco/Net/ICMPEventArgs.h -Net/include/Poco/Net/ICMPPacket.h -Net/include/Poco/Net/ICMPPacketImpl.h -Net/include/Poco/Net/ICMPSocket.h -Net/include/Poco/Net/ICMPSocketImpl.h -Net/include/Poco/Net/ICMPv4PacketImpl.h -Net/include/Poco/Net/IPAddress.h -Net/include/Poco/Net/IPAddressImpl.h -Net/include/Poco/Net/MailMessage.h -Net/include/Poco/Net/MailRecipient.h -Net/include/Poco/Net/MailStream.h -Net/include/Poco/Net/MediaType.h -Net/include/Poco/Net/MessageHeader.h -Net/include/Poco/Net/MulticastSocket.h -Net/include/Poco/Net/MultipartReader.h -Net/include/Poco/Net/MultipartWriter.h -Net/include/Poco/Net/NameValueCollection.h -Net/include/Poco/Net/Net.h -Net/include/Poco/Net/NetException.h -Net/include/Poco/Net/NetworkInterface.h -Net/include/Poco/Net/NTPClient.h -Net/include/Poco/Net/NTPEventArgs.h -Net/include/Poco/Net/NTPPacket.h -Net/include/Poco/Net/NullPartHandler.h -Net/include/Poco/Net/OAuth10Credentials.h -Net/include/Poco/Net/OAuth20Credentials.h -Net/include/Poco/Net/ParallelSocketAcceptor.h -Net/include/Poco/Net/ParallelSocketReactor.h -Net/include/Poco/Net/PartHandler.h -Net/include/Poco/Net/PartSource.h -Net/include/Poco/Net/PartStore.h -Net/include/Poco/Net/POP3ClientSession.h -Net/include/Poco/Net/QuotedPrintableDecoder.h -Net/include/Poco/Net/QuotedPrintableEncoder.h -Net/include/Poco/Net/RawSocket.h -Net/include/Poco/Net/RawSocketImpl.h -Net/include/Poco/Net/RemoteSyslogChannel.h -Net/include/Poco/Net/RemoteSyslogListener.h -Net/include/Poco/Net/ServerSocket.h -Net/include/Poco/Net/ServerSocketImpl.h -Net/include/Poco/Net/SMTPChannel.h -Net/include/Poco/Net/SMTPClientSession.h -Net/include/Poco/Net/Socket.h -Net/include/Poco/Net/SocketAcceptor.h -Net/include/Poco/Net/SocketAddress.h -Net/include/Poco/Net/SocketAddressImpl.h -Net/include/Poco/Net/SocketConnector.h -Net/include/Poco/Net/SocketDefs.h -Net/include/Poco/Net/SocketImpl.h -Net/include/Poco/Net/SocketNotification.h -Net/include/Poco/Net/SocketNotifier.h -Net/include/Poco/Net/SocketReactor.h -Net/include/Poco/Net/SocketStream.h -Net/include/Poco/Net/StreamSocket.h -Net/include/Poco/Net/StreamSocketImpl.h -Net/include/Poco/Net/StringPartSource.h -Net/include/Poco/Net/TCPServer.h -Net/include/Poco/Net/TCPServerConnection.h -Net/include/Poco/Net/TCPServerConnectionFactory.h -Net/include/Poco/Net/TCPServerDispatcher.h -Net/include/Poco/Net/TCPServerParams.h -Net/include/Poco/Net/WebSocket.h -Net/include/Poco/Net/WebSocketImpl.h -Net/Makefile -Net/Net.progen -Net/Net.vxbuild -Net/Net_CE_vs90.sln -Net/Net_CE_vs90.vcproj -Net/Net_vs100.sln -Net/Net_vs100.vcxproj -Net/Net_vs100.vcxproj.filters -Net/Net_vs110.sln -Net/Net_vs110.vcxproj -Net/Net_vs110.vcxproj.filters -Net/Net_vs120.sln -Net/Net_vs120.vcxproj -Net/Net_vs120.vcxproj.filters -Net/Net_vs140.sln -Net/Net_vs140.vcxproj -Net/Net_vs140.vcxproj.filters -Net/Net_vs90.sln -Net/Net_vs90.vcproj -Net/Net_WEC2013_vs110.sln -Net/Net_WEC2013_vs110.vcxproj -Net/Net_WEC2013_vs110.vcxproj.filters -Net/Net_WEC2013_vs120.sln -Net/Net_WEC2013_vs120.vcxproj -Net/Net_WEC2013_vs120.vcxproj.filters -Net/Net_x64_vs100.sln -Net/Net_x64_vs100.vcxproj -Net/Net_x64_vs100.vcxproj.filters -Net/Net_x64_vs110.sln -Net/Net_x64_vs110.vcxproj -Net/Net_x64_vs110.vcxproj.filters -Net/Net_x64_vs120.sln -Net/Net_x64_vs120.vcxproj -Net/Net_x64_vs120.vcxproj.filters -Net/Net_x64_vs140.sln -Net/Net_x64_vs140.vcxproj -Net/Net_x64_vs140.vcxproj.filters -Net/Net_x64_vs90.sln -Net/Net_x64_vs90.vcproj -Net/samples -Net/samples/CMakeLists.txt -Net/samples/dict -Net/samples/dict/CMakeLists.txt -Net/samples/dict/dict.progen -Net/samples/dict/dict_CE_vs90.vcproj -Net/samples/dict/dict_vs100.vcxproj -Net/samples/dict/dict_vs100.vcxproj.filters -Net/samples/dict/dict_vs110.vcxproj -Net/samples/dict/dict_vs110.vcxproj.filters -Net/samples/dict/dict_vs120.vcxproj -Net/samples/dict/dict_vs120.vcxproj.filters -Net/samples/dict/dict_vs140.vcxproj -Net/samples/dict/dict_vs140.vcxproj.filters -Net/samples/dict/dict_vs90.vcproj -Net/samples/dict/dict_WEC2013_vs110.vcxproj -Net/samples/dict/dict_WEC2013_vs110.vcxproj.filters -Net/samples/dict/dict_WEC2013_vs120.vcxproj -Net/samples/dict/dict_WEC2013_vs120.vcxproj.filters -Net/samples/dict/dict_x64_vs100.vcxproj -Net/samples/dict/dict_x64_vs100.vcxproj.filters -Net/samples/dict/dict_x64_vs110.vcxproj -Net/samples/dict/dict_x64_vs110.vcxproj.filters -Net/samples/dict/dict_x64_vs120.vcxproj -Net/samples/dict/dict_x64_vs120.vcxproj.filters -Net/samples/dict/dict_x64_vs140.vcxproj -Net/samples/dict/dict_x64_vs140.vcxproj.filters -Net/samples/dict/dict_x64_vs90.vcproj -Net/samples/dict/Makefile -Net/samples/dict/src -Net/samples/dict/src/dict.cpp -Net/samples/download -Net/samples/download/CMakeLists.txt -Net/samples/download/download.progen -Net/samples/download/download_CE_vs90.vcproj -Net/samples/download/download_vs100.vcxproj -Net/samples/download/download_vs100.vcxproj.filters -Net/samples/download/download_vs110.vcxproj -Net/samples/download/download_vs110.vcxproj.filters -Net/samples/download/download_vs120.vcxproj -Net/samples/download/download_vs120.vcxproj.filters -Net/samples/download/download_vs140.vcxproj -Net/samples/download/download_vs140.vcxproj.filters -Net/samples/download/download_vs90.vcproj -Net/samples/download/download_WEC2013_vs110.vcxproj -Net/samples/download/download_WEC2013_vs110.vcxproj.filters -Net/samples/download/download_WEC2013_vs120.vcxproj -Net/samples/download/download_WEC2013_vs120.vcxproj.filters -Net/samples/download/download_x64_vs100.vcxproj -Net/samples/download/download_x64_vs100.vcxproj.filters -Net/samples/download/download_x64_vs110.vcxproj -Net/samples/download/download_x64_vs110.vcxproj.filters -Net/samples/download/download_x64_vs120.vcxproj -Net/samples/download/download_x64_vs120.vcxproj.filters -Net/samples/download/download_x64_vs140.vcxproj -Net/samples/download/download_x64_vs140.vcxproj.filters -Net/samples/download/download_x64_vs90.vcproj -Net/samples/download/Makefile -Net/samples/download/src -Net/samples/download/src/download.cpp -Net/samples/EchoServer -Net/samples/EchoServer/CMakeLists.txt -Net/samples/EchoServer/EchoServer.progen -Net/samples/EchoServer/EchoServer.properties -Net/samples/EchoServer/EchoServer_CE_vs90.vcproj -Net/samples/EchoServer/EchoServer_vs100.vcxproj -Net/samples/EchoServer/EchoServer_vs100.vcxproj.filters -Net/samples/EchoServer/EchoServer_vs110.vcxproj -Net/samples/EchoServer/EchoServer_vs110.vcxproj.filters -Net/samples/EchoServer/EchoServer_vs120.vcxproj -Net/samples/EchoServer/EchoServer_vs120.vcxproj.filters -Net/samples/EchoServer/EchoServer_vs140.vcxproj -Net/samples/EchoServer/EchoServer_vs140.vcxproj.filters -Net/samples/EchoServer/EchoServer_vs90.vcproj -Net/samples/EchoServer/EchoServer_WEC2013_vs110.vcxproj -Net/samples/EchoServer/EchoServer_WEC2013_vs110.vcxproj.filters -Net/samples/EchoServer/EchoServer_WEC2013_vs120.vcxproj -Net/samples/EchoServer/EchoServer_WEC2013_vs120.vcxproj.filters -Net/samples/EchoServer/EchoServer_x64_vs100.vcxproj -Net/samples/EchoServer/EchoServer_x64_vs100.vcxproj.filters -Net/samples/EchoServer/EchoServer_x64_vs110.vcxproj -Net/samples/EchoServer/EchoServer_x64_vs110.vcxproj.filters -Net/samples/EchoServer/EchoServer_x64_vs120.vcxproj -Net/samples/EchoServer/EchoServer_x64_vs120.vcxproj.filters -Net/samples/EchoServer/EchoServer_x64_vs140.vcxproj -Net/samples/EchoServer/EchoServer_x64_vs140.vcxproj.filters -Net/samples/EchoServer/EchoServer_x64_vs90.vcproj -Net/samples/EchoServer/Makefile -Net/samples/EchoServer/src -Net/samples/EchoServer/src/EchoServer.cpp -Net/samples/HTTPFormServer -Net/samples/HTTPFormServer/CMakeLists.txt -Net/samples/HTTPFormServer/HTTPFormServer.progen -Net/samples/HTTPFormServer/HTTPFormServer.properties -Net/samples/HTTPFormServer/HTTPFormServer_CE_vs90.vcproj -Net/samples/HTTPFormServer/HTTPFormServer_vs100.vcxproj -Net/samples/HTTPFormServer/HTTPFormServer_vs100.vcxproj.filters -Net/samples/HTTPFormServer/HTTPFormServer_vs110.vcxproj -Net/samples/HTTPFormServer/HTTPFormServer_vs110.vcxproj.filters -Net/samples/HTTPFormServer/HTTPFormServer_vs120.vcxproj -Net/samples/HTTPFormServer/HTTPFormServer_vs120.vcxproj.filters -Net/samples/HTTPFormServer/HTTPFormServer_vs140.vcxproj -Net/samples/HTTPFormServer/HTTPFormServer_vs140.vcxproj.filters -Net/samples/HTTPFormServer/HTTPFormServer_vs90.vcproj -Net/samples/HTTPFormServer/HTTPFormServer_WEC2013_vs110.vcxproj -Net/samples/HTTPFormServer/HTTPFormServer_WEC2013_vs110.vcxproj.filters -Net/samples/HTTPFormServer/HTTPFormServer_WEC2013_vs120.vcxproj -Net/samples/HTTPFormServer/HTTPFormServer_WEC2013_vs120.vcxproj.filters -Net/samples/HTTPFormServer/HTTPFormServer_x64_vs100.vcxproj -Net/samples/HTTPFormServer/HTTPFormServer_x64_vs100.vcxproj.filters -Net/samples/HTTPFormServer/HTTPFormServer_x64_vs110.vcxproj -Net/samples/HTTPFormServer/HTTPFormServer_x64_vs110.vcxproj.filters -Net/samples/HTTPFormServer/HTTPFormServer_x64_vs120.vcxproj -Net/samples/HTTPFormServer/HTTPFormServer_x64_vs120.vcxproj.filters -Net/samples/HTTPFormServer/HTTPFormServer_x64_vs140.vcxproj -Net/samples/HTTPFormServer/HTTPFormServer_x64_vs140.vcxproj.filters -Net/samples/HTTPFormServer/HTTPFormServer_x64_vs90.vcproj -Net/samples/HTTPFormServer/Makefile -Net/samples/HTTPFormServer/src -Net/samples/HTTPFormServer/src/HTTPFormServer.cpp -Net/samples/httpget -Net/samples/httpget/CMakeLists.txt -Net/samples/httpget/httpget.progen -Net/samples/httpget/httpget_CE_vs90.vcproj -Net/samples/httpget/httpget_vs100.vcxproj -Net/samples/httpget/httpget_vs100.vcxproj.filters -Net/samples/httpget/httpget_vs110.vcxproj -Net/samples/httpget/httpget_vs110.vcxproj.filters -Net/samples/httpget/httpget_vs120.vcxproj -Net/samples/httpget/httpget_vs120.vcxproj.filters -Net/samples/httpget/httpget_vs140.vcxproj -Net/samples/httpget/httpget_vs140.vcxproj.filters -Net/samples/httpget/httpget_vs90.vcproj -Net/samples/httpget/httpget_WEC2013_vs110.vcxproj -Net/samples/httpget/httpget_WEC2013_vs110.vcxproj.filters -Net/samples/httpget/httpget_WEC2013_vs120.vcxproj -Net/samples/httpget/httpget_WEC2013_vs120.vcxproj.filters -Net/samples/httpget/httpget_x64_vs100.vcxproj -Net/samples/httpget/httpget_x64_vs100.vcxproj.filters -Net/samples/httpget/httpget_x64_vs110.vcxproj -Net/samples/httpget/httpget_x64_vs110.vcxproj.filters -Net/samples/httpget/httpget_x64_vs120.vcxproj -Net/samples/httpget/httpget_x64_vs120.vcxproj.filters -Net/samples/httpget/httpget_x64_vs140.vcxproj -Net/samples/httpget/httpget_x64_vs140.vcxproj.filters -Net/samples/httpget/httpget_x64_vs90.vcproj -Net/samples/httpget/Makefile -Net/samples/httpget/src -Net/samples/httpget/src/httpget.cpp -Net/samples/HTTPLoadTest -Net/samples/HTTPLoadTest/CMakeLists.txt -Net/samples/HTTPLoadTest/HTTPLoadTest.progen -Net/samples/HTTPLoadTest/HTTPLoadTest_CE_vs90.vcproj -Net/samples/HTTPLoadTest/HTTPLoadTest_vs100.vcxproj -Net/samples/HTTPLoadTest/HTTPLoadTest_vs100.vcxproj.filters -Net/samples/HTTPLoadTest/HTTPLoadTest_vs110.vcxproj -Net/samples/HTTPLoadTest/HTTPLoadTest_vs110.vcxproj.filters -Net/samples/HTTPLoadTest/HTTPLoadTest_vs120.vcxproj -Net/samples/HTTPLoadTest/HTTPLoadTest_vs120.vcxproj.filters -Net/samples/HTTPLoadTest/HTTPLoadTest_vs140.vcxproj -Net/samples/HTTPLoadTest/HTTPLoadTest_vs140.vcxproj.filters -Net/samples/HTTPLoadTest/HTTPLoadTest_vs90.vcproj -Net/samples/HTTPLoadTest/HTTPLoadTest_WEC2013_vs110.vcxproj -Net/samples/HTTPLoadTest/HTTPLoadTest_WEC2013_vs110.vcxproj.filters -Net/samples/HTTPLoadTest/HTTPLoadTest_WEC2013_vs120.vcxproj -Net/samples/HTTPLoadTest/HTTPLoadTest_WEC2013_vs120.vcxproj.filters -Net/samples/HTTPLoadTest/HTTPLoadTest_x64_vs100.vcxproj -Net/samples/HTTPLoadTest/HTTPLoadTest_x64_vs100.vcxproj.filters -Net/samples/HTTPLoadTest/HTTPLoadTest_x64_vs110.vcxproj -Net/samples/HTTPLoadTest/HTTPLoadTest_x64_vs110.vcxproj.filters -Net/samples/HTTPLoadTest/HTTPLoadTest_x64_vs120.vcxproj -Net/samples/HTTPLoadTest/HTTPLoadTest_x64_vs120.vcxproj.filters -Net/samples/HTTPLoadTest/HTTPLoadTest_x64_vs140.vcxproj -Net/samples/HTTPLoadTest/HTTPLoadTest_x64_vs140.vcxproj.filters -Net/samples/HTTPLoadTest/HTTPLoadTest_x64_vs90.vcproj -Net/samples/HTTPLoadTest/Makefile -Net/samples/HTTPLoadTest/src -Net/samples/HTTPLoadTest/src/HTTPLoadTest.cpp -Net/samples/HTTPTimeServer -Net/samples/HTTPTimeServer/CMakeLists.txt -Net/samples/HTTPTimeServer/HTTPTimeServer.progen -Net/samples/HTTPTimeServer/HTTPTimeServer.properties -Net/samples/HTTPTimeServer/HTTPTimeServer_CE_vs90.vcproj -Net/samples/HTTPTimeServer/HTTPTimeServer_vs100.vcxproj -Net/samples/HTTPTimeServer/HTTPTimeServer_vs100.vcxproj.filters -Net/samples/HTTPTimeServer/HTTPTimeServer_vs110.vcxproj -Net/samples/HTTPTimeServer/HTTPTimeServer_vs110.vcxproj.filters -Net/samples/HTTPTimeServer/HTTPTimeServer_vs120.vcxproj -Net/samples/HTTPTimeServer/HTTPTimeServer_vs120.vcxproj.filters -Net/samples/HTTPTimeServer/HTTPTimeServer_vs140.vcxproj -Net/samples/HTTPTimeServer/HTTPTimeServer_vs140.vcxproj.filters -Net/samples/HTTPTimeServer/HTTPTimeServer_vs90.vcproj -Net/samples/HTTPTimeServer/HTTPTimeServer_WEC2013_vs110.vcxproj -Net/samples/HTTPTimeServer/HTTPTimeServer_WEC2013_vs110.vcxproj.filters -Net/samples/HTTPTimeServer/HTTPTimeServer_WEC2013_vs120.vcxproj -Net/samples/HTTPTimeServer/HTTPTimeServer_WEC2013_vs120.vcxproj.filters -Net/samples/HTTPTimeServer/HTTPTimeServer_x64_vs100.vcxproj -Net/samples/HTTPTimeServer/HTTPTimeServer_x64_vs100.vcxproj.filters -Net/samples/HTTPTimeServer/HTTPTimeServer_x64_vs110.vcxproj -Net/samples/HTTPTimeServer/HTTPTimeServer_x64_vs110.vcxproj.filters -Net/samples/HTTPTimeServer/HTTPTimeServer_x64_vs120.vcxproj -Net/samples/HTTPTimeServer/HTTPTimeServer_x64_vs120.vcxproj.filters -Net/samples/HTTPTimeServer/HTTPTimeServer_x64_vs140.vcxproj -Net/samples/HTTPTimeServer/HTTPTimeServer_x64_vs140.vcxproj.filters -Net/samples/HTTPTimeServer/HTTPTimeServer_x64_vs90.vcproj -Net/samples/HTTPTimeServer/Makefile -Net/samples/HTTPTimeServer/src -Net/samples/HTTPTimeServer/src/HTTPTimeServer.cpp -Net/samples/ifconfig -Net/samples/ifconfig/CMakeLists.txt -Net/samples/ifconfig/ifconfig.progen -Net/samples/ifconfig/ifconfig_CE_vs90.vcproj -Net/samples/ifconfig/ifconfig_vs100.vcxproj -Net/samples/ifconfig/ifconfig_vs100.vcxproj.filters -Net/samples/ifconfig/ifconfig_vs110.vcxproj -Net/samples/ifconfig/ifconfig_vs110.vcxproj.filters -Net/samples/ifconfig/ifconfig_vs120.vcxproj -Net/samples/ifconfig/ifconfig_vs120.vcxproj.filters -Net/samples/ifconfig/ifconfig_vs140.vcxproj -Net/samples/ifconfig/ifconfig_vs140.vcxproj.filters -Net/samples/ifconfig/ifconfig_vs90.vcproj -Net/samples/ifconfig/ifconfig_WEC2013_vs110.vcxproj -Net/samples/ifconfig/ifconfig_WEC2013_vs110.vcxproj.filters -Net/samples/ifconfig/ifconfig_WEC2013_vs120.vcxproj -Net/samples/ifconfig/ifconfig_WEC2013_vs120.vcxproj.filters -Net/samples/ifconfig/ifconfig_x64_vs100.vcxproj -Net/samples/ifconfig/ifconfig_x64_vs100.vcxproj.filters -Net/samples/ifconfig/ifconfig_x64_vs110.vcxproj -Net/samples/ifconfig/ifconfig_x64_vs110.vcxproj.filters -Net/samples/ifconfig/ifconfig_x64_vs120.vcxproj -Net/samples/ifconfig/ifconfig_x64_vs120.vcxproj.filters -Net/samples/ifconfig/ifconfig_x64_vs140.vcxproj -Net/samples/ifconfig/ifconfig_x64_vs140.vcxproj.filters -Net/samples/ifconfig/ifconfig_x64_vs90.vcproj -Net/samples/ifconfig/Makefile -Net/samples/ifconfig/src -Net/samples/ifconfig/src/ifconfig.cpp -Net/samples/Mail -Net/samples/Mail/CMakeLists.txt -Net/samples/Mail/Mail.progen -Net/samples/Mail/Mail_CE_vs90.vcproj -Net/samples/Mail/Mail_vs100.vcxproj -Net/samples/Mail/Mail_vs100.vcxproj.filters -Net/samples/Mail/Mail_vs110.vcxproj -Net/samples/Mail/Mail_vs110.vcxproj.filters -Net/samples/Mail/Mail_vs120.vcxproj -Net/samples/Mail/Mail_vs120.vcxproj.filters -Net/samples/Mail/Mail_vs140.vcxproj -Net/samples/Mail/Mail_vs140.vcxproj.filters -Net/samples/Mail/Mail_vs90.vcproj -Net/samples/Mail/Mail_WEC2013_vs110.vcxproj -Net/samples/Mail/Mail_WEC2013_vs110.vcxproj.filters -Net/samples/Mail/Mail_WEC2013_vs120.vcxproj -Net/samples/Mail/Mail_WEC2013_vs120.vcxproj.filters -Net/samples/Mail/Mail_x64_vs100.vcxproj -Net/samples/Mail/Mail_x64_vs100.vcxproj.filters -Net/samples/Mail/Mail_x64_vs110.vcxproj -Net/samples/Mail/Mail_x64_vs110.vcxproj.filters -Net/samples/Mail/Mail_x64_vs120.vcxproj -Net/samples/Mail/Mail_x64_vs120.vcxproj.filters -Net/samples/Mail/Mail_x64_vs140.vcxproj -Net/samples/Mail/Mail_x64_vs140.vcxproj.filters -Net/samples/Mail/Mail_x64_vs90.vcproj -Net/samples/Mail/Makefile -Net/samples/Mail/src -Net/samples/Mail/src/Mail.cpp -Net/samples/Mail/src/PocoLogo.hpp -Net/samples/Makefile -Net/samples/Ping -Net/samples/Ping/CMakeLists.txt -Net/samples/Ping/Makefile -Net/samples/Ping/Ping.progen -Net/samples/Ping/ping.properties -Net/samples/Ping/Ping_CE_vs90.vcproj -Net/samples/Ping/Ping_vs100.vcxproj -Net/samples/Ping/Ping_vs100.vcxproj.filters -Net/samples/Ping/Ping_vs110.vcxproj -Net/samples/Ping/Ping_vs110.vcxproj.filters -Net/samples/Ping/Ping_vs120.vcxproj -Net/samples/Ping/Ping_vs120.vcxproj.filters -Net/samples/Ping/Ping_vs140.vcxproj -Net/samples/Ping/Ping_vs140.vcxproj.filters -Net/samples/Ping/Ping_vs90.vcproj -Net/samples/Ping/Ping_WEC2013_vs110.vcxproj -Net/samples/Ping/Ping_WEC2013_vs110.vcxproj.filters -Net/samples/Ping/Ping_WEC2013_vs120.vcxproj -Net/samples/Ping/Ping_WEC2013_vs120.vcxproj.filters -Net/samples/Ping/Ping_x64_vs100.vcxproj -Net/samples/Ping/Ping_x64_vs100.vcxproj.filters -Net/samples/Ping/Ping_x64_vs110.vcxproj -Net/samples/Ping/Ping_x64_vs110.vcxproj.filters -Net/samples/Ping/Ping_x64_vs120.vcxproj -Net/samples/Ping/Ping_x64_vs120.vcxproj.filters -Net/samples/Ping/Ping_x64_vs140.vcxproj -Net/samples/Ping/Ping_x64_vs140.vcxproj.filters -Net/samples/Ping/Ping_x64_vs90.vcproj -Net/samples/Ping/src -Net/samples/Ping/src/Ping.cpp -Net/samples/samples.progen -Net/samples/samples_CE_vs90.sln -Net/samples/samples_vs100.sln -Net/samples/samples_vs110.sln -Net/samples/samples_vs120.sln -Net/samples/samples_vs140.sln -Net/samples/samples_vs90.sln -Net/samples/samples_WEC2013_vs110.sln -Net/samples/samples_WEC2013_vs120.sln -Net/samples/samples_x64_vs100.sln -Net/samples/samples_x64_vs110.sln -Net/samples/samples_x64_vs120.sln -Net/samples/samples_x64_vs140.sln -Net/samples/samples_x64_vs90.sln -Net/samples/SMTPLogger -Net/samples/SMTPLogger/CMakeLists.txt -Net/samples/SMTPLogger/Makefile -Net/samples/SMTPLogger/res -Net/samples/SMTPLogger/res/logo.gif -Net/samples/SMTPLogger/SMTPLogger.progen -Net/samples/SMTPLogger/SMTPLogger_CE_vs90.vcproj -Net/samples/SMTPLogger/SMTPLogger_vs100.vcxproj -Net/samples/SMTPLogger/SMTPLogger_vs100.vcxproj.filters -Net/samples/SMTPLogger/SMTPLogger_vs110.vcxproj -Net/samples/SMTPLogger/SMTPLogger_vs110.vcxproj.filters -Net/samples/SMTPLogger/SMTPLogger_vs120.vcxproj -Net/samples/SMTPLogger/SMTPLogger_vs120.vcxproj.filters -Net/samples/SMTPLogger/SMTPLogger_vs140.vcxproj -Net/samples/SMTPLogger/SMTPLogger_vs140.vcxproj.filters -Net/samples/SMTPLogger/SMTPLogger_vs90.vcproj -Net/samples/SMTPLogger/SMTPLogger_WEC2013_vs110.vcxproj -Net/samples/SMTPLogger/SMTPLogger_WEC2013_vs110.vcxproj.filters -Net/samples/SMTPLogger/SMTPLogger_WEC2013_vs120.vcxproj -Net/samples/SMTPLogger/SMTPLogger_WEC2013_vs120.vcxproj.filters -Net/samples/SMTPLogger/SMTPLogger_x64_vs100.vcxproj -Net/samples/SMTPLogger/SMTPLogger_x64_vs100.vcxproj.filters -Net/samples/SMTPLogger/SMTPLogger_x64_vs110.vcxproj -Net/samples/SMTPLogger/SMTPLogger_x64_vs110.vcxproj.filters -Net/samples/SMTPLogger/SMTPLogger_x64_vs120.vcxproj -Net/samples/SMTPLogger/SMTPLogger_x64_vs120.vcxproj.filters -Net/samples/SMTPLogger/SMTPLogger_x64_vs140.vcxproj -Net/samples/SMTPLogger/SMTPLogger_x64_vs140.vcxproj.filters -Net/samples/SMTPLogger/SMTPLogger_x64_vs90.vcproj -Net/samples/SMTPLogger/src -Net/samples/SMTPLogger/src/SMTPLogger.cpp -Net/samples/TimeServer -Net/samples/TimeServer/CMakeLists.txt -Net/samples/TimeServer/Makefile -Net/samples/TimeServer/src -Net/samples/TimeServer/src/TimeServer.cpp -Net/samples/TimeServer/TimeServer.progen -Net/samples/TimeServer/TimeServer.properties -Net/samples/TimeServer/TimeServer_CE_vs90.vcproj -Net/samples/TimeServer/TimeServer_vs100.vcxproj -Net/samples/TimeServer/TimeServer_vs100.vcxproj.filters -Net/samples/TimeServer/TimeServer_vs110.vcxproj -Net/samples/TimeServer/TimeServer_vs110.vcxproj.filters -Net/samples/TimeServer/TimeServer_vs120.vcxproj -Net/samples/TimeServer/TimeServer_vs120.vcxproj.filters -Net/samples/TimeServer/TimeServer_vs140.vcxproj -Net/samples/TimeServer/TimeServer_vs140.vcxproj.filters -Net/samples/TimeServer/TimeServer_vs90.vcproj -Net/samples/TimeServer/TimeServer_WEC2013_vs110.vcxproj -Net/samples/TimeServer/TimeServer_WEC2013_vs110.vcxproj.filters -Net/samples/TimeServer/TimeServer_WEC2013_vs120.vcxproj -Net/samples/TimeServer/TimeServer_WEC2013_vs120.vcxproj.filters -Net/samples/TimeServer/TimeServer_x64_vs100.vcxproj -Net/samples/TimeServer/TimeServer_x64_vs100.vcxproj.filters -Net/samples/TimeServer/TimeServer_x64_vs110.vcxproj -Net/samples/TimeServer/TimeServer_x64_vs110.vcxproj.filters -Net/samples/TimeServer/TimeServer_x64_vs120.vcxproj -Net/samples/TimeServer/TimeServer_x64_vs120.vcxproj.filters -Net/samples/TimeServer/TimeServer_x64_vs140.vcxproj -Net/samples/TimeServer/TimeServer_x64_vs140.vcxproj.filters -Net/samples/TimeServer/TimeServer_x64_vs90.vcproj -Net/samples/WebSocketServer -Net/samples/WebSocketServer/CMakeLists.txt -Net/samples/WebSocketServer/Makefile -Net/samples/WebSocketServer/src -Net/samples/WebSocketServer/src/WebSocketServer.cpp -Net/samples/WebSocketServer/WebSocketServer.progen -Net/samples/WebSocketServer/WebSocketServer_CE_vs90.vcproj -Net/samples/WebSocketServer/WebSocketServer_vs100.vcxproj -Net/samples/WebSocketServer/WebSocketServer_vs100.vcxproj.filters -Net/samples/WebSocketServer/WebSocketServer_vs110.vcxproj -Net/samples/WebSocketServer/WebSocketServer_vs110.vcxproj.filters -Net/samples/WebSocketServer/WebSocketServer_vs120.vcxproj -Net/samples/WebSocketServer/WebSocketServer_vs120.vcxproj.filters -Net/samples/WebSocketServer/WebSocketServer_vs140.vcxproj -Net/samples/WebSocketServer/WebSocketServer_vs140.vcxproj.filters -Net/samples/WebSocketServer/WebSocketServer_vs90.vcproj -Net/samples/WebSocketServer/WebSocketServer_WEC2013_vs110.vcxproj -Net/samples/WebSocketServer/WebSocketServer_WEC2013_vs110.vcxproj.filters -Net/samples/WebSocketServer/WebSocketServer_WEC2013_vs120.vcxproj -Net/samples/WebSocketServer/WebSocketServer_WEC2013_vs120.vcxproj.filters -Net/samples/WebSocketServer/WebSocketServer_x64_vs100.vcxproj -Net/samples/WebSocketServer/WebSocketServer_x64_vs100.vcxproj.filters -Net/samples/WebSocketServer/WebSocketServer_x64_vs110.vcxproj -Net/samples/WebSocketServer/WebSocketServer_x64_vs110.vcxproj.filters -Net/samples/WebSocketServer/WebSocketServer_x64_vs120.vcxproj -Net/samples/WebSocketServer/WebSocketServer_x64_vs120.vcxproj.filters -Net/samples/WebSocketServer/WebSocketServer_x64_vs140.vcxproj -Net/samples/WebSocketServer/WebSocketServer_x64_vs140.vcxproj.filters -Net/samples/WebSocketServer/WebSocketServer_x64_vs90.vcproj -Net/src -Net/src/AbstractHTTPRequestHandler.cpp -Net/src/DatagramSocket.cpp -Net/src/DatagramSocketImpl.cpp -Net/src/DialogSocket.cpp -Net/src/DNS.cpp -Net/src/FilePartSource.cpp -Net/src/FTPClientSession.cpp -Net/src/FTPStreamFactory.cpp -Net/src/HostEntry.cpp -Net/src/HTMLForm.cpp -Net/src/HTTPAuthenticationParams.cpp -Net/src/HTTPBasicCredentials.cpp -Net/src/HTTPBufferAllocator.cpp -Net/src/HTTPChunkedStream.cpp -Net/src/HTTPClientSession.cpp -Net/src/HTTPCookie.cpp -Net/src/HTTPCredentials.cpp -Net/src/HTTPDigestCredentials.cpp -Net/src/HTTPFixedLengthStream.cpp -Net/src/HTTPHeaderStream.cpp -Net/src/HTTPIOStream.cpp -Net/src/HTTPMessage.cpp -Net/src/HTTPRequest.cpp -Net/src/HTTPRequestHandler.cpp -Net/src/HTTPRequestHandlerFactory.cpp -Net/src/HTTPResponse.cpp -Net/src/HTTPServer.cpp -Net/src/HTTPServerConnection.cpp -Net/src/HTTPServerConnectionFactory.cpp -Net/src/HTTPServerParams.cpp -Net/src/HTTPServerRequest.cpp -Net/src/HTTPServerRequestImpl.cpp -Net/src/HTTPServerResponse.cpp -Net/src/HTTPServerResponseImpl.cpp -Net/src/HTTPServerSession.cpp -Net/src/HTTPSession.cpp -Net/src/HTTPSessionFactory.cpp -Net/src/HTTPSessionInstantiator.cpp -Net/src/HTTPStream.cpp -Net/src/HTTPStreamFactory.cpp -Net/src/ICMPClient.cpp -Net/src/ICMPEventArgs.cpp -Net/src/ICMPPacket.cpp -Net/src/ICMPPacketImpl.cpp -Net/src/ICMPSocket.cpp -Net/src/ICMPSocketImpl.cpp -Net/src/ICMPv4PacketImpl.cpp -Net/src/IPAddress.cpp -Net/src/IPAddressImpl.cpp -Net/src/MailMessage.cpp -Net/src/MailRecipient.cpp -Net/src/MailStream.cpp -Net/src/MediaType.cpp -Net/src/MessageHeader.cpp -Net/src/MulticastSocket.cpp -Net/src/MultipartReader.cpp -Net/src/MultipartWriter.cpp -Net/src/NameValueCollection.cpp -Net/src/Net.cpp -Net/src/NetException.cpp -Net/src/NetworkInterface.cpp -Net/src/NTPClient.cpp -Net/src/NTPEventArgs.cpp -Net/src/NTPPacket.cpp -Net/src/NullPartHandler.cpp -Net/src/OAuth10Credentials.cpp -Net/src/OAuth20Credentials.cpp -Net/src/PartHandler.cpp -Net/src/PartSource.cpp -Net/src/PartStore.cpp -Net/src/POP3ClientSession.cpp -Net/src/QuotedPrintableDecoder.cpp -Net/src/QuotedPrintableEncoder.cpp -Net/src/RawSocket.cpp -Net/src/RawSocketImpl.cpp -Net/src/RemoteSyslogChannel.cpp -Net/src/RemoteSyslogListener.cpp -Net/src/ServerSocket.cpp -Net/src/ServerSocketImpl.cpp -Net/src/SMTPChannel.cpp -Net/src/SMTPClientSession.cpp -Net/src/Socket.cpp -Net/src/SocketAddress.cpp -Net/src/SocketAddressImpl.cpp -Net/src/SocketImpl.cpp -Net/src/SocketNotification.cpp -Net/src/SocketNotifier.cpp -Net/src/SocketReactor.cpp -Net/src/SocketStream.cpp -Net/src/StreamSocket.cpp -Net/src/StreamSocketImpl.cpp -Net/src/StringPartSource.cpp -Net/src/TCPServer.cpp -Net/src/TCPServerConnection.cpp -Net/src/TCPServerConnectionFactory.cpp -Net/src/TCPServerDispatcher.cpp -Net/src/TCPServerParams.cpp -Net/src/WebSocket.cpp -Net/src/WebSocketImpl.cpp -Net/testsuite -Net/testsuite/CMakeLists.txt -Net/testsuite/Makefile -Net/testsuite/src -Net/testsuite/src/DatagramSocketTest.cpp -Net/testsuite/src/DatagramSocketTest.h -Net/testsuite/src/DialogServer.cpp -Net/testsuite/src/DialogServer.h -Net/testsuite/src/DialogSocketTest.cpp -Net/testsuite/src/DialogSocketTest.h -Net/testsuite/src/DNSTest.cpp -Net/testsuite/src/DNSTest.h -Net/testsuite/src/Driver.cpp -Net/testsuite/src/EchoServer.cpp -Net/testsuite/src/EchoServer.h -Net/testsuite/src/FTPClientSessionTest.cpp -Net/testsuite/src/FTPClientSessionTest.h -Net/testsuite/src/FTPClientTestSuite.cpp -Net/testsuite/src/FTPClientTestSuite.h -Net/testsuite/src/FTPStreamFactoryTest.cpp -Net/testsuite/src/FTPStreamFactoryTest.h -Net/testsuite/src/HTMLFormTest.cpp -Net/testsuite/src/HTMLFormTest.h -Net/testsuite/src/HTMLTestSuite.cpp -Net/testsuite/src/HTMLTestSuite.h -Net/testsuite/src/HTTPClientSessionTest.cpp -Net/testsuite/src/HTTPClientSessionTest.h -Net/testsuite/src/HTTPClientTestSuite.cpp -Net/testsuite/src/HTTPClientTestSuite.h -Net/testsuite/src/HTTPCookieTest.cpp -Net/testsuite/src/HTTPCookieTest.h -Net/testsuite/src/HTTPCredentialsTest.cpp -Net/testsuite/src/HTTPCredentialsTest.h -Net/testsuite/src/HTTPRequestTest.cpp -Net/testsuite/src/HTTPRequestTest.h -Net/testsuite/src/HTTPResponseTest.cpp -Net/testsuite/src/HTTPResponseTest.h -Net/testsuite/src/HTTPServerTest.cpp -Net/testsuite/src/HTTPServerTest.h -Net/testsuite/src/HTTPServerTestSuite.cpp -Net/testsuite/src/HTTPServerTestSuite.h -Net/testsuite/src/HTTPStreamFactoryTest.cpp -Net/testsuite/src/HTTPStreamFactoryTest.h -Net/testsuite/src/HTTPTestServer.cpp -Net/testsuite/src/HTTPTestServer.h -Net/testsuite/src/HTTPTestSuite.cpp -Net/testsuite/src/HTTPTestSuite.h -Net/testsuite/src/ICMPClientTest.cpp -Net/testsuite/src/ICMPClientTest.h -Net/testsuite/src/ICMPClientTestSuite.cpp -Net/testsuite/src/ICMPClientTestSuite.h -Net/testsuite/src/ICMPSocketTest.cpp -Net/testsuite/src/ICMPSocketTest.h -Net/testsuite/src/IPAddressTest.cpp -Net/testsuite/src/IPAddressTest.h -Net/testsuite/src/MailMessageTest.cpp -Net/testsuite/src/MailMessageTest.h -Net/testsuite/src/MailStreamTest.cpp -Net/testsuite/src/MailStreamTest.h -Net/testsuite/src/MailTestSuite.cpp -Net/testsuite/src/MailTestSuite.h -Net/testsuite/src/MediaTypeTest.cpp -Net/testsuite/src/MediaTypeTest.h -Net/testsuite/src/MessageHeaderTest.cpp -Net/testsuite/src/MessageHeaderTest.h -Net/testsuite/src/MessagesTestSuite.cpp -Net/testsuite/src/MessagesTestSuite.h -Net/testsuite/src/MulticastEchoServer.cpp -Net/testsuite/src/MulticastEchoServer.h -Net/testsuite/src/MulticastSocketTest.cpp -Net/testsuite/src/MulticastSocketTest.h -Net/testsuite/src/MultipartReaderTest.cpp -Net/testsuite/src/MultipartReaderTest.h -Net/testsuite/src/MultipartWriterTest.cpp -Net/testsuite/src/MultipartWriterTest.h -Net/testsuite/src/NameValueCollectionTest.cpp -Net/testsuite/src/NameValueCollectionTest.h -Net/testsuite/src/NetCoreTestSuite.cpp -Net/testsuite/src/NetCoreTestSuite.h -Net/testsuite/src/NetTestSuite.cpp -Net/testsuite/src/NetTestSuite.h -Net/testsuite/src/NetworkInterfaceTest.cpp -Net/testsuite/src/NetworkInterfaceTest.h -Net/testsuite/src/NTPClientTest.cpp -Net/testsuite/src/NTPClientTest.h -Net/testsuite/src/NTPClientTestSuite.cpp -Net/testsuite/src/NTPClientTestSuite.h -Net/testsuite/src/OAuth10CredentialsTest.cpp -Net/testsuite/src/OAuth10CredentialsTest.h -Net/testsuite/src/OAuth20CredentialsTest.cpp -Net/testsuite/src/OAuth20CredentialsTest.h -Net/testsuite/src/OAuthTestSuite.cpp -Net/testsuite/src/OAuthTestSuite.h -Net/testsuite/src/POP3ClientSessionTest.cpp -Net/testsuite/src/POP3ClientSessionTest.h -Net/testsuite/src/QuotedPrintableTest.cpp -Net/testsuite/src/QuotedPrintableTest.h -Net/testsuite/src/RawSocketTest.cpp -Net/testsuite/src/RawSocketTest.h -Net/testsuite/src/ReactorTestSuite.cpp -Net/testsuite/src/ReactorTestSuite.h -Net/testsuite/src/SMTPClientSessionTest.cpp -Net/testsuite/src/SMTPClientSessionTest.h -Net/testsuite/src/SocketAddressTest.cpp -Net/testsuite/src/SocketAddressTest.h -Net/testsuite/src/SocketReactorTest.cpp -Net/testsuite/src/SocketReactorTest.h -Net/testsuite/src/SocketsTestSuite.cpp -Net/testsuite/src/SocketsTestSuite.h -Net/testsuite/src/SocketStreamTest.cpp -Net/testsuite/src/SocketStreamTest.h -Net/testsuite/src/SocketTest.cpp -Net/testsuite/src/SocketTest.h -Net/testsuite/src/SyslogTest.cpp -Net/testsuite/src/SyslogTest.h -Net/testsuite/src/TCPServerTest.cpp -Net/testsuite/src/TCPServerTest.h -Net/testsuite/src/TCPServerTestSuite.cpp -Net/testsuite/src/TCPServerTestSuite.h -Net/testsuite/src/UDPEchoServer.cpp -Net/testsuite/src/UDPEchoServer.h -Net/testsuite/src/WebSocketTest.cpp -Net/testsuite/src/WebSocketTest.h -Net/testsuite/src/WebSocketTestSuite.cpp -Net/testsuite/src/WebSocketTestSuite.h -Net/testsuite/src/WinCEDriver.cpp -Net/testsuite/src/WinDriver.cpp -Net/testsuite/TestSuite.progen -Net/testsuite/TestSuite.vxbuild -Net/testsuite/TestSuite_CE_vs90.vcproj -Net/testsuite/TestSuite_vs100.vcxproj -Net/testsuite/TestSuite_vs100.vcxproj.filters -Net/testsuite/TestSuite_vs110.vcxproj -Net/testsuite/TestSuite_vs110.vcxproj.filters -Net/testsuite/TestSuite_vs120.vcxproj -Net/testsuite/TestSuite_vs120.vcxproj.filters -Net/testsuite/TestSuite_vs140.vcxproj -Net/testsuite/TestSuite_vs140.vcxproj.filters -Net/testsuite/TestSuite_vs90.vcproj -Net/testsuite/TestSuite_WEC2013_vs110.vcxproj -Net/testsuite/TestSuite_WEC2013_vs110.vcxproj.filters -Net/testsuite/TestSuite_WEC2013_vs120.vcxproj -Net/testsuite/TestSuite_WEC2013_vs120.vcxproj.filters -Net/testsuite/TestSuite_x64_vs100.vcxproj -Net/testsuite/TestSuite_x64_vs100.vcxproj.filters -Net/testsuite/TestSuite_x64_vs110.vcxproj -Net/testsuite/TestSuite_x64_vs110.vcxproj.filters -Net/testsuite/TestSuite_x64_vs120.vcxproj -Net/testsuite/TestSuite_x64_vs120.vcxproj.filters -Net/testsuite/TestSuite_x64_vs140.vcxproj -Net/testsuite/TestSuite_x64_vs140.vcxproj.filters -Net/testsuite/TestSuite_x64_vs90.vcproj -NetSSL_OpenSSL -NetSSL_OpenSSL/cmake -NetSSL_OpenSSL/cmake/PocoNetSSLConfig.cmake -NetSSL_OpenSSL/CMakeLists.txt -NetSSL_OpenSSL/doc -NetSSL_OpenSSL/doc/howtobuild.txt -NetSSL_OpenSSL/include -NetSSL_OpenSSL/include/Poco -NetSSL_OpenSSL/include/Poco/Net -NetSSL_OpenSSL/include/Poco/Net/AcceptCertificateHandler.h -NetSSL_OpenSSL/include/Poco/Net/CertificateHandlerFactory.h -NetSSL_OpenSSL/include/Poco/Net/CertificateHandlerFactoryMgr.h -NetSSL_OpenSSL/include/Poco/Net/ConsoleCertificateHandler.h -NetSSL_OpenSSL/include/Poco/Net/Context.h -NetSSL_OpenSSL/include/Poco/Net/HTTPSClientSession.h -NetSSL_OpenSSL/include/Poco/Net/HTTPSSessionInstantiator.h -NetSSL_OpenSSL/include/Poco/Net/HTTPSStreamFactory.h -NetSSL_OpenSSL/include/Poco/Net/InvalidCertificateHandler.h -NetSSL_OpenSSL/include/Poco/Net/KeyConsoleHandler.h -NetSSL_OpenSSL/include/Poco/Net/KeyFileHandler.h -NetSSL_OpenSSL/include/Poco/Net/NetSSL.h -NetSSL_OpenSSL/include/Poco/Net/PrivateKeyFactory.h -NetSSL_OpenSSL/include/Poco/Net/PrivateKeyFactoryMgr.h -NetSSL_OpenSSL/include/Poco/Net/PrivateKeyPassphraseHandler.h -NetSSL_OpenSSL/include/Poco/Net/RejectCertificateHandler.h -NetSSL_OpenSSL/include/Poco/Net/SecureServerSocket.h -NetSSL_OpenSSL/include/Poco/Net/SecureServerSocketImpl.h -NetSSL_OpenSSL/include/Poco/Net/SecureSMTPClientSession.h -NetSSL_OpenSSL/include/Poco/Net/SecureSocketImpl.h -NetSSL_OpenSSL/include/Poco/Net/SecureStreamSocket.h -NetSSL_OpenSSL/include/Poco/Net/SecureStreamSocketImpl.h -NetSSL_OpenSSL/include/Poco/Net/Session.h -NetSSL_OpenSSL/include/Poco/Net/SSLException.h -NetSSL_OpenSSL/include/Poco/Net/SSLManager.h -NetSSL_OpenSSL/include/Poco/Net/Utility.h -NetSSL_OpenSSL/include/Poco/Net/VerificationErrorArgs.h -NetSSL_OpenSSL/include/Poco/Net/X509Certificate.h -NetSSL_OpenSSL/Makefile -NetSSL_OpenSSL/NetSSL_OpenSSL.progen -NetSSL_OpenSSL/NetSSL_OpenSSL_CE_vs90.sln -NetSSL_OpenSSL/NetSSL_OpenSSL_CE_vs90.vcproj -NetSSL_OpenSSL/NetSSL_OpenSSL_vs100.sln -NetSSL_OpenSSL/NetSSL_OpenSSL_vs100.vcxproj -NetSSL_OpenSSL/NetSSL_OpenSSL_vs100.vcxproj.filters -NetSSL_OpenSSL/NetSSL_OpenSSL_vs110.sln -NetSSL_OpenSSL/NetSSL_OpenSSL_vs110.vcxproj -NetSSL_OpenSSL/NetSSL_OpenSSL_vs110.vcxproj.filters -NetSSL_OpenSSL/NetSSL_OpenSSL_vs120.sln -NetSSL_OpenSSL/NetSSL_OpenSSL_vs120.vcxproj -NetSSL_OpenSSL/NetSSL_OpenSSL_vs120.vcxproj.filters -NetSSL_OpenSSL/NetSSL_OpenSSL_vs140.sln -NetSSL_OpenSSL/NetSSL_OpenSSL_vs140.vcxproj -NetSSL_OpenSSL/NetSSL_OpenSSL_vs140.vcxproj.filters -NetSSL_OpenSSL/NetSSL_OpenSSL_vs90.sln -NetSSL_OpenSSL/NetSSL_OpenSSL_vs90.vcproj -NetSSL_OpenSSL/NetSSL_OpenSSL_WEC2013_vs110.vcxproj -NetSSL_OpenSSL/NetSSL_OpenSSL_WEC2013_vs110.vcxproj.filters -NetSSL_OpenSSL/NetSSL_OpenSSL_WEC2013_vs120.sln -NetSSL_OpenSSL/NetSSL_OpenSSL_WEC2013_vs120.vcxproj -NetSSL_OpenSSL/NetSSL_OpenSSL_WEC2013_vs120.vcxproj.filters -NetSSL_OpenSSL/NetSSL_OpenSSL_x64_vs100.sln -NetSSL_OpenSSL/NetSSL_OpenSSL_x64_vs100.vcxproj -NetSSL_OpenSSL/NetSSL_OpenSSL_x64_vs100.vcxproj.filters -NetSSL_OpenSSL/NetSSL_OpenSSL_x64_vs110.sln -NetSSL_OpenSSL/NetSSL_OpenSSL_x64_vs110.vcxproj -NetSSL_OpenSSL/NetSSL_OpenSSL_x64_vs110.vcxproj.filters -NetSSL_OpenSSL/NetSSL_OpenSSL_x64_vs120.sln -NetSSL_OpenSSL/NetSSL_OpenSSL_x64_vs120.vcxproj -NetSSL_OpenSSL/NetSSL_OpenSSL_x64_vs120.vcxproj.filters -NetSSL_OpenSSL/NetSSL_OpenSSL_x64_vs140.sln -NetSSL_OpenSSL/NetSSL_OpenSSL_x64_vs140.vcxproj -NetSSL_OpenSSL/NetSSL_OpenSSL_x64_vs140.vcxproj.filters -NetSSL_OpenSSL/NetSSL_OpenSSL_x64_vs90.sln -NetSSL_OpenSSL/NetSSL_OpenSSL_x64_vs90.vcproj -NetSSL_OpenSSL/samples -NetSSL_OpenSSL/samples/CMakeLists.txt -NetSSL_OpenSSL/samples/download -NetSSL_OpenSSL/samples/download/CMakeLists.txt -NetSSL_OpenSSL/samples/download/download.progen -NetSSL_OpenSSL/samples/download/download_CE_vs90.vcproj -NetSSL_OpenSSL/samples/download/download_vs100.vcxproj -NetSSL_OpenSSL/samples/download/download_vs100.vcxproj.filters -NetSSL_OpenSSL/samples/download/download_vs110.vcxproj -NetSSL_OpenSSL/samples/download/download_vs110.vcxproj.filters -NetSSL_OpenSSL/samples/download/download_vs120.vcxproj -NetSSL_OpenSSL/samples/download/download_vs120.vcxproj.filters -NetSSL_OpenSSL/samples/download/download_vs140.vcxproj -NetSSL_OpenSSL/samples/download/download_vs140.vcxproj.filters -NetSSL_OpenSSL/samples/download/download_vs90.vcproj -NetSSL_OpenSSL/samples/download/download_WEC2013_vs110.vcxproj -NetSSL_OpenSSL/samples/download/download_WEC2013_vs110.vcxproj.filters -NetSSL_OpenSSL/samples/download/download_WEC2013_vs120.vcxproj -NetSSL_OpenSSL/samples/download/download_WEC2013_vs120.vcxproj.filters -NetSSL_OpenSSL/samples/download/download_x64_vs100.vcxproj -NetSSL_OpenSSL/samples/download/download_x64_vs100.vcxproj.filters -NetSSL_OpenSSL/samples/download/download_x64_vs110.vcxproj -NetSSL_OpenSSL/samples/download/download_x64_vs110.vcxproj.filters -NetSSL_OpenSSL/samples/download/download_x64_vs120.vcxproj -NetSSL_OpenSSL/samples/download/download_x64_vs120.vcxproj.filters -NetSSL_OpenSSL/samples/download/download_x64_vs140.vcxproj -NetSSL_OpenSSL/samples/download/download_x64_vs140.vcxproj.filters -NetSSL_OpenSSL/samples/download/download_x64_vs90.vcproj -NetSSL_OpenSSL/samples/download/Makefile -NetSSL_OpenSSL/samples/download/rootcert.pem -NetSSL_OpenSSL/samples/download/src -NetSSL_OpenSSL/samples/download/src/download.cpp -NetSSL_OpenSSL/samples/HTTPSTimeServer -NetSSL_OpenSSL/samples/HTTPSTimeServer/any.pem -NetSSL_OpenSSL/samples/HTTPSTimeServer/CMakeLists.txt -NetSSL_OpenSSL/samples/HTTPSTimeServer/HTTPSTimeServer.progen -NetSSL_OpenSSL/samples/HTTPSTimeServer/HTTPSTimeServer.properties -NetSSL_OpenSSL/samples/HTTPSTimeServer/HTTPSTimeServer_CE_vs90.vcproj -NetSSL_OpenSSL/samples/HTTPSTimeServer/HTTPSTimeServer_vs100.vcxproj -NetSSL_OpenSSL/samples/HTTPSTimeServer/HTTPSTimeServer_vs100.vcxproj.filters -NetSSL_OpenSSL/samples/HTTPSTimeServer/HTTPSTimeServer_vs110.vcxproj -NetSSL_OpenSSL/samples/HTTPSTimeServer/HTTPSTimeServer_vs110.vcxproj.filters -NetSSL_OpenSSL/samples/HTTPSTimeServer/HTTPSTimeServer_vs120.vcxproj -NetSSL_OpenSSL/samples/HTTPSTimeServer/HTTPSTimeServer_vs120.vcxproj.filters -NetSSL_OpenSSL/samples/HTTPSTimeServer/HTTPSTimeServer_vs140.vcxproj -NetSSL_OpenSSL/samples/HTTPSTimeServer/HTTPSTimeServer_vs140.vcxproj.filters -NetSSL_OpenSSL/samples/HTTPSTimeServer/HTTPSTimeServer_vs90.vcproj -NetSSL_OpenSSL/samples/HTTPSTimeServer/HTTPSTimeServer_WEC2013_vs110.vcxproj -NetSSL_OpenSSL/samples/HTTPSTimeServer/HTTPSTimeServer_WEC2013_vs110.vcxproj.filters -NetSSL_OpenSSL/samples/HTTPSTimeServer/HTTPSTimeServer_WEC2013_vs120.vcxproj -NetSSL_OpenSSL/samples/HTTPSTimeServer/HTTPSTimeServer_WEC2013_vs120.vcxproj.filters -NetSSL_OpenSSL/samples/HTTPSTimeServer/HTTPSTimeServer_x64_vs100.vcxproj -NetSSL_OpenSSL/samples/HTTPSTimeServer/HTTPSTimeServer_x64_vs100.vcxproj.filters -NetSSL_OpenSSL/samples/HTTPSTimeServer/HTTPSTimeServer_x64_vs110.vcxproj -NetSSL_OpenSSL/samples/HTTPSTimeServer/HTTPSTimeServer_x64_vs110.vcxproj.filters -NetSSL_OpenSSL/samples/HTTPSTimeServer/HTTPSTimeServer_x64_vs120.vcxproj -NetSSL_OpenSSL/samples/HTTPSTimeServer/HTTPSTimeServer_x64_vs120.vcxproj.filters -NetSSL_OpenSSL/samples/HTTPSTimeServer/HTTPSTimeServer_x64_vs140.vcxproj -NetSSL_OpenSSL/samples/HTTPSTimeServer/HTTPSTimeServer_x64_vs140.vcxproj.filters -NetSSL_OpenSSL/samples/HTTPSTimeServer/HTTPSTimeServer_x64_vs90.vcproj -NetSSL_OpenSSL/samples/HTTPSTimeServer/Makefile -NetSSL_OpenSSL/samples/HTTPSTimeServer/rootcert.pem -NetSSL_OpenSSL/samples/HTTPSTimeServer/src -NetSSL_OpenSSL/samples/HTTPSTimeServer/src/HTTPSTimeServer.cpp -NetSSL_OpenSSL/samples/Mail -NetSSL_OpenSSL/samples/Mail/CMakeLists.txt -NetSSL_OpenSSL/samples/Mail/Mail.progen -NetSSL_OpenSSL/samples/Mail/Mail_CE_vs90.vcproj -NetSSL_OpenSSL/samples/Mail/Mail_vs100.vcxproj -NetSSL_OpenSSL/samples/Mail/Mail_vs100.vcxproj.filters -NetSSL_OpenSSL/samples/Mail/Mail_vs110.vcxproj -NetSSL_OpenSSL/samples/Mail/Mail_vs110.vcxproj.filters -NetSSL_OpenSSL/samples/Mail/Mail_vs120.vcxproj -NetSSL_OpenSSL/samples/Mail/Mail_vs120.vcxproj.filters -NetSSL_OpenSSL/samples/Mail/Mail_vs140.vcxproj -NetSSL_OpenSSL/samples/Mail/Mail_vs140.vcxproj.filters -NetSSL_OpenSSL/samples/Mail/Mail_vs90.vcproj -NetSSL_OpenSSL/samples/Mail/Mail_WEC2013_vs110.vcxproj -NetSSL_OpenSSL/samples/Mail/Mail_WEC2013_vs110.vcxproj.filters -NetSSL_OpenSSL/samples/Mail/Mail_WEC2013_vs120.vcxproj -NetSSL_OpenSSL/samples/Mail/Mail_WEC2013_vs120.vcxproj.filters -NetSSL_OpenSSL/samples/Mail/Mail_x64_vs100.vcxproj -NetSSL_OpenSSL/samples/Mail/Mail_x64_vs100.vcxproj.filters -NetSSL_OpenSSL/samples/Mail/Mail_x64_vs110.vcxproj -NetSSL_OpenSSL/samples/Mail/Mail_x64_vs110.vcxproj.filters -NetSSL_OpenSSL/samples/Mail/Mail_x64_vs120.vcxproj -NetSSL_OpenSSL/samples/Mail/Mail_x64_vs120.vcxproj.filters -NetSSL_OpenSSL/samples/Mail/Mail_x64_vs140.vcxproj -NetSSL_OpenSSL/samples/Mail/Mail_x64_vs140.vcxproj.filters -NetSSL_OpenSSL/samples/Mail/Mail_x64_vs90.vcproj -NetSSL_OpenSSL/samples/Mail/Makefile -NetSSL_OpenSSL/samples/Mail/src -NetSSL_OpenSSL/samples/Mail/src/Mail.cpp -NetSSL_OpenSSL/samples/Mail/src/PocoLogo.hpp -NetSSL_OpenSSL/samples/Makefile -NetSSL_OpenSSL/samples/samples.progen -NetSSL_OpenSSL/samples/samples_CE_vs90.sln -NetSSL_OpenSSL/samples/samples_vs100.sln -NetSSL_OpenSSL/samples/samples_vs110.sln -NetSSL_OpenSSL/samples/samples_vs120.sln -NetSSL_OpenSSL/samples/samples_vs140.sln -NetSSL_OpenSSL/samples/samples_vs90.sln -NetSSL_OpenSSL/samples/samples_WEC2013_vs110.sln -NetSSL_OpenSSL/samples/samples_WEC2013_vs120.sln -NetSSL_OpenSSL/samples/samples_x64_vs100.sln -NetSSL_OpenSSL/samples/samples_x64_vs110.sln -NetSSL_OpenSSL/samples/samples_x64_vs120.sln -NetSSL_OpenSSL/samples/samples_x64_vs140.sln -NetSSL_OpenSSL/samples/samples_x64_vs90.sln -NetSSL_OpenSSL/samples/TwitterClient -NetSSL_OpenSSL/samples/TwitterClient/CMakeLists.txt -NetSSL_OpenSSL/samples/TwitterClient/Makefile -NetSSL_OpenSSL/samples/TwitterClient/src -NetSSL_OpenSSL/samples/TwitterClient/src/TweetApp.cpp -NetSSL_OpenSSL/samples/TwitterClient/src/Twitter.cpp -NetSSL_OpenSSL/samples/TwitterClient/src/Twitter.h -NetSSL_OpenSSL/samples/TwitterClient/TwitterClient.progen -NetSSL_OpenSSL/samples/TwitterClient/TwitterClient_CE_vs90.vcproj -NetSSL_OpenSSL/samples/TwitterClient/TwitterClient_vs100.vcxproj -NetSSL_OpenSSL/samples/TwitterClient/TwitterClient_vs100.vcxproj.filters -NetSSL_OpenSSL/samples/TwitterClient/TwitterClient_vs110.vcxproj -NetSSL_OpenSSL/samples/TwitterClient/TwitterClient_vs110.vcxproj.filters -NetSSL_OpenSSL/samples/TwitterClient/TwitterClient_vs120.vcxproj -NetSSL_OpenSSL/samples/TwitterClient/TwitterClient_vs120.vcxproj.filters -NetSSL_OpenSSL/samples/TwitterClient/TwitterClient_vs140.vcxproj -NetSSL_OpenSSL/samples/TwitterClient/TwitterClient_vs140.vcxproj.filters -NetSSL_OpenSSL/samples/TwitterClient/TwitterClient_vs90.vcproj -NetSSL_OpenSSL/samples/TwitterClient/TwitterClient_WEC2013_vs110.vcxproj -NetSSL_OpenSSL/samples/TwitterClient/TwitterClient_WEC2013_vs110.vcxproj.filters -NetSSL_OpenSSL/samples/TwitterClient/TwitterClient_WEC2013_vs120.vcxproj -NetSSL_OpenSSL/samples/TwitterClient/TwitterClient_WEC2013_vs120.vcxproj.filters -NetSSL_OpenSSL/samples/TwitterClient/TwitterClient_x64_vs100.vcxproj -NetSSL_OpenSSL/samples/TwitterClient/TwitterClient_x64_vs100.vcxproj.filters -NetSSL_OpenSSL/samples/TwitterClient/TwitterClient_x64_vs110.vcxproj -NetSSL_OpenSSL/samples/TwitterClient/TwitterClient_x64_vs110.vcxproj.filters -NetSSL_OpenSSL/samples/TwitterClient/TwitterClient_x64_vs120.vcxproj -NetSSL_OpenSSL/samples/TwitterClient/TwitterClient_x64_vs120.vcxproj.filters -NetSSL_OpenSSL/samples/TwitterClient/TwitterClient_x64_vs140.vcxproj -NetSSL_OpenSSL/samples/TwitterClient/TwitterClient_x64_vs140.vcxproj.filters -NetSSL_OpenSSL/samples/TwitterClient/TwitterClient_x64_vs90.vcproj -NetSSL_OpenSSL/src -NetSSL_OpenSSL/src/AcceptCertificateHandler.cpp -NetSSL_OpenSSL/src/CertificateHandlerFactory.cpp -NetSSL_OpenSSL/src/CertificateHandlerFactoryMgr.cpp -NetSSL_OpenSSL/src/ConsoleCertificateHandler.cpp -NetSSL_OpenSSL/src/Context.cpp -NetSSL_OpenSSL/src/HTTPSClientSession.cpp -NetSSL_OpenSSL/src/HTTPSSessionInstantiator.cpp -NetSSL_OpenSSL/src/HTTPSStreamFactory.cpp -NetSSL_OpenSSL/src/InvalidCertificateHandler.cpp -NetSSL_OpenSSL/src/KeyConsoleHandler.cpp -NetSSL_OpenSSL/src/KeyFileHandler.cpp -NetSSL_OpenSSL/src/PrivateKeyFactory.cpp -NetSSL_OpenSSL/src/PrivateKeyFactoryMgr.cpp -NetSSL_OpenSSL/src/PrivateKeyPassphraseHandler.cpp -NetSSL_OpenSSL/src/RejectCertificateHandler.cpp -NetSSL_OpenSSL/src/SecureServerSocket.cpp -NetSSL_OpenSSL/src/SecureServerSocketImpl.cpp -NetSSL_OpenSSL/src/SecureSMTPClientSession.cpp -NetSSL_OpenSSL/src/SecureSocketImpl.cpp -NetSSL_OpenSSL/src/SecureStreamSocket.cpp -NetSSL_OpenSSL/src/SecureStreamSocketImpl.cpp -NetSSL_OpenSSL/src/Session.cpp -NetSSL_OpenSSL/src/SSLException.cpp -NetSSL_OpenSSL/src/SSLManager.cpp -NetSSL_OpenSSL/src/Utility.cpp -NetSSL_OpenSSL/src/VerificationErrorArgs.cpp -NetSSL_OpenSSL/src/X509Certificate.cpp -NetSSL_OpenSSL/testsuite -NetSSL_OpenSSL/testsuite/any.pem -NetSSL_OpenSSL/testsuite/CMakeLists.txt -NetSSL_OpenSSL/testsuite/Makefile -NetSSL_OpenSSL/testsuite/rootcert.pem -NetSSL_OpenSSL/testsuite/src -NetSSL_OpenSSL/testsuite/src/Driver.cpp -NetSSL_OpenSSL/testsuite/src/HTTPSClientSessionTest.cpp -NetSSL_OpenSSL/testsuite/src/HTTPSClientSessionTest.h -NetSSL_OpenSSL/testsuite/src/HTTPSClientTestSuite.cpp -NetSSL_OpenSSL/testsuite/src/HTTPSClientTestSuite.h -NetSSL_OpenSSL/testsuite/src/HTTPSServerTest.cpp -NetSSL_OpenSSL/testsuite/src/HTTPSServerTest.h -NetSSL_OpenSSL/testsuite/src/HTTPSServerTestSuite.cpp -NetSSL_OpenSSL/testsuite/src/HTTPSServerTestSuite.h -NetSSL_OpenSSL/testsuite/src/HTTPSStreamFactoryTest.cpp -NetSSL_OpenSSL/testsuite/src/HTTPSStreamFactoryTest.h -NetSSL_OpenSSL/testsuite/src/HTTPSTestServer.cpp -NetSSL_OpenSSL/testsuite/src/HTTPSTestServer.h -NetSSL_OpenSSL/testsuite/src/NetSSLTestSuite.cpp -NetSSL_OpenSSL/testsuite/src/NetSSLTestSuite.h -NetSSL_OpenSSL/testsuite/src/TCPServerTest.cpp -NetSSL_OpenSSL/testsuite/src/TCPServerTest.h -NetSSL_OpenSSL/testsuite/src/TCPServerTestSuite.cpp -NetSSL_OpenSSL/testsuite/src/TCPServerTestSuite.h -NetSSL_OpenSSL/testsuite/src/WinCEDriver.cpp -NetSSL_OpenSSL/testsuite/src/WinDriver.cpp -NetSSL_OpenSSL/testsuite/testrunner.xml -NetSSL_OpenSSL/testsuite/TestSuite.progen -NetSSL_OpenSSL/testsuite/TestSuite.xml -NetSSL_OpenSSL/testsuite/TestSuite_CE_vs90.vcproj -NetSSL_OpenSSL/testsuite/TestSuite_vs100.vcxproj -NetSSL_OpenSSL/testsuite/TestSuite_vs100.vcxproj.filters -NetSSL_OpenSSL/testsuite/TestSuite_vs110.vcxproj -NetSSL_OpenSSL/testsuite/TestSuite_vs110.vcxproj.filters -NetSSL_OpenSSL/testsuite/TestSuite_vs120.vcxproj -NetSSL_OpenSSL/testsuite/TestSuite_vs120.vcxproj.filters -NetSSL_OpenSSL/testsuite/TestSuite_vs140.vcxproj -NetSSL_OpenSSL/testsuite/TestSuite_vs140.vcxproj.filters -NetSSL_OpenSSL/testsuite/TestSuite_vs90.vcproj -NetSSL_OpenSSL/testsuite/TestSuite_WEC2013_vs110.vcxproj -NetSSL_OpenSSL/testsuite/TestSuite_WEC2013_vs110.vcxproj.filters -NetSSL_OpenSSL/testsuite/TestSuite_WEC2013_vs120.vcxproj -NetSSL_OpenSSL/testsuite/TestSuite_WEC2013_vs120.vcxproj.filters -NetSSL_OpenSSL/testsuite/TestSuite_x64_vs100.vcxproj -NetSSL_OpenSSL/testsuite/TestSuite_x64_vs100.vcxproj.filters -NetSSL_OpenSSL/testsuite/TestSuite_x64_vs110.vcxproj -NetSSL_OpenSSL/testsuite/TestSuite_x64_vs110.vcxproj.filters -NetSSL_OpenSSL/testsuite/TestSuite_x64_vs120.vcxproj -NetSSL_OpenSSL/testsuite/TestSuite_x64_vs120.vcxproj.filters -NetSSL_OpenSSL/testsuite/TestSuite_x64_vs140.vcxproj -NetSSL_OpenSSL/testsuite/TestSuite_x64_vs140.vcxproj.filters -NetSSL_OpenSSL/testsuite/TestSuite_x64_vs90.vcproj -NetSSL_OpenSSL/testsuite/TestSuitemt.xml -NEWS -PageCompiler -PageCompiler/CMakeLists.txt -PageCompiler/doc -PageCompiler/doc/PageCompilerUserGuide.page -PageCompiler/File2Page -PageCompiler/File2Page/CMakeLists.txt -PageCompiler/File2Page/File2Page.progen -PageCompiler/File2Page/File2Page_vs100.sln -PageCompiler/File2Page/File2Page_vs100.vcxproj -PageCompiler/File2Page/File2Page_vs100.vcxproj.filters -PageCompiler/File2Page/File2Page_vs110.sln -PageCompiler/File2Page/File2Page_vs110.vcxproj -PageCompiler/File2Page/File2Page_vs110.vcxproj.filters -PageCompiler/File2Page/File2Page_vs120.sln -PageCompiler/File2Page/File2Page_vs120.vcxproj -PageCompiler/File2Page/File2Page_vs120.vcxproj.filters -PageCompiler/File2Page/File2Page_vs140.sln -PageCompiler/File2Page/File2Page_vs140.vcxproj -PageCompiler/File2Page/File2Page_vs140.vcxproj.filters -PageCompiler/File2Page/File2Page_vs90.sln -PageCompiler/File2Page/File2Page_vs90.vcproj -PageCompiler/File2Page/File2Page_x64_vs100.sln -PageCompiler/File2Page/File2Page_x64_vs100.vcxproj -PageCompiler/File2Page/File2Page_x64_vs100.vcxproj.filters -PageCompiler/File2Page/File2Page_x64_vs110.sln -PageCompiler/File2Page/File2Page_x64_vs110.vcxproj -PageCompiler/File2Page/File2Page_x64_vs110.vcxproj.filters -PageCompiler/File2Page/File2Page_x64_vs120.sln -PageCompiler/File2Page/File2Page_x64_vs120.vcxproj -PageCompiler/File2Page/File2Page_x64_vs120.vcxproj.filters -PageCompiler/File2Page/File2Page_x64_vs140.sln -PageCompiler/File2Page/File2Page_x64_vs140.vcxproj -PageCompiler/File2Page/File2Page_x64_vs140.vcxproj.filters -PageCompiler/File2Page/File2Page_x64_vs90.sln -PageCompiler/File2Page/File2Page_x64_vs90.vcproj -PageCompiler/File2Page/Makefile -PageCompiler/File2Page/src -PageCompiler/File2Page/src/File2Page.cpp -PageCompiler/Makefile -PageCompiler/PageCompiler.progen -PageCompiler/PageCompiler_vs100.sln -PageCompiler/PageCompiler_vs100.vcxproj -PageCompiler/PageCompiler_vs100.vcxproj.filters -PageCompiler/PageCompiler_vs110.sln -PageCompiler/PageCompiler_vs110.vcxproj -PageCompiler/PageCompiler_vs110.vcxproj.filters -PageCompiler/PageCompiler_vs120.sln -PageCompiler/PageCompiler_vs120.vcxproj -PageCompiler/PageCompiler_vs120.vcxproj.filters -PageCompiler/PageCompiler_vs140.sln -PageCompiler/PageCompiler_vs140.vcxproj -PageCompiler/PageCompiler_vs140.vcxproj.filters -PageCompiler/PageCompiler_vs90.sln -PageCompiler/PageCompiler_vs90.vcproj -PageCompiler/PageCompiler_x64_vs100.sln -PageCompiler/PageCompiler_x64_vs100.vcxproj -PageCompiler/PageCompiler_x64_vs100.vcxproj.filters -PageCompiler/PageCompiler_x64_vs110.sln -PageCompiler/PageCompiler_x64_vs110.vcxproj -PageCompiler/PageCompiler_x64_vs110.vcxproj.filters -PageCompiler/PageCompiler_x64_vs120.sln -PageCompiler/PageCompiler_x64_vs120.vcxproj -PageCompiler/PageCompiler_x64_vs120.vcxproj.filters -PageCompiler/PageCompiler_x64_vs140.sln -PageCompiler/PageCompiler_x64_vs140.vcxproj -PageCompiler/PageCompiler_x64_vs140.vcxproj.filters -PageCompiler/PageCompiler_x64_vs90.sln -PageCompiler/PageCompiler_x64_vs90.vcproj -PageCompiler/samples -PageCompiler/samples/HTTPTimeServer -PageCompiler/samples/HTTPTimeServer/HTTPTimeServer.progen -PageCompiler/samples/HTTPTimeServer/HTTPTimeServer_CE_vs90.vcproj -PageCompiler/samples/HTTPTimeServer/HTTPTimeServer_vs100.vcxproj -PageCompiler/samples/HTTPTimeServer/HTTPTimeServer_vs100.vcxproj.filters -PageCompiler/samples/HTTPTimeServer/HTTPTimeServer_vs110.vcxproj -PageCompiler/samples/HTTPTimeServer/HTTPTimeServer_vs110.vcxproj.filters -PageCompiler/samples/HTTPTimeServer/HTTPTimeServer_vs120.vcxproj -PageCompiler/samples/HTTPTimeServer/HTTPTimeServer_vs120.vcxproj.filters -PageCompiler/samples/HTTPTimeServer/HTTPTimeServer_vs140.vcxproj -PageCompiler/samples/HTTPTimeServer/HTTPTimeServer_vs140.vcxproj.filters -PageCompiler/samples/HTTPTimeServer/HTTPTimeServer_vs90.vcproj -PageCompiler/samples/HTTPTimeServer/HTTPTimeServer_x64_vs100.vcxproj -PageCompiler/samples/HTTPTimeServer/HTTPTimeServer_x64_vs100.vcxproj.filters -PageCompiler/samples/HTTPTimeServer/HTTPTimeServer_x64_vs110.vcxproj -PageCompiler/samples/HTTPTimeServer/HTTPTimeServer_x64_vs110.vcxproj.filters -PageCompiler/samples/HTTPTimeServer/HTTPTimeServer_x64_vs120.vcxproj -PageCompiler/samples/HTTPTimeServer/HTTPTimeServer_x64_vs120.vcxproj.filters -PageCompiler/samples/HTTPTimeServer/HTTPTimeServer_x64_vs140.vcxproj -PageCompiler/samples/HTTPTimeServer/HTTPTimeServer_x64_vs140.vcxproj.filters -PageCompiler/samples/HTTPTimeServer/HTTPTimeServer_x64_vs90.vcproj -PageCompiler/samples/HTTPTimeServer/Makefile -PageCompiler/samples/HTTPTimeServer/src -PageCompiler/samples/HTTPTimeServer/src/HTTPTimeServerApp.cpp -PageCompiler/samples/HTTPTimeServer/src/TimeHandler.cpp -PageCompiler/samples/HTTPTimeServer/src/TimeHandler.cpsp -PageCompiler/samples/HTTPTimeServer/src/TimeHandler.h -PageCompiler/samples/Makefile -PageCompiler/samples/samples.progen -PageCompiler/samples/samples_CE_vs90.sln -PageCompiler/samples/samples_vs100.sln -PageCompiler/samples/samples_vs110.sln -PageCompiler/samples/samples_vs120.sln -PageCompiler/samples/samples_vs140.sln -PageCompiler/samples/samples_vs90.sln -PageCompiler/samples/samples_x64_vs100.sln -PageCompiler/samples/samples_x64_vs110.sln -PageCompiler/samples/samples_x64_vs120.sln -PageCompiler/samples/samples_x64_vs140.sln -PageCompiler/samples/samples_x64_vs90.sln -PageCompiler/src -PageCompiler/src/ApacheCodeWriter.cpp -PageCompiler/src/ApacheCodeWriter.h -PageCompiler/src/CodeWriter.cpp -PageCompiler/src/CodeWriter.h -PageCompiler/src/OSPCodeWriter.cpp -PageCompiler/src/OSPCodeWriter.h -PageCompiler/src/Page.cpp -PageCompiler/src/Page.h -PageCompiler/src/PageCompiler.cpp -PageCompiler/src/PageReader.cpp -PageCompiler/src/PageReader.h -patches -patches/AIX -patches/AIX/xlC8.diff -README -Util -Util/cmake -Util/cmake/PocoUtilConfig.cmake -Util/CMakeLists.txt -Util/include -Util/include/Poco -Util/include/Poco/Util -Util/include/Poco/Util/AbstractConfiguration.h -Util/include/Poco/Util/Application.h -Util/include/Poco/Util/ConfigurationMapper.h -Util/include/Poco/Util/ConfigurationView.h -Util/include/Poco/Util/FilesystemConfiguration.h -Util/include/Poco/Util/HelpFormatter.h -Util/include/Poco/Util/IniFileConfiguration.h -Util/include/Poco/Util/IntValidator.h -Util/include/Poco/Util/JSONConfiguration.h -Util/include/Poco/Util/LayeredConfiguration.h -Util/include/Poco/Util/LoggingConfigurator.h -Util/include/Poco/Util/LoggingSubsystem.h -Util/include/Poco/Util/MapConfiguration.h -Util/include/Poco/Util/Option.h -Util/include/Poco/Util/OptionCallback.h -Util/include/Poco/Util/OptionException.h -Util/include/Poco/Util/OptionProcessor.h -Util/include/Poco/Util/OptionSet.h -Util/include/Poco/Util/PropertyFileConfiguration.h -Util/include/Poco/Util/RegExpValidator.h -Util/include/Poco/Util/ServerApplication.h -Util/include/Poco/Util/Subsystem.h -Util/include/Poco/Util/SystemConfiguration.h -Util/include/Poco/Util/Timer.h -Util/include/Poco/Util/TimerTask.h -Util/include/Poco/Util/TimerTaskAdapter.h -Util/include/Poco/Util/Units.h -Util/include/Poco/Util/Util.h -Util/include/Poco/Util/Validator.h -Util/include/Poco/Util/WinRegistryConfiguration.h -Util/include/Poco/Util/WinRegistryKey.h -Util/include/Poco/Util/WinService.h -Util/include/Poco/Util/XMLConfiguration.h -Util/Makefile -Util/samples -Util/samples/CMakeLists.txt -Util/samples/Makefile -Util/samples/pkill -Util/samples/pkill/CMakeLists.txt -Util/samples/pkill/Makefile -Util/samples/pkill/pkill.progen -Util/samples/pkill/pkill_CE_vs90.vcproj -Util/samples/pkill/pkill_vs100.vcxproj -Util/samples/pkill/pkill_vs100.vcxproj.filters -Util/samples/pkill/pkill_vs110.vcxproj -Util/samples/pkill/pkill_vs110.vcxproj.filters -Util/samples/pkill/pkill_vs120.vcxproj -Util/samples/pkill/pkill_vs120.vcxproj.filters -Util/samples/pkill/pkill_vs140.vcxproj -Util/samples/pkill/pkill_vs140.vcxproj.filters -Util/samples/pkill/pkill_vs90.vcproj -Util/samples/pkill/pkill_WEC2013_vs110.vcxproj -Util/samples/pkill/pkill_WEC2013_vs110.vcxproj.filters -Util/samples/pkill/pkill_WEC2013_vs120.vcxproj -Util/samples/pkill/pkill_WEC2013_vs120.vcxproj.filters -Util/samples/pkill/pkill_x64_vs100.vcxproj -Util/samples/pkill/pkill_x64_vs100.vcxproj.filters -Util/samples/pkill/pkill_x64_vs110.vcxproj -Util/samples/pkill/pkill_x64_vs110.vcxproj.filters -Util/samples/pkill/pkill_x64_vs120.vcxproj -Util/samples/pkill/pkill_x64_vs120.vcxproj.filters -Util/samples/pkill/pkill_x64_vs140.vcxproj -Util/samples/pkill/pkill_x64_vs140.vcxproj.filters -Util/samples/pkill/pkill_x64_vs90.vcproj -Util/samples/pkill/src -Util/samples/pkill/src/pkill.cpp -Util/samples/SampleApp -Util/samples/SampleApp/CMakeLists.txt -Util/samples/SampleApp/Makefile -Util/samples/SampleApp/SampleApp.progen -Util/samples/SampleApp/SampleApp.properties -Util/samples/SampleApp/SampleApp_CE_vs90.vcproj -Util/samples/SampleApp/SampleApp_vs100.vcxproj -Util/samples/SampleApp/SampleApp_vs100.vcxproj.filters -Util/samples/SampleApp/SampleApp_vs110.vcxproj -Util/samples/SampleApp/SampleApp_vs110.vcxproj.filters -Util/samples/SampleApp/SampleApp_vs120.vcxproj -Util/samples/SampleApp/SampleApp_vs120.vcxproj.filters -Util/samples/SampleApp/SampleApp_vs140.vcxproj -Util/samples/SampleApp/SampleApp_vs140.vcxproj.filters -Util/samples/SampleApp/SampleApp_vs90.vcproj -Util/samples/SampleApp/SampleApp_WEC2013_vs110.vcxproj -Util/samples/SampleApp/SampleApp_WEC2013_vs110.vcxproj.filters -Util/samples/SampleApp/SampleApp_WEC2013_vs120.vcxproj -Util/samples/SampleApp/SampleApp_WEC2013_vs120.vcxproj.filters -Util/samples/SampleApp/SampleApp_x64_vs100.vcxproj -Util/samples/SampleApp/SampleApp_x64_vs100.vcxproj.filters -Util/samples/SampleApp/SampleApp_x64_vs110.vcxproj -Util/samples/SampleApp/SampleApp_x64_vs110.vcxproj.filters -Util/samples/SampleApp/SampleApp_x64_vs120.vcxproj -Util/samples/SampleApp/SampleApp_x64_vs120.vcxproj.filters -Util/samples/SampleApp/SampleApp_x64_vs140.vcxproj -Util/samples/SampleApp/SampleApp_x64_vs140.vcxproj.filters -Util/samples/SampleApp/SampleApp_x64_vs90.vcproj -Util/samples/SampleApp/src -Util/samples/SampleApp/src/SampleApp.cpp -Util/samples/samples.progen -Util/samples/samples_CE_vs90.sln -Util/samples/samples_vs100.sln -Util/samples/samples_vs110.sln -Util/samples/samples_vs120.sln -Util/samples/samples_vs140.sln -Util/samples/samples_vs90.sln -Util/samples/samples_WEC2013_vs110.sln -Util/samples/samples_WEC2013_vs120.sln -Util/samples/samples_x64_vs100.sln -Util/samples/samples_x64_vs110.sln -Util/samples/samples_x64_vs120.sln -Util/samples/samples_x64_vs140.sln -Util/samples/samples_x64_vs90.sln -Util/samples/SampleServer -Util/samples/SampleServer/CMakeLists.txt -Util/samples/SampleServer/Makefile -Util/samples/SampleServer/SampleServer.progen -Util/samples/SampleServer/SampleServer.properties -Util/samples/SampleServer/SampleServer_CE_vs90.vcproj -Util/samples/SampleServer/SampleServer_vs100.vcxproj -Util/samples/SampleServer/SampleServer_vs100.vcxproj.filters -Util/samples/SampleServer/SampleServer_vs110.vcxproj -Util/samples/SampleServer/SampleServer_vs110.vcxproj.filters -Util/samples/SampleServer/SampleServer_vs120.vcxproj -Util/samples/SampleServer/SampleServer_vs120.vcxproj.filters -Util/samples/SampleServer/SampleServer_vs140.vcxproj -Util/samples/SampleServer/SampleServer_vs140.vcxproj.filters -Util/samples/SampleServer/SampleServer_vs90.vcproj -Util/samples/SampleServer/SampleServer_WEC2013_vs110.vcxproj -Util/samples/SampleServer/SampleServer_WEC2013_vs110.vcxproj.filters -Util/samples/SampleServer/SampleServer_WEC2013_vs120.vcxproj -Util/samples/SampleServer/SampleServer_WEC2013_vs120.vcxproj.filters -Util/samples/SampleServer/SampleServer_x64_vs100.vcxproj -Util/samples/SampleServer/SampleServer_x64_vs100.vcxproj.filters -Util/samples/SampleServer/SampleServer_x64_vs110.vcxproj -Util/samples/SampleServer/SampleServer_x64_vs110.vcxproj.filters -Util/samples/SampleServer/SampleServer_x64_vs120.vcxproj -Util/samples/SampleServer/SampleServer_x64_vs120.vcxproj.filters -Util/samples/SampleServer/SampleServer_x64_vs140.vcxproj -Util/samples/SampleServer/SampleServer_x64_vs140.vcxproj.filters -Util/samples/SampleServer/SampleServer_x64_vs90.vcproj -Util/samples/SampleServer/src -Util/samples/SampleServer/src/SampleServer.cpp -Util/samples/Units -Util/samples/Units/CMakeLists.txt -Util/samples/Units/Makefile -Util/samples/Units/src -Util/samples/Units/src/Units.cpp -Util/samples/Units/Units.progen -Util/samples/Units/Units_CE_vs90.vcproj -Util/samples/Units/Units_vs100.vcxproj -Util/samples/Units/Units_vs100.vcxproj.filters -Util/samples/Units/Units_vs110.vcxproj -Util/samples/Units/Units_vs110.vcxproj.filters -Util/samples/Units/Units_vs120.vcxproj -Util/samples/Units/Units_vs120.vcxproj.filters -Util/samples/Units/Units_vs140.vcxproj -Util/samples/Units/Units_vs140.vcxproj.filters -Util/samples/Units/Units_vs90.vcproj -Util/samples/Units/Units_WEC2013_vs110.vcxproj -Util/samples/Units/Units_WEC2013_vs110.vcxproj.filters -Util/samples/Units/Units_WEC2013_vs120.vcxproj -Util/samples/Units/Units_WEC2013_vs120.vcxproj.filters -Util/samples/Units/Units_x64_vs100.vcxproj -Util/samples/Units/Units_x64_vs100.vcxproj.filters -Util/samples/Units/Units_x64_vs110.vcxproj -Util/samples/Units/Units_x64_vs110.vcxproj.filters -Util/samples/Units/Units_x64_vs120.vcxproj -Util/samples/Units/Units_x64_vs120.vcxproj.filters -Util/samples/Units/Units_x64_vs140.vcxproj -Util/samples/Units/Units_x64_vs140.vcxproj.filters -Util/samples/Units/Units_x64_vs90.vcproj -Util/src -Util/src/AbstractConfiguration.cpp -Util/src/Application.cpp -Util/src/ConfigurationMapper.cpp -Util/src/ConfigurationView.cpp -Util/src/FilesystemConfiguration.cpp -Util/src/HelpFormatter.cpp -Util/src/IniFileConfiguration.cpp -Util/src/IntValidator.cpp -Util/src/JSONConfiguration.cpp -Util/src/LayeredConfiguration.cpp -Util/src/LoggingConfigurator.cpp -Util/src/LoggingSubsystem.cpp -Util/src/MapConfiguration.cpp -Util/src/Option.cpp -Util/src/OptionCallback.cpp -Util/src/OptionException.cpp -Util/src/OptionProcessor.cpp -Util/src/OptionSet.cpp -Util/src/PropertyFileConfiguration.cpp -Util/src/RegExpValidator.cpp -Util/src/ServerApplication.cpp -Util/src/Subsystem.cpp -Util/src/SystemConfiguration.cpp -Util/src/Timer.cpp -Util/src/TimerTask.cpp -Util/src/Validator.cpp -Util/src/WinRegistryConfiguration.cpp -Util/src/WinRegistryKey.cpp -Util/src/WinService.cpp -Util/src/XMLConfiguration.cpp -Util/testsuite -Util/testsuite/CMakeLists.txt -Util/testsuite/Makefile -Util/testsuite/src -Util/testsuite/src/AbstractConfigurationTest.cpp -Util/testsuite/src/AbstractConfigurationTest.h -Util/testsuite/src/ConfigurationMapperTest.cpp -Util/testsuite/src/ConfigurationMapperTest.h -Util/testsuite/src/ConfigurationTestSuite.cpp -Util/testsuite/src/ConfigurationTestSuite.h -Util/testsuite/src/ConfigurationViewTest.cpp -Util/testsuite/src/ConfigurationViewTest.h -Util/testsuite/src/Driver.cpp -Util/testsuite/src/FilesystemConfigurationTest.cpp -Util/testsuite/src/FilesystemConfigurationTest.h -Util/testsuite/src/HelpFormatterTest.cpp -Util/testsuite/src/HelpFormatterTest.h -Util/testsuite/src/IniFileConfigurationTest.cpp -Util/testsuite/src/IniFileConfigurationTest.h -Util/testsuite/src/JSONConfigurationTest.cpp -Util/testsuite/src/JSONConfigurationTest.h -Util/testsuite/src/LayeredConfigurationTest.cpp -Util/testsuite/src/LayeredConfigurationTest.h -Util/testsuite/src/LoggingConfiguratorTest.cpp -Util/testsuite/src/LoggingConfiguratorTest.h -Util/testsuite/src/MapConfigurationTest.cpp -Util/testsuite/src/MapConfigurationTest.h -Util/testsuite/src/OptionProcessorTest.cpp -Util/testsuite/src/OptionProcessorTest.h -Util/testsuite/src/OptionSetTest.cpp -Util/testsuite/src/OptionSetTest.h -Util/testsuite/src/OptionsTestSuite.cpp -Util/testsuite/src/OptionsTestSuite.h -Util/testsuite/src/OptionTest.cpp -Util/testsuite/src/OptionTest.h -Util/testsuite/src/PropertyFileConfigurationTest.cpp -Util/testsuite/src/PropertyFileConfigurationTest.h -Util/testsuite/src/SystemConfigurationTest.cpp -Util/testsuite/src/SystemConfigurationTest.h -Util/testsuite/src/TimerTest.cpp -Util/testsuite/src/TimerTest.h -Util/testsuite/src/TimerTestSuite.cpp -Util/testsuite/src/TimerTestSuite.h -Util/testsuite/src/UtilTestSuite.cpp -Util/testsuite/src/UtilTestSuite.h -Util/testsuite/src/ValidatorTest.cpp -Util/testsuite/src/ValidatorTest.h -Util/testsuite/src/WinCEDriver.cpp -Util/testsuite/src/WinConfigurationTest.cpp -Util/testsuite/src/WinConfigurationTest.h -Util/testsuite/src/WindowsTestSuite.cpp -Util/testsuite/src/WindowsTestSuite.h -Util/testsuite/src/WinDriver.cpp -Util/testsuite/src/WinRegistryTest.cpp -Util/testsuite/src/WinRegistryTest.h -Util/testsuite/src/XMLConfigurationTest.cpp -Util/testsuite/src/XMLConfigurationTest.h -Util/testsuite/TestSuite.progen -Util/testsuite/TestSuite.vxbuild -Util/testsuite/TestSuite_CE_vs90.vcproj -Util/testsuite/TestSuite_vs100.vcxproj -Util/testsuite/TestSuite_vs100.vcxproj.filters -Util/testsuite/TestSuite_vs110.vcxproj -Util/testsuite/TestSuite_vs110.vcxproj.filters -Util/testsuite/TestSuite_vs120.vcxproj -Util/testsuite/TestSuite_vs120.vcxproj.filters -Util/testsuite/TestSuite_vs140.vcxproj -Util/testsuite/TestSuite_vs140.vcxproj.filters -Util/testsuite/TestSuite_vs90.vcproj -Util/testsuite/TestSuite_WEC2013_vs110.vcxproj -Util/testsuite/TestSuite_WEC2013_vs110.vcxproj.filters -Util/testsuite/TestSuite_WEC2013_vs120.vcxproj -Util/testsuite/TestSuite_WEC2013_vs120.vcxproj.filters -Util/testsuite/TestSuite_x64_vs100.vcxproj -Util/testsuite/TestSuite_x64_vs100.vcxproj.filters -Util/testsuite/TestSuite_x64_vs110.vcxproj -Util/testsuite/TestSuite_x64_vs110.vcxproj.filters -Util/testsuite/TestSuite_x64_vs120.vcxproj -Util/testsuite/TestSuite_x64_vs120.vcxproj.filters -Util/testsuite/TestSuite_x64_vs140.vcxproj -Util/testsuite/TestSuite_x64_vs140.vcxproj.filters -Util/testsuite/TestSuite_x64_vs90.vcproj -Util/Util.progen -Util/Util.vxbuild -Util/Util_CE_vs90.sln -Util/Util_CE_vs90.vcproj -Util/Util_vs100.sln -Util/Util_vs100.vcxproj -Util/Util_vs100.vcxproj.filters -Util/Util_vs110.sln -Util/Util_vs110.vcxproj -Util/Util_vs110.vcxproj.filters -Util/Util_vs120.sln -Util/Util_vs120.vcxproj -Util/Util_vs120.vcxproj.filters -Util/Util_vs140.sln -Util/Util_vs140.vcxproj -Util/Util_vs140.vcxproj.filters -Util/Util_vs90.sln -Util/Util_vs90.vcproj -Util/Util_WEC2013_vs110.sln -Util/Util_WEC2013_vs110.vcxproj -Util/Util_WEC2013_vs110.vcxproj.filters -Util/Util_WEC2013_vs120.sln -Util/Util_WEC2013_vs120.vcxproj -Util/Util_WEC2013_vs120.vcxproj.filters -Util/Util_x64_vs100.sln -Util/Util_x64_vs100.vcxproj -Util/Util_x64_vs100.vcxproj.filters -Util/Util_x64_vs110.sln -Util/Util_x64_vs110.vcxproj -Util/Util_x64_vs110.vcxproj.filters -Util/Util_x64_vs120.sln -Util/Util_x64_vs120.vcxproj -Util/Util_x64_vs120.vcxproj.filters -Util/Util_x64_vs140.sln -Util/Util_x64_vs140.vcxproj -Util/Util_x64_vs140.vcxproj.filters -Util/Util_x64_vs90.sln -Util/Util_x64_vs90.vcproj -VERSION -XML -XML/cmake -XML/cmake/PocoXMLConfig.cmake -XML/CMakeLists.txt -XML/include -XML/include/Poco -XML/include/Poco/DOM -XML/include/Poco/DOM/AbstractContainerNode.h -XML/include/Poco/DOM/AbstractNode.h -XML/include/Poco/DOM/Attr.h -XML/include/Poco/DOM/AttrMap.h -XML/include/Poco/DOM/AutoPtr.h -XML/include/Poco/DOM/CDATASection.h -XML/include/Poco/DOM/CharacterData.h -XML/include/Poco/DOM/ChildNodesList.h -XML/include/Poco/DOM/Comment.h -XML/include/Poco/DOM/Document.h -XML/include/Poco/DOM/DocumentEvent.h -XML/include/Poco/DOM/DocumentFragment.h -XML/include/Poco/DOM/DocumentType.h -XML/include/Poco/DOM/DOMBuilder.h -XML/include/Poco/DOM/DOMException.h -XML/include/Poco/DOM/DOMImplementation.h -XML/include/Poco/DOM/DOMObject.h -XML/include/Poco/DOM/DOMParser.h -XML/include/Poco/DOM/DOMSerializer.h -XML/include/Poco/DOM/DOMWriter.h -XML/include/Poco/DOM/DTDMap.h -XML/include/Poco/DOM/Element.h -XML/include/Poco/DOM/ElementsByTagNameList.h -XML/include/Poco/DOM/Entity.h -XML/include/Poco/DOM/EntityReference.h -XML/include/Poco/DOM/Event.h -XML/include/Poco/DOM/EventDispatcher.h -XML/include/Poco/DOM/EventException.h -XML/include/Poco/DOM/EventListener.h -XML/include/Poco/DOM/EventTarget.h -XML/include/Poco/DOM/MutationEvent.h -XML/include/Poco/DOM/NamedNodeMap.h -XML/include/Poco/DOM/Node.h -XML/include/Poco/DOM/NodeAppender.h -XML/include/Poco/DOM/NodeFilter.h -XML/include/Poco/DOM/NodeIterator.h -XML/include/Poco/DOM/NodeList.h -XML/include/Poco/DOM/Notation.h -XML/include/Poco/DOM/ProcessingInstruction.h -XML/include/Poco/DOM/Text.h -XML/include/Poco/DOM/TreeWalker.h -XML/include/Poco/SAX -XML/include/Poco/SAX/Attributes.h -XML/include/Poco/SAX/AttributesImpl.h -XML/include/Poco/SAX/ContentHandler.h -XML/include/Poco/SAX/DeclHandler.h -XML/include/Poco/SAX/DefaultHandler.h -XML/include/Poco/SAX/DTDHandler.h -XML/include/Poco/SAX/EntityResolver.h -XML/include/Poco/SAX/EntityResolverImpl.h -XML/include/Poco/SAX/ErrorHandler.h -XML/include/Poco/SAX/InputSource.h -XML/include/Poco/SAX/LexicalHandler.h -XML/include/Poco/SAX/Locator.h -XML/include/Poco/SAX/LocatorImpl.h -XML/include/Poco/SAX/NamespaceSupport.h -XML/include/Poco/SAX/SAXException.h -XML/include/Poco/SAX/SAXParser.h -XML/include/Poco/SAX/WhitespaceFilter.h -XML/include/Poco/SAX/XMLFilter.h -XML/include/Poco/SAX/XMLFilterImpl.h -XML/include/Poco/SAX/XMLReader.h -XML/include/Poco/XML -XML/include/Poco/XML/expat.h -XML/include/Poco/XML/expat_external.h -XML/include/Poco/XML/Name.h -XML/include/Poco/XML/NamePool.h -XML/include/Poco/XML/NamespaceStrategy.h -XML/include/Poco/XML/ParserEngine.h -XML/include/Poco/XML/XML.h -XML/include/Poco/XML/XMLException.h -XML/include/Poco/XML/XMLStream.h -XML/include/Poco/XML/XMLString.h -XML/include/Poco/XML/XMLWriter.h -XML/Makefile -XML/samples -XML/samples/CMakeLists.txt -XML/samples/data -XML/samples/data/sample.xml -XML/samples/DOMParser -XML/samples/DOMParser/CMakeLists.txt -XML/samples/DOMParser/DOMParser.progen -XML/samples/DOMParser/DOMParser_CE_vs90.vcproj -XML/samples/DOMParser/DOMParser_vs100.vcxproj -XML/samples/DOMParser/DOMParser_vs100.vcxproj.filters -XML/samples/DOMParser/DOMParser_vs110.vcxproj -XML/samples/DOMParser/DOMParser_vs110.vcxproj.filters -XML/samples/DOMParser/DOMParser_vs120.vcxproj -XML/samples/DOMParser/DOMParser_vs120.vcxproj.filters -XML/samples/DOMParser/DOMParser_vs140.vcxproj -XML/samples/DOMParser/DOMParser_vs140.vcxproj.filters -XML/samples/DOMParser/DOMParser_vs90.vcproj -XML/samples/DOMParser/DOMParser_WEC2013_vs110.vcxproj -XML/samples/DOMParser/DOMParser_WEC2013_vs110.vcxproj.filters -XML/samples/DOMParser/DOMParser_WEC2013_vs120.vcxproj -XML/samples/DOMParser/DOMParser_WEC2013_vs120.vcxproj.filters -XML/samples/DOMParser/DOMParser_x64_vs100.vcxproj -XML/samples/DOMParser/DOMParser_x64_vs100.vcxproj.filters -XML/samples/DOMParser/DOMParser_x64_vs110.vcxproj -XML/samples/DOMParser/DOMParser_x64_vs110.vcxproj.filters -XML/samples/DOMParser/DOMParser_x64_vs120.vcxproj -XML/samples/DOMParser/DOMParser_x64_vs120.vcxproj.filters -XML/samples/DOMParser/DOMParser_x64_vs140.vcxproj -XML/samples/DOMParser/DOMParser_x64_vs140.vcxproj.filters -XML/samples/DOMParser/DOMParser_x64_vs90.vcproj -XML/samples/DOMParser/Makefile -XML/samples/DOMParser/src -XML/samples/DOMParser/src/DOMParser.cpp -XML/samples/DOMWriter -XML/samples/DOMWriter/CMakeLists.txt -XML/samples/DOMWriter/DOMWriter.progen -XML/samples/DOMWriter/DOMWriter_CE_vs90.vcproj -XML/samples/DOMWriter/DOMWriter_vs100.vcxproj -XML/samples/DOMWriter/DOMWriter_vs100.vcxproj.filters -XML/samples/DOMWriter/DOMWriter_vs110.vcxproj -XML/samples/DOMWriter/DOMWriter_vs110.vcxproj.filters -XML/samples/DOMWriter/DOMWriter_vs120.vcxproj -XML/samples/DOMWriter/DOMWriter_vs120.vcxproj.filters -XML/samples/DOMWriter/DOMWriter_vs140.vcxproj -XML/samples/DOMWriter/DOMWriter_vs140.vcxproj.filters -XML/samples/DOMWriter/DOMWriter_vs90.vcproj -XML/samples/DOMWriter/DOMWriter_WEC2013_vs110.vcxproj -XML/samples/DOMWriter/DOMWriter_WEC2013_vs110.vcxproj.filters -XML/samples/DOMWriter/DOMWriter_WEC2013_vs120.vcxproj -XML/samples/DOMWriter/DOMWriter_WEC2013_vs120.vcxproj.filters -XML/samples/DOMWriter/DOMWriter_x64_vs100.vcxproj -XML/samples/DOMWriter/DOMWriter_x64_vs100.vcxproj.filters -XML/samples/DOMWriter/DOMWriter_x64_vs110.vcxproj -XML/samples/DOMWriter/DOMWriter_x64_vs110.vcxproj.filters -XML/samples/DOMWriter/DOMWriter_x64_vs120.vcxproj -XML/samples/DOMWriter/DOMWriter_x64_vs120.vcxproj.filters -XML/samples/DOMWriter/DOMWriter_x64_vs140.vcxproj -XML/samples/DOMWriter/DOMWriter_x64_vs140.vcxproj.filters -XML/samples/DOMWriter/DOMWriter_x64_vs90.vcproj -XML/samples/DOMWriter/Makefile -XML/samples/DOMWriter/src -XML/samples/DOMWriter/src/DOMWriter.cpp -XML/samples/Makefile -XML/samples/PrettyPrint -XML/samples/PrettyPrint/CMakeLists.txt -XML/samples/PrettyPrint/Makefile -XML/samples/PrettyPrint/PrettyPrint.progen -XML/samples/PrettyPrint/PrettyPrint_CE_vs90.vcproj -XML/samples/PrettyPrint/PrettyPrint_vs100.vcxproj -XML/samples/PrettyPrint/PrettyPrint_vs100.vcxproj.filters -XML/samples/PrettyPrint/PrettyPrint_vs110.vcxproj -XML/samples/PrettyPrint/PrettyPrint_vs110.vcxproj.filters -XML/samples/PrettyPrint/PrettyPrint_vs120.vcxproj -XML/samples/PrettyPrint/PrettyPrint_vs120.vcxproj.filters -XML/samples/PrettyPrint/PrettyPrint_vs140.vcxproj -XML/samples/PrettyPrint/PrettyPrint_vs140.vcxproj.filters -XML/samples/PrettyPrint/PrettyPrint_vs90.vcproj -XML/samples/PrettyPrint/PrettyPrint_WEC2013_vs110.vcxproj -XML/samples/PrettyPrint/PrettyPrint_WEC2013_vs110.vcxproj.filters -XML/samples/PrettyPrint/PrettyPrint_WEC2013_vs120.vcxproj -XML/samples/PrettyPrint/PrettyPrint_WEC2013_vs120.vcxproj.filters -XML/samples/PrettyPrint/PrettyPrint_x64_vs100.vcxproj -XML/samples/PrettyPrint/PrettyPrint_x64_vs100.vcxproj.filters -XML/samples/PrettyPrint/PrettyPrint_x64_vs110.vcxproj -XML/samples/PrettyPrint/PrettyPrint_x64_vs110.vcxproj.filters -XML/samples/PrettyPrint/PrettyPrint_x64_vs120.vcxproj -XML/samples/PrettyPrint/PrettyPrint_x64_vs120.vcxproj.filters -XML/samples/PrettyPrint/PrettyPrint_x64_vs140.vcxproj -XML/samples/PrettyPrint/PrettyPrint_x64_vs140.vcxproj.filters -XML/samples/PrettyPrint/PrettyPrint_x64_vs90.vcproj -XML/samples/PrettyPrint/src -XML/samples/PrettyPrint/src/PrettyPrint.cpp -XML/samples/samples.progen -XML/samples/samples_CE_vs90.sln -XML/samples/samples_vs100.sln -XML/samples/samples_vs110.sln -XML/samples/samples_vs120.sln -XML/samples/samples_vs140.sln -XML/samples/samples_vs90.sln -XML/samples/samples_WEC2013_vs110.sln -XML/samples/samples_WEC2013_vs120.sln -XML/samples/samples_x64_vs100.sln -XML/samples/samples_x64_vs110.sln -XML/samples/samples_x64_vs120.sln -XML/samples/samples_x64_vs140.sln -XML/samples/samples_x64_vs90.sln -XML/samples/SAXParser -XML/samples/SAXParser/CMakeLists.txt -XML/samples/SAXParser/Makefile -XML/samples/SAXParser/SAXParser.progen -XML/samples/SAXParser/SAXParser_CE_vs90.vcproj -XML/samples/SAXParser/SAXParser_vs100.vcxproj -XML/samples/SAXParser/SAXParser_vs100.vcxproj.filters -XML/samples/SAXParser/SAXParser_vs110.vcxproj -XML/samples/SAXParser/SAXParser_vs110.vcxproj.filters -XML/samples/SAXParser/SAXParser_vs120.vcxproj -XML/samples/SAXParser/SAXParser_vs120.vcxproj.filters -XML/samples/SAXParser/SAXParser_vs140.vcxproj -XML/samples/SAXParser/SAXParser_vs140.vcxproj.filters -XML/samples/SAXParser/SAXParser_vs90.vcproj -XML/samples/SAXParser/SAXParser_WEC2013_vs110.vcxproj -XML/samples/SAXParser/SAXParser_WEC2013_vs110.vcxproj.filters -XML/samples/SAXParser/SAXParser_WEC2013_vs120.vcxproj -XML/samples/SAXParser/SAXParser_WEC2013_vs120.vcxproj.filters -XML/samples/SAXParser/SAXParser_x64_vs100.vcxproj -XML/samples/SAXParser/SAXParser_x64_vs100.vcxproj.filters -XML/samples/SAXParser/SAXParser_x64_vs110.vcxproj -XML/samples/SAXParser/SAXParser_x64_vs110.vcxproj.filters -XML/samples/SAXParser/SAXParser_x64_vs120.vcxproj -XML/samples/SAXParser/SAXParser_x64_vs120.vcxproj.filters -XML/samples/SAXParser/SAXParser_x64_vs140.vcxproj -XML/samples/SAXParser/SAXParser_x64_vs140.vcxproj.filters -XML/samples/SAXParser/SAXParser_x64_vs90.vcproj -XML/samples/SAXParser/src -XML/samples/SAXParser/src/SAXParser.cpp -XML/src -XML/src/AbstractContainerNode.cpp -XML/src/AbstractNode.cpp -XML/src/ascii.h -XML/src/asciitab.h -XML/src/Attr.cpp -XML/src/Attributes.cpp -XML/src/AttributesImpl.cpp -XML/src/AttrMap.cpp -XML/src/CDATASection.cpp -XML/src/CharacterData.cpp -XML/src/ChildNodesList.cpp -XML/src/Comment.cpp -XML/src/ContentHandler.cpp -XML/src/DeclHandler.cpp -XML/src/DefaultHandler.cpp -XML/src/Document.cpp -XML/src/DocumentEvent.cpp -XML/src/DocumentFragment.cpp -XML/src/DocumentType.cpp -XML/src/DOMBuilder.cpp -XML/src/DOMException.cpp -XML/src/DOMImplementation.cpp -XML/src/DOMObject.cpp -XML/src/DOMParser.cpp -XML/src/DOMSerializer.cpp -XML/src/DOMWriter.cpp -XML/src/DTDHandler.cpp -XML/src/DTDMap.cpp -XML/src/Element.cpp -XML/src/ElementsByTagNameList.cpp -XML/src/Entity.cpp -XML/src/EntityReference.cpp -XML/src/EntityResolver.cpp -XML/src/EntityResolverImpl.cpp -XML/src/ErrorHandler.cpp -XML/src/Event.cpp -XML/src/EventDispatcher.cpp -XML/src/EventException.cpp -XML/src/EventListener.cpp -XML/src/EventTarget.cpp -XML/src/expat_config.h -XML/src/iasciitab.h -XML/src/InputSource.cpp -XML/src/internal.h -XML/src/latin1tab.h -XML/src/LexicalHandler.cpp -XML/src/Locator.cpp -XML/src/LocatorImpl.cpp -XML/src/MutationEvent.cpp -XML/src/Name.cpp -XML/src/NamedNodeMap.cpp -XML/src/NamePool.cpp -XML/src/NamespaceStrategy.cpp -XML/src/NamespaceSupport.cpp -XML/src/nametab.h -XML/src/Node.cpp -XML/src/NodeAppender.cpp -XML/src/NodeFilter.cpp -XML/src/NodeIterator.cpp -XML/src/NodeList.cpp -XML/src/Notation.cpp -XML/src/ParserEngine.cpp -XML/src/ProcessingInstruction.cpp -XML/src/SAXException.cpp -XML/src/SAXParser.cpp -XML/src/Text.cpp -XML/src/TreeWalker.cpp -XML/src/utf8tab.h -XML/src/WhitespaceFilter.cpp -XML/src/XMLException.cpp -XML/src/XMLFilter.cpp -XML/src/XMLFilterImpl.cpp -XML/src/xmlparse.cpp -XML/src/XMLReader.cpp -XML/src/xmlrole.c -XML/src/xmlrole.h -XML/src/XMLString.cpp -XML/src/xmltok.c -XML/src/xmltok.h -XML/src/xmltok_impl.c -XML/src/xmltok_impl.h -XML/src/xmltok_ns.c -XML/src/XMLWriter.cpp -XML/testsuite -XML/testsuite/CMakeLists.txt -XML/testsuite/Makefile -XML/testsuite/src -XML/testsuite/src/AttributesImplTest.cpp -XML/testsuite/src/AttributesImplTest.h -XML/testsuite/src/ChildNodesTest.cpp -XML/testsuite/src/ChildNodesTest.h -XML/testsuite/src/DocumentTest.cpp -XML/testsuite/src/DocumentTest.h -XML/testsuite/src/DocumentTypeTest.cpp -XML/testsuite/src/DocumentTypeTest.h -XML/testsuite/src/DOMTestSuite.cpp -XML/testsuite/src/DOMTestSuite.h -XML/testsuite/src/Driver.cpp -XML/testsuite/src/ElementTest.cpp -XML/testsuite/src/ElementTest.h -XML/testsuite/src/EventTest.cpp -XML/testsuite/src/EventTest.h -XML/testsuite/src/NamePoolTest.cpp -XML/testsuite/src/NamePoolTest.h -XML/testsuite/src/NamespaceSupportTest.cpp -XML/testsuite/src/NamespaceSupportTest.h -XML/testsuite/src/NameTest.cpp -XML/testsuite/src/NameTest.h -XML/testsuite/src/NodeAppenderTest.cpp -XML/testsuite/src/NodeAppenderTest.h -XML/testsuite/src/NodeIteratorTest.cpp -XML/testsuite/src/NodeIteratorTest.h -XML/testsuite/src/NodeTest.cpp -XML/testsuite/src/NodeTest.h -XML/testsuite/src/ParserWriterTest.cpp -XML/testsuite/src/ParserWriterTest.h -XML/testsuite/src/SAXParserTest.cpp -XML/testsuite/src/SAXParserTest.h -XML/testsuite/src/SAXTestSuite.cpp -XML/testsuite/src/SAXTestSuite.h -XML/testsuite/src/TextTest.cpp -XML/testsuite/src/TextTest.h -XML/testsuite/src/TreeWalkerTest.cpp -XML/testsuite/src/TreeWalkerTest.h -XML/testsuite/src/WinCEDriver.cpp -XML/testsuite/src/WinDriver.cpp -XML/testsuite/src/XMLTestSuite.cpp -XML/testsuite/src/XMLTestSuite.h -XML/testsuite/src/XMLWriterTest.cpp -XML/testsuite/src/XMLWriterTest.h -XML/testsuite/TestSuite.progen -XML/testsuite/TestSuite.vxbuild -XML/testsuite/TestSuite_CE_vs90.vcproj -XML/testsuite/TestSuite_vs100.vcxproj -XML/testsuite/TestSuite_vs100.vcxproj.filters -XML/testsuite/TestSuite_vs110.vcxproj -XML/testsuite/TestSuite_vs110.vcxproj.filters -XML/testsuite/TestSuite_vs120.vcxproj -XML/testsuite/TestSuite_vs120.vcxproj.filters -XML/testsuite/TestSuite_vs140.vcxproj -XML/testsuite/TestSuite_vs140.vcxproj.filters -XML/testsuite/TestSuite_vs90.vcproj -XML/testsuite/TestSuite_WEC2013_vs110.vcxproj -XML/testsuite/TestSuite_WEC2013_vs110.vcxproj.filters -XML/testsuite/TestSuite_WEC2013_vs120.vcxproj -XML/testsuite/TestSuite_WEC2013_vs120.vcxproj.filters -XML/testsuite/TestSuite_x64_vs100.vcxproj -XML/testsuite/TestSuite_x64_vs100.vcxproj.filters -XML/testsuite/TestSuite_x64_vs110.vcxproj -XML/testsuite/TestSuite_x64_vs110.vcxproj.filters -XML/testsuite/TestSuite_x64_vs120.vcxproj -XML/testsuite/TestSuite_x64_vs120.vcxproj.filters -XML/testsuite/TestSuite_x64_vs140.vcxproj -XML/testsuite/TestSuite_x64_vs140.vcxproj.filters -XML/testsuite/TestSuite_x64_vs90.vcproj -XML/XML.progen -XML/XML.vxbuild -XML/XML_CE_vs90.sln -XML/XML_CE_vs90.vcproj -XML/XML_vs100.sln -XML/XML_vs100.vcxproj -XML/XML_vs100.vcxproj.filters -XML/XML_vs110.sln -XML/XML_vs110.vcxproj -XML/XML_vs110.vcxproj.filters -XML/XML_vs120.sln -XML/XML_vs120.vcxproj -XML/XML_vs120.vcxproj.filters -XML/XML_vs140.sln -XML/XML_vs140.vcxproj -XML/XML_vs140.vcxproj.filters -XML/XML_vs90.sln -XML/XML_vs90.vcproj -XML/XML_WEC2013_vs110.sln -XML/XML_WEC2013_vs110.vcxproj -XML/XML_WEC2013_vs110.vcxproj.filters -XML/XML_WEC2013_vs120.sln -XML/XML_WEC2013_vs120.vcxproj -XML/XML_WEC2013_vs120.vcxproj.filters -XML/XML_x64_vs100.sln -XML/XML_x64_vs100.vcxproj -XML/XML_x64_vs100.vcxproj.filters -XML/XML_x64_vs110.sln -XML/XML_x64_vs110.vcxproj -XML/XML_x64_vs110.vcxproj.filters -XML/XML_x64_vs120.sln -XML/XML_x64_vs120.vcxproj -XML/XML_x64_vs120.vcxproj.filters -XML/XML_x64_vs140.sln -XML/XML_x64_vs140.vcxproj -XML/XML_x64_vs140.vcxproj.filters -XML/XML_x64_vs90.sln -XML/XML_x64_vs90.vcproj -Zip -Zip/cmake -Zip/cmake/PocoZipConfig.cmake -Zip/CMakeLists.txt -Zip/doc -Zip/doc/ZIP Spec.txt -Zip/doc/ZipUserGuide.page -Zip/include -Zip/include/Poco -Zip/include/Poco/Zip -Zip/include/Poco/Zip/Add.h -Zip/include/Poco/Zip/AutoDetectStream.h -Zip/include/Poco/Zip/Compress.h -Zip/include/Poco/Zip/Decompress.h -Zip/include/Poco/Zip/Delete.h -Zip/include/Poco/Zip/Keep.h -Zip/include/Poco/Zip/ParseCallback.h -Zip/include/Poco/Zip/PartialStream.h -Zip/include/Poco/Zip/Rename.h -Zip/include/Poco/Zip/Replace.h -Zip/include/Poco/Zip/SkipCallback.h -Zip/include/Poco/Zip/Zip.h -Zip/include/Poco/Zip/ZipArchive.h -Zip/include/Poco/Zip/ZipArchiveInfo.h -Zip/include/Poco/Zip/ZipCommon.h -Zip/include/Poco/Zip/ZipDataInfo.h -Zip/include/Poco/Zip/ZipException.h -Zip/include/Poco/Zip/ZipFileInfo.h -Zip/include/Poco/Zip/ZipLocalFileHeader.h -Zip/include/Poco/Zip/ZipManipulator.h -Zip/include/Poco/Zip/ZipOperation.h -Zip/include/Poco/Zip/ZipStream.h -Zip/include/Poco/Zip/ZipUtil.h -Zip/Makefile -Zip/samples -Zip/samples/CMakeLists.txt -Zip/samples/Makefile -Zip/samples/samples.progen -Zip/samples/samples_CE_vs90.sln -Zip/samples/samples_vs100.sln -Zip/samples/samples_vs110.sln -Zip/samples/samples_vs120.sln -Zip/samples/samples_vs140.sln -Zip/samples/samples_vs90.sln -Zip/samples/samples_WEC2013_vs110.sln -Zip/samples/samples_WEC2013_vs120.sln -Zip/samples/samples_x64_vs100.sln -Zip/samples/samples_x64_vs110.sln -Zip/samples/samples_x64_vs120.sln -Zip/samples/samples_x64_vs140.sln -Zip/samples/samples_x64_vs90.sln -Zip/samples/unzip -Zip/samples/unzip/CMakeLists.txt -Zip/samples/unzip/Makefile -Zip/samples/unzip/src -Zip/samples/unzip/src/unzip.cpp -Zip/samples/unzip/unzip.progen -Zip/samples/unzip/unzip_CE_vs90.vcproj -Zip/samples/unzip/unzip_vs100.vcxproj -Zip/samples/unzip/unzip_vs100.vcxproj.filters -Zip/samples/unzip/unzip_vs110.vcxproj -Zip/samples/unzip/unzip_vs110.vcxproj.filters -Zip/samples/unzip/unzip_vs120.vcxproj -Zip/samples/unzip/unzip_vs120.vcxproj.filters -Zip/samples/unzip/unzip_vs140.vcxproj -Zip/samples/unzip/unzip_vs140.vcxproj.filters -Zip/samples/unzip/unzip_vs90.vcproj -Zip/samples/unzip/unzip_WEC2013_vs110.vcxproj -Zip/samples/unzip/unzip_WEC2013_vs110.vcxproj.filters -Zip/samples/unzip/unzip_WEC2013_vs120.vcxproj -Zip/samples/unzip/unzip_WEC2013_vs120.vcxproj.filters -Zip/samples/unzip/unzip_x64_vs100.vcxproj -Zip/samples/unzip/unzip_x64_vs100.vcxproj.filters -Zip/samples/unzip/unzip_x64_vs110.vcxproj -Zip/samples/unzip/unzip_x64_vs110.vcxproj.filters -Zip/samples/unzip/unzip_x64_vs120.vcxproj -Zip/samples/unzip/unzip_x64_vs120.vcxproj.filters -Zip/samples/unzip/unzip_x64_vs140.vcxproj -Zip/samples/unzip/unzip_x64_vs140.vcxproj.filters -Zip/samples/unzip/unzip_x64_vs90.vcproj -Zip/samples/zip -Zip/samples/zip/CMakeLists.txt -Zip/samples/zip/Makefile -Zip/samples/zip/src -Zip/samples/zip/src/zip.cpp -Zip/samples/zip/zip.progen -Zip/samples/zip/zip_CE_vs90.vcproj -Zip/samples/zip/zip_vs100.vcxproj -Zip/samples/zip/zip_vs100.vcxproj.filters -Zip/samples/zip/zip_vs110.vcxproj -Zip/samples/zip/zip_vs110.vcxproj.filters -Zip/samples/zip/zip_vs120.vcxproj -Zip/samples/zip/zip_vs120.vcxproj.filters -Zip/samples/zip/zip_vs140.vcxproj -Zip/samples/zip/zip_vs140.vcxproj.filters -Zip/samples/zip/zip_vs90.vcproj -Zip/samples/zip/zip_WEC2013_vs110.vcxproj -Zip/samples/zip/zip_WEC2013_vs110.vcxproj.filters -Zip/samples/zip/zip_WEC2013_vs120.vcxproj -Zip/samples/zip/zip_WEC2013_vs120.vcxproj.filters -Zip/samples/zip/zip_x64_vs100.vcxproj -Zip/samples/zip/zip_x64_vs100.vcxproj.filters -Zip/samples/zip/zip_x64_vs110.vcxproj -Zip/samples/zip/zip_x64_vs110.vcxproj.filters -Zip/samples/zip/zip_x64_vs120.vcxproj -Zip/samples/zip/zip_x64_vs120.vcxproj.filters -Zip/samples/zip/zip_x64_vs140.vcxproj -Zip/samples/zip/zip_x64_vs140.vcxproj.filters -Zip/samples/zip/zip_x64_vs90.vcproj -Zip/src -Zip/src/Add.cpp -Zip/src/AutoDetectStream.cpp -Zip/src/Compress.cpp -Zip/src/Decompress.cpp -Zip/src/Delete.cpp -Zip/src/Keep.cpp -Zip/src/ParseCallback.cpp -Zip/src/PartialStream.cpp -Zip/src/Rename.cpp -Zip/src/Replace.cpp -Zip/src/SkipCallback.cpp -Zip/src/ZipArchive.cpp -Zip/src/ZipArchiveInfo.cpp -Zip/src/ZipCommon.cpp -Zip/src/ZipDataInfo.cpp -Zip/src/ZipException.cpp -Zip/src/ZipFileInfo.cpp -Zip/src/ZipLocalFileHeader.cpp -Zip/src/ZipManipulator.cpp -Zip/src/ZipOperation.cpp -Zip/src/ZipStream.cpp -Zip/src/ZipUtil.cpp -Zip/testsuite -Zip/testsuite/CMakeLists.txt -Zip/testsuite/data -Zip/testsuite/data/data.zip -Zip/testsuite/data/doc.zip -Zip/testsuite/data/test.zip -Zip/testsuite/Makefile -Zip/testsuite/src -Zip/testsuite/src/CompressTest.cpp -Zip/testsuite/src/CompressTest.h -Zip/testsuite/src/Driver.cpp -Zip/testsuite/src/PartialStreamTest.cpp -Zip/testsuite/src/PartialStreamTest.h -Zip/testsuite/src/WinCEDriver.cpp -Zip/testsuite/src/WinDriver.cpp -Zip/testsuite/src/ZipTest.cpp -Zip/testsuite/src/ZipTest.h -Zip/testsuite/src/ZipTestSuite.cpp -Zip/testsuite/src/ZipTestSuite.h -Zip/testsuite/TestSuite.progen -Zip/testsuite/TestSuite.vxbuild -Zip/testsuite/TestSuite_CE_vs90.vcproj -Zip/testsuite/TestSuite_vs100.vcxproj -Zip/testsuite/TestSuite_vs100.vcxproj.filters -Zip/testsuite/TestSuite_vs110.vcxproj -Zip/testsuite/TestSuite_vs110.vcxproj.filters -Zip/testsuite/TestSuite_vs120.vcxproj -Zip/testsuite/TestSuite_vs120.vcxproj.filters -Zip/testsuite/TestSuite_vs140.vcxproj -Zip/testsuite/TestSuite_vs140.vcxproj.filters -Zip/testsuite/TestSuite_vs90.vcproj -Zip/testsuite/TestSuite_WEC2013_vs110.vcxproj -Zip/testsuite/TestSuite_WEC2013_vs110.vcxproj.filters -Zip/testsuite/TestSuite_WEC2013_vs120.vcxproj -Zip/testsuite/TestSuite_WEC2013_vs120.vcxproj.filters -Zip/testsuite/TestSuite_x64_vs100.vcxproj -Zip/testsuite/TestSuite_x64_vs100.vcxproj.filters -Zip/testsuite/TestSuite_x64_vs110.vcxproj -Zip/testsuite/TestSuite_x64_vs110.vcxproj.filters -Zip/testsuite/TestSuite_x64_vs120.vcxproj -Zip/testsuite/TestSuite_x64_vs120.vcxproj.filters -Zip/testsuite/TestSuite_x64_vs140.vcxproj -Zip/testsuite/TestSuite_x64_vs140.vcxproj.filters -Zip/testsuite/TestSuite_x64_vs90.vcproj -Zip/Zip.progen -Zip/Zip.vxbuild -Zip/Zip_CE_vs90.sln -Zip/Zip_CE_vs90.vcproj -Zip/Zip_vs100.sln -Zip/Zip_vs100.vcxproj -Zip/Zip_vs100.vcxproj.filters -Zip/Zip_vs110.sln -Zip/Zip_vs110.vcxproj -Zip/Zip_vs110.vcxproj.filters -Zip/Zip_vs120.sln -Zip/Zip_vs120.vcxproj -Zip/Zip_vs120.vcxproj.filters -Zip/Zip_vs140.sln -Zip/Zip_vs140.vcxproj -Zip/Zip_vs140.vcxproj.filters -Zip/Zip_vs90.sln -Zip/Zip_vs90.vcproj -Zip/Zip_WEC2013_vs110.sln -Zip/Zip_WEC2013_vs110.vcxproj -Zip/Zip_WEC2013_vs110.vcxproj.filters -Zip/Zip_WEC2013_vs120.sln -Zip/Zip_WEC2013_vs120.vcxproj -Zip/Zip_WEC2013_vs120.vcxproj.filters -Zip/Zip_x64_vs100.sln -Zip/Zip_x64_vs100.vcxproj -Zip/Zip_x64_vs100.vcxproj.filters -Zip/Zip_x64_vs110.sln -Zip/Zip_x64_vs110.vcxproj -Zip/Zip_x64_vs110.vcxproj.filters -Zip/Zip_x64_vs120.sln -Zip/Zip_x64_vs120.vcxproj -Zip/Zip_x64_vs120.vcxproj.filters -Zip/Zip_x64_vs140.sln -Zip/Zip_x64_vs140.vcxproj -Zip/Zip_x64_vs140.vcxproj.filters -Zip/Zip_x64_vs90.sln -Zip/Zip_x64_vs90.vcproj diff --git a/contrib/libpoco/MongoDB/CMakeLists.txt b/contrib/libpoco/MongoDB/CMakeLists.txt deleted file mode 100644 index 884a3151d63..00000000000 --- a/contrib/libpoco/MongoDB/CMakeLists.txt +++ /dev/null @@ -1,28 +0,0 @@ -set(LIBNAME "PocoMongoDB") -set(POCO_LIBNAME "${LIBNAME}") - -# Sources -file(GLOB SRCS_G "src/*.cpp") -POCO_SOURCES_AUTO( SRCS ${SRCS_G}) - -# Headers -file(GLOB_RECURSE HDRS_G "include/*.h" ) -POCO_HEADERS_AUTO( SRCS ${HDRS_G}) - -include_directories (BEFORE include) - -add_library( "${LIBNAME}" ${LIB_MODE} ${SRCS} ) -set_target_properties( "${LIBNAME}" - PROPERTIES - VERSION ${SHARED_LIBRARY_VERSION} SOVERSION ${SHARED_LIBRARY_VERSION} - OUTPUT_NAME ${POCO_LIBNAME} - DEFINE_SYMBOL MongoDB_EXPORTS - ) - -target_link_libraries( "${LIBNAME}" PocoNet PocoFoundation) - -if (POCO_ENABLE_TESTS) - add_subdirectory(samples) - add_subdirectory(testsuite) -endif () - diff --git a/contrib/libpoco/MongoDB/cmake/PocoMongoDBConfig.cmake b/contrib/libpoco/MongoDB/cmake/PocoMongoDBConfig.cmake deleted file mode 100644 index 2988635dba7..00000000000 --- a/contrib/libpoco/MongoDB/cmake/PocoMongoDBConfig.cmake +++ /dev/null @@ -1,4 +0,0 @@ -include(CMakeFindDependencyMacro) -find_dependency(PocoFoundation) -find_dependency(PocoNet) -include("${CMAKE_CURRENT_LIST_DIR}/PocoMongoDBTargets.cmake") diff --git a/contrib/libpoco/MongoDB/include/Poco/MongoDB/Array.h b/contrib/libpoco/MongoDB/include/Poco/MongoDB/Array.h deleted file mode 100644 index 3f2dba44228..00000000000 --- a/contrib/libpoco/MongoDB/include/Poco/MongoDB/Array.h +++ /dev/null @@ -1,106 +0,0 @@ -// -// Array.h -// -// $Id$ -// -// Library: MongoDB -// Package: MongoDB -// Module: Array -// -// Definition of the Array class. -// -// Copyright (c) 2012, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - -#ifndef MongoDB_Array_INCLUDED -#define MongoDB_Array_INCLUDED - -#include "Poco/NumberFormatter.h" - -#include "Poco/MongoDB/MongoDB.h" -#include "Poco/MongoDB/Document.h" - -namespace Poco { -namespace MongoDB { - -class MongoDB_API Array : public Document - /// Implements the BSON Array -{ -public: - typedef SharedPtr Ptr; - - Array(); - /// Constructor - - virtual ~Array(); - /// Destructor - - template - T get(int pos) const - /// Returns the element on the given index and tries to convert - /// it to the template type. When the element is not found, a - /// NotFoundException will be thrown. When the element can't be - /// converted a BadCastException will be thrown. - { - return Document::get(Poco::NumberFormatter::format(pos)); - } - - template - T get(int pos, const T& def) const - /// Returns the element on the given index and tries to convert - /// it to the template type. When the element is not found, or - /// has the wrong type, the def argument will be returned. - { - return Document::get(Poco::NumberFormatter::format(pos), def); - } - - Element::Ptr get(int pos) const; - /// Returns the element on the given index. - /// An empty element will be returned when the element is not found. - - template - bool isType(int pos) - /// Returns true when the type of the element equals the TypeId of ElementTrait - { - return Document::isType(Poco::NumberFormatter::format(pos)); - } - - std::string toString(int indent = 0) const; -}; - -// BSON Embedded Array -// spec: document -template<> -struct ElementTraits -{ - enum { TypeId = 0x04 }; - - static std::string toString(const Array::Ptr& value, int indent = 0) - { - //TODO: - return value.isNull() ? "null" : value->toString(indent); - } -}; - - -template<> -inline void BSONReader::read(Array::Ptr& to) -{ - to->read(_reader); -} - - -template<> -inline void BSONWriter::write(Array::Ptr& from) -{ - from->write(_writer); -} - - -} } // namespace Poco::MongoDB - - -#endif //MongoDB_Array_INCLUDED diff --git a/contrib/libpoco/MongoDB/include/Poco/MongoDB/BSONReader.h b/contrib/libpoco/MongoDB/include/Poco/MongoDB/BSONReader.h deleted file mode 100644 index ce915f3a8e8..00000000000 --- a/contrib/libpoco/MongoDB/include/Poco/MongoDB/BSONReader.h +++ /dev/null @@ -1,83 +0,0 @@ -// -// BSONReader.h -// -// $Id$ -// -// Library: MongoDB -// Package: MongoDB -// Module: BSONReader -// -// Definition of the BSONReader class. -// -// Copyright (c) 2012, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef MongoDB_BSONReader_INCLUDED -#define MongoDB_BSONReader_INCLUDED - - -#include "Poco/MongoDB/MongoDB.h" -#include "Poco/BinaryReader.h" - - -namespace Poco { -namespace MongoDB { - - -class MongoDB_API BSONReader - /// Class for reading BSON from a Poco::BinaryReader -{ -public: - BSONReader(const Poco::BinaryReader& reader) : _reader(reader) - /// Constructor - { - } - - virtual ~BSONReader() - /// Destructor - { - } - - template - void read(T& t) - /// Reads the value from the reader. The default implementation uses the >> operator to - /// the given argument. Special types can write their own version. - { - _reader >> t; - } - - std::string readCString(); - /// Reads a cstring from the reader. - /// A cstring is a string terminated with a 0x00. - -private: - - Poco::BinaryReader _reader; -}; - - -inline std::string BSONReader::readCString() -{ - std::string val; - while(_reader.good()) - { - char c; - _reader >> c; - if ( _reader.good() ) - { - if (c == 0x00) return val; - else val += c; - } - } - return val; -} - - -} } // namespace Poco::MongoDB - - -#endif // MongoDB_BSONReader_INCLUDED diff --git a/contrib/libpoco/MongoDB/include/Poco/MongoDB/BSONWriter.h b/contrib/libpoco/MongoDB/include/Poco/MongoDB/BSONWriter.h deleted file mode 100644 index e68be4606ca..00000000000 --- a/contrib/libpoco/MongoDB/include/Poco/MongoDB/BSONWriter.h +++ /dev/null @@ -1,72 +0,0 @@ -// -// BSONWriter.h -// -// $Id$ -// -// Library: MongoDB -// Package: MongoDB -// Module: BSONWriter -// -// Definition of the BSONWriter class. -// -// Copyright (c) 2012, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef MongoDB_BSONWriter_INCLUDED -#define MongoDB_BSONWriter_INCLUDED - - -#include "Poco/MongoDB/MongoDB.h" -#include "Poco/BinaryWriter.h" - - -namespace Poco { -namespace MongoDB { - - -class MongoDB_API BSONWriter - /// Class for writing BSON to a Poco::BinaryWriter. -{ -public: - BSONWriter(const Poco::BinaryWriter& writer) : _writer(writer) - /// Constructor - { - } - - virtual ~BSONWriter() - /// Destructor - { - } - - template - void write(T& t) - /// Writes the value to the writer. The default implementation uses - /// the << operator. Special types can write their own version. - { - _writer << t; - } - - void writeCString(const std::string& value); - /// Writes a cstring to the writer. A cstring is a string - /// terminated with 0x00 - -private: - Poco::BinaryWriter _writer; -}; - - -inline void BSONWriter::writeCString(const std::string& value) -{ - _writer.writeRaw(value); - _writer << static_cast(0x00); -} - - -} } // namespace Poco::MongoDB - - -#endif // MongoDB_BSONWriter_INCLUDED diff --git a/contrib/libpoco/MongoDB/include/Poco/MongoDB/Binary.h b/contrib/libpoco/MongoDB/include/Poco/MongoDB/Binary.h deleted file mode 100644 index ea95bfbd0f4..00000000000 --- a/contrib/libpoco/MongoDB/include/Poco/MongoDB/Binary.h +++ /dev/null @@ -1,129 +0,0 @@ -// -// Binary.h -// -// $Id$ -// -// Library: MongoDB -// Package: MongoDB -// Module: Binary -// -// Definition of the Binary class. -// -// Copyright (c) 2012, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef MongoDB_Binary_INCLUDED -#define MongoDB_Binary_INCLUDED - - -#include "Poco/MongoDB/MongoDB.h" -#include "Poco/MongoDB/Element.h" -#include "Poco/Base64Encoder.h" -#include "Poco/Buffer.h" -#include "Poco/StreamCopier.h" -#include "Poco/MemoryStream.h" -#include - - -namespace Poco { -namespace MongoDB { - - -class MongoDB_API Binary - /// Implements BSON Binary. It's a wrapper around a Poco::Buffer. -{ -public: - typedef SharedPtr Ptr; - - Binary(); - /// Constructor - - Binary(Poco::Int32 size, unsigned char subtype); - /// Constructor - - virtual ~Binary(); - /// Destructor - - Buffer& buffer(); - /// Returns a reference to the buffer - - unsigned char subtype() const; - /// Returns the subtype - - void subtype(unsigned char type); - /// Sets the subtype - - std::string toString(int indent = 0) const; - /// Returns the binary encoded in Base64 - -private: - Buffer _buffer; - unsigned char _subtype; -}; - - -inline unsigned char Binary::subtype() const -{ - return _subtype; -} - - -inline void Binary::subtype(unsigned char type) -{ - _subtype = type; -} - - -inline Buffer& Binary::buffer() -{ - return _buffer; -} - - -// BSON Embedded Document -// spec: binary -template<> -struct ElementTraits -{ - enum { TypeId = 0x05 }; - - static std::string toString(const Binary::Ptr& value, int indent = 0) - { - return value.isNull() ? "" : value->toString(); - } -}; - - -template<> -inline void BSONReader::read(Binary::Ptr& to) -{ - Poco::Int32 size; - _reader >> size; - - to->buffer().resize(size); - - unsigned char subtype; - _reader >> subtype; - to->subtype(subtype); - - _reader.readRaw((char*) to->buffer().begin(), size); -} - - -template<> -inline void BSONWriter::write(Binary::Ptr& from) -{ - _writer << (Poco::Int32) from->buffer().size(); - _writer << from->subtype(); - _writer.writeRaw((char*) from->buffer().begin(), from->buffer().size()); -} - - -} } // namespace Poco::MongoDB - - -#endif // MongoDB_Binary_INCLUDED diff --git a/contrib/libpoco/MongoDB/include/Poco/MongoDB/Connection.h b/contrib/libpoco/MongoDB/include/Poco/MongoDB/Connection.h deleted file mode 100644 index 957235e54e2..00000000000 --- a/contrib/libpoco/MongoDB/include/Poco/MongoDB/Connection.h +++ /dev/null @@ -1,99 +0,0 @@ -// -// Connection.h -// -// $Id$ -// -// Library: MongoDB -// Package: MongoDB -// Module: Connection -// -// Definition of the Connection class. -// -// Copyright (c) 2012, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef MongoDB_Connection_INCLUDED -#define MongoDB_Connection_INCLUDED - - -#include "Poco/Net/SocketAddress.h" -#include "Poco/Net/StreamSocket.h" -#include "Poco/Mutex.h" -#include "Poco/MongoDB/RequestMessage.h" -#include "Poco/MongoDB/ResponseMessage.h" - - -namespace Poco { -namespace MongoDB { - - -class MongoDB_API Connection - /// Represents a connection to a MongoDB server -{ -public: - typedef Poco::SharedPtr Ptr; - - Connection(); - /// Default constructor. Use this when you want to - /// connect later on. - - Connection(const std::string& hostAndPort); - /// Constructor which connects to the given MongoDB host/port. - /// The host and port must be separated with a colon. - - Connection(const std::string& host, int port); - /// Constructor which connects to the given MongoDB host/port. - - Connection(const Net::SocketAddress& addrs); - /// Constructor which connects to the given MongoDB host/port. - - virtual ~Connection(); - /// Destructor - - Net::SocketAddress address() const; - /// Returns the address of the MongoDB connection - - void connect(const std::string& hostAndPort); - /// Connects to the given MongoDB server. The host and port must be separated - /// with a colon. - - void connect(const std::string& host, int port); - /// Connects to the given MongoDB server. - - void connect(const Net::SocketAddress& addrs); - /// Connects to the given MongoDB server. - - void disconnect(); - /// Disconnects from the MongoDB server - - void sendRequest(RequestMessage& request); - /// Sends a request to the MongoDB server - /// Only use this when the request hasn't a response. - - void sendRequest(RequestMessage& request, ResponseMessage& response); - /// Sends a request to the MongoDB server and receives the response. - /// Use this when a response is expected: only a query or getmore - /// request will return a response. - -private: - Net::SocketAddress _address; - Net::StreamSocket _socket; - void connect(); - /// Connects to the MongoDB server -}; - - -inline Net::SocketAddress Connection::address() const -{ - return _address; -} - - -} } // namespace Poco::MongoDB - - -#endif //MongoDB_Connection_INCLUDED diff --git a/contrib/libpoco/MongoDB/include/Poco/MongoDB/Cursor.h b/contrib/libpoco/MongoDB/include/Poco/MongoDB/Cursor.h deleted file mode 100644 index 9f344f65aea..00000000000 --- a/contrib/libpoco/MongoDB/include/Poco/MongoDB/Cursor.h +++ /dev/null @@ -1,72 +0,0 @@ -// -// Cursor.h -// -// $Id$ -// -// Library: MongoDB -// Package: MongoDB -// Module: Cursor -// -// Definition of the Cursor class. -// -// Copyright (c) 2012, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef MongoDB_Cursor_INCLUDED -#define MongoDB_Cursor_INCLUDED - - -#include "Poco/MongoDB/MongoDB.h" -#include "Poco/MongoDB/Connection.h" -#include "Poco/MongoDB/QueryRequest.h" -#include "Poco/MongoDB/ResponseMessage.h" - - -namespace Poco { -namespace MongoDB { - - -class MongoDB_API Cursor : public Document - /// Cursor is an helper class for querying multiple documents -{ -public: - Cursor(const std::string& dbname, const std::string& collectionName, QueryRequest::Flags flags = QueryRequest::QUERY_NONE); - /// Constructor - - Cursor(const std::string& fullCollectionName, QueryRequest::Flags flags = QueryRequest::QUERY_NONE); - /// Constructor - - virtual ~Cursor(); - /// Destructor - - ResponseMessage& next(Connection& connection); - /// Try to get the next documents. As long as ResponseMessage has a - /// cursor id next can be called to retrieve the next bunch of documents. - /// kill must be called when not all documents are needed. - - QueryRequest& query(); - /// Returns the associated query - - void kill(Connection& connection); - /// Kills the cursor and reset it so that it can be reused. - -private: - QueryRequest _query; - ResponseMessage _response; -}; - - -inline QueryRequest& Cursor::query() -{ - return _query; -} - - -} } // namespace Poco::MongoDB - - -#endif //MongoDB_Cursor_INCLUDED diff --git a/contrib/libpoco/MongoDB/include/Poco/MongoDB/Database.h b/contrib/libpoco/MongoDB/include/Poco/MongoDB/Database.h deleted file mode 100644 index a6ccff8ebb5..00000000000 --- a/contrib/libpoco/MongoDB/include/Poco/MongoDB/Database.h +++ /dev/null @@ -1,134 +0,0 @@ -// -// Database.h -// -// $Id$ -// -// Library: MongoDB -// Package: MongoDB -// Module: Database -// -// Definition of the Database class. -// -// Copyright (c) 2012, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef MongoDB_Database_INCLUDED -#define MongoDB_Database_INCLUDED - - -#include "Poco/MongoDB/MongoDB.h" -#include "Poco/MongoDB/Connection.h" -#include "Poco/MongoDB/Document.h" -#include "Poco/MongoDB/QueryRequest.h" -#include "Poco/MongoDB/InsertRequest.h" -#include "Poco/MongoDB/UpdateRequest.h" -#include "Poco/MongoDB/DeleteRequest.h" - - -namespace Poco { -namespace MongoDB { - - -class MongoDB_API Database - /// Database is a helper class for creating requests. MongoDB works with - /// collection names and uses the part before the first dot as the name of - /// the database. -{ -public: - Database(const std::string& db); - /// Constructor - - virtual ~Database(); - /// Destructor - - double count(Connection& connection, const std::string& collectionName) const; - /// Sends a count request for the given collection to MongoDB. When - /// the command fails, -1 is returned. - - Poco::SharedPtr createCommand() const; - /// Creates a QueryRequest for a command. - - Poco::SharedPtr createCountRequest(const std::string& collectionName) const; - /// Creates a QueryRequest to count the given collection. The collectionname must not contain - /// the database name! - - Poco::SharedPtr createDeleteRequest(const std::string& collectionName) const; - /// Creates a DeleteRequest to delete documents in the given collection. - /// The collectionname must not contain the database name! - - Poco::SharedPtr createInsertRequest(const std::string& collectionName) const; - /// Creates an InsertRequest to insert new documents in the given collection. - /// The collectionname must not contain the database name! - - Poco::SharedPtr createQueryRequest(const std::string& collectionName) const; - /// Creates a QueryRequest. The collectionname must not contain the database name! - - Poco::SharedPtr createUpdateRequest(const std::string& collectionName) const; - /// Creates an UpdateRequest. The collectionname must not contain the database name! - - Poco::MongoDB::Document::Ptr ensureIndex(Connection& connection, - const std::string& collection, - const std::string& indexName, - Poco::MongoDB::Document::Ptr keys, - bool unique = false, - bool background = false, - int version = 0, - int ttl = 0); - /// Creates an index. The document returned is the result of a getLastError call. - /// For more info look at the ensureIndex information on the MongoDB website. - - Document::Ptr getLastErrorDoc(Connection& connection) const; - /// Sends the getLastError command to the database and returns the document - - std::string getLastError(Connection& connection) const; - /// Sends the getLastError command to the database and returns the err element - /// from the error document. When err is null, an empty string is returned. - -private: - std::string _dbname; -}; - - -inline Poco::SharedPtr Database::createCommand() const -{ - Poco::SharedPtr cmd = createQueryRequest("$cmd"); - cmd->setNumberToReturn(1); - return cmd; -} - - -inline Poco::SharedPtr -Database::createDeleteRequest(const std::string& collectionName) const -{ - return new Poco::MongoDB::DeleteRequest(_dbname + '.' + collectionName); -} - - -inline Poco::SharedPtr -Database::createInsertRequest(const std::string& collectionName) const -{ - return new Poco::MongoDB::InsertRequest(_dbname + '.' + collectionName); -} - - -inline Poco::SharedPtr -Database::createQueryRequest(const std::string& collectionName) const -{ - return new Poco::MongoDB::QueryRequest(_dbname + '.' + collectionName); -} - - -inline Poco::SharedPtr -Database::createUpdateRequest(const std::string& collectionName) const -{ - return new Poco::MongoDB::UpdateRequest(_dbname + '.' + collectionName); -} - -} } // namespace Poco::MongoDB - - -#endif // MongoDB_Database_INCLUDED diff --git a/contrib/libpoco/MongoDB/include/Poco/MongoDB/DeleteRequest.h b/contrib/libpoco/MongoDB/include/Poco/MongoDB/DeleteRequest.h deleted file mode 100644 index 358b30521fe..00000000000 --- a/contrib/libpoco/MongoDB/include/Poco/MongoDB/DeleteRequest.h +++ /dev/null @@ -1,106 +0,0 @@ -// -// DeleteRequest.h -// -// $Id$ -// -// Library: MongoDB -// Package: MongoDB -// Module: DeleteRequest -// -// Definition of the DeleteRequest class. -// -// Copyright (c) 2012, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef MongoDB_DeleteRequest_INCLUDED -#define MongoDB_DeleteRequest_INCLUDED - - -#include "Poco/MongoDB/MongoDB.h" -#include "Poco/MongoDB/RequestMessage.h" -#include "Poco/MongoDB/Document.h" - - -namespace Poco { -namespace MongoDB { - - -class MongoDB_API DeleteRequest : public RequestMessage - /// Class for creating an OP_DELETE client request. This request - /// is used to delete one ore more documents from a database. - /// - /// Specific flags for this request - /// - DELETE_NONE - /// No flags - /// - DELETE_SINGLE_REMOVE - /// Delete only the first document -{ -public: - typedef enum - { - DELETE_NONE = 0, - DELETE_SINGLE_REMOVE = 1 - } Flags; - - DeleteRequest(const std::string& collectionName, Flags flags = DELETE_NONE); - /// Constructor. The full collection name is the concatenation of the database - /// name with the collection name, using a "." for the concatenation. For example, - /// for the database "foo" and the collection "bar", the full collection name is - /// "foo.bar". - - DeleteRequest(const std::string& collectionName, bool justOne); - /// Constructor. The full collection name is the concatenation of the database - /// name with the collection name, using a "." for the concatenation. For example, - /// for the database "foo" and the collection "bar", the full collection name is - /// "foo.bar". When justOne is true, only the first matching document will - /// be removed (the same as using flag DELETE_SINGLE_REMOVE). - - virtual ~DeleteRequest(); - /// Destructor - - Flags flags() const; - /// Returns flags - - void flags(Flags flag); - /// Sets flags - - Document& selector(); - /// Returns the selector document - -protected: - void buildRequest(BinaryWriter& writer); - /// Writes the OP_DELETE request to the writer - -private: - Flags _flags; - std::string _fullCollectionName; - Document _selector; -}; - - -inline DeleteRequest::Flags DeleteRequest::flags() const -{ - return _flags; -} - - -inline void DeleteRequest::flags(DeleteRequest::Flags flags) -{ - _flags = flags; -} - - -inline Document& DeleteRequest::selector() -{ - return _selector; -} - - -} } // namespace Poco::MongoDB - - -#endif //MongoDB_DeleteRequest_INCLUDED diff --git a/contrib/libpoco/MongoDB/include/Poco/MongoDB/Document.h b/contrib/libpoco/MongoDB/include/Poco/MongoDB/Document.h deleted file mode 100644 index 589213d8270..00000000000 --- a/contrib/libpoco/MongoDB/include/Poco/MongoDB/Document.h +++ /dev/null @@ -1,264 +0,0 @@ -// -// Document.h -// -// $Id$ -// -// Library: MongoDB -// Package: MongoDB -// Module: Document -// -// Definition of the Document class. -// -// Copyright (c) 2012, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef MongoDB_Document_INCLUDED -#define MongoDB_Document_INCLUDED - - -#include "Poco/BinaryReader.h" -#include "Poco/BinaryWriter.h" -#include "Poco/MongoDB/MongoDB.h" -#include "Poco/MongoDB/Element.h" -#include - - -namespace Poco { -namespace MongoDB { - - -class ElementFindByName -{ -public: - ElementFindByName(const std::string& name) : _name(name) - { - } - - bool operator()(const Element::Ptr& element) - { - return !element.isNull() && element->name() == _name; - } - -private: - std::string _name; -}; - - -class MongoDB_API Document - /// Represents a BSON document -{ -public: - typedef SharedPtr Ptr; - typedef std::vector Vector; - - Document(); - /// Constructor - - virtual ~Document(); - /// Destructor - - Document& addElement(Element::Ptr element); - /// Add an element to the document. - /// The active document is returned to allow chaining of the add methods. - - template - Document& add(const std::string& name, T value) - /// Creates an element with the given name and value and - // adds it to the document. - /// The active document is returned to allow chaining of the add methods. - { - return addElement(new ConcreteElement(name, value)); - } - - Document& add(const std::string& name, const char* value) - /// Creates an element with the given name and value and - // adds it to the document. - /// The active document is returned to allow chaining of the add methods. - { - return addElement(new ConcreteElement(name, std::string(value))); - } - - Document& addNewDocument(const std::string& name); - /// Create a new document and add it to this document. - /// Unlike the other add methods, this method returns - /// a reference to the new document. - - void clear(); - /// Removes all elements from the document. - - void elementNames(std::vector& keys) const; - /// Puts all element names into std::vector. - - bool empty() const; - /// Returns true when the document doesn't contain any documents. - - bool exists(const std::string& name); - /// Returns true when the document has an element with the given name - - template - T get(const std::string& name) const - /// Returns the element with the given name and tries to convert - /// it to the template type. When the element is not found, a - /// NotFoundException will be thrown. When the element can't be - /// converted a BadCastException will be thrown. - { - Element::Ptr element = get(name); - if ( element.isNull() ) - { - throw NotFoundException(name); - } - else - { - if ( ElementTraits::TypeId == element->type() ) - { - ConcreteElement* concrete = dynamic_cast* >(element.get()); - if ( concrete != NULL ) - { - return concrete->value(); - } - } - throw BadCastException("Invalid type mismatch!"); - } - } - - template - T get(const std::string& name, const T& def) const - /// Returns the element with the given name and tries to convert - /// it to the template type. When the element is not found, or - /// has the wrong type, the def argument will be returned. - { - Element::Ptr element = get(name); - if ( element.isNull() ) - { - return def; - } - - if ( ElementTraits::TypeId == element->type() ) - { - ConcreteElement* concrete = dynamic_cast* >(element.get()); - if ( concrete != NULL ) - { - return concrete->value(); - } - } - - return def; - } - - Element::Ptr get(const std::string& name) const; - /// Returns the element with the given name. - /// An empty element will be returned when the element is not found. - - template - bool isType(const std::string& name) - /// Returns true when the type of the element equals the TypeId of ElementTrait - { - Element::Ptr element = get(name); - if ( element.isNull() ) - { - return false; - } - - return ElementTraits::TypeId == element->type(); - } - - void read(BinaryReader& reader); - /// Reads a document from the reader - - size_t size() const; - /// Returns the number of elements in the document. - - virtual std::string toString(int indent = 0) const; - /// Returns a String representation of the document. - - void write(BinaryWriter& writer); - /// Writes a document to the reader - -protected: - ElementSet _elements; -}; - - -inline Document& Document::addElement(Element::Ptr element) -{ - _elements.insert(element); - return *this; -} - - -inline Document& Document::addNewDocument(const std::string& name) -{ - Document::Ptr newDoc = new Document(); - add(name, newDoc); - return *newDoc; -} - - -inline void Document::clear() -{ - _elements.clear(); -} - - -inline bool Document::empty() const -{ - return _elements.empty(); -} - - -inline void Document::elementNames(std::vector& keys) const -{ - for(ElementSet::const_iterator it = _elements.begin(); it != _elements.end(); ++it) - { - keys.push_back((*it)->name()); - } -} - - -inline bool Document::exists(const std::string& name) -{ - return std::find_if(_elements.begin(), _elements.end(), ElementFindByName(name)) != _elements.end(); -} - - -inline size_t Document::size() const -{ - return _elements.size(); -} - - -// BSON Embedded Document -// spec: document -template<> -struct ElementTraits -{ - enum { TypeId = 0x03 }; - - static std::string toString(const Document::Ptr& value, int indent = 0) - { - return value.isNull() ? "null" : value->toString(indent); - } -}; - - -template<> -inline void BSONReader::read(Document::Ptr& to) -{ - to->read(_reader); -} - - -template<> -inline void BSONWriter::write(Document::Ptr& from) -{ - from->write(_writer); -} - -} } // namespace Poco::MongoDB - - -#endif // MongoDB_Document_INCLUDED diff --git a/contrib/libpoco/MongoDB/include/Poco/MongoDB/Element.h b/contrib/libpoco/MongoDB/include/Poco/MongoDB/Element.h deleted file mode 100644 index 258e0e8b494..00000000000 --- a/contrib/libpoco/MongoDB/include/Poco/MongoDB/Element.h +++ /dev/null @@ -1,357 +0,0 @@ -// -// Element.h -// -// $Id$ -// -// Library: MongoDB -// Package: MongoDB -// Module: Element -// -// Definition of the Element class. -// -// Copyright (c) 2012, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef MongoDB_Element_INCLUDED -#define MongoDB_Element_INCLUDED - - -#include "Poco/BinaryReader.h" -#include "Poco/BinaryWriter.h" -#include "Poco/SharedPtr.h" -#include "Poco/Timestamp.h" -#include "Poco/Nullable.h" -#include "Poco/NumberFormatter.h" -#include "Poco/DateTimeFormatter.h" -#include "Poco/MongoDB/MongoDB.h" -#include "Poco/MongoDB/BSONReader.h" -#include "Poco/MongoDB/BSONWriter.h" -#include -#include -#include -#include - - -namespace Poco { -namespace MongoDB { - - -class MongoDB_API Element - /// Represents an element of a Document or an Array -{ -public: - typedef Poco::SharedPtr Ptr; - - Element(const std::string& name); - /// Constructor - - virtual ~Element(); - /// Destructor - - std::string name() const; - /// Returns the name of the element - - virtual std::string toString(int indent = 0) const = 0; - /// Returns a string representation of the element. - - virtual int type() const = 0; - /// Returns the MongoDB type of the element. - -private: - virtual void read(BinaryReader& reader) = 0; - virtual void write(BinaryWriter& writer) = 0; - - friend class Document; - std::string _name; -}; - - -inline std::string Element::name() const -{ - return _name; -} - - -class ElementComparator -{ -public: - bool operator()(const Element::Ptr& s1, const Element::Ptr& s2) const - { - return s1->name() < s2->name(); - } -}; - - -typedef std::set ElementSet; - - -template -struct ElementTraits -{ -}; - - -// BSON Floating point -// spec: double -template<> -struct ElementTraits -{ - enum { TypeId = 0x01 }; - - static std::string toString(const double& value, int indent = 0) - { - return Poco::NumberFormatter::format(value); - } -}; - - -// BSON UTF-8 string -// spec: int32 (byte*) "\x00" -// int32 is the number bytes in byte* + 1 (for trailing "\x00") -template<> -struct ElementTraits -{ - enum { TypeId = 0x02 }; - - static std::string toString(const std::string& value, int indent = 0) - { - std::ostringstream oss; - - oss << '"'; - - for(std::string::const_iterator it = value.begin(); it != value.end(); ++it) - { - switch (*it) - { - case '"': - oss << "\\\""; - break; - case '\\': - oss << "\\\\"; - break; - case '\b': - oss << "\\b"; - break; - case '\f': - oss << "\\f"; - break; - case '\n': - oss << "\\n"; - break; - case '\r': - oss << "\\r"; - break; - case '\t': - oss << "\\t"; - break; - default: - { - if ( *it > 0 && *it <= 0x1F ) - { - oss << "\\u" << std::hex << std::uppercase << std::setfill('0') << std::setw(4) << static_cast(*it); - } - else - { - oss << *it; - } - break; - } - } - } - oss << '"'; - return oss.str(); - } -}; - - -template<> -inline void BSONReader::read(std::string& to) -{ - Poco::Int32 size; - _reader >> size; - _reader.readRaw(size, to); - to.erase(to.end() - 1); // remove terminating 0 -} - - -template<> -inline void BSONWriter::write(std::string& from) -{ - _writer << static_cast(from.length() + 1); - writeCString(from); -} - - -// BSON bool -// spec: "\x00" "\x01" -template<> -struct ElementTraits -{ - enum { TypeId = 0x08 }; - - static std::string toString(const bool& value, int indent = 0) - { - return value ? "true" : "false"; - } -}; - - -template<> -inline void BSONReader::read(bool& to) -{ - unsigned char b; - _reader >> b; - to = b != 0; -} - - -template<> -inline void BSONWriter::write(bool& from) -{ - unsigned char b = from ? 0x01 : 0x00; - _writer << b; -} - - -// BSON 32-bit integer -// spec: int32 -template<> -struct ElementTraits -{ - enum { TypeId = 0x10 }; - - - static std::string toString(const Int32& value, int indent = 0) - { - return Poco::NumberFormatter::format(value); - } -}; - - -// BSON UTC datetime -// spec: int64 -template<> -struct ElementTraits -{ - enum { TypeId = 0x09 }; - - static std::string toString(const Timestamp& value, int indent = 0) - { - return DateTimeFormatter::format(value, "%Y-%m-%dT%H:%M:%s%z"); - } -}; - - -template<> -inline void BSONReader::read(Timestamp& to) -{ - Poco::Int64 value; - _reader >> value; - to = Timestamp::fromEpochTime(static_cast(value / 1000)); - to += (value % 1000 * 1000); -} - - -template<> -inline void BSONWriter::write(Timestamp& from) -{ - _writer << (from.epochMicroseconds() / 1000); -} - - -typedef Nullable NullValue; - - -// BSON Null Value -// spec: -template<> -struct ElementTraits -{ - enum { TypeId = 0x0A }; - - static std::string toString(const NullValue& value, int indent = 0) - { - return "null"; - } -}; - - -template<> -inline void BSONReader::read(NullValue& to) -{ -} - - -template<> -inline void BSONWriter::write(NullValue& from) -{ -} - - -// BSON 64-bit integer -// spec: int64 -template<> -struct ElementTraits -{ - enum { TypeId = 0x12 }; - - static std::string toString(const Int64& value, int indent = 0) - { - return NumberFormatter::format(value); - } -}; - - -template -class ConcreteElement : public Element -{ -public: - ConcreteElement(const std::string& name, const T& init) : Element(name), _value(init) - { - } - - virtual ~ConcreteElement() - { - } - - - T value() const - { - return _value; - } - - - std::string toString(int indent = 0) const - { - return ElementTraits::toString(_value, indent); - } - - - int type() const - { - return ElementTraits::TypeId; - } - - void read(BinaryReader& reader) - { - BSONReader(reader).read(_value); - } - - void write(BinaryWriter& writer) - { - BSONWriter(writer).write(_value); - } - -private: - T _value; -}; - - -} } // namespace Poco::MongoDB - - -#endif // MongoDB_Element_INCLUDED diff --git a/contrib/libpoco/MongoDB/include/Poco/MongoDB/GetMoreRequest.h b/contrib/libpoco/MongoDB/include/Poco/MongoDB/GetMoreRequest.h deleted file mode 100644 index 9a6ee6a5044..00000000000 --- a/contrib/libpoco/MongoDB/include/Poco/MongoDB/GetMoreRequest.h +++ /dev/null @@ -1,95 +0,0 @@ -// -// GetMoreRequest.h -// -// $Id$ -// -// Library: MongoDB -// Package: MongoDB -// Module: GetMoreRequest -// -// Definition of the GetMoreRequest class. -// -// Copyright (c) 2012, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef MongoDB_GetMoreRequest_INCLUDED -#define MongoDB_GetMoreRequest_INCLUDED - - -#include "Poco/MongoDB/MongoDB.h" -#include "Poco/MongoDB/RequestMessage.h" - - -namespace Poco { -namespace MongoDB { - - -class MongoDB_API GetMoreRequest : public RequestMessage - /// Class for creating an OP_GETMORE client request. This request is used - /// to query the database for more documents in a collection after - /// a query request is send. -{ -public: - GetMoreRequest(const std::string& collectionName, Int64 cursorID); - /// Constructor. The full collection name is the concatenation of the database - /// name with the collection name, using a "." for the concatenation. For example, - /// for the database "foo" and the collection "bar", the full collection name is - /// "foo.bar". The cursorID has been returned by the response on the query request. - /// By default the numberToReturn is set to 100. - - - virtual ~GetMoreRequest(); - /// Destructor - - Int32 getNumberToReturn() const; - /// Returns the limit of returned documents - - void setNumberToReturn(Int32 n); - /// Sets the limit of returned documents - - Int64 cursorID() const; - /// Returns the cursor id - -protected: - void buildRequest(BinaryWriter& writer); - -private: -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wunused-private-field" - Int32 _flags; -#pragma clang diagnostic pop - std::string _fullCollectionName; - Int32 _numberToReturn; - Int64 _cursorID; -}; - - -// -// inlines -// -inline Int32 GetMoreRequest::getNumberToReturn() const -{ - return _numberToReturn; -} - - -inline void GetMoreRequest::setNumberToReturn(Int32 n) -{ - _numberToReturn = n; -} - - -inline Int64 GetMoreRequest::cursorID() const -{ - return _cursorID; -} - - -} } // namespace Poco::MongoDB - - -#endif //MongoDB_GetMoreRequest_INCLUDED diff --git a/contrib/libpoco/MongoDB/include/Poco/MongoDB/InsertRequest.h b/contrib/libpoco/MongoDB/include/Poco/MongoDB/InsertRequest.h deleted file mode 100644 index d273f64927b..00000000000 --- a/contrib/libpoco/MongoDB/include/Poco/MongoDB/InsertRequest.h +++ /dev/null @@ -1,90 +0,0 @@ -// -// InsertRequest.h -// -// $Id$ -// -// Library: MongoDB -// Package: MongoDB -// Module: InsertRequest -// -// Definition of the InsertRequest class. -// -// Copyright (c) 2012, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef MongoDB_InsertRequest_INCLUDED -#define MongoDB_InsertRequest_INCLUDED - - -#include "Poco/MongoDB/MongoDB.h" -#include "Poco/MongoDB/RequestMessage.h" -#include "Poco/MongoDB/Document.h" - - -namespace Poco { -namespace MongoDB { - - -class MongoDB_API InsertRequest : public RequestMessage - /// Class for creating an OP_INSERT client request. This request is used - /// to insert one or more documents to the database. -{ -public: - typedef enum - { - INSERT_NONE = 0, - INSERT_CONTINUE_ON_ERROR = 1 - } Flags; - - InsertRequest(const std::string& collectionName, Flags flags = INSERT_NONE ); - /// Constructor. - /// The full collection name is the concatenation of the database - /// name with the collection name, using a "." for the concatenation. For example, - /// for the database "foo" and the collection "bar", the full collection name is - /// "foo.bar". - - virtual ~InsertRequest(); - /// Destructor - - Document& addNewDocument(); - /// Adds a new document for insertion. A reference to the empty document is - /// returned. InsertRequest is the owner of the Document and will free it - /// on destruction. - - Document::Vector& documents(); - /// Returns the documents to insert into the database - -protected: - - void buildRequest(BinaryWriter& writer); - -private: - - Int32 _flags; - std::string _fullCollectionName; - Document::Vector _documents; -}; - - -inline Document& InsertRequest::addNewDocument() -{ - Document::Ptr doc = new Document(); - _documents.push_back(doc); - return *doc; -} - - -inline Document::Vector& InsertRequest::documents() -{ - return _documents; -} - - -} } // namespace Poco::MongoDB - - -#endif //MongoDB_InsertRequest_INCLUDED diff --git a/contrib/libpoco/MongoDB/include/Poco/MongoDB/JavaScriptCode.h b/contrib/libpoco/MongoDB/include/Poco/MongoDB/JavaScriptCode.h deleted file mode 100644 index 49076d29dbd..00000000000 --- a/contrib/libpoco/MongoDB/include/Poco/MongoDB/JavaScriptCode.h +++ /dev/null @@ -1,103 +0,0 @@ -// -// JavaScriptCode.h -// -// $Id$ -// -// Library: MongoDB -// Package: MongoDB -// Module: JavaScriptCode -// -// Definition of the JavaScriptCode class. -// -// Copyright (c) 2012, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef MongoDB_JavaScriptCode_INCLUDED -#define MongoDB_JavaScriptCode_INCLUDED - - -#include "Poco/MongoDB/MongoDB.h" -#include "Poco/MongoDB/BSONReader.h" -#include "Poco/MongoDB/BSONWriter.h" -#include "Poco/MongoDB/Element.h" -#include "Poco/SharedPtr.h" - - -namespace Poco { -namespace MongoDB { - - -class MongoDB_API JavaScriptCode - /// Represents JavaScript type in BSON -{ -public: - typedef SharedPtr Ptr; - - JavaScriptCode(); - /// Constructor - - virtual ~JavaScriptCode(); - /// Destructor - - void setCode(const std::string& s); - /// Set the code - - std::string getCode() const; - /// Get the code - -private: - std::string _code; -}; - - -inline void JavaScriptCode::setCode(const std::string& s) -{ - _code = s; -} - - -inline std::string JavaScriptCode::getCode() const -{ - return _code; -} - -// BSON JavaScript code -// spec: string -template<> -struct ElementTraits -{ - enum { TypeId = 0x0D }; - - static std::string toString(const JavaScriptCode::Ptr& value, int indent = 0) - { - return value.isNull() ? "" : value->getCode(); - } -}; - - -template<> -inline void BSONReader::read(JavaScriptCode::Ptr& to) -{ - std::string code; - BSONReader(_reader).read(code); - to = new JavaScriptCode(); - to->setCode(code); -} - - -template<> -inline void BSONWriter::write(JavaScriptCode::Ptr& from) -{ - std::string code = from->getCode(); - BSONWriter(_writer).write(code); -} - - -} } // namespace Poco::MongoDB - - -#endif // MongoDB_JavaScriptCode_INCLUDED diff --git a/contrib/libpoco/MongoDB/include/Poco/MongoDB/KillCursorsRequest.h b/contrib/libpoco/MongoDB/include/Poco/MongoDB/KillCursorsRequest.h deleted file mode 100644 index 7e14ccf82bc..00000000000 --- a/contrib/libpoco/MongoDB/include/Poco/MongoDB/KillCursorsRequest.h +++ /dev/null @@ -1,61 +0,0 @@ -// -// KillCursorsRequest.h -// -// $Id$ -// -// Library: MongoDB -// Package: MongoDB -// Module: KillCursorsRequest -// -// Definition of the KillCursorsRequest class. -// -// Copyright (c) 2012, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef MongoDB_KillCursorsRequest_INCLUDED -#define MongoDB_KillCursorsRequest_INCLUDED - - -#include "Poco/MongoDB/MongoDB.h" -#include "Poco/MongoDB/RequestMessage.h" - - -namespace Poco { -namespace MongoDB { - - -class MongoDB_API KillCursorsRequest : public RequestMessage - /// Class for creating an OP_KILL_CURSORS client request. This - /// request is used to kill cursors, which are still open, - /// returned by query requests. -{ -public: - KillCursorsRequest(); - /// Constructor - - virtual ~KillCursorsRequest(); - /// Destructor - - std::vector& cursors(); - /// Return the cursors - -protected: - void buildRequest(BinaryWriter& writer); - std::vector _cursors; -}; - - -inline std::vector& KillCursorsRequest::cursors() -{ - return _cursors; -} - - -} } // namespace Poco::MongoDB - - -#endif //MongoDB_KillCursorsRequest_INCLUDED diff --git a/contrib/libpoco/MongoDB/include/Poco/MongoDB/Message.h b/contrib/libpoco/MongoDB/include/Poco/MongoDB/Message.h deleted file mode 100644 index 122a3353ea5..00000000000 --- a/contrib/libpoco/MongoDB/include/Poco/MongoDB/Message.h +++ /dev/null @@ -1,72 +0,0 @@ -// -// Message.h -// -// $Id$ -// -// Library: MongoDB -// Package: MongoDB -// Module: Message -// -// Definition of the Message class. -// -// Copyright (c) 2012, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef MongoDB_Message_INCLUDED -#define MongoDB_Message_INCLUDED - - -#include "Poco/Net/Socket.h" -#include "Poco/BinaryReader.h" -#include "Poco/BinaryWriter.h" -#include "Poco/MongoDB/MongoDB.h" -#include "Poco/MongoDB/MessageHeader.h" -#include - - -namespace Poco { -namespace MongoDB { - - -class MongoDB_API Message - /// Base class for all messages send or retrieved from MongoDB server -{ -public: - Message(MessageHeader::OpCode opcode); - /// Constructor - - virtual ~Message(); - /// Destructor - - MessageHeader& header(); - /// Returns the message header - -protected: - MessageHeader _header; - - void messageLength(Poco::Int32 length); - /// Sets the message length in the message header -}; - - -inline MessageHeader& Message::header() -{ - return _header; -} - - -inline void Message::messageLength(Poco::Int32 length) -{ - poco_assert(length > 0); - _header.setMessageLength(length); -} - - -} } // namespace Poco::MongoDB - - -#endif //MongoDB_Message_INCLUDED diff --git a/contrib/libpoco/MongoDB/include/Poco/MongoDB/MessageHeader.h b/contrib/libpoco/MongoDB/include/Poco/MongoDB/MessageHeader.h deleted file mode 100644 index cd9b5fba696..00000000000 --- a/contrib/libpoco/MongoDB/include/Poco/MongoDB/MessageHeader.h +++ /dev/null @@ -1,129 +0,0 @@ -// -// MessageHeader.h -// -// $Id$ -// -// Library: MongoDB -// Package: MongoDB -// Module: MessageHeader -// -// Definition of the MessageHeader class. -// -// Copyright (c) 2012, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef MongoDB_MessageHeader_INCLUDED -#define MongoDB_MessageHeader_INCLUDED - - -#include "Poco/MongoDB/MongoDB.h" -#include "Poco/MongoDB/MessageHeader.h" - - -namespace Poco { -namespace MongoDB { - - -class MongoDB_API MessageHeader - /// Represents the header which is always prepended to a request - /// or response of MongoDB -{ -public: - static const unsigned int MSG_HEADER_SIZE = 16; - - typedef enum - { - Reply = 1 - , Msg = 1000 - , Update = 2001 - , Insert = 2002 - , Query = 2004 - , GetMore = 2005 - , Delete = 2006 - , KillCursors = 2007 - } OpCode; - - virtual ~MessageHeader(); - /// Destructor - - void read(BinaryReader& reader); - /// Reads the header - - void write(BinaryWriter& writer); - /// Writes the header - - Int32 getMessageLength() const; - /// Returns the message length - - OpCode opCode() const; - /// Returns the OpCode - - Int32 getRequestID() const; - /// Returns the request id of the current message - - void setRequestID(Int32 id); - /// Sets the request id of the current message - - Int32 responseTo() const; - /// Returns the request id from the original request. - -private: - MessageHeader(OpCode opcode); - /// Constructor. - - void setMessageLength(Int32 length); - /// Sets the message length - - Int32 _messageLength; - Int32 _requestID; - Int32 _responseTo; - OpCode _opCode; - - friend class Message; -}; - - -inline MessageHeader::OpCode MessageHeader::opCode() const -{ - return _opCode; -} - - -inline Int32 MessageHeader::getMessageLength() const -{ - return _messageLength; -} - - -inline void MessageHeader::setMessageLength(Int32 length) -{ - poco_assert (_messageLength >= 0); - _messageLength = MSG_HEADER_SIZE + length; -} - - -inline void MessageHeader::setRequestID(Int32 id) -{ - _requestID = id; -} - - -inline Int32 MessageHeader::getRequestID() const -{ - return _requestID; -} - -inline Int32 MessageHeader::responseTo() const -{ - return _responseTo; -} - - -} } // namespace Poco::MongoDB - - -#endif //MongoDB_MessageHeader_INCLUDED diff --git a/contrib/libpoco/MongoDB/include/Poco/MongoDB/MongoDB.h b/contrib/libpoco/MongoDB/include/Poco/MongoDB/MongoDB.h deleted file mode 100644 index 40107650cc3..00000000000 --- a/contrib/libpoco/MongoDB/include/Poco/MongoDB/MongoDB.h +++ /dev/null @@ -1,66 +0,0 @@ -// -// MongoDB.h -// -// $Id$ -// -// Library: MongoDB -// Package: MongoDB -// Module: MongoDB -// -// Basic definitions for the Poco MongoDB library. -// This file must be the first file included by every other MongoDB -// header file. -// -// Copyright (c) 2012, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef MongoDBMongoDB_INCLUDED -#define MongoDBMongoDB_INCLUDED - - -#include "Poco/Foundation.h" - - -// -// The following block is the standard way of creating macros which make exporting -// from a DLL simpler. All files within this DLL are compiled with the MongoDB_EXPORTS -// symbol defined on the command line. this symbol should not be defined on any project -// that uses this DLL. This way any other project whose source files include this file see -// MongoDB_API functions as being imported from a DLL, wheras this DLL sees symbols -// defined with this macro as being exported. -// - - -#if defined(_WIN32) && defined(POCO_DLL) - #if defined(MongoDB_EXPORTS) - #define MongoDB_API __declspec(dllexport) - #else - #define MongoDB_API __declspec(dllimport) - #endif -#endif - - -#if !defined(MongoDB_API) - #if !defined(POCO_NO_GCC_API_ATTRIBUTE) && defined (__GNUC__) && (__GNUC__ >= 4) - #define MongoDB_API __attribute__ ((visibility ("default"))) - #else - #define MongoDB_API - #endif -#endif - - -// -// Automatically link MongoDB library. -// -#if defined(_MSC_VER) - #if !defined(POCO_NO_AUTOMATIC_LIBS) && !defined(MongoDB_EXPORTS) - #pragma comment(lib, "PocoMongoDB" POCO_LIB_SUFFIX) - #endif -#endif - - -#endif // MongoDBMongoDB_INCLUDED diff --git a/contrib/libpoco/MongoDB/include/Poco/MongoDB/ObjectId.h b/contrib/libpoco/MongoDB/include/Poco/MongoDB/ObjectId.h deleted file mode 100644 index aa85a29079a..00000000000 --- a/contrib/libpoco/MongoDB/include/Poco/MongoDB/ObjectId.h +++ /dev/null @@ -1,144 +0,0 @@ -// -// Array.h -// -// $Id$ -// -// Library: MongoDB -// Package: MongoDB -// Module: ObjectId -// -// Definition of the ObjectId class. -// -// Copyright (c) 2012, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef MongoDB_ObjectId_INCLUDED -#define MongoDB_ObjectId_INCLUDED - - -#include "Poco/MongoDB/MongoDB.h" -#include "Poco/MongoDB/Element.h" -#include "Poco/Timestamp.h" - - -namespace Poco { -namespace MongoDB { - - -class MongoDB_API ObjectId - /// ObjectId is a 12-byte BSON type, constructed using: - /// - /// - a 4-byte timestamp, - /// - a 3-byte machine identifier, - /// - a 2-byte process id, and - /// - a 3-byte counter, starting with a random value. - /// - /// In MongoDB, documents stored in a collection require a unique _id field that acts - /// as a primary key. Because ObjectIds are small, most likely unique, and fast to generate, - /// MongoDB uses ObjectIds as the default value for the _id field if the _id field is not - /// specified; i.e., the mongod adds the _id field and generates a unique ObjectId to assign - /// as its value. -{ -public: - typedef SharedPtr Ptr; - - ObjectId(const std::string& id); - /// Constructor. The string must contain a hexidecimal representation - /// of an object id. This means a string of 24 characters. - - ObjectId(const ObjectId& copy); - /// Copy constructor. - - virtual ~ObjectId(); - /// Destructor - - Timestamp timestamp() const; - /// Returns the timestamp which is stored in the first four bytes of the id - - std::string toString(const std::string& fmt = "%02x") const; - /// Returns the id in string format. The fmt parameter - /// specifies the formatting used for individual members - /// of the ID char array. - -private: - - ObjectId(); - /// Constructor. Creates an empty Id - - unsigned char _id[12]; - - friend class BSONWriter; - friend class BSONReader; - friend class Document; - - static int fromHex(char c); - - static char fromHex(const char* c); -}; - - -inline Timestamp ObjectId::timestamp() const -{ - int time; - char* T = (char *) &time; - T[0] = _id[3]; - T[1] = _id[2]; - T[2] = _id[1]; - T[3] = _id[0]; - return Timestamp::fromEpochTime((time_t) time); -} - -inline int ObjectId::fromHex(char c) -{ - if ( '0' <= c && c <= '9' ) - return c - '0'; - if ( 'a' <= c && c <= 'f' ) - return c - 'a' + 10; - if ( 'A' <= c && c <= 'F' ) - return c - 'A' + 10; - return 0xff; -} - -inline char ObjectId::fromHex(const char* c) -{ - return (char)((fromHex(c[0]) << 4 ) | fromHex(c[1])); -} - -// BSON Embedded Document -// spec: ObjectId -template<> -struct ElementTraits -{ - enum { TypeId = 0x07 }; - - static std::string toString(const ObjectId::Ptr& id, - int indent = 0, - const std::string& fmt = "%02x") - { - return id->toString(fmt); - } -}; - - -template<> -inline void BSONReader::read(ObjectId::Ptr& to) -{ - _reader.readRaw((char*) to->_id, 12); -} - - -template<> -inline void BSONWriter::write(ObjectId::Ptr& from) -{ - _writer.writeRaw((char*) from->_id, 12); -} - - -} } // namespace Poco::MongoDB - - -#endif //MongoDB_ObjectId_INCLUDED diff --git a/contrib/libpoco/MongoDB/include/Poco/MongoDB/PoolableConnectionFactory.h b/contrib/libpoco/MongoDB/include/Poco/MongoDB/PoolableConnectionFactory.h deleted file mode 100644 index 2e07fe5678c..00000000000 --- a/contrib/libpoco/MongoDB/include/Poco/MongoDB/PoolableConnectionFactory.h +++ /dev/null @@ -1,112 +0,0 @@ -// -// PoolableConnectionFactory.h -// -// $Id$ -// -// Library: MongoDB -// Package: MongoDB -// Module: PoolableConnectionFactory -// -// Definition of the PoolableConnectionFactory class. -// -// Copyright (c) 2012, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef MongoDB_PoolableConnectionFactory_INCLUDED -#define MongoDB_PoolableConnectionFactory_INCLUDED - - -#include "Poco/MongoDB/Connection.h" -#include "Poco/ObjectPool.h" - - -namespace Poco { - - -template<> -class PoolableObjectFactory - /// PoolableObjectFactory specialisation for Connection. New connections - /// are created with the given address. -{ -public: - PoolableObjectFactory(Net::SocketAddress& address) - : _address(address) - { - } - - PoolableObjectFactory(const std::string& address) - : _address(address) - { - } - - MongoDB::Connection::Ptr createObject() - { - return new MongoDB::Connection(_address); - } - - bool validateObject(MongoDB::Connection::Ptr pObject) - { - return true; - } - - void activateObject(MongoDB::Connection::Ptr pObject) - { - } - - void deactivateObject(MongoDB::Connection::Ptr pObject) - { - } - - void destroyObject(MongoDB::Connection::Ptr pObject) - { - } - -private: - Net::SocketAddress _address; -}; - - -namespace MongoDB { - - -class PooledConnection - /// Helper class for borrowing and returning a connection automatically from a pool. -{ -public: - PooledConnection(Poco::ObjectPool& pool) : _pool(pool) - { - _connection = _pool.borrowObject(); - } - - virtual ~PooledConnection() - { - try - { - _pool.returnObject(_connection); - } - catch (...) - { - poco_unexpected(); - } - } - - operator Connection::Ptr () - { - return _connection; - } - -private: - Poco::ObjectPool& _pool; - Connection::Ptr _connection; -}; - - -} // namespace MongoDB -} // namespace Poco - - -#endif //MongoDB_PoolableConnectionFactory_INCLUDED diff --git a/contrib/libpoco/MongoDB/include/Poco/MongoDB/QueryRequest.h b/contrib/libpoco/MongoDB/include/Poco/MongoDB/QueryRequest.h deleted file mode 100644 index 7e452d7b057..00000000000 --- a/contrib/libpoco/MongoDB/include/Poco/MongoDB/QueryRequest.h +++ /dev/null @@ -1,156 +0,0 @@ -// -// QueryRequest.h -// -// $Id$ -// -// Library: MongoDB -// Package: MongoDB -// Module: QueryRequest -// -// Definition of the QueryRequest class. -// -// Copyright (c) 2012, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef MongoDB_QueryRequest_INCLUDED -#define MongoDB_QueryRequest_INCLUDED - - -#include "Poco/MongoDB/MongoDB.h" -#include "Poco/MongoDB/RequestMessage.h" -#include "Poco/MongoDB/Document.h" - - -namespace Poco { -namespace MongoDB { - - -class MongoDB_API QueryRequest : public RequestMessage - /// Class for creating an OP_QUERY client request. This request - /// is used to query documents from the database. -{ -public: - typedef enum - { - QUERY_NONE = 0, - QUERY_TAILABLECURSOR = 2, - QUERY_SLAVE_OK = 4, - //QUERY_OPLOG_REPLAY = 8 (internal replication use only - drivers should not implement) - QUERY_NOCUROSR_TIMEOUT = 16, - QUERY_AWAIT_DATA = 32, - QUERY_EXHAUST = 64, - QUERY_PARTIAL = 128 - } Flags; - - QueryRequest(const std::string& collectionName, Flags flags = QUERY_NONE); - /// Constructor. - /// The full collection name is the concatenation of the database - /// name with the collection name, using a "." for the concatenation. For example, - /// for the database "foo" and the collection "bar", the full collection name is - /// "foo.bar". - - virtual ~QueryRequest(); - /// Destructor - - Flags getFlags() const; - /// Returns the flags - - void setFlags(Flags flag); - /// Set the flags - - std::string fullCollectionName() const; - /// Returns the . used for this query - - Int32 getNumberToSkip() const; - /// Returns the number of documents to skip - - void setNumberToSkip(Int32 n); - /// Sets the number of documents to skip - - Int32 getNumberToReturn() const; - /// Returns the number to return - - void setNumberToReturn(Int32 n); - /// Sets the number to return (limit) - - Document& selector(); - /// Returns the selector document - - Document& returnFieldSelector(); - /// Returns the field selector document - -protected: - void buildRequest(BinaryWriter& writer); - -private: - Flags _flags; - std::string _fullCollectionName; - Int32 _numberToSkip; - Int32 _numberToReturn; - Document _selector; - Document _returnFieldSelector; -}; - - -inline QueryRequest::Flags QueryRequest::getFlags() const -{ - return _flags; -} - - -inline void QueryRequest::setFlags(QueryRequest::Flags flags) -{ - _flags = flags; -} - - -inline std::string QueryRequest::fullCollectionName() const -{ - return _fullCollectionName; -} - - -inline Document& QueryRequest::selector() -{ - return _selector; -} - - -inline Document& QueryRequest::returnFieldSelector() -{ - return _returnFieldSelector; -} - - -inline Int32 QueryRequest::getNumberToSkip() const -{ - return _numberToSkip; -} - - -inline void QueryRequest::setNumberToSkip(Int32 n) -{ - _numberToSkip = n; -} - - -inline Int32 QueryRequest::getNumberToReturn() const -{ - return _numberToReturn; -} - - -inline void QueryRequest::setNumberToReturn(Int32 n) -{ - _numberToReturn = n; -} - - -} } // namespace Poco::MongoDB - - -#endif //MongoDB_QueryRequest_INCLUDED diff --git a/contrib/libpoco/MongoDB/include/Poco/MongoDB/RegularExpression.h b/contrib/libpoco/MongoDB/include/Poco/MongoDB/RegularExpression.h deleted file mode 100644 index ee048790e95..00000000000 --- a/contrib/libpoco/MongoDB/include/Poco/MongoDB/RegularExpression.h +++ /dev/null @@ -1,128 +0,0 @@ -// -// RegularExpression.h -// -// $Id$ -// -// Library: MongoDB -// Package: MongoDB -// Module: RegularExpression -// -// Definition of the RegularExpression class. -// -// Copyright (c) 2012, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef MongoDB_RegularExpression_INCLUDED -#define MongoDB_RegularExpression_INCLUDED - - -#include "Poco/RegularExpression.h" -#include "Poco/MongoDB/MongoDB.h" -#include "Poco/MongoDB/Element.h" - - -namespace Poco { -namespace MongoDB { - - -class MongoDB_API RegularExpression - /// Represents a regular expression in BSON format -{ -public: - typedef SharedPtr Ptr; - - RegularExpression(); - /// Constructor - - RegularExpression(const std::string& pattern, const std::string& options); - /// Constructor - - virtual ~RegularExpression(); - /// Destructor - - SharedPtr createRE() const; - /// Tries to create a Poco::RegularExpression - - std::string getOptions() const; - /// Returns the options - - void setOptions(const std::string& options); - /// Sets the options - - std::string getPattern() const; - /// Returns the pattern - - void setPattern(const std::string& pattern); - /// Sets the pattern - -private: - std::string _pattern; - std::string _options; -}; - - -inline std::string RegularExpression::getPattern() const -{ - return _pattern; -} - - -inline void RegularExpression::setPattern(const std::string& pattern) -{ - _pattern = pattern; -} - - -inline std::string RegularExpression::getOptions() const -{ - return _options; -} - - -inline void RegularExpression::setOptions(const std::string& options) -{ - _options = options; -} - - -// BSON Regex -// spec: cstring cstring -template<> -struct ElementTraits -{ - enum { TypeId = 0x0B }; - - static std::string toString(const RegularExpression::Ptr& value, int indent = 0) - { - //TODO - return "RE: not implemented yet"; - } -}; - - -template<> -inline void BSONReader::read(RegularExpression::Ptr& to) -{ - std::string pattern = readCString(); - std::string options = readCString(); - - to = new RegularExpression(pattern, options); -} - - -template<> -inline void BSONWriter::write(RegularExpression::Ptr& from) -{ - writeCString(from->getPattern()); - writeCString(from->getOptions()); -} - - -} } // namespace Poco::MongoDB - - -#endif // MongoDB_RegularExpression_INCLUDED diff --git a/contrib/libpoco/MongoDB/include/Poco/MongoDB/ReplicaSet.h b/contrib/libpoco/MongoDB/include/Poco/MongoDB/ReplicaSet.h deleted file mode 100644 index 3269f55d832..00000000000 --- a/contrib/libpoco/MongoDB/include/Poco/MongoDB/ReplicaSet.h +++ /dev/null @@ -1,55 +0,0 @@ -// -// ReplicaSet.h -// -// $Id$ -// -// Library: MongoDB -// Package: MongoDB -// Module: ReplicaSet -// -// Definition of the ReplicaSet class. -// -// Copyright (c) 2012, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef MongoDB_ReplicaSet_INCLUDED -#define MongoDB_ReplicaSet_INCLUDED - - -#include "Poco/Net/SocketAddress.h" -#include "Poco/MongoDB/Connection.h" -#include - - -namespace Poco { -namespace MongoDB { - - -class MongoDB_API ReplicaSet - /// Class for working with a replicaset -{ -public: - ReplicaSet(const std::vector& addresses); - /// Constructor - - virtual ~ReplicaSet(); - /// Destructor - - Connection::Ptr findMaster(); - /// Tries to find the master MongoDB instance from the addresses - -private: - Connection::Ptr isMaster(const Net::SocketAddress& host); - - std::vector _addresses; -}; - - -#endif // MongoDB_ReplicaSet_INCLUDED - - -} } // namespace Poco::MongoDB diff --git a/contrib/libpoco/MongoDB/include/Poco/MongoDB/RequestMessage.h b/contrib/libpoco/MongoDB/include/Poco/MongoDB/RequestMessage.h deleted file mode 100644 index d418263aada..00000000000 --- a/contrib/libpoco/MongoDB/include/Poco/MongoDB/RequestMessage.h +++ /dev/null @@ -1,53 +0,0 @@ -// -// RequestMessage.h -// -// $Id$ -// -// Library: MongoDB -// Package: MongoDB -// Module: RequestMessage -// -// Definition of the RequestMessage class. -// -// Copyright (c) 2012, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef MongoDB_RequestMessage_INCLUDED -#define MongoDB_RequestMessage_INCLUDED - - -#include "Poco/MongoDB/MongoDB.h" -#include "Poco/MongoDB/Message.h" -#include - - -namespace Poco { -namespace MongoDB { - - -class MongoDB_API RequestMessage : public Message - /// Base class for a request -{ -public: - RequestMessage(MessageHeader::OpCode opcode); - /// Constructor - - virtual ~RequestMessage(); - /// Destructor - - void send(std::ostream& ostr); - /// Sends the request to stream - -protected: - virtual void buildRequest(BinaryWriter& ss) = 0; -}; - - -} } // namespace Poco::MongoDB - - -#endif //MongoDB_RequestMessage_INCLUDED diff --git a/contrib/libpoco/MongoDB/include/Poco/MongoDB/ResponseMessage.h b/contrib/libpoco/MongoDB/include/Poco/MongoDB/ResponseMessage.h deleted file mode 100644 index 675b48c466a..00000000000 --- a/contrib/libpoco/MongoDB/include/Poco/MongoDB/ResponseMessage.h +++ /dev/null @@ -1,106 +0,0 @@ -// -// ResponseMessage.h -// -// $Id$ -// -// Library: MongoDB -// Package: MongoDB -// Module: ResponseMessage -// -// Definition of the ResponseMessage class. -// -// Copyright (c) 2012, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef MongoDB_ResponseMessage_INCLUDED -#define MongoDB_ResponseMessage_INCLUDED - - -#include "Poco/MongoDB/MongoDB.h" -#include "Poco/MongoDB/Message.h" -#include "Poco/MongoDB/Document.h" -#include - - -namespace Poco { -namespace MongoDB { - - -class MongoDB_API ResponseMessage : public Message - /// Class that represents a response (OP_REPLY) from MongoDB -{ -public: - ResponseMessage(); - /// Constructor - - virtual ~ResponseMessage(); - /// Destructor - - Int64 cursorID() const; - /// Returns the cursor id - - void clear(); - /// Clears the response - - size_t count() const; - /// Returns the number of documents in the response - - Document::Vector& documents(); - /// Returns the retrieved documents - - bool empty() const; - /// Returns true when the response doesn't contain any documents - - bool hasDocuments() const; - /// Returns true when there is at least one document - - void read(std::istream& istr); - /// Reads the response from the stream - -private: - Int32 _responseFlags; - Int64 _cursorID; - Int32 _startingFrom; - Int32 _numberReturned; - Document::Vector _documents; -}; - - -inline size_t ResponseMessage::count() const -{ - return _documents.size(); -} - - -inline bool ResponseMessage::empty() const -{ - return _documents.size() == 0; -} - - -inline Int64 ResponseMessage::cursorID() const -{ - return _cursorID; -} - - -inline Document::Vector& ResponseMessage::documents() -{ - return _documents; -} - - -inline bool ResponseMessage::hasDocuments() const -{ - return _documents.size() > 0; -} - - -} } // namespace Poco::MongoDB - - -#endif //MongoDB_ResponseMessage_INCLUDED diff --git a/contrib/libpoco/MongoDB/include/Poco/MongoDB/UpdateRequest.h b/contrib/libpoco/MongoDB/include/Poco/MongoDB/UpdateRequest.h deleted file mode 100644 index 2a729ae7178..00000000000 --- a/contrib/libpoco/MongoDB/include/Poco/MongoDB/UpdateRequest.h +++ /dev/null @@ -1,108 +0,0 @@ -// -// UpdateRequest.h -// -// $Id$ -// -// Library: MongoDB -// Package: MongoDB -// Module: UpdateRequest -// -// Definition of the UpdateRequest class. -// -// Copyright (c) 2012, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef MongoDB_UpdateRequest_INCLUDED -#define MongoDB_UpdateRequest_INCLUDED - - -#include "Poco/MongoDB/MongoDB.h" -#include "Poco/MongoDB/RequestMessage.h" -#include "Poco/MongoDB/Document.h" - - -namespace Poco { -namespace MongoDB { - - -class UpdateRequest : public RequestMessage - /// Class for creating an OP_UPDATE client request. This request is used - /// to update a document. -{ -public: - typedef enum - { - UPDATE_NOFLAGS = 0, - // If set, the database will insert the supplied object into the - // collection if no matching document is found. - UPDATE_UPSERT = 1, - // if set, the database will update all matching objects in the collection. - // Otherwise only updates first matching doc. - UPDATE_MULTIUPDATE = 2 - } Flags; - - UpdateRequest(const std::string& collectionName, Flags flags = UPDATE_NOFLAGS); - /// Constructor. - /// The full collection name is the concatenation of the database - /// name with the collection name, using a "." for the concatenation. For example, - /// for the database "foo" and the collection "bar", the full collection name is - /// "foo.bar". - - virtual ~UpdateRequest(); - /// Destructor - - - Document& selector(); - /// Returns the selector document - - - Document& update(); - /// The document to update - - Flags flags() const; - /// Returns the flags - - void flags(Flags flags); - /// Sets the flags - -protected: - void buildRequest(BinaryWriter& writer); - - -private: - Flags _flags; - std::string _fullCollectionName; - Document _selector; - Document _update; -}; - - -inline UpdateRequest::Flags UpdateRequest::flags() const -{ - return _flags; -} - -inline void UpdateRequest::flags(UpdateRequest::Flags flags) -{ - _flags = flags; -} - -inline Document& UpdateRequest::selector() -{ - return _selector; -} - -inline Document& UpdateRequest::update() -{ - return _update; -} - - -} } // namespace Poco::MongoDB - - -#endif //MongoDB_UpdateRequest_INCLUDED diff --git a/contrib/libpoco/MongoDB/samples/CMakeLists.txt b/contrib/libpoco/MongoDB/samples/CMakeLists.txt deleted file mode 100644 index 6d6b8c3695e..00000000000 --- a/contrib/libpoco/MongoDB/samples/CMakeLists.txt +++ /dev/null @@ -1 +0,0 @@ -add_subdirectory( SQLToMongo ) diff --git a/contrib/libpoco/MongoDB/samples/SQLToMongo/CMakeLists.txt b/contrib/libpoco/MongoDB/samples/SQLToMongo/CMakeLists.txt deleted file mode 100644 index 023fbce2370..00000000000 --- a/contrib/libpoco/MongoDB/samples/SQLToMongo/CMakeLists.txt +++ /dev/null @@ -1,7 +0,0 @@ -set(SAMPLE_NAME "SQLToMongo") - -set(LOCAL_SRCS "") -aux_source_directory(src LOCAL_SRCS) - -add_executable( ${SAMPLE_NAME} ${LOCAL_SRCS} ) -target_link_libraries( ${SAMPLE_NAME} PocoMongoDB PocoNet PocoFoundation ) diff --git a/contrib/libpoco/MongoDB/samples/SQLToMongo/src/SQLToMongo.cpp b/contrib/libpoco/MongoDB/samples/SQLToMongo/src/SQLToMongo.cpp deleted file mode 100644 index c744ec3b464..00000000000 --- a/contrib/libpoco/MongoDB/samples/SQLToMongo/src/SQLToMongo.cpp +++ /dev/null @@ -1,471 +0,0 @@ -// -// main.cpp -// -// $Id$ -// -// This sample shows SQL to mongo Shell to C++ examples. -// -// Copyright (c) 2013, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "Poco/MongoDB/MongoDB.h" -#include "Poco/MongoDB/Connection.h" -#include "Poco/MongoDB/Database.h" -#include "Poco/MongoDB/Cursor.h" -#include "Poco/MongoDB/Array.h" - - -// INSERT INTO players -// VALUES( "Messi", "Lionel", 1987) -void sample1(Poco::MongoDB::Connection& connection) -{ - std::cout << "*** SAMPLE 1 ***" << std::endl; - - Poco::MongoDB::Database db("sample"); - Poco::SharedPtr insertPlayerRequest = db.createInsertRequest("players"); - - // With one insert request, we can add multiple documents - insertPlayerRequest->addNewDocument() - .add("lastname", "Valdes") - .add("firstname", "Victor") - .add("birthyear", 1982); - insertPlayerRequest->addNewDocument() - .add("lastname", "Alves") - .add("firstname", "Daniel") - .add("birthyear", 1983); - insertPlayerRequest->addNewDocument() - .add("lastname", "Bartra") - .add("firstname", "Marc") - .add("birthyear", 1991); - insertPlayerRequest->addNewDocument() - .add("lastname", "Alba") - .add("firstname", "Jordi") - .add("birthyear", 1989); - insertPlayerRequest->addNewDocument() - .add("lastname", "Montoya") - .add("firstname", "Martin") - .add("birthyear", 1991); - insertPlayerRequest->addNewDocument() - .add("lastname", "Abidal") - .add("firstname", "Eric") - .add("birthyear", 1979); - insertPlayerRequest->addNewDocument() - .add("lastname", "Fontas") - .add("firstname", "Andreu") - .add("birthyear", 1989); - insertPlayerRequest->addNewDocument() - .add("lastname", "Messi") - .add("firstname", "Lionel") - .add("birthyear", 1987); - insertPlayerRequest->addNewDocument() - .add("lastname", "Puyol") - .add("firstname", "Carles") - .add("birthyear", 1978); - insertPlayerRequest->addNewDocument() - .add("lastname", "Piqué") - .add("firstname", "Gerard") - .add("birthyear", 1987); - insertPlayerRequest->addNewDocument() - .add("lastname", "Muniesa") - .add("firstname", "Marc") - .add("birthyear", 1992); - insertPlayerRequest->addNewDocument() - .add("lastname", "Fabrégas") - .add("firstname", "Cesc") - .add("birthyear", 1987); - insertPlayerRequest->addNewDocument() - .add("lastname", "Hernandez") - .add("firstname", "Xavi") - .add("birthyear", 1980); - insertPlayerRequest->addNewDocument() - .add("lastname", "Iniesta") - .add("firstname", "Andres") - .add("birthyear", 1984); - insertPlayerRequest->addNewDocument() - .add("lastname", "Alcantara") - .add("firstname", "Thiago") - .add("birthyear", 1991); - insertPlayerRequest->addNewDocument() - .add("lastname", "Dos Santos") - .add("firstname", "Jonathan") - .add("birthyear", 1990); - insertPlayerRequest->addNewDocument() - .add("lastname", "Mascherano") - .add("firstname", "Javier") - .add("birthyear", 1984); - insertPlayerRequest->addNewDocument() - .add("lastname", "Busquets") - .add("firstname", "Sergio") - .add("birthyear", 1988); - insertPlayerRequest->addNewDocument() - .add("lastname", "Adriano") - .add("firstname", "") - .add("birthyear", 1984); - insertPlayerRequest->addNewDocument() - .add("lastname", "Song") - .add("firstname", "Alex") - .add("birthyear", 1987); - insertPlayerRequest->addNewDocument() - .add("lastname", "Villa") - .add("firstname", "David") - .add("birthyear", 1981); - insertPlayerRequest->addNewDocument() - .add("lastname", "Sanchez") - .add("firstname", "Alexis") - .add("birthyear", 1988); - insertPlayerRequest->addNewDocument() - .add("lastname", "Pedro") - .add("firstname", "") - .add("birthyear", 1987); - insertPlayerRequest->addNewDocument() - .add("lastname", "Cuenca") - .add("firstname", "Isaac") - .add("birthyear", 1991); - insertPlayerRequest->addNewDocument() - .add("lastname", "Tello") - .add("firstname", "Cristian") - .add("birthyear", 1991); - - std::cout << insertPlayerRequest->documents().size() << std::endl; - - connection.sendRequest(*insertPlayerRequest); - std::string lastError = db.getLastError(connection); - if ( !lastError.empty() ) - { - std::cout << "Last Error: " << db.getLastError(connection) << std::endl; - } -} - - -// SELECT lastname, birthyear FROM players -void sample2(Poco::MongoDB::Connection& connection) -{ - std::cout << "*** SAMPLE 2 ***" << std::endl; - - Poco::MongoDB::Cursor cursor("sample", "players"); - // Selecting fields is done by adding them to the returnFieldSelector - // Use 1 as value of the element. - cursor.query().returnFieldSelector().add("lastname", 1); - cursor.query().returnFieldSelector().add("birthyear", 1); - Poco::MongoDB::ResponseMessage& response = cursor.next(connection); - while(1) - { - for(Poco::MongoDB::Document::Vector::const_iterator it = response.documents().begin(); it != response.documents().end(); ++it) - { - std::cout << (*it)->get("lastname") << " (" << (*it)->get("birthyear") << ')' << std::endl; - } - - // When the cursorID is 0, there are no documents left, so break out ... - if ( response.cursorID() == 0 ) - { - break; - } - - // Get the next bunch of documents - response = cursor.next(connection); - } -} - - -// SELECT * FROM players -void sample3(Poco::MongoDB::Connection& connection) -{ - std::cout << "*** SAMPLE 3 ***" << std::endl; - - Poco::MongoDB::Cursor cursor("sample", "players"); - Poco::MongoDB::ResponseMessage& response = cursor.next(connection); - while(1) - { - for(Poco::MongoDB::Document::Vector::const_iterator it = response.documents().begin(); it != response.documents().end(); ++it) - { - std::cout << (*it)->get("lastname") << ' ' << (*it)->get("firstname") << " (" << (*it)->get("birthyear") << ')' << std::endl; - } - - // When the cursorID is 0, there are no documents left, so break out ... - if ( response.cursorID() == 0 ) - { - break; - } - - // Get the next bunch of documents - response = cursor.next(connection); - }; -} - - -// SELECT * FROM players WHERE birthyear = 1978 -void sample4(Poco::MongoDB::Connection& connection) -{ - std::cout << "*** SAMPLE 4 ***" << std::endl; - - Poco::MongoDB::Cursor cursor("sample", "players"); - cursor.query().selector().add("birthyear", 1978); - - Poco::MongoDB::ResponseMessage& response = cursor.next(connection); - while(1) - { - for(Poco::MongoDB::Document::Vector::const_iterator it = response.documents().begin(); it != response.documents().end(); ++it) - { - std::cout << (*it)->get("lastname") << ' ' << (*it)->get("firstname") << " (" << (*it)->get("birthyear") << ')' << std::endl; - } - - // When the cursorID is 0, there are no documents left, so break out ... - if ( response.cursorID() == 0 ) - { - break; - } - - // Get the next bunch of documents - response = cursor.next(connection); - }; -} - - -// SELECT * FROM players WHERE birthyear = 1987 ORDER BY name -void sample5(Poco::MongoDB::Connection& connection) -{ - std::cout << "*** SAMPLE 5 ***" << std::endl; - - Poco::MongoDB::Cursor cursor("sample", "players"); - - // When orderby is needed, use 2 separate documents in the query selector - cursor.query().selector().addNewDocument("$query").add("birthyear", 1987); - cursor.query().selector().addNewDocument("$orderby").add("lastname", 0); - - Poco::MongoDB::ResponseMessage& response = cursor.next(connection); - while(1) - { - for(Poco::MongoDB::Document::Vector::const_iterator it = response.documents().begin(); it != response.documents().end(); ++it) - { - std::cout << (*it)->get("lastname") << ' ' << (*it)->get("firstname") << " (" << (*it)->get("birthyear") << ')' << std::endl; - } - - // When the cursorID is 0, there are no documents left, so break out ... - if ( response.cursorID() == 0 ) - { - break; - } - - // Get the next bunch of documents - response = cursor.next(connection); - }; -} - - -// SELECT * FROM players WHERE birthyear > 1969 and birthyear <= 1980 -void sample6(Poco::MongoDB::Connection& connection) -{ - std::cout << "*** SAMPLE 6 ***" << std::endl; - - Poco::MongoDB::Cursor cursor("sample", "players"); - - cursor.query().selector().addNewDocument("birthyear") - .add("$gt", 1969) - .add("$lte", 1980); - - Poco::MongoDB::ResponseMessage& response = cursor.next(connection); - while(1) - { - for(Poco::MongoDB::Document::Vector::const_iterator it = response.documents().begin(); it != response.documents().end(); ++it) - { - std::cout << (*it)->get("lastname") << ' ' << (*it)->get("firstname") << " (" << (*it)->get("birthyear") << ')' << std::endl; - } - - // When the cursorID is 0, there are no documents left, so break out ... - if ( response.cursorID() == 0 ) - { - break; - } - - // Get the next bunch of documents - response = cursor.next(connection); - }; -} - - -// CREATE INDEX playername -// ON players(lastname) -void sample7(Poco::MongoDB::Connection& connection) -{ - std::cout << "*** SAMPLE 7 ***" << std::endl; - - Poco::MongoDB::Database db("sample"); - Poco::MongoDB::Document::Ptr keys = new Poco::MongoDB::Document(); - keys->add("lastname", 1); - Poco::MongoDB::Document::Ptr errorDoc = db.ensureIndex(connection, "players", "lastname", keys); - - /* Sample above is the same as the following code: - Poco::MongoDB::Document::Ptr index = new Poco::MongoDB::Document(); - index->add("ns", "sample.players"); - index->add("name", "lastname"); - index->addNewDocument("key").add("lastname", 1); - - Poco::SharedPtr insertRequest = db.createInsertRequest("system.indexes"); - insertRequest->documents().push_back(index); - connection.sendRequest(*insertRequest); - Poco::MongoDB::Document::Ptr errorDoc = db.getLastErrorDoc(connection); - */ - std::cout << errorDoc->toString(2); -} - - -// SELECT * FROM players LIMIT 10 SKIP 20 -void sample8(Poco::MongoDB::Connection& connection) -{ - std::cout << "*** SAMPLE 8 ***" << std::endl; - - Poco::MongoDB::Cursor cursor("sample", "players"); - cursor.query().setNumberToReturn(10); - cursor.query().setNumberToSkip(20); - Poco::MongoDB::ResponseMessage& response = cursor.next(connection); - while(1) - { - for(Poco::MongoDB::Document::Vector::const_iterator it = response.documents().begin(); it != response.documents().end(); ++it) - { - std::cout << (*it)->get("lastname") << ' ' << (*it)->get("firstname") << " (" << (*it)->get("birthyear") << ')' << std::endl; - } - - // When the cursorID is 0, there are no documents left, so break out ... - if ( response.cursorID() == 0 ) - { - break; - } - - // Get the next bunch of documents - response = cursor.next(connection); - }; -} - -// SELECT * FROM players LIMIT 1 -void sample9(Poco::MongoDB::Connection& connection) -{ - std::cout << "*** SAMPLE 9 ***" << std::endl; - - // QueryRequest can be used directly - Poco::MongoDB::QueryRequest query("sample.players"); - query.setNumberToReturn(1); - Poco::MongoDB::ResponseMessage response; - connection.sendRequest(query, response); - if ( response.hasDocuments() ) - { - std::cout << response.documents()[0]->toString(2) << std::endl; - } - - // QueryRequest can be created using the Database class - Poco::MongoDB::Database db("sample"); - Poco::SharedPtr queryPtr = db.createQueryRequest("players"); - queryPtr->setNumberToReturn(1); - connection.sendRequest(*queryPtr, response); - if ( response.hasDocuments() ) - { - std::cout << response.documents()[0]->toString(2) << std::endl; - } -} - -// SELECT DISTINCT birthyear FROM players WHERE birthyear > 1980 -void sample10(Poco::MongoDB::Connection& connection) -{ - std::cout << "*** SAMPLE 10 ***" << std::endl; - - Poco::MongoDB::Database db("sample"); - Poco::SharedPtr command = db.createCommand(); - - command->selector() - .add("distinct", "players") - .add("key", "birthyear") - .addNewDocument("query") - .addNewDocument("birthyear") - .add("$gt", 1980); - - Poco::MongoDB::ResponseMessage response; - connection.sendRequest(*command, response); - if ( response.hasDocuments() ) - { - Poco::MongoDB::Array::Ptr values = response.documents()[0]->get("values"); - for(int i = 0; i < values->size(); ++i ) - { - std::cout << values->get(i) << std::endl; - } - } - -} - -// SELECT COUNT(*) FROM players WHERE birthyear > 1980 -void sample11(Poco::MongoDB::Connection& connection) -{ - std::cout << "*** SAMPLE 11 ***" << std::endl; - - Poco::MongoDB::Database db("sample"); - Poco::SharedPtr count = db.createCountRequest("players"); - count->selector().addNewDocument("query") - .addNewDocument("birthyear") - .add("$gt", 1980); - - Poco::MongoDB::ResponseMessage response; - connection.sendRequest(*count, response); - - if ( response.hasDocuments() ) - { - std::cout << "Count: " << response.documents()[0]->get("n") << std::endl; - } -} - - -//UPDATE players SET birthyear = birthyear + 1 WHERE firstname = 'Victor' -void sample12(Poco::MongoDB::Connection& connection) -{ - std::cout << "*** SAMPLE 12 ***" << std::endl; - - Poco::MongoDB::Database db("sample"); - Poco::SharedPtr request = db.createUpdateRequest("players"); - request->selector().add("firstname", "Victor"); - - request->update().addNewDocument("$inc").add("birthyear", 1); - - connection.sendRequest(*request); - - Poco::MongoDB::Document::Ptr lastError = db.getLastErrorDoc(connection); - std::cout << "LastError: " << lastError->toString(2) << std::endl; -} - - -//DELETE players WHERE firstname = 'Victor' -void sample13(Poco::MongoDB::Connection& connection) -{ - std::cout << "*** SAMPLE 13 ***" << std::endl; - - Poco::MongoDB::Database db("sample"); - Poco::SharedPtr request = db.createDeleteRequest("players"); - request->selector().add("firstname", "Victor"); - - connection.sendRequest(*request); - - Poco::MongoDB::Document::Ptr lastError = db.getLastErrorDoc(connection); - std::cout << "LastError: " << lastError->toString(2) << std::endl; -} - - -int main(int argc, char** argv) -{ - Poco::MongoDB::Connection connection("localhost", 27017); - - sample1(connection); - sample2(connection); - sample3(connection); - sample4(connection); - sample5(connection); - sample6(connection); - sample7(connection); - sample8(connection); - sample9(connection); - sample10(connection); - sample11(connection); - sample12(connection); - sample13(connection); - - return 0; -} diff --git a/contrib/libpoco/MongoDB/src/Array.cpp b/contrib/libpoco/MongoDB/src/Array.cpp deleted file mode 100644 index 005e4ba97fa..00000000000 --- a/contrib/libpoco/MongoDB/src/Array.cpp +++ /dev/null @@ -1,78 +0,0 @@ -// -// Array.cpp -// -// $Id$ -// -// Library: MongoDB -// Package: MongoDB -// Module: Array -// -// Implementation of the Array class. -// -// Copyright (c) 2012, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "Poco/MongoDB/Array.h" -#include - - -namespace Poco { -namespace MongoDB { - - -Array::Array() : Document() -{ -} - - -Array::~Array() -{ -} - - -Element::Ptr Array::get(int pos) const -{ - std::string name = Poco::NumberFormatter::format(pos); - return Document::get(name); -} - - -std::string Array::toString(int indent) const -{ - std::ostringstream oss; - - oss << "["; - - if ( indent > 0 ) oss << std::endl; - - for(ElementSet::const_iterator it = _elements.begin(); it != _elements.end(); ++it) - { - if ( it != _elements.begin() ) - { - oss << ","; - if ( indent > 0 ) oss << std::endl; - } - - for(int i = 0; i < indent; ++i) oss << ' '; - - oss << (*it)->toString(); - } - - if ( indent > 0 ) - { - oss << std::endl; - if ( indent >= 2 ) indent -= 2; - for(int i = 0; i < indent; ++i) oss << ' '; - } - - oss << "]"; - - return oss.str(); -} - - -}} // Namespace Poco::Mongo diff --git a/contrib/libpoco/MongoDB/src/Binary.cpp b/contrib/libpoco/MongoDB/src/Binary.cpp deleted file mode 100644 index 7a3b1041eb8..00000000000 --- a/contrib/libpoco/MongoDB/src/Binary.cpp +++ /dev/null @@ -1,51 +0,0 @@ -// -// Binary.cpp -// -// $Id$ -// -// Library: MongoDB -// Package: MongoDB -// Module: Binary -// -// Implementation of the Binary class. -// -// Copyright (c) 2012, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "Poco/MongoDB/Binary.h" - - -namespace Poco { -namespace MongoDB { - - -Binary::Binary() : _buffer(0) -{ -} - - -Binary::Binary(Poco::Int32 size, unsigned char subtype) : _buffer(size), _subtype(subtype) -{ -} - - -Binary::~Binary() -{ -} - - -std::string Binary::toString(int indent) const -{ - std::ostringstream oss; - Base64Encoder encoder(oss); - MemoryInputStream mis((const char*) _buffer.begin(), _buffer.size()); - StreamCopier::copyStream(mis, encoder); - return oss.str(); -} - - -} } // namespace Poco::MongoDB diff --git a/contrib/libpoco/MongoDB/src/Connection.cpp b/contrib/libpoco/MongoDB/src/Connection.cpp deleted file mode 100644 index 93dd27f7eb5..00000000000 --- a/contrib/libpoco/MongoDB/src/Connection.cpp +++ /dev/null @@ -1,111 +0,0 @@ -// -// Connection.cpp -// -// $Id$ -// -// Library: MongoDB -// Package: MongoDB -// Module: Connection -// -// Implementation of the Connection class. -// -// Copyright (c) 2012, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "Poco/Net/SocketStream.h" -#include "Poco/MongoDB/Connection.h" -#include - - -namespace Poco { -namespace MongoDB { - - -Connection::Connection() : _address(), _socket() -{ -} - - -Connection::Connection(const std::string& hostAndPort) : _address(hostAndPort), _socket() -{ - connect(); -} - - -Connection::Connection(const std::string& host, int port) : _address(host, port), _socket() -{ - connect(); -} - - -Connection::Connection(const Net::SocketAddress& addrs) : _address(addrs), _socket() -{ - connect(); -} - - -Connection::~Connection() -{ - try - { - _socket.close(); - } - catch (...) - { - } -} - - -void Connection::connect() -{ - _socket.connect(_address); -} - - -void Connection::connect(const std::string& hostAndPort) -{ - _address = Net::SocketAddress(hostAndPort); - connect(); -} - - -void Connection::connect(const std::string& host, int port) -{ - _address = Net::SocketAddress(host, port); - connect(); -} - - -void Connection::connect(const Net::SocketAddress& addrs) -{ - _address = addrs; - connect(); -} - - -void Connection::disconnect() -{ - _socket.close(); -} - - -void Connection::sendRequest(RequestMessage& request) -{ - Net::SocketOutputStream sos(_socket); - request.send(sos); -} - - -void Connection::sendRequest(RequestMessage& request, ResponseMessage& response) -{ - sendRequest(request); - - Net::SocketInputStream sis(_socket); - response.read(sis); -} - -} } // Poco::MongoDB diff --git a/contrib/libpoco/MongoDB/src/Cursor.cpp b/contrib/libpoco/MongoDB/src/Cursor.cpp deleted file mode 100644 index 8ce5b488229..00000000000 --- a/contrib/libpoco/MongoDB/src/Cursor.cpp +++ /dev/null @@ -1,82 +0,0 @@ -// -// Cursor.cpp -// -// $Id$ -// -// Library: MongoDB -// Package: MongoDB -// Module: Cursor -// -// Implementation of the Cursor class. -// -// Copyright (c) 2012, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "Poco/MongoDB/Cursor.h" -#include "Poco/MongoDB/GetMoreRequest.h" -#include "Poco/MongoDB/KillCursorsRequest.h" - - -namespace Poco { -namespace MongoDB { - - -Cursor::Cursor(const std::string& db, const std::string& collection, QueryRequest::Flags flags) - : _query(db + '.' + collection, flags) -{ -} - - -Cursor::Cursor(const std::string& fullCollectionName, QueryRequest::Flags flags) - : _query(fullCollectionName, flags) -{ -} - - -Cursor::~Cursor() -{ - try - { - poco_assert_dbg(!_response.cursorID()); - - } - catch (...) - { - } -} - - -ResponseMessage& Cursor::next(Connection& connection) -{ - if ( _response.cursorID() == 0 ) - { - connection.sendRequest(_query, _response); - } - else - { - Poco::MongoDB::GetMoreRequest getMore(_query.fullCollectionName(), _response.cursorID()); - getMore.setNumberToReturn(_query.getNumberToReturn()); - _response.clear(); - connection.sendRequest(getMore, _response); - } - return _response; -} - - -void Cursor::kill(Connection& connection) -{ - if ( _response.cursorID() != 0 ) - { - KillCursorsRequest killRequest; - killRequest.cursors().push_back(_response.cursorID()); - connection.sendRequest(killRequest); - } - _response.clear(); -} - - -} } // Namespace Poco::MongoDB diff --git a/contrib/libpoco/MongoDB/src/Database.cpp b/contrib/libpoco/MongoDB/src/Database.cpp deleted file mode 100644 index be4b1518c8d..00000000000 --- a/contrib/libpoco/MongoDB/src/Database.cpp +++ /dev/null @@ -1,128 +0,0 @@ -// -// Database.cpp -// -// $Id$ -// -// Library: MongoDB -// Package: MongoDB -// Module: Database -// -// Implementation of the Database class. -// -// Copyright (c) 2012, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "Poco/MongoDB/Database.h" - - -namespace Poco { -namespace MongoDB { - - -Database::Database( const std::string& db) : _dbname(db) -{ -} - -Database::~Database() -{ -} - - -double Database::count(Connection& connection, const std::string& collectionName) const -{ - Poco::SharedPtr countRequest = createCountRequest(collectionName); - - Poco::MongoDB::ResponseMessage response; - connection.sendRequest(*countRequest, response); - - if ( response.documents().size() > 0 ) - { - Poco::MongoDB::Document::Ptr doc = response.documents()[0]; - return doc->get("n"); - } - - return -1; -} - - -Poco::MongoDB::Document::Ptr Database::ensureIndex(Connection& connection, const std::string& collection, const std::string& indexName, Poco::MongoDB::Document::Ptr keys, bool unique, bool background, int version, int ttl) -{ - Poco::MongoDB::Document::Ptr index = new Poco::MongoDB::Document(); - index->add("ns", _dbname + "." + collection); - index->add("name", indexName); - index->add("key", keys); - - if ( version > 0 ) - { - index->add("version", version); - } - - if ( unique ) - { - index->add("unique", true); - } - - if ( background ) - { - index->add("background", true); - } - - if ( ttl > 0 ) - { - index->add("expireAfterSeconds", ttl); - } - - Poco::SharedPtr insertRequest = createInsertRequest("system.indexes"); - insertRequest->documents().push_back(index); - connection.sendRequest(*insertRequest); - - return getLastErrorDoc(connection); -} - - -Document::Ptr Database::getLastErrorDoc(Connection& connection) const -{ - Document::Ptr errorDoc; - - Poco::SharedPtr request = createQueryRequest("$cmd"); - request->setNumberToReturn(1); - request->selector().add("getLastError", 1); - - Poco::MongoDB::ResponseMessage response; - connection.sendRequest(*request, response); - - if ( response.documents().size() > 0 ) - { - errorDoc = response.documents()[0]; - } - - return errorDoc; -} - - -std::string Database::getLastError(Connection& connection) const -{ - Document::Ptr errorDoc = getLastErrorDoc(connection); - if ( !errorDoc.isNull() && errorDoc->isType("err") ) - { - return errorDoc->get("err"); - } - - return ""; -} - - -Poco::SharedPtr Database::createCountRequest(const std::string& collectionName) const -{ - Poco::SharedPtr request = createQueryRequest("$cmd"); - request->setNumberToReturn(1); - request->selector().add("count", collectionName); - return request; -} - - -} } // namespace Poco::MongoDB diff --git a/contrib/libpoco/MongoDB/src/DeleteRequest.cpp b/contrib/libpoco/MongoDB/src/DeleteRequest.cpp deleted file mode 100644 index 5662ced9269..00000000000 --- a/contrib/libpoco/MongoDB/src/DeleteRequest.cpp +++ /dev/null @@ -1,58 +0,0 @@ -// -// DeleteRequest.cpp -// -// $Id$ -// -// Library: MongoDB -// Package: MongoDB -// Module: DeleteRequest -// -// Implementation of the DeleteRequest class. -// -// Copyright (c) 2012, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "Poco/MongoDB/DeleteRequest.h" - - -namespace Poco { -namespace MongoDB { - - -DeleteRequest::DeleteRequest(const std::string& collectionName, DeleteRequest::Flags flags) - : RequestMessage(MessageHeader::Delete), - _flags(flags), - _fullCollectionName(collectionName), - _selector() -{ -} - - -DeleteRequest::DeleteRequest(const std::string& collectionName, bool justOne) - : RequestMessage(MessageHeader::Delete), - _flags(justOne ? DELETE_SINGLE_REMOVE : DELETE_NONE), - _fullCollectionName(collectionName), - _selector() -{ -} - - -DeleteRequest::~DeleteRequest() -{ -} - - -void DeleteRequest::buildRequest(BinaryWriter& writer) -{ - writer << 0; // 0 - reserved for future use - BSONWriter(writer).writeCString(_fullCollectionName); - writer << _flags; - _selector.write(writer); -} - - -} } // namespace Poco::MongoDB diff --git a/contrib/libpoco/MongoDB/src/Document.cpp b/contrib/libpoco/MongoDB/src/Document.cpp deleted file mode 100644 index a3863e30e17..00000000000 --- a/contrib/libpoco/MongoDB/src/Document.cpp +++ /dev/null @@ -1,196 +0,0 @@ -// -// Document.cpp -// -// $Id$ -// -// Library: MongoDB -// Package: MongoDB -// Module: Document -// -// Implementation of the Document class. -// -// Copyright (c) 2012, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "Poco/MongoDB/Document.h" -#include "Poco/MongoDB/Binary.h" -#include "Poco/MongoDB/ObjectId.h" -#include "Poco/MongoDB/Array.h" -#include "Poco/MongoDB/RegularExpression.h" -#include "Poco/MongoDB/JavaScriptCode.h" -#include - - -namespace Poco { -namespace MongoDB { - - -Document::Document() -{ -} - - -Document::~Document() -{ -} - - -Element::Ptr Document::get(const std::string& name) const -{ - Element::Ptr element; - - ElementSet::const_iterator it = std::find_if(_elements.begin(), _elements.end(), ElementFindByName(name)); - if ( it != _elements.end() ) - { - return *it; - } - - return element; -} - - -void Document::read(BinaryReader& reader) -{ - int size; - reader >> size; - - unsigned char type; - reader >> type; - - while( type != '\0' ) - { - Element::Ptr element; - - std::string name = BSONReader(reader).readCString(); - - switch(type) - { - case ElementTraits::TypeId: - element = new ConcreteElement(name, 0); - break; - case ElementTraits::TypeId: - element = new ConcreteElement(name, 0); - break; - case ElementTraits::TypeId: - element = new ConcreteElement(name, ""); - break; - case ElementTraits::TypeId: - element = new ConcreteElement(name, new Document()); - break; - case ElementTraits::TypeId: - element = new ConcreteElement(name, new Array()); - break; - case ElementTraits::TypeId: - element = new ConcreteElement(name, new Binary()); - break; - case ElementTraits::TypeId: - element = new ConcreteElement(name, new ObjectId()); - break; - case ElementTraits::TypeId: - element = new ConcreteElement(name, false); - break; - case ElementTraits::TypeId: - element = new ConcreteElement(name, Poco::Timestamp()); - break; - case ElementTraits::TypeId: - element = new ConcreteElement(name, NullValue(0)); - break; - case ElementTraits::TypeId: - element = new ConcreteElement(name, new RegularExpression()); - break; - case ElementTraits::TypeId: - element = new ConcreteElement(name, new JavaScriptCode()); - break; - case ElementTraits::TypeId: - element = new ConcreteElement(name, 0); - break; - default: - { - std::stringstream ss; - ss << "Element " << name << " contains an unsupported type " << std::hex << (int) type; - throw Poco::NotImplementedException(ss.str()); - } - //TODO: x0F -> JavaScript code with scope - // xFF -> Min Key - // x7F -> Max Key - } - - element->read(reader); - _elements.insert(element); - - reader >> type; - } -} - - -std::string Document::toString(int indent) const -{ - std::ostringstream oss; - - oss << '{'; - - if ( indent > 0 ) oss << std::endl; - - - for(ElementSet::const_iterator it = _elements.begin(); it != _elements.end(); ++it) - { - if ( it != _elements.begin() ) - { - oss << ','; - if ( indent > 0 ) oss << std::endl; - } - - for(int i = 0; i < indent; ++i) oss << ' '; - - oss << '"' << (*it)->name() << '"'; - oss << (( indent > 0 ) ? " : " : ":"); - - oss << (*it)->toString(indent > 0 ? indent + 2 : 0); - } - - if ( indent > 0 ) - { - oss << std::endl; - if ( indent >= 2 ) indent -= 2; - - for(int i = 0; i < indent; ++i) oss << ' '; - } - - oss << '}'; - - return oss.str(); -} - - -void Document::write(BinaryWriter& writer) -{ - if ( _elements.empty() ) - { - writer << 5; - } - else - { - std::stringstream sstream; - Poco::BinaryWriter tempWriter(sstream); - for(ElementSet::iterator it = _elements.begin(); it != _elements.end(); ++it) - { - tempWriter << static_cast((*it)->type()); - BSONWriter(tempWriter).writeCString((*it)->name()); - Element::Ptr element = *it; - element->write(tempWriter); - } - tempWriter.flush(); - - Poco::Int32 len = static_cast(5 + sstream.tellp()); /* 5 = sizeof(len) + 0-byte */ - writer << len; - writer.writeRaw(sstream.str()); - } - writer << '\0'; -} - - -} } // namespace Poco::MongoDB diff --git a/contrib/libpoco/MongoDB/src/Element.cpp b/contrib/libpoco/MongoDB/src/Element.cpp deleted file mode 100644 index 8b26d80228b..00000000000 --- a/contrib/libpoco/MongoDB/src/Element.cpp +++ /dev/null @@ -1,36 +0,0 @@ -// -// Element.cpp -// -// $Id$ -// -// Library: MongoDB -// Package: MongoDB -// Module: Element -// -// Implementation of the Element class. -// -// Copyright (c) 2012, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "Poco/MongoDB/Element.h" - - -namespace Poco { -namespace MongoDB { - - -Element::Element(const std::string& name) : _name(name) -{ -} - - -Element::~Element() -{ -} - - -} } // namespace Poco::MongoDB diff --git a/contrib/libpoco/MongoDB/src/GetMoreRequest.cpp b/contrib/libpoco/MongoDB/src/GetMoreRequest.cpp deleted file mode 100644 index 08ffd6f7d2e..00000000000 --- a/contrib/libpoco/MongoDB/src/GetMoreRequest.cpp +++ /dev/null @@ -1,50 +0,0 @@ -// -// GetMoreRequest.cpp -// -// $Id$ -// -// Library: MongoDB -// Package: MongoDB -// Module: GetMoreRequest -// -// Implementation of the GetMoreRequest class. -// -// Copyright (c) 2012, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "Poco/MongoDB/GetMoreRequest.h" -#include "Poco/MongoDB/Element.h" - - -namespace Poco { -namespace MongoDB { - - -GetMoreRequest::GetMoreRequest(const std::string& collectionName, Int64 cursorID) - : RequestMessage(MessageHeader::GetMore), - _fullCollectionName(collectionName), - _numberToReturn(100), - _cursorID(cursorID) -{ -} - - -GetMoreRequest::~GetMoreRequest() -{ -} - - -void GetMoreRequest::buildRequest(BinaryWriter& writer) -{ - writer << 0; // 0 - reserved for future use - BSONWriter(writer).writeCString(_fullCollectionName); - writer << _numberToReturn; - writer << _cursorID; -} - - -} } // namespace Poco::MongoDB diff --git a/contrib/libpoco/MongoDB/src/InsertRequest.cpp b/contrib/libpoco/MongoDB/src/InsertRequest.cpp deleted file mode 100644 index 3ddaa645729..00000000000 --- a/contrib/libpoco/MongoDB/src/InsertRequest.cpp +++ /dev/null @@ -1,53 +0,0 @@ -// -// InsertRequest.cpp -// -// $Id$ -// -// Library: MongoDB -// Package: MongoDB -// Module: InsertRequest -// -// Implementation of the InsertRequest class. -// -// Copyright (c) 2012, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "Poco/MongoDB/InsertRequest.h" - - -namespace Poco { -namespace MongoDB { - - -InsertRequest::InsertRequest(const std::string& collectionName, Flags flags) - : RequestMessage(MessageHeader::Insert), - _flags(flags), - _fullCollectionName(collectionName) -{ -} - - -InsertRequest::~InsertRequest() -{ -} - - -void InsertRequest::buildRequest(BinaryWriter& writer) -{ - //TODO: throw exception when no document is added - - writer << _flags; - BSONWriter bsonWriter(writer); - bsonWriter.writeCString(_fullCollectionName); - for(Document::Vector::iterator it = _documents.begin(); it != _documents.end(); ++it) - { - bsonWriter.write(*it); - } -} - - -} } // namespace Poco::MongoDB diff --git a/contrib/libpoco/MongoDB/src/JavaScriptCode.cpp b/contrib/libpoco/MongoDB/src/JavaScriptCode.cpp deleted file mode 100644 index b2cf9d88ac8..00000000000 --- a/contrib/libpoco/MongoDB/src/JavaScriptCode.cpp +++ /dev/null @@ -1,37 +0,0 @@ -// -// JavaScriptCode.cpp -// -// $Id$ -// -// Library: MongoDB -// Package: MongoDB -// Module: JavaScriptCode -// -// Implementation of the JavaScriptCode class. -// -// Copyright (c) 2012, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "Poco/MongoDB/JavaScriptCode.h" - - -namespace Poco { -namespace MongoDB { - - -JavaScriptCode::JavaScriptCode() -{ - -} - - -JavaScriptCode::~JavaScriptCode() -{ -} - - -} } // namespace Poco::MongoDB diff --git a/contrib/libpoco/MongoDB/src/KillCursorsRequest.cpp b/contrib/libpoco/MongoDB/src/KillCursorsRequest.cpp deleted file mode 100644 index ffc141973c0..00000000000 --- a/contrib/libpoco/MongoDB/src/KillCursorsRequest.cpp +++ /dev/null @@ -1,48 +0,0 @@ -// -// KillCursorsRequest.cpp -// -// $Id$ -// -// Library: MongoDB -// Package: MongoDB -// Module: KillCursorsRequest -// -// Implementation of the KillCursorsRequest class. -// -// Copyright (c) 2012, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "Poco/MongoDB/KillCursorsRequest.h" - - -namespace Poco { -namespace MongoDB { - - -KillCursorsRequest::KillCursorsRequest() - : RequestMessage(MessageHeader::KillCursors) -{ -} - - -KillCursorsRequest::~KillCursorsRequest() -{ -} - - -void KillCursorsRequest::buildRequest(BinaryWriter& writer) -{ - writer << 0; // 0 - reserved for future use - writer << _cursors.size(); - for(std::vector::iterator it = _cursors.begin(); it != _cursors.end(); ++it) - { - writer << *it; - } -} - - -} } // namespace Poco::MongoDB diff --git a/contrib/libpoco/MongoDB/src/Message.cpp b/contrib/libpoco/MongoDB/src/Message.cpp deleted file mode 100644 index efe84929efa..00000000000 --- a/contrib/libpoco/MongoDB/src/Message.cpp +++ /dev/null @@ -1,36 +0,0 @@ -// -// Message.cpp -// -// $Id$ -// -// Library: MongoDB -// Package: MongoDB -// Module: Message -// -// Implementation of the Message class. -// -// Copyright (c) 2012, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "Poco/MongoDB/Message.h" - - -namespace Poco { -namespace MongoDB { - - -Message::Message(MessageHeader::OpCode opcode) : _header(opcode) -{ -} - - -Message::~Message() -{ -} - - -} } // namespace Poco::MongoDB diff --git a/contrib/libpoco/MongoDB/src/MessageHeader.cpp b/contrib/libpoco/MongoDB/src/MessageHeader.cpp deleted file mode 100644 index 6d12f8ca6d0..00000000000 --- a/contrib/libpoco/MongoDB/src/MessageHeader.cpp +++ /dev/null @@ -1,65 +0,0 @@ -// -// MessageHeader.cpp -// -// $Id$ -// -// Library: MongoDB -// Package: MongoDB -// Module: MessageHeader -// -// Implementation of the MessageHeader class. -// -// Copyright (c) 2012, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "Poco/MongoDB/Message.h" -#include "Poco/Exception.h" -#include "Poco/Net/SocketStream.h" -#include "Poco/StreamCopier.h" - - -namespace Poco { -namespace MongoDB { - - -MessageHeader::MessageHeader(OpCode opCode) : _messageLength(0), _requestID(0), _responseTo(0), _opCode(opCode) -{ -} - - -MessageHeader::~MessageHeader() -{ -} - - -void MessageHeader::read(BinaryReader& reader) -{ - reader >> _messageLength; - reader >> _requestID; - reader >> _responseTo; - - Int32 opCode; - reader >> opCode; - _opCode = (OpCode) opCode; - - if (!reader.good()) - { - throw IOException("Failed to read from socket"); - } -} - - -void MessageHeader::write(BinaryWriter& writer) -{ - writer << _messageLength; - writer << _requestID; - writer << _responseTo; - writer << (Int32) _opCode; -} - - -} } // namespace Poco::MongoDB diff --git a/contrib/libpoco/MongoDB/src/ObjectId.cpp b/contrib/libpoco/MongoDB/src/ObjectId.cpp deleted file mode 100644 index 0111c7af72c..00000000000 --- a/contrib/libpoco/MongoDB/src/ObjectId.cpp +++ /dev/null @@ -1,63 +0,0 @@ -// -// ObjectId.cpp -// -// $Id$ -// -// Library: MongoDB -// Package: MongoDB -// Module: ObjectId -// -// Implementation of the ObjectId class. -// -// Copyright (c) 2012, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - -#include "Poco/MongoDB/ObjectId.h" -#include "Poco/Format.h" - - -namespace Poco { -namespace MongoDB { - -ObjectId::ObjectId() -{ - memset(_id, 0, sizeof(_id)); -} - -ObjectId::ObjectId(const std::string& id) -{ - poco_assert_dbg(id.size() == 24); - - const char *p = id.c_str(); - for (std::size_t i = 0; i < 12; ++i) { - _id[i] = fromHex(p); - p += 2; - } -} - -ObjectId::ObjectId(const ObjectId& copy) -{ - memcpy(_id, copy._id, sizeof(_id)); -} - -ObjectId::~ObjectId() -{ -} - - -std::string ObjectId::toString(const std::string& fmt) const -{ - std::string s; - - for(int i = 0; i < 12; ++i) - { - s += format(fmt, (unsigned int) _id[i]); - } - return s; -} - - -} } // namespace Poco::MongoDB diff --git a/contrib/libpoco/MongoDB/src/QueryRequest.cpp b/contrib/libpoco/MongoDB/src/QueryRequest.cpp deleted file mode 100644 index 49f3e549b88..00000000000 --- a/contrib/libpoco/MongoDB/src/QueryRequest.cpp +++ /dev/null @@ -1,58 +0,0 @@ -// -// QueryRequest.cpp -// -// $Id$ -// -// Library: MongoDB -// Package: MongoDB -// Module: QueryRequest -// -// Implementation of the QueryRequest class. -// -// Copyright (c) 2012, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "Poco/MongoDB/QueryRequest.h" - - -namespace Poco { -namespace MongoDB { - - -QueryRequest::QueryRequest(const std::string& collectionName, QueryRequest::Flags flags) - : RequestMessage(MessageHeader::Query), - _flags(flags), - _fullCollectionName(collectionName), - _numberToSkip(0), - _numberToReturn(100), - _selector(), - _returnFieldSelector() -{ -} - - -QueryRequest::~QueryRequest() -{ -} - - -void QueryRequest::buildRequest(BinaryWriter& writer) -{ - writer << _flags; - BSONWriter(writer).writeCString(_fullCollectionName); - writer << _numberToSkip; - writer << _numberToReturn; - _selector.write(writer); - - if ( ! _returnFieldSelector.empty() ) - { - _returnFieldSelector.write(writer); - } -} - - -} } // namespace Poco::MongoDB diff --git a/contrib/libpoco/MongoDB/src/RegularExpression.cpp b/contrib/libpoco/MongoDB/src/RegularExpression.cpp deleted file mode 100644 index c599c548414..00000000000 --- a/contrib/libpoco/MongoDB/src/RegularExpression.cpp +++ /dev/null @@ -1,73 +0,0 @@ -// -// RegularExpression.cpp -// -// $Id$ -// -// Library: MongoDB -// Package: MongoDB -// Module: RegularExpression -// -// Implementation of the RegularExpression class. -// -// Copyright (c) 2012, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "Poco/MongoDB/RegularExpression.h" -#include - - -namespace Poco { -namespace MongoDB { - - -RegularExpression::RegularExpression() -{ -} - - -RegularExpression::RegularExpression(const std::string& pattern, const std::string& options) : _pattern(pattern), _options(options) -{ -} - - -RegularExpression::~RegularExpression() -{ -} - - -SharedPtr RegularExpression::createRE() const -{ - int options = 0; - for(std::string::const_iterator optIt = _options.begin(); optIt != _options.end(); ++optIt) - { - switch(*optIt) - { - case 'i': // Case Insensitive - options |= Poco::RegularExpression::RE_CASELESS; - break; - case 'm': // Multiline matching - options |= Poco::RegularExpression::RE_MULTILINE; - break; - case 'x': // Verbose mode - //No equivalent in Poco - break; - case 'l': // \w \W Locale dependent - //No equivalent in Poco - break; - case 's': // Dotall mode - options |= Poco::RegularExpression::RE_DOTALL; - break; - case 'u': // \w \W Unicode - //No equivalent in Poco - break; - } - } - return new Poco::RegularExpression(_pattern, options); -} - - -} } // namespace Poco::MongoDB diff --git a/contrib/libpoco/MongoDB/src/ReplicaSet.cpp b/contrib/libpoco/MongoDB/src/ReplicaSet.cpp deleted file mode 100644 index 3f6a0df0fb7..00000000000 --- a/contrib/libpoco/MongoDB/src/ReplicaSet.cpp +++ /dev/null @@ -1,91 +0,0 @@ -// -// ReplicaSet.cpp -// -// $Id$ -// -// Library: MongoDB -// Package: MongoDB -// Module: ReplicaSet -// -// Implementation of the ReplicaSet class. -// -// Copyright (c) 2012, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "Poco/MongoDB/ReplicaSet.h" -#include "Poco/MongoDB/QueryRequest.h" -#include "Poco/MongoDB/ResponseMessage.h" - -namespace Poco { -namespace MongoDB { - - -ReplicaSet::ReplicaSet(const std::vector &addresses) : _addresses(addresses) -{ -} - - -ReplicaSet::~ReplicaSet() -{ -} - - -Connection::Ptr ReplicaSet::findMaster() -{ - Connection::Ptr master; - - for(std::vector::iterator it = _addresses.begin(); it != _addresses.end(); ++it) - { - master = isMaster(*it); - if ( ! master.isNull() ) - { - break; - } - } - - return master; -} - - -Connection::Ptr ReplicaSet::isMaster(const Net::SocketAddress& address) -{ - Connection::Ptr conn = new Connection(); - - try - { - conn->connect(address); - - QueryRequest request("admin.$cmd"); - request.setNumberToReturn(1); - request.selector().add("isMaster", 1); - - ResponseMessage response; - conn->sendRequest(request, response); - - if ( response.documents().size() > 0 ) - { - Document::Ptr doc = response.documents()[0]; - if ( doc->get("ismaster") ) - { - return conn; - } - else if ( doc->exists("primary") ) - { - return isMaster(Net::SocketAddress(doc->get("primary"))); - } - } - } - catch(...) - { - conn = NULL; - } - - return NULL; -} - - -} } // namespace Poco::MongoDB diff --git a/contrib/libpoco/MongoDB/src/RequestMessage.cpp b/contrib/libpoco/MongoDB/src/RequestMessage.cpp deleted file mode 100644 index 9af9c4efecc..00000000000 --- a/contrib/libpoco/MongoDB/src/RequestMessage.cpp +++ /dev/null @@ -1,54 +0,0 @@ -// -// RequestMessage.cpp -// -// $Id$ -// -// Library: MongoDB -// Package: MongoDB -// Module: RequestMessage -// -// Implementation of the RequestMessage class. -// -// Copyright (c) 2012, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "Poco/MongoDB/RequestMessage.h" -#include "Poco/Net/SocketStream.h" -#include "Poco/StreamCopier.h" - - -namespace Poco { -namespace MongoDB { - - -RequestMessage::RequestMessage(MessageHeader::OpCode opcode) : Message(opcode) -{ -} - - -RequestMessage::~RequestMessage() -{ -} - - -void RequestMessage::send(std::ostream& ostr) -{ - std::stringstream ss; - BinaryWriter requestWriter(ss); - buildRequest(requestWriter); - requestWriter.flush(); - - messageLength(static_cast(ss.tellp())); - - BinaryWriter socketWriter(ostr, BinaryWriter::LITTLE_ENDIAN_BYTE_ORDER); - _header.write(socketWriter); - StreamCopier::copyStream(ss, ostr); - ostr.flush(); -} - - -} } // namespace Poco::MongoDB diff --git a/contrib/libpoco/MongoDB/src/ResponseMessage.cpp b/contrib/libpoco/MongoDB/src/ResponseMessage.cpp deleted file mode 100644 index a46e271612f..00000000000 --- a/contrib/libpoco/MongoDB/src/ResponseMessage.cpp +++ /dev/null @@ -1,69 +0,0 @@ -// -// ResponseMessage.cpp -// -// $Id$ -// -// Library: MongoDB -// Package: MongoDB -// Module: ResponseMessage -// -// Implementation of the ResponseMessage class. -// -// Copyright (c) 2012, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "Poco/MongoDB/ResponseMessage.h" -#include "Poco/Net/SocketStream.h" - - -namespace Poco { -namespace MongoDB { - - -ResponseMessage::ResponseMessage() : Message(MessageHeader::Reply), _responseFlags(0), _cursorID(0), _startingFrom(0), _numberReturned(0) -{ -} - - -ResponseMessage::~ResponseMessage() -{ -} - - -void ResponseMessage::clear() -{ - _responseFlags = 0; - _startingFrom = 0; - _cursorID = 0; - _numberReturned = 0; - _documents.clear(); -} - - -void ResponseMessage::read(std::istream& istr) -{ - clear(); - - BinaryReader reader(istr, BinaryReader::LITTLE_ENDIAN_BYTE_ORDER); - - _header.read(reader); - - reader >> _responseFlags; - reader >> _cursorID; - reader >> _startingFrom; - reader >> _numberReturned; - - for(int i = 0; i < _numberReturned; ++i) - { - Document::Ptr doc = new Document(); - doc->read(reader); - _documents.push_back(doc); - } -} - - -} } // namespace Poco::MongoDB diff --git a/contrib/libpoco/MongoDB/src/UpdateRequest.cpp b/contrib/libpoco/MongoDB/src/UpdateRequest.cpp deleted file mode 100644 index f8d17fd4182..00000000000 --- a/contrib/libpoco/MongoDB/src/UpdateRequest.cpp +++ /dev/null @@ -1,51 +0,0 @@ -// -// UpdateRequest.cpp -// -// $Id$ -// -// Library: MongoDB -// Package: MongoDB -// Module: UpdateRequest -// -// Implementation of the UpdateRequest class. -// -// Copyright (c) 2012, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "Poco/MongoDB/UpdateRequest.h" - - -namespace Poco { -namespace MongoDB { - - -UpdateRequest::UpdateRequest(const std::string& collectionName, UpdateRequest::Flags flags) - : RequestMessage(MessageHeader::Update), - _flags(flags), - _fullCollectionName(collectionName), - _selector(), - _update() -{ -} - - -UpdateRequest::~UpdateRequest() -{ -} - - -void UpdateRequest::buildRequest(BinaryWriter& writer) -{ - writer << 0; // 0 - reserved for future use - BSONWriter(writer).writeCString(_fullCollectionName); - writer << _flags; - _selector.write(writer); - _update.write(writer); -} - - -} } // namespace Poco::MongoDB diff --git a/contrib/libpoco/MongoDB/testsuite/CMakeLists.txt b/contrib/libpoco/MongoDB/testsuite/CMakeLists.txt deleted file mode 100644 index d65c57f6140..00000000000 --- a/contrib/libpoco/MongoDB/testsuite/CMakeLists.txt +++ /dev/null @@ -1,23 +0,0 @@ -set(TESTUNIT "${LIBNAME}-testrunner") - -# Sources -file(GLOB SRCS_G "src/*.cpp") -POCO_SOURCES_AUTO( TEST_SRCS ${SRCS_G}) - -# Headers -file(GLOB_RECURSE HDRS_G "src/*.h" ) -POCO_HEADERS_AUTO( TEST_SRCS ${HDRS_G}) - -POCO_SOURCES_AUTO_PLAT( TEST_SRCS OFF - src/WinDriver.cpp -) - -POCO_SOURCES_AUTO_PLAT( TEST_SRCS WINCE - src/WinCEDriver.cpp -) - -set(TESTUNIT "${LIBNAME}-testrunner") - -add_executable( ${TESTUNIT} ${TEST_SRCS} ) -add_test(NAME ${LIBNAME} WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} COMMAND ${TESTUNIT} -all) -target_link_libraries( ${TESTUNIT} PocoMongoDB PocoFoundation CppUnit ) diff --git a/contrib/libpoco/MongoDB/testsuite/src/Driver.cpp b/contrib/libpoco/MongoDB/testsuite/src/Driver.cpp deleted file mode 100644 index 82ed47087ed..00000000000 --- a/contrib/libpoco/MongoDB/testsuite/src/Driver.cpp +++ /dev/null @@ -1,19 +0,0 @@ -// -// Driver.cpp -// -// $Id$ -// -// Console-based test driver for Poco MongoDB. -// -// Copyright (c) 2004-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "CppUnit/TestRunner.h" -#include "MongoDBTestSuite.h" - - -CppUnitMain(MongoDBTestSuite) diff --git a/contrib/libpoco/MongoDB/testsuite/src/MongoDBTest.cpp b/contrib/libpoco/MongoDB/testsuite/src/MongoDBTest.cpp deleted file mode 100644 index 09024c75c77..00000000000 --- a/contrib/libpoco/MongoDB/testsuite/src/MongoDBTest.cpp +++ /dev/null @@ -1,428 +0,0 @@ -// -// MongoDBTest.cpp -// -// $Id$ -// -// Copyright (c) 2004-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// -#include - -#include "Poco/DateTime.h" -#include "Poco/ObjectPool.h" - -#include "Poco/MongoDB/InsertRequest.h" -#include "Poco/MongoDB/QueryRequest.h" -#include "Poco/MongoDB/DeleteRequest.h" -#include "Poco/MongoDB/GetMoreRequest.h" -#include "Poco/MongoDB/PoolableConnectionFactory.h" -#include "Poco/MongoDB/Database.h" -#include "Poco/MongoDB/Cursor.h" -#include "Poco/MongoDB/ObjectId.h" - -#include "Poco/Net/NetException.h" - -#include "MongoDBTest.h" -#include "CppUnit/TestCaller.h" -#include "CppUnit/TestSuite.h" - -using namespace Poco::MongoDB; - - -bool MongoDBTest::_connected = false; -Poco::MongoDB::Connection MongoDBTest::_mongo; - - -MongoDBTest::MongoDBTest(const std::string& name): - CppUnit::TestCase("MongoDB"), - _host("localhost"), - _port(27017) -{ - if (!_connected) - { - try - { - _mongo.connect(_host, _port); - _connected = true; - std::cout << "Connected to [" << _host << ':' << _port << ']' << std::endl; - } - catch (Poco::Net::ConnectionRefusedException& e) - { - std::cout << "Couldn't connect to " << e.message() << ". " << std::endl; - } - } -} - - -MongoDBTest::~MongoDBTest() -{ - if (_connected) - { - _mongo.disconnect(); - _connected = false; - std::cout << "Disconnected from [" << _host << ':' << _port << ']' << std::endl; - } -} - - -void MongoDBTest::setUp() -{ - -} - - -void MongoDBTest::tearDown() -{ -} - - -void MongoDBTest::testInsertRequest() -{ - if (!_connected) - { - std::cout << "Not connected, test skipped." << std::endl; - return; - } - - Poco::MongoDB::Document::Ptr player = new Poco::MongoDB::Document(); - player->add("lastname", std::string("Braem")); - player->add("firstname", std::string("Franky")); - - Poco::DateTime birthdate; - birthdate.assign(1969, 3, 9); - player->add("birthdate", birthdate.timestamp()); - - player->add("start", 1993); - player->add("active", false); - - Poco::DateTime now; - std::cout << now.day() << " " << now.hour() << ":" << now.minute() << ":" << now.second() << std::endl; - player->add("lastupdated", now.timestamp()); - - player->add("unknown", NullValue()); - - Poco::MongoDB::InsertRequest request("team.players"); - request.documents().push_back(player); - _mongo.sendRequest(request); -} - -void MongoDBTest::testQueryRequest() -{ - if (!_connected) - { - std::cout << "Not connected, test skipped." << std::endl; - return; - } - - Poco::MongoDB::QueryRequest request("team.players"); - request.selector().add("lastname" , std::string("Braem")); - request.setNumberToReturn(1); - - Poco::MongoDB::ResponseMessage response; - - _mongo.sendRequest(request, response); - - if ( response.documents().size() > 0 ) - { - Poco::MongoDB::Document::Ptr doc = response.documents()[0]; - - try - { - std::string lastname = doc->get("lastname"); - assert(lastname.compare("Braem") == 0); - std::string firstname = doc->get("firstname"); - assert(firstname.compare("Franky") == 0); - Poco::Timestamp birthDateTimestamp = doc->get("birthdate"); - Poco::DateTime birthDate(birthDateTimestamp); - assert(birthDate.year() == 1969 && birthDate.month() == 3 && birthDate.day() == 9); - Poco::Timestamp lastupdatedTimestamp = doc->get("lastupdated"); - assert(doc->isType("unknown")); - bool active = doc->get("active"); - assert(!active); - - std::string id = doc->get("_id")->toString(); - std::cout << id << std::endl; - } - catch(Poco::NotFoundException& nfe) - { - fail(nfe.message() + " not found."); - } - } - else - { - fail("No document returned"); - } -} - -void MongoDBTest::testDBQueryRequest() -{ - if (!_connected) - { - std::cout << "Not connected, test skipped." << std::endl; - return; - } - - Database db("team"); - Poco::SharedPtr request = db.createQueryRequest("players"); - request->selector().add("lastname" , std::string("Braem")); - - Poco::MongoDB::ResponseMessage response; - _mongo.sendRequest(*request, response); - - if ( response.documents().size() > 0 ) - { - Poco::MongoDB::Document::Ptr doc = response.documents()[0]; - - try - { - std::string lastname = doc->get("lastname"); - assert(lastname.compare("Braem") == 0); - std::string firstname = doc->get("firstname"); - assert(firstname.compare("Franky") == 0); - Poco::Timestamp birthDateTimestamp = doc->get("birthdate"); - Poco::DateTime birthDate(birthDateTimestamp); - assert(birthDate.year() == 1969 && birthDate.month() == 3 && birthDate.day() == 9); - Poco::Timestamp lastupdatedTimestamp = doc->get("lastupdated"); - assert(doc->isType("unknown")); - - std::string id = doc->get("_id")->toString(); - std::cout << id << std::endl; - } - catch(Poco::NotFoundException& nfe) - { - fail(nfe.message() + " not found."); - } - } - else - { - fail("No document returned"); - } -} - - -void MongoDBTest::testCountCommand() -{ - if (!_connected) - { - std::cout << "Not connected, test skipped." << std::endl; - return; - } - - Poco::MongoDB::QueryRequest request("team.$cmd"); - request.setNumberToReturn(1); - request.selector().add("count", std::string("players")); - - Poco::MongoDB::ResponseMessage response; - - _mongo.sendRequest(request, response); - - if ( response.documents().size() > 0 ) - { - Poco::MongoDB::Document::Ptr doc = response.documents()[0]; - double count = doc->get("n"); - assert(count == 1); - } - else - { - fail("Didn't get a response from the count command"); - } -} - - -void MongoDBTest::testDBCountCommand() -{ - if (!_connected) - { - std::cout << "Not connected, test skipped." << std::endl; - return; - } - - Poco::MongoDB::Database db("team"); - Poco::SharedPtr request = db.createCountRequest("players"); - - Poco::MongoDB::ResponseMessage response; - _mongo.sendRequest(*request, response); - - if ( response.documents().size() > 0 ) - { - Poco::MongoDB::Document::Ptr doc = response.documents()[0]; - double count = doc->get("n"); - assert(count == 1); - } - else - { - fail("Didn't get a response from the count command"); - } -} - - -void MongoDBTest::testDBCount2Command() -{ - if (!_connected) - { - std::cout << "Not connected, test skipped." << std::endl; - return; - } - - Poco::MongoDB::Database db("team"); - double count = db.count(_mongo, "players"); - assert(count == 1); -} - - -void MongoDBTest::testDeleteRequest() -{ - if (!_connected) - { - std::cout << "Not connected, test skipped." << std::endl; - return; - } - - Poco::MongoDB::DeleteRequest request("team.players"); - request.selector().add("lastname", std::string("Braem")); - - _mongo.sendRequest(request); -} - - -void MongoDBTest::testCursorRequest() -{ - if (!_connected) - { - std::cout << "Not connected, test skipped." << std::endl; - return; - } - - Poco::MongoDB::Database db("team"); - Poco::SharedPtr insertRequest = db.createInsertRequest("numbers"); - for(int i = 0; i < 10000; ++i) - { - Document::Ptr doc = new Document(); - doc->add("number", i); - insertRequest->documents().push_back(doc); - } - _mongo.sendRequest(*insertRequest); - - double count = db.count(_mongo, "numbers"); - assert(count == 10000); - - Poco::MongoDB::Cursor cursor("team", "numbers"); - - int n = 0; - Poco::MongoDB::ResponseMessage& response = cursor.next(_mongo); - while(1) - { - n += response.documents().size(); - if ( response.cursorID() == 0 ) - break; - response = cursor.next(_mongo); - } - std::cout << "n= " << n << std::endl; - assert(n == 10000); - - Poco::MongoDB::QueryRequest drop("team.$cmd"); - drop.setNumberToReturn(1); - drop.selector().add("drop", std::string("numbers")); - - Poco::MongoDB::ResponseMessage responseDrop; - _mongo.sendRequest(drop, responseDrop); - - if ( responseDrop.documents().size() > 0 ) - { - std::cout << responseDrop.documents()[0]->toString(2) << std::endl; - } -} - - -void MongoDBTest::testBuildInfo() -{ - if (!_connected) - { - std::cout << "Not connected, test skipped." << std::endl; - return; - } - - Poco::MongoDB::QueryRequest request("team.$cmd"); - request.setNumberToReturn(1); - request.selector().add("buildInfo", 1); - - Poco::MongoDB::ResponseMessage response; - - try - { - _mongo.sendRequest(request, response); - } - catch(Poco::NotImplementedException& nie) - { - std::cout << nie.message() << std::endl; - return; - } - - if ( response.documents().size() > 0 ) - { - Poco::MongoDB::Document::Ptr doc = response.documents()[0]; - std::cout << doc->toString(2); - } - else - { - fail("Didn't get a response from the buildinfo command"); - } -} - - -void MongoDBTest::testConnectionPool() -{ - Poco::Net::SocketAddress sa(_host, _port); - Poco::PoolableObjectFactory factory(sa); - Poco::ObjectPool pool(factory, 10, 15); - - Poco::MongoDB::PooledConnection pooledConnection(pool); - - Poco::MongoDB::QueryRequest request("team.$cmd"); - request.setNumberToReturn(1); - request.selector().add("count", std::string("players")); - - Poco::MongoDB::ResponseMessage response; - ((Connection::Ptr) pooledConnection)->sendRequest(request, response); - - if ( response.documents().size() > 0 ) - { - Poco::MongoDB::Document::Ptr doc = response.documents()[0]; - double count = doc->get("n"); - assert(count == 1); - } - else - { - fail("Didn't get a response from the count command"); - } -} - - -void MongoDBTest::testObjectID() -{ - ObjectId oid("536aeebba081de6815000002"); - std::string str2 = oid.toString(); - assert(str2 == "536aeebba081de6815000002"); -} - - -CppUnit::Test* MongoDBTest::suite() -{ - CppUnit::TestSuite* pSuite = new CppUnit::TestSuite("MongoDBTest"); - - CppUnit_addTest(pSuite, MongoDBTest, testInsertRequest); - CppUnit_addTest(pSuite, MongoDBTest, testQueryRequest); - CppUnit_addTest(pSuite, MongoDBTest, testDBQueryRequest); - CppUnit_addTest(pSuite, MongoDBTest, testCountCommand); - CppUnit_addTest(pSuite, MongoDBTest, testDBCountCommand); - CppUnit_addTest(pSuite, MongoDBTest, testDBCount2Command); - CppUnit_addTest(pSuite, MongoDBTest, testConnectionPool); - CppUnit_addTest(pSuite, MongoDBTest, testDeleteRequest); - CppUnit_addTest(pSuite, MongoDBTest, testBuildInfo); - CppUnit_addTest(pSuite, MongoDBTest, testCursorRequest); - CppUnit_addTest(pSuite, MongoDBTest, testObjectID); - - return pSuite; -} diff --git a/contrib/libpoco/MongoDB/testsuite/src/MongoDBTest.h b/contrib/libpoco/MongoDB/testsuite/src/MongoDBTest.h deleted file mode 100644 index 7e7de188f50..00000000000 --- a/contrib/libpoco/MongoDB/testsuite/src/MongoDBTest.h +++ /dev/null @@ -1,59 +0,0 @@ -// -// MongoDBTest.h -// -// $Id$ -// -// Definition of the MongoDBTest class. -// -// Copyright (c) 2004-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef MongoDBTest_INCLUDED -#define MongoDBTest_INCLUDED - - -#include "Poco/MongoDB/MongoDB.h" -#include "Poco/MongoDB/Connection.h" - -#include "CppUnit/TestCase.h" - - -class MongoDBTest: public CppUnit::TestCase -{ -public: - MongoDBTest(const std::string& name); - - - virtual ~MongoDBTest(); - - void testInsertRequest(); - void testQueryRequest(); - void testDBQueryRequest(); - void testCountCommand(); - void testDBCountCommand(); - void testDBCount2Command(); - void testDeleteRequest(); - void testBuildInfo(); - void testConnectionPool(); - void testCursorRequest(); - void testObjectID(); - void setUp(); - void tearDown(); - - static CppUnit::Test* suite(); - -private: - - std::string _host; - unsigned _port; - static bool _connected; - static Poco::MongoDB::Connection _mongo; - -}; - - -#endif // MongoDBTest_INCLUDED diff --git a/contrib/libpoco/MongoDB/testsuite/src/MongoDBTestSuite.cpp b/contrib/libpoco/MongoDB/testsuite/src/MongoDBTestSuite.cpp deleted file mode 100644 index e44abb94b7f..00000000000 --- a/contrib/libpoco/MongoDB/testsuite/src/MongoDBTestSuite.cpp +++ /dev/null @@ -1,24 +0,0 @@ -// -// MongoDBTestSuite.cpp -// -// $Id$ -// -// Copyright (c) 2004-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "MongoDBTestSuite.h" -#include "MongoDBTest.h" - - -CppUnit::Test* MongoDBTestSuite::suite() -{ - CppUnit::TestSuite* pSuite = new CppUnit::TestSuite("MongoDBTestSuite"); - - pSuite->addTest(MongoDBTest::suite()); - - return pSuite; -} diff --git a/contrib/libpoco/MongoDB/testsuite/src/MongoDBTestSuite.h b/contrib/libpoco/MongoDB/testsuite/src/MongoDBTestSuite.h deleted file mode 100644 index 78fe83e61f5..00000000000 --- a/contrib/libpoco/MongoDB/testsuite/src/MongoDBTestSuite.h +++ /dev/null @@ -1,29 +0,0 @@ -// -// MongoDBTestSuite.h -// -// $Id$ -// -// Definition of the MongoDBTestSuite class. -// -// Copyright (c) 2004-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef MongoDBTestSuite_INCLUDED -#define MongoDBTestSuite_INCLUDED - - -#include "CppUnit/TestSuite.h" - - -class MongoDBTestSuite -{ -public: - static CppUnit::Test* suite(); -}; - - -#endif // MongoDBTestSuite_INCLUDED diff --git a/contrib/libpoco/MongoDB/testsuite/src/WinCEDriver.cpp b/contrib/libpoco/MongoDB/testsuite/src/WinCEDriver.cpp deleted file mode 100644 index 4eb5b680104..00000000000 --- a/contrib/libpoco/MongoDB/testsuite/src/WinCEDriver.cpp +++ /dev/null @@ -1,32 +0,0 @@ -// -// WinCEDriver.cpp -// -// $Id$ -// -// Console-based test driver for Windows CE. -// -// Copyright (c) 2004-2010, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "CppUnit/TestRunner.h" -#include "MongoDBTestSuite.h" -#include - - -int _tmain(int argc, wchar_t* argv[]) -{ - std::vector args; - for (int i = 0; i < argc; ++i) - { - char buffer[1024]; - std::wcstombs(buffer, argv[i], sizeof(buffer)); - args.push_back(std::string(buffer)); - } - CppUnit::TestRunner runner; - runner.addTest("MongoDBTestSuite", MongoDBTestSuite::suite()); - return runner.run(args) ? 0 : 1; -} diff --git a/contrib/libpoco/MongoDB/testsuite/src/WinDriver.cpp b/contrib/libpoco/MongoDB/testsuite/src/WinDriver.cpp deleted file mode 100644 index 384b56574e4..00000000000 --- a/contrib/libpoco/MongoDB/testsuite/src/WinDriver.cpp +++ /dev/null @@ -1,30 +0,0 @@ -// -// WinDriver.cpp -// -// $Id$ -// -// Windows test driver for Poco MongoDB. -// -// Copyright (c) 2004-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "WinTestRunner/WinTestRunner.h" -#include "MongoDBTestSuite.h" - - -class TestDriver: public CppUnit::WinTestRunnerApp -{ - void TestMain() - { - CppUnit::WinTestRunner runner; - runner.addTest(MongoDBTestSuite::suite()); - runner.run(); - } -}; - - -TestDriver theDriver; diff --git a/contrib/libpoco/NEWS b/contrib/libpoco/NEWS deleted file mode 100644 index 80109d55e2b..00000000000 --- a/contrib/libpoco/NEWS +++ /dev/null @@ -1,5 +0,0 @@ -As of release 1.4 this file is no longer maintained. -Please see the CHANGELOG for what's new in each release. - --- -$Id: //poco/1.4/dist/NEWS#1 $ diff --git a/contrib/libpoco/Net/CMakeLists.txt b/contrib/libpoco/Net/CMakeLists.txt deleted file mode 100644 index b55b188840d..00000000000 --- a/contrib/libpoco/Net/CMakeLists.txt +++ /dev/null @@ -1,42 +0,0 @@ -set(LIBNAME "PocoNet") -set(POCO_LIBNAME "${LIBNAME}") - -# Sources -file(GLOB SRCS_G "src/*.cpp") -POCO_SOURCES_AUTO( SRCS ${SRCS_G}) - -# Headers -file(GLOB_RECURSE HDRS_G "include/*.h" ) -POCO_HEADERS_AUTO( SRCS ${HDRS_G}) - -# Windows and WindowsCE need additional libraries -if(WIN32) - if(WINCE) - set(SYSLIBS ${SYSLIBS} "ws2.lib" "iphlpapi.lib") - else() - set(SYSLIBS ${SYSLIBS} "ws2_32.lib" "iphlpapi.lib") - endif() -else() - include(cmake/test_anl.cmake) - if (HAVE_GETADDRINFO_A) - set(SYSLIBS ${SYSLIBS} "${ANL_LIB}") - endif() -endif(WIN32) - -include_directories (BEFORE include) - -add_library( "${LIBNAME}" ${LIB_MODE} ${SRCS} ) -set_target_properties( "${LIBNAME}" - PROPERTIES - VERSION ${SHARED_LIBRARY_VERSION} SOVERSION ${SHARED_LIBRARY_VERSION} - OUTPUT_NAME ${POCO_LIBNAME} - DEFINE_SYMBOL Net_EXPORTS - ) - -target_link_libraries( "${LIBNAME}" PocoFoundation ${SYSLIBS}) - -if (POCO_ENABLE_TESTS) - add_subdirectory(samples) - add_subdirectory(testsuite) -endif () - diff --git a/contrib/libpoco/Net/cmake/PocoNetConfig.cmake b/contrib/libpoco/Net/cmake/PocoNetConfig.cmake deleted file mode 100644 index 5e4df49eb67..00000000000 --- a/contrib/libpoco/Net/cmake/PocoNetConfig.cmake +++ /dev/null @@ -1,3 +0,0 @@ -include(CMakeFindDependencyMacro) -find_dependency(PocoFoundation) -include("${CMAKE_CURRENT_LIST_DIR}/PocoNetTargets.cmake") diff --git a/contrib/libpoco/Net/cmake/test_anl.cmake b/contrib/libpoco/Net/cmake/test_anl.cmake deleted file mode 100644 index 2beb81873a8..00000000000 --- a/contrib/libpoco/Net/cmake/test_anl.cmake +++ /dev/null @@ -1,40 +0,0 @@ -# -# On ubuntu 16.10 static link libanl.a fails with -fPIC error -# - -include (CheckCXXSourceRuns) -include (CMakePushCheckState) - -find_package (Threads) - -cmake_push_check_state () - -if (USE_STATIC_LIBRARIES) - set (ANL_LIB_NAME "libanl.a") -else () - set(ANL_LIB_NAME "anl") -endif () - -find_library (ANL_LIB NAMES ${ANL_LIB_NAME}) - -# better use Threads::Threads but incompatible with cmake < 3 -if (ANL_LIB) - set (CMAKE_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES} ${ANL_LIB}) -endif () -set (CMAKE_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT}) - -check_cxx_source_runs(" - #include - int main() { - getaddrinfo_a(GAI_NOWAIT, nullptr, 0, nullptr); - return 0; - } -" HAVE_GETADDRINFO_A) - -#message(STATUS "test_anl: USE_STATIC_LIBRARIES=${USE_STATIC_LIBRARIES} ANL_LIB_NAME=${ANL_LIB_NAME} ANL_LIB=${ANL_LIB} HAVE_GETADDRINFO_A=${HAVE_GETADDRINFO_A} CMAKE_REQUIRED_LIBRARIES=${CMAKE_REQUIRED_LIBRARIES}") - -if (HAVE_GETADDRINFO_A) - add_definitions (-DHAVE_GETADDRINFO_A=1) -endif () - -cmake_pop_check_state () diff --git a/contrib/libpoco/Net/include/Poco/Net/AbstractHTTPRequestHandler.h b/contrib/libpoco/Net/include/Poco/Net/AbstractHTTPRequestHandler.h deleted file mode 100644 index 9b0cc081184..00000000000 --- a/contrib/libpoco/Net/include/Poco/Net/AbstractHTTPRequestHandler.h +++ /dev/null @@ -1,138 +0,0 @@ -// -// AbstractHTTPRequestHandler.h -// -// $Id: //poco/1.4/Net/include/Poco/Net/AbstractHTTPRequestHandler.h#1 $ -// -// Library: Net -// Package: HTTPServer -// Module: AbstractHTTPRequestHandler -// -// Definition of the AbstractHTTPRequestHandler class. -// -// Copyright (c) 2007, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Net_AbstractHTTPRequestHandler_INCLUDED -#define Net_AbstractHTTPRequestHandler_INCLUDED - - -#include "Poco/Net/HTTPRequestHandler.h" -#include "Poco/Net/HTTPResponse.h" - - -namespace Poco { -namespace Net { - - -class HTMLForm; - - -class Net_API AbstractHTTPRequestHandler: public HTTPRequestHandler - /// The abstract base class for AbstractHTTPRequestHandlers - /// created by HTTPServer. - /// - /// Derived classes must override the run() method. - - /// Contrary to a HTTPRequestHandler, an AbstractHTTPRequestHandler - /// stores request and response as member variables to avoid having - /// to pass them around as method parameters. Additionally, a - /// HTMLForm object is created for use by subclasses. - /// - /// The run() method must perform the complete handling - /// of the HTTP request connection. As soon as the run() - /// method returns, the request handler object is destroyed. - /// - /// A new AbstractHTTPRequestHandler object will be created for - /// each new HTTP request that is received by the HTTPServer. -{ -public: - AbstractHTTPRequestHandler(); - /// Creates the AbstractHTTPRequestHandler. - - virtual ~AbstractHTTPRequestHandler(); - /// Destroys the AbstractHTTPRequestHandler. - - void handleRequest(HTTPServerRequest& request, HTTPServerResponse& response); - /// This class implements some common behavior, - /// before calling run() to actually handle the request: - /// - save request and response objects; - /// - call authorize(); - /// - if authorize() returns true call run(), - /// else send 401 (Unauthorized) response. - /// - /// If run() throws an exception and the response has not been - /// sent yet, sends a 500 (Internal Server Error) response with - /// the exception's display text. - - HTTPServerRequest& request(); - /// Returns the request. - - HTTPServerResponse& response(); - /// Returns the response. - - HTMLForm& form(); - /// Returns a HTMLForm for the given request. - /// The HTMLForm object is created when this - /// member function is executed the first time. - - void sendErrorResponse(HTTPResponse::HTTPStatus status, const std::string& message); - /// Sends a HTML error page for the given status code. - /// The given message is added to the page: - /// - /// - /// status - reason - /// - /// - ///

status - reason

- ///

message

- /// - /// - -protected: - virtual void run() = 0; - /// Must be overridden by subclasses. - /// - /// Handles the given request. - - virtual bool authenticate(); - /// Check authentication; returns true if okay, false if failed to authenticate. - /// The default implementation always returns true. - /// - /// Subclasses can override this member function to perform - /// some form of client or request authentication before - /// the request is actually handled. - -private: - HTTPServerRequest* _pRequest; - HTTPServerResponse* _pResponse; - HTMLForm* _pForm; -}; - - -// -// inlines -// -inline HTTPServerRequest& AbstractHTTPRequestHandler::request() -{ - poco_check_ptr (_pRequest); - - return *_pRequest; -} - - -inline HTTPServerResponse& AbstractHTTPRequestHandler::response() -{ - poco_check_ptr (_pResponse); - - return *_pResponse; -} - - -} } // namespace Poco::Net - - -#endif // Net_AbstractHTTPRequestHandler_INCLUDED diff --git a/contrib/libpoco/Net/include/Poco/Net/DNS.h b/contrib/libpoco/Net/include/Poco/Net/DNS.h deleted file mode 100644 index 9f6c259b9bb..00000000000 --- a/contrib/libpoco/Net/include/Poco/Net/DNS.h +++ /dev/null @@ -1,162 +0,0 @@ -// -// DNS.h -// -// $Id: //poco/1.4/Net/include/Poco/Net/DNS.h#2 $ -// -// Library: Net -// Package: NetCore -// Module: DNS -// -// Definition of the DNS class. -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Net_DNS_INCLUDED -#define Net_DNS_INCLUDED - - -#include "Poco/Net/Net.h" -#include "Poco/Net/SocketDefs.h" -#include "Poco/Net/IPAddress.h" -#include "Poco/Net/HostEntry.h" - -#include "Poco/Timespan.h" - - -namespace Poco { -namespace Net { - - -class Net_API DNS - /// This class provides an interface to the - /// domain name service. - /// - /// An internal DNS cache is used to speed up name lookups. -{ -public: - - enum HintFlag - { - DNS_HINT_NONE = 0, -#ifdef POCO_HAVE_ADDRINFO - DNS_HINT_AI_PASSIVE = AI_PASSIVE, // Socket address will be used in bind() call - DNS_HINT_AI_CANONNAME = AI_CANONNAME, // Return canonical name in first ai_canonname - DNS_HINT_AI_NUMERICHOST = AI_NUMERICHOST, // Nodename must be a numeric address string - DNS_HINT_AI_NUMERICSERV = AI_NUMERICSERV, // Servicename must be a numeric port number - DNS_HINT_AI_ALL = AI_ALL, // Query both IP6 and IP4 with AI_V4MAPPED - DNS_HINT_AI_ADDRCONFIG = AI_ADDRCONFIG, // Resolution only if global address configured - DNS_HINT_AI_V4MAPPED = AI_V4MAPPED, // On v6 failure, query v4 and convert to V4MAPPED format -#endif - }; - - static const Poco::Timespan DEFAULT_DNS_TIMEOUT; - - static HostEntry hostByName(const std::string& hostname, const Poco::Timespan * timeout_ = &DEFAULT_DNS_TIMEOUT, unsigned hintFlags = -#ifdef POCO_HAVE_ADDRINFO - DNS_HINT_AI_CANONNAME | DNS_HINT_AI_ADDRCONFIG -#else - DNS_HINT_NONE -#endif - ); - /// Returns a HostEntry object containing the DNS information - /// for the host with the given name. HintFlag argument is only - /// used on platforms that have getaddrinfo(). - /// - /// Throws a HostNotFoundException if a host with the given - /// name cannot be found. - /// - /// Throws a NoAddressFoundException if no address can be - /// found for the hostname. - /// - /// Throws a DNSException in case of a general DNS error. - /// - /// Throws an IOException in case of any other error. - - static HostEntry hostByAddress(const IPAddress& address, const Poco::Timespan * timeout_ = &DEFAULT_DNS_TIMEOUT, unsigned hintFlags = -#ifdef POCO_HAVE_ADDRINFO - DNS_HINT_AI_CANONNAME | DNS_HINT_AI_ADDRCONFIG -#else - DNS_HINT_NONE -#endif - ); - /// Returns a HostEntry object containing the DNS information - /// for the host with the given IP address. HintFlag argument is only - /// used on platforms that have getaddrinfo(). - /// - /// Throws a HostNotFoundException if a host with the given - /// name cannot be found. - /// - /// Throws a DNSException in case of a general DNS error. - /// - /// Throws an IOException in case of any other error. - - static HostEntry resolve(const std::string& address); - /// Returns a HostEntry object containing the DNS information - /// for the host with the given IP address or host name. - /// - /// Throws a HostNotFoundException if a host with the given - /// name cannot be found. - /// - /// Throws a NoAddressFoundException if no address can be - /// found for the hostname. - /// - /// Throws a DNSException in case of a general DNS error. - /// - /// Throws an IOException in case of any other error. - - static IPAddress resolveOne(const std::string& address); - /// Convenience method that calls resolve(address) and returns - /// the first address from the HostInfo. - - static HostEntry thisHost(); - /// Returns a HostEntry object containing the DNS information - /// for this host. - /// - /// Throws a HostNotFoundException if DNS information - /// for this host cannot be found. - /// - /// Throws a NoAddressFoundException if no address can be - /// found for this host. - /// - /// Throws a DNSException in case of a general DNS error. - /// - /// Throws an IOException in case of any other error. - - static void reload(); - /// Reloads the resolver configuration. - /// - /// This method will call res_init() if the Net library - /// has been compiled with -DPOCO_HAVE_LIBRESOLV. Otherwise - /// it will do nothing. - - //@ deprecated - static void flushCache(); - /// Flushes the internal DNS cache. - /// - /// As of 1.4.2, the DNS cache is no longer used - /// and this method does not do anything. - - static std::string hostName(); - /// Returns the host name of this host. - -protected: - static int lastError(); - /// Returns the code of the last error. - - static void error(int code, const std::string& arg); - /// Throws an exception according to the error code. - - static void aierror(int code, const std::string& arg); - /// Throws an exception according to the getaddrinfo() error code. -}; - - -} } // namespace Poco::Net - - -#endif // Net_DNS_INCLUDED diff --git a/contrib/libpoco/Net/include/Poco/Net/DatagramSocket.h b/contrib/libpoco/Net/include/Poco/Net/DatagramSocket.h deleted file mode 100644 index 6a25fc7c8ff..00000000000 --- a/contrib/libpoco/Net/include/Poco/Net/DatagramSocket.h +++ /dev/null @@ -1,149 +0,0 @@ -// -// DatagramSocket.h -// -// $Id: //poco/1.4/Net/include/Poco/Net/DatagramSocket.h#1 $ -// -// Library: Net -// Package: Sockets -// Module: DatagramSocket -// -// Definition of the DatagramSocket class. -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Net_DatagramSocket_INCLUDED -#define Net_DatagramSocket_INCLUDED - - -#include "Poco/Net/Net.h" -#include "Poco/Net/Socket.h" - - -namespace Poco { -namespace Net { - - -class Net_API DatagramSocket: public Socket - /// This class provides an interface to an - /// UDP stream socket. -{ -public: - DatagramSocket(); - /// Creates an unconnected IPv4 datagram socket. - - explicit DatagramSocket(IPAddress::Family family); - /// Creates an unconnected datagram socket. - /// - /// The socket will be created for the - /// given address family. - - DatagramSocket(const SocketAddress& address, bool reuseAddress = false); - /// Creates a datagram socket and binds it - /// to the given address. - /// - /// Depending on the address family, the socket - /// will be either an IPv4 or an IPv6 socket. - - DatagramSocket(const Socket& socket); - /// Creates the DatagramSocket with the SocketImpl - /// from another socket. The SocketImpl must be - /// a DatagramSocketImpl, otherwise an InvalidArgumentException - /// will be thrown. - - ~DatagramSocket(); - /// Destroys the DatagramSocket. - - DatagramSocket& operator = (const Socket& socket); - /// Assignment operator. - /// - /// Releases the socket's SocketImpl and - /// attaches the SocketImpl from the other socket and - /// increments the reference count of the SocketImpl. - - void connect(const SocketAddress& address); - /// Restricts incoming and outgoing - /// packets to the specified address. - /// - /// Calls to connect() cannot come before calls to bind(). - - void bind(const SocketAddress& address, bool reuseAddress = false); - /// 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. - /// - /// Calls to connect cannot() come before calls to bind(). - - int sendBytes(const void* buffer, int length, int flags = 0); - /// Sends the contents of the given buffer through - /// the socket. - /// - /// Returns the number of bytes sent, which may be - /// less than the number of bytes specified. - - int receiveBytes(void* buffer, int length, int flags = 0); - /// Receives data from the socket and stores it - /// in buffer. Up to length bytes are received. - /// - /// Returns the number of bytes received. - - int sendTo(const void* buffer, int length, const SocketAddress& address, int flags = 0); - /// Sends the contents of the given buffer through - /// the socket to the given address. - /// - /// Returns the number of bytes sent, which may be - /// less than the number of bytes specified. - - int receiveFrom(void* buffer, int length, SocketAddress& address, int flags = 0); - /// Receives data from the socket and stores it - /// in buffer. Up to length bytes are received. - /// Stores the address of the sender in address. - /// - /// Returns the number of bytes received. - - void setBroadcast(bool flag); - /// Sets the value of the SO_BROADCAST socket option. - /// - /// Setting this flag allows sending datagrams to - /// the broadcast address. - - bool getBroadcast() const; - /// Returns the value of the SO_BROADCAST socket option. - -protected: - DatagramSocket(SocketImpl* pImpl); - /// Creates the Socket and attaches the given SocketImpl. - /// The socket takes owership of the SocketImpl. - /// - /// The SocketImpl must be a StreamSocketImpl, otherwise - /// an InvalidArgumentException will be thrown. -}; - - -// -// inlines -// -inline void DatagramSocket::setBroadcast(bool flag) -{ - impl()->setBroadcast(flag); -} - - -inline bool DatagramSocket::getBroadcast() const -{ - return impl()->getBroadcast(); -} - - -} } // namespace Poco::Net - - -#endif // Net_DatagramSocket_INCLUDED diff --git a/contrib/libpoco/Net/include/Poco/Net/DatagramSocketImpl.h b/contrib/libpoco/Net/include/Poco/Net/DatagramSocketImpl.h deleted file mode 100644 index ce36cfeea0c..00000000000 --- a/contrib/libpoco/Net/include/Poco/Net/DatagramSocketImpl.h +++ /dev/null @@ -1,61 +0,0 @@ -// -// DatagramSocketImpl.h -// -// $Id: //poco/1.4/Net/include/Poco/Net/DatagramSocketImpl.h#1 $ -// -// Library: Net -// Package: Sockets -// Module: DatagramSocketImpl -// -// Definition of the DatagramSocketImpl class. -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Net_DatagramSocketImpl_INCLUDED -#define Net_DatagramSocketImpl_INCLUDED - - -#include "Poco/Net/Net.h" -#include "Poco/Net/SocketImpl.h" - - -namespace Poco { -namespace Net { - - -class Net_API DatagramSocketImpl: public SocketImpl - /// This class implements an UDP socket. -{ -public: - DatagramSocketImpl(); - /// Creates a DatagramSocketImpl. - /// - /// If the system supports IPv6, the socket will - /// be an IPv6 socket. Otherwise, it will be - /// an IPv4 socket. - - explicit DatagramSocketImpl(IPAddress::Family family); - /// Creates an unconnected datagram socket. - /// - /// The socket will be created for the - /// given address family. - - DatagramSocketImpl(poco_socket_t sockfd); - /// Creates a StreamSocketImpl using the given native socket. - -protected: - void init(int af); - - ~DatagramSocketImpl(); -}; - - -} } // namespace Poco::Net - - -#endif // Net_DatagramSocketImpl_INCLUDED diff --git a/contrib/libpoco/Net/include/Poco/Net/DialogSocket.h b/contrib/libpoco/Net/include/Poco/Net/DialogSocket.h deleted file mode 100644 index a033979ca63..00000000000 --- a/contrib/libpoco/Net/include/Poco/Net/DialogSocket.h +++ /dev/null @@ -1,211 +0,0 @@ -// -// DialogSocket.h -// -// $Id: //poco/1.4/Net/include/Poco/Net/DialogSocket.h#2 $ -// -// Library: Net -// Package: Sockets -// Module: DialogSocket -// -// Definition of the DialogSocket class. -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Net_DialogSocket_INCLUDED -#define Net_DialogSocket_INCLUDED - - -#include "Poco/Net/Net.h" -#include "Poco/Net/StreamSocket.h" - - -namespace Poco { -namespace Net { - - -class Net_API DialogSocket: public StreamSocket - /// DialogSocket is a subclass of StreamSocket that - /// can be used for implementing request-response - /// based client server connections. - /// - /// A request is always a single-line command terminated - /// by CR-LF. - /// - /// A response can either be a single line of text terminated - /// by CR-LF, or multiple lines of text in the format used - /// by the FTP and SMTP protocols. - /// - /// Limited support for the TELNET protocol (RFC 854) is - /// available. - /// - /// Warning: Do not call receiveBytes() on a DialogSocket. - /// Due to internal buffering in DialogSocket, receiveBytes() - /// may return an unexpected result and interfere with - /// DialogSocket's buffering. Use receiveRawBytes() instead. -{ -public: - DialogSocket(); - /// Creates an unconnected stream socket. - /// - /// Before sending or receiving data, the socket - /// must be connected with a call to connect(). - - explicit DialogSocket(const SocketAddress& address); - /// Creates a stream socket and connects it to - /// the socket specified by address. - - DialogSocket(const Socket& socket); - /// Creates the DialogSocket with the SocketImpl - /// from another socket. The SocketImpl must be - /// a StreamSocketImpl, otherwise an InvalidArgumentException - /// will be thrown. - - DialogSocket(const DialogSocket& socket); - /// Creates the DialogSocket as copy of another dialog socket. - - ~DialogSocket(); - /// Destroys the DialogSocket. - - DialogSocket& operator = (const Socket& socket); - /// Assignment operator. - /// - /// Releases the socket's SocketImpl and - /// attaches the SocketImpl from the other socket and - /// increments the reference count of the SocketImpl. - - DialogSocket& operator = (const DialogSocket& socket); - /// Assignment operator. - - void sendByte(unsigned char ch); - /// Sends a single byte over the socket connection. - - void sendString(const char* str); - /// Sends the given null-terminated string over - /// the socket connection. - - void sendString(const std::string& str); - /// Sends the given string over the socket connection. - - void sendMessage(const std::string& message); - /// Appends a CR-LF sequence to the message and sends it - /// over the socket connection. - - void sendMessage(const std::string& message, const std::string& arg); - /// Concatenates message and arg, separated by a space, appends a - /// CR-LF sequence, and sends the result over the socket connection. - - void sendMessage(const std::string& message, const std::string& arg1, const std::string& arg2); - /// Concatenates message and args, separated by a space, appends a - /// CR-LF sequence, and sends the result over the socket connection. - - bool receiveMessage(std::string& message); - /// Receives a single-line message, terminated by CR-LF, - /// from the socket connection and appends it to response. - /// - /// Returns true if a message has been read or false if - /// the connection has been closed by the peer. - - int receiveStatusMessage(std::string& message); - /// Receives a single-line or multi-line response from - /// the socket connection. The format must be according to - /// one of the response formats specified in the FTP (RFC 959) - /// or SMTP (RFC 2821) specifications. - /// - /// The first line starts with a 3-digit status code. - /// Following the status code is either a space character (' ' ) - /// (in case of a single-line response) or a minus character ('-') - /// in case of a multi-line response. The following lines can have - /// a three-digit status code followed by a minus-sign and some - /// text, or some arbitrary text only. The last line again begins - /// with a three-digit status code (which must be the same as the - /// one in the first line), followed by a space and some arbitrary - /// text. All lines must be terminated by a CR-LF sequence. - /// - /// The response contains all response lines, separated by a newline - /// character, including the status code. The status code is returned. - /// If the response line does not contain a status code, 0 is returned. - - int get(); - /// Reads one character from the connection. - /// - /// Returns -1 (EOF_CHAR) if no more characters are available. - - int peek(); - /// Returns the character that would be returned by the next call - /// to get(), without actually extracting the character from the - /// buffer. - /// - /// Returns -1 (EOF_CHAR) if no more characters are available. - - int receiveRawBytes(void* buffer, int length); - /// Read up to length bytes from the connection and place - /// them into buffer. If there are data bytes in the internal - /// buffer, these bytes are returned first. - /// - /// Use this member function instead of receiveBytes(). - /// - /// Returns the number of bytes read, which may be - /// less than requested. - - void synch(); - /// Sends a TELNET SYNCH signal over the connection. - /// - /// According to RFC 854, a TELNET_DM char is sent - /// via sendUrgent(). - - void sendTelnetCommand(unsigned char command); - /// Sends a TELNET command sequence (TELNET_IAC followed - /// by the given command) over the connection. - - void sendTelnetCommand(unsigned char command, unsigned char arg); - /// Sends a TELNET command sequence (TELNET_IAC followed - /// by the given command, followed by arg) over the connection. - - enum TelnetCodes - { - TELNET_SE = 240, - TELNET_NOP = 241, - TELNET_DM = 242, - TELNET_BRK = 243, - TELNET_IP = 244, - TELNET_AO = 245, - TELNET_AYT = 246, - TELNET_EC = 247, - TELNET_EL = 248, - TELNET_GA = 249, - TELNET_SB = 250, - TELNET_WILL = 251, - TELNET_WONT = 252, - TELNET_DO = 253, - TELNET_DONT = 254, - TELNET_IAC = 255 - }; - -protected: - void allocBuffer(); - void refill(); - bool receiveLine(std::string& line); - int receiveStatusLine(std::string& line); - -private: - enum - { - RECEIVE_BUFFER_SIZE = 1024, - EOF_CHAR = -1 - }; - - char* _pBuffer; - char* _pNext; - char* _pEnd; -}; - - -} } // namespace Poco::Net - - -#endif // Net_DialogSocket_INCLUDED diff --git a/contrib/libpoco/Net/include/Poco/Net/FTPClientSession.h b/contrib/libpoco/Net/include/Poco/Net/FTPClientSession.h deleted file mode 100644 index f16c2ff5c61..00000000000 --- a/contrib/libpoco/Net/include/Poco/Net/FTPClientSession.h +++ /dev/null @@ -1,405 +0,0 @@ -// -// FTPClientSession.h -// -// $Id: //poco/svn/Net/include/Poco/Net/FTPClientSession.h#2 $ -// -// Library: Net -// Package: FTP -// Module: FTPClientSession -// -// Definition of the FTPClientSession class. -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Net_FTPClientSession_INCLUDED -#define Net_FTPClientSession_INCLUDED - - -#include "Poco/Net/Net.h" -#include "Poco/Net/DialogSocket.h" -#include "Poco/Timespan.h" -#include -#include - - -namespace Poco { -namespace Net { - - -class SocketStream; - - -class Net_API FTPClientSession - /// This class implements an File Transfer Protocol - /// (FTP, RFC 959) client. - /// - /// Most of the features of the FTP protocol, as specified - /// in RFC 959, are supported. Not supported are EBCDIC and - /// LOCAL data types and format control and structured files. - /// - /// Also supported are the EPRT and EPSV commands from - /// RFC 1738 (FTP Extensions for IPv6 and NAT). - /// The client will first attempt to use the EPRT and EPSV - /// commands. If the server does not supports these commands, - /// the client will fall back to PORT and PASV. -{ -public: - enum - { - FTP_PORT = 21 - }; - - enum FileType - { - TYPE_TEXT, // TYPE A (ASCII) - TYPE_BINARY // TYPE I (Image) - }; - - FTPClientSession(); - /// Creates an FTPClientSession. - /// - /// Passive mode will be used for data transfers. - - explicit FTPClientSession(const StreamSocket& socket); - /// Creates an FTPClientSession using the given - /// connected socket for the control connection. - /// - /// Passive mode will be used for data transfers. - - FTPClientSession(const std::string& host, - Poco::UInt16 port = FTP_PORT, - const std::string& username = "", - const std::string& password = ""); - /// Creates an FTPClientSession using a socket connected - /// to the given host and port. If username is supplied, - /// login is attempted. - /// - /// Passive mode will be used for data transfers. - - virtual ~FTPClientSession(); - /// Destroys the FTPClientSession. - - void setTimeout(const Poco::Timespan& timeout); - /// Sets the timeout for socket operations. - - Poco::Timespan getTimeout() const; - /// Returns the timeout for socket operations. - - void setPassive(bool flag, bool useRFC1738 = true); - /// Enables (default) or disables FTP passive mode for this session. - /// - /// If useRFC1738 is true (the default), the RFC 1738 - /// EPSV command is used (with a fallback to PASV if EPSV fails) - /// for switching to passive mode. The same applies to - /// EPRT and PORT for active connections. - - bool getPassive() const; - /// Returns true iff passive mode is enabled for this connection. - - void open(const std::string& host, - Poco::UInt16 port, - const std::string& username = "", - const std::string& password = ""); - /// Opens the FTP connection to the given host and port. - /// If username is supplied, login is attempted. - - void login(const std::string& username, const std::string& password); - /// Authenticates the user against the FTP server. Must be - /// called before any other commands (except QUIT) can be sent. - /// - /// Sends a USER command followed by a PASS command with the - /// respective arguments to the server. - /// - /// Throws a FTPException in case of a FTP-specific error, or a - /// NetException in case of a general network communication failure. - - void logout(); - - void close(); - /// Sends a QUIT command and closes the connection to the server. - /// - /// Throws a FTPException in case of a FTP-specific error, or a - /// NetException in case of a general network communication failure. - - std::string systemType(); - /// Returns the system type of the FTP server. - /// - /// Sends a SYST command to the server and returns the result. - - void setFileType(FileType type); - /// Sets the file type for transferring files. - /// - /// Sends a TYPE command with a corresponsing argument to the - /// server. - /// - /// Throws a FTPException in case of a FTP-specific error, or a - /// NetException in case of a general network communication failure. - - FileType getFileType() const; - /// Returns the file type for transferring files. - - void setWorkingDirectory(const std::string& path); - /// Changes the current working directory on the server. - /// - /// Sends a CWD command with the given path as argument to the - /// server. - /// - /// Throws a FTPException in case of a FTP-specific error, or a - /// NetException in case of a general network communication failure. - - std::string getWorkingDirectory(); - /// Returns the current working directory on the server. - /// - /// Throws a FTPException in case of a FTP-specific error, or a - /// NetException in case of a general network communication failure. - - void cdup(); - /// Moves one directory up from the current working directory - /// on teh server. - /// - /// Sends a CDUP command to the server. - /// - /// Throws a FTPException in case of a FTP-specific error, or a - /// NetException in case of a general network communication failure. - - void rename(const std::string& oldName, const std::string& newName); - /// Renames the file on the server given by oldName to newName. - /// - /// Sends a RNFR command, followed by a RNTO command to the server. - /// - /// Throws a FTPException in case of a FTP-specific error, or a - /// NetException in case of a general network communication failure. - - void remove(const std::string& path); - /// Deletes the file specified by path on the server. - /// - /// Sends a DELE command with path as argument to the server. - /// - /// Throws a FTPException in case of a FTP-specific error, or a - /// NetException in case of a general network communication failure. - - void createDirectory(const std::string& path); - /// Creates a new directory with the given path on the server. - /// - /// Sends a MKD command with path as argument to the server. - /// - /// Throws a FTPException in case of a FTP-specific error, or a - /// NetException in case of a general network communication failure. - - void removeDirectory(const std::string& path); - /// Removes the directory specified by path from the server. - /// - /// Sends a RMD command with path as argument to the server. - /// - /// Throws a FTPException in case of a FTP-specific error, or a - /// NetException in case of a general network communication failure. - - std::istream& beginDownload(const std::string& path); - /// Starts downloading the file with the given name. - /// After all data has been read from the returned stream, - /// endDownload() must be called to finish the download. - /// - /// A stream for reading the file's content is returned. - /// The stream is valid until endDownload() is called. - /// - /// Creates a data connection between the client and the - /// server. If passive mode is on, then the server waits for - /// a connection request from the client. Otherwise, the - /// client waits for a connection request from the server. - /// After establishing the data connection, a SocketStream - /// for transferring the data is created. - /// - /// If ASCII transfer mode is selected, the caller is - /// responsible for converting the received data to - /// the native text file format. - /// The InputLineEndingConverter class from the Foundation - /// library can be used for that purpose. - - void endDownload(); - /// Must be called to complete a download initiated with - /// beginDownload(). - - std::ostream& beginUpload(const std::string& path); - /// Starts uploading the file with the given name. - /// After all data has been written to the returned stream, - /// endUpload() must be called to finish the download. - /// - /// A stream for reading the file's content is returned. - /// The stream is valid until endUpload() is called. - /// - /// Creates a data connection between the client and the - /// server. If passive mode is on, then the server waits for - /// a connection request from the client. Otherwise, the - /// client waits for a connection request from the server. - /// After establishing the data connection, a SocketStream - /// for transferring the data is created. - /// - /// If ASCII transfer mode is selected, the caller is - /// responsible for converting the data to be sent - /// into network (CR-LF line endings) format. - /// The OutputLineEndingConverter class from the Foundation - /// library can be used for that purpose. - - void endUpload(); - /// Must be called to complete an upload initiated with - /// beginUpload(). - - std::istream& beginList(const std::string& path = "", bool extended = false); - /// Starts downloading a directory listing. - /// After all data has been read from the returned stream, - /// endList() must be called to finish the download. - /// - /// A stream for reading the directory data is returned. - /// The stream is valid until endList() is called. - /// - /// Optionally, a path to a directory or file can be specified. - /// According to the FTP prototol, if a path to a filename is - /// given, only information for the specific file is returned. - /// If a path to a directory is given, a listing of that directory - /// is returned. If no path is given, a listing of the current - /// working directory is returned. - /// - /// If extended is false, only a filenames (one per line) are - /// returned. Otherwise, a full directory listing including - /// file attributes is returned. The format of this listing - /// depends on the FTP server. No attempt is made to interpret - /// this data. - /// - /// Creates a data connection between the client and the - /// server. If passive mode is on, then the server waits for - /// a connection request from the client. Otherwise, the - /// client waits for a connection request from the server. - /// After establishing the data connection, a SocketStream - /// for transferring the data is created. - - void endList(); - /// Must be called to complete a directory listing download - /// initiated with beginList(). - - void abort(); - /// Aborts the download or upload currently in progress. - /// - /// Sends a TELNET IP/SYNCH sequence, followed by an ABOR - /// command to the server. - /// - /// A separate call to endDownload() or endUpload() is - /// not necessary. - - int sendCommand(const std::string& command, std::string& response); - /// Sends the given command verbatim to the server - /// and waits for a response. - - int sendCommand(const std::string& command, const std::string& arg, std::string& response); - /// Sends the given command verbatim to the server - /// and waits for a response. - - bool isOpen() const; - /// Returns true if the connection with FTP server is opened. - - bool isLoggedIn() const; - /// Returns true if the session is logged in. - -protected: - enum StatusClass - { - FTP_POSITIVE_PRELIMINARY = 1, - FTP_POSITIVE_COMPLETION = 2, - FTP_POSITIVE_INTERMEDIATE = 3, - FTP_TRANSIENT_NEGATIVE = 4, - FTP_PERMANENT_NEGATIVE = 5 - }; - enum - { - DEFAULT_TIMEOUT = 30000000 // 30 seconds default timeout for socket operations - }; - - static bool isPositivePreliminary(int status); - static bool isPositiveCompletion(int status); - static bool isPositiveIntermediate(int status); - static bool isTransientNegative(int status); - static bool isPermanentNegative(int status); - std::string extractPath(const std::string& response); - StreamSocket establishDataConnection(const std::string& command, const std::string& arg); - StreamSocket activeDataConnection(const std::string& command, const std::string& arg); - StreamSocket passiveDataConnection(const std::string& command, const std::string& arg); - void sendPortCommand(const SocketAddress& addr); - SocketAddress sendPassiveCommand(); - bool sendEPRT(const SocketAddress& addr); - void sendPORT(const SocketAddress& addr); - bool sendEPSV(SocketAddress& addr); - void sendPASV(SocketAddress& addr); - void parseAddress(const std::string& str, SocketAddress& addr); - void parseExtAddress(const std::string& str, SocketAddress& addr); - void endTransfer(); - -private: - FTPClientSession(const FTPClientSession&); - FTPClientSession& operator = (const FTPClientSession&); - - std::string _host; - Poco::UInt16 _port; - DialogSocket* _pControlSocket; - SocketStream* _pDataStream; - bool _passiveMode; - FileType _fileType; - bool _supports1738; - bool _serverReady; - bool _isLoggedIn; - Poco::Timespan _timeout; -}; - - -// -// inlines -// -inline bool FTPClientSession::isPositivePreliminary(int status) -{ - return status/100 == FTP_POSITIVE_PRELIMINARY; -} - - -inline bool FTPClientSession::isPositiveCompletion(int status) -{ - return status/100 == FTP_POSITIVE_COMPLETION; -} - - -inline bool FTPClientSession::isPositiveIntermediate(int status) -{ - return status/100 == FTP_POSITIVE_INTERMEDIATE; -} - - -inline bool FTPClientSession::isTransientNegative(int status) -{ - return status/100 == FTP_TRANSIENT_NEGATIVE; -} - - -inline bool FTPClientSession::isPermanentNegative(int status) -{ - return status/100 == FTP_PERMANENT_NEGATIVE; -} - - -inline bool FTPClientSession::isOpen() const -{ - return _pControlSocket != 0; -} - - -inline bool FTPClientSession::isLoggedIn() const -{ - return _isLoggedIn; -} - - -} } // namespace Poco::Net - - -#endif // Net_FTPClientSession_INCLUDED diff --git a/contrib/libpoco/Net/include/Poco/Net/FTPStreamFactory.h b/contrib/libpoco/Net/include/Poco/Net/FTPStreamFactory.h deleted file mode 100644 index ed619c70f35..00000000000 --- a/contrib/libpoco/Net/include/Poco/Net/FTPStreamFactory.h +++ /dev/null @@ -1,122 +0,0 @@ -// -// FTPStreamFactory.h -// -// $Id: //poco/1.4/Net/include/Poco/Net/FTPStreamFactory.h#1 $ -// -// Library: Net -// Package: FTP -// Module: FTPStreamFactory -// -// Definition of the FTPStreamFactory class. -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Net_FTPStreamFactory_INCLUDED -#define Net_FTPStreamFactory_INCLUDED - - -#include "Poco/Net/Net.h" -#include "Poco/Net/HTTPSession.h" -#include "Poco/URIStreamFactory.h" - - -namespace Poco { -namespace Net { - - -class Net_API FTPPasswordProvider - /// The base class for all password providers. - /// An instance of a subclass of this class can be - /// registered with the FTPStreamFactory to - /// provide a password -{ -public: - virtual std::string password(const std::string& username, const std::string& host) = 0; - /// Provide the password for the given user on the given host. - -protected: - FTPPasswordProvider(); - virtual ~FTPPasswordProvider(); -}; - - -class Net_API FTPStreamFactory: public Poco::URIStreamFactory - /// An implementation of the URIStreamFactory interface - /// that handles File Transfer Protocol (ftp) URIs. - /// - /// The URI's path may end with an optional type specification - /// in the form (;type=), where is - /// one of a, i or d. If type=a, the file identified by the path - /// is transferred in ASCII (text) mode. If type=i, the file - /// is transferred in Image (binary) mode. If type=d, a directory - /// listing (in NLST format) is returned. This corresponds with - /// the FTP URL format specified in RFC 1738. - /// - /// If the URI does not contain a username and password, the - /// username "anonymous" and the password " -{ -public: - FTPStreamFactory(); - /// Creates the FTPStreamFactory. - - ~FTPStreamFactory(); - /// Destroys the FTPStreamFactory. - - std::istream* open(const Poco::URI& uri); - /// Creates and opens a HTTP stream for the given URI. - /// The URI must be a ftp://... URI. - /// - /// Throws a NetException if anything goes wrong. - - static void setAnonymousPassword(const std::string& password); - /// Sets the password used for anonymous FTP. - /// - /// WARNING: Setting the anonymous password is not - /// thread-safe, so it's best to call this method - /// during application initialization, before the - /// FTPStreamFactory is used for the first time. - - static const std::string& getAnonymousPassword(); - /// Returns the password used for anonymous FTP. - - static void setPasswordProvider(FTPPasswordProvider* pProvider); - /// Sets the FTPPasswordProvider. If NULL is given, - /// no password provider is used. - /// - /// WARNING: Setting the password provider is not - /// thread-safe, so it's best to call this method - /// during application initialization, before the - /// FTPStreamFactory is used for the first time. - - static FTPPasswordProvider* getPasswordProvider(); - /// Returns the FTPPasswordProvider currently in use, - /// or NULL if no one has been set. - - static void registerFactory(); - /// Registers the FTPStreamFactory with the - /// default URIStreamOpener instance. - - static void unregisterFactory(); - /// Unregisters the FTPStreamFactory with the - /// default URIStreamOpener instance. - -protected: - static void splitUserInfo(const std::string& userInfo, std::string& username, std::string& password); - static void getUserInfo(const Poco::URI& uri, std::string& username, std::string& password); - static void getPathAndType(const Poco::URI& uri, std::string& path, char& type); - -private: - static std::string _anonymousPassword; - static FTPPasswordProvider* _pPasswordProvider; -}; - - -} } // namespace Poco::Net - - -#endif // Net_FTPStreamFactory_INCLUDED diff --git a/contrib/libpoco/Net/include/Poco/Net/FilePartSource.h b/contrib/libpoco/Net/include/Poco/Net/FilePartSource.h deleted file mode 100644 index da6322e4c4b..00000000000 --- a/contrib/libpoco/Net/include/Poco/Net/FilePartSource.h +++ /dev/null @@ -1,79 +0,0 @@ -// -// FilePartSource.h -// -// $Id: //poco/1.4/Net/include/Poco/Net/FilePartSource.h#1 $ -// -// Library: Net -// Package: Messages -// Module: FilePartSource -// -// Definition of the FilePartSource class. -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Net_FilePartSource_INCLUDED -#define Net_FilePartSource_INCLUDED - - -#include "Poco/Net/Net.h" -#include "Poco/Net/PartSource.h" -#include "Poco/FileStream.h" - - -namespace Poco { -namespace Net { - - -class Net_API FilePartSource: public PartSource - /// An implementation of PartSource for - /// plain files. -{ -public: - FilePartSource(const std::string& path); - /// Creates the FilePartSource for the given path. - /// - /// The MIME type is set to application/octet-stream. - /// - /// Throws an OpenFileException if the file cannot be opened. - - FilePartSource(const std::string& path, const std::string& mediaType); - /// Creates the FilePartSource for the given - /// path and MIME type. - /// - /// Throws an OpenFileException if the file cannot be opened. - - FilePartSource(const std::string& path, const std::string& filename, const std::string& mediaType); - /// Creates the FilePartSource for the given - /// path and MIME type. The given filename is - /// used as part filename (see filename()) only. - /// - /// Throws an OpenFileException if the file cannot be opened. - - ~FilePartSource(); - /// Destroys the FilePartSource. - - std::istream& stream(); - /// Returns a file input stream for the given file. - - const std::string& filename() const; - /// Returns the filename portion of the path. - - std::streamsize getContentLength() const; - /// Returns the file size. - -private: - std::string _path; - std::string _filename; - Poco::FileInputStream _istr; -}; - - -} } // namespace Poco::Net - - -#endif // Net_FilePartSource_INCLUDED diff --git a/contrib/libpoco/Net/include/Poco/Net/HTMLForm.h b/contrib/libpoco/Net/include/Poco/Net/HTMLForm.h deleted file mode 100644 index f9dbc2170e3..00000000000 --- a/contrib/libpoco/Net/include/Poco/Net/HTMLForm.h +++ /dev/null @@ -1,248 +0,0 @@ -// -// HTMLForm.h -// -// $Id: //poco/1.4/Net/include/Poco/Net/HTMLForm.h#3 $ -// -// Library: Net -// Package: HTML -// Module: HTMLForm -// -// Definition of the HTMLForm class. -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Net_HTMLForm_INCLUDED -#define Net_HTMLForm_INCLUDED - - -#include "Poco/Net/Net.h" -#include "Poco/Net/NameValueCollection.h" -#include -#include -#include - - -namespace Poco { -namespace Net { - - -class HTTPRequest; -class PartHandler; -class PartSource; - - -class Net_API HTMLForm: public NameValueCollection - /// HTMLForm is a helper class for working with HTML forms, - /// both on the client and on the server side. - /// - /// The maximum number of form fields can be restricted - /// by calling setFieldLimit(). This is useful to - /// defend against certain kinds of denial-of-service - /// attacks. The limit is only enforced when parsing - /// form data from a stream or string, not when adding - /// form fields programmatically. The default limit is 100. -{ -public: - HTMLForm(); - /// Creates an empty HTMLForm and sets the - /// encoding to "application/x-www-form-urlencoded". - - explicit HTMLForm(const std::string& encoding); - /// Creates an empty HTMLForm that uses - /// the given encoding. - /// - /// Encoding must be either "application/x-www-form-urlencoded" - /// (which is the default) or "multipart/form-data". - - HTMLForm(const HTTPRequest& request, std::istream& requestBody, PartHandler& handler); - /// Creates a HTMLForm from the given HTTP request. - /// - /// Uploaded files are passed to the given PartHandler. - - HTMLForm(const HTTPRequest& request, std::istream& requestBody); - /// Creates a HTMLForm from the given HTTP request. - /// - /// Uploaded files are silently discarded. - - explicit HTMLForm(const HTTPRequest& request); - /// Creates a HTMLForm from the given HTTP request. - /// - /// The request must be a GET request and the form data - /// must be in the query string (URL encoded). - /// - /// For POST requests, you must use one of the constructors - /// taking an additional input stream for the request body. - - ~HTMLForm(); - /// Destroys the HTMLForm. - - void setEncoding(const std::string& encoding); - /// Sets the encoding used for posting the form. - /// - /// Encoding must be either "application/x-www-form-urlencoded" - /// (which is the default) or "multipart/form-data". - - const std::string& getEncoding() const; - /// Returns the encoding used for posting the form. - - void addPart(const std::string& name, PartSource* pSource); - /// Adds an part/attachment (file upload) to the form. - /// - /// The form takes ownership of the PartSource and deletes it - /// when it is no longer needed. - /// - /// The part will only be sent if the encoding - /// set for the form is "multipart/form-data" - - void load(const HTTPRequest& request, std::istream& requestBody, PartHandler& handler); - /// Reads the form data from the given HTTP request. - /// - /// Uploaded files are passed to the given PartHandler. - - void load(const HTTPRequest& request, std::istream& requestBody); - /// Reads the form data from the given HTTP request. - /// - /// Uploaded files are silently discarded. - - void load(const HTTPRequest& request); - /// Reads the form data from the given HTTP request. - /// - /// The request must be a GET request and the form data - /// must be in the query string (URL encoded). - /// - /// For POST requests, you must use one of the overloads - /// taking an additional input stream for the request body. - - void read(std::istream& istr, PartHandler& handler); - /// Reads the form data from the given input stream. - /// - /// The form data read from the stream must be - /// in the encoding specified for the form. - /// - /// Note that read() does not clear the form before - /// reading the new values. - - void read(std::istream& istr); - /// Reads the URL-encoded form data from the given input stream. - /// - /// Note that read() does not clear the form before - /// reading the new values. - - void read(const std::string& queryString); - /// Reads the form data from the given HTTP query string. - /// - /// Note that read() does not clear the form before - /// reading the new values. - - void prepareSubmit(HTTPRequest& request); - /// Fills out the request object for submitting the form. - /// - /// If the request method is GET, the encoded form is appended to the - /// request URI as query string. Otherwise (the method is - /// POST), the form's content type is set to the form's encoding. - /// The form's parameters must be written to the - /// request body separately, with a call to write. - /// If the request's HTTP version is HTTP/1.0: - /// - persistent connections are disabled - /// - the content transfer encoding is set to identity encoding - /// Otherwise, if the request's HTTP version is HTTP/1.1: - /// - the request's persistent connection state is left unchanged - /// - the content transfer encoding is set to chunked - - - std::streamsize calculateContentLength(); - /// Calculate the content length for the form. - /// May be UNKNOWN_CONTENT_LENGTH if not possible - /// to calculate - - - void write(std::ostream& ostr, const std::string& boundary); - /// Writes the form data to the given output stream, - /// using the specified encoding. - - void write(std::ostream& ostr); - /// Writes the form data to the given output stream, - /// using the specified encoding. - - const std::string& boundary() const; - /// Returns the MIME boundary used for writing - /// multipart form data. - - int getFieldLimit() const; - /// Returns the maximum number of header fields - /// allowed. - /// - /// See setFieldLimit() for more information. - - void setFieldLimit(int limit); - /// Sets the maximum number of header fields - /// allowed. This limit is used to defend certain - /// kinds of denial-of-service attacks. - /// Specify 0 for unlimited (not recommended). - /// - /// The default limit is 100. - - static const std::string ENCODING_URL; /// "application/x-www-form-urlencoded" - static const std::string ENCODING_MULTIPART; /// "multipart/form-data" - - static const int UNKNOWN_CONTENT_LENGTH; -protected: - void readUrl(std::istream& istr); - void readMultipart(std::istream& istr, PartHandler& handler); - void writeUrl(std::ostream& ostr); - void writeMultipart(std::ostream& ostr); - -private: - HTMLForm(const HTMLForm&); - HTMLForm& operator = (const HTMLForm&); - - enum Limits - { - DFL_FIELD_LIMIT = 100 - }; - - struct Part - { - std::string name; - PartSource* pSource; - }; - - typedef std::vector PartVec; - - int _fieldLimit; - std::string _encoding; - std::string _boundary; - PartVec _parts; -}; - - -// -// inlines -// -inline const std::string& HTMLForm::getEncoding() const -{ - return _encoding; -} - - -inline const std::string& HTMLForm::boundary() const -{ - return _boundary; -} - - -inline int HTMLForm::getFieldLimit() const -{ - return _fieldLimit; -} - - -} } // namespace Poco::Net - - -#endif // Net_HTMLForm_INCLUDED diff --git a/contrib/libpoco/Net/include/Poco/Net/HTTPAuthenticationParams.h b/contrib/libpoco/Net/include/Poco/Net/HTTPAuthenticationParams.h deleted file mode 100644 index 11f6af1efc3..00000000000 --- a/contrib/libpoco/Net/include/Poco/Net/HTTPAuthenticationParams.h +++ /dev/null @@ -1,105 +0,0 @@ -// -// HTTPAuthenticationParams.h -// -// $Id: //poco/1.4/Net/include/Poco/Net/HTTPAuthenticationParams.h#2 $ -// -// Library: Net -// Package: HTTP -// Module: HTTPAuthenticationParams -// -// Definition of the HTTPAuthenticationParams class. -// -// Copyright (c) 2011, Anton V. Yabchinskiy (arn at bestmx dot ru). -// Copyright (c) 2012, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Net_HTTPAuthenticationParams_INCLUDED -#define Net_HTTPAuthenticationParams_INCLUDED - - -#include "Poco/Net/NameValueCollection.h" - - -namespace Poco { -namespace Net { - - -class HTTPRequest; -class HTTPResponse; - - -class Net_API HTTPAuthenticationParams: public NameValueCollection - /// Collection of name-value pairs of HTTP authentication header (i.e. - /// "realm", "qop", "nonce" in case of digest authentication header). -{ -public: - HTTPAuthenticationParams(); - /// Creates an empty authentication parameters collection. - - explicit HTTPAuthenticationParams(const std::string& authInfo); - /// See fromAuthInfo() documentation. - - explicit HTTPAuthenticationParams(const HTTPRequest& request); - /// See fromRequest() documentation. - - HTTPAuthenticationParams(const HTTPResponse& response, const std::string& header = WWW_AUTHENTICATE); - /// See fromResponse() documentation. - - virtual ~HTTPAuthenticationParams(); - /// Destroys the HTTPAuthenticationParams. - - HTTPAuthenticationParams& operator = (const HTTPAuthenticationParams& authParams); - /// Assigns the content of another HTTPAuthenticationParams. - - void fromAuthInfo(const std::string& authInfo); - /// Creates an HTTPAuthenticationParams by parsing authentication - /// information. - - void fromRequest(const HTTPRequest& request); - /// Extracts authentication information from the request and creates - /// HTTPAuthenticationParams by parsing it. - /// - /// Throws a NotAuthenticatedException if no authentication - /// information is contained in request. - /// Throws a InvalidArgumentException if authentication scheme is - /// unknown or invalid. - - void fromResponse(const HTTPResponse& response, const std::string& header = WWW_AUTHENTICATE); - /// Extracts authentication information from the response and creates - /// HTTPAuthenticationParams by parsing it. - /// - /// Throws a NotAuthenticatedException if no authentication - /// information is contained in response. - /// Throws a InvalidArgumentException if authentication scheme is - /// unknown or invalid. - - void setRealm(const std::string& realm); - /// Sets the "realm" parameter to the provided string. - - const std::string& getRealm() const; - /// Returns value of the "realm" parameter. - /// - /// Throws NotFoundException is there is no "realm" set in the - /// HTTPAuthenticationParams. - - std::string toString() const; - /// Formats the HTTPAuthenticationParams for inclusion in HTTP - /// request or response authentication header. - - static const std::string REALM; - static const std::string WWW_AUTHENTICATE; - static const std::string PROXY_AUTHENTICATE; - -private: - void parse(std::string::const_iterator first, std::string::const_iterator last); -}; - - -} } // namespace Poco::Net - - -#endif // Net_HTTPAuthenticationParams_INCLUDED diff --git a/contrib/libpoco/Net/include/Poco/Net/HTTPBasicCredentials.h b/contrib/libpoco/Net/include/Poco/Net/HTTPBasicCredentials.h deleted file mode 100644 index f98315c4ec5..00000000000 --- a/contrib/libpoco/Net/include/Poco/Net/HTTPBasicCredentials.h +++ /dev/null @@ -1,113 +0,0 @@ -// -// HTTPBasicCredentials.h -// -// $Id: //poco/1.4/Net/include/Poco/Net/HTTPBasicCredentials.h#4 $ -// -// Library: Net -// Package: HTTP -// Module: HTTPBasicCredentials -// -// Definition of the HTTPBasicCredentials class. -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Net_HTTPBasicCredentials_INCLUDED -#define Net_HTTPBasicCredentials_INCLUDED - - -#include "Poco/Net/Net.h" - - -namespace Poco { -namespace Net { - - -class HTTPRequest; - - -class Net_API HTTPBasicCredentials - /// This is a utility class for working with - /// HTTP Basic Authentication in HTTPRequest - /// objects. -{ -public: - HTTPBasicCredentials(); - /// Creates an empty HTTPBasicCredentials object. - - HTTPBasicCredentials(const std::string& username, const std::string& password); - /// Creates a HTTPBasicCredentials object with the given username and password. - - explicit HTTPBasicCredentials(const HTTPRequest& request); - /// Creates a HTTPBasicCredentials object with the authentication information - /// from the given request. - /// - /// Throws a NotAuthenticatedException if the request does - /// not contain basic authentication information. - - explicit HTTPBasicCredentials(const std::string& authInfo); - /// Creates a HTTPBasicCredentials object with the authentication information - /// in the given string. The authentication information can be extracted - /// from a HTTPRequest object by calling HTTPRequest::getCredentials(). - - ~HTTPBasicCredentials(); - /// Destroys the HTTPBasicCredentials. - - void setUsername(const std::string& username); - /// Sets the username. - - const std::string& getUsername() const; - /// Returns the username. - - void setPassword(const std::string& password); - /// Sets the password. - - const std::string& getPassword() const; - /// Returns the password. - - void authenticate(HTTPRequest& request) const; - /// Adds authentication information to the given HTTPRequest. - - void proxyAuthenticate(HTTPRequest& request) const; - /// Adds proxy authentication information to the given HTTPRequest. - - static const std::string SCHEME; - -protected: - void parseAuthInfo(const std::string& authInfo); - /// Extracts username and password from Basic authentication info - /// by base64-decoding authInfo and splitting the resulting - /// string at the ':' delimiter. - -private: - HTTPBasicCredentials(const HTTPBasicCredentials&); - HTTPBasicCredentials& operator = (const HTTPBasicCredentials&); - - std::string _username; - std::string _password; -}; - - -// -// inlines -// -inline const std::string& HTTPBasicCredentials::getUsername() const -{ - return _username; -} - - -inline const std::string& HTTPBasicCredentials::getPassword() const -{ - return _password; -} - - -} } // namespace Poco::Net - - -#endif // Net_HTTPBasicCredentials_INCLUDED diff --git a/contrib/libpoco/Net/include/Poco/Net/HTTPBasicStreamBuf.h b/contrib/libpoco/Net/include/Poco/Net/HTTPBasicStreamBuf.h deleted file mode 100644 index cc158f862d8..00000000000 --- a/contrib/libpoco/Net/include/Poco/Net/HTTPBasicStreamBuf.h +++ /dev/null @@ -1,38 +0,0 @@ -// -// HTTPBasicStreamBuf.h -// -// $Id: //poco/Main/template/class.h#4 $ -// -// Library: Net -// Package: HTTP -// Module: HTTPBasicStreamBuf -// -// Definition of the HTTPBasicStreamBuf class. -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Net_HTTPBasicStreamBuf_INCLUDED -#define Net_HTTPBasicStreamBuf_INCLUDED - - -#include "Poco/Net/Net.h" -#include "Poco/BufferedStreamBuf.h" -#include "Poco/Net/HTTPBufferAllocator.h" - - -namespace Poco { -namespace Net { - - -typedef Poco::BasicBufferedStreamBuf, HTTPBufferAllocator> HTTPBasicStreamBuf; - - -} } // namespace Poco::Net - - -#endif // Net_HTTPBasicStreamBuf_INCLUDED diff --git a/contrib/libpoco/Net/include/Poco/Net/HTTPBufferAllocator.h b/contrib/libpoco/Net/include/Poco/Net/HTTPBufferAllocator.h deleted file mode 100644 index b6314762110..00000000000 --- a/contrib/libpoco/Net/include/Poco/Net/HTTPBufferAllocator.h +++ /dev/null @@ -1,52 +0,0 @@ -// -// HTTPBufferAllocator.h -// -// $Id: //poco/Main/template/class.h#4 $ -// -// Library: Net -// Package: HTTP -// Module: HTTPBufferAllocator -// -// Definition of the HTTPBufferAllocator class. -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Net_HTTPBufferAllocator_INCLUDED -#define Net_HTTPBufferAllocator_INCLUDED - - -#include "Poco/Net/Net.h" -#include "Poco/MemoryPool.h" -#include - - -namespace Poco { -namespace Net { - - -class Net_API HTTPBufferAllocator - /// A BufferAllocator for HTTP streams. -{ -public: - static char* allocate(std::streamsize size); - static void deallocate(char* ptr, std::streamsize size); - - enum - { - BUFFER_SIZE = 4096 - }; - -private: - static Poco::MemoryPool _pool; -}; - - -} } // namespace Poco::Net - - -#endif // Net_HTTPBufferAllocator_INCLUDED diff --git a/contrib/libpoco/Net/include/Poco/Net/HTTPChunkedStream.h b/contrib/libpoco/Net/include/Poco/Net/HTTPChunkedStream.h deleted file mode 100644 index 8d2462e0d30..00000000000 --- a/contrib/libpoco/Net/include/Poco/Net/HTTPChunkedStream.h +++ /dev/null @@ -1,107 +0,0 @@ -// -// HTTPChunkedStream.h -// -// $Id: //poco/1.4/Net/include/Poco/Net/HTTPChunkedStream.h#1 $ -// -// Library: Net -// Package: HTTP -// Module: HTTPChunkedStream -// -// Definition of the HTTPChunkedStream class. -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Net_HTTPChunkedStream_INCLUDED -#define Net_HTTPChunkedStream_INCLUDED - - -#include "Poco/Net/Net.h" -#include "Poco/Net/HTTPBasicStreamBuf.h" -#include "Poco/MemoryPool.h" -#include -#include -#include - - -namespace Poco { -namespace Net { - - -class HTTPSession; - - -class Net_API HTTPChunkedStreamBuf: public HTTPBasicStreamBuf - /// This is the streambuf class used for reading and writing - /// HTTP message bodies in chunked transfer coding. -{ -public: - typedef HTTPBasicStreamBuf::openmode openmode; - - HTTPChunkedStreamBuf(HTTPSession& session, openmode mode); - ~HTTPChunkedStreamBuf(); - void close(); - -protected: - int readFromDevice(char* buffer, std::streamsize length); - int writeToDevice(const char* buffer, std::streamsize length); - -private: - HTTPSession& _session; - openmode _mode; - std::streamsize _chunk; - std::string _chunkBuffer; -}; - - -class Net_API HTTPChunkedIOS: public virtual std::ios - /// The base class for HTTPInputStream. -{ -public: - HTTPChunkedIOS(HTTPSession& session, HTTPChunkedStreamBuf::openmode mode); - ~HTTPChunkedIOS(); - HTTPChunkedStreamBuf* rdbuf(); - -protected: - HTTPChunkedStreamBuf _buf; -}; - - -class Net_API HTTPChunkedInputStream: public HTTPChunkedIOS, public std::istream - /// This class is for internal use by HTTPSession only. -{ -public: - HTTPChunkedInputStream(HTTPSession& session); - ~HTTPChunkedInputStream(); - - void* operator new(std::size_t size); - void operator delete(void* ptr); - -private: - static Poco::MemoryPool _pool; -}; - - -class Net_API HTTPChunkedOutputStream: public HTTPChunkedIOS, public std::ostream - /// This class is for internal use by HTTPSession only. -{ -public: - HTTPChunkedOutputStream(HTTPSession& session); - ~HTTPChunkedOutputStream(); - - void* operator new(std::size_t size); - void operator delete(void* ptr); - -private: - static Poco::MemoryPool _pool; -}; - - -} } // namespace Poco::Net - - -#endif // Net_HTTPChunkedStream_INCLUDED diff --git a/contrib/libpoco/Net/include/Poco/Net/HTTPClientSession.h b/contrib/libpoco/Net/include/Poco/Net/HTTPClientSession.h deleted file mode 100644 index 04e4e3ab475..00000000000 --- a/contrib/libpoco/Net/include/Poco/Net/HTTPClientSession.h +++ /dev/null @@ -1,366 +0,0 @@ -// -// HTTPClientSession.h -// -// $Id: //poco/1.4/Net/include/Poco/Net/HTTPClientSession.h#8 $ -// -// Library: Net -// Package: HTTPClient -// Module: HTTPClientSession -// -// Definition of the HTTPClientSession class. -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Net_HTTPClientSession_INCLUDED -#define Net_HTTPClientSession_INCLUDED - - -#include "Poco/Net/Net.h" -#include "Poco/Net/HTTPSession.h" -#include "Poco/Net/SocketAddress.h" -#include "Poco/SharedPtr.h" -#include -#include - - -namespace Poco { -namespace Net { - - -class HTTPRequest; -class HTTPResponse; - - -class Net_API HTTPClientSession: public HTTPSession - /// This class implements the client-side of - /// a HTTP session. - /// - /// To send a HTTP request to a HTTP server, first - /// instantiate a HTTPClientSession object and - /// specify the server's host name and port number. - /// - /// Then create a HTTPRequest object, fill it accordingly, - /// and pass it as argument to the sendRequst() method. - /// - /// sendRequest() will return an output stream that can - /// be used to send the request body, if there is any. - /// - /// After you are done sending the request body, create - /// a HTTPResponse object and pass it to receiveResponse(). - /// - /// This will return an input stream that can be used to - /// read the response body. - /// - /// See RFC 2616 for more - /// information about the HTTP protocol. - /// - /// Proxies and proxy authorization (only HTTP Basic Authorization) - /// is supported. Use setProxy() and setProxyCredentials() to - /// set up a session through a proxy. -{ -public: - struct ProxyConfig - /// HTTP proxy server configuration. - { - ProxyConfig(): - port(HTTP_PORT) - { - } - - std::string host; - /// Proxy server host name or IP address. - Poco::UInt16 port; - /// Proxy server TCP port. - std::string username; - /// Proxy server username. - std::string password; - /// Proxy server password. - std::string nonProxyHosts; - /// A regular expression defining hosts for which the proxy should be bypassed, - /// e.g. "localhost|127\.0\.0\.1|192\.168\.0\.\d+". Can also be an empty - /// string to disable proxy bypassing. - }; - - HTTPClientSession(); - /// Creates an unconnected HTTPClientSession. - - explicit HTTPClientSession(const StreamSocket& socket); - /// Creates a HTTPClientSession using the given socket. - /// The socket must not be connected. The session - /// takes ownership of the socket. - - explicit HTTPClientSession(const SocketAddress& address); - /// Creates a HTTPClientSession using the given address. - - HTTPClientSession(const std::string& host, Poco::UInt16 port = HTTPSession::HTTP_PORT); - /// Creates a HTTPClientSession using the given host and port. - - HTTPClientSession(const std::string& host, Poco::UInt16 port, const ProxyConfig& proxyConfig); - /// Creates a HTTPClientSession using the given host, port and proxy configuration. - - virtual ~HTTPClientSession(); - /// Destroys the HTTPClientSession and closes - /// the underlying socket. - - void setHost(const std::string& host); - /// Sets the host name of the target HTTP server. - /// - /// The host must not be changed once there is an - /// open connection to the server. - - const std::string& getHost() const; - /// Returns the host name of the target HTTP server. - - void setPort(Poco::UInt16 port); - /// Sets the port number of the target HTTP server. - /// - /// The port number must not be changed once there is an - /// open connection to the server. - - Poco::UInt16 getPort() const; - /// Returns the port number of the target HTTP server. - - void setProxy(const std::string& host, Poco::UInt16 port = HTTPSession::HTTP_PORT); - /// Sets the proxy host name and port number. - - void setProxyHost(const std::string& host); - /// Sets the host name of the proxy server. - - void setProxyPort(Poco::UInt16 port); - /// Sets the port number of the proxy server. - - const std::string& getProxyHost() const; - /// Returns the proxy host name. - - Poco::UInt16 getProxyPort() const; - /// Returns the proxy port number. - - void setProxyCredentials(const std::string& username, const std::string& password); - /// Sets the username and password for proxy authentication. - /// Only Basic authentication is supported. - - void setProxyUsername(const std::string& username); - /// Sets the username for proxy authentication. - /// Only Basic authentication is supported. - - const std::string& getProxyUsername() const; - /// Returns the username for proxy authentication. - - void setProxyPassword(const std::string& password); - /// Sets the password for proxy authentication. - /// Only Basic authentication is supported. - - const std::string& getProxyPassword() const; - /// Returns the password for proxy authentication. - - void setProxyConfig(const ProxyConfig& config); - /// Sets the proxy configuration. - - const ProxyConfig& getProxyConfig() const; - /// Returns the proxy configuration. - - static void setGlobalProxyConfig(const ProxyConfig& config); - /// Sets the global proxy configuration. - /// - /// The global proxy configuration is used by all HTTPClientSession - /// instances, unless a different proxy configuration is explicitly set. - /// - /// Warning: Setting the global proxy configuration is not thread safe. - /// The global proxy configuration should be set at start up, before - /// the first HTTPClientSession instance is created. - - static const ProxyConfig& getGlobalProxyConfig(); - /// Returns the global proxy configuration. - - void setKeepAliveTimeout(const Poco::Timespan& timeout); - /// Sets the connection timeout for HTTP connections. - - const Poco::Timespan& getKeepAliveTimeout() const; - /// Returns the connection timeout for HTTP connections. - - virtual std::ostream& sendRequest(HTTPRequest& request); - /// Sends the header for the given HTTP request to - /// the server. - /// - /// The HTTPClientSession will set the request's - /// Host and Keep-Alive headers accordingly. - /// - /// The returned output stream can be used to write - /// the request body. The stream is valid until - /// receiveResponse() is called or the session - /// is destroyed. - /// - /// In case a network or server failure happens - /// while writing the request body to the returned stream, - /// the stream state will change to bad or fail. In this - /// case, reset() should be called if the session will - /// be reused and persistent connections are enabled - /// to ensure a new connection will be set up - /// for the next request. - - virtual std::istream& receiveResponse(HTTPResponse& response); - /// Receives the header for the response to the previous - /// HTTP request. - /// - /// The returned input stream can be used to read - /// the response body. The stream is valid until - /// sendRequest() is called or the session is - /// destroyed. - /// - /// It must be ensured that the response stream - /// is fully consumed before sending a new request - /// and persistent connections are enabled. Otherwise, - /// the unread part of the response body may be treated as - /// part of the next request's response header, resulting - /// in a Poco::Net::MessageException being thrown. - /// - /// In case a network or server failure happens - /// while reading the response body from the returned stream, - /// the stream state will change to bad or fail. In this - /// case, reset() should be called if the session will - /// be reused and persistent connections are enabled - /// to ensure a new connection will be set up - /// for the next request. - - void reset(); - /// Resets the session and closes the socket. - /// - /// The next request will initiate a new connection, - /// even if persistent connections are enabled. - /// - /// This should be called whenever something went - /// wrong when sending a request (e.g., sendRequest() - /// or receiveResponse() throws an exception, or - /// the request or response stream changes into - /// fail or bad state, but not eof state). - - virtual bool secure() const; - /// Return true iff the session uses SSL or TLS, - /// or false otherwise. - - bool bypassProxy() const; - /// Returns true if the proxy should be bypassed - /// for the current host. - -protected: - enum - { - DEFAULT_KEEP_ALIVE_TIMEOUT = 8 - }; - - void reconnect(); - /// Connects the underlying socket to the HTTP server. - - int write(const char* buffer, std::streamsize length); - /// Tries to re-connect if keep-alive is on. - - virtual std::string proxyRequestPrefix() const; - /// Returns the prefix prepended to the URI for proxy requests - /// (e.g., "http://myhost.com"). - - virtual bool mustReconnect() const; - /// Checks if we can reuse a persistent connection. - - virtual void proxyAuthenticate(HTTPRequest& request); - /// Sets the proxy credentials (Proxy-Authorization header), if - /// proxy username and password have been set. - - void proxyAuthenticateImpl(HTTPRequest& request); - /// Sets the proxy credentials (Proxy-Authorization header), if - /// proxy username and password have been set. - - StreamSocket proxyConnect(); - /// Sends a CONNECT request to the proxy server and returns - /// a StreamSocket for the resulting connection. - - void proxyTunnel(); - /// Calls proxyConnect() and attaches the resulting StreamSocket - /// to the HTTPClientSession. - -private: - std::string _host; - Poco::UInt16 _port; - ProxyConfig _proxyConfig; - Poco::Timespan _keepAliveTimeout; - Poco::Timestamp _lastRequest; - bool _reconnect; - bool _mustReconnect; - bool _expectResponseBody; - Poco::SharedPtr _pRequestStream; - Poco::SharedPtr _pResponseStream; - - static ProxyConfig _globalProxyConfig; - - HTTPClientSession(const HTTPClientSession&); - HTTPClientSession& operator = (const HTTPClientSession&); - - friend class WebSocket; -}; - - -// -// inlines -// -inline const std::string& HTTPClientSession::getHost() const -{ - return _host; -} - - -inline Poco::UInt16 HTTPClientSession::getPort() const -{ - return _port; -} - - -inline const std::string& HTTPClientSession::getProxyHost() const -{ - return _proxyConfig.host; -} - - -inline Poco::UInt16 HTTPClientSession::getProxyPort() const -{ - return _proxyConfig.port; -} - - -inline const std::string& HTTPClientSession::getProxyUsername() const -{ - return _proxyConfig.username; -} - - -inline const std::string& HTTPClientSession::getProxyPassword() const -{ - return _proxyConfig.password; -} - - -inline const HTTPClientSession::ProxyConfig& HTTPClientSession::getProxyConfig() const -{ - return _proxyConfig; -} - - -inline const HTTPClientSession::ProxyConfig& HTTPClientSession::getGlobalProxyConfig() -{ - return _globalProxyConfig; -} - - -inline const Poco::Timespan& HTTPClientSession::getKeepAliveTimeout() const -{ - return _keepAliveTimeout; -} - - -} } // namespace Poco::Net - - -#endif // Net_HTTPClientSession_INCLUDED diff --git a/contrib/libpoco/Net/include/Poco/Net/HTTPCookie.h b/contrib/libpoco/Net/include/Poco/Net/HTTPCookie.h deleted file mode 100644 index 8a859be9bcf..00000000000 --- a/contrib/libpoco/Net/include/Poco/Net/HTTPCookie.h +++ /dev/null @@ -1,274 +0,0 @@ -// -// HTTPCookie.h -// -// $Id: //poco/1.4/Net/include/Poco/Net/HTTPCookie.h#2 $ -// -// Library: Net -// Package: HTTP -// Module: HTTPCookie -// -// Definition of the HTTPCookie class. -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Net_HTTPCookie_INCLUDED -#define Net_HTTPCookie_INCLUDED - - -#include "Poco/Net/Net.h" - - -namespace Poco { -namespace Net { - - -class NameValueCollection; - - -class Net_API HTTPCookie - /// This class represents a HTTP Cookie. - /// - /// A cookie is a small amount of information sent by a Web - /// server to a Web browser, saved by the browser, and later sent back - /// to the server. A cookie's value can uniquely identify a client, so - /// cookies are commonly used for session management. - /// - /// A cookie has a name, a single value, and optional attributes such - /// as a comment, path and domain qualifiers, a maximum age, and a - /// version number. - /// - /// This class supports both the Version 0 (by Netscape) and Version 1 - /// (by RFC 2109) cookie specifications. By default, cookies are created - /// using Version 0 to ensure the best interoperability. -{ -public: - HTTPCookie(); - /// Creates an empty HTTPCookie. - - explicit HTTPCookie(const std::string& name); - /// Creates a cookie with the given name. - /// The cookie never expires. - - explicit HTTPCookie(const NameValueCollection& nvc); - /// Creates a cookie from the given NameValueCollection. - - HTTPCookie(const std::string& name, const std::string& value); - /// Creates a cookie with the given name and value. - /// The cookie never expires. - /// - /// Note: If value contains whitespace or non-alphanumeric - /// characters, the value should be escaped by calling escape() - /// before passing it to the constructor. - - HTTPCookie(const HTTPCookie& cookie); - /// Creates the HTTPCookie by copying another one. - - ~HTTPCookie(); - /// Destroys the HTTPCookie. - - HTTPCookie& operator = (const HTTPCookie& cookie); - /// Assigns a cookie. - - void setVersion(int version); - /// Sets the version of the cookie. - /// - /// Version must be either 0 (denoting a Netscape cookie) - /// or 1 (denoting a RFC 2109 cookie). - - int getVersion() const; - /// Returns the version of the cookie, which is - /// either 0 or 1. - - void setName(const std::string& name); - /// Sets the name of the cookie. - - const std::string& getName() const; - /// Returns the name of the cookie. - - void setValue(const std::string& value); - /// Sets the value of the cookie. - /// - /// According to the cookie specification, the - /// size of the value should not exceed 4 Kbytes. - /// - /// Note: If value contains whitespace or non-alphanumeric - /// characters, the value should be escaped by calling escape() - /// prior to passing it to setName(). - - const std::string& getValue() const; - /// Returns the value of the cookie. - - void setComment(const std::string& comment); - /// Sets the comment for the cookie. - /// - /// Comments are only supported for version 1 cookies. - - const std::string& getComment() const; - /// Returns the comment for the cookie. - - void setDomain(const std::string& domain); - /// Sets the domain for the cookie. - - const std::string& getDomain() const; - /// Returns the domain for the cookie. - - void setPath(const std::string& path); - /// Sets the path for the cookie. - - void setPriority(const std::string& priority); - /// Sets the priority for the cookie. - - const std::string& getPath() const; - /// Returns the path for the cookie. - - const std::string& getPriority() const; - /// Returns the priority for the cookie. - - void setSecure(bool secure); - /// Sets the value of the secure flag for - /// the cookie. - - bool getSecure() const; - /// Returns the value of the secure flag - /// for the cookie. - - void setMaxAge(int maxAge); - /// Sets the maximum age in seconds for - /// the cookie. - /// - /// A value of -1 (default) causes the cookie - /// to become a session cookie, which will - /// be deleted when the browser window - /// is closed. - /// - /// A value of 0 deletes the cookie on - /// the client. - - int getMaxAge() const; - /// Returns the maximum age in seconds for - /// the cookie. - - void setHttpOnly(bool flag = true); - /// Sets the HttpOnly flag for the cookie. - - bool getHttpOnly() const; - /// Returns true iff the cookie's HttpOnly flag is set. - - std::string toString() const; - /// Returns a string representation of the cookie, - /// suitable for use in a Set-Cookie header. - - static std::string escape(const std::string& str); - /// Escapes the given string by replacing all - /// non-alphanumeric characters with escape - /// sequences in the form %xx, where xx is the - /// hexadecimal character code. - /// - /// The following characters will be replaced - /// with escape sequences: - /// - percent sign % - /// - less-than and greater-than < and > - /// - curly brackets { and } - /// - square brackets [ and ] - /// - parenthesis ( and ) - /// - solidus / - /// - vertical line | - /// - reverse solidus (backslash /) - /// - quotation mark " - /// - apostrophe ' - /// - circumflex accent ^ - /// - grave accent ` - /// - comma and semicolon , and ; - /// - whitespace and control characters - - static std::string unescape(const std::string& str); - /// Unescapes the given string by replacing all - /// escape sequences in the form %xx with the - /// respective characters. - -private: - int _version; - std::string _name; - std::string _value; - std::string _comment; - std::string _domain; - std::string _path; - std::string _priority; - bool _secure; - int _maxAge; - bool _httpOnly; -}; - - -// -// inlines -// -inline int HTTPCookie::getVersion() const -{ - return _version; -} - - -inline const std::string& HTTPCookie::getName() const -{ - return _name; -} - - -inline const std::string& HTTPCookie::getValue() const -{ - return _value; -} - - -inline const std::string& HTTPCookie::getComment() const -{ - return _comment; -} - - -inline const std::string& HTTPCookie::getDomain() const -{ - return _domain; -} - - -inline const std::string& HTTPCookie::getPath() const -{ - return _path; -} - - -inline const std::string& HTTPCookie::getPriority() const -{ - return _priority; -} - - -inline bool HTTPCookie::getSecure() const -{ - return _secure; -} - - -inline int HTTPCookie::getMaxAge() const -{ - return _maxAge; -} - - -inline bool HTTPCookie::getHttpOnly() const -{ - return _httpOnly; -} - - -} } // namespace Poco::Net - - -#endif // Net_HTTPCookie_INCLUDED diff --git a/contrib/libpoco/Net/include/Poco/Net/HTTPCredentials.h b/contrib/libpoco/Net/include/Poco/Net/HTTPCredentials.h deleted file mode 100644 index 3a4d0cbd425..00000000000 --- a/contrib/libpoco/Net/include/Poco/Net/HTTPCredentials.h +++ /dev/null @@ -1,193 +0,0 @@ -// -// HTTPCredentials.h -// -// $Id: //poco/1.4/Net/include/Poco/Net/HTTPCredentials.h#4 $ -// -// Library: Net -// Package: HTTP -// Module: HTTPCredentials -// -// Definition of the HTTPCredentials class. -// -// Copyright (c) 2011, Anton V. Yabchinskiy (arn at bestmx dot ru). -// Copyright (c) 2012, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Net_HTTPCredentials_INCLUDED -#define Net_HTTPCredentials_INCLUDED - - -#include "Poco/Net/HTTPDigestCredentials.h" - - -namespace Poco { - - -class URI; - - -namespace Net { - - -class HTTPRequest; -class HTTPResponse; - - -class Net_API HTTPCredentials - /// This is a utility class for working with HTTP - /// authentication (basic or digest) in HTTPRequest objects. - /// - /// Usage is as follows: - /// First, create a HTTPCredentials object containing - /// the username and password. - /// Poco::Net::HTTPCredentials creds("user", "s3cr3t"); - /// - /// Second, send the HTTP request with Poco::Net::HTTPClientSession. - /// Poco::Net::HTTPClientSession session("pocoproject.org"); - /// Poco::Net::HTTPRequest request(HTTPRequest::HTTP_GET, "/index.html", HTTPMessage::HTTP_1_1); - /// session.sendRequest(request); - /// Poco::Net::HTTPResponse; - /// std::istream& istr = session.receiveResponse(response); - /// - /// If the server responds with a 401 status, authenticate the - /// request and resend it: - /// if (response.getStatus() == Poco::Net::HTTPResponse::HTTP_UNAUTHORIZED) - /// { - /// creds.authenticate(request, response); - /// session.sendRequest(request); - /// ... - /// } - /// - /// To perform multiple authenticated requests, call updateAuthInfo() - /// instead of authenticate() on subsequent requests. - /// creds.updateAuthInfo(request); - /// session.sendRequest(request); - /// ... - /// - /// Note: Do not forget to read the entire response stream from the 401 response - /// before sending the authenticated request, otherwise there may be - /// problems if a persistent connection is used. -{ -public: - HTTPCredentials(); - /// Creates an empty HTTPCredentials object. - - HTTPCredentials(const std::string& username, const std::string& password); - /// Creates an HTTPCredentials object with the given username and password. - - ~HTTPCredentials(); - /// Destroys the HTTPCredentials. - - void fromUserInfo(const std::string& userInfo); - /// Parses username:password string and sets username and password of - /// the credentials object. - /// Throws SyntaxException on invalid user information. - - void fromURI(const URI& uri); - /// Extracts username and password from the given URI and sets username - /// and password of the credentials object. - /// Does nothing if URI has no user info part. - - void setUsername(const std::string& username); - /// Sets the username. - - const std::string& getUsername() const; - /// Returns the username. - - void setPassword(const std::string& password); - /// Sets the password. - - const std::string& getPassword() const; - /// Returns the password. - - void authenticate(HTTPRequest& request, const HTTPResponse& response); - /// Inspects WWW-Authenticate header of the response, initializes - /// the internal state (in case of digest authentication) and - /// adds required information to the given HTTPRequest. - /// - /// Does nothing if there is no WWW-Authenticate header in the - /// HTTPResponse. - - void updateAuthInfo(HTTPRequest& request); - /// Updates internal state (in case of digest authentication) and - /// replaces authentication information in the request accordingly. - - void proxyAuthenticate(HTTPRequest& request, const HTTPResponse& response); - /// Inspects Proxy-Authenticate header of the response, initializes - /// the internal state (in case of digest authentication) and - /// adds required information to the given HTTPRequest. - /// - /// Does nothing if there is no Proxy-Authenticate header in the - /// HTTPResponse. - - void updateProxyAuthInfo(HTTPRequest& request); - /// Updates internal state (in case of digest authentication) and - /// replaces proxy authentication information in the request accordingly. - - static bool isBasicCredentials(const std::string& header); - /// Returns true if authentication header is for Basic authentication. - - static bool isDigestCredentials(const std::string& header); - /// Returns true if authentication header is for Digest authentication. - - static bool hasBasicCredentials(const HTTPRequest& request); - /// Returns true if Authorization with Basic credentials header is present in the request. - - static bool hasDigestCredentials(const HTTPRequest& request); - /// Returns true if Authorization with Digest credentials header is present in the request. - - static bool hasProxyBasicCredentials(const HTTPRequest& request); - /// Returns true if Authorization with Basic credentials header is present in the request. - - static bool hasProxyDigestCredentials(const HTTPRequest& request); - /// Returns true if Authorization with Digest credentials header is present in the request. - - static void extractCredentials(const std::string& userInfo, std::string& username, std::string& password); - /// Extracts username and password from user:password information string. - - static void extractCredentials(const Poco::URI& uri, std::string& username, std::string& password); - /// Extracts username and password from the given URI (e.g.: "http://user:pass@sample.com/secret"). - -private: - HTTPCredentials(const HTTPCredentials&); - HTTPCredentials& operator = (const HTTPCredentials&); - - HTTPDigestCredentials _digest; -}; - - -// -// inlines -// -inline void HTTPCredentials::setUsername(const std::string& username) -{ - _digest.setUsername(username); -} - - -inline const std::string& HTTPCredentials::getUsername() const -{ - return _digest.getUsername(); -} - - -inline void HTTPCredentials::setPassword(const std::string& password) -{ - _digest.setPassword(password); -} - - -inline const std::string& HTTPCredentials::getPassword() const -{ - return _digest.getPassword(); -} - - -} } // namespace Poco::Net - - -#endif // Net_HTTPCredentials_INCLUDED diff --git a/contrib/libpoco/Net/include/Poco/Net/HTTPDigestCredentials.h b/contrib/libpoco/Net/include/Poco/Net/HTTPDigestCredentials.h deleted file mode 100644 index 709077d3f30..00000000000 --- a/contrib/libpoco/Net/include/Poco/Net/HTTPDigestCredentials.h +++ /dev/null @@ -1,175 +0,0 @@ -// -// HTTPDigestCredentials.h -// -// $Id: //poco/1.4/Net/include/Poco/Net/HTTPDigestCredentials.h#3 $ -// -// Library: Net -// Package: HTTP -// Module: HTTPDigestCredentials -// -// Definition of the HTTPDigestCredentials class. -// -// Copyright (c) 2011, Anton V. Yabchinskiy (arn at bestmx dot ru). -// Copyright (c) 2012, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Net_HTTPDigestCredentials_INCLUDED -#define Net_HTTPDigestCredentials_INCLUDED - - -#include "Poco/Net/HTTPAuthenticationParams.h" -#include "Poco/Mutex.h" -#include - - -namespace Poco { -namespace Net { - - -class HTTPRequest; -class HTTPResponse; - - -class Net_API HTTPDigestCredentials - /// This is a utility class for working with - /// HTTP Digest Authentication in HTTPRequest - /// objects. - /// - /// Note: currently, no qop or qop=auth is - /// supported only. -{ -public: - HTTPDigestCredentials(); - /// Creates an empty HTTPDigestCredentials object. - - HTTPDigestCredentials(const std::string& username, const std::string& password); - /// Creates a HTTPDigestCredentials object with the given username and password. - - ~HTTPDigestCredentials(); - /// Destroys the HTTPDigestCredentials. - - void reset(); - /// Resets the HTTPDigestCredentials object to a clean state. - - void setUsername(const std::string& username); - /// Sets the username. - - const std::string& getUsername() const; - /// Returns the username. - - void setPassword(const std::string& password); - /// Sets the password. - - const std::string& getPassword() const; - /// Returns the password. - - void authenticate(HTTPRequest& request, const HTTPResponse& response); - /// Parses WWW-Authenticate header of the HTTPResponse, initializes - /// internal state, and adds authentication information to the given HTTPRequest. - - void authenticate(HTTPRequest& request, const HTTPAuthenticationParams& responseAuthParams); - /// Initializes internal state according to information from the - /// HTTPAuthenticationParams of the response, and adds authentication - /// information to the given HTTPRequest. - /// - /// Throws InvalidArgumentException if HTTPAuthenticationParams is - /// invalid or some required parameter is missing. - /// Throws NotImplementedException in case of unsupported digest - /// algorithm or quality of protection method. - - void updateAuthInfo(HTTPRequest& request); - /// Updates internal state and adds authentication information to - /// the given HTTPRequest. - - void proxyAuthenticate(HTTPRequest& request, const HTTPResponse& response); - /// Parses Proxy-Authenticate header of the HTTPResponse, initializes - /// internal state, and adds proxy authentication information to the given HTTPRequest. - - void proxyAuthenticate(HTTPRequest& request, const HTTPAuthenticationParams& responseAuthParams); - /// Initializes internal state according to information from the - /// HTTPAuthenticationParams of the response, and adds proxy authentication - /// information to the given HTTPRequest. - /// - /// Throws InvalidArgumentException if HTTPAuthenticationParams is - /// invalid or some required parameter is missing. - /// Throws NotImplementedException in case of unsupported digest - /// algorithm or quality of protection method. - - void updateProxyAuthInfo(HTTPRequest& request); - /// Updates internal state and adds proxy authentication information to - /// the given HTTPRequest. - - bool verifyAuthInfo(const HTTPRequest& request) const; - /// Verifies the digest authentication information in the given HTTPRequest - /// by recomputing the response and comparing it with what's in the request. - /// - /// Note: This method creates a HTTPAuthenticationParams object from the request - /// and calls verifyAuthParams() with request and params. - - bool verifyAuthParams(const HTTPRequest& request, const HTTPAuthenticationParams& params) const; - /// Verifies the digest authentication information in the given HTTPRequest - /// and HTTPAuthenticationParams by recomputing the response and comparing - /// it with what's in the request. - - static std::string createNonce(); - /// Creates a random nonce string. - - static const std::string SCHEME; - -private: - HTTPDigestCredentials(const HTTPDigestCredentials&); - HTTPDigestCredentials& operator = (const HTTPDigestCredentials&); - - void createAuthParams(const HTTPRequest& request, const HTTPAuthenticationParams& responseAuthParams); - void updateAuthParams(const HTTPRequest& request); - int updateNonceCounter(const std::string& nonce); - - static const std::string DEFAULT_ALGORITHM; - static const std::string DEFAULT_QOP; - static const std::string NONCE_PARAM; - static const std::string REALM_PARAM; - static const std::string QOP_PARAM; - static const std::string ALGORITHM_PARAM; - static const std::string USERNAME_PARAM; - static const std::string OPAQUE_PARAM; - static const std::string URI_PARAM; - static const std::string RESPONSE_PARAM; - static const std::string AUTH_PARAM; - static const std::string CNONCE_PARAM; - static const std::string NC_PARAM; - - typedef std::map NonceCounterMap; - - std::string _username; - std::string _password; - HTTPAuthenticationParams _requestAuthParams; - NonceCounterMap _nc; - - static int _nonceCounter; - static Poco::FastMutex _nonceMutex; -}; - - -// -// inlines -// -inline const std::string& HTTPDigestCredentials::getUsername() const -{ - return _username; -} - - -inline const std::string& HTTPDigestCredentials::getPassword() const -{ - return _password; -} - - -} } // namespace Poco::Net - - -#endif // Net_HTTPDigestCredentials_INCLUDED diff --git a/contrib/libpoco/Net/include/Poco/Net/HTTPFixedLengthStream.h b/contrib/libpoco/Net/include/Poco/Net/HTTPFixedLengthStream.h deleted file mode 100644 index 82309ee7db7..00000000000 --- a/contrib/libpoco/Net/include/Poco/Net/HTTPFixedLengthStream.h +++ /dev/null @@ -1,112 +0,0 @@ -// -// HTTPFixedLengthStream.h -// -// $Id: //poco/1.4/Net/include/Poco/Net/HTTPFixedLengthStream.h#1 $ -// -// Library: Net -// Package: HTTP -// Module: HTTPFixedLengthStream -// -// Definition of the HTTPFixedLengthStream class. -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Net_HTTPFixedLengthStream_INCLUDED -#define Net_HTTPFixedLengthStream_INCLUDED - - -#include "Poco/Net/Net.h" -#include "Poco/Net/HTTPBasicStreamBuf.h" -#include -#include -#include - - -namespace Poco { -namespace Net { - - -class HTTPSession; - - -class Net_API HTTPFixedLengthStreamBuf: public HTTPBasicStreamBuf - /// This is the streambuf class used for reading and writing fixed-size - /// HTTP message bodies. - /// - /// At most a given number of bytes are read or written. -{ -public: - typedef HTTPBasicStreamBuf::openmode openmode; - -#if defined(POCO_HAVE_INT64) - typedef Poco::Int64 ContentLength; -#else - typedef std::streamsize ContentLength; -#endif - - HTTPFixedLengthStreamBuf(HTTPSession& session, ContentLength length, openmode mode); - ~HTTPFixedLengthStreamBuf(); - -protected: - int readFromDevice(char* buffer, std::streamsize length); - int writeToDevice(const char* buffer, std::streamsize length); - -private: - HTTPSession& _session; - ContentLength _length; - ContentLength _count; -}; - - -class Net_API HTTPFixedLengthIOS: public virtual std::ios - /// The base class for HTTPFixedLengthInputStream. -{ -public: - HTTPFixedLengthIOS(HTTPSession& session, HTTPFixedLengthStreamBuf::ContentLength length, HTTPFixedLengthStreamBuf::openmode mode); - ~HTTPFixedLengthIOS(); - HTTPFixedLengthStreamBuf* rdbuf(); - -protected: - HTTPFixedLengthStreamBuf _buf; -}; - - -class Net_API HTTPFixedLengthInputStream: public HTTPFixedLengthIOS, public std::istream - /// This class is for internal use by HTTPSession only. -{ -public: - HTTPFixedLengthInputStream(HTTPSession& session, HTTPFixedLengthStreamBuf::ContentLength length); - ~HTTPFixedLengthInputStream(); - - void* operator new(std::size_t size); - void operator delete(void* ptr); - -private: - static Poco::MemoryPool _pool; -}; - - -class Net_API HTTPFixedLengthOutputStream: public HTTPFixedLengthIOS, public std::ostream - /// This class is for internal use by HTTPSession only. -{ -public: - HTTPFixedLengthOutputStream(HTTPSession& session, HTTPFixedLengthStreamBuf::ContentLength length); - ~HTTPFixedLengthOutputStream(); - - void* operator new(std::size_t size); - void operator delete(void* ptr); - -private: - static Poco::MemoryPool _pool; -}; - - -} } // namespace Poco::Net - - -#endif // Net_HTTPFixedLengthStream_INCLUDED diff --git a/contrib/libpoco/Net/include/Poco/Net/HTTPHeaderStream.h b/contrib/libpoco/Net/include/Poco/Net/HTTPHeaderStream.h deleted file mode 100644 index a3e8960db6e..00000000000 --- a/contrib/libpoco/Net/include/Poco/Net/HTTPHeaderStream.h +++ /dev/null @@ -1,104 +0,0 @@ -// -// HTTPHeaderStream.h -// -// $Id: //poco/1.4/Net/include/Poco/Net/HTTPHeaderStream.h#1 $ -// -// Library: Net -// Package: HTTP -// Module: HTTPHeaderStream -// -// Definition of the HTTPHeaderStream class. -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Net_HTTPHeaderStream_INCLUDED -#define Net_HTTPHeaderStream_INCLUDED - - -#include "Poco/Net/Net.h" -#include "Poco/Net/HTTPBasicStreamBuf.h" -#include "Poco/MemoryPool.h" -#include -#include -#include - - -namespace Poco { -namespace Net { - - -class HTTPSession; - - -class Net_API HTTPHeaderStreamBuf: public HTTPBasicStreamBuf - /// This is the streambuf class used for reading from a HTTP header - /// in a HTTPSession. -{ -public: - typedef HTTPBasicStreamBuf::openmode openmode; - - HTTPHeaderStreamBuf(HTTPSession& session, openmode mode); - ~HTTPHeaderStreamBuf(); - -protected: - int readFromDevice(char* buffer, std::streamsize length); - int writeToDevice(const char* buffer, std::streamsize length); - -private: - HTTPSession& _session; - bool _end; -}; - - -class Net_API HTTPHeaderIOS: public virtual std::ios - /// The base class for HTTPHeaderInputStream. -{ -public: - HTTPHeaderIOS(HTTPSession& session, HTTPHeaderStreamBuf::openmode mode); - ~HTTPHeaderIOS(); - HTTPHeaderStreamBuf* rdbuf(); - -protected: - HTTPHeaderStreamBuf _buf; -}; - - -class Net_API HTTPHeaderInputStream: public HTTPHeaderIOS, public std::istream - /// This class is for internal use by HTTPSession only. -{ -public: - HTTPHeaderInputStream(HTTPSession& session); - ~HTTPHeaderInputStream(); - - void* operator new(std::size_t size); - void operator delete(void* ptr); - -private: - static Poco::MemoryPool _pool; -}; - - -class Net_API HTTPHeaderOutputStream: public HTTPHeaderIOS, public std::ostream - /// This class is for internal use by HTTPSession only. -{ -public: - HTTPHeaderOutputStream(HTTPSession& session); - ~HTTPHeaderOutputStream(); - - void* operator new(std::size_t size); - void operator delete(void* ptr); - -private: - static Poco::MemoryPool _pool; -}; - - -} } // namespace Poco::Net - - -#endif // Net_HTTPHeaderStream_INCLUDED diff --git a/contrib/libpoco/Net/include/Poco/Net/HTTPIOStream.h b/contrib/libpoco/Net/include/Poco/Net/HTTPIOStream.h deleted file mode 100644 index f6c6f2ffea6..00000000000 --- a/contrib/libpoco/Net/include/Poco/Net/HTTPIOStream.h +++ /dev/null @@ -1,90 +0,0 @@ -// -// HTTPIOStream.h -// -// $Id: //poco/Main/template/class.h#4 $ -// -// Library: Net -// Package: HTTP -// Module: HTTPIOStream -// -// Definition of the HTTPIOStream class. -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Net_HTTPIOStream_INCLUDED -#define Net_HTTPIOStream_INCLUDED - - -#include "Poco/Net/Net.h" -#include "Poco/Net/HTTPResponse.h" -#include "Poco/UnbufferedStreamBuf.h" - - -namespace Poco { -namespace Net { - - -class HTTPClientSession; - - -class Net_API HTTPResponseStreamBuf: public Poco::UnbufferedStreamBuf -{ -public: - HTTPResponseStreamBuf(std::istream& istr); - - ~HTTPResponseStreamBuf(); - -private: - int readFromDevice(); - - std::istream& _istr; -}; - - -inline int HTTPResponseStreamBuf::readFromDevice() -{ - return _istr.get(); -} - - -class Net_API HTTPResponseIOS: public virtual std::ios -{ -public: - HTTPResponseIOS(std::istream& istr); - - ~HTTPResponseIOS(); - - HTTPResponseStreamBuf* rdbuf(); - -protected: - HTTPResponseStreamBuf _buf; -}; - - -inline HTTPResponseStreamBuf* HTTPResponseIOS::rdbuf() -{ - return &_buf; -} - - -class Net_API HTTPResponseStream: public HTTPResponseIOS, public std::istream -{ -public: - HTTPResponseStream(std::istream& istr, HTTPClientSession* pSession); - - ~HTTPResponseStream(); - -private: - HTTPClientSession* _pSession; -}; - - -} } // namespace Poco::Net - - -#endif // Net_HTTPIOStream_INCLUDED diff --git a/contrib/libpoco/Net/include/Poco/Net/HTTPMessage.h b/contrib/libpoco/Net/include/Poco/Net/HTTPMessage.h deleted file mode 100644 index e16451782af..00000000000 --- a/contrib/libpoco/Net/include/Poco/Net/HTTPMessage.h +++ /dev/null @@ -1,187 +0,0 @@ -// -// HTTPMessage.h -// -// $Id: //poco/1.4/Net/include/Poco/Net/HTTPMessage.h#3 $ -// -// Library: Net -// Package: HTTP -// Module: HTTPMessage -// -// Definition of the HTTPMessage class. -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Net_HTTPMessage_INCLUDED -#define Net_HTTPMessage_INCLUDED - - -#include "Poco/Net/Net.h" -#include "Poco/Net/MessageHeader.h" - - -namespace Poco { -namespace Net { - - -class MediaType; - - -class Net_API HTTPMessage: public MessageHeader - /// The base class for HTTPRequest and HTTPResponse. - /// - /// Defines the common properties of all HTTP messages. - /// These are version, content length, content type - /// and transfer encoding. -{ -public: - void setVersion(const std::string& version); - /// Sets the HTTP version for this message. - - const std::string& getVersion() const; - /// Returns the HTTP version for this message. - - void setContentLength(std::streamsize length); - /// Sets the Content-Length header. - /// - /// If length is UNKNOWN_CONTENT_LENGTH, removes - /// the Content-Length header. - - std::streamsize getContentLength() const; - /// Returns the content length for this message, - /// which may be UNKNOWN_CONTENT_LENGTH if - /// no Content-Length header is present. - -#if defined(POCO_HAVE_INT64) - void setContentLength64(Poco::Int64 length); - /// Sets the Content-Length header. - /// - /// If length is UNKNOWN_CONTENT_LENGTH, removes - /// the Content-Length header. - /// - /// In contrast to setContentLength(), this method takes - /// a 64-bit integer as content length. - - Poco::Int64 getContentLength64() const; - /// Returns the content length for this message, - /// which may be UNKNOWN_CONTENT_LENGTH if - /// no Content-Length header is present. - /// - /// In contrast to getContentLength(), this method - /// always returns a 64-bit integer for content length. -#endif // defined(POCO_HAVE_INT64) - - bool hasContentLength() const; - /// Returns true iff a Content-Length header is present. - - void setTransferEncoding(const std::string& transferEncoding); - /// Sets the transfer encoding for this message. - /// - /// The value should be either IDENTITY_TRANSFER_CODING - /// or CHUNKED_TRANSFER_CODING. - - const std::string& getTransferEncoding() const; - /// Returns the transfer encoding used for this - /// message. - /// - /// Normally, this is the value of the Transfer-Encoding - /// header field. If no such field is present, - /// returns IDENTITY_TRANSFER_CODING. - - void setChunkedTransferEncoding(bool flag); - /// If flag is true, sets the Transfer-Encoding header to - /// chunked. Otherwise, removes the Transfer-Encoding - /// header. - - bool getChunkedTransferEncoding() const; - /// Returns true if the Transfer-Encoding header is set - /// and its value is chunked. - - void setContentType(const std::string& mediaType); - /// Sets the content type for this message. - /// - /// Specify NO_CONTENT_TYPE to remove the - /// Content-Type header. - - void setContentType(const MediaType& mediaType); - /// Sets the content type for this message. - - const std::string& getContentType() const; - /// Returns the content type for this message. - /// - /// If no Content-Type header is present, - /// returns UNKNOWN_CONTENT_TYPE. - - void setKeepAlive(bool keepAlive); - /// Sets the value of the Connection header field. - /// - /// The value is set to "Keep-Alive" if keepAlive is - /// true, or to "Close" otherwise. - - bool getKeepAlive() const; - /// Returns true if - /// * the message has a Connection header field and its value is "Keep-Alive" - /// * the message is a HTTP/1.1 message and not Connection header is set - /// Returns false otherwise. - - static const std::string HTTP_1_0; - static const std::string HTTP_1_1; - - static const std::string IDENTITY_TRANSFER_ENCODING; - static const std::string CHUNKED_TRANSFER_ENCODING; - - static const int UNKNOWN_CONTENT_LENGTH; - static const std::string UNKNOWN_CONTENT_TYPE; - - static const std::string CONTENT_LENGTH; - static const std::string CONTENT_TYPE; - static const std::string TRANSFER_ENCODING; - static const std::string CONNECTION; - - static const std::string CONNECTION_KEEP_ALIVE; - static const std::string CONNECTION_CLOSE; - - static const std::string EMPTY; - -protected: - HTTPMessage(); - /// Creates the HTTPMessage with version HTTP/1.0. - - HTTPMessage(const std::string& version); - /// Creates the HTTPMessage and sets - /// the version. - - virtual ~HTTPMessage(); - /// Destroys the HTTPMessage. - -private: - HTTPMessage(const HTTPMessage&); - HTTPMessage& operator = (const HTTPMessage&); - - std::string _version; -}; - - -// -// inlines -// -inline const std::string& HTTPMessage::getVersion() const -{ - return _version; -} - - -inline bool HTTPMessage::hasContentLength() const -{ - return has(CONTENT_LENGTH); -} - - -} } // namespace Poco::Net - - -#endif // Net_HTTPMessage_INCLUDED diff --git a/contrib/libpoco/Net/include/Poco/Net/HTTPRequest.h b/contrib/libpoco/Net/include/Poco/Net/HTTPRequest.h deleted file mode 100644 index 497ff26c638..00000000000 --- a/contrib/libpoco/Net/include/Poco/Net/HTTPRequest.h +++ /dev/null @@ -1,192 +0,0 @@ -// -// HTTPRequest.h -// -// $Id: //poco/1.4/Net/include/Poco/Net/HTTPRequest.h#3 $ -// -// Library: Net -// Package: HTTP -// Module: HTTPRequest -// -// Definition of the HTTPRequest class. -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Net_HTTPRequest_INCLUDED -#define Net_HTTPRequest_INCLUDED - - -#include "Poco/Net/Net.h" -#include "Poco/Net/HTTPMessage.h" - - -namespace Poco { -namespace Net { - - -class Net_API HTTPRequest: public HTTPMessage - /// This class encapsulates an HTTP request - /// message. - /// - /// In addition to the properties common to - /// all HTTP messages, a HTTP request has - /// a method (e.g. GET, HEAD, POST, etc.) and - /// a request URI. -{ -public: - HTTPRequest(); - /// Creates a GET / HTTP/1.0 HTTP request. - - HTTPRequest(const std::string& version); - /// Creates a GET / HTTP/1.x request with - /// the given version (HTTP/1.0 or HTTP/1.1). - - HTTPRequest(const std::string& method, const std::string& uri); - /// Creates a HTTP/1.0 request with the given method and URI. - - HTTPRequest(const std::string& method, const std::string& uri, const std::string& version); - /// Creates a HTTP request with the given method, URI and version. - - virtual ~HTTPRequest(); - /// Destroys the HTTPRequest. - - void setMethod(const std::string& method); - /// Sets the method. - - const std::string& getMethod() const; - /// Returns the method. - - void setURI(const std::string& uri); - /// Sets the request URI. - - const std::string& getURI() const; - /// Returns the request URI. - - void setHost(const std::string& host); - /// Sets the value of the Host header field. - - void setHost(const std::string& host, Poco::UInt16 port); - /// Sets the value of the Host header field. - /// - /// If the given port number is a non-standard - /// port number (other than 80 or 443), it is - /// included in the Host header field. - - const std::string& getHost() const; - /// Returns the value of the Host header field. - /// - /// Throws a NotFoundException if the request - /// does not have a Host header field. - - void setCookies(const NameValueCollection& cookies); - /// Adds a Cookie header with the names and - /// values from cookies. - - void getCookies(NameValueCollection& cookies) const; - /// Fills cookies with the cookies extracted - /// from the Cookie headers in the request. - - bool hasCredentials() const; - /// Returns true iff the request contains authentication - /// information in the form of an Authorization header. - - void getCredentials(std::string& scheme, std::string& authInfo) const; - /// Returns the authentication scheme and additional authentication - /// information contained in this request. - /// - /// Throws a NotAuthenticatedException if no authentication information - /// is contained in the request. - - void setCredentials(const std::string& scheme, const std::string& authInfo); - /// Sets the authentication scheme and information for - /// this request. - - bool hasProxyCredentials() const; - /// Returns true iff the request contains proxy authentication - /// information in the form of an Proxy-Authorization header. - - void getProxyCredentials(std::string& scheme, std::string& authInfo) const; - /// Returns the proxy authentication scheme and additional proxy authentication - /// information contained in this request. - /// - /// Throws a NotAuthenticatedException if no proxy authentication information - /// is contained in the request. - - void setProxyCredentials(const std::string& scheme, const std::string& authInfo); - /// Sets the proxy authentication scheme and information for - /// this request. - - void write(std::ostream& ostr) const; - /// Writes the HTTP request to the given - /// output stream. - - void read(std::istream& istr); - /// Reads the HTTP request from the - /// given input stream. - - static const std::string HTTP_GET; - static const std::string HTTP_HEAD; - static const std::string HTTP_PUT; - static const std::string HTTP_POST; - static const std::string HTTP_OPTIONS; - static const std::string HTTP_DELETE; - static const std::string HTTP_TRACE; - static const std::string HTTP_CONNECT; - - static const std::string HOST; - static const std::string COOKIE; - static const std::string AUTHORIZATION; - static const std::string PROXY_AUTHORIZATION; - static const std::string UPGRADE; - -protected: - void getCredentials(const std::string& header, std::string& scheme, std::string& authInfo) const; - /// Returns the authentication scheme and additional authentication - /// information contained in the given header of request. - /// - /// Throws a NotAuthenticatedException if no authentication information - /// is contained in the request. - - void setCredentials(const std::string& header, const std::string& scheme, const std::string& authInfo); - /// Writes the authentication scheme and information for - /// this request to the given header. - -private: - enum Limits - { - MAX_METHOD_LENGTH = 32, - MAX_URI_LENGTH = 16384, - MAX_VERSION_LENGTH = 8 - }; - - std::string _method; - std::string _uri; - - HTTPRequest(const HTTPRequest&); - HTTPRequest& operator = (const HTTPRequest&); -}; - - -// -// inlines -// -inline const std::string& HTTPRequest::getMethod() const -{ - return _method; -} - - -inline const std::string& HTTPRequest::getURI() const -{ - return _uri; -} - - -} } // namespace Poco::Net - - -#endif // Net_HTTPRequest_INCLUDED diff --git a/contrib/libpoco/Net/include/Poco/Net/HTTPRequestHandler.h b/contrib/libpoco/Net/include/Poco/Net/HTTPRequestHandler.h deleted file mode 100644 index 1da6f084c9c..00000000000 --- a/contrib/libpoco/Net/include/Poco/Net/HTTPRequestHandler.h +++ /dev/null @@ -1,69 +0,0 @@ -// -// HTTPRequestHandler.h -// -// $Id: //poco/1.4/Net/include/Poco/Net/HTTPRequestHandler.h#1 $ -// -// Library: Net -// Package: HTTPServer -// Module: HTTPRequestHandler -// -// Definition of the HTTPRequestHandler class. -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Net_HTTPRequestHandler_INCLUDED -#define Net_HTTPRequestHandler_INCLUDED - - -#include "Poco/Net/Net.h" - - -namespace Poco { -namespace Net { - - -class HTTPServerRequest; -class HTTPServerResponse; - - -class Net_API HTTPRequestHandler - /// The abstract base class for HTTPRequestHandlers - /// created by HTTPServer. - /// - /// Derived classes must override the handleRequest() method. - /// Furthermore, a HTTPRequestHandlerFactory must be provided. - /// - /// The handleRequest() method must perform the complete handling - /// of the HTTP request connection. As soon as the handleRequest() - /// method returns, the request handler object is destroyed. - /// - /// A new HTTPRequestHandler object will be created for - /// each new HTTP request that is received by the HTTPServer. -{ -public: - HTTPRequestHandler(); - /// Creates the HTTPRequestHandler. - - virtual ~HTTPRequestHandler(); - /// Destroys the HTTPRequestHandler. - - virtual void handleRequest(HTTPServerRequest& request, HTTPServerResponse& response) = 0; - /// Must be overridden by subclasses. - /// - /// Handles the given request. - -private: - HTTPRequestHandler(const HTTPRequestHandler&); - HTTPRequestHandler& operator = (const HTTPRequestHandler&); -}; - - -} } // namespace Poco::Net - - -#endif // Net_HTTPRequestHandler_INCLUDED diff --git a/contrib/libpoco/Net/include/Poco/Net/HTTPRequestHandlerFactory.h b/contrib/libpoco/Net/include/Poco/Net/HTTPRequestHandlerFactory.h deleted file mode 100644 index 6bf9fc9aa49..00000000000 --- a/contrib/libpoco/Net/include/Poco/Net/HTTPRequestHandlerFactory.h +++ /dev/null @@ -1,71 +0,0 @@ -// -// HTTPRequestHandlerFactory.h -// -// $Id: //poco/1.4/Net/include/Poco/Net/HTTPRequestHandlerFactory.h#1 $ -// -// Library: Net -// Package: HTTPServer -// Module: HTTPRequestHandlerFactory -// -// Definition of the HTTPRequestHandlerFactory class. -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Net_HTTPRequestHandlerFactory_INCLUDED -#define Net_HTTPRequestHandlerFactory_INCLUDED - - -#include "Poco/Net/Net.h" -#include "Poco/SharedPtr.h" -#include "Poco/BasicEvent.h" - - -namespace Poco { -namespace Net { - - -class HTTPServerRequest; -class HTTPServerResponse; -class HTTPRequestHandler; - - -class Net_API HTTPRequestHandlerFactory - /// A factory for HTTPRequestHandler objects. - /// Subclasses must override the createRequestHandler() - /// method. -{ -public: - typedef Poco::SharedPtr Ptr; - - HTTPRequestHandlerFactory(); - /// Creates the HTTPRequestHandlerFactory. - - virtual ~HTTPRequestHandlerFactory(); - /// Destroys the HTTPRequestHandlerFactory. - - virtual HTTPRequestHandler* createRequestHandler(const HTTPServerRequest& request) = 0; - /// Must be overridden by sublasses. - /// - /// Creates a new request handler for the given HTTP request. - -protected: - Poco::BasicEvent serverStopped; - -private: - HTTPRequestHandlerFactory(const HTTPRequestHandlerFactory&); - HTTPRequestHandlerFactory& operator = (const HTTPRequestHandlerFactory&); - - friend class HTTPServer; - friend class HTTPServerConnection; -}; - - -} } // namespace Poco::Net - - -#endif // Net_HTTPRequestHandlerFactory_INCLUDED diff --git a/contrib/libpoco/Net/include/Poco/Net/HTTPResponse.h b/contrib/libpoco/Net/include/Poco/Net/HTTPResponse.h deleted file mode 100644 index cdd62364752..00000000000 --- a/contrib/libpoco/Net/include/Poco/Net/HTTPResponse.h +++ /dev/null @@ -1,255 +0,0 @@ -// -// HTTPResponse.h -// -// $Id: //poco/1.4/Net/include/Poco/Net/HTTPResponse.h#1 $ -// -// Library: Net -// Package: HTTP -// Module: HTTPResponse -// -// Definition of the HTTPResponse class. -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Net_HTTPResponse_INCLUDED -#define Net_HTTPResponse_INCLUDED - - -#include "Poco/Net/Net.h" -#include "Poco/Net/HTTPMessage.h" -#include "Poco/Net/HTTPCookie.h" -#include "Poco/Timestamp.h" -#include - - -namespace Poco { -namespace Net { - - -class HTTPCookie; - - -class Net_API HTTPResponse: public HTTPMessage - /// This class encapsulates an HTTP response - /// message. - /// - /// In addition to the properties common to - /// all HTTP messages, a HTTP response has - /// status code and a reason phrase. -{ -public: - enum HTTPStatus - { - HTTP_CONTINUE = 100, - HTTP_SWITCHING_PROTOCOLS = 101, - HTTP_OK = 200, - HTTP_CREATED = 201, - HTTP_ACCEPTED = 202, - HTTP_NONAUTHORITATIVE = 203, - HTTP_NO_CONTENT = 204, - HTTP_RESET_CONTENT = 205, - HTTP_PARTIAL_CONTENT = 206, - HTTP_MULTIPLE_CHOICES = 300, - HTTP_MOVED_PERMANENTLY = 301, - HTTP_FOUND = 302, - HTTP_SEE_OTHER = 303, - HTTP_NOT_MODIFIED = 304, - HTTP_USEPROXY = 305, - // UNUSED: 306 - HTTP_TEMPORARY_REDIRECT = 307, - HTTP_BAD_REQUEST = 400, - HTTP_UNAUTHORIZED = 401, - HTTP_PAYMENT_REQUIRED = 402, - HTTP_FORBIDDEN = 403, - HTTP_NOT_FOUND = 404, - HTTP_METHOD_NOT_ALLOWED = 405, - HTTP_NOT_ACCEPTABLE = 406, - HTTP_PROXY_AUTHENTICATION_REQUIRED = 407, - HTTP_REQUEST_TIMEOUT = 408, - HTTP_CONFLICT = 409, - HTTP_GONE = 410, - HTTP_LENGTH_REQUIRED = 411, - HTTP_PRECONDITION_FAILED = 412, - HTTP_REQUESTENTITYTOOLARGE = 413, - HTTP_REQUESTURITOOLONG = 414, - HTTP_UNSUPPORTEDMEDIATYPE = 415, - HTTP_REQUESTED_RANGE_NOT_SATISFIABLE = 416, - HTTP_EXPECTATION_FAILED = 417, - HTTP_INTERNAL_SERVER_ERROR = 500, - HTTP_NOT_IMPLEMENTED = 501, - HTTP_BAD_GATEWAY = 502, - HTTP_SERVICE_UNAVAILABLE = 503, - HTTP_GATEWAY_TIMEOUT = 504, - HTTP_VERSION_NOT_SUPPORTED = 505 - }; - - HTTPResponse(); - /// Creates the HTTPResponse with OK status. - - HTTPResponse(HTTPStatus status, const std::string& reason); - /// Creates the HTTPResponse with the given status - /// and reason phrase. - - HTTPResponse(const std::string& version, HTTPStatus status, const std::string& reason); - /// Creates the HTTPResponse with the given version, status - /// and reason phrase. - - HTTPResponse(HTTPStatus status); - /// Creates the HTTPResponse with the given status - /// an an appropriate reason phrase. - - HTTPResponse(const std::string& version, HTTPStatus status); - /// Creates the HTTPResponse with the given version, status - /// an an appropriate reason phrase. - - virtual ~HTTPResponse(); - /// Destroys the HTTPResponse. - - void setStatus(HTTPStatus status); - /// Sets the HTTP status code. - /// - /// Does not change the reason phrase. - - HTTPStatus getStatus() const; - /// Returns the HTTP status code. - - void setStatus(const std::string& status); - /// Sets the HTTP status code. - /// - /// The string must contain a valid - /// HTTP numerical status code. - - void setReason(const std::string& reason); - /// Sets the HTTP reason phrase. - - const std::string& getReason() const; - /// Returns the HTTP reason phrase. - - void setStatusAndReason(HTTPStatus status, const std::string& reason); - /// Sets the HTTP status code and reason phrase. - - void setStatusAndReason(HTTPStatus status); - /// Sets the HTTP status code and reason phrase. - /// - /// The reason phrase is set according to the status code. - - void setDate(const Poco::Timestamp& dateTime); - /// Sets the Date header to the given date/time value. - - Poco::Timestamp getDate() const; - /// Returns the value of the Date header. - - void addCookie(const HTTPCookie& cookie); - /// Adds the cookie to the response by - /// adding a Set-Cookie header. - - void getCookies(std::vector& cookies) const; - /// Returns a vector with all the cookies - /// set in the response header. - /// - /// May throw an exception in case of a malformed - /// Set-Cookie header. - - void write(std::ostream& ostr) const; - /// Writes the HTTP response to the given - /// output stream. - - void beginWrite(std::ostream& ostr) const; - /// Writes the HTTP response to the given - /// output stream, but do not finish with \r\n delimiter. - - void read(std::istream& istr); - /// Reads the HTTP response from the - /// given input stream. - /// - /// 100 Continue responses are ignored. - - static const std::string& getReasonForStatus(HTTPStatus status); - /// Returns an appropriate reason phrase - /// for the given status code. - - static const std::string HTTP_REASON_CONTINUE; - static const std::string HTTP_REASON_SWITCHING_PROTOCOLS; - static const std::string HTTP_REASON_OK; - static const std::string HTTP_REASON_CREATED; - static const std::string HTTP_REASON_ACCEPTED; - static const std::string HTTP_REASON_NONAUTHORITATIVE; - static const std::string HTTP_REASON_NO_CONTENT; - static const std::string HTTP_REASON_RESET_CONTENT; - static const std::string HTTP_REASON_PARTIAL_CONTENT; - static const std::string HTTP_REASON_MULTIPLE_CHOICES; - static const std::string HTTP_REASON_MOVED_PERMANENTLY; - static const std::string HTTP_REASON_FOUND; - static const std::string HTTP_REASON_SEE_OTHER; - static const std::string HTTP_REASON_NOT_MODIFIED; - static const std::string HTTP_REASON_USEPROXY; - static const std::string HTTP_REASON_TEMPORARY_REDIRECT; - static const std::string HTTP_REASON_BAD_REQUEST; - static const std::string HTTP_REASON_UNAUTHORIZED; - static const std::string HTTP_REASON_PAYMENT_REQUIRED; - static const std::string HTTP_REASON_FORBIDDEN; - static const std::string HTTP_REASON_NOT_FOUND; - static const std::string HTTP_REASON_METHOD_NOT_ALLOWED; - static const std::string HTTP_REASON_NOT_ACCEPTABLE; - static const std::string HTTP_REASON_PROXY_AUTHENTICATION_REQUIRED; - static const std::string HTTP_REASON_REQUEST_TIMEOUT; - static const std::string HTTP_REASON_CONFLICT; - static const std::string HTTP_REASON_GONE; - static const std::string HTTP_REASON_LENGTH_REQUIRED; - static const std::string HTTP_REASON_PRECONDITION_FAILED; - static const std::string HTTP_REASON_REQUESTENTITYTOOLARGE; - static const std::string HTTP_REASON_REQUESTURITOOLONG; - static const std::string HTTP_REASON_UNSUPPORTEDMEDIATYPE; - static const std::string HTTP_REASON_REQUESTED_RANGE_NOT_SATISFIABLE; - static const std::string HTTP_REASON_EXPECTATION_FAILED; - static const std::string HTTP_REASON_INTERNAL_SERVER_ERROR; - static const std::string HTTP_REASON_NOT_IMPLEMENTED; - static const std::string HTTP_REASON_BAD_GATEWAY; - static const std::string HTTP_REASON_SERVICE_UNAVAILABLE; - static const std::string HTTP_REASON_GATEWAY_TIMEOUT; - static const std::string HTTP_REASON_VERSION_NOT_SUPPORTED; - static const std::string HTTP_REASON_UNKNOWN; - - static const std::string DATE; - static const std::string SET_COOKIE; - -private: - enum Limits - { - MAX_VERSION_LENGTH = 8, - MAX_STATUS_LENGTH = 3, - MAX_REASON_LENGTH = 512 - }; - - HTTPStatus _status; - std::string _reason; - - HTTPResponse(const HTTPResponse&); - HTTPResponse& operator = (const HTTPResponse&); -}; - - -// -// inlines -// -inline HTTPResponse::HTTPStatus HTTPResponse::getStatus() const -{ - return _status; -} - - -inline const std::string& HTTPResponse::getReason() const -{ - return _reason; -} - - -} } // namespace Poco::Net - - -#endif // Net_HTTPResponse_INCLUDED diff --git a/contrib/libpoco/Net/include/Poco/Net/HTTPServer.h b/contrib/libpoco/Net/include/Poco/Net/HTTPServer.h deleted file mode 100644 index c849088244b..00000000000 --- a/contrib/libpoco/Net/include/Poco/Net/HTTPServer.h +++ /dev/null @@ -1,105 +0,0 @@ -// -// HTTPServer.h -// -// $Id: //poco/1.4/Net/include/Poco/Net/HTTPServer.h#1 $ -// -// Library: Net -// Package: HTTPServer -// Module: HTTPServer -// -// Definition of the HTTPServer class. -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Net_HTTPServer_INCLUDED -#define Net_HTTPServer_INCLUDED - - -#include "Poco/Net/Net.h" -#include "Poco/Net/TCPServer.h" -#include "Poco/Net/HTTPRequestHandlerFactory.h" -#include "Poco/Net/HTTPServerParams.h" - - -namespace Poco { -namespace Net { - - -class Net_API HTTPServer: public TCPServer - /// A subclass of TCPServer that implements a - /// full-featured multithreaded HTTP server. - /// - /// A HTTPRequestHandlerFactory must be supplied. - /// The ServerSocket must be bound and in listening state. - /// - /// To configure various aspects of the server, a HTTPServerParams - /// object can be passed to the constructor. - /// - /// The server supports: - /// - HTTP/1.0 and HTTP/1.1 - /// - automatic handling of persistent connections. - /// - automatic decoding/encoding of request/response message bodies - /// using chunked transfer encoding. - /// - /// Please see the TCPServer class for information about - /// connection and thread handling. - /// - /// See RFC 2616 for more - /// information about the HTTP protocol. -{ -public: - HTTPServer(HTTPRequestHandlerFactory::Ptr pFactory, Poco::UInt16 portNumber = 80, HTTPServerParams::Ptr pParams = new HTTPServerParams); - /// Creates HTTPServer listening on the given port (default 80). - /// - /// The server takes ownership of the HTTPRequstHandlerFactory - /// and deletes it when it's no longer needed. - /// - /// New threads are taken from the default thread pool. - - HTTPServer(HTTPRequestHandlerFactory::Ptr pFactory, const ServerSocket& socket, HTTPServerParams::Ptr pParams); - /// Creates the HTTPServer, using the given ServerSocket. - /// - /// The server takes ownership of the HTTPRequstHandlerFactory - /// and deletes it when it's no longer needed. - /// - /// The server also takes ownership of the HTTPServerParams object. - /// - /// New threads are taken from the default thread pool. - - HTTPServer(HTTPRequestHandlerFactory::Ptr pFactory, Poco::ThreadPool& threadPool, const ServerSocket& socket, HTTPServerParams::Ptr pParams); - /// Creates the HTTPServer, using the given ServerSocket. - /// - /// The server takes ownership of the HTTPRequstHandlerFactory - /// and deletes it when it's no longer needed. - /// - /// The server also takes ownership of the HTTPServerParams object. - /// - /// New threads are taken from the given thread pool. - - ~HTTPServer(); - /// Destroys the HTTPServer and its HTTPRequestHandlerFactory. - - void stopAll(bool abortCurrent = false); - /// Stops the server. In contrast to TCPServer::stop(), which also - /// stops the server, but allows all client connections to finish at - /// their pace, this allows finer control over client connections. - /// - /// If abortCurrent is false, all current requests are allowed to - /// complete. If abortCurrent is true, the underlying sockets of - /// all client connections are shut down, causing all requests - /// to abort. - -private: - HTTPRequestHandlerFactory::Ptr _pFactory; -}; - - -} } // namespace Poco::Net - - -#endif // Net_HTTPServer_INCLUDED diff --git a/contrib/libpoco/Net/include/Poco/Net/HTTPServerConnection.h b/contrib/libpoco/Net/include/Poco/Net/HTTPServerConnection.h deleted file mode 100644 index 6cc5b51744a..00000000000 --- a/contrib/libpoco/Net/include/Poco/Net/HTTPServerConnection.h +++ /dev/null @@ -1,69 +0,0 @@ -// -// HTTPServerConnection.h -// -// $Id: //poco/1.4/Net/include/Poco/Net/HTTPServerConnection.h#1 $ -// -// Library: Net -// Package: HTTPServer -// Module: HTTPServerConnection -// -// Definition of the HTTPServerConnection class. -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Net_HTTPServerConnection_INCLUDED -#define Net_HTTPServerConnection_INCLUDED - - -#include "Poco/Net/Net.h" -#include "Poco/Net/TCPServerConnection.h" -#include "Poco/Net/HTTPResponse.h" -#include "Poco/Net/HTTPRequestHandlerFactory.h" -#include "Poco/Net/HTTPServerParams.h" -#include "Poco/Mutex.h" - -#include - - -namespace Poco { -namespace Net { - - -class HTTPServerSession; - - -class Net_API HTTPServerConnection: public TCPServerConnection - /// This subclass of TCPServerConnection handles HTTP - /// connections. -{ -public: - HTTPServerConnection(const StreamSocket& socket, HTTPServerParams::Ptr pParams, HTTPRequestHandlerFactory::Ptr pFactory); - /// Creates the HTTPServerConnection. - - virtual ~HTTPServerConnection(); - /// Destroys the HTTPServerConnection. - - void run(); - /// Handles all HTTP requests coming in. - -protected: - void sendErrorResponse(HTTPServerSession& session, HTTPResponse::HTTPStatus status); - void onServerStopped(const bool& abortCurrent); - -private: - HTTPServerParams::Ptr _pParams; - HTTPRequestHandlerFactory::Ptr _pFactory; - std::atomic _stopped; - Poco::FastMutex _mutex; -}; - - -} } // namespace Poco::Net - - -#endif // Net_HTTPServerConnection_INCLUDED diff --git a/contrib/libpoco/Net/include/Poco/Net/HTTPServerConnectionFactory.h b/contrib/libpoco/Net/include/Poco/Net/HTTPServerConnectionFactory.h deleted file mode 100644 index eb086ff9d57..00000000000 --- a/contrib/libpoco/Net/include/Poco/Net/HTTPServerConnectionFactory.h +++ /dev/null @@ -1,57 +0,0 @@ -// -// HTTPServerConnectionFactory.h -// -// $Id: //poco/1.4/Net/include/Poco/Net/HTTPServerConnectionFactory.h#1 $ -// -// Library: Net -// Package: HTTPServer -// Module: HTTPServerConnectionFactory -// -// Definition of the HTTPServerConnectionFactory class. -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Net_HTTPServerConnectionFactory_INCLUDED -#define Net_HTTPServerConnectionFactory_INCLUDED - - -#include "Poco/Net/Net.h" -#include "Poco/Net/TCPServerConnectionFactory.h" -#include "Poco/Net/HTTPRequestHandlerFactory.h" -#include "Poco/Net/HTTPServerParams.h" - - -namespace Poco { -namespace Net { - - -class Net_API HTTPServerConnectionFactory: public TCPServerConnectionFactory - /// This implementation of a TCPServerConnectionFactory - /// is used by HTTPServer to create HTTPServerConnection objects. -{ -public: - HTTPServerConnectionFactory(HTTPServerParams::Ptr pParams, HTTPRequestHandlerFactory::Ptr pFactory); - /// Creates the HTTPServerConnectionFactory. - - ~HTTPServerConnectionFactory(); - /// Destroys the HTTPServerConnectionFactory. - - TCPServerConnection* createConnection(const StreamSocket& socket); - /// Creates an instance of HTTPServerConnection - /// using the given StreamSocket. - -private: - HTTPServerParams::Ptr _pParams; - HTTPRequestHandlerFactory::Ptr _pFactory; -}; - - -} } // namespace Poco::Net - - -#endif // Net_HTTPServerConnectionFactory_INCLUDED diff --git a/contrib/libpoco/Net/include/Poco/Net/HTTPServerParams.h b/contrib/libpoco/Net/include/Poco/Net/HTTPServerParams.h deleted file mode 100644 index 865659911ed..00000000000 --- a/contrib/libpoco/Net/include/Poco/Net/HTTPServerParams.h +++ /dev/null @@ -1,156 +0,0 @@ -// -// HTTPServerParams.h -// -// $Id: //poco/1.4/Net/include/Poco/Net/HTTPServerParams.h#1 $ -// -// Library: Net -// Package: HTTPServer -// Module: HTTPServerParams -// -// Definition of the HTTPServerParams class. -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Net_HTTPServerParams_INCLUDED -#define Net_HTTPServerParams_INCLUDED - - -#include "Poco/Net/Net.h" -#include "Poco/Net/TCPServerParams.h" - - -namespace Poco { -namespace Net { - - -class Net_API HTTPServerParams: public TCPServerParams - /// This class is used to specify parameters to both the - /// HTTPServer, as well as to HTTPRequestHandler objects. - /// - /// Subclasses may add new parameters to the class. -{ -public: - typedef Poco::AutoPtr Ptr; - - HTTPServerParams(); - /// Creates the HTTPServerParams. - /// - /// Sets the following default values: - /// - timeout: 60 seconds - /// - keepAlive: true - /// - maxKeepAliveRequests: 0 - /// - keepAliveTimeout: 10 seconds - - void setServerName(const std::string& serverName); - /// Sets the name and port (name:port) that the server uses to identify itself. - /// - /// If this is not set to valid DNS name for your host, server-generated - /// redirections will not work. - - const std::string& getServerName() const; - /// Returns the name and port (name:port) that the server uses to identify itself. - - void setSoftwareVersion(const std::string& softwareVersion); - /// Sets the server software name and version that the server uses to identify - /// itself. If this is set to a non-empty string, the server will - /// automatically include a Server header field with the value given - /// here in every response it sends. - /// - /// The format of the softwareVersion string should be name/version - /// (e.g. MyHTTPServer/1.0). - - const std::string& getSoftwareVersion() const; - /// Returns the server software name and version that the server uses to - /// identify itself. - - void setTimeout(const Poco::Timespan& timeout); - /// Sets the connection timeout for HTTP connections. - - const Poco::Timespan& getTimeout() const; - /// Returns the connection timeout for HTTP connections. - - void setKeepAlive(bool keepAlive); - /// Enables (keepAlive == true) or disables (keepAlive == false) - /// persistent connections. - - bool getKeepAlive() const; - /// Returns true iff persistent connections are enabled. - - void setKeepAliveTimeout(const Poco::Timespan& timeout); - /// Sets the connection timeout for HTTP connections. - - const Poco::Timespan& getKeepAliveTimeout() const; - /// Returns the connection timeout for HTTP connections. - - void setMaxKeepAliveRequests(int maxKeepAliveRequests); - /// Specifies the maximun number of requests allowed - /// during a persistent connection. 0 means unlimited - /// connections. - - int getMaxKeepAliveRequests() const; - /// Returns the maximum number of requests allowed - /// during a persistent connection, or 0 if - /// unlimited connections are allowed. - -protected: - virtual ~HTTPServerParams(); - /// Destroys the HTTPServerParams. - -private: - std::string _serverName; - std::string _softwareVersion; - Poco::Timespan _timeout; - bool _keepAlive; - int _maxKeepAliveRequests; - Poco::Timespan _keepAliveTimeout; -}; - - -// -// inlines -// -inline const std::string& HTTPServerParams::getServerName() const -{ - return _serverName; -} - - -inline const std::string& HTTPServerParams::getSoftwareVersion() const -{ - return _softwareVersion; -} - - -inline const Poco::Timespan& HTTPServerParams::getTimeout() const -{ - return _timeout; -} - - -inline bool HTTPServerParams::getKeepAlive() const -{ - return _keepAlive; -} - - -inline int HTTPServerParams::getMaxKeepAliveRequests() const -{ - return _maxKeepAliveRequests; -} - - -inline const Poco::Timespan& HTTPServerParams::getKeepAliveTimeout() const -{ - return _keepAliveTimeout; -} - - -} } // namespace Poco::Net - - -#endif // Net_HTTPServerParams_INCLUDED diff --git a/contrib/libpoco/Net/include/Poco/Net/HTTPServerRequest.h b/contrib/libpoco/Net/include/Poco/Net/HTTPServerRequest.h deleted file mode 100644 index 883967669eb..00000000000 --- a/contrib/libpoco/Net/include/Poco/Net/HTTPServerRequest.h +++ /dev/null @@ -1,80 +0,0 @@ -// -// HTTPServerRequest.h -// -// $Id: //poco/1.4/Net/include/Poco/Net/HTTPServerRequest.h#1 $ -// -// Library: Net -// Package: HTTPServer -// Module: HTTPServerRequest -// -// Definition of the HTTPServerRequest class. -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Net_HTTPServerRequest_INCLUDED -#define Net_HTTPServerRequest_INCLUDED - - -#include "Poco/Net/Net.h" -#include "Poco/Net/HTTPRequest.h" -#include "Poco/Net/SocketAddress.h" -#include - - -namespace Poco { -namespace Net { - - -class HTTPServerSession; -class HTTPServerResponse; -class HTTPServerParams; - - -class Net_API HTTPServerRequest: public HTTPRequest - /// This abstract subclass of HTTPRequest is used for - /// representing server-side HTTP requests. - /// - /// A HTTPServerRequest is passed to the - /// handleRequest() method of HTTPRequestHandler. -{ -public: - HTTPServerRequest(); - /// Creates the HTTPServerRequest - - ~HTTPServerRequest(); - /// Destroys the HTTPServerRequest. - - virtual std::istream& stream() = 0; - /// Returns the input stream for reading - /// the request body. - /// - /// The stream must be valid until the HTTPServerRequest - /// object is destroyed. - - virtual bool expectContinue() const = 0; - /// Returns true if the client expects a - /// 100 Continue response. - - virtual const SocketAddress& clientAddress() const = 0; - /// Returns the client's address. - - virtual const SocketAddress& serverAddress() const = 0; - /// Returns the server's address. - - virtual const HTTPServerParams& serverParams() const = 0; - /// Returns a reference to the server parameters. - - virtual HTTPServerResponse& response() const = 0; - /// Returns a reference to the associated response. -}; - - -} } // namespace Poco::Net - - -#endif // Net_HTTPServerRequest_INCLUDED diff --git a/contrib/libpoco/Net/include/Poco/Net/HTTPServerRequestImpl.h b/contrib/libpoco/Net/include/Poco/Net/HTTPServerRequestImpl.h deleted file mode 100644 index 38ea80594b2..00000000000 --- a/contrib/libpoco/Net/include/Poco/Net/HTTPServerRequestImpl.h +++ /dev/null @@ -1,136 +0,0 @@ -// -// HTTPServerRequestImpl.h -// -// $Id: //poco/1.4/Net/include/Poco/Net/HTTPServerRequestImpl.h#1 $ -// -// Library: Net -// Package: HTTPServer -// Module: HTTPServerRequestImpl -// -// Definition of the HTTPServerRequestImpl class. -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Net_HTTPServerRequestImpl_INCLUDED -#define Net_HTTPServerRequestImpl_INCLUDED - - -#include "Poco/Net/Net.h" -#include "Poco/Net/HTTPServerRequest.h" -#include "Poco/Net/HTTPServerResponseImpl.h" -#include "Poco/Net/SocketAddress.h" -#include "Poco/AutoPtr.h" -#include - - -namespace Poco { -namespace Net { - - -class HTTPServerSession; -class HTTPServerParams; -class StreamSocket; - - -class Net_API HTTPServerRequestImpl: public HTTPServerRequest - /// This subclass of HTTPServerRequest is used for - /// representing server-side HTTP requests. - /// - /// A HTTPServerRequest is passed to the - /// handleRequest() method of HTTPRequestHandler. -{ -public: - HTTPServerRequestImpl(HTTPServerResponseImpl& response, HTTPServerSession& session, HTTPServerParams* pParams); - /// Creates the HTTPServerRequestImpl, using the - /// given HTTPServerSession. - - ~HTTPServerRequestImpl(); - /// Destroys the HTTPServerRequestImpl. - - std::istream& stream(); - /// Returns the input stream for reading - /// the request body. - /// - /// The stream is valid until the HTTPServerRequestImpl - /// object is destroyed. - - bool expectContinue() const; - /// Returns true if the client expects a - /// 100 Continue response. - - const SocketAddress& clientAddress() const; - /// Returns the client's address. - - const SocketAddress& serverAddress() const; - /// Returns the server's address. - - const HTTPServerParams& serverParams() const; - /// Returns a reference to the server parameters. - - HTTPServerResponse& response() const; - /// Returns a reference to the associated response. - - StreamSocket& socket(); - /// Returns a reference to the underlying socket. - - StreamSocket detachSocket(); - /// Returns the underlying socket after detaching - /// it from the server session. - -protected: - static const std::string EXPECT; - -private: - HTTPServerResponseImpl& _response; - HTTPServerSession& _session; - std::istream* _pStream; - Poco::AutoPtr _pParams; - SocketAddress _clientAddress; - SocketAddress _serverAddress; -}; - - -// -// inlines -// -inline std::istream& HTTPServerRequestImpl::stream() -{ - poco_check_ptr (_pStream); - - return *_pStream; -} - - -inline const SocketAddress& HTTPServerRequestImpl::clientAddress() const -{ - return _clientAddress; -} - - -inline const SocketAddress& HTTPServerRequestImpl::serverAddress() const -{ - return _serverAddress; -} - - -inline const HTTPServerParams& HTTPServerRequestImpl::serverParams() const -{ - return *_pParams; -} - - -inline HTTPServerResponse& HTTPServerRequestImpl::response() const -{ - return _response; -} - - -} } // namespace Poco::Net - - -#endif // Net_HTTPServerRequestImpl_INCLUDED diff --git a/contrib/libpoco/Net/include/Poco/Net/HTTPServerResponse.h b/contrib/libpoco/Net/include/Poco/Net/HTTPServerResponse.h deleted file mode 100644 index 7c789547ebb..00000000000 --- a/contrib/libpoco/Net/include/Poco/Net/HTTPServerResponse.h +++ /dev/null @@ -1,129 +0,0 @@ -// -// HTTPServerResponse.h -// -// $Id: //poco/1.4/Net/include/Poco/Net/HTTPServerResponse.h#1 $ -// -// Library: Net -// Package: HTTPServer -// Module: HTTPServerResponse -// -// Definition of the HTTPServerResponse class. -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Net_HTTPServerResponse_INCLUDED -#define Net_HTTPServerResponse_INCLUDED - - -#include "Poco/Net/Net.h" -#include "Poco/Net/HTTPResponse.h" -#include -#include - - -namespace Poco { -namespace Net { - - -class HTTPServerSession; -class HTTPCookie; - - -class Net_API HTTPServerResponse: public HTTPResponse - /// This subclass of HTTPResponse is used for - /// representing server-side HTTP responses. - /// - /// A HTTPServerResponse is passed to the - /// handleRequest() method of HTTPRequestHandler. - /// - /// handleRequest() must set a status code - /// and optional reason phrase, set headers - /// as necessary, and provide a message body. -{ -public: - HTTPServerResponse(); - /// Creates the HTTPServerResponse. - - ~HTTPServerResponse(); - /// Destroys the HTTPServerResponse. - - virtual void sendContinue() = 0; - /// Sends a 100 Continue response to the - /// client. - - virtual std::ostream& send() = 0; - /// Sends the response header to the client and - /// returns an output stream for sending the - /// response body. - /// - /// The returned stream is valid until the response - /// object is destroyed. - /// - /// Must not be called after beginSend(), sendFile(), sendBuffer() - /// or redirect() has been called. - - virtual std::pair beginSend() = 0; - /// Sends the response headers to the client - /// but do not finish headers with \r\n, - /// allowing to continue sending additional header fields. - /// - /// Returns an output streams for sending the remaining headers - /// and response body. - /// - /// Must not be called after send(), sendFile(), sendBuffer() - /// or redirect() has been called. - - virtual void sendFile(const std::string& path, const std::string& mediaType) = 0; - /// Sends the response header to the client, followed - /// by the content of the given file. - /// - /// Must not be called after send(), sendBuffer() - /// or redirect() has been called. - /// - /// Throws a FileNotFoundException if the file - /// cannot be found, or an OpenFileException if - /// the file cannot be opened. - - virtual void sendBuffer(const void* pBuffer, std::size_t length) = 0; - /// Sends the response header to the client, followed - /// by the contents of the given buffer. - /// - /// The Content-Length header of the response is set - /// to length and chunked transfer encoding is disabled. - /// - /// If both the HTTP message header and body (from the - /// given buffer) fit into one single network packet, the - /// complete response can be sent in one network packet. - /// - /// Must not be called after send(), sendFile() - /// or redirect() has been called. - - virtual void redirect(const std::string& uri, HTTPStatus status = HTTP_FOUND) = 0; - /// Sets the status code, which must be one of - /// HTTP_MOVED_PERMANENTLY (301), HTTP_FOUND (302), - /// or HTTP_SEE_OTHER (303), - /// and sets the "Location" header field - /// to the given URI, which according to - /// the HTTP specification, must be absolute. - /// - /// Must not be called after send() has been called. - - virtual void requireAuthentication(const std::string& realm) = 0; - /// Sets the status code to 401 (Unauthorized) - /// and sets the "WWW-Authenticate" header field - /// according to the given realm. - - virtual bool sent() const = 0; - /// Returns true if the response (header) has been sent. -}; - - -} } // namespace Poco::Net - - -#endif // Net_HTTPServerResponse_INCLUDED diff --git a/contrib/libpoco/Net/include/Poco/Net/HTTPServerResponseImpl.h b/contrib/libpoco/Net/include/Poco/Net/HTTPServerResponseImpl.h deleted file mode 100644 index 93ba6b96586..00000000000 --- a/contrib/libpoco/Net/include/Poco/Net/HTTPServerResponseImpl.h +++ /dev/null @@ -1,153 +0,0 @@ -// -// HTTPServerResponseImpl.h -// -// $Id: //poco/1.4/Net/include/Poco/Net/HTTPServerResponseImpl.h#1 $ -// -// Library: Net -// Package: HTTPServer -// Module: HTTPServerResponseImpl -// -// Definition of the HTTPServerResponseImpl class. -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Net_HTTPServerResponseImpl_INCLUDED -#define Net_HTTPServerResponseImpl_INCLUDED - - -#include "Poco/Net/Net.h" -#include "Poco/Net/HTTPServerResponse.h" - - -namespace Poco { -namespace Net { - - -class HTTPServerSession; -class HTTPServerRequestImpl; - - -class Net_API HTTPServerResponseImpl: public HTTPServerResponse - /// This subclass of HTTPServerResponse is used for - /// representing server-side HTTP responses. - /// - /// A HTTPServerResponse is passed to the - /// handleRequest() method of HTTPRequestHandler. - /// - /// handleRequest() must set a status code - /// and optional reason phrase, set headers - /// as necessary, and provide a message body. -{ -public: - HTTPServerResponseImpl(HTTPServerSession& session); - /// Creates the HTTPServerResponseImpl. - - ~HTTPServerResponseImpl(); - /// Destroys the HTTPServerResponseImpl. - - void sendContinue(); - /// Sends a 100 Continue response to the - /// client. - - std::ostream& send(); - /// Sends the response header to the client and - /// returns an output stream for sending the - /// response body. - /// - /// The returned stream is valid until the response - /// object is destroyed. - /// - /// Must not be called after beginSend(), sendFile(), sendBuffer() - /// or redirect() has been called. - - std::pair beginSend(); - /// Sends the response headers to the client - /// but do not finish headers with \r\n, - /// allowing to continue sending additional header fields. - /// - /// Returns an output streams for sending the remaining headers - /// and response body. - /// - /// Must not be called after send(), sendFile(), sendBuffer() - /// or redirect() has been called. - - void sendFile(const std::string& path, const std::string& mediaType); - /// Sends the response header to the client, followed - /// by the content of the given file. - /// - /// Must not be called after send(), sendBuffer() - /// or redirect() has been called. - /// - /// Throws a FileNotFoundException if the file - /// cannot be found, or an OpenFileException if - /// the file cannot be opened. - - void sendBuffer(const void* pBuffer, std::size_t length); - /// Sends the response header to the client, followed - /// by the contents of the given buffer. - /// - /// The Content-Length header of the response is set - /// to length and chunked transfer encoding is disabled. - /// - /// If both the HTTP message header and body (from the - /// given buffer) fit into one single network packet, the - /// complete response can be sent in one network packet. - /// - /// Must not be called after send(), sendFile() - /// or redirect() has been called. - - void redirect(const std::string& uri, HTTPStatus status = HTTP_FOUND); - /// Sets the status code, which must be one of - /// HTTP_MOVED_PERMANENTLY (301), HTTP_FOUND (302), - /// or HTTP_SEE_OTHER (303), - /// and sets the "Location" header field - /// to the given URI, which according to - /// the HTTP specification, must be absolute. - /// - /// Must not be called after send() has been called. - - void requireAuthentication(const std::string& realm); - /// Sets the status code to 401 (Unauthorized) - /// and sets the "WWW-Authenticate" header field - /// according to the given realm. - - bool sent() const; - /// Returns true if the response (header) has been sent. - -protected: - void attachRequest(HTTPServerRequestImpl* pRequest); - -private: - HTTPServerSession& _session; - HTTPServerRequestImpl* _pRequest; - std::ostream* _pStream; - std::ostream* _pHeaderStream; - - friend class HTTPServerRequestImpl; -}; - - -// -// inlines -// -inline bool HTTPServerResponseImpl::sent() const -{ - return _pStream != 0; -} - - -inline void HTTPServerResponseImpl::attachRequest(HTTPServerRequestImpl* pRequest) -{ - _pRequest = pRequest; -} - - -} } // namespace Poco::Net - - -#endif // Net_HTTPServerResponseImpl_INCLUDED diff --git a/contrib/libpoco/Net/include/Poco/Net/HTTPServerSession.h b/contrib/libpoco/Net/include/Poco/Net/HTTPServerSession.h deleted file mode 100644 index 5a6897cdf47..00000000000 --- a/contrib/libpoco/Net/include/Poco/Net/HTTPServerSession.h +++ /dev/null @@ -1,78 +0,0 @@ -// -// HTTPServerSession.h -// -// $Id: //poco/1.4/Net/include/Poco/Net/HTTPServerSession.h#1 $ -// -// Library: Net -// Package: HTTPServer -// Module: HTTPServerSession -// -// Definition of the HTTPServerSession class. -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Net_HTTPServerSession_INCLUDED -#define Net_HTTPServerSession_INCLUDED - - -#include "Poco/Net/Net.h" -#include "Poco/Net/HTTPSession.h" -#include "Poco/Net/SocketAddress.h" -#include "Poco/Net/HTTPServerSession.h" -#include "Poco/Net/HTTPServerParams.h" -#include "Poco/Timespan.h" - - -namespace Poco { -namespace Net { - - -class Net_API HTTPServerSession: public HTTPSession - /// This class handles the server side of a - /// HTTP session. It is used internally by - /// HTTPServer. -{ -public: - HTTPServerSession(const StreamSocket& socket, HTTPServerParams::Ptr pParams); - /// Creates the HTTPServerSession. - - virtual ~HTTPServerSession(); - /// Destroys the HTTPServerSession. - - bool hasMoreRequests(); - /// Returns true if there are requests available. - - bool canKeepAlive() const; - /// Returns true if the session can be kept alive. - - SocketAddress clientAddress(); - /// Returns the client's address. - - SocketAddress serverAddress(); - /// Returns the server's address. - -private: - bool _firstRequest; - Poco::Timespan _keepAliveTimeout; - int _maxKeepAliveRequests; -}; - - -// -// inlines -// -inline bool HTTPServerSession::canKeepAlive() const -{ - return _maxKeepAliveRequests != 0; -} - - -} } // namespace Poco::Net - - -#endif // Net_HTTPServerSession_INCLUDED diff --git a/contrib/libpoco/Net/include/Poco/Net/HTTPSession.h b/contrib/libpoco/Net/include/Poco/Net/HTTPSession.h deleted file mode 100644 index 05b6f06c26b..00000000000 --- a/contrib/libpoco/Net/include/Poco/Net/HTTPSession.h +++ /dev/null @@ -1,244 +0,0 @@ -// -// HTTPSession.h -// -// $Id: //poco/1.4/Net/include/Poco/Net/HTTPSession.h#2 $ -// -// Library: Net -// Package: HTTP -// Module: HTTPSession -// -// Definition of the HTTPSession class. -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Net_HTTPSession_INCLUDED -#define Net_HTTPSession_INCLUDED - - -#include "Poco/Net/Net.h" -#include "Poco/Net/StreamSocket.h" -#include "Poco/Timespan.h" -#include "Poco/Exception.h" -#include "Poco/Any.h" -#include - - -namespace Poco { -namespace Net { - - -class Net_API HTTPSession - /// HTTPSession implements basic HTTP session management - /// for both HTTP clients and HTTP servers. - /// - /// HTTPSession implements buffering for HTTP connections, as well - /// as specific support for the various HTTP stream classes. - /// - /// This class can not be instantiated. HTTPClientSession or - /// HTTPServerSession must be used instead. -{ -public: - void setKeepAlive(bool keepAlive); - /// Sets the keep-alive flag for this session. - /// - /// If the keep-alive flag is enabled, persistent - /// HTTP/1.1 connections are supported. - - bool getKeepAlive() const; - /// Returns the value of the keep-alive flag for - /// this session. - - void setTimeout(const Poco::Timespan& timeout); - /// Sets the timeout for the HTTP session. - - void setTimeout(const Poco::Timespan& connection_timeout, const Poco::Timespan& send_timeout, const Poco::Timespan& receive_timeout); - /// Sets different timeouts for the HTTP session. - - Poco::Timespan getTimeout() const; - /// Returns the timeout for the HTTP session. - - bool connected() const; - /// Returns true if the underlying socket is connected. - - virtual void abort(); - /// Aborts a session in progress by shutting down - /// and closing the underlying socket. - - const Poco::Exception* networkException() const; - /// If sending or receiving data over the underlying - /// socket connection resulted in an exception, a - /// pointer to this exception is returned. - /// - /// Otherwise, NULL is returned. - - void attachSessionData(const Poco::Any& data); - /// Allows to attach an application-specific data - /// item to the session. - /// - /// On the server side, this can be used to manage - /// data that must be maintained over the entire - /// lifetime of a persistent connection (that is, - /// multiple requests sent over the same connection). - - const Poco::Any& sessionData() const; - /// Returns the data attached with attachSessionData(), - /// or an empty Poco::Any if no user data has been - /// attached. - - enum - { - HTTP_PORT = 80 - }; - - StreamSocket detachSocket(); - /// Detaches the socket from the session. - /// - /// The socket is returned, and a new, uninitialized socket is - /// attached to the session. - - StreamSocket& socket(); - /// Returns a reference to the underlying socket. - -protected: - HTTPSession(); - /// Creates a HTTP session using an - /// unconnected stream socket. - - HTTPSession(const StreamSocket& socket); - /// Creates a HTTP session using the - /// given socket. The session takes ownership - /// of the socket and closes it when it's no - /// longer used. - - HTTPSession(const StreamSocket& socket, bool keepAlive); - /// Creates a HTTP session using the - /// given socket. The session takes ownership - /// of the socket and closes it when it's no - /// longer used. - - virtual ~HTTPSession(); - /// Destroys the HTTPSession and closes the - /// underlying socket. - - int get(); - /// Returns the next byte in the buffer. - /// Reads more data from the socket if there are - /// no bytes left in the buffer. - - int peek(); - /// Peeks at the next character in the buffer. - /// Reads more data from the socket if there are - /// no bytes left in the buffer. - - virtual int read(char* buffer, std::streamsize length); - /// Reads up to length bytes. - /// - /// If there is data in the buffer, this data - /// is returned. Otherwise, data is read from - /// the socket to avoid unnecessary buffering. - - virtual int write(const char* buffer, std::streamsize length); - /// Writes data to the socket. - - int receive(char* buffer, int length); - /// Reads up to length bytes. - - int buffered() const; - /// Returns the number of bytes in the buffer. - - void refill(); - /// Refills the internal buffer. - - virtual void connect(const SocketAddress& address); - /// Connects the underlying socket to the given address - /// and sets the socket's receive timeout. - - void attachSocket(const StreamSocket& socket); - /// Attaches a socket to the session, replacing the - /// previously attached socket. - - void close(); - /// Closes the underlying socket. - - void setException(const Poco::Exception& exc); - /// Stores a clone of the exception. - - void clearException(); - /// Clears the stored exception. - -private: - enum - { - HTTP_DEFAULT_TIMEOUT = 60000000, - HTTP_DEFAULT_CONNECTION_TIMEOUT = 1000000 - }; - - HTTPSession(const HTTPSession&); - HTTPSession& operator = (const HTTPSession&); - - StreamSocket _socket; - char* _pBuffer; - char* _pCurrent; - char* _pEnd; - bool _keepAlive; - Poco::Timespan _connection_timeout; - Poco::Timespan _receive_timeout; - Poco::Timespan _send_timeout; - Poco::Exception* _pException; - Poco::Any _data; - - friend class HTTPStreamBuf; - friend class HTTPHeaderStreamBuf; - friend class HTTPFixedLengthStreamBuf; - friend class HTTPChunkedStreamBuf; -}; - - -// -// inlines -// -inline bool HTTPSession::getKeepAlive() const -{ - return _keepAlive; -} - - -inline Poco::Timespan HTTPSession::getTimeout() const -{ - return _receive_timeout; -} - - -inline StreamSocket& HTTPSession::socket() -{ - return _socket; -} - - -inline const Poco::Exception* HTTPSession::networkException() const -{ - return _pException; -} - - -inline int HTTPSession::buffered() const -{ - return static_cast(_pEnd - _pCurrent); -} - - -inline const Poco::Any& HTTPSession::sessionData() const -{ - return _data; -} - - -} } // namespace Poco::Net - - -#endif // Net_HTTPSession_INCLUDED diff --git a/contrib/libpoco/Net/include/Poco/Net/HTTPSessionFactory.h b/contrib/libpoco/Net/include/Poco/Net/HTTPSessionFactory.h deleted file mode 100644 index 854a8c71390..00000000000 --- a/contrib/libpoco/Net/include/Poco/Net/HTTPSessionFactory.h +++ /dev/null @@ -1,157 +0,0 @@ -// -// HTTPSessionFactory.h -// -// $Id: //poco/1.4/Net/include/Poco/Net/HTTPSessionFactory.h#1 $ -// -// Library: Net -// Package: HTTPClient -// Module: HTTPSessionFactory -// -// Definition of the HTTPSessionFactory class. -// -// Copyright (c) 2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Net_HTTPSessionFactoryMgr_INCLUDED -#define Net_HTTPSessionFactoryMgr_INCLUDED - - -#include "Poco/Net/Net.h" -#include "Poco/Mutex.h" -#include "Poco/URI.h" -#include "Poco/SingletonHolder.h" -#include "Poco/SharedPtr.h" -#include - - -namespace Poco { -namespace Net { - - -class HTTPSessionInstantiator; -class HTTPClientSession; - - -class Net_API HTTPSessionFactory - /// A factory for HTTPClientSession objects. - /// - /// Given a URI, this class creates a HTTPClientSession - /// (for http) or a HTTPSClientSession (for https) for - /// accessing the URI. - /// - /// The actual work of creating the session is done by - /// HTTPSessionInstantiator objects that must be registered - /// with a HTTPSessionFactory. -{ -public: - HTTPSessionFactory(); - /// Creates the HTTPSessionFactory. - - HTTPSessionFactory(const std::string& proxyHost, Poco::UInt16 proxyPort); - /// Creates the HTTPSessionFactory and sets the proxy host and port. - - ~HTTPSessionFactory(); - /// Destroys the HTTPSessionFactory. - - void registerProtocol(const std::string& protocol, HTTPSessionInstantiator* pSessionInstantiator); - /// Registers the session instantiator for the given protocol. - /// The factory takes ownership of the SessionInstantiator. - /// - /// A protocol can be registered more than once. However, only the instantiator - /// that has been registered first is used. Also, for each call to - /// registerProtocol(), a corresponding call to unregisterProtocol() must - /// be made. - - void unregisterProtocol(const std::string& protocol); - /// Removes the registration of a protocol. - /// - /// Throws a NotFoundException if no instantiator has been registered - /// for the given protocol. - - bool supportsProtocol(const std::string& protocol); - /// Returns true if a session instantiator for the given protocol has been registered. - - HTTPClientSession* createClientSession(const Poco::URI& uri); - /// Creates a client session for the given uri scheme. Throws exception if no factory is registered for the given scheme - - const std::string& proxyHost() const; - /// Returns the proxy host, if one has been set, or an empty string otherwise. - - Poco::UInt16 proxyPort() const; - /// Returns the proxy port number, if one has been set, or zero otherwise. - - void setProxy(const std::string& proxyHost, Poco::UInt16 proxyPort); - /// Sets the proxy host and port number. - - void setProxyCredentials(const std::string& username, const std::string& password); - /// Sets the username and password for proxy authorization (Basic auth only). - - const std::string& proxyUsername() const; - /// Returns the username for proxy authorization. - - const std::string& proxyPassword() const; - /// Returns the password for proxy authorization. - - static HTTPSessionFactory& defaultFactory(); - /// Returns the default HTTPSessionFactory. - -private: - struct InstantiatorInfo - { - HTTPSessionInstantiator* pIn; - int cnt; - InstantiatorInfo(HTTPSessionInstantiator* pInst); - // no destructor!!! this is by purpose, don't add one! - }; - - - HTTPSessionFactory(const HTTPSessionFactory&); - HTTPSessionFactory& operator = (const HTTPSessionFactory&); - - typedef std::map Instantiators; - - Instantiators _instantiators; - std::string _proxyHost; - Poco::UInt16 _proxyPort; - std::string _proxyUsername; - std::string _proxyPassword; - - mutable Poco::FastMutex _mutex; -}; - - -// -// inlines -// -inline const std::string& HTTPSessionFactory::proxyHost() const -{ - return _proxyHost; -} - - -inline Poco::UInt16 HTTPSessionFactory::proxyPort() const -{ - return _proxyPort; -} - - -inline const std::string& HTTPSessionFactory::proxyUsername() const -{ - return _proxyUsername; -} - - -inline const std::string& HTTPSessionFactory::proxyPassword() const -{ - return _proxyPassword; -} - - -} } // namespace Poco::Net - - -#endif // Net_HTTPSessionFactoryMgr_INCLUDED diff --git a/contrib/libpoco/Net/include/Poco/Net/HTTPSessionInstantiator.h b/contrib/libpoco/Net/include/Poco/Net/HTTPSessionInstantiator.h deleted file mode 100644 index 12699ac56ca..00000000000 --- a/contrib/libpoco/Net/include/Poco/Net/HTTPSessionInstantiator.h +++ /dev/null @@ -1,119 +0,0 @@ -// -// HTTPSessionInstantiator.h -// -// $Id: //poco/1.4/Net/include/Poco/Net/HTTPSessionInstantiator.h#1 $ -// -// Library: Net -// Package: HTTPClient -// Module: HTTPSessionInstantiator -// -// Definition of the HTTPSessionInstantiator class. -// -// Copyright (c) 2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Net_HTTPSessionInstantiator_INCLUDED -#define Net_HTTPSessionInstantiator_INCLUDED - - -#include "Poco/Net/Net.h" -#include "Poco/Net/HTTPSession.h" -#include "Poco/URI.h" - - -namespace Poco { -namespace Net { - - -class HTTPClientSession; - - -class Net_API HTTPSessionInstantiator - /// A factory for HTTPClientSession objects. - /// - /// Creates a HTTP session for a given URI. - /// A HTTPSessionInstantiator is not used directly. - /// Instances are registered with a HTTPSessionFactory, - /// and used through it. -{ -public: - HTTPSessionInstantiator(); - /// Creates the HTTPSessionInstantiator. - - virtual ~HTTPSessionInstantiator(); - /// Destroys the HTTPSessionInstantiator. - - virtual HTTPClientSession* createClientSession(const Poco::URI& uri); - /// Creates a HTTPClientSession for the given URI. - - static void registerInstantiator(); - /// Registers the instantiator with the global HTTPSessionFactory. - - static void unregisterInstantiator(); - /// Unregisters the factory with the global HTTPSessionFactory. - -protected: - void setProxy(const std::string& host, Poco::UInt16 port); - /// Sets the proxy host and port. - /// Called by HTTPSessionFactory. - - const std::string& proxyHost() const; - /// Returns the proxy post. - - Poco::UInt16 proxyPort() const; - /// Returns the proxy port. - - void setProxyCredentials(const std::string& username, const std::string& password); - /// Sets the username and password for proxy authorization (Basic auth only). - - const std::string& proxyUsername() const; - /// Returns the username for proxy authorization. - - const std::string& proxyPassword() const; - /// Returns the password for proxy authorization. - -private: - std::string _proxyHost; - Poco::UInt16 _proxyPort; - std::string _proxyUsername; - std::string _proxyPassword; - - friend class HTTPSessionFactory; -}; - - -// -// inlines -// -inline const std::string& HTTPSessionInstantiator::proxyHost() const -{ - return _proxyHost; -} - - -inline Poco::UInt16 HTTPSessionInstantiator::proxyPort() const -{ - return _proxyPort; -} - - -inline const std::string& HTTPSessionInstantiator::proxyUsername() const -{ - return _proxyUsername; -} - - -inline const std::string& HTTPSessionInstantiator::proxyPassword() const -{ - return _proxyPassword; -} - - -} } // namespace Poco::Net - - -#endif // Net_HTTPSessionInstantiator_INCLUDED diff --git a/contrib/libpoco/Net/include/Poco/Net/HTTPStream.h b/contrib/libpoco/Net/include/Poco/Net/HTTPStream.h deleted file mode 100644 index e8d0a81084d..00000000000 --- a/contrib/libpoco/Net/include/Poco/Net/HTTPStream.h +++ /dev/null @@ -1,105 +0,0 @@ -// -// HTTPStream.h -// -// $Id: //poco/1.4/Net/include/Poco/Net/HTTPStream.h#1 $ -// -// Library: Net -// Package: HTTP -// Module: HTTPStream -// -// Definition of the HTTPStream class. -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Net_HTTPStream_INCLUDED -#define Net_HTTPStream_INCLUDED - - -#include "Poco/Net/Net.h" -#include "Poco/Net/HTTPBasicStreamBuf.h" -#include "Poco/MemoryPool.h" -#include -#include -#include - - -namespace Poco { -namespace Net { - - -class HTTPSession; - - -class Net_API HTTPStreamBuf: public HTTPBasicStreamBuf - /// This is the streambuf class used for reading and writing - /// HTTP message bodies. -{ -public: - typedef HTTPBasicStreamBuf::openmode openmode; - - HTTPStreamBuf(HTTPSession& session, openmode mode); - ~HTTPStreamBuf(); - void close(); - -protected: - int readFromDevice(char* buffer, std::streamsize length); - int writeToDevice(const char* buffer, std::streamsize length); - -private: - HTTPSession& _session; - openmode _mode; -}; - - -class Net_API HTTPIOS: public virtual std::ios - /// The base class for HTTPInputStream. -{ -public: - HTTPIOS(HTTPSession& session, HTTPStreamBuf::openmode mode); - ~HTTPIOS(); - HTTPStreamBuf* rdbuf(); - -protected: - HTTPStreamBuf _buf; -}; - - -class Net_API HTTPInputStream: public HTTPIOS, public std::istream - /// This class is for internal use by HTTPSession only. -{ -public: - HTTPInputStream(HTTPSession& session); - ~HTTPInputStream(); - - void* operator new(std::size_t size); - void operator delete(void* ptr); - -private: - static Poco::MemoryPool _pool; -}; - - -class Net_API HTTPOutputStream: public HTTPIOS, public std::ostream - /// This class is for internal use by HTTPSession only. -{ -public: - HTTPOutputStream(HTTPSession& session); - ~HTTPOutputStream(); - - void* operator new(std::size_t size); - void operator delete(void* ptr); - -private: - static Poco::MemoryPool _pool; -}; - - -} } // namespace Poco::Net - - -#endif // Net_HTTPStream_INCLUDED diff --git a/contrib/libpoco/Net/include/Poco/Net/HTTPStreamFactory.h b/contrib/libpoco/Net/include/Poco/Net/HTTPStreamFactory.h deleted file mode 100644 index 7114c96c8c2..00000000000 --- a/contrib/libpoco/Net/include/Poco/Net/HTTPStreamFactory.h +++ /dev/null @@ -1,94 +0,0 @@ -// -// HTTPStreamFactory.h -// -// $Id: //poco/1.4/Net/include/Poco/Net/HTTPStreamFactory.h#1 $ -// -// Library: Net -// Package: HTTP -// Module: HTTPStreamFactory -// -// Definition of the HTTPStreamFactory class. -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Net_HTTPStreamFactory_INCLUDED -#define Net_HTTPStreamFactory_INCLUDED - - -#include "Poco/Net/Net.h" -#include "Poco/Net/HTTPSession.h" -#include "Poco/URIStreamFactory.h" - - -namespace Poco { -namespace Net { - - -class Net_API HTTPStreamFactory: public Poco::URIStreamFactory - /// An implementation of the URIStreamFactory interface - /// that handles Hyper-Text Transfer Protocol (http) URIs. -{ -public: - HTTPStreamFactory(); - /// Creates the HTTPStreamFactory. - - HTTPStreamFactory(const std::string& proxyHost, Poco::UInt16 proxyPort = HTTPSession::HTTP_PORT); - /// Creates the HTTPStreamFactory. - /// - /// HTTP connections will use the given proxy. - - HTTPStreamFactory(const std::string& proxyHost, Poco::UInt16 proxyPort, const std::string& proxyUsername, const std::string& proxyPassword); - /// Creates the HTTPStreamFactory. - /// - /// HTTP connections will use the given proxy and - /// will be authorized against the proxy using Basic authentication - /// with the given proxyUsername and proxyPassword. - - virtual ~HTTPStreamFactory(); - /// Destroys the HTTPStreamFactory. - - virtual std::istream* open(const Poco::URI& uri); - /// Creates and opens a HTTP stream for the given URI. - /// The URI must be a http://... URI. - /// - /// Throws a NetException if anything goes wrong. - /// - /// Redirect responses are handled and the redirect - /// location is automatically resolved, as long - /// as the redirect location is still accessible - /// via the HTTP protocol. If a redirection to - /// a non http://... URI is received, a - /// UnsupportedRedirectException exception is thrown. - /// The offending URI can then be obtained via the message() - /// method of UnsupportedRedirectException. - - static void registerFactory(); - /// Registers the HTTPStreamFactory with the - /// default URIStreamOpener instance. - - static void unregisterFactory(); - /// Unregisters the HTTPStreamFactory with the - /// default URIStreamOpener instance. - -private: - enum - { - MAX_REDIRECTS = 10 - }; - - std::string _proxyHost; - Poco::UInt16 _proxyPort; - std::string _proxyUsername; - std::string _proxyPassword; -}; - - -} } // namespace Poco::Net - - -#endif // Net_HTTPStreamFactory_INCLUDED diff --git a/contrib/libpoco/Net/include/Poco/Net/HostEntry.h b/contrib/libpoco/Net/include/Poco/Net/HostEntry.h deleted file mode 100644 index 38171db7a9c..00000000000 --- a/contrib/libpoco/Net/include/Poco/Net/HostEntry.h +++ /dev/null @@ -1,117 +0,0 @@ -// -// HostEntry.h -// -// $Id: //poco/1.4/Net/include/Poco/Net/HostEntry.h#4 $ -// -// Library: Net -// Package: NetCore -// Module: HostEntry -// -// Definition of the HostEntry class. -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Net_HostEntry_INCLUDED -#define Net_HostEntry_INCLUDED - - -#include "Poco/Net/Net.h" -#include "Poco/Net/SocketDefs.h" -#include "Poco/Net/IPAddress.h" -#include - - -namespace Poco { -namespace Net { - - -class Net_API HostEntry - /// This class stores information about a host - /// such as host name, alias names and a list - /// of IP addresses. -{ -public: - typedef std::vector AliasList; - typedef std::vector AddressList; - - HostEntry(); - /// Creates an empty HostEntry. - - HostEntry(struct hostent* entry); - /// Creates the HostEntry from the data in a hostent structure. - -#if defined(POCO_HAVE_IPv6) || defined(POCO_HAVE_ADDRINFO) - HostEntry(struct addrinfo* info); - /// Creates the HostEntry from the data in an addrinfo structure. -#endif - -#if defined(POCO_VXWORKS) - HostEntry(const std::string& name, const IPAddress& addr); -#endif - - HostEntry(const HostEntry& entry); - /// Creates the HostEntry by copying another one. - - HostEntry& operator = (const HostEntry& entry); - /// Assigns another HostEntry. - - void swap(HostEntry& hostEntry); - /// Swaps the HostEntry with another one. - - ~HostEntry(); - /// Destroys the HostEntry. - - const std::string& name() const; - /// Returns the canonical host name. - - const AliasList& aliases() const; - /// Returns a vector containing alias names for - /// the host name. - - const AddressList& addresses() const; - /// Returns a vector containing the IPAddresses - /// for the host. - -private: - std::string _name; - AliasList _aliases; - AddressList _addresses; -}; - - -// -// inlines -// -inline const std::string& HostEntry::name() const -{ - return _name; -} - - -inline const HostEntry::AliasList& HostEntry::aliases() const -{ - return _aliases; -} - - -inline const HostEntry::AddressList& HostEntry::addresses() const -{ - return _addresses; -} - - -inline void swap(HostEntry& h1, HostEntry& h2) -{ - h1.swap(h2); -} - - -} } // namespace Poco::Net - - -#endif // Net_HostEntry_INCLUDED diff --git a/contrib/libpoco/Net/include/Poco/Net/ICMPClient.h b/contrib/libpoco/Net/include/Poco/Net/ICMPClient.h deleted file mode 100644 index b3a27b686f8..00000000000 --- a/contrib/libpoco/Net/include/Poco/Net/ICMPClient.h +++ /dev/null @@ -1,87 +0,0 @@ -// -// ICMPClient.h -// -// $Id: //poco/1.4/Net/include/Poco/Net/ICMPClient.h#1 $ -// -// Library: Net -// Package: ICMP -// Module: ICMPClient -// -// Definition of the ICMPClient class. -// -// Copyright (c) 2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Net_ICMPClient_INCLUDED -#define Net_ICMPClient_INCLUDED - - -#include "Poco/Net/Net.h" -#include "Poco/Net/ICMPSocket.h" -#include "Poco/Net/ICMPEventArgs.h" -#include "Poco/Net/SocketAddress.h" -#include "Poco/BasicEvent.h" - - -namespace Poco { -namespace Net { - - -class Net_API ICMPClient - /// This class provides ICMP Ping functionality. - /// - /// The events are available when class is instantiated - /// and non-static member functions are called. - /// - /// A "lightweight" alternative is direct (without instantiation) - /// use of static member functions. -{ -public: - mutable Poco::BasicEvent pingBegin; - mutable Poco::BasicEvent pingReply; - mutable Poco::BasicEvent pingError; - mutable Poco::BasicEvent pingEnd; - - explicit ICMPClient(IPAddress::Family family); - /// Creates an ICMP client. - - ~ICMPClient(); - /// Destroys the ICMP client. - - int ping(SocketAddress& address, int repeat = 1) const; - /// Pings the specified address [repeat] times. - /// Notifications are posted for events. - /// - /// Returns the number of valid replies. - - int ping(const std::string& address, int repeat = 1) const; - /// Calls ICMPClient::ping(SocketAddress&, int) and - /// returns the result. - /// - /// Returns the number of valid replies. - - static int ping(SocketAddress& address, IPAddress::Family family, int repeat = 1); - /// Pings the specified address [repeat] times. - /// Notifications are not posted for events. - /// - /// Returns the number of valid replies. - - static int pingIPv4(const std::string& address, int repeat = 1); - /// Calls ICMPClient::ping(SocketAddress&, int) and - /// returns the result. - /// - /// Returns the number of valid replies. - -private: - mutable IPAddress::Family _family; -}; - - -} } // namespace Poco::Net - - -#endif // Net_ICMPClient_INCLUDED diff --git a/contrib/libpoco/Net/include/Poco/Net/ICMPEventArgs.h b/contrib/libpoco/Net/include/Poco/Net/ICMPEventArgs.h deleted file mode 100644 index 84496cb164f..00000000000 --- a/contrib/libpoco/Net/include/Poco/Net/ICMPEventArgs.h +++ /dev/null @@ -1,165 +0,0 @@ -// -// ICMPEventArgs.h -// -// $Id: //poco/1.4/Net/include/Poco/Net/ICMPEventArgs.h#1 $ -// -// Library: Net -// Package: ICMP -// Module: ICMPEventArgs -// -// Definition of ICMPEventArgs. -// -// Copyright (c) 2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Net_ICMPEventArgs_INCLUDED -#define Net_ICMPEventArgs_INCLUDED - - -#include "Poco/Net/Net.h" -#include "Poco/Net/SocketAddress.h" -#include -#include - - -namespace Poco { -namespace Net { - - -class Net_API ICMPEventArgs - /// The purpose of the ICMPEventArgs class is to be used as template parameter - /// to instantiate event members in ICMPClient class. - /// When clients register for an event notification, the reference to the class is - /// passed to the handler function to provide information about the event. -{ -public: - ICMPEventArgs(const SocketAddress& address, int repetitions, int dataSize, int ttl); - /// Creates ICMPEventArgs. - - virtual ~ICMPEventArgs(); - /// Destroys ICMPEventArgs. - - std::string hostName() const; - /// Tries to resolve the target IP address into host name. - /// If unsuccessful, all exceptions are silently ignored and - /// the IP address is returned. - - std::string hostAddress() const; - /// Returns the target IP address. - - int repetitions() const; - /// Returns the number of repetitions for the ping operation. - - int dataSize() const; - /// Returns the packet data size in bytes. - - int ttl() const; - /// Returns time to live. - - int sent() const; - /// Returns the number of packets sent. - - int received() const; - /// Returns the number of packets received. - - int replyTime(int index = -1) const; - /// Returns the reply time for the request specified with index. - /// If index == -1 (default), returns the most recent reply time. - - const std::string& error(int index = -1) const; - /// Returns the error string for the request specified with index. - /// If index == -1 (default), returns the most recent error string. - - int minRTT() const; - /// Returns the minimum round trip time for a sequence of requests. - - int maxRTT() const; - /// Returns the maximum round trip time for a sequence of requests. - - int avgRTT() const; - /// Returns the average round trip time for a sequence of requests. - - float percent() const; - /// Returns the success percentage for a sequence of requests. - -private: - ICMPEventArgs(); - - void setRepetitions(int repetitions); - void setDataSize(int sz); - void setTTL(int timeToLive); - void setReplyTime(int index, int time); - void setError(int index, const std::string& text); - ICMPEventArgs& operator ++ (); - ICMPEventArgs operator ++ (int); - - SocketAddress _address; - int _sent; - int _dataSize; - int _ttl; - std::vector _rtt; - std::vector _errors; - - friend class ICMPClient; -}; - - -// -// inlines -// -inline int ICMPEventArgs::repetitions() const -{ - return (int) _rtt.size(); -} - - -inline void ICMPEventArgs::setDataSize(int sz) -{ - _dataSize = sz; -} - - -inline int ICMPEventArgs::dataSize() const -{ - return _dataSize; -} - - -inline void ICMPEventArgs::setTTL(int timeToLive) -{ - _ttl = timeToLive; -} - - -inline int ICMPEventArgs::ttl() const -{ - return _ttl; -} - - -inline int ICMPEventArgs::sent() const -{ - return _sent; -} - - -inline int ICMPEventArgs::minRTT() const -{ - return *std::min_element(_rtt.begin(), _rtt.end()); -} - - -inline int ICMPEventArgs::maxRTT() const -{ - return *std::max_element(_rtt.begin(), _rtt.end()); -} - - -} } // namespace Poco::Net - - -#endif diff --git a/contrib/libpoco/Net/include/Poco/Net/ICMPPacket.h b/contrib/libpoco/Net/include/Poco/Net/ICMPPacket.h deleted file mode 100644 index 95f6d65a8d5..00000000000 --- a/contrib/libpoco/Net/include/Poco/Net/ICMPPacket.h +++ /dev/null @@ -1,91 +0,0 @@ -// -// ICMPPacket.h -// -// $Id: //poco/1.4/Net/include/Poco/Net/ICMPPacket.h#1 $ -// -// Library: Net -// Package: ICMP -// Module: ICMPPacket -// -// Definition of the ICMPPacket class. -// -// Copyright (c) 2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Net_ICMPPacket_INCLUDED -#define Net_ICMPPacket_INCLUDED - - -#include "Poco/Foundation.h" -#include "Poco/Net/Socket.h" -#include "Poco/Net/ICMPPacketImpl.h" - - -namespace Poco { -namespace Net { - - -class Net_API ICMPPacket - /// This class is the ICMP packet abstraction. -{ -public: - ICMPPacket(IPAddress::Family family, int dataSize = 48); - /// Creates an ICMPPacket of specified family. - - ~ICMPPacket(); - /// Destroys the ICMPPacket. - - const Poco::UInt8* packet(); - /// Returns raw ICMP packet. ICMP header and data are included in the returned packet. - - int packetSize() const; - /// Returns the total length of packet (header + data); - - Poco::UInt16 sequence() const; - /// Returns the most recent sequence number generated. - - void setDataSize(int dataSize); - /// Sets data size. - - int getDataSize() const; - /// Returns data size. - - int maxPacketSize() const; - /// Returns the total length of packet (header + data); - - struct timeval time(Poco::UInt8* buffer = 0, int length = 0) const; - /// Returns current epoch time if either buffer or length are equal to zero. - /// Otherwise, it extracts the time value from the supplied buffer and - /// returns the extracted value. - /// - /// Supplied buffer includes IP header, ICMP header and data. - - bool validReplyID(Poco::UInt8* buffer, int length) const; - /// Returns true if the extracted id is recognized - /// (equals the process id). - /// - /// Supplied buffer includes IP header, ICMP header and data. - - std::string errorDescription(Poco::UInt8* buffer, int length); - /// Returns error description string. - /// If supplied buffer contains an ICMP echo reply packet, an - /// empty string is returned indicating the absence of error. - /// - /// Supplied buffer includes IP header, ICMP header and data. - - std::string typeDescription(int typeId); - /// Returns the description of the packet type. - -private: - ICMPPacketImpl* _pImpl; -}; - - -} } // namespace Poco::Net - - -#endif // Net_ICMPPacket_INCLUDED diff --git a/contrib/libpoco/Net/include/Poco/Net/ICMPPacketImpl.h b/contrib/libpoco/Net/include/Poco/Net/ICMPPacketImpl.h deleted file mode 100644 index ac679654e30..00000000000 --- a/contrib/libpoco/Net/include/Poco/Net/ICMPPacketImpl.h +++ /dev/null @@ -1,143 +0,0 @@ -// -// ICMPPacketImpl.h -// -// $Id: //poco/1.4/Net/include/Poco/Net/ICMPPacketImpl.h#1 $ -// -// Library: Net -// Package: ICMP -// Module: ICMPPacketImpl -// -// Definition of the ICMPPacketImpl class. -// -// Copyright (c) 2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Net_ICMPPacketImpl_INCLUDED -#define Net_ICMPPacketImpl_INCLUDED - - -#include "Poco/Foundation.h" -#include "Poco/Net/Socket.h" - - -namespace Poco { -namespace Net { - - -class Net_API ICMPPacketImpl - /// This is the abstract class for ICMP packet implementations. -{ -public: - ICMPPacketImpl(int dataSize = 48); - /// Constructor. Creates an ICMPPacketImpl. - - virtual ~ICMPPacketImpl(); - /// Destructor. - - const Poco::UInt8* packet(bool init = true); - /// Returns raw ICMP packet. - /// ICMP header and data are included in the packet. - /// If init is true, initPacket() is called. - - virtual int packetSize() const = 0; - /// Returns the total size of packet (ICMP header + data) in number of octets. - /// Must be overriden. - - virtual int maxPacketSize() const; - /// Returns the maximum permitted size of packet in number of octets. - - Poco::UInt16 sequence() const; - /// Returns the most recent sequence number generated. - - void setDataSize(int dataSize); - /// Sets data size. - - int getDataSize() const; - /// Returns data size. - - virtual struct timeval time(Poco::UInt8* buffer = 0, int length = 0) const = 0; - /// Returns current epoch time if either argument is equal to zero. - /// Otherwise, it extracts the time value from the supplied buffer. - /// - /// Supplied buffer includes IP header, ICMP header and data. - /// Must be overriden. - - virtual bool validReplyID(unsigned char* buffer, int length) const = 0; - /// Returns true if the extracted id is recognized - /// (i.e. equals the process id). - /// - /// Supplied buffer includes IP header, ICMP header and data. - /// Must be overriden. - - virtual std::string errorDescription(Poco::UInt8* buffer, int length) = 0; - /// Returns error description string. - /// If supplied buffer contains an ICMP echo reply packet, an - /// empty string is returned indicating the absence of error. - /// - /// Supplied buffer includes IP header, ICMP header and data. - /// Must be overriden. - - virtual std::string typeDescription(int typeId) = 0; - /// Returns the description of the packet type. - /// Must be overriden. - - static const Poco::UInt16 MAX_PACKET_SIZE; - static const Poco::UInt16 MAX_SEQ_VALUE; - -protected: - Poco::UInt16 nextSequence(); - /// Increments sequence number and returns the new value. - - void resetSequence(); - /// Resets the sequence to zero. - - virtual void initPacket() = 0; - /// (Re)assembles the packet. - /// Must be overriden. - - Poco::UInt16 checksum(Poco::UInt16 *addr, Poco::Int32 len); - /// Calculates the checksum for supplied buffer. - -private: - Poco::UInt16 _seq; - Poco::UInt8* _pPacket; - int _dataSize; - -}; - - -// -// inlines -// -inline Poco::UInt16 ICMPPacketImpl::sequence() const -{ - return _seq; -} - - -inline Poco::UInt16 ICMPPacketImpl::nextSequence() -{ - return ++_seq; -} - - -inline void ICMPPacketImpl::resetSequence() -{ - _seq = 0; -} - - -inline int ICMPPacketImpl::maxPacketSize() const -{ - return MAX_PACKET_SIZE; -} - - -} } // namespace Poco::Net - - -#endif // Net_ICMPPacketImpl_INCLUDED diff --git a/contrib/libpoco/Net/include/Poco/Net/ICMPSocket.h b/contrib/libpoco/Net/include/Poco/Net/ICMPSocket.h deleted file mode 100644 index cfcc2ff3e5e..00000000000 --- a/contrib/libpoco/Net/include/Poco/Net/ICMPSocket.h +++ /dev/null @@ -1,119 +0,0 @@ -// -// ICMPSocket.h -// -// $Id: //poco/1.4/Net/include/Poco/Net/ICMPSocket.h#1 $ -// -// Library: Net -// Package: ICMP -// Module: ICMPSocket -// -// Definition of the ICMPSocket class. -// -// Copyright (c) 2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Net_ICMPSocket_INCLUDED -#define Net_ICMPSocket_INCLUDED - - -#include "Poco/Net/Net.h" -#include "Poco/Net/Socket.h" - - -namespace Poco { -namespace Net { - - -class Net_API ICMPSocket: public Socket - /// This class provides an interface to an - /// ICMP client socket. -{ -public: - ICMPSocket(IPAddress::Family family, int dataSize = 48, int ttl = 128, int timeout = 500000); - /// Creates an unconnected ICMP socket. - /// - /// The socket will be created for the - /// given address family. - - ICMPSocket(const Socket& socket); - /// Creates the ICMPSocket with the SocketImpl - /// from another socket. The SocketImpl must be - /// a DatagramSocketImpl, otherwise an InvalidArgumentException - /// will be thrown. - - ~ICMPSocket(); - /// Destroys the ICMPSocket. - - ICMPSocket& operator = (const Socket& socket); - /// Assignment operator. - /// - /// Releases the socket's SocketImpl and - /// attaches the SocketImpl from the other socket and - /// increments the reference count of the SocketImpl. - - int sendTo(const SocketAddress& address, int flags = 0); - /// Sends an ICMP request through - /// the socket to the given address. - /// - /// Returns the number of bytes sent. - - int receiveFrom(SocketAddress& address, int flags = 0); - /// Receives data from the socket. - /// Stores the address of the sender in address. - /// - /// Returns the time elapsed since the originating - /// request was sent. - - int dataSize() const; - /// Returns the data size in bytes. - - int ttl() const; - /// Returns the Time-To-Live value. - - int timeout() const; - /// Returns the socket timeout value. - -protected: - ICMPSocket(SocketImpl* pImpl); - /// Creates the Socket and attaches the given SocketImpl. - /// The socket takes owership of the SocketImpl. - /// - /// The SocketImpl must be a ICMPSocketImpl, otherwise - /// an InvalidArgumentException will be thrown. - -private: - int _dataSize; - int _ttl; - int _timeout; -}; - - -// -// inlines -// -inline int ICMPSocket::dataSize() const -{ - return _dataSize; -} - - -inline int ICMPSocket::ttl() const -{ - return _ttl; -} - - -inline int ICMPSocket::timeout() const -{ - return _timeout; -} - - -} } // namespace Poco::Net - - -#endif // Net_ICMPSocket_INCLUDED diff --git a/contrib/libpoco/Net/include/Poco/Net/ICMPSocketImpl.h b/contrib/libpoco/Net/include/Poco/Net/ICMPSocketImpl.h deleted file mode 100644 index c033e5af1e1..00000000000 --- a/contrib/libpoco/Net/include/Poco/Net/ICMPSocketImpl.h +++ /dev/null @@ -1,65 +0,0 @@ -// -// ICMPSocketImpl.h -// -// $Id: //poco/1.4/Net/include/Poco/Net/ICMPSocketImpl.h#1 $ -// -// Library: Net -// Package: ICMP -// Module: ICMPSocketImpl -// -// Definition of the ICMPSocketImpl class. -// -// Copyright (c) 2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Net_ICMPSocketImpl_INCLUDED -#define Net_ICMPSocketImpl_INCLUDED - - -#include "Poco/Net/Net.h" -#include "Poco/Net/RawSocketImpl.h" -#include "Poco/Net/ICMPPacket.h" -#include "Poco/Timestamp.h" - - -namespace Poco { -namespace Net { - - -class Net_API ICMPSocketImpl: public RawSocketImpl - /// This class implements an ICMP socket. -{ -public: - ICMPSocketImpl(IPAddress::Family family, int dataSize, int ttl, int timeout); - /// Creates an unconnected ICMP socket. - /// - /// The socket will be created for the given address family. - - int sendTo(const void*, int, const SocketAddress& address, int flags = 0); - /// Sends an ICMP request through the socket to the given address. - /// - /// Returns the number of bytes sent. - - int receiveFrom(void*, int, SocketAddress& address, int flags = 0); - /// Receives data from the socket. - /// Stores the address of the sender in address. - /// - /// Returns the time elapsed since the originating request was sent. - -protected: - ~ICMPSocketImpl(); - -private: - ICMPPacket _icmpPacket; - int _timeout; -}; - - -} } // namespace Poco::Net - - -#endif // Net_ICMPSocketImpl_INCLUDED diff --git a/contrib/libpoco/Net/include/Poco/Net/ICMPv4PacketImpl.h b/contrib/libpoco/Net/include/Poco/Net/ICMPv4PacketImpl.h deleted file mode 100644 index b8f4258b4c7..00000000000 --- a/contrib/libpoco/Net/include/Poco/Net/ICMPv4PacketImpl.h +++ /dev/null @@ -1,175 +0,0 @@ -// -// ICMPv4PacketImpl.h -// -// $Id: //poco/1.4/Net/include/Poco/Net/ICMPv4PacketImpl.h#1 $ -// -// Library: Net -// Package: ICMP -// Module: ICMPv4PacketImpl -// -// Definition of the ICMPv4PacketImpl class. -// -// Copyright (c) 2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Net_ICMPv4PacketImpl_INCLUDED -#define Net_ICMPv4PacketImpl_INCLUDED - - -#include "Poco/Foundation.h" -#include "Poco/Net/Socket.h" -#include "Poco/Net/ICMPPacketImpl.h" -#include - - -namespace Poco { -namespace Net { - - -class Net_API ICMPv4PacketImpl : public ICMPPacketImpl - /// This class implements the ICMPv4 packet. - /// Parts are based on original ICMP code by - /// Mike Muuss - /// U. S. Army Ballistic Research Laboratory - /// December, 1983 -{ -public: - // ICMPv4 header - struct Header - { - Poco::UInt8 type; // ICMP packet type - Poco::UInt8 code; // Type sub code - Poco::UInt16 checksum; - Poco::UInt16 id; - Poco::UInt16 seq; - }; - - // compile-time shield against misalignment -#ifndef POCO_ANDROID - poco_static_assert (offsetof(Header, code) == 0x01); - poco_static_assert (offsetof(Header, checksum) == 0x02); - poco_static_assert (offsetof(Header, id) == 0x04); - poco_static_assert (offsetof(Header, seq) == 0x06); -#endif - - enum MessageType - { - ECHO_REPLY, - ICMP_1, - ICMP_2, - DESTINATION_UNREACHABLE, - SOURCE_QUENCH, - REDIRECT, - ICMP_6, - ICMP_7, - ECHO_REQUEST, - ICMP_9, - ICMP_10, - TIME_EXCEEDED, - PARAMETER_PROBLEM, - TIMESTAMP_REQUEST, - TIMESTAMP_REPLY, - INFORMATION_REQUEST, - INFORMATION_REPLY, - MESSAGE_TYPE_UNKNOWN, // non-standard default, must remain last but one - MESSAGE_TYPE_LENGTH // length indicator, must remain last - }; - - enum DestinationUnreachableCode - { - NET_UNREACHABLE, - HOST_UNREACHABLE, - PROTOCOL_UNREACHABLE, - PORT_UNREACHABLE, - FRAGMENTATION_NEEDED_AND_DF_SET, - SOURCE_ROUTE_FAILED, - DESTINATION_UNREACHABLE_UNKNOWN, // non-standard default, must remain last but one - DESTINATION_UNREACHABLE_LENGTH // length indicator, must remain last - }; - - enum RedirectMessageCode - { - REDIRECT_NETWORK, - REDIRECT_HOST, - REDIRECT_SERVICE_NETWORK, - REDIRECT_SERVICE_HOST, - REDIRECT_MESSAGE_UNKNOWN, // non-standard default, must remain last but one - REDIRECT_MESSAGE_LENGTH // length indicator, must remain last - }; - - enum TimeExceededCode - { - TIME_TO_LIVE, - FRAGMENT_REASSEMBLY, - TIME_EXCEEDED_UNKNOWN, // non-standard default, must remain last but one - TIME_EXCEEDED_LENGTH // length indicator, must remain last - }; - - enum ParameterProblemCode - { - POINTER_INDICATES_THE_ERROR, - PARAMETER_PROBLEM_UNKNOWN, // non-standard default, must remain last but one - PARAMETER_PROBLEM_LENGTH // length indicator, must remain last - }; - - ICMPv4PacketImpl(int dataSize = 48); - /// Constructor. Creates an ICMPv4PacketImpl. - - ~ICMPv4PacketImpl(); - /// Destructor. - - int packetSize() const; - /// Returns the total length of packet (header + data); - - struct timeval time(Poco::UInt8* buffer = 0, int length = 0) const; - /// Returns current epoch time if either buffer or length are equal to zero. - /// Otherwise, it extracts the time value from the supplied buffer. - /// - /// Buffer includes IP header, ICMP header and data. - - bool validReplyID(Poco::UInt8* buffer, int length) const; - /// Returns true if the extracted id is recognized - /// (i.e. equals the process id). - /// - /// Buffer includes IP header, ICMP header and data. - - virtual std::string errorDescription(Poco::UInt8* buffer, int length); - /// Returns error description string. - /// If supplied buffer contains ICMPv4 echo reply packet, an - /// empty string is returned indicating the absence of error. - /// - /// Buffer includes IP header, ICMP header and data. - - virtual std::string typeDescription(int typeId); - /// Returns the description of the packet type. - - static const Poco::UInt16 MAX_PACKET_SIZE; - static const std::string MESSAGE_TYPE[MESSAGE_TYPE_LENGTH]; - static const Poco::UInt8 DESTINATION_UNREACHABLE_TYPE; // 3 - static const Poco::UInt8 SOURCE_QUENCH_TYPE; // 4 - static const Poco::UInt8 REDIRECT_MESSAGE_TYPE; // 5 - static const Poco::UInt8 TIME_EXCEEDED_TYPE; // 11 - static const Poco::UInt8 PARAMETER_PROBLEM_TYPE; // 12 - -private: - void initPacket(); - Header* header(Poco::UInt8* buffer, int length) const; - Poco::UInt8* data(Poco::UInt8* buffer, int length) const; - - static const std::string DESTINATION_UNREACHABLE_CODE[DESTINATION_UNREACHABLE_LENGTH]; - static const std::string REDIRECT_MESSAGE_CODE[REDIRECT_MESSAGE_LENGTH]; - static const std::string TIME_EXCEEDED_CODE[TIME_EXCEEDED_LENGTH]; - static const std::string PARAMETER_PROBLEM_CODE[PARAMETER_PROBLEM_LENGTH]; - - Poco::UInt16 _seq; -}; - - -} } // namespace Poco::Net - - -#endif // Net_ICMPv4PacketImpl_INCLUDED diff --git a/contrib/libpoco/Net/include/Poco/Net/IPAddress.h b/contrib/libpoco/Net/include/Poco/Net/IPAddress.h deleted file mode 100644 index b182ff9bb9d..00000000000 --- a/contrib/libpoco/Net/include/Poco/Net/IPAddress.h +++ /dev/null @@ -1,520 +0,0 @@ -// -// IPAddress.h -// -// $Id: //poco/1.4/Net/include/Poco/Net/IPAddress.h#2 $ -// -// Library: Net -// Package: NetCore -// Module: IPAddress -// -// Definition of the IPAddress class. -// -// Copyright (c) 2005-2011, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Net_IPAddress_INCLUDED -#define Net_IPAddress_INCLUDED - - -#include "Poco/Net/Net.h" -#include "Poco/Net/SocketDefs.h" -#include "Poco/Net/IPAddressImpl.h" -#include "Poco/AutoPtr.h" -#include "Poco/Exception.h" -#include - - -namespace Poco { - -class BinaryReader; -class BinaryWriter; - -namespace Net { - - -class Net_API IPAddress - /// This class represents an internet (IP) host - /// address. The address can belong either to the - /// IPv4 or the IPv6 address family. - /// - /// Relational operators (==, !=, <, <=, >, >=) are - /// supported. However, you must not interpret any - /// special meaning into the result of these - /// operations, other than that the results are - /// consistent. - /// - /// Especially, an IPv4 address is never equal to - /// an IPv6 address, even if the IPv6 address is - /// IPv4 compatible and the addresses are the same. - /// - /// IPv6 addresses are supported only if the target platform - /// supports IPv6. -{ -public: - typedef std::vector List; - - enum Family - /// Possible address families for IP addresses. - { - IPv4 = Poco::Net::Impl::IPAddressImpl::IPv4 -#ifdef POCO_HAVE_IPv6 - ,IPv6 = Poco::Net::Impl::IPAddressImpl::IPv6 -#endif - }; - - IPAddress(); - /// Creates a wildcard (zero) IPv4 IPAddress. - - IPAddress(const IPAddress& addr); - /// Creates an IPAddress by copying another one. - - explicit IPAddress(Family family); - /// Creates a wildcard (zero) IPAddress for the - /// given address family. - - explicit IPAddress(const std::string& addr); - /// Creates an IPAddress from the string containing - /// an IP address in presentation format (dotted decimal - /// for IPv4, hex string for IPv6). - /// - /// Depending on the format of addr, either an IPv4 or - /// an IPv6 address is created. - /// - /// See toString() for details on the supported formats. - /// - /// Throws an InvalidAddressException if the address cannot be parsed. - - IPAddress(const std::string& addr, Family family); - /// Creates an IPAddress from the string containing - /// an IP address in presentation format (dotted decimal - /// for IPv4, hex string for IPv6). - - IPAddress(const void* addr, poco_socklen_t length); - /// Creates an IPAddress from a native internet address. - /// A pointer to a in_addr or a in6_addr structure may be - /// passed. - - IPAddress(const void* addr, poco_socklen_t length, Poco::UInt32 scope); - /// Creates an IPAddress from a native internet address. - /// A pointer to a in_addr or a in6_addr structure may be - /// passed. Additionally, for an IPv6 address, a scope ID - /// may be specified. The scope ID will be ignored if an IPv4 - /// address is specified. - - IPAddress(unsigned prefix, Family family); - /// Creates an IPAddress mask with the given length of prefix. - -#if defined(_WIN32) - IPAddress(const SOCKET_ADDRESS& socket_address); - /// Creates an IPAddress from Windows SOCKET_ADDRESS structure. -#endif - - IPAddress(const struct sockaddr& sockaddr); - /// Same for struct sock_addr on POSIX. - - - ~IPAddress(); - /// Destroys the IPAddress. - - IPAddress& operator = (const IPAddress& addr); - /// Assigns an IPAddress. - - Family family() const; - /// Returns the address family (IPv4 or IPv6) of the address. - - Poco::UInt32 scope() const; - /// Returns the IPv6 scope identifier of the address. Returns 0 if - /// the address is an IPv4 address, or the address is an - /// IPv6 address but does not have a scope identifier. - - std::string toString() const; - /// Returns a string containing a representation of the address - /// in presentation format. - /// - /// For IPv4 addresses the result will be in dotted-decimal - /// (d.d.d.d) notation. - /// - /// Textual representation of IPv6 address is one of the following forms: - /// - /// The preferred form is x:x:x:x:x:x:x:x, where the 'x's are the hexadecimal - /// values of the eight 16-bit pieces of the address. This is the full form. - /// Example: 1080:0:0:0:8:600:200A:425C - /// - /// It is not necessary to write the leading zeros in an individual field. - /// However, there must be at least one numeral in every field, except as described below. - /// - /// It is common for IPv6 addresses to contain long strings of zero bits. - /// In order to make writing addresses containing zero bits easier, a special syntax is - /// available to compress the zeros. The use of "::" indicates multiple groups of 16-bits of zeros. - /// The "::" can only appear once in an address. The "::" can also be used to compress the leading - /// and/or trailing zeros in an address. Example: 1080::8:600:200A:425C - /// - /// For dealing with IPv4 compatible addresses in a mixed environment, - /// a special syntax is available: x:x:x:x:x:x:d.d.d.d, where the 'x's are the - /// hexadecimal values of the six high-order 16-bit pieces of the address, - /// and the 'd's are the decimal values of the four low-order 8-bit pieces of the - /// standard IPv4 representation address. Example: ::FFFF:192.168.1.120 - /// - /// If an IPv6 address contains a non-zero scope identifier, it is added - /// to the string, delimited by a percent character. On Windows platforms, - /// the numeric value (which specifies an interface index) is directly - /// appended. On Unix platforms, the name of the interface corresponding - /// to the index (interpretation of the scope identifier) is added. - - bool isWildcard() const; - /// Returns true iff the address is a wildcard (all zero) - /// address. - - bool isBroadcast() const; - /// Returns true iff the address is a broadcast address. - /// - /// Only IPv4 addresses can be broadcast addresses. In a broadcast - /// address, all bits are one. - /// - /// For an IPv6 address, returns always false. - - bool isLoopback() const; - /// Returns true iff the address is a loopback address. - /// - /// For IPv4, the loopback address is 127.0.0.1. - /// - /// For IPv6, the loopback address is ::1. - - bool isMulticast() const; - /// Returns true iff the address is a multicast address. - /// - /// IPv4 multicast addresses are in the - /// 224.0.0.0 to 239.255.255.255 range - /// (the first four bits have the value 1110). - /// - /// IPv6 multicast addresses are in the - /// FFxx:x:x:x:x:x:x:x range. - - bool isUnicast() const; - /// Returns true iff the address is a unicast address. - /// - /// An address is unicast if it is neither a wildcard, - /// broadcast or multicast address. - - bool isLinkLocal() const; - /// Returns true iff the address is a link local unicast address. - /// - /// IPv4 link local addresses are in the 169.254.0.0/16 range, - /// according to RFC 3927. - /// - /// IPv6 link local addresses have 1111 1110 10 as the first - /// 10 bits, followed by 54 zeros. - - bool isSiteLocal() const; - /// Returns true iff the address is a site local unicast address. - /// - /// IPv4 site local addresses are in on of the 10.0.0.0/24, - /// 192.168.0.0/16 or 172.16.0.0 to 172.31.255.255 ranges. - /// - /// Originally, IPv6 site-local addresses had FEC0/10 (1111 1110 11) - /// prefix (RFC 4291), followed by 38 zeros. Interfaces using - /// this mask are supported, but obsolete; RFC 4193 prescribes - /// fc00::/7 (1111 110) as local unicast prefix. - - bool isIPv4Compatible() const; - /// Returns true iff the address is IPv4 compatible. - /// - /// For IPv4 addresses, this is always true. - /// - /// For IPv6, the address must be in the ::x:x range (the - /// first 96 bits are zero). - - bool isIPv4Mapped() const; - /// Returns true iff the address is an IPv4 mapped IPv6 address. - /// - /// For IPv4 addresses, this is always true. - /// - /// For IPv6, the address must be in the ::FFFF:x:x range. - - bool isWellKnownMC() const; - /// Returns true iff the address is a well-known multicast address. - /// - /// For IPv4, well-known multicast addresses are in the - /// 224.0.0.0/8 range. - /// - /// For IPv6, well-known multicast addresses are in the - /// FF0x:x:x:x:x:x:x:x range. - - bool isNodeLocalMC() const; - /// Returns true iff the address is a node-local multicast address. - /// - /// IPv4 does not support node-local addresses, thus the result is - /// always false for an IPv4 address. - /// - /// For IPv6, node-local multicast addresses are in the - /// FFx1:x:x:x:x:x:x:x range. - - bool isLinkLocalMC() const; - /// Returns true iff the address is a link-local multicast address. - /// - /// For IPv4, link-local multicast addresses are in the - /// 224.0.0.0/24 range. Note that this overlaps with the range for well-known - /// multicast addresses. - /// - /// For IPv6, link-local multicast addresses are in the - /// FFx2:x:x:x:x:x:x:x range. - - bool isSiteLocalMC() const; - /// Returns true iff the address is a site-local multicast address. - /// - /// For IPv4, site local multicast addresses are in the - /// 239.255.0.0/16 range. - /// - /// For IPv6, site-local multicast addresses are in the - /// FFx5:x:x:x:x:x:x:x range. - - bool isOrgLocalMC() const; - /// Returns true iff the address is a organization-local multicast address. - /// - /// For IPv4, organization-local multicast addresses are in the - /// 239.192.0.0/16 range. - /// - /// For IPv6, organization-local multicast addresses are in the - /// FFx8:x:x:x:x:x:x:x range. - - bool isGlobalMC() const; - /// Returns true iff the address is a global multicast address. - /// - /// For IPv4, global multicast addresses are in the - /// 224.0.1.0 to 238.255.255.255 range. - /// - /// For IPv6, global multicast addresses are in the - /// FFxF:x:x:x:x:x:x:x range. - - bool operator == (const IPAddress& addr) const; - bool operator != (const IPAddress& addr) const; - bool operator < (const IPAddress& addr) const; - bool operator <= (const IPAddress& addr) const; - bool operator > (const IPAddress& addr) const; - bool operator >= (const IPAddress& addr) const; - IPAddress operator & (const IPAddress& addr) const; - IPAddress operator | (const IPAddress& addr) const; - IPAddress operator ^ (const IPAddress& addr) const; - IPAddress operator ~ () const; - - poco_socklen_t length() const; - /// Returns the length in bytes of the internal socket address structure. - - const void* addr() const; - /// Returns the internal address structure. - - int af() const; - /// Returns the address family (AF_INET or AF_INET6) of the address. - - unsigned prefixLength() const; - /// Returns the prefix length. - - void mask(const IPAddress& mask); - /// Masks the IP address using the given netmask, which is usually - /// a IPv4 subnet mask. Only supported for IPv4 addresses. - /// - /// The new address is (address & mask). - - void mask(const IPAddress& mask, const IPAddress& set); - /// Masks the IP address using the given netmask, which is usually - /// a IPv4 subnet mask. Only supported for IPv4 addresses. - /// - /// The new address is (address & mask) | (set & ~mask). - - static IPAddress parse(const std::string& addr); - /// Creates an IPAddress from the string containing - /// an IP address in presentation format (dotted decimal - /// for IPv4, hex string for IPv6). - /// - /// Depending on the format of addr, either an IPv4 or - /// an IPv6 address is created. - /// - /// See toString() for details on the supported formats. - /// - /// Throws an InvalidAddressException if the address cannot be parsed. - - static bool tryParse(const std::string& addr, IPAddress& result); - /// Tries to interpret the given address string as an - /// IP address in presentation format (dotted decimal - /// for IPv4, hex string for IPv6). - /// - /// Returns true and stores the IPAddress in result if the - /// string contains a valid address. - /// - /// Returns false and leaves result unchanged otherwise. - - static IPAddress wildcard(Family family = IPv4); - /// Returns a wildcard IPv4 or IPv6 address (0.0.0.0). - - static IPAddress broadcast(); - /// Returns a broadcast IPv4 address (255.255.255.255). - - enum - { - MAX_ADDRESS_LENGTH = -#if defined(POCO_HAVE_IPv6) - sizeof(struct in6_addr) -#else - sizeof(struct in_addr) -#endif - /// Maximum length in bytes of a socket address. - }; - -private: - typedef Poco::Net::Impl::IPAddressImpl Impl; -#ifdef POCO_HAVE_ALIGNMENT - typedef Impl* Ptr; -#else - typedef Poco::AutoPtr Ptr; -#endif - - Ptr pImpl() const; - - void newIPv4(const void* hostAddr); - - void newIPv6(const void* hostAddr); - - void newIPv6(const void* hostAddr, Poco::UInt32 scope); - - void newIPv4(unsigned prefix); - - void newIPv6(unsigned prefix); - - void newIPv4(); - - void newIPv6(); - - void destruct(); - -#ifdef POCO_HAVE_ALIGNMENT - char* storage(); - - #ifdef POCO_ENABLE_CPP11 - static const unsigned sz = sizeof(Poco::Net::Impl::IPv6AddressImpl); - typedef std::aligned_storage::type AlignerType; - - union - { - char buffer[sz]; - private: - AlignerType aligner; - } - #else // !POCO_ENABLE_CPP11 - AlignedCharArrayUnion - #endif // POCO_ENABLE_CPP11 - _memory; -#else // !POCO_HAVE_ALIGNMENT - Ptr _pImpl; -#endif // POCO_HAVE_ALIGNMENT -}; - - -inline void IPAddress::destruct() -{ -#ifdef POCO_HAVE_ALIGNMENT - pImpl()->~IPAddressImpl(); -#endif -} - - -inline IPAddress::Ptr IPAddress::pImpl() const -{ -#ifdef POCO_HAVE_ALIGNMENT - return reinterpret_cast(const_cast(_memory.buffer)); -#else - if (_pImpl) return _pImpl; - throw NullPointerException("IPaddress implementation pointer is NULL."); -#endif -} - - -inline void IPAddress::newIPv4(const void* hostAddr) -{ -#ifdef POCO_HAVE_ALIGNMENT - new (storage()) Poco::Net::Impl::IPv4AddressImpl(hostAddr); -#else - _pImpl = new Poco::Net::Impl::IPv4AddressImpl(hostAddr); -#endif -} - - -inline void IPAddress::newIPv6(const void* hostAddr) -{ -#ifdef POCO_HAVE_ALIGNMENT - new (storage()) Poco::Net::Impl::IPv6AddressImpl(hostAddr); -#else - _pImpl = new Poco::Net::Impl::IPv6AddressImpl(hostAddr); -#endif -} - - -inline void IPAddress::newIPv6(const void* hostAddr, Poco::UInt32 scope) -{ -#ifdef POCO_HAVE_ALIGNMENT - new (storage()) Poco::Net::Impl::IPv6AddressImpl(hostAddr, scope); -#else - _pImpl = new Poco::Net::Impl::IPv6AddressImpl(hostAddr, scope); -#endif -} - - -inline void IPAddress::newIPv4(unsigned prefix) -{ -#ifdef POCO_HAVE_ALIGNMENT - new (storage()) Poco::Net::Impl::IPv4AddressImpl(prefix); -#else - _pImpl = new Poco::Net::Impl::IPv4AddressImpl(prefix); -#endif -} - - -inline void IPAddress::newIPv6(unsigned prefix) -{ -#ifdef POCO_HAVE_ALIGNMENT - new (storage()) Poco::Net::Impl::IPv6AddressImpl(prefix); -#else - _pImpl = new Poco::Net::Impl::IPv6AddressImpl(prefix); -#endif -} - - -inline void IPAddress::newIPv4() -{ -#ifdef POCO_HAVE_ALIGNMENT - new (storage()) Poco::Net::Impl::IPv4AddressImpl; -#else - _pImpl = new Poco::Net::Impl::IPv4AddressImpl; -#endif -} - - -inline void IPAddress::newIPv6() -{ -#ifdef POCO_HAVE_ALIGNMENT - new (storage()) Poco::Net::Impl::IPv6AddressImpl; -#else - _pImpl = new Poco::Net::Impl::IPv6AddressImpl; -#endif -} - - -#ifdef POCO_HAVE_ALIGNMENT -inline char* IPAddress::storage() -{ - return _memory.buffer; -} -#endif - - -BinaryWriter& operator << (BinaryWriter& writer, const IPAddress& value); -BinaryReader& operator >> (BinaryReader& reader, IPAddress& value); - - -} } // namespace Poco::Net - - -#endif // Net_IPAddress_INCLUDED diff --git a/contrib/libpoco/Net/include/Poco/Net/IPAddressImpl.h b/contrib/libpoco/Net/include/Poco/Net/IPAddressImpl.h deleted file mode 100644 index eb90b8e56b1..00000000000 --- a/contrib/libpoco/Net/include/Poco/Net/IPAddressImpl.h +++ /dev/null @@ -1,187 +0,0 @@ -// -// IPAddressImpl.h -// -// $Id: //poco/1.4/Net/include/Poco/Net/IPAddressImpl.h#2 $ -// -// Library: Net -// Package: NetCore -// Module: IPAddressImpl -// -// Definition of the IPAddressImpl class. -// -// Copyright (c) 2005-2011, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Net_IPAddressImpl_INCLUDED -#define Net_IPAddressImpl_INCLUDED - - -#include "Poco/Net/Net.h" -#include "Poco/Net/SocketDefs.h" -#ifndef POCO_HAVE_ALIGNMENT -#include "Poco/RefCountedObject.h" -#endif -#include - - -namespace Poco { -namespace Net { -namespace Impl { - - -class IPAddressImpl -#ifndef POCO_HAVE_ALIGNMENT - : public Poco::RefCountedObject -#endif -{ -public: - enum Family - /// Possible address families for IP addresses. - { - IPv4 -#ifdef POCO_HAVE_IPv6 - ,IPv6 -#endif - }; - - virtual ~IPAddressImpl(); - - virtual IPAddressImpl* clone() const = 0; - virtual std::string toString() const = 0; - virtual poco_socklen_t length() const = 0; - virtual const void* addr() const = 0; - virtual Family family() const = 0; - virtual int af() const = 0; - virtual Poco::UInt32 scope() const = 0; - virtual bool isWildcard() const = 0; - virtual bool isBroadcast() const = 0; - virtual bool isLoopback() const = 0; - virtual bool isMulticast() const = 0; - virtual bool isLinkLocal() const = 0; - virtual bool isSiteLocal() const = 0; - virtual bool isIPv4Mapped() const = 0; - virtual bool isIPv4Compatible() const = 0; - virtual bool isWellKnownMC() const = 0; - virtual bool isNodeLocalMC() const = 0; - virtual bool isLinkLocalMC() const = 0; - virtual bool isSiteLocalMC() const = 0; - virtual bool isOrgLocalMC() const = 0; - virtual bool isGlobalMC() const = 0; - virtual void mask(const IPAddressImpl* pMask, const IPAddressImpl* pSet) = 0; - virtual unsigned prefixLength() const = 0; - -protected: - IPAddressImpl(); - -private: - IPAddressImpl(const IPAddressImpl&); - IPAddressImpl& operator = (const IPAddressImpl&); -}; - - -// -// IPv4AddressImpl -// - -class IPv4AddressImpl: public IPAddressImpl -{ -public: - IPv4AddressImpl(); - IPv4AddressImpl(const void* addr); - IPv4AddressImpl(unsigned prefix); - IPv4AddressImpl(const IPv4AddressImpl& addr); - IPv4AddressImpl& operator = (const IPv4AddressImpl&); - std::string toString() const; - poco_socklen_t length() const; - const void* addr() const; - Family family() const; - int af() const; - unsigned prefixLength() const; - Poco::UInt32 scope() const; - bool isWildcard() const; - bool isBroadcast() const; - bool isLoopback() const; - bool isMulticast() const; - bool isLinkLocal() const; - bool isSiteLocal() const; - bool isIPv4Compatible() const; - bool isIPv4Mapped() const; - bool isWellKnownMC() const; - bool isNodeLocalMC() const; - bool isLinkLocalMC() const; - bool isSiteLocalMC() const; - bool isOrgLocalMC() const; - bool isGlobalMC() const; - static IPv4AddressImpl parse(const std::string& addr); - void mask(const IPAddressImpl* pMask, const IPAddressImpl* pSet); - IPAddressImpl* clone() const; - IPv4AddressImpl operator & (const IPv4AddressImpl& addr) const; - IPv4AddressImpl operator | (const IPv4AddressImpl& addr) const; - IPv4AddressImpl operator ^ (const IPv4AddressImpl& addr) const; - IPv4AddressImpl operator ~ () const; - bool operator == (const IPv4AddressImpl& addr) const; - bool operator != (const IPv4AddressImpl& addr) const; - -private: - struct in_addr _addr; -}; - - -// -// IPv6AddressImpl -// - -class IPv6AddressImpl: public IPAddressImpl -{ -public: - IPv6AddressImpl(); - IPv6AddressImpl(const void* addr); - IPv6AddressImpl(const void* addr, Poco::UInt32 scope); - IPv6AddressImpl(unsigned prefix); - std::string toString() const; - poco_socklen_t length() const; - const void* addr() const; - Family family() const; - int af() const; - unsigned prefixLength() const; - Poco::UInt32 scope() const; - bool isWildcard() const; - bool isBroadcast() const; - bool isLoopback() const; - bool isMulticast() const; - bool isLinkLocal() const; - bool isSiteLocal() const; - bool isIPv4Compatible() const; - bool isIPv4Mapped() const; - bool isWellKnownMC() const; - bool isNodeLocalMC() const; - bool isLinkLocalMC() const; - bool isSiteLocalMC() const; - bool isOrgLocalMC() const; - bool isGlobalMC() const; - static IPv6AddressImpl parse(const std::string& addr); - void mask(const IPAddressImpl* pMask, const IPAddressImpl* pSet); - IPAddressImpl* clone() const; - IPv6AddressImpl operator & (const IPv6AddressImpl& addr) const; - IPv6AddressImpl operator | (const IPv6AddressImpl& addr) const; - IPv6AddressImpl operator ^ (const IPv6AddressImpl& addr) const; - IPv6AddressImpl operator ~ () const; - bool operator == (const IPv6AddressImpl& addr) const; - bool operator != (const IPv6AddressImpl& addr) const; - IPv6AddressImpl(const IPv6AddressImpl& addr); - IPv6AddressImpl& operator = (const IPv6AddressImpl&); - -private: - struct in6_addr _addr; - unsigned int _scope; -}; - - -} } } // namespace Poco::Net::Impl - - -#endif // Net_IPAddressImpl_INCLUDED diff --git a/contrib/libpoco/Net/include/Poco/Net/MailMessage.h b/contrib/libpoco/Net/include/Poco/Net/MailMessage.h deleted file mode 100644 index 7a5a653a04e..00000000000 --- a/contrib/libpoco/Net/include/Poco/Net/MailMessage.h +++ /dev/null @@ -1,317 +0,0 @@ -// -// MailMessage.h -// -// $Id: //poco/1.4/Net/include/Poco/Net/MailMessage.h#2 $ -// -// Library: Net -// Package: Mail -// Module: MailMessage -// -// Definition of the MailMessage class. -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Net_MailMessage_INCLUDED -#define Net_MailMessage_INCLUDED - - -#include "Poco/Net/Net.h" -#include "Poco/Net/MessageHeader.h" -#include "Poco/Net/MailRecipient.h" -#include "Poco/Net/PartStore.h" -#include "Poco/Timestamp.h" -#include - - -namespace Poco { -namespace Net { - - -class MediaType; -class PartSource; -class PartHandler; -class MultipartWriter; - - -class Net_API MailMessage: public MessageHeader - /// This class represents an e-mail message for - /// use with the SMTPClientSession and POPClientSession - /// classes. - /// - /// MailMessage supports both old-style plain text messages, - /// as well as MIME multipart mail messages with attachments. - /// - /// For multi-part messages, the following content transfer - /// encodings are supported: 7bit, 8bit, quoted-printable - /// and base64. -{ -public: - typedef std::vector Recipients; - - enum ContentDisposition - { - CONTENT_INLINE, - CONTENT_ATTACHMENT - }; - - enum ContentTransferEncoding - { - ENCODING_7BIT, - ENCODING_8BIT, - ENCODING_QUOTED_PRINTABLE, - ENCODING_BASE64 - }; - - struct Part - { - std::string name; - PartSource* pSource; - ContentDisposition disposition; - ContentTransferEncoding encoding; - }; - - typedef std::vector PartVec; - - MailMessage(PartStoreFactory* pStoreFactory = 0); - /// Creates an empty MailMessage. - /// - /// If pStoreFactory is not null, message attachments will be - /// handled by the object created by the factory. Most - /// common reason is to temporarily save attachments to - /// the file system in order to avoid potential memory - /// exhaustion when attachment files are very large. - - virtual ~MailMessage(); - /// Destroys the MailMessage. - - void addRecipient(const MailRecipient& recipient); - /// Adds a recipient for the message. - - void setRecipients(const Recipients& recipient); - /// Clears existing and sets new recipient list for the message. - - const Recipients& recipients() const; - /// Returns the recipients of the message. - - void setSubject(const std::string& subject); - /// Sets the subject of the message. - /// - /// The subject must not contain any non-ASCII - /// characters. To include non-ASCII characters - /// in the subject, use RFC 2047 word encoding - /// (see encodeWord()). - - const std::string& getSubject() const; - /// Returns the subject of the message. - - void setSender(const std::string& sender); - /// Sets the sender of the message (which - /// ends up in the From header field). - /// - /// The sender must either be a valid email - /// address, or a real name followed by - /// an email address enclosed in < and >. - /// - /// The sender must not contain any non-ASCII - /// characters. To include non-ASCII characters - /// in the sender, use RFC 2047 word encoding - /// (see encodeWord()). - - const std::string& getSender() const; - /// Returns the sender of the message (taken - /// from the From header field). - - void setContent(const std::string& content, ContentTransferEncoding encoding = ENCODING_QUOTED_PRINTABLE); - /// Sets the content of the mail message. - /// - /// If the content transfer encoding is ENCODING_7BIT or - /// ENCODING_8BIT, the content string must be formatted - /// according to the rules of an internet email message. - /// - /// The message will be sent as a single-part - /// message. - /// - /// Note that single CR or LF characters as line delimiters must - /// not be used. Content lines always should be terminated with a - /// proper CRLF sequence. - - const std::string& getContent() const; - /// Returns the content of the mail message. - /// - /// A content will only be returned for single-part - /// messages. The content of multi-part mail messages - /// will be reported through the registered PartHandler. - - void setContentType(const std::string& mediaType); - /// Sets the content type for the message. - - void setContentType(const MediaType& mediaType); - /// Sets the content type for the message. - - const std::string& getContentType() const; - /// Returns the content type for the message. - - void setDate(const Poco::Timestamp& dateTime); - /// Sets the Date header to the given date/time value. - - Poco::Timestamp getDate() const; - /// Returns the value of the Date header. - - bool isMultipart() const; - /// Returns true iff the message is a multipart message. - - void addPart(const std::string& name, - PartSource* pSource, - ContentDisposition disposition, - ContentTransferEncoding encoding); - /// Adds a part/attachment to the mail message. - /// - /// The MailMessage takes ownership of the PartSource and deletes it - /// when it is no longer needed. - /// - /// The MailMessage will be converted to a multipart message - /// if it is not already one. - /// - /// The part name, and the filename specified in the part source - /// must not contain any non-ASCII characters. - /// To include non-ASCII characters in the part name or filename, - /// use RFC 2047 word encoding (see encodeWord()). - - void addContent(PartSource* pSource, - ContentTransferEncoding encoding = ENCODING_QUOTED_PRINTABLE); - /// Adds a part to the mail message by calling - /// addPart("", pSource, CONTENT_INLINE, encoding); - /// - /// The part name, and the filename specified in the part source - /// must not contain any non-ASCII characters. - /// To include non-ASCII characters in the part name or filename, - /// use RFC 2047 word encoding (see encodeWord()). - - void addAttachment(const std::string& name, - PartSource* pSource, - ContentTransferEncoding encoding = ENCODING_BASE64); - /// Adds an attachment to the mail message by calling - /// addPart(name, pSource, CONTENT_ATTACHMENT, encoding); - /// - /// The part name, and the filename specified in the part source - /// must not contain any non-ASCII characters. - /// To include non-ASCII characters in the part name or filename, - /// use RFC 2047 word encoding (see encodeWord()). - - PartSource* createPartStore(const std::string& content, - const std::string& mediaType, - const std::string& filename = ""); - /// Returns either default StringPartSource part store or, - /// if the part store factory was provided during contruction, - /// the one created by PartStoreFactory. - /// Returned part store is allocated on the heap; it is caller's - /// responsibility to delete it after use. Typical use is handler - /// passing it back to MailMessage, which takes care of the cleanup. - - const PartVec& parts() const; - /// Returns const reference to the vector containing part stores. - - void read(std::istream& istr, PartHandler& handler); - /// Reads the MailMessage from the given input stream. - /// - /// If the message has multiple parts, the parts - /// are reported to the PartHandler. If the message - /// is not a multi-part message, the content is stored - /// in a string available by calling getContent(). - - void read(std::istream& istr); - /// Reads the MailMessage from the given input stream. - /// - /// The raw message (including all MIME parts) is stored - /// in a string and available by calling getContent(). - - void write(std::ostream& ostr) const; - /// Writes the mail message to the given output stream. - - static std::string encodeWord(const std::string& text, const std::string& charset = "UTF-8"); - /// If the given string contains non-ASCII characters, - /// encodes the given string using RFC 2047 "Q" word encoding. - /// - /// The given text must already be encoded in the character set - /// given in charset (default is UTF-8). - /// - /// Returns the encoded string, or the original string if it - /// consists only of ASCII characters. - - static const std::string HEADER_SUBJECT; - static const std::string HEADER_FROM; - static const std::string HEADER_TO; - static const std::string HEADER_CC; - static const std::string HEADER_BCC; - static const std::string HEADER_DATE; - static const std::string HEADER_CONTENT_TYPE; - static const std::string HEADER_CONTENT_TRANSFER_ENCODING; - static const std::string HEADER_CONTENT_DISPOSITION; - static const std::string HEADER_CONTENT_ID; - static const std::string HEADER_MIME_VERSION; - static const std::string EMPTY_HEADER; - static const std::string TEXT_PLAIN; - static const std::string CTE_7BIT; - static const std::string CTE_8BIT; - static const std::string CTE_QUOTED_PRINTABLE; - static const std::string CTE_BASE64; - -protected: - - void makeMultipart(); - void writeHeader(const MessageHeader& header, std::ostream& ostr) const; - void writeMultipart(MessageHeader& header, std::ostream& ostr) const; - void writePart(MultipartWriter& writer, const Part& part) const; - void writeEncoded(std::istream& istr, std::ostream& ostr, ContentTransferEncoding encoding) const; - void setRecipientHeaders(MessageHeader& headers) const; - void readHeader(std::istream& istr); - void readMultipart(std::istream& istr, PartHandler& handler); - void readPart(std::istream& istr, const MessageHeader& header, PartHandler& handler); - void handlePart(std::istream& istr, const MessageHeader& header, PartHandler& handler); - static const std::string& contentTransferEncodingToString(ContentTransferEncoding encoding); - static int lineLength(const std::string& str); - static void appendRecipient(const MailRecipient& recipient, std::string& str); - -private: - MailMessage(const MailMessage&); - MailMessage& operator = (const MailMessage&); - - Recipients _recipients; - PartVec _parts; - std::string _content; - ContentTransferEncoding _encoding; - mutable std::string _boundary; - PartStoreFactory* _pStoreFactory; -}; - - -// -// inlines -// -inline const MailMessage::Recipients& MailMessage::recipients() const -{ - return _recipients; -} - - -inline const std::string& MailMessage::getContent() const -{ - return _content; -} - - -inline const MailMessage::PartVec& MailMessage::parts() const -{ - return _parts; -} - - -} } // namespace Poco::Net - - -#endif // Net_MailMessage_INCLUDED diff --git a/contrib/libpoco/Net/include/Poco/Net/MailRecipient.h b/contrib/libpoco/Net/include/Poco/Net/MailRecipient.h deleted file mode 100644 index e4467e48ea0..00000000000 --- a/contrib/libpoco/Net/include/Poco/Net/MailRecipient.h +++ /dev/null @@ -1,122 +0,0 @@ -// -// MailRecipient.h -// -// $Id: //poco/1.4/Net/include/Poco/Net/MailRecipient.h#1 $ -// -// Library: Net -// Package: Mail -// Module: MailRecipient -// -// Definition of the MailRecipient class. -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Net_MailRecipient_INCLUDED -#define Net_MailRecipient_INCLUDED - - -#include "Poco/Net/Net.h" - - -namespace Poco { -namespace Net { - - -class Net_API MailRecipient - /// The recipient of an e-mail message. - /// - /// A recipient has a type (primary recipient, - /// carbon-copy recipient, blind-carbon-copy - /// recipient), an e-mail address and an optional - /// real name. -{ -public: - enum RecipientType - { - PRIMARY_RECIPIENT, - CC_RECIPIENT, - BCC_RECIPIENT - }; - - MailRecipient(); - /// Creates an empty MailRecipient. - - MailRecipient(const MailRecipient& recipient); - /// Creates a MailRecipient by copying another one. - - MailRecipient(RecipientType type, const std::string& address); - /// Creates a MailRecipient of the given type. - - MailRecipient(RecipientType type, const std::string& address, const std::string& realName); - /// Creates a MailRecipient of the given type. - - ~MailRecipient(); - /// Destroys the MailRecipient. - - MailRecipient& operator = (const MailRecipient& recipient); - /// Assigns another recipient. - - void swap(MailRecipient& recipient); - /// Exchanges the content of two recipients. - - RecipientType getType() const; - /// Returns the type of the recipient. - - void setType(RecipientType type); - /// Sets the type of the recipient. - - const std::string& getAddress() const; - /// Returns the address of the recipient. - - void setAddress(const std::string& address); - /// Sets the address of the recipient. - - const std::string& getRealName() const; - /// Returns the real name of the recipient. - - void setRealName(const std::string& realName); - /// Sets the real name of the recipient. - -private: - std::string _address; - std::string _realName; - RecipientType _type; -}; - - -// -// inlines -// -inline MailRecipient::RecipientType MailRecipient::getType() const -{ - return _type; -} - - -inline const std::string& MailRecipient::getAddress() const -{ - return _address; -} - - -inline const std::string& MailRecipient::getRealName() const -{ - return _realName; -} - - -inline void swap(MailRecipient& r1, MailRecipient& r2) -{ - r1.swap(r2); -} - - -} } // namespace Poco::Net - - -#endif // Net_MailRecipient_INCLUDED diff --git a/contrib/libpoco/Net/include/Poco/Net/MailStream.h b/contrib/libpoco/Net/include/Poco/Net/MailStream.h deleted file mode 100644 index b9e760ae6ba..00000000000 --- a/contrib/libpoco/Net/include/Poco/Net/MailStream.h +++ /dev/null @@ -1,148 +0,0 @@ -// -// MailStream.h -// -// $Id: //poco/1.4/Net/include/Poco/Net/MailStream.h#1 $ -// -// Library: Net -// Package: Mail -// Module: MailStream -// -// Definition of the MailStream class. -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Net_MailStream_INCLUDED -#define Net_MailStream_INCLUDED - - -#include "Poco/Net/Net.h" -#include "Poco/UnbufferedStreamBuf.h" -#include -#include - - -namespace Poco { -namespace Net { - - -class Net_API MailStreamBuf: public Poco::UnbufferedStreamBuf - /// The sole purpose of this stream buffer is to replace - /// a "\r\n.\r\n" character sequence with a "\r\n..\r\n" sequence for - /// output streams and vice-versa for input streams. - /// - /// This is used when sending mail messages to SMTP servers, or - /// receiving mail messages from POP servers. - /// - /// See RFC 2181 (Simple Mail Transfer Protocol) and RFC 1939 - /// (Post Office Protocol - Version 3) for more information. -{ -public: - MailStreamBuf(std::istream& istr); - /// Creates the MailStreamBuf and connects it - /// to the given input stream. - - MailStreamBuf(std::ostream& ostr); - /// Creates the MailStreamBuf and connects it - /// to the given output stream. - - ~MailStreamBuf(); - /// Destroys the MailStreamBuf. - - void close(); - /// Writes the terminating period, followed by - /// CR-LF. - -protected: - int readFromDevice(); - int writeToDevice(char c); - int readOne(); - -private: - enum State - { - ST_DATA, - ST_CR, - ST_CR_LF, - ST_CR_LF_DOT, - ST_CR_LF_DOT_DOT, - ST_CR_LF_DOT_CR, - ST_CR_LF_DOT_CR_LF - }; - - std::istream* _pIstr; - std::ostream* _pOstr; - std::string _buffer; - State _state; -}; - - -class Net_API MailIOS: public virtual std::ios - /// The base class for MailInputStream and MailOutputStream. - /// - /// This class provides common methods and is also needed to ensure - /// the correct initialization order of the stream buffer and base classes. -{ -public: - MailIOS(std::istream& istr); - /// Creates the MailIOS and connects it - /// to the given input stream. - - MailIOS(std::ostream& ostr); - /// Creates the MailIOS and connects it - /// to the given output stream. - - ~MailIOS(); - /// Destroys the stream. - - void close(); - /// Writes the terminating period, followed by - /// CR-LF. - - MailStreamBuf* rdbuf(); - /// Returns a pointer to the underlying streambuf. - -protected: - MailStreamBuf _buf; -}; - - -class Net_API MailInputStream: public MailIOS, public std::istream - /// This class is used for reading E-Mail messages from a - /// POP3 server. All occurences of "\r\n..\r\n" are replaced with - /// "\r\n.\r\n". The first occurence of "\r\n.\r\n" denotes the end - /// of the stream. -{ -public: - MailInputStream(std::istream& istr); - /// Creates the MailInputStream and connects it - /// to the given input stream. - - ~MailInputStream(); - /// Destroys the MailInputStream. -}; - - -class Net_API MailOutputStream: public MailIOS, public std::ostream - /// This class is used for writing E-Mail messages to a - /// SMTP server. All occurences of "\r\n.\r\n" are replaced with - /// "\r\n..\r\n". -{ -public: - MailOutputStream(std::ostream& ostr); - /// Creates the MailOutputStream and connects it - /// to the given input stream. - - ~MailOutputStream(); - /// Destroys the MailOutputStream. -}; - - -} } // namespace Poco::Net - - -#endif // Net_MailStream_INCLUDED diff --git a/contrib/libpoco/Net/include/Poco/Net/MediaType.h b/contrib/libpoco/Net/include/Poco/Net/MediaType.h deleted file mode 100644 index a2d7664d155..00000000000 --- a/contrib/libpoco/Net/include/Poco/Net/MediaType.h +++ /dev/null @@ -1,171 +0,0 @@ -// -// MediaType.h -// -// $Id: //poco/1.4/Net/include/Poco/Net/MediaType.h#2 $ -// -// Library: Net -// Package: Messages -// Module: MediaType -// -// Definition of the MediaType class. -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Net_MediaType_INCLUDED -#define Net_MediaType_INCLUDED - - -#include "Poco/Net/Net.h" -#include "Poco/Net/NameValueCollection.h" - - -namespace Poco { -namespace Net { - - -class Net_API MediaType - /// This class represents a MIME media type, consisting of - /// a top-level type, a subtype and an optional set of - /// parameters. - /// - /// The implementation conforms with RFC 2045 and RFC 2046. -{ -public: - MediaType(const std::string& mediaType); - /// Creates the MediaType from the given string, which - /// must have the format /{;=}. - - MediaType(const std::string& type, const std::string& subType); - /// Creates the MediaType, using the given type and subtype. - - MediaType(const MediaType& mediaType); - /// Creates a MediaType from another one. - - ~MediaType(); - /// Destroys the MediaType. - - MediaType& operator = (const MediaType& mediaType); - /// Assigns another media type. - - MediaType& operator = (const std::string& mediaType); - /// Assigns another media type. - - void swap(MediaType& mediaType); - /// Swaps the MediaType with another one. - - void setType(const std::string& type); - /// Sets the top-level type. - - const std::string& getType() const; - /// Returns the top-level type. - - void setSubType(const std::string& subType); - /// Sets the sub type. - - const std::string& getSubType() const; - /// Returns the sub type. - - void setParameter(const std::string& name, const std::string& value); - /// Sets the parameter with the given name. - - const std::string& getParameter(const std::string& name) const; - /// Returns the parameter with the given name. - /// - /// Throws a NotFoundException if the parameter does not exist. - - bool hasParameter(const std::string& name) const; - /// Returns true iff a parameter with the given name exists. - - void removeParameter(const std::string& name); - /// Removes the parameter with the given name. - - const NameValueCollection& parameters() const; - /// Returns the parameters. - - std::string toString() const; - /// Returns the string representation of the media type - /// which is /{;=} - - bool matches(const MediaType& mediaType) const; - /// Returns true iff the type and subtype match - /// the type and subtype of the given media type. - /// Matching is case insensitive. - - bool matches(const std::string& type, const std::string& subType) const; - /// Returns true iff the type and subtype match - /// the given type and subtype. - /// Matching is case insensitive. - - bool matches(const std::string& type) const; - /// Returns true iff the type matches the given type. - /// Matching is case insensitive. - - bool matchesRange(const MediaType& mediaType) const; - /// Returns true if the type and subtype match - /// the type and subtype of the given media type. - /// If the MIME type is a range of types it matches - /// any media type withing the range (e.g. "image/*" matches - /// any image media type, "*/*" matches anything). - /// Matching is case insensitive. - - bool matchesRange(const std::string& type, const std::string& subType) const; - /// Returns true if the type and subtype match - /// the given type and subtype. - /// If the MIME type is a range of types it matches - /// any media type withing the range (e.g. "image/*" matches - /// any image media type, "*/*" matches anything). - /// Matching is case insensitive. - - bool matchesRange(const std::string& type) const; - /// Returns true if the type matches the given type or - /// the type is a range of types denoted by "*". - /// Matching is case insensitive. - -protected: - void parse(const std::string& mediaType); - -private: - MediaType(); - - std::string _type; - std::string _subType; - NameValueCollection _parameters; -}; - - -// -// inlines -// -inline const std::string& MediaType::getType() const -{ - return _type; -} - - -inline const std::string& MediaType::getSubType() const -{ - return _subType; -} - - -inline const NameValueCollection& MediaType::parameters() const -{ - return _parameters; -} - - -inline void swap(MediaType& m1, MediaType& m2) -{ - m1.swap(m2); -} - - -} } // namespace Poco::Net - - -#endif // Net_MediaType_INCLUDED diff --git a/contrib/libpoco/Net/include/Poco/Net/MessageHeader.h b/contrib/libpoco/Net/include/Poco/Net/MessageHeader.h deleted file mode 100644 index 964d0216d7e..00000000000 --- a/contrib/libpoco/Net/include/Poco/Net/MessageHeader.h +++ /dev/null @@ -1,166 +0,0 @@ -// -// MessageHeader.h -// -// $Id: //poco/1.4/Net/include/Poco/Net/MessageHeader.h#3 $ -// -// Library: Net -// Package: Messages -// Module: MessageHeader -// -// Definition of the MessageHeader class. -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Net_MessageHeader_INCLUDED -#define Net_MessageHeader_INCLUDED - - -#include "Poco/Net/Net.h" -#include "Poco/Net/NameValueCollection.h" -#include -#include -#include - - -namespace Poco { -namespace Net { - - -class Net_API MessageHeader: public NameValueCollection - /// A collection of name-value pairs that are used in - /// various internet protocols like HTTP and SMTP. - /// - /// The name is case-insensitive. - /// - /// There can be more than one name-value pair with the - /// same name. - /// - /// MessageHeader supports writing and reading the - /// header data in RFC 2822 format. - /// - /// The maximum number of fields can be restricted - /// by calling setFieldLimit(). This is useful to - /// defend against certain kinds of denial-of-service - /// attacks. The limit is only enforced when parsing - /// header fields from a stream, not when programmatically - /// adding them. The default limit is 100. -{ -public: - MessageHeader(); - /// Creates the MessageHeader. - - MessageHeader(const MessageHeader& messageHeader); - /// Creates the MessageHeader by copying - /// another one. - - virtual ~MessageHeader(); - /// Destroys the MessageHeader. - - MessageHeader& operator = (const MessageHeader& messageHeader); - /// Assigns the content of another MessageHeader. - - virtual void write(std::ostream& ostr) const; - /// Writes the message header to the given output stream. - /// - /// The format is one name-value pair per line, with - /// name and value separated by a colon and lines - /// delimited by a carriage return and a linefeed - /// character. See RFC 2822 for details. - - virtual void read(std::istream& istr); - /// Reads the message header from the given input stream. - /// - /// See write() for the expected format. - /// Also supported is folding of field content, according - /// to section 2.2.3 of RFC 2822. - /// - /// Reading stops at the first empty line (a line only - /// containing \r\n or \n), as well as at the end of - /// the stream. - /// - /// Some basic sanity checking of the input stream is - /// performed. - /// - /// Throws a MessageException if the input stream is - /// malformed. - - int getFieldLimit() const; - /// Returns the maximum number of header fields - /// allowed. - /// - /// See setFieldLimit() for more information. - - void setFieldLimit(int limit); - /// Sets the maximum number of header fields - /// allowed. This limit is used to defend certain - /// kinds of denial-of-service attacks. - /// Specify 0 for unlimited (not recommended). - /// - /// The default limit is 100. - - bool hasToken(const std::string& fieldName, const std::string& token) const; - /// Returns true iff the field with the given fieldName contains - /// the given token. Tokens in a header field are expected to be - /// comma-separated and are case insensitive. - - static void splitElements(const std::string& s, std::vector& elements, bool ignoreEmpty = true); - /// Splits the given string into separate elements. Elements are expected - /// to be separated by commas. - /// - /// For example, the string - /// text/plain; q=0.5, text/html, text/x-dvi; q=0.8 - /// is split into the elements - /// text/plain; q=0.5 - /// text/html - /// text/x-dvi; q=0.8 - /// - /// Commas enclosed in double quotes do not split elements. - /// - /// If ignoreEmpty is true, empty elements are not returned. - - static void splitParameters(const std::string& s, std::string& value, NameValueCollection& parameters); - /// Splits the given string into a value and a collection of parameters. - /// Parameters are expected to be separated by semicolons. - /// - /// Enclosing quotes of parameter values are removed. - /// - /// For example, the string - /// multipart/mixed; boundary="MIME_boundary_01234567" - /// is split into the value - /// multipart/mixed - /// and the parameter - /// boundary -> MIME_boundary_01234567 - - static void splitParameters(const std::string::const_iterator& begin, const std::string::const_iterator& end, NameValueCollection& parameters); - /// Splits the given string into a collection of parameters. - /// Parameters are expected to be separated by semicolons. - /// - /// Enclosing quotes of parameter values are removed. - - static void quote(const std::string& value, std::string& result, bool allowSpace = false); - /// Checks if the value must be quoted. If so, the value is - /// appended to result, enclosed in double-quotes. - /// Otherwise, the value is appended to result as-is. - -private: - enum Limits - /// Limits for basic sanity checks when reading a header - { - MAX_NAME_LENGTH = 256, - MAX_VALUE_LENGTH = 8192, - DFL_FIELD_LIMIT = 100 - }; - - int _fieldLimit; -}; - - -} } // namespace Poco::Net - - -#endif // Net_MessageHeader_INCLUDED diff --git a/contrib/libpoco/Net/include/Poco/Net/MulticastSocket.h b/contrib/libpoco/Net/include/Poco/Net/MulticastSocket.h deleted file mode 100644 index b26801c64ca..00000000000 --- a/contrib/libpoco/Net/include/Poco/Net/MulticastSocket.h +++ /dev/null @@ -1,130 +0,0 @@ -// -// MulticastSocket.h -// -// $Id: //poco/1.4/Net/include/Poco/Net/MulticastSocket.h#1 $ -// -// Library: Net -// Package: Sockets -// Module: MulticastSocket -// -// Definition of the MulticastSocket class. -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Net_MulticastSocket_INCLUDED -#define Net_MulticastSocket_INCLUDED - - -#include "Poco/Net/Net.h" - - -#ifdef POCO_NET_HAS_INTERFACE - - -#include "Poco/Net/DatagramSocket.h" -#include "Poco/Net/NetworkInterface.h" - - -namespace Poco { -namespace Net { - - -class Net_API MulticastSocket: public DatagramSocket - /// A MulticastSocket is a special DatagramSocket - /// that can be used to send packets to and receive - /// packets from multicast groups. -{ -public: - MulticastSocket(); - /// Creates the MulticastSocket. - - explicit MulticastSocket(IPAddress::Family family); - /// Creates an unconnected datagram socket. - /// - /// The socket will be created for the - /// given address family. - - MulticastSocket(const SocketAddress& address, bool reuseAddress = false); - /// Creates a datagram socket and binds it - /// to the given address. - /// - /// Depending on the address family, the socket - /// will be either an IPv4 or an IPv6 socket. - - MulticastSocket(const Socket& socket); - /// Creates the DatagramSocket with the SocketImpl - /// from another socket. The SocketImpl must be - /// a DatagramSocketImpl, otherwise an InvalidArgumentException - /// will be thrown. - - ~MulticastSocket(); - /// Destroys the DatagramSocket. - - MulticastSocket& operator = (const Socket& socket); - /// Assignment operator. - /// - /// Releases the socket's SocketImpl and - /// attaches the SocketImpl from the other socket and - /// increments the reference count of the SocketImpl. - - void setInterface(const NetworkInterface& interfc); - /// Sets the interface used for sending multicast packets. - /// - /// To select the default interface, specify an empty - /// interface. - /// - /// This is done by setting the IP_MULTICAST_IF/IPV6_MULTICAST_IF - /// socket option. - - NetworkInterface getInterface() const; - /// Returns the interface used for sending multicast packets. - - void setLoopback(bool flag); - /// Enable or disable loopback for multicast packets. - /// - /// Sets the value of the IP_MULTICAST_LOOP/IPV6_MULTICAST_LOOP - /// socket option. - - bool getLoopback() const; - /// Returns true iff loopback for multicast packets is enabled, - /// false otherwise. - - void setTimeToLive(unsigned value); - /// Specifies the TTL/hop limit for outgoing packets. - /// - /// Sets the value of the IP_MULTICAST_TTL/IPV6_MULTICAST_HOPS - /// socket option. - - unsigned getTimeToLive() const; - /// Returns the TTL/hop limit for outgoing packets. - - void joinGroup(const IPAddress& groupAddress); - /// Joins the specified multicast group at the default interface. - - void joinGroup(const IPAddress& groupAddress, const NetworkInterface& interfc); - /// Joins the specified multicast group at the given interface. - - void leaveGroup(const IPAddress& groupAddress); - /// Leaves the specified multicast group at the default interface. - - void leaveGroup(const IPAddress& groupAddress, const NetworkInterface& interfc); - /// Leaves the specified multicast group at the given interface. - -private: - static NetworkInterface findFirstInterface(const IPAddress& groupAddress); - /// Returns first multicast-eligible network interface. -}; - - -} } // namespace Poco::Net - - -#endif // POCO_NET_HAS_INTERFACE - - -#endif // Net_MulticastSocket_INCLUDED diff --git a/contrib/libpoco/Net/include/Poco/Net/MultipartReader.h b/contrib/libpoco/Net/include/Poco/Net/MultipartReader.h deleted file mode 100644 index fca6bf5e10e..00000000000 --- a/contrib/libpoco/Net/include/Poco/Net/MultipartReader.h +++ /dev/null @@ -1,162 +0,0 @@ -// -// MultipartReader.h -// -// $Id: //poco/1.4/Net/include/Poco/Net/MultipartReader.h#1 $ -// -// Library: Net -// Package: Messages -// Module: MultipartReader -// -// Definition of the MultipartReader class. -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Net_MultipartReader_INCLUDED -#define Net_MultipartReader_INCLUDED - - -#include "Poco/Net/Net.h" -#include "Poco/BufferedStreamBuf.h" -#include - - -namespace Poco { -namespace Net { - - -class MessageHeader; - - -class Net_API MultipartStreamBuf: public Poco::BufferedStreamBuf - /// This is the streambuf class used for reading from a multipart message stream. -{ -public: - MultipartStreamBuf(std::istream& istr, const std::string& boundary); - ~MultipartStreamBuf(); - bool lastPart() const; - -protected: - int readFromDevice(char* buffer, std::streamsize length); - -private: - enum - { - STREAM_BUFFER_SIZE = 1024 - }; - - std::istream& _istr; - std::string _boundary; - bool _lastPart; -}; - - -class Net_API MultipartIOS: public virtual std::ios - /// The base class for MultipartInputStream. -{ -public: - MultipartIOS(std::istream& istr, const std::string& boundary); - ~MultipartIOS(); - MultipartStreamBuf* rdbuf(); - bool lastPart() const; - -protected: - MultipartStreamBuf _buf; -}; - - -class Net_API MultipartInputStream: public MultipartIOS, public std::istream - /// This class is for internal use by MultipartReader only. -{ -public: - MultipartInputStream(std::istream& istr, const std::string& boundary); - ~MultipartInputStream(); -}; - - - -class Net_API MultipartReader - /// This class is used to split a MIME multipart - /// message into its single parts. - /// - /// The format of multipart messages is described - /// in section 5.1 of RFC 2046. - /// - /// To split a multipart message into its parts, - /// do the following: - /// - Create a MultipartReader object, passing it - /// an input stream and optionally a boundary string. - /// - while hasNextPart() returns true, call nextPart() - /// and read the part from stream(). - /// - /// Always ensure that you read all data from the part - /// stream, otherwise the MultipartReader will fail to - /// find the next part. -{ -public: - explicit MultipartReader(std::istream& istr); - /// Creates the MultipartReader and attaches it to the - /// given input stream. - /// - /// The boundary string is determined from the input - /// stream. The message must not contain a preamble - /// preceding the first encapsulation boundary. - - MultipartReader(std::istream& istr, const std::string& boundary); - /// Creates the MultipartReader and attaches it to the - /// given input stream. The given boundary string is - /// used to find message boundaries. - - ~MultipartReader(); - /// Destroys the MultipartReader. - - void nextPart(MessageHeader& messageHeader); - /// Moves to the next part in the message and stores the - /// part's header fields in messageHeader. - /// - /// Throws an MultipartException if there are no more parts - /// available, or if no boundary line can be found in - /// the input stream. - - bool hasNextPart(); - /// Returns true iff more parts are available. - /// - /// Before the first call to nextPart(), returns - /// always true. - - std::istream& stream() const; - /// Returns a reference to the reader's stream that - /// can be used to read the current part. - /// - /// The returned reference will be valid until - /// nextPart() is called or the MultipartReader - /// object is destroyed. - - const std::string& boundary() const; - /// Returns the multipart boundary used by this reader. - -protected: - void findFirstBoundary(); - void guessBoundary(); - void parseHeader(MessageHeader& messageHeader); - bool readLine(std::string& line, std::string::size_type n); - -private: - MultipartReader(); - MultipartReader(const MultipartReader&); - MultipartReader& operator = (const MultipartReader&); - - std::istream& _istr; - std::string _boundary; - MultipartInputStream* _pMPI; -}; - - -} } // namespace Poco::Net - - -#endif // Net_MultipartReader_INCLUDED diff --git a/contrib/libpoco/Net/include/Poco/Net/MultipartWriter.h b/contrib/libpoco/Net/include/Poco/Net/MultipartWriter.h deleted file mode 100644 index 4bafc387907..00000000000 --- a/contrib/libpoco/Net/include/Poco/Net/MultipartWriter.h +++ /dev/null @@ -1,111 +0,0 @@ -// -// MultipartWriter.h -// -// $Id: //poco/1.4/Net/include/Poco/Net/MultipartWriter.h#1 $ -// -// Library: Net -// Package: Messages -// Module: MultipartWriter -// -// Definition of the MultipartWriter class. -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Net_MultipartWriter_INCLUDED -#define Net_MultipartWriter_INCLUDED - - -#include "Poco/Net/Net.h" -#include - - -namespace Poco { -namespace Net { - - -class MessageHeader; - - -class Net_API MultipartWriter - /// This class is used to write MIME multipart - /// messages to an output stream. - /// - /// The format of multipart messages is described - /// in section 5.1 of RFC 2046. - /// - /// To create a multipart message, first create - /// a MultipartWriter object. - /// Then, for each part, call nextPart() and - /// write the content to the output stream. - /// Repeat for all parts. - /// After the last part has been written, - /// call close() to finish the multipart message. -{ -public: - explicit MultipartWriter(std::ostream& ostr); - /// Creates the MultipartWriter, using the - /// given output stream. - /// - /// Creates a random boundary string. - - MultipartWriter(std::ostream& ostr, const std::string& boundary); - /// Creates the MultipartWriter, using the - /// given output stream and boundary string. - - ~MultipartWriter(); - /// Destroys the MultipartWriter. - - void nextPart(const MessageHeader& header); - /// Opens a new message part and writes - /// the message boundary string, followed - /// by the message header to the stream. - - void close(); - /// Closes the multipart message and writes - /// the terminating boundary string. - /// - /// Does not close the underlying stream. - - std::ostream& stream(); - /// Returns the writer's stream. - - const std::string& boundary() const; - /// Returns the multipart boundary used by this writer. - - static std::string createBoundary(); - /// Creates a random boundary string. - /// - /// The string always has the form - /// MIME_boundary_XXXXXXXXXXXX, where - /// XXXXXXXXXXXX is a random hexadecimal - /// number. - -private: - MultipartWriter(); - MultipartWriter(const MultipartWriter&); - MultipartWriter& operator = (const MultipartWriter&); - - std::ostream& _ostr; - std::string _boundary; - bool _firstPart; -}; - - -// -// inlines -// -inline std::ostream& MultipartWriter::stream() -{ - return _ostr; -} - - -} } // namespace Poco::Net - - -#endif // Net_MultipartWriter_INCLUDED diff --git a/contrib/libpoco/Net/include/Poco/Net/NTPClient.h b/contrib/libpoco/Net/include/Poco/Net/NTPClient.h deleted file mode 100644 index b2967ff2142..00000000000 --- a/contrib/libpoco/Net/include/Poco/Net/NTPClient.h +++ /dev/null @@ -1,66 +0,0 @@ -// -// NTPClient.h -// -// $Id: //poco/1.4/Net/include/Poco/Net/NTPClient.h#1 $ -// -// Library: Net -// Package: NTP -// Module: NTPClient -// -// Definition of the NTPClient class. -// -// Copyright (c) 2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Net_NTPClient_INCLUDED -#define Net_NTPClient_INCLUDED - - -#include "Poco/Net/Net.h" -#include "Poco/Net/NTPEventArgs.h" -#include "Poco/Net/SocketAddress.h" -#include "Poco/BasicEvent.h" - - -namespace Poco { -namespace Net { - - -class Net_API NTPClient - /// This class provides NTP (Network Time Protocol) client functionality. -{ -public: - mutable Poco::BasicEvent response; - - explicit NTPClient(IPAddress::Family family, int timeout = 3000000); - /// Creates an NTP client. - - ~NTPClient(); - /// Destroys the NTP client. - - int request(SocketAddress& address) const; - /// Request the time from the server at address. - /// Notifications are posted for events. - /// - /// Returns the number of valid replies. - - int request(const std::string& address) const; - /// Request the time from the server at address. - /// Notifications are posted for events. - /// - /// Returns the number of valid replies. - -private: - mutable IPAddress::Family _family; - int _timeout; -}; - - -} } // namespace Poco::Net - - -#endif // Net_NTPClient_INCLUDED diff --git a/contrib/libpoco/Net/include/Poco/Net/NTPEventArgs.h b/contrib/libpoco/Net/include/Poco/Net/NTPEventArgs.h deleted file mode 100644 index 6c2c5cba8d4..00000000000 --- a/contrib/libpoco/Net/include/Poco/Net/NTPEventArgs.h +++ /dev/null @@ -1,86 +0,0 @@ -// -// NTPEventArgs.h -// -// $Id: //poco/1.4/Net/include/Poco/Net/NTPEventArgs.h#1 $ -// -// Library: Net -// Package: NTP -// Module: NTPEventArgs -// -// Definition of NTPEventArgs. -// -// Copyright (c) 2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Net_NTPEventArgs_INCLUDED -#define Net_NTPEventArgs_INCLUDED - - -#include "Poco/Net/Net.h" -#include "Poco/Net/SocketAddress.h" -#include "Poco/Net/NTPPacket.h" - - -namespace Poco { -namespace Net { - - -class Net_API NTPEventArgs - /// The purpose of the NTPEventArgs class is to be used as template parameter - /// to instantiate event members in NTPClient class. - /// When clients register for an event notification, the reference to the class is - /// passed to the handler function to provide information about the event. -{ -public: - NTPEventArgs(const SocketAddress& address); - /// Creates NTPEventArgs. - - virtual ~NTPEventArgs(); - /// Destroys NTPEventArgs. - - std::string hostName() const; - /// Tries to resolve the target IP address into host name. - /// If unsuccessful, all exceptions are silently ignored and - /// the IP address is returned. - - std::string hostAddress() const; - /// Returns the target IP address. - - const NTPPacket &packet(); - /// Returns the NTP packet. - -private: - NTPEventArgs(); - - void setPacket(NTPPacket &packet); - - SocketAddress _address; - NTPPacket _packet; - - friend class NTPClient; -}; - - -// -// inlines -// -inline const NTPPacket &NTPEventArgs::packet() -{ - return _packet; -} - - -inline void NTPEventArgs::setPacket(NTPPacket &packet) -{ - _packet = packet; -} - - -} } // namespace Poco::Net - - -#endif diff --git a/contrib/libpoco/Net/include/Poco/Net/NTPPacket.h b/contrib/libpoco/Net/include/Poco/Net/NTPPacket.h deleted file mode 100644 index 32dbd1955bd..00000000000 --- a/contrib/libpoco/Net/include/Poco/Net/NTPPacket.h +++ /dev/null @@ -1,209 +0,0 @@ -// -// NTPPacket.h -// -// $Id: //poco/1.4/Net/include/Poco/Net/NTPPacket.h#1 $ -// -// Library: Net -// Package: NTP -// Module: NTPPacket -// -// Definition of the NTPPacket class. -// -// Copyright (c) 2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Net_NTPPacket_INCLUDED -#define Net_NTPPacket_INCLUDED - - -#include "Poco/Foundation.h" -#include "Poco/Net/Net.h" -#include "Poco/Timestamp.h" - -namespace Poco { -namespace Net { - - -class Net_API NTPPacket - /// This class is the NTP packet abstraction. -{ -public: - NTPPacket(); - /// Creates an NTPPacket. - - NTPPacket(Poco::UInt8 *packet); - /// Creates an NTPPacket. - /// - /// Assumed to have at least 48 bytes. - - ~NTPPacket(); - /// Destroys the NTPPacket. - - void packet(Poco::UInt8 *packet) const; - /// Returns the NTP packet. - /// - /// Assumed to have at least 48 bytes. - - void setPacket(Poco::UInt8 *packet); - /// Returns the NTP packet. - /// - /// Assumed to have exactly 48 bytes. - - Poco::Int8 leapIndicator() const; - /// Returns the leap indicator. - - Poco::Int8 version() const; - /// Returns the version. - - Poco::Int8 mode() const; - /// Returns the mode. - - Poco::Int8 stratum() const; - /// Returns the stratum. - - Poco::Int8 pool() const; - /// Returns the pool. - - Poco::Int8 precision() const; - /// Returns the precision - - Poco::Int32 rootDelay() const; - /// Returns the root delay - - Poco::Int32 rootDispersion() const; - /// Returns the root dispersion - - Poco::Int32 referenceId() const; - /// Returns the reference id - - Poco::Int64 referenceTimestamp() const; - /// Returns the reference timestamp - - Poco::Int64 originateTimestamp() const; - /// Returns the originate timestamp - - Poco::Int64 receiveTimestamp() const; - /// Returns the receive timestamp - - Poco::Int64 transmitTimestamp() const; - /// Returns the transmit timestamp - - Poco::Timestamp referenceTime() const; - /// Returns the reference time - - Poco::Timestamp originateTime() const; - /// Returns the originate time - - Poco::Timestamp receiveTime() const; - /// Returns the receive time - - Poco::Timestamp transmitTime() const; - /// Returns the transmit time -private: - Poco::Timestamp convertTime(Poco::Int64 tm) const; - - Poco::Int8 _leapIndicator; - Poco::Int8 _version; - Poco::Int8 _mode; - Poco::Int8 _stratum; - Poco::Int8 _pool; - Poco::Int8 _precision; - Poco::Int32 _rootDelay; - Poco::Int32 _rootDispersion; - Poco::Int32 _referenceId; - Poco::Int64 _referenceTimestamp; - Poco::Int64 _originateTimestamp; - Poco::Int64 _receiveTimestamp; - Poco::Int64 _transmitTimestamp; -}; - - -// -// inlines -// -inline Poco::Int8 NTPPacket::leapIndicator() const -{ - return _leapIndicator; -} - - -inline Poco::Int8 NTPPacket::version() const -{ - return _version; -} - - -inline Poco::Int8 NTPPacket::mode() const -{ - return _mode; -} - - -inline Poco::Int8 NTPPacket::stratum() const -{ - return _stratum; -} - - -inline Poco::Int8 NTPPacket::pool() const -{ - return _pool; -} - - -inline Poco::Int8 NTPPacket::precision() const -{ - return _precision; -} - - -inline Poco::Int32 NTPPacket::rootDelay() const -{ - return _rootDelay; -} - - -inline Poco::Int32 NTPPacket::rootDispersion() const -{ - return _rootDispersion; -} - - -inline Poco::Int32 NTPPacket::referenceId() const -{ - return _referenceId; -} - - -inline Poco::Int64 NTPPacket::referenceTimestamp() const -{ - return _referenceTimestamp; -} - - -inline Poco::Int64 NTPPacket::originateTimestamp() const -{ - return _originateTimestamp; -} - - -inline Poco::Int64 NTPPacket::receiveTimestamp() const -{ - return _receiveTimestamp; -} - - -inline Poco::Int64 NTPPacket::transmitTimestamp() const -{ - return _transmitTimestamp; -} - - -} } // namespace Poco::Net - - -#endif // Net_NTPPacket_INCLUDED diff --git a/contrib/libpoco/Net/include/Poco/Net/NameValueCollection.h b/contrib/libpoco/Net/include/Poco/Net/NameValueCollection.h deleted file mode 100644 index 40410089010..00000000000 --- a/contrib/libpoco/Net/include/Poco/Net/NameValueCollection.h +++ /dev/null @@ -1,128 +0,0 @@ -// -// NameValueCollection.h -// -// $Id: //poco/1.4/Net/include/Poco/Net/NameValueCollection.h#1 $ -// -// Library: Net -// Package: Messages -// Module: NameValueCollection -// -// Definition of the NameValueCollection class. -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Net_NameValueCollection_INCLUDED -#define Net_NameValueCollection_INCLUDED - - -#include "Poco/Net/Net.h" -#include "Poco/String.h" -#include "Poco/ListMap.h" -#include - - -namespace Poco { -namespace Net { - - -class Net_API NameValueCollection - /// A collection of name-value pairs that are used in - /// various internet protocols like HTTP and SMTP. - /// - /// The name is case-insensitive. - /// - /// There can be more than one name-value pair with the - /// same name. -{ -public: - typedef Poco::ListMap HeaderMap; - typedef HeaderMap::Iterator Iterator; - typedef HeaderMap::ConstIterator ConstIterator; - - NameValueCollection(); - /// Creates an empty NameValueCollection. - - NameValueCollection(const NameValueCollection& nvc); - /// Creates a NameValueCollection by copying another one. - - virtual ~NameValueCollection(); - /// Destroys the NameValueCollection. - - NameValueCollection& operator = (const NameValueCollection& nvc); - /// Assigns the name-value pairs of another NameValueCollection to this one. - - void swap(NameValueCollection& nvc); - /// Swaps the NameValueCollection with another one. - - const std::string& operator [] (const std::string& name) const; - /// Returns the value of the (first) name-value pair with the given name. - /// - /// Throws a NotFoundException if the name-value pair does not exist. - - void set(const std::string& name, const std::string& value); - /// Sets the value of the (first) name-value pair with the given name. - - void add(const std::string& name, const std::string& value); - /// Adds a new name-value pair with the given name and value. - - const std::string& get(const std::string& name) const; - /// Returns the value of the first name-value pair with the given name. - /// - /// Throws a NotFoundException if the name-value pair does not exist. - - const std::string& get(const std::string& name, const std::string& defaultValue) const; - /// Returns the value of the first name-value pair with the given name. - /// If no value with the given name has been found, the defaultValue is returned. - - bool has(const std::string& name) const; - /// Returns true if there is at least one name-value pair - /// with the given name. - - ConstIterator find(const std::string& name) const; - /// Returns an iterator pointing to the first name-value pair - /// with the given name. - - ConstIterator begin() const; - /// Returns an iterator pointing to the begin of - /// the name-value pair collection. - - ConstIterator end() const; - /// Returns an iterator pointing to the end of - /// the name-value pair collection. - - bool empty() const; - /// Returns true iff the header does not have any content. - - std::size_t size() const; - /// Returns the number of name-value pairs in the - /// collection. - - void erase(const std::string& name); - /// Removes all name-value pairs with the given name. - - void clear(); - /// Removes all name-value pairs and their values. - -private: - HeaderMap _map; -}; - - -// -// inlines -// -inline void swap(NameValueCollection& nvc1, NameValueCollection& nvc2) -{ - nvc1.swap(nvc2); -} - - -} } // namespace Poco::Net - - -#endif // Net_NameValueCollection_INCLUDED diff --git a/contrib/libpoco/Net/include/Poco/Net/Net.h b/contrib/libpoco/Net/include/Poco/Net/Net.h deleted file mode 100644 index c9934c4a921..00000000000 --- a/contrib/libpoco/Net/include/Poco/Net/Net.h +++ /dev/null @@ -1,124 +0,0 @@ -// -// Net.h -// -// $Id: //poco/1.4/Net/include/Poco/Net/Net.h#2 $ -// -// Library: Net -// Package: NetCore -// Module: Net -// -// Basic definitions for the Poco Net library. -// This file must be the first file included by every other Net -// header file. -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Net_Net_INCLUDED -#define Net_Net_INCLUDED - - -#include "Poco/Foundation.h" - - -// -// The following block is the standard way of creating macros which make exporting -// from a DLL simpler. All files within this DLL are compiled with the Net_EXPORTS -// symbol defined on the command line. this symbol should not be defined on any project -// that uses this DLL. This way any other project whose source files include this file see -// Net_API functions as being imported from a DLL, wheras this DLL sees symbols -// defined with this macro as being exported. -// -#if defined(_WIN32) && defined(POCO_DLL) - #if defined(Net_EXPORTS) - #define Net_API __declspec(dllexport) - #else - #define Net_API __declspec(dllimport) - #endif -#endif - - -#if !defined(Net_API) - #if !defined(POCO_NO_GCC_API_ATTRIBUTE) && defined (__GNUC__) && (__GNUC__ >= 4) - #define Net_API __attribute__ ((visibility ("default"))) - #else - #define Net_API - #endif -#endif - - -// -// Automatically link Net library. -// -#if defined(_MSC_VER) - #if !defined(POCO_NO_AUTOMATIC_LIBS) && !defined(Net_EXPORTS) - #pragma comment(lib, "PocoNet" POCO_LIB_SUFFIX) - #endif -#endif - - -// Default to enabled IPv6 support if not explicitly disabled -#if !defined(POCO_NET_NO_IPv6) && !defined (POCO_HAVE_IPv6) - #define POCO_HAVE_IPv6 -#elif defined(POCO_NET_NO_IPv6) && defined (POCO_HAVE_IPv6) - #undef POCO_HAVE_IPv6 -#endif // POCO_NET_NO_IPv6, POCO_HAVE_IPv6 - - -namespace Poco { -namespace Net { - - -void Net_API initializeNetwork(); - /// Initialize the network subsystem. - /// (Windows only, no-op elsewhere) - - -void Net_API uninitializeNetwork(); - /// Uninitialize the network subsystem. - /// (Windows only, no-op elsewhere) - - -}} // namespace Poco::Net - - -// -// Automate network initialization (only relevant on Windows). -// - -#if defined(POCO_OS_FAMILY_WINDOWS) && !defined(POCO_NO_AUTOMATIC_LIB_INIT) && !defined(__GNUC__) - -extern "C" const struct Net_API NetworkInitializer pocoNetworkInitializer; - -#if defined(Net_EXPORTS) - #if defined(_WIN64) || defined(_WIN32_WCE) - #define POCO_NET_FORCE_SYMBOL(s) __pragma(comment (linker, "/export:"#s)) - #elif defined(_WIN32) - #define POCO_NET_FORCE_SYMBOL(s) __pragma(comment (linker, "/export:_"#s)) - #endif -#else // !Net_EXPORTS - #if defined(_WIN64) || defined(_WIN32_WCE) - #define POCO_NET_FORCE_SYMBOL(s) __pragma(comment (linker, "/include:"#s)) - #elif defined(_WIN32) - #define POCO_NET_FORCE_SYMBOL(s) __pragma(comment (linker, "/include:_"#s)) - #endif -#endif // Net_EXPORTS - -POCO_NET_FORCE_SYMBOL(pocoNetworkInitializer) - -#endif // POCO_OS_FAMILY_WINDOWS - - -// -// Define POCO_NET_HAS_INTERFACE for platforms that have network interface detection implemented. -// -#if defined(POCO_OS_FAMILY_WINDOWS) || (POCO_OS == POCO_OS_LINUX) || defined(POCO_OS_FAMILY_BSD) || (POCO_OS == POCO_OS_SOLARIS) || (POCO_OS == POCO_OS_QNX) - #define POCO_NET_HAS_INTERFACE -#endif - - -#endif // Net_Net_INCLUDED diff --git a/contrib/libpoco/Net/include/Poco/Net/NetException.h b/contrib/libpoco/Net/include/Poco/Net/NetException.h deleted file mode 100644 index a8e22bf65fc..00000000000 --- a/contrib/libpoco/Net/include/Poco/Net/NetException.h +++ /dev/null @@ -1,61 +0,0 @@ -// -// NetException.h -// -// $Id: //poco/1.4/Net/include/Poco/Net/NetException.h#4 $ -// -// Library: Net -// Package: NetCore -// Module: NetException -// -// Definition of the NetException class. -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Net_NetException_INCLUDED -#define Net_NetException_INCLUDED - - -#include "Poco/Net/Net.h" -#include "Poco/Exception.h" - - -namespace Poco { -namespace Net { - - -POCO_DECLARE_EXCEPTION(Net_API, NetException, Poco::IOException) -POCO_DECLARE_EXCEPTION(Net_API, InvalidAddressException, NetException) -POCO_DECLARE_EXCEPTION(Net_API, InvalidSocketException, NetException) -POCO_DECLARE_EXCEPTION(Net_API, ServiceNotFoundException, NetException) -POCO_DECLARE_EXCEPTION(Net_API, ConnectionAbortedException, NetException) -POCO_DECLARE_EXCEPTION(Net_API, ConnectionResetException, NetException) -POCO_DECLARE_EXCEPTION(Net_API, ConnectionRefusedException, NetException) -POCO_DECLARE_EXCEPTION(Net_API, DNSException, NetException) -POCO_DECLARE_EXCEPTION(Net_API, HostNotFoundException, DNSException) -POCO_DECLARE_EXCEPTION(Net_API, NoAddressFoundException, DNSException) -POCO_DECLARE_EXCEPTION(Net_API, InterfaceNotFoundException, NetException) -POCO_DECLARE_EXCEPTION(Net_API, NoMessageException, NetException) -POCO_DECLARE_EXCEPTION(Net_API, MessageException, NetException) -POCO_DECLARE_EXCEPTION(Net_API, MultipartException, MessageException) -POCO_DECLARE_EXCEPTION(Net_API, HTTPException, NetException) -POCO_DECLARE_EXCEPTION(Net_API, NotAuthenticatedException, HTTPException) -POCO_DECLARE_EXCEPTION(Net_API, UnsupportedRedirectException, HTTPException) -POCO_DECLARE_EXCEPTION(Net_API, FTPException, NetException) -POCO_DECLARE_EXCEPTION(Net_API, SMTPException, NetException) -POCO_DECLARE_EXCEPTION(Net_API, POP3Exception, NetException) -POCO_DECLARE_EXCEPTION(Net_API, ICMPException, NetException) -POCO_DECLARE_EXCEPTION(Net_API, NTPException, NetException) -POCO_DECLARE_EXCEPTION(Net_API, HTMLFormException, NetException) -POCO_DECLARE_EXCEPTION(Net_API, WebSocketException, NetException) -POCO_DECLARE_EXCEPTION(Net_API, UnsupportedFamilyException, NetException) - - -} } // namespace Poco::Net - - -#endif // Net_NetException_INCLUDED diff --git a/contrib/libpoco/Net/include/Poco/Net/NetworkInterface.h b/contrib/libpoco/Net/include/Poco/Net/NetworkInterface.h deleted file mode 100644 index ee4f118c5e7..00000000000 --- a/contrib/libpoco/Net/include/Poco/Net/NetworkInterface.h +++ /dev/null @@ -1,351 +0,0 @@ -// -// NetworkInterface.h -// -// $Id: //poco/1.4/Net/include/Poco/Net/NetworkInterface.h#4 $ -// -// Library: Net -// Package: Sockets -// Module: NetworkInterface -// -// Definition of the NetworkInterface class. -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Net_NetworkInterface_INCLUDED -#define Net_NetworkInterface_INCLUDED - - -#include "Poco/Net/Net.h" - - -#ifdef POCO_NET_HAS_INTERFACE - - -#include "Poco/Net/IPAddress.h" -#include "Poco/Mutex.h" -#include "Poco/Tuple.h" -#include - - -namespace Poco { -namespace Net { - - -class NetworkInterfaceImpl; - - -class Net_API NetworkInterface - /// This class represents a network interface. - /// - /// NetworkInterface is used with MulticastSocket to specify - /// multicast interfaces for sending and receiving multicast - /// messages. - /// - /// The class also provides static member functions for - /// enumerating or searching network interfaces and their - /// respective configuration values. - /// - /// On Windows, detection capabilities vary depending on the - /// OS version/service pack. Although the best effort is made - /// not to attempt access to non-existent features through a - /// combination of compile/runtime checks, when running binaries - /// compiled on a newer version of the OS on an older one - /// problems may occur; if possible, it is best to run - /// binaries on the OS version where they were compiled. - /// This particularly applies to OS versions older than Vista - /// and XP. -{ -public: - typedef std::vector List; - typedef List NetworkInterfaceList;//@deprecated - typedef std::map Map; - typedef Poco::Tuple AddressTuple; - typedef std::vector AddressList; - typedef AddressList::iterator AddressIterator; - typedef AddressList::const_iterator ConstAddressIterator; - typedef std::vector MACAddress; - - enum AddressType - { - IP_ADDRESS, - SUBNET_MASK, - BROADCAST_ADDRESS - }; - - enum Type - { - NI_TYPE_ETHERNET_CSMACD, - NI_TYPE_ISO88025_TOKENRING, - NI_TYPE_FRAMERELAY, - NI_TYPE_PPP, - NI_TYPE_SOFTWARE_LOOPBACK, - NI_TYPE_ATM, - NI_TYPE_IEEE80211, - NI_TYPE_TUNNEL, - NI_TYPE_IEEE1394, - NI_TYPE_OTHER - }; - - enum IPVersion - { - IPv4_ONLY, /// Return interfaces with IPv4 address only - IPv6_ONLY, /// Return interfaces with IPv6 address only - IPv4_OR_IPv6 /// Return interfaces with IPv4 or IPv6 address - }; - - static const unsigned NO_INDEX = ~0; -#if defined(POCO_OS_FAMILY_WINDOWS) - static const char MAC_SEPARATOR = '-'; -#else - static const char MAC_SEPARATOR = ':'; -#endif - - NetworkInterface(unsigned index = NO_INDEX); - /// Creates a NetworkInterface representing the - /// default interface. - /// - /// The name is empty, the IP address is the wildcard - /// address and the index is max value of unsigned integer. - - NetworkInterface(const NetworkInterface& interfc); - /// Creates the NetworkInterface by copying another one. - - ~NetworkInterface(); - /// Destroys the NetworkInterface. - - NetworkInterface& operator = (const NetworkInterface& interfc); - /// Assigns another NetworkInterface. - - bool operator < (const NetworkInterface& other) const; - /// Operatorr less-than. - - bool operator == (const NetworkInterface& other) const; - /// Operator equal. Compares interface indices. - - void swap(NetworkInterface& other); - /// Swaps the NetworkInterface with another one. - - unsigned index() const; - /// Returns the interface OS index. - - const std::string& name() const; - /// Returns the interface name. - - const std::string& displayName() const; - /// Returns the interface display name. - /// - /// On Windows platforms, this is currently the network adapter - /// name. This may change to the "friendly name" of the network - /// connection in a future version, however. - /// - /// On other platforms this is the same as name(). - - const std::string& adapterName() const; - /// Returns the interface adapter name. - /// - /// On Windows platforms, this is the network adapter LUID. - /// The adapter name is used by some Windows Net APIs like Dhcp. - /// - /// On other platforms this is the same as name(). - - const IPAddress& firstAddress(IPAddress::Family family) const; - /// Returns the first IP address bound to the interface. - /// Throws NotFoundException if the address family is not - /// configured on the interface. - - void firstAddress(IPAddress& addr, IPAddress::Family family = IPAddress::IPv4) const; - /// Returns the first IP address bound to the interface. - /// If the address family is not configured on the interface, - /// the address returned in addr will be unspecified (wildcard). - - const IPAddress& address(unsigned index = 0) const; - /// Returns the IP address bound to the interface at index position. - - void addAddress(const IPAddress& address); - /// Adds address to the interface. - - void addAddress(const IPAddress& address, const IPAddress& subnetMask, const IPAddress& broadcastAddress); - /// Adds address to the interface. - - const AddressList& addressList() const; - /// Returns the list of IP addresses bound to the interface. - - const IPAddress& subnetMask(unsigned index = 0) const; - /// Returns the subnet mask for this network interface. - - const IPAddress& broadcastAddress(unsigned index = 0) const; - /// Returns the broadcast address for this network interface. - - const IPAddress& destAddress(unsigned index = 0) const; - /// Returns the IPv4 point-to-point destiation address for this network interface. - - const MACAddress& macAddress() const; - /// Returns MAC (Media Access Control) address for the interface. - - unsigned mtu() const; - /// Returns the MTU for this interface. - - NetworkInterface::Type type() const; - /// returns the MIB IfType of the interface. - - bool supportsIP() const; - /// Returns true if the interface supports IP. - - bool supportsIPv4() const; - /// Returns true if the interface supports IPv4. - - bool supportsIPv6() const; - /// Returns true if the interface supports IPv6. - - bool supportsBroadcast() const; - /// Returns true if the interface supports broadcast. - - bool supportsMulticast() const; - /// Returns true if the interface supports multicast. - - bool isLoopback() const; - /// Returns true if the interface is loopback. - - bool isPointToPoint() const; - /// Returns true if the interface is point-to-point. - - bool isRunning() const; - /// Returns true if the interface is running. - - bool isUp() const; - /// Returns true if the interface is up. - - static NetworkInterface forName(const std::string& name, bool requireIPv6 = false); - /// Returns the NetworkInterface for the given name. - /// - /// If requireIPv6 is false, an IPv4 interface is returned. - /// Otherwise, an IPv6 interface is returned. - /// - /// Throws an InterfaceNotFoundException if an interface - /// with the give name does not exist. - - static NetworkInterface forName(const std::string& name, IPVersion ipVersion); - /// Returns the NetworkInterface for the given name. - /// - /// The ipVersion argument can be used to specify whether - /// an IPv4 (IPv4_ONLY) or IPv6 (IPv6_ONLY) interface is required, - /// or whether the caller does not care (IPv4_OR_IPv6). - - static NetworkInterface forAddress(const IPAddress& address); - /// Returns the NetworkInterface for the given IP address. - /// - /// Throws an InterfaceNotFoundException if an interface - /// with the give address does not exist. - - static NetworkInterface forIndex(unsigned index); - /// Returns the NetworkInterface for the given interface index. - /// - /// Throws an InterfaceNotFoundException if an interface - /// with the given index does not exist (or IPv6 is not - /// available). - - static List list(bool ipOnly = true, bool upOnly = true); - /// Returns a list with all network interfaces - /// on the system. - /// - /// If ipOnly is true, only interfaces supporting IP - /// are returned. Otherwise, all system network interfaces - /// are returned. - /// - /// If upOnly is true, only interfaces being up are returned. - /// Otherwise, both interfaces being up and down are returned. - /// - /// If there are multiple addresses bound to one interface, - /// multiple NetworkInterface entries are listed for - /// the same interface. - - static Map map(bool ipOnly = true, bool upOnly = true); - /// Returns a map containing system network interfaces - /// Map is keyed by interface system indices. - /// - /// If ipOnly is true, only interfaces supporting IP - /// are returned. Otherwise, all system network interfaces - /// are returned. - /// - /// If upOnly is true, only interfaces being up are returned. - /// Otherwise, both interfaces being up and down are returned. - /// - /// If there are multiple addresses bound to one interface, - /// they are contained within the NetworkInterface (second) - /// member of the pair. - -protected: - NetworkInterface(const std::string& name, const std::string& displayName, const std::string& adapterName, const IPAddress& address, unsigned index, MACAddress* pMACAddress = 0); - /// Creates the NetworkInterface. - - NetworkInterface(const std::string& name, const std::string& displayName, const std::string& adapterName, unsigned index, MACAddress* pMACAddress = 0); - /// Creates the NetworkInterface. - - NetworkInterface(const std::string& name, const IPAddress& address, unsigned index, MACAddress* pMACAddress = 0); - /// Creates the NetworkInterface. - - NetworkInterface(const std::string& name, - const std::string& displayName, - const std::string& adapterName, - const IPAddress& address, - const IPAddress& subnetMask, - const IPAddress& broadcastAddress, - unsigned index, - MACAddress* pMACAddress = 0); - /// Creates the NetworkInterface. - - NetworkInterface(const std::string& name, - const IPAddress& address, - const IPAddress& subnetMask, - const IPAddress& broadcastAddress, - unsigned index, - MACAddress* pMACAddress = 0); - /// Creates the NetworkInterface. - - IPAddress interfaceNameToAddress(const std::string& interfaceName) const; - /// Determines the IPAddress bound to the interface with the given name. - - unsigned interfaceNameToIndex(const std::string& interfaceName) const; - /// Determines the interface index of the interface with the given name. - - NetworkInterfaceImpl& impl() { return *_pImpl; }; - -private: - NetworkInterfaceImpl* _pImpl; - - static Poco::FastMutex _mutex; -}; - - -/// -/// inlines -/// - - -inline bool NetworkInterface::operator < (const NetworkInterface& other) const -{ - return this->index() < other.index(); -} - - -inline bool NetworkInterface::operator == (const NetworkInterface& other) const -{ - return this->index() == other.index(); -} - - -} } // namespace Poco::Net - - -Net_API std::ostream& operator<<(std::ostream& os, const Poco::Net::NetworkInterface::MACAddress& mac); - - -#endif // POCO_NET_HAS_INTERFACE - - -#endif // Net_NetworkInterface_INCLUDED diff --git a/contrib/libpoco/Net/include/Poco/Net/NullPartHandler.h b/contrib/libpoco/Net/include/Poco/Net/NullPartHandler.h deleted file mode 100644 index 41f44025c21..00000000000 --- a/contrib/libpoco/Net/include/Poco/Net/NullPartHandler.h +++ /dev/null @@ -1,49 +0,0 @@ -// -// NullPartHandler.h -// -// $Id: //poco/1.4/Net/include/Poco/Net/NullPartHandler.h#1 $ -// -// Library: Net -// Package: Messages -// Module: NullPartHandler -// -// Definition of the NullPartHandler class. -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Net_NullPartHandler_INCLUDED -#define Net_NullPartHandler_INCLUDED - - -#include "Poco/Net/Net.h" -#include "Poco/Net/PartHandler.h" - - -namespace Poco { -namespace Net { - - -class Net_API NullPartHandler: public PartHandler - /// A very special PartHandler that simply discards all data. -{ -public: - NullPartHandler(); - /// Creates the NullPartHandler. - - ~NullPartHandler(); - /// Destroys the NullPartHandler. - - void handlePart(const MessageHeader& header, std::istream& stream); - /// Reads and discards all data from the stream. -}; - - -} } // namespace Poco::Net - - -#endif // Net_NullPartHandler_INCLUDED diff --git a/contrib/libpoco/Net/include/Poco/Net/OAuth10Credentials.h b/contrib/libpoco/Net/include/Poco/Net/OAuth10Credentials.h deleted file mode 100644 index a7b59b63000..00000000000 --- a/contrib/libpoco/Net/include/Poco/Net/OAuth10Credentials.h +++ /dev/null @@ -1,276 +0,0 @@ -// -// OAuth10Credentials.h -// -// $Id$ -// -// Library: Net -// Package: OAuth -// Module: OAuth10Credentials -// -// Definition of the OAuth10Credentials class. -// -// Copyright (c) 2014, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Net_OAuth10Credentials_INCLUDED -#define Net_OAuth10Credentials_INCLUDED - - -#include "Poco/Net/Net.h" -#include "Poco/URI.h" - - -namespace Poco { -namespace Net { - - -class HTTPRequest; -class HTMLForm; - - -class Net_API OAuth10Credentials - /// This class implements OAuth 1.0A authentication for HTTP requests, - /// according to RFC 5849. - /// - /// Only PLAINTEXT and HMAC-SHA1 signature methods are - /// supported. The RSA-SHA1 signature method is not supported. - /// - /// The OAuth10Credentials can be used to sign a client request, as - /// well as to verify the signature of a request on the server. - /// - /// To sign a client request, using a known consumer (client) key, consumer (client) secret, - /// OAuth token and token secret: - /// - /// 1. Create an OAuth10Credentials object using all four credentials, either using - /// the four argument constructor, or by using the default constructor and setting - /// the credentials using the setter methods. - /// 2. Create a URI containing the full request URI. - /// 3. Create an appropriate HTTPRequest object. - /// 4. Optionally, create a HTMLForm object containing additional parameters to sign. - /// 5. Sign the request by calling authenticate(). This will add an OAuth - /// Authorization header to the request. - /// 6. Send the request using a HTTPClientSession. - /// - /// To request the OAuth request token from a server, using only the consumer (client) key - /// and consumer (client) secret: - /// - /// 1. Create an OAuth10Credentials object using the two consumer credentials, either using - /// the two argument constructor, or by using the default constructor and setting - /// the credentials using the setter methods. - /// 2. Specify the callback URI using setCallback(). - /// 3. Create a URI containing the full request URI to obtain the token. - /// 4. Create an appropriate HTTPRequest object. - /// 5. Sign the request by calling authenticate(). This will add an OAuth - /// Authorization header to the request. - /// 6. Send the request using a HTTPClientSession. - /// 7. The response will contain the request token and request token secret. - /// These can be extracted from the response body using a HTMLForm object. - /// - /// Requesting the access token and secret (temporary credentials) from the server - /// is analogous to signing a client request using consumer key, consumer secret, - /// request token and request token secret. - /// The server response will contain the access token and access token secret, - /// which can again be extracted from the response body using a HTMLForm object. - /// - /// To verify a request on the server: - /// - /// 1. Create an OAuth10Credentials object using the constructor taking a - /// HTTPRequest object. This will extract the consumer key and token (if - /// provided). - /// 2. Provide the consumer secret and token secret (if required) matching the - /// consumer key and token to the OAuth10Credentials object using the - /// setter methods. - /// 3. Create an URI object containing the full request URI. - /// 4. Call verify() to verify the signature. - /// 5. If verification was successful, and the request was a request for - /// a request (temporary) token, call getCallback() to - /// obtain the callback URI provided by the client. -{ -public: - enum SignatureMethod - /// OAuth 1.0A Signature Method. - { - SIGN_PLAINTEXT, /// OAuth 1.0A PLAINTEXT signature method - SIGN_HMAC_SHA1 /// OAuth 1.0A HMAC-SHA1 signature method - }; - - OAuth10Credentials(); - /// Creates an empty OAuth10Credentials object. - - OAuth10Credentials(const std::string& consumerKey, const std::string& consumerSecret); - /// Creates an OAuth10Credentials object with the given consumer key and consumer secret. - /// - /// The token and tokenSecret will be left empty. - - OAuth10Credentials(const std::string& consumerKey, const std::string& consumerSecret, const std::string& token, const std::string& tokenSecret); - /// Creates an OAuth10Credentials object with the given consumer key and - /// consumer secret, as well as token and token secret. - - explicit OAuth10Credentials(const HTTPRequest& request); - /// Creates an OAuth10Credentials object from a HTTPRequest object. - /// - /// Extracts consumer key and token (if available) from the Authorization header. - /// - /// Throws a NotAuthenticatedException if the request does - /// not contain OAuth 1.0 credentials. - - ~OAuth10Credentials(); - /// Destroys the OAuth10Credentials. - - void setConsumerKey(const std::string& consumerKey); - /// Sets the consumer key. - - const std::string& getConsumerKey() const; - /// Returns the consumer key. - - void setConsumerSecret(const std::string& consumerSecret); - /// Sets the consumer secret. - - const std::string& getConsumerSecret() const; - /// Returns the consumer secret. - - void setToken(const std::string& token); - /// Sets the token. - - const std::string& getToken() const; - /// Returns the token. - - void setTokenSecret(const std::string& tokenSecret); - /// Sets the token. - - const std::string& getTokenSecret() const; - /// Returns the token secret. - - void setRealm(const std::string& realm); - /// Sets the optional realm to be included in the Authorization header. - - const std::string& getRealm() const; - /// Returns the optional realm to be included in the Authorization header. - - void setCallback(const std::string& uri); - /// Sets the callback URI. - - const std::string& getCallback() const; - /// Returns the callback URI. - - void authenticate(HTTPRequest& request, const Poco::URI& uri, SignatureMethod method = SIGN_HMAC_SHA1); - /// Adds an OAuth 1.0A Authentication header to the given request, using - /// the given signature method. - - void authenticate(HTTPRequest& request, const Poco::URI& uri, const Poco::Net::HTMLForm& params, SignatureMethod method = SIGN_HMAC_SHA1); - /// Adds an OAuth 1.0A Authentication header to the given request, using - /// the given signature method. - - bool verify(const HTTPRequest& request, const Poco::URI& uri); - /// Verifies the signature of the given request. - /// - /// The consumer key, consumer secret, token and token secret must have been set. - /// - /// Returns true if the signature is valid, otherwise false. - /// - /// Throws a NotAuthenticatedException if the request does not contain OAuth - /// credentials, or in case of an unsupported OAuth version or signature method. - - bool verify(const HTTPRequest& request, const Poco::URI& uri, const Poco::Net::HTMLForm& params); - /// Verifies the signature of the given request. - /// - /// The consumer key, consumer secret, token and token secret must have been set. - /// - /// Returns true if the signature is valid, otherwise false. - /// - /// Throws a NotAuthenticatedException if the request does not contain OAuth - /// credentials, or in case of an unsupported OAuth version or signature method. - - void nonceAndTimestampForTesting(const std::string& nonce, const std::string& timestamp); - /// Sets the nonce and timestamp to a wellknown value. - /// - /// For use by testsuite only, to test the signature - /// algorithm with wellknown inputs. - /// - /// In normal operation, the nonce is a random value - /// computed by createNonce() and the timestamp is taken - /// from the system time. - - static const std::string SCHEME; - -protected: - void signPlaintext(Poco::Net::HTTPRequest& request) const; - /// Signs the given HTTP request according to OAuth 1.0A PLAINTEXT signature method. - - void signHMACSHA1(Poco::Net::HTTPRequest& request, const std::string& uri, const Poco::Net::HTMLForm& params) const; - /// Signs the given HTTP request according to OAuth 1.0A HMAC-SHA1 signature method. - - std::string createNonce() const; - /// Creates a nonce, which is basically a Base64-encoded 32 character random - /// string, with non-alphanumeric characters removed. - - std::string createSignature(const Poco::Net::HTTPRequest& request, const std::string& uri, const Poco::Net::HTMLForm& params, const std::string& nonce, const std::string& timestamp) const; - /// Creates a OAuth signature for the given request and its parameters, according - /// to . - - static std::string percentEncode(const std::string& str); - /// Percent-encodes the given string according to Twitter API's rules, - /// given in . - -private: - OAuth10Credentials(const OAuth10Credentials&); - OAuth10Credentials& operator = (const OAuth10Credentials&); - - std::string _consumerKey; - std::string _consumerSecret; - std::string _token; - std::string _tokenSecret; - std::string _callback; - std::string _realm; - std::string _nonce; - std::string _timestamp; -}; - - -// -// inlines -// -inline const std::string& OAuth10Credentials::getConsumerKey() const -{ - return _consumerKey; -} - - -inline const std::string& OAuth10Credentials::getConsumerSecret() const -{ - return _consumerSecret; -} - - -inline const std::string& OAuth10Credentials::getToken() const -{ - return _token; -} - - -inline const std::string& OAuth10Credentials::getTokenSecret() const -{ - return _tokenSecret; -} - - -inline const std::string& OAuth10Credentials::getRealm() const -{ - return _realm; -} - - -inline const std::string& OAuth10Credentials::getCallback() const -{ - return _callback; -} - - -} } // namespace Poco::Net - - -#endif // Net_OAuth10Credentials_INCLUDED diff --git a/contrib/libpoco/Net/include/Poco/Net/OAuth20Credentials.h b/contrib/libpoco/Net/include/Poco/Net/OAuth20Credentials.h deleted file mode 100644 index e622cca1edd..00000000000 --- a/contrib/libpoco/Net/include/Poco/Net/OAuth20Credentials.h +++ /dev/null @@ -1,134 +0,0 @@ -// -// OAuth20Credentials.h -// -// $Id$ -// -// Library: Net -// Package: OAuth -// Module: OAuth20Credentials -// -// Definition of the OAuth20Credentials class. -// -// Copyright (c) 2014, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Net_OAuth20Credentials_INCLUDED -#define Net_OAuth20Credentials_INCLUDED - - -#include "Poco/Net/Net.h" - - -namespace Poco { -namespace Net { - - -class HTTPRequest; - - -class Net_API OAuth20Credentials - /// This class implements OAuth 2.0 authentication for HTTP requests, - /// via Bearer tokens in the Authorization header, - /// according to RFC 6749 and RFC 6750. - /// - /// To add an Authorization header containing a bearer token - /// to a HTTPRequest object, create an OAuth20Credentials object - /// with the bearer token and call authenticate(). - /// - /// The bearer token can also be extracted from a HTTPRequest - /// by creating the OAuth20Credentials object with a HTTPRequest - /// object containing a "Bearer" Authorization header and - /// calling getBearerToken(). - /// - /// The authorization header scheme can be changed from - /// "Bearer" to a custom value. For example, GitHub uses - /// the "token" scheme. -{ -public: - OAuth20Credentials(); - /// Creates an empty OAuth20Credentials object. - - explicit OAuth20Credentials(const std::string& bearerToken); - /// Creates an OAuth20Credentials object with the given bearer token. - - OAuth20Credentials(const std::string& bearerToken, const std::string& scheme); - /// Creates an OAuth20Credentials object with the given bearer token - /// and authorization scheme, which overrides the default scheme ("Bearer"). - /// - /// This is useful for services like GitHub, which use "token" as scheme. - - explicit OAuth20Credentials(const HTTPRequest& request); - /// Creates an OAuth20Credentials object from a HTTPRequest object. - /// - /// Extracts bearer token from the Authorization header, which - /// must use the "Bearer" authorization scheme. - /// - /// Throws a NotAuthenticatedException if the request does - /// not contain a bearer token in the Authorization header. - - OAuth20Credentials(const HTTPRequest& request, const std::string& scheme); - /// Creates an OAuth20Credentials object from a HTTPRequest object. - /// - /// Extracts bearer token from the Authorization header, which must - /// use the given authorization scheme. - /// - /// Throws a NotAuthenticatedException if the request does - /// not contain a bearer token in the Authorization header. - - ~OAuth20Credentials(); - /// Destroys the HTTPCredentials. - - void setBearerToken(const std::string& bearerToken); - /// Sets the bearer token. - - const std::string& getBearerToken() const; - /// Returns the bearer token. - - void setScheme(const std::string& scheme); - /// Sets the Authorization header scheme. - - const std::string& getScheme() const; - /// Returns the Authorization header scheme. - - void authenticate(HTTPRequest& request); - /// Adds an Authorization header containing the bearer token to - /// the HTTPRequest. - - static const std::string SCHEME; - -protected: - void extractBearerToken(const HTTPRequest& request); - /// Extracts the bearer token from the HTTPRequest. - -private: - OAuth20Credentials(const OAuth20Credentials&); - OAuth20Credentials& operator = (const OAuth20Credentials&); - - std::string _bearerToken; - std::string _scheme; -}; - - -// -// inlines -// -inline const std::string& OAuth20Credentials::getBearerToken() const -{ - return _bearerToken; -} - - -inline const std::string& OAuth20Credentials::getScheme() const -{ - return _scheme; -} - - -} } // namespace Poco::Net - - -#endif // Net_OAuth20Credentials_INCLUDED diff --git a/contrib/libpoco/Net/include/Poco/Net/POP3ClientSession.h b/contrib/libpoco/Net/include/Poco/Net/POP3ClientSession.h deleted file mode 100644 index d98dc34928c..00000000000 --- a/contrib/libpoco/Net/include/Poco/Net/POP3ClientSession.h +++ /dev/null @@ -1,187 +0,0 @@ -// -// POP3ClientSession.h -// -// $Id: //poco/1.4/Net/include/Poco/Net/POP3ClientSession.h#1 $ -// -// Library: Net -// Package: Mail -// Module: POP3ClientSession -// -// Definition of the POP3ClientSession class. -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Net_POP3ClientSession_INCLUDED -#define Net_POP3ClientSession_INCLUDED - - -#include "Poco/Net/Net.h" -#include "Poco/Net/DialogSocket.h" -#include "Poco/Timespan.h" -#include -#include - - -namespace Poco { -namespace Net { - - -class MessageHeader; -class MailMessage; -class PartHandler; - - -class Net_API POP3ClientSession - /// This class implements an Post Office Protocol - /// Version 3 (POP3, RFC 1939) - /// client for receiving e-mail messages. -{ -public: - enum - { - POP3_PORT = 110 - }; - - struct MessageInfo - /// Information returned by listMessages(). - { - int id; - int size; - }; - - typedef std::vector MessageInfoVec; - - explicit POP3ClientSession(const StreamSocket& socket); - /// Creates the POP3ClientSession using - /// the given socket, which must be connected - /// to a POP3 server. - - POP3ClientSession(const std::string& host, Poco::UInt16 port = POP3_PORT); - /// Creates the POP3ClientSession using a socket connected - /// to the given host and port. - - virtual ~POP3ClientSession(); - /// Destroys the SMTPClientSession. - - void setTimeout(const Poco::Timespan& timeout); - /// Sets the timeout for socket read operations. - - Poco::Timespan getTimeout() const; - /// Returns the timeout for socket read operations. - - void login(const std::string& username, const std::string& password); - /// Logs in to the POP3 server by sending a USER command - /// followed by a PASS command. - /// - /// Throws a POP3Exception in case of a POP3-specific error, or a - /// NetException in case of a general network communication failure. - - void close(); - /// Sends a QUIT command and closes the connection to the server. - /// - /// Throws a POP3Exception in case of a POP3-specific error, or a - /// NetException in case of a general network communication failure. - - int messageCount(); - /// Sends a STAT command to determine the number of messages - /// available on the server and returns that number. - /// - /// Throws a POP3Exception in case of a POP3-specific error, or a - /// NetException in case of a general network communication failure. - - void listMessages(MessageInfoVec& messages); - /// Fills the given vector with the ids and sizes of all - /// messages available on the server. - /// - /// Throws a POP3Exception in case of a POP3-specific error, or a - /// NetException in case of a general network communication failure. - - void retrieveMessage(int id, MailMessage& message); - /// Retrieves the message with the given id from the server and - /// stores the raw message content in the message's - /// content string, available with message.getContent(). - /// - /// Throws a POP3Exception in case of a POP3-specific error, or a - /// NetException in case of a general network communication failure. - - void retrieveMessage(int id, MailMessage& message, PartHandler& handler); - /// Retrieves the message with the given id from the server and - /// stores it in message. - /// - /// If the message has multiple parts, the parts - /// are reported to the PartHandler. If the message - /// is not a multi-part message, the content is stored - /// in a string available by calling message.getContent(). - /// - /// Throws a POP3Exception in case of a POP3-specific error, or a - /// NetException in case of a general network communication failure. - - void retrieveMessage(int id, std::ostream& ostr); - /// Retrieves the raw message with the given id from the - /// server and copies it to the given output stream. - /// - /// Throws a POP3Exception in case of a POP3-specific error, or a - /// NetException in case of a general network communication failure. - - void retrieveHeader(int id, MessageHeader& header); - /// Retrieves the message header of the message with the - /// given id and stores it in header. - /// - /// For this to work, the server must support the TOP command. - /// - /// Throws a POP3Exception in case of a POP3-specific error, or a - /// NetException in case of a general network communication failure. - - void deleteMessage(int id); - /// Marks the message with the given ID for deletion. The message - /// will be deleted when the connection to the server is - /// closed by calling close(). - /// - /// Throws a POP3Exception in case of a POP3-specific error, or a - /// NetException in case of a general network communication failure. - - bool sendCommand(const std::string& command, std::string& response); - /// Sends the given command verbatim to the server - /// and waits for a response. - /// - /// Returns true if the response is positive, false otherwise. - /// - /// Throws a POP3Exception in case of a POP3-specific error, or a - /// NetException in case of a general network communication failure. - - bool sendCommand(const std::string& command, const std::string& arg, std::string& response); - /// Sends the given command verbatim to the server - /// and waits for a response. - /// - /// Returns true if the response is positive, false otherwise. - /// - /// Throws a POP3Exception in case of a POP3-specific error, or a - /// NetException in case of a general network communication failure. - - bool sendCommand(const std::string& command, const std::string& arg1, const std::string& arg2, std::string& response); - /// Sends the given command verbatim to the server - /// and waits for a response. - /// - /// Returns true if the response is positive, false otherwise. - /// - /// Throws a POP3Exception in case of a POP3-specific error, or a - /// NetException in case of a general network communication failure. - -protected: - static bool isPositive(const std::string& response); - -private: - DialogSocket _socket; - bool _isOpen; -}; - - -} } // namespace Poco::Net - - -#endif // Net_POP3ClientSession_INCLUDED diff --git a/contrib/libpoco/Net/include/Poco/Net/ParallelSocketAcceptor.h b/contrib/libpoco/Net/include/Poco/Net/ParallelSocketAcceptor.h deleted file mode 100644 index 71533cc7608..00000000000 --- a/contrib/libpoco/Net/include/Poco/Net/ParallelSocketAcceptor.h +++ /dev/null @@ -1,235 +0,0 @@ -// -// ParallelSocketAcceptor.h -// -// $Id: //poco/1.4/Net/include/Poco/Net/ParallelSocketAcceptor.h#1 $ -// -// Library: Net -// Package: Reactor -// Module: ParallelSocketAcceptor -// -// Definition of the ParallelSocketAcceptor class. -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Net_ParallelSocketAcceptor_INCLUDED -#define Net_ParallelSocketAcceptor_INCLUDED - - -#include "Poco/Net/ParallelSocketReactor.h" -#include "Poco/Net/StreamSocket.h" -#include "Poco/Net/ServerSocket.h" -#include "Poco/Environment.h" -#include "Poco/NObserver.h" -#include "Poco/SharedPtr.h" -#include - - -using Poco::Net::Socket; -using Poco::Net::SocketReactor; -using Poco::Net::ServerSocket; -using Poco::Net::StreamSocket; -using Poco::NObserver; -using Poco::AutoPtr; - - -namespace Poco { -namespace Net { - - -template -class ParallelSocketAcceptor - /// This class implements the Acceptor part of the Acceptor-Connector design pattern. - /// Only the difference from single-threaded version is documented here, For full - /// description see Poco::Net::SocketAcceptor documentation. - /// - /// This is a multi-threaded version of SocketAcceptor, it differs from the - /// single-threaded version in number of reactors (defaulting to number of processors) - /// that can be specified at construction time and is rotated in a round-robin fashion - /// by event handler. See ParallelSocketAcceptor::onAccept and - /// ParallelSocketAcceptor::createServiceHandler documentation and implementation for - /// details. -{ -public: - typedef Poco::Net::ParallelSocketReactor ParallelReactor; - - explicit ParallelSocketAcceptor(ServerSocket& socket, - unsigned threads = Poco::Environment::processorCount()): - _socket(socket), - _pReactor(0), - _threads(threads), - _next(0) - /// Creates a ParallelSocketAcceptor using the given ServerSocket, - /// sets number of threads and populates the reactors vector. - { - init(); - } - - ParallelSocketAcceptor(ServerSocket& socket, - SocketReactor& reactor, - unsigned threads = Poco::Environment::processorCount()): - _socket(socket), - _pReactor(&reactor), - _threads(threads), - _next(0) - /// Creates a ParallelSocketAcceptor using the given ServerSocket, sets the - /// number of threads, populates the reactors vector and registers itself - /// with the given SocketReactor. - { - init(); - _pReactor->addEventHandler(_socket, - Poco::Observer(*this, &ParallelSocketAcceptor::onAccept)); - } - - virtual ~ParallelSocketAcceptor() - /// Destroys the ParallelSocketAcceptor. - { - try - { - if (_pReactor) - { - _pReactor->removeEventHandler(_socket, - Poco::Observer(*this, &ParallelSocketAcceptor::onAccept)); - } - } - catch (...) - { - poco_unexpected(); - } - } - - void setReactor(SocketReactor& reactor) - /// Sets the reactor for this acceptor. - { - _pReactor = &reactor; - if (!_pReactor->hasEventHandler(_socket, - Poco::Observer(*this, &ParallelSocketAcceptor::onAccept))) - { - registerAcceptor(reactor); - } - } - - virtual void registerAcceptor(SocketReactor& reactor) - /// Registers the ParallelSocketAcceptor with a SocketReactor. - /// - /// A subclass can override this function to e.g. - /// register an event handler for timeout event. - /// - /// The overriding method must either call the base class - /// implementation or register the accept handler on its own. - { - if (_pReactor) - throw Poco::InvalidAccessException("Acceptor already registered."); - - _pReactor = &reactor; - _pReactor->addEventHandler(_socket, - Poco::Observer(*this, &ParallelSocketAcceptor::onAccept)); - } - - virtual void unregisterAcceptor() - /// Unregisters the ParallelSocketAcceptor. - /// - /// A subclass can override this function to e.g. - /// unregister its event handler for a timeout event. - /// - /// The overriding method must either call the base class - /// implementation or unregister the accept handler on its own. - { - if (_pReactor) - { - _pReactor->removeEventHandler(_socket, - Poco::Observer(*this, &ParallelSocketAcceptor::onAccept)); - } - } - - void onAccept(ReadableNotification* pNotification) - /// Accepts connection and creates event handler. - { - pNotification->release(); - StreamSocket sock = _socket.acceptConnection(); - _pReactor->wakeUp(); - createServiceHandler(sock); - } - -protected: - virtual ServiceHandler* createServiceHandler(StreamSocket& socket) - /// Create and initialize a new ServiceHandler instance. - /// - /// Subclasses can override this method. - { - std::size_t next = _next++; - if (_next == _reactors.size()) _next = 0; - _reactors[next]->wakeUp(); - return new ServiceHandler(socket, *_reactors[next]); - } - - SocketReactor* reactor() - /// Returns a pointer to the SocketReactor where - /// this SocketAcceptor is registered. - /// - /// The pointer may be null. - { - return _pReactor; - } - - Socket& socket() - /// Returns a reference to the SocketAcceptor's socket. - { - return _socket; - } - - void init() - /// Populates the reactors vector. - { - poco_assert (_threads > 0); - - for (unsigned i = 0; i < _threads; ++i) - _reactors.push_back(new ParallelReactor); - } - - typedef std::vector ReactorVec; - - ReactorVec& reactors() - /// Returns reference to vector of reactors. - { - return _reactors; - } - - SocketReactor* reactor(std::size_t idx) - /// Returns reference to the reactor at position idx. - { - return _reactors.at(idx).get(); - } - - std::size_t& next() - /// Returns reference to the next reactor index. - { - return _next; - } - -private: - ParallelSocketAcceptor(); - ParallelSocketAcceptor(const ParallelSocketAcceptor&); - ParallelSocketAcceptor& operator = (const ParallelSocketAcceptor&); - - ServerSocket _socket; - SocketReactor* _pReactor; - unsigned _threads; - ReactorVec _reactors; - std::size_t _next; -}; - - -} } // namespace Poco::Net - - -#endif // Net_ParallelSocketAcceptor_INCLUDED diff --git a/contrib/libpoco/Net/include/Poco/Net/ParallelSocketReactor.h b/contrib/libpoco/Net/include/Poco/Net/ParallelSocketReactor.h deleted file mode 100644 index f17bddf70f8..00000000000 --- a/contrib/libpoco/Net/include/Poco/Net/ParallelSocketReactor.h +++ /dev/null @@ -1,92 +0,0 @@ -// -// ParallelSocketReactor.h -// -// $Id: //poco/1.4/Net/include/Poco/Net/ParallelSocketReactor.h#1 $ -// -// Library: Net -// Package: Reactor -// Module: ParallelSocketReactor -// -// Definition of the ParallelSocketReactor class. -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Net_ParallelSocketReactor_INCLUDED -#define Net_ParallelSocketReactor_INCLUDED - - -#include "Poco/Net/SocketReactor.h" -#include "Poco/Net/SocketNotification.h" -#include "Poco/Net/StreamSocket.h" -#include "Poco/Net/ServerSocket.h" -#include "Poco/NObserver.h" -#include "Poco/Thread.h" -#include "Poco/SharedPtr.h" - - -using Poco::Net::Socket; -using Poco::Net::SocketReactor; -using Poco::Net::ReadableNotification; -using Poco::Net::ShutdownNotification; -using Poco::Net::ServerSocket; -using Poco::Net::StreamSocket; -using Poco::NObserver; -using Poco::AutoPtr; -using Poco::Thread; - - -namespace Poco { -namespace Net { - - -template -class ParallelSocketReactor: public SR -{ -public: - typedef Poco::SharedPtr Ptr; - - ParallelSocketReactor() - { - _thread.start(*this); - } - - ParallelSocketReactor(const Poco::Timespan& timeout): - SR(timeout) - { - _thread.start(*this); - } - - ~ParallelSocketReactor() - { - try - { - this->stop(); - _thread.join(); - } - catch (...) - { - poco_unexpected(); - } - } - -protected: - void onIdle() - { - SR::onIdle(); - Poco::Thread::yield(); - } - -private: - Poco::Thread _thread; -}; - - -} } // namespace Poco::Net - - -#endif // Net_ParallelSocketReactor_INCLUDED diff --git a/contrib/libpoco/Net/include/Poco/Net/PartHandler.h b/contrib/libpoco/Net/include/Poco/Net/PartHandler.h deleted file mode 100644 index 3884505a7ab..00000000000 --- a/contrib/libpoco/Net/include/Poco/Net/PartHandler.h +++ /dev/null @@ -1,70 +0,0 @@ -// -// PartHandler.h -// -// $Id: //poco/1.4/Net/include/Poco/Net/PartHandler.h#1 $ -// -// Library: Net -// Package: Messages -// Module: PartHandler -// -// Definition of the PartHandler class. -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Net_PartHandler_INCLUDED -#define Net_PartHandler_INCLUDED - - -#include "Poco/Net/Net.h" -#include - - -namespace Poco { -namespace Net { - - -class MessageHeader; - - -class Net_API PartHandler - /// The base class for all part or attachment handlers. - /// - /// Part handlers are used for handling email parts and - /// attachments in MIME multipart messages, as well as file - /// uploads via HTML forms. - /// - /// Subclasses must override handlePart(). -{ -public: - virtual void handlePart(const MessageHeader& header, std::istream& stream) = 0; - /// Called for every part encountered during the processing - /// of an email message or an uploaded HTML form. - /// - /// Information about the part can be extracted from - /// the given message header. What information can be obtained - /// from header depends on the kind of part. - /// - /// The content of the part can be read from stream. - -protected: - PartHandler(); - /// Creates the PartHandler. - - virtual ~PartHandler(); - /// Destroys the PartHandler. - -private: - PartHandler(const PartHandler&); - PartHandler& operator = (const PartHandler&); -}; - - -} } // namespace Poco::Net - - -#endif // Net_PartHandler_INCLUDED diff --git a/contrib/libpoco/Net/include/Poco/Net/PartSource.h b/contrib/libpoco/Net/include/Poco/Net/PartSource.h deleted file mode 100644 index d662bf7efea..00000000000 --- a/contrib/libpoco/Net/include/Poco/Net/PartSource.h +++ /dev/null @@ -1,111 +0,0 @@ -// -// PartSource.h -// -// $Id: //poco/1.4/Net/include/Poco/Net/PartSource.h#2 $ -// -// Library: Net -// Package: Messages -// Module: PartSource -// -// Definition of the PartSource class. -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Net_PartSource_INCLUDED -#define Net_PartSource_INCLUDED - - -#include "Poco/Net/Net.h" -#include "Poco/Net/MessageHeader.h" -#include - - -namespace Poco { -namespace Net { - - -class Net_API PartSource - /// This abstract class is used for adding parts or attachments - /// to mail messages, as well as for uploading files as part of a HTML form. -{ -public: - virtual std::istream& stream() = 0; - /// Returns an input stream for reading the - /// part data. - /// - /// Subclasses must override this method. - - virtual const std::string& filename() const; - /// Returns the filename for the part or attachment. - /// - /// May be overridded by subclasses. The default - /// implementation returns an empty string. - - const std::string& mediaType() const; - /// Returns the MIME media type for this part or attachment. - - MessageHeader& headers(); - /// Returns a MessageHeader containing additional header - /// fields for the part. - - const MessageHeader& headers() const; - /// Returns a MessageHeader containing additional header - /// fields for the part. - - virtual std::streamsize getContentLength() const; - /// Returns the content length for this part - /// which may be UNKNOWN_CONTENT_LENGTH if - /// not available. - - virtual ~PartSource(); - /// Destroys the PartSource. - - static const int UNKNOWN_CONTENT_LENGTH; -protected: - PartSource(); - /// Creates the PartSource, using - /// the application/octet-stream MIME type. - - PartSource(const std::string& mediaType); - /// Creates the PartSource, using the - /// given MIME type. - -private: - PartSource(const PartSource&); - PartSource& operator = (const PartSource&); - - std::string _mediaType; - MessageHeader _headers; -}; - - -// -// inlines -// -inline const std::string& PartSource::mediaType() const -{ - return _mediaType; -} - - -inline MessageHeader& PartSource::headers() -{ - return _headers; -} - - -inline const MessageHeader& PartSource::headers() const -{ - return _headers; -} - - -} } // namespace Poco::Net - - -#endif // Net_PartSource_INCLUDED diff --git a/contrib/libpoco/Net/include/Poco/Net/PartStore.h b/contrib/libpoco/Net/include/Poco/Net/PartStore.h deleted file mode 100644 index a401436d218..00000000000 --- a/contrib/libpoco/Net/include/Poco/Net/PartStore.h +++ /dev/null @@ -1,109 +0,0 @@ -// -// PartStore.h -// -// $Id: //poco/1.4/Net/include/Poco/Net/PartStore.h#1 $ -// -// Library: Net -// Package: Messages -// Module: PartStore -// -// Definition of the PartStore class. -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Net_PartStore_INCLUDED -#define Net_PartStore_INCLUDED - - -#include "Poco/Net/Net.h" -#include "Poco/Net/PartSource.h" -#include "Poco/FileStream.h" - - -namespace Poco { -namespace Net { - - -class Net_API PartStore: public PartSource - /// A parent class for part stores storing message parts. -{ -public: - PartStore(const std::string& mediaType); - /// Creates the PartStore for the given MIME type. - - ~PartStore(); - /// Destroys the PartFileStore. - -private: - PartStore(); -}; - - -class Net_API FilePartStore: public PartStore - /// An implementation of PartSource for persisting - /// parts (usually email attachment files) to the file system. -{ -public: - FilePartStore(const std::string& content, const std::string& mediaType, const std::string& filename = ""); - /// Creates the FilePartStore for the given MIME type. - /// For security purposes, attachment filename is NOT used to save file to the file system. - /// A unique temporary file name is used to persist the file. - /// The given filename parameter is the message part (attachment) filename (see filename()) only. - /// - /// Throws an exception if the file cannot be opened. - - ~FilePartStore(); - /// Destroys the FilePartStore. - - std::istream& stream(); - /// Returns a file input stream for the given file. - - const std::string& filename() const; - /// Returns the filename portion of the path. - /// This is the name under which the file is known - /// to the user of this class (typically, MailMessage - /// class). The real name of the file as saved - /// to the filesystem can be obtained by calling - /// path() member function. - - const std::string& path() const; - /// Returns the full path to the file as saved - /// to the file system. For security reasons, - /// file is not saved under the real file name - /// (as specified by the user). - -private: - std::string _filename; - std::string _path; - Poco::FileStream _fstr; -}; - - -class PartStoreFactory - /// Parent factory class for part stores creation. -{ -public: - virtual PartSource* createPartStore(const std::string& content, const std::string& mediaType, const std::string& filename = "") = 0; - virtual ~PartStoreFactory() {}; -}; - - -class FilePartStoreFactory: public PartStoreFactory -{ -public: - PartSource* createPartStore(const std::string& content, const std::string& mediaType, const std::string& filename = "") - { - return new FilePartStore(content, mediaType, filename); - } -}; - - -} } // namespace Poco::Net - - -#endif // Net_PartStore_INCLUDED diff --git a/contrib/libpoco/Net/include/Poco/Net/QuotedPrintableDecoder.h b/contrib/libpoco/Net/include/Poco/Net/QuotedPrintableDecoder.h deleted file mode 100644 index ae946a27bbd..00000000000 --- a/contrib/libpoco/Net/include/Poco/Net/QuotedPrintableDecoder.h +++ /dev/null @@ -1,88 +0,0 @@ -// -// QuotedPrintableDecoder.h -// -// $Id: //poco/1.4/Net/include/Poco/Net/QuotedPrintableDecoder.h#2 $ -// -// Library: Net -// Package: Messages -// Module: QuotedPrintableDecoder -// -// Definition of the QuotedPrintableDecoder class. -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Net_QuotedPrintableDecoder_INCLUDED -#define Net_QuotedPrintableDecoder_INCLUDED - - -#include "Poco/Net/Net.h" -#include "Poco/UnbufferedStreamBuf.h" -#include - - -namespace Poco { -namespace Net { - - -class Net_API QuotedPrintableDecoderBuf: public Poco::UnbufferedStreamBuf - /// This streambuf decodes all quoted-printable (see RFC 2045) - /// encoded data read from the istream connected to it. - /// - /// Note: For performance reasons, the characters - /// are read directly from the given istream's - /// underlying streambuf, so the state - /// of the istream will not reflect that of - /// its streambuf. -{ -public: - QuotedPrintableDecoderBuf(std::istream& istr); - ~QuotedPrintableDecoderBuf(); - -private: - int readFromDevice(); - - std::streambuf& _buf; -}; - - -class Net_API QuotedPrintableDecoderIOS: public virtual std::ios - /// The base class for QuotedPrintableDecoder. - /// - /// This class is needed to ensure the correct initialization - /// order of the stream buffer and base classes. -{ -public: - QuotedPrintableDecoderIOS(std::istream& istr); - ~QuotedPrintableDecoderIOS(); - QuotedPrintableDecoderBuf* rdbuf(); - -protected: - QuotedPrintableDecoderBuf _buf; -}; - - -class Net_API QuotedPrintableDecoder: public QuotedPrintableDecoderIOS, public std::istream - /// This istream decodes all quoted-printable (see RFC 2045) - /// encoded data read from the istream connected to it. - /// - /// Note: For performance reasons, the characters - /// are read directly from the given istream's - /// underlying streambuf, so the state - /// of the istream will not reflect that of - /// its streambuf. -{ -public: - QuotedPrintableDecoder(std::istream& istr); - ~QuotedPrintableDecoder(); -}; - - -} } // namespace Poco::Net - - -#endif // Net_QuotedPrintableDecoder_INCLUDED diff --git a/contrib/libpoco/Net/include/Poco/Net/QuotedPrintableEncoder.h b/contrib/libpoco/Net/include/Poco/Net/QuotedPrintableEncoder.h deleted file mode 100644 index 62bef7dbdc0..00000000000 --- a/contrib/libpoco/Net/include/Poco/Net/QuotedPrintableEncoder.h +++ /dev/null @@ -1,87 +0,0 @@ -// -// QuotedPrintableEncoder.h -// -// $Id: //poco/1.4/Net/include/Poco/Net/QuotedPrintableEncoder.h#1 $ -// -// Library: Net -// Package: Messages -// Module: QuotedPrintableEncoder -// -// Definition of the QuotedPrintableEncoder class. -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Net_QuotedPrintableEncoder_INCLUDED -#define Net_QuotedPrintableEncoder_INCLUDED - - -#include "Poco/Net/Net.h" -#include "Poco/UnbufferedStreamBuf.h" -#include - - -namespace Poco { -namespace Net { - - -class Net_API QuotedPrintableEncoderBuf: public Poco::UnbufferedStreamBuf - /// This streambuf encodes all data written - /// to it in quoted-printable encoding (see RFC 2045) - /// and forwards it to a connected ostream. -{ -public: - QuotedPrintableEncoderBuf(std::ostream& ostr); - ~QuotedPrintableEncoderBuf(); - int close(); - -private: - int writeToDevice(char c); - void writeEncoded(char c); - void writeRaw(char c); - - int _pending; - int _lineLength; - std::ostream& _ostr; -}; - - -class Net_API QuotedPrintableEncoderIOS: public virtual std::ios - /// The base class for QuotedPrintableEncoder. - /// - /// This class is needed to ensure the correct initialization - /// order of the stream buffer and base classes. -{ -public: - QuotedPrintableEncoderIOS(std::ostream& ostr); - ~QuotedPrintableEncoderIOS(); - int close(); - QuotedPrintableEncoderBuf* rdbuf(); - -protected: - QuotedPrintableEncoderBuf _buf; -}; - - -class Net_API QuotedPrintableEncoder: public QuotedPrintableEncoderIOS, public std::ostream - /// This ostream encodes all data - /// written to it in quoted-printable encoding - /// (see RFC 2045) and forwards it to a connected ostream. - /// Always call close() when done - /// writing data, to ensure proper - /// completion of the encoding operation. -{ -public: - QuotedPrintableEncoder(std::ostream& ostr); - ~QuotedPrintableEncoder(); -}; - - -} } // namespace Poco::Net - - -#endif // Net_QuotedPrintableEncoder_INCLUDED diff --git a/contrib/libpoco/Net/include/Poco/Net/RawSocket.h b/contrib/libpoco/Net/include/Poco/Net/RawSocket.h deleted file mode 100644 index 0476884336c..00000000000 --- a/contrib/libpoco/Net/include/Poco/Net/RawSocket.h +++ /dev/null @@ -1,149 +0,0 @@ -// -// RawSocket.h -// -// $Id: //poco/1.4/Net/include/Poco/Net/RawSocket.h#1 $ -// -// Library: Net -// Package: Sockets -// Module: RawSocket -// -// Definition of the RawSocket class. -// -// Copyright (c) 2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Net_RawSocket_INCLUDED -#define Net_RawSocket_INCLUDED - - -#include "Poco/Net/Net.h" -#include "Poco/Net/Socket.h" - - -namespace Poco { -namespace Net { - - -class Net_API RawSocket: public Socket - /// This class provides an interface to a - /// raw IP socket. -{ -public: - RawSocket(); - /// Creates an unconnected IPv4 raw socket. - - RawSocket(IPAddress::Family family, int proto = IPPROTO_RAW); - /// Creates an unconnected raw socket. - /// - /// The socket will be created for the - /// given address family. - - RawSocket(const SocketAddress& address, bool reuseAddress = false); - /// Creates a raw socket and binds it - /// to the given address. - /// - /// Depending on the address family, the socket - /// will be either an IPv4 or an IPv6 socket. - - RawSocket(const Socket& socket); - /// Creates the RawSocket with the SocketImpl - /// from another socket. The SocketImpl must be - /// a RawSocketImpl, otherwise an InvalidArgumentException - /// will be thrown. - - ~RawSocket(); - /// Destroys the RawSocket. - - RawSocket& operator = (const Socket& socket); - /// Assignment operator. - /// - /// Releases the socket's SocketImpl and - /// attaches the SocketImpl from the other socket and - /// increments the reference count of the SocketImpl. - - void connect(const SocketAddress& address); - /// Restricts incoming and outgoing - /// packets to the specified address. - /// - /// Calls to connect() cannot come before calls to bind(). - - void bind(const SocketAddress& address, bool reuseAddress = false); - /// 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. - /// - /// Calls to connect() cannot come before calls to bind(). - - int sendBytes(const void* buffer, int length, int flags = 0); - /// Sends the contents of the given buffer through - /// the socket. - /// - /// Returns the number of bytes sent, which may be - /// less than the number of bytes specified. - - int receiveBytes(void* buffer, int length, int flags = 0); - /// Receives data from the socket and stores it - /// in buffer. Up to length bytes are received. - /// - /// Returns the number of bytes received. - - int sendTo(const void* buffer, int length, const SocketAddress& address, int flags = 0); - /// Sends the contents of the given buffer through - /// the socket to the given address. - /// - /// Returns the number of bytes sent, which may be - /// less than the number of bytes specified. - - int receiveFrom(void* buffer, int length, SocketAddress& address, int flags = 0); - /// Receives data from the socket and stores it - /// in buffer. Up to length bytes are received. - /// Stores the address of the sender in address. - /// - /// Returns the number of bytes received. - - void setBroadcast(bool flag); - /// Sets the value of the SO_BROADCAST socket option. - /// - /// Setting this flag allows sending datagrams to - /// the broadcast address. - - bool getBroadcast() const; - /// Returns the value of the SO_BROADCAST socket option. - -protected: - RawSocket(SocketImpl* pImpl); - /// Creates the Socket and attaches the given SocketImpl. - /// The socket takes owership of the SocketImpl. - /// - /// The SocketImpl must be a StreamSocketImpl, otherwise - /// an InvalidArgumentException will be thrown. -}; - - -// -// inlines -// -inline void RawSocket::setBroadcast(bool flag) -{ - impl()->setBroadcast(flag); -} - - -inline bool RawSocket::getBroadcast() const -{ - return impl()->getBroadcast(); -} - - -} } // namespace Poco::Net - - -#endif // Net_RawSocket_INCLUDED diff --git a/contrib/libpoco/Net/include/Poco/Net/RawSocketImpl.h b/contrib/libpoco/Net/include/Poco/Net/RawSocketImpl.h deleted file mode 100644 index 8bf056913ca..00000000000 --- a/contrib/libpoco/Net/include/Poco/Net/RawSocketImpl.h +++ /dev/null @@ -1,58 +0,0 @@ -// -// RawSocketImpl.h -// -// $Id: //poco/1.4/Net/include/Poco/Net/RawSocketImpl.h#1 $ -// -// Library: Net -// Package: Sockets -// Module: RawSocketImpl -// -// Definition of the RawSocketImpl class. -// -// Copyright (c) 2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Net_RawSocketImpl_INCLUDED -#define Net_RawSocketImpl_INCLUDED - - -#include "Poco/Net/Net.h" -#include "Poco/Net/SocketImpl.h" - - -namespace Poco { -namespace Net { - - -class Net_API RawSocketImpl: public SocketImpl - /// This class implements a raw socket. -{ -public: - RawSocketImpl(); - /// Creates an unconnected IPv4 raw socket with IPPROTO_RAW. - - RawSocketImpl(IPAddress::Family family, int proto = IPPROTO_RAW); - /// Creates an unconnected raw socket. - /// - /// The socket will be created for the - /// given address family. - - RawSocketImpl(poco_socket_t sockfd); - /// Creates a RawSocketImpl using the given native socket. - -protected: - void init(int af); - void init2(int af, int proto); - - ~RawSocketImpl(); -}; - - -} } // namespace Poco::Net - - -#endif // Net_RawSocketImpl_INCLUDED diff --git a/contrib/libpoco/Net/include/Poco/Net/RemoteSyslogChannel.h b/contrib/libpoco/Net/include/Poco/Net/RemoteSyslogChannel.h deleted file mode 100644 index 2efb325e855..00000000000 --- a/contrib/libpoco/Net/include/Poco/Net/RemoteSyslogChannel.h +++ /dev/null @@ -1,152 +0,0 @@ -// -// RemoteSyslogChannel.h -// -// $Id: //poco/1.4/Net/include/Poco/Net/RemoteSyslogChannel.h#2 $ -// -// Library: Net -// Package: Logging -// Module: RemoteSyslogChannel -// -// Definition of the RemoteSyslogChannel class. -// -// Copyright (c) 2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Net_RemoteSyslogChannel_INCLUDED -#define Net_RemoteSyslogChannel_INCLUDED - - -#include "Poco/Net/Net.h" -#include "Poco/Channel.h" -#include "Poco/Mutex.h" -#include "Poco/Net/DatagramSocket.h" -#include "Poco/Net/SocketAddress.h" - - -namespace Poco { -namespace Net { - - -class Net_API RemoteSyslogChannel: public Poco::Channel - /// This Channel implements remote syslog logging over UDP according - /// to RFC 5424 "The Syslog Protocol" - /// and RFC 5426 "Transmission of syslog messages over UDP". - /// - /// In addition, RemoteSyslogListener also supports the "old" BSD syslog - /// protocol, as described in RFC 3164. -{ -public: - static const std::string BSD_TIMEFORMAT; - static const std::string SYSLOG_TIMEFORMAT; - - enum Severity - { - SYSLOG_EMERGENCY = 0, /// Emergency: system is unusable - SYSLOG_ALERT = 1, /// Alert: action must be taken immediately - SYSLOG_CRITICAL = 2, /// Critical: critical conditions - SYSLOG_ERROR = 3, /// Error: error conditions - SYSLOG_WARNING = 4, /// Warning: warning conditions - SYSLOG_NOTICE = 5, /// Notice: normal but significant condition - SYSLOG_INFORMATIONAL = 6, /// Informational: informational messages - SYSLOG_DEBUG = 7 /// Debug: debug-level messages - }; - - enum Facility - { - SYSLOG_KERN = ( 0<<3), /// kernel messages - SYSLOG_USER = ( 1<<3), /// random user-level messages - SYSLOG_MAIL = ( 2<<3), /// mail system - SYSLOG_DAEMON = ( 3<<3), /// system daemons - SYSLOG_AUTH = ( 4<<3), /// security/authorization messages - SYSLOG_SYSLOG = ( 5<<3), /// messages generated internally by syslogd - SYSLOG_LPR = ( 6<<3), /// line printer subsystem - SYSLOG_NEWS = ( 7<<3), /// network news subsystem - SYSLOG_UUCP = ( 8<<3), /// UUCP subsystem - SYSLOG_CRON = ( 9<<3), /// clock daemon - SYSLOG_AUTHPRIV = (10<<3), /// security/authorization messages (private) - SYSLOG_FTP = (11<<3), /// ftp daemon - SYSLOG_NTP = (12<<3), /// ntp subsystem - SYSLOG_LOGAUDIT = (13<<3), /// log audit - SYSLOG_LOGALERT = (14<<3), /// log alert - SYSLOG_CLOCK = (15<<3), /// clock deamon - SYSLOG_LOCAL0 = (16<<3), /// reserved for local use - SYSLOG_LOCAL1 = (17<<3), /// reserved for local use - SYSLOG_LOCAL2 = (18<<3), /// reserved for local use - SYSLOG_LOCAL3 = (19<<3), /// reserved for local use - SYSLOG_LOCAL4 = (20<<3), /// reserved for local use - SYSLOG_LOCAL5 = (21<<3), /// reserved for local use - SYSLOG_LOCAL6 = (22<<3), /// reserved for local use - SYSLOG_LOCAL7 = (23<<3) /// reserved for local use - }; - - enum - { - SYSLOG_PORT = 514 - }; - - RemoteSyslogChannel(); - /// Creates a RemoteSyslogChannel. - - RemoteSyslogChannel(const std::string& address, const std::string& name, int facility = SYSLOG_USER, bool bsdFormat = false); - /// Creates a RemoteSyslogChannel with the given target address, name, and facility. - /// If bsdFormat is true, messages are formatted according to RFC 3164. - - void open(); - /// Opens the RemoteSyslogChannel. - - void close(); - /// Closes the RemoteSyslogChannel. - - void log(const Message& msg); - /// Sends the message's text to the syslog service. - - void setProperty(const std::string& name, const std::string& value); - /// Sets the property with the given value. - /// - /// The following properties are supported: - /// * name: The name used to identify the source of log messages. - /// * facility: The facility added to each log message. See the Facility enumeration for a list of supported values. - /// The LOG_ prefix can be omitted and values are case insensitive (e.g. a facility value "mail" is recognized as SYSLOG_MAIL) - /// * format: "bsd"/"rfc3164" (RFC 3164 format) or "new"/"rfc5424" (default) - /// * loghost: The target IP address or host name where log messages are sent. Optionally, a port number (separated - /// by a colon) can also be specified. - /// * host: (optional) Host name included in syslog messages. If not specified, the host's real domain name or - /// IP address will be used. - - std::string getProperty(const std::string& name) const; - /// Returns the value of the property with the given name. - - static void registerChannel(); - /// Registers the channel with the global LoggingFactory. - - static const std::string PROP_NAME; - static const std::string PROP_FACILITY; - static const std::string PROP_FORMAT; - static const std::string PROP_LOGHOST; - static const std::string PROP_HOST; - -protected: - ~RemoteSyslogChannel(); - static int getPrio(const Message& msg); - -private: - std::string _logHost; - std::string _name; - std::string _host; - int _facility; - bool _bsdFormat; - DatagramSocket _socket; - SocketAddress _socketAddress; - bool _open; - mutable Poco::FastMutex _mutex; -}; - - -} } // namespace Poco::Net - - -#endif // Net_RemoteSyslogChannel_INCLUDED diff --git a/contrib/libpoco/Net/include/Poco/Net/RemoteSyslogListener.h b/contrib/libpoco/Net/include/Poco/Net/RemoteSyslogListener.h deleted file mode 100644 index e7be3c5a1aa..00000000000 --- a/contrib/libpoco/Net/include/Poco/Net/RemoteSyslogListener.h +++ /dev/null @@ -1,121 +0,0 @@ -// -// RemoteSyslogListener.h -// -// $Id: //poco/1.4/Net/include/Poco/Net/RemoteSyslogListener.h#5 $ -// -// Library: Net -// Package: Logging -// Module: RemoteSyslogListener -// -// Definition of the RemoteSyslogListener class. -// -// Copyright (c) 2007-2011, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Net_RemoteSyslogListener_INCLUDED -#define Net_RemoteSyslogListener_INCLUDED - - -#include "Poco/Net/Net.h" -#include "Poco/Net/SocketAddress.h" -#include "Poco/ThreadPool.h" -#include "Poco/SplitterChannel.h" -#include "Poco/NotificationQueue.h" - - -namespace Poco { -namespace Net { - - -class RemoteUDPListener; -class SyslogParser; - - -class Net_API RemoteSyslogListener: public Poco::SplitterChannel - /// RemoteSyslogListener implements listening for syslog messages - /// sent over UDP, according to RFC 5424 "The Syslog Protocol" - /// and RFC 5426 "Transmission of syslog messages over UDP". - /// - /// In addition, RemoteSyslogListener also supports the "old" BSD syslog - /// protocol, as described in RFC 3164. - /// - /// The RemoteSyslogListener is a subclass of Poco::SplitterChannel. - /// Every received log message is sent to the channels registered - /// with addChannel() or the "channel" property. - /// - /// Poco::Message objects created by RemoteSyslogListener will have - /// the following named parameters: - /// - addr: IP address of the host/interface sending the message. - /// - host: host name; only for "new" syslog messages. - /// - app: application name; only for "new" syslog messages. -{ -public: - RemoteSyslogListener(); - /// Creates the RemoteSyslogListener. - - RemoteSyslogListener(Poco::UInt16 port); - /// Creates the RemoteSyslogListener, listening on the given port number. - - RemoteSyslogListener(Poco::UInt16 port, int threads); - /// Creates the RemoteSyslogListener, listening on the given port number - /// and using the number of threads for message processing. - - void setProperty(const std::string& name, const std::string& value); - /// Sets the property with the given value. - /// - /// The following properties are supported: - /// * port: The UDP port number where to listen for UDP packets - /// containing syslog messages. If 0 is specified, does not - /// listen for UDP messages. - /// * threads: The number of parser threads processing - /// received syslog messages. Defaults to 1. A maximum - /// of 16 threads is supported. - - std::string getProperty(const std::string& name) const; - /// Returns the value of the property with the given name. - - void open(); - /// Starts the listener. - - void close(); - /// Stops the listener. - - void processMessage(const std::string& messageText); - /// Parses a single line of text containing a syslog message - /// and sends it down the filter chain. - - void enqueueMessage(const std::string& messageText, const Poco::Net::SocketAddress& senderAddress); - /// Enqueues a single line of text containing a syslog message - /// for asynchronous processing by a parser thread. - - static void registerChannel(); - /// Registers the channel with the global LoggingFactory. - - static const std::string PROP_PORT; - static const std::string PROP_THREADS; - - static const std::string LOG_PROP_APP; - static const std::string LOG_PROP_HOST; - -protected: - ~RemoteSyslogListener(); - /// Destroys the RemoteSyslogListener. - -private: - RemoteUDPListener* _pListener; - SyslogParser* _pParser; - Poco::ThreadPool _threadPool; - Poco::NotificationQueue _queue; - Poco::UInt16 _port; - int _threads; -}; - - -} } // namespace Poco::Net - - -#endif // Net_RemoteSyslogListener_INCLUDED diff --git a/contrib/libpoco/Net/include/Poco/Net/SMTPChannel.h b/contrib/libpoco/Net/include/Poco/Net/SMTPChannel.h deleted file mode 100644 index 9ef959f02b0..00000000000 --- a/contrib/libpoco/Net/include/Poco/Net/SMTPChannel.h +++ /dev/null @@ -1,110 +0,0 @@ -// -// SMTPChannel.h -// -// $Id: //poco/svn/Net/include/Poco/Net/SMTPChannel.h#1 $ -// -// Library: Net -// Package: Logging -// Module: SMTPChannel -// -// Definition of the SMTPChannel class. -// -// Copyright (c) 2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Net_SMTPChannel_INCLUDED -#define Net_SMTPChannel_INCLUDED - - -#include "Poco/Net/Net.h" -#include "Poco/Channel.h" -#include "Poco/String.h" - - -namespace Poco { -namespace Net { - - -class Net_API SMTPChannel: public Poco::Channel - /// This Channel implements SMTP (email) logging. -{ -public: - SMTPChannel(); - /// Creates a SMTPChannel. - - SMTPChannel(const std::string& mailhost, const std::string& sender, const std::string& recipient); - /// Creates a SMTPChannel with the given target mailhost, sender, and recipient. - - void open(); - /// Opens the SMTPChannel. - - void close(); - /// Closes the SMTPChannel. - - void log(const Message& msg); - /// Sends the message's text to the recipient. - - void setProperty(const std::string& name, const std::string& value); - /// Sets the property with the given value. - /// - /// The following properties are supported: - /// * mailhost: The SMTP server. Default is "localhost". - /// * sender: The sender address. - /// * recipient: The recipient address. - /// * local: If true, local time is used. Default is true. - /// * attachment: Filename of the file to attach. - /// * type: Content type of the file to attach. - /// * delete: Boolean value indicating whether to delete - /// the attachment file after sending. - /// * throw: Boolean value indicating whether to throw - /// exception upon failure. - - std::string getProperty(const std::string& name) const; - /// Returns the value of the property with the given name. - - static void registerChannel(); - /// Registers the channel with the global LoggingFactory. - - static const std::string PROP_MAILHOST; - static const std::string PROP_SENDER; - static const std::string PROP_RECIPIENT; - static const std::string PROP_LOCAL; - static const std::string PROP_ATTACHMENT; - static const std::string PROP_TYPE; - static const std::string PROP_DELETE; - static const std::string PROP_THROW; - -protected: - ~SMTPChannel(); - -private: - bool isTrue(const std::string& value) const; - - std::string _mailHost; - std::string _sender; - std::string _recipient; - bool _local; - std::string _attachment; - std::string _type; - bool _delete; - bool _throw; -}; - - -inline bool SMTPChannel::isTrue(const std::string& value) const -{ - return ((0 == icompare(value, "true")) || - (0 == icompare(value, "t")) || - (0 == icompare(value, "yes")) || - (0 == icompare(value, "y"))); -} - - -} } // namespace Poco::Net - - -#endif // Net_SMTPChannel_INCLUDED diff --git a/contrib/libpoco/Net/include/Poco/Net/SMTPClientSession.h b/contrib/libpoco/Net/include/Poco/Net/SMTPClientSession.h deleted file mode 100644 index bf7b9650e01..00000000000 --- a/contrib/libpoco/Net/include/Poco/Net/SMTPClientSession.h +++ /dev/null @@ -1,234 +0,0 @@ -// -// SMTPClientSession.h -// -// $Id: //poco/1.4/Net/include/Poco/Net/SMTPClientSession.h#1 $ -// -// Library: Net -// Package: Mail -// Module: SMTPClientSession -// -// Definition of the SMTPClientSession class. -// -// Copyright (c) 2005-2008, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Net_SMTPClientSession_INCLUDED -#define Net_SMTPClientSession_INCLUDED - - -#include "Poco/Net/Net.h" -#include "Poco/Net/DialogSocket.h" -#include "Poco/DigestEngine.h" -#include "Poco/Timespan.h" - - -namespace Poco { -namespace Net { - - -class MailMessage; - - -class Net_API SMTPClientSession - /// This class implements an Simple Mail - /// Transfer Procotol (SMTP, RFC 2821) - /// client for sending e-mail messages. -{ -public: - typedef std::vector Recipients; - - enum - { - SMTP_PORT = 25 - }; - - enum LoginMethod - { - AUTH_NONE, - AUTH_CRAM_MD5, - AUTH_CRAM_SHA1, - AUTH_LOGIN, - AUTH_PLAIN - }; - - explicit SMTPClientSession(const StreamSocket& socket); - /// Creates the SMTPClientSession using - /// the given socket, which must be connected - /// to a SMTP server. - - SMTPClientSession(const std::string& host, Poco::UInt16 port = SMTP_PORT); - /// Creates the SMTPClientSession using a socket connected - /// to the given host and port. - - virtual ~SMTPClientSession(); - /// Destroys the SMTPClientSession. - - void setTimeout(const Poco::Timespan& timeout); - /// Sets the timeout for socket read operations. - - Poco::Timespan getTimeout() const; - /// Returns the timeout for socket read operations. - - void login(const std::string& hostname); - /// Greets the SMTP server by sending a EHLO command - /// with the given hostname as argument. - /// - /// If the server does not understand the EHLO command, - /// a HELO command is sent instead. - /// - /// Throws a SMTPException in case of a SMTP-specific error, or a - /// NetException in case of a general network communication failure. - - void login(); - /// Calls login(hostname) with the current host name. - - void login(const std::string& hostname, LoginMethod loginMethod, const std::string& username, const std::string& password); - /// Logs in to the SMTP server using the given authentication method and the given - /// credentials. - - void login(LoginMethod loginMethod, const std::string& username, const std::string& password); - /// Logs in to the SMTP server using the given authentication method and the given - /// credentials. - - void open(); - /// Reads the initial response from the SMTP server. - /// - /// Usually called implicitly through login(), but can - /// also be called explicitly to implement different forms - /// of SMTP authentication. - /// - /// Does nothing if called more than once. - - void close(); - /// Sends a QUIT command and closes the connection to the server. - /// - /// Throws a SMTPException in case of a SMTP-specific error, or a - /// NetException in case of a general network communication failure. - - void sendMessage(const MailMessage& message); - /// Sends the given mail message by sending a MAIL FROM command, - /// a RCPT TO command for every recipient, and a DATA command with - /// the message headers and content. Using this function results in - /// RCPT TO commands list generated from the recipient list supplied - /// with the message itself. - /// - /// Throws a SMTPException in case of a SMTP-specific error, or a - /// NetException in case of a general network communication failure. - - void sendMessage(const MailMessage& message, const Recipients& recipients); - /// Sends the given mail message by sending a MAIL FROM command, - /// a RCPT TO command for every recipient, and a DATA command with - /// the message headers and content. Using this function results in - /// message header being generated from the supplied recipients list. - /// - /// Throws a SMTPException in case of a SMTP-specific error, or a - /// NetException in case of a general network communication failure. - - void sendMessage(std::istream& istr); - /// Sends the mail message from the supplied stream. Content of the stream - /// is copied without any checking. Only the completion status is checked and, - /// if not valid, SMTPExcpetion is thrown. - - int sendCommand(const std::string& command, std::string& response); - /// Sends the given command verbatim to the server - /// and waits for a response. - /// - /// Throws a SMTPException in case of a SMTP-specific error, or a - /// NetException in case of a general network communication failure. - - int sendCommand(const std::string& command, const std::string& arg, std::string& response); - /// Sends the given command verbatim to the server - /// and waits for a response. - /// - /// Throws a SMTPException in case of a SMTP-specific error, or a - /// NetException in case of a general network communication failure. - - void sendAddresses(const std::string& from, const Recipients& recipients); - /// Sends the message preamble by sending a MAIL FROM command, - /// and a RCPT TO command for every recipient. - /// - /// Throws a SMTPException in case of a SMTP-specific error, or a - /// NetException in case of a general network communication failure. - - void sendData(); - /// Sends the message preamble by sending a DATA command. - /// - /// Throws a SMTPException in case of a SMTP-specific error, or a - /// NetException in case of a general network communication failure. - -protected: - enum StatusClass - { - SMTP_POSITIVE_COMPLETION = 2, - SMTP_POSITIVE_INTERMEDIATE = 3, - SMTP_TRANSIENT_NEGATIVE = 4, - SMTP_PERMANENT_NEGATIVE = 5 - }; - enum - { - DEFAULT_TIMEOUT = 30000000 // 30 seconds default timeout for socket operations - }; - - static bool isPositiveCompletion(int status); - static bool isPositiveIntermediate(int status); - static bool isTransientNegative(int status); - static bool isPermanentNegative(int status); - - void login(const std::string& hostname, std::string& response); - void loginUsingCRAMMD5(const std::string& username, const std::string& password); - void loginUsingCRAMSHA1(const std::string& username, const std::string& password); - void loginUsingCRAM(const std::string& username, const std::string& method, Poco::DigestEngine& hmac); - void loginUsingLogin(const std::string& username, const std::string& password); - void loginUsingPlain(const std::string& username, const std::string& password); - DialogSocket& socket(); - -private: - void sendCommands(const MailMessage& message, const Recipients* pRecipients = 0); - void transportMessage(const MailMessage& message); - - DialogSocket _socket; - bool _isOpen; -}; - - -// -// inlines -// -inline bool SMTPClientSession::isPositiveCompletion(int status) -{ - return status/100 == SMTP_POSITIVE_COMPLETION; -} - - -inline bool SMTPClientSession::isPositiveIntermediate(int status) -{ - return status/100 == SMTP_POSITIVE_INTERMEDIATE; -} - - -inline bool SMTPClientSession::isTransientNegative(int status) -{ - return status/100 == SMTP_TRANSIENT_NEGATIVE; -} - - -inline bool SMTPClientSession::isPermanentNegative(int status) -{ - return status/100 == SMTP_PERMANENT_NEGATIVE; -} - - -inline DialogSocket& SMTPClientSession::socket() -{ - return _socket; -} - - -} } // namespace Poco::Net - - -#endif // Net_SMTPClientSession_INCLUDED diff --git a/contrib/libpoco/Net/include/Poco/Net/ServerSocket.h b/contrib/libpoco/Net/include/Poco/Net/ServerSocket.h deleted file mode 100644 index c06447d7141..00000000000 --- a/contrib/libpoco/Net/include/Poco/Net/ServerSocket.h +++ /dev/null @@ -1,169 +0,0 @@ -// -// ServerSocket.h -// -// $Id: //poco/1.4/Net/include/Poco/Net/ServerSocket.h#2 $ -// -// Library: Net -// Package: Sockets -// Module: ServerSocket -// -// Definition of the ServerSocket class. -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Net_ServerSocket_INCLUDED -#define Net_ServerSocket_INCLUDED - - -#include "Poco/Net/Net.h" -#include "Poco/Net/Socket.h" -#include "Poco/Net/StreamSocket.h" - - -namespace Poco { -namespace Net { - - -class Net_API ServerSocket: public Socket - /// This class provides an interface to a - /// TCP server socket. -{ -public: - ServerSocket(); - /// Creates a server socket. - /// - /// The server socket must be bound to - /// and address and put into listening state. - - ServerSocket(const Socket& socket); - /// Creates the ServerSocket with the SocketImpl - /// from another socket. The SocketImpl must be - /// a ServerSocketImpl, otherwise an InvalidArgumentException - /// will be thrown. - - ServerSocket(const SocketAddress& address, int backlog = 64); - /// Creates a server socket, binds it - /// to the given address and puts it in listening - /// state. - /// - /// After successful construction, the server socket - /// is ready to accept connections. - - ServerSocket(Poco::UInt16 port, int backlog = 64); - /// Creates a server socket, binds it - /// to the given port and puts it in listening - /// state. - /// - /// After successful construction, the server socket - /// is ready to accept connections. - - virtual ~ServerSocket(); - /// Destroys the StreamSocket. - - ServerSocket& operator = (const Socket& socket); - /// Assignment operator. - /// - /// Releases the socket's SocketImpl and - /// attaches the SocketImpl from the other socket and - /// increments the reference count of the SocketImpl. - - virtual void bind(const SocketAddress& address, bool reuseAddress = false); - /// 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. - - virtual void bind(Poco::UInt16 port, bool reuseAddress = false); - /// Bind 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. - - virtual void bind6(const SocketAddress& address, bool reuseAddress = false, bool ipV6Only = false); - /// 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. - /// - /// 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); - /// Bind 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. - /// - /// 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); - /// Puts the socket into listening state. - /// - /// The socket becomes a passive socket that - /// can accept incoming connection requests. - /// - /// The backlog argument specifies the maximum - /// number of connections that can be queued - /// for this socket. - - virtual StreamSocket acceptConnection(SocketAddress& clientAddr); - /// Get the next completed connection from the - /// socket's completed connection queue. - /// - /// If the queue is empty, waits until a connection - /// request completes. - /// - /// Returns a new TCP socket for the connection - /// with the client. - /// - /// The client socket's address is returned in clientAddr. - - virtual StreamSocket acceptConnection(); - /// Get the next completed connection from the - /// socket's completed connection queue. - /// - /// If the queue is empty, waits until a connection - /// request completes. - /// - /// Returns a new TCP socket for the connection - /// with the client. - -protected: - ServerSocket(SocketImpl* pImpl, bool); - /// The bool argument is to resolve an ambiguity with - /// another constructor (Microsoft Visual C++ 2005) -}; - - -} } // namespace Poco::Net - - -#endif // Net_ServerSocket_INCLUDED diff --git a/contrib/libpoco/Net/include/Poco/Net/ServerSocketImpl.h b/contrib/libpoco/Net/include/Poco/Net/ServerSocketImpl.h deleted file mode 100644 index 533bf65ae5b..00000000000 --- a/contrib/libpoco/Net/include/Poco/Net/ServerSocketImpl.h +++ /dev/null @@ -1,47 +0,0 @@ -// -// ServerSocketImpl.h -// -// $Id: //poco/1.4/Net/include/Poco/Net/ServerSocketImpl.h#1 $ -// -// Library: Net -// Package: Sockets -// Module: ServerSocketImpl -// -// Definition of the ServerSocketImpl class. -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Net_ServerSocketImpl_INCLUDED -#define Net_ServerSocketImpl_INCLUDED - - -#include "Poco/Net/Net.h" -#include "Poco/Net/SocketImpl.h" - - -namespace Poco { -namespace Net { - - -class Net_API ServerSocketImpl: public SocketImpl - /// This class implements a TCP server socket. -{ -public: - ServerSocketImpl(); - /// Creates the ServerSocketImpl. - -protected: - virtual ~ServerSocketImpl(); - /// Destroys the ServerSocketImpl. -}; - - -} } // namespace Poco::Net - - -#endif // Net_ServerSocketImpl_INCLUDED diff --git a/contrib/libpoco/Net/include/Poco/Net/Socket.h b/contrib/libpoco/Net/include/Poco/Net/Socket.h deleted file mode 100644 index fc7f0ba2da5..00000000000 --- a/contrib/libpoco/Net/include/Poco/Net/Socket.h +++ /dev/null @@ -1,633 +0,0 @@ -// -// Socket.h -// -// $Id: //poco/1.4/Net/include/Poco/Net/Socket.h#2 $ -// -// Library: Net -// Package: Sockets -// Module: Socket -// -// Definition of the Socket class. -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Net_Socket_INCLUDED -#define Net_Socket_INCLUDED - - -#include "Poco/Net/Net.h" -#include "Poco/Net/SocketImpl.h" -#include - - -namespace Poco { -namespace Net { - - -class Net_API Socket - /// Socket is the common base class for - /// StreamSocket, ServerSocket, DatagramSocket and other - /// socket classes. - /// - /// It provides operations common to all socket types. -{ -public: - enum SelectMode - /// The mode argument to poll() and select(). - { - SELECT_READ = 1, - SELECT_WRITE = 2, - SELECT_ERROR = 4 - }; - - typedef std::vector SocketList; - - Socket(); - /// Creates an uninitialized socket. - - Socket(const Socket& socket); - /// Copy constructor. - /// - /// Attaches the SocketImpl from the other socket and - /// increments the reference count of the SocketImpl. - - Socket& operator = (const Socket& socket); - /// Assignment operator. - /// - /// Releases the socket's SocketImpl and - /// attaches the SocketImpl from the other socket and - /// increments the reference count of the SocketImpl. - - virtual ~Socket(); - /// Destroys the Socket and releases the - /// SocketImpl. - - bool operator == (const Socket& socket) const; - /// Returns true if both sockets share the same - /// SocketImpl, false otherwise. - - bool operator != (const Socket& socket) const; - /// Returns false if both sockets share the same - /// SocketImpl, true otherwise. - - bool operator < (const Socket& socket) const; - /// Compares the SocketImpl pointers. - - bool operator <= (const Socket& socket) const; - /// Compares the SocketImpl pointers. - - bool operator > (const Socket& socket) const; - /// Compares the SocketImpl pointers. - - bool operator >= (const Socket& socket) const; - /// Compares the SocketImpl pointers. - - void close(); - /// Closes the socket. - - static int select(SocketList& readList, SocketList& writeList, SocketList& exceptList, const Poco::Timespan& timeout); - /// Determines the status of one or more sockets, - /// using a call to select(). - /// - /// ReadList contains the list of sockets which should be - /// checked for readability. - /// - /// WriteList contains the list of sockets which should be - /// checked for writeability. - /// - /// ExceptList contains a list of sockets which should be - /// checked for a pending error. - /// - /// Returns the number of sockets ready. - /// - /// After return, - /// * readList contains those sockets ready for reading, - /// * writeList contains those sockets ready for writing, - /// * exceptList contains those sockets with a pending error. - /// - /// If the total number of sockets passed in readList, writeList and - /// exceptList is zero, select() will return immediately and the - /// return value will be 0. - /// - /// If one of the sockets passed to select() is closed while - /// select() runs, select will return immediately. However, - /// the closed socket will not be included in any list. - /// In this case, the return value may be greater than the sum - /// of all sockets in all list. - - bool poll(const Poco::Timespan& timeout, int mode) const; - /// Determines the status of the socket, using a - /// call to poll() or select(). - /// - /// The mode argument is constructed by combining the values - /// of the SelectMode enumeration. - /// - /// Returns true if the next operation corresponding to - /// mode will not block, false otherwise. - - int available() const; - /// Returns the number of bytes available that can be read - /// without causing the socket to block. - - void setSendBufferSize(int size); - /// Sets the size of the send buffer. - - int getSendBufferSize() const; - /// Returns the size of the send buffer. - /// - /// The returned value may be different than the - /// value previously set with setSendBufferSize(), - /// as the system is free to adjust the value. - - void setReceiveBufferSize(int size); - /// Sets the size of the receive buffer. - - int getReceiveBufferSize() const; - /// Returns the size of the receive buffer. - /// - /// The returned value may be different than the - /// value previously set with setReceiveBufferSize(), - /// as the system is free to adjust the value. - - void setSendTimeout(const Poco::Timespan& timeout); - /// Sets the send timeout for the socket. - - Poco::Timespan getSendTimeout() const; - /// Returns the send timeout for the socket. - /// - /// The returned timeout may be different than the - /// timeout previously set with setSendTimeout(), - /// as the system is free to adjust the value. - - void setReceiveTimeout(const Poco::Timespan& timeout); - /// Sets the send timeout for the socket. - /// - /// On systems that do not support SO_RCVTIMEO, a - /// workaround using poll() is provided. - - Poco::Timespan getReceiveTimeout() const; - /// Returns the receive timeout for the socket. - /// - /// The returned timeout may be different than the - /// timeout previously set with getReceiveTimeout(), - /// as the system is free to adjust the value. - - void setOption(int level, int option, int value); - /// Sets the socket option specified by level and option - /// to the given integer value. - - void setOption(int level, int option, unsigned value); - /// Sets the socket option specified by level and option - /// to the given integer value. - - void setOption(int level, int option, unsigned char value); - /// Sets the socket option specified by level and option - /// to the given integer value. - - void setOption(int level, int option, const Poco::Timespan& value); - /// Sets the socket option specified by level and option - /// to the given time value. - - void setOption(int level, int option, const IPAddress& value); - /// Sets the socket option specified by level and option - /// to the given time value. - - void getOption(int level, int option, int& value) const; - /// Returns the value of the socket option - /// specified by level and option. - - void getOption(int level, int option, unsigned& value) const; - /// Returns the value of the socket option - /// specified by level and option. - - void getOption(int level, int option, unsigned char& value) const; - /// Returns the value of the socket option - /// specified by level and option. - - void getOption(int level, int option, Poco::Timespan& value) const; - /// Returns the value of the socket option - /// specified by level and option. - - void getOption(int level, int option, IPAddress& value) const; - /// Returns the value of the socket option - /// specified by level and option. - - void setLinger(bool on, int seconds); - /// Sets the value of the SO_LINGER socket option. - - void getLinger(bool& on, int& seconds) const; - /// Returns the value of the SO_LINGER socket option. - - void setNoDelay(bool flag); - /// Sets the value of the TCP_NODELAY socket option. - - bool getNoDelay() const; - /// Returns the value of the TCP_NODELAY socket option. - - void setKeepAlive(bool flag); - /// Sets the value of the SO_KEEPALIVE socket option. - - bool getKeepAlive() const; - /// Returns the value of the SO_KEEPALIVE socket option. - - void setReuseAddress(bool flag); - /// Sets the value of the SO_REUSEADDR socket option. - - bool getReuseAddress() const; - /// Returns the value of the SO_REUSEADDR socket option. - - void setReusePort(bool flag); - /// Sets the value of the SO_REUSEPORT socket option. - /// Does nothing if the socket implementation does not - /// support SO_REUSEPORT. - - bool getReusePort() const; - /// Returns the value of the SO_REUSEPORT socket option. - /// - /// Returns false if the socket implementation does not - /// support SO_REUSEPORT. - - void setOOBInline(bool flag); - /// Sets the value of the SO_OOBINLINE socket option. - - bool getOOBInline() const; - /// Returns the value of the SO_OOBINLINE socket option. - - void setBlocking(bool flag); - /// Sets the socket in blocking mode if flag is true, - /// disables blocking mode if flag is false. - - bool getBlocking() const; - /// Returns the blocking mode of the socket. - /// This method will only work if the blocking modes of - /// the socket are changed via the setBlocking method! - - SocketAddress address() const; - /// Returns the IP address and port number of the socket. - - SocketAddress peerAddress() const; - /// Returns the IP address and port number of the peer socket. - - SocketImpl* impl() const; - /// Returns the SocketImpl for this socket. - - bool secure() const; - /// Returns true iff the socket's connection is secure - /// (using SSL or TLS). - - static bool supportsIPv4(); - /// Returns true if the system supports IPv4. - - static bool supportsIPv6(); - /// Returns true if the system supports IPv6. - - void init(int af); - /// Creates the underlying system socket for the given - /// address family. - /// - /// Normally, this method should not be called directly, as - /// socket creation will be handled automatically. There are - /// a few situations where calling this method after creation - /// of the Socket object makes sense. One example is setting - /// a socket option before calling bind() on a ServerSocket. - -protected: - Socket(SocketImpl* pImpl); - /// Creates the Socket and attaches the given SocketImpl. - /// The socket takes owership of the SocketImpl. - - poco_socket_t sockfd() const; - /// Returns the socket descriptor for this socket. - -private: - -#if defined(POCO_HAVE_FD_POLL) -class FDCompare - /// Utility functor used to compare socket file descriptors. - /// Used in poll() member function. -{ -public: - FDCompare(int fd): _fd(fd) { } - inline bool operator()(const Socket& socket) const - { return socket.sockfd() == _fd; } - -private: - FDCompare(); - int _fd; -}; -#endif - - SocketImpl* _pImpl; -}; - - -// -// inlines -// -inline bool Socket::operator == (const Socket& socket) const -{ - return _pImpl == socket._pImpl; -} - - -inline bool Socket::operator != (const Socket& socket) const -{ - return _pImpl != socket._pImpl; -} - - -inline bool Socket::operator < (const Socket& socket) const -{ - return _pImpl < socket._pImpl; -} - - -inline bool Socket::operator <= (const Socket& socket) const -{ - return _pImpl <= socket._pImpl; -} - - -inline bool Socket::operator > (const Socket& socket) const -{ - return _pImpl > socket._pImpl; -} - - -inline bool Socket::operator >= (const Socket& socket) const -{ - return _pImpl >= socket._pImpl; -} - - -inline void Socket::close() -{ - _pImpl->close(); -} - - -inline bool Socket::poll(const Poco::Timespan& timeout, int mode) const -{ - return _pImpl->poll(timeout, mode); -} - - -inline int Socket::available() const -{ - return _pImpl->available(); -} - - -inline void Socket::setSendBufferSize(int size) -{ - _pImpl->setSendBufferSize(size); -} - - -inline int Socket::getSendBufferSize() const -{ - return _pImpl->getSendBufferSize(); -} - - -inline void Socket::setReceiveBufferSize(int size) -{ - _pImpl->setReceiveBufferSize(size); -} - - -inline int Socket::getReceiveBufferSize() const -{ - return _pImpl->getReceiveBufferSize(); -} - - -inline void Socket::setSendTimeout(const Poco::Timespan& timeout) -{ - _pImpl->setSendTimeout(timeout); -} - - -inline Poco::Timespan Socket::getSendTimeout() const -{ - return _pImpl->getSendTimeout(); -} - - -inline void Socket::setReceiveTimeout(const Poco::Timespan& timeout) -{ - _pImpl->setReceiveTimeout(timeout); -} - - -inline Poco::Timespan Socket::getReceiveTimeout() const -{ - return _pImpl->getReceiveTimeout(); -} - - -inline void Socket::setOption(int level, int option, int value) -{ - _pImpl->setOption(level, option, value); -} - - -inline void Socket::setOption(int level, int option, unsigned value) -{ - _pImpl->setOption(level, option, value); -} - - -inline void Socket::setOption(int level, int option, unsigned char value) -{ - _pImpl->setOption(level, option, value); -} - - -inline void Socket::setOption(int level, int option, const Poco::Timespan& value) -{ - _pImpl->setOption(level, option, value); -} - - -inline void Socket::setOption(int level, int option, const IPAddress& value) -{ - _pImpl->setOption(level, option, value); -} - - -inline void Socket::getOption(int level, int option, int& value) const -{ - _pImpl->getOption(level, option, value); -} - - -inline void Socket::getOption(int level, int option, unsigned& value) const -{ - _pImpl->getOption(level, option, value); -} - - -inline void Socket::getOption(int level, int option, unsigned char& value) const -{ - _pImpl->getOption(level, option, value); -} - - -inline void Socket::getOption(int level, int option, Poco::Timespan& value) const -{ - _pImpl->getOption(level, option, value); -} - - -inline void Socket::getOption(int level, int option, IPAddress& value) const -{ - _pImpl->getOption(level, option, value); -} - - -inline void Socket::setLinger(bool on, int seconds) -{ - _pImpl->setLinger(on, seconds); -} - - -inline void Socket::getLinger(bool& on, int& seconds) const -{ - _pImpl->getLinger(on, seconds); -} - - -inline void Socket::setNoDelay(bool flag) -{ - _pImpl->setNoDelay(flag); -} - - -inline bool Socket::getNoDelay() const -{ - return _pImpl->getNoDelay(); -} - - -inline void Socket::setKeepAlive(bool flag) -{ - _pImpl->setKeepAlive(flag); -} - - -inline bool Socket::getKeepAlive() const -{ - return _pImpl->getKeepAlive(); -} - - -inline void Socket::setReuseAddress(bool flag) -{ - _pImpl->setReuseAddress(flag); -} - - -inline bool Socket::getReuseAddress() const -{ - return _pImpl->getReuseAddress(); -} - - -inline void Socket::setReusePort(bool flag) -{ - _pImpl->setReusePort(flag); -} - - -inline bool Socket::getReusePort() const -{ - return _pImpl->getReusePort(); -} - - -inline void Socket::setOOBInline(bool flag) -{ - _pImpl->setOOBInline(flag); -} - - -inline bool Socket::getOOBInline() const -{ - return _pImpl->getOOBInline(); -} - - -inline void Socket::setBlocking(bool flag) -{ - _pImpl->setBlocking(flag); -} - - -inline bool Socket::getBlocking() const -{ - return _pImpl->getBlocking(); -} - - -inline SocketImpl* Socket::impl() const -{ - return _pImpl; -} - - -inline poco_socket_t Socket::sockfd() const -{ - return _pImpl->sockfd(); -} - - -inline SocketAddress Socket::address() const -{ - return _pImpl->address(); -} - - -inline SocketAddress Socket::peerAddress() const -{ - return _pImpl->peerAddress(); -} - - -inline bool Socket::secure() const -{ - return _pImpl->secure(); -} - - -inline bool Socket::supportsIPv4() -{ - return true; -} - - -inline bool Socket::supportsIPv6() -{ -#if defined(POCO_HAVE_IPv6) - return true; -#else - return false; -#endif -} - - -inline void Socket::init(int af) -{ - _pImpl->init(af); -} - - -} } // namespace Poco::Net - - -#endif // Net_Socket_INCLUDED diff --git a/contrib/libpoco/Net/include/Poco/Net/SocketAcceptor.h b/contrib/libpoco/Net/include/Poco/Net/SocketAcceptor.h deleted file mode 100644 index ff2bfa79d66..00000000000 --- a/contrib/libpoco/Net/include/Poco/Net/SocketAcceptor.h +++ /dev/null @@ -1,197 +0,0 @@ -// -// SocketAcceptor.h -// -// $Id: //poco/1.4/Net/include/Poco/Net/SocketAcceptor.h#1 $ -// -// Library: Net -// Package: Reactor -// Module: SocketAcceptor -// -// Definition of the SocketAcceptor class. -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Net_SocketAcceptor_INCLUDED -#define Net_SocketAcceptor_INCLUDED - - -#include "Poco/Net/Net.h" -#include "Poco/Net/SocketNotification.h" -#include "Poco/Net/ServerSocket.h" -#include "Poco/Net/StreamSocket.h" -#include "Poco/Observer.h" - - -namespace Poco { -namespace Net { - - -template -class SocketAcceptor - /// This class implements the Acceptor part of the - /// Acceptor-Connector design pattern. - /// - /// The Acceptor-Connector pattern has been described in the book - /// "Pattern Languages of Program Design 3", edited by Robert Martin, - /// Frank Buschmann and Dirk Riehle (Addison Wesley, 1997). - /// - /// The Acceptor-Connector design pattern decouples connection - /// establishment and service initialization in a distributed system - /// from the processing performed once a service is initialized. - /// This decoupling is achieved with three components: Acceptors, - /// Connectors and Service Handlers. - /// The SocketAcceptor passively waits for connection requests (usually - /// from a remote Connector) and establishes a connection upon - /// arrival of a connection requests. Also, a Service Handler is - /// initialized to process the data arriving via the connection in - /// an application-specific way. - /// - /// The SocketAcceptor sets up a ServerSocket and registers itself - /// for a ReadableNotification, denoting an incoming connection request. - /// - /// When the ServerSocket becomes readable the SocketAcceptor accepts - /// the connection request and creates a ServiceHandler to - /// service the connection. - /// - /// The ServiceHandler class must provide a constructor that - /// takes a StreamSocket and a SocketReactor as arguments, - /// e.g.: - /// MyServiceHandler(const StreamSocket& socket, ServiceReactor& reactor) - /// - /// When the ServiceHandler is done, it must destroy itself. - /// - /// Subclasses can override the createServiceHandler() factory method - /// if special steps are necessary to create a ServiceHandler object. -{ -public: - explicit SocketAcceptor(ServerSocket& socket): - _socket(socket), - _pReactor(0) - /// Creates a SocketAcceptor, using the given ServerSocket. - { - } - - SocketAcceptor(ServerSocket& socket, SocketReactor& reactor): - _socket(socket), - _pReactor(&reactor) - /// Creates a SocketAcceptor, using the given ServerSocket. - /// The SocketAcceptor registers itself with the given SocketReactor. - { - _pReactor->addEventHandler(_socket, Poco::Observer(*this, &SocketAcceptor::onAccept)); - } - - virtual ~SocketAcceptor() - /// Destroys the SocketAcceptor. - { - try - { - if (_pReactor) - { - _pReactor->removeEventHandler(_socket, Poco::Observer(*this, &SocketAcceptor::onAccept)); - } - } - catch (...) - { - poco_unexpected(); - } - } - - void setReactor(SocketReactor& reactor) - /// Sets the reactor for this acceptor. - { - _pReactor = &reactor; - if (!_pReactor->hasEventHandler(_socket, Poco::Observer(*this, &SocketAcceptor::onAccept))) - { - registerAcceptor(reactor); - } - } - - virtual void registerAcceptor(SocketReactor& reactor) - /// Registers the SocketAcceptor with a SocketReactor. - /// - /// A subclass can override this function to e.g. - /// register an event handler for timeout event. - /// - /// If acceptor was constructed without providing reactor to it, - /// the override of this method must either call the base class - /// implementation or directly register the accept handler with - /// the reactor. - { - if (_pReactor) - throw Poco::InvalidAccessException("Acceptor already registered."); - - _pReactor = &reactor; - _pReactor->addEventHandler(_socket, Poco::Observer(*this, &SocketAcceptor::onAccept)); - } - - virtual void unregisterAcceptor() - /// Unregisters the SocketAcceptor. - /// - /// A subclass can override this function to e.g. - /// unregister its event handler for a timeout event. - /// - /// If the accept handler was registered with the reactor, - /// the overriding method must either call the base class - /// implementation or directly unregister the accept handler. - { - if (_pReactor) - { - _pReactor->removeEventHandler(_socket, Poco::Observer(*this, &SocketAcceptor::onAccept)); - } - } - - void onAccept(ReadableNotification* pNotification) - /// Accepts connection and creates event handler. - { - pNotification->release(); - StreamSocket sock = _socket.acceptConnection(); - _pReactor->wakeUp(); - createServiceHandler(sock); - } - -protected: - virtual ServiceHandler* createServiceHandler(StreamSocket& socket) - /// Create and initialize a new ServiceHandler instance. - /// - /// Subclasses can override this method. - { - return new ServiceHandler(socket, *_pReactor); - } - - SocketReactor* reactor() - /// Returns a pointer to the SocketReactor where - /// this SocketAcceptor is registered. - /// - /// The pointer may be null. - { - return _pReactor; - } - - Socket& socket() - /// Returns a reference to the SocketAcceptor's socket. - { - return _socket; - } - -private: - SocketAcceptor(); - SocketAcceptor(const SocketAcceptor&); - SocketAcceptor& operator = (const SocketAcceptor&); - - ServerSocket _socket; - SocketReactor* _pReactor; -}; - - -} } // namespace Poco::Net - - -#endif // Net_SocketAcceptor_INCLUDED diff --git a/contrib/libpoco/Net/include/Poco/Net/SocketAddress.h b/contrib/libpoco/Net/include/Poco/Net/SocketAddress.h deleted file mode 100644 index 4c92f4e4fd9..00000000000 --- a/contrib/libpoco/Net/include/Poco/Net/SocketAddress.h +++ /dev/null @@ -1,279 +0,0 @@ -// -// SocketAddress.h -// -// $Id: //poco/1.4/Net/include/Poco/Net/SocketAddress.h#2 $ -// -// Library: Net -// Package: NetCore -// Module: SocketAddress -// -// Definition of the SocketAddress class. -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Net_SocketAddress_INCLUDED -#define Net_SocketAddress_INCLUDED - - -#include "Poco/Net/Net.h" -#include "Poco/Net/SocketAddressImpl.h" - - -namespace Poco { -namespace Net { - - -class IPAddress; - - -class Net_API SocketAddress - /// This class represents an internet (IP) endpoint/socket - /// address. The address can belong either to the - /// IPv4 or the IPv6 address family and consists of a - /// host address and a port number. -{ -public: - SocketAddress(); - /// Creates a wildcard (all zero) IPv4 SocketAddress. - - SocketAddress(const IPAddress& hostAddress, Poco::UInt16 portNumber); - /// Creates a SocketAddress from an IP address and given port number. - - SocketAddress(Poco::UInt16 port); - /// Creates a SocketAddress with unspecified (wildcard) IP address - /// and given port number. - - SocketAddress(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. - - SocketAddress(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. - - explicit SocketAddress(const std::string& hostAndPort); - /// Creates a SocketAddress from an IP address or host name and the - /// port number/service name. Host name/address and port number must - /// be separated by a colon. In case of an IPv6 address, - /// the address part must be enclosed in brackets. - /// - /// Examples: - /// 192.168.1.10:80 - /// [::ffff:192.168.1.120]:2040 - /// www.appinf.com:8080 - - SocketAddress(const SocketAddress& addr); - /// Creates a SocketAddress by copying another one. - - SocketAddress(const struct sockaddr* addr, poco_socklen_t length); - /// Creates a SocketAddress from a native socket address. - - ~SocketAddress(); - /// Destroys the SocketAddress. - - SocketAddress& operator = (const SocketAddress& socketAddress); - /// Assigns another SocketAddress. - - IPAddress host() const; - /// Returns the host IP address. - - Poco::UInt16 port() const; - /// Returns the port number. - - poco_socklen_t length() const; - /// Returns the length of the internal native socket address. - - const struct sockaddr* addr() const; - /// Returns a pointer to the internal native socket address. - - int af() const; - /// Returns the address family (AF_INET or AF_INET6) of the address. - - std::string toString() const; - /// Returns a string representation of the address. - - IPAddress::Family family() const; - /// Returns the address family of the host's address. - - bool operator < (const SocketAddress& socketAddress) const; - bool operator == (const SocketAddress& socketAddress) const; - bool operator != (const SocketAddress& socketAddress) const; - - enum - { - MAX_ADDRESS_LENGTH = -#if defined(POCO_HAVE_IPv6) - sizeof(struct sockaddr_in6) -#else - sizeof(struct sockaddr_in) -#endif - /// Maximum length in bytes of a socket address. - }; - -protected: - void init(const IPAddress& hostAddress, Poco::UInt16 portNumber); - void init(const std::string& hostAddress, Poco::UInt16 portNumber); - Poco::UInt16 resolveService(const std::string& service); - -private: - typedef Poco::Net::Impl::SocketAddressImpl Impl; -#ifdef POCO_HAVE_ALIGNMENT - typedef Impl* Ptr; -#else - typedef Poco::AutoPtr Ptr; -#endif - - Ptr pImpl() const; - - void newIPv4(); - - void newIPv4(const sockaddr_in*); - - void newIPv4(const IPAddress& hostAddress, Poco::UInt16 portNumber); - - void newIPv6(const sockaddr_in6*); - - void newIPv6(const IPAddress& hostAddress, Poco::UInt16 portNumber); - - void destruct(); - -#ifdef POCO_HAVE_ALIGNMENT - char* storage(); - - #ifdef POCO_ENABLE_CPP11 - static const unsigned sz = sizeof(Poco::Net::Impl::IPv6SocketAddressImpl); - typedef std::aligned_storage::type AlignerType; - union - { - char buffer[sz]; - private: - AlignerType aligner; - } - #else // !POCO_ENABLE_CPP11 - AlignedCharArrayUnion - #endif // POCO_ENABLE_CPP11 - _memory; -#else // !POCO_HAVE_ALIGNMENT - Ptr _pImpl; -#endif // POCO_HAVE_ALIGNMENT -}; - - -// -// inlines -// - - -inline void SocketAddress::destruct() -{ -#ifdef POCO_HAVE_ALIGNMENT - pImpl()->~SocketAddressImpl(); -#endif -} - - -inline SocketAddress::Ptr SocketAddress::pImpl() const -{ -#ifdef POCO_HAVE_ALIGNMENT - return reinterpret_cast(const_cast(_memory.buffer)); -#else - if (_pImpl) return _pImpl; - throw Poco::NullPointerException("Pointer to SocketAddress implementation is NULL."); -#endif -} - - -inline void SocketAddress::newIPv4() -{ -#ifdef POCO_HAVE_ALIGNMENT - new (storage()) Poco::Net::Impl::IPv4SocketAddressImpl; -#else - _pImpl = new Poco::Net::Impl::IPv4SocketAddressImpl; -#endif -} - - -inline void SocketAddress::newIPv4(const sockaddr_in* sockAddr) -{ -#ifdef POCO_HAVE_ALIGNMENT - new (storage()) Poco::Net::Impl::IPv4SocketAddressImpl(sockAddr); -#else - _pImpl = new Poco::Net::Impl::IPv4SocketAddressImpl(sockAddr); -#endif -} - - -inline void SocketAddress::newIPv4(const IPAddress& hostAddress, Poco::UInt16 portNumber) -{ -#ifdef POCO_HAVE_ALIGNMENT - new (storage()) Poco::Net::Impl::IPv4SocketAddressImpl(hostAddress.addr(), htons(portNumber)); -#else - _pImpl = new Poco::Net::Impl::IPv4SocketAddressImpl(hostAddress.addr(), htons(portNumber)); -#endif -} - - - -inline void SocketAddress::newIPv6(const sockaddr_in6* sockAddr) -{ -#ifdef POCO_HAVE_ALIGNMENT - new (storage()) Poco::Net::Impl::IPv6SocketAddressImpl(sockAddr); -#else - _pImpl = new Poco::Net::Impl::IPv6SocketAddressImpl(sockAddr); -#endif -} - - -inline void SocketAddress::newIPv6(const IPAddress& hostAddress, Poco::UInt16 portNumber) -{ -#ifdef POCO_HAVE_ALIGNMENT - new (storage()) Poco::Net::Impl::IPv6SocketAddressImpl(hostAddress.addr(), htons(portNumber), hostAddress.scope()); -#else - _pImpl = new Poco::Net::Impl::IPv6SocketAddressImpl(hostAddress.addr(), htons(portNumber), hostAddress.scope()); -#endif -} - - -inline IPAddress::Family SocketAddress::family() const -{ - return host().family(); -} - - -#ifdef POCO_HAVE_ALIGNMENT -inline char* SocketAddress::storage() -{ - return _memory.buffer; -} -#endif - - -inline bool SocketAddress::operator == (const SocketAddress& socketAddress) const -{ - return host() == socketAddress.host() && port() == socketAddress.port(); -} - - -inline bool SocketAddress::operator != (const SocketAddress& socketAddress) const -{ - return host() != socketAddress.host() || port() != socketAddress.port(); -} - - -} } // namespace Poco::Net - - -#endif // Net_SocketAddress_INCLUDED diff --git a/contrib/libpoco/Net/include/Poco/Net/SocketAddressImpl.h b/contrib/libpoco/Net/include/Poco/Net/SocketAddressImpl.h deleted file mode 100644 index 40835d2ebad..00000000000 --- a/contrib/libpoco/Net/include/Poco/Net/SocketAddressImpl.h +++ /dev/null @@ -1,183 +0,0 @@ -// -// SocketAddressImpl.h -// -// $Id: //poco/1.4/Net/include/Poco/Net/SocketAddressImpl.h#2 $ -// -// Library: Net -// Package: NetCore -// Module: SocketAddressImpl -// -// Definition of the SocketAddressImpl class. -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Net_SocketAddressImpl_INCLUDED -#define Net_SocketAddressImpl_INCLUDED - - -#include "Poco/Net/Net.h" -#include "Poco/Net/SocketDefs.h" -#include "Poco/Net/IPAddress.h" -#ifndef POCO_HAVE_ALIGNMENT -#include "Poco/RefCountedObject.h" -#endif - -namespace Poco { -namespace Net { -namespace Impl { - - -class Net_API SocketAddressImpl -#ifndef POCO_HAVE_ALIGNMENT - : public Poco::RefCountedObject -#endif -{ -public: - virtual ~SocketAddressImpl(); - - virtual IPAddress host() const = 0; - virtual UInt16 port() const = 0; - virtual poco_socklen_t length() const = 0; - virtual const struct sockaddr* addr() const = 0; - virtual int af() const = 0; - -protected: - SocketAddressImpl(); - -private: - SocketAddressImpl(const SocketAddressImpl&); - SocketAddressImpl& operator = (const SocketAddressImpl&); -}; - - -class Net_API IPv4SocketAddressImpl: public SocketAddressImpl -{ -public: - IPv4SocketAddressImpl(); - - IPv4SocketAddressImpl(const struct sockaddr_in* addr); - - IPv4SocketAddressImpl(const void* addr, UInt16 port); - - IPAddress host() const; - - UInt16 port() const; - - poco_socklen_t length() const; - - const struct sockaddr* addr() const; - - int af() const; - -private: - struct sockaddr_in _addr; -}; - - -// -// inlines -// - -inline IPAddress IPv4SocketAddressImpl::host() const -{ - return IPAddress(&_addr.sin_addr, sizeof(_addr.sin_addr)); -} - - -inline UInt16 IPv4SocketAddressImpl::port() const -{ - return _addr.sin_port; -} - - -inline poco_socklen_t IPv4SocketAddressImpl::length() const -{ - return sizeof(_addr); -} - - -inline const struct sockaddr* IPv4SocketAddressImpl::addr() const -{ - return reinterpret_cast(&_addr); -} - - -inline int IPv4SocketAddressImpl::af() const -{ - return _addr.sin_family; -} - - -#if defined(POCO_HAVE_IPv6) - - -class Net_API IPv6SocketAddressImpl: public SocketAddressImpl -{ -public: - IPv6SocketAddressImpl(const struct sockaddr_in6* addr); - - IPv6SocketAddressImpl(const void* addr, UInt16 port); - - IPv6SocketAddressImpl(const void* addr, UInt16 port, UInt32 scope); - - IPAddress host() const; - - UInt16 port() const; - - poco_socklen_t length() const; - - const struct sockaddr* addr() const; - - int af() const; - -private: - struct sockaddr_in6 _addr; -}; - - -// -// inlines -// - -inline IPAddress IPv6SocketAddressImpl::host() const -{ - return IPAddress(&_addr.sin6_addr, sizeof(_addr.sin6_addr), _addr.sin6_scope_id); -} - - -inline UInt16 IPv6SocketAddressImpl::port() const -{ - return _addr.sin6_port; -} - - -inline poco_socklen_t IPv6SocketAddressImpl::length() const -{ - return sizeof(_addr); -} - - -inline const struct sockaddr* IPv6SocketAddressImpl::addr() const -{ - return reinterpret_cast(&_addr); -} - - -inline int IPv6SocketAddressImpl::af() const -{ - return _addr.sin6_family; -} - - -#endif //POCO_HAVE_IPv6 - - -} } } // namespace Poco::Net::Impl - - -#endif // Net_SocketAddressImpl_INCLUDED diff --git a/contrib/libpoco/Net/include/Poco/Net/SocketConnector.h b/contrib/libpoco/Net/include/Poco/Net/SocketConnector.h deleted file mode 100644 index 86e261cf8b2..00000000000 --- a/contrib/libpoco/Net/include/Poco/Net/SocketConnector.h +++ /dev/null @@ -1,214 +0,0 @@ -// -// SocketConnector.h -// -// $Id: //poco/1.4/Net/include/Poco/Net/SocketConnector.h#1 $ -// -// Library: Net -// Package: Reactor -// Module: SocketConnector -// -// Definition of the SocketConnector class. -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Net_SocketConnector_INCLUDED -#define Net_SocketConnector_INCLUDED - - -#include "Poco/Net/Net.h" -#include "Poco/Net/SocketNotification.h" -#include "Poco/Net/SocketAddress.h" -#include "Poco/Net/StreamSocket.h" -#include "Poco/Observer.h" - - -namespace Poco { -namespace Net { - - -template -class SocketConnector - /// This class implements the Connector part of the - /// Acceptor-Connector design pattern. - /// - /// The Acceptor-Connector pattern has been described in the book - /// "Pattern Languages of Program Design 3", edited by Robert Martin, - /// Frank Buschmann and Dirk Riehle (Addison Wesley, 1997). - /// - /// The Acceptor-Connector design pattern decouples connection - /// establishment and service initialization in a distributed system - /// from the processing performed once a service is initialized. - /// This decoupling is achieved with three components: Acceptors, - /// Connectors and Service Handlers. - /// The Connector actively establishes a connection with a remote - /// server socket (usually managed by an Acceptor) and initializes - /// a Service Handler to manage the connection. - /// - /// The SocketConnector sets up a StreamSocket, initiates a non-blocking - /// connect operation and registers itself for ReadableNotification, WritableNotification - /// and ErrorNotification. ReadableNotification or WritableNotification denote the successful - /// establishment of the connection. - /// - /// When the StreamSocket becomes readable or writeable, the SocketConnector - /// creates a ServiceHandler to service the connection and unregisters - /// itself. - /// - /// In case of an error (ErrorNotification), the SocketConnector unregisters itself - /// and calls the onError() method, which can be overridden by subclasses - /// to perform custom error handling. - /// - /// The ServiceHandler class must provide a constructor that - /// takes a StreamSocket and a SocketReactor as arguments, - /// e.g.: - /// MyServiceHandler(const StreamSocket& socket, ServiceReactor& reactor) - /// - /// When the ServiceHandler is done, it must destroy itself. - /// - /// Subclasses can override the createServiceHandler() factory method - /// if special steps are necessary to create a ServiceHandler object. -{ -public: - explicit SocketConnector(SocketAddress& address): - _pReactor(0) - /// Creates a SocketConnector, using the given Socket. - { - _socket.connectNB(address); - } - - SocketConnector(SocketAddress& address, SocketReactor& reactor): - _pReactor(0) - /// Creates an acceptor, using the given ServerSocket. - /// The SocketConnector registers itself with the given SocketReactor. - { - _socket.connectNB(address); - registerConnector(reactor); - } - - virtual ~SocketConnector() - /// Destroys the SocketConnector. - { - try - { - unregisterConnector(); - } - catch (...) - { - poco_unexpected(); - } - } - - virtual void registerConnector(SocketReactor& reactor) - /// Registers the SocketConnector with a SocketReactor. - /// - /// A subclass can override this and, for example, also register - /// an event handler for a timeout event. - /// - /// The overriding method must call the baseclass implementation first. - { - _pReactor = &reactor; - _pReactor->addEventHandler(_socket, Poco::Observer(*this, &SocketConnector::onReadable)); - _pReactor->addEventHandler(_socket, Poco::Observer(*this, &SocketConnector::onWritable)); - _pReactor->addEventHandler(_socket, Poco::Observer(*this, &SocketConnector::onError)); - } - - virtual void unregisterConnector() - /// Unregisters the SocketConnector. - /// - /// A subclass can override this and, for example, also unregister - /// its event handler for a timeout event. - /// - /// The overriding method must call the baseclass implementation first. - { - if (_pReactor) - { - _pReactor->removeEventHandler(_socket, Poco::Observer(*this, &SocketConnector::onReadable)); - _pReactor->removeEventHandler(_socket, Poco::Observer(*this, &SocketConnector::onWritable)); - _pReactor->removeEventHandler(_socket, Poco::Observer(*this, &SocketConnector::onError)); - } - } - - void onReadable(ReadableNotification* pNotification) - { - pNotification->release(); - int err = _socket.impl()->socketError(); - if (err) - { - onError(err); - unregisterConnector(); - } - else - { - onConnect(); - } - } - - void onWritable(WritableNotification* pNotification) - { - pNotification->release(); - onConnect(); - } - - void onConnect() - { - _socket.setBlocking(true); - createServiceHandler(); - unregisterConnector(); - } - - void onError(ErrorNotification* pNotification) - { - pNotification->release(); - onError(_socket.impl()->socketError()); - unregisterConnector(); - } - -protected: - virtual ServiceHandler* createServiceHandler() - /// Create and initialize a new ServiceHandler instance. - /// - /// Subclasses can override this method. - { - return new ServiceHandler(_socket, *_pReactor); - } - - virtual void onError(int errorCode) - /// Called when the socket cannot be connected. - /// - /// Subclasses can override this method. - { - } - - SocketReactor* reactor() - /// Returns a pointer to the SocketReactor where - /// this SocketConnector is registered. - /// - /// The pointer may be null. - { - return _pReactor; - } - - StreamSocket& socket() - /// Returns a reference to the SocketConnector's socket. - { - return _socket; - } - -private: - SocketConnector(); - SocketConnector(const SocketConnector&); - SocketConnector& operator = (const SocketConnector&); - - StreamSocket _socket; - SocketReactor* _pReactor; -}; - - -} } // namespace Poco::Net - - -#endif // Net_SocketConnector_INCLUDED diff --git a/contrib/libpoco/Net/include/Poco/Net/SocketDefs.h b/contrib/libpoco/Net/include/Poco/Net/SocketDefs.h deleted file mode 100644 index e7583a0b78a..00000000000 --- a/contrib/libpoco/Net/include/Poco/Net/SocketDefs.h +++ /dev/null @@ -1,351 +0,0 @@ -// -// SocketDefs.h -// -// $Id: //poco/1.4/Net/include/Poco/Net/SocketDefs.h#6 $ -// -// Library: Net -// Package: NetCore -// Module: SocketDefs -// -// Include platform-specific header files for sockets. -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Net_SocketDefs_INCLUDED -#define Net_SocketDefs_INCLUDED - - -#define POCO_ENOERR 0 - - -#if defined(POCO_OS_FAMILY_WINDOWS) - #include "Poco/UnWindows.h" - #include - #include - #define POCO_INVALID_SOCKET INVALID_SOCKET - #define poco_socket_t SOCKET - #define poco_socklen_t int - #define poco_ioctl_request_t int - #define poco_closesocket(s) closesocket(s) - #define POCO_EINTR WSAEINTR - #define POCO_EACCES WSAEACCES - #define POCO_EFAULT WSAEFAULT - #define POCO_EINVAL WSAEINVAL - #define POCO_EMFILE WSAEMFILE - #define POCO_EAGAIN WSAEWOULDBLOCK - #define POCO_EWOULDBLOCK WSAEWOULDBLOCK - #define POCO_EINPROGRESS WSAEINPROGRESS - #define POCO_EALREADY WSAEALREADY - #define POCO_ENOTSOCK WSAENOTSOCK - #define POCO_EDESTADDRREQ WSAEDESTADDRREQ - #define POCO_EMSGSIZE WSAEMSGSIZE - #define POCO_EPROTOTYPE WSAEPROTOTYPE - #define POCO_ENOPROTOOPT WSAENOPROTOOPT - #define POCO_EPROTONOSUPPORT WSAEPROTONOSUPPORT - #define POCO_ESOCKTNOSUPPORT WSAESOCKTNOSUPPORT - #define POCO_ENOTSUP WSAEOPNOTSUPP - #define POCO_EPFNOSUPPORT WSAEPFNOSUPPORT - #define POCO_EAFNOSUPPORT WSAEAFNOSUPPORT - #define POCO_EADDRINUSE WSAEADDRINUSE - #define POCO_EADDRNOTAVAIL WSAEADDRNOTAVAIL - #define POCO_ENETDOWN WSAENETDOWN - #define POCO_ENETUNREACH WSAENETUNREACH - #define POCO_ENETRESET WSAENETRESET - #define POCO_ECONNABORTED WSAECONNABORTED - #define POCO_ECONNRESET WSAECONNRESET - #define POCO_ENOBUFS WSAENOBUFS - #define POCO_EISCONN WSAEISCONN - #define POCO_ENOTCONN WSAENOTCONN - #define POCO_ESHUTDOWN WSAESHUTDOWN - #define POCO_ETIMEDOUT WSAETIMEDOUT - #define POCO_ECONNREFUSED WSAECONNREFUSED - #define POCO_EHOSTDOWN WSAEHOSTDOWN - #define POCO_EHOSTUNREACH WSAEHOSTUNREACH - #define POCO_ESYSNOTREADY WSASYSNOTREADY - #define POCO_ENOTINIT WSANOTINITIALISED - #define POCO_HOST_NOT_FOUND WSAHOST_NOT_FOUND - #define POCO_TRY_AGAIN WSATRY_AGAIN - #define POCO_NO_RECOVERY WSANO_RECOVERY - #define POCO_NO_DATA WSANO_DATA - #ifndef ADDRESS_FAMILY - #define ADDRESS_FAMILY USHORT - #endif -#elif defined(POCO_VXWORKS) - #include - #include - #include - #include - #include - #include - #include - #include - #define POCO_INVALID_SOCKET -1 - #define poco_socket_t int - #define poco_socklen_t int - #define poco_ioctl_request_t int - #define poco_closesocket(s) ::close(s) - #define POCO_EINTR EINTR - #define POCO_EACCES EACCES - #define POCO_EFAULT EFAULT - #define POCO_EINVAL EINVAL - #define POCO_EMFILE EMFILE - #define POCO_EAGAIN EAGAIN - #define POCO_EWOULDBLOCK EWOULDBLOCK - #define POCO_EINPROGRESS EINPROGRESS - #define POCO_EALREADY EALREADY - #define POCO_ENOTSOCK ENOTSOCK - #define POCO_EDESTADDRREQ EDESTADDRREQ - #define POCO_EMSGSIZE EMSGSIZE - #define POCO_EPROTOTYPE EPROTOTYPE - #define POCO_ENOPROTOOPT ENOPROTOOPT - #define POCO_EPROTONOSUPPORT EPROTONOSUPPORT - #define POCO_ESOCKTNOSUPPORT ESOCKTNOSUPPORT - #define POCO_ENOTSUP ENOTSUP - #define POCO_EPFNOSUPPORT EPFNOSUPPORT - #define POCO_EAFNOSUPPORT EAFNOSUPPORT - #define POCO_EADDRINUSE EADDRINUSE - #define POCO_EADDRNOTAVAIL EADDRNOTAVAIL - #define POCO_ENETDOWN ENETDOWN - #define POCO_ENETUNREACH ENETUNREACH - #define POCO_ENETRESET ENETRESET - #define POCO_ECONNABORTED ECONNABORTED - #define POCO_ECONNRESET ECONNRESET - #define POCO_ENOBUFS ENOBUFS - #define POCO_EISCONN EISCONN - #define POCO_ENOTCONN ENOTCONN - #define POCO_ESHUTDOWN ESHUTDOWN - #define POCO_ETIMEDOUT ETIMEDOUT - #define POCO_ECONNREFUSED ECONNREFUSED - #define POCO_EHOSTDOWN EHOSTDOWN - #define POCO_EHOSTUNREACH EHOSTUNREACH - #define POCO_ESYSNOTREADY -4 - #define POCO_ENOTINIT -5 - #define POCO_HOST_NOT_FOUND HOST_NOT_FOUND - #define POCO_TRY_AGAIN TRY_AGAIN - #define POCO_NO_RECOVERY NO_RECOVERY - #define POCO_NO_DATA NO_DATA -#elif defined(POCO_OS_FAMILY_UNIX) || defined(POCO_OS_FAMILY_VMS) - #include - #include - #include - #include - #include - #if POCO_OS != POCO_OS_HPUX - #include - #endif - #include - #if defined(POCO_OS_FAMILY_VMS) - #include - #else - #include - #endif - #include - #include - #include - #if defined(POCO_OS_FAMILY_UNIX) - #if (POCO_OS == POCO_OS_LINUX) - // Net/src/NetworkInterface.cpp changed #include to #include - // no more conflict, can use #include here - #include - #elif (POCO_OS == POCO_OS_HPUX) - extern "C" - { - #include - } - #else - #include - #endif - #endif - #if (POCO_OS == POCO_OS_SOLARIS) || (POCO_OS == POCO_OS_MAC_OS_X) - #include - #include - #endif - #define POCO_INVALID_SOCKET -1 - #define poco_socket_t int - #define poco_socklen_t socklen_t - #define poco_fcntl_request_t int - #if defined(POCO_OS_FAMILY_BSD) - #define poco_ioctl_request_t unsigned long - #else - #define poco_ioctl_request_t int - #endif - #define poco_closesocket(s) ::close(s) - #define POCO_EINTR EINTR - #define POCO_EACCES EACCES - #define POCO_EFAULT EFAULT - #define POCO_EINVAL EINVAL - #define POCO_EMFILE EMFILE - #define POCO_EAGAIN EAGAIN - #define POCO_EWOULDBLOCK EWOULDBLOCK - #define POCO_EINPROGRESS EINPROGRESS - #define POCO_EALREADY EALREADY - #define POCO_ENOTSOCK ENOTSOCK - #define POCO_EDESTADDRREQ EDESTADDRREQ - #define POCO_EMSGSIZE EMSGSIZE - #define POCO_EPROTOTYPE EPROTOTYPE - #define POCO_ENOPROTOOPT ENOPROTOOPT - #define POCO_EPROTONOSUPPORT EPROTONOSUPPORT - #if defined(ESOCKTNOSUPPORT) - #define POCO_ESOCKTNOSUPPORT ESOCKTNOSUPPORT - #else - #define POCO_ESOCKTNOSUPPORT -1 - #endif - #define POCO_ENOTSUP ENOTSUP - #define POCO_EPFNOSUPPORT EPFNOSUPPORT - #define POCO_EAFNOSUPPORT EAFNOSUPPORT - #define POCO_EADDRINUSE EADDRINUSE - #define POCO_EADDRNOTAVAIL EADDRNOTAVAIL - #define POCO_ENETDOWN ENETDOWN - #define POCO_ENETUNREACH ENETUNREACH - #define POCO_ENETRESET ENETRESET - #define POCO_ECONNABORTED ECONNABORTED - #define POCO_ECONNRESET ECONNRESET - #define POCO_ENOBUFS ENOBUFS - #define POCO_EISCONN EISCONN - #define POCO_ENOTCONN ENOTCONN - #if defined(ESHUTDOWN) - #define POCO_ESHUTDOWN ESHUTDOWN - #else - #define POCO_ESHUTDOWN -2 - #endif - #define POCO_ETIMEDOUT ETIMEDOUT - #define POCO_ECONNREFUSED ECONNREFUSED - #if defined(EHOSTDOWN) - #define POCO_EHOSTDOWN EHOSTDOWN - #else - #define POCO_EHOSTDOWN -3 - #endif - #define POCO_EHOSTUNREACH EHOSTUNREACH - #define POCO_ESYSNOTREADY -4 - #define POCO_ENOTINIT -5 - #define POCO_HOST_NOT_FOUND HOST_NOT_FOUND - #define POCO_TRY_AGAIN TRY_AGAIN - #define POCO_NO_RECOVERY NO_RECOVERY - #define POCO_NO_DATA NO_DATA -#endif - - -#if defined(POCO_OS_FAMILY_BSD) || (POCO_OS == POCO_OS_TRU64) || (POCO_OS == POCO_OS_AIX) || (POCO_OS == POCO_OS_IRIX) || (POCO_OS == POCO_OS_QNX) || (POCO_OS == POCO_OS_VXWORKS) - #define POCO_HAVE_SALEN 1 -#endif - - -#if POCO_OS != POCO_OS_VXWORKS && !defined(POCO_NET_NO_ADDRINFO) - #define POCO_HAVE_ADDRINFO 1 -#endif - - -#if (POCO_OS == POCO_OS_HPUX) || (POCO_OS == POCO_OS_SOLARIS) || (POCO_OS == POCO_OS_WINDOWS_CE) || (POCO_OS == POCO_OS_CYGWIN) - #define POCO_BROKEN_TIMEOUTS 1 -#endif - - -#if defined(POCO_HAVE_ADDRINFO) - #ifndef AI_PASSIVE - #define AI_PASSIVE 0 - #endif - #ifndef AI_CANONNAME - #define AI_CANONNAME 0 - #endif - #ifndef AI_NUMERICHOST - #define AI_NUMERICHOST 0 - #endif - #ifndef AI_NUMERICSERV - #define AI_NUMERICSERV 0 - #endif - #ifndef AI_ALL - #define AI_ALL 0 - #endif - #ifndef AI_ADDRCONFIG - #define AI_ADDRCONFIG 0 - #endif - #ifndef AI_V4MAPPED - #define AI_V4MAPPED 0 - #endif -#endif - - -#if defined(POCO_HAVE_SALEN) - #define poco_set_sa_len(pSA, len) (pSA)->sa_len = (len) - #define poco_set_sin_len(pSA) (pSA)->sin_len = sizeof(struct sockaddr_in) - #if defined(POCO_HAVE_IPv6) - #define poco_set_sin6_len(pSA) (pSA)->sin6_len = sizeof(struct sockaddr_in6) - #endif -#else - #define poco_set_sa_len(pSA, len) (void) 0 - #define poco_set_sin_len(pSA) (void) 0 - #define poco_set_sin6_len(pSA) (void) 0 -#endif - - -#ifndef INADDR_NONE - #define INADDR_NONE 0xffffffff -#endif - -#ifndef INADDR_ANY - #define INADDR_ANY 0x00000000 -#endif - -#ifndef INADDR_BROADCAST - #define INADDR_BROADCAST 0xffffffff -#endif - -#ifndef INADDR_LOOPBACK - #define INADDR_LOOPBACK 0x7f000001 -#endif - -#ifndef INADDR_UNSPEC_GROUP - #define INADDR_UNSPEC_GROUP 0xe0000000 -#endif - -#ifndef INADDR_ALLHOSTS_GROUP - #define INADDR_ALLHOSTS_GROUP 0xe0000001 -#endif - -#ifndef INADDR_ALLRTRS_GROUP - #define INADDR_ALLRTRS_GROUP 0xe0000002 -#endif - -#ifndef INADDR_MAX_LOCAL_GROUP - #define INADDR_MAX_LOCAL_GROUP 0xe00000ff -#endif - -#if defined(POCO_ARCH_BIG_ENDIAN) - #define poco_ntoh_16(x) (x) - #define poco_ntoh_32(x) (x) -#else - #define poco_ntoh_16(x) \ - ((((x) >> 8) & 0x00ff) | (((x) << 8) & 0xff00)) - #define poco_ntoh_32(x) \ - ((((x) >> 24) & 0x000000ff) | (((x) >> 8) & 0x0000ff00) | (((x) << 8) & 0x00ff0000) | (((x) << 24) & 0xff000000)) -#endif -#define poco_hton_16(x) poco_ntoh_16(x) -#define poco_hton_32(x) poco_ntoh_32(x) - - -#if !defined(s6_addr16) - #if defined(POCO_OS_FAMILY_WINDOWS) - #define s6_addr16 u.Word - #else - #define s6_addr16 __u6_addr.__u6_addr16 - #endif -#endif - - -#if !defined(s6_addr32) - #if defined(POCO_OS_FAMILY_UNIX) - #if (POCO_OS == POCO_OS_SOLARIS) - #define s6_addr32 _S6_un._S6_u32 - #else - #define s6_addr32 __u6_addr.__u6_addr32 - #endif - #endif -#endif - - -#endif // Net_SocketDefs_INCLUDED diff --git a/contrib/libpoco/Net/include/Poco/Net/SocketImpl.h b/contrib/libpoco/Net/include/Poco/Net/SocketImpl.h deleted file mode 100644 index cfc17ccbf3a..00000000000 --- a/contrib/libpoco/Net/include/Poco/Net/SocketImpl.h +++ /dev/null @@ -1,469 +0,0 @@ -// -// SocketImpl.h -// -// $Id: //poco/1.4/Net/include/Poco/Net/SocketImpl.h#4 $ -// -// Library: Net -// Package: Sockets -// Module: SocketImpl -// -// Definition of the SocketImpl class. -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Net_SocketImpl_INCLUDED -#define Net_SocketImpl_INCLUDED - - -#include "Poco/Net/Net.h" -#include "Poco/Net/SocketDefs.h" -#include "Poco/Net/SocketAddress.h" -#include "Poco/RefCountedObject.h" -#include "Poco/Timespan.h" - - -namespace Poco { -namespace Net { - - -class Net_API SocketImpl: public Poco::RefCountedObject - /// This class encapsulates the Berkeley sockets API. - /// - /// Subclasses implement specific socket types like - /// stream or datagram sockets. - /// - /// You should not create any instances of this class. -{ -public: - enum SelectMode - { - SELECT_READ = 1, - SELECT_WRITE = 2, - SELECT_ERROR = 4 - }; - - virtual SocketImpl* acceptConnection(SocketAddress& clientAddr); - /// Get the next completed connection from the - /// socket's completed connection queue. - /// - /// If the queue is empty, waits until a connection - /// request completes. - /// - /// Returns a new TCP socket for the connection - /// with the client. - /// - /// The client socket's address is returned in clientAddr. - - virtual void connect(const SocketAddress& address); - /// Initializes the socket and establishes a connection to - /// the TCP server at the given address. - /// - /// Can also be used for UDP sockets. In this case, no - /// connection is established. Instead, incoming and outgoing - /// packets are restricted to the specified address. - - virtual void connect(const SocketAddress& address, const Poco::Timespan& timeout); - /// Initializes the socket, sets the socket timeout and - /// establishes a connection to the TCP server at the given address. - - virtual void connectNB(const SocketAddress& address); - /// Initializes the socket and establishes a connection to - /// the TCP server at the given address. Prior to opening the - /// connection the socket is set to nonblocking mode. - - virtual void bind(const SocketAddress& address, bool reuseAddress = false); - /// 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. - - virtual void bind6(const SocketAddress& address, bool reuseAddress = false, bool ipV6Only = false); - /// 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. - /// - /// 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); - /// Puts the socket into listening state. - /// - /// The socket becomes a passive socket that - /// can accept incoming connection requests. - /// - /// The backlog argument specifies the maximum - /// number of connections that can be queued - /// for this socket. - - virtual void close(); - /// Close the socket. - - virtual void shutdownReceive(); - /// Shuts down the receiving part of the socket connection. - - virtual void shutdownSend(); - /// Shuts down the sending part of the socket connection. - - virtual void shutdown(); - /// Shuts down both the receiving and the sending part - /// of the socket connection. - - virtual int sendBytes(const void* buffer, int length, int flags = 0); - /// Sends the contents of the given buffer through - /// the socket. - /// - /// Returns the number of bytes sent, which may be - /// less than the number of bytes specified. - /// - /// Certain socket implementations may also return a negative - /// value denoting a certain condition. - - virtual int receiveBytes(void* buffer, int length, int flags = 0); - /// Receives data from the socket and stores it - /// in buffer. Up to length bytes are received. - /// - /// Returns the number of bytes received. - /// - /// Certain socket implementations may also return a negative - /// value denoting a certain condition. - - virtual int sendTo(const void* buffer, int length, const SocketAddress& address, int flags = 0); - /// Sends the contents of the given buffer through - /// the socket to the given address. - /// - /// Returns the number of bytes sent, which may be - /// less than the number of bytes specified. - - virtual int receiveFrom(void* buffer, int length, SocketAddress& address, int flags = 0); - /// Receives data from the socket and stores it - /// in buffer. Up to length bytes are received. - /// Stores the address of the sender in address. - /// - /// Returns the number of bytes received. - - virtual void sendUrgent(unsigned char data); - /// Sends one byte of urgent data through - /// the socket. - /// - /// The data is sent with the MSG_OOB flag. - /// - /// The preferred way for a socket to receive urgent data - /// is by enabling the SO_OOBINLINE option. - - virtual int available(); - /// Returns the number of bytes available that can be read - /// without causing the socket to block. - - virtual bool poll(const Poco::Timespan& timeout, int mode); - /// Determines the status of the socket, using a - /// call to select(). - /// - /// The mode argument is constructed by combining the values - /// of the SelectMode enumeration. - /// - /// Returns true if the next operation corresponding to - /// mode will not block, false otherwise. - - virtual void setSendBufferSize(int size); - /// Sets the size of the send buffer. - - virtual int getSendBufferSize(); - /// Returns the size of the send buffer. - /// - /// The returned value may be different than the - /// value previously set with setSendBufferSize(), - /// as the system is free to adjust the value. - - virtual void setReceiveBufferSize(int size); - /// Sets the size of the receive buffer. - - virtual int getReceiveBufferSize(); - /// Returns the size of the receive buffer. - /// - /// The returned value may be different than the - /// value previously set with setReceiveBufferSize(), - /// as the system is free to adjust the value. - - virtual void setSendTimeout(const Poco::Timespan& timeout); - /// Sets the send timeout for the socket. - - virtual Poco::Timespan getSendTimeout(); - /// Returns the send timeout for the socket. - /// - /// The returned timeout may be different than the - /// timeout previously set with setSendTimeout(), - /// as the system is free to adjust the value. - - virtual void setReceiveTimeout(const Poco::Timespan& timeout); - /// Sets the send timeout for the socket. - /// - /// On systems that do not support SO_RCVTIMEO, a - /// workaround using poll() is provided. - - virtual Poco::Timespan getReceiveTimeout(); - /// Returns the receive timeout for the socket. - /// - /// The returned timeout may be different than the - /// timeout previously set with setReceiveTimeout(), - /// as the system is free to adjust the value. - - virtual SocketAddress address(); - /// Returns the IP address and port number of the socket. - - virtual SocketAddress peerAddress(); - /// Returns the IP address and port number of the peer socket. - - void setOption(int level, int option, int value); - /// Sets the socket option specified by level and option - /// to the given integer value. - - void setOption(int level, int option, unsigned value); - /// Sets the socket option specified by level and option - /// to the given integer value. - - void setOption(int level, int option, unsigned char value); - /// Sets the socket option specified by level and option - /// to the given integer value. - - void setOption(int level, int option, const Poco::Timespan& value); - /// Sets the socket option specified by level and option - /// to the given time value. - - void setOption(int level, int option, const IPAddress& value); - /// Sets the socket option specified by level and option - /// to the given time value. - - virtual void setRawOption(int level, int option, const void* value, poco_socklen_t length); - /// Sets the socket option specified by level and option - /// to the given time value. - - void getOption(int level, int option, int& value); - /// Returns the value of the socket option - /// specified by level and option. - - void getOption(int level, int option, unsigned& value); - /// Returns the value of the socket option - /// specified by level and option. - - void getOption(int level, int option, unsigned char& value); - /// Returns the value of the socket option - /// specified by level and option. - - void getOption(int level, int option, Poco::Timespan& value); - /// Returns the value of the socket option - /// specified by level and option. - - void getOption(int level, int option, IPAddress& value); - /// Returns the value of the socket option - /// specified by level and option. - - virtual void getRawOption(int level, int option, void* value, poco_socklen_t& length); - /// Returns the value of the socket option - /// specified by level and option. - - void setLinger(bool on, int seconds); - /// Sets the value of the SO_LINGER socket option. - - void getLinger(bool& on, int& seconds); - /// Returns the value of the SO_LINGER socket option. - - void setNoDelay(bool flag); - /// Sets the value of the TCP_NODELAY socket option. - - bool getNoDelay(); - /// Returns the value of the TCP_NODELAY socket option. - - void setKeepAlive(bool flag); - /// Sets the value of the SO_KEEPALIVE socket option. - - bool getKeepAlive(); - /// Returns the value of the SO_KEEPALIVE socket option. - - void setReuseAddress(bool flag); - /// Sets the value of the SO_REUSEADDR socket option. - - bool getReuseAddress(); - /// Returns the value of the SO_REUSEADDR socket option. - - void setReusePort(bool flag); - /// Sets the value of the SO_REUSEPORT socket option. - /// Does nothing if the socket implementation does not - /// support SO_REUSEPORT. - - bool getReusePort(); - /// Returns the value of the SO_REUSEPORT socket option. - /// - /// Returns false if the socket implementation does not - /// support SO_REUSEPORT. - - void setOOBInline(bool flag); - /// Sets the value of the SO_OOBINLINE socket option. - - bool getOOBInline(); - /// Returns the value of the SO_OOBINLINE socket option. - - void setBroadcast(bool flag); - /// Sets the value of the SO_BROADCAST socket option. - - bool getBroadcast(); - /// Returns the value of the SO_BROADCAST socket option. - - virtual void setBlocking(bool flag); - /// Sets the socket in blocking mode if flag is true, - /// disables blocking mode if flag is false. - - virtual bool getBlocking() const; - /// Returns the blocking mode of the socket. - /// This method will only work if the blocking modes of - /// the socket are changed via the setBlocking method! - - virtual bool secure() const; - /// Returns true iff the socket's connection is secure - /// (using SSL or TLS). - - int socketError(); - /// Returns the value of the SO_ERROR socket option. - - poco_socket_t sockfd() const; - /// Returns the socket descriptor for the - /// underlying native socket. - - void ioctl(poco_ioctl_request_t request, int& arg); - /// A wrapper for the ioctl system call. - - void ioctl(poco_ioctl_request_t request, void* arg); - /// A wrapper for the ioctl system call. - -#if defined(POCO_OS_FAMILY_UNIX) - int fcntl(poco_fcntl_request_t request); - /// A wrapper for the fcntl system call. - - int fcntl(poco_fcntl_request_t request, long arg); - /// A wrapper for the fcntl system call. -#endif - - bool initialized() const; - /// Returns true iff the underlying socket is initialized. - -protected: - SocketImpl(); - /// Creates a SocketImpl. - - SocketImpl(poco_socket_t sockfd); - /// Creates a SocketImpl using the given native socket. - - virtual ~SocketImpl(); - /// Destroys the SocketImpl. - /// Closes the socket if it is still open. - - virtual void init(int af); - /// Creates the underlying native socket. - /// - /// Subclasses must implement this method so - /// that it calls initSocket() with the - /// appropriate arguments. - /// - /// The default implementation creates a - /// stream socket. - - void initSocket(int af, int type, int proto = 0); - /// Creates the underlying native socket. - /// - /// The first argument, af, specifies the address family - /// used by the socket, which should be either AF_INET or - /// AF_INET6. - /// - /// The second argument, type, specifies the type of the - /// socket, which can be one of SOCK_STREAM, SOCK_DGRAM - /// or SOCK_RAW. - /// - /// The third argument, proto, is normally set to 0, - /// except for raw sockets. - - void reset(poco_socket_t fd = POCO_INVALID_SOCKET); - /// Allows subclasses to set the socket manually, iff no valid socket is set yet. - - static int lastError(); - /// Returns the last error code. - - static void error(); - /// Throws an appropriate exception for the last error. - - static void error(const std::string& arg); - /// Throws an appropriate exception for the last error. - - static void error(int code); - /// Throws an appropriate exception for the given error code. - - static void error(int code, const std::string& arg); - /// Throws an appropriate exception for the given error code. - -private: - SocketImpl(const SocketImpl&); - SocketImpl& operator = (const SocketImpl&); - - poco_socket_t _sockfd; -#if defined(POCO_BROKEN_TIMEOUTS) - Poco::Timespan _recvTimeout; - Poco::Timespan _sndTimeout; -#endif - bool _blocking; - - friend class Socket; - friend class SecureSocketImpl; -}; - - -// -// inlines -// -inline poco_socket_t SocketImpl::sockfd() const -{ - return _sockfd; -} - - -inline bool SocketImpl::initialized() const -{ - return _sockfd != POCO_INVALID_SOCKET; -} - - -inline int SocketImpl::lastError() -{ -#if defined(_WIN32) - return WSAGetLastError(); -#else - return errno; -#endif -} - - -inline bool SocketImpl::getBlocking() const -{ - return _blocking; -} - - -} } // namespace Poco::Net - - -#endif // Net_SocketImpl_INCLUDED diff --git a/contrib/libpoco/Net/include/Poco/Net/SocketNotification.h b/contrib/libpoco/Net/include/Poco/Net/SocketNotification.h deleted file mode 100644 index bf8c60d4cf3..00000000000 --- a/contrib/libpoco/Net/include/Poco/Net/SocketNotification.h +++ /dev/null @@ -1,155 +0,0 @@ -// -// SocketNotification.h -// -// $Id: //poco/1.4/Net/include/Poco/Net/SocketNotification.h#1 $ -// -// Library: Net -// Package: Reactor -// Module: SocketNotification -// -// Definition of the SocketNotification class. -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Net_SocketNotification_INCLUDED -#define Net_SocketNotification_INCLUDED - - -#include "Poco/Net/Net.h" -#include "Poco/Net/Socket.h" -#include "Poco/Notification.h" - - -namespace Poco { -namespace Net { - - -class SocketReactor; - - -class Net_API SocketNotification: public Poco::Notification - /// The base class for all notifications generated by - /// the SocketReactor. -{ -public: - explicit SocketNotification(SocketReactor* pReactor); - /// Creates the SocketNotification for the given SocketReactor. - - virtual ~SocketNotification(); - /// Destroys the SocketNotification. - - SocketReactor& source() const; - /// Returns the SocketReactor that generated the notification. - - Socket socket() const; - /// Returns the socket that caused the notification. - -private: - void setSocket(const Socket& socket); - - SocketReactor* _pReactor; - Socket _socket; - - friend class SocketNotifier; -}; - - -class Net_API ReadableNotification: public SocketNotification - /// This notification is sent if a socket has become readable. -{ -public: - ReadableNotification(SocketReactor* pReactor); - /// Creates the ReadableNotification for the given SocketReactor. - - ~ReadableNotification(); - /// Destroys the ReadableNotification. -}; - - -class Net_API WritableNotification: public SocketNotification - /// This notification is sent if a socket has become writable. -{ -public: - WritableNotification(SocketReactor* pReactor); - /// Creates the WritableNotification for the given SocketReactor. - - ~WritableNotification(); - /// Destroys the WritableNotification. -}; - - -class Net_API ErrorNotification: public SocketNotification - /// This notification is sent if a socket has signalled an error. -{ -public: - ErrorNotification(SocketReactor* pReactor); - /// Creates the ErrorNotification for the given SocketReactor. - - ~ErrorNotification(); - /// Destroys the ErrorNotification. -}; - - -class Net_API TimeoutNotification: public SocketNotification - /// This notification is sent if no other event has occured - /// for a specified time. -{ -public: - TimeoutNotification(SocketReactor* pReactor); - /// Creates the TimeoutNotification for the given SocketReactor. - - ~TimeoutNotification(); - /// Destroys the TimeoutNotification. -}; - - -class Net_API IdleNotification: public SocketNotification - /// This notification is sent when the SocketReactor does - /// not have any sockets to react to. -{ -public: - IdleNotification(SocketReactor* pReactor); - /// Creates the IdleNotification for the given SocketReactor. - - ~IdleNotification(); - /// Destroys the IdleNotification. -}; - - -class Net_API ShutdownNotification: public SocketNotification - /// This notification is sent when the SocketReactor is - /// about to shut down. -{ -public: - ShutdownNotification(SocketReactor* pReactor); - /// Creates the ShutdownNotification for the given SocketReactor. - - ~ShutdownNotification(); - /// Destroys the ShutdownNotification. -}; - - -// -// inlines -// -inline SocketReactor& SocketNotification::source() const -{ - return *_pReactor; -} - - -inline Socket SocketNotification::socket() const -{ - return _socket; -} - - -} } // namespace Poco::Net - - -#endif // Net_SocketNotification_INCLUDED diff --git a/contrib/libpoco/Net/include/Poco/Net/SocketNotifier.h b/contrib/libpoco/Net/include/Poco/Net/SocketNotifier.h deleted file mode 100644 index 6d491136195..00000000000 --- a/contrib/libpoco/Net/include/Poco/Net/SocketNotifier.h +++ /dev/null @@ -1,112 +0,0 @@ -// -// SocketNotifier.h -// -// $Id: //poco/1.4/Net/include/Poco/Net/SocketNotifier.h#1 $ -// -// Library: Net -// Package: Reactor -// Module: SocketNotifier -// -// Definition of the SocketNotifier class. -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Net_SocketNotifier_INCLUDED -#define Net_SocketNotifier_INCLUDED - - -#include "Poco/Net/Net.h" -#include "Poco/Net/Socket.h" -#include "Poco/RefCountedObject.h" -#include "Poco/NotificationCenter.h" -#include "Poco/Observer.h" -#include - - -namespace Poco { -namespace Net { - - -class Socket; -class SocketReactor; -class SocketNotification; - - -class Net_API SocketNotifier: public Poco::RefCountedObject - /// This class is used internally by SocketReactor - /// to notify registered event handlers of socket events. -{ -public: - explicit SocketNotifier(const Socket& socket); - /// Creates the SocketNotifier for the given socket. - - void addObserver(SocketReactor* pReactor, const Poco::AbstractObserver& observer); - /// Adds the given observer. - - void removeObserver(SocketReactor* pReactor, const Poco::AbstractObserver& observer); - /// Removes the given observer. - - bool hasObserver(const Poco::AbstractObserver& observer) const; - /// Returns true if the given observer is registered. - - bool accepts(SocketNotification* pNotification); - /// Returns true if there is at least one observer for the given notification. - - void dispatch(SocketNotification* pNotification); - /// Dispatches the notification to all observers. - - bool hasObservers() const; - /// Returns true if there are subscribers. - - std::size_t countObservers() const; - /// Returns the number of subscribers; - -protected: - ~SocketNotifier(); - /// Destroys the SocketNotifier. - -private: - typedef std::multiset EventSet; - - EventSet _events; - Poco::NotificationCenter _nc; - Socket _socket; -}; - - -// -// inlines -// -inline bool SocketNotifier::accepts(SocketNotification* pNotification) -{ - return _events.find(pNotification) != _events.end(); -} - - -inline bool SocketNotifier::hasObserver(const Poco::AbstractObserver& observer) const -{ - return _nc.hasObserver(observer); -} - - -inline bool SocketNotifier::hasObservers() const -{ - return _nc.hasObservers(); -} - - -inline std::size_t SocketNotifier::countObservers() const -{ - return _nc.countObservers(); -} - - -} } // namespace Poco::Net - - -#endif // Net_SocketNotifier_INCLUDED diff --git a/contrib/libpoco/Net/include/Poco/Net/SocketReactor.h b/contrib/libpoco/Net/include/Poco/Net/SocketReactor.h deleted file mode 100644 index a39e9d25b27..00000000000 --- a/contrib/libpoco/Net/include/Poco/Net/SocketReactor.h +++ /dev/null @@ -1,237 +0,0 @@ -// -// SocketReactor.h -// -// $Id: //poco/1.4/Net/include/Poco/Net/SocketReactor.h#1 $ -// -// Library: Net -// Package: Reactor -// Module: SocketReactor -// -// Definition of the SocketReactor class. -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Net_SocketReactor_INCLUDED -#define Net_SocketReactor_INCLUDED - - -#include "Poco/Net/Net.h" -#include "Poco/Net/Socket.h" -#include "Poco/Runnable.h" -#include "Poco/Timespan.h" -#include "Poco/Observer.h" -#include "Poco/AutoPtr.h" -#include - - -namespace Poco { - - -class Thread; - - -namespace Net { - - -class Socket; -class SocketNotification; -class SocketNotifier; - - -class Net_API SocketReactor: public Poco::Runnable - /// This class, which is part of the Reactor pattern, - /// implements the "Initiation Dispatcher". - /// - /// The Reactor pattern has been described in the book - /// "Pattern Languages of Program Design" by Jim Coplien - /// and Douglas C. Schmidt (Addison Wesley, 1995). - /// - /// The Reactor design pattern handles service requests that - /// are delivered concurrently to an application by one or more - /// clients. Each service in an application may consist of several - /// methods and is represented by a separate event handler. The event - /// handler is responsible for servicing service-specific requests. - /// The SocketReactor dispatches the event handlers. - /// - /// Event handlers (any class can be an event handler - there - /// is no base class for event handlers) can be registered - /// with the addEventHandler() method and deregistered with - /// the removeEventHandler() method. - /// - /// An event handler is always registered for a certain socket, - /// which is given in the call to addEventHandler(). Any method - /// of the event handler class can be registered to handle the - /// event - the only requirement is that the method takes - /// a pointer to an instance of SocketNotification (or a subclass of it) - /// as argument. - /// - /// Once started, the SocketReactor waits for events - /// on the registered sockets, using Socket::select(). - /// If an event is detected, the corresponding event handler - /// is invoked. There are five event types (and corresponding - /// notification classes) defined: ReadableNotification, WritableNotification, - /// ErrorNotification, TimeoutNotification, IdleNotification and - /// ShutdownNotification. - /// - /// The ReadableNotification will be dispatched if a socket becomes - /// readable. The WritableNotification will be dispatched if a socket - /// becomes writable. The ErrorNotification will be dispatched if - /// there is an error condition on a socket. - /// - /// If the timeout expires and no event has occured, a - /// TimeoutNotification will be dispatched to all event handlers - /// registered for it. This is done in the onTimeout() method - /// which can be overridden by subclasses to perform custom - /// timeout processing. - /// - /// If there are no sockets for the SocketReactor to pass to - /// Socket::select(), an IdleNotification will be dispatched to - /// all event handlers registered for it. This is done in the - /// onIdle() method which can be overridden by subclasses - /// to perform custom idle processing. Since onIdle() will be - /// called repeatedly in a loop, it is recommended to do a - /// short sleep or yield in the event handler. - /// - /// Finally, when the SocketReactor is about to shut down (as a result - /// of stop() being called), it dispatches a ShutdownNotification - /// to all event handlers. This is done in the onShutdown() method - /// which can be overridded by subclasses to perform custom - /// shutdown processing. - /// - /// The SocketReactor is implemented so that it can - /// run in its own thread. It is also possible to run - /// multiple SocketReactors in parallel, as long as - /// they work on different sockets. - /// - /// It is safe to call addEventHandler() and removeEventHandler() - /// from another thread while the SocketReactor is running. Also, - /// it is safe to call addEventHandler() and removeEventHandler() - /// from event handlers. -{ -public: - SocketReactor(); - /// Creates the SocketReactor. - - explicit SocketReactor(const Poco::Timespan& timeout); - /// Creates the SocketReactor, using the given timeout. - - virtual ~SocketReactor(); - /// Destroys the SocketReactor. - - void run(); - /// Runs the SocketReactor. The reactor will run - /// until stop() is called (in a separate thread). - - void stop(); - /// Stops the SocketReactor. - /// - /// The reactor will be stopped when the next event - /// (including a timeout event) occurs. - - void wakeUp(); - /// Wakes up idle reactor. - - void setTimeout(const Poco::Timespan& timeout); - /// Sets the timeout. - /// - /// If no other event occurs for the given timeout - /// interval, a timeout event is sent to all event listeners. - /// - /// The default timeout is 250 milliseconds; - /// - /// The timeout is passed to the Socket::select() - /// method. - - const Poco::Timespan& getTimeout() const; - /// Returns the timeout. - - void addEventHandler(const Socket& socket, const Poco::AbstractObserver& observer); - /// Registers an event handler with the SocketReactor. - /// - /// Usage: - /// Poco::Observer obs(*this, &MyEventHandler::handleMyEvent); - /// reactor.addEventHandler(obs); - - bool hasEventHandler(const Socket& socket, const Poco::AbstractObserver& observer); - /// Returns true if the observer is reistered with SocketReactor for the given socket. - - void removeEventHandler(const Socket& socket, const Poco::AbstractObserver& observer); - /// Unregisters an event handler with the SocketReactor. - /// - /// Usage: - /// Poco::Observer obs(*this, &MyEventHandler::handleMyEvent); - /// reactor.removeEventHandler(obs); - -protected: - virtual void onTimeout(); - /// Called if the timeout expires and no other events are available. - /// - /// Can be overridden by subclasses. The default implementation - /// dispatches the TimeoutNotification and thus should be called by overriding - /// implementations. - - virtual void onIdle(); - /// Called if no sockets are available to call select() on. - /// - /// Can be overridden by subclasses. The default implementation - /// dispatches the IdleNotification and thus should be called by overriding - /// implementations. - - virtual void onShutdown(); - /// Called when the SocketReactor is about to terminate. - /// - /// Can be overridden by subclasses. The default implementation - /// dispatches the ShutdownNotification and thus should be called by overriding - /// implementations. - - virtual void onBusy(); - /// Called when the SocketReactor is busy and at least one notification - /// has been dispatched. - /// - /// Can be overridden by subclasses to perform additional - /// periodic tasks. The default implementation does nothing. - - void dispatch(const Socket& socket, SocketNotification* pNotification); - /// Dispatches the given notification to all observers - /// registered for the given socket. - - void dispatch(SocketNotification* pNotification); - /// Dispatches the given notification to all observers. - -private: - typedef Poco::AutoPtr NotifierPtr; - typedef Poco::AutoPtr NotificationPtr; - typedef std::map EventHandlerMap; - - void dispatch(NotifierPtr& pNotifier, SocketNotification* pNotification); - - enum - { - DEFAULT_TIMEOUT = 250000 - }; - - bool _stop; - Poco::Timespan _timeout; - EventHandlerMap _handlers; - NotificationPtr _pReadableNotification; - NotificationPtr _pWritableNotification; - NotificationPtr _pErrorNotification; - NotificationPtr _pTimeoutNotification; - NotificationPtr _pIdleNotification; - NotificationPtr _pShutdownNotification; - Poco::FastMutex _mutex; - Poco::Thread* _pThread; - - friend class SocketNotifier; -}; - - -} } // namespace Poco::Net - - -#endif // Net_SocketReactor_INCLUDED diff --git a/contrib/libpoco/Net/include/Poco/Net/SocketStream.h b/contrib/libpoco/Net/include/Poco/Net/SocketStream.h deleted file mode 100644 index 3a5580930a9..00000000000 --- a/contrib/libpoco/Net/include/Poco/Net/SocketStream.h +++ /dev/null @@ -1,179 +0,0 @@ -// -// SocketStream.h -// -// $Id: //poco/1.4/Net/include/Poco/Net/SocketStream.h#1 $ -// -// Library: Net -// Package: Sockets -// Module: SocketStream -// -// Definition of the SocketStream class. -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Net_SocketStream_INCLUDED -#define Net_SocketStream_INCLUDED - - -#include "Poco/Net/Net.h" -#include "Poco/Net/StreamSocket.h" -#include "Poco/BufferedBidirectionalStreamBuf.h" -#include -#include - - -namespace Poco { -namespace Net { - - -class StreamSocketImpl; - - -class Net_API SocketStreamBuf: public Poco::BufferedBidirectionalStreamBuf - /// This is the streambuf class used for reading from and writing to a socket. -{ -public: - SocketStreamBuf(const Socket& socket); - /// Creates a SocketStreamBuf with the given socket. - /// - /// The socket's SocketImpl must be a StreamSocketImpl, - /// otherwise an InvalidArgumentException is thrown. - - ~SocketStreamBuf(); - /// Destroys the SocketStreamBuf. - - StreamSocketImpl* socketImpl() const; - /// Returns the internal SocketImpl. - -protected: - int readFromDevice(char* buffer, std::streamsize length); - int writeToDevice(const char* buffer, std::streamsize length); - -private: - enum - { - STREAM_BUFFER_SIZE = 1024 - }; - - StreamSocketImpl* _pImpl; -}; - - -class Net_API SocketIOS: public virtual std::ios - /// The base class for SocketStream, SocketInputStream and - /// SocketOutputStream. - /// - /// This class is needed to ensure the correct initialization - /// order of the stream buffer and base classes. -{ -public: - SocketIOS(const Socket& socket); - /// Creates the SocketIOS with the given socket. - /// - /// The socket's SocketImpl must be a StreamSocketImpl, - /// otherwise an InvalidArgumentException is thrown. - - ~SocketIOS(); - /// Destroys the SocketIOS. - /// - /// Flushes the buffer, but does not close the socket. - - SocketStreamBuf* rdbuf(); - /// Returns a pointer to the internal SocketStreamBuf. - - void close(); - /// Flushes the stream and closes the socket. - - StreamSocket socket() const; - /// Returns the underlying socket. - -protected: - SocketStreamBuf _buf; -}; - - -class Net_API SocketOutputStream: public SocketIOS, public std::ostream - /// An output stream for writing to a socket. -{ -public: - explicit SocketOutputStream(const Socket& socket); - /// Creates the SocketOutputStream with the given socket. - /// - /// The socket's SocketImpl must be a StreamSocketImpl, - /// otherwise an InvalidArgumentException is thrown. - - ~SocketOutputStream(); - /// Destroys the SocketOutputStream. - /// - /// Flushes the buffer, but does not close the socket. -}; - - -class Net_API SocketInputStream: public SocketIOS, public std::istream - /// An input stream for reading from a socket. - /// - /// When using formatted input from a SocketInputStream, - /// always ensure that a receive timeout is set for the - /// socket. Otherwise your program might unexpectedly - /// hang. - /// - /// However, using formatted input from a SocketInputStream - /// is not recommended, due to the read-ahead behavior of - /// istream with formatted reads. -{ -public: - explicit SocketInputStream(const Socket& socket); - /// Creates the SocketInputStream with the given socket. - /// - /// The socket's SocketImpl must be a StreamSocketImpl, - /// otherwise an InvalidArgumentException is thrown. - - ~SocketInputStream(); - /// Destroys the SocketInputStream. -}; - - -class Net_API SocketStream: public SocketIOS, public std::iostream - /// An bidirectional stream for reading from and writing to a socket. - /// - /// When using formatted input from a SocketStream, - /// always ensure that a receive timeout is set for the - /// socket. Otherwise your program might unexpectedly - /// hang. - /// - /// However, using formatted input from a SocketStream - /// is not recommended, due to the read-ahead behavior of - /// istream with formatted reads. -{ -public: - explicit SocketStream(const Socket& socket); - /// Creates the SocketStream with the given socket. - /// - /// The socket's SocketImpl must be a StreamSocketImpl, - /// otherwise an InvalidArgumentException is thrown. - - ~SocketStream(); - /// Destroys the SocketStream. - /// - /// Flushes the buffer, but does not close the socket. -}; - - -// -// inlines -// -inline StreamSocketImpl* SocketStreamBuf::socketImpl() const -{ - return _pImpl; -} - - -} } // namespace Poco::Net - - -#endif // Net_SocketStream_INCLUDED diff --git a/contrib/libpoco/Net/include/Poco/Net/StreamSocket.h b/contrib/libpoco/Net/include/Poco/Net/StreamSocket.h deleted file mode 100644 index 987da84899f..00000000000 --- a/contrib/libpoco/Net/include/Poco/Net/StreamSocket.h +++ /dev/null @@ -1,182 +0,0 @@ -// -// StreamSocket.h -// -// $Id: //poco/1.4/Net/include/Poco/Net/StreamSocket.h#1 $ -// -// Library: Net -// Package: Sockets -// Module: StreamSocket -// -// Definition of the StreamSocket class. -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Net_StreamSocket_INCLUDED -#define Net_StreamSocket_INCLUDED - - -#include "Poco/Net/Net.h" -#include "Poco/Net/Socket.h" -#include "Poco/FIFOBuffer.h" - - -namespace Poco { -namespace Net { - - -class StreamSocketImpl; - - -class Net_API StreamSocket: public Socket - /// This class provides an interface to a - /// TCP stream socket. -{ -public: - StreamSocket(); - /// Creates an unconnected stream socket. - /// - /// Before sending or receiving data, the socket - /// must be connected with a call to connect(). - - explicit StreamSocket(const SocketAddress& address); - /// Creates a stream socket and connects it to - /// the socket specified by address. - - explicit StreamSocket(IPAddress::Family family); - /// Creates an unconnected stream socket - /// for the given address family. - /// - /// This is useful if certain socket options - /// (like send and receive buffer) sizes, that must - /// be set before connecting the socket, will be - /// set later on. - - StreamSocket(const Socket& socket); - /// Creates the StreamSocket with the SocketImpl - /// from another socket. The SocketImpl must be - /// a StreamSocketImpl, otherwise an InvalidArgumentException - /// will be thrown. - - virtual ~StreamSocket(); - /// Destroys the StreamSocket. - - StreamSocket& operator = (const Socket& socket); - /// Assignment operator. - /// - /// Releases the socket's SocketImpl and - /// attaches the SocketImpl from the other socket and - /// increments the reference count of the SocketImpl. - - void connect(const SocketAddress& address); - /// Initializes the socket and establishes a connection to - /// the TCP server at the given address. - /// - /// Can also be used for UDP sockets. In this case, no - /// connection is established. Instead, incoming and outgoing - /// packets are restricted to the specified address. - - void connect(const SocketAddress& address, const Poco::Timespan& timeout); - /// Initializes the socket, sets the socket timeout and - /// establishes a connection to the TCP server at the given address. - - void connectNB(const SocketAddress& address); - /// Initializes the socket and establishes a connection to - /// the TCP server at the given address. Prior to opening the - /// connection the socket is set to nonblocking mode. - - void shutdownReceive(); - /// Shuts down the receiving part of the socket connection. - - void shutdownSend(); - /// Shuts down the sending part of the socket connection. - - void shutdown(); - /// Shuts down both the receiving and the sending part - /// of the socket connection. - - int sendBytes(const void* buffer, int length, int flags = 0); - /// Sends the contents of the given buffer through - /// the socket. - /// - /// Returns the number of bytes sent, which may be - /// less than the number of bytes specified. - /// - /// Certain socket implementations may also return a negative - /// value denoting a certain condition. - - int sendBytes(Poco::FIFOBuffer& buffer); - /// Sends the contents of the given buffer through - /// the socket. FIFOBuffer has writable/readable transiton - /// notifications which may be enabled to notify the caller when - /// the buffer transitions between empty, partially full and - /// full states. - /// - /// Returns the number of bytes sent, which may be - /// less than the number of bytes specified. - /// - /// Certain socket implementations may also return a negative - /// value denoting a certain condition. - - int receiveBytes(void* buffer, int length, int flags = 0); - /// Receives data from the socket and stores it - /// in buffer. Up to length bytes are received. - /// - /// Returns the number of bytes received. - /// A return value of 0 means a graceful shutdown - /// of the connection from the peer. - /// - /// Throws a TimeoutException if a receive timeout has - /// been set and nothing is received within that interval. - /// Throws a NetException (or a subclass) in case of other errors. - - int receiveBytes(Poco::FIFOBuffer& buffer); - /// Receives data from the socket and stores it - /// in buffer. Up to length bytes are received. FIFOBuffer has - /// writable/readable transiton notifications which may be enabled - /// to notify the caller when the buffer transitions between empty, - /// partially full and full states. - /// - /// Returns the number of bytes received. - /// A return value of 0 means a graceful shutdown - /// of the connection from the peer. - /// - /// Throws a TimeoutException if a receive timeout has - /// been set and nothing is received within that interval. - /// Throws a NetException (or a subclass) in case of other errors. - - void sendUrgent(unsigned char data); - /// Sends one byte of urgent data through - /// the socket. - /// - /// The data is sent with the MSG_OOB flag. - /// - /// The preferred way for a socket to receive urgent data - /// is by enabling the SO_OOBINLINE option. - - StreamSocket(SocketImpl* pImpl); - /// Creates the Socket and attaches the given SocketImpl. - /// The socket takes owership of the SocketImpl. - /// - /// The SocketImpl must be a StreamSocketImpl, otherwise - /// an InvalidArgumentException will be thrown. - -private: - enum - { - BUFFER_SIZE = 1024 - }; - - friend class ServerSocket; - friend class SocketIOS; -}; - - -} } // namespace Poco::Net - - -#endif // Net_StreamSocket_INCLUDED diff --git a/contrib/libpoco/Net/include/Poco/Net/StreamSocketImpl.h b/contrib/libpoco/Net/include/Poco/Net/StreamSocketImpl.h deleted file mode 100644 index ee91283a91c..00000000000 --- a/contrib/libpoco/Net/include/Poco/Net/StreamSocketImpl.h +++ /dev/null @@ -1,61 +0,0 @@ -// -// StreamSocketImpl.h -// -// $Id: //poco/1.4/Net/include/Poco/Net/StreamSocketImpl.h#1 $ -// -// Library: Net -// Package: Sockets -// Module: StreamSocketImpl -// -// Definition of the StreamSocketImpl class. -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Net_StreamSocketImpl_INCLUDED -#define Net_StreamSocketImpl_INCLUDED - - -#include "Poco/Net/Net.h" -#include "Poco/Net/SocketImpl.h" - - -namespace Poco { -namespace Net { - - -class Net_API StreamSocketImpl: public SocketImpl - /// This class implements a TCP socket. -{ -public: - StreamSocketImpl(); - /// Creates a StreamSocketImpl. - - explicit StreamSocketImpl(IPAddress::Family addressFamily); - /// Creates a SocketImpl, with the underlying - /// socket initialized for the given address family. - - StreamSocketImpl(poco_socket_t sockfd); - /// Creates a StreamSocketImpl using the given native socket. - - virtual int sendBytes(const void* buffer, int length, int flags = 0); - /// Ensures that all data in buffer is sent if the socket - /// is blocking. In case of a non-blocking socket, sends as - /// many bytes as possible. - /// - /// Returns the number of bytes sent. The return value may also be - /// negative to denote some special condition. - -protected: - virtual ~StreamSocketImpl(); -}; - - -} } // namespace Poco::Net - - -#endif // Net_StreamSocketImpl_INCLUDED diff --git a/contrib/libpoco/Net/include/Poco/Net/StringPartSource.h b/contrib/libpoco/Net/include/Poco/Net/StringPartSource.h deleted file mode 100644 index 4440ff63535..00000000000 --- a/contrib/libpoco/Net/include/Poco/Net/StringPartSource.h +++ /dev/null @@ -1,73 +0,0 @@ -// -// StringPartSource.h -// -// $Id: //poco/1.4/Net/include/Poco/Net/StringPartSource.h#1 $ -// -// Library: Net -// Package: Messages -// Module: StringPartSource -// -// Definition of the StringPartSource class. -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Net_StringPartSource_INCLUDED -#define Net_StringPartSource_INCLUDED - - -#include "Poco/Net/Net.h" -#include "Poco/Net/PartSource.h" -#include - - -namespace Poco { -namespace Net { - - -class Net_API StringPartSource: public PartSource - /// An implementation of PartSource for strings. -{ -public: - StringPartSource(const std::string& str); - /// Creates the StringPartSource for the given string. - /// - /// The MIME type is set to text/plain. - - StringPartSource(const std::string& str, const std::string& mediaType); - /// Creates the StringPartSource for the given - /// string and MIME type. - - StringPartSource(const std::string& str, const std::string& mediaType, const std::string& filename); - /// Creates the StringPartSource for the given - /// string, MIME type and filename. - - ~StringPartSource(); - /// Destroys the StringPartSource. - - std::istream& stream(); - /// Returns a string input stream for the string. - - const std::string& filename() const; - /// Returns the filename portion of the path. - - std::streamsize getContentLength() const; - /// Returns the string size. - -private: - std::istringstream _istr; - std::string _filename; - - StringPartSource(const StringPartSource&); - StringPartSource& operator = (const StringPartSource&); -}; - - -} } // namespace Poco::Net - - -#endif // Net_StringPartSource_INCLUDED diff --git a/contrib/libpoco/Net/include/Poco/Net/TCPServer.h b/contrib/libpoco/Net/include/Poco/Net/TCPServer.h deleted file mode 100644 index 78fd718d451..00000000000 --- a/contrib/libpoco/Net/include/Poco/Net/TCPServer.h +++ /dev/null @@ -1,208 +0,0 @@ -// -// TCPServer.h -// -// $Id: //poco/1.4/Net/include/Poco/Net/TCPServer.h#1 $ -// -// Library: Net -// Package: TCPServer -// Module: TCPServer -// -// Definition of the TCPServer class. -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Net_TCPServer_INCLUDED -#define Net_TCPServer_INCLUDED - - -#include "Poco/Net/Net.h" -#include "Poco/Net/ServerSocket.h" -#include "Poco/Net/TCPServerConnectionFactory.h" -#include "Poco/Net/TCPServerParams.h" -#include "Poco/Runnable.h" -#include "Poco/Thread.h" -#include "Poco/ThreadPool.h" - -#include - - -namespace Poco { -namespace Net { - - -class TCPServerDispatcher; - - -class Net_API TCPServer: public Poco::Runnable - /// This class implements a multithreaded TCP server. - /// - /// The server uses a ServerSocket to listen for incoming - /// connections. The ServerSocket must have been bound to - /// an address before it is passed to the TCPServer constructor. - /// Additionally, the ServerSocket must be put into listening - /// state before the TCPServer is started by calling the start() - /// method. - /// - /// The server uses a thread pool to assign threads to incoming - /// connections. Before incoming connections are assigned to - /// a connection thread, they are put into a queue. - /// Connection threads fetch new connections from the queue as soon - /// as they become free. Thus, a connection thread may serve more - /// than one connection. - /// - /// As soon as a connection thread fetches the next connection from - /// the queue, it creates a TCPServerConnection object for it - /// (using the TCPServerConnectionFactory passed to the constructor) - /// and calls the TCPServerConnection's start() method. When the - /// start() method returns, the connection object is deleted. - /// - /// The number of connection threads is adjusted dynamically, depending - /// on the number of connections waiting to be served. - /// - /// It is possible to specify a maximum number of queued connections. - /// This prevents the connection queue from overflowing in the - /// case of an extreme server load. In such a case, connections that - /// cannot be queued are silently and immediately closed. - /// - /// TCPServer uses a separate thread to accept incoming connections. - /// Thus, the call to start() returns immediately, and the server - /// continues to run in the background. - /// - /// To stop the server from accepting new connections, call stop(). - /// - /// After calling stop(), no new connections will be accepted and - /// all queued connections will be discarded. - /// Already served connections, however, will continue being served. -{ -public: - TCPServer(TCPServerConnectionFactory::Ptr pFactory, Poco::UInt16 portNumber = 0, TCPServerParams::Ptr pParams = 0); - /// Creates the TCPServer, with ServerSocket listening on the given port. - /// Default port is zero, allowing any availble port. The port number - /// can be queried through TCPServer::port() member. - /// - /// The server takes ownership of the TCPServerConnectionFactory - /// and deletes it when it's no longer needed. - /// - /// The server also takes ownership of the TCPServerParams object. - /// If no TCPServerParams object is given, the server's TCPServerDispatcher - /// creates its own one. - /// - /// New threads are taken from the default thread pool. - - TCPServer(TCPServerConnectionFactory::Ptr pFactory, const ServerSocket& socket, TCPServerParams::Ptr pParams = 0); - /// Creates the TCPServer, using the given ServerSocket. - /// - /// The server takes ownership of the TCPServerConnectionFactory - /// and deletes it when it's no longer needed. - /// - /// The server also takes ownership of the TCPServerParams object. - /// If no TCPServerParams object is given, the server's TCPServerDispatcher - /// creates its own one. - /// - /// New threads are taken from the default thread pool. - - TCPServer(TCPServerConnectionFactory::Ptr pFactory, Poco::ThreadPool& threadPool, const ServerSocket& socket, TCPServerParams::Ptr pParams = 0); - /// Creates the TCPServer, using the given ServerSocket. - /// - /// The server takes ownership of the TCPServerConnectionFactory - /// and deletes it when it's no longer needed. - /// - /// The server also takes ownership of the TCPServerParams object. - /// If no TCPServerParams object is given, the server's TCPServerDispatcher - /// creates its own one. - /// - /// New threads are taken from the given thread pool. - - virtual ~TCPServer(); - /// Destroys the TCPServer and its TCPServerConnectionFactory. - - const TCPServerParams& params() const; - /// Returns a const reference to the TCPServerParam object - /// used by the server's TCPServerDispatcher. - - void start(); - /// Starts the server. A new thread will be - /// created that waits for and accepts incoming - /// connections. - /// - /// Before start() is called, the ServerSocket passed to - /// TCPServer must have been bound and put into listening state. - - void stop(); - /// Stops the server. - /// - /// No new connections will be accepted. - /// Already handled connections will continue to be served. - /// - /// Once the server has been stopped, it cannot be restarted. - - int currentThreads() const; - /// Returns the number of currently used connection threads. - - int maxThreads() const; - /// Returns the maximum number of threads available. - - int totalConnections() const; - /// Returns the total number of handled connections. - - int currentConnections() const; - /// Returns the number of currently handled connections. - - int maxConcurrentConnections() const; - /// Returns the maximum number of concurrently handled connections. - - int queuedConnections() const; - /// Returns the number of queued connections. - - int refusedConnections() const; - /// Returns the number of refused connections. - - const ServerSocket& socket() const; - /// Returns the underlying server socket. - - Poco::UInt16 port() const; - /// Returns the port the server socket listens on. - -protected: - void run(); - /// Runs the server. The server will run until - /// the stop() method is called, or the server - /// object is destroyed, which implicitly calls - /// the stop() method. - - static std::string threadName(const ServerSocket& socket); - /// Returns a thread name for the server thread. - -private: - TCPServer(); - TCPServer(const TCPServer&); - TCPServer& operator = (const TCPServer&); - - ServerSocket _socket; - TCPServerDispatcher* _pDispatcher; - Poco::Thread _thread; - std::atomic _stopped; -}; - - -inline const ServerSocket& TCPServer::socket() const -{ - return _socket; -} - - -inline Poco::UInt16 TCPServer::port() const -{ - return _socket.address().port(); -} - - -} } // namespace Poco::Net - - -#endif // Net_TCPServer_INCLUDED diff --git a/contrib/libpoco/Net/include/Poco/Net/TCPServerConnection.h b/contrib/libpoco/Net/include/Poco/Net/TCPServerConnection.h deleted file mode 100644 index 2abbc65a689..00000000000 --- a/contrib/libpoco/Net/include/Poco/Net/TCPServerConnection.h +++ /dev/null @@ -1,88 +0,0 @@ -// -// TCPServerConnection.h -// -// $Id: //poco/1.4/Net/include/Poco/Net/TCPServerConnection.h#1 $ -// -// Library: Net -// Package: TCPServer -// Module: TCPServerConnection -// -// Definition of the TCPServerConnection class. -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Net_TCPServerConnection_INCLUDED -#define Net_TCPServerConnection_INCLUDED - - -#include "Poco/Net/Net.h" -#include "Poco/Net/StreamSocket.h" -#include "Poco/Runnable.h" - - -namespace Poco { -namespace Net { - - -class Net_API TCPServerConnection: public Poco::Runnable - /// The abstract base class for TCP server connections - /// created by TCPServer. - /// - /// Derived classes must override the run() method - /// (inherited from Runnable). Furthermore, a - /// TCPServerConnectionFactory must be provided for the subclass. - /// - /// The run() method must perform the complete handling - /// of the client connection. As soon as the run() method - /// returns, the server connection object is destroyed and - /// the connection is automatically closed. - /// - /// A new TCPServerConnection object will be created for - /// each new client connection that is accepted by - /// TCPServer. -{ -public: - TCPServerConnection(const StreamSocket& socket); - /// Creates the TCPServerConnection using the given - /// stream socket. - - virtual ~TCPServerConnection(); - /// Destroys the TCPServerConnection. - -protected: - StreamSocket& socket(); - /// Returns a reference to the underlying socket. - - void start(); - /// Calls run() and catches any exceptions that - /// might be thrown by run(). - -private: - TCPServerConnection(); - TCPServerConnection(const TCPServerConnection&); - TCPServerConnection& operator = (const TCPServerConnection&); - - StreamSocket _socket; - - friend class TCPServerDispatcher; -}; - - -// -// inlines -// -inline StreamSocket& TCPServerConnection::socket() -{ - return _socket; -} - - -} } // namespace Poco::Net - - -#endif // Net_TCPServerConnection_INCLUDED diff --git a/contrib/libpoco/Net/include/Poco/Net/TCPServerConnectionFactory.h b/contrib/libpoco/Net/include/Poco/Net/TCPServerConnectionFactory.h deleted file mode 100644 index 7b6a62a0ce1..00000000000 --- a/contrib/libpoco/Net/include/Poco/Net/TCPServerConnectionFactory.h +++ /dev/null @@ -1,91 +0,0 @@ -// -// TCPServerConnectionFactory.h -// -// $Id: //poco/1.4/Net/include/Poco/Net/TCPServerConnectionFactory.h#1 $ -// -// Library: Net -// Package: TCPServer -// Module: TCPServerConnectionFactory -// -// Definition of the TCPServerConnectionFactory class. -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Net_TCPServerConnectionFactory_INCLUDED -#define Net_TCPServerConnectionFactory_INCLUDED - - -#include "Poco/Net/Net.h" -#include "Poco/Net/TCPServerConnection.h" -#include "Poco/SharedPtr.h" - - -namespace Poco { -namespace Net { - - -class Net_API TCPServerConnectionFactory - /// A factory for TCPServerConnection objects. - /// - /// The TCPServer class uses a TCPServerConnectionFactory - /// to create a connection object for each new connection - /// it accepts. - /// - /// Subclasses must override the createConnection() - /// method. - /// - /// The TCPServerConnectionFactoryImpl template class - /// can be used to automatically instantiate a - /// TCPServerConnectionFactory for a given subclass - /// of TCPServerConnection. -{ -public: - typedef Poco::SharedPtr Ptr; - - virtual ~TCPServerConnectionFactory(); - /// Destroys the TCPServerConnectionFactory. - - virtual TCPServerConnection* createConnection(const StreamSocket& socket) = 0; - /// Creates an instance of a subclass of TCPServerConnection, - /// using the given StreamSocket. - -protected: - TCPServerConnectionFactory(); - /// Creates the TCPServerConnectionFactory. - -private: - TCPServerConnectionFactory(const TCPServerConnectionFactory&); - TCPServerConnectionFactory& operator = (const TCPServerConnectionFactory&); -}; - - -template -class TCPServerConnectionFactoryImpl: public TCPServerConnectionFactory - /// This template provides a basic implementation of - /// TCPServerConnectionFactory. -{ -public: - TCPServerConnectionFactoryImpl() - { - } - - ~TCPServerConnectionFactoryImpl() - { - } - - TCPServerConnection* createConnection(const StreamSocket& socket) - { - return new S(socket); - } -}; - - -} } // namespace Poco::Net - - -#endif // Net_TCPServerConnectionFactory_INCLUDED diff --git a/contrib/libpoco/Net/include/Poco/Net/TCPServerDispatcher.h b/contrib/libpoco/Net/include/Poco/Net/TCPServerDispatcher.h deleted file mode 100644 index 7a23eba2090..00000000000 --- a/contrib/libpoco/Net/include/Poco/Net/TCPServerDispatcher.h +++ /dev/null @@ -1,134 +0,0 @@ -// -// TCPServerDispatcher.h -// -// $Id: //poco/1.4/Net/include/Poco/Net/TCPServerDispatcher.h#1 $ -// -// Library: Net -// Package: TCPServer -// Module: TCPServerDispatcher -// -// Definition of the TCPServerDispatcher class. -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Net_TCPServerDispatcher_INCLUDED -#define Net_TCPServerDispatcher_INCLUDED - - -#include "Poco/Net/Net.h" -#include "Poco/Net/StreamSocket.h" -#include "Poco/Net/TCPServerConnectionFactory.h" -#include "Poco/Net/TCPServerParams.h" -#include "Poco/Runnable.h" -#include "Poco/NotificationQueue.h" -#include "Poco/ThreadPool.h" -#include "Poco/Mutex.h" - -#include - - -namespace Poco { -namespace Net { - - -class Net_API TCPServerDispatcher: public Poco::Runnable - /// A helper class for TCPServer that dispatches - /// connections to server connection threads. -{ -public: - TCPServerDispatcher(TCPServerConnectionFactory::Ptr pFactory, Poco::ThreadPool& threadPool, TCPServerParams::Ptr pParams); - /// Creates the TCPServerDispatcher. - /// - /// The dispatcher takes ownership of the TCPServerParams object. - /// If no TCPServerParams object is supplied, the TCPServerDispatcher - /// creates one. - - void duplicate(); - /// Increments the object's reference count. - - void release(); - /// Decrements the object's reference count - /// and deletes the object if the count - /// reaches zero. - - void run(); - /// Runs the dispatcher. - - void enqueue(const StreamSocket& socket); - /// Queues the given socket connection. - - void stop(); - /// Stops the dispatcher. - - int currentThreads() const; - /// Returns the number of currently used threads. - - int maxThreads() const; - /// Returns the maximum number of threads available. - - int totalConnections() const; - /// Returns the total number of handled connections. - - int currentConnections() const; - /// Returns the number of currently handled connections. - - int maxConcurrentConnections() const; - /// Returns the maximum number of concurrently handled connections. - - int queuedConnections() const; - /// Returns the number of queued connections. - - int refusedConnections() const; - /// Returns the number of refused connections. - - const TCPServerParams& params() const; - /// Returns a const reference to the TCPServerParam object. - -protected: - ~TCPServerDispatcher(); - /// Destroys the TCPServerDispatcher. - - void beginConnection(); - /// Updates the performance counters. - - void endConnection(); - /// Updates the performance counters. - -private: - TCPServerDispatcher(); - TCPServerDispatcher(const TCPServerDispatcher&); - TCPServerDispatcher& operator = (const TCPServerDispatcher&); - - int _rc; - TCPServerParams::Ptr _pParams; - int _currentThreads; - int _totalConnections; - int _currentConnections; - int _maxConcurrentConnections; - int _refusedConnections; - std::atomic _stopped; - Poco::NotificationQueue _queue; - TCPServerConnectionFactory::Ptr _pConnectionFactory; - Poco::ThreadPool& _threadPool; - mutable Poco::FastMutex _mutex; -}; - - -// -// inlines -// -inline const TCPServerParams& TCPServerDispatcher::params() const -{ - return *_pParams; -} - - -} } // namespace Poco::Net - - -#endif // Net_TCPServerDispatcher_INCLUDED diff --git a/contrib/libpoco/Net/include/Poco/Net/TCPServerParams.h b/contrib/libpoco/Net/include/Poco/Net/TCPServerParams.h deleted file mode 100644 index b3b0df4a09e..00000000000 --- a/contrib/libpoco/Net/include/Poco/Net/TCPServerParams.h +++ /dev/null @@ -1,139 +0,0 @@ -// -// TCPServerParams.h -// -// $Id: //poco/1.4/Net/include/Poco/Net/TCPServerParams.h#1 $ -// -// Library: Net -// Package: TCPServer -// Module: TCPServerParams -// -// Definition of the TCPServerParams class. -// -// Copyright (c) 2005-2007, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Net_TCPServerParams_INCLUDED -#define Net_TCPServerParams_INCLUDED - - -#include "Poco/Net/Net.h" -#include "Poco/RefCountedObject.h" -#include "Poco/Timespan.h" -#include "Poco/Thread.h" -#include "Poco/AutoPtr.h" - - -namespace Poco { -namespace Net { - - -class Net_API TCPServerParams: public Poco::RefCountedObject - /// This class is used to specify parameters to both the - /// TCPServer, as well as to TCPServerDispatcher objects. - /// - /// Subclasses may add new parameters to the class. -{ -public: - typedef Poco::AutoPtr Ptr; - - TCPServerParams(); - /// Creates the TCPServerParams. - /// - /// Sets the following default values: - /// - threadIdleTime: 10 seconds - /// - maxThreads: 0 - /// - maxQueued: 64 - - void setThreadIdleTime(const Poco::Timespan& idleTime); - /// Sets the maximum idle time for a thread before - /// it is terminated. - /// - /// The default idle time is 10 seconds; - - const Poco::Timespan& getThreadIdleTime() const; - /// Returns the maximum thread idle time. - - void setMaxQueued(int count); - /// Sets the maximum number of queued connections. - /// Must be greater than 0. - /// - /// If there are already the maximum number of connections - /// in the queue, new connections will be silently discarded. - /// - /// The default number is 64. - - int getMaxQueued() const; - /// Returns the maximum number of queued connections. - - void setMaxThreads(int count); - /// Sets the maximum number of simultaneous threads - /// available for this TCPServerDispatcher. - /// - /// Must be greater than or equal to 0. - /// If 0 is specified, the TCPServerDispatcher will - /// set this parameter to the number of available threads - /// in its thread pool. - /// - /// The thread pool used by the TCPServerDispatcher - /// must at least have the capacity for the given - /// number of threads. - - int getMaxThreads() const; - /// Returns the maximum number of simultaneous threads - /// available for this TCPServerDispatcher. - - void setThreadPriority(Poco::Thread::Priority prio); - /// Sets the priority of TCP server threads - /// created by TCPServer. - - Poco::Thread::Priority getThreadPriority() const; - /// Returns the priority of TCP server threads - /// created by TCPServer. - -protected: - virtual ~TCPServerParams(); - /// Destroys the TCPServerParams. - -private: - Poco::Timespan _threadIdleTime; - int _maxThreads; - int _maxQueued; - Poco::Thread::Priority _threadPriority; -}; - - -// -// inlines -// -inline const Poco::Timespan& TCPServerParams::getThreadIdleTime() const -{ - return _threadIdleTime; -} - - -inline int TCPServerParams::getMaxThreads() const -{ - return _maxThreads; -} - - -inline int TCPServerParams::getMaxQueued() const -{ - return _maxQueued; -} - - -inline Poco::Thread::Priority TCPServerParams::getThreadPriority() const -{ - return _threadPriority; -} - - -} } // namespace Poco::Net - - -#endif // Net_TCPServerParams_INCLUDED diff --git a/contrib/libpoco/Net/include/Poco/Net/WebSocket.h b/contrib/libpoco/Net/include/Poco/Net/WebSocket.h deleted file mode 100644 index 173eae68397..00000000000 --- a/contrib/libpoco/Net/include/Poco/Net/WebSocket.h +++ /dev/null @@ -1,249 +0,0 @@ -// -// WebSocket.h -// -// $Id: //poco/1.4/Net/include/Poco/Net/WebSocket.h#4 $ -// -// Library: Net -// Package: WebSocket -// Module: WebSocket -// -// Definition of the WebSocket class. -// -// Copyright (c) 2012, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Net_WebSocket_INCLUDED -#define Net_WebSocket_INCLUDED - - -#include "Poco/Net/Net.h" -#include "Poco/Net/StreamSocket.h" -#include "Poco/Net/HTTPCredentials.h" - - -namespace Poco { -namespace Net { - - -class WebSocketImpl; -class HTTPServerRequest; -class HTTPServerResponse; -class HTTPClientSession; - - -class Net_API WebSocket: public StreamSocket - /// This class implements a WebSocket according - /// to the WebSocket protocol specification in RFC 6455. - /// - /// Both client-side and server-side WebSockets - /// are supported. - /// - /// Server-side WebSockets are usually created from within - /// a HTTPRequestHandler. - /// - /// Client-side WebSockets are created using a HTTPClientSession. - /// - /// Note that special frames like PING must be handled at - /// application level. In the case of a PING, a PONG message - /// must be returned. -{ -public: - enum Mode - { - WS_SERVER, /// Server-side WebSocket. - WS_CLIENT /// Client-side WebSocket. - }; - - enum FrameFlags - /// Frame header flags. - { - FRAME_FLAG_FIN = 0x80, /// FIN bit: final fragment of a multi-fragment message. - FRAME_FLAG_RSV1 = 0x40, /// Reserved for future use. Must be zero. - FRAME_FLAG_RSV2 = 0x20, /// Reserved for future use. Must be zero. - FRAME_FLAG_RSV3 = 0x10, /// Reserved for future use. Must be zero. - }; - - enum FrameOpcodes - /// Frame header opcodes. - { - FRAME_OP_CONT = 0x00, /// Continuation frame. - FRAME_OP_TEXT = 0x01, /// Text frame. - FRAME_OP_BINARY = 0x02, /// Binary frame. - FRAME_OP_CLOSE = 0x08, /// Close connection. - FRAME_OP_PING = 0x09, /// Ping frame. - FRAME_OP_PONG = 0x0a, /// Pong frame. - FRAME_OP_BITMASK = 0x0f, /// Bit mask for opcodes. - FRAME_OP_SETRAW = 0x100 /// Set raw flags (for use with sendBytes() and FRAME_OP_CONT). - }; - - enum SendFlags - /// Combined header flags and opcodes for use with sendFrame(). - { - FRAME_TEXT = FRAME_FLAG_FIN | FRAME_OP_TEXT, - /// Use this for sending a single text (UTF-8) payload frame. - FRAME_BINARY = FRAME_FLAG_FIN | FRAME_OP_BINARY - /// Use this for sending a single binary payload frame. - }; - - enum StatusCodes - /// StatusCodes for CLOSE frames sent with shutdown(). - { - WS_NORMAL_CLOSE = 1000, - WS_ENDPOINT_GOING_AWAY = 1001, - WS_PROTOCOL_ERROR = 1002, - WS_PAYLOAD_NOT_ACCEPTABLE = 1003, - WS_RESERVED = 1004, - WS_RESERVED_NO_STATUS_CODE = 1005, - WS_RESERVED_ABNORMAL_CLOSE = 1006, - WS_MALFORMED_PAYLOAD = 1007, - WS_POLICY_VIOLATION = 1008, - WS_PAYLOAD_TOO_BIG = 1009, - WS_EXTENSION_REQUIRED = 1010, - WS_UNEXPECTED_CONDITION = 1011, - WS_RESERVED_TLS_FAILURE = 1015 - }; - - enum ErrorCodes - /// These error codes can be obtained from a WebSocketException - /// to determine the exact cause of the error. - { - WS_ERR_NO_HANDSHAKE = 1, - /// No Connection: Upgrade or Upgrade: websocket header in handshake request. - WS_ERR_HANDSHAKE_NO_VERSION = 2, - /// No Sec-WebSocket-Version header in handshake request. - WS_ERR_HANDSHAKE_UNSUPPORTED_VERSION = 3, - /// Unsupported WebSocket version requested by client. - WS_ERR_HANDSHAKE_NO_KEY = 4, - /// No Sec-WebSocket-Key header in handshake request. - WS_ERR_HANDSHAKE_ACCEPT = 5, - /// No Sec-WebSocket-Accept header or wrong value. - WS_ERR_UNAUTHORIZED = 6, - /// The server rejected the username or password for authentication. - WS_ERR_PAYLOAD_TOO_BIG = 10, - /// Payload too big for supplied buffer. - WS_ERR_INCOMPLETE_FRAME = 11 - /// Incomplete frame received. - }; - - WebSocket(HTTPServerRequest& request, HTTPServerResponse& response); - /// Creates a server-side WebSocket from within a - /// HTTPRequestHandler. - /// - /// First verifies that the request is a valid WebSocket upgrade - /// request. If so, completes the handshake by sending - /// a proper 101 response. - /// - /// Throws an exception if the request is not a proper WebSocket - /// upgrade request. - - WebSocket(HTTPClientSession& cs, HTTPRequest& request, HTTPResponse& response); - /// Creates a client-side WebSocket, using the given - /// HTTPClientSession and HTTPRequest for the initial handshake - /// (HTTP Upgrade request). - /// - /// Additional HTTP headers for the initial handshake request - /// (such as Origin or Sec-WebSocket-Protocol) can be given - /// in the request object. - /// - /// The result of the handshake can be obtained from the response - /// object. - - WebSocket(HTTPClientSession& cs, HTTPRequest& request, HTTPResponse& response, HTTPCredentials& credentials); - /// Creates a client-side WebSocket, using the given - /// HTTPClientSession and HTTPRequest for the initial handshake - /// (HTTP Upgrade request). - /// - /// The given credentials are used for authentication - /// if requested by the server. - /// - /// Additional HTTP headers for the initial handshake request - /// (such as Origin or Sec-WebSocket-Protocol) can be given - /// in the request object. - /// - /// The result of the handshake can be obtained from the response - /// object. - - WebSocket(const Socket& socket); - /// Creates a WebSocket from another Socket, which must be a WebSocket, - /// otherwise a Poco::InvalidArgumentException will be thrown. - - virtual ~WebSocket(); - /// Destroys the StreamSocket. - - WebSocket& operator = (const Socket& socket); - /// Assignment operator. - /// - /// The other socket must be a WebSocket, otherwise a Poco::InvalidArgumentException - /// will be thrown. - - void shutdown(); - /// Sends a Close control frame to the server end of - /// the connection to initiate an orderly shutdown - /// of the connection. - - void shutdown(Poco::UInt16 statusCode, const std::string& statusMessage = ""); - /// Sends a Close control frame to the server end of - /// the connection to initiate an orderly shutdown - /// of the connection. - - int sendFrame(const void* buffer, int length, int flags = FRAME_TEXT); - /// Sends the contents of the given buffer through - /// the socket as a single frame. - /// - /// Values from the FrameFlags, FrameOpcodes and SendFlags enumerations - /// can be specified in flags. - /// - /// Returns the number of bytes sent, which may be - /// less than the number of bytes specified. - /// - /// Certain socket implementations may also return a negative - /// value denoting a certain condition. - - int receiveFrame(void* buffer, int length, int& flags); - /// Receives a frame from the socket and stores it - /// in buffer. Up to length bytes are received. If - /// the frame's payload is larger, a WebSocketException - /// is thrown and the WebSocket connection must be - /// terminated. - /// - /// Returns the number of bytes received. - /// A return value of 0 means that the peer has - /// shut down or closed the connection. - /// - /// Throws a TimeoutException if a receive timeout has - /// been set and nothing is received within that interval. - /// Throws a NetException (or a subclass) in case of other errors. - /// - /// The frame flags and opcode (FrameFlags and FrameOpcodes) - /// is stored in flags. - - Mode mode() const; - /// Returns WS_SERVER if the WebSocket is a server-side - /// WebSocket, or WS_CLIENT otherwise. - - static const std::string WEBSOCKET_VERSION; - /// The WebSocket protocol version supported (13). - -protected: - static WebSocketImpl* accept(HTTPServerRequest& request, HTTPServerResponse& response); - static WebSocketImpl* connect(HTTPClientSession& cs, HTTPRequest& request, HTTPResponse& response, HTTPCredentials& credentials); - static WebSocketImpl* completeHandshake(HTTPClientSession& cs, HTTPResponse& response, const std::string& key); - static std::string computeAccept(const std::string& key); - static std::string createKey(); - -private: - WebSocket(); - - static const std::string WEBSOCKET_GUID; - static HTTPCredentials _defaultCreds; -}; - - -} } // namespace Poco::Net - - -#endif // Net_WebSocket_INCLUDED diff --git a/contrib/libpoco/Net/include/Poco/Net/WebSocketImpl.h b/contrib/libpoco/Net/include/Poco/Net/WebSocketImpl.h deleted file mode 100644 index b631a5d2e4e..00000000000 --- a/contrib/libpoco/Net/include/Poco/Net/WebSocketImpl.h +++ /dev/null @@ -1,111 +0,0 @@ -// -// WebSocketImpl.h -// -// $Id: //poco/1.4/Net/include/Poco/Net/WebSocketImpl.h#5 $ -// -// Library: Net -// Package: WebSocket -// Module: WebSocketImpl -// -// Definition of the StreamSocketImpl class. -// -// Copyright (c) 2012, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Net_WebSocketImpl_INCLUDED -#define Net_WebSocketImpl_INCLUDED - - -#include "Poco/Net/StreamSocketImpl.h" -#include "Poco/Random.h" - - -namespace Poco { -namespace Net { - - -class Net_API WebSocketImpl: public StreamSocketImpl - /// This class implements a WebSocket, according - /// to the WebSocket protocol described in RFC 6455. -{ -public: - WebSocketImpl(StreamSocketImpl* pStreamSocketImpl, bool mustMaskPayload); - /// Creates a StreamSocketImpl using the given native socket. - - // StreamSocketImpl - virtual int sendBytes(const void* buffer, int length, int flags); - /// Sends a WebSocket protocol frame. - - virtual int receiveBytes(void* buffer, int length, int flags); - /// Receives a WebSocket protocol frame. - - virtual SocketImpl* acceptConnection(SocketAddress& clientAddr); - virtual void connect(const SocketAddress& address); - virtual void connect(const SocketAddress& address, const Poco::Timespan& timeout); - virtual void connectNB(const SocketAddress& address); - virtual void bind(const SocketAddress& address, bool reuseAddress = false); - virtual void bind6(const SocketAddress& address, bool reuseAddress = false, bool ipV6Only = false); - virtual void listen(int backlog = 64); - virtual void close(); - virtual void shutdownReceive(); - virtual void shutdownSend(); - virtual void shutdown(); - virtual int sendTo(const void* buffer, int length, const SocketAddress& address, int flags = 0); - virtual int receiveFrom(void* buffer, int length, SocketAddress& address, int flags = 0); - virtual void sendUrgent(unsigned char data); - virtual bool secure() const; - virtual void setSendTimeout(const Poco::Timespan& timeout); - virtual Poco::Timespan getSendTimeout(); - virtual void setReceiveTimeout(const Poco::Timespan& timeout); - virtual Poco::Timespan getReceiveTimeout(); - - // Internal - int frameFlags() const; - /// Returns the frame flags of the most recently received frame. - - bool mustMaskPayload() const; - /// Returns true if the payload must be masked. - -protected: - enum - { - FRAME_FLAG_MASK = 0x80, - MAX_HEADER_LENGTH = 14 - }; - - int receiveNBytes(void* buffer, int bytes); - virtual ~WebSocketImpl(); - -private: - WebSocketImpl(); - - StreamSocketImpl* _pStreamSocketImpl; - int _frameFlags; - bool _mustMaskPayload; - Poco::Random _rnd; -}; - - -// -// inlines -// -inline int WebSocketImpl::frameFlags() const -{ - return _frameFlags; -} - - -inline bool WebSocketImpl::mustMaskPayload() const -{ - return _mustMaskPayload; -} - - -} } // namespace Poco::Net - - -#endif // Net_WebSocketImpl_INCLUDED diff --git a/contrib/libpoco/Net/samples/CMakeLists.txt b/contrib/libpoco/Net/samples/CMakeLists.txt deleted file mode 100644 index 9cf2a045739..00000000000 --- a/contrib/libpoco/Net/samples/CMakeLists.txt +++ /dev/null @@ -1,13 +0,0 @@ -add_subdirectory(EchoServer) -add_subdirectory(HTTPFormServer) -add_subdirectory(HTTPLoadTest) -add_subdirectory(HTTPTimeServer) -add_subdirectory(Mail) -add_subdirectory(Ping) -add_subdirectory(SMTPLogger) -add_subdirectory(TimeServer) -add_subdirectory(WebSocketServer) -add_subdirectory(dict) -add_subdirectory(download) -add_subdirectory(httpget) - diff --git a/contrib/libpoco/Net/samples/EchoServer/CMakeLists.txt b/contrib/libpoco/Net/samples/EchoServer/CMakeLists.txt deleted file mode 100644 index a4fa6a52a1d..00000000000 --- a/contrib/libpoco/Net/samples/EchoServer/CMakeLists.txt +++ /dev/null @@ -1,7 +0,0 @@ -set(SAMPLE_NAME "EchoServer") - -set(LOCAL_SRCS "") -aux_source_directory(src LOCAL_SRCS) - -add_executable( ${SAMPLE_NAME} ${LOCAL_SRCS} ) -target_link_libraries( ${SAMPLE_NAME} PocoNet PocoUtil PocoJSON PocoXML PocoFoundation ) diff --git a/contrib/libpoco/Net/samples/EchoServer/EchoServer.properties b/contrib/libpoco/Net/samples/EchoServer/EchoServer.properties deleted file mode 100644 index 19e56d889c3..00000000000 --- a/contrib/libpoco/Net/samples/EchoServer/EchoServer.properties +++ /dev/null @@ -1,10 +0,0 @@ -# This is a sample configuration file for EchoServer - -logging.loggers.root.channel.class = ConsoleChannel -logging.loggers.app.name = Application -logging.loggers.app.channel = c1 -logging.formatters.f1.class = PatternFormatter -logging.formatters.f1.pattern = [%p] %t -logging.channels.c1.class = ConsoleChannel -logging.channels.c1.formatter = f1 -# EchoServer.port = 9911 diff --git a/contrib/libpoco/Net/samples/EchoServer/src/EchoServer.cpp b/contrib/libpoco/Net/samples/EchoServer/src/EchoServer.cpp deleted file mode 100644 index 6bf18109c48..00000000000 --- a/contrib/libpoco/Net/samples/EchoServer/src/EchoServer.cpp +++ /dev/null @@ -1,252 +0,0 @@ -// -// EchoServer.cpp -// -// $Id: //poco/1.4/Net/samples/EchoServer/src/EchoServer.cpp#1 $ -// -// This sample demonstrates the SocketReactor and SocketAcceptor classes. -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "Poco/Net/SocketReactor.h" -#include "Poco/Net/SocketAcceptor.h" -#include "Poco/Net/SocketNotification.h" -#include "Poco/Net/StreamSocket.h" -#include "Poco/Net/ServerSocket.h" -#include "Poco/NObserver.h" -#include "Poco/Exception.h" -#include "Poco/Thread.h" -#include "Poco/FIFOBuffer.h" -#include "Poco/Delegate.h" -#include "Poco/Util/ServerApplication.h" -#include "Poco/Util/Option.h" -#include "Poco/Util/OptionSet.h" -#include "Poco/Util/HelpFormatter.h" -#include - - -using Poco::Net::SocketReactor; -using Poco::Net::SocketAcceptor; -using Poco::Net::ReadableNotification; -using Poco::Net::WritableNotification; -using Poco::Net::ShutdownNotification; -using Poco::Net::ServerSocket; -using Poco::Net::StreamSocket; -using Poco::NObserver; -using Poco::AutoPtr; -using Poco::Thread; -using Poco::FIFOBuffer; -using Poco::delegate; -using Poco::Util::ServerApplication; -using Poco::Util::Application; -using Poco::Util::Option; -using Poco::Util::OptionSet; -using Poco::Util::HelpFormatter; - - -class EchoServiceHandler - /// I/O handler class. This class (un)registers handlers for I/O based on - /// data availability. To ensure non-blocking behavior and alleviate spurious - /// socket writability callback triggering when no data to be sent is available, - /// FIFO buffers are used. I/O FIFOBuffer sends notifications on transitions - /// from [1] non-readable (i.e. empty) to readable, [2] writable to non-writable - /// (i.e. full) and [3] non-writable (i.e. full) to writable. - /// Based on these notifications, the handler member functions react by - /// enabling/disabling respective reactor framework notifications. -{ -public: - EchoServiceHandler(StreamSocket& socket, SocketReactor& reactor): - _socket(socket), - _reactor(reactor), - _fifoIn(BUFFER_SIZE, true), - _fifoOut(BUFFER_SIZE, true) - { - Application& app = Application::instance(); - app.logger().information("Connection from " + socket.peerAddress().toString()); - - _reactor.addEventHandler(_socket, NObserver(*this, &EchoServiceHandler::onSocketReadable)); - _reactor.addEventHandler(_socket, NObserver(*this, &EchoServiceHandler::onSocketShutdown)); - - _fifoOut.readable += delegate(this, &EchoServiceHandler::onFIFOOutReadable); - _fifoIn.writable += delegate(this, &EchoServiceHandler::onFIFOInWritable); - } - - ~EchoServiceHandler() - { - Application& app = Application::instance(); - try - { - app.logger().information("Disconnecting " + _socket.peerAddress().toString()); - } - catch (...) - { - } - _reactor.removeEventHandler(_socket, NObserver(*this, &EchoServiceHandler::onSocketReadable)); - _reactor.removeEventHandler(_socket, NObserver(*this, &EchoServiceHandler::onSocketWritable)); - _reactor.removeEventHandler(_socket, NObserver(*this, &EchoServiceHandler::onSocketShutdown)); - - _fifoOut.readable -= delegate(this, &EchoServiceHandler::onFIFOOutReadable); - _fifoIn.writable -= delegate(this, &EchoServiceHandler::onFIFOInWritable); - } - - void onFIFOOutReadable(bool& b) - { - if (b) - _reactor.addEventHandler(_socket, NObserver(*this, &EchoServiceHandler::onSocketWritable)); - else - _reactor.removeEventHandler(_socket, NObserver(*this, &EchoServiceHandler::onSocketWritable)); - } - - void onFIFOInWritable(bool& b) - { - if (b) - _reactor.addEventHandler(_socket, NObserver(*this, &EchoServiceHandler::onSocketReadable)); - else - _reactor.removeEventHandler(_socket, NObserver(*this, &EchoServiceHandler::onSocketReadable)); - } - - void onSocketReadable(const AutoPtr& pNf) - { - // some socket implementations (windows) report available - // bytes on client disconnect, so we double-check here - if (_socket.available()) - { - int len = _socket.receiveBytes(_fifoIn); - _fifoIn.drain(_fifoOut.write(_fifoIn.buffer(), _fifoIn.used())); - } - } - - void onSocketWritable(const AutoPtr& pNf) - { - _socket.sendBytes(_fifoOut); - } - - void onSocketShutdown(const AutoPtr& pNf) - { - delete this; - } - -private: - enum - { - BUFFER_SIZE = 1024 - }; - - StreamSocket _socket; - SocketReactor& _reactor; - FIFOBuffer _fifoIn; - FIFOBuffer _fifoOut; -}; - - -class EchoServer: public Poco::Util::ServerApplication - /// The main application class. - /// - /// This class handles command-line arguments and - /// configuration files. - /// Start the EchoServer executable with the help - /// option (/help on Windows, --help on Unix) for - /// the available command line options. - /// - /// To use the sample configuration file (EchoServer.properties), - /// copy the file to the directory where the EchoServer executable - /// resides. If you start the debug version of the EchoServer - /// (EchoServerd[.exe]), you must also create a copy of the configuration - /// file named EchoServerd.properties. In the configuration file, you - /// can specify the port on which the server is listening (default - /// 9977) and the format of the date/time string sent back to the client. - /// - /// To test the EchoServer you can use any telnet client (telnet localhost 9977). -{ -public: - EchoServer(): _helpRequested(false) - { - } - - ~EchoServer() - { - } - -protected: - void initialize(Application& self) - { - loadConfiguration(); // load default configuration files, if present - ServerApplication::initialize(self); - } - - void uninitialize() - { - ServerApplication::uninitialize(); - } - - void defineOptions(OptionSet& options) - { - ServerApplication::defineOptions(options); - - options.addOption( - Option("help", "h", "display help information on command line arguments") - .required(false) - .repeatable(false)); - } - - void handleOption(const std::string& name, const std::string& value) - { - ServerApplication::handleOption(name, value); - - if (name == "help") - _helpRequested = true; - } - - void displayHelp() - { - HelpFormatter helpFormatter(options()); - helpFormatter.setCommand(commandName()); - helpFormatter.setUsage("OPTIONS"); - helpFormatter.setHeader("An echo server implemented using the Reactor and Acceptor patterns."); - helpFormatter.format(std::cout); - } - - int main(const std::vector& args) - { - if (_helpRequested) - { - displayHelp(); - } - else - { - // get parameters from configuration file - unsigned short port = (unsigned short) config().getInt("EchoServer.port", 9977); - - // set-up a server socket - ServerSocket svs(port); - // set-up a SocketReactor... - SocketReactor reactor; - // ... and a SocketAcceptor - SocketAcceptor acceptor(svs, reactor); - // run the reactor in its own thread so that we can wait for - // a termination request - Thread thread; - thread.start(reactor); - // wait for CTRL-C or kill - waitForTerminationRequest(); - // Stop the SocketReactor - reactor.stop(); - thread.join(); - } - return Application::EXIT_OK; - } - -private: - bool _helpRequested; -}; - - -int main(int argc, char** argv) -{ - EchoServer app; - return app.run(argc, argv); -} diff --git a/contrib/libpoco/Net/samples/HTTPFormServer/CMakeLists.txt b/contrib/libpoco/Net/samples/HTTPFormServer/CMakeLists.txt deleted file mode 100644 index 76609536715..00000000000 --- a/contrib/libpoco/Net/samples/HTTPFormServer/CMakeLists.txt +++ /dev/null @@ -1,7 +0,0 @@ -set(SAMPLE_NAME "HTTPFormServer") - -set(LOCAL_SRCS "") -aux_source_directory(src LOCAL_SRCS) - -add_executable( ${SAMPLE_NAME} ${LOCAL_SRCS} ) -target_link_libraries( ${SAMPLE_NAME} PocoNet PocoUtil PocoJSON PocoXML PocoFoundation ) diff --git a/contrib/libpoco/Net/samples/HTTPFormServer/HTTPFormServer.properties b/contrib/libpoco/Net/samples/HTTPFormServer/HTTPFormServer.properties deleted file mode 100644 index 0d86a681446..00000000000 --- a/contrib/libpoco/Net/samples/HTTPFormServer/HTTPFormServer.properties +++ /dev/null @@ -1,10 +0,0 @@ -# This is a sample configuration file for HTTPFormServer - -logging.loggers.root.channel.class = ConsoleChannel -logging.loggers.app.name = Application -logging.loggers.app.channel = c1 -logging.formatters.f1.class = PatternFormatter -logging.formatters.f1.pattern = [%p] %t -logging.channels.c1.class = ConsoleChannel -logging.channels.c1.formatter = f1 -HTTPFormServer.port = 9980 diff --git a/contrib/libpoco/Net/samples/HTTPFormServer/src/HTTPFormServer.cpp b/contrib/libpoco/Net/samples/HTTPFormServer/src/HTTPFormServer.cpp deleted file mode 100644 index d1661d7761c..00000000000 --- a/contrib/libpoco/Net/samples/HTTPFormServer/src/HTTPFormServer.cpp +++ /dev/null @@ -1,306 +0,0 @@ -// -// HTTPFormServer.cpp -// -// $Id: //poco/Main/Net/samples/HTTPFormServer/src/HTTPFormServer.cpp#5 $ -// -// This sample demonstrates the HTTPServer and HTMLForm classes. -// -// Copyright (c) 2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "Poco/Net/HTTPServer.h" -#include "Poco/Net/HTTPRequestHandler.h" -#include "Poco/Net/HTTPRequestHandlerFactory.h" -#include "Poco/Net/HTTPServerParams.h" -#include "Poco/Net/HTTPServerRequest.h" -#include "Poco/Net/HTTPServerResponse.h" -#include "Poco/Net/HTTPServerParams.h" -#include "Poco/Net/HTMLForm.h" -#include "Poco/Net/PartHandler.h" -#include "Poco/Net/MessageHeader.h" -#include "Poco/Net/ServerSocket.h" -#include "Poco/CountingStream.h" -#include "Poco/NullStream.h" -#include "Poco/StreamCopier.h" -#include "Poco/Exception.h" -#include "Poco/Util/ServerApplication.h" -#include "Poco/Util/Option.h" -#include "Poco/Util/OptionSet.h" -#include "Poco/Util/HelpFormatter.h" -#include - - -using Poco::Net::ServerSocket; -using Poco::Net::HTTPRequestHandler; -using Poco::Net::HTTPRequestHandlerFactory; -using Poco::Net::HTTPServer; -using Poco::Net::HTTPServerRequest; -using Poco::Net::HTTPServerResponse; -using Poco::Net::HTTPServerParams; -using Poco::Net::MessageHeader; -using Poco::Net::HTMLForm; -using Poco::Net::NameValueCollection; -using Poco::Util::ServerApplication; -using Poco::Util::Application; -using Poco::Util::Option; -using Poco::Util::OptionSet; -using Poco::Util::HelpFormatter; -using Poco::CountingInputStream; -using Poco::NullOutputStream; -using Poco::StreamCopier; - - -class MyPartHandler: public Poco::Net::PartHandler -{ -public: - MyPartHandler(): - _length(0) - { - } - - void handlePart(const MessageHeader& header, std::istream& stream) - { - _type = header.get("Content-Type", "(unspecified)"); - if (header.has("Content-Disposition")) - { - std::string disp; - NameValueCollection params; - MessageHeader::splitParameters(header["Content-Disposition"], disp, params); - _name = params.get("name", "(unnamed)"); - _fileName = params.get("filename", "(unnamed)"); - } - - CountingInputStream istr(stream); - NullOutputStream ostr; - StreamCopier::copyStream(istr, ostr); - _length = istr.chars(); - } - - int length() const - { - return _length; - } - - const std::string& name() const - { - return _name; - } - - const std::string& fileName() const - { - return _fileName; - } - - const std::string& contentType() const - { - return _type; - } - -private: - int _length; - std::string _type; - std::string _name; - std::string _fileName; -}; - - -class FormRequestHandler: public HTTPRequestHandler - /// Return a HTML document with the current date and time. -{ -public: - FormRequestHandler() - { - } - - void handleRequest(HTTPServerRequest& request, HTTPServerResponse& response) - { - Application& app = Application::instance(); - app.logger().information("Request from " + request.clientAddress().toString()); - - MyPartHandler partHandler; - HTMLForm form(request, request.stream(), partHandler); - - response.setChunkedTransferEncoding(true); - response.setContentType("text/html"); - - std::ostream& ostr = response.send(); - - ostr << - "\n" - "\n" - "POCO Form Server Sample\n" - "\n" - "\n" - "

POCO Form Server Sample

\n" - "

GET Form

\n" - "
\n" - "\n" - "\n" - "
\n" - "

POST Form

\n" - "
\n" - "\n" - "\n" - "
\n" - "

File Upload

\n" - "
\n" - " \n" - "\n" - "
\n"; - - ostr << "

Request

\n"; - ostr << "Method: " << request.getMethod() << "
\n"; - ostr << "URI: " << request.getURI() << "
\n"; - NameValueCollection::ConstIterator it = request.begin(); - NameValueCollection::ConstIterator end = request.end(); - for (; it != end; ++it) - { - ostr << it->first << ": " << it->second << "
\n"; - } - ostr << "

"; - - if (!form.empty()) - { - ostr << "

Form

\n"; - it = form.begin(); - end = form.end(); - for (; it != end; ++it) - { - ostr << it->first << ": " << it->second << "
\n"; - } - ostr << "

"; - } - - if (!partHandler.name().empty()) - { - ostr << "

Upload

\n"; - ostr << "Name: " << partHandler.name() << "
\n"; - ostr << "File Name: " << partHandler.fileName() << "
\n"; - ostr << "Type: " << partHandler.contentType() << "
\n"; - ostr << "Size: " << partHandler.length() << "
\n"; - ostr << "

"; - } - ostr << "\n"; - } -}; - - -class FormRequestHandlerFactory: public HTTPRequestHandlerFactory -{ -public: - FormRequestHandlerFactory() - { - } - - HTTPRequestHandler* createRequestHandler(const HTTPServerRequest& request) - { - return new FormRequestHandler; - } -}; - - -class HTTPFormServer: public Poco::Util::ServerApplication - /// The main application class. - /// - /// This class handles command-line arguments and - /// configuration files. - /// Start the HTTPFormServer executable with the help - /// option (/help on Windows, --help on Unix) for - /// the available command line options. - /// - /// To use the sample configuration file (HTTPFormServer.properties), - /// copy the file to the directory where the HTTPFormServer executable - /// resides. If you start the debug version of the HTTPFormServer - /// (HTTPFormServerd[.exe]), you must also create a copy of the configuration - /// file named HTTPFormServerd.properties. In the configuration file, you - /// can specify the port on which the server is listening (default - /// 9980) and the format of the date/Form string sent back to the client. - /// - /// To test the FormServer you can use any web browser (http://localhost:9980/). -{ -public: - HTTPFormServer(): _helpRequested(false) - { - } - - ~HTTPFormServer() - { - } - -protected: - void initialize(Application& self) - { - loadConfiguration(); // load default configuration files, if present - ServerApplication::initialize(self); - } - - void uninitialize() - { - ServerApplication::uninitialize(); - } - - void defineOptions(OptionSet& options) - { - ServerApplication::defineOptions(options); - - options.addOption( - Option("help", "h", "display help information on command line arguments") - .required(false) - .repeatable(false)); - } - - void handleOption(const std::string& name, const std::string& value) - { - ServerApplication::handleOption(name, value); - - if (name == "help") - _helpRequested = true; - } - - void displayHelp() - { - HelpFormatter helpFormatter(options()); - helpFormatter.setCommand(commandName()); - helpFormatter.setUsage("OPTIONS"); - helpFormatter.setHeader("A web server that shows how to work with HTML forms."); - helpFormatter.format(std::cout); - } - - int main(const std::vector& args) - { - if (_helpRequested) - { - displayHelp(); - } - else - { - unsigned short port = (unsigned short) config().getInt("HTTPFormServer.port", 9980); - - // set-up a server socket - ServerSocket svs(port); - // set-up a HTTPServer instance - HTTPServer srv(new FormRequestHandlerFactory, svs, new HTTPServerParams); - // start the HTTPServer - srv.start(); - // wait for CTRL-C or kill - waitForTerminationRequest(); - // Stop the HTTPServer - srv.stop(); - } - return Application::EXIT_OK; - } - -private: - bool _helpRequested; -}; - - -int main(int argc, char** argv) -{ - HTTPFormServer app; - return app.run(argc, argv); -} diff --git a/contrib/libpoco/Net/samples/HTTPLoadTest/CMakeLists.txt b/contrib/libpoco/Net/samples/HTTPLoadTest/CMakeLists.txt deleted file mode 100644 index 2a5d5ff7db3..00000000000 --- a/contrib/libpoco/Net/samples/HTTPLoadTest/CMakeLists.txt +++ /dev/null @@ -1,7 +0,0 @@ -set(SAMPLE_NAME "HTTPLoadTest") - -set(LOCAL_SRCS "") -aux_source_directory(src LOCAL_SRCS) - -add_executable( ${SAMPLE_NAME} ${LOCAL_SRCS} ) -target_link_libraries( ${SAMPLE_NAME} PocoNet PocoUtil PocoJSON PocoXML PocoFoundation ) diff --git a/contrib/libpoco/Net/samples/HTTPLoadTest/src/HTTPLoadTest.cpp b/contrib/libpoco/Net/samples/HTTPLoadTest/src/HTTPLoadTest.cpp deleted file mode 100644 index f27b13ba068..00000000000 --- a/contrib/libpoco/Net/samples/HTTPLoadTest/src/HTTPLoadTest.cpp +++ /dev/null @@ -1,375 +0,0 @@ -// -// HTTPLoadTest.cpp -// -// $Id: //poco/1.4/Net/samples/HTTPLoadTest/src/HTTPLoadTest.cpp#1 $ -// -// This sample demonstrates the HTTPClientSession class. -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "Poco/Net/HTTPClientSession.h" -#include "Poco/Net/HTTPRequest.h" -#include "Poco/Net/HTTPResponse.h" -#include "Poco/Net/HTTPCookie.h" -#include "Poco/Net/NameValueCollection.h" -#include "Poco/Path.h" -#include "Poco/URI.h" -#include "Poco/AutoPtr.h" -#include "Poco/Thread.h" -#include "Poco/Mutex.h" -#include "Poco/Runnable.h" -#include "Poco/Stopwatch.h" -#include "Poco/NumberParser.h" -#include "Poco/StreamCopier.h" -#include "Poco/NullStream.h" -#include "Poco/Exception.h" -#include "Poco/Util/Application.h" -#include "Poco/Util/Option.h" -#include "Poco/Util/OptionSet.h" -#include "Poco/Util/HelpFormatter.h" -#include "Poco/Util/AbstractConfiguration.h" -#include - - -using Poco::Net::HTTPClientSession; -using Poco::Net::HTTPRequest; -using Poco::Net::HTTPResponse; -using Poco::Net::HTTPMessage; -using Poco::Net::HTTPCookie; -using Poco::Net::NameValueCollection; -using Poco::Util::Application; -using Poco::Util::Option; -using Poco::Util::OptionSet; -using Poco::Util::HelpFormatter; -using Poco::Util::AbstractConfiguration; -using Poco::AutoPtr; -using Poco::Thread; -using Poco::FastMutex; -using Poco::Runnable; -using Poco::Stopwatch; -using Poco::NumberParser; -using Poco::Path; -using Poco::URI; -using Poco::Exception; -using Poco::StreamCopier; -using Poco::NullOutputStream; - - -class HTTPClient : public Runnable -{ -public: - HTTPClient(const URI& uri, int repetitions, bool cookies=false, bool verbose=false): - _uri(uri), - _verbose(verbose), - _cookies(cookies), - _repetitions(repetitions), - _usec(0), - _success(0) - { - _gRepetitions += _repetitions; - } - - ~HTTPClient() - { - } - - void run() - { - Stopwatch sw; - std::vector cookies; - - for (int i = 0; i < _repetitions; ++i) - { - try - { - int usec = 0; - std::string path(_uri.getPathAndQuery()); - if (path.empty()) path = "/"; - - HTTPClientSession session(_uri.getHost(), _uri.getPort()); - HTTPRequest req(HTTPRequest::HTTP_GET, path, HTTPMessage::HTTP_1_1); - - if (_cookies) - { - NameValueCollection nvc; - std::vector::iterator it = cookies.begin(); - for(; it != cookies.end(); ++it) - nvc.add((*it).getName(), (*it).getValue()); - - req.setCookies(nvc); - } - - HTTPResponse res; - sw.restart(); - session.sendRequest(req); - std::istream& rs = session.receiveResponse(res); - NullOutputStream nos; - StreamCopier::copyStream(rs, nos); - sw.stop(); - _success += HTTPResponse::HTTP_OK == res.getStatus() ? 1 : 0; - if (_cookies) res.getCookies(cookies); - usec = int(sw.elapsed()); - - if (_verbose) - { - FastMutex::ScopedLock lock(_mutex); - std::cout - << _uri.toString() << ' ' << res.getStatus() << ' ' << res.getReason() - << ' ' << usec/1000.0 << "ms" << std::endl; - } - - _usec += usec; - } - catch (Exception& exc) - { - FastMutex::ScopedLock lock(_mutex); - std::cerr << exc.displayText() << std::endl; - } - } - - { - FastMutex::ScopedLock lock(_mutex); - _gSuccess += _success; - _gUsec += _usec; - } - if (_verbose) - printStats(_uri.toString(), _repetitions, _success, _usec); - } - - static void printStats(std::string uri, int repetitions, int success, Poco::UInt64 usec); - static int totalAttempts(); - static Poco::UInt64 totalMicroseconds(); - static int totalSuccessCount(); - -private: - HTTPClient(); - - URI _uri; - bool _verbose; - bool _cookies; - int _repetitions; - Poco::UInt64 _usec; - int _success; - static int _gRepetitions; - static Poco::UInt64 _gUsec; - static int _gSuccess; - static FastMutex _mutex; -}; - -FastMutex HTTPClient::_mutex; -int HTTPClient::_gRepetitions; -Poco::UInt64 HTTPClient::_gUsec; -int HTTPClient::_gSuccess; - -int HTTPClient::totalAttempts() -{ - return _gRepetitions; -} - -Poco::UInt64 HTTPClient::totalMicroseconds() -{ - return _gUsec; -} - -int HTTPClient::totalSuccessCount() -{ - return _gSuccess; -} - -void HTTPClient::printStats(std::string uri, int repetitions, int success, Poco::UInt64 usec) -{ - FastMutex::ScopedLock lock(_mutex); - - std::cout << std::endl << "--------------" << std::endl - << "Statistics for " << uri << std::endl << "--------------" - << std::endl - << repetitions << " attempts, " << success << " succesful (" - << ((float) success / (float) repetitions) * 100.0 << "%)" << std::endl - << "Avg response time: " << ((float) usec / (float) repetitions) / 1000.0 << "ms, " << std::endl - << "Avg requests/second handled: " << ((float) success /((float) usec / 1000000.0)) << std::endl - << "Total time: " << (float) usec / 1000000.0 << std::endl; -} - -class HTTPLoadTest: public Application - /// This sample demonstrates some of the features of the Poco::Util::Application class, - /// such as configuration file handling and command line arguments processing. - /// - /// Try HTTPLoadTest --help (on Unix platforms) or HTTPLoadTest /help (elsewhere) for - /// more information. -{ -public: - HTTPLoadTest(): - _helpRequested(false), - _verbose(false), - _cookies(false), - _repetitions(1), - _threads(1) - { - } - -protected: - void initialize(Application& self) - { - loadConfiguration(); // load default configuration files, if present - Application::initialize(self); - // add your own initialization code here - } - - void uninitialize() - { - // add your own uninitialization code here - Application::uninitialize(); - } - - void reinitialize(Application& self) - { - Application::reinitialize(self); - // add your own reinitialization code here - } - - void defineOptions(OptionSet& options) - { - Application::defineOptions(options); - - options.addOption( - Option("help", "h", "display help information on command line arguments") - .required(false) - .repeatable(false)); - - options.addOption( - Option("verbose", "v", "display messages on stdout") - .required(false) - .repeatable(false)); - - options.addOption( - Option("cookies", "c", "resend cookies") - .required(false) - .repeatable(false)); - - options.addOption( - Option("uri", "u", "HTTP URI") - .required(true) - .repeatable(false) - .argument("uri")); - - options.addOption( - Option("repetitions", "r", "fetch repetitions") - .required(false) - .repeatable(false) - .argument("repetitions")); - - options.addOption( - Option("threads", "t", "thread count") - .required(false) - .repeatable(false) - .argument("threads")); - } - - void handleOption(const std::string& name, const std::string& value) - { - Application::handleOption(name, value); - - if (name == "help") - _helpRequested = true; - else if (name == "verbose") - _verbose = true; - else if (name == "cookies") - _cookies = true; - else if (name == "uri") - _uri = value; - else if (name == "repetitions") - _repetitions = NumberParser::parse(value); - else if (name == "threads") - _threads = NumberParser::parse(value); - } - - void displayHelp() - { - HelpFormatter helpFormatter(options()); - helpFormatter.setCommand(commandName()); - helpFormatter.setUsage("OPTIONS"); - helpFormatter.setHeader("A sample application that demonstrates some of the features of the Poco::Util::Application class."); - helpFormatter.format(std::cout); - } - - void defineProperty(const std::string& def) - { - std::string name; - std::string value; - std::string::size_type pos = def.find('='); - if (pos != std::string::npos) - { - name.assign(def, 0, pos); - value.assign(def, pos + 1, def.length() - pos); - } - else name = def; - config().setString(name, value); - } - - int main(const std::vector& args) - { - if (_helpRequested) - { - displayHelp(); - } - else - { - URI uri(_uri); - std::vector threads; - - Stopwatch sw; - sw.start(); - for (int i = 0; i < _threads; ++i) - { - Thread* pt = new Thread(_uri); - poco_check_ptr(pt); - threads.push_back(pt); - HTTPClient* pHTTPClient = new HTTPClient(uri, _repetitions, _cookies, _verbose); - poco_check_ptr(pHTTPClient); - threads.back()->start(*pHTTPClient); - } - - std::vector::iterator it = threads.begin(); - for(; it != threads.end(); ++it) - { - (*it)->join(); - delete *it; - } - sw.stop(); - - HTTPClient::printStats(_uri, HTTPClient::totalAttempts(), HTTPClient::totalSuccessCount(), sw.elapsed()); - } - - return Application::EXIT_OK; - } - -private: - bool _helpRequested; - bool _verbose; - bool _cookies; - std::string _uri; - int _repetitions; - int _threads; -}; - - -int main(int argc, char** argv) -{ - AutoPtr pApp = new HTTPLoadTest; - try - { - pApp->init(argc, argv); - } - catch (Poco::Exception& exc) - { - pApp->logger().log(exc); - return Application::EXIT_CONFIG; - } - return pApp->run(); -} - diff --git a/contrib/libpoco/Net/samples/HTTPTimeServer/CMakeLists.txt b/contrib/libpoco/Net/samples/HTTPTimeServer/CMakeLists.txt deleted file mode 100644 index 135c652933b..00000000000 --- a/contrib/libpoco/Net/samples/HTTPTimeServer/CMakeLists.txt +++ /dev/null @@ -1,7 +0,0 @@ -set(SAMPLE_NAME "HTTPTimeServer") - -set(LOCAL_SRCS "") -aux_source_directory(src LOCAL_SRCS) - -add_executable( ${SAMPLE_NAME} ${LOCAL_SRCS} ) -target_link_libraries( ${SAMPLE_NAME} PocoNet PocoUtil PocoJSON PocoXML PocoFoundation ) diff --git a/contrib/libpoco/Net/samples/HTTPTimeServer/HTTPTimeServer.properties b/contrib/libpoco/Net/samples/HTTPTimeServer/HTTPTimeServer.properties deleted file mode 100644 index a869403118d..00000000000 --- a/contrib/libpoco/Net/samples/HTTPTimeServer/HTTPTimeServer.properties +++ /dev/null @@ -1,13 +0,0 @@ -# This is a sample configuration file for HTTPTimeServer - -logging.loggers.root.channel.class = ConsoleChannel -logging.loggers.app.name = Application -logging.loggers.app.channel = c1 -logging.formatters.f1.class = PatternFormatter -logging.formatters.f1.pattern = [%p] %t -logging.channels.c1.class = ConsoleChannel -logging.channels.c1.formatter = f1 -HTTPTimeServer.format = %W, %e %b %y %H:%M:%S %Z -HTTPTimeServer.port = 9980 -#HTTPTimeServer.maxQueued = 200 -#HTTPTimeServer.maxThreads = 64 diff --git a/contrib/libpoco/Net/samples/HTTPTimeServer/src/HTTPTimeServer.cpp b/contrib/libpoco/Net/samples/HTTPTimeServer/src/HTTPTimeServer.cpp deleted file mode 100644 index 78bc327ac8e..00000000000 --- a/contrib/libpoco/Net/samples/HTTPTimeServer/src/HTTPTimeServer.cpp +++ /dev/null @@ -1,216 +0,0 @@ -// -// HTTPTimeServer.cpp -// -// $Id: //poco/1.4/Net/samples/HTTPTimeServer/src/HTTPTimeServer.cpp#1 $ -// -// This sample demonstrates the HTTPServer and related classes. -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "Poco/Net/HTTPServer.h" -#include "Poco/Net/HTTPRequestHandler.h" -#include "Poco/Net/HTTPRequestHandlerFactory.h" -#include "Poco/Net/HTTPServerParams.h" -#include "Poco/Net/HTTPServerRequest.h" -#include "Poco/Net/HTTPServerResponse.h" -#include "Poco/Net/HTTPServerParams.h" -#include "Poco/Net/ServerSocket.h" -#include "Poco/Timestamp.h" -#include "Poco/DateTimeFormatter.h" -#include "Poco/DateTimeFormat.h" -#include "Poco/Exception.h" -#include "Poco/ThreadPool.h" -#include "Poco/Util/ServerApplication.h" -#include "Poco/Util/Option.h" -#include "Poco/Util/OptionSet.h" -#include "Poco/Util/HelpFormatter.h" -#include - - -using Poco::Net::ServerSocket; -using Poco::Net::HTTPRequestHandler; -using Poco::Net::HTTPRequestHandlerFactory; -using Poco::Net::HTTPServer; -using Poco::Net::HTTPServerRequest; -using Poco::Net::HTTPServerResponse; -using Poco::Net::HTTPServerParams; -using Poco::Timestamp; -using Poco::DateTimeFormatter; -using Poco::DateTimeFormat; -using Poco::ThreadPool; -using Poco::Util::ServerApplication; -using Poco::Util::Application; -using Poco::Util::Option; -using Poco::Util::OptionSet; -using Poco::Util::HelpFormatter; - - -class TimeRequestHandler: public HTTPRequestHandler - /// Return a HTML document with the current date and time. -{ -public: - TimeRequestHandler(const std::string& format): - _format(format) - { - } - - void handleRequest(HTTPServerRequest& request, HTTPServerResponse& response) - { - Application& app = Application::instance(); - app.logger().information("Request from " + request.clientAddress().toString()); - - Timestamp now; - std::string dt(DateTimeFormatter::format(now, _format)); - - response.setChunkedTransferEncoding(true); - response.setContentType("text/html"); - - std::ostream& ostr = response.send(); - ostr << "HTTPTimeServer powered by POCO C++ Libraries"; - ostr << ""; - ostr << "

"; - ostr << dt; - ostr << "

"; - } - -private: - std::string _format; -}; - - -class TimeRequestHandlerFactory: public HTTPRequestHandlerFactory -{ -public: - TimeRequestHandlerFactory(const std::string& format): - _format(format) - { - } - - HTTPRequestHandler* createRequestHandler(const HTTPServerRequest& request) - { - if (request.getURI() == "/") - return new TimeRequestHandler(_format); - else - return 0; - } - -private: - std::string _format; -}; - - -class HTTPTimeServer: public Poco::Util::ServerApplication - /// The main application class. - /// - /// This class handles command-line arguments and - /// configuration files. - /// Start the HTTPTimeServer executable with the help - /// option (/help on Windows, --help on Unix) for - /// the available command line options. - /// - /// To use the sample configuration file (HTTPTimeServer.properties), - /// copy the file to the directory where the HTTPTimeServer executable - /// resides. If you start the debug version of the HTTPTimeServer - /// (HTTPTimeServerd[.exe]), you must also create a copy of the configuration - /// file named HTTPTimeServerd.properties. In the configuration file, you - /// can specify the port on which the server is listening (default - /// 9980) and the format of the date/time string sent back to the client. - /// - /// To test the TimeServer you can use any web browser (http://localhost:9980/). -{ -public: - HTTPTimeServer(): _helpRequested(false) - { - } - - ~HTTPTimeServer() - { - } - -protected: - void initialize(Application& self) - { - loadConfiguration(); // load default configuration files, if present - ServerApplication::initialize(self); - } - - void uninitialize() - { - ServerApplication::uninitialize(); - } - - void defineOptions(OptionSet& options) - { - ServerApplication::defineOptions(options); - - options.addOption( - Option("help", "h", "display help information on command line arguments") - .required(false) - .repeatable(false)); - } - - void handleOption(const std::string& name, const std::string& value) - { - ServerApplication::handleOption(name, value); - - if (name == "help") - _helpRequested = true; - } - - void displayHelp() - { - HelpFormatter helpFormatter(options()); - helpFormatter.setCommand(commandName()); - helpFormatter.setUsage("OPTIONS"); - helpFormatter.setHeader("A web server that serves the current date and time."); - helpFormatter.format(std::cout); - } - - int main(const std::vector& args) - { - if (_helpRequested) - { - displayHelp(); - } - else - { - // get parameters from configuration file - unsigned short port = (unsigned short) config().getInt("HTTPTimeServer.port", 9980); - std::string format(config().getString("HTTPTimeServer.format", DateTimeFormat::SORTABLE_FORMAT)); - int maxQueued = config().getInt("HTTPTimeServer.maxQueued", 100); - int maxThreads = config().getInt("HTTPTimeServer.maxThreads", 16); - ThreadPool::defaultPool().addCapacity(maxThreads); - - HTTPServerParams* pParams = new HTTPServerParams; - pParams->setMaxQueued(maxQueued); - pParams->setMaxThreads(maxThreads); - - // set-up a server socket - ServerSocket svs(port); - // set-up a HTTPServer instance - HTTPServer srv(new TimeRequestHandlerFactory(format), svs, pParams); - // start the HTTPServer - srv.start(); - // wait for CTRL-C or kill - waitForTerminationRequest(); - // Stop the HTTPServer - srv.stop(); - } - return Application::EXIT_OK; - } - -private: - bool _helpRequested; -}; - - -int main(int argc, char** argv) -{ - HTTPTimeServer app; - return app.run(argc, argv); -} diff --git a/contrib/libpoco/Net/samples/Mail/CMakeLists.txt b/contrib/libpoco/Net/samples/Mail/CMakeLists.txt deleted file mode 100644 index 1546ea0d43a..00000000000 --- a/contrib/libpoco/Net/samples/Mail/CMakeLists.txt +++ /dev/null @@ -1,7 +0,0 @@ -set(SAMPLE_NAME "Mail") - -set(LOCAL_SRCS "") -aux_source_directory(src LOCAL_SRCS) - -add_executable( ${SAMPLE_NAME} ${LOCAL_SRCS} ) -target_link_libraries( ${SAMPLE_NAME} PocoNet PocoUtil PocoJSON PocoXML PocoFoundation ) diff --git a/contrib/libpoco/Net/samples/Mail/src/Mail.cpp b/contrib/libpoco/Net/samples/Mail/src/Mail.cpp deleted file mode 100644 index 8d73539567b..00000000000 --- a/contrib/libpoco/Net/samples/Mail/src/Mail.cpp +++ /dev/null @@ -1,79 +0,0 @@ -// -// Mail.cpp -// -// $Id: //poco/1.4/Net/samples/Mail/src/Mail.cpp#2 $ -// -// This sample demonstrates the MailMessage and SMTPClientSession classes. -// -// Copyright (c) 2005-2011, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "Poco/Net/MailMessage.h" -#include "Poco/Net/MailRecipient.h" -#include "Poco/Net/SMTPClientSession.h" -#include "Poco/Net/StringPartSource.h" -#include "Poco/Path.h" -#include "Poco/Exception.h" -#include - - -using Poco::Net::MailMessage; -using Poco::Net::MailRecipient; -using Poco::Net::SMTPClientSession; -using Poco::Net::StringPartSource; -using Poco::Path; -using Poco::Exception; - - -const unsigned char PocoLogo[] = -{ - #include "PocoLogo.hpp" -}; - - -int main(int argc, char** argv) -{ - if (argc != 4) - { - Path p(argv[0]); - std::cerr << "usage: " << p.getBaseName() << " " << std::endl; - std::cerr << " Send an email greeting from to ," << std::endl; - std::cerr << " using the SMTP server at ." << std::endl; - return 1; - } - - std::string mailhost(argv[1]); - std::string sender(argv[2]); - std::string recipient(argv[3]); - - try - { - MailMessage message; - message.setSender(sender); - message.addRecipient(MailRecipient(MailRecipient::PRIMARY_RECIPIENT, recipient)); - message.setSubject("Hello from the POCO C++ Libraries"); - std::string content; - content += "Hello "; - content += recipient; - content += ",\r\n\r\n"; - content += "This is a greeting from the POCO C++ Libraries.\r\n\r\n"; - std::string logo(reinterpret_cast(PocoLogo), sizeof(PocoLogo)); - message.addContent(new StringPartSource(content)); - message.addAttachment("logo", new StringPartSource(logo, "image/gif")); - - SMTPClientSession session(mailhost); - session.login(); - session.sendMessage(message); - session.close(); - } - catch (Exception& exc) - { - std::cerr << exc.displayText() << std::endl; - return 1; - } - return 0; -} diff --git a/contrib/libpoco/Net/samples/Mail/src/PocoLogo.hpp b/contrib/libpoco/Net/samples/Mail/src/PocoLogo.hpp deleted file mode 100644 index a1b39a593c8..00000000000 --- a/contrib/libpoco/Net/samples/Mail/src/PocoLogo.hpp +++ /dev/null @@ -1,134 +0,0 @@ -// The C++ Portable Components logo in GIF format - -0x47, 0x49, 0x46, 0x38, 0x39, 0x61, 0xa0, 0x00, 0x85, 0x00, 0xa2, 0x00, 0x00, 0xd1, 0xdd, 0xe4, -0x45, 0x9b, 0xca, 0x41, 0x55, 0x61, 0x8a, 0x96, 0x9e, 0xa2, 0xbc, 0xcc, 0x00, 0x1b, 0x2c, 0x00, -0x75, 0xb6, 0xff, 0xff, 0xff, 0x21, 0xf9, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, -0x00, 0x00, 0xa0, 0x00, 0x85, 0x00, 0x00, 0x03, 0xff, 0x78, 0xba, 0xdc, 0xfe, 0x30, 0xca, 0x49, -0xab, 0xbd, 0x38, 0xeb, 0xcd, 0xbb, 0xff, 0x60, 0x28, 0x8e, 0x64, 0x69, 0x9e, 0x68, 0xaa, 0xae, -0x6c, 0xeb, 0xbe, 0x70, 0x2c, 0xcf, 0x2b, 0x40, 0xdc, 0x78, 0xae, 0xef, 0x04, 0xe0, 0xda, 0xbc, -0xe0, 0x0e, 0xe0, 0xeb, 0x00, 0x06, 0xc5, 0xc5, 0x6d, 0x72, 0x4b, 0x76, 0x08, 0x01, 0x83, 0x74, -0x4a, 0xad, 0x5a, 0xab, 0x01, 0x27, 0x09, 0x10, 0xbd, 0x7a, 0xbf, 0x86, 0x40, 0x6f, 0x33, 0x28, -0x10, 0x1a, 0x85, 0x82, 0x44, 0x90, 0x2e, 0x68, 0x2f, 0xb6, 0x2e, 0x78, 0x7e, 0x15, 0x8f, 0xe2, -0xf4, 0xbc, 0xd5, 0x8e, 0x29, 0x9f, 0x09, 0x48, 0x07, 0x69, 0x11, 0x65, 0x02, 0x6c, 0x03, 0x1b, -0x72, 0x7a, 0x8b, 0x54, 0x67, 0x1f, 0x8a, 0x8c, 0x8c, 0x59, 0x17, 0x7e, 0x82, 0x66, 0x96, 0x11, -0x69, 0x3e, 0x05, 0x02, 0x19, 0x5c, 0x91, 0xa0, 0x53, 0x8e, 0x1c, 0x90, 0xa1, 0x8b, 0xa3, 0x13, -0x95, 0x69, 0x67, 0x83, 0x0c, 0x36, 0x0a, 0x9a, 0x82, 0x9d, 0x70, 0xa6, 0xb5, 0x93, 0x19, 0x04, -0xb5, 0xb6, 0x15, 0xaa, 0x97, 0xad, 0x0b, 0x6c, 0xac, 0x6e, 0xb2, 0x17, 0xb9, 0xba, 0xb5, 0x6f, -0x12, 0xc6, 0xc7, 0xa6, 0xc9, 0x0c, 0xbd, 0x3d, 0xbf, 0x0a, 0xc1, 0x96, 0x3e, 0x44, 0x16, 0xcb, -0xcc, 0xa0, 0x01, 0xb4, 0xda, 0xa6, 0xdc, 0x12, 0x65, 0x9c, 0x69, 0x86, 0x9c, 0x0d, 0xd4, 0xb1, -0xdd, 0xde, 0xa1, 0xe0, 0x4c, 0xeb, 0xbb, 0xe1, 0x6d, 0x6d, 0x02, 0x5a, 0xe2, 0x6c, 0xb3, 0x17, -0xa5, 0xef, 0x7a, 0xed, 0x11, 0xfb, 0xb5, 0xa8, 0x1e, 0x10, 0x19, 0xe8, 0x8c, 0x0d, 0x27, 0x67, -0x10, 0xb2, 0xfd, 0x63, 0x84, 0xf0, 0x80, 0xc2, 0x85, 0x8b, 0x1a, 0xc2, 0x09, 0x48, 0x01, 0x00, -0xc4, 0x50, 0x14, 0x17, 0x58, 0xbc, 0xb8, 0x0d, 0xff, 0x83, 0x21, 0x11, 0xfa, 0xbc, 0x88, 0x21, -0x48, 0xb2, 0x24, 0x91, 0x1b, 0x21, 0xaf, 0x38, 0x7b, 0xf8, 0xa5, 0x87, 0xc9, 0x97, 0x04, 0xa1, -0x44, 0xbc, 0x20, 0x4d, 0xe3, 0x90, 0x09, 0xfc, 0x3e, 0x7c, 0xa2, 0x93, 0xf1, 0x80, 0x9e, 0x9e, -0x18, 0x36, 0xf2, 0xa4, 0xa9, 0xa6, 0x81, 0x38, 0x79, 0x35, 0x1b, 0x08, 0x05, 0x23, 0xb1, 0x58, -0x9e, 0x07, 0x2c, 0xad, 0x34, 0x75, 0x3a, 0xa7, 0xdf, 0x84, 0x9a, 0xe2, 0x06, 0x68, 0xdd, 0x8a, -0x28, 0x42, 0x54, 0x2a, 0x53, 0xf3, 0x0d, 0x6d, 0x90, 0x72, 0x4a, 0x58, 0xaa, 0x4c, 0x2d, 0xd4, -0x3c, 0x94, 0xa1, 0xac, 0x01, 0xa0, 0x1d, 0xdc, 0x5a, 0xf5, 0x39, 0x07, 0x2e, 0x87, 0xa5, 0x5e, -0xec, 0x2a, 0x00, 0xb0, 0xf6, 0x12, 0x06, 0xb7, 0x67, 0xd5, 0x7d, 0x51, 0x5a, 0x15, 0xc5, 0x57, -0x29, 0x73, 0x01, 0x71, 0x1d, 0x70, 0xef, 0x9c, 0xdf, 0x0b, 0x85, 0x4f, 0xb8, 0x25, 0x0c, 0x66, -0xae, 0x08, 0xbc, 0x7b, 0x1c, 0x1c, 0x45, 0x1a, 0x90, 0x9a, 0xe0, 0x3a, 0x28, 0x00, 0xbb, 0x8a, -0x2c, 0xb9, 0xb2, 0x03, 0x02, 0x86, 0x52, 0x0b, 0x08, 0xe4, 0x58, 0xef, 0x68, 0x30, 0xae, 0x13, -0xcd, 0x71, 0x82, 0xb9, 0x4a, 0x6c, 0xd9, 0x5f, 0x2c, 0x5b, 0xf0, 0x6c, 0xa1, 0x76, 0xa3, 0xd0, -0xb3, 0x5f, 0xb7, 0x4c, 0x51, 0x56, 0x77, 0x85, 0x57, 0x41, 0xeb, 0x02, 0x4f, 0xab, 0x51, 0xf9, -0x72, 0x91, 0x0f, 0xb2, 0xda, 0x0b, 0x0c, 0xc1, 0xb7, 0xa8, 0xe7, 0x5e, 0x28, 0x0f, 0xc7, 0x9e, -0xd9, 0x28, 0x39, 0xa4, 0xf8, 0x34, 0x1a, 0x94, 0x17, 0x5e, 0x7b, 0xde, 0x13, 0xd6, 0xa7, 0x98, -0xbf, 0x72, 0x5b, 0x43, 0x71, 0xcd, 0xbe, 0xcc, 0xf0, 0x2d, 0xcf, 0x17, 0x29, 0xb9, 0x08, 0xe9, -0xdf, 0x96, 0x36, 0x2d, 0xfc, 0x3c, 0x77, 0x2c, 0xff, 0xf0, 0x09, 0x23, 0x8c, 0x63, 0x02, 0xdc, -0x54, 0x9d, 0x73, 0x24, 0xb8, 0xa5, 0x5f, 0x7f, 0xec, 0x11, 0xc7, 0xdf, 0x33, 0xf1, 0x0d, 0xc8, -0x00, 0x6f, 0xc7, 0x21, 0x08, 0xd2, 0x53, 0xeb, 0x59, 0xd1, 0x5e, 0x5b, 0x0f, 0x2e, 0x00, 0x0d, -0x26, 0x13, 0x3e, 0x56, 0x21, 0x6c, 0x97, 0xc9, 0x44, 0xc7, 0x5c, 0xf9, 0x6d, 0xf8, 0x57, 0x87, -0x0a, 0xf8, 0x01, 0x80, 0x21, 0xd1, 0x14, 0x05, 0x8c, 0x88, 0x15, 0x39, 0xc7, 0x45, 0x00, 0x38, -0xe6, 0xa8, 0xe3, 0x8e, 0x3c, 0x46, 0x22, 0x90, 0x85, 0x25, 0xbc, 0xe7, 0x9d, 0x7d, 0x7d, 0xb5, -0x97, 0xa2, 0x02, 0x87, 0xbd, 0x93, 0xd1, 0x91, 0xff, 0x51, 0x31, 0xd7, 0x66, 0xe4, 0x11, 0x98, -0x1c, 0x89, 0x07, 0x28, 0xe8, 0x4d, 0x32, 0x4c, 0xee, 0x07, 0x9d, 0x52, 0x30, 0x35, 0x40, 0xc0, -0x3c, 0xa9, 0x99, 0x73, 0x20, 0x95, 0x56, 0x32, 0xd3, 0x53, 0x96, 0x26, 0x08, 0x79, 0x97, 0x6a, -0xe5, 0x94, 0xc7, 0xa0, 0x86, 0x0a, 0x94, 0xa9, 0x8b, 0x71, 0x68, 0x06, 0xc9, 0xa2, 0x87, 0x6c, -0x7e, 0xa4, 0x93, 0x73, 0x72, 0x9a, 0x02, 0x57, 0x9d, 0x09, 0xde, 0xf9, 0x22, 0x91, 0x32, 0x1a, -0xc1, 0x27, 0x47, 0xc6, 0xed, 0x05, 0x64, 0xa0, 0xb9, 0xc1, 0x47, 0xcf, 0x11, 0x05, 0x20, 0x51, -0x0f, 0x3d, 0xe7, 0x74, 0xf5, 0x23, 0x99, 0x17, 0x25, 0xaa, 0x28, 0x95, 0x5a, 0x82, 0xe6, 0x9d, -0x23, 0x65, 0x58, 0x1a, 0x62, 0x40, 0x49, 0x35, 0x87, 0xe9, 0x3f, 0xb7, 0x4c, 0x00, 0xe8, 0x08, -0x6a, 0x7a, 0xe8, 0x57, 0xa8, 0x0f, 0x50, 0x63, 0xc8, 0x26, 0x6e, 0x9a, 0xba, 0x5d, 0x9f, 0x3f, -0x7d, 0x06, 0x27, 0x0a, 0xa4, 0xb9, 0x0a, 0x6a, 0xa4, 0xb1, 0xc6, 0x47, 0x2b, 0x7e, 0x87, 0xae, -0x93, 0xea, 0x88, 0x8d, 0xa2, 0xd7, 0x6b, 0x8b, 0xff, 0xaf, 0x02, 0xeb, 0x00, 0x3a, 0xc3, 0x88, -0x79, 0xe9, 0x76, 0x37, 0xf2, 0x68, 0xed, 0xb5, 0x62, 0x8c, 0xa1, 0x41, 0x7e, 0x9a, 0x3e, 0xb1, -0xec, 0x01, 0x85, 0xf4, 0x10, 0xea, 0x35, 0xa3, 0x56, 0x43, 0xcc, 0x98, 0xdb, 0xd1, 0x60, 0xeb, -0x60, 0x27, 0x8c, 0xe5, 0x0a, 0xa1, 0xe5, 0x1d, 0x52, 0x9f, 0x0d, 0xd2, 0x3a, 0xb0, 0xea, 0x0c, -0xee, 0x8e, 0x90, 0xa4, 0x01, 0xc9, 0xa0, 0x66, 0x5f, 0x79, 0x50, 0xb6, 0x21, 0x6a, 0x86, 0xb6, -0xa9, 0x4b, 0x56, 0xbe, 0x20, 0xe4, 0x17, 0x86, 0x04, 0x26, 0x9d, 0x96, 0xe7, 0xc0, 0x04, 0xff, -0x66, 0xb0, 0x12, 0x79, 0x50, 0xe7, 0x55, 0x1e, 0x2a, 0xee, 0xc9, 0xe9, 0xc4, 0x74, 0x21, 0xbc, -0xc1, 0xbe, 0x52, 0x38, 0x73, 0x44, 0x9e, 0xb5, 0x7a, 0xb2, 0xa8, 0xba, 0x20, 0x23, 0x86, 0xed, -0xca, 0x38, 0x2e, 0xa2, 0x5b, 0x7d, 0xff, 0xda, 0xcb, 0x18, 0x9b, 0x10, 0xaf, 0xdb, 0x20, 0xc7, -0x0b, 0xe0, 0xca, 0x51, 0x4f, 0x85, 0x48, 0x34, 0x28, 0x91, 0xc4, 0x6e, 0xcc, 0x71, 0xca, 0x1c, -0x21, 0x46, 0x08, 0x8d, 0xd1, 0x71, 0x32, 0x80, 0x62, 0x5a, 0x01, 0x75, 0xaf, 0xba, 0x3a, 0xa3, -0x1a, 0x8f, 0x5e, 0x14, 0xd6, 0x28, 0x34, 0xc7, 0x0a, 0x17, 0xcd, 0xef, 0xd4, 0x14, 0x54, 0xad, -0xea, 0xc9, 0x13, 0x13, 0xbd, 0x90, 0xa6, 0x95, 0x4c, 0xe0, 0x35, 0xc3, 0x60, 0x4f, 0x9c, 0xf5, -0x42, 0x7a, 0x95, 0xbd, 0x06, 0xd2, 0x68, 0x5f, 0x8d, 0xb3, 0x43, 0x5a, 0xef, 0xca, 0x04, 0xa5, -0x66, 0xd7, 0x6b, 0x75, 0xba, 0x73, 0x33, 0x60, 0xa2, 0xd6, 0x7c, 0xe8, 0x4b, 0x0e, 0xcd, 0x41, -0xf3, 0xdd, 0xb7, 0xdf, 0x5a, 0xab, 0x38, 0xf3, 0x9f, 0xe3, 0xcd, 0x53, 0xb8, 0x7f, 0x87, 0xdb, -0x1b, 0x75, 0x1e, 0xc7, 0xee, 0x26, 0x4f, 0xc6, 0xff, 0x11, 0x94, 0x65, 0x31, 0x0d, 0x71, 0xb4, -0x6c, 0x0b, 0x8e, 0xda, 0xe2, 0xa2, 0xf4, 0x3d, 0x38, 0x44, 0x6e, 0xfa, 0x0c, 0x65, 0x37, 0x0e, -0x95, 0x6a, 0xac, 0x9d, 0xee, 0xfa, 0x07, 0xa9, 0x93, 0x03, 0x71, 0xe3, 0xe4, 0x6c, 0xfe, 0xfa, -0xed, 0xe0, 0xfa, 0xc5, 0x46, 0x32, 0xe1, 0xe2, 0xc0, 0x16, 0xee, 0xc0, 0x53, 0xa2, 0x7b, 0xa1, -0xe5, 0x6a, 0xa4, 0x77, 0xf0, 0xc8, 0x27, 0x4d, 0xa9, 0x56, 0x10, 0x54, 0x7d, 0xbc, 0x11, 0x4c, -0x2f, 0x26, 0xfd, 0xf4, 0xd4, 0x6b, 0x65, 0xbb, 0x40, 0xd1, 0x57, 0x4f, 0x7d, 0xe8, 0x1b, 0xfc, -0x0c, 0x5e, 0x6b, 0x68, 0x94, 0x3c, 0x11, 0xed, 0x84, 0x96, 0x6f, 0xfe, 0x7d, 0x1e, 0xd8, 0x40, -0xfe, 0xf9, 0xe5, 0xaf, 0x66, 0xfb, 0xc8, 0x79, 0x82, 0xcf, 0xc0, 0xf3, 0xbd, 0x05, 0xcc, 0xfe, -0xfd, 0x40, 0x77, 0x60, 0x3f, 0xfe, 0xe7, 0xb7, 0x5e, 0xc2, 0xef, 0x48, 0xa2, 0x9f, 0xaa, 0xd6, -0xc7, 0xbf, 0x02, 0x96, 0xaa, 0x22, 0x04, 0x34, 0xe0, 0xf9, 0xf0, 0x16, 0x94, 0x81, 0x24, 0x64, -0x70, 0xe5, 0x80, 0x1b, 0x13, 0x14, 0x48, 0x41, 0xa4, 0x6c, 0x2b, 0x81, 0x15, 0x34, 0x5f, 0xcd, -0x12, 0x42, 0xbb, 0x9a, 0xf9, 0x4b, 0x1e, 0x1b, 0x8c, 0x47, 0x06, 0x33, 0x28, 0xba, 0x11, 0x52, -0xd0, 0x35, 0x30, 0x43, 0xca, 0x06, 0x09, 0xb2, 0x01, 0x0c, 0x9a, 0xf0, 0x7c, 0x7d, 0x78, 0x61, -0x05, 0xc5, 0xe7, 0xaa, 0x47, 0x11, 0xa1, 0x10, 0x26, 0x70, 0xa1, 0x0c, 0xcb, 0x27, 0xbc, 0x1d, -0x52, 0x90, 0x86, 0xb9, 0x23, 0x15, 0xf1, 0x90, 0x64, 0x3d, 0x0d, 0xec, 0xcf, 0x87, 0x30, 0xac, -0xc0, 0x97, 0x90, 0x78, 0x42, 0xae, 0xcd, 0x6f, 0x88, 0xe3, 0x61, 0xa0, 0x12, 0x99, 0xa8, 0xc0, -0xe3, 0x50, 0xb1, 0x82, 0x08, 0x71, 0x1b, 0x2c, 0xff, 0x88, 0x17, 0xae, 0xc6, 0x5c, 0x40, 0x87, -0x57, 0x94, 0x07, 0x2f, 0xc2, 0xa8, 0x40, 0xf1, 0x69, 0xb1, 0x3e, 0xf2, 0x13, 0x20, 0x7c, 0xc8, -0x78, 0x3f, 0x20, 0x1e, 0x20, 0x85, 0x6c, 0xc4, 0xdf, 0x06, 0x7b, 0x77, 0x03, 0x2f, 0xce, 0xc8, -0x11, 0x7a, 0xaa, 0x08, 0xff, 0x0a, 0xe4, 0x12, 0x98, 0xf8, 0xb1, 0x4b, 0x5d, 0xc3, 0xdf, 0x6a, -0xfa, 0xf8, 0xc7, 0x98, 0x30, 0x86, 0x7f, 0x05, 0x21, 0x52, 0x67, 0x74, 0xe7, 0xc6, 0x69, 0xb4, -0xf1, 0x7a, 0x20, 0x58, 0x22, 0xfb, 0x42, 0xd8, 0x43, 0xf6, 0x01, 0x65, 0x66, 0x86, 0xf0, 0x9f, -0x23, 0x1d, 0x71, 0x40, 0xa5, 0x3c, 0xd2, 0x60, 0x3a, 0x94, 0xa2, 0x07, 0x3e, 0xa8, 0x41, 0x0f, -0xdc, 0x83, 0x08, 0xb3, 0x22, 0xd7, 0x03, 0x17, 0xa8, 0x36, 0xf6, 0x89, 0x12, 0x04, 0x2e, 0xa4, -0xa1, 0x2a, 0xa1, 0x02, 0x2f, 0x11, 0xb6, 0x0f, 0x6b, 0x96, 0x34, 0x81, 0x24, 0xcb, 0xd7, 0x2f, -0x81, 0x29, 0x83, 0x7c, 0x34, 0x3c, 0x62, 0x1a, 0x28, 0xe9, 0x82, 0x5d, 0x12, 0xa9, 0x91, 0x2d, -0x3c, 0x1f, 0x45, 0xea, 0x63, 0x10, 0x62, 0x66, 0xc0, 0x85, 0x90, 0x14, 0x81, 0x31, 0xed, 0xe3, -0x4c, 0x0e, 0x08, 0xd3, 0x59, 0x10, 0x42, 0x04, 0x1a, 0x47, 0x00, 0x4d, 0x8e, 0x5d, 0xb3, 0x9a, -0xdd, 0xeb, 0x5f, 0x80, 0x1c, 0xf9, 0x4b, 0xc2, 0x45, 0xc0, 0x85, 0x38, 0xfb, 0x66, 0x0a, 0x58, -0xf9, 0x29, 0x72, 0x0a, 0x64, 0x7d, 0x34, 0xc4, 0x20, 0x32, 0x57, 0xa0, 0x4e, 0x14, 0xb0, 0x13, -0x42, 0x78, 0x1c, 0xa2, 0x23, 0x0b, 0x54, 0x92, 0xb7, 0xdd, 0xd2, 0x9b, 0xe2, 0xb4, 0xa7, 0xf9, -0xdc, 0x04, 0xab, 0x03, 0xe4, 0x51, 0x7e, 0x5f, 0x1c, 0x68, 0x3a, 0x03, 0x7a, 0x82, 0x7b, 0x2a, -0x61, 0x98, 0xd2, 0x43, 0xa8, 0xe5, 0xfe, 0x39, 0xff, 0xb1, 0x7a, 0x36, 0x54, 0xa1, 0x6b, 0xb4, -0x8f, 0x44, 0x2b, 0x20, 0xcf, 0x85, 0x96, 0x52, 0xa0, 0x14, 0x55, 0x8a, 0xf4, 0x16, 0xb9, 0xa1, -0x8e, 0x02, 0xf4, 0xa3, 0x26, 0x80, 0x63, 0xcc, 0x38, 0x60, 0xc7, 0x89, 0xd6, 0xf2, 0xa4, 0xe5, -0x03, 0xe7, 0xb6, 0x1c, 0x5a, 0x42, 0x4e, 0xb0, 0xc9, 0x9f, 0x2f, 0xad, 0x28, 0x43, 0x4b, 0xa0, -0xd2, 0xef, 0xdd, 0x25, 0xa7, 0xc1, 0x0a, 0xa9, 0xba, 0x2c, 0xca, 0x53, 0x9a, 0x7a, 0xe4, 0x20, -0xfd, 0x3c, 0x27, 0x46, 0x75, 0x8a, 0xd2, 0xa2, 0x2e, 0x55, 0x03, 0x67, 0xc3, 0xe9, 0x31, 0x3d, -0x1a, 0x53, 0x14, 0xf4, 0x34, 0x4a, 0x2c, 0x95, 0xa0, 0x52, 0x85, 0x4a, 0x03, 0xa2, 0x6e, 0xc1, -0xa8, 0x46, 0xd9, 0xe0, 0x3d, 0x46, 0x2a, 0xd5, 0x95, 0x32, 0xb5, 0xaa, 0xe8, 0x01, 0xeb, 0x13, -0xab, 0xc3, 0xc3, 0xad, 0x02, 0x75, 0xa8, 0x3b, 0xfd, 0xea, 0x53, 0x95, 0xb2, 0xc4, 0x26, 0xd8, -0x8b, 0x64, 0xf1, 0x9c, 0x6b, 0x57, 0xe3, 0x7a, 0x07, 0xb5, 0x1a, 0x54, 0x85, 0x21, 0x30, 0xe9, -0x59, 0x09, 0x25, 0x53, 0x4f, 0xf8, 0xf5, 0x90, 0x91, 0xd2, 0x64, 0x56, 0xb9, 0x8a, 0x3a, 0xbe, -0x5e, 0xc6, 0xaf, 0x5b, 0xc4, 0x0f, 0x26, 0x07, 0x99, 0x37, 0xf3, 0x51, 0x95, 0xb0, 0x86, 0x81, -0x2c, 0xb8, 0x36, 0x38, 0xcd, 0x55, 0x94, 0xd5, 0x3e, 0xd1, 0x0c, 0x81, 0x57, 0x47, 0x30, 0xda, -0x84, 0xe2, 0x0d, 0x52, 0x79, 0x35, 0x5f, 0x68, 0x23, 0xa9, 0xd9, 0x0e, 0xb8, 0x90, 0x98, 0xb3, -0x2c, 0xde, 0x5e, 0xd4, 0x58, 0xda, 0x18, 0x74, 0x16, 0xab, 0x4e, 0x55, 0x6d, 0xde, 0x9a, 0x47, -0x23, 0xda, 0xb2, 0x6f, 0xb5, 0xe9, 0xfb, 0xad, 0x09, 0xae, 0xa9, 0x4f, 0x57, 0xec, 0x2e, 0x58, -0xa4, 0xa2, 0xe1, 0x6d, 0xc9, 0x03, 0xdc, 0x0e, 0xff, 0xb8, 0xb2, 0xb9, 0x0e, 0x71, 0x65, 0x59, -0x49, 0xfa, 0x2e, 0x59, 0xe2, 0x0f, 0xba, 0x46, 0xbc, 0x1f, 0x70, 0x89, 0xab, 0xd5, 0xbf, 0x0e, -0x6e, 0x91, 0x7c, 0xac, 0x23, 0x36, 0x79, 0x7b, 0xbf, 0xc2, 0x96, 0x60, 0xb9, 0xe4, 0xc1, 0x9c, -0x46, 0xb8, 0x3b, 0x8c, 0xab, 0x14, 0xf7, 0xaa, 0x76, 0x41, 0x2f, 0x35, 0xb5, 0x47, 0x5f, 0xfa, -0x4a, 0x04, 0x8c, 0x4a, 0xab, 0x2f, 0xf5, 0xf0, 0xab, 0x46, 0x60, 0x88, 0xef, 0x45, 0xe6, 0x4c, -0x45, 0x1c, 0xdb, 0xa8, 0xaa, 0x01, 0x17, 0x10, 0xbb, 0xcf, 0x34, 0xb0, 0x5e, 0x9f, 0xa5, 0xe0, -0x49, 0x86, 0xad, 0xc1, 0x6f, 0xa5, 0x25, 0x84, 0x23, 0xec, 0x37, 0x4d, 0x1e, 0xd4, 0x21, 0x16, -0x06, 0x27, 0x7f, 0xaf, 0xd8, 0x48, 0xf6, 0xb2, 0xb1, 0x21, 0x5a, 0x04, 0xd1, 0x1d, 0xd1, 0x50, -0xdc, 0xa0, 0x4e, 0x18, 0x7d, 0x81, 0x3c, 0xb1, 0x2f, 0x9d, 0xb8, 0x80, 0x22, 0x85, 0x2f, 0x86, -0x2a, 0x9e, 0xa7, 0x87, 0x99, 0xd8, 0xb6, 0xde, 0x12, 0xcf, 0x79, 0xf3, 0x74, 0xe4, 0x89, 0x73, -0xbc, 0xe1, 0x1d, 0xba, 0x26, 0xc4, 0x2e, 0x9e, 0x5f, 0x8e, 0x99, 0x35, 0xe1, 0x21, 0xcf, 0xf8, -0x85, 0xb1, 0x01, 0xf2, 0x8d, 0x7b, 0x3b, 0xe4, 0xbd, 0xf4, 0xd8, 0x84, 0x4d, 0xf6, 0x1e, 0x19, -0x0b, 0x4b, 0x47, 0x7f, 0xc5, 0x8b, 0x13, 0x39, 0x00, 0xe0, 0x05, 0x15, 0xdc, 0x64, 0x27, 0x87, -0x51, 0xb1, 0x05, 0x26, 0xd2, 0xc0, 0xe0, 0xab, 0x13, 0xc4, 0x4e, 0x79, 0x94, 0x66, 0x86, 0x32, -0x98, 0x8f, 0xd3, 0xb8, 0x02, 0xbd, 0x33, 0xbd, 0x77, 0x00, 0x82, 0x10, 0xe6, 0x4c, 0x67, 0xe0, -0x9e, 0x84, 0xce, 0x42, 0x70, 0x60, 0xf2, 0xf6, 0xcc, 0xe7, 0x3e, 0xfb, 0xf9, 0xcf, 0x80, 0x0e, -0xb4, 0xa0, 0x07, 0x4d, 0xe8, 0x42, 0x97, 0x20, 0x01, 0x01, 0x00, 0x3b diff --git a/contrib/libpoco/Net/samples/Ping/CMakeLists.txt b/contrib/libpoco/Net/samples/Ping/CMakeLists.txt deleted file mode 100644 index 63c7691481d..00000000000 --- a/contrib/libpoco/Net/samples/Ping/CMakeLists.txt +++ /dev/null @@ -1,7 +0,0 @@ -set(SAMPLE_NAME "Ping") - -set(LOCAL_SRCS "") -aux_source_directory(src LOCAL_SRCS) - -add_executable( ${SAMPLE_NAME} ${LOCAL_SRCS} ) -target_link_libraries( ${SAMPLE_NAME} PocoNet PocoUtil PocoJSON PocoXML PocoFoundation ) diff --git a/contrib/libpoco/Net/samples/Ping/ping.properties b/contrib/libpoco/Net/samples/Ping/ping.properties deleted file mode 100644 index 4ec401d4880..00000000000 --- a/contrib/libpoco/Net/samples/Ping/ping.properties +++ /dev/null @@ -1,8 +0,0 @@ -# This is a sample configuration file. -logging.loggers.root.channel.class = ConsoleChannel -logging.loggers.app.name = Application -logging.loggers.app.channel = c1 -logging.formatters.f1.class = PatternFormatter -logging.formatters.f1.pattern = %t -logging.channels.c1.class = ConsoleChannel -logging.channels.c1.formatter = f1 diff --git a/contrib/libpoco/Net/samples/Ping/src/Ping.cpp b/contrib/libpoco/Net/samples/Ping/src/Ping.cpp deleted file mode 100644 index eee716452f9..00000000000 --- a/contrib/libpoco/Net/samples/Ping/src/Ping.cpp +++ /dev/null @@ -1,199 +0,0 @@ -// -// Ping.cpp -// -// $Id: //poco/1.4/Net/samples/Ping/src/Ping.cpp#1 $ -// -// This sample demonstrates the Application class. -// -// Copyright (c) 2004-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "Poco/Util/Application.h" -#include "Poco/Util/Option.h" -#include "Poco/Util/OptionSet.h" -#include "Poco/Util/HelpFormatter.h" -#include "Poco/Util/AbstractConfiguration.h" -#include "Poco/Net/ICMPSocket.h" -#include "Poco/Net/ICMPClient.h" -#include "Poco/Net/IPAddress.h" -#include "Poco/Net/ICMPEventArgs.h" -#include "Poco/AutoPtr.h" -#include "Poco/NumberParser.h" -#include "Poco/Delegate.h" -#include -#include - - -using Poco::Util::Application; -using Poco::Util::Option; -using Poco::Util::OptionSet; -using Poco::Util::HelpFormatter; -using Poco::Util::AbstractConfiguration; -using Poco::Net::ICMPSocket; -using Poco::Net::ICMPClient; -using Poco::Net::IPAddress; -using Poco::Net::ICMPEventArgs; -using Poco::AutoPtr; -using Poco::NumberParser; -using Poco::Delegate; - - -class Ping: public Application - /// This sample demonstrates the Poco::Net::ICMPClient in conjunction with - /// Poco Foundation C#-like events functionality. - /// - /// Try Ping --help (on Unix platforms) or Ping /help (elsewhere) for - /// more information. -{ -public: - Ping(): - _helpRequested(false), - _icmpClient(IPAddress::IPv4), - _repetitions(4), - _target("localhost") - { - } - -protected: - void initialize(Application& self) - { - loadConfiguration(); // load default configuration files, if present - Application::initialize(self); - - _icmpClient.pingBegin += delegate(this, &Ping::onBegin); - _icmpClient.pingReply += delegate(this, &Ping::onReply); - _icmpClient.pingError += delegate(this, &Ping::onError); - _icmpClient.pingEnd += delegate(this, &Ping::onEnd); - } - - void uninitialize() - { - _icmpClient.pingBegin -= delegate(this, &Ping::onBegin); - _icmpClient.pingReply -= delegate(this, &Ping::onReply); - _icmpClient.pingError -= delegate(this, &Ping::onError); - _icmpClient.pingEnd -= delegate(this, &Ping::onEnd); - - Application::uninitialize(); - } - - void defineOptions(OptionSet& options) - { - Application::defineOptions(options); - - options.addOption( - Option("help", "h", "display help information on command line arguments") - .required(false) - .repeatable(false)); - - options.addOption( - Option("repetitions", "r", "define the number of repetitions") - .required(false) - .repeatable(false) - .argument("repetitions")); - - options.addOption( - Option("target", "t", "define the target address") - .required(false) - .repeatable(false) - .argument("target")); - } - - void handleOption(const std::string& name, const std::string& value) - { - Application::handleOption(name, value); - - if (name == "help") - _helpRequested = true; - else if (name == "repetitions") - _repetitions = NumberParser::parse(value); - else if (name == "target") - _target = value; - } - - void displayHelp() - { - HelpFormatter helpFormatter(options()); - helpFormatter.setCommand(commandName()); - helpFormatter.setUsage("OPTIONS"); - helpFormatter.setHeader( - "A sample application that demonstrates the functionality of the " - "Poco::Net::ICMPClient class in conjunction with Poco::Events package functionality."); - helpFormatter.format(std::cout); - } - - - int main(const std::vector& args) - { - if (_helpRequested) - displayHelp(); - else - _icmpClient.ping(_target, _repetitions); - - return Application::EXIT_OK; - } - - - void onBegin(const void* pSender, ICMPEventArgs& args) - { - std::ostringstream os; - os << "Pinging " << args.hostName() << " [" << args.hostAddress() << "] with " << args.dataSize() << " bytes of data:" - << std::endl << "---------------------------------------------" << std::endl; - logger().information(os.str()); - } - - void onReply(const void* pSender, ICMPEventArgs& args) - { - std::ostringstream os; - os << "Reply from " << args.hostAddress() - << " bytes=" << args.dataSize() - << " time=" << args.replyTime() << "ms" - << " TTL=" << args.ttl(); - logger().information(os.str()); - } - - void onError(const void* pSender, ICMPEventArgs& args) - { - std::ostringstream os; - os << args.error(); - logger().information(os.str()); - } - - void onEnd(const void* pSender, ICMPEventArgs& args) - { - std::ostringstream os; - os << std::endl << "--- Ping statistics for " << args.hostName() << " ---" - << std::endl << "Packets: Sent=" << args.sent() << ", Received=" << args.received() - << " Lost=" << args.repetitions() - args.received() << " (" << 100.0 - args.percent() << "% loss)," - << std::endl << "Approximate round trip times in milliseconds: " << std::endl - << "Minimum=" << args.minRTT() << "ms, Maximum=" << args.maxRTT() - << "ms, Average=" << args.avgRTT() << "ms" - << std::endl << "------------------------------------------"; - logger().information(os.str()); - } - -private: - bool _helpRequested; - ICMPClient _icmpClient; - int _repetitions; - std::string _target; -}; - - -int main(int argc, char** argv) -{ - AutoPtr pApp = new Ping; - try - { - pApp->init(argc, argv); - } - catch (Poco::Exception& exc) - { - pApp->logger().log(exc); - return Application::EXIT_CONFIG; - } - return pApp->run(); -} diff --git a/contrib/libpoco/Net/samples/SMTPLogger/CMakeLists.txt b/contrib/libpoco/Net/samples/SMTPLogger/CMakeLists.txt deleted file mode 100644 index eb84ca7562a..00000000000 --- a/contrib/libpoco/Net/samples/SMTPLogger/CMakeLists.txt +++ /dev/null @@ -1,7 +0,0 @@ -set(SAMPLE_NAME "SMTPLogger") - -set(LOCAL_SRCS "") -aux_source_directory(src LOCAL_SRCS) - -add_executable( ${SAMPLE_NAME} ${LOCAL_SRCS} ) -target_link_libraries( ${SAMPLE_NAME} PocoNet PocoUtil PocoJSON PocoXML PocoFoundation ) diff --git a/contrib/libpoco/Net/samples/SMTPLogger/res/logo.gif b/contrib/libpoco/Net/samples/SMTPLogger/res/logo.gif deleted file mode 100644 index a25d670ea41a43343335836462258bb3cb3b38ed..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2108 zcmV-C2*dYBNk%w1VW0qo0HOc@(cR=lo612|VTzWXqP)xi8!P~Iw*UYCA^8LV00000 zEC2ui0H6Sc000C3c)HyFFv>}*y*TU5yZ>M)j$~<`XsWJk>%MR-&nrOOc&_gR;M%<4 z4&dtm2F1l~a!Ymy0fTf(ty-%ACkYU}dcTH1Z!;(m8ij&HkS=I1wk~*n6_4Wdyw#2= zp9x3@X%S@tYy%r|dW%$NABv2OSr>kSW|k3YJ_Q09T#=wtjvSDoi=z{jX=j5BHVT@8 zop7eLlNkiHwiT+EtqW|dZn77-y0vc-#>b|~481+S3c;2>L>9};paHbnrrZ)`oN0!f z4b-vS-l5=3>$~A?Z30^2Y_k`o?|SVK`?aVZ5E-_fS#ThHu9vY zrhzzlH5&*8Be7VX2P~~Lbvmctgqq?8Xx)k^LR2bK^9^l~a!OdLOfA$rl%cEvpdH*= z^*IMFhoxTZDgdzd5(c+t)qPP~6~$L6a{+N3aPOSo3x!X(B@AY+2)uh797P(Cn&3Jp z0K1ATxv~QShEfX%8Lae}!@Y}sEdTkve5cB9aWGb^*K3Ra zuLA1;I>U&0>2^2rXzjIPjG;k(nm)1Y0fqDs>NTTQL(G`l(O~OfCyeC^q2(P?pAFJF zu<8u%j*z4Q$)ILmc~G_?YKFF{OIE%hEf(r90e zvqM_%$^@lm*K2jUb2DI~)_mwo4$VRH-M8Obt2pzY=o|bDUTbKSJQ3}LmT&%j9@s$s`Q@)> z`^b5M&%pD&1)u|Dz>AbiMpKOi0;g>1y%277k{FV4sjda4Nj3gi-)__0e}!{2K9_{W$q zhJOViQfGAM#%Z+idLURL`$E`5_5o#PhVY*w9dSUVJknq~l%fYds6h|hg9x)C*8>-* zHui}U1TLhZDxm@|5w;I&mNbDR%hxY~DT918JYpIs>4IGnsgW%_A4Te85MpM)g^(11 zG410_4hYj(5JChRM*vNZU9+0q>tBEz`Afn@z=b&bW(rvODRK&AeKf=%GFPBZ6tELQ zcpRc53sjP~-O`)lw5R#p1git&QGQ<>XgULWf_o}qn9@V2<^DPUv3fRCp=-2{L@OZA zg_csF6jh4!7P+C00`#LMfMd)!V8@Bp@}%Vh=e8VLLQb&BpD(Q_Lrb92@7*P*!3wFm zEXq@wdgLJeJSRqViqfJkRRd?k=`lSTQxx{nGPSDc z0qYa1!^5otb*MZ2>Qj}n#3tB_WbvG9SL1pIwHj1~Au#D#2_;ic`1O#H(qvY-iaNet z#;;q%4<-khH}g@Iu!eywxHdS=Rg~2}(F}oCM=;ui;tf)HHD72Wso4&=keIV9-d@yL z+8A^et4>vI-kL`v+Olu8>HDn-uBlH~>@HZOqTy}H1KbY(xU#tpab;Oa`Yu`G54uLY zA8?7Q)xQpIk$kKpHhFu$!j@pU9%1dK|nFZJ-NMqr5V zMdnOJ9NVa>0T&Rv&or=JpQYeQhONPGr6q(T>^Dsw)FBoICx5TlNcOU^AzB2{9nnzS zpiUTlfjqGtap zdpqR4^w@+=_8u7vOGkgjixW8j-~|=jWG9DFu>~g5z~HMB#7=pXW`;7DkJGpUy)(Uc m0D=(aOlRPpgw8^6VDk3N=RW)S&wviJpa)IpLYE)`0RTJJ3ghMg diff --git a/contrib/libpoco/Net/samples/SMTPLogger/src/SMTPLogger.cpp b/contrib/libpoco/Net/samples/SMTPLogger/src/SMTPLogger.cpp deleted file mode 100644 index 9ac20e7f8d2..00000000000 --- a/contrib/libpoco/Net/samples/SMTPLogger/src/SMTPLogger.cpp +++ /dev/null @@ -1,72 +0,0 @@ -// -// Mail.cpp -// -// $Id: //poco/svn/Net/samples/SMTPLogger/src/SMTPLogger.cpp#1 $ -// -// This sample demonstrates the SMTPChannel class. -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "Poco/Net/MailMessage.h" -#include "Poco/Net/SMTPChannel.h" -#include "Poco/Logger.h" -#include "Poco/Path.h" -#include "Poco/AutoPtr.h" -#include "Poco/Exception.h" -#include - - -using Poco::Net::SMTPChannel; -using Poco::Logger; -using Poco::Path; -using Poco::AutoPtr; -using Poco::Exception; - - -#if defined(POCO_OS_FAMILY_UNIX) -const std::string fileName = "${POCO_BASE}/Net/samples/SMTPLogger/res/logo.gif"; -#elif defined(POCO_OS_FAMILY_WINDOWS) -const std::string fileName = "%POCO_BASE%/Net/samples/SMTPLogger/res/logo.gif"; -#endif - - -int main(int argc, char** argv) -{ - if (argc != 4) - { - Path p(argv[0]); - std::cerr << "usage: " << p.getBaseName() << " " << std::endl; - std::cerr << " Send an email log entry from to ," << std::endl; - std::cerr << " the SMTP server at ." << std::endl; - return 1; - } - - std::string mailhost(argv[1]); - std::string sender(argv[2]); - std::string recipient(argv[3]); - std::string attachment = Path::expand(fileName); - - try - { - AutoPtr pSMTPChannel = new SMTPChannel(mailhost, sender, recipient); - pSMTPChannel->setProperty("attachment", attachment); - pSMTPChannel->setProperty("type", "image/gif"); - pSMTPChannel->setProperty("delete", "false"); - pSMTPChannel->setProperty("throw", "true"); - - Logger& logger = Logger::get("POCO Sample SMTP Logger"); - logger.setChannel(pSMTPChannel.get()); - logger.critical("Critical message"); - } - catch (Exception& exc) - { - std::cerr << exc.displayText() << std::endl; - return 1; - } - return 0; -} diff --git a/contrib/libpoco/Net/samples/TimeServer/CMakeLists.txt b/contrib/libpoco/Net/samples/TimeServer/CMakeLists.txt deleted file mode 100644 index ab9b46e14d4..00000000000 --- a/contrib/libpoco/Net/samples/TimeServer/CMakeLists.txt +++ /dev/null @@ -1,7 +0,0 @@ -set(SAMPLE_NAME "TimeServer") - -set(LOCAL_SRCS "") -aux_source_directory(src LOCAL_SRCS) - -add_executable( ${SAMPLE_NAME} ${LOCAL_SRCS} ) -target_link_libraries( ${SAMPLE_NAME} PocoNet PocoUtil PocoJSON PocoXML PocoFoundation ) diff --git a/contrib/libpoco/Net/samples/TimeServer/TimeServer.properties b/contrib/libpoco/Net/samples/TimeServer/TimeServer.properties deleted file mode 100644 index a32eefd2c7d..00000000000 --- a/contrib/libpoco/Net/samples/TimeServer/TimeServer.properties +++ /dev/null @@ -1,11 +0,0 @@ -# This is a sample configuration file for TimeServer - -logging.loggers.root.channel.class = ConsoleChannel -logging.loggers.app.name = Application -logging.loggers.app.channel = c1 -logging.formatters.f1.class = PatternFormatter -logging.formatters.f1.pattern = [%p] %t -logging.channels.c1.class = ConsoleChannel -logging.channels.c1.formatter = f1 -# TimeServer.format = %W, %e %b %y %H:%M:%S %Z -# TimeServer.port = 9911 diff --git a/contrib/libpoco/Net/samples/TimeServer/src/TimeServer.cpp b/contrib/libpoco/Net/samples/TimeServer/src/TimeServer.cpp deleted file mode 100644 index 813445ddd51..00000000000 --- a/contrib/libpoco/Net/samples/TimeServer/src/TimeServer.cpp +++ /dev/null @@ -1,202 +0,0 @@ -// -// TimeServer.cpp -// -// $Id: //poco/1.4/Net/samples/TimeServer/src/TimeServer.cpp#1 $ -// -// This sample demonstrates the TCPServer and ServerSocket classes. -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "Poco/Net/TCPServer.h" -#include "Poco/Net/TCPServerConnection.h" -#include "Poco/Net/TCPServerConnectionFactory.h" -#include "Poco/Net/TCPServerParams.h" -#include "Poco/Net/StreamSocket.h" -#include "Poco/Net/ServerSocket.h" -#include "Poco/Timestamp.h" -#include "Poco/DateTimeFormatter.h" -#include "Poco/DateTimeFormat.h" -#include "Poco/Exception.h" -#include "Poco/Util/ServerApplication.h" -#include "Poco/Util/Option.h" -#include "Poco/Util/OptionSet.h" -#include "Poco/Util/HelpFormatter.h" -#include - - -using Poco::Net::ServerSocket; -using Poco::Net::StreamSocket; -using Poco::Net::TCPServerConnection; -using Poco::Net::TCPServerConnectionFactory; -using Poco::Net::TCPServer; -using Poco::Timestamp; -using Poco::DateTimeFormatter; -using Poco::DateTimeFormat; -using Poco::Util::ServerApplication; -using Poco::Util::Application; -using Poco::Util::Option; -using Poco::Util::OptionSet; -using Poco::Util::HelpFormatter; - - -class TimeServerConnection: public TCPServerConnection - /// This class handles all client connections. - /// - /// A string with the current date and time is sent back to the client. -{ -public: - TimeServerConnection(const StreamSocket& s, const std::string& format): - TCPServerConnection(s), - _format(format) - { - } - - void run() - { - Application& app = Application::instance(); - app.logger().information("Request from " + this->socket().peerAddress().toString()); - try - { - Timestamp now; - std::string dt(DateTimeFormatter::format(now, _format)); - dt.append("\r\n"); - socket().sendBytes(dt.data(), (int) dt.length()); - } - catch (Poco::Exception& exc) - { - app.logger().log(exc); - } - } - -private: - std::string _format; -}; - - -class TimeServerConnectionFactory: public TCPServerConnectionFactory - /// A factory for TimeServerConnection. -{ -public: - TimeServerConnectionFactory(const std::string& format): - _format(format) - { - } - - TCPServerConnection* createConnection(const StreamSocket& socket) - { - return new TimeServerConnection(socket, _format); - } - -private: - std::string _format; -}; - - -class TimeServer: public Poco::Util::ServerApplication - /// The main application class. - /// - /// This class handles command-line arguments and - /// configuration files. - /// Start the TimeServer executable with the help - /// option (/help on Windows, --help on Unix) for - /// the available command line options. - /// - /// To use the sample configuration file (TimeServer.properties), - /// copy the file to the directory where the TimeServer executable - /// resides. If you start the debug version of the TimeServer - /// (TimeServerd[.exe]), you must also create a copy of the configuration - /// file named TimeServerd.properties. In the configuration file, you - /// can specify the port on which the server is listening (default - /// 9911) and the format of the date/time string sent back to the client. - /// - /// To test the TimeServer you can use any telnet client (telnet localhost 9911). -{ -public: - TimeServer(): _helpRequested(false) - { - } - - ~TimeServer() - { - } - -protected: - void initialize(Application& self) - { - loadConfiguration(); // load default configuration files, if present - ServerApplication::initialize(self); - } - - void uninitialize() - { - ServerApplication::uninitialize(); - } - - void defineOptions(OptionSet& options) - { - ServerApplication::defineOptions(options); - - options.addOption( - Option("help", "h", "display help information on command line arguments") - .required(false) - .repeatable(false)); - } - - void handleOption(const std::string& name, const std::string& value) - { - ServerApplication::handleOption(name, value); - - if (name == "help") - _helpRequested = true; - } - - void displayHelp() - { - HelpFormatter helpFormatter(options()); - helpFormatter.setCommand(commandName()); - helpFormatter.setUsage("OPTIONS"); - helpFormatter.setHeader("A server application that serves the current date and time."); - helpFormatter.format(std::cout); - } - - int main(const std::vector& args) - { - if (_helpRequested) - { - displayHelp(); - } - else - { - // get parameters from configuration file - unsigned short port = (unsigned short) config().getInt("TimeServer.port", 9911); - std::string format(config().getString("TimeServer.format", DateTimeFormat::ISO8601_FORMAT)); - - // set-up a server socket - ServerSocket svs(port); - // set-up a TCPServer instance - TCPServer srv(new TimeServerConnectionFactory(format), svs); - // start the TCPServer - srv.start(); - // wait for CTRL-C or kill - waitForTerminationRequest(); - // Stop the TCPServer - srv.stop(); - } - return Application::EXIT_OK; - } - -private: - bool _helpRequested; -}; - - -int main(int argc, char** argv) -{ - TimeServer app; - return app.run(argc, argv); -} diff --git a/contrib/libpoco/Net/samples/WebSocketServer/CMakeLists.txt b/contrib/libpoco/Net/samples/WebSocketServer/CMakeLists.txt deleted file mode 100644 index ceba96d63db..00000000000 --- a/contrib/libpoco/Net/samples/WebSocketServer/CMakeLists.txt +++ /dev/null @@ -1,10 +0,0 @@ -set(SAMPLE_NAME "WebSocketServer") - -set(LOCAL_SRCS "") -aux_source_directory(src LOCAL_SRCS) - -add_executable( ${SAMPLE_NAME} ${LOCAL_SRCS} ) -if(WINCE) -set_target_properties( ${SAMPLE_NAME} PROPERTIES LINK_FLAGS "/ENTRY:wmainCRTStartup") -endif() -target_link_libraries( ${SAMPLE_NAME} PocoNet PocoUtil PocoJSON PocoXML PocoFoundation ) diff --git a/contrib/libpoco/Net/samples/WebSocketServer/src/WebSocketServer.cpp b/contrib/libpoco/Net/samples/WebSocketServer/src/WebSocketServer.cpp deleted file mode 100644 index 440ab7d5dd9..00000000000 --- a/contrib/libpoco/Net/samples/WebSocketServer/src/WebSocketServer.cpp +++ /dev/null @@ -1,271 +0,0 @@ -// -// WebSocketServer.cpp -// -// $Id: //poco/1.4/Net/samples/WebSocketServer/src/WebSocketServer.cpp#1 $ -// -// This sample demonstrates the WebSocket class. -// -// Copyright (c) 2012, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "Poco/Net/HTTPServer.h" -#include "Poco/Net/HTTPRequestHandler.h" -#include "Poco/Net/HTTPRequestHandlerFactory.h" -#include "Poco/Net/HTTPServerParams.h" -#include "Poco/Net/HTTPServerRequest.h" -#include "Poco/Net/HTTPServerResponse.h" -#include "Poco/Net/HTTPServerParams.h" -#include "Poco/Net/ServerSocket.h" -#include "Poco/Net/WebSocket.h" -#include "Poco/Net/NetException.h" -#include "Poco/Util/ServerApplication.h" -#include "Poco/Util/Option.h" -#include "Poco/Util/OptionSet.h" -#include "Poco/Util/HelpFormatter.h" -#include "Poco/Format.h" -#include - - -using Poco::Net::ServerSocket; -using Poco::Net::WebSocket; -using Poco::Net::WebSocketException; -using Poco::Net::HTTPRequestHandler; -using Poco::Net::HTTPRequestHandlerFactory; -using Poco::Net::HTTPServer; -using Poco::Net::HTTPServerRequest; -using Poco::Net::HTTPResponse; -using Poco::Net::HTTPServerResponse; -using Poco::Net::HTTPServerParams; -using Poco::Timestamp; -using Poco::ThreadPool; -using Poco::Util::ServerApplication; -using Poco::Util::Application; -using Poco::Util::Option; -using Poco::Util::OptionSet; -using Poco::Util::HelpFormatter; - - -class PageRequestHandler: public HTTPRequestHandler - /// Return a HTML document with some JavaScript creating - /// a WebSocket connection. -{ -public: - void handleRequest(HTTPServerRequest& request, HTTPServerResponse& response) - { - response.setChunkedTransferEncoding(true); - response.setContentType("text/html"); - std::ostream& ostr = response.send(); - ostr << ""; - ostr << ""; - ostr << "WebSocketServer"; - ostr << ""; - ostr << ""; - ostr << ""; - ostr << "

WebSocket Server

"; - ostr << "

Run WebSocket Script

"; - ostr << ""; - ostr << ""; - } -}; - - -class WebSocketRequestHandler: public HTTPRequestHandler - /// Handle a WebSocket connection. -{ -public: - void handleRequest(HTTPServerRequest& request, HTTPServerResponse& response) - { - Application& app = Application::instance(); - try - { - WebSocket ws(request, response); - app.logger().information("WebSocket connection established."); - char buffer[1024]; - int flags; - int n; - do - { - n = ws.receiveFrame(buffer, sizeof(buffer), flags); - app.logger().information(Poco::format("Frame received (length=%d, flags=0x%x).", n, unsigned(flags))); - ws.sendFrame(buffer, n, flags); - } - while (n > 0 || (flags & WebSocket::FRAME_OP_BITMASK) != WebSocket::FRAME_OP_CLOSE); - app.logger().information("WebSocket connection closed."); - } - catch (WebSocketException& exc) - { - app.logger().log(exc); - switch (exc.code()) - { - case WebSocket::WS_ERR_HANDSHAKE_UNSUPPORTED_VERSION: - response.set("Sec-WebSocket-Version", WebSocket::WEBSOCKET_VERSION); - // fallthrough - case WebSocket::WS_ERR_NO_HANDSHAKE: - case WebSocket::WS_ERR_HANDSHAKE_NO_VERSION: - case WebSocket::WS_ERR_HANDSHAKE_NO_KEY: - response.setStatusAndReason(HTTPResponse::HTTP_BAD_REQUEST); - response.setContentLength(0); - response.send(); - break; - } - } - } -}; - - -class RequestHandlerFactory: public HTTPRequestHandlerFactory -{ -public: - HTTPRequestHandler* createRequestHandler(const HTTPServerRequest& request) - { - Application& app = Application::instance(); - app.logger().information("Request from " - + request.clientAddress().toString() - + ": " - + request.getMethod() - + " " - + request.getURI() - + " " - + request.getVersion()); - - for (HTTPServerRequest::ConstIterator it = request.begin(); it != request.end(); ++it) - { - app.logger().information(it->first + ": " + it->second); - } - - if(request.find("Upgrade") != request.end() && Poco::icompare(request["Upgrade"], "websocket") == 0) - return new WebSocketRequestHandler; - else - return new PageRequestHandler; - } -}; - - -class WebSocketServer: public Poco::Util::ServerApplication - /// The main application class. - /// - /// This class handles command-line arguments and - /// configuration files. - /// Start the WebSocketServer executable with the help - /// option (/help on Windows, --help on Unix) for - /// the available command line options. - /// - /// To use the sample configuration file (WebSocketServer.properties), - /// copy the file to the directory where the WebSocketServer executable - /// resides. If you start the debug version of the WebSocketServer - /// (WebSocketServerd[.exe]), you must also create a copy of the configuration - /// file named WebSocketServerd.properties. In the configuration file, you - /// can specify the port on which the server is listening (default - /// 9980) and the format of the date/time string sent back to the client. - /// - /// To test the WebSocketServer you can use any web browser (http://localhost:9980/). -{ -public: - WebSocketServer(): _helpRequested(false) - { - } - - ~WebSocketServer() - { - } - -protected: - void initialize(Application& self) - { - loadConfiguration(); // load default configuration files, if present - ServerApplication::initialize(self); - } - - void uninitialize() - { - ServerApplication::uninitialize(); - } - - void defineOptions(OptionSet& options) - { - ServerApplication::defineOptions(options); - - options.addOption( - Option("help", "h", "display help information on command line arguments") - .required(false) - .repeatable(false)); - } - - void handleOption(const std::string& name, const std::string& value) - { - ServerApplication::handleOption(name, value); - - if (name == "help") - _helpRequested = true; - } - - void displayHelp() - { - HelpFormatter helpFormatter(options()); - helpFormatter.setCommand(commandName()); - helpFormatter.setUsage("OPTIONS"); - helpFormatter.setHeader("A sample HTTP server supporting the WebSocket protocol."); - helpFormatter.format(std::cout); - } - - int main(const std::vector& args) - { - if (_helpRequested) - { - displayHelp(); - } - else - { - // get parameters from configuration file - unsigned short port = (unsigned short) config().getInt("WebSocketServer.port", 9980); - - // set-up a server socket - ServerSocket svs(port); - // set-up a HTTPServer instance - HTTPServer srv(new RequestHandlerFactory, svs, new HTTPServerParams); - // start the HTTPServer - srv.start(); - // wait for CTRL-C or kill - waitForTerminationRequest(); - // Stop the HTTPServer - srv.stop(); - } - return Application::EXIT_OK; - } - -private: - bool _helpRequested; -}; - - -POCO_SERVER_MAIN(WebSocketServer) diff --git a/contrib/libpoco/Net/samples/dict/CMakeLists.txt b/contrib/libpoco/Net/samples/dict/CMakeLists.txt deleted file mode 100644 index cb28ba7e4d5..00000000000 --- a/contrib/libpoco/Net/samples/dict/CMakeLists.txt +++ /dev/null @@ -1,7 +0,0 @@ -set(SAMPLE_NAME "dict") - -set(LOCAL_SRCS "") -aux_source_directory(src LOCAL_SRCS) - -add_executable( ${SAMPLE_NAME} ${LOCAL_SRCS} ) -target_link_libraries( ${SAMPLE_NAME} PocoNet PocoUtil PocoJSON PocoXML PocoFoundation ) diff --git a/contrib/libpoco/Net/samples/dict/src/dict.cpp b/contrib/libpoco/Net/samples/dict/src/dict.cpp deleted file mode 100644 index 90c8765a041..00000000000 --- a/contrib/libpoco/Net/samples/dict/src/dict.cpp +++ /dev/null @@ -1,65 +0,0 @@ -// -// dict.cpp -// -// $Id: //poco/1.4/Net/samples/dict/src/dict.cpp#1 $ -// -// This sample demonstrates the StreamSocket and SocketStream classes. -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "Poco/Net/StreamSocket.h" -#include "Poco/Net/SocketStream.h" -#include "Poco/Net/SocketAddress.h" -#include "Poco/StreamCopier.h" -#include "Poco/Path.h" -#include "Poco/Exception.h" -#include - - -using Poco::Net::StreamSocket; -using Poco::Net::SocketStream; -using Poco::Net::SocketAddress; -using Poco::StreamCopier; -using Poco::Path; -using Poco::Exception; - - -int main(int argc, char** argv) -{ - const std::string HOST("dict.org"); - const unsigned short PORT = 2628; - - if (argc != 2) - { - Path p(argv[0]); - std::cout << "usage: " << p.getBaseName() << " " << std::endl; - std::cout << " looks up in dict.org and prints the results" << std::endl; - return 1; - } - std::string term(argv[1]); - - try - { - SocketAddress sa(HOST, PORT); - StreamSocket sock(sa); - SocketStream str(sock); - - str << "DEFINE ! " << term << "\r\n" << std::flush; - str << "QUIT\r\n" << std::flush; - - sock.shutdownSend(); - StreamCopier::copyStream(str, std::cout); - } - catch (Exception& exc) - { - std::cerr << exc.displayText() << std::endl; - return 1; - } - - return 0; -} diff --git a/contrib/libpoco/Net/samples/download/CMakeLists.txt b/contrib/libpoco/Net/samples/download/CMakeLists.txt deleted file mode 100644 index 9b378a37ad8..00000000000 --- a/contrib/libpoco/Net/samples/download/CMakeLists.txt +++ /dev/null @@ -1,7 +0,0 @@ -set(SAMPLE_NAME "download") - -set(LOCAL_SRCS "") -aux_source_directory(src LOCAL_SRCS) - -add_executable( ${SAMPLE_NAME} ${LOCAL_SRCS} ) -target_link_libraries( ${SAMPLE_NAME} PocoNet PocoUtil PocoJSON PocoXML PocoFoundation ) diff --git a/contrib/libpoco/Net/samples/download/src/download.cpp b/contrib/libpoco/Net/samples/download/src/download.cpp deleted file mode 100644 index 9851ecf24ec..00000000000 --- a/contrib/libpoco/Net/samples/download/src/download.cpp +++ /dev/null @@ -1,62 +0,0 @@ -// -// download.cpp -// -// $Id: //poco/1.4/Net/samples/download/src/download.cpp#1 $ -// -// This sample demonstrates the URIStreamOpener class. -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "Poco/URIStreamOpener.h" -#include "Poco/StreamCopier.h" -#include "Poco/Path.h" -#include "Poco/URI.h" -#include "Poco/Exception.h" -#include "Poco/Net/HTTPStreamFactory.h" -#include "Poco/Net/FTPStreamFactory.h" -#include -#include - - -using Poco::URIStreamOpener; -using Poco::StreamCopier; -using Poco::Path; -using Poco::URI; -using Poco::Exception; -using Poco::Net::HTTPStreamFactory; -using Poco::Net::FTPStreamFactory; - - -int main(int argc, char** argv) -{ - HTTPStreamFactory::registerFactory(); - FTPStreamFactory::registerFactory(); - - if (argc != 2) - { - Path p(argv[0]); - std::cerr << "usage: " << p.getBaseName() << " " << std::endl; - std::cerr << " Download to standard output." << std::endl; - std::cerr << " Works with http, ftp and file URIs." << std::endl; - return 1; - } - - try - { - URI uri(argv[1]); - std::unique_ptr pStr(URIStreamOpener::defaultOpener().open(uri)); - StreamCopier::copyStream(*pStr.get(), std::cout); - } - catch (Exception& exc) - { - std::cerr << exc.displayText() << std::endl; - return 1; - } - - return 0; -} diff --git a/contrib/libpoco/Net/samples/httpget/CMakeLists.txt b/contrib/libpoco/Net/samples/httpget/CMakeLists.txt deleted file mode 100644 index 7833114fe38..00000000000 --- a/contrib/libpoco/Net/samples/httpget/CMakeLists.txt +++ /dev/null @@ -1,7 +0,0 @@ -set(SAMPLE_NAME "httpget") - -set(LOCAL_SRCS "") -aux_source_directory(src LOCAL_SRCS) - -add_executable( ${SAMPLE_NAME} ${LOCAL_SRCS} ) -target_link_libraries( ${SAMPLE_NAME} PocoNet PocoUtil PocoJSON PocoXML PocoFoundation ) diff --git a/contrib/libpoco/Net/samples/httpget/src/httpget.cpp b/contrib/libpoco/Net/samples/httpget/src/httpget.cpp deleted file mode 100644 index 3e6edd0479d..00000000000 --- a/contrib/libpoco/Net/samples/httpget/src/httpget.cpp +++ /dev/null @@ -1,96 +0,0 @@ -// -// httpget.cpp -// -// $Id: //poco/1.4/Net/samples/httpget/src/httpget.cpp#3 $ -// -// This sample demonstrates the HTTPClientSession and the HTTPCredentials classes. -// -// Copyright (c) 2005-2012, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "Poco/Net/HTTPClientSession.h" -#include "Poco/Net/HTTPRequest.h" -#include "Poco/Net/HTTPResponse.h" -#include -#include "Poco/StreamCopier.h" -#include "Poco/NullStream.h" -#include "Poco/Path.h" -#include "Poco/URI.h" -#include "Poco/Exception.h" -#include - - -using Poco::Net::HTTPClientSession; -using Poco::Net::HTTPRequest; -using Poco::Net::HTTPResponse; -using Poco::Net::HTTPMessage; -using Poco::StreamCopier; -using Poco::Path; -using Poco::URI; -using Poco::Exception; - - -bool doRequest(Poco::Net::HTTPClientSession& session, Poco::Net::HTTPRequest& request, Poco::Net::HTTPResponse& response) -{ - session.sendRequest(request); - std::istream& rs = session.receiveResponse(response); - std::cout << response.getStatus() << " " << response.getReason() << std::endl; - if (response.getStatus() != Poco::Net::HTTPResponse::HTTP_UNAUTHORIZED) - { - StreamCopier::copyStream(rs, std::cout); - return true; - } - else - { - Poco::NullOutputStream null; - StreamCopier::copyStream(rs, null); - return false; - } -} - - -int main(int argc, char** argv) -{ - if (argc != 2) - { - Path p(argv[0]); - std::cout << "usage: " << p.getBaseName() << " " << std::endl; - std::cout << " fetches the resource identified by and print it to the standard output" << std::endl; - return 1; - } - - try - { - URI uri(argv[1]); - std::string path(uri.getPathAndQuery()); - if (path.empty()) path = "/"; - - std::string username; - std::string password; - Poco::Net::HTTPCredentials::extractCredentials(uri, username, password); - Poco::Net::HTTPCredentials credentials(username, password); - - HTTPClientSession session(uri.getHost(), uri.getPort()); - HTTPRequest request(HTTPRequest::HTTP_GET, path, HTTPMessage::HTTP_1_1); - HTTPResponse response; - if (!doRequest(session, request, response)) - { - credentials.authenticate(request, response); - if (!doRequest(session, request, response)) - { - std::cerr << "Invalid username or password" << std::endl; - return 1; - } - } - } - catch (Exception& exc) - { - std::cerr << exc.displayText() << std::endl; - return 1; - } - return 0; -} diff --git a/contrib/libpoco/Net/samples/ifconfig/CMakeLists.txt b/contrib/libpoco/Net/samples/ifconfig/CMakeLists.txt deleted file mode 100644 index 4878d92dc13..00000000000 --- a/contrib/libpoco/Net/samples/ifconfig/CMakeLists.txt +++ /dev/null @@ -1,7 +0,0 @@ -set(SAMPLE_NAME "ifconfig") - -set(LOCAL_SRCS "") -aux_source_directory(src LOCAL_SRCS) - -add_executable( ${SAMPLE_NAME} ${LOCAL_SRCS} ) -target_link_libraries( ${SAMPLE_NAME} PocoNet PocoUtil PocoJSON PocoXML PocoFoundation ) diff --git a/contrib/libpoco/Net/samples/ifconfig/src/ifconfig.cpp b/contrib/libpoco/Net/samples/ifconfig/src/ifconfig.cpp deleted file mode 100644 index 5f850ddb7b0..00000000000 --- a/contrib/libpoco/Net/samples/ifconfig/src/ifconfig.cpp +++ /dev/null @@ -1,148 +0,0 @@ -// -// ifconfig.cpp -// -// $Id: //poco/1.4/Net/samples/download/src/ifconfig.cpp#1 $ -// -// This sample demonstrates the (display only) ifconfig-like capabilities -// of the NetworkInterface class (on platforms where it is supported). -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "Poco/Net/NetworkInterface.h" -#include - - -#ifdef POCO_NET_HAS_INTERFACE - - -#include "Poco/Path.h" -#include "Poco/Exception.h" -#include "Poco/Net/IPAddress.h" -#include - - -using Poco::Path; -using Poco::Exception; -using Poco::Net::IPAddress; -using Poco::Net::NetworkInterface; - - -int main(int argc, char** argv) -{ - - if (argc != 1) - { - Path p(argv[0]); - std::cerr << "usage: " << p.getBaseName() << std::endl; - return 1; - } - - try - { - const NetworkInterface::Map map = NetworkInterface::map(); - for ( NetworkInterface::Map::const_iterator it = map.begin(); - it != map.end(); ++it) - { - const NetworkInterface& intf = it->second; - std::string sep(""); - std::cout << intf.name() << " [" << intf.index() << "]: "; - std::cout << "<"; - if (intf.isUp()) - { - std::cout << sep << "UP"; - sep = ","; - } - - if (intf.isRunning()) - { - std::cout << sep << "RUNNING"; - sep = ","; - } - - if (intf.isLoopback()) - { - std::cout << sep << "LOOPBACK"; - sep = ","; - } - - if (intf.isPointToPoint()) - { - std::cout << sep << "P2P"; - sep = ","; - } - - if (intf.supportsIPv4()) - { - std::cout << sep << "IPv4"; - sep = ","; - } - - if (intf.supportsIPv6()) - { - std::cout << sep << "IPv6"; - sep = ","; - } - - if (intf.supportsBroadcast()) - { - std::cout << sep << "BCAST"; - sep = ","; - } - - if (intf.supportsMulticast()) - { - std::cout << sep << "MCAST"; - sep = ","; - } - - if (!intf.isLoopback()) - { - std::cout << sep << std::dec << intf.mtu(); - sep = ","; - } - - std::cout << ">" << std::endl; - - const NetworkInterface::AddressList& ipList = intf.addressList(); - - NetworkInterface::AddressList::const_iterator ipIt = ipList.begin(); - NetworkInterface::AddressList::const_iterator ipEnd = ipList.end(); - for (; ipIt != ipEnd; ++ipIt) - { - std::cout << " " << ipIt->get().toString(); - IPAddress addr; - addr = ipIt->get(); - if (!addr.isWildcard()) std::cout << '/' << addr.toString() << " (" << addr.prefixLength() << ')'; - addr = ipIt->get(); - if (!addr.isWildcard()) std::cout << (intf.isPointToPoint() ? " dest " : " bcast ") << addr.toString(); - std::cout << std::endl; - } - std::cout << std::endl; - } - } - catch (Exception& exc) - { - std::cerr << exc.displayText() << std::endl; - return 1; - } - - return 0; -} - - -#else // POCO_NET_HAS_INTERFACE - - -int main(int argc, char** argv) -{ - std::cout << "NetworkInterface not supported on this platform." << std::endl; - return 0; -} - - -#endif // POCO_NET_HAS_INTERFACE diff --git a/contrib/libpoco/Net/src/AbstractHTTPRequestHandler.cpp b/contrib/libpoco/Net/src/AbstractHTTPRequestHandler.cpp deleted file mode 100644 index 3783744110c..00000000000 --- a/contrib/libpoco/Net/src/AbstractHTTPRequestHandler.cpp +++ /dev/null @@ -1,111 +0,0 @@ -// -// AbstractHTTPRequestHandler.cpp -// -// $Id: //poco/1.4/Net/src/AbstractHTTPRequestHandler.cpp#1 $ -// -// Library: Net -// Package: HTTPServer -// Module: AbstractHTTPRequestHandler -// -// Copyright (c) 2007, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "Poco/Net/AbstractHTTPRequestHandler.h" -#include "Poco/Net/HTTPServerRequest.h" -#include "Poco/Net/HTTPServerResponse.h" -#include "Poco/Net/HTMLForm.h" -#include "Poco/NumberFormatter.h" -#include "Poco/Exception.h" - - -using Poco::NumberFormatter; - - -namespace Poco { -namespace Net { - - -AbstractHTTPRequestHandler::AbstractHTTPRequestHandler(): - _pRequest(0), - _pResponse(0), - _pForm(0) -{ -} - - -AbstractHTTPRequestHandler::~AbstractHTTPRequestHandler() -{ - delete _pForm; -} - - -void AbstractHTTPRequestHandler::handleRequest(HTTPServerRequest& request, HTTPServerResponse& response) -{ - _pRequest = &request; - _pResponse = &response; - if (authenticate()) - { - try - { - run(); - } - catch (Poco::Exception& exc) - { - if (!response.sent()) - { - sendErrorResponse(HTTPResponse::HTTP_INTERNAL_SERVER_ERROR, exc.displayText()); - } - } - catch (std::exception& exc) - { - if (!response.sent()) - { - sendErrorResponse(HTTPResponse::HTTP_INTERNAL_SERVER_ERROR, exc.what()); - } - } - } - else - { - sendErrorResponse(HTTPResponse::HTTP_UNAUTHORIZED, ""); - } -} - - -bool AbstractHTTPRequestHandler::authenticate() -{ - return true; -} - - -HTMLForm& AbstractHTTPRequestHandler::form() -{ - if (!_pForm) - _pForm = new HTMLForm(request(), request().stream()); - - return *_pForm; -} - - -void AbstractHTTPRequestHandler::sendErrorResponse(HTTPResponse::HTTPStatus status, const std::string& message) -{ - response().setStatusAndReason(status); - std::string statusAndReason(NumberFormatter::format(static_cast(response().getStatus()))); - statusAndReason += " - "; - statusAndReason += response().getReason(); - std::string page(""); - page += statusAndReason; - page += "

"; - page += statusAndReason; - page += "

"; - page += "

"; - page += message; - page += "

"; - response().sendBuffer(page.data(), page.size()); -} - - -} } // namespace Poco::Net diff --git a/contrib/libpoco/Net/src/DNS.cpp b/contrib/libpoco/Net/src/DNS.cpp deleted file mode 100644 index 965cfbbb3ba..00000000000 --- a/contrib/libpoco/Net/src/DNS.cpp +++ /dev/null @@ -1,443 +0,0 @@ -// -// DNS.cpp -// -// $Id: //poco/1.4/Net/src/DNS.cpp#10 $ -// -// Library: Net -// Package: NetCore -// Module: DNS -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "Poco/Net/DNS.h" -#include "Poco/Net/NetException.h" -#include "Poco/Net/SocketAddress.h" -#include "Poco/Environment.h" -#include "Poco/NumberFormatter.h" -#include "Poco/RWLock.h" -#include "Poco/Timespan.h" -#include "Poco/Mutex.h" -#include -#include - - -#if defined(POCO_HAVE_LIBRESOLV) -#include -#endif - - -/// set default DNS timeout to 60 seconds -const Poco::Timespan Poco::Net::DNS::DEFAULT_DNS_TIMEOUT = Poco::Timespan(60, 0); - -#if HAVE_GETADDRINFO_A -/** getaddrinfo иногда работает бесконечно долго. - * Этот код использует getaddrinfo_a c некоторым таймаутом. - * - * При выполнении в один поток производительность ниже на 30% - * При выполнении запросов в 4 потока производительность отличается - * иногда в лучшую иногда в худшую сторону на ~10-20% - */ -class GetAddrinfo -{ -public: - static GetAddrinfo & instance() - { - static GetAddrinfo impl; - return impl; - } - - int getaddrinfo(const char * name, - const char * service, - const struct addrinfo * hints, - struct addrinfo ** pai, - const Poco::Timespan * timeout_); - - size_t requestsNum() - { - Poco::ScopedLock lock(mutex); - return requests.size(); - } - -private: - GetAddrinfo() {} - - GetAddrinfo(const GetAddrinfo &) = delete; - const GetAddrinfo & operator=(const GetAddrinfo &) = delete; - - void releaseUnused() - { - for (auto it = requests.rbegin(); it != requests.rend();) - { - /// don't delete if structure is used by other thread or by internal cycle of getaddrinfo - if (it->unused && gai_error(&(*it)) != EAI_INPROGRESS) - { - free(const_cast(it->ar_name)); - it->ar_name = nullptr; - free(const_cast(it->ar_service)); - it->ar_service = nullptr; - free(const_cast(it->ar_request)); - it->ar_request = nullptr; - freeaddrinfo(it->ar_result); - it->ar_result = nullptr; - - auto it_to_delete = --(it.base()); - - it = decltype(it)(requests.erase(it_to_delete)); - } - else - break; - } - } - - void addOne(const char * name, - const char * service, - const struct addrinfo * hints) - { - requests.emplace_back(); - - auto & request = requests.back(); - - request.ar_name = name ? strdup(name) : nullptr; - request.ar_service = service ? strdup(service) : nullptr; - - addrinfo * my_hints = nullptr; - if (hints) - { - /// only ai_flags are used in Poco - my_hints = (addrinfo *)calloc(1, sizeof(addrinfo)); - my_hints->ai_flags = hints->ai_flags; - } - request.ar_request = my_hints; - - request.ar_result = nullptr; - } - -private: - struct gaicb_ext : public gaicb - { - gaicb_ext() - { - memset(this, 0, sizeof(gaicb_ext)); - unused = false; - } - - ~gaicb_ext() - { - if (gai_error(this) != EAI_INPROGRESS) - { - free(const_cast(ar_name)); - free(const_cast(ar_service)); - free(const_cast(ar_request)); - - freeaddrinfo(ar_result); - } - } - - bool unused; - }; - - std::list requests; - - Poco::FastMutex mutex; -}; - -int GetAddrinfo::getaddrinfo(const char * name, - const char * service, - const struct addrinfo * hints, - struct addrinfo ** pai, - const Poco::Timespan * timeout_) -{ - if (timeout_) - { - timespec timeout; - timeout.tv_sec = timeout_->totalSeconds(); - timeout.tv_nsec = timeout_->microseconds() * 1000; - - gaicb_ext * request_ext_ptr = nullptr; - { - Poco::ScopedLock lock(mutex); - addOne(name, service, hints); - request_ext_ptr = &requests.back(); - } - gaicb * request_ptr = request_ext_ptr; - - int code = getaddrinfo_a(GAI_NOWAIT, &request_ptr, 1, nullptr); - - if (!code) - { - gai_suspend(&request_ptr, 1, &timeout); - - *pai = request_ext_ptr->ar_result; - /// prevent deleting result in dctor - request_ext_ptr->ar_result = nullptr; - - code = gai_error(request_ext_ptr); - } - - request_ext_ptr->unused = true; - - { - Poco::ScopedLock lock(mutex); - releaseUnused(); - } - - return code; - } - else - { - return ::getaddrinfo(name, service, hints, pai); - } -} -#endif - -using Poco::Environment; -using Poco::NumberFormatter; -using Poco::IOException; - - -namespace Poco { -namespace Net { - - -#if defined(POCO_HAVE_LIBRESOLV) -static Poco::RWLock resolverLock; -#endif - - -HostEntry DNS::hostByName(const std::string& hostname, const Poco::Timespan * timeout_, unsigned -#ifdef POCO_HAVE_ADDRINFO - hintFlags -#endif - ) -{ -#if defined(POCO_HAVE_LIBRESOLV) - Poco::ScopedReadRWLock readLock(resolverLock); -#endif - -#if defined(POCO_HAVE_ADDRINFO) - struct addrinfo* pAI; - struct addrinfo hints; - std::memset(&hints, 0, sizeof(hints)); - hints.ai_flags = hintFlags; - #if HAVE_GETADDRINFO_A - int rc = GetAddrinfo::instance().getaddrinfo(hostname.c_str(), NULL, &hints, &pAI, timeout_); - #else - (void)timeout_; - int rc = getaddrinfo(hostname.c_str(), NULL, &hints, &pAI); - #endif - if (rc == 0) - { - HostEntry result(pAI); - freeaddrinfo(pAI); - return result; - } - else - { - aierror(rc, hostname); - } -#elif defined(POCO_VXWORKS) - int addr = hostGetByName(const_cast(hostname.c_str())); - if (addr != ERROR) - { - return HostEntry(hostname, IPAddress(&addr, sizeof(addr))); - } -#else - struct hostent* he = gethostbyname(hostname.c_str()); - if (he) - { - return HostEntry(he); - } -#endif - error(lastError(), hostname); // will throw an appropriate exception - throw NetException(); // to silence compiler -} - - -HostEntry DNS::hostByAddress(const IPAddress& address, const Poco::Timespan * timeout_, unsigned -#ifdef POCO_HAVE_ADDRINFO - hintFlags -#endif - ) -{ -#if defined(POCO_HAVE_LIBRESOLV) - Poco::ScopedReadRWLock readLock(resolverLock); -#endif - -#if defined(POCO_HAVE_ADDRINFO) - SocketAddress sa(address, 0); - static char fqname[1024]; - int rc = getnameinfo(sa.addr(), sa.length(), fqname, sizeof(fqname), NULL, 0, NI_NAMEREQD); - if (rc == 0) - { - struct addrinfo* pAI; - struct addrinfo hints; - std::memset(&hints, 0, sizeof(hints)); - hints.ai_flags = hintFlags; - #if HAVE_GETADDRINFO_A - int rc = GetAddrinfo::instance().getaddrinfo(fqname, NULL, &hints, &pAI, timeout_); - #else - (void)timeout_; - int rc = getaddrinfo(fqname, NULL, &hints, &pAI); - #endif - if (rc == 0) - { - HostEntry result(pAI); - freeaddrinfo(pAI); - return result; - } - else - { - aierror(rc, address.toString()); - } - } - else - { - aierror(rc, address.toString()); - } -#elif defined(POCO_VXWORKS) - char name[MAXHOSTNAMELEN + 1]; - if (hostGetByAddr(*reinterpret_cast(address.addr()), name) == OK) - { - return HostEntry(std::string(name), address); - } -#else - struct hostent* he = gethostbyaddr(reinterpret_cast(address.addr()), address.length(), address.af()); - if (he) - { - return HostEntry(he); - } -#endif - int err = lastError(); - error(err, address.toString()); // will throw an appropriate exception - throw NetException(); // to silence compiler -} - - -HostEntry DNS::resolve(const std::string& address) -{ - IPAddress ip; - if (IPAddress::tryParse(address, ip)) - return hostByAddress(ip); - else - return hostByName(address); -} - - -IPAddress DNS::resolveOne(const std::string& address) -{ - const HostEntry& entry = resolve(address); - if (!entry.addresses().empty()) - return entry.addresses()[0]; - else - throw NoAddressFoundException(address); -} - - -HostEntry DNS::thisHost() -{ - return hostByName(hostName()); -} - - -void DNS::reload() -{ -#if defined(POCO_HAVE_LIBRESOLV) - Poco::ScopedWriteRWLock writeLock(resolverLock); - res_init(); -#endif -} - - -void DNS::flushCache() -{ -} - - -std::string DNS::hostName() -{ - char buffer[256]; - int rc = gethostname(buffer, sizeof(buffer)); - if (rc == 0) - return std::string(buffer); - else - throw NetException("Cannot get host name"); -} - - -int DNS::lastError() -{ -#if defined(_WIN32) - return GetLastError(); -#elif defined(POCO_VXWORKS) - return errno; -#else - return h_errno; -#endif -} - - -void DNS::error(int code, const std::string& arg) -{ - switch (code) - { - case POCO_ESYSNOTREADY: - throw NetException("Net subsystem not ready"); - case POCO_ENOTINIT: - throw NetException("Net subsystem not initialized"); - case POCO_HOST_NOT_FOUND: - throw HostNotFoundException(arg); - case POCO_TRY_AGAIN: - throw DNSException("Temporary DNS error while resolving", arg); - case POCO_NO_RECOVERY: - throw DNSException("Non recoverable DNS error while resolving", arg); - case POCO_NO_DATA: - throw NoAddressFoundException(arg); - default: - throw IOException(NumberFormatter::format(code)); - } -} - - -void DNS::aierror(int code, const std::string& arg) -{ -#if defined(POCO_HAVE_IPv6) || defined(POCO_HAVE_ADDRINFO) - switch (code) - { - case EAI_AGAIN: - throw DNSException("Temporary DNS error while resolving", arg); - case EAI_FAIL: - throw DNSException("Non recoverable DNS error while resolving", arg); -#if !defined(_WIN32) // EAI_NODATA and EAI_NONAME have the same value -#if defined(EAI_NODATA) // deprecated in favor of EAI_NONAME on FreeBSD - case EAI_NODATA: - throw NoAddressFoundException(arg); -#endif -#endif - case EAI_NONAME: - throw HostNotFoundException(arg); -#if defined(EAI_SYSTEM) - case EAI_SYSTEM: - error(lastError(), arg); - break; -#endif -#if defined(_WIN32) - case WSANO_DATA: // may happen on XP - throw HostNotFoundException(arg); -#endif - default: -#if defined(POCO_HAVE_ADDRINFO) - throw DNSException(gai_strerror(code), NumberFormatter::format(code), code); -#else - throw DNSException("EAI", NumberFormatter::format(code), code); -#endif - } -#endif // POCO_HAVE_IPv6 || defined(POCO_HAVE_ADDRINFO) -} - - -} } // namespace Poco::Net diff --git a/contrib/libpoco/Net/src/DatagramSocket.cpp b/contrib/libpoco/Net/src/DatagramSocket.cpp deleted file mode 100644 index a2089ab7e66..00000000000 --- a/contrib/libpoco/Net/src/DatagramSocket.cpp +++ /dev/null @@ -1,110 +0,0 @@ -// -// DatagramSocket.cpp -// -// $Id: //poco/1.4/Net/src/DatagramSocket.cpp#1 $ -// -// Library: Net -// Package: Sockets -// Module: DatagramSocket -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "Poco/Net/DatagramSocket.h" -#include "Poco/Net/DatagramSocketImpl.h" -#include "Poco/Exception.h" - - -using Poco::InvalidArgumentException; - - -namespace Poco { -namespace Net { - - -DatagramSocket::DatagramSocket(): Socket(new DatagramSocketImpl) -{ -} - - -DatagramSocket::DatagramSocket(IPAddress::Family family): Socket(new DatagramSocketImpl(family)) -{ -} - - -DatagramSocket::DatagramSocket(const SocketAddress& address, bool reuseAddress): Socket(new DatagramSocketImpl(address.family())) -{ - bind(address, reuseAddress); -} - - -DatagramSocket::DatagramSocket(const Socket& socket): Socket(socket) -{ - if (!dynamic_cast(impl())) - throw InvalidArgumentException("Cannot assign incompatible socket"); -} - - -DatagramSocket::DatagramSocket(SocketImpl* pImpl): Socket(pImpl) -{ - if (!dynamic_cast(impl())) - throw InvalidArgumentException("Cannot assign incompatible socket"); -} - - -DatagramSocket::~DatagramSocket() -{ -} - - -DatagramSocket& DatagramSocket::operator = (const Socket& socket) -{ - if (dynamic_cast(socket.impl())) - Socket::operator = (socket); - else - throw InvalidArgumentException("Cannot assign incompatible socket"); - return *this; -} - - -void DatagramSocket::connect(const SocketAddress& address) -{ - impl()->connect(address); -} - - -void DatagramSocket::bind(const SocketAddress& address, bool reuseAddress) -{ - impl()->bind(address, reuseAddress); -} - - -int DatagramSocket::sendBytes(const void* buffer, int length, int flags) -{ - return impl()->sendBytes(buffer, length, flags); -} - - -int DatagramSocket::receiveBytes(void* buffer, int length, int flags) -{ - return impl()->receiveBytes(buffer, length, flags); -} - - -int DatagramSocket::sendTo(const void* buffer, int length, const SocketAddress& address, int flags) -{ - return impl()->sendTo(buffer, length, address, flags); -} - - -int DatagramSocket::receiveFrom(void* buffer, int length, SocketAddress& address, int flags) -{ - return impl()->receiveFrom(buffer, length, address, flags); -} - - -} } // namespace Poco::Net diff --git a/contrib/libpoco/Net/src/DatagramSocketImpl.cpp b/contrib/libpoco/Net/src/DatagramSocketImpl.cpp deleted file mode 100644 index 1b31b80d35c..00000000000 --- a/contrib/libpoco/Net/src/DatagramSocketImpl.cpp +++ /dev/null @@ -1,62 +0,0 @@ -// -// DatagramSocketImpl.cpp -// -// $Id: //poco/1.4/Net/src/DatagramSocketImpl.cpp#1 $ -// -// Library: Net -// Package: Sockets -// Module: DatagramSocketImpl -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "Poco/Net/DatagramSocketImpl.h" -#include "Poco/Net/NetException.h" - - -using Poco::InvalidArgumentException; - - -namespace Poco { -namespace Net { - - -DatagramSocketImpl::DatagramSocketImpl() -{ - init(AF_INET); -} - - -DatagramSocketImpl::DatagramSocketImpl(IPAddress::Family family) -{ - if (family == IPAddress::IPv4) - init(AF_INET); -#if defined(POCO_HAVE_IPv6) - else if (family == IPAddress::IPv6) - init(AF_INET6); -#endif - else throw InvalidArgumentException("Invalid or unsupported address family passed to DatagramSocketImpl"); -} - - -DatagramSocketImpl::DatagramSocketImpl(poco_socket_t sockfd): SocketImpl(sockfd) -{ -} - - -DatagramSocketImpl::~DatagramSocketImpl() -{ -} - - -void DatagramSocketImpl::init(int af) -{ - initSocket(af, SOCK_DGRAM); -} - - -} } // namespace Poco::Net diff --git a/contrib/libpoco/Net/src/DialogSocket.cpp b/contrib/libpoco/Net/src/DialogSocket.cpp deleted file mode 100644 index 6f60777d3df..00000000000 --- a/contrib/libpoco/Net/src/DialogSocket.cpp +++ /dev/null @@ -1,293 +0,0 @@ -// -// DialogSocket.cpp -// -// $Id: //poco/1.4/Net/src/DialogSocket.cpp#2 $ -// -// Library: Net -// Package: Sockets -// Module: DialogSocket -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "Poco/Net/DialogSocket.h" -#include "Poco/Ascii.h" -#include - - -namespace Poco { -namespace Net { - - -DialogSocket::DialogSocket(): - _pBuffer(0), - _pNext(0), - _pEnd(0) -{ - allocBuffer(); -} - - -DialogSocket::DialogSocket(const SocketAddress& address): - StreamSocket(address), - _pBuffer(0), - _pNext(0), - _pEnd(0) -{ - allocBuffer(); -} - - -DialogSocket::DialogSocket(const Socket& socket): - StreamSocket(socket), - _pBuffer(0), - _pNext(0), - _pEnd(0) -{ - allocBuffer(); -} - - -DialogSocket::DialogSocket(const DialogSocket& socket): - StreamSocket(socket), - _pBuffer(0), - _pNext(0), - _pEnd(0) -{ - allocBuffer(); -} - - -DialogSocket::~DialogSocket() -{ - delete [] _pBuffer; -} - - -DialogSocket& DialogSocket::operator = (const Socket& socket) -{ - StreamSocket::operator = (socket); - _pNext = _pBuffer; - _pEnd = _pBuffer; - return *this; -} - - -DialogSocket& DialogSocket::operator = (const DialogSocket& socket) -{ - StreamSocket::operator = (socket); - _pNext = _pBuffer; - _pEnd = _pBuffer; - return *this; -} - - -void DialogSocket::sendByte(unsigned char ch) -{ - sendBytes(&ch, 1); -} - - -void DialogSocket::sendString(const char* str) -{ - sendBytes(str, (int) std::strlen(str)); -} - - -void DialogSocket::sendString(const std::string& str) -{ - sendBytes(str.data(), (int) str.length()); -} - - -void DialogSocket::sendMessage(const std::string& message) -{ - std::string line; - line.reserve(message.length() + 2); - line.append(message); - line.append("\r\n"); - sendString(line); -} - - -void DialogSocket::sendMessage(const std::string& message, const std::string& arg) -{ - std::string line; - line.reserve(message.length() + arg.length() + 3); - line.append(message); - if (!arg.empty()) - { - line.append(" "); - line.append(arg); - } - line.append("\r\n"); - sendString(line); -} - - -void DialogSocket::sendMessage(const std::string& message, const std::string& arg1, const std::string& arg2) -{ - std::string line; - line.reserve(message.length() + arg1.length() +arg2.length() + 4); - line.append(message); - line.append(" "); - line.append(arg1); - if (!arg2.empty()) - { - line.append(" "); - line.append(arg2); - } - line.append("\r\n"); - sendString(line); -} - - -bool DialogSocket::receiveMessage(std::string& message) -{ - message.clear(); - return receiveLine(message); -} - - -int DialogSocket::receiveStatusMessage(std::string& message) -{ - message.clear(); - int status = receiveStatusLine(message); - if (status < 0) - { - while (status <= 0) - { - message += '\n'; - status = receiveStatusLine(message); - } - } - return status; -} - - -int DialogSocket::get() -{ - refill(); - if (_pNext != _pEnd) - return std::char_traits::to_int_type(*_pNext++); - else - return EOF_CHAR; -} - - -int DialogSocket::peek() -{ - refill(); - if (_pNext != _pEnd) - return std::char_traits::to_int_type(*_pNext); - else - return EOF_CHAR; -} - - -void DialogSocket::synch() -{ - sendUrgent(TELNET_DM); -} - - -void DialogSocket::sendTelnetCommand(unsigned char command) -{ - unsigned char buffer[2]; - buffer[0] = TELNET_IAC; - buffer[1] = command; - sendBytes(buffer, 2); -} - - -void DialogSocket::sendTelnetCommand(unsigned char command, unsigned char arg) -{ - unsigned char buffer[3]; - buffer[0] = TELNET_IAC; - buffer[1] = command; - buffer[2] = arg; - sendBytes(buffer, 3); -} - - -void DialogSocket::refill() -{ - if (_pNext == _pEnd) - { - int n = receiveBytes(_pBuffer, RECEIVE_BUFFER_SIZE); - if (n > 0) - { - _pNext = _pBuffer; - _pEnd = _pBuffer + n; - } - } -} - - -void DialogSocket::allocBuffer() -{ - _pBuffer = new char [RECEIVE_BUFFER_SIZE]; - _pNext = _pBuffer; - _pEnd = _pBuffer; -} - - -bool DialogSocket::receiveLine(std::string& line) -{ - // An old wisdom goes: be strict in what you emit - // and generous in what you accept. - int ch = get(); - while (ch != EOF_CHAR && ch != '\r' && ch != '\n') - { - line += (char) ch; - ch = get(); - } - if (ch == '\r' && peek() == '\n') - get(); - else if (ch == EOF_CHAR) - return false; - return true; -} - - -int DialogSocket::receiveStatusLine(std::string& line) -{ - int status = 0; - int ch = get(); - if (ch != EOF_CHAR) line += (char) ch; - int n = 0; - while (Poco::Ascii::isDigit(ch) && n < 3) - { - status *= 10; - status += ch - '0'; - ++n; - ch = get(); - if (ch != EOF_CHAR) line += (char) ch; - } - if (n == 3) - { - if (ch == '-') - status = -status; - } - else status = 0; - if (ch != EOF_CHAR) receiveLine(line); - return status; -} - - -int DialogSocket::receiveRawBytes(void* buffer, int length) -{ - refill(); - int n = static_cast(_pEnd - _pNext); - if (n > length) n = length; - std::memcpy(buffer, _pNext, n); - _pNext += n; - return n; -} - - -} } // namespace Poco::Net diff --git a/contrib/libpoco/Net/src/FTPClientSession.cpp b/contrib/libpoco/Net/src/FTPClientSession.cpp deleted file mode 100644 index 24131cf2a3f..00000000000 --- a/contrib/libpoco/Net/src/FTPClientSession.cpp +++ /dev/null @@ -1,597 +0,0 @@ -// -// FTPClientSession.cpp -// -// $Id: //poco/svn/Net/src/FTPClientSession.cpp#2 $ -// -// Library: Net -// Package: FTP -// Module: FTPClientSession -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "Poco/Net/FTPClientSession.h" -#include "Poco/Net/SocketAddress.h" -#include "Poco/Net/SocketStream.h" -#include "Poco/Net/ServerSocket.h" -#include "Poco/Net/NetException.h" -#include "Poco/NumberFormatter.h" -#include "Poco/Ascii.h" - - -using Poco::NumberFormatter; - - -namespace Poco { -namespace Net { - - -FTPClientSession::FTPClientSession(): - _port(0), - _pControlSocket(0), - _pDataStream(0), - _passiveMode(true), - _fileType(TYPE_BINARY), - _supports1738(true), - _serverReady(false), - _isLoggedIn(false), - _timeout(DEFAULT_TIMEOUT) -{ -} - - -FTPClientSession::FTPClientSession(const StreamSocket& socket): - _host(socket.address().host().toString()), - _port(socket.address().port()), - _pControlSocket(new DialogSocket(socket)), - _pDataStream(0), - _passiveMode(true), - _fileType(TYPE_BINARY), - _supports1738(true), - _serverReady(false), - _isLoggedIn(false), - _timeout(DEFAULT_TIMEOUT) -{ - _pControlSocket->setReceiveTimeout(_timeout); -} - - -FTPClientSession::FTPClientSession(const std::string& host, - Poco::UInt16 port, - const std::string& username, - const std::string& password): - _host(host), - _port(port), - _pControlSocket(new DialogSocket(SocketAddress(host, port))), - _pDataStream(0), - _passiveMode(true), - _fileType(TYPE_BINARY), - _supports1738(true), - _serverReady(false), - _isLoggedIn(false), - _timeout(DEFAULT_TIMEOUT) -{ - if (!username.empty()) - login(username, password); - else - _pControlSocket->setReceiveTimeout(_timeout); -} - - -FTPClientSession::~FTPClientSession() -{ - try - { - close(); - } - catch (...) - { - } -} - - -void FTPClientSession::setTimeout(const Poco::Timespan& timeout) -{ - if (!isOpen()) - throw FTPException("Connection is closed."); - - _timeout = timeout; - _pControlSocket->setReceiveTimeout(timeout); -} - - -Poco::Timespan FTPClientSession::getTimeout() const -{ - return _timeout; -} - - -void FTPClientSession::setPassive(bool flag, bool useRFC1738) -{ - _passiveMode = flag; - _supports1738 = useRFC1738; -} - - -bool FTPClientSession::getPassive() const -{ - return _passiveMode; -} - - -void FTPClientSession::open(const std::string& host, - Poco::UInt16 port, - const std::string& username, - const std::string& password) -{ - _host = host; - _port = port; - if (!username.empty()) - { - login(username, password); - } - else - { - _pControlSocket = new DialogSocket(SocketAddress(_host, _port)); - _pControlSocket->setReceiveTimeout(_timeout); - } -} - - -void FTPClientSession::login(const std::string& username, const std::string& password) -{ - if (_isLoggedIn) logout(); - - int status = FTP_POSITIVE_COMPLETION * 100; - std::string response; - if (!_pControlSocket) - { - _pControlSocket = new DialogSocket(SocketAddress(_host, _port)); - _pControlSocket->setReceiveTimeout(_timeout); - } - - if (!_serverReady) - { - status = _pControlSocket->receiveStatusMessage(response); - if (!isPositiveCompletion(status)) - throw FTPException("Cannot login to server", response, status); - - _serverReady = true; - } - - status = sendCommand("USER", username, response); - if (isPositiveIntermediate(status)) - status = sendCommand("PASS", password, response); - if (!isPositiveCompletion(status)) - throw FTPException("Login denied", response, status); - - setFileType(_fileType); - _isLoggedIn = true; -} - - -void FTPClientSession::logout() -{ - if (!isOpen()) - throw FTPException("Connection is closed."); - - if (_isLoggedIn) - { - try { endTransfer(); } - catch (...) { } - std::string response; - sendCommand("QUIT", response); - _isLoggedIn = false; - } -} - - -void FTPClientSession::close() -{ - logout(); - _pControlSocket->close(); - delete _pControlSocket; - _pControlSocket = 0; - _serverReady = false; -} - - -void FTPClientSession::setFileType(FTPClientSession::FileType type) -{ - std::string response; - int status = sendCommand("TYPE", (type == TYPE_TEXT ? "A" : "I"), response); - if (!isPositiveCompletion(status)) throw FTPException("Cannot set file type", response, status); - _fileType = type; -} - - -FTPClientSession::FileType FTPClientSession::getFileType() const -{ - return _fileType; -} - - -std::string FTPClientSession::systemType() -{ - std::string response; - int status = sendCommand("SYST", response); - if (isPositiveCompletion(status)) - return response.substr(4); - else - throw FTPException("Cannot get remote system type", response, status); -} - - -void FTPClientSession::setWorkingDirectory(const std::string& path) -{ - std::string response; - int status = sendCommand("CWD", path, response); - if (!isPositiveCompletion(status)) - throw FTPException("Cannot change directory", response, status); -} - - -std::string FTPClientSession::getWorkingDirectory() -{ - std::string response; - int status = sendCommand("PWD", response); - if (isPositiveCompletion(status)) - return extractPath(response); - else - throw FTPException("Cannot get current working directory", response, status); -} - - -void FTPClientSession::cdup() -{ - std::string response; - int status = sendCommand("CDUP", response); - if (!isPositiveCompletion(status)) - throw FTPException("Cannot change directory", response, status); -} - - -void FTPClientSession::rename(const std::string& oldName, const std::string& newName) -{ - std::string response; - int status = sendCommand("RNFR", oldName, response); - if (!isPositiveIntermediate(status)) - throw FTPException(std::string("Cannot rename ") + oldName, response, status); - status = sendCommand("RNTO", newName, response); - if (!isPositiveCompletion(status)) - throw FTPException(std::string("Cannot rename to ") + newName, response, status); -} - - -void FTPClientSession::remove(const std::string& path) -{ - std::string response; - int status = sendCommand("DELE", path, response); - if (!isPositiveCompletion(status)) - throw FTPException(std::string("Cannot remove " + path), response, status); -} - - -void FTPClientSession::createDirectory(const std::string& path) -{ - std::string response; - int status = sendCommand("MKD", path, response); - if (!isPositiveCompletion(status)) - throw FTPException(std::string("Cannot create directory ") + path, response, status); -} - - -void FTPClientSession::removeDirectory(const std::string& path) -{ - std::string response; - int status = sendCommand("RMD", path, response); - if (!isPositiveCompletion(status)) - throw FTPException(std::string("Cannot remove directory ") + path, response, status); -} - - -std::istream& FTPClientSession::beginDownload(const std::string& path) -{ - if (!isOpen()) - throw FTPException("Connection is closed."); - - delete _pDataStream; - _pDataStream = 0; - _pDataStream = new SocketStream(establishDataConnection("RETR", path)); - return *_pDataStream; -} - - -void FTPClientSession::endDownload() -{ - endTransfer(); -} - - -std::ostream& FTPClientSession::beginUpload(const std::string& path) -{ - if (!isOpen()) - throw FTPException("Connection is closed."); - - delete _pDataStream; - _pDataStream = 0; - _pDataStream = new SocketStream(establishDataConnection("STOR", path)); - return *_pDataStream; -} - - -void FTPClientSession::endUpload() -{ - endTransfer(); -} - - -std::istream& FTPClientSession::beginList(const std::string& path, bool extended) -{ - if (!isOpen()) - throw FTPException("Connection is closed."); - - delete _pDataStream; - _pDataStream = 0; - _pDataStream = new SocketStream(establishDataConnection(extended ? "LIST" : "NLST", path)); - return *_pDataStream; -} - - -void FTPClientSession::endList() -{ - endTransfer(); -} - - -void FTPClientSession::abort() -{ - if (!isOpen()) - throw FTPException("Connection is closed."); - - _pControlSocket->sendByte(DialogSocket::TELNET_IP); - _pControlSocket->synch(); - std::string response; - int status = sendCommand("ABOR", response); - if (status == 426) - status = _pControlSocket->receiveStatusMessage(response); - if (status != 226) - throw FTPException("Cannot abort transfer", response, status); -} - - -int FTPClientSession::sendCommand(const std::string& command, std::string& response) -{ - if (!isOpen()) - throw FTPException("Connection is closed."); - - _pControlSocket->sendMessage(command); - return _pControlSocket->receiveStatusMessage(response); -} - - -int FTPClientSession::sendCommand(const std::string& command, const std::string& arg, std::string& response) -{ - if (!isOpen()) - throw FTPException("Connection is closed."); - - _pControlSocket->sendMessage(command, arg); - return _pControlSocket->receiveStatusMessage(response); -} - - -std::string FTPClientSession::extractPath(const std::string& response) -{ - std::string path; - std::string::const_iterator it = response.begin(); - std::string::const_iterator end = response.end(); - while (it != end && *it != '"') ++it; - if (it != end) - { - ++it; - while (it != end) - { - if (*it == '"') - { - ++it; - if (it == end || (it != end && *it != '"')) break; - } - path += *it++; - } - } - return path; -} - - -StreamSocket FTPClientSession::establishDataConnection(const std::string& command, const std::string& arg) -{ - if (_passiveMode) - return passiveDataConnection(command, arg); - else - return activeDataConnection(command, arg); -} - - -StreamSocket FTPClientSession::activeDataConnection(const std::string& command, const std::string& arg) -{ - if (!isOpen()) - throw FTPException("Connection is closed."); - - ServerSocket server(SocketAddress(_pControlSocket->address().host(), 0)); - sendPortCommand(server.address()); - std::string response; - int status = sendCommand(command, arg, response); - if (!isPositivePreliminary(status)) - throw FTPException(command + " command failed", response, status); - if (server.poll(_timeout, Socket::SELECT_READ)) - return server.acceptConnection(); - else - throw FTPException("The server has not initiated a data connection"); -} - - -StreamSocket FTPClientSession::passiveDataConnection(const std::string& command, const std::string& arg) -{ - SocketAddress sa(sendPassiveCommand()); - StreamSocket sock(sa); - std::string response; - int status = sendCommand(command, arg, response); - if (!isPositivePreliminary(status)) - throw FTPException(command + " command failed", response, status); - return sock; -} - - -void FTPClientSession::sendPortCommand(const SocketAddress& addr) -{ - if (_supports1738) - { - if (sendEPRT(addr)) - return; - else - _supports1738 = false; - } - sendPORT(addr); -} - - -SocketAddress FTPClientSession::sendPassiveCommand() -{ - SocketAddress addr; - if (_supports1738) - { - if (sendEPSV(addr)) - return addr; - else - _supports1738 = false; - } - sendPASV(addr); - return addr; -} - - -bool FTPClientSession::sendEPRT(const SocketAddress& addr) -{ - std::string arg("|"); - arg += addr.af() == AF_INET ? '1' : '2'; - arg += '|'; - arg += addr.host().toString(); - arg += '|'; - arg += NumberFormatter::format(addr.port()); - arg += '|'; - std::string response; - int status = sendCommand("EPRT", arg, response); - if (isPositiveCompletion(status)) - return true; - else if (isPermanentNegative(status)) - return false; - else - throw FTPException("EPRT command failed", response, status); -} - - -void FTPClientSession::sendPORT(const SocketAddress& addr) -{ - std::string arg(addr.host().toString()); - for (std::string::iterator it = arg.begin(); it != arg.end(); ++it) - { - if (*it == '.') *it = ','; - } - arg += ','; - Poco::UInt16 port = addr.port(); - arg += NumberFormatter::format(port/256); - arg += ','; - arg += NumberFormatter::format(port % 256); - std::string response; - int status = sendCommand("PORT", arg, response); - if (!isPositiveCompletion(status)) - throw FTPException("PORT command failed", response, status); -} - - -bool FTPClientSession::sendEPSV(SocketAddress& addr) -{ - std::string response; - int status = sendCommand("EPSV", response); - if (isPositiveCompletion(status)) - { - parseExtAddress(response, addr); - return true; - } - else if (isPermanentNegative(status)) - { - return false; - } - else throw FTPException("EPSV command failed", response, status); -} - - -void FTPClientSession::sendPASV(SocketAddress& addr) -{ - std::string response; - int status = sendCommand("PASV", response); - if (!isPositiveCompletion(status)) - throw FTPException("PASV command failed", response, status); - parseAddress(response, addr); -} - - -void FTPClientSession::parseAddress(const std::string& str, SocketAddress& addr) -{ - std::string::const_iterator it = str.begin(); - std::string::const_iterator end = str.end(); - while (it != end && *it != '(') ++it; - if (it != end) ++it; - std::string host; - while (it != end && Poco::Ascii::isDigit(*it)) host += *it++; - if (it != end && *it == ',') { host += '.'; ++it; } - while (it != end && Poco::Ascii::isDigit(*it)) host += *it++; - if (it != end && *it == ',') { host += '.'; ++it; } - while (it != end && Poco::Ascii::isDigit(*it)) host += *it++; - if (it != end && *it == ',') { host += '.'; ++it; } - while (it != end && Poco::Ascii::isDigit(*it)) host += *it++; - if (it != end && *it == ',') ++it; - Poco::UInt16 portHi = 0; - while (it != end && Poco::Ascii::isDigit(*it)) { portHi *= 10; portHi += *it++ - '0'; } - if (it != end && *it == ',') ++it; - Poco::UInt16 portLo = 0; - while (it != end && Poco::Ascii::isDigit(*it)) { portLo *= 10; portLo += *it++ - '0'; } - addr = SocketAddress(host, portHi*256 + portLo); -} - - -void FTPClientSession::parseExtAddress(const std::string& str, SocketAddress& addr) -{ - std::string::const_iterator it = str.begin(); - std::string::const_iterator end = str.end(); - while (it != end && *it != '(') ++it; - if (it != end) ++it; - char delim = '|'; - if (it != end) delim = *it++; - if (it != end && *it == delim) ++it; - if (it != end && *it == delim) ++it; - Poco::UInt16 port = 0; - while (it != end && Poco::Ascii::isDigit(*it)) { port *= 10; port += *it++ - '0'; } - addr = SocketAddress(_pControlSocket->peerAddress().host(), port); -} - - -void FTPClientSession::endTransfer() -{ - if (_pDataStream) - { - delete _pDataStream; - _pDataStream = 0; - std::string response; - int status = _pControlSocket->receiveStatusMessage(response); - if (!isPositiveCompletion(status)) - throw FTPException("Data transfer failed", response, status); - } -} - - -} } // namespace Poco::Net diff --git a/contrib/libpoco/Net/src/FTPStreamFactory.cpp b/contrib/libpoco/Net/src/FTPStreamFactory.cpp deleted file mode 100644 index 55afa2aa60e..00000000000 --- a/contrib/libpoco/Net/src/FTPStreamFactory.cpp +++ /dev/null @@ -1,245 +0,0 @@ -// -// FTPStreamFactory.cpp -// -// $Id: //poco/1.4/Net/src/FTPStreamFactory.cpp#1 $ -// -// Library: Net -// Package: FTP -// Module: FTPStreamFactory -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "Poco/Net/FTPStreamFactory.h" -#include "Poco/Net/FTPClientSession.h" -#include "Poco/Net/NetException.h" -#include "Poco/URI.h" -#include "Poco/URIStreamOpener.h" -#include "Poco/UnbufferedStreamBuf.h" -#include "Poco/Path.h" - - -using Poco::URIStreamFactory; -using Poco::URI; -using Poco::URIStreamOpener; -using Poco::UnbufferedStreamBuf; -using Poco::Path; - - -namespace Poco { -namespace Net { - - -class FTPStreamBuf: public UnbufferedStreamBuf -{ -public: - FTPStreamBuf(std::istream& istr): - _istr(istr) - { - // make sure exceptions from underlying string propagate - _istr.exceptions(std::ios::badbit); - } - - ~FTPStreamBuf() - { - } - -private: - int readFromDevice() - { - return _istr.get(); - } - - std::istream& _istr; -}; - - -class FTPIOS: public virtual std::ios -{ -public: - FTPIOS(std::istream& istr): - _buf(istr) - { - poco_ios_init(&_buf); - } - - ~FTPIOS() - { - } - - FTPStreamBuf* rdbuf() - { - return &_buf; - } - -protected: - FTPStreamBuf _buf; -}; - - -class FTPStream: public FTPIOS, public std::istream -{ -public: - FTPStream(std::istream& istr, FTPClientSession* pSession): - FTPIOS(istr), - std::istream(&_buf), - _pSession(pSession) - { - } - - ~FTPStream() - { - delete _pSession; - } - -private: - FTPClientSession* _pSession; -}; - - -FTPPasswordProvider::FTPPasswordProvider() -{ -} - - -FTPPasswordProvider::~FTPPasswordProvider() -{ -} - - -std::string FTPStreamFactory::_anonymousPassword("poco@localhost"); -FTPPasswordProvider* FTPStreamFactory::_pPasswordProvider(0); - - -FTPStreamFactory::FTPStreamFactory() -{ -} - - -FTPStreamFactory::~FTPStreamFactory() -{ -} - - -std::istream* FTPStreamFactory::open(const URI& uri) -{ - poco_assert (uri.getScheme() == "ftp"); - - FTPClientSession* pSession = new FTPClientSession(uri.getHost(), uri.getPort()); - try - { - std::string username; - std::string password; - getUserInfo(uri, username, password); - - std::string path; - char type; - getPathAndType(uri, path, type); - - pSession->login(username, password); - if (type == 'a') - pSession->setFileType(FTPClientSession::TYPE_TEXT); - - Path p(path, Path::PATH_UNIX); - p.makeFile(); - for (int i = 0; i < p.depth(); ++i) - pSession->setWorkingDirectory(p[i]); - std::string file(p.getFileName()); - std::istream& istr = (type == 'd' ? pSession->beginList(file) : pSession->beginDownload(file)); - return new FTPStream(istr, pSession); - } - catch (...) - { - delete pSession; - throw; - } -} - - -void FTPStreamFactory::setAnonymousPassword(const std::string& password) -{ - _anonymousPassword = password; -} - - -const std::string& FTPStreamFactory::getAnonymousPassword() -{ - return _anonymousPassword; -} - - -void FTPStreamFactory::setPasswordProvider(FTPPasswordProvider* pProvider) -{ - _pPasswordProvider = pProvider; -} - - -FTPPasswordProvider* FTPStreamFactory::getPasswordProvider() -{ - return _pPasswordProvider; -} - - -void FTPStreamFactory::splitUserInfo(const std::string& userInfo, std::string& username, std::string& password) -{ - std::string::size_type pos = userInfo.find(':'); - if (pos != std::string::npos) - { - username.assign(userInfo, 0, pos++); - password.assign(userInfo, pos, userInfo.size() - pos); - } - else username = userInfo; -} - - -void FTPStreamFactory::getUserInfo(const URI& uri, std::string& username, std::string& password) -{ - splitUserInfo(uri.getUserInfo(), username, password); - if (username.empty()) - { - username = "anonymous"; - password = _anonymousPassword; - } - else if (password.empty()) - { - if (_pPasswordProvider) - password = _pPasswordProvider->password(username, uri.getHost()); - else - throw FTPException(std::string("Password required for ") + username + "@" + uri.getHost()); - } -} - - -void FTPStreamFactory::getPathAndType(const Poco::URI& uri, std::string& path, char& type) -{ - path = uri.getPath(); - type = 'i'; - std::string::size_type pos = path.rfind(';'); - if (pos != std::string::npos) - { - if (path.length() == pos + 7 && path.compare(pos + 1, 5, "type=") == 0) - { - type = path[pos + 6]; - path.resize(pos); - } - } -} - - -void FTPStreamFactory::registerFactory() -{ - URIStreamOpener::defaultOpener().registerStreamFactory("ftp", new FTPStreamFactory); -} - - -void FTPStreamFactory::unregisterFactory() -{ - URIStreamOpener::defaultOpener().unregisterStreamFactory("ftp"); -} - - -} } // namespace Poco::Net diff --git a/contrib/libpoco/Net/src/FilePartSource.cpp b/contrib/libpoco/Net/src/FilePartSource.cpp deleted file mode 100644 index fda00e8f08b..00000000000 --- a/contrib/libpoco/Net/src/FilePartSource.cpp +++ /dev/null @@ -1,89 +0,0 @@ -// -// FilePartSource.cpp -// -// $Id: //poco/1.4/Net/src/FilePartSource.cpp#1 $ -// -// Library: Net -// Package: Messages -// Module: FilePartSource -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "Poco/Net/FilePartSource.h" -#include "Poco/Path.h" -#include "Poco/File.h" -#include "Poco/Exception.h" - - -using Poco::Path; -using Poco::OpenFileException; - - -namespace Poco { -namespace Net { - - -FilePartSource::FilePartSource(const std::string& path): - _path(path), _istr(path) -{ - Path p(path); - _filename = p.getFileName(); - if (!_istr.good()) - throw OpenFileException(path); -} - - -FilePartSource::FilePartSource(const std::string& path, const std::string& mediaType): - PartSource(mediaType), - _path(path), - _istr(path) -{ - Path p(path); - _filename = p.getFileName(); - if (!_istr.good()) - throw OpenFileException(path); -} - - -FilePartSource::FilePartSource(const std::string& path, const std::string& filename, const std::string& mediaType): - PartSource(mediaType), - _path(path), - _filename(filename), - _istr(path) -{ - Path p(path); - if (!_istr.good()) - throw OpenFileException(path); -} - - -FilePartSource::~FilePartSource() -{ -} - - -std::istream& FilePartSource::stream() -{ - return _istr; -} - - -const std::string& FilePartSource::filename() const -{ - return _filename; -} - - -std::streamsize FilePartSource::getContentLength() const -{ - Poco::File p(_path); - return p.getSize(); -} - - -} } // namespace Poco::Net diff --git a/contrib/libpoco/Net/src/HTMLForm.cpp b/contrib/libpoco/Net/src/HTMLForm.cpp deleted file mode 100644 index 24ee4a60b8a..00000000000 --- a/contrib/libpoco/Net/src/HTMLForm.cpp +++ /dev/null @@ -1,442 +0,0 @@ -// -// HTMLForm.cpp -// -// $Id: //poco/1.4/Net/src/HTMLForm.cpp#4 $ -// -// Library: Net -// Package: HTML -// Module: HTMLForm -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "Poco/Net/HTMLForm.h" -#include "Poco/Net/HTTPRequest.h" -#include "Poco/Net/PartSource.h" -#include "Poco/Net/PartHandler.h" -#include "Poco/Net/MultipartWriter.h" -#include "Poco/Net/MultipartReader.h" -#include "Poco/Net/NullPartHandler.h" -#include "Poco/Net/NetException.h" -#include "Poco/NullStream.h" -#include "Poco/CountingStream.h" -#include "Poco/StreamCopier.h" -#include "Poco/URI.h" -#include "Poco/String.h" -#include "Poco/CountingStream.h" -#include "Poco/UTF8String.h" -#include - - -using Poco::NullInputStream; -using Poco::StreamCopier; -using Poco::SyntaxException; -using Poco::URI; -using Poco::icompare; - - -namespace Poco { -namespace Net { - - -const std::string HTMLForm::ENCODING_URL = "application/x-www-form-urlencoded"; -const std::string HTMLForm::ENCODING_MULTIPART = "multipart/form-data"; -const int HTMLForm::UNKNOWN_CONTENT_LENGTH = -1; - - -class HTMLFormCountingOutputStream: public CountingOutputStream -{ -public: - HTMLFormCountingOutputStream(): - _valid(true) - { - } - - bool isValid() const - { - return _valid; - } - - void setValid(bool v) - { - _valid = v; - } - -private: - bool _valid; -}; - - -HTMLForm::HTMLForm(): - _fieldLimit(DFL_FIELD_LIMIT), - _encoding(ENCODING_URL) -{ -} - - -HTMLForm::HTMLForm(const std::string& encoding): - _fieldLimit(DFL_FIELD_LIMIT), - _encoding(encoding) -{ -} - - -HTMLForm::HTMLForm(const HTTPRequest& request, std::istream& requestBody, PartHandler& handler): - _fieldLimit(DFL_FIELD_LIMIT) -{ - load(request, requestBody, handler); -} - - -HTMLForm::HTMLForm(const HTTPRequest& request, std::istream& requestBody): - _fieldLimit(DFL_FIELD_LIMIT) -{ - load(request, requestBody); -} - - -HTMLForm::HTMLForm(const HTTPRequest& request): - _fieldLimit(DFL_FIELD_LIMIT) -{ - load(request); -} - - -HTMLForm::~HTMLForm() -{ - for (PartVec::iterator it = _parts.begin(); it != _parts.end(); ++it) - { - delete it->pSource; - } -} - - -void HTMLForm::setEncoding(const std::string& encoding) -{ - _encoding = encoding; -} - - -void HTMLForm::addPart(const std::string& name, PartSource* pSource) -{ - poco_check_ptr (pSource); - - Part part; - part.name = name; - part.pSource = pSource; - _parts.push_back(part); -} - - -void HTMLForm::load(const HTTPRequest& request, std::istream& requestBody, PartHandler& handler) -{ - clear(); - - URI uri(request.getURI()); - const std::string& query = uri.getRawQuery(); - if (!query.empty()) - { - std::istringstream istr(query); - readUrl(istr); - } - - if (request.getMethod() == HTTPRequest::HTTP_POST || request.getMethod() == HTTPRequest::HTTP_PUT) - { - std::string mediaType; - NameValueCollection params; - MessageHeader::splitParameters(request.getContentType(), mediaType, params); - _encoding = mediaType; - if (_encoding == ENCODING_MULTIPART) - { - _boundary = params["boundary"]; - readMultipart(requestBody, handler); - } - else - { - readUrl(requestBody); - } - } -} - - -void HTMLForm::load(const HTTPRequest& request, std::istream& requestBody) -{ - NullPartHandler nah; - load(request, requestBody, nah); -} - - -void HTMLForm::load(const HTTPRequest& request) -{ - NullPartHandler nah; - NullInputStream nis; - load(request, nis, nah); -} - - -void HTMLForm::read(std::istream& istr, PartHandler& handler) -{ - if (_encoding == ENCODING_URL) - readUrl(istr); - else - readMultipart(istr, handler); -} - - -void HTMLForm::read(std::istream& istr) -{ - readUrl(istr); -} - - -void HTMLForm::read(const std::string& queryString) -{ - std::istringstream istr(queryString); - readUrl(istr); -} - - -void HTMLForm::prepareSubmit(HTTPRequest& request) -{ - if (request.getMethod() == HTTPRequest::HTTP_POST || request.getMethod() == HTTPRequest::HTTP_PUT) - { - if (_encoding == ENCODING_URL) - { - request.setContentType(_encoding); - request.setChunkedTransferEncoding(false); - Poco::CountingOutputStream ostr; - writeUrl(ostr); - request.setContentLength(ostr.chars()); - } - else - { - _boundary = MultipartWriter::createBoundary(); - std::string ct(_encoding); - ct.append("; boundary=\""); - ct.append(_boundary); - ct.append("\""); - request.setContentType(ct); - } - if (request.getVersion() == HTTPMessage::HTTP_1_0) - { - request.setKeepAlive(false); - request.setChunkedTransferEncoding(false); - } - else if (_encoding != ENCODING_URL) - { - request.setChunkedTransferEncoding(true); - } - } - else - { - std::string uri = request.getURI(); - std::ostringstream ostr; - writeUrl(ostr); - uri.append("?"); - uri.append(ostr.str()); - request.setURI(uri); - } -} - - -std::streamsize HTMLForm::calculateContentLength() -{ - if (_boundary.empty()) - throw HTMLFormException("Form must be prepared"); - - HTMLFormCountingOutputStream c; - write(c); - if (c.isValid()) - return c.chars(); - else - return UNKNOWN_CONTENT_LENGTH; -} - - -void HTMLForm::write(std::ostream& ostr, const std::string& boundary) -{ - if (_encoding == ENCODING_URL) - { - writeUrl(ostr); - } - else - { - _boundary = boundary; - writeMultipart(ostr); - } -} - - -void HTMLForm::write(std::ostream& ostr) -{ - if (_encoding == ENCODING_URL) - writeUrl(ostr); - else - writeMultipart(ostr); -} - - -void HTMLForm::readUrl(std::istream& istr) -{ - static const int eof = std::char_traits::eof(); - - int fields = 0; - int ch = istr.get(); - bool isFirst = true; - while (ch != eof) - { - if (_fieldLimit > 0 && fields == _fieldLimit) - throw HTMLFormException("Too many form fields"); - std::string name; - std::string value; - while (ch != eof && ch != '=' && ch != '&') - { - if (ch == '+') ch = ' '; - name += (char) ch; - ch = istr.get(); - } - if (ch == '=') - { - ch = istr.get(); - while (ch != eof && ch != '&') - { - if (ch == '+') ch = ' '; - value += (char) ch; - ch = istr.get(); - } - } - // remove UTF-8 byte order mark from first name, if present - if (isFirst) - { - UTF8::removeBOM(name); - } - std::string decodedName; - std::string decodedValue; - URI::decode(name, decodedName); - URI::decode(value, decodedValue); - add(decodedName, decodedValue); - ++fields; - if (ch == '&') ch = istr.get(); - isFirst = false; - } -} - - -void HTMLForm::readMultipart(std::istream& istr, PartHandler& handler) -{ - static const int eof = std::char_traits::eof(); - - int fields = 0; - MultipartReader reader(istr, _boundary); - while (reader.hasNextPart()) - { - if (_fieldLimit > 0 && fields == _fieldLimit) - throw HTMLFormException("Too many form fields"); - MessageHeader header; - reader.nextPart(header); - std::string disp; - NameValueCollection params; - if (header.has("Content-Disposition")) - { - std::string cd = header.get("Content-Disposition"); - MessageHeader::splitParameters(cd, disp, params); - } - if (params.has("filename")) - { - handler.handlePart(header, reader.stream()); - // Ensure that the complete part has been read. - while (reader.stream().good()) reader.stream().get(); - } - else - { - std::string name = params["name"]; - std::string value; - std::istream& istr = reader.stream(); - int ch = istr.get(); - while (ch != eof) - { - value += (char) ch; - ch = istr.get(); - } - add(name, value); - } - ++fields; - } -} - - -void HTMLForm::writeUrl(std::ostream& ostr) -{ - for (NameValueCollection::ConstIterator it = begin(); it != end(); ++it) - { - if (it != begin()) ostr << "&"; - std::string name; - URI::encode(it->first, "!?#/'\",;:$&()[]*+=@", name); - std::string value; - URI::encode(it->second, "!?#/'\",;:$&()[]*+=@", value); - ostr << name << "=" << value; - } -} - - -void HTMLForm::writeMultipart(std::ostream& ostr) -{ - HTMLFormCountingOutputStream *costr(dynamic_cast(&ostr)); - - MultipartWriter writer(ostr, _boundary); - for (NameValueCollection::ConstIterator it = begin(); it != end(); ++it) - { - MessageHeader header; - std::string disp("form-data; name=\""); - disp.append(it->first); - disp.append("\""); - header.set("Content-Disposition", disp); - writer.nextPart(header); - ostr << it->second; - } - for (PartVec::iterator ita = _parts.begin(); ita != _parts.end(); ++ita) - { - MessageHeader header(ita->pSource->headers()); - std::string disp("form-data; name=\""); - disp.append(ita->name); - disp.append("\""); - std::string filename = ita->pSource->filename(); - if (!filename.empty()) - { - disp.append("; filename=\""); - disp.append(filename); - disp.append("\""); - } - header.set("Content-Disposition", disp); - header.set("Content-Type", ita->pSource->mediaType()); - writer.nextPart(header); - if (costr) - { - // count only, don't move stream position - std::streamsize partlen = ita->pSource->getContentLength(); - if (partlen != PartSource::UNKNOWN_CONTENT_LENGTH) - costr->addChars(static_cast(partlen)); - else - costr->setValid(false); - } - else - StreamCopier::copyStream(ita->pSource->stream(), ostr); - } - writer.close(); - _boundary = writer.boundary(); -} - - -void HTMLForm::setFieldLimit(int limit) -{ - poco_assert (limit >= 0); - - _fieldLimit = limit; -} - - -} } // namespace Poco::Net diff --git a/contrib/libpoco/Net/src/HTTPAuthenticationParams.cpp b/contrib/libpoco/Net/src/HTTPAuthenticationParams.cpp deleted file mode 100644 index 29ed198a0f6..00000000000 --- a/contrib/libpoco/Net/src/HTTPAuthenticationParams.cpp +++ /dev/null @@ -1,318 +0,0 @@ -// -// HTTPAuthenticationParams.cpp -// -// $Id: //poco/1.4/Net/src/HTTPAuthenticationParams.cpp#1 $ -// -// Library: Net -// Package: HTTP -// Module: HTTPAuthenticationParams -// -// Copyright (c) 2011, Anton V. Yabchinskiy (arn at bestmx dot ru). -// Copyright (c) 2012, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "Poco/Exception.h" -#include "Poco/Net/HTTPAuthenticationParams.h" -#include "Poco/Net/HTTPRequest.h" -#include "Poco/Net/HTTPResponse.h" -#include "Poco/Net/NetException.h" -#include "Poco/String.h" -#include "Poco/Ascii.h" - - -using Poco::icompare; -using Poco::Ascii; - - -namespace -{ - bool mustBeQuoted(const std::string& name) - { - return - icompare(name, "cnonce") == 0 || - icompare(name, "domain") == 0 || - icompare(name, "nonce") == 0 || - icompare(name, "opaque") == 0 || - icompare(name, "qop") == 0 || - icompare(name, "realm") == 0 || - icompare(name, "response") == 0 || - icompare(name, "uri") == 0 || - icompare(name, "username") == 0; - } - - - void formatParameter(std::string& result, const std::string& name, const std::string& value) - { - result += name; - result += '='; - if (mustBeQuoted(name)) - { - result += '"'; - result += value; - result += '"'; - } - else - { - result += value; - } - } -} - - -namespace Poco { -namespace Net { - - -const std::string HTTPAuthenticationParams::REALM("realm"); -const std::string HTTPAuthenticationParams::WWW_AUTHENTICATE("WWW-Authenticate"); -const std::string HTTPAuthenticationParams::PROXY_AUTHENTICATE("Proxy-Authenticate"); - - -HTTPAuthenticationParams::HTTPAuthenticationParams() -{ -} - - -HTTPAuthenticationParams::HTTPAuthenticationParams(const std::string& authInfo) -{ - fromAuthInfo(authInfo); -} - - -HTTPAuthenticationParams::HTTPAuthenticationParams(const HTTPRequest& request) -{ - fromRequest(request); -} - - -HTTPAuthenticationParams::HTTPAuthenticationParams(const HTTPResponse& response, const std::string& header) -{ - fromResponse(response, header); -} - - -HTTPAuthenticationParams::~HTTPAuthenticationParams() -{ -} - - -HTTPAuthenticationParams& HTTPAuthenticationParams::operator = (const HTTPAuthenticationParams& authParams) -{ - NameValueCollection::operator = (authParams); - - return *this; -} - - -void HTTPAuthenticationParams::fromAuthInfo(const std::string& authInfo) -{ - parse(authInfo.begin(), authInfo.end()); -} - - -void HTTPAuthenticationParams::fromRequest(const HTTPRequest& request) -{ - std::string scheme; - std::string authInfo; - - request.getCredentials(scheme, authInfo); - - if (icompare(scheme, "Digest") != 0) - throw InvalidArgumentException("Could not parse non-Digest authentication information", scheme); - - fromAuthInfo(authInfo); -} - - -void HTTPAuthenticationParams::fromResponse(const HTTPResponse& response, const std::string& header) -{ - NameValueCollection::ConstIterator it = response.find(header); - if (it == response.end()) - throw NotAuthenticatedException("HTTP response has no authentication header"); - - bool found = false; - while (!found && it != response.end() && icompare(it->first, header) == 0) - { - const std::string& header = it->second; - if (icompare(header, 0, 6, "Basic ") == 0) - { - parse(header.begin() + 6, header.end()); - found = true; - } - else if (icompare(header, 0, 7, "Digest ") == 0) - { - parse(header.begin() + 7, header.end()); - found = true; - } - ++it; - } - if (!found) throw NotAuthenticatedException("No Basic or Digest authentication header found"); -} - - -const std::string& HTTPAuthenticationParams::getRealm() const -{ - return get(REALM); -} - - -void HTTPAuthenticationParams::setRealm(const std::string& realm) -{ - set(REALM, realm); -} - - -std::string HTTPAuthenticationParams::toString() const -{ - ConstIterator iter = begin(); - std::string result; - - if (iter != end()) - { - formatParameter(result, iter->first, iter->second); - ++iter; - } - - for (; iter != end(); ++iter) - { - result.append(", "); - formatParameter(result, iter->first, iter->second); - } - - return result; -} - - -void HTTPAuthenticationParams::parse(std::string::const_iterator first, std::string::const_iterator last) -{ - enum State - { - STATE_INITIAL = 0x0100, - STATE_FINAL = 0x0200, - - STATE_SPACE = STATE_INITIAL | 0, - STATE_TOKEN = 1, - STATE_EQUALS = 2, - STATE_VALUE = STATE_FINAL | 3, - STATE_VALUE_QUOTED = 4, - STATE_VALUE_ESCAPE = 5, - STATE_COMMA = STATE_FINAL | 6 - }; - - int state = STATE_SPACE; - std::string token; - std::string value; - - for (std::string::const_iterator it = first; it != last; ++it) - { - switch (state) - { - case STATE_SPACE: - if (Ascii::isAlphaNumeric(*it) || *it == '_') - { - token += *it; - state = STATE_TOKEN; - } - else if (Ascii::isSpace(*it)) - { - // Skip - } - else throw SyntaxException("Invalid authentication information"); - break; - - case STATE_TOKEN: - if (*it == '=') - { - state = STATE_EQUALS; - } - else if (Ascii::isAlphaNumeric(*it) || *it == '_') - { - token += *it; - } - else throw SyntaxException("Invalid authentication information"); - break; - - case STATE_EQUALS: - if (Ascii::isAlphaNumeric(*it) || *it == '_') - { - value += *it; - state = STATE_VALUE; - } - else if (*it == '"') - { - state = STATE_VALUE_QUOTED; - } - else throw SyntaxException("Invalid authentication information"); - break; - - case STATE_VALUE_QUOTED: - if (*it == '\\') - { - state = STATE_VALUE_ESCAPE; - } - else if (*it == '"') - { - add(token, value); - token.clear(); - value.clear(); - state = STATE_COMMA; - } - else - { - value += *it; - } - break; - - case STATE_VALUE_ESCAPE: - value += *it; - state = STATE_VALUE_QUOTED; - break; - - case STATE_VALUE: - if (Ascii::isSpace(*it)) - { - add(token, value); - token.clear(); - value.clear(); - state = STATE_COMMA; - } - else if (*it == ',') - { - add(token, value); - token.clear(); - value.clear(); - state = STATE_SPACE; - } - else - { - value += *it; - } - break; - - case STATE_COMMA: - if (*it == ',') - { - state = STATE_SPACE; - } - else if (Ascii::isSpace(*it)) - { - // Skip - } - else throw SyntaxException("Invalid authentication information"); - break; - } - } - - if (state == STATE_VALUE) - add(token, value); - - if (!(state & STATE_FINAL)) - throw SyntaxException("Invalid authentication information"); -} - - -} } // namespace Poco::Net diff --git a/contrib/libpoco/Net/src/HTTPBasicCredentials.cpp b/contrib/libpoco/Net/src/HTTPBasicCredentials.cpp deleted file mode 100644 index 4e3e14a6c81..00000000000 --- a/contrib/libpoco/Net/src/HTTPBasicCredentials.cpp +++ /dev/null @@ -1,129 +0,0 @@ -// -// HTTPBasicCredentials.cpp -// -// $Id: //poco/1.4/Net/src/HTTPBasicCredentials.cpp#3 $ -// -// Library: Net -// Package: HTTP -// Module: HTTPBasicCredentials -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "Poco/Net/HTTPBasicCredentials.h" -#include "Poco/Net/HTTPRequest.h" -#include "Poco/Net/NetException.h" -#include "Poco/Base64Encoder.h" -#include "Poco/Base64Decoder.h" -#include "Poco/String.h" -#include - - -using Poco::Base64Decoder; -using Poco::Base64Encoder; -using Poco::icompare; - - -namespace Poco { -namespace Net { - - -const std::string HTTPBasicCredentials::SCHEME = "Basic"; - - -HTTPBasicCredentials::HTTPBasicCredentials() -{ -} - - -HTTPBasicCredentials::HTTPBasicCredentials(const std::string& username, const std::string& password): - _username(username), - _password(password) -{ -} - - -HTTPBasicCredentials::HTTPBasicCredentials(const HTTPRequest& request) -{ - std::string scheme; - std::string authInfo; - request.getCredentials(scheme, authInfo); - if (icompare(scheme, SCHEME) == 0) - { - parseAuthInfo(authInfo); - } - else throw NotAuthenticatedException("Basic authentication expected"); -} - - -HTTPBasicCredentials::HTTPBasicCredentials(const std::string& authInfo) -{ - parseAuthInfo(authInfo); -} - - -HTTPBasicCredentials::~HTTPBasicCredentials() -{ -} - - -void HTTPBasicCredentials::setUsername(const std::string& username) -{ - _username = username; -} - - -void HTTPBasicCredentials::setPassword(const std::string& password) -{ - _password = password; -} - - -void HTTPBasicCredentials::authenticate(HTTPRequest& request) const -{ - std::ostringstream ostr; - Base64Encoder encoder(ostr); - encoder.rdbuf()->setLineLength(0); - encoder << _username << ":" << _password; - encoder.close(); - request.setCredentials(SCHEME, ostr.str()); -} - - -void HTTPBasicCredentials::proxyAuthenticate(HTTPRequest& request) const -{ - std::ostringstream ostr; - Base64Encoder encoder(ostr); - encoder.rdbuf()->setLineLength(0); - encoder << _username << ":" << _password; - encoder.close(); - request.setProxyCredentials(SCHEME, ostr.str()); -} - - -void HTTPBasicCredentials::parseAuthInfo(const std::string& authInfo) -{ - static const int eof = std::char_traits::eof(); - - std::istringstream istr(authInfo); - Base64Decoder decoder(istr); - int ch = decoder.get(); - while (ch != eof && ch != ':') - { - _username += (char) ch; - ch = decoder.get(); - } - if (ch == ':') ch = decoder.get(); - while (ch != eof) - { - _password += (char) ch; - ch = decoder.get(); - } -} - - -} } // namespace Poco::Net diff --git a/contrib/libpoco/Net/src/HTTPBufferAllocator.cpp b/contrib/libpoco/Net/src/HTTPBufferAllocator.cpp deleted file mode 100644 index 151825bcce1..00000000000 --- a/contrib/libpoco/Net/src/HTTPBufferAllocator.cpp +++ /dev/null @@ -1,46 +0,0 @@ -// -// HTTPBufferAllocator.cpp -// -// $Id: //poco/Main/template/class.cpp#4 $ -// -// Library: Net -// Package: HTTP -// Module: HTTPBufferAllocator -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "Poco/Net/HTTPBufferAllocator.h" - - -using Poco::MemoryPool; - - -namespace Poco { -namespace Net { - - -MemoryPool HTTPBufferAllocator::_pool(HTTPBufferAllocator::BUFFER_SIZE, 16); - - -char* HTTPBufferAllocator::allocate(std::streamsize size) -{ - poco_assert_dbg (size == BUFFER_SIZE); - - return reinterpret_cast(_pool.get()); -} - - -void HTTPBufferAllocator::deallocate(char* ptr, std::streamsize size) -{ - poco_assert_dbg (size == BUFFER_SIZE); - - _pool.release(ptr); -} - - -} } // namespace Poco::Net diff --git a/contrib/libpoco/Net/src/HTTPChunkedStream.cpp b/contrib/libpoco/Net/src/HTTPChunkedStream.cpp deleted file mode 100644 index 8c0b0ff489e..00000000000 --- a/contrib/libpoco/Net/src/HTTPChunkedStream.cpp +++ /dev/null @@ -1,214 +0,0 @@ -// -// HTTPChunkedStream.cpp -// -// $Id: //poco/1.4/Net/src/HTTPChunkedStream.cpp#1 $ -// -// Library: Net -// Package: HTTP -// Module: HTTPChunkedStream -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "Poco/Net/HTTPChunkedStream.h" -#include "Poco/Net/HTTPSession.h" -#include "Poco/NumberFormatter.h" -#include "Poco/NumberParser.h" -#include "Poco/Ascii.h" - - -using Poco::NumberFormatter; -using Poco::NumberParser; - - -namespace Poco { -namespace Net { - - -// -// HTTPChunkedStreamBuf -// - - -HTTPChunkedStreamBuf::HTTPChunkedStreamBuf(HTTPSession& session, openmode mode): - HTTPBasicStreamBuf(HTTPBufferAllocator::BUFFER_SIZE, mode), - _session(session), - _mode(mode), - _chunk(0) -{ -} - - -HTTPChunkedStreamBuf::~HTTPChunkedStreamBuf() -{ -} - - -void HTTPChunkedStreamBuf::close() -{ - if (_mode & std::ios::out) - { - sync(); - _session.write("0\r\n\r\n", 5); - } -} - - -int HTTPChunkedStreamBuf::readFromDevice(char* buffer, std::streamsize length) -{ - static const int eof = std::char_traits::eof(); - - if (_chunk == 0) - { - int ch = _session.get(); - while (Poco::Ascii::isSpace(ch)) ch = _session.get(); - std::string chunkLen; - while (Poco::Ascii::isHexDigit(ch)) { chunkLen += (char) ch; ch = _session.get(); } - while (ch != eof && ch != '\n') ch = _session.get(); - unsigned chunk; - if (NumberParser::tryParseHex(chunkLen, chunk)) - _chunk = (std::streamsize) chunk; - else - return eof; - } - if (_chunk > 0) - { - if (length > _chunk) length = _chunk; - int n = _session.read(buffer, length); - if (n > 0) _chunk -= n; - return n; - } - else - { - int ch = _session.get(); - while (ch != eof && ch != '\n') ch = _session.get(); - return 0; - } -} - - -int HTTPChunkedStreamBuf::writeToDevice(const char* buffer, std::streamsize length) -{ - _chunkBuffer.clear(); - NumberFormatter::appendHex(_chunkBuffer, length); - _chunkBuffer.append("\r\n", 2); - _chunkBuffer.append(buffer, static_cast(length)); - _chunkBuffer.append("\r\n", 2); - _session.write(_chunkBuffer.data(), static_cast(_chunkBuffer.size())); - return static_cast(length); -} - - -// -// HTTPChunkedIOS -// - - -HTTPChunkedIOS::HTTPChunkedIOS(HTTPSession& session, HTTPChunkedStreamBuf::openmode mode): - _buf(session, mode) -{ - poco_ios_init(&_buf); -} - - -HTTPChunkedIOS::~HTTPChunkedIOS() -{ - try - { - _buf.close(); - } - catch (...) - { - } -} - - -HTTPChunkedStreamBuf* HTTPChunkedIOS::rdbuf() -{ - return &_buf; -} - - -// -// HTTPChunkedInputStream -// - - -Poco::MemoryPool HTTPChunkedInputStream::_pool(sizeof(HTTPChunkedInputStream)); - - -HTTPChunkedInputStream::HTTPChunkedInputStream(HTTPSession& session): - HTTPChunkedIOS(session, std::ios::in), - std::istream(&_buf) -{ -} - - -HTTPChunkedInputStream::~HTTPChunkedInputStream() -{ -} - - -void* HTTPChunkedInputStream::operator new(std::size_t size) -{ - return _pool.get(); -} - - -void HTTPChunkedInputStream::operator delete(void* ptr) -{ - try - { - _pool.release(ptr); - } - catch (...) - { - poco_unexpected(); - } -} - - -// -// HTTPChunkedOutputStream -// - - -Poco::MemoryPool HTTPChunkedOutputStream::_pool(sizeof(HTTPChunkedOutputStream)); - - -HTTPChunkedOutputStream::HTTPChunkedOutputStream(HTTPSession& session): - HTTPChunkedIOS(session, std::ios::out), - std::ostream(&_buf) -{ -} - - -HTTPChunkedOutputStream::~HTTPChunkedOutputStream() -{ -} - - -void* HTTPChunkedOutputStream::operator new(std::size_t size) -{ - return _pool.get(); -} - - -void HTTPChunkedOutputStream::operator delete(void* ptr) -{ - try - { - _pool.release(ptr); - } - catch (...) - { - poco_unexpected(); - } -} - - -} } // namespace Poco::Net diff --git a/contrib/libpoco/Net/src/HTTPClientSession.cpp b/contrib/libpoco/Net/src/HTTPClientSession.cpp deleted file mode 100644 index b7942421711..00000000000 --- a/contrib/libpoco/Net/src/HTTPClientSession.cpp +++ /dev/null @@ -1,427 +0,0 @@ -// -// HTTPClientSession.cpp -// -// $Id: //poco/1.4/Net/src/HTTPClientSession.cpp#15 $ -// -// Library: Net -// Package: HTTPClient -// Module: HTTPClientSession -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "Poco/Net/HTTPClientSession.h" -#include "Poco/Net/HTTPRequest.h" -#include "Poco/Net/HTTPResponse.h" -#include "Poco/Net/HTTPHeaderStream.h" -#include "Poco/Net/HTTPStream.h" -#include "Poco/Net/HTTPFixedLengthStream.h" -#include "Poco/Net/HTTPChunkedStream.h" -#include "Poco/Net/HTTPBasicCredentials.h" -#include "Poco/Net/NetException.h" -#include "Poco/NumberFormatter.h" -#include "Poco/CountingStream.h" -#include "Poco/RegularExpression.h" -#include - - -using Poco::NumberFormatter; -using Poco::IllegalStateException; - - -namespace Poco { -namespace Net { - - -HTTPClientSession::ProxyConfig HTTPClientSession::_globalProxyConfig; - - -HTTPClientSession::HTTPClientSession(): - _port(HTTPSession::HTTP_PORT), - _proxyConfig(_globalProxyConfig), - _keepAliveTimeout(DEFAULT_KEEP_ALIVE_TIMEOUT, 0), - _reconnect(false), - _mustReconnect(false), - _expectResponseBody(false) -{ -} - - -HTTPClientSession::HTTPClientSession(const StreamSocket& socket): - HTTPSession(socket), - _port(HTTPSession::HTTP_PORT), - _proxyConfig(_globalProxyConfig), - _keepAliveTimeout(DEFAULT_KEEP_ALIVE_TIMEOUT, 0), - _reconnect(false), - _mustReconnect(false), - _expectResponseBody(false) -{ -} - - -HTTPClientSession::HTTPClientSession(const SocketAddress& address): - _host(address.host().toString()), - _port(address.port()), - _proxyConfig(_globalProxyConfig), - _keepAliveTimeout(DEFAULT_KEEP_ALIVE_TIMEOUT, 0), - _reconnect(false), - _mustReconnect(false), - _expectResponseBody(false) -{ -} - - -HTTPClientSession::HTTPClientSession(const std::string& host, Poco::UInt16 port): - _host(host), - _port(port), - _proxyConfig(_globalProxyConfig), - _keepAliveTimeout(DEFAULT_KEEP_ALIVE_TIMEOUT, 0), - _reconnect(false), - _mustReconnect(false), - _expectResponseBody(false) -{ -} - - -HTTPClientSession::HTTPClientSession(const std::string& host, Poco::UInt16 port, const ProxyConfig& proxyConfig): - _host(host), - _port(port), - _proxyConfig(proxyConfig), - _keepAliveTimeout(DEFAULT_KEEP_ALIVE_TIMEOUT, 0), - _reconnect(false), - _mustReconnect(false), - _expectResponseBody(false) -{ -} - - -HTTPClientSession::~HTTPClientSession() -{ -} - - -void HTTPClientSession::setHost(const std::string& host) -{ - if (!connected()) - _host = host; - else - throw IllegalStateException("Cannot set the host for an already connected session"); -} - - -void HTTPClientSession::setPort(Poco::UInt16 port) -{ - if (!connected()) - _port = port; - else - throw IllegalStateException("Cannot set the port number for an already connected session"); -} - - -void HTTPClientSession::setProxy(const std::string& host, Poco::UInt16 port) -{ - if (!connected()) - { - _proxyConfig.host = host; - _proxyConfig.port = port; - } - else throw IllegalStateException("Cannot set the proxy host and port for an already connected session"); -} - - -void HTTPClientSession::setProxyHost(const std::string& host) -{ - if (!connected()) - _proxyConfig.host = host; - else - throw IllegalStateException("Cannot set the proxy host for an already connected session"); -} - - -void HTTPClientSession::setProxyPort(Poco::UInt16 port) -{ - if (!connected()) - _proxyConfig.port = port; - else - throw IllegalStateException("Cannot set the proxy port number for an already connected session"); -} - - -void HTTPClientSession::setProxyCredentials(const std::string& username, const std::string& password) -{ - _proxyConfig.username = username; - _proxyConfig.password = password; -} - - -void HTTPClientSession::setProxyUsername(const std::string& username) -{ - _proxyConfig.username = username; -} - - -void HTTPClientSession::setProxyPassword(const std::string& password) -{ - _proxyConfig.password = password; -} - - -void HTTPClientSession::setProxyConfig(const ProxyConfig& config) -{ - _proxyConfig = config; -} - - -void HTTPClientSession::setGlobalProxyConfig(const ProxyConfig& config) -{ - _globalProxyConfig = config; -} - - -void HTTPClientSession::setKeepAliveTimeout(const Poco::Timespan& timeout) -{ - _keepAliveTimeout = timeout; -} - - -std::ostream& HTTPClientSession::sendRequest(HTTPRequest& request) -{ - clearException(); - _pResponseStream = 0; - - bool keepAlive = getKeepAlive(); - if ((connected() && !keepAlive) || mustReconnect()) - { - close(); - _mustReconnect = false; - } - try - { - if (!connected()) - reconnect(); - if (!keepAlive) - request.setKeepAlive(false); - if (!request.has(HTTPRequest::HOST)) - request.setHost(_host, _port); - if (!_proxyConfig.host.empty() && !bypassProxy()) - { - request.setURI(proxyRequestPrefix() + request.getURI()); - proxyAuthenticate(request); - } - _reconnect = keepAlive; - _expectResponseBody = request.getMethod() != HTTPRequest::HTTP_HEAD; - if (request.getChunkedTransferEncoding()) - { - HTTPHeaderOutputStream hos(*this); - request.write(hos); - _pRequestStream = new HTTPChunkedOutputStream(*this); - } - else if (request.hasContentLength()) - { - Poco::CountingOutputStream cs; - request.write(cs); -#if POCO_HAVE_INT64 - _pRequestStream = new HTTPFixedLengthOutputStream(*this, request.getContentLength64() + cs.chars()); -#else - _pRequestStream = new HTTPFixedLengthOutputStream(*this, request.getContentLength() + cs.chars()); -#endif - request.write(*_pRequestStream); - } - else if ((request.getMethod() != HTTPRequest::HTTP_PUT && request.getMethod() != HTTPRequest::HTTP_POST) || request.has(HTTPRequest::UPGRADE)) - { - Poco::CountingOutputStream cs; - request.write(cs); - _pRequestStream = new HTTPFixedLengthOutputStream(*this, cs.chars()); - request.write(*_pRequestStream); - } - else - { - _pRequestStream = new HTTPOutputStream(*this); - request.write(*_pRequestStream); - } - _lastRequest.update(); - return *_pRequestStream; - } - catch (Exception&) - { - close(); - throw; - } -} - - -std::istream& HTTPClientSession::receiveResponse(HTTPResponse& response) -{ - _pRequestStream = 0; - if (networkException()) networkException()->rethrow(); - - do - { - response.clear(); - HTTPHeaderInputStream his(*this); - try - { - response.read(his); - } - catch (Exception&) - { - close(); - if (networkException()) - networkException()->rethrow(); - else - throw; - throw; - } - } - while (response.getStatus() == HTTPResponse::HTTP_CONTINUE); - - _mustReconnect = getKeepAlive() && !response.getKeepAlive(); - - if (!_expectResponseBody || response.getStatus() < 200 || response.getStatus() == HTTPResponse::HTTP_NO_CONTENT || response.getStatus() == HTTPResponse::HTTP_NOT_MODIFIED) - _pResponseStream = new HTTPFixedLengthInputStream(*this, 0); - else if (response.getChunkedTransferEncoding()) - _pResponseStream = new HTTPChunkedInputStream(*this); - else if (response.hasContentLength()) -#if defined(POCO_HAVE_INT64) - _pResponseStream = new HTTPFixedLengthInputStream(*this, response.getContentLength64()); -#else - _pResponseStream = new HTTPFixedLengthInputStream(*this, response.getContentLength()); -#endif - else - _pResponseStream = new HTTPInputStream(*this); - - return *_pResponseStream; -} - - -void HTTPClientSession::reset() -{ - close(); -} - - -bool HTTPClientSession::secure() const -{ - return false; -} - - -int HTTPClientSession::write(const char* buffer, std::streamsize length) -{ - try - { - int rc = HTTPSession::write(buffer, length); - _reconnect = false; - return rc; - } - catch (NetException&) - { - if (_reconnect) - { - close(); - reconnect(); - int rc = HTTPSession::write(buffer, length); - _reconnect = false; - return rc; - } - else throw; - } -} - - -void HTTPClientSession::reconnect() -{ - if (_proxyConfig.host.empty() || bypassProxy()) - { - SocketAddress addr(_host, _port); - connect(addr); - } - else - { - SocketAddress addr(_proxyConfig.host, _proxyConfig.port); - connect(addr); - } -} - - -std::string HTTPClientSession::proxyRequestPrefix() const -{ - std::string result("http://"); - result.append(_host); - result.append(":"); - NumberFormatter::append(result, _port); - return result; -} - - -bool HTTPClientSession::mustReconnect() const -{ - if (!_mustReconnect) - { - Poco::Timestamp now; - return _keepAliveTimeout <= now - _lastRequest; - } - else return true; -} - - -void HTTPClientSession::proxyAuthenticate(HTTPRequest& request) -{ - proxyAuthenticateImpl(request); -} - - -void HTTPClientSession::proxyAuthenticateImpl(HTTPRequest& request) -{ - if (!_proxyConfig.username.empty()) - { - HTTPBasicCredentials creds(_proxyConfig.username, _proxyConfig.password); - creds.proxyAuthenticate(request); - } -} - - -StreamSocket HTTPClientSession::proxyConnect() -{ - ProxyConfig emptyProxyConfig; - HTTPClientSession proxySession(getProxyHost(), getProxyPort(), emptyProxyConfig); - proxySession.setTimeout(getTimeout()); - std::string targetAddress(_host); - targetAddress.append(":"); - NumberFormatter::append(targetAddress, _port); - HTTPRequest proxyRequest(HTTPRequest::HTTP_CONNECT, targetAddress, HTTPMessage::HTTP_1_1); - HTTPResponse proxyResponse; - proxyRequest.set("Proxy-Connection", "keep-alive"); - proxyRequest.set("Host", getHost()); - proxyAuthenticateImpl(proxyRequest); - proxySession.setKeepAlive(true); - proxySession.sendRequest(proxyRequest); - proxySession.receiveResponse(proxyResponse); - if (proxyResponse.getStatus() != HTTPResponse::HTTP_OK) - throw HTTPException("Cannot establish proxy connection", proxyResponse.getReason()); - return proxySession.detachSocket(); -} - - -void HTTPClientSession::proxyTunnel() -{ - StreamSocket ss = proxyConnect(); - attachSocket(ss); -} - - -bool HTTPClientSession::bypassProxy() const -{ - if (!_proxyConfig.nonProxyHosts.empty()) - { - return RegularExpression::match(_host, _proxyConfig.nonProxyHosts, RegularExpression::RE_CASELESS | RegularExpression::RE_ANCHORED); - } - else return false; -} - - -} } // namespace Poco::Net diff --git a/contrib/libpoco/Net/src/HTTPCookie.cpp b/contrib/libpoco/Net/src/HTTPCookie.cpp deleted file mode 100644 index 2b70afa305c..00000000000 --- a/contrib/libpoco/Net/src/HTTPCookie.cpp +++ /dev/null @@ -1,345 +0,0 @@ -// -// HTTPCookie.cpp -// -// $Id: //poco/1.4/Net/src/HTTPCookie.cpp#3 $ -// -// Library: Net -// Package: HTTP -// Module: HTTPCookie -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "Poco/Net/HTTPCookie.h" -#include "Poco/Net/NameValueCollection.h" -#include "Poco/Timestamp.h" -#include "Poco/DateTime.h" -#include "Poco/DateTimeFormatter.h" -#include "Poco/DateTimeFormat.h" -#include "Poco/DateTimeParser.h" -#include "Poco/NumberFormatter.h" -#include "Poco/NumberParser.h" -#include "Poco/String.h" -#include "Poco/URI.h" - - -using Poco::Timestamp; -using Poco::DateTime; -using Poco::DateTimeFormatter; -using Poco::DateTimeFormat; -using Poco::DateTimeParser; -using Poco::NumberFormatter; -using Poco::NumberParser; -using Poco::icompare; - - -namespace Poco { -namespace Net { - - -HTTPCookie::HTTPCookie(): - _version(0), - _secure(false), - _maxAge(-1), - _httpOnly(false) -{ -} - - -HTTPCookie::HTTPCookie(const std::string& name): - _version(0), - _name(name), - _secure(false), - _maxAge(-1), - _httpOnly(false) -{ -} - - -HTTPCookie::HTTPCookie(const NameValueCollection& nvc): - _version(0), - _secure(false), - _maxAge(-1), - _httpOnly(false) -{ - for (NameValueCollection::ConstIterator it = nvc.begin(); it != nvc.end(); ++it) - { - const std::string& name = it->first; - const std::string& value = it->second; - if (icompare(name, "comment") == 0) - { - setComment(value); - } - else if (icompare(name, "domain") == 0) - { - setDomain(value); - } - else if (icompare(name, "path") == 0) - { - setPath(value); - } - else if (icompare(name, "priority") == 0) - { - setPriority(value); - } - else if (icompare(name, "max-age") == 0) - { - setMaxAge(NumberParser::parse(value)); - } - else if (icompare(name, "secure") == 0) - { - setSecure(true); - } - else if (icompare(name, "expires") == 0) - { - int tzd; - DateTime exp = DateTimeParser::parse(value, tzd); - Timestamp now; - setMaxAge((int) ((exp.timestamp() - now) / Timestamp::resolution())); - } - else if (icompare(name, "version") == 0) - { - setVersion(NumberParser::parse(value)); - } - else if (icompare(name, "HttpOnly") == 0) - { - setHttpOnly(true); - } - else - { - setName(name); - setValue(value); - } - } -} - - -HTTPCookie::HTTPCookie(const std::string& name, const std::string& value): - _version(0), - _name(name), - _value(value), - _secure(false), - _maxAge(-1), - _httpOnly(false) -{ -} - - -HTTPCookie::HTTPCookie(const HTTPCookie& cookie): - _version(cookie._version), - _name(cookie._name), - _value(cookie._value), - _comment(cookie._comment), - _domain(cookie._domain), - _path(cookie._path), - _priority(cookie._priority), - _secure(cookie._secure), - _maxAge(cookie._maxAge), - _httpOnly(cookie._httpOnly) -{ -} - - -HTTPCookie::~HTTPCookie() -{ -} - - -HTTPCookie& HTTPCookie::operator = (const HTTPCookie& cookie) -{ - if (&cookie != this) - { - _version = cookie._version; - _name = cookie._name; - _value = cookie._value; - _comment = cookie._comment; - _domain = cookie._domain; - _path = cookie._path; - _priority = cookie._priority; - _secure = cookie._secure; - _maxAge = cookie._maxAge; - _httpOnly = cookie._httpOnly; - } - return *this; -} - - -void HTTPCookie::setVersion(int version) -{ - _version = version; -} - - -void HTTPCookie::setName(const std::string& name) -{ - _name = name; -} - - -void HTTPCookie::setValue(const std::string& value) -{ - _value = value; -} - - -void HTTPCookie::setComment(const std::string& comment) -{ - _comment = comment; -} - - -void HTTPCookie::setDomain(const std::string& domain) -{ - _domain = domain; -} - - -void HTTPCookie::setPath(const std::string& path) -{ - _path = path; -} - - -void HTTPCookie::setPriority(const std::string& priority) -{ - _priority = priority; -} - - -void HTTPCookie::setSecure(bool secure) -{ - _secure = secure; -} - - -void HTTPCookie::setMaxAge(int maxAge) -{ - _maxAge = maxAge; -} - - -void HTTPCookie::setHttpOnly(bool flag) -{ - _httpOnly = flag; -} - - -std::string HTTPCookie::toString() const -{ - std::string result; - result.reserve(256); - result.append(_name); - result.append("="); - if (_version == 0) - { - // Netscape cookie - result.append(_value); - if (!_domain.empty()) - { - result.append("; domain="); - result.append(_domain); - } - if (!_path.empty()) - { - result.append("; path="); - result.append(_path); - } - if (!_priority.empty()) - { - result.append("; Priority="); - result.append(_priority); - } - if (_maxAge != -1) - { - Timestamp ts; - ts += _maxAge * Timestamp::resolution(); - result.append("; expires="); - DateTimeFormatter::append(result, ts, DateTimeFormat::HTTP_FORMAT); - } - if (_secure) - { - result.append("; secure"); - } - if (_httpOnly) - { - result.append("; HttpOnly"); - } - } - else - { - // RFC 2109 cookie - result.append("\""); - result.append(_value); - result.append("\""); - if (!_comment.empty()) - { - result.append("; Comment=\""); - result.append(_comment); - result.append("\""); - } - if (!_domain.empty()) - { - result.append("; Domain=\""); - result.append(_domain); - result.append("\""); - } - if (!_path.empty()) - { - result.append("; Path=\""); - result.append(_path); - result.append("\""); - } - if (!_priority.empty()) - { - result.append("; Priority=\""); - result.append(_priority); - result.append("\""); - } - - if (_maxAge != -1) - { - result.append("; Max-Age=\""); - NumberFormatter::append(result, _maxAge); - result.append("\""); - } - if (_secure) - { - result.append("; secure"); - } - if (_httpOnly) - { - result.append("; HttpOnly"); - } - result.append("; Version=\"1\""); - } - return result; -} - - -namespace -{ - static const std::string ILLEGAL_CHARS("()[]/|\\',;"); -} - - -std::string HTTPCookie::escape(const std::string& str) -{ - std::string result; - Poco::URI::encode(str, ILLEGAL_CHARS, result); - return result; -} - - -std::string HTTPCookie::unescape(const std::string& str) -{ - std::string result; - Poco::URI::decode(str, result); - return result; -} - - -} } // namespace Poco::Net diff --git a/contrib/libpoco/Net/src/HTTPCredentials.cpp b/contrib/libpoco/Net/src/HTTPCredentials.cpp deleted file mode 100644 index 78643912ddf..00000000000 --- a/contrib/libpoco/Net/src/HTTPCredentials.cpp +++ /dev/null @@ -1,210 +0,0 @@ -// -// HTTPCredentials.cpp -// -// $Id: //poco/1.4/Net/src/HTTPCredentials.cpp#3 $ -// -// Library: Net -// Package: HTTP -// Module: HTTPCredentials -// -// Copyright (c) 2011, Anton V. Yabchinskiy (arn at bestmx dot ru). -// Copyright (c) 2012, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "Poco/Net/HTTPAuthenticationParams.h" -#include "Poco/Net/HTTPBasicCredentials.h" -#include "Poco/Net/HTTPCredentials.h" -#include "Poco/Net/HTTPRequest.h" -#include "Poco/Net/HTTPResponse.h" -#include "Poco/Net/NetException.h" -#include "Poco/String.h" -#include "Poco/Ascii.h" -#include "Poco/URI.h" - - -using Poco::icompare; - - -namespace Poco { -namespace Net { - - -HTTPCredentials::HTTPCredentials() -{ -} - - -HTTPCredentials::HTTPCredentials(const std::string& username, const std::string& password): - _digest(username, password) -{ -} - - -HTTPCredentials::~HTTPCredentials() -{ -} - - -void HTTPCredentials::fromUserInfo(const std::string& userInfo) -{ - std::string username; - std::string password; - - extractCredentials(userInfo, username, password); - setUsername(username); - setPassword(password); - _digest.reset(); -} - - -void HTTPCredentials::fromURI(const URI& uri) -{ - std::string username; - std::string password; - - extractCredentials(uri, username, password); - setUsername(username); - setPassword(password); - _digest.reset(); -} - - -void HTTPCredentials::authenticate(HTTPRequest& request, const HTTPResponse& response) -{ - for (HTTPResponse::ConstIterator iter = response.find(HTTPAuthenticationParams::WWW_AUTHENTICATE); iter != response.end(); ++iter) - { - if (isBasicCredentials(iter->second)) - { - HTTPBasicCredentials(_digest.getUsername(), _digest.getPassword()).authenticate(request); - return; - } - else if (isDigestCredentials(iter->second)) - { - _digest.authenticate(request, HTTPAuthenticationParams(iter->second.substr(7))); - return; - } - } -} - - -void HTTPCredentials::updateAuthInfo(HTTPRequest& request) -{ - if (request.has(HTTPRequest::AUTHORIZATION)) - { - const std::string& authorization = request.get(HTTPRequest::AUTHORIZATION); - - if (isBasicCredentials(authorization)) - { - HTTPBasicCredentials(_digest.getUsername(), _digest.getPassword()).authenticate(request); - } - else if (isDigestCredentials(authorization)) - { - _digest.updateAuthInfo(request); - } - } -} - - -void HTTPCredentials::proxyAuthenticate(HTTPRequest& request, const HTTPResponse& response) -{ - for (HTTPResponse::ConstIterator iter = response.find(HTTPAuthenticationParams::PROXY_AUTHENTICATE); iter != response.end(); ++iter) - { - if (isBasicCredentials(iter->second)) - { - HTTPBasicCredentials(_digest.getUsername(), _digest.getPassword()).proxyAuthenticate(request); - return; - } - else if (isDigestCredentials(iter->second)) - { - _digest.proxyAuthenticate(request, HTTPAuthenticationParams(iter->second.substr(7))); - return; - } - } -} - - -void HTTPCredentials::updateProxyAuthInfo(HTTPRequest& request) -{ - if (request.has(HTTPRequest::PROXY_AUTHORIZATION)) - { - const std::string& authorization = request.get(HTTPRequest::PROXY_AUTHORIZATION); - - if (isBasicCredentials(authorization)) - { - HTTPBasicCredentials(_digest.getUsername(), _digest.getPassword()).proxyAuthenticate(request); - } - else if (isDigestCredentials(authorization)) - { - _digest.updateProxyAuthInfo(request); - } - } -} - - -bool HTTPCredentials::isBasicCredentials(const std::string& header) -{ - return icompare(header, 0, 5, "Basic") == 0 && (header.size() > 5 ? Poco::Ascii::isSpace(header[5]) : true); -} - - -bool HTTPCredentials::isDigestCredentials(const std::string& header) -{ - return icompare(header, 0, 6, "Digest") == 0 && (header.size() > 6 ? Poco::Ascii::isSpace(header[6]) : true); -} - - -bool HTTPCredentials::hasBasicCredentials(const HTTPRequest& request) -{ - return request.has(HTTPRequest::AUTHORIZATION) && isBasicCredentials(request.get(HTTPRequest::AUTHORIZATION)); -} - - -bool HTTPCredentials::hasDigestCredentials(const HTTPRequest& request) -{ - return request.has(HTTPRequest::AUTHORIZATION) && isDigestCredentials(request.get(HTTPRequest::AUTHORIZATION)); -} - - -bool HTTPCredentials::hasProxyBasicCredentials(const HTTPRequest& request) -{ - return request.has(HTTPRequest::PROXY_AUTHORIZATION) && isBasicCredentials(request.get(HTTPRequest::PROXY_AUTHORIZATION)); -} - - -bool HTTPCredentials::hasProxyDigestCredentials(const HTTPRequest& request) -{ - return request.has(HTTPRequest::PROXY_AUTHORIZATION) && isDigestCredentials(request.get(HTTPRequest::PROXY_AUTHORIZATION)); -} - - -void HTTPCredentials::extractCredentials(const std::string& userInfo, std::string& username, std::string& password) -{ - const std::string::size_type p = userInfo.find(':'); - - if (p != std::string::npos) - { - username.assign(userInfo, 0, p); - password.assign(userInfo, p + 1, std::string::npos); - } - else - { - username.assign(userInfo); - password.clear(); - } -} - - -void HTTPCredentials::extractCredentials(const Poco::URI& uri, std::string& username, std::string& password) -{ - if (!uri.getUserInfo().empty()) - { - extractCredentials(uri.getUserInfo(), username, password); - } -} - - -} } // namespace Poco::Net diff --git a/contrib/libpoco/Net/src/HTTPDigestCredentials.cpp b/contrib/libpoco/Net/src/HTTPDigestCredentials.cpp deleted file mode 100644 index 1ca2a7a3865..00000000000 --- a/contrib/libpoco/Net/src/HTTPDigestCredentials.cpp +++ /dev/null @@ -1,308 +0,0 @@ -// -// HTTPDigestCredentials.cpp -// -// $Id: //poco/1.4/Net/src/HTTPDigestCredentials.cpp#5 $ -// -// Library: Net -// Package: HTTP -// Module: HTTPDigestCredentials -// -// Copyright (c) 2011, Anton V. Yabchinskiy (arn at bestmx dot ru). -// Copyright (c) 2012, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "Poco/DateTime.h" -#include "Poco/DateTimeFormat.h" -#include "Poco/DateTimeFormatter.h" -#include "Poco/Exception.h" -#include "Poco/MD5Engine.h" -#include "Poco/Net/HTTPDigestCredentials.h" -#include "Poco/Net/HTTPRequest.h" -#include "Poco/Net/HTTPResponse.h" -#include "Poco/NumberFormatter.h" -#include "Poco/StringTokenizer.h" - - -namespace -{ - std::string digest(Poco::DigestEngine& engine, - const std::string& a, - const std::string& b, - const std::string& c = std::string(), - const std::string& d = std::string(), - const std::string& e = std::string(), - const std::string& f = std::string()) - { - engine.reset(); - engine.update(a); - engine.update(':'); - engine.update(b); - if (!c.empty()) - { - engine.update(':'); - engine.update(c); - if (!d.empty()) - { - engine.update(':'); - engine.update(d); - engine.update(':'); - engine.update(e); - engine.update(':'); - engine.update(f); - } - } - return Poco::DigestEngine::digestToHex(engine.digest()); - } - - std::string formatNonceCounter(int counter) - { - return Poco::NumberFormatter::formatHex(counter, 8); - } -} - - -namespace Poco { -namespace Net { - - -const std::string HTTPDigestCredentials::SCHEME = "Digest"; -const std::string HTTPDigestCredentials::DEFAULT_ALGORITHM("MD5"); -const std::string HTTPDigestCredentials::DEFAULT_QOP(""); -const std::string HTTPDigestCredentials::NONCE_PARAM("nonce"); -const std::string HTTPDigestCredentials::REALM_PARAM("realm"); -const std::string HTTPDigestCredentials::QOP_PARAM("qop"); -const std::string HTTPDigestCredentials::ALGORITHM_PARAM("algorithm"); -const std::string HTTPDigestCredentials::USERNAME_PARAM("username"); -const std::string HTTPDigestCredentials::OPAQUE_PARAM("opaque"); -const std::string HTTPDigestCredentials::URI_PARAM("uri"); -const std::string HTTPDigestCredentials::RESPONSE_PARAM("response"); -const std::string HTTPDigestCredentials::AUTH_PARAM("auth"); -const std::string HTTPDigestCredentials::CNONCE_PARAM("cnonce"); -const std::string HTTPDigestCredentials::NC_PARAM("nc"); -int HTTPDigestCredentials::_nonceCounter(0); -Poco::FastMutex HTTPDigestCredentials::_nonceMutex; - - -HTTPDigestCredentials::HTTPDigestCredentials() -{ -} - - -HTTPDigestCredentials::HTTPDigestCredentials(const std::string& username, const std::string& password): - _username(username), - _password(password) -{ -} - - -HTTPDigestCredentials::~HTTPDigestCredentials() -{ -} - - -void HTTPDigestCredentials::reset() -{ - _requestAuthParams.clear(); - _nc.clear(); -} - - -void HTTPDigestCredentials::setUsername(const std::string& username) -{ - _username = username; -} - - -void HTTPDigestCredentials::setPassword(const std::string& password) -{ - _password = password; -} - - -void HTTPDigestCredentials::authenticate(HTTPRequest& request, const HTTPResponse& response) -{ - authenticate(request, HTTPAuthenticationParams(response)); -} - - -void HTTPDigestCredentials::authenticate(HTTPRequest& request, const HTTPAuthenticationParams& responseAuthParams) -{ - createAuthParams(request, responseAuthParams); - request.setCredentials(SCHEME, _requestAuthParams.toString()); -} - - -void HTTPDigestCredentials::updateAuthInfo(HTTPRequest& request) -{ - updateAuthParams(request); - request.setCredentials(SCHEME, _requestAuthParams.toString()); -} - - -void HTTPDigestCredentials::proxyAuthenticate(HTTPRequest& request, const HTTPResponse& response) -{ - proxyAuthenticate(request, HTTPAuthenticationParams(response, HTTPAuthenticationParams::PROXY_AUTHENTICATE)); -} - - -void HTTPDigestCredentials::proxyAuthenticate(HTTPRequest& request, const HTTPAuthenticationParams& responseAuthParams) -{ - createAuthParams(request, responseAuthParams); - request.setProxyCredentials(SCHEME, _requestAuthParams.toString()); -} - - -void HTTPDigestCredentials::updateProxyAuthInfo(HTTPRequest& request) -{ - updateAuthParams(request); - request.setProxyCredentials(SCHEME, _requestAuthParams.toString()); -} - - -std::string HTTPDigestCredentials::createNonce() -{ - Poco::FastMutex::ScopedLock lock(_nonceMutex); - - MD5Engine md5; - Timestamp::TimeVal now = Timestamp().epochMicroseconds(); - - md5.update(&_nonceCounter, sizeof(_nonceCounter)); - md5.update(&now, sizeof(now)); - - ++_nonceCounter; - - return DigestEngine::digestToHex(md5.digest()); -} - - -void HTTPDigestCredentials::createAuthParams(const HTTPRequest& request, const HTTPAuthenticationParams& responseAuthParams) -{ - // Not implemented: "domain" auth parameter and integrity protection. - - if (!responseAuthParams.has(NONCE_PARAM) || !responseAuthParams.has(REALM_PARAM)) - throw InvalidArgumentException("Invalid HTTP authentication parameters"); - - const std::string& algorithm = responseAuthParams.get(ALGORITHM_PARAM, DEFAULT_ALGORITHM); - - if (icompare(algorithm, DEFAULT_ALGORITHM) != 0) - throw NotImplementedException("Unsupported digest algorithm", algorithm); - - const std::string& nonce = responseAuthParams.get(NONCE_PARAM); - const std::string& qop = responseAuthParams.get(QOP_PARAM, DEFAULT_QOP); - const std::string& realm = responseAuthParams.getRealm(); - - _requestAuthParams.clear(); - _requestAuthParams.set(USERNAME_PARAM, _username); - _requestAuthParams.set(NONCE_PARAM, nonce); - _requestAuthParams.setRealm(realm); - if (responseAuthParams.has(OPAQUE_PARAM)) - { - _requestAuthParams.set(OPAQUE_PARAM, responseAuthParams.get(OPAQUE_PARAM)); - } - - if (qop.empty()) - { - updateAuthParams(request); - } - else - { - Poco::StringTokenizer tok(qop, ",", Poco::StringTokenizer::TOK_TRIM); - bool qopSupported = false; - for (Poco::StringTokenizer::Iterator it = tok.begin(); it != tok.end(); ++it) - { - if (icompare(*it, AUTH_PARAM) == 0) - { - qopSupported = true; - _requestAuthParams.set(CNONCE_PARAM, createNonce()); - _requestAuthParams.set(QOP_PARAM, *it); - updateAuthParams(request); - break; - } - } - if (!qopSupported) - throw NotImplementedException("Unsupported QoP requested", qop); - } -} - - -void HTTPDigestCredentials::updateAuthParams(const HTTPRequest& request) -{ - MD5Engine engine; - const std::string& qop = _requestAuthParams.get(QOP_PARAM, DEFAULT_QOP); - const std::string& realm = _requestAuthParams.getRealm(); - const std::string& nonce = _requestAuthParams.get(NONCE_PARAM); - - _requestAuthParams.set(URI_PARAM, request.getURI()); - - if (qop.empty()) - { - const std::string ha1 = digest(engine, _username, realm, _password); - const std::string ha2 = digest(engine, request.getMethod(), request.getURI()); - - _requestAuthParams.set(RESPONSE_PARAM, digest(engine, ha1, nonce, ha2)); - } - else if (icompare(qop, AUTH_PARAM) == 0) - { - const std::string& cnonce = _requestAuthParams.get(CNONCE_PARAM); - - const std::string ha1 = digest(engine, _username, realm, _password); - const std::string ha2 = digest(engine, request.getMethod(), request.getURI()); - const std::string nc = formatNonceCounter(updateNonceCounter(nonce)); - - _requestAuthParams.set(NC_PARAM, nc); - _requestAuthParams.set(RESPONSE_PARAM, digest(engine, ha1, nonce, nc, cnonce, qop, ha2)); - } -} - - -bool HTTPDigestCredentials::verifyAuthInfo(const HTTPRequest& request) const -{ - HTTPAuthenticationParams params(request); - return verifyAuthParams(request, params); -} - - -bool HTTPDigestCredentials::verifyAuthParams(const HTTPRequest& request, const HTTPAuthenticationParams& params) const -{ - const std::string& nonce = params.get(NONCE_PARAM); - const std::string& realm = params.getRealm(); - const std::string& qop = params.get(QOP_PARAM, DEFAULT_QOP); - std::string response; - MD5Engine engine; - if (qop.empty()) - { - const std::string ha1 = digest(engine, _username, realm, _password); - const std::string ha2 = digest(engine, request.getMethod(), request.getURI()); - response = digest(engine, ha1, nonce, ha2); - } - else if (icompare(qop, AUTH_PARAM) == 0) - { - const std::string& cnonce = params.get(CNONCE_PARAM); - const std::string& nc = params.get(NC_PARAM); - const std::string ha1 = digest(engine, _username, realm, _password); - const std::string ha2 = digest(engine, request.getMethod(), request.getURI()); - response = digest(engine, ha1, nonce, nc, cnonce, qop, ha2); - } - return response == params.get(RESPONSE_PARAM); -} - - -int HTTPDigestCredentials::updateNonceCounter(const std::string& nonce) -{ - NonceCounterMap::iterator iter = _nc.find(nonce); - - if (iter == _nc.end()) - { - iter = _nc.insert(NonceCounterMap::value_type(nonce, 0)).first; - } - iter->second++; - - return iter->second; -} - - -} } // namespace Poco::Net diff --git a/contrib/libpoco/Net/src/HTTPFixedLengthStream.cpp b/contrib/libpoco/Net/src/HTTPFixedLengthStream.cpp deleted file mode 100644 index e00d3011b50..00000000000 --- a/contrib/libpoco/Net/src/HTTPFixedLengthStream.cpp +++ /dev/null @@ -1,183 +0,0 @@ -// -// HTTPFixedLengthStream.cpp -// -// $Id: //poco/1.4/Net/src/HTTPFixedLengthStream.cpp#1 $ -// -// Library: Net -// Package: HTTP -// Module: HTTPFixedLengthStream -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "Poco/Net/HTTPFixedLengthStream.h" -#include "Poco/Net/HTTPSession.h" - - -using Poco::BufferedStreamBuf; - - -namespace Poco { -namespace Net { - - -// -// HTTPFixedLengthStreamBuf -// - - -HTTPFixedLengthStreamBuf::HTTPFixedLengthStreamBuf(HTTPSession& session, ContentLength length, openmode mode): - HTTPBasicStreamBuf(HTTPBufferAllocator::BUFFER_SIZE, mode), - _session(session), - _length(length), - _count(0) -{ -} - - -HTTPFixedLengthStreamBuf::~HTTPFixedLengthStreamBuf() -{ -} - - -int HTTPFixedLengthStreamBuf::readFromDevice(char* buffer, std::streamsize length) -{ - int n = 0; - if (_count < _length) - { - if (_count + length > _length) - length = static_cast(_length - _count); - n = _session.read(buffer, length); - if (n > 0) _count += n; - } - return n; -} - - -int HTTPFixedLengthStreamBuf::writeToDevice(const char* buffer, std::streamsize length) -{ - int n = 0; - if (_count < _length) - { - if (_count + length > _length) - length = static_cast(_length - _count); - n = _session.write(buffer, length); - if (n > 0) _count += n; - } - return n; -} - - -// -// HTTPFixedLengthIOS -// - - -HTTPFixedLengthIOS::HTTPFixedLengthIOS(HTTPSession& session, HTTPFixedLengthStreamBuf::ContentLength length, HTTPFixedLengthStreamBuf::openmode mode): - _buf(session, length, mode) -{ - poco_ios_init(&_buf); -} - - -HTTPFixedLengthIOS::~HTTPFixedLengthIOS() -{ - try - { - _buf.sync(); - } - catch (...) - { - } -} - - -HTTPFixedLengthStreamBuf* HTTPFixedLengthIOS::rdbuf() -{ - return &_buf; -} - - -// -// HTTPFixedLengthInputStream -// - - -Poco::MemoryPool HTTPFixedLengthInputStream::_pool(sizeof(HTTPFixedLengthInputStream)); - - -HTTPFixedLengthInputStream::HTTPFixedLengthInputStream(HTTPSession& session, HTTPFixedLengthStreamBuf::ContentLength length): - HTTPFixedLengthIOS(session, length, std::ios::in), - std::istream(&_buf) -{ -} - - -HTTPFixedLengthInputStream::~HTTPFixedLengthInputStream() -{ -} - - -void* HTTPFixedLengthInputStream::operator new(std::size_t size) -{ - return _pool.get(); -} - - -void HTTPFixedLengthInputStream::operator delete(void* ptr) -{ - try - { - _pool.release(ptr); - } - catch (...) - { - poco_unexpected(); - } -} - - -// -// HTTPFixedLengthOutputStream -// - - -Poco::MemoryPool HTTPFixedLengthOutputStream::_pool(sizeof(HTTPFixedLengthOutputStream)); - - -HTTPFixedLengthOutputStream::HTTPFixedLengthOutputStream(HTTPSession& session, HTTPFixedLengthStreamBuf::ContentLength length): - HTTPFixedLengthIOS(session, length, std::ios::out), - std::ostream(&_buf) -{ -} - - -HTTPFixedLengthOutputStream::~HTTPFixedLengthOutputStream() -{ -} - - -void* HTTPFixedLengthOutputStream::operator new(std::size_t size) -{ - return _pool.get(); -} - - -void HTTPFixedLengthOutputStream::operator delete(void* ptr) -{ - try - { - _pool.release(ptr); - } - catch (...) - { - poco_unexpected(); - } -} - - -} } // namespace Poco::Net diff --git a/contrib/libpoco/Net/src/HTTPHeaderStream.cpp b/contrib/libpoco/Net/src/HTTPHeaderStream.cpp deleted file mode 100644 index c729943774f..00000000000 --- a/contrib/libpoco/Net/src/HTTPHeaderStream.cpp +++ /dev/null @@ -1,180 +0,0 @@ -// -// HTTPHeaderStream.cpp -// -// $Id: //poco/1.4/Net/src/HTTPHeaderStream.cpp#1 $ -// -// Library: Net -// Package: HTTP -// Module: HTTPHeaderStream -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "Poco/Net/HTTPHeaderStream.h" -#include "Poco/Net/HTTPSession.h" - - -namespace Poco { -namespace Net { - - -// -// HTTPHeaderStreamBuf -// - - -HTTPHeaderStreamBuf::HTTPHeaderStreamBuf(HTTPSession& session, openmode mode): - HTTPBasicStreamBuf(HTTPBufferAllocator::BUFFER_SIZE, mode), - _session(session), - _end(false) -{ -} - - -HTTPHeaderStreamBuf::~HTTPHeaderStreamBuf() -{ -} - - -int HTTPHeaderStreamBuf::readFromDevice(char* buffer, std::streamsize length) -{ - // read line-by-line; an empty line denotes the end of the headers. - static const int eof = std::char_traits::eof(); - - if (_end) return 0; - - int n = 0; - int ch = _session.get(); - while (ch != eof && ch != '\n' && n < length - 1) - { - *buffer++ = (char) ch; ++n; - ch = _session.get(); - } - if (ch != eof) - { - *buffer++ = (char) ch; ++n; - if (n == 2) _end = true; - } - return n; -} - - -int HTTPHeaderStreamBuf::writeToDevice(const char* buffer, std::streamsize length) -{ - return _session.write(buffer, length); -} - - -// -// HTTPHeaderIOS -// - - -HTTPHeaderIOS::HTTPHeaderIOS(HTTPSession& session, HTTPHeaderStreamBuf::openmode mode): - _buf(session, mode) -{ - poco_ios_init(&_buf); -} - - -HTTPHeaderIOS::~HTTPHeaderIOS() -{ - try - { - _buf.sync(); - } - catch (...) - { - } -} - - -HTTPHeaderStreamBuf* HTTPHeaderIOS::rdbuf() -{ - return &_buf; -} - - -// -// HTTPHeaderInputStream -// - - -Poco::MemoryPool HTTPHeaderInputStream::_pool(sizeof(HTTPHeaderInputStream)); - - -HTTPHeaderInputStream::HTTPHeaderInputStream(HTTPSession& session): - HTTPHeaderIOS(session, std::ios::in), - std::istream(&_buf) -{ -} - - -HTTPHeaderInputStream::~HTTPHeaderInputStream() -{ -} - - -void* HTTPHeaderInputStream::operator new(std::size_t size) -{ - return _pool.get(); -} - - -void HTTPHeaderInputStream::operator delete(void* ptr) -{ - try - { - _pool.release(ptr); - } - catch (...) - { - poco_unexpected(); - } -} - - -// -// HTTPHeaderOutputStream -// - - -Poco::MemoryPool HTTPHeaderOutputStream::_pool(sizeof(HTTPHeaderOutputStream)); - - -HTTPHeaderOutputStream::HTTPHeaderOutputStream(HTTPSession& session): - HTTPHeaderIOS(session, std::ios::out), - std::ostream(&_buf) -{ -} - - -HTTPHeaderOutputStream::~HTTPHeaderOutputStream() -{ -} - - -void* HTTPHeaderOutputStream::operator new(std::size_t size) -{ - return _pool.get(); -} - - -void HTTPHeaderOutputStream::operator delete(void* ptr) -{ - try - { - _pool.release(ptr); - } - catch (...) - { - poco_unexpected(); - } -} - - -} } // namespace Poco::Net diff --git a/contrib/libpoco/Net/src/HTTPIOStream.cpp b/contrib/libpoco/Net/src/HTTPIOStream.cpp deleted file mode 100644 index eb0b3f120de..00000000000 --- a/contrib/libpoco/Net/src/HTTPIOStream.cpp +++ /dev/null @@ -1,67 +0,0 @@ -// -// HTTPIOStream.cpp -// -// $Id: //poco/Main/template/class.cpp#5 $ -// -// Library: Net -// Package: HTTP -// Module: HTTPIOStream -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "Poco/Net/HTTPIOStream.h" -#include "Poco/Net/HTTPClientSession.h" - - -using Poco::UnbufferedStreamBuf; - - -namespace Poco { -namespace Net { - - -HTTPResponseStreamBuf::HTTPResponseStreamBuf(std::istream& istr): - _istr(istr) -{ - // make sure exceptions from underlying string propagate - _istr.exceptions(std::ios::badbit); -} - - -HTTPResponseStreamBuf::~HTTPResponseStreamBuf() -{ -} - - -HTTPResponseIOS::HTTPResponseIOS(std::istream& istr): - _buf(istr) -{ - poco_ios_init(&_buf); -} - - -HTTPResponseIOS::~HTTPResponseIOS() -{ -} - - -HTTPResponseStream::HTTPResponseStream(std::istream& istr, HTTPClientSession* pSession): - HTTPResponseIOS(istr), - std::istream(&_buf), - _pSession(pSession) -{ -} - - -HTTPResponseStream::~HTTPResponseStream() -{ - delete _pSession; -} - - -} } // namespace Poco::Net diff --git a/contrib/libpoco/Net/src/HTTPMessage.cpp b/contrib/libpoco/Net/src/HTTPMessage.cpp deleted file mode 100644 index 1d81ea610d6..00000000000 --- a/contrib/libpoco/Net/src/HTTPMessage.cpp +++ /dev/null @@ -1,186 +0,0 @@ -// -// HTTPMessage.cpp -// -// $Id: //poco/1.4/Net/src/HTTPMessage.cpp#4 $ -// -// Library: Net -// Package: HTTP -// Module: HTTPMessage -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "Poco/Net/HTTPMessage.h" -#include "Poco/Net/MediaType.h" -#include "Poco/NumberFormatter.h" -#include "Poco/NumberParser.h" -#include "Poco/String.h" - - -using Poco::NumberFormatter; -using Poco::NumberParser; -using Poco::icompare; - - -namespace Poco { -namespace Net { - - -const std::string HTTPMessage::HTTP_1_0 = "HTTP/1.0"; -const std::string HTTPMessage::HTTP_1_1 = "HTTP/1.1"; -const std::string HTTPMessage::IDENTITY_TRANSFER_ENCODING = "identity"; -const std::string HTTPMessage::CHUNKED_TRANSFER_ENCODING = "chunked"; -const int HTTPMessage::UNKNOWN_CONTENT_LENGTH = -1; -const std::string HTTPMessage::UNKNOWN_CONTENT_TYPE; -const std::string HTTPMessage::CONTENT_LENGTH = "Content-Length"; -const std::string HTTPMessage::CONTENT_TYPE = "Content-Type"; -const std::string HTTPMessage::TRANSFER_ENCODING = "Transfer-Encoding"; -const std::string HTTPMessage::CONNECTION = "Connection"; -const std::string HTTPMessage::CONNECTION_KEEP_ALIVE = "Keep-Alive"; -const std::string HTTPMessage::CONNECTION_CLOSE = "Close"; -const std::string HTTPMessage::EMPTY; - - -HTTPMessage::HTTPMessage(): - _version(HTTP_1_0) -{ -} - - -HTTPMessage::HTTPMessage(const std::string& version): - _version(version) -{ -} - - -HTTPMessage::~HTTPMessage() -{ -} - - -void HTTPMessage::setVersion(const std::string& version) -{ - _version = version; -} - - -void HTTPMessage::setContentLength(std::streamsize length) -{ - if (length != UNKNOWN_CONTENT_LENGTH) - set(CONTENT_LENGTH, NumberFormatter::format(length)); - else - erase(CONTENT_LENGTH); -} - - -std::streamsize HTTPMessage::getContentLength() const -{ - const std::string& contentLength = get(CONTENT_LENGTH, EMPTY); - if (!contentLength.empty()) - { - if (sizeof(std::streamsize) == sizeof(Poco::Int64)) - return static_cast(NumberParser::parse64(contentLength)); - else - return static_cast(NumberParser::parse(contentLength)); - } - else return UNKNOWN_CONTENT_LENGTH; -} - - -#if defined(POCO_HAVE_INT64) -void HTTPMessage::setContentLength64(Poco::Int64 length) -{ - if (length != UNKNOWN_CONTENT_LENGTH) - set(CONTENT_LENGTH, NumberFormatter::format(length)); - else - erase(CONTENT_LENGTH); -} - - -Poco::Int64 HTTPMessage::getContentLength64() const -{ - const std::string& contentLength = get(CONTENT_LENGTH, EMPTY); - if (!contentLength.empty()) - { - return NumberParser::parse64(contentLength); - } - else return UNKNOWN_CONTENT_LENGTH; -} -#endif // defined(POCO_HAVE_INT64) - - -void HTTPMessage::setTransferEncoding(const std::string& transferEncoding) -{ - if (icompare(transferEncoding, IDENTITY_TRANSFER_ENCODING) == 0) - erase(TRANSFER_ENCODING); - else - set(TRANSFER_ENCODING, transferEncoding); -} - - -const std::string& HTTPMessage::getTransferEncoding() const -{ - return get(TRANSFER_ENCODING, IDENTITY_TRANSFER_ENCODING); -} - - -void HTTPMessage::setChunkedTransferEncoding(bool flag) -{ - if (flag) - setTransferEncoding(CHUNKED_TRANSFER_ENCODING); - else - setTransferEncoding(IDENTITY_TRANSFER_ENCODING); -} - - -bool HTTPMessage::getChunkedTransferEncoding() const -{ - return icompare(getTransferEncoding(), CHUNKED_TRANSFER_ENCODING) == 0; -} - - -void HTTPMessage::setContentType(const std::string& mediaType) -{ - if (mediaType.empty()) - erase(CONTENT_TYPE); - else - set(CONTENT_TYPE, mediaType); -} - - -void HTTPMessage::setContentType(const MediaType& mediaType) -{ - setContentType(mediaType.toString()); -} - - -const std::string& HTTPMessage::getContentType() const -{ - return get(CONTENT_TYPE, UNKNOWN_CONTENT_TYPE); -} - - -void HTTPMessage::setKeepAlive(bool keepAlive) -{ - if (keepAlive) - set(CONNECTION, CONNECTION_KEEP_ALIVE); - else - set(CONNECTION, CONNECTION_CLOSE); -} - - -bool HTTPMessage::getKeepAlive() const -{ - const std::string& connection = get(CONNECTION, EMPTY); - if (!connection.empty()) - return icompare(connection, CONNECTION_CLOSE) != 0; - else - return getVersion() == HTTP_1_1; -} - - -} } // namespace Poco::Net diff --git a/contrib/libpoco/Net/src/HTTPRequest.cpp b/contrib/libpoco/Net/src/HTTPRequest.cpp deleted file mode 100644 index 74d3a582484..00000000000 --- a/contrib/libpoco/Net/src/HTTPRequest.cpp +++ /dev/null @@ -1,261 +0,0 @@ -// -// HTTPRequest.cpp -// -// $Id: //poco/1.4/Net/src/HTTPRequest.cpp#4 $ -// -// Library: Net -// Package: HTTP -// Module: HTTPRequest -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "Poco/Net/HTTPRequest.h" -#include "Poco/Net/NetException.h" -#include "Poco/Net/NameValueCollection.h" -#include "Poco/NumberFormatter.h" -#include "Poco/Ascii.h" -#include "Poco/String.h" - - -using Poco::NumberFormatter; - - -namespace Poco { -namespace Net { - - -const std::string HTTPRequest::HTTP_GET = "GET"; -const std::string HTTPRequest::HTTP_HEAD = "HEAD"; -const std::string HTTPRequest::HTTP_PUT = "PUT"; -const std::string HTTPRequest::HTTP_POST = "POST"; -const std::string HTTPRequest::HTTP_OPTIONS = "OPTIONS"; -const std::string HTTPRequest::HTTP_DELETE = "DELETE"; -const std::string HTTPRequest::HTTP_TRACE = "TRACE"; -const std::string HTTPRequest::HTTP_CONNECT = "CONNECT"; -const std::string HTTPRequest::HOST = "Host"; -const std::string HTTPRequest::COOKIE = "Cookie"; -const std::string HTTPRequest::AUTHORIZATION = "Authorization"; -const std::string HTTPRequest::PROXY_AUTHORIZATION = "Proxy-Authorization"; -const std::string HTTPRequest::UPGRADE = "Upgrade"; - - -HTTPRequest::HTTPRequest(): - _method(HTTP_GET), - _uri("/") -{ -} - - -HTTPRequest::HTTPRequest(const std::string& version): - HTTPMessage(version), - _method(HTTP_GET), - _uri("/") -{ -} - - -HTTPRequest::HTTPRequest(const std::string& method, const std::string& uri): - _method(method), - _uri(uri) -{ -} - - -HTTPRequest::HTTPRequest(const std::string& method, const std::string& uri, const std::string& version): - HTTPMessage(version), - _method(method), - _uri(uri) -{ -} - - -HTTPRequest::~HTTPRequest() -{ -} - - -void HTTPRequest::setMethod(const std::string& method) -{ - _method = method; -} - - -void HTTPRequest::setURI(const std::string& uri) -{ - _uri = uri; -} - - -void HTTPRequest::setHost(const std::string& host) -{ - set(HOST, host); -} - - -void HTTPRequest::setHost(const std::string& host, Poco::UInt16 port) -{ - std::string value; - if (host.find(':') != std::string::npos) - { - // IPv6 address - value.append("["); - value.append(host); - value.append("]"); - } - else - { - value.append(host); - } - - if (port != 80 && port != 443) - { - value.append(":"); - NumberFormatter::append(value, port); - } - setHost(value); -} - - -const std::string& HTTPRequest::getHost() const -{ - return get(HOST); -} - - -void HTTPRequest::setCookies(const NameValueCollection& cookies) -{ - std::string cookie; - cookie.reserve(64); - for (NameValueCollection::ConstIterator it = cookies.begin(); it != cookies.end(); ++it) - { - if (it != cookies.begin()) - cookie.append("; "); - cookie.append(it->first); - cookie.append("="); - cookie.append(it->second); - } - add(COOKIE, cookie); -} - - -void HTTPRequest::getCookies(NameValueCollection& cookies) const -{ - NameValueCollection::ConstIterator it = find(COOKIE); - while (it != end() && Poco::icompare(it->first, COOKIE) == 0) - { - splitParameters(it->second.begin(), it->second.end(), cookies); - ++it; - } -} - - -bool HTTPRequest::hasCredentials() const -{ - return has(AUTHORIZATION); -} - - -void HTTPRequest::getCredentials(std::string& scheme, std::string& authInfo) const -{ - getCredentials(AUTHORIZATION, scheme, authInfo); -} - - -void HTTPRequest::setCredentials(const std::string& scheme, const std::string& authInfo) -{ - setCredentials(AUTHORIZATION, scheme, authInfo); -} - - -bool HTTPRequest::hasProxyCredentials() const -{ - return has(PROXY_AUTHORIZATION); -} - - -void HTTPRequest::getProxyCredentials(std::string& scheme, std::string& authInfo) const -{ - getCredentials(PROXY_AUTHORIZATION, scheme, authInfo); -} - - -void HTTPRequest::setProxyCredentials(const std::string& scheme, const std::string& authInfo) -{ - setCredentials(PROXY_AUTHORIZATION, scheme, authInfo); -} - - -void HTTPRequest::write(std::ostream& ostr) const -{ - ostr << _method << " " << _uri << " " << getVersion() << "\r\n"; - HTTPMessage::write(ostr); - ostr << "\r\n"; -} - - -void HTTPRequest::read(std::istream& istr) -{ - static const int eof = std::char_traits::eof(); - - std::string method; - std::string uri; - std::string version; - method.reserve(16); - uri.reserve(64); - version.reserve(16); - int ch = istr.get(); - if (istr.bad()) throw NetException("Error reading HTTP request header"); - if (ch == eof) throw NoMessageException(); - while (Poco::Ascii::isSpace(ch)) ch = istr.get(); - if (ch == eof) throw MessageException("No HTTP request header"); - while (!Poco::Ascii::isSpace(ch) && ch != eof && method.length() < MAX_METHOD_LENGTH) { method += (char) ch; ch = istr.get(); } - if (!Poco::Ascii::isSpace(ch)) throw MessageException("HTTP request method invalid or too long"); - while (Poco::Ascii::isSpace(ch)) ch = istr.get(); - while (!Poco::Ascii::isSpace(ch) && ch != eof && uri.length() < MAX_URI_LENGTH) { uri += (char) ch; ch = istr.get(); } - if (!Poco::Ascii::isSpace(ch)) throw MessageException("HTTP request URI invalid or too long"); - while (Poco::Ascii::isSpace(ch)) ch = istr.get(); - while (!Poco::Ascii::isSpace(ch) && ch != eof && version.length() < MAX_VERSION_LENGTH) { version += (char) ch; ch = istr.get(); } - if (!Poco::Ascii::isSpace(ch)) throw MessageException("Invalid HTTP version string"); - while (ch != '\n' && ch != eof) { ch = istr.get(); } - HTTPMessage::read(istr); - ch = istr.get(); - while (ch != '\n' && ch != eof) { ch = istr.get(); } - setMethod(method); - setURI(uri); - setVersion(version); -} - - -void HTTPRequest::getCredentials(const std::string& header, std::string& scheme, std::string& authInfo) const -{ - scheme.clear(); - authInfo.clear(); - if (has(header)) - { - const std::string& auth = get(header); - std::string::const_iterator it = auth.begin(); - std::string::const_iterator end = auth.end(); - while (it != end && Poco::Ascii::isSpace(*it)) ++it; - while (it != end && !Poco::Ascii::isSpace(*it)) scheme += *it++; - while (it != end && Poco::Ascii::isSpace(*it)) ++it; - while (it != end) authInfo += *it++; - } - else throw NotAuthenticatedException(); -} - - -void HTTPRequest::setCredentials(const std::string& header, const std::string& scheme, const std::string& authInfo) -{ - std::string auth(scheme); - auth.append(" "); - auth.append(authInfo); - set(header, auth); -} - - -} } // namespace Poco::Net diff --git a/contrib/libpoco/Net/src/HTTPRequestHandler.cpp b/contrib/libpoco/Net/src/HTTPRequestHandler.cpp deleted file mode 100644 index ca9e7a0c002..00000000000 --- a/contrib/libpoco/Net/src/HTTPRequestHandler.cpp +++ /dev/null @@ -1,34 +0,0 @@ -// -// HTTPRequestHandler.cpp -// -// $Id: //poco/1.4/Net/src/HTTPRequestHandler.cpp#1 $ -// -// Library: Net -// Package: HTTPServer -// Module: HTTPRequestHandler -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "Poco/Net/HTTPRequestHandler.h" - - -namespace Poco { -namespace Net { - - -HTTPRequestHandler::HTTPRequestHandler() -{ -} - - -HTTPRequestHandler::~HTTPRequestHandler() -{ -} - - -} } // namespace Poco::Net diff --git a/contrib/libpoco/Net/src/HTTPRequestHandlerFactory.cpp b/contrib/libpoco/Net/src/HTTPRequestHandlerFactory.cpp deleted file mode 100644 index 342ddcc1a9f..00000000000 --- a/contrib/libpoco/Net/src/HTTPRequestHandlerFactory.cpp +++ /dev/null @@ -1,34 +0,0 @@ -// -// HTTPRequestHandlerFactory.cpp -// -// $Id: //poco/1.4/Net/src/HTTPRequestHandlerFactory.cpp#1 $ -// -// Library: Net -// Package: HTTPServer -// Module: HTTPRequestHandlerFactory -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "Poco/Net/HTTPRequestHandlerFactory.h" - - -namespace Poco { -namespace Net { - - -HTTPRequestHandlerFactory::HTTPRequestHandlerFactory() -{ -} - - -HTTPRequestHandlerFactory::~HTTPRequestHandlerFactory() -{ -} - - -} } // namespace Poco::Net diff --git a/contrib/libpoco/Net/src/HTTPResponse.cpp b/contrib/libpoco/Net/src/HTTPResponse.cpp deleted file mode 100644 index 107dccd4f66..00000000000 --- a/contrib/libpoco/Net/src/HTTPResponse.cpp +++ /dev/null @@ -1,330 +0,0 @@ -// -// HTTPResponse.cpp -// -// $Id: //poco/1.4/Net/src/HTTPResponse.cpp#2 $ -// -// Library: Net -// Package: HTTP -// Module: HTTPResponse -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "Poco/Net/HTTPResponse.h" -#include "Poco/Net/NetException.h" -#include "Poco/NumberFormatter.h" -#include "Poco/NumberParser.h" -#include "Poco/DateTime.h" -#include "Poco/DateTimeFormatter.h" -#include "Poco/DateTimeFormat.h" -#include "Poco/DateTimeParser.h" -#include "Poco/Ascii.h" -#include "Poco/String.h" - - -using Poco::DateTime; -using Poco::NumberFormatter; -using Poco::NumberParser; -using Poco::DateTimeFormatter; -using Poco::DateTimeFormat; -using Poco::DateTimeParser; - - -namespace Poco { -namespace Net { - - -const std::string HTTPResponse::HTTP_REASON_CONTINUE = "Continue"; -const std::string HTTPResponse::HTTP_REASON_SWITCHING_PROTOCOLS = "Switching Protocols"; -const std::string HTTPResponse::HTTP_REASON_OK = "OK"; -const std::string HTTPResponse::HTTP_REASON_CREATED = "Created"; -const std::string HTTPResponse::HTTP_REASON_ACCEPTED = "Accepted"; -const std::string HTTPResponse::HTTP_REASON_NONAUTHORITATIVE = "Non-Authoritative Information"; -const std::string HTTPResponse::HTTP_REASON_NO_CONTENT = "No Content"; -const std::string HTTPResponse::HTTP_REASON_RESET_CONTENT = "Reset Content"; -const std::string HTTPResponse::HTTP_REASON_PARTIAL_CONTENT = "Partial Content"; -const std::string HTTPResponse::HTTP_REASON_MULTIPLE_CHOICES = "Multiple Choices"; -const std::string HTTPResponse::HTTP_REASON_MOVED_PERMANENTLY = "Moved Permanently"; -const std::string HTTPResponse::HTTP_REASON_FOUND = "Found"; -const std::string HTTPResponse::HTTP_REASON_SEE_OTHER = "See Other"; -const std::string HTTPResponse::HTTP_REASON_NOT_MODIFIED = "Not Modified"; -const std::string HTTPResponse::HTTP_REASON_USEPROXY = "Use Proxy"; -const std::string HTTPResponse::HTTP_REASON_TEMPORARY_REDIRECT = "Temporary Redirect"; -const std::string HTTPResponse::HTTP_REASON_BAD_REQUEST = "Bad Request"; -const std::string HTTPResponse::HTTP_REASON_UNAUTHORIZED = "Unauthorized"; -const std::string HTTPResponse::HTTP_REASON_PAYMENT_REQUIRED = "Payment Required"; -const std::string HTTPResponse::HTTP_REASON_FORBIDDEN = "Forbidden"; -const std::string HTTPResponse::HTTP_REASON_NOT_FOUND = "Not Found"; -const std::string HTTPResponse::HTTP_REASON_METHOD_NOT_ALLOWED = "Method Not Allowed"; -const std::string HTTPResponse::HTTP_REASON_NOT_ACCEPTABLE = "Not Acceptable"; -const std::string HTTPResponse::HTTP_REASON_PROXY_AUTHENTICATION_REQUIRED = "Proxy Authentication Required"; -const std::string HTTPResponse::HTTP_REASON_REQUEST_TIMEOUT = "Request Time-out"; -const std::string HTTPResponse::HTTP_REASON_CONFLICT = "Conflict"; -const std::string HTTPResponse::HTTP_REASON_GONE = "Gone"; -const std::string HTTPResponse::HTTP_REASON_LENGTH_REQUIRED = "Length Required"; -const std::string HTTPResponse::HTTP_REASON_PRECONDITION_FAILED = "Precondition Failed"; -const std::string HTTPResponse::HTTP_REASON_REQUESTENTITYTOOLARGE = "Request Entity Too Large"; -const std::string HTTPResponse::HTTP_REASON_REQUESTURITOOLONG = "Request-URI Too Large"; -const std::string HTTPResponse::HTTP_REASON_UNSUPPORTEDMEDIATYPE = "Unsupported Media Type"; -const std::string HTTPResponse::HTTP_REASON_REQUESTED_RANGE_NOT_SATISFIABLE = "Requested Range Not Satisfiable"; -const std::string HTTPResponse::HTTP_REASON_EXPECTATION_FAILED = "Expectation Failed"; -const std::string HTTPResponse::HTTP_REASON_INTERNAL_SERVER_ERROR = "Internal Server Error"; -const std::string HTTPResponse::HTTP_REASON_NOT_IMPLEMENTED = "Not Implemented"; -const std::string HTTPResponse::HTTP_REASON_BAD_GATEWAY = "Bad Gateway"; -const std::string HTTPResponse::HTTP_REASON_SERVICE_UNAVAILABLE = "Service Unavailable"; -const std::string HTTPResponse::HTTP_REASON_GATEWAY_TIMEOUT = "Gateway Time-out"; -const std::string HTTPResponse::HTTP_REASON_VERSION_NOT_SUPPORTED = "HTTP Version not supported"; -const std::string HTTPResponse::HTTP_REASON_UNKNOWN = "???"; -const std::string HTTPResponse::DATE = "Date"; -const std::string HTTPResponse::SET_COOKIE = "Set-Cookie"; - - -HTTPResponse::HTTPResponse(): - _status(HTTP_OK), - _reason(getReasonForStatus(HTTP_OK)) -{ -} - - -HTTPResponse::HTTPResponse(HTTPStatus status, const std::string& reason): - _status(status), - _reason(reason) -{ -} - - - -HTTPResponse::HTTPResponse(const std::string& version, HTTPStatus status, const std::string& reason): - HTTPMessage(version), - _status(status), - _reason(reason) -{ -} - - -HTTPResponse::HTTPResponse(HTTPStatus status): - _status(status), - _reason(getReasonForStatus(status)) -{ -} - - -HTTPResponse::HTTPResponse(const std::string& version, HTTPStatus status): - HTTPMessage(version), - _status(status), - _reason(getReasonForStatus(status)) -{ -} - - -HTTPResponse::~HTTPResponse() -{ -} - - -void HTTPResponse::setStatus(HTTPStatus status) -{ - _status = status; -} - - -void HTTPResponse::setStatus(const std::string& status) -{ - setStatus((HTTPStatus) NumberParser::parse(status)); -} - - -void HTTPResponse::setReason(const std::string& reason) -{ - _reason = reason; -} - - -void HTTPResponse::setStatusAndReason(HTTPStatus status, const std::string& reason) -{ - _status = status; - _reason = reason; -} - - -void HTTPResponse::setStatusAndReason(HTTPStatus status) -{ - setStatusAndReason(status, getReasonForStatus(status)); -} - - -void HTTPResponse::setDate(const Poco::Timestamp& dateTime) -{ - set(DATE, DateTimeFormatter::format(dateTime, DateTimeFormat::HTTP_FORMAT)); -} - - -Poco::Timestamp HTTPResponse::getDate() const -{ - const std::string& dateTime = get(DATE); - int tzd; - return DateTimeParser::parse(dateTime, tzd).timestamp(); -} - - -void HTTPResponse::addCookie(const HTTPCookie& cookie) -{ - add(SET_COOKIE, cookie.toString()); -} - - -void HTTPResponse::getCookies(std::vector& cookies) const -{ - cookies.clear(); - NameValueCollection::ConstIterator it = find(SET_COOKIE); - while (it != end() && Poco::icompare(it->first, SET_COOKIE) == 0) - { - NameValueCollection nvc; - splitParameters(it->second.begin(), it->second.end(), nvc); - cookies.push_back(HTTPCookie(nvc)); - ++it; - } -} - - -void HTTPResponse::write(std::ostream& ostr) const -{ - beginWrite(ostr); - ostr << "\r\n"; -} - - -void HTTPResponse::beginWrite(std::ostream& ostr) const -{ - ostr << getVersion() << " " << static_cast(_status) << " " << _reason << "\r\n"; - HTTPMessage::write(ostr); -} - - -void HTTPResponse::read(std::istream& istr) -{ - static const int eof = std::char_traits::eof(); - - std::string version; - std::string status; - std::string reason; - - int ch = istr.get(); - if (istr.bad()) throw NetException("Error reading HTTP response header"); - if (ch == eof) throw NoMessageException(); - while (Poco::Ascii::isSpace(ch)) ch = istr.get(); - if (ch == eof) throw MessageException("No HTTP response header"); - while (!Poco::Ascii::isSpace(ch) && ch != eof && version.length() < MAX_VERSION_LENGTH) { version += (char) ch; ch = istr.get(); } - if (!Poco::Ascii::isSpace(ch)) throw MessageException("Invalid HTTP version string"); - while (Poco::Ascii::isSpace(ch)) ch = istr.get(); - while (!Poco::Ascii::isSpace(ch) && ch != eof && status.length() < MAX_STATUS_LENGTH) { status += (char) ch; ch = istr.get(); } - if (!Poco::Ascii::isSpace(ch)) throw MessageException("Invalid HTTP status code"); - while (Poco::Ascii::isSpace(ch) && ch != '\r' && ch != '\n' && ch != eof) ch = istr.get(); - while (ch != '\r' && ch != '\n' && ch != eof && reason.length() < MAX_REASON_LENGTH) { reason += (char) ch; ch = istr.get(); } - if (!Poco::Ascii::isSpace(ch)) throw MessageException("HTTP reason string too long"); - if (ch == '\r') ch = istr.get(); - - HTTPMessage::read(istr); - ch = istr.get(); - while (ch != '\n' && ch != eof) { ch = istr.get(); } - setVersion(version); - setStatus(status); - setReason(reason); -} - - -const std::string& HTTPResponse::getReasonForStatus(HTTPStatus status) -{ - switch (status) - { - case HTTP_CONTINUE: - return HTTP_REASON_CONTINUE; - case HTTP_SWITCHING_PROTOCOLS: - return HTTP_REASON_SWITCHING_PROTOCOLS; - case HTTP_OK: - return HTTP_REASON_OK; - case HTTP_CREATED: - return HTTP_REASON_CREATED; - case HTTP_ACCEPTED: - return HTTP_REASON_ACCEPTED; - case HTTP_NONAUTHORITATIVE: - return HTTP_REASON_NONAUTHORITATIVE; - case HTTP_NO_CONTENT: - return HTTP_REASON_NO_CONTENT; - case HTTP_RESET_CONTENT: - return HTTP_REASON_RESET_CONTENT; - case HTTP_PARTIAL_CONTENT: - return HTTP_REASON_PARTIAL_CONTENT; - case HTTP_MULTIPLE_CHOICES: - return HTTP_REASON_MULTIPLE_CHOICES; - case HTTP_MOVED_PERMANENTLY: - return HTTP_REASON_MOVED_PERMANENTLY; - case HTTP_FOUND: - return HTTP_REASON_FOUND; - case HTTP_SEE_OTHER: - return HTTP_REASON_SEE_OTHER; - case HTTP_NOT_MODIFIED: - return HTTP_REASON_NOT_MODIFIED; - case HTTP_USEPROXY: - return HTTP_REASON_USEPROXY; - case HTTP_TEMPORARY_REDIRECT: - return HTTP_REASON_TEMPORARY_REDIRECT; - case HTTP_BAD_REQUEST: - return HTTP_REASON_BAD_REQUEST; - case HTTP_UNAUTHORIZED: - return HTTP_REASON_UNAUTHORIZED; - case HTTP_PAYMENT_REQUIRED: - return HTTP_REASON_PAYMENT_REQUIRED; - case HTTP_FORBIDDEN: - return HTTP_REASON_FORBIDDEN; - case HTTP_NOT_FOUND: - return HTTP_REASON_NOT_FOUND; - case HTTP_METHOD_NOT_ALLOWED: - return HTTP_REASON_METHOD_NOT_ALLOWED; - case HTTP_NOT_ACCEPTABLE: - return HTTP_REASON_NOT_ACCEPTABLE; - case HTTP_PROXY_AUTHENTICATION_REQUIRED: - return HTTP_REASON_PROXY_AUTHENTICATION_REQUIRED; - case HTTP_REQUEST_TIMEOUT: - return HTTP_REASON_REQUEST_TIMEOUT; - case HTTP_CONFLICT: - return HTTP_REASON_CONFLICT; - case HTTP_GONE: - return HTTP_REASON_GONE; - case HTTP_LENGTH_REQUIRED: - return HTTP_REASON_LENGTH_REQUIRED; - case HTTP_PRECONDITION_FAILED: - return HTTP_REASON_PRECONDITION_FAILED; - case HTTP_REQUESTENTITYTOOLARGE: - return HTTP_REASON_REQUESTENTITYTOOLARGE; - case HTTP_REQUESTURITOOLONG: - return HTTP_REASON_REQUESTURITOOLONG; - case HTTP_UNSUPPORTEDMEDIATYPE: - return HTTP_REASON_UNSUPPORTEDMEDIATYPE; - case HTTP_REQUESTED_RANGE_NOT_SATISFIABLE: - return HTTP_REASON_REQUESTED_RANGE_NOT_SATISFIABLE; - case HTTP_EXPECTATION_FAILED: - return HTTP_REASON_EXPECTATION_FAILED; - case HTTP_INTERNAL_SERVER_ERROR: - return HTTP_REASON_INTERNAL_SERVER_ERROR; - case HTTP_NOT_IMPLEMENTED: - return HTTP_REASON_NOT_IMPLEMENTED; - case HTTP_BAD_GATEWAY: - return HTTP_REASON_BAD_GATEWAY; - case HTTP_SERVICE_UNAVAILABLE: - return HTTP_REASON_SERVICE_UNAVAILABLE; - case HTTP_GATEWAY_TIMEOUT: - return HTTP_REASON_GATEWAY_TIMEOUT; - case HTTP_VERSION_NOT_SUPPORTED: - return HTTP_REASON_VERSION_NOT_SUPPORTED; - default: - return HTTP_REASON_UNKNOWN; - } -} - - -} } // namespace Poco::Net diff --git a/contrib/libpoco/Net/src/HTTPServer.cpp b/contrib/libpoco/Net/src/HTTPServer.cpp deleted file mode 100644 index ce2b4ec0b44..00000000000 --- a/contrib/libpoco/Net/src/HTTPServer.cpp +++ /dev/null @@ -1,58 +0,0 @@ -// -// HTTPServer.cpp -// -// $Id: //poco/1.4/Net/src/HTTPServer.cpp#1 $ -// -// Library: Net -// Package: HTTPServer -// Module: HTTPServer -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "Poco/Net/HTTPServer.h" -#include "Poco/Net/HTTPServerConnectionFactory.h" - - -namespace Poco { -namespace Net { - - -HTTPServer::HTTPServer(HTTPRequestHandlerFactory::Ptr pFactory, Poco::UInt16 portNumber, HTTPServerParams::Ptr pParams): - TCPServer(new HTTPServerConnectionFactory(pParams, pFactory), portNumber, pParams), - _pFactory(pFactory) -{ -} - - -HTTPServer::HTTPServer(HTTPRequestHandlerFactory::Ptr pFactory, const ServerSocket& socket, HTTPServerParams::Ptr pParams): - TCPServer(new HTTPServerConnectionFactory(pParams, pFactory), socket, pParams), - _pFactory(pFactory) -{ -} - - -HTTPServer::HTTPServer(HTTPRequestHandlerFactory::Ptr pFactory, Poco::ThreadPool& threadPool, const ServerSocket& socket, HTTPServerParams::Ptr pParams): - TCPServer(new HTTPServerConnectionFactory(pParams, pFactory), threadPool, socket, pParams), - _pFactory(pFactory) -{ -} - - -HTTPServer::~HTTPServer() -{ -} - - -void HTTPServer::stopAll(bool abortCurrent) -{ - stop(); - _pFactory->serverStopped(this, abortCurrent); -} - - -} } // namespace Poco::Net diff --git a/contrib/libpoco/Net/src/HTTPServerConnection.cpp b/contrib/libpoco/Net/src/HTTPServerConnection.cpp deleted file mode 100644 index 34b1003815e..00000000000 --- a/contrib/libpoco/Net/src/HTTPServerConnection.cpp +++ /dev/null @@ -1,178 +0,0 @@ -// -// HTTPServerConnection.cpp -// -// $Id: //poco/1.4/Net/src/HTTPServerConnection.cpp#1 $ -// -// Library: Net -// Package: HTTPServer -// Module: HTTPServerConnection -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "Poco/Net/HTTPServerConnection.h" -#include "Poco/Net/HTTPServerSession.h" -#include "Poco/Net/HTTPServerRequestImpl.h" -#include "Poco/Net/HTTPServerResponseImpl.h" -#include "Poco/Net/HTTPRequestHandler.h" -#include "Poco/Net/HTTPRequestHandlerFactory.h" -#include "Poco/Net/NetException.h" -#include "Poco/NumberFormatter.h" -#include "Poco/Timestamp.h" -#include "Poco/Delegate.h" -#include - - -namespace Poco { -namespace Net { - - -HTTPServerConnection::HTTPServerConnection(const StreamSocket& socket, HTTPServerParams::Ptr pParams, HTTPRequestHandlerFactory::Ptr pFactory): - TCPServerConnection(socket), - _pParams(pParams), - _pFactory(pFactory), - _stopped(false) -{ - poco_check_ptr (pFactory); - - _pFactory->serverStopped += Poco::delegate(this, &HTTPServerConnection::onServerStopped); -} - - -HTTPServerConnection::~HTTPServerConnection() -{ - try - { - _pFactory->serverStopped -= Poco::delegate(this, &HTTPServerConnection::onServerStopped); - } - catch (...) - { - poco_unexpected(); - } -} - - -void HTTPServerConnection::run() -{ - std::string server = _pParams->getSoftwareVersion(); - HTTPServerSession session(socket(), _pParams); - while (!_stopped && session.hasMoreRequests()) - { - try - { - Poco::FastMutex::ScopedLock lock(_mutex); - if (!_stopped) - { - HTTPServerResponseImpl response(session); - HTTPServerRequestImpl request(response, session, _pParams); - - Poco::Timestamp now; - response.setDate(now); - response.setVersion(request.getVersion()); - response.setKeepAlive(_pParams->getKeepAlive() && request.getKeepAlive() && session.canKeepAlive()); - if (!server.empty()) - response.set("Server", server); - try - { - std::unique_ptr pHandler(_pFactory->createRequestHandler(request)); - if (pHandler.get()) - { - if (request.expectContinue()) - response.sendContinue(); - - pHandler->handleRequest(request, response); - session.setKeepAlive(_pParams->getKeepAlive() && response.getKeepAlive() && session.canKeepAlive()); - } - else sendErrorResponse(session, HTTPResponse::HTTP_NOT_IMPLEMENTED); - } - catch (Poco::Exception&) - { - if (!response.sent()) - { - try - { - sendErrorResponse(session, HTTPResponse::HTTP_INTERNAL_SERVER_ERROR); - } - catch (...) - { - } - } - throw; - } - } - } - catch (NoMessageException&) - { - break; - } - catch (MessageException&) - { - sendErrorResponse(session, HTTPResponse::HTTP_BAD_REQUEST); - } - catch (Poco::Exception&) - { - if (session.networkException()) - { - session.networkException()->rethrow(); - } - else throw; - } - } -} - - -void HTTPServerConnection::sendErrorResponse(HTTPServerSession& session, HTTPResponse::HTTPStatus status) -{ - HTTPServerResponseImpl response(session); - response.setVersion(HTTPMessage::HTTP_1_1); - response.setStatusAndReason(status); - response.setKeepAlive(false); - response.send(); - session.setKeepAlive(false); -} - - -void HTTPServerConnection::onServerStopped(const bool& abortCurrent) -{ - _stopped = true; - if (abortCurrent) - { - try - { - // Note: On Windows, select() will not return if one of its socket is being - // shut down. Therefore we have to call close(), which works better. - // On other platforms, we do the more graceful thing. -#if defined(_WIN32) - socket().close(); -#else - socket().shutdown(); -#endif - } - catch (...) - { - } - } - else - { - Poco::FastMutex::ScopedLock lock(_mutex); - - try - { -#if defined(_WIN32) - socket().close(); -#else - socket().shutdown(); -#endif - } - catch (...) - { - } - } -} - - -} } // namespace Poco::Net diff --git a/contrib/libpoco/Net/src/HTTPServerConnectionFactory.cpp b/contrib/libpoco/Net/src/HTTPServerConnectionFactory.cpp deleted file mode 100644 index a4ce539c79c..00000000000 --- a/contrib/libpoco/Net/src/HTTPServerConnectionFactory.cpp +++ /dev/null @@ -1,45 +0,0 @@ -// -// HTTPServerConnectionFactory.cpp -// -// $Id: //poco/1.4/Net/src/HTTPServerConnectionFactory.cpp#1 $ -// -// Library: Net -// Package: HTTPServer -// Module: HTTPServerConnectionFactory -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "Poco/Net/HTTPServerConnectionFactory.h" -#include "Poco/Net/HTTPServerConnection.h" -#include "Poco/Net/HTTPRequestHandlerFactory.h" - - -namespace Poco { -namespace Net { - - -HTTPServerConnectionFactory::HTTPServerConnectionFactory(HTTPServerParams::Ptr pParams, HTTPRequestHandlerFactory::Ptr pFactory): - _pParams(pParams), - _pFactory(pFactory) -{ - poco_check_ptr (pFactory); -} - - -HTTPServerConnectionFactory::~HTTPServerConnectionFactory() -{ -} - - -TCPServerConnection* HTTPServerConnectionFactory::createConnection(const StreamSocket& socket) -{ - return new HTTPServerConnection(socket, _pParams, _pFactory); -} - - -} } // namespace Poco::Net diff --git a/contrib/libpoco/Net/src/HTTPServerParams.cpp b/contrib/libpoco/Net/src/HTTPServerParams.cpp deleted file mode 100644 index 3db1926bcff..00000000000 --- a/contrib/libpoco/Net/src/HTTPServerParams.cpp +++ /dev/null @@ -1,75 +0,0 @@ -// -// HTTPServerParams.cpp -// -// $Id: //poco/1.4/Net/src/HTTPServerParams.cpp#1 $ -// -// Library: Net -// Package: HTTPServer -// Module: HTTPServerParams -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "Poco/Net/HTTPServerParams.h" - - -namespace Poco { -namespace Net { - - -HTTPServerParams::HTTPServerParams(): - _timeout(60000000), - _keepAlive(true), - _maxKeepAliveRequests(0), - _keepAliveTimeout(15000000) -{ -} - - -HTTPServerParams::~HTTPServerParams() -{ -} - - -void HTTPServerParams::setServerName(const std::string& serverName) -{ - _serverName = serverName; -} - - -void HTTPServerParams::setSoftwareVersion(const std::string& softwareVersion) -{ - _softwareVersion = softwareVersion; -} - - -void HTTPServerParams::setTimeout(const Poco::Timespan& timeout) -{ - _timeout = timeout; -} - - -void HTTPServerParams::setKeepAlive(bool keepAlive) -{ - _keepAlive = keepAlive; -} - - -void HTTPServerParams::setKeepAliveTimeout(const Poco::Timespan& timeout) -{ - _keepAliveTimeout = timeout; -} - - -void HTTPServerParams::setMaxKeepAliveRequests(int maxKeepAliveRequests) -{ - poco_assert (maxKeepAliveRequests >= 0); - _maxKeepAliveRequests = maxKeepAliveRequests; -} - - -} } // namespace Poco::Net diff --git a/contrib/libpoco/Net/src/HTTPServerRequest.cpp b/contrib/libpoco/Net/src/HTTPServerRequest.cpp deleted file mode 100644 index f8bf3eb4df6..00000000000 --- a/contrib/libpoco/Net/src/HTTPServerRequest.cpp +++ /dev/null @@ -1,34 +0,0 @@ -// -// HTTPServerRequest.cpp -// -// $Id: //poco/1.4/Net/src/HTTPServerRequest.cpp#1 $ -// -// Library: Net -// Package: HTTPServer -// Module: HTTPServerRequest -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "Poco/Net/HTTPServerRequest.h" - - -namespace Poco { -namespace Net { - - -HTTPServerRequest::HTTPServerRequest() -{ -} - - -HTTPServerRequest::~HTTPServerRequest() -{ -} - - -} } // namespace Poco::Net diff --git a/contrib/libpoco/Net/src/HTTPServerRequestImpl.cpp b/contrib/libpoco/Net/src/HTTPServerRequestImpl.cpp deleted file mode 100644 index 3ea9e435d52..00000000000 --- a/contrib/libpoco/Net/src/HTTPServerRequestImpl.cpp +++ /dev/null @@ -1,93 +0,0 @@ -// -// HTTPServerRequestImpl.cpp -// -// $Id: //poco/1.4/Net/src/HTTPServerRequestImpl.cpp#1 $ -// -// Library: Net -// Package: HTTPServer -// Module: HTTPServerRequestImpl -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "Poco/Net/HTTPServerRequestImpl.h" -#include "Poco/Net/HTTPServerResponseImpl.h" -#include "Poco/Net/HTTPServerSession.h" -#include "Poco/Net/HTTPHeaderStream.h" -#include "Poco/Net/HTTPStream.h" -#include "Poco/Net/HTTPFixedLengthStream.h" -#include "Poco/Net/HTTPChunkedStream.h" -#include "Poco/Net/HTTPServerParams.h" -#include "Poco/String.h" - - -using Poco::icompare; - - -namespace Poco { -namespace Net { - - -const std::string HTTPServerRequestImpl::EXPECT("Expect"); - - -HTTPServerRequestImpl::HTTPServerRequestImpl(HTTPServerResponseImpl& response, HTTPServerSession& session, HTTPServerParams* pParams): - _response(response), - _session(session), - _pStream(0), - _pParams(pParams, true) -{ - response.attachRequest(this); - - HTTPHeaderInputStream hs(session); - read(hs); - - // Now that we know socket is still connected, obtain addresses - _clientAddress = session.clientAddress(); - _serverAddress = session.serverAddress(); - - if (getChunkedTransferEncoding()) - _pStream = new HTTPChunkedInputStream(session); - else if (hasContentLength()) -#if defined(POCO_HAVE_INT64) - _pStream = new HTTPFixedLengthInputStream(session, getContentLength64()); -#else - _pStream = new HTTPFixedLengthInputStream(session, getContentLength()); -#endif - else if (getMethod() == HTTPRequest::HTTP_GET || getMethod() == HTTPRequest::HTTP_HEAD) - _pStream = new HTTPFixedLengthInputStream(session, 0); - else - _pStream = new HTTPInputStream(session); -} - - -HTTPServerRequestImpl::~HTTPServerRequestImpl() -{ - delete _pStream; -} - - -StreamSocket& HTTPServerRequestImpl::socket() -{ - return _session.socket(); -} - - -StreamSocket HTTPServerRequestImpl::detachSocket() -{ - return _session.detachSocket(); -} - - -bool HTTPServerRequestImpl::expectContinue() const -{ - const std::string& expect = get(EXPECT, EMPTY); - return !expect.empty() && icompare(expect, "100-continue") == 0; -} - - -} } // namespace Poco::Net diff --git a/contrib/libpoco/Net/src/HTTPServerResponse.cpp b/contrib/libpoco/Net/src/HTTPServerResponse.cpp deleted file mode 100644 index f8f73c4a1cd..00000000000 --- a/contrib/libpoco/Net/src/HTTPServerResponse.cpp +++ /dev/null @@ -1,34 +0,0 @@ -// -// HTTPServerResponse.cpp -// -// $Id: //poco/1.4/Net/src/HTTPServerResponse.cpp#1 $ -// -// Library: Net -// Package: HTTPServer -// Module: HTTPServerResponse -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "Poco/Net/HTTPServerResponse.h" - - -namespace Poco { -namespace Net { - - -HTTPServerResponse::HTTPServerResponse() -{ -} - - -HTTPServerResponse::~HTTPServerResponse() -{ -} - - -} } // namespace Poco::Net diff --git a/contrib/libpoco/Net/src/HTTPServerResponseImpl.cpp b/contrib/libpoco/Net/src/HTTPServerResponseImpl.cpp deleted file mode 100644 index de3c0e10807..00000000000 --- a/contrib/libpoco/Net/src/HTTPServerResponseImpl.cpp +++ /dev/null @@ -1,223 +0,0 @@ -// -// HTTPServerResponseImpl.cpp -// -// $Id: //poco/1.4/Net/src/HTTPServerResponseImpl.cpp#2 $ -// -// Library: Net -// Package: HTTPServer -// Module: HTTPServerResponseImpl -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "Poco/Net/HTTPServerResponseImpl.h" -#include "Poco/Net/HTTPServerRequestImpl.h" -#include "Poco/Net/HTTPServerSession.h" -#include "Poco/Net/HTTPHeaderStream.h" -#include "Poco/Net/HTTPStream.h" -#include "Poco/Net/HTTPFixedLengthStream.h" -#include "Poco/Net/HTTPChunkedStream.h" -#include "Poco/File.h" -#include "Poco/Timestamp.h" -#include "Poco/NumberFormatter.h" -#include "Poco/StreamCopier.h" -#include "Poco/CountingStream.h" -#include "Poco/Exception.h" -#include "Poco/FileStream.h" -#include "Poco/DateTimeFormatter.h" -#include "Poco/DateTimeFormat.h" - - -using Poco::File; -using Poco::Timestamp; -using Poco::NumberFormatter; -using Poco::StreamCopier; -using Poco::OpenFileException; -using Poco::DateTimeFormatter; -using Poco::DateTimeFormat; - - -namespace Poco { -namespace Net { - - -HTTPServerResponseImpl::HTTPServerResponseImpl(HTTPServerSession& session): - _session(session), - _pRequest(0), - _pStream(0), - _pHeaderStream(0) -{ -} - - -HTTPServerResponseImpl::~HTTPServerResponseImpl() -{ - if (_pHeaderStream && _pHeaderStream != _pStream) - delete _pHeaderStream; - if (_pStream) - delete _pStream; -} - - -void HTTPServerResponseImpl::sendContinue() -{ - HTTPHeaderOutputStream hs(_session); - hs << getVersion() << " 100 Continue\r\n\r\n"; -} - - -std::ostream& HTTPServerResponseImpl::send() -{ - poco_assert (!_pStream); - - if ((_pRequest && _pRequest->getMethod() == HTTPRequest::HTTP_HEAD) || - getStatus() < 200 || - getStatus() == HTTPResponse::HTTP_NO_CONTENT || - getStatus() == HTTPResponse::HTTP_NOT_MODIFIED) - { - Poco::CountingOutputStream cs; - write(cs); - _pStream = new HTTPFixedLengthOutputStream(_session, cs.chars()); - write(*_pStream); - } - else if (getChunkedTransferEncoding()) - { - HTTPHeaderOutputStream hs(_session); - write(hs); - _pStream = new HTTPChunkedOutputStream(_session); - } - else if (hasContentLength()) - { - Poco::CountingOutputStream cs; - write(cs); -#if defined(POCO_HAVE_INT64) - _pStream = new HTTPFixedLengthOutputStream(_session, getContentLength64() + cs.chars()); -#else - _pStream = new HTTPFixedLengthOutputStream(_session, getContentLength() + cs.chars()); -#endif - write(*_pStream); - } - else - { - _pStream = new HTTPOutputStream(_session); - setKeepAlive(false); - write(*_pStream); - } - return *_pStream; -} - - -std::pair HTTPServerResponseImpl::beginSend() -{ - poco_assert (!_pStream); - poco_assert (!_pHeaderStream); - - // NOTE Code is not exception safe. - - if ((_pRequest && _pRequest->getMethod() == HTTPRequest::HTTP_HEAD) || - getStatus() < 200 || - getStatus() == HTTPResponse::HTTP_NO_CONTENT || - getStatus() == HTTPResponse::HTTP_NOT_MODIFIED) - { - throw Exception("HTTPServerResponse::beginSend is invalid for HEAD request"); - } - else if (getChunkedTransferEncoding()) - { - _pHeaderStream = new HTTPHeaderOutputStream(_session); - beginWrite(*_pHeaderStream); - _pStream = new HTTPChunkedOutputStream(_session); - } - else if (hasContentLength()) - { - throw Exception("HTTPServerResponse::beginSend is invalid for response with Content-Length header"); - } - else - { - _pStream = new HTTPOutputStream(_session); - _pHeaderStream = _pStream; - setKeepAlive(false); - beginWrite(*_pStream); - } - - return std::make_pair(_pHeaderStream, _pStream); -} - - -void HTTPServerResponseImpl::sendFile(const std::string& path, const std::string& mediaType) -{ - poco_assert (!_pStream); - - File f(path); - Timestamp dateTime = f.getLastModified(); - File::FileSize length = f.getSize(); - set("Last-Modified", DateTimeFormatter::format(dateTime, DateTimeFormat::HTTP_FORMAT)); -#if defined(POCO_HAVE_INT64) - setContentLength64(length); -#else - setContentLength(static_cast(length)); -#endif - setContentType(mediaType); - setChunkedTransferEncoding(false); - - Poco::FileInputStream istr(path); - if (istr.good()) - { - _pStream = new HTTPHeaderOutputStream(_session); - write(*_pStream); - if (_pRequest && _pRequest->getMethod() != HTTPRequest::HTTP_HEAD) - { - StreamCopier::copyStream(istr, *_pStream); - } - } - else throw OpenFileException(path); -} - - -void HTTPServerResponseImpl::sendBuffer(const void* pBuffer, std::size_t length) -{ - poco_assert (!_pStream); - - setContentLength(static_cast(length)); - setChunkedTransferEncoding(false); - - _pStream = new HTTPHeaderOutputStream(_session); - write(*_pStream); - if (_pRequest && _pRequest->getMethod() != HTTPRequest::HTTP_HEAD) - { - _pStream->write(static_cast(pBuffer), static_cast(length)); - } -} - - -void HTTPServerResponseImpl::redirect(const std::string& uri, HTTPStatus status) -{ - poco_assert (!_pStream); - - setContentLength(0); - setChunkedTransferEncoding(false); - - setStatusAndReason(status); - set("Location", uri); - - _pStream = new HTTPHeaderOutputStream(_session); - write(*_pStream); -} - - -void HTTPServerResponseImpl::requireAuthentication(const std::string& realm) -{ - poco_assert (!_pStream); - - setStatusAndReason(HTTPResponse::HTTP_UNAUTHORIZED); - std::string auth("Basic realm=\""); - auth.append(realm); - auth.append("\""); - set("WWW-Authenticate", auth); -} - - -} } // namespace Poco::Net diff --git a/contrib/libpoco/Net/src/HTTPServerSession.cpp b/contrib/libpoco/Net/src/HTTPServerSession.cpp deleted file mode 100644 index 2852fa04efa..00000000000 --- a/contrib/libpoco/Net/src/HTTPServerSession.cpp +++ /dev/null @@ -1,72 +0,0 @@ -// -// HTTPServerSession.cpp -// -// $Id: //poco/1.4/Net/src/HTTPServerSession.cpp#1 $ -// -// Library: Net -// Package: HTTPServer -// Module: HTTPServerSession -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "Poco/Net/HTTPServerSession.h" - - -namespace Poco { -namespace Net { - - -HTTPServerSession::HTTPServerSession(const StreamSocket& socket, HTTPServerParams::Ptr pParams): - HTTPSession(socket, pParams->getKeepAlive()), - _firstRequest(true), - _keepAliveTimeout(pParams->getKeepAliveTimeout()), - _maxKeepAliveRequests(pParams->getMaxKeepAliveRequests()) -{ - setTimeout(pParams->getTimeout()); - this->socket().setReceiveTimeout(pParams->getTimeout()); -} - - -HTTPServerSession::~HTTPServerSession() -{ -} - - -bool HTTPServerSession::hasMoreRequests() -{ - if (!socket().impl()->initialized()) return false; - - if (_firstRequest) - { - _firstRequest = false; - --_maxKeepAliveRequests; - return socket().poll(getTimeout(), Socket::SELECT_READ); - } - else if (_maxKeepAliveRequests != 0 && getKeepAlive()) - { - if (_maxKeepAliveRequests > 0) - --_maxKeepAliveRequests; - return buffered() > 0 || socket().poll(_keepAliveTimeout, Socket::SELECT_READ); - } - else return false; -} - - -SocketAddress HTTPServerSession::clientAddress() -{ - return socket().peerAddress(); -} - - -SocketAddress HTTPServerSession::serverAddress() -{ - return socket().address(); -} - - -} } // namespace Poco::Net diff --git a/contrib/libpoco/Net/src/HTTPSession.cpp b/contrib/libpoco/Net/src/HTTPSession.cpp deleted file mode 100644 index df1f4389ff5..00000000000 --- a/contrib/libpoco/Net/src/HTTPSession.cpp +++ /dev/null @@ -1,256 +0,0 @@ -// -// HTTPSession.cpp -// -// $Id: //poco/1.4/Net/src/HTTPSession.cpp#2 $ -// -// Library: Net -// Package: HTTP -// Module: HTTPSession -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "Poco/Net/HTTPSession.h" -#include "Poco/Net/HTTPBufferAllocator.h" -#include "Poco/Net/NetException.h" -#include - - -using Poco::TimeoutException; - - -namespace Poco { -namespace Net { - - -HTTPSession::HTTPSession(): - _pBuffer(0), - _pCurrent(0), - _pEnd(0), - _keepAlive(false), - _connection_timeout(HTTP_DEFAULT_CONNECTION_TIMEOUT), - _receive_timeout(HTTP_DEFAULT_TIMEOUT), - _send_timeout(HTTP_DEFAULT_TIMEOUT), - _pException(0) -{ -} - - -HTTPSession::HTTPSession(const StreamSocket& socket): - _socket(socket), - _pBuffer(0), - _pCurrent(0), - _pEnd(0), - _keepAlive(false), - _connection_timeout(HTTP_DEFAULT_CONNECTION_TIMEOUT), - _receive_timeout(HTTP_DEFAULT_TIMEOUT), - _send_timeout(HTTP_DEFAULT_TIMEOUT), - _pException(0) -{ -} - - -HTTPSession::HTTPSession(const StreamSocket& socket, bool keepAlive): - _socket(socket), - _pBuffer(0), - _pCurrent(0), - _pEnd(0), - _keepAlive(keepAlive), - _connection_timeout(HTTP_DEFAULT_CONNECTION_TIMEOUT), - _receive_timeout(HTTP_DEFAULT_TIMEOUT), - _send_timeout(HTTP_DEFAULT_TIMEOUT), - _pException(0) -{ -} - - -HTTPSession::~HTTPSession() -{ - try - { - if (_pBuffer) HTTPBufferAllocator::deallocate(_pBuffer, HTTPBufferAllocator::BUFFER_SIZE); - } - catch (...) - { - poco_unexpected(); - } - try - { - close(); - } - catch (...) - { - } - delete _pException; -} - - -void HTTPSession::setKeepAlive(bool keepAlive) -{ - _keepAlive = keepAlive; -} - - -void HTTPSession::setTimeout(const Poco::Timespan& timeout) -{ - setTimeout(timeout, timeout, timeout); -} - - -void HTTPSession::setTimeout(const Poco::Timespan& connection_timeout, const Poco::Timespan& send_timeout, const Poco::Timespan& receive_timeout) -{ - _connection_timeout = connection_timeout; - _send_timeout = send_timeout; - _receive_timeout = receive_timeout; -} - - -int HTTPSession::get() -{ - if (_pCurrent == _pEnd) - refill(); - - if (_pCurrent < _pEnd) - return *_pCurrent++; - else - return std::char_traits::eof(); -} - - -int HTTPSession::peek() -{ - if (_pCurrent == _pEnd) - refill(); - - if (_pCurrent < _pEnd) - return *_pCurrent; - else - return std::char_traits::eof(); -} - - -int HTTPSession::read(char* buffer, std::streamsize length) -{ - if (_pCurrent < _pEnd) - { - int n = (int) (_pEnd - _pCurrent); - if (n > length) n = (int) length; - std::memcpy(buffer, _pCurrent, n); - _pCurrent += n; - return n; - } - else return receive(buffer, (int) length); -} - - -int HTTPSession::write(const char* buffer, std::streamsize length) -{ - try - { - return _socket.sendBytes(buffer, (int) length); - } - catch (Poco::Exception& exc) - { - setException(exc); - throw; - } -} - - -int HTTPSession::receive(char* buffer, int length) -{ - try - { - return _socket.receiveBytes(buffer, length); - } - catch (Poco::Exception& exc) - { - setException(exc); - throw; - } -} - - -void HTTPSession::refill() -{ - if (!_pBuffer) - { - _pBuffer = HTTPBufferAllocator::allocate(HTTPBufferAllocator::BUFFER_SIZE); - } - _pCurrent = _pEnd = _pBuffer; - int n = receive(_pBuffer, HTTPBufferAllocator::BUFFER_SIZE); - _pEnd += n; -} - - -bool HTTPSession::connected() const -{ - return _socket.impl()->initialized(); -} - - -void HTTPSession::connect(const SocketAddress& address) -{ - _socket.connect(address, _connection_timeout); - _socket.setReceiveTimeout(_receive_timeout); - _socket.setSendTimeout(_send_timeout); - _socket.setNoDelay(true); - // There may be leftover data from a previous (failed) request in the buffer, - // so we clear it. - _pCurrent = _pEnd = _pBuffer; -} - - -void HTTPSession::abort() -{ - _socket.shutdown(); - close(); -} - - -void HTTPSession::close() -{ - _socket.close(); -} - - -void HTTPSession::setException(const Poco::Exception& exc) -{ - delete _pException; - _pException = exc.clone(); -} - - -void HTTPSession::clearException() -{ - delete _pException; - _pException = 0; -} - - -StreamSocket HTTPSession::detachSocket() -{ - StreamSocket oldSocket(_socket); - StreamSocket newSocket; - _socket = newSocket; - return oldSocket; -} - - -void HTTPSession::attachSocket(const StreamSocket& socket) -{ - _socket = socket; -} - - -void HTTPSession::attachSessionData(const Poco::Any& data) -{ - _data = data; -} - - -} } // namespace Poco::Net diff --git a/contrib/libpoco/Net/src/HTTPSessionFactory.cpp b/contrib/libpoco/Net/src/HTTPSessionFactory.cpp deleted file mode 100644 index 0e77f454994..00000000000 --- a/contrib/libpoco/Net/src/HTTPSessionFactory.cpp +++ /dev/null @@ -1,148 +0,0 @@ -// -// HTTPSessionFactory.cpp -// -// $Id: //poco/1.4/Net/src/HTTPSessionFactory.cpp#1 $ -// -// Library: Net -// Package: HTTPClient -// Module: HTTPSessionFactory -// -// Copyright (c) 2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "Poco/Net/HTTPSessionFactory.h" -#include "Poco/Net/HTTPSessionInstantiator.h" -#include "Poco/Exception.h" - - -using Poco::SingletonHolder; -using Poco::FastMutex; -using Poco::NotFoundException; -using Poco::ExistsException; - - -namespace Poco { -namespace Net { - - -HTTPSessionFactory::HTTPSessionFactory(): - _proxyPort(0) -{ -} - - -HTTPSessionFactory::HTTPSessionFactory(const std::string& proxyHost, Poco::UInt16 proxyPort): - _proxyHost(proxyHost), - _proxyPort(proxyPort) -{ -} - - -HTTPSessionFactory::~HTTPSessionFactory() -{ - for (Instantiators::iterator it = _instantiators.begin(); it != _instantiators.end(); ++it) - { - delete it->second.pIn; - } -} - - -void HTTPSessionFactory::registerProtocol(const std::string& protocol, HTTPSessionInstantiator* pSessionInstantiator) -{ - poco_assert_dbg(pSessionInstantiator); - - FastMutex::ScopedLock lock(_mutex); - std::pair tmp = _instantiators.insert(make_pair(protocol, InstantiatorInfo(pSessionInstantiator))); - if (!tmp.second) - { - ++tmp.first->second.cnt; - delete pSessionInstantiator; - } -} - - -void HTTPSessionFactory::unregisterProtocol(const std::string& protocol) -{ - FastMutex::ScopedLock lock(_mutex); - - Instantiators::iterator it = _instantiators.find(protocol); - if (it != _instantiators.end()) - { - if (it->second.cnt == 1) - { - delete it->second.pIn; - _instantiators.erase(it); - } - else --it->second.cnt; - } - else throw NotFoundException("No HTTPSessionInstantiator registered for", protocol); -} - - -bool HTTPSessionFactory::supportsProtocol(const std::string& protocol) -{ - FastMutex::ScopedLock lock(_mutex); - - Instantiators::iterator it = _instantiators.find(protocol); - return it != _instantiators.end(); -} - - -HTTPClientSession* HTTPSessionFactory::createClientSession(const Poco::URI& uri) -{ - FastMutex::ScopedLock lock(_mutex); - - if (uri.isRelative()) throw Poco::UnknownURISchemeException("Relative URIs are not supported by HTTPSessionFactory."); - - Instantiators::iterator it = _instantiators.find(uri.getScheme()); - if (it != _instantiators.end()) - { - it->second.pIn->setProxy(_proxyHost, _proxyPort); - it->second.pIn->setProxyCredentials(_proxyUsername, _proxyPassword); - return it->second.pIn->createClientSession(uri); - } - else throw Poco::UnknownURISchemeException(uri.getScheme()); -} - - -void HTTPSessionFactory::setProxy(const std::string& host, Poco::UInt16 port) -{ - FastMutex::ScopedLock lock(_mutex); - - _proxyHost = host; - _proxyPort = port; -} - - -void HTTPSessionFactory::setProxyCredentials(const std::string& username, const std::string& password) -{ - FastMutex::ScopedLock lock(_mutex); - - _proxyUsername = username; - _proxyPassword = password; -} - - -namespace -{ - static SingletonHolder singleton; -} - - -HTTPSessionFactory& HTTPSessionFactory::defaultFactory() -{ - return *singleton.get(); -} - - -HTTPSessionFactory::InstantiatorInfo::InstantiatorInfo(HTTPSessionInstantiator* pInst): pIn(pInst), cnt(1) -{ - poco_check_ptr (pIn); -} - - -} } // namespace Poco::Net diff --git a/contrib/libpoco/Net/src/HTTPSessionInstantiator.cpp b/contrib/libpoco/Net/src/HTTPSessionInstantiator.cpp deleted file mode 100644 index e7c272281b5..00000000000 --- a/contrib/libpoco/Net/src/HTTPSessionInstantiator.cpp +++ /dev/null @@ -1,76 +0,0 @@ -// -// HTTPSessionInstantiator.cpp -// -// $Id: //poco/1.4/Net/src/HTTPSessionInstantiator.cpp#1 $ -// -// Library: Net -// Package: HTTPClient -// Module: HTTPSessionInstantiator -// -// Copyright (c) 2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "Poco/Net/HTTPSessionInstantiator.h" -#include "Poco/Net/HTTPSessionFactory.h" -#include "Poco/Net/HTTPClientSession.h" - - -using Poco::URI; - - -namespace Poco { -namespace Net { - - -HTTPSessionInstantiator::HTTPSessionInstantiator(): - _proxyPort(0) -{ -} - - -HTTPSessionInstantiator::~HTTPSessionInstantiator() -{ -} - - -HTTPClientSession* HTTPSessionInstantiator::createClientSession(const Poco::URI& uri) -{ - poco_assert (uri.getScheme() == "http"); - HTTPClientSession* pSession = new HTTPClientSession(uri.getHost(), uri.getPort()); - pSession->setProxy(proxyHost(), proxyPort()); - pSession->setProxyCredentials(proxyUsername(), proxyPassword()); - return pSession; -} - - -void HTTPSessionInstantiator::registerInstantiator() -{ - HTTPSessionFactory::defaultFactory().registerProtocol("http", new HTTPSessionInstantiator); -} - - -void HTTPSessionInstantiator::unregisterInstantiator() -{ - HTTPSessionFactory::defaultFactory().unregisterProtocol("http"); -} - - -void HTTPSessionInstantiator::setProxy(const std::string& host, Poco::UInt16 port) -{ - _proxyHost = host; - _proxyPort = port; -} - - -void HTTPSessionInstantiator::setProxyCredentials(const std::string& username, const std::string& password) -{ - _proxyUsername = username; - _proxyPassword = password; -} - - -} } // namespace Poco::Net diff --git a/contrib/libpoco/Net/src/HTTPStream.cpp b/contrib/libpoco/Net/src/HTTPStream.cpp deleted file mode 100644 index 55a106683e4..00000000000 --- a/contrib/libpoco/Net/src/HTTPStream.cpp +++ /dev/null @@ -1,174 +0,0 @@ -// -// HTTPStream.cpp -// -// $Id: //poco/1.4/Net/src/HTTPStream.cpp#1 $ -// -// Library: Net -// Package: HTTP -// Module: HTTPStream -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "Poco/Net/HTTPStream.h" -#include "Poco/Net/HTTPSession.h" - - -namespace Poco { -namespace Net { - - -// -// HTTPStreamBuf -// - - -HTTPStreamBuf::HTTPStreamBuf(HTTPSession& session, openmode mode): - HTTPBasicStreamBuf(HTTPBufferAllocator::BUFFER_SIZE, mode), - _session(session), - _mode(mode) -{ -} - - -HTTPStreamBuf::~HTTPStreamBuf() -{ -} - - -void HTTPStreamBuf::close() -{ - if (_mode & std::ios::out) - { - sync(); - _session.socket().shutdownSend(); - } -} - - -int HTTPStreamBuf::readFromDevice(char* buffer, std::streamsize length) -{ - return _session.read(buffer, length); -} - - -int HTTPStreamBuf::writeToDevice(const char* buffer, std::streamsize length) -{ - - return _session.write(buffer, length); -} - - -// -// HTTPIOS -// - - -HTTPIOS::HTTPIOS(HTTPSession& session, HTTPStreamBuf::openmode mode): - _buf(session, mode) -{ - poco_ios_init(&_buf); -} - - -HTTPIOS::~HTTPIOS() -{ - try - { - _buf.close(); - } - catch (...) - { - } -} - - -HTTPStreamBuf* HTTPIOS::rdbuf() -{ - return &_buf; -} - - -// -// HTTPInputStream -// - - -Poco::MemoryPool HTTPInputStream::_pool(sizeof(HTTPInputStream)); - - -HTTPInputStream::HTTPInputStream(HTTPSession& session): - HTTPIOS(session, std::ios::in), - std::istream(&_buf) -{ -} - - -HTTPInputStream::~HTTPInputStream() -{ -} - - -void* HTTPInputStream::operator new(std::size_t size) -{ - return _pool.get(); -} - - -void HTTPInputStream::operator delete(void* ptr) -{ - try - { - _pool.release(ptr); - } - catch (...) - { - poco_unexpected(); - } -} - - -// -// HTTPOutputStream -// - - -Poco::MemoryPool HTTPOutputStream::_pool(sizeof(HTTPOutputStream)); - - -HTTPOutputStream::HTTPOutputStream(HTTPSession& session): - HTTPIOS(session, std::ios::out), - std::ostream(&_buf) -{ -} - - -HTTPOutputStream::~HTTPOutputStream() -{ -} - - -void* HTTPOutputStream::operator new(std::size_t size) -{ - return _pool.get(); -} - - -void HTTPOutputStream::operator delete(void* ptr) -{ - try - { - _pool.release(ptr); - } - catch (...) - { - poco_unexpected(); - } -} - - -} } // namespace Poco::Net diff --git a/contrib/libpoco/Net/src/HTTPStreamFactory.cpp b/contrib/libpoco/Net/src/HTTPStreamFactory.cpp deleted file mode 100644 index a7b14ce3121..00000000000 --- a/contrib/libpoco/Net/src/HTTPStreamFactory.cpp +++ /dev/null @@ -1,181 +0,0 @@ -// -// HTTPStreamFactory.cpp -// -// $Id: //poco/1.4/Net/src/HTTPStreamFactory.cpp#2 $ -// -// Library: Net -// Package: HTTP -// Module: HTTPStreamFactory -// -// Copyright (c) 2005-2012, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "Poco/Net/HTTPStreamFactory.h" -#include "Poco/Net/HTTPClientSession.h" -#include "Poco/Net/HTTPIOStream.h" -#include "Poco/Net/HTTPRequest.h" -#include "Poco/Net/HTTPResponse.h" -#include "Poco/Net/HTTPCredentials.h" -#include "Poco/Net/NetException.h" -#include "Poco/URI.h" -#include "Poco/URIStreamOpener.h" -#include "Poco/UnbufferedStreamBuf.h" -#include "Poco/NullStream.h" -#include "Poco/StreamCopier.h" - - -using Poco::URIStreamFactory; -using Poco::URI; -using Poco::URIStreamOpener; -using Poco::UnbufferedStreamBuf; - - -namespace Poco { -namespace Net { - - -HTTPStreamFactory::HTTPStreamFactory(): - _proxyPort(HTTPSession::HTTP_PORT) -{ -} - - -HTTPStreamFactory::HTTPStreamFactory(const std::string& proxyHost, Poco::UInt16 proxyPort): - _proxyHost(proxyHost), - _proxyPort(proxyPort) -{ -} - - -HTTPStreamFactory::HTTPStreamFactory(const std::string& proxyHost, Poco::UInt16 proxyPort, const std::string& proxyUsername, const std::string& proxyPassword): - _proxyHost(proxyHost), - _proxyPort(proxyPort), - _proxyUsername(proxyUsername), - _proxyPassword(proxyPassword) -{ -} - - -HTTPStreamFactory::~HTTPStreamFactory() -{ -} - - -std::istream* HTTPStreamFactory::open(const URI& uri) -{ - poco_assert (uri.getScheme() == "http"); - - URI resolvedURI(uri); - URI proxyUri; - HTTPClientSession* pSession = 0; - HTTPResponse res; - bool retry = false; - bool authorize = false; - std::string username; - std::string password; - - try - { - do - { - if (!pSession) - { - pSession = new HTTPClientSession(resolvedURI.getHost(), resolvedURI.getPort()); - - if (proxyUri.empty()) - { - if (!_proxyHost.empty()) - { - pSession->setProxy(_proxyHost, _proxyPort); - pSession->setProxyCredentials(_proxyUsername, _proxyPassword); - } - } - else - { - pSession->setProxy(proxyUri.getHost(), proxyUri.getPort()); - if (!_proxyUsername.empty()) - { - pSession->setProxyCredentials(_proxyUsername, _proxyPassword); - } - } - } - - std::string path = resolvedURI.getPathAndQuery(); - if (path.empty()) path = "/"; - HTTPRequest req(HTTPRequest::HTTP_GET, path, HTTPMessage::HTTP_1_1); - - if (authorize) - { - HTTPCredentials::extractCredentials(uri, username, password); - HTTPCredentials cred(username, password); - cred.authenticate(req, res); - } - - pSession->sendRequest(req); - std::istream& rs = pSession->receiveResponse(res); - bool moved = (res.getStatus() == HTTPResponse::HTTP_MOVED_PERMANENTLY || - res.getStatus() == HTTPResponse::HTTP_FOUND || - res.getStatus() == HTTPResponse::HTTP_SEE_OTHER || - res.getStatus() == HTTPResponse::HTTP_TEMPORARY_REDIRECT); - if (moved) - { - resolvedURI.resolve(res.get("Location")); - if (!username.empty()) - { - resolvedURI.setUserInfo(username + ":" + password); - } - throw URIRedirection(resolvedURI.toString()); - } - else if (res.getStatus() == HTTPResponse::HTTP_OK) - { - return new HTTPResponseStream(rs, pSession); - } - else if (res.getStatus() == HTTPResponse::HTTP_USEPROXY && !retry) - { - // The requested resource MUST be accessed through the proxy - // given by the Location field. The Location field gives the - // URI of the proxy. The recipient is expected to repeat this - // single request via the proxy. 305 responses MUST only be generated by origin servers. - // only use for one single request! - proxyUri.resolve(res.get("Location")); - delete pSession; - pSession = 0; - retry = true; // only allow useproxy once - } - else if (res.getStatus() == HTTPResponse::HTTP_UNAUTHORIZED && !authorize) - { - authorize = true; - retry = true; - Poco::NullOutputStream null; - Poco::StreamCopier::copyStream(rs, null); - } - else throw HTTPException(res.getReason(), uri.toString()); - } - while (retry); - throw HTTPException("Too many redirects", uri.toString()); - } - catch (...) - { - delete pSession; - throw; - } -} - - -void HTTPStreamFactory::registerFactory() -{ - URIStreamOpener::defaultOpener().registerStreamFactory("http", new HTTPStreamFactory); -} - - -void HTTPStreamFactory::unregisterFactory() -{ - URIStreamOpener::defaultOpener().unregisterStreamFactory("http"); -} - - -} } // namespace Poco::Net diff --git a/contrib/libpoco/Net/src/HostEntry.cpp b/contrib/libpoco/Net/src/HostEntry.cpp deleted file mode 100644 index b5a7ffc119f..00000000000 --- a/contrib/libpoco/Net/src/HostEntry.cpp +++ /dev/null @@ -1,137 +0,0 @@ -// -// HostEntry.cpp -// -// $Id: //poco/1.4/Net/src/HostEntry.cpp#7 $ -// -// Library: Net -// Package: NetCore -// Module: HostEntry -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "Poco/Net/HostEntry.h" -#include "Poco/Exception.h" -#include - - -namespace Poco { -namespace Net { - - -HostEntry::HostEntry() -{ -} - - -HostEntry::HostEntry(struct hostent* entry) -{ - poco_check_ptr (entry); - - _name = entry->h_name; - char** alias = entry->h_aliases; - if (alias) - { - while (*alias) - { - _aliases.push_back(std::string(*alias)); - ++alias; - } - } - char** address = entry->h_addr_list; - if (address) - { - while (*address) - { - _addresses.push_back(IPAddress(*address, entry->h_length)); - ++address; - } - } -} - - -#if defined(POCO_HAVE_IPv6) || defined(POCO_HAVE_ADDRINFO) - - -HostEntry::HostEntry(struct addrinfo* ainfo) -{ - poco_check_ptr (ainfo); - - for (struct addrinfo* ai = ainfo; ai; ai = ai->ai_next) - { - if (ai->ai_canonname) - { - _name.assign(ai->ai_canonname); - } - if (ai->ai_addrlen && ai->ai_addr) - { - switch (ai->ai_addr->sa_family) - { - case AF_INET: - _addresses.push_back(IPAddress(&reinterpret_cast(ai->ai_addr)->sin_addr, sizeof(in_addr))); - break; -#if defined(POCO_HAVE_IPv6) - case AF_INET6: - _addresses.push_back(IPAddress(&reinterpret_cast(ai->ai_addr)->sin6_addr, sizeof(in6_addr), reinterpret_cast(ai->ai_addr)->sin6_scope_id)); - break; -#endif - } - } - } -} - - -#endif // POCO_HAVE_IPv6 - - -#if defined(POCO_VXWORKS) - - -HostEntry::HostEntry(const std::string& name, const IPAddress& addr): - _name(name) -{ - _addresses.push_back(addr); -} - - -#endif // POCO_VXWORKS - - -HostEntry::HostEntry(const HostEntry& entry): - _name(entry._name), - _aliases(entry._aliases), - _addresses(entry._addresses) -{ -} - - -HostEntry& HostEntry::operator = (const HostEntry& entry) -{ - if (&entry != this) - { - _name = entry._name; - _aliases = entry._aliases; - _addresses = entry._addresses; - } - return *this; -} - - -void HostEntry::swap(HostEntry& hostEntry) -{ - std::swap(_name, hostEntry._name); - std::swap(_aliases, hostEntry._aliases); - std::swap(_addresses, hostEntry._addresses); -} - - -HostEntry::~HostEntry() -{ -} - - -} } // namespace Poco::Net diff --git a/contrib/libpoco/Net/src/ICMPClient.cpp b/contrib/libpoco/Net/src/ICMPClient.cpp deleted file mode 100644 index a4b66bf106f..00000000000 --- a/contrib/libpoco/Net/src/ICMPClient.cpp +++ /dev/null @@ -1,146 +0,0 @@ -// -// ICMPClient.cpp -// -// $Id: //poco/1.4/Net/src/ICMPClient.cpp#1 $ -// -// Library: Net -// Package: ICMP -// Module: ICMPClient -// -// Copyright (c) 2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "Poco/Net/SocketAddress.h" -#include "Poco/Net/ICMPClient.h" -#include "Poco/Net/ICMPSocket.h" -#include "Poco/Net/NetException.h" -#include "Poco/Channel.h" -#include "Poco/Message.h" -#include "Poco/Exception.h" -#include - - -using Poco::Channel; -using Poco::Message; -using Poco::InvalidArgumentException; -using Poco::NotImplementedException; -using Poco::TimeoutException; -using Poco::Exception; - - -namespace Poco { -namespace Net { - - -ICMPClient::ICMPClient(IPAddress::Family family): - _family(family) -{ -} - - -ICMPClient::~ICMPClient() -{ -} - - -int ICMPClient::ping(const std::string& address, int repeat) const -{ - if (repeat <= 0) return 0; - - SocketAddress addr(address, 0); - return ping(addr, repeat); -} - - -int ICMPClient::ping(SocketAddress& address, int repeat) const -{ - if (repeat <= 0) return 0; - - ICMPSocket icmpSocket(_family); - SocketAddress returnAddress; - - ICMPEventArgs eventArgs(address, repeat, icmpSocket.dataSize(), icmpSocket.ttl()); - pingBegin.notify(this, eventArgs); - - for (int i = 0; i < repeat; ++i) - { - icmpSocket.sendTo(address); - ++eventArgs; - - try - { - int t = icmpSocket.receiveFrom(returnAddress); - eventArgs.setReplyTime(i, t); - pingReply.notify(this, eventArgs); - } - catch (TimeoutException&) - { - std::ostringstream os; - os << address.host().toString() << ": Request timed out."; - eventArgs.setError(i, os.str()); - pingError.notify(this, eventArgs); - continue; - } - catch (ICMPException& ex) - { - std::ostringstream os; - os << address.host().toString() << ": " << ex.what(); - eventArgs.setError(i, os.str()); - pingError.notify(this, eventArgs); - continue; - } - catch (Exception& ex) - { - std::ostringstream os; - os << ex.displayText(); - eventArgs.setError(i, os.str()); - pingError.notify(this, eventArgs); - continue; - } - } - pingEnd.notify(this, eventArgs); - return eventArgs.received(); -} - - -int ICMPClient::pingIPv4(const std::string& address, int repeat) -{ - if (repeat <= 0) return 0; - - SocketAddress a(address, 0); - return ping(a, IPAddress::IPv4, repeat); -} - - -int ICMPClient::ping(SocketAddress& address, IPAddress::Family family, int repeat) -{ - if (repeat <= 0) return 0; - - ICMPSocket icmpSocket(family); - SocketAddress returnAddress; - int received = 0; - - for (int i = 0; i < repeat; ++i) - { - icmpSocket.sendTo(address); - try - { - icmpSocket.receiveFrom(returnAddress); - ++received; - } - catch (TimeoutException&) - { - } - catch (ICMPException&) - { - } - } - return received; -} - - -} } // namespace Poco::Net diff --git a/contrib/libpoco/Net/src/ICMPEventArgs.cpp b/contrib/libpoco/Net/src/ICMPEventArgs.cpp deleted file mode 100644 index f61190cc645..00000000000 --- a/contrib/libpoco/Net/src/ICMPEventArgs.cpp +++ /dev/null @@ -1,170 +0,0 @@ -// -// ICMPEventArgs.cpp -// -// $Id: //poco/1.4/Net/src/ICMPEventArgs.cpp#1 $ -// -// Library: Net -// Package: ICMP -// Module: ICMPEventArgs -// -// Implementation of ICMPEventArgs -// -// Copyright (c) 2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "Poco/Net/ICMPEventArgs.h" -#include "Poco/Net/SocketAddress.h" -#include "Poco/Net/DNS.h" -#include "Poco/Exception.h" -#include "Poco/Net/NetException.h" -#include - - -using Poco::IOException; -using Poco::InvalidArgumentException; - - -namespace Poco { -namespace Net { - - -ICMPEventArgs::ICMPEventArgs(const SocketAddress& address, int repetitions, int dataSize, int ttl): - _address(address), - _sent(0), - _dataSize(dataSize), - _ttl(ttl), - _rtt(repetitions, 0), - _errors(repetitions) -{ -} - - -ICMPEventArgs::~ICMPEventArgs() -{ -} - - -std::string ICMPEventArgs::hostName() const -{ - try - { - return DNS::resolve(_address.host().toString()).name(); - } - catch (HostNotFoundException&) - { - } - catch (NoAddressFoundException&) - { - } - catch (DNSException&) - { - } - catch (IOException&) - { - } - return _address.host().toString(); -} - - -std::string ICMPEventArgs::hostAddress() const -{ - return _address.host().toString(); -} - - -void ICMPEventArgs::setRepetitions(int repetitions) -{ - _rtt.clear(); - _rtt.resize(repetitions, 0); - _errors.assign(repetitions, ""); -} - - -ICMPEventArgs& ICMPEventArgs::operator ++ () -{ - ++_sent; - return *this; -} - - -ICMPEventArgs ICMPEventArgs::operator ++ (int) -{ - ICMPEventArgs prev(*this); - operator ++ (); - return prev; -} - - -int ICMPEventArgs::received() const -{ - int received = 0; - - for (unsigned i = 0; i < _rtt.size(); ++i) - { - if (_rtt[i]) ++received; - } - return received; -} - - -void ICMPEventArgs::setError(int index, const std::string& text) -{ - if ((size_t)index >= _errors.size()) - throw InvalidArgumentException("Supplied index exceeds vector capacity."); - - _errors[index] = text; -} - - -const std::string& ICMPEventArgs::error(int index) const -{ - if (0 == _errors.size()) - throw InvalidArgumentException("Supplied index exceeds vector capacity."); - - if (-1 == index) index = _sent - 1; - - return _errors[index]; -} - - -void ICMPEventArgs::setReplyTime(int index, int time) -{ - if ((size_t)index >= _rtt.size()) - throw InvalidArgumentException("Supplied index exceeds array capacity."); - if (0 == time) time = 1; - _rtt[index] = time; -} - - -int ICMPEventArgs::replyTime(int index) const -{ - if (0 == _rtt.size()) - throw InvalidArgumentException("Supplied index exceeds array capacity."); - - if (-1 == index) index = _sent - 1; - - return _rtt[index]; -} - - -int ICMPEventArgs::avgRTT() const -{ - if (0 == _rtt.size()) return 0; - - return (int) (std::accumulate(_rtt.begin(), _rtt.end(), 0) / _rtt.size()); -} - - -float ICMPEventArgs::percent() const -{ - if (0 == _rtt.size()) return 0; - - return ((float) received() / (float) _rtt.size()) * (float) 100.0; -} - - -} } // namespace Poco::Net diff --git a/contrib/libpoco/Net/src/ICMPPacket.cpp b/contrib/libpoco/Net/src/ICMPPacket.cpp deleted file mode 100644 index 96819493a58..00000000000 --- a/contrib/libpoco/Net/src/ICMPPacket.cpp +++ /dev/null @@ -1,112 +0,0 @@ -// -// ICMPPacket.cpp -// -// $Id: //poco/1.4/Net/src/ICMPPacket.cpp#2 $ -// -// Library: Net -// Package: ICMP -// Module: ICMPPacket -// -// Copyright (c) 2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "Poco/Net/ICMPPacket.h" -#include "Poco/Net/ICMPv4PacketImpl.h" -#include "Poco/Net/NetException.h" -#include "Poco/Timestamp.h" -#include "Poco/Timespan.h" -#include "Poco/NumberFormatter.h" -#include - - -using Poco::InvalidArgumentException; -using Poco::NotImplementedException; -using Poco::Timestamp; -using Poco::Timespan; -using Poco::NumberFormatter; -using Poco::UInt8; -using Poco::UInt16; -using Poco::Int32; - - -namespace Poco { -namespace Net { - - -ICMPPacket::ICMPPacket(IPAddress::Family family, int dataSize):_pImpl(0) -{ - if (family == IPAddress::IPv4) - _pImpl = new ICMPv4PacketImpl(dataSize); -#if defined(POCO_HAVE_IPv6) - else if (family == IPAddress::IPv6) - throw NotImplementedException("ICMPv6 packets not implemented."); -#endif - else throw InvalidArgumentException("Invalid or unsupported address family passed to ICMPPacket"); -} - - -ICMPPacket::~ICMPPacket() -{ - delete _pImpl; -} - - -void ICMPPacket::setDataSize(int dataSize) -{ - _pImpl->setDataSize(dataSize); -} - - -int ICMPPacket::getDataSize() const -{ - return _pImpl->getDataSize(); -} - - -int ICMPPacket::packetSize() const -{ - return _pImpl->packetSize(); -} - - -int ICMPPacket::maxPacketSize() const -{ - return _pImpl->maxPacketSize(); -} - - -const Poco::UInt8* ICMPPacket::packet() -{ - return _pImpl->packet(); -} - - -struct timeval ICMPPacket::time(Poco::UInt8* buffer, int length) const -{ - return _pImpl->time(buffer, length); -} - - -bool ICMPPacket::validReplyID(Poco::UInt8* buffer, int length) const -{ - return _pImpl->validReplyID(buffer, length); -} - - -std::string ICMPPacket::errorDescription(Poco::UInt8* buffer, int length) -{ - return _pImpl->errorDescription(buffer, length); -} - - -std::string ICMPPacket::typeDescription(int typeId) -{ - return _pImpl->typeDescription(typeId); -} - - -} } // namespace Poco::Net diff --git a/contrib/libpoco/Net/src/ICMPPacketImpl.cpp b/contrib/libpoco/Net/src/ICMPPacketImpl.cpp deleted file mode 100644 index 3741e2308e4..00000000000 --- a/contrib/libpoco/Net/src/ICMPPacketImpl.cpp +++ /dev/null @@ -1,105 +0,0 @@ -// -// ICMPPacketImpl.cpp -// -// $Id: //poco/1.4/Net/src/ICMPPacketImpl.cpp#2 $ -// -// Library: Net -// Package: ICMP -// Module: ICMPPacketImpl -// -// Copyright (c) 2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "Poco/Net/ICMPPacketImpl.h" -#include "Poco/Net/NetException.h" -#include "Poco/Timestamp.h" -#include "Poco/Timespan.h" -#include "Poco/NumberFormatter.h" -#include - - -using Poco::InvalidArgumentException; -using Poco::Timestamp; -using Poco::Timespan; -using Poco::NumberFormatter; -using Poco::UInt8; -using Poco::UInt16; -using Poco::Int32; - - -namespace Poco { -namespace Net { - - -const UInt16 ICMPPacketImpl::MAX_PACKET_SIZE = 4096; -const UInt16 ICMPPacketImpl::MAX_SEQ_VALUE = 65535; - - -ICMPPacketImpl::ICMPPacketImpl(int dataSize): - _seq(0), - _pPacket(new UInt8[MAX_PACKET_SIZE]), - _dataSize(dataSize) -{ - if (_dataSize > MAX_PACKET_SIZE) - throw InvalidArgumentException("Packet size must be <= " + NumberFormatter::format(MAX_PACKET_SIZE)); -} - - -ICMPPacketImpl::~ICMPPacketImpl() -{ - delete [] _pPacket; -} - - -void ICMPPacketImpl::setDataSize(int dataSize) -{ - _dataSize = dataSize; - initPacket(); -} - - -int ICMPPacketImpl::getDataSize() const -{ - return _dataSize; -} - - -const Poco::UInt8* ICMPPacketImpl::packet(bool init) -{ - if (init) initPacket(); - return _pPacket; -} - - -unsigned short ICMPPacketImpl::checksum(UInt16 *addr, Int32 len) -{ - Int32 nleft = len; - UInt16* w = addr; - UInt16 answer; - Int32 sum = 0; - - while (nleft > 1) - { - sum += *w++; - nleft -= sizeof(UInt16); - } - - if (nleft == 1) - { - UInt16 u = 0; - *(UInt8*) (&u) = *(UInt8*) w; - sum += u; - } - - sum = (sum >> 16) + (sum & 0xffff); - sum += (sum >> 16); - answer = ~sum; - return answer; -} - - -} } // namespace Poco::Net diff --git a/contrib/libpoco/Net/src/ICMPSocket.cpp b/contrib/libpoco/Net/src/ICMPSocket.cpp deleted file mode 100644 index ece9871c3d5..00000000000 --- a/contrib/libpoco/Net/src/ICMPSocket.cpp +++ /dev/null @@ -1,81 +0,0 @@ -// -// ICMPSocket.cpp -// -// $Id: //poco/1.4/Net/src/ICMPSocket.cpp#1 $ -// -// Library: Net -// Package: ICMP -// Module: ICMPSocket -// -// Copyright (c) 2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "Poco/Net/ICMPSocket.h" -#include "Poco/Net/ICMPSocketImpl.h" -#include "Poco/Exception.h" - - -using Poco::InvalidArgumentException; - - -namespace Poco { -namespace Net { - - -ICMPSocket::ICMPSocket(IPAddress::Family family, int dataSize, int ttl, int timeout): - Socket(new ICMPSocketImpl(family, dataSize, ttl, timeout)), - _dataSize(dataSize), - _ttl(ttl), - _timeout(timeout) -{ -} - - -ICMPSocket::ICMPSocket(const Socket& socket): - Socket(socket) -{ - if (!dynamic_cast(impl())) - throw InvalidArgumentException("Cannot assign incompatible socket"); -} - - -ICMPSocket::ICMPSocket(SocketImpl* pImpl): - Socket(pImpl) -{ - if (!dynamic_cast(impl())) - throw InvalidArgumentException("Cannot assign incompatible socket"); -} - - -ICMPSocket::~ICMPSocket() -{ -} - - -ICMPSocket& ICMPSocket::operator = (const Socket& socket) -{ - if (dynamic_cast(socket.impl())) - Socket::operator = (socket); - else - throw InvalidArgumentException("Cannot assign incompatible socket"); - return *this; -} - - -int ICMPSocket::sendTo(const SocketAddress& address, int flags) -{ - return impl()->sendTo(0, 0, address, flags); -} - - -int ICMPSocket::receiveFrom(SocketAddress& address, int flags) -{ - return impl()->receiveFrom(0, 0, address, flags); -} - - -} } // namespace Poco::Net diff --git a/contrib/libpoco/Net/src/ICMPSocketImpl.cpp b/contrib/libpoco/Net/src/ICMPSocketImpl.cpp deleted file mode 100644 index 2deefbaae3c..00000000000 --- a/contrib/libpoco/Net/src/ICMPSocketImpl.cpp +++ /dev/null @@ -1,100 +0,0 @@ -// -// ICMPSocketImpl.cpp -// -// $Id: //poco/1.4/Net/src/ICMPSocketImpl.cpp#1 $ -// -// Library: Net -// Package: ICMP -// Module: ICMPSocketImpl -// -// Copyright (c) 2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "Poco/Net/ICMPSocketImpl.h" -#include "Poco/Net/NetException.h" -#include "Poco/Timespan.h" -#include "Poco/Timestamp.h" -#include "Poco/Exception.h" - - -using Poco::TimeoutException; -using Poco::Timespan; -using Poco::Exception; - - -namespace Poco { -namespace Net { - - -ICMPSocketImpl::ICMPSocketImpl(IPAddress::Family family, int dataSize, int ttl, int timeout): - RawSocketImpl(family, IPPROTO_ICMP), - _icmpPacket(family, dataSize), - _timeout(timeout) -{ - setOption(IPPROTO_IP, IP_TTL, ttl); - setReceiveTimeout(Timespan(timeout)); -} - - -ICMPSocketImpl::~ICMPSocketImpl() -{ -} - - -int ICMPSocketImpl::sendTo(const void*, int, const SocketAddress& address, int flags) -{ - int n = SocketImpl::sendTo(_icmpPacket.packet(), _icmpPacket.packetSize(), address, flags); - return n; -} - - -int ICMPSocketImpl::receiveFrom(void*, int, SocketAddress& address, int flags) -{ - int maxPacketSize = _icmpPacket.maxPacketSize(); - unsigned char* buffer = new unsigned char[maxPacketSize]; - - try - { - Poco::Timestamp ts; - do - { - if (ts.isElapsed(_timeout)) - { - // This guards against a possible DoS attack, where sending - // fake ping responses will cause an endless loop. - throw TimeoutException(); - } - SocketImpl::receiveFrom(buffer, maxPacketSize, address, flags); - } - while (!_icmpPacket.validReplyID(buffer, maxPacketSize)); - } - catch (TimeoutException&) - { - delete [] buffer; - throw; - } - catch (Exception&) - { - std::string err = _icmpPacket.errorDescription(buffer, maxPacketSize); - delete [] buffer; - if (!err.empty()) - throw ICMPException(err); - else - throw; - } - - struct timeval then = _icmpPacket.time(buffer, maxPacketSize); - struct timeval now = _icmpPacket.time(); - - int elapsed = (((now.tv_sec * 1000000) + now.tv_usec) - ((then.tv_sec * 1000000) + then.tv_usec))/1000; - - delete[] buffer; - return elapsed; -} - - -} } // namespace Poco::Net diff --git a/contrib/libpoco/Net/src/ICMPv4PacketImpl.cpp b/contrib/libpoco/Net/src/ICMPv4PacketImpl.cpp deleted file mode 100644 index b2083a3ece5..00000000000 --- a/contrib/libpoco/Net/src/ICMPv4PacketImpl.cpp +++ /dev/null @@ -1,265 +0,0 @@ -// -// ICMPv4PacketImpl.cpp -// -// $Id: //poco/1.4/Net/src/ICMPv4PacketImpl.cpp#2 $ -// -// Library: Net -// Package: ICMP -// Module: ICMPv4PacketImpl -// -// Copyright (c) 2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "Poco/Net/ICMPv4PacketImpl.h" -#include "Poco/Net/NetException.h" -#include "Poco/Timestamp.h" -#include "Poco/Timespan.h" -#include "Poco/NumberFormatter.h" -#if !defined(POCO_VXWORKS) -#include "Poco/Process.h" -#endif -#include - - -using Poco::InvalidArgumentException; -using Poco::Timestamp; -using Poco::Timespan; -using Poco::NumberFormatter; -using Poco::UInt8; -using Poco::UInt16; -using Poco::Int32; - - -namespace Poco { -namespace Net { - - -const UInt8 ICMPv4PacketImpl::DESTINATION_UNREACHABLE_TYPE = 3; -const Poco::UInt8 ICMPv4PacketImpl::SOURCE_QUENCH_TYPE = 4; -const Poco::UInt8 ICMPv4PacketImpl::REDIRECT_MESSAGE_TYPE = 5; -const UInt8 ICMPv4PacketImpl::TIME_EXCEEDED_TYPE = 11; -const Poco::UInt8 ICMPv4PacketImpl::PARAMETER_PROBLEM_TYPE = 12; - - -const std::string ICMPv4PacketImpl::MESSAGE_TYPE[] = -{ - "Echo Reply", - "ICMP 1", - "ICMP 2", - "Dest Unreachable", - "Source Quench", - "Redirect", - "ICMP 6", - "ICMP 7", - "Echo", - "ICMP 9", - "ICMP 10", - "Time Exceeded", - "Parameter Problem", - "Timestamp", - "Timestamp Reply", - "Info Request", - "Info Reply", - "Unknown type" -}; - - -const std::string ICMPv4PacketImpl::DESTINATION_UNREACHABLE_CODE[] = -{ - "Net unreachable", - "Host unreachable", - "Protocol unreachable", - "Port unreachable", - "Fragmentation needed and DF set", - "Source route failed", - "Unknown code" -}; - - -const std::string ICMPv4PacketImpl::REDIRECT_MESSAGE_CODE[] = -{ - "Redirect datagrams for the network", - "Redirect datagrams for the host", - "Redirect datagrams for the type of service and network", - "Redirect datagrams for the type of service and host", - "Unknown code" -}; - - -const std::string ICMPv4PacketImpl::TIME_EXCEEDED_CODE[] = -{ - "Time to live exceeded in transit", - "Fragment reassembly time exceeded", - "Unknown code" -}; - - -const std::string ICMPv4PacketImpl::PARAMETER_PROBLEM_CODE[] = -{ - "Pointer indicates the error", - "Unknown code" -}; - - -ICMPv4PacketImpl::ICMPv4PacketImpl(int dataSize) - : ICMPPacketImpl(dataSize), - _seq(0) -{ - initPacket(); -} - - -ICMPv4PacketImpl::~ICMPv4PacketImpl() -{ -} - - -int ICMPv4PacketImpl::packetSize() const -{ - return getDataSize() + sizeof(Header); -} - - -void ICMPv4PacketImpl::initPacket() -{ - if (_seq >= MAX_SEQ_VALUE) resetSequence(); - - Header* icp = (Header*) packet(false); - icp->type = ECHO_REQUEST; - icp->code = 0; - icp->checksum = 0; - icp->seq = ++_seq; -#if defined(POCO_VXWORKS) - icp->id = 0; -#else - icp->id = static_cast(Poco::Process::id()); -#endif - - struct timeval* ptp = (struct timeval *) (icp + 1); - *ptp = time(); - - icp->checksum = checksum((UInt16*) icp, getDataSize() + sizeof(Header)); -} - - -struct timeval ICMPv4PacketImpl::time(Poco::UInt8* buffer, int length) const -{ - struct timeval tv; - - if (0 == buffer || 0 == length) - { - Timespan value(Timestamp().epochMicroseconds()); - tv.tv_sec = (long) value.totalSeconds(); - tv.tv_usec = (long) value.useconds(); - } - else - { - struct timeval* ptv = (struct timeval*) data(buffer, length); - if (ptv) tv = *ptv; - else throw InvalidArgumentException("Invalid packet."); - } - return tv; -} - - -ICMPv4PacketImpl::Header* ICMPv4PacketImpl::header(Poco::UInt8* buffer, int length) const -{ - poco_check_ptr (buffer); - - int offset = (buffer[0] & 0x0F) * 4; - if ((offset + sizeof(Header)) > (size_t)length) return 0; - - buffer += offset; - return (Header *) buffer; -} - - -Poco::UInt8* ICMPv4PacketImpl::data(Poco::UInt8* buffer, int length) const -{ - return ((Poco::UInt8*) header(buffer, length)) + sizeof(Header); -} - - -bool ICMPv4PacketImpl::validReplyID(Poco::UInt8* buffer, int length) const -{ - Header *icp = header(buffer, length); -#if defined(POCO_VXWORKS) - return icp && icp->id == 0; -#else - return icp && (static_cast(Process::id()) == icp->id); -#endif -} - - -std::string ICMPv4PacketImpl::errorDescription(unsigned char* buffer, int length) -{ - Header *icp = header(buffer, length); - - if (!icp) return "Invalid header."; - if (ECHO_REPLY == icp->type) return std::string(); // not an error - - UInt8 pointer = 0; - if (PARAMETER_PROBLEM == icp->type) - { - UInt8 mask = 0x00FF; - pointer = icp->id & mask; - } - - MessageType type = static_cast(icp->type); - int code = icp->code; - std::ostringstream err; - - switch (type) - { - case DESTINATION_UNREACHABLE_TYPE: - if (code >= NET_UNREACHABLE && code < DESTINATION_UNREACHABLE_UNKNOWN) - err << DESTINATION_UNREACHABLE_CODE[code]; - else - err << DESTINATION_UNREACHABLE_CODE[DESTINATION_UNREACHABLE_UNKNOWN]; - break; - - case SOURCE_QUENCH_TYPE: - err << "Source quench"; - break; - - case REDIRECT_MESSAGE_TYPE: - if (code >= REDIRECT_NETWORK && code < REDIRECT_MESSAGE_UNKNOWN) - err << REDIRECT_MESSAGE_CODE[code]; - else - err << REDIRECT_MESSAGE_CODE[REDIRECT_MESSAGE_UNKNOWN]; - break; - - case TIME_EXCEEDED_TYPE: - if (code >= TIME_TO_LIVE || code < TIME_EXCEEDED_UNKNOWN) - err << TIME_EXCEEDED_CODE[code]; - else - err << TIME_EXCEEDED_CODE[TIME_EXCEEDED_UNKNOWN]; - break; - - case PARAMETER_PROBLEM_TYPE: - if (POINTER_INDICATES_THE_ERROR != code) - code = PARAMETER_PROBLEM_UNKNOWN; - err << PARAMETER_PROBLEM_CODE[code] << ": error in octet #" << pointer; - break; - - default: - err << "Unknown type."; - break; - } - - return err.str(); -} - -std::string ICMPv4PacketImpl::typeDescription(int typeId) -{ - poco_assert (typeId >= ECHO_REPLY && typeId < MESSAGE_TYPE_LENGTH); - - return MESSAGE_TYPE[typeId]; -} - - -} } // namespace Poco::Net diff --git a/contrib/libpoco/Net/src/IPAddress.cpp b/contrib/libpoco/Net/src/IPAddress.cpp deleted file mode 100644 index 783d90a813b..00000000000 --- a/contrib/libpoco/Net/src/IPAddress.cpp +++ /dev/null @@ -1,581 +0,0 @@ -// -// IPAddress.cpp -// -// $Id: //poco/1.4/Net/src/IPAddress.cpp#5 $ -// -// Library: Net -// Package: NetCore -// Module: IPAddress -// -// Copyright (c) 2005-2011, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "Poco/Net/IPAddress.h" -#include "Poco/Net/NetException.h" -#include "Poco/RefCountedObject.h" -#include "Poco/NumberFormatter.h" -#include "Poco/BinaryReader.h" -#include "Poco/BinaryWriter.h" -#include "Poco/String.h" -#include "Poco/Types.h" - - -using Poco::RefCountedObject; -using Poco::NumberFormatter; -using Poco::BinaryReader; -using Poco::BinaryWriter; -using Poco::toLower; -using Poco::trim; -using Poco::UInt8; -using Poco::UInt16; -using Poco::UInt32; -using Poco::Net::Impl::IPAddressImpl; -using Poco::Net::Impl::IPv4AddressImpl; -using Poco::Net::Impl::IPv6AddressImpl; - - -namespace Poco { -namespace Net { - - -IPAddress::IPAddress() -{ - newIPv4(); -} - - -IPAddress::IPAddress(const IPAddress& addr) -{ - if (addr.family() == IPv4) - newIPv4(addr.addr()); - else - newIPv6(addr.addr(), addr.scope()); -} - - -IPAddress::IPAddress(Family family) -{ - if (family == IPv4) - newIPv4(); -#if defined(POCO_HAVE_IPv6) - else if (family == IPv6) - newIPv6(); -#endif - else - throw Poco::InvalidArgumentException("Invalid or unsupported address family passed to IPAddress()"); -} - - -IPAddress::IPAddress(const std::string& addr) -{ - IPv4AddressImpl empty4 = IPv4AddressImpl(); - if (addr.empty() || trim(addr) == "0.0.0.0") - { - newIPv4(empty4.addr()); - return; - } - - IPv4AddressImpl addr4(IPv4AddressImpl::parse(addr)); - if (addr4 != empty4) - { - newIPv4(addr4.addr()); - return; - } - -#if defined(POCO_HAVE_IPv6) - IPv6AddressImpl empty6 = IPv6AddressImpl(); - if (addr.empty() || trim(addr) == "::") - { - newIPv6(empty6.addr()); - return; - } - - IPv6AddressImpl addr6(IPv6AddressImpl::parse(addr)); - if (addr6 != IPv6AddressImpl()) - { - newIPv6(addr6.addr(), addr6.scope()); - return; - } -#endif - - throw InvalidAddressException(addr); -} - - -IPAddress::IPAddress(const std::string& addr, Family family) -{ - if (family == IPv4) - { - IPv4AddressImpl addr4(IPv4AddressImpl::parse(addr)); - newIPv4(addr4.addr()); - return; - } -#if defined(POCO_HAVE_IPv6) - else if (family == IPv6) - { - IPv6AddressImpl addr6(IPv6AddressImpl::parse(addr)); - newIPv6(addr6.addr(), addr6.scope()); - return; - } -#endif - else throw Poco::InvalidArgumentException("Invalid or unsupported address family passed to IPAddress()"); -} - - -IPAddress::IPAddress(const void* addr, poco_socklen_t length) -#ifndef POCO_HAVE_ALIGNMENT - : _pImpl(0) -#endif -{ - if (length == sizeof(struct in_addr)) - newIPv4(addr); -#if defined(POCO_HAVE_IPv6) - else if (length == sizeof(struct in6_addr)) - newIPv6(addr); -#endif - else throw Poco::InvalidArgumentException("Invalid address length passed to IPAddress()"); -} - - -IPAddress::IPAddress(const void* addr, poco_socklen_t length, Poco::UInt32 scope) -{ - if (length == sizeof(struct in_addr)) - newIPv4(addr); -#if defined(POCO_HAVE_IPv6) - else if (length == sizeof(struct in6_addr)) - newIPv6(addr, scope); -#endif - else throw Poco::InvalidArgumentException("Invalid address length passed to IPAddress()"); -} - - -IPAddress::IPAddress(unsigned prefix, Family family) -{ - if (family == IPv4) - { - if (prefix <= 32) - newIPv4(prefix); - else - throw Poco::InvalidArgumentException("Invalid prefix length passed to IPAddress()"); - } -#if defined(POCO_HAVE_IPv6) - else if (family == IPv6) - { - if (prefix <= 128) - newIPv6(prefix); - else - throw Poco::InvalidArgumentException("Invalid prefix length passed to IPAddress()"); - } -#endif - else throw Poco::InvalidArgumentException("Invalid or unsupported address family passed to IPAddress()"); -} - - -#if defined(_WIN32) -IPAddress::IPAddress(const SOCKET_ADDRESS& socket_address) -#ifndef POCO_HAVE_ALIGNMENT - : _pImpl(0) -#endif -{ - ADDRESS_FAMILY family = socket_address.lpSockaddr->sa_family; - if (family == AF_INET) - newIPv4(&reinterpret_cast(socket_address.lpSockaddr)->sin_addr); -#if defined(POCO_HAVE_IPv6) - else if (family == AF_INET6) - newIPv6(&reinterpret_cast(socket_address.lpSockaddr)->sin6_addr, - reinterpret_cast(socket_address.lpSockaddr)->sin6_scope_id); -#endif - else throw Poco::InvalidArgumentException("Invalid or unsupported address family passed to IPAddress()"); -} -#endif - - -IPAddress::IPAddress(const struct sockaddr& sockaddr) -{ - unsigned short family = sockaddr.sa_family; - if (family == AF_INET) - newIPv4(&reinterpret_cast(&sockaddr)->sin_addr); -#if defined(POCO_HAVE_IPv6) - else if (family == AF_INET6) - newIPv6(&reinterpret_cast(&sockaddr)->sin6_addr, - reinterpret_cast(&sockaddr)->sin6_scope_id); -#endif - else throw Poco::InvalidArgumentException("Invalid or unsupported address family passed to IPAddress()"); -} - - -IPAddress::~IPAddress() -{ - destruct(); -} - - -IPAddress& IPAddress::operator = (const IPAddress& addr) -{ - if (&addr != this) - { - destruct(); - if (addr.family() == IPAddress::IPv4) - newIPv4(addr.addr()); - else - newIPv6(addr.addr(), addr.scope()); - } - return *this; -} - - -IPAddress::Family IPAddress::family() const -{ - return static_cast(pImpl()->family()); -} - - -Poco::UInt32 IPAddress::scope() const -{ - return pImpl()->scope(); -} - - -std::string IPAddress::toString() const -{ - return pImpl()->toString(); -} - - -bool IPAddress::isWildcard() const -{ - return pImpl()->isWildcard(); -} - - -bool IPAddress::isBroadcast() const -{ - return pImpl()->isBroadcast(); -} - - -bool IPAddress::isLoopback() const -{ - return pImpl()->isLoopback(); -} - - -bool IPAddress::isMulticast() const -{ - return pImpl()->isMulticast(); -} - - -bool IPAddress::isUnicast() const -{ - return !isWildcard() && !isBroadcast() && !isMulticast(); -} - - -bool IPAddress::isLinkLocal() const -{ - return pImpl()->isLinkLocal(); -} - - -bool IPAddress::isSiteLocal() const -{ - return pImpl()->isSiteLocal(); -} - - -bool IPAddress::isIPv4Compatible() const -{ - return pImpl()->isIPv4Compatible(); -} - - -bool IPAddress::isIPv4Mapped() const -{ - return pImpl()->isIPv4Mapped(); -} - - -bool IPAddress::isWellKnownMC() const -{ - return pImpl()->isWellKnownMC(); -} - - -bool IPAddress::isNodeLocalMC() const -{ - return pImpl()->isNodeLocalMC(); -} - - -bool IPAddress::isLinkLocalMC() const -{ - return pImpl()->isLinkLocalMC(); -} - - -bool IPAddress::isSiteLocalMC() const -{ - return pImpl()->isSiteLocalMC(); -} - - -bool IPAddress::isOrgLocalMC() const -{ - return pImpl()->isOrgLocalMC(); -} - - -bool IPAddress::isGlobalMC() const -{ - return pImpl()->isGlobalMC(); -} - - -bool IPAddress::operator == (const IPAddress& a) const -{ - poco_socklen_t l1 = length(); - poco_socklen_t l2 = a.length(); - if (l1 == l2) - { -#if defined(POCO_HAVE_IPv6) - if ( scope() != a.scope() ) - return false; -#endif - return std::memcmp(addr(), a.addr(), l1) == 0; - } - else return false; -} - - -bool IPAddress::operator != (const IPAddress& a) const -{ - return !(*this == a); -} - - -bool IPAddress::operator < (const IPAddress& a) const -{ - poco_socklen_t l1 = length(); - poco_socklen_t l2 = a.length(); - if (l1 == l2) - { -#if defined(POCO_HAVE_IPv6) - if ( scope() != a.scope() ) - return scope() < a.scope(); -#endif - return std::memcmp(addr(), a.addr(), l1) < 0; - } - else return l1 < l2; -} - - -bool IPAddress::operator <= (const IPAddress& a) const -{ - return !(a < *this); -} - - -bool IPAddress::operator > (const IPAddress& a) const -{ - return a < *this; -} - - -bool IPAddress::operator >= (const IPAddress& a) const -{ - return !(*this < a); -} - - -IPAddress IPAddress::operator & (const IPAddress& other) const -{ - if (family() == other.family()) - { - if (family() == IPv4) - { - IPv4AddressImpl t(pImpl()->addr()); - IPv4AddressImpl o(other.pImpl()->addr()); - return IPAddress((t & o).addr(), sizeof(struct in_addr)); - } -#if defined(POCO_HAVE_IPv6) - else if (family() == IPv6) - { - const IPv6AddressImpl t(pImpl()->addr(), pImpl()->scope()); - const IPv6AddressImpl o(other.pImpl()->addr(), other.pImpl()->scope()); - const IPv6AddressImpl r = t & o; - return IPAddress(r.addr(), r.scope(), sizeof(struct in6_addr)); - } -#endif - else throw Poco::InvalidArgumentException("Invalid or unsupported address family passed to IPAddress()"); - } - else throw Poco::InvalidArgumentException("Invalid or unsupported address family passed to IPAddress()"); -} - - -IPAddress IPAddress::operator | (const IPAddress& other) const -{ - if (family() == other.family()) - { - if (family() == IPv4) - { - IPv4AddressImpl t(pImpl()->addr()); - IPv4AddressImpl o(other.pImpl()->addr()); - return IPAddress((t | o).addr(), sizeof(struct in_addr)); - } -#if defined(POCO_HAVE_IPv6) - else if (family() == IPv6) - { - const IPv6AddressImpl t(pImpl()->addr(), pImpl()->scope()); - const IPv6AddressImpl o(other.pImpl()->addr(), other.pImpl()->scope()); - const IPv6AddressImpl r = t | o; - return IPAddress(r.addr(), r.scope(), sizeof(struct in6_addr)); - } -#endif - else throw Poco::InvalidArgumentException("Invalid or unsupported address family passed to IPAddress()"); - } - else throw Poco::InvalidArgumentException("Invalid or unsupported address family passed to IPAddress()"); -} - - -IPAddress IPAddress::operator ^ (const IPAddress& other) const -{ - if (family() == other.family()) - { - if (family() == IPv4) - { - IPv4AddressImpl t(pImpl()->addr()); - IPv4AddressImpl o(other.pImpl()->addr()); - return IPAddress((t ^ o).addr(), sizeof(struct in_addr)); - } -#if defined(POCO_HAVE_IPv6) - else if (family() == IPv6) - { - const IPv6AddressImpl t(pImpl()->addr(), pImpl()->scope()); - const IPv6AddressImpl o(other.pImpl()->addr(), other.pImpl()->scope()); - const IPv6AddressImpl r = t ^ o; - return IPAddress(r.addr(), r.scope(), sizeof(struct in6_addr)); - } -#endif - else throw Poco::InvalidArgumentException("Invalid or unsupported address family passed to IPAddress()"); - } - else throw Poco::InvalidArgumentException("Invalid or unsupported address family passed to IPAddress()"); -} - - -IPAddress IPAddress::operator ~ () const -{ - if (family() == IPv4) - { - IPv4AddressImpl self(this->pImpl()->addr()); - return IPAddress((~self).addr(), sizeof(struct in_addr)); - } -#if defined(POCO_HAVE_IPv6) - else if (family() == IPv6) - { - const IPv6AddressImpl self(pImpl()->addr(), pImpl()->scope()); - const IPv6AddressImpl r = ~self; - return IPAddress(r.addr(), sizeof(struct in6_addr), r.scope()); - } -#endif - else throw Poco::InvalidArgumentException("Invalid or unsupported address family passed to IPAddress()"); -} - - -poco_socklen_t IPAddress::length() const -{ - return pImpl()->length(); -} - - -const void* IPAddress::addr() const -{ - return pImpl()->addr(); -} - - -int IPAddress::af() const -{ - return pImpl()->af(); -} - - -unsigned IPAddress::prefixLength() const -{ - return pImpl()->prefixLength(); -} - - -IPAddress IPAddress::parse(const std::string& addr) -{ - return IPAddress(addr); -} - - -bool IPAddress::tryParse(const std::string& addr, IPAddress& result) -{ - IPv4AddressImpl impl4(IPv4AddressImpl::parse(addr)); - if (impl4 != IPv4AddressImpl() || trim(addr) == "0.0.0.0") - { - result.newIPv4(impl4.addr()); - return true; - } -#if defined(POCO_HAVE_IPv6) - IPv6AddressImpl impl6(IPv6AddressImpl::parse(addr)); - if (impl6 != IPv6AddressImpl()) - { - result.newIPv6(impl6.addr(), impl6.scope()); - return true; - } -#endif - return false; -} - - -void IPAddress::mask(const IPAddress& mask) -{ - IPAddress null; - pImpl()->mask(mask.pImpl(), null.pImpl()); -} - - -void IPAddress::mask(const IPAddress& mask, const IPAddress& set) -{ - pImpl()->mask(mask.pImpl(), set.pImpl()); -} - - -IPAddress IPAddress::wildcard(Family family) -{ - return IPAddress(family); -} - - -IPAddress IPAddress::broadcast() -{ - struct in_addr ia; - ia.s_addr = INADDR_NONE; - return IPAddress(&ia, sizeof(ia)); -} - - -BinaryWriter& operator << (BinaryWriter& writer, const IPAddress& value) -{ - writer.stream().write((const char*) value.addr(), value.length()); - return writer; -} - -BinaryReader& operator >> (BinaryReader& reader, IPAddress& value) -{ - char buf[sizeof(struct in6_addr)]; - reader.stream().read(buf, value.length()); - value = IPAddress(buf, value.length()); - return reader; -} - - -} } // namespace Poco::Net diff --git a/contrib/libpoco/Net/src/IPAddressImpl.cpp b/contrib/libpoco/Net/src/IPAddressImpl.cpp deleted file mode 100644 index 18c13c0caf5..00000000000 --- a/contrib/libpoco/Net/src/IPAddressImpl.cpp +++ /dev/null @@ -1,816 +0,0 @@ -// -// IPAddress.cpp -// -// $Id: //poco/1.4/Net/src/IPAddress.cpp#5 $ -// -// Library: Net -// Package: NetCore -// Module: IPAddress -// -// Copyright (c) 2005-2011, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "Poco/Net/IPAddressImpl.h" -#include "Poco/Net/NetException.h" -#include "Poco/RefCountedObject.h" -#include "Poco/NumberFormatter.h" -#include "Poco/ByteOrder.h" -#include "Poco/String.h" -#include "Poco/Types.h" - -#pragma GCC diagnostic push -#if __GNUC__ > 5 -#pragma GCC diagnostic ignored "-Wmisleading-indentation" -#endif - -using Poco::RefCountedObject; -using Poco::NumberFormatter; -using Poco::toLower; -using Poco::UInt8; -using Poco::UInt16; -using Poco::UInt32; - - -namespace { - - -template -unsigned maskBits(T val, unsigned size) - /// Returns the length of the mask (number of bits set in val). - /// The val should be either all zeros or two contiguos areas of 1s and 0s. - /// The algorithm ignores invalid non-contiguous series of 1s and treats val - /// as if all bits between MSb and last non-zero bit are set to 1. -{ - unsigned count = 0; - if (val) - { - val = (val ^ (val - 1)) >> 1; - for (count = 0; val; ++count) val >>= 1; - } - else count = size; - return size - count; -} - - -} // namespace - - -namespace Poco { -namespace Net { -namespace Impl { - - -// -// IPAddressImpl -// - - -IPAddressImpl::IPAddressImpl() -{ -} - - -IPAddressImpl::~IPAddressImpl() -{ -} - - -// -// IPv4AddressImpl -// - - -IPv4AddressImpl::IPv4AddressImpl() -{ - std::memset(&_addr, 0, sizeof(_addr)); -} - - -IPv4AddressImpl::IPv4AddressImpl(const void* addr) -{ - std::memcpy(&_addr, addr, sizeof(_addr)); -} - - -IPv4AddressImpl::IPv4AddressImpl(unsigned prefix) -{ - UInt32 addr = (prefix == 32) ? 0xffffffff : ~(0xffffffff >> prefix); - _addr.s_addr = ByteOrder::toNetwork(addr); -} - - -IPv4AddressImpl::IPv4AddressImpl(const IPv4AddressImpl& addr) -{ - std::memcpy(&_addr, &addr._addr, sizeof(_addr)); -} - - -IPv4AddressImpl& IPv4AddressImpl::operator = (const IPv4AddressImpl& addr) -{ - if (this == &addr) - return *this; - - std::memcpy(&_addr, &addr._addr, sizeof(_addr)); - return *this; -} - - -std::string IPv4AddressImpl::toString() const -{ - const UInt8* bytes = reinterpret_cast(&_addr); - std::string result; - result.reserve(16); - NumberFormatter::append(result, bytes[0]); - result.append("."); - NumberFormatter::append(result, bytes[1]); - result.append("."); - NumberFormatter::append(result, bytes[2]); - result.append("."); - NumberFormatter::append(result, bytes[3]); - return result; -} - - -poco_socklen_t IPv4AddressImpl::length() const -{ - return sizeof(_addr); -} - - -const void* IPv4AddressImpl::addr() const -{ - return &_addr; -} - - -IPAddressImpl::Family IPv4AddressImpl::family() const -{ - return IPAddressImpl::IPv4; -} - - -int IPv4AddressImpl::af() const -{ - return AF_INET; -} - - -unsigned IPv4AddressImpl::prefixLength() const -{ - return maskBits(ntohl(_addr.s_addr), 32); -} - - -Poco::UInt32 IPv4AddressImpl::scope() const -{ - return 0; -} - - -bool IPv4AddressImpl::isWildcard() const -{ - return _addr.s_addr == INADDR_ANY; -} - - -bool IPv4AddressImpl::isBroadcast() const -{ - return _addr.s_addr == INADDR_NONE; -} - - -bool IPv4AddressImpl::isLoopback() const -{ - return (ntohl(_addr.s_addr) & 0xFF000000) == 0x7F000000; // 127.0.0.1 to 127.255.255.255 -} - - -bool IPv4AddressImpl::isMulticast() const -{ - return (ntohl(_addr.s_addr) & 0xF0000000) == 0xE0000000; // 224.0.0.0/24 to 239.0.0.0/24 -} - - -bool IPv4AddressImpl::isLinkLocal() const -{ - return (ntohl(_addr.s_addr) & 0xFFFF0000) == 0xA9FE0000; // 169.254.0.0/16 -} - - -bool IPv4AddressImpl::isSiteLocal() const -{ - UInt32 addr = ntohl(_addr.s_addr); - return (addr & 0xFF000000) == 0x0A000000 || // 10.0.0.0/24 - (addr & 0xFFFF0000) == 0xC0A80000 || // 192.68.0.0/16 - (addr >= 0xAC100000 && addr <= 0xAC1FFFFF); // 172.16.0.0 to 172.31.255.255 -} - - -bool IPv4AddressImpl::isIPv4Compatible() const -{ - return true; -} - - -bool IPv4AddressImpl::isIPv4Mapped() const -{ - return true; -} - - -bool IPv4AddressImpl::isWellKnownMC() const -{ - return (ntohl(_addr.s_addr) & 0xFFFFFF00) == 0xE0000000; // 224.0.0.0/8 -} - - -bool IPv4AddressImpl::isNodeLocalMC() const -{ - return false; -} - - -bool IPv4AddressImpl::isLinkLocalMC() const -{ - return (ntohl(_addr.s_addr) & 0xFF000000) == 0xE0000000; // 244.0.0.0/24 -} - - -bool IPv4AddressImpl::isSiteLocalMC() const -{ - return (ntohl(_addr.s_addr) & 0xFFFF0000) == 0xEFFF0000; // 239.255.0.0/16 -} - - -bool IPv4AddressImpl::isOrgLocalMC() const -{ - return (ntohl(_addr.s_addr) & 0xFFFF0000) == 0xEFC00000; // 239.192.0.0/16 -} - - -bool IPv4AddressImpl::isGlobalMC() const -{ - UInt32 addr = ntohl(_addr.s_addr); - return addr >= 0xE0000100 && addr <= 0xEE000000; // 224.0.1.0 to 238.255.255.255 -} - - -IPv4AddressImpl IPv4AddressImpl::parse(const std::string& addr) -{ - if (addr.empty()) return IPv4AddressImpl(); -#if defined(_WIN32) - struct in_addr ia; - ia.s_addr = inet_addr(addr.c_str()); - if (ia.s_addr == INADDR_NONE && addr != "255.255.255.255") - return IPv4AddressImpl(); - else - return IPv4AddressImpl(&ia); -#else -#if __GNUC__ < 3 || defined(POCO_VXWORKS) - struct in_addr ia; - ia.s_addr = inet_addr(const_cast(addr.c_str())); - if (ia.s_addr == INADDR_NONE && addr != "255.255.255.255") - return IPv4AddressImpl(); - else - return IPv4AddressImpl(&ia); -#else - struct in_addr ia; - if (inet_aton(addr.c_str(), &ia)) - return IPv4AddressImpl(&ia); - else - return IPv4AddressImpl(); -#endif -#endif -} - - -void IPv4AddressImpl::mask(const IPAddressImpl* pMask, const IPAddressImpl* pSet) -{ - poco_assert (pMask->af() == AF_INET && pSet->af() == AF_INET); - - _addr.s_addr &= static_cast(pMask)->_addr.s_addr; - _addr.s_addr |= static_cast(pSet)->_addr.s_addr & ~static_cast(pMask)->_addr.s_addr; -} - - -IPAddressImpl* IPv4AddressImpl::clone() const -{ - return new IPv4AddressImpl(&_addr); -} - - -IPv4AddressImpl IPv4AddressImpl::operator & (const IPv4AddressImpl& addr) const -{ - IPv4AddressImpl result(&_addr); - result._addr.s_addr &= addr._addr.s_addr; - return result; -} - - -IPv4AddressImpl IPv4AddressImpl::operator | (const IPv4AddressImpl& addr) const -{ - IPv4AddressImpl result(&_addr); - result._addr.s_addr |= addr._addr.s_addr; - return result; -} - - -IPv4AddressImpl IPv4AddressImpl::operator ^ (const IPv4AddressImpl& addr) const -{ - IPv4AddressImpl result(&_addr); - result._addr.s_addr ^= addr._addr.s_addr; - return result; -} - - -IPv4AddressImpl IPv4AddressImpl::operator ~ () const -{ -IPv4AddressImpl result(&_addr); - result._addr.s_addr ^= 0xffffffff; - return result; -} - - -bool IPv4AddressImpl::operator == (const IPv4AddressImpl& addr) const -{ - return 0 == std::memcmp(&addr._addr, &_addr, sizeof(_addr)); -} - - -bool IPv4AddressImpl::operator != (const IPv4AddressImpl& addr) const -{ - return !(*this == addr); -} - - -#if defined(POCO_HAVE_IPv6) - - -// -// IPv6AddressImpl -// - - -IPv6AddressImpl::IPv6AddressImpl(): _scope(0) -{ - std::memset(&_addr, 0, sizeof(_addr)); -} - - -IPv6AddressImpl::IPv6AddressImpl(const void* addr): _scope(0) -{ - std::memcpy(&_addr, addr, sizeof(_addr)); -} - - -IPv6AddressImpl::IPv6AddressImpl(const void* addr, Poco::UInt32 scope): _scope(scope) -{ - std::memcpy(&_addr, addr, sizeof(_addr)); -} - - -IPv6AddressImpl::IPv6AddressImpl(const IPv6AddressImpl& addr): _scope(addr._scope) -{ - std::memcpy((void*) &_addr, (void*) &addr._addr, sizeof(_addr)); -} - - -IPv6AddressImpl& IPv6AddressImpl::operator = (const IPv6AddressImpl& addr) -{ - if (this == &addr) - return *this; - - _scope = addr._scope; - std::memcpy(&_addr, &addr._addr, sizeof(_addr)); - return *this; -} - - -IPv6AddressImpl::IPv6AddressImpl(unsigned prefix): - _scope(0) -{ - unsigned i = 0; -#ifdef POCO_OS_FAMILY_WINDOWS - for (; prefix >= 16; ++i, prefix -= 16) - { - _addr.s6_addr16[i] = 0xffff; - } - if (prefix > 0) - { - _addr.s6_addr16[i++] = ByteOrder::toNetwork(static_cast(~(0xffff >> prefix))); - } - while (i < 8) - { - _addr.s6_addr16[i++] = 0; - } -#else - for (; prefix >= 32; ++i, prefix -= 32) - { - _addr.s6_addr32[i] = 0xffffffff; - } - if (prefix > 0) - { - _addr.s6_addr32[i++] = ByteOrder::toNetwork(~(0xffffffffU >> prefix)); - } - while (i < 4) - { - _addr.s6_addr32[i++] = 0; - } -#endif -} - - -std::string IPv6AddressImpl::toString() const -{ - const UInt16* words = reinterpret_cast(&_addr); - if ((isIPv4Compatible() && !isLoopback()) || isIPv4Mapped()) - { - std::string result; - result.reserve(24); - if (words[5] == 0) - result.append("::"); - else - result.append("::ffff:"); - const UInt8* bytes = reinterpret_cast(&_addr); - NumberFormatter::append(result, bytes[12]); - result.append("."); - NumberFormatter::append(result, bytes[13]); - result.append("."); - NumberFormatter::append(result, bytes[14]); - result.append("."); - NumberFormatter::append(result, bytes[15]); - return result; - } - else - { - std::string result; - result.reserve(64); - bool zeroSequence = false; - int i = 0; - while (i < 8) - { - if (!zeroSequence && words[i] == 0) - { - int zi = i; - while (zi < 8 && words[zi] == 0) ++zi; - if (zi > i + 1) - { - i = zi; - result.append(":"); - zeroSequence = true; - } - } - if (i > 0) result.append(":"); - if (i < 8) NumberFormatter::appendHex(result, ByteOrder::fromNetwork(words[i++])); - } - if (_scope > 0) - { - result.append("%"); -#if defined(_WIN32) - NumberFormatter::append(result, _scope); -#else - char buffer[IFNAMSIZ]; - if (if_indextoname(_scope, buffer)) - { - result.append(buffer); - } - else - { - NumberFormatter::append(result, _scope); - } -#endif - } - return toLower(result); - } -} - - -poco_socklen_t IPv6AddressImpl::length() const -{ - return sizeof(_addr); -} - - -const void* IPv6AddressImpl::addr() const -{ - return &_addr; -} - - -IPAddressImpl::Family IPv6AddressImpl::family() const -{ - return IPAddressImpl::IPv6; -} - - -int IPv6AddressImpl::af() const -{ - return AF_INET6; -} - - -unsigned IPv6AddressImpl::prefixLength() const -{ - unsigned bits = 0; - unsigned bitPos = 128; -#if defined(POCO_OS_FAMILY_UNIX) - for (int i = 3; i >= 0; --i) - { - unsigned addr = ntohl(_addr.s6_addr32[i]); - if ((bits = maskBits(addr, 32))) return (bitPos - (32 - bits)); - bitPos -= 32; - } - return 0; -#elif defined(POCO_OS_FAMILY_WINDOWS) - for (int i = 7; i >= 0; --i) - { - unsigned short addr = ByteOrder::fromNetwork(_addr.s6_addr16[i]); - if ((bits = maskBits(addr, 16))) return (bitPos - (16 - bits)); - bitPos -= 16; - } - return 0; -#else -#warning prefixLength() not implemented - throw NotImplementedException("prefixLength() not implemented"); -#endif -} -Poco::UInt32 IPv6AddressImpl::scope() const -{ - return _scope; -} - - -bool IPv6AddressImpl::isWildcard() const -{ - const UInt16* words = reinterpret_cast(&_addr); - return words[0] == 0 && words[1] == 0 && words[2] == 0 && words[3] == 0 && - words[4] == 0 && words[5] == 0 && words[6] == 0 && words[7] == 0; -} - - -bool IPv6AddressImpl::isBroadcast() const -{ - return false; -} - - -bool IPv6AddressImpl::isLoopback() const -{ - const UInt16* words = reinterpret_cast(&_addr); - return words[0] == 0 && words[1] == 0 && words[2] == 0 && words[3] == 0 && - words[4] == 0 && words[5] == 0 && words[6] == 0 && ByteOrder::fromNetwork(words[7]) == 0x0001; -} - - -bool IPv6AddressImpl::isMulticast() const -{ - const UInt16* words = reinterpret_cast(&_addr); - return (ByteOrder::fromNetwork(words[0]) & 0xFFE0) == 0xFF00; -} - - -bool IPv6AddressImpl::isLinkLocal() const -{ - const UInt16* words = reinterpret_cast(&_addr); - return (ByteOrder::fromNetwork(words[0]) & 0xFFE0) == 0xFE80; -} - - -bool IPv6AddressImpl::isSiteLocal() const -{ - const UInt16* words = reinterpret_cast(&_addr); - return ((ByteOrder::fromNetwork(words[0]) & 0xFFE0) == 0xFEC0) || ((ByteOrder::fromNetwork(words[0]) & 0xFF00) == 0xFC00); -} - - -bool IPv6AddressImpl::isIPv4Compatible() const -{ - const UInt16* words = reinterpret_cast(&_addr); - return words[0] == 0 && words[1] == 0 && words[2] == 0 && words[3] == 0 && words[4] == 0 && words[5] == 0; -} - - -bool IPv6AddressImpl::isIPv4Mapped() const -{ - const UInt16* words = reinterpret_cast(&_addr); - return words[0] == 0 && words[1] == 0 && words[2] == 0 && words[3] == 0 && words[4] == 0 && ByteOrder::fromNetwork(words[5]) == 0xFFFF; -} - - -bool IPv6AddressImpl::isWellKnownMC() const -{ - const UInt16* words = reinterpret_cast(&_addr); - return (ByteOrder::fromNetwork(words[0]) & 0xFFF0) == 0xFF00; -} - - -bool IPv6AddressImpl::isNodeLocalMC() const -{ - const UInt16* words = reinterpret_cast(&_addr); - return (ByteOrder::fromNetwork(words[0]) & 0xFFEF) == 0xFF01; -} - - -bool IPv6AddressImpl::isLinkLocalMC() const -{ - const UInt16* words = reinterpret_cast(&_addr); - return (ByteOrder::fromNetwork(words[0]) & 0xFFEF) == 0xFF02; -} - - -bool IPv6AddressImpl::isSiteLocalMC() const -{ - const UInt16* words = reinterpret_cast(&_addr); - return (ByteOrder::fromNetwork(words[0]) & 0xFFEF) == 0xFF05; -} - - -bool IPv6AddressImpl::isOrgLocalMC() const -{ - const UInt16* words = reinterpret_cast(&_addr); - return (ByteOrder::fromNetwork(words[0]) & 0xFFEF) == 0xFF08; -} - - -bool IPv6AddressImpl::isGlobalMC() const -{ - const UInt16* words = reinterpret_cast(&_addr); - return (ByteOrder::fromNetwork(words[0]) & 0xFFEF) == 0xFF0F; -} - - -IPv6AddressImpl IPv6AddressImpl::parse(const std::string& addr) -{ - if (addr.empty()) return IPv6AddressImpl(); -#if defined(_WIN32) - struct addrinfo* pAI; - struct addrinfo hints; - std::memset(&hints, 0, sizeof(hints)); - hints.ai_flags = AI_NUMERICHOST; - int rc = getaddrinfo(addr.c_str(), NULL, &hints, &pAI); - if (rc == 0) - { - IPv6AddressImpl result = IPv6AddressImpl(&reinterpret_cast(pAI->ai_addr)->sin6_addr, static_cast(reinterpret_cast(pAI->ai_addr)->sin6_scope_id)); - freeaddrinfo(pAI); - return result; - } - else return IPv6AddressImpl(); -#else - struct in6_addr ia; - std::string::size_type pos = addr.find('%'); - if (std::string::npos != pos) - { - std::string::size_type start = ('[' == addr[0]) ? 1 : 0; - std::string unscopedAddr(addr, start, pos - start); - std::string scope(addr, pos + 1, addr.size() - start - pos); - Poco::UInt32 scopeId(0); - if (!(scopeId = if_nametoindex(scope.c_str()))) - return IPv6AddressImpl(); - if (inet_pton(AF_INET6, unscopedAddr.c_str(), &ia) == 1) - return IPv6AddressImpl(&ia, scopeId); - else - return IPv6AddressImpl(); - } - else - { - if (inet_pton(AF_INET6, addr.c_str(), &ia) == 1) - return IPv6AddressImpl(&ia); - else - return IPv6AddressImpl(); - } -#endif -} - - -void IPv6AddressImpl::mask(const IPAddressImpl* pMask, const IPAddressImpl* pSet) -{ - throw Poco::NotImplementedException("mask() is only supported for IPv4 addresses"); -} - - -IPAddressImpl* IPv6AddressImpl::clone() const -{ - return new IPv6AddressImpl(*this); -} - - -IPv6AddressImpl IPv6AddressImpl::operator & (const IPv6AddressImpl& addr) const -{ - if (_scope != addr._scope) - throw Poco::InvalidArgumentException("Scope ID of passed IPv6 address does not match with the source one."); - - IPv6AddressImpl result(*this); -#ifdef POCO_OS_FAMILY_WINDOWS - result._addr.s6_addr16[0] &= addr._addr.s6_addr16[0]; - result._addr.s6_addr16[1] &= addr._addr.s6_addr16[1]; - result._addr.s6_addr16[2] &= addr._addr.s6_addr16[2]; - result._addr.s6_addr16[3] &= addr._addr.s6_addr16[3]; - result._addr.s6_addr16[4] &= addr._addr.s6_addr16[4]; - result._addr.s6_addr16[5] &= addr._addr.s6_addr16[5]; - result._addr.s6_addr16[6] &= addr._addr.s6_addr16[6]; - result._addr.s6_addr16[7] &= addr._addr.s6_addr16[7]; -#else - result._addr.s6_addr32[0] &= addr._addr.s6_addr32[0]; - result._addr.s6_addr32[1] &= addr._addr.s6_addr32[1]; - result._addr.s6_addr32[2] &= addr._addr.s6_addr32[2]; - result._addr.s6_addr32[3] &= addr._addr.s6_addr32[3]; -#endif - return result; -} - - -IPv6AddressImpl IPv6AddressImpl::operator | (const IPv6AddressImpl& addr) const -{ - if (_scope != addr._scope) - throw Poco::InvalidArgumentException("Scope ID of passed IPv6 address does not match with the source one."); - - IPv6AddressImpl result(*this); -#ifdef POCO_OS_FAMILY_WINDOWS - result._addr.s6_addr16[0] |= addr._addr.s6_addr16[0]; - result._addr.s6_addr16[1] |= addr._addr.s6_addr16[1]; - result._addr.s6_addr16[2] |= addr._addr.s6_addr16[2]; - result._addr.s6_addr16[3] |= addr._addr.s6_addr16[3]; - result._addr.s6_addr16[4] |= addr._addr.s6_addr16[4]; - result._addr.s6_addr16[5] |= addr._addr.s6_addr16[5]; - result._addr.s6_addr16[6] |= addr._addr.s6_addr16[6]; - result._addr.s6_addr16[7] |= addr._addr.s6_addr16[7]; -#else - result._addr.s6_addr32[0] |= addr._addr.s6_addr32[0]; - result._addr.s6_addr32[1] |= addr._addr.s6_addr32[1]; - result._addr.s6_addr32[2] |= addr._addr.s6_addr32[2]; - result._addr.s6_addr32[3] |= addr._addr.s6_addr32[3]; -#endif - return result; -} - - -IPv6AddressImpl IPv6AddressImpl::operator ^ (const IPv6AddressImpl& addr) const -{ - if (_scope != addr._scope) - throw Poco::InvalidArgumentException("Scope ID of passed IPv6 address does not match with the source one."); - - IPv6AddressImpl result(*this); - -#ifdef POCO_OS_FAMILY_WINDOWS - result._addr.s6_addr16[0] ^= addr._addr.s6_addr16[0]; - result._addr.s6_addr16[1] ^= addr._addr.s6_addr16[1]; - result._addr.s6_addr16[2] ^= addr._addr.s6_addr16[2]; - result._addr.s6_addr16[3] ^= addr._addr.s6_addr16[3]; - result._addr.s6_addr16[4] ^= addr._addr.s6_addr16[4]; - result._addr.s6_addr16[5] ^= addr._addr.s6_addr16[5]; - result._addr.s6_addr16[6] ^= addr._addr.s6_addr16[6]; - result._addr.s6_addr16[7] ^= addr._addr.s6_addr16[7]; -#else - result._addr.s6_addr32[0] ^= addr._addr.s6_addr32[0]; - result._addr.s6_addr32[1] ^= addr._addr.s6_addr32[1]; - result._addr.s6_addr32[2] ^= addr._addr.s6_addr32[2]; - result._addr.s6_addr32[3] ^= addr._addr.s6_addr32[3]; -#endif - return result; -} - - -IPv6AddressImpl IPv6AddressImpl::operator ~ () const -{ - IPv6AddressImpl result(*this); -#ifdef POCO_OS_FAMILY_WINDOWS - result._addr.s6_addr16[0] ^= 0xffff; - result._addr.s6_addr16[1] ^= 0xffff; - result._addr.s6_addr16[2] ^= 0xffff; - result._addr.s6_addr16[3] ^= 0xffff; - result._addr.s6_addr16[4] ^= 0xffff; - result._addr.s6_addr16[5] ^= 0xffff; - result._addr.s6_addr16[6] ^= 0xffff; - result._addr.s6_addr16[7] ^= 0xffff; -#else - result._addr.s6_addr32[0] ^= 0xffffffff; - result._addr.s6_addr32[1] ^= 0xffffffff; - result._addr.s6_addr32[2] ^= 0xffffffff; - result._addr.s6_addr32[3] ^= 0xffffffff; -#endif - return result; -} - - -bool IPv6AddressImpl::operator == (const IPv6AddressImpl& addr) const -{ - return _scope == addr._scope && 0 == std::memcmp(&addr._addr, &_addr, sizeof(_addr)); -} - - -bool IPv6AddressImpl::operator != (const IPv6AddressImpl& addr) const -{ - return !(*this == addr); -} - - -#endif // POCO_HAVE_IPv6 - - -} } } // namespace Poco::Net::Impl - -#pragma GCC diagnostic pop diff --git a/contrib/libpoco/Net/src/MailMessage.cpp b/contrib/libpoco/Net/src/MailMessage.cpp deleted file mode 100644 index 9856f647f35..00000000000 --- a/contrib/libpoco/Net/src/MailMessage.cpp +++ /dev/null @@ -1,672 +0,0 @@ -// -// MailMessage.cpp -// -// $Id: //poco/1.4/Net/src/MailMessage.cpp#2 $ -// -// Library: Net -// Package: Mail -// Module: MailMessage -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "Poco/Net/MailMessage.h" -#include "Poco/Net/MediaType.h" -#include "Poco/Net/MultipartReader.h" -#include "Poco/Net/MultipartWriter.h" -#include "Poco/Net/PartSource.h" -#include "Poco/Net/PartHandler.h" -#include "Poco/Net/StringPartSource.h" -#include "Poco/Net/QuotedPrintableEncoder.h" -#include "Poco/Net/QuotedPrintableDecoder.h" -#include "Poco/Net/NameValueCollection.h" -#include "Poco/Base64Encoder.h" -#include "Poco/Base64Decoder.h" -#include "Poco/StreamCopier.h" -#include "Poco/DateTimeFormat.h" -#include "Poco/DateTimeFormatter.h" -#include "Poco/DateTimeParser.h" -#include "Poco/String.h" -#include "Poco/StringTokenizer.h" -#include "Poco/StreamCopier.h" -#include "Poco/NumberFormatter.h" -#include - - -using Poco::Base64Encoder; -using Poco::Base64Decoder; -using Poco::StreamCopier; -using Poco::DateTimeFormat; -using Poco::DateTimeFormatter; -using Poco::DateTimeParser; -using Poco::StringTokenizer; -using Poco::icompare; - - -namespace Poco { -namespace Net { - - -namespace -{ - class MultiPartHandler: public PartHandler - /// This is a default part handler for multipart messages, used when there - /// is no external handler provided to he MailMessage. This handler - /// will handle all types of message parts, including attachments. - { - public: - MultiPartHandler(MailMessage* pMsg): _pMsg(pMsg) - /// Creates multi part handler. - /// The pMsg pointer points to the calling MailMessage - /// and will be used to properly populate it, so the - /// message content could be written out unmodified - /// in its entirety, including attachments. - { - } - - ~MultiPartHandler() - /// Destroys string part handler. - { - } - - void handlePart(const MessageHeader& header, std::istream& stream) - /// Handles a part. If message pointer was provided at construction time, - /// the message pointed to will be properly populated so it could be written - /// back out at a later point in time. - { - std::string tmp; - Poco::StreamCopier::copyToString(stream, tmp); - if (_pMsg) - { - MailMessage::ContentTransferEncoding cte = MailMessage::ENCODING_7BIT; - if (header.has(MailMessage::HEADER_CONTENT_TRANSFER_ENCODING)) - { - std::string enc = header[MailMessage::HEADER_CONTENT_TRANSFER_ENCODING]; - if (enc == MailMessage::CTE_8BIT) - cte = MailMessage::ENCODING_8BIT; - else if (enc == MailMessage::CTE_QUOTED_PRINTABLE) - cte = MailMessage::ENCODING_QUOTED_PRINTABLE; - else if (enc == MailMessage::CTE_BASE64) - cte = MailMessage::ENCODING_BASE64; - } - - NameValueCollection::ConstIterator it = header.begin(); - NameValueCollection::ConstIterator end = header.end(); - PartSource* pPS = _pMsg->createPartStore(tmp, - header[MailMessage::HEADER_CONTENT_TYPE], - getFileNameFromDisp(it->second)); - poco_check_ptr (pPS); - for (; it != end; ++it) - { - if (MailMessage::HEADER_CONTENT_DISPOSITION == it->first) - { - if (it->second == "inline") _pMsg->addContent(pPS, cte); - else _pMsg->addAttachment("", pPS, cte); - } - - pPS->headers().set(it->first, it->second); - } - } - } - - private: - std::string getFileNameFromDisp(const std::string& str) - { - StringTokenizer st(str, ";=", StringTokenizer::TOK_IGNORE_EMPTY | StringTokenizer::TOK_TRIM); - StringTokenizer::Iterator it = st.begin(); - StringTokenizer::Iterator end = st.end(); - for (; it != end; ++it) { if (*it == "filename") break; } - if (it != end) - { - ++it; - if (it == end) return ""; - return *it; - } - return ""; - } - - MailMessage* _pMsg; - }; - - - class StringPartHandler: public PartHandler - /// This is a default part handler, used when there is no - /// external handler provided to the MailMessage. This handler - /// handles only single-part messages. - { - public: - StringPartHandler(std::string& content): _str(content) - /// Creates string part handler. - /// The content parameter represents the part content. - { - } - - ~StringPartHandler() - /// Destroys string part handler. - { - } - - void handlePart(const MessageHeader& header, std::istream& stream) - /// Handles a part. - { - std::string tmp; - Poco::StreamCopier::copyToString(stream, tmp); - _str.append(tmp); - } - - private: - std::string& _str; - }; -} - - -const std::string MailMessage::HEADER_SUBJECT("Subject"); -const std::string MailMessage::HEADER_FROM("From"); -const std::string MailMessage::HEADER_TO("To"); -const std::string MailMessage::HEADER_CC("CC"); -const std::string MailMessage::HEADER_BCC("BCC"); -const std::string MailMessage::HEADER_DATE("Date"); -const std::string MailMessage::HEADER_CONTENT_TYPE("Content-Type"); -const std::string MailMessage::HEADER_CONTENT_TRANSFER_ENCODING("Content-Transfer-Encoding"); -const std::string MailMessage::HEADER_CONTENT_DISPOSITION("Content-Disposition"); -const std::string MailMessage::HEADER_CONTENT_ID("Content-ID"); -const std::string MailMessage::HEADER_MIME_VERSION("Mime-Version"); -const std::string MailMessage::EMPTY_HEADER; -const std::string MailMessage::TEXT_PLAIN("text/plain"); -const std::string MailMessage::CTE_7BIT("7bit"); -const std::string MailMessage::CTE_8BIT("8bit"); -const std::string MailMessage::CTE_QUOTED_PRINTABLE("quoted-printable"); -const std::string MailMessage::CTE_BASE64("base64"); - - -MailMessage::MailMessage(PartStoreFactory* pStoreFactory): - _pStoreFactory(pStoreFactory) -{ - Poco::Timestamp now; - setDate(now); - setContentType("text/plain"); -} - - -MailMessage::~MailMessage() -{ - for (PartVec::iterator it = _parts.begin(); it != _parts.end(); ++it) - { - delete it->pSource; - } -} - - -void MailMessage::addRecipient(const MailRecipient& recipient) -{ - _recipients.push_back(recipient); -} - - -void MailMessage::setRecipients(const Recipients& recipients) -{ - _recipients.assign(recipients.begin(), recipients.end()); -} - - -void MailMessage::setSender(const std::string& sender) -{ - set(HEADER_FROM, sender); -} - - -const std::string& MailMessage::getSender() const -{ - if (has(HEADER_FROM)) - return get(HEADER_FROM); - else - return EMPTY_HEADER; -} - - -void MailMessage::setSubject(const std::string& subject) -{ - set(HEADER_SUBJECT, subject); -} - - -const std::string& MailMessage::getSubject() const -{ - if (has(HEADER_SUBJECT)) - return get(HEADER_SUBJECT); - else - return EMPTY_HEADER; -} - - -void MailMessage::setContent(const std::string& content, ContentTransferEncoding encoding) -{ - _content = content; - _encoding = encoding; - set(HEADER_CONTENT_TRANSFER_ENCODING, contentTransferEncodingToString(encoding)); -} - - -void MailMessage::setContentType(const std::string& mediaType) -{ - set(HEADER_CONTENT_TYPE, mediaType); -} - - -void MailMessage::setContentType(const MediaType& mediaType) -{ - setContentType(mediaType.toString()); -} - - -const std::string& MailMessage::getContentType() const -{ - if (has(HEADER_CONTENT_TYPE)) - return get(HEADER_CONTENT_TYPE); - else - return TEXT_PLAIN; -} - - -void MailMessage::setDate(const Poco::Timestamp& dateTime) -{ - set(HEADER_DATE, DateTimeFormatter::format(dateTime, DateTimeFormat::RFC1123_FORMAT)); -} - - -Poco::Timestamp MailMessage::getDate() const -{ - const std::string& dateTime = get(HEADER_DATE); - int tzd; - return DateTimeParser::parse(dateTime, tzd).timestamp(); -} - - -bool MailMessage::isMultipart() const -{ - MediaType mediaType = getContentType(); - return mediaType.matches("multipart"); -} - - -void MailMessage::addPart(const std::string& name, PartSource* pSource, ContentDisposition disposition, ContentTransferEncoding encoding) -{ - poco_check_ptr (pSource); - - makeMultipart(); - Part part; - part.name = name; - part.pSource = pSource; - part.disposition = disposition; - part.encoding = encoding; - _parts.push_back(part); -} - - -void MailMessage::addContent(PartSource* pSource, ContentTransferEncoding encoding) -{ - addPart("", pSource, CONTENT_INLINE, encoding); -} - - -void MailMessage::addAttachment(const std::string& name, PartSource* pSource, ContentTransferEncoding encoding) -{ - addPart(name, pSource, CONTENT_ATTACHMENT, encoding); -} - - -void MailMessage::read(std::istream& istr, PartHandler& handler) -{ - readHeader(istr); - if (isMultipart()) - { - readMultipart(istr, handler); - } - else - { - StringPartHandler handler(_content); - readPart(istr, *this, handler); - } -} - - -void MailMessage::read(std::istream& istr) -{ - readHeader(istr); - if (isMultipart()) - { - MultiPartHandler handler(this); - readMultipart(istr, handler); - } - else - { - StringPartHandler handler(_content); - readPart(istr, *this, handler); - } -} - - -void MailMessage::write(std::ostream& ostr) const -{ - MessageHeader header(*this); - setRecipientHeaders(header); - if (isMultipart()) - { - writeMultipart(header, ostr); - } - else - { - writeHeader(header, ostr); - std::istringstream istr(_content); - writeEncoded(istr, ostr, _encoding); - } -} - - -void MailMessage::makeMultipart() -{ - if (!isMultipart()) - { - MediaType mediaType("multipart", "mixed"); - setContentType(mediaType); - } -} - - -void MailMessage::writeHeader(const MessageHeader& header, std::ostream& ostr) const -{ - header.write(ostr); - ostr << "\r\n"; -} - - -void MailMessage::writeMultipart(MessageHeader& header, std::ostream& ostr) const -{ - if (_boundary.empty()) _boundary = MultipartWriter::createBoundary(); - MediaType mediaType(getContentType()); - mediaType.setParameter("boundary", _boundary); - header.set(HEADER_CONTENT_TYPE, mediaType.toString()); - header.set(HEADER_MIME_VERSION, "1.0"); - writeHeader(header, ostr); - - MultipartWriter writer(ostr, _boundary); - for (PartVec::const_iterator it = _parts.begin(); it != _parts.end(); ++it) - { - writePart(writer, *it); - } - writer.close(); -} - - -void MailMessage::writePart(MultipartWriter& writer, const Part& part) const -{ - MessageHeader partHeader(part.pSource->headers()); - MediaType mediaType(part.pSource->mediaType()); - if (!part.name.empty()) - mediaType.setParameter("name", part.name); - partHeader.set(HEADER_CONTENT_TYPE, mediaType.toString()); - partHeader.set(HEADER_CONTENT_TRANSFER_ENCODING, contentTransferEncodingToString(part.encoding)); - std::string disposition; - if (part.disposition == CONTENT_ATTACHMENT) - { - disposition = "attachment"; - const std::string& filename = part.pSource->filename(); - if (!filename.empty()) - { - disposition.append("; filename="); - quote(filename, disposition); - } - } - else disposition = "inline"; - partHeader.set(HEADER_CONTENT_DISPOSITION, disposition); - writer.nextPart(partHeader); - writeEncoded(part.pSource->stream(), writer.stream(), part.encoding); -} - - -void MailMessage::writeEncoded(std::istream& istr, std::ostream& ostr, ContentTransferEncoding encoding) const -{ - switch (encoding) - { - case ENCODING_7BIT: - case ENCODING_8BIT: - StreamCopier::copyStream(istr, ostr); - break; - case ENCODING_QUOTED_PRINTABLE: - { - QuotedPrintableEncoder encoder(ostr); - StreamCopier::copyStream(istr, encoder); - encoder.close(); - } - break; - case ENCODING_BASE64: - { - Base64Encoder encoder(ostr); - StreamCopier::copyStream(istr, encoder); - encoder.close(); - } - break; - } -} - - -void MailMessage::readHeader(std::istream& istr) -{ - clear(); - MessageHeader::read(istr); - istr.get(); // \r - if ('\n' == istr.peek()) istr.get(); // \n -} - - -void MailMessage::readMultipart(std::istream& istr, PartHandler& handler) -{ - MediaType contentType(getContentType()); - _boundary = contentType.getParameter("boundary"); - MultipartReader reader(istr, _boundary); - while (reader.hasNextPart()) - { - MessageHeader partHeader; - reader.nextPart(partHeader); - readPart(reader.stream(), partHeader, handler); - } -} - - -void MailMessage::readPart(std::istream& istr, const MessageHeader& header, PartHandler& handler) -{ - std::string encoding; - if (header.has(HEADER_CONTENT_TRANSFER_ENCODING)) - { - encoding = header.get(HEADER_CONTENT_TRANSFER_ENCODING); - // get rid of a parameter if one is set - std::string::size_type pos = encoding.find(';'); - if (pos != std::string::npos) - encoding.resize(pos); - } - if (icompare(encoding, CTE_QUOTED_PRINTABLE) == 0) - { - QuotedPrintableDecoder decoder(istr); - handlePart(decoder, header, handler); - } - else if (icompare(encoding, CTE_BASE64) == 0) - { - Base64Decoder decoder(istr); - handlePart(decoder, header, handler); - } - else - { - handlePart(istr, header, handler); - } -} - - -void MailMessage::handlePart(std::istream& istr, const MessageHeader& header, PartHandler& handler) -{ - handler.handlePart(header, istr); - // Read remaining characters from stream in case - // the handler failed to read the complete stream. - while (istr.good()) istr.get(); -} - - -void MailMessage::setRecipientHeaders(MessageHeader& headers) const -{ - std::string to; - std::string cc; - std::string bcc; - - for (Recipients::const_iterator it = _recipients.begin(); it != _recipients.end(); ++it) - { - switch (it->getType()) - { - case MailRecipient::PRIMARY_RECIPIENT: - appendRecipient(*it, to); - break; - case MailRecipient::CC_RECIPIENT: - appendRecipient(*it, cc); - break; - case MailRecipient::BCC_RECIPIENT: - break; - } - } - if (!to.empty()) headers.set(HEADER_TO, to); - if (!cc.empty()) headers.set(HEADER_CC, cc); -} - - -const std::string& MailMessage::contentTransferEncodingToString(ContentTransferEncoding encoding) -{ - switch (encoding) - { - case ENCODING_7BIT: - return CTE_7BIT; - case ENCODING_8BIT: - return CTE_8BIT; - case ENCODING_QUOTED_PRINTABLE: - return CTE_QUOTED_PRINTABLE; - case ENCODING_BASE64: - return CTE_BASE64; - default: - poco_bugcheck(); - } - return CTE_7BIT; -} - - -int MailMessage::lineLength(const std::string& str) -{ - int n = 0; - std::string::const_reverse_iterator it = str.rbegin(); - std::string::const_reverse_iterator end = str.rend(); - while (it != end && *it != '\n') { ++n; ++it; } - return n; -} - - -void MailMessage::appendRecipient(const MailRecipient& recipient, std::string& str) -{ - if (!str.empty()) str.append(", "); - const std::string& realName = recipient.getRealName(); - const std::string& address = recipient.getAddress(); - std::string rec; - if (!realName.empty()) - { - quote(realName, rec, true); - rec.append(" "); - } - rec.append("<"); - rec.append(address); - rec.append(">"); - if (lineLength(str) + rec.length() > 70) str.append("\r\n\t"); - str.append(rec); -} - - -std::string MailMessage::encodeWord(const std::string& text, const std::string& charset) -{ - bool containsNonASCII = false; - for (std::string::const_iterator it = text.begin(); it != text.end(); ++it) - { - if (static_cast(*it) > 127) - { - containsNonASCII = true; - break; - } - } - if (!containsNonASCII) return text; - - std::string encodedText; - std::string::size_type lineLength = 0; - for (std::string::const_iterator it = text.begin(); it != text.end(); ++it) - { - if (lineLength == 0) - { - encodedText += "=?"; - encodedText += charset; - encodedText += "?q?"; - lineLength += charset.length() + 5; - } - switch (*it) - { - case ' ': - encodedText += '_'; - lineLength++; - break; - case '=': - case '?': - case '_': - case '(': - case ')': - case '[': - case ']': - case '<': - case '>': - case ',': - case ';': - case ':': - case '.': - case '@': - encodedText += '='; - NumberFormatter::appendHex(encodedText, static_cast(static_cast(*it)), 2); - lineLength += 3; - break; - default: - if (*it > 32 && *it < 127) - { - encodedText += *it; - lineLength++; - } - else - { - encodedText += '='; - NumberFormatter::appendHex(encodedText, static_cast(static_cast(*it)), 2); - lineLength += 3; - } - } - if ((lineLength >= 64 && (*it == ' ' || *it == '\t' || *it == '\r' || *it == '\n')) || lineLength >= 72) - { - encodedText += "?=\r\n "; - lineLength = 0; - } - } - if (lineLength > 0) - { - encodedText += "?="; - } - return encodedText; -} - - -PartSource* MailMessage::createPartStore(const std::string& content, const std::string& mediaType, const std::string& filename) -{ - if (!_pStoreFactory) return new StringPartSource(content, mediaType, filename); - else return _pStoreFactory->createPartStore(content, mediaType, filename); -} - - -} } // namespace Poco::Net diff --git a/contrib/libpoco/Net/src/MailRecipient.cpp b/contrib/libpoco/Net/src/MailRecipient.cpp deleted file mode 100644 index aedf7a771bb..00000000000 --- a/contrib/libpoco/Net/src/MailRecipient.cpp +++ /dev/null @@ -1,96 +0,0 @@ -// -// MailRecipient.cpp -// -// $Id: //poco/1.4/Net/src/MailRecipient.cpp#1 $ -// -// Library: Net -// Package: Mail -// Module: MailRecipient -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "Poco/Net/MailRecipient.h" -#include - - -namespace Poco { -namespace Net { - - -MailRecipient::MailRecipient(): - _type(PRIMARY_RECIPIENT) -{ -} - - -MailRecipient::MailRecipient(const MailRecipient& recipient): - _address(recipient._address), - _realName(recipient._realName), - _type(recipient._type) -{ -} - - -MailRecipient::MailRecipient(RecipientType type, const std::string& address): - _address(address), - _type(type) -{ -} - - -MailRecipient::MailRecipient(RecipientType type, const std::string& address, const std::string& realName): - _address(address), - _realName(realName), - _type(type) -{ -} - - -MailRecipient::~MailRecipient() -{ -} - - -MailRecipient& MailRecipient::operator = (const MailRecipient& recipient) -{ - if (this != &recipient) - { - MailRecipient tmp(recipient); - swap(tmp); - } - return *this; -} - - -void MailRecipient::swap(MailRecipient& recipient) -{ - std::swap(_type, recipient._type); - std::swap(_address, recipient._address); - std::swap(_realName, recipient._realName); -} - - -void MailRecipient::setType(RecipientType type) -{ - _type = type; -} - - -void MailRecipient::setAddress(const std::string& address) -{ - _address = address; -} - - -void MailRecipient::setRealName(const std::string& realName) -{ - _realName = realName; -} - - -} } // namespace Poco::Net diff --git a/contrib/libpoco/Net/src/MailStream.cpp b/contrib/libpoco/Net/src/MailStream.cpp deleted file mode 100644 index ffbd6954b33..00000000000 --- a/contrib/libpoco/Net/src/MailStream.cpp +++ /dev/null @@ -1,223 +0,0 @@ -// -// MailStream.cpp -// -// $Id: //poco/1.4/Net/src/MailStream.cpp#1 $ -// -// Library: Net -// Package: Mail -// Module: MailStream -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "Poco/Net/MailStream.h" - - -namespace Poco { -namespace Net { - - -MailStreamBuf::MailStreamBuf(std::istream& istr): - _pIstr(&istr), - _pOstr(0), - _state(ST_CR_LF) -{ -} - - -MailStreamBuf::MailStreamBuf(std::ostream& ostr): - _pIstr(0), - _pOstr(&ostr), - _state(ST_CR_LF) -{ -} - - -MailStreamBuf::~MailStreamBuf() -{ -} - - -void MailStreamBuf::close() -{ - if (_pOstr && _state != ST_CR_LF_DOT_CR_LF) - { - if (!_buffer.empty()) - _pOstr->write(_buffer.data(), (std::streamsize) _buffer.length()); - if (_state != ST_CR_LF) - _pOstr->write("\r\n", 2); - _pOstr->write(".\r\n", 3); - _state = ST_CR_LF_DOT_CR_LF; - } -} - - -int MailStreamBuf::readFromDevice() -{ - int c = std::char_traits::eof(); - if (!_buffer.empty()) - { - c = _buffer[0]; - _buffer.erase(0, 1); - } - else - { - c = readOne(); - while (c != std::char_traits::eof() && _state != ST_DATA && _state != ST_CR_LF_DOT_CR_LF) - c = readOne(); - if (!_buffer.empty()) - { - c = _buffer[0]; - _buffer.erase(0, 1); - } - } - return c; -} - - -int MailStreamBuf::readOne() -{ - int c = std::char_traits::eof(); - if (_state != ST_CR_LF_DOT_CR_LF) - { - c = _pIstr->get(); - switch (c) - { - case '\r': - if (_state == ST_CR_LF_DOT) - _state = ST_CR_LF_DOT_CR; - else - _state = ST_CR; - break; - case '\n': - if (_state == ST_CR) - _state = ST_CR_LF; - else if (_state == ST_CR_LF_DOT_CR) - _state = ST_CR_LF_DOT_CR_LF; - else - _state = ST_DATA; - break; - case '.': - if (_state == ST_CR_LF) - _state = ST_CR_LF_DOT; - else if (_state == ST_CR_LF_DOT) - _state = ST_CR_LF_DOT_DOT; - else - _state = ST_DATA; - break; - default: - _state = ST_DATA; - } - if (_state == ST_CR_LF_DOT_DOT) - _state = ST_DATA; - else if (_state == ST_CR_LF_DOT_CR_LF) - _buffer.resize(_buffer.size() - 2); - else if (c != std::char_traits::eof()) - _buffer += (char) c; - } - return c; -} - - -int MailStreamBuf::writeToDevice(char c) -{ - switch (c) - { - case '\r': - _state = ST_CR; - break; - case '\n': - if (_state == ST_CR) - _state = ST_CR_LF; - else - _state = ST_DATA; - break; - case '.': - if (_state == ST_CR_LF) - _state = ST_CR_LF_DOT; - else - _state = ST_DATA; - break; - default: - _state = ST_DATA; - } - if (_state == ST_DATA) - { - if (!_buffer.empty()) - { - _pOstr->write(_buffer.data(), (std::streamsize) _buffer.length()); - _buffer.clear(); - } - _pOstr->put(c); - } - else if (_state == ST_CR_LF_DOT) - { - // buffer contains one or more CR-LF pairs - _pOstr->write(_buffer.data(), (std::streamsize) _buffer.length()); - _pOstr->write("..", 2); - _state = ST_DATA; - _buffer.clear(); - } - else _buffer += c; - return charToInt(c); -} - - -MailIOS::MailIOS(std::istream& istr): _buf(istr) -{ - poco_ios_init(&_buf); -} - - -MailIOS::MailIOS(std::ostream& ostr): _buf(ostr) -{ - poco_ios_init(&_buf); -} - - -MailIOS::~MailIOS() -{ -} - - -void MailIOS::close() -{ - _buf.close(); -} - - -MailStreamBuf* MailIOS::rdbuf() -{ - return &_buf; -} - - -MailInputStream::MailInputStream(std::istream& istr): - MailIOS(istr), - std::istream(&_buf) -{ -} - - -MailInputStream::~MailInputStream() -{ -} - - -MailOutputStream::MailOutputStream(std::ostream& ostr): - MailIOS(ostr), - std::ostream(&_buf) -{ -} - - -MailOutputStream::~MailOutputStream() -{ -} - - -} } // namespace Poco::Net diff --git a/contrib/libpoco/Net/src/MediaType.cpp b/contrib/libpoco/Net/src/MediaType.cpp deleted file mode 100644 index 1579928aaa5..00000000000 --- a/contrib/libpoco/Net/src/MediaType.cpp +++ /dev/null @@ -1,193 +0,0 @@ -// -// MediaType.cpp -// -// $Id: //poco/1.4/Net/src/MediaType.cpp#2 $ -// -// Library: Net -// Package: Messages -// Module: MediaType -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "Poco/Net/MediaType.h" -#include "Poco/Net/MessageHeader.h" -#include "Poco/String.h" -#include "Poco/Ascii.h" -#include - - -using Poco::icompare; - - -namespace Poco { -namespace Net { - - -MediaType::MediaType(const std::string& mediaType) -{ - parse(mediaType); -} - - -MediaType::MediaType(const std::string& type, const std::string& subType): - _type(type), - _subType(subType) -{ -} - - -MediaType::MediaType(const MediaType& mediaType): - _type(mediaType._type), - _subType(mediaType._subType), - _parameters(mediaType._parameters) -{ -} - - -MediaType::~MediaType() -{ -} - - -MediaType& MediaType::operator = (const MediaType& mediaType) -{ - if (&mediaType != this) - { - _type = mediaType._type; - _subType = mediaType._subType; - _parameters = mediaType._parameters; - } - return *this; -} - - -MediaType& MediaType::operator = (const std::string& mediaType) -{ - parse(mediaType); - return *this; -} - - -void MediaType::swap(MediaType& mediaType) -{ - std::swap(_type, mediaType._type); - std::swap(_subType, mediaType._subType); - _parameters.swap(mediaType._parameters); -} - - -void MediaType::setType(const std::string& type) -{ - _type = type; -} - - -void MediaType::setSubType(const std::string& subType) -{ - _subType = subType; -} - - -void MediaType::setParameter(const std::string& name, const std::string& value) -{ - _parameters.set(name, value); -} - - -const std::string& MediaType::getParameter(const std::string& name) const -{ - return _parameters.get(name); -} - - -bool MediaType::hasParameter(const std::string& name) const -{ - return _parameters.has(name); -} - - -void MediaType::removeParameter(const std::string& name) -{ - _parameters.erase(name); -} - - -std::string MediaType::toString() const -{ - std::string result; - result.append(_type); - result.append("/"); - result.append(_subType); - for (NameValueCollection::ConstIterator it = _parameters.begin(); it != _parameters.end(); ++it) - { - result.append("; "); - result.append(it->first); - result.append("="); - MessageHeader::quote(it->second, result); - } - return result; -} - - -bool MediaType::matches(const MediaType& mediaType) const -{ - return matches(mediaType._type, mediaType._subType); -} - - -bool MediaType::matches(const std::string& type, const std::string& subType) const -{ - return icompare(_type, type) == 0 && icompare(_subType, subType) == 0; -} - - -bool MediaType::matches(const std::string& type) const -{ - return icompare(_type, type) == 0; -} - - -bool MediaType::matchesRange(const MediaType& mediaType) const -{ - return matchesRange(mediaType._type, mediaType._subType); -} - - -bool MediaType::matchesRange(const std::string& type, const std::string& subType) const -{ - if (_type == "*" || type == "*" || icompare(_type, type) == 0) - { - return _subType == "*" || subType == "*" || icompare(_subType, subType) == 0; - } - else return false; -} - - -bool MediaType::matchesRange(const std::string& type) const -{ - return _type == "*" || type == "*" || matches(type); -} - - -void MediaType::parse(const std::string& mediaType) -{ - _type.clear(); - _subType.clear(); - _parameters.clear(); - std::string::const_iterator it = mediaType.begin(); - std::string::const_iterator end = mediaType.end(); - while (it != end && Poco::Ascii::isSpace(*it)) ++it; - while (it != end && *it != '/') _type += *it++; - if (it != end) ++it; - while (it != end && *it != ';' && !Poco::Ascii::isSpace(*it)) _subType += *it++; - while (it != end && *it != ';') ++it; - MessageHeader::splitParameters(it, end, _parameters); -} - - -} } // namespace Poco::Net diff --git a/contrib/libpoco/Net/src/MessageHeader.cpp b/contrib/libpoco/Net/src/MessageHeader.cpp deleted file mode 100644 index 2a41d8e94df..00000000000 --- a/contrib/libpoco/Net/src/MessageHeader.cpp +++ /dev/null @@ -1,257 +0,0 @@ -// -// MessageHeader.cpp -// -// $Id: //poco/1.4/Net/src/MessageHeader.cpp#4 $ -// -// Library: Net -// Package: Messages -// Module: MessageHeader -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "Poco/Net/MessageHeader.h" -#include "Poco/Net/NetException.h" -#include "Poco/String.h" -#include "Poco/Ascii.h" - - -namespace Poco { -namespace Net { - - -MessageHeader::MessageHeader(): - _fieldLimit(DFL_FIELD_LIMIT) -{ -} - - -MessageHeader::MessageHeader(const MessageHeader& messageHeader): - NameValueCollection(messageHeader), - _fieldLimit(DFL_FIELD_LIMIT) -{ -} - - -MessageHeader::~MessageHeader() -{ -} - - -MessageHeader& MessageHeader::operator = (const MessageHeader& messageHeader) -{ - NameValueCollection::operator = (messageHeader); - return *this; -} - - -void MessageHeader::write(std::ostream& ostr) const -{ - NameValueCollection::ConstIterator it = begin(); - while (it != end()) - { - ostr << it->first << ": " << it->second << "\r\n"; - ++it; - } -} - - -void MessageHeader::read(std::istream& istr) -{ - static const int eof = std::char_traits::eof(); - std::streambuf& buf = *istr.rdbuf(); - - std::string name; - std::string value; - name.reserve(32); - value.reserve(64); - int ch = buf.sbumpc(); - int fields = 0; - while (ch != eof && ch != '\r' && ch != '\n') - { - if (_fieldLimit > 0 && fields == _fieldLimit) - throw MessageException("Too many header fields"); - name.clear(); - value.clear(); - while (ch != eof && ch != ':' && ch != '\n' && name.length() < MAX_NAME_LENGTH) { name += ch; ch = buf.sbumpc(); } - if (ch == '\n') { ch = buf.sbumpc(); continue; } // ignore invalid header lines - if (ch != ':') throw MessageException("Field name too long/no colon found"); - if (ch != eof) ch = buf.sbumpc(); // ':' - while (ch != eof && Poco::Ascii::isSpace(ch) && ch != '\r' && ch != '\n') ch = buf.sbumpc(); - while (ch != eof && ch != '\r' && ch != '\n' && value.length() < MAX_VALUE_LENGTH) { value += ch; ch = buf.sbumpc(); } - if (ch == '\r') ch = buf.sbumpc(); - if (ch == '\n') - ch = buf.sbumpc(); - else if (ch != eof) - throw MessageException("Field value too long/no CRLF found"); - while (ch == ' ' || ch == '\t') // folding - { - while (ch != eof && ch != '\r' && ch != '\n' && value.length() < MAX_VALUE_LENGTH) { value += ch; ch = buf.sbumpc(); } - if (ch == '\r') ch = buf.sbumpc(); - if (ch == '\n') - ch = buf.sbumpc(); - else if (ch != eof) - throw MessageException("Folded field value too long/no CRLF found"); - } - Poco::trimRightInPlace(value); - add(name, value); - ++fields; - } - istr.putback(ch); -} - - -int MessageHeader::getFieldLimit() const -{ - return _fieldLimit; -} - - -void MessageHeader::setFieldLimit(int limit) -{ - poco_assert (limit >= 0); - - _fieldLimit = limit; -} - - -bool MessageHeader::hasToken(const std::string& fieldName, const std::string& token) const -{ - std::string field = get(fieldName, ""); - std::vector tokens; - splitElements(field, tokens, true); - for (std::vector::const_iterator it = tokens.begin(); it != tokens.end(); ++it) - { - if (Poco::icompare(*it, token) == 0) - return true; - } - return false; -} - - -void MessageHeader::splitElements(const std::string& s, std::vector& elements, bool ignoreEmpty) -{ - elements.clear(); - std::string::const_iterator it = s.begin(); - std::string::const_iterator end = s.end(); - std::string elem; - elem.reserve(64); - while (it != end) - { - if (*it == '"') - { - elem += *it++; - while (it != end && *it != '"') - { - if (*it == '\\') - { - ++it; - if (it != end) elem += *it++; - } - else elem += *it++; - } - if (it != end) elem += *it++; - } - else if (*it == '\\') - { - ++it; - if (it != end) elem += *it++; - } - else if (*it == ',') - { - Poco::trimInPlace(elem); - if (!ignoreEmpty || !elem.empty()) - elements.push_back(elem); - elem.clear(); - ++it; - } - else elem += *it++; - } - if (!elem.empty()) - { - Poco::trimInPlace(elem); - if (!ignoreEmpty || !elem.empty()) - elements.push_back(elem); - } -} - - -void MessageHeader::splitParameters(const std::string& s, std::string& value, NameValueCollection& parameters) -{ - value.clear(); - parameters.clear(); - std::string::const_iterator it = s.begin(); - std::string::const_iterator end = s.end(); - while (it != end && Poco::Ascii::isSpace(*it)) ++it; - while (it != end && *it != ';') value += *it++; - Poco::trimRightInPlace(value); - if (it != end) ++it; - splitParameters(it, end, parameters); -} - - -void MessageHeader::splitParameters(const std::string::const_iterator& begin, const std::string::const_iterator& end, NameValueCollection& parameters) -{ - std::string pname; - std::string pvalue; - pname.reserve(32); - pvalue.reserve(64); - std::string::const_iterator it = begin; - while (it != end) - { - pname.clear(); - pvalue.clear(); - while (it != end && Poco::Ascii::isSpace(*it)) ++it; - while (it != end && *it != '=' && *it != ';') pname += *it++; - Poco::trimRightInPlace(pname); - if (it != end && *it != ';') ++it; - while (it != end && Poco::Ascii::isSpace(*it)) ++it; - while (it != end && *it != ';') - { - if (*it == '"') - { - ++it; - while (it != end && *it != '"') - { - if (*it == '\\') - { - ++it; - if (it != end) pvalue += *it++; - } - else pvalue += *it++; - } - if (it != end) ++it; - } - else if (*it == '\\') - { - ++it; - if (it != end) pvalue += *it++; - } - else pvalue += *it++; - } - Poco::trimRightInPlace(pvalue); - if (!pname.empty()) parameters.add(pname, pvalue); - if (it != end) ++it; - } -} - - -void MessageHeader::quote(const std::string& value, std::string& result, bool allowSpace) -{ - bool mustQuote = false; - for (std::string::const_iterator it = value.begin(); !mustQuote && it != value.end(); ++it) - { - if (!Poco::Ascii::isAlphaNumeric(*it) && *it != '.' && *it != '_' && *it != '-' && !(Poco::Ascii::isSpace(*it) && allowSpace)) - mustQuote = true; - } - if (mustQuote) result += '"'; - result.append(value); - if (mustQuote) result += '"'; -} - - -} } // namespace Poco::Net diff --git a/contrib/libpoco/Net/src/MulticastSocket.cpp b/contrib/libpoco/Net/src/MulticastSocket.cpp deleted file mode 100644 index 6bd388ccdd0..00000000000 --- a/contrib/libpoco/Net/src/MulticastSocket.cpp +++ /dev/null @@ -1,288 +0,0 @@ -// -// MulticastSocket.cpp -// -// $Id: //poco/1.4/Net/src/MulticastSocket.cpp#1 $ -// -// Library: Net -// Package: Sockets -// Module: MulticastSocket -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "Poco/Net/MulticastSocket.h" - - -#ifdef POCO_NET_HAS_INTERFACE - - -#include "Poco/Net/NetException.h" -#include - - -#if defined(hpux) && defined(_XOPEN_SOURCE_EXTENDED) && defined(POCO_HPUX_IP_MREQ_HACK) -// netinet/in.h does not define struct ip_mreq if -// _XOPEN_SOURCE_EXTENDED is #define'd in HP-UX 11.x -// versions prior to 11.30. Compile with -DPOCO_HPUX_IP_MREQ_HACK -// if you experience problems. -struct ip_mreq -{ - struct in_addr imr_multiaddr; - struct in_addr imr_interface; -}; -#endif - - -// some Unix variants don't have IPV6_ADD_MEMBERSHIP/IPV6_DROP_MEMBERSHIP -#if defined(IPV6_JOIN_GROUP) && !defined(IPV6_ADD_MEMBERSHIP) -#define IPV6_ADD_MEMBERSHIP IPV6_JOIN_GROUP -#define IPV6_DROP_MEMBERSHIP IPV6_LEAVE_GROUP -#endif - - -namespace Poco { -namespace Net { - - -MulticastSocket::MulticastSocket() -{ -} - - -MulticastSocket::MulticastSocket(IPAddress::Family family): DatagramSocket(family) -{ -} - - -MulticastSocket::MulticastSocket(const SocketAddress& address, bool reuseAddress): DatagramSocket(address, reuseAddress) -{ -} - - -MulticastSocket::MulticastSocket(const Socket& socket): DatagramSocket(socket) -{ -} - - -MulticastSocket::~MulticastSocket() -{ -} - - -MulticastSocket& MulticastSocket::operator = (const Socket& socket) -{ - DatagramSocket::operator = (socket); - return *this; -} - - -void MulticastSocket::setInterface(const NetworkInterface& interfc) -{ - if (address().family() == IPAddress::IPv4) - { - impl()->setOption(IPPROTO_IP, IP_MULTICAST_IF, interfc.firstAddress(IPAddress::IPv4)); - } -#if defined(POCO_HAVE_IPv6) - else if (address().family() == IPAddress::IPv6) - { - impl()->setOption(IPPROTO_IPV6, IPV6_MULTICAST_IF, interfc.index()); - } -#endif - else - throw UnsupportedFamilyException("Unknown or unsupported socket family."); -} - - -NetworkInterface MulticastSocket::getInterface() const -{ - try - { - IPAddress addr; - impl()->getOption(IPPROTO_IP, IP_MULTICAST_IF, addr); - return NetworkInterface::forAddress(addr); - } - catch (Poco::Exception&) - { -#if defined(POCO_HAVE_IPv6) - int ix; - impl()->getOption(IPPROTO_IPV6, IPV6_MULTICAST_IF, ix); - return NetworkInterface::forIndex(ix); -#else - throw; -#endif - } -} - - -void MulticastSocket::setLoopback(bool flag) -{ - if (address().af() == AF_INET) - { - unsigned char uflag = flag ? 1 : 0; - impl()->setOption(IPPROTO_IP, IP_MULTICAST_LOOP, uflag); - } - else - { -#if defined(POCO_HAVE_IPv6) - unsigned uflag = flag ? 1 : 0; - impl()->setOption(IPPROTO_IPV6, IPV6_MULTICAST_LOOP, uflag); -#endif - } -} - - -bool MulticastSocket::getLoopback() const -{ - bool flag = false; - if (address().af() == AF_INET) - { - unsigned char uflag; - impl()->getOption(IPPROTO_IP, IP_MULTICAST_LOOP, uflag); - flag = uflag != 0; - } - else - { -#if defined(POCO_HAVE_IPv6) - unsigned uflag; - impl()->getOption(IPPROTO_IPV6, IPV6_MULTICAST_LOOP, uflag); - flag = uflag != 0; -#endif - } - return flag; -} - - -void MulticastSocket::setTimeToLive(unsigned value) -{ - if (address().af() == AF_INET) - { - unsigned char ttl = (unsigned char) value; - impl()->setOption(IPPROTO_IP, IP_MULTICAST_TTL, ttl); - } - else - { -#if defined(POCO_HAVE_IPv6) - impl()->setOption(IPPROTO_IPV6, IPV6_MULTICAST_HOPS, value); -#endif - } -} - - -unsigned MulticastSocket::getTimeToLive() const -{ - unsigned ttl(0); - if (address().af() == AF_INET) - { - unsigned char cttl; - impl()->getOption(IPPROTO_IP, IP_MULTICAST_TTL, cttl); - ttl = cttl; - } - else - { -#if defined(POCO_HAVE_IPv6) - impl()->getOption(IPPROTO_IPV6, IPV6_MULTICAST_HOPS, ttl); -#endif - } - return ttl; -} - - -void MulticastSocket::joinGroup(const IPAddress& groupAddress) -{ - joinGroup(groupAddress, findFirstInterface(groupAddress)); -} - - -void MulticastSocket::joinGroup(const IPAddress& groupAddress, const NetworkInterface& interfc) -{ - if (groupAddress.af() == AF_INET) - { - struct ip_mreq mr; - std::memcpy(&mr.imr_multiaddr, groupAddress.addr(), groupAddress.length()); - std::memcpy(&mr.imr_interface, interfc.firstAddress(IPAddress::IPv4).addr(), interfc.firstAddress(IPAddress::IPv4).length()); - impl()->setRawOption(IPPROTO_IP, IP_ADD_MEMBERSHIP, &mr, sizeof(mr)); - } - else - { -#if defined(POCO_HAVE_IPv6) - struct ipv6_mreq mr; - std::memcpy(&mr.ipv6mr_multiaddr, groupAddress.addr(), groupAddress.length()); - mr.ipv6mr_interface = interfc.index(); - impl()->setRawOption(IPPROTO_IPV6, IPV6_ADD_MEMBERSHIP, &mr, sizeof(mr)); -#endif - } -} - - -NetworkInterface MulticastSocket::findFirstInterface(const IPAddress& groupAddress) -{ - NetworkInterface::Map m = NetworkInterface::map(); - if (groupAddress.family() == IPAddress::IPv4) - { - for (NetworkInterface::Map::const_iterator it = m.begin(); it != m.end(); ++it) - { - if (it->second.supportsIPv4() && - it->second.firstAddress(IPAddress::IPv4).isUnicast() && - !it->second.isLoopback() && - !it->second.isPointToPoint()) - { - return it->second; - } - } - } -#ifdef POCO_HAVE_IPv6 - else if (groupAddress.family() == IPAddress::IPv6) - { - for (NetworkInterface::Map::const_iterator it = m.begin(); it != m.end(); ++it) - { - if (it->second.supportsIPv6() && - it->second.firstAddress(IPAddress::IPv6).isUnicast() && - !it->second.isLoopback() && - !it->second.isPointToPoint()) - { - return it->second; - } - } - } -#endif // POCO_HAVE_IPv6 - - throw NotFoundException("No multicast-eligible network interface found."); -} - - -void MulticastSocket::leaveGroup(const IPAddress& groupAddress) -{ - NetworkInterface intf; - leaveGroup(groupAddress, intf); -} - - -void MulticastSocket::leaveGroup(const IPAddress& groupAddress, const NetworkInterface& interfc) -{ - if (groupAddress.af() == AF_INET) - { - struct ip_mreq mr; - std::memcpy(&mr.imr_multiaddr, groupAddress.addr(), groupAddress.length()); - std::memcpy(&mr.imr_interface, interfc.firstAddress(IPAddress::IPv4).addr(), interfc.firstAddress(IPAddress::IPv4).length()); - impl()->setRawOption(IPPROTO_IP, IP_DROP_MEMBERSHIP, &mr, sizeof(mr)); - } - else - { -#if defined(POCO_HAVE_IPv6) - struct ipv6_mreq mr; - std::memcpy(&mr.ipv6mr_multiaddr, groupAddress.addr(), groupAddress.length()); - mr.ipv6mr_interface = interfc.index(); - impl()->setRawOption(IPPROTO_IPV6, IPV6_DROP_MEMBERSHIP, &mr, sizeof(mr)); -#endif - } -} - - -} } // namespace Poco::Net - - -#endif // POCO_NET_HAS_INTERFACE diff --git a/contrib/libpoco/Net/src/MultipartReader.cpp b/contrib/libpoco/Net/src/MultipartReader.cpp deleted file mode 100644 index 1ee9a98e563..00000000000 --- a/contrib/libpoco/Net/src/MultipartReader.cpp +++ /dev/null @@ -1,306 +0,0 @@ -// -// MultipartReader.cpp -// -// $Id: //poco/1.4/Net/src/MultipartReader.cpp#2 $ -// -// Library: Net -// Package: Messages -// Module: MultipartReader -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "Poco/Net/MultipartReader.h" -#include "Poco/Net/MessageHeader.h" -#include "Poco/Net/NetException.h" -#include "Poco/Ascii.h" - - -using Poco::BufferedStreamBuf; - - -namespace Poco { -namespace Net { - - -// -// MultipartStreamBuf -// - - -MultipartStreamBuf::MultipartStreamBuf(std::istream& istr, const std::string& boundary): - BufferedStreamBuf(STREAM_BUFFER_SIZE, std::ios::in), - _istr(istr), - _boundary(boundary), - _lastPart(false) -{ - poco_assert (!boundary.empty() && boundary.length() < STREAM_BUFFER_SIZE - 6); -} - - -MultipartStreamBuf::~MultipartStreamBuf() -{ -} - - -int MultipartStreamBuf::readFromDevice(char* buffer, std::streamsize length) -{ - poco_assert_dbg (length >= _boundary.length() + 6); - - static const int eof = std::char_traits::eof(); - std::streambuf& buf = *_istr.rdbuf(); - - int n = 0; - int ch = buf.sbumpc(); - if (ch == eof) return -1; - *buffer++ = (char) ch; ++n; - if (ch == '\n' || (ch == '\r' && buf.sgetc() == '\n')) - { - if (ch == '\r') - { - ch = buf.sbumpc(); // '\n' - *buffer++ = (char) ch; ++n; - } - ch = buf.sgetc(); - if (ch == '\r' || ch == '\n') return n; - *buffer++ = (char) buf.sbumpc(); ++n; - if (ch == '-' && buf.sgetc() == '-') - { - ch = buf.sbumpc(); // '-' - *buffer++ = (char) ch; ++n; - std::string::const_iterator it = _boundary.begin(); - std::string::const_iterator end = _boundary.end(); - ch = buf.sbumpc(); - *buffer++ = (char) ch; ++n; - while (it != end && ch == *it) - { - ++it; - ch = buf.sbumpc(); - *buffer++ = (char) ch; ++n; - } - if (it == end) - { - if (ch == '\n' || (ch == '\r' && buf.sgetc() == '\n')) - { - if (ch == '\r') - { - ch = buf.sbumpc(); // '\n' - } - return 0; - } - else if (ch == '-' && buf.sgetc() == '-') - { - ch = buf.sbumpc(); // '-' - _lastPart = true; - return 0; - } - } - } - } - ch = buf.sgetc(); - while (ch != eof && ch != '\r' && ch != '\n' && n < length) - { - *buffer++ = (char) buf.sbumpc(); ++n; - ch = buf.sgetc(); - } - return n; -} - - -bool MultipartStreamBuf::lastPart() const -{ - return _lastPart; -} - - -// -// MultipartIOS -// - - -MultipartIOS::MultipartIOS(std::istream& istr, const std::string& boundary): - _buf(istr, boundary) -{ - poco_ios_init(&_buf); -} - - -MultipartIOS::~MultipartIOS() -{ - try - { - _buf.sync(); - } - catch (...) - { - } -} - - -MultipartStreamBuf* MultipartIOS::rdbuf() -{ - return &_buf; -} - - -bool MultipartIOS::lastPart() const -{ - return _buf.lastPart(); -} - - -// -// MultipartInputStream -// - - -MultipartInputStream::MultipartInputStream(std::istream& istr, const std::string& boundary): - MultipartIOS(istr, boundary), - std::istream(&_buf) -{ -} - - -MultipartInputStream::~MultipartInputStream() -{ -} - - -// -// MultipartReader -// - - -MultipartReader::MultipartReader(std::istream& istr): - _istr(istr), - _pMPI(0) -{ -} - - -MultipartReader::MultipartReader(std::istream& istr, const std::string& boundary): - _istr(istr), - _boundary(boundary), - _pMPI(0) -{ -} - - -MultipartReader::~MultipartReader() -{ - delete _pMPI; -} - - -void MultipartReader::nextPart(MessageHeader& messageHeader) -{ - if (!_pMPI) - { - if (_boundary.empty()) - guessBoundary(); - else - findFirstBoundary(); - } - else if (_pMPI->lastPart()) - { - throw MultipartException("No more parts available"); - } - parseHeader(messageHeader); - delete _pMPI; - _pMPI = new MultipartInputStream(_istr, _boundary); -} - - -bool MultipartReader::hasNextPart() -{ - return (!_pMPI || !_pMPI->lastPart()) && _istr.good(); -} - - -std::istream& MultipartReader::stream() const -{ - poco_check_ptr (_pMPI); - - return *_pMPI; -} - - -const std::string& MultipartReader::boundary() const -{ - return _boundary; -} - - -void MultipartReader::findFirstBoundary() -{ - std::string expect("--"); - expect.append(_boundary); - std::string line; - line.reserve(expect.length()); - bool ok = true; - do - { - ok = readLine(line, expect.length()); - } - while (ok && line != expect); - - if (!ok) throw MultipartException("No boundary line found"); -} - - -void MultipartReader::guessBoundary() -{ - static const int eof = std::char_traits::eof(); - int ch = _istr.get(); - while (Poco::Ascii::isSpace(ch)) - ch = _istr.get(); - if (ch == '-' && _istr.peek() == '-') - { - _istr.get(); - ch = _istr.peek(); - while (ch != eof && ch != '\r' && ch != '\n') - { - _boundary += (char) _istr.get(); - ch = _istr.peek(); - } - if (ch == '\r' || ch == '\n') - ch = _istr.get(); - if (_istr.peek() == '\n') - _istr.get(); - } - else throw MultipartException("No boundary line found"); -} - - -void MultipartReader::parseHeader(MessageHeader& messageHeader) -{ - messageHeader.clear(); - messageHeader.read(_istr); - int ch = _istr.get(); - if (ch == '\r' && _istr.peek() == '\n') ch = _istr.get(); -} - - -bool MultipartReader::readLine(std::string& line, std::string::size_type n) -{ - static const int eof = std::char_traits::eof(); - - line.clear(); - int ch = _istr.peek(); - while (ch != eof && ch != '\r' && ch != '\n') - { - ch = (char) _istr.get(); - if (line.length() < n) line += ch; - ch = _istr.peek(); - } - if (ch != eof) _istr.get(); - if (ch == '\r' && _istr.peek() == '\n') _istr.get(); - return ch != eof; -} - - -} } // namespace Poco::Net diff --git a/contrib/libpoco/Net/src/MultipartWriter.cpp b/contrib/libpoco/Net/src/MultipartWriter.cpp deleted file mode 100644 index 0d863d99691..00000000000 --- a/contrib/libpoco/Net/src/MultipartWriter.cpp +++ /dev/null @@ -1,88 +0,0 @@ -// -// MultipartWriter.cpp -// -// $Id: //poco/1.4/Net/src/MultipartWriter.cpp#1 $ -// -// Library: Net -// Package: Messages -// Module: MultipartWriter -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "Poco/Net/MultipartWriter.h" -#include "Poco/Net/MessageHeader.h" -#include "Poco/Random.h" -#include "Poco/NumberFormatter.h" - - -using Poco::Random; -using Poco::NumberFormatter; - - -namespace Poco { -namespace Net { - - -MultipartWriter::MultipartWriter(std::ostream& ostr): - _ostr(ostr), - _boundary(createBoundary()), - _firstPart(true) -{ -} - - -MultipartWriter::MultipartWriter(std::ostream& ostr, const std::string& boundary): - _ostr(ostr), - _boundary(boundary), - _firstPart(true) -{ - if (_boundary.empty()) - _boundary = createBoundary(); -} - - -MultipartWriter::~MultipartWriter() -{ -} - - -void MultipartWriter::nextPart(const MessageHeader& header) -{ - if (_firstPart) - _firstPart = false; - else - _ostr << "\r\n"; - _ostr << "--" << _boundary << "\r\n"; - header.write(_ostr); - _ostr << "\r\n"; -} - - -void MultipartWriter::close() -{ - _ostr << "\r\n--" << _boundary << "--\r\n"; -} - - -const std::string& MultipartWriter::boundary() const -{ - return _boundary; -} - - -std::string MultipartWriter::createBoundary() -{ - std::string boundary("MIME_boundary_"); - Random rnd; - NumberFormatter::appendHex(boundary, rnd.next(), 8); - NumberFormatter::appendHex(boundary, rnd.next(), 8); - return boundary; -} - - -} } // namespace Poco::Net diff --git a/contrib/libpoco/Net/src/NTPClient.cpp b/contrib/libpoco/Net/src/NTPClient.cpp deleted file mode 100644 index 8aa537ce87c..00000000000 --- a/contrib/libpoco/Net/src/NTPClient.cpp +++ /dev/null @@ -1,89 +0,0 @@ -// -// NTPClient.cpp -// -// $Id: //poco/1.4/Net/src/NTPClient.cpp#1 $ -// -// Library: Net -// Package: NTP -// Module: NTPClient -// -// Copyright (c) 2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "Poco/Net/SocketAddress.h" -#include "Poco/Net/NTPClient.h" -#include "Poco/Net/NTPPacket.h" -#include "Poco/Net/DatagramSocket.h" -#include "Poco/Net/NetException.h" - - -using Poco::TimeoutException; - - -namespace Poco { -namespace Net { - - -NTPClient::NTPClient(IPAddress::Family family, int timeout): - _family(family), _timeout(timeout) -{ -} - - -NTPClient::~NTPClient() -{ -} - - -int NTPClient::request(const std::string& address) const -{ - SocketAddress addr(address, 123); - return request(addr); -} - - -int NTPClient::request(SocketAddress& address) const -{ - Poco::Net::SocketAddress sa; - DatagramSocket ntpSocket(_family); - ntpSocket.setReceiveTimeout(_timeout); - ntpSocket.bind(sa); - - SocketAddress returnAddress; - - NTPEventArgs eventArgs(address); - - NTPPacket packet; - Poco::UInt8 p[1024]; - packet.packet(&p[0]); - - ntpSocket.sendTo(p, 48, address); - - int received = 0; - try - { - Poco::Net::SocketAddress sender; - int n = ntpSocket.receiveFrom(p, sizeof(p)-1, sender); - - if (n < 48) // NTP packet must have at least 48 bytes - throw Poco::Net::NTPException("Invalid response received"); - - packet.setPacket(p); - eventArgs.setPacket(packet); - ++received; - response.notify(this, eventArgs); - } - catch (Poco::TimeoutException &) - { - // ignore - } - - return received; -} - - -} } // namespace Poco::Net diff --git a/contrib/libpoco/Net/src/NTPEventArgs.cpp b/contrib/libpoco/Net/src/NTPEventArgs.cpp deleted file mode 100644 index 6fc3d092fdd..00000000000 --- a/contrib/libpoco/Net/src/NTPEventArgs.cpp +++ /dev/null @@ -1,73 +0,0 @@ -// -// NTPEventArgs.cpp -// -// $Id: //poco/1.4/Net/src/NTPEventArgs.cpp#1 $ -// -// Library: Net -// Package: NTP -// Module: NTPEventArgs -// -// Implementation of NTPEventArgs -// -// Copyright (c) 2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "Poco/Net/NTPEventArgs.h" -#include "Poco/Net/SocketAddress.h" -#include "Poco/Net/DNS.h" -#include "Poco/Exception.h" -#include "Poco/Net/NetException.h" - - -using Poco::IOException; -using Poco::InvalidArgumentException; - - -namespace Poco { -namespace Net { - - -NTPEventArgs::NTPEventArgs(const SocketAddress& address): - _address(address), _packet() -{ -} - - -NTPEventArgs::~NTPEventArgs() -{ -} - - -std::string NTPEventArgs::hostName() const -{ - try - { - return DNS::resolve(_address.host().toString()).name(); - } - catch (HostNotFoundException&) - { - } - catch (NoAddressFoundException&) - { - } - catch (DNSException&) - { - } - catch (IOException&) - { - } - return _address.host().toString(); -} - - -std::string NTPEventArgs::hostAddress() const -{ - return _address.host().toString(); -} - - -} } // namespace Poco::Net diff --git a/contrib/libpoco/Net/src/NTPPacket.cpp b/contrib/libpoco/Net/src/NTPPacket.cpp deleted file mode 100644 index 4a1d6fa9927..00000000000 --- a/contrib/libpoco/Net/src/NTPPacket.cpp +++ /dev/null @@ -1,150 +0,0 @@ -// -// NTPPacket.cpp -// -// $Id: //poco/1.4/Net/src/NTPPacket.cpp#2 $ -// -// Library: Net -// Package: NTP -// Module: NTPPacket -// -// Copyright (c) 2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "Poco/Net/NTPPacket.h" -#include "Poco/Net/NetException.h" -#include "Poco/Timestamp.h" -#include "Poco/ByteOrder.h" - - -namespace Poco { -namespace Net { - -#pragma pack(push,1) -typedef struct _NTPPacketData { - Poco::Int8 mode:3; - Poco::Int8 vn:3; - Poco::Int8 li:2; - Poco::Int8 stratum; - Poco::Int8 pool; - Poco::Int8 prec; - Poco::Int32 rootdelay; - Poco::Int32 rootdisp; - Poco::Int32 refid; - Poco::Int64 rts; - Poco::Int64 ots; - Poco::Int64 vts; - Poco::Int64 tts; -} NTPPacketData; -#pragma pack(pop) - - -NTPPacket::NTPPacket() : - // the next 3 fields must be in reverse order from spec - _leapIndicator(3), - _version(4), - _mode(3), - - _stratum(0), - _pool(6), - _precision(-18), - _rootDelay(0), - _rootDispersion(0), - _referenceId(0), - _referenceTimestamp(0), - _receiveTimestamp(0), - _transmitTimestamp(0) -{ - Poco::Timestamp ts; - _originateTimestamp = ts.utcTime(); -} - - -NTPPacket::NTPPacket(Poco::UInt8 *packet) -{ - setPacket(packet); -} - - -NTPPacket::~NTPPacket() -{ -} - - -void NTPPacket::packet(Poco::UInt8 *packet) const -{ - NTPPacketData *p = (NTPPacketData*)packet; - - p->li = _leapIndicator; - p->vn = _version; - p->mode = _mode; - p->stratum = _stratum; - p->pool = _pool; - p->prec = _precision; - p->rootdelay = Poco::ByteOrder::toNetwork(_rootDelay); - p->rootdisp = Poco::ByteOrder::toNetwork(_rootDispersion); - p->refid = Poco::ByteOrder::toNetwork(_referenceId); - p->rts = Poco::ByteOrder::toNetwork(_referenceTimestamp); - p->ots = Poco::ByteOrder::toNetwork(_originateTimestamp); - p->vts = Poco::ByteOrder::toNetwork(_receiveTimestamp); - p->tts = Poco::ByteOrder::toNetwork(_transmitTimestamp); -} - - -void NTPPacket::setPacket(Poco::UInt8 *packet) -{ - NTPPacketData *p = (NTPPacketData*)packet; - - _leapIndicator = p->li; - _version = p->vn; - _mode = p->mode; - _stratum = p->stratum; - _pool = p->pool; - _precision = p->prec; - _rootDelay = Poco::ByteOrder::fromNetwork(p->rootdelay); - _rootDispersion = Poco::ByteOrder::fromNetwork(p->rootdisp); - _referenceId = Poco::ByteOrder::fromNetwork(p->refid); - _referenceTimestamp = Poco::ByteOrder::fromNetwork(p->rts); - _originateTimestamp = Poco::ByteOrder::fromNetwork(p->ots); - _receiveTimestamp = Poco::ByteOrder::fromNetwork(p->vts); - _transmitTimestamp = Poco::ByteOrder::fromNetwork(p->tts); -} - - -Poco::Timestamp NTPPacket::referenceTime() const -{ - return convertTime(_referenceTimestamp); -} - - -Poco::Timestamp NTPPacket::originateTime() const -{ - return convertTime(_originateTimestamp); -} - - -Poco::Timestamp NTPPacket::receiveTime() const -{ - return convertTime(_receiveTimestamp); -} - - -Poco::Timestamp NTPPacket::transmitTime() const -{ - return convertTime(_transmitTimestamp); -} - - -Poco::Timestamp NTPPacket::convertTime(Poco::Int64 tm) const -{ - const unsigned long seventyYears = 2208988800UL; - Poco::UInt32 secsSince1900 = UInt32(Poco::ByteOrder::toLittleEndian(tm) >> 32); - unsigned long epoch = secsSince1900 - seventyYears; - return Poco::Timestamp::fromEpochTime(epoch); -} - - -} } // namespace Poco::Net diff --git a/contrib/libpoco/Net/src/NameValueCollection.cpp b/contrib/libpoco/Net/src/NameValueCollection.cpp deleted file mode 100644 index 8f8b5f50210..00000000000 --- a/contrib/libpoco/Net/src/NameValueCollection.cpp +++ /dev/null @@ -1,155 +0,0 @@ -// -// NameValueCollection.cpp -// -// $Id: //poco/1.4/Net/src/NameValueCollection.cpp#1 $ -// -// Library: Net -// Package: Messages -// Module: NameValueCollection -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "Poco/Net/NameValueCollection.h" -#include "Poco/Exception.h" -#include - - -using Poco::NotFoundException; - - -namespace Poco { -namespace Net { - - -NameValueCollection::NameValueCollection() -{ -} - - -NameValueCollection::NameValueCollection(const NameValueCollection& nvc): - _map(nvc._map) -{ -} - - -NameValueCollection::~NameValueCollection() -{ -} - - -NameValueCollection& NameValueCollection::operator = (const NameValueCollection& nvc) -{ - if (&nvc != this) - { - _map = nvc._map; - } - return *this; -} - - -void NameValueCollection::swap(NameValueCollection& nvc) -{ - std::swap(_map, nvc._map); -} - - -const std::string& NameValueCollection::operator [] (const std::string& name) const -{ - ConstIterator it = _map.find(name); - if (it != _map.end()) - return it->second; - else - throw NotFoundException(name); -} - - -void NameValueCollection::set(const std::string& name, const std::string& value) -{ - Iterator it = _map.find(name); - if (it != _map.end()) - it->second = value; - else - _map.insert(HeaderMap::ValueType(name, value)); -} - - -void NameValueCollection::add(const std::string& name, const std::string& value) -{ - _map.insert(HeaderMap::ValueType(name, value)); -} - - -const std::string& NameValueCollection::get(const std::string& name) const -{ - ConstIterator it = _map.find(name); - if (it != _map.end()) - return it->second; - else - throw NotFoundException(name); -} - - -const std::string& NameValueCollection::get(const std::string& name, const std::string& defaultValue) const -{ - ConstIterator it = _map.find(name); - if (it != _map.end()) - return it->second; - else - return defaultValue; -} - - -bool NameValueCollection::has(const std::string& name) const -{ - return _map.find(name) != _map.end(); -} - - -NameValueCollection::ConstIterator NameValueCollection::find(const std::string& name) const -{ - return _map.find(name); -} - - -NameValueCollection::ConstIterator NameValueCollection::begin() const -{ - return _map.begin(); -} - - -NameValueCollection::ConstIterator NameValueCollection::end() const -{ - return _map.end(); -} - - -bool NameValueCollection::empty() const -{ - return _map.empty(); -} - - -std::size_t NameValueCollection::size() const -{ - return _map.size(); -} - - -void NameValueCollection::erase(const std::string& name) -{ - _map.erase(name); -} - - -void NameValueCollection::clear() -{ - _map.clear(); -} - - -} } // namespace Poco::Net diff --git a/contrib/libpoco/Net/src/Net.cpp b/contrib/libpoco/Net/src/Net.cpp deleted file mode 100644 index 2b58ef837eb..00000000000 --- a/contrib/libpoco/Net/src/Net.cpp +++ /dev/null @@ -1,78 +0,0 @@ -// -// Net.cpp -// -// $Id: //poco/1.4/Net/src/Net.cpp#10 $ -// -// Library: Net -// Package: NetCore -// Module: NetCore -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "Poco/Net/Net.h" - - -#include "Poco/Net/SocketDefs.h" -#include "Poco/Net/NetException.h" - - -namespace Poco { -namespace Net { - - -void Net_API initializeNetwork() -{ -#if defined(POCO_OS_FAMILY_WINDOWS) - WORD version = MAKEWORD(2, 2); - WSADATA data; - if (WSAStartup(version, &data) != 0) - throw NetException("Failed to initialize network subsystem"); -#endif -} - - -void Net_API uninitializeNetwork() -{ -#if defined(POCO_OS_FAMILY_WINDOWS) - WSACleanup(); -#endif -} - - -} } // namespace Poco::Net - - -#if defined(POCO_OS_FAMILY_WINDOWS) && !defined(POCO_NO_AUTOMATIC_LIB_INIT) - - struct NetworkInitializer - /// Network initializer for windows statically - /// linked library. - { - NetworkInitializer() - /// Calls Poco::Net::initializeNetwork(); - { - Poco::Net::initializeNetwork(); - } - - ~NetworkInitializer() - /// Calls Poco::Net::uninitializeNetwork(); - { - try - { - Poco::Net::uninitializeNetwork(); - } - catch (...) - { - poco_unexpected(); - } - } - }; - - const NetworkInitializer pocoNetworkInitializer; - -#endif diff --git a/contrib/libpoco/Net/src/NetException.cpp b/contrib/libpoco/Net/src/NetException.cpp deleted file mode 100644 index 1c76342e1fc..00000000000 --- a/contrib/libpoco/Net/src/NetException.cpp +++ /dev/null @@ -1,55 +0,0 @@ -// -// NetException.cpp -// -// $Id: //poco/1.4/Net/src/NetException.cpp#4 $ -// -// Library: Net -// Package: NetCore -// Module: NetException -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "Poco/Net/NetException.h" -#include - - -using Poco::IOException; - - -namespace Poco { -namespace Net { - - -POCO_IMPLEMENT_EXCEPTION(NetException, IOException, "Net Exception") -POCO_IMPLEMENT_EXCEPTION(InvalidAddressException, NetException, "Invalid address") -POCO_IMPLEMENT_EXCEPTION(InvalidSocketException, NetException, "Invalid socket") -POCO_IMPLEMENT_EXCEPTION(ServiceNotFoundException, NetException, "Service not found") -POCO_IMPLEMENT_EXCEPTION(ConnectionAbortedException, NetException, "Software caused connection abort") -POCO_IMPLEMENT_EXCEPTION(ConnectionResetException, NetException, "Connection reset by peer") -POCO_IMPLEMENT_EXCEPTION(ConnectionRefusedException, NetException, "Connection refused") -POCO_IMPLEMENT_EXCEPTION(DNSException, NetException, "DNS error") -POCO_IMPLEMENT_EXCEPTION(HostNotFoundException, DNSException, "Host not found") -POCO_IMPLEMENT_EXCEPTION(NoAddressFoundException, DNSException, "No address found") -POCO_IMPLEMENT_EXCEPTION(InterfaceNotFoundException, NetException, "Interface not found") -POCO_IMPLEMENT_EXCEPTION(NoMessageException, NetException, "No message received") -POCO_IMPLEMENT_EXCEPTION(MessageException, NetException, "Malformed message") -POCO_IMPLEMENT_EXCEPTION(MultipartException, MessageException, "Malformed multipart message") -POCO_IMPLEMENT_EXCEPTION(HTTPException, NetException, "HTTP Exception") -POCO_IMPLEMENT_EXCEPTION(NotAuthenticatedException, HTTPException, "No authentication information found") -POCO_IMPLEMENT_EXCEPTION(UnsupportedRedirectException, HTTPException, "Unsupported HTTP redirect (protocol change)") -POCO_IMPLEMENT_EXCEPTION(FTPException, NetException, "FTP Exception") -POCO_IMPLEMENT_EXCEPTION(SMTPException, NetException, "SMTP Exception") -POCO_IMPLEMENT_EXCEPTION(POP3Exception, NetException, "POP3 Exception") -POCO_IMPLEMENT_EXCEPTION(ICMPException, NetException, "ICMP Exception") -POCO_IMPLEMENT_EXCEPTION(NTPException, NetException, "NTP Exception") -POCO_IMPLEMENT_EXCEPTION(HTMLFormException, NetException, "HTML Form Exception") -POCO_IMPLEMENT_EXCEPTION(WebSocketException, NetException, "WebSocket Exception") -POCO_IMPLEMENT_EXCEPTION(UnsupportedFamilyException, NetException, "Unknown or unsupported socket family.") - - -} } // namespace Poco::Net diff --git a/contrib/libpoco/Net/src/NetworkInterface.cpp b/contrib/libpoco/Net/src/NetworkInterface.cpp deleted file mode 100644 index 74a4a5467b2..00000000000 --- a/contrib/libpoco/Net/src/NetworkInterface.cpp +++ /dev/null @@ -1,1780 +0,0 @@ -// -// NetworkInterface.cpp -// -// $Id: //poco/1.4/Net/src/NetworkInterface.cpp#9 $ -// -// Library: Net -// Package: NetCore -// Module: NetworkInterface -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "Poco/Net/NetworkInterface.h" - - -#ifdef POCO_NET_HAS_INTERFACE - - -#include "Poco/Net/DatagramSocket.h" -#include "Poco/Net/NetException.h" -#include "Poco/NumberFormatter.h" -#include "Poco/RefCountedObject.h" -#include "Poco/Format.h" -#if defined(POCO_OS_FAMILY_WINDOWS) - #if defined(POCO_WIN32_UTF8) - #include "Poco/UnicodeConverter.h" - #endif - #include "Poco/Error.h" - #include - #include - #include -#endif -#include -#include -#include - -using Poco::NumberFormatter; -using Poco::FastMutex; -using Poco::format; - - -std::ostream& operator<<(std::ostream& os, const Poco::Net::NetworkInterface::MACAddress& mac) -{ - std::ios state(0); - state.copyfmt(os); - for (unsigned i = 0; i < mac.size(); ++i) - { - if (i > 0) os << Poco::Net::NetworkInterface::MAC_SEPARATOR; - os << std::hex << std::setw(2) << std::setfill('0') << (unsigned) mac[i]; - } - os.copyfmt(state); - return os; -} - - -namespace Poco { -namespace Net { - - -// -// NetworkInterfaceImpl -// - -class NetworkInterfaceImpl: public Poco::RefCountedObject -{ -public: - typedef NetworkInterface::AddressTuple AddressTuple; - typedef NetworkInterface::AddressList AddressList; - typedef NetworkInterface::Type Type; - - NetworkInterfaceImpl(unsigned index); - NetworkInterfaceImpl(const std::string& name, const std::string& displayName, const std::string& adapterName, const IPAddress& address, unsigned index, NetworkInterface::MACAddress* pMACAddress = 0); - NetworkInterfaceImpl(const std::string& name, const std::string& displayName, const std::string& adapterName, unsigned index = 0, NetworkInterface::MACAddress* pMACAddress = 0); - NetworkInterfaceImpl(const std::string& name, - const std::string& displayName, - const std::string& adapterName, - const IPAddress& address, - const IPAddress& subnetMask, - const IPAddress& broadcastAddress, - unsigned index, - NetworkInterface::MACAddress* pMACAddress = 0); - - unsigned index() const; - const std::string& name() const; - const std::string& displayName() const; - const std::string& adapterName() const; - const IPAddress& firstAddress(IPAddress::Family family) const; - void addAddress(const AddressTuple& address); - const IPAddress& address(unsigned index) const; - const NetworkInterface::AddressList& addressList() const; - bool hasAddress(const IPAddress& address) const; - const IPAddress& subnetMask(unsigned index) const; - const IPAddress& broadcastAddress(unsigned index) const; - const IPAddress& destAddress(unsigned index) const; - const NetworkInterface::MACAddress& macAddress() const; - bool supportsIPv4() const; - bool supportsIPv6() const; - - void setName(const std::string& name); - void setDisplayName(const std::string& name); - void setAdapterName(const std::string& name); - void addAddress(const IPAddress& addr); - void setMACAddress(const NetworkInterface::MACAddress& addr); - void setMACAddress(const void *addr, std::size_t len); - - unsigned mtu() const; - unsigned ifindex() const; - Type type() const; - - bool broadcast() const; - bool loopback() const; - bool multicast() const; - bool pointToPoint() const; - bool running() const; - bool up() const; - -#if defined(POCO_OS_FAMILY_WINDOWS) - void setFlags(DWORD flags, DWORD iftype); - void setRunning(bool running); -#else - void setFlags(short flags); -#endif - - void setUp(bool up); - void setMTU(unsigned mtu); - void setType(Type type); - void setIndex(unsigned index); - void setPhyParams(); - -protected: - ~NetworkInterfaceImpl(); - -private: - std::string _name; - std::string _displayName; - std::string _adapterName; - AddressList _addressList; - unsigned _index; - bool _broadcast; - bool _loopback; - bool _multicast; - bool _pointToPoint; - bool _up; - bool _running; - unsigned _mtu; - Type _type; - - NetworkInterface::MACAddress _macAddress; - - friend class NetworkInterface; -}; - - -NetworkInterfaceImpl::NetworkInterfaceImpl(unsigned index): - _index(index), - _broadcast(false), - _loopback(false), - _multicast(false), - _pointToPoint(false), - _up(false), - _running(false), - _mtu(0), - _type(NetworkInterface::NI_TYPE_OTHER) -{ -} - - -NetworkInterfaceImpl::NetworkInterfaceImpl(const std::string& name, const std::string& displayName, const std::string& adapterName, const IPAddress& address, unsigned index, NetworkInterface::MACAddress* pMACAddress): - _name(name), - _displayName(displayName), - _adapterName(adapterName), - _index(index), - _broadcast(false), - _loopback(false), - _multicast(false), - _pointToPoint(false), - _up(false), - _running(false), - _mtu(0), - _type(NetworkInterface::NI_TYPE_OTHER) -{ - _addressList.push_back(AddressTuple(address, IPAddress(), IPAddress())); - setPhyParams(); - if (pMACAddress) setMACAddress(*pMACAddress); -} - - -NetworkInterfaceImpl::NetworkInterfaceImpl(const std::string& name, const std::string& displayName, const std::string& adapterName, unsigned index, NetworkInterface::MACAddress* pMACAddress): - _name(name), - _displayName(displayName), - _adapterName(adapterName), - _index(index), - _broadcast(false), - _loopback(false), - _multicast(false), - _pointToPoint(false), - _up(false), - _running(false), - _mtu(0), - _type(NetworkInterface::NI_TYPE_OTHER) -{ - setPhyParams(); - if (pMACAddress) setMACAddress(*pMACAddress); -} - - -NetworkInterfaceImpl::NetworkInterfaceImpl(const std::string& name, - const std::string& displayName, - const std::string& adapterName, - const IPAddress& address, - const IPAddress& subnetMask, - const IPAddress& broadcastAddress, - unsigned index, - NetworkInterface::MACAddress* pMACAddress): - _name(name), - _displayName(displayName), - _adapterName(adapterName), - _index(index), - _broadcast(false), - _loopback(false), - _multicast(false), - _pointToPoint(false), - _up(false), - _running(false), - _mtu(0) -{ - _addressList.push_back(AddressTuple(address, subnetMask, broadcastAddress)); - setPhyParams(); - if (pMACAddress) setMACAddress(*pMACAddress); -} - - -void NetworkInterfaceImpl::setPhyParams() -{ -#if !defined(POCO_OS_FAMILY_WINDOWS) && !defined(POCO_VXWORKS) - struct ifreq ifr; - std::strncpy(ifr.ifr_name, _name.c_str(), IFNAMSIZ); - DatagramSocket ds; - - ds.impl()->ioctl(SIOCGIFFLAGS, &ifr); - setFlags(ifr.ifr_flags); - - ds.impl()->ioctl(SIOCGIFMTU, &ifr); - setMTU(ifr.ifr_mtu); -#endif -} - - -NetworkInterfaceImpl::~NetworkInterfaceImpl() -{ -} - - -bool NetworkInterfaceImpl::supportsIPv4() const -{ - AddressList::const_iterator it = _addressList.begin(); - AddressList::const_iterator end = _addressList.end(); - for (; it != end; ++it) - { - if (IPAddress::IPv4 == it->get().family()) - return true; - } - - return false; -} - - -bool NetworkInterfaceImpl::supportsIPv6() const -{ -#ifdef POCO_HAVE_IPv6 - AddressList::const_iterator it = _addressList.begin(); - AddressList::const_iterator end = _addressList.end(); - for (; it != end; ++it) - { - if (IPAddress::IPv6 == it->get().family()) - return true; - } -#endif - return false; -} - - -inline unsigned NetworkInterfaceImpl::index() const -{ - return _index; -} - - -inline const std::string& NetworkInterfaceImpl::name() const -{ - return _name; -} - - -inline const std::string& NetworkInterfaceImpl::displayName() const -{ - return _displayName; -} - - -inline const std::string& NetworkInterfaceImpl::adapterName() const -{ - return _adapterName; -} - - -const IPAddress& NetworkInterfaceImpl::firstAddress(IPAddress::Family family) const -{ - AddressList::const_iterator it = _addressList.begin(); - AddressList::const_iterator end = _addressList.end(); - for (;it != end; ++it) - { - const IPAddress& addr = it->get(); - if (addr.family() == family) return addr; - } - - throw NotFoundException(format("%s family address not found.", (family == IPAddress::IPv4) ? std::string("IPv4") : std::string("IPv6"))); -} - - -inline void NetworkInterfaceImpl::addAddress(const AddressTuple& address) -{ - _addressList.push_back(address); -} - - -bool NetworkInterfaceImpl::hasAddress(const IPAddress& address) const -{ - NetworkInterface::ConstAddressIterator it = _addressList.begin(); - NetworkInterface::ConstAddressIterator end = _addressList.end(); - for (; it != end; ++it) - { - if (it->get() == address) - return true; - } - return false; -} - - -inline const IPAddress& NetworkInterfaceImpl::address(unsigned index) const -{ - if (index < _addressList.size()) return _addressList[index].get(); - else throw NotFoundException(Poco::format("No address with index %u.", index)); -} - - -inline const NetworkInterface::AddressList& NetworkInterfaceImpl::addressList() const -{ - return _addressList; -} - - -const IPAddress& NetworkInterfaceImpl::subnetMask(unsigned index) const -{ - if (index < _addressList.size()) - return _addressList[index].get(); - - throw NotFoundException(Poco::format("No subnet mask with index %u.", index)); -} - - -const IPAddress& NetworkInterfaceImpl::broadcastAddress(unsigned index) const -{ - if (index < _addressList.size()) - return _addressList[index].get(); - - throw NotFoundException(Poco::format("No subnet mask with index %u.", index)); -} - - -const IPAddress& NetworkInterfaceImpl::destAddress(unsigned index) const -{ - if (!pointToPoint()) - throw InvalidAccessException("Only PPP addresses have destination address."); - else if (index < _addressList.size()) - return _addressList[index].get(); - - throw NotFoundException(Poco::format("No address with index %u.", index)); -} - - -const NetworkInterface::MACAddress& NetworkInterfaceImpl::macAddress() const -{ - return _macAddress; -} - - -inline unsigned NetworkInterfaceImpl::mtu() const -{ - return _mtu; -} - - -inline NetworkInterface::Type NetworkInterfaceImpl::type() const -{ - return _type; -} - - -inline bool NetworkInterfaceImpl::broadcast() const -{ - return _broadcast; -} - - -inline bool NetworkInterfaceImpl::loopback() const -{ - return _loopback; -} - - -inline bool NetworkInterfaceImpl::multicast() const -{ - return _multicast; -} - - -inline bool NetworkInterfaceImpl::pointToPoint() const -{ - return _pointToPoint; -} - - -inline bool NetworkInterfaceImpl::running() const -{ - return _running; -} - - -inline bool NetworkInterfaceImpl::up() const -{ - return _up; -} - - -#if defined(POCO_OS_FAMILY_WINDOWS) - - -void NetworkInterfaceImpl::setFlags(DWORD flags, DWORD iftype) -{ - _running = _up = false; - switch (iftype) { - case IF_TYPE_ETHERNET_CSMACD: - case IF_TYPE_ISO88025_TOKENRING: - case IF_TYPE_IEEE80211: - _multicast = _broadcast = true; - break; - case IF_TYPE_SOFTWARE_LOOPBACK: - _loopback = true; - break; - case IF_TYPE_PPP: - case IF_TYPE_ATM: - case IF_TYPE_TUNNEL: - case IF_TYPE_IEEE1394: - _pointToPoint = true; - break; - } - if (!(flags & IP_ADAPTER_NO_MULTICAST)) - _multicast = true; -} - - -void NetworkInterfaceImpl::setRunning(bool running) -{ - _running = running; -} - - -#else - - -void NetworkInterfaceImpl::setFlags(short flags) -{ -#ifdef POCO_OS_FAMILY_UNIX - _broadcast = ((flags & IFF_BROADCAST) != 0); - _loopback = ((flags & IFF_LOOPBACK) != 0); - _multicast = ((flags & IFF_MULTICAST) != 0); - _pointToPoint = ((flags & IFF_POINTOPOINT) != 0); - _running = ((flags & IFF_RUNNING) != 0); - _up = ((flags & IFF_UP) != 0); -#endif -} - - -#endif - - -inline void NetworkInterfaceImpl::setUp(bool up) -{ - _up = up; -} - - -inline void NetworkInterfaceImpl::setMTU(unsigned mtu) -{ - _mtu = mtu; -} - - -inline void NetworkInterfaceImpl::setType(Type type) -{ - _type = type; -} - - -inline void NetworkInterfaceImpl::setIndex(unsigned index) -{ - _index = index; -} - - -inline void NetworkInterfaceImpl::setName(const std::string& name) -{ - _name = name; -} - - -inline void NetworkInterfaceImpl::setDisplayName(const std::string& name) -{ - _displayName = name; -} - - -inline void NetworkInterfaceImpl::setAdapterName(const std::string& name) -{ - _adapterName = name; -} - - -inline void NetworkInterfaceImpl::addAddress(const IPAddress& addr) -{ - _addressList.push_back(addr); -} - - -inline void NetworkInterfaceImpl::setMACAddress(const NetworkInterface::MACAddress& addr) -{ - _macAddress = addr; -} - - -inline void NetworkInterfaceImpl::setMACAddress(const void *addr, std::size_t len) -{ - _macAddress.clear(); - _macAddress.insert(_macAddress.end(), static_cast(addr), static_cast(addr) + len); -} - - -// -// NetworkInterface -// - - -FastMutex NetworkInterface::_mutex; - - -NetworkInterface::NetworkInterface(unsigned index): - _pImpl(new NetworkInterfaceImpl(index)) -{ -} - - -NetworkInterface::NetworkInterface(const NetworkInterface& interfc): - _pImpl(interfc._pImpl) -{ - _pImpl->duplicate(); -} - - -NetworkInterface::NetworkInterface(const std::string& name, const std::string& displayName, const std::string& adapterName, const IPAddress& address, unsigned index, MACAddress* pMACAddress): - _pImpl(new NetworkInterfaceImpl(name, displayName, adapterName, address, index, pMACAddress)) -{ -} - - -NetworkInterface::NetworkInterface(const std::string& name, const std::string& displayName, const std::string& adapterName, unsigned index, MACAddress* pMACAddress): - _pImpl(new NetworkInterfaceImpl(name, displayName, adapterName, index, pMACAddress)) -{ -} - - -NetworkInterface::NetworkInterface(const std::string& name, const IPAddress& address, unsigned index, MACAddress* pMACAddress): - _pImpl(new NetworkInterfaceImpl(name, name, name, address, index, pMACAddress)) -{ -} - - -NetworkInterface::NetworkInterface(const std::string& name, - const std::string& displayName, - const std::string& adapterName, - const IPAddress& address, - const IPAddress& subnetMask, - const IPAddress& broadcastAddress, - unsigned index, - MACAddress* pMACAddress): - _pImpl(new NetworkInterfaceImpl(name, displayName, adapterName, address, subnetMask, broadcastAddress, index, pMACAddress)) -{ -} - - -NetworkInterface::NetworkInterface(const std::string& name, - const IPAddress& address, - const IPAddress& subnetMask, - const IPAddress& broadcastAddress, - unsigned index, - MACAddress* pMACAddress): - _pImpl(new NetworkInterfaceImpl(name, name, name, address, subnetMask, broadcastAddress, index, pMACAddress)) -{ -} - - -NetworkInterface::~NetworkInterface() -{ - _pImpl->release(); -} - - -NetworkInterface& NetworkInterface::operator = (const NetworkInterface& interfc) -{ - NetworkInterface tmp(interfc); - swap(tmp); - return *this; -} - - -void NetworkInterface::swap(NetworkInterface& other) -{ - using std::swap; - swap(_pImpl, other._pImpl); -} - - -unsigned NetworkInterface::index() const -{ - return _pImpl->index(); -} - - -const std::string& NetworkInterface::name() const -{ - return _pImpl->name(); -} - - -const std::string& NetworkInterface::displayName() const -{ - return _pImpl->displayName(); -} - - -const std::string& NetworkInterface::adapterName() const -{ - return _pImpl->adapterName(); -} - - -const IPAddress& NetworkInterface::firstAddress(IPAddress::Family family) const -{ - return _pImpl->firstAddress(family); -} - - -void NetworkInterface::firstAddress(IPAddress& addr, IPAddress::Family family) const -{ - try - { - addr = firstAddress(family); - } - catch (NotFoundException&) - { - addr = IPAddress(family); - } -} - - -void NetworkInterface::addAddress(const IPAddress& address) -{ - _pImpl->addAddress(AddressTuple(address, IPAddress(), IPAddress())); -} - - -void NetworkInterface::addAddress(const IPAddress& address, const IPAddress& subnetMask, const IPAddress& broadcastAddress) -{ - _pImpl->addAddress(AddressTuple(address, subnetMask, broadcastAddress)); -} - - -const IPAddress& NetworkInterface::address(unsigned index) const -{ - return _pImpl->address(index); -} - - -const NetworkInterface::AddressList& NetworkInterface::addressList() const -{ - return _pImpl->addressList(); -} - - -const IPAddress& NetworkInterface::subnetMask(unsigned index) const -{ - return _pImpl->subnetMask(index); -} - - -const IPAddress& NetworkInterface::broadcastAddress(unsigned index) const -{ - return _pImpl->broadcastAddress(index); -} - - -const NetworkInterface::MACAddress& NetworkInterface::macAddress() const -{ - return _pImpl->macAddress(); -} - - -const IPAddress& NetworkInterface::destAddress(unsigned index) const -{ - return _pImpl->destAddress(index); -} - - -unsigned NetworkInterface::mtu() const -{ - return _pImpl->mtu(); -} - - -NetworkInterface::Type NetworkInterface::type() const -{ - return _pImpl->type(); -} - - -bool NetworkInterface::supportsIP() const -{ - return _pImpl->supportsIPv4() || _pImpl->supportsIPv6(); -} - - -bool NetworkInterface::supportsIPv4() const -{ - return _pImpl->supportsIPv4(); -} - - -bool NetworkInterface::supportsIPv6() const -{ - return _pImpl->supportsIPv6(); -} - - -bool NetworkInterface::supportsBroadcast() const -{ - return _pImpl->broadcast(); -} - - -bool NetworkInterface::supportsMulticast() const -{ - return _pImpl->multicast(); -} - - -bool NetworkInterface::isLoopback() const -{ - return _pImpl->loopback(); -} - - -bool NetworkInterface::isPointToPoint() const -{ - return _pImpl->pointToPoint(); -} - - -bool NetworkInterface::isRunning() const -{ - return _pImpl->running(); -} - - -bool NetworkInterface::isUp() const -{ - return _pImpl->up(); -} - - -NetworkInterface NetworkInterface::forName(const std::string& name, bool requireIPv6) -{ - Map map = NetworkInterface::map(false, false); - Map::const_iterator it = map.begin(); - Map::const_iterator end = map.end(); - - for (; it != end; ++it) - { - if (it->second.name() == name && ((requireIPv6 && it->second.supportsIPv6()) || !requireIPv6)) - return it->second; - } - throw InterfaceNotFoundException(name); -} - - -NetworkInterface NetworkInterface::forName(const std::string& name, IPVersion ipVersion) -{ - Map map = NetworkInterface::map(false, false); - Map::const_iterator it = map.begin(); - Map::const_iterator end = map.end(); - - for (; it != end; ++it) - { - if (it->second.name() == name) - { - if (ipVersion == IPv4_ONLY && it->second.supportsIPv4()) - return it->second; - else if (ipVersion == IPv6_ONLY && it->second.supportsIPv6()) - return it->second; - else if (ipVersion == IPv4_OR_IPv6) - return it->second; - } - } - throw InterfaceNotFoundException(name); -} - - -NetworkInterface NetworkInterface::forAddress(const IPAddress& addr) -{ - Map map = NetworkInterface::map(true, false); - Map::const_iterator it = map.begin(); - Map::const_iterator end = map.end(); - - for (; it != end; ++it) - { - const std::size_t count = it->second.addressList().size(); - for (unsigned i = 0; i < count; ++i) - { - if (it->second.address(i) == addr) - return it->second; - } - } - throw InterfaceNotFoundException(addr.toString()); -} - - -NetworkInterface NetworkInterface::forIndex(unsigned i) -{ - if (i != NetworkInterface::NO_INDEX) - { - Map map = NetworkInterface::map(false, false); - Map::const_iterator it = map.find(i); - if (it != map.end()) - return it->second; - else - throw InterfaceNotFoundException("#" + NumberFormatter::format(i)); - } - throw InterfaceNotFoundException("#" + NumberFormatter::format(i)); -} - - -NetworkInterface::List NetworkInterface::list(bool ipOnly, bool upOnly) -{ - List list; - Map m = map(ipOnly, upOnly); - NetworkInterface::Map::const_iterator it = m.begin(); - NetworkInterface::Map::const_iterator end = m.end(); - for (; it != end; ++it) - { - int index = it->second.index(); - std::string name = it->second.name(); - std::string displayName = it->second.displayName(); - std::string adapterName = it->second.adapterName(); - NetworkInterface::MACAddress mac = it->second.macAddress(); - - typedef NetworkInterface::AddressList List; - const List& ipList = it->second.addressList(); - List::const_iterator ipIt = ipList.begin(); - List::const_iterator ipEnd = ipList.end(); - for (int counter = 0; ipIt != ipEnd; ++ipIt, ++counter) - { - IPAddress addr = ipIt->get(); - IPAddress mask = ipIt->get(); - NetworkInterface ni; - if (mask.isWildcard()) - { - ni = NetworkInterface(name, displayName, adapterName, addr, index, &mac); - } - else - { - IPAddress broadcast = ipIt->get(); - ni = NetworkInterface(name, displayName, adapterName, addr, mask, broadcast, index, &mac); - } - - ni._pImpl->_broadcast = it->second._pImpl->_broadcast; - ni._pImpl->_loopback = it->second._pImpl->_loopback; - ni._pImpl->_multicast = it->second._pImpl->_multicast; - ni._pImpl->_pointToPoint = it->second._pImpl->_pointToPoint; - ni._pImpl->_up = it->second._pImpl->_up; - ni._pImpl->_running = it->second._pImpl->_running; - ni._pImpl->_mtu = it->second._pImpl->_mtu; - ni._pImpl->_type = it->second._pImpl->_type; - - list.push_back(ni); - } - } - - return list; -} - - -} } // namespace Poco::Net - - -// -// platform-specific code below -// - - -#if defined(POCO_OS_FAMILY_WINDOWS) -// -// Windows -// - - -#include "Poco/Buffer.h" -#include - - -namespace Poco { -namespace Net { - - -namespace { - - -IPAddress getBroadcastAddress(PIP_ADAPTER_PREFIX pPrefix, const IPAddress& addr, ULONG* pprefix = 0) - /// This function relies on (1) subnet prefix being at the position - /// immediately preceding and (2) broadcast address being at the position - /// immediately succeeding the IPv4 unicast address. - /// - /// Since there is no explicit guarantee on order, to ensure correctness, - /// the above constraints are checked prior to returning the result. - /// Additionally, on pre-Vista versions on Windows, the main structure does - /// not contain prefix length; for those platforms, this function - /// returns prefix through pprefix argument. -{ - PIP_ADAPTER_PREFIX pPrev = 0; - for (int i = 0; pPrefix; pPrefix = pPrefix->Next, ++i) - { - ADDRESS_FAMILY family = pPrefix->Address.lpSockaddr->sa_family; - if ((family == AF_INET) && (addr == IPAddress(pPrefix->Address))) - break; - pPrev = pPrefix; - } - - if (pPrefix && pPrefix->Next && pPrev) - { - IPAddress ipPrefix(pPrev->PrefixLength, IPAddress::IPv4); - IPAddress mask(pPrefix->Next->Address); - if ((ipPrefix & mask) == (ipPrefix & addr)) - { - if (pprefix) *pprefix = pPrefix->PrefixLength; - return IPAddress(pPrefix->Next->Address); - } - } - - return IPAddress(IPAddress::IPv4); -} - - -NetworkInterface::Type fromNative(DWORD type) -{ - switch (type) - { - case IF_TYPE_ETHERNET_CSMACD: return NetworkInterface::NI_TYPE_ETHERNET_CSMACD; - case IF_TYPE_ISO88025_TOKENRING: return NetworkInterface::NI_TYPE_ISO88025_TOKENRING; - case IF_TYPE_FRAMERELAY: return NetworkInterface::NI_TYPE_FRAMERELAY; - case IF_TYPE_PPP: return NetworkInterface::NI_TYPE_PPP; - case IF_TYPE_SOFTWARE_LOOPBACK: return NetworkInterface::NI_TYPE_SOFTWARE_LOOPBACK; - case IF_TYPE_ATM: return NetworkInterface::NI_TYPE_ATM; - case IF_TYPE_IEEE80211: return NetworkInterface::NI_TYPE_IEEE80211; - case IF_TYPE_TUNNEL: return NetworkInterface::NI_TYPE_TUNNEL; - case IF_TYPE_IEEE1394: return NetworkInterface::NI_TYPE_IEEE1394; - default: return NetworkInterface::NI_TYPE_OTHER; - } -} - - -IPAddress subnetMaskForInterface(const std::string& name, bool isLoopback) -{ - if (isLoopback) - { - return IPAddress::parse("255.0.0.0"); - } - else - { -#if !defined(_WIN32_WCE) - std::string subKey("SYSTEM\\CurrentControlSet\\services\\Tcpip\\Parameters\\Interfaces\\"); - subKey += name; - std::string netmask; - HKEY hKey; -#if defined(POCO_WIN32_UTF8) && !defined(POCO_NO_WSTRING) - std::wstring usubKey; - Poco::UnicodeConverter::toUTF16(subKey, usubKey); - if (RegOpenKeyExW(HKEY_LOCAL_MACHINE, usubKey.c_str(), 0, KEY_READ, &hKey) != ERROR_SUCCESS) - return IPAddress(); - wchar_t unetmask[16]; - DWORD size = sizeof(unetmask); - if (RegQueryValueExW(hKey, L"DhcpSubnetMask", NULL, NULL, (LPBYTE)&unetmask, &size) != ERROR_SUCCESS) - { - if (RegQueryValueExW(hKey, L"SubnetMask", NULL, NULL, (LPBYTE)&unetmask, &size) != ERROR_SUCCESS) - { - RegCloseKey(hKey); - return IPAddress(); - } - } - Poco::UnicodeConverter::toUTF8(unetmask, netmask); -#else - if (RegOpenKeyExA(HKEY_LOCAL_MACHINE, subKey.c_str(), 0, KEY_READ, &hKey) != ERROR_SUCCESS) - return IPAddress(); - char unetmask[16]; - DWORD size = sizeof(unetmask); - if (RegQueryValueExA(hKey, "DhcpSubnetMask", NULL, NULL, (LPBYTE)&unetmask, &size) != ERROR_SUCCESS) - { - if (RegQueryValueExA(hKey, "SubnetMask", NULL, NULL, (LPBYTE)&unetmask, &size) != ERROR_SUCCESS) - { - RegCloseKey(hKey); - return IPAddress(); - } - } - netmask = unetmask; -#endif - RegCloseKey(hKey); - return IPAddress::parse(netmask); -#else - return IPAddress(); -#endif // !defined(_WIN32_WCE) - } -} - - -} /// namespace - - -NetworkInterface::Map NetworkInterface::map(bool ipOnly, bool upOnly) -{ - OSVERSIONINFO osvi; - ZeroMemory(&osvi, sizeof(OSVERSIONINFO)); - osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); - GetVersionEx(&osvi); - - FastMutex::ScopedLock lock(_mutex); - Map result; - ULONG outBufLen = 16384; - Poco::Buffer memory(outBufLen); - ULONG flags = (GAA_FLAG_SKIP_ANYCAST | GAA_FLAG_SKIP_MULTICAST | GAA_FLAG_SKIP_DNS_SERVER | GAA_FLAG_INCLUDE_PREFIX); -#ifdef GAA_FLAG_INCLUDE_ALL_INTERFACES - flags |= GAA_FLAG_INCLUDE_ALL_INTERFACES; -#endif -#if defined(POCO_HAVE_IPv6) - const unsigned family = AF_UNSPEC; //IPv4 and IPv6 -#else - const unsigned family = AF_INET; //IPv4 only -#endif - DWORD dwRetVal = 0; - ULONG iterations = 0; - PIP_ADAPTER_ADDRESSES pAddress = 0; - do - { - pAddress = reinterpret_cast(memory.begin()); // leave in the loop, begin may change after resize - poco_assert (memory.capacity() >= outBufLen); - if (ERROR_BUFFER_OVERFLOW == (dwRetVal = GetAdaptersAddresses(family, flags, 0, pAddress, &outBufLen))) - memory.resize(outBufLen, false); // adjust size and try again - else if (ERROR_NO_DATA == dwRetVal) // no network interfaces found - return result; - else if (NO_ERROR != dwRetVal) // error occurred - throw SystemException(format("An error occurred while trying to obtain list of network interfaces: [%s]", Error::getMessage(dwRetVal))); - else - break; - } - while ((ERROR_BUFFER_OVERFLOW == dwRetVal) && (++iterations <= 2)); - - poco_assert (NO_ERROR == dwRetVal); - for (; pAddress; pAddress = pAddress->Next) - { - IPAddress address; - IPAddress subnetMask; - IPAddress broadcastAddress; - unsigned ifIndex = 0; - -#if defined(POCO_HAVE_IPv6) - #if defined(_WIN32_WCE) - ifIndex = pAddress->Ipv6IfIndex; - #elif (_WIN32_WINNT >= 0x0501) && (NTDDI_VERSION >= 0x05010100) // Win XP SP1 - #if defined (IP_ADAPTER_IPV6_ENABLED) // Vista - if(osvi.dwMajorVersion>=6)//vista - { - if ((pAddress->Flags & IP_ADAPTER_IPV6_ENABLED) && - (osvi.dwMajorVersion >= 5) && - (osvi.dwMinorVersion >= 1) && - (osvi.dwBuildNumber >=1)) - { - ifIndex = pAddress->Ipv6IfIndex; - } - } - else - { - if ((osvi.dwMajorVersion >= 5) && - (osvi.dwMinorVersion >= 1) && - (osvi.dwBuildNumber >= 1)) - { - ifIndex = pAddress->Ipv6IfIndex; - } - } - #else // !defined(IP_ADAPTER_IPV6_ENABLED) - if ((osvi.dwMajorVersion >= 5) && - (osvi.dwMinorVersion >= 1) && - (osvi.dwBuildNumber >= 1)) - { - ifIndex = pAddress->Ipv6IfIndex; - } - #endif // defined(IP_ADAPTER_IPV6_ENABLED) - #endif // (_WIN32_WINNT >= 0x0501) && (NTDDI_VERSION >= 0x05010100) -#endif // POCO_HAVE_IPv6 - -#if defined (IP_ADAPTER_IPV4_ENABLED) - if(osvi.dwMajorVersion>=6) - {//vista - if (pAddress->Flags & IP_ADAPTER_IPV4_ENABLED) - { - ifIndex = pAddress->IfIndex; - } - } - else - { - ifIndex = pAddress->IfIndex; - } -#else // !IP_ADAPTER_IPV4_ENABLED - ifIndex = pAddress->IfIndex; -#endif - if (ifIndex == 0) continue; - - std::string name; - std::string displayName; - std::string adapterName(pAddress->AdapterName); -#ifdef POCO_WIN32_UTF8 - Poco::UnicodeConverter::toUTF8(pAddress->FriendlyName, name); - Poco::UnicodeConverter::toUTF8(pAddress->Description, displayName); -#else - char nameBuffer[1024]; - int rc = WideCharToMultiByte(CP_ACP, 0, pAddress->FriendlyName, -1, nameBuffer, sizeof(nameBuffer), NULL, NULL); - if (rc) name = nameBuffer; - char displayNameBuffer[1024]; - rc = WideCharToMultiByte(CP_ACP, 0, pAddress->Description, -1, displayNameBuffer, sizeof(displayNameBuffer), NULL, NULL); - if (rc) displayName = displayNameBuffer; -#endif - - bool isUp = (pAddress->OperStatus == IfOperStatusUp); - bool isIP = (0 != pAddress->FirstUnicastAddress); - if (((ipOnly && isIP) || !ipOnly) && ((upOnly && isUp) || !upOnly)) - { - NetworkInterface ni(name, displayName, adapterName, ifIndex); - // Create interface even if it has an empty list of addresses; also, set - // physical attributes which are protocol independent (name, media type, - // MAC address, MTU, operational status, etc). - Map::iterator ifIt = result.find(ifIndex); - if (ifIt == result.end()) - ifIt = result.insert(Map::value_type(ifIndex, ni)).first; - - ifIt->second.impl().setFlags(pAddress->Flags, pAddress->IfType); - ifIt->second.impl().setMTU(pAddress->Mtu); - ifIt->second.impl().setUp(pAddress->OperStatus == IfOperStatusUp); -#if (_WIN32_WINNT >= 0x0600) // Vista and newer only - if ((osvi.dwMajorVersion >= 6) && - (osvi.dwMinorVersion >= 0) && - (osvi.dwBuildNumber >= 0)) - { - ifIt->second.impl().setRunning(pAddress->ReceiveLinkSpeed > 0 || pAddress->TransmitLinkSpeed > 0); - } -#endif - ifIt->second.impl().setType(fromNative(pAddress->IfType)); - if (pAddress->PhysicalAddressLength) - ifIt->second.impl().setMACAddress(pAddress->PhysicalAddress, pAddress->PhysicalAddressLength); - - for (PIP_ADAPTER_UNICAST_ADDRESS pUniAddr = pAddress->FirstUnicastAddress; - pUniAddr; - pUniAddr = pUniAddr->Next) - { - address = IPAddress(pUniAddr->Address); - ADDRESS_FAMILY family = pUniAddr->Address.lpSockaddr->sa_family; - switch (family) - { - case AF_INET: - { - // Windows lists broadcast address on localhost - bool hasBroadcast = (pAddress->IfType == IF_TYPE_ETHERNET_CSMACD) || (pAddress->IfType == IF_TYPE_SOFTWARE_LOOPBACK) || (pAddress->IfType == IF_TYPE_IEEE80211); - if (hasBroadcast) - { - // On Windows, a valid broadcast address will be all 1's (== address | ~subnetMask); additionaly, on pre-Vista versions of - // OS, master address structure does not contain member for prefix length; we go an extra mile here in order to make sure - // we reflect the actual values held by system and protect against misconfiguration (e.g. bad DHCP config entry) - ULONG prefixLength = 0; -#if defined(_WIN32_WCE) - #if _WIN32_WCE >= 0x0800 - prefixLength = pUniAddr->OnLinkPrefixLength; - broadcastAddress = getBroadcastAddress(pAddress->FirstPrefix, address); - #else - broadcastAddress = getBroadcastAddress(pAddress->FirstPrefix, address, &prefixLength); - #endif - // if previous call did not do it, make last-ditch attempt for prefix and broadcast - if (prefixLength == 0 && pAddress->FirstPrefix) - prefixLength = pAddress->FirstPrefix->PrefixLength; - poco_assert (prefixLength <= 32); - if (broadcastAddress.isWildcard()) - { - IPAddress mask(static_cast(prefixLength), IPAddress::IPv4); - IPAddress host(mask & address); - broadcastAddress = host | ~mask; - } -#elif (_WIN32_WINNT >= 0x0501) && (NTDDI_VERSION >= 0x05010100) // Win XP SP1 - #if (_WIN32_WINNT >= 0x0600) // Vista and newer - if (osvi.dwMajorVersion >= 6) - { - prefixLength = pUniAddr->OnLinkPrefixLength; - broadcastAddress = getBroadcastAddress(pAddress->FirstPrefix, address); - } - else - { - broadcastAddress = getBroadcastAddress(pAddress->FirstPrefix, address, &prefixLength); - } - #else - broadcastAddress = getBroadcastAddress(pAddress->FirstPrefix, address, &prefixLength); - #endif - poco_assert (prefixLength <= 32); - if (broadcastAddress.isWildcard()) - { - IPAddress mask(static_cast(prefixLength), IPAddress::IPv4); - IPAddress host(mask & address); - broadcastAddress = host | ~mask; - } -#endif // (_WIN32_WINNT >= 0x0501) && (NTDDI_VERSION >= 0x05010100) - if (prefixLength) - { - subnetMask = IPAddress(static_cast(prefixLength), IPAddress::IPv4); - } - else // if all of the above fails, look up the subnet mask in the registry - { - address = IPAddress(&reinterpret_cast(pUniAddr->Address.lpSockaddr)->sin_addr, sizeof(in_addr)); - subnetMask = subnetMaskForInterface(name, address.isLoopback()); - if (!address.isLoopback()) - { - broadcastAddress = address; - broadcastAddress.mask(subnetMask, IPAddress::broadcast()); - } - } - ifIt->second.addAddress(address, subnetMask, broadcastAddress); - } - else - { - ifIt->second.addAddress(address); - } - } - break; -#if defined(POCO_HAVE_IPv6) - case AF_INET6: - ifIt->second.addAddress(address); - break; -#endif - } // switch family - } // for addresses - } // if ipOnly/upOnly - } // for adapters - return result; -} - - -} } // namespace Poco::Net - - -#elif defined(POCO_VXWORKS) -// -// VxWorks -// - -#error TODO - -/* -namespace Poco { -namespace Net { - - -NetworkInterface::NetworkInterfaceList NetworkInterface::list() -{ - FastMutex::ScopedLock lock(_mutex); - NetworkInterfaceList result; - - int ifIndex = 1; - char ifName[32]; - char ifAddr[INET_ADDR_LEN]; - - for (;;) - { - if (ifIndexToIfName(ifIndex, ifName) == OK) - { - std::string name(ifName); - IPAddress addr; - IPAddress mask; - IPAddress bcst; - if (ifAddrGet(ifName, ifAddr) == OK) - { - addr = IPAddress(std::string(ifAddr)); - } - int ifMask; - if (ifMaskGet(ifName, &ifMask) == OK) - { - mask = IPAddress(&ifMask, sizeof(ifMask)); - } - if (ifBroadcastGet(ifName, ifAddr) == OK) - { - bcst = IPAddress(std::string(ifAddr)); - } - result.push_back(NetworkInterface(name, name, name, addr, mask, bcst)); - ifIndex++; - } - else break; - } - - return result; -} - - -} } // namespace Poco::Net -*/ - -#elif defined(POCO_OS_FAMILY_BSD) || (POCO_OS == POCO_OS_QNX) || (POCO_OS == POCO_OS_SOLARIS) -// -// BSD variants, QNX(?) and Solaris -// -#include -#include -#include -#include -#include -#ifndef POCO_NO_NET_IFTYPES -#include -#endif - - -namespace Poco { -namespace Net { - - -namespace { - -NetworkInterface::Type fromNative(u_char nativeType) -{ - switch (nativeType) - { -#ifndef POCO_NO_NET_IFTYPES - case IFT_ETHER: return NetworkInterface::NI_TYPE_ETHERNET_CSMACD; - case IFT_ISO88025: return NetworkInterface::NI_TYPE_ISO88025_TOKENRING; - case IFT_FRELAY: return NetworkInterface::NI_TYPE_FRAMERELAY; - case IFT_PPP: return NetworkInterface::NI_TYPE_PPP; - case IFT_LOOP: return NetworkInterface::NI_TYPE_SOFTWARE_LOOPBACK; - case IFT_ATM: return NetworkInterface::NI_TYPE_ATM; -#if (POCO_OS != POCO_OS_SOLARIS) - case IFT_IEEE1394: return NetworkInterface::NI_TYPE_IEEE1394; -#endif -#endif - default: return NetworkInterface::NI_TYPE_OTHER; - - } -} - -void setInterfaceParams(struct ifaddrs* iface, NetworkInterfaceImpl& impl) -{ - struct sockaddr_dl* sdl = (struct sockaddr_dl*) iface->ifa_addr; - impl.setName(iface->ifa_name); - impl.setDisplayName(iface->ifa_name); - impl.setAdapterName(iface->ifa_name); - impl.setPhyParams(); - - impl.setMACAddress(LLADDR(sdl), sdl->sdl_alen); - impl.setType(fromNative(sdl->sdl_type)); -} - -} // namespace - - -NetworkInterface::Map NetworkInterface::map(bool ipOnly, bool upOnly) -{ - FastMutex::ScopedLock lock(_mutex); - Map result; - unsigned ifIndex = 0; - NetworkInterface intf; - Map::iterator ifIt; - - struct ifaddrs* ifaces = 0; - struct ifaddrs* currIface = 0; - - if (getifaddrs(&ifaces) < 0) - throw NetException("cannot get network adapter list"); - - try - { - for (currIface = ifaces; currIface != 0; currIface = currIface->ifa_next) - { - if (!currIface->ifa_addr) continue; - - IPAddress address, subnetMask, broadcastAddress; - unsigned family = currIface->ifa_addr->sa_family; - switch (family) - { -#if defined(POCO_OS_FAMILY_BSD) - case AF_LINK: - { - struct sockaddr_dl* sdl = (struct sockaddr_dl*) currIface->ifa_addr; - ifIndex = sdl->sdl_index; - intf = NetworkInterface(ifIndex); - setInterfaceParams(currIface, intf.impl()); - if ((result.find(ifIndex) == result.end()) && ((upOnly && intf.isUp()) || !upOnly)) - ifIt = result.insert(Map::value_type(ifIndex, intf)).first; - break; - } -#endif - case AF_INET: - ifIndex = if_nametoindex(currIface->ifa_name); - ifIt = result.find(ifIndex); - intf = NetworkInterface(ifIndex); - setInterfaceParams(currIface, intf.impl()); - if ((ifIt == result.end()) && ((upOnly && intf.isUp()) || !upOnly)) - ifIt = result.insert(Map::value_type(ifIndex, intf)).first; - - address = IPAddress(*(currIface->ifa_addr)); - - if (( currIface->ifa_flags & IFF_LOOPBACK ) == 0 && currIface->ifa_netmask) - subnetMask = IPAddress(*(currIface->ifa_netmask)); - - if (currIface->ifa_flags & IFF_BROADCAST && currIface->ifa_broadaddr) - broadcastAddress = IPAddress(*(currIface->ifa_broadaddr)); - else if (currIface->ifa_flags & IFF_POINTOPOINT && currIface->ifa_dstaddr) - broadcastAddress = IPAddress(*(currIface->ifa_dstaddr)); - else - broadcastAddress = IPAddress(); - break; -#if defined(POCO_HAVE_IPv6) - case AF_INET6: - ifIndex = if_nametoindex(currIface->ifa_name); - ifIt = result.find(ifIndex); - intf = NetworkInterface(ifIndex); - setInterfaceParams(currIface, intf.impl()); - if ((ifIt == result.end()) && ((upOnly && intf.isUp()) || !upOnly)) - ifIt = result.insert(Map::value_type(ifIndex, intf)).first; - - address = IPAddress(&reinterpret_cast(currIface->ifa_addr)->sin6_addr, - sizeof(struct in6_addr), ifIndex); - subnetMask = IPAddress(*(currIface->ifa_netmask)); - broadcastAddress = IPAddress(); - break; -#endif - default: - continue; - } - - if (family == AF_INET -#ifdef POCO_HAVE_IPv6 - || family == AF_INET6 -#endif - ) - { - if ((upOnly && intf.isUp()) || !upOnly) - { - if ((ifIt = result.find(ifIndex)) != result.end()) - ifIt->second.addAddress(address, subnetMask, broadcastAddress); - } - } - } - } - catch (...) - { - } - if (ifaces) freeifaddrs(ifaces); - - if (ipOnly) - { - Map::iterator it = result.begin(); - Map::iterator end = result.end(); - for (; it != end;) - { - if (!it->second.supportsIPv4() && !it->second.supportsIPv6()) - result.erase(it++); - else ++it; - } - } - - return result; -} - - -} } // namespace Poco::Net - - -#elif POCO_OS == POCO_OS_LINUX -// -// Linux -// - - -#include -#ifndef POCO_ANDROID // Android doesn't have -#include -#endif -#include -#include -#include -#include - -namespace Poco { -namespace Net { - - -namespace { - -static NetworkInterface::Type fromNative(unsigned arphrd) -{ - switch (arphrd) - { - case ARPHRD_ETHER: return NetworkInterface::NI_TYPE_ETHERNET_CSMACD; - case ARPHRD_IEEE802: return NetworkInterface::NI_TYPE_ISO88025_TOKENRING; - case ARPHRD_DLCI: return NetworkInterface::NI_TYPE_FRAMERELAY; - case ARPHRD_PPP: return NetworkInterface::NI_TYPE_PPP; - case ARPHRD_LOOPBACK: return NetworkInterface::NI_TYPE_SOFTWARE_LOOPBACK; - case ARPHRD_ATM: return NetworkInterface::NI_TYPE_ATM; - case ARPHRD_IEEE80211: return NetworkInterface::NI_TYPE_IEEE80211; - case ARPHRD_TUNNEL: - case ARPHRD_TUNNEL6: return NetworkInterface::NI_TYPE_TUNNEL; - case ARPHRD_IEEE1394: return NetworkInterface::NI_TYPE_IEEE1394; - default: return NetworkInterface::NI_TYPE_OTHER; - } -} - -#ifndef POCO_ANDROID - -void setInterfaceParams(struct ifaddrs* iface, NetworkInterfaceImpl& impl) -{ - struct sockaddr_ll* sdl = (struct sockaddr_ll*) iface->ifa_addr; - impl.setName(iface->ifa_name); - impl.setDisplayName(iface->ifa_name); - impl.setAdapterName(iface->ifa_name); - impl.setPhyParams(); - - impl.setMACAddress(sdl->sll_addr, sdl->sll_halen); - impl.setType(fromNative(sdl->sll_hatype)); -} - -#endif - -} - - -NetworkInterface::Map NetworkInterface::map(bool ipOnly, bool upOnly) -{ -#ifndef POCO_ANDROID - FastMutex::ScopedLock lock(_mutex); - Map result; - unsigned ifIndex = 0; - NetworkInterface intf; - Map::iterator ifIt; - - struct ifaddrs* ifaces = 0; - struct ifaddrs* iface = 0; - - if (getifaddrs(&ifaces) < 0) - throw NetException("cannot get network adapter list"); - - try - { - for (iface = ifaces; iface; iface = iface->ifa_next) - { - if (!iface->ifa_addr) continue; - - IPAddress address, subnetMask, broadcastAddress; - unsigned family = iface->ifa_addr->sa_family; - switch (family) - { - case AF_PACKET: - { - struct sockaddr_ll* sll = (struct sockaddr_ll*)iface->ifa_addr; - ifIndex = sll->sll_ifindex; - intf = NetworkInterface(ifIndex); - setInterfaceParams(iface, intf.impl()); - - if ((result.find(ifIndex) == result.end()) && ((upOnly && intf.isUp()) || !upOnly)) - ifIt = result.insert(Map::value_type(ifIndex, intf)).first; - - break; - } - case AF_INET: - ifIndex = if_nametoindex(iface->ifa_name); - ifIt = result.find(ifIndex); - intf = NetworkInterface(ifIndex); - setInterfaceParams(iface, intf.impl()); - - if ((ifIt == result.end()) && ((upOnly && intf.isUp()) || !upOnly)) - ifIt = result.insert(Map::value_type(ifIndex, intf)).first; - - address = IPAddress(*(iface->ifa_addr)); - subnetMask = IPAddress(*(iface->ifa_netmask)); - - if (iface->ifa_flags & IFF_BROADCAST && iface->ifa_broadaddr) - broadcastAddress = IPAddress(*(iface->ifa_broadaddr)); - else if (iface->ifa_flags & IFF_POINTOPOINT && iface->ifa_dstaddr) - broadcastAddress = IPAddress(*(iface->ifa_dstaddr)); - else - broadcastAddress = IPAddress(); - - break; -#if defined(POCO_HAVE_IPv6) - case AF_INET6: - ifIndex = if_nametoindex(iface->ifa_name); - ifIt = result.find(ifIndex); - intf = NetworkInterface(ifIndex); - setInterfaceParams(iface, intf.impl()); - - if ((ifIt == result.end()) && ((upOnly && intf.isUp()) || !upOnly)) - result.insert(Map::value_type(ifIndex, intf)); - - address = IPAddress(&reinterpret_cast(iface->ifa_addr)->sin6_addr, sizeof(struct in6_addr), ifIndex); - subnetMask = IPAddress(*(iface->ifa_netmask)); - broadcastAddress = IPAddress(); - - break; -#endif - default: - continue; - } - - if (family == AF_INET -#ifdef POCO_HAVE_IPv6 - || family == AF_INET6 -#endif - ) - { - intf = NetworkInterface(std::string(iface->ifa_name), address, subnetMask, broadcastAddress, ifIndex); - if ((upOnly && intf.isUp()) || !upOnly) - { - if ((ifIt = result.find(ifIndex)) != result.end()) - ifIt->second.addAddress(address, subnetMask, broadcastAddress); - } - } - } // for interface - } - catch (...) - { - if (ifaces) freeifaddrs(ifaces); - throw; - } - - if (ifaces) freeifaddrs(ifaces); - - if (ipOnly) - { - Map::iterator it = result.begin(); - Map::iterator end = result.end(); - for (; it != end;) - { - if (!it->second.supportsIPv4() && !it->second.supportsIPv6()) - result.erase(it++); - else ++it; - } - } - - return result; -#else - throw Poco::NotImplementedException("Not implemented in Android"); -#endif -} - - -} } // namespace Poco::Net - - -#else -// -// Non-BSD Unix variants -// -#error TODO -/* -NetworkInterface::NetworkInterfaceList NetworkInterface::list() -{ - FastMutex::ScopedLock lock(_mutex); - NetworkInterfaceList result; - DatagramSocket socket; - // the following code is loosely based - // on W. Richard Stevens, UNIX Network Programming, pp 434ff. - int lastlen = 0; - int len = 100*sizeof(struct ifreq); - char* buf = 0; - try - { - struct ifconf ifc; - for (;;) - { - buf = new char[len]; - ifc.ifc_len = len; - ifc.ifc_buf = buf; - if (::ioctl(socket.impl()->sockfd(), SIOCGIFCONF, &ifc) < 0) - { - if (errno != EINVAL || lastlen != 0) - throw NetException("cannot get network adapter list"); - } - else - { - if (ifc.ifc_len == lastlen) - break; - lastlen = ifc.ifc_len; - } - len += 10*sizeof(struct ifreq); - delete [] buf; - } - for (const char* ptr = buf; ptr < buf + ifc.ifc_len;) - { - const struct ifreq* ifr = reinterpret_cast(ptr); -#if defined(POCO_HAVE_SALEN) - len = ifr->ifr_addr.sa_len; - if (sizeof(struct sockaddr) > len) len = sizeof(struct sockaddr); -#else - len = sizeof(struct sockaddr); -#endif - IPAddress addr; - bool haveAddr = false; - int ifIndex(-1); - switch (ifr->ifr_addr.sa_family) - { -#if defined(POCO_HAVE_IPv6) - case AF_INET6: - ifIndex = if_nametoindex(ifr->ifr_name); - if (len < sizeof(struct sockaddr_in6)) len = sizeof(struct sockaddr_in6); - addr = IPAddress(&reinterpret_cast(&ifr->ifr_addr)->sin6_addr, sizeof(struct in6_addr), ifIndex); - haveAddr = true; - break; -#endif - case AF_INET: - if (len < sizeof(struct sockaddr_in)) len = sizeof(struct sockaddr_in); - addr = IPAddress(ifr->ifr_addr); - haveAddr = true; - break; - default: - break; - } - if (haveAddr) - { - std::string name(ifr->ifr_name); - result.push_back(NetworkInterface(name, name, name, addr, ifIndex)); - } - len += sizeof(ifr->ifr_name); - ptr += len; - } - } - catch (...) - { - delete [] buf; - throw; - } - delete [] buf; - return result; -} -*/ - -} } // namespace Poco::Net - - -#endif - - -#endif // POCO_NET_HAS_INTERFACE diff --git a/contrib/libpoco/Net/src/NullPartHandler.cpp b/contrib/libpoco/Net/src/NullPartHandler.cpp deleted file mode 100644 index 77ad042bfb9..00000000000 --- a/contrib/libpoco/Net/src/NullPartHandler.cpp +++ /dev/null @@ -1,48 +0,0 @@ -// -// NullPartHandler.cpp -// -// $Id: //poco/1.4/Net/src/NullPartHandler.cpp#1 $ -// -// Library: Net -// Package: Messages -// Module: NullPartHandler -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "Poco/Net/NullPartHandler.h" -#include "Poco/Net/MessageHeader.h" -#include "Poco/NullStream.h" -#include "Poco/StreamCopier.h" - - -using Poco::NullOutputStream; -using Poco::StreamCopier; - - -namespace Poco { -namespace Net { - - -NullPartHandler::NullPartHandler() -{ -} - - -NullPartHandler::~NullPartHandler() -{ -} - - -void NullPartHandler::handlePart(const MessageHeader& header, std::istream& stream) -{ - NullOutputStream ostr; - StreamCopier::copyStream(stream, ostr); -} - - -} } // namespace Poco::Net diff --git a/contrib/libpoco/Net/src/OAuth10Credentials.cpp b/contrib/libpoco/Net/src/OAuth10Credentials.cpp deleted file mode 100644 index c0f6f01c762..00000000000 --- a/contrib/libpoco/Net/src/OAuth10Credentials.cpp +++ /dev/null @@ -1,367 +0,0 @@ -// -// OAuth10Credentials.cpp -// -// $Id$ -// -// Library: Net -// Package: OAuth -// Module: OAuth10Credentials -// -// Copyright (c) 2014, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "Poco/Net/OAuth10Credentials.h" -#include "Poco/Net/HTTPRequest.h" -#include "Poco/Net/HTMLForm.h" -#include "Poco/Net/NetException.h" -#include "Poco/Net/HTTPAuthenticationParams.h" -#include "Poco/SHA1Engine.h" -#include "Poco/HMACEngine.h" -#include "Poco/Base64Encoder.h" -#include "Poco/RandomStream.h" -#include "Poco/Timestamp.h" -#include "Poco/NumberParser.h" -#include "Poco/NumberFormatter.h" -#include "Poco/Format.h" -#include "Poco/String.h" -#include -#include - - -namespace Poco { -namespace Net { - - -const std::string OAuth10Credentials::SCHEME = "OAuth"; - - -OAuth10Credentials::OAuth10Credentials() -{ -} - - -OAuth10Credentials::OAuth10Credentials(const std::string& consumerKey, const std::string& consumerSecret): - _consumerKey(consumerKey), - _consumerSecret(consumerSecret) -{ -} - - -OAuth10Credentials::OAuth10Credentials(const std::string& consumerKey, const std::string& consumerSecret, const std::string& token, const std::string& tokenSecret): - _consumerKey(consumerKey), - _consumerSecret(consumerSecret), - _token(token), - _tokenSecret(tokenSecret) -{ -} - - -OAuth10Credentials::OAuth10Credentials(const Poco::Net::HTTPRequest& request) -{ - if (request.hasCredentials()) - { - std::string authScheme; - std::string authParams; - request.getCredentials(authScheme, authParams); - if (icompare(authScheme, SCHEME) == 0) - { - HTTPAuthenticationParams params(authParams); - std::string consumerKey = params.get("oauth_consumer_key", ""); - URI::decode(consumerKey, _consumerKey); - std::string token = params.get("oauth_token", ""); - URI::decode(token, _token); - std::string callback = params.get("oauth_callback", ""); - URI::decode(callback, _callback); - } - else throw NotAuthenticatedException("No OAuth credentials in Authorization header", authScheme); - } - else throw NotAuthenticatedException("No Authorization header found"); -} - - -OAuth10Credentials::~OAuth10Credentials() -{ -} - - -void OAuth10Credentials::setConsumerKey(const std::string& consumerKey) -{ - _consumerKey = consumerKey; -} - - -void OAuth10Credentials::setConsumerSecret(const std::string& consumerSecret) -{ - _consumerSecret = consumerSecret; -} - - -void OAuth10Credentials::setToken(const std::string& token) -{ - _token = token; -} - - -void OAuth10Credentials::setTokenSecret(const std::string& tokenSecret) -{ - _tokenSecret = tokenSecret; -} - - -void OAuth10Credentials::setRealm(const std::string& realm) -{ - _realm = realm; -} - - -void OAuth10Credentials::setCallback(const std::string& callback) -{ - _callback = callback; -} - - -void OAuth10Credentials::authenticate(HTTPRequest& request, const Poco::URI& uri, SignatureMethod method) -{ - HTMLForm emptyParams; - authenticate(request, uri, emptyParams, method); -} - - -void OAuth10Credentials::authenticate(HTTPRequest& request, const Poco::URI& uri, const Poco::Net::HTMLForm& params, SignatureMethod method) -{ - if (method == SIGN_PLAINTEXT) - { - signPlaintext(request); - } - else - { - URI uriWithoutQuery(uri); - uriWithoutQuery.setQuery(""); - uriWithoutQuery.setFragment(""); - signHMACSHA1(request, uriWithoutQuery.toString(), params); - } -} - - -bool OAuth10Credentials::verify(const HTTPRequest& request, const Poco::URI& uri) -{ - HTMLForm params; - return verify(request, uri, params); -} - - -bool OAuth10Credentials::verify(const HTTPRequest& request, const Poco::URI& uri, const Poco::Net::HTMLForm& params) -{ - if (request.hasCredentials()) - { - std::string authScheme; - std::string authParams; - request.getCredentials(authScheme, authParams); - if (icompare(authScheme, SCHEME) == 0) - { - HTTPAuthenticationParams oauthParams(authParams); - - std::string version = oauthParams.get("oauth_version", "1.0"); - if (version != "1.0") throw NotAuthenticatedException("Unsupported OAuth version", version); - - _consumerKey.clear(); - std::string consumerKey = oauthParams.get("oauth_consumer_key", ""); - URI::decode(consumerKey, _consumerKey); - - _token.clear(); - std::string token = oauthParams.get("oauth_token", ""); - URI::decode(token, _token); - - _callback.clear(); - std::string callback = oauthParams.get("oauth_callback", ""); - URI::decode(callback, _callback); - - std::string nonceEnc = oauthParams.get("oauth_nonce", ""); - std::string nonce; - URI::decode(nonceEnc, nonce); - - std::string timestamp = oauthParams.get("oauth_timestamp", ""); - - std::string method = oauthParams.get("oauth_signature_method", ""); - - std::string signatureEnc = oauthParams.get("oauth_signature", ""); - std::string signature; - URI::decode(signatureEnc, signature); - - std::string refSignature; - if (icompare(method, "PLAINTEXT") == 0) - { - refSignature = percentEncode(_consumerSecret); - refSignature += '&'; - refSignature += percentEncode(_tokenSecret); - } - else if (icompare(method, "HMAC-SHA1") == 0) - { - URI uriWithoutQuery(uri); - uriWithoutQuery.setQuery(""); - uriWithoutQuery.setFragment(""); - refSignature = createSignature(request, uriWithoutQuery.toString(), params, nonce, timestamp); - } - else throw NotAuthenticatedException("Unsupported OAuth signature method", method); - - return refSignature == signature; - } - else throw NotAuthenticatedException("No OAuth credentials found in Authorization header"); - } - else throw NotAuthenticatedException("No Authorization header found"); -} - - -void OAuth10Credentials::nonceAndTimestampForTesting(const std::string& nonce, const std::string& timestamp) -{ - _nonce = nonce; - _timestamp = timestamp; -} - - -void OAuth10Credentials::signPlaintext(Poco::Net::HTTPRequest& request) const -{ - std::string signature(percentEncode(_consumerSecret)); - signature += '&'; - signature += percentEncode(_tokenSecret); - - std::string authorization(SCHEME); - if (!_realm.empty()) - { - Poco::format(authorization, " realm=\"%s\",", _realm); - } - Poco::format(authorization, " oauth_consumer_key=\"%s\"", percentEncode(_consumerKey)); - Poco::format(authorization, ", oauth_signature=\"%s\"", percentEncode(signature)); - authorization += ", oauth_signature_method=\"PLAINTEXT\""; - if (!_token.empty()) - { - Poco::format(authorization, ", oauth_token=\"%s\"", percentEncode(_token)); - } - if (!_callback.empty()) - { - Poco::format(authorization, ", oauth_callback=\"%s\"", percentEncode(_callback)); - } - authorization += ", oauth_version=\"1.0\""; - - request.set(HTTPRequest::AUTHORIZATION, authorization); -} - - -void OAuth10Credentials::signHMACSHA1(Poco::Net::HTTPRequest& request, const std::string& uri, const Poco::Net::HTMLForm& params) const -{ - std::string nonce(_nonce); - if (nonce.empty()) - { - nonce = createNonce(); - } - std::string timestamp(_timestamp); - if (timestamp.empty()) - { - timestamp = Poco::NumberFormatter::format(Poco::Timestamp().epochTime()); - } - std::string signature(createSignature(request, uri, params, nonce, timestamp)); - - std::string authorization(SCHEME); - if (!_realm.empty()) - { - Poco::format(authorization, " realm=\"%s\",", _realm); - } - Poco::format(authorization, " oauth_consumer_key=\"%s\"", percentEncode(_consumerKey)); - Poco::format(authorization, ", oauth_nonce=\"%s\"", percentEncode(nonce)); - Poco::format(authorization, ", oauth_signature=\"%s\"", percentEncode(signature)); - authorization += ", oauth_signature_method=\"HMAC-SHA1\""; - Poco::format(authorization, ", oauth_timestamp=\"%s\"", timestamp); - if (!_token.empty()) - { - Poco::format(authorization, ", oauth_token=\"%s\"", percentEncode(_token)); - } - if (!_callback.empty()) - { - Poco::format(authorization, ", oauth_callback=\"%s\"", percentEncode(_callback)); - } - authorization += ", oauth_version=\"1.0\""; - - request.set(HTTPRequest::AUTHORIZATION, authorization); -} - - -std::string OAuth10Credentials::createNonce() const -{ - std::ostringstream base64Nonce; - Poco::Base64Encoder base64Encoder(base64Nonce); - Poco::RandomInputStream randomStream; - for (int i = 0; i < 32; i++) - { - base64Encoder.put(randomStream.get()); - } - base64Encoder.close(); - std::string nonce = base64Nonce.str(); - return Poco::translate(nonce, "+/=", ""); -} - - -std::string OAuth10Credentials::createSignature(const Poco::Net::HTTPRequest& request, const std::string& uri, const Poco::Net::HTMLForm& params, const std::string& nonce, const std::string& timestamp) const -{ - std::map paramsMap; - paramsMap["oauth_version"] = "1.0"; - paramsMap["oauth_consumer_key"] = percentEncode(_consumerKey); - paramsMap["oauth_nonce"] = percentEncode(nonce); - paramsMap["oauth_signature_method"] = "HMAC-SHA1"; - paramsMap["oauth_timestamp"] = timestamp; - if (!_token.empty()) - { - paramsMap["oauth_token"] = percentEncode(_token); - } - if (!_callback.empty()) - { - paramsMap["oauth_callback"] = percentEncode(_callback); - } - for (Poco::Net::HTMLForm::ConstIterator it = params.begin(); it != params.end(); ++it) - { - paramsMap[percentEncode(it->first)] = percentEncode(it->second); - } - - std::string paramsString; - for (std::map::const_iterator it = paramsMap.begin(); it != paramsMap.end(); ++it) - { - if (it != paramsMap.begin()) paramsString += '&'; - paramsString += it->first; - paramsString += "="; - paramsString += it->second; - } - - std::string signatureBase = request.getMethod(); - signatureBase += '&'; - signatureBase += percentEncode(uri); - signatureBase += '&'; - signatureBase += percentEncode(paramsString); - - std::string signingKey; - signingKey += percentEncode(_consumerSecret); - signingKey += '&'; - signingKey += percentEncode(_tokenSecret); - - Poco::HMACEngine hmacEngine(signingKey); - hmacEngine.update(signatureBase); - Poco::DigestEngine::Digest digest = hmacEngine.digest(); - std::ostringstream digestBase64; - Poco::Base64Encoder base64Encoder(digestBase64); - base64Encoder.write(reinterpret_cast(&digest[0]), digest.size()); - base64Encoder.close(); - return digestBase64.str(); -} - - -std::string OAuth10Credentials::percentEncode(const std::string& str) -{ - std::string encoded; - Poco::URI::encode(str, "!?#/'\",;:$&()[]*+=@", encoded); - return encoded; -} - - -} } // namespace Poco::Net diff --git a/contrib/libpoco/Net/src/OAuth20Credentials.cpp b/contrib/libpoco/Net/src/OAuth20Credentials.cpp deleted file mode 100644 index 36e79701d58..00000000000 --- a/contrib/libpoco/Net/src/OAuth20Credentials.cpp +++ /dev/null @@ -1,107 +0,0 @@ -// -// OAuth20Credentials.cpp -// -// $Id$ -// -// Library: Net -// Package: OAuth -// Module: OAuth20Credentials -// -// Copyright (c) 2014, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "Poco/Net/OAuth20Credentials.h" -#include "Poco/Net/HTTPRequest.h" -#include "Poco/Net/NetException.h" -#include "Poco/String.h" - - -namespace Poco { -namespace Net { - - -const std::string OAuth20Credentials::SCHEME = "Bearer"; - - -OAuth20Credentials::OAuth20Credentials(): - _scheme(SCHEME) -{ -} - - -OAuth20Credentials::OAuth20Credentials(const std::string& bearerToken): - _bearerToken(bearerToken), - _scheme(SCHEME) -{ -} - - -OAuth20Credentials::OAuth20Credentials(const std::string& bearerToken, const std::string& scheme): - _bearerToken(bearerToken), - _scheme(scheme) -{ -} - - -OAuth20Credentials::OAuth20Credentials(const HTTPRequest& request): - _scheme(SCHEME) -{ - extractBearerToken(request); -} - - -OAuth20Credentials::OAuth20Credentials(const HTTPRequest& request, const std::string& scheme): - _scheme(scheme) -{ - extractBearerToken(request); -} - - -OAuth20Credentials::~OAuth20Credentials() -{ -} - - -void OAuth20Credentials::setBearerToken(const std::string& bearerToken) -{ - _bearerToken = bearerToken; -} - - -void OAuth20Credentials::setScheme(const std::string& scheme) -{ - _scheme = scheme; -} - - -void OAuth20Credentials::authenticate(HTTPRequest& request) -{ - std::string auth(_scheme); - auth += ' '; - auth += _bearerToken; - request.set(HTTPRequest::AUTHORIZATION, auth); -} - - -void OAuth20Credentials::extractBearerToken(const HTTPRequest& request) -{ - if (request.hasCredentials()) - { - std::string authScheme; - std::string authInfo; - request.getCredentials(authScheme, authInfo); - if (icompare(authScheme, _scheme) == 0) - { - _bearerToken = authInfo; - } - else throw NotAuthenticatedException("No bearer token in Authorization header", authScheme); - } - else throw NotAuthenticatedException("No Authorization header found"); -} - - -} } // namespace Poco::Net diff --git a/contrib/libpoco/Net/src/POP3ClientSession.cpp b/contrib/libpoco/Net/src/POP3ClientSession.cpp deleted file mode 100644 index b6eadd57775..00000000000 --- a/contrib/libpoco/Net/src/POP3ClientSession.cpp +++ /dev/null @@ -1,282 +0,0 @@ -// -// POP3ClientSession.cpp -// -// $Id: //poco/1.4/Net/src/POP3ClientSession.cpp#1 $ -// -// Library: Net -// Package: Mail -// Module: POP3ClientSession -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "Poco/Net/POP3ClientSession.h" -#include "Poco/Net/MailMessage.h" -#include "Poco/Net/MailStream.h" -#include "Poco/Net/SocketAddress.h" -#include "Poco/Net/NetException.h" -#include "Poco/StreamCopier.h" -#include "Poco/NumberFormatter.h" -#include "Poco/UnbufferedStreamBuf.h" -#include "Poco/Ascii.h" -#include - - -using Poco::NumberFormatter; -using Poco::StreamCopier; - - -namespace Poco { -namespace Net { - - -class DialogStreamBuf: public Poco::UnbufferedStreamBuf -{ -public: - DialogStreamBuf(DialogSocket& socket): - _socket(socket) - { - } - - ~DialogStreamBuf() - { - } - -private: - int readFromDevice() - { - return _socket.get(); - } - - DialogSocket& _socket; -}; - - -class DialogIOS: public virtual std::ios -{ -public: - DialogIOS(DialogSocket& socket): - _buf(socket) - { - poco_ios_init(&_buf); - } - - ~DialogIOS() - { - } - - DialogStreamBuf* rdbuf() - { - return &_buf; - } - -protected: - DialogStreamBuf _buf; -}; - - -class DialogInputStream: public DialogIOS, public std::istream -{ -public: - DialogInputStream(DialogSocket& socket): - DialogIOS(socket), - std::istream(&_buf) - { - } - - ~DialogInputStream() - { - } -}; - - -POP3ClientSession::POP3ClientSession(const StreamSocket& socket): - _socket(socket), - _isOpen(true) -{ -} - - -POP3ClientSession::POP3ClientSession(const std::string& host, Poco::UInt16 port): - _socket(SocketAddress(host, port)), - _isOpen(true) -{ -} - - -POP3ClientSession::~POP3ClientSession() -{ - try - { - close(); - } - catch (...) - { - } -} - - -void POP3ClientSession::setTimeout(const Poco::Timespan& timeout) -{ - _socket.setReceiveTimeout(timeout); -} - - -Poco::Timespan POP3ClientSession::getTimeout() const -{ - return _socket.getReceiveTimeout(); -} - - -void POP3ClientSession::login(const std::string& username, const std::string& password) -{ - std::string response; - _socket.receiveMessage(response); - if (!isPositive(response)) throw POP3Exception("The POP3 service is unavailable", response); - sendCommand("USER", username, response); - if (!isPositive(response)) throw POP3Exception("Login rejected for user", response); - sendCommand("PASS", password, response); - if (!isPositive(response)) throw POP3Exception("Password rejected for user", response); -} - - -void POP3ClientSession::close() -{ - if (_isOpen) - { - std::string response; - sendCommand("QUIT", response); - _socket.close(); - _isOpen = false; - } -} - - -int POP3ClientSession::messageCount() -{ - std::string response; - sendCommand("STAT", response); - if (!isPositive(response)) throw POP3Exception("Cannot determine message count", response); - std::string::const_iterator it = response.begin(); - std::string::const_iterator end = response.end(); - int count = 0; - while (it != end && !Poco::Ascii::isSpace(*it)) ++it; - while (it != end && Poco::Ascii::isSpace(*it)) ++it; - while (it != end && Poco::Ascii::isDigit(*it)) count = count*10 + *it++ - '0'; - return count; -} - - -void POP3ClientSession::listMessages(MessageInfoVec& messages) -{ - messages.clear(); - std::string response; - sendCommand("LIST", response); - if (!isPositive(response)) throw POP3Exception("Cannot get message list", response); - _socket.receiveMessage(response); - while (response != ".") - { - MessageInfo info = {0, 0}; - std::string::const_iterator it = response.begin(); - std::string::const_iterator end = response.end(); - while (it != end && Poco::Ascii::isDigit(*it)) info.id = info.id*10 + *it++ - '0'; - while (it != end && Poco::Ascii::isSpace(*it)) ++it; - while (it != end && Poco::Ascii::isDigit(*it)) info.size = info.size*10 + *it++ - '0'; - messages.push_back(info); - _socket.receiveMessage(response); - } -} - - -void POP3ClientSession::retrieveMessage(int id, MailMessage& message) -{ - std::string response; - sendCommand("RETR", NumberFormatter::format(id), response); - if (!isPositive(response)) throw POP3Exception("Cannot retrieve message", response); - DialogInputStream sis(_socket); - MailInputStream mis(sis); - message.read(mis); - while (mis.good()) mis.get(); // read any remaining junk -} - - -void POP3ClientSession::retrieveMessage(int id, MailMessage& message, PartHandler& handler) -{ - std::string response; - sendCommand("RETR", NumberFormatter::format(id), response); - if (!isPositive(response)) throw POP3Exception("Cannot retrieve message", response); - DialogInputStream sis(_socket); - MailInputStream mis(sis); - message.read(mis, handler); - while (mis.good()) mis.get(); // read any remaining junk -} - - -void POP3ClientSession::retrieveMessage(int id, std::ostream& ostr) -{ - std::string response; - sendCommand("RETR", NumberFormatter::format(id), response); - if (!isPositive(response)) throw POP3Exception("Cannot retrieve message", response); - DialogInputStream sis(_socket); - MailInputStream mis(sis); - StreamCopier::copyStream(mis, ostr); -} - - -void POP3ClientSession::retrieveHeader(int id, MessageHeader& header) -{ - std::string response; - sendCommand("TOP", NumberFormatter::format(id), "0", response); - if (!isPositive(response)) throw POP3Exception("Cannot retrieve header", response); - DialogInputStream sis(_socket); - MailInputStream mis(sis); - header.read(mis); - // skip stuff following header - mis.get(); // \r - mis.get(); // \n -} - - -void POP3ClientSession::deleteMessage(int id) -{ - std::string response; - sendCommand("DELE", NumberFormatter::format(id), response); - if (!isPositive(response)) throw POP3Exception("Cannot mark message for deletion", response); -} - - -bool POP3ClientSession::sendCommand(const std::string& command, std::string& response) -{ - _socket.sendMessage(command); - _socket.receiveMessage(response); - return isPositive(response); -} - - -bool POP3ClientSession::sendCommand(const std::string& command, const std::string& arg, std::string& response) -{ - _socket.sendMessage(command, arg); - _socket.receiveMessage(response); - return isPositive(response); -} - - -bool POP3ClientSession::sendCommand(const std::string& command, const std::string& arg1, const std::string& arg2, std::string& response) -{ - _socket.sendMessage(command, arg1, arg2); - _socket.receiveMessage(response); - return isPositive(response); -} - - -bool POP3ClientSession::isPositive(const std::string& response) -{ - return response.length() > 0 && response[0] == '+'; -} - - -} } // namespace Poco::Net diff --git a/contrib/libpoco/Net/src/PartHandler.cpp b/contrib/libpoco/Net/src/PartHandler.cpp deleted file mode 100644 index 293915c18ac..00000000000 --- a/contrib/libpoco/Net/src/PartHandler.cpp +++ /dev/null @@ -1,34 +0,0 @@ -// -// PartHandler.cpp -// -// $Id: //poco/1.4/Net/src/PartHandler.cpp#1 $ -// -// Library: Net -// Package: Messages -// Module: PartHandler -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "Poco/Net/PartHandler.h" - - -namespace Poco { -namespace Net { - - -PartHandler::PartHandler() -{ -} - - -PartHandler::~PartHandler() -{ -} - - -} } // namespace Poco::Net diff --git a/contrib/libpoco/Net/src/PartSource.cpp b/contrib/libpoco/Net/src/PartSource.cpp deleted file mode 100644 index 63b032c27a5..00000000000 --- a/contrib/libpoco/Net/src/PartSource.cpp +++ /dev/null @@ -1,60 +0,0 @@ -// -// PartSource.cpp -// -// $Id: //poco/1.4/Net/src/PartSource.cpp#1 $ -// -// Library: Net -// Package: Messages -// Module: PartSource -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "Poco/Net/PartSource.h" - - -namespace Poco { -namespace Net { - - -const int PartSource::UNKNOWN_CONTENT_LENGTH = -1; - - -PartSource::PartSource(): - _mediaType("application/octet-stream") -{ -} - - -PartSource::PartSource(const std::string& mediaType): - _mediaType(mediaType) -{ -} - - -PartSource::~PartSource() -{ -} - - -namespace -{ - static const std::string EMPTY; -} - - -const std::string& PartSource::filename() const -{ - return EMPTY; -} - -std::streamsize PartSource::getContentLength() const -{ - return UNKNOWN_CONTENT_LENGTH; -} - -} } // namespace Poco::Net diff --git a/contrib/libpoco/Net/src/PartStore.cpp b/contrib/libpoco/Net/src/PartStore.cpp deleted file mode 100644 index 0ad723d9bc1..00000000000 --- a/contrib/libpoco/Net/src/PartStore.cpp +++ /dev/null @@ -1,89 +0,0 @@ -// -// PartStore.cpp -// -// $Id: //poco/1.4/Net/src/PartStore.cpp#1 $ -// -// Library: Net -// Package: Messages -// Module: PartStore -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "Poco/Net/PartStore.h" -#include "Poco/TemporaryFile.h" -#include "Poco/File.h" -#include "Poco/Exception.h" - - -namespace Poco { -namespace Net { - - -// -// PartStore -// - - -PartStore::PartStore(const std::string& mediaType): PartSource(mediaType) -{ -} - - -PartStore::~PartStore() -{ -} - - -// -// FilePartStore -// - - -FilePartStore::FilePartStore(const std::string& content, const std::string& mediaType, const std::string& filename): - PartStore(mediaType), - _filename(filename), - _path(TemporaryFile::tempName()), - _fstr(_path) -{ - _fstr << content << std::flush; - _fstr.seekg(0, std::ios::beg); -} - - -FilePartStore::~FilePartStore() -{ - try - { - _fstr.close(); - File(_path).remove(); - } - catch (...) - { - } -} - - -std::istream& FilePartStore::stream() -{ - return _fstr; -} - - -const std::string& FilePartStore::filename() const -{ - return _filename; -} - - -const std::string& FilePartStore::path() const -{ - return _path; -} - - -} } // namespace Poco::Net diff --git a/contrib/libpoco/Net/src/QuotedPrintableDecoder.cpp b/contrib/libpoco/Net/src/QuotedPrintableDecoder.cpp deleted file mode 100644 index 331d8b148b3..00000000000 --- a/contrib/libpoco/Net/src/QuotedPrintableDecoder.cpp +++ /dev/null @@ -1,104 +0,0 @@ -// -// QuotedPrintableDecoder.cpp -// -// $Id: //poco/1.4/Net/src/QuotedPrintableDecoder.cpp#2 $ -// -// Library: Net -// Package: Messages -// Module: QuotedPrintableDecoder -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "Poco/Net/QuotedPrintableDecoder.h" -#include "Poco/NumberParser.h" -#include "Poco/Exception.h" -#include "Poco/Ascii.h" - - -using Poco::UnbufferedStreamBuf; -using Poco::NumberParser; -using Poco::DataFormatException; - - -namespace Poco { -namespace Net { - - -QuotedPrintableDecoderBuf::QuotedPrintableDecoderBuf(std::istream& istr): - _buf(*istr.rdbuf()) -{ -} - - -QuotedPrintableDecoderBuf::~QuotedPrintableDecoderBuf() -{ -} - - -int QuotedPrintableDecoderBuf::readFromDevice() -{ - int ch = _buf.sbumpc(); - while (ch == '=') - { - ch = _buf.sbumpc(); - if (ch == '\r') - { - ch = _buf.sbumpc(); // read \n - } - else if (Poco::Ascii::isHexDigit(ch)) - { - std::string hex = "0x"; - hex += (char) ch; - ch = _buf.sbumpc(); - if (Poco::Ascii::isHexDigit(ch)) - { - hex += (char) ch; - return NumberParser::parseHex(hex); - } - throw DataFormatException("Incomplete hex number in quoted-printable encoded stream"); - } - else if (ch != '\n') - { - throw DataFormatException("Invalid occurrence of '=' in quoted-printable encoded stream"); - } - ch = _buf.sbumpc(); - } - return ch; -} - - -QuotedPrintableDecoderIOS::QuotedPrintableDecoderIOS(std::istream& istr): _buf(istr) -{ - poco_ios_init(&_buf); -} - - -QuotedPrintableDecoderIOS::~QuotedPrintableDecoderIOS() -{ -} - - -QuotedPrintableDecoderBuf* QuotedPrintableDecoderIOS::rdbuf() -{ - return &_buf; -} - - -QuotedPrintableDecoder::QuotedPrintableDecoder(std::istream& istr): - QuotedPrintableDecoderIOS(istr), - std::istream(&_buf) -{ -} - - -QuotedPrintableDecoder::~QuotedPrintableDecoder() -{ -} - - -} } // namespace Poco::Net diff --git a/contrib/libpoco/Net/src/QuotedPrintableEncoder.cpp b/contrib/libpoco/Net/src/QuotedPrintableEncoder.cpp deleted file mode 100644 index c51f4a48ead..00000000000 --- a/contrib/libpoco/Net/src/QuotedPrintableEncoder.cpp +++ /dev/null @@ -1,152 +0,0 @@ -// -// QuotedPrintableEncoder.cpp -// -// $Id: //poco/1.4/Net/src/QuotedPrintableEncoder.cpp#1 $ -// -// Library: Net -// Package: Messages -// Module: QuotedPrintableEncoder -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "Poco/Net/QuotedPrintableEncoder.h" -#include "Poco/NumberFormatter.h" - - -using Poco::UnbufferedStreamBuf; -using Poco::NumberFormatter; - - -namespace Poco { -namespace Net { - - -QuotedPrintableEncoderBuf::QuotedPrintableEncoderBuf(std::ostream& ostr): - _pending(-1), - _lineLength(0), - _ostr(ostr) -{ -} - - -QuotedPrintableEncoderBuf::~QuotedPrintableEncoderBuf() -{ - try - { - close(); - } - catch (...) - { - } -} - - -int QuotedPrintableEncoderBuf::writeToDevice(char c) -{ - if (_pending != -1) - { - if (_pending == '\r' && c == '\n') - writeRaw((char) _pending); - else if (c == '\r' || c == '\n') - writeEncoded((char) _pending); - else - writeRaw((char) _pending); - _pending = -1; - } - if (c == '\t' || c == ' ') - { - _pending = charToInt(c); - return _pending; - } - else if (c == '\r' || c == '\n' || (c > 32 && c < 127 && c != '=')) - { - writeRaw(c); - } - else - { - writeEncoded(c); - } - return charToInt(c); -} - - -void QuotedPrintableEncoderBuf::writeEncoded(char c) -{ - if (_lineLength >= 73) - { - _ostr << "=\r\n"; - _lineLength = 3; - } - else _lineLength += 3; - _ostr << '=' << NumberFormatter::formatHex((unsigned) charToInt(c), 2); -} - - -void QuotedPrintableEncoderBuf::writeRaw(char c) -{ - if (c == '\r' || c == '\n') - { - _ostr.put(c); - _lineLength = 0; - } - else if (_lineLength < 75) - { - _ostr.put(c); - ++_lineLength; - } - else - { - _ostr << "=\r\n" << c; - _lineLength = 1; - } -} - - -int QuotedPrintableEncoderBuf::close() -{ - sync(); - return _ostr ? 0 : -1; -} - - -QuotedPrintableEncoderIOS::QuotedPrintableEncoderIOS(std::ostream& ostr): _buf(ostr) -{ - poco_ios_init(&_buf); -} - - -QuotedPrintableEncoderIOS::~QuotedPrintableEncoderIOS() -{ -} - - -int QuotedPrintableEncoderIOS::close() -{ - return _buf.close(); -} - - -QuotedPrintableEncoderBuf* QuotedPrintableEncoderIOS::rdbuf() -{ - return &_buf; -} - - -QuotedPrintableEncoder::QuotedPrintableEncoder(std::ostream& ostr): - QuotedPrintableEncoderIOS(ostr), - std::ostream(&_buf) -{ -} - - -QuotedPrintableEncoder::~QuotedPrintableEncoder() -{ -} - - -} } // namespace Poco::Net diff --git a/contrib/libpoco/Net/src/RawSocket.cpp b/contrib/libpoco/Net/src/RawSocket.cpp deleted file mode 100644 index 3506a814ddb..00000000000 --- a/contrib/libpoco/Net/src/RawSocket.cpp +++ /dev/null @@ -1,113 +0,0 @@ -// -// RawSocket.cpp -// -// $Id: //poco/1.4/Net/src/RawSocket.cpp#1 $ -// -// Library: Net -// Package: Sockets -// Module: RawSocket -// -// Copyright (c) 2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "Poco/Net/RawSocket.h" -#include "Poco/Net/RawSocketImpl.h" -#include "Poco/Exception.h" - - -using Poco::InvalidArgumentException; - - -namespace Poco { -namespace Net { - - -RawSocket::RawSocket(): - Socket(new RawSocketImpl) -{ -} - - -RawSocket::RawSocket(IPAddress::Family family, int proto): - Socket(new RawSocketImpl(family, proto)) -{ -} - - -RawSocket::RawSocket(const SocketAddress& address, bool reuseAddress): - Socket(new RawSocketImpl(address.family())) -{ - bind(address, reuseAddress); -} - - -RawSocket::RawSocket(const Socket& socket): Socket(socket) -{ - if (!dynamic_cast(impl())) - throw InvalidArgumentException("Cannot assign incompatible socket"); -} - - -RawSocket::RawSocket(SocketImpl* pImpl): Socket(pImpl) -{ - if (!dynamic_cast(impl())) - throw InvalidArgumentException("Cannot assign incompatible socket"); -} - - -RawSocket::~RawSocket() -{ -} - - -RawSocket& RawSocket::operator = (const Socket& socket) -{ - if (dynamic_cast(socket.impl())) - Socket::operator = (socket); - else - throw InvalidArgumentException("Cannot assign incompatible socket"); - return *this; -} - - -void RawSocket::connect(const SocketAddress& address) -{ - impl()->connect(address); -} - - -void RawSocket::bind(const SocketAddress& address, bool reuseAddress) -{ - impl()->bind(address, reuseAddress); -} - - -int RawSocket::sendBytes(const void* buffer, int length, int flags) -{ - return impl()->sendBytes(buffer, length, flags); -} - - -int RawSocket::receiveBytes(void* buffer, int length, int flags) -{ - return impl()->receiveBytes(buffer, length, flags); -} - - -int RawSocket::sendTo(const void* buffer, int length, const SocketAddress& address, int flags) -{ - return impl()->sendTo(buffer, length, address, flags); -} - - -int RawSocket::receiveFrom(void* buffer, int length, SocketAddress& address, int flags) -{ - return impl()->receiveFrom(buffer, length, address, flags); -} - - -} } // namespace Poco::Net diff --git a/contrib/libpoco/Net/src/RawSocketImpl.cpp b/contrib/libpoco/Net/src/RawSocketImpl.cpp deleted file mode 100644 index e06942f697c..00000000000 --- a/contrib/libpoco/Net/src/RawSocketImpl.cpp +++ /dev/null @@ -1,71 +0,0 @@ -// -// RawSocketImpl.cpp -// -// $Id: //poco/1.4/Net/src/RawSocketImpl.cpp#1 $ -// -// Library: Net -// Package: Sockets -// Module: RawSocketImpl -// -// Copyright (c) 2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "Poco/Net/RawSocketImpl.h" -#include "Poco/Net/NetException.h" - - -using Poco::InvalidArgumentException; - - -namespace Poco { -namespace Net { - - -RawSocketImpl::RawSocketImpl() -{ - init(AF_INET); -} - - -RawSocketImpl::RawSocketImpl(IPAddress::Family family, int proto) -{ - if (family == IPAddress::IPv4) - init2(AF_INET, proto); -#if defined(POCO_HAVE_IPv6) - else if (family == IPAddress::IPv6) - init2(AF_INET6, proto); -#endif - else throw InvalidArgumentException("Invalid or unsupported address family passed to RawSocketImpl"); - -} - - -RawSocketImpl::RawSocketImpl(poco_socket_t sockfd): - SocketImpl(sockfd) -{ -} - - -RawSocketImpl::~RawSocketImpl() -{ -} - - -void RawSocketImpl::init(int af) -{ - init2(af, IPPROTO_RAW); -} - - -void RawSocketImpl::init2(int af, int proto) -{ - initSocket(af, SOCK_RAW, proto); - setOption(IPPROTO_IP, IP_HDRINCL, 0); -} - - -} } // namespace Poco::Net diff --git a/contrib/libpoco/Net/src/RemoteSyslogChannel.cpp b/contrib/libpoco/Net/src/RemoteSyslogChannel.cpp deleted file mode 100644 index f082e692160..00000000000 --- a/contrib/libpoco/Net/src/RemoteSyslogChannel.cpp +++ /dev/null @@ -1,347 +0,0 @@ -// -// RemoteSyslogChannel.cpp -// -// $Id: //poco/1.4/Net/src/RemoteSyslogChannel.cpp#2 $ -// -// Library: Net -// Package: Logging -// Module: RemoteSyslogChannel -// -// Copyright (c) 2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "Poco/Net/RemoteSyslogChannel.h" -#include "Poco/Message.h" -#include "Poco/DateTimeFormatter.h" -#include "Poco/NumberFormatter.h" -#include "Poco/Net/SocketAddress.h" -#include "Poco/Net/DNS.h" -#include "Poco/LoggingFactory.h" -#include "Poco/Instantiator.h" -#include "Poco/String.h" - - -namespace Poco { -namespace Net { - - -const std::string RemoteSyslogChannel::BSD_TIMEFORMAT("%b %f %H:%M:%S"); -const std::string RemoteSyslogChannel::SYSLOG_TIMEFORMAT("%Y-%m-%dT%H:%M:%S.%i%z"); -const std::string RemoteSyslogChannel::PROP_NAME("name"); -const std::string RemoteSyslogChannel::PROP_FACILITY("facility"); -const std::string RemoteSyslogChannel::PROP_FORMAT("format"); -const std::string RemoteSyslogChannel::PROP_LOGHOST("loghost"); -const std::string RemoteSyslogChannel::PROP_HOST("host"); - - -RemoteSyslogChannel::RemoteSyslogChannel(): - _logHost("localhost"), - _name("-"), - _facility(SYSLOG_USER), - _bsdFormat(false), - _open(false) -{ -} - - -RemoteSyslogChannel::RemoteSyslogChannel(const std::string& address, const std::string& name, int facility, bool bsdFormat): - _logHost(address), - _name(name), - _facility(facility), - _bsdFormat(bsdFormat), - _open(false) -{ - if (_name.empty()) _name = "-"; -} - - -RemoteSyslogChannel::~RemoteSyslogChannel() -{ - try - { - close(); - } - catch (...) - { - poco_unexpected(); - } -} - - -void RemoteSyslogChannel::open() -{ - if (_open) return; - - // reset socket for the case that it has been previously closed - _socket = DatagramSocket(); - - if (_logHost.find(':') != std::string::npos) - _socketAddress = SocketAddress(_logHost); - else - _socketAddress = SocketAddress(_logHost, SYSLOG_PORT); - - if (_host.empty()) - { - try - { - _host = DNS::thisHost().name(); - } - catch (Poco::Exception&) - { - _host = _socket.address().host().toString(); - } - } - - _open = true; -} - - -void RemoteSyslogChannel::close() -{ - if (_open) - { - _socket.close(); - _open = false; - } -} - - -void RemoteSyslogChannel::log(const Message& msg) -{ - Poco::FastMutex::ScopedLock lock(_mutex); - - if (!_open) open(); - - std::string m; - m.reserve(1024); - m += '<'; - Poco::NumberFormatter::append(m, getPrio(msg) + _facility); - m += '>'; - if (_bsdFormat) - { - Poco::DateTimeFormatter::append(m, msg.getTime(), BSD_TIMEFORMAT); - m += ' '; - m += _host; - } - else - { - m += "1 "; // version - Poco::DateTimeFormatter::append(m, msg.getTime(), SYSLOG_TIMEFORMAT); - m += ' '; - m += _host; - m += ' '; - m += _name; - m += ' '; - Poco::NumberFormatter::append(m, msg.getPid()); - m += ' '; - m += msg.getSource(); - } - m += ' '; - m += msg.getText(); - - _socket.sendTo(m.data(), static_cast(m.size()), _socketAddress); -} - - -void RemoteSyslogChannel::setProperty(const std::string& name, const std::string& value) -{ - if (name == PROP_NAME) - { - _name = value; - if (_name.empty()) _name = "-"; - } - else if (name == PROP_FACILITY) - { - std::string facility; - if (Poco::icompare(value, 4, "LOG_") == 0) - facility = Poco::toUpper(value.substr(4)); - else if (Poco::icompare(value, 4, "SYSLOG_") == 0) - facility = Poco::toUpper(value.substr(7)); - else - facility = Poco::toUpper(value); - - if (facility == "KERN") - _facility = SYSLOG_KERN; - else if (facility == "USER") - _facility = SYSLOG_USER; - else if (facility == "MAIL") - _facility = SYSLOG_MAIL; - else if (facility == "DAEMON") - _facility = SYSLOG_DAEMON; - else if (facility == "AUTH") - _facility = SYSLOG_AUTH; - else if (facility == "AUTHPRIV") - _facility = SYSLOG_AUTHPRIV; - else if (facility == "SYSLOG") - _facility = SYSLOG_SYSLOG; - else if (facility == "LPR") - _facility = SYSLOG_LPR; - else if (facility == "NEWS") - _facility = SYSLOG_NEWS; - else if (facility == "UUCP") - _facility = SYSLOG_UUCP; - else if (facility == "CRON") - _facility = SYSLOG_CRON; - else if (facility == "FTP") - _facility = SYSLOG_FTP; - else if (facility == "NTP") - _facility = SYSLOG_NTP; - else if (facility == "LOGAUDIT") - _facility = SYSLOG_LOGAUDIT; - else if (facility == "LOGALERT") - _facility = SYSLOG_LOGALERT; - else if (facility == "CLOCK") - _facility = SYSLOG_CLOCK; - else if (facility == "LOCAL0") - _facility = SYSLOG_LOCAL0; - else if (facility == "LOCAL1") - _facility = SYSLOG_LOCAL1; - else if (facility == "LOCAL2") - _facility = SYSLOG_LOCAL2; - else if (facility == "LOCAL3") - _facility = SYSLOG_LOCAL3; - else if (facility == "LOCAL4") - _facility = SYSLOG_LOCAL4; - else if (facility == "LOCAL5") - _facility = SYSLOG_LOCAL5; - else if (facility == "LOCAL6") - _facility = SYSLOG_LOCAL6; - else if (facility == "LOCAL7") - _facility = SYSLOG_LOCAL7; - } - else if (name == PROP_LOGHOST) - { - _logHost = value; - } - else if (name == PROP_HOST) - { - _host = value; - } - else if (name == PROP_FORMAT) - { - _bsdFormat = (value == "bsd" || value == "rfc3164"); - } - else - { - Channel::setProperty(name, value); - } -} - - -std::string RemoteSyslogChannel::getProperty(const std::string& name) const -{ - if (name == PROP_NAME) - { - if (_name != "-") - return _name; - else - return ""; - } - else if (name == PROP_FACILITY) - { - if (_facility == SYSLOG_KERN) - return "KERN"; - else if (_facility == SYSLOG_USER) - return "USER"; - else if (_facility == SYSLOG_MAIL) - return "MAIL"; - else if (_facility == SYSLOG_DAEMON) - return "DAEMON"; - else if (_facility == SYSLOG_AUTH) - return "AUTH"; - else if (_facility == SYSLOG_AUTHPRIV) - return "AUTHPRIV"; - else if (_facility == SYSLOG_SYSLOG) - return "SYSLOG"; - else if (_facility == SYSLOG_LPR) - return "LPR"; - else if (_facility == SYSLOG_NEWS) - return "NEWS"; - else if (_facility == SYSLOG_UUCP) - return "UUCP"; - else if (_facility == SYSLOG_CRON) - return "CRON"; - else if (_facility == SYSLOG_FTP) - return "FTP"; - else if (_facility == SYSLOG_NTP) - return "NTP"; - else if (_facility == SYSLOG_LOGAUDIT) - return "LOGAUDIT"; - else if (_facility == SYSLOG_LOGALERT) - return "LOGALERT"; - else if (_facility == SYSLOG_CLOCK) - return "CLOCK"; - else if (_facility == SYSLOG_LOCAL0) - return "LOCAL0"; - else if (_facility == SYSLOG_LOCAL1) - return "LOCAL1"; - else if (_facility == SYSLOG_LOCAL2) - return "LOCAL2"; - else if (_facility == SYSLOG_LOCAL3) - return "LOCAL3"; - else if (_facility == SYSLOG_LOCAL4) - return "LOCAL4"; - else if (_facility == SYSLOG_LOCAL5) - return "LOCAL5"; - else if (_facility == SYSLOG_LOCAL6) - return "LOCAL6"; - else if (_facility == SYSLOG_LOCAL7) - return "LOCAL7"; - else - return ""; - } - else if (name == PROP_LOGHOST) - { - return _logHost; - } - else if (name == PROP_HOST) - { - return _host; - } - else if (name == PROP_FORMAT) - { - return _bsdFormat ? "rfc3164" : "rfc5424"; - } - else - { - return Channel::getProperty(name); - } -} - - -int RemoteSyslogChannel::getPrio(const Message& msg) -{ - switch (msg.getPriority()) - { - case Message::PRIO_TRACE: - case Message::PRIO_DEBUG: - return SYSLOG_DEBUG; - case Message::PRIO_INFORMATION: - return SYSLOG_INFORMATIONAL; - case Message::PRIO_NOTICE: - return SYSLOG_NOTICE; - case Message::PRIO_WARNING: - return SYSLOG_WARNING; - case Message::PRIO_ERROR: - return SYSLOG_ERROR; - case Message::PRIO_CRITICAL: - return SYSLOG_CRITICAL; - case Message::PRIO_FATAL: - return SYSLOG_ALERT; - default: - return 0; - } -} - - -void RemoteSyslogChannel::registerChannel() -{ - Poco::LoggingFactory::defaultFactory().registerChannelClass("RemoteSyslogChannel", new Poco::Instantiator); -} - - -} } // namespace Poco::Net diff --git a/contrib/libpoco/Net/src/RemoteSyslogListener.cpp b/contrib/libpoco/Net/src/RemoteSyslogListener.cpp deleted file mode 100644 index 633b1e1c88a..00000000000 --- a/contrib/libpoco/Net/src/RemoteSyslogListener.cpp +++ /dev/null @@ -1,562 +0,0 @@ -// -// RemoteSyslogListener.cpp -// -// $Id: //poco/1.4/Net/src/RemoteSyslogListener.cpp#4 $ -// -// Library: Net -// Package: Logging -// Module: RemoteSyslogListener -// -// Copyright (c) 2007, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "Poco/Net/RemoteSyslogListener.h" -#include "Poco/Net/RemoteSyslogChannel.h" -#include "Poco/Net/DatagramSocket.h" -#include "Poco/Net/SocketAddress.h" -#include "Poco/Runnable.h" -#include "Poco/Notification.h" -#include "Poco/AutoPtr.h" -#include "Poco/NumberParser.h" -#include "Poco/NumberFormatter.h" -#include "Poco/DateTimeParser.h" -#include "Poco/Message.h" -#include "Poco/LoggingFactory.h" -#include "Poco/Buffer.h" -#include "Poco/Ascii.h" -#include - - -namespace Poco { -namespace Net { - - -// -// MessageNotification -// - - -class MessageNotification: public Poco::Notification -{ -public: - MessageNotification(const char* buffer, std::size_t length, const Poco::Net::SocketAddress& sourceAddress): - _message(buffer, length), - _sourceAddress(sourceAddress) - { - } - - MessageNotification(const std::string& message, const Poco::Net::SocketAddress& sourceAddress): - _message(message), - _sourceAddress(sourceAddress) - { - } - - ~MessageNotification() - { - } - - const std::string& message() const - { - return _message; - } - - const Poco::Net::SocketAddress& sourceAddress() const - { - return _sourceAddress; - } - -private: - std::string _message; - Poco::Net::SocketAddress _sourceAddress; -}; - - -// -// RemoteUDPListener -// - - -class RemoteUDPListener: public Poco::Runnable -{ -public: - enum - { - WAITTIME_MILLISEC = 1000, - BUFFER_SIZE = 65536 - }; - - RemoteUDPListener(Poco::NotificationQueue& queue, Poco::UInt16 port); - ~RemoteUDPListener(); - - void run(); - void safeStop(); - -private: - Poco::NotificationQueue& _queue; - DatagramSocket _socket; - bool _stopped; -}; - - -RemoteUDPListener::RemoteUDPListener(Poco::NotificationQueue& queue, Poco::UInt16 port): - _queue(queue), - _socket(Poco::Net::SocketAddress(Poco::Net::IPAddress(), port)), - _stopped(false) -{ -} - - -RemoteUDPListener::~RemoteUDPListener() -{ -} - - -void RemoteUDPListener::run() -{ - Poco::Buffer buffer(BUFFER_SIZE); - Poco::Timespan waitTime(WAITTIME_MILLISEC* 1000); - while (!_stopped) - { - try - { - if (_socket.poll(waitTime, Socket::SELECT_READ)) - { - Poco::Net::SocketAddress sourceAddress; - int n = _socket.receiveFrom(buffer.begin(), BUFFER_SIZE, sourceAddress); - if (n > 0) - { - _queue.enqueueNotification(new MessageNotification(buffer.begin(), n, sourceAddress)); - } - } - } - catch (...) - { - // lazy exception catching - } - } -} - - -void RemoteUDPListener::safeStop() -{ - _stopped = true; -} - - -// -// SyslogParser -// - - -class SyslogParser: public Poco::Runnable -{ -public: - static const std::string NILVALUE; - - enum - { - WAITTIME_MILLISEC = 1000 - }; - - SyslogParser(Poco::NotificationQueue& queue, RemoteSyslogListener* pListener); - ~SyslogParser(); - - void parse(const std::string& line, Poco::Message& message); - void run(); - void safeStop(); - - static Poco::Message::Priority convert(RemoteSyslogChannel::Severity severity); - -private: - void parsePrio(const std::string& line, std::size_t& pos, RemoteSyslogChannel::Severity& severity, RemoteSyslogChannel::Facility& fac); - void parseNew(const std::string& line, RemoteSyslogChannel::Severity severity, RemoteSyslogChannel::Facility fac, std::size_t& pos, Poco::Message& message); - void parseBSD(const std::string& line, RemoteSyslogChannel::Severity severity, RemoteSyslogChannel::Facility fac, std::size_t& pos, Poco::Message& message); - - static std::string parseUntilSpace(const std::string& line, std::size_t& pos); - /// Parses until it encounters the next space char, returns the string from pos, excluding space - /// pos will point past the space char - -private: - Poco::NotificationQueue& _queue; - bool _stopped; - RemoteSyslogListener* _pListener; -}; - - -const std::string SyslogParser::NILVALUE("-"); - - -SyslogParser::SyslogParser(Poco::NotificationQueue& queue, RemoteSyslogListener* pListener): - _queue(queue), - _stopped(false), - _pListener(pListener) -{ - poco_check_ptr (_pListener); -} - - -SyslogParser::~SyslogParser() -{ -} - - -void SyslogParser::run() -{ - while (!_stopped) - { - try - { - Poco::AutoPtr pNf(_queue.waitDequeueNotification(WAITTIME_MILLISEC)); - if (pNf) - { - Poco::AutoPtr pMsgNf = pNf.cast(); - Poco::Message message; - parse(pMsgNf->message(), message); - message["addr"] =pMsgNf->sourceAddress().host().toString(); - _pListener->log(message); - } - } - catch (Poco::Exception&) - { - // parsing exception, what should we do? - } - catch (...) - { - } - } -} - - -void SyslogParser::safeStop() -{ - _stopped = true; -} - - -void SyslogParser::parse(const std::string& line, Poco::Message& message) -{ - // -> int: lower 3 bits severity, upper bits: facility - std::size_t pos = 0; - RemoteSyslogChannel::Severity severity; - RemoteSyslogChannel::Facility fac; - parsePrio(line, pos, severity, fac); - - // the next field decide if we parse an old BSD message or a new syslog message - // BSD: expects a month value in string form: Jan, Feb... - // SYSLOG expects a version number: 1 - - if (Poco::Ascii::isDigit(line[pos])) - { - parseNew(line, severity, fac, pos, message); - } - else - { - parseBSD(line, severity, fac, pos, message); - } - poco_assert (pos == line.size()); -} - - -void SyslogParser::parsePrio(const std::string& line, std::size_t& pos, RemoteSyslogChannel::Severity& severity, RemoteSyslogChannel::Facility& fac) -{ - poco_assert (pos < line.size()); - poco_assert (line[pos] == '<'); - ++pos; - std::size_t start = pos; - - while (pos < line.size() && Poco::Ascii::isDigit(line[pos])) - ++pos; - - poco_assert (line[pos] == '>'); - poco_assert (pos - start > 0); - std::string valStr = line.substr(start, pos - start); - ++pos; // skip the > - - int val = Poco::NumberParser::parse(valStr); - poco_assert (val >= 0 && val <= (RemoteSyslogChannel::SYSLOG_LOCAL7 + RemoteSyslogChannel::SYSLOG_DEBUG)); - - Poco::UInt16 pri = static_cast(val); - // now get the lowest 3 bits - severity = static_cast(pri & 0x0007u); - fac = static_cast(pri & 0xfff8u); -} - - -void SyslogParser::parseNew(const std::string& line, RemoteSyslogChannel::Severity severity, RemoteSyslogChannel::Facility fac, std::size_t& pos, Poco::Message& message) -{ - Poco::Message::Priority prio = convert(severity); - // rest of the unparsed header is: - // VERSION SP TIMESTAMP SP HOSTNAME SP APP-NAME SP PROCID SP MSGID - std::string versionStr(parseUntilSpace(line, pos)); - std::string timeStr(parseUntilSpace(line, pos)); // can be the nilvalue! - std::string hostName(parseUntilSpace(line, pos)); - std::string appName(parseUntilSpace(line, pos)); - std::string procId(parseUntilSpace(line, pos)); - std::string msgId(parseUntilSpace(line, pos)); - std::string messageText(line.substr(pos)); - pos = line.size(); - Poco::DateTime date; - int tzd = 0; - bool hasDate = Poco::DateTimeParser::tryParse(RemoteSyslogChannel::SYSLOG_TIMEFORMAT, timeStr, date, tzd); - Poco::Message logEntry(msgId, messageText, prio); - logEntry[RemoteSyslogListener::LOG_PROP_HOST] = hostName; - logEntry[RemoteSyslogListener::LOG_PROP_APP] = appName; - - if (hasDate) - logEntry.setTime(date.timestamp()); - int lval(0); - Poco::NumberParser::tryParse(procId, lval); - logEntry.setPid(lval); - message.swap(logEntry); -} - - -void SyslogParser::parseBSD(const std::string& line, RemoteSyslogChannel::Severity severity, RemoteSyslogChannel::Facility fac, std::size_t& pos, Poco::Message& message) -{ - Poco::Message::Priority prio = convert(severity); - // rest of the unparsed header is: - // "%b %f %H:%M:%S" SP hostname|ipaddress - // detect three spaces - int spaceCnt = 0; - std::size_t start = pos; - while (spaceCnt < 3 && pos < line.size()) - { - if (line[pos] == ' ') - { - spaceCnt++; - if (spaceCnt == 1) - { - // size must be 3 chars for month - if (pos - start != 3) - { - // probably a shortened time value, or the hostname - // assume hostName - Poco::Message logEntry(line.substr(start, pos-start), line.substr(pos+1), prio); - message.swap(logEntry); - return; - } - } - else if (spaceCnt == 2) - { - // a day value! - if (!(Poco::Ascii::isDigit(line[pos-1]) && (Poco::Ascii::isDigit(line[pos-2]) || Poco::Ascii::isSpace(line[pos-2])))) - { - // assume the next field is a hostname - spaceCnt = 3; - } - } - if (pos + 1 < line.size() && line[pos+1] == ' ') - { - // we have two spaces when the day value is smaller than 10! - ++pos; // skip one - } - } - ++pos; - } - std::string timeStr(line.substr(start, pos-start-1)); - int tzd(0); - Poco::DateTime date; - int year = date.year(); // year is not included, use the current one - bool hasDate = Poco::DateTimeParser::tryParse(RemoteSyslogChannel::BSD_TIMEFORMAT, timeStr, date, tzd); - if (hasDate) - { - int m = date.month(); - int d = date.day(); - int h = date.hour(); - int min = date.minute(); - int sec = date.second(); - date = Poco::DateTime(year, m, d, h, min, sec); - } - // next entry is host SP - std::string hostName(parseUntilSpace(line, pos)); - - // TAG: at most 32 alphanumeric chars, ANY non alphannumeric indicates start of message content - // ignore: treat everything as content - std::string messageText(line.substr(pos)); - pos = line.size(); - Poco::Message logEntry(hostName, messageText, prio); - logEntry.setTime(date.timestamp()); - message.swap(logEntry); -} - - -std::string SyslogParser::parseUntilSpace(const std::string& line, std::size_t& pos) -{ - std::size_t start = pos; - while (pos < line.size() && !Poco::Ascii::isSpace(line[pos])) - ++pos; - // skip space - ++pos; - return line.substr(start, pos-start-1); -} - - -Poco::Message::Priority SyslogParser::convert(RemoteSyslogChannel::Severity severity) -{ - switch (severity) - { - case RemoteSyslogChannel::SYSLOG_EMERGENCY: - return Poco::Message::PRIO_FATAL; - case RemoteSyslogChannel::SYSLOG_ALERT: - return Poco::Message::PRIO_FATAL; - case RemoteSyslogChannel::SYSLOG_CRITICAL: - return Poco::Message::PRIO_CRITICAL; - case RemoteSyslogChannel::SYSLOG_ERROR: - return Poco::Message::PRIO_ERROR; - case RemoteSyslogChannel::SYSLOG_WARNING: - return Poco::Message::PRIO_WARNING; - case RemoteSyslogChannel::SYSLOG_NOTICE: - return Poco::Message::PRIO_NOTICE; - case RemoteSyslogChannel::SYSLOG_INFORMATIONAL: - return Poco::Message::PRIO_INFORMATION; - case RemoteSyslogChannel::SYSLOG_DEBUG: - return Poco::Message::PRIO_DEBUG; - } - throw Poco::LogicException("Illegal severity value in message"); -} - - -// -// RemoteSyslogListener -// - - -const std::string RemoteSyslogListener::PROP_PORT("port"); -const std::string RemoteSyslogListener::PROP_THREADS("threads"); - -const std::string RemoteSyslogListener::LOG_PROP_APP("app"); -const std::string RemoteSyslogListener::LOG_PROP_HOST("host"); - - -RemoteSyslogListener::RemoteSyslogListener(): - _pListener(0), - _pParser(0), - _port(RemoteSyslogChannel::SYSLOG_PORT), - _threads(1) -{ -} - - -RemoteSyslogListener::RemoteSyslogListener(Poco::UInt16 port): - _pListener(0), - _pParser(0), - _port(port), - _threads(1) -{ -} - - -RemoteSyslogListener::RemoteSyslogListener(Poco::UInt16 port, int threads): - _pListener(0), - _pParser(0), - _port(port), - _threads(threads) -{ -} - - -RemoteSyslogListener::~RemoteSyslogListener() -{ -} - - -void RemoteSyslogListener::processMessage(const std::string& messageText) -{ - Poco::Message message; - _pParser->parse(messageText, message); - log(message); -} - - -void RemoteSyslogListener::enqueueMessage(const std::string& messageText, const Poco::Net::SocketAddress& senderAddress) -{ - _queue.enqueueNotification(new MessageNotification(messageText, senderAddress)); -} - - -void RemoteSyslogListener::setProperty(const std::string& name, const std::string& value) -{ - if (name == PROP_PORT) - { - int val = Poco::NumberParser::parse(value); - if (val >= 0 && val < 65536) - _port = static_cast(val); - else - throw Poco::InvalidArgumentException("Not a valid port number", value); - } - else if (name == PROP_THREADS) - { - int val = Poco::NumberParser::parse(value); - if (val > 0 && val < 16) - _threads = val; - else - throw Poco::InvalidArgumentException("Invalid number of threads", value); - } - else - { - SplitterChannel::setProperty(name, value); - } -} - - -std::string RemoteSyslogListener::getProperty(const std::string& name) const -{ - if (name == PROP_PORT) - return Poco::NumberFormatter::format(_port); - else if (name == PROP_THREADS) - return Poco::NumberFormatter::format(_threads); - else - return SplitterChannel::getProperty(name); -} - - -void RemoteSyslogListener::open() -{ - SplitterChannel::open(); - _pParser = new SyslogParser(_queue, this); - if (_port > 0) - { - _pListener = new RemoteUDPListener(_queue, _port); - } - for (int i = 0; i < _threads; i++) - { - _threadPool.start(*_pParser); - } - if (_pListener) - { - _threadPool.start(*_pListener); - } -} - - -void RemoteSyslogListener::close() -{ - if (_pListener) - { - _pListener->safeStop(); - } - if (_pParser) - { - _pParser->safeStop(); - } - _queue.clear(); - _threadPool.joinAll(); - delete _pListener; - delete _pParser; - _pListener = 0; - _pParser = 0; - SplitterChannel::close(); -} - - -void RemoteSyslogListener::registerChannel() -{ - Poco::LoggingFactory::defaultFactory().registerChannelClass("RemoteSyslogListener", new Poco::Instantiator); -} - - -} } // namespace Poco::Net diff --git a/contrib/libpoco/Net/src/SMTPChannel.cpp b/contrib/libpoco/Net/src/SMTPChannel.cpp deleted file mode 100644 index 23e51034885..00000000000 --- a/contrib/libpoco/Net/src/SMTPChannel.cpp +++ /dev/null @@ -1,212 +0,0 @@ -// -// SMTPChannel.cpp -// -// $Id: //poco/svn/Net/src/SMTPChannel.cpp#2 $ -// -// Library: Net -// Package: Logging -// Module: SMTPChannel -// -// Copyright (c) 2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "Poco/Net/SMTPChannel.h" -#include "Poco/Net/MailMessage.h" -#include "Poco/Net/MailRecipient.h" -#include "Poco/Net/SMTPClientSession.h" -#include "Poco/Net/StringPartSource.h" -#include "Poco/Message.h" -#include "Poco/DateTimeFormatter.h" -#include "Poco/DateTimeFormat.h" -#include "Poco/LocalDateTime.h" -#include "Poco/LoggingFactory.h" -#include "Poco/Instantiator.h" -#include "Poco/NumberFormatter.h" -#include "Poco/FileStream.h" -#include "Poco/File.h" -#include "Poco/Environment.h" - - -namespace Poco { -namespace Net { - - -const std::string SMTPChannel::PROP_MAILHOST("mailhost"); -const std::string SMTPChannel::PROP_SENDER("sender"); -const std::string SMTPChannel::PROP_RECIPIENT("recipient"); -const std::string SMTPChannel::PROP_LOCAL("local"); -const std::string SMTPChannel::PROP_ATTACHMENT("attachment"); -const std::string SMTPChannel::PROP_TYPE("type"); -const std::string SMTPChannel::PROP_DELETE("delete"); -const std::string SMTPChannel::PROP_THROW("throw"); - - -SMTPChannel::SMTPChannel(): - _mailHost("localhost"), - _local(true), - _type("text/plain"), - _delete(false), - _throw(false) -{ -} - - -SMTPChannel::SMTPChannel(const std::string& mailhost, const std::string& sender, const std::string& recipient): - _mailHost(mailhost), - _sender(sender), - _recipient(recipient), - _local(true), - _type("text/plain"), - _delete(false), - _throw(false) -{ -} - - -SMTPChannel::~SMTPChannel() -{ - try - { - close(); - } - catch (...) - { - poco_unexpected(); - } -} - - -void SMTPChannel::open() -{ -} - - -void SMTPChannel::close() -{ -} - - -void SMTPChannel::log(const Message& msg) -{ - try - { - MailMessage message; - message.setSender(_sender); - message.addRecipient(MailRecipient(MailRecipient::PRIMARY_RECIPIENT, _recipient)); - message.setSubject("Log Message from " + _sender); - std::stringstream content; - content << "Log Message\r\n" - << "===========\r\n\r\n" - << "Host: " << Environment::nodeName() << "\r\n" - << "Logger: " << msg.getSource() << "\r\n"; - - if (_local) - { - DateTime dt(msg.getTime()); - content << "Timestamp: " << DateTimeFormatter::format(LocalDateTime(dt), DateTimeFormat::RFC822_FORMAT) << "\r\n"; - } - else - content << "Timestamp: " << DateTimeFormatter::format(msg.getTime(), DateTimeFormat::RFC822_FORMAT) << "\r\n"; - - content << "Priority: " << NumberFormatter::format(msg.getPriority()) << "\r\n" - << "Process ID: " << NumberFormatter::format(msg.getPid()) << "\r\n" - << "Thread: " << msg.getThread() << " (ID: " << msg.getTid() << ")\r\n" - << "Message text: " << msg.getText() << "\r\n\r\n"; - - message.addContent(new StringPartSource(content.str())); - - if (!_attachment.empty()) - { - { - Poco::FileInputStream fis(_attachment, std::ios::in | std::ios::binary | std::ios::ate); - if (fis.good()) - { - typedef std::allocator::size_type SST; - - std::streamoff size = fis.tellg(); - poco_assert (std::numeric_limits::max() >= size); - poco_assert (std::numeric_limits::max() >= (size_t)size); - char* pMem = new char [static_cast(size)]; - fis.seekg(std::ios::beg); - fis.read(pMem, size); - message.addAttachment(_attachment, - new StringPartSource(std::string(pMem, static_cast(size)), - _type, - _attachment)); - - delete [] pMem; - } - } - if (_delete) File(_attachment).remove(); - } - - SMTPClientSession session(_mailHost); - session.login(); - session.sendMessage(message); - session.close(); - } - catch (Exception&) - { - if (_throw) throw; - } -} - - -void SMTPChannel::setProperty(const std::string& name, const std::string& value) -{ - if (name == PROP_MAILHOST) - _mailHost = value; - else if (name == PROP_SENDER) - _sender = value; - else if (name == PROP_RECIPIENT) - _recipient = value; - else if (name == PROP_LOCAL) - _local = isTrue(value); - else if (name == PROP_ATTACHMENT) - _attachment = value; - else if (name == PROP_TYPE) - _type = value; - else if (name == PROP_DELETE) - _delete = isTrue(value); - else if (name == PROP_THROW) - _throw = isTrue(value); - else - Channel::setProperty(name, value); -} - - -std::string SMTPChannel::getProperty(const std::string& name) const -{ - if (name == PROP_MAILHOST) - return _mailHost; - else if (name == PROP_SENDER) - return _sender; - else if (name == PROP_RECIPIENT) - return _recipient; - else if (name == PROP_LOCAL) - return _local ? "true" : "false"; - else if (name == PROP_ATTACHMENT) - return _attachment; - else if (name == PROP_TYPE) - return _type; - else if (name == PROP_DELETE) - return _delete ? "true" : "false"; - else if (name == PROP_THROW) - return _throw ? "true" : "false"; - else - return Channel::getProperty(name); -} - - -void SMTPChannel::registerChannel() -{ - Poco::LoggingFactory::defaultFactory().registerChannelClass("SMTPChannel", - new Poco::Instantiator); -} - - -} } // namespace Poco::Net diff --git a/contrib/libpoco/Net/src/SMTPClientSession.cpp b/contrib/libpoco/Net/src/SMTPClientSession.cpp deleted file mode 100644 index 16febfde2f5..00000000000 --- a/contrib/libpoco/Net/src/SMTPClientSession.cpp +++ /dev/null @@ -1,441 +0,0 @@ -// -// SMTPClientSession.cpp -// -// $Id: //poco/1.4/Net/src/SMTPClientSession.cpp#1 $ -// -// Library: Net -// Package: Mail -// Module: SMTPClientSession -// -// Copyright (c) 2005-2008, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "Poco/Net/SMTPClientSession.h" -#include "Poco/Net/MailMessage.h" -#include "Poco/Net/MailRecipient.h" -#include "Poco/Net/MailStream.h" -#include "Poco/Net/SocketAddress.h" -#include "Poco/Net/SocketStream.h" -#include "Poco/Net/NetException.h" -#include "Poco/Environment.h" -#include "Poco/Net/NetworkInterface.h" -#include "Poco/HMACEngine.h" -#include "Poco/MD5Engine.h" -#include "Poco/SHA1Engine.h" -#include "Poco/DigestStream.h" -#include "Poco/StreamCopier.h" -#include "Poco/Base64Encoder.h" -#include "Poco/Base64Decoder.h" -#include "Poco/String.h" -#include -#include -#include - - -using Poco::DigestEngine; -using Poco::HMACEngine; -using Poco::MD5Engine; -using Poco::SHA1Engine; -using Poco::DigestOutputStream; -using Poco::StreamCopier; -using Poco::Base64Encoder; -using Poco::Base64Decoder; -using Poco::Environment; - - -namespace Poco { -namespace Net { - - -SMTPClientSession::SMTPClientSession(const StreamSocket& socket): - _socket(socket), - _isOpen(false) -{ -} - - -SMTPClientSession::SMTPClientSession(const std::string& host, Poco::UInt16 port): - _socket(SocketAddress(host, port)), - _isOpen(false) -{ -} - - -SMTPClientSession::~SMTPClientSession() -{ - try - { - close(); - } - catch (...) - { - } -} - - -void SMTPClientSession::setTimeout(const Poco::Timespan& timeout) -{ - _socket.setReceiveTimeout(timeout); -} - - -Poco::Timespan SMTPClientSession::getTimeout() const -{ - return _socket.getReceiveTimeout(); -} - - -void SMTPClientSession::login(const std::string& hostname, std::string& response) -{ - open(); - int status = sendCommand("EHLO", hostname, response); - if (isPermanentNegative(status)) - status = sendCommand("HELO", hostname, response); - if (!isPositiveCompletion(status)) throw SMTPException("Login failed", response, status); -} - - -void SMTPClientSession::login(const std::string& hostname) -{ - std::string response; - login(hostname, response); -} - - -void SMTPClientSession::login() -{ - login(Environment::nodeName()); -} - - -void SMTPClientSession::loginUsingCRAMMD5(const std::string& username, const std::string& password) -{ - HMACEngine hmac(password); - loginUsingCRAM(username, "CRAM-MD5", hmac); -} - - -void SMTPClientSession::loginUsingCRAMSHA1(const std::string& username, const std::string& password) -{ - HMACEngine hmac(password); - loginUsingCRAM(username, "CRAM-SHA1", hmac); -} - - -void SMTPClientSession::loginUsingCRAM(const std::string& username, const std::string& method, Poco::DigestEngine& hmac) -{ - std::string response; - int status = sendCommand(std::string("AUTH ") + method, response); - - if (!isPositiveIntermediate(status)) throw SMTPException(std::string("Cannot authenticate using ") + method, response, status); - std::string challengeBase64 = response.substr(4); - - std::istringstream istr(challengeBase64); - Base64Decoder decoder(istr); - std::string challenge; - StreamCopier::copyToString(decoder, challenge); - - hmac.update(challenge); - - const DigestEngine::Digest& digest = hmac.digest(); - std::string digestString(DigestEngine::digestToHex(digest)); - - std::string challengeResponse = username + " " + digestString; - - std::ostringstream challengeResponseBase64; - Base64Encoder encoder(challengeResponseBase64); - encoder << challengeResponse; - encoder.close(); - - status = sendCommand(challengeResponseBase64.str(), response); - if (!isPositiveCompletion(status)) throw SMTPException(std::string("Login using ") + method + " failed", response, status); -} - - -void SMTPClientSession::loginUsingLogin(const std::string& username, const std::string& password) -{ - std::string response; - int status = sendCommand("AUTH LOGIN", response); - if (!isPositiveIntermediate(status)) throw SMTPException("Cannot authenticate using LOGIN", response, status); - - std::ostringstream usernameBase64; - Base64Encoder usernameEncoder(usernameBase64); - usernameEncoder << username; - usernameEncoder.close(); - - std::ostringstream passwordBase64; - Base64Encoder passwordEncoder(passwordBase64); - passwordEncoder << password; - passwordEncoder.close(); - - //Server request for username/password not defined could be either - //S: login: - //C: user_login - //S: password: - //C: user_password - //or - //S: password: - //C: user_password - //S: login: - //C: user_login - - std::string decodedResponse; - std::istringstream responseStream(response.substr(4)); - Base64Decoder responseDecoder(responseStream); - StreamCopier::copyToString(responseDecoder, decodedResponse); - - if (Poco::icompare(decodedResponse, 0, 8, "username") == 0) // username first (md5("Username:")) - { - status = sendCommand(usernameBase64.str(), response); - if (!isPositiveIntermediate(status)) throw SMTPException("Login using LOGIN username failed", response, status); - - status = sendCommand(passwordBase64.str(), response); - if (!isPositiveCompletion(status)) throw SMTPException("Login using LOGIN password failed", response, status); - } - else if (Poco::icompare(decodedResponse, 0, 8, "password") == 0) // password first (md5("Password:")) - { - status = sendCommand(passwordBase64.str(), response); - if (!isPositiveIntermediate(status)) throw SMTPException("Login using LOGIN password failed", response, status); - - status = sendCommand(usernameBase64.str(), response); - if (!isPositiveCompletion(status)) throw SMTPException("Login using LOGIN username failed", response, status); - } -} - -void SMTPClientSession::loginUsingPlain(const std::string& username, const std::string& password) -{ - std::ostringstream credentialsBase64; - Base64Encoder credentialsEncoder(credentialsBase64); - credentialsEncoder << '\0' << username << '\0' << password; - credentialsEncoder.close(); - - std::string response; - int status = sendCommand("AUTH PLAIN", credentialsBase64.str(), response); - if (!isPositiveCompletion(status)) throw SMTPException("Login using PLAIN failed", response, status); -} - - -void SMTPClientSession::login(LoginMethod loginMethod, const std::string& username, const std::string& password) -{ - login(Environment::nodeName(), loginMethod, username, password); -} - - -void SMTPClientSession::login(const std::string& hostname, LoginMethod loginMethod, const std::string& username, const std::string& password) -{ - std::string response; - login(hostname, response); - - if (loginMethod == AUTH_CRAM_MD5) - { - if (response.find("CRAM-MD5", 0) != std::string::npos) - { - loginUsingCRAMMD5(username, password); - } - else throw SMTPException("The mail service does not support CRAM-MD5 authentication", response); - } - else if (loginMethod == AUTH_CRAM_SHA1) - { - if (response.find("CRAM-SHA1", 0) != std::string::npos) - { - loginUsingCRAMSHA1(username, password); - } - else throw SMTPException("The mail service does not support CRAM-SHA1 authentication", response); - } - else if (loginMethod == AUTH_LOGIN) - { - if (response.find("LOGIN", 0) != std::string::npos) - { - loginUsingLogin(username, password); - } - else throw SMTPException("The mail service does not support LOGIN authentication", response); - } - else if (loginMethod == AUTH_PLAIN) - { - if (response.find("PLAIN", 0) != std::string::npos) - { - loginUsingPlain(username, password); - } - else throw SMTPException("The mail service does not support PLAIN authentication", response); - } - else if (loginMethod != AUTH_NONE) - { - throw SMTPException("The autentication method is not supported"); - } -} - - -void SMTPClientSession::open() -{ - if (!_isOpen) - { - std::string response; - int status = _socket.receiveStatusMessage(response); - if (!isPositiveCompletion(status)) throw SMTPException("The mail service is unavailable", response, status); - _isOpen = true; - } -} - - -void SMTPClientSession::close() -{ - if (_isOpen) - { - std::string response; - sendCommand("QUIT", response); - _socket.close(); - _isOpen = false; - } -} - - -void SMTPClientSession::sendCommands(const MailMessage& message, const Recipients* pRecipients) -{ - std::string response; - int status = 0; - const std::string& fromField = message.getSender(); - std::string::size_type emailPos = fromField.find('<'); - if (emailPos == std::string::npos) - { - std::string sender("<"); - sender.append(fromField); - sender.append(">"); - status = sendCommand("MAIL FROM:", sender, response); - } - else - { - status = sendCommand("MAIL FROM:", fromField.substr(emailPos, fromField.size() - emailPos), response); - } - - if (!isPositiveCompletion(status)) throw SMTPException("Cannot send message", response, status); - - std::ostringstream recipient; - if (pRecipients) - { - for (Recipients::const_iterator it = pRecipients->begin(); it != pRecipients->end(); ++it) - { - recipient << '<' << *it << '>'; - int status = sendCommand("RCPT TO:", recipient.str(), response); - if (!isPositiveCompletion(status)) throw SMTPException(std::string("Recipient rejected: ") + recipient.str(), response, status); - recipient.str(""); - } - } - else - { - for (MailMessage::Recipients::const_iterator it = message.recipients().begin(); it != message.recipients().end(); ++it) - { - recipient << '<' << it->getAddress() << '>'; - int status = sendCommand("RCPT TO:", recipient.str(), response); - if (!isPositiveCompletion(status)) throw SMTPException(std::string("Recipient rejected: ") + recipient.str(), response, status); - recipient.str(""); - } - } - - status = sendCommand("DATA", response); - if (!isPositiveIntermediate(status)) throw SMTPException("Cannot send message data", response, status); -} - - -void SMTPClientSession::sendAddresses(const std::string& from, const Recipients& recipients) -{ - std::string response; - int status = 0; - - std::string::size_type emailPos = from.find('<'); - if (emailPos == std::string::npos) - { - std::string sender("<"); - sender.append(from); - sender.append(">"); - status = sendCommand("MAIL FROM:", sender, response); - } - else - { - status = sendCommand("MAIL FROM:", from.substr(emailPos, from.size() - emailPos), response); - } - - if (!isPositiveCompletion(status)) throw SMTPException("Cannot send message", response, status); - - std::ostringstream recipient; - - for (Recipients::const_iterator it = recipients.begin(); it != recipients.end(); ++it) - { - - recipient << '<' << *it << '>'; - int status = sendCommand("RCPT TO:", recipient.str(), response); - if (!isPositiveCompletion(status)) throw SMTPException(std::string("Recipient rejected: ") + recipient.str(), response, status); - recipient.str(""); - } -} - - -void SMTPClientSession::sendData() -{ - std::string response; - int status = sendCommand("DATA", response); - if (!isPositiveIntermediate(status)) throw SMTPException("Cannot send message data", response, status); -} - - -void SMTPClientSession::sendMessage(const MailMessage& message) -{ - sendCommands(message); - transportMessage(message); -} - - -void SMTPClientSession::sendMessage(const MailMessage& message, const Recipients& recipients) -{ - sendCommands(message, &recipients); - transportMessage(message); -} - - -void SMTPClientSession::transportMessage(const MailMessage& message) -{ - SocketOutputStream socketStream(_socket); - MailOutputStream mailStream(socketStream); - message.write(mailStream); - mailStream.close(); - socketStream.flush(); - - std::string response; - int status = _socket.receiveStatusMessage(response); - if (!isPositiveCompletion(status)) throw SMTPException("The server rejected the message", response, status); -} - - -int SMTPClientSession::sendCommand(const std::string& command, std::string& response) -{ - _socket.sendMessage(command); - return _socket.receiveStatusMessage(response); -} - - -int SMTPClientSession::sendCommand(const std::string& command, const std::string& arg, std::string& response) -{ - _socket.sendMessage(command, arg); - return _socket.receiveStatusMessage(response); -} - - -void SMTPClientSession::sendMessage(std::istream& istr) -{ - std::string response; - int status = 0; - - SocketOutputStream socketStream(_socket); - MailOutputStream mailStream(socketStream); - StreamCopier::copyStream(istr, mailStream); - mailStream.close(); - socketStream.flush(); - status = _socket.receiveStatusMessage(response); - if (!isPositiveCompletion(status)) throw SMTPException("The server rejected the message", response, status); -} - - -} } // namespace Poco::Net diff --git a/contrib/libpoco/Net/src/ServerSocket.cpp b/contrib/libpoco/Net/src/ServerSocket.cpp deleted file mode 100644 index 99e52b95fab..00000000000 --- a/contrib/libpoco/Net/src/ServerSocket.cpp +++ /dev/null @@ -1,124 +0,0 @@ -// -// ServerSocket.cpp -// -// $Id: //poco/1.4/Net/src/ServerSocket.cpp#2 $ -// -// Library: Net -// Package: Sockets -// Module: ServerSocket -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "Poco/Net/ServerSocket.h" -#include "Poco/Net/ServerSocketImpl.h" -#include "Poco/Exception.h" - - -using Poco::InvalidArgumentException; - - -namespace Poco { -namespace Net { - - -ServerSocket::ServerSocket(): Socket(new ServerSocketImpl) -{ -} - - -ServerSocket::ServerSocket(const Socket& socket): Socket(socket) -{ - if (!dynamic_cast(impl())) - throw InvalidArgumentException("Cannot assign incompatible socket"); -} - - -ServerSocket::ServerSocket(const SocketAddress& address, int backlog): Socket(new ServerSocketImpl) -{ - impl()->bind(address, true); - impl()->listen(backlog); -} - - -ServerSocket::ServerSocket(Poco::UInt16 port, int backlog): Socket(new ServerSocketImpl) -{ - IPAddress wildcardAddr; - SocketAddress address(wildcardAddr, port); - impl()->bind(address, true); - impl()->listen(backlog); -} - - -ServerSocket::ServerSocket(SocketImpl* pImpl, bool ignore): Socket(pImpl) -{ -} - - -ServerSocket::~ServerSocket() -{ -} - - -ServerSocket& ServerSocket::operator = (const Socket& socket) -{ - if (dynamic_cast(socket.impl())) - Socket::operator = (socket); - else - throw InvalidArgumentException("Cannot assign incompatible socket"); - return *this; -} - - -void ServerSocket::bind(const SocketAddress& address, bool reuseAddress) -{ - impl()->bind(address, reuseAddress); -} - - -void ServerSocket::bind(Poco::UInt16 port, bool reuseAddress) -{ - IPAddress wildcardAddr; - SocketAddress address(wildcardAddr, port); - impl()->bind(address, reuseAddress); -} - - -void ServerSocket::bind6(const SocketAddress& address, bool reuseAddress, bool ipV6Only) -{ - impl()->bind6(address, reuseAddress, ipV6Only); -} - - -void ServerSocket::bind6(Poco::UInt16 port, bool reuseAddress, bool ipV6Only) -{ - IPAddress wildcardAddr(IPAddress::IPv6); - SocketAddress address(wildcardAddr, port); - impl()->bind6(address, reuseAddress, ipV6Only); -} - - -void ServerSocket::listen(int backlog) -{ - impl()->listen(backlog); -} - - -StreamSocket ServerSocket::acceptConnection(SocketAddress& clientAddr) -{ - return StreamSocket(impl()->acceptConnection(clientAddr)); -} - - -StreamSocket ServerSocket::acceptConnection() -{ - SocketAddress clientAddr; - return StreamSocket(impl()->acceptConnection(clientAddr)); -} - - -} } // namespace Poco::Net diff --git a/contrib/libpoco/Net/src/ServerSocketImpl.cpp b/contrib/libpoco/Net/src/ServerSocketImpl.cpp deleted file mode 100644 index 10a968753a8..00000000000 --- a/contrib/libpoco/Net/src/ServerSocketImpl.cpp +++ /dev/null @@ -1,34 +0,0 @@ -// -// ServerSocketImpl.cpp -// -// $Id: //poco/1.4/Net/src/ServerSocketImpl.cpp#1 $ -// -// Library: Net -// Package: Sockets -// Module: ServerSocketImpl -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "Poco/Net/ServerSocketImpl.h" - - -namespace Poco { -namespace Net { - - -ServerSocketImpl::ServerSocketImpl() -{ -} - - -ServerSocketImpl::~ServerSocketImpl() -{ -} - - -} } // namespace Poco::Net diff --git a/contrib/libpoco/Net/src/Socket.cpp b/contrib/libpoco/Net/src/Socket.cpp deleted file mode 100644 index 3ab10ac1af9..00000000000 --- a/contrib/libpoco/Net/src/Socket.cpp +++ /dev/null @@ -1,400 +0,0 @@ -// -// Socket.cpp -// -// $Id: //poco/1.4/Net/src/Socket.cpp#3 $ -// -// Library: Net -// Package: Sockets -// Module: Socket -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "Poco/Net/Socket.h" -#include "Poco/Net/StreamSocketImpl.h" -#include "Poco/Timestamp.h" -#include -#include // FD_SET needs memset on some platforms, so we can't use -#if defined(POCO_HAVE_FD_EPOLL) -#include -#elif defined(POCO_HAVE_FD_POLL) -#include "Poco/SharedPtr.h" -#include -typedef Poco::SharedPtr > SharedPollArray; -#endif - - -namespace Poco { -namespace Net { - - -Socket::Socket(): - _pImpl(new StreamSocketImpl) -{ -} - - -Socket::Socket(SocketImpl* pImpl): - _pImpl(pImpl) -{ - poco_check_ptr (_pImpl); -} - - -Socket::Socket(const Socket& socket): - _pImpl(socket._pImpl) -{ - poco_check_ptr (_pImpl); - - _pImpl->duplicate(); -} - - -Socket& Socket::operator = (const Socket& socket) -{ - if (&socket != this) - { - if (_pImpl) _pImpl->release(); - _pImpl = socket._pImpl; - if (_pImpl) _pImpl->duplicate(); - } - return *this; -} - - -Socket::~Socket() -{ - _pImpl->release(); -} - - -int Socket::select(SocketList& readList, SocketList& writeList, SocketList& exceptList, const Poco::Timespan& timeout) -{ -#if defined(POCO_HAVE_FD_EPOLL) - - int epollSize = readList.size() + writeList.size() + exceptList.size(); - if (epollSize == 0) return 0; - - int epollfd = -1; - { - struct epoll_event eventsIn[epollSize]; - memset(eventsIn, 0, sizeof(eventsIn)); - struct epoll_event* eventLast = eventsIn; - for (SocketList::iterator it = readList.begin(); it != readList.end(); ++it) - { - poco_socket_t sockfd = it->sockfd(); - if (sockfd != POCO_INVALID_SOCKET) - { - struct epoll_event* e = eventsIn; - for (; e != eventLast; ++e) - { - if (reinterpret_cast(e->data.ptr)->sockfd() == sockfd) - break; - } - if (e == eventLast) - { - e->data.ptr = &(*it); - ++eventLast; - } - e->events |= EPOLLIN; - } - } - - for (SocketList::iterator it = writeList.begin(); it != writeList.end(); ++it) - { - poco_socket_t sockfd = it->sockfd(); - if (sockfd != POCO_INVALID_SOCKET) - { - struct epoll_event* e = eventsIn; - for (; e != eventLast; ++e) - { - if (reinterpret_cast(e->data.ptr)->sockfd() == sockfd) - break; - } - if (e == eventLast) - { - e->data.ptr = &(*it); - ++eventLast; - } - e->events |= EPOLLOUT; - } - } - - for (SocketList::iterator it = exceptList.begin(); it != exceptList.end(); ++it) - { - poco_socket_t sockfd = it->sockfd(); - if (sockfd != POCO_INVALID_SOCKET) - { - struct epoll_event* e = eventsIn; - for (; e != eventLast; ++e) - { - if (reinterpret_cast(e->data.ptr)->sockfd() == sockfd) - break; - } - if (e == eventLast) - { - e->data.ptr = &(*it); - ++eventLast; - } - e->events |= EPOLLERR; - } - } - - epollSize = eventLast - eventsIn; - epollfd = epoll_create(epollSize); - if (epollfd < 0) - { - char buf[1024]; - auto res = strerror_r(errno, buf, sizeof(buf)); - (void)res; - SocketImpl::error(std::string("Can't create epoll queue: ") + buf); - } - - for (struct epoll_event* e = eventsIn; e != eventLast; ++e) - { - poco_socket_t sockfd = reinterpret_cast(e->data.ptr)->sockfd(); - if (sockfd != POCO_INVALID_SOCKET) - { - if (epoll_ctl(epollfd, EPOLL_CTL_ADD, sockfd, e) < 0) - { - char buf[1024]; - auto res = strerror_r(errno, buf, sizeof(buf)); - (void)res; - ::close(epollfd); - SocketImpl::error(std::string("Can't insert socket to epoll queue: ") + buf); - } - } - } - } - - struct epoll_event eventsOut[epollSize]; - memset(eventsOut, 0, sizeof(eventsOut)); - - Poco::Timespan remainingTime(timeout); - int rc; - do - { - Poco::Timestamp start; - rc = epoll_wait(epollfd, eventsOut, epollSize, remainingTime.totalMilliseconds()); - if (rc < 0 && SocketImpl::lastError() == POCO_EINTR) - { - Poco::Timestamp end; - Poco::Timespan waited = end - start; - if (waited < remainingTime) - remainingTime -= waited; - else - remainingTime = 0; - } - } - while (rc < 0 && SocketImpl::lastError() == POCO_EINTR); - - ::close(epollfd); - if (rc < 0) SocketImpl::error(); - - SocketList readyReadList; - SocketList readyWriteList; - SocketList readyExceptList; - for (int n = 0; n < rc; ++n) - { - if (eventsOut[n].events & EPOLLERR) - readyExceptList.push_back(*reinterpret_cast(eventsOut[n].data.ptr)); - if (eventsOut[n].events & EPOLLIN) - readyReadList.push_back(*reinterpret_cast(eventsOut[n].data.ptr)); - if (eventsOut[n].events & EPOLLOUT) - readyWriteList.push_back(*reinterpret_cast(eventsOut[n].data.ptr)); - } - std::swap(readList, readyReadList); - std::swap(writeList, readyWriteList); - std::swap(exceptList, readyExceptList); - return readList.size() + writeList.size() + exceptList.size(); - -#elif defined(POCO_HAVE_FD_POLL) - - nfds_t nfd = readList.size() + writeList.size() + exceptList.size(); - if (0 == nfd) return 0; - - SharedPollArray pPollArr = new pollfd[nfd]; - - int idx = 0; - for (SocketList::iterator it = readList.begin(); it != readList.end(); ++it) - { - pPollArr[idx].fd = int(it->sockfd()); - pPollArr[idx++].events |= POLLIN; - } - - SocketList::iterator begR = readList.begin(); - SocketList::iterator endR = readList.end(); - for (SocketList::iterator it = writeList.begin(); it != writeList.end(); ++it) - { - SocketList::iterator pos = std::find(begR, endR, *it); - if (pos != endR) - { - pPollArr[pos-begR].events |= POLLOUT; - --nfd; - } - else - { - pPollArr[idx].fd = int(it->sockfd()); - pPollArr[idx++].events |= POLLOUT; - } - } - - SocketList::iterator begW = writeList.begin(); - SocketList::iterator endW = writeList.end(); - for (SocketList::iterator it = exceptList.begin(); it != exceptList.end(); ++it) - { - SocketList::iterator pos = std::find(begR, endR, *it); - if (pos != endR) --nfd; - else - { - SocketList::iterator pos = std::find(begW, endW, *it); - if (pos != endW) --nfd; - else pPollArr[idx++].fd = int(it->sockfd()); - } - } - - Poco::Timespan remainingTime(timeout); - int rc; - do - { - Poco::Timestamp start; - rc = ::poll(pPollArr, nfd, timeout.totalMilliseconds()); - if (rc < 0 && SocketImpl::lastError() == POCO_EINTR) - { - Poco::Timestamp end; - Poco::Timespan waited = end - start; - if (waited < remainingTime) remainingTime -= waited; - else remainingTime = 0; - } - } - while (rc < 0 && SocketImpl::lastError() == POCO_EINTR); - if (rc < 0) SocketImpl::error(); - - SocketList readyReadList; - SocketList readyWriteList; - SocketList readyExceptList; - - SocketList::iterator begE = exceptList.begin(); - SocketList::iterator endE = exceptList.end(); - for (int idx = 0; idx < nfd; ++idx) - { - SocketList::iterator slIt = std::find_if(begR, endR, Socket::FDCompare(pPollArr[idx].fd)); - if (POLLIN & pPollArr[idx].revents && slIt != endR) readyReadList.push_back(*slIt); - slIt = std::find_if(begW, endW, Socket::FDCompare(pPollArr[idx].fd)); - if (POLLOUT & pPollArr[idx].revents && slIt != endW) readyWriteList.push_back(*slIt); - slIt = std::find_if(begE, endE, Socket::FDCompare(pPollArr[idx].fd)); - if (POLLERR & pPollArr[idx].revents && slIt != endE) readyExceptList.push_back(*slIt); - } - std::swap(readList, readyReadList); - std::swap(writeList, readyWriteList); - std::swap(exceptList, readyExceptList); - return readList.size() + writeList.size() + exceptList.size(); - -#else - - fd_set fdRead; - fd_set fdWrite; - fd_set fdExcept; - int nfd = 0; - FD_ZERO(&fdRead); - for (SocketList::const_iterator it = readList.begin(); it != readList.end(); ++it) - { - poco_socket_t fd = it->sockfd(); - if (fd != POCO_INVALID_SOCKET) - { - if (int(fd) > nfd) - nfd = int(fd); - FD_SET(fd, &fdRead); - } - } - FD_ZERO(&fdWrite); - for (SocketList::const_iterator it = writeList.begin(); it != writeList.end(); ++it) - { - poco_socket_t fd = it->sockfd(); - if (fd != POCO_INVALID_SOCKET) - { - if (int(fd) > nfd) - nfd = int(fd); - FD_SET(fd, &fdWrite); - } - } - FD_ZERO(&fdExcept); - for (SocketList::const_iterator it = exceptList.begin(); it != exceptList.end(); ++it) - { - poco_socket_t fd = it->sockfd(); - if (fd != POCO_INVALID_SOCKET) - { - if (int(fd) > nfd) - nfd = int(fd); - FD_SET(fd, &fdExcept); - } - } - if (nfd == 0) return 0; - Poco::Timespan remainingTime(timeout); - int rc; - do - { - struct timeval tv; - tv.tv_sec = (long) remainingTime.totalSeconds(); - tv.tv_usec = (long) remainingTime.useconds(); - Poco::Timestamp start; - rc = ::select(nfd + 1, &fdRead, &fdWrite, &fdExcept, &tv); - if (rc < 0 && SocketImpl::lastError() == POCO_EINTR) - { - Poco::Timestamp end; - Poco::Timespan waited = end - start; - if (waited < remainingTime) - remainingTime -= waited; - else - remainingTime = 0; - } - } - while (rc < 0 && SocketImpl::lastError() == POCO_EINTR); - if (rc < 0) SocketImpl::error(); - - SocketList readyReadList; - for (SocketList::const_iterator it = readList.begin(); it != readList.end(); ++it) - { - poco_socket_t fd = it->sockfd(); - if (fd != POCO_INVALID_SOCKET) - { - if (FD_ISSET(fd, &fdRead)) - readyReadList.push_back(*it); - } - } - std::swap(readList, readyReadList); - SocketList readyWriteList; - for (SocketList::const_iterator it = writeList.begin(); it != writeList.end(); ++it) - { - poco_socket_t fd = it->sockfd(); - if (fd != POCO_INVALID_SOCKET) - { - if (FD_ISSET(fd, &fdWrite)) - readyWriteList.push_back(*it); - } - } - std::swap(writeList, readyWriteList); - SocketList readyExceptList; - for (SocketList::const_iterator it = exceptList.begin(); it != exceptList.end(); ++it) - { - poco_socket_t fd = it->sockfd(); - if (fd != POCO_INVALID_SOCKET) - { - if (FD_ISSET(fd, &fdExcept)) - readyExceptList.push_back(*it); - } - } - std::swap(exceptList, readyExceptList); - return rc; - -#endif // POCO_HAVE_FD_EPOLL -} - - -} } // namespace Poco::Net diff --git a/contrib/libpoco/Net/src/SocketAddress.cpp b/contrib/libpoco/Net/src/SocketAddress.cpp deleted file mode 100644 index 1bd5e2bc9e5..00000000000 --- a/contrib/libpoco/Net/src/SocketAddress.cpp +++ /dev/null @@ -1,266 +0,0 @@ -// -// SocketAddress.cpp -// -// $Id: //poco/1.4/Net/src/SocketAddress.cpp#5 $ -// -// Library: Net -// Package: NetCore -// Module: SocketAddress -// -// Copyright (c) 2005-2011, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "Poco/Net/SocketAddress.h" -#include "Poco/Net/IPAddress.h" -#include "Poco/Net/NetException.h" -#include "Poco/Net/DNS.h" -#include "Poco/RefCountedObject.h" -#include "Poco/NumberParser.h" -#include "Poco/NumberFormatter.h" -#include -#include - - -using Poco::RefCountedObject; -using Poco::NumberParser; -using Poco::NumberFormatter; -using Poco::UInt16; -using Poco::InvalidArgumentException; -using Poco::Net::Impl::SocketAddressImpl; -using Poco::Net::Impl::IPv4SocketAddressImpl; -using Poco::Net::Impl::IPv6SocketAddressImpl; - - -namespace Poco { -namespace Net { - - -struct AFLT -{ - bool operator () (const IPAddress& a1, const IPAddress& a2) - { - return a1.af() < a2.af(); - } -}; - - -// -// SocketAddress -// - - -SocketAddress::SocketAddress() -{ - newIPv4(); -} - - -SocketAddress::SocketAddress(const IPAddress& hostAddress, Poco::UInt16 portNumber) -{ - init(hostAddress, portNumber); -} - - -SocketAddress::SocketAddress(Poco::UInt16 portNumber) -{ - init(IPAddress(), portNumber); -} - - -SocketAddress::SocketAddress(const std::string& hostAddress, Poco::UInt16 portNumber) -{ - init(hostAddress, portNumber); -} - - -SocketAddress::SocketAddress(const std::string& hostAddress, const std::string& portNumber) -{ - init(hostAddress, resolveService(portNumber)); -} - - -SocketAddress::SocketAddress(const std::string& hostAndPort) -{ - poco_assert (!hostAndPort.empty()); - - std::string host; - std::string port; - std::string::const_iterator it = hostAndPort.begin(); - std::string::const_iterator end = hostAndPort.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(host, resolveService(port)); -} - - -SocketAddress::SocketAddress(const SocketAddress& socketAddress) -{ - if (socketAddress.family() == IPAddress::IPv4) - newIPv4(reinterpret_cast(socketAddress.addr())); - else - newIPv6(reinterpret_cast(socketAddress.addr())); -} - - -SocketAddress::SocketAddress(const struct sockaddr* sockAddr, poco_socklen_t length) -{ - if (length == sizeof(struct sockaddr_in)) - newIPv4(reinterpret_cast(sockAddr)); -#if defined(POCO_HAVE_IPv6) - else if (length == sizeof(struct sockaddr_in6)) - newIPv6(reinterpret_cast(sockAddr)); -#endif - else throw Poco::InvalidArgumentException("Invalid address length passed to SocketAddress()"); -} - - -SocketAddress::~SocketAddress() -{ - destruct(); -} - - -bool SocketAddress::operator < (const SocketAddress& socketAddress) const -{ - if (family() < socketAddress.family()) return true; - if (family() > socketAddress.family()) return false; - if (host() < socketAddress.host()) return true; - if (host() > socketAddress.host()) return false; - return (port() < socketAddress.port()); -} - - -SocketAddress& SocketAddress::operator = (const SocketAddress& socketAddress) -{ - if (&socketAddress != this) - { - destruct(); - if (socketAddress.family() == IPAddress::IPv4) - newIPv4(reinterpret_cast(socketAddress.addr())); - else - newIPv6(reinterpret_cast(socketAddress.addr())); - } - return *this; -} - - -IPAddress SocketAddress::host() const -{ - return pImpl()->host(); -} - - -Poco::UInt16 SocketAddress::port() const -{ - return ntohs(pImpl()->port()); -} - - -poco_socklen_t SocketAddress::length() const -{ - return pImpl()->length(); -} - - -const struct sockaddr* SocketAddress::addr() const -{ - return pImpl()->addr(); -} - - -int SocketAddress::af() const -{ - return pImpl()->af(); -} - - -std::string SocketAddress::toString() const -{ - std::string result; -#if defined(POCO_HAVE_IPv6) - if (host().family() == IPAddress::IPv6) - result.append("["); - result.append(host().toString()); - if (host().family() == IPAddress::IPv6) - result.append("]"); -#endif - result.append(":"); - NumberFormatter::append(result, port()); - return result; -} - - -void SocketAddress::init(const IPAddress& hostAddress, Poco::UInt16 portNumber) -{ - if (hostAddress.family() == IPAddress::IPv4) - newIPv4(hostAddress, portNumber); -#if defined(POCO_HAVE_IPv6) - else if (hostAddress.family() == IPAddress::IPv6) - newIPv6(hostAddress, portNumber); -#endif - else throw Poco::NotImplementedException("unsupported IP address family"); -} - - -void SocketAddress::init(const std::string& hostAddress, Poco::UInt16 portNumber) -{ - IPAddress ip; - if (IPAddress::tryParse(hostAddress, ip)) - { - init(ip, portNumber); - } - else - { - HostEntry he = DNS::hostByName(hostAddress); - HostEntry::AddressList addresses = he.addresses(); - if (addresses.size() > 0) - { - init(addresses[0], portNumber); - } - else throw HostNotFoundException("No address found for host", hostAddress); - } -} - - -Poco::UInt16 SocketAddress::resolveService(const std::string& service) -{ - unsigned port; - if (NumberParser::tryParseUnsigned(service, port) && port <= 0xFFFF) - { - return (UInt16) port; - } - else - { -#if defined(POCO_VXWORKS) - throw ServiceNotFoundException(service); -#else - struct servent* se = getservbyname(service.c_str(), NULL); - if (se) - return ntohs(se->s_port); - else - throw ServiceNotFoundException(service); -#endif - } -} - - -} } // namespace Poco::Net diff --git a/contrib/libpoco/Net/src/SocketAddressImpl.cpp b/contrib/libpoco/Net/src/SocketAddressImpl.cpp deleted file mode 100644 index f2de61b46ce..00000000000 --- a/contrib/libpoco/Net/src/SocketAddressImpl.cpp +++ /dev/null @@ -1,107 +0,0 @@ -// -// SocketAddressImpl.cpp -// -// $Id: //poco/1.4/Net/src/SocketAddressImpl.cpp#5 $ -// -// Library: Net -// Package: NetCore -// Module: SocketAddressImpl -// -// Copyright (c) 2005-2011, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "Poco/Net/SocketAddressImpl.h" -#include "Poco/Net/SocketDefs.h" -#include - - -namespace Poco { -namespace Net { -namespace Impl { - -// -// SocketAddressImpl -// - - -SocketAddressImpl::SocketAddressImpl() -{ -} - - -SocketAddressImpl::~SocketAddressImpl() -{ -} - - -// -// IPv4SocketAddressImpl -// - - -IPv4SocketAddressImpl::IPv4SocketAddressImpl() -{ - std::memset(&_addr, 0, sizeof(_addr)); - _addr.sin_family = AF_INET; - poco_set_sin_len(&_addr); -} - - -IPv4SocketAddressImpl::IPv4SocketAddressImpl(const struct sockaddr_in* addr) -{ - std::memcpy(&_addr, addr, sizeof(_addr)); -} - - -IPv4SocketAddressImpl::IPv4SocketAddressImpl(const void* addr, UInt16 port) -{ - std::memset(&_addr, 0, sizeof(_addr)); - _addr.sin_family = AF_INET; - std::memcpy(&_addr.sin_addr, addr, sizeof(_addr.sin_addr)); - _addr.sin_port = port; -} - - -#if defined(POCO_HAVE_IPv6) - - -// -// IPv6SocketAddressImpl -// - - -IPv6SocketAddressImpl::IPv6SocketAddressImpl(const struct sockaddr_in6* addr) -{ - std::memcpy(&_addr, addr, sizeof(_addr)); -} - - -IPv6SocketAddressImpl::IPv6SocketAddressImpl(const void* addr, UInt16 port) -{ - std::memset(&_addr, 0, sizeof(_addr)); - _addr.sin6_family = AF_INET6; - poco_set_sin6_len(&_addr); - std::memcpy(&_addr.sin6_addr, addr, sizeof(_addr.sin6_addr)); - _addr.sin6_port = port; -} - - -IPv6SocketAddressImpl::IPv6SocketAddressImpl(const void* addr, UInt16 port, UInt32 scope) -{ - std::memset(&_addr, 0, sizeof(_addr)); - _addr.sin6_family = AF_INET6; - poco_set_sin6_len(&_addr); - std::memcpy(&_addr.sin6_addr, addr, sizeof(_addr.sin6_addr)); - _addr.sin6_port = port; - _addr.sin6_scope_id = scope; -} - - -#endif // POCO_HAVE_IPv6 - - -} } } // namespace Poco::Net::Impl diff --git a/contrib/libpoco/Net/src/SocketImpl.cpp b/contrib/libpoco/Net/src/SocketImpl.cpp deleted file mode 100644 index b94e47f8535..00000000000 --- a/contrib/libpoco/Net/src/SocketImpl.cpp +++ /dev/null @@ -1,1086 +0,0 @@ -// -// SocketImpl.cpp -// -// $Id: //poco/1.4/Net/src/SocketImpl.cpp#6 $ -// -// Library: Net -// Package: Sockets -// Module: SocketImpl -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "Poco/Net/SocketImpl.h" -#include "Poco/Net/NetException.h" -#include "Poco/Net/StreamSocketImpl.h" -#include "Poco/NumberFormatter.h" -#include "Poco/Timestamp.h" -#include // FD_SET needs memset on some platforms, so we can't use -#if defined(POCO_HAVE_FD_EPOLL) -#include -#elif defined(POCO_HAVE_FD_POLL) -#include -#endif - - -#if defined(sun) || defined(__sun) || defined(__sun__) -#include -#include -#endif - - -using Poco::IOException; -using Poco::TimeoutException; -using Poco::InvalidArgumentException; -using Poco::NumberFormatter; -using Poco::Timespan; - - -namespace Poco { -namespace Net { - - -SocketImpl::SocketImpl(): - _sockfd(POCO_INVALID_SOCKET), - _blocking(true) -{ -} - - -SocketImpl::SocketImpl(poco_socket_t sockfd): - _sockfd(sockfd), - _blocking(true) -{ -} - - -SocketImpl::~SocketImpl() -{ - close(); -} - - -SocketImpl* SocketImpl::acceptConnection(SocketAddress& clientAddr) -{ - if (_sockfd == POCO_INVALID_SOCKET) throw InvalidSocketException(); - - char buffer[SocketAddress::MAX_ADDRESS_LENGTH]; - struct sockaddr* pSA = reinterpret_cast(buffer); - poco_socklen_t saLen = sizeof(buffer); - poco_socket_t sd; - do - { - sd = ::accept(_sockfd, pSA, &saLen); - } - while (sd == POCO_INVALID_SOCKET && lastError() == POCO_EINTR); - if (sd != POCO_INVALID_SOCKET) - { - clientAddr = SocketAddress(pSA, saLen); - return new StreamSocketImpl(sd); - } - error(); // will throw - return 0; -} - - -void SocketImpl::connect(const SocketAddress& address) -{ - if (_sockfd == POCO_INVALID_SOCKET) - { - init(address.af()); - } - int rc; - do - { -#if defined(POCO_VXWORKS) - rc = ::connect(_sockfd, (sockaddr*) address.addr(), address.length()); -#else - rc = ::connect(_sockfd, address.addr(), address.length()); -#endif - } - while (rc != 0 && lastError() == POCO_EINTR); - if (rc != 0) - { - int err = lastError(); - error(err, address.toString()); - } -} - - -void SocketImpl::connect(const SocketAddress& address, const Poco::Timespan& timeout) -{ - if (_sockfd == POCO_INVALID_SOCKET) - { - init(address.af()); - } - setBlocking(false); - try - { -#if defined(POCO_VXWORKS) - int rc = ::connect(_sockfd, (sockaddr*) address.addr(), address.length()); -#else - int rc = ::connect(_sockfd, address.addr(), address.length()); -#endif - if (rc != 0) - { - int err = lastError(); - if (err != POCO_EINPROGRESS && err != POCO_EWOULDBLOCK) - error(err, address.toString()); - if (!poll(timeout, SELECT_READ | SELECT_WRITE | SELECT_ERROR)) - throw Poco::TimeoutException("connect timed out", address.toString()); - err = socketError(); - if (err != 0) error(err); - } - } - catch (Poco::Exception&) - { - setBlocking(true); - throw; - } - setBlocking(true); -} - - -void SocketImpl::connectNB(const SocketAddress& address) -{ - if (_sockfd == POCO_INVALID_SOCKET) - { - init(address.af()); - } - setBlocking(false); -#if defined(POCO_VXWORKS) - int rc = ::connect(_sockfd, (sockaddr*) address.addr(), address.length()); -#else - int rc = ::connect(_sockfd, address.addr(), address.length()); -#endif - if (rc != 0) - { - int err = lastError(); - if (err != POCO_EINPROGRESS && err != POCO_EWOULDBLOCK) - error(err, address.toString()); - } -} - - -void SocketImpl::bind(const SocketAddress& address, bool reuseAddress) -{ - if (_sockfd == POCO_INVALID_SOCKET) - { - init(address.af()); - } - if (reuseAddress) - { - setReuseAddress(true); - setReusePort(true); - } -#if defined(POCO_VXWORKS) - int rc = ::bind(_sockfd, (sockaddr*) address.addr(), address.length()); -#else - int rc = ::bind(_sockfd, address.addr(), address.length()); -#endif - if (rc != 0) error(address.toString()); -} - - -void SocketImpl::bind6(const SocketAddress& address, bool reuseAddress, bool ipV6Only) -{ -#if defined(POCO_HAVE_IPv6) - if (address.family() != IPAddress::IPv6) - throw Poco::InvalidArgumentException("SocketAddress must be an IPv6 address"); - - if (_sockfd == POCO_INVALID_SOCKET) - { - init(address.af()); - } -#ifdef IPV6_V6ONLY - setOption(IPPROTO_IPV6, IPV6_V6ONLY, ipV6Only ? 1 : 0); -#else - if (ipV6Only) throw Poco::NotImplementedException("IPV6_V6ONLY not defined."); -#endif - if (reuseAddress) - { - setReuseAddress(true); - setReusePort(true); - } - int rc = ::bind(_sockfd, address.addr(), address.length()); - if (rc != 0) error(address.toString()); -#else - throw Poco::NotImplementedException("No IPv6 support available"); -#endif -} - - -void SocketImpl::listen(int backlog) -{ - if (_sockfd == POCO_INVALID_SOCKET) throw InvalidSocketException(); - - int rc = ::listen(_sockfd, backlog); - if (rc != 0) error(); -} - - -void SocketImpl::close() -{ - if (_sockfd != POCO_INVALID_SOCKET) - { - poco_closesocket(_sockfd); - _sockfd = POCO_INVALID_SOCKET; - } -} - - -void SocketImpl::shutdownReceive() -{ - if (_sockfd == POCO_INVALID_SOCKET) throw InvalidSocketException(); - - int rc = ::shutdown(_sockfd, 0); - if (rc != 0) error(); -} - - -void SocketImpl::shutdownSend() -{ - if (_sockfd == POCO_INVALID_SOCKET) throw InvalidSocketException(); - - int rc = ::shutdown(_sockfd, 1); - if (rc != 0) error(); -} - - -void SocketImpl::shutdown() -{ - if (_sockfd == POCO_INVALID_SOCKET) throw InvalidSocketException(); - - int rc = ::shutdown(_sockfd, 2); - if (rc != 0) error(); -} - - -int SocketImpl::sendBytes(const void* buffer, int length, int flags) -{ -#if defined(POCO_BROKEN_TIMEOUTS) - if (_sndTimeout.totalMicroseconds() != 0) - { - if (!poll(_sndTimeout, SELECT_WRITE)) - throw TimeoutException(); - } -#endif - - int rc; - do - { - if (_sockfd == POCO_INVALID_SOCKET) throw InvalidSocketException(); - rc = ::send(_sockfd, reinterpret_cast(buffer), length, flags); - } - while (_blocking && rc < 0 && lastError() == POCO_EINTR); - if (rc < 0) - { - int err = lastError(); - if (err == POCO_EAGAIN || err == POCO_ETIMEDOUT) - throw TimeoutException(); - else - error(err); - } - return rc; -} - - -int SocketImpl::receiveBytes(void* buffer, int length, int flags) -{ -#if defined(POCO_BROKEN_TIMEOUTS) - if (_recvTimeout.totalMicroseconds() != 0) - { - if (!poll(_recvTimeout, SELECT_READ)) - throw TimeoutException(); - } -#endif - - int rc; - do - { - if (_sockfd == POCO_INVALID_SOCKET) throw InvalidSocketException(); - rc = ::recv(_sockfd, reinterpret_cast(buffer), length, flags); - } - while (_blocking && rc < 0 && lastError() == POCO_EINTR); - if (rc < 0) - { - int err = lastError(); - if (err == POCO_EAGAIN && !_blocking) - ; - else if (err == POCO_EAGAIN || err == POCO_ETIMEDOUT) - throw TimeoutException(err); - else - error(err); - } - return rc; -} - - -int SocketImpl::sendTo(const void* buffer, int length, const SocketAddress& address, int flags) -{ - int rc; - do - { - if (_sockfd == POCO_INVALID_SOCKET) throw InvalidSocketException(); -#if defined(POCO_VXWORKS) - rc = ::sendto(_sockfd, (char*) buffer, length, flags, (sockaddr*) address.addr(), address.length()); -#else - rc = ::sendto(_sockfd, reinterpret_cast(buffer), length, flags, address.addr(), address.length()); -#endif - } - while (_blocking && rc < 0 && lastError() == POCO_EINTR); - if (rc < 0) error(); - return rc; -} - - -int SocketImpl::receiveFrom(void* buffer, int length, SocketAddress& address, int flags) -{ -#if defined(POCO_BROKEN_TIMEOUTS) - if (_recvTimeout.totalMicroseconds() != 0) - { - if (!poll(_recvTimeout, SELECT_READ)) - throw TimeoutException(); - } -#endif - - char abuffer[SocketAddress::MAX_ADDRESS_LENGTH]; - struct sockaddr* pSA = reinterpret_cast(abuffer); - poco_socklen_t saLen = sizeof(abuffer); - int rc; - do - { - if (_sockfd == POCO_INVALID_SOCKET) throw InvalidSocketException(); - rc = ::recvfrom(_sockfd, reinterpret_cast(buffer), length, flags, pSA, &saLen); - } - while (_blocking && rc < 0 && lastError() == POCO_EINTR); - if (rc >= 0) - { - address = SocketAddress(pSA, saLen); - } - else - { - int err = lastError(); - if (err == POCO_EAGAIN && !_blocking) - ; - else if (err == POCO_EAGAIN || err == POCO_ETIMEDOUT) - throw TimeoutException(err); - else - error(err); - } - return rc; -} - - -void SocketImpl::sendUrgent(unsigned char data) -{ - if (_sockfd == POCO_INVALID_SOCKET) throw InvalidSocketException(); - - int rc = ::send(_sockfd, reinterpret_cast(&data), sizeof(data), MSG_OOB); - if (rc < 0) error(); -} - - -int SocketImpl::available() -{ - int result; - ioctl(FIONREAD, result); - return result; -} - - -bool SocketImpl::secure() const -{ - return false; -} - - -bool SocketImpl::poll(const Poco::Timespan& timeout, int mode) -{ - poco_socket_t sockfd = _sockfd; - if (sockfd == POCO_INVALID_SOCKET) throw InvalidSocketException(); - -#if defined(POCO_HAVE_FD_EPOLL) - - int epollfd = epoll_create(1); - if (epollfd < 0) - { - char buf[1024]; - auto res = strerror_r(errno, buf, sizeof(buf)); - (void)res; - error(std::string("Can't create epoll queue: ") + buf); - } - - struct epoll_event evin; - memset(&evin, 0, sizeof(evin)); - - if (mode & SELECT_READ) - evin.events |= EPOLLIN; - if (mode & SELECT_WRITE) - evin.events |= EPOLLOUT; - if (mode & SELECT_ERROR) - evin.events |= EPOLLERR; - - if (epoll_ctl(epollfd, EPOLL_CTL_ADD, sockfd, &evin) < 0) - { - char buf[1024]; - auto res = strerror_r(errno, buf, sizeof(buf)); - (void)res; - ::close(epollfd); - error(std::string("Can't insert socket to epoll queue: ") + buf); - } - - Poco::Timespan remainingTime(timeout); - int rc; - do - { - struct epoll_event evout; - memset(&evout, 0, sizeof(evout)); - - Poco::Timestamp start; - rc = epoll_wait(epollfd, &evout, 1, remainingTime.totalMilliseconds()); - if (rc < 0 && lastError() == POCO_EINTR) - { - Poco::Timestamp end; - Poco::Timespan waited = end - start; - if (waited < remainingTime) - remainingTime -= waited; - else - remainingTime = 0; - } - } - while (rc < 0 && lastError() == POCO_EINTR); - - ::close(epollfd); - if (rc < 0) - error(); - return rc > 0; - -#elif defined(POCO_HAVE_FD_POLL) - - pollfd pollBuf; - - memset(&pollBuf, 0, sizeof(pollfd)); - pollBuf.fd = _sockfd; - if (mode & SELECT_READ) pollBuf.events |= POLLIN; - if (mode & SELECT_WRITE) pollBuf.events |= POLLOUT; - - Poco::Timespan remainingTime(timeout); - int rc; - do - { - Poco::Timestamp start; - rc = ::poll(&pollBuf, 1, remainingTime.totalMilliseconds()); - - if (rc < 0 && lastError() == POCO_EINTR) - { - Poco::Timestamp end; - Poco::Timespan waited = end - start; - if (waited < remainingTime) - remainingTime -= waited; - else - remainingTime = 0; - } - } - while (rc < 0 && lastError() == POCO_EINTR); - if (rc < 0) error(); - return rc > 0; - -#else - - fd_set fdRead; - fd_set fdWrite; - fd_set fdExcept; - FD_ZERO(&fdRead); - FD_ZERO(&fdWrite); - FD_ZERO(&fdExcept); - if (mode & SELECT_READ) - { - FD_SET(sockfd, &fdRead); - } - if (mode & SELECT_WRITE) - { - FD_SET(sockfd, &fdWrite); - } - if (mode & SELECT_ERROR) - { - FD_SET(sockfd, &fdExcept); - } - Poco::Timespan remainingTime(timeout); - int errorCode = POCO_ENOERR; - int rc; - do - { - struct timeval tv; - tv.tv_sec = (long) remainingTime.totalSeconds(); - tv.tv_usec = (long) remainingTime.useconds(); - Poco::Timestamp start; - rc = ::select(int(sockfd) + 1, &fdRead, &fdWrite, &fdExcept, &tv); - if (rc < 0 && (errorCode = lastError()) == POCO_EINTR) - { - Poco::Timestamp end; - Poco::Timespan waited = end - start; - if (waited < remainingTime) - remainingTime -= waited; - else - remainingTime = 0; - } - } - while (rc < 0 && errorCode == POCO_EINTR); - if (rc < 0) error(errorCode); - return rc > 0; - -#endif // POCO_HAVE_FD_EPOLL -} - - -void SocketImpl::setSendBufferSize(int size) -{ - setOption(SOL_SOCKET, SO_SNDBUF, size); -} - - -int SocketImpl::getSendBufferSize() -{ - int result; - getOption(SOL_SOCKET, SO_SNDBUF, result); - return result; -} - - -void SocketImpl::setReceiveBufferSize(int size) -{ - setOption(SOL_SOCKET, SO_RCVBUF, size); -} - - -int SocketImpl::getReceiveBufferSize() -{ - int result; - getOption(SOL_SOCKET, SO_RCVBUF, result); - return result; -} - - -void SocketImpl::setSendTimeout(const Poco::Timespan& timeout) -{ -#if defined(_WIN32) && !defined(POCO_BROKEN_TIMEOUTS) - int value = (int) timeout.totalMilliseconds(); - setOption(SOL_SOCKET, SO_SNDTIMEO, value); -#elif defined(POCO_BROKEN_TIMEOUTS) - _sndTimeout = timeout; -#else - setOption(SOL_SOCKET, SO_SNDTIMEO, timeout); -#endif -} - - -Poco::Timespan SocketImpl::getSendTimeout() -{ - Timespan result; -#if defined(_WIN32) && !defined(POCO_BROKEN_TIMEOUTS) - int value; - getOption(SOL_SOCKET, SO_SNDTIMEO, value); - result = Timespan::TimeDiff(value)*1000; -#elif defined(POCO_BROKEN_TIMEOUTS) - result = _sndTimeout; -#else - getOption(SOL_SOCKET, SO_SNDTIMEO, result); -#endif - return result; -} - - -void SocketImpl::setReceiveTimeout(const Poco::Timespan& timeout) -{ -#ifndef POCO_BROKEN_TIMEOUTS -#if defined(_WIN32) - int value = (int) timeout.totalMilliseconds(); - setOption(SOL_SOCKET, SO_RCVTIMEO, value); -#else - setOption(SOL_SOCKET, SO_RCVTIMEO, timeout); -#endif -#else - _recvTimeout = timeout; -#endif -} - - -Poco::Timespan SocketImpl::getReceiveTimeout() -{ - Timespan result; -#if defined(_WIN32) && !defined(POCO_BROKEN_TIMEOUTS) - int value; - getOption(SOL_SOCKET, SO_RCVTIMEO, value); - result = Timespan::TimeDiff(value)*1000; -#elif defined(POCO_BROKEN_TIMEOUTS) - result = _recvTimeout; -#else - getOption(SOL_SOCKET, SO_RCVTIMEO, result); -#endif - return result; -} - - -SocketAddress SocketImpl::address() -{ - if (_sockfd == POCO_INVALID_SOCKET) throw InvalidSocketException(); - - char buffer[SocketAddress::MAX_ADDRESS_LENGTH]; - struct sockaddr* pSA = reinterpret_cast(buffer); - poco_socklen_t saLen = sizeof(buffer); - int rc = ::getsockname(_sockfd, pSA, &saLen); - if (rc == 0) - return SocketAddress(pSA, saLen); - else - error(); - return SocketAddress(); -} - - -SocketAddress SocketImpl::peerAddress() -{ - if (_sockfd == POCO_INVALID_SOCKET) throw InvalidSocketException(); - - char buffer[SocketAddress::MAX_ADDRESS_LENGTH]; - struct sockaddr* pSA = reinterpret_cast(buffer); - poco_socklen_t saLen = sizeof(buffer); - int rc = ::getpeername(_sockfd, pSA, &saLen); - if (rc == 0) - return SocketAddress(pSA, saLen); - else - error(); - return SocketAddress(); -} - - -void SocketImpl::setOption(int level, int option, int value) -{ - setRawOption(level, option, &value, sizeof(value)); -} - - -void SocketImpl::setOption(int level, int option, unsigned value) -{ - setRawOption(level, option, &value, sizeof(value)); -} - - -void SocketImpl::setOption(int level, int option, unsigned char value) -{ - setRawOption(level, option, &value, sizeof(value)); -} - - -void SocketImpl::setOption(int level, int option, const IPAddress& value) -{ - setRawOption(level, option, value.addr(), value.length()); -} - - -void SocketImpl::setOption(int level, int option, const Poco::Timespan& value) -{ - struct timeval tv; - tv.tv_sec = (long) value.totalSeconds(); - tv.tv_usec = (long) value.useconds(); - - setRawOption(level, option, &tv, sizeof(tv)); -} - - -void SocketImpl::setRawOption(int level, int option, const void* value, poco_socklen_t length) -{ - if (_sockfd == POCO_INVALID_SOCKET) throw InvalidSocketException(); - -#if defined(POCO_VXWORKS) - int rc = ::setsockopt(_sockfd, level, option, (char*) value, length); -#else - int rc = ::setsockopt(_sockfd, level, option, reinterpret_cast(value), length); -#endif - if (rc == -1) error(); -} - - -void SocketImpl::getOption(int level, int option, int& value) -{ - poco_socklen_t len = sizeof(value); - getRawOption(level, option, &value, len); -} - - -void SocketImpl::getOption(int level, int option, unsigned& value) -{ - poco_socklen_t len = sizeof(value); - getRawOption(level, option, &value, len); -} - - -void SocketImpl::getOption(int level, int option, unsigned char& value) -{ - poco_socklen_t len = sizeof(value); - getRawOption(level, option, &value, len); -} - - -void SocketImpl::getOption(int level, int option, Poco::Timespan& value) -{ - struct timeval tv; - poco_socklen_t len = sizeof(tv); - getRawOption(level, option, &tv, len); - value.assign(tv.tv_sec, tv.tv_usec); -} - - -void SocketImpl::getOption(int level, int option, IPAddress& value) -{ - char buffer[IPAddress::MAX_ADDRESS_LENGTH]; - poco_socklen_t len = sizeof(buffer); - getRawOption(level, option, buffer, len); - value = IPAddress(buffer, len); -} - - -void SocketImpl::getRawOption(int level, int option, void* value, poco_socklen_t& length) -{ - if (_sockfd == POCO_INVALID_SOCKET) throw InvalidSocketException(); - - int rc = ::getsockopt(_sockfd, level, option, reinterpret_cast(value), &length); - if (rc == -1) error(); -} - - -void SocketImpl::setLinger(bool on, int seconds) -{ - struct linger l; - l.l_onoff = on ? 1 : 0; - l.l_linger = seconds; - setRawOption(SOL_SOCKET, SO_LINGER, &l, sizeof(l)); -} - - -void SocketImpl::getLinger(bool& on, int& seconds) -{ - struct linger l; - poco_socklen_t len = sizeof(l); - getRawOption(SOL_SOCKET, SO_LINGER, &l, len); - on = l.l_onoff != 0; - seconds = l.l_linger; -} - - -void SocketImpl::setNoDelay(bool flag) -{ - int value = flag ? 1 : 0; - setOption(IPPROTO_TCP, TCP_NODELAY, value); -} - - -bool SocketImpl::getNoDelay() -{ - int value(0); - getOption(IPPROTO_TCP, TCP_NODELAY, value); - return value != 0; -} - - -void SocketImpl::setKeepAlive(bool flag) -{ - int value = flag ? 1 : 0; - setOption(SOL_SOCKET, SO_KEEPALIVE, value); -} - - -bool SocketImpl::getKeepAlive() -{ - int value(0); - getOption(SOL_SOCKET, SO_KEEPALIVE, value); - return value != 0; -} - - -void SocketImpl::setReuseAddress(bool flag) -{ - int value = flag ? 1 : 0; - setOption(SOL_SOCKET, SO_REUSEADDR, value); -} - - -bool SocketImpl::getReuseAddress() -{ - int value(0); - getOption(SOL_SOCKET, SO_REUSEADDR, value); - return value != 0; -} - - -void SocketImpl::setReusePort(bool flag) -{ -#ifdef SO_REUSEPORT - try - { - int value = flag ? 1 : 0; - setOption(SOL_SOCKET, SO_REUSEPORT, value); - } - catch (IOException&) - { - // ignore error, since not all implementations - // support SO_REUSEPORT, even if the macro - // is defined. - } -#endif -} - - -bool SocketImpl::getReusePort() -{ -#ifdef SO_REUSEPORT - int value(0); - getOption(SOL_SOCKET, SO_REUSEPORT, value); - return value != 0; -#else - return false; -#endif -} - - -void SocketImpl::setOOBInline(bool flag) -{ - int value = flag ? 1 : 0; - setOption(SOL_SOCKET, SO_OOBINLINE, value); -} - - -bool SocketImpl::getOOBInline() -{ - int value(0); - getOption(SOL_SOCKET, SO_OOBINLINE, value); - return value != 0; -} - - -void SocketImpl::setBroadcast(bool flag) -{ - int value = flag ? 1 : 0; - setOption(SOL_SOCKET, SO_BROADCAST, value); -} - - -bool SocketImpl::getBroadcast() -{ - int value(0); - getOption(SOL_SOCKET, SO_BROADCAST, value); - return value != 0; -} - - -void SocketImpl::setBlocking(bool flag) -{ -#if !defined(POCO_OS_FAMILY_UNIX) - int arg = flag ? 0 : 1; - ioctl(FIONBIO, arg); -#else - int arg = fcntl(F_GETFL); - long flags = arg & ~O_NONBLOCK; - if (!flag) flags |= O_NONBLOCK; - (void) fcntl(F_SETFL, flags); -#endif - _blocking = flag; -} - - -int SocketImpl::socketError() -{ - int result(0); - getOption(SOL_SOCKET, SO_ERROR, result); - return result; -} - - -void SocketImpl::init(int af) -{ - initSocket(af, SOCK_STREAM); -} - - -void SocketImpl::initSocket(int af, int type, int proto) -{ - poco_assert (_sockfd == POCO_INVALID_SOCKET); - - _sockfd = ::socket(af, type, proto); - if (_sockfd == POCO_INVALID_SOCKET) - error(); - -#if defined(__MACH__) && defined(__APPLE__) || defined(__FreeBSD__) - // SIGPIPE sends a signal that if unhandled (which is the default) - // will crash the process. This only happens on UNIX, and not Linux. - // - // In order to have POCO sockets behave the same across platforms, it is - // best to just ignore SIGPIPE all together. - setOption(SOL_SOCKET, SO_NOSIGPIPE, 1); -#endif -} - - -void SocketImpl::ioctl(poco_ioctl_request_t request, int& arg) -{ -#if defined(_WIN32) - int rc = ioctlsocket(_sockfd, request, reinterpret_cast(&arg)); -#elif defined(POCO_VXWORKS) - int rc = ::ioctl(_sockfd, request, (int) &arg); -#else - int rc = ::ioctl(_sockfd, request, &arg); -#endif - if (rc != 0) error(); -} - - -void SocketImpl::ioctl(poco_ioctl_request_t request, void* arg) -{ -#if defined(_WIN32) - int rc = ioctlsocket(_sockfd, request, reinterpret_cast(arg)); -#elif defined(POCO_VXWORKS) - int rc = ::ioctl(_sockfd, request, (int) arg); -#else - int rc = ::ioctl(_sockfd, request, arg); -#endif - if (rc != 0) error(); -} - - -#if defined(POCO_OS_FAMILY_UNIX) -int SocketImpl::fcntl(poco_fcntl_request_t request) -{ - int rc = ::fcntl(_sockfd, request); - if (rc == -1) error(); - return rc; -} - - -int SocketImpl::fcntl(poco_fcntl_request_t request, long arg) -{ - int rc = ::fcntl(_sockfd, request, arg); - if (rc == -1) error(); - return rc; -} -#endif - - -void SocketImpl::reset(poco_socket_t aSocket) -{ - _sockfd = aSocket; -} - - -void SocketImpl::error() -{ - int err = lastError(); - std::string empty; - error(err, empty); -} - - -void SocketImpl::error(const std::string& arg) -{ - error(lastError(), arg); -} - - -void SocketImpl::error(int code) -{ - std::string arg; - error(code, arg); -} - - -void SocketImpl::error(int code, const std::string& arg) -{ - switch (code) - { - case POCO_ENOERR: return; - case POCO_ESYSNOTREADY: - throw NetException("Net subsystem not ready", code); - case POCO_ENOTINIT: - throw NetException("Net subsystem not initialized", code); - case POCO_EINTR: - throw IOException("Interrupted", code); - case POCO_EACCES: - throw IOException("Permission denied", code); - case POCO_EFAULT: - throw IOException("Bad address", code); - case POCO_EINVAL: - throw InvalidArgumentException(code); - case POCO_EMFILE: - throw IOException("Too many open files", code); - case POCO_EWOULDBLOCK: - throw IOException("Operation would block", code); - case POCO_EINPROGRESS: - throw IOException("Operation now in progress", code); - case POCO_EALREADY: - throw IOException("Operation already in progress", code); - case POCO_ENOTSOCK: - throw IOException("Socket operation attempted on non-socket", code); - case POCO_EDESTADDRREQ: - throw NetException("Destination address required", code); - case POCO_EMSGSIZE: - throw NetException("Message too long", code); - case POCO_EPROTOTYPE: - throw NetException("Wrong protocol type", code); - case POCO_ENOPROTOOPT: - throw NetException("Protocol not available", code); - case POCO_EPROTONOSUPPORT: - throw NetException("Protocol not supported", code); - case POCO_ESOCKTNOSUPPORT: - throw NetException("Socket type not supported", code); - case POCO_ENOTSUP: - throw NetException("Operation not supported", code); - case POCO_EPFNOSUPPORT: - throw NetException("Protocol family not supported", code); - case POCO_EAFNOSUPPORT: - throw NetException("Address family not supported", code); - case POCO_EADDRINUSE: - throw NetException("Address already in use", arg, code); - case POCO_EADDRNOTAVAIL: - throw NetException("Cannot assign requested address", arg, code); - case POCO_ENETDOWN: - throw NetException("Network is down", code); - case POCO_ENETUNREACH: - throw NetException("Network is unreachable", code); - case POCO_ENETRESET: - throw NetException("Network dropped connection on reset", code); - case POCO_ECONNABORTED: - throw ConnectionAbortedException(code); - case POCO_ECONNRESET: - throw ConnectionResetException(code); - case POCO_ENOBUFS: - throw IOException("No buffer space available", code); - case POCO_EISCONN: - throw NetException("Socket is already connected", code); - case POCO_ENOTCONN: - throw NetException("Socket is not connected", code); - case POCO_ESHUTDOWN: - throw NetException("Cannot send after socket shutdown", code); - case POCO_ETIMEDOUT: - throw TimeoutException(code); - case POCO_ECONNREFUSED: - throw ConnectionRefusedException(arg, code); - case POCO_EHOSTDOWN: - throw NetException("Host is down", arg, code); - case POCO_EHOSTUNREACH: - throw NetException("No route to host", arg, code); -#if defined(POCO_OS_FAMILY_UNIX) - case EPIPE: - throw IOException("Broken pipe", code); - case EBADF: - throw IOException("Bad socket descriptor", code); -#endif - default: - throw IOException(NumberFormatter::format(code), arg, code); - } -} - - -} } // namespace Poco::Net diff --git a/contrib/libpoco/Net/src/SocketNotification.cpp b/contrib/libpoco/Net/src/SocketNotification.cpp deleted file mode 100644 index d29a2203cb6..00000000000 --- a/contrib/libpoco/Net/src/SocketNotification.cpp +++ /dev/null @@ -1,107 +0,0 @@ -// -// SocketNotification.cpp -// -// $Id: //poco/1.4/Net/src/SocketNotification.cpp#1 $ -// -// Library: Net -// Package: Reactor -// Module: SocketNotification -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "Poco/Net/SocketNotification.h" - - -namespace Poco { -namespace Net { - - -SocketNotification::SocketNotification(SocketReactor* pReactor): - _pReactor(pReactor) -{ -} - - -SocketNotification::~SocketNotification() -{ -} - - -void SocketNotification::setSocket(const Socket& socket) -{ - _socket = socket; -} - - -ReadableNotification::ReadableNotification(SocketReactor* pReactor): - SocketNotification(pReactor) -{ -} - - -ReadableNotification::~ReadableNotification() -{ -} - - -WritableNotification::WritableNotification(SocketReactor* pReactor): - SocketNotification(pReactor) -{ -} - - -WritableNotification::~WritableNotification() -{ -} - - -ErrorNotification::ErrorNotification(SocketReactor* pReactor): - SocketNotification(pReactor) -{ -} - - -ErrorNotification::~ErrorNotification() -{ -} - - -TimeoutNotification::TimeoutNotification(SocketReactor* pReactor): - SocketNotification(pReactor) -{ -} - - -TimeoutNotification::~TimeoutNotification() -{ -} - - -IdleNotification::IdleNotification(SocketReactor* pReactor): - SocketNotification(pReactor) -{ -} - - -IdleNotification::~IdleNotification() -{ -} - - -ShutdownNotification::ShutdownNotification(SocketReactor* pReactor): - SocketNotification(pReactor) -{ -} - - -ShutdownNotification::~ShutdownNotification() -{ -} - - -} } // namespace Poco::Net diff --git a/contrib/libpoco/Net/src/SocketNotifier.cpp b/contrib/libpoco/Net/src/SocketNotifier.cpp deleted file mode 100644 index 91a04f48e95..00000000000 --- a/contrib/libpoco/Net/src/SocketNotifier.cpp +++ /dev/null @@ -1,91 +0,0 @@ -// -// SocketNotifier.cpp -// -// $Id: //poco/1.4/Net/src/SocketNotifier.cpp#1 $ -// -// Library: Net -// Package: Reactor -// Module: SocketNotifier -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "Poco/Net/SocketNotifier.h" -#include "Poco/Net/SocketReactor.h" -#include "Poco/Net/SocketNotification.h" - - -namespace Poco { -namespace Net { - - -SocketNotifier::SocketNotifier(const Socket& socket): - _socket(socket) -{ -} - - -SocketNotifier::~SocketNotifier() -{ -} - - -void SocketNotifier::addObserver(SocketReactor* pReactor, const Poco::AbstractObserver& observer) -{ - _nc.addObserver(observer); - if (observer.accepts(pReactor->_pReadableNotification)) - _events.insert(pReactor->_pReadableNotification.get()); - else if (observer.accepts(pReactor->_pWritableNotification)) - _events.insert(pReactor->_pWritableNotification.get()); - else if (observer.accepts(pReactor->_pErrorNotification)) - _events.insert(pReactor->_pErrorNotification.get()); - else if (observer.accepts(pReactor->_pTimeoutNotification)) - _events.insert(pReactor->_pTimeoutNotification.get()); -} - - -void SocketNotifier::removeObserver(SocketReactor* pReactor, const Poco::AbstractObserver& observer) -{ - _nc.removeObserver(observer); - EventSet::iterator it = _events.end(); - if (observer.accepts(pReactor->_pReadableNotification)) - it = _events.find(pReactor->_pReadableNotification.get()); - else if (observer.accepts(pReactor->_pWritableNotification)) - it = _events.find(pReactor->_pWritableNotification.get()); - else if (observer.accepts(pReactor->_pErrorNotification)) - it = _events.find(pReactor->_pErrorNotification.get()); - else if (observer.accepts(pReactor->_pTimeoutNotification)) - it = _events.find(pReactor->_pTimeoutNotification.get()); - if (it != _events.end()) - _events.erase(it); -} - - -namespace -{ - static Socket nullSocket; -} - - -void SocketNotifier::dispatch(SocketNotification* pNotification) -{ - pNotification->setSocket(_socket); - pNotification->duplicate(); - try - { - _nc.postNotification(pNotification); - } - catch (...) - { - pNotification->setSocket(nullSocket); - throw; - } - pNotification->setSocket(nullSocket); -} - - -} } // namespace Poco::Net diff --git a/contrib/libpoco/Net/src/SocketReactor.cpp b/contrib/libpoco/Net/src/SocketReactor.cpp deleted file mode 100644 index fb43589d18b..00000000000 --- a/contrib/libpoco/Net/src/SocketReactor.cpp +++ /dev/null @@ -1,299 +0,0 @@ -// -// SocketReactor.cpp -// -// $Id: //poco/1.4/Net/src/SocketReactor.cpp#1 $ -// -// Library: Net -// Package: Reactor -// Module: SocketReactor -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "Poco/Net/SocketReactor.h" -#include "Poco/Net/SocketNotification.h" -#include "Poco/Net/SocketNotifier.h" -#include "Poco/ErrorHandler.h" -#include "Poco/Thread.h" -#include "Poco/Exception.h" - - -using Poco::FastMutex; -using Poco::Exception; -using Poco::ErrorHandler; - - -namespace Poco { -namespace Net { - - -SocketReactor::SocketReactor(): - _stop(false), - _timeout(DEFAULT_TIMEOUT), - _pReadableNotification(new ReadableNotification(this)), - _pWritableNotification(new WritableNotification(this)), - _pErrorNotification(new ErrorNotification(this)), - _pTimeoutNotification(new TimeoutNotification(this)), - _pIdleNotification(new IdleNotification(this)), - _pShutdownNotification(new ShutdownNotification(this)), - _pThread(0) -{ -} - - -SocketReactor::SocketReactor(const Poco::Timespan& timeout): - _stop(false), - _timeout(timeout), - _pReadableNotification(new ReadableNotification(this)), - _pWritableNotification(new WritableNotification(this)), - _pErrorNotification(new ErrorNotification(this)), - _pTimeoutNotification(new TimeoutNotification(this)), - _pIdleNotification(new IdleNotification(this)), - _pShutdownNotification(new ShutdownNotification(this)), - _pThread(0) -{ -} - - -SocketReactor::~SocketReactor() -{ -} - - -void SocketReactor::run() -{ - _pThread = Thread::current(); - - Socket::SocketList readable; - Socket::SocketList writable; - Socket::SocketList except; - - while (!_stop) - { - try - { - readable.clear(); - writable.clear(); - except.clear(); - int nSockets = 0; - { - FastMutex::ScopedLock lock(_mutex); - for (EventHandlerMap::iterator it = _handlers.begin(); it != _handlers.end(); ++it) - { - if (it->second->accepts(_pReadableNotification)) - { - readable.push_back(it->first); - nSockets++; - } - if (it->second->accepts(_pWritableNotification)) - { - writable.push_back(it->first); - nSockets++; - } - if (it->second->accepts(_pErrorNotification)) - { - except.push_back(it->first); - nSockets++; - } - } - } - if (nSockets == 0) - { - onIdle(); - Thread::trySleep(_timeout.milliseconds()); - } - else if (Socket::select(readable, writable, except, _timeout)) - { - onBusy(); - - for (Socket::SocketList::iterator it = readable.begin(); it != readable.end(); ++it) - dispatch(*it, _pReadableNotification); - for (Socket::SocketList::iterator it = writable.begin(); it != writable.end(); ++it) - dispatch(*it, _pWritableNotification); - for (Socket::SocketList::iterator it = except.begin(); it != except.end(); ++it) - dispatch(*it, _pErrorNotification); - } - else onTimeout(); - } - catch (Exception& exc) - { - ErrorHandler::handle(exc); - } - catch (std::exception& exc) - { - ErrorHandler::handle(exc); - } - catch (...) - { - ErrorHandler::handle(); - } - } - onShutdown(); -} - - -void SocketReactor::stop() -{ - _stop = true; -} - - -void SocketReactor::wakeUp() -{ - if (_pThread) _pThread->wakeUp(); -} - - -void SocketReactor::setTimeout(const Poco::Timespan& timeout) -{ - _timeout = timeout; -} - - -const Poco::Timespan& SocketReactor::getTimeout() const -{ - return _timeout; -} - - -void SocketReactor::addEventHandler(const Socket& socket, const Poco::AbstractObserver& observer) -{ - NotifierPtr pNotifier; - { - FastMutex::ScopedLock lock(_mutex); - - EventHandlerMap::iterator it = _handlers.find(socket); - if (it == _handlers.end()) - { - pNotifier = new SocketNotifier(socket); - _handlers[socket] = pNotifier; - } - else pNotifier = it->second; - } - if (!pNotifier->hasObserver(observer)) - pNotifier->addObserver(this, observer); -} - - -bool SocketReactor::hasEventHandler(const Socket& socket, const Poco::AbstractObserver& observer) -{ - NotifierPtr pNotifier; - { - FastMutex::ScopedLock lock(_mutex); - - EventHandlerMap::iterator it = _handlers.find(socket); - if (it != _handlers.end()) - { - if (it->second->hasObserver(observer)) - return true; - } - } - - return false; -} - - -void SocketReactor::removeEventHandler(const Socket& socket, const Poco::AbstractObserver& observer) -{ - NotifierPtr pNotifier; - { - FastMutex::ScopedLock lock(_mutex); - - EventHandlerMap::iterator it = _handlers.find(socket); - if (it != _handlers.end()) - { - pNotifier = it->second; - if (pNotifier->hasObserver(observer) && pNotifier->countObservers() == 1) - { - _handlers.erase(it); - } - } - } - if (pNotifier && pNotifier->hasObserver(observer)) - { - pNotifier->removeObserver(this, observer); - } - -} - - -void SocketReactor::onTimeout() -{ - dispatch(_pTimeoutNotification); -} - - -void SocketReactor::onIdle() -{ - dispatch(_pIdleNotification); -} - - -void SocketReactor::onShutdown() -{ - dispatch(_pShutdownNotification); -} - - -void SocketReactor::onBusy() -{ -} - - -void SocketReactor::dispatch(const Socket& socket, SocketNotification* pNotification) -{ - NotifierPtr pNotifier; - { - FastMutex::ScopedLock lock(_mutex); - EventHandlerMap::iterator it = _handlers.find(socket); - if (it != _handlers.end()) - pNotifier = it->second; - else - return; - } - dispatch(pNotifier, pNotification); -} - - -void SocketReactor::dispatch(SocketNotification* pNotification) -{ - std::vector delegates; - delegates.reserve(_handlers.size()); - { - FastMutex::ScopedLock lock(_mutex); - for (EventHandlerMap::iterator it = _handlers.begin(); it != _handlers.end(); ++it) - delegates.push_back(it->second); - } - for (std::vector::iterator it = delegates.begin(); it != delegates.end(); ++it) - { - dispatch(*it, pNotification); - } -} - - -void SocketReactor::dispatch(NotifierPtr& pNotifier, SocketNotification* pNotification) -{ - try - { - pNotifier->dispatch(pNotification); - } - catch (Exception& exc) - { - ErrorHandler::handle(exc); - } - catch (std::exception& exc) - { - ErrorHandler::handle(exc); - } - catch (...) - { - ErrorHandler::handle(); - } -} - - -} } // namespace Poco::Net diff --git a/contrib/libpoco/Net/src/SocketStream.cpp b/contrib/libpoco/Net/src/SocketStream.cpp deleted file mode 100644 index 1649253b523..00000000000 --- a/contrib/libpoco/Net/src/SocketStream.cpp +++ /dev/null @@ -1,158 +0,0 @@ -// -// SocketStream.cpp -// -// $Id: //poco/1.4/Net/src/SocketStream.cpp#1 $ -// -// Library: Net -// Package: Sockets -// Module: SocketStream -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "Poco/Net/SocketStream.h" -#include "Poco/Net/StreamSocketImpl.h" -#include "Poco/Exception.h" - - -using Poco::BufferedBidirectionalStreamBuf; -using Poco::InvalidArgumentException; - - -namespace Poco { -namespace Net { - - -// -// SocketStreamBuf -// - - -SocketStreamBuf::SocketStreamBuf(const Socket& socket): - BufferedBidirectionalStreamBuf(STREAM_BUFFER_SIZE, std::ios::in | std::ios::out), - _pImpl(dynamic_cast(socket.impl())) -{ - if (_pImpl) - _pImpl->duplicate(); - else - throw InvalidArgumentException("Invalid or null SocketImpl passed to SocketStreamBuf"); -} - - -SocketStreamBuf::~SocketStreamBuf() -{ - _pImpl->release(); -} - - -int SocketStreamBuf::readFromDevice(char* buffer, std::streamsize length) -{ - return _pImpl->receiveBytes(buffer, (int) length); -} - - -int SocketStreamBuf::writeToDevice(const char* buffer, std::streamsize length) -{ - return _pImpl->sendBytes(buffer, (int) length); -} - - -// -// SocketIOS -// - - -SocketIOS::SocketIOS(const Socket& socket): - _buf(socket) -{ - poco_ios_init(&_buf); -} - - -SocketIOS::~SocketIOS() -{ - try - { - _buf.sync(); - } - catch (...) - { - } -} - - -SocketStreamBuf* SocketIOS::rdbuf() -{ - return &_buf; -} - - -void SocketIOS::close() -{ - _buf.sync(); - _buf.socketImpl()->close(); -} - - -StreamSocket SocketIOS::socket() const -{ - return StreamSocket(_buf.socketImpl()); -} - - -// -// SocketOutputStream -// - - -SocketOutputStream::SocketOutputStream(const Socket& socket): - SocketIOS(socket), - std::ostream(&_buf) -{ -} - - -SocketOutputStream::~SocketOutputStream() -{ -} - - -// -// SocketInputStream -// - - -SocketInputStream::SocketInputStream(const Socket& socket): - SocketIOS(socket), - std::istream(&_buf) -{ -} - - -SocketInputStream::~SocketInputStream() -{ -} - - -// -// SocketStream -// - - -SocketStream::SocketStream(const Socket& socket): - SocketIOS(socket), - std::iostream(&_buf) -{ -} - - -SocketStream::~SocketStream() -{ -} - - -} } // namespace Poco::Net diff --git a/contrib/libpoco/Net/src/StreamSocket.cpp b/contrib/libpoco/Net/src/StreamSocket.cpp deleted file mode 100644 index 8ff4b39215b..00000000000 --- a/contrib/libpoco/Net/src/StreamSocket.cpp +++ /dev/null @@ -1,152 +0,0 @@ -// -// StreamSocket.cpp -// -// $Id: //poco/1.4/Net/src/StreamSocket.cpp#1 $ -// -// Library: Net -// Package: Sockets -// Module: StreamSocket -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "Poco/Net/StreamSocket.h" -#include "Poco/Net/StreamSocketImpl.h" -#include "Poco/FIFOBuffer.h" -#include "Poco/Mutex.h" -#include "Poco/Exception.h" - - -using Poco::InvalidArgumentException; -using Poco::Mutex; -using Poco::ScopedLock; - - -namespace Poco { -namespace Net { - - -StreamSocket::StreamSocket(): Socket(new StreamSocketImpl) -{ -} - - -StreamSocket::StreamSocket(const SocketAddress& address): Socket(new StreamSocketImpl(address.family())) -{ - connect(address); -} - - -StreamSocket::StreamSocket(IPAddress::Family family): Socket(new StreamSocketImpl(family)) -{ -} - - -StreamSocket::StreamSocket(const Socket& socket): Socket(socket) -{ - if (!dynamic_cast(impl())) - throw InvalidArgumentException("Cannot assign incompatible socket"); -} - - -StreamSocket::StreamSocket(SocketImpl* pImpl): Socket(pImpl) -{ - if (!dynamic_cast(impl())) - throw InvalidArgumentException("Cannot assign incompatible socket"); -} - - -StreamSocket::~StreamSocket() -{ -} - - -StreamSocket& StreamSocket::operator = (const Socket& socket) -{ - if (dynamic_cast(socket.impl())) - Socket::operator = (socket); - else - throw InvalidArgumentException("Cannot assign incompatible socket"); - return *this; -} - - -void StreamSocket::connect(const SocketAddress& address) -{ - impl()->connect(address); -} - - -void StreamSocket::connect(const SocketAddress& address, const Poco::Timespan& timeout) -{ - impl()->connect(address, timeout); -} - - -void StreamSocket::connectNB(const SocketAddress& address) -{ - impl()->connectNB(address); -} - - -void StreamSocket::shutdownReceive() -{ - impl()->shutdownReceive(); -} - - -void StreamSocket::shutdownSend() -{ - impl()->shutdownSend(); -} - - -void StreamSocket::shutdown() -{ - impl()->shutdown(); -} - - -int StreamSocket::sendBytes(const void* buffer, int length, int flags) -{ - return impl()->sendBytes(buffer, length, flags); -} - - -int StreamSocket::sendBytes(FIFOBuffer& fifoBuf) -{ - ScopedLock l(fifoBuf.mutex()); - - int ret = impl()->sendBytes(fifoBuf.begin(), (int) fifoBuf.used()); - if (ret > 0) fifoBuf.drain(ret); - return ret; -} - - -int StreamSocket::receiveBytes(void* buffer, int length, int flags) -{ - return impl()->receiveBytes(buffer, length, flags); -} - - -int StreamSocket::receiveBytes(FIFOBuffer& fifoBuf) -{ - ScopedLock l(fifoBuf.mutex()); - - int ret = impl()->receiveBytes(fifoBuf.next(), (int)fifoBuf.available()); - if (ret > 0) fifoBuf.advance(ret); - return ret; -} - - -void StreamSocket::sendUrgent(unsigned char data) -{ - impl()->sendUrgent(data); -} - - -} } // namespace Poco::Net diff --git a/contrib/libpoco/Net/src/StreamSocketImpl.cpp b/contrib/libpoco/Net/src/StreamSocketImpl.cpp deleted file mode 100644 index 94e683cb3b8..00000000000 --- a/contrib/libpoco/Net/src/StreamSocketImpl.cpp +++ /dev/null @@ -1,75 +0,0 @@ -// -// StreamSocketImpl.cpp -// -// $Id: //poco/1.4/Net/src/StreamSocketImpl.cpp#1 $ -// -// Library: Net -// Package: Sockets -// Module: StreamSocketImpl -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "Poco/Net/StreamSocketImpl.h" -#include "Poco/Exception.h" -#include "Poco/Thread.h" - - -namespace Poco { -namespace Net { - - -StreamSocketImpl::StreamSocketImpl() -{ -} - - -StreamSocketImpl::StreamSocketImpl(IPAddress::Family family) -{ - if (family == IPAddress::IPv4) - init(AF_INET); -#if defined(POCO_HAVE_IPv6) - else if (family == IPAddress::IPv6) - init(AF_INET6); -#endif - else throw Poco::InvalidArgumentException("Invalid or unsupported address family passed to StreamSocketImpl"); -} - - -StreamSocketImpl::StreamSocketImpl(poco_socket_t sockfd): SocketImpl(sockfd) -{ -} - - -StreamSocketImpl::~StreamSocketImpl() -{ -} - - -int StreamSocketImpl::sendBytes(const void* buffer, int length, int flags) -{ - const char* p = reinterpret_cast(buffer); - int remaining = length; - int sent = 0; - bool blocking = getBlocking(); - while (remaining > 0) - { - int n = SocketImpl::sendBytes(p, remaining, flags); - poco_assert_dbg (n >= 0); - p += n; - sent += n; - remaining -= n; - if (blocking && remaining > 0) - Poco::Thread::yield(); - else - break; - } - return sent; -} - - -} } // namespace Poco::Net diff --git a/contrib/libpoco/Net/src/StringPartSource.cpp b/contrib/libpoco/Net/src/StringPartSource.cpp deleted file mode 100644 index 62831f16e17..00000000000 --- a/contrib/libpoco/Net/src/StringPartSource.cpp +++ /dev/null @@ -1,69 +0,0 @@ -// -// StringPartSource.cpp -// -// $Id: //poco/1.4/Net/src/StringPartSource.cpp#1 $ -// -// Library: Net -// Package: Messages -// Module: StringPartSource -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "Poco/Net/StringPartSource.h" - - -namespace Poco { -namespace Net { - - -StringPartSource::StringPartSource(const std::string& str): - PartSource("text/plain"), - _istr(str) -{ -} - - -StringPartSource::StringPartSource(const std::string& str, const std::string& mediaType): - PartSource(mediaType), - _istr(str) -{ -} - - -StringPartSource::StringPartSource(const std::string& str, const std::string& mediaType, const std::string& filename): - PartSource(mediaType), - _istr(str), - _filename(filename) -{ -} - - -StringPartSource::~StringPartSource() -{ -} - - -std::istream& StringPartSource::stream() -{ - return _istr; -} - - -const std::string& StringPartSource::filename() const -{ - return _filename; -} - - -std::streamsize StringPartSource::getContentLength() const -{ - return _istr.str().length(); -} - - -} } // namespace Poco::Net diff --git a/contrib/libpoco/Net/src/TCPServer.cpp b/contrib/libpoco/Net/src/TCPServer.cpp deleted file mode 100644 index 1619ca0efbd..00000000000 --- a/contrib/libpoco/Net/src/TCPServer.cpp +++ /dev/null @@ -1,202 +0,0 @@ -// -// TCPServer.cpp -// -// $Id: //poco/1.4/Net/src/TCPServer.cpp#1 $ -// -// Library: Net -// Package: TCPServer -// Module: TCPServer -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "Poco/Net/TCPServer.h" -#include "Poco/Net/TCPServerDispatcher.h" -#include "Poco/Net/TCPServerConnection.h" -#include "Poco/Net/TCPServerConnectionFactory.h" -#include "Poco/Timespan.h" -#include "Poco/Exception.h" -#include "Poco/ErrorHandler.h" - - -using Poco::ErrorHandler; - - -namespace Poco { -namespace Net { - - -TCPServer::TCPServer(TCPServerConnectionFactory::Ptr pFactory, Poco::UInt16 portNumber, TCPServerParams::Ptr pParams): - _socket(ServerSocket(portNumber)), - _thread(threadName(_socket)), - _stopped(true) -{ - Poco::ThreadPool& pool = Poco::ThreadPool::defaultPool(); - if (pParams) - { - int toAdd = pParams->getMaxThreads() - pool.capacity(); - if (toAdd > 0) pool.addCapacity(toAdd); - } - _pDispatcher = new TCPServerDispatcher(pFactory, pool, pParams); - -} - - -TCPServer::TCPServer(TCPServerConnectionFactory::Ptr pFactory, const ServerSocket& socket, TCPServerParams::Ptr pParams): - _socket(socket), - _thread(threadName(socket)), - _stopped(true) -{ - Poco::ThreadPool& pool = Poco::ThreadPool::defaultPool(); - if (pParams) - { - int toAdd = pParams->getMaxThreads() - pool.capacity(); - if (toAdd > 0) pool.addCapacity(toAdd); - } - _pDispatcher = new TCPServerDispatcher(pFactory, pool, pParams); -} - - -TCPServer::TCPServer(TCPServerConnectionFactory::Ptr pFactory, Poco::ThreadPool& threadPool, const ServerSocket& socket, TCPServerParams::Ptr pParams): - _socket(socket), - _pDispatcher(new TCPServerDispatcher(pFactory, threadPool, pParams)), - _thread(threadName(socket)), - _stopped(true) -{ -} - - -TCPServer::~TCPServer() -{ - try - { - stop(); - _pDispatcher->release(); - } - catch (...) - { - poco_unexpected(); - } -} - - -const TCPServerParams& TCPServer::params() const -{ - return _pDispatcher->params(); -} - - -void TCPServer::start() -{ - poco_assert (_stopped); - - _stopped = false; - _thread.start(*this); -} - - -void TCPServer::stop() -{ - if (!_stopped) - { - _stopped = true; - _thread.join(); - _pDispatcher->stop(); - } -} - - -void TCPServer::run() -{ - while (!_stopped) - { - Poco::Timespan timeout(250000); - if (_socket.poll(timeout, Socket::SELECT_READ)) - { - try - { - StreamSocket ss = _socket.acceptConnection(); - // enabe nodelay per default: OSX really needs that - ss.setNoDelay(true); - _pDispatcher->enqueue(ss); - } - catch (Poco::Exception& exc) - { - ErrorHandler::handle(exc); - } - catch (std::exception& exc) - { - ErrorHandler::handle(exc); - } - catch (...) - { - ErrorHandler::handle(); - } - } - } -} - - -int TCPServer::currentThreads() const -{ - return _pDispatcher->currentThreads(); -} - -int TCPServer::maxThreads() const -{ - return _pDispatcher->maxThreads(); -} - - -int TCPServer::totalConnections() const -{ - return _pDispatcher->totalConnections(); -} - - -int TCPServer::currentConnections() const -{ - return _pDispatcher->currentConnections(); -} - - -int TCPServer::maxConcurrentConnections() const -{ - return _pDispatcher->maxConcurrentConnections(); -} - - -int TCPServer::queuedConnections() const -{ - return _pDispatcher->queuedConnections(); -} - - -int TCPServer::refusedConnections() const -{ - return _pDispatcher->refusedConnections(); -} - - -std::string TCPServer::threadName(const ServerSocket& socket) -{ -#if _WIN32_WCE == 0x0800 - // Workaround for WEC2013: only the first call to getsockname() - // succeeds. To mitigate the impact of this bug, do not call - // socket.address(), which calls getsockname(), here. - std::string name("TCPServer"); - #pragma message("Using WEC2013 getsockname() workaround in TCPServer::threadName(). Remove when no longer needed.") -#else - std::string name("TCPServer: "); - name.append(socket.address().toString()); -#endif - return name; - -} - - -} } // namespace Poco::Net diff --git a/contrib/libpoco/Net/src/TCPServerConnection.cpp b/contrib/libpoco/Net/src/TCPServerConnection.cpp deleted file mode 100644 index 08dc1b0d958..00000000000 --- a/contrib/libpoco/Net/src/TCPServerConnection.cpp +++ /dev/null @@ -1,62 +0,0 @@ -// -// TCPServerConnection.cpp -// -// $Id: //poco/1.4/Net/src/TCPServerConnection.cpp#1 $ -// -// Library: Net -// Package: TCPServer -// Module: TCPServerConnection -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "Poco/Net/TCPServerConnection.h" -#include "Poco/Exception.h" -#include "Poco/ErrorHandler.h" - - -using Poco::Exception; -using Poco::ErrorHandler; - - -namespace Poco { -namespace Net { - - -TCPServerConnection::TCPServerConnection(const StreamSocket& socket): - _socket(socket) -{ -} - - -TCPServerConnection::~TCPServerConnection() -{ -} - - -void TCPServerConnection::start() -{ - try - { - run(); - } - catch (Exception& exc) - { - ErrorHandler::handle(exc); - } - catch (std::exception& exc) - { - ErrorHandler::handle(exc); - } - catch (...) - { - ErrorHandler::handle(); - } -} - - -} } // namespace Poco::Net diff --git a/contrib/libpoco/Net/src/TCPServerConnectionFactory.cpp b/contrib/libpoco/Net/src/TCPServerConnectionFactory.cpp deleted file mode 100644 index e8495625a39..00000000000 --- a/contrib/libpoco/Net/src/TCPServerConnectionFactory.cpp +++ /dev/null @@ -1,34 +0,0 @@ -// -// TCPServerConnectionFactory.cpp -// -// $Id: //poco/1.4/Net/src/TCPServerConnectionFactory.cpp#1 $ -// -// Library: Net -// Package: TCPServer -// Module: TCPServerConnectionFactory -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "Poco/Net/TCPServerConnectionFactory.h" - - -namespace Poco { -namespace Net { - - -TCPServerConnectionFactory::TCPServerConnectionFactory() -{ -} - - -TCPServerConnectionFactory::~TCPServerConnectionFactory() -{ -} - - -} } // namespace Poco::Net diff --git a/contrib/libpoco/Net/src/TCPServerDispatcher.cpp b/contrib/libpoco/Net/src/TCPServerDispatcher.cpp deleted file mode 100644 index 819f9e3a46d..00000000000 --- a/contrib/libpoco/Net/src/TCPServerDispatcher.cpp +++ /dev/null @@ -1,254 +0,0 @@ -// -// TCPServerDispatcher.cpp -// -// $Id: //poco/1.4/Net/src/TCPServerDispatcher.cpp#1 $ -// -// Library: Net -// Package: TCPServer -// Module: TCPServerDispatcher -// -// Copyright (c) 2005-2007, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "Poco/Net/TCPServerDispatcher.h" -#include "Poco/Net/TCPServerConnectionFactory.h" -#include "Poco/Notification.h" -#include "Poco/AutoPtr.h" -#include - - -using Poco::Notification; -using Poco::FastMutex; -using Poco::AutoPtr; - - -namespace Poco { -namespace Net { - - -class TCPConnectionNotification: public Notification -{ -public: - TCPConnectionNotification(const StreamSocket& socket): - _socket(socket) - { - } - - ~TCPConnectionNotification() - { - } - - const StreamSocket& socket() const - { - return _socket; - } - -private: - StreamSocket _socket; -}; - - -TCPServerDispatcher::TCPServerDispatcher(TCPServerConnectionFactory::Ptr pFactory, Poco::ThreadPool& threadPool, TCPServerParams::Ptr pParams): - _rc(1), - _pParams(pParams), - _currentThreads(0), - _totalConnections(0), - _currentConnections(0), - _maxConcurrentConnections(0), - _refusedConnections(0), - _stopped(false), - _pConnectionFactory(pFactory), - _threadPool(threadPool) -{ - poco_check_ptr (pFactory); - - if (!_pParams) - _pParams = new TCPServerParams; - - if (_pParams->getMaxThreads() == 0) - _pParams->setMaxThreads(threadPool.capacity()); -} - - -TCPServerDispatcher::~TCPServerDispatcher() -{ -} - - -void TCPServerDispatcher::duplicate() -{ - _mutex.lock(); - ++_rc; - _mutex.unlock(); -} - - -void TCPServerDispatcher::release() -{ - _mutex.lock(); - int rc = --_rc; - _mutex.unlock(); - if (rc == 0) delete this; -} - - -void TCPServerDispatcher::run() -{ - try - { - AutoPtr guard(this, true); // ensure object stays alive - - int idleTime = (int) _pParams->getThreadIdleTime().totalMilliseconds(); - - for (;;) - { - AutoPtr pNf = _queue.waitDequeueNotification(idleTime); - if (pNf) - { - TCPConnectionNotification* pCNf = dynamic_cast(pNf.get()); - if (pCNf) - { - std::unique_ptr pConnection(_pConnectionFactory->createConnection(pCNf->socket())); - poco_check_ptr(pConnection.get()); - beginConnection(); - pConnection->start(); /// doesn't throw - endConnection(); - } - } - - FastMutex::ScopedLock lock(_mutex); - if (_stopped || (_currentThreads > 1 && _queue.empty())) - { - --_currentThreads; - break; - } - } - } - catch (...) - { - FastMutex::ScopedLock lock(_mutex); - --_currentThreads; - throw; - } -} - - -namespace -{ - static const std::string threadName("TCPServerConnection"); -} - - -void TCPServerDispatcher::enqueue(const StreamSocket& socket) -{ - FastMutex::ScopedLock lock(_mutex); - - if (_queue.size() < _pParams->getMaxQueued()) - { - _queue.enqueueNotification(new TCPConnectionNotification(socket)); - if (!_queue.hasIdleThreads() && _currentThreads < _pParams->getMaxThreads()) - { - try - { - _threadPool.startWithPriority(_pParams->getThreadPriority(), *this, threadName); - ++_currentThreads; - } - catch (Poco::Exception&) - { - // no problem here, connection is already queued - // and a new thread might be available later. - } - } - } - else - { - ++_refusedConnections; - } -} - - -void TCPServerDispatcher::stop() -{ - _stopped = true; - _queue.clear(); - _queue.wakeUpAll(); -} - - -int TCPServerDispatcher::currentThreads() const -{ - FastMutex::ScopedLock lock(_mutex); - - return _currentThreads; -} - -int TCPServerDispatcher::maxThreads() const -{ - FastMutex::ScopedLock lock(_mutex); - - return _threadPool.capacity(); -} - - -int TCPServerDispatcher::totalConnections() const -{ - FastMutex::ScopedLock lock(_mutex); - - return _totalConnections; -} - - -int TCPServerDispatcher::currentConnections() const -{ - FastMutex::ScopedLock lock(_mutex); - - return _currentConnections; -} - - -int TCPServerDispatcher::maxConcurrentConnections() const -{ - FastMutex::ScopedLock lock(_mutex); - - return _maxConcurrentConnections; -} - - -int TCPServerDispatcher::queuedConnections() const -{ - return _queue.size(); -} - - -int TCPServerDispatcher::refusedConnections() const -{ - FastMutex::ScopedLock lock(_mutex); - - return _refusedConnections; -} - - -void TCPServerDispatcher::beginConnection() -{ - FastMutex::ScopedLock lock(_mutex); - - ++_totalConnections; - ++_currentConnections; - if (_currentConnections > _maxConcurrentConnections) - _maxConcurrentConnections = _currentConnections; -} - - -void TCPServerDispatcher::endConnection() -{ - FastMutex::ScopedLock lock(_mutex); - - --_currentConnections; -} - - -} } // namespace Poco::Net diff --git a/contrib/libpoco/Net/src/TCPServerParams.cpp b/contrib/libpoco/Net/src/TCPServerParams.cpp deleted file mode 100644 index c6b9a68c49f..00000000000 --- a/contrib/libpoco/Net/src/TCPServerParams.cpp +++ /dev/null @@ -1,66 +0,0 @@ -// -// TCPServerParams.cpp -// -// $Id: //poco/1.4/Net/src/TCPServerParams.cpp#1 $ -// -// Library: Net -// Package: TCPServer -// Module: TCPServerParams -// -// Copyright (c) 2005-2007, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "Poco/Net/TCPServerParams.h" - - -namespace Poco { -namespace Net { - - -TCPServerParams::TCPServerParams(): - _threadIdleTime(10000000), - _maxThreads(0), - _maxQueued(64), - _threadPriority(Poco::Thread::PRIO_NORMAL) -{ -} - - -TCPServerParams::~TCPServerParams() -{ -} - - -void TCPServerParams::setThreadIdleTime(const Poco::Timespan& milliseconds) -{ - _threadIdleTime = milliseconds; -} - - -void TCPServerParams::setMaxThreads(int count) -{ - poco_assert (count > 0); - - _maxThreads = count; -} - - -void TCPServerParams::setMaxQueued(int count) -{ - poco_assert (count >= 0); - - _maxQueued = count; -} - - -void TCPServerParams::setThreadPriority(Poco::Thread::Priority prio) -{ - _threadPriority = prio; -} - - -} } // namespace Poco::Net diff --git a/contrib/libpoco/Net/src/WebSocket.cpp b/contrib/libpoco/Net/src/WebSocket.cpp deleted file mode 100644 index 5950a6a9d92..00000000000 --- a/contrib/libpoco/Net/src/WebSocket.cpp +++ /dev/null @@ -1,239 +0,0 @@ -// -// WebSocket.cpp -// -// $Id: //poco/1.4/Net/src/WebSocket.cpp#8 $ -// -// Library: Net -// Package: WebSocket -// Module: WebSocket -// -// Copyright (c) 2012, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "Poco/Net/WebSocket.h" -#include "Poco/Net/WebSocketImpl.h" -#include "Poco/Net/HTTPServerRequestImpl.h" -#include "Poco/Net/HTTPServerResponse.h" -#include "Poco/Net/HTTPClientSession.h" -#include "Poco/Net/NetException.h" -#include "Poco/Buffer.h" -#include "Poco/MemoryStream.h" -#include "Poco/NullStream.h" -#include "Poco/BinaryWriter.h" -#include "Poco/SHA1Engine.h" -#include "Poco/Base64Encoder.h" -#include "Poco/String.h" -#include "Poco/Random.h" -#include "Poco/StreamCopier.h" -#include - - -namespace Poco { -namespace Net { - - -const std::string WebSocket::WEBSOCKET_GUID("258EAFA5-E914-47DA-95CA-C5AB0DC85B11"); -const std::string WebSocket::WEBSOCKET_VERSION("13"); -HTTPCredentials WebSocket::_defaultCreds; - - -WebSocket::WebSocket(HTTPServerRequest& request, HTTPServerResponse& response): - StreamSocket(accept(request, response)) -{ -} - - -WebSocket::WebSocket(HTTPClientSession& cs, HTTPRequest& request, HTTPResponse& response): - StreamSocket(connect(cs, request, response, _defaultCreds)) -{ -} - - -WebSocket::WebSocket(HTTPClientSession& cs, HTTPRequest& request, HTTPResponse& response, HTTPCredentials& credentials): - StreamSocket(connect(cs, request, response, credentials)) -{ -} - - -WebSocket::WebSocket(const Socket& socket): - StreamSocket(socket) -{ - if (!dynamic_cast(impl())) - throw InvalidArgumentException("Cannot assign incompatible socket"); -} - - -WebSocket::~WebSocket() -{ -} - - -WebSocket& WebSocket::operator = (const Socket& socket) -{ - if (dynamic_cast(socket.impl())) - Socket::operator = (socket); - else - throw InvalidArgumentException("Cannot assign incompatible socket"); - return *this; -} - - -void WebSocket::shutdown() -{ - shutdown(WS_NORMAL_CLOSE); -} - - -void WebSocket::shutdown(Poco::UInt16 statusCode, const std::string& statusMessage) -{ - Poco::Buffer buffer(statusMessage.size() + 2); - Poco::MemoryOutputStream ostr(buffer.begin(), buffer.size()); - Poco::BinaryWriter writer(ostr, Poco::BinaryWriter::NETWORK_BYTE_ORDER); - writer << statusCode; - writer.writeRaw(statusMessage); - sendFrame(buffer.begin(), static_cast(ostr.charsWritten()), FRAME_FLAG_FIN | FRAME_OP_CLOSE); -} - - -int WebSocket::sendFrame(const void* buffer, int length, int flags) -{ - flags |= FRAME_OP_SETRAW; - return static_cast(impl())->sendBytes(buffer, length, flags); -} - - -int WebSocket::receiveFrame(void* buffer, int length, int& flags) -{ - int n = static_cast(impl())->receiveBytes(buffer, length, 0); - flags = static_cast(impl())->frameFlags(); - return n; -} - - -WebSocket::Mode WebSocket::mode() const -{ - return static_cast(impl())->mustMaskPayload() ? WS_CLIENT : WS_SERVER; -} - - -WebSocketImpl* WebSocket::accept(HTTPServerRequest& request, HTTPServerResponse& response) -{ - if (request.hasToken("Connection", "upgrade") && icompare(request.get("Upgrade", ""), "websocket") == 0) - { - std::string version = request.get("Sec-WebSocket-Version", ""); - if (version.empty()) throw WebSocketException("Missing Sec-WebSocket-Version in handshake request", WS_ERR_HANDSHAKE_NO_VERSION); - if (version != WEBSOCKET_VERSION) throw WebSocketException("Unsupported WebSocket version requested", version, WS_ERR_HANDSHAKE_UNSUPPORTED_VERSION); - std::string key = request.get("Sec-WebSocket-Key", ""); - Poco::trimInPlace(key); - if (key.empty()) throw WebSocketException("Missing Sec-WebSocket-Key in handshake request", WS_ERR_HANDSHAKE_NO_KEY); - - response.setStatusAndReason(HTTPResponse::HTTP_SWITCHING_PROTOCOLS); - response.set("Upgrade", "websocket"); - response.set("Connection", "Upgrade"); - response.set("Sec-WebSocket-Accept", computeAccept(key)); - response.setContentLength(0); - response.send().flush(); - return new WebSocketImpl(static_cast(static_cast(request).detachSocket().impl()), false); - } - else throw WebSocketException("No WebSocket handshake", WS_ERR_NO_HANDSHAKE); -} - - -WebSocketImpl* WebSocket::connect(HTTPClientSession& cs, HTTPRequest& request, HTTPResponse& response, HTTPCredentials& credentials) -{ - if (!cs.getProxyHost().empty() && !cs.secure()) - { - cs.proxyTunnel(); - } - std::string key = createKey(); - request.set("Connection", "Upgrade"); - request.set("Upgrade", "websocket"); - request.set("Sec-WebSocket-Version", WEBSOCKET_VERSION); - request.set("Sec-WebSocket-Key", key); - request.setChunkedTransferEncoding(false); - cs.setKeepAlive(true); - cs.sendRequest(request); - std::istream& istr = cs.receiveResponse(response); - if (response.getStatus() == HTTPResponse::HTTP_SWITCHING_PROTOCOLS) - { - return completeHandshake(cs, response, key); - } - else if (response.getStatus() == HTTPResponse::HTTP_UNAUTHORIZED) - { - Poco::NullOutputStream null; - Poco::StreamCopier::copyStream(istr, null); - credentials.authenticate(request, response); - if (!cs.getProxyHost().empty() && !cs.secure()) - { - cs.reset(); - cs.proxyTunnel(); - } - cs.sendRequest(request); - cs.receiveResponse(response); - if (response.getStatus() == HTTPResponse::HTTP_SWITCHING_PROTOCOLS) - { - return completeHandshake(cs, response, key); - } - else if (response.getStatus() == HTTPResponse::HTTP_UNAUTHORIZED) - { - throw WebSocketException("Not authorized", WS_ERR_UNAUTHORIZED); - } - } - if (response.getStatus() == HTTPResponse::HTTP_OK) - { - throw WebSocketException("The server does not understand the WebSocket protocol", WS_ERR_NO_HANDSHAKE); - } - else - { - throw WebSocketException("Cannot upgrade to WebSocket connection", response.getReason(), WS_ERR_NO_HANDSHAKE); - } -} - - -WebSocketImpl* WebSocket::completeHandshake(HTTPClientSession& cs, HTTPResponse& response, const std::string& key) -{ - std::string connection = response.get("Connection", ""); - if (Poco::icompare(connection, "Upgrade") != 0) - throw WebSocketException("No Connection: Upgrade header in handshake response", WS_ERR_NO_HANDSHAKE); - std::string upgrade = response.get("Upgrade", ""); - if (Poco::icompare(upgrade, "websocket") != 0) - throw WebSocketException("No Upgrade: websocket header in handshake response", WS_ERR_NO_HANDSHAKE); - std::string accept = response.get("Sec-WebSocket-Accept", ""); - if (accept != computeAccept(key)) - throw WebSocketException("Invalid or missing Sec-WebSocket-Accept header in handshake response", WS_ERR_NO_HANDSHAKE); - return new WebSocketImpl(static_cast(cs.detachSocket().impl()), true); -} - - -std::string WebSocket::createKey() -{ - Poco::Random rnd; - std::ostringstream ostr; - Poco::Base64Encoder base64(ostr); - Poco::BinaryWriter writer(base64); - writer << rnd.next() << rnd.next() << rnd.next() << rnd.next(); - base64.close(); - return ostr.str(); -} - - -std::string WebSocket::computeAccept(const std::string& key) -{ - std::string accept(key); - accept += WEBSOCKET_GUID; - Poco::SHA1Engine sha1; - sha1.update(accept); - Poco::DigestEngine::Digest d = sha1.digest(); - std::ostringstream ostr; - Poco::Base64Encoder base64(ostr); - base64.write(reinterpret_cast(&d[0]), d.size()); - base64.close(); - return ostr.str(); -} - - -} } // namespace Poco::Net diff --git a/contrib/libpoco/Net/src/WebSocketImpl.cpp b/contrib/libpoco/Net/src/WebSocketImpl.cpp deleted file mode 100644 index 1bae4399278..00000000000 --- a/contrib/libpoco/Net/src/WebSocketImpl.cpp +++ /dev/null @@ -1,326 +0,0 @@ -// -// WebSocketImpl.cpp -// -// $Id: //poco/1.4/Net/src/WebSocketImpl.cpp#10 $ -// -// Library: Net -// Package: WebSocket -// Module: WebSocketImpl -// -// Copyright (c) 2012, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "Poco/Net/WebSocketImpl.h" -#include "Poco/Net/NetException.h" -#include "Poco/Net/WebSocket.h" -#include "Poco/Buffer.h" -#include "Poco/BinaryWriter.h" -#include "Poco/BinaryReader.h" -#include "Poco/MemoryStream.h" -#include "Poco/Format.h" -#include - - -namespace Poco { -namespace Net { - - -WebSocketImpl::WebSocketImpl(StreamSocketImpl* pStreamSocketImpl, bool mustMaskPayload): - StreamSocketImpl(pStreamSocketImpl->sockfd()), - _pStreamSocketImpl(pStreamSocketImpl), - _frameFlags(0), - _mustMaskPayload(mustMaskPayload) -{ - poco_check_ptr(pStreamSocketImpl); - _pStreamSocketImpl->duplicate(); -} - - -WebSocketImpl::~WebSocketImpl() -{ - try - { - _pStreamSocketImpl->release(); - reset(); - } - catch (...) - { - poco_unexpected(); - } -} - - -int WebSocketImpl::sendBytes(const void* buffer, int length, int flags) -{ - Poco::Buffer frame(length + MAX_HEADER_LENGTH); - Poco::MemoryOutputStream ostr(frame.begin(), frame.size()); - Poco::BinaryWriter writer(ostr, Poco::BinaryWriter::NETWORK_BYTE_ORDER); - - if (flags == 0) flags = WebSocket::FRAME_BINARY; - flags &= 0xff; - writer << static_cast(flags); - Poco::UInt8 lengthByte(0); - if (_mustMaskPayload) - { - lengthByte |= FRAME_FLAG_MASK; - } - if (length < 126) - { - lengthByte |= static_cast(length); - writer << lengthByte; - } - else if (length < 65536) - { - lengthByte |= 126; - writer << lengthByte << static_cast(length); - } - else - { - lengthByte |= 127; - writer << lengthByte << static_cast(length); - } - if (_mustMaskPayload) - { - const Poco::UInt32 mask = _rnd.next(); - const char* m = reinterpret_cast(&mask); - const char* b = reinterpret_cast(buffer); - writer.writeRaw(m, 4); - char* p = frame.begin() + ostr.charsWritten(); - for (int i = 0; i < length; i++) - { - p[i] = b[i] ^ m[i % 4]; - } - } - else - { - std::memcpy(frame.begin() + ostr.charsWritten(), buffer, length); - } - _pStreamSocketImpl->sendBytes(frame.begin(), length + static_cast(ostr.charsWritten())); - return length; -} - - -int WebSocketImpl::receiveBytes(void* buffer, int length, int) -{ - char header[MAX_HEADER_LENGTH]; - int n = receiveNBytes(header, 2); - if (n <= 0) - { - _frameFlags = 0; - return n; - } - poco_assert (n == 2); - Poco::UInt8 lengthByte = static_cast(header[1]); - int maskOffset = 0; - if (lengthByte & FRAME_FLAG_MASK) maskOffset += 4; - lengthByte &= 0x7f; - if (lengthByte > 0 || maskOffset > 0) - { - if (lengthByte + 2 + maskOffset < MAX_HEADER_LENGTH) - { - n = receiveNBytes(header + 2, lengthByte + maskOffset); - } - else - { - n = receiveNBytes(header + 2, MAX_HEADER_LENGTH - 2); - } - if (n <= 0) throw WebSocketException("Incomplete header received", WebSocket::WS_ERR_INCOMPLETE_FRAME); - n += 2; - } - Poco::MemoryInputStream istr(header, n); - Poco::BinaryReader reader(istr, Poco::BinaryReader::NETWORK_BYTE_ORDER); - Poco::UInt8 flags; - char mask[4]; - reader >> flags >> lengthByte; - _frameFlags = flags; - int payloadLength = 0; - int payloadOffset = 2; - if ((lengthByte & 0x7f) == 127) - { - Poco::UInt64 l; - reader >> l; - if (l > (size_t)length) throw WebSocketException(Poco::format("Insufficient buffer for payload size %Lu", l), WebSocket::WS_ERR_PAYLOAD_TOO_BIG); - payloadLength = static_cast(l); - payloadOffset += 8; - } - else if ((lengthByte & 0x7f) == 126) - { - Poco::UInt16 l; - reader >> l; - if (l > (size_t)length) throw WebSocketException(Poco::format("Insufficient buffer for payload size %hu", l), WebSocket::WS_ERR_PAYLOAD_TOO_BIG); - payloadLength = static_cast(l); - payloadOffset += 2; - } - else - { - Poco::UInt8 l = lengthByte & 0x7f; - if (l > (size_t)length) throw WebSocketException(Poco::format("Insufficient buffer for payload size %u", unsigned(l)), WebSocket::WS_ERR_PAYLOAD_TOO_BIG); - payloadLength = static_cast(l); - } - if (lengthByte & FRAME_FLAG_MASK) - { - reader.readRaw(mask, 4); - payloadOffset += 4; - } - int received = 0; - if (payloadOffset < n) - { - std::memcpy(buffer, header + payloadOffset, n - payloadOffset); - received = n - payloadOffset; - } - if (received < payloadLength) - { - n = receiveNBytes(reinterpret_cast(buffer) + received, payloadLength - received); - if (n <= 0) throw WebSocketException("Incomplete frame received", WebSocket::WS_ERR_INCOMPLETE_FRAME); - received += n; - } - if (lengthByte & FRAME_FLAG_MASK) - { - char* p = reinterpret_cast(buffer); - for (int i = 0; i < received; i++) - { - p[i] ^= mask[i % 4]; - } - } - return received; -} - - -int WebSocketImpl::receiveNBytes(void* buffer, int bytes) -{ - int received = _pStreamSocketImpl->receiveBytes(reinterpret_cast(buffer), bytes); - if (received > 0) - { - while (received < bytes) - { - int n = _pStreamSocketImpl->receiveBytes(reinterpret_cast(buffer) + received, bytes - received); - if (n > 0) - received += n; - else - throw WebSocketException("Incomplete frame received", WebSocket::WS_ERR_INCOMPLETE_FRAME); - } - } - return received; -} - - -SocketImpl* WebSocketImpl::acceptConnection(SocketAddress& clientAddr) -{ - throw Poco::InvalidAccessException("Cannot acceptConnection() on a WebSocketImpl"); -} - - -void WebSocketImpl::connect(const SocketAddress& address) -{ - throw Poco::InvalidAccessException("Cannot connect() a WebSocketImpl"); -} - - -void WebSocketImpl::connect(const SocketAddress& address, const Poco::Timespan& timeout) -{ - throw Poco::InvalidAccessException("Cannot connect() a WebSocketImpl"); -} - - -void WebSocketImpl::connectNB(const SocketAddress& address) -{ - throw Poco::InvalidAccessException("Cannot connectNB() a WebSocketImpl"); -} - - -void WebSocketImpl::bind(const SocketAddress& address, bool reuseAddress) -{ - throw Poco::InvalidAccessException("Cannot bind() a WebSocketImpl"); -} - - -void WebSocketImpl::bind6(const SocketAddress& address, bool reuseAddress, bool ipV6Only) -{ - throw Poco::InvalidAccessException("Cannot bind6() a WebSocketImpl"); -} - - -void WebSocketImpl::listen(int backlog) -{ - throw Poco::InvalidAccessException("Cannot listen() on a WebSocketImpl"); -} - - -void WebSocketImpl::close() -{ - _pStreamSocketImpl->close(); - reset(); -} - - -void WebSocketImpl::shutdownReceive() -{ - _pStreamSocketImpl->shutdownReceive(); -} - - -void WebSocketImpl::shutdownSend() -{ - _pStreamSocketImpl->shutdownSend(); -} - - -void WebSocketImpl::shutdown() -{ - _pStreamSocketImpl->shutdown(); -} - - -int WebSocketImpl::sendTo(const void* buffer, int length, const SocketAddress& address, int flags) -{ - throw Poco::InvalidAccessException("Cannot sendTo() on a WebSocketImpl"); -} - - -int WebSocketImpl::receiveFrom(void* buffer, int length, SocketAddress& address, int flags) -{ - throw Poco::InvalidAccessException("Cannot receiveFrom() on a WebSocketImpl"); -} - - -void WebSocketImpl::sendUrgent(unsigned char data) -{ - throw Poco::InvalidAccessException("Cannot sendUrgent() on a WebSocketImpl"); -} - - -bool WebSocketImpl::secure() const -{ - return _pStreamSocketImpl->secure(); -} - - -void WebSocketImpl::setSendTimeout(const Poco::Timespan& timeout) -{ - _pStreamSocketImpl->setSendTimeout(timeout); -} - - -Poco::Timespan WebSocketImpl::getSendTimeout() -{ - return _pStreamSocketImpl->getSendTimeout(); -} - - -void WebSocketImpl::setReceiveTimeout(const Poco::Timespan& timeout) -{ - _pStreamSocketImpl->setReceiveTimeout(timeout); -} - - -Poco::Timespan WebSocketImpl::getReceiveTimeout() -{ - return _pStreamSocketImpl->getReceiveTimeout(); -} - - -} } // namespace Poco::Net diff --git a/contrib/libpoco/Net/testsuite/CMakeLists.txt b/contrib/libpoco/Net/testsuite/CMakeLists.txt deleted file mode 100644 index 6f3585ccce4..00000000000 --- a/contrib/libpoco/Net/testsuite/CMakeLists.txt +++ /dev/null @@ -1,21 +0,0 @@ -set(TESTUNIT "${LIBNAME}-testrunner") - -# Sources -file(GLOB SRCS_G "src/*.cpp") -POCO_SOURCES_AUTO( TEST_SRCS ${SRCS_G}) - -# Headers -file(GLOB_RECURSE HDRS_G "src/*.h" ) -POCO_HEADERS_AUTO( TEST_SRCS ${HDRS_G}) - -POCO_SOURCES_AUTO_PLAT( TEST_SRCS OFF - src/WinDriver.cpp -) - -POCO_SOURCES_AUTO_PLAT( TEST_SRCS WINCE - src/WinCEDriver.cpp -) - -add_executable( ${TESTUNIT} ${TEST_SRCS} ) -add_test(NAME ${LIBNAME} WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} COMMAND ${TESTUNIT} -all) -target_link_libraries( ${TESTUNIT} PocoNet PocoUtil PocoXML PocoFoundation CppUnit) diff --git a/contrib/libpoco/Net/testsuite/src/DNSTest.cpp b/contrib/libpoco/Net/testsuite/src/DNSTest.cpp deleted file mode 100644 index c230e78836f..00000000000 --- a/contrib/libpoco/Net/testsuite/src/DNSTest.cpp +++ /dev/null @@ -1,115 +0,0 @@ -// -// DNSTest.cpp -// -// $Id: //poco/1.4/Net/testsuite/src/DNSTest.cpp#4 $ -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "DNSTest.h" -#include "CppUnit/TestCaller.h" -#include "CppUnit/TestSuite.h" -#include "Poco/Net/DNS.h" -#include "Poco/Net/HostEntry.h" -#include "Poco/Net/NetException.h" - - -using Poco::Net::DNS; -using Poco::Net::IPAddress; -using Poco::Net::HostEntry; -using Poco::Net::InvalidAddressException; -using Poco::Net::HostNotFoundException; -using Poco::Net::ServiceNotFoundException; -using Poco::Net::NoAddressFoundException; - - -DNSTest::DNSTest(const std::string& name): CppUnit::TestCase(name) -{ -} - - -DNSTest::~DNSTest() -{ -} - - -void DNSTest::testHostByName() -{ - HostEntry he1 = DNS::hostByName("aliastest.appinf.com"); - // different systems report different canonical names, unfortunately. - assert (he1.name() == "dnstest.appinf.com" || he1.name() == "aliastest.appinf.com"); -#if !defined(POCO_HAVE_ADDRINFO) - // getaddrinfo() does not report any aliases - assert (!he1.aliases().empty()); - assert (he1.aliases()[0] == "aliastest.appinf.com"); -#endif - assert (he1.addresses().size() >= 1); - assert (he1.addresses()[0].toString() == "1.2.3.4"); - - try - { - HostEntry he1 = DNS::hostByName("nohost.appinf.com"); - fail("host not found - must throw"); - } - catch (HostNotFoundException&) - { - } - catch (NoAddressFoundException&) - { - } -} - - -void DNSTest::testHostByAddress() -{ - IPAddress ip1("80.122.195.86"); - HostEntry he1 = DNS::hostByAddress(ip1); - assert (he1.name() == "mailhost.appinf.com"); - assert (he1.aliases().empty()); - assert (he1.addresses().size() >= 1); - assert (he1.addresses()[0].toString() == "80.122.195.86"); - - IPAddress ip2("10.0.244.253"); - try - { - HostEntry he2 = DNS::hostByAddress(ip2); - fail("host not found - must throw"); - } - catch (HostNotFoundException&) - { - } - catch (NoAddressFoundException&) - { - } -} - - -void DNSTest::testResolve() -{ -} - - -void DNSTest::setUp() -{ -} - - -void DNSTest::tearDown() -{ -} - - -CppUnit::Test* DNSTest::suite() -{ - CppUnit::TestSuite* pSuite = new CppUnit::TestSuite("DNSTest"); - - CppUnit_addTest(pSuite, DNSTest, testHostByName); - CppUnit_addTest(pSuite, DNSTest, testHostByAddress); - CppUnit_addTest(pSuite, DNSTest, testResolve); - - return pSuite; -} diff --git a/contrib/libpoco/Net/testsuite/src/DNSTest.h b/contrib/libpoco/Net/testsuite/src/DNSTest.h deleted file mode 100644 index e940585e321..00000000000 --- a/contrib/libpoco/Net/testsuite/src/DNSTest.h +++ /dev/null @@ -1,42 +0,0 @@ -// -// DNSTest.h -// -// $Id: //poco/1.4/Net/testsuite/src/DNSTest.h#1 $ -// -// Definition of the DNSTest class. -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef DNSTest_INCLUDED -#define DNSTest_INCLUDED - - -#include "Poco/Net/Net.h" -#include "CppUnit/TestCase.h" - - -class DNSTest: public CppUnit::TestCase -{ -public: - DNSTest(const std::string& name); - ~DNSTest(); - - void testHostByName(); - void testHostByAddress(); - void testResolve(); - - void setUp(); - void tearDown(); - - static CppUnit::Test* suite(); - -private: -}; - - -#endif // DNSTest_INCLUDED diff --git a/contrib/libpoco/Net/testsuite/src/DatagramSocketTest.cpp b/contrib/libpoco/Net/testsuite/src/DatagramSocketTest.cpp deleted file mode 100644 index 7d676bf0ab5..00000000000 --- a/contrib/libpoco/Net/testsuite/src/DatagramSocketTest.cpp +++ /dev/null @@ -1,144 +0,0 @@ -// -// DatagramSocketTest.cpp -// -// $Id: //poco/1.4/Net/testsuite/src/DatagramSocketTest.cpp#1 $ -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "DatagramSocketTest.h" -#include "CppUnit/TestCaller.h" -#include "CppUnit/TestSuite.h" -#include "UDPEchoServer.h" -#include "Poco/Net/DatagramSocket.h" -#include "Poco/Net/SocketAddress.h" -#include "Poco/Net/NetworkInterface.h" -#include "Poco/Net/NetException.h" -#include "Poco/Timespan.h" -#include "Poco/Stopwatch.h" - - -using Poco::Net::Socket; -using Poco::Net::DatagramSocket; -using Poco::Net::SocketAddress; -using Poco::Net::IPAddress; -#ifdef POCO_NET_HAS_INTERFACE - using Poco::Net::NetworkInterface; -#endif -using Poco::Timespan; -using Poco::Stopwatch; -using Poco::TimeoutException; -using Poco::InvalidArgumentException; -using Poco::IOException; - - -DatagramSocketTest::DatagramSocketTest(const std::string& name): CppUnit::TestCase(name) -{ -} - - -DatagramSocketTest::~DatagramSocketTest() -{ -} - - -void DatagramSocketTest::testEcho() -{ - UDPEchoServer echoServer; - DatagramSocket ss; - char buffer[256]; - ss.connect(SocketAddress("localhost", echoServer.port())); - int n = ss.sendBytes("hello", 5); - assert (n == 5); - n = ss.receiveBytes(buffer, sizeof(buffer)); - assert (n == 5); - assert (std::string(buffer, n) == "hello"); - ss.close(); -} - - -void DatagramSocketTest::testSendToReceiveFrom() -{ - UDPEchoServer echoServer(SocketAddress("localhost", 0)); - DatagramSocket ss; - int n = ss.sendTo("hello", 5, SocketAddress("localhost", echoServer.port())); - assert (n == 5); - char buffer[256]; - SocketAddress sa; - n = ss.receiveFrom(buffer, sizeof(buffer), sa); - assert (sa.host() == echoServer.address().host()); - assert (sa.port() == echoServer.port()); - assert (n == 5); - assert (std::string(buffer, n) == "hello"); - ss.close(); -} - - -void DatagramSocketTest::testBroadcast() -{ - UDPEchoServer echoServer; - DatagramSocket ss(IPAddress::IPv4); - -#if defined(POCO_NET_HAS_INTERFACE) && (POCO_OS == POCO_OS_FREE_BSD) - NetworkInterface ni = NetworkInterface::forName("em0"); - SocketAddress sa(ni.broadcastAddress(1), echoServer.port()); -#else - SocketAddress sa("255.255.255.255", echoServer.port()); -#endif - // not all socket implementations fail if broadcast option is not set -/* - try - { - int n = ss.sendTo("hello", 5, sa); - fail ("broadcast option not set - must throw"); - } - catch (IOException&) - { - } -*/ - ss.setBroadcast(true); - -#if (POCO_OS == POCO_OS_FREE_BSD) - int opt = 1; - poco_socklen_t len = sizeof(opt); - ss.impl()->setRawOption(IPPROTO_IP, IP_ONESBCAST, (const char*) &opt, len); - ss.impl()->getRawOption(IPPROTO_IP, IP_ONESBCAST, &opt, len); - assert (opt == 1); -#endif - - int n = ss.sendTo("hello", 5, sa); - assert (n == 5); - char buffer[256] = { 0 }; - n = ss.receiveBytes(buffer, 5); - assert (n == 5); - assert (std::string(buffer, n) == "hello"); - ss.close(); -} - - -void DatagramSocketTest::setUp() -{ -} - - -void DatagramSocketTest::tearDown() -{ -} - - -CppUnit::Test* DatagramSocketTest::suite() -{ - CppUnit::TestSuite* pSuite = new CppUnit::TestSuite("DatagramSocketTest"); - - CppUnit_addTest(pSuite, DatagramSocketTest, testEcho); - CppUnit_addTest(pSuite, DatagramSocketTest, testSendToReceiveFrom); -#if (POCO_OS != POCO_OS_FREE_BSD) // works only with local net bcast and very randomly - CppUnit_addTest(pSuite, DatagramSocketTest, testBroadcast); -#endif - - return pSuite; -} diff --git a/contrib/libpoco/Net/testsuite/src/DatagramSocketTest.h b/contrib/libpoco/Net/testsuite/src/DatagramSocketTest.h deleted file mode 100644 index a702b869be9..00000000000 --- a/contrib/libpoco/Net/testsuite/src/DatagramSocketTest.h +++ /dev/null @@ -1,42 +0,0 @@ -// -// DatagramSocketTest.h -// -// $Id: //poco/1.4/Net/testsuite/src/DatagramSocketTest.h#1 $ -// -// Definition of the DatagramSocketTest class. -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef DatagramSocketTest_INCLUDED -#define DatagramSocketTest_INCLUDED - - -#include "Poco/Net/Net.h" -#include "CppUnit/TestCase.h" - - -class DatagramSocketTest: public CppUnit::TestCase -{ -public: - DatagramSocketTest(const std::string& name); - ~DatagramSocketTest(); - - void testEcho(); - void testSendToReceiveFrom(); - void testBroadcast(); - - void setUp(); - void tearDown(); - - static CppUnit::Test* suite(); - -private: -}; - - -#endif // DatagramSocketTest_INCLUDED diff --git a/contrib/libpoco/Net/testsuite/src/DialogServer.cpp b/contrib/libpoco/Net/testsuite/src/DialogServer.cpp deleted file mode 100644 index 985dbceb547..00000000000 --- a/contrib/libpoco/Net/testsuite/src/DialogServer.cpp +++ /dev/null @@ -1,170 +0,0 @@ -// -// DialogServer.cpp -// -// $Id: //poco/1.4/Net/testsuite/src/DialogServer.cpp#1 $ -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "DialogServer.h" -#include "Poco/Net/DialogSocket.h" -#include "Poco/Net/SocketAddress.h" -#include "Poco/Timespan.h" -#include - - -using Poco::Net::Socket; -using Poco::Net::DialogSocket; -using Poco::Net::SocketAddress; -using Poco::FastMutex; -using Poco::Thread; - - -DialogServer::DialogServer(bool acceptCommands): - _socket(SocketAddress()), - _thread("DialogServer"), - _stop(false), - _acceptCommands(acceptCommands), - _log(false) -{ - _thread.start(*this); - _ready.wait(); -} - - -DialogServer::~DialogServer() -{ - _stop = true; - _thread.join(); -} - - -Poco::UInt16 DialogServer::port() const -{ - return _socket.address().port(); -} - - -void DialogServer::run() -{ - _ready.set(); - Poco::Timespan span(250000); - while (!_stop) - { - if (_socket.poll(span, Socket::SELECT_READ)) - { - DialogSocket ds = _socket.acceptConnection(); - { - FastMutex::ScopedLock lock(_mutex); - if (!_nextResponses.empty()) - { - ds.sendMessage(_nextResponses.front()); - _nextResponses.erase(_nextResponses.begin()); - } - } - if (_acceptCommands) - { - try - { - std::string command; - while (ds.receiveMessage(command)) - { - if (_log) std::cout << ">> " << command << std::endl; - { - FastMutex::ScopedLock lock(_mutex); - _lastCommands.push_back(command); - if (!_nextResponses.empty()) - { - if (_log) std::cout << "<< " << _nextResponses.front() << std::endl; - ds.sendMessage(_nextResponses.front()); - _nextResponses.erase(_nextResponses.begin()); - } - } - } - } - catch (Poco::Exception& exc) - { - std::cerr << "DialogServer: " << exc.displayText() << std::endl; - } - } - } - } -} - - -const std::string& DialogServer::lastCommand() const -{ - FastMutex::ScopedLock lock(_mutex); - - static const std::string EMPTY; - if (_lastCommands.empty()) - return EMPTY; - else - return _lastCommands.back(); -} - - -const std::vector& DialogServer::lastCommands() const -{ - return _lastCommands; -} - - -std::string DialogServer::popCommand() -{ - FastMutex::ScopedLock lock(_mutex); - - std::string command; - if (!_lastCommands.empty()) - { - command = _lastCommands.front(); - _lastCommands.erase(_lastCommands.begin()); - } - return command; -} - - -std::string DialogServer::popCommandWait() -{ - std::string result(popCommand()); - while (result.empty()) - { - Thread::sleep(100); - result = popCommand(); - } - return result; -} - - -void DialogServer::addResponse(const std::string& response) -{ - FastMutex::ScopedLock lock(_mutex); - - _nextResponses.push_back(response); -} - - -void DialogServer::clearCommands() -{ - FastMutex::ScopedLock lock(_mutex); - - _lastCommands.clear(); -} - - -void DialogServer::clearResponses() -{ - FastMutex::ScopedLock lock(_mutex); - - _nextResponses.clear(); -} - - -void DialogServer::log(bool flag) -{ - _log = flag; -} diff --git a/contrib/libpoco/Net/testsuite/src/DialogServer.h b/contrib/libpoco/Net/testsuite/src/DialogServer.h deleted file mode 100644 index 36c519f85f4..00000000000 --- a/contrib/libpoco/Net/testsuite/src/DialogServer.h +++ /dev/null @@ -1,83 +0,0 @@ -// -// DialogServer.h -// -// $Id: //poco/1.4/Net/testsuite/src/DialogServer.h#1 $ -// -// Definition of the DialogServer class. -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef DialogServer_INCLUDED -#define DialogServer_INCLUDED - - -#include "Poco/Net/Net.h" -#include "Poco/Net/ServerSocket.h" -#include "Poco/Net/StreamSocket.h" -#include "Poco/Thread.h" -#include "Poco/Event.h" -#include "Poco/Mutex.h" -#include - - -class DialogServer: public Poco::Runnable - /// A server for testing FTPClientSession and friends. -{ -public: - DialogServer(bool acceptCommands = true); - /// Creates the DialogServer. - - ~DialogServer(); - /// Destroys the DialogServer. - - Poco::UInt16 port() const; - /// Returns the port the echo server is - /// listening on. - - void run(); - /// Does the work. - - const std::string& lastCommand() const; - /// Returns the last command received by the server. - - std::string popCommand(); - /// Pops the next command from the list of received commands. - - std::string popCommandWait(); - /// Pops the next command from the list of received commands. - /// Waits until a command is available. - - const std::vector& lastCommands() const; - /// Returns the last command received by the server. - - void addResponse(const std::string& response); - /// Sets the next response returned by the server. - - void clearCommands(); - /// Clears all commands. - - void clearResponses(); - /// Clears all responses. - - void log(bool flag); - /// Enables or disables logging to stdout. - -private: - Poco::Net::ServerSocket _socket; - Poco::Thread _thread; - Poco::Event _ready; - mutable Poco::FastMutex _mutex; - bool _stop; - std::vector _nextResponses; - std::vector _lastCommands; - bool _acceptCommands; - bool _log; -}; - - -#endif // DialogServer_INCLUDED diff --git a/contrib/libpoco/Net/testsuite/src/DialogSocketTest.cpp b/contrib/libpoco/Net/testsuite/src/DialogSocketTest.cpp deleted file mode 100644 index 156b04dcc51..00000000000 --- a/contrib/libpoco/Net/testsuite/src/DialogSocketTest.cpp +++ /dev/null @@ -1,112 +0,0 @@ -// -// DialogSocketTest.cpp -// -// $Id: //poco/1.4/Net/testsuite/src/DialogSocketTest.cpp#1 $ -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "DialogSocketTest.h" -#include "CppUnit/TestCaller.h" -#include "CppUnit/TestSuite.h" -#include "EchoServer.h" -#include "Poco/Net/DialogSocket.h" -#include "Poco/Net/SocketAddress.h" -#include - - -using Poco::Net::DialogSocket; -using Poco::Net::SocketAddress; - - -DialogSocketTest::DialogSocketTest(const std::string& name): CppUnit::TestCase(name) -{ -} - - -DialogSocketTest::~DialogSocketTest() -{ -} - - -void DialogSocketTest::testDialogSocket() -{ - EchoServer echoServer; - DialogSocket ds; - ds.connect(SocketAddress("localhost", echoServer.port())); - - ds.sendMessage("Hello, world!"); - std::string str; - ds.receiveMessage(str); - assert (str == "Hello, world!"); - - ds.sendString("Hello, World!\n"); - ds.receiveMessage(str); - assert (str == "Hello, World!"); - - ds.sendMessage("EHLO", "appinf.com"); - ds.receiveMessage(str); - assert (str == "EHLO appinf.com"); - - ds.sendMessage("PUT", "local.txt", "remote.txt"); - ds.receiveMessage(str); - assert (str == "PUT local.txt remote.txt"); - - ds.sendMessage("220 Hello, world!"); - int status = ds.receiveStatusMessage(str); - assert (status == 220); - assert (str == "220 Hello, world!"); - - ds.sendString("220-line1\r\n220 line2\r\n"); - status = ds.receiveStatusMessage(str); - assert (status == 220); - assert (str == "220-line1\n220 line2"); - - ds.sendString("220-line1\r\nline2\r\n220 line3\r\n"); - status = ds.receiveStatusMessage(str); - assert (status == 220); - assert (str == "220-line1\nline2\n220 line3"); - - ds.sendMessage("Hello, world!"); - status = ds.receiveStatusMessage(str); - assert (status == 0); - assert (str == "Hello, world!"); - - ds.sendString("Header\nMore Bytes"); - status = ds.receiveStatusMessage(str); - assert (status == 0); - assert (str == "Header"); - char buffer[16]; - int n = ds.receiveRawBytes(buffer, sizeof(buffer)); - assert (n == 10); - assert (std::memcmp(buffer, "More Bytes", 10) == 0); - - ds.sendString("Even More Bytes"); - n = ds.receiveRawBytes(buffer, sizeof(buffer)); - assert (n == 15); - assert (std::memcmp(buffer, "Even More Bytes", 15) == 0); -} - - -void DialogSocketTest::setUp() -{ -} - - -void DialogSocketTest::tearDown() -{ -} - - -CppUnit::Test* DialogSocketTest::suite() -{ - CppUnit::TestSuite* pSuite = new CppUnit::TestSuite("DialogSocketTest"); - - CppUnit_addTest(pSuite, DialogSocketTest, testDialogSocket); - - return pSuite; -} diff --git a/contrib/libpoco/Net/testsuite/src/DialogSocketTest.h b/contrib/libpoco/Net/testsuite/src/DialogSocketTest.h deleted file mode 100644 index 93ac0171c20..00000000000 --- a/contrib/libpoco/Net/testsuite/src/DialogSocketTest.h +++ /dev/null @@ -1,40 +0,0 @@ -// -// DialogSocketTest.h -// -// $Id: //poco/1.4/Net/testsuite/src/DialogSocketTest.h#1 $ -// -// Definition of the DialogSocketTest class. -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef DialogSocketTest_INCLUDED -#define DialogSocketTest_INCLUDED - - -#include "Poco/Net/Net.h" -#include "CppUnit/TestCase.h" - - -class DialogSocketTest: public CppUnit::TestCase -{ -public: - DialogSocketTest(const std::string& name); - ~DialogSocketTest(); - - void testDialogSocket(); - - void setUp(); - void tearDown(); - - static CppUnit::Test* suite(); - -private: -}; - - -#endif // DialogSocketTest_INCLUDED diff --git a/contrib/libpoco/Net/testsuite/src/Driver.cpp b/contrib/libpoco/Net/testsuite/src/Driver.cpp deleted file mode 100644 index e459d398657..00000000000 --- a/contrib/libpoco/Net/testsuite/src/Driver.cpp +++ /dev/null @@ -1,19 +0,0 @@ -// -// Driver.cpp -// -// $Id: //poco/1.4/Net/testsuite/src/Driver.cpp#1 $ -// -// Console-based test driver for Poco Net. -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "CppUnit/TestRunner.h" -#include "NetTestSuite.h" - - -CppUnitMain(NetTestSuite) diff --git a/contrib/libpoco/Net/testsuite/src/EchoServer.cpp b/contrib/libpoco/Net/testsuite/src/EchoServer.cpp deleted file mode 100644 index 712acd8ffe9..00000000000 --- a/contrib/libpoco/Net/testsuite/src/EchoServer.cpp +++ /dev/null @@ -1,74 +0,0 @@ -// -// EchoServer.cpp -// -// $Id: //poco/1.4/Net/testsuite/src/EchoServer.cpp#1 $ -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "EchoServer.h" -#include "Poco/Net/StreamSocket.h" -#include "Poco/Net/SocketAddress.h" -#include "Poco/Timespan.h" -#include - - -using Poco::Net::Socket; -using Poco::Net::StreamSocket; -using Poco::Net::SocketAddress; - - -EchoServer::EchoServer(): - _socket(SocketAddress()), - _thread("EchoServer"), - _stop(false) -{ - _thread.start(*this); - _ready.wait(); -} - - -EchoServer::~EchoServer() -{ - _stop = true; - _thread.join(); -} - - -Poco::UInt16 EchoServer::port() const -{ - return _socket.address().port(); -} - - -void EchoServer::run() -{ - _ready.set(); - Poco::Timespan span(250000); - while (!_stop) - { - if (_socket.poll(span, Socket::SELECT_READ)) - { - StreamSocket ss = _socket.acceptConnection(); - try - { - char buffer[256]; - int n = ss.receiveBytes(buffer, sizeof(buffer)); - while (n > 0 && !_stop) - { - ss.sendBytes(buffer, n); - n = ss.receiveBytes(buffer, sizeof(buffer)); - } - } - catch (Poco::Exception& exc) - { - std::cerr << "EchoServer: " << exc.displayText() << std::endl; - } - } - } -} - diff --git a/contrib/libpoco/Net/testsuite/src/EchoServer.h b/contrib/libpoco/Net/testsuite/src/EchoServer.h deleted file mode 100644 index ccab60ff161..00000000000 --- a/contrib/libpoco/Net/testsuite/src/EchoServer.h +++ /dev/null @@ -1,50 +0,0 @@ -// -// EchoServer.h -// -// $Id: //poco/1.4/Net/testsuite/src/EchoServer.h#1 $ -// -// Definition of the EchoServer class. -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef EchoServer_INCLUDED -#define EchoServer_INCLUDED - - -#include "Poco/Net/Net.h" -#include "Poco/Net/ServerSocket.h" -#include "Poco/Thread.h" -#include "Poco/Event.h" - - -class EchoServer: public Poco::Runnable - /// A simple sequential echo server. -{ -public: - EchoServer(); - /// Creates the EchoServer. - - ~EchoServer(); - /// Destroys the EchoServer. - - Poco::UInt16 port() const; - /// Returns the port the echo server is - /// listening on. - - void run(); - /// Does the work. - -private: - Poco::Net::ServerSocket _socket; - Poco::Thread _thread; - Poco::Event _ready; - bool _stop; -}; - - -#endif // EchoServer_INCLUDED diff --git a/contrib/libpoco/Net/testsuite/src/FTPClientSessionTest.cpp b/contrib/libpoco/Net/testsuite/src/FTPClientSessionTest.cpp deleted file mode 100644 index c3ef9f46d7a..00000000000 --- a/contrib/libpoco/Net/testsuite/src/FTPClientSessionTest.cpp +++ /dev/null @@ -1,605 +0,0 @@ -// -// FTPClientSessionTest.cpp -// -// $Id: //poco/svn/Net/testsuite/src/FTPClientSessionTest.cpp#2 $ -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "FTPClientSessionTest.h" -#include "CppUnit/TestCaller.h" -#include "CppUnit/TestSuite.h" -#include "DialogServer.h" -#include "Poco/Net/FTPClientSession.h" -#include "Poco/Net/DialogSocket.h" -#include "Poco/Net/SocketAddress.h" -#include "Poco/Net/NetException.h" -#include "Poco/Thread.h" -#include "Poco/ActiveMethod.h" -#include "Poco/StreamCopier.h" -#include - - -using Poco::Net::FTPClientSession; -using Poco::Net::DialogSocket; -using Poco::Net::SocketAddress; -using Poco::Net::FTPException; -using Poco::ActiveMethod; -using Poco::ActiveResult; -using Poco::StreamCopier; -using Poco::Thread; - - -namespace -{ - class ActiveDownloader - { - public: - ActiveDownloader(FTPClientSession& session): - download(this, &ActiveDownloader::downloadImp), - _session(session) - { - } - - ActiveMethod download; - - protected: - std::string downloadImp(const std::string& path) - { - std::istream& istr = _session.beginDownload(path); - std::ostringstream ostr; - StreamCopier::copyStream(istr, ostr); - _session.endDownload(); - return ostr.str(); - } - - private: - FTPClientSession& _session; - }; -}; - - -FTPClientSessionTest::FTPClientSessionTest(const std::string& name): CppUnit::TestCase(name) -{ -} - - -FTPClientSessionTest::~FTPClientSessionTest() -{ -} - - -void FTPClientSessionTest::login(DialogServer& server, FTPClientSession& session) -{ - server.addResponse("331 Password required"); - server.addResponse("230 Welcome"); - server.addResponse("200 Type set to I"); - session.login("user", "password"); - std::string cmd = server.popCommand(); - assert (cmd == "USER user"); - cmd = server.popCommand(); - assert (cmd == "PASS password"); - cmd = server.popCommand(); - assert (cmd == "TYPE I"); - - assert (session.getFileType() == FTPClientSession::TYPE_BINARY); -} - - -void FTPClientSessionTest::testLogin1() -{ - DialogServer server; - server.addResponse("220 localhost FTP ready"); - FTPClientSession session("localhost", server.port()); - assert (session.isOpen()); - assert (!session.isLoggedIn()); - login(server, session); - assert (session.isOpen()); - assert (session.isLoggedIn()); - server.addResponse("221 Good Bye"); - session.logout(); - assert (session.isOpen()); - assert (!session.isLoggedIn()); - - server.clearCommands(); - server.clearResponses(); - login(server, session); - assert (session.isOpen()); - assert (session.isLoggedIn()); - server.addResponse("221 Good Bye"); - session.close(); - assert (!session.isOpen()); - assert (!session.isLoggedIn()); -} - - -void FTPClientSessionTest::testLogin2() -{ - DialogServer server; - server.addResponse("220 localhost FTP ready"); - server.addResponse("331 Password required"); - server.addResponse("230 Welcome"); - server.addResponse("200 Type set to I"); - Poco::UInt16 serverPort = server.port(); - FTPClientSession session("localhost", serverPort, "user", "password"); - assert (session.isOpen()); - assert (session.isLoggedIn()); - server.addResponse("221 Good Bye"); - session.close(); - assert (!session.isOpen()); - assert (!session.isLoggedIn()); - - server.clearCommands(); - server.clearResponses(); - server.addResponse("220 localhost FTP ready"); - server.addResponse("331 Password required"); - server.addResponse("230 Welcome"); - server.addResponse("200 Type set to I"); - session.open("localhost", serverPort, "user", "password"); - assert (session.isOpen()); - assert (session.isLoggedIn()); - server.addResponse("221 Good Bye"); - session.close(); - assert (!session.isOpen()); - assert (!session.isLoggedIn()); -} - - -void FTPClientSessionTest::testLogin3() -{ - DialogServer server; - server.addResponse("220 localhost FTP ready"); - server.addResponse("331 Password required"); - server.addResponse("230 Welcome"); - server.addResponse("200 Type set to I"); - FTPClientSession session; - assert (!session.isOpen()); - assert (!session.isLoggedIn()); - session.open("localhost", server.port(), "user", "password"); - server.addResponse("221 Good Bye"); - session.close(); - assert (!session.isOpen()); - assert (!session.isLoggedIn()); -} - - - -void FTPClientSessionTest::testLoginFailed1() -{ - DialogServer server; - server.addResponse("421 localhost FTP not ready"); - FTPClientSession session("localhost", server.port()); - try - { - session.login("user", "password"); - fail("server not ready - must throw"); - } - catch (FTPException&) - { - } - server.addResponse("221 Good Bye"); - session.close(); -} - - -void FTPClientSessionTest::testLoginFailed2() -{ - DialogServer server; - server.addResponse("220 localhost FTP ready"); - server.addResponse("331 Password required"); - server.addResponse("530 Login incorrect"); - FTPClientSession session("localhost", server.port()); - try - { - session.login("user", "password"); - fail("login incorrect - must throw"); - } - catch (FTPException&) - { - } - server.addResponse("221 Good Bye"); - session.close(); -} - - -void FTPClientSessionTest::testCommands() -{ - DialogServer server; - server.addResponse("220 localhost FTP ready"); - server.addResponse("331 Password required"); - server.addResponse("230 Welcome"); - server.addResponse("200 Type set to I"); - FTPClientSession session("localhost", server.port()); - session.login("user", "password"); - std::string cmd = server.popCommand(); - assert (cmd == "USER user"); - cmd = server.popCommand(); - assert (cmd == "PASS password"); - cmd = server.popCommand(); - assert (cmd == "TYPE I"); - - // systemType - server.clearCommands(); - server.addResponse("215 UNIX Type: L8 Version: dummyFTP 1.0"); - std::string type = session.systemType(); - cmd = server.popCommand(); - assert (cmd == "SYST"); - assert (type == "UNIX Type: L8 Version: dummyFTP 1.0"); - - // getWorkingDirectory - server.addResponse("257 \"/usr/test\" is current directory"); - std::string cwd = session.getWorkingDirectory(); - cmd = server.popCommand(); - assert (cmd == "PWD"); - assert (cwd == "/usr/test"); - - // getWorkingDirectory (quotes in filename) - server.addResponse("257 \"\"\"quote\"\"\" is current directory"); - cwd = session.getWorkingDirectory(); - cmd = server.popCommand(); - assert (cmd == "PWD"); - assert (cwd == "\"quote\""); - - // setWorkingDirectory - server.addResponse("250 CWD OK"); - session.setWorkingDirectory("test"); - cmd = server.popCommand(); - assert (cmd == "CWD test"); - - server.addResponse("250 CDUP OK"); - session.cdup(); - cmd = server.popCommand(); - assert (cmd == "CDUP"); - - // rename - server.addResponse("350 File exists, send destination name"); - server.addResponse("250 Rename OK"); - session.rename("old.txt", "new.txt"); - cmd = server.popCommand(); - assert (cmd == "RNFR old.txt"); - cmd = server.popCommand(); - assert (cmd == "RNTO new.txt"); - - // rename (failing) - server.addResponse("550 not found"); - try - { - session.rename("old.txt", "new.txt"); - fail("not found - must throw"); - } - catch (FTPException&) - { - } - server.clearCommands(); - - // remove - server.addResponse("250 delete ok"); - session.remove("test.txt"); - cmd = server.popCommand(); - assert (cmd == "DELE test.txt"); - - // remove (failing) - server.addResponse("550 not found"); - try - { - session.remove("test.txt"); - fail("not found - must throw"); - } - catch (FTPException&) - { - } - server.clearCommands(); - - // createDirectory - server.addResponse("257 dir created"); - session.createDirectory("foo"); - cmd = server.popCommand(); - assert (cmd == "MKD foo"); - - // createDirectory (failing) - server.addResponse("550 exists"); - try - { - session.createDirectory("foo"); - fail("not found - must throw"); - } - catch (FTPException&) - { - } - server.clearCommands(); - - // removeDirectory - server.addResponse("250 RMD OK"); - session.removeDirectory("foo"); - cmd = server.popCommand(); - assert (cmd == "RMD foo"); - - // removeDirectory (failing) - server.addResponse("550 not found"); - try - { - session.removeDirectory("foo"); - fail("not found - must throw"); - } - catch (FTPException&) - { - } - server.clearCommands(); - - server.addResponse("221 Good Bye"); - session.close(); -} - - -void FTPClientSessionTest::testDownloadPORT() -{ - DialogServer server; - server.addResponse("220 localhost FTP ready"); - server.addResponse("331 Password required"); - server.addResponse("230 Welcome"); - server.addResponse("200 Type set to I"); - FTPClientSession session("localhost", server.port()); - session.setPassive(false); - session.login("user", "password"); - server.clearCommands(); - - server.addResponse("500 EPRT not understood"); - server.addResponse("200 PORT OK"); - server.addResponse("150 Sending data\r\n226 Transfer complete"); - - ActiveDownloader dl(session); - ActiveResult result = dl.download("test.txt"); - - std::string cmd = server.popCommandWait(); - assert (cmd.substr(0, 4) == "EPRT"); - - cmd = server.popCommandWait(); - assert (cmd.substr(0, 4) == "PORT"); - - std::string dummy; - int x, lo, hi; - for (std::string::iterator it = cmd.begin(); it != cmd.end(); ++it) - { - if (*it == ',') *it = ' '; - } - std::istringstream istr(cmd); - istr >> dummy >> x >> x >> x >> x >> hi >> lo; - int port = hi*256 + lo; - - cmd = server.popCommandWait(); - assert (cmd == "RETR test.txt"); - - SocketAddress sa("localhost", (Poco::UInt16) port); - DialogSocket dataSock; - dataSock.connect(sa); - - std::string data("This is some data"); - dataSock.sendString(data); - dataSock.close(); - - result.wait(); - std::string received = result.data(); - assert (received == data); - - server.addResponse("221 Good Bye"); - session.close(); -} - - -void FTPClientSessionTest::testDownloadEPRT() -{ - DialogServer server; - server.addResponse("220 localhost FTP ready"); - server.addResponse("331 Password required"); - server.addResponse("230 Welcome"); - server.addResponse("200 Type set to I"); - FTPClientSession session("localhost", server.port()); - session.setPassive(false); - session.login("user", "password"); - server.clearCommands(); - - server.addResponse("200 EPRT OK"); - server.addResponse("150 Sending data\r\n226 Transfer complete"); - - ActiveDownloader dl(session); - ActiveResult result = dl.download("test.txt"); - - std::string cmd = server.popCommandWait(); - assert (cmd.substr(0, 4) == "EPRT"); - - std::string dummy; - char c; - int d; - int port; - std::istringstream istr(cmd); - istr >> dummy >> c >> d >> c >> d >> c >> d >> c >> d >> c >> d >> c >> port >> c; - - cmd = server.popCommandWait(); - assert (cmd == "RETR test.txt"); - - SocketAddress sa("localhost", (Poco::UInt16) port); - DialogSocket dataSock; - dataSock.connect(sa); - - std::string data("This is some data"); - dataSock.sendString(data); - dataSock.close(); - - result.wait(); - std::string received = result.data(); - assert (received == data); - - server.addResponse("221 Good Bye"); - session.close(); -} - - -void FTPClientSessionTest::testDownloadPASV() -{ - DialogServer server; - server.addResponse("220 localhost FTP ready"); - server.addResponse("331 Password required"); - server.addResponse("230 Welcome"); - server.addResponse("200 Type set to I"); - FTPClientSession session("localhost", server.port()); - session.login("user", "password"); - server.clearCommands(); - - server.addResponse("500 EPSV not understood"); - - DialogServer dataServer(false); - Poco::UInt16 dataServerPort = dataServer.port(); - dataServer.addResponse("This is some data"); - std::ostringstream pasv; - pasv << "227 Entering Passive Mode (127,0,0,1," << (dataServerPort/256) << "," << (dataServerPort % 256) << ")"; - server.addResponse(pasv.str()); - server.addResponse("150 sending data\r\n226 Transfer complete"); - - std::istream& istr = session.beginDownload("test.txt"); - std::ostringstream dataStr; - StreamCopier::copyStream(istr, dataStr); - session.endDownload(); - std::string s(dataStr.str()); - assert (s == "This is some data\r\n"); - - server.addResponse("221 Good Bye"); - session.close(); -} - - -void FTPClientSessionTest::testDownloadEPSV() -{ - DialogServer server; - server.addResponse("220 localhost FTP ready"); - server.addResponse("331 Password required"); - server.addResponse("230 Welcome"); - server.addResponse("200 Type set to I"); - FTPClientSession session("localhost", server.port()); - session.login("user", "password"); - server.clearCommands(); - - DialogServer dataServer(false); - dataServer.addResponse("This is some data"); - std::ostringstream epsv; - epsv << "229 Entering Extended Passive Mode (|||" << dataServer.port() << "|)"; - server.addResponse(epsv.str()); - server.addResponse("150 sending data\r\n226 Transfer complete"); - - std::istream& istr = session.beginDownload("test.txt"); - std::ostringstream dataStr; - StreamCopier::copyStream(istr, dataStr); - session.endDownload(); - std::string s(dataStr.str()); - assert (s == "This is some data\r\n"); - - std::string cmd = server.popCommand(); - assert (cmd.substr(0, 4) == "EPSV"); - cmd = server.popCommand(); - assert (cmd == "RETR test.txt"); - - server.addResponse("221 Good Bye"); - session.close(); -} - - -void FTPClientSessionTest::testUpload() -{ - DialogServer server; - server.addResponse("220 localhost FTP ready"); - server.addResponse("331 Password required"); - server.addResponse("230 Welcome"); - server.addResponse("200 Type set to I"); - FTPClientSession session("localhost", server.port()); - session.login("user", "password"); - server.clearCommands(); - - DialogServer dataServer; - std::ostringstream epsv; - epsv << "229 Entering Extended Passive Mode (|||" << dataServer.port() << "|)"; - server.addResponse(epsv.str()); - server.addResponse("150 send data\r\n226 Transfer complete"); - - std::ostream& ostr = session.beginUpload("test.txt"); - ostr << "This is some data\r\n"; - session.endUpload(); - std::string s(dataServer.popCommandWait()); - assert (s == "This is some data"); - - std::string cmd = server.popCommand(); - assert (cmd.substr(0, 4) == "EPSV"); - cmd = server.popCommand(); - assert (cmd == "STOR test.txt"); - - server.addResponse("221 Good Bye"); - session.close(); -} - - -void FTPClientSessionTest::testList() -{ - DialogServer server; - server.addResponse("220 localhost FTP ready"); - server.addResponse("331 Password required"); - server.addResponse("230 Welcome"); - server.addResponse("200 Type set to I"); - FTPClientSession session("localhost", server.port()); - session.login("user", "password"); - server.clearCommands(); - - DialogServer dataServer(false); - dataServer.addResponse("file1\r\nfile2"); - std::ostringstream epsv; - epsv << "229 Entering Extended Passive Mode (|||" << dataServer.port() << "|)"; - server.addResponse(epsv.str()); - server.addResponse("150 sending data\r\n226 Transfer complete"); - - std::istream& istr = session.beginList(); - std::ostringstream dataStr; - StreamCopier::copyStream(istr, dataStr); - session.endList(); - std::string s(dataStr.str()); - assert (s == "file1\r\nfile2\r\n"); - - std::string cmd = server.popCommand(); - assert (cmd.substr(0, 4) == "EPSV"); - cmd = server.popCommand(); - assert (cmd == "NLST"); - - server.addResponse("221 Good Bye"); - session.close(); -} - - -void FTPClientSessionTest::setUp() -{ -} - - -void FTPClientSessionTest::tearDown() -{ -} - - -CppUnit::Test* FTPClientSessionTest::suite() -{ - CppUnit::TestSuite* pSuite = new CppUnit::TestSuite("FTPClientSessionTest"); - - CppUnit_addTest(pSuite, FTPClientSessionTest, testLogin1); - CppUnit_addTest(pSuite, FTPClientSessionTest, testLogin2); - CppUnit_addTest(pSuite, FTPClientSessionTest, testLogin3); - CppUnit_addTest(pSuite, FTPClientSessionTest, testLoginFailed1); - CppUnit_addTest(pSuite, FTPClientSessionTest, testLoginFailed2); - CppUnit_addTest(pSuite, FTPClientSessionTest, testCommands); - CppUnit_addTest(pSuite, FTPClientSessionTest, testDownloadPORT); - CppUnit_addTest(pSuite, FTPClientSessionTest, testDownloadEPRT); - CppUnit_addTest(pSuite, FTPClientSessionTest, testDownloadPASV); - CppUnit_addTest(pSuite, FTPClientSessionTest, testDownloadEPSV); - CppUnit_addTest(pSuite, FTPClientSessionTest, testUpload); - CppUnit_addTest(pSuite, FTPClientSessionTest, testList); - - return pSuite; -} diff --git a/contrib/libpoco/Net/testsuite/src/FTPClientSessionTest.h b/contrib/libpoco/Net/testsuite/src/FTPClientSessionTest.h deleted file mode 100644 index 6e6fa238e19..00000000000 --- a/contrib/libpoco/Net/testsuite/src/FTPClientSessionTest.h +++ /dev/null @@ -1,61 +0,0 @@ -// -// FTPClientSessionTest.h -// -// $Id: //poco/svn/Net/testsuite/src/FTPClientSessionTest.h#2 $ -// -// Definition of the FTPClientSessionTest class. -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef FTPClientSessionTest_INCLUDED -#define FTPClientSessionTest_INCLUDED - - -#include "Poco/Net/Net.h" -#include "CppUnit/TestCase.h" - - -namespace Poco { -namespace Net { - -class FTPClientSession; - -} } - -class DialogServer; - -class FTPClientSessionTest: public CppUnit::TestCase -{ -public: - FTPClientSessionTest(const std::string& name); - ~FTPClientSessionTest(); - - void testLogin1(); - void testLogin2(); - void testLogin3(); - void testLoginFailed1(); - void testLoginFailed2(); - void testCommands(); - void testDownloadPORT(); - void testDownloadEPRT(); - void testDownloadPASV(); - void testDownloadEPSV(); - void testUpload(); - void testList(); - - void setUp(); - void tearDown(); - - static CppUnit::Test* suite(); - -private: - void login(DialogServer& server, Poco::Net::FTPClientSession& session); -}; - - -#endif // FTPClientSessionTest_INCLUDED diff --git a/contrib/libpoco/Net/testsuite/src/FTPClientTestSuite.cpp b/contrib/libpoco/Net/testsuite/src/FTPClientTestSuite.cpp deleted file mode 100644 index c581c1b6eb4..00000000000 --- a/contrib/libpoco/Net/testsuite/src/FTPClientTestSuite.cpp +++ /dev/null @@ -1,26 +0,0 @@ -// -// FTPClientTestSuite.cpp -// -// $Id: //poco/svn/Net/testsuite/src/FTPClientTestSuite.cpp#2 $ -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "FTPClientTestSuite.h" -#include "FTPClientSessionTest.h" -#include "FTPStreamFactoryTest.h" - - -CppUnit::Test* FTPClientTestSuite::suite() -{ - CppUnit::TestSuite* pSuite = new CppUnit::TestSuite("FTPClientTestSuite"); - - pSuite->addTest(FTPClientSessionTest::suite()); - pSuite->addTest(FTPStreamFactoryTest::suite()); - - return pSuite; -} diff --git a/contrib/libpoco/Net/testsuite/src/FTPClientTestSuite.h b/contrib/libpoco/Net/testsuite/src/FTPClientTestSuite.h deleted file mode 100644 index 4b573d02b3a..00000000000 --- a/contrib/libpoco/Net/testsuite/src/FTPClientTestSuite.h +++ /dev/null @@ -1,29 +0,0 @@ -// -// FTPClientTestSuite.h -// -// $Id: //poco/svn/Net/testsuite/src/FTPClientTestSuite.h#2 $ -// -// Definition of the FTPClientTestSuite class. -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef FTPClientTestSuite_INCLUDED -#define FTPClientTestSuite_INCLUDED - - -#include "CppUnit/TestSuite.h" - - -class FTPClientTestSuite -{ -public: - static CppUnit::Test* suite(); -}; - - -#endif // FTPClientTestSuite_INCLUDED diff --git a/contrib/libpoco/Net/testsuite/src/FTPStreamFactoryTest.cpp b/contrib/libpoco/Net/testsuite/src/FTPStreamFactoryTest.cpp deleted file mode 100644 index 3f9c98eb16b..00000000000 --- a/contrib/libpoco/Net/testsuite/src/FTPStreamFactoryTest.cpp +++ /dev/null @@ -1,259 +0,0 @@ -// -// FTPStreamFactoryTest.cpp -// -// $Id: //poco/1.4/Net/testsuite/src/FTPStreamFactoryTest.cpp#1 $ -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "FTPStreamFactoryTest.h" -#include "CppUnit/TestCaller.h" -#include "CppUnit/TestSuite.h" -#include "DialogServer.h" -#include "Poco/Net/FTPStreamFactory.h" -#include "Poco/Net/DialogSocket.h" -#include "Poco/Net/SocketAddress.h" -#include "Poco/Net/NetException.h" -#include "Poco/URI.h" -#include "Poco/StreamCopier.h" -#include -#include - - -using Poco::Net::FTPStreamFactory; -using Poco::Net::FTPPasswordProvider; -using Poco::Net::DialogSocket; -using Poco::Net::SocketAddress; -using Poco::Net::FTPException; -using Poco::URI; -using Poco::StreamCopier; - - -namespace -{ - class TestPasswordProvider: public FTPPasswordProvider - { - public: - std::string password(const std::string& username, const std::string& host) - { - return "secret"; - } - }; -} - - -FTPStreamFactoryTest::FTPStreamFactoryTest(const std::string& name): CppUnit::TestCase(name) -{ -} - - -FTPStreamFactoryTest::~FTPStreamFactoryTest() -{ -} - - -void FTPStreamFactoryTest::testDownload() -{ - FTPStreamFactory::setPasswordProvider(0); - - DialogServer server; - server.addResponse("220 localhost FTP ready"); - server.addResponse("331 Password required"); - server.addResponse("230 Welcome"); - server.addResponse("200 Type set to I"); - server.addResponse("200 Type set to A"); - - DialogServer dataServer(false); - dataServer.addResponse("line1\r\nline2"); - std::ostringstream epsv; - epsv << "229 Entering Extended Passive Mode (|||" << dataServer.port() << "|)"; - server.addResponse(epsv.str()); - server.addResponse("150 sending data\r\n226 Transfer complete"); - server.addResponse("221 Good bye"); - - URI uri; - uri.setScheme("ftp"); - uri.setHost("localhost"); - uri.setPort(server.port()); - uri.setPath("/test.txt;type=a"); - FTPStreamFactory sf; - std::unique_ptr pStr(sf.open(uri)); - - std::ostringstream dataStr; - StreamCopier::copyStream(*pStr.get(), dataStr); - - pStr.reset(); - - std::string s(dataStr.str()); - assert (s == "line1\r\nline2\r\n"); -} - - -void FTPStreamFactoryTest::testList() -{ - FTPStreamFactory::setPasswordProvider(0); - - DialogServer server; - server.addResponse("220 localhost FTP ready"); - server.addResponse("331 Password required"); - server.addResponse("230 Welcome"); - server.addResponse("200 Type set to I"); - server.addResponse("250 CWD OK"); - server.addResponse("250 CWD OK"); - - DialogServer dataServer(false); - dataServer.addResponse("file1\r\nfile2"); - std::ostringstream epsv; - epsv << "229 Entering Extended Passive Mode (|||" << dataServer.port() << "|)"; - server.addResponse(epsv.str()); - server.addResponse("150 sending data\r\n226 Transfer complete"); - server.addResponse("221 Good bye"); - - URI uri; - uri.setScheme("ftp"); - uri.setHost("localhost"); - uri.setPort(server.port()); - uri.setPath("/usr/guest/data;type=d"); - FTPStreamFactory sf; - std::unique_ptr pStr(sf.open(uri)); - - std::ostringstream dataStr; - StreamCopier::copyStream(*pStr.get(), dataStr); - - pStr.reset(); - - std::string s(dataStr.str()); - assert (s == "file1\r\nfile2\r\n"); -} - - -void FTPStreamFactoryTest::testUserInfo() -{ - FTPStreamFactory::setPasswordProvider(0); - - DialogServer server; - server.addResponse("220 localhost FTP ready"); - server.addResponse("331 Password required"); - server.addResponse("230 Welcome"); - server.addResponse("200 Type set to I"); - server.addResponse("200 Type set to A"); - - DialogServer dataServer(false); - dataServer.addResponse("line1\r\nline2"); - std::ostringstream epsv; - epsv << "229 Entering Extended Passive Mode (|||" << dataServer.port() << "|)"; - server.addResponse(epsv.str()); - server.addResponse("150 sending data\r\n226 Transfer complete"); - server.addResponse("221 Good bye"); - - URI uri; - uri.setScheme("ftp"); - uri.setHost("localhost"); - uri.setPort(server.port()); - uri.setPath("/test.txt;type=a"); - uri.setUserInfo("user:secret"); - FTPStreamFactory sf; - std::unique_ptr pStr(sf.open(uri)); - - std::ostringstream dataStr; - StreamCopier::copyStream(*pStr.get(), dataStr); - - pStr.reset(); - - std::string s(dataStr.str()); - assert (s == "line1\r\nline2\r\n"); -} - - -void FTPStreamFactoryTest::testPasswordProvider() -{ - static TestPasswordProvider tpp; - FTPStreamFactory::setPasswordProvider(&tpp); - - DialogServer server; - server.addResponse("220 localhost FTP ready"); - server.addResponse("331 Password required"); - server.addResponse("230 Welcome"); - server.addResponse("200 Type set to I"); - server.addResponse("200 Type set to A"); - - DialogServer dataServer(false); - dataServer.addResponse("line1\r\nline2"); - std::ostringstream epsv; - epsv << "229 Entering Extended Passive Mode (|||" << dataServer.port() << "|)"; - server.addResponse(epsv.str()); - server.addResponse("150 sending data\r\n226 Transfer complete"); - server.addResponse("221 Good bye"); - - URI uri; - uri.setScheme("ftp"); - uri.setHost("localhost"); - uri.setPort(server.port()); - uri.setPath("/test.txt;type=a"); - uri.setUserInfo("user"); - FTPStreamFactory sf; - std::unique_ptr pStr(sf.open(uri)); - - std::ostringstream dataStr; - StreamCopier::copyStream(*pStr.get(), dataStr); - - pStr.reset(); - - std::string s(dataStr.str()); - assert (s == "line1\r\nline2\r\n"); -} - - -void FTPStreamFactoryTest::testMissingPasswordProvider() -{ - FTPStreamFactory::setPasswordProvider(0); - - DialogServer server; - server.addResponse("220 localhost FTP ready"); - server.addResponse("221 Good bye"); - - URI uri; - uri.setScheme("ftp"); - uri.setHost("localhost"); - uri.setPort(server.port()); - uri.setPath("/test.txt;type=a"); - uri.setUserInfo("user"); - - try - { - FTPStreamFactory sf; - std::unique_ptr pStr(sf.open(uri)); - fail("no password provider - must throw"); - } - catch (FTPException&) - { - } -} - - -void FTPStreamFactoryTest::setUp() -{ -} - - -void FTPStreamFactoryTest::tearDown() -{ -} - - -CppUnit::Test* FTPStreamFactoryTest::suite() -{ - CppUnit::TestSuite* pSuite = new CppUnit::TestSuite("FTPStreamFactoryTest"); - - CppUnit_addTest(pSuite, FTPStreamFactoryTest, testDownload); - CppUnit_addTest(pSuite, FTPStreamFactoryTest, testList); - CppUnit_addTest(pSuite, FTPStreamFactoryTest, testUserInfo); - CppUnit_addTest(pSuite, FTPStreamFactoryTest, testPasswordProvider); - CppUnit_addTest(pSuite, FTPStreamFactoryTest, testMissingPasswordProvider); - - return pSuite; -} diff --git a/contrib/libpoco/Net/testsuite/src/FTPStreamFactoryTest.h b/contrib/libpoco/Net/testsuite/src/FTPStreamFactoryTest.h deleted file mode 100644 index 07e067becc3..00000000000 --- a/contrib/libpoco/Net/testsuite/src/FTPStreamFactoryTest.h +++ /dev/null @@ -1,44 +0,0 @@ -// -// FTPStreamFactoryTest.h -// -// $Id: //poco/1.4/Net/testsuite/src/FTPStreamFactoryTest.h#1 $ -// -// Definition of the FTPStreamFactoryTest class. -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef FTPStreamFactoryTest_INCLUDED -#define FTPStreamFactoryTest_INCLUDED - - -#include "Poco/Net/Net.h" -#include "CppUnit/TestCase.h" - - -class FTPStreamFactoryTest: public CppUnit::TestCase -{ -public: - FTPStreamFactoryTest(const std::string& name); - ~FTPStreamFactoryTest(); - - void testDownload(); - void testList(); - void testUserInfo(); - void testPasswordProvider(); - void testMissingPasswordProvider(); - - void setUp(); - void tearDown(); - - static CppUnit::Test* suite(); - -private: -}; - - -#endif // FTPStreamFactoryTest_INCLUDED diff --git a/contrib/libpoco/Net/testsuite/src/HTMLFormTest.cpp b/contrib/libpoco/Net/testsuite/src/HTMLFormTest.cpp deleted file mode 100644 index 318c66b8347..00000000000 --- a/contrib/libpoco/Net/testsuite/src/HTMLFormTest.cpp +++ /dev/null @@ -1,385 +0,0 @@ -// -// HTMLFormTest.cpp -// -// $Id: //poco/1.4/Net/testsuite/src/HTMLFormTest.cpp#3 $ -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "HTMLFormTest.h" -#include "CppUnit/TestCaller.h" -#include "CppUnit/TestSuite.h" -#include "Poco/Net/HTMLForm.h" -#include "Poco/Net/PartSource.h" -#include "Poco/Net/StringPartSource.h" -#include "Poco/Net/PartHandler.h" -#include "Poco/Net/HTTPRequest.h" -#include "Poco/Net/NetException.h" -#include - - -using Poco::Net::HTMLForm; -using Poco::Net::PartSource; -using Poco::Net::StringPartSource; -using Poco::Net::PartHandler; -using Poco::Net::HTTPRequest; -using Poco::Net::HTTPMessage; -using Poco::Net::MessageHeader; - - -namespace -{ - class StringPartHandler: public PartHandler - { - public: - StringPartHandler() - { - } - - void handlePart(const MessageHeader& header, std::istream& stream) - { - _disp = header["Content-Disposition"]; - _type = header["Content-Type"]; - int ch = stream.get(); - while (ch > 0) - { - _data += (char) ch; - ch = stream.get(); - } - } - - const std::string& data() const - { - return _data; - } - - const std::string& disp() const - { - return _disp; - } - - const std::string& type() const - { - return _type; - } - - private: - std::string _data; - std::string _disp; - std::string _type; - }; -} - - -HTMLFormTest::HTMLFormTest(const std::string& name): CppUnit::TestCase(name) -{ -} - - -HTMLFormTest::~HTMLFormTest() -{ -} - - -void HTMLFormTest::testWriteUrl() -{ - HTMLForm form; - form.set("field1", "value1"); - form.set("field2", "value 2"); - form.set("field3", "value=3"); - form.set("field4", "value&4"); - form.set("field5", "value+5"); - - std::ostringstream ostr; - form.write(ostr); - std::string s = ostr.str(); - assert (s == "field1=value1&field2=value%202&field3=value%3D3&field4=value%264&field5=value%2B5"); -} - - -void HTMLFormTest::testWriteMultipart() -{ - HTMLForm form(HTMLForm::ENCODING_MULTIPART); - form.set("field1", "value1"); - form.set("field2", "value 2"); - form.set("field3", "value=3"); - form.set("field4", "value&4"); - - form.addPart("attachment1", new StringPartSource("This is an attachment")); - StringPartSource* pSPS = new StringPartSource("This is another attachment", "text/plain", "att2.txt"); - pSPS->headers().set("Content-ID", "1234abcd"); - form.addPart("attachment2", pSPS); - - std::ostringstream ostr; - form.write(ostr, "MIME_boundary_0123456789"); - std::string s = ostr.str(); - assert (s == - "--MIME_boundary_0123456789\r\n" - "Content-Disposition: form-data; name=\"field1\"\r\n" - "\r\n" - "value1\r\n" - "--MIME_boundary_0123456789\r\n" - "Content-Disposition: form-data; name=\"field2\"\r\n" - "\r\n" - "value 2\r\n" - "--MIME_boundary_0123456789\r\n" - "Content-Disposition: form-data; name=\"field3\"\r\n" - "\r\n" - "value=3\r\n" - "--MIME_boundary_0123456789\r\n" - "Content-Disposition: form-data; name=\"field4\"\r\n" - "\r\n" - "value&4\r\n" - "--MIME_boundary_0123456789\r\n" - "Content-Disposition: form-data; name=\"attachment1\"\r\n" - "Content-Type: text/plain\r\n" - "\r\n" - "This is an attachment\r\n" - "--MIME_boundary_0123456789\r\n" - "Content-ID: 1234abcd\r\n" - "Content-Disposition: form-data; name=\"attachment2\"; filename=\"att2.txt\"\r\n" - "Content-Type: text/plain\r\n" - "\r\n" - "This is another attachment\r\n" - "--MIME_boundary_0123456789--\r\n" - ); - assert(s.length() == form.calculateContentLength()); -} - - -void HTMLFormTest::testReadUrlGET() -{ - HTTPRequest req("GET", "/form.cgi?field1=value1&field2=value%202&field3=value%3D3&field4=value%264"); - HTMLForm form(req); - assert (form.size() == 4); - assert (form["field1"] == "value1"); - assert (form["field2"] == "value 2"); - assert (form["field3"] == "value=3"); - assert (form["field4"] == "value&4"); -} - - -void HTMLFormTest::testReadUrlPOST() -{ - HTTPRequest req("POST", "/form.cgi?field0=value0"); - std::istringstream istr("field1=value1&field2=value%202&field3=value%3D3&field4=value%264"); - HTMLForm form(req, istr); - assert (form.size() == 5); - assert (form["field0"] == "value0"); - assert (form["field1"] == "value1"); - assert (form["field2"] == "value 2"); - assert (form["field3"] == "value=3"); - assert (form["field4"] == "value&4"); -} - - -void HTMLFormTest::testReadUrlPUT() -{ - HTTPRequest req("PUT", "/form.cgi?field0=value0"); - std::istringstream istr("field1=value1&field2=value%202&field3=value%3D3&field4=value%264"); - HTMLForm form(req, istr); - assert (form.size() == 5); - assert (form["field0"] == "value0"); - assert (form["field1"] == "value1"); - assert (form["field2"] == "value 2"); - assert (form["field3"] == "value=3"); - assert (form["field4"] == "value&4"); -} - - -void HTMLFormTest::testReadUrlBOM() -{ - HTTPRequest req("PUT", "/form.cgi?field0=value0"); - std::istringstream istr("\357\273\277field1=value1&field2=value%202&field3=value%3D3&field4=value%264"); - HTMLForm form(req, istr); - assert (form.size() == 5); - assert (form["field0"] == "value0"); - assert (form["field1"] == "value1"); - assert (form["field2"] == "value 2"); - assert (form["field3"] == "value=3"); - assert (form["field4"] == "value&4"); -} - - -void HTMLFormTest::testReadMultipart() -{ - std::istringstream istr( - "\r\n" - "--MIME_boundary_0123456789\r\n" - "Content-Disposition: form-data; name=\"field1\"\r\n" - "\r\n" - "value1\r\n" - "--MIME_boundary_0123456789\r\n" - "Content-Disposition: form-data; name=\"field2\"\r\n" - "\r\n" - "value 2\r\n" - "--MIME_boundary_0123456789\r\n" - "Content-Disposition: form-data; name=\"field3\"\r\n" - "\r\n" - "value=3\r\n" - "--MIME_boundary_0123456789\r\n" - "Content-Disposition: form-data; name=\"field4\"\r\n" - "\r\n" - "value&4\r\n" - "--MIME_boundary_0123456789\r\n" - "Content-Disposition: file; name=\"attachment1\"; filename=\"att1.txt\"\r\n" - "Content-Type: text/plain\r\n" - "\r\n" - "This is an attachment\r\n" - "--MIME_boundary_0123456789--\r\n" - ); - HTTPRequest req("POST", "/form.cgi"); - req.setContentType(HTMLForm::ENCODING_MULTIPART + "; boundary=\"MIME_boundary_0123456789\""); - StringPartHandler sah; - HTMLForm form(req, istr, sah); - assert (form.size() == 4); - assert (form["field1"] == "value1"); - assert (form["field2"] == "value 2"); - assert (form["field3"] == "value=3"); - assert (form["field4"] == "value&4"); - - assert (sah.type() == "text/plain"); - assert (sah.disp() == "file; name=\"attachment1\"; filename=\"att1.txt\""); - assert (sah.data() == "This is an attachment"); -} - - -void HTMLFormTest::testSubmit1() -{ - HTMLForm form; - form.set("field1", "value1"); - form.set("field2", "value 2"); - form.set("field3", "value=3"); - form.set("field4", "value&4"); - - HTTPRequest req("GET", "/form.cgi"); - form.prepareSubmit(req); - assert (req.getURI() == "/form.cgi?field1=value1&field2=value%202&field3=value%3D3&field4=value%264"); -} - - -void HTMLFormTest::testSubmit2() -{ - HTMLForm form; - form.set("field1", "value1"); - form.set("field2", "value 2"); - form.set("field3", "value=3"); - form.set("field4", "value&4"); - - HTTPRequest req("POST", "/form.cgi"); - form.prepareSubmit(req); - assert (req.getContentType() == HTMLForm::ENCODING_URL); -} - - -void HTMLFormTest::testSubmit3() -{ - HTMLForm form(HTMLForm::ENCODING_MULTIPART); - form.set("field1", "value1"); - form.set("field2", "value 2"); - form.set("field3", "value=3"); - form.set("field4", "value&4"); - - HTTPRequest req("POST", "/form.cgi", HTTPMessage::HTTP_1_1); - form.prepareSubmit(req); - std::string expCT(HTMLForm::ENCODING_MULTIPART); - expCT.append("; boundary=\""); - expCT.append(form.boundary()); - expCT.append("\""); - assert (req.getContentType() == expCT); - assert (req.getChunkedTransferEncoding()); -} - - -void HTMLFormTest::testFieldLimitUrl() -{ - HTTPRequest req("GET", "/form.cgi?field1=value1&field2=value%202&field3=value%3D3&field4=value%264"); - HTMLForm form; - form.setFieldLimit(3); - try - { - form.load(req); - fail("field limit violated - must throw"); - } - catch (Poco::Net::HTMLFormException&) - { - } -} - - -void HTMLFormTest::testFieldLimitMultipart() -{ - std::istringstream istr( - "\r\n" - "--MIME_boundary_0123456789\r\n" - "Content-Disposition: form-data; name=\"field1\"\r\n" - "\r\n" - "value1\r\n" - "--MIME_boundary_0123456789\r\n" - "Content-Disposition: form-data; name=\"field2\"\r\n" - "\r\n" - "value 2\r\n" - "--MIME_boundary_0123456789\r\n" - "Content-Disposition: form-data; name=\"field3\"\r\n" - "\r\n" - "value=3\r\n" - "--MIME_boundary_0123456789\r\n" - "Content-Disposition: form-data; name=\"field4\"\r\n" - "\r\n" - "value&4\r\n" - "--MIME_boundary_0123456789\r\n" - "Content-Disposition: file; name=\"attachment1\"; filename=\"att1.txt\"\r\n" - "Content-Type: text/plain\r\n" - "\r\n" - "This is an attachment\r\n" - "--MIME_boundary_0123456789--\r\n" - ); - HTTPRequest req("POST", "/form.cgi"); - req.setContentType(HTMLForm::ENCODING_MULTIPART + "; boundary=\"MIME_boundary_0123456789\""); - StringPartHandler sah; - HTMLForm form; - form.setFieldLimit(3); - try - { - form.load(req, istr, sah); - fail("field limit violated - must throw"); - } - catch (Poco::Net::HTMLFormException&) - { - } -} - - -void HTMLFormTest::setUp() -{ -} - - -void HTMLFormTest::tearDown() -{ -} - - -CppUnit::Test* HTMLFormTest::suite() -{ - CppUnit::TestSuite* pSuite = new CppUnit::TestSuite("HTMLFormTest"); - - CppUnit_addTest(pSuite, HTMLFormTest, testWriteUrl); - CppUnit_addTest(pSuite, HTMLFormTest, testWriteMultipart); - CppUnit_addTest(pSuite, HTMLFormTest, testReadUrlGET); - CppUnit_addTest(pSuite, HTMLFormTest, testReadUrlPOST); - CppUnit_addTest(pSuite, HTMLFormTest, testReadUrlPUT); - CppUnit_addTest(pSuite, HTMLFormTest, testReadUrlBOM); - CppUnit_addTest(pSuite, HTMLFormTest, testReadMultipart); - CppUnit_addTest(pSuite, HTMLFormTest, testSubmit1); - CppUnit_addTest(pSuite, HTMLFormTest, testSubmit2); - CppUnit_addTest(pSuite, HTMLFormTest, testSubmit3); - CppUnit_addTest(pSuite, HTMLFormTest, testFieldLimitUrl); - CppUnit_addTest(pSuite, HTMLFormTest, testFieldLimitMultipart); - - return pSuite; -} diff --git a/contrib/libpoco/Net/testsuite/src/HTMLFormTest.h b/contrib/libpoco/Net/testsuite/src/HTMLFormTest.h deleted file mode 100644 index 7f9242d4967..00000000000 --- a/contrib/libpoco/Net/testsuite/src/HTMLFormTest.h +++ /dev/null @@ -1,51 +0,0 @@ -// -// HTMLFormTest.h -// -// $Id: //poco/1.4/Net/testsuite/src/HTMLFormTest.h#2 $ -// -// Definition of the HTMLFormTest class. -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef HTMLFormTest_INCLUDED -#define HTMLFormTest_INCLUDED - - -#include "Poco/Net/Net.h" -#include "CppUnit/TestCase.h" - - -class HTMLFormTest: public CppUnit::TestCase -{ -public: - HTMLFormTest(const std::string& name); - ~HTMLFormTest(); - - void testWriteUrl(); - void testWriteMultipart(); - void testReadUrlGET(); - void testReadUrlPOST(); - void testReadUrlPUT(); - void testReadUrlBOM(); - void testReadMultipart(); - void testSubmit1(); - void testSubmit2(); - void testSubmit3(); - void testFieldLimitUrl(); - void testFieldLimitMultipart(); - - void setUp(); - void tearDown(); - - static CppUnit::Test* suite(); - -private: -}; - - -#endif // HTMLFormTest_INCLUDED diff --git a/contrib/libpoco/Net/testsuite/src/HTMLTestSuite.cpp b/contrib/libpoco/Net/testsuite/src/HTMLTestSuite.cpp deleted file mode 100644 index 137440ed5e6..00000000000 --- a/contrib/libpoco/Net/testsuite/src/HTMLTestSuite.cpp +++ /dev/null @@ -1,24 +0,0 @@ -// -// HTMLTestSuite.cpp -// -// $Id: //poco/1.4/Net/testsuite/src/HTMLTestSuite.cpp#1 $ -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "HTMLTestSuite.h" -#include "HTMLFormTest.h" - - -CppUnit::Test* HTMLTestSuite::suite() -{ - CppUnit::TestSuite* pSuite = new CppUnit::TestSuite("HTMLTestSuite"); - - pSuite->addTest(HTMLFormTest::suite()); - - return pSuite; -} diff --git a/contrib/libpoco/Net/testsuite/src/HTMLTestSuite.h b/contrib/libpoco/Net/testsuite/src/HTMLTestSuite.h deleted file mode 100644 index 2e87a28fa15..00000000000 --- a/contrib/libpoco/Net/testsuite/src/HTMLTestSuite.h +++ /dev/null @@ -1,29 +0,0 @@ -// -// HTMLTestSuite.h -// -// $Id: //poco/1.4/Net/testsuite/src/HTMLTestSuite.h#1 $ -// -// Definition of the HTMLTestSuite class. -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef HTMLTestSuite_INCLUDED -#define HTMLTestSuite_INCLUDED - - -#include "CppUnit/TestSuite.h" - - -class HTMLTestSuite -{ -public: - static CppUnit::Test* suite(); -}; - - -#endif // HTMLTestSuite_INCLUDED diff --git a/contrib/libpoco/Net/testsuite/src/HTTPClientSessionTest.cpp b/contrib/libpoco/Net/testsuite/src/HTTPClientSessionTest.cpp deleted file mode 100644 index 484852f3941..00000000000 --- a/contrib/libpoco/Net/testsuite/src/HTTPClientSessionTest.cpp +++ /dev/null @@ -1,332 +0,0 @@ -// -// HTTPClientSessionTest.cpp -// -// $Id: //poco/1.4/Net/testsuite/src/HTTPClientSessionTest.cpp#2 $ -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "HTTPClientSessionTest.h" -#include "CppUnit/TestCaller.h" -#include "CppUnit/TestSuite.h" -#include "Poco/Net/HTTPClientSession.h" -#include "Poco/Net/HTTPRequest.h" -#include "Poco/Net/HTTPResponse.h" -#include "Poco/StreamCopier.h" -#include "HTTPTestServer.h" -#include -#include -#include - - -using Poco::Net::HTTPClientSession; -using Poco::Net::HTTPRequest; -using Poco::Net::HTTPResponse; -using Poco::Net::HTTPMessage; -using Poco::StreamCopier; - - -HTTPClientSessionTest::HTTPClientSessionTest(const std::string& name): CppUnit::TestCase(name) -{ -} - - -HTTPClientSessionTest::~HTTPClientSessionTest() -{ -} - - -void HTTPClientSessionTest::testGetSmall() -{ - HTTPTestServer srv; - HTTPClientSession s("localhost", srv.port()); - HTTPRequest request(HTTPRequest::HTTP_GET, "/small"); - s.sendRequest(request); - HTTPResponse response; - std::istream& rs = s.receiveResponse(response); - assert (response.getContentLength() == HTTPTestServer::SMALL_BODY.length()); - assert (response.getContentType() == "text/plain"); - std::ostringstream ostr; - StreamCopier::copyStream(rs, ostr); - assert (ostr.str() == HTTPTestServer::SMALL_BODY); -} - - -void HTTPClientSessionTest::testGetLarge() -{ - HTTPTestServer srv; - HTTPClientSession s("localhost", srv.port()); - HTTPRequest request(HTTPRequest::HTTP_GET, "/large"); - s.sendRequest(request); - HTTPResponse response; - std::istream& rs = s.receiveResponse(response); - assert (response.getContentLength() == HTTPTestServer::LARGE_BODY.length()); - assert (response.getContentType() == "text/plain"); - std::ostringstream ostr; - StreamCopier::copyStream(rs, ostr); - assert (ostr.str() == HTTPTestServer::LARGE_BODY); -} - - -void HTTPClientSessionTest::testHead() -{ - HTTPTestServer srv; - HTTPClientSession s("localhost", srv.port()); - HTTPRequest request(HTTPRequest::HTTP_HEAD, "/large"); - s.sendRequest(request); - HTTPResponse response; - std::istream& rs = s.receiveResponse(response); - assert (response.getContentLength() == HTTPTestServer::LARGE_BODY.length()); - assert (response.getContentType() == "text/plain"); - std::ostringstream ostr; - assert (StreamCopier::copyStream(rs, ostr) == 0); -} - - -void HTTPClientSessionTest::testPostSmallIdentity() -{ - HTTPTestServer srv; - HTTPClientSession s("localhost", srv.port()); - HTTPRequest request(HTTPRequest::HTTP_POST, "/echo"); - std::string body("this is a random request body\r\n0\r\n"); - request.setContentLength((int) body.length()); - s.sendRequest(request) << body; - HTTPResponse response; - std::istream& rs = s.receiveResponse(response); - assert (response.getContentLength() == body.length()); - std::ostringstream ostr; - StreamCopier::copyStream(rs, ostr); - assert (ostr.str() == body); -} - - -void HTTPClientSessionTest::testPostLargeIdentity() -{ - HTTPTestServer srv; - HTTPClientSession s("localhost", srv.port()); - HTTPRequest request(HTTPRequest::HTTP_POST, "/echo"); - std::string body(8000, 'x'); - body.append("\r\n0\r\n"); - request.setContentLength((int) body.length()); - s.sendRequest(request) << body; - HTTPResponse response; - std::istream& rs = s.receiveResponse(response); - assert (response.getContentLength() == body.length()); - std::ostringstream ostr; - StreamCopier::copyStream(rs, ostr); - assert (ostr.str() == body); -} - - -void HTTPClientSessionTest::testPostSmallChunked() -{ - HTTPTestServer srv; - HTTPClientSession s("localhost", srv.port()); - HTTPRequest request(HTTPRequest::HTTP_POST, "/echo"); - std::string body("this is a random request body"); - request.setChunkedTransferEncoding(true); - s.sendRequest(request) << body; - HTTPResponse response; - std::istream& rs = s.receiveResponse(response); - assert (response.getChunkedTransferEncoding()); - assert (response.getContentLength() == HTTPMessage::UNKNOWN_CONTENT_LENGTH); - std::ostringstream ostr; - StreamCopier::copyStream(rs, ostr); - assert (ostr.str() == body); -} - - -void HTTPClientSessionTest::testPostLargeChunked() -{ - HTTPTestServer srv; - HTTPClientSession s("localhost", srv.port()); - HTTPRequest request(HTTPRequest::HTTP_POST, "/echo"); - std::string body(16000, 'x'); - request.setChunkedTransferEncoding(true); - std::ostream& os = s.sendRequest(request); - os << body; - os.flush(); - HTTPResponse response; - std::istream& rs = s.receiveResponse(response); - assert (response.getChunkedTransferEncoding()); - assert (response.getContentLength() == HTTPMessage::UNKNOWN_CONTENT_LENGTH); - std::ostringstream ostr; - StreamCopier::copyStream(rs, ostr, 16000); - assert (ostr.str() == body); -} - - -void HTTPClientSessionTest::testPostSmallClose() -{ - HTTPTestServer srv; - HTTPClientSession s("localhost", srv.port()); - HTTPRequest request(HTTPRequest::HTTP_POST, "/echo"); - std::string body("this is a random request body"); - s.sendRequest(request) << body; - HTTPResponse response; - std::istream& rs = s.receiveResponse(response); - assert (!response.getChunkedTransferEncoding()); - assert (response.getContentLength() == HTTPMessage::UNKNOWN_CONTENT_LENGTH); - std::ostringstream ostr; - StreamCopier::copyStream(rs, ostr); - assert (ostr.str() == body); -} - - -void HTTPClientSessionTest::testPostLargeClose() -{ - HTTPTestServer srv; - HTTPClientSession s("localhost", srv.port()); - HTTPRequest request(HTTPRequest::HTTP_POST, "/echo"); - std::string body(8000, 'x'); - s.sendRequest(request) << body; - HTTPResponse response; - std::istream& rs = s.receiveResponse(response); - assert (!response.getChunkedTransferEncoding()); - assert (response.getContentLength() == HTTPMessage::UNKNOWN_CONTENT_LENGTH); - std::ostringstream ostr; - StreamCopier::copyStream(rs, ostr); - assert (ostr.str() == body); -} - - -void HTTPClientSessionTest::testKeepAlive() -{ - HTTPTestServer srv; - HTTPClientSession s("localhost", srv.port()); - s.setKeepAlive(true); - HTTPRequest request(HTTPRequest::HTTP_HEAD, "/keepAlive", HTTPMessage::HTTP_1_1); - s.sendRequest(request); - HTTPResponse response; - std::istream& rs1 = s.receiveResponse(response); - assert (response.getContentLength() == HTTPTestServer::SMALL_BODY.length()); - assert (response.getContentType() == "text/plain"); - assert (response.getKeepAlive()); - std::ostringstream ostr1; - assert (StreamCopier::copyStream(rs1, ostr1) == 0); - - request.setMethod(HTTPRequest::HTTP_GET); - request.setURI("/small"); - s.sendRequest(request); - std::istream& rs2 = s.receiveResponse(response); - assert (response.getContentLength() == HTTPTestServer::SMALL_BODY.length()); - assert (response.getKeepAlive()); - std::ostringstream ostr2; - StreamCopier::copyStream(rs2, ostr2); - assert (ostr2.str() == HTTPTestServer::SMALL_BODY); - - request.setMethod(HTTPRequest::HTTP_GET); - request.setURI("/large"); - s.sendRequest(request); - std::istream& rs3 = s.receiveResponse(response); - assert (response.getContentLength() == HTTPMessage::UNKNOWN_CONTENT_LENGTH); - assert (response.getChunkedTransferEncoding()); - assert (response.getKeepAlive()); - std::ostringstream ostr3; - StreamCopier::copyStream(rs3, ostr3); - assert (ostr3.str() == HTTPTestServer::LARGE_BODY); - - request.setMethod(HTTPRequest::HTTP_HEAD); - request.setURI("/large"); - s.sendRequest(request); - std::istream& rs4= s.receiveResponse(response); - assert (response.getContentLength() == HTTPTestServer::LARGE_BODY.length()); - assert (response.getContentType() == "text/plain"); - assert (!response.getKeepAlive()); - std::ostringstream ostr4; - assert (StreamCopier::copyStream(rs4, ostr4) == 0); -} - - -void HTTPClientSessionTest::testProxy() -{ - HTTPTestServer srv; - HTTPClientSession s("www.somehost.com"); - s.setProxy("localhost", srv.port()); - HTTPRequest request(HTTPRequest::HTTP_GET, "/large"); - s.sendRequest(request); - HTTPResponse response; - std::istream& rs = s.receiveResponse(response); - assert (response.getContentLength() == HTTPTestServer::LARGE_BODY.length()); - assert (response.getContentType() == "text/plain"); - std::ostringstream ostr; - StreamCopier::copyStream(rs, ostr); - assert (ostr.str() == HTTPTestServer::LARGE_BODY); -} - - -void HTTPClientSessionTest::testProxyAuth() -{ - HTTPTestServer srv; - HTTPClientSession s("www.somehost.com"); - s.setProxy("localhost", srv.port()); - s.setProxyCredentials("user", "pass"); - HTTPRequest request(HTTPRequest::HTTP_GET, "/large"); - s.sendRequest(request); - HTTPResponse response; - std::istream& rs = s.receiveResponse(response); - assert (response.getContentLength() == HTTPTestServer::LARGE_BODY.length()); - assert (response.getContentType() == "text/plain"); - std::ostringstream ostr; - StreamCopier::copyStream(rs, ostr); - assert (ostr.str() == HTTPTestServer::LARGE_BODY); - std::string r = srv.lastRequest(); - assert (r.find("Proxy-Authorization: Basic dXNlcjpwYXNz\r\n") != std::string::npos); -} - - -void HTTPClientSessionTest::testBypassProxy() -{ - HTTPClientSession::ProxyConfig proxyConfig; - proxyConfig.host = "proxy.domain.com"; - proxyConfig.port = 80; - proxyConfig.nonProxyHosts = "localhost|127\\.0\\.0\\.1"; - - HTTPClientSession s1("localhost", 80); - s1.setProxyConfig(proxyConfig); - assert (s1.bypassProxy()); - - HTTPClientSession s2("127.0.0.1", 80); - s2.setProxyConfig(proxyConfig); - assert (s2.bypassProxy()); - - HTTPClientSession s3("www.appinf.com", 80); - s3.setProxyConfig(proxyConfig); - assert (!s3.bypassProxy()); -} - - -void HTTPClientSessionTest::setUp() -{ -} - - -void HTTPClientSessionTest::tearDown() -{ -} - - -CppUnit::Test* HTTPClientSessionTest::suite() -{ - CppUnit::TestSuite* pSuite = new CppUnit::TestSuite("HTTPClientSessionTest"); - - CppUnit_addTest(pSuite, HTTPClientSessionTest, testGetSmall); - CppUnit_addTest(pSuite, HTTPClientSessionTest, testGetLarge); - CppUnit_addTest(pSuite, HTTPClientSessionTest, testHead); - CppUnit_addTest(pSuite, HTTPClientSessionTest, testPostSmallIdentity); - CppUnit_addTest(pSuite, HTTPClientSessionTest, testPostLargeIdentity); - CppUnit_addTest(pSuite, HTTPClientSessionTest, testPostSmallChunked); - CppUnit_addTest(pSuite, HTTPClientSessionTest, testPostLargeChunked); - CppUnit_addTest(pSuite, HTTPClientSessionTest, testPostSmallClose); - CppUnit_addTest(pSuite, HTTPClientSessionTest, testPostLargeClose); - CppUnit_addTest(pSuite, HTTPClientSessionTest, testKeepAlive); - CppUnit_addTest(pSuite, HTTPClientSessionTest, testProxy); - CppUnit_addTest(pSuite, HTTPClientSessionTest, testProxyAuth); - CppUnit_addTest(pSuite, HTTPClientSessionTest, testBypassProxy); - - return pSuite; -} diff --git a/contrib/libpoco/Net/testsuite/src/HTTPClientSessionTest.h b/contrib/libpoco/Net/testsuite/src/HTTPClientSessionTest.h deleted file mode 100644 index 099b2326906..00000000000 --- a/contrib/libpoco/Net/testsuite/src/HTTPClientSessionTest.h +++ /dev/null @@ -1,52 +0,0 @@ -// -// HTTPClientSessionTest.h -// -// $Id: //poco/1.4/Net/testsuite/src/HTTPClientSessionTest.h#1 $ -// -// Definition of the HTTPClientSessionTest class. -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef HTTPClientSessionTest_INCLUDED -#define HTTPClientSessionTest_INCLUDED - - -#include "Poco/Net/Net.h" -#include "CppUnit/TestCase.h" - - -class HTTPClientSessionTest: public CppUnit::TestCase -{ -public: - HTTPClientSessionTest(const std::string& name); - ~HTTPClientSessionTest(); - - void testGetSmall(); - void testGetLarge(); - void testHead(); - void testPostSmallIdentity(); - void testPostLargeIdentity(); - void testPostSmallChunked(); - void testPostLargeChunked(); - void testPostSmallClose(); - void testPostLargeClose(); - void testKeepAlive(); - void testProxy(); - void testProxyAuth(); - void testBypassProxy(); - - void setUp(); - void tearDown(); - - static CppUnit::Test* suite(); - -private: -}; - - -#endif // HTTPClientSessionTest_INCLUDED diff --git a/contrib/libpoco/Net/testsuite/src/HTTPClientTestSuite.cpp b/contrib/libpoco/Net/testsuite/src/HTTPClientTestSuite.cpp deleted file mode 100644 index b098ea60f1d..00000000000 --- a/contrib/libpoco/Net/testsuite/src/HTTPClientTestSuite.cpp +++ /dev/null @@ -1,26 +0,0 @@ -// -// HTTPClientTestSuite.cpp -// -// $Id: //poco/1.4/Net/testsuite/src/HTTPClientTestSuite.cpp#1 $ -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "HTTPClientTestSuite.h" -#include "HTTPClientSessionTest.h" -#include "HTTPStreamFactoryTest.h" - - -CppUnit::Test* HTTPClientTestSuite::suite() -{ - CppUnit::TestSuite* pSuite = new CppUnit::TestSuite("HTTPClientTestSuite"); - - pSuite->addTest(HTTPClientSessionTest::suite()); - pSuite->addTest(HTTPStreamFactoryTest::suite()); - - return pSuite; -} diff --git a/contrib/libpoco/Net/testsuite/src/HTTPClientTestSuite.h b/contrib/libpoco/Net/testsuite/src/HTTPClientTestSuite.h deleted file mode 100644 index 12eef6addf0..00000000000 --- a/contrib/libpoco/Net/testsuite/src/HTTPClientTestSuite.h +++ /dev/null @@ -1,29 +0,0 @@ -// -// HTTPClientTestSuite.h -// -// $Id: //poco/1.4/Net/testsuite/src/HTTPClientTestSuite.h#1 $ -// -// Definition of the HTTPClientTestSuite class. -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef HTTPClientTestSuite_INCLUDED -#define HTTPClientTestSuite_INCLUDED - - -#include "CppUnit/TestSuite.h" - - -class HTTPClientTestSuite -{ -public: - static CppUnit::Test* suite(); -}; - - -#endif // HTTPClientTestSuite_INCLUDED diff --git a/contrib/libpoco/Net/testsuite/src/HTTPCookieTest.cpp b/contrib/libpoco/Net/testsuite/src/HTTPCookieTest.cpp deleted file mode 100644 index 65aebfdf32e..00000000000 --- a/contrib/libpoco/Net/testsuite/src/HTTPCookieTest.cpp +++ /dev/null @@ -1,208 +0,0 @@ -// -// HTTPCookieTest.cpp -// -// $Id: //poco/1.4/Net/testsuite/src/HTTPCookieTest.cpp#2 $ -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "HTTPCookieTest.h" -#include "CppUnit/TestCaller.h" -#include "CppUnit/TestSuite.h" -#include "Poco/Net/HTTPCookie.h" -#include "Poco/Timestamp.h" -#include "Poco/Timespan.h" -#include "Poco/DateTime.h" -#include "Poco/DateTimeFormatter.h" -#include "Poco/DateTimeParser.h" -#include "Poco/DateTimeFormat.h" -#include "Poco/Net/NameValueCollection.h" -#include -#include - - -using Poco::Timestamp; -using Poco::Timespan; -using Poco::DateTimeFormatter; -using Poco::DateTimeFormat; -using Poco::DateTimeParser; -using Poco::DateTime; -using Poco::Net::NameValueCollection; -using Poco::Net::HTTPCookie; - - -HTTPCookieTest::HTTPCookieTest(const std::string& name): CppUnit::TestCase(name) -{ -} - - -HTTPCookieTest::~HTTPCookieTest() -{ -} - - -void HTTPCookieTest::testCookie() -{ - HTTPCookie cookie("name", "value"); - assert (cookie.getName() == "name"); - assert (cookie.getValue() == "value"); - assert (cookie.toString() == "name=value"); - cookie.setPath("/"); - assert (cookie.toString() == "name=value; path=/"); - cookie.setComment("comment"); - assert (cookie.toString() == "name=value; path=/"); - cookie.setDomain("appinf.com"); - assert (cookie.toString() == "name=value; domain=appinf.com; path=/"); - cookie.setSecure(true); - assert (cookie.toString() == "name=value; domain=appinf.com; path=/; secure"); - cookie.setHttpOnly(true); - assert (cookie.toString() == "name=value; domain=appinf.com; path=/; secure; HttpOnly"); - cookie.setPriority("Low"); - assert (cookie.toString() == "name=value; domain=appinf.com; path=/; Priority=Low; secure; HttpOnly"); - cookie.setPriority("Medium"); - assert (cookie.toString() == "name=value; domain=appinf.com; path=/; Priority=Medium; secure; HttpOnly"); - cookie.setPriority("High"); - assert (cookie.toString() == "name=value; domain=appinf.com; path=/; Priority=High; secure; HttpOnly"); - cookie.setPriority(""); - cookie.setHttpOnly(false); - - cookie.setVersion(1); - assert (cookie.toString() == "name=\"value\"; Comment=\"comment\"; Domain=\"appinf.com\"; Path=\"/\"; secure; Version=\"1\""); - - cookie.setSecure(false); - cookie.setMaxAge(100); - assert (cookie.toString() == "name=\"value\"; Comment=\"comment\"; Domain=\"appinf.com\"; Path=\"/\"; Max-Age=\"100\"; Version=\"1\""); - - cookie.setHttpOnly(true); - assert (cookie.toString() == "name=\"value\"; Comment=\"comment\"; Domain=\"appinf.com\"; Path=\"/\"; Max-Age=\"100\"; HttpOnly; Version=\"1\""); - - cookie.setPriority("Low"); - assert (cookie.toString() == "name=\"value\"; Comment=\"comment\"; Domain=\"appinf.com\"; Path=\"/\"; Priority=\"Low\"; Max-Age=\"100\"; HttpOnly; Version=\"1\""); - cookie.setPriority("Medium"); - assert (cookie.toString() == "name=\"value\"; Comment=\"comment\"; Domain=\"appinf.com\"; Path=\"/\"; Priority=\"Medium\"; Max-Age=\"100\"; HttpOnly; Version=\"1\""); - cookie.setPriority("High"); - assert (cookie.toString() == "name=\"value\"; Comment=\"comment\"; Domain=\"appinf.com\"; Path=\"/\"; Priority=\"High\"; Max-Age=\"100\"; HttpOnly; Version=\"1\""); -} - - -void HTTPCookieTest::testEscape() -{ - std::string escaped = HTTPCookie::escape("this is a test!"); - assert (escaped == "this%20is%20a%20test!"); - - escaped = HTTPCookie::escape("\n\t@,;\"'"); - assert (escaped == "%0A%09@%2C%3B%22%27"); -} - - -void HTTPCookieTest::testUnescape() -{ - std::string unescaped = HTTPCookie::unescape("this%20is%20a%20test!"); - assert (unescaped == "this is a test!"); - - unescaped = HTTPCookie::unescape("%0a%09@%2c%3b%22%27"); - assert (unescaped == "\n\t@,;\"'"); -} - - -void HTTPCookieTest::testExpiryFuture() -{ - DateTime future; - //1 year from now - future.assign(future.year() + 1, - future.month(), - future.day(), - future.hour(), - future.minute(), - future.second(), - future.millisecond(), - future.microsecond()); - testCookieExpiry(future); -} - - -void HTTPCookieTest::testExpiryPast() -{ - DateTime past; - // 1 year ago - past.assign(past.year() - 1, - past.month(), - past.day(), - past.hour(), - past.minute(), - past.second(), - past.millisecond(), - past.microsecond()); - testCookieExpiry(past); -} - - -void HTTPCookieTest::testCookieExpiry(DateTime expiryTime) -{ - NameValueCollection nvc; - nvc.add("name", "value"); - std::string expiryString = DateTimeFormatter::format(expiryTime.timestamp(),DateTimeFormat::HTTP_FORMAT); - nvc.add("expires", expiryString); - - Timestamp before; //start of cookie lifetime - HTTPCookie cookie(nvc); //cookie created - std::string cookieStringV0 = cookie.toString(); - cookie.setVersion(1); - std::string cookieStringV1 = cookie.toString(); - Timestamp now; - //expected number of seconds until expiryTime - should be close to cookie._maxAge - int expectedMaxAge = (int) ((expiryTime.timestamp() - now) / Timestamp::resolution()); //expected number of seconds until expiryTime - Timestamp after; //end of cookie lifetime - - //length of lifetime of the cookie - Timespan delta = after - before; - - //pull out cookie expire time string - size_t startPos = cookieStringV0.find("expires=") + 8; - std::string cookieExpireTimeStr = cookieStringV0.substr(startPos, cookieStringV0.find(";", startPos)); - //convert to a DateTime - int tzd; - DateTime cookieExpireTime = DateTimeParser::parse(cookieExpireTimeStr, tzd); - //pull out cookie max age - int cookieMaxAge; - startPos = cookieStringV1.find("Max-Age=\"") + 9; - std::string cookieMaxAgeStr = cookieStringV1.substr(startPos, cookieStringV1.find("\"", startPos)); - //convert to integer - std::istringstream(cookieMaxAgeStr) >> cookieMaxAge; - - //assert that the cookie's expiry time reflects the time passed to - //its constructor, within a delta of the lifetime of the cookie - assert (cookieExpireTime - expiryTime <= delta); - //assert that the cookie's max age is the number of seconds between - //the creation of the cookie and the expiry time passed to its - //constuctor, within a delta of the lifetime of the cookie - assert (cookieMaxAge - expectedMaxAge <= delta.seconds()); -} - - -void HTTPCookieTest::setUp() -{ -} - - -void HTTPCookieTest::tearDown() -{ -} - - -CppUnit::Test* HTTPCookieTest::suite() -{ - CppUnit::TestSuite* pSuite = new CppUnit::TestSuite("HTTPCookieTest"); - - CppUnit_addTest(pSuite, HTTPCookieTest, testCookie); - CppUnit_addTest(pSuite, HTTPCookieTest, testEscape); - CppUnit_addTest(pSuite, HTTPCookieTest, testUnescape); - CppUnit_addTest(pSuite, HTTPCookieTest, testExpiryFuture); - CppUnit_addTest(pSuite, HTTPCookieTest, testExpiryPast); - - return pSuite; -} diff --git a/contrib/libpoco/Net/testsuite/src/HTTPCookieTest.h b/contrib/libpoco/Net/testsuite/src/HTTPCookieTest.h deleted file mode 100644 index a5900a46b82..00000000000 --- a/contrib/libpoco/Net/testsuite/src/HTTPCookieTest.h +++ /dev/null @@ -1,46 +0,0 @@ -// -// HTTPCookieTest.h -// -// $Id: //poco/1.4/Net/testsuite/src/HTTPCookieTest.h#2 $ -// -// Definition of the HTTPCookieTest class. -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef HTTPCookieTest_INCLUDED -#define HTTPCookieTest_INCLUDED - - -#include "Poco/Net/Net.h" -#include "Poco/DateTime.h" -#include "CppUnit/TestCase.h" - - -class HTTPCookieTest: public CppUnit::TestCase -{ -public: - HTTPCookieTest(const std::string& name); - ~HTTPCookieTest(); - - void testCookie(); - void testEscape(); - void testUnescape(); - void testExpiryFuture(); - void testExpiryPast(); - void testCookieExpiry(Poco::DateTime expiryTime); - - void setUp(); - void tearDown(); - - static CppUnit::Test* suite(); - -private: -}; - - -#endif // HTTPCookieTest_INCLUDED diff --git a/contrib/libpoco/Net/testsuite/src/HTTPCredentialsTest.cpp b/contrib/libpoco/Net/testsuite/src/HTTPCredentialsTest.cpp deleted file mode 100644 index d91351e3c45..00000000000 --- a/contrib/libpoco/Net/testsuite/src/HTTPCredentialsTest.cpp +++ /dev/null @@ -1,341 +0,0 @@ -// -// HTTPCredentialsTest.cpp -// -// $Id: //poco/1.4/Net/testsuite/src/HTTPCredentialsTest.cpp#3 $ -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "HTTPCredentialsTest.h" -#include "CppUnit/TestCaller.h" -#include "CppUnit/TestSuite.h" -#include "Poco/Net/HTTPRequest.h" -#include "Poco/Net/HTTPResponse.h" -#include "Poco/Net/HTTPBasicCredentials.h" -#include "Poco/Net/HTTPAuthenticationParams.h" -#include "Poco/Net/HTTPDigestCredentials.h" -#include "Poco/Net/HTTPCredentials.h" -#include "Poco/Net/NetException.h" -#include "Poco/URI.h" - - -using Poco::Net::HTTPRequest; -using Poco::Net::HTTPResponse; -using Poco::Net::HTTPBasicCredentials; -using Poco::Net::HTTPAuthenticationParams; -using Poco::Net::HTTPDigestCredentials; -using Poco::Net::HTTPCredentials; -using Poco::Net::NotAuthenticatedException; - - -HTTPCredentialsTest::HTTPCredentialsTest(const std::string& name): CppUnit::TestCase(name) -{ -} - - -HTTPCredentialsTest::~HTTPCredentialsTest() -{ -} - - -void HTTPCredentialsTest::testBasicCredentials() -{ - HTTPRequest request; - assert (!request.hasCredentials()); - - HTTPBasicCredentials cred("user", "secret"); - cred.authenticate(request); - assert (request.hasCredentials()); - std::string scheme; - std::string info; - request.getCredentials(scheme, info); - assert (scheme == "Basic"); - assert (info == "dXNlcjpzZWNyZXQ="); - - HTTPBasicCredentials cred2(request); - assert (cred2.getUsername() == "user"); - assert (cred2.getPassword() == "secret"); -} - - -void HTTPCredentialsTest::testProxyBasicCredentials() -{ - HTTPRequest request; - assert (!request.hasProxyCredentials()); - - HTTPBasicCredentials cred("user", "secret"); - cred.proxyAuthenticate(request); - assert (request.hasProxyCredentials()); - std::string scheme; - std::string info; - request.getProxyCredentials(scheme, info); - assert (scheme == "Basic"); - assert (info == "dXNlcjpzZWNyZXQ="); -} - - -void HTTPCredentialsTest::testBadCredentials() -{ - HTTPRequest request; - - std::string scheme; - std::string info; - try - { - request.getCredentials(scheme, info); - fail("no credentials - must throw"); - } - catch (NotAuthenticatedException&) - { - } - - request.setCredentials("Test", "SomeData"); - request.getCredentials(scheme, info); - assert (scheme == "Test"); - assert (info == "SomeData"); - - try - { - HTTPBasicCredentials cred(request); - fail("bad scheme - must throw"); - } - catch (NotAuthenticatedException&) - { - } -} - - -void HTTPCredentialsTest::testAuthenticationParams() -{ - const std::string authInfo("nonce=\"212573bb90170538efad012978ab811f%lu\", realm=\"TestDigest\", response=\"40e4889cfbd0e561f71e3107a2863bc4\", uri=\"/digest/\", username=\"user\""); - HTTPAuthenticationParams params(authInfo); - - assert (params["nonce"] == "212573bb90170538efad012978ab811f%lu"); - assert (params["realm"] == "TestDigest"); - assert (params["response"] == "40e4889cfbd0e561f71e3107a2863bc4"); - assert (params["uri"] == "/digest/"); - assert (params["username"] == "user"); - assert (params.size() == 5); - assert (params.toString() == authInfo); - - params.clear(); - HTTPRequest request; - request.set("Authorization", "Digest " + authInfo); - params.fromRequest(request); - - assert (params["nonce"] == "212573bb90170538efad012978ab811f%lu"); - assert (params["realm"] == "TestDigest"); - assert (params["response"] == "40e4889cfbd0e561f71e3107a2863bc4"); - assert (params["uri"] == "/digest/"); - assert (params["username"] == "user"); - assert (params.size() == 5); - - params.clear(); - HTTPResponse response; - response.set("WWW-Authenticate", "Digest realm=\"TestDigest\", nonce=\"212573bb90170538efad012978ab811f%lu\""); - params.fromResponse(response); - - assert (params["realm"] == "TestDigest"); - assert (params["nonce"] == "212573bb90170538efad012978ab811f%lu"); - assert (params.size() == 2); -} - - -void HTTPCredentialsTest::testAuthenticationParamsMultipleHeaders() -{ - HTTPResponse response; - response.add("WWW-Authenticate", "Unsupported realm=\"TestUnsupported\""); - response.add("WWW-Authenticate", "Digest realm=\"TestDigest\", nonce=\"212573bb90170538efad012978ab811f%lu\""); - HTTPAuthenticationParams params(response); - - assert (params["realm"] == "TestDigest"); - assert (params["nonce"] == "212573bb90170538efad012978ab811f%lu"); - assert (params.size() == 2); -} - - -void HTTPCredentialsTest::testDigestCredentials() -{ - HTTPDigestCredentials creds("user", "s3cr3t"); - HTTPRequest request(HTTPRequest::HTTP_GET, "/digest/"); - HTTPResponse response; - response.set("WWW-Authenticate", "Digest realm=\"TestDigest\", nonce=\"212573bb90170538efad012978ab811f%lu\""); - creds.authenticate(request, response); - std::string auth = request.get("Authorization"); - assert (auth == "Digest username=\"user\", nonce=\"212573bb90170538efad012978ab811f%lu\", realm=\"TestDigest\", uri=\"/digest/\", response=\"40e4889cfbd0e561f71e3107a2863bc4\""); -} - - -void HTTPCredentialsTest::testDigestCredentialsQoP() -{ - HTTPDigestCredentials creds("user", "s3cr3t"); - HTTPRequest request(HTTPRequest::HTTP_GET, "/digest/"); - HTTPResponse response; - response.set("WWW-Authenticate", "Digest realm=\"TestDigest\", nonce=\"212573bb90170538efad012978ab811f%lu\", opaque=\"opaque\", qop=\"auth,auth-int\""); - creds.authenticate(request, response); - - HTTPAuthenticationParams params(request); - assert (params["nonce"] == "212573bb90170538efad012978ab811f%lu"); - assert (params["realm"] == "TestDigest"); - assert (params["response"] != "40e4889cfbd0e561f71e3107a2863bc4"); - assert (params["uri"] == "/digest/"); - assert (params["username"] == "user"); - assert (params["opaque"] == "opaque"); - assert (params["cnonce"] != ""); - assert (params["nc"] == "00000001"); - assert (params["qop"] == "auth"); - assert (params.size() == 9); - - std::string cnonce = params["cnonce"]; - std::string aresp = params["response"]; - - params.clear(); - - creds.updateAuthInfo(request); - params.fromRequest(request); - assert (params["nonce"] == "212573bb90170538efad012978ab811f%lu"); - assert (params["realm"] == "TestDigest"); - assert (params["response"] != aresp); - assert (params["uri"] == "/digest/"); - assert (params["username"] == "user"); - assert (params["opaque"] == "opaque"); - assert (params["cnonce"] == cnonce); - assert (params["nc"] == "00000002"); - assert (params["qop"] == "auth"); - assert (params.size() == 9); -} - - -void HTTPCredentialsTest::testCredentialsBasic() -{ - HTTPCredentials creds("user", "s3cr3t"); - HTTPRequest request(HTTPRequest::HTTP_GET, "/basic/"); - HTTPResponse response; - response.set("WWW-Authenticate", "Basic realm=\"TestBasic\""); - creds.authenticate(request, response); - assert (request.get("Authorization") == "Basic dXNlcjpzM2NyM3Q="); -} - - -void HTTPCredentialsTest::testProxyCredentialsBasic() -{ - HTTPCredentials creds("user", "s3cr3t"); - HTTPRequest request(HTTPRequest::HTTP_GET, "/basic/"); - HTTPResponse response; - response.set("Proxy-Authenticate", "Basic realm=\"TestBasic\""); - creds.proxyAuthenticate(request, response); - assert (request.get("Proxy-Authorization") == "Basic dXNlcjpzM2NyM3Q="); -} - - -void HTTPCredentialsTest::testCredentialsDigest() -{ - HTTPCredentials creds("user", "s3cr3t"); - HTTPRequest request(HTTPRequest::HTTP_GET, "/digest/"); - HTTPResponse response; - response.set("WWW-Authenticate", "Digest realm=\"TestDigest\", nonce=\"212573bb90170538efad012978ab811f%lu\""); - creds.authenticate(request, response); - std::string auth = request.get("Authorization"); - assert (auth == "Digest username=\"user\", nonce=\"212573bb90170538efad012978ab811f%lu\", realm=\"TestDigest\", uri=\"/digest/\", response=\"40e4889cfbd0e561f71e3107a2863bc4\""); -} - - -void HTTPCredentialsTest::testCredentialsDigestMultipleHeaders() -{ - HTTPCredentials creds("user", "s3cr3t"); - HTTPRequest request(HTTPRequest::HTTP_GET, "/digest/"); - HTTPResponse response; - response.add("WWW-Authenticate", "Unsupported realm=\"TestUnsupported\""); - response.add("WWW-Authenticate", "Digest realm=\"TestDigest\", nonce=\"212573bb90170538efad012978ab811f%lu\""); - creds.authenticate(request, response); - std::string auth = request.get("Authorization"); - assert (auth == "Digest username=\"user\", nonce=\"212573bb90170538efad012978ab811f%lu\", realm=\"TestDigest\", uri=\"/digest/\", response=\"40e4889cfbd0e561f71e3107a2863bc4\""); -} - - -void HTTPCredentialsTest::testProxyCredentialsDigest() -{ - HTTPCredentials creds("user", "s3cr3t"); - HTTPRequest request(HTTPRequest::HTTP_GET, "/digest/"); - HTTPResponse response; - response.set("Proxy-Authenticate", "Digest realm=\"TestDigest\", nonce=\"212573bb90170538efad012978ab811f%lu\""); - creds.proxyAuthenticate(request, response); - assert (request.get("Proxy-Authorization") == "Digest username=\"user\", nonce=\"212573bb90170538efad012978ab811f%lu\", realm=\"TestDigest\", uri=\"/digest/\", response=\"40e4889cfbd0e561f71e3107a2863bc4\""); -} - - -void HTTPCredentialsTest::testExtractCredentials() -{ - Poco::URI uri("http://user:s3cr3t@host.com/"); - std::string username; - std::string password; - HTTPCredentials::extractCredentials(uri, username, password); - assert (username == "user"); - assert (password == "s3cr3t"); -} - - -void HTTPCredentialsTest::testVerifyAuthInfo() -{ - HTTPDigestCredentials creds("user", "s3cr3t"); - HTTPRequest request(HTTPRequest::HTTP_GET, "/digest/"); - HTTPResponse response; - response.set("WWW-Authenticate", "Digest realm=\"TestDigest\", nonce=\"212573bb90170538efad012978ab811f%lu\""); - creds.authenticate(request, response); - assert (creds.verifyAuthInfo(request)); - - request.set("Authorization", "Digest nonce=\"212573bb90170538efad012978ab811f%lu\", realm=\"TestDigest\", response=\"xxe4889cfbd0e561f71e3107a2863bc4\", uri=\"/digest/\", username=\"user\""); - assert (!creds.verifyAuthInfo(request)); -} - - -void HTTPCredentialsTest::testVerifyAuthInfoQoP() -{ - HTTPDigestCredentials creds("user", "s3cr3t"); - HTTPRequest request(HTTPRequest::HTTP_GET, "/digest/"); - HTTPResponse response; - response.set("WWW-Authenticate", "Digest realm=\"TestDigest\", nonce=\"212573bb90170538efad012978ab811f%lu\", opaque=\"opaque\", qop=\"auth,auth-int\""); - creds.authenticate(request, response); - assert (creds.verifyAuthInfo(request)); - - request.set("Authorization", "Digest cnonce=\"f9c80ffd1c3bc4ee47ed92b704ba75a4\", nc=00000001, nonce=\"212573bb90170538efad012978ab811f%lu\", opaque=\"opaque\", qop=\"auth\", realm=\"TestDigest\", response=\"ff0e90b9aa019120ea0ed6e23ce95d9a\", uri=\"/digest/\", username=\"user\""); - assert (!creds.verifyAuthInfo(request)); -} - - -void HTTPCredentialsTest::setUp() -{ -} - - -void HTTPCredentialsTest::tearDown() -{ -} - - -CppUnit::Test* HTTPCredentialsTest::suite() -{ - CppUnit::TestSuite* pSuite = new CppUnit::TestSuite("HTTPCredentialsTest"); - - CppUnit_addTest(pSuite, HTTPCredentialsTest, testBasicCredentials); - CppUnit_addTest(pSuite, HTTPCredentialsTest, testProxyBasicCredentials); - CppUnit_addTest(pSuite, HTTPCredentialsTest, testBadCredentials); - CppUnit_addTest(pSuite, HTTPCredentialsTest, testAuthenticationParams); - CppUnit_addTest(pSuite, HTTPCredentialsTest, testAuthenticationParamsMultipleHeaders); - CppUnit_addTest(pSuite, HTTPCredentialsTest, testDigestCredentials); - CppUnit_addTest(pSuite, HTTPCredentialsTest, testDigestCredentialsQoP); - CppUnit_addTest(pSuite, HTTPCredentialsTest, testCredentialsBasic); - CppUnit_addTest(pSuite, HTTPCredentialsTest, testProxyCredentialsBasic); - CppUnit_addTest(pSuite, HTTPCredentialsTest, testCredentialsDigest); - CppUnit_addTest(pSuite, HTTPCredentialsTest, testCredentialsDigestMultipleHeaders); - CppUnit_addTest(pSuite, HTTPCredentialsTest, testProxyCredentialsDigest); - CppUnit_addTest(pSuite, HTTPCredentialsTest, testExtractCredentials); - CppUnit_addTest(pSuite, HTTPCredentialsTest, testVerifyAuthInfo); - CppUnit_addTest(pSuite, HTTPCredentialsTest, testVerifyAuthInfoQoP); - - return pSuite; -} diff --git a/contrib/libpoco/Net/testsuite/src/HTTPCredentialsTest.h b/contrib/libpoco/Net/testsuite/src/HTTPCredentialsTest.h deleted file mode 100644 index 4f0d3ac8ac5..00000000000 --- a/contrib/libpoco/Net/testsuite/src/HTTPCredentialsTest.h +++ /dev/null @@ -1,54 +0,0 @@ -// -// HTTPCredentialsTest.h -// -// $Id: //poco/1.4/Net/testsuite/src/HTTPCredentialsTest.h#3 $ -// -// Definition of the HTTPCredentialsTest class. -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef HTTPCredentialsTest_INCLUDED -#define HTTPCredentialsTest_INCLUDED - - -#include "Poco/Net/Net.h" -#include "CppUnit/TestCase.h" - - -class HTTPCredentialsTest: public CppUnit::TestCase -{ -public: - HTTPCredentialsTest(const std::string& name); - ~HTTPCredentialsTest(); - - void testBasicCredentials(); - void testProxyBasicCredentials(); - void testBadCredentials(); - void testAuthenticationParams(); - void testAuthenticationParamsMultipleHeaders(); - void testDigestCredentials(); - void testDigestCredentialsQoP(); - void testCredentialsBasic(); - void testProxyCredentialsBasic(); - void testCredentialsDigest(); - void testCredentialsDigestMultipleHeaders(); - void testProxyCredentialsDigest(); - void testExtractCredentials(); - void testVerifyAuthInfo(); - void testVerifyAuthInfoQoP(); - - void setUp(); - void tearDown(); - - static CppUnit::Test* suite(); - -private: -}; - - -#endif // HTTPCredentialsTest_INCLUDED diff --git a/contrib/libpoco/Net/testsuite/src/HTTPRequestTest.cpp b/contrib/libpoco/Net/testsuite/src/HTTPRequestTest.cpp deleted file mode 100644 index 1180d529a5d..00000000000 --- a/contrib/libpoco/Net/testsuite/src/HTTPRequestTest.cpp +++ /dev/null @@ -1,269 +0,0 @@ -// -// HTTPRequestTest.cpp -// -// $Id: //poco/1.4/Net/testsuite/src/HTTPRequestTest.cpp#4 $ -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "HTTPRequestTest.h" -#include "CppUnit/TestCaller.h" -#include "CppUnit/TestSuite.h" -#include "Poco/Net/HTTPRequest.h" -#include "Poco/Net/NetException.h" -#include - - -using Poco::Net::HTTPRequest; -using Poco::Net::HTTPMessage; -using Poco::Net::MessageException; -using Poco::Net::NameValueCollection; - - -HTTPRequestTest::HTTPRequestTest(const std::string& name): CppUnit::TestCase(name) -{ -} - - -HTTPRequestTest::~HTTPRequestTest() -{ -} - - -void HTTPRequestTest::testWrite1() -{ - HTTPRequest request; - std::ostringstream ostr; - request.write(ostr); - std::string s = ostr.str(); - assert (s == "GET / HTTP/1.0\r\n\r\n"); -} - - -void HTTPRequestTest::testWrite2() -{ - HTTPRequest request(HTTPRequest::HTTP_HEAD, "/index.html", HTTPMessage::HTTP_1_1); - request.setHost("localhost", 80); - request.setKeepAlive(true); - request.set("User-Agent", "Poco"); - std::ostringstream ostr; - request.write(ostr); - std::string s = ostr.str(); - assert (s == "HEAD /index.html HTTP/1.1\r\nHost: localhost\r\nConnection: Keep-Alive\r\nUser-Agent: Poco\r\n\r\n"); -} - - -void HTTPRequestTest::testWrite3() -{ - HTTPRequest request(HTTPRequest::HTTP_POST, "/test.cgi", HTTPMessage::HTTP_1_1); - request.setHost("localhost", 8000); - request.setKeepAlive(false); - request.set("User-Agent", "Poco"); - request.setContentLength(100); - request.setContentType("text/plain"); - std::ostringstream ostr; - request.write(ostr); - std::string s = ostr.str(); - assert (s == "POST /test.cgi HTTP/1.1\r\nHost: localhost:8000\r\nConnection: Close\r\nUser-Agent: Poco\r\nContent-Length: 100\r\nContent-Type: text/plain\r\n\r\n"); -} - - -void HTTPRequestTest::testWrite4() -{ - HTTPRequest request(HTTPRequest::HTTP_HEAD, "/index.html", HTTPMessage::HTTP_1_1); - request.setHost("fe80::1", 88); - request.setKeepAlive(true); - request.set("User-Agent", "Poco"); - std::ostringstream ostr; - request.write(ostr); - std::string s = ostr.str(); - assert (s == "HEAD /index.html HTTP/1.1\r\nHost: [fe80::1]:88\r\nConnection: Keep-Alive\r\nUser-Agent: Poco\r\n\r\n"); -} - - -void HTTPRequestTest::testRead1() -{ - std::string s("GET / HTTP/1.0\r\n\r\n"); - std::istringstream istr(s); - HTTPRequest request; - request.read(istr); - assert (request.getMethod() == HTTPRequest::HTTP_GET); - assert (request.getURI() == "/"); - assert (request.getVersion() == HTTPMessage::HTTP_1_0); - assert (request.empty()); - assert (istr.get() == -1); -} - - -void HTTPRequestTest::testRead2() -{ - std::string s("HEAD /index.html HTTP/1.1\r\nConnection: Keep-Alive\r\nHost: localhost\r\nUser-Agent: Poco\r\n\r\n"); - std::istringstream istr(s); - HTTPRequest request; - request.read(istr); - assert (request.getMethod() == HTTPRequest::HTTP_HEAD); - assert (request.getURI() == "/index.html"); - assert (request.getVersion() == HTTPMessage::HTTP_1_1); - assert (request.size() == 3); - assert (request["Connection"] == "Keep-Alive"); - assert (request["Host"] == "localhost"); - assert (request["User-Agent"] == "Poco"); - assert (istr.get() == -1); -} - - -void HTTPRequestTest::testRead3() -{ - std::string s("POST /test.cgi HTTP/1.1\r\nConnection: Close\r\nContent-Length: 100\r\nContent-Type: text/plain\r\nHost: localhost:8000\r\nUser-Agent: Poco\r\n\r\n"); - std::istringstream istr(s); - HTTPRequest request; - request.read(istr); - assert (request.getMethod() == HTTPRequest::HTTP_POST); - assert (request.getURI() == "/test.cgi"); - assert (request.getVersion() == HTTPMessage::HTTP_1_1); - assert (request.size() == 5); - assert (request["Connection"] == "Close"); - assert (request["Host"] == "localhost:8000"); - assert (request["User-Agent"] == "Poco"); - assert (request.getContentType() == "text/plain"); - assert (request.getContentLength() == 100); - assert (istr.get() == -1); -} - - -void HTTPRequestTest::testRead4() -{ - std::string s("POST /test.cgi HTTP/1.1\r\nConnection: Close\r\nContent-Length: 100 \r\nContent-Type: text/plain\r\nHost: localhost:8000\r\nUser-Agent: Poco\r\n\r\n"); - std::istringstream istr(s); - HTTPRequest request; - request.read(istr); - assert (request.getMethod() == HTTPRequest::HTTP_POST); - assert (request.getURI() == "/test.cgi"); - assert (request.getVersion() == HTTPMessage::HTTP_1_1); - assert (request.size() == 5); - assert (request["Connection"] == "Close"); - assert (request["Host"] == "localhost:8000"); - assert (request["User-Agent"] == "Poco"); - assert (request.getContentType() == "text/plain"); - assert (request.getContentLength() == 100); - assert (istr.get() == -1); -} - - -void HTTPRequestTest::testInvalid1() -{ - std::string s(256, 'x'); - std::istringstream istr(s); - HTTPRequest request; - try - { - request.read(istr); - fail("inavalid request - must throw"); - } - catch (MessageException&) - { - } -} - - -void HTTPRequestTest::testInvalid2() -{ - std::string s("GET "); - s.append(8000, 'x'); - s.append("HTTP/1.0"); - std::istringstream istr(s); - HTTPRequest request; - try - { - request.read(istr); - fail("inavalid request - must throw"); - } - catch (MessageException&) - { - } -} - - -void HTTPRequestTest::testInvalid3() -{ - std::string s("GET / HTTP/1.10"); - std::istringstream istr(s); - HTTPRequest request; - try - { - request.read(istr); - fail("inavalid request - must throw"); - } - catch (MessageException&) - { - } -} - - -void HTTPRequestTest::testCookies() -{ - HTTPRequest request1; - NameValueCollection cookies1; - cookies1.add("cookie1", "value1"); - request1.setCookies(cookies1); - assert (request1["Cookie"] == "cookie1=value1"); - - HTTPRequest request2; - NameValueCollection cookies2; - cookies2.add("cookie2", "value2"); - cookies2.add("cookie3", "value3"); - request2.setCookies(cookies2); - assert (request2["Cookie"] == "cookie2=value2; cookie3=value3"); - - request1.setCookies(cookies2); - NameValueCollection cookies3; - request1.getCookies(cookies3); - assert (cookies3.size() == 3); - assert (cookies3["cookie1"] == "value1"); - assert (cookies3["cookie2"] == "value2"); - assert (cookies3["cookie3"] == "value3"); - - HTTPRequest request3; - request3.add("Cookie", "cookie1=value1"); - request3.add("cookie", "cookie2=value2"); - NameValueCollection cookies4; - request3.getCookies(cookies4); - assert (cookies4.size() == 2); - assert (cookies4["cookie1"] == "value1"); - assert (cookies4["cookie2"] == "value2"); -} - - -void HTTPRequestTest::setUp() -{ -} - - -void HTTPRequestTest::tearDown() -{ -} - - -CppUnit::Test* HTTPRequestTest::suite() -{ - CppUnit::TestSuite* pSuite = new CppUnit::TestSuite("HTTPRequestTest"); - - CppUnit_addTest(pSuite, HTTPRequestTest, testWrite1); - CppUnit_addTest(pSuite, HTTPRequestTest, testWrite2); - CppUnit_addTest(pSuite, HTTPRequestTest, testWrite3); - CppUnit_addTest(pSuite, HTTPRequestTest, testWrite4); - CppUnit_addTest(pSuite, HTTPRequestTest, testRead1); - CppUnit_addTest(pSuite, HTTPRequestTest, testRead2); - CppUnit_addTest(pSuite, HTTPRequestTest, testRead3); - CppUnit_addTest(pSuite, HTTPRequestTest, testRead4); - CppUnit_addTest(pSuite, HTTPRequestTest, testInvalid1); - CppUnit_addTest(pSuite, HTTPRequestTest, testInvalid2); - CppUnit_addTest(pSuite, HTTPRequestTest, testInvalid3); - CppUnit_addTest(pSuite, HTTPRequestTest, testCookies); - - return pSuite; -} diff --git a/contrib/libpoco/Net/testsuite/src/HTTPRequestTest.h b/contrib/libpoco/Net/testsuite/src/HTTPRequestTest.h deleted file mode 100644 index cc389e65951..00000000000 --- a/contrib/libpoco/Net/testsuite/src/HTTPRequestTest.h +++ /dev/null @@ -1,51 +0,0 @@ -// -// HTTPRequestTest.h -// -// $Id: //poco/1.4/Net/testsuite/src/HTTPRequestTest.h#3 $ -// -// Definition of the HTTPRequestTest class. -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef HTTPRequestTest_INCLUDED -#define HTTPRequestTest_INCLUDED - - -#include "Poco/Net/Net.h" -#include "CppUnit/TestCase.h" - - -class HTTPRequestTest: public CppUnit::TestCase -{ -public: - HTTPRequestTest(const std::string& name); - ~HTTPRequestTest(); - - void testWrite1(); - void testWrite2(); - void testWrite3(); - void testWrite4(); - void testRead1(); - void testRead2(); - void testRead3(); - void testRead4(); - void testInvalid1(); - void testInvalid2(); - void testInvalid3(); - void testCookies(); - - void setUp(); - void tearDown(); - - static CppUnit::Test* suite(); - -private: -}; - - -#endif // HTTPRequestTest_INCLUDED diff --git a/contrib/libpoco/Net/testsuite/src/HTTPResponseTest.cpp b/contrib/libpoco/Net/testsuite/src/HTTPResponseTest.cpp deleted file mode 100644 index 83e84bf2c74..00000000000 --- a/contrib/libpoco/Net/testsuite/src/HTTPResponseTest.cpp +++ /dev/null @@ -1,232 +0,0 @@ -// -// HTTPResponseTest.cpp -// -// $Id: //poco/1.4/Net/testsuite/src/HTTPResponseTest.cpp#2 $ -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "HTTPResponseTest.h" -#include "CppUnit/TestCaller.h" -#include "CppUnit/TestSuite.h" -#include "Poco/Net/HTTPResponse.h" -#include "Poco/Net/HTTPCookie.h" -#include "Poco/Net/NetException.h" -#include - -GCC_DIAG_OFF(parentheses) - -using Poco::Net::HTTPResponse; -using Poco::Net::HTTPMessage; -using Poco::Net::HTTPCookie; -using Poco::Net::MessageException; - - -HTTPResponseTest::HTTPResponseTest(const std::string& name): CppUnit::TestCase(name) -{ -} - - -HTTPResponseTest::~HTTPResponseTest() -{ -} - - -void HTTPResponseTest::testWrite1() -{ - HTTPResponse response; - std::ostringstream ostr; - response.write(ostr); - std::string s = ostr.str(); - assert (s == "HTTP/1.0 200 OK\r\n\r\n"); -} - - -void HTTPResponseTest::testWrite2() -{ - HTTPResponse response(HTTPMessage::HTTP_1_1, HTTPResponse::HTTP_MOVED_PERMANENTLY); - response.set("Location", "http://www.appinf.com/index.html"); - response.set("Server", "Poco/1.0"); - std::ostringstream ostr; - response.write(ostr); - std::string s = ostr.str(); - assert (s == "HTTP/1.1 301 Moved Permanently\r\nLocation: http://www.appinf.com/index.html\r\nServer: Poco/1.0\r\n\r\n"); -} - - -void HTTPResponseTest::testRead1() -{ - std::string s("HTTP/1.1 500 Internal Server Error\r\n\r\n"); - std::istringstream istr(s); - HTTPResponse response; - response.read(istr); - assert (response.getStatus() == HTTPResponse::HTTP_INTERNAL_SERVER_ERROR); - assert (response.getReason() == "Internal Server Error"); - assert (response.getVersion() == HTTPMessage::HTTP_1_1); - assert (response.empty()); - assert (istr.get() == -1); -} - - -void HTTPResponseTest::testRead2() -{ - std::string s("HTTP/1.0 301 Moved Permanently\r\nLocation: http://www.appinf.com/index.html\r\nServer: Poco/1.0\r\n\r\n"); - std::istringstream istr(s); - HTTPResponse response; - response.read(istr); - assert (response.getStatus() == HTTPResponse::HTTP_MOVED_PERMANENTLY); - assert (response.getReason() == "Moved Permanently"); - assert (response.getVersion() == HTTPMessage::HTTP_1_0); - assert (response.size() == 2); - assert (response["Location"] == "http://www.appinf.com/index.html"); - assert (response["Server"] == "Poco/1.0"); - assert (istr.get() == -1); -} - - -void HTTPResponseTest::testRead3() -{ - std::string s("HTTP/1.1 200 \r\nContent-Length: 0\r\n\r\n"); - std::istringstream istr(s); - HTTPResponse response; - response.read(istr); - assert (response.getVersion() == HTTPMessage::HTTP_1_1); - assert (response.getStatus() == HTTPResponse::HTTP_OK); - assert (response.getReason() == ""); - assert (response.size() == 1); - assert (response.getContentLength() == 0); - assert (istr.get() == -1); -} - - -void HTTPResponseTest::testInvalid1() -{ - std::string s(256, 'x'); - std::istringstream istr(s); - HTTPResponse response; - try - { - response.read(istr); - fail("inavalid response - must throw"); - } - catch (MessageException&) - { - } -} - - -void HTTPResponseTest::testInvalid2() -{ - std::string s("HTTP/1.1 200 "); - s.append(1000, 'x'); - s.append("\r\n\r\n"); - std::istringstream istr(s); - HTTPResponse response; - try - { - response.read(istr); - fail("inavalid response - must throw"); - } - catch (MessageException&) - { - } -} - - -void HTTPResponseTest::testInvalid3() -{ - std::string s("HTTP/1.0 "); - s.append(8000, 'x'); - s.append("\r\n\r\n"); - std::istringstream istr(s); - HTTPResponse response; - try - { - response.read(istr); - fail("inavalid response - must throw"); - } - catch (MessageException&) - { - } -} - - -void HTTPResponseTest::testCookies() -{ - HTTPResponse response; - HTTPCookie cookie1("cookie1", "value1"); - response.addCookie(cookie1); - std::vector cookies; - response.getCookies(cookies); - assert (cookies.size() == 1); - assert (cookie1.getVersion() == cookies[0].getVersion()); - assert (cookie1.getName() == cookies[0].getName()); - assert (cookie1.getValue() == cookies[0].getValue()); - assert (cookie1.getComment() == cookies[0].getComment()); - assert (cookie1.getDomain() == cookies[0].getDomain()); - assert (cookie1.getPath() == cookies[0].getPath()); - assert (cookie1.getSecure() == cookies[0].getSecure()); - assert (cookie1.getMaxAge() == cookies[0].getMaxAge()); - - HTTPCookie cookie2("cookie2", "value2"); - cookie2.setVersion(1); - cookie2.setMaxAge(42); - cookie2.setSecure(true); - response.addCookie(cookie2); - response.getCookies(cookies); - assert (cookies.size() == 2); - HTTPCookie cookie2a; - if (cookies[0].getName() == cookie2.getName()) - cookie2a = cookies[0]; - else - cookie2a = cookies[1]; - assert (cookie2.getVersion() == cookie2a.getVersion()); - assert (cookie2.getName() == cookie2a.getName()); - assert (cookie2.getValue() == cookie2a.getValue()); - assert (cookie2.getComment() == cookie2a.getComment()); - assert (cookie2.getDomain() == cookie2a.getDomain()); - assert (cookie2.getPath() == cookie2a.getPath()); - assert (cookie2.getSecure() == cookie2a.getSecure()); - assert (cookie2.getMaxAge() == cookie2a.getMaxAge()); - - HTTPResponse response2; - response2.add("Set-Cookie", "name1=value1"); - response2.add("Set-cookie", "name2=value2"); - cookies.clear(); - response2.getCookies(cookies); - assert (cookies.size() == 2); - assert (cookies[0].getName() == "name1" && cookies[1].getName() == "name2" - || cookies[0].getName() == "name2" && cookies[1].getName() == "name1"); -} - - -void HTTPResponseTest::setUp() -{ -} - - -void HTTPResponseTest::tearDown() -{ -} - - -CppUnit::Test* HTTPResponseTest::suite() -{ - CppUnit::TestSuite* pSuite = new CppUnit::TestSuite("HTTPResponseTest"); - - CppUnit_addTest(pSuite, HTTPResponseTest, testWrite1); - CppUnit_addTest(pSuite, HTTPResponseTest, testWrite2); - CppUnit_addTest(pSuite, HTTPResponseTest, testRead1); - CppUnit_addTest(pSuite, HTTPResponseTest, testRead2); - CppUnit_addTest(pSuite, HTTPResponseTest, testRead3); - CppUnit_addTest(pSuite, HTTPResponseTest, testInvalid1); - CppUnit_addTest(pSuite, HTTPResponseTest, testInvalid2); - CppUnit_addTest(pSuite, HTTPResponseTest, testInvalid3); - CppUnit_addTest(pSuite, HTTPResponseTest, testCookies); - - return pSuite; -} diff --git a/contrib/libpoco/Net/testsuite/src/HTTPResponseTest.h b/contrib/libpoco/Net/testsuite/src/HTTPResponseTest.h deleted file mode 100644 index 9cd3420418e..00000000000 --- a/contrib/libpoco/Net/testsuite/src/HTTPResponseTest.h +++ /dev/null @@ -1,48 +0,0 @@ -// -// HTTPResponseTest.h -// -// $Id: //poco/1.4/Net/testsuite/src/HTTPResponseTest.h#1 $ -// -// Definition of the HTTPResponseTest class. -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef HTTPResponseTest_INCLUDED -#define HTTPResponseTest_INCLUDED - - -#include "Poco/Net/Net.h" -#include "CppUnit/TestCase.h" - - -class HTTPResponseTest: public CppUnit::TestCase -{ -public: - HTTPResponseTest(const std::string& name); - ~HTTPResponseTest(); - - void testWrite1(); - void testWrite2(); - void testRead1(); - void testRead2(); - void testRead3(); - void testInvalid1(); - void testInvalid2(); - void testInvalid3(); - void testCookies(); - - void setUp(); - void tearDown(); - - static CppUnit::Test* suite(); - -private: -}; - - -#endif // HTTPResponseTest_INCLUDED diff --git a/contrib/libpoco/Net/testsuite/src/HTTPServerTest.cpp b/contrib/libpoco/Net/testsuite/src/HTTPServerTest.cpp deleted file mode 100644 index 0479cc1b186..00000000000 --- a/contrib/libpoco/Net/testsuite/src/HTTPServerTest.cpp +++ /dev/null @@ -1,551 +0,0 @@ -// -// HTTPServerTest.cpp -// -// $Id: //poco/1.4/Net/testsuite/src/HTTPServerTest.cpp#1 $ -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "HTTPServerTest.h" -#include "CppUnit/TestCaller.h" -#include "CppUnit/TestSuite.h" -#include "Poco/Net/HTTPServer.h" -#include "Poco/Net/HTTPServerParams.h" -#include "Poco/Net/AbstractHTTPRequestHandler.h" -#include "Poco/Net/HTTPRequestHandlerFactory.h" -#include "Poco/Net/HTTPClientSession.h" -#include "Poco/Net/HTTPRequest.h" -#include "Poco/Net/HTTPServerRequest.h" -#include "Poco/Net/HTTPResponse.h" -#include "Poco/Net/HTTPServerResponse.h" -#include "Poco/Net/ServerSocket.h" -#include "Poco/StreamCopier.h" -#include - - -using Poco::Net::HTTPServer; -using Poco::Net::HTTPServerParams; -using Poco::Net::HTTPRequestHandler; -using Poco::Net::AbstractHTTPRequestHandler; -using Poco::Net::HTTPRequestHandlerFactory; -using Poco::Net::HTTPClientSession; -using Poco::Net::HTTPRequest; -using Poco::Net::HTTPServerRequest; -using Poco::Net::HTTPResponse; -using Poco::Net::HTTPServerResponse; -using Poco::Net::HTTPMessage; -using Poco::Net::ServerSocket; -using Poco::StreamCopier; - - -namespace -{ - class EchoBodyRequestHandler: public HTTPRequestHandler - { - public: - void handleRequest(HTTPServerRequest& request, HTTPServerResponse& response) - { - if (request.getChunkedTransferEncoding()) - response.setChunkedTransferEncoding(true); - else if (request.getContentLength() != HTTPMessage::UNKNOWN_CONTENT_LENGTH) - response.setContentLength(request.getContentLength()); - - response.setContentType(request.getContentType()); - - std::istream& istr = request.stream(); - std::ostream& ostr = response.send(); - StreamCopier::copyStream(istr, ostr); - } - }; - - class EchoHeaderRequestHandler: public HTTPRequestHandler - { - public: - void handleRequest(HTTPServerRequest& request, HTTPServerResponse& response) - { - std::ostringstream osstr; - request.write(osstr); - int n = (int) osstr.str().length(); - response.setContentLength(n); - std::ostream& ostr = response.send(); - if (request.getMethod() != HTTPRequest::HTTP_HEAD) - request.write(ostr); - } - }; - - class RedirectRequestHandler: public AbstractHTTPRequestHandler - { - public: - void run() - { - response().redirect("http://www.appinf.com/"); - } - }; - - class AuthRequestHandler: public HTTPRequestHandler - { - public: - void handleRequest(HTTPServerRequest& request, HTTPServerResponse& response) - { - response.requireAuthentication("/auth"); - response.send(); - } - }; - - class BufferRequestHandler: public HTTPRequestHandler - { - public: - void handleRequest(HTTPServerRequest& request, HTTPServerResponse& response) - { - std::string data("xxxxxxxxxx"); - response.sendBuffer(data.data(), data.length()); - } - }; - - class RequestHandlerFactory: public HTTPRequestHandlerFactory - { - public: - HTTPRequestHandler* createRequestHandler(const HTTPServerRequest& request) - { - if (request.getURI() == "/echoBody") - return new EchoBodyRequestHandler; - else if (request.getURI() == "/echoHeader") - return new EchoHeaderRequestHandler; - else if (request.getURI() == "/redirect") - return new RedirectRequestHandler(); - else if (request.getURI() == "/auth") - return new AuthRequestHandler(); - else if (request.getURI() == "/buffer") - return new BufferRequestHandler(); - else - return 0; - } - }; -} - - -HTTPServerTest::HTTPServerTest(const std::string& name): CppUnit::TestCase(name) -{ -} - - -HTTPServerTest::~HTTPServerTest() -{ -} - - -void HTTPServerTest::testIdentityRequest() -{ - ServerSocket svs(0); - HTTPServerParams* pParams = new HTTPServerParams; - pParams->setKeepAlive(false); - HTTPServer srv(new RequestHandlerFactory, svs, pParams); - srv.start(); - - HTTPClientSession cs("localhost", svs.address().port()); - std::string body(5000, 'x'); - HTTPRequest request("POST", "/echoBody"); - request.setContentLength((int) body.length()); - request.setContentType("text/plain"); - cs.sendRequest(request) << body; - HTTPResponse response; - std::string rbody; - cs.receiveResponse(response) >> rbody; - assert (response.getContentLength() == body.size()); - assert (response.getContentType() == "text/plain"); - assert (rbody == body); -} - - -void HTTPServerTest::testPutIdentityRequest() -{ - ServerSocket svs(0); - HTTPServerParams* pParams = new HTTPServerParams; - pParams->setKeepAlive(false); - HTTPServer srv(new RequestHandlerFactory, svs, pParams); - srv.start(); - - HTTPClientSession cs("localhost", svs.address().port()); - std::string body(5000, 'x'); - HTTPRequest request("PUT", "/echoBody"); - request.setContentLength((int) body.length()); - request.setContentType("text/plain"); - cs.sendRequest(request) << body; - HTTPResponse response; - std::string rbody; - cs.receiveResponse(response) >> rbody; - assert (response.getContentLength() == body.size()); - assert (response.getContentType() == "text/plain"); - assert (rbody == body); -} - - -void HTTPServerTest::testChunkedRequest() -{ - ServerSocket svs(0); - HTTPServerParams* pParams = new HTTPServerParams; - pParams->setKeepAlive(false); - HTTPServer srv(new RequestHandlerFactory, svs, pParams); - srv.start(); - - HTTPClientSession cs("localhost", svs.address().port()); - std::string body(5000, 'x'); - HTTPRequest request("POST", "/echoBody"); - request.setContentType("text/plain"); - request.setChunkedTransferEncoding(true); - cs.sendRequest(request) << body; - HTTPResponse response; - std::string rbody; - cs.receiveResponse(response) >> rbody; - assert (response.getContentLength() == HTTPMessage::UNKNOWN_CONTENT_LENGTH); - assert (response.getContentType() == "text/plain"); - assert (response.getChunkedTransferEncoding()); - assert (rbody == body); -} - - -void HTTPServerTest::testClosedRequest() -{ - ServerSocket svs(0); - HTTPServerParams* pParams = new HTTPServerParams; - pParams->setKeepAlive(false); - HTTPServer srv(new RequestHandlerFactory, svs, pParams); - srv.start(); - - HTTPClientSession cs("localhost", svs.address().port()); - std::string body(5000, 'x'); - HTTPRequest request("POST", "/echoBody"); - request.setContentType("text/plain"); - cs.sendRequest(request) << body; - HTTPResponse response; - std::string rbody; - cs.receiveResponse(response) >> rbody; - assert (response.getContentLength() == HTTPMessage::UNKNOWN_CONTENT_LENGTH); - assert (response.getContentType() == "text/plain"); - assert (!response.getChunkedTransferEncoding()); - assert (rbody == body); -} - - -void HTTPServerTest::testIdentityRequestKeepAlive() -{ - HTTPServer srv(new RequestHandlerFactory, 8008); - srv.start(); - - HTTPClientSession cs("localhost", srv.socket().address().port()); - cs.setKeepAlive(true); - std::string body(5000, 'x'); - HTTPRequest request("POST", "/echoBody", HTTPMessage::HTTP_1_1); - request.setContentLength((int) body.length()); - request.setContentType("text/plain"); - cs.sendRequest(request) << body; - HTTPResponse response; - std::string rbody; - cs.receiveResponse(response) >> rbody; - assert (response.getContentLength() == body.size()); - assert (response.getContentType() == "text/plain"); - assert (response.getKeepAlive()); - assert (rbody == body); - - body.assign(1000, 'y'); - request.setContentLength((int) body.length()); - request.setKeepAlive(false); - cs.sendRequest(request) << body; - cs.receiveResponse(response) >> rbody; - assert (response.getContentLength() == body.size()); - assert (response.getContentType() == "text/plain"); - assert (!response.getKeepAlive()); - assert (rbody == body);} - - -void HTTPServerTest::testChunkedRequestKeepAlive() -{ - HTTPServer srv(new RequestHandlerFactory, 8009); - srv.start(); - - HTTPClientSession cs("localhost", srv.socket().address().port()); - cs.setKeepAlive(true); - std::string body(5000, 'x'); - HTTPRequest request("POST", "/echoBody", HTTPMessage::HTTP_1_1); - request.setContentType("text/plain"); - request.setChunkedTransferEncoding(true); - cs.sendRequest(request) << body; - HTTPResponse response; - std::string rbody; - cs.receiveResponse(response) >> rbody; - assert (response.getContentLength() == HTTPMessage::UNKNOWN_CONTENT_LENGTH); - assert (response.getContentType() == "text/plain"); - assert (response.getChunkedTransferEncoding()); - assert (rbody == body); - - body.assign(1000, 'y'); - request.setKeepAlive(false); - cs.sendRequest(request) << body; - cs.receiveResponse(response) >> rbody; - assert (response.getContentLength() == HTTPMessage::UNKNOWN_CONTENT_LENGTH); - assert (response.getContentType() == "text/plain"); - assert (response.getChunkedTransferEncoding()); - assert (!response.getKeepAlive()); - assert (rbody == body); -} - - -void HTTPServerTest::testClosedRequestKeepAlive() -{ - HTTPServer srv(new RequestHandlerFactory, 8010); - srv.start(); - - HTTPClientSession cs("localhost", srv.socket().address().port()); - std::string body(5000, 'x'); - HTTPRequest request("POST", "/echoBody"); - request.setContentType("text/plain"); - cs.sendRequest(request) << body; - HTTPResponse response; - std::string rbody; - cs.receiveResponse(response) >> rbody; - assert (response.getContentLength() == HTTPMessage::UNKNOWN_CONTENT_LENGTH); - assert (response.getContentType() == "text/plain"); - assert (!response.getChunkedTransferEncoding()); - assert (!response.getKeepAlive()); - assert (rbody == body); -} - - -void HTTPServerTest::testMaxKeepAlive() -{ - ServerSocket svs(0); - HTTPServerParams* pParams = new HTTPServerParams; - pParams->setKeepAlive(true); - pParams->setMaxKeepAliveRequests(4); - HTTPServer srv(new RequestHandlerFactory, svs, pParams); - srv.start(); - - HTTPClientSession cs("localhost", svs.address().port()); - cs.setKeepAlive(true); - HTTPRequest request("POST", "/echoBody", HTTPMessage::HTTP_1_1); - request.setContentType("text/plain"); - request.setChunkedTransferEncoding(true); - std::string body(5000, 'x'); - for (int i = 0; i < 3; ++i) - { - cs.sendRequest(request) << body; - HTTPResponse response; - std::string rbody; - cs.receiveResponse(response) >> rbody; - assert (response.getContentLength() == HTTPMessage::UNKNOWN_CONTENT_LENGTH); - assert (response.getContentType() == "text/plain"); - assert (response.getChunkedTransferEncoding()); - assert (response.getKeepAlive()); - assert (rbody == body); - } - - { - cs.sendRequest(request) << body; - HTTPResponse response; - std::string rbody; - cs.receiveResponse(response) >> rbody; - assert (response.getContentLength() == HTTPMessage::UNKNOWN_CONTENT_LENGTH); - assert (response.getContentType() == "text/plain"); - assert (response.getChunkedTransferEncoding()); - assert (!response.getKeepAlive()); - assert (rbody == body); - } - - { - cs.setKeepAlive(false); - cs.sendRequest(request) << body; - HTTPResponse response; - std::string rbody; - cs.receiveResponse(response) >> rbody; - assert (response.getContentLength() == HTTPMessage::UNKNOWN_CONTENT_LENGTH); - assert (response.getContentType() == "text/plain"); - assert (response.getChunkedTransferEncoding()); - assert (!response.getKeepAlive()); - assert (rbody == body); - } -} - - -void HTTPServerTest::testKeepAliveTimeout() -{ - ServerSocket svs(0); - HTTPServerParams* pParams = new HTTPServerParams; - pParams->setKeepAlive(true); - pParams->setMaxKeepAliveRequests(4); - pParams->setKeepAliveTimeout(Poco::Timespan(3, 0)); - HTTPServer srv(new RequestHandlerFactory, svs, pParams); - srv.start(); - - HTTPClientSession cs("localhost", svs.address().port()); - cs.setKeepAlive(true); - cs.setKeepAliveTimeout(Poco::Timespan(2, 0)); - HTTPRequest request("POST", "/echoBody", HTTPMessage::HTTP_1_1); - request.setContentType("text/plain"); - request.setChunkedTransferEncoding(true); - std::string body(5000, 'x'); - for (int i = 0; i < 3; ++i) - { - cs.sendRequest(request) << body; - HTTPResponse response; - std::string rbody; - cs.receiveResponse(response) >> rbody; - assert (response.getContentLength() == HTTPMessage::UNKNOWN_CONTENT_LENGTH); - assert (response.getContentType() == "text/plain"); - assert (response.getChunkedTransferEncoding()); - assert (response.getKeepAlive()); - assert (rbody == body); - } - - Poco::Thread::sleep(4000); - - { - cs.sendRequest(request) << body; - HTTPResponse response; - std::string rbody; - cs.receiveResponse(response) >> rbody; - assert (response.getContentLength() == HTTPMessage::UNKNOWN_CONTENT_LENGTH); - assert (response.getContentType() == "text/plain"); - assert (response.getChunkedTransferEncoding()); - assert (response.getKeepAlive()); - assert (rbody == body); - } -} - - -void HTTPServerTest::test100Continue() -{ - ServerSocket svs(0); - HTTPServerParams* pParams = new HTTPServerParams; - pParams->setKeepAlive(false); - HTTPServer srv(new RequestHandlerFactory, svs, pParams); - srv.start(); - - HTTPClientSession cs("localhost", svs.address().port()); - std::string body(5000, 'x'); - HTTPRequest request("POST", "/echoBody"); - request.setContentLength((int) body.length()); - request.setContentType("text/plain"); - request.set("Expect", "100-Continue"); - cs.sendRequest(request) << body; - HTTPResponse response; - std::string rbody; - cs.receiveResponse(response) >> rbody; - assert (response.getContentLength() == body.size()); - assert (response.getContentType() == "text/plain"); - assert (rbody == body); -} - - -void HTTPServerTest::testRedirect() -{ - ServerSocket svs(0); - HTTPServerParams* pParams = new HTTPServerParams; - pParams->setKeepAlive(false); - HTTPServer srv(new RequestHandlerFactory, svs, pParams); - srv.start(); - - HTTPClientSession cs("localhost", svs.address().port()); - HTTPRequest request("GET", "/redirect"); - cs.sendRequest(request); - HTTPResponse response; - std::string rbody; - cs.receiveResponse(response) >> rbody; - assert (response.getStatus() == HTTPResponse::HTTP_FOUND); - assert (response.get("Location") == "http://www.appinf.com/"); - assert (rbody.empty()); -} - - -void HTTPServerTest::testAuth() -{ - ServerSocket svs(0); - HTTPServerParams* pParams = new HTTPServerParams; - pParams->setKeepAlive(false); - HTTPServer srv(new RequestHandlerFactory, svs, pParams); - srv.start(); - - HTTPClientSession cs("localhost", svs.address().port()); - HTTPRequest request("GET", "/auth"); - cs.sendRequest(request); - HTTPResponse response; - std::string rbody; - cs.receiveResponse(response) >> rbody; - assert (response.getStatus() == HTTPResponse::HTTP_UNAUTHORIZED); - assert (response.get("WWW-Authenticate") == "Basic realm=\"/auth\""); - assert (rbody.empty()); -} - - -void HTTPServerTest::testNotImpl() -{ - ServerSocket svs(0); - HTTPServerParams* pParams = new HTTPServerParams; - pParams->setKeepAlive(false); - HTTPServer srv(new RequestHandlerFactory, svs, pParams); - srv.start(); - - HTTPClientSession cs("localhost", svs.address().port()); - HTTPRequest request("GET", "/notImpl"); - cs.sendRequest(request); - HTTPResponse response; - std::string rbody; - cs.receiveResponse(response) >> rbody; - assert (response.getStatus() == HTTPResponse::HTTP_NOT_IMPLEMENTED); - assert (rbody.empty()); -} - - -void HTTPServerTest::testBuffer() -{ - ServerSocket svs(0); - HTTPServerParams* pParams = new HTTPServerParams; - pParams->setKeepAlive(false); - HTTPServer srv(new RequestHandlerFactory, svs, pParams); - srv.start(); - - HTTPClientSession cs("localhost", svs.address().port()); - HTTPRequest request("GET", "/buffer"); - cs.sendRequest(request); - HTTPResponse response; - std::string rbody; - cs.receiveResponse(response) >> rbody; - assert (response.getStatus() == HTTPResponse::HTTP_OK); - assert (rbody == "xxxxxxxxxx"); -} - - -void HTTPServerTest::setUp() -{ -} - - -void HTTPServerTest::tearDown() -{ -} - - -CppUnit::Test* HTTPServerTest::suite() -{ - CppUnit::TestSuite* pSuite = new CppUnit::TestSuite("HTTPServerTest"); - - CppUnit_addTest(pSuite, HTTPServerTest, testIdentityRequest); - CppUnit_addTest(pSuite, HTTPServerTest, testPutIdentityRequest); - CppUnit_addTest(pSuite, HTTPServerTest, testChunkedRequest); - CppUnit_addTest(pSuite, HTTPServerTest, testClosedRequest); - CppUnit_addTest(pSuite, HTTPServerTest, testIdentityRequestKeepAlive); - CppUnit_addTest(pSuite, HTTPServerTest, testChunkedRequestKeepAlive); - CppUnit_addTest(pSuite, HTTPServerTest, testClosedRequestKeepAlive); - CppUnit_addTest(pSuite, HTTPServerTest, testMaxKeepAlive); - CppUnit_addTest(pSuite, HTTPServerTest, testKeepAliveTimeout); - CppUnit_addTest(pSuite, HTTPServerTest, test100Continue); - CppUnit_addTest(pSuite, HTTPServerTest, testRedirect); - CppUnit_addTest(pSuite, HTTPServerTest, testAuth); - CppUnit_addTest(pSuite, HTTPServerTest, testNotImpl); - CppUnit_addTest(pSuite, HTTPServerTest, testBuffer); - - return pSuite; -} diff --git a/contrib/libpoco/Net/testsuite/src/HTTPServerTest.h b/contrib/libpoco/Net/testsuite/src/HTTPServerTest.h deleted file mode 100644 index 033d10f8901..00000000000 --- a/contrib/libpoco/Net/testsuite/src/HTTPServerTest.h +++ /dev/null @@ -1,53 +0,0 @@ -// -// HTTPServerTest.h -// -// $Id: //poco/1.4/Net/testsuite/src/HTTPServerTest.h#1 $ -// -// Definition of the HTTPServerTest class. -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef HTTPServerTest_INCLUDED -#define HTTPServerTest_INCLUDED - - -#include "Poco/Net/Net.h" -#include "CppUnit/TestCase.h" - - -class HTTPServerTest: public CppUnit::TestCase -{ -public: - HTTPServerTest(const std::string& name); - ~HTTPServerTest(); - - void testIdentityRequest(); - void testPutIdentityRequest(); - void testChunkedRequest(); - void testClosedRequest(); - void testIdentityRequestKeepAlive(); - void testChunkedRequestKeepAlive(); - void testClosedRequestKeepAlive(); - void testMaxKeepAlive(); - void testKeepAliveTimeout(); - void test100Continue(); - void testRedirect(); - void testAuth(); - void testNotImpl(); - void testBuffer(); - - void setUp(); - void tearDown(); - - static CppUnit::Test* suite(); - -private: -}; - - -#endif // HTTPServerTest_INCLUDED diff --git a/contrib/libpoco/Net/testsuite/src/HTTPServerTestSuite.cpp b/contrib/libpoco/Net/testsuite/src/HTTPServerTestSuite.cpp deleted file mode 100644 index a207129062d..00000000000 --- a/contrib/libpoco/Net/testsuite/src/HTTPServerTestSuite.cpp +++ /dev/null @@ -1,24 +0,0 @@ -// -// HTTPServerTestSuite.cpp -// -// $Id: //poco/1.4/Net/testsuite/src/HTTPServerTestSuite.cpp#1 $ -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "HTTPServerTestSuite.h" -#include "HTTPServerTest.h" - - -CppUnit::Test* HTTPServerTestSuite::suite() -{ - CppUnit::TestSuite* pSuite = new CppUnit::TestSuite("HTTPServerTestSuite"); - - pSuite->addTest(HTTPServerTest::suite()); - - return pSuite; -} diff --git a/contrib/libpoco/Net/testsuite/src/HTTPServerTestSuite.h b/contrib/libpoco/Net/testsuite/src/HTTPServerTestSuite.h deleted file mode 100644 index c5fb36306c7..00000000000 --- a/contrib/libpoco/Net/testsuite/src/HTTPServerTestSuite.h +++ /dev/null @@ -1,29 +0,0 @@ -// -// HTTPServerTestSuite.h -// -// $Id: //poco/1.4/Net/testsuite/src/HTTPServerTestSuite.h#1 $ -// -// Definition of the HTTPServerTestSuite class. -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef HTTPServerTestSuite_INCLUDED -#define HTTPServerTestSuite_INCLUDED - - -#include "CppUnit/TestSuite.h" - - -class HTTPServerTestSuite -{ -public: - static CppUnit::Test* suite(); -}; - - -#endif // HTTPServerTestSuite_INCLUDED diff --git a/contrib/libpoco/Net/testsuite/src/HTTPStreamFactoryTest.cpp b/contrib/libpoco/Net/testsuite/src/HTTPStreamFactoryTest.cpp deleted file mode 100644 index 614e8404f48..00000000000 --- a/contrib/libpoco/Net/testsuite/src/HTTPStreamFactoryTest.cpp +++ /dev/null @@ -1,135 +0,0 @@ -// -// HTTPStreamFactoryTest.cpp -// -// $Id: //poco/1.4/Net/testsuite/src/HTTPStreamFactoryTest.cpp#1 $ -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "HTTPStreamFactoryTest.h" -#include "CppUnit/TestCaller.h" -#include "CppUnit/TestSuite.h" -#include "Poco/Net/HTTPStreamFactory.h" -#include "Poco/Net/NetException.h" -#include "Poco/URI.h" -#include "Poco/URIStreamOpener.h" -#include "Poco/StreamCopier.h" -#include "HTTPTestServer.h" -#include -#include - - -using Poco::Net::HTTPStreamFactory; -using Poco::Net::NetException; -using Poco::Net::HTTPException; -using Poco::URI; -using Poco::StreamCopier; - - -HTTPStreamFactoryTest::HTTPStreamFactoryTest(const std::string& name): CppUnit::TestCase(name) -{ -} - - -HTTPStreamFactoryTest::~HTTPStreamFactoryTest() -{ -} - - -void HTTPStreamFactoryTest::testNoRedirect() -{ - HTTPTestServer server; - HTTPStreamFactory factory; - URI uri("http://localhost/large"); - uri.setPort(server.port()); - std::unique_ptr pStr(factory.open(uri)); - std::ostringstream ostr; - StreamCopier::copyStream(*pStr.get(), ostr); - assert (ostr.str() == HTTPTestServer::LARGE_BODY); -} - - -void HTTPStreamFactoryTest::testEmptyPath() -{ - HTTPTestServer server; - HTTPStreamFactory factory; - URI uri("http://localhost"); - uri.setPort(server.port()); - std::unique_ptr pStr(factory.open(uri)); - std::ostringstream ostr; - StreamCopier::copyStream(*pStr.get(), ostr); - assert (ostr.str() == HTTPTestServer::SMALL_BODY); -} - - -void HTTPStreamFactoryTest::testRedirect() -{ - HTTPTestServer server; - Poco::URIStreamOpener opener; - opener.registerStreamFactory("http", new HTTPStreamFactory); - URI uri("http://localhost/redirect"); - uri.setPort(server.port()); - std::unique_ptr pStr(opener.open(uri)); - std::ostringstream ostr; - StreamCopier::copyStream(*pStr.get(), ostr); - assert (ostr.str() == HTTPTestServer::LARGE_BODY); -} - - -void HTTPStreamFactoryTest::testProxy() -{ - HTTPTestServer server; - HTTPStreamFactory factory("localhost", server.port()); - URI uri("http://www.somehost.com/large"); - std::unique_ptr pStr(factory.open(uri)); - std::ostringstream ostr; - StreamCopier::copyStream(*pStr.get(), ostr); - assert (ostr.str() == HTTPTestServer::LARGE_BODY); -} - - -void HTTPStreamFactoryTest::testError() -{ - HTTPTestServer server; - HTTPStreamFactory factory; - URI uri("http://localhost/notfound"); - uri.setPort(server.port()); - try - { - std::istream* pStr = factory.open(uri); - fail("not found - must throw"); - pStr = pStr + 0; // to silence gcc - } - catch (HTTPException& exc) - { - std::string m = exc.displayText(); - } -} - - -void HTTPStreamFactoryTest::setUp() -{ -} - - -void HTTPStreamFactoryTest::tearDown() -{ -} - - -CppUnit::Test* HTTPStreamFactoryTest::suite() -{ - CppUnit::TestSuite* pSuite = new CppUnit::TestSuite("HTTPStreamFactoryTest"); - - CppUnit_addTest(pSuite, HTTPStreamFactoryTest, testNoRedirect); - CppUnit_addTest(pSuite, HTTPStreamFactoryTest, testEmptyPath); - CppUnit_addTest(pSuite, HTTPStreamFactoryTest, testRedirect); - CppUnit_addTest(pSuite, HTTPStreamFactoryTest, testProxy); - CppUnit_addTest(pSuite, HTTPStreamFactoryTest, testError); - - return pSuite; -} diff --git a/contrib/libpoco/Net/testsuite/src/HTTPStreamFactoryTest.h b/contrib/libpoco/Net/testsuite/src/HTTPStreamFactoryTest.h deleted file mode 100644 index a05b4479caa..00000000000 --- a/contrib/libpoco/Net/testsuite/src/HTTPStreamFactoryTest.h +++ /dev/null @@ -1,44 +0,0 @@ -// -// HTTPStreamFactoryTest.h -// -// $Id: //poco/1.4/Net/testsuite/src/HTTPStreamFactoryTest.h#1 $ -// -// Definition of the HTTPStreamFactoryTest class. -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef HTTPStreamFactoryTest_INCLUDED -#define HTTPStreamFactoryTest_INCLUDED - - -#include "Poco/Net/Net.h" -#include "CppUnit/TestCase.h" - - -class HTTPStreamFactoryTest: public CppUnit::TestCase -{ -public: - HTTPStreamFactoryTest(const std::string& name); - ~HTTPStreamFactoryTest(); - - void testNoRedirect(); - void testEmptyPath(); - void testRedirect(); - void testProxy(); - void testError(); - - void setUp(); - void tearDown(); - - static CppUnit::Test* suite(); - -private: -}; - - -#endif // HTTPStreamFactoryTest_INCLUDED diff --git a/contrib/libpoco/Net/testsuite/src/HTTPTestServer.cpp b/contrib/libpoco/Net/testsuite/src/HTTPTestServer.cpp deleted file mode 100644 index c7f570727d0..00000000000 --- a/contrib/libpoco/Net/testsuite/src/HTTPTestServer.cpp +++ /dev/null @@ -1,224 +0,0 @@ -// -// HTTPTestServer.cpp -// -// $Id: //poco/1.4/Net/testsuite/src/HTTPTestServer.cpp#4 $ -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "HTTPTestServer.h" -#include "Poco/Net/StreamSocket.h" -#include "Poco/Net/SocketAddress.h" -#include "Poco/Timespan.h" -#include "Poco/NumberFormatter.h" -#include - - -using Poco::Net::Socket; -using Poco::Net::StreamSocket; -using Poco::Net::SocketAddress; -using Poco::NumberFormatter; - - -const std::string HTTPTestServer::SMALL_BODY("This is some random text data returned by the server"); -const std::string HTTPTestServer::LARGE_BODY(4000, 'x'); - - -HTTPTestServer::HTTPTestServer(): - _socket(SocketAddress()), - _thread("HTTPTestServer"), - _stop(false) -{ - _thread.start(*this); - _ready.wait(); - _lastRequest.reserve(4000); -} - - -HTTPTestServer::~HTTPTestServer() -{ - _stop = true; - _thread.join(); -} - - -Poco::UInt16 HTTPTestServer::port() const -{ - return _socket.address().port(); -} - - -const std::string& HTTPTestServer::lastRequest() const -{ - return _lastRequest; -} - - -void HTTPTestServer::run() -{ - _ready.set(); - Poco::Timespan span(250000); - while (!_stop) - { - if (_socket.poll(span, Socket::SELECT_READ)) - { - StreamSocket ss = _socket.acceptConnection(); - try - { - _lastRequest.clear(); - char buffer[256]; - int n = ss.receiveBytes(buffer, sizeof(buffer)); - while (n > 0 && !_stop) - { - _lastRequest.append(buffer, n); - if (!requestComplete()) - n = ss.receiveBytes(buffer, sizeof(buffer)); - else - n = 0; - } - std::string response = handleRequest(); - ss.sendBytes(response.data(), (int) response.size()); - Poco::Thread::sleep(1000); - try - { - ss.shutdown(); - Poco::Thread::sleep(1000); - } - catch (Poco::Exception&) - { - } - } - catch (Poco::Exception& exc) - { - std::cerr << "HTTPTestServer: " << exc.displayText() << std::endl; - } - } - } -} - - -bool HTTPTestServer::requestComplete() const -{ - return ((_lastRequest.substr(0, 3) == "GET" || _lastRequest.substr(0, 4) == "HEAD") && - (_lastRequest.find("\r\n\r\n") != std::string::npos)) || - (_lastRequest.find("\r\n0\r\n") != std::string::npos); -} - - -std::string HTTPTestServer::handleRequest() const -{ - std::string response; - response.reserve(16000); - if (_lastRequest.substr(0, 10) == "GET /small" || - _lastRequest.substr(0, 11) == "HEAD /small") - { - std::string body(SMALL_BODY); - response.append("HTTP/1.0 200 OK\r\n"); - response.append("Content-Type: text/plain\r\n"); - response.append("Content-Length: "); - response.append(NumberFormatter::format((int) body.size())); - response.append("\r\n"); - response.append("Connection: Close\r\n"); - response.append("\r\n"); - if (_lastRequest.substr(0, 3) == "GET") - response.append(body); - } - else if (_lastRequest.substr(0, 10) == "GET /large" || - _lastRequest.substr(0, 11) == "HEAD /large" || - _lastRequest.substr(0, 36) == "GET http://www.somehost.com:80/large") - { - std::string body(LARGE_BODY); - response.append("HTTP/1.0 200 OK\r\n"); - response.append("Content-Type: text/plain\r\n"); - response.append("Content-Length: "); - response.append(NumberFormatter::format((int) body.size())); - response.append("\r\n"); - response.append("Connection: Close\r\n"); - response.append("\r\n"); - if (_lastRequest.substr(0, 3) == "GET") - response.append(body); - } - else if (_lastRequest.substr(0, 4) == "POST") - { - std::string::size_type pos = _lastRequest.find("\r\n\r\n"); - pos += 4; - std::string body = _lastRequest.substr(pos); - response.append("HTTP/1.0 200 OK\r\n"); - response.append("Content-Type: text/plain\r\n"); - if (_lastRequest.find("Content-Length") != std::string::npos) - { - response.append("Content-Length: "); - response.append(NumberFormatter::format((int) body.size())); - response.append("\r\n"); - } - else if (_lastRequest.find("chunked") != std::string::npos) - { - response.append("Transfer-Encoding: chunked\r\n"); - } - response.append("Connection: Close\r\n"); - response.append("\r\n"); - response.append(body); - } - else if (_lastRequest.substr(0, 15) == "HEAD /keepAlive") - { - std::string body(SMALL_BODY); - response.append("HTTP/1.1 200 OK\r\n"); - response.append("Connection: keep-alive\r\n"); - response.append("Content-Type: text/plain\r\n"); - response.append("Content-Length: "); - response.append(NumberFormatter::format((int) body.size())); - response.append("\r\n\r\n"); - response.append("HTTP/1.1 200 OK\r\n"); - response.append("Connection: Keep-Alive\r\n"); - response.append("Content-Type: text/plain\r\n"); - response.append("Content-Length: "); - response.append(NumberFormatter::format((int) body.size())); - response.append("\r\n\r\n"); - response.append(body); - body = LARGE_BODY; - response.append("HTTP/1.1 200 OK\r\n"); - response.append("Connection: keep-alive\r\n"); - response.append("Content-Type: text/plain\r\n"); - response.append("Transfer-Encoding: chunked\r\n\r\n"); - response.append(NumberFormatter::formatHex((unsigned) body.length())); - response.append("\r\n"); - response.append(body); - response.append("\r\n0\r\n\r\n"); - response.append("HTTP/1.1 200 OK\r\n"); - response.append("Connection: close\r\n"); - response.append("Content-Type: text/plain\r\n"); - response.append("Content-Length: "); - response.append(NumberFormatter::format((int) body.size())); - response.append("\r\n\r\n"); - } - else if (_lastRequest.substr(0, 13) == "GET /redirect") - { - response.append("HTTP/1.0 302 Found\r\n"); - response.append("Location: /large\r\n"); - response.append("\r\n"); - } - else if (_lastRequest.substr(0, 13) == "GET /notfound") - { - response.append("HTTP/1.0 404 Not Found\r\n"); - response.append("\r\n"); - } - else if (_lastRequest.substr(0, 5) == "GET /" || - _lastRequest.substr(0, 6) == "HEAD /") - { - std::string body(SMALL_BODY); - response.append("HTTP/1.0 200 OK\r\n"); - response.append("Content-Type: text/plain\r\n"); - response.append("Content-Length: "); - response.append(NumberFormatter::format((int) body.size())); - response.append("\r\n"); - response.append("Connection: Close\r\n"); - response.append("\r\n"); - if (_lastRequest.substr(0, 3) == "GET") - response.append(body); - } - return response; -} diff --git a/contrib/libpoco/Net/testsuite/src/HTTPTestServer.h b/contrib/libpoco/Net/testsuite/src/HTTPTestServer.h deleted file mode 100644 index c490f7e844e..00000000000 --- a/contrib/libpoco/Net/testsuite/src/HTTPTestServer.h +++ /dev/null @@ -1,61 +0,0 @@ -// -// HTTPTestServer.h -// -// $Id: //poco/1.4/Net/testsuite/src/HTTPTestServer.h#1 $ -// -// Definition of the HTTPTestServer class. -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef HTTPTestServer_INCLUDED -#define HTTPTestServer_INCLUDED - - -#include "Poco/Net/Net.h" -#include "Poco/Net/ServerSocket.h" -#include "Poco/Thread.h" -#include "Poco/Event.h" - - -class HTTPTestServer: public Poco::Runnable - /// A simple sequential echo server. -{ -public: - HTTPTestServer(); - /// Creates the HTTPTestServer. - - ~HTTPTestServer(); - /// Destroys the HTTPTestServer. - - Poco::UInt16 port() const; - /// Returns the port the echo server is - /// listening on. - - void run(); - /// Does the work. - - const std::string& lastRequest() const; - /// Returns the last request. - - static const std::string SMALL_BODY; - static const std::string LARGE_BODY; - -protected: - bool requestComplete() const; - std::string handleRequest() const; - -private: - Poco::Net::ServerSocket _socket; - Poco::Thread _thread; - Poco::Event _ready; - bool _stop; - std::string _lastRequest; -}; - - -#endif // HTTPTestServer_INCLUDED diff --git a/contrib/libpoco/Net/testsuite/src/HTTPTestSuite.cpp b/contrib/libpoco/Net/testsuite/src/HTTPTestSuite.cpp deleted file mode 100644 index cc5d185e49b..00000000000 --- a/contrib/libpoco/Net/testsuite/src/HTTPTestSuite.cpp +++ /dev/null @@ -1,30 +0,0 @@ -// -// HTTPTestSuite.cpp -// -// $Id: //poco/1.4/Net/testsuite/src/HTTPTestSuite.cpp#1 $ -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "HTTPTestSuite.h" -#include "HTTPRequestTest.h" -#include "HTTPResponseTest.h" -#include "HTTPCookieTest.h" -#include "HTTPCredentialsTest.h" - - -CppUnit::Test* HTTPTestSuite::suite() -{ - CppUnit::TestSuite* pSuite = new CppUnit::TestSuite("HTTPTestSuite"); - - pSuite->addTest(HTTPRequestTest::suite()); - pSuite->addTest(HTTPResponseTest::suite()); - pSuite->addTest(HTTPCookieTest::suite()); - pSuite->addTest(HTTPCredentialsTest::suite()); - - return pSuite; -} diff --git a/contrib/libpoco/Net/testsuite/src/HTTPTestSuite.h b/contrib/libpoco/Net/testsuite/src/HTTPTestSuite.h deleted file mode 100644 index b2151615d62..00000000000 --- a/contrib/libpoco/Net/testsuite/src/HTTPTestSuite.h +++ /dev/null @@ -1,29 +0,0 @@ -// -// HTTPTestSuite.h -// -// $Id: //poco/1.4/Net/testsuite/src/HTTPTestSuite.h#1 $ -// -// Definition of the HTTPTestSuite class. -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef HTTPTestSuite_INCLUDED -#define HTTPTestSuite_INCLUDED - - -#include "CppUnit/TestSuite.h" - - -class HTTPTestSuite -{ -public: - static CppUnit::Test* suite(); -}; - - -#endif // HTTPTestSuite_INCLUDED diff --git a/contrib/libpoco/Net/testsuite/src/ICMPClientTest.cpp b/contrib/libpoco/Net/testsuite/src/ICMPClientTest.cpp deleted file mode 100644 index c20766703fb..00000000000 --- a/contrib/libpoco/Net/testsuite/src/ICMPClientTest.cpp +++ /dev/null @@ -1,132 +0,0 @@ -// -// ICMPClientTest.cpp -// -// $Id: //poco/1.4/Net/testsuite/src/ICMPClientTest.cpp#1 $ -// -// Copyright (c) 2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "ICMPClientTest.h" -#include "CppUnit/TestCaller.h" -#include "CppUnit/TestSuite.h" -#include "Poco/Net/ICMPSocket.h" -#include "Poco/Net/ICMPClient.h" -#include "Poco/Net/ICMPEventArgs.h" -#include "Poco/Net/SocketAddress.h" -#include "Poco/Net/NetException.h" -#include "Poco/AutoPtr.h" -#include "Poco/Delegate.h" -#include -#include - - -using Poco::Net::ICMPSocket; -using Poco::Net::ICMPClient; -using Poco::Net::ICMPEventArgs; -using Poco::Net::SocketAddress; -using Poco::Net::IPAddress; -using Poco::Net::HostNotFoundException; -using Poco::Delegate; -using Poco::AutoPtr; - - -ICMPClientTest::ICMPClientTest(const std::string& name): - CppUnit::TestCase(name), - _icmpClient(IPAddress::IPv4) -{ -} - - -ICMPClientTest::~ICMPClientTest() -{ -} - - -void ICMPClientTest::testPing() -{ - assert(ICMPClient::pingIPv4("localhost") > 0); - - assert(_icmpClient.ping("localhost") > 0); - assert(_icmpClient.ping("www.appinf.com", 4) > 0); - - // warning: may fail depending on the existence of the addresses at test site - // if so, adjust accordingly (i.e. specify non-existent or unreachable IP addresses) - assert(0 == _icmpClient.ping("192.168.243.1")); - assert(0 == _icmpClient.ping("10.11.12.13")); -} - - -void ICMPClientTest::setUp() -{ - _icmpClient.pingBegin += Delegate(this, &ICMPClientTest::onBegin); - _icmpClient.pingReply += Delegate(this, &ICMPClientTest::onReply); - _icmpClient.pingError += Delegate(this, &ICMPClientTest::onError); - _icmpClient.pingEnd += Delegate(this, &ICMPClientTest::onEnd); -} - - -void ICMPClientTest::tearDown() -{ - _icmpClient.pingBegin -= Delegate(this, &ICMPClientTest::onBegin); - _icmpClient.pingReply -= Delegate(this, &ICMPClientTest::onReply); - _icmpClient.pingError -= Delegate(this, &ICMPClientTest::onError); - _icmpClient.pingEnd -= Delegate(this, &ICMPClientTest::onEnd); -} - - -void ICMPClientTest::onBegin(const void* pSender, ICMPEventArgs& args) -{ - std::ostringstream os; - os << std::endl << "Pinging " << args.hostName() << " [" << args.hostAddress() << "] with " - << args.dataSize() << " bytes of data:" - << std::endl << "-------------------------------------------------------" << std::endl; - std::cout << os.str() << std::endl; -} - - -void ICMPClientTest::onReply(const void* pSender, ICMPEventArgs& args) -{ - std::ostringstream os; - os << "Reply from " << args.hostAddress() - << " bytes=" << args.dataSize() - << " time=" << args.replyTime() << "ms" - << " TTL=" << args.ttl(); - std::cout << os.str() << std::endl; -} - - -void ICMPClientTest::onError(const void* pSender, ICMPEventArgs& args) -{ - std::ostringstream os; - os << args.error(); - std::cerr << os.str() << std::endl; -} - - -void ICMPClientTest::onEnd(const void* pSender, ICMPEventArgs& args) -{ - std::ostringstream os; - int received = args.received(); - os << std::endl << "--- Ping statistics for " << args.hostAddress() << " ---" - << std::endl << "Packets: Sent=" << args.sent() << ", Received=" << received - << " Lost=" << args.repetitions() - received << " (" << 100.0 - args.percent() << "% loss)," - << std::endl << "Approximate round trip times in milliseconds: " << std::endl - << "Minimum=" << args.minRTT() << "ms, Maximum=" << args.maxRTT() - << "ms, Average=" << args.avgRTT() << "ms" - << std::endl << "-----------------------------------------------" << std::endl; - std::cout << os.str() << std::endl; -} - - -CppUnit::Test* ICMPClientTest::suite() -{ - CppUnit::TestSuite* pSuite = new CppUnit::TestSuite("ICMPClientTest"); - - CppUnit_addTest(pSuite, ICMPClientTest, testPing); - - return pSuite; -} diff --git a/contrib/libpoco/Net/testsuite/src/ICMPClientTest.h b/contrib/libpoco/Net/testsuite/src/ICMPClientTest.h deleted file mode 100644 index 32c84cb15a1..00000000000 --- a/contrib/libpoco/Net/testsuite/src/ICMPClientTest.h +++ /dev/null @@ -1,48 +0,0 @@ -// -// ICMPClientTest.h -// -// $Id: //poco/1.4/Net/testsuite/src/ICMPClientTest.h#1 $ -// -// Definition of the ICMPClientTest class. -// -// Copyright (c) 2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef ICMPClientTest_INCLUDED -#define ICMPClientTest_INCLUDED - - -#include "Poco/Net/Net.h" -#include "CppUnit/TestCase.h" -#include "Poco/Net/ICMPClient.h" -#include "Poco/Net/ICMPEventArgs.h" - - -class ICMPClientTest: public CppUnit::TestCase -{ -public: - ICMPClientTest(const std::string& name); - ~ICMPClientTest(); - - void testPing(); - - void setUp(); - void tearDown(); - - static CppUnit::Test* suite(); - - void onBegin(const void* pSender, Poco::Net::ICMPEventArgs& args); - void onReply(const void* pSender, Poco::Net::ICMPEventArgs& args); - void onError(const void* pSender, Poco::Net::ICMPEventArgs& args); - void onEnd(const void* pSender, Poco::Net::ICMPEventArgs& args); - -private: - Poco::Net::ICMPClient _icmpClient; -}; - - -#endif // ICMPClientTest_INCLUDED diff --git a/contrib/libpoco/Net/testsuite/src/ICMPClientTestSuite.cpp b/contrib/libpoco/Net/testsuite/src/ICMPClientTestSuite.cpp deleted file mode 100644 index 220e842cefb..00000000000 --- a/contrib/libpoco/Net/testsuite/src/ICMPClientTestSuite.cpp +++ /dev/null @@ -1,24 +0,0 @@ -// -// ICMPClientTestSuite.cpp -// -// $Id: //poco/1.4/Net/testsuite/src/ICMPClientTestSuite.cpp#1 $ -// -// Copyright (c) 2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "ICMPClientTestSuite.h" -#include "ICMPClientTest.h" - - -CppUnit::Test* ICMPClientTestSuite::suite() -{ - CppUnit::TestSuite* pSuite = new CppUnit::TestSuite("ICMPClientTestSuite"); - - pSuite->addTest(ICMPClientTest::suite()); - - return pSuite; -} diff --git a/contrib/libpoco/Net/testsuite/src/ICMPClientTestSuite.h b/contrib/libpoco/Net/testsuite/src/ICMPClientTestSuite.h deleted file mode 100644 index 2d3e8050110..00000000000 --- a/contrib/libpoco/Net/testsuite/src/ICMPClientTestSuite.h +++ /dev/null @@ -1,29 +0,0 @@ -// -// ICMPClientTestSuite.h -// -// $Id: //poco/1.4/Net/testsuite/src/ICMPClientTestSuite.h#1 $ -// -// Definition of the ICMPClientTestSuite class. -// -// Copyright (c) 2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef ICMPClientTestSuite_INCLUDED -#define ICMPClientTestSuite_INCLUDED - - -#include "CppUnit/TestSuite.h" - - -class ICMPClientTestSuite -{ -public: - static CppUnit::Test* suite(); -}; - - -#endif // ICMPClientTestSuite_INCLUDED diff --git a/contrib/libpoco/Net/testsuite/src/ICMPSocketTest.cpp b/contrib/libpoco/Net/testsuite/src/ICMPSocketTest.cpp deleted file mode 100644 index 7611a1cd6ef..00000000000 --- a/contrib/libpoco/Net/testsuite/src/ICMPSocketTest.cpp +++ /dev/null @@ -1,95 +0,0 @@ -// -// ICMPSocketTest.cpp -// -// $Id: //poco/1.4/Net/testsuite/src/ICMPSocketTest.cpp#1 $ -// -// Copyright (c) 2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "ICMPSocketTest.h" -#include "CppUnit/TestCaller.h" -#include "CppUnit/TestSuite.h" -#include "UDPEchoServer.h" -#include "Poco/Net/ICMPSocket.h" -#include "Poco/Net/SocketAddress.h" -#include "Poco/Net/NetException.h" -#include "Poco/Timespan.h" -#include "Poco/Stopwatch.h" - - -using Poco::Net::Socket; -using Poco::Net::ICMPSocket; -using Poco::Net::SocketAddress; -using Poco::Net::IPAddress; -using Poco::Timespan; -using Poco::Stopwatch; -using Poco::TimeoutException; -using Poco::Net::ICMPException; - - -ICMPSocketTest::ICMPSocketTest(const std::string& name): CppUnit::TestCase(name) -{ -} - - -ICMPSocketTest::~ICMPSocketTest() -{ -} - - -void ICMPSocketTest::testAssign() -{ - ICMPSocket s1(IPAddress::IPv4); - ICMPSocket s2(s1); -} - -void ICMPSocketTest::testSendToReceiveFrom() -{ - ICMPSocket ss(IPAddress::IPv4); - - SocketAddress sa("www.appinf.com", 0); - SocketAddress sr(sa); - - try - { - ss.receiveFrom(sa); - fail("must throw"); - } - catch(ICMPException&) - { - } - catch(TimeoutException&) - { - } - - ss.sendTo(sa); - ss.receiveFrom(sa); - - assert(sr.host().toString() == sa.host().toString()); - ss.close(); -} - - -void ICMPSocketTest::setUp() -{ -} - - -void ICMPSocketTest::tearDown() -{ -} - - -CppUnit::Test* ICMPSocketTest::suite() -{ - CppUnit::TestSuite* pSuite = new CppUnit::TestSuite("ICMPSocketTest"); - - CppUnit_addTest(pSuite, ICMPSocketTest, testSendToReceiveFrom); - CppUnit_addTest(pSuite, ICMPSocketTest, testAssign); - - return pSuite; -} diff --git a/contrib/libpoco/Net/testsuite/src/ICMPSocketTest.h b/contrib/libpoco/Net/testsuite/src/ICMPSocketTest.h deleted file mode 100644 index 2508924fb90..00000000000 --- a/contrib/libpoco/Net/testsuite/src/ICMPSocketTest.h +++ /dev/null @@ -1,41 +0,0 @@ -// -// ICMPSocketTest.h -// -// $Id: //poco/1.4/Net/testsuite/src/ICMPSocketTest.h#1 $ -// -// Definition of the ICMPSocketTest class. -// -// Copyright (c) 2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef ICMPSocketTest_INCLUDED -#define ICMPSocketTest_INCLUDED - - -#include "Poco/Net/Net.h" -#include "CppUnit/TestCase.h" - - -class ICMPSocketTest: public CppUnit::TestCase -{ -public: - ICMPSocketTest(const std::string& name); - ~ICMPSocketTest(); - - void testSendToReceiveFrom(); - void testAssign(); - - void setUp(); - void tearDown(); - - static CppUnit::Test* suite(); - -private: -}; - - -#endif // ICMPSocketTest_INCLUDED diff --git a/contrib/libpoco/Net/testsuite/src/IPAddressTest.cpp b/contrib/libpoco/Net/testsuite/src/IPAddressTest.cpp deleted file mode 100644 index 8f122dc6e7f..00000000000 --- a/contrib/libpoco/Net/testsuite/src/IPAddressTest.cpp +++ /dev/null @@ -1,659 +0,0 @@ -// -// IPAddressTest.cpp -// -// $Id: //poco/1.4/Net/testsuite/src/IPAddressTest.cpp#2 $ -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "IPAddressTest.h" -#include "CppUnit/TestCaller.h" -#include "CppUnit/TestSuite.h" -#include "Poco/Net/IPAddress.h" -#include "Poco/Net/NetException.h" - - -using Poco::Net::IPAddress; -using Poco::Net::InvalidAddressException; - - -IPAddressTest::IPAddressTest(const std::string& name): CppUnit::TestCase(name) -{ -} - - -IPAddressTest::~IPAddressTest() -{ -} - - -void IPAddressTest::testStringConv() -{ - IPAddress ia1("127.0.0.1"); - assert (ia1.family() == IPAddress::IPv4); - assert (ia1.toString() == "127.0.0.1"); - - IPAddress ia2("192.168.1.120"); - assert (ia2.family() == IPAddress::IPv4); - assert (ia2.toString() == "192.168.1.120"); - - IPAddress ia3("255.255.255.255"); - assert (ia3.family() == IPAddress::IPv4); - assert (ia3.toString() == "255.255.255.255"); - - IPAddress ia4("0.0.0.0"); - assert (ia4.family() == IPAddress::IPv4); - assert (ia4.toString() == "0.0.0.0"); - - IPAddress ia5(24, IPAddress::IPv4); - assert (ia5.family() == IPAddress::IPv4); - assert (ia5.toString() == "255.255.255.0"); -} - - -void IPAddressTest::testStringConv6() -{ -#ifdef POCO_HAVE_IPv6 - IPAddress ia0("::1"); - assert (ia0.family() == IPAddress::IPv6); - assert (ia0.toString() == "::1"); - - IPAddress ia1("1080:0:0:0:8:600:200a:425c"); - assert (ia1.family() == IPAddress::IPv6); - assert (ia1.toString() == "1080::8:600:200a:425c"); - - IPAddress ia2("1080::8:600:200A:425C"); - assert (ia2.family() == IPAddress::IPv6); - assert (ia2.toString() == "1080::8:600:200a:425c"); - - IPAddress ia3("::192.168.1.120"); - assert (ia3.family() == IPAddress::IPv6); - assert (ia3.toString() == "::192.168.1.120"); - - IPAddress ia4("::ffff:192.168.1.120"); - assert (ia4.family() == IPAddress::IPv6); - assert (ia4.toString() == "::ffff:192.168.1.120"); - - IPAddress ia5(64, IPAddress::IPv6); - assert (ia5.family() == IPAddress::IPv6); - assert (ia5.toString() == "ffff:ffff:ffff:ffff::"); - - IPAddress ia6(32, IPAddress::IPv6); - assert (ia6.family() == IPAddress::IPv6); - assert (ia6.toString() == "ffff:ffff::"); -#endif -} - - -void IPAddressTest::testParse() -{ - IPAddress ip; - assert (IPAddress::tryParse("192.168.1.120", ip)); - - assert (!IPAddress::tryParse("192.168.1.280", ip)); - - ip = IPAddress::parse("192.168.1.120"); - try - { - ip = IPAddress::parse("192.168.1.280"); - fail("bad address - must throw"); - } - catch (InvalidAddressException&) - { - } -} - - -void IPAddressTest::testClassification() -{ - IPAddress ip1("0.0.0.0"); // wildcard - assert (ip1.isWildcard()); - assert (!ip1.isBroadcast()); - assert (!ip1.isLoopback()); - assert (!ip1.isMulticast()); - assert (!ip1.isUnicast()); - assert (!ip1.isLinkLocal()); - assert (!ip1.isSiteLocal()); - assert (!ip1.isWellKnownMC()); - assert (!ip1.isNodeLocalMC()); - assert (!ip1.isLinkLocalMC()); - assert (!ip1.isSiteLocalMC()); - assert (!ip1.isOrgLocalMC()); - assert (!ip1.isGlobalMC()); - - IPAddress ip2("255.255.255.255"); // broadcast - assert (!ip2.isWildcard()); - assert (ip2.isBroadcast()); - assert (!ip2.isLoopback()); - assert (!ip2.isMulticast()); - assert (!ip2.isUnicast()); - assert (!ip2.isLinkLocal()); - assert (!ip2.isSiteLocal()); - assert (!ip2.isWellKnownMC()); - assert (!ip2.isNodeLocalMC()); - assert (!ip2.isLinkLocalMC()); - assert (!ip2.isSiteLocalMC()); - assert (!ip2.isOrgLocalMC()); - assert (!ip2.isGlobalMC()); - - IPAddress ip3("127.0.0.1"); // loopback - assert (!ip3.isWildcard()); - assert (!ip3.isBroadcast()); - assert (ip3.isLoopback()); - assert (!ip3.isMulticast()); - assert (ip3.isUnicast()); - assert (!ip3.isLinkLocal()); - assert (!ip3.isSiteLocal()); - assert (!ip3.isWellKnownMC()); - assert (!ip3.isNodeLocalMC()); - assert (!ip3.isLinkLocalMC()); - assert (!ip3.isSiteLocalMC()); - assert (!ip3.isOrgLocalMC()); - assert (!ip3.isGlobalMC()); - - IPAddress ip4("80.122.195.86"); // unicast - assert (!ip4.isWildcard()); - assert (!ip4.isBroadcast()); - assert (!ip4.isLoopback()); - assert (!ip4.isMulticast()); - assert (ip4.isUnicast()); - assert (!ip4.isLinkLocal()); - assert (!ip4.isSiteLocal()); - assert (!ip4.isWellKnownMC()); - assert (!ip4.isNodeLocalMC()); - assert (!ip4.isLinkLocalMC()); - assert (!ip4.isSiteLocalMC()); - assert (!ip4.isOrgLocalMC()); - assert (!ip4.isGlobalMC()); - - IPAddress ip5("169.254.1.20"); // link local unicast - assert (!ip5.isWildcard()); - assert (!ip5.isBroadcast()); - assert (!ip5.isLoopback()); - assert (!ip5.isMulticast()); - assert (ip5.isUnicast()); - assert (ip5.isLinkLocal()); - assert (!ip5.isSiteLocal()); - assert (!ip5.isWellKnownMC()); - assert (!ip5.isNodeLocalMC()); - assert (!ip5.isLinkLocalMC()); - assert (!ip5.isSiteLocalMC()); - assert (!ip5.isOrgLocalMC()); - assert (!ip5.isGlobalMC()); - - IPAddress ip6("192.168.1.120"); // site local unicast - assert (!ip6.isWildcard()); - assert (!ip6.isBroadcast()); - assert (!ip6.isLoopback()); - assert (!ip6.isMulticast()); - assert (ip6.isUnicast()); - assert (!ip6.isLinkLocal()); - assert (ip6.isSiteLocal()); - assert (!ip6.isWellKnownMC()); - assert (!ip6.isNodeLocalMC()); - assert (!ip6.isLinkLocalMC()); - assert (!ip6.isSiteLocalMC()); - assert (!ip6.isOrgLocalMC()); - assert (!ip6.isGlobalMC()); - - IPAddress ip7("10.0.0.138"); // site local unicast - assert (!ip7.isWildcard()); - assert (!ip7.isBroadcast()); - assert (!ip7.isLoopback()); - assert (!ip7.isMulticast()); - assert (ip7.isUnicast()); - assert (!ip7.isLinkLocal()); - assert (ip7.isSiteLocal()); - assert (!ip7.isWellKnownMC()); - assert (!ip7.isNodeLocalMC()); - assert (!ip7.isLinkLocalMC()); - assert (!ip7.isSiteLocalMC()); - assert (!ip7.isOrgLocalMC()); - assert (!ip7.isGlobalMC()); - - IPAddress ip8("172.18.1.200"); // site local unicast - assert (!ip8.isWildcard()); - assert (!ip8.isBroadcast()); - assert (!ip8.isLoopback()); - assert (!ip8.isMulticast()); - assert (ip8.isUnicast()); - assert (!ip8.isLinkLocal()); - assert (ip8.isSiteLocal()); - assert (!ip8.isWellKnownMC()); - assert (!ip8.isNodeLocalMC()); - assert (!ip8.isLinkLocalMC()); - assert (!ip8.isSiteLocalMC()); - assert (!ip8.isOrgLocalMC()); - assert (!ip8.isGlobalMC()); -} - - -void IPAddressTest::testMCClassification() -{ - IPAddress ip1("224.0.0.100"); // well-known multicast - assert (!ip1.isWildcard()); - assert (!ip1.isBroadcast()); - assert (!ip1.isLoopback()); - assert (ip1.isMulticast()); - assert (!ip1.isUnicast()); - assert (!ip1.isLinkLocal()); - assert (!ip1.isSiteLocal()); - assert (ip1.isWellKnownMC()); - assert (!ip1.isNodeLocalMC()); - assert (ip1.isLinkLocalMC()); // well known are in the range of link local - assert (!ip1.isSiteLocalMC()); - assert (!ip1.isOrgLocalMC()); - assert (!ip1.isGlobalMC()); - - IPAddress ip2("224.1.0.100"); // link local unicast - assert (!ip2.isWildcard()); - assert (!ip2.isBroadcast()); - assert (!ip2.isLoopback()); - assert (ip2.isMulticast()); - assert (!ip2.isUnicast()); - assert (!ip2.isLinkLocal()); - assert (!ip2.isSiteLocal()); - assert (!ip2.isWellKnownMC()); - assert (!ip2.isNodeLocalMC()); - assert (ip2.isLinkLocalMC()); - assert (!ip2.isSiteLocalMC()); - assert (!ip2.isOrgLocalMC()); - assert (ip2.isGlobalMC()); // link local fall in the range of global - - IPAddress ip3("239.255.0.100"); // site local unicast - assert (!ip3.isWildcard()); - assert (!ip3.isBroadcast()); - assert (!ip3.isLoopback()); - assert (ip3.isMulticast()); - assert (!ip3.isUnicast()); - assert (!ip3.isLinkLocal()); - assert (!ip3.isSiteLocal()); - assert (!ip3.isWellKnownMC()); - assert (!ip3.isNodeLocalMC()); - assert (!ip3.isLinkLocalMC()); - assert (ip3.isSiteLocalMC()); - assert (!ip3.isOrgLocalMC()); - assert (!ip3.isGlobalMC()); - - IPAddress ip4("239.192.0.100"); // org local unicast - assert (!ip4.isWildcard()); - assert (!ip4.isBroadcast()); - assert (!ip4.isLoopback()); - assert (ip4.isMulticast()); - assert (!ip4.isUnicast()); - assert (!ip4.isLinkLocal()); - assert (!ip4.isSiteLocal()); - assert (!ip4.isWellKnownMC()); - assert (!ip4.isNodeLocalMC()); - assert (!ip4.isLinkLocalMC()); - assert (!ip4.isSiteLocalMC()); - assert (ip4.isOrgLocalMC()); - assert (!ip4.isGlobalMC()); - - IPAddress ip5("224.2.127.254"); // global unicast - assert (!ip5.isWildcard()); - assert (!ip5.isBroadcast()); - assert (!ip5.isLoopback()); - assert (ip5.isMulticast()); - assert (!ip5.isUnicast()); - assert (!ip5.isLinkLocal()); - assert (!ip5.isSiteLocal()); - assert (!ip5.isWellKnownMC()); - assert (!ip5.isNodeLocalMC()); - assert (ip5.isLinkLocalMC()); // link local fall in the range of global - assert (!ip5.isSiteLocalMC()); - assert (!ip5.isOrgLocalMC()); - assert (ip5.isGlobalMC()); -} - - -void IPAddressTest::testClassification6() -{ -#ifdef POCO_HAVE_IPv6 - IPAddress ip1("::"); // wildcard - assert (ip1.isWildcard()); - assert (!ip1.isBroadcast()); - assert (!ip1.isLoopback()); - assert (!ip1.isMulticast()); - assert (!ip1.isUnicast()); - assert (!ip1.isLinkLocal()); - assert (!ip1.isSiteLocal()); - assert (!ip1.isWellKnownMC()); - assert (!ip1.isNodeLocalMC()); - assert (!ip1.isLinkLocalMC()); - assert (!ip1.isSiteLocalMC()); - assert (!ip1.isOrgLocalMC()); - assert (!ip1.isGlobalMC()); - - IPAddress ip3("::1"); // loopback - assert (!ip3.isWildcard()); - assert (!ip3.isBroadcast()); - assert (ip3.isLoopback()); - assert (!ip3.isMulticast()); - assert (ip3.isUnicast()); - assert (!ip3.isLinkLocal()); - assert (!ip3.isSiteLocal()); - assert (!ip3.isWellKnownMC()); - assert (!ip3.isNodeLocalMC()); - assert (!ip3.isLinkLocalMC()); - assert (!ip3.isSiteLocalMC()); - assert (!ip3.isOrgLocalMC()); - assert (!ip3.isGlobalMC()); - - IPAddress ip4("2001:0db8:85a3:0000:0000:8a2e:0370:7334"); // unicast - assert (!ip4.isWildcard()); - assert (!ip4.isBroadcast()); - assert (!ip4.isLoopback()); - assert (!ip4.isMulticast()); - assert (ip4.isUnicast()); - assert (!ip4.isLinkLocal()); - assert (!ip4.isSiteLocal()); - assert (!ip4.isWellKnownMC()); - assert (!ip4.isNodeLocalMC()); - assert (!ip4.isLinkLocalMC()); - assert (!ip4.isSiteLocalMC()); - assert (!ip4.isOrgLocalMC()); - assert (!ip4.isGlobalMC()); - - IPAddress ip5("fe80::21f:5bff:fec6:6707"); // link local unicast - assert (!ip5.isWildcard()); - assert (!ip5.isBroadcast()); - assert (!ip5.isLoopback()); - assert (!ip5.isMulticast()); - assert (ip5.isUnicast()); - assert (ip5.isLinkLocal()); - assert (!ip5.isSiteLocal()); - assert (!ip5.isWellKnownMC()); - assert (!ip5.isNodeLocalMC()); - assert (!ip5.isLinkLocalMC()); - assert (!ip5.isSiteLocalMC()); - assert (!ip5.isOrgLocalMC()); - assert (!ip5.isGlobalMC()); - - IPAddress ip10("fe80::12"); // link local unicast - assert (!ip10.isWildcard()); - assert (!ip10.isBroadcast()); - assert (!ip10.isLoopback()); - assert (!ip10.isMulticast()); - assert (ip10.isUnicast()); - assert (ip10.isLinkLocal()); - assert (!ip10.isSiteLocal()); - assert (!ip10.isWellKnownMC()); - assert (!ip10.isNodeLocalMC()); - assert (!ip10.isLinkLocalMC()); - assert (!ip10.isSiteLocalMC()); - assert (!ip10.isOrgLocalMC()); - assert (!ip10.isGlobalMC()); - - IPAddress ip6("fec0::21f:5bff:fec6:6707"); // site local unicast (RFC 4291) - assert (!ip6.isWildcard()); - assert (!ip6.isBroadcast()); - assert (!ip6.isLoopback()); - assert (!ip6.isMulticast()); - assert (ip6.isUnicast()); - assert (!ip6.isLinkLocal()); - assert (ip6.isSiteLocal()); - assert (!ip6.isWellKnownMC()); - assert (!ip6.isNodeLocalMC()); - assert (!ip6.isLinkLocalMC()); - assert (!ip6.isSiteLocalMC()); - assert (!ip6.isOrgLocalMC()); - assert (!ip6.isGlobalMC()); - - IPAddress ip7("fc00::21f:5bff:fec6:6707"); // site local unicast (RFC 4193) - assert (!ip7.isWildcard()); - assert (!ip7.isBroadcast()); - assert (!ip7.isLoopback()); - assert (!ip7.isMulticast()); - assert (ip7.isUnicast()); - assert (!ip7.isLinkLocal()); - assert (ip7.isSiteLocal()); - assert (!ip7.isWellKnownMC()); - assert (!ip7.isNodeLocalMC()); - assert (!ip7.isLinkLocalMC()); - assert (!ip7.isSiteLocalMC()); - assert (!ip7.isOrgLocalMC()); - assert (!ip7.isGlobalMC()); -#endif -} - - -void IPAddressTest::testMCClassification6() -{ -#ifdef POCO_HAVE_IPv6 - IPAddress ip1("ff02:0:0:0:0:0:0:c"); // well-known link-local multicast - assert (!ip1.isWildcard()); - assert (!ip1.isBroadcast()); - assert (!ip1.isLoopback()); - assert (ip1.isMulticast()); - assert (!ip1.isUnicast()); - assert (!ip1.isLinkLocal()); - assert (!ip1.isSiteLocal()); - assert (ip1.isWellKnownMC()); - assert (!ip1.isNodeLocalMC()); - assert (ip1.isLinkLocalMC()); - assert (!ip1.isSiteLocalMC()); - assert (!ip1.isOrgLocalMC()); - assert (!ip1.isGlobalMC()); - - IPAddress ip2("ff01:0:0:0:0:0:0:FB"); // node-local unicast - assert (!ip2.isWildcard()); - assert (!ip2.isBroadcast()); - assert (!ip2.isLoopback()); - assert (ip2.isMulticast()); - assert (!ip2.isUnicast()); - assert (!ip2.isLinkLocal()); - assert (!ip2.isSiteLocal()); - assert (ip2.isWellKnownMC()); - assert (ip2.isNodeLocalMC()); - assert (!ip2.isLinkLocalMC()); - assert (!ip2.isSiteLocalMC()); - assert (!ip2.isOrgLocalMC()); - assert (!ip2.isGlobalMC()); - - IPAddress ip3("ff05:0:0:0:0:0:0:FB"); // site local unicast - assert (!ip3.isWildcard()); - assert (!ip3.isBroadcast()); - assert (!ip3.isLoopback()); - assert (ip3.isMulticast()); - assert (!ip3.isUnicast()); - assert (!ip3.isLinkLocal()); - assert (!ip3.isSiteLocal()); - assert (ip3.isWellKnownMC()); - assert (!ip3.isNodeLocalMC()); - assert (!ip3.isLinkLocalMC()); - assert (ip3.isSiteLocalMC()); - assert (!ip3.isOrgLocalMC()); - assert (!ip3.isGlobalMC()); - - IPAddress ip4("ff18:0:0:0:0:0:0:FB"); // org local unicast - assert (!ip4.isWildcard()); - assert (!ip4.isBroadcast()); - assert (!ip4.isLoopback()); - assert (ip4.isMulticast()); - assert (!ip4.isUnicast()); - assert (!ip4.isLinkLocal()); - assert (!ip4.isSiteLocal()); - assert (!ip4.isWellKnownMC()); - assert (!ip4.isNodeLocalMC()); - assert (!ip4.isLinkLocalMC()); - assert (!ip4.isSiteLocalMC()); - assert (ip4.isOrgLocalMC()); - assert (!ip4.isGlobalMC()); - - IPAddress ip5("ff1f:0:0:0:0:0:0:FB"); // global unicast - assert (!ip5.isWildcard()); - assert (!ip5.isBroadcast()); - assert (!ip5.isLoopback()); - assert (ip5.isMulticast()); - assert (!ip5.isUnicast()); - assert (!ip5.isLinkLocal()); - assert (!ip5.isSiteLocal()); - assert (!ip5.isWellKnownMC()); - assert (!ip5.isNodeLocalMC()); - assert (!ip5.isLinkLocalMC()); - assert (!ip5.isSiteLocalMC()); - assert (!ip5.isOrgLocalMC()); - assert (ip5.isGlobalMC()); -#endif -} - - -void IPAddressTest::testRelationals() -{ - IPAddress ip1("192.168.1.120"); - IPAddress ip2(ip1); - IPAddress ip3; - IPAddress ip4("10.0.0.138"); - - assert (ip1 != ip4); - assert (ip1 == ip2); - assert (!(ip1 != ip2)); - assert (!(ip1 == ip4)); - assert (ip1 > ip4); - assert (ip1 >= ip4); - assert (ip4 < ip1); - assert (ip4 <= ip1); - assert (!(ip1 < ip4)); - assert (!(ip1 <= ip4)); - assert (!(ip4 > ip1)); - assert (!(ip4 >= ip1)); - - ip3 = ip1; - assert (ip1 == ip3); - ip3 = ip4; - assert (ip1 != ip3); - assert (ip3 == ip4); -} - - -void IPAddressTest::testWildcard() -{ - IPAddress wildcard = IPAddress::wildcard(); - assert (wildcard.isWildcard()); - assert (wildcard.toString() == "0.0.0.0"); -} - - -void IPAddressTest::testBroadcast() -{ - IPAddress broadcast = IPAddress::broadcast(); - assert (broadcast.isBroadcast()); - assert (broadcast.toString() == "255.255.255.255"); -} - - -void IPAddressTest::testPrefixCons() -{ - IPAddress ia1(15, IPAddress::IPv4); - assert(ia1.toString() == "255.254.0.0"); - -#ifdef POCO_HAVE_IPv6 - IPAddress ia2(62, IPAddress::IPv6); - assert(ia2.toString() == "ffff:ffff:ffff:fffc::"); -#endif -} - - -void IPAddressTest::testPrefixLen() -{ - IPAddress ia1(15, IPAddress::IPv4); - assert(ia1.prefixLength() == 15); - - IPAddress ia2(16, IPAddress::IPv4); - assert(ia2.prefixLength() == 16); - - IPAddress ia3(23, IPAddress::IPv4); - assert(ia3.prefixLength() == 23); - - IPAddress ia4(24, IPAddress::IPv4); - assert(ia4.prefixLength() == 24); - - IPAddress ia5(25, IPAddress::IPv4); - assert(ia5.prefixLength() == 25); - -#ifdef POCO_HAVE_IPv6 - IPAddress ia6(62, IPAddress::IPv6); - assert(ia6.prefixLength() == 62); - - IPAddress ia7(63, IPAddress::IPv6); - assert(ia7.prefixLength() == 63); - - IPAddress ia8(64, IPAddress::IPv6); - assert(ia8.prefixLength() == 64); - - IPAddress ia9(65, IPAddress::IPv6); - assert(ia9.prefixLength() == 65); -#endif -} - - -void IPAddressTest::testOperators() -{ - IPAddress ip("10.0.0.51"); - IPAddress mask(24, IPAddress::IPv4); - - IPAddress net = ip & mask; - assert(net.toString() == "10.0.0.0"); - - IPAddress host("0.0.0.51"); - assert((net | host) == ip); - - assert((~mask).toString() == "0.0.0.255"); -} - - -void IPAddressTest::testRelationals6() -{ -#ifdef POCO_HAVE_IPv6 -#endif -} - - -void IPAddressTest::testByteOrderMacros() -{ - Poco::UInt16 a16 = 0xDEAD; - assert (poco_ntoh_16(a16) == ntohs(a16)); - assert (poco_hton_16(a16) == htons(a16)); - Poco::UInt32 a32 = 0xDEADBEEF; - assert (poco_ntoh_32(a32) == ntohl(a32)); - assert (poco_hton_32(a32) == htonl(a32)); -} - - -void IPAddressTest::setUp() -{ -} - - -void IPAddressTest::tearDown() -{ -} - - -CppUnit::Test* IPAddressTest::suite() -{ - CppUnit::TestSuite* pSuite = new CppUnit::TestSuite("IPAddressTest"); - - CppUnit_addTest(pSuite, IPAddressTest, testStringConv); - CppUnit_addTest(pSuite, IPAddressTest, testStringConv6); - CppUnit_addTest(pSuite, IPAddressTest, testParse); - CppUnit_addTest(pSuite, IPAddressTest, testClassification); - CppUnit_addTest(pSuite, IPAddressTest, testMCClassification); - CppUnit_addTest(pSuite, IPAddressTest, testClassification6); - CppUnit_addTest(pSuite, IPAddressTest, testMCClassification6); - CppUnit_addTest(pSuite, IPAddressTest, testRelationals); - CppUnit_addTest(pSuite, IPAddressTest, testRelationals6); - CppUnit_addTest(pSuite, IPAddressTest, testWildcard); - CppUnit_addTest(pSuite, IPAddressTest, testBroadcast); - CppUnit_addTest(pSuite, IPAddressTest, testPrefixCons); - CppUnit_addTest(pSuite, IPAddressTest, testPrefixLen); - CppUnit_addTest(pSuite, IPAddressTest, testOperators); - CppUnit_addTest(pSuite, IPAddressTest, testByteOrderMacros); - - return pSuite; -} diff --git a/contrib/libpoco/Net/testsuite/src/IPAddressTest.h b/contrib/libpoco/Net/testsuite/src/IPAddressTest.h deleted file mode 100644 index 27837c35464..00000000000 --- a/contrib/libpoco/Net/testsuite/src/IPAddressTest.h +++ /dev/null @@ -1,54 +0,0 @@ -// -// IPAddressTest.h -// -// $Id: //poco/1.4/Net/testsuite/src/IPAddressTest.h#1 $ -// -// Definition of the IPAddressTest class. -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef IPAddressTest_INCLUDED -#define IPAddressTest_INCLUDED - - -#include "Poco/Net/Net.h" -#include "CppUnit/TestCase.h" - - -class IPAddressTest: public CppUnit::TestCase -{ -public: - IPAddressTest(const std::string& name); - ~IPAddressTest(); - - void testStringConv(); - void testStringConv6(); - void testParse(); - void testClassification(); - void testMCClassification(); - void testClassification6(); - void testMCClassification6(); - void testRelationals(); - void testRelationals6(); - void testWildcard(); - void testBroadcast(); - void testPrefixCons(); - void testPrefixLen(); - void testOperators(); - void testByteOrderMacros(); - - void setUp(); - void tearDown(); - - static CppUnit::Test* suite(); - -private: -}; - - -#endif // IPAddressTest_INCLUDED diff --git a/contrib/libpoco/Net/testsuite/src/MailMessageTest.cpp b/contrib/libpoco/Net/testsuite/src/MailMessageTest.cpp deleted file mode 100644 index 4fb326cb8df..00000000000 --- a/contrib/libpoco/Net/testsuite/src/MailMessageTest.cpp +++ /dev/null @@ -1,631 +0,0 @@ -// -// MailMessageTest.cpp -// -// $Id: //poco/1.4/Net/testsuite/src/MailMessageTest.cpp#2 $ -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "MailMessageTest.h" -#include "CppUnit/TestCaller.h" -#include "CppUnit/TestSuite.h" -#include "Poco/Net/MailMessage.h" -#include "Poco/Net/MailRecipient.h" -#include "Poco/Net/PartHandler.h" -#include "Poco/Net/StringPartSource.h" -#include "Poco/Net/PartStore.h" -#include "Poco/Net/MediaType.h" -#include "Poco/Timestamp.h" -#include "Poco/FileStream.h" -#include "Poco/String.h" -#include -#include - - -using Poco::Net::MailMessage; -using Poco::Net::MailRecipient; -using Poco::Net::MessageHeader; -using Poco::Net::PartHandler; -using Poco::Net::MediaType; -using Poco::Net::StringPartSource; -using Poco::Net::FilePartStoreFactory; -using Poco::Net::FilePartStore; -using Poco::Timestamp; -using Poco::FileInputStream; -using Poco::replaceInPlace; -using Poco::icompare; - - -namespace -{ - class StringPartHandler: public PartHandler - { - public: - StringPartHandler() - { - } - - void handlePart(const MessageHeader& header, std::istream& stream) - { - _disp.push_back(header["Content-Disposition"]); - _type.push_back(header["Content-Type"]); - std::string data; - int ch = stream.get(); - while (ch > 0) - { - data += (char) ch; - ch = stream.get(); - } - _data.push_back(data); - } - - const std::vector& data() const - { - return _data; - } - - const std::vector& disp() const - { - return _disp; - } - - const std::vector& type() const - { - return _type; - } - - private: - std::vector _data; - std::vector _disp; - std::vector _type; - }; -} - - -MailMessageTest::MailMessageTest(const std::string& name): CppUnit::TestCase(name) -{ -} - - -MailMessageTest::~MailMessageTest() -{ -} - - -void MailMessageTest::testWriteQP() -{ - MailMessage message; - MailRecipient r1(MailRecipient::PRIMARY_RECIPIENT, "john.doe@no.where", "John Doe"); - MailRecipient r2(MailRecipient::CC_RECIPIENT, "jane.doe@no.where", "Jane Doe"); - MailRecipient r3(MailRecipient::BCC_RECIPIENT, "walter.foo@no.where", "Frank Foo"); - MailRecipient r4(MailRecipient::BCC_RECIPIENT, "bernie.bar@no.where", "Bernie Bar"); - message.addRecipient(r1); - message.addRecipient(r2); - message.addRecipient(r3); - message.addRecipient(r4); - message.setSubject("Test Message"); - message.setSender("poco@appinf.com"); - message.setContent( - "Hello, world!\r\n" - "This is a test for the MailMessage class.\r\n" - "To test the quoted-printable encoding, we'll put an extra long line here. This should be enough.\r\n" - "And here is some more =fe.\r\n" - ); - Timestamp ts(0); - message.setDate(ts); - - assert (!message.isMultipart()); - - std::ostringstream str; - message.write(str); - std::string s = str.str(); - - assert (s == - "Date: Thu, 1 Jan 1970 00:00:00 GMT\r\n" - "Content-Type: text/plain\r\n" - "Subject: Test Message\r\n" - "From: poco@appinf.com\r\n" - "Content-Transfer-Encoding: quoted-printable\r\n" - "To: John Doe \r\n" - "CC: Jane Doe \r\n" - "\r\n" - "Hello, world!\r\n" - "This is a test for the MailMessage class.\r\n" - "To test the quoted-printable encoding, we'll put an extra long line here. T=\r\n" - "his should be enough.\r\n" - "And here is some more =3Dfe.\r\n" - ); -} - - -void MailMessageTest::testWrite8Bit() -{ - MailMessage message; - MailRecipient r1(MailRecipient::PRIMARY_RECIPIENT, "john.doe@no.where", "John Doe"); - message.addRecipient(r1); - message.setSubject("Test Message"); - message.setSender("poco@appinf.com"); - message.setContent( - "Hello, world!\r\n" - "This is a test for the MailMessage class.\r\n", - MailMessage::ENCODING_8BIT - ); - Timestamp ts(0); - message.setDate(ts); - - std::ostringstream str; - message.write(str); - std::string s = str.str(); - assert (s == - "Date: Thu, 1 Jan 1970 00:00:00 GMT\r\n" - "Content-Type: text/plain\r\n" - "Subject: Test Message\r\n" - "From: poco@appinf.com\r\n" - "Content-Transfer-Encoding: 8bit\r\n" - "To: John Doe \r\n" - "\r\n" - "Hello, world!\r\n" - "This is a test for the MailMessage class.\r\n" - ); -} - - -void MailMessageTest::testWriteBase64() -{ - MailMessage message; - MailRecipient r1(MailRecipient::PRIMARY_RECIPIENT, "john.doe@no.where", "John Doe"); - message.addRecipient(r1); - message.setSubject("Test Message"); - message.setSender("poco@appinf.com"); - message.setContent( - "Hello, world!\r\n" - "This is a test for the MailMessage class.\r\n", - MailMessage::ENCODING_BASE64 - ); - Timestamp ts(0); - message.setDate(ts); - - std::ostringstream str; - message.write(str); - std::string s = str.str(); - assert (s == - "Date: Thu, 1 Jan 1970 00:00:00 GMT\r\n" - "Content-Type: text/plain\r\n" - "Subject: Test Message\r\n" - "From: poco@appinf.com\r\n" - "Content-Transfer-Encoding: base64\r\n" - "To: John Doe \r\n" - "\r\n" - "SGVsbG8sIHdvcmxkIQ0KVGhpcyBpcyBhIHRlc3QgZm9yIHRoZSBNYWlsTWVzc2FnZSBjbGFz\r\n" - "cy4NCg==" - ); -} - - -void MailMessageTest::testWriteManyRecipients() -{ - MailMessage message; - MailRecipient r1(MailRecipient::PRIMARY_RECIPIENT, "john.doe@no.where", "John Doe"); - MailRecipient r2(MailRecipient::PRIMARY_RECIPIENT, "jane.doe@no.where", "Jane Doe"); - MailRecipient r3(MailRecipient::PRIMARY_RECIPIENT, "walter.foo@no.where", "Frank Foo"); - MailRecipient r4(MailRecipient::PRIMARY_RECIPIENT, "bernie.bar@no.where", "Bernie Bar"); - MailRecipient r5(MailRecipient::PRIMARY_RECIPIENT, "joe.spammer@no.where", "Joe Spammer"); - message.addRecipient(r1); - message.addRecipient(r2); - message.addRecipient(r3); - message.addRecipient(r4); - message.addRecipient(r5); - message.setSubject("Test Message"); - message.setSender("poco@appinf.com"); - message.setContent( - "Hello, world!\r\n" - "This is a test for the MailMessage class.\r\n", - MailMessage::ENCODING_8BIT - ); - Timestamp ts(0); - message.setDate(ts); - - std::ostringstream str; - message.write(str); - std::string s = str.str(); - assert (s == - "Date: Thu, 1 Jan 1970 00:00:00 GMT\r\n" - "Content-Type: text/plain\r\n" - "Subject: Test Message\r\n" - "From: poco@appinf.com\r\n" - "Content-Transfer-Encoding: 8bit\r\n" - "To: John Doe , Jane Doe , \r\n" - "\tFrank Foo , Bernie Bar , \r\n" - "\tJoe Spammer \r\n" - "\r\n" - "Hello, world!\r\n" - "This is a test for the MailMessage class.\r\n" - ); -} - - -void MailMessageTest::testWriteMultiPart() -{ - MailMessage message; - MailRecipient r1(MailRecipient::PRIMARY_RECIPIENT, "john.doe@no.where", "John Doe"); - message.addRecipient(r1); - message.setSubject("Test Message"); - message.setSender("poco@appinf.com"); - Timestamp ts(0); - message.setDate(ts); - message.addContent(new StringPartSource("Hello World!\r\n", "text/plain"), MailMessage::ENCODING_8BIT); - StringPartSource* pSPS = new StringPartSource("This is some binary data. Really.", "application/octet-stream", "sample.dat"); - pSPS->headers().set("Content-ID", "abcd1234"); - message.addAttachment("sample", pSPS); - - assert (message.isMultipart()); - - std::ostringstream str; - message.write(str); - std::string s = str.str(); - std::string rawMsg( - "Date: Thu, 1 Jan 1970 00:00:00 GMT\r\n" - "Content-Type: multipart/mixed; boundary=$\r\n" - "Subject: Test Message\r\n" - "From: poco@appinf.com\r\n" - "To: John Doe \r\n" - "Mime-Version: 1.0\r\n" - "\r\n" - "--$\r\n" - "Content-Type: text/plain\r\n" - "Content-Transfer-Encoding: 8bit\r\n" - "Content-Disposition: inline\r\n" - "\r\n" - "Hello World!\r\n" - "\r\n" - "--$\r\n" - "Content-ID: abcd1234\r\n" - "Content-Type: application/octet-stream; name=sample\r\n" - "Content-Transfer-Encoding: base64\r\n" - "Content-Disposition: attachment; filename=sample.dat\r\n" - "\r\n" - "VGhpcyBpcyBzb21lIGJpbmFyeSBkYXRhLiBSZWFsbHku\r\n" - "--$--\r\n" - ); - std::string::size_type p1 = s.find('=') + 1; - std::string::size_type p2 = s.find('\r', p1); - std::string boundary(s, p1, p2 - p1); - std::string msg; - for (std::string::const_iterator it = rawMsg.begin(); it != rawMsg.end(); ++it) - { - if (*it == '$') - msg += boundary; - else - msg += *it; - } - - assert (s == msg); -} - - -void MailMessageTest::testReadQP() -{ - std::istringstream istr( - "Content-Transfer-Encoding: quoted-printable\r\n" - "Content-Type: text/plain\r\n" - "Date: Thu, 1 Jan 1970 00:00:00 GMT\r\n" - "From: poco@appinf.com\r\n" - "Subject: Test Message\r\n" - "To: John Doe \r\n" - "\r\n" - "Hello, world!\r\n" - "This is a test for the MailMessage class.\r\n" - "To test the quoted-printable encoding, we'll put an extra long line here. T=\r\n" - "his should be enough.\r\n" - "And here is some more =3Dfe.\r\n" - ); - - MailMessage message; - message.read(istr); - - assert (message.getSender() == "poco@appinf.com"); - assert (message.getContentType() == "text/plain"); - assert (message.getContent() == - "Hello, world!\r\n" - "This is a test for the MailMessage class.\r\n" - "To test the quoted-printable encoding, we'll put an extra long line here. This should be enough.\r\n" - "And here is some more =fe.\r\n" - ); -} - - -void MailMessageTest::testReadDefaultTransferEncoding() -{ - std::istringstream istr( - "Content-Type: text/plain\r\n" - "Date: Thu, 1 Jan 1970 00:00:00 GMT\r\n" - "From: poco@appinf.com\r\n" - "Subject: Test Message\r\n" - "To: John Doe \r\n" - "\r\n" - "Hello, world!\r\n" - "This is a test for the MailMessage class.\r\n" - ); - - MailMessage message; - message.read(istr); - - assert (message.getSender() == "poco@appinf.com"); - assert (message.getContentType() == "text/plain"); - assert (message.getContent() == - "Hello, world!\r\n" - "This is a test for the MailMessage class.\r\n" - ); -} - - -void MailMessageTest::testRead8Bit() -{ - std::istringstream istr( - "Content-Transfer-Encoding: 8bit\r\n" - "Content-Type: text/plain\r\n" - "Date: Thu, 1 Jan 1970 00:00:00 GMT\r\n" - "From: poco@appinf.com\r\n" - "Subject: Test Message\r\n" - "To: John Doe \r\n" - "\r\n" - "Hello, world!\r\n" - "This is a test for the MailMessage class.\r\n" - ); - - MailMessage message; - message.read(istr); - - assert (message.getSender() == "poco@appinf.com"); - assert (message.getContentType() == "text/plain"); - assert (message.getContent() == - "Hello, world!\r\n" - "This is a test for the MailMessage class.\r\n" - ); -} - - -void MailMessageTest::testReadMultiPart() -{ - std::istringstream istr( - "Content-Type: multipart/mixed; boundary=MIME_boundary_01234567\r\n" - "Date: Thu, 1 Jan 1970 00:00:00 GMT\r\n" - "From: poco@appinf.com\r\n" - "Mime-Version: 1.0\r\n" - "Subject: Test Message\r\n" - "To: John Doe \r\n" - "\r\n" - "\r\n" - "--MIME_boundary_01234567\r\n" - "Content-Disposition: inline\r\n" - "Content-Transfer-Encoding: 8bit\r\n" - "Content-Type: text/plain\r\n" - "\r\n" - "Hello World!\r\n" - "\r\n" - "--MIME_boundary_01234567\r\n" - "Content-Disposition: attachment; filename=sample.dat\r\n" - "Content-Transfer-Encoding: base64\r\n" - "Content-Type: application/octet-stream; name=sample\r\n" - "\r\n" - "VGhpcyBpcyBzb21lIGJpbmFyeSBkYXRhLiBSZWFsbHku\r\n" - "--MIME_boundary_01234567--\r\n" - ); - - StringPartHandler handler; - MailMessage message; - message.read(istr, handler); - - assert (handler.data().size() == 2); - assert (handler.data()[0] == "Hello World!\r\n"); - assert (handler.type()[0] == "text/plain"); - assert (handler.disp()[0] == "inline"); - - assert (handler.data()[1] == "This is some binary data. Really."); - assert (handler.type()[1] == "application/octet-stream; name=sample"); - assert (handler.disp()[1] == "attachment; filename=sample.dat"); -} - - -void MailMessageTest::testReadMultiPartDefaultTransferEncoding() -{ - std::istringstream istr( - "Content-Type: multipart/mixed; boundary=MIME_boundary_01234567\r\n" - "Date: Thu, 1 Jan 1970 00:00:00 GMT\r\n" - "From: poco@appinf.com\r\n" - "Mime-Version: 1.0\r\n" - "Subject: Test Message\r\n" - "To: John Doe \r\n" - "\r\n" - "\r\n" - "--MIME_boundary_01234567\r\n" - "Content-Disposition: inline\r\n" - "Content-Type: text/plain\r\n" - "\r\n" - "Hello World!\r\n" - "\r\n" - "--MIME_boundary_01234567\r\n" - "Content-Disposition: attachment; filename=sample.dat\r\n" - "Content-Transfer-Encoding: base64\r\n" - "Content-Type: application/octet-stream; name=sample\r\n" - "\r\n" - "VGhpcyBpcyBzb21lIGJpbmFyeSBkYXRhLiBSZWFsbHku\r\n" - "--MIME_boundary_01234567--\r\n" - ); - - StringPartHandler handler; - MailMessage message; - message.read(istr, handler); - - assert (handler.data().size() == 2); - assert (handler.data()[0] == "Hello World!\r\n"); - assert (handler.type()[0] == "text/plain"); - assert (handler.disp()[0] == "inline"); - - assert (handler.data()[1] == "This is some binary data. Really."); - assert (handler.type()[1] == "application/octet-stream; name=sample"); - assert (handler.disp()[1] == "attachment; filename=sample.dat"); -} - - -void MailMessageTest::testReadWriteMultiPart() -{ - std::string msgin( - "Content-Type: multipart/mixed; boundary=MIME_boundary_31E8A8D61DF53389\r\n" - "Date: Thu, 1 Jan 1970 00:00:00 GMT\r\n" - "From: poco@appinf.com\r\n" - "Mime-Version: 1.0\r\n" - "Subject: Test Message\r\n" - "To: John Doe \r\n" - "\r\n" - "--MIME_boundary_31E8A8D61DF53389\r\n" - "Content-Disposition: inline\r\n" - "Content-Transfer-Encoding: 8bit\r\n" - "Content-Type: text/plain\r\n" - "\r\n" - "Hello World!\r\n" - "\r\n" - "--MIME_boundary_31E8A8D61DF53389\r\n" - "Content-Disposition: attachment; filename=sample.dat\r\n" - "Content-ID: abcd1234\r\n" - "Content-Transfer-Encoding: base64\r\n" - "Content-Type: application/octet-stream; name=sample\r\n" - "\r\n" - "VGhpcyBpcyBzb21lIGJpbmFyeSBkYXRhLiBSZWFsbHku\r\n" - "--MIME_boundary_31E8A8D61DF53389--\r\n" - ); - - std::istringstream istr(msgin); - std::ostringstream ostr; - MailMessage message; - - message.read(istr); - message.write(ostr); - - std::string msgout(ostr.str()); - assert (msgout == msgin); -} - - -void MailMessageTest::testReadWriteMultiPartStore() -{ - std::string msgin( - "Content-Type: multipart/mixed; boundary=MIME_boundary_31E8A8D61DF53389\r\n" - "Date: Thu, 1 Jan 1970 00:00:00 GMT\r\n" - "From: poco@appinf.com\r\n" - "Mime-Version: 1.0\r\n" - "Subject: Test Message\r\n" - "To: John Doe \r\n" - "\r\n" - "--MIME_boundary_31E8A8D61DF53389\r\n" - "Content-Disposition: inline\r\n" - "Content-Transfer-Encoding: 8bit\r\n" - "Content-Type: text/plain\r\n" - "\r\n" - "Hello World!\r\n" - "\r\n" - "--MIME_boundary_31E8A8D61DF53389\r\n" - "Content-Disposition: attachment; filename=sample.dat\r\n" - "Content-ID: abcd1234\r\n" - "Content-Transfer-Encoding: base64\r\n" - "Content-Type: application/octet-stream; name=sample\r\n" - "\r\n" - "VGhpcyBpcyBzb21lIGJpbmFyeSBkYXRhLiBSZWFsbHku\r\n" - "--MIME_boundary_31E8A8D61DF53389--\r\n" - ); - - std::istringstream istr(msgin); - std::ostringstream ostr; - FilePartStoreFactory pfsf; - MailMessage message(&pfsf); - - message.read(istr); - - MailMessage::PartVec::const_iterator it = message.parts().begin(); - MailMessage::PartVec::const_iterator end = message.parts().end(); - for (; it != end; ++it) - { - FilePartStore* fps = dynamic_cast(it->pSource); - if (fps && fps->filename().size()) - { - std::string filename = fps->filename(); - assert (filename == "sample.dat"); - std::string path = fps->path(); - // for security reasons, the filesystem temporary - // filename is not the same as attachment name - std::size_t sz = (path.size() > filename.size()) ? filename.size() : path.size(); - assert (0 != icompare(path, path.size() - sz, sz, path)); - - Poco::FileInputStream fis(path); - assert (fis.good()); - std::string read; - std::string line; - while (std::getline(fis, line)) read += line; - - assert (!read.empty()); - assert (read == "This is some binary data. Really."); - } - } - - message.write(ostr); - std::string msgout(ostr.str()); - assert (msgout == msgin); -} - - -void MailMessageTest::testEncodeWord() -{ - std::string plain("this is pure ASCII"); - std::string encoded = MailMessage::encodeWord(plain, "ISO-8859-1"); - assert (encoded == plain); - - plain = "This text contains German Umlauts: \304\326"; - encoded = MailMessage::encodeWord(plain, "ISO-8859-1"); - assert (encoded == "=?ISO-8859-1?q?This_text_contains_German_Umlauts=3A_=C4=D6?="); - - plain = "This text contains German Umlauts: \304\326. " - "It is also a very long text. Longer than 75 " - "characters. Long enough to become three lines " - "after being word-encoded."; - encoded = MailMessage::encodeWord(plain, "ISO-8859-1"); - assert (encoded == "=?ISO-8859-1?q?This_text_contains_German_Umlauts=3A_=C4=D6=2E_It_?=\r\n" - " =?ISO-8859-1?q?is_also_a_very_long_text=2E_Longer_than_75_characters=2E_?=\r\n" - " =?ISO-8859-1?q?Long_enough_to_become_three_lines_after_being_word-encode?=\r\n" - " =?ISO-8859-1?q?d=2E?="); -} - - -void MailMessageTest::setUp() -{ -} - - -void MailMessageTest::tearDown() -{ -} - - -CppUnit::Test* MailMessageTest::suite() -{ - CppUnit::TestSuite* pSuite = new CppUnit::TestSuite("MailMessageTest"); - - CppUnit_addTest(pSuite, MailMessageTest, testWriteQP); - CppUnit_addTest(pSuite, MailMessageTest, testWrite8Bit); - CppUnit_addTest(pSuite, MailMessageTest, testWriteBase64); - CppUnit_addTest(pSuite, MailMessageTest, testWriteManyRecipients); - CppUnit_addTest(pSuite, MailMessageTest, testWriteMultiPart); - CppUnit_addTest(pSuite, MailMessageTest, testReadQP); - CppUnit_addTest(pSuite, MailMessageTest, testReadDefaultTransferEncoding); - CppUnit_addTest(pSuite, MailMessageTest, testRead8Bit); - CppUnit_addTest(pSuite, MailMessageTest, testReadMultiPart); - CppUnit_addTest(pSuite, MailMessageTest, testReadMultiPartDefaultTransferEncoding); - CppUnit_addTest(pSuite, MailMessageTest, testReadWriteMultiPart); - CppUnit_addTest(pSuite, MailMessageTest, testReadWriteMultiPartStore); - CppUnit_addTest(pSuite, MailMessageTest, testEncodeWord); - - return pSuite; -} diff --git a/contrib/libpoco/Net/testsuite/src/MailMessageTest.h b/contrib/libpoco/Net/testsuite/src/MailMessageTest.h deleted file mode 100644 index fa63ee7904f..00000000000 --- a/contrib/libpoco/Net/testsuite/src/MailMessageTest.h +++ /dev/null @@ -1,52 +0,0 @@ -// -// MailMessageTest.h -// -// $Id: //poco/1.4/Net/testsuite/src/MailMessageTest.h#1 $ -// -// Definition of the MailMessageTest class. -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef MailMessageTest_INCLUDED -#define MailMessageTest_INCLUDED - - -#include "Poco/Net/Net.h" -#include "CppUnit/TestCase.h" - - -class MailMessageTest: public CppUnit::TestCase -{ -public: - MailMessageTest(const std::string& name); - ~MailMessageTest(); - - void testWriteQP(); - void testWrite8Bit(); - void testWriteBase64(); - void testWriteManyRecipients(); - void testWriteMultiPart(); - void testReadWriteMultiPart(); - void testReadWriteMultiPartStore(); - void testReadDefaultTransferEncoding(); - void testReadQP(); - void testRead8Bit(); - void testReadMultiPart(); - void testReadMultiPartDefaultTransferEncoding(); - void testEncodeWord(); - - void setUp(); - void tearDown(); - - static CppUnit::Test* suite(); - -private: -}; - - -#endif // MailMessageTest_INCLUDED diff --git a/contrib/libpoco/Net/testsuite/src/MailStreamTest.cpp b/contrib/libpoco/Net/testsuite/src/MailStreamTest.cpp deleted file mode 100644 index 6ab95602abf..00000000000 --- a/contrib/libpoco/Net/testsuite/src/MailStreamTest.cpp +++ /dev/null @@ -1,123 +0,0 @@ -// -// MailStreamTest.cpp -// -// $Id: //poco/1.4/Net/testsuite/src/MailStreamTest.cpp#1 $ -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "MailStreamTest.h" -#include "CppUnit/TestCaller.h" -#include "CppUnit/TestSuite.h" -#include "Poco/Net/MailStream.h" -#include "Poco/StreamCopier.h" -#include - - -using Poco::Net::MailInputStream; -using Poco::Net::MailOutputStream; -using Poco::StreamCopier; - - -MailStreamTest::MailStreamTest(const std::string& name): CppUnit::TestCase(name) -{ -} - - -MailStreamTest::~MailStreamTest() -{ -} - - -void MailStreamTest::testMailInputStream() -{ - std::istringstream istr( - "From: john.doe@no.domain\r\n" - "To: jane.doe@no.domain\r\n" - "Subject: test\r\n" - "\r\n" - "This is a test.\r\n" - "\rThis.is.\ngarbage\r.\r\n" - ".This line starts with a period.\r\n" - "..and this one too\r\n" - "..\r\n" - ".\r\n" - ); - - MailInputStream mis(istr); - std::ostringstream ostr; - StreamCopier::copyStream(mis, ostr); - std::string s(ostr.str()); - assert (s == - "From: john.doe@no.domain\r\n" - "To: jane.doe@no.domain\r\n" - "Subject: test\r\n" - "\r\n" - "This is a test.\r\n" - "\rThis.is.\ngarbage\r.\r\n" - ".This line starts with a period.\r\n" - ".and this one too\r\n" - ".\r\n" - ); -} - - -void MailStreamTest::testMailOutputStream() -{ - std::string msg( - "From: john.doe@no.domain\r\n" - "To: jane.doe@no.domain\r\n" - "Subject: test\r\n" - "\r\n" - "This is a test.\r\n" - "\rThis.is.\ngarbage\r.\r\n" - ".This line starts with a period.\r\n" - "\r\n" - ".and this one too\r\n" - ".\r\n" - ); - - std::ostringstream ostr; - MailOutputStream mos(ostr); - mos << msg; - mos.close(); - std::string s(ostr.str()); - assert (s == - "From: john.doe@no.domain\r\n" - "To: jane.doe@no.domain\r\n" - "Subject: test\r\n" - "\r\n" - "This is a test.\r\n" - "\rThis.is.\ngarbage\r.\r\n" - "..This line starts with a period.\r\n" - "\r\n" - "..and this one too\r\n" - "..\r\n" - ".\r\n" - ); -} - - -void MailStreamTest::setUp() -{ -} - - -void MailStreamTest::tearDown() -{ -} - - -CppUnit::Test* MailStreamTest::suite() -{ - CppUnit::TestSuite* pSuite = new CppUnit::TestSuite("MailStreamTest"); - - CppUnit_addTest(pSuite, MailStreamTest, testMailInputStream); - CppUnit_addTest(pSuite, MailStreamTest, testMailOutputStream); - - return pSuite; -} diff --git a/contrib/libpoco/Net/testsuite/src/MailStreamTest.h b/contrib/libpoco/Net/testsuite/src/MailStreamTest.h deleted file mode 100644 index 57bda19980b..00000000000 --- a/contrib/libpoco/Net/testsuite/src/MailStreamTest.h +++ /dev/null @@ -1,41 +0,0 @@ -// -// MailStreamTest.h -// -// $Id: //poco/1.4/Net/testsuite/src/MailStreamTest.h#1 $ -// -// Definition of the MailStreamTest class. -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef MailStreamTest_INCLUDED -#define MailStreamTest_INCLUDED - - -#include "Poco/Net/Net.h" -#include "CppUnit/TestCase.h" - - -class MailStreamTest: public CppUnit::TestCase -{ -public: - MailStreamTest(const std::string& name); - ~MailStreamTest(); - - void testMailInputStream(); - void testMailOutputStream(); - - void setUp(); - void tearDown(); - - static CppUnit::Test* suite(); - -private: -}; - - -#endif // MailStreamTest_INCLUDED diff --git a/contrib/libpoco/Net/testsuite/src/MailTestSuite.cpp b/contrib/libpoco/Net/testsuite/src/MailTestSuite.cpp deleted file mode 100644 index 55864034aa2..00000000000 --- a/contrib/libpoco/Net/testsuite/src/MailTestSuite.cpp +++ /dev/null @@ -1,30 +0,0 @@ -// -// MailTestSuite.cpp -// -// $Id: //poco/1.4/Net/testsuite/src/MailTestSuite.cpp#1 $ -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "MailTestSuite.h" -#include "MailMessageTest.h" -#include "MailStreamTest.h" -#include "SMTPClientSessionTest.h" -#include "POP3ClientSessionTest.h" - - -CppUnit::Test* MailTestSuite::suite() -{ - CppUnit::TestSuite* pSuite = new CppUnit::TestSuite("MailTestSuite"); - - pSuite->addTest(MailMessageTest::suite()); - pSuite->addTest(MailStreamTest::suite()); - pSuite->addTest(SMTPClientSessionTest::suite()); - pSuite->addTest(POP3ClientSessionTest::suite()); - - return pSuite; -} diff --git a/contrib/libpoco/Net/testsuite/src/MailTestSuite.h b/contrib/libpoco/Net/testsuite/src/MailTestSuite.h deleted file mode 100644 index 44a2a30375c..00000000000 --- a/contrib/libpoco/Net/testsuite/src/MailTestSuite.h +++ /dev/null @@ -1,29 +0,0 @@ -// -// MailTestSuite.h -// -// $Id: //poco/1.4/Net/testsuite/src/MailTestSuite.h#1 $ -// -// Definition of the MailTestSuite class. -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef MailTestSuite_INCLUDED -#define MailTestSuite_INCLUDED - - -#include "CppUnit/TestSuite.h" - - -class MailTestSuite -{ -public: - static CppUnit::Test* suite(); -}; - - -#endif // MailTestSuite_INCLUDED diff --git a/contrib/libpoco/Net/testsuite/src/MediaTypeTest.cpp b/contrib/libpoco/Net/testsuite/src/MediaTypeTest.cpp deleted file mode 100644 index 50e1158c125..00000000000 --- a/contrib/libpoco/Net/testsuite/src/MediaTypeTest.cpp +++ /dev/null @@ -1,134 +0,0 @@ -// -// MediaTypeTest.cpp -// -// $Id: //poco/1.4/Net/testsuite/src/MediaTypeTest.cpp#2 $ -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "MediaTypeTest.h" -#include "CppUnit/TestCaller.h" -#include "CppUnit/TestSuite.h" -#include "Poco/Net/MediaType.h" - - -using Poco::Net::MediaType; - - -MediaTypeTest::MediaTypeTest(const std::string& name): CppUnit::TestCase(name) -{ -} - - -MediaTypeTest::~MediaTypeTest() -{ -} - - -void MediaTypeTest::testParse() -{ - MediaType mt1("text/plain"); - assert (mt1.getType() == "text"); - assert (mt1.getSubType() == "plain"); - assert (mt1.parameters().empty()); - - MediaType mt2("text/xml;charset=us-ascii"); - assert (mt2.getType() == "text"); - assert (mt2.getSubType() == "xml"); - assert (!mt2.parameters().empty()); - assert (mt2.getParameter("charset") == "us-ascii"); - - MediaType mt3("application/test; param1=value1; param2=\"value 2\""); - assert (mt3.getType() == "application"); - assert (mt3.getSubType() == "test"); - assert (!mt3.parameters().empty()); - assert (mt3.getParameter("param1") == "value1"); - assert (mt3.getParameter("PARAM2") == "value 2"); -} - - -void MediaTypeTest::testToString() -{ - MediaType mt1("text", "plain"); - assert (mt1.toString() == "text/plain"); - - mt1.setParameter("charset", "iso-8859-1"); - assert (mt1.toString() == "text/plain; charset=iso-8859-1"); - - MediaType mt2("application", "test"); - mt2.setParameter("param1", "value1"); - mt2.setParameter("param2", "value 2"); - assert (mt2.toString() == "application/test; param1=value1; param2=\"value 2\""); -} - - -void MediaTypeTest::testMatch() -{ - MediaType mt1("Text/Plain"); - MediaType mt2("text/plain"); - MediaType mt3("text/xml"); - assert (mt1.matches(mt2)); - assert (!mt1.matches(mt3)); - assert (mt1.matches("text")); - assert (mt2.matches("text")); - assert (mt3.matches("text")); -} - - -void MediaTypeTest::testMatchRange() -{ - MediaType mt1("Text/Plain"); - MediaType mt2("text/plain"); - MediaType mt3("text/xml"); - MediaType mt4("image/jpg"); - MediaType mt5("text/*"); - MediaType mt6("*/*"); - assert (mt1.matchesRange(mt5)); - assert (mt2.matchesRange(mt5)); - assert (mt3.matchesRange(mt5)); - assert (!mt4.matchesRange(mt5)); - assert (mt1.matchesRange(mt6)); - assert (mt2.matchesRange(mt6)); - assert (mt3.matchesRange(mt6)); - assert (mt4.matchesRange(mt6)); - - assert (mt5.matchesRange(mt1)); - assert (mt5.matchesRange(mt2)); - assert (mt5.matchesRange(mt3)); - assert (!mt5.matchesRange(mt4)); - - assert (mt1.matchesRange("text", "*")); - assert (mt2.matchesRange("text", "*")); - assert (mt3.matchesRange("text", "*")); - assert (!mt4.matchesRange("text", "*")); - - assert (mt1.matchesRange("*")); - assert (mt4.matchesRange("*")); -} - - -void MediaTypeTest::setUp() -{ -} - - -void MediaTypeTest::tearDown() -{ -} - - -CppUnit::Test* MediaTypeTest::suite() -{ - CppUnit::TestSuite* pSuite = new CppUnit::TestSuite("MediaTypeTest"); - - CppUnit_addTest(pSuite, MediaTypeTest, testParse); - CppUnit_addTest(pSuite, MediaTypeTest, testToString); - CppUnit_addTest(pSuite, MediaTypeTest, testMatch); - CppUnit_addTest(pSuite, MediaTypeTest, testMatchRange); - - return pSuite; -} diff --git a/contrib/libpoco/Net/testsuite/src/MediaTypeTest.h b/contrib/libpoco/Net/testsuite/src/MediaTypeTest.h deleted file mode 100644 index 7a803012650..00000000000 --- a/contrib/libpoco/Net/testsuite/src/MediaTypeTest.h +++ /dev/null @@ -1,43 +0,0 @@ -// -// MediaTypeTest.h -// -// $Id: //poco/1.4/Net/testsuite/src/MediaTypeTest.h#2 $ -// -// Definition of the MediaTypeTest class. -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef MediaTypeTest_INCLUDED -#define MediaTypeTest_INCLUDED - - -#include "Poco/Net/Net.h" -#include "CppUnit/TestCase.h" - - -class MediaTypeTest: public CppUnit::TestCase -{ -public: - MediaTypeTest(const std::string& name); - ~MediaTypeTest(); - - void testParse(); - void testToString(); - void testMatch(); - void testMatchRange(); - - void setUp(); - void tearDown(); - - static CppUnit::Test* suite(); - -private: -}; - - -#endif // MediaTypeTest_INCLUDED diff --git a/contrib/libpoco/Net/testsuite/src/MessageHeaderTest.cpp b/contrib/libpoco/Net/testsuite/src/MessageHeaderTest.cpp deleted file mode 100644 index 793119f02a9..00000000000 --- a/contrib/libpoco/Net/testsuite/src/MessageHeaderTest.cpp +++ /dev/null @@ -1,397 +0,0 @@ -// -// MessageHeaderTest.cpp -// -// $Id: //poco/1.4/Net/testsuite/src/MessageHeaderTest.cpp#3 $ -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "MessageHeaderTest.h" -#include "CppUnit/TestCaller.h" -#include "CppUnit/TestSuite.h" -#include "Poco/Net/MessageHeader.h" -#include "Poco/Net/NetException.h" -#include - - -using Poco::Net::MessageHeader; -using Poco::Net::NameValueCollection; -using Poco::Net::MessageException; - - -MessageHeaderTest::MessageHeaderTest(const std::string& name): CppUnit::TestCase(name) -{ -} - - -MessageHeaderTest::~MessageHeaderTest() -{ -} - - -void MessageHeaderTest::testWrite() -{ - MessageHeader mh; - mh.set("name1", "value1"); - mh.set("name2", "value2"); - mh.set("name3", "value3"); - - std::ostringstream ostr; - mh.write(ostr); - std::string s = ostr.str(); - assert (s == "name1: value1\r\nname2: value2\r\nname3: value3\r\n"); -} - - -void MessageHeaderTest::testRead1() -{ - std::string s("name1: value1\r\nname2: value2\r\nname3: value3\r\n"); - std::istringstream istr(s); - MessageHeader mh; - mh.read(istr); - assert (mh.size() == 3); - assert (mh["name1"] == "value1"); - assert (mh["name2"] == "value2"); - assert (mh["name3"] == "value3"); -} - - -void MessageHeaderTest::testRead2() -{ - std::string s("name1: value1\nname2: value2\nname3: value3\n"); - std::istringstream istr(s); - MessageHeader mh; - mh.read(istr); - assert (mh.size() == 3); - assert (mh["name1"] == "value1"); - assert (mh["name2"] == "value2"); - assert (mh["name3"] == "value3"); -} - - -void MessageHeaderTest::testRead3() -{ - std::string s("name1: value1\r\n"); - std::istringstream istr(s); - MessageHeader mh; - mh.read(istr); - assert (mh.size() == 1); - assert (mh["name1"] == "value1"); -} - - - -void MessageHeaderTest::testRead4() -{ - std::string s("name1: value1\r\nname2: value2\r\n\r\nsomedata"); - std::istringstream istr(s); - MessageHeader mh; - mh.read(istr); - assert (mh.size() == 2); - assert (mh["name1"] == "value1"); - assert (mh["name2"] == "value2"); - int ch = istr.get(); - assert (ch == '\r'); - ch = istr.get(); - assert (ch == '\n'); - ch = istr.get(); - assert (ch == 's'); -} - - -void MessageHeaderTest::testRead5() -{ - std::string s("name1:\r\nname2: value2\r\nname3: value3 \r\n"); - std::istringstream istr(s); - MessageHeader mh; - mh.read(istr); - assert (mh.size() == 3); - assert (mh["name1"] == ""); - assert (mh["name2"] == "value2"); - assert (mh["name3"] == "value3"); -} - - -void MessageHeaderTest::testReadFolding1() -{ - std::string s("name1: value1\r\nname2: value21\r\n value22\r\nname3: value3\r\n"); - std::istringstream istr(s); - MessageHeader mh; - mh.read(istr); - assert (mh.size() == 3); - assert (mh["name1"] == "value1"); - assert (mh["name2"] == "value21 value22"); - assert (mh["name3"] == "value3"); -} - - -void MessageHeaderTest::testReadFolding2() -{ - std::string s("name1: value1\nname2: value21\n\tvalue22\nname3: value3\n"); - std::istringstream istr(s); - MessageHeader mh; - mh.read(istr); - assert (mh.size() == 3); - assert (mh["name1"] == "value1"); - assert (mh["name2"] == "value21\tvalue22"); - assert (mh["name3"] == "value3"); -} - - -void MessageHeaderTest::testReadFolding3() -{ - std::string s("name1: value1\r\nname2: value21\r\n value22\r\n"); - std::istringstream istr(s); - MessageHeader mh; - mh.read(istr); - assert (mh.size() == 2); - assert (mh["name1"] == "value1"); - assert (mh["name2"] == "value21 value22"); -} - - -void MessageHeaderTest::testReadFolding4() -{ - std::string s("name1: value1\r\nname2: value21\r\n value22\r\n value23"); - std::istringstream istr(s); - MessageHeader mh; - mh.read(istr); - assert (mh.size() == 2); - assert (mh["name1"] == "value1"); - assert (mh["name2"] == "value21 value22 value23"); -} - - -void MessageHeaderTest::testReadFolding5() -{ - std::string s("name1: value1\r\nname2: value21\r\n value22\r\n value23\r\nname3: value3"); - std::istringstream istr(s); - MessageHeader mh; - mh.read(istr); - assert (mh.size() == 3); - assert (mh["name1"] == "value1"); - assert (mh["name2"] == "value21 value22 value23"); - assert (mh["name3"] == "value3"); -} - - -void MessageHeaderTest::testReadInvalid1() -{ - std::string s("name1: value1\r\nname2: value21\r\n value22\r\n value23\r\n"); - s.append(300, 'x'); - std::istringstream istr(s); - MessageHeader mh; - try - { - mh.read(istr); - fail("malformed message - must throw"); - } - catch (MessageException&) - { - } -} - - -void MessageHeaderTest::testReadInvalid2() -{ - std::string s("name1: value1\r\nname2: "); - s.append(9000, 'x'); - std::istringstream istr(s); - MessageHeader mh; - try - { - mh.read(istr); - fail("malformed message - must throw"); - } - catch (MessageException&) - { - } -} - - -void MessageHeaderTest::testSplitElements() -{ - std::string s; - std::vector v; - MessageHeader::splitElements(s, v); - assert (v.empty()); - - s = "foo"; - MessageHeader::splitElements(s, v); - assert (v.size() == 1); - assert (v[0] == "foo"); - - s = " foo "; - MessageHeader::splitElements(s, v); - assert (v.size() == 1); - assert (v[0] == "foo"); - - s = "foo,bar"; - MessageHeader::splitElements(s, v); - assert (v.size() == 2); - assert (v[0] == "foo"); - assert (v[1] == "bar"); - - s = "foo,,bar"; - MessageHeader::splitElements(s, v); - assert (v.size() == 2); - assert (v[0] == "foo"); - assert (v[1] == "bar"); - - MessageHeader::splitElements(s, v, false); - assert (v.size() == 3); - assert (v[0] == "foo"); - assert (v[1] == ""); - assert (v[2] == "bar"); - - s = "foo;param=\"a,b\",bar;param=\"c,d\""; - MessageHeader::splitElements(s, v); - assert (v.size() == 2); - assert (v[0] == "foo;param=\"a,b\""); - assert (v[1] == "bar;param=\"c,d\""); - - s = "foo; param=\"a,b\", bar; param=\"c,d\""; - MessageHeader::splitElements(s, v); - assert (v.size() == 2); - assert (v[0] == "foo; param=\"a,b\""); - assert (v[1] == "bar; param=\"c,d\""); - - s = "foo, bar, f00, baz"; - MessageHeader::splitElements(s, v); - assert (v.size() == 4); - assert (v[0] == "foo"); - assert (v[1] == "bar"); - assert (v[2] == "f00"); - assert (v[3] == "baz"); - - s = "a,b,c"; - MessageHeader::splitElements(s, v); - assert (v.size() == 3); - assert (v[0] == "a"); - assert (v[1] == "b"); - assert (v[2] == "c"); - - s = "a=\"value=\\\\\\\"foo, bar\\\\\\\"\",b=foo"; - MessageHeader::splitElements(s, v); - assert (v.size() == 2); - assert (v[0] == "a=\"value=\\\"foo, bar\\\"\""); - assert (v[1] == "b=foo"); - - s = "a=\\\",b=\\\""; - MessageHeader::splitElements(s, v); - assert (v.size() == 2); - assert (v[0] == "a=\""); - assert (v[1] == "b=\""); - -} - - -void MessageHeaderTest::testSplitParameters() -{ - std::string s; - std::string v; - NameValueCollection p; - - MessageHeader::splitParameters(s, v, p); - assert (v.empty()); - assert (p.empty()); - - s = "multipart/related"; - MessageHeader::splitParameters(s, v, p); - assert (v == "multipart/related"); - assert (p.empty()); - - s = "multipart/related; boundary=MIME_boundary_01234567"; - MessageHeader::splitParameters(s, v, p); - assert (v == "multipart/related"); - assert (p.size() == 1); - assert (p["boundary"] == "MIME_boundary_01234567"); - - s = "multipart/related; boundary=\"MIME_boundary_76543210\""; - MessageHeader::splitParameters(s, v, p); - assert (v == "multipart/related"); - assert (p.size() == 1); - assert (p["boundary"] == "MIME_boundary_76543210"); - - s = "text/plain; charset=us-ascii"; - MessageHeader::splitParameters(s, v, p); - assert (v == "text/plain"); - assert (p.size() == 1); - assert (p["charset"] == "us-ascii"); - - s = "value; p1=foo; p2=bar"; - MessageHeader::splitParameters(s, v, p); - assert (v == "value"); - assert (p.size() == 2); - assert (p["p1"] == "foo"); - assert (p["p2"] == "bar"); - - s = "value; p1=\"foo; bar\""; - MessageHeader::splitParameters(s, v, p); - assert (v == "value"); - assert (p.size() == 1); - assert (p["p1"] == "foo; bar"); - - s = "value ; p1=foo ; p2=bar "; - MessageHeader::splitParameters(s, v, p); - assert (v == "value"); - assert (p.size() == 2); - assert (p["p1"] == "foo"); - assert (p["p2"] == "bar"); -} - - -void MessageHeaderTest::testFieldLimit() -{ - std::string s("name1: value1\r\nname2: value2\r\nname3: value3\r\n"); - std::istringstream istr(s); - MessageHeader mh; - mh.setFieldLimit(2); - try - { - mh.read(istr); - fail("Field limit exceeded - must throw"); - } - catch (MessageException&) - { - } -} - - -void MessageHeaderTest::setUp() -{ -} - - -void MessageHeaderTest::tearDown() -{ -} - - -CppUnit::Test* MessageHeaderTest::suite() -{ - CppUnit::TestSuite* pSuite = new CppUnit::TestSuite("MessageHeaderTest"); - - CppUnit_addTest(pSuite, MessageHeaderTest, testWrite); - CppUnit_addTest(pSuite, MessageHeaderTest, testRead1); - CppUnit_addTest(pSuite, MessageHeaderTest, testRead2); - CppUnit_addTest(pSuite, MessageHeaderTest, testRead3); - CppUnit_addTest(pSuite, MessageHeaderTest, testRead4); - CppUnit_addTest(pSuite, MessageHeaderTest, testRead5); - CppUnit_addTest(pSuite, MessageHeaderTest, testReadFolding1); - CppUnit_addTest(pSuite, MessageHeaderTest, testReadFolding2); - CppUnit_addTest(pSuite, MessageHeaderTest, testReadFolding3); - CppUnit_addTest(pSuite, MessageHeaderTest, testReadFolding4); - CppUnit_addTest(pSuite, MessageHeaderTest, testReadFolding5); - CppUnit_addTest(pSuite, MessageHeaderTest, testReadInvalid1); - CppUnit_addTest(pSuite, MessageHeaderTest, testReadInvalid2); - CppUnit_addTest(pSuite, MessageHeaderTest, testSplitElements); - CppUnit_addTest(pSuite, MessageHeaderTest, testSplitParameters); - CppUnit_addTest(pSuite, MessageHeaderTest, testFieldLimit); - - return pSuite; -} diff --git a/contrib/libpoco/Net/testsuite/src/MessageHeaderTest.h b/contrib/libpoco/Net/testsuite/src/MessageHeaderTest.h deleted file mode 100644 index 156db25ed35..00000000000 --- a/contrib/libpoco/Net/testsuite/src/MessageHeaderTest.h +++ /dev/null @@ -1,55 +0,0 @@ -// -// MessageHeaderTest.h -// -// $Id: //poco/1.4/Net/testsuite/src/MessageHeaderTest.h#2 $ -// -// Definition of the MessageHeaderTest class. -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef MessageHeaderTest_INCLUDED -#define MessageHeaderTest_INCLUDED - - -#include "Poco/Net/Net.h" -#include "CppUnit/TestCase.h" - - -class MessageHeaderTest: public CppUnit::TestCase -{ -public: - MessageHeaderTest(const std::string& name); - ~MessageHeaderTest(); - - void testWrite(); - void testRead1(); - void testRead2(); - void testRead3(); - void testRead4(); - void testRead5(); - void testReadFolding1(); - void testReadFolding2(); - void testReadFolding3(); - void testReadFolding4(); - void testReadFolding5(); - void testReadInvalid1(); - void testReadInvalid2(); - void testSplitElements(); - void testSplitParameters(); - void testFieldLimit(); - - void setUp(); - void tearDown(); - - static CppUnit::Test* suite(); - -private: -}; - - -#endif // MessageHeaderTest_INCLUDED diff --git a/contrib/libpoco/Net/testsuite/src/MessagesTestSuite.cpp b/contrib/libpoco/Net/testsuite/src/MessagesTestSuite.cpp deleted file mode 100644 index 2edff4cbd54..00000000000 --- a/contrib/libpoco/Net/testsuite/src/MessagesTestSuite.cpp +++ /dev/null @@ -1,34 +0,0 @@ -// -// MessagesTestSuite.cpp -// -// $Id: //poco/1.4/Net/testsuite/src/MessagesTestSuite.cpp#1 $ -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "MessagesTestSuite.h" -#include "NameValueCollectionTest.h" -#include "MessageHeaderTest.h" -#include "MediaTypeTest.h" -#include "MultipartWriterTest.h" -#include "MultipartReaderTest.h" -#include "QuotedPrintableTest.h" - - -CppUnit::Test* MessagesTestSuite::suite() -{ - CppUnit::TestSuite* pSuite = new CppUnit::TestSuite("MessagesTestSuite"); - - pSuite->addTest(NameValueCollectionTest::suite()); - pSuite->addTest(MessageHeaderTest::suite()); - pSuite->addTest(MediaTypeTest::suite()); - pSuite->addTest(MultipartWriterTest::suite()); - pSuite->addTest(MultipartReaderTest::suite()); - pSuite->addTest(QuotedPrintableTest::suite()); - - return pSuite; -} diff --git a/contrib/libpoco/Net/testsuite/src/MessagesTestSuite.h b/contrib/libpoco/Net/testsuite/src/MessagesTestSuite.h deleted file mode 100644 index 4da02b45d28..00000000000 --- a/contrib/libpoco/Net/testsuite/src/MessagesTestSuite.h +++ /dev/null @@ -1,29 +0,0 @@ -// -// MessagesTestSuite.h -// -// $Id: //poco/1.4/Net/testsuite/src/MessagesTestSuite.h#1 $ -// -// Definition of the MessagesTestSuite class. -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef MessagesTestSuite_INCLUDED -#define MessagesTestSuite_INCLUDED - - -#include "CppUnit/TestSuite.h" - - -class MessagesTestSuite -{ -public: - static CppUnit::Test* suite(); -}; - - -#endif // MessagesTestSuite_INCLUDED diff --git a/contrib/libpoco/Net/testsuite/src/MulticastEchoServer.cpp b/contrib/libpoco/Net/testsuite/src/MulticastEchoServer.cpp deleted file mode 100644 index 47966183091..00000000000 --- a/contrib/libpoco/Net/testsuite/src/MulticastEchoServer.cpp +++ /dev/null @@ -1,109 +0,0 @@ -// -// MulticastEchoServer.cpp -// -// $Id: //poco/1.4/Net/testsuite/src/MulticastEchoServer.cpp#1 $ -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "MulticastEchoServer.h" - - -#ifdef POCO_NET_HAS_INTERFACE - - -#include "Poco/Timespan.h" -#include - - -using Poco::Net::Socket; -using Poco::Net::DatagramSocket; -using Poco::Net::SocketAddress; -using Poco::Net::IPAddress; -using Poco::Net::NetworkInterface; - - -MulticastEchoServer::MulticastEchoServer(): - _group("239.255.1.2", 12345), - _if(findInterface()), - _thread("MulticastEchoServer"), - _stop(false) -{ - _socket.bind(SocketAddress(IPAddress(), _group.port()), true); - _socket.joinGroup(_group.host(), _if); - _thread.start(*this); - _ready.wait(); -} - - -MulticastEchoServer::~MulticastEchoServer() -{ - _stop = true; - _thread.join(); - _socket.leaveGroup(_group.host(), _if); -} - - -Poco::UInt16 MulticastEchoServer::port() const -{ - return _socket.address().port(); -} - - -void MulticastEchoServer::run() -{ - _ready.set(); - Poco::Timespan span(250000); - while (!_stop) - { - if (_socket.poll(span, Socket::SELECT_READ)) - { - try - { - char buffer[256]; - SocketAddress sender; - int n = _socket.receiveFrom(buffer, sizeof(buffer), sender); - _socket.sendTo(buffer, n, sender); - } - catch (Poco::Exception& exc) - { - std::cerr << "MulticastEchoServer: " << exc.displayText() << std::endl; - } - } - } -} - - -const SocketAddress& MulticastEchoServer::group() const -{ - return _group; -} - - -const NetworkInterface& MulticastEchoServer::interfc() const -{ - return _if; -} - - -Poco::Net::NetworkInterface MulticastEchoServer::findInterface() -{ - NetworkInterface::Map m = NetworkInterface::map(); - for (NetworkInterface::Map::const_iterator it = m.begin(); it != m.end(); ++it) - { - if (it->second.supportsIPv4() && - it->second.firstAddress(IPAddress::IPv4).isUnicast() && - !it->second.isLoopback() && - !it->second.isPointToPoint()) - { - return it->second; - } - } - return NetworkInterface(); -} - -#endif // POCO_NET_HAS_INTERFACE diff --git a/contrib/libpoco/Net/testsuite/src/MulticastEchoServer.h b/contrib/libpoco/Net/testsuite/src/MulticastEchoServer.h deleted file mode 100644 index 40890f9c0a9..00000000000 --- a/contrib/libpoco/Net/testsuite/src/MulticastEchoServer.h +++ /dev/null @@ -1,73 +0,0 @@ -// -// MulticastEchoServer.h -// -// $Id: //poco/1.4/Net/testsuite/src/MulticastEchoServer.h#1 $ -// -// Definition of the MulticastEchoServer class. -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef MulticastEchoServer_INCLUDED -#define MulticastEchoServer_INCLUDED - - -#include "Poco/Net/Net.h" - - -#ifdef POCO_NET_HAS_INTERFACE - - -#include "Poco/Net/MulticastSocket.h" -#include "Poco/Net/SocketAddress.h" -#include "Poco/Net/NetworkInterface.h" -#include "Poco/Thread.h" -#include "Poco/Event.h" - - -class MulticastEchoServer: public Poco::Runnable - /// A simple sequential Multicast echo server. -{ -public: - MulticastEchoServer(); - /// Creates the MulticastEchoServer. - - ~MulticastEchoServer(); - /// Destroys the MulticastEchoServer. - - Poco::UInt16 port() const; - /// Returns the port the echo server is - /// listening on. - - void run(); - /// Does the work. - - const Poco::Net::SocketAddress& group() const; - /// Returns the group address where the server listens. - - const Poco::Net::NetworkInterface& interfc() const; - /// Returns the network interface for multicasting. - -protected: - static Poco::Net::NetworkInterface findInterface(); - /// Finds an appropriate network interface for - /// multicasting. - -private: - Poco::Net::MulticastSocket _socket; - Poco::Net::SocketAddress _group; - Poco::Net::NetworkInterface _if; - Poco::Thread _thread; - Poco::Event _ready; - bool _stop; -}; - - -#endif // POCO_NET_HAS_INTERFACE - - -#endif // MulticastEchoServer_INCLUDED diff --git a/contrib/libpoco/Net/testsuite/src/MulticastSocketTest.cpp b/contrib/libpoco/Net/testsuite/src/MulticastSocketTest.cpp deleted file mode 100644 index 7191e2071fe..00000000000 --- a/contrib/libpoco/Net/testsuite/src/MulticastSocketTest.cpp +++ /dev/null @@ -1,84 +0,0 @@ -// -// MulticastSocketTest.cpp -// -// $Id: //poco/1.4/Net/testsuite/src/MulticastSocketTest.cpp#1 $ -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "MulticastSocketTest.h" - - -#ifdef POCO_NET_HAS_INTERFACE - - -#include "CppUnit/TestCaller.h" -#include "CppUnit/TestSuite.h" -#include "MulticastEchoServer.h" -#include "Poco/Net/MulticastSocket.h" -#include "Poco/Net/SocketAddress.h" -#include "Poco/Net/NetException.h" -#include "Poco/Timespan.h" -#include "Poco/Stopwatch.h" - - -using Poco::Net::Socket; -using Poco::Net::MulticastSocket; -using Poco::Net::SocketAddress; -using Poco::Net::IPAddress; -using Poco::Timespan; -using Poco::Stopwatch; -using Poco::TimeoutException; -using Poco::InvalidArgumentException; -using Poco::IOException; - - -MulticastSocketTest::MulticastSocketTest(const std::string& name): CppUnit::TestCase(name) -{ -} - - -MulticastSocketTest::~MulticastSocketTest() -{ -} - - -void MulticastSocketTest::testMulticast() -{ - MulticastEchoServer echoServer; - MulticastSocket ms; - int n = ms.sendTo("hello", 5, echoServer.group()); - assert (n == 5); - char buffer[256]; - n = ms.receiveBytes(buffer, sizeof(buffer)); - assert (n == 5); - assert (std::string(buffer, n) == "hello"); - ms.close(); -} - - -void MulticastSocketTest::setUp() -{ -} - - -void MulticastSocketTest::tearDown() -{ -} - - -CppUnit::Test* MulticastSocketTest::suite() -{ - CppUnit::TestSuite* pSuite = new CppUnit::TestSuite("MulticastSocketTest"); -#if (POCO_OS != POCO_OS_FREE_BSD) // TODO - CppUnit_addTest(pSuite, MulticastSocketTest, testMulticast); -#endif - return pSuite; -} - - -#endif // POCO_NET_HAS_INTERFACE diff --git a/contrib/libpoco/Net/testsuite/src/MulticastSocketTest.h b/contrib/libpoco/Net/testsuite/src/MulticastSocketTest.h deleted file mode 100644 index dcdea0cab47..00000000000 --- a/contrib/libpoco/Net/testsuite/src/MulticastSocketTest.h +++ /dev/null @@ -1,48 +0,0 @@ -// -// MulticastSocketTest.h -// -// $Id: //poco/1.4/Net/testsuite/src/MulticastSocketTest.h#1 $ -// -// Definition of the MulticastSocketTest class. -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef MulticastSocketTest_INCLUDED -#define MulticastSocketTest_INCLUDED - - -#include "Poco/Net/Net.h" - - -#ifdef POCO_NET_HAS_INTERFACE - - -#include "CppUnit/TestCase.h" - - -class MulticastSocketTest: public CppUnit::TestCase -{ -public: - MulticastSocketTest(const std::string& name); - ~MulticastSocketTest(); - - void testMulticast(); - - void setUp(); - void tearDown(); - - static CppUnit::Test* suite(); - -private: -}; - - -#endif // POCO_NET_HAS_INTERFACE - - -#endif // MulticastSocketTest_INCLUDED diff --git a/contrib/libpoco/Net/testsuite/src/MultipartReaderTest.cpp b/contrib/libpoco/Net/testsuite/src/MultipartReaderTest.cpp deleted file mode 100644 index a409e18e666..00000000000 --- a/contrib/libpoco/Net/testsuite/src/MultipartReaderTest.cpp +++ /dev/null @@ -1,380 +0,0 @@ -// -// MultipartReaderTest.cpp -// -// $Id: //poco/1.4/Net/testsuite/src/MultipartReaderTest.cpp#1 $ -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "MultipartReaderTest.h" -#include "CppUnit/TestCaller.h" -#include "CppUnit/TestSuite.h" -#include "Poco/Net/MultipartReader.h" -#include "Poco/Net/MessageHeader.h" -#include "Poco/Net/NetException.h" -#include - - -using Poco::Net::MultipartReader; -using Poco::Net::MessageHeader; -using Poco::Net::MultipartException; - - -MultipartReaderTest::MultipartReaderTest(const std::string& name): CppUnit::TestCase(name) -{ -} - - -MultipartReaderTest::~MultipartReaderTest() -{ -} - - -void MultipartReaderTest::testReadOnePart() -{ - std::string s("\r\n--MIME_boundary_01234567\r\nname1: value1\r\n\r\nthis is part 1\r\n--MIME_boundary_01234567--\r\n"); - std::istringstream istr(s); - MultipartReader r(istr, "MIME_boundary_01234567"); - assert (r.boundary() == "MIME_boundary_01234567"); - assert (r.hasNextPart()); - MessageHeader h; - r.nextPart(h); - assert (h.size() == 1); - assert (h["name1"] == "value1"); - std::istream& i = r.stream(); - int ch = i.get(); - std::string part; - while (ch >= 0) - { - part += (char) ch; - ch = i.get(); - } - assert (part == "this is part 1"); - assert (!r.hasNextPart()); - try - { - r.nextPart(h); - fail("no more parts - must throw"); - } - catch (MultipartException&) - { - } -} - - -void MultipartReaderTest::testReadTwoParts() -{ - std::string s("\r\n--MIME_boundary_01234567\r\nname1: value1\r\n\r\nthis is part 1\r\n--MIME_boundary_01234567\r\n\r\nthis is part 2\r\n\r\n--MIME_boundary_01234567--\r\n"); - std::istringstream istr(s); - MultipartReader r(istr, "MIME_boundary_01234567"); - assert (r.hasNextPart()); - MessageHeader h; - r.nextPart(h); - assert (h.size() == 1); - assert (h["name1"] == "value1"); - std::istream& i = r.stream(); - int ch = i.get(); - std::string part; - while (ch >= 0) - { - part += (char) ch; - ch = i.get(); - } - assert (part == "this is part 1"); - assert (r.hasNextPart()); - r.nextPart(h); - assert (h.empty()); - std::istream& ii = r.stream(); - part.clear(); - ch = ii.get(); - while (ch >= 0) - { - part += (char) ch; - ch = ii.get(); - } - assert (part == "this is part 2\r\n"); - - try - { - r.nextPart(h); - fail("no more parts - must throw"); - } - catch (MultipartException&) - { - } -} - - -void MultipartReaderTest::testReadEmptyLines() -{ - std::string s("\r\n--MIME_boundary_01234567\r\nname1: value1\r\n\r\nthis is\r\npart 1\r\n\r\n--MIME_boundary_01234567\r\n\r\nthis\r\n\r\nis part 2\r\n\r\n\r\n--MIME_boundary_01234567--\r\n"); - std::istringstream istr(s); - MultipartReader r(istr, "MIME_boundary_01234567"); - assert (r.hasNextPart()); - MessageHeader h; - r.nextPart(h); - assert (h.size() == 1); - assert (h["name1"] == "value1"); - std::istream& i = r.stream(); - int ch = i.get(); - std::string part; - while (ch >= 0) - { - part += (char) ch; - ch = i.get(); - } - assert (part == "this is\r\npart 1\r\n"); - assert (r.hasNextPart()); - r.nextPart(h); - assert (h.empty()); - std::istream& ii = r.stream(); - part.clear(); - ch = ii.get(); - while (ch >= 0) - { - part += (char) ch; - ch = ii.get(); - } - assert (part == "this\r\n\r\nis part 2\r\n\r\n"); - - try - { - r.nextPart(h); - fail("no more parts - must throw"); - } - catch (MultipartException&) - { - } -} - - -void MultipartReaderTest::testReadLongPart() -{ - std::string longPart(3000, 'X'); - std::string s("\r\n--MIME_boundary_01234567\r\nname1: value1\r\n\r\n"); - s.append(longPart); - s.append("\r\n--MIME_boundary_01234567\r\n\r\nthis is part 2\r\n--MIME_boundary_01234567--\r\n"); - std::istringstream istr(s); - MultipartReader r(istr, "MIME_boundary_01234567"); - assert (r.hasNextPart()); - MessageHeader h; - r.nextPart(h); - assert (h.size() == 1); - assert (h["name1"] == "value1"); - std::istream& i = r.stream(); - int ch = i.get(); - std::string part; - while (ch >= 0) - { - part += (char) ch; - ch = i.get(); - } - assert (part == longPart); - assert (r.hasNextPart()); - r.nextPart(h); - assert (h.empty()); - std::istream& ii = r.stream(); - part.clear(); - ch = ii.get(); - while (ch >= 0) - { - part += (char) ch; - ch = ii.get(); - } - assert (part == "this is part 2"); - - try - { - r.nextPart(h); - fail("no more parts - must throw"); - } - catch (MultipartException&) - { - } -} - - -void MultipartReaderTest::testGuessBoundary() -{ - std::string s("\r\n--MIME_boundary_01234567\r\nname1: value1\r\n\r\nthis is part 1\r\n--MIME_boundary_01234567--\r\n"); - std::istringstream istr(s); - MultipartReader r(istr); - assert (r.hasNextPart()); - MessageHeader h; - r.nextPart(h); - assert (r.boundary() == "MIME_boundary_01234567"); - assert (h.size() == 1); - assert (h["name1"] == "value1"); - std::istream& i = r.stream(); - int ch = i.get(); - std::string part; - while (ch >= 0) - { - part += (char) ch; - ch = i.get(); - } - assert (part == "this is part 1"); - assert (!r.hasNextPart()); - try - { - r.nextPart(h); - fail("no more parts - must throw"); - } - catch (MultipartException&) - { - } -} - - -void MultipartReaderTest::testPreamble() -{ - std::string s("this is the\r\npreamble\r\n--MIME_boundary_01234567\r\nname1: value1\r\n\r\nthis is part 1\r\n--MIME_boundary_01234567--\r\n"); - std::istringstream istr(s); - MultipartReader r(istr, "MIME_boundary_01234567"); - assert (r.hasNextPart()); - MessageHeader h; - r.nextPart(h); - assert (h.size() == 1); - assert (h["name1"] == "value1"); - std::istream& i = r.stream(); - int ch = i.get(); - std::string part; - while (ch >= 0) - { - part += (char) ch; - ch = i.get(); - } - assert (part == "this is part 1"); - assert (!r.hasNextPart()); - try - { - r.nextPart(h); - fail("no more parts - must throw"); - } - catch (MultipartException&) - { - } -} - - -void MultipartReaderTest::testBadBoundary() -{ - std::string s("\r\n--MIME_boundary_01234567\r\nname1: value1\r\n\r\nthis is part 1\r\n--MIME_boundary_01234567--\r\n"); - std::istringstream istr(s); - MultipartReader r(istr, "MIME_boundary_7654321"); - assert (r.hasNextPart()); - MessageHeader h; - try - { - r.nextPart(h); - } - catch (MultipartException&) - { - } -} - - -void MultipartReaderTest::testRobustness() -{ - std::string s("--MIME_boundary_01234567\rname1: value1\r\n\nthis is part 1\n--MIME_boundary_01234567--"); - std::istringstream istr(s); - MultipartReader r(istr, "MIME_boundary_01234567"); - assert (r.hasNextPart()); - MessageHeader h; - r.nextPart(h); - assert (h.size() == 1); - assert (h["name1"] == "value1"); - std::istream& i = r.stream(); - int ch = i.get(); - std::string part; - while (ch >= 0) - { - part += (char) ch; - ch = i.get(); - } - assert (part == "this is part 1"); - assert (!r.hasNextPart()); - try - { - r.nextPart(h); - fail("no more parts - must throw"); - } - catch (MultipartException&) - { - } -} - - -void MultipartReaderTest::testUnixLineEnds() -{ - std::string s("\n--MIME_boundary_01234567\nname1: value1\n\nthis is part 1\n--MIME_boundary_01234567\n\nthis is part 2\n\n--MIME_boundary_01234567--\n"); - std::istringstream istr(s); - MultipartReader r(istr, "MIME_boundary_01234567"); - assert (r.hasNextPart()); - MessageHeader h; - r.nextPart(h); - assert (h.size() == 1); - assert (h["name1"] == "value1"); - std::istream& i = r.stream(); - int ch = i.get(); - std::string part; - while (ch >= 0) - { - part += (char) ch; - ch = i.get(); - } - assert (part == "this is part 1"); - assert (r.hasNextPart()); - r.nextPart(h); - assert (h.empty()); - std::istream& ii = r.stream(); - part.clear(); - ch = ii.get(); - while (ch >= 0) - { - part += (char) ch; - ch = ii.get(); - } - assert (part == "this is part 2\n"); - - try - { - r.nextPart(h); - fail("no more parts - must throw"); - } - catch (MultipartException&) - { - } -} - - -void MultipartReaderTest::setUp() -{ -} - - -void MultipartReaderTest::tearDown() -{ -} - - -CppUnit::Test* MultipartReaderTest::suite() -{ - CppUnit::TestSuite* pSuite = new CppUnit::TestSuite("MultipartReaderTest"); - - CppUnit_addTest(pSuite, MultipartReaderTest, testReadOnePart); - CppUnit_addTest(pSuite, MultipartReaderTest, testReadTwoParts); - CppUnit_addTest(pSuite, MultipartReaderTest, testReadEmptyLines); - CppUnit_addTest(pSuite, MultipartReaderTest, testReadLongPart); - CppUnit_addTest(pSuite, MultipartReaderTest, testGuessBoundary); - CppUnit_addTest(pSuite, MultipartReaderTest, testPreamble); - CppUnit_addTest(pSuite, MultipartReaderTest, testBadBoundary); - CppUnit_addTest(pSuite, MultipartReaderTest, testRobustness); - CppUnit_addTest(pSuite, MultipartReaderTest, testUnixLineEnds); - - return pSuite; -} diff --git a/contrib/libpoco/Net/testsuite/src/MultipartReaderTest.h b/contrib/libpoco/Net/testsuite/src/MultipartReaderTest.h deleted file mode 100644 index 3985423cdcf..00000000000 --- a/contrib/libpoco/Net/testsuite/src/MultipartReaderTest.h +++ /dev/null @@ -1,48 +0,0 @@ -// -// MultipartReaderTest.h -// -// $Id: //poco/1.4/Net/testsuite/src/MultipartReaderTest.h#1 $ -// -// Definition of the MultipartReaderTest class. -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef MultipartReaderTest_INCLUDED -#define MultipartReaderTest_INCLUDED - - -#include "Poco/Net/Net.h" -#include "CppUnit/TestCase.h" - - -class MultipartReaderTest: public CppUnit::TestCase -{ -public: - MultipartReaderTest(const std::string& name); - ~MultipartReaderTest(); - - void testReadOnePart(); - void testReadTwoParts(); - void testReadEmptyLines(); - void testReadLongPart(); - void testGuessBoundary(); - void testPreamble(); - void testBadBoundary(); - void testRobustness(); - void testUnixLineEnds(); - - void setUp(); - void tearDown(); - - static CppUnit::Test* suite(); - -private: -}; - - -#endif // MultipartReaderTest_INCLUDED diff --git a/contrib/libpoco/Net/testsuite/src/MultipartWriterTest.cpp b/contrib/libpoco/Net/testsuite/src/MultipartWriterTest.cpp deleted file mode 100644 index 80beeb59c13..00000000000 --- a/contrib/libpoco/Net/testsuite/src/MultipartWriterTest.cpp +++ /dev/null @@ -1,96 +0,0 @@ -// -// MultipartWriterTest.cpp -// -// $Id: //poco/1.4/Net/testsuite/src/MultipartWriterTest.cpp#1 $ -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "MultipartWriterTest.h" -#include "CppUnit/TestCaller.h" -#include "CppUnit/TestSuite.h" -#include "Poco/Net/MultipartWriter.h" -#include "Poco/Net/MessageHeader.h" -#include - - -using Poco::Net::MultipartWriter; -using Poco::Net::MessageHeader; - - -MultipartWriterTest::MultipartWriterTest(const std::string& name): CppUnit::TestCase(name) -{ -} - - -MultipartWriterTest::~MultipartWriterTest() -{ -} - - -void MultipartWriterTest::testWriteOnePart() -{ - std::ostringstream ostr; - MultipartWriter w(ostr, "MIME_boundary_01234567"); - assert (w.boundary() == "MIME_boundary_01234567"); - MessageHeader h; - h.set("name1", "value1"); - w.nextPart(h); - ostr << "this is part 1"; - w.close(); - std::string s = ostr.str(); - assert (s == "--MIME_boundary_01234567\r\nname1: value1\r\n\r\nthis is part 1\r\n--MIME_boundary_01234567--\r\n"); -} - - -void MultipartWriterTest::testWriteTwoParts() -{ - std::ostringstream ostr; - MultipartWriter w(ostr, "MIME_boundary_01234567"); - MessageHeader h; - h.set("name1", "value1"); - w.nextPart(h); - ostr << "this is part 1"; - h.clear(); - w.nextPart(h); - ostr << "this is part 2"; - w.close(); - std::string s = ostr.str(); - assert (s == "--MIME_boundary_01234567\r\nname1: value1\r\n\r\nthis is part 1\r\n--MIME_boundary_01234567\r\n\r\nthis is part 2\r\n--MIME_boundary_01234567--\r\n"); -} - - -void MultipartWriterTest::testBoundary() -{ - std::ostringstream ostr; - MultipartWriter w(ostr); - std::string boundary = w.boundary(); - assert (boundary.substr(0, 14) == "MIME_boundary_"); - assert (boundary.length() == 14 + 16); -} - - -void MultipartWriterTest::setUp() -{ -} - - -void MultipartWriterTest::tearDown() -{ -} - - -CppUnit::Test* MultipartWriterTest::suite() -{ - CppUnit::TestSuite* pSuite = new CppUnit::TestSuite("MultipartWriterTest"); - - CppUnit_addTest(pSuite, MultipartWriterTest, testWriteOnePart); - CppUnit_addTest(pSuite, MultipartWriterTest, testWriteTwoParts); - CppUnit_addTest(pSuite, MultipartWriterTest, testBoundary); - - return pSuite; -} diff --git a/contrib/libpoco/Net/testsuite/src/MultipartWriterTest.h b/contrib/libpoco/Net/testsuite/src/MultipartWriterTest.h deleted file mode 100644 index 0a4b55a5754..00000000000 --- a/contrib/libpoco/Net/testsuite/src/MultipartWriterTest.h +++ /dev/null @@ -1,42 +0,0 @@ -// -// MultipartWriterTest.h -// -// $Id: //poco/1.4/Net/testsuite/src/MultipartWriterTest.h#1 $ -// -// Definition of the MultipartWriterTest class. -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef MultipartWriterTest_INCLUDED -#define MultipartWriterTest_INCLUDED - - -#include "Poco/Net/Net.h" -#include "CppUnit/TestCase.h" - - -class MultipartWriterTest: public CppUnit::TestCase -{ -public: - MultipartWriterTest(const std::string& name); - ~MultipartWriterTest(); - - void testWriteOnePart(); - void testWriteTwoParts(); - void testBoundary(); - - void setUp(); - void tearDown(); - - static CppUnit::Test* suite(); - -private: -}; - - -#endif // MultipartWriterTest_INCLUDED diff --git a/contrib/libpoco/Net/testsuite/src/NTPClientTest.cpp b/contrib/libpoco/Net/testsuite/src/NTPClientTest.cpp deleted file mode 100644 index 71b4a8418ec..00000000000 --- a/contrib/libpoco/Net/testsuite/src/NTPClientTest.cpp +++ /dev/null @@ -1,84 +0,0 @@ -// -// NTPClientTest.cpp -// -// $Id: //poco/1.4/Net/testsuite/src/NTPClientTest.cpp#1 $ -// -// Copyright (c) 2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "NTPClientTest.h" -#include "CppUnit/TestCaller.h" -#include "CppUnit/TestSuite.h" -#include "Poco/Net/NTPClient.h" -#include "Poco/Net/NTPEventArgs.h" -#include "Poco/Net/SocketAddress.h" -#include "Poco/Net/NetException.h" -#include "Poco/AutoPtr.h" -#include "Poco/Delegate.h" -#include "Poco/DateTimeFormatter.h" -#include "Poco/DateTimeFormat.h" -#include -#include - - -using Poco::Net::NTPClient; -using Poco::Net::NTPEventArgs; -using Poco::Net::SocketAddress; -using Poco::Net::IPAddress; -using Poco::Net::HostNotFoundException; -using Poco::Delegate; -using Poco::AutoPtr; - - -NTPClientTest::NTPClientTest(const std::string& name): - CppUnit::TestCase(name), - _ntpClient(IPAddress::IPv4) -{ -} - - -NTPClientTest::~NTPClientTest() -{ -} - - -void NTPClientTest::testTimeSync() -{ - assert(_ntpClient.request("pool.ntp.org") > 0); -} - - -void NTPClientTest::setUp() -{ - _ntpClient.response += Delegate(this, &NTPClientTest::onResponse); -} - - -void NTPClientTest::tearDown() -{ - _ntpClient.response -= Delegate(this, &NTPClientTest::onResponse); -} - - -void NTPClientTest::onResponse(const void* pSender, NTPEventArgs& args) -{ - std::ostringstream os; - os << std::endl << "Received from " << args.hostName() << " [" << args.hostAddress() << "] with " - << Poco::DateTimeFormatter::format(args.packet().referenceTime(), Poco::DateTimeFormat::ISO8601_FORMAT) << " reference typestamp" - << std::endl; - std::cout << os.str() << std::endl; -} - - -CppUnit::Test* NTPClientTest::suite() -{ - CppUnit::TestSuite* pSuite = new CppUnit::TestSuite("NTPClientTest"); - - CppUnit_addTest(pSuite, NTPClientTest, testTimeSync); - - return pSuite; -} diff --git a/contrib/libpoco/Net/testsuite/src/NTPClientTest.h b/contrib/libpoco/Net/testsuite/src/NTPClientTest.h deleted file mode 100644 index 3c71d8d1618..00000000000 --- a/contrib/libpoco/Net/testsuite/src/NTPClientTest.h +++ /dev/null @@ -1,44 +0,0 @@ -// -// NTPClientTest.h -// -// $Id: //poco/1.4/Net/testsuite/src/NTPClientTest.h#1 $ -// -// Definition of the NTPClientTest class. -// -// Copyright (c) 2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef NTPClientTest_INCLUDED -#define NTPClientTest_INCLUDED - - -#include "Poco/Net/Net.h" -#include "CppUnit/TestCase.h" -#include "Poco/Net/NTPClient.h" -#include "Poco/Net/NTPEventArgs.h" - - -class NTPClientTest: public CppUnit::TestCase -{ -public: - NTPClientTest(const std::string& name); - ~NTPClientTest(); - - void testTimeSync(); - - void setUp(); - void tearDown(); - - static CppUnit::Test* suite(); - - void onResponse(const void* pSender, Poco::Net::NTPEventArgs& args); -private: - Poco::Net::NTPClient _ntpClient; -}; - - -#endif // NTPClientTest_INCLUDED diff --git a/contrib/libpoco/Net/testsuite/src/NTPClientTestSuite.cpp b/contrib/libpoco/Net/testsuite/src/NTPClientTestSuite.cpp deleted file mode 100644 index 5239a88e0ce..00000000000 --- a/contrib/libpoco/Net/testsuite/src/NTPClientTestSuite.cpp +++ /dev/null @@ -1,24 +0,0 @@ -// -// NTPClientTestSuite.cpp -// -// $Id: //poco/1.4/Net/testsuite/src/NTPClientTestSuite.cpp#1 $ -// -// Copyright (c) 2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "NTPClientTestSuite.h" -#include "NTPClientTest.h" - - -CppUnit::Test* NTPClientTestSuite::suite() -{ - CppUnit::TestSuite* pSuite = new CppUnit::TestSuite("NTPClientTestSuite"); - - pSuite->addTest(NTPClientTest::suite()); - - return pSuite; -} diff --git a/contrib/libpoco/Net/testsuite/src/NTPClientTestSuite.h b/contrib/libpoco/Net/testsuite/src/NTPClientTestSuite.h deleted file mode 100644 index dcafdb3e428..00000000000 --- a/contrib/libpoco/Net/testsuite/src/NTPClientTestSuite.h +++ /dev/null @@ -1,29 +0,0 @@ -// -// NTPClientTestSuite.h -// -// $Id: //poco/1.4/Net/testsuite/src/NTPClientTestSuite.h#1 $ -// -// Definition of the NTPClientTestSuite class. -// -// Copyright (c) 2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef NTPClientTestSuite_INCLUDED -#define NTPClientTestSuite_INCLUDED - - -#include "CppUnit/TestSuite.h" - - -class NTPClientTestSuite -{ -public: - static CppUnit::Test* suite(); -}; - - -#endif // NTPClientTestSuite_INCLUDED diff --git a/contrib/libpoco/Net/testsuite/src/NameValueCollectionTest.cpp b/contrib/libpoco/Net/testsuite/src/NameValueCollectionTest.cpp deleted file mode 100644 index 7bf30e328ae..00000000000 --- a/contrib/libpoco/Net/testsuite/src/NameValueCollectionTest.cpp +++ /dev/null @@ -1,128 +0,0 @@ -// -// NameValueCollectionTest.cpp -// -// $Id: //poco/1.4/Net/testsuite/src/NameValueCollectionTest.cpp#1 $ -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "NameValueCollectionTest.h" -#include "CppUnit/TestCaller.h" -#include "CppUnit/TestSuite.h" -#include "Poco/Net/NameValueCollection.h" -#include "Poco/Exception.h" - - -using Poco::Net::NameValueCollection; -using Poco::NotFoundException; - - -NameValueCollectionTest::NameValueCollectionTest(const std::string& name): CppUnit::TestCase(name) -{ -} - - -NameValueCollectionTest::~NameValueCollectionTest() -{ -} - - -void NameValueCollectionTest::testNameValueCollection() -{ - NameValueCollection nvc; - - assert (nvc.empty()); - assert (nvc.size() == 0); - - nvc.set("name", "value"); - assert (!nvc.empty()); - assert (nvc["name"] == "value"); - assert (nvc["Name"] == "value"); - - nvc.set("name2", "value2"); - assert (nvc.get("name2") == "value2"); - assert (nvc.get("NAME2") == "value2"); - - assert (nvc.size() == 2); - - try - { - std::string value = nvc.get("name3"); - fail("not found - must throw"); - } - catch (NotFoundException&) - { - } - - try - { - std::string value = nvc["name3"]; - fail("not found - must throw"); - } - catch (NotFoundException&) - { - } - - assert (nvc.get("name", "default") == "value"); - assert (nvc.get("name3", "default") == "default"); - - assert (nvc.has("name")); - assert (nvc.has("name2")); - assert (!nvc.has("name3")); - - nvc.add("name3", "value3"); - assert (nvc.get("name3") == "value3"); - - nvc.add("name3", "value31"); - - NameValueCollection::ConstIterator it = nvc.find("Name3"); - assert (it != nvc.end()); - std::string v1 = it->second; - assert (it->first == "name3"); - ++it; - assert (it != nvc.end()); - std::string v2 = it->second; - assert (it->first == "name3"); - - assert ((v1 == "value3" && v2 == "value31") || (v1 == "value31" && v2 == "value3")); - - nvc.erase("name3"); - assert (!nvc.has("name3")); - assert (nvc.find("name3") == nvc.end()); - - it = nvc.begin(); - assert (it != nvc.end()); - ++it; - assert (it != nvc.end()); - ++it; - assert (it == nvc.end()); - - nvc.clear(); - assert (nvc.empty()); - - assert (nvc.size() == 0); -} - - -void NameValueCollectionTest::setUp() -{ -} - - -void NameValueCollectionTest::tearDown() -{ -} - - -CppUnit::Test* NameValueCollectionTest::suite() -{ - CppUnit::TestSuite* pSuite = new CppUnit::TestSuite("NameValueCollectionTest"); - - CppUnit_addTest(pSuite, NameValueCollectionTest, testNameValueCollection); - - return pSuite; -} diff --git a/contrib/libpoco/Net/testsuite/src/NameValueCollectionTest.h b/contrib/libpoco/Net/testsuite/src/NameValueCollectionTest.h deleted file mode 100644 index 947f932c398..00000000000 --- a/contrib/libpoco/Net/testsuite/src/NameValueCollectionTest.h +++ /dev/null @@ -1,40 +0,0 @@ -// -// NameValueCollectionTest.h -// -// $Id: //poco/1.4/Net/testsuite/src/NameValueCollectionTest.h#1 $ -// -// Definition of the NameValueCollectionTest class. -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef NameValueCollectionTest_INCLUDED -#define NameValueCollectionTest_INCLUDED - - -#include "Poco/Net/Net.h" -#include "CppUnit/TestCase.h" - - -class NameValueCollectionTest: public CppUnit::TestCase -{ -public: - NameValueCollectionTest(const std::string& name); - ~NameValueCollectionTest(); - - void testNameValueCollection(); - - void setUp(); - void tearDown(); - - static CppUnit::Test* suite(); - -private: -}; - - -#endif // NameValueCollectionTest_INCLUDED diff --git a/contrib/libpoco/Net/testsuite/src/NetCoreTestSuite.cpp b/contrib/libpoco/Net/testsuite/src/NetCoreTestSuite.cpp deleted file mode 100644 index 933ea9318a4..00000000000 --- a/contrib/libpoco/Net/testsuite/src/NetCoreTestSuite.cpp +++ /dev/null @@ -1,31 +0,0 @@ -// -// NetCoreTestSuite.cpp -// -// $Id: //poco/1.4/Net/testsuite/src/NetCoreTestSuite.cpp#1 $ -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "NetCoreTestSuite.h" -#include "IPAddressTest.h" -#include "SocketAddressTest.h" -#include "DNSTest.h" -#include "NetworkInterfaceTest.h" - - -CppUnit::Test* NetCoreTestSuite::suite() -{ - CppUnit::TestSuite* pSuite = new CppUnit::TestSuite("NetCoreTestSuite"); - - pSuite->addTest(IPAddressTest::suite()); - pSuite->addTest(SocketAddressTest::suite()); - pSuite->addTest(DNSTest::suite()); -#ifdef POCO_NET_HAS_INTERFACE - pSuite->addTest(NetworkInterfaceTest::suite()); -#endif // POCO_NET_HAS_INTERFACE - return pSuite; -} diff --git a/contrib/libpoco/Net/testsuite/src/NetCoreTestSuite.h b/contrib/libpoco/Net/testsuite/src/NetCoreTestSuite.h deleted file mode 100644 index f7f6c03da40..00000000000 --- a/contrib/libpoco/Net/testsuite/src/NetCoreTestSuite.h +++ /dev/null @@ -1,29 +0,0 @@ -// -// NetCoreTestSuite.h -// -// $Id: //poco/1.4/Net/testsuite/src/NetCoreTestSuite.h#1 $ -// -// Definition of the NetCoreTestSuite class. -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef NetCoreTestSuite_INCLUDED -#define NetCoreTestSuite_INCLUDED - - -#include "CppUnit/TestSuite.h" - - -class NetCoreTestSuite -{ -public: - static CppUnit::Test* suite(); -}; - - -#endif // NetCoreTestSuite_INCLUDED diff --git a/contrib/libpoco/Net/testsuite/src/NetTestSuite.cpp b/contrib/libpoco/Net/testsuite/src/NetTestSuite.cpp deleted file mode 100644 index 7d28084ea61..00000000000 --- a/contrib/libpoco/Net/testsuite/src/NetTestSuite.cpp +++ /dev/null @@ -1,54 +0,0 @@ -// -// NetTestSuite.cpp -// -// $Id: //poco/1.4/Net/testsuite/src/NetTestSuite.cpp#2 $ -// -// Copyright (c) 2005-2012, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "NetTestSuite.h" -#include "NetCoreTestSuite.h" -#include "SocketsTestSuite.h" -#include "MessagesTestSuite.h" -#include "HTTPTestSuite.h" -#include "HTTPClientTestSuite.h" -#include "TCPServerTestSuite.h" -#include "HTTPServerTestSuite.h" -#include "HTMLTestSuite.h" -#include "ReactorTestSuite.h" -#include "FTPClientTestSuite.h" -#include "MailTestSuite.h" -#include "ICMPClientTestSuite.h" -#include "NTPClientTestSuite.h" -#include "WebSocketTestSuite.h" -#include "OAuthTestSuite.h" -#include "SyslogTest.h" - - -CppUnit::Test* NetTestSuite::suite() -{ - CppUnit::TestSuite* pSuite = new CppUnit::TestSuite("NetTestSuite"); - - pSuite->addTest(NetCoreTestSuite::suite()); - pSuite->addTest(SocketsTestSuite::suite()); - pSuite->addTest(MessagesTestSuite::suite()); - pSuite->addTest(HTTPTestSuite::suite()); - pSuite->addTest(HTTPClientTestSuite::suite()); - pSuite->addTest(TCPServerTestSuite::suite()); - pSuite->addTest(HTTPServerTestSuite::suite()); - pSuite->addTest(HTMLTestSuite::suite()); - pSuite->addTest(ReactorTestSuite::suite()); - pSuite->addTest(FTPClientTestSuite::suite()); - pSuite->addTest(MailTestSuite::suite()); - pSuite->addTest(ICMPClientTestSuite::suite()); - pSuite->addTest(NTPClientTestSuite::suite()); - pSuite->addTest(WebSocketTestSuite::suite()); - pSuite->addTest(OAuthTestSuite::suite()); - pSuite->addTest(SyslogTest::suite()); - - return pSuite; -} diff --git a/contrib/libpoco/Net/testsuite/src/NetTestSuite.h b/contrib/libpoco/Net/testsuite/src/NetTestSuite.h deleted file mode 100644 index 9b04efad802..00000000000 --- a/contrib/libpoco/Net/testsuite/src/NetTestSuite.h +++ /dev/null @@ -1,29 +0,0 @@ -// -// NetTestSuite.h -// -// $Id: //poco/1.4/Net/testsuite/src/NetTestSuite.h#1 $ -// -// Definition of the NetTestSuite class. -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef NetTestSuite_INCLUDED -#define NetTestSuite_INCLUDED - - -#include "CppUnit/TestSuite.h" - - -class NetTestSuite -{ -public: - static CppUnit::Test* suite(); -}; - - -#endif // NetTestSuite_INCLUDED diff --git a/contrib/libpoco/Net/testsuite/src/NetworkInterfaceTest.cpp b/contrib/libpoco/Net/testsuite/src/NetworkInterfaceTest.cpp deleted file mode 100644 index 840d8d0d2b1..00000000000 --- a/contrib/libpoco/Net/testsuite/src/NetworkInterfaceTest.cpp +++ /dev/null @@ -1,259 +0,0 @@ -// -// NetworkInterfaceTest.cpp -// -// $Id: //poco/1.4/Net/testsuite/src/NetworkInterfaceTest.cpp#1 $ -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "NetworkInterfaceTest.h" - - -#ifdef POCO_NET_HAS_INTERFACE - - -#include "CppUnit/TestCaller.h" -#include "CppUnit/TestSuite.h" -#include "Poco/Net/NetworkInterface.h" -#include "Poco/Net/IPAddress.h" -#include -#include - - -using Poco::Net::NetworkInterface; -using Poco::Net::IPAddress; -using Poco::NotFoundException; - - -NetworkInterfaceTest::NetworkInterfaceTest(const std::string& name): CppUnit::TestCase(name) -{ -} - - -NetworkInterfaceTest::~NetworkInterfaceTest() -{ -} - - -void NetworkInterfaceTest::testMap() -{ - NetworkInterface::Map m = NetworkInterface::map(false, false); - assert (!m.empty()); - for (NetworkInterface::Map::const_iterator it = m.begin(); it != m.end(); ++it) - { - std::cout << std::endl << "=============" << std::endl; - - std::cout << "Index: " << it->second.index() << std::endl; - std::cout << "Name: " << it->second.name() << std::endl; - std::cout << "DisplayName: " << it->second.displayName() << std::endl; - std::cout << "Status: " << (it->second.isUp() ? "Up" : "Down") << std::endl; - - NetworkInterface::MACAddress mac(it->second.macAddress()); - if (!mac.empty() && (it->second.type() != NetworkInterface::NI_TYPE_SOFTWARE_LOOPBACK)) - std::cout << "MAC Address: (" << it->second.type() << ") " << mac << std::endl; - - typedef NetworkInterface::AddressList List; - const List& ipList = it->second.addressList(); - List::const_iterator ipIt = ipList.begin(); - List::const_iterator ipEnd = ipList.end(); - for (int counter = 0; ipIt != ipEnd; ++ipIt, ++counter) - { - std::cout << std::endl << "----------" << std::endl; - std::cout << "Address " << counter << std::endl; - std::cout << "----------" << std::endl; - std::cout << "Address: " << ipIt->get().toString() << std::endl; - IPAddress addr = ipIt->get(); - if (!addr.isWildcard()) std::cout << "Subnet: " << addr.toString() << " (/" << addr.prefixLength() << ")" << std::endl; - addr = ipIt->get(); - if (!addr.isWildcard()) std::cout << "Broadcast: " << addr.toString() << std::endl; - } - - std::cout << "=============" << std::endl << std::endl; - } -} - - -void NetworkInterfaceTest::testList() -{ - NetworkInterface::List list = NetworkInterface::list(false, false); - assert (!list.empty()); - for (NetworkInterface::NetworkInterfaceList::const_iterator it = list.begin(); it != list.end(); ++it) - { - std::cout << std::endl << "==============" << std::endl; - - std::cout << "Index: " << it->index() << std::endl; - std::cout << "Name: " << it->name() << std::endl; - std::cout << "DisplayName: " << it->displayName() << std::endl; - std::cout << "Status: " << (it->isUp() ? "Up" : "Down") << std::endl; - - NetworkInterface::MACAddress mac(it->macAddress()); - if (!mac.empty() && (it->type() != NetworkInterface::NI_TYPE_SOFTWARE_LOOPBACK)) - std::cout << "MAC Address: (" << it->type() << ") " << mac << std::endl; - - typedef NetworkInterface::AddressList List; - const List& ipList = it->addressList(); - List::const_iterator ipIt = ipList.begin(); - List::const_iterator ipEnd = ipList.end(); - for (int counter = 0; ipIt != ipEnd; ++ipIt, ++counter) - { - std::cout << "IP Address: " << ipIt->get().toString() << std::endl; - IPAddress addr = ipIt->get(); - if (!addr.isWildcard()) std::cout << "Subnet: " << ipIt->get().toString() << " (/" << ipIt->get().prefixLength() << ")" << std::endl; - addr = ipIt->get(); - if (!addr.isWildcard()) std::cout << "Broadcast: " << ipIt->get().toString() << std::endl; - } - - std::cout << "==============" << std::endl << std::endl; - } -} - - -void NetworkInterfaceTest::testForName() -{ - NetworkInterface::Map map = NetworkInterface::map(); - for (NetworkInterface::Map::const_iterator it = map.begin(); it != map.end(); ++it) - { - NetworkInterface ifc = NetworkInterface::forName(it->second.name()); - assert (ifc.name() == it->second.name()); - } -} - - -void NetworkInterfaceTest::testForAddress() -{ - NetworkInterface::Map map = NetworkInterface::map(); - for (NetworkInterface::Map::const_iterator it = map.begin(); it != map.end(); ++it) - { - // not all interfaces have IP configured - if (it->second.addressList().empty()) continue; - - if (it->second.supportsIPv4()) - { - NetworkInterface ifc = NetworkInterface::forAddress(it->second.firstAddress(IPAddress::IPv4)); - assert (ifc.firstAddress(IPAddress::IPv4) == it->second.firstAddress(IPAddress::IPv4)); - - IPAddress addr(IPAddress::IPv4); - assert (addr.isWildcard()); - it->second.firstAddress(addr, IPAddress::IPv4); - assert (!addr.isWildcard()); - } - else - { - try - { - it->second.firstAddress(IPAddress::IPv4); - fail ("must throw"); - } - catch (NotFoundException&) { } - - IPAddress addr(IPAddress::IPv4); - assert (addr.isWildcard()); - it->second.firstAddress(addr, IPAddress::IPv4); - assert (addr.isWildcard()); - } - } -} - - -void NetworkInterfaceTest::testForIndex() -{ - NetworkInterface::Map map = NetworkInterface::map(); - for (NetworkInterface::Map::const_iterator it = map.begin(); it != map.end(); ++it) - { - NetworkInterface ifc = NetworkInterface::forIndex(it->second.index()); - assert (ifc.index() == it->second.index()); - } -} - - -void NetworkInterfaceTest::testMapIpOnly() -{ - NetworkInterface::Map m = NetworkInterface::map(true, false); - assert (!m.empty()); - - std::cout << std::endl; - for (NetworkInterface::Map::const_iterator it = m.begin(); it != m.end(); ++it) - { - assert(it->second.supportsIPv4() || it->second.supportsIPv6()); - std::cout << "Interface: (" << it->second.index() << ")" << std::endl; - std::cout << "Address: " << it->second.address().toString() << std::endl; - NetworkInterface::MACAddress mac(it->second.macAddress()); - if (!mac.empty() && (it->second.type() != NetworkInterface::NI_TYPE_SOFTWARE_LOOPBACK)) - std::cout << "MAC Address:" << mac << std::endl; - } -} - - -void NetworkInterfaceTest::testMapUpOnly() -{ - NetworkInterface::Map m = NetworkInterface::map(false, true); - assert (!m.empty()); - for (NetworkInterface::Map::const_iterator it = m.begin(); it != m.end(); ++it) - { - assert(it->second.isUp()); - } -} - - -void NetworkInterfaceTest::testListMapConformance() -{ - NetworkInterface::Map m = NetworkInterface::map(false, false); - assert (!m.empty()); - NetworkInterface::List l = NetworkInterface::list(false, false); - assert (!l.empty()); - - int counter = 0; - NetworkInterface::Map::const_iterator mapIt = m.begin(); - NetworkInterface::List::const_iterator listIt = l.begin(); - for (; mapIt != m.end(); ++mapIt) - { - NetworkInterface::MACAddress mac(mapIt->second.macAddress()); - - typedef NetworkInterface::AddressList List; - const List& ipList = mapIt->second.addressList(); - List::const_iterator ipIt = ipList.begin(); - List::const_iterator ipEnd = ipList.end(); - for (; ipIt != ipEnd; ++ipIt, ++counter, ++listIt) - { - NetworkInterface::MACAddress lmac = listIt->macAddress(); - assert (lmac == mac); - if (listIt == l.end()) fail ("wrong number of list items"); - } - } - - assert (counter == l.size()); -} - - -void NetworkInterfaceTest::setUp() -{ -} - - -void NetworkInterfaceTest::tearDown() -{ -} - - -CppUnit::Test* NetworkInterfaceTest::suite() -{ - CppUnit::TestSuite* pSuite = new CppUnit::TestSuite("NetworkInterfaceTest"); - - CppUnit_addTest(pSuite, NetworkInterfaceTest, testList); - CppUnit_addTest(pSuite, NetworkInterfaceTest, testMap); - CppUnit_addTest(pSuite, NetworkInterfaceTest, testForName); - CppUnit_addTest(pSuite, NetworkInterfaceTest, testForAddress); - CppUnit_addTest(pSuite, NetworkInterfaceTest, testForIndex); - CppUnit_addTest(pSuite, NetworkInterfaceTest, testMapIpOnly); - CppUnit_addTest(pSuite, NetworkInterfaceTest, testMapUpOnly); - CppUnit_addTest(pSuite, NetworkInterfaceTest, testListMapConformance); - - return pSuite; -} - - -#endif // POCO_NET_HAS_INTERFACE diff --git a/contrib/libpoco/Net/testsuite/src/NetworkInterfaceTest.h b/contrib/libpoco/Net/testsuite/src/NetworkInterfaceTest.h deleted file mode 100644 index a71d8f8739c..00000000000 --- a/contrib/libpoco/Net/testsuite/src/NetworkInterfaceTest.h +++ /dev/null @@ -1,55 +0,0 @@ -// -// NetworkInterfaceTest.h -// -// $Id: //poco/1.4/Net/testsuite/src/NetworkInterfaceTest.h#1 $ -// -// Definition of the NetworkInterfaceTest class. -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef NetworkInterfaceTest_INCLUDED -#define NetworkInterfaceTest_INCLUDED - - -#include "Poco/Net/Net.h" - - -#ifdef POCO_NET_HAS_INTERFACE - - -#include "CppUnit/TestCase.h" - - -class NetworkInterfaceTest: public CppUnit::TestCase -{ -public: - NetworkInterfaceTest(const std::string& name); - ~NetworkInterfaceTest(); - - void testMap(); - void testList(); - void testForName(); - void testForAddress(); - void testForIndex(); - void testMapIpOnly(); - void testMapUpOnly(); - void testListMapConformance(); - - void setUp(); - void tearDown(); - - static CppUnit::Test* suite(); - -private: -}; - - -#endif // POCO_NET_HAS_INTERFACE - - -#endif // NetworkInterfaceTest_INCLUDED diff --git a/contrib/libpoco/Net/testsuite/src/OAuth10CredentialsTest.cpp b/contrib/libpoco/Net/testsuite/src/OAuth10CredentialsTest.cpp deleted file mode 100644 index c47b8ba6e24..00000000000 --- a/contrib/libpoco/Net/testsuite/src/OAuth10CredentialsTest.cpp +++ /dev/null @@ -1,266 +0,0 @@ -// -// OAuth10CredentialsTest.cpp -// -// $Id$ -// -// Copyright (c) 2014, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "OAuth10CredentialsTest.h" -#include "CppUnit/TestCaller.h" -#include "CppUnit/TestSuite.h" -#include "Poco/Net/HTTPRequest.h" -#include "Poco/Net/HTTPResponse.h" -#include "Poco/Net/OAuth10Credentials.h" -#include "Poco/Net/NetException.h" -#include "Poco/Net/HTMLForm.h" -#include "Poco/URI.h" - - -using Poco::Net::HTTPRequest; -using Poco::Net::HTTPResponse; -using Poco::Net::OAuth10Credentials; -using Poco::Net::NotAuthenticatedException; -using Poco::Net::HTMLForm; -using Poco::URI; - - -OAuth10CredentialsTest::OAuth10CredentialsTest(const std::string& name): CppUnit::TestCase(name) -{ -} - - -OAuth10CredentialsTest::~OAuth10CredentialsTest() -{ -} - - -void OAuth10CredentialsTest::testCallback() -{ - // Note: Request taken from - // - // POST /oauth/request_token HTTP/1.1 - // Host: api.twitter.com - // Authorization: - // OAuth oauth_callback="http%3A%2F%2Flocalhost%2Fsign-in-with-twitter%2F", - // oauth_consumer_key="cChZNFj6T5R0TigYB9yd1w", - // oauth_nonce="ea9ec8429b68d6b77cd5600adbbb0456", - // oauth_signature="F1Li3tvehgcraF8DMJ7OyxO4w9Y%3D", - // oauth_signature_method="HMAC-SHA1", - // oauth_timestamp="1318467427", - // oauth_version="1.0" - - - URI uri("https://api.twitter.com/oauth/request_token"); - OAuth10Credentials creds("cChZNFj6T5R0TigYB9yd1w", "L8qq9PZyRg6ieKGEKhZolGC0vJWLw8iEJ88DRdyOg"); - creds.setCallback("http://localhost/sign-in-with-twitter/"); - creds.nonceAndTimestampForTesting("ea9ec8429b68d6b77cd5600adbbb0456", "1318467427"); - HTTPRequest request(HTTPRequest::HTTP_POST, uri.getPathEtc()); - - creds.authenticate(request, uri); - - std::string auth = request.get("Authorization"); - assert (auth == "OAuth" - " oauth_consumer_key=\"cChZNFj6T5R0TigYB9yd1w\"," - " oauth_nonce=\"ea9ec8429b68d6b77cd5600adbbb0456\"," - " oauth_signature=\"F1Li3tvehgcraF8DMJ7OyxO4w9Y%3D\"," - " oauth_signature_method=\"HMAC-SHA1\"," - " oauth_timestamp=\"1318467427\"," - " oauth_callback=\"http%3A%2F%2Flocalhost%2Fsign-in-with-twitter%2F\"," - " oauth_version=\"1.0\""); -} - - -void OAuth10CredentialsTest::testParams() -{ - // Note: Request taken from - // and . - // - // POST /1/statuses/update.json?include_entities=true HTTP/1.1 - // Content-Type: application/x-www-form-urlencoded - // Authorization: - // OAuth oauth_consumer_key="xvz1evFS4wEEPTGEFPHBog", - // oauth_nonce="kYjzVBB8Y0ZFabxSWbWovY3uYSQ2pTgmZeNu2VS4cg", - // oauth_signature="tnnArxj06cWHq44gCs1OSKk%2FjLY%3D", - // oauth_signature_method="HMAC-SHA1", - // oauth_timestamp="1318622958", - // oauth_token="370773112-GmHxMAgYyLbNEtIKZeRNFsMKPR9EyMZeS9weJAEb", - // oauth_version="1.0" - // Content-Length: 76 - // Host: api.twitter.com - // - // status=Hello%20Ladies%20%2b%20Gentlemen%2c%20a%20signed%20OAuth%20request%21 - - URI uri("https://api.twitter.com/1/statuses/update.json?include_entities=true"); - OAuth10Credentials creds( - "xvz1evFS4wEEPTGEFPHBog", - "kAcSOqF21Fu85e7zjz7ZN2U4ZRhfV3WpwPAoE3Z7kBw", - "370773112-GmHxMAgYyLbNEtIKZeRNFsMKPR9EyMZeS9weJAEb", - "LswwdoUaIvS8ltyTt5jkRh4J50vUPVVHtR2YPi5kE" - ); - creds.nonceAndTimestampForTesting("kYjzVBB8Y0ZFabxSWbWovY3uYSQ2pTgmZeNu2VS4cg", "1318622958"); - HTTPRequest request(HTTPRequest::HTTP_POST, uri.getPathEtc()); - - HTMLForm params; - params.set("include_entities", "true"); - params.set("status", "Hello Ladies + Gentlemen, a signed OAuth request!"); - - creds.authenticate(request, uri, params); - - std::string auth = request.get("Authorization"); - assert (auth == "OAuth" - " oauth_consumer_key=\"xvz1evFS4wEEPTGEFPHBog\"," - " oauth_nonce=\"kYjzVBB8Y0ZFabxSWbWovY3uYSQ2pTgmZeNu2VS4cg\"," - " oauth_signature=\"tnnArxj06cWHq44gCs1OSKk%2FjLY%3D\"," - " oauth_signature_method=\"HMAC-SHA1\"," - " oauth_timestamp=\"1318622958\"," - " oauth_token=\"370773112-GmHxMAgYyLbNEtIKZeRNFsMKPR9EyMZeS9weJAEb\"," - " oauth_version=\"1.0\""); -} - - -void OAuth10CredentialsTest::testRealm() -{ - // Note: Request taken from - // and . - // - // POST /1/statuses/update.json?include_entities=true HTTP/1.1 - // Content-Type: application/x-www-form-urlencoded - // Authorization: - // OAuth realm="Twitter API" - // oauth_consumer_key="xvz1evFS4wEEPTGEFPHBog", - // oauth_nonce="kYjzVBB8Y0ZFabxSWbWovY3uYSQ2pTgmZeNu2VS4cg", - // oauth_signature="tnnArxj06cWHq44gCs1OSKk%2FjLY%3D", - // oauth_signature_method="HMAC-SHA1", - // oauth_timestamp="1318622958", - // oauth_token="370773112-GmHxMAgYyLbNEtIKZeRNFsMKPR9EyMZeS9weJAEb", - // oauth_version="1.0" - // Content-Length: 76 - // Host: api.twitter.com - // - // status=Hello%20Ladies%20%2b%20Gentlemen%2c%20a%20signed%20OAuth%20request%21 - - URI uri("https://api.twitter.com/1/statuses/update.json?include_entities=true"); - OAuth10Credentials creds( - "xvz1evFS4wEEPTGEFPHBog", - "kAcSOqF21Fu85e7zjz7ZN2U4ZRhfV3WpwPAoE3Z7kBw", - "370773112-GmHxMAgYyLbNEtIKZeRNFsMKPR9EyMZeS9weJAEb", - "LswwdoUaIvS8ltyTt5jkRh4J50vUPVVHtR2YPi5kE" - ); - creds.setRealm("Twitter API"); - creds.nonceAndTimestampForTesting("kYjzVBB8Y0ZFabxSWbWovY3uYSQ2pTgmZeNu2VS4cg", "1318622958"); - HTTPRequest request(HTTPRequest::HTTP_POST, uri.getPathEtc()); - - HTMLForm params; - params.set("include_entities", "true"); - params.set("status", "Hello Ladies + Gentlemen, a signed OAuth request!"); - - creds.authenticate(request, uri, params); - - std::string auth = request.get("Authorization"); - assert (auth == "OAuth" - " realm=\"Twitter API\"," - " oauth_consumer_key=\"xvz1evFS4wEEPTGEFPHBog\"," - " oauth_nonce=\"kYjzVBB8Y0ZFabxSWbWovY3uYSQ2pTgmZeNu2VS4cg\"," - " oauth_signature=\"tnnArxj06cWHq44gCs1OSKk%2FjLY%3D\"," - " oauth_signature_method=\"HMAC-SHA1\"," - " oauth_timestamp=\"1318622958\"," - " oauth_token=\"370773112-GmHxMAgYyLbNEtIKZeRNFsMKPR9EyMZeS9weJAEb\"," - " oauth_version=\"1.0\""); -} - - -void OAuth10CredentialsTest::testPlaintext() -{ - URI uri("https://api.twitter.com/oauth/request_token"); - OAuth10Credentials creds("consumerKey", "consumerSecret"); - creds.setCallback("http://localhost/sign-in-with-twitter/"); - HTTPRequest request(HTTPRequest::HTTP_POST, uri.getPathEtc()); - - creds.authenticate(request, uri, OAuth10Credentials::SIGN_PLAINTEXT); - - std::string auth = request.get("Authorization"); - - assert (auth == "OAuth" - " oauth_consumer_key=\"consumerKey\"," - " oauth_signature=\"consumerSecret%26\"," - " oauth_signature_method=\"PLAINTEXT\"," - " oauth_callback=\"http%3A%2F%2Flocalhost%2Fsign-in-with-twitter%2F\"," - " oauth_version=\"1.0\""); -} - - -void OAuth10CredentialsTest::testVerify() -{ - URI uri("https://api.twitter.com/1/statuses/update.json?include_entities=true"); - HTTPRequest request(HTTPRequest::HTTP_POST, uri.getPathEtc()); - request.set("Authorization", "OAuth" - " oauth_consumer_key=\"xvz1evFS4wEEPTGEFPHBog\"," - " oauth_nonce=\"kYjzVBB8Y0ZFabxSWbWovY3uYSQ2pTgmZeNu2VS4cg\"," - " oauth_signature=\"tnnArxj06cWHq44gCs1OSKk%2FjLY%3D\"," - " oauth_signature_method=\"HMAC-SHA1\"," - " oauth_timestamp=\"1318622958\"," - " oauth_token=\"370773112-GmHxMAgYyLbNEtIKZeRNFsMKPR9EyMZeS9weJAEb\"," - " oauth_version=\"1.0\""); - - OAuth10Credentials creds(request); - assert (creds.getConsumerKey() == "xvz1evFS4wEEPTGEFPHBog"); - assert (creds.getToken() == "370773112-GmHxMAgYyLbNEtIKZeRNFsMKPR9EyMZeS9weJAEb"); - creds.setConsumerSecret("kAcSOqF21Fu85e7zjz7ZN2U4ZRhfV3WpwPAoE3Z7kBw"); - creds.setTokenSecret("LswwdoUaIvS8ltyTt5jkRh4J50vUPVVHtR2YPi5kE"); - - HTMLForm params; - params.read(uri.getRawQuery()); - params.read("status=Hello%20Ladies%20%2b%20Gentlemen%2c%20a%20signed%20OAuth%20request%21"); - - assert (creds.verify(request, uri, params)); -} - - -void OAuth10CredentialsTest::testVerifyPlaintext() -{ - URI uri("https://api.twitter.com/oauth/request_token"); - HTTPRequest request(HTTPRequest::HTTP_POST, uri.getPathEtc()); - request.set("Authorization", "OAuth" - " oauth_consumer_key=\"consumerKey\"," - " oauth_signature=\"consumerSecret%26\"," - " oauth_signature_method=\"PLAINTEXT\"," - " oauth_callback=\"http%3A%2F%2Flocalhost%2Fsign-in-with-twitter%2F\"," - " oauth_version=\"1.0\""); - - OAuth10Credentials creds(request); - assert (creds.getConsumerKey() == "consumerKey"); - creds.setConsumerSecret("consumerSecret"); - - assert (creds.verify(request, uri)); - assert (creds.getCallback() == "http://localhost/sign-in-with-twitter/"); -} - - -void OAuth10CredentialsTest::setUp() -{ -} - - -void OAuth10CredentialsTest::tearDown() -{ -} - - -CppUnit::Test* OAuth10CredentialsTest::suite() -{ - CppUnit::TestSuite* pSuite = new CppUnit::TestSuite("OAuth10CredentialsTest"); - - CppUnit_addTest(pSuite, OAuth10CredentialsTest, testCallback); - CppUnit_addTest(pSuite, OAuth10CredentialsTest, testParams); - CppUnit_addTest(pSuite, OAuth10CredentialsTest, testRealm); - CppUnit_addTest(pSuite, OAuth10CredentialsTest, testPlaintext); - CppUnit_addTest(pSuite, OAuth10CredentialsTest, testVerify); - CppUnit_addTest(pSuite, OAuth10CredentialsTest, testVerifyPlaintext); - - return pSuite; -} diff --git a/contrib/libpoco/Net/testsuite/src/OAuth10CredentialsTest.h b/contrib/libpoco/Net/testsuite/src/OAuth10CredentialsTest.h deleted file mode 100644 index eb035426f9c..00000000000 --- a/contrib/libpoco/Net/testsuite/src/OAuth10CredentialsTest.h +++ /dev/null @@ -1,45 +0,0 @@ -// -// OAuth10CredentialsTest.h -// -// $Id$ -// -// Definition of the OAuth10CredentialsTest class. -// -// Copyright (c) 2014, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef OAuth10CredentialsTest_INCLUDED -#define OAuth10CredentialsTest_INCLUDED - - -#include "Poco/Net/Net.h" -#include "CppUnit/TestCase.h" - - -class OAuth10CredentialsTest: public CppUnit::TestCase -{ -public: - OAuth10CredentialsTest(const std::string& name); - ~OAuth10CredentialsTest(); - - void testCallback(); - void testParams(); - void testRealm(); - void testPlaintext(); - void testVerify(); - void testVerifyPlaintext(); - - void setUp(); - void tearDown(); - - static CppUnit::Test* suite(); - -private: -}; - - -#endif // OAuth10CredentialsTest_INCLUDED diff --git a/contrib/libpoco/Net/testsuite/src/OAuth20CredentialsTest.cpp b/contrib/libpoco/Net/testsuite/src/OAuth20CredentialsTest.cpp deleted file mode 100644 index 6735cf0f8d6..00000000000 --- a/contrib/libpoco/Net/testsuite/src/OAuth20CredentialsTest.cpp +++ /dev/null @@ -1,109 +0,0 @@ -// -// OAuth20CredentialsTest.cpp -// -// $Id$ -// -// Copyright (c) 2014, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "OAuth20CredentialsTest.h" -#include "CppUnit/TestCaller.h" -#include "CppUnit/TestSuite.h" -#include "Poco/Net/HTTPRequest.h" -#include "Poco/Net/OAuth20Credentials.h" -#include "Poco/Net/NetException.h" - - -using Poco::Net::HTTPRequest; -using Poco::Net::OAuth20Credentials; -using Poco::Net::NotAuthenticatedException; - - -OAuth20CredentialsTest::OAuth20CredentialsTest(const std::string& name): CppUnit::TestCase(name) -{ -} - - -OAuth20CredentialsTest::~OAuth20CredentialsTest() -{ -} - - -void OAuth20CredentialsTest::testAuthorize() -{ - OAuth20Credentials creds("s3cr3tt0k3n"); - HTTPRequest request(HTTPRequest::HTTP_GET, "/"); - creds.authenticate(request); - std::string auth = request.get("Authorization"); - assert (auth == "Bearer s3cr3tt0k3n"); -} - - -void OAuth20CredentialsTest::testAuthorizeCustomScheme() -{ - OAuth20Credentials creds("s3cr3tt0k3n", "token"); - HTTPRequest request(HTTPRequest::HTTP_GET, "/"); - creds.authenticate(request); - std::string auth = request.get("Authorization"); - assert (auth == "token s3cr3tt0k3n"); -} - - -void OAuth20CredentialsTest::testExtract() -{ - HTTPRequest request(HTTPRequest::HTTP_GET, "/"); - request.set("Authorization", "Bearer s3cr3tt0k3n"); - OAuth20Credentials creds(request); - assert (creds.getBearerToken() == "s3cr3tt0k3n"); -} - - -void OAuth20CredentialsTest::testExtractCustomScheme() -{ - HTTPRequest request(HTTPRequest::HTTP_GET, "/"); - request.set("Authorization", "token s3cr3tt0k3n"); - OAuth20Credentials creds(request, "token"); - assert (creds.getBearerToken() == "s3cr3tt0k3n"); -} - - -void OAuth20CredentialsTest::testExtractNoCreds() -{ - HTTPRequest request(HTTPRequest::HTTP_GET, "/"); - try - { - OAuth20Credentials creds(request); - fail("no credentials - must throw"); - } - catch (NotAuthenticatedException&) - { - } -} - - -void OAuth20CredentialsTest::setUp() -{ -} - - -void OAuth20CredentialsTest::tearDown() -{ -} - - -CppUnit::Test* OAuth20CredentialsTest::suite() -{ - CppUnit::TestSuite* pSuite = new CppUnit::TestSuite("OAuth20CredentialsTest"); - - CppUnit_addTest(pSuite, OAuth20CredentialsTest, testAuthorize); - CppUnit_addTest(pSuite, OAuth20CredentialsTest, testAuthorizeCustomScheme); - CppUnit_addTest(pSuite, OAuth20CredentialsTest, testExtract); - CppUnit_addTest(pSuite, OAuth20CredentialsTest, testExtractCustomScheme); - CppUnit_addTest(pSuite, OAuth20CredentialsTest, testExtractNoCreds); - - return pSuite; -} diff --git a/contrib/libpoco/Net/testsuite/src/OAuth20CredentialsTest.h b/contrib/libpoco/Net/testsuite/src/OAuth20CredentialsTest.h deleted file mode 100644 index f146d456ff4..00000000000 --- a/contrib/libpoco/Net/testsuite/src/OAuth20CredentialsTest.h +++ /dev/null @@ -1,44 +0,0 @@ -// -// OAuth20CredentialsTest.h -// -// $Id$ -// -// Definition of the OAuth20CredentialsTest class. -// -// Copyright (c) 2014, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef OAuth20CredentialsTest_INCLUDED -#define OAuth20CredentialsTest_INCLUDED - - -#include "Poco/Net/Net.h" -#include "CppUnit/TestCase.h" - - -class OAuth20CredentialsTest: public CppUnit::TestCase -{ -public: - OAuth20CredentialsTest(const std::string& name); - ~OAuth20CredentialsTest(); - - void testAuthorize(); - void testAuthorizeCustomScheme(); - void testExtract(); - void testExtractCustomScheme(); - void testExtractNoCreds(); - - void setUp(); - void tearDown(); - - static CppUnit::Test* suite(); - -private: -}; - - -#endif // OAuth20CredentialsTest_INCLUDED diff --git a/contrib/libpoco/Net/testsuite/src/OAuthTestSuite.cpp b/contrib/libpoco/Net/testsuite/src/OAuthTestSuite.cpp deleted file mode 100644 index d1ca6f6a1b9..00000000000 --- a/contrib/libpoco/Net/testsuite/src/OAuthTestSuite.cpp +++ /dev/null @@ -1,26 +0,0 @@ -// -// OAuthTestSuite.cpp -// -// $Id$ -// -// Copyright (c) 2014, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "OAuthTestSuite.h" -#include "OAuth10CredentialsTest.h" -#include "OAuth20CredentialsTest.h" - - -CppUnit::Test* OAuthTestSuite::suite() -{ - CppUnit::TestSuite* pSuite = new CppUnit::TestSuite("OAuthTestSuite"); - - pSuite->addTest(OAuth10CredentialsTest::suite()); - pSuite->addTest(OAuth20CredentialsTest::suite()); - - return pSuite; -} diff --git a/contrib/libpoco/Net/testsuite/src/OAuthTestSuite.h b/contrib/libpoco/Net/testsuite/src/OAuthTestSuite.h deleted file mode 100644 index 7ecb345f304..00000000000 --- a/contrib/libpoco/Net/testsuite/src/OAuthTestSuite.h +++ /dev/null @@ -1,29 +0,0 @@ -// -// OAuthTestSuite.h -// -// $Id$ -// -// Definition of the OAuthTestSuite class. -// -// Copyright (c) 2014, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef OAuthTestSuite_INCLUDED -#define OAuthTestSuite_INCLUDED - - -#include "CppUnit/TestSuite.h" - - -class OAuthTestSuite -{ -public: - static CppUnit::Test* suite(); -}; - - -#endif // OAuthTestSuite_INCLUDED diff --git a/contrib/libpoco/Net/testsuite/src/POP3ClientSessionTest.cpp b/contrib/libpoco/Net/testsuite/src/POP3ClientSessionTest.cpp deleted file mode 100644 index 61dd7112b58..00000000000 --- a/contrib/libpoco/Net/testsuite/src/POP3ClientSessionTest.cpp +++ /dev/null @@ -1,298 +0,0 @@ -// -// POP3ClientSessionTest.cpp -// -// $Id: //poco/1.4/Net/testsuite/src/POP3ClientSessionTest.cpp#1 $ -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "POP3ClientSessionTest.h" -#include "CppUnit/TestCaller.h" -#include "CppUnit/TestSuite.h" -#include "DialogServer.h" -#include "Poco/Net/POP3ClientSession.h" -#include "Poco/Net/MailMessage.h" -#include "Poco/Net/NetException.h" - - -using Poco::Net::POP3ClientSession; -using Poco::Net::MessageHeader; -using Poco::Net::MailMessage; -using Poco::Net::POP3Exception; - - -POP3ClientSessionTest::POP3ClientSessionTest(const std::string& name): CppUnit::TestCase(name) -{ -} - - -POP3ClientSessionTest::~POP3ClientSessionTest() -{ -} - - -void POP3ClientSessionTest::testLogin() -{ - DialogServer server; - server.addResponse("+OK POP3 Ready..."); - server.addResponse("+OK USER"); - server.addResponse("+OK PASS"); - server.addResponse("+OK QUIT"); - POP3ClientSession session("localhost", server.port()); - session.login("user", "secret"); - std::string cmd = server.popCommand(); - assert (cmd == "USER user"); - cmd = server.popCommand(); - assert (cmd == "PASS secret"); - session.close(); - cmd = server.popCommand(); - assert (cmd == "QUIT"); -} - - -void POP3ClientSessionTest::testLoginFail() -{ - DialogServer server; - server.addResponse("+OK POP3 Ready..."); - server.addResponse("+OK USER"); - server.addResponse("-ERR PASS"); - server.addResponse("+OK QUIT"); - POP3ClientSession session("localhost", server.port()); - try - { - session.login("user", "secret"); - fail("login failed - must throw"); - } - catch (POP3Exception&) - { - } - session.close(); -} - - -void POP3ClientSessionTest::testMessageCount() -{ - DialogServer server; - server.addResponse("+OK POP3 Ready..."); - server.addResponse("+OK USER"); - server.addResponse("+OK PASS"); - server.addResponse("+OK 42 12345"); - server.addResponse("+OK QUIT"); - POP3ClientSession session("localhost", server.port()); - session.login("user", "secret"); - server.clearCommands(); - int n = session.messageCount(); - std::string cmd = server.popCommand(); - assert (cmd == "STAT"); - assert (n == 42); - session.close(); -} - - -void POP3ClientSessionTest::testList() -{ - DialogServer server; - server.addResponse("+OK POP3 Ready..."); - server.addResponse("+OK USER"); - server.addResponse("+OK PASS"); - server.addResponse( - "+OK Here comes da list\r\n" - "1 1234\r\n" - "2 5678\r\n" - "3 987\r\n" - ".\r\n" - ); - server.addResponse("+OK QUIT"); - POP3ClientSession session("localhost", server.port()); - session.login("user", "secret"); - server.clearCommands(); - std::vector infos; - session.listMessages(infos); - std::string cmd = server.popCommand(); - assert (cmd == "LIST"); - assert (infos.size() == 3); - assert (infos[0].id == 1); - assert (infos[0].size == 1234); - assert (infos[1].id == 2); - assert (infos[1].size == 5678); - assert (infos[2].id == 3); - assert (infos[2].size == 987); - session.close(); -} - - -void POP3ClientSessionTest::testRetrieveMessage() -{ - DialogServer server; - server.addResponse("+OK POP3 Ready..."); - server.addResponse("+OK USER"); - server.addResponse("+OK PASS"); - server.addResponse( - "+OK Here comes the message\r\n" - "From: john.doe@no.where\r\n" - "To: jane.doe@no.where\r\n" - "Subject: test\r\n" - "\r\n" - "Hello Jane,\r\n" - "\r\n" - "blah blah blah...\r\n" - "....\r\n" - "\r\n" - "Yours, John\r\n" - ".\r\n" - ); - server.addResponse("+OK QUIT"); - POP3ClientSession session("localhost", server.port()); - session.login("user", "secret"); - server.clearCommands(); - MailMessage message; - session.retrieveMessage(1, message); - std::string cmd = server.popCommand(); - assert (cmd == "RETR 1"); - - assert (message.getContent() == - "Hello Jane,\r\n" - "\r\n" - "blah blah blah...\r\n" - "...\r\n" - "\r\n" - "Yours, John\r\n" - ); - - session.close(); -} - - -void POP3ClientSessionTest::testRetrieveHeader() -{ - DialogServer server; - server.addResponse("+OK POP3 Ready..."); - server.addResponse("+OK USER"); - server.addResponse("+OK PASS"); - server.addResponse( - "+OK Here comes the message\r\n" - "From: john.doe@no.where\r\n" - "To: jane.doe@no.where\r\n" - "Subject: test\r\n" - "\r\n" - "." - ); - server.addResponse("+OK QUIT"); - POP3ClientSession session("localhost", server.port()); - session.login("user", "secret"); - server.clearCommands(); - MessageHeader header; - session.retrieveHeader(1, header); - std::string cmd = server.popCommand(); - assert (cmd == "TOP 1 0"); - assert (header.get("From") == "john.doe@no.where"); - assert (header.get("To") == "jane.doe@no.where"); - assert (header.get("Subject") == "test"); - session.close(); -} - - -void POP3ClientSessionTest::testRetrieveMessages() -{ - DialogServer server; - server.addResponse("+OK POP3 Ready..."); - server.addResponse("+OK USER"); - server.addResponse("+OK PASS"); - server.addResponse( - "+OK Here comes the message\r\n" - "From: john.doe@no.where\r\n" - "To: jane.doe@no.where\r\n" - "Subject: test\r\n" - "\r\n" - "." - ); - server.addResponse( - "+OK Here comes the message\r\n" - "From: john.doe@no.where\r\n" - "To: jane.doe@no.where\r\n" - "Subject: test\r\n" - "\r\n" - "Hello Jane,\r\n" - "\r\n" - "blah blah blah...\r\n" - "....\r\n" - "\r\n" - "Yours, John\r\n" - "." - ); - server.addResponse("+OK QUIT"); - POP3ClientSession session("localhost", server.port()); - session.login("user", "secret"); - server.clearCommands(); - MessageHeader header; - session.retrieveHeader(1, header); - std::string cmd = server.popCommand(); - assert (cmd == "TOP 1 0"); - assert (header.get("From") == "john.doe@no.where"); - assert (header.get("To") == "jane.doe@no.where"); - assert (header.get("Subject") == "test"); - - MailMessage message; - session.retrieveMessage(2, message); - cmd = server.popCommand(); - assert (cmd == "RETR 2"); - - assert (message.getContent() == - "Hello Jane,\r\n" - "\r\n" - "blah blah blah...\r\n" - "...\r\n" - "\r\n" - "Yours, John\r\n" - ); - session.close(); -} - - -void POP3ClientSessionTest::testDeleteMessage() -{ - DialogServer server; - server.addResponse("+OK POP3 Ready..."); - server.addResponse("+OK USER"); - server.addResponse("+OK PASS"); - server.addResponse("+OK DELETED"); - server.addResponse("+OK QUIT"); - POP3ClientSession session("localhost", server.port()); - session.login("user", "secret"); - server.clearCommands(); - session.deleteMessage(42); - std::string cmd = server.popCommand(); - assert (cmd == "DELE 42"); - session.close(); -} - - -void POP3ClientSessionTest::setUp() -{ -} - - -void POP3ClientSessionTest::tearDown() -{ -} - - -CppUnit::Test* POP3ClientSessionTest::suite() -{ - CppUnit::TestSuite* pSuite = new CppUnit::TestSuite("POP3ClientSessionTest"); - - CppUnit_addTest(pSuite, POP3ClientSessionTest, testLogin); - CppUnit_addTest(pSuite, POP3ClientSessionTest, testLoginFail); - CppUnit_addTest(pSuite, POP3ClientSessionTest, testMessageCount); - CppUnit_addTest(pSuite, POP3ClientSessionTest, testList); - CppUnit_addTest(pSuite, POP3ClientSessionTest, testRetrieveMessage); - CppUnit_addTest(pSuite, POP3ClientSessionTest, testRetrieveHeader); - CppUnit_addTest(pSuite, POP3ClientSessionTest, testRetrieveMessages); - CppUnit_addTest(pSuite, POP3ClientSessionTest, testDeleteMessage); - - return pSuite; -} diff --git a/contrib/libpoco/Net/testsuite/src/POP3ClientSessionTest.h b/contrib/libpoco/Net/testsuite/src/POP3ClientSessionTest.h deleted file mode 100644 index 8303f6efa2a..00000000000 --- a/contrib/libpoco/Net/testsuite/src/POP3ClientSessionTest.h +++ /dev/null @@ -1,47 +0,0 @@ -// -// POP3ClientSessionTest.h -// -// $Id: //poco/1.4/Net/testsuite/src/POP3ClientSessionTest.h#1 $ -// -// Definition of the POP3ClientSessionTest class. -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef POP3ClientSessionTest_INCLUDED -#define POP3ClientSessionTest_INCLUDED - - -#include "Poco/Net/Net.h" -#include "CppUnit/TestCase.h" - - -class POP3ClientSessionTest: public CppUnit::TestCase -{ -public: - POP3ClientSessionTest(const std::string& name); - ~POP3ClientSessionTest(); - - void testLogin(); - void testLoginFail(); - void testMessageCount(); - void testList(); - void testRetrieveMessage(); - void testRetrieveHeader(); - void testRetrieveMessages(); - void testDeleteMessage(); - - void setUp(); - void tearDown(); - - static CppUnit::Test* suite(); - -private: -}; - - -#endif // POP3ClientSessionTest_INCLUDED diff --git a/contrib/libpoco/Net/testsuite/src/QuotedPrintableTest.cpp b/contrib/libpoco/Net/testsuite/src/QuotedPrintableTest.cpp deleted file mode 100644 index 78c6e1b1135..00000000000 --- a/contrib/libpoco/Net/testsuite/src/QuotedPrintableTest.cpp +++ /dev/null @@ -1,102 +0,0 @@ -// -// QuotedPrintableTest.cpp -// -// $Id: //poco/1.4/Net/testsuite/src/QuotedPrintableTest.cpp#1 $ -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "QuotedPrintableTest.h" -#include "CppUnit/TestCaller.h" -#include "CppUnit/TestSuite.h" -#include "Poco/Net/QuotedPrintableEncoder.h" -#include "Poco/Net/QuotedPrintableDecoder.h" -#include - - -using Poco::Net::QuotedPrintableEncoder; -using Poco::Net::QuotedPrintableDecoder; - - -QuotedPrintableTest::QuotedPrintableTest(const std::string& name): CppUnit::TestCase(name) -{ -} - - -QuotedPrintableTest::~QuotedPrintableTest() -{ -} - - -void QuotedPrintableTest::testEncode() -{ - std::ostringstream ostr; - QuotedPrintableEncoder encoder(ostr); - - encoder << - "Lorem ipsum dolor sit amet, consectetuer adipiscing elit.\r\n" - "Proin id odio sit amet metus dignissim porttitor. \r\n" - "Aliquam nulla ipsum, faucibus non, aliquet quis, aliquet id, felis. Proin sodales molestie arcu.\r\n" - "\t\bSed suscipit, mi in facilisis feugiat, \t \r\n" - "\200\201\r\n"; - encoder.close(); - std::string txt = ostr.str(); - assert (txt == "Lorem ipsum dolor sit amet, consectetuer adipiscing elit.\r\n" - "Proin id odio sit amet metus dignissim porttitor.=20\r\n" - "Aliquam nulla ipsum, faucibus non, aliquet quis, aliquet id, felis. Proin s=\r\n" - "odales molestie arcu.\r\n" - "\t=08Sed suscipit, mi in facilisis feugiat, \t =20\r\n" - "=80=81\r\n"); -} - - -void QuotedPrintableTest::testDecode() -{ - std::istringstream istr( - "Lorem ipsum dolor sit amet, consectetuer adipiscing elit.\r\n" - "Proin id odio sit amet metus dignissim porttitor.=20\r\n" - "Aliquam nulla ipsum, faucibus non, aliquet quis, aliquet id, felis. Proin s=\r\n" - "odales molestie arcu.\r\n" - "\t=08Sed suscipit, mi in facilisis feugiat, \t =20\r\n" - "=80=81\r\n" - ); - QuotedPrintableDecoder decoder(istr); - std::string str; - int c = decoder.get(); - while (c != -1) - { - str += (char) c; - c = decoder.get(); - } - assert (str == "Lorem ipsum dolor sit amet, consectetuer adipiscing elit.\r\n" - "Proin id odio sit amet metus dignissim porttitor. \r\n" - "Aliquam nulla ipsum, faucibus non, aliquet quis, aliquet id, felis. Proin sodales molestie arcu.\r\n" - "\t\bSed suscipit, mi in facilisis feugiat, \t \r\n" - "\200\201\r\n"); - -} - - -void QuotedPrintableTest::setUp() -{ -} - - -void QuotedPrintableTest::tearDown() -{ -} - - -CppUnit::Test* QuotedPrintableTest::suite() -{ - CppUnit::TestSuite* pSuite = new CppUnit::TestSuite("QuotedPrintableTest"); - - CppUnit_addTest(pSuite, QuotedPrintableTest, testEncode); - CppUnit_addTest(pSuite, QuotedPrintableTest, testDecode); - - return pSuite; -} diff --git a/contrib/libpoco/Net/testsuite/src/QuotedPrintableTest.h b/contrib/libpoco/Net/testsuite/src/QuotedPrintableTest.h deleted file mode 100644 index 57f992d06ec..00000000000 --- a/contrib/libpoco/Net/testsuite/src/QuotedPrintableTest.h +++ /dev/null @@ -1,41 +0,0 @@ -// -// QuotedPrintableTest.h -// -// $Id: //poco/1.4/Net/testsuite/src/QuotedPrintableTest.h#1 $ -// -// Definition of the QuotedPrintableTest class. -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef QuotedPrintableTest_INCLUDED -#define QuotedPrintableTest_INCLUDED - - -#include "Poco/Net/Net.h" -#include "CppUnit/TestCase.h" - - -class QuotedPrintableTest: public CppUnit::TestCase -{ -public: - QuotedPrintableTest(const std::string& name); - ~QuotedPrintableTest(); - - void testEncode(); - void testDecode(); - - void setUp(); - void tearDown(); - - static CppUnit::Test* suite(); - -private: -}; - - -#endif // QuotedPrintableTest_INCLUDED diff --git a/contrib/libpoco/Net/testsuite/src/RawSocketTest.cpp b/contrib/libpoco/Net/testsuite/src/RawSocketTest.cpp deleted file mode 100644 index 2dc9c1d17c1..00000000000 --- a/contrib/libpoco/Net/testsuite/src/RawSocketTest.cpp +++ /dev/null @@ -1,107 +0,0 @@ -// -// RawSocketTest.cpp -// -// $Id: //poco/1.4/Net/testsuite/src/RawSocketTest.cpp#1 $ -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "RawSocketTest.h" -#include "CppUnit/TestCaller.h" -#include "CppUnit/TestSuite.h" -#include "Poco/Net/RawSocket.h" -#include "Poco/Net/RawSocketImpl.h" -#include "Poco/Net/SocketAddress.h" -#include "Poco/Net/NetException.h" -#include "Poco/Timespan.h" -#include "Poco/Stopwatch.h" - - -using Poco::Net::Socket; -using Poco::Net::RawSocket; -using Poco::Net::RawSocketImpl; -using Poco::Net::SocketAddress; -using Poco::Net::IPAddress; -using Poco::Timespan; -using Poco::Stopwatch; -using Poco::TimeoutException; -using Poco::InvalidArgumentException; -using Poco::IOException; - - -RawSocketTest::RawSocketTest(const std::string& name): CppUnit::TestCase(name) -{ -} - - -RawSocketTest::~RawSocketTest() -{ -} - - -void RawSocketTest::testEchoIPv4() -{ - SocketAddress sa("localhost", 0); - RawSocket rs(IPAddress::IPv4); - rs.connect(sa); - - int n = rs.sendBytes("hello", 5); - assert (5 == n); - - char buffer[256] = ""; - unsigned char* ptr = (unsigned char*) buffer; - - n = rs.receiveBytes(buffer, sizeof(buffer)); - int shift = ((buffer[0] & 0x0F) * 4); - ptr += shift; - - assert (5 == (n - shift)); - assert ("hello" == std::string((char*)ptr, 5)); - - rs.close(); -} - - -void RawSocketTest::testSendToReceiveFromIPv4() -{ - RawSocket rs(IPAddress::IPv4); - - int n = rs.sendTo("hello", 5, SocketAddress("localhost", 0)); - assert (n == 5); - - char buffer[256] = ""; - unsigned char* ptr = (unsigned char*) buffer; - SocketAddress sa; - n = rs.receiveFrom(buffer, sizeof(buffer), sa); - int shift = ((buffer[0] & 0x0F) * 4); - ptr += shift; - - assert ((n - shift) == 5); - assert ("hello" == std::string((char*)ptr, 5)); - rs.close(); -} - - -void RawSocketTest::setUp() -{ -} - - -void RawSocketTest::tearDown() -{ -} - - -CppUnit::Test* RawSocketTest::suite() -{ - CppUnit::TestSuite* pSuite = new CppUnit::TestSuite("RawSocketTest"); - - CppUnit_addTest(pSuite, RawSocketTest, testEchoIPv4); - CppUnit_addTest(pSuite, RawSocketTest, testSendToReceiveFromIPv4); - - return pSuite; -} diff --git a/contrib/libpoco/Net/testsuite/src/RawSocketTest.h b/contrib/libpoco/Net/testsuite/src/RawSocketTest.h deleted file mode 100644 index a13bcec5601..00000000000 --- a/contrib/libpoco/Net/testsuite/src/RawSocketTest.h +++ /dev/null @@ -1,41 +0,0 @@ -// -// RawSocketTest.h -// -// $Id: //poco/1.4/Net/testsuite/src/RawSocketTest.h#1 $ -// -// Definition of the RawSocketTest class. -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef RawSocketTest_INCLUDED -#define RawSocketTest_INCLUDED - - -#include "Poco/Net/Net.h" -#include "CppUnit/TestCase.h" - - -class RawSocketTest: public CppUnit::TestCase -{ -public: - RawSocketTest(const std::string& name); - ~RawSocketTest(); - - void testEchoIPv4(); - void testSendToReceiveFromIPv4(); - - void setUp(); - void tearDown(); - - static CppUnit::Test* suite(); - -private: -}; - - -#endif // RawSocketTest_INCLUDED diff --git a/contrib/libpoco/Net/testsuite/src/ReactorTestSuite.cpp b/contrib/libpoco/Net/testsuite/src/ReactorTestSuite.cpp deleted file mode 100644 index f9fe0d58e68..00000000000 --- a/contrib/libpoco/Net/testsuite/src/ReactorTestSuite.cpp +++ /dev/null @@ -1,24 +0,0 @@ -// -// ReactorTestSuite.cpp -// -// $Id: //poco/1.4/Net/testsuite/src/ReactorTestSuite.cpp#1 $ -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "ReactorTestSuite.h" -#include "SocketReactorTest.h" - - -CppUnit::Test* ReactorTestSuite::suite() -{ - CppUnit::TestSuite* pSuite = new CppUnit::TestSuite("ReactorTestSuite"); - - pSuite->addTest(SocketReactorTest::suite()); - - return pSuite; -} diff --git a/contrib/libpoco/Net/testsuite/src/ReactorTestSuite.h b/contrib/libpoco/Net/testsuite/src/ReactorTestSuite.h deleted file mode 100644 index 064a6fc9a74..00000000000 --- a/contrib/libpoco/Net/testsuite/src/ReactorTestSuite.h +++ /dev/null @@ -1,29 +0,0 @@ -// -// ReactorTestSuite.h -// -// $Id: //poco/1.4/Net/testsuite/src/ReactorTestSuite.h#1 $ -// -// Definition of the ReactorTestSuite class. -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef ReactorTestSuite_INCLUDED -#define ReactorTestSuite_INCLUDED - - -#include "CppUnit/TestSuite.h" - - -class ReactorTestSuite -{ -public: - static CppUnit::Test* suite(); -}; - - -#endif // ReactorTestSuite_INCLUDED diff --git a/contrib/libpoco/Net/testsuite/src/SMTPClientSessionTest.cpp b/contrib/libpoco/Net/testsuite/src/SMTPClientSessionTest.cpp deleted file mode 100644 index bd785088e62..00000000000 --- a/contrib/libpoco/Net/testsuite/src/SMTPClientSessionTest.cpp +++ /dev/null @@ -1,333 +0,0 @@ -// -// SMTPClientSessionTest.cpp -// -// $Id: //poco/1.4/Net/testsuite/src/SMTPClientSessionTest.cpp#1 $ -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "SMTPClientSessionTest.h" -#include "CppUnit/TestCaller.h" -#include "CppUnit/TestSuite.h" -#include "DialogServer.h" -#include "Poco/Net/SMTPClientSession.h" -#include "Poco/Net/MailMessage.h" -#include "Poco/Net/MailRecipient.h" -#include "Poco/Net/NetException.h" - - -using Poco::Net::SMTPClientSession; -using Poco::Net::MailMessage; -using Poco::Net::MailRecipient; -using Poco::Net::SMTPException; - - -SMTPClientSessionTest::SMTPClientSessionTest(const std::string& name): CppUnit::TestCase(name) -{ -} - - -SMTPClientSessionTest::~SMTPClientSessionTest() -{ -} - - -void SMTPClientSessionTest::testLoginEHLO() -{ - DialogServer server; - server.addResponse("220 localhost SMTP ready"); - server.addResponse("250 Hello localhost"); - server.addResponse("221 Bye"); - SMTPClientSession session("localhost", server.port()); - session.login("localhost"); - std::string cmd = server.popCommand(); - assert (cmd == "EHLO localhost"); - session.close(); - cmd = server.popCommand(); - assert (cmd == "QUIT"); -} - - -void SMTPClientSessionTest::testLoginHELO() -{ - DialogServer server; - server.addResponse("220 localhost SMTP ready"); - server.addResponse("500 EHLO not understood"); - server.addResponse("250 Hello localhost"); - server.addResponse("221 Bye"); - SMTPClientSession session("localhost", server.port()); - session.login("localhost"); - std::string cmd = server.popCommand(); - assert (cmd == "EHLO localhost"); - cmd = server.popCommand(); - assert (cmd == "HELO localhost"); - session.close(); - cmd = server.popCommand(); - assert (cmd == "QUIT"); -} - - -void SMTPClientSessionTest::testLoginFailed() -{ - DialogServer server; - server.addResponse("500 No SMTP service here"); - server.addResponse("221 Bye"); - SMTPClientSession session("localhost", server.port()); - try - { - session.login("localhost"); - fail("cannot login - must throw"); - } - catch (SMTPException&) - { - } - session.close(); -} - - -void SMTPClientSessionTest::testSend() -{ - DialogServer server; - server.addResponse("220 localhost SMTP ready"); - server.addResponse("250 Hello localhost"); - server.addResponse("250 OK"); - server.addResponse("250 OK"); - server.addResponse("354 Send data"); - server.addResponse("250 OK"); - server.addResponse("221 Bye"); - SMTPClientSession session("localhost", server.port()); - session.login("localhost"); - - MailMessage message; - message.setSender("john.doe@no.where"); - message.addRecipient(MailRecipient(MailRecipient::PRIMARY_RECIPIENT, "jane.doe@no.where", "Jane Doe")); - message.setSubject("Test Message"); - message.setContent("Hello\r\nblah blah\r\n\r\nJohn\r\n"); - server.clearCommands(); - session.sendMessage(message); - std::string cmd = server.popCommandWait(); - assert (cmd == "MAIL FROM: "); - cmd = server.popCommandWait(); - assert (cmd == "RCPT TO: "); - cmd = server.popCommandWait(); - assert (cmd == "DATA"); - cmd = server.popCommandWait(); - assert (cmd.substr(0, 4) == "Date"); - cmd = server.popCommandWait(); - assert (cmd == "Content-Type: text/plain"); - cmd = server.popCommandWait(); - assert (cmd == "From: john.doe@no.where"); - cmd = server.popCommandWait(); - assert (cmd == "Subject: Test Message"); - cmd = server.popCommandWait(); - assert (cmd == "Content-Transfer-Encoding: quoted-printable"); - cmd = server.popCommandWait(); - assert (cmd == "To: Jane Doe "); - cmd = server.popCommandWait(); - assert (cmd == "Hello"); - cmd = server.popCommandWait(); - assert (cmd == "blah blah"); - cmd = server.popCommandWait(); - assert (cmd == "John"); - cmd = server.popCommandWait(); - assert (cmd == "."); - - session.close(); -} - - -void SMTPClientSessionTest::testSendMultiRecipient() -{ - DialogServer server; - server.addResponse("220 localhost SMTP ready"); - server.addResponse("250 Hello localhost"); - server.addResponse("250 OK"); - server.addResponse("250 OK"); - server.addResponse("250 OK"); - server.addResponse("250 OK"); - server.addResponse("354 Send data"); - server.addResponse("250 OK"); - server.addResponse("250 OK"); - server.addResponse("221 Bye"); - SMTPClientSession session("localhost", server.port()); - session.login("localhost"); - - MailMessage message; - message.setSender("john.doe@no.where"); - MailMessage::Recipients msgRecipients; - msgRecipients.push_back(MailRecipient(MailRecipient::PRIMARY_RECIPIENT, "jane.doe@no.where", "Jane Doe")); - msgRecipients.push_back(MailRecipient(MailRecipient::CC_RECIPIENT, "jack.doe@no.where", "Jack Doe")); - msgRecipients.push_back(MailRecipient(MailRecipient::BCC_RECIPIENT, "joe.doe@no.where", "Joe Doe")); - message.setRecipients(msgRecipients); - message.setSubject("Test Message"); - message.setContent("Hello\r\nblah blah\r\n\r\nJohn\r\n"); - - server.clearCommands(); - session.sendMessage(message); - std::string cmd = server.popCommandWait(); - assert (cmd == "MAIL FROM: "); - cmd = server.popCommandWait(); - assert (cmd == "RCPT TO: "); - cmd = server.popCommandWait(); - assert (cmd == "RCPT TO: "); - cmd = server.popCommandWait(); - assert (cmd == "RCPT TO: "); - cmd = server.popCommandWait(); - assert (cmd == "DATA"); - cmd = server.popCommandWait(); - assert (cmd.substr(0, 4) == "Date"); - cmd = server.popCommandWait(); - assert (cmd == "Content-Type: text/plain"); - cmd = server.popCommandWait(); - assert (cmd == "From: john.doe@no.where"); - cmd = server.popCommandWait(); - assert (cmd == "Subject: Test Message"); - cmd = server.popCommandWait(); - assert (cmd == "Content-Transfer-Encoding: quoted-printable"); - cmd = server.popCommandWait(); - assert (cmd == "To: Jane Doe "); - cmd = server.popCommandWait(); - assert (cmd == "CC: Jack Doe "); - cmd = server.popCommandWait(); - assert (cmd == "Hello"); - cmd = server.popCommandWait(); - assert (cmd == "blah blah"); - cmd = server.popCommandWait(); - assert (cmd == "John"); - cmd = server.popCommandWait(); - assert (cmd == "."); - - session.close(); -} - - -void SMTPClientSessionTest::testMultiSeparateRecipient() -{ - DialogServer server; - server.addResponse("220 localhost SMTP ready"); - server.addResponse("250 Hello localhost"); - server.addResponse("250 OK"); - server.addResponse("250 OK"); - server.addResponse("250 OK"); - server.addResponse("250 OK"); - server.addResponse("354 Send data"); - server.addResponse("250 OK"); - server.addResponse("250 OK"); - server.addResponse("221 Bye"); - SMTPClientSession session("localhost", server.port()); - session.login("localhost"); - - MailMessage message; - message.setSender("john.doe@no.where"); - MailMessage::Recipients msgRecipients; - msgRecipients.push_back(MailRecipient(MailRecipient::PRIMARY_RECIPIENT, "jane.doe@no.where", "Jane Doe")); - msgRecipients.push_back(MailRecipient(MailRecipient::CC_RECIPIENT, "jack.doe@no.where", "Jack Doe")); - msgRecipients.push_back(MailRecipient(MailRecipient::CC_RECIPIENT, "joe.doe@no.where", "Joe Doe")); - message.setRecipients(msgRecipients); - message.setSubject("Test Message"); - message.setContent("Hello\r\nblah blah\r\n\r\nJohn\r\n"); - - SMTPClientSession::Recipients recipients; - recipients.push_back("jill.doe@no.where"); - recipients.push_back("josh.doe@no.where"); - recipients.push_back("jake.doe@no.where"); - - server.clearCommands(); - session.sendMessage(message, recipients); - std::string cmd = server.popCommandWait(); - assert (cmd == "MAIL FROM: "); - cmd = server.popCommandWait(); - assert (cmd == "RCPT TO: "); - cmd = server.popCommandWait(); - assert (cmd == "RCPT TO: "); - cmd = server.popCommandWait(); - assert (cmd == "RCPT TO: "); - cmd = server.popCommandWait(); - assert (cmd == "DATA"); - cmd = server.popCommandWait(); - assert (cmd.substr(0, 4) == "Date"); - cmd = server.popCommandWait(); - assert (cmd == "Content-Type: text/plain"); - cmd = server.popCommandWait(); - assert (cmd == "From: john.doe@no.where"); - cmd = server.popCommandWait(); - assert (cmd == "Subject: Test Message"); - cmd = server.popCommandWait(); - assert (cmd == "Content-Transfer-Encoding: quoted-printable"); - cmd = server.popCommandWait(); - assert (cmd == "To: Jane Doe "); - cmd = server.popCommandWait(); - assert (cmd == "CC: Jack Doe , Joe Doe "); - cmd = server.popCommandWait(); - assert (cmd == "Hello"); - cmd = server.popCommandWait(); - assert (cmd == "blah blah"); - cmd = server.popCommandWait(); - assert (cmd == "John"); - cmd = server.popCommandWait(); - assert (cmd == "."); - - session.close(); -} - - -void SMTPClientSessionTest::testSendFailed() -{ - DialogServer server; - server.addResponse("220 localhost SMTP ready"); - server.addResponse("250 Hello localhost"); - server.addResponse("250 OK"); - server.addResponse("250 OK"); - server.addResponse("354 Send data"); - server.addResponse("500 Error"); - server.addResponse("221 Bye"); - SMTPClientSession session("localhost", server.port()); - session.login("localhost"); - - MailMessage message; - message.setSender("john.doe@no.where"); - message.addRecipient(MailRecipient(MailRecipient::PRIMARY_RECIPIENT, "jane.doe@no.where", "Jane Doe")); - message.setSubject("Test Message"); - message.setContent("Hello\r\nblah blah\r\n\r\nJohn\r\n"); - server.clearCommands(); - try - { - session.sendMessage(message); - fail("internal error - must throw"); - } - catch (SMTPException&) - { - } - - session.close(); -} - - -void SMTPClientSessionTest::setUp() -{ -} - - -void SMTPClientSessionTest::tearDown() -{ -} - - -CppUnit::Test* SMTPClientSessionTest::suite() -{ - CppUnit::TestSuite* pSuite = new CppUnit::TestSuite("SMTPClientSessionTest"); - - CppUnit_addTest(pSuite, SMTPClientSessionTest, testLoginEHLO); - CppUnit_addTest(pSuite, SMTPClientSessionTest, testLoginHELO); - CppUnit_addTest(pSuite, SMTPClientSessionTest, testLoginFailed); - CppUnit_addTest(pSuite, SMTPClientSessionTest, testSend); - CppUnit_addTest(pSuite, SMTPClientSessionTest, testSendMultiRecipient); - CppUnit_addTest(pSuite, SMTPClientSessionTest, testMultiSeparateRecipient); - CppUnit_addTest(pSuite, SMTPClientSessionTest, testSendFailed); - - return pSuite; -} diff --git a/contrib/libpoco/Net/testsuite/src/SMTPClientSessionTest.h b/contrib/libpoco/Net/testsuite/src/SMTPClientSessionTest.h deleted file mode 100644 index 6d8961c5978..00000000000 --- a/contrib/libpoco/Net/testsuite/src/SMTPClientSessionTest.h +++ /dev/null @@ -1,46 +0,0 @@ -// -// SMTPClientSessionTest.h -// -// $Id: //poco/1.4/Net/testsuite/src/SMTPClientSessionTest.h#1 $ -// -// Definition of the SMTPClientSessionTest class. -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef SMTPClientSessionTest_INCLUDED -#define SMTPClientSessionTest_INCLUDED - - -#include "Poco/Net/Net.h" -#include "CppUnit/TestCase.h" - - -class SMTPClientSessionTest: public CppUnit::TestCase -{ -public: - SMTPClientSessionTest(const std::string& name); - ~SMTPClientSessionTest(); - - void testLoginEHLO(); - void testLoginHELO(); - void testLoginFailed(); - void testSend(); - void testSendMultiRecipient(); - void testMultiSeparateRecipient(); - void testSendFailed(); - - void setUp(); - void tearDown(); - - static CppUnit::Test* suite(); - -private: -}; - - -#endif // SMTPClientSessionTest_INCLUDED diff --git a/contrib/libpoco/Net/testsuite/src/SocketAddressTest.cpp b/contrib/libpoco/Net/testsuite/src/SocketAddressTest.cpp deleted file mode 100644 index bd1b2284324..00000000000 --- a/contrib/libpoco/Net/testsuite/src/SocketAddressTest.cpp +++ /dev/null @@ -1,161 +0,0 @@ -// -// SocketAddressTest.cpp -// -// $Id: //poco/1.4/Net/testsuite/src/SocketAddressTest.cpp#2 $ -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "SocketAddressTest.h" -#include "CppUnit/TestCaller.h" -#include "CppUnit/TestSuite.h" -#include "Poco/Net/SocketAddress.h" -#include "Poco/Net/NetException.h" - - -using Poco::Net::SocketAddress; -using Poco::Net::IPAddress; -using Poco::Net::InvalidAddressException; -using Poco::Net::HostNotFoundException; -using Poco::Net::ServiceNotFoundException; -using Poco::Net::NoAddressFoundException; -using Poco::InvalidArgumentException; - - -SocketAddressTest::SocketAddressTest(const std::string& name): CppUnit::TestCase(name) -{ -} - - -SocketAddressTest::~SocketAddressTest() -{ -} - - -void SocketAddressTest::testSocketAddress() -{ - SocketAddress wild; - assert (wild.host().isWildcard()); - assert (wild.port() == 0); - - SocketAddress sa1("192.168.1.100", 100); - assert (sa1.host().toString() == "192.168.1.100"); - assert (sa1.port() == 100); - - SocketAddress sa2("192.168.1.100", "100"); - assert (sa2.host().toString() == "192.168.1.100"); - assert (sa2.port() == 100); - -#if !defined(_WIN32_WCE) - SocketAddress sa3("192.168.1.100", "ftp"); - assert (sa3.host().toString() == "192.168.1.100"); - assert (sa3.port() == 21); -#endif - - try - { - SocketAddress sa3("192.168.1.100", "f00bar"); - fail("bad service name - must throw"); - } - catch (ServiceNotFoundException&) - { - } - - SocketAddress sa4("www.appinf.com", 80); - assert (sa4.host().toString() == "162.209.7.4"); - assert (sa4.port() == 80); - - try - { - SocketAddress sa5("192.168.2.260", 80); - fail("invalid address - must throw"); - } - catch (HostNotFoundException&) - { - } - catch (NoAddressFoundException&) - { - } - - try - { - SocketAddress sa6("192.168.2.120", "80000"); - fail("invalid port - must throw"); - } - catch (ServiceNotFoundException&) - { - } - - SocketAddress sa7("192.168.2.120:88"); - assert (sa7.host().toString() == "192.168.2.120"); - assert (sa7.port() == 88); - - SocketAddress sa8("[192.168.2.120]:88"); - assert (sa8.host().toString() == "192.168.2.120"); - assert (sa8.port() == 88); - - try - { - SocketAddress sa9("[192.168.2.260]"); - fail("invalid address - must throw"); - } - catch (InvalidArgumentException&) - { - } - - try - { - SocketAddress sa9("[192.168.2.260:88"); - fail("invalid address - must throw"); - } - catch (InvalidArgumentException&) - { - } -} - - -void SocketAddressTest::testSocketRelationals() -{ - SocketAddress sa1("192.168.1.100", 100); - SocketAddress sa2("192.168.1.100:100"); - assert (sa1 == sa2); - - SocketAddress sa3("192.168.1.101", "99"); - assert (sa2 < sa3); - - SocketAddress sa4("192.168.1.101", "102"); - assert (sa3 < sa4); -} - - -void SocketAddressTest::testSocketAddress6() -{ -#ifdef POCO_HAVE_IPv6 -#endif -} - - -void SocketAddressTest::setUp() -{ -} - - -void SocketAddressTest::tearDown() -{ -} - - -CppUnit::Test* SocketAddressTest::suite() -{ - CppUnit::TestSuite* pSuite = new CppUnit::TestSuite("SocketAddressTest"); - - CppUnit_addTest(pSuite, SocketAddressTest, testSocketAddress); - CppUnit_addTest(pSuite, SocketAddressTest, testSocketRelationals); - CppUnit_addTest(pSuite, SocketAddressTest, testSocketAddress6); - - return pSuite; -} diff --git a/contrib/libpoco/Net/testsuite/src/SocketAddressTest.h b/contrib/libpoco/Net/testsuite/src/SocketAddressTest.h deleted file mode 100644 index 75cbe67b7ac..00000000000 --- a/contrib/libpoco/Net/testsuite/src/SocketAddressTest.h +++ /dev/null @@ -1,42 +0,0 @@ -// -// SocketAddressTest.h -// -// $Id: //poco/1.4/Net/testsuite/src/SocketAddressTest.h#1 $ -// -// Definition of the SocketAddressTest class. -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef SocketAddressTest_INCLUDED -#define SocketAddressTest_INCLUDED - - -#include "Poco/Net/Net.h" -#include "CppUnit/TestCase.h" - - -class SocketAddressTest: public CppUnit::TestCase -{ -public: - SocketAddressTest(const std::string& name); - ~SocketAddressTest(); - - void testSocketAddress(); - void testSocketRelationals(); - void testSocketAddress6(); - - void setUp(); - void tearDown(); - - static CppUnit::Test* suite(); - -private: -}; - - -#endif // SocketAddressTest_INCLUDED diff --git a/contrib/libpoco/Net/testsuite/src/SocketReactorTest.cpp b/contrib/libpoco/Net/testsuite/src/SocketReactorTest.cpp deleted file mode 100644 index fce4a70c783..00000000000 --- a/contrib/libpoco/Net/testsuite/src/SocketReactorTest.cpp +++ /dev/null @@ -1,421 +0,0 @@ -// -// SocketReactorTest.cpp -// -// $Id: //poco/1.4/Net/testsuite/src/SocketReactorTest.cpp#1 $ -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "SocketReactorTest.h" -#include "CppUnit/TestCaller.h" -#include "CppUnit/TestSuite.h" -#include "Poco/Net/SocketReactor.h" -#include "Poco/Net/SocketNotification.h" -#include "Poco/Net/SocketConnector.h" -#include "Poco/Net/SocketAcceptor.h" -#include "Poco/Net/ParallelSocketAcceptor.h" -#include "Poco/Net/StreamSocket.h" -#include "Poco/Net/ServerSocket.h" -#include "Poco/Net/SocketAddress.h" -#include "Poco/Observer.h" -#include "Poco/Exception.h" -#include - - -using Poco::Net::SocketReactor; -using Poco::Net::SocketConnector; -using Poco::Net::SocketAcceptor; -using Poco::Net::ParallelSocketAcceptor; -using Poco::Net::StreamSocket; -using Poco::Net::ServerSocket; -using Poco::Net::SocketAddress; -using Poco::Net::SocketNotification; -using Poco::Net::ReadableNotification; -using Poco::Net::WritableNotification; -using Poco::Net::TimeoutNotification; -using Poco::Net::ShutdownNotification; -using Poco::Observer; -using Poco::IllegalStateException; - - -namespace -{ - class EchoServiceHandler - { - public: - EchoServiceHandler(StreamSocket& socket, SocketReactor& reactor): - _socket(socket), - _reactor(reactor) - { - _reactor.addEventHandler(_socket, Observer(*this, &EchoServiceHandler::onReadable)); - } - - ~EchoServiceHandler() - { - _reactor.removeEventHandler(_socket, Observer(*this, &EchoServiceHandler::onReadable)); - } - - void onReadable(ReadableNotification* pNf) - { - pNf->release(); - char buffer[8]; - int n = _socket.receiveBytes(buffer, sizeof(buffer)); - if (n > 0) - { - _socket.sendBytes(buffer, n); - } - else - { - _socket.shutdownSend(); - delete this; - } - } - - private: - StreamSocket _socket; - SocketReactor& _reactor; - }; - - class ClientServiceHandler - { - public: - ClientServiceHandler(StreamSocket& socket, SocketReactor& reactor): - _socket(socket), - _reactor(reactor), - _or(*this, &ClientServiceHandler::onReadable), - _ow(*this, &ClientServiceHandler::onWritable), - _ot(*this, &ClientServiceHandler::onTimeout) - { - _timeout = false; - _readableError = false; - _writableError = false; - _timeoutError = false; - checkReadableObserverCount(0); - _reactor.addEventHandler(_socket, _or); - checkReadableObserverCount(1); - checkWritableObserverCount(0); - _reactor.addEventHandler(_socket, _ow); - checkWritableObserverCount(1); - checkTimeoutObserverCount(0); - _reactor.addEventHandler(_socket, _ot); - checkTimeoutObserverCount(1); - - } - - ~ClientServiceHandler() - { - } - - void onReadable(ReadableNotification* pNf) - { - pNf->release(); - char buffer[32]; - int n = _socket.receiveBytes(buffer, sizeof(buffer)); - if (n > 0) - { - _str.write(buffer, n); - } - else - { - checkReadableObserverCount(1); - _reactor.removeEventHandler(_socket, Observer(*this, &ClientServiceHandler::onReadable)); - checkReadableObserverCount(0); - if (_once || _data.size() >= 3072) _reactor.stop(); - _data += _str.str(); - delete this; - } - } - - void onWritable(WritableNotification* pNf) - { - pNf->release(); - checkWritableObserverCount(1); - _reactor.removeEventHandler(_socket, Observer(*this, &ClientServiceHandler::onWritable)); - checkWritableObserverCount(0); - std::string data(1024, 'x'); - _socket.sendBytes(data.data(), (int) data.length()); - _socket.shutdownSend(); - } - - void onTimeout(TimeoutNotification* pNf) - { - pNf->release(); - _timeout = true; - if (_closeOnTimeout) - { - _reactor.stop(); - delete this; - } - } - - static std::string data() - { - return _data; - } - - static void resetData() - { - _data.clear(); - } - - static bool timeout() - { - return _timeout; - } - - static bool getCloseOnTimeout() - { - return _closeOnTimeout; - } - - static void setCloseOnTimeout(bool flag) - { - _closeOnTimeout = flag; - } - - static bool readableError() - { - return _readableError; - } - - static bool writableError() - { - return _writableError; - } - - static bool timeoutError() - { - return _timeoutError; - } - - static void setOnce(bool once = true) - { - _once = once; - } - - private: - void checkReadableObserverCount(std::size_t oro) - { - if (((oro == 0) && _reactor.hasEventHandler(_socket, _or)) || - ((oro > 0) && !_reactor.hasEventHandler(_socket, _or))) - { - _readableError = true; - } - } - - void checkWritableObserverCount(std::size_t ow) - { - if (((ow == 0) && _reactor.hasEventHandler(_socket, _ow)) || - ((ow > 0) && !_reactor.hasEventHandler(_socket, _ow))) - { - _writableError = true; - } - } - - void checkTimeoutObserverCount(std::size_t ot) - { - if (((ot == 0) && _reactor.hasEventHandler(_socket, _ot)) || - ((ot > 0) && !_reactor.hasEventHandler(_socket, _ot))) - { - _timeoutError = true; - } - } - - StreamSocket _socket; - SocketReactor& _reactor; - Observer _or; - Observer _ow; - Observer _ot; - std::stringstream _str; - static std::string _data; - static bool _readableError; - static bool _writableError; - static bool _timeoutError; - static bool _timeout; - static bool _closeOnTimeout; - static bool _once; - }; - - - std::string ClientServiceHandler::_data; - bool ClientServiceHandler::_readableError = false; - bool ClientServiceHandler::_writableError = false; - bool ClientServiceHandler::_timeoutError = false; - bool ClientServiceHandler::_timeout = false; - bool ClientServiceHandler::_closeOnTimeout = false; - bool ClientServiceHandler::_once = false; - - - class FailConnector: public SocketConnector - { - public: - FailConnector(SocketAddress& address, SocketReactor& reactor): - SocketConnector(address, reactor), - _failed(false), - _shutdown(false) - { - reactor.addEventHandler(socket(), Observer(*this, &FailConnector::onTimeout)); - reactor.addEventHandler(socket(), Observer(*this, &FailConnector::onShutdown)); - } - - void onShutdown(ShutdownNotification* pNf) - { - pNf->release(); - _shutdown = true; - } - - void onTimeout(TimeoutNotification* pNf) - { - pNf->release(); - _failed = true; - reactor()->stop(); - } - - void onError(int error) - { - _failed = true; - reactor()->stop(); - } - - bool failed() const - { - return _failed; - } - - bool shutdown() const - { - return _shutdown; - } - - private: - bool _failed; - bool _shutdown; - }; -} - - -SocketReactorTest::SocketReactorTest(const std::string& name): CppUnit::TestCase(name) -{ -} - - -SocketReactorTest::~SocketReactorTest() -{ -} - - -void SocketReactorTest::testSocketReactor() -{ - SocketAddress ssa; - ServerSocket ss(ssa); - SocketReactor reactor; - SocketAcceptor acceptor(ss, reactor); - SocketAddress sa("localhost", ss.address().port()); - SocketConnector connector(sa, reactor); - ClientServiceHandler::setOnce(true); - ClientServiceHandler::resetData(); - reactor.run(); - std::string data(ClientServiceHandler::data()); - assert (data.size() == 1024); - assert (!ClientServiceHandler::readableError()); - assert (!ClientServiceHandler::writableError()); - assert (!ClientServiceHandler::timeoutError()); -} - - -void SocketReactorTest::testSetSocketReactor() -{ - SocketAddress ssa; - ServerSocket ss(ssa); - SocketReactor reactor; - SocketAcceptor acceptor(ss); - acceptor.setReactor(reactor); - SocketAddress sa("localhost", ss.address().port()); - SocketConnector connector(sa, reactor); - ClientServiceHandler::setOnce(true); - ClientServiceHandler::resetData(); - reactor.run(); - std::string data(ClientServiceHandler::data()); - assert(data.size() == 1024); - assert(!ClientServiceHandler::readableError()); - assert(!ClientServiceHandler::writableError()); - assert(!ClientServiceHandler::timeoutError()); -} - - -void SocketReactorTest::testParallelSocketReactor() -{ - SocketAddress ssa; - ServerSocket ss(ssa); - SocketReactor reactor; - ParallelSocketAcceptor acceptor(ss, reactor); - SocketAddress sa("localhost", ss.address().port()); - SocketConnector connector1(sa, reactor); - SocketConnector connector2(sa, reactor); - SocketConnector connector3(sa, reactor); - SocketConnector connector4(sa, reactor); - ClientServiceHandler::setOnce(false); - ClientServiceHandler::resetData(); - reactor.run(); - std::string data(ClientServiceHandler::data()); - assert (data.size() == 4096); - assert (!ClientServiceHandler::readableError()); - assert (!ClientServiceHandler::writableError()); - assert (!ClientServiceHandler::timeoutError()); -} - - -void SocketReactorTest::testSocketConnectorFail() -{ - SocketReactor reactor; - reactor.setTimeout(Poco::Timespan(3, 0)); - SocketAddress sa("192.168.168.192", 12345); - FailConnector connector(sa, reactor); - assert (!connector.failed()); - assert (!connector.shutdown()); - reactor.run(); - assert (connector.failed()); - assert (connector.shutdown()); -} - - -void SocketReactorTest::testSocketConnectorTimeout() -{ - ClientServiceHandler::setCloseOnTimeout(true); - - SocketAddress ssa; - ServerSocket ss(ssa); - SocketReactor reactor; - SocketAddress sa("localhost", ss.address().port()); - SocketConnector connector(sa, reactor); - reactor.run(); - assert (ClientServiceHandler::timeout()); -} - - -void SocketReactorTest::setUp() -{ - ClientServiceHandler::setCloseOnTimeout(false); -} - - -void SocketReactorTest::tearDown() -{ -} - - -CppUnit::Test* SocketReactorTest::suite() -{ - CppUnit::TestSuite* pSuite = new CppUnit::TestSuite("SocketReactorTest"); - - CppUnit_addTest(pSuite, SocketReactorTest, testSocketReactor); - CppUnit_addTest(pSuite, SocketReactorTest, testParallelSocketReactor); - CppUnit_addTest(pSuite, SocketReactorTest, testSocketConnectorFail); - CppUnit_addTest(pSuite, SocketReactorTest, testSocketConnectorTimeout); - - return pSuite; -} diff --git a/contrib/libpoco/Net/testsuite/src/SocketReactorTest.h b/contrib/libpoco/Net/testsuite/src/SocketReactorTest.h deleted file mode 100644 index 6f3d13817d3..00000000000 --- a/contrib/libpoco/Net/testsuite/src/SocketReactorTest.h +++ /dev/null @@ -1,44 +0,0 @@ -// -// SocketReactorTest.h -// -// $Id: //poco/1.4/Net/testsuite/src/SocketReactorTest.h#1 $ -// -// Definition of the SocketReactorTest class. -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef SocketReactorTest_INCLUDED -#define SocketReactorTest_INCLUDED - - -#include "Poco/Net/Net.h" -#include "CppUnit/TestCase.h" - - -class SocketReactorTest: public CppUnit::TestCase -{ -public: - SocketReactorTest(const std::string& name); - ~SocketReactorTest(); - - void testSocketReactor(); - void testSetSocketReactor(); - void testParallelSocketReactor(); - void testSocketConnectorFail(); - void testSocketConnectorTimeout(); - - void setUp(); - void tearDown(); - - static CppUnit::Test* suite(); - -private: -}; - - -#endif // SocketReactorTest_INCLUDED diff --git a/contrib/libpoco/Net/testsuite/src/SocketStreamTest.cpp b/contrib/libpoco/Net/testsuite/src/SocketStreamTest.cpp deleted file mode 100644 index e016e7f1fdc..00000000000 --- a/contrib/libpoco/Net/testsuite/src/SocketStreamTest.cpp +++ /dev/null @@ -1,144 +0,0 @@ -// -// SocketStreamTest.cpp -// -// $Id: //poco/1.4/Net/testsuite/src/SocketStreamTest.cpp#1 $ -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "SocketStreamTest.h" -#include "CppUnit/TestCaller.h" -#include "CppUnit/TestSuite.h" -#include "EchoServer.h" -#include "Poco/Net/SocketStream.h" -#include "Poco/Net/StreamSocket.h" -#include "Poco/Net/ServerSocket.h" -#include "Poco/Net/SocketAddress.h" -#include "Poco/Net/NetException.h" -#include "Poco/Timespan.h" -#include "Poco/Stopwatch.h" - - -using Poco::Net::Socket; -using Poco::Net::SocketStream; -using Poco::Net::StreamSocket; -using Poco::Net::ServerSocket; -using Poco::Net::SocketAddress; -using Poco::Net::ConnectionRefusedException; -using Poco::Timespan; -using Poco::Stopwatch; -using Poco::TimeoutException; -using Poco::InvalidArgumentException; - - -SocketStreamTest::SocketStreamTest(const std::string& name): CppUnit::TestCase(name) -{ -} - - -SocketStreamTest::~SocketStreamTest() -{ -} - - -void SocketStreamTest::testStreamEcho() -{ - EchoServer echoServer; - StreamSocket ss; - ss.connect(SocketAddress("localhost", echoServer.port())); - SocketStream str(ss); - str << "hello"; - assert (str.good()); - str.flush(); - assert (str.good()); - ss.shutdownSend(); - - char buffer[5]; - str.read(buffer, sizeof(buffer)); - assert (str.good()); - assert (str.gcount() == 5); - assert (std::string(buffer, 5) == "hello"); - - ss.close(); -} - - -void SocketStreamTest::testLargeStreamEcho() -{ - const int msgSize = 64000; - EchoServer echoServer; - StreamSocket ss; - ss.connect(SocketAddress("localhost", echoServer.port())); - SocketStream str(ss); - ss.setSendBufferSize(msgSize); - ss.setReceiveBufferSize(msgSize); - std::string payload(msgSize, 'x'); - str << payload; - assert (str.good()); - str.flush(); - assert (str.good()); - ss.shutdownSend(); - - assert (str.gcount() == 0); - char buffer[msgSize]; - str.read(buffer, sizeof(buffer)); - assert (str.good()); - assert (str.gcount() == msgSize); - - ss.close(); -} - - -void SocketStreamTest::testEOF() -{ - StreamSocket ss; - SocketStream str(ss); - { - EchoServer echoServer; - - ss.connect(SocketAddress("localhost", echoServer.port())); - str << "hello"; - assert (str.good()); - str.flush(); - assert (str.good()); - ss.shutdownSend(); - - char buffer[5]; - str.read(buffer, sizeof(buffer)); - assert (str.good()); - assert (str.gcount() == 5); - assert (std::string(buffer, 5) == "hello"); - } - - int c = str.get(); - assert (c == -1); - assert (str.eof()); - - ss.close(); -} - - -void SocketStreamTest::setUp() -{ -} - - -void SocketStreamTest::tearDown() -{ -} - - -CppUnit::Test* SocketStreamTest::suite() -{ - CppUnit::TestSuite* pSuite = new CppUnit::TestSuite("SocketStreamTest"); - - CppUnit_addTest(pSuite, SocketStreamTest, testStreamEcho); - CppUnit_addTest(pSuite, SocketStreamTest, testLargeStreamEcho); - CppUnit_addTest(pSuite, SocketStreamTest, testEOF); - - return pSuite; -} diff --git a/contrib/libpoco/Net/testsuite/src/SocketStreamTest.h b/contrib/libpoco/Net/testsuite/src/SocketStreamTest.h deleted file mode 100644 index 00f24363ab4..00000000000 --- a/contrib/libpoco/Net/testsuite/src/SocketStreamTest.h +++ /dev/null @@ -1,42 +0,0 @@ -// -// SocketStreamTest.h -// -// $Id: //poco/1.4/Net/testsuite/src/SocketStreamTest.h#1 $ -// -// Definition of the SocketStreamTest class. -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef SocketStreamTest_INCLUDED -#define SocketStreamTest_INCLUDED - - -#include "Poco/Net/Net.h" -#include "CppUnit/TestCase.h" - - -class SocketStreamTest: public CppUnit::TestCase -{ -public: - SocketStreamTest(const std::string& name); - ~SocketStreamTest(); - - void testStreamEcho(); - void testLargeStreamEcho(); - void testEOF(); - - void setUp(); - void tearDown(); - - static CppUnit::Test* suite(); - -private: -}; - - -#endif // SocketStreamTest_INCLUDED diff --git a/contrib/libpoco/Net/testsuite/src/SocketTest.cpp b/contrib/libpoco/Net/testsuite/src/SocketTest.cpp deleted file mode 100644 index 6f6780ea8cd..00000000000 --- a/contrib/libpoco/Net/testsuite/src/SocketTest.cpp +++ /dev/null @@ -1,554 +0,0 @@ -// -// SocketTest.cpp -// -// $Id: //poco/1.4/Net/testsuite/src/SocketTest.cpp#1 $ -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "SocketTest.h" -#include "CppUnit/TestCaller.h" -#include "CppUnit/TestSuite.h" -#include "EchoServer.h" -#include "Poco/Net/StreamSocket.h" -#include "Poco/Net/ServerSocket.h" -#include "Poco/Net/SocketAddress.h" -#include "Poco/Net/NetException.h" -#include "Poco/Timespan.h" -#include "Poco/Stopwatch.h" -#include "Poco/Buffer.h" -#include "Poco/FIFOBuffer.h" -#include "Poco/Delegate.h" -#include - - -using Poco::Net::Socket; -using Poco::Net::StreamSocket; -using Poco::Net::ServerSocket; -using Poco::Net::SocketAddress; -using Poco::Net::ConnectionRefusedException; -using Poco::Timespan; -using Poco::Stopwatch; -using Poco::TimeoutException; -using Poco::InvalidArgumentException; -using Poco::Buffer; -using Poco::FIFOBuffer; -using Poco::delegate; - - -SocketTest::SocketTest(const std::string& name): CppUnit::TestCase(name) -{ -} - - -SocketTest::~SocketTest() -{ -} - - -void SocketTest::testEcho() -{ - EchoServer echoServer; - StreamSocket ss; - ss.connect(SocketAddress("localhost", echoServer.port())); - int n = ss.sendBytes("hello", 5); - assert (n == 5); - char buffer[256]; - n = ss.receiveBytes(buffer, sizeof(buffer)); - assert (n == 5); - assert (std::string(buffer, n) == "hello"); - ss.close(); -} - - -void SocketTest::testPoll() -{ - EchoServer echoServer; - StreamSocket ss; - ss.connect(SocketAddress("localhost", echoServer.port())); - Stopwatch sw; - sw.start(); - Timespan timeout(1000000); - assert (!ss.poll(timeout, Socket::SELECT_READ)); - assert (sw.elapsed() >= 900000); - sw.restart(); - assert (ss.poll(timeout, Socket::SELECT_WRITE)); - assert (sw.elapsed() < 100000); - ss.sendBytes("hello", 5); - char buffer[256]; - sw.restart(); - assert (ss.poll(timeout, Socket::SELECT_READ)); - assert (sw.elapsed() < 100000); - int n = ss.receiveBytes(buffer, sizeof(buffer)); - assert (n == 5); - assert (std::string(buffer, n) == "hello"); - ss.close(); -} - - -void SocketTest::testAvailable() -{ - EchoServer echoServer; - StreamSocket ss; - ss.connect(SocketAddress("localhost", echoServer.port())); - Timespan timeout(1000000); - ss.sendBytes("hello", 5); - char buffer[256]; - assert (ss.poll(timeout, Socket::SELECT_READ)); - int av = ss.available(); - assert (av > 0 && av <= 5); - int n = ss.receiveBytes(buffer, sizeof(buffer)); - assert (n == 5); - assert (std::string(buffer, n) == "hello"); - ss.close(); -} - - -void SocketTest::testFIFOBuffer() -{ - Buffer b(5); - b[0] = 'h'; - b[1] = 'e'; - b[2] = 'l'; - b[3] = 'l'; - b[4] = 'o'; - - FIFOBuffer f(5, true); - - f.readable += delegate(this, &SocketTest::onReadable); - f.writable += delegate(this, &SocketTest::onWritable); - - assert(0 == _notToReadable); - assert(0 == _readableToNot); - assert(0 == _notToWritable); - assert(0 == _writableToNot); - f.write(b); - assert(1 == _notToReadable); - assert(0 == _readableToNot); - assert(0 == _notToWritable); - assert(1 == _writableToNot); - - EchoServer echoServer; - StreamSocket ss; - ss.connect(SocketAddress("localhost", echoServer.port())); - int n = ss.sendBytes(f); - assert (n == 5); - assert(1 == _notToReadable); - assert(1 == _readableToNot); - assert(1 == _notToWritable); - assert(1 == _writableToNot); - assert (f.isEmpty()); - - n = ss.receiveBytes(f); - assert (n == 5); - - assert(2 == _notToReadable); - assert(1 == _readableToNot); - assert(1 == _notToWritable); - assert(2 == _writableToNot); - - assert (f[0] == 'h'); - assert (f[1] == 'e'); - assert (f[2] == 'l'); - assert (f[3] == 'l'); - assert (f[4] == 'o'); - - f.readable -= delegate(this, &SocketTest::onReadable); - f.writable -= delegate(this, &SocketTest::onWritable); - - ss.close(); -} - - -void SocketTest::testConnect() -{ - ServerSocket serv; - serv.bind(SocketAddress()); - serv.listen(); - StreamSocket ss; - Timespan timeout(250000); - ss.connect(SocketAddress("localhost", serv.address().port()), timeout); -} - - -void SocketTest::testConnectRefused() -{ - ServerSocket serv; - serv.bind(SocketAddress()); - serv.listen(); - Poco::UInt16 port = serv.address().port(); - serv.close(); - StreamSocket ss; - Timespan timeout(250000); - try - { - ss.connect(SocketAddress("localhost", port)); - fail("connection refused - must throw"); - } - catch (ConnectionRefusedException&) - { - } -} - - -void SocketTest::testConnectRefusedNB() -{ - ServerSocket serv; - serv.bind(SocketAddress()); - serv.listen(); - Poco::UInt16 port = serv.address().port(); - serv.close(); - StreamSocket ss; - Timespan timeout(2, 0); - try - { - ss.connect(SocketAddress("localhost", port), timeout); - fail("connection refused - must throw"); - } - catch (TimeoutException&) - { - } - catch (ConnectionRefusedException&) - { - } -} - - -void SocketTest::testNonBlocking() -{ - EchoServer echoServer; - StreamSocket ss; - ss.connect(SocketAddress("localhost", echoServer.port())); - ss.setBlocking(false); - - Timespan timeout(1000000); - assert (ss.poll(timeout, Socket::SELECT_WRITE)); - int n = ss.sendBytes("hello", 5); - assert (n == 5); - - char buffer[256]; - assert (ss.poll(timeout, Socket::SELECT_READ)); - n = ss.receiveBytes(buffer, sizeof(buffer)); - assert (n == 5); - assert (std::string(buffer, n) == "hello"); - ss.close(); -} - - - -void SocketTest::testAddress() -{ - ServerSocket serv; - serv.bind(SocketAddress()); - serv.listen(); - StreamSocket ss; - ss.connect(SocketAddress("localhost", serv.address().port())); - StreamSocket css = serv.acceptConnection(); - assert (css.peerAddress().host() == ss.address().host()); - assert (css.peerAddress().port() == ss.address().port()); -} - - -void SocketTest::testAssign() -{ - ServerSocket serv; - StreamSocket ss1; - StreamSocket ss2; - - assert (ss1 != ss2); - StreamSocket ss3(ss1); - assert (ss1 == ss3); - ss3 = ss2; - assert (ss1 != ss3); - assert (ss2 == ss3); - - try - { - ss1 = serv; - fail("incompatible assignment - must throw"); - } - catch (InvalidArgumentException&) - { - } - - try - { - StreamSocket ss4(serv); - fail("incompatible assignment - must throw"); - } - catch (InvalidArgumentException&) - { - } - - try - { - serv = ss1; - fail("incompatible assignment - must throw"); - } - catch (InvalidArgumentException&) - { - } - - try - { - ServerSocket serv2(ss1); - fail("incompatible assignment - must throw"); - } - catch (InvalidArgumentException&) - { - } -} - - -void SocketTest::testTimeout() -{ - EchoServer echoServer; - StreamSocket ss; - ss.connect(SocketAddress("localhost", echoServer.port())); - - Timespan timeout0 = ss.getReceiveTimeout(); - Timespan timeout(250000); - ss.setReceiveTimeout(timeout); - Timespan timeout1 = ss.getReceiveTimeout(); - std::cout << "original receive timeout: " << timeout0.totalMicroseconds() << std::endl; - std::cout << "requested receive timeout: " << timeout.totalMicroseconds() << std::endl; - std::cout << "actual receive timeout: " << timeout1.totalMicroseconds() << std::endl; - - // some socket implementations adjust the timeout value - // assert (ss.getReceiveTimeout() == timeout); - Stopwatch sw; - try - { - char buffer[256]; - sw.start(); - ss.receiveBytes(buffer, sizeof(buffer)); - fail("nothing to receive - must timeout"); - } - catch (TimeoutException&) - { - } - assert (sw.elapsed() < 1000000); - - timeout0 = ss.getSendTimeout(); - ss.setSendTimeout(timeout); - timeout1 = ss.getSendTimeout(); - std::cout << "original send timeout: " << timeout0.totalMicroseconds() << std::endl; - std::cout << "requested send timeout: " << timeout.totalMicroseconds() << std::endl; - std::cout << "actual send timeout: " << timeout1.totalMicroseconds() << std::endl; - // assert (ss.getSendTimeout() == timeout); -} - - -void SocketTest::testBufferSize() -{ - EchoServer echoServer; - SocketAddress sa("localhost", 1234); - StreamSocket ss(sa.family()); - - int osz = ss.getSendBufferSize(); - int rsz = 32000; - ss.setSendBufferSize(rsz); - int asz = ss.getSendBufferSize(); - std::cout << "original send buffer size: " << osz << std::endl; - std::cout << "requested send buffer size: " << rsz << std::endl; - std::cout << "actual send buffer size: " << asz << std::endl; - - osz = ss.getReceiveBufferSize(); - ss.setReceiveBufferSize(rsz); - asz = ss.getReceiveBufferSize(); - std::cout << "original recv buffer size: " << osz << std::endl; - std::cout << "requested recv buffer size: " << rsz << std::endl; - std::cout << "actual recv buffer size: " << asz << std::endl; -} - - -void SocketTest::testOptions() -{ - EchoServer echoServer; - StreamSocket ss; - ss.connect(SocketAddress("localhost", echoServer.port())); - - ss.setLinger(true, 20); - bool f; - int t; - ss.getLinger(f, t); - assert (f && t == 20); - ss.setLinger(false, 0); - ss.getLinger(f, t); - assert (!f); - - ss.setNoDelay(true); - assert (ss.getNoDelay()); - ss.setNoDelay(false); - assert (!ss.getNoDelay()); - - ss.setKeepAlive(true); - assert (ss.getKeepAlive()); - ss.setKeepAlive(false); - assert (!ss.getKeepAlive()); - - ss.setOOBInline(true); - assert (ss.getOOBInline()); - ss.setOOBInline(false); - assert (!ss.getOOBInline()); -} - - -void SocketTest::testSelect() -{ - Timespan timeout(250000); - - EchoServer echoServer; - StreamSocket ss; - ss.connect(SocketAddress("localhost", echoServer.port())); - - Socket::SocketList readList; - Socket::SocketList writeList; - Socket::SocketList exceptList; - - readList.push_back(ss); - assert (Socket::select(readList, writeList, exceptList, timeout) == 0); - assert (readList.empty()); - assert (writeList.empty()); - assert (exceptList.empty()); - - ss.sendBytes("hello", 5); - - ss.poll(timeout, Socket::SELECT_READ); - - readList.push_back(ss); - writeList.push_back(ss); - assert (Socket::select(readList, writeList, exceptList, timeout) == 2); - assert (!readList.empty()); - assert (!writeList.empty()); - assert (exceptList.empty()); - - char buffer[256]; - int n = ss.receiveBytes(buffer, sizeof(buffer)); - assert (n == 5); - assert (std::string(buffer, n) == "hello"); - ss.close(); -} - - -void SocketTest::testSelect2() -{ - Timespan timeout(100000); - - EchoServer echoServer1; - EchoServer echoServer2; - StreamSocket ss1(SocketAddress("localhost", echoServer1.port())); - StreamSocket ss2(SocketAddress("localhost", echoServer2.port())); - - Socket::SocketList readList; - Socket::SocketList writeList; - Socket::SocketList exceptList; - - readList.push_back(ss1); - readList.push_back(ss2); - assert (Socket::select(readList, writeList, exceptList, timeout) == 0); - assert (readList.empty()); - assert (writeList.empty()); - assert (exceptList.empty()); - - ss1.sendBytes("hello", 5); - - ss1.poll(timeout, Socket::SELECT_READ); - - readList.push_back(ss1); - readList.push_back(ss2); - assert (Socket::select(readList, writeList, exceptList, timeout) == 1); - - assert (readList.size() == 1); - assert (readList[0] == ss1); - assert (writeList.empty()); - assert (exceptList.empty()); - - char buffer[256]; - int n = ss1.receiveBytes(buffer, sizeof(buffer)); - assert (n == 5); - - readList.clear(); - writeList.clear(); - exceptList.clear(); - writeList.push_back(ss1); - writeList.push_back(ss2); - assert (Socket::select(readList, writeList, exceptList, timeout) == 2); - assert (readList.empty()); - assert (writeList.size() == 2); - assert (writeList[0] == ss1); - assert (writeList[1] == ss2); - assert (exceptList.empty()); - - ss1.close(); - ss2.close(); -} - - -void SocketTest::testSelect3() -{ - Socket::SocketList readList; - Socket::SocketList writeList; - Socket::SocketList exceptList; - Timespan timeout(1000); - - int rc = Socket::select(readList, writeList, exceptList, timeout); - assert (rc == 0); -} - - -void SocketTest::onReadable(bool& b) -{ - if (b) ++_notToReadable; - else ++_readableToNot; -}; - - -void SocketTest::onWritable(bool& b) -{ - if (b) ++_notToWritable; - else ++_writableToNot; -} - - -void SocketTest::setUp() -{ - _readableToNot = 0; - _notToReadable = 0; - _writableToNot = 0; - _notToWritable = 0; -} - - -void SocketTest::tearDown() -{ -} - - -CppUnit::Test* SocketTest::suite() -{ - CppUnit::TestSuite* pSuite = new CppUnit::TestSuite("SocketTest"); - - CppUnit_addTest(pSuite, SocketTest, testEcho); - CppUnit_addTest(pSuite, SocketTest, testPoll); - CppUnit_addTest(pSuite, SocketTest, testAvailable); - CppUnit_addTest(pSuite, SocketTest, testFIFOBuffer); - CppUnit_addTest(pSuite, SocketTest, testConnect); - CppUnit_addTest(pSuite, SocketTest, testConnectRefused); - CppUnit_addTest(pSuite, SocketTest, testConnectRefusedNB); - CppUnit_addTest(pSuite, SocketTest, testNonBlocking); - CppUnit_addTest(pSuite, SocketTest, testAddress); - CppUnit_addTest(pSuite, SocketTest, testAssign); - CppUnit_addTest(pSuite, SocketTest, testTimeout); - CppUnit_addTest(pSuite, SocketTest, testBufferSize); - CppUnit_addTest(pSuite, SocketTest, testOptions); - CppUnit_addTest(pSuite, SocketTest, testSelect); - CppUnit_addTest(pSuite, SocketTest, testSelect2); - CppUnit_addTest(pSuite, SocketTest, testSelect3); - - return pSuite; -} diff --git a/contrib/libpoco/Net/testsuite/src/SocketTest.h b/contrib/libpoco/Net/testsuite/src/SocketTest.h deleted file mode 100644 index 5a8033ffa0e..00000000000 --- a/contrib/libpoco/Net/testsuite/src/SocketTest.h +++ /dev/null @@ -1,62 +0,0 @@ -// -// SocketTest.h -// -// $Id: //poco/1.4/Net/testsuite/src/SocketTest.h#1 $ -// -// Definition of the SocketTest class. -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef SocketTest_INCLUDED -#define SocketTest_INCLUDED - - -#include "Poco/Net/Net.h" -#include "CppUnit/TestCase.h" - - -class SocketTest: public CppUnit::TestCase -{ -public: - SocketTest(const std::string& name); - ~SocketTest(); - - void testEcho(); - void testPoll(); - void testAvailable(); - void testFIFOBuffer(); - void testConnect(); - void testConnectRefused(); - void testConnectRefusedNB(); - void testNonBlocking(); - void testAddress(); - void testAssign(); - void testTimeout(); - void testBufferSize(); - void testOptions(); - void testSelect(); - void testSelect2(); - void testSelect3(); - - void setUp(); - void tearDown(); - - static CppUnit::Test* suite(); - -private: - void onReadable(bool& b); - void onWritable(bool& b); - - int _readableToNot; - int _notToReadable; - int _writableToNot; - int _notToWritable; -}; - - -#endif // SocketTest_INCLUDED diff --git a/contrib/libpoco/Net/testsuite/src/SocketsTestSuite.cpp b/contrib/libpoco/Net/testsuite/src/SocketsTestSuite.cpp deleted file mode 100644 index 8b8f0e85627..00000000000 --- a/contrib/libpoco/Net/testsuite/src/SocketsTestSuite.cpp +++ /dev/null @@ -1,35 +0,0 @@ -// -// SocketsTestSuite.cpp -// -// $Id: //poco/1.4/Net/testsuite/src/SocketsTestSuite.cpp#1 $ -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "SocketsTestSuite.h" -#include "SocketTest.h" -#include "SocketStreamTest.h" -#include "DatagramSocketTest.h" -#include "MulticastSocketTest.h" -#include "DialogSocketTest.h" -#include "RawSocketTest.h" - - -CppUnit::Test* SocketsTestSuite::suite() -{ - CppUnit::TestSuite* pSuite = new CppUnit::TestSuite("SocketsTestSuite"); - - pSuite->addTest(SocketTest::suite()); - pSuite->addTest(SocketStreamTest::suite()); - pSuite->addTest(DatagramSocketTest::suite()); - pSuite->addTest(DialogSocketTest::suite()); - pSuite->addTest(RawSocketTest::suite()); -#ifdef POCO_NET_HAS_INTERFACE - pSuite->addTest(MulticastSocketTest::suite()); -#endif - return pSuite; -} diff --git a/contrib/libpoco/Net/testsuite/src/SocketsTestSuite.h b/contrib/libpoco/Net/testsuite/src/SocketsTestSuite.h deleted file mode 100644 index 29efbe228dd..00000000000 --- a/contrib/libpoco/Net/testsuite/src/SocketsTestSuite.h +++ /dev/null @@ -1,29 +0,0 @@ -// -// SocketsTestSuite.h -// -// $Id: //poco/1.4/Net/testsuite/src/SocketsTestSuite.h#1 $ -// -// Definition of the SocketsTestSuite class. -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef SocketsTestSuite_INCLUDED -#define SocketsTestSuite_INCLUDED - - -#include "CppUnit/TestSuite.h" - - -class SocketsTestSuite -{ -public: - static CppUnit::Test* suite(); -}; - - -#endif // SocketsTestSuite_INCLUDED diff --git a/contrib/libpoco/Net/testsuite/src/SyslogTest.cpp b/contrib/libpoco/Net/testsuite/src/SyslogTest.cpp deleted file mode 100644 index 1d395494678..00000000000 --- a/contrib/libpoco/Net/testsuite/src/SyslogTest.cpp +++ /dev/null @@ -1,235 +0,0 @@ -// -// SyslogTest.cpp -// -// $Id: //poco/1.4/Net/testsuite/src/SyslogTest.cpp#1 $ -// -// Copyright (c) 2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "SyslogTest.h" -#include "CppUnit/TestCaller.h" -#include "CppUnit/TestSuite.h" -#include "Poco/Net/RemoteSyslogChannel.h" -#include "Poco/Net/RemoteSyslogListener.h" -#include "Poco/Net/DNS.h" -#include "Poco/Thread.h" -#include "Poco/Message.h" -#include "Poco/AutoPtr.h" -#include - - -using namespace Poco::Net; - - -class CachingChannel: public Poco::Channel - /// Caches the last n Messages in memory -{ -public: - typedef std::list Messages; - - CachingChannel(std::size_t n = 100); - /// Creates the CachingChannel. Caches n messages in memory - - ~CachingChannel(); - /// Destroys the CachingChannel. - - void log(const Poco::Message& msg); - /// Writes the log message to the cache - - void getMessages(std::vector& msg, int offset, int numEntries) const; - /// Retrieves numEntries Messages starting with position offset. Most recent messages are first. - - std::size_t getMaxSize() const; - - std::size_t getCurrentSize() const; - -private: - CachingChannel(const CachingChannel&); - - Messages _cache; - std::size_t _size; - std::size_t _maxSize; - mutable Poco::FastMutex _mutex; -}; - - -std::size_t CachingChannel::getMaxSize() const -{ - return _maxSize; -} - - -std::size_t CachingChannel::getCurrentSize() const -{ - return _size; -} - - -CachingChannel::CachingChannel(std::size_t n): - _cache(), - _size(0), - _maxSize(n), - _mutex() -{ -} - - -CachingChannel::~CachingChannel() -{ -} - - -void CachingChannel::log(const Poco::Message& msg) -{ - Poco::FastMutex::ScopedLock lock(_mutex); - _cache.push_front(msg); - if (_size == _maxSize) - { - _cache.pop_back(); - } - else - ++_size; -} - - -void CachingChannel::getMessages(std::vector& msg, int offset, int numEntries) const -{ - msg.clear(); - Messages::const_iterator it = _cache.begin(); - - while (offset > 0 && it != _cache.end()) - ++it; - - while (numEntries > 0 && it != _cache.end()) - { - msg.push_back(*it); - ++it; - } -} - - -SyslogTest::SyslogTest(const std::string& name): CppUnit::TestCase(name) -{ -} - - -SyslogTest::~SyslogTest() -{ -} - - -void SyslogTest::testListener() -{ - Poco::AutoPtr channel = new RemoteSyslogChannel(); - channel->setProperty("loghost", "localhost:51400"); - channel->open(); - Poco::AutoPtr listener = new RemoteSyslogListener(51400); - listener->open(); - CachingChannel cl; - listener->addChannel(&cl); - assert (cl.getCurrentSize() == 0); - Poco::Message msg("asource", "amessage", Poco::Message::PRIO_CRITICAL); - channel->log(msg); - Poco::Thread::sleep(1000); - listener->close(); - channel->close(); - assert (cl.getCurrentSize() == 1); - std::vector msgs; - cl.getMessages(msgs, 0, 10); - assert (msgs.size() == 1); - assert (msgs[0].getSource() == "asource"); - assert (msgs[0].getText() == "amessage"); - assert (msgs[0].getPriority() == Poco::Message::PRIO_CRITICAL); -} - - -void SyslogTest::testChannelOpenClose() -{ - Poco::AutoPtr channel = new RemoteSyslogChannel(); - channel->setProperty("loghost", "localhost:51400"); - channel->open(); - Poco::AutoPtr listener = new RemoteSyslogListener(51400); - listener->open(); - CachingChannel cl; - listener->addChannel(&cl); - - assert (cl.getCurrentSize() == 0); - Poco::Message msg1("source1", "message1", Poco::Message::PRIO_CRITICAL); - channel->log(msg1); - Poco::Thread::sleep(1000); - assert (cl.getCurrentSize() == 1); - - channel->close(); // close and re-open channel - channel->open(); - - Poco::Message msg2("source2", "message2", Poco::Message::PRIO_ERROR); - channel->log(msg2); - Poco::Thread::sleep(1000); - assert (cl.getCurrentSize() == 2); - - listener->close(); - std::vector msgs; - cl.getMessages(msgs, 0, 10); - assert (msgs.size() == 2); - - assert (msgs[1].getSource() == "source1"); - assert (msgs[1].getText() == "message1"); - assert (msgs[1].getPriority() == Poco::Message::PRIO_CRITICAL); - - assert (msgs[0].getSource() == "source2"); - assert (msgs[0].getText() == "message2"); - assert (msgs[0].getPriority() == Poco::Message::PRIO_ERROR); -} - - -void SyslogTest::testOldBSD() -{ - Poco::AutoPtr channel = new RemoteSyslogChannel(); - channel->setProperty("loghost", "localhost:51400"); - channel->setProperty("format", "bsd"); - channel->open(); - Poco::AutoPtr listener = new RemoteSyslogListener(51400); - listener->open(); - CachingChannel cl; - listener->addChannel(&cl); - assert (cl.getCurrentSize() == 0); - Poco::Message msg("asource", "amessage", Poco::Message::PRIO_CRITICAL); - channel->log(msg); - Poco::Thread::sleep(1000); - listener->close(); - channel->close(); - assert (cl.getCurrentSize() == 1); - std::vector msgs; - cl.getMessages(msgs, 0, 10); - assert (msgs.size() == 1); - // the source is lost with old BSD messages: we only send the local host name! - assert (msgs[0].getSource() == Poco::Net::DNS::thisHost().name()); - assert (msgs[0].getText() == "amessage"); - assert (msgs[0].getPriority() == Poco::Message::PRIO_CRITICAL); -} - - -void SyslogTest::setUp() -{ -} - - -void SyslogTest::tearDown() -{ -} - - -CppUnit::Test* SyslogTest::suite() -{ - CppUnit::TestSuite* pSuite = new CppUnit::TestSuite("SyslogTest"); - - CppUnit_addTest(pSuite, SyslogTest, testListener); - CppUnit_addTest(pSuite, SyslogTest, testChannelOpenClose); - CppUnit_addTest(pSuite, SyslogTest, testOldBSD); - - return pSuite; -} diff --git a/contrib/libpoco/Net/testsuite/src/SyslogTest.h b/contrib/libpoco/Net/testsuite/src/SyslogTest.h deleted file mode 100644 index cb4c9ea93f9..00000000000 --- a/contrib/libpoco/Net/testsuite/src/SyslogTest.h +++ /dev/null @@ -1,42 +0,0 @@ -// -// SyslogTest.h -// -// $Id: //poco/1.4/Net/testsuite/src/SyslogTest.h#1 $ -// -// Definition of the SyslogTest class. -// -// Copyright (c) 2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef SyslogTest_INCLUDED -#define SyslogTest_INCLUDED - - -#include "Poco/Net/Net.h" -#include "CppUnit/TestCase.h" - - -class SyslogTest: public CppUnit::TestCase -{ -public: - SyslogTest(const std::string& name); - ~SyslogTest(); - - void testListener(); - void testChannelOpenClose(); - void testOldBSD(); - - void setUp(); - void tearDown(); - - static CppUnit::Test* suite(); - -private: -}; - - -#endif // SyslogTest_INCLUDED diff --git a/contrib/libpoco/Net/testsuite/src/TCPServerTest.cpp b/contrib/libpoco/Net/testsuite/src/TCPServerTest.cpp deleted file mode 100644 index d0d8c49b4fc..00000000000 --- a/contrib/libpoco/Net/testsuite/src/TCPServerTest.cpp +++ /dev/null @@ -1,267 +0,0 @@ -// -// TCPServerTest.cpp -// -// $Id: //poco/1.4/Net/testsuite/src/TCPServerTest.cpp#1 $ -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "TCPServerTest.h" -#include "CppUnit/TestCaller.h" -#include "CppUnit/TestSuite.h" -#include "Poco/Net/TCPServer.h" -#include "Poco/Net/TCPServerConnection.h" -#include "Poco/Net/TCPServerConnectionFactory.h" -#include "Poco/Net/TCPServerParams.h" -#include "Poco/Net/StreamSocket.h" -#include "Poco/Net/ServerSocket.h" -#include "Poco/Thread.h" -#include - - -using Poco::Net::TCPServer; -using Poco::Net::TCPServerConnection; -using Poco::Net::TCPServerConnectionFactory; -using Poco::Net::TCPServerConnectionFactoryImpl; -using Poco::Net::TCPServerParams; -using Poco::Net::StreamSocket; -using Poco::Net::ServerSocket; -using Poco::Net::SocketAddress; -using Poco::Thread; - - -namespace -{ - class EchoConnection: public TCPServerConnection - { - public: - EchoConnection(const StreamSocket& s): TCPServerConnection(s) - { - } - - void run() - { - StreamSocket& ss = socket(); - try - { - char buffer[256]; - int n = ss.receiveBytes(buffer, sizeof(buffer)); - while (n > 0) - { - ss.sendBytes(buffer, n); - n = ss.receiveBytes(buffer, sizeof(buffer)); - } - } - catch (Poco::Exception& exc) - { - std::cerr << "EchoConnection: " << exc.displayText() << std::endl; - } - } - }; -} - - -TCPServerTest::TCPServerTest(const std::string& name): CppUnit::TestCase(name) -{ -} - - -TCPServerTest::~TCPServerTest() -{ -} - - -void TCPServerTest::testOneConnection() -{ - TCPServer srv(new TCPServerConnectionFactoryImpl()); - srv.start(); - assert (srv.currentConnections() == 0); - assert (srv.currentThreads() == 0); - assert (srv.queuedConnections() == 0); - assert (srv.totalConnections() == 0); - - SocketAddress sa("localhost", srv.socket().address().port()); - StreamSocket ss1(sa); - std::string data("hello, world"); - ss1.sendBytes(data.data(), (int) data.size()); - char buffer[256]; - int n = ss1.receiveBytes(buffer, sizeof(buffer)); - assert (n > 0); - assert (std::string(buffer, n) == data); - assert (srv.currentConnections() == 1); - assert (srv.currentThreads() == 1); - assert (srv.queuedConnections() == 0); - assert (srv.totalConnections() == 1); - ss1.close(); - Thread::sleep(1000); - assert (srv.currentConnections() == 0); -} - - -void TCPServerTest::testTwoConnections() -{ - TCPServer srv(new TCPServerConnectionFactoryImpl()); - srv.start(); - assert (srv.currentConnections() == 0); - assert (srv.currentThreads() == 0); - assert (srv.queuedConnections() == 0); - assert (srv.totalConnections() == 0); - - SocketAddress sa("localhost", srv.socket().address().port()); - StreamSocket ss1(sa); - StreamSocket ss2(sa); - std::string data("hello, world"); - ss1.sendBytes(data.data(), (int) data.size()); - ss2.sendBytes(data.data(), (int) data.size()); - - char buffer[256]; - int n = ss1.receiveBytes(buffer, sizeof(buffer)); - assert (n > 0); - assert (std::string(buffer, n) == data); - - n = ss2.receiveBytes(buffer, sizeof(buffer)); - assert (n > 0); - assert (std::string(buffer, n) == data); - - assert (srv.currentConnections() == 2); - assert (srv.currentThreads() == 2); - assert (srv.queuedConnections() == 0); - assert (srv.totalConnections() == 2); - ss1.close(); - Thread::sleep(1000); - assert (srv.currentConnections() == 1); - assert (srv.currentThreads() == 1); - assert (srv.queuedConnections() == 0); - assert (srv.totalConnections() == 2); - ss2.close(); - - Thread::sleep(1000); - assert (srv.currentConnections() == 0); -} - - -void TCPServerTest::testMultiConnections() -{ - ServerSocket svs(0); - TCPServerParams* pParams = new TCPServerParams; - pParams->setMaxThreads(4); - pParams->setMaxQueued(4); - pParams->setThreadIdleTime(100); - TCPServer srv(new TCPServerConnectionFactoryImpl(), svs, pParams); - srv.start(); - assert (srv.currentConnections() == 0); - assert (srv.currentThreads() == 0); - assert (srv.maxThreads() >= 4); - assert (srv.queuedConnections() == 0); - assert (srv.totalConnections() == 0); - - SocketAddress sa("localhost", svs.address().port()); - StreamSocket ss1(sa); - StreamSocket ss2(sa); - StreamSocket ss3(sa); - StreamSocket ss4(sa); - std::string data("hello, world"); - ss1.sendBytes(data.data(), (int) data.size()); - ss2.sendBytes(data.data(), (int) data.size()); - ss3.sendBytes(data.data(), (int) data.size()); - ss4.sendBytes(data.data(), (int) data.size()); - - char buffer[256]; - int n = ss1.receiveBytes(buffer, sizeof(buffer)); - assert (n > 0); - assert (std::string(buffer, n) == data); - - n = ss2.receiveBytes(buffer, sizeof(buffer)); - assert (n > 0); - assert (std::string(buffer, n) == data); - - n = ss3.receiveBytes(buffer, sizeof(buffer)); - assert (n > 0); - assert (std::string(buffer, n) == data); - - n = ss4.receiveBytes(buffer, sizeof(buffer)); - assert (n > 0); - assert (std::string(buffer, n) == data); - - assert (srv.currentConnections() == 4); - assert (srv.currentThreads() == 4); - assert (srv.queuedConnections() == 0); - assert (srv.totalConnections() == 4); - - StreamSocket ss5(sa); - Thread::sleep(200); - assert (srv.queuedConnections() == 1); - StreamSocket ss6(sa); - Thread::sleep(200); - assert (srv.queuedConnections() == 2); - - ss1.close(); - Thread::sleep(2000); - assert (srv.currentConnections() == 4); - assert (srv.currentThreads() == 4); - assert (srv.queuedConnections() == 1); - assert (srv.totalConnections() == 5); - - ss2.close(); - Thread::sleep(2000); - assert (srv.currentConnections() == 4); - assert (srv.currentThreads() == 4); - assert (srv.queuedConnections() == 0); - assert (srv.totalConnections() == 6); - - ss3.close(); - Thread::sleep(2000); - assert (srv.currentConnections() == 3); - assert (srv.currentThreads() == 3); - assert (srv.queuedConnections() == 0); - assert (srv.totalConnections() == 6); - - ss4.close(); - Thread::sleep(2000); - assert (srv.currentConnections() == 2); - assert (srv.currentThreads() == 2); - assert (srv.queuedConnections() == 0); - assert (srv.totalConnections() == 6); - - ss5.close(); - ss6.close(); - Thread::sleep(1000); - assert (srv.currentConnections() == 0); -} - -void TCPServerTest::testThreadCapacity(){ - ServerSocket svs(0); - TCPServerParams* pParams = new TCPServerParams; - pParams->setMaxThreads(64); - TCPServer srv(new TCPServerConnectionFactoryImpl(), svs, pParams); - srv.start(); - assert (srv.maxThreads() >= 64); -} - - - -void TCPServerTest::setUp() -{ -} - - -void TCPServerTest::tearDown() -{ -} - - -CppUnit::Test* TCPServerTest::suite() -{ - CppUnit::TestSuite* pSuite = new CppUnit::TestSuite("TCPServerTest"); - - CppUnit_addTest(pSuite, TCPServerTest, testOneConnection); - CppUnit_addTest(pSuite, TCPServerTest, testTwoConnections); - CppUnit_addTest(pSuite, TCPServerTest, testMultiConnections); - CppUnit_addTest(pSuite, TCPServerTest, testThreadCapacity); - - return pSuite; -} diff --git a/contrib/libpoco/Net/testsuite/src/TCPServerTest.h b/contrib/libpoco/Net/testsuite/src/TCPServerTest.h deleted file mode 100644 index 5ef556c4642..00000000000 --- a/contrib/libpoco/Net/testsuite/src/TCPServerTest.h +++ /dev/null @@ -1,43 +0,0 @@ -// -// TCPServerTest.h -// -// $Id: //poco/1.4/Net/testsuite/src/TCPServerTest.h#1 $ -// -// Definition of the TCPServerTest class. -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef TCPServerTest_INCLUDED -#define TCPServerTest_INCLUDED - - -#include "Poco/Net/Net.h" -#include "CppUnit/TestCase.h" - - -class TCPServerTest: public CppUnit::TestCase -{ -public: - TCPServerTest(const std::string& name); - ~TCPServerTest(); - - void testOneConnection(); - void testTwoConnections(); - void testMultiConnections(); - void testThreadCapacity(); - - void setUp(); - void tearDown(); - - static CppUnit::Test* suite(); - -private: -}; - - -#endif // TCPServerTest_INCLUDED diff --git a/contrib/libpoco/Net/testsuite/src/TCPServerTestSuite.cpp b/contrib/libpoco/Net/testsuite/src/TCPServerTestSuite.cpp deleted file mode 100644 index fa4f5228abc..00000000000 --- a/contrib/libpoco/Net/testsuite/src/TCPServerTestSuite.cpp +++ /dev/null @@ -1,24 +0,0 @@ -// -// TCPServerTestSuite.cpp -// -// $Id: //poco/1.4/Net/testsuite/src/TCPServerTestSuite.cpp#1 $ -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "TCPServerTestSuite.h" -#include "TCPServerTest.h" - - -CppUnit::Test* TCPServerTestSuite::suite() -{ - CppUnit::TestSuite* pSuite = new CppUnit::TestSuite("TCPServerTestSuite"); - - pSuite->addTest(TCPServerTest::suite()); - - return pSuite; -} diff --git a/contrib/libpoco/Net/testsuite/src/TCPServerTestSuite.h b/contrib/libpoco/Net/testsuite/src/TCPServerTestSuite.h deleted file mode 100644 index 24a10f1ae1e..00000000000 --- a/contrib/libpoco/Net/testsuite/src/TCPServerTestSuite.h +++ /dev/null @@ -1,29 +0,0 @@ -// -// TCPServerTestSuite.h -// -// $Id: //poco/1.4/Net/testsuite/src/TCPServerTestSuite.h#1 $ -// -// Definition of the TCPServerTestSuite class. -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef TCPServerTestSuite_INCLUDED -#define TCPServerTestSuite_INCLUDED - - -#include "CppUnit/TestSuite.h" - - -class TCPServerTestSuite -{ -public: - static CppUnit::Test* suite(); -}; - - -#endif // TCPServerTestSuite_INCLUDED diff --git a/contrib/libpoco/Net/testsuite/src/UDPEchoServer.cpp b/contrib/libpoco/Net/testsuite/src/UDPEchoServer.cpp deleted file mode 100644 index 1286e12a0d6..00000000000 --- a/contrib/libpoco/Net/testsuite/src/UDPEchoServer.cpp +++ /dev/null @@ -1,85 +0,0 @@ -// -// UDPEchoServer.cpp -// -// $Id: //poco/1.4/Net/testsuite/src/UDPEchoServer.cpp#1 $ -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "UDPEchoServer.h" -#include "Poco/Net/SocketAddress.h" -#include "Poco/Timespan.h" -#include - - -using Poco::Net::Socket; -using Poco::Net::DatagramSocket; -using Poco::Net::SocketAddress; -using Poco::Net::IPAddress; - - -UDPEchoServer::UDPEchoServer(): - _thread("UDPEchoServer"), - _stop(false) -{ - _socket.bind(SocketAddress(), true); - _thread.start(*this); - _ready.wait(); -} - - -UDPEchoServer::UDPEchoServer(const SocketAddress& sa): - _thread("UDPEchoServer"), - _stop(false) -{ - _socket.bind(sa, true); - _thread.start(*this); - _ready.wait(); -} - - -UDPEchoServer::~UDPEchoServer() -{ - _stop = true; - _thread.join(); -} - - -Poco::UInt16 UDPEchoServer::port() const -{ - return _socket.address().port(); -} - - -void UDPEchoServer::run() -{ - Poco::Timespan span(250000); - while (!_stop) - { - _ready.set(); - if (_socket.poll(span, Socket::SELECT_READ)) - { - try - { - char buffer[256]; - SocketAddress sender; - int n = _socket.receiveFrom(buffer, sizeof(buffer), sender); - n = _socket.sendTo(buffer, n, sender); - } - catch (Poco::Exception& exc) - { - std::cerr << "UDPEchoServer: " << exc.displayText() << std::endl; - } - } - } -} - - -SocketAddress UDPEchoServer::address() const -{ - return _socket.address(); -} diff --git a/contrib/libpoco/Net/testsuite/src/UDPEchoServer.h b/contrib/libpoco/Net/testsuite/src/UDPEchoServer.h deleted file mode 100644 index 7e3a73a5ab6..00000000000 --- a/contrib/libpoco/Net/testsuite/src/UDPEchoServer.h +++ /dev/null @@ -1,58 +0,0 @@ -// -// UDPEchoServer.h -// -// $Id: //poco/1.4/Net/testsuite/src/UDPEchoServer.h#1 $ -// -// Definition of the UDPEchoServer class. -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef UDPEchoServer_INCLUDED -#define UDPEchoServer_INCLUDED - - -#include "Poco/Net/Net.h" -#include "Poco/Net/DatagramSocket.h" -#include "Poco/Net/SocketAddress.h" -#include "Poco/Thread.h" -#include "Poco/Event.h" - - -class UDPEchoServer: public Poco::Runnable - /// A simple sequential UDP echo server. -{ -public: - UDPEchoServer(); - /// Creates the UDPEchoServer. - - UDPEchoServer(const Poco::Net::SocketAddress& sa); - /// Creates the UDPEchoServer and binds it to - /// the given address. - - ~UDPEchoServer(); - /// Destroys the UDPEchoServer. - - Poco::UInt16 port() const; - /// Returns the port the echo server is - /// listening on. - - Poco::Net::SocketAddress address() const; - /// Returns the address of the server. - - void run(); - /// Does the work. - -private: - Poco::Net::DatagramSocket _socket; - Poco::Thread _thread; - Poco::Event _ready; - bool _stop; -}; - - -#endif // UDPEchoServer_INCLUDED diff --git a/contrib/libpoco/Net/testsuite/src/WebSocketTest.cpp b/contrib/libpoco/Net/testsuite/src/WebSocketTest.cpp deleted file mode 100644 index 1fe0773deb1..00000000000 --- a/contrib/libpoco/Net/testsuite/src/WebSocketTest.cpp +++ /dev/null @@ -1,231 +0,0 @@ -// -// WebSocketTest.cpp -// -// $Id: //poco/1.4/Net/testsuite/src/WebSocketTest.cpp#3 $ -// -// Copyright (c) 2012, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "WebSocketTest.h" -#include "CppUnit/TestCaller.h" -#include "CppUnit/TestSuite.h" -#include "Poco/Net/WebSocket.h" -#include "Poco/Net/SocketStream.h" -#include "Poco/Net/HTTPClientSession.h" -#include "Poco/Net/HTTPServer.h" -#include "Poco/Net/HTTPServerParams.h" -#include "Poco/Net/HTTPRequestHandler.h" -#include "Poco/Net/HTTPRequestHandlerFactory.h" -#include "Poco/Net/HTTPServerRequest.h" -#include "Poco/Net/HTTPServerResponse.h" -#include "Poco/Net/ServerSocket.h" -#include "Poco/Net/NetException.h" -#include "Poco/Thread.h" - - -using Poco::Net::HTTPClientSession; -using Poco::Net::HTTPRequest; -using Poco::Net::HTTPResponse; -using Poco::Net::HTTPServerRequest; -using Poco::Net::HTTPServerResponse; -using Poco::Net::SocketStream; -using Poco::Net::WebSocket; -using Poco::Net::WebSocketException; - - -namespace -{ - class WebSocketRequestHandler: public Poco::Net::HTTPRequestHandler - { - public: - WebSocketRequestHandler(std::size_t bufSize = 1024): _bufSize(bufSize) - { - } - - void handleRequest(HTTPServerRequest& request, HTTPServerResponse& response) - { - try - { - WebSocket ws(request, response); - std::unique_ptr pBuffer(new char[_bufSize]); - int flags; - int n; - do - { - n = ws.receiveFrame(pBuffer.get(), _bufSize, flags); - ws.sendFrame(pBuffer.get(), n, flags); - } - while (n > 0 || (flags & WebSocket::FRAME_OP_BITMASK) != WebSocket::FRAME_OP_CLOSE); - } - catch (WebSocketException& exc) - { - switch (exc.code()) - { - case WebSocket::WS_ERR_HANDSHAKE_UNSUPPORTED_VERSION: - response.set("Sec-WebSocket-Version", WebSocket::WEBSOCKET_VERSION); - // fallthrough - case WebSocket::WS_ERR_NO_HANDSHAKE: - case WebSocket::WS_ERR_HANDSHAKE_NO_VERSION: - case WebSocket::WS_ERR_HANDSHAKE_NO_KEY: - response.setStatusAndReason(HTTPResponse::HTTP_BAD_REQUEST); - response.setContentLength(0); - response.send(); - break; - } - } - } - - private: - std::size_t _bufSize; - }; - - class WebSocketRequestHandlerFactory: public Poco::Net::HTTPRequestHandlerFactory - { - public: - WebSocketRequestHandlerFactory(std::size_t bufSize = 1024): _bufSize(bufSize) - { - } - - Poco::Net::HTTPRequestHandler* createRequestHandler(const HTTPServerRequest& request) - { - return new WebSocketRequestHandler(_bufSize); - } - - private: - std::size_t _bufSize; - }; -} - - -WebSocketTest::WebSocketTest(const std::string& name): CppUnit::TestCase(name) -{ -} - - -WebSocketTest::~WebSocketTest() -{ -} - - -void WebSocketTest::testWebSocket() -{ - Poco::Net::ServerSocket ss(0); - Poco::Net::HTTPServer server(new WebSocketRequestHandlerFactory, ss, new Poco::Net::HTTPServerParams); - server.start(); - - Poco::Thread::sleep(200); - - HTTPClientSession cs("localhost", ss.address().port()); - HTTPRequest request(HTTPRequest::HTTP_GET, "/ws"); - HTTPResponse response; - WebSocket ws(cs, request, response); - - std::string payload("x"); - ws.sendFrame(payload.data(), (int) payload.size()); - char buffer[1024]; - int flags; - int n = ws.receiveFrame(buffer, sizeof(buffer), flags); - assert (n == payload.size()); - assert (payload.compare(0, payload.size(), buffer, 0, n) == 0); - assert (flags == WebSocket::FRAME_TEXT); - - for (int i = 2; i < 20; i++) - { - payload.assign(i, 'x'); - ws.sendFrame(payload.data(), (int) payload.size()); - n = ws.receiveFrame(buffer, sizeof(buffer), flags); - assert (n == payload.size()); - assert (payload.compare(0, payload.size(), buffer, 0, n) == 0); - assert (flags == WebSocket::FRAME_TEXT); - } - - for (int i = 125; i < 129; i++) - { - payload.assign(i, 'x'); - ws.sendFrame(payload.data(), (int) payload.size()); - n = ws.receiveFrame(buffer, sizeof(buffer), flags); - assert (n == payload.size()); - assert (payload.compare(0, payload.size(), buffer, 0, n) == 0); - assert (flags == WebSocket::FRAME_TEXT); - } - - payload = "Hello, world!"; - ws.sendFrame(payload.data(), (int) payload.size()); - n = ws.receiveFrame(buffer, sizeof(buffer), flags); - assert (n == payload.size()); - assert (payload.compare(0, payload.size(), buffer, 0, n) == 0); - assert (flags == WebSocket::FRAME_TEXT); - - payload = "Hello, universe!"; - ws.sendFrame(payload.data(), (int) payload.size(), WebSocket::FRAME_BINARY); - n = ws.receiveFrame(buffer, sizeof(buffer), flags); - assert (n == payload.size()); - assert (payload.compare(0, payload.size(), buffer, 0, n) == 0); - assert (flags == WebSocket::FRAME_BINARY); - - ws.shutdown(); - n = ws.receiveFrame(buffer, sizeof(buffer), flags); - assert (n == 2); - assert ((flags & WebSocket::FRAME_OP_BITMASK) == WebSocket::FRAME_OP_CLOSE); - - server.stop(); -} - - -void WebSocketTest::testWebSocketLarge() -{ - const int msgSize = 64000; - - Poco::Net::ServerSocket ss(0); - Poco::Net::HTTPServer server(new WebSocketRequestHandlerFactory(msgSize), ss, new Poco::Net::HTTPServerParams); - server.start(); - - Poco::Thread::sleep(200); - - HTTPClientSession cs("localhost", ss.address().port()); - HTTPRequest request(HTTPRequest::HTTP_GET, "/ws"); - HTTPResponse response; - WebSocket ws(cs, request, response); - ws.setSendBufferSize(msgSize); - ws.setReceiveBufferSize(msgSize); - std::string payload(msgSize, 'x'); - SocketStream sstr(ws); - sstr << payload; - sstr.flush(); - - char buffer[msgSize + 1]; - int flags; - int n = 0; - do - { - n += ws.receiveFrame(buffer + n, sizeof(buffer) - n, flags); - } while (n > 0 && n < msgSize); - - assert (n == payload.size()); - assert (payload.compare(0, payload.size(), buffer, 0, n) == 0); -} - - -void WebSocketTest::setUp() -{ -} - - -void WebSocketTest::tearDown() -{ -} - - -CppUnit::Test* WebSocketTest::suite() -{ - CppUnit::TestSuite* pSuite = new CppUnit::TestSuite("WebSocketTest"); - - CppUnit_addTest(pSuite, WebSocketTest, testWebSocket); - CppUnit_addTest(pSuite, WebSocketTest, testWebSocketLarge); - - return pSuite; -} diff --git a/contrib/libpoco/Net/testsuite/src/WebSocketTest.h b/contrib/libpoco/Net/testsuite/src/WebSocketTest.h deleted file mode 100644 index 939acf630c3..00000000000 --- a/contrib/libpoco/Net/testsuite/src/WebSocketTest.h +++ /dev/null @@ -1,41 +0,0 @@ -// -// WebSocketTest.h -// -// $Id: //poco/1.4/Net/testsuite/src/WebSocketTest.h#1 $ -// -// Definition of the WebSocketTest class. -// -// Copyright (c) 2012, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef WebSocketTest_INCLUDED -#define WebSocketTest_INCLUDED - - -#include "Poco/Net/Net.h" -#include "CppUnit/TestCase.h" - - -class WebSocketTest: public CppUnit::TestCase -{ -public: - WebSocketTest(const std::string& name); - ~WebSocketTest(); - - void testWebSocket(); - void testWebSocketLarge(); - - void setUp(); - void tearDown(); - - static CppUnit::Test* suite(); - -private: -}; - - -#endif // WebSocketTest_INCLUDED diff --git a/contrib/libpoco/Net/testsuite/src/WebSocketTestSuite.cpp b/contrib/libpoco/Net/testsuite/src/WebSocketTestSuite.cpp deleted file mode 100644 index 162eb38aab0..00000000000 --- a/contrib/libpoco/Net/testsuite/src/WebSocketTestSuite.cpp +++ /dev/null @@ -1,24 +0,0 @@ -// -// WebSocketTestSuite.cpp -// -// $Id: //poco/1.4/Net/testsuite/src/WebSocketTestSuite.cpp#1 $ -// -// Copyright (c) 2012, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "WebSocketTestSuite.h" -#include "WebSocketTest.h" - - -CppUnit::Test* WebSocketTestSuite::suite() -{ - CppUnit::TestSuite* pSuite = new CppUnit::TestSuite("WebSocketTestSuite"); - - pSuite->addTest(WebSocketTest::suite()); - - return pSuite; -} diff --git a/contrib/libpoco/Net/testsuite/src/WebSocketTestSuite.h b/contrib/libpoco/Net/testsuite/src/WebSocketTestSuite.h deleted file mode 100644 index 83b5dbb81d4..00000000000 --- a/contrib/libpoco/Net/testsuite/src/WebSocketTestSuite.h +++ /dev/null @@ -1,29 +0,0 @@ -// -// WebSocketTestSuite.h -// -// $Id: //poco/1.4/Net/testsuite/src/WebSocketTestSuite.h#1 $ -// -// Definition of the WebSocketTestSuite class. -// -// Copyright (c) 2012, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef WebSocketTestSuite_INCLUDED -#define WebSocketTestSuite_INCLUDED - - -#include "CppUnit/TestSuite.h" - - -class WebSocketTestSuite -{ -public: - static CppUnit::Test* suite(); -}; - - -#endif // WebSocketTestSuite_INCLUDED diff --git a/contrib/libpoco/Net/testsuite/src/WinCEDriver.cpp b/contrib/libpoco/Net/testsuite/src/WinCEDriver.cpp deleted file mode 100644 index f2f5742d89c..00000000000 --- a/contrib/libpoco/Net/testsuite/src/WinCEDriver.cpp +++ /dev/null @@ -1,32 +0,0 @@ -// -// WinCEDriver.cpp -// -// $Id: //poco/1.4/Net/testsuite/src/WinCEDriver.cpp#1 $ -// -// Console-based test driver for Windows CE. -// -// Copyright (c) 2004-2010, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "CppUnit/TestRunner.h" -#include "NetTestSuite.h" -#include - - -int wmain(int argc, wchar_t* argv[]) -{ - std::vector args; - for (int i = 0; i < argc; ++i) - { - char buffer[1024]; - std::wcstombs(buffer, argv[i], sizeof(buffer)); - args.push_back(std::string(buffer)); - } - CppUnit::TestRunner runner; - runner.addTest("NetTestSuite", NetTestSuite::suite()); - return runner.run(args) ? 0 : 1; -} diff --git a/contrib/libpoco/Net/testsuite/src/WinDriver.cpp b/contrib/libpoco/Net/testsuite/src/WinDriver.cpp deleted file mode 100644 index 1f2186a8ba3..00000000000 --- a/contrib/libpoco/Net/testsuite/src/WinDriver.cpp +++ /dev/null @@ -1,30 +0,0 @@ -// -// WinDriver.cpp -// -// $Id: //poco/1.4/Net/testsuite/src/WinDriver.cpp#1 $ -// -// Windows test driver for Poco Net. -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "WinTestRunner/WinTestRunner.h" -#include "NetTestSuite.h" - - -class TestDriver: public CppUnit::WinTestRunnerApp -{ - void TestMain() - { - CppUnit::WinTestRunner runner; - runner.addTest(NetTestSuite::suite()); - runner.run(); - } -}; - - -TestDriver theDriver; diff --git a/contrib/libpoco/NetSSL_OpenSSL/CMakeLists.txt b/contrib/libpoco/NetSSL_OpenSSL/CMakeLists.txt deleted file mode 100644 index 8681748659b..00000000000 --- a/contrib/libpoco/NetSSL_OpenSSL/CMakeLists.txt +++ /dev/null @@ -1,28 +0,0 @@ -set(LIBNAME "PocoNetSSL") -set(POCO_LIBNAME "${LIBNAME}") - -# Sources -file(GLOB SRCS_G "src/*.cpp") -POCO_SOURCES_AUTO( SRCS ${SRCS_G}) - -# Headers -file(GLOB_RECURSE HDRS_G "include/*.h" ) -POCO_HEADERS_AUTO( SRCS ${HDRS_G}) - -include_directories (BEFORE include) - -add_library( "${LIBNAME}" ${LIB_MODE} ${SRCS} ) -set_target_properties( "${LIBNAME}" - PROPERTIES - VERSION ${SHARED_LIBRARY_VERSION} SOVERSION ${SHARED_LIBRARY_VERSION} - OUTPUT_NAME ${POCO_LIBNAME} - DEFINE_SYMBOL NetSSL_EXPORTS - ) - -target_link_libraries( "${LIBNAME}" PocoCrypto PocoNet PocoUtil PocoFoundation ${OPENSSL_SSL_LIBRARY} ${OPENSSL_CRYPTO_LIBRARY} ) - -if (POCO_ENABLE_TESTS) - add_subdirectory(samples) - add_subdirectory(testsuite) -endif () - diff --git a/contrib/libpoco/NetSSL_OpenSSL/cmake/PocoNetSSLConfig.cmake b/contrib/libpoco/NetSSL_OpenSSL/cmake/PocoNetSSLConfig.cmake deleted file mode 100644 index fa52ce0c61c..00000000000 --- a/contrib/libpoco/NetSSL_OpenSSL/cmake/PocoNetSSLConfig.cmake +++ /dev/null @@ -1,6 +0,0 @@ -include(CMakeFindDependencyMacro) -find_dependency(PocoFoundation) -find_dependency(PocoUtil) -find_dependency(PocoNet) -find_dependency(PocoCrypto) -include("${CMAKE_CURRENT_LIST_DIR}/PocoNetSSLTargets.cmake") diff --git a/contrib/libpoco/NetSSL_OpenSSL/doc/howtobuild.txt b/contrib/libpoco/NetSSL_OpenSSL/doc/howtobuild.txt deleted file mode 100644 index 0b353b62466..00000000000 --- a/contrib/libpoco/NetSSL_OpenSSL/doc/howtobuild.txt +++ /dev/null @@ -1,36 +0,0 @@ -NetSSL requires OpenSSL release 0.9.8 or later. - -Unix -==== - -Most Unix systems already have OpenSSL preinstalled. -If your system does not have OpenSSL, please get it from -http://www.openssl.org/ or another source. You do not -have to build OpenSSL yourself - a binary distribution -is fine. - -If you do build OpenSSl yourself be sure to call - -./configure --prefix=/usr --openssldir/usr/openssl -make -make install (with superuser rights) - -so that poco works out of the box - - -Windows -======= - -The easiest way to install OpenSSL on Windows is to -use a binary (prebuild) release, for example the -one from Shining Light Productions that comes with -a Windows installer. - -1. Download OpenSSL (at least v0.98a) from: - http://www.slproweb.com/products/Win32OpenSSL.html -2. Install OpenSSL (we assume you install to c:\OpenSSL) -3. Start Visual Studio, go to Tools->Options, under Projects->VC++ Directories - add the following directories: - - Include Files: C:\OpenSSL\include - - Library Files: C:\OpenSSL\lib\VC -4. You are now ready to build NetSSL. diff --git a/contrib/libpoco/NetSSL_OpenSSL/include/Poco/Net/AcceptCertificateHandler.h b/contrib/libpoco/NetSSL_OpenSSL/include/Poco/Net/AcceptCertificateHandler.h deleted file mode 100644 index 8fcc8a19174..00000000000 --- a/contrib/libpoco/NetSSL_OpenSSL/include/Poco/Net/AcceptCertificateHandler.h +++ /dev/null @@ -1,54 +0,0 @@ -// -// AcceptCertificateHandler.h -// -// $Id: //poco/1.4/NetSSL_OpenSSL/include/Poco/Net/AcceptCertificateHandler.h#1 $ -// -// Library: NetSSL_OpenSSL -// Package: SSLCore -// Module: AcceptCertificateHandler -// -// Definition of the AcceptCertificateHandler class. -// -// Copyright (c) 2006-2009, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef NetSSL_AcceptCertificateHandler_INCLUDED -#define NetSSL_AcceptCertificateHandler_INCLUDED - - -#include "Poco/Net/NetSSL.h" -#include "Poco/Net/InvalidCertificateHandler.h" - - -namespace Poco { -namespace Net { - - -class NetSSL_API AcceptCertificateHandler: public InvalidCertificateHandler - /// A AcceptCertificateHandler is invoked whenever an error - /// occurs verifying the certificate. It always accepts - /// the certificate. - /// - /// Should be using for testing purposes only. -{ -public: - AcceptCertificateHandler(bool handleErrorsOnServerSide); - /// Creates the AcceptCertificateHandler - - virtual ~AcceptCertificateHandler(); - /// Destroys the AcceptCertificateHandler. - - void onInvalidCertificate(const void* pSender, VerificationErrorArgs& errorCert); - /// Receives the questionable certificate in parameter errorCert. If one wants to accept the - /// certificate, call errorCert.setIgnoreError(true). -}; - - -} } // namespace Poco::Net - - -#endif // NetSSL_AcceptCertificateHandler_INCLUDED diff --git a/contrib/libpoco/NetSSL_OpenSSL/include/Poco/Net/CertificateHandlerFactory.h b/contrib/libpoco/NetSSL_OpenSSL/include/Poco/Net/CertificateHandlerFactory.h deleted file mode 100644 index bc5e8b9e916..00000000000 --- a/contrib/libpoco/NetSSL_OpenSSL/include/Poco/Net/CertificateHandlerFactory.h +++ /dev/null @@ -1,95 +0,0 @@ -// -// CertificateHandlerFactory.h -// -// $Id: //poco/1.4/NetSSL_OpenSSL/include/Poco/Net/CertificateHandlerFactory.h#1 $ -// -// Library: NetSSL_OpenSSL -// Package: SSLCore -// Module: CertificateHandlerFactory -// -// Definition of the CertificateHandlerFactory class. -// -// Copyright (c) 2006-2009, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef NetSSL_CertificateHandlerFactory_INCLUDED -#define NetSSL_CertificateHandlerFactory_INCLUDED - - -#include "Poco/Net/NetSSL.h" - - -namespace Poco { -namespace Net { - - -class InvalidCertificateHandler; - - -class NetSSL_API CertificateHandlerFactory - /// A CertificateHandlerFactory is responsible for creating InvalidCertificateHandlers. - /// - /// You don't need to access this class directly. Use the macro - /// POCO_REGISTER_CHFACTORY(namespace, InvalidCertificateHandlerName) - /// instead (see the documentation of InvalidCertificateHandler for an example). -{ -public: - CertificateHandlerFactory(); - /// Creates the CertificateHandlerFactory. - - virtual ~CertificateHandlerFactory(); - /// Destroys the CertificateHandlerFactory. - - virtual InvalidCertificateHandler* create(bool server) const = 0; - /// Creates a new InvalidCertificateHandler. Set server to true if the certificate handler is used on the server side. -}; - - -class NetSSL_API CertificateHandlerFactoryRegistrar - /// Registrar class which automatically registers CertificateHandlerFactory at the CertificateHandlerFactoryMgr. - /// You don't need to access this class directly. Use the macro - /// POCO_REGISTER_CHFACTORY(namespace, InvalidCertificateHandlerName) - /// instead (see the documentation of InvalidCertificateHandler for an example). -{ -public: - CertificateHandlerFactoryRegistrar(const std::string& name, CertificateHandlerFactory* pFactory); - /// Registers the CertificateHandlerFactory with the given name at the factory manager. - - virtual ~CertificateHandlerFactoryRegistrar(); - /// Destroys the CertificateHandlerFactoryRegistrar. -}; - - -template -class CertificateHandlerFactoryImpl: public Poco::Net::CertificateHandlerFactory -{ -public: - CertificateHandlerFactoryImpl() - { - } - - ~CertificateHandlerFactoryImpl() - { - } - - InvalidCertificateHandler* create(bool server) const - { - return new T(server); - } -}; - - -} } // namespace Poco::Net - - -// DEPRECATED: register the factory directly at the FactoryMgr: -// Poco::Net::SSLManager::instance().certificateHandlerFactoryMgr().setFactory(name, new Poco::Net::CertificateHandlerFactoryImpl()); -#define POCO_REGISTER_CHFACTORY(API, PKCLS) \ - static Poco::Net::CertificateHandlerFactoryRegistrar aRegistrar(std::string(#PKCLS), new Poco::Net::CertificateHandlerFactoryImpl()); - - -#endif // NetSSL_CertificateHandlerFactory_INCLUDED diff --git a/contrib/libpoco/NetSSL_OpenSSL/include/Poco/Net/CertificateHandlerFactoryMgr.h b/contrib/libpoco/NetSSL_OpenSSL/include/Poco/Net/CertificateHandlerFactoryMgr.h deleted file mode 100644 index 773a069eb27..00000000000 --- a/contrib/libpoco/NetSSL_OpenSSL/include/Poco/Net/CertificateHandlerFactoryMgr.h +++ /dev/null @@ -1,66 +0,0 @@ -// -// CertificateHandlerFactoryMgr.h -// -// $Id: //poco/1.4/NetSSL_OpenSSL/include/Poco/Net/CertificateHandlerFactoryMgr.h#1 $ -// -// Library: NetSSL_OpenSSL -// Package: SSLCore -// Module: CertificateHandlerFactoryMgr -// -// Definition of the CertificateHandlerFactoryMgr class. -// -// Copyright (c) 2006-2009, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef NetSSL_CertificateHandlerFactoryMgr_INCLUDED -#define NetSSL_CertificateHandlerFactoryMgr_INCLUDED - - -#include "Poco/Net/NetSSL.h" -#include "Poco/Net/CertificateHandlerFactory.h" -#include "Poco/SharedPtr.h" -#include - - -namespace Poco { -namespace Net { - - -class NetSSL_API CertificateHandlerFactoryMgr - /// A CertificateHandlerFactoryMgr manages all existing CertificateHandlerFactories. -{ -public: - typedef std::map > FactoriesMap; - - CertificateHandlerFactoryMgr(); - /// Creates the CertificateHandlerFactoryMgr. - - ~CertificateHandlerFactoryMgr(); - /// Destroys the CertificateHandlerFactoryMgr. - - void setFactory(const std::string& name, CertificateHandlerFactory* pFactory); - /// Registers the factory. Class takes ownership of the pointer. - /// If a factory with the same name already exists, an exception is thrown. - - bool hasFactory(const std::string& name) const; - /// Returns true if for the given name a factory is already registered - - const CertificateHandlerFactory* getFactory(const std::string& name) const; - /// Returns NULL if for the given name a factory does not exist, otherwise the factory is returned - - void removeFactory(const std::string& name); - /// Removes the factory from the manager. - -private: - FactoriesMap _factories; -}; - - -} } // namespace Poco::Net - - -#endif // NetSSL_CertificateHandlerFactoryMgr_INCLUDED diff --git a/contrib/libpoco/NetSSL_OpenSSL/include/Poco/Net/ConsoleCertificateHandler.h b/contrib/libpoco/NetSSL_OpenSSL/include/Poco/Net/ConsoleCertificateHandler.h deleted file mode 100644 index 8fcf1f083a9..00000000000 --- a/contrib/libpoco/NetSSL_OpenSSL/include/Poco/Net/ConsoleCertificateHandler.h +++ /dev/null @@ -1,52 +0,0 @@ -// -// ConsoleCertificateHandler.h -// -// $Id: //poco/1.4/NetSSL_OpenSSL/include/Poco/Net/ConsoleCertificateHandler.h#1 $ -// -// Library: NetSSL_OpenSSL -// Package: SSLCore -// Module: ConsoleCertificateHandler -// -// Definition of the ConsoleCertificateHandler class. -// -// Copyright (c) 2006-2009, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef NetSSL_ConsoleCertificateHandler_INCLUDED -#define NetSSL_ConsoleCertificateHandler_INCLUDED - - -#include "Poco/Net/NetSSL.h" -#include "Poco/Net/InvalidCertificateHandler.h" - - -namespace Poco { -namespace Net { - - -class NetSSL_API ConsoleCertificateHandler: public InvalidCertificateHandler - /// A ConsoleCertificateHandler is invoked whenever an error occurs verifying the certificate. - /// - /// The certificate is printed to stdout and the user is asked via console if he wants to accept it. -{ -public: - ConsoleCertificateHandler(bool handleErrorsOnServerSide); - /// Creates the ConsoleCertificateHandler. - - virtual ~ConsoleCertificateHandler(); - /// Destroys the ConsoleCertificateHandler. - - void onInvalidCertificate(const void* pSender, VerificationErrorArgs& errorCert); - /// Prints the certificate to stdout and waits for user input on the console - /// to decide if a certificate should be accepted/rejected. -}; - - -} } // namespace Poco::Net - - -#endif // NetSSL_ConsoleCertificateHandler_INCLUDED diff --git a/contrib/libpoco/NetSSL_OpenSSL/include/Poco/Net/Context.h b/contrib/libpoco/NetSSL_OpenSSL/include/Poco/Net/Context.h deleted file mode 100644 index 734e726b0b4..00000000000 --- a/contrib/libpoco/NetSSL_OpenSSL/include/Poco/Net/Context.h +++ /dev/null @@ -1,319 +0,0 @@ -// -// Context.h -// -// $Id: //poco/1.4/NetSSL_OpenSSL/include/Poco/Net/Context.h#2 $ -// -// Library: NetSSL_OpenSSL -// Package: SSLCore -// Module: Context -// -// Definition of the Context class. -// -// Copyright (c) 2006-2010, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef NetSSL_Context_INCLUDED -#define NetSSL_Context_INCLUDED - - -#include "Poco/Net/NetSSL.h" -#include "Poco/Net/SocketDefs.h" -#include "Poco/Crypto/X509Certificate.h" -#include "Poco/Crypto/RSAKey.h" -#include "Poco/RefCountedObject.h" -#include "Poco/AutoPtr.h" -#include -#include - - -namespace Poco { -namespace Net { - - -class NetSSL_API Context: public Poco::RefCountedObject - /// This class encapsulates context information for - /// an SSL server or client, such as the certificate - /// verification mode and the location of certificates - /// and private key files, as well as the list of - /// supported ciphers. - /// - /// The Context class is also used to control - /// SSL session caching on the server and client side. -{ -public: - typedef Poco::AutoPtr Ptr; - - enum Usage - { - CLIENT_USE, /// Context is used by a client. - SERVER_USE, /// Context is used by a server. - TLSV1_CLIENT_USE, /// Context is used by a client requiring TLSv1. - TLSV1_SERVER_USE, /// Context is used by a server requiring TLSv1. - TLSV1_1_CLIENT_USE, /// Context is used by a client requiring TLSv1.1 (OpenSSL 1.0.0 or newer). - TLSV1_1_SERVER_USE, /// Context is used by a server requiring TLSv1.1 (OpenSSL 1.0.0 or newer). - TLSV1_2_CLIENT_USE, /// Context is used by a client requiring TLSv1.2 (OpenSSL 1.0.1 or newer). - TLSV1_2_SERVER_USE /// Context is used by a server requiring TLSv1.2 (OpenSSL 1.0.1 or newer). - }; - - enum VerificationMode - { - VERIFY_NONE = SSL_VERIFY_NONE, - /// Server: The server will not send a client certificate - /// request to the client, so the client will not send a certificate. - /// - /// Client: If not using an anonymous cipher (by default disabled), - /// the server will send a certificate which will be checked, but - /// the result of the check will be ignored. - - VERIFY_RELAXED = SSL_VERIFY_PEER, - /// Server: The server sends a client certificate request to the - /// client. The certificate returned (if any) is checked. - /// If the verification process fails, the TLS/SSL handshake is - /// immediately terminated with an alert message containing the - /// reason for the verification failure. - /// - /// Client: The server certificate is verified, if one is provided. - /// If the verification process fails, the TLS/SSL handshake is - /// immediately terminated with an alert message containing the - /// reason for the verification failure. - - VERIFY_STRICT = SSL_VERIFY_PEER | SSL_VERIFY_FAIL_IF_NO_PEER_CERT, - /// Server: If the client did not return a certificate, the TLS/SSL - /// handshake is immediately terminated with a handshake failure - /// alert. - /// - /// Client: Same as VERIFY_RELAXED. - - VERIFY_ONCE = SSL_VERIFY_PEER | SSL_VERIFY_CLIENT_ONCE - /// Server: Only request a client certificate on the initial - /// TLS/SSL handshake. Do not ask for a client certificate - /// again in case of a renegotiation. - /// - /// Client: Same as VERIFY_RELAXED. - }; - - Context( - Usage usage, - const std::string& privateKeyFile, - const std::string& certificateFile, - const std::string& caLocation, - VerificationMode verificationMode = VERIFY_RELAXED, - int verificationDepth = 9, - bool loadDefaultCAs = false, - const std::string& cipherList = "ALL:!ADH:!LOW:!EXP:!MD5:@STRENGTH"); - /// Creates a Context. - /// - /// * usage specifies whether the context is used by a client or server. - /// * privateKeyFile contains the path to the private key file used for encryption. - /// Can be empty if no private key file is used. - /// * certificateFile contains the path to the certificate file (in PEM format). - /// If the private key and the certificate are stored in the same file, this - /// can be empty if privateKeyFile is given. - /// * caLocation contains the path to the file or directory containing the - /// CA/root certificates. Can be empty if the OpenSSL builtin CA certificates - /// are used (see loadDefaultCAs). - /// * verificationMode specifies whether and how peer certificates are validated. - /// * verificationDepth sets the upper limit for verification chain sizes. Verification - /// will fail if a certificate chain larger than this is encountered. - /// * loadDefaultCAs specifies wheter the builtin CA certificates from OpenSSL are used. - /// * cipherList specifies the supported ciphers in OpenSSL notation. - /// - /// Note: If the private key is protected by a passphrase, a PrivateKeyPassphraseHandler - /// must have been setup with the SSLManager, or the SSLManager's PrivateKeyPassphraseRequired - /// event must be handled. - - Context( - Usage usage, - const std::string& caLocation, - VerificationMode verificationMode = VERIFY_RELAXED, - int verificationDepth = 9, - bool loadDefaultCAs = false, - const std::string& cipherList = "ALL:!ADH:!LOW:!EXP:!MD5:@STRENGTH"); - /// Creates a Context. - /// - /// * usage specifies whether the context is used by a client or server. - /// * caLocation contains the path to the file or directory containing the - /// CA/root certificates. Can be empty if the OpenSSL builtin CA certificates - /// are used (see loadDefaultCAs). - /// * verificationMode specifies whether and how peer certificates are validated. - /// * verificationDepth sets the upper limit for verification chain sizes. Verification - /// will fail if a certificate chain larger than this is encountered. - /// * loadDefaultCAs specifies wheter the builtin CA certificates from OpenSSL are used. - /// * cipherList specifies the supported ciphers in OpenSSL notation. - /// - /// Note that a private key and/or certificate must be specified with - /// usePrivateKey()/useCertificate() before the Context can be used. - - ~Context(); - /// Destroys the Context. - - void useCertificate(const Poco::Crypto::X509Certificate& certificate); - /// Sets the certificate to be used by the Context. - /// - /// To set-up a complete certificate chain, it might be - /// necessary to call addChainCertificate() to specify - /// additional certificates. - /// - /// Note that useCertificate() must always be called before - /// usePrivateKey(). - - void addChainCertificate(const Poco::Crypto::X509Certificate& certificate); - /// Adds a certificate for certificate chain validation. - - void usePrivateKey(const Poco::Crypto::RSAKey& key); - /// Sets the private key to be used by the Context. - /// - /// Note that useCertificate() must always be called before - /// usePrivateKey(). - /// - /// Note: If the private key is protected by a passphrase, a PrivateKeyPassphraseHandler - /// must have been setup with the SSLManager, or the SSLManager's PrivateKeyPassphraseRequired - /// event must be handled. - - SSL_CTX* sslContext() const; - /// Returns the underlying OpenSSL SSL Context object. - - Usage usage() const; - /// Returns whether the context is for use by a client or by a server - /// and whether TLSv1 is required. - - bool isForServerUse() const; - /// Returns true iff the context is for use by a server. - - Context::VerificationMode verificationMode() const; - /// Returns the verification mode. - - void enableSessionCache(bool flag = true); - /// Enable or disable SSL/TLS session caching. - /// For session caching to work, it must be enabled - /// on the server, as well as on the client side. - /// - /// The default is disabled session caching. - /// - /// To enable session caching on the server side, use the - /// two-argument version of this method to specify - /// a session ID context. - - void enableSessionCache(bool flag, const std::string& sessionIdContext); - /// Enables or disables SSL/TLS session caching on the server. - /// For session caching to work, it must be enabled - /// on the server, as well as on the client side. - /// - /// SessionIdContext contains the application's unique - /// session ID context, which becomes part of each - /// session identifier generated by the server within this - /// context. SessionIdContext can be an arbitrary sequence - /// of bytes with a maximum length of SSL_MAX_SSL_SESSION_ID_LENGTH. - /// - /// A non-empty sessionIdContext should be specified even if - /// session caching is disabled to avoid problems with clients - /// requesting to reuse a session (e.g. Firefox 3.6). - /// - /// This method may only be called on SERVER_USE Context objects. - - bool sessionCacheEnabled() const; - /// Returns true iff the session cache is enabled. - - void setSessionCacheSize(std::size_t size); - /// Sets the maximum size of the server session cache, in number of - /// sessions. The default size (according to OpenSSL documentation) - /// is 1024*20, which may be too large for many applications, - /// especially on embedded platforms with limited memory. - /// - /// Specifying a size of 0 will set an unlimited cache size. - /// - /// This method may only be called on SERVER_USE Context objets. - - std::size_t getSessionCacheSize() const; - /// Returns the current maximum size of the server session cache. - /// - /// This method may only be called on SERVER_USE Context objets. - - void setSessionTimeout(long seconds); - /// Sets the timeout (in seconds) of cached sessions on the server. - /// A cached session will be removed from the cache if it has - /// not been used for the given number of seconds. - /// - /// This method may only be called on SERVER_USE Context objets. - - long getSessionTimeout() const; - /// Returns the timeout (in seconds) of cached sessions on the server. - /// - /// This method may only be called on SERVER_USE Context objets. - - void flushSessionCache(); - /// Flushes the SSL session cache on the server. - /// - /// This method may only be called on SERVER_USE Context objets. - - void enableExtendedCertificateVerification(bool flag = true); - /// Enable or disable the automatic post-connection - /// extended certificate verification. - /// - /// See X509Certificate::verify() for more information. - - bool extendedCertificateVerificationEnabled() const; - /// Returns true iff automatic extended certificate - /// verification is enabled. - - void disableStatelessSessionResumption(); - /// Newer versions of OpenSSL support RFC 4507 tickets for stateless - /// session resumption. - /// - /// The feature can be disabled by calling this method. - -private: - void createSSLContext(); - /// Create a SSL_CTX object according to Context configuration. - - Usage _usage; - VerificationMode _mode; - SSL_CTX* _pSSLContext; - bool _extendedCertificateVerification; -}; - - -// -// inlines -// -inline Context::Usage Context::usage() const -{ - return _usage; -} - - -inline bool Context::isForServerUse() const -{ - return _usage == SERVER_USE - || _usage == TLSV1_SERVER_USE - || _usage == TLSV1_1_SERVER_USE - || _usage == TLSV1_2_SERVER_USE; -} - - -inline Context::VerificationMode Context::verificationMode() const -{ - return _mode; -} - - -inline SSL_CTX* Context::sslContext() const -{ - return _pSSLContext; -} - - -inline bool Context::extendedCertificateVerificationEnabled() const -{ - return _extendedCertificateVerification; -} - - -} } // namespace Poco::Net - - -#endif // NetSSL_Context_INCLUDED diff --git a/contrib/libpoco/NetSSL_OpenSSL/include/Poco/Net/HTTPSClientSession.h b/contrib/libpoco/NetSSL_OpenSSL/include/Poco/Net/HTTPSClientSession.h deleted file mode 100644 index 638403b9b87..00000000000 --- a/contrib/libpoco/NetSSL_OpenSSL/include/Poco/Net/HTTPSClientSession.h +++ /dev/null @@ -1,167 +0,0 @@ -// -// HTTPSClientSession.h -// -// $Id: //poco/1.4/NetSSL_OpenSSL/include/Poco/Net/HTTPSClientSession.h#2 $ -// -// Library: NetSSL_OpenSSL -// Package: HTTPSClient -// Module: HTTPSClientSession -// -// Definition of the HTTPSClientSession class. -// -// Copyright (c) 2006-2009, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef NetSSL_HTTPSClientSession_INCLUDED -#define NetSSL_HTTPSClientSession_INCLUDED - - -#include "Poco/Net/NetSSL.h" -#include "Poco/Net/Utility.h" -#include "Poco/Net/HTTPClientSession.h" -#include "Poco/Net/Context.h" -#include "Poco/Net/Session.h" -#include "Poco/Net/X509Certificate.h" - - -namespace Poco { -namespace Net { - - -class SecureStreamSocket; -class HTTPRequest; -class HTTPResponse; - - -class NetSSL_API HTTPSClientSession: public HTTPClientSession - /// This class implements the client-side of - /// a HTTPS session. - /// - /// To send a HTTPS request to a HTTPS server, first - /// instantiate a HTTPSClientSession object and - /// specify the server's host name and port number. - /// - /// Then create a HTTPRequest object, fill it accordingly, - /// and pass it as argument to the sendRequst() method. - /// - /// sendRequest() will return an output stream that can - /// be used to send the request body, if there is any. - /// - /// After you are done sending the request body, create - /// a HTTPResponse object and pass it to receiveResponse(). - /// - /// This will return an input stream that can be used to - /// read the response body. - /// - /// See RFC 2616 for more - /// information about the HTTP protocol. - /// - /// Note that sending requests that neither contain a content length - /// field in the header nor are using chunked transfer encoding will - /// result in a SSL protocol violation, as the framework shuts down - /// the socket after sending the message body. No orderly SSL shutdown - /// will be performed in this case. - /// - /// If session caching has been enabled for the Context object passed - /// to the HTTPSClientSession, the HTTPSClientSession class will - /// attempt to reuse a previously obtained Session object in - /// case of a reconnect. -{ -public: - enum - { - HTTPS_PORT = 443 - }; - - HTTPSClientSession(); - /// Creates an unconnected HTTPSClientSession. - - explicit HTTPSClientSession(const SecureStreamSocket& socket); - /// Creates a HTTPSClientSession using the given socket. - /// The socket must not be connected. The session - /// takes ownership of the socket. - - HTTPSClientSession(const SecureStreamSocket& socket, Session::Ptr pSession); - /// Creates a HTTPSClientSession using the given socket. - /// The socket must not be connected. The session - /// takes ownership of the socket. - /// - /// The given Session is reused, if possible (client session - /// caching is enabled for the given Context, and the server - /// agrees to reuse the session). - - HTTPSClientSession(const std::string& host, Poco::UInt16 port = HTTPS_PORT); - /// Creates a HTTPSClientSession using the given host and port. - - explicit HTTPSClientSession(Context::Ptr pContext); - /// Creates an unconnected HTTPSClientSession, using the - /// give SSL context. - - HTTPSClientSession(Context::Ptr pContext, Session::Ptr pSession); - /// Creates an unconnected HTTPSClientSession, using the - /// give SSL context. - /// - /// The given Session is reused, if possible (client session - /// caching is enabled for the given Context, and the server - /// agrees to reuse the session). - - HTTPSClientSession(const std::string& host, Poco::UInt16 port, Context::Ptr pContext); - /// Creates a HTTPSClientSession using the given host and port, - /// using the given SSL context. - - HTTPSClientSession(const std::string& host, Poco::UInt16 port, Context::Ptr pContext, Session::Ptr pSession); - /// Creates a HTTPSClientSession using the given host and port, - /// using the given SSL context. - /// - /// The given Session is reused, if possible (client session - /// caching is enabled for the given Context, and the server - /// agrees to reuse the session). - - ~HTTPSClientSession(); - /// Destroys the HTTPSClientSession and closes - /// the underlying socket. - - bool secure() const; - /// Return true iff the session uses SSL or TLS, - /// or false otherwise. - - X509Certificate serverCertificate(); - /// Returns the server's certificate. - /// - /// The certificate is available after the first request has been sent. - - Session::Ptr sslSession(); - /// Returns the SSL Session object for the current - /// connection, if session caching has been enabled for - /// the HTTPSClientSession's Context. A null pointer is - /// returned otherwise. - /// - /// The Session object can be obtained after the first request has - /// been sent. - - // HTTPSession - void abort(); - -protected: - void connect(const SocketAddress& address); - std::string proxyRequestPrefix() const; - void proxyAuthenticate(HTTPRequest& request); - int read(char* buffer, std::streamsize length); - -private: - HTTPSClientSession(const HTTPSClientSession&); - HTTPSClientSession& operator = (const HTTPSClientSession&); - - Context::Ptr _pContext; - Session::Ptr _pSession; -}; - - -} } // namespace Poco::Net - - -#endif // Net_HTTPSClientSession_INCLUDED diff --git a/contrib/libpoco/NetSSL_OpenSSL/include/Poco/Net/HTTPSSessionInstantiator.h b/contrib/libpoco/NetSSL_OpenSSL/include/Poco/Net/HTTPSSessionInstantiator.h deleted file mode 100644 index 1454f3ab8ea..00000000000 --- a/contrib/libpoco/NetSSL_OpenSSL/include/Poco/Net/HTTPSSessionInstantiator.h +++ /dev/null @@ -1,67 +0,0 @@ -// -// HTTPSSessionInstantiator.h -// -// $Id: //poco/1.4/NetSSL_OpenSSL/include/Poco/Net/HTTPSSessionInstantiator.h#2 $ -// -// Library: NetSSL_OpenSSL -// Package: HTTPSClient -// Module: HTTPSSessionInstantiator -// -// Definition of the HTTPSSessionInstantiator class. -// -// Copyright (c) 2006-2009, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Net_HTTPSSessionInstantiator_INCLUDED -#define Net_HTTPSSessionInstantiator_INCLUDED - - -#include "Poco/Net/NetSSL.h" -#include "Poco/Net/Context.h" -#include "Poco/Net/Utility.h" -#include "Poco/Net/HTTPSessionInstantiator.h" -#include "Poco/URI.h" - - -namespace Poco { -namespace Net { - - -class NetSSL_API HTTPSSessionInstantiator: public HTTPSessionInstantiator - /// The HTTPSessionInstantiator for HTTPSClientSession. -{ -public: - HTTPSSessionInstantiator(); - /// Creates the HTTPSSessionInstantiator. - - HTTPSSessionInstantiator(Context::Ptr pContext); - /// Creates the HTTPSSessionInstantiator using the given SSL context. - - ~HTTPSSessionInstantiator(); - /// Destroys the HTTPSSessionInstantiator. - - HTTPClientSession* createClientSession(const Poco::URI& uri); - /// Creates a HTTPSClientSession for the given URI. - - static void registerInstantiator(); - /// Registers the instantiator with the global HTTPSessionFactory. - - static void registerInstantiator(Context::Ptr pContext); - /// Registers the instantiator with the global HTTPSessionFactory using the given SSL context. - - static void unregisterInstantiator(); - /// Unregisters the factory with the global HTTPSessionFactory. - -private: - Context::Ptr _pContext; -}; - - -} } // namespace Poco::Net - - -#endif // Net_HTTPSSessionInstantiator_INCLUDED diff --git a/contrib/libpoco/NetSSL_OpenSSL/include/Poco/Net/HTTPSStreamFactory.h b/contrib/libpoco/NetSSL_OpenSSL/include/Poco/Net/HTTPSStreamFactory.h deleted file mode 100644 index e179a7ce8e3..00000000000 --- a/contrib/libpoco/NetSSL_OpenSSL/include/Poco/Net/HTTPSStreamFactory.h +++ /dev/null @@ -1,85 +0,0 @@ -// -// HTTPSStreamFactory.h -// -// $Id: //poco/1.4/NetSSL_OpenSSL/include/Poco/Net/HTTPSStreamFactory.h#1 $ -// -// Library: NetSSL_OpenSSL -// Package: HTTPSClient -// Module: HTTPSStreamFactory -// -// Definition of the HTTPSStreamFactory class. -// -// Copyright (c) 2006-2009, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef NetSSL_HTTPSStreamFactory_INCLUDED -#define NetSSL_HTTPSStreamFactory_INCLUDED - - -#include "Poco/Net/NetSSL.h" -#include "Poco/Net/HTTPSession.h" -#include "Poco/URIStreamFactory.h" - - -namespace Poco { -namespace Net { - - -class NetSSL_API HTTPSStreamFactory: public Poco::URIStreamFactory - /// An implementation of the URIStreamFactory interface - /// that handles secure Hyper-Text Transfer Protocol (https) URIs. -{ -public: - HTTPSStreamFactory(); - /// Creates the HTTPSStreamFactory. - - HTTPSStreamFactory(const std::string& proxyHost, Poco::UInt16 proxyPort = HTTPSession::HTTP_PORT); - /// Creates the HTTPSStreamFactory. - /// - /// HTTPS connections will use the given proxy. - - HTTPSStreamFactory(const std::string& proxyHost, Poco::UInt16 proxyPort, const std::string& proxyUsername, const std::string& proxyPassword); - /// Creates the HTTPSStreamFactory. - /// - /// HTTPS connections will use the given proxy and - /// will be authorized against the proxy using Basic authentication - /// with the given proxyUsername and proxyPassword. - - ~HTTPSStreamFactory(); - /// Destroys the HTTPSStreamFactory. - - std::istream* open(const Poco::URI& uri); - /// Creates and opens a HTTPS stream for the given URI. - /// The URI must be a https://... URI. - /// - /// Throws a NetException if anything goes wrong. - - static void registerFactory(); - /// Registers the HTTPSStreamFactory with the - /// default URIStreamOpener instance. - - static void unregisterFactory(); - /// Unregisters the HTTPSStreamFactory with the - /// default URIStreamOpener instance. - -private: - enum - { - MAX_REDIRECTS = 10 - }; - - std::string _proxyHost; - Poco::UInt16 _proxyPort; - std::string _proxyUsername; - std::string _proxyPassword; -}; - - -} } // namespace Poco::Net - - -#endif // Net_HTTPSStreamFactory_INCLUDED diff --git a/contrib/libpoco/NetSSL_OpenSSL/include/Poco/Net/InvalidCertificateHandler.h b/contrib/libpoco/NetSSL_OpenSSL/include/Poco/Net/InvalidCertificateHandler.h deleted file mode 100644 index 8fbb33e6c7b..00000000000 --- a/contrib/libpoco/NetSSL_OpenSSL/include/Poco/Net/InvalidCertificateHandler.h +++ /dev/null @@ -1,82 +0,0 @@ -// -// InvalidCertificateHandler.h -// -// $Id: //poco/1.4/NetSSL_OpenSSL/include/Poco/Net/InvalidCertificateHandler.h#1 $ -// -// Library: NetSSL_OpenSSL -// Package: SSLCore -// Module: InvalidCertificateHandler -// -// Definition of the InvalidCertificateHandler class. -// -// Copyright (c) 2006-2009, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef NetSSL_InvalidCertificateHandler_INCLUDED -#define NetSSL_InvalidCertificateHandler_INCLUDED - - -#include "Poco/Net/NetSSL.h" -#include "Poco/Net/VerificationErrorArgs.h" - - -namespace Poco { -namespace Net { - - -class NetSSL_API InvalidCertificateHandler - /// A InvalidCertificateHandler is invoked whenever an error occurs verifying the certificate. It allows the user - /// to inspect and accept/reject the certificate. - /// One can install one's own InvalidCertificateHandler by implementing this interface. Note that - /// in the implementation file of the subclass the following code must be present (assuming you use the namespace My_API - /// and the name of your handler class is MyGuiHandler): - /// - /// #include "Poco/Net/CertificateHandlerFactory.h" - /// ... - /// POCO_REGISTER_CHFACTORY(My_API, MyGuiHandler) - /// - /// One can either set the handler directly in the startup code of the main method of ones application by calling - /// - /// SSLManager::instance().initialize(mypassphraseHandler, myguiHandler, mySSLContext) - /// - /// or in case one uses Poco::Util::Application one can rely on an XML configuration and put the following entry - /// under the path openSSL.invalidCertificateHandler: - /// - /// - /// MyGuiHandler - /// - /// [...] // Put optional config params for the handler here - /// - /// - /// - /// Note that the name of the InvalidCertificateHandler must be same as the one provided to the POCO_REGISTER_CHFACTORY macro. -{ -public: - InvalidCertificateHandler(bool handleErrorsOnServerSide); - /// Creates the InvalidCertificateHandler. - /// - /// Set handleErrorsOnServerSide to true if the certificate handler is used on the server side. - /// Automatically registers at one of the SSLManager::VerificationError events. - - virtual ~InvalidCertificateHandler(); - /// Destroys the InvalidCertificateHandler. - - virtual void onInvalidCertificate(const void* pSender, VerificationErrorArgs& errorCert) = 0; - /// Receives the questionable certificate in parameter errorCert. If one wants to accept the - /// certificate, call errorCert.setIgnoreError(true). - -protected: - bool _handleErrorsOnServerSide; - /// Stores if the certificate handler gets invoked by the server (i.e. a client certificate is wrong) - /// or the client (a server certificate is wrong) -}; - - -} } // namespace Poco::Net - - -#endif // NetSSL_InvalidCertificateHandler_INCLUDED diff --git a/contrib/libpoco/NetSSL_OpenSSL/include/Poco/Net/KeyConsoleHandler.h b/contrib/libpoco/NetSSL_OpenSSL/include/Poco/Net/KeyConsoleHandler.h deleted file mode 100644 index 5b2c62d6735..00000000000 --- a/contrib/libpoco/NetSSL_OpenSSL/include/Poco/Net/KeyConsoleHandler.h +++ /dev/null @@ -1,49 +0,0 @@ -// -// KeyConsoleHandler.h -// -// $Id: //poco/1.4/NetSSL_OpenSSL/include/Poco/Net/KeyConsoleHandler.h#1 $ -// -// Library: NetSSL_OpenSSL -// Package: SSLCore -// Module: KeyConsoleHandler -// -// Definition of the KeyConsoleHandler class. -// -// Copyright (c) 2006-2009, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef NetSSL_KeyConsoleHandler_INCLUDED -#define NetSSL_KeyConsoleHandler_INCLUDED - - -#include "Poco/Net/NetSSL.h" -#include "Poco/Net/PrivateKeyPassphraseHandler.h" - - -namespace Poco { -namespace Net { - - -class NetSSL_API KeyConsoleHandler: public PrivateKeyPassphraseHandler - /// An implementation of PrivateKeyPassphraseHandler that - /// reads the key for a certificate from the console. -{ -public: - KeyConsoleHandler(bool server); - /// Creates the KeyConsoleHandler. - - ~KeyConsoleHandler(); - /// Destroys the KeyConsoleHandler. - - void onPrivateKeyRequested(const void* pSender, std::string& privateKey); -}; - - -} } // namespace Poco::Net - - -#endif // NetSSL_KeyConsoleHandler_INCLUDED diff --git a/contrib/libpoco/NetSSL_OpenSSL/include/Poco/Net/KeyFileHandler.h b/contrib/libpoco/NetSSL_OpenSSL/include/Poco/Net/KeyFileHandler.h deleted file mode 100644 index 9f437e9bb4a..00000000000 --- a/contrib/libpoco/NetSSL_OpenSSL/include/Poco/Net/KeyFileHandler.h +++ /dev/null @@ -1,53 +0,0 @@ -// -// KeyFileHandler.h -// -// $Id: //poco/1.4/NetSSL_OpenSSL/include/Poco/Net/KeyFileHandler.h#1 $ -// -// Library: NetSSL_OpenSSL -// Package: SSLCore -// Module: KeyFileHandler -// -// Definition of the KeyFileHandler class. -// -// Copyright (c) 2006-2009, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef NetSSL_KeyFileHandler_INCLUDED -#define NetSSL_KeyFileHandler_INCLUDED - - -#include "Poco/Net/NetSSL.h" -#include "Poco/Net/PrivateKeyPassphraseHandler.h" - - -namespace Poco { -namespace Net { - - -class NetSSL_API KeyFileHandler: public PrivateKeyPassphraseHandler - /// An implementation of PrivateKeyPassphraseHandler that - /// reads the key for a certificate from a configuration file - /// under the path "openSSL.privateKeyPassphraseHandler.options.password". -{ -public: - KeyFileHandler(bool server); - /// Creates the KeyFileHandler. - - virtual ~KeyFileHandler(); - /// Destroys the KeyFileHandler. - - void onPrivateKeyRequested(const void* pSender, std::string& privateKey); - -private: - static const std::string CFG_PRIV_KEY_FILE; -}; - - -} } // namespace Poco::Net - - -#endif // NetSSL_KeyFileHandler_INCLUDED diff --git a/contrib/libpoco/NetSSL_OpenSSL/include/Poco/Net/NetSSL.h b/contrib/libpoco/NetSSL_OpenSSL/include/Poco/Net/NetSSL.h deleted file mode 100644 index f4ca2b5789a..00000000000 --- a/contrib/libpoco/NetSSL_OpenSSL/include/Poco/Net/NetSSL.h +++ /dev/null @@ -1,93 +0,0 @@ -// -// NetSSL.h -// -// $Id: //poco/1.4/NetSSL_OpenSSL/include/Poco/Net/NetSSL.h#2 $ -// -// Library: NetSSL_OpenSSL -// Package: SSLCore -// Module: OpenSSL -// -// Basic definitions for the Poco OpenSSL library. -// This file must be the first file included by every other OpenSSL -// header file. -// -// Copyright (c) 2006-2009, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef NetSSL_NetSSL_INCLUDED -#define NetSSL_NetSSL_INCLUDED - - -#include "Poco/Net/Net.h" - - -// -// The following block is the standard way of creating macros which make exporting -// from a DLL simpler. All files within this DLL are compiled with the NetSSL_EXPORTS -// symbol defined on the command line. this symbol should not be defined on any project -// that uses this DLL. This way any other project whose source files include this file see -// NetSSL_API functions as being imported from a DLL, wheras this DLL sees symbols -// defined with this macro as being exported. -// -#if (defined(_WIN32) || defined(__CYGWIN__)) && defined(POCO_DLL) - #if defined(NetSSL_EXPORTS) - #define NetSSL_API __declspec(dllexport) - #else - #define NetSSL_API __declspec(dllimport) - #endif -#endif - - -#if !defined(NetSSL_API) - #if !defined(POCO_NO_GCC_API_ATTRIBUTE) && defined (__GNUC__) && (__GNUC__ >= 4) - #define NetSSL_API __attribute__ ((visibility ("default"))) - #else - #define NetSSL_API - #endif -#endif - - -// -// Automatically link NetSSL library. -// -#if defined(_MSC_VER) - #if !defined(POCO_NO_AUTOMATIC_LIBS) && !defined(NetSSL_EXPORTS) - #pragma comment(lib, "PocoNetSSL" POCO_LIB_SUFFIX) - #endif -#endif - - -namespace Poco { -namespace Net { - - -void NetSSL_API initializeSSL(); - /// Initialize the NetSSL library, as well as the underlying OpenSSL - /// libraries, by calling Poco::Crypto::OpenSSLInitializer::initialize(). - /// - /// Should be called before using any class from the NetSSL library. - /// The NetSSL will be initialized automatically, through - /// Poco::Crypto::OpenSSLInitializer instances or similar mechanisms - /// when creating Context or SSLManager instances. - /// However, it is recommended to call initializeSSL() - /// in any case at application startup. - /// - /// Can be called multiple times; however, for every call to - /// initializeSSL(), a matching call to uninitializeSSL() - /// must be performed. - - -void NetSSL_API uninitializeSSL(); - /// Uninitializes the NetSSL library by calling - /// Poco::Crypto::OpenSSLInitializer::uninitialize() and - /// shutting down the SSLManager. - - -} } // namespace Poco::Net - - -#endif // NetSSL_NetSSL_INCLUDED diff --git a/contrib/libpoco/NetSSL_OpenSSL/include/Poco/Net/PrivateKeyFactory.h b/contrib/libpoco/NetSSL_OpenSSL/include/Poco/Net/PrivateKeyFactory.h deleted file mode 100644 index 9fb592243a4..00000000000 --- a/contrib/libpoco/NetSSL_OpenSSL/include/Poco/Net/PrivateKeyFactory.h +++ /dev/null @@ -1,97 +0,0 @@ -// -// PrivateKeyFactory.h -// -// $Id: //poco/1.4/NetSSL_OpenSSL/include/Poco/Net/PrivateKeyFactory.h#1 $ -// -// Library: NetSSL_OpenSSL -// Package: SSLCore -// Module: PrivateKeyFactory -// -// Definition of the PrivateKeyFactory class. -// -// Copyright (c) 2006-2009, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef NetSSL_PrivateKeyFactory_INCLUDED -#define NetSSL_PrivateKeyFactory_INCLUDED - - -#include "Poco/Net/NetSSL.h" - - -namespace Poco { -namespace Net { - - -class PrivateKeyPassphraseHandler; - - -class NetSSL_API PrivateKeyFactory - /// A PrivateKeyFactory is responsible for creating PrivateKeyPassphraseHandlers. - /// - /// You don't need to access this class directly. Use the macro - /// POCO_REGISTER_KEYFACTORY(namespace, PrivateKeyPassphraseHandlerName) - /// instead (see the documentation of PrivateKeyPassphraseHandler for an example). -{ -public: - PrivateKeyFactory(); - /// Creates the PrivateKeyFactory. - - virtual ~PrivateKeyFactory(); - /// Destroys the PrivateKeyFactory. - - virtual PrivateKeyPassphraseHandler* create(bool onServer) const = 0; - /// Creates a new PrivateKeyPassphraseHandler -}; - - -class NetSSL_API PrivateKeyFactoryRegistrar - /// Registrar class which automatically registers PrivateKeyFactories at the PrivateKeyFactoryMgr. - /// - /// You don't need to access this class directly. Use the macro - /// POCO_REGISTER_KEYFACTORY(namespace, PrivateKeyPassphraseHandlerName) - /// instead (see the documentation of PrivateKeyPassphraseHandler for an example). - -{ -public: - PrivateKeyFactoryRegistrar(const std::string& name, PrivateKeyFactory* pFactory); - /// Registers the PrivateKeyFactory with the given name at the factory manager. - - virtual ~PrivateKeyFactoryRegistrar(); - /// Destroys the PrivateKeyFactoryRegistrar. -}; - - -template -class PrivateKeyFactoryImpl: public Poco::Net::PrivateKeyFactory -{ -public: - PrivateKeyFactoryImpl() - { - } - - ~PrivateKeyFactoryImpl() - { - } - - PrivateKeyPassphraseHandler* create(bool server) const - { - return new T(server); - } -}; - - -} } // namespace Poco::Net - - -// DEPRECATED: register the factory directly at the FactoryMgr: -// Poco::Net::SSLManager::instance().privateKeyFactoryMgr().setFactory(name, new Poco::Net::PrivateKeyFactoryImpl()); -#define POCO_REGISTER_KEYFACTORY(API, PKCLS) \ - static Poco::Net::PrivateKeyFactoryRegistrar aRegistrar(std::string(#PKCLS), new Poco::Net::PrivateKeyFactoryImpl()); - - -#endif // NetSSL_PrivateKeyFactory_INCLUDED diff --git a/contrib/libpoco/NetSSL_OpenSSL/include/Poco/Net/PrivateKeyFactoryMgr.h b/contrib/libpoco/NetSSL_OpenSSL/include/Poco/Net/PrivateKeyFactoryMgr.h deleted file mode 100644 index b7609f435b9..00000000000 --- a/contrib/libpoco/NetSSL_OpenSSL/include/Poco/Net/PrivateKeyFactoryMgr.h +++ /dev/null @@ -1,66 +0,0 @@ -// -// PrivateKeyFactoryMgr.h -// -// $Id: //poco/1.4/NetSSL_OpenSSL/include/Poco/Net/PrivateKeyFactoryMgr.h#1 $ -// -// Library: NetSSL_OpenSSL -// Package: SSLCore -// Module: PrivateKeyFactoryMgr -// -// Definition of the PrivateKeyFactoryMgr class. -// -// Copyright (c) 2006-2009, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef NetSSL_PrivateKeyFactoryMgr_INCLUDED -#define NetSSL_PrivateKeyFactoryMgr_INCLUDED - - -#include "Poco/Net/NetSSL.h" -#include "Poco/Net/PrivateKeyFactory.h" -#include "Poco/SharedPtr.h" -#include - - -namespace Poco { -namespace Net { - - -class NetSSL_API PrivateKeyFactoryMgr - /// A PrivateKeyFactoryMgr manages all existing PrivateKeyFactories. -{ -public: - typedef std::map > FactoriesMap; - - PrivateKeyFactoryMgr(); - /// Creates the PrivateKeyFactoryMgr. - - ~PrivateKeyFactoryMgr(); - /// Destroys the PrivateKeyFactoryMgr. - - void setFactory(const std::string& name, PrivateKeyFactory* pFactory); - /// Registers the factory. Class takes ownership of the pointer. - /// If a factory with the same name already exists, an exception is thrown. - - bool hasFactory(const std::string& name) const; - /// Returns true if for the given name a factory is already registered - - const PrivateKeyFactory* getFactory(const std::string& name) const; - /// Returns NULL if for the given name a factory does not exist, otherwise the factory is returned - - void removeFactory(const std::string& name); - /// Removes the factory from the manager. - -private: - FactoriesMap _factories; -}; - - -} } // namespace Poco::Net - - -#endif // NetSSL_PrivateKeyFactoryMgr_INCLUDED diff --git a/contrib/libpoco/NetSSL_OpenSSL/include/Poco/Net/PrivateKeyPassphraseHandler.h b/contrib/libpoco/NetSSL_OpenSSL/include/Poco/Net/PrivateKeyPassphraseHandler.h deleted file mode 100644 index 0ab61b512ca..00000000000 --- a/contrib/libpoco/NetSSL_OpenSSL/include/Poco/Net/PrivateKeyPassphraseHandler.h +++ /dev/null @@ -1,86 +0,0 @@ -// -// PrivateKeyPassphraseHandler.h -// -// $Id: //poco/1.4/NetSSL_OpenSSL/include/Poco/Net/PrivateKeyPassphraseHandler.h#1 $ -// -// Library: NetSSL_OpenSSL -// Package: SSLCore -// Module: PrivateKeyPassphraseHandler -// -// Definition of the PrivateKeyPassphraseHandler class. -// -// Copyright (c) 2006-2009, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef NetSSL_PrivateKeyPassphraseHandler_INCLUDED -#define NetSSL_PrivateKeyPassphraseHandler_INCLUDED - - -#include "Poco/Net/NetSSL.h" - - -namespace Poco { -namespace Net { - - -class NetSSL_API PrivateKeyPassphraseHandler - /// A passphrase handler is needed whenever the private key of a certificate is loaded and the certificate is protected - /// by a passphrase. The PrivateKeyPassphraseHandler's task is to provide that passphrase. - /// One can install one's own PrivateKeyPassphraseHandler by implementing this interface. Note that - /// in the implementation file of the subclass the following code must be present (assuming you use the namespace My_API - /// and the name of your handler class is MyGuiHandler): - /// - /// #include "Poco/Net/PrivateKeyFactory.h" - /// ... - /// POCO_REGISTER_KEYFACTORY(My_API, MyGuiHandler) - /// - /// One can either set the handler directly in the startup code of the main method of ones application by calling - /// - /// SSLManager::instance().initialize(myguiHandler, myInvalidCertificateHandler, mySSLContext) - /// - /// or in case one's application extends Poco::Util::Application one can use an XML configuration and put the following entry - /// under the path openSSL.privateKeyPassphraseHandler: - /// - /// - /// MyGuiHandler - /// - /// [...] // Put optional config params for the handler here - /// - /// - /// - /// Note that the name of the passphrase handler must be same as the one provided to the POCO_REGISTER_KEYFACTORY macro. -{ -public: - PrivateKeyPassphraseHandler(bool onServerSide); - /// Creates the PrivateKeyPassphraseHandler. Automatically registers at the SSLManager::PrivateKeyPassword event. - - virtual ~PrivateKeyPassphraseHandler(); - /// Destroys the PrivateKeyPassphraseHandler. - - virtual void onPrivateKeyRequested(const void* pSender, std::string& privateKey) = 0; - /// Returns the requested private key in the parameter privateKey. - - bool serverSide() const; - -private: - bool _serverSide; -}; - - -// -// inlines -// -inline bool PrivateKeyPassphraseHandler::serverSide() const -{ - return _serverSide; -} - - -} } // namespace Poco::Net - - -#endif // NetSSL_PrivateKeyPassphraseHandler_INCLUDED diff --git a/contrib/libpoco/NetSSL_OpenSSL/include/Poco/Net/RejectCertificateHandler.h b/contrib/libpoco/NetSSL_OpenSSL/include/Poco/Net/RejectCertificateHandler.h deleted file mode 100644 index 6d3265e366e..00000000000 --- a/contrib/libpoco/NetSSL_OpenSSL/include/Poco/Net/RejectCertificateHandler.h +++ /dev/null @@ -1,50 +0,0 @@ -// -// RejectCertificateHandler.h -// -// $Id: //poco/1.4/NetSSL_OpenSSL/include/Poco/Net/RejectCertificateHandler.h#1 $ -// -// Library: NetSSL_OpenSSL -// Package: SSLCore -// Module: RejectCertificateHandler -// -// Definition of the RejectCertificateHandler class. -// -// Copyright (c) 2006-2010, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef NetSSL_RejectCertificateHandler_INCLUDED -#define NetSSL_RejectCertificateHandler_INCLUDED - - -#include "Poco/Net/NetSSL.h" -#include "Poco/Net/InvalidCertificateHandler.h" - - -namespace Poco { -namespace Net { - - -class NetSSL_API RejectCertificateHandler: public InvalidCertificateHandler - /// A RejectCertificateHandler is invoked whenever an error - /// occurs verifying the certificate. It always rejects - /// the certificate. -{ -public: - RejectCertificateHandler(bool handleErrorsOnServerSide); - /// Creates the RejectCertificateHandler - - virtual ~RejectCertificateHandler(); - /// Destroys the RejectCertificateHandler. - - void onInvalidCertificate(const void* pSender, VerificationErrorArgs& errorCert); -}; - - -} } // namespace Poco::Net - - -#endif // NetSSL_RejectCertificateHandler_INCLUDED diff --git a/contrib/libpoco/NetSSL_OpenSSL/include/Poco/Net/SSLException.h b/contrib/libpoco/NetSSL_OpenSSL/include/Poco/Net/SSLException.h deleted file mode 100644 index 59b41f83d8f..00000000000 --- a/contrib/libpoco/NetSSL_OpenSSL/include/Poco/Net/SSLException.h +++ /dev/null @@ -1,41 +0,0 @@ -// -// SSLException.h -// -// $Id: //poco/1.4/NetSSL_OpenSSL/include/Poco/Net/SSLException.h#1 $ -// -// Library: NetSSL_OpenSSL -// Package: SSLCore -// Module: SSLException -// -// Definition of the SSLException class. -// -// Copyright (c) 2006-2009, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef NetSSL_SSLException_INCLUDED -#define NetSSL_SSLException_INCLUDED - - -#include "Poco/Net/NetSSL.h" -#include "Poco/Net/NetException.h" - - -namespace Poco { -namespace Net { - - -POCO_DECLARE_EXCEPTION(NetSSL_API, SSLException, NetException) -POCO_DECLARE_EXCEPTION(NetSSL_API, SSLContextException, SSLException) -POCO_DECLARE_EXCEPTION(NetSSL_API, InvalidCertificateException, SSLException) -POCO_DECLARE_EXCEPTION(NetSSL_API, CertificateValidationException, SSLException) -POCO_DECLARE_EXCEPTION(NetSSL_API, SSLConnectionUnexpectedlyClosedException, SSLException) - - -} } // namespace Poco::Net - - -#endif // NetSSL_SSLException_INCLUDED diff --git a/contrib/libpoco/NetSSL_OpenSSL/include/Poco/Net/SSLManager.h b/contrib/libpoco/NetSSL_OpenSSL/include/Poco/Net/SSLManager.h deleted file mode 100644 index 070aecebc16..00000000000 --- a/contrib/libpoco/NetSSL_OpenSSL/include/Poco/Net/SSLManager.h +++ /dev/null @@ -1,374 +0,0 @@ -// -// SSLManager.h -// -// $Id: //poco/1.4/NetSSL_OpenSSL/include/Poco/Net/SSLManager.h#4 $ -// -// Library: NetSSL_OpenSSL -// Package: SSLCore -// Module: SSLManager -// -// Definition of the SSLManager class. -// -// Copyright (c) 2006-2010, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef NetSSL_SSLManager_INCLUDED -#define NetSSL_SSLManager_INCLUDED - - -#include "Poco/Net/NetSSL.h" -#include "Poco/Net/VerificationErrorArgs.h" -#include "Poco/Net/Context.h" -#include "Poco/Net/PrivateKeyFactoryMgr.h" -#include "Poco/Net/CertificateHandlerFactoryMgr.h" -#include "Poco/Net/InvalidCertificateHandler.h" -#include "Poco/Util/AbstractConfiguration.h" -#include "Poco/BasicEvent.h" -#include "Poco/SharedPtr.h" -#include "Poco/Mutex.h" -#include -#ifdef OPENSSL_FIPS -#include -#endif - - -namespace Poco { -namespace Net { - - -class Context; - - -class NetSSL_API SSLManager - /// SSLManager is a singleton for holding the default server/client - /// Context and handling callbacks for certificate verification errors - /// and private key passphrases. - /// - /// Proper initialization of SSLManager is critical. - /// - /// SSLManager can be initialized manually, by calling initializeServer() - /// and/or initializeClient(), or intialization can be automatic. In the latter - /// case, a Poco::Util::Application instance must be available and the required - /// configuration properties must be set (see below). - /// - /// Note that manual intialization must happen very early in the application, - /// before defaultClientContext() or defaultServerContext() are called. - /// - /// If defaultClientContext() and defaultServerContext() are never called - /// in an application, initialization of SSLManager can be omitted. - /// However, in this case, delegates for the ServerVerificationError, - /// ClientVerificationError and PrivateKeyPassphraseRequired events - /// must be registered. - /// - /// An exemplary documentation which sets either the server or client default context and creates - /// a PrivateKeyPassphraseHandler that reads the password from the XML file looks like this: - /// - /// - /// - /// - /// mycert.key - /// mycert.crt - /// rootcert.pem - /// none|relaxed|strict|once - /// 1..9 - /// true|false - /// ALL:!ADH:!LOW:!EXP:!MD5:@STRENGTH - /// - /// KeyFileHandler - /// - /// test - /// - /// - /// - /// ConsoleCertificateHandler - /// - /// true|false - /// someString - /// 0..n - /// 0..n - /// true|false - /// true|false - /// true|false - /// true|false - /// - /// false - /// - /// - /// - /// Following is a list of supported configuration properties. Property names must always - /// be prefixed with openSSL.server or openSSL.client. Some properties are only supported - /// for servers. - /// - /// - privateKeyFile (string): The path to the file containing the private key for the certificate - /// in PEM format (or containing both the private key and the certificate). - /// - certificateFile (string): The Path to the file containing the server's or client's certificate - /// in PEM format. Can be omitted if the the file given in privateKeyFile contains the certificate as well. - /// - caConfig (string): The path to the file or directory containing the trusted root certificates. - /// - verificationMode (string): Specifies whether and how peer certificates are validated (see - /// the Context class for details). Valid values are none, relaxed, strict, once. - /// - verificationDepth (integer, 1-9): Sets the upper limit for verification chain sizes. Verification - /// will fail if a certificate chain larger than this is encountered. - /// - loadDefaultCAFile (boolean): Specifies wheter the builtin CA certificates from OpenSSL are used. - /// - cipherList (string): Specifies the supported ciphers in OpenSSL notation - /// (e.g. "ALL:!ADH:!LOW:!EXP:!MD5:@STRENGTH"). - /// - privateKeyPassphraseHandler.name (string): The name of the class (subclass of PrivateKeyPassphraseHandler) - /// used for obtaining the passphrase for accessing the private key. - /// - privateKeyPassphraseHandler.options.password (string): The password to be used by KeyFileHandler. - /// - invalidCertificateHandler.name: The name of the class (subclass of CertificateHandler) - /// used for confirming invalid certificates. - /// - cacheSessions (boolean): Enables or disables session caching. - /// - sessionIdContext (string): contains the application's unique session ID context, which becomes - /// part of each session identifier generated by the server. Can be an arbitrary sequence - /// of bytes with a maximum length of SSL_MAX_SSL_SESSION_ID_LENGTH. Should be specified - /// for a server to enable session caching. Should be specified even if session caching - /// is disabled to avoid problems with clients that request session caching (e.g. Firefox 3.6). - /// If not specified, defaults to ${application.name}. - /// - sessionCacheSize (integer): Sets the maximum size of the server session cache, in number of - /// sessions. The default size (according to OpenSSL documentation) is 1024*20, which may be too - /// large for many applications, especially on embedded platforms with limited memory. - /// Specifying a size of 0 will set an unlimited cache size. - /// - sessionTimeout (integer): Sets the timeout (in seconds) of cached sessions on the server. - /// - extendedVerification (boolean): Enable or disable the automatic post-connection - /// extended certificate verification. - /// - requireTLSv1 (boolean): Require a TLSv1 connection. - /// - requireTLSv1_1 (boolean): Require a TLSv1.1 connection. - /// - requireTLSv1_2 (boolean): Require a TLSv1.2 connection. - /// - fips: Enable or disable OpenSSL FIPS mode. Only supported if the OpenSSL version - /// that this library is built against supports FIPS mode. -{ -public: - typedef Poco::SharedPtr PrivateKeyPassphraseHandlerPtr; - typedef Poco::SharedPtr InvalidCertificateHandlerPtr; - - Poco::BasicEvent ServerVerificationError; - /// Fired whenever a certificate verification error is detected by the server during a handshake. - - Poco::BasicEvent ClientVerificationError; - /// Fired whenever a certificate verification error is detected by the client during a handshake. - - Poco::BasicEvent PrivateKeyPassphraseRequired; - /// Fired when a encrypted certificate is loaded. Not setting the password - /// in the event parameter will result in a failure to load the certificate. - - static SSLManager& instance(); - /// Returns the instance of the SSLManager singleton. - - void initializeServer(PrivateKeyPassphraseHandlerPtr ptrPassphraseHandler, InvalidCertificateHandlerPtr ptrCertificateHandler, Context::Ptr ptrContext); - /// Initializes the server side of the SSLManager with a default passphrase handler, a default invalid certificate handler and a default context. If this method - /// is never called the SSLmanager will try to initialize its members from an application configuration. - /// - /// PtrPassphraseHandler and ptrCertificateHandler can be 0. However, in this case, event delegates - /// must be registered with the ServerVerificationError and PrivateKeyPassphraseRequired events. - /// - /// Note: Always create the handlers (or register the corresponding event delegates) before creating - /// the Context, as during creation of the Context the passphrase for the private key might be needed. - /// - /// Valid initialization code would be: - /// SharedPtr pConsoleHandler = new KeyConsoleHandler; - /// SharedPtr pInvalidCertHandler = new ConsoleCertificateHandler; - /// Context::Ptr pContext = new Context(Context::SERVER_USE, "any.pem", "any.pem", "rootcert.pem", Context::VERIFY_RELAXED, 9, false, "ALL:!ADH:!LOW:!EXP:!MD5:@STRENGTH"); - /// SSLManager::instance().initializeServer(pConsoleHandler, pInvalidCertHandler, pContext); - - void initializeClient(PrivateKeyPassphraseHandlerPtr ptrPassphraseHandler, InvalidCertificateHandlerPtr ptrHandler, Context::Ptr ptrContext); - /// Initializes the client side of the SSLManager with a default passphrase handler, a default invalid certificate handler and a default context. If this method - /// is never called the SSLmanager will try to initialize its members from an application configuration. - /// - /// PtrPassphraseHandler and ptrCertificateHandler can be 0. However, in this case, event delegates - /// must be registered with the ClientVerificationError and PrivateKeyPassphraseRequired events. - /// - /// Note: Always create the handlers (or register the corresponding event delegates) before creating - /// the Context, as during creation of the Context the passphrase for the private key might be needed. - /// - /// Valid initialization code would be: - /// SharedPtr pConsoleHandler = new KeyConsoleHandler; - /// SharedPtr pInvalidCertHandler = new ConsoleCertificateHandler; - /// Context::Ptr pContext = new Context(Context::CLIENT_USE, "", "", "rootcert.pem", Context::VERIFY_RELAXED, 9, false, "ALL:!ADH:!LOW:!EXP:!MD5:@STRENGTH"); - /// SSLManager::instance().initializeClient(pConsoleHandler, pInvalidCertHandler, pContext); - - Context::Ptr defaultServerContext(); - /// Returns the default Context used by the server. - /// - /// Unless initializeServer() has been called, the first call to this method initializes the default Context - /// from the application configuration. - - Context::Ptr defaultClientContext(); - /// Returns the default Context used by the client. - /// - /// Unless initializeClient() has been called, the first call to this method initializes the default Context - /// from the application configuration. - - PrivateKeyPassphraseHandlerPtr serverPassphraseHandler(); - /// Returns the configured passphrase handler of the server. If none is set, the method will create a default one - /// from an application configuration. - - InvalidCertificateHandlerPtr serverCertificateHandler(); - /// Returns an initialized certificate handler (used by the server to verify client cert) which determines how invalid certificates are treated. - /// If none is set, it will try to auto-initialize one from an application configuration. - - PrivateKeyPassphraseHandlerPtr clientPassphraseHandler(); - /// Returns the configured passphrase handler of the client. If none is set, the method will create a default one - /// from an application configuration. - - InvalidCertificateHandlerPtr clientCertificateHandler(); - /// Returns an initialized certificate handler (used by the client to verify server cert) which determines how invalid certificates are treated. - /// If none is set, it will try to auto-initialize one from an application configuration. - - PrivateKeyFactoryMgr& privateKeyFactoryMgr(); - /// Returns the private key factory manager which stores the - /// factories for the different registered passphrase handlers for private keys. - - CertificateHandlerFactoryMgr& certificateHandlerFactoryMgr(); - /// Returns the CertificateHandlerFactoryMgr which stores the - /// factories for the different registered certificate handlers. - - static bool isFIPSEnabled(); - // Returns true if FIPS mode is enabled, false otherwise. - - void shutdown(); - /// Shuts down the SSLManager and releases the default Context - /// objects. After a call to shutdown(), the SSLManager can no - /// longer be used. - /// - /// Normally, it's not necessary to call this method directly, as this - /// will be called either by uninitializeSSL(), or when - /// the SSLManager instance is destroyed. - - static const std::string CFG_SERVER_PREFIX; - static const std::string CFG_CLIENT_PREFIX; - -protected: - static int verifyClientCallback(int ok, X509_STORE_CTX* pStore); - /// The return value of this method defines how errors in - /// verification are handled. Return 0 to terminate the handshake, - /// or 1 to continue despite the error. - - static int verifyServerCallback(int ok, X509_STORE_CTX* pStore); - /// The return value of this method defines how errors in - /// verification are handled. Return 0 to terminate the handshake, - /// or 1 to continue despite the error. - - static int privateKeyPassphraseCallback(char* pBuf, int size, int flag, void* userData); - /// Method is invoked by OpenSSL to retrieve a passwd for an encrypted certificate. - /// The request is delegated to the PrivatekeyPassword event. This method returns the - /// length of the password. - - static Poco::Util::AbstractConfiguration& appConfig(); - /// Returns the application configuration. - /// - /// Throws a InvalidStateException if not application instance - /// is available. - -private: - SSLManager(); - /// Creates the SSLManager. - - ~SSLManager(); - /// Destroys the SSLManager. - - void initDefaultContext(bool server); - /// Inits the default context, the first time it is accessed. - - void initEvents(bool server); - /// Registers delegates at the events according to the configuration. - - void initPassphraseHandler(bool server); - /// Inits the passphrase handler. - - void initCertificateHandler(bool server); - /// Inits the certificate handler. - - static int verifyCallback(bool server, int ok, X509_STORE_CTX* pStore); - /// The return value of this method defines how errors in - /// verification are handled. Return 0 to terminate the handshake, - /// or 1 to continue despite the error. - - PrivateKeyFactoryMgr _factoryMgr; - CertificateHandlerFactoryMgr _certHandlerFactoryMgr; - Context::Ptr _ptrDefaultServerContext; - PrivateKeyPassphraseHandlerPtr _ptrServerPassphraseHandler; - InvalidCertificateHandlerPtr _ptrServerCertificateHandler; - Context::Ptr _ptrDefaultClientContext; - PrivateKeyPassphraseHandlerPtr _ptrClientPassphraseHandler; - InvalidCertificateHandlerPtr _ptrClientCertificateHandler; - Poco::FastMutex _mutex; - - static const std::string CFG_PRIV_KEY_FILE; - static const std::string CFG_CERTIFICATE_FILE; - static const std::string CFG_CA_LOCATION; - static const std::string CFG_VER_MODE; - static const Context::VerificationMode VAL_VER_MODE; - static const std::string CFG_VER_DEPTH; - static const int VAL_VER_DEPTH; - static const std::string CFG_ENABLE_DEFAULT_CA; - static const bool VAL_ENABLE_DEFAULT_CA; - static const std::string CFG_CIPHER_LIST; - static const std::string CFG_CYPHER_LIST; // for backwards compatibility - static const std::string VAL_CIPHER_LIST; - static const std::string CFG_DELEGATE_HANDLER; - static const std::string VAL_DELEGATE_HANDLER; - static const std::string CFG_CERTIFICATE_HANDLER; - static const std::string VAL_CERTIFICATE_HANDLER; - static const std::string CFG_CACHE_SESSIONS; - static const std::string CFG_SESSION_ID_CONTEXT; - static const std::string CFG_SESSION_CACHE_SIZE; - static const std::string CFG_SESSION_TIMEOUT; - static const std::string CFG_EXTENDED_VERIFICATION; - static const std::string CFG_REQUIRE_TLSV1; - static const std::string CFG_REQUIRE_TLSV1_1; - static const std::string CFG_REQUIRE_TLSV1_2; - -#ifdef OPENSSL_FIPS - static const std::string CFG_FIPS_MODE; - static const bool VAL_FIPS_MODE; -#endif - - friend class Poco::SingletonHolder; - friend class Context; -}; - - -// -// inlines -// -inline PrivateKeyFactoryMgr& SSLManager::privateKeyFactoryMgr() -{ - return _factoryMgr; -} - - -inline CertificateHandlerFactoryMgr& SSLManager::certificateHandlerFactoryMgr() -{ - return _certHandlerFactoryMgr; -} - - -inline bool SSLManager::isFIPSEnabled() -{ -#ifdef OPENSSL_FIPS - return FIPS_mode() ? true : false; -#else - return false; -#endif -} - - -inline int SSLManager::verifyServerCallback(int ok, X509_STORE_CTX* pStore) -{ - return SSLManager::verifyCallback(true, ok, pStore); -} - - -inline int SSLManager::verifyClientCallback(int ok, X509_STORE_CTX* pStore) -{ - return SSLManager::verifyCallback(false, ok, pStore); -} - - -} } // namespace Poco::Net - - -#endif // NetSSL_SSLManager_INCLUDED diff --git a/contrib/libpoco/NetSSL_OpenSSL/include/Poco/Net/SecureSMTPClientSession.h b/contrib/libpoco/NetSSL_OpenSSL/include/Poco/Net/SecureSMTPClientSession.h deleted file mode 100644 index bca3b7b7c5b..00000000000 --- a/contrib/libpoco/NetSSL_OpenSSL/include/Poco/Net/SecureSMTPClientSession.h +++ /dev/null @@ -1,98 +0,0 @@ -// -// SecureSMTPClientSession.h -// -// $Id: //poco/1.4/NetSSL_OpenSSL/include/Poco/Net/SecureSMTPClientSession.h#1 $ -// -// Library: NetSSL_OpenSSL -// Package: Mail -// Module: SecureSMTPClientSession -// -// Definition of the SecureSMTPClientSession class. -// -// Copyright (c) 2010, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Net_SecureSMTPClientSession_INCLUDED -#define Net_SecureSMTPClientSession_INCLUDED - - -#include "Poco/Net/NetSSL.h" -#include "Poco/Net/SMTPClientSession.h" -#include "Poco/Net/Context.h" - - -namespace Poco { -namespace Net { - - -class NetSSL_API SecureSMTPClientSession: public SMTPClientSession - /// This class implements an Simple Mail - /// Transfer Procotol (SMTP, RFC 2821) - /// client for sending e-mail messages that - /// supports the STARTTLS command for secure - /// connections. - /// - /// Usage is as follows: - /// 1. Create a SecureSMTPClientSession object. - /// 2. Call login() or login(hostname). - /// 3. Call startTLS() to switch to a secure connection. - /// Check the return value to see if a secure connection - /// has actually been established (not all servers may - /// support STARTTLS). - /// 4. Call any of the login() methods to securely authenticate - /// with a username and password. - /// 5. Send the message(s). -{ -public: - explicit SecureSMTPClientSession(const StreamSocket& socket); - /// Creates the SecureSMTPClientSession using - /// the given socket, which must be connected - /// to a SMTP server. - - SecureSMTPClientSession(const std::string& host, Poco::UInt16 port = SMTP_PORT); - /// Creates the SecureSMTPClientSession using a socket connected - /// to the given host and port. - - virtual ~SecureSMTPClientSession(); - /// Destroys the SMTPClientSession. - - bool startTLS(); - /// Sends a STARTTLS command and, if successful, - /// creates a secure SSL/TLS connection over the - /// existing socket connection. - /// - /// Must be called after login() or login(hostname). - /// If successful, login() can be called again - /// to authenticate the user. - /// - /// Returns true if the STARTTLS command was successful, - /// false otherwise. - - bool startTLS(Context::Ptr pContext); - /// Sends a STARTTLS command and, if successful, - /// creates a secure SSL/TLS connection over the - /// existing socket connection. - /// - /// Uses the given Context object for creating - /// the SSL/TLS connection. - /// - /// Must be called after login() or login(hostname). - /// If successful, login() can be called again - /// to authenticate the user. - /// - /// Returns true if the STARTTLS command was successful, - /// false otherwise. - -private: - std::string _host; -}; - - -} } // namespace Poco::Net - - -#endif // Net_SecureSMTPClientSession_INCLUDED diff --git a/contrib/libpoco/NetSSL_OpenSSL/include/Poco/Net/SecureServerSocket.h b/contrib/libpoco/NetSSL_OpenSSL/include/Poco/Net/SecureServerSocket.h deleted file mode 100644 index 49da07bd5a1..00000000000 --- a/contrib/libpoco/NetSSL_OpenSSL/include/Poco/Net/SecureServerSocket.h +++ /dev/null @@ -1,138 +0,0 @@ -// -// SecureServerSocket.h -// -// $Id: //poco/1.4/NetSSL_OpenSSL/include/Poco/Net/SecureServerSocket.h#1 $ -// -// Library: NetSSL_OpenSSL -// Package: SSLSockets -// Module: SecureServerSocket -// -// Definition of the SecureServerSocket class. -// -// Copyright (c) 2006-2009, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef NetSSL_SecureServerSocket_INCLUDED -#define NetSSL_SecureServerSocket_INCLUDED - - -#include "Poco/Net/NetSSL.h" -#include "Poco/Net/ServerSocket.h" -#include "Poco/Net/Context.h" - - -namespace Poco { -namespace Net { - - -class NetSSL_API SecureServerSocket: public ServerSocket - /// A server socket for secure SSL connections. -{ -public: - SecureServerSocket(); - /// Creates a SSL server socket using the - /// default SSL server context. - /// - /// The server socket must be bound to - /// an address and put into listening state. - - explicit SecureServerSocket(Context::Ptr pContext); - /// Creates a SSL server socket, using the - /// given SSL context object. - /// - /// The server socket must be bound to - /// an address and put into listening state. - - SecureServerSocket(const Socket& socket); - /// Creates the SecureServerSocket with the SocketImpl - /// from another socket. The SocketImpl must be - /// a SecureServerSocketImpl, otherwise an InvalidArgumentException - /// will be thrown. - - SecureServerSocket(const SocketAddress& address, int backlog = 64); - /// Creates a server socket using the default server SSL context, - /// binds it to the given address and puts it in listening - /// state. - /// - /// After successful construction, the server socket - /// is ready to accept connections. - - SecureServerSocket(const SocketAddress& address, int backlog, Context::Ptr pContext); - /// Creates a server socket using the given SSL context, binds it - /// to the given address and puts it in listening - /// state. - /// - /// After successful construction, the server socket - /// is ready to accept connections. - - SecureServerSocket(Poco::UInt16 port, int backlog = 64); - /// Creates a server socket using the default server SSL context, - /// binds it to the given port and puts it in listening - /// state. - /// - /// After successful construction, the server socket - /// is ready to accept connections. - - SecureServerSocket(Poco::UInt16 port, int backlog, Context::Ptr pContext); - /// Creates a server socket using the given SSL context, binds it - /// to the given port and puts it in listening - /// state. - /// - /// After successful construction, the server socket - /// is ready to accept connections. - - virtual ~SecureServerSocket(); - /// Destroys the StreamSocket. - - SecureServerSocket& operator = (const Socket& socket); - /// Assignment operator. - /// - /// Releases the socket's SocketImpl and - /// attaches the SocketImpl from the other socket and - /// increments the reference count of the SocketImpl. - - StreamSocket acceptConnection(SocketAddress& clientAddr); - /// Get the next completed connection from the - /// socket's completed connection queue. - /// - /// If the queue is empty, waits until a connection - /// request completes. - /// - /// Returns a new SSL socket for the connection - /// with the client. - /// - /// The client socket's address is returned in clientAddr. - /// - /// No SSL handshake is performed on the new connection. - /// The SSL handshake will be performed the first time - /// sendBytes(), receiveBytes() or completeHandshake() - /// is called on the returned SecureStreamSocket. - - StreamSocket acceptConnection(); - /// Get the next completed connection from the - /// socket's completed connection queue. - /// - /// If the queue is empty, waits until a connection - /// request completes. - /// - /// Returns a new SSL socket for the connection - /// with the client. - /// - /// No SSL handshake is performed on the new connection. - /// The SSL handshake will be performed the first time - /// sendBytes(), receiveBytes() or completeHandshake() - /// is called on the returned SecureStreamSocket. - - Context::Ptr context() const; - /// Returns the SSL context used by this socket. -}; - - -} } // namespace Poco::Net - - -#endif // NetSSL_SecureServerSocket_INCLUDED diff --git a/contrib/libpoco/NetSSL_OpenSSL/include/Poco/Net/SecureServerSocketImpl.h b/contrib/libpoco/NetSSL_OpenSSL/include/Poco/Net/SecureServerSocketImpl.h deleted file mode 100644 index fa52cd5f88b..00000000000 --- a/contrib/libpoco/NetSSL_OpenSSL/include/Poco/Net/SecureServerSocketImpl.h +++ /dev/null @@ -1,148 +0,0 @@ -// -// SecureServerSocketImpl.h -// -// $Id: //poco/1.4/NetSSL_OpenSSL/include/Poco/Net/SecureServerSocketImpl.h#1 $ -// -// Library: NetSSL_OpenSSL -// Package: SSLSockets -// Module: SecureServerSocketImpl -// -// Definition of the SecureServerSocketImpl class. -// -// Copyright (c) 2006-2009, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef NetSSL_SecureServerSocketImpl_INCLUDED -#define NetSSL_SecureServerSocketImpl_INCLUDED - - -#include "Poco/Net/NetSSL.h" -#include "Poco/Net/SecureSocketImpl.h" -#include "Poco/Net/ServerSocketImpl.h" -#include "Poco/Net/Context.h" - - -namespace Poco { -namespace Net { - - -class NetSSL_API SecureServerSocketImpl: public ServerSocketImpl - /// The SocketImpl class for SecureServerSocket. -{ -public: - SecureServerSocketImpl(Context::Ptr pContext); - /// Creates the SecureServerSocketImpl using the - /// given SSL context object. - - SocketImpl* acceptConnection(SocketAddress& clientAddr); - /// Get the next completed connection from the - /// socket's completed connection queue. - /// - /// If the queue is empty, waits until a connection - /// request completes. - /// - /// Returns a new TCP socket for the connection - /// with the client. - /// - /// The client socket's address is returned in clientAddr. - - void connect(const SocketAddress& address); - /// Not supported by this kind of socket. - /// - /// Throws a Poco::InvalidAccessException. - - void connect(const SocketAddress& address, const Poco::Timespan& timeout); - /// Not supported by this kind of socket. - /// - /// Throws a Poco::InvalidAccessException. - - void connectNB(const SocketAddress& address); - /// Not supported by this kind of socket. - /// - /// Throws a Poco::InvalidAccessException. - - void bind(const SocketAddress& address, bool reuseAddress = false); - /// 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. - - void listen(int backlog = 64); - /// Puts the socket into listening state. - /// - /// The socket becomes a passive socket that - /// can accept incoming connection requests. - /// - /// The backlog argument specifies the maximum - /// number of connections that can be queued - /// for this socket. - - void close(); - /// Close the socket. - - int sendBytes(const void* buffer, int length, int flags = 0); - /// Not supported by this kind of socket. - /// - /// Throws a Poco::InvalidAccessException. - - int receiveBytes(void* buffer, int length, int flags = 0); - /// Not supported by this kind of socket. - /// - /// Throws a Poco::InvalidAccessException. - - int sendTo(const void* buffer, int length, const SocketAddress& address, int flags = 0); - /// Not supported by this kind of socket. - /// - /// Throws a Poco::InvalidAccessException. - - int receiveFrom(void* buffer, int length, SocketAddress& address, int flags = 0); - /// Not supported by this kind of socket. - /// - /// Throws a Poco::InvalidAccessException. - - void sendUrgent(unsigned char data); - /// Not supported by this kind of socket. - /// - /// Throws a Poco::InvalidAccessException. - - bool secure() const; - /// Returns true iff the socket's connection is secure - /// (using SSL or TLS). - - Context::Ptr context() const; - /// Returns the SSL context used by this socket. - -protected: - ~SecureServerSocketImpl(); - /// Destroys the SecureServerSocketImpl. - -private: - SecureServerSocketImpl(const SecureServerSocketImpl&); - SecureServerSocketImpl& operator = (const SecureServerSocketImpl&); - -private: - SecureSocketImpl _impl; -}; - - -// -// inlines -// -inline Context::Ptr SecureServerSocketImpl::context() const -{ - return _impl.context(); -} - - -} } // namespace Poco::Net - - -#endif // NetSSL_SecureServerSocketImpl_INCLUDED diff --git a/contrib/libpoco/NetSSL_OpenSSL/include/Poco/Net/SecureSocketImpl.h b/contrib/libpoco/NetSSL_OpenSSL/include/Poco/Net/SecureSocketImpl.h deleted file mode 100644 index 74b6ecb4740..00000000000 --- a/contrib/libpoco/NetSSL_OpenSSL/include/Poco/Net/SecureSocketImpl.h +++ /dev/null @@ -1,251 +0,0 @@ -// -// SecureSocketImpl.h -// -// $Id: //poco/1.4/NetSSL_OpenSSL/include/Poco/Net/SecureSocketImpl.h#2 $ -// -// Library: NetSSL_OpenSSL -// Package: SSLSockets -// Module: SecureSocketImpl -// -// Definition of the SecureSocketImpl class. -// -// Copyright (c) 2006-2010, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef NetSSL_SecureSocketImpl_INCLUDED -#define NetSSL_SecureSocketImpl_INCLUDED - - -#include "Poco/Net/NetSSL.h" -#include "Poco/Net/SocketImpl.h" -#include "Poco/Net/Context.h" -#include "Poco/Net/X509Certificate.h" -#include "Poco/Net/Session.h" -#include -#include - - -namespace Poco { -namespace Net { - - -class HostEntry; - - -class NetSSL_API SecureSocketImpl - /// The SocketImpl for SecureStreamSocket. -{ -public: - SecureSocketImpl(Poco::AutoPtr pSocketImpl, Context::Ptr pContext); - /// Creates the SecureSocketImpl using an already - /// connected stream socket. - - virtual ~SecureSocketImpl(); - /// Destroys the SecureSocketImpl. - - SocketImpl* acceptConnection(SocketAddress& clientAddr); - /// Get the next completed connection from the - /// socket's completed connection queue. - /// - /// If the queue is empty, waits until a connection - /// request completes. - /// - /// Returns a new SSL socket for the connection - /// with the client. - /// - /// The client socket's address is returned in clientAddr. - - void connect(const SocketAddress& address, bool performHandshake); - /// Initializes the socket and establishes a secure connection to - /// the TCP server at the given address. - /// - /// If performHandshake is true, the SSL handshake is performed immediately - /// after establishing the connection. Otherwise, the handshake is performed - /// the first time sendBytes(), receiveBytes() or completeHandshake() is called. - - void connect(const SocketAddress& address, const Poco::Timespan& timeout, bool performHandshake); - /// Initializes the socket, sets the socket timeout and - /// establishes a secure connection to the TCP server at the given address. - /// - /// If performHandshake is true, the SSL handshake is performed immediately - /// after establishing the connection. Otherwise, the handshake is performed - /// the first time sendBytes(), receiveBytes() or completeHandshake() is called. - - void connectNB(const SocketAddress& address); - /// Initializes the socket and establishes a secure connection to - /// the TCP server at the given address. Prior to opening the - /// connection the socket is set to nonblocking mode. - - void bind(const SocketAddress& address, bool reuseAddress = false); - /// Bind a local address to the socket. - /// - /// This is usually only done when establishing a server - /// socket. SSL clients should not bind a socket to a - /// specific address. - /// - /// If reuseAddress is true, sets the SO_REUSEADDR - /// socket option. - - void listen(int backlog = 64); - /// Puts the socket into listening state. - /// - /// The socket becomes a passive socket that - /// can accept incoming connection requests. - /// - /// The backlog argument specifies the maximum - /// number of connections that can be queued - /// for this socket. - - void shutdown(); - /// Shuts down the connection by attempting - /// an orderly SSL shutdown, then actually - /// shutting down the TCP connection. - - void close(); - /// Close the socket. - - void abort(); - /// Aborts the connection by closing the - /// underlying TCP connection. No orderly SSL shutdown - /// is performed. - - int sendBytes(const void* buffer, int length, int flags = 0); - /// Sends the contents of the given buffer through - /// the socket. Any specified flags are ignored. - /// - /// Returns the number of bytes sent, which may be - /// less than the number of bytes specified. - - int receiveBytes(void* buffer, int length, int flags = 0); - /// Receives data from the socket and stores it - /// in buffer. Up to length bytes are received. - /// - /// Returns the number of bytes received. - - int available() const; - /// Returns the number of bytes available from the - /// SSL buffer for immediate reading. - - int completeHandshake(); - /// Completes the SSL handshake. - /// - /// If the SSL connection was the result of an accept(), - /// the server-side handshake is completed, otherwise - /// a client-side handshake is performed. - - poco_socket_t sockfd(); - /// Returns the underlying socket descriptor. - - X509* peerCertificate() const; - /// Returns the peer's certificate. - - Context::Ptr context() const; - /// Returns the SSL context used for this socket. - - void verifyPeerCertificate(); - /// Performs post-connect (or post-accept) peer certificate validation, - /// using the peer host name set with setPeerHostName(), or the peer's - /// IP address string if no peer host name has been set. - - void verifyPeerCertificate(const std::string& hostName); - /// Performs post-connect (or post-accept) peer certificate validation - /// using the given peer host name. - - void setPeerHostName(const std::string& hostName); - /// Sets the peer host name for certificate validation purposes. - - const std::string& getPeerHostName() const; - /// Returns the peer host name. - - Session::Ptr currentSession(); - /// Returns the SSL session of the current connection, - /// for reuse in a future connection (if session caching - /// is enabled). - /// - /// If no connection is established, returns null. - - void useSession(Session::Ptr pSession); - /// Sets the SSL session to use for the next - /// connection. Setting a previously saved Session - /// object is necessary to enable session caching. - /// - /// To remove the currently set session, a null pointer - /// can be given. - /// - /// Must be called before connect() to be effective. - - bool sessionWasReused(); - /// Returns true iff a reused session was negotiated during - /// the handshake. - -protected: - void acceptSSL(); - /// Performs a server-side SSL handshake and certificate verification. - - void connectSSL(bool performHandshake); - /// Performs a client-side SSL handshake and establishes a secure - /// connection over an already existing TCP connection. - - long verifyPeerCertificateImpl(const std::string& hostName); - /// Performs post-connect (or post-accept) peer certificate validation. - - static bool isLocalHost(const std::string& hostName); - /// Returns true iff the given host name is the local host - /// (either "localhost" or "127.0.0.1"). - - int handleError(int rc); - /// Handles an SSL error by throwing an appropriate exception. - - void reset(); - /// Prepares the socket for re-use. - /// - /// After closing and resetting a socket, the socket can - /// be used for a new connection. - /// - /// Note that simply closing a socket is not sufficient - /// to be able to re-use it again. - -private: - SecureSocketImpl(const SecureSocketImpl&); - SecureSocketImpl& operator = (const SecureSocketImpl&); - - SSL* _pSSL; - Poco::AutoPtr _pSocket; - Context::Ptr _pContext; - bool _needHandshake; - std::string _peerHostName; - Session::Ptr _pSession; - - friend class SecureStreamSocketImpl; -}; - - -// -// inlines -// -inline poco_socket_t SecureSocketImpl::sockfd() -{ - return _pSocket->sockfd(); -} - - -inline Context::Ptr SecureSocketImpl::context() const -{ - return _pContext; -} - - -inline const std::string& SecureSocketImpl::getPeerHostName() const -{ - return _peerHostName; -} - - -} } // namespace Poco::Net - - -#endif // NetSSL_SecureSocketImpl_INCLUDED diff --git a/contrib/libpoco/NetSSL_OpenSSL/include/Poco/Net/SecureStreamSocket.h b/contrib/libpoco/NetSSL_OpenSSL/include/Poco/Net/SecureStreamSocket.h deleted file mode 100644 index 96c6edb334d..00000000000 --- a/contrib/libpoco/NetSSL_OpenSSL/include/Poco/Net/SecureStreamSocket.h +++ /dev/null @@ -1,274 +0,0 @@ -// -// SecureStreamSocket.h -// -// $Id: //poco/1.4/NetSSL_OpenSSL/include/Poco/Net/SecureStreamSocket.h#2 $ -// -// Library: NetSSL_OpenSSL -// Package: SSLSockets -// Module: SecureStreamSocket -// -// Definition of the SecureStreamSocket class. -// -// Copyright (c) 2006-2010, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef NetSSL_SecureStreamSocket_INCLUDED -#define NetSSL_SecureStreamSocket_INCLUDED - - -#include "Poco/Net/NetSSL.h" -#include "Poco/Net/StreamSocket.h" -#include "Poco/Net/Context.h" -#include "Poco/Net/Session.h" -#include "Poco/Net/X509Certificate.h" - - -namespace Poco { -namespace Net { - - -class NetSSL_API SecureStreamSocket: public StreamSocket - /// A subclass of StreamSocket for secure SSL sockets. - /// - /// A few notes about nonblocking IO: - /// sendBytes() and receiveBytes() can return a - /// negative value when using a nonblocking socket, which means - /// a SSL handshake is currently in progress and more data - /// needs to be read or written for the handshake to continue. - /// If sendBytes() or receiveBytes() return ERR_SSL_WANT_WRITE, - /// sendBytes() must be called as soon as possible (usually, after - /// select() indicates that data can be written). Likewise, if - /// ERR_SSL_WANT_READ is returned, receiveBytes() must be called - /// as soon as data is available for reading (indicated by select()). - /// - /// The SSL handshake is delayed until the first sendBytes() or - /// receiveBytes() operation is performed on the socket. No automatic - /// post connection check (checking the peer certificate for a valid - /// hostname) is performed when using nonblocking I/O. To manually - /// perform peer certificate validation, call verifyPeerCertificate() - /// after the SSL handshake has been completed. -{ -public: - enum - { - ERR_SSL_WANT_READ = -1, - ERR_SSL_WANT_WRITE = -2 - }; - - SecureStreamSocket(); - /// Creates an unconnected secure stream socket - /// using the default client SSL context. - /// - /// Before sending or receiving data, the socket - /// must be connected with a call to connect(). - - explicit SecureStreamSocket(Context::Ptr pContext); - /// Creates an unconnected secure stream socket - /// using the given SSL context. - /// - /// Before sending or receiving data, the socket - /// must be connected with a call to connect(). - - SecureStreamSocket(Context::Ptr pContext, Session::Ptr pSession); - /// Creates an unconnected secure stream socket - /// using the given SSL context. - /// - /// Before sending or receiving data, the socket - /// must be connected with a call to connect(). - /// - /// The given Session is reused, if possible (client session - /// caching is enabled for the given Context, and the server - /// agrees to reuse the session). - - explicit SecureStreamSocket(const SocketAddress& address); - /// Creates a secure stream socket using the default - /// client SSL context and connects it to - /// the socket specified by address. - - SecureStreamSocket(const SocketAddress& address, Context::Ptr pContext); - /// Creates a secure stream socket using the given - /// client SSL context and connects it to - /// the socket specified by address. - - SecureStreamSocket(const SocketAddress& address, Context::Ptr pContext, Session::Ptr pSession); - /// Creates a secure stream socket using the given - /// client SSL context and connects it to - /// the socket specified by address. - /// - /// The given Session is reused, if possible (client session - /// caching is enabled for the given Context, and the server - /// agrees to reuse the session). - - SecureStreamSocket(const SocketAddress& address, const std::string& hostName); - /// Creates a secure stream socket using the default - /// client SSL context and connects it to - /// the socket specified by address. - /// - /// The given host name is used for certificate verification. - - SecureStreamSocket(const SocketAddress& address, const std::string& hostName, Context::Ptr pContext); - /// Creates a secure stream socket using the given - /// client SSL context and connects it to - /// the socket specified by address. - /// - /// The given host name is used for certificate verification. - - SecureStreamSocket(const SocketAddress& address, const std::string& hostName, Context::Ptr pContext, Session::Ptr pSession); - /// Creates a secure stream socket using the given - /// client SSL context and connects it to - /// the socket specified by address. - /// - /// The given host name is used for certificate verification. - /// - /// The given Session is reused, if possible (client session - /// caching is enabled for the given Context, and the server - /// agrees to reuse the session). - - SecureStreamSocket(const Socket& socket); - /// Creates the SecureStreamSocket with the SocketImpl - /// from another socket. The SocketImpl must be - /// a SecureStreamSocketImpl, otherwise an InvalidArgumentException - /// will be thrown. - - virtual ~SecureStreamSocket(); - /// Destroys the StreamSocket. - - SecureStreamSocket& operator = (const Socket& socket); - /// Assignment operator. - /// - /// Releases the socket's SocketImpl and - /// attaches the SocketImpl from the other socket and - /// increments the reference count of the SocketImpl. - - bool havePeerCertificate() const; - /// Returns true iff the peer has presented a - /// certificate. - - X509Certificate peerCertificate() const; - /// Returns the peer's X509 certificate. - /// - /// Throws a SSLException if the peer did not - /// present a certificate. - - void setPeerHostName(const std::string& hostName); - /// Sets the peer's host name used for certificate validation. - - const std::string& getPeerHostName() const; - /// Returns the peer's host name used for certificate validation. - - static SecureStreamSocket attach(const StreamSocket& streamSocket); - /// Creates a SecureStreamSocket over an existing socket - /// connection. The given StreamSocket must be connected. - /// A SSL handshake will be performed. - - static SecureStreamSocket attach(const StreamSocket& streamSocket, Context::Ptr pContext); - /// Creates a SecureStreamSocket over an existing socket - /// connection. The given StreamSocket must be connected. - /// A SSL handshake will be performed. - - static SecureStreamSocket attach(const StreamSocket& streamSocket, Context::Ptr pContext, Session::Ptr pSession); - /// Creates a SecureStreamSocket over an existing socket - /// connection. The given StreamSocket must be connected. - /// A SSL handshake will be performed. - /// - /// The given Session is reused, if possible (client session - /// caching is enabled for the given Context, and the server - /// agrees to reuse the session). - - static SecureStreamSocket attach(const StreamSocket& streamSocket, const std::string& peerHostName); - /// Creates a SecureStreamSocket over an existing socket - /// connection. The given StreamSocket must be connected. - /// A SSL handshake will be performed. - - static SecureStreamSocket attach(const StreamSocket& streamSocket, const std::string& peerHostName, Context::Ptr pContext); - /// Creates a SecureStreamSocket over an existing socket - /// connection. The given StreamSocket must be connected. - /// A SSL handshake will be performed. - - static SecureStreamSocket attach(const StreamSocket& streamSocket, const std::string& peerHostName, Context::Ptr pContext, Session::Ptr pSession); - /// Creates a SecureStreamSocket over an existing socket - /// connection. The given StreamSocket must be connected. - /// A SSL handshake will be performed. - /// - /// The given Session is reused, if possible (client session - /// caching is enabled for the given Context, and the server - /// agrees to reuse the session). - - Context::Ptr context() const; - /// Returns the SSL context used by this socket. - - void setLazyHandshake(bool flag = true); - /// Enable lazy SSL handshake. If enabled, the SSL handshake - /// will be performed the first time date is sent or - /// received over the connection. - - bool getLazyHandshake() const; - /// Returns true if setLazyHandshake(true) has been called. - - void verifyPeerCertificate(); - /// Performs post-connect (or post-accept) peer certificate validation, - /// using the peer host name set with setPeerHostName(), or the peer's - /// IP address string if no peer host name has been set. - /// - /// Should only be used for non-blocking connections, after the - /// initial SSL handshake has been performed (see completeHandshake()). - - void verifyPeerCertificate(const std::string& hostName); - /// Performs post-connect (or post-accept) peer certificate validation - /// using the given host name. - /// - /// Should only be used for non-blocking connections, after the - /// initial SSL handshake has been performed (see completeHandshake()). - - int completeHandshake(); - /// Completes the SSL handshake. - /// - /// If the SSL connection was the result of an accept(), - /// the server-side handshake is completed, otherwise - /// a client-side handshake is performed. - /// - /// Returns 1 if the handshake was successful, ERR_SSL_WANT_READ or - /// ERR_SSL_WANT_WRITE if more data is required to complete the - /// handshake. In this case, completeHandshake() should be called - /// again, after the necessary condition has been met. - - Session::Ptr currentSession(); - /// Returns the SSL session of the current connection, - /// for reuse in a future connection (if session caching - /// is enabled). - /// - /// If no connection is established, returns null. - - void useSession(Session::Ptr pSession); - /// Sets the SSL session to use for the next - /// connection. Setting a previously saved Session - /// object is necessary to enable session caching. - /// - /// To remove the currently set session, a null pointer - /// can be given. - /// - /// Must be called before connect() to be effective. - - bool sessionWasReused(); - /// Returns true iff a reused session was negotiated during - /// the handshake. - - void abort(); - /// Aborts the SSL connection by closing the underlying - /// TCP connection. No orderly SSL shutdown is performed. - -protected: - SecureStreamSocket(SocketImpl* pImpl); - - friend class SecureServerSocket; -}; - - -} } // namespace Poco::Net - - -#endif // NetSSL_SecureStreamSocket_INCLUDED diff --git a/contrib/libpoco/NetSSL_OpenSSL/include/Poco/Net/SecureStreamSocketImpl.h b/contrib/libpoco/NetSSL_OpenSSL/include/Poco/Net/SecureStreamSocketImpl.h deleted file mode 100644 index a1bf72c6ca3..00000000000 --- a/contrib/libpoco/NetSSL_OpenSSL/include/Poco/Net/SecureStreamSocketImpl.h +++ /dev/null @@ -1,301 +0,0 @@ -// -// SecureStreamSocketImpl.h -// -// $Id: //poco/1.4/NetSSL_OpenSSL/include/Poco/Net/SecureStreamSocketImpl.h#2 $ -// -// Library: NetSSL_OpenSSL -// Package: SSLSockets -// Module: SecureStreamSocketImpl -// -// Definition of the SecureStreamSocketImpl class. -// -// Copyright (c) 2006-2010, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef NetSSL_SecureStreamSocketImpl_INCLUDED -#define NetSSL_SecureStreamSocketImpl_INCLUDED - - -#include "Poco/Net/NetSSL.h" -#include "Poco/Net/SecureSocketImpl.h" -#include "Poco/Net/StreamSocketImpl.h" -#include "Poco/Net/Context.h" -#include "Poco/Net/X509Certificate.h" - - -namespace Poco { -namespace Net { - - -class NetSSL_API SecureStreamSocketImpl: public StreamSocketImpl - /// This class implements a SSL stream socket. -{ -public: - SecureStreamSocketImpl(Context::Ptr pContext); - /// Creates the SecureStreamSocketImpl. - - SecureStreamSocketImpl(StreamSocketImpl* pStreamSocket, Context::Ptr pContext); - /// Creates the SecureStreamSocketImpl. - - SocketImpl* acceptConnection(SocketAddress& clientAddr); - /// Not supported by a SecureStreamSocket. - /// - /// Throws a Poco::InvalidAccessException. - - void connect(const SocketAddress& address); - /// Initializes the socket and establishes a connection to - /// the TCP server at the given address. - /// - /// Can also be used for UDP sockets. In this case, no - /// connection is established. Instead, incoming and outgoing - /// packets are restricted to the specified address. - - void connect(const SocketAddress& address, const Poco::Timespan& timeout); - /// Initializes the socket, sets the socket timeout and - /// establishes a connection to the TCP server at the given address. - - void connectNB(const SocketAddress& address); - /// Initializes the socket and establishes a connection to - /// the TCP server at the given address. Prior to opening the - /// connection the socket is set to nonblocking mode. - - void bind(const SocketAddress& address, bool reuseAddress = false); - /// Not supported by a SecureStreamSocket. - /// - /// Throws a Poco::InvalidAccessException. - - void listen(int backlog = 64); - /// Not supported by a SecureStreamSocket. - /// - /// Throws a Poco::InvalidAccessException. - - void close(); - /// Close the socket. - - int sendBytes(const void* buffer, int length, int flags = 0); - /// Sends the contents of the given buffer through - /// the socket. Any specified flags are ignored. - /// - /// Returns the number of bytes sent, which may be - /// less than the number of bytes specified. - - int receiveBytes(void* buffer, int length, int flags = 0); - /// Receives data from the socket and stores it - /// in buffer. Up to length bytes are received. - /// - /// Returns the number of bytes received. - - int sendTo(const void* buffer, int length, const SocketAddress& address, int flags = 0); - /// Not supported by a SecureStreamSocket. - /// - /// Throws a Poco::InvalidAccessException. - - int receiveFrom(void* buffer, int length, SocketAddress& address, int flags = 0); - /// Not supported by a SecureStreamSocket. - /// - /// Throws a Poco::InvalidAccessException. - - void sendUrgent(unsigned char data); - /// Not supported by a SecureStreamSocket. - /// - /// Throws a Poco::InvalidAccessException. - - int available(); - /// Returns the number of bytes available that can be read - /// without causing the socket to block. - /// - /// For an SSL connection, returns the number of bytes that - /// can be read from the currently buffered SSL record, - /// before a new record is read from the underlying socket. - - void shutdownReceive(); - /// Shuts down the receiving part of the socket connection. - /// - /// Since SSL does not support a half shutdown, this does - /// nothing. - - void shutdownSend(); - /// Shuts down the receiving part of the socket connection. - /// - /// Since SSL does not support a half shutdown, this does - /// nothing. - - void shutdown(); - /// Shuts down the SSL connection. - - void abort(); - /// Aborts the connection by closing the underlying - /// TCP connection. No orderly SSL shutdown is performed. - - bool secure() const; - /// Returns true iff the socket's connection is secure - /// (using SSL or TLS). - - void setPeerHostName(const std::string& hostName); - /// Sets the peer host name for certificate validation purposes. - - const std::string& getPeerHostName() const; - /// Returns the peer host name. - - bool havePeerCertificate() const; - /// Returns true iff the peer has presented a - /// certificate. - - X509Certificate peerCertificate() const; - /// Returns the peer's X509 certificate. - /// - /// Throws a SSLException if the peer did not - /// present a certificate. - - Context::Ptr context() const; - /// Returns the SSL context used by this socket. - - void setLazyHandshake(bool flag = true); - /// Enable lazy SSL handshake. If enabled, the SSL handshake - /// will be performed the first time date is sent or - /// received over the connection. - - bool getLazyHandshake() const; - /// Returns true if setLazyHandshake(true) has been called. - - void verifyPeerCertificate(); - /// Performs post-connect (or post-accept) peer certificate validation, - /// using the peer's IP address as host name. - - void verifyPeerCertificate(const std::string& hostName); - /// Performs post-connect (or post-accept) peer certificate validation - /// using the given host name. - - int completeHandshake(); - /// Completes the SSL handshake. - /// - /// If the SSL connection was the result of an accept(), - /// the server-side handshake is completed, otherwise - /// a client-side handshake is performed. - - Session::Ptr currentSession(); - /// Returns the SSL session of the current connection, - /// for reuse in a future connection (if session caching - /// is enabled). - /// - /// If no connection is established, returns null. - - void useSession(Session::Ptr pSession); - /// Sets the SSL session to use for the next - /// connection. Setting a previously saved Session - /// object is necessary to enable session caching. - /// - /// To remove the currently set session, a null pointer - /// can be given. - /// - /// Must be called before connect() to be effective. - - bool sessionWasReused(); - /// Returns true iff a reused session was negotiated during - /// the handshake. - -protected: - void acceptSSL(); - /// Performs a SSL server-side handshake. - - void connectSSL(); - /// Performs a SSL client-side handshake on an already connected TCP socket. - - ~SecureStreamSocketImpl(); - /// Destroys the SecureStreamSocketImpl. - - static int lastError(); - static void error(); - static void error(const std::string& arg); - static void error(int code); - static void error(int code, const std::string& arg); - -private: - SecureStreamSocketImpl(const SecureStreamSocketImpl&); - SecureStreamSocketImpl& operator = (const SecureStreamSocketImpl&); - - SecureSocketImpl _impl; - bool _lazyHandshake; - - friend class SecureSocketImpl; - friend class SecureStreamSocket; -}; - - -// -// inlines -// -inline const std::string& SecureStreamSocketImpl::getPeerHostName() const -{ - return _impl.getPeerHostName(); -} - - -inline void SecureStreamSocketImpl::setPeerHostName(const std::string& peerHostName) -{ - _impl.setPeerHostName(peerHostName); -} - - -inline Context::Ptr SecureStreamSocketImpl::context() const -{ - return _impl.context(); -} - - -inline Session::Ptr SecureStreamSocketImpl::currentSession() -{ - return _impl.currentSession(); -} - - -inline void SecureStreamSocketImpl::useSession(Session::Ptr pSession) -{ - _impl.useSession(pSession); -} - - -inline bool SecureStreamSocketImpl::sessionWasReused() -{ - return _impl.sessionWasReused(); -} - - -inline int SecureStreamSocketImpl::lastError() -{ - return SocketImpl::lastError(); -} - - -inline void SecureStreamSocketImpl::error() -{ - return SocketImpl::error(); -} - - -inline void SecureStreamSocketImpl::error(const std::string& arg) -{ - return SocketImpl::error(arg); -} - - -inline void SecureStreamSocketImpl::error(int code) -{ - return SocketImpl::error(code); -} - - -inline void SecureStreamSocketImpl::error(int code, const std::string& arg) -{ - return SocketImpl::error(code, arg); -} - - -} } // namespace Poco::Net - - -#endif // NetSSL_SecureStreamSocketImpl_INCLUDED diff --git a/contrib/libpoco/NetSSL_OpenSSL/include/Poco/Net/Session.h b/contrib/libpoco/NetSSL_OpenSSL/include/Poco/Net/Session.h deleted file mode 100644 index 1f6cf51a400..00000000000 --- a/contrib/libpoco/NetSSL_OpenSSL/include/Poco/Net/Session.h +++ /dev/null @@ -1,81 +0,0 @@ -// -// Session.h -// -// $Id: //poco/1.4/NetSSL_OpenSSL/include/Poco/Net/Session.h#1 $ -// -// Library: NetSSL_OpenSSL -// Package: SSLCore -// Module: Session -// -// Definition of the Session class. -// -// Copyright (c) 2010, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef NetSSL_Session_INCLUDED -#define NetSSL_Session_INCLUDED - - -#include "Poco/Net/NetSSL.h" -#include "Poco/RefCountedObject.h" -#include "Poco/AutoPtr.h" -#include - - -namespace Poco { -namespace Net { - - -class NetSSL_API Session: public Poco::RefCountedObject - /// This class encapsulates a SSL session object - /// used with session caching on the client side. - /// - /// For session caching to work, a client must - /// save the session object from an existing connection, - /// if it wants to reuse it with a future connection. -{ -public: - typedef Poco::AutoPtr Ptr; - - SSL_SESSION* sslSession() const; - /// Returns the stored OpenSSL SSL_SESSION object. - -protected: - Session(SSL_SESSION* pSession); - /// Creates a new Session object, using the given - /// SSL_SESSION object. - /// - /// The SSL_SESSION's reference count is not changed. - - ~Session(); - /// Destroys the Session. - /// - /// Calls SSL_SESSION_free() on the stored - /// SSL_SESSION object. - -private: - Session(); - - SSL_SESSION* _pSession; - - friend class SecureSocketImpl; -}; - - -// -// inlines -// -inline SSL_SESSION* Session::sslSession() const -{ - return _pSession; -} - - -} } // namespace Poco::Net - - -#endif // NetSSL_Session_INCLUDED diff --git a/contrib/libpoco/NetSSL_OpenSSL/include/Poco/Net/Utility.h b/contrib/libpoco/NetSSL_OpenSSL/include/Poco/Net/Utility.h deleted file mode 100644 index ea002eac99e..00000000000 --- a/contrib/libpoco/NetSSL_OpenSSL/include/Poco/Net/Utility.h +++ /dev/null @@ -1,54 +0,0 @@ -// -// Utility.h -// -// $Id: //poco/1.4/NetSSL_OpenSSL/include/Poco/Net/Utility.h#1 $ -// -// Library: NetSSL_OpenSSL -// Package: SSLCore -// Module: Utility -// -// Definition of the Utility class. -// -// Copyright (c) 2006-2009, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef NetSSL_Utility_INCLUDED -#define NetSSL_Utility_INCLUDED - - -#include "Poco/Net/NetSSL.h" -#include "Poco/Net/Context.h" - - -namespace Poco { -namespace Net { - - -class NetSSL_API Utility - /// This class provides various helper functions for working - /// with the OpenSSL library. -{ -public: - static Context::VerificationMode convertVerificationMode(const std::string& verMode); - /// Non-case sensitive conversion of a string to a VerificationMode enum. - /// If verMode is illegal an InvalidArgumentException is thrown. - - static std::string convertCertificateError(long errCode); - /// Converts an SSL certificate handling error code into an error message. - - static std::string getLastError(); - /// Returns the last error from the error stack - - static void clearErrorStack(); - /// Clears the error stack -}; - - -} } // namespace Poco::Net - - -#endif // NetSSL_Utility_INCLUDED diff --git a/contrib/libpoco/NetSSL_OpenSSL/include/Poco/Net/VerificationErrorArgs.h b/contrib/libpoco/NetSSL_OpenSSL/include/Poco/Net/VerificationErrorArgs.h deleted file mode 100644 index 045a9b8a11c..00000000000 --- a/contrib/libpoco/NetSSL_OpenSSL/include/Poco/Net/VerificationErrorArgs.h +++ /dev/null @@ -1,110 +0,0 @@ -// -// VerificationErrorArgs.h -// -// $Id: //poco/1.4/NetSSL_OpenSSL/include/Poco/Net/VerificationErrorArgs.h#1 $ -// -// Library: NetSSL_OpenSSL -// Package: SSLCore -// Module: VerificationErrorArgs -// -// Definition of the VerificationErrorArgs class. -// -// Copyright (c) 2006-2009, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef NetSSL_VerificationErrorArgs_INCLUDED -#define NetSSL_VerificationErrorArgs_INCLUDED - - -#include "Poco/Net/NetSSL.h" -#include "Poco/Net/X509Certificate.h" - - -namespace Poco { -namespace Net { - - -class NetSSL_API VerificationErrorArgs - /// A utility class for certificate error handling. -{ -public: - VerificationErrorArgs(const X509Certificate& cert, int errDepth, int errNum, const std::string& errMsg); - /// Creates the VerificationErrorArgs. _ignoreError is per default set to false. - - ~VerificationErrorArgs(); - /// Destroys the VerificationErrorArgs. - - const X509Certificate& certificate() const; - /// Returns the certificate that caused the error. - - int errorDepth() const; - /// Returns the position of the certificate in the certificate chain. - - int errorNumber() const; - /// Returns the id of the error - - const std::string& errorMessage() const; - /// Returns the textual presentation of the errorNumber. - - void setIgnoreError(bool ignoreError); - /// setIgnoreError to true, if a verification error is judged non-fatal by the user. - - bool getIgnoreError() const; - /// returns the value of _ignoreError - -private: - X509Certificate _cert; - int _errorDepth; - int _errorNumber; - std::string _errorMessage; /// Textual representation of the _errorNumber - bool _ignoreError; -}; - - -// -// inlines -// -inline const X509Certificate& VerificationErrorArgs::certificate() const -{ - return _cert; -} - - -inline int VerificationErrorArgs::errorDepth() const -{ - return _errorDepth; -} - - -inline int VerificationErrorArgs::errorNumber() const -{ - return _errorNumber; -} - - -inline const std::string& VerificationErrorArgs::errorMessage() const -{ - return _errorMessage; -} - - -inline void VerificationErrorArgs::setIgnoreError(bool ignoreError) -{ - _ignoreError = ignoreError; -} - - -inline bool VerificationErrorArgs::getIgnoreError() const -{ - return _ignoreError; -} - - -} } // namespace Poco::Net - - -#endif // NetSSL_VerificationErrorArgs_INCLUDED diff --git a/contrib/libpoco/NetSSL_OpenSSL/include/Poco/Net/X509Certificate.h b/contrib/libpoco/NetSSL_OpenSSL/include/Poco/Net/X509Certificate.h deleted file mode 100644 index b048222a889..00000000000 --- a/contrib/libpoco/NetSSL_OpenSSL/include/Poco/Net/X509Certificate.h +++ /dev/null @@ -1,104 +0,0 @@ -// -// X509Certificate.h -// -// $Id: //poco/1.4/NetSSL_OpenSSL/include/Poco/Net/X509Certificate.h#3 $ -// -// Library: NetSSL_OpenSSL -// Package: SSLCore -// Module: X509Certificate -// -// Definition of the X509Certificate class. -// -// Copyright (c) 2006-2009, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef NetSSL_X509Certificate_INCLUDED -#define NetSSL_X509Certificate_INCLUDED - - -#include "Poco/Net/NetSSL.h" -#include "Poco/Net/SocketDefs.h" -#include "Poco/Crypto/X509Certificate.h" -#include "Poco/DateTime.h" -#include "Poco/SharedPtr.h" -#include - - -namespace Poco { -namespace Net { - - -class HostEntry; - - -class NetSSL_API X509Certificate: public Poco::Crypto::X509Certificate - /// This class extends Poco::Crypto::X509Certificate with the - /// feature to validate a certificate. -{ -public: - explicit X509Certificate(std::istream& istr); - /// Creates the X509Certificate object by reading - /// a certificate in PEM format from a stream. - - explicit X509Certificate(const std::string& path); - /// Creates the X509Certificate object by reading - /// a certificate in PEM format from a file. - - explicit X509Certificate(X509* pCert); - /// Creates the X509Certificate from an existing - /// OpenSSL certificate. Ownership is taken of - /// the certificate. - - X509Certificate(X509* pCert, bool shared); - /// Creates the X509Certificate from an existing - /// OpenSSL certificate. Ownership is taken of - /// the certificate. If shared is true, the - /// certificate's reference count is incremented. - - X509Certificate(const Poco::Crypto::X509Certificate& cert); - /// Creates the certificate by copying another one. - - X509Certificate& operator = (const Poco::Crypto::X509Certificate& cert); - /// Assigns a certificate. - - ~X509Certificate(); - /// Destroys the X509Certificate. - - bool verify(const std::string& hostName) const; - /// Verifies the validity of the certificate against the host name. - /// - /// For this check to be successful, the certificate must contain - /// a domain name that matches the domain name - /// of the host. - /// - /// Returns true if verification succeeded, or false otherwise. - - static bool verify(const Poco::Crypto::X509Certificate& cert, const std::string& hostName); - /// Verifies the validity of the certificate against the host name. - /// - /// For this check to be successful, the certificate must contain - /// a domain name that matches the domain name - /// of the host. - /// - /// Returns true if verification succeeded, or false otherwise. - -protected: - static bool containsWildcards(const std::string& commonName); - static bool matchWildcard(const std::string& alias, const std::string& hostName); - -private: - enum - { - NAME_BUFFER_SIZE = 256 - }; -}; - - -} } // namespace Poco::Net - - -#endif // NetSSL_X509Certificate_INCLUDED diff --git a/contrib/libpoco/NetSSL_OpenSSL/samples/CMakeLists.txt b/contrib/libpoco/NetSSL_OpenSSL/samples/CMakeLists.txt deleted file mode 100644 index 66f895a6f19..00000000000 --- a/contrib/libpoco/NetSSL_OpenSSL/samples/CMakeLists.txt +++ /dev/null @@ -1,4 +0,0 @@ -add_subdirectory( HTTPSTimeServer ) -add_subdirectory( download ) -add_subdirectory( Mail ) -add_subdirectory( TwitterClient ) diff --git a/contrib/libpoco/NetSSL_OpenSSL/samples/HTTPSTimeServer/CMakeLists.txt b/contrib/libpoco/NetSSL_OpenSSL/samples/HTTPSTimeServer/CMakeLists.txt deleted file mode 100644 index 0791da88d95..00000000000 --- a/contrib/libpoco/NetSSL_OpenSSL/samples/HTTPSTimeServer/CMakeLists.txt +++ /dev/null @@ -1,7 +0,0 @@ -set(SAMPLE_NAME "HTTPSTimeServer") - -set(LOCAL_SRCS "") -aux_source_directory(src LOCAL_SRCS) - -add_executable( ${SAMPLE_NAME} ${LOCAL_SRCS} ) -target_link_libraries( ${SAMPLE_NAME} PocoNetSSL PocoCrypto PocoUtil PocoNet PocoXML PocoFoundation ) diff --git a/contrib/libpoco/NetSSL_OpenSSL/samples/HTTPSTimeServer/HTTPSTimeServer.properties b/contrib/libpoco/NetSSL_OpenSSL/samples/HTTPSTimeServer/HTTPSTimeServer.properties deleted file mode 100644 index c0443f737ea..00000000000 --- a/contrib/libpoco/NetSSL_OpenSSL/samples/HTTPSTimeServer/HTTPSTimeServer.properties +++ /dev/null @@ -1,27 +0,0 @@ -# This is a sample configuration file for HTTPSTimeServer - -HTTPSTimeServer.format = %W, %e %b %y %H:%M:%S %Z -HTTPSTimeServer.port = 9443 - -openSSL.server.privateKeyFile = ${application.configDir}any.pem -openSSL.server.caConfig = ${application.configDir}rootcert.pem -openSSL.server.verificationMode = relaxed -openSSL.server.verificationDepth = 9 -openSSL.server.loadDefaultCAFile = true -openSSL.server.cipherList = ALL:!ADH:!LOW:!EXP:!MD5:@STRENGTH -openSSL.server.privateKeyPassphraseHandler.name = KeyFileHandler -openSSL.server.privateKeyPassphraseHandler.options.password = secret -openSSL.server.invalidCertificateHandler.name = AcceptCertificateHandler -openSSL.server.extendedVerification = false -openSSL.server.cacheSessions = true -openSSL.server.sessionIdContext = ${application.name} -openSSL.server.sessionCacheSize = 100 -openSSL.server.requireTLSv1 = false - -logging.loggers.root.channel.class = ConsoleChannel -logging.loggers.app.name = Application -logging.loggers.app.channel = c1 -logging.formatters.f1.class = PatternFormatter -logging.formatters.f1.pattern = [%p] %t -logging.channels.c1.class = ConsoleChannel -logging.channels.c1.formatter = f1 diff --git a/contrib/libpoco/NetSSL_OpenSSL/samples/HTTPSTimeServer/any.pem b/contrib/libpoco/NetSSL_OpenSSL/samples/HTTPSTimeServer/any.pem deleted file mode 100644 index 37d97c850cb..00000000000 --- a/contrib/libpoco/NetSSL_OpenSSL/samples/HTTPSTimeServer/any.pem +++ /dev/null @@ -1,54 +0,0 @@ ------BEGIN CERTIFICATE----- -MIIEFjCCAv6gAwIBAgIBAjALBgkqhkiG9w0BAQUwgdMxEzARBgNVBAMMCmFwcGlu -Zi5jb20xNjA0BgNVBAoMLUFwcGxpZWQgSW5mb3JtYXRpY3MgU29mdHdhcmUgRW5n -aW5lZXJpbmcgR21iSDEUMBIGA1UECwwLRGV2ZWxvcG1lbnQxEjAQBgNVBAgMCUNh -cmludGhpYTELMAkGA1UEBgwCQVQxHjAcBgNVBAcMFVN0LiBKYWtvYiBpbSBSb3Nl -bnRhbDEtMCsGCSqGSIb3DQEJAQweZ3VlbnRlci5vYmlsdHNjaG5pZ0BhcHBpbmYu -Y29tMB4XDTA5MDIyMzEzNDIwMloXDTExMTEyMDEzNDIwMlowgcoxCjAIBgNVBAMM -ASoxNjA0BgNVBAoMLUFwcGxpZWQgSW5mb3JtYXRpY3MgU29mdHdhcmUgRW5naW5l -ZXJpbmcgR21iSDEUMBIGA1UECwwLRGV2ZWxvcG1lbnQxEjAQBgNVBAgMCUNhcmlu -dGhpYTELMAkGA1UEBgwCQVQxHjAcBgNVBAcMFVN0LiBKYWtvYiBpbSBSb3NlbnRh -bDEtMCsGCSqGSIb3DQEJAQweZ3VlbnRlci5vYmlsdHNjaG5pZ0BhcHBpbmYuY29t -MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxjGFE96wa83Kdiv0m10O -XmBmZ5xuclalVTCisLzUmAekbItMjkmI6dVw9r5gd0W5zDWrgPYUmYgtvqnxSHRK -PRAN410Yq9vqWYvQscpnXGlqUag8t+OBXJhiFnnea/btA0zGVZk6RE/7cWK8AtKH -Q/Xds3AUJ1L/1uV/e/5azyUDyptsmHbCMUwWhGBrj/KZEviHmRMN/xJLrbIBPkla -4HRB61rI8in0jziCwThJ7KiQumzWRu2IJjS+VoNWvG52dYLDvfxppuY1rlF0SG/h -JuSJQqJjZZ11V4TePHscFkGU2tnHqF4UhSjLFJWsGuxnAmZTeIRmavmIIMm3/G6C -WwIDAQABMA0GCSqGSIb3DQEBBQUAA4IBAQAc+mn/ZEaK59B/UAgx8cMlGM9UigJv -L9O46pno3YirBq9SrMzf5b6rrbJm8tkQNfldqaVNA5oVbfxnAHhCUDkX8m0x/De8 -teo9nFei8kETQ25ykV+WLapOdrYxakHPtNVgDTGWNb2GY/hH3nMvtdgFvaS80ncD -tOa13tE4jopFQFY56VKq+sv4Hm5JDvr+dD/g77Cio02sUzSH96FrFIG5/kw1NihB -IJKZ4n7atQizDe4TiR/NRonmZNbsB+18yTKT8traCS30JGKQqYxXuVKPyQd7FARv -ajZxRPbcpAtvWBKXpRHXo4xIBJaPktVOG2hGovjRixXYb83hQ87t1Ozy ------END CERTIFICATE----- ------BEGIN RSA PRIVATE KEY----- -Proc-Type: 4,ENCRYPTED -DEK-Info: DES-EDE3-CBC,0950752701CB74AF - -OmaLdMcP3JDy8JMX41wNH/WvMp6gLGwmqQRob633n95YxVdii0oR8fk4GgmJeYF0 -FrNm5g32vnVyqDZylX4as3GT822HhCA+f7mYpGZltQ47TG15tGTMUNuwIhHlouZs -ZGNclelBB3FHEZAD0Fns2hZ4jZhMDj67wD0YyGcp8so/A+fxedGdwNbJSC1Auuy4 -7uRsY0ZJC1LjMHXkyBEXaL1QA4CGjBlm22Dbo8eoGXcaohsZpDsM7OU7MaQnldM0 -AK8jONZ45127JoDJD41Wgfm0m7tIErsD5CbhHPaddOjQ0OerprEkplhOR+V+ano1 -Pv4adRZOBjr00NDB43WK9x+ZHVQ5tIXxUbqYWZAfvA1PpiYego5XLUCxfy7D6Lms -hV6CAt/fYeBrQOvwLREboKLBOe9A8quP2wi7zkR3KQHty9Tm9efF3PfQSxJTlKg9 -YJ2n/6omX1aXCjQghbnfEcl4tCmj6z2rHCSiJgEOcwDYhGRbQveYieZUH5iKMzYY -YytHkHPfZfzhlJ0WG0AKdA6UlrjEjF09txaZR3Nj4Zf4kZAu727N81HnlFCRvDqV -ZjHUrbE7fJuc3diffUfIHuQZuWcoYDejIbASjcJMHZOpbbPR2ZCYQqUmvg/IgAD6 -M2GDbvfvLnu1BaCrNMdOxM4j+sLNhm8qqAMxZ/wkZA9Sqhi2EifZwf5jWKNU3Vtx -C/w621efHawDME3WTMunDtjn7Sgm3NP508cz8OgcEcZLwENu8JH5pWR0Y0+qvlPM -DYpCu2Zh6TBLU6Cfuxl2GigHHBhm8Eza/vE6dVbpyvEozejtVKi+RYskqz8ynYtl -r9NpDkEFcqGFLX/X7fajR4JxzxYx0Ms+CHHBlBLw44eMl1Izb9OBgfUK3a7wJ0Z1 -vEmzcVtXZMqKDvqY3wddCcbtpVZhRnAUFgT3/b5ISxQ6xxFg67YQaJ0knuRwOZCI -xSvNsxXb6s5xt8gRx8MY8W1CVW0QSH4gUpKdJFiF/6nYq7h8F1A5QYr34uJn5pa2 -bsagCMhCUHKn/hrtTJ/4bC7n7utulXyEZJDGS38nNe5TBmAxeA+MkOAO7AEb8aDo -RylaKT77tmeZXWBtlQGHj0bt2fPOEW3e0WUeNwk4qnKqSGdwbXGFK+yWxgGOxFDT -4NqUjDV7lhj1r3mKEufLIqP6GxAlewpH1uLA+ty2eNfG793pytlyhNikzmkliXex -WnBUYQM6ZBclW0nALHxxOJWZlnBCESgo9lSHMeB7adJXuwaUmqHx4u+yNzaFS6pr -LemBEUCHfLeGFM9E9YbgNe51q5+vXZYN5MZtqyex4AqPdGEGpwXBk43RK79mP84G -QQRAAcs6KMj1/Sl7pmg9acrxskLWljtsnvdCJ8a+VXjLDyp2wks1z2Gnw7cguZdD -Ah4hjH8LDTsEJxOr2DNJu/V9JDPKd0uGyaW0AOanwAn7tszivGddb/WrzImCIMBa -Lb/cqujvS9YsIK6xrq4LMxR5wE6Hol0qs6xO89Y9OpuuRxAYfRUl4nDTg0WjS5Ga -0aoSXB0kOFkEwb3WGq+b26606RBYDKu7RsJoyWoXq42JZ1jkEYKCNeNS8hWh8GKd ------END RSA PRIVATE KEY----- diff --git a/contrib/libpoco/NetSSL_OpenSSL/samples/HTTPSTimeServer/rootcert.pem b/contrib/libpoco/NetSSL_OpenSSL/samples/HTTPSTimeServer/rootcert.pem deleted file mode 100644 index 3525b24ccd6..00000000000 --- a/contrib/libpoco/NetSSL_OpenSSL/samples/HTTPSTimeServer/rootcert.pem +++ /dev/null @@ -1,25 +0,0 @@ ------BEGIN CERTIFICATE----- -MIIEQTCCAymgAwIBAgIBATALBgkqhkiG9w0BAQUwgdMxEzARBgNVBAMMCmFwcGlu -Zi5jb20xNjA0BgNVBAoMLUFwcGxpZWQgSW5mb3JtYXRpY3MgU29mdHdhcmUgRW5n -aW5lZXJpbmcgR21iSDEUMBIGA1UECwwLRGV2ZWxvcG1lbnQxEjAQBgNVBAgMCUNh -cmludGhpYTELMAkGA1UEBgwCQVQxHjAcBgNVBAcMFVN0LiBKYWtvYiBpbSBSb3Nl -bnRhbDEtMCsGCSqGSIb3DQEJAQweZ3VlbnRlci5vYmlsdHNjaG5pZ0BhcHBpbmYu -Y29tMB4XDTA5MDIyMzEzNDAzNVoXDTExMTEyMDEzNDAzNVowgdMxEzARBgNVBAMM -CmFwcGluZi5jb20xNjA0BgNVBAoMLUFwcGxpZWQgSW5mb3JtYXRpY3MgU29mdHdh -cmUgRW5naW5lZXJpbmcgR21iSDEUMBIGA1UECwwLRGV2ZWxvcG1lbnQxEjAQBgNV -BAgMCUNhcmludGhpYTELMAkGA1UEBgwCQVQxHjAcBgNVBAcMFVN0LiBKYWtvYiBp -bSBSb3NlbnRhbDEtMCsGCSqGSIb3DQEJAQweZ3VlbnRlci5vYmlsdHNjaG5pZ0Bh -cHBpbmYuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAx8mI/DXh -dwvwt/qMD5Mm+1ataiRJzau0ct07kyFv0hTYGJR7sl4ocC+lLqLOgOxeG0IaIKvP -Apqq7KQ1ZJBtpZAAwj8NwMXg8fGYM0JtpkGYmkRGmFolwFWA0FLVmGxAuw2iKN6k -ajl8U4pz5qzYFEKNL5IJMI8rS2Fsek1pgfpZ5dYFChgVW7urxFhAJCXMrHAOLfed -SjXtZpvepXRvBtuvOosXSIjmY9x/3/1QeRvZpza2atWRv4pnKBldtI9BZDUQqS3F -fi/ydXlZVeY3aHW6Cw9DfbnnLv2RegUzjUZCx07IrPulZmqS6rabIIwY/bhX+n7y -YcP4ADkXDKct6QIDAQABoyAwHjAPBgNVHRMBAf8EBTADAQH/MAsGA1UdDwQEAwIC -hDANBgkqhkiG9w0BAQUFAAOCAQEAAfoSQow7qv3C9SiOZ+h3s9reQBJnZUcSQ5AS -90jGmtmcJ1eyWQyGxES0iKYPcF1GbSBkO/kqMzdM/E2GQnbHVrgiPj+9tTxjG/hK -42K2AEACDYtuQWTui4K1BmrWRJvdoiGRrt87DhmOG6UY5wtUAZdgVjhwBGEWJhYp -IgeNe5OEdrBkSBjYb2VnJOJFQA7bB7G4snTjNMY+n5+odISHU3debZLdXvX3gKVG -nVwp91/LnCSCvvZ+nH9xLzNdTbXqhI96bJh/iXLNcwcHOWPYWKuANAs5FR7OSZ+l -57gz8/BTaM4pTyJzER5p0+cTIzLGF7aYLuKKqXiKykjruO3U7A== ------END CERTIFICATE----- diff --git a/contrib/libpoco/NetSSL_OpenSSL/samples/HTTPSTimeServer/src/HTTPSTimeServer.cpp b/contrib/libpoco/NetSSL_OpenSSL/samples/HTTPSTimeServer/src/HTTPSTimeServer.cpp deleted file mode 100644 index e9811cded8f..00000000000 --- a/contrib/libpoco/NetSSL_OpenSSL/samples/HTTPSTimeServer/src/HTTPSTimeServer.cpp +++ /dev/null @@ -1,236 +0,0 @@ -// -// TimeServer.cpp -// -// $Id: //poco/1.4/NetSSL_OpenSSL/samples/HTTPSTimeServer/src/HTTPSTimeServer.cpp#2 $ -// -// This sample demonstrates the HTTPServer and related classes. -// -// Copyright (c) 2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "Poco/Net/HTTPServer.h" -#include "Poco/Net/HTTPRequestHandler.h" -#include "Poco/Net/HTTPRequestHandlerFactory.h" -#include "Poco/Net/HTTPServerParams.h" -#include "Poco/Net/HTTPServerRequestImpl.h" -#include "Poco/Net/HTTPServerResponse.h" -#include "Poco/Net/HTTPServerParams.h" -#include "Poco/Net/SecureStreamSocket.h" -#include "Poco/Net/SecureServerSocket.h" -#include "Poco/Net/X509Certificate.h" -#include "Poco/Timestamp.h" -#include "Poco/DateTimeFormatter.h" -#include "Poco/DateTimeFormat.h" -#include "Poco/Exception.h" -#include "Poco/SharedPtr.h" -#include "Poco/Util/ServerApplication.h" -#include "Poco/Util/Option.h" -#include "Poco/Util/OptionSet.h" -#include "Poco/Util/HelpFormatter.h" -#include "Poco/Net/SSLManager.h" -#include "Poco/Net/KeyConsoleHandler.h" -#include "Poco/Net/AcceptCertificateHandler.h" -#include - - -using Poco::Net::SecureServerSocket; -using Poco::Net::SecureStreamSocket; -using Poco::Net::HTTPRequestHandler; -using Poco::Net::HTTPRequestHandlerFactory; -using Poco::Net::HTTPServer; -using Poco::Net::HTTPServerRequest; -using Poco::Net::HTTPServerRequestImpl; -using Poco::Net::X509Certificate; -using Poco::Net::HTTPServerResponse; -using Poco::Net::HTTPServerParams; -using Poco::Timestamp; -using Poco::DateTimeFormatter; -using Poco::DateTimeFormat; -using Poco::SharedPtr; -using Poco::Util::ServerApplication; -using Poco::Util::Application; -using Poco::Util::Option; -using Poco::Util::OptionSet; -using Poco::Util::HelpFormatter; -using Poco::Net::SSLManager; -using Poco::Net::Context; -using Poco::Net::KeyConsoleHandler; -using Poco::Net::PrivateKeyPassphraseHandler; -using Poco::Net::InvalidCertificateHandler; -using Poco::Net::AcceptCertificateHandler; - - -class TimeRequestHandler: public HTTPRequestHandler - /// Return a HTML document with the current date and time. -{ -public: - TimeRequestHandler(const std::string& format): - _format(format) - { - } - - void handleRequest(HTTPServerRequest& request, HTTPServerResponse& response) - { - Application& app = Application::instance(); - app.logger().information("Request from " + request.clientAddress().toString()); - - SecureStreamSocket socket = static_cast(request).socket(); - if (socket.havePeerCertificate()) - { - X509Certificate cert = socket.peerCertificate(); - app.logger().information("Client certificate: " + cert.subjectName()); - } - else - { - app.logger().information("No client certificate available."); - } - - Timestamp now; - std::string dt(DateTimeFormatter::format(now, _format)); - - response.setChunkedTransferEncoding(true); - response.setContentType("text/html"); - - std::ostream& ostr = response.send(); - ostr << "HTTPTimeServer powered by POCO C++ Libraries"; - ostr << ""; - ostr << "

"; - ostr << dt; - ostr << "

"; - } - -private: - std::string _format; -}; - - -class TimeRequestHandlerFactory: public HTTPRequestHandlerFactory -{ -public: - TimeRequestHandlerFactory(const std::string& format): - _format(format) - { - } - - HTTPRequestHandler* createRequestHandler(const HTTPServerRequest& request) - { - if (request.getURI() == "/") - return new TimeRequestHandler(_format); - else - return 0; - } - -private: - std::string _format; -}; - - -class HTTPSTimeServer: public Poco::Util::ServerApplication - /// The main application class. - /// - /// This class handles command-line arguments and - /// configuration files. - /// Start the HTTPTimeServer executable with the help - /// option (/help on Windows, --help on Unix) for - /// the available command line options. - /// - /// To use the sample configuration file (HTTPTimeServer.properties), - /// copy the file to the directory where the HTTPTimeServer executable - /// resides. If you start the debug version of the HTTPTimeServer - /// (HTTPTimeServerd[.exe]), you must also create a copy of the configuration - /// file named HTTPTimeServerd.properties. In the configuration file, you - /// can specify the port on which the server is listening (default - /// 9443) and the format of the date/time string sent back to the client. - /// - /// To test the TimeServer you can use any web browser (https://localhost:9443/). -{ -public: - HTTPSTimeServer(): _helpRequested(false) - { - Poco::Net::initializeSSL(); - } - - ~HTTPSTimeServer() - { - Poco::Net::uninitializeSSL(); - } - -protected: - void initialize(Application& self) - { - loadConfiguration(); // load default configuration files, if present - ServerApplication::initialize(self); - } - - void uninitialize() - { - ServerApplication::uninitialize(); - } - - void defineOptions(OptionSet& options) - { - ServerApplication::defineOptions(options); - - options.addOption( - Option("help", "h", "display help information on command line arguments") - .required(false) - .repeatable(false)); - } - - void handleOption(const std::string& name, const std::string& value) - { - ServerApplication::handleOption(name, value); - - if (name == "help") - _helpRequested = true; - } - - void displayHelp() - { - HelpFormatter helpFormatter(options()); - helpFormatter.setCommand(commandName()); - helpFormatter.setUsage("OPTIONS"); - helpFormatter.setHeader("A web server that serves the current date and time."); - helpFormatter.format(std::cout); - } - - int main(const std::vector& args) - { - if (_helpRequested) - { - displayHelp(); - } - else - { - // get parameters from configuration file - unsigned short port = (unsigned short) config().getInt("HTTPSTimeServer.port", 9443); - std::string format(config().getString("HTTPSTimeServer.format", DateTimeFormat::SORTABLE_FORMAT)); - - // set-up a server socket - SecureServerSocket svs(port); - // set-up a HTTPServer instance - HTTPServer srv(new TimeRequestHandlerFactory(format), svs, new HTTPServerParams); - // start the HTTPServer - srv.start(); - // wait for CTRL-C or kill - waitForTerminationRequest(); - // Stop the HTTPServer - srv.stop(); - } - return Application::EXIT_OK; - } - -private: - bool _helpRequested; -}; - - -int main(int argc, char** argv) -{ - HTTPSTimeServer app; - return app.run(argc, argv); -} diff --git a/contrib/libpoco/NetSSL_OpenSSL/samples/Mail/CMakeLists.txt b/contrib/libpoco/NetSSL_OpenSSL/samples/Mail/CMakeLists.txt deleted file mode 100644 index 6cf2176ce11..00000000000 --- a/contrib/libpoco/NetSSL_OpenSSL/samples/Mail/CMakeLists.txt +++ /dev/null @@ -1,7 +0,0 @@ -set(SAMPLE_NAME "Mail-ssl") - -set(LOCAL_SRCS "") -aux_source_directory(src LOCAL_SRCS) - -add_executable( ${SAMPLE_NAME} ${LOCAL_SRCS} ) -target_link_libraries( ${SAMPLE_NAME} PocoNetSSL PocoCrypto PocoUtil PocoNet PocoXML PocoFoundation ) diff --git a/contrib/libpoco/NetSSL_OpenSSL/samples/Mail/src/Mail.cpp b/contrib/libpoco/NetSSL_OpenSSL/samples/Mail/src/Mail.cpp deleted file mode 100644 index 8da1de9cf6a..00000000000 --- a/contrib/libpoco/NetSSL_OpenSSL/samples/Mail/src/Mail.cpp +++ /dev/null @@ -1,120 +0,0 @@ -// -// Mail.cpp -// -// $Id: //poco/1.4/NetSSL_OpenSSL/samples/Mail/src/Mail.cpp#1 $ -// -// This sample demonstrates the MailMessage and SecureSMTPClientSession classes. -// -// Copyright (c) 2005-2011, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "Poco/Net/MailMessage.h" -#include "Poco/Net/MailRecipient.h" -#include "Poco/Net/SecureSMTPClientSession.h" -#include "Poco/Net/StringPartSource.h" -#include "Poco/Net/SSLManager.h" -#include "Poco/Net/KeyConsoleHandler.h" -#include "Poco/Net/ConsoleCertificateHandler.h" -#include "Poco/SharedPtr.h" -#include "Poco/Path.h" -#include "Poco/Exception.h" -#include - - -using Poco::Net::MailMessage; -using Poco::Net::MailRecipient; -using Poco::Net::SMTPClientSession; -using Poco::Net::SecureSMTPClientSession; -using Poco::Net::StringPartSource; -using Poco::Net::SSLManager; -using Poco::Net::Context; -using Poco::Net::KeyConsoleHandler; -using Poco::Net::PrivateKeyPassphraseHandler; -using Poco::Net::InvalidCertificateHandler; -using Poco::Net::ConsoleCertificateHandler; -using Poco::SharedPtr; -using Poco::Path; -using Poco::Exception; - - -class SSLInitializer -{ -public: - SSLInitializer() - { - Poco::Net::initializeSSL(); - } - - ~SSLInitializer() - { - Poco::Net::uninitializeSSL(); - } -}; - - -const unsigned char PocoLogo[] = -{ - #include "PocoLogo.hpp" -}; - - -int main(int argc, char** argv) -{ - SSLInitializer sslInitializer; - - if (argc < 4) - { - Path p(argv[0]); - std::cerr << "usage: " << p.getBaseName() << " [ ]" << std::endl; - std::cerr << " Send an email greeting from to ," << std::endl; - std::cerr << " using a secure connection to the SMTP server at ." << std::endl; - return 1; - } - - std::string mailhost(argv[1]); - std::string sender(argv[2]); - std::string recipient(argv[3]); - std::string username(argc >= 5 ? argv[4] : ""); - std::string password(argc >= 6 ? argv[5] : ""); - - try - { - // Note: we must create the passphrase handler prior Context - SharedPtr pCert = new ConsoleCertificateHandler(false); // ask the user via console - Context::Ptr pContext = new Context(Context::CLIENT_USE, "", "", "", Context::VERIFY_RELAXED, 9, true, "ALL:!ADH:!LOW:!EXP:!MD5:@STRENGTH"); - SSLManager::instance().initializeClient(0, pCert, pContext); - - MailMessage message; - message.setSender(sender); - message.addRecipient(MailRecipient(MailRecipient::PRIMARY_RECIPIENT, recipient)); - message.setSubject("Hello from the POCO C++ Libraries"); - std::string content; - content += "Hello "; - content += recipient; - content += ",\r\n\r\n"; - content += "This is a greeting from the POCO C++ Libraries.\r\n\r\n"; - std::string logo(reinterpret_cast(PocoLogo), sizeof(PocoLogo)); - message.addContent(new StringPartSource(content)); - message.addAttachment("logo", new StringPartSource(logo, "image/gif")); - - SecureSMTPClientSession session(mailhost); - session.login(); - session.startTLS(pContext); - if (!username.empty()) - { - session.login(SMTPClientSession::AUTH_LOGIN, username, password); - } - session.sendMessage(message); - session.close(); - } - catch (Exception& exc) - { - std::cerr << exc.displayText() << std::endl; - return 1; - } - return 0; -} diff --git a/contrib/libpoco/NetSSL_OpenSSL/samples/Mail/src/PocoLogo.hpp b/contrib/libpoco/NetSSL_OpenSSL/samples/Mail/src/PocoLogo.hpp deleted file mode 100644 index a1b39a593c8..00000000000 --- a/contrib/libpoco/NetSSL_OpenSSL/samples/Mail/src/PocoLogo.hpp +++ /dev/null @@ -1,134 +0,0 @@ -// The C++ Portable Components logo in GIF format - -0x47, 0x49, 0x46, 0x38, 0x39, 0x61, 0xa0, 0x00, 0x85, 0x00, 0xa2, 0x00, 0x00, 0xd1, 0xdd, 0xe4, -0x45, 0x9b, 0xca, 0x41, 0x55, 0x61, 0x8a, 0x96, 0x9e, 0xa2, 0xbc, 0xcc, 0x00, 0x1b, 0x2c, 0x00, -0x75, 0xb6, 0xff, 0xff, 0xff, 0x21, 0xf9, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, -0x00, 0x00, 0xa0, 0x00, 0x85, 0x00, 0x00, 0x03, 0xff, 0x78, 0xba, 0xdc, 0xfe, 0x30, 0xca, 0x49, -0xab, 0xbd, 0x38, 0xeb, 0xcd, 0xbb, 0xff, 0x60, 0x28, 0x8e, 0x64, 0x69, 0x9e, 0x68, 0xaa, 0xae, -0x6c, 0xeb, 0xbe, 0x70, 0x2c, 0xcf, 0x2b, 0x40, 0xdc, 0x78, 0xae, 0xef, 0x04, 0xe0, 0xda, 0xbc, -0xe0, 0x0e, 0xe0, 0xeb, 0x00, 0x06, 0xc5, 0xc5, 0x6d, 0x72, 0x4b, 0x76, 0x08, 0x01, 0x83, 0x74, -0x4a, 0xad, 0x5a, 0xab, 0x01, 0x27, 0x09, 0x10, 0xbd, 0x7a, 0xbf, 0x86, 0x40, 0x6f, 0x33, 0x28, -0x10, 0x1a, 0x85, 0x82, 0x44, 0x90, 0x2e, 0x68, 0x2f, 0xb6, 0x2e, 0x78, 0x7e, 0x15, 0x8f, 0xe2, -0xf4, 0xbc, 0xd5, 0x8e, 0x29, 0x9f, 0x09, 0x48, 0x07, 0x69, 0x11, 0x65, 0x02, 0x6c, 0x03, 0x1b, -0x72, 0x7a, 0x8b, 0x54, 0x67, 0x1f, 0x8a, 0x8c, 0x8c, 0x59, 0x17, 0x7e, 0x82, 0x66, 0x96, 0x11, -0x69, 0x3e, 0x05, 0x02, 0x19, 0x5c, 0x91, 0xa0, 0x53, 0x8e, 0x1c, 0x90, 0xa1, 0x8b, 0xa3, 0x13, -0x95, 0x69, 0x67, 0x83, 0x0c, 0x36, 0x0a, 0x9a, 0x82, 0x9d, 0x70, 0xa6, 0xb5, 0x93, 0x19, 0x04, -0xb5, 0xb6, 0x15, 0xaa, 0x97, 0xad, 0x0b, 0x6c, 0xac, 0x6e, 0xb2, 0x17, 0xb9, 0xba, 0xb5, 0x6f, -0x12, 0xc6, 0xc7, 0xa6, 0xc9, 0x0c, 0xbd, 0x3d, 0xbf, 0x0a, 0xc1, 0x96, 0x3e, 0x44, 0x16, 0xcb, -0xcc, 0xa0, 0x01, 0xb4, 0xda, 0xa6, 0xdc, 0x12, 0x65, 0x9c, 0x69, 0x86, 0x9c, 0x0d, 0xd4, 0xb1, -0xdd, 0xde, 0xa1, 0xe0, 0x4c, 0xeb, 0xbb, 0xe1, 0x6d, 0x6d, 0x02, 0x5a, 0xe2, 0x6c, 0xb3, 0x17, -0xa5, 0xef, 0x7a, 0xed, 0x11, 0xfb, 0xb5, 0xa8, 0x1e, 0x10, 0x19, 0xe8, 0x8c, 0x0d, 0x27, 0x67, -0x10, 0xb2, 0xfd, 0x63, 0x84, 0xf0, 0x80, 0xc2, 0x85, 0x8b, 0x1a, 0xc2, 0x09, 0x48, 0x01, 0x00, -0xc4, 0x50, 0x14, 0x17, 0x58, 0xbc, 0xb8, 0x0d, 0xff, 0x83, 0x21, 0x11, 0xfa, 0xbc, 0x88, 0x21, -0x48, 0xb2, 0x24, 0x91, 0x1b, 0x21, 0xaf, 0x38, 0x7b, 0xf8, 0xa5, 0x87, 0xc9, 0x97, 0x04, 0xa1, -0x44, 0xbc, 0x20, 0x4d, 0xe3, 0x90, 0x09, 0xfc, 0x3e, 0x7c, 0xa2, 0x93, 0xf1, 0x80, 0x9e, 0x9e, -0x18, 0x36, 0xf2, 0xa4, 0xa9, 0xa6, 0x81, 0x38, 0x79, 0x35, 0x1b, 0x08, 0x05, 0x23, 0xb1, 0x58, -0x9e, 0x07, 0x2c, 0xad, 0x34, 0x75, 0x3a, 0xa7, 0xdf, 0x84, 0x9a, 0xe2, 0x06, 0x68, 0xdd, 0x8a, -0x28, 0x42, 0x54, 0x2a, 0x53, 0xf3, 0x0d, 0x6d, 0x90, 0x72, 0x4a, 0x58, 0xaa, 0x4c, 0x2d, 0xd4, -0x3c, 0x94, 0xa1, 0xac, 0x01, 0xa0, 0x1d, 0xdc, 0x5a, 0xf5, 0x39, 0x07, 0x2e, 0x87, 0xa5, 0x5e, -0xec, 0x2a, 0x00, 0xb0, 0xf6, 0x12, 0x06, 0xb7, 0x67, 0xd5, 0x7d, 0x51, 0x5a, 0x15, 0xc5, 0x57, -0x29, 0x73, 0x01, 0x71, 0x1d, 0x70, 0xef, 0x9c, 0xdf, 0x0b, 0x85, 0x4f, 0xb8, 0x25, 0x0c, 0x66, -0xae, 0x08, 0xbc, 0x7b, 0x1c, 0x1c, 0x45, 0x1a, 0x90, 0x9a, 0xe0, 0x3a, 0x28, 0x00, 0xbb, 0x8a, -0x2c, 0xb9, 0xb2, 0x03, 0x02, 0x86, 0x52, 0x0b, 0x08, 0xe4, 0x58, 0xef, 0x68, 0x30, 0xae, 0x13, -0xcd, 0x71, 0x82, 0xb9, 0x4a, 0x6c, 0xd9, 0x5f, 0x2c, 0x5b, 0xf0, 0x6c, 0xa1, 0x76, 0xa3, 0xd0, -0xb3, 0x5f, 0xb7, 0x4c, 0x51, 0x56, 0x77, 0x85, 0x57, 0x41, 0xeb, 0x02, 0x4f, 0xab, 0x51, 0xf9, -0x72, 0x91, 0x0f, 0xb2, 0xda, 0x0b, 0x0c, 0xc1, 0xb7, 0xa8, 0xe7, 0x5e, 0x28, 0x0f, 0xc7, 0x9e, -0xd9, 0x28, 0x39, 0xa4, 0xf8, 0x34, 0x1a, 0x94, 0x17, 0x5e, 0x7b, 0xde, 0x13, 0xd6, 0xa7, 0x98, -0xbf, 0x72, 0x5b, 0x43, 0x71, 0xcd, 0xbe, 0xcc, 0xf0, 0x2d, 0xcf, 0x17, 0x29, 0xb9, 0x08, 0xe9, -0xdf, 0x96, 0x36, 0x2d, 0xfc, 0x3c, 0x77, 0x2c, 0xff, 0xf0, 0x09, 0x23, 0x8c, 0x63, 0x02, 0xdc, -0x54, 0x9d, 0x73, 0x24, 0xb8, 0xa5, 0x5f, 0x7f, 0xec, 0x11, 0xc7, 0xdf, 0x33, 0xf1, 0x0d, 0xc8, -0x00, 0x6f, 0xc7, 0x21, 0x08, 0xd2, 0x53, 0xeb, 0x59, 0xd1, 0x5e, 0x5b, 0x0f, 0x2e, 0x00, 0x0d, -0x26, 0x13, 0x3e, 0x56, 0x21, 0x6c, 0x97, 0xc9, 0x44, 0xc7, 0x5c, 0xf9, 0x6d, 0xf8, 0x57, 0x87, -0x0a, 0xf8, 0x01, 0x80, 0x21, 0xd1, 0x14, 0x05, 0x8c, 0x88, 0x15, 0x39, 0xc7, 0x45, 0x00, 0x38, -0xe6, 0xa8, 0xe3, 0x8e, 0x3c, 0x46, 0x22, 0x90, 0x85, 0x25, 0xbc, 0xe7, 0x9d, 0x7d, 0x7d, 0xb5, -0x97, 0xa2, 0x02, 0x87, 0xbd, 0x93, 0xd1, 0x91, 0xff, 0x51, 0x31, 0xd7, 0x66, 0xe4, 0x11, 0x98, -0x1c, 0x89, 0x07, 0x28, 0xe8, 0x4d, 0x32, 0x4c, 0xee, 0x07, 0x9d, 0x52, 0x30, 0x35, 0x40, 0xc0, -0x3c, 0xa9, 0x99, 0x73, 0x20, 0x95, 0x56, 0x32, 0xd3, 0x53, 0x96, 0x26, 0x08, 0x79, 0x97, 0x6a, -0xe5, 0x94, 0xc7, 0xa0, 0x86, 0x0a, 0x94, 0xa9, 0x8b, 0x71, 0x68, 0x06, 0xc9, 0xa2, 0x87, 0x6c, -0x7e, 0xa4, 0x93, 0x73, 0x72, 0x9a, 0x02, 0x57, 0x9d, 0x09, 0xde, 0xf9, 0x22, 0x91, 0x32, 0x1a, -0xc1, 0x27, 0x47, 0xc6, 0xed, 0x05, 0x64, 0xa0, 0xb9, 0xc1, 0x47, 0xcf, 0x11, 0x05, 0x20, 0x51, -0x0f, 0x3d, 0xe7, 0x74, 0xf5, 0x23, 0x99, 0x17, 0x25, 0xaa, 0x28, 0x95, 0x5a, 0x82, 0xe6, 0x9d, -0x23, 0x65, 0x58, 0x1a, 0x62, 0x40, 0x49, 0x35, 0x87, 0xe9, 0x3f, 0xb7, 0x4c, 0x00, 0xe8, 0x08, -0x6a, 0x7a, 0xe8, 0x57, 0xa8, 0x0f, 0x50, 0x63, 0xc8, 0x26, 0x6e, 0x9a, 0xba, 0x5d, 0x9f, 0x3f, -0x7d, 0x06, 0x27, 0x0a, 0xa4, 0xb9, 0x0a, 0x6a, 0xa4, 0xb1, 0xc6, 0x47, 0x2b, 0x7e, 0x87, 0xae, -0x93, 0xea, 0x88, 0x8d, 0xa2, 0xd7, 0x6b, 0x8b, 0xff, 0xaf, 0x02, 0xeb, 0x00, 0x3a, 0xc3, 0x88, -0x79, 0xe9, 0x76, 0x37, 0xf2, 0x68, 0xed, 0xb5, 0x62, 0x8c, 0xa1, 0x41, 0x7e, 0x9a, 0x3e, 0xb1, -0xec, 0x01, 0x85, 0xf4, 0x10, 0xea, 0x35, 0xa3, 0x56, 0x43, 0xcc, 0x98, 0xdb, 0xd1, 0x60, 0xeb, -0x60, 0x27, 0x8c, 0xe5, 0x0a, 0xa1, 0xe5, 0x1d, 0x52, 0x9f, 0x0d, 0xd2, 0x3a, 0xb0, 0xea, 0x0c, -0xee, 0x8e, 0x90, 0xa4, 0x01, 0xc9, 0xa0, 0x66, 0x5f, 0x79, 0x50, 0xb6, 0x21, 0x6a, 0x86, 0xb6, -0xa9, 0x4b, 0x56, 0xbe, 0x20, 0xe4, 0x17, 0x86, 0x04, 0x26, 0x9d, 0x96, 0xe7, 0xc0, 0x04, 0xff, -0x66, 0xb0, 0x12, 0x79, 0x50, 0xe7, 0x55, 0x1e, 0x2a, 0xee, 0xc9, 0xe9, 0xc4, 0x74, 0x21, 0xbc, -0xc1, 0xbe, 0x52, 0x38, 0x73, 0x44, 0x9e, 0xb5, 0x7a, 0xb2, 0xa8, 0xba, 0x20, 0x23, 0x86, 0xed, -0xca, 0x38, 0x2e, 0xa2, 0x5b, 0x7d, 0xff, 0xda, 0xcb, 0x18, 0x9b, 0x10, 0xaf, 0xdb, 0x20, 0xc7, -0x0b, 0xe0, 0xca, 0x51, 0x4f, 0x85, 0x48, 0x34, 0x28, 0x91, 0xc4, 0x6e, 0xcc, 0x71, 0xca, 0x1c, -0x21, 0x46, 0x08, 0x8d, 0xd1, 0x71, 0x32, 0x80, 0x62, 0x5a, 0x01, 0x75, 0xaf, 0xba, 0x3a, 0xa3, -0x1a, 0x8f, 0x5e, 0x14, 0xd6, 0x28, 0x34, 0xc7, 0x0a, 0x17, 0xcd, 0xef, 0xd4, 0x14, 0x54, 0xad, -0xea, 0xc9, 0x13, 0x13, 0xbd, 0x90, 0xa6, 0x95, 0x4c, 0xe0, 0x35, 0xc3, 0x60, 0x4f, 0x9c, 0xf5, -0x42, 0x7a, 0x95, 0xbd, 0x06, 0xd2, 0x68, 0x5f, 0x8d, 0xb3, 0x43, 0x5a, 0xef, 0xca, 0x04, 0xa5, -0x66, 0xd7, 0x6b, 0x75, 0xba, 0x73, 0x33, 0x60, 0xa2, 0xd6, 0x7c, 0xe8, 0x4b, 0x0e, 0xcd, 0x41, -0xf3, 0xdd, 0xb7, 0xdf, 0x5a, 0xab, 0x38, 0xf3, 0x9f, 0xe3, 0xcd, 0x53, 0xb8, 0x7f, 0x87, 0xdb, -0x1b, 0x75, 0x1e, 0xc7, 0xee, 0x26, 0x4f, 0xc6, 0xff, 0x11, 0x94, 0x65, 0x31, 0x0d, 0x71, 0xb4, -0x6c, 0x0b, 0x8e, 0xda, 0xe2, 0xa2, 0xf4, 0x3d, 0x38, 0x44, 0x6e, 0xfa, 0x0c, 0x65, 0x37, 0x0e, -0x95, 0x6a, 0xac, 0x9d, 0xee, 0xfa, 0x07, 0xa9, 0x93, 0x03, 0x71, 0xe3, 0xe4, 0x6c, 0xfe, 0xfa, -0xed, 0xe0, 0xfa, 0xc5, 0x46, 0x32, 0xe1, 0xe2, 0xc0, 0x16, 0xee, 0xc0, 0x53, 0xa2, 0x7b, 0xa1, -0xe5, 0x6a, 0xa4, 0x77, 0xf0, 0xc8, 0x27, 0x4d, 0xa9, 0x56, 0x10, 0x54, 0x7d, 0xbc, 0x11, 0x4c, -0x2f, 0x26, 0xfd, 0xf4, 0xd4, 0x6b, 0x65, 0xbb, 0x40, 0xd1, 0x57, 0x4f, 0x7d, 0xe8, 0x1b, 0xfc, -0x0c, 0x5e, 0x6b, 0x68, 0x94, 0x3c, 0x11, 0xed, 0x84, 0x96, 0x6f, 0xfe, 0x7d, 0x1e, 0xd8, 0x40, -0xfe, 0xf9, 0xe5, 0xaf, 0x66, 0xfb, 0xc8, 0x79, 0x82, 0xcf, 0xc0, 0xf3, 0xbd, 0x05, 0xcc, 0xfe, -0xfd, 0x40, 0x77, 0x60, 0x3f, 0xfe, 0xe7, 0xb7, 0x5e, 0xc2, 0xef, 0x48, 0xa2, 0x9f, 0xaa, 0xd6, -0xc7, 0xbf, 0x02, 0x96, 0xaa, 0x22, 0x04, 0x34, 0xe0, 0xf9, 0xf0, 0x16, 0x94, 0x81, 0x24, 0x64, -0x70, 0xe5, 0x80, 0x1b, 0x13, 0x14, 0x48, 0x41, 0xa4, 0x6c, 0x2b, 0x81, 0x15, 0x34, 0x5f, 0xcd, -0x12, 0x42, 0xbb, 0x9a, 0xf9, 0x4b, 0x1e, 0x1b, 0x8c, 0x47, 0x06, 0x33, 0x28, 0xba, 0x11, 0x52, -0xd0, 0x35, 0x30, 0x43, 0xca, 0x06, 0x09, 0xb2, 0x01, 0x0c, 0x9a, 0xf0, 0x7c, 0x7d, 0x78, 0x61, -0x05, 0xc5, 0xe7, 0xaa, 0x47, 0x11, 0xa1, 0x10, 0x26, 0x70, 0xa1, 0x0c, 0xcb, 0x27, 0xbc, 0x1d, -0x52, 0x90, 0x86, 0xb9, 0x23, 0x15, 0xf1, 0x90, 0x64, 0x3d, 0x0d, 0xec, 0xcf, 0x87, 0x30, 0xac, -0xc0, 0x97, 0x90, 0x78, 0x42, 0xae, 0xcd, 0x6f, 0x88, 0xe3, 0x61, 0xa0, 0x12, 0x99, 0xa8, 0xc0, -0xe3, 0x50, 0xb1, 0x82, 0x08, 0x71, 0x1b, 0x2c, 0xff, 0x88, 0x17, 0xae, 0xc6, 0x5c, 0x40, 0x87, -0x57, 0x94, 0x07, 0x2f, 0xc2, 0xa8, 0x40, 0xf1, 0x69, 0xb1, 0x3e, 0xf2, 0x13, 0x20, 0x7c, 0xc8, -0x78, 0x3f, 0x20, 0x1e, 0x20, 0x85, 0x6c, 0xc4, 0xdf, 0x06, 0x7b, 0x77, 0x03, 0x2f, 0xce, 0xc8, -0x11, 0x7a, 0xaa, 0x08, 0xff, 0x0a, 0xe4, 0x12, 0x98, 0xf8, 0xb1, 0x4b, 0x5d, 0xc3, 0xdf, 0x6a, -0xfa, 0xf8, 0xc7, 0x98, 0x30, 0x86, 0x7f, 0x05, 0x21, 0x52, 0x67, 0x74, 0xe7, 0xc6, 0x69, 0xb4, -0xf1, 0x7a, 0x20, 0x58, 0x22, 0xfb, 0x42, 0xd8, 0x43, 0xf6, 0x01, 0x65, 0x66, 0x86, 0xf0, 0x9f, -0x23, 0x1d, 0x71, 0x40, 0xa5, 0x3c, 0xd2, 0x60, 0x3a, 0x94, 0xa2, 0x07, 0x3e, 0xa8, 0x41, 0x0f, -0xdc, 0x83, 0x08, 0xb3, 0x22, 0xd7, 0x03, 0x17, 0xa8, 0x36, 0xf6, 0x89, 0x12, 0x04, 0x2e, 0xa4, -0xa1, 0x2a, 0xa1, 0x02, 0x2f, 0x11, 0xb6, 0x0f, 0x6b, 0x96, 0x34, 0x81, 0x24, 0xcb, 0xd7, 0x2f, -0x81, 0x29, 0x83, 0x7c, 0x34, 0x3c, 0x62, 0x1a, 0x28, 0xe9, 0x82, 0x5d, 0x12, 0xa9, 0x91, 0x2d, -0x3c, 0x1f, 0x45, 0xea, 0x63, 0x10, 0x62, 0x66, 0xc0, 0x85, 0x90, 0x14, 0x81, 0x31, 0xed, 0xe3, -0x4c, 0x0e, 0x08, 0xd3, 0x59, 0x10, 0x42, 0x04, 0x1a, 0x47, 0x00, 0x4d, 0x8e, 0x5d, 0xb3, 0x9a, -0xdd, 0xeb, 0x5f, 0x80, 0x1c, 0xf9, 0x4b, 0xc2, 0x45, 0xc0, 0x85, 0x38, 0xfb, 0x66, 0x0a, 0x58, -0xf9, 0x29, 0x72, 0x0a, 0x64, 0x7d, 0x34, 0xc4, 0x20, 0x32, 0x57, 0xa0, 0x4e, 0x14, 0xb0, 0x13, -0x42, 0x78, 0x1c, 0xa2, 0x23, 0x0b, 0x54, 0x92, 0xb7, 0xdd, 0xd2, 0x9b, 0xe2, 0xb4, 0xa7, 0xf9, -0xdc, 0x04, 0xab, 0x03, 0xe4, 0x51, 0x7e, 0x5f, 0x1c, 0x68, 0x3a, 0x03, 0x7a, 0x82, 0x7b, 0x2a, -0x61, 0x98, 0xd2, 0x43, 0xa8, 0xe5, 0xfe, 0x39, 0xff, 0xb1, 0x7a, 0x36, 0x54, 0xa1, 0x6b, 0xb4, -0x8f, 0x44, 0x2b, 0x20, 0xcf, 0x85, 0x96, 0x52, 0xa0, 0x14, 0x55, 0x8a, 0xf4, 0x16, 0xb9, 0xa1, -0x8e, 0x02, 0xf4, 0xa3, 0x26, 0x80, 0x63, 0xcc, 0x38, 0x60, 0xc7, 0x89, 0xd6, 0xf2, 0xa4, 0xe5, -0x03, 0xe7, 0xb6, 0x1c, 0x5a, 0x42, 0x4e, 0xb0, 0xc9, 0x9f, 0x2f, 0xad, 0x28, 0x43, 0x4b, 0xa0, -0xd2, 0xef, 0xdd, 0x25, 0xa7, 0xc1, 0x0a, 0xa9, 0xba, 0x2c, 0xca, 0x53, 0x9a, 0x7a, 0xe4, 0x20, -0xfd, 0x3c, 0x27, 0x46, 0x75, 0x8a, 0xd2, 0xa2, 0x2e, 0x55, 0x03, 0x67, 0xc3, 0xe9, 0x31, 0x3d, -0x1a, 0x53, 0x14, 0xf4, 0x34, 0x4a, 0x2c, 0x95, 0xa0, 0x52, 0x85, 0x4a, 0x03, 0xa2, 0x6e, 0xc1, -0xa8, 0x46, 0xd9, 0xe0, 0x3d, 0x46, 0x2a, 0xd5, 0x95, 0x32, 0xb5, 0xaa, 0xe8, 0x01, 0xeb, 0x13, -0xab, 0xc3, 0xc3, 0xad, 0x02, 0x75, 0xa8, 0x3b, 0xfd, 0xea, 0x53, 0x95, 0xb2, 0xc4, 0x26, 0xd8, -0x8b, 0x64, 0xf1, 0x9c, 0x6b, 0x57, 0xe3, 0x7a, 0x07, 0xb5, 0x1a, 0x54, 0x85, 0x21, 0x30, 0xe9, -0x59, 0x09, 0x25, 0x53, 0x4f, 0xf8, 0xf5, 0x90, 0x91, 0xd2, 0x64, 0x56, 0xb9, 0x8a, 0x3a, 0xbe, -0x5e, 0xc6, 0xaf, 0x5b, 0xc4, 0x0f, 0x26, 0x07, 0x99, 0x37, 0xf3, 0x51, 0x95, 0xb0, 0x86, 0x81, -0x2c, 0xb8, 0x36, 0x38, 0xcd, 0x55, 0x94, 0xd5, 0x3e, 0xd1, 0x0c, 0x81, 0x57, 0x47, 0x30, 0xda, -0x84, 0xe2, 0x0d, 0x52, 0x79, 0x35, 0x5f, 0x68, 0x23, 0xa9, 0xd9, 0x0e, 0xb8, 0x90, 0x98, 0xb3, -0x2c, 0xde, 0x5e, 0xd4, 0x58, 0xda, 0x18, 0x74, 0x16, 0xab, 0x4e, 0x55, 0x6d, 0xde, 0x9a, 0x47, -0x23, 0xda, 0xb2, 0x6f, 0xb5, 0xe9, 0xfb, 0xad, 0x09, 0xae, 0xa9, 0x4f, 0x57, 0xec, 0x2e, 0x58, -0xa4, 0xa2, 0xe1, 0x6d, 0xc9, 0x03, 0xdc, 0x0e, 0xff, 0xb8, 0xb2, 0xb9, 0x0e, 0x71, 0x65, 0x59, -0x49, 0xfa, 0x2e, 0x59, 0xe2, 0x0f, 0xba, 0x46, 0xbc, 0x1f, 0x70, 0x89, 0xab, 0xd5, 0xbf, 0x0e, -0x6e, 0x91, 0x7c, 0xac, 0x23, 0x36, 0x79, 0x7b, 0xbf, 0xc2, 0x96, 0x60, 0xb9, 0xe4, 0xc1, 0x9c, -0x46, 0xb8, 0x3b, 0x8c, 0xab, 0x14, 0xf7, 0xaa, 0x76, 0x41, 0x2f, 0x35, 0xb5, 0x47, 0x5f, 0xfa, -0x4a, 0x04, 0x8c, 0x4a, 0xab, 0x2f, 0xf5, 0xf0, 0xab, 0x46, 0x60, 0x88, 0xef, 0x45, 0xe6, 0x4c, -0x45, 0x1c, 0xdb, 0xa8, 0xaa, 0x01, 0x17, 0x10, 0xbb, 0xcf, 0x34, 0xb0, 0x5e, 0x9f, 0xa5, 0xe0, -0x49, 0x86, 0xad, 0xc1, 0x6f, 0xa5, 0x25, 0x84, 0x23, 0xec, 0x37, 0x4d, 0x1e, 0xd4, 0x21, 0x16, -0x06, 0x27, 0x7f, 0xaf, 0xd8, 0x48, 0xf6, 0xb2, 0xb1, 0x21, 0x5a, 0x04, 0xd1, 0x1d, 0xd1, 0x50, -0xdc, 0xa0, 0x4e, 0x18, 0x7d, 0x81, 0x3c, 0xb1, 0x2f, 0x9d, 0xb8, 0x80, 0x22, 0x85, 0x2f, 0x86, -0x2a, 0x9e, 0xa7, 0x87, 0x99, 0xd8, 0xb6, 0xde, 0x12, 0xcf, 0x79, 0xf3, 0x74, 0xe4, 0x89, 0x73, -0xbc, 0xe1, 0x1d, 0xba, 0x26, 0xc4, 0x2e, 0x9e, 0x5f, 0x8e, 0x99, 0x35, 0xe1, 0x21, 0xcf, 0xf8, -0x85, 0xb1, 0x01, 0xf2, 0x8d, 0x7b, 0x3b, 0xe4, 0xbd, 0xf4, 0xd8, 0x84, 0x4d, 0xf6, 0x1e, 0x19, -0x0b, 0x4b, 0x47, 0x7f, 0xc5, 0x8b, 0x13, 0x39, 0x00, 0xe0, 0x05, 0x15, 0xdc, 0x64, 0x27, 0x87, -0x51, 0xb1, 0x05, 0x26, 0xd2, 0xc0, 0xe0, 0xab, 0x13, 0xc4, 0x4e, 0x79, 0x94, 0x66, 0x86, 0x32, -0x98, 0x8f, 0xd3, 0xb8, 0x02, 0xbd, 0x33, 0xbd, 0x77, 0x00, 0x82, 0x10, 0xe6, 0x4c, 0x67, 0xe0, -0x9e, 0x84, 0xce, 0x42, 0x70, 0x60, 0xf2, 0xf6, 0xcc, 0xe7, 0x3e, 0xfb, 0xf9, 0xcf, 0x80, 0x0e, -0xb4, 0xa0, 0x07, 0x4d, 0xe8, 0x42, 0x97, 0x20, 0x01, 0x01, 0x00, 0x3b diff --git a/contrib/libpoco/NetSSL_OpenSSL/samples/TwitterClient/CMakeLists.txt b/contrib/libpoco/NetSSL_OpenSSL/samples/TwitterClient/CMakeLists.txt deleted file mode 100644 index 66907c034ce..00000000000 --- a/contrib/libpoco/NetSSL_OpenSSL/samples/TwitterClient/CMakeLists.txt +++ /dev/null @@ -1,7 +0,0 @@ -set(SAMPLE_NAME "TwitterCLient") - -set(LOCAL_SRCS "") -aux_source_directory(src LOCAL_SRCS) - -add_executable( ${SAMPLE_NAME} ${LOCAL_SRCS} ) -target_link_libraries( ${SAMPLE_NAME} PocoNetSSL PocoCrypto PocoNet PocoUtil PocoJSON PocoXML PocoFoundation ) diff --git a/contrib/libpoco/NetSSL_OpenSSL/samples/TwitterClient/src/TweetApp.cpp b/contrib/libpoco/NetSSL_OpenSSL/samples/TwitterClient/src/TweetApp.cpp deleted file mode 100644 index f67c880959e..00000000000 --- a/contrib/libpoco/NetSSL_OpenSSL/samples/TwitterClient/src/TweetApp.cpp +++ /dev/null @@ -1,155 +0,0 @@ -// -// TwitterApp.cpp -// -// $Id: //poco/1.4/Net/samples/TwitterClient/src/TweetApp.cpp#2 $ -// -// A very simple command-line Twitter client. -// -// Copyright (c) 2009-2013, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "Poco/Util/Application.h" -#include "Poco/Util/Option.h" -#include "Poco/Util/OptionSet.h" -#include "Poco/Util/HelpFormatter.h" -#include "Twitter.h" -#include - - -using Poco::Util::Application; -using Poco::Util::Option; -using Poco::Util::OptionSet; -using Poco::Util::HelpFormatter; -using Poco::Util::AbstractConfiguration; -using Poco::Util::OptionCallback; - - -class TweetApp: public Application - /// A very simple Twitter command-line client. -{ -public: - TweetApp() - { - } - -protected: - void defineOptions(OptionSet& options) - { - Application::defineOptions(options); - - options.addOption( - Option("help", "h", "Display help information on command line arguments.") - .required(false) - .repeatable(false) - .callback(OptionCallback(this, &TweetApp::handleHelp))); - - options.addOption( - Option("message", "m", "Specify the status message to post.") - .required(true) - .repeatable(false) - .argument("message") - .callback(OptionCallback(this, &TweetApp::handleMessage))); - - options.addOption( - Option("ckey", "c", "Specify the Twitter consumer key.") - .required(true) - .repeatable(false) - .argument("consumer key") - .callback(OptionCallback(this, &TweetApp::handleConsumerKey))); - - options.addOption( - Option("csecret", "s", "Specify the Twitter consumer secret.") - .required(true) - .repeatable(false) - .argument("consumer secret") - .callback(OptionCallback(this, &TweetApp::handleConsumerSecret))); - - options.addOption( - Option("token", "t", "Specify the Twitter access token.") - .required(true) - .repeatable(true) - .argument("access token") - .callback(OptionCallback(this, &TweetApp::handleAccessToken))); - - options.addOption( - Option("tsecret", "S", "Specify the Twitter access token secret.") - .required(true) - .repeatable(true) - .argument("access token secret") - .callback(OptionCallback(this, &TweetApp::handleAccessTokenSecret))); - } - - void handleHelp(const std::string& name, const std::string& value) - { - displayHelp(); - stopOptionsProcessing(); - } - - void handleConsumerKey(const std::string& name, const std::string& value) - { - _consumerKey = value; - } - - void handleConsumerSecret(const std::string& name, const std::string& value) - { - _consumerSecret = value; - } - - void handleAccessToken(const std::string& name, const std::string& value) - { - _accessToken = value; - } - - void handleAccessTokenSecret(const std::string& name, const std::string& value) - { - _accessTokenSecret = value; - } - - void handleMessage(const std::string& name, const std::string& value) - { - _message = value; - } - - void displayHelp() - { - HelpFormatter helpFormatter(options()); - helpFormatter.setCommand(commandName()); - helpFormatter.setUsage("OPTIONS"); - helpFormatter.setHeader("A simple Twitter command line client for posting status updates."); - helpFormatter.format(std::cout); - } - - int main(const std::vector& args) - { - try - { - if (!_message.empty()) - { - Twitter twitter; - twitter.login(_consumerKey, _consumerSecret, _accessToken, _accessTokenSecret); - Poco::Int64 statusId = twitter.update(_message); - std::cout << statusId << std::endl; - } - } - catch (Poco::Exception& exc) - { - std::cerr << exc.displayText() << std::endl; - return Application::EXIT_SOFTWARE; - } - return Application::EXIT_OK; - } - -private: - std::string _consumerKey; - std::string _consumerSecret; - std::string _accessToken; - std::string _accessTokenSecret; - std::string _message; -}; - - -POCO_APP_MAIN(TweetApp) diff --git a/contrib/libpoco/NetSSL_OpenSSL/samples/TwitterClient/src/Twitter.cpp b/contrib/libpoco/NetSSL_OpenSSL/samples/TwitterClient/src/Twitter.cpp deleted file mode 100644 index 362ec6fc6fb..00000000000 --- a/contrib/libpoco/NetSSL_OpenSSL/samples/TwitterClient/src/Twitter.cpp +++ /dev/null @@ -1,98 +0,0 @@ -// -// Twitter.cpp -// -// $Id: //poco/1.4/Net/samples/TwitterClient/src/Twitter.cpp#2 $ -// -// A C++ implementation of a Twitter client based on the POCO Net library. -// -// Copyright (c) 2009-2013, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "Twitter.h" -#include "Poco/Net/HTTPSClientSession.h" -#include "Poco/Net/HTTPRequest.h" -#include "Poco/Net/HTTPResponse.h" -#include "Poco/Net/OAuth10Credentials.h" -#include "Poco/Util/JSONConfiguration.h" -#include "Poco/URI.h" -#include "Poco/Format.h" -#include "Poco/StreamCopier.h" - - -const std::string Twitter::TWITTER_URI("https://api.twitter.com/1.1/statuses/"); - - -Twitter::Twitter(): - _uri(TWITTER_URI) -{ -} - - -Twitter::Twitter(const std::string& twitterURI): - _uri(twitterURI) -{ -} - - -Twitter::~Twitter() -{ -} - - -void Twitter::login(const std::string& consumerKey, const std::string& consumerSecret, const std::string& token, const std::string& tokenSecret) -{ - _consumerKey = consumerKey; - _consumerSecret = consumerSecret; - _token = token; - _tokenSecret = tokenSecret; -} - - -Poco::Int64 Twitter::update(const std::string& status) -{ - Poco::Net::HTMLForm form; - form.set("status", status); - Poco::AutoPtr pResult = invoke(Poco::Net::HTTPRequest::HTTP_POST, "update", form); - return pResult->getInt64("id", 0); -} - - -Poco::AutoPtr Twitter::invoke(const std::string& httpMethod, const std::string& twitterMethod, Poco::Net::HTMLForm& form) -{ - // Create the request URI. - // We use the JSON version of the Twitter API. - Poco::URI uri(_uri + twitterMethod + ".json"); - - Poco::Net::HTTPSClientSession session(uri.getHost(), uri.getPort()); - Poco::Net::HTTPRequest req(httpMethod, uri.getPath(), Poco::Net::HTTPMessage::HTTP_1_1); - - // Sign request - Poco::Net::OAuth10Credentials creds(_consumerKey, _consumerSecret, _token, _tokenSecret); - creds.authenticate(req, uri, form); - - // Send the request. - form.prepareSubmit(req); - std::ostream& ostr = session.sendRequest(req); - form.write(ostr); - - // Receive the response. - Poco::Net::HTTPResponse res; - std::istream& rs = session.receiveResponse(res); - - Poco::AutoPtr pResult = new Poco::Util::JSONConfiguration(rs); - - // If everything went fine, return the JSON document. - // Otherwise throw an exception. - if (res.getStatus() == Poco::Net::HTTPResponse::HTTP_OK) - { - return pResult; - } - else - { - throw Poco::ApplicationException("Twitter Error", pResult->getString("errors[0].message", "")); - } -} diff --git a/contrib/libpoco/NetSSL_OpenSSL/samples/TwitterClient/src/Twitter.h b/contrib/libpoco/NetSSL_OpenSSL/samples/TwitterClient/src/Twitter.h deleted file mode 100644 index 0124f41c8f7..00000000000 --- a/contrib/libpoco/NetSSL_OpenSSL/samples/TwitterClient/src/Twitter.h +++ /dev/null @@ -1,73 +0,0 @@ -// -// Twitter.h -// -// $Id: //poco/1.4/Net/samples/TwitterClient/src/Twitter.h#2 $ -// -// A C++ implementation of a Twitter client based on the POCO Net library. -// -// Copyright (c) 2009-2013, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Twitter_INCLUDED -#define Twitter_INCLUDED - - -#include "Poco/Poco.h" -#include "Poco/Net/HTMLForm.h" -#include "Poco/Util/AbstractConfiguration.h" -#include "Poco/AutoPtr.h" - - -class Twitter - /// A simple implementation of a Twitter API client - /// (see for more information). - /// - /// Currently, only the update message is supported. -{ -public: - Twitter(); - /// Creates the Twitter object, using - /// the default Twitter API URI (). - - Twitter(const std::string& twitterURI); - /// Creates the Twitter object using the given Twitter API URI. - - ~Twitter(); - /// Destroys the Twitter object. - - void login(const std::string& consumerKey, const std::string& consumerSecret, const std::string& token, const std::string& tokenSecret); - /// Specifies the OAuth authentication information used in all API calls. - - Poco::Int64 update(const std::string& status); - /// Updates the user's status. - /// - /// Returns the ID of the newly created status. - - Poco::AutoPtr invoke(const std::string& httpMethod, const std::string& twitterMethod, Poco::Net::HTMLForm& params); - /// Invokes the given method of the Twitter API, using the parameters - /// given in the Poco::Net::HTMLForm object. httpMethod must be GET or POST, - /// according to the Twitter API documentation. - /// - /// Returns a Poco::Util::JSONConfiguration with the server's response if the - /// server's HTTP response status code is 200 (OK). - /// Otherwise, throws a Poco::ApplicationException. - - static const std::string TWITTER_URI; - -private: - Twitter(const Twitter&); - Twitter& operator = (const Twitter&); - - std::string _uri; - std::string _consumerKey; - std::string _consumerSecret; - std::string _token; - std::string _tokenSecret; -}; - - -#endif // Twitter_INCLUDED diff --git a/contrib/libpoco/NetSSL_OpenSSL/samples/download/CMakeLists.txt b/contrib/libpoco/NetSSL_OpenSSL/samples/download/CMakeLists.txt deleted file mode 100644 index 47ad799ef07..00000000000 --- a/contrib/libpoco/NetSSL_OpenSSL/samples/download/CMakeLists.txt +++ /dev/null @@ -1,7 +0,0 @@ -set(SAMPLE_NAME "download-ssl") - -set(LOCAL_SRCS "") -aux_source_directory(src LOCAL_SRCS) - -add_executable( ${SAMPLE_NAME} ${LOCAL_SRCS} ) -target_link_libraries( ${SAMPLE_NAME} PocoNetSSL PocoCrypto PocoUtil PocoNet PocoXML PocoFoundation ) diff --git a/contrib/libpoco/NetSSL_OpenSSL/samples/download/rootcert.pem b/contrib/libpoco/NetSSL_OpenSSL/samples/download/rootcert.pem deleted file mode 100644 index 71470bafc4e..00000000000 --- a/contrib/libpoco/NetSSL_OpenSSL/samples/download/rootcert.pem +++ /dev/null @@ -1,3971 +0,0 @@ ------BEGIN CERTIFICATE----- -MIIG0zCCBbugAwIBAgIBADANBgkqhkiG9w0BAQUFADCBzDELMAkGA1UEBhMCQVQx -EDAOBgNVBAgTB0F1c3RyaWExDzANBgNVBAcTBlZpZW5uYTE6MDgGA1UEChMxQVJH -RSBEQVRFTiAtIEF1c3RyaWFuIFNvY2lldHkgZm9yIERhdGEgUHJvdGVjdGlvbjEl -MCMGA1UECxMcQS1DRVJUIENlcnRpZmljYXRpb24gU2VydmljZTEYMBYGA1UEAxMP -QS1DRVJUIEFEVkFOQ0VEMR0wGwYJKoZIhvcNAQkBFg5pbmZvQGEtY2VydC5hdDAe -Fw0wNDEwMjMxNDE0MTRaFw0xMTEwMjMxNDE0MTRaMIHMMQswCQYDVQQGEwJBVDEQ -MA4GA1UECBMHQXVzdHJpYTEPMA0GA1UEBxMGVmllbm5hMTowOAYDVQQKEzFBUkdF -IERBVEVOIC0gQXVzdHJpYW4gU29jaWV0eSBmb3IgRGF0YSBQcm90ZWN0aW9uMSUw -IwYDVQQLExxBLUNFUlQgQ2VydGlmaWNhdGlvbiBTZXJ2aWNlMRgwFgYDVQQDEw9B -LUNFUlQgQURWQU5DRUQxHTAbBgkqhkiG9w0BCQEWDmluZm9AYS1jZXJ0LmF0MIIB -IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA3euXIy+mnf6BYKbK+QH5k679 -tUFqeT8jlZxMew8eNiHuw9KoxWBzL6KksK+5uK7Gatw+sbAYntEGE80P+Jg1hADM -e+Fr5V0bc6QS3gkVtfUCW/RIvfMM39oxvmqJmOgPnJU7H6+nmLtsq61tv9kVJi/2 -4Y5wXW3odet72sF57EoG6s78w0BUVLNcMngS9bZZzmdG3/d6JbkGgoNF/8DcgCBJ -W/t0JrcIzyppXIOVtUzzOrrU86zuUgT3Rtkl5kjG7DEHpFb9H0fTOY1v8+gRoaO6 -2gA0PCiysgVZjwgVeYe3KAg11nznyleDv198uK3Dc1oXIGYjJx2FpKWUvAuAEwID -AQABo4ICvDCCArgwHQYDVR0OBBYEFDd/Pj6ZcWDKJNSRE3nQdCm0qCTYMIH5BgNV -HSMEgfEwge6AFDd/Pj6ZcWDKJNSRE3nQdCm0qCTYoYHSpIHPMIHMMQswCQYDVQQG -EwJBVDEQMA4GA1UECBMHQXVzdHJpYTEPMA0GA1UEBxMGVmllbm5hMTowOAYDVQQK -EzFBUkdFIERBVEVOIC0gQXVzdHJpYW4gU29jaWV0eSBmb3IgRGF0YSBQcm90ZWN0 -aW9uMSUwIwYDVQQLExxBLUNFUlQgQ2VydGlmaWNhdGlvbiBTZXJ2aWNlMRgwFgYD -VQQDEw9BLUNFUlQgQURWQU5DRUQxHTAbBgkqhkiG9w0BCQEWDmluZm9AYS1jZXJ0 -LmF0ggEAMA8GA1UdEwEB/wQFMAMBAf8wCwYDVR0PBAQDAgHmMEcGA1UdJQRAMD4G -CCsGAQUFBwMBBggrBgEFBQcDAgYIKwYBBQUHAwMGCCsGAQUFBwMEBggrBgEFBQcD -CAYKKwYBBAGCNwoDBDARBglghkgBhvhCAQEEBAMCAP8wUQYDVR0gBEowSDBGBggq -KAAYAQEBAzA6MDgGCCsGAQUFBwIBFixodHRwOi8vd3d3LmEtY2VydC5hdC9jZXJ0 -aWZpY2F0ZS1wb2xpY3kuaHRtbDA7BglghkgBhvhCAQgELhYsaHR0cDovL3d3dy5h -LWNlcnQuYXQvY2VydGlmaWNhdGUtcG9saWN5Lmh0bWwwGQYDVR0RBBIwEIEOaW5m -b0BhLWNlcnQuYXQwLwYDVR0SBCgwJoEOaW5mb0BhLWNlcnQuYXSGFGh0dHA6Ly93 -d3cuYS1jZXJ0LmF0MEUGA1UdHwQ+MDwwOqA4oDaGNGh0dHBzOi8vc2VjdXJlLmEt -Y2VydC5hdC9jZ2ktYmluL2EtY2VydC1hZHZhbmNlZC5jZ2kwDQYJKoZIhvcNAQEF -BQADggEBACX1IvgfdG2rvfv35O48vSEvcVaEdlN8USFBHWz3JRAozgzvaBtwHkjK -Zwt5l/BWOtjbvHfRjDt7ijlBEcxOOrNC1ffyMHwHrXpvff6YpQ5wnxmIYEQcURiG -HMqruEX0WkuDNgSKwefsgXs27eeBauHgNGVcTYH1rmHu/ZyLpLxOyJQ2PCzA1DzW -3rWkIX92ogJ7lTRdWrbxwUL1XGinxnnaQ74+/y0pI9JNEv7ic2tpkweRMpkedaLW -msC1+orfKTebsg69aMaCx7o6jNONRmR/7TVaPf8/k6g52cHZ9YWjQvup22b5rWxG -J5r5LZ4vCPmF4+T4lutjUYAa/lGuQTg= ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIDXTCCAkWgAwIBAgIDAOJCMA0GCSqGSIb3DQEBBQUAMFUxCzAJBgNVBAYTAkFU -MRAwDgYDVQQKEwdBLVRydXN0MRkwFwYDVQQLExBBLVRydXN0LW5RdWFsLTAxMRkw -FwYDVQQDExBBLVRydXN0LW5RdWFsLTAxMB4XDTA0MTEzMDIzMDAwMFoXDTE0MTEz -MDIzMDAwMFowVTELMAkGA1UEBhMCQVQxEDAOBgNVBAoTB0EtVHJ1c3QxGTAXBgNV -BAsTEEEtVHJ1c3QtblF1YWwtMDExGTAXBgNVBAMTEEEtVHJ1c3QtblF1YWwtMDEw -ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQD/9RyAEZ6eHmhYzNJ328f0 -jmdSUFi6EqRqOxb3jHNPTIpK82CR6z5lmSnZQNUuCPD+htbNZffd2DKVB06NOyZ1 -2zcOMCgj4GtkZoqE0zPpPT3bpoE55nkZZe/qWEX/64wz/L/4EdkvKDSKG/UsP75M -tmCVY5m2Eg73RVFRz4ccBIMpHel4lzEqSkdDtZOY5fnkrE333hx67nxq21vY8Eyf -8O4fPQ5RtN8eohQCcPQ1z6ypU1R7N9jPRpnI+yzMOiwd3+QcKhHi1miCzo0pkOaB -1CwmfsTyNl8qU0NJUL9Ta6cea7WThwTiWol2yD88cd2cy388xpbNkfrCPmZNGLoV -AgMBAAGjNjA0MA8GA1UdEwEB/wQFMAMBAf8wEQYDVR0OBAoECE5ZzscCMocwMA4G -A1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOCAQEA69I9R1hU9Gbl9vV7W7AH -QpUJAlFAvv2It/eY8p2ouQUPVaSZikaKtAYrCD/arzfXB43Qet+dM6CpHsn8ikYR -vQKePjXv3Evf+C1bxwJAimcnZV6W+bNOTpdo8lXljxkmfN+Z5S+XzvK2ttUtP4Et -YOVaxHw2mPMNbvDeY+foJkiBn3KYjGabMaR8moZqof5ofj4iS/WyamTZti6v/fKx -n1vII+/uWkcxV5DT5+r9HLon0NYF0Vg317Wh+gWDV59VZo+dcwJDb+keYqMFYoqp -77SGkZGu41S8NGYkQY3X9rNHRkDbLfpKYDmy6NanpOE1EHW1/sNSFAs43qZZKJEQ -xg== ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIDzzCCAregAwIBAgIDAWweMA0GCSqGSIb3DQEBBQUAMIGNMQswCQYDVQQGEwJB -VDFIMEYGA1UECgw/QS1UcnVzdCBHZXMuIGYuIFNpY2hlcmhlaXRzc3lzdGVtZSBp -bSBlbGVrdHIuIERhdGVudmVya2VociBHbWJIMRkwFwYDVQQLDBBBLVRydXN0LW5R -dWFsLTAzMRkwFwYDVQQDDBBBLVRydXN0LW5RdWFsLTAzMB4XDTA1MDgxNzIyMDAw -MFoXDTE1MDgxNzIyMDAwMFowgY0xCzAJBgNVBAYTAkFUMUgwRgYDVQQKDD9BLVRy -dXN0IEdlcy4gZi4gU2ljaGVyaGVpdHNzeXN0ZW1lIGltIGVsZWt0ci4gRGF0ZW52 -ZXJrZWhyIEdtYkgxGTAXBgNVBAsMEEEtVHJ1c3QtblF1YWwtMDMxGTAXBgNVBAMM -EEEtVHJ1c3QtblF1YWwtMDMwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB -AQCtPWFuA/OQO8BBC4SAzewqo51ru27CQoT3URThoKgtUaNR8t4j8DRE/5TrzAUj -lUC5B3ilJfYKvUWG6Nm9wASOhURh73+nyfrBJcyFLGM/BWBzSQXgYHiVEEvc+RFZ -znF/QJuKqiTfC0Li21a8StKlDJu3Qz7dg9MmEALP6iPESU7l0+m0iKsMrmKS1GWH -2WrX9IWf5DMiJaXlyDO6w8dB3F/GaswADm0yqLaHNgBid5seHzTLkDx4iHQF63n1 -k3Flyp3HaxgtPVxO59X4PzF9j4fsCiIvI+n+u33J4PTs63zEsMMtYrWacdaxaujs -2e3Vcuy+VwHOBVWf3tFgiBCzAgMBAAGjNjA0MA8GA1UdEwEB/wQFMAMBAf8wEQYD -VR0OBAoECERqlWdVeRFPMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOC -AQEAVdRU0VlIXLOThaq/Yy/kgM40ozRiPvbY7meIMQQDbwvUB/tOdQ/TLtPAF8fG -KOwGDREkDg6lXb+MshOWcdzUzg4NCmgybLlBMRmrsQd7TZjTXLDR8KdCoLXEjq/+ -8T/0709GAHbrAvv5ndJAlseIOrifEXnzgGWovR/TeIGgUUw3tKZdJXDRZslo+S4R -FGjxVJgIrCaSD96JntT6s3kr0qN51OyLrIdTaEJMUVF0HhsnLuP1Hyl0Te2v9+GS -mYHovjrHF1D2t8b8m7CKa9aIA5GPBnc6hQLdmNVDeD/GMBWsm2vLV7eJUYs66MmE -DNuxUCAKGkq6ahq97BvIxYSazQ== ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIEUzCCAzugAwIBAgIDAOJDMA0GCSqGSIb3DQEBBQUAMIHPMQswCQYDVQQGEwJB -VDGBizCBiAYDVQQKHoGAAEEALQBUAHIAdQBzAHQAIABHAGUAcwAuACAAZgD8AHIA -IABTAGkAYwBoAGUAcgBoAGUAaQB0AHMAcwB5AHMAdABlAG0AZQAgAGkAbQAgAGUA -bABlAGsAdAByAC4AIABEAGEAdABlAG4AdgBlAHIAawBlAGgAcgAgAEcAbQBiAEgx -GDAWBgNVBAsTD0EtVHJ1c3QtUXVhbC0wMTEYMBYGA1UEAxMPQS1UcnVzdC1RdWFs -LTAxMB4XDTA0MTEzMDIzMDAwMFoXDTE0MTEzMDIzMDAwMFowgc8xCzAJBgNVBAYT -AkFUMYGLMIGIBgNVBAoegYAAQQAtAFQAcgB1AHMAdAAgAEcAZQBzAC4AIABmAPwA -cgAgAFMAaQBjAGgAZQByAGgAZQBpAHQAcwBzAHkAcwB0AGUAbQBlACAAaQBtACAA -ZQBsAGUAawB0AHIALgAgAEQAYQB0AGUAbgB2AGUAcgBrAGUAaAByACAARwBtAGIA -SDEYMBYGA1UECxMPQS1UcnVzdC1RdWFsLTAxMRgwFgYDVQQDEw9BLVRydXN0LVF1 -YWwtMDEwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCmhgdxIbxTGEOH -fXGiewI3NFldAWKFWfLofO+5I1UbvA5avt7IgsGXz/tI/f5HGUbascI0i7xG0tqV -lA5ctQgLRqxgxHtgTkMcqsAEYdsz3LZsCdXO1QrvEBGLTSABdxiL/gSWJ6z77CSw -x7Xg02HwxPV82cjGkSF3ENGJntuIAAnRDWn/ORHjFatNRymoMbHaOEZXSGhf7Y5F -rrHEqGyi9E6sv784De/T1aTvskn8cWeUmDzv//omiG/a/V9KQex/61XN8OthUQVn -X+u/liL2NKx74I2C/GgHX5B0WkPNqsSOgmlvJ/cKuT0PveUgVFDAA0oYBgcE1KDM -lBbN0kmPAgMBAAGjNjA0MA8GA1UdEwEB/wQFMAMBAf8wEQYDVR0OBAoECEs8jB2F -6W+tMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOCAQEAIUusmJzMJRiQ -8TAHrJAOelfuWoTGcqdIv7Tys/fNl2yF2fjvHT8J01aKialFVpbVeQ2XKb1O2bHO -QYAKgsdZ2jZ/sdL2UVFRTHmidLu6PdgWCBRhJYQELQophO9QVvfhAA0TwbESYqTz -+nlI5Gr7CZe8f6HEmhJmCtUQsdQCufGglRh4T+tIGiNGcnyVEHZ93mSVepFr1VA2 -9CTRPteuGjA81jeAz9peYiFE1CXvxK9cJiv0BcALFLWmADCoRLzIRZhA+sAwYUmw -M1rqVCPA3kBQvIC95tyQvNy2dG0Vs+O6PwLaNX/suSlElQ06X2l1VwMaYb4vZKFq -N0bOhBXEVg== ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIDyzCCArOgAwIBAgIDAOJIMA0GCSqGSIb3DQEBBQUAMIGLMQswCQYDVQQGEwJB -VDFIMEYGA1UECgw/QS1UcnVzdCBHZXMuIGYuIFNpY2hlcmhlaXRzc3lzdGVtZSBp -bSBlbGVrdHIuIERhdGVudmVya2VociBHbWJIMRgwFgYDVQQLDA9BLVRydXN0LVF1 -YWwtMDIxGDAWBgNVBAMMD0EtVHJ1c3QtUXVhbC0wMjAeFw0wNDEyMDIyMzAwMDBa -Fw0xNDEyMDIyMzAwMDBaMIGLMQswCQYDVQQGEwJBVDFIMEYGA1UECgw/QS1UcnVz -dCBHZXMuIGYuIFNpY2hlcmhlaXRzc3lzdGVtZSBpbSBlbGVrdHIuIERhdGVudmVy -a2VociBHbWJIMRgwFgYDVQQLDA9BLVRydXN0LVF1YWwtMDIxGDAWBgNVBAMMD0Et -VHJ1c3QtUXVhbC0wMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJaR -q9eOsFm4Ab20Hq2Z/aH86gyWa48uSUjY6eQkguHYuszr3gdcSMYZggFHQgnhfLmf -ro/27l5rqKhWiDhWs+b+yZ1PNDhRPJy+86ycHMg9XJqErveULBSyZDdgjhSwOyrN -ibUir/fkf+4sKzP5jjytTKJXD/uCxY4fAd9TjMEVpN3umpIS0ijpYhclYDHvzzGU -833z5Dwhq5D8bc9jp8YSAHFJ1xzIoO1jmn3jjyjdYPnY5harJtHQL73nDQnfbtTs -5ThT9GQLulrMgLU4WeyAWWWEMWpfVZFMJOUkmoOEer6A8e5fIAeqdxdsC+JVqpZ4 -CAKel/Arrlj1gFA//jsCAwEAAaM2MDQwDwYDVR0TAQH/BAUwAwEB/zARBgNVHQ4E -CgQIQj0rJKbBRc4wDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBBQUAA4IBAQBG -yxFjUA2bPkXUSC2SfJ29tmrbiLKal+g6a9M8Xwd+Ejo+oYkNP6F4GfeDtAXpm7xb -9Ly8lhdbHcpRhzCUQHJ1tBCiGdLgmhSx7TXjhhanKOdDgkdsC1T+++piuuYL72TD -gUy2Sb1GHlJ1Nc6rvB4fpxSDAOHqGpUq9LWsc3tFkXqRqmQVtqtR77npKIFBioc6 -2jTBwDMPX3hDJDR1DSPc6BnZliaNw2IHdiMQ0mBoYeRnFdq+TyDKsjmJOOQPLzzL -/saaw6F891+gBjLFEFquDyR73lAPJS279R3csi8WWk4ZYUC/1V8H3Ktip/J6ac8e -qhLCbmJ81Lo92JGHz/ot ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIEMjCCAxqgAwIBAgIBATANBgkqhkiG9w0BAQUFADB7MQswCQYDVQQGEwJHQjEb -MBkGA1UECAwSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRow -GAYDVQQKDBFDb21vZG8gQ0EgTGltaXRlZDEhMB8GA1UEAwwYQUFBIENlcnRpZmlj -YXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAwMDAwMFoXDTI4MTIzMTIzNTk1OVowezEL -MAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UE -BwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENBIExpbWl0ZWQxITAfBgNVBAMM -GEFBQSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCCASIwDQYJKoZIhvcNAQEBBQADggEP -ADCCAQoCggEBAL5AnfRu4ep2hxxNRUSOvkbIgwadwSr+GB+O5AL686tdUIoWMQua -BtDFcCLNSS1UY8y2bmhGC1Pqy0wkwLxyTurxFa70VJoSCsN6sjNg4tqJVfMiWPPe -3M/vg4aijJRPn2jymJBGhCfHdr/jzDUsi14HZGWCwEiwqJH5YZ92IFCokcdmtet4 -YgNW8IoaE+oxox6gmf049vYnMlhvB/VruPsUK6+3qszWY19zjNoFmag4qMsXeDZR -rOme9Hg6jc8P2ULimAyrL58OAd7vn5lJ8S3frHRNG5i1R8XlKdH5kBjHYpy+g8cm -ez6KJcfA3Z3mNWgQIJ2P2N7Sw4ScDV7oL8kCAwEAAaOBwDCBvTAdBgNVHQ4EFgQU -oBEKIz6W8Qfs4q8p74Klf9AwpLQwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQF -MAMBAf8wewYDVR0fBHQwcjA4oDagNIYyaHR0cDovL2NybC5jb21vZG9jYS5jb20v -QUFBQ2VydGlmaWNhdGVTZXJ2aWNlcy5jcmwwNqA0oDKGMGh0dHA6Ly9jcmwuY29t -b2RvLm5ldC9BQUFDZXJ0aWZpY2F0ZVNlcnZpY2VzLmNybDANBgkqhkiG9w0BAQUF -AAOCAQEACFb8AvCb6P+k+tZ7xkSAzk/ExfYAWMymtrwUSWgEdujm7l3sAg9g1o1Q -GE8mTgHj5rCl7r+8dFRBv/38ErjHT1r0iWAFf2C3BUrz9vHCv8S5dIa2LX1rzNLz -Rt0vxuBqw8M0Ayx9lt1awg6nCpnBBYurDC/zXDrPbDdVCYfeU0BsWO/8tqtlbgT2 -G9w84FoVxp7Z8VlIMCFlA2zs6SFz7JsDoeA3raAVGI/6ugLOpyypEBMs1OUIJqsi -l2D4kF501KKaU73yqWjgom7C12yxow+ev+to51byrvLjKzg6CYG1a4XXvi3tPxq3 -smPi9WIsgtRqAEFQ8TmDn5XpNpaYbg== ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIGZjCCBE6gAwIBAgIPB35Sk3vgFeNX8GmMy+wMMA0GCSqGSIb3DQEBBQUAMHsx -CzAJBgNVBAYTAkNPMUcwRQYDVQQKDD5Tb2NpZWRhZCBDYW1lcmFsIGRlIENlcnRp -ZmljYWNpw7NuIERpZ2l0YWwgLSBDZXJ0aWPDoW1hcmEgUy5BLjEjMCEGA1UEAwwa -QUMgUmHDrXogQ2VydGljw6FtYXJhIFMuQS4wHhcNMDYxMTI3MjA0NjI5WhcNMzAw -NDAyMjE0MjAyWjB7MQswCQYDVQQGEwJDTzFHMEUGA1UECgw+U29jaWVkYWQgQ2Ft -ZXJhbCBkZSBDZXJ0aWZpY2FjacOzbiBEaWdpdGFsIC0gQ2VydGljw6FtYXJhIFMu -QS4xIzAhBgNVBAMMGkFDIFJhw616IENlcnRpY8OhbWFyYSBTLkEuMIICIjANBgkq -hkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAq2uJo1PMSCMI+8PPUZYILrgIem08kBeG -qentLhM0R7LQcNzJPNCNyu5LF6vQhbCnIwTLqKL85XXbQMpiiY9QngE9JlsYhBzL -fDe3fezTf3MZsGqy2IiKLUV0qPezuMDU2s0iiXRNWhU5cxh0T7XrmafBHoi0wpOQ -Y5fzp6cSsgkiBzPZkc0OnB8OIMfuuzONj8LSWKdf/WU34ojC2I+GdV75LaeHM/J4 -Ny+LvB2GNzmxlPLYvEqcgxhaBvzz1NS6jBUJJfD5to0EfhcSM2tXSExP2yYe68yQ -54v5aHxwD6Mq0Do43zeX4lvegGHTgNiRg0JaTASJaBE8rF9ogEHMYELODVoqDA+b -MMCm8Ibbq0nXl21Ii/kDwFJnmxL3wvIumGVC2daa49AZMQyth9VXAnow6IYm+48j -ilSH5L887uvDdUhfHjlvgWJsxS3EF1QZtzeNnDeRyPYL1epjb4OsOMLzP96a++Ej -YfDIJss2yKHzMI+ko6Kh3VOz3vCaMh+DkXkwwakfU5tTohVTP92dsxA7SH2JD/zt -A/X7JWR1DhcZDY8AFmd5ekD8LVkH2ZD6mq093ICK5lw1omdMEWux+IBkAC1vImHF -rEsm5VoQgpukg3s0956JkSCXjrdCx2bD0Omk1vUgjcTDlaxECp1bczwmPS9KvqfJ -pxAe+59QafMCAwEAAaOB5jCB4zAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQE -AwIBBjAdBgNVHQ4EFgQU0QnQ6dfOeXRU+Tows/RtLAMDG2gwgaAGA1UdIASBmDCB -lTCBkgYEVR0gADCBiTArBggrBgEFBQcCARYfaHR0cDovL3d3dy5jZXJ0aWNhbWFy -YS5jb20vZHBjLzBaBggrBgEFBQcCAjBOGkxMaW1pdGFjaW9uZXMgZGUgZ2FyYW50 -7WFzIGRlIGVzdGUgY2VydGlmaWNhZG8gc2UgcHVlZGVuIGVuY29udHJhciBlbiBs -YSBEUEMuMA0GCSqGSIb3DQEBBQUAA4ICAQBclLW4RZFNjmEfAygPU3zmpFmps4p6 -xbD/CHwso3EcIRNnoZUSQDWDg4902zNc8El2CoFS3UnUmjIz75uny3XlesuXEpBc -unvFm9+7OSPI/5jOCk0iAUgHforA1SBClETvv3eiiWdIG0ADBaGJ7M9i4z0ldma/ -Jre7Ir5v/zlXdLp6yQGVwZVR6Kss+LGGIOk/yzVb0hfpKv6DExdA7ohiZVvVO2Dp -ezy4ydV/NgIlqmjCMRW3MGXrfx1IebHPOeJCgBbT9ZMj/EyXyVo3bHwi2ErN0o42 -gzmRkBDI8ck1fj+404HGIGQatlDCIaR43NAvO2STdPCWkPHv+wlaNECW8DYSwaN0 -jJN+Qd53i+yG2dIPPy3RzECiiWZIHiCznCNZc6lEc7wkeZBWN7PGKX6jD/EpOe9+ -XCgycDWs2rjIdWb8m0w5R44bb5tNAlQiM+9hup4phO9OSzNHdpdqy35f/RWmnkJD -W2ZaiogN9xa5P1FlK2Zqi9E4UqLWRhH6/JocdJ6PlwsCT2TG9WjTSy3/pDceiz+/ -RL5hRqGEPQgnTIEgd4kI6mdAXmwIUV80WoyWaM3X94nCHNMyAK9Sy9NgWyo6R35r -MDOhYil/SrnhLecUIw4OGEfhefwVVdCx/CVxY3UzHCMrr1zZ7Ud3YA47Dx7SwNxk -BYn8eNZcLCZDqQ== ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIEGDCCAwCgAwIBAgIBATANBgkqhkiG9w0BAQUFADBlMQswCQYDVQQGEwJTRTEU -MBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3 -b3JrMSEwHwYDVQQDExhBZGRUcnVzdCBDbGFzcyAxIENBIFJvb3QwHhcNMDAwNTMw -MTAzODMxWhcNMjAwNTMwMTAzODMxWjBlMQswCQYDVQQGEwJTRTEUMBIGA1UEChML -QWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSEwHwYD -VQQDExhBZGRUcnVzdCBDbGFzcyAxIENBIFJvb3QwggEiMA0GCSqGSIb3DQEBAQUA -A4IBDwAwggEKAoIBAQCWltQhSWDia+hBBwzexODcEyPNwTXH+9ZOEQpnXvUGW2ul -CDtbKRY654eyNAbFvAWlA3yCyykQruGIgb3WntP+LVbBFc7jJp0VLhD7Bo8wBN6n -tGO0/7Gcrjyvd7ZWxbWroulpOj0OM3kyP3CCkplhbY0wCI9xP6ZIVxn4JdxLZlyl -dI+Yrsj5wAYi56xz36Uu+1LcsRVlIPo1Zmne3yzxbrww2ywkEtvrNTVokMsAsJch -PXQhI2U0K7t4WaPW4XY5mqRJjox0r26kmqPZm9I4XJuiGMx1I4S+6+JNM3GOGvDC -+Mcdoq0Dlyz4zyXG9rgkMbFjXZJ/Y/AlyVMuH79NAgMBAAGjgdIwgc8wHQYDVR0O -BBYEFJWxtPCUtr3H2tERCSG+wa9J/RB7MAsGA1UdDwQEAwIBBjAPBgNVHRMBAf8E -BTADAQH/MIGPBgNVHSMEgYcwgYSAFJWxtPCUtr3H2tERCSG+wa9J/RB7oWmkZzBl -MQswCQYDVQQGEwJTRTEUMBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFk -ZFRydXN0IFRUUCBOZXR3b3JrMSEwHwYDVQQDExhBZGRUcnVzdCBDbGFzcyAxIENB -IFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBACxtZBsfzQ3duQH6lmM0MkhHma6X -7f1yFqZzR1r0693p9db7RcwpiURdv0Y5PejuvE1Uhh4dbOMXJ0PhiVYrqW9yTkkz -43J8KiOavD7/KCrto/8cI7pDVwlnTUtiBi34/2ydYB7YHEt9tTEv2dB8Xfjea4MY -eDdXL+gzB2ffHsdrKpV2ro9Xo/D0UrSpUwjP4E/TelOL/bscVjby/rK25Xa71SJl -pz/+0WatC7xrmYbvP33zGDLKe8bjq2RGlfgmadlVg3sslgf/WSxEo8bl6ancoWOA -WiFeIc9TVPC6b4nbqKqVz4vjccweGyBECMB6tkD9xOQ14R0WHNC8K47Wcdk= ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIENjCCAx6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBvMQswCQYDVQQGEwJTRTEU -MBIGA1UEChMLQWRkVHJ1c3QgQUIxJjAkBgNVBAsTHUFkZFRydXN0IEV4dGVybmFs -IFRUUCBOZXR3b3JrMSIwIAYDVQQDExlBZGRUcnVzdCBFeHRlcm5hbCBDQSBSb290 -MB4XDTAwMDUzMDEwNDgzOFoXDTIwMDUzMDEwNDgzOFowbzELMAkGA1UEBhMCU0Ux -FDASBgNVBAoTC0FkZFRydXN0IEFCMSYwJAYDVQQLEx1BZGRUcnVzdCBFeHRlcm5h -bCBUVFAgTmV0d29yazEiMCAGA1UEAxMZQWRkVHJ1c3QgRXh0ZXJuYWwgQ0EgUm9v -dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALf3GjPm8gAELTngTlvt -H7xsD821+iO2zt6bETOXpClMfZOfvUq8k+0DGuOPz+VtUFrWlymUWoCwSXrbLpX9 -uMq/NzgtHj6RQa1wVsfwTz/oMp50ysiQVOnGXw94nZpAPA6sYapeFI+eh6FqUNzX -mk6vBbOmcZSccbNQYArHE504B4YCqOmoaSYYkKtMsE8jqzpPhNjfzp/haW+710LX -a0Tkx63ubUFfclpxCDezeWWkWaCUN/cALw3CknLa0Dhy2xSoRcRdKn23tNbE7qzN -E0S3ySvdQwAl+mG5aWpYIxG3pzOPVnVZ9c0p10a3CitlttNCbxWyuHv77+ldU9U0 -WicCAwEAAaOB3DCB2TAdBgNVHQ4EFgQUrb2YejS0Jvf6xCZU7wO94CTLVBowCwYD -VR0PBAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wgZkGA1UdIwSBkTCBjoAUrb2YejS0 -Jvf6xCZU7wO94CTLVBqhc6RxMG8xCzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRU -cnVzdCBBQjEmMCQGA1UECxMdQWRkVHJ1c3QgRXh0ZXJuYWwgVFRQIE5ldHdvcmsx -IjAgBgNVBAMTGUFkZFRydXN0IEV4dGVybmFsIENBIFJvb3SCAQEwDQYJKoZIhvcN -AQEFBQADggEBALCb4IUlwtYj4g+WBpKdQZic2YR5gdkeWxQHIzZlj7DYd7usQWxH -YINRsPkyPef89iYTx4AWpb9a/IfPeHmJIZriTAcKhjW88t5RxNKWt9x+Tu5w/Rw5 -6wwCURQtjr0W4MHfRnXnJK3s9EK0hZNwEGe6nQY1ShjTK3rMUUKhemPR5ruhxSvC -Nr4TDea9Y355e6cJDUCrat2PisP29owaQgVR1EX1n6diIWgVIEM8med8vSTYqZEX -c4g/VhsxOBi0cQ+azcgOno4uG+GMmIPLHzHxREzGBHNJdmAPx/i9F4BrLunMTA5a -mnkPIAou1Z5jJh5VkpTYghdae9C8x49OhgQ= ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIEFTCCAv2gAwIBAgIBATANBgkqhkiG9w0BAQUFADBkMQswCQYDVQQGEwJTRTEU -MBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3 -b3JrMSAwHgYDVQQDExdBZGRUcnVzdCBQdWJsaWMgQ0EgUm9vdDAeFw0wMDA1MzAx -MDQxNTBaFw0yMDA1MzAxMDQxNTBaMGQxCzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtB -ZGRUcnVzdCBBQjEdMBsGA1UECxMUQWRkVHJ1c3QgVFRQIE5ldHdvcmsxIDAeBgNV -BAMTF0FkZFRydXN0IFB1YmxpYyBDQSBSb290MIIBIjANBgkqhkiG9w0BAQEFAAOC -AQ8AMIIBCgKCAQEA6Rowj4OIFMEg2Dybjxt+A3S72mnTRqX4jsIMEZBRpS9mVEBV -6tsfSlbunyNu9DnLoblv8n75XYcmYZ4c+OLspoH4IcUkzBEMP9smcnrHAZcHF/nX -GCwwfQ56HmIexkvA/X1id9NEHif2P0tEs7c42TkfYNVRknMDtABp4/MUTu7R3AnP -dzRGULD4EfL+OHn3Bzn+UZKXC1sIXzSGAa2Il+tmzV7R/9x98oTaunet3IAIx6eH -1lWfl2royBFkuucZKT8Rs3iQhCBSWxHveNCD9tVIkNAwHM+A+WD+eeSI8t0A65RF -62WUaUC6wNW0uLp9BBGo6zEFlpROWCGOn9Bg/QIDAQABo4HRMIHOMB0GA1UdDgQW -BBSBPjfYkrAfd59ctKtzquf2NGAv+jALBgNVHQ8EBAMCAQYwDwYDVR0TAQH/BAUw -AwEB/zCBjgYDVR0jBIGGMIGDgBSBPjfYkrAfd59ctKtzquf2NGAv+qFopGYwZDEL -MAkGA1UEBhMCU0UxFDASBgNVBAoTC0FkZFRydXN0IEFCMR0wGwYDVQQLExRBZGRU -cnVzdCBUVFAgTmV0d29yazEgMB4GA1UEAxMXQWRkVHJ1c3QgUHVibGljIENBIFJv -b3SCAQEwDQYJKoZIhvcNAQEFBQADggEBAAP3FUr4JNojVhaTdt02KLmuG7jD8WS6 -IBh4lSknVwW8fCr0uVFV2ocC3g8WFzH4qnkuCRO7r7IgGRLlk/lL+YPoRNWyQSW/ -iHVv/xD8SlTQX/D67zZzfRs2RcYhbbQVuE7PnFylPVoAjgbjPGsye/Kf8Lb93/Ao -GEjwxrzQvzSAlsJKsW2Ox5BF3i9nrEUEo3rcVZLJR2bYGozH7ZxOmuASu7VqTITh -4SINhwBk/ox9Yjllpu9CtoAlEmEBqCQTcAARJl/6NVDFSMwGR+gn2HCNX2TmoUQm -XiLsks3/QppEIW1cxeMiHV9HEufOX1362KqxMy3ZdvJOOjMMK7MtkAY= ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIEHjCCAwagAwIBAgIBATANBgkqhkiG9w0BAQUFADBnMQswCQYDVQQGEwJTRTEU -MBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3 -b3JrMSMwIQYDVQQDExpBZGRUcnVzdCBRdWFsaWZpZWQgQ0EgUm9vdDAeFw0wMDA1 -MzAxMDQ0NTBaFw0yMDA1MzAxMDQ0NTBaMGcxCzAJBgNVBAYTAlNFMRQwEgYDVQQK -EwtBZGRUcnVzdCBBQjEdMBsGA1UECxMUQWRkVHJ1c3QgVFRQIE5ldHdvcmsxIzAh -BgNVBAMTGkFkZFRydXN0IFF1YWxpZmllZCBDQSBSb290MIIBIjANBgkqhkiG9w0B -AQEFAAOCAQ8AMIIBCgKCAQEA5B6a/twJWoekn0e+EV+vhDTbYjx5eLfpMLXsDBwq -xBb/4Oxx64r1EW7tTw2R0hIYLUkVAcKkIhPHEWT/IhKauY5cLwjPcWqzZwFZ8V1G -87B4pfYOQnrjfxvM0PC3KP0q6p6zsLkEqv32x7SxuCqg+1jxGaBvcCV+PmlKfw8i -2O+tCBGaKZnhqkRFmhJePp1tUvznoD1oL/BLcHwTOK28FSXx1s6rosAx1i+f4P8U -WfyEk9mHfExUE+uf0S0R+Bg6Ot4l2ffTQO2kBhLEO+GRwVY18BTcZTYJbqukB8c1 -0cIDMzZbdSZtQvESa0NvS3GU+jQd7RNuyoB/mC9suWXY6QIDAQABo4HUMIHRMB0G -A1UdDgQWBBQ5lYtii1zJ1IC6WA+XPxUIQ8yYpzALBgNVHQ8EBAMCAQYwDwYDVR0T -AQH/BAUwAwEB/zCBkQYDVR0jBIGJMIGGgBQ5lYtii1zJ1IC6WA+XPxUIQ8yYp6Fr -pGkwZzELMAkGA1UEBhMCU0UxFDASBgNVBAoTC0FkZFRydXN0IEFCMR0wGwYDVQQL -ExRBZGRUcnVzdCBUVFAgTmV0d29yazEjMCEGA1UEAxMaQWRkVHJ1c3QgUXVhbGlm -aWVkIENBIFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBABmrder4i2VhlRO6aQTv -hsoToMeqT2QbPxj2qC0sVY8FtzDqQmodwCVRLae/DLPt7wh/bDxGGuoYQ992zPlm -hpwsaPXpF/gxsxjE1kh9I0xowX67ARRvxdlu3rsEQmr49lx95dr6h+sNNVJn0J6X -dgWTP5XHAeZpVTh/EGGZyeNfpso+gmNIquIISD6q8rKFYqa0p9m9N5xotS1WfbC3 -P6CxB9bpT9zeRXEwMn8bLgn5v1Kh7sKAPgZcLlVAwRv1cEWw3F369nJad9Jjzc9Y -iQBCYz95OdBEsIJuQRno3eDBiFrRHnGTHyQwdOUeqN48Jzd/g66ed8/wMLH/S5no -xqE= ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIDpDCCAoygAwIBAgIBATANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEc -MBoGA1UEChMTQW1lcmljYSBPbmxpbmUgSW5jLjE2MDQGA1UEAxMtQW1lcmljYSBP -bmxpbmUgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAxMB4XDTAyMDUyODA2 -MDAwMFoXDTM3MTExOTIwNDMwMFowYzELMAkGA1UEBhMCVVMxHDAaBgNVBAoTE0Ft -ZXJpY2EgT25saW5lIEluYy4xNjA0BgNVBAMTLUFtZXJpY2EgT25saW5lIFJvb3Qg -Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkgMTCCASIwDQYJKoZIhvcNAQEBBQADggEP -ADCCAQoCggEBAKgv6KRpBgNHw+kqmP8ZonCaxlCyfqXfaE0bfA+2l2h9LaaLl+lk -hsmj76CGv2BlnEtUiMJIxUo5vxTjWVXlGbR0yLQFOVwWpeKVBeASrlmLojNoWBym -1BW32J/X3HGrfpq/m44zDyL9Hy7nBzbvYjnF3cu6JRQj3gzGPTzOggjmZj7aUTsW -OqMFf6Dch9Wc/HKpoH145LcxVR5lu9RhsCFg7RAycsWSJR74kEoYeEfffjA3PlAb -2xzTa5qGUwew76wGePiEmf4hjUyAtgyC9mZweRrTT6PP8c9GsEsPPt2IYriMqQko -O3rHl+Ee5fSfwMCuJKDIodkP1nsmgmkyPacCAwEAAaNjMGEwDwYDVR0TAQH/BAUw -AwEB/zAdBgNVHQ4EFgQUAK3Zo/Z59m50qX8zPYEX10zPM94wHwYDVR0jBBgwFoAU -AK3Zo/Z59m50qX8zPYEX10zPM94wDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEB -BQUAA4IBAQB8itEfGDeC4Liwo+1WlchiYZwFos3CYiZhzRAW18y0ZTTQEYqtqKkF -Zu90821fnZmv9ov761KyBZiibyrFVL0lvV+uyIbqRizBs73B6UlwGBaXCBOMIOAb -LjpHyx7kADCVW/RFo8AasAFOq73AI25jP4BKxQft3OJvx8Fi8eNy1gTIdGcL+oir -oQHIb/AUr9KZzVGTfu0uOMe9zkZQPXLjeSWdm4grECDdpbgyn43gKd8hdIaC2y+C -MMbHNYaz+ZZfRtsMRf3zUMNvxsNIrUam4SdHCh0Om7bCd39j8uB9Gr784N/Xx6ds -sPmuujz9dLQR6FgNgLzTqIA6me11zEZ7 ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIFpDCCA4ygAwIBAgIBATANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEc -MBoGA1UEChMTQW1lcmljYSBPbmxpbmUgSW5jLjE2MDQGA1UEAxMtQW1lcmljYSBP -bmxpbmUgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAyMB4XDTAyMDUyODA2 -MDAwMFoXDTM3MDkyOTE0MDgwMFowYzELMAkGA1UEBhMCVVMxHDAaBgNVBAoTE0Ft -ZXJpY2EgT25saW5lIEluYy4xNjA0BgNVBAMTLUFtZXJpY2EgT25saW5lIFJvb3Qg -Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkgMjCCAiIwDQYJKoZIhvcNAQEBBQADggIP -ADCCAgoCggIBAMxBRR3pPU0Q9oyxQcngXssNt79Hc9PwVU3dxgz6sWYFas14tNwC -206B89enfHG8dWOgXeMHDEjsJcQDIPT/DjsS/5uN4cbVG7RtIuOx238hZK+GvFci -KtZHgVdEglZTvYYUAQv8f3SkWq7xuhG1m1hagLQ3eAkzfDJHA1zEpYNI9FdWboE2 -JxhP7JsowtS013wMPgwr38oE18aO6lhOqKSlGBxsRZijQdEt0sdtjRnxrXm3gT+9 -BoInLRBYBbV4Bbkv2wxrkJB+FFk4u5QkE+XRnRTf04JNRvCAOVIyD+OEsnpD8l7e -Xz8d3eOyG6ChKiMDbi4BFYdcpnV1x5dhvt6G3NRI270qv0pV2uh9UPu0gBe4lL8B -PeraunzgWGcXuVjgiIZGZ2ydEEdYMtA1fHkqkKJaEBEjNa0vzORKW6fIJ/KD3l67 -Xnfn6KVuY8INXWHQjNJsWiEOyiijzirplcdIz5ZvHZIlyMbGwcEMBawmxNJ10uEq -Z8A9W6Wa6897GqidFEXlD6CaZd4vKL3Ob5Rmg0gp2OpljK+T2WSfVVcmv2/LNzGZ -o2C7HK2JNDJiuEMhBnIMoVxtRsX6Kc8w3onccVvdtjc+31D1uAclJuW8tf48ArO3 -+L5DwYcRlJ4jbBeKuIonDFRH8KmzwICMoCfrHRnjB453cMor9H124HhnAgMBAAGj -YzBhMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFE1FwWg4u3OpaaEg5+31IqEj -FNeeMB8GA1UdIwQYMBaAFE1FwWg4u3OpaaEg5+31IqEjFNeeMA4GA1UdDwEB/wQE -AwIBhjANBgkqhkiG9w0BAQUFAAOCAgEAZ2sGuV9FOypLM7PmG2tZTiLMubekJcmn -xPBUlgtk87FYT15R/LKXeydlwuXK5w0MJXti4/qftIe3RUavg6WXSIylvfEWK5t2 -LHo1YGwRgJfMqZJS5ivmae2p+DYtLHe/YUjRYwu5W1LtGLBDQiKmsXeu3mnFzccc -obGlHBD7GL4acN3Bkku+KVqdPzW+5X1R+FXgJXUjhx5c3LqdsKyzadsXg8n33gy8 -CNyRnqjQ1xU3c6U1uPx+xURABsPr+CKAXEfOAuMRn0T//ZoyzH1kUQ7rVyZ2OuMe -IjzCpjbdGe+n/BLzJsBZMYVMnNjP36TMzCmT/5RtdlwTCJfy7aULTd3oyWgOZtMA -DjMSW7yV5TKQqLPGbIOtd+6Lfn6xqavT4fG2wLHqiMDn05DpKJKUe2h7lyoKZy2F -AjgQ5ANh1NolNscIWC2hp1GvMApJ9aZphwctREZ2jirlmjvXGKL8nDgQzMY70rUX -Om/9riW99XJZZLF0KjhfGEzfz3EEWjbUvy+ZnOjZurGV5gJLIaFb1cFPj65pbVPb -AZO1XB4Y3WRayhgoPmMEEf0cjQAPuDffZ4qdZqkCapH/E8ovXYO8h5Ns3CRRFgQl -Zvqz2cK6Kb6aSDiCmfS/O0oxGfm/jiEzFMpPVF/7zvuPcX/9XhmgD0uRuMRUvAaw -RY8mkaKO/qk= ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIID5jCCAs6gAwIBAgIBATANBgkqhkiG9w0BAQUFADCBgzELMAkGA1UEBhMCVVMx -HTAbBgNVBAoTFEFPTCBUaW1lIFdhcm5lciBJbmMuMRwwGgYDVQQLExNBbWVyaWNh -IE9ubGluZSBJbmMuMTcwNQYDVQQDEy5BT0wgVGltZSBXYXJuZXIgUm9vdCBDZXJ0 -aWZpY2F0aW9uIEF1dGhvcml0eSAxMB4XDTAyMDUyOTA2MDAwMFoXDTM3MTEyMDE1 -MDMwMFowgYMxCzAJBgNVBAYTAlVTMR0wGwYDVQQKExRBT0wgVGltZSBXYXJuZXIg -SW5jLjEcMBoGA1UECxMTQW1lcmljYSBPbmxpbmUgSW5jLjE3MDUGA1UEAxMuQU9M -IFRpbWUgV2FybmVyIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgMTCCASIw -DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJnej8Mlo2k06AX3dLm/WpcZuS+U -0pPlLYnKhHw/EEMbjIt8hFj4JHxIzyr9wBXZGH6EGhfT257XyuTZ16pYUYfw8ItI -TuLCxFlpMGK2MKKMCxGZYTVtfu/FsRkGIBKOQuHfD5YQUqjPnF+VFNivO3ULMSAf -RC+iYkGzuxgh28pxPIzstrkNn+9R7017EvILDOGsQI93f7DKeHEMXRZxcKLXwjqF -zQ6axOAAsNUl6twr5JQtOJyJQVdkKGUZHLZEtMgxa44Be3ZZJX8VHIQIfHNlIAqh -BC4aMqiaILGcLCFZ5/vP7nAtCMpjPiybkxlqpMKX/7eGV4iFbJ4VFitNLLMCAwEA -AaNjMGEwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUoTYwFsuGkABFgFOxj8jY -PXy+XxIwHwYDVR0jBBgwFoAUoTYwFsuGkABFgFOxj8jYPXy+XxIwDgYDVR0PAQH/ -BAQDAgGGMA0GCSqGSIb3DQEBBQUAA4IBAQCKIBilvrMvtKaEAEAwKfq0FHNMeUWn -9nDg6H5kHgqVfGphwu9OH77/yZkfB2FK4V1Mza3u0FIy2VkyvNp5ctZ7CegCgTXT -Ct8RHcl5oIBN/lrXVtbtDyqvpxh1MwzqwWEFT2qaifKNuZ8u77BfWgDrvq2g+EQF -Z7zLBO+eZMXpyD8Fv8YvBxzDNnGGyjhmSs3WuEvGbKeXO/oTLW4jYYehY0KswsuX -n2Fozy1MBJ3XJU8KDk2QixhWqJNIV9xvrr2eZ1d3iVCzvhGbRWeDhhmH05i9CBoW -H1iCC+GWaQVLjuyDUTEH1dSf/1l7qG6Fz9NLqUmwX7A5KGgOc90lmt4S ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIF5jCCA86gAwIBAgIBATANBgkqhkiG9w0BAQUFADCBgzELMAkGA1UEBhMCVVMx -HTAbBgNVBAoTFEFPTCBUaW1lIFdhcm5lciBJbmMuMRwwGgYDVQQLExNBbWVyaWNh -IE9ubGluZSBJbmMuMTcwNQYDVQQDEy5BT0wgVGltZSBXYXJuZXIgUm9vdCBDZXJ0 -aWZpY2F0aW9uIEF1dGhvcml0eSAyMB4XDTAyMDUyOTA2MDAwMFoXDTM3MDkyODIz -NDMwMFowgYMxCzAJBgNVBAYTAlVTMR0wGwYDVQQKExRBT0wgVGltZSBXYXJuZXIg -SW5jLjEcMBoGA1UECxMTQW1lcmljYSBPbmxpbmUgSW5jLjE3MDUGA1UEAxMuQU9M -IFRpbWUgV2FybmVyIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgMjCCAiIw -DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALQ3WggWmRToVbEbJGv8x4vmh6mJ -7ouZzU9AhqS2TcnZsdw8TQ2FTBVsRotSeJ/4I/1n9SQ6aF3Q92RhQVSji6UI0ilb -m2BPJoPRYxJWSXakFsKlnUWsi4SVqBax7J/qJBrvuVdcmiQhLE0OcR+mrF1FdAOY -xFSMFkpBd4aVdQxHAWZg/BXxD+r1FHjHDtdugRxev17nOirYlxcwfACtCJ0zr7iZ -YYCLqJV+FNwSbKTQ2O9ASQI2+W6p1h2WVgSysy0WVoaP2SBXgM1nEG2wTPDaRrbq -JS5Gr42whTg0ixQmgiusrpkLjhTXUr2eacOGAgvqdnUxCc4zGSGFQ+aJLZ8lN2fx -I2rSAG2X+Z/nKcrdH9cG6rjJuQkhn8g/BsXS6RJGAE57COtCPStIbp1n3UsC5ETz -kxmlJ85per5n0/xQpCyrw2u544BMzwVhSyvcG7mm0tCq9Stz+86QNZ8MUhy/XCFh -EVsVS6kkUfykXPcXnbDS+gfpj1bkGoxoigTTfFrjnqKhynFbotSg5ymFXQNoKk/S -Btc9+cMDLz9l+WceR0DTYw/j1Y75hauXTLPXJuuWCpTehTacyH+BCQJJKg71ZDIM -gtG6aoIbs0t0EfOMd9afv9w3pKdVBC/UMejTRrkDfNoSTllkt1ExMVCgyhwn2RAu -rda9EGYrw7AiShJbAgMBAAGjYzBhMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYE -FE9pbQN+nZ8HGEO8txBO1b+pxCAoMB8GA1UdIwQYMBaAFE9pbQN+nZ8HGEO8txBO -1b+pxCAoMA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQUFAAOCAgEAO/Ouyugu -h4X7ZVnnrREUpVe8WJ8kEle7+z802u6teio0cnAxa8cZmIDJgt43d15Ui47y6mdP -yXSEkVYJ1eV6moG2gcKtNuTxVBFT8zRFASbI5Rq8NEQh3q0l/HYWdyGQgJhXnU7q -7C+qPBR7V8F+GBRn7iTGvboVsNIYvbdVgaxTwOjdaRITQrcCtQVBynlQboIOcXKT -RuidDV29rs4prWPVVRaAMCf/drr3uNZK49m1+VLQTkCpx+XCMseqdiThawVQ68W/ -ClTluUI8JPu3B5wwn3la5uBAUhX0/Kr0VvlEl4ftDmVyXr4m+02kLQgH3thcoNyB -M5kYJRF3p+v9WAksmWsbivNSPxpNSGDxoPYzAlOL7SUJuA0t7Zdz7NeWH45gDtoQ -my8YJPamTQr5O8t1wswvziRpyQoijlmn94IM19drNZxDAGrElWe6nEXLuA4399xO -AU++CrYD062KRffaJ00psUjf5BHklka9bAI+1lHIlRcBFanyqqryvy9lG2/QuRqT -9Y41xICHPpQvZuTpqP9BnHAqTyo5GJUefvthATxRCC4oGKQWDzH9OmwjkyB24f0H -hdFbP9IcczLd+rn4jM8Ch3qaluTtT4mNU0OrDhPAARW0eTjb/G49nlG2uBOLZ8/5 -fNkiHfZdxRwBL5joeiQYvITX+txyW/fBOmg= ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIEuzCCA6OgAwIBAgIBAjANBgkqhkiG9w0BAQUFADBiMQswCQYDVQQGEwJVUzET -MBEGA1UEChMKQXBwbGUgSW5jLjEmMCQGA1UECxMdQXBwbGUgQ2VydGlmaWNhdGlv -biBBdXRob3JpdHkxFjAUBgNVBAMTDUFwcGxlIFJvb3QgQ0EwHhcNMDYwNDI1MjE0 -MDM2WhcNMzUwMjA5MjE0MDM2WjBiMQswCQYDVQQGEwJVUzETMBEGA1UEChMKQXBw -bGUgSW5jLjEmMCQGA1UECxMdQXBwbGUgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkx -FjAUBgNVBAMTDUFwcGxlIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw -ggEKAoIBAQDkkakJH5HbHkdQ6wXtXnmELes2oldMVeyLGYne+Uts9QerIjAC6Bg+ -+FAJ039BqJj50cpmnCRrEdCju+QbKsMflZ56DKRHi1vUFjczy8QPTc4UadHJGXL1 -XQ7Vf1+b8iUDulWPTV0N8WQ1IxVLFVkds5T39pyez1C6wVhQZ48ItCD3y6wsIG9w -tj8BMIy3Q88PnT3zK0koGsj+zrW5DtleHNbLPbU6rfQPDgCSC7EhFi501TwN22IW -q6NxkkdTVcGvL0Gz+PvjcM3mo0xFfh9Ma1CWQYnEdGILEINBhzOKgbEwWOxaBDKM -aLOPHd5lc/9nXmW8Sdh2nzMUZaF3lMktAgMBAAGjggF6MIIBdjAOBgNVHQ8BAf8E -BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUK9BpR5R2Cf70a40uQKb3 -R01/CF4wHwYDVR0jBBgwFoAUK9BpR5R2Cf70a40uQKb3R01/CF4wggERBgNVHSAE -ggEIMIIBBDCCAQAGCSqGSIb3Y2QFATCB8jAqBggrBgEFBQcCARYeaHR0cHM6Ly93 -d3cuYXBwbGUuY29tL2FwcGxlY2EvMIHDBggrBgEFBQcCAjCBthqBs1JlbGlhbmNl -IG9uIHRoaXMgY2VydGlmaWNhdGUgYnkgYW55IHBhcnR5IGFzc3VtZXMgYWNjZXB0 -YW5jZSBvZiB0aGUgdGhlbiBhcHBsaWNhYmxlIHN0YW5kYXJkIHRlcm1zIGFuZCBj -b25kaXRpb25zIG9mIHVzZSwgY2VydGlmaWNhdGUgcG9saWN5IGFuZCBjZXJ0aWZp -Y2F0aW9uIHByYWN0aWNlIHN0YXRlbWVudHMuMA0GCSqGSIb3DQEBBQUAA4IBAQBc -NplMLXi37Yyb3PN3m/J20ncwT8EfhYOFG5k9RzfyqZtAjizUsZAS2L70c5vu0mQP -y3lPNNiiPvl4/2vIB+x9OYOLUyDTOMSxv5pPCmv/K/xZpwUJfBdAVhEedNO3iyM7 -R6PVbyTi69G3cN8PReEnyvFteO3ntRcXqNx+IjXKJdXZD9Zr1KIkIxH3oayPc4Fg -xhtbCS+SsvhESPBgOJ4V9T0mZyCKM2r3DYLP3uujL/lTaltkwGMzd/c6ByxW69oP -IQ7aunMZT7XZNn/Bh1XZp5m5MkL72NVxnn6hUrcbvZNCJBIqxw8dtk2cXmPIS4AX -UKqK1drk/NAJBzewdXUh ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIFujCCBKKgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBhjELMAkGA1UEBhMCVVMx -HTAbBgNVBAoTFEFwcGxlIENvbXB1dGVyLCBJbmMuMS0wKwYDVQQLEyRBcHBsZSBD -b21wdXRlciBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkxKTAnBgNVBAMTIEFwcGxlIFJv -b3QgQ2VydGlmaWNhdGUgQXV0aG9yaXR5MB4XDTA1MDIxMDAwMTgxNFoXDTI1MDIx -MDAwMTgxNFowgYYxCzAJBgNVBAYTAlVTMR0wGwYDVQQKExRBcHBsZSBDb21wdXRl -ciwgSW5jLjEtMCsGA1UECxMkQXBwbGUgQ29tcHV0ZXIgQ2VydGlmaWNhdGUgQXV0 -aG9yaXR5MSkwJwYDVQQDEyBBcHBsZSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0 -eTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAOSRqQkfkdseR1DrBe1e -eYQt6zaiV0xV7IsZid75S2z1B6siMALoGD74UAnTf0GomPnRymacJGsR0KO75Bsq -wx+VnnoMpEeLW9QWNzPLxA9NzhRp0ckZcvVdDtV/X5vyJQO6VY9NXQ3xZDUjFUsV -WR2zlPf2nJ7PULrBWFBnjwi0IPfLrCwgb3C2PwEwjLdDzw+dPfMrSSgayP7OtbkO -2V4c1ss9tTqt9A8OAJILsSEWLnTVPA3bYharo3GSR1NVwa8vQbP4++NwzeajTEV+ -H0xrUJZBicR0YgsQg0GHM4qBsTBY7FoEMoxos48d3mVz/2deZbxJ2HafMxRloXeU -yS0CAwEAAaOCAi8wggIrMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/ -MB0GA1UdDgQWBBQr0GlHlHYJ/vRrjS5ApvdHTX8IXjAfBgNVHSMEGDAWgBQr0GlH -lHYJ/vRrjS5ApvdHTX8IXjCCASkGA1UdIASCASAwggEcMIIBGAYJKoZIhvdjZAUB -MIIBCTBBBggrBgEFBQcCARY1aHR0cHM6Ly93d3cuYXBwbGUuY29tL2NlcnRpZmlj -YXRlYXV0aG9yaXR5L3Rlcm1zLmh0bWwwgcMGCCsGAQUFBwICMIG2GoGzUmVsaWFu -Y2Ugb24gdGhpcyBjZXJ0aWZpY2F0ZSBieSBhbnkgcGFydHkgYXNzdW1lcyBhY2Nl -cHRhbmNlIG9mIHRoZSB0aGVuIGFwcGxpY2FibGUgc3RhbmRhcmQgdGVybXMgYW5k -IGNvbmRpdGlvbnMgb2YgdXNlLCBjZXJ0aWZpY2F0ZSBwb2xpY3kgYW5kIGNlcnRp -ZmljYXRpb24gcHJhY3RpY2Ugc3RhdGVtZW50cy4wRAYDVR0fBD0wOzA5oDegNYYz -aHR0cHM6Ly93d3cuYXBwbGUuY29tL2NlcnRpZmljYXRlYXV0aG9yaXR5L3Jvb3Qu -Y3JsMFUGCCsGAQUFBwEBBEkwRzBFBggrBgEFBQcwAoY5aHR0cHM6Ly93d3cuYXBw -bGUuY29tL2NlcnRpZmljYXRlYXV0aG9yaXR5L2Nhc2lnbmVycy5odG1sMA0GCSqG -SIb3DQEBBQUAA4IBAQCd2i0oWC99dgS5BNM+zrdmY06PL9T+S61yvaM5xlJNBZhS -9YlRASR5vhoy9+VEi0tEBzmC1lrKtCBe2a4VXR2MHTK/ODFiSF3H4ZCx+CRA+F9Y -m1FdV53B5f88zHIhbsTp6aF31ywXJsM/65roCwO66bNKcuszCVut5mIxauivL9Wv -Hld2j383LS4CXN1jyfJxuCZA3xWNdUQ/eb3mHZnhQyw+rW++uaT+DjUZUWOxw961 -kj5ReAFziqQjyqSI8R5cH0EWLX6VCqrpiUGYGxrdyyC/R14MJsVVNU3GMIuZZxTH -CR+6R8faAQmHJEKVvRNgGQrv6n8Obs3BREM6StXj ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIDoDCCAoigAwIBAgIBMTANBgkqhkiG9w0BAQUFADA5MQswCQYDVQQGEwJKUDEO -MAwGA1UEChMFTEdQS0kxGjAYBgNVBAsTEUFwcGxpY2F0aW9uIENBIEcyMB4XDTA2 -MDMzMTE1MDAwMFoXDTE2MDMzMTE0NTk1OVowOTELMAkGA1UEBhMCSlAxDjAMBgNV -BAoTBUxHUEtJMRowGAYDVQQLExFBcHBsaWNhdGlvbiBDQSBHMjCCASIwDQYJKoZI -hvcNAQEBBQADggEPADCCAQoCggEBALk1xhD422jbB8RATLAdHjbcw0H2z1UVbQh/ -XMZoVeXnV/GWUebhTXgPbkAVcDtl/hHf59PWWDU74Z8C/JRSRi6znmCbAp7JgtL2 -464JT4REtmKbAFFouDqt7GTRMkvplESDtA7OIYlrsDbAmMZLnMI+W2AqCTErLatM -3rGg/VhWwoMdILzEhAmHe6iVl8YljoPgPpMN0cd9c6mo/BkAQC4iuHozQfV4/Vpx -54LZSIhc7KiFhy1tgIlnGmm+EMBaju2IfT5vLDhrN85H2KIxMN5+U2Vsi4ZTQSBs -vUilfq8AWlYSWIHR3IlZ+bXu+E2a2EQpi3mn9yKq6nxctBaIIA0CAwEAAaOBsjCB -rzAdBgNVHQ4EFgQUf7hdjsQYa8Z9zC7prs405xdd4KEwDgYDVR0PAQH/BAQDAgEG -MEwGA1UdHwRFMEMwQaA/oD2kOzA5MQswCQYDVQQGEwJKUDEOMAwGA1UEChMFTEdQ -S0kxGjAYBgNVBAsTEUFwcGxpY2F0aW9uIENBIEcyMA8GA1UdEwEB/wQFMAMBAf8w -HwYDVR0jBBgwFoAUf7hdjsQYa8Z9zC7prs405xdd4KEwDQYJKoZIhvcNAQEFBQAD -ggEBADzYczZABkhKVBn1J0g5JaVuQue2zRvLOTS3m+xPKr535MqE/B3rmyJA1fT7 -aIdy/Eddag5SSuO1XUjGIpbmM21tq/bN18skWoyoRZ4+YYJ9lNUF8Bo1X3EvLlS1 -QQXvhg1S75yYG/EsTDrR84bTjD56L4ZFjoMyJlu/U8oOUVbcmsJaMBkNp57Vqpsg -OWl4IfSXbdEOEUwu0xtasPmXeFwqj1Jl7kxCJcI3MA5tKzWUgwbor0U7BGanMLv5 -4CE7Y259RF06alPvERck/VSyWmxzViHJbC2XpEKzJ2EFIWNt6ii8TxpvQtyYq1XT -HhvAkj+bweY7F1bixJhDJe62ywA= ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIDwzCCAyygAwIBAgIBADANBgkqhkiG9w0BAQQFADCBmDELMAkGA1UEBhMCQVQx -EDAOBgNVBAgTB0F1c3RyaWExDzANBgNVBAcTBlZpZW5uYTFCMEAGA1UEChM5QXJn -ZSBEYXRlbiBPZXN0ZXJyZWljaGlzY2hlIEdlc2VsbHNjaGFmdCBmdWVyIERhdGVu -c2NodXR6MSIwIAYJKoZIhvcNAQkBFhNhLWNlcnRAYXJnZWRhdGVuLmF0MB4XDTAx -MDIxMjExMzAzMFoXDTA5MDIxMjExMzAzMFowgZgxCzAJBgNVBAYTAkFUMRAwDgYD -VQQIEwdBdXN0cmlhMQ8wDQYDVQQHEwZWaWVubmExQjBABgNVBAoTOUFyZ2UgRGF0 -ZW4gT2VzdGVycmVpY2hpc2NoZSBHZXNlbGxzY2hhZnQgZnVlciBEYXRlbnNjaHV0 -ejEiMCAGCSqGSIb3DQEJARYTYS1jZXJ0QGFyZ2VkYXRlbi5hdDCBnzANBgkqhkiG -9w0BAQEFAAOBjQAwgYkCgYEAwgsHqoNtmmrJ86+e1I4hOVBaL4kokqKN2IPOIL+1 -XwY8vfOOUfPEdhWpaC0ldt7VYrksgDiUccgH0FROANWK2GkfKMDzjjXHysR04uEb -Om7Kqjqn0nproOGkFG+QvBZgs+Ws+HXNFJA6V76fU4+JXq4452LSK4Lr5YcBquu3 -NJECAwEAAaOCARkwggEVMB0GA1UdDgQWBBQ0j59zH/G31zRjgK1y2P//tSAWZjCB -xQYDVR0jBIG9MIG6gBQ0j59zH/G31zRjgK1y2P//tSAWZqGBnqSBmzCBmDELMAkG -A1UEBhMCQVQxEDAOBgNVBAgTB0F1c3RyaWExDzANBgNVBAcTBlZpZW5uYTFCMEAG -A1UEChM5QXJnZSBEYXRlbiBPZXN0ZXJyZWljaGlzY2hlIEdlc2VsbHNjaGFmdCBm -dWVyIERhdGVuc2NodXR6MSIwIAYJKoZIhvcNAQkBFhNhLWNlcnRAYXJnZWRhdGVu -LmF0ggEAMAwGA1UdEwQFMAMBAf8wCwYDVR0PBAQDAgEGMBEGCWCGSAGG+EIBAQQE -AwICBDANBgkqhkiG9w0BAQQFAAOBgQBFuJYncqMYB6gXQS3eDOI90BEHfFTKy/dV -AV+K7QdAYikWmqgBheRdPKddJdccPy/Zl/p3ZT7GhDyC5f3wZjcuu8AJ27BNwbCA -x54dgxgCNcyPm79nY8MRtEdEpoRGdSsFKJemz6hpXM++MWFciyrRWIIA44XB0Gv3 -US0spjsDPQ== ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIDdzCCAl+gAwIBAgIEAgAAuTANBgkqhkiG9w0BAQUFADBaMQswCQYDVQQGEwJJ -RTESMBAGA1UEChMJQmFsdGltb3JlMRMwEQYDVQQLEwpDeWJlclRydXN0MSIwIAYD -VQQDExlCYWx0aW1vcmUgQ3liZXJUcnVzdCBSb290MB4XDTAwMDUxMjE4NDYwMFoX -DTI1MDUxMjIzNTkwMFowWjELMAkGA1UEBhMCSUUxEjAQBgNVBAoTCUJhbHRpbW9y -ZTETMBEGA1UECxMKQ3liZXJUcnVzdDEiMCAGA1UEAxMZQmFsdGltb3JlIEN5YmVy -VHJ1c3QgUm9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKMEuyKr -mD1X6CZymrV51Cni4eiVgLGw41uOKymaZN+hXe2wCQVt2yguzmKiYv60iNoS6zjr -IZ3AQSsBUnuId9Mcj8e6uYi1agnnc+gRQKfRzMpijS3ljwumUNKoUMMo6vWrJYeK -mpYcqWe4PwzV9/lSEy/CG9VwcPCPwBLKBsua4dnKM3p31vjsufFoREJIE9LAwqSu -XmD+tqYF/LTdB1kC1FkYmGP1pWPgkAx9XbIGevOF6uvUA65ehD5f/xXtabz5OTZy -dc93Uk3zyZAsuT3lySNTPx8kmCFcB5kpvcY67Oduhjprl3RjM71oGDHweI12v/ye -jl0qhqdNkNwnGjkCAwEAAaNFMEMwHQYDVR0OBBYEFOWdWTCCR1jMrPoIVDaGezq1 -BE3wMBIGA1UdEwEB/wQIMAYBAf8CAQMwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3 -DQEBBQUAA4IBAQCFDF2O5G9RaEIFoN27TyclhAO992T9Ldcw46QQF+vaKSm2eT92 -9hkTI7gQCvlYpNRhcL0EYWoSihfVCr3FvDB81ukMJY2GQE/szKN+OMY3EU/t3Wgx -jkzSswF07r51XgdIGn9w/xZchMB5hbgF/X++ZRGjD8ACtPhSNzkE1akxehi/oCr0 -Epn3o0WC4zxe9Z2etciefC7IpJ5OCBRLbf1wbWsaY71k5h+3zvDyny67G7fyUIhz -ksLi4xaNmjICq44Y3ekQEe5+NauQrz4wlHrQMz2nZQ/1/I6eYs9HRCwBXbsdtTLS -R9I4LtD+gdwyah617jzV/OeBHRnDJELqYzmp ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIDlDCCAnygAwIBAgIQWAsFbFMk27JQVxhf+eWmUDANBgkqhkiG9w0BAQUFADAn -MQswCQYDVQQGEwJCRTEYMBYGA1UEAxMPQmVsZ2l1bSBSb290IENBMB4XDTAzMDEy -NjIzMDAwMFoXDTE0MDEyNjIzMDAwMFowJzELMAkGA1UEBhMCQkUxGDAWBgNVBAMT -D0JlbGdpdW0gUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB -AMihcekcRkJ5eHFvna6pqKsot03HIOswkVp19eLSz8hMFJhCWK3HEcVAQGpa+XQS -J4fpnOVxTiIs0RIYqjBeoiG52bv/9nTrMQHnO35YD5EWTXaJqAFPrSJmcPpLHZXB -MFjqvNll2Jq0iOtJRlLf0lMVdssUXRlJsW9q09P9vMIt7EU/CT9YvvzU7wCMgTVy -v/cY6pZifSsofxVsY9LKyn0FrMhtB20yvmi4BUCuVJhWPmbxMOjvxKuTXgfeMo8S -dKpbNCNUwOpszv42kqgJF+qhLc9s44Qd3ocuMws8dOIhUDiVLlzg5cYx+dtA+mqh -pIqTm6chBocdJ9PEoclMsG8CAwEAAaOBuzCBuDAOBgNVHQ8BAf8EBAMCAQYwDwYD -VR0TAQH/BAUwAwEB/zBCBgNVHSAEOzA5MDcGBWA4AQEBMC4wLAYIKwYBBQUHAgEW -IGh0dHA6Ly9yZXBvc2l0b3J5LmVpZC5iZWxnaXVtLmJlMB0GA1UdDgQWBBQQ8AxW -m2HqVzq2NZdtn925FI7b5jARBglghkgBhvhCAQEEBAMCAAcwHwYDVR0jBBgwFoAU -EPAMVpth6lc6tjWXbZ/duRSO2+YwDQYJKoZIhvcNAQEFBQADggEBAMhtIlGKYfgP -lm7VILKB+MbcoxYA2s1q52sq+llIp0xJN9dzoWoBZV4yveeX09AuPHPTjHuD79ZC -wT+oqV0PN7p20kC9zC0/00RBSZz9Wyn0AiMiW3Ebv1jZKE4tRfTa57VjRUQRDSp/ -M382SbTObqkCMa5c/ciJv0J71/Fg8teH9lcuen5qE4Ad3OPQYx49cTGxYNSeCMqr -8JTHSHVUgfMbrXec6LKP24OsjzRr6L/D2fVDw2RV6xq9NoY2uiGMlxoh1OotO6y6 -7Kcdq765Sps1LxxcHVGnH1TtEpf/8m6HfUbJdNbv6z195lluBpQE5KJVhzgoaiJe -4r50ErAEQyo= ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIFLDCCBBSgAwIBAgIEOU99hzANBgkqhkiG9w0BAQUFADBaMQswCQYDVQQGEwJX -VzESMBAGA1UEChMJYmVUUlVTVGVkMRswGQYDVQQDExJiZVRSVVNUZWQgUm9vdCBD -QXMxGjAYBgNVBAMTEWJlVFJVU1RlZCBSb290IENBMB4XDTAwMDYyMDE0MjEwNFoX -DTEwMDYyMDEzMjEwNFowWjELMAkGA1UEBhMCV1cxEjAQBgNVBAoTCWJlVFJVU1Rl -ZDEbMBkGA1UEAxMSYmVUUlVTVGVkIFJvb3QgQ0FzMRowGAYDVQQDExFiZVRSVVNU -ZWQgUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANS0c3oT -CjhVAb6JVuGUntS+WutKNHUbYSnE4a0IYCF4SP+00PpeQY1hRIfo7clY+vyTmt9P -6j41ffgzeubx181vSUs9Ty1uDoM6GHh3o8/n9E1z2Jo7Gh2+lVPPIJfCzz4kUmwM -jmVZxXH/YgmPqsWPzGCgc0rXOD8Vcr+il7dw6K/ifhYGTPWqZCZyByWtNfwYsSbX -2P8ZDoMbjNx4RWc0PfSvHI3kbWvtILNnmrRhyxdviTX/507AMhLn7uzf/5cwdO2N -R47rtMNE5qdMf1ZD6Li8tr76g5fmu/vEtpO+GRg+jIG5c4gW9JZDnGdzF5DYCW5j -rEq2I8QBoa2k5MUCAwEAAaOCAfgwggH0MA8GA1UdEwEB/wQFMAMBAf8wggFZBgNV -HSAEggFQMIIBTDCCAUgGCisGAQQBsT4BAAAwggE4MIIBAQYIKwYBBQUHAgIwgfQa -gfFSZWxpYW5jZSBvbiB0aGlzIGNlcnRpZmljYXRlIGJ5IGFueSBwYXJ0eSBhc3N1 -bWVzIGFjY2VwdGFuY2Ugb2YgdGhlIHRoZW4gYXBwbGljYWJsZSBzdGFuZGFyZCB0 -ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB1c2UsIGFuZCBjZXJ0aWZpY2F0aW9uIHBy -YWN0aWNlIHN0YXRlbWVudCwgd2hpY2ggY2FuIGJlIGZvdW5kIGF0IGJlVFJVU1Rl -ZCdzIHdlYiBzaXRlLCBodHRwczovL3d3dy5iZVRSVVNUZWQuY29tL3ZhdWx0L3Rl -cm1zMDEGCCsGAQUFBwIBFiVodHRwczovL3d3dy5iZVRSVVNUZWQuY29tL3ZhdWx0 -L3Rlcm1zMDQGA1UdHwQtMCswKaAnoCWkIzAhMRIwEAYDVQQKEwliZVRSVVNUZWQx -CzAJBgNVBAYTAldXMB0GA1UdDgQWBBQquZtpLjub2M3eKjEENGvKBxirZzAfBgNV -HSMEGDAWgBQquZtpLjub2M3eKjEENGvKBxirZzAOBgNVHQ8BAf8EBAMCAf4wDQYJ -KoZIhvcNAQEFBQADggEBAHlh26Nebhax6nZR+csVm8tpvuaBa58oH2U+3RGFktTo -Qb9+M70j5/Egv6S0phkBxoyNNXxlpE8JpNbYIxUFE6dDea/bow6be3ga8wSGWsb2 -jCBHOElQBp1yZzrwmAOtlmdE/D8QDYZN5AA7KXvOOzuZhmElQITcE2K3+spZ1gMe -1lMBzW1MaFVA4e5rxyoAAEiCswoBw2AqDPeCNe5IhpbkdNQ96gFxugR1QKepfzk5 -mlWXKWWuGVUlBXJH0+gY3Ljpr0NzARJ0o+FcXxVdJPP55PS2Z2cS52QiivalQaYc -tmBjRYoQtLpGEK5BV2VsPyMQPyEQWbfkQN0mDCP2qq4= ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIDqDCCApCgAwIBAgIJAP7c4wEPyUj/MA0GCSqGSIb3DQEBBQUAMDQxCzAJBgNV -BAYTAkZSMRIwEAYDVQQKDAlEaGlteW90aXMxETAPBgNVBAMMCENlcnRpZ25hMB4X -DTA3MDYyOTE1MTMwNVoXDTI3MDYyOTE1MTMwNVowNDELMAkGA1UEBhMCRlIxEjAQ -BgNVBAoMCURoaW15b3RpczERMA8GA1UEAwwIQ2VydGlnbmEwggEiMA0GCSqGSIb3 -DQEBAQUAA4IBDwAwggEKAoIBAQDIaPHJ1tazNHUmgh7stL7qXOEm7RFHYeGifBZ4 -QCHkYJ5ayGPhxLGWkv8YbWkj4Sti993iNi+RB7lIzw7sebYs5zRLcAglozyHGxny -gQcPOJAZ0xH+hrTy0V4eHpbNgGzOOzGTtvKg0KmVEn2lmsxryIRWijOp5yIVUxbw -zBfsV1/pogqYCd7jX5xv3EjjhQsVWqa6n6xI4wmy9/Qy3l40vhx4XUJbzg4ij02Q -130yGLMLLGq/jj8UEYkgDncUtT2UCIf3JR7VsmAA7G8qKCVuKj4YYxclPz5EIBb2 -JsglrgVKtOdjLPOMFlN+XPsRGgjBRmKfIrjxwo1p3Po6WAbfAgMBAAGjgbwwgbkw -DwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUGu3+QTmQtCRZvgHyUtVF9lo53BEw -ZAYDVR0jBF0wW4AUGu3+QTmQtCRZvgHyUtVF9lo53BGhOKQ2MDQxCzAJBgNVBAYT -AkZSMRIwEAYDVQQKDAlEaGlteW90aXMxETAPBgNVBAMMCENlcnRpZ25hggkA/tzj -AQ/JSP8wDgYDVR0PAQH/BAQDAgEGMBEGCWCGSAGG+EIBAQQEAwIABzANBgkqhkiG -9w0BAQUFAAOCAQEAhQMeknH2Qq/ho2Ge6/PAD/Kl1NqV5ta+aDY9fm4fTIrv0Q8h -bV6lUmPOEvjvKtpv6zf+EwLHyzs+ImvaYS5/1HI93TDhHkxAGYwP15zRgzB7mFnc -fca5DClMoTOi62c6ZYTTluLtdkVwj7Ur3vkj1kluPBS1xp81HlDQwY9qcEQCYsuu -HWhBp6pX6FOqB9IG9tUUBguRA3UsbHK1YZWaDYu5Def131TN3ubY1gkIl2PlwS6w -t0QmwCbAr1UwnjvVNioZBPRcHv/PLLf/0P2HQBHVESO7SMAhqaQoLf0V+LBOK/Qw -WyH8EZE0vkHve52Xdf+XlcCWWC/qu0bXu+TZLg== ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIDczCCAlugAwIBAgIQMDAwMDk3Mzc1NzM4NjAwMDANBgkqhkiG9w0BAQUFADBV -MQswCQYDVQQGEwJGUjETMBEGA1UEChMKQ2VydGlOb21pczEcMBoGA1UECxMTQUMg -UmFjaW5lIC0gUm9vdCBDQTETMBEGA1UEAxMKQ2VydGlOb21pczAeFw0wMDExMDkw -MDAwMDBaFw0xMjExMDkwMDAwMDBaMFUxCzAJBgNVBAYTAkZSMRMwEQYDVQQKEwpD -ZXJ0aU5vbWlzMRwwGgYDVQQLExNBQyBSYWNpbmUgLSBSb290IENBMRMwEQYDVQQD -EwpDZXJ0aU5vbWlzMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA8SWb -4mS5RXB3ENSIcfrEzCj/TRUQuT1tMCU0YUfXFSgcPdWglIzCv3kvh07QoB+8xMl+ -fQHvSSduAxnNewz0GBY9rApCPKlP6CcnJr74OSVZIiWt9wLfl4wwhNhZOiikIpZp -EdOXWqRc84P5cUlN3Lwmr1sjCWmHfTSS4cAKxfDbFLfE61etosyoFZUTQbIhb1Bf -JL5xRXAUZudQiU42n/yAoSUrN4FLUfPQNlOe1AB81pIgX8g2ojwxDjfgqSs1JmBF -uLKJ45uVLEenQBPmQCGjL3maV86IRmR3a9UGlgvKAk0NBdh8mrQyQvcUlLBIQBCm -l7wppt6maQHUNEPQSwIDAQABoz8wPTALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/BAUw -AwEB/zAdBgNVHQ4EFgQU+F4ho6ijFeb4tRG7/kIEXU2OgnowDQYJKoZIhvcNAQEF -BQADggEBACe9FJayK6bXkJQrilBFMh75QPdFOks9PJuo86OMUlBDZGYFTCh9Arex -N3KYCnAEzazYIALwr7eASJJDIQMu1Q+pkx/7ACde4kP47F27M2rm+v5HnGooCLz2 -s7Fe/WUycTQqgwF5lNp03m1ce/TvovgkEZeVN5wM/7+SsZLJGDigXGeq48j2g2hn -8OckX9Ciyo0U3/1IVeigNBisiaOlsHSZOEPBZQRiZULob+NVbXVPo8nM1OyP3aHI -LQex1yYcCr9m93nOiZyKkur3Uedf1yMTBe+fflnPFKGYnVqvTGXCKVdHzQBfpILA -AuaC+5ykZhSiSMf8nmL2oPMcLO7YQw4= ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIESjCCAzKgAwIBAgIBAzANBgkqhkiG9w0BAQUFADBBMQswCQYDVQQGEwJLUjEN -MAsGA1UEChMES0lTQTEPMA0GA1UECxMGUk9PVENBMRIwEAYDVQQDEwlDZXJ0UlNB -MDEwHhcNMDAwMzAyMTUwMDAwWhcNMTAwMzAzMTQ1OTU5WjBBMQswCQYDVQQGEwJL -UjENMAsGA1UEChMES0lTQTEPMA0GA1UECxMGUk9PVENBMRIwEAYDVQQDEwlDZXJ0 -UlNBMDEwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDOz+3h6FYdyUsy -YJsqt5eHYQY0aMsXrsB4xcYRW0t8l6u5bE4vAPZTLOnhnFqQaj16ODg1Wq0cClmF -u/VjZwkT6SZP2Dxd71NC3kVi5D7NcqT6s8DgH46U4mUtVcEVkixv80PUNQUFNDeg -LLRzW/EnJpSa9boSzPp4NaKtVNVmjxHqphlN1xM1VHuRlwNHY7CpD2i+0vSe6o21 -e0S1uS04yQDj5b/GdYkDmf+MSwgPwgUxpE0XEc7DdQ9rsF/QrIatfemgiLnGEtbA -OizSb2wnHar/RZvGAxACafkG758ioDg4gsgkEayhno9Nvnhf37o/gwN9UaP4x12o -kWgfHnLdAgMBAAGjggFLMIIBRzAdBgNVHQ4EFgQU/4pGcjNY6EiIIqoXaNoWSAmL -NZEwHwYDVR0jBBgwFoAU/4pGcjNY6EiIIqoXaNoWSAmLNZEwDgYDVR0PAQH/BAQD -AgEGMBUGA1UdIAQOMAwwCgYIKoMajJpEAgEwMAYDVR0RBCkwJ6QlMCMxITAfBgNV -BAMMGO2VnOq1reygleuztOuztO2YuOyEvO2EsDAwBgNVHRIEKTAnpCUwIzEhMB8G -A1UEAwwY7ZWc6rWt7KCV67O067O07Zi47IS87YSwMBIGA1UdEwEB/wQIMAYBAf8C -AQEwDAYDVR0kBAUwA4ABADBYBgNVHR8EUTBPME2gS6BJhkdsZGFwOi8vZGlyc3lz -LnJvb3RjYS5vci5rcjozODkvQ049Uk9PVC1SU0EtQ1JMLCBPVT1ST09UQ0EsIE89 -S0lTQSwgQz1LUjANBgkqhkiG9w0BAQUFAAOCAQEALDykI2xC+IkoR1B84+bnIy02 -NsaIKpGY+x58D6udEa11rORcazERdDNib9QGkRHGcnSYL7Bi+zQprxTyxmTgv6vL -V7lhnPNiTTN512YqUczcAFQFAVZ+jLaOE/QtmVHhmni8VVFKSdpbC4L7Qz3azZMJ -y7WjCcOwfVlIopvY+zfDbw436gWXv9Juocjow/vzrTLIVZI0QuDUEuXU7SGK55iS -/1zXpWaqv/E6fC3C4FU1BdqRagdT0YWxlMcmDRtoKQjBIZMPa6JguFOvRNlkXdNu -m4QSeDEY2nO/rCT4qy2/Dn66ewnKWomoLFLMTHSt2V+zt9YF90FfceVmGQYleQ== ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIEvTCCA6WgAwIBAgIBADANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJFVTEn -MCUGA1UEChMeQUMgQ2FtZXJmaXJtYSBTQSBDSUYgQTgyNzQzMjg3MSMwIQYDVQQL -ExpodHRwOi8vd3d3LmNoYW1iZXJzaWduLm9yZzEiMCAGA1UEAxMZQ2hhbWJlcnMg -b2YgQ29tbWVyY2UgUm9vdDAeFw0wMzA5MzAxNjEzNDNaFw0zNzA5MzAxNjEzNDRa -MH8xCzAJBgNVBAYTAkVVMScwJQYDVQQKEx5BQyBDYW1lcmZpcm1hIFNBIENJRiBB -ODI3NDMyODcxIzAhBgNVBAsTGmh0dHA6Ly93d3cuY2hhbWJlcnNpZ24ub3JnMSIw -IAYDVQQDExlDaGFtYmVycyBvZiBDb21tZXJjZSBSb290MIIBIDANBgkqhkiG9w0B -AQEFAAOCAQ0AMIIBCAKCAQEAtzZV5aVdGDDg2olUkfzIx1L4L1DZ77F1c2VHfRtb -unXF/KGIJPov7coISjlUxFF6tdpg6jg8gbLL8bvZkSM/SAFwdakFKq0fcfPJVD0d -BmpAPrMMhe5cG3nCYsS4No41XQEMIwRHNaqbYE6gZj3LJgqcQKH0XZi/caulAGgq -7YN6D6IUtdQis4CwPAxaUWktWBiP7Zme8a7ileb2R6jWDA+wWFjbw2Y3npuRVDM3 -0pQcakjJyfKl2qUMI/cjDpwyVV5xnIQFUZot/eZOKjRa3spAN2cMVCFVd9oKDMyX -roDclDZK9D7ONhMeU+SsTjoF7Nuucpw4i9A5O4kKPnf+dQIBA6OCAUQwggFAMBIG -A1UdEwEB/wQIMAYBAf8CAQwwPAYDVR0fBDUwMzAxoC+gLYYraHR0cDovL2NybC5j -aGFtYmVyc2lnbi5vcmcvY2hhbWJlcnNyb290LmNybDAdBgNVHQ4EFgQU45T1sU3p -26EpW1eLTXYGduHRooowDgYDVR0PAQH/BAQDAgEGMBEGCWCGSAGG+EIBAQQEAwIA -BzAnBgNVHREEIDAegRxjaGFtYmVyc3Jvb3RAY2hhbWJlcnNpZ24ub3JnMCcGA1Ud -EgQgMB6BHGNoYW1iZXJzcm9vdEBjaGFtYmVyc2lnbi5vcmcwWAYDVR0gBFEwTzBN -BgsrBgEEAYGHLgoDATA+MDwGCCsGAQUFBwIBFjBodHRwOi8vY3BzLmNoYW1iZXJz -aWduLm9yZy9jcHMvY2hhbWJlcnNyb290Lmh0bWwwDQYJKoZIhvcNAQEFBQADggEB -AAxBl8IahsAifJ/7kPMa0QOx7xP5IV8EnNrJpY0nbJaHkb5BkAFyk+cefV/2icZd -p0AJPaxJRUXcLo0waLIJuvvDL8y6C98/d3tGfToSJI6WjzwFCm/SlCgdbQzALogi -1djPHRPH8EjX1wWnz8dHnjs8NMiAT9QUu/wNUPf6s+xCX6ndbcj0dc97wXImsQEc -XCz9ek60AcUFV7nnPKoF2YjpB0ZBzu9Bga5Y34OirsrXdx/nADydb47kMgkdTXg0 -eDQ8lJsm7U9xxhl6vSAiSFr+S30Dt+dYvsYyTnQeaN2oaFuzPu5ifdmA6Ap1erfu -tGWaIZDgqtCYvDi1czyL+Nw= ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIDQzCCAiugAwIBAgIQX/h7KCtU3I1CoxW1aMmt/zANBgkqhkiG9w0BAQUFADA1 -MRYwFAYDVQQKEw1DaXNjbyBTeXN0ZW1zMRswGQYDVQQDExJDaXNjbyBSb290IENB -IDIwNDgwHhcNMDQwNTE0MjAxNzEyWhcNMjkwNTE0MjAyNTQyWjA1MRYwFAYDVQQK -Ew1DaXNjbyBTeXN0ZW1zMRswGQYDVQQDExJDaXNjbyBSb290IENBIDIwNDgwggEg -MA0GCSqGSIb3DQEBAQUAA4IBDQAwggEIAoIBAQCwmrmrp68Kd6ficba0ZmKUeIhH -xmJVhEAyv8CrLqUccda8bnuoqrpu0hWISEWdovyD0My5jOAmaHBKeN8hF570YQXJ -FcjPFto1YYmUQ6iEqDGYeJu5Tm8sUxJszR2tKyS7McQr/4NEb7Y9JHcJ6r8qqB9q -VvYgDxFUl4F1pyXOWWqCZe+36ufijXWLbvLdT6ZeYpzPEApk0E5tzivMW/VgpSdH -jWn0f84bcN5wGyDWbs2mAag8EtKpP6BrXruOIIt6keO1aO6g58QBdKhTCytKmg9l -Eg6CTY5j/e/rmxrbU6YTYK/CfdfHbBcl1HP7R2RQgYCUTOG/rksc35LtLgXfAgED -o1EwTzALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUJ/PI -FR5umgIJFq0roIlgX9p7L6owEAYJKwYBBAGCNxUBBAMCAQAwDQYJKoZIhvcNAQEF -BQADggEBAJ2dhISjQal8dwy3U8pORFBi71R803UXHOjgxkhLtv5MOhmBVrBW7hmW -Yqpao2TB9k5UM8Z3/sUcuuVdJcr18JOagxEu5sv4dEX+5wW4q+ffy0vhN4TauYuX -cB7w4ovXsNgOnbFp1iqRe6lJT37mjpXYgyc81WhJDtSd9i7rp77rMKSsH0T8lasz -Bvt9YAretIpjsJyp8qS5UwGH0GikJ3+r/+n6yUA4iGe0OcaEb1fJU9u6ju7AQ7L4 -CYNu/2bPPu8Xs1gYJQk0XuPL1hS27PKSb3TkL4Eq1ZKR4OCXPDJoBYVL0fdX4lId -kxpUnwVwwEpxYB5DC2Ae/qPOgRnhCzU= ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIICPTCCAaYCEQDNun9W8N/kvFT+IqyzcqpVMA0GCSqGSIb3DQEBAgUAMF8xCzAJ -BgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE3MDUGA1UECxMuQ2xh -c3MgMSBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw05 -NjAxMjkwMDAwMDBaFw0yODA4MDEyMzU5NTlaMF8xCzAJBgNVBAYTAlVTMRcwFQYD -VQQKEw5WZXJpU2lnbiwgSW5jLjE3MDUGA1UECxMuQ2xhc3MgMSBQdWJsaWMgUHJp -bWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCBnzANBgkqhkiG9w0BAQEFAAOB -jQAwgYkCgYEA5Rm/baNWYS2ZSHH2Z965jeu3noaACpEO+jglr0aIguVzqKCbJF0N -H8xlbgyw0FaEGIeaBpsQoXPftFg5a27B9hXVqKg/qhIGjTGsf7A01480Z4gJzRQR -4k5FVmkfeAKA2txHkSm7NsljXMXg1y2He6G3MrB7MLoqLzGq7qNn2tsCAwEAATAN -BgkqhkiG9w0BAQIFAAOBgQBMP7iLxmjf7kMzDl3ppssHhE16M/+SG/Q2rdiVIjZo -EWx8QszznC7EBz8UsA9P/5CSdvnivErpj82ggAr3xSnxgiJduLHdgSOjeyUVRjB5 -FvjqBUuUfx3CHMjjt/QQQDwTw18fU+hI5Ia0e6E1sHslurjTjqs/OJ0ANACY89Fx -lA== ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIDAjCCAmsCEEzH6qqYPnHTkxD4PTqJkZIwDQYJKoZIhvcNAQEFBQAwgcExCzAJ -BgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xh -c3MgMSBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcy -MTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3Jp -emVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMB4X -DTk4MDUxODAwMDAwMFoXDTI4MDgwMTIzNTk1OVowgcExCzAJBgNVBAYTAlVTMRcw -FQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgMSBQdWJsaWMg -UHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEo -YykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5 -MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMIGfMA0GCSqGSIb3DQEB -AQUAA4GNADCBiQKBgQCq0Lq+Fi24g9TK0g+8djHKlNgdk4xWArzZbxpvUjZudVYK -VdPfQ4chEWWKfo+9Id5rMj8bhDSVBZ1BNeuS65bdqlk/AVNtmU/t5eIqWpDBucSm -Fc/IReumXY6cPvBkJHalzasab7bYe1FhbqZ/h8jit+U03EGI6glAvnOSPWvndQID -AQABMA0GCSqGSIb3DQEBBQUAA4GBAKlPww3HZ74sy9mozS11534Vnjty637rXC0J -h9ZrbWB85a7FkCMMXErQr7Fd88e2CtvgFZMN3QO8x3aKtd1Pw5sTdbgBwObJW2ul -uIncrKTdcu1OofdPvAbT6shkdHvClUGcZXNY8ZCaPGqxmMnEh7zPRW1F4m4iP/68 -DzFc6PLZ ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIDkjCCAnqgAwIBAgIRAIW9S/PY2uNp9pTXX8OlRCMwDQYJKoZIhvcNAQEFBQAw -PTELMAkGA1UEBhMCRlIxETAPBgNVBAoTCENlcnRwbHVzMRswGQYDVQQDExJDbGFz -cyAyIFByaW1hcnkgQ0EwHhcNOTkwNzA3MTcwNTAwWhcNMTkwNzA2MjM1OTU5WjA9 -MQswCQYDVQQGEwJGUjERMA8GA1UEChMIQ2VydHBsdXMxGzAZBgNVBAMTEkNsYXNz -IDIgUHJpbWFyeSBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANxQ -ltAS+DXSCHh6tlJw/W/uz7kRy1134ezpfgSN1sxvc0NXYKwzCkTsA18cgCSR5aiR -VhKC9+Ar9NuuYS6JEI1rbLqzAr3VNsVINyPi8Fo3UjMXEuLRYE2+L0ER4/YXJQyL -kcAbmXuZVg2v7tK8R1fjeUl7NIknJITesezpWE7+Tt9avkGtrAjFGA7v0lPubNCd -EgETjdyAYveVqUSISnFOYFWe2yMZeVYHDD9jC1yw4r5+FfyUM1hBOHTE4Y+L3yas -H7WLO7dDWWuwJKZtkIvEcupdM5i3y95ee++U8Rs+yskhwcWYAqqi9lt3m/V+llU0 -HGdpwPFC40es/CgcZlUCAwEAAaOBjDCBiTAPBgNVHRMECDAGAQH/AgEKMAsGA1Ud -DwQEAwIBBjAdBgNVHQ4EFgQU43Mt38sOKAze3bOkynm4jrvoMIkwEQYJYIZIAYb4 -QgEBBAQDAgEGMDcGA1UdHwQwMC4wLKAqoCiGJmh0dHA6Ly93d3cuY2VydHBsdXMu -Y29tL0NSTC9jbGFzczIuY3JsMA0GCSqGSIb3DQEBBQUAA4IBAQCnVM+IRBnL39R/ -AN9WM2K191EBkOvDP9GIROkkXe/nFL0gt5o8AP5tn9uQ3Nf0YtaLcF3n5QRIqWh8 -yfFC82x/xXp8HVGIutIKPidd3i1RTtMTZGnkLuPT55sJmabglZvOGtd/vjzOUrMR -FcEPF80Du5wlFbqidon8BvEY0JNLDnyCt6X09l/+7UCmnYR0ObncHoUW2ikbhiMA -ybuJfm6AiB4vFLQDJKgybwOaRywwvlbGp0ICcBvqQNi6BQNwB6SW//1IMwrh3KWB -kJtN3X3n57LNXMhqlfil9o3EXXgIvnsG1knPGTZQIy4I5p4FTUcY1Rbpsda2ENW7 -l7+ijrRU ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIICPDCCAaUCEC0b/EoXjaOR6+f/9YtFvgswDQYJKoZIhvcNAQECBQAwXzELMAkG -A1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFz -cyAyIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk2 -MDEyOTAwMDAwMFoXDTI4MDgwMTIzNTk1OVowXzELMAkGA1UEBhMCVVMxFzAVBgNV -BAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAyIFB1YmxpYyBQcmlt -YXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUAA4GN -ADCBiQKBgQC2WoujDWojg4BrzzmH9CETMwZMJaLtVRKXxaeAufqDwSCg+i8VDXyh -YGt+eSz6Bg86rvYbb7HS/y8oUl+DfUvEerf4Zh+AVPy3wo5ZShRXRtGak75BkQO7 -FYCTXOvnzAhsPz6zSvz/S2wj1VCCJkQZjiPDceoZJEcEnnW/yKYAHwIDAQABMA0G -CSqGSIb3DQEBAgUAA4GBAIobK/o5wXTXXtgZZKJYSi034DNHD6zt96rbHuSLBlxg -J8pFUs4W7z8GZOeUaHxgMxURaa+dYo2jA1Rrpr7l7gUYYAS/QoD90KioHgE796Nc -r6Pc5iaAIzy4RHT3Cq5Ji2F4zCS/iIqnDupzGUH9TQPwiNHleI2lKk/2lw0Xd8rY ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIDAzCCAmwCEQC5L2DMiJ+hekYJuFtwbIqvMA0GCSqGSIb3DQEBBQUAMIHBMQsw -CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xPDA6BgNVBAsTM0Ns -YXNzIDIgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBH -MjE6MDgGA1UECxMxKGMpIDE5OTggVmVyaVNpZ24sIEluYy4gLSBGb3IgYXV0aG9y -aXplZCB1c2Ugb25seTEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1c3QgTmV0d29yazAe -Fw05ODA1MTgwMDAwMDBaFw0yODA4MDEyMzU5NTlaMIHBMQswCQYDVQQGEwJVUzEX -MBUGA1UEChMOVmVyaVNpZ24sIEluYy4xPDA6BgNVBAsTM0NsYXNzIDIgUHVibGlj -IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMjE6MDgGA1UECxMx -KGMpIDE5OTggVmVyaVNpZ24sIEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25s -eTEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1c3QgTmV0d29yazCBnzANBgkqhkiG9w0B -AQEFAAOBjQAwgYkCgYEAp4gBIXQs5xoD8JjhlzwPIQjxnNuX6Zr8wgQGE75fUsjM -HiwSViy4AWkszJkfrbCWrnkE8hM5wXuYuggs6MKEEyyqaekJ9MepAqRCwiNPStjw -DqL7MWzJ5m+ZJwf15vRMeJ5t60aG+rmGyVTyssSv1EYcWskVMP8NbPUtDm3Of3cC -AwEAATANBgkqhkiG9w0BAQUFAAOBgQByLvl/0fFx+8Se9sVeUYpAmLho+Jscg9ji -nb3/7aHmZuovCfTK1+qlK5X2JGCGTUQug6XELaDTrnhpb3LabK4I8GOSN+a7xDAX -rXfMSTWqz9iP0b63GJZHc2pUIjRkLbYWm1lbtFFZOrMLFPQS32eg9K0yZF6xRnIn -jBJ7xUS0rg== ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIICPDCCAaUCEHC65B0Q2Sk0tjjKewPMur8wDQYJKoZIhvcNAQECBQAwXzELMAkG -A1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFz -cyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk2 -MDEyOTAwMDAwMFoXDTI4MDgwMTIzNTk1OVowXzELMAkGA1UEBhMCVVMxFzAVBgNV -BAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAzIFB1YmxpYyBQcmlt -YXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUAA4GN -ADCBiQKBgQDJXFme8huKARS0EN8EQNvjV69qRUCPhAwL0TPZ2RHP7gJYHyX3KqhE -BarsAx94f56TuZoAqiN91qyFomNFx3InzPRMxnVx0jnvT0Lwdd8KkMaOIG+YD/is -I19wKTakyYbnsZogy1Olhec9vn2a/iRFM9x2Fe0PonFkTGUugWhFpwIDAQABMA0G -CSqGSIb3DQEBAgUAA4GBALtMEivPLCYATxQT3ab7/AoRhIzzKBxnki98tsX63/Do -lbwdj2wsqFHMc9ikwFPwTtYmwHYBV4GSXiHx0bH/59AhWM1pF+NEHJwZRDmJXNyc -AA9WjQKZ7aKQRUzkuxCkPfAyAw7xzvjoyVGM5mKf5p/AfbdynMk2OmufTqj/ZA1k ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIDAjCCAmsCEH3Z/gfPqB63EHln+6eJNMYwDQYJKoZIhvcNAQEFBQAwgcExCzAJ -BgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xh -c3MgMyBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcy -MTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3Jp -emVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMB4X -DTk4MDUxODAwMDAwMFoXDTI4MDgwMTIzNTk1OVowgcExCzAJBgNVBAYTAlVTMRcw -FQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgMyBQdWJsaWMg -UHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEo -YykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5 -MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMIGfMA0GCSqGSIb3DQEB -AQUAA4GNADCBiQKBgQDMXtERXVxp0KvTuWpMmR9ZmDCOFoUgRm1HP9SFIIThbbP4 -pO0M8RcPO/mn+SXXwc+EY/J8Y8+iR/LGWzOOZEAEaMGAuWQcRXfH2G71lSk8UOg0 -13gfqLptQ5GVj0VXXn7F+8qkBOvqlzdUMG+7AUcyM83cV5tkaWH4mx0ciU9cZwID -AQABMA0GCSqGSIb3DQEBBQUAA4GBAFFNzb5cy5gZnBWyATl4Lk0PZ3BwmcYQWpSk -U01UbSuvDV1Ai2TT1+7eVmGSX6bEHRBhNtMsJzzoKQm5EWR0zLVznxxIqbxhAe7i -F6YM40AIOw7n60RzKprxaZLvcRTDOaxxp5EJb+RxBrO6WVcmeQD2+A2iMzAo1KpY -oJ2daZH9 ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIDAjCCAmsCEDKIjprS9esTR/h/xCA3JfgwDQYJKoZIhvcNAQEFBQAwgcExCzAJ -BgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xh -c3MgNCBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcy -MTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3Jp -emVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMB4X -DTk4MDUxODAwMDAwMFoXDTI4MDgwMTIzNTk1OVowgcExCzAJBgNVBAYTAlVTMRcw -FQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgNCBQdWJsaWMg -UHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEo -YykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5 -MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMIGfMA0GCSqGSIb3DQEB -AQUAA4GNADCBiQKBgQC68OTP+cSuhVS5B1f5j8V/aBH4xBewRNzjMHPVKmIquNDM -HO0oW369atyzkSTKQWI8/AIBvxwWMZQFl3Zuoq29YRdsTjCG8FE3KlDHqGKB3FtK -qsGgtG7rL+VXxbErQHDbWk2hjh+9Ax/YA9SPTJlxvOKCzFjomDqG04Y48wApHwID -AQABMA0GCSqGSIb3DQEBBQUAA4GBAIWMEsGnuVAVess+rLhDityq3RS6iYF+ATwj -cSGIL4LcY/oCRaxFWdcqWERbt5+BO5JoPeI3JPV7bI92NZYJqFmduc4jq3TWg/0y -cyfYaT5DdPauxYma51N86Xv2S/PBZYPejYqcPIiNOVn8qj8ijaHBZlCBckztImRP -T8qAkbYp ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIDejCCAmKgAwIBAgIQOeOBVATFCrJH7/7zNs/GmDANBgkqhkiG9w0BAQUFADBO -MQswCQYDVQQGEwJ1czEYMBYGA1UEChMPVS5TLiBHb3Zlcm5tZW50MQ0wCwYDVQQL -EwRGQkNBMRYwFAYDVQQDEw1Db21tb24gUG9saWN5MB4XDTA0MTAwNjE4NDUwOVoX -DTEwMTAwNjE4NTM1NlowTjELMAkGA1UEBhMCdXMxGDAWBgNVBAoTD1UuUy4gR292 -ZXJubWVudDENMAsGA1UECxMERkJDQTEWMBQGA1UEAxMNQ29tbW9uIFBvbGljeTCC -ASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAM8mfLBpTHcAyvTjdBmU+1ph -r2LkvcMA5SSjASag1Nbj0fmmeO/r9AGSqDCQL8ozo2iCICXUN7LtGSC3KRazC1k4 -B0RBYQiRX3FCxWQqKS5GugwypRMl49nevfjJE5CKVxG1V0h4OLUn0ayFyir4QPgl -f51CIOFz20X901qav91H7j4+SRgA5Pa+XIgteCgHrl7S1pvmvfwsuifzlr4w/iD4 -99moD3hxx1MjzbCsf0eMz3EmwRrDMCSeCNNYdCXyFt+w0II3NWiZieG9BKBOlmKe -wWO0GlFS/MneL/he9X2MbxtBgU27KFOum2E/Kerc0LepUx2u9aqW1lx3k1YqSVMC -AwEAAaNUMFIwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0O -BBYEFB4sS/nsZqYekl+HeQPt1cKVt5WDMBAGCSsGAQQBgjcVAQQDAgEAMA0GCSqG -SIb3DQEBBQUAA4IBAQBmNcuhcoLgN86WWb4HzKl+FxrREMhdjB36ElzHcjmi6SyE -WGD+d/lNO2sT6t7bPuYZ9mxjhHoFa+46Gc20zk7hFTFBN2OKNH+Uh8cIo/fL+bB7 -SeHoIdehwuTypq3n80B5oensf6AkisUbNR7Ko+B55oejo8Z8OcZJwhAu/5fSbH7T -uw8b61YaYyy8wx62smnHZ+3KTC2fBDCj4kZSAIPV1Qpr7ek0IJAYVIS6lzw3kYcz -6vpcGVt8LCmajURYdLsGMW6JtFkReeCa0jxiQT1MOum5pUnFAI8PoXdcPUaUekqO -CDEtJXsIYBGs+zrud8xtBs5DpekCyb3iWLoIeq0H ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIEHTCCAwWgAwIBAgIQToEtioJl4AsC7j41AkblPTANBgkqhkiG9w0BAQUFADCB -gTELMAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4G -A1UEBxMHU2FsZm9yZDEaMBgGA1UEChMRQ09NT0RPIENBIExpbWl0ZWQxJzAlBgNV -BAMTHkNPTU9ETyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNjEyMDEwMDAw -MDBaFw0yOTEyMzEyMzU5NTlaMIGBMQswCQYDVQQGEwJHQjEbMBkGA1UECBMSR3Jl -YXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHEwdTYWxmb3JkMRowGAYDVQQKExFDT01P -RE8gQ0EgTGltaXRlZDEnMCUGA1UEAxMeQ09NT0RPIENlcnRpZmljYXRpb24gQXV0 -aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0ECLi3LjkRv3 -UcEbVASY06m/weaKXTuH+7uIzg3jLz8GlvCiKVCZrts7oVewdFFxze1CkU1B/qnI -2GqGd0S7WWaXUF601CxwRM/aN5VCaTwwxHGzUvAhTaHYujl8HJ6jJJ3ygxaYqhZ8 -Q5sVW7euNJH+1GImGEaaP+vB+fGQV+useg2L23IwambV4EajcNxo2f8ESIl33rXp -+2dtQem8Ob0y2WIC8bGoPW43nOIv4tOiJovGuFVDiOEjPqXSJDlqR6sA1KGzqSX+ -DT+nHbrTUcELpNqsOO9VUCQFZUaTNE8tja3G1CEZ0o7KBWFxB3NH5YoZEr0ETc5O -nKVIrLsm9wIDAQABo4GOMIGLMB0GA1UdDgQWBBQLWOWLxkwVN6RAqTCpIb5HNlpW -/zAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zBJBgNVHR8EQjBAMD6g -PKA6hjhodHRwOi8vY3JsLmNvbW9kb2NhLmNvbS9DT01PRE9DZXJ0aWZpY2F0aW9u -QXV0aG9yaXR5LmNybDANBgkqhkiG9w0BAQUFAAOCAQEAPpiem/Yb6dc5t3iuHXIY -SdOH5EOC6z/JqvWote9VfCFSZfnVDeFs9D6Mk3ORLgLETgdxb8CPOGEIqB6BCsAv -IC9Bi5HcSEW88cbeunZrM8gALTFGTO3nnc+IlP8zwFboJIYmuNg4ON8qa90SzMc/ -RxdMosIGlgnW2/4/PEZB31jiVg88O8EckzXZOFKs7sjsLjBOlDW0JB9LeGna8gI4 -zJVSk/BwJVmcIGfE7vmLV2H0knZ9P4SNVbfo5azV8fUZVqZa+5Acr5Pr5RzUZ5dd -BA6+C4OmF4O5MBKgxTMVBbkN+8cFduPYSo38NBejxiEovjBFMR7HeL5YYTisO+IB -ZQ== ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIDnzCCAoegAwIBAgIBJjANBgkqhkiG9w0BAQUFADBxMQswCQYDVQQGEwJERTEc -MBoGA1UEChMTRGV1dHNjaGUgVGVsZWtvbSBBRzEfMB0GA1UECxMWVC1UZWxlU2Vj -IFRydXN0IENlbnRlcjEjMCEGA1UEAxMaRGV1dHNjaGUgVGVsZWtvbSBSb290IENB -IDIwHhcNOTkwNzA5MTIxMTAwWhcNMTkwNzA5MjM1OTAwWjBxMQswCQYDVQQGEwJE -RTEcMBoGA1UEChMTRGV1dHNjaGUgVGVsZWtvbSBBRzEfMB0GA1UECxMWVC1UZWxl -U2VjIFRydXN0IENlbnRlcjEjMCEGA1UEAxMaRGV1dHNjaGUgVGVsZWtvbSBSb290 -IENBIDIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCrC6M14IspFLEU -ha88EOQ5bzVdSq7d6mGNlUn0b2SjGmBmpKlAIoTZ1KXleJMOaAGtuU1cOs7TuKhC -QN/Po7qCWWqSG6wcmtoIKyUn+WkjR/Hg6yx6m/UTAtB+NHzCnjwAWav12gz1Mjwr -rFDa1sPeg5TKqAyZMg4ISFZbavva4VhYAUlfckE8FQYBjl2tqriTtM2e66foai1S -NNs671x1Udrb8zH57nGYMsRUFUQM+ZtV7a3fGAigo4aKSe5TBY8ZTNXeWHmb0moc -QqvF1afPaA+W5OFhmHZhyJF81j4A4pFQh+GdCuatl9Idxjp9y7zaAzTVjlsB9WoH -txa2bkp/AgMBAAGjQjBAMB0GA1UdDgQWBBQxw3kbuvVT1xfgiXotF2wKsyudMzAP -BgNVHRMECDAGAQH/AgEFMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOC -AQEAlGRZrTlk5ynrE/5aw4sTV8gEJPB0d8Bg42f76Ymmg7+Wgnxu1MM9756Abrsp -tJh6sTtU6zkXR34ajgv8HzFZMQSyzhfzLMdiNlXiItiJVbSYSKpk+tYcNthEeFpa -IzpXl/V6ME+un2pMSyuOoAPjPuCp1NJ70rOo4nI8rZ7/gFnkm0W09juwzTkZmDLl -6iFhkOQxIY40sfcvNUqFENrnijchvllj4PKFiDFT1FQUhXB59C4Gdyd1Lx+4ivn+ -xbrYNuSD7Odlt79jWvNGr4GUN9RBjNYj1h7P9WgbRGOiWrqnNVmh5XAFmw4jV5mU -Cm26OWMohpLzGITY+9HPBVZkVw== ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIDtzCCAp+gAwIBAgIQDOfg5RfYRv6P5WD8G/AwOTANBgkqhkiG9w0BAQUFADBl -MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 -d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJv -b3QgQ0EwHhcNMDYxMTEwMDAwMDAwWhcNMzExMTEwMDAwMDAwWjBlMQswCQYDVQQG -EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNl -cnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0EwggEi -MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCtDhXO5EOAXLGH87dg+XESpa7c -JpSIqvTO9SA5KFhgDPiA2qkVlTJhPLWxKISKityfCgyDF3qPkKyK53lTXDGEKvYP -mDI2dsze3Tyoou9q+yHyUmHfnyDXH+Kx2f4YZNISW1/5WBg1vEfNoTb5a3/UsDg+ -wRvDjDPZ2C8Y/igPs6eD1sNuRMBhNZYW/lmci3Zt1/GiSw0r/wty2p5g0I6QNcZ4 -VYcgoc/lbQrISXwxmDNsIumH0DJaoroTghHtORedmTpyoeb6pNnVFzF1roV9Iq4/ -AUaG9ih5yLHa5FcXxH4cDrC0kqZWs72yl+2qp/C3xag/lRbQ/6GW6whfGHdPAgMB -AAGjYzBhMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQW -BBRF66Kv9JLLgjEtUYunpyGd823IDzAfBgNVHSMEGDAWgBRF66Kv9JLLgjEtUYun -pyGd823IDzANBgkqhkiG9w0BAQUFAAOCAQEAog683+Lt8ONyc3pklL/3cmbYMuRC -dWKuh+vy1dneVrOfzM4UKLkNl2BcEkxY5NM9g0lFWJc1aRqoR+pWxnmrEthngYTf -fwk8lOa4JiwgvT2zKIn3X/8i4peEH+ll74fg38FnSbNd67IJKusm7Xi+fT8r87cm -NW1fiQG2SVufAQWbqz0lwcy2f8Lxb4bG+mRo64EtlOtCt/qMHt1i8b5QZ7dsvfPx -H2sMNgcWfzd8qVttevESRmCD1ycEvkvOl77DZypoEd+A5wwzZr8TDRRu838fYxAe -+o0bJW1sj6W3YQGx0qMmoRBxna3iw/nDmVG3KwcIzi7mULKn+gpFL6Lw8g== ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIDrzCCApegAwIBAgIQCDvgVpBCRrGhdWrJWZHHSjANBgkqhkiG9w0BAQUFADBh -MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 -d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBD -QTAeFw0wNjExMTAwMDAwMDBaFw0zMTExMTAwMDAwMDBaMGExCzAJBgNVBAYTAlVT -MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j -b20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IENBMIIBIjANBgkqhkiG -9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4jvhEXLeqKTTo1eqUKKPC3eQyaKl7hLOllsB -CSDMAZOnTjC3U/dDxGkAV53ijSLdhwZAAIEJzs4bg7/fzTtxRuLWZscFs3YnFo97 -nh6Vfe63SKMI2tavegw5BmV/Sl0fvBf4q77uKNd0f3p4mVmFaG5cIzJLv07A6Fpt -43C/dxC//AH2hdmoRBBYMql1GNXRor5H4idq9Joz+EkIYIvUX7Q6hL+hqkpMfT7P -T19sdl6gSzeRntwi5m3OFBqOasv+zbMUZBfHWymeMr/y7vrTC0LUq7dBMtoM1O/4 -gdW7jVg/tRvoSSiicNoxBN33shbyTApOB6jtSj1etX+jkMOvJwIDAQABo2MwYTAO -BgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUA95QNVbR -TLtm8KPiGxvDl7I90VUwHwYDVR0jBBgwFoAUA95QNVbRTLtm8KPiGxvDl7I90VUw -DQYJKoZIhvcNAQEFBQADggEBAMucN6pIExIK+t1EnE9SsPTfrgT1eXkIoyQY/Esr -hMAtudXH/vTBH1jLuG2cenTnmCmrEbXjcKChzUyImZOMkXDiqw8cvpOp/2PV5Adg -06O/nVsJ8dWO41P0jmP6P6fbtGbfYmbW0W5BjfIttep3Sp+dWOIrWcBAI+0tKIJF -PnlUkiaY4IBIqDfv8NZ5YBberOgOzW6sRBc4L0na4UU+Krk2U886UAb3LujEV0ls -YSEY1QSteDwsOoBrp+uvFRTp2InBuThs4pFsiv9kuXclVzDAGySj4dzp30d8tbQk -CAUw7C29C79Fv1C5qfPrmAESrciIxpg0X40KPMbp1ZWVbd4= ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIDxTCCAq2gAwIBAgIQAqxcJmoLQJuPC3nyrkYldzANBgkqhkiG9w0BAQUFADBs -MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 -d3cuZGlnaWNlcnQuY29tMSswKQYDVQQDEyJEaWdpQ2VydCBIaWdoIEFzc3VyYW5j -ZSBFViBSb290IENBMB4XDTA2MTExMDAwMDAwMFoXDTMxMTExMDAwMDAwMFowbDEL -MAkGA1UEBhMCVVMxFTATBgNVBAoTDERpZ2lDZXJ0IEluYzEZMBcGA1UECxMQd3d3 -LmRpZ2ljZXJ0LmNvbTErMCkGA1UEAxMiRGlnaUNlcnQgSGlnaCBBc3N1cmFuY2Ug -RVYgUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMbM5XPm -+9S75S0tMqbf5YE/yc0lSbZxKsPVlDRnogocsF9ppkCxxLeyj9CYpKlBWTrT3JTW -PNt0OKRKzE0lgvdKpVMSOO7zSW1xkX5jtqumX8OkhPhPYlG++MXs2ziS4wblCJEM -xChBVfvLWokVfnHoNb9Ncgk9vjo4UFt3MRuNs8ckRZqnrG0AFFoEt7oT61EKmEFB -Ik5lYYeBQVCmeVyJ3hlKV9Uu5l0cUyx+mM0aBhakaHPQNAQTXKFx01p8VdteZOE3 -hzBWBOURtCmAEvF5OYiiAhF8J2a3iLd48soKqDirCmTCv2ZdlYTBoSUeh10aUAsg -EsxBu24LUTi4S8sCAwEAAaNjMGEwDgYDVR0PAQH/BAQDAgGGMA8GA1UdEwEB/wQF -MAMBAf8wHQYDVR0OBBYEFLE+w2kD+L9HAdSYJhoIAu9jZCvDMB8GA1UdIwQYMBaA -FLE+w2kD+L9HAdSYJhoIAu9jZCvDMA0GCSqGSIb3DQEBBQUAA4IBAQAcGgaX3Nec -nzyIZgYIVyHbIUf4KmeqvxgydkAQV8GK83rZEWWONfqe/EW1ntlMMUu4kehDLI6z -eM7b41N5cdblIZQB2lWHmiRk9opmzN6cN82oNLFpmyPInngiK3BD41VHMWEZ71jF -hS9OMPagMRYjyOfiZRYzy78aG6A9+MpeizGLYAiJLQwGXFK3xPkKmNEVX58Svnw2 -Yzi9RKR/5CYrCsSXaQ3pjOLAEFe4yHYSkVXySGnYvCoCWw9E1CAx2/S6cCZdkGCe -vEsXCS+0yx5DaMkHJ8HSXPfqIbloEpw8nL+e/IBcm2PN7EeqJSdnoDfzAIJ9VNep -+OkuE6N36B9K ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIFijCCA3KgAwIBAgIQDHbanJEMTiye/hXQWJM8TDANBgkqhkiG9w0BAQUFADBf -MQswCQYDVQQGEwJOTDESMBAGA1UEChMJRGlnaU5vdGFyMRowGAYDVQQDExFEaWdp -Tm90YXIgUm9vdCBDQTEgMB4GCSqGSIb3DQEJARYRaW5mb0BkaWdpbm90YXIubmww -HhcNMDcwNTE2MTcxOTM2WhcNMjUwMzMxMTgxOTIxWjBfMQswCQYDVQQGEwJOTDES -MBAGA1UEChMJRGlnaU5vdGFyMRowGAYDVQQDExFEaWdpTm90YXIgUm9vdCBDQTEg -MB4GCSqGSIb3DQEJARYRaW5mb0BkaWdpbm90YXIubmwwggIiMA0GCSqGSIb3DQEB -AQUAA4ICDwAwggIKAoICAQCssFjBAL3YIQgLK5r+blYwBZ8bd5AQQVzDDYcRd46B -8cp86Yxq7Th0Nbva3/m7wAk3tJZzgX0zGpg595NvlX89ubF1h7pRSOiLcD6VBMXY -tsMW2YiwsYcdcNqGtA8Ui3rPENF0NqISe3eGSnnme98CEWilToauNFibJBN4ViIl -HgGLS1Fx+4LMWZZpiFpoU8W5DQI3y0u8ZkqQfioLBQftFl9VkHXYRskbg+IIvvEj -zJkd1ioPgyAVWCeCLvriIsJJsbkBgWqdbZ1Ad2h2TiEqbYRAhU52mXyC8/O3AlnU -JgEbjt+tUwbRrhjd4rI6y9eIOI6sWym5GdOY+RgDz0iChmYLG2kPyes4iHomGgVM -ktck1JbyrFIto0fVUvY//s6EBnCmqj6i8rZWNBhXouSBbefK8GrTx5FrAoNBfBXv -a5pkXuPQPOWx63tdhvvL5ndJzaNl3Pe5nLjkC1+Tz8wwGjIczhxjlaX56uF0i57p -K6kwe6AYHw4YC+VbqdPRbB4HZ4+RS6mKvNJmqpMBiLKR+jFc1abBUggJzQpjotMi -puih2TkGl/VujQKQjBR7P4DNG5y6xFhyI6+2Vp/GekIzKQc/gsnmHwUNzUwoNovT -yD4cxojvXu6JZOkd69qJfjKmadHdzIif0dDJZiHcBmfFlHqabWJMfczgZICynkeO -owIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNV -HQ4EFgQUiGi/4I41xDs4a2L3KDuEgcgM100wDQYJKoZIhvcNAQEFBQADggIBADsC -jcs8MOhuoK3yc7NfniUTBAXT9uOLuwt5zlPe5JbF0a9zvNXD0EBVfEB/zRtfCdXy -fJ9oHbtdzno5wozWmHvFg1Wo1X1AyuAe94leY12hE8JdiraKfADzI8PthV9xdvBo -Y6pFITlIYXg23PFDk9Qlx/KAZeFTAnVR/Ho67zerhChXDNjU1JlWbOOi/lmEtDHo -M/hklJRRl6s5xUvt2t2AC298KQ3EjopyDedTFLJgQT2EkTFoPSdE2+Xe9PpjRchM -Ppj1P0G6Tss3DbpmmPHdy59c91Q2gmssvBNhl0L4eLvMyKKfyvBovWsdst+Nbwed -2o5nx0ceyrm/KkKRt2NTZvFCo+H0Wk1Ya7XkpDOtXHAd3ODy63MUkZoDweoAZbwH -/M8SESIsrqC9OuCiKthZ6SnTGDWkrBFfGbW1G/8iSlzGeuQX7yCpp/Q/rYqnmgQl -nQ7KN+ZQ/YxCKQSa7LnPS3K94gg2ryMvYuXKAdNw23yCIywWMQzGNgeQerEfZ1jE -O1hZibCMjFCz2IbLaKPECudpSyDOwR5WS5WpI2jYMNjD67BVUc3l/Su49bsRn1NU -9jQZjHkJNsphFyUXC4KYcwx3dMPVDceoEkzHp1RxRy4sGn3J4ys7SN4nhKdjNrN9 -j6BkOSQNPXuHr2ZcdBtLc7LljPCGmbjlxd+Ewbfr ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIICZzCCAdCgAwIBAgIBBDANBgkqhkiG9w0BAQUFADBhMQswCQYDVQQGEwJVUzEY -MBYGA1UEChMPVS5TLiBHb3Zlcm5tZW50MQwwCgYDVQQLEwNEb0QxDDAKBgNVBAsT -A1BLSTEcMBoGA1UEAxMTRG9EIENMQVNTIDMgUm9vdCBDQTAeFw0wMDA1MTkxMzEz -MDBaFw0yMDA1MTQxMzEzMDBaMGExCzAJBgNVBAYTAlVTMRgwFgYDVQQKEw9VLlMu -IEdvdmVybm1lbnQxDDAKBgNVBAsTA0RvRDEMMAoGA1UECxMDUEtJMRwwGgYDVQQD -ExNEb0QgQ0xBU1MgMyBSb290IENBMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKB -gQC1MP5kvurMbe2BLPd/6Rm6DmlqKOGpqcuVWB/x5pppU+CIP5HFUbljl6jmIYwT -XjY8qFf6+HAsTGrLvzCnTBbkMlz4ErBR+BZXjS+0TfouqJToKmHUVw1Hzm4sL36Y -Z8wACKu2lhY1woWR5VugCsdmUmLzYXWVF668KlYppeArUwIDAQABoy8wLTAdBgNV -HQ4EFgQUbJyl8FyPbUGNxBc7kFfCD6PNbf4wDAYDVR0TBAUwAwEB/zANBgkqhkiG -9w0BAQUFAAOBgQCvcUT5lyPMaGmMQwdBuoggsyIAQciYoFUczT9usZNcrfoYmrsc -c2/9JEKPh59Rz76Gn+nXikhPCNlplKw/5g8tlw8ok3ZPYt//oM1h+KaGDDE0INx/ -L6j7Ob6V7jhZAmLB3mwVT+DfnbvkeXMk/WNklfdKqJkfSGWVx3u/eDLneg== ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIICZzCCAdCgAwIBAgIBGjANBgkqhkiG9w0BAQUFADBhMQswCQYDVQQGEwJVUzEY -MBYGA1UEChMPVS5TLiBHb3Zlcm5tZW50MQwwCgYDVQQLEwNEb0QxDDAKBgNVBAsT -A1BLSTEcMBoGA1UEAxMTRG9EIFBLSSBNZWQgUm9vdCBDQTAeFw05ODA4MDYxNTAx -MDBaFw0wODA4MDcxNTAxMDBaMGExCzAJBgNVBAYTAlVTMRgwFgYDVQQKEw9VLlMu -IEdvdmVybm1lbnQxDDAKBgNVBAsTA0RvRDEMMAoGA1UECxMDUEtJMRwwGgYDVQQD -ExNEb0QgUEtJIE1lZCBSb290IENBMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKB -gQC5arG1dp5gWLAG69GfVnf0laK3aCAXLKGE65A72UGYsJQ3ENGaE9lW/JoDaLV8 -wrjQIL87bVC34jTvJs2aPjd7oeUaUXjeddt8bYjwRV/fwXl/oUoGx9umpJUuNvEW -1H9P6xJFyzB9jpm+HGW+Oid3wtWKqNq1xsSuMByHlpoXtwIDAQABoy8wLTAdBgNV -HQ4EFgQUxVnSzvGYlVBmqG3eMkvWYTXiRrMwDAYDVR0TBAUwAwEB/zANBgkqhkiG -9w0BAQUFAAOBgQAyPjGMqsgKSbKHr38GlCT6WmkKtCWX6YX/3S3vaf39asluzJX6 -3sTcMByqi0jy7BLYbgKzPvxmuW3yVUlLl6rV6YrId62ezjPmaIqkDI8snEM0BWSW -2ousTPara2J0xvzdC5lj/+ke6LHrO9yhSLRFMk8quccSXtFW6H5ei0+sGg== ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIDcDCCAligAwIBAgIBBTANBgkqhkiG9w0BAQUFADBbMQswCQYDVQQGEwJVUzEY -MBYGA1UEChMPVS5TLiBHb3Zlcm5tZW50MQwwCgYDVQQLEwNEb0QxDDAKBgNVBAsT -A1BLSTEWMBQGA1UEAxMNRG9EIFJvb3QgQ0EgMjAeFw0wNDEyMTMxNTAwMTBaFw0y -OTEyMDUxNTAwMTBaMFsxCzAJBgNVBAYTAlVTMRgwFgYDVQQKEw9VLlMuIEdvdmVy -bm1lbnQxDDAKBgNVBAsTA0RvRDEMMAoGA1UECxMDUEtJMRYwFAYDVQQDEw1Eb0Qg -Um9vdCBDQSAyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwCzB9o07 -rP8/PNZxvrh0IgfscEEV/KtA4weqwcPYn/7aTDq/P8jYKHtLNgHArEUlw9IOCo+F -GGQQPRoTcCpvjtfcjZOzQQ84Ic2tq8I9KgXTVxE3Dc2MUfmT48xGSSGOFLTNyxQ+ -OM1yMe6rEvJl6jQuVl3/7mN1y226kTT8nvP0LRy+UMRC31mI/2qz+qhsPctWcXEF -lrufgOWARVlnQbDrw61gpIB1BhecDvRD4JkOG/t/9bPMsoGCsf0ywbi+QaRktWA6 -WlEwjM7eQSwZR1xJEGS5dKmHQa99brrBuKG/ZTE6BGf5tbuOkooAY7ix5ow4X4P/ -UNU7ol1rshDMYwIDAQABoz8wPTAdBgNVHQ4EFgQUSXS7DF66ev4CVO97oMaVxgmA -cJYwCwYDVR0PBAQDAgGGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEFBQAD -ggEBAJiRjT+JyLv1wGlzKTs1rLqzCHY9cAmS6YREIQF9FHYb7lFsHY0VNy17MWn0 -mkS4r0bMNPojywMnGdKDIXUr5+AbmSbchECV6KjSzPZYXGbvP0qXEIIdugqi3VsG -K52nZE7rLgE1pLQ/E61V5NVzqGmbEfGY8jEeb0DU+HifjpGgb3AEkGaqBivO4XqS -tX3h4NGW56E6LcyxnR8FRO2HmdNNGnA5wQQM5X7Z8a/XIA7xInolpHOZzD+kByeW -qKKV7YK5FtOeC4fCwfKI9WLfaN/HvGlR7bFc3FRUKQ8JOZqsA8HbDE2ubwp6Fknx -v5HSOJTT9pUst2zJQraNypCNhdk= ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIECTCCAvGgAwIBAgIQDV6ZCtadt3js2AdWO4YV2TANBgkqhkiG9w0BAQUFADBb -MQswCQYDVQQGEwJVUzEgMB4GA1UEChMXRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3Qx -ETAPBgNVBAsTCERTVCBBQ0VTMRcwFQYDVQQDEw5EU1QgQUNFUyBDQSBYNjAeFw0w -MzExMjAyMTE5NThaFw0xNzExMjAyMTE5NThaMFsxCzAJBgNVBAYTAlVTMSAwHgYD -VQQKExdEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdDERMA8GA1UECxMIRFNUIEFDRVMx -FzAVBgNVBAMTDkRTVCBBQ0VTIENBIFg2MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A -MIIBCgKCAQEAuT31LMmU3HWKlV1j6IR3dma5WZFcRt2SPp/5DgO0PWGSvSMmtWPu -ktKe1jzIDZBfZIGxqAgNTNj50wUoUrQBJcWVHAx+PhCEdc/BGZFjz+iokYi5Q1K7 -gLFViYsx+tC3dr5BPTCapCIlF3PoHuLTrCq9Wzgh1SpL11V94zpVvddtawJXa+ZH -fAjIgrrep4c9oW24MFbCswKBXy314powGCi4ZtPLAZZv6opFVdbgnf9nKxcCpk4a -ahELfrd755jWjHZvwTvbUJN+5dCOHze4vbrGn2zpfDPyMjwmR/onJALJfh1biEIT -ajV8fTXpLmaRcpPVMibEdPVTo7NdmvYJywIDAQABo4HIMIHFMA8GA1UdEwEB/wQF -MAMBAf8wDgYDVR0PAQH/BAQDAgHGMB8GA1UdEQQYMBaBFHBraS1vcHNAdHJ1c3Rk -c3QuY29tMGIGA1UdIARbMFkwVwYKYIZIAWUDAgEBATBJMEcGCCsGAQUFBwIBFjto -dHRwOi8vd3d3LnRydXN0ZHN0LmNvbS9jZXJ0aWZpY2F0ZXMvcG9saWN5L0FDRVMt -aW5kZXguaHRtbDAdBgNVHQ4EFgQUCXIGThhDD+XWzMNqizF7eI+og7gwDQYJKoZI -hvcNAQEFBQADggEBAKPYjtay284F5zLNAdMEA+V25FYrnJmQ6AgwbN99Pe7lv7Uk -QIRJ4dEorsTCOlMwiPH1d25Ryvr/ma8kXxug/fKshMrfqfBfBC6tFr8hlxCBPeP/ -h40y3JTlR4peahPJlJU90u7INJXQgNStMgiAVDzgvVJT11J8smk/f3rPanTK+gQq -nExaBqXpIK1FZg9p8d2/6eMyi/rgwYZNcjwu2JN4Cir42NInPRmJX1p7ijvMDNpR -rscL9yuwNwXsvFcj4jjSm2jzVhKIT0J8uDHEtdvkyCE06UgRNe76x5JXxZ805Mf2 -9w4LTJxoeHtxMcfrHuBnQfO3oKfN5XozNmr6mis= ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIDSjCCAjKgAwIBAgIQRK+wgNajJ7qJMDmGLvhAazANBgkqhkiG9w0BAQUFADA/ -MSQwIgYDVQQKExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4xFzAVBgNVBAMT -DkRTVCBSb290IENBIFgzMB4XDTAwMDkzMDIxMTIxOVoXDTIxMDkzMDE0MDExNVow -PzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QgQ28uMRcwFQYDVQQD -Ew5EU1QgUm9vdCBDQSBYMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB -AN+v6ZdQCINXtMxiZfaQguzH0yxrMMpb7NnDfcdAwRgUi+DoM3ZJKuM/IUmTrE4O -rz5Iy2Xu/NMhD2XSKtkyj4zl93ewEnu1lcCJo6m67XMuegwGMoOifooUMM0RoOEq -OLl5CjH9UL2AZd+3UWODyOKIYepLYYHsUmu5ouJLGiifSKOeDNoJjj4XLh7dIN9b -xiqKqy69cK3FCxolkHRyxXtqqzTWMIn/5WgTe1QLyNau7Fqckh49ZLOMxt+/yUFw -7BZy1SbsOFU5Q9D8/RhcQPGX69Wam40dutolucbY38EVAjqr2m7xPi71XAicPNaD -aeQQmxkqtilX4+U9m5/wAl0CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNV -HQ8BAf8EBAMCAQYwHQYDVR0OBBYEFMSnsaR7LHH62+FLkHX/xBVghYkQMA0GCSqG -SIb3DQEBBQUAA4IBAQCjGiybFwBcqR7uKGY3Or+Dxz9LwwmglSBd49lZRNI+DT69 -ikugdB/OEIKcdBodfpga3csTS7MgROSR6cz8faXbauX+5v3gTt23ADq1cEmv8uXr -AvHRAosZy5Q6XkjEGB5YGV8eAlrwDPGxrancWYaLbumR9YbK+rlmM6pZW87ipxZz -R8srzJmwN0jP41ZL9c8PDHIyh8bwRLtTcm1D9SZImlJnt1ir/md2cXjbDaJWFBM5 -JDGFoqgCWjBH4d1QB7wCCZAA62RjYJsWvIjJEubSfZGL+T0yjWW06XyxV3bqxbYo -Ob8VZRzI9neWagqNdwvYkQsEjgfbKbYK7p2CNTUQ ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIDOzCCAiOgAwIBAgIRANAeRlAAACmMAAAAAgAAAAIwDQYJKoZIhvcNAQEFBQAw -PzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QgQ28uMRcwFQYDVQQD -Ew5EU1QgUm9vdCBDQSBYNDAeFw0wMDA5MTMwNjIyNTBaFw0yMDA5MTMwNjIyNTBa -MD8xJDAiBgNVBAoTG0RpZ2l0YWwgU2lnbmF0dXJlIFRydXN0IENvLjEXMBUGA1UE -AxMORFNUIFJvb3QgQ0EgWDQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB -AQCthX3OFEYY8gSeIYur0O4ypOT68HnDrjLfIutL5PZHRwQGjzCPb9PFo/ihboJ8 -RvfGhBAqpQCo47zwYEhpWm1jB+L/OE/dBBiyn98krfU2NiBKSom2J58RBeAwHGEy -cO+lewyjVvbDDLUy4CheY059vfMjPAftCRXjqSZIolQb9FdPcAoa90mFwB7rKniE -J7vppdrUScSS0+eBrHSUPLdvwyn4RGp+lSwbWYcbg5EpSpE0GRJdchic0YDjvIoC -YHpe7Rkj93PYRTQyU4bhC88ck8tMqbvRYqMRqR+vobbkrj5LLCOQCHV5WEoxWh+0 -E2SpIFe7RkV++MmpIAc0h1tZAgMBAAGjMjAwMA8GA1UdEwEB/wQFMAMBAf8wHQYD -VR0OBBYEFPCD6nPIP1ubWzdf9UyPWvf0hki9MA0GCSqGSIb3DQEBBQUAA4IBAQCE -G85wl5eEWd7adH6XW/ikGN5salvpq/Fix6yVTzE6CrhlP5LBdkf6kx1bSPL18M45 -g0rw2zA/MWOhJ3+S6U+BE0zPGCuu8YQaZibR7snm3HiHUaZNMu5c8D0x0bcMxDjY -AVVcHCoNiL53Q4PLW27nbY6wwG0ffFKmgV3blxrYWfuUDgGpyPwHwkfVFvz9qjaV -mf12VJffL6W8omBPtgteb6UaT/k1oJ7YI0ldGf+ngpVbRhD+LC3cUtT6GO/BEPZu -8YTV/hbiDH5v3khVqMIeKT6o8IuXGG7F6a6vKwP1F1FwTXf4UC/ivhme7vdUH7B/ -Vv4AEbT8dNfEeFxrkDbh ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIID2DCCAsACEQDQHkCLAAACfAAAAAIAAAABMA0GCSqGSIb3DQEBBQUAMIGpMQsw -CQYDVQQGEwJ1czENMAsGA1UECBMEVXRhaDEXMBUGA1UEBxMOU2FsdCBMYWtlIENp -dHkxJDAiBgNVBAoTG0RpZ2l0YWwgU2lnbmF0dXJlIFRydXN0IENvLjERMA8GA1UE -CxMIRFNUQ0EgWDExFjAUBgNVBAMTDURTVCBSb290Q0EgWDExITAfBgkqhkiG9w0B -CQEWEmNhQGRpZ3NpZ3RydXN0LmNvbTAeFw05ODEyMDExODE4NTVaFw0wODExMjgx -ODE4NTVaMIGpMQswCQYDVQQGEwJ1czENMAsGA1UECBMEVXRhaDEXMBUGA1UEBxMO -U2FsdCBMYWtlIENpdHkxJDAiBgNVBAoTG0RpZ2l0YWwgU2lnbmF0dXJlIFRydXN0 -IENvLjERMA8GA1UECxMIRFNUQ0EgWDExFjAUBgNVBAMTDURTVCBSb290Q0EgWDEx -ITAfBgkqhkiG9w0BCQEWEmNhQGRpZ3NpZ3RydXN0LmNvbTCCASIwDQYJKoZIhvcN -AQEBBQADggEPADCCAQoCggEBANLGJrbnpT3BxGjVUG9TxW9JEwm4ryxIjRRqoxdf -WvnTLnUv2Chi0ZMv/E3Uq4flCMeZ55I/db3rJbQVwZsZPdJEjdd0IG03Ao9pk1uK -xBmd9LIO/BZsubEFkoPRhSxglD5FVaDZqwgh5mDoO3TymVBRaNADLbGAvqPYUrBE -zUNKcI5YhZXhTizWLUFv1oTnyJhEykfbLCSlaSbPa7gnYsP0yXqSI+0TZ4KuRS5F -5X5yP4WdlGIQ5jyRoa13AOAV7POEgHJ6jm5gl8ckWRA0g1vhpaRptlc1HHhZxtMv -OnNn7pTKBBMFYgZwI7P0fO5F2WQLW0mqpEPOJsREEmy43XkCAwEAATANBgkqhkiG -9w0BAQUFAAOCAQEAojeyP2n714Z5VEkxlTMr89EJFEliYIalsBHiUMIdBlc+Legz -ZL6bqq1fG03UmZWii5rJYnK1aerZWKs17RWiQ9a2vAd5ZWRzfdd5ynvVWlHG4VME -lo04z6MXrDlxawHDi1M8Y+nuecDkvpIyZHqzH5eUYr3qsiAVlfuX8ngvYzZAOONG -Dx3drJXK50uQe7FLqdTF65raqtWjlBRGjS0f8zrWkzr2Pnn86Oawde3uPclwx12q -gUtGJRzHbBXjlU4PqjI3lAoXJJIThFjSY28r9+ZbYgsTF7ANUkz+/m9c4pFuHf2k -Ytdo+o56T9II2pPc8JIRetDccpMMc5NihWjQ9A== ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIID2DCCAsACEQDQHkCLAAB3bQAAAAEAAAAEMA0GCSqGSIb3DQEBBQUAMIGpMQsw -CQYDVQQGEwJ1czENMAsGA1UECBMEVXRhaDEXMBUGA1UEBxMOU2FsdCBMYWtlIENp -dHkxJDAiBgNVBAoTG0RpZ2l0YWwgU2lnbmF0dXJlIFRydXN0IENvLjERMA8GA1UE -CxMIRFNUQ0EgWDIxFjAUBgNVBAMTDURTVCBSb290Q0EgWDIxITAfBgkqhkiG9w0B -CQEWEmNhQGRpZ3NpZ3RydXN0LmNvbTAeFw05ODExMzAyMjQ2MTZaFw0wODExMjcy -MjQ2MTZaMIGpMQswCQYDVQQGEwJ1czENMAsGA1UECBMEVXRhaDEXMBUGA1UEBxMO -U2FsdCBMYWtlIENpdHkxJDAiBgNVBAoTG0RpZ2l0YWwgU2lnbmF0dXJlIFRydXN0 -IENvLjERMA8GA1UECxMIRFNUQ0EgWDIxFjAUBgNVBAMTDURTVCBSb290Q0EgWDIx -ITAfBgkqhkiG9w0BCQEWEmNhQGRpZ3NpZ3RydXN0LmNvbTCCASIwDQYJKoZIhvcN -AQEBBQADggEPADCCAQoCggEBANx18IzAdZaawGIfJvfE4Zrq4FZzW5nNAUSoCLbV -p9oaBBg5kkp4o4HC9Xd6ULRw/5qrxsfKboNPQpj7Jgva3G3WqZlVUmfpKAOS3OWw -BZoPFflrWXJW8vo5/Kpo7g8fEIMv/J36F5bdguPmRX3AS4BEH+0s4IT9kVySVGkl -5WJp3OXuAFK9MwutdQKFp2RQLcUZGTDAJtvJ0/0uma1ZtQtN1EGuhUhDWdy3qOKi -3sOP17ihYqZoUFLkzzGnlIXan0YyF1bl8utmPRL/Q9uY73fPy4GNNLHGUEom0eQ+ -QVCvbK4iNC7Va26Dunm4dmVI2gkpZGMiuftHdoWMhkTLCdsCAwEAATANBgkqhkiG -9w0BAQUFAAOCAQEAtTYOXeFhKFoRZcA/gwN5Tb4opgsHAlKFzfiR0BBstWogWxyQ -2TA8xkieil5k+aFxd+8EJx8H6+Qm93N0yUQYGmbT4EOvkTvRyyzYdFQ6HE3K1GjN -I3wdEJ5F6fYAbqbNGf9PLCmPV03Ed5K+4EwJ+11EhmYhqLkyolbV6YyDfFk/xPEL -553snr2cGA4+wjl5KLcDDQjLxufZATdQEOzMYRZA1K8xdHv8PzGn0EdzMzkbzE5q -10mDEQb+64JYMzJM8FasHpwvVpp7wUocpf1VNs78lk30sPDst2yC7S8xmUJMqbIN -uBVd8d+6ybVK1GSYsyapMMj9puyrliGtf8J4tg== ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIF5zCCA8+gAwIBAgIITK9zQhyOdAIwDQYJKoZIhvcNAQEFBQAwgYAxODA2BgNV -BAMML0VCRyBFbGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sx -c8SxMTcwNQYDVQQKDC5FQkcgQmlsacWfaW0gVGVrbm9sb2ppbGVyaSB2ZSBIaXpt -ZXRsZXJpIEEuxZ4uMQswCQYDVQQGEwJUUjAeFw0wNjA4MTcwMDIxMDlaFw0xNjA4 -MTQwMDMxMDlaMIGAMTgwNgYDVQQDDC9FQkcgRWxla3Ryb25payBTZXJ0aWZpa2Eg -SGl6bWV0IFNhxJ9sYXnEsWPEsXPEsTE3MDUGA1UECgwuRUJHIEJpbGnFn2ltIFRl -a25vbG9qaWxlcmkgdmUgSGl6bWV0bGVyaSBBLsWeLjELMAkGA1UEBhMCVFIwggIi -MA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDuoIRh0DpqZhAy2DE4f6en5f2h -4fuXd7hxlugTlkaDT7byX3JWbhNgpQGR4lvFzVcfd2NR/y8927k/qqk153nQ9dAk -tiHq6yOU/im/+4mRDGSaBUorzAzu8T2bgmmkTPiab+ci2hC6X5L8GCcKqKpE+i4s -tPtGmggDg3KriORqcsnlZR9uKg+ds+g75AxuetpX/dfreYteIAbTdgtsApWjluTL -dlHRKJ2hGvxEok3MenaoDT2/F08iiFD9rrbskFBKW5+VQarKD7JK/oCZTqNGFav4 -c0JqwmZ2sQomFd2TkuzbqV9UIlKRcF0T6kjsbgNs2d1s/OsNA/+mgxKb8amTD8Um -TDGyY5lhcucqZJnSuOl14nypqZoaqsNW2xCaPINStnuWt6yHd6i58mcLlEOzrz5z -+kI2sSXFCjEmN1ZnuqMLfdb3ic1nobc6HmZP9qBVFCVMLDMNpkGMvQQxahByCp0O -Lna9XvNRiYuoP1Vzv9s6xiQFlpJIqkuNKgPlV5EQ9GooFW5Hd4RcUXSfGenmHmMW -OeMRFeNYGkS9y8RsZteEBt8w9DeiQyJ50hBs37vmExH8nYQKE3vwO9D8owrXieqW -fo1IhR5kX9tUoqzVegJ5a9KK8GfaZXINFHDk6Y54jzJ0fFfy1tb0Nokb+Clsi7n2 -l9GkLqq+CxnCRelwXQIDAJ3Zo2MwYTAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB -/wQEAwIBBjAdBgNVHQ4EFgQU587GT/wWZ5b6SqMHwQSny2re2kcwHwYDVR0jBBgw -FoAU587GT/wWZ5b6SqMHwQSny2re2kcwDQYJKoZIhvcNAQEFBQADggIBAJuYml2+ -8ygjdsZs93/mQJ7ANtyVDR2tFcU22NU57/IeIl6zgrRdu0waypIN30ckHrMk2pGI -6YNw3ZPX6bqz3xZaPt7gyPvT/Wwp+BVGoGgmzJNSroIBk5DKd8pNSe/iWtkqvTDO -TLKBtjDOWU/aWR1qeqRFsIImgYZ29fUQALjuswnoT4cCB64kXPBfrAowzIpAoHME -wfuJJPaaHFy3PApnNgUIMbOv2AFoKuB4j3TeuFGkjGwgPaL7s9QJ/XvCgKqTbCmY -Iai7FvOpEl90tYeY8pUm3zTvilORiF0alKM/fCL414i6poyWqD1SNGKfAB5UVUJn -xk1Gj7sURT0KlhaOEKGXmdXTMIXM3rRyt7yKPBgpaP3ccQfuJDlq+u2lrDgv+R4Q -DgZxGhBM/nV+/x5XOULK1+EVoVZVWRvRo68R2E7DpSvvkL/A7IITW43WciyTTo9q -Kd+FPNMN4KIYEsxVL0e3p5sC/kH2iExt2qkBR4NkJ2IQgtYSe14DHzSpyZH+r11t -hie3I6p1GMog57AP14kOpmciY/SDQSsGS7tY1dHXt7kQY9iJSrSq3RZj9W6+YKH4 -7ejWkE8axsWgKdOnIaj1Wjz3x0miIZpKlVIglnKaZsv30oZDfCK+lvm9AahH3eU7 -QPl1K5srRmSGjR70j/sHd9DqSaIcjVIUpgqT ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIICmDCCAgGgAwIBAgIBDjANBgkqhkiG9w0BAQUFADBLMQswCQYDVQQGEwJVUzEY -MBYGA1UEChMPVS5TLiBHb3Zlcm5tZW50MQwwCgYDVQQLEwNFQ0ExFDASBgNVBAMT -C0VDQSBSb290IENBMB4XDTA0MDYxNDEwMjAwOVoXDTQwMDYxNDEwMjAwOVowSzEL -MAkGA1UEBhMCVVMxGDAWBgNVBAoTD1UuUy4gR292ZXJubWVudDEMMAoGA1UECxMD -RUNBMRQwEgYDVQQDEwtFQ0EgUm9vdCBDQTCBnzANBgkqhkiG9w0BAQEFAAOBjQAw -gYkCgYEArkr2eXIS6oAKIpDkOlcQZdMGdncoygCEIU+ktqY3of5SVVXU7/it7kJ1 -EUzR4ii2vthQtbww9aAnpQxcEmXZk8eEyiGEPy+cCQMllBY+efOtKgjbQNDZ3lB9 -19qzUJwBl2BMxslU1XsJQw9SK10lPbQm4asa8E8e5zTUknZBWnECAwEAAaOBizCB -iDAfBgNVHSMEGDAWgBT2uAQnDlYW2blj2f2hVGVBoAhILzAdBgNVHQ4EFgQU9rgE -Jw5WFtm5Y9n9oVRlQaAISC8wDgYDVR0PAQH/BAQDAgGGMA8GA1UdEwEB/wQFMAMB -Af8wJQYDVR0gBB4wHDAMBgpghkgBZQMCAQwBMAwGCmCGSAFlAwIBDAIwDQYJKoZI -hvcNAQEFBQADgYEAHh0EQY2cZ209aBb5q0wW1ER0dc4OGzsLyqjHfaQ4TEaMmUwL -AJRta/c4KVWLiwbODsvgJk+CaWmSL03gRW/ciVb/qDV7qh9Pyd1cOlanZTAnPog2 -i82yL3i2fK9DCC84uoxEQbgqK2jx9bIjFTwlAqITk9fGAm5mdT84IEwq1Gw= ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIEkTCCA3mgAwIBAgIERWtQVDANBgkqhkiG9w0BAQUFADCBsDELMAkGA1UEBhMC -VVMxFjAUBgNVBAoTDUVudHJ1c3QsIEluYy4xOTA3BgNVBAsTMHd3dy5lbnRydXN0 -Lm5ldC9DUFMgaXMgaW5jb3Jwb3JhdGVkIGJ5IHJlZmVyZW5jZTEfMB0GA1UECxMW -KGMpIDIwMDYgRW50cnVzdCwgSW5jLjEtMCsGA1UEAxMkRW50cnVzdCBSb290IENl -cnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTA2MTEyNzIwMjM0MloXDTI2MTEyNzIw -NTM0MlowgbAxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1FbnRydXN0LCBJbmMuMTkw -NwYDVQQLEzB3d3cuZW50cnVzdC5uZXQvQ1BTIGlzIGluY29ycG9yYXRlZCBieSBy -ZWZlcmVuY2UxHzAdBgNVBAsTFihjKSAyMDA2IEVudHJ1c3QsIEluYy4xLTArBgNV -BAMTJEVudHJ1c3QgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASIwDQYJ -KoZIhvcNAQEBBQADggEPADCCAQoCggEBALaVtkNC+sZtKm9I35RMOVcF7sN5EUFo -Nu3s/poBj6E4KPz3EEZmLk0eGrEaTsbRwJWIsMn/MYszA9u3g3s+IIRe7bJWKKf4 -4LlAcTfFy0cOlypowCKVYhXbR9n10Cv/gkvJrT7eTNuQgFA/CYqEAOwwCj0Yzfv9 -KlmaI5UXLEWeH25DeW0MXJj+SKfFI0dcXv1u5x609mhF0YaDW6KKjbHjKYD+JXGI -rb68j6xSlkuqUY3kEzEZ6E5Nn9uss2rVvDlUccp6en+Q3X0dgNmBu1kmwhH+5pPi -94DkZfs0Nw4pgHBNrziGLp5/V6+eF67rHMsoIV+2HNjnogQi+dPa2MsCAwEAAaOB -sDCBrTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zArBgNVHRAEJDAi -gA8yMDA2MTEyNzIwMjM0MlqBDzIwMjYxMTI3MjA1MzQyWjAfBgNVHSMEGDAWgBRo -kORnpKZTgMeGZqTx90tD+4S9bTAdBgNVHQ4EFgQUaJDkZ6SmU4DHhmak8fdLQ/uE -vW0wHQYJKoZIhvZ9B0EABBAwDhsIVjcuMTo0LjADAgSQMA0GCSqGSIb3DQEBBQUA -A4IBAQCT1DCw1wMgKtD5Y+iRDAUgqV8ZyntyTtSx29CW+1RaGSwMCPeyvIWonX9t -O1KzKtvn1ISMY/YPyyYBkVBs9F8U4pN0wBOeMDpQ47RgxRzwIkSNcUesyBrJ6Zua -AGAT/3B+XxFNSRuzFVJ7yVTav52Vr2ua2J7p8eRDjeIRRDq/r72DQnNSi6q7pynP -9WQcCk3RvKqsnyrQ/39/2n3qse0wJcGE2jTSW3iDVuycNsMm4hH2Z0kdkquM++v/ -eu6FSqdQgPCnXEqULl8FmTxSQeDNtGPPAUO6nIPcj2A781q0tHuu2guQOHXvgR1m -0vdXcDazv/wor3ElhVsT/h5/WrQ8 ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIEXDCCA0SgAwIBAgIEOGO5ZjANBgkqhkiG9w0BAQUFADCBtDEUMBIGA1UEChML -RW50cnVzdC5uZXQxQDA+BgNVBAsUN3d3dy5lbnRydXN0Lm5ldC9DUFNfMjA0OCBp -bmNvcnAuIGJ5IHJlZi4gKGxpbWl0cyBsaWFiLikxJTAjBgNVBAsTHChjKSAxOTk5 -IEVudHJ1c3QubmV0IExpbWl0ZWQxMzAxBgNVBAMTKkVudHJ1c3QubmV0IENlcnRp -ZmljYXRpb24gQXV0aG9yaXR5ICgyMDQ4KTAeFw05OTEyMjQxNzUwNTFaFw0xOTEy -MjQxODIwNTFaMIG0MRQwEgYDVQQKEwtFbnRydXN0Lm5ldDFAMD4GA1UECxQ3d3d3 -LmVudHJ1c3QubmV0L0NQU18yMDQ4IGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxp -YWIuKTElMCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEG -A1UEAxMqRW50cnVzdC5uZXQgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgKDIwNDgp -MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArU1LqRKGsuqjIAcVFmQq -K0vRvwtKTY7tgHalZ7d4QMBzQshowNtTK91euHaYNZOLGp18EzoOH1u3Hs/lJBQe -sYGpjX24zGtLA/ECDNyrpUAkAH90lKGdCCmziAv1h3edVc3kw37XamSrhRSGlVuX -MlBvPci6Zgzj/L24ScF2iUkZ/cCovYmjZy/Gn7xxGWC4LeksyZB2ZnuU4q941mVT -XTzWnLLPKQP5L6RQstRIzgUyVYr9smRMDuSYB3Xbf9+5CFVghTAp+XtIpGmG4zU/ -HoZdenoVve8AjhUiVBcAkCaTvA5JaJG/+EfTnZVCwQ5N328mz8MYIWJmQ3DW1cAH -4QIDAQABo3QwcjARBglghkgBhvhCAQEEBAMCAAcwHwYDVR0jBBgwFoAUVeSB0RGA -vtiJuQijMfmhJAkWuXAwHQYDVR0OBBYEFFXkgdERgL7YibkIozH5oSQJFrlwMB0G -CSqGSIb2fQdBAAQQMA4bCFY1LjA6NC4wAwIEkDANBgkqhkiG9w0BAQUFAAOCAQEA -WUesIYSKF8mciVMeuoCFGsY8Tj6xnLZ8xpJdGGQC49MGCBFhfGPjK50xA3B20qMo -oPS7mmNz7W3lKtvtFKkrxjYR0CvrB4ul2p5cGZ1WEvVUKcgF7bISKo30Axv/55IQ -h7A6tcOdBTcSo8f0FbnVpDkWm1M6I5HxqIKiaohowXkCIryqptau37AUX7iH0N18 -f3v/rxzP5tsHrV7bhZ3QKw0z2wTR5klAEyt2+z7pnIkPFc4YsIV4IU9rTw76NmfN -B/L/CNDi3tm/Kq+4h4YhPATKt5Rof8886ZjXOP/swNlQ8C5LWK5Gb9Auw2DaclVy -vUxFnmG6v4SBkgPR0ml8xQ== ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIE7TCCBFagAwIBAgIEOAOR7jANBgkqhkiG9w0BAQQFADCByTELMAkGA1UEBhMC -VVMxFDASBgNVBAoTC0VudHJ1c3QubmV0MUgwRgYDVQQLFD93d3cuZW50cnVzdC5u -ZXQvQ2xpZW50X0NBX0luZm8vQ1BTIGluY29ycC4gYnkgcmVmLiBsaW1pdHMgbGlh -Yi4xJTAjBgNVBAsTHChjKSAxOTk5IEVudHJ1c3QubmV0IExpbWl0ZWQxMzAxBgNV -BAMTKkVudHJ1c3QubmV0IENsaWVudCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAe -Fw05OTEwMTIxOTI0MzBaFw0xOTEwMTIxOTU0MzBaMIHJMQswCQYDVQQGEwJVUzEU -MBIGA1UEChMLRW50cnVzdC5uZXQxSDBGBgNVBAsUP3d3dy5lbnRydXN0Lm5ldC9D -bGllbnRfQ0FfSW5mby9DUFMgaW5jb3JwLiBieSByZWYuIGxpbWl0cyBsaWFiLjEl -MCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEGA1UEAxMq -RW50cnVzdC5uZXQgQ2xpZW50IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGdMA0G -CSqGSIb3DQEBAQUAA4GLADCBhwKBgQDIOpleMRffrCdvkHvkGf9FozTC28GoT/Bo -6oT9n3V5z8GKUZSvx1cDR2SerYIbWtp/N3hHuzeYEpbOxhN979IMMFGpOZ5V+Pux -5zDeg7K6PvHViTs7hbqqdCz+PzFur5GVbgbUB01LLFZHGARS2g4Qk79jkJvh34zm -AqTmT173iwIBA6OCAeAwggHcMBEGCWCGSAGG+EIBAQQEAwIABzCCASIGA1UdHwSC -ARkwggEVMIHkoIHhoIHepIHbMIHYMQswCQYDVQQGEwJVUzEUMBIGA1UEChMLRW50 -cnVzdC5uZXQxSDBGBgNVBAsUP3d3dy5lbnRydXN0Lm5ldC9DbGllbnRfQ0FfSW5m -by9DUFMgaW5jb3JwLiBieSByZWYuIGxpbWl0cyBsaWFiLjElMCMGA1UECxMcKGMp -IDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEGA1UEAxMqRW50cnVzdC5uZXQg -Q2xpZW50IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMCyg -KqAohiZodHRwOi8vd3d3LmVudHJ1c3QubmV0L0NSTC9DbGllbnQxLmNybDArBgNV -HRAEJDAigA8xOTk5MTAxMjE5MjQzMFqBDzIwMTkxMDEyMTkyNDMwWjALBgNVHQ8E -BAMCAQYwHwYDVR0jBBgwFoAUxPucKXuXzUyW/O5bs8qZdIuV6kwwHQYDVR0OBBYE -FMT7nCl7l81MlvzuW7PKmXSLlepMMAwGA1UdEwQFMAMBAf8wGQYJKoZIhvZ9B0EA -BAwwChsEVjQuMAMCBJAwDQYJKoZIhvcNAQEEBQADgYEAP66K8ddmAwWePvrqHEa7 -pFuPeJoSSJn59DXeDDYHAmsQOokUgZwxpnyyQbJq5wcBoUv5nyU7lsqZwz6hURzz -wy5E97BnRqqS5TvaHBkUODDV4qIxJS7x7EU47fgGWANzYrAQMY9Av2TgXD7FTx/a -EkP/TOYGJqibGapEPHayXOw= ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIEgzCCA+ygAwIBAgIEOJ725DANBgkqhkiG9w0BAQQFADCBtDEUMBIGA1UEChML -RW50cnVzdC5uZXQxQDA+BgNVBAsUN3d3dy5lbnRydXN0Lm5ldC9HQ0NBX0NQUyBp -bmNvcnAuIGJ5IHJlZi4gKGxpbWl0cyBsaWFiLikxJTAjBgNVBAsTHChjKSAyMDAw -IEVudHJ1c3QubmV0IExpbWl0ZWQxMzAxBgNVBAMTKkVudHJ1c3QubmV0IENsaWVu -dCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wMDAyMDcxNjE2NDBaFw0yMDAy -MDcxNjQ2NDBaMIG0MRQwEgYDVQQKEwtFbnRydXN0Lm5ldDFAMD4GA1UECxQ3d3d3 -LmVudHJ1c3QubmV0L0dDQ0FfQ1BTIGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxp -YWIuKTElMCMGA1UECxMcKGMpIDIwMDAgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEG -A1UEAxMqRW50cnVzdC5uZXQgQ2xpZW50IENlcnRpZmljYXRpb24gQXV0aG9yaXR5 -MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCTdLS25MVL1qFof2LV7PdRV7Ny -Spj10InJrWPNTTVRaoTUrcloeW+46xHbh65cJFET8VQlhK8pK5/jgOLZy93GRUk0 -iJBeAZfv6lOm3fzB3ksqJeTpNfpVBQbliXrqpBFXO/x8PTbNZzVtpKklWb1m9fkn -5JVn1j+SgF7yNH0rhQIDAQABo4IBnjCCAZowEQYJYIZIAYb4QgEBBAQDAgAHMIHd -BgNVHR8EgdUwgdIwgc+ggcyggcmkgcYwgcMxFDASBgNVBAoTC0VudHJ1c3QubmV0 -MUAwPgYDVQQLFDd3d3cuZW50cnVzdC5uZXQvR0NDQV9DUFMgaW5jb3JwLiBieSBy -ZWYuIChsaW1pdHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMjAwMCBFbnRydXN0Lm5l -dCBMaW1pdGVkMTMwMQYDVQQDEypFbnRydXN0Lm5ldCBDbGllbnQgQ2VydGlmaWNh -dGlvbiBBdXRob3JpdHkxDTALBgNVBAMTBENSTDEwKwYDVR0QBCQwIoAPMjAwMDAy -MDcxNjE2NDBagQ8yMDIwMDIwNzE2NDY0MFowCwYDVR0PBAQDAgEGMB8GA1UdIwQY -MBaAFISLdP3FjcD/J20gN0V8/i3OutN9MB0GA1UdDgQWBBSEi3T9xY3A/ydtIDdF -fP4tzrrTfTAMBgNVHRMEBTADAQH/MB0GCSqGSIb2fQdBAAQQMA4bCFY1LjA6NC4w -AwIEkDANBgkqhkiG9w0BAQQFAAOBgQBObzWAO9GK9Q6nIMstZVXQkvTnhLUGJoMS -hAusO7JE7r3PQNsgDrpuFOow4DtifH+La3xKp9U1PL6oXOpLu5OOgGarDyn9TS2/ -GpsKkMWr2tGzhtQvJFJcem3G8v7lTRowjJDyutdKPkN+1MhQGof4T4HHdguEOnKd -zmVml64mXg== ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIElTCCA/6gAwIBAgIEOJsRPDANBgkqhkiG9w0BAQQFADCBujEUMBIGA1UEChML -RW50cnVzdC5uZXQxPzA9BgNVBAsUNnd3dy5lbnRydXN0Lm5ldC9TU0xfQ1BTIGlu -Y29ycC4gYnkgcmVmLiAobGltaXRzIGxpYWIuKTElMCMGA1UECxMcKGMpIDIwMDAg -RW50cnVzdC5uZXQgTGltaXRlZDE6MDgGA1UEAxMxRW50cnVzdC5uZXQgU2VjdXJl -IFNlcnZlciBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wMDAyMDQxNzIwMDBa -Fw0yMDAyMDQxNzUwMDBaMIG6MRQwEgYDVQQKEwtFbnRydXN0Lm5ldDE/MD0GA1UE -CxQ2d3d3LmVudHJ1c3QubmV0L1NTTF9DUFMgaW5jb3JwLiBieSByZWYuIChsaW1p -dHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMjAwMCBFbnRydXN0Lm5ldCBMaW1pdGVk -MTowOAYDVQQDEzFFbnRydXN0Lm5ldCBTZWN1cmUgU2VydmVyIENlcnRpZmljYXRp -b24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDHwV9OcfHO -8GCGD9JYf9Mzly0XonUwtZZkJi9ow0SrqHXmAGc0V55lxyKbc+bT3QgON1WqJUaB -bL3+qPZ1V1eMkGxKwz6LS0MKyRFWmponIpnPVZ5h2QLifLZ8OAfc439PmrkDQYC2 -dWcTC5/oVzbIXQA23mYU2m52H083jIITiQIDAQABo4IBpDCCAaAwEQYJYIZIAYb4 -QgEBBAQDAgAHMIHjBgNVHR8EgdswgdgwgdWggdKggc+kgcwwgckxFDASBgNVBAoT -C0VudHJ1c3QubmV0MT8wPQYDVQQLFDZ3d3cuZW50cnVzdC5uZXQvU1NMX0NQUyBp -bmNvcnAuIGJ5IHJlZi4gKGxpbWl0cyBsaWFiLikxJTAjBgNVBAsTHChjKSAyMDAw -IEVudHJ1c3QubmV0IExpbWl0ZWQxOjA4BgNVBAMTMUVudHJ1c3QubmV0IFNlY3Vy -ZSBTZXJ2ZXIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxDTALBgNVBAMTBENSTDEw -KwYDVR0QBCQwIoAPMjAwMDAyMDQxNzIwMDBagQ8yMDIwMDIwNDE3NTAwMFowCwYD -VR0PBAQDAgEGMB8GA1UdIwQYMBaAFMtswGvjuz7L/CKc/vuLkpyw8m4iMB0GA1Ud -DgQWBBTLbMBr47s+y/winP77i5KcsPJuIjAMBgNVHRMEBTADAQH/MB0GCSqGSIb2 -fQdBAAQQMA4bCFY1LjA6NC4wAwIEkDANBgkqhkiG9w0BAQQFAAOBgQBi24GRzsia -d0Iv7L0no1MPUBvqTpLwqa+poLpIYcvvyQbvH9X07t9WLebKahlzqlO+krNQAraF -JnJj2HVQYnUUt7NQGj/KEQALhUVpbbalrlHhStyCP2yMNLJ3a9kC9n8O6mUE8c1U -yrrJzOCE98g+EZfTYAkYvAX/bIkz8OwVDw== ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIE2DCCBEGgAwIBAgIEN0rSQzANBgkqhkiG9w0BAQUFADCBwzELMAkGA1UEBhMC -VVMxFDASBgNVBAoTC0VudHJ1c3QubmV0MTswOQYDVQQLEzJ3d3cuZW50cnVzdC5u -ZXQvQ1BTIGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxpYWIuKTElMCMGA1UECxMc -KGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDE6MDgGA1UEAxMxRW50cnVzdC5u -ZXQgU2VjdXJlIFNlcnZlciBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw05OTA1 -MjUxNjA5NDBaFw0xOTA1MjUxNjM5NDBaMIHDMQswCQYDVQQGEwJVUzEUMBIGA1UE -ChMLRW50cnVzdC5uZXQxOzA5BgNVBAsTMnd3dy5lbnRydXN0Lm5ldC9DUFMgaW5j -b3JwLiBieSByZWYuIChsaW1pdHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMTk5OSBF -bnRydXN0Lm5ldCBMaW1pdGVkMTowOAYDVQQDEzFFbnRydXN0Lm5ldCBTZWN1cmUg -U2VydmVyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGdMA0GCSqGSIb3DQEBAQUA -A4GLADCBhwKBgQDNKIM0VBuJ8w+vN5Ex/68xYMmo6LIQaO2f55M28Qpku0f1BBc/ -I0dNxScZgSYMVHINiC3ZH5oSn7yzcdOAGT9HZnuMNSjSuQrfJNqc1lB5gXpa0zf3 -wkrYKZImZNHkmGw6AIr1NJtl+O3jEP/9uElY3KDegjlrgbEWGWG5VLbmQwIBA6OC -AdcwggHTMBEGCWCGSAGG+EIBAQQEAwIABzCCARkGA1UdHwSCARAwggEMMIHeoIHb -oIHYpIHVMIHSMQswCQYDVQQGEwJVUzEUMBIGA1UEChMLRW50cnVzdC5uZXQxOzA5 -BgNVBAsTMnd3dy5lbnRydXN0Lm5ldC9DUFMgaW5jb3JwLiBieSByZWYuIChsaW1p -dHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMTk5OSBFbnRydXN0Lm5ldCBMaW1pdGVk -MTowOAYDVQQDEzFFbnRydXN0Lm5ldCBTZWN1cmUgU2VydmVyIENlcnRpZmljYXRp -b24gQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMCmgJ6AlhiNodHRwOi8vd3d3LmVu -dHJ1c3QubmV0L0NSTC9uZXQxLmNybDArBgNVHRAEJDAigA8xOTk5MDUyNTE2MDk0 -MFqBDzIwMTkwNTI1MTYwOTQwWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAU8Bdi -E1U9s/8KAGv7UISX8+1i0BowHQYDVR0OBBYEFPAXYhNVPbP/CgBr+1CEl/PtYtAa -MAwGA1UdEwQFMAMBAf8wGQYJKoZIhvZ9B0EABAwwChsEVjQuMAMCBJAwDQYJKoZI -hvcNAQEFBQADgYEAkNwwAvpkdMKnCqV8IY00F6j7Rw7/JXyNEwr75Ji174z4xRAN -95K+8cPV1ZVqBLssziY2ZcgxxufuP+NXdYR6Ee9GTxj005i7qIcyunL2POI9n9cd -2cNgQ4xYDiKWL2KjLB+6rQXvqzJ4h6BUcxm1XAX5Uj5tLUUL9wqT6u0G+bI= ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIDIDCCAomgAwIBAgIENd70zzANBgkqhkiG9w0BAQUFADBOMQswCQYDVQQGEwJV -UzEQMA4GA1UEChMHRXF1aWZheDEtMCsGA1UECxMkRXF1aWZheCBTZWN1cmUgQ2Vy -dGlmaWNhdGUgQXV0aG9yaXR5MB4XDTk4MDgyMjE2NDE1MVoXDTE4MDgyMjE2NDE1 -MVowTjELMAkGA1UEBhMCVVMxEDAOBgNVBAoTB0VxdWlmYXgxLTArBgNVBAsTJEVx -dWlmYXggU2VjdXJlIENlcnRpZmljYXRlIEF1dGhvcml0eTCBnzANBgkqhkiG9w0B -AQEFAAOBjQAwgYkCgYEAwV2xWGcIYu6gmi0fCG2RFGiYCh7+2gRvE4RiIcPRfM6f -BeC4AfBONOziipUEZKzxa1NfBbPLZ4C/QgKO/t0BCezhABRP/PvwDN1Dulsr4R+A -cJkVV5MW8Q+XarfCaCMczE1ZMKxRHjuvK9buY0V7xdlfUNLjUA86iOe/FP3gx7kC -AwEAAaOCAQkwggEFMHAGA1UdHwRpMGcwZaBjoGGkXzBdMQswCQYDVQQGEwJVUzEQ -MA4GA1UEChMHRXF1aWZheDEtMCsGA1UECxMkRXF1aWZheCBTZWN1cmUgQ2VydGlm -aWNhdGUgQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMBoGA1UdEAQTMBGBDzIwMTgw -ODIyMTY0MTUxWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUSOZo+SvSspXXR9gj -IBBPM5iQn9QwHQYDVR0OBBYEFEjmaPkr0rKV10fYIyAQTzOYkJ/UMAwGA1UdEwQF -MAMBAf8wGgYJKoZIhvZ9B0EABA0wCxsFVjMuMGMDAgbAMA0GCSqGSIb3DQEBBQUA -A4GBAFjOKer89961zgK5F7WF0bnj4JXMJTENAKaSbn+2kmOeUJXRmm/kEd5jhW6Y -7qj/WsjTVbJmcVfewCHrPSqnI0kBBIZCe/zuf6IWUrVnZ9NA2zsmWLIodz2uFHdh -1voqZiegDfqnc1zqcPGUIWVEX/r87yloqaKHee9570+sB3c4 ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIICgjCCAeugAwIBAgIBBDANBgkqhkiG9w0BAQQFADBTMQswCQYDVQQGEwJVUzEc -MBoGA1UEChMTRXF1aWZheCBTZWN1cmUgSW5jLjEmMCQGA1UEAxMdRXF1aWZheCBT -ZWN1cmUgZUJ1c2luZXNzIENBLTEwHhcNOTkwNjIxMDQwMDAwWhcNMjAwNjIxMDQw -MDAwWjBTMQswCQYDVQQGEwJVUzEcMBoGA1UEChMTRXF1aWZheCBTZWN1cmUgSW5j -LjEmMCQGA1UEAxMdRXF1aWZheCBTZWN1cmUgZUJ1c2luZXNzIENBLTEwgZ8wDQYJ -KoZIhvcNAQEBBQADgY0AMIGJAoGBAM4vGbwXt3fek6lfWg0XTzQaDJj0ItlZ1MRo -RvC0NcWFAyDGr0WlIVFFQesWWDYyb+JQYmT5/VGcqiTZ9J2DKocKIdMSODRsjQBu -WqDZQu4aIZX5UkxVWsUPOE9G+m34LjXWHXzr4vCwdYDIqROsvojvOm6rXyo4YgKw -Env+j6YDAgMBAAGjZjBkMBEGCWCGSAGG+EIBAQQEAwIABzAPBgNVHRMBAf8EBTAD -AQH/MB8GA1UdIwQYMBaAFEp4MlIR21kWNl7fwRQ2QGpHfEyhMB0GA1UdDgQWBBRK -eDJSEdtZFjZe38EUNkBqR3xMoTANBgkqhkiG9w0BAQQFAAOBgQB1W6ibAxHm6VZM -zfmpTMANmvPMZWnmJXbMWbfWVMMdzZmsGd20hdXgPfxiIKeES1hl8eL5lSE/9dR+ -WB5Hh1Q+WKG1tfgq73HnvMP2sUlG4tega+VWeponmHxGYhTnyfxuAxJ5gDgdSIKN -/Bf+KpYrtWKmpj29f5JZzVoqgrI3eQ== ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIDIDCCAomgAwIBAgIEN3DPtTANBgkqhkiG9w0BAQUFADBOMQswCQYDVQQGEwJV -UzEXMBUGA1UEChMORXF1aWZheCBTZWN1cmUxJjAkBgNVBAsTHUVxdWlmYXggU2Vj -dXJlIGVCdXNpbmVzcyBDQS0yMB4XDTk5MDYyMzEyMTQ0NVoXDTE5MDYyMzEyMTQ0 -NVowTjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDkVxdWlmYXggU2VjdXJlMSYwJAYD -VQQLEx1FcXVpZmF4IFNlY3VyZSBlQnVzaW5lc3MgQ0EtMjCBnzANBgkqhkiG9w0B -AQEFAAOBjQAwgYkCgYEA5Dk5kx5SBhsoNviyoynF7Y6yEb3+6+e0dMKP/wXn2Z0G -vxLIPw7y1tEkshHe0XMJitSxLJgJDR5QRrKDpkWNYmi7hRsgcDKqQM2mll/EcTc/ -BPO3QSQ5BxoeLmFYoBIL5aXfxavqN3HMHMg3OrmXUqesxWoklE6ce8/AatbfIb0C -AwEAAaOCAQkwggEFMHAGA1UdHwRpMGcwZaBjoGGkXzBdMQswCQYDVQQGEwJVUzEX -MBUGA1UEChMORXF1aWZheCBTZWN1cmUxJjAkBgNVBAsTHUVxdWlmYXggU2VjdXJl -IGVCdXNpbmVzcyBDQS0yMQ0wCwYDVQQDEwRDUkwxMBoGA1UdEAQTMBGBDzIwMTkw -NjIzMTIxNDQ1WjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUUJ4L6q9euSBIplBq -y/3YIHqngnYwHQYDVR0OBBYEFFCeC+qvXrkgSKZQasv92CB6p4J2MAwGA1UdEwQF -MAMBAf8wGgYJKoZIhvZ9B0EABA0wCxsFVjMuMGMDAgbAMA0GCSqGSIb3DQEBBQUA -A4GBAAyGgq3oThr1jokn4jVYPSm0B482UJW/bsGe68SQsoWou7dC4A8HOd/7npCy -0cE+U58DRLB+S/Rv5Hwf5+Kx5Lia78O9zt4LMjTZ3ijtM2vE1Nc9ElirfQkty3D1 -E4qUoSek1nDFbZS1yX2doNLGCEnZZpum0/QL3MUmV+GRMOrN ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIICkDCCAfmgAwIBAgIBATANBgkqhkiG9w0BAQQFADBaMQswCQYDVQQGEwJVUzEc -MBoGA1UEChMTRXF1aWZheCBTZWN1cmUgSW5jLjEtMCsGA1UEAxMkRXF1aWZheCBT -ZWN1cmUgR2xvYmFsIGVCdXNpbmVzcyBDQS0xMB4XDTk5MDYyMTA0MDAwMFoXDTIw -MDYyMTA0MDAwMFowWjELMAkGA1UEBhMCVVMxHDAaBgNVBAoTE0VxdWlmYXggU2Vj -dXJlIEluYy4xLTArBgNVBAMTJEVxdWlmYXggU2VjdXJlIEdsb2JhbCBlQnVzaW5l -c3MgQ0EtMTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAuucXkAJlsTRVPEnC -UdXfp9E3j9HngXNBUmCbnaEXJnitx7HoJpQytd4zjTov2/KaelpzmKNc6fuKcxtc -58O/gGzNqfTWK8D3+ZmqY6KxRwIP1ORROhI8bIpaVIRw28HFkM9yRcuoWcDNM50/ -o5brhTMhHD4ePmBudpxnhcXIw2ECAwEAAaNmMGQwEQYJYIZIAYb4QgEBBAQDAgAH -MA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUvqigdHJQa0S3ySPY+6j/s1dr -aGwwHQYDVR0OBBYEFL6ooHRyUGtEt8kj2Puo/7NXa2hsMA0GCSqGSIb3DQEBBAUA -A4GBADDiAVGqx+pf2rnQZQ8w1j7aDRRJbpGTJxQx78T3LUX47Me/okENI7SS+RkA -Z70Br83gcfxaz2TE4JaY0KNA4gGK7ycH8WUBikQtBmV1UsCGECAhX2xrD2yuCRyv -8qIYNMR1pHMc8Y3c7635s3a0kr/clRAevsvIO1qEYBlWlKlV ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIFFjCCBH+gAwIBAgIBADANBgkqhkiG9w0BAQQFADCBsDELMAkGA1UEBhMCSUwx -DzANBgNVBAgTBklzcmFlbDEOMAwGA1UEBxMFRWlsYXQxFjAUBgNVBAoTDVN0YXJ0 -Q29tIEx0ZC4xGjAYBgNVBAsTEUNBIEF1dGhvcml0eSBEZXAuMSkwJwYDVQQDEyBG -cmVlIFNTTCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEhMB8GCSqGSIb3DQEJARYS -YWRtaW5Ac3RhcnRjb20ub3JnMB4XDTA1MDMxNzE3Mzc0OFoXDTM1MDMxMDE3Mzc0 -OFowgbAxCzAJBgNVBAYTAklMMQ8wDQYDVQQIEwZJc3JhZWwxDjAMBgNVBAcTBUVp -bGF0MRYwFAYDVQQKEw1TdGFydENvbSBMdGQuMRowGAYDVQQLExFDQSBBdXRob3Jp -dHkgRGVwLjEpMCcGA1UEAxMgRnJlZSBTU0wgQ2VydGlmaWNhdGlvbiBBdXRob3Jp -dHkxITAfBgkqhkiG9w0BCQEWEmFkbWluQHN0YXJ0Y29tLm9yZzCBnzANBgkqhkiG -9w0BAQEFAAOBjQAwgYkCgYEA7YRgACOeyEpRKSfeOqE5tWmrCbIvNP1h3D3TsM+x -18LEwrHkllbEvqoUDufMOlDIOmKdw6OsWXuO7lUaHEe+o5c5s7XvIywI6Nivcy+5 -yYPo7QAPyHWlLzRMGOh2iCNJitu27Wjaw7ViKUylS7eYtAkUEKD4/mJ2IhULpNYI -LzUCAwEAAaOCAjwwggI4MA8GA1UdEwEB/wQFMAMBAf8wCwYDVR0PBAQDAgHmMB0G -A1UdDgQWBBQcicOWzL3+MtUNjIExtpidjShkjTCB3QYDVR0jBIHVMIHSgBQcicOW -zL3+MtUNjIExtpidjShkjaGBtqSBszCBsDELMAkGA1UEBhMCSUwxDzANBgNVBAgT -BklzcmFlbDEOMAwGA1UEBxMFRWlsYXQxFjAUBgNVBAoTDVN0YXJ0Q29tIEx0ZC4x -GjAYBgNVBAsTEUNBIEF1dGhvcml0eSBEZXAuMSkwJwYDVQQDEyBGcmVlIFNTTCBD -ZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEhMB8GCSqGSIb3DQEJARYSYWRtaW5Ac3Rh -cnRjb20ub3JnggEAMB0GA1UdEQQWMBSBEmFkbWluQHN0YXJ0Y29tLm9yZzAdBgNV -HRIEFjAUgRJhZG1pbkBzdGFydGNvbS5vcmcwEQYJYIZIAYb4QgEBBAQDAgAHMC8G -CWCGSAGG+EIBDQQiFiBGcmVlIFNTTCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAy -BglghkgBhvhCAQQEJRYjaHR0cDovL2NlcnQuc3RhcnRjb20ub3JnL2NhLWNybC5j -cmwwKAYJYIZIAYb4QgECBBsWGWh0dHA6Ly9jZXJ0LnN0YXJ0Y29tLm9yZy8wOQYJ -YIZIAYb4QgEIBCwWKmh0dHA6Ly9jZXJ0LnN0YXJ0Y29tLm9yZy9pbmRleC5waHA/ -YXBwPTExMTANBgkqhkiG9w0BAQQFAAOBgQBscSXhnjSRIe/bbL0BCFaPiNhBOlP1 -ct8nV0t2hPdopP7rPwl+KLhX6h/BquL/lp9JmeaylXOWxkjHXo0Hclb4g4+fd68p -00UOpO6wNnQt8M2YI3s3S9r+UZjEHjQ8iP2ZO1CnwYszx8JSFhKVU2Ui77qLzmLb -cCOxgN8aIDjnfg== ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIDVDCCAjygAwIBAgIDAjRWMA0GCSqGSIb3DQEBBQUAMEIxCzAJBgNVBAYTAlVT -MRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMRswGQYDVQQDExJHZW9UcnVzdCBHbG9i -YWwgQ0EwHhcNMDIwNTIxMDQwMDAwWhcNMjIwNTIxMDQwMDAwWjBCMQswCQYDVQQG -EwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEbMBkGA1UEAxMSR2VvVHJ1c3Qg -R2xvYmFsIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2swYYzD9 -9BcjGlZ+W988bDjkcbd4kdS8odhM+KhDtgPpTSEHCIjaWC9mOSm9BXiLnTjoBbdq -fnGk5sRgprDvgOSJKA+eJdbtg/OtppHHmMlCGDUUna2YRpIuT8rxh0PBFpVXLVDv -iS2Aelet8u5fa9IAjbkU+BQVNdnARqN7csiRv8lVK83Qlz6cJmTM386DGXHKTubU -1XupGc1V3sjs0l44U+VcT4wt/lAjNvxm5suOpDkZALeVAjmRCw7+OC7RHQWa9k0+ -bw8HHa8sHo9gOeL6NlMTOdReJivbPagUvTLrGAMoUgRx5aszPeE4uwc2hGKceeoW -MPRfwCvocWvk+QIDAQABo1MwUTAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBTA -ephojYn7qwVkDBF9qn1luMrMTjAfBgNVHSMEGDAWgBTAephojYn7qwVkDBF9qn1l -uMrMTjANBgkqhkiG9w0BAQUFAAOCAQEANeMpauUvXVSOKVCUn5kaFOSPeCpilKIn -Z57QzxpeR+nBsqTP3UEaBU6bS+5Kb1VSsyShNwrrZHYqLizz/Tt1kL/6cdjHPTfS -tQWVYrmm3ok9Nns4d0iXrKYgjy6myQzCsplFAMfOEVEiIuCl6rYVSAlk6l5PdPcF -PseKUgzbFbS9bZvlxrFUaKnjaZC2mqUPuLk/IH2uSrW4nOQdtqvmlKXBx4Ot2/Un -hw4EbNX/3aBd7YdStysVAq45pmp06drE57xNNB6pXE0zX5IJL4hmXXeXxx12E6nV -5fEWCRE11azbJHFwLJhWC9kXtNHjUStedejV0NxPNO3CBWaAocvmMw== ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIDfDCCAmSgAwIBAgIQGKy1av1pthU6Y2yv2vrEoTANBgkqhkiG9w0BAQUFADBY -MQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjExMC8GA1UEAxMo -R2VvVHJ1c3QgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNjEx -MjcwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMFgxCzAJBgNVBAYTAlVTMRYwFAYDVQQK -Ew1HZW9UcnVzdCBJbmMuMTEwLwYDVQQDEyhHZW9UcnVzdCBQcmltYXJ5IENlcnRp -ZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC -AQEAvrgVe//UfH1nrYNke8hCUy3f9oQIIGHWAVlqnEQRr+92/ZV+zmEwu3qDXwK9 -AWbK7hWNb6EwnL2hhZ6UOvNWiAAxz9juapYC2e0DjPt1befquFUWBRaa9OBesYjA -ZIVcFU2Ix7e64HXprQU9nceJSOC7KMgD4TCTZF5SwFlwIjVXiIrxlQqD17wxcwE0 -7e9GceBrAqg1cmuXm2bgyxx5X9gaBGgeRwLmnWDiNpcB3841kt++Z8dtd1k7j53W -kBWUvEI0EME5+bEnPn7WinXFsq+W06Lem+SYvn3h6YGttm/81w7a4DSwDRp35+MI -mO9Y+pyEtzavwt+s0vQQBnBxNQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4G -A1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQULNVQQZcVi/CPNmFbSvtr2ZnJM5IwDQYJ -KoZIhvcNAQEFBQADggEBAFpwfyzdtzRP9YZRqSa+S7iq8XEN3GHHoOo0Hnp3DwQ1 -6CePbJC/kRYkRj5KTs4rFtULUh38H2eiAkUxT87z+gOneZ1TatnaYzr4gNfTmeGl -4b7UVXGYNTq+k+qurUKykG/g/CFNNWMziUnWm07Kx+dOCQD32sfvmWKZd7aVIl6K -oKv0uHiYyjgZmclynnjNS6yvGaBzEi38wkG6gZHaFloxt/m0cYASSJlyc1pZU8Fj -UjPtp8nSOQJw+uCxQmYpqptR7TBUIhRf2asdweSU8Pj1K/fqynhG1riR/aYNKxoU -AT6A8EKglQdebc3MS6RFjasS6LPeWuWgfOgPIh1a6Vk= ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIDIzCCAgugAwIBAgIQMDAwMTAwMDQ0ODczMzAwMDANBgkqhkiG9w0BAQUFADAf -MQswCQYDVQQGEwJGUjEQMA4GA1UEChMHR0lQLUNQUzAeFw0wMTA2MjYwMDAwMDBa -Fw0xMDEyMzEwMDAwMDBaMB8xCzAJBgNVBAYTAkZSMRAwDgYDVQQKEwdHSVAtQ1BT -MIIBITANBgkqhkiG9w0BAQEFAAOCAQ4AMIIBCQKCAQBvz+ogB2ovWM18JmOtizrL -Y2KgEZ8TpU6H7zu+r6cT1Q8xgLm8BPOfeW3eI/e0PLmZN+Sp+LZ4wyFMecJmp/FT -M9/9Gp23vpMePge/tJctwu0mihabVcUHFoIMtpKgSJ2+Xlywk16AjsHN3DONcWBa -xV4wa4Tt/BtaEkf9148pDn074lZZ2mKmANu9zNDm/buSgRkqqS1eVCbLxkRaMBSp -dwGAjsBYEqPjmI4So915ab3Eqqz5zawQwC4T+O41wRgpD9bDTo+9xAFiZz8PqYs9 -pc2tHOKhIlRxJbQqcWQW+St9I7Y+rRx2lTMrt6DD7CMoxrt1TuGzxdN777w1GSfx -AgMBAAGjXDBaMA4GA1UdDwEB/wQEAwICBDASBgNVHRMBAf8ECDAGAQH/AgEBMB0G -A1UdDgQWBBTnqP2NPQkWlq78dWMnkCN5XlvZtDAVBgNVHSAEDjAMMAoGCCqBegFH -AwcDMA0GCSqGSIb3DQEBBQUAA4IBAQAc9sFFWGgFJ14VGI91Cf1h9KYuuh1m2y2u -xF/mVb58IYBDE0fwG371XwpOHd6d9cM3ANSpK51V5EOmwgFDGkNGtDYcPXR+Ndli -rhD8aSq0Yv2p3h78o5O6y4GMRycFPsTfWpE9h7fGmsfZXWnYJGRAGM2iKYn7x3f7 -+kOrtbVj+XAvws7PqO2lLh/HjWCek4efnU9EaG6SDqu7srTuhyILFRBJ+sfOr68t -5bwyjufk391dbPBYcQ1AK9CQrnaorhPo+S7iNekX1e5iJShETVrZJkH/AAido34c -3ohHWmmZPyNW+5CpxZlRL6J6mlcAxIDqkXXsxj/r5zxGrW/jGwxo ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIExTCCA62gAwIBAgIBADANBgkqhkiG9w0BAQUFADB9MQswCQYDVQQGEwJFVTEn -MCUGA1UEChMeQUMgQ2FtZXJmaXJtYSBTQSBDSUYgQTgyNzQzMjg3MSMwIQYDVQQL -ExpodHRwOi8vd3d3LmNoYW1iZXJzaWduLm9yZzEgMB4GA1UEAxMXR2xvYmFsIENo -YW1iZXJzaWduIFJvb3QwHhcNMDMwOTMwMTYxNDE4WhcNMzcwOTMwMTYxNDE4WjB9 -MQswCQYDVQQGEwJFVTEnMCUGA1UEChMeQUMgQ2FtZXJmaXJtYSBTQSBDSUYgQTgy -NzQzMjg3MSMwIQYDVQQLExpodHRwOi8vd3d3LmNoYW1iZXJzaWduLm9yZzEgMB4G -A1UEAxMXR2xvYmFsIENoYW1iZXJzaWduIFJvb3QwggEgMA0GCSqGSIb3DQEBAQUA -A4IBDQAwggEIAoIBAQCicKLQn0KuWxfH2H3PFIP8T8mhtxOviteePgQKkotgVvq0 -Mi+ITaFgCPS3CU6gSS9J1tPfnZdan5QEcOw/Wdm3zGaLmFIoCQLfxS+EjXqXd7/s -QJ0lcqu1PzKY+7e3/HKE5TWH+VX6ox8Oby4o3Wmg2UIQxvi1RMLQQ3/bvOSiPGpV -eAp3qdjqGTK3L/5cPxvusZjsyq16aUXjlg9V9ubtdepl6DJWk0aJqCWKZQbua795 -B9Dxt6/tLE2Su8CoX6dnfQTyFQhwrJLWfQTSM/tMtgsL+xrJxI0DqX5c8lCrEqWh -z0hQpe/SyBoT+rB/sYIcd2oPX9wLlY/vQ37mRQklAgEDo4IBUDCCAUwwEgYDVR0T -AQH/BAgwBgEB/wIBDDA/BgNVHR8EODA2MDSgMqAwhi5odHRwOi8vY3JsLmNoYW1i -ZXJzaWduLm9yZy9jaGFtYmVyc2lnbnJvb3QuY3JsMB0GA1UdDgQWBBRDnDafsJ4w -TcbOX60Qq+UDpfqpFDAOBgNVHQ8BAf8EBAMCAQYwEQYJYIZIAYb4QgEBBAQDAgAH -MCoGA1UdEQQjMCGBH2NoYW1iZXJzaWducm9vdEBjaGFtYmVyc2lnbi5vcmcwKgYD -VR0SBCMwIYEfY2hhbWJlcnNpZ25yb290QGNoYW1iZXJzaWduLm9yZzBbBgNVHSAE -VDBSMFAGCysGAQQBgYcuCgEBMEEwPwYIKwYBBQUHAgEWM2h0dHA6Ly9jcHMuY2hh -bWJlcnNpZ24ub3JnL2Nwcy9jaGFtYmVyc2lnbnJvb3QuaHRtbDANBgkqhkiG9w0B -AQUFAAOCAQEAPDtwkfkEVCeR4e3t/mh/YV3lQWVPMvEYBZRqHN4fcNs+ezICNLUM -bKGKfKX0j//U2K0X1S0E0T9YgOKBWYi+wONGkyT+kL0mojAt6JcmVzWJdJYY9hXi -ryQZVgICsroPFOrGimbBhkVVi76SvpykBMdJPJ7oKXqJ1/6v/2j1pReQvayZzKWG -VwlnRtvWFsJG8eSpUPWP0ZIV018+xgBJOm5YstHRJw0lyDL4IBHNfTIzSJRUTN3c -ecQwn+uOuFW114hcxWokPbLTBQNRxgfvzBRydD1ucs4YKIxKoHflCStFREest2d/ -AYoFWpO+ocH/+OcOZ6RHSXZddZAa9SaP8A== ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIDujCCAqKgAwIBAgILBAAAAAABD4Ym5g0wDQYJKoZIhvcNAQEFBQAwTDEgMB4G -A1UECxMXR2xvYmFsU2lnbiBSb290IENBIC0gUjIxEzARBgNVBAoTCkdsb2JhbFNp -Z24xEzARBgNVBAMTCkdsb2JhbFNpZ24wHhcNMDYxMjE1MDgwMDAwWhcNMjExMjE1 -MDgwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxTaWduIFJvb3QgQ0EgLSBSMjETMBEG -A1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2lnbjCCASIwDQYJKoZI -hvcNAQEBBQADggEPADCCAQoCggEBAKbPJA6+Lm8omUVCxKs+IVSbC9N/hHD6ErPL -v4dfxn+G07IwXNb9rfF73OX4YJYJkhD10FPe+3t+c4isUoh7SqbKSaZeqKeMWhG8 -eoLrvozps6yWJQeXSpkqBy+0Hne/ig+1AnwblrjFuTosvNYSuetZfeLQBoZfXklq -tTleiDTsvHgMCJiEbKjNS7SgfQx5TfC4LcshytVsW33hoCmEofnTlEnLJGKRILzd -C9XZzPnqJworc5HGnRusyMvo4KD0L5CLTfuwNhv2GXqF4G3yYROIXJ/gkwpRl4pa -zq+r1feqCapgvdzZX99yqWATXgAByUr6P6TqBwMhAo6CygPCm48CAwEAAaOBnDCB -mTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUm+IH -V2ccHsBqBt5ZtJot39wZhi4wNgYDVR0fBC8wLTAroCmgJ4YlaHR0cDovL2NybC5n -bG9iYWxzaWduLm5ldC9yb290LXIyLmNybDAfBgNVHSMEGDAWgBSb4gdXZxwewGoG -3lm0mi3f3BmGLjANBgkqhkiG9w0BAQUFAAOCAQEAmYFThxxol4aR7OBKuEQLq4Gs -J0/WwbgcQ3izDJr86iw8bmEbTUsp9Z8FHSbBuOmDAGJFtqkIk7mpM0sYmsL4h4hO -291xNBrBVNpGP+DTKqttVCL1OmLNIG+6KYnX3ZHu01yiPqFbQfXf5WRDLenVOavS -ot+3i9DAgBkcRcAtjOj4LaR0VknFBbVPFd5uRHg5h6h+u/N5GJG79G+dwfCMNYxd -AfvDbbnvRG15RjF+Cv6pgsH/76tuIMRQyV+dTZsXjAzlAcmgQWpzU/qlULRuJQ/7 -TBj0/VLZjmmx6BEP3ojY+x1J96relc8geMJgEtslQIxq/H5COEBkEveegeGTLg== ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIDdTCCAl2gAwIBAgILAgAAAAAA1ni3lAUwDQYJKoZIhvcNAQEEBQAwVzELMAkG -A1UEBhMCQkUxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jv -b3QgQ0ExGzAZBgNVBAMTEkdsb2JhbFNpZ24gUm9vdCBDQTAeFw05ODA5MDExMjAw -MDBaFw0xNDAxMjgxMjAwMDBaMFcxCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9i -YWxTaWduIG52LXNhMRAwDgYDVQQLEwdSb290IENBMRswGQYDVQQDExJHbG9iYWxT -aWduIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDaDuaZ -jc6j40+Kfvvxi4Mla+pIH/EqsLmVEQS98GPR4mdmzxzdzxtIK+6NiY6arymAZavp -xy0Sy6scTHAHoT0KMM0VjU/43dSMUBUc71DuxC73/OlS8pF94G3VNTCOXkNz8kHp -1Wrjsok6Vjk4bwY8iGlbKk3Fp1S4bInMm/k8yuX9ifUSPJJ4ltbcdG6TRGHRjcdG -snUOhugZitVtbNV4FpWi6cgKOOvyJBNPc1STE4U6G7weNLWLBYy5d4ux2x8gkasJ -U26Qzns3dLlwR5EiUWMWea6xrkEmCMgZK9FGqkjWZCrXgzT/LCrBbBlDSgeF59N8 -9iFo7+ryUp9/k5DPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIABjAdBgNVHQ4EFgQU -YHtmGkUNl8qJUC99BM00qP/8/UswDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0B -AQQFAAOCAQEArqqf/LfSyx9fOSkoGJ40yWxPbxrwZKJwSk8ThptgKJ7ogUmYfQq7 -5bCdPTbbjwVR/wkxKh/diXeeDy5slQTthsu0AD+EAk2AaioteAuubyuig0SDH81Q -gkwkr733pbTIWg/050deSY43lv6aiAU62cDbKYfmGZZHpzqmjIs8d/5GY6dT2iHR -rH5Jokvmw2dZL7OKDrssvamqQnw1wdh/1acxOk5jQzmvCLBhNIzTmKlDNPYPhyk7 -ncJWWJh3w/cbrPad+D6qp1RF8PX51TFl/mtYnHGzHtdS6jIX/EBgHcl5JLL2bP2o -Zg6C3ZjL2sJETy6ge/L3ayx2EYRGinij4w== ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIEADCCAuigAwIBAgIBADANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEh -MB8GA1UEChMYVGhlIEdvIERhZGR5IEdyb3VwLCBJbmMuMTEwLwYDVQQLEyhHbyBE -YWRkeSBDbGFzcyAyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTA0MDYyOTE3 -MDYyMFoXDTM0MDYyOTE3MDYyMFowYzELMAkGA1UEBhMCVVMxITAfBgNVBAoTGFRo -ZSBHbyBEYWRkeSBHcm91cCwgSW5jLjExMC8GA1UECxMoR28gRGFkZHkgQ2xhc3Mg -MiBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASAwDQYJKoZIhvcNAQEBBQADggEN -ADCCAQgCggEBAN6d1+pXGEmhW+vXX0iG6r7d/+TvZxz0ZWizV3GgXne77ZtJ6XCA -PVYYYwhv2vLM0D9/AlQiVBDYsoHUwHU9S3/Hd8M+eKsaA7Ugay9qK7HFiH7Eux6w -wdhFJ2+qN1j3hybX2C32qRe3H3I2TqYXP2WYktsqbl2i/ojgC95/5Y0V4evLOtXi -EqITLdiOr18SPaAIBQi2XKVlOARFmR6jYGB0xUGlcmIbYsUfb18aQr4CUWWoriMY -avx4A6lNf4DD+qta/KFApMoZFv6yyO9ecw3ud72a9nmYvLEHZ6IVDd2gWMZEewo+ -YihfukEHU1jPEX44dMX4/7VpkI+EdOqXG68CAQOjgcAwgb0wHQYDVR0OBBYEFNLE -sNKR1EwRcbNhyz2h/t2oatTjMIGNBgNVHSMEgYUwgYKAFNLEsNKR1EwRcbNhyz2h -/t2oatTjoWekZTBjMQswCQYDVQQGEwJVUzEhMB8GA1UEChMYVGhlIEdvIERhZGR5 -IEdyb3VwLCBJbmMuMTEwLwYDVQQLEyhHbyBEYWRkeSBDbGFzcyAyIENlcnRpZmlj -YXRpb24gQXV0aG9yaXR5ggEAMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQAD -ggEBADJL87LKPpH8EsahB4yOd6AzBhRckB4Y9wimPQoZ+YeAEW5p5JYXMP80kWNy -OO7MHAGjHZQopDH2esRU1/blMVgDoszOYtuURXO1v0XJJLXVggKtI3lpjbi2Tc7P -TMozI+gciKqdi0FuFskg5YmezTvacPd+mSYgFFQlq25zheabIZ0KbIIOqPjCDPoQ -HmyW74cNxA9hi63ugyuV+I6ShHI56yDqg+2DzZduCLzrTia2cyvk0/ZM/iZx4mER -dEr/VxqHD3VILs9RaRegAhJhldXRQLIQTO7ErBBDpqWeCtWVYpoNz4iCxTIM5Cuf -ReYNnyicsbkqWletNw+vHX/bvZ8= ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIICWjCCAcMCAgGlMA0GCSqGSIb3DQEBBAUAMHUxCzAJBgNVBAYTAlVTMRgwFgYD -VQQKEw9HVEUgQ29ycG9yYXRpb24xJzAlBgNVBAsTHkdURSBDeWJlclRydXN0IFNv -bHV0aW9ucywgSW5jLjEjMCEGA1UEAxMaR1RFIEN5YmVyVHJ1c3QgR2xvYmFsIFJv -b3QwHhcNOTgwODEzMDAyOTAwWhcNMTgwODEzMjM1OTAwWjB1MQswCQYDVQQGEwJV -UzEYMBYGA1UEChMPR1RFIENvcnBvcmF0aW9uMScwJQYDVQQLEx5HVEUgQ3liZXJU -cnVzdCBTb2x1dGlvbnMsIEluYy4xIzAhBgNVBAMTGkdURSBDeWJlclRydXN0IEds -b2JhbCBSb290MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCVD6C28FCc6HrH -iM3dFw4usJTQGz0O9pTAipTHBsiQl8i4ZBp6fmw8U+E3KHNgf7KXUwefU/ltWJTS -r41tiGeA5u2ylc9yMcqlHHK6XALnZELn+aks1joNrI1CqiQBOeacPwGFVw1Yh0X4 -04Wqk2kmhXBIgD8SFcd5tB8FLztimQIDAQABMA0GCSqGSIb3DQEBBAUAA4GBAG3r -GwnpXtlR22ciYaQqPEh346B8pt5zohQDhT37qw4wxYMWM4ETCJ57NE7fQMh017l9 -3PR2VX2bY1QY6fDq81yx2YtCHrnAlU66+tXifPVoYb+O7AWXX1uw16OFNMQkpw0P -lZPvy5TYnh+dXIVtx6quTx8itc2VrbqnzPmrC3p/ ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIB+jCCAWMCAgGjMA0GCSqGSIb3DQEBBAUAMEUxCzAJBgNVBAYTAlVTMRgwFgYD -VQQKEw9HVEUgQ29ycG9yYXRpb24xHDAaBgNVBAMTE0dURSBDeWJlclRydXN0IFJv -b3QwHhcNOTYwMjIzMjMwMTAwWhcNMDYwMjIzMjM1OTAwWjBFMQswCQYDVQQGEwJV -UzEYMBYGA1UEChMPR1RFIENvcnBvcmF0aW9uMRwwGgYDVQQDExNHVEUgQ3liZXJU -cnVzdCBSb290MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC45k+625h8cXyv -RLfTD0bZZOWTwUKOx7pJjTUteueLveUFMVnGsS8KDPufpz+iCWaEVh43KRuH6X4M -ypqfpX/1FZSj1aJGgthoTNE3FQZor734sLPwKfWVWgkWYXcKIiXUT0Wqx73llt/5 -1KiOQswkwB6RJ0q1bQaAYznEol44AwIDAQABMA0GCSqGSIb3DQEBBAUAA4GBABKz -dcZfHeFhVYAA1IFLezEPI2PnPfMD+fQ2qLvZ46WXTeorKeDWanOB5sCJo9Px4KWl -IjeaY8JIILTbcuPI9tl8vrGvU9oUtCG41tWW4/5ODFlitppK+ULdjG+BqXH/9Apy -bW1EDp3zdHSo1TRJ6V6e6bR64eVaH4QwnNOfpSXY ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0 -IFZhbGlkYXRpb24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAz -BgNVBAsTLFZhbGlDZXJ0IENsYXNzIDEgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9y -aXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG -9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNTIyMjM0OFoXDTE5MDYy -NTIyMjM0OFowgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0d29y -azEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs -YXNzIDEgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRw -Oi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNl -cnQuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDYWYJ6ibiWuqYvaG9Y -LqdUHAZu9OqNSLwxlBfw8068srg1knaw0KWlAdcAAxIiGQj4/xEjm84H9b9pGib+ -TunRf50sQB1ZaG6m+FiwnRqP0z/x3BkGgagO4DrdyFNFCQbmD3DD+kCmDuJWBQ8Y -TfwggtFzVXSNdnKgHZ0dwN0/cQIDAQABMA0GCSqGSIb3DQEBBQUAA4GBAFBoPUn0 -LBwGlN+VYH+Wexf+T3GtZMjdd9LvWVXoP+iOBSoh8gfStadS/pyxtuJbdxdA6nLW -I8sogTLDAHkY7FkXicnGah5xyf23dKUlRWnFSKsZ4UWKJWsZ7uW7EvV/96aNUcPw -nXS3qT6gpf+2SQMT2iLM7XGCK5nPOrf1LXLI ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0 -IFZhbGlkYXRpb24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAz -BgNVBAsTLFZhbGlDZXJ0IENsYXNzIDIgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9y -aXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG -9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNjAwMTk1NFoXDTE5MDYy -NjAwMTk1NFowgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0d29y -azEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs -YXNzIDIgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRw -Oi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNl -cnQuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDOOnHK5avIWZJV16vY -dA757tn2VUdZZUcOBVXc65g2PFxTXdMwzzjsvUGJ7SVCCSRrCl6zfN1SLUzm1NZ9 -WlmpZdRJEy0kTRxQb7XBhVQ7/nHk01xC+YDgkRoKWzk2Z/M/VXwbP7RfZHM047QS -v4dk+NoS/zcnwbNDu+97bi5p9wIDAQABMA0GCSqGSIb3DQEBBQUAA4GBADt/UG9v -UJSZSWI4OB9L+KXIPqeCgfYrx+jFzug6EILLGACOTb2oWH+heQC1u+mNr0HZDzTu -IYEZoDJJKPTEjlbVUjP9UNV+mWwD5MlM/Mtsq2azSiGM5bUMMj4QssxsodyamEwC -W/POuZ6lcg5Ktz885hZo+L7tdEy8W9ViH0Pd ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0 -IFZhbGlkYXRpb24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAz -BgNVBAsTLFZhbGlDZXJ0IENsYXNzIDMgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9y -aXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG -9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNjAwMjIzM1oXDTE5MDYy -NjAwMjIzM1owgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0d29y -azEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs -YXNzIDMgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRw -Oi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNl -cnQuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDjmFGWHOjVsQaBalfD -cnWTq8+epvzzFlLWLU2fNUSoLgRNB0mKOCn1dzfnt6td3zZxFJmP3MKS8edgkpfs -2Ejcv8ECIMYkpChMMFp2bbFc893enhBxoYjHW5tBbcqwuI4V7q0zK89HBFx1cQqY -JJgpp0lZpd34t0NiYfPT4tBVPwIDAQABMA0GCSqGSIb3DQEBBQUAA4GBAFa7AliE -Zwgs3x/be0kz9dNnnfS0ChCzycUs4pJqcXgn8nCDQtM+z6lU9PHYkhaM0QTLS6vJ -n0WuPIqpsHEzXcjFV9+vqDWzf4mH6eglkrh/hXqu1rweN1gqZ8mRzyqBPu3GOd/A -PhmcGcwTTYJBtYze4D1gCCAPRX5ron+jjBXu ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIH/zCCB2igAwIBAgIBADANBgkqhkiG9w0BAQUFADCCARwxCzAJBgNVBAYTAkVT -MRIwEAYDVQQIEwlCYXJjZWxvbmExEjAQBgNVBAcTCUJhcmNlbG9uYTEuMCwGA1UE -ChMlSVBTIEludGVybmV0IHB1Ymxpc2hpbmcgU2VydmljZXMgcy5sLjErMCkGA1UE -ChQiaXBzQG1haWwuaXBzLmVzIEMuSS5GLiAgQi02MDkyOTQ1MjEzMDEGA1UECxMq -SVBTIENBIENoYWluZWQgQ0FzIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MTMwMQYD -VQQDEypJUFMgQ0EgQ2hhaW5lZCBDQXMgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkx -HjAcBgkqhkiG9w0BCQEWD2lwc0BtYWlsLmlwcy5lczAeFw0wMTEyMzExMTE0NTRa -Fw0yNTEyMjkxMTE0NTRaMIIBHDELMAkGA1UEBhMCRVMxEjAQBgNVBAgTCUJhcmNl -bG9uYTESMBAGA1UEBxMJQmFyY2Vsb25hMS4wLAYDVQQKEyVJUFMgSW50ZXJuZXQg -cHVibGlzaGluZyBTZXJ2aWNlcyBzLmwuMSswKQYDVQQKFCJpcHNAbWFpbC5pcHMu -ZXMgQy5JLkYuICBCLTYwOTI5NDUyMTMwMQYDVQQLEypJUFMgQ0EgQ2hhaW5lZCBD -QXMgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxMzAxBgNVBAMTKklQUyBDQSBDaGFp -bmVkIENBcyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEeMBwGCSqGSIb3DQEJARYP -aXBzQG1haWwuaXBzLmVzMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCpOZZJ -iHAzKHzoV9xIki3eLXp56UjxFehnY+c+Dh1nUiVO0t//vmGMP6B2LTFfx9FBKRBi -kYcW7raIcSDi62Or0sAG5UUgG4ruGLE7XtCnnx4xjgbFZ4tTjdgi5Wh9GVhfP7Oo -9ahi8Eqao+alFbhvB6LD3xZZqM2j9cmD8GzYAQIDAQABo4IESzCCBEcwHQYDVR0O -BBYEFAeUqHBsCqTumbhV3S5MRXf2Nq+5MIIBTgYDVR0jBIIBRTCCAUGAFAeUqHBs -CqTumbhV3S5MRXf2Nq+5oYIBJKSCASAwggEcMQswCQYDVQQGEwJFUzESMBAGA1UE -CBMJQmFyY2Vsb25hMRIwEAYDVQQHEwlCYXJjZWxvbmExLjAsBgNVBAoTJUlQUyBJ -bnRlcm5ldCBwdWJsaXNoaW5nIFNlcnZpY2VzIHMubC4xKzApBgNVBAoUImlwc0Bt -YWlsLmlwcy5lcyBDLkkuRi4gIEItNjA5Mjk0NTIxMzAxBgNVBAsTKklQUyBDQSBD -aGFpbmVkIENBcyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEzMDEGA1UEAxMqSVBT -IENBIENoYWluZWQgQ0FzIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MR4wHAYJKoZI -hvcNAQkBFg9pcHNAbWFpbC5pcHMuZXOCAQAwDAYDVR0TBAUwAwEB/zAMBgNVHQ8E -BQMDB/+AMGsGA1UdJQRkMGIGCCsGAQUFBwMBBggrBgEFBQcDAgYIKwYBBQUHAwMG -CCsGAQUFBwMEBggrBgEFBQcDCAYKKwYBBAGCNwIBFQYKKwYBBAGCNwIBFgYKKwYB -BAGCNwoDAQYKKwYBBAGCNwoDBDARBglghkgBhvhCAQEEBAMCAAcwGgYDVR0RBBMw -EYEPaXBzQG1haWwuaXBzLmVzMBoGA1UdEgQTMBGBD2lwc0BtYWlsLmlwcy5lczBD -BglghkgBhvhCAQ0ENhY0Q2hhaW5lZCBDQSBDZXJ0aWZpY2F0ZSBpc3N1ZWQgYnkg -aHR0cHM6Ly93d3cuaXBzLmVzLzAqBglghkgBhvhCAQIEHRYbaHR0cHM6Ly93d3cu -aXBzLmVzL2lwczIwMDIvMDgGCWCGSAGG+EIBBAQrFilodHRwczovL3d3dy5pcHMu -ZXMvaXBzMjAwMi9pcHMyMDAyQ0FDLmNybDA9BglghkgBhvhCAQMEMBYuaHR0cHM6 -Ly93d3cuaXBzLmVzL2lwczIwMDIvcmV2b2NhdGlvbkNBQy5odG1sPzA6BglghkgB -hvhCAQcELRYraHR0cHM6Ly93d3cuaXBzLmVzL2lwczIwMDIvcmVuZXdhbENBQy5o -dG1sPzA4BglghkgBhvhCAQgEKxYpaHR0cHM6Ly93d3cuaXBzLmVzL2lwczIwMDIv -cG9saWN5Q0FDLmh0bWwwbwYDVR0fBGgwZjAvoC2gK4YpaHR0cHM6Ly93d3cuaXBz -LmVzL2lwczIwMDIvaXBzMjAwMkNBQy5jcmwwM6AxoC+GLWh0dHBzOi8vd3d3YmFj -ay5pcHMuZXMvaXBzMjAwMi9pcHMyMDAyQ0FDLmNybDAvBggrBgEFBQcBAQQjMCEw -HwYIKwYBBQUHMAGGE2h0dHA6Ly9vY3NwLmlwcy5lcy8wDQYJKoZIhvcNAQEFBQAD -gYEATiRvY2nro9B6QNgTOgojWSrXMKpXHa6hLRxL2GZPEFg059x2ERs3pw7RlJJZ -ctupZam06zvBnGfQL4ZhevXl6ST6RAAmOikuj8kbiFSgujjCJY1wv5/7zzgBWzdL -NzqKC18p1T2KZa8B2qKfQCqzV/J3fgI/725+9ekqKNLiE5Q= ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIH8jCCB1ugAwIBAgIBADANBgkqhkiG9w0BAQUFADCCARIxCzAJBgNVBAYTAkVT -MRIwEAYDVQQIEwlCYXJjZWxvbmExEjAQBgNVBAcTCUJhcmNlbG9uYTEuMCwGA1UE -ChMlSVBTIEludGVybmV0IHB1Ymxpc2hpbmcgU2VydmljZXMgcy5sLjErMCkGA1UE -ChQiaXBzQG1haWwuaXBzLmVzIEMuSS5GLiAgQi02MDkyOTQ1MjEuMCwGA1UECxMl -SVBTIENBIENMQVNFMSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEuMCwGA1UEAxMl -SVBTIENBIENMQVNFMSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEeMBwGCSqGSIb3 -DQEJARYPaXBzQG1haWwuaXBzLmVzMB4XDTAxMTIzMTExMTEwM1oXDTI1MTIyOTEx -MTEwM1owggESMQswCQYDVQQGEwJFUzESMBAGA1UECBMJQmFyY2Vsb25hMRIwEAYD -VQQHEwlCYXJjZWxvbmExLjAsBgNVBAoTJUlQUyBJbnRlcm5ldCBwdWJsaXNoaW5n -IFNlcnZpY2VzIHMubC4xKzApBgNVBAoUImlwc0BtYWlsLmlwcy5lcyBDLkkuRi4g -IEItNjA5Mjk0NTIxLjAsBgNVBAsTJUlQUyBDQSBDTEFTRTEgQ2VydGlmaWNhdGlv -biBBdXRob3JpdHkxLjAsBgNVBAMTJUlQUyBDQSBDTEFTRTEgQ2VydGlmaWNhdGlv -biBBdXRob3JpdHkxHjAcBgkqhkiG9w0BCQEWD2lwc0BtYWlsLmlwcy5lczCBnzAN -BgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA55+R7+voFuF0vIkTodduR8ZfPxKU5u/h -M+GrgqufAwHmdG+KF5fPVy8Mdi7mbqfK2veLFBVADbNq2e2+s2q8Ai0chS3vl//P -l9rrR10eU79dVN4ndGMZfpXUMZblz0/Kq3Uvk5AsWUwfv1YokIhi4RMeBtOCVv3j -LSV1rDsiap8CAwEAAaOCBFIwggROMB0GA1UdDgQWBBRtW6MBjmE3nQR4tq+blh0C -QeXbeTCCAUQGA1UdIwSCATswggE3gBRtW6MBjmE3nQR4tq+blh0CQeXbeaGCARqk -ggEWMIIBEjELMAkGA1UEBhMCRVMxEjAQBgNVBAgTCUJhcmNlbG9uYTESMBAGA1UE -BxMJQmFyY2Vsb25hMS4wLAYDVQQKEyVJUFMgSW50ZXJuZXQgcHVibGlzaGluZyBT -ZXJ2aWNlcyBzLmwuMSswKQYDVQQKFCJpcHNAbWFpbC5pcHMuZXMgQy5JLkYuICBC -LTYwOTI5NDUyMS4wLAYDVQQLEyVJUFMgQ0EgQ0xBU0UxIENlcnRpZmljYXRpb24g -QXV0aG9yaXR5MS4wLAYDVQQDEyVJUFMgQ0EgQ0xBU0UxIENlcnRpZmljYXRpb24g -QXV0aG9yaXR5MR4wHAYJKoZIhvcNAQkBFg9pcHNAbWFpbC5pcHMuZXOCAQAwDAYD -VR0TBAUwAwEB/zAMBgNVHQ8EBQMDB/+AMGsGA1UdJQRkMGIGCCsGAQUFBwMBBggr -BgEFBQcDAgYIKwYBBQUHAwMGCCsGAQUFBwMEBggrBgEFBQcDCAYKKwYBBAGCNwIB -FQYKKwYBBAGCNwIBFgYKKwYBBAGCNwoDAQYKKwYBBAGCNwoDBDARBglghkgBhvhC -AQEEBAMCAAcwGgYDVR0RBBMwEYEPaXBzQG1haWwuaXBzLmVzMBoGA1UdEgQTMBGB -D2lwc0BtYWlsLmlwcy5lczBCBglghkgBhvhCAQ0ENRYzQ0xBU0UxIENBIENlcnRp -ZmljYXRlIGlzc3VlZCBieSBodHRwczovL3d3dy5pcHMuZXMvMCoGCWCGSAGG+EIB -AgQdFhtodHRwczovL3d3dy5pcHMuZXMvaXBzMjAwMi8wOwYJYIZIAYb4QgEEBC4W -LGh0dHBzOi8vd3d3Lmlwcy5lcy9pcHMyMDAyL2lwczIwMDJDTEFTRTEuY3JsMEAG -CWCGSAGG+EIBAwQzFjFodHRwczovL3d3dy5pcHMuZXMvaXBzMjAwMi9yZXZvY2F0 -aW9uQ0xBU0UxLmh0bWw/MD0GCWCGSAGG+EIBBwQwFi5odHRwczovL3d3dy5pcHMu -ZXMvaXBzMjAwMi9yZW5ld2FsQ0xBU0UxLmh0bWw/MDsGCWCGSAGG+EIBCAQuFixo -dHRwczovL3d3dy5pcHMuZXMvaXBzMjAwMi9wb2xpY3lDTEFTRTEuaHRtbDB1BgNV -HR8EbjBsMDKgMKAuhixodHRwczovL3d3dy5pcHMuZXMvaXBzMjAwMi9pcHMyMDAy -Q0xBU0UxLmNybDA2oDSgMoYwaHR0cHM6Ly93d3diYWNrLmlwcy5lcy9pcHMyMDAy -L2lwczIwMDJDTEFTRTEuY3JsMC8GCCsGAQUFBwEBBCMwITAfBggrBgEFBQcwAYYT -aHR0cDovL29jc3AuaXBzLmVzLzANBgkqhkiG9w0BAQUFAAOBgQBacEdMbCU0z2bO -X+iyJafrUbjPE+5KzJz2jB1YXC2d7kMy2Hhbp8gVyfUFQpd+F2IgBBj9z3IRNkDN -foHhdse5j2cUUH+fno9jj8EPE2GPhXVmCjIP6KuPp8yzz89gC+ry+bkfSFzjHUQt -K15I/jRAHfyJywwUrwtmklZIX0E5Og== ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIH8jCCB1ugAwIBAgIBADANBgkqhkiG9w0BAQUFADCCARIxCzAJBgNVBAYTAkVT -MRIwEAYDVQQIEwlCYXJjZWxvbmExEjAQBgNVBAcTCUJhcmNlbG9uYTEuMCwGA1UE -ChMlSVBTIEludGVybmV0IHB1Ymxpc2hpbmcgU2VydmljZXMgcy5sLjErMCkGA1UE -ChQiaXBzQG1haWwuaXBzLmVzIEMuSS5GLiAgQi02MDkyOTQ1MjEuMCwGA1UECxMl -SVBTIENBIENMQVNFMyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEuMCwGA1UEAxMl -SVBTIENBIENMQVNFMyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEeMBwGCSqGSIb3 -DQEJARYPaXBzQG1haWwuaXBzLmVzMB4XDTAxMTIzMTExMTkzMVoXDTI1MTIyOTEx -MTkzMVowggESMQswCQYDVQQGEwJFUzESMBAGA1UECBMJQmFyY2Vsb25hMRIwEAYD -VQQHEwlCYXJjZWxvbmExLjAsBgNVBAoTJUlQUyBJbnRlcm5ldCBwdWJsaXNoaW5n -IFNlcnZpY2VzIHMubC4xKzApBgNVBAoUImlwc0BtYWlsLmlwcy5lcyBDLkkuRi4g -IEItNjA5Mjk0NTIxLjAsBgNVBAsTJUlQUyBDQSBDTEFTRTMgQ2VydGlmaWNhdGlv -biBBdXRob3JpdHkxLjAsBgNVBAMTJUlQUyBDQSBDTEFTRTMgQ2VydGlmaWNhdGlv -biBBdXRob3JpdHkxHjAcBgkqhkiG9w0BCQEWD2lwc0BtYWlsLmlwcy5lczCBnzAN -BgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAve2QhYLxoN2P3DVo4Xw+6Gyb2vDjfzvB -JRvH+WFIXO3KItC1dJk2W7iFnsZJnb65Q6NDKxhwfQ4XnLuBSPqMVJ6EHB++I1p2 -pg0j7YOtec++o3ysS6zf1r01HSh8i85+AcGcgLO4Z79w9jtEGlSdrFhCLUjJJSEs -XdzSbkEFrkMCAwEAAaOCBFIwggROMB0GA1UdDgQWBBT7o4z3Z4tAqk02rzCA6po7 -4C9o6DCCAUQGA1UdIwSCATswggE3gBT7o4z3Z4tAqk02rzCA6po74C9o6KGCARqk -ggEWMIIBEjELMAkGA1UEBhMCRVMxEjAQBgNVBAgTCUJhcmNlbG9uYTESMBAGA1UE -BxMJQmFyY2Vsb25hMS4wLAYDVQQKEyVJUFMgSW50ZXJuZXQgcHVibGlzaGluZyBT -ZXJ2aWNlcyBzLmwuMSswKQYDVQQKFCJpcHNAbWFpbC5pcHMuZXMgQy5JLkYuICBC -LTYwOTI5NDUyMS4wLAYDVQQLEyVJUFMgQ0EgQ0xBU0UzIENlcnRpZmljYXRpb24g -QXV0aG9yaXR5MS4wLAYDVQQDEyVJUFMgQ0EgQ0xBU0UzIENlcnRpZmljYXRpb24g -QXV0aG9yaXR5MR4wHAYJKoZIhvcNAQkBFg9pcHNAbWFpbC5pcHMuZXOCAQAwDAYD -VR0TBAUwAwEB/zAMBgNVHQ8EBQMDB/+AMGsGA1UdJQRkMGIGCCsGAQUFBwMBBggr -BgEFBQcDAgYIKwYBBQUHAwMGCCsGAQUFBwMEBggrBgEFBQcDCAYKKwYBBAGCNwIB -FQYKKwYBBAGCNwIBFgYKKwYBBAGCNwoDAQYKKwYBBAGCNwoDBDARBglghkgBhvhC -AQEEBAMCAAcwGgYDVR0RBBMwEYEPaXBzQG1haWwuaXBzLmVzMBoGA1UdEgQTMBGB -D2lwc0BtYWlsLmlwcy5lczBCBglghkgBhvhCAQ0ENRYzQ0xBU0UzIENBIENlcnRp -ZmljYXRlIGlzc3VlZCBieSBodHRwczovL3d3dy5pcHMuZXMvMCoGCWCGSAGG+EIB -AgQdFhtodHRwczovL3d3dy5pcHMuZXMvaXBzMjAwMi8wOwYJYIZIAYb4QgEEBC4W -LGh0dHBzOi8vd3d3Lmlwcy5lcy9pcHMyMDAyL2lwczIwMDJDTEFTRTMuY3JsMEAG -CWCGSAGG+EIBAwQzFjFodHRwczovL3d3dy5pcHMuZXMvaXBzMjAwMi9yZXZvY2F0 -aW9uQ0xBU0UzLmh0bWw/MD0GCWCGSAGG+EIBBwQwFi5odHRwczovL3d3dy5pcHMu -ZXMvaXBzMjAwMi9yZW5ld2FsQ0xBU0UzLmh0bWw/MDsGCWCGSAGG+EIBCAQuFixo -dHRwczovL3d3dy5pcHMuZXMvaXBzMjAwMi9wb2xpY3lDTEFTRTMuaHRtbDB1BgNV -HR8EbjBsMDKgMKAuhixodHRwczovL3d3dy5pcHMuZXMvaXBzMjAwMi9pcHMyMDAy -Q0xBU0UzLmNybDA2oDSgMoYwaHR0cHM6Ly93d3diYWNrLmlwcy5lcy9pcHMyMDAy -L2lwczIwMDJDTEFTRTMuY3JsMC8GCCsGAQUFBwEBBCMwITAfBggrBgEFBQcwAYYT -aHR0cDovL29jc3AuaXBzLmVzLzANBgkqhkiG9w0BAQUFAAOBgQAiu2FuR8MoQlYw -3QtFc/BI7DgkUUeSIM49JoMU0H3a4Y+JbQxQ4q/n6yAbEuMETUyqob/HmS/NkLJq -ur3RvGBseDXgxNyePGjFc97ITNWf5X1+4CXtBf+TTKNEMg1UpPbCz+9EkjzTcYj1 -5tjLbAp/mmLLZmCOV7cCGuXGSTBNzA== ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIH/zCCB2igAwIBAgIBADANBgkqhkiG9w0BAQUFADCCARQxCzAJBgNVBAYTAkVT -MRIwEAYDVQQIEwlCYXJjZWxvbmExEjAQBgNVBAcTCUJhcmNlbG9uYTEuMCwGA1UE -ChMlSVBTIEludGVybmV0IHB1Ymxpc2hpbmcgU2VydmljZXMgcy5sLjErMCkGA1UE -ChQiaXBzQG1haWwuaXBzLmVzIEMuSS5GLiAgQi02MDkyOTQ1MjEvMC0GA1UECxMm -SVBTIENBIENMQVNFQTEgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxLzAtBgNVBAMT -JklQUyBDQSBDTEFTRUExIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MR4wHAYJKoZI -hvcNAQkBFg9pcHNAbWFpbC5pcHMuZXMwHhcNMDExMjMxMTEyMTQxWhcNMjUxMjI5 -MTEyMTQxWjCCARQxCzAJBgNVBAYTAkVTMRIwEAYDVQQIEwlCYXJjZWxvbmExEjAQ -BgNVBAcTCUJhcmNlbG9uYTEuMCwGA1UEChMlSVBTIEludGVybmV0IHB1Ymxpc2hp -bmcgU2VydmljZXMgcy5sLjErMCkGA1UEChQiaXBzQG1haWwuaXBzLmVzIEMuSS5G -LiAgQi02MDkyOTQ1MjEvMC0GA1UECxMmSVBTIENBIENMQVNFQTEgQ2VydGlmaWNh -dGlvbiBBdXRob3JpdHkxLzAtBgNVBAMTJklQUyBDQSBDTEFTRUExIENlcnRpZmlj -YXRpb24gQXV0aG9yaXR5MR4wHAYJKoZIhvcNAQkBFg9pcHNAbWFpbC5pcHMuZXMw -gZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAM8g89BgSKoCxBXZ5C+NnlURLSnM -UWZoAGXaFFWf6q7f69uN1nXaUfTEzPstvTUfE7fpZmF8lEDz+2AvjBg086hVnra0 -b0APA0VnanJyW2ZIlkKFGMCB4WJqh7JB7i45jITVXthPV2vsjlKM97Pnnhimz8Fb -r+RZcsz69vRptMqxAgMBAAGjggRbMIIEVzAdBgNVHQ4EFgQUL8zsbGe+T/iqPIiN -EvvHnUxb9F4wggFGBgNVHSMEggE9MIIBOYAUL8zsbGe+T/iqPIiNEvvHnUxb9F6h -ggEcpIIBGDCCARQxCzAJBgNVBAYTAkVTMRIwEAYDVQQIEwlCYXJjZWxvbmExEjAQ -BgNVBAcTCUJhcmNlbG9uYTEuMCwGA1UEChMlSVBTIEludGVybmV0IHB1Ymxpc2hp -bmcgU2VydmljZXMgcy5sLjErMCkGA1UEChQiaXBzQG1haWwuaXBzLmVzIEMuSS5G -LiAgQi02MDkyOTQ1MjEvMC0GA1UECxMmSVBTIENBIENMQVNFQTEgQ2VydGlmaWNh -dGlvbiBBdXRob3JpdHkxLzAtBgNVBAMTJklQUyBDQSBDTEFTRUExIENlcnRpZmlj -YXRpb24gQXV0aG9yaXR5MR4wHAYJKoZIhvcNAQkBFg9pcHNAbWFpbC5pcHMuZXOC -AQAwDAYDVR0TBAUwAwEB/zAMBgNVHQ8EBQMDB/+AMGsGA1UdJQRkMGIGCCsGAQUF -BwMBBggrBgEFBQcDAgYIKwYBBQUHAwMGCCsGAQUFBwMEBggrBgEFBQcDCAYKKwYB -BAGCNwIBFQYKKwYBBAGCNwIBFgYKKwYBBAGCNwoDAQYKKwYBBAGCNwoDBDARBglg -hkgBhvhCAQEEBAMCAAcwGgYDVR0RBBMwEYEPaXBzQG1haWwuaXBzLmVzMBoGA1Ud -EgQTMBGBD2lwc0BtYWlsLmlwcy5lczBDBglghkgBhvhCAQ0ENhY0Q0xBU0VBMSBD -QSBDZXJ0aWZpY2F0ZSBpc3N1ZWQgYnkgaHR0cHM6Ly93d3cuaXBzLmVzLzAqBglg -hkgBhvhCAQIEHRYbaHR0cHM6Ly93d3cuaXBzLmVzL2lwczIwMDIvMDwGCWCGSAGG -+EIBBAQvFi1odHRwczovL3d3dy5pcHMuZXMvaXBzMjAwMi9pcHMyMDAyQ0xBU0VB -MS5jcmwwQQYJYIZIAYb4QgEDBDQWMmh0dHBzOi8vd3d3Lmlwcy5lcy9pcHMyMDAy -L3Jldm9jYXRpb25DTEFTRUExLmh0bWw/MD4GCWCGSAGG+EIBBwQxFi9odHRwczov -L3d3dy5pcHMuZXMvaXBzMjAwMi9yZW5ld2FsQ0xBU0VBMS5odG1sPzA8BglghkgB -hvhCAQgELxYtaHR0cHM6Ly93d3cuaXBzLmVzL2lwczIwMDIvcG9saWN5Q0xBU0VB -MS5odG1sMHcGA1UdHwRwMG4wM6AxoC+GLWh0dHBzOi8vd3d3Lmlwcy5lcy9pcHMy -MDAyL2lwczIwMDJDTEFTRUExLmNybDA3oDWgM4YxaHR0cHM6Ly93d3diYWNrLmlw -cy5lcy9pcHMyMDAyL2lwczIwMDJDTEFTRUExLmNybDAvBggrBgEFBQcBAQQjMCEw -HwYIKwYBBQUHMAGGE2h0dHA6Ly9vY3NwLmlwcy5lcy8wDQYJKoZIhvcNAQEFBQAD -gYEAGY2khC4v4mlenqRcy8Mn8mcWca88t4CY9LCJMqlIt7i559BNkMMB66tXsNp9 -N2QhnTordKOjkdgZJmCb7DUdMJEQQT0Y5W7JA6WvHatAFu8feRJ4ImaTjI0Xz3Dd -Jbz6O++igCw0l4EY5gayn2BFpAm+7ZpEcdpR/OCOH80lNDo= ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIH/zCCB2igAwIBAgIBADANBgkqhkiG9w0BAQUFADCCARQxCzAJBgNVBAYTAkVT -MRIwEAYDVQQIEwlCYXJjZWxvbmExEjAQBgNVBAcTCUJhcmNlbG9uYTEuMCwGA1UE -ChMlSVBTIEludGVybmV0IHB1Ymxpc2hpbmcgU2VydmljZXMgcy5sLjErMCkGA1UE -ChQiaXBzQG1haWwuaXBzLmVzIEMuSS5GLiAgQi02MDkyOTQ1MjEvMC0GA1UECxMm -SVBTIENBIENMQVNFQTMgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxLzAtBgNVBAMT -JklQUyBDQSBDTEFTRUEzIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MR4wHAYJKoZI -hvcNAQkBFg9pcHNAbWFpbC5pcHMuZXMwHhcNMDExMjMxMTEyMzU5WhcNMjUxMjI5 -MTEyMzU5WjCCARQxCzAJBgNVBAYTAkVTMRIwEAYDVQQIEwlCYXJjZWxvbmExEjAQ -BgNVBAcTCUJhcmNlbG9uYTEuMCwGA1UEChMlSVBTIEludGVybmV0IHB1Ymxpc2hp -bmcgU2VydmljZXMgcy5sLjErMCkGA1UEChQiaXBzQG1haWwuaXBzLmVzIEMuSS5G -LiAgQi02MDkyOTQ1MjEvMC0GA1UECxMmSVBTIENBIENMQVNFQTMgQ2VydGlmaWNh -dGlvbiBBdXRob3JpdHkxLzAtBgNVBAMTJklQUyBDQSBDTEFTRUEzIENlcnRpZmlj -YXRpb24gQXV0aG9yaXR5MR4wHAYJKoZIhvcNAQkBFg9pcHNAbWFpbC5pcHMuZXMw -gZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMFh+lWUEmnBK5F6da6IALvvPO6f -MWYw9LFAmwJsjcdKTVElPugUKLwgPLHxjO19kdmXIqPVzGOxq9krIwvdppffBYRU -Fro6y8xja40gpdaeBXFGdVj19mR7C2adPoeVPTy1OTdSVLsWF8W/rdiLMy/p+PrV -gTP/t56Fpu9MOeDjAgMBAAGjggRbMIIEVzAdBgNVHQ4EFgQU/J6FGtwGJXEh8C+L -ElXQxYDuBq4wggFGBgNVHSMEggE9MIIBOYAU/J6FGtwGJXEh8C+LElXQxYDuBq6h -ggEcpIIBGDCCARQxCzAJBgNVBAYTAkVTMRIwEAYDVQQIEwlCYXJjZWxvbmExEjAQ -BgNVBAcTCUJhcmNlbG9uYTEuMCwGA1UEChMlSVBTIEludGVybmV0IHB1Ymxpc2hp -bmcgU2VydmljZXMgcy5sLjErMCkGA1UEChQiaXBzQG1haWwuaXBzLmVzIEMuSS5G -LiAgQi02MDkyOTQ1MjEvMC0GA1UECxMmSVBTIENBIENMQVNFQTMgQ2VydGlmaWNh -dGlvbiBBdXRob3JpdHkxLzAtBgNVBAMTJklQUyBDQSBDTEFTRUEzIENlcnRpZmlj -YXRpb24gQXV0aG9yaXR5MR4wHAYJKoZIhvcNAQkBFg9pcHNAbWFpbC5pcHMuZXOC -AQAwDAYDVR0TBAUwAwEB/zAMBgNVHQ8EBQMDB/+AMGsGA1UdJQRkMGIGCCsGAQUF -BwMBBggrBgEFBQcDAgYIKwYBBQUHAwMGCCsGAQUFBwMEBggrBgEFBQcDCAYKKwYB -BAGCNwIBFQYKKwYBBAGCNwIBFgYKKwYBBAGCNwoDAQYKKwYBBAGCNwoDBDARBglg -hkgBhvhCAQEEBAMCAAcwGgYDVR0RBBMwEYEPaXBzQG1haWwuaXBzLmVzMBoGA1Ud -EgQTMBGBD2lwc0BtYWlsLmlwcy5lczBDBglghkgBhvhCAQ0ENhY0Q0xBU0VBMyBD -QSBDZXJ0aWZpY2F0ZSBpc3N1ZWQgYnkgaHR0cHM6Ly93d3cuaXBzLmVzLzAqBglg -hkgBhvhCAQIEHRYbaHR0cHM6Ly93d3cuaXBzLmVzL2lwczIwMDIvMDwGCWCGSAGG -+EIBBAQvFi1odHRwczovL3d3dy5pcHMuZXMvaXBzMjAwMi9pcHMyMDAyQ0xBU0VB -My5jcmwwQQYJYIZIAYb4QgEDBDQWMmh0dHBzOi8vd3d3Lmlwcy5lcy9pcHMyMDAy -L3Jldm9jYXRpb25DTEFTRUEzLmh0bWw/MD4GCWCGSAGG+EIBBwQxFi9odHRwczov -L3d3dy5pcHMuZXMvaXBzMjAwMi9yZW5ld2FsQ0xBU0VBMy5odG1sPzA8BglghkgB -hvhCAQgELxYtaHR0cHM6Ly93d3cuaXBzLmVzL2lwczIwMDIvcG9saWN5Q0xBU0VB -My5odG1sMHcGA1UdHwRwMG4wM6AxoC+GLWh0dHBzOi8vd3d3Lmlwcy5lcy9pcHMy -MDAyL2lwczIwMDJDTEFTRUEzLmNybDA3oDWgM4YxaHR0cHM6Ly93d3diYWNrLmlw -cy5lcy9pcHMyMDAyL2lwczIwMDJDTEFTRUEzLmNybDAvBggrBgEFBQcBAQQjMCEw -HwYIKwYBBQUHMAGGE2h0dHA6Ly9vY3NwLmlwcy5lcy8wDQYJKoZIhvcNAQEFBQAD -gYEAGG8JN0Ca0pQR0X/Lg33qtKfi2JPe2iRqdRswDoL3CTn+bRN20V/wbKDAwyxc -7eJOroysytPkEF4wZhipaKCjaWJROZGCeU1jM7mZe9pQPzeofT//VLi8zKaUA4lZ -BvYI44gntZQoaFxJna5NHHde+mbbPYlHb8c6g0mf9S3tODs= ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIIQTCCB6qgAwIBAgIBADANBgkqhkiG9w0BAQUFADCCAR4xCzAJBgNVBAYTAkVT -MRIwEAYDVQQIEwlCYXJjZWxvbmExEjAQBgNVBAcTCUJhcmNlbG9uYTEuMCwGA1UE -ChMlSVBTIEludGVybmV0IHB1Ymxpc2hpbmcgU2VydmljZXMgcy5sLjErMCkGA1UE -ChQiaXBzQG1haWwuaXBzLmVzIEMuSS5GLiAgQi02MDkyOTQ1MjE0MDIGA1UECxMr -SVBTIENBIFRpbWVzdGFtcGluZyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTE0MDIG -A1UEAxMrSVBTIENBIFRpbWVzdGFtcGluZyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0 -eTEeMBwGCSqGSIb3DQEJARYPaXBzQG1haWwuaXBzLmVzMB4XDTAxMTIzMTExMjY0 -M1oXDTI1MTIyOTExMjY0M1owggEeMQswCQYDVQQGEwJFUzESMBAGA1UECBMJQmFy -Y2Vsb25hMRIwEAYDVQQHEwlCYXJjZWxvbmExLjAsBgNVBAoTJUlQUyBJbnRlcm5l -dCBwdWJsaXNoaW5nIFNlcnZpY2VzIHMubC4xKzApBgNVBAoUImlwc0BtYWlsLmlw -cy5lcyBDLkkuRi4gIEItNjA5Mjk0NTIxNDAyBgNVBAsTK0lQUyBDQSBUaW1lc3Rh -bXBpbmcgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxNDAyBgNVBAMTK0lQUyBDQSBU -aW1lc3RhbXBpbmcgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxHjAcBgkqhkiG9w0B -CQEWD2lwc0BtYWlsLmlwcy5lczCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA -0umTdn+FPP2gAb0RL0ZCDyt/BZvGa/VRcayaUh8flSfMkO+WP45RNv0WAM43pSGU -Rmvt5P+hfuqf0aKbOPMTxLmYumVFQ/nXvRWdlC4AYN6YGrk8yfXh/NbEJN/n48iE -GRK0HFyz9eIWYSdg8vAt5PDzrPigeYSdReL2AfBE5ZECAwEAAaOCBIkwggSFMB0G -A1UdDgQWBBSR2UK8nKnK0Bw3E1JXFqANHikdPjCCAVAGA1UdIwSCAUcwggFDgBSR -2UK8nKnK0Bw3E1JXFqANHikdPqGCASakggEiMIIBHjELMAkGA1UEBhMCRVMxEjAQ -BgNVBAgTCUJhcmNlbG9uYTESMBAGA1UEBxMJQmFyY2Vsb25hMS4wLAYDVQQKEyVJ -UFMgSW50ZXJuZXQgcHVibGlzaGluZyBTZXJ2aWNlcyBzLmwuMSswKQYDVQQKFCJp -cHNAbWFpbC5pcHMuZXMgQy5JLkYuICBCLTYwOTI5NDUyMTQwMgYDVQQLEytJUFMg -Q0EgVGltZXN0YW1waW5nIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MTQwMgYDVQQD -EytJUFMgQ0EgVGltZXN0YW1waW5nIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MR4w -HAYJKoZIhvcNAQkBFg9pcHNAbWFpbC5pcHMuZXOCAQAwDAYDVR0TBAUwAwEB/zAM -BgNVHQ8EBQMDB/+AMGsGA1UdJQRkMGIGCCsGAQUFBwMBBggrBgEFBQcDAgYIKwYB -BQUHAwMGCCsGAQUFBwMEBggrBgEFBQcDCAYKKwYBBAGCNwIBFQYKKwYBBAGCNwIB -FgYKKwYBBAGCNwoDAQYKKwYBBAGCNwoDBDARBglghkgBhvhCAQEEBAMCAAcwGgYD -VR0RBBMwEYEPaXBzQG1haWwuaXBzLmVzMBoGA1UdEgQTMBGBD2lwc0BtYWlsLmlw -cy5lczBIBglghkgBhvhCAQ0EOxY5VGltZXN0YW1waW5nIENBIENlcnRpZmljYXRl -IGlzc3VlZCBieSBodHRwczovL3d3dy5pcHMuZXMvMCoGCWCGSAGG+EIBAgQdFhto -dHRwczovL3d3dy5pcHMuZXMvaXBzMjAwMi8wQQYJYIZIAYb4QgEEBDQWMmh0dHBz -Oi8vd3d3Lmlwcy5lcy9pcHMyMDAyL2lwczIwMDJUaW1lc3RhbXBpbmcuY3JsMEYG -CWCGSAGG+EIBAwQ5FjdodHRwczovL3d3dy5pcHMuZXMvaXBzMjAwMi9yZXZvY2F0 -aW9uVGltZXN0YW1waW5nLmh0bWw/MEMGCWCGSAGG+EIBBwQ2FjRodHRwczovL3d3 -dy5pcHMuZXMvaXBzMjAwMi9yZW5ld2FsVGltZXN0YW1waW5nLmh0bWw/MEEGCWCG -SAGG+EIBCAQ0FjJodHRwczovL3d3dy5pcHMuZXMvaXBzMjAwMi9wb2xpY3lUaW1l -c3RhbXBpbmcuaHRtbDCBgQYDVR0fBHoweDA4oDagNIYyaHR0cHM6Ly93d3cuaXBz -LmVzL2lwczIwMDIvaXBzMjAwMlRpbWVzdGFtcGluZy5jcmwwPKA6oDiGNmh0dHBz -Oi8vd3d3YmFjay5pcHMuZXMvaXBzMjAwMi9pcHMyMDAyVGltZXN0YW1waW5nLmNy -bDAvBggrBgEFBQcBAQQjMCEwHwYIKwYBBQUHMAGGE2h0dHA6Ly9vY3NwLmlwcy5l -cy8wDQYJKoZIhvcNAQEFBQADgYEAxKMCdGABCUwYXU900W1zDCfTSDC1TxFVGRnH -I4soqfp4D34sJ/adkgD2GMgkAMVf+C1MY/yQFV4nmOal9K7SNrG1JR8OeDoRjpM4 -rtO9qYbuHD3TW47/y/aZSZxP4ccocGpPOkvqfrnndKRKY0WUk/7Qg5aqpIXni2Gg -olkTZbQ= ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIICtzCCAiACAQAwDQYJKoZIhvcNAQEEBQAwgaMxCzAJBgNVBAYTAkVTMRIwEAYD -VQQIEwlCQVJDRUxPTkExEjAQBgNVBAcTCUJBUkNFTE9OQTEZMBcGA1UEChMQSVBT -IFNlZ3VyaWRhZCBDQTEYMBYGA1UECxMPQ2VydGlmaWNhY2lvbmVzMRcwFQYDVQQD -Ew5JUFMgU0VSVklET1JFUzEeMBwGCSqGSIb3DQEJARYPaXBzQG1haWwuaXBzLmVz -MB4XDTk4MDEwMTIzMjEwN1oXDTA5MTIyOTIzMjEwN1owgaMxCzAJBgNVBAYTAkVT -MRIwEAYDVQQIEwlCQVJDRUxPTkExEjAQBgNVBAcTCUJBUkNFTE9OQTEZMBcGA1UE -ChMQSVBTIFNlZ3VyaWRhZCBDQTEYMBYGA1UECxMPQ2VydGlmaWNhY2lvbmVzMRcw -FQYDVQQDEw5JUFMgU0VSVklET1JFUzEeMBwGCSqGSIb3DQEJARYPaXBzQG1haWwu -aXBzLmVzMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCsT1J0nznqjtwlxLyY -XZhkJAk8IbPMGbWOlI6H0fg3PqHILVikgDVboXVsHUUMH2Fjal5vmwpMwci4YSM1 -gf/+rHhwLWjhOgeYlQJU3c0jt4BT18g3RXIGJBK6E2Ehim51KODFDzT9NthFf+G4 -Nu+z4cYgjui0OLzhPvYR3oydAQIDAQABMA0GCSqGSIb3DQEBBAUAA4GBACzzw3lY -JN7GO9HgQmm47mSzPWIBubOE3yN93ZjPEKn+ANgilgUTB1RXxafey9m4iEL2mdsU -dx+2/iU94aI+A6mB0i1sR/WWRowiq8jMDQ6XXotBtDvECgZAHd1G9AHduoIuPD14 -cJ58GNCr+Lh3B0Zx8coLY1xq+XKU1QFPoNtC ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIDczCCAlugAwIBAgIBBDANBgkqhkiG9w0BAQUFADBkMQswCQYDVQQGEwJLUjEN -MAsGA1UECgwES0lTQTEuMCwGA1UECwwlS29yZWEgQ2VydGlmaWNhdGlvbiBBdXRo -b3JpdHkgQ2VudHJhbDEWMBQGA1UEAwwNS0lTQSBSb290Q0EgMTAeFw0wNTA4MjQw -ODA1NDZaFw0yNTA4MjQwODA1NDZaMGQxCzAJBgNVBAYTAktSMQ0wCwYDVQQKDARL -SVNBMS4wLAYDVQQLDCVLb3JlYSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSBDZW50 -cmFsMRYwFAYDVQQDDA1LSVNBIFJvb3RDQSAxMIIBIDANBgkqhkiG9w0BAQEFAAOC -AQ0AMIIBCAKCAQEAvATk+hM58DSWIGtsaLv623f/J/es7C/n/fB/bW+MKs0lCVsk -9KFo/CjsySXirO3eyDOE9bClCTqnsUdIxcxPjHmc+QZXfd3uOPbPFLKc6tPAXXdi -8EcNuRpAU1xkcK8IWsD3z3X5bI1kKB4g/rcbGdNaZoNy4rCbvdMlFQ0yb2Q3lIVG -yHK+d9VuHygvx2nt54OJM1jT3qC/QOhDUO7cTWu8peqmyGGO9cNkrwYV3CmLP3WM -vHFE2/yttRcdbYmDz8Yzvb9Fov4Kn6MRXw+5H5wawkbMnChmn3AmPC7fqoD+jMUE -CSVPzZNHPDfqAmeS/vwiJFys0izgXAEzisEZ2wIBA6MyMDAwHQYDVR0OBBYEFL+2 -J9gDWnZlTGEBQVYx5Yt7OtnMMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEF -BQADggEBABOvUQveimpb5poKyLGQSk6hAp3MiNKrZr097LuxQpVqslxa/6FjZJap -aBV/JV6K+KRzwYCKhQoOUugy50X4TmWAkZl0Q+VFnUkq8JSV3enhMNITbslOsXfl -BM+tWh6UCVrXPAgcrnrpFDLBRa3SJkhyrKhB2vAhhzle3/xk/2F0KpzZm4tfwjeT -2KM3LzuTa7IbB6d/CVDv0zq+IWuKkDsnSlFOa56ch534eJAx7REnxqhZvvwYC/uO -fi5C4e3nCSG9uRPFVmf0JqZCQ5BEVLRxm3bkGhKsGigA35vB1fjbXKP4krG9tNT5 -UNkAAk/bg9ART6RCVmE6fhMy04Qfybo= ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIFUjCCBDqgAwIBAgIBAjANBgkqhkiG9w0BAQUFADBkMQswCQYDVQQGEwJLUjEN -MAsGA1UEChMES0lTQTEuMCwGA1UECxMlS29yZWEgQ2VydGlmaWNhdGlvbiBBdXRo -b3JpdHkgQ2VudHJhbDEWMBQGA1UEAxMNS0lTQSBSb290Q0EgMzAeFw0wNDExMTkw -NjM5NTFaFw0xNDExMTkwNjM5NTFaMGQxCzAJBgNVBAYTAktSMQ0wCwYDVQQKEwRL -SVNBMS4wLAYDVQQLEyVLb3JlYSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSBDZW50 -cmFsMRYwFAYDVQQDEw1LSVNBIFJvb3RDQSAzMIIBIDANBgkqhkiG9w0BAQEFAAOC -AQ0AMIIBCAKCAQEA3rrtF2Wu0b1KPazbgHLMWOHn4ZPazDB6z+8Lri2nQ6u/p0LP -CFYIpEcdffqG79gwlyY0YTyADvjU65/8IjAboW0+40zSVU4WQDfC9gdu2we1pYyW -geKbXH6UYcjOhDyx+gDmctMJhXfp3F4hT7TkTvTiF6tQrxz/oTlYdVsSspa5jfBw -YkhbVigqpYeRNrkeJPW5unu2UlFbF1pgBWycwubGjD756t08jP+J3kNwrB248XXN -OMpTDUdoasY8GMq94bS+DvTQ49IT+rBRERHUQavo9DmO4TSETwuTqmo4/OXGeEeu -dhf6oYA3BgAVCP1rI476cg2V1ktisWjC3TSbXQIBA6OCAg8wggILMB8GA1UdIwQY -MBaAFI+B8NqmzXQ8vmb0FWtGpP4GKMyqMB0GA1UdDgQWBBSPgfDaps10PL5m9BVr -RqT+BijMqjAOBgNVHQ8BAf8EBAMCAQYwggEuBgNVHSAEggElMIIBITCCAR0GBFUd -IAAwggETMDAGCCsGAQUFBwIBFiRodHRwOi8vd3d3LnJvb3RjYS5vci5rci9yY2Ev -Y3BzLmh0bWwwgd4GCCsGAQUFBwICMIHRHoHOx3QAIMd4yZ3BHLKUACCs9cd4x3jJ -ncEcx4WyyLLkACgAVABoAGkAcwAgAGMAZQByAHQAaQBmAGkAYwBhAHQAZQAgAGkA -cwAgAGEAYwBjAHIAZQBkAGkAdABlAGQAIAB1AG4AZABlAHIAIABFAGwAZQBjAHQA -cgBvAG4AaQBjACAAUwBpAGcAbgBhAHQAdQByAGUAIABBAGMAdAAgAG8AZgAgAHQA -aABlACAAUgBlAHAAdQBiAGwAaQBjACAAbwBmACAASwBvAHIAZQBhACkwMwYDVR0R -BCwwKqQoMCYxJDAiBgNVBAMMG+2VnOq1reygleuztOuztO2YuOynhO2dpeybkDAz -BgNVHRIELDAqpCgwJjEkMCIGA1UEAwwb7ZWc6rWt7KCV67O067O07Zi47KeE7Z2l -7JuQMA8GA1UdEwEB/wQFMAMBAf8wDAYDVR0kBAUwA4ABADANBgkqhkiG9w0BAQUF -AAOCAQEAz9b3Dv2wjG4FFY6oXCuyWtEeV6ZeGKqCEQj8mbdbp+PI0qLT+SQ09+Pk -rolUR9NpScmAwRHr4inH9gaLX7riXs+rw87P7pIl3J85Hg4D9N6QW6FwmVzHc07J -pHVJeyWhn4KSjU3sYcUMMqfHODiAVToqgx2cZHm5Dac1Smjvj/8F2LpOVmHY+Epw -mAiWk9hgxzrsX58dKzVPSBShmrtv7tIDhlPxEMcHVGJeNo7iHCsdF03m9VrvirqC -6HfZKBF+N4dKlArJQOk1pTr7ZD7yXxZ683bXzu4/RB1Fql8RqlMcOh9SUWJUD6OQ -Nc9Nb7rHviwJ8TX4Absk3TC8SA/u2Q== ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIDdjCCAl6gAwIBAgIEOhsEBTANBgkqhkiG9w0BAQUFADBRMQswCQYDVQQGEwJE -SzEMMAoGA1UEChMDS01EMQ8wDQYDVQQLEwZLTUQtQ0ExIzAhBgNVBAMTGktNRC1D -QSBLdmFsaWZpY2VyZXQgUGVyc29uMB4XDTAwMTEyMTIzMjQ1OVoXDTE1MTEyMjIz -MjQ1OVowUTELMAkGA1UEBhMCREsxDDAKBgNVBAoTA0tNRDEPMA0GA1UECxMGS01E -LUNBMSMwIQYDVQQDExpLTUQtQ0EgS3ZhbGlmaWNlcmV0IFBlcnNvbjCCASIwDQYJ -KoZIhvcNAQEBBQADggEPADCCAQoCggEBANriF4Xd6yD7ZlBE317UBDObn+vRMVc6 -p3wNQODdEDJe2z1ncCz9NJvhoLGdOJhyg7VVPh0P2c+KZ9WI9mWOKZI2bp2WkLju -jCcxbhTrurY3Wfc6gwLBqqFV8wWgaZKmvVWizjw9Kyi25f3yX4fOho6Qq2lvVbub -tvVFXAd51GJ+/2Yed+a4Or2bz2RcqHS81B3pywsD4mgJR5xREv5jqPfwNP+V7bkc -X+pfO4kVhZ/V+8MSPdQHgcV/iB3wP2mwgWyIBNc1reBidGTiz8unnWu55hcNfsvt -LJbTs9OHhsR7naRuy+S402nDnD5vnONOFEsiHn46w+T0rtu7h6j4OvkCAwEAAaNW -MFQwEgYDVR0TAQH/BAgwBgEB/wIBADAdBgNVHQ4EFgQUeWLqmhI42Jxj7DifDsW+ -DlQhKD0wHwYDVR0jBBgwFoAUeWLqmhI42Jxj7DifDsW+DlQhKD0wDQYJKoZIhvcN -AQEFBQADggEBANML/P42OuJ9aUV/0fItuIyc1JhqWvSqn5bXj+9eyEegcp8bHLHY -42D1O+z0lNipdjYPSdMJ0wZOEUhr+150SdDQ1P/zQL8AUaLEBkRt7ZdzXPVH3PER -qnf9IrpYBknZKfCAoVchA6Rr9WU3Sd8bMoRfMLKg8c0M8G6EPwCTcOFriSkbtvNG -zd8r8I+WfUYIN/p8DI9JT9qfjVODnYPRMUm6KPvq27TsrGruKrqyaV94kWc8co8A -v3zFLeCtghvUiRBdx+8Q7m5t4CkuSr0WINrqjIPFW2QrM1r82y09Fd16RkqL4LOg -Lh6vB5KnTApv62rWdw7zWwYnjY6/vXYY1Aw= ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIDWjCCAkKgAwIBAgIEO8rJUjANBgkqhkiG9w0BAQUFADBmMQswCQYDVQQGEwJE -SzEMMAoGA1UEChMDS01EMQ8wDQYDVQQLEwZLTUQtQ0ExFjAUBgNVBAMTDUtNRC1D -QSBTZXJ2ZXIxIDAeBgoJkiaJk/IsZAEDFBBpbmZvY2FAa21kLWNhLmRrMB4XDTk4 -MTAxNjE5MTkyMVoXDTE4MTAxMjE5MTkyMVowZjELMAkGA1UEBhMCREsxDDAKBgNV -BAoTA0tNRDEPMA0GA1UECxMGS01ELUNBMRYwFAYDVQQDEw1LTUQtQ0EgU2VydmVy -MSAwHgYKCZImiZPyLGQBAxQQaW5mb2NhQGttZC1jYS5kazCCASIwDQYJKoZIhvcN -AQEBBQADggEPADCCAQoCggEBAJsLpbSgFxQ7IhFgf5f+RfBxnbCkx5C7yTjfCZvp -/BP2LBD3OKjgLRwvASoCU3I5NMhccho6uhZVf1HC+Ac5HmXUUd+v92a7gDnohPPy -Rgv8c6f/+R2fFen37SBemYFDtZveamVXZ2To7xAxNiMKgPTPs/Rl7F6LDsYgv1bD -36FrjahNoSTmTbYRoK21eIOVwrZeNSzo9w3W8fj0n+V2IB1jsOh+AvjXkjbvAVky -0/57GMlyBNKP7JIGP7LXqwWfrBXuAph1DUMz467KlHZOMkPwCjTZOab7CcLQXCCY -12s5c5QAkwpf35hQRuOaNo6d/XFM6J9mofiWlGTT3Px1EX0CAwEAAaMQMA4wDAYD -VR0TBAUwAwEB/zANBgkqhkiG9w0BAQUFAAOCAQEAPlA6VZ2C2cJbsI0SBIe9v+M9 -GxI45QI7P0D7QGyrqM7oNqGq7hJdN6NFb0LyPcF3/pVzmtYVJzaGKF6spaxOEveB -9ki1xRoXUKpaCxSweBpTzEktWa43OytRy0sbryEmHJCQkz8MPufWssf2yXHzgFFo -XMQpcMyT7JwxPlfYVvab9Kp+nW7fIyDOG0wdmBerZ+GEQJxJEkri1HskjigxhGze -ziocJatBuOWgqw5KRylgGIQjUGRTCbODVta+Kmqb9d+cB7FStbYtt2HebOXzBIY3 -XUM5KtGC++We7DqgU5Firek7brw8i2XsHPLKJTceb6Xo6DsSxLfBAWV6+8DCkQ== ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIDtDCCApygAwIBAgIBADANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJKUDEc -MBoGA1UEChMTSmFwYW5lc2UgR292ZXJubWVudDEOMAwGA1UECxMFTVBIUFQxJjAk -BgNVBAsTHU1QSFBUIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTAyMDMxNDA3 -NTAyNloXDTEyMDMxMzE0NTk1OVowYzELMAkGA1UEBhMCSlAxHDAaBgNVBAoTE0ph -cGFuZXNlIEdvdmVybm1lbnQxDjAMBgNVBAsTBU1QSFBUMSYwJAYDVQQLEx1NUEhQ -VCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASIwDQYJKoZIhvcNAQEBBQADggEP -ADCCAQoCggEBAI3GUWlK9G9FVm8DhpKu5t37oxZbj6lZcFvEZY07YrYojWO657ub -z56WE7q/PI/6Sm7i7qYE+Vp80r6thJvfmn7SS3BENrRqiapSenhooYD12jIe3iZQ -2SXqx7WgYwyBGdQwGaYTijzbRFpgc0K8o4a99fIoHhz9J8AKqXasddMCqfJRaH30 -YJ7HnOvRYGL6HBrGhJ7X4Rzijyk9a9+3VOBsYcnIlx9iODoiYhA6r0ojuIu8/JA1 -oTTZrS0MyU/SLdFdJze2O1wnqTULXQybzJz3ad6oC/F5a69c0m92akYd9nGBrPxj -EhucaQynC/QoCLs3aciLgioAnEJqy7i3EgUCAwEAAaNzMHEwHwYDVR0jBBgwFoAU -YML3pLoA0h93Yngl8Gb/UgAh73owHQYDVR0OBBYEFGDC96S6ANIfd2J4JfBm/1IA -Ie96MAwGA1UdEwQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMBEGCWCGSAGG+EIBAQQE -AwIABTANBgkqhkiG9w0BAQUFAAOCAQEANPR8DN66iWZBs/lSm1vOzhqRkXDLT6xL -LvJtjPLqmE469szGyFSKzsof6y+/8YgZlOoeX1inF4ox/SH1ATnwdIIsPbXuRLjt -axboXvBh5y2ffC3hmzJVvJ87tb6mVWQeL9VFUhNhAI0ib+9OIZVEYI/64MFkDk4e -iWG5ts6oqIJH1V7dVZg6pQ1Tc0Ckhn6N1m1hD30S0/zoPn/20Wq6OCF3he8VJrRG -dcW9BD/Bkesko1HKhMBDjHVrJ8cFwbnDSoo+Ki47eJWaz/cOzaSsaMVUsR5POava -/abhhgHn/eOJdXiVslyK0DYscjsdB3aBUfwZlomxYOzG6CgjQPhJdw== ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIFTzCCBLigAwIBAgIBaDANBgkqhkiG9w0BAQQFADCBmzELMAkGA1UEBhMCSFUx -ETAPBgNVBAcTCEJ1ZGFwZXN0MScwJQYDVQQKEx5OZXRMb2NrIEhhbG96YXRiaXp0 -b25zYWdpIEtmdC4xGjAYBgNVBAsTEVRhbnVzaXR2YW55a2lhZG9rMTQwMgYDVQQD -EytOZXRMb2NrIEV4cHJlc3N6IChDbGFzcyBDKSBUYW51c2l0dmFueWtpYWRvMB4X -DTk5MDIyNTE0MDgxMVoXDTE5MDIyMDE0MDgxMVowgZsxCzAJBgNVBAYTAkhVMREw -DwYDVQQHEwhCdWRhcGVzdDEnMCUGA1UEChMeTmV0TG9jayBIYWxvemF0Yml6dG9u -c2FnaSBLZnQuMRowGAYDVQQLExFUYW51c2l0dmFueWtpYWRvazE0MDIGA1UEAxMr -TmV0TG9jayBFeHByZXNzeiAoQ2xhc3MgQykgVGFudXNpdHZhbnlraWFkbzCBnzAN -BgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA6+ywbGGKIyWvYCDj2Z/8kwvbXY2wobNA -OoLO/XXgeDIDhlqGlZHtU/qdQPzm6N3ZW3oDvV3zOwzDUXmbrVWg6dADEK8KuhRC -2VImESLH0iDMgqSaqf64gXadarfSNnU+sYYJ9m5tfk63euyucYT2BDMIJTLrdKwW -RMbkQJMdf60CAwEAAaOCAp8wggKbMBIGA1UdEwEB/wQIMAYBAf8CAQQwDgYDVR0P -AQH/BAQDAgAGMBEGCWCGSAGG+EIBAQQEAwIABzCCAmAGCWCGSAGG+EIBDQSCAlEW -ggJNRklHWUVMRU0hIEV6ZW4gdGFudXNpdHZhbnkgYSBOZXRMb2NrIEtmdC4gQWx0 -YWxhbm9zIFN6b2xnYWx0YXRhc2kgRmVsdGV0ZWxlaWJlbiBsZWlydCBlbGphcmFz -b2sgYWxhcGphbiBrZXN6dWx0LiBBIGhpdGVsZXNpdGVzIGZvbHlhbWF0YXQgYSBO -ZXRMb2NrIEtmdC4gdGVybWVrZmVsZWxvc3NlZy1iaXp0b3NpdGFzYSB2ZWRpLiBB -IGRpZ2l0YWxpcyBhbGFpcmFzIGVsZm9nYWRhc2FuYWsgZmVsdGV0ZWxlIGF6IGVs -b2lydCBlbGxlbm9yemVzaSBlbGphcmFzIG1lZ3RldGVsZS4gQXogZWxqYXJhcyBs -ZWlyYXNhIG1lZ3RhbGFsaGF0byBhIE5ldExvY2sgS2Z0LiBJbnRlcm5ldCBob25s -YXBqYW4gYSBodHRwczovL3d3dy5uZXRsb2NrLm5ldC9kb2NzIGNpbWVuIHZhZ3kg -a2VyaGV0byBheiBlbGxlbm9yemVzQG5ldGxvY2submV0IGUtbWFpbCBjaW1lbi4g -SU1QT1JUQU5UISBUaGUgaXNzdWFuY2UgYW5kIHRoZSB1c2Ugb2YgdGhpcyBjZXJ0 -aWZpY2F0ZSBpcyBzdWJqZWN0IHRvIHRoZSBOZXRMb2NrIENQUyBhdmFpbGFibGUg -YXQgaHR0cHM6Ly93d3cubmV0bG9jay5uZXQvZG9jcyBvciBieSBlLW1haWwgYXQg -Y3BzQG5ldGxvY2submV0LjANBgkqhkiG9w0BAQQFAAOBgQAQrX/XDDKACtiG8XmY -ta3UzbM2xJZIwVzNmtkFLp++UOv0JhQQLdRmF/iewSf98e3ke0ugbLWrmldwpu2g -pO0u9f38vf5NNwgMvOOWgyL1SRt/Syu0VMGAfJlOHdCM7tCs5ZL6dVb+ZKATj7i4 -Fp1hBWeAyNDYpQcCNJgEjTME1A== ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIGfTCCBWWgAwIBAgICAQMwDQYJKoZIhvcNAQEEBQAwga8xCzAJBgNVBAYTAkhV -MRAwDgYDVQQIEwdIdW5nYXJ5MREwDwYDVQQHEwhCdWRhcGVzdDEnMCUGA1UEChMe -TmV0TG9jayBIYWxvemF0Yml6dG9uc2FnaSBLZnQuMRowGAYDVQQLExFUYW51c2l0 -dmFueWtpYWRvazE2MDQGA1UEAxMtTmV0TG9jayBLb3pqZWd5em9pIChDbGFzcyBB -KSBUYW51c2l0dmFueWtpYWRvMB4XDTk5MDIyNDIzMTQ0N1oXDTE5MDIxOTIzMTQ0 -N1owga8xCzAJBgNVBAYTAkhVMRAwDgYDVQQIEwdIdW5nYXJ5MREwDwYDVQQHEwhC -dWRhcGVzdDEnMCUGA1UEChMeTmV0TG9jayBIYWxvemF0Yml6dG9uc2FnaSBLZnQu -MRowGAYDVQQLExFUYW51c2l0dmFueWtpYWRvazE2MDQGA1UEAxMtTmV0TG9jayBL -b3pqZWd5em9pIChDbGFzcyBBKSBUYW51c2l0dmFueWtpYWRvMIIBIjANBgkqhkiG -9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvHSMD7tM9DceqQWC2ObhbHDqeLVu0ThEDaiD -zl3S1tWBxdRL51uUcCbbO51qTGL3cfNk1mE7PetzozfZz+qMkjvN9wfcZnSX9EUi -3fRc4L9t875lM+QVOr/bmJBVOMTtplVjC7B4BPTjbsE/jvxReB+SnoPC/tmwqcm8 -WgD/qaiYdPv2LD4VOQ22BFWoDpggQrOxJa1+mm9dU7GrDPzr4PN6s6iz/0b2Y6LY -Oph7tqyF/7AlT3Rj5xMHpQqPBffAZG9+pyeAlt7ULoZgx2srXnN7F+eRP2QM2Esi -NCubMvJIH5+hCoR64sKtlz2O1cH5VqNQ6ca0+pii7pXmKgOM3wIDAQABo4ICnzCC -ApswDgYDVR0PAQH/BAQDAgAGMBIGA1UdEwEB/wQIMAYBAf8CAQQwEQYJYIZIAYb4 -QgEBBAQDAgAHMIICYAYJYIZIAYb4QgENBIICURaCAk1GSUdZRUxFTSEgRXplbiB0 -YW51c2l0dmFueSBhIE5ldExvY2sgS2Z0LiBBbHRhbGFub3MgU3pvbGdhbHRhdGFz -aSBGZWx0ZXRlbGVpYmVuIGxlaXJ0IGVsamFyYXNvayBhbGFwamFuIGtlc3p1bHQu -IEEgaGl0ZWxlc2l0ZXMgZm9seWFtYXRhdCBhIE5ldExvY2sgS2Z0LiB0ZXJtZWtm -ZWxlbG9zc2VnLWJpenRvc2l0YXNhIHZlZGkuIEEgZGlnaXRhbGlzIGFsYWlyYXMg -ZWxmb2dhZGFzYW5hayBmZWx0ZXRlbGUgYXogZWxvaXJ0IGVsbGVub3J6ZXNpIGVs -amFyYXMgbWVndGV0ZWxlLiBBeiBlbGphcmFzIGxlaXJhc2EgbWVndGFsYWxoYXRv -IGEgTmV0TG9jayBLZnQuIEludGVybmV0IGhvbmxhcGphbiBhIGh0dHBzOi8vd3d3 -Lm5ldGxvY2submV0L2RvY3MgY2ltZW4gdmFneSBrZXJoZXRvIGF6IGVsbGVub3J6 -ZXNAbmV0bG9jay5uZXQgZS1tYWlsIGNpbWVuLiBJTVBPUlRBTlQhIFRoZSBpc3N1 -YW5jZSBhbmQgdGhlIHVzZSBvZiB0aGlzIGNlcnRpZmljYXRlIGlzIHN1YmplY3Qg -dG8gdGhlIE5ldExvY2sgQ1BTIGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5uZXRs -b2NrLm5ldC9kb2NzIG9yIGJ5IGUtbWFpbCBhdCBjcHNAbmV0bG9jay5uZXQuMA0G -CSqGSIb3DQEBBAUAA4IBAQBIJEb3ulZv+sgoA0BO5TE5ayZrU3/b39/zcT0mwBQO -xmd7I6gMc90Bu8bKbjc5VdXHjFYgDigKDtIqpLBJUsY4B/6+CgmM0ZjPytoUMaFP -0jn8DxEsQ8Pdq5PHVT5HfBgaANzze9jyf1JsIPQLX2lS9O74silg6+NJMSEN1rUQ -QeJBCWziGppWS3cC9qCbmieH6FUpccKQn0V4GuEVZD3QDtigdp+uxdAu6tYPVuxk -f1qbFFgBJ34TUMdrKuZoPL9coAob4Q566eKAw+np9v1sEZ7Q5SgnK1QyQhSCdeZK -8CtmdWOMovsEPoMOmzbwGOQmIMOM8CgHrTwXZoi1/baI ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIG0TCCBbmgAwIBAgIBezANBgkqhkiG9w0BAQUFADCByTELMAkGA1UEBhMCSFUx -ETAPBgNVBAcTCEJ1ZGFwZXN0MScwJQYDVQQKEx5OZXRMb2NrIEhhbG96YXRiaXp0 -b25zYWdpIEtmdC4xGjAYBgNVBAsTEVRhbnVzaXR2YW55a2lhZG9rMUIwQAYDVQQD -EzlOZXRMb2NrIE1pbm9zaXRldHQgS296amVneXpvaSAoQ2xhc3MgUUEpIFRhbnVz -aXR2YW55a2lhZG8xHjAcBgkqhkiG9w0BCQEWD2luZm9AbmV0bG9jay5odTAeFw0w -MzAzMzAwMTQ3MTFaFw0yMjEyMTUwMTQ3MTFaMIHJMQswCQYDVQQGEwJIVTERMA8G -A1UEBxMIQnVkYXBlc3QxJzAlBgNVBAoTHk5ldExvY2sgSGFsb3phdGJpenRvbnNh -Z2kgS2Z0LjEaMBgGA1UECxMRVGFudXNpdHZhbnlraWFkb2sxQjBABgNVBAMTOU5l -dExvY2sgTWlub3NpdGV0dCBLb3pqZWd5em9pIChDbGFzcyBRQSkgVGFudXNpdHZh -bnlraWFkbzEeMBwGCSqGSIb3DQEJARYPaW5mb0BuZXRsb2NrLmh1MIIBIjANBgkq -hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAx1Ilstg91IRVCacbvWy5FPSKAtt2/Goq -eKvld/Bu4IwjZ9ulZJm53QE+b+8tmjwi8F3JV6BVQX/yQ15YglMxZc4e8ia6AFQe -r7C8HORSjKAyr7c3sVNnaHRnUPYtLmTeriZ539+Zhqurf4XsoPuAzPS4DB6TRWO5 -3Lhbm+1bOdRfYrCnjnxmOCyqsQhjF2d9zL2z8cM/z1A57dEZgxXbhxInlrfa6uWd -vLrqOU+L73Sa58XQ0uqGURzk/mQIKAR5BevKxXEOC++r6uwSEaEYBTJp0QwsGj0l -mT+1fMptsK6ZmfoIYOcZwvK9UdPM0wKswREMgM6r3JSda6M5UzrWhQIDAMV9o4IC -wDCCArwwEgYDVR0TAQH/BAgwBgEB/wIBBDAOBgNVHQ8BAf8EBAMCAQYwggJ1Bglg -hkgBhvhCAQ0EggJmFoICYkZJR1lFTEVNISBFemVuIHRhbnVzaXR2YW55IGEgTmV0 -TG9jayBLZnQuIE1pbm9zaXRldHQgU3pvbGdhbHRhdGFzaSBTemFiYWx5emF0YWJh -biBsZWlydCBlbGphcmFzb2sgYWxhcGphbiBrZXN6dWx0LiBBIG1pbm9zaXRldHQg -ZWxla3Ryb25pa3VzIGFsYWlyYXMgam9naGF0YXMgZXJ2ZW55ZXN1bGVzZW5laywg -dmFsYW1pbnQgZWxmb2dhZGFzYW5hayBmZWx0ZXRlbGUgYSBNaW5vc2l0ZXR0IFN6 -b2xnYWx0YXRhc2kgU3phYmFseXphdGJhbiwgYXogQWx0YWxhbm9zIFN6ZXJ6b2Rl -c2kgRmVsdGV0ZWxla2JlbiBlbG9pcnQgZWxsZW5vcnplc2kgZWxqYXJhcyBtZWd0 -ZXRlbGUuIEEgZG9rdW1lbnR1bW9rIG1lZ3RhbGFsaGF0b2sgYSBodHRwczovL3d3 -dy5uZXRsb2NrLmh1L2RvY3MvIGNpbWVuIHZhZ3kga2VyaGV0b2sgYXogaW5mb0Bu -ZXRsb2NrLm5ldCBlLW1haWwgY2ltZW4uIFdBUk5JTkchIFRoZSBpc3N1YW5jZSBh -bmQgdGhlIHVzZSBvZiB0aGlzIGNlcnRpZmljYXRlIGFyZSBzdWJqZWN0IHRvIHRo -ZSBOZXRMb2NrIFF1YWxpZmllZCBDUFMgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3 -Lm5ldGxvY2suaHUvZG9jcy8gb3IgYnkgZS1tYWlsIGF0IGluZm9AbmV0bG9jay5u -ZXQwHQYDVR0OBBYEFAlqYhaSsFq7VQ7LdTI6MuWyIckoMA0GCSqGSIb3DQEBBQUA -A4IBAQCRalCc23iBmz+LQuM7/KbD7kPgz/PigDVJRXYC4uMvBcXxKufAQTPGtpvQ -MznNwNuhrWw3AkxYQTvyl5LGSKjN5Yo5iWH5Upfpvfb5lHTocQ68d4bDBsxafEp+ -NFAwLvt/MpqNPfMgW/hqyobzMUwsWYACff44yTB1HLdV47yfuqhthCgFdbOLDcCR -VCHnpgu0mfVRQdzNo0ci2ccBgcTcR08m6h/t280NmPSjnLRzMkqWmf68f8glWPhY -83ZmiVSkpj7EUFy6iRiCdUgh0k8T6GB+B3bbELVR5qq5aKrN9p2QdRLqOBrKROi3 -macqaJVmlaut74nLYKkGEsaUR+ko ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIFSzCCBLSgAwIBAgIBaTANBgkqhkiG9w0BAQQFADCBmTELMAkGA1UEBhMCSFUx -ETAPBgNVBAcTCEJ1ZGFwZXN0MScwJQYDVQQKEx5OZXRMb2NrIEhhbG96YXRiaXp0 -b25zYWdpIEtmdC4xGjAYBgNVBAsTEVRhbnVzaXR2YW55a2lhZG9rMTIwMAYDVQQD -EylOZXRMb2NrIFV6bGV0aSAoQ2xhc3MgQikgVGFudXNpdHZhbnlraWFkbzAeFw05 -OTAyMjUxNDEwMjJaFw0xOTAyMjAxNDEwMjJaMIGZMQswCQYDVQQGEwJIVTERMA8G -A1UEBxMIQnVkYXBlc3QxJzAlBgNVBAoTHk5ldExvY2sgSGFsb3phdGJpenRvbnNh -Z2kgS2Z0LjEaMBgGA1UECxMRVGFudXNpdHZhbnlraWFkb2sxMjAwBgNVBAMTKU5l -dExvY2sgVXpsZXRpIChDbGFzcyBCKSBUYW51c2l0dmFueWtpYWRvMIGfMA0GCSqG -SIb3DQEBAQUAA4GNADCBiQKBgQCx6gTsIKAjwo84YM/HRrPVG/77uZmeBNwcf4xK -gZjupNTKihe5In+DCnVMm8Bp2GQ5o+2So/1bXHQawEfKOml2mrriRBf8TKPV/riX -iK+IA4kfpPIEPsgHC+b5sy96YhQJRhTKZPWLgLViqNhr1nGTLbO/CVRY7QbrqHvc -Q7GhaQIDAQABo4ICnzCCApswEgYDVR0TAQH/BAgwBgEB/wIBBDAOBgNVHQ8BAf8E -BAMCAAYwEQYJYIZIAYb4QgEBBAQDAgAHMIICYAYJYIZIAYb4QgENBIICURaCAk1G -SUdZRUxFTSEgRXplbiB0YW51c2l0dmFueSBhIE5ldExvY2sgS2Z0LiBBbHRhbGFu -b3MgU3pvbGdhbHRhdGFzaSBGZWx0ZXRlbGVpYmVuIGxlaXJ0IGVsamFyYXNvayBh -bGFwamFuIGtlc3p1bHQuIEEgaGl0ZWxlc2l0ZXMgZm9seWFtYXRhdCBhIE5ldExv -Y2sgS2Z0LiB0ZXJtZWtmZWxlbG9zc2VnLWJpenRvc2l0YXNhIHZlZGkuIEEgZGln -aXRhbGlzIGFsYWlyYXMgZWxmb2dhZGFzYW5hayBmZWx0ZXRlbGUgYXogZWxvaXJ0 -IGVsbGVub3J6ZXNpIGVsamFyYXMgbWVndGV0ZWxlLiBBeiBlbGphcmFzIGxlaXJh -c2EgbWVndGFsYWxoYXRvIGEgTmV0TG9jayBLZnQuIEludGVybmV0IGhvbmxhcGph -biBhIGh0dHBzOi8vd3d3Lm5ldGxvY2submV0L2RvY3MgY2ltZW4gdmFneSBrZXJo -ZXRvIGF6IGVsbGVub3J6ZXNAbmV0bG9jay5uZXQgZS1tYWlsIGNpbWVuLiBJTVBP -UlRBTlQhIFRoZSBpc3N1YW5jZSBhbmQgdGhlIHVzZSBvZiB0aGlzIGNlcnRpZmlj -YXRlIGlzIHN1YmplY3QgdG8gdGhlIE5ldExvY2sgQ1BTIGF2YWlsYWJsZSBhdCBo -dHRwczovL3d3dy5uZXRsb2NrLm5ldC9kb2NzIG9yIGJ5IGUtbWFpbCBhdCBjcHNA -bmV0bG9jay5uZXQuMA0GCSqGSIb3DQEBBAUAA4GBAATbrowXr/gOkDFOzT4JwG06 -sPgzTEdM43WIEJessDgVkcYplswhwG08pXTP2IKlOcNl40JwuyKQ433bNXbhoLXa -n3BukxowOR0w2y7jfLKRstE3Kfq51hdcR0/jHTjrn9V7lagonhVK0dHQKwCXoOKS -NitjrFgBazMpUIaD8QFI ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIID5jCCAs6gAwIBAgIQV8szb8JcFuZHFhfjkDFo4DANBgkqhkiG9w0BAQUFADBi -MQswCQYDVQQGEwJVUzEhMB8GA1UEChMYTmV0d29yayBTb2x1dGlvbnMgTC5MLkMu -MTAwLgYDVQQDEydOZXR3b3JrIFNvbHV0aW9ucyBDZXJ0aWZpY2F0ZSBBdXRob3Jp -dHkwHhcNMDYxMjAxMDAwMDAwWhcNMjkxMjMxMjM1OTU5WjBiMQswCQYDVQQGEwJV -UzEhMB8GA1UEChMYTmV0d29yayBTb2x1dGlvbnMgTC5MLkMuMTAwLgYDVQQDEydO -ZXR3b3JrIFNvbHV0aW9ucyBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwggEiMA0GCSqG -SIb3DQEBAQUAA4IBDwAwggEKAoIBAQDkvH6SMG3G2I4rC7xGzuAnlt7e+foS0zwz -c7MEL7xxjOWftiJgPl9dzgn/ggwbmlFQGiaJ3dVhXRncEg8tCqJDXRfQNJIg6nPP -OCwGJgl6cvf6UDL4wpPTaaIjzkGxzOTVHzbRijr4jGPiFFlp7Q3Tf2vouAPlT2rl -mGNpSAW+Lv8ztumXWWn4Zxmuk2GWRBXTcrA/vGp97Eh/jcOrqnErU2lBUzS1sLnF -BgrEsEX1QV1uiUV7PTsmjHTC5dLRfbIR1PtYMiKagMnc/Qzpf14Dl847ABSHJ3A4 -qY5usyd2mFHgBeMhqxrVhSI8KbWaFsWAqPS7azCPL0YCorEMIuDTAgMBAAGjgZcw -gZQwHQYDVR0OBBYEFCEwyfsA106Y2oeqKtCnLrFAMadMMA4GA1UdDwEB/wQEAwIB -BjAPBgNVHRMBAf8EBTADAQH/MFIGA1UdHwRLMEkwR6BFoEOGQWh0dHA6Ly9jcmwu -bmV0c29sc3NsLmNvbS9OZXR3b3JrU29sdXRpb25zQ2VydGlmaWNhdGVBdXRob3Jp -dHkuY3JsMA0GCSqGSIb3DQEBBQUAA4IBAQC7rkvnt1frf6ott3NHhWrB5KUd5Oc8 -6fRZZXe1eltajSU24HqXLjjAV2CDmAaDn7l2em5Q4LqILPxFzBiwmZVRDuwduIj/ -h1AcgsLj4DKAv6ALR8jDMe+ZZzKATxcheQxpXN5eNK4CtSbqUN9/GGUsyfJj4akH -/nxxH2szJGoeBfcFaMBqEssuXmHLrijTfsK0ZpEmXzwuJF/LWA/rKOyvEZbz3Htv -wKeI8lN3s2Berq4o2jUsbzRF0ybh3uxbTydrFny9RAQYgrOJeRcQcT16ohZO9QHN -pGxlaKFJdlxDydi8NmdspZS11My5vWo1ViHe2MPr+8ukYEywVaCge1ey ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIID8TCCAtmgAwIBAgIQQT1yx/RrH4FDffHSKFTfmjANBgkqhkiG9w0BAQUFADCB -ijELMAkGA1UEBhMCQ0gxEDAOBgNVBAoTB1dJU2VLZXkxGzAZBgNVBAsTEkNvcHly -aWdodCAoYykgMjAwNTEiMCAGA1UECxMZT0lTVEUgRm91bmRhdGlvbiBFbmRvcnNl -ZDEoMCYGA1UEAxMfT0lTVEUgV0lTZUtleSBHbG9iYWwgUm9vdCBHQSBDQTAeFw0w -NTEyMTExNjAzNDRaFw0zNzEyMTExNjA5NTFaMIGKMQswCQYDVQQGEwJDSDEQMA4G -A1UEChMHV0lTZUtleTEbMBkGA1UECxMSQ29weXJpZ2h0IChjKSAyMDA1MSIwIAYD -VQQLExlPSVNURSBGb3VuZGF0aW9uIEVuZG9yc2VkMSgwJgYDVQQDEx9PSVNURSBX -SVNlS2V5IEdsb2JhbCBSb290IEdBIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A -MIIBCgKCAQEAy0+zAJs9Nt350UlqaxBJH+zYK7LG+DKBKUOVTJoZIyEVRd7jyBxR -VVuuk+g3/ytr6dTqvirdqFEr12bDYVxgAsj1znJ7O7jyTmUIms2kahnBAbtzptf2 -w93NvKSLtZlhuAGio9RN1AU9ka34tAhxZK9w8RxrfvbDd50kc3vkDIzh2TbhmYsF -mQvtRTEJysIA2/dyoJaqlYfQjse2YXMNdmaM3Bu0Y6Kff5MTMPGhJ9vZ/yxViJGg -4E8HsChWjBgbl0SOid3gF27nKu+POQoxhILYQBRJLnpB5Kf+42TMwVlxSywhp1t9 -4B3RLoGbw9ho972WG6xwsRYUC9tguSYBBQIDAQABo1EwTzALBgNVHQ8EBAMCAYYw -DwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUswN+rja8sHnR3JQmthG+IbJphpQw -EAYJKwYBBAGCNxUBBAMCAQAwDQYJKoZIhvcNAQEFBQADggEBAEuh/wuHbrP5wUOx -SPMowB0uyQlB+pQAHKSkq0lPjz0e701vvbyk9vImMMkQyh2I+3QZH4VFvbBsUfk2 -ftv1TDI6QU9bR8/oCy22xBmddMVHxjtqD6wU2zz0c5ypBd8A3HR4+vg1YFkCExh8 -vPtNsCBtQ7tgMHpnM1zFmdH4LTlSc/uMqpclXHLZCB6rTjzjgTGfA6b7wP4piFXa -hNVQA7bihKOmNqoROgHhGEvWRGizPflTdISzRpFGlgC3gCy24eMQ4tui5yiPAZZi -Fj4A4xylNoEYokxSdsARo27mHbrjWr42U8U+dY+GaSlYU7Wcu2+fXMUY7N0v4ZjJ -/L7fCg0= ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIEajCCA1KgAwIBAgIBATANBgkqhkiG9w0BAQUFADBaMQswCQYDVQQGEwJKUDEN -MAsGA1UECgwESlBLSTEpMCcGA1UECwwgUHJlZmVjdHVyYWwgQXNzb2NpYXRpb24g -Rm9yIEpQS0kxETAPBgNVBAsMCEJyaWRnZUNBMB4XDTAzMTIyNzA1MDgxNVoXDTEz -MTIyNjE0NTk1OVowWjELMAkGA1UEBhMCSlAxDTALBgNVBAoMBEpQS0kxKTAnBgNV -BAsMIFByZWZlY3R1cmFsIEFzc29jaWF0aW9uIEZvciBKUEtJMREwDwYDVQQLDAhC -cmlkZ2VDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANTnUmg7K3m8 -52vd77kwkq156euwoWm5no8E8kmaTSc7x2RABPpqNTlMKdZ6ttsyYrqREeDkcvPL -yF7yf/I8+innasNtsytcTAy8xY8Avsbd4JkCGW9dyPjk9pzzc3yLQ64Rx2fujRn2 -agcEVdPCr/XpJygX8FD5bbhkZ0CVoiASBmlHOcC3YpFlfbT1QcpOSOb7o+VdKVEi -MMfbBuU2IlYIaSr/R1nO7RPNtkqkFWJ1/nKjKHyzZje7j70qSxb+BTGcNgTHa1YA -UrogKB+UpBftmb4ds+XlkEJ1dvwokiSbCDaWFKD+YD4B2s0bvjCbw8xuZFYGhNyR -/2D5XfN1s2MCAwEAAaOCATkwggE1MA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8E -BTADAQH/MG0GA1UdHwRmMGQwYqBgoF6kXDBaMQswCQYDVQQGEwJKUDENMAsGA1UE -CgwESlBLSTEpMCcGA1UECwwgUHJlZmVjdHVyYWwgQXNzb2NpYXRpb24gRm9yIEpQ -S0kxETAPBgNVBAsMCEJyaWRnZUNBMIGDBgNVHREEfDB6pHgwdjELMAkGA1UEBhMC -SlAxJzAlBgNVBAoMHuWFrOeahOWAi+S6uuiqjeiovOOCteODvOODk+OCuTEeMBwG -A1UECwwV6YO96YGT5bqc55yM5Y2U6K2w5LyaMR4wHAYDVQQLDBXjg5bjg6rjg4Pj -grjoqo3oqLzlsYAwHQYDVR0OBBYEFNQXMiCqQNkR2OaZmQgLtf8mR8p8MA0GCSqG -SIb3DQEBBQUAA4IBAQATjJo4reTNPC5CsvAKu1RYT8PyXFVYHbKsEpGt4GR8pDCg -HEGAiAhHSNrGh9CagZMXADvlG0gmMOnXowriQQixrtpkmx0TB8tNAlZptZWkZC+R -8TnjOkHrk2nFAEC3ezbdK0R7MR4tJLDQCnhEWbg50rf0wZ/aF8uAaVeEtHXa6W0M -Xq3dSe0XAcrLbX4zZHQTaWvdpLAIjl6DZ3SCieRMyoWUL+LXaLFdTP5WBCd+No58 -IounD9X4xxze2aeRVaiV/WnQ0OSPNS7n7YXy6xQdnaOU4KRW/Lne1EDf5IfWC/ih -bVAmhZMbcrkWWcsR6aCPG+2mV3zTD6AUzuKPal8Y ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIFtzCCA5+gAwIBAgICBQkwDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMCQk0x -GTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMTElF1b1ZhZGlzIFJv -b3QgQ0EgMjAeFw0wNjExMjQxODI3MDBaFw0zMTExMjQxODIzMzNaMEUxCzAJBgNV -BAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMRswGQYDVQQDExJRdW9W -YWRpcyBSb290IENBIDIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCa -GMpLlA0ALa8DKYrwD4HIrkwZhR0In6spRIXzL4GtMh6QRr+jhiYaHv5+HBg6XJxg -Fyo6dIMzMH1hVBHL7avg5tKifvVrbxi3Cgst/ek+7wrGsxDp3MJGF/hd/aTa/55J -WpzmM+Yklvc/ulsrHHo1wtZn/qtmUIttKGAr79dgw8eTvI02kfN/+NsRE8Scd3bB -rrcCaoF6qUWD4gXmuVbBlDePSHFjIuwXZQeVikvfj8ZaCuWw419eaxGrDPmF60Tp -+ARz8un+XJiM9XOva7R+zdRcAitMOeGylZUtQofX1bOQQ7dsE/He3fbE+Ik/0XX1 -ksOR1YqI0JDs3G3eicJlcZaLDQP9nL9bFqyS2+r+eXyt66/3FsvbzSUr5R/7mp/i -Ucw6UwxI5g69ybR2BlLmEROFcmMDBOAENisgGQLodKcftslWZvB1JdxnwQ5hYIiz -PtGo/KPaHbDRsSNU30R2be1B2MGyIrZTHN81Hdyhdyox5C315eXbyOD/5YDXC2Og -/zOhD7osFRXql7PSorW+8oyWHhqPHWykYTe5hnMz15eWniN9gqRMgeKh0bpnX5UH -oycR7hYQe7xFSkyyBNKr79X9DFHOUGoIMfmR2gyPZFwDwzqLID9ujWc9Otb+fVuI -yV77zGHcizN300QyNQliBJIWENieJ0f7OyHj+OsdWwIDAQABo4GwMIGtMA8GA1Ud -EwEB/wQFMAMBAf8wCwYDVR0PBAQDAgEGMB0GA1UdDgQWBBQahGK8SEwzJQTU7tD2 -A8QZRtGUazBuBgNVHSMEZzBlgBQahGK8SEwzJQTU7tD2A8QZRtGUa6FJpEcwRTEL -MAkGA1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMT -ElF1b1ZhZGlzIFJvb3QgQ0EgMoICBQkwDQYJKoZIhvcNAQEFBQADggIBAD4KFk2f -BluornFdLwUvZ+YTRYPENvbzwCYMDbVHZF34tHLJRqUDGCdViXh9duqWNIAXINzn -g/iN/Ae42l9NLmeyhP3ZRPx3UIHmfLTJDQtyU/h2BwdBR5YM++CCJpNVjP4iH2Bl -fF/nJrP3MpCYUNQ3cVX2kiF495V5+vgtJodmVjB3pjd4M1IQWK4/YY7yarHvGH5K -WWPKjaJW1acvvFYfzznB4vsKqBUsfU16Y8Zsl0Q80m/DShcK+JDSV6IZUaUtl0Ha -B0+pUNqQjZRG4T7wlP0QADj1O+hA4bRuVhogzG9Yje0uRY/W6ZM/57Es3zrWIozc -hLsib9D45MY56QSIPMO661V6bYCZJPVsAfv4l7CUW+v90m/xd2gNNWQjrLhVoQPR -TUIZ3Ph1WVaj+ahJefivDrkRoHy3au000LYmYjgahwz46P0u05B/B5EqHdZ+XIWD -mbA4CD/pXvk1B+TJYm5Xf6dQlfe6yJvmjqIBxdZmv3lh8zwc4bmCXF2gw+nYSL0Z -ohEUGW6yhhtoPkg3Goi3XZZenMfvJ2II4pEZXNLxId26F0KCl3GBUzGpn/Z9Yr9y -4aOTHcyKJloJONDO1w2AFrR4pTqHTI2KpdVGl/IsELm8VCLAAVBpQ570su9t+Oza -8eOx79+Rj1QqCyXBJhnEUhAFZdWCEOrCMc0u ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIGnTCCBIWgAwIBAgICBcYwDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMCQk0x -GTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMTElF1b1ZhZGlzIFJv -b3QgQ0EgMzAeFw0wNjExMjQxOTExMjNaFw0zMTExMjQxOTA2NDRaMEUxCzAJBgNV -BAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMRswGQYDVQQDExJRdW9W -YWRpcyBSb290IENBIDMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDM -V0IWVJzmmNPTTe7+7cefQzlKZbPoFog02w1ZkXTPkrgEQK0CSzGrvI2RaNggDhoB -4hp7Thdd4oq3P5kazethq8Jlph+3t723j/z9cI8LoGe+AaJZz3HmDyl2/7FWeUUr -H556VOijKTVopAFPD6QuN+8bv+OPEKhyq1hX51SGyMnzW9os2l2ObjyjPtr7guXd -8lyyBTNvijbO0BNO/79KDDRMpsMhvVAEVeuxu537RR5kFd5VAYwCdrXLoT9Cabwv -vWhDFlaJKjdhkf2mrk7AyxRllDdLkgbvBNDInIjbC3uBr7E9KsRlOni27tyAsdLT -mZw67mtaa7ONt9XOnMK+pUsvFrGeaDsGb659n/je7Mwpp5ijJUMv7/FfJuGITfhe -btfZFG4ZM2mnO4SJk8RTVROhUXhA+LjJou57ulJCg54U7QVSWllWp5f8nT8KKdjc -T5EOE7zelaTfi5m+rJsziO+1ga8bxiJTyPbH7pcUsMV8eFLI8M5ud2CEpukqdiDt -WAEXMJPpGovgc2PZapKUSU60rUqFxKMiMPwJ7Wgic6aIDFUhWMXhOp8q3crhkODZ -c6tsgLjoC2SToJyMGf+z0gzskSaHirOi4XCPLArlzW1oUevaPwV/izLmE1xr/l9A -4iLItLRkT9a6fUg+qGkM17uGcclzuD87nSVL2v9A6wIDAQABo4IBlTCCAZEwDwYD -VR0TAQH/BAUwAwEB/zCB4QYDVR0gBIHZMIHWMIHTBgkrBgEEAb5YAAMwgcUwgZMG -CCsGAQUFBwICMIGGGoGDQW55IHVzZSBvZiB0aGlzIENlcnRpZmljYXRlIGNvbnN0 -aXR1dGVzIGFjY2VwdGFuY2Ugb2YgdGhlIFF1b1ZhZGlzIFJvb3QgQ0EgMyBDZXJ0 -aWZpY2F0ZSBQb2xpY3kgLyBDZXJ0aWZpY2F0aW9uIFByYWN0aWNlIFN0YXRlbWVu -dC4wLQYIKwYBBQUHAgEWIWh0dHA6Ly93d3cucXVvdmFkaXNnbG9iYWwuY29tL2Nw -czALBgNVHQ8EBAMCAQYwHQYDVR0OBBYEFPLAE+CCQz777i9nMpY1XNu4ywLQMG4G -A1UdIwRnMGWAFPLAE+CCQz777i9nMpY1XNu4ywLQoUmkRzBFMQswCQYDVQQGEwJC -TTEZMBcGA1UEChMQUXVvVmFkaXMgTGltaXRlZDEbMBkGA1UEAxMSUXVvVmFkaXMg -Um9vdCBDQSAzggIFxjANBgkqhkiG9w0BAQUFAAOCAgEAT62gLEz6wPJv92ZVqyM0 -7ucp2sNbtrCD2dDQ4iH782CnO11gUyeim/YIIirnv6By5ZwkajGxkHon24QRiSem -d1o417+shvzuXYO8BsbRd2sPbSQvS3pspweWyuOEn62Iix2rFo1bZhfZFvSLgNLd -+LJ2w/w4E6oM3kJpK27zPOuAJ9v1pkQNn1pVWQvVDVJIxa6f8i+AxeoyUDUSly7B -4f/xI4hROJ/yZlZ25w9Rl6VSDE1JUZU2Pb+iSwwQHYaZTKrzchGT5Or2m9qoXadN -t54CrnMAyNojA+j56hl0YgCUyyIgvpSnWbWCar6ZeXqp8kokUvd0/bpO5qgdAm6x -DYBEwa7TIzdfu4V8K5Iu6H6li92Z4b8nby1dqnuH/grdS/yO9SbkbnBCbjPsMZ57 -k8HkyWkaPcBrTiJt7qtYTcbQQcEr6k8Sh17rRdhs9ZgC06DYVYoGmRmioHfRMJ6s -zHXug/WwYjnPbFfiTNKRCw51KBuav/0aQ/HKd/s7j2G4aSgWQgRecCocIdiP4b0j -Wy10QJLZYxkNc91pvGJHvOB0K7Lrfb5BG7XARsWhIstfTsEokt4YutUqKLsRixeT -mJlglFwjz1onl14LBQaTNx47aTbrqZ5hHY8y2o4M1nQ+ewkk2gF3R8Q7zTSMmfXK -4SVhM7JZG+Ju1zdXtg2pEto= ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIF0DCCBLigAwIBAgIEOrZQizANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJC -TTEZMBcGA1UEChMQUXVvVmFkaXMgTGltaXRlZDElMCMGA1UECxMcUm9vdCBDZXJ0 -aWZpY2F0aW9uIEF1dGhvcml0eTEuMCwGA1UEAxMlUXVvVmFkaXMgUm9vdCBDZXJ0 -aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wMTAzMTkxODMzMzNaFw0yMTAzMTcxODMz -MzNaMH8xCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMSUw -IwYDVQQLExxSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MS4wLAYDVQQDEyVR -dW9WYWRpcyBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG -9w0BAQEFAAOCAQ8AMIIBCgKCAQEAv2G1lVO6V/z68mcLOhrfEYBklbTRvM16z/Yp -li4kVEAkOPcahdxYTMukJ0KX0J+DisPkBgNbAKVRHnAEdOLB1Dqr1607BxgFjv2D -rOpm2RgbaIr1VxqYuvXtdj182d6UajtLF8HVj71lODqV0D1VNk7feVcxKh7YWWVJ -WCCYfqtffp/p1k3sg3Spx2zY7ilKhSoGFPlU5tPaZQeLYzcS19Dsw3sgQUSj7cug -F+FxZc4dZjH3dgEZyH0DWLaVSR2mEiboxgx24ONmy+pdpibu5cxfvWenAScOospU -xbF6lR1xHkopigPcakXBpBlebzbNw6Kwt/5cOOJSvPhEQ+aQuwIDAQABo4ICUjCC -Ak4wPQYIKwYBBQUHAQEEMTAvMC0GCCsGAQUFBzABhiFodHRwczovL29jc3AucXVv -dmFkaXNvZmZzaG9yZS5jb20wDwYDVR0TAQH/BAUwAwEB/zCCARoGA1UdIASCAREw -ggENMIIBCQYJKwYBBAG+WAABMIH7MIHUBggrBgEFBQcCAjCBxxqBxFJlbGlhbmNl -IG9uIHRoZSBRdW9WYWRpcyBSb290IENlcnRpZmljYXRlIGJ5IGFueSBwYXJ0eSBh -c3N1bWVzIGFjY2VwdGFuY2Ugb2YgdGhlIHRoZW4gYXBwbGljYWJsZSBzdGFuZGFy -ZCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB1c2UsIGNlcnRpZmljYXRpb24gcHJh -Y3RpY2VzLCBhbmQgdGhlIFF1b1ZhZGlzIENlcnRpZmljYXRlIFBvbGljeS4wIgYI -KwYBBQUHAgEWFmh0dHA6Ly93d3cucXVvdmFkaXMuYm0wHQYDVR0OBBYEFItLbe3T -KbkGGew5Oanwl4Rqy+/fMIGuBgNVHSMEgaYwgaOAFItLbe3TKbkGGew5Oanwl4Rq -y+/foYGEpIGBMH8xCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1p -dGVkMSUwIwYDVQQLExxSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MS4wLAYD -VQQDEyVRdW9WYWRpcyBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggQ6tlCL -MA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOCAQEAitQUtf70mpKnGdSk -fnIYj9lofFIk3WdvOXrEql494liwTXCYhGHoG+NpGA7O+0dQoE7/8CQfvbLO9Sf8 -7C9TqnN7Az10buYWnuulLsS/VidQK2K6vkscPFVcQR0kvoIgR13VRH56FmjffU1R -cHhXHTMe/QKZnAzNCgVPx7uOpHX6Sm2xgI4JVrmcGmD+XcHXetwReNDWXcG31a0y -mQM6isxUJTkxgXsTIlG6Rmyhu576BGxJJnSP0nPrzDCi5upZIof4l/UO/erMkqQW -xFIY6iHOsfHmhIHluqmGKPJDWl0Snawe2ajlCmqnf6CHKc/yiU3U7MXi5nrQNiOK -SnQ2+Q== ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIICXDCCAcWgAwIBAgIQCgEBAQAAAnwAAAALAAAAAjANBgkqhkiG9w0BAQUFADA6 -MRkwFwYDVQQKExBSU0EgU2VjdXJpdHkgSW5jMR0wGwYDVQQLExRSU0EgU2VjdXJp -dHkgMTAyNCBWMzAeFw0wMTAyMjIyMTAxNDlaFw0yNjAyMjIyMDAxNDlaMDoxGTAX -BgNVBAoTEFJTQSBTZWN1cml0eSBJbmMxHTAbBgNVBAsTFFJTQSBTZWN1cml0eSAx -MDI0IFYzMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDV3f5mCc8kPD6ugU5O -isRpgFtZO9+5TUzKtS3DJy08rwBCbbwoppbPf9dYrIMKo1W1exeQFYRMiu4mmdxY -78c4pqqv0I5CyGLXq6yp+0p9v+r+Ek3d/yYtbzZUaMjShFbuklNhCbM/OZuoyZu9 -zp9+1BlqFikYvtc6adwlWzMaUQIDAQABo2MwYTAPBgNVHRMBAf8EBTADAQH/MA4G -A1UdDwEB/wQEAwIBBjAfBgNVHSMEGDAWgBTEwBykB5T9zU0B1FTapQxf3q4FWjAd -BgNVHQ4EFgQUxMAcpAeU/c1NAdRU2qUMX96uBVowDQYJKoZIhvcNAQEFBQADgYEA -Py1q4yZDlX2Jl2X7deRyHUZXxGFraZ8SmyzVWujAovBDleMf6XbN3Ou8k6BlCsdN -T1+nr6JGFLkM88y9am63nd4lQtBU/55oc2PcJOsiv6hy8l4A4Q1OOkNumU4/iXgD -mMrzVcydro7BqkWY+o8aoI2II/EVQQ2lRj6RP4vr93E= ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIDYTCCAkmgAwIBAgIQCgEBAQAAAnwAAAAKAAAAAjANBgkqhkiG9w0BAQUFADA6 -MRkwFwYDVQQKExBSU0EgU2VjdXJpdHkgSW5jMR0wGwYDVQQLExRSU0EgU2VjdXJp -dHkgMjA0OCBWMzAeFw0wMTAyMjIyMDM5MjNaFw0yNjAyMjIyMDM5MjNaMDoxGTAX -BgNVBAoTEFJTQSBTZWN1cml0eSBJbmMxHTAbBgNVBAsTFFJTQSBTZWN1cml0eSAy -MDQ4IFYzMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAt49VcdKA3Xtp -eafwGFAyPGJn9gqVB93mG/Oe2dJBVGutn3y+Gc37RqtBaB4Y6lXIL5F4iSj7Jylg -/9+PjDvJSZu1pJTOAeo+tWN7fyb9Gd3AIb2E0S1PRsNO3Ng3OTsor8udGuorryGl -wSMiuLgbWhOHV4PR8CDn6E8jQrAApX2J6elhc5SYcSa8LWrg903w8bYqODGBDSnh -AMFRD0xS+ARaqn1y07iHKrtjEAMqs6FPDVpeRrc9DvV07Jmf+T0kgYim3WBU6JU2 -PcYJk5qjEoAAVZkZR73QpXzDuvsf9/UP+Ky5tfQ3mBMY3oVbtwyCO4dvlTlYMNpu -AWgXIszACwIDAQABo2MwYTAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIB -BjAfBgNVHSMEGDAWgBQHw1EwpKrpRa41JPr/JCwz0LGdjDAdBgNVHQ4EFgQUB8NR -MKSq6UWuNST6/yQsM9CxnYwwDQYJKoZIhvcNAQEFBQADggEBAF8+hnZuuDU8TjYc -HnmYv/3VEhF5Ug7uMYm83X/50cYVIeiKAVQNOvtUudZj1LGqlk2iQk3UUx+LEN5/ -Zb5gEydxiKRz44Rj0aRV4VCT5hsOedBnvEbIvz8XDZXmxpBp3ue0L96VfdASPz0+ -f00/FGj1EVDVwfSQpQgdMWD/YIwjVAqv/qFuxdF6Kmh4zx6CCiC0H63lhbJqaHVO -rSU3lIW+vaHU6rcMSzyd6BIA8F+sDeGscGNz9395nzIlQnQFgCi/vcEkllgVsRch -6YlL2weIZ/QVrXA+L02FO8K32/6YaCOJ4XQP3vTFhGMpG8zLB8kApKnXwiJPZ9d3 -7CAFYd4= ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIEPzCCAyegAwIBAgIBATANBgkqhkiG9w0BAQUFADB+MQswCQYDVQQGEwJHQjEb -MBkGA1UECAwSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRow -GAYDVQQKDBFDb21vZG8gQ0EgTGltaXRlZDEkMCIGA1UEAwwbU2VjdXJlIENlcnRp -ZmljYXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAwMDAwMFoXDTI4MTIzMTIzNTk1OVow -fjELMAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4G -A1UEBwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENBIExpbWl0ZWQxJDAiBgNV -BAMMG1NlY3VyZSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCCASIwDQYJKoZIhvcNAQEB -BQADggEPADCCAQoCggEBAMBxM4KK0HDrc4eCQNUd5MvJDkKQ+d40uaG6EfQlhfPM -cm3ye5drswfxdySRXyWP9nQ95IDC+DwN879A6vfIUtFyb+/Iq0G4bi4XKpVpDM3S -HpR7LZQdqnXXs5jLrLxkU0C8j6ysNstcrbvd4JQX7NFc0L/vpZXJkMWwrPsbQ996 -CF23uPJAGysnnlDOXmWCiIxe004MeuoIkbY2qitC++rCoznl2yY4rYsK7hljxxwk -3wN42ubqwUcaCwtGCd0C/N7Lh1/XMGNooa7cMqG6vv5Eq2i2pRcV/b3Vp6ea5EQz -6YiO/O1R65NxTq0B50SOqy3LqP4BSUjwwN3HaNiS/j0CAwEAAaOBxzCBxDAdBgNV -HQ4EFgQUPNiTiMLAggnMAZkGkyDpnnAJY08wDgYDVR0PAQH/BAQDAgEGMA8GA1Ud -EwEB/wQFMAMBAf8wgYEGA1UdHwR6MHgwO6A5oDeGNWh0dHA6Ly9jcmwuY29tb2Rv -Y2EuY29tL1NlY3VyZUNlcnRpZmljYXRlU2VydmljZXMuY3JsMDmgN6A1hjNodHRw -Oi8vY3JsLmNvbW9kby5uZXQvU2VjdXJlQ2VydGlmaWNhdGVTZXJ2aWNlcy5jcmww -DQYJKoZIhvcNAQEFBQADggEBAIcBbSMdflsXfcFhMs+P5/OKlFlm4J4oqF7Tt/Q0 -5qo5spcWxYJvMqTpjOev/e/C6LlLqqP05tqNZSH7uoDrJiiFGv45jN5bBAS0VPmj -Z55B+glSzAVIqMk/IQQezkhr/IXownuvf7fM+F86/TXGDe+X3EyrEeFryzHRbPtI -gKvcnDe4IRRLDXE97IMzbtFuMhbsmMcWi1mmNKsFVy2T96oTy9IT4rcuO81rUBcJ -aD61JlfutuC23bkpgHl9j6PwpCikFcSF9CfUa7/lXORlAnZUtOM3ZiTTGWHIUhDl -izeauan5Hb/qmZJhlv8BzaFfDbxxvA6sCx1HRR3B7Hzs/Sk= ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIDvDCCAqSgAwIBAgIQB1YipOjUiolN9BPI8PjqpTANBgkqhkiG9w0BAQUFADBK -MQswCQYDVQQGEwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24x -GTAXBgNVBAMTEFNlY3VyZSBHbG9iYWwgQ0EwHhcNMDYxMTA3MTk0MjI4WhcNMjkx -MjMxMTk1MjA2WjBKMQswCQYDVQQGEwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3Qg -Q29ycG9yYXRpb24xGTAXBgNVBAMTEFNlY3VyZSBHbG9iYWwgQ0EwggEiMA0GCSqG -SIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvNS7YrGxVaQZx5RNoJLNP2MwhR/jxYDiJ -iQPpvepeRlMJ3Fz1Wuj3RSoC6zFh1ykzTM7HfAo3fg+6MpjhHZevj8fcyTiW89sa -/FHtaMbQbqR8JNGuQsiWUGMu4P51/pinX0kuleM5M2SOHqRfkNJnPLLZ/kG5VacJ -jnIFHovdRIWCQtBJwB1g8NEXLJXr9qXBkqPFwqcIYA1gBBCWeZ4WNOaptvolRTnI -HmX5k/Wq8VLcmZg9pYYaDDUz+kulBAYVHDGA76oYa8J719rO+TMg1fW9ajMtgQT7 -sFzUnKPiXB3jqUJ1XnvUd+85VLrJChgbEplJL4hL/VBi0XPnj3pDAgMBAAGjgZ0w -gZowEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0PBAQDAgGGMA8GA1UdEwEB/wQF -MAMBAf8wHQYDVR0OBBYEFK9EBMJBfkiD2045AuzshHrmzsmkMDQGA1UdHwQtMCsw -KaAnoCWGI2h0dHA6Ly9jcmwuc2VjdXJldHJ1c3QuY29tL1NHQ0EuY3JsMBAGCSsG -AQQBgjcVAQQDAgEAMA0GCSqGSIb3DQEBBQUAA4IBAQBjGghAfaReUw132HquHw0L -URYD7xh8yOOvaliTFGCRsoTciE6+OYo68+aCiV0BN7OrJKQVDpI1WkpEXk5X+nXO -H0jOZvQ8QCaSmGwb7iRGDBezUqXbpZGRzzfTb+cnCDpOGR86p1hcF895P4vkp9Mm -I50mD1hp/Ed+stCNi5O/KU9DaXR2Z0vPB4zmAve14bRDtUstFJ/53CYNv6ZHdAbY -iNE6KTCEztI5gGIbqMdXSbxqVVFnFUq+NQfk1XWYN3kwFNspnWzFacxHVaIw98xc -f8LDmBxrThaA63p4ZUWiABqvDA1VZDRIuJK58bRQKfJPIx/abKwfROHdI3hRW8cW ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIICNDCCAaECEAKtZn5ORf5eV288mBle3cAwDQYJKoZIhvcNAQECBQAwXzELMAkG -A1UEBhMCVVMxIDAeBgNVBAoTF1JTQSBEYXRhIFNlY3VyaXR5LCBJbmMuMS4wLAYD -VQQLEyVTZWN1cmUgU2VydmVyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk0 -MTEwOTAwMDAwMFoXDTEwMDEwNzIzNTk1OVowXzELMAkGA1UEBhMCVVMxIDAeBgNV -BAoTF1JTQSBEYXRhIFNlY3VyaXR5LCBJbmMuMS4wLAYDVQQLEyVTZWN1cmUgU2Vy -dmVyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGbMA0GCSqGSIb3DQEBAQUAA4GJ -ADCBhQJ+AJLOesGugz5aqomDV6wlAXYMra6OLDfO6zV4ZFQD5YRAUcm/jwjiioII -0haGN1XpsSECrXZogZoFokvJSyVmIlZsiAeP94FZbYQHZXATcXY+m3dM41CJVphI -uR2nKRoTLkoRWZweFdVJVCxzOmmCsZc5nG1wZ0jl3S3WyB57AgMBAAEwDQYJKoZI -hvcNAQECBQADfgBl3X7hsuyw4jrg7HFGmhkRuNPHoLQDQCYCPgmc4RKz0Vr2N6W3 -YQO2WxZpO8ZECAyIUwxrl0nHPjXcbLm7qt9cuzovk2C2qUtN8iD3zV9/ZHuO3ABc -1/p3yjkWWW8O6tO1g39NTUJWdrTJXwT4OPjr0l91X817/OWOgHz8UA== ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIDuDCCAqCgAwIBAgIQDPCOXAgWpa1Cf/DrJxhZ0DANBgkqhkiG9w0BAQUFADBI -MQswCQYDVQQGEwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24x -FzAVBgNVBAMTDlNlY3VyZVRydXN0IENBMB4XDTA2MTEwNzE5MzExOFoXDTI5MTIz -MTE5NDA1NVowSDELMAkGA1UEBhMCVVMxIDAeBgNVBAoTF1NlY3VyZVRydXN0IENv -cnBvcmF0aW9uMRcwFQYDVQQDEw5TZWN1cmVUcnVzdCBDQTCCASIwDQYJKoZIhvcN -AQEBBQADggEPADCCAQoCggEBAKukgeWVzfX2FI7CT8rU4niVWJxB4Q2ZQCQXOZEz -Zum+4YOvYlyJ0fwkW2Gz4BERQRwdbvC4u/jep4G6pkjGnx29vo6pQT64lO0pGtSO -0gMdA+9tDWccV9cGrcrI9f4Or2YlSASWC12juhbDCE/RRvgUXPLIXgGZbf2IzIao -wW8xQmxSPmjL8xk037uHGFaAJsTQ3MBv396gwpEWoGQRS0S8Hvbn+mPeZqx2pHGj -7DaUaHp3pLHnDi+BeuK1cobvomuL8A/b01k/unK8RCSc43Oz969XL0Imnal0ugBS -8kvNU3xHCzaFDmapCJcWNFfBZveA4+1wVMeT4C4oFVmHursCAwEAAaOBnTCBmjAT -BgkrBgEEAYI3FAIEBh4EAEMAQTALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB -/zAdBgNVHQ4EFgQUQjK2FvoE/f5dS3rD/fdMQB1aQ68wNAYDVR0fBC0wKzApoCeg -JYYjaHR0cDovL2NybC5zZWN1cmV0cnVzdC5jb20vU1RDQS5jcmwwEAYJKwYBBAGC -NxUBBAMCAQAwDQYJKoZIhvcNAQEFBQADggEBADDtT0rhWDpSclu1pqNlGKa7UTt3 -6Z3q059c4EVlew3KW+JwULKUBRSuSceNQQcSc5R+DCMh/bwQf2AQWnL1mA6s7Ll/ -3XpvXdMc9P+IBWlCqQVxyLesJugutIxq/3HcuLHfmbx8IVQr5Fiiu1cprp6poxkm -D5kuCLDv/WnPmRoJjeOnnyvJNjR7JLN4TJUXpAYmHrZkUjZfYGfZnMUFdAvnZyPS -CPyI6a6Lf+Ew9Dd+/cYy2i2eRDAwbO4H3tI0/NL/QPZL9GZGBlSm8jIKYyYwa5vR -3ItHuuG51WLQoqD0ZwV4KWMabwTW+MZMo5qxN7SN5ShLHZ4swrhovO0C7jE= ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIDWjCCAkKgAwIBAgIBADANBgkqhkiG9w0BAQUFADBQMQswCQYDVQQGEwJKUDEY -MBYGA1UEChMPU0VDT00gVHJ1c3QubmV0MScwJQYDVQQLEx5TZWN1cml0eSBDb21t -dW5pY2F0aW9uIFJvb3RDQTEwHhcNMDMwOTMwMDQyMDQ5WhcNMjMwOTMwMDQyMDQ5 -WjBQMQswCQYDVQQGEwJKUDEYMBYGA1UEChMPU0VDT00gVHJ1c3QubmV0MScwJQYD -VQQLEx5TZWN1cml0eSBDb21tdW5pY2F0aW9uIFJvb3RDQTEwggEiMA0GCSqGSIb3 -DQEBAQUAA4IBDwAwggEKAoIBAQCzs/5/022x7xZ8V6UMbXaKL0u/ZPtM7orw8yl8 -9f/uKuDp6bpbZCKamm8sOiZpUQWZJtzVHGpxxpp9Hp3dfGzGjGdnSj74cbAZJ6kJ -DKaVv0uMDPpVmDvY6CKhS3E4eayXkmmziX7qIWgGmBSWh9JhNrxtJ1aeV+7AwFb9 -Ms+k2Y7CI9eNqPPYJayX5HA49LY6tJ07lyZDo6G8SVlyTCMwhwFY9k6+HGhWZq/N -QV3Is00qVUarH9oe4kA92819uZKAnDfdDJZkndwi92SL32HeFZRSFaB9UslLqCHJ -xrHty8OVYNEP8Ktw+N/LTX7s1vqr2b1/VPKl6Xn62dZ2JChzAgMBAAGjPzA9MB0G -A1UdDgQWBBSgc0mZaNyFW2XjmygvV5+9M7wHSDALBgNVHQ8EBAMCAQYwDwYDVR0T -AQH/BAUwAwEB/zANBgkqhkiG9w0BAQUFAAOCAQEAaECpqLvkT115swW1F7NgE+vG -kl3g0dNq/vu+m22/xwVtWSDEHPC32oRYAmP6SBbvT6UL90qY8j+eG61Ha2POCEfr -Uj94nK9NrvjVT8+amCoQQTlSxN3Zmw7vkwGusi7KaEIkQmywszo+zenaSMQVy+n5 -Bw+SUEmK3TGXX8npN6o7WWWXlDLJs58+OmJYxUmtYg5xpTKqL8aJdkNAExNnPaJU -JRDL8Try2frbSVa7pv6nQTXD4IhhyYjH3zYQIphZ6rBK+1YWc26sTfcioU+tHXot -RSflMMFe8toTyyVCUZVHA4xsIcx0Qu1T/zOLjw9XARYvz6buyXAiFL39vmwLAw== ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIID+zCCAuOgAwIBAgIENuWNnjANBgkqhkiG9w0BAQUFADCBtDELMAkGA1UEBhMC -VVkxKzApBgNVBAoTIkFETUlOSVNUUkFDSU9OIE5BQ0lPTkFMIERFIENPUlJFT1Mx -HzAdBgNVBAsTFlNFUlZJQ0lPUyBFTEVDVFJPTklDT1MxLDAqBgNVBAMTI1NFUlZJ -Q0lPUyBERSBDRVJUSUZJQ0FDSU9OIC0gQS5OLkMuMSkwJwYKCZImiZPyLGQBAxQZ -Y29ycmVvX2NlcnRAY29ycmVvLmNvbS51eTAeFw05OTAzMDkyMTA4MDdaFw0wOTAz -MDkyMTA4MDdaMIG0MQswCQYDVQQGEwJVWTErMCkGA1UEChMiQURNSU5JU1RSQUNJ -T04gTkFDSU9OQUwgREUgQ09SUkVPUzEfMB0GA1UECxMWU0VSVklDSU9TIEVMRUNU -Uk9OSUNPUzEsMCoGA1UEAxMjU0VSVklDSU9TIERFIENFUlRJRklDQUNJT04gLSBB -Lk4uQy4xKTAnBgoJkiaJk/IsZAEDFBljb3JyZW9fY2VydEBjb3JyZW8uY29tLnV5 -MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsiov7CtZakOTiUYqiuXs -+gX64sjeQWuvA9sAWu9IN89XifvdyZIQ3ncDlRyQPse2ZyU7VZjv2Tz+JuSKO0Sp -dDeDCncndLipca3dlxPSyqIuuLqdyb5Z6Nly8oqFZhxHXrSHgtYP32cmpr02sfNd -kFBRdjIsOy+qX2Fe41TVEl3/DY0Rx4J6Nt/hTBbEdN0tau/QsfAzp/6/N2dDEi55 -SpSvhPsHEQhOMJN16QFUzsXeFIbwrq6bciUPRHfi82yveZwuSceemHYyFpq8AN7g -tCAFkRfdgBUU7jZBxCGP7tkAShnGcWGlEV0AO+SndGw6Sm6D4HoxXCFl+AiHQodn -5QIDAQABoxMwETAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBBQUAA4IBAQCZ -H0kiXPhlf4NukGYvAs+09lY6Zjaht5INNsNFWDZL5szxWsxzMp6aqK7Tduvv/oAs -4xA0skefHCVq6ES1j0y+gfPQwMELzQMWoEJVVk7B47QgrV+btlVfSBAS7ySzVnzM -BRuyySqpaBGSfi/pP0Tx0MaQG0vd92Ei7GmGFUCz4qVqd/Oz8lQn2kkqZBn0Od58 -dobZnHJXCjT19S/QOWgb20WlGOOAVDuTEJAUwhQBqqV2LX0P5Fbz/3Mqb47B2ID7 -u5AdGxpJnARjxEId82+7s0lK3UftSboCLSqMxwNWueJo0MGwhrWMSzqujRyIhEz9 -UK+ZJnYIwoCtKHlV0y3m ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIDIDCCAgigAwIBAgIBJDANBgkqhkiG9w0BAQUFADA5MQswCQYDVQQGEwJGSTEP -MA0GA1UEChMGU29uZXJhMRkwFwYDVQQDExBTb25lcmEgQ2xhc3MxIENBMB4XDTAx -MDQwNjEwNDkxM1oXDTIxMDQwNjEwNDkxM1owOTELMAkGA1UEBhMCRkkxDzANBgNV -BAoTBlNvbmVyYTEZMBcGA1UEAxMQU29uZXJhIENsYXNzMSBDQTCCASIwDQYJKoZI -hvcNAQEBBQADggEPADCCAQoCggEBALWJHytPZwp5/8Ue+H887dF+2rDNbS82rDTG -29lkFwhjMDMiikzujrsPDUJVyZ0upe/3p4zDq7mXy47vPxVnqIJyY1MPQYx9EJUk -oVqlBvqSV536pQHydekfvFYmUk54GWVYVQNYwBSujHxVX3BbdyMGNpfzJLWaRpXk -3w0LBUXl0fIdgrvGE+D+qnr9aTCU89JFhfzyMlsy3uhsXR/LpCJ0sICOXZT3BgBL -qdReLjVQCfOAl/QMF6452F/NM8EcyonCIvdFEu1eEpOdY6uCLrnrQkFEy0oaAIIN -nvmLVz5MxxftLItyM19yejhW1ebZrgUaHXVFsculJRwSVzb9IjcCAwEAAaMzMDEw -DwYDVR0TAQH/BAUwAwEB/zARBgNVHQ4ECgQIR+IMi/ZTiFIwCwYDVR0PBAQDAgEG -MA0GCSqGSIb3DQEBBQUAA4IBAQCLGrLJXWG04bkruVPRsoWdd44W7hE928Jj2VuX -ZfsSZ9gqXLar5V7DtxYvyOirHYr9qxp81V9jz9yw3Xe5qObSIjiHBxTZ/75Wtf0H -DjxVyhbMp6Z3N/vbXB9OWQaHowND9Rart4S9Tu+fMTfwRvFAttEMpWT4Y14h21VO -TzF2nBBhjrZTOqMRvq9tfB69ri3iDGnHhVNoomG6xT60eVR4ngrHAr5i0RGCS2Uv -kVrCqIexVmiUefkl98HVrhq4uz2PqYo4Ffdz0Fpg0YCw8NzVUM1O7pJIae2yIx4w -zMiUyLb1O4Z/P6Yun/Y+LLWSlj7fLJOK/4GMDw9ZIRlXvVWa ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIDIDCCAgigAwIBAgIBHTANBgkqhkiG9w0BAQUFADA5MQswCQYDVQQGEwJGSTEP -MA0GA1UEChMGU29uZXJhMRkwFwYDVQQDExBTb25lcmEgQ2xhc3MyIENBMB4XDTAx -MDQwNjA3Mjk0MFoXDTIxMDQwNjA3Mjk0MFowOTELMAkGA1UEBhMCRkkxDzANBgNV -BAoTBlNvbmVyYTEZMBcGA1UEAxMQU29uZXJhIENsYXNzMiBDQTCCASIwDQYJKoZI -hvcNAQEBBQADggEPADCCAQoCggEBAJAXSjWdyvANlsdE+hY3/Ei9vX+ALTU74W+o -Z6m/AxxNjG8yR9VBaKQTBME1DJqEQ/xcHf+Js+gXGM2RX/uJ4+q/Tl18GybTdXnt -5oTjV+WtKcT0OijnpXuENmmz/V52vaMtmdOQTiMofRhj8VQ7Jp12W5dCsv+u8E7s -3TmVToMGf+dJQMjFAbJUWmYdPfz56TwKnoG4cPABi+QjVHzIrviQHgCWctRUz2Ej -vOr7nQKV0ba5cTppCD8PtOFCx4j1P5iop7oc4HFx71hXgVB6XGt0Rg6DA5jDjqhu -8nYybieDwnPz3BjotJPqdURrBGAgcVeHnfO+oJAjPYok4doh28MCAwEAAaMzMDEw -DwYDVR0TAQH/BAUwAwEB/zARBgNVHQ4ECgQISqCqWITTXjwwCwYDVR0PBAQDAgEG -MA0GCSqGSIb3DQEBBQUAA4IBAQBazof5FnIVV0sd2ZvnoiYw7JNn39Yt0jSv9zil -zqsWuasvfDXLrNAPtEwr/IDva4yRXzZ299uzGxnq9LIR/WFxRL8oszodv7ND6J+/ -3DEIcbCdjdY0RzKQxmUk96BKfARzjzlvF4xytb1LyHr4e4PDKE6cCepnP7JnBBvD -FNr450kkkdAdavphOe9r5yF1BgfYErQhIHBCcYHaPJo2vqZbDWpsmh+Re/n570K6 -Tk6ezAyNlNzZRZxe7EJQY670XcSxEtzKO6gunRRaBXW37Ndj4ro1tgQIkejanZz2 -ZrUYrAqmVCY0M9IbwdR/GjqOC6oybtv8TyWf2TLHllpwrN9M ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIDujCCAqKgAwIBAgIEAJiWijANBgkqhkiG9w0BAQUFADBVMQswCQYDVQQGEwJO -TDEeMBwGA1UEChMVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSYwJAYDVQQDEx1TdGFh -dCBkZXIgTmVkZXJsYW5kZW4gUm9vdCBDQTAeFw0wMjEyMTcwOTIzNDlaFw0xNTEy -MTYwOTE1MzhaMFUxCzAJBgNVBAYTAk5MMR4wHAYDVQQKExVTdGFhdCBkZXIgTmVk -ZXJsYW5kZW4xJjAkBgNVBAMTHVN0YWF0IGRlciBOZWRlcmxhbmRlbiBSb290IENB -MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAmNK1URF6gaYUmHFtvszn -ExvWJw56s2oYHLZhWtVhCb/ekBPHZ+7d89rFDBKeNVU+LCeIQGv33N0iYfXCxw71 -9tV2U02PjLwYdjeFnejKScfST5gTCaI+Ioicf9byEGW07l8Y1Rfj+MX94p2i71MO -hXeiD+EwR+4A5zN9RGcaC1Hoi6CeUJhoNFIfLm0B8mBF8jHrqTFoKbt6QZ7GGX+U -tFE5A3+y3qcym7RHjm+0Sq7lr7HcsBthvJly3uSJt3omXdozSVtSnA71iq3DuD3o -BmrC1SoLbHuEvVYFy4ZlkuxEK7COudxwC0barbxjiDn622r+I/q85Ej0ZytqERAh -SQIDAQABo4GRMIGOMAwGA1UdEwQFMAMBAf8wTwYDVR0gBEgwRjBEBgRVHSAAMDww -OgYIKwYBBQUHAgEWLmh0dHA6Ly93d3cucGtpb3ZlcmhlaWQubmwvcG9saWNpZXMv -cm9vdC1wb2xpY3kwDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBSofeu8Y6R0E3QA -7Jbg0zTBLL9s+DANBgkqhkiG9w0BAQUFAAOCAQEABYSHVXQ2YcG70dTGFagTtJ+k -/rvuFbQvBgwp8qiSpGEN/KtcCFtREytNwiphyPgJWPwtArI5fZlmgb9uXJVFIGzm -eafR2Bwp/MIgJ1HI8XxdNGdphREwxgDS1/PTfLbwMVcoEoJz6TMvplW0C5GUR5z6 -u3pCMuiufi3IvKwUv9kP2Vv8wfl6leF9fpb8cbDCTMjfRTTJzg3ynGQI0DvDKcWy -7ZAEwbEpkcUwb8GpcjPM/l0WFywRaed+/sWDCN+83CI6LiBpIzlWYGeQiy52OfsR -iJf2fL1LuCAWZwWN4jvBcj+UlTfHXbme2JOhF4//DGYVwSR8MnwDHTuhWEUykw== ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIFyjCCA7KgAwIBAgIEAJiWjDANBgkqhkiG9w0BAQsFADBaMQswCQYDVQQGEwJO -TDEeMBwGA1UECgwVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSswKQYDVQQDDCJTdGFh -dCBkZXIgTmVkZXJsYW5kZW4gUm9vdCBDQSAtIEcyMB4XDTA4MDMyNjExMTgxN1oX -DTIwMDMyNTExMDMxMFowWjELMAkGA1UEBhMCTkwxHjAcBgNVBAoMFVN0YWF0IGRl -ciBOZWRlcmxhbmRlbjErMCkGA1UEAwwiU3RhYXQgZGVyIE5lZGVybGFuZGVuIFJv -b3QgQ0EgLSBHMjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMVZ5291 -qj5LnLW4rJ4L5PnZyqtdj7U5EILXr1HgO+EASGrP2uEGQxGZqhQlEq0i6ABtQ8Sp -uOUfiUtnvWFI7/3S4GCI5bkYYCjDdyutsDeqN95kWSpGV+RLufg3fNU254DBtvPU -Z5uW6M7XxgpT0GtJlvOjCwV3SPcl5XCsMBQgJeN/dVrlSPhOewMHBPqCYYdu8DvE -pMfQ9XQ+pV0aCPKbJdL2rAQmPlU6Yiile7Iwr/g3wtG61jj99O9JMDeZJiFIhQGp -5Rbn3JBV3w/oOM2ZNyFPXfUib2rFEhZgF1XyZWampzCROME4HYYEhLoaJXhena/M -UGDWE4dS7WMfbWV9whUYdMrhfmQpjHLYFhN9C0lK8SgbIHRrxT3dsKpICT0ugpTN -GmXZK4iambwYfp/ufWZ8Pr2UuIHOzZgweMFvZ9C+X+Bo7d7iscksWXiSqt8rYGPy -5V6548r6f1CGPqI0GAwJaCgRHOThuVw+R7oyPxjMW4T182t0xHJ04eOLoEq9jWYv -6q012iDTiIJh8BIitrzQ1aTsr1SIJSQ8p22xcik/Plemf1WvbibG/ufMQFxRRIEK -eN5KzlW/HdXZt1bv8Hb/C3m1r737qWmRRpdogBQ2HbN/uymYNqUg+oJgYjOk7Na6 -B6duxc8UpufWkjTYgfX8HV2qXB72o007uPc5AgMBAAGjgZcwgZQwDwYDVR0TAQH/ -BAUwAwEB/zBSBgNVHSAESzBJMEcGBFUdIAAwPzA9BggrBgEFBQcCARYxaHR0cDov -L3d3dy5wa2lvdmVyaGVpZC5ubC9wb2xpY2llcy9yb290LXBvbGljeS1HMjAOBgNV -HQ8BAf8EBAMCAQYwHQYDVR0OBBYEFJFoMocVHYnitfGsNig0jQt8YojrMA0GCSqG -SIb3DQEBCwUAA4ICAQCoQUpnKpKBglBu4dfYszk78wIVCVBR7y29JHuIhjv5tLyS -CZa59sCrI2AGeYwRTlHSeYAz+51IvuxBQ4EffkdAHOV6CMqqi3WtFMTC6GY8ggen -5ieCWxjmD27ZUD6KQhgpxrRW/FYQoAUXvQwjf/ST7ZwaUb7dRUG/kSS0H4zpX897 -IZmflZ85OkYcbPnNe5yQzSipx6lVu6xiNGI1E0sUOlWDuYaNkqbG9AclVMwWVxJK -gnjIFNkXgiYtXSAfea7+1HAWFpWD2DU5/1JddRwWxRNVz0fMdWVSSt7wsKfkCpYL -+63C4iWEst3kvX5ZbJvw8NjnyvLplzh+ib7M+zkXYT9y2zqR2GUBGR2tUKRXCnxL -vJxxcypFURmFzI79R6d0lR2o0a9OF7FpJsKqeFdbxU2n5Z4FF5TKsl+gSRiNNOkm -bEgeqmiSBeGCc1qb3AdbCG19ndeNIdn8FCCqwkXfP+cAslHkwvgFuXkajDTznlvk -N1trSt8sV4pAWja63XVECDdCcAz+3F4hoKOKwJCcaNpQ5kUQR3i2TtJlycM33+FC -Y7BXN0Ute4qcvwXqZVUz9zkQxSgqIXobisQk+T8VyJoVIPVVYpbtbZNQvOSqeK3Z -ywplh6ZmwcSBo3c6WB4L7oOLnR7SUqTMHW+wmG2UMbX4cQrcufx9MmDm66+KAQ== ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIEDzCCAvegAwIBAgIBADANBgkqhkiG9w0BAQUFADBoMQswCQYDVQQGEwJVUzEl -MCMGA1UEChMcU3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAGA1UECxMp -U3RhcmZpZWxkIENsYXNzIDIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDQw -NjI5MTczOTE2WhcNMzQwNjI5MTczOTE2WjBoMQswCQYDVQQGEwJVUzElMCMGA1UE -ChMcU3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAGA1UECxMpU3RhcmZp -ZWxkIENsYXNzIDIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggEgMA0GCSqGSIb3 -DQEBAQUAA4IBDQAwggEIAoIBAQC3Msj+6XGmBIWtDBFk385N78gDGIc/oav7PKaf -8MOh2tTYbitTkPskpD6E8J7oX+zlJ0T1KKY/e97gKvDIr1MvnsoFAZMej2YcOadN -+lq2cwQlZut3f+dZxkqZJRRU6ybH838Z1TBwj6+wRir/resp7defqgSHo9T5iaU0 -X9tDkYI22WY8sbi5gv2cOj4QyDvvBmVmepsZGD3/cVE8MC5fvj13c7JdBmzDI1aa -K4UmkhynArPkPw2vCHmCuDY96pzTNbO8acr1zJ3o/WSNF4Azbl5KXZnJHoe0nRrA -1W4TNSNe35tfPe/W93bC6j67eA0cQmdrBNj41tpvi/JEoAGrAgEDo4HFMIHCMB0G -A1UdDgQWBBS/X7fRzt0fhvRbVazc1xDCDqmI5zCBkgYDVR0jBIGKMIGHgBS/X7fR -zt0fhvRbVazc1xDCDqmI56FspGowaDELMAkGA1UEBhMCVVMxJTAjBgNVBAoTHFN0 -YXJmaWVsZCBUZWNobm9sb2dpZXMsIEluYy4xMjAwBgNVBAsTKVN0YXJmaWVsZCBD -bGFzcyAyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggEAMAwGA1UdEwQFMAMBAf8w -DQYJKoZIhvcNAQEFBQADggEBAAWdP4id0ckaVaGsafPzWdqbAYcaT1epoXkJKtv3 -L7IezMdeatiDh6GX70k1PncGQVhiv45YuApnP+yz3SFmH8lU+nLMPUxA2IGvd56D -eruix/U0F47ZEUD0/CwqTRV/p2JdLiXTAAsgGh1o+Re49L2L7ShZ3U0WixeDyLJl -xy16paq8U4Zt3VekyvggQQto8PT7dL5WXXp59fkdheMtlb71cZBDzI0fmgAKhynp -VSJYACPq4xJDKVtHCN2MQWplBqjlIapBtJUhlbl90TSrE9atvNziPTnNvT51cKEY -WQPJIrSPnNVeKtelttQKbfi3QBFGmh95DmK/D5fs4C8fF5Q= ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIHyTCCBbGgAwIBAgIBATANBgkqhkiG9w0BAQUFADB9MQswCQYDVQQGEwJJTDEW -MBQGA1UEChMNU3RhcnRDb20gTHRkLjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwg -Q2VydGlmaWNhdGUgU2lnbmluZzEpMCcGA1UEAxMgU3RhcnRDb20gQ2VydGlmaWNh -dGlvbiBBdXRob3JpdHkwHhcNMDYwOTE3MTk0NjM2WhcNMzYwOTE3MTk0NjM2WjB9 -MQswCQYDVQQGEwJJTDEWMBQGA1UEChMNU3RhcnRDb20gTHRkLjErMCkGA1UECxMi -U2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmluZzEpMCcGA1UEAxMgU3Rh -cnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUA -A4ICDwAwggIKAoICAQDBiNsJvGxGfHiflXu1M5DycmLWwTYgIiRezul38kMKogZk -pMyONvg45iPwbm2xPN1yo4UcodM9tDMr0y+v/uqwQVlntsQGfQqedIXWeUyAN3rf -OQVSWff0G0ZDpNKFhdLDcfN1YjS6LIp/Ho/u7TTQEceWzVI9ujPW3U3eCztKS5/C -Ji/6tRYccjV3yjxd5srhJosaNnZcAdt0FCX+7bWgiA/deMotHweXMAEtcnn6RtYT -Kqi5pquDSR3l8u/d5AGOGAqPY1MWhWKpDhk6zLVmpsJrdAfkK+F2PrRt2PZE4XNi -HzvEvqBTViVsUQn3qqvKv3b9bZvzndu/PWa8DFaqr5hIlTpL36dYUNk4dalb6kMM -Av+Z6+hsTXBbKWWc3apdzK8BMewM69KN6Oqce+Zu9ydmDBpI125C4z/eIT574Q1w -+2OqqGwaVLRcJXrJosmLFqa7LH4XXgVNWG4SHQHuEhANxjJ/GP/89PrNbpHoNkm+ -Gkhpi8KWTRoSsmkXwQqQ1vp5Iki/untp+HDH+no32NgN0nZPV/+Qt+OR0t3vwmC3 -Zzrd/qqc8NSLf3Iizsafl7b4r4qgEKjZ+xjGtrVcUjyJthkqcwEKDwOzEmDyei+B -26Nu/yYwl/WL3YlXtq09s68rxbd2AvCl1iuahhQqcvbjM4xdCUsT37uMdBNSSwID -AQABo4ICUjCCAk4wDAYDVR0TBAUwAwEB/zALBgNVHQ8EBAMCAa4wHQYDVR0OBBYE -FE4L7xqkQFulF2mHMMo0aEPQQa7yMGQGA1UdHwRdMFswLKAqoCiGJmh0dHA6Ly9j -ZXJ0LnN0YXJ0Y29tLm9yZy9zZnNjYS1jcmwuY3JsMCugKaAnhiVodHRwOi8vY3Js -LnN0YXJ0Y29tLm9yZy9zZnNjYS1jcmwuY3JsMIIBXQYDVR0gBIIBVDCCAVAwggFM -BgsrBgEEAYG1NwEBATCCATswLwYIKwYBBQUHAgEWI2h0dHA6Ly9jZXJ0LnN0YXJ0 -Y29tLm9yZy9wb2xpY3kucGRmMDUGCCsGAQUFBwIBFilodHRwOi8vY2VydC5zdGFy -dGNvbS5vcmcvaW50ZXJtZWRpYXRlLnBkZjCB0AYIKwYBBQUHAgIwgcMwJxYgU3Rh -cnQgQ29tbWVyY2lhbCAoU3RhcnRDb20pIEx0ZC4wAwIBARqBl0xpbWl0ZWQgTGlh -YmlsaXR5LCByZWFkIHRoZSBzZWN0aW9uICpMZWdhbCBMaW1pdGF0aW9ucyogb2Yg -dGhlIFN0YXJ0Q29tIENlcnRpZmljYXRpb24gQXV0aG9yaXR5IFBvbGljeSBhdmFp -bGFibGUgYXQgaHR0cDovL2NlcnQuc3RhcnRjb20ub3JnL3BvbGljeS5wZGYwEQYJ -YIZIAYb4QgEBBAQDAgAHMDgGCWCGSAGG+EIBDQQrFilTdGFydENvbSBGcmVlIFNT -TCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTANBgkqhkiG9w0BAQUFAAOCAgEAFmyZ -9GYMNPXQhV59CuzaEE44HF7fpiUFS5Eyweg78T3dRAlbB0mKKctmArexmvclmAk8 -jhvh3TaHK0u7aNM5Zj2gJsfyOZEdUauCe37Vzlrk4gNXcGmXCPleWKYK34wGmkUW -FjgKXlf2Ysd6AgXmvB618p70qSmD+LIU424oh0TDkBreOKk8rENNZEXO3SipXPJz -ewT4F+irsfMuXGRuczE6Eri8sxHkfY+BUZo7jYn0TZNmezwD7dOaHZrzZVD1oNB1 -ny+v8OqCQ5j4aZyJecRDjkZy42Q2Eq/3JR44iZB3fsNrarnDy0RLrHiQi+fHLB5L -EUTINFInzQpdn4XBidUaePKVEFMy3YCEZnXZtWgo+2EuvoSoOMCZEoalHmdkrQYu -L6lwhceWD3yJZfWOQ1QOq92lgDmUYMA0yZZwLKMS9R9Ie70cfmu3nZD0Ijuu+Pwq -yvqCUqDvr0tVk+vBtfAii6w0TiYiBKGHLHVKt+V9E9e4DGTANtLJL4YSjCMJwRuC -O3NJo2pXh5Tl1njFmUNj403gdy3hZZlyaQQaRwnmDwFWJPsfvw55qVguucQJAX6V -um0ABj6y6koQOdjQK/W/7HW/lwLFCRsI3FU34oH7N4RDYiDK51ZLZer+bMEkkySh -NOsF/5oirpt9P/FlUQqmMGqz9IgcgA38corog14= ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIF2TCCA8GgAwIBAgIQXAuFXAvnWUHfV8w/f52oNjANBgkqhkiG9w0BAQUFADBk -MQswCQYDVQQGEwJjaDERMA8GA1UEChMIU3dpc3Njb20xJTAjBgNVBAsTHERpZ2l0 -YWwgQ2VydGlmaWNhdGUgU2VydmljZXMxGzAZBgNVBAMTElN3aXNzY29tIFJvb3Qg -Q0EgMTAeFw0wNTA4MTgxMjA2MjBaFw0yNTA4MTgyMjA2MjBaMGQxCzAJBgNVBAYT -AmNoMREwDwYDVQQKEwhTd2lzc2NvbTElMCMGA1UECxMcRGlnaXRhbCBDZXJ0aWZp -Y2F0ZSBTZXJ2aWNlczEbMBkGA1UEAxMSU3dpc3Njb20gUm9vdCBDQSAxMIICIjAN -BgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA0LmwqAzZuz8h+BvVM5OAFmUgdbI9 -m2BtRsiMMW8Xw/qabFbtPMWRV8PNq5ZJkCoZSx6jbVfd8StiKHVFXqrWW/oLJdih -FvkcxC7mlSpnzNApbjyFNDhhSbEAn9Y6cV9Nbc5fuankiX9qUvrKm/LcqfmdmUc/ -TilftKaNXXsLmREDA/7n29uj/x2lzZAeAR81sH8A25Bvxn570e56eqeqDFdvpG3F -EzuwpdntMhy0XmeLVNxzh+XTF3xmUHJd1BpYwdnP2IkCb6dJtDZd0KTeByy2dbco -kdaXvij1mB7qWybJvbCXc9qukSbraMH5ORXWZ0sKbU/Lz7DkQnGMU3nn7uHbHaBu -HYwadzVcFh4rUx80i9Fs/PJnB3r1re3WmquhsUvhzDdf/X/NTa64H5xD+SpYVUNF -vJbNcA78yeNmuk6NO4HLFWR7uZToXTNShXEuT46iBhFRyePLoW4xCGQMwtI89Tbo -19AOeCMgkckkKmUpWyL3Ic6DXqTz3kvTaI9GdVyDCW4pa8RwjPWd1yAv/0bSKzjC -L3UcPX7ape8eYIVpQtPM+GP+HkM5haa2Y0EQs3MevNP6yn0WR+Kn1dCjigoIlmJW -bjTb2QK5MHXjBNLnj8KwEUAKrNVxAmKLMb7dxiNYMUJDLXT5xp6mig/p/r+D5kNX -JLrvRjSq1xIBOO0CAwEAAaOBhjCBgzAOBgNVHQ8BAf8EBAMCAYYwHQYDVR0hBBYw -FDASBgdghXQBUwABBgdghXQBUwABMBIGA1UdEwEB/wQIMAYBAf8CAQcwHwYDVR0j -BBgwFoAUAyUv3m+CATpcLNwroWm1Z9SM0/0wHQYDVR0OBBYEFAMlL95vggE6XCzc -K6FptWfUjNP9MA0GCSqGSIb3DQEBBQUAA4ICAQA1EMvspgQNDQ/NwNurqPKIlwzf -ky9NfEBWMXrrpA9gzXrzvsMnjgM+pN0S734edAY8PzHyHHuRMSG08NBsl9Tpl7Ik -Vh5WwzW9iAUPWxAaZOHHgjD5Mq2eUCzneAXQMbFamIp1TpBcahQq4FJHgmDmHtqB -sfsUC1rxn9KVuj7QG9YVHaO+htXbD8BJZLsuUBlL0iT43R4HVtA4oJVwIHaM190e -3p9xxCPvgxNcoyQVTSlAPGrEqdi3pkSlDfTgnXceQHAm/NrZNuR55LU/vJtlvrsR -ls/bxig5OgjOR1tTWsWZ/l2p3e9M1MalrQLmjAcSHm8D0W+go/MpvRLHUKKwf4ip -mXeascClOS5cfGniLLDqN2qk4Vrh9VDlg++luyqI54zb/W1elxmofmZ1a3Hqv7HH -b6D0jqTsNFFbjCYDcKF31QESVwA12yPeDooomf2xEG9L/zgtYE4snOtnta1J7ksf -rK/7DZBaZmBwXarNeNQk7shBoJMBkpxqnvy5JMWzFYJ+vq6VK+uxwNrjAWALXmms -hFZhvnEX/h0TD/7Gh0Xp/jKgGg0TpJRVcaUWi7rKibCyx/yP2FS1k2Kdzs9Z+z0Y -zirLNRWCXf9UIltxUvu3yf5gmwBBZPCqKuy2QkPOiWaByIufOVQDJdMWNY6E0F/6 -MBr1mmz0DlP5OlvRHA== ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIDtTCCAp2gAwIBAgIIBhDCeat3PfIwDQYJKoZIhvcNAQEFBQAwdjELMAkGA1UE -BhMCQ0gxEjAQBgNVBAoTCVN3aXNzU2lnbjEyMDAGA1UEAxMpU3dpc3NTaWduIENB -IChSU0EgSUsgTWF5IDYgMTk5OSAxODowMDo1OCkxHzAdBgkqhkiG9w0BCQEWEGNh -QFN3aXNzU2lnbi5jb20wHhcNMDAxMTI2MjMyNzQxWhcNMzExMTI2MjMyNzQxWjB2 -MQswCQYDVQQGEwJDSDESMBAGA1UEChMJU3dpc3NTaWduMTIwMAYDVQQDEylTd2lz -c1NpZ24gQ0EgKFJTQSBJSyBNYXkgNiAxOTk5IDE4OjAwOjU4KTEfMB0GCSqGSIb3 -DQEJARYQY2FAU3dpc3NTaWduLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC -AQoCggEBAKw5fjnmNneLQlUCQG8jQLwwfbrOZoUwNX8cbNqhxK03/xUloFVgAt+S -Te2RxNXaCAXLBPn5ZST35TLV57aLmbHCtifv3YZqaaQGvjedltIBMJihJhZ+h3LY -SKsUb+xEJ3x5ZUf8jP+Q1g57y1s8SnBFWN/ni5NkF1Y1y31VwOi9wiOf/VISL+uu -SC4i1CP1Kbz3BDs6Hht1GpRYCbJ/K0bc9oJSpWpT5PGONsGIawqMbJuyoDghsXQ1 -pbn2e8K64BSscGZVZTNooSGgNiHmACNJBYXiWVWrwXPF4l6SddmC3Rj0aKXjgECc -FkHLDQcsM5JsK2ZLryTDUsQFbxVP2ikCAwEAAaNHMEUwCwYDVR0PBAQDAgEGMAwG -A1UdEwQFMAMBAf8wHQYDVR0OBBYEFJbXcc05KtT8iLGKq1N4ae+PR34WMAkGA1Ud -IwQCMAAwDQYJKoZIhvcNAQEFBQADggEBAKMy6W8HvZdS1fBpEUzl6Lvw50bgE1Xc -HU1JypSBG9mhdcXZo5AlPB4sCvx9Dmfwhyrdsshc0TP2V3Vh6eQqnEF5qB4lVziT -Bko9mW6Ot+pPnwsy4SHpx3rw6jCYnOqfUcZjWqqqRrq/3P1waz+Mn4cLMVEg3Xaz -qYov/khvSqS0JniwjRlo2H6f/1oVUKZvP+dUhpQepfZrOqMAWZW4otp6FolyQyeU -NN6UCRNiUKl5vTijbKwUUwfER/1Vci3M1/O1QCfttQ4vRN4Buc0xqYtGL3cd5WiO -vWzyhlTzAI6VUdNkQhhHJSAyTpj6dmXDRzrryoFGa2PjgESxz7XBaSI= ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIFujCCA6KgAwIBAgIJALtAHEP1Xk+wMA0GCSqGSIb3DQEBBQUAMEUxCzAJBgNV -BAYTAkNIMRUwEwYDVQQKEwxTd2lzc1NpZ24gQUcxHzAdBgNVBAMTFlN3aXNzU2ln -biBHb2xkIENBIC0gRzIwHhcNMDYxMDI1MDgzMDM1WhcNMzYxMDI1MDgzMDM1WjBF -MQswCQYDVQQGEwJDSDEVMBMGA1UEChMMU3dpc3NTaWduIEFHMR8wHQYDVQQDExZT -d2lzc1NpZ24gR29sZCBDQSAtIEcyMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC -CgKCAgEAr+TufoskDhJuqVAtFkQ7kpJcyrhdhJJCEyq8ZVeCQD5XJM1QiyUqt2/8 -76LQwB8CJEoTlo8jE+YoWACjR8cGp4QjK7u9lit/VcyLwVcfDmJlD909Vopz2q5+ -bbqBHH5CjCA12UNNhPqE21Is8w4ndwtrvxEvcnifLtg+5hg3Wipy+dpikJKVyh+c -6bM8K8vzARO/Ws/BtQpgvd21mWRTuKCWs2/iJneRjOBiEAKfNA+k1ZIzUd6+jbqE -emA8atufK+ze3gE/bk3lUIbLtK/tREDFylqM2tIrfKjuvqblCqoOpd8FUrdVxyJd -MmqXl2MT28nbeTZ7hTpKxVKJ+STnnXepgv9VHKVxaSvRAiTysybUa9oEVeXBCsdt -MDeQKuSeFDNeFhdVxVu1yzSJkvGdJo+hB9TGsnhQ2wwMC3wLjEHXuendjIj3o02y -MszYF9rNt85mndT9Xv+9lz4pded+p2JYryU0pUHHPbwNUMoDAw8IWh+Vc3hiv69y -FGkOpeUDDniOJihC8AcLYiAQZzlG+qkDzAQ4embvIIO1jEpWjpEA/I5cgt6IoMPi -aG59je883WX0XaxR7ySArqpWl2/5rX3aYT+YdzylkbYcjCbaZaIJbcHiVOO5ykxM -gI93e2CaHt+28kgeDrpOVG2Y4OGiGqJ3UM/EY5LsRxmd6+ZrzsECAwEAAaOBrDCB -qTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUWyV7 -lqRlUX64OfPAeGZe6Drn8O4wHwYDVR0jBBgwFoAUWyV7lqRlUX64OfPAeGZe6Drn -8O4wRgYDVR0gBD8wPTA7BglghXQBWQECAQEwLjAsBggrBgEFBQcCARYgaHR0cDov -L3JlcG9zaXRvcnkuc3dpc3NzaWduLmNvbS8wDQYJKoZIhvcNAQEFBQADggIBACe6 -45R88a7A3hfm5djV9VSwg/S7zV4Fe0+fdWavPOhWfvxyeDgD2StiGwC5+OlgzczO -UYrHUDFu4Up+GC9pWbY9ZIEr44OE5iKHjn3g7gKZYbge9LgriBIWhMIxkziWMaa5 -O1M/wySTVltpkuzFwbs4AOPsF6m43Md8AYOfMke6UiI0HTJ6CVanfCU2qT1L2sCC -bwq7EsiHSycR+R4tx5M/nttfJmtS2S6K8RTGRI0Vqbe/vd6mGu6uLftIdxf+u+yv -GPUqUfA5hJeVbG4bwyvEdGB5JbAKJ9/fXtI5z0V9QkvfsywexcZdylU6oJxpmo/a -77KwPJ+HbBIrZXAVUjEaJM9vMSNQH4xPjyPDdEFjHFWoFN0+4FFQz/EbMFYOkrCC -hdiDyyJkvC24JdVUorgG6q2SpCSgwYa1ShNqR88uC1aVVMvOmttqtKay20EIhid3 -92qgQmwLOM7XdVAyksLfKzAiSNDVQTglXaTpXZ/GlHXQRf0wl0OPkKsKx4ZzYEpp -Ld6leNcG2mqeSz53OiATIgHQv2ieY2BrNU0LbbqhPcCT4H8js1WtciVORvnSFu+w -ZMEBnunKoGqYDs/YYPIvSbjkQuE4NRb0yG5P94FW6LqjviOvrv1vA+ACOzB2+htt -Qc8Bsem4yWb02ybzOqR08kkkW8mw0FfB+j564ZfJ ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIFwTCCA6mgAwIBAgIITrIAZwwDXU8wDQYJKoZIhvcNAQEFBQAwSTELMAkGA1UE -BhMCQ0gxFTATBgNVBAoTDFN3aXNzU2lnbiBBRzEjMCEGA1UEAxMaU3dpc3NTaWdu -IFBsYXRpbnVtIENBIC0gRzIwHhcNMDYxMDI1MDgzNjAwWhcNMzYxMDI1MDgzNjAw -WjBJMQswCQYDVQQGEwJDSDEVMBMGA1UEChMMU3dpc3NTaWduIEFHMSMwIQYDVQQD -ExpTd2lzc1NpZ24gUGxhdGludW0gQ0EgLSBHMjCCAiIwDQYJKoZIhvcNAQEBBQAD -ggIPADCCAgoCggIBAMrfogLi2vj8Bxax3mCq3pZcZB/HL37PZ/pEQtZ2Y5Wu669y -IIpFR4ZieIbWIDkm9K6j/SPnpZy1IiEZtzeTIsBQnIJ71NUERFzLtMKfkr4k2Htn -IuJpX+UFeNSH2XFwMyVTtIc7KZAoNppVRDBopIOXfw0enHb/FZ1glwCNioUD7IC+ -6ixuEFGSzH7VozPY1kneWCqv9hbrS3uQMpe5up1Y8fhXSQQeol0GcN1x2/ndi5ob -jM89o03Oy3z2u5yg+gnOI2Ky6Q0f4nIoj5+saCB9bzuohTEJfwvH6GXp43gOCWcw -izSC+13gzJ2BbWLuCB4ELE6b7P6pT1/9aXjvCR+htL/68++QHkwFix7qepF6w9fl -+zC8bBsQWJj3Gl/QKTIDE0ZNYWqFTFJ0LwYfexHihJfGmfNtf9dng34TaNhxKFrY -zt3oEBSa/m0jh26OWnA81Y0JAKeqvLAxN23IhBQeW71FYyBrS3SMvds6DsHPWhaP -pZjydomyExI7C3d3rLvlPClKknLKYRorXkzig3R3+jVIeoVNjZpTxN94ypeRSCtF -KwH3HBqi7Ri6Cr2D+m+8jVeTO9TUps4e8aCxzqv9KyiaTxvXw3LbpMS/XUz13XuW -ae5ogObnmLo2t/5u7Su9IPhlGdpVCX4l3P5hYnL5fhgC72O00Puv5TtjjGePAgMB -AAGjgawwgakwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0O -BBYEFFCvzAeHFUdvOMW0ZdHelarp35zMMB8GA1UdIwQYMBaAFFCvzAeHFUdvOMW0 -ZdHelarp35zMMEYGA1UdIAQ/MD0wOwYJYIV0AVkBAQEBMC4wLAYIKwYBBQUHAgEW -IGh0dHA6Ly9yZXBvc2l0b3J5LnN3aXNzc2lnbi5jb20vMA0GCSqGSIb3DQEBBQUA -A4ICAQAIhab1Fgz8RBrBY+D5VUYI/HAcQiiWjrfFwUF1TglxeeVtlspLpYhg0DB0 -uMoI3LQwnkAHFmtllXcBrqS3NQuB2nEVqXQXOHtYyvkv+8Bldo1bAbl93oI9ZLi+ -FHSjClTTLJUYFzX1UWs/j6KWYTl4a0vlpqD4U99REJNi54Av4tHgvI42Rncz7Lj7 -jposiU0xEQ8mngS7twSNC/K5/FqdOxa3L8iYq/6KUFkuozv8KV2LwUvJ4ooTHbG/ -u0IdUt1O2BReEMYxB+9xJ/cbOQncguqLs5WGXv312l0xpuAxtpTmREl0xRbl9x8D -YSjFyMsSoEJL+WuICI20MhjzdZ/EfwBPBZWcoxcCw7NTm6ogOSkrZvqdr16zktK1 -puEa+S1BaYEUtLS17Yk9zvupnTVCRLEcFHOBzyoBNZox1S2PbYTfgE1X4z/FhHXa -icYwu+uPyyIIoK6q8QNsOktNCaUOcsZWayFCTiMlFGiudgp8DAdwZPmaL/YFOSbG -DI8Zf0NebvRbFS/bYV3mZy8/CJT5YLSYMdp08YSTcU1f+2BY0fvEwW2JorsgH51x -kcsymxM9Pn2SUjWskpSi0xjCfMfqr3YFFt1nJ8J+HAciIfNAChs0B0QTwoRqjt8Z -Wr9/6x3iGjjRXK9HkmuAtTClyY3YqzGBH9/CZjfTk6mFhnll0g== ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIFvTCCA6WgAwIBAgIITxvUL1S7L0swDQYJKoZIhvcNAQEFBQAwRzELMAkGA1UE -BhMCQ0gxFTATBgNVBAoTDFN3aXNzU2lnbiBBRzEhMB8GA1UEAxMYU3dpc3NTaWdu -IFNpbHZlciBDQSAtIEcyMB4XDTA2MTAyNTA4MzI0NloXDTM2MTAyNTA4MzI0Nlow -RzELMAkGA1UEBhMCQ0gxFTATBgNVBAoTDFN3aXNzU2lnbiBBRzEhMB8GA1UEAxMY -U3dpc3NTaWduIFNpbHZlciBDQSAtIEcyMIICIjANBgkqhkiG9w0BAQEFAAOCAg8A -MIICCgKCAgEAxPGHf9N4Mfc4yfjDmUO8x/e8N+dOcbpLj6VzHVxumK4DV644N0Mv -Fz0fyM5oEMF4rhkDKxD6LHmD9ui5aLlV8gREpzn5/ASLHvGiTSf5YXu6t+WiE7br -YT7QbNHm+/pe7R20nqA1W6GSy/BJkv6FCgU+5tkL4k+73JU3/JHpMjUi0R86TieF -nbAVlDLaYQ1HTWBCrpJH6INaUFjpiou5XaHc3ZlKHzZnu0jkg7Y360g6rw9njxcH -6ATK72oxh9TAtvmUcXtnZLi2kUpCe2UuMGoM9ZDulebyzYLs2aFK7PayS+VFheZt -eJMELpyCbTapxDFkH4aDCyr0NQp4yVXPQbBH6TCfmb5hqAaEuSh6XzjZG6k4sIN/ -c8HDO0gqgg8hm7jMqDXDhBuDsz6+pJVpATqJAHgE2cn0mRmrVn5bi4Y5FZGkECwJ -MoBgs5PAKrYYC51+jUnyEEp/+dVGLxmSo5mnJqy7jDzmDrxHB9xzUfFwZC8I+bRH -HTBsROopN4WSaGa8gzj+ezku01DwH/teYLappvonQfGbGHLy9YR0SslnxFSuSGTf -jNFusB3hB48IHpmccelM2KX3RxIfdNFRnobzwqIjQAtz20um53MGjMGg6cFZrEb6 -5i/4z3GcRm25xBWNOHkDRUjvxF3XCO6HOSKGsg0PWEP3calILv3q1h8CAwEAAaOB -rDCBqTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU -F6DNweRBtjpbO8tFnb0cwpj6hlgwHwYDVR0jBBgwFoAUF6DNweRBtjpbO8tFnb0c -wpj6hlgwRgYDVR0gBD8wPTA7BglghXQBWQEDAQEwLjAsBggrBgEFBQcCARYgaHR0 -cDovL3JlcG9zaXRvcnkuc3dpc3NzaWduLmNvbS8wDQYJKoZIhvcNAQEFBQADggIB -AHPGgeAn0i0P4JUw4ppBf1AsX19iYamGamkYDHRJ1l2E6kFSGG9YrVBWIGrGvShp -WJHckRE1qTodvBqlYJ7YH39FkWnZfrt4csEGDyrOj4VwYaygzQu4OSlWhDJOhrs9 -xCrZ1x9y7v5RoSJBsXECYxqCsGKrXlcSH9/L3XWgwF15kIwb4FDm3jH+mHtwX6WQ -2K34ArZv02DdQEsixT2tOnqfGhpHkXkzuoLcMmkDlm4fS/Bx/uNncqCxv1yL5PqZ -IseEuRuNI5c/7SXgz2W79WEE790eslpBIlqhn10s6FvJbakMDHiqYMZWjwFaDGi8 -aRl5xB9+lwW/xekkUV7U1UtT7dkjWjYDZaPBA61BMPNGG4WQr2W11bHkFlt4dR2X -em1ZqSqPe97Dh4kQmUlzeMg9vVE1dCrV8X5pGyq7O70luJpaPXJhkGaH7gzWTdQR -dAtq/gsD/KNVV4n+SsuuWxcFyPKNIzFTONItaj+CuY0IavdeQXRuwxF+B6wpYJE/ -OMpXEA29MC/HpeZBoNquBYeaoKRlbEwJDIm6uNO5wJOKMPqN5ZprFQFOZ6raYlY+ -hAhm0sQ2fac+EPyI4NSA5QC9qvNOBqN6avlicuMJT+ubDgEj8Z+7fNzcbBGXJbLy -tGMU0gYqZ4yD9c7qB9iaah7s5Aq7KkzrCWA5zspi2C5u ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIENTCCA56gAwIBAgIBATANBgkqhkiG9w0BAQQFADCBvDELMAkGA1UEBhMCREUx -EDAOBgNVBAgTB0hhbWJ1cmcxEDAOBgNVBAcTB0hhbWJ1cmcxOjA4BgNVBAoTMVRD -IFRydXN0Q2VudGVyIGZvciBTZWN1cml0eSBpbiBEYXRhIE5ldHdvcmtzIEdtYkgx -IjAgBgNVBAsTGVRDIFRydXN0Q2VudGVyIENsYXNzIDAgQ0ExKTAnBgkqhkiG9w0B -CQEWGmNlcnRpZmljYXRlQHRydXN0Y2VudGVyLmRlMB4XDTk4MDMwOTEzNTQ0OFoX -DTA1MTIzMTEzNTQ0OFowgbwxCzAJBgNVBAYTAkRFMRAwDgYDVQQIEwdIYW1idXJn -MRAwDgYDVQQHEwdIYW1idXJnMTowOAYDVQQKEzFUQyBUcnVzdENlbnRlciBmb3Ig -U2VjdXJpdHkgaW4gRGF0YSBOZXR3b3JrcyBHbWJIMSIwIAYDVQQLExlUQyBUcnVz -dENlbnRlciBDbGFzcyAwIENBMSkwJwYJKoZIhvcNAQkBFhpjZXJ0aWZpY2F0ZUB0 -cnVzdGNlbnRlci5kZTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA333mvr/V -8C9tTg7R4I0LfztU6IrisJ8oxYrGubMzJ/UnyhpMVBJrtLJGsx1Ls/QhC0sCLqHC -NJyFoMR4EdvbaycrCSoYTkDMn3EZZ5l0onw/wdiLI8hjO4ohq1zeHvSN3LQYwwVz -9Gq0ofoBCCsBD203W6o4hmc51+Vf+uR+zKMCAwEAAaOCAUMwggE/MEAGCWCGSAGG -+EIBAwQzFjFodHRwczovL3d3dy50cnVzdGNlbnRlci5kZS9jZ2ktYmluL2NoZWNr -LXJldi5jZ2k/MEAGCWCGSAGG+EIBBAQzFjFodHRwczovL3d3dy50cnVzdGNlbnRl -ci5kZS9jZ2ktYmluL2NoZWNrLXJldi5jZ2k/MDwGCWCGSAGG+EIBBwQvFi1odHRw -czovL3d3dy50cnVzdGNlbnRlci5kZS9jZ2ktYmluL1JlbmV3LmNnaT8wPgYJYIZI -AYb4QgEIBDEWL2h0dHA6Ly93d3cudHJ1c3RjZW50ZXIuZGUvZ3VpZGVsaW5lcy9p -bmRleC5odG1sMCgGCWCGSAGG+EIBDQQbFhlUQyBUcnVzdENlbnRlciBDbGFzcyAw -IENBMBEGCWCGSAGG+EIBAQQEAwIABzANBgkqhkiG9w0BAQQFAAOBgQBNB39fCTAZ -kqoFR3qUdVQqrs/82AxC4UU4KySVssqHynnEw5eQXmIYxsk4YUxoNdNMFBHrxM2h -qdjFnmgnMgc1RQT4XyGgYB4cAEgEWNLFy65tMm49d5WMhcflrlCddUp7/wsneepN -pFn/7FrqJqU5g6TReM6nqX683SvKEpMDSg== ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIENTCCA56gAwIBAgIBAjANBgkqhkiG9w0BAQQFADCBvDELMAkGA1UEBhMCREUx -EDAOBgNVBAgTB0hhbWJ1cmcxEDAOBgNVBAcTB0hhbWJ1cmcxOjA4BgNVBAoTMVRD -IFRydXN0Q2VudGVyIGZvciBTZWN1cml0eSBpbiBEYXRhIE5ldHdvcmtzIEdtYkgx -IjAgBgNVBAsTGVRDIFRydXN0Q2VudGVyIENsYXNzIDEgQ0ExKTAnBgkqhkiG9w0B -CQEWGmNlcnRpZmljYXRlQHRydXN0Y2VudGVyLmRlMB4XDTk4MDMwOTEzNTYzM1oX -DTA1MTIzMTEzNTYzM1owgbwxCzAJBgNVBAYTAkRFMRAwDgYDVQQIEwdIYW1idXJn -MRAwDgYDVQQHEwdIYW1idXJnMTowOAYDVQQKEzFUQyBUcnVzdENlbnRlciBmb3Ig -U2VjdXJpdHkgaW4gRGF0YSBOZXR3b3JrcyBHbWJIMSIwIAYDVQQLExlUQyBUcnVz -dENlbnRlciBDbGFzcyAxIENBMSkwJwYJKoZIhvcNAQkBFhpjZXJ0aWZpY2F0ZUB0 -cnVzdGNlbnRlci5kZTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAsCnrtHaz -rte2W7Re573jsZxJBFdboavZfxMb/bphq9jncd8tAJRdUUh9I+91YoSQPAofWRF0 -L46Apf0wAj0pUs1yGkkhnLzLUo5IoWOWyBCFMGlXdEXAWobG1T3gaFd9MWokjUWX -PjF+aGYybiRt7DI2yUHK8DFEyKNhyhugNh8CAwEAAaOCAUMwggE/MEAGCWCGSAGG -+EIBAwQzFjFodHRwczovL3d3dy50cnVzdGNlbnRlci5kZS9jZ2ktYmluL2NoZWNr -LXJldi5jZ2k/MEAGCWCGSAGG+EIBBAQzFjFodHRwczovL3d3dy50cnVzdGNlbnRl -ci5kZS9jZ2ktYmluL2NoZWNrLXJldi5jZ2k/MDwGCWCGSAGG+EIBBwQvFi1odHRw -czovL3d3dy50cnVzdGNlbnRlci5kZS9jZ2ktYmluL1JlbmV3LmNnaT8wPgYJYIZI -AYb4QgEIBDEWL2h0dHA6Ly93d3cudHJ1c3RjZW50ZXIuZGUvZ3VpZGVsaW5lcy9p -bmRleC5odG1sMCgGCWCGSAGG+EIBDQQbFhlUQyBUcnVzdENlbnRlciBDbGFzcyAx -IENBMBEGCWCGSAGG+EIBAQQEAwIABzANBgkqhkiG9w0BAQQFAAOBgQAFQlImpAwn -AUSsXCUowkRCVAi5HcU+bFlmxLNOUKf4+JZ1oZZ16BY4oM1dbvp5pxt7HR7DALlm -vlrWYg/n8nu470zgwD9Zrjm3hAmeq/GpLmtp4q3M8up4CQUgOEJxGH7Hspfm1QIF -BlajX/GqwsRP/vfvFg+d7KqFzz0pJPEEzQ== ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIDXDCCAsWgAwIBAgICA+kwDQYJKoZIhvcNAQEEBQAwgbwxCzAJBgNVBAYTAkRF -MRAwDgYDVQQIEwdIYW1idXJnMRAwDgYDVQQHEwdIYW1idXJnMTowOAYDVQQKEzFU -QyBUcnVzdENlbnRlciBmb3IgU2VjdXJpdHkgaW4gRGF0YSBOZXR3b3JrcyBHbWJI -MSIwIAYDVQQLExlUQyBUcnVzdENlbnRlciBDbGFzcyAxIENBMSkwJwYJKoZIhvcN -AQkBFhpjZXJ0aWZpY2F0ZUB0cnVzdGNlbnRlci5kZTAeFw05ODAzMDkxMTU5NTla -Fw0xMTAxMDExMTU5NTlaMIG8MQswCQYDVQQGEwJERTEQMA4GA1UECBMHSGFtYnVy -ZzEQMA4GA1UEBxMHSGFtYnVyZzE6MDgGA1UEChMxVEMgVHJ1c3RDZW50ZXIgZm9y -IFNlY3VyaXR5IGluIERhdGEgTmV0d29ya3MgR21iSDEiMCAGA1UECxMZVEMgVHJ1 -c3RDZW50ZXIgQ2xhc3MgMSBDQTEpMCcGCSqGSIb3DQEJARYaY2VydGlmaWNhdGVA -dHJ1c3RjZW50ZXIuZGUwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBALAp67R2 -s67Xtlu0Xue947GcSQRXW6Gr2X8TG/26YavY53HfLQCUXVFIfSPvdWKEkDwKH1kR -dC+OgKX9MAI9KVLNchpJIZy8y1KOSKFjlsgQhTBpV3RFwFqGxtU94GhXfTFqJI1F -lz4xfmhmMm4kbewyNslByvAxRMijYcoboDYfAgMBAAGjazBpMA8GA1UdEwEB/wQF -MAMBAf8wDgYDVR0PAQH/BAQDAgGGMDMGCWCGSAGG+EIBCAQmFiRodHRwOi8vd3d3 -LnRydXN0Y2VudGVyLmRlL2d1aWRlbGluZXMwEQYJYIZIAYb4QgEBBAQDAgAHMA0G -CSqGSIb3DQEBBAUAA4GBAE+ZWYXIZFaCxW892EYJLzxRwadwWIGSEur01BYAll5y -KOfWNl8anK8fwoMatAVVmaZYXDco8lce612/sdNFD3IcA9IAxyxV2v5fiXaL4tR3 -9U0JF6/EuqswK0+4HerZ/1nwUHRGul7qNrDrknsPWNoy4VK9IzcP9fMASq6wXt5u ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIENTCCA56gAwIBAgIBAzANBgkqhkiG9w0BAQQFADCBvDELMAkGA1UEBhMCREUx -EDAOBgNVBAgTB0hhbWJ1cmcxEDAOBgNVBAcTB0hhbWJ1cmcxOjA4BgNVBAoTMVRD -IFRydXN0Q2VudGVyIGZvciBTZWN1cml0eSBpbiBEYXRhIE5ldHdvcmtzIEdtYkgx -IjAgBgNVBAsTGVRDIFRydXN0Q2VudGVyIENsYXNzIDIgQ0ExKTAnBgkqhkiG9w0B -CQEWGmNlcnRpZmljYXRlQHRydXN0Y2VudGVyLmRlMB4XDTk4MDMwOTEzNTc0NFoX -DTA1MTIzMTEzNTc0NFowgbwxCzAJBgNVBAYTAkRFMRAwDgYDVQQIEwdIYW1idXJn -MRAwDgYDVQQHEwdIYW1idXJnMTowOAYDVQQKEzFUQyBUcnVzdENlbnRlciBmb3Ig -U2VjdXJpdHkgaW4gRGF0YSBOZXR3b3JrcyBHbWJIMSIwIAYDVQQLExlUQyBUcnVz -dENlbnRlciBDbGFzcyAyIENBMSkwJwYJKoZIhvcNAQkBFhpjZXJ0aWZpY2F0ZUB0 -cnVzdGNlbnRlci5kZTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA2jjo7TIA -KXGDAQ2/jAHc2satOaSpii/Vi1xoX1DGYvVmvcqRIuyqHVHXPbNRsoNOXctJsPBM -VeVrLceFCzAckk6C1MoC7fdvvtzg4xS4BVPymvRWi1qehZPRtIJWrk27qEtXFrz+ -+Fie+CmNsHvNeMlPrItnDPGc+/xXm1dcTw0CAwEAAaOCAUMwggE/MEAGCWCGSAGG -+EIBAwQzFjFodHRwczovL3d3dy50cnVzdGNlbnRlci5kZS9jZ2ktYmluL2NoZWNr -LXJldi5jZ2k/MEAGCWCGSAGG+EIBBAQzFjFodHRwczovL3d3dy50cnVzdGNlbnRl -ci5kZS9jZ2ktYmluL2NoZWNrLXJldi5jZ2k/MDwGCWCGSAGG+EIBBwQvFi1odHRw -czovL3d3dy50cnVzdGNlbnRlci5kZS9jZ2ktYmluL1JlbmV3LmNnaT8wPgYJYIZI -AYb4QgEIBDEWL2h0dHA6Ly93d3cudHJ1c3RjZW50ZXIuZGUvZ3VpZGVsaW5lcy9p -bmRleC5odG1sMCgGCWCGSAGG+EIBDQQbFhlUQyBUcnVzdENlbnRlciBDbGFzcyAy -IENBMBEGCWCGSAGG+EIBAQQEAwIABzANBgkqhkiG9w0BAQQFAAOBgQCJG/Tv6Tji -bAz2zW9JzinM+6YP+Y0+lUbW/EcyibLIBmF60ucNEwKUC9mLVkf0u+fFX3v0Y0yu -fDTqDaKpsyyF8+P+J1QQkrCPksGYQhhwSNtOLOsNJGjk0fe+Cakph7vo2tw+o4hC -MfXR43+u2I4AWnSYsE/G/yN7XHMAeMnbTg== ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIDXDCCAsWgAwIBAgICA+owDQYJKoZIhvcNAQEEBQAwgbwxCzAJBgNVBAYTAkRF -MRAwDgYDVQQIEwdIYW1idXJnMRAwDgYDVQQHEwdIYW1idXJnMTowOAYDVQQKEzFU -QyBUcnVzdENlbnRlciBmb3IgU2VjdXJpdHkgaW4gRGF0YSBOZXR3b3JrcyBHbWJI -MSIwIAYDVQQLExlUQyBUcnVzdENlbnRlciBDbGFzcyAyIENBMSkwJwYJKoZIhvcN -AQkBFhpjZXJ0aWZpY2F0ZUB0cnVzdGNlbnRlci5kZTAeFw05ODAzMDkxMTU5NTla -Fw0xMTAxMDExMTU5NTlaMIG8MQswCQYDVQQGEwJERTEQMA4GA1UECBMHSGFtYnVy -ZzEQMA4GA1UEBxMHSGFtYnVyZzE6MDgGA1UEChMxVEMgVHJ1c3RDZW50ZXIgZm9y -IFNlY3VyaXR5IGluIERhdGEgTmV0d29ya3MgR21iSDEiMCAGA1UECxMZVEMgVHJ1 -c3RDZW50ZXIgQ2xhc3MgMiBDQTEpMCcGCSqGSIb3DQEJARYaY2VydGlmaWNhdGVA -dHJ1c3RjZW50ZXIuZGUwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBANo46O0y -AClxgwENv4wB3NrGrTmkqYov1YtcaF9QxmL1Zr3KkSLsqh1R1z2zUbKDTl3LSbDw -TFXlay3HhQswHJJOgtTKAu33b77c4OMUuAVT8pr0VotanoWT0bSCVq5Nu6hLVxa8 -/vhYnvgpjbB7zXjJT6yLZwzxnPv8V5tXXE8NAgMBAAGjazBpMA8GA1UdEwEB/wQF -MAMBAf8wDgYDVR0PAQH/BAQDAgGGMDMGCWCGSAGG+EIBCAQmFiRodHRwOi8vd3d3 -LnRydXN0Y2VudGVyLmRlL2d1aWRlbGluZXMwEQYJYIZIAYb4QgEBBAQDAgAHMA0G -CSqGSIb3DQEBBAUAA4GBAIRS+yjf/x91AbwBvgRWl2p0QiQxg/lGsQaKic+WLDO/ -jLVfenKhhQbOhvgFjuj5Jcrag4wGrOs2bYWRNAQ29ELw+HkuCkhcq8xRT3h2oNms -Gb0q0WkEKJHKNhAngFdb0lz1wlurZIFjdFH0l7/NEij3TWZ/p/AcASZ4smZHcFFk ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIEqjCCA5KgAwIBAgIOLmoAAQACH9dSISwRXDswDQYJKoZIhvcNAQEFBQAwdjEL -MAkGA1UEBhMCREUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVyIEdtYkgxIjAgBgNV -BAsTGVRDIFRydXN0Q2VudGVyIENsYXNzIDIgQ0ExJTAjBgNVBAMTHFRDIFRydXN0 -Q2VudGVyIENsYXNzIDIgQ0EgSUkwHhcNMDYwMTEyMTQzODQzWhcNMjUxMjMxMjI1 -OTU5WjB2MQswCQYDVQQGEwJERTEcMBoGA1UEChMTVEMgVHJ1c3RDZW50ZXIgR21i -SDEiMCAGA1UECxMZVEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMiBDQTElMCMGA1UEAxMc -VEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMiBDQSBJSTCCASIwDQYJKoZIhvcNAQEBBQAD -ggEPADCCAQoCggEBAKuAh5uO8MN8h9foJIIRszzdQ2Lu+MNF2ujhoF/RKrLqk2jf -tMjWQ+nEdVl//OEd+DFwIxuInie5e/060smp6RQvkL4DUsFJzfb95AhmC1eKokKg -uNV/aVyQMrKXDcpK3EY+AlWJU+MaWss2xgdW94zPEfRMuzBwBJWl9jmM/XOBCH2J -XjIeIqkiRUuwZi4wzJ9l/fzLganx4Duvo4bRierERXlQXa7pIXSSTYtZgo+U4+lK -8edJsBTj9WLL1XK9H7nSn6DNqPoByNkN39r8R52zyFTfSUrxIan+GE7uSNQZu+99 -5OKdy1u2bv/jzVrndIIFuoAlOMvkaZ6vQaoahPUCAwEAAaOCATQwggEwMA8GA1Ud -EwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBTjq1RMgKHbVkO3 -kUrL84J6E1wIqzCB7QYDVR0fBIHlMIHiMIHfoIHcoIHZhjVodHRwOi8vd3d3LnRy -dXN0Y2VudGVyLmRlL2NybC92Mi90Y19jbGFzc18yX2NhX0lJLmNybIaBn2xkYXA6 -Ly93d3cudHJ1c3RjZW50ZXIuZGUvQ049VEMlMjBUcnVzdENlbnRlciUyMENsYXNz -JTIwMiUyMENBJTIwSUksTz1UQyUyMFRydXN0Q2VudGVyJTIwR21iSCxPVT1yb290 -Y2VydHMsREM9dHJ1c3RjZW50ZXIsREM9ZGU/Y2VydGlmaWNhdGVSZXZvY2F0aW9u -TGlzdD9iYXNlPzANBgkqhkiG9w0BAQUFAAOCAQEAjNfffu4bgBCzg/XbEeprS6iS -GNn3Bzn1LL4GdXpoUxUc6krtXvwjshOg0wn/9vYua0Fxec3ibf2uWWuFHbhOIprt -ZjluS5TmVfwLG4t3wVMTZonZKNaL80VKY7f9ewthXbhtvsPcW3nS7Yblok2+XnR8 -au0WOB9/WIFaGusyiC2y8zl3gK9etmF1KdsjTYjKUCjLhdLTEKJZbtOTVAB6okaV -hgWcqRmY5TFyDADiZ9lA4CQze28suVyrZZ0srHbqNZn1l7kPJOzHdiEoZa5X6AeI -dUpWoNIFOqTmjZKILPPy4cHGYdtBxceb9w4aUUXCYWvcZCcXjFq32nQozZfkvQ== ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIEUzCCA7ygAwIBAgIBCTANBgkqhkiG9w0BAQQFADCBxjELMAkGA1UEBhMCREUx -EDAOBgNVBAgTB0hhbWJ1cmcxEDAOBgNVBAcTB0hhbWJ1cmcxOjA4BgNVBAoTMVRD -IFRydXN0Q2VudGVyIGZvciBTZWN1cml0eSBpbiBEYXRhIE5ldHdvcmtzIEdtYkgx -LDAqBgNVBAsTI1RDIFRydXN0Q2VudGVyIENsYXNzIDIgTFJBLUFkbWluIENBMSkw -JwYJKoZIhvcNAQkBFhpjZXJ0aWZpY2F0ZUB0cnVzdGNlbnRlci5kZTAeFw05ODAz -MDkxNDA3MjVaFw0wNTEyMzExNDA3MjVaMIHGMQswCQYDVQQGEwJERTEQMA4GA1UE -CBMHSGFtYnVyZzEQMA4GA1UEBxMHSGFtYnVyZzE6MDgGA1UEChMxVEMgVHJ1c3RD -ZW50ZXIgZm9yIFNlY3VyaXR5IGluIERhdGEgTmV0d29ya3MgR21iSDEsMCoGA1UE -CxMjVEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMiBMUkEtQWRtaW4gQ0ExKTAnBgkqhkiG -9w0BCQEWGmNlcnRpZmljYXRlQHRydXN0Y2VudGVyLmRlMIGfMA0GCSqGSIb3DQEB -AQUAA4GNADCBiQKBgQDZmDnf8UPwIWk6TVuK4UuUSGJc8i7Z7cIuKXBFPQSm6Cyo -BRKYOS94XSin61CAufz/zMWAxe4LrB2r5Tn9Ngj+s6fSMLh4EBeytCSB1T+D+KP6 -k4xiCAYxN4FYzXZ45lc1dLiML7Q6JAR7MMF+FuI4hyv3AsRNzg6nXNYakivSSwID -AQABo4IBTTCCAUkwQAYJYIZIAYb4QgEDBDMWMWh0dHBzOi8vd3d3LnRydXN0Y2Vu -dGVyLmRlL2NnaS1iaW4vY2hlY2stcmV2LmNnaT8wQAYJYIZIAYb4QgEEBDMWMWh0 -dHBzOi8vd3d3LnRydXN0Y2VudGVyLmRlL2NnaS1iaW4vY2hlY2stcmV2LmNnaT8w -PAYJYIZIAYb4QgEHBC8WLWh0dHBzOi8vd3d3LnRydXN0Y2VudGVyLmRlL2NnaS1i -aW4vUmVuZXcuY2dpPzA+BglghkgBhvhCAQgEMRYvaHR0cDovL3d3dy50cnVzdGNl -bnRlci5kZS9ndWlkZWxpbmVzL2luZGV4Lmh0bWwwMgYJYIZIAYb4QgENBCUWI1RD -IFRydXN0Q2VudGVyIENsYXNzIDIgTFJBIEFkbWluIENBMBEGCWCGSAGG+EIBAQQE -AwIABzANBgkqhkiG9w0BAQQFAAOBgQCMoQBYc2Sgof2MpCM/r4Bs6uXJeoL/TC0i -p+18wPLPCO0SyiO8wPDrL9S3vF27HPnZWT1ocfrwTvhyFbQhvKc+xnW+yLRlprEU -lv4jHqhMWPLLK/5cNERpNj+SmHv9oDIBaNN9uJAvcO6c0VQsDOUMIf5alFZZR9A4 -lxnC/AsoOw== ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIDXDCCAsWgAwIBAgICA+swDQYJKoZIhvcNAQEEBQAwgbwxCzAJBgNVBAYTAkRF -MRAwDgYDVQQIEwdIYW1idXJnMRAwDgYDVQQHEwdIYW1idXJnMTowOAYDVQQKEzFU -QyBUcnVzdENlbnRlciBmb3IgU2VjdXJpdHkgaW4gRGF0YSBOZXR3b3JrcyBHbWJI -MSIwIAYDVQQLExlUQyBUcnVzdENlbnRlciBDbGFzcyAzIENBMSkwJwYJKoZIhvcN -AQkBFhpjZXJ0aWZpY2F0ZUB0cnVzdGNlbnRlci5kZTAeFw05ODAzMDkxMTU5NTla -Fw0xMTAxMDExMTU5NTlaMIG8MQswCQYDVQQGEwJERTEQMA4GA1UECBMHSGFtYnVy -ZzEQMA4GA1UEBxMHSGFtYnVyZzE6MDgGA1UEChMxVEMgVHJ1c3RDZW50ZXIgZm9y -IFNlY3VyaXR5IGluIERhdGEgTmV0d29ya3MgR21iSDEiMCAGA1UECxMZVEMgVHJ1 -c3RDZW50ZXIgQ2xhc3MgMyBDQTEpMCcGCSqGSIb3DQEJARYaY2VydGlmaWNhdGVA -dHJ1c3RjZW50ZXIuZGUwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBALa0wTUF -Lg2N7KBAahwOJ6ZQkmtQGwfeLud2zODa/ISoXoxjaitN2U4CdhHBC/KNecoAtvGw -Dtf7pBc9r6tpepYnv68zoZoqWarEtTcI8hKlMbZD9TKWcSgoq40oht+77uMMfTDW -w1Krj10nnGvAo+cFa1dJRLNu6mTP0o56UHd3AgMBAAGjazBpMA8GA1UdEwEB/wQF -MAMBAf8wDgYDVR0PAQH/BAQDAgGGMDMGCWCGSAGG+EIBCAQmFiRodHRwOi8vd3d3 -LnRydXN0Y2VudGVyLmRlL2d1aWRlbGluZXMwEQYJYIZIAYb4QgEBBAQDAgAHMA0G -CSqGSIb3DQEBBAUAA4GBABY9xs3Bu4VxhUafPiCPUSiZ7C1FIWMjWwS7TJC4iJIE -Tb19AaM/9uzO8d7+feXhPrvGq14L3T2WxMup1Pkm5gZOngylerpuw3yCGdHHsbHD -2w2Om0B8NwvxXej9H5CIpQ5ON2QhqE6NtJ/x3kit1VYYUimLRzQSCdS7kjXvD9s0 ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIENTCCA56gAwIBAgIBBDANBgkqhkiG9w0BAQQFADCBvDELMAkGA1UEBhMCREUx -EDAOBgNVBAgTB0hhbWJ1cmcxEDAOBgNVBAcTB0hhbWJ1cmcxOjA4BgNVBAoTMVRD -IFRydXN0Q2VudGVyIGZvciBTZWN1cml0eSBpbiBEYXRhIE5ldHdvcmtzIEdtYkgx -IjAgBgNVBAsTGVRDIFRydXN0Q2VudGVyIENsYXNzIDMgQ0ExKTAnBgkqhkiG9w0B -CQEWGmNlcnRpZmljYXRlQHRydXN0Y2VudGVyLmRlMB4XDTk4MDMwOTEzNTg0OVoX -DTA1MTIzMTEzNTg0OVowgbwxCzAJBgNVBAYTAkRFMRAwDgYDVQQIEwdIYW1idXJn -MRAwDgYDVQQHEwdIYW1idXJnMTowOAYDVQQKEzFUQyBUcnVzdENlbnRlciBmb3Ig -U2VjdXJpdHkgaW4gRGF0YSBOZXR3b3JrcyBHbWJIMSIwIAYDVQQLExlUQyBUcnVz -dENlbnRlciBDbGFzcyAzIENBMSkwJwYJKoZIhvcNAQkBFhpjZXJ0aWZpY2F0ZUB0 -cnVzdGNlbnRlci5kZTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAtrTBNQUu -DY3soEBqHA4nplCSa1AbB94u53bM4Nr8hKhejGNqK03ZTgJ2EcEL8o15ygC28bAO -1/ukFz2vq2l6lie/rzOhmipZqsS1NwjyEqUxtkP1MpZxKCirjSiG37vu4wx9MNbD -UquPXSeca8Cj5wVrV0lEs27qZM/SjnpQd3cCAwEAAaOCAUMwggE/MEAGCWCGSAGG -+EIBAwQzFjFodHRwczovL3d3dy50cnVzdGNlbnRlci5kZS9jZ2ktYmluL2NoZWNr -LXJldi5jZ2k/MEAGCWCGSAGG+EIBBAQzFjFodHRwczovL3d3dy50cnVzdGNlbnRl -ci5kZS9jZ2ktYmluL2NoZWNrLXJldi5jZ2k/MDwGCWCGSAGG+EIBBwQvFi1odHRw -czovL3d3dy50cnVzdGNlbnRlci5kZS9jZ2ktYmluL1JlbmV3LmNnaT8wPgYJYIZI -AYb4QgEIBDEWL2h0dHA6Ly93d3cudHJ1c3RjZW50ZXIuZGUvZ3VpZGVsaW5lcy9p -bmRleC5odG1sMCgGCWCGSAGG+EIBDQQbFhlUQyBUcnVzdENlbnRlciBDbGFzcyAz -IENBMBEGCWCGSAGG+EIBAQQEAwIABzANBgkqhkiG9w0BAQQFAAOBgQCEhlBieaAn -4SW6CbE0DxMJ7S3Ko+aV+TCszRelzj2Xnex8jyZ/wGHKIveR3Tw2WZqbdfe85Mjt -7AK2IqfzLPHIknhttu7FKOyAIE+5awjnL6eGHn2xCJ9UuQA3PKDYGsiWHPQyFJw5 -lbfu8ENJwl7oy3lvU7/7SYos2EvZVfIScA== ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIEqjCCA5KgAwIBAgIOSkcAAQAC5aBd1j8AUb8wDQYJKoZIhvcNAQEFBQAwdjEL -MAkGA1UEBhMCREUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVyIEdtYkgxIjAgBgNV -BAsTGVRDIFRydXN0Q2VudGVyIENsYXNzIDMgQ0ExJTAjBgNVBAMTHFRDIFRydXN0 -Q2VudGVyIENsYXNzIDMgQ0EgSUkwHhcNMDYwMTEyMTQ0MTU3WhcNMjUxMjMxMjI1 -OTU5WjB2MQswCQYDVQQGEwJERTEcMBoGA1UEChMTVEMgVHJ1c3RDZW50ZXIgR21i -SDEiMCAGA1UECxMZVEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMyBDQTElMCMGA1UEAxMc -VEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMyBDQSBJSTCCASIwDQYJKoZIhvcNAQEBBQAD -ggEPADCCAQoCggEBALTgu1G7OVyLBMVMeRwjhjEQY0NVJz/GRcekPewJDRoeIMJW -Ht4bNwcwIi9v8Qbxq63WyKthoy9DxLCyLfzDlml7forkzMA5EpBCYMnMNWju2l+Q -Vl/NHE1bWEnrDgFPZPosPIlY2C8u4rBo6SI7dYnWRBpl8huXJh0obazovVkdKyT2 -1oQDZogkAHhg8fir/gKya/si+zXmFtGt9i4S5Po1auUZuV3bOx4a+9P/FRQI2Alq -ukWdFHlgfa9Aigdzs5OW03Q0jTo3Kd5c7PXuLjHCINy+8U9/I1LZW+Jk2ZyqBwi1 -Rb3R0DHBq1SfqdLDYmAD8bs5SpJKPQq5ncWg/jcCAwEAAaOCATQwggEwMA8GA1Ud -EwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBTUovyfs8PYA9NX -XAek0CSnwPIA1DCB7QYDVR0fBIHlMIHiMIHfoIHcoIHZhjVodHRwOi8vd3d3LnRy -dXN0Y2VudGVyLmRlL2NybC92Mi90Y19jbGFzc18zX2NhX0lJLmNybIaBn2xkYXA6 -Ly93d3cudHJ1c3RjZW50ZXIuZGUvQ049VEMlMjBUcnVzdENlbnRlciUyMENsYXNz -JTIwMyUyMENBJTIwSUksTz1UQyUyMFRydXN0Q2VudGVyJTIwR21iSCxPVT1yb290 -Y2VydHMsREM9dHJ1c3RjZW50ZXIsREM9ZGU/Y2VydGlmaWNhdGVSZXZvY2F0aW9u -TGlzdD9iYXNlPzANBgkqhkiG9w0BAQUFAAOCAQEANmDkcPcGIEPZIxpC8vijsrlN -irTzwppVMXzEO2eatN9NDoqTSheLG43KieHPOh6sHfGcMrSOWXaiQYUlN6AT0PV8 -TtXqluJucsG7Kv5sbviRmEb8yRtXW+rIGjs/sFGYPAfaLFkB2otE6OF0/ado3VS6 -g0bsyEa1+K+XwDsJHI/OcpY9M1ZwvJbL2NV9IJqDnxrcOfHFcqMRA/07QlIp2+gB -95tejNaNhk4Z+rwcvsUhpYeeeC422wlxo3I0+GzjBgnyXlal092Y+tTmBvTwtiBj -S+opvaqCZh77gaqnN60TGOaSw4HBM7uIHqHn4rS9MWwOUT1v+5ZWgOI2F9Hc5A== ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIEUzCCA7ygAwIBAgIBCjANBgkqhkiG9w0BAQQFADCBxjELMAkGA1UEBhMCREUx -EDAOBgNVBAgTB0hhbWJ1cmcxEDAOBgNVBAcTB0hhbWJ1cmcxOjA4BgNVBAoTMVRD -IFRydXN0Q2VudGVyIGZvciBTZWN1cml0eSBpbiBEYXRhIE5ldHdvcmtzIEdtYkgx -LDAqBgNVBAsTI1RDIFRydXN0Q2VudGVyIENsYXNzIDMgTFJBLUFkbWluIENBMSkw -JwYJKoZIhvcNAQkBFhpjZXJ0aWZpY2F0ZUB0cnVzdGNlbnRlci5kZTAeFw05ODAz -MDkxNDA4MjJaFw0wNTEyMzExNDA4MjJaMIHGMQswCQYDVQQGEwJERTEQMA4GA1UE -CBMHSGFtYnVyZzEQMA4GA1UEBxMHSGFtYnVyZzE6MDgGA1UEChMxVEMgVHJ1c3RD -ZW50ZXIgZm9yIFNlY3VyaXR5IGluIERhdGEgTmV0d29ya3MgR21iSDEsMCoGA1UE -CxMjVEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMyBMUkEtQWRtaW4gQ0ExKTAnBgkqhkiG -9w0BCQEWGmNlcnRpZmljYXRlQHRydXN0Y2VudGVyLmRlMIGfMA0GCSqGSIb3DQEB -AQUAA4GNADCBiQKBgQDQCrjckP0s0ZieKAwDcveqxrX4uNaw1is1+zIPHx6DVPtU -xtelbka3AQW8/g5cOPjrFJd3hhh0f2QZ6Bl62uGhYQ6FhBPrWQm5fOkzOBz/8541 -tdR2OJXtJzxfqyt56YbBk9rM9HHKzYVHuP9JieQUqsH/bevA80Vk30oCtZ5ApwID -AQABo4IBTTCCAUkwQAYJYIZIAYb4QgEDBDMWMWh0dHBzOi8vd3d3LnRydXN0Y2Vu -dGVyLmRlL2NnaS1iaW4vY2hlY2stcmV2LmNnaT8wQAYJYIZIAYb4QgEEBDMWMWh0 -dHBzOi8vd3d3LnRydXN0Y2VudGVyLmRlL2NnaS1iaW4vY2hlY2stcmV2LmNnaT8w -PAYJYIZIAYb4QgEHBC8WLWh0dHBzOi8vd3d3LnRydXN0Y2VudGVyLmRlL2NnaS1i -aW4vUmVuZXcuY2dpPzA+BglghkgBhvhCAQgEMRYvaHR0cDovL3d3dy50cnVzdGNl -bnRlci5kZS9ndWlkZWxpbmVzL2luZGV4Lmh0bWwwMgYJYIZIAYb4QgENBCUWI1RD -IFRydXN0Q2VudGVyIENsYXNzIDMgTFJBIEFkbWluIENBMBEGCWCGSAGG+EIBAQQE -AwIABzANBgkqhkiG9w0BAQQFAAOBgQB6gF2gmlUFHM/tFjiR9SWs0I3Br/0egXds -bUWqFqLmhLWWjE5S73CyJPdh7w2tEh35/5EohLhrpy1Mr35ZZvNR4yhEfcgnZtDI -7IyljsPaOAiNIQWWl/VtAn13V99lESO71Hg6IzhUfe3W6P0XpQe2sWF3hZSf9O44 -NpghDjpk8A== ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIDXDCCAsWgAwIBAgICA+wwDQYJKoZIhvcNAQEEBQAwgbwxCzAJBgNVBAYTAkRF -MRAwDgYDVQQIEwdIYW1idXJnMRAwDgYDVQQHEwdIYW1idXJnMTowOAYDVQQKEzFU -QyBUcnVzdENlbnRlciBmb3IgU2VjdXJpdHkgaW4gRGF0YSBOZXR3b3JrcyBHbWJI -MSIwIAYDVQQLExlUQyBUcnVzdENlbnRlciBDbGFzcyA0IENBMSkwJwYJKoZIhvcN -AQkBFhpjZXJ0aWZpY2F0ZUB0cnVzdGNlbnRlci5kZTAeFw05ODAzMDkxMTU5NTla -Fw0xMTAxMDExMTU5NTlaMIG8MQswCQYDVQQGEwJERTEQMA4GA1UECBMHSGFtYnVy -ZzEQMA4GA1UEBxMHSGFtYnVyZzE6MDgGA1UEChMxVEMgVHJ1c3RDZW50ZXIgZm9y -IFNlY3VyaXR5IGluIERhdGEgTmV0d29ya3MgR21iSDEiMCAGA1UECxMZVEMgVHJ1 -c3RDZW50ZXIgQ2xhc3MgNCBDQTEpMCcGCSqGSIb3DQEJARYaY2VydGlmaWNhdGVA -dHJ1c3RjZW50ZXIuZGUwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAL8vY9Y2 -e7IN01X1ZGzmJV3GtMgUuiU4g+tWYqVVqWWj9COZwku50M1UZ6ajoKOpMyt25L2t -d7LtXBJ0w8W2D1KacpNDkGJmFQ9Fpd3g3bhvQG5XwXlyo2CqunYdEolTWvwCvuEJ -E8VKL9w9ixmt14skRftM9M1cNR0pTFHz8mxVAgMBAAGjazBpMA8GA1UdEwEB/wQF -MAMBAf8wDgYDVR0PAQH/BAQDAgGGMDMGCWCGSAGG+EIBCAQmFiRodHRwOi8vd3d3 -LnRydXN0Y2VudGVyLmRlL2d1aWRlbGluZXMwEQYJYIZIAYb4QgEBBAQDAgAHMA0G -CSqGSIb3DQEBBAUAA4GBAHIR5ZVBRTK6HPiAFPtmt+uums51g1HAroq7F9Eo53Yf -E8YrRnGmFXcEmedespEkbwMMc+cjnnbKvgzFy8SQGPxtOm7gVoAbw9+MNhNH+WXB -g1LVXFy92UJm4TUhaBIQpGCQPj+B6MOMobAVBFrO6yxUVkv5BHktneqMWS+teb1I ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIENTCCA56gAwIBAgIBBTANBgkqhkiG9w0BAQQFADCBvDELMAkGA1UEBhMCREUx -EDAOBgNVBAgTB0hhbWJ1cmcxEDAOBgNVBAcTB0hhbWJ1cmcxOjA4BgNVBAoTMVRD -IFRydXN0Q2VudGVyIGZvciBTZWN1cml0eSBpbiBEYXRhIE5ldHdvcmtzIEdtYkgx -IjAgBgNVBAsTGVRDIFRydXN0Q2VudGVyIENsYXNzIDQgQ0ExKTAnBgkqhkiG9w0B -CQEWGmNlcnRpZmljYXRlQHRydXN0Y2VudGVyLmRlMB4XDTk4MDMwOTE0MDAyMFoX -DTA1MTIzMTE0MDAyMFowgbwxCzAJBgNVBAYTAkRFMRAwDgYDVQQIEwdIYW1idXJn -MRAwDgYDVQQHEwdIYW1idXJnMTowOAYDVQQKEzFUQyBUcnVzdENlbnRlciBmb3Ig -U2VjdXJpdHkgaW4gRGF0YSBOZXR3b3JrcyBHbWJIMSIwIAYDVQQLExlUQyBUcnVz -dENlbnRlciBDbGFzcyA0IENBMSkwJwYJKoZIhvcNAQkBFhpjZXJ0aWZpY2F0ZUB0 -cnVzdGNlbnRlci5kZTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAvy9j1jZ7 -sg3TVfVkbOYlXca0yBS6JTiD61ZipVWpZaP0I5nCS7nQzVRnpqOgo6kzK3bkva13 -su1cEnTDxbYPUppyk0OQYmYVD0Wl3eDduG9AblfBeXKjYKq6dh0SiVNa/AK+4QkT -xUov3D2LGa3XiyRF+0z0zVw1HSlMUfPybFUCAwEAAaOCAUMwggE/MEAGCWCGSAGG -+EIBAwQzFjFodHRwczovL3d3dy50cnVzdGNlbnRlci5kZS9jZ2ktYmluL2NoZWNr -LXJldi5jZ2k/MEAGCWCGSAGG+EIBBAQzFjFodHRwczovL3d3dy50cnVzdGNlbnRl -ci5kZS9jZ2ktYmluL2NoZWNrLXJldi5jZ2k/MDwGCWCGSAGG+EIBBwQvFi1odHRw -czovL3d3dy50cnVzdGNlbnRlci5kZS9jZ2ktYmluL1JlbmV3LmNnaT8wPgYJYIZI -AYb4QgEIBDEWL2h0dHA6Ly93d3cudHJ1c3RjZW50ZXIuZGUvZ3VpZGVsaW5lcy9p -bmRleC5odG1sMCgGCWCGSAGG+EIBDQQbFhlUQyBUcnVzdENlbnRlciBDbGFzcyA0 -IENBMBEGCWCGSAGG+EIBAQQEAwIABzANBgkqhkiG9w0BAQQFAAOBgQCUaBQbJZ4p -mbGyI9JEs5Wf0Z5VBN3jL4IzVZZ3GZ0rnmUc+orjx48l/LEeVUYPj/9PNy+kdlmm -ZOvVFnC93ZUzDKQNJOtkULRDEfJDvg1xmCLsAa/s98dcccN1kVgZ6N2g9LTxvBBK -85O0Bkm7H2bSvXRH4Zr569erbR+64R0s2g== ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIDtjCCAp6gAwIBAgIOBcAAAQACQdAGCk3OdRAwDQYJKoZIhvcNAQEFBQAwdjEL -MAkGA1UEBhMCREUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVyIEdtYkgxIjAgBgNV -BAsTGVRDIFRydXN0Q2VudGVyIENsYXNzIDQgQ0ExJTAjBgNVBAMTHFRDIFRydXN0 -Q2VudGVyIENsYXNzIDQgQ0EgSUkwHhcNMDYwMzIzMTQxMDIzWhcNMjUxMjMxMjI1 -OTU5WjB2MQswCQYDVQQGEwJERTEcMBoGA1UEChMTVEMgVHJ1c3RDZW50ZXIgR21i -SDEiMCAGA1UECxMZVEMgVHJ1c3RDZW50ZXIgQ2xhc3MgNCBDQTElMCMGA1UEAxMc -VEMgVHJ1c3RDZW50ZXIgQ2xhc3MgNCBDQSBJSTCCASIwDQYJKoZIhvcNAQEBBQAD -ggEPADCCAQoCggEBALXNTJytrlG7fEjFDSmGehSt2VA9CXIgDRS2Y8b+WJ7gIV7z -jyIZ3E6RIM1viCmis8GsKnK6i1S4QF/yqvhDhsIwXMynXX/GCEnkDjkvjhjWkd0j -FnmA22xIHbzB3ygQY9GB493fL3l1oht48pQB5hBiecugfQLANIJ7x8CtHUzXapZ2 -W78mhEj9h/aECqqSB5lIPGG8ToVYx5ct/YFKocabEvVCUNFkPologiJw3fX64yhC -L04y87OjNopq1mJcrPoBbbTgci6VaLTxkwzGioLSHVPqfOA/QrcSWrjN2qUGZ8uh -d32llvCSHmcOHUJG5vnt+0dTf1cERh9GX8eu4I8CAwEAAaNCMEAwDwYDVR0TAQH/ -BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAYYwHQYDVR0OBBYEFB/quz4lGwa9pd1iBX7G -TFq/6A9DMA0GCSqGSIb3DQEBBQUAA4IBAQBYpCubTPfkpJKknGWYGWIi/HIy6QRd -xMRwLVpG3kxHiiW5ot3u6hKvSI3vK2fbO8w0mCr3CEf/Iq978fTr4jgCMxh1KBue -dmWsiANy8jhHHYz1nwqIUxAUu4DlDLNdjRfuHhkcho0UZ3iMksseIUn3f9MYv5x5 -+F0IebWqak2SNmy8eesOPXmK2PajVnBd3ttPedJ60pVchidlvqDTB4FAVd0Qy+BL -iILAkH0457+W4Ze6mqtCD9Of2J4VMxHL94J59bXAQVaS4d9VA61Iz9PyLrHHLVZM -ZHQqMc7cdalUR6SnQnIJ5+ECpkeyBM1CE+FhDOB4OiIgohxgQoaH96Xm ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIDQzCCAqygAwIBAgICA/EwDQYJKoZIhvcNAQEEBQAwgcExCzAJBgNVBAYTAkRF -MRAwDgYDVQQIEwdIYW1idXJnMRAwDgYDVQQHEwdIYW1idXJnMTowOAYDVQQKEzFU -QyBUcnVzdENlbnRlciBmb3IgU2VjdXJpdHkgaW4gRGF0YSBOZXR3b3JrcyBHbWJI -MSgwJgYDVQQLEx9UQyBUcnVzdENlbnRlciBUaW1lIFN0YW1waW5nIENBMSgwJgYD -VQQDEx9UQyBUcnVzdENlbnRlciBUaW1lIFN0YW1waW5nIENBMB4XDTk4MDMwOTEx -NTk1OVoXDTExMDEwMTExNTk1OVowgcExCzAJBgNVBAYTAkRFMRAwDgYDVQQIEwdI -YW1idXJnMRAwDgYDVQQHEwdIYW1idXJnMTowOAYDVQQKEzFUQyBUcnVzdENlbnRl -ciBmb3IgU2VjdXJpdHkgaW4gRGF0YSBOZXR3b3JrcyBHbWJIMSgwJgYDVQQLEx9U -QyBUcnVzdENlbnRlciBUaW1lIFN0YW1waW5nIENBMSgwJgYDVQQDEx9UQyBUcnVz -dENlbnRlciBUaW1lIFN0YW1waW5nIENBMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCB -iQKBgQC2S+Q2apwDjOkZb76H+fcwjD4vGE1U3ujMLAg9fEYvhAyd6+/7EZRj5+y0 -zRP9mvYwZcWKfciC0aO9EXsefr8v3GeBBFtwS+rhs7aYPbW+cNM+eV0LN5hYisP6 -mSiPAQRjHoB/d3LEXX//T1f/qslWd0Ot/BY3ajgvdEEZN6f/wwIDAQABo0gwRjAP -BgNVHRMBAf8EBTADAQH/MDMGCWCGSAGG+EIBCAQmFiRodHRwOi8vd3d3LnRydXN0 -Y2VudGVyLmRlL2d1aWRlbGluZXMwDQYJKoZIhvcNAQEEBQADgYEALqyPthmgpIxe -AbsJadYuBft2K2k118hvBqgb8tVfC8xL88FT9JW/nI5ss197C8bmnKfQLAM+1Tnh -nG7rQfjJZEO4PaJK4R5PhZLXG0duPxfar+wWPo4aiS1BidZpL0OqXS7y6NBU7g0W -xdpw2BJ0RK4WS3TtjAurNQpIaOxpAyk= ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIID3TCCAsWgAwIBAgIOHaIAAQAC7LdggHiNtgYwDQYJKoZIhvcNAQEFBQAweTEL -MAkGA1UEBhMCREUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVyIEdtYkgxJDAiBgNV -BAsTG1RDIFRydXN0Q2VudGVyIFVuaXZlcnNhbCBDQTEmMCQGA1UEAxMdVEMgVHJ1 -c3RDZW50ZXIgVW5pdmVyc2FsIENBIEkwHhcNMDYwMzIyMTU1NDI4WhcNMjUxMjMx -MjI1OTU5WjB5MQswCQYDVQQGEwJERTEcMBoGA1UEChMTVEMgVHJ1c3RDZW50ZXIg -R21iSDEkMCIGA1UECxMbVEMgVHJ1c3RDZW50ZXIgVW5pdmVyc2FsIENBMSYwJAYD -VQQDEx1UQyBUcnVzdENlbnRlciBVbml2ZXJzYWwgQ0EgSTCCASIwDQYJKoZIhvcN -AQEBBQADggEPADCCAQoCggEBAKR3I5ZEr5D0MacQ9CaHnPM42Q9e3s9B6DGtxnSR -JJZ4Hgmgm5qVSkr1YnwCqMqs+1oEdjneX/H5s7/zA1hV0qq34wQi0fiU2iIIAI3T -fCZdzHd55yx4Oagmcw6iXSVphU9VDprvxrlE4Vc93x9UIuVvZaozhDrzznq+VZeu -jRIPFDPiUHDDSYcTvFHe15gSWu86gzOSBnWLknwSaHtwag+1m7Z3W0hZneTvWq3z -wZ7U10VOylY0Ibw+F1tvdwxIAUMpsN0/lm7mlaoMwCC2/T42J5zjXM9OgdwZu5GQ -fezmlwQek8wiSdeXhrYTCjxDI3d+8NzmzSQfO4ObNDqDNOMCAwEAAaNjMGEwHwYD -VR0jBBgwFoAUkqR1LKSevoFE63n8isWVpesQdXMwDwYDVR0TAQH/BAUwAwEB/zAO -BgNVHQ8BAf8EBAMCAYYwHQYDVR0OBBYEFJKkdSyknr6BROt5/IrFlaXrEHVzMA0G -CSqGSIb3DQEBBQUAA4IBAQAo0uCG1eb4e/CX3CJrO5UUVg8RMKWaTzqwOuAGy2X1 -7caXJ/4l8lfmXpWMPmRgFVp/Lw0BxbFg/UU1z/CyvwbZ71q+s2IhtNerNXxTPqYn -8aEt2hojnczd7Dwtnic0XQ/CNnm8yUpiLe1r2X1BQ3y2qsrtYbE3ghUJGooWMNjs -ydZHcnhLEEYUjl8Or+zHL6sQ17bxbuyGssLoDZJz3KL0Dzq/YSMQiZxIQG5wALPT -ujdEWBF6AmqI8Dc08BnprNRlc/ZpjGSUOnmFKbAWKwyCPwacx/0QK54PLLae4xW/ -2TYcuiUaUj0a7CIMHOCkoj3w6DnPgcB77V0fb8XQC9eY ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIF3zCCA8egAwIBAgIOGTMAAQACKBqaBLzyVUUwDQYJKoZIhvcNAQEFBQAwejEL -MAkGA1UEBhMCREUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVyIEdtYkgxJDAiBgNV -BAsTG1RDIFRydXN0Q2VudGVyIFVuaXZlcnNhbCBDQTEnMCUGA1UEAxMeVEMgVHJ1 -c3RDZW50ZXIgVW5pdmVyc2FsIENBIElJMB4XDTA2MDMyMjE1NTgzNFoXDTMwMTIz -MTIyNTk1OVowejELMAkGA1UEBhMCREUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVy -IEdtYkgxJDAiBgNVBAsTG1RDIFRydXN0Q2VudGVyIFVuaXZlcnNhbCBDQTEnMCUG -A1UEAxMeVEMgVHJ1c3RDZW50ZXIgVW5pdmVyc2FsIENBIElJMIICIjANBgkqhkiG -9w0BAQEFAAOCAg8AMIICCgKCAgEAi9R3azRs5TbYalxeOO781R15Azt7g2JEgk6I -7d6D/+7MUGIFBZWZdpj2ufJf2AaRksL2LWYXH/1TA+iojWOpbuHWG4y8mLOLO9Tk -Lsp9hUkmW3m4GotAnn+7yT9jLM/RWny6KCJBElpN+Rd3/IX9wkngKhh/6aAsnPlE -/AxoOUL1JwW+jhV6YJ3wO8c85j4WvK923mq3ouGrRkXrjGV90ZfzlxElq1nroCLZ -gt2Y7X7i+qBhCkoy3iwX921E6oFHWZdXNwM53V6CItQzuPomCba8OYgvURVOm8M7 -3xOCiN1LNPIz1pDp81PcNXzAw9l8eLPNcD+NauCjgUjkKa1juPD8KGQ7mbN9/pqd -iPaZIgiRRxaJNXhdd6HPv0nh/SSUK2k2e+gc5iqQilvVOzRZQtxtz7sPQRxVzfUN -Wy4WIibvYR6X/OJTyM9bo8ep8boOhhLLE8oVx+zkNo3aXBM9ZdIOXXB03L+PemrB -Lg/Txl4PK1lszGFs/sBhTtnmT0ayWuIZFHCE+CAA7QGnl37DvRJckiMXoKUdRRcV -I5qSCLUiiI3cKyTr4LEXaNOvYb3ZhXj2jbp4yjeNY77nrB/fpUcJucglMVRGURFV -DYlcjdrSGC1z8rjVJ/VIIjfRYvd7Dcg4i6FKsPzQ8eu3hmPn4A5zf/1yUbXpfeJV -BWR4Z38CAwEAAaNjMGEwHwYDVR0jBBgwFoAUzdeQoW6jv9sw1toyJZAM5jkegGUw -DwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAYYwHQYDVR0OBBYEFM3XkKFu -o7/bMNbaMiWQDOY5HoBlMA0GCSqGSIb3DQEBBQUAA4ICAQB+FojoEw42zG4qhQc4 -xlaJeuNHIWZMUAgxWlHQ/KZeFHXeTDvs8e3MfhEHSmHu6rOOOqQzxu2KQmZP8Tx7 -yaUFQZmx7Cxb7tyW0ohTS3g0uW7muw/FeqZ8Dhjfbw90TNGp8aHp2FRkzF6WeKJW -GsFzshXGVwXf2vdIJIqOf2qp+U3pPmrOYCx9LZAI9mOPFdAtnIz/8f38DBZQVhT7 -upeG7rRJA1TuG1l/MDoCgoYhrv7wFfLfToPmmcW6NfcgkIw47XXP4S73BDD7Ua2O -giRAyn0pXdXZ92Vk/KqfdLh9kl3ShCngE+qK99CrxK7vFcXCifJ7tjtJmGHzTnKR -N4xJkunI7Cqg90lufA0kxmts8jgvynAF5X/fxisrgIDV2m/LQLvYG/AkyRDIRAJ+ -LtOYqqIN8SvQ2vqOHP9U6OFKbt2o1ni1N6WsZNUUI8cOpevhCTjXwHxgpV2Yj4wC -1dxWqPNNWKkL1HxkdAEy8t8PSoqpAqKiHYR3wvHMl700GXRd4nQ+dSf3r7/ufA5t -VIimVuImrTESPB5BeW0X6hNeH/Vcn0lZo7Ivo0LD+qh+v6WfSMlgYmIK371F3uNC -tVGW/cT1Gpm4UqJEzS1hjBWPgdVdotSQPYxuQGHDWV3Y2eH2dEcieXR92sqjbzcV -NvAsGnE8EXbfXRo+VGN4a2V+Hw== ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIEKzCCAxOgAwIBAgIEOsylTDANBgkqhkiG9w0BAQUFADBDMQswCQYDVQQGEwJE -SzEVMBMGA1UEChMMVERDIEludGVybmV0MR0wGwYDVQQLExRUREMgSW50ZXJuZXQg -Um9vdCBDQTAeFw0wMTA0MDUxNjMzMTdaFw0yMTA0MDUxNzAzMTdaMEMxCzAJBgNV -BAYTAkRLMRUwEwYDVQQKEwxUREMgSW50ZXJuZXQxHTAbBgNVBAsTFFREQyBJbnRl -cm5ldCBSb290IENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxLhA -vJHVYx/XmaCLDEAedLdInUaMArLgJF/wGROnN4NrXceO+YQwzho7+vvOi20jxsNu -Zp+Jpd/gQlBn+h9sHvTQBda/ytZO5GhgbEaqHF1j4QeGDmUApy6mcca8uYGoOn0a -0vnRrEvLznWv3Hv6gXPU/Lq9QYjUdLP5Xjg6PEOo0pVOd20TDJ2PeAG3WiAfAzc1 -4izbSysseLlJ28TQx5yc5IogCSEWVmb/Bexb4/DPqyQkXsN/cHoSxNK1EKC2IeGN -eGlVRGn1ypYcNIUXJXfi9i8nmHj9eQY6otZaQ8H/7AQ77hPv01ha/5Lr7K7a8jcD -R0G2l8ktCkEiu7vmpwIDAQABo4IBJTCCASEwEQYJYIZIAYb4QgEBBAQDAgAHMGUG -A1UdHwReMFwwWqBYoFakVDBSMQswCQYDVQQGEwJESzEVMBMGA1UEChMMVERDIElu -dGVybmV0MR0wGwYDVQQLExRUREMgSW50ZXJuZXQgUm9vdCBDQTENMAsGA1UEAxME -Q1JMMTArBgNVHRAEJDAigA8yMDAxMDQwNTE2MzMxN1qBDzIwMjEwNDA1MTcwMzE3 -WjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUbGQBx/2FbazI2p5QCIUItTxWqFAw -HQYDVR0OBBYEFGxkAcf9hW2syNqeUAiFCLU8VqhQMAwGA1UdEwQFMAMBAf8wHQYJ -KoZIhvZ9B0EABBAwDhsIVjUuMDo0LjADAgSQMA0GCSqGSIb3DQEBBQUAA4IBAQBO -Q8zR3R0QGwZ/t6T609lN+yOfI1Rb5osvBCiLtSdtiaHsmGnc540mgwV5dOy0uaOX -wTUA/RXaOYE6lTGQ3pfphqiZdwzlWqCE/xIWrG64jcN7ksKsLtB9KOy282A4aW8+ -2ARVPp7MVdK6/rtHBNcK2RYKNCn1WBPVT8+PVkuzHu7TmHnaCB4Mb7j4Fifvwm89 -9qNLPg7kbWzbO0ESm70NRyN/PErQr8Cv9u8btRXE64PECV90i9kR+8JWsTz4cMo0 -jUNAE4z9mQNUecYu6oah9jrUCbz0vGbMPVjQV0kK7iXiQe4T+Zs4NNEA9X7nlB38 -aQNiuJkFBT1reBK9sG9l ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIFGTCCBAGgAwIBAgIEPki9xDANBgkqhkiG9w0BAQUFADAxMQswCQYDVQQGEwJE -SzEMMAoGA1UEChMDVERDMRQwEgYDVQQDEwtUREMgT0NFUyBDQTAeFw0wMzAyMTEw -ODM5MzBaFw0zNzAyMTEwOTA5MzBaMDExCzAJBgNVBAYTAkRLMQwwCgYDVQQKEwNU -REMxFDASBgNVBAMTC1REQyBPQ0VTIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A -MIIBCgKCAQEArGL2YSCyz8DGhdfjeebM7fI5kqSXLmSjhFuHnEz9pPPEXyG9VhDr -2y5h7JNp46PMvZnDBfwGuMo2HP6QjklMxFaaL1a8z3sM8W9Hpg1DTeLpHTk0zY0s -2RKY+ePhwUp8hjjEqcRhiNJerxomTdXkoCJHhNlktxmW/OwZ5LKXJk5KTMuPJItU -GBxIYXvViGjaXbXqzRowwYCDdlCqT9HU3Tjw7xb04QxQBr/q+3pJoSgrHPb8FTKj -dGqPqcNiKXEx5TukYBdedObaE+3pHx8b0bJoc8YQNHVGEBDjkAB2QMuLt0MJIf+r -TpPGWOmlgtt3xDqZsXKVSQTwtyv6e1mO3QIDAQABo4ICNzCCAjMwDwYDVR0TAQH/ -BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwgewGA1UdIASB5DCB4TCB3gYIKoFQgSkB -AQEwgdEwLwYIKwYBBQUHAgEWI2h0dHA6Ly93d3cuY2VydGlmaWthdC5kay9yZXBv -c2l0b3J5MIGdBggrBgEFBQcCAjCBkDAKFgNUREMwAwIBARqBgUNlcnRpZmlrYXRl -ciBmcmEgZGVubmUgQ0EgdWRzdGVkZXMgdW5kZXIgT0lEIDEuMi4yMDguMTY5LjEu -MS4xLiBDZXJ0aWZpY2F0ZXMgZnJvbSB0aGlzIENBIGFyZSBpc3N1ZWQgdW5kZXIg -T0lEIDEuMi4yMDguMTY5LjEuMS4xLjARBglghkgBhvhCAQEEBAMCAAcwgYEGA1Ud -HwR6MHgwSKBGoESkQjBAMQswCQYDVQQGEwJESzEMMAoGA1UEChMDVERDMRQwEgYD -VQQDEwtUREMgT0NFUyBDQTENMAsGA1UEAxMEQ1JMMTAsoCqgKIYmaHR0cDovL2Ny -bC5vY2VzLmNlcnRpZmlrYXQuZGsvb2Nlcy5jcmwwKwYDVR0QBCQwIoAPMjAwMzAy -MTEwODM5MzBagQ8yMDM3MDIxMTA5MDkzMFowHwYDVR0jBBgwFoAUYLWF7FZkfhIZ -J2cdUBVLc647+RIwHQYDVR0OBBYEFGC1hexWZH4SGSdnHVAVS3OuO/kSMB0GCSqG -SIb2fQdBAAQQMA4bCFY2LjA6NC4wAwIEkDANBgkqhkiG9w0BAQUFAAOCAQEACrom -JkbTc6gJ82sLMJn9iuFXehHTuJTXCRBuo7E4A9G28kNBKWKnctj7fAXmMXAnVBhO -inxO5dHKjHiIzxvTkIvmI/gLDjNDfZziChmPyQE+dF10yYscA+UYyAFMP8uXBV2Y -caaYb7Z8vTd/vuGTJW1v8AqtFxjhA7wHKcitJuj4YfD9IQl+mo6paH1IYnK9AOoB -mbgGglGBTvH1tJFUuSN6AJqfXY3gPGS5GhKSKseCRHI53OI8xthV9RVOyAUO28bQ -YqbsFbS1AoLbrIyigfCbmTH1ICCoiGEKB5+U/NDXG8wuF/MEJ3Zn61SD/aSQfgY9 -BKNDLdr8C2LqL19iUw== ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIDITCCAoqgAwIBAgIBADANBgkqhkiG9w0BAQQFADCByzELMAkGA1UEBhMCWkEx -FTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMRowGAYD -VQQKExFUaGF3dGUgQ29uc3VsdGluZzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBT -ZXJ2aWNlcyBEaXZpc2lvbjEhMB8GA1UEAxMYVGhhd3RlIFBlcnNvbmFsIEJhc2lj -IENBMSgwJgYJKoZIhvcNAQkBFhlwZXJzb25hbC1iYXNpY0B0aGF3dGUuY29tMB4X -DTk2MDEwMTAwMDAwMFoXDTIwMTIzMTIzNTk1OVowgcsxCzAJBgNVBAYTAlpBMRUw -EwYDVQQIEwxXZXN0ZXJuIENhcGUxEjAQBgNVBAcTCUNhcGUgVG93bjEaMBgGA1UE -ChMRVGhhd3RlIENvbnN1bHRpbmcxKDAmBgNVBAsTH0NlcnRpZmljYXRpb24gU2Vy -dmljZXMgRGl2aXNpb24xITAfBgNVBAMTGFRoYXd0ZSBQZXJzb25hbCBCYXNpYyBD -QTEoMCYGCSqGSIb3DQEJARYZcGVyc29uYWwtYmFzaWNAdGhhd3RlLmNvbTCBnzAN -BgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAvLyTU23AUE+CFeZIlDWmWr5vQvoPR+53 -dXLdjUmbllegeNTKP1GzaQuRdhciB5dqxFGTS+CN7zeVoQxN2jSQHReJl+A1OFdK -wPQIcOk8RHtQfmGakOMj04gRRif1CwcOu93RfyAKiLlWCy4cgNrx454p7xS9CkT7 -G1sY0b8jkyECAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQQF -AAOBgQAt4plrsD16iddZopQBHyvdEktTwq1/qqcAXJFAVyVKOKqEcLnZgA+le1z7 -c8a914phXAPjLSeoF+CEhULcXpvGt7Jtu3Sv5D/Lp7ew4F2+eIMllNLbgQ95B21P -9DkVWlIBe94y1k049hJcBlDfBVu9FEuh3ym6O0GN92NWod8isQ== ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIDLTCCApagAwIBAgIBADANBgkqhkiG9w0BAQQFADCB0TELMAkGA1UEBhMCWkEx -FTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMRowGAYD -VQQKExFUaGF3dGUgQ29uc3VsdGluZzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBT -ZXJ2aWNlcyBEaXZpc2lvbjEkMCIGA1UEAxMbVGhhd3RlIFBlcnNvbmFsIEZyZWVt -YWlsIENBMSswKQYJKoZIhvcNAQkBFhxwZXJzb25hbC1mcmVlbWFpbEB0aGF3dGUu -Y29tMB4XDTk2MDEwMTAwMDAwMFoXDTIwMTIzMTIzNTk1OVowgdExCzAJBgNVBAYT -AlpBMRUwEwYDVQQIEwxXZXN0ZXJuIENhcGUxEjAQBgNVBAcTCUNhcGUgVG93bjEa -MBgGA1UEChMRVGhhd3RlIENvbnN1bHRpbmcxKDAmBgNVBAsTH0NlcnRpZmljYXRp -b24gU2VydmljZXMgRGl2aXNpb24xJDAiBgNVBAMTG1RoYXd0ZSBQZXJzb25hbCBG -cmVlbWFpbCBDQTErMCkGCSqGSIb3DQEJARYccGVyc29uYWwtZnJlZW1haWxAdGhh -d3RlLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA1GnX1LCUZFtx6UfY -DFG26nKRsIRefS0Nj3sS34UldSh0OkIsYyeflXtL734Zhx2G6qPduc6WZBrCFG5E -rHzmj+hND3EfQDimAKOHePb5lIZererAXnbr2RSjXW56fAylS1V/Bhkpf56aJtVq -uzgkCGqYx7Hao5iR/Xnb5VrEHLkCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zAN -BgkqhkiG9w0BAQQFAAOBgQDH7JJ+Tvj1lqVnYiqk8E0RYNBvjWBYYawmu1I1XAjP -MPuoSpaKH2JCI4wXD/S6ZJwXrEcp352YXtJsYHFcoqzceePnbgBHH7UNKOgCneSa -/RP0ptl8sfjcXyMmCZGAc9AUG95DqYMl8uacLxXK/qarigd1iwzdUYRr5PjRznei -gQ== ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIDKTCCApKgAwIBAgIBADANBgkqhkiG9w0BAQQFADCBzzELMAkGA1UEBhMCWkEx -FTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMRowGAYD -VQQKExFUaGF3dGUgQ29uc3VsdGluZzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBT -ZXJ2aWNlcyBEaXZpc2lvbjEjMCEGA1UEAxMaVGhhd3RlIFBlcnNvbmFsIFByZW1p -dW0gQ0ExKjAoBgkqhkiG9w0BCQEWG3BlcnNvbmFsLXByZW1pdW1AdGhhd3RlLmNv -bTAeFw05NjAxMDEwMDAwMDBaFw0yMDEyMzEyMzU5NTlaMIHPMQswCQYDVQQGEwJa -QTEVMBMGA1UECBMMV2VzdGVybiBDYXBlMRIwEAYDVQQHEwlDYXBlIFRvd24xGjAY -BgNVBAoTEVRoYXd0ZSBDb25zdWx0aW5nMSgwJgYDVQQLEx9DZXJ0aWZpY2F0aW9u -IFNlcnZpY2VzIERpdmlzaW9uMSMwIQYDVQQDExpUaGF3dGUgUGVyc29uYWwgUHJl -bWl1bSBDQTEqMCgGCSqGSIb3DQEJARYbcGVyc29uYWwtcHJlbWl1bUB0aGF3dGUu -Y29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDJZtn4B0TPuYwu8KHvE0Vs -Bd/eJxZRNkERbGw77f4QfRKe5ZtCmv5gMcNmt3M6SK5O0DI3lIi1DbbZ8/JE2dWI -Et12TfIa/G8jHnrx2JhFTgcQ7xZC0EN1bUre4qrJMf8fAHB8Zs8QJQi6+u4A6UYD -ZicRFTuqW/KY3TZCstqIdQIDAQABoxMwETAPBgNVHRMBAf8EBTADAQH/MA0GCSqG -SIb3DQEBBAUAA4GBAGk2ifc0KjNyL2071CKyuG+axTZmDhs8obF1Wub9NdP4qPIH -b4Vnjt4rueIXsDqg8A6iAJrf8xQVbrvIhVqYgPn/vnQdPfP+MCXRNzRn+qVxeTBh -KXLA4CxM+1bkOqhv5TJZUtt1KFBZDPgLGeSs2a+WjS9Q2wfD6h+rM+D1KzGJ ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIDJzCCApCgAwIBAgIBATANBgkqhkiG9w0BAQQFADCBzjELMAkGA1UEBhMCWkEx -FTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYD -VQQKExRUaGF3dGUgQ29uc3VsdGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlv -biBTZXJ2aWNlcyBEaXZpc2lvbjEhMB8GA1UEAxMYVGhhd3RlIFByZW1pdW0gU2Vy -dmVyIENBMSgwJgYJKoZIhvcNAQkBFhlwcmVtaXVtLXNlcnZlckB0aGF3dGUuY29t -MB4XDTk2MDgwMTAwMDAwMFoXDTIwMTIzMTIzNTk1OVowgc4xCzAJBgNVBAYTAlpB -MRUwEwYDVQQIEwxXZXN0ZXJuIENhcGUxEjAQBgNVBAcTCUNhcGUgVG93bjEdMBsG -A1UEChMUVGhhd3RlIENvbnN1bHRpbmcgY2MxKDAmBgNVBAsTH0NlcnRpZmljYXRp -b24gU2VydmljZXMgRGl2aXNpb24xITAfBgNVBAMTGFRoYXd0ZSBQcmVtaXVtIFNl -cnZlciBDQTEoMCYGCSqGSIb3DQEJARYZcHJlbWl1bS1zZXJ2ZXJAdGhhd3RlLmNv -bTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA0jY2aovXwlue2oFBYo847kkE -VdbQ7xwblRZH7xhINTpS9CtqBo87L+pW46+GjZ4X9560ZXUCTe/LCaIhUdib0GfQ -ug2SBhRz1JPLlyoAnFxODLz6FVL88kRu2hFKbgifLy3j+ao6hnO2RlNYyIkFvYMR -uHM/qgeN9EJN50CdHDcCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG -9w0BAQQFAAOBgQAmSCwWwlj66BZ0DKqqX1Q/8tfJeGBeXm43YyJ3Nn6yF8Q0ufUI -hfzJATj/Tb7yFkJD57taRvvBxhEf8UqwKEbJw8RCfbz6q1lu1bdRiBHjpIUZa4JM -pAwSremkrj/xw0llmozFyD4lt5SZu5IycQfwhl7tUCemDaYj+bvLpgcUQg== ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIEIDCCAwigAwIBAgIQNE7VVyDV7exJ9C/ON9srbTANBgkqhkiG9w0BAQUFADCB -qTELMAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjEoMCYGA1UECxMf -Q2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMvKGMpIDIw -MDYgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxHzAdBgNV -BAMTFnRoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EwHhcNMDYxMTE3MDAwMDAwWhcNMzYw -NzE2MjM1OTU5WjCBqTELMAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5j -LjEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjE4MDYG -A1UECxMvKGMpIDIwMDYgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl -IG9ubHkxHzAdBgNVBAMTFnRoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EwggEiMA0GCSqG -SIb3DQEBAQUAA4IBDwAwggEKAoIBAQCsoPD7gFnUnMekz52hWXMJEEUMDSxuaPFs -W0hoSVk3/AszGcJ3f8wQLZU0HObrTQmnHNK4yZc2AreJ1CRfBsDMRJSUjQJib+ta -3RGNKJpchJAQeg29dGYvajig4tVUROsdB58Hum/u6f1OCyn1PoSgAfGcq/gcfomk -6KHYcWUNo1F77rzSImANuVud37r8UVsLr5iy6S7pBOhih94ryNdOwUxkHt3Ph1i6 -Sk/KaAcdHJ1KxtUvkcx8cXIcxcBn6zL9yZJclNqFwJu/U30rCfSMnZEfl2pSy94J -NqR32HuHUETVPm4pafs5SSYeCaWAe0At6+gnhcn+Yf1+5nyXHdWdAgMBAAGjQjBA -MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBR7W0XP -r87Lev0xkhpqtvNG61dIUDANBgkqhkiG9w0BAQUFAAOCAQEAeRHAS7ORtvzw6WfU -DW5FvlXok9LOAz/t2iWwHVfLHjp2oEzsUHboZHIMpKnxuIvW1oeEuzLlQRHAd9mz -YJ3rG9XRbkREqaYB7FViHXe4XI5ISXycO1cRrK1zN44veFyQaEfZYGDm/Ac9IiAX -xPcW6cTYcvnIc3zfFi8VqT79aie2oetaupgf1eNNZAqdE8hhuvU5HIe6uL17In/2 -/qxAeeWsEG89jxt5dovEN7MhGITlNgDrYyCZuen+MwS7QcjBAvlEYyCegc5C09Y/ -LHbTY5xZ3Y+m4Q6gLkH3LpVHz7z9M/P2C2F+fpErgUfCJzDupxBdN49cOSvkBPB7 -jVaMaA== ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIDEzCCAnygAwIBAgIBATANBgkqhkiG9w0BAQQFADCBxDELMAkGA1UEBhMCWkEx -FTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYD -VQQKExRUaGF3dGUgQ29uc3VsdGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlv -biBTZXJ2aWNlcyBEaXZpc2lvbjEZMBcGA1UEAxMQVGhhd3RlIFNlcnZlciBDQTEm -MCQGCSqGSIb3DQEJARYXc2VydmVyLWNlcnRzQHRoYXd0ZS5jb20wHhcNOTYwODAx -MDAwMDAwWhcNMjAxMjMxMjM1OTU5WjCBxDELMAkGA1UEBhMCWkExFTATBgNVBAgT -DFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYDVQQKExRUaGF3 -dGUgQ29uc3VsdGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNl -cyBEaXZpc2lvbjEZMBcGA1UEAxMQVGhhd3RlIFNlcnZlciBDQTEmMCQGCSqGSIb3 -DQEJARYXc2VydmVyLWNlcnRzQHRoYXd0ZS5jb20wgZ8wDQYJKoZIhvcNAQEBBQAD -gY0AMIGJAoGBANOkUG7I/1Zr5s9dtuoMaHVHoqrC2oQl/Kj0R1HahbUgdJSGHg91 -yekIYfUGbTBuFRkC6VLAYttNmZ7iagxEOM3+vuNkCXDF/rFrKbYvScg71CcEJRCX -L+eQbcAoQpnXTEPew/UhbVSfXcNY4cDk2VuwuNy0e982OsK1ZiIS1ocNAgMBAAGj -EzARMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEEBQADgYEAB/pMaVz7lcxG -7oWDTSEwjsrZqG9JGubaUeNgcGyEYRGhGshIPllDfU+VPaGLtwtimHp1it2ITk6e -QNuozDJ0uW8NxuOzRAvZim+aKZuZGCg70eNAKJpaPNW15yAbi8qkq43pUdniTCxZ -qdq5snUb9kLy78fyGPmJvKP/iiMucEc= ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIEQzCCAyugAwIBAgIBATANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJHQjEb -MBkGA1UECAwSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRow -GAYDVQQKDBFDb21vZG8gQ0EgTGltaXRlZDElMCMGA1UEAwwcVHJ1c3RlZCBDZXJ0 -aWZpY2F0ZSBTZXJ2aWNlczAeFw0wNDAxMDEwMDAwMDBaFw0yODEyMzEyMzU5NTla -MH8xCzAJBgNVBAYTAkdCMRswGQYDVQQIDBJHcmVhdGVyIE1hbmNoZXN0ZXIxEDAO -BgNVBAcMB1NhbGZvcmQxGjAYBgNVBAoMEUNvbW9kbyBDQSBMaW1pdGVkMSUwIwYD -VQQDDBxUcnVzdGVkIENlcnRpZmljYXRlIFNlcnZpY2VzMIIBIjANBgkqhkiG9w0B -AQEFAAOCAQ8AMIIBCgKCAQEA33FvNlhTWvI2VFeAxHQIIO0Yfyod5jWaHiWsnOWW -fnJSoBVC21ndZHoa0Lh73TkVvFVIxO06AOoxEbrycXQaZ7jPM8yoMa+j49d/vzMt -TGo87IvDktJTdyR0nAducPy9C1t2ul/y/9c3S0pgePfw+spwtOpZqqPOSC+pw7IL -fhdyFgymBwwbOM/JYrc/oJOlh0Hyt3BAd9i+FHzjqMB6juljatEPmsbS9Is6FARW -1O24zG71++IsWL1/T2sr92AkWCTOJu80kTrV44HQsvAEAtdbtz6SrGsSivnkBbA7 -kUlcsutT6vifR4buv5XAwAaf0lteERv0xwQ1KdJVXOTt6wIDAQABo4HJMIHGMB0G -A1UdDgQWBBTFe1i97doladL3WRaoszLAeydb9DAOBgNVHQ8BAf8EBAMCAQYwDwYD -VR0TAQH/BAUwAwEB/zCBgwYDVR0fBHwwejA8oDqgOIY2aHR0cDovL2NybC5jb21v -ZG9jYS5jb20vVHJ1c3RlZENlcnRpZmljYXRlU2VydmljZXMuY3JsMDqgOKA2hjRo -dHRwOi8vY3JsLmNvbW9kby5uZXQvVHJ1c3RlZENlcnRpZmljYXRlU2VydmljZXMu -Y3JsMA0GCSqGSIb3DQEBBQUAA4IBAQDIk4E7ibSvuIQSTI3S8NtwuleGFTQQuS9/ -HrCoiWChisJ3DFBKmwCL2Iv0QeLQg4pKHBQGsKNoBXAxMKdTmw7pSqBYaWcOrp32 -pSxBvzwGa+RZzG0Q8ZZvH9/0BAKkn0U+yNj6NkZEUD+Cl5EfKNsYEYwq5GWDVxIS -jBc/lDb+XbDABHcTuPQV1T84zJQ6VdCsmPW6AF/ghhmBeC8owH7TzEIK9a5QoNE+ -xqFx7D+gIIxmOom0jtTYsU0lR+4viMi14QVFwL4Ucd56/Y57fU0IlqUSc/Atyjcn -dBInTMu2l+nZrghtWjlA3QVHdWpaIbOjGM9O9y5Xt5hwXsjEeLBi ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIID+zCCAuOgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBtzE/MD0GA1UEAww2VMOc -UktUUlVTVCBFbGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sx -c8SxMQswCQYDVQQGDAJUUjEPMA0GA1UEBwwGQU5LQVJBMVYwVAYDVQQKDE0oYykg -MjAwNSBUw5xSS1RSVVNUIEJpbGdpIMSwbGV0acWfaW0gdmUgQmlsacWfaW0gR8O8 -dmVubGnEn2kgSGl6bWV0bGVyaSBBLsWeLjAeFw0wNTA1MTMxMDI3MTdaFw0xNTAz -MjIxMDI3MTdaMIG3MT8wPQYDVQQDDDZUw5xSS1RSVVNUIEVsZWt0cm9uaWsgU2Vy -dGlmaWthIEhpem1ldCBTYcSfbGF5xLFjxLFzxLExCzAJBgNVBAYMAlRSMQ8wDQYD -VQQHDAZBTktBUkExVjBUBgNVBAoMTShjKSAyMDA1IFTDnFJLVFJVU1QgQmlsZ2kg -xLBsZXRpxZ9pbSB2ZSBCaWxpxZ9pbSBHw7x2ZW5sacSfaSBIaXptZXRsZXJpIEEu -xZ4uMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAylIF1mMD2Bxf3dJ7 -XfIMYGFbazt0K3gNfUW9InTojAPBxhEqPZW8qZSwu5GXyGl8hMW0kWxsE2qkVa2k -heiVfrMArwDCBRj1cJ02i67L5BuBf5OI+2pVu32Fks66WJ/bMsW9Xe8iSi9BB35J -YbOG7E6mQW6EvAPs9TscyB/C7qju6hJKjRTP8wrgUDn5CDX4EVmt5yLqS8oUBt5C -urKZ8y1UiBAG6uEaPj1nH/vO+3yC6BFdSsG5FOpU2WabfIl9BJpiyelSPJ6c79L1 -JuTm5Rh8i27fbMx4W09ysstcP4wFjdFMjK2Sx+F4f2VsSQZQLJ4ywtdKxnWKWU51 -b0dewQIDAQABoxAwDjAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEBBQUAA4IBAQAV -9VX/N5aAWSGk/KEVTCD21F/aAyT8z5Aa9CEKmu46sWrv7/hg0Uw2ZkUd82YCdAR7 -kjCo3gp2D++Vbr3JN+YaDayJSFvMgzbC9UZcWYJWtNX+I7TYVBxEq8Sn5RTOPEFh -fEPmzcSBCYsk+1Ql1haolgxnB2+zUEfjHCQo3SqYpGH+2+oSN7wBGjSFvW5P55Fy -B0SFHljKVETd96y5y4khctuPwGkplyqjrhgjlxxBKot8KsF8kOipKMDTkcatKIdA -aLX/7KfS0zgYnNN9aV3wxqUeJBujR/xpB2jn5Jq07Q+hh4cCzofSSE7hvP/L8XKS -RGQDJereW26fyfJOrN3H ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIEPTCCAyWgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBvzE/MD0GA1UEAww2VMOc -UktUUlVTVCBFbGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sx -c8SxMQswCQYDVQQGEwJUUjEPMA0GA1UEBwwGQW5rYXJhMV4wXAYDVQQKDFVUw5xS -S1RSVVNUIEJpbGdpIMSwbGV0acWfaW0gdmUgQmlsacWfaW0gR8O8dmVubGnEn2kg -SGl6bWV0bGVyaSBBLsWeLiAoYykgQXJhbMSxayAyMDA3MB4XDTA3MTIyNTE4Mzcx -OVoXDTE3MTIyMjE4MzcxOVowgb8xPzA9BgNVBAMMNlTDnFJLVFJVU1QgRWxla3Ry -b25payBTZXJ0aWZpa2EgSGl6bWV0IFNhxJ9sYXnEsWPEsXPEsTELMAkGA1UEBhMC -VFIxDzANBgNVBAcMBkFua2FyYTFeMFwGA1UECgxVVMOcUktUUlVTVCBCaWxnaSDE -sGxldGnFn2ltIHZlIEJpbGnFn2ltIEfDvHZlbmxpxJ9pIEhpem1ldGxlcmkgQS7F -ni4gKGMpIEFyYWzEsWsgMjAwNzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC -ggEBAKu3PgqMyKVYFeaK7yc9SrToJdPNM8Ig3BnuiD9NYvDdE3ePYakqtdTyuTFY -KTsvP2qcb3N2Je40IIDu6rfwxArNK4aUyeNgsURSsloptJGXg9i3phQvKUmi8wUG -+7RP2qFsmmaf8EMJyupyj+sA1zU511YXRxcw9L6/P8JorzZAwan0qafoEGsIiveG -HtyaKhUG9qPw9ODHFNRRf8+0222vR5YXm3dx2KdxnSQM9pQ/hTEST7ruToK4uT6P -IzdezKKqdfcYbwnTrqdUKDT74eA7YH2gvnmJhsifLfkKS8RQouf9eRbHegsYz85M -733WB2+Y8a+xwXrXgTW4qhe04MsCAwEAAaNCMEAwHQYDVR0OBBYEFCnFkKslrxHk -Yb+j/4hhkeYO/pyBMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MA0G -CSqGSIb3DQEBBQUAA4IBAQAQDdr4Ouwo0RSVgrESLFF6QSU2TJ/sPx+EnWVUXKgW -AkD6bho3hO9ynYYKVZ1WKKxmLNA6VpM0ByWtCLCPyA8JWcqdmBzlVPi5RX9ql2+I -aE1KBiY3iAIOtsbWcpnOa3faYjGkVh+uX4132l32iPwa2Z61gfAyuOOI0JzzaqC5 -mxRZNTZPz/OOXl0XrRWV2N2y1RVuAE6zS89mlOTgzbUF2mNXi+WzqtvALhyQRNsa -XRik7r4EW5nVcV9VZWRi1aKbBFmGyGJ353yCRWo9F7/snXUMrqNvWtMvmDb08PUZ -qxFdyKbjKlhqQgnDvZImZjINXQhVdP+MmNAKpoRq0Tl9 ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIEXjCCA0agAwIBAgIQRL4Mi1AAIbQR0ypoBqmtaTANBgkqhkiG9w0BAQUFADCB -kzELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2Ug -Q2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExho -dHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xGzAZBgNVBAMTElVUTiAtIERBVEFDb3Jw -IFNHQzAeFw05OTA2MjQxODU3MjFaFw0xOTA2MjQxOTA2MzBaMIGTMQswCQYDVQQG -EwJVUzELMAkGA1UECBMCVVQxFzAVBgNVBAcTDlNhbHQgTGFrZSBDaXR5MR4wHAYD -VQQKExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxITAfBgNVBAsTGGh0dHA6Ly93d3cu -dXNlcnRydXN0LmNvbTEbMBkGA1UEAxMSVVROIC0gREFUQUNvcnAgU0dDMIIBIjAN -BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA3+5YEKIrblXEjr8uRgnn4AgPLit6 -E5Qbvfa2gI5lBZMAHryv4g+OGQ0SR+ysraP6LnD43m77VkIVni5c7yPeIbkFdicZ -D0/Ww5y0vpQZY/KmEQrrU0icvvIpOxboGqBMpsn0GFlowHDyUwDAXlCCpVZvNvlK -4ESGoE1O1kduSUrLZ9emxAW5jh70/P/N5zbgnAVssjMiFdC04MwXwLLA9P4yPykq -lXvY8qdOD1R8oQ2AswkDwf9c3V6aPryuvEeKaq5xyh+xKrhfQgUL7EYw0XILyulW -bfXv33i+Ybqypa4ETLyorGkVl73v67SMvzX41MPRKA5cOp9wGDMgd8SirwIDAQAB -o4GrMIGoMAsGA1UdDwQEAwIBxjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRT -MtGzz3/64PGgXYVOktKeRR20TzA9BgNVHR8ENjA0MDKgMKAuhixodHRwOi8vY3Js -LnVzZXJ0cnVzdC5jb20vVVROLURBVEFDb3JwU0dDLmNybDAqBgNVHSUEIzAhBggr -BgEFBQcDAQYKKwYBBAGCNwoDAwYJYIZIAYb4QgQBMA0GCSqGSIb3DQEBBQUAA4IB -AQAnNZcAiosovcYzMB4p/OL31ZjUQLtgyr+rFywJNn9Q+kHcrpY6CiM+iVnJowft -Gzet/Hy+UUla3joKVAgWRcKZsYfNjGjgaQPpxE6YsjuMFrMOoAyYUJuTqXAJyCyj -j98C5OBxOvG0I3KgqgHf35g+FFCgMSa9KOlaMCZ1+XtgHI3zzVAmbQQnmt/VDUVH -KWss5nbZqSl9Mt3JNjy9rjXxEZ4du5A/EkdOjtd+D2JzHVImOBwYSf0wdJrE5SIv -2MCN7ZF6TACPcn9d2t0bi0Vr591pl6jFVkwPDPafepE39peC4N1xaf92P2BNPM/3 -mfnGV/TJVTl4uix5yaaIK/QI ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIEojCCA4qgAwIBAgIQRL4Mi1AAJLQR0zYlJWfJiTANBgkqhkiG9w0BAQUFADCB -rjELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2Ug -Q2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExho -dHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xNjA0BgNVBAMTLVVUTi1VU0VSRmlyc3Qt -Q2xpZW50IEF1dGhlbnRpY2F0aW9uIGFuZCBFbWFpbDAeFw05OTA3MDkxNzI4NTBa -Fw0xOTA3MDkxNzM2NThaMIGuMQswCQYDVQQGEwJVUzELMAkGA1UECBMCVVQxFzAV -BgNVBAcTDlNhbHQgTGFrZSBDaXR5MR4wHAYDVQQKExVUaGUgVVNFUlRSVVNUIE5l -dHdvcmsxITAfBgNVBAsTGGh0dHA6Ly93d3cudXNlcnRydXN0LmNvbTE2MDQGA1UE -AxMtVVROLVVTRVJGaXJzdC1DbGllbnQgQXV0aGVudGljYXRpb24gYW5kIEVtYWls -MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsjmFpPJ9q0E7YkY3rs3B -YHW8OWX5ShpHornMSMxqmNVNNRm5pELlzkniii8efNIxB8dOtINknS4p1aJkxIW9 -hVE1eaROaJB7HHqkkqgX8pgV8pPMyaQylbsMTzC9mKALi+VuG6JG+ni8om+rWV6l -L8/K2m2qL+usobNqqrcuZzWLeeEeaYji5kbNoKXqvgvOdjp6Dpvq/NonWz1zHyLm -SGHGTPNpsaguG7bUMSAsvIKKjqQOpdeJQ/wWWq8dcdcRWdq6hw2v+vPhwvCkxWeM -1tZUOt4KpLoDd7NlyP0e03RiqhjKaJMeoYV+9Udly/hNVyh00jT/MLbu9mIwFIws -6wIDAQABo4G5MIG2MAsGA1UdDwQEAwIBxjAPBgNVHRMBAf8EBTADAQH/MB0GA1Ud -DgQWBBSJgmd9xJ0mcABLtFBIfN49rgRufTBYBgNVHR8EUTBPME2gS6BJhkdodHRw -Oi8vY3JsLnVzZXJ0cnVzdC5jb20vVVROLVVTRVJGaXJzdC1DbGllbnRBdXRoZW50 -aWNhdGlvbmFuZEVtYWlsLmNybDAdBgNVHSUEFjAUBggrBgEFBQcDAgYIKwYBBQUH -AwQwDQYJKoZIhvcNAQEFBQADggEBALFtYV2mGn98q0rkMPxTbyUkxsrt4jFcKw7u -7mFVbwQ+zznexRtJlOTrIEy05p5QLnLZjfWqo7NK2lYcYJeA3IKirUq9iiv/Cwm0 -xtcgBEXkzYABurorbs6q15L+5K/r9CYdFip/bDCVNy8zEqx/3cfREYxRmLLQo5HQ -rfafnoOTHh1CuEava2bwm3/q4wMC5QJRwarVNZ1yQAOJujEdxRBoUp7fooXFXAim -eOZTT7Hot9MUnpOmw2TjrH5xzbyf6QMbzPvprDHBr3wVdAKZw7JHpsIyYdfHb0gk -USeh1YdV8nuPmD0Wnu51tvjQjvLzxq4oW6fw8zYX/MMF08oDSlQ= ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIEdDCCA1ygAwIBAgIQRL4Mi1AAJLQR0zYq/mUK/TANBgkqhkiG9w0BAQUFADCB -lzELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2Ug -Q2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExho -dHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xHzAdBgNVBAMTFlVUTi1VU0VSRmlyc3Qt -SGFyZHdhcmUwHhcNOTkwNzA5MTgxMDQyWhcNMTkwNzA5MTgxOTIyWjCBlzELMAkG -A1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0eTEe -MBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8v -d3d3LnVzZXJ0cnVzdC5jb20xHzAdBgNVBAMTFlVUTi1VU0VSRmlyc3QtSGFyZHdh -cmUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCx98M4P7Sof885glFn -0G2f0v9Y8+efK+wNiVSZuTiZFvfgIXlIwrthdBKWHTxqctU8EGc6Oe0rE81m65UJ -M6Rsl7HoxuzBdXmcRl6Nq9Bq/bkqVRcQVLMZ8Jr28bFdtqdt++BxF2uiiPsA3/4a -MXcMmgF6sTLjKwEHOG7DpV4jvEWbe1DByTCP2+UretNb+zNAHqDVmBe8i4fDidNd -oI6yqqr2jmmIBsX6iSHzCJ1pLgkzmykNRg+MzEk0sGlRvfkGzWitZky8PqxhvQqI -DsjfPe58BEydCl5rkdbux+0ojatNh4lz0G6k0B4WixThdkQDf2Os5M1JnMWS9Ksy -oUhbAgMBAAGjgbkwgbYwCwYDVR0PBAQDAgHGMA8GA1UdEwEB/wQFMAMBAf8wHQYD -VR0OBBYEFKFyXyYbKJhDlV0HN9WFlp1L0sNFMEQGA1UdHwQ9MDswOaA3oDWGM2h0 -dHA6Ly9jcmwudXNlcnRydXN0LmNvbS9VVE4tVVNFUkZpcnN0LUhhcmR3YXJlLmNy -bDAxBgNVHSUEKjAoBggrBgEFBQcDAQYIKwYBBQUHAwUGCCsGAQUFBwMGBggrBgEF -BQcDBzANBgkqhkiG9w0BAQUFAAOCAQEARxkP3nTGmZev/K0oXnWO6y1n7k57K9cM -//bey1WiCuFMVGWTYGufEpytXoMs61quwOQt9ABjHbjAbPLPSbtNk28Gpgoiskli -CE7/yMgUsogWXecB5BKV5UU0s4tpvc+0hY91UZ59Ojg6FEgSxvunOxqNDYJAB+gE -CJChicsZUN/KHAG8HQQZexB2lzvukJDKxA4fFm517zP4029bHpbj4HR3dHuKom4t -3XbWOTCC8KucUvIqx69JXn7HaOWCgchqJ/kniCrVWFCVH/A7HFe7fRQ5YiuayZSS -KqMiDP+JJn1fIytH1xUdqWqeUQ0qUZ6B+dQ7XnASfxAynB67nfhmqA== ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIEZDCCA0ygAwIBAgIQRL4Mi1AAJLQR0zYwS8AzdzANBgkqhkiG9w0BAQUFADCB -ozELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2Ug -Q2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExho -dHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xKzApBgNVBAMTIlVUTi1VU0VSRmlyc3Qt -TmV0d29yayBBcHBsaWNhdGlvbnMwHhcNOTkwNzA5MTg0ODM5WhcNMTkwNzA5MTg1 -NzQ5WjCBozELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0 -IExha2UgQ2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYD -VQQLExhodHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xKzApBgNVBAMTIlVUTi1VU0VS -Rmlyc3QtTmV0d29yayBBcHBsaWNhdGlvbnMwggEiMA0GCSqGSIb3DQEBAQUAA4IB -DwAwggEKAoIBAQCz+5Gh5DZVhawGNFugmliy+LUPBXeDrjKxdpJo7CNKyXY/45y2 -N3kDuatpjQclthln5LAbGHNhSuh+zdMvZOOmfAz6F4CjDUeJT1FxL+78P/m4FoCH -iZMlIJpDgmkkdihZNaEdwH+DBmQWICzTSaSFtMBhf1EI+GgVkYDLpdXuOzr0hARe -YFmnjDRy7rh4xdE7EkpvfmUnuaRVxblvQ6TFHSyZwFKkeEwVs0CYCGtDxgGwenv1 -axwiP8vv/6jQOkt2FZ7S0cYu49tXGzKiuG/ohqY/cKvlcJKrRB5AUPuco2LkbG6g -yN7igEL66S/ozjIEj3yNtxyjNTwV3Z7DrpelAgMBAAGjgZEwgY4wCwYDVR0PBAQD -AgHGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFPqGydvguul49Uuo1hXf8NPh -ahQ8ME8GA1UdHwRIMEYwRKBCoECGPmh0dHA6Ly9jcmwudXNlcnRydXN0LmNvbS9V -VE4tVVNFUkZpcnN0LU5ldHdvcmtBcHBsaWNhdGlvbnMuY3JsMA0GCSqGSIb3DQEB -BQUAA4IBAQCk8yXM0dSRgyLQzDKrm5ZONJFUICU0YV8qAhXhi6r/fWRRzwr/vH3Y -IWp4yy9Rb/hCHTO967V7lMPDqaAt39EpHx3+jz+7qEUqf9FuVSTiuwL7MT++6Lzs -QCv4AdRWOOTKRIK1YSAhZ2X28AvnNPilwpyjXEAfhZOVBt5P1CeptqX8Fs1zMT+4 -ZSfP1FMa8Kxun08FDAOBp4QpxFq9ZFdyrTvPNximmMatBrTcCKME1SmklpoSZ0qM -YEWd8SOasACcaLWYUNPvji6SZbFIPiG+FTAqDbUMo2s/rn9X9R+WfN9v3YIwLGUb -QErNaLly7HF27FSOH4UMAWr6pjisH8SE ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIEZjCCA06gAwIBAgIQRL4Mi1AAJLQR0zYt4LNfGzANBgkqhkiG9w0BAQUFADCB -lTELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2Ug -Q2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExho -dHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xHTAbBgNVBAMTFFVUTi1VU0VSRmlyc3Qt -T2JqZWN0MB4XDTk5MDcwOTE4MzEyMFoXDTE5MDcwOTE4NDAzNlowgZUxCzAJBgNV -BAYTAlVTMQswCQYDVQQIEwJVVDEXMBUGA1UEBxMOU2FsdCBMYWtlIENpdHkxHjAc -BgNVBAoTFVRoZSBVU0VSVFJVU1QgTmV0d29yazEhMB8GA1UECxMYaHR0cDovL3d3 -dy51c2VydHJ1c3QuY29tMR0wGwYDVQQDExRVVE4tVVNFUkZpcnN0LU9iamVjdDCC -ASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAM6qgT+jo2F4qjEAVZURnicP -HxzfOpuCaDDASmEd8S8O+r5596Uj71VRloTN2+O5bj4x2AogZ8f02b+U60cEPgLO -KqJdhwQJ9jCdGIqXsqoc/EHSoTbL+z2RuufZcDX65OeQw5ujm9M89RKZd7G3CeBo -5hy485RjiGpq/gt2yb70IuRnuasaXnfBhQfdDWy/7gbHd2pBnqcP1/vulBe3/IW+ -pKvEHDHd17bR5PDv3xaPslKT16HUiaEHLr/hARJCHhrh2JU022R5KP+6LhHC5ehb -kkj7RwvCbNqtMoNB86XlQXD9ZZBt+vpRxPm9lisZBCzTbafc8H9vg2XiaquHhnUC -AwEAAaOBrzCBrDALBgNVHQ8EBAMCAcYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4E -FgQU2u1kdBScFDyr3ZmpvVsoTYs8ydgwQgYDVR0fBDswOTA3oDWgM4YxaHR0cDov -L2NybC51c2VydHJ1c3QuY29tL1VUTi1VU0VSRmlyc3QtT2JqZWN0LmNybDApBgNV -HSUEIjAgBggrBgEFBQcDAwYIKwYBBQUHAwgGCisGAQQBgjcKAwQwDQYJKoZIhvcN -AQEFBQADggEBAAgfUrE3RHjb/c652pWWmKpVZIC1WkDdIaXFwfNfLEzIR1pp6ujw -NTX00CXzyKakh0q9G7FzCL3Uw8q2NbtZhncxzaeAFK4T7/yxSPlrJSUtUbYsbUXB -mMiKVl0+7kNOPmsnjtA6S4ULX9Ptaqd1y9Fahy85dRNacrACgZ++8A+EVCBibGnU -4U3GDZlDAQ0Slox4nb9QorFEqmrPF3rPbw/U+CRVX/A0FklmPlBGyWNxODFiuGK5 -81OtbLUrohKqGU8J2l7nk8aOFAj+8DCAGKCGhU3IfdeLA/5u1fedFqySLKAj5ZyR -Uh+U3xeUc8OzwcFxBSAAeL0TUh2oPs0AH8g= ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIHqTCCBZGgAwIBAgIQYwaGp8U3ZaVDkKhqWMzUMjANBgkqhkiG9w0BAQUFADCB -jzELMAkGA1UEBhMCTFYxNTAzBgNVBAoTLFZBUyBMYXR2aWphcyBQYXN0cyAtIFZp -ZW4ucmVnLk5yLjQwMDAzMDUyNzkwMSMwIQYDVQQLExpTZXJ0aWZpa2FjaWphcyBw -YWthbHBvanVtaTEkMCIGA1UEAxMbVkFTIExhdHZpamFzIFBhc3RzIFNTSShSQ0Ep -MB4XDTA2MDkxMzA5MjIxMFoXDTI0MDkxMzA5Mjc1N1owgY8xCzAJBgNVBAYTAkxW -MTUwMwYDVQQKEyxWQVMgTGF0dmlqYXMgUGFzdHMgLSBWaWVuLnJlZy5Oci40MDAw -MzA1Mjc5MDEjMCEGA1UECxMaU2VydGlmaWthY2lqYXMgcGFrYWxwb2p1bWkxJDAi -BgNVBAMTG1ZBUyBMYXR2aWphcyBQYXN0cyBTU0koUkNBKTCCAiIwDQYJKoZIhvcN -AQEBBQADggIPADCCAgoCggIBAJu4+f1hVS9PpKUUtS6OuSSPrPuxVD9A/0/F5YZo -e1OT+zWCNahQLpRSoNuDPnXaFXCsCc/ugkmtNkm5tHGLtAChQgbKCApjl7YI/O60 -3Jh4GYLJ+H9kPqrJ/rGN67Bk9bzzxD46kOpOjj8bGbxqg8ORPGxV+wpSwOjhXXeF -M8VJ3+xqv79sN/6OSaIVGM6LjmseOKMwb4iBfnJWRBrEejkP9sSPltSy6wBOXN67 -5zu35iQFk2tN5pFEv+6YG8eFGxFBeyI2p74+6Ho33BjekJ2PzbLXmj/iF39bDOHv -P2Y9biTksM7DDIhslNo4JXxSOeNzFLMARWOaDEJAXgTG93JkzsluM7Pk020klTeT -fvIAXRmLH/NDc6ifRdIGqey0Qrv67gzHTz9RH9Gv0KwYf4eBIv6p3QeWbXz4TtlN -OlBp1UF+xdp02I5z5X6D4cMZgbe9v0COvi6aogyqTgIuuyrhCF0xA8msJ7Cv3NXI -FH1AnVWJIfmQzNTJYEFzq+jN2DpVOQqCmf6b9fU8HJHLwPpGVK4h/CqsXHveepdx -/WxrzUiapNuBfBg3L5B9YZS9F8lctlQWd8oJSqrpvE+UdQFaVryS0o+515feVnQB -9xZxSbH1GEaZQe5i4bMsZXVpKXJDA/ibH/o49J7sQBCOrJfVsDO+nxjcLfdBeFRK -YkTnAgMBAAGjggH9MIIB+TAOBgNVHQ8BAf8EBAMCAQYwGAYIKwYBBQUHAQMEDDAK -MAgGBgQAjkYBATAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBTMw/Vm/3OsOFqW -GyGJuIFMH8teJTAQBgkrBgEEAYI3FQEEAwIBADCCAYkGA1UdIASCAYAwggF8MIIB -eAYLKwYBBAGBxFkBAQIwggFnMIIBOAYIKwYBBQUHAgIwggEqHoIBJgBTAGkAcwAg -AGkAcgAgAHMAZQByAHQAaQBmAGkAawBhAHQAcwAsACAAawBvACAAaQB6AGQAZQB2 -AGkAcwAgAFYAQQBTACAATABhAHQAdgBpAGoAYQBzACAAUABhAHMAdABzACwAIABu -AG8AZAByAG8AcwBpAG4AbwB0ACAAYQB0AGIAaQBsAHMAdABpAGIAdQAgAEUAbABl -AGsAdAByAG8AbgBpAHMAawBvACAAZABvAGsAdQBtAGUAbgB0AHUAIABsAGkAawB1 -AG0AYQBtACAAdQBuACAARQBpAHIAbwBwAGEAcwAgAFAAYQByAGwAYQBtAGUAbgB0 -AGEAIABkAGkAcgBlAGsAdABpAHYAYQBpACAAMQA5ADkAOQAvADkAMwAvAEUASzAp -BggrBgEFBQcCARYdaHR0cDovL3d3dy5lLW1lLmx2L3JlcG9zaXRvcnkwDQYJKoZI -hvcNAQEFBQADggIBAB8oSjWQIWNoCi94r6MegiaXoz8nGdJLo0J6BhNlW8EEy+t9 -fO+U8vGJ9bffUgIhadLqljTloM+XuJxVDhCFoxReLAX4tTp28/l6uN62DCdp8suU -kQsdudWOb5kvzfIZVjk6SFbwAf+Cdbay/dHU9fJjV0xNoX7MELoEae/0FPyzlx9F -7m9KKH/Rxie8x6Opa3vtghNvq94P+3HrXBEaqSzQMJ/8NjdW75XpurcTtq6fAmGt -nuxrBG82nw+Z98LJyEwouSjUIdeeVNXAzvSO5FWUe48kxjj8q3qkVnc9qEXvZJKk -0Ep+u3OL9A1Sc7g6SF5DgNOpcHdi/8coHHMeQ+YnJFtJueY2pI79xS0veqV5EnrX -IbIlbcgPosNhS+VI4le6n/KKId3bZPDaGd/OwJuAOcJ3d2MVU3KE+qSPBzeGIX1Q -+j1qN9uRDjez/c4Lynth0Jx0nH04aG3pex3W8Sq07ztgUncF5gLCX4xbvPB9t3PH -kWuyKrNjozTVq60lcUf/Gj56to2VdsPups0DCWzuRWeYz5lIdsHOinSaaFIBNCLI -7eIUC4S9bhCMsXKbvugI11fVf+q0AT1O5OLoZ+eMfunnQhHvlUbIkda+JxeAGTSY -58bfHvwhX56GPbx+8Jy9cp70R4JbcWfz+txUTKhc2FnH0AcOEzMnvPRp8Gsh ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIEGjCCAwICEQCLW3VWhFSFCwDPrzhIzrGkMA0GCSqGSIb3DQEBBQUAMIHKMQsw -CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZl -cmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWdu -LCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlT -aWduIENsYXNzIDEgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3Jp -dHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQswCQYD -VQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlT -aWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJ -bmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWdu -IENsYXNzIDEgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg -LSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAN2E1Lm0+afY8wR4 -nN493GwTFtl63SRRZsDHJlkNrAYIwpTRMx/wgzUfbhvI3qpuFU5UJ+/EbRrsC+MO -8ESlV8dAWB6jRx9x7GD2bZTIGDnt/kIYVt/kTEkQeE4BdjVjEjbdZrwBBDajVWjV -ojYJrKshJlQGrT/KFOCsyq0GHZXi+J3x4GD/wn91K0zM2v6HmSHquv4+VNfSWXjb -PG7PoBMAGrgnoeS+Z5bKoMWznN3JdZ7rMJpfo83ZrngZPyPpXNspva1VyBtUjGP2 -6KbqxzcSXKMpHgLZ2x87tNcPVkeBFQRKr4Mn0cVYiMHd9qqnoxjaaKptEVHhv2Vr -n5Z20T0CAwEAATANBgkqhkiG9w0BAQUFAAOCAQEAq2aN17O6x5q25lXQBfGfMY1a -qtmqRiYPce2lrVNWYgFHKkTp/j90CxObufRNG7LRX7K20ohcs5/Ny9Sn2WCVhDr4 -wTcdYcrnsMXlkdpUpqwxga6X3s0IrLjAl4B/bnKk52kTlWUfxJM8/XmPBNQ+T+r3 -ns7NZ3xPZQL/kYVUc8f/NveGLezQXk//EZ9yBta4GvFMDSZl4kSAHsef493oCtrs -pSCAaWihT37ha88HQfqDjrw43bAuEbFrskLMmrz5SCJ5ShkPshw+IHTZasO+8ih4 -E1Z5T21Q6huwtVexN2ZYI/PcD98Kh8TvhgXVOBRgmaNL3gaWcSzy27YfpO8/7g== ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIEGTCCAwECEGFwy0mMX5hFKeewptlQW3owDQYJKoZIhvcNAQEFBQAwgcoxCzAJ -BgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjEfMB0GA1UECxMWVmVy -aVNpZ24gVHJ1c3QgTmV0d29yazE6MDgGA1UECxMxKGMpIDE5OTkgVmVyaVNpZ24s -IEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTFFMEMGA1UEAxM8VmVyaVNp -Z24gQ2xhc3MgMiBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0 -eSAtIEczMB4XDTk5MTAwMTAwMDAwMFoXDTM2MDcxNjIzNTk1OVowgcoxCzAJBgNV -BAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjEfMB0GA1UECxMWVmVyaVNp -Z24gVHJ1c3QgTmV0d29yazE6MDgGA1UECxMxKGMpIDE5OTkgVmVyaVNpZ24sIElu -Yy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTFFMEMGA1UEAxM8VmVyaVNpZ24g -Q2xhc3MgMiBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAt -IEczMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArwoNwtUs22e5LeWU -J92lvuCwTY+zYVY81nzD9M0+hsuiiOLh2KRpxbXiv8GmR1BeRjmL1Za6tW8UvxDO -JxOeBUebMXoT2B/Z0wI3i60sR/COgQanDTAM6/c8DyAd3HJG7qUCyFvDyVZpTMUY -wZF7C9UTAJu878NIPkZgIIUq1ZC2zYugzDLdt/1AVbJQHFauzI13TccgTacxdu9o -koqQHgiBVrKtaaNS0MscxCM9H5n+TOgWY47GCI72MfbS+uV23bUckqNJzc0BzWjN -qWm6o+sdDZykIKbBoMXRRkwXbdKsZj+WjOCE1Db/IlnF+RFgqF8EffIa9iVCYQ/E -Srg+iQIDAQABMA0GCSqGSIb3DQEBBQUAA4IBAQA0JhU8wI1NQ0kdvekhktdmnLfe -xbjQ5F1fdiLAJvmEOjr5jLX77GDx6M4EsMjdpwOPMPOY36TmpDHf0xwLRtxyID+u -7gU8pDM/CzmscHhzS5kr3zDCVLCoO1Wh/hYozUK9dG6A2ydEp85EXdQbkJgNHkKU -sQAsBNB0owIFImNjzYO1+8FtYmtpdf1dcEG59b98377BMnMiIYtYgXsVkXq642RI -sH/7NiXaldDxJBQX3RiAa0YjOVT1jmIJBB2UkKab5iXiQkWquJCtvgiPqQtCGJTP -cjnhsUPgKM+351psE2tJs//jGHyJizNdrDPXp/naOlXJWBD5qu9ats9LS98q ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIEGjCCAwICEQCbfgZJoz5iudXukEhxKe9XMA0GCSqGSIb3DQEBBQUAMIHKMQsw -CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZl -cmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWdu -LCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlT -aWduIENsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3Jp -dHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQswCQYD -VQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlT -aWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJ -bmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWdu -IENsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg -LSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMu6nFL8eB8aHm8b -N3O9+MlrlBIwT/A2R/XQkQr1F8ilYcEWQE37imGQ5XYgwREGfassbqb1EUGO+i2t -KmFZpGcmTNDovFJbcCAEWNF6yaRpvIMXZK0Fi7zQWM6NjPXr8EJJC52XJ2cybuGu -kxUccLwgTS8Y3pKI6GyFVxEa6X7jJhFUokWWVYPKMIno3Nij7SqAP395ZVc+FSBm -CC+Vk7+qRy+oRpfwEuL+wgorUeZ25rdGt+INpsyow0xZVYnm6FNcHOqd8GIWC6fJ -Xwzw3sJ2zq/3avL6QaaiMxTJ5Xpj055iN9WFZZ4O5lMkdBteHRJTW8cs54NJOxWu -imi5V5cCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEAERSWwauSCPc/L8my/uRan2Te -2yFPhpk0djZX3dAVL8WtfxUfN2JzPtTnX84XA9s1+ivbrmAJXx5fj267Cz3qWhMe -DGBvtcC1IyIuBwvLqXTLR7sdwdela8wv0kL9Sd2nic9TutoAWii/gt/4uhMdUIaC -/Y4wjylGsB49Ndo4YhYYSq3mtlFs3q9i6wHQHiT+eo8SGhJouPtmmRQURVyu565p -F4ErWjfJXir0xuKhXFSbplQAz/DxwceYMBo7Nhbbo27q/a2ywtrvAkcTisDxszGt -TxzhT5yvDwyd93gN2PQ1VoDat20Xj50egWTh/sVFuq1ruQp6Tk9LhO5L8X3dEQ== ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIE0zCCA7ugAwIBAgIQGNrRniZ96LtKIVjNzGs7SjANBgkqhkiG9w0BAQUFADCB -yjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQL -ExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJp -U2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxW -ZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0 -aG9yaXR5IC0gRzUwHhcNMDYxMTA4MDAwMDAwWhcNMzYwNzE2MjM1OTU5WjCByjEL -MAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZW -ZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJpU2ln -biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJp -U2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9y -aXR5IC0gRzUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvJAgIKXo1 -nmAMqudLO07cfLw8RRy7K+D+KQL5VwijZIUVJ/XxrcgxiV0i6CqqpkKzj/i5Vbex -t0uz/o9+B1fs70PbZmIVYc9gDaTY3vjgw2IIPVQT60nKWVSFJuUrjxuf6/WhkcIz -SdhDY2pSS9KP6HBRTdGJaXvHcPaz3BJ023tdS1bTlr8Vd6Gw9KIl8q8ckmcY5fQG -BO+QueQA5N06tRn/Arr0PO7gi+s3i+z016zy9vA9r911kTMZHRxAy3QkGSGT2RT+ -rCpSx4/VBEnkjWNHiDxpg8v+R70rfk/Fla4OndTRQ8Bnc+MUCH7lP59zuDMKz10/ -NIeWiu5T6CUVAgMBAAGjgbIwga8wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8E -BAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZMFcwVRYJaW1hZ2UvZ2lmMCEwHzAH -BgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7GS4wJRYjaHR0cDovL2xvZ28udmVy -aXNpZ24uY29tL3ZzbG9nby5naWYwHQYDVR0OBBYEFH/TZafC3ey78DAJ80M5+gKv -MzEzMA0GCSqGSIb3DQEBBQUAA4IBAQCTJEowX2LP2BqYLz3q3JktvXf2pXkiOOzE -p6B4Eq1iDkVwZMXnl2YtmAl+X6/WzChl8gGqCBpH3vn5fJJaCGkgDdk+bW48DW7Y -5gaRQBi5+MHt39tBquCWIMnNZBU4gcmU7qKEKQsTb47bDN0lAtukixlE0kF6BWlK -WE9gyn6CagsCqiUXObXbf+eEZSqVir2G3l6BFoMtEMze/aiCKm0oHw0LxOXnGiYZ -4fQRbxC1lfznQgUy286dUV4otp6F01vvpX1FQHKOtw5rDgb7MzVIcbidJ4vEZV8N -hnacRHr2lVz2XTIIM6RUthg/aFzyQkqFOFSDX9HoLPKsEdao7WNq ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIEGjCCAwICEQDsoKeLbnVqAc/EfMwvlF7XMA0GCSqGSIb3DQEBBQUAMIHKMQsw -CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZl -cmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWdu -LCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlT -aWduIENsYXNzIDQgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3Jp -dHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQswCQYD -VQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlT -aWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJ -bmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWdu -IENsYXNzIDQgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg -LSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAK3LpRFpxlmr8Y+1 -GQ9Wzsy1HyDkniYlS+BzZYlZ3tCD5PUPtbut8XzoIfzk6AzufEUiGXaStBO3IFsJ -+mGuqPKljYXCKtbeZjbSmwL0qJJgfJxptI8kHtCGUvYynEFYHiK9zUVilQhu0Gbd -U6LM8BDcVHOLBKFGMzNcF0C5nk3T875Vg+ixiY5afJqWIpA7iCXy0lOIAgwLePLm -NxdLMEYH5IBtptiWLugs+BGzOA1mppvqySNb247i8xOOGlktqgLw7KSHZtzBP/XY -ufTsgsbSPZUd5cBPhMnZo0QoBmrXRazwa2rvTl/4EYIeOGM0ZlDUPpNz+jDDZq3/ -ky2X7wMCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEAj/ola09b5KROJ1WrIhVZPMq1 -CtRK26vdoV9TxaBXOcLORyu+OshWv8LZJxA6sQU8wHcxuzrTBXttmhwwjIDLk5Mq -g6sFUYICABFna/OIYUdfA5PVWw3g8dShMjWFsjrbsIKr0csKvE+MW8VLADsfKoKm -fjaF3H48ZwC15DtS4KjrXRX5xm3wrR0OhbepmnMUWluPQSjA1egtTaRezarZ7c7c -2NU8Qh0XwRJdRTjDOPP8hS6DRkiy1yBfkjaP53kPmF6Z6PDQpLv1U70qzlmwr25/ -bLvSHgCwIe34QWKCudiyxLtGUPMxxY8BqHTr9Xgn2uf3ZkPznoM+IKrDNWCRzg== ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIDojCCAoqgAwIBAgIQE4Y1TR0/BvLB+WUF1ZAcYjANBgkqhkiG9w0BAQUFADBr -MQswCQYDVQQGEwJVUzENMAsGA1UEChMEVklTQTEvMC0GA1UECxMmVmlzYSBJbnRl -cm5hdGlvbmFsIFNlcnZpY2UgQXNzb2NpYXRpb24xHDAaBgNVBAMTE1Zpc2EgZUNv -bW1lcmNlIFJvb3QwHhcNMDIwNjI2MDIxODM2WhcNMjIwNjI0MDAxNjEyWjBrMQsw -CQYDVQQGEwJVUzENMAsGA1UEChMEVklTQTEvMC0GA1UECxMmVmlzYSBJbnRlcm5h -dGlvbmFsIFNlcnZpY2UgQXNzb2NpYXRpb24xHDAaBgNVBAMTE1Zpc2EgZUNvbW1l -cmNlIFJvb3QwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvV95WHm6h -2mCxlCfLF9sHP4CFT8icttD0b0/Pmdjh28JIXDqsOTPHH2qLJj0rNfVIsZHBAk4E -lpF7sDPwsRROEW+1QK8bRaVK7362rPKgH1g/EkZgPI2h4H3PVz4zHvtH8aoVlwdV -ZqW1LS7YgFmypw23RuwhY/81q6UCzyr0TP579ZRdhE2o8mCP2w4lPJ9zcc+U30rq -299yOIzzlr3xF7zSujtFWsan9sYXiwGd/BmoKoMWuDpI/k4+oKsGGelT84ATB+0t -vz8KPFUgOSwsAGl0lUq8ILKpeeUYiZGo3BxN77t+Nwtd/jmliFKMAGzsGHxBvfaL -dXe6YJ2E5/4tAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQD -AgEGMB0GA1UdDgQWBBQVOIMPPyw/cDMezUb+B4wg4NfDtzANBgkqhkiG9w0BAQUF -AAOCAQEAX/FBfXxcCLkr4NWSR/pnXKUTwwMhmytMiUbPWU3J/qVAtmPN3XEolWcR -zCSs00Rsca4BIGsDoo8Ytyk6feUWYFN4PMCvFYP3j1IzJL1kk5fui/fbGKhtcbP3 -LBfQdCVp9/5rPJS+TUtBjE7ic9DjkCJzQ83z7+pzzkWKsKZJ/0x9nXGIxHYdkFsd -7v3M9+79YKWxehZx0RbQfBI8bGmX265fOZpwLwU8GUYEmSA20GBuYQa7FkKMcPcw -++DbZqMAAb3mLNqRX6BGi01qnD093QVG/na/oAo85ADmJ7f/hC3euiInlhBx6yLt -398znM/jra6O1I7mT1GvFpLgXPYHDw== ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIID5TCCAs2gAwIBAgIEOeSXnjANBgkqhkiG9w0BAQUFADCBgjELMAkGA1UEBhMC -VVMxFDASBgNVBAoTC1dlbGxzIEZhcmdvMSwwKgYDVQQLEyNXZWxscyBGYXJnbyBD -ZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEvMC0GA1UEAxMmV2VsbHMgRmFyZ28gUm9v -dCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcNMDAxMDExMTY0MTI4WhcNMjEwMTE0 -MTY0MTI4WjCBgjELMAkGA1UEBhMCVVMxFDASBgNVBAoTC1dlbGxzIEZhcmdvMSww -KgYDVQQLEyNXZWxscyBGYXJnbyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEvMC0G -A1UEAxMmV2VsbHMgRmFyZ28gUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwggEi -MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDVqDM7Jvk0/82bfuUER84A4n13 -5zHCLielTWi5MbqNQ1mXx3Oqfz1cQJ4F5aHiidlMuD+b+Qy0yGIZLEWukR5zcUHE -SxP9cMIlrCL1dQu3U+SlK93OvRw6esP3E48mVJwWa2uv+9iWsWCaSOAlIiR5NM4O -JgALTqv9i86C1y8IcGjBqAr5dE8Hq6T54oN+J3N0Prj5OEL8pahbSCOz6+MlsoCu -ltQKnMJ4msZoGK43YjdeUXWoWGPAUe5AeH6orxqg4bB4nVCMe+ez/I4jsNtlAHCE -AQgAFG5Uhpq6zPk3EPbg3oQtnaSFN9OH4xXQwReQfhkhahKpdv0SAulPIV4XAgMB -AAGjYTBfMA8GA1UdEwEB/wQFMAMBAf8wTAYDVR0gBEUwQzBBBgtghkgBhvt7hwcB -CzAyMDAGCCsGAQUFBwIBFiRodHRwOi8vd3d3LndlbGxzZmFyZ28uY29tL2NlcnRw -b2xpY3kwDQYJKoZIhvcNAQEFBQADggEBANIn3ZwKdyu7IvICtUpKkfnRLb7kuxpo -7w6kAOnu5+/u9vnldKTC2FJYxHT7zmu1Oyl5GFrvm+0fazbuSCUlFLZWohDo7qd/ -0D+j0MNdJu4HzMPBJCGHHt8qElNvQRbn7a6U+oxy+hNH8Dx+rn0ROhPs7fpvcmR7 -nX1/Jv16+yWt6j4pf0zjAFcysLPp7VMX2YuyFA4w6OXVE8Zkr8QA1dhYJPz1j+zx -x32l2w8n0cbyQIjmH/ZhqPRCyLk306m+LFZ4wnKbWV01QIroTmMatukgalHizqSQ -33ZwmVxwQ023tqcZZE6St8WRPH9IFmV7Fv3L/PvZ1dZPIWU7Sn9Ho/s= ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIEMDCCAxigAwIBAgIQUJRs7Bjq1ZxN1ZfvdY+grTANBgkqhkiG9w0BAQUFADCB -gjELMAkGA1UEBhMCVVMxHjAcBgNVBAsTFXd3dy54cmFtcHNlY3VyaXR5LmNvbTEk -MCIGA1UEChMbWFJhbXAgU2VjdXJpdHkgU2VydmljZXMgSW5jMS0wKwYDVQQDEyRY -UmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDQxMTAxMTcx -NDA0WhcNMzUwMTAxMDUzNzE5WjCBgjELMAkGA1UEBhMCVVMxHjAcBgNVBAsTFXd3 -dy54cmFtcHNlY3VyaXR5LmNvbTEkMCIGA1UEChMbWFJhbXAgU2VjdXJpdHkgU2Vy -dmljZXMgSW5jMS0wKwYDVQQDEyRYUmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBB -dXRob3JpdHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCYJB69FbS6 -38eMpSe2OAtp87ZOqCwuIR1cRN8hXX4jdP5efrRKt6atH67gBhbim1vZZ3RrXYCP -KZ2GG9mcDZhtdhAoWORlsH9KmHmf4MMxfoArtYzAQDsRhtDLooY2YKTVMIJt2W7Q -DxIEM5dfT2Fa8OT5kavnHTu86M/0ay00fOJIYRyO82FEzG+gSqmUsE3a56k0enI4 -qEHMPJQRfevIpoy3hsvKMzvZPTeL+3o+hiznc9cKV6xkmxnr9A8ECIqsAxcZZPRa -JSKNNCyy9mgdEm3Tih4U2sSPpuIjhdV6Db1q4Ons7Be7QhtnqiXtRYMh/MHJfNVi -PvryxS3T/dRlAgMBAAGjgZ8wgZwwEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0P -BAQDAgGGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFMZPoj0GY4QJnM5i5ASs -jVy16bYbMDYGA1UdHwQvMC0wK6ApoCeGJWh0dHA6Ly9jcmwueHJhbXBzZWN1cml0 -eS5jb20vWEdDQS5jcmwwEAYJKwYBBAGCNxUBBAMCAQEwDQYJKoZIhvcNAQEFBQAD -ggEBAJEVOQMBG2f7Shz5CmBbodpNl2L5JFMn14JkTpAuw0kbK5rc/Kh4ZzXxHfAR -vbdI4xD2Dd8/0sm2qlWkSLoC295ZLhVbO50WfUfXN+pfTXYSNrsf16GBBEYgoyxt -qZ4Bfj8pzgCT3/3JknOJiWSe5yvkHJEs0rnOfc5vMZnT5r7SHpDwCRR5XCOrTdLa -IR9NmXmd4c8nnxCbHIgNsIpkQTG4DmyQJKSbXHGPurt+HBvbaoAPIbzp26a3QPSy -i6mx5O+aGtA9aZnuqCij4Tyz8LIRnM98QObd50N9otg6tamN8jSZxNQQ4Qb9CYQQ -O+7ETPTsJ3xCwnR8gooJybQDJbw= ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIEQTCCAymgAwIBAgIBATALBgkqhkiG9w0BAQUwgdMxEzARBgNVBAMMCmFwcGlu -Zi5jb20xNjA0BgNVBAoMLUFwcGxpZWQgSW5mb3JtYXRpY3MgU29mdHdhcmUgRW5n -aW5lZXJpbmcgR21iSDEUMBIGA1UECwwLRGV2ZWxvcG1lbnQxEjAQBgNVBAgMCUNh -cmludGhpYTELMAkGA1UEBgwCQVQxHjAcBgNVBAcMFVN0LiBKYWtvYiBpbSBSb3Nl -bnRhbDEtMCsGCSqGSIb3DQEJAQweZ3VlbnRlci5vYmlsdHNjaG5pZ0BhcHBpbmYu -Y29tMB4XDTA5MDIyMzEzNDAzNVoXDTExMTEyMDEzNDAzNVowgdMxEzARBgNVBAMM -CmFwcGluZi5jb20xNjA0BgNVBAoMLUFwcGxpZWQgSW5mb3JtYXRpY3MgU29mdHdh -cmUgRW5naW5lZXJpbmcgR21iSDEUMBIGA1UECwwLRGV2ZWxvcG1lbnQxEjAQBgNV -BAgMCUNhcmludGhpYTELMAkGA1UEBgwCQVQxHjAcBgNVBAcMFVN0LiBKYWtvYiBp -bSBSb3NlbnRhbDEtMCsGCSqGSIb3DQEJAQweZ3VlbnRlci5vYmlsdHNjaG5pZ0Bh -cHBpbmYuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAx8mI/DXh -dwvwt/qMD5Mm+1ataiRJzau0ct07kyFv0hTYGJR7sl4ocC+lLqLOgOxeG0IaIKvP -Apqq7KQ1ZJBtpZAAwj8NwMXg8fGYM0JtpkGYmkRGmFolwFWA0FLVmGxAuw2iKN6k -ajl8U4pz5qzYFEKNL5IJMI8rS2Fsek1pgfpZ5dYFChgVW7urxFhAJCXMrHAOLfed -SjXtZpvepXRvBtuvOosXSIjmY9x/3/1QeRvZpza2atWRv4pnKBldtI9BZDUQqS3F -fi/ydXlZVeY3aHW6Cw9DfbnnLv2RegUzjUZCx07IrPulZmqS6rabIIwY/bhX+n7y -YcP4ADkXDKct6QIDAQABoyAwHjAPBgNVHRMBAf8EBTADAQH/MAsGA1UdDwQEAwIC -hDANBgkqhkiG9w0BAQUFAAOCAQEAAfoSQow7qv3C9SiOZ+h3s9reQBJnZUcSQ5AS -90jGmtmcJ1eyWQyGxES0iKYPcF1GbSBkO/kqMzdM/E2GQnbHVrgiPj+9tTxjG/hK -42K2AEACDYtuQWTui4K1BmrWRJvdoiGRrt87DhmOG6UY5wtUAZdgVjhwBGEWJhYp -IgeNe5OEdrBkSBjYb2VnJOJFQA7bB7G4snTjNMY+n5+odISHU3debZLdXvX3gKVG -nVwp91/LnCSCvvZ+nH9xLzNdTbXqhI96bJh/iXLNcwcHOWPYWKuANAs5FR7OSZ+l -57gz8/BTaM4pTyJzER5p0+cTIzLGF7aYLuKKqXiKykjruO3U7A== ------END CERTIFICATE----- diff --git a/contrib/libpoco/NetSSL_OpenSSL/samples/download/src/download.cpp b/contrib/libpoco/NetSSL_OpenSSL/samples/download/src/download.cpp deleted file mode 100644 index a543fb04737..00000000000 --- a/contrib/libpoco/NetSSL_OpenSSL/samples/download/src/download.cpp +++ /dev/null @@ -1,97 +0,0 @@ -// -// download.cpp -// -// $Id: //poco/1.4/NetSSL_OpenSSL/samples/download/src/download.cpp#1 $ -// -// This sample demonstrates the URIStreamOpener class. -// -// Copyright (c) 2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "Poco/URIStreamOpener.h" -#include "Poco/StreamCopier.h" -#include "Poco/Path.h" -#include "Poco/URI.h" -#include "Poco/SharedPtr.h" -#include "Poco/Exception.h" -#include "Poco/Net/HTTPStreamFactory.h" -#include "Poco/Net/HTTPSStreamFactory.h" -#include "Poco/Net/FTPStreamFactory.h" -#include "Poco/Net/SSLManager.h" -#include "Poco/Net/KeyConsoleHandler.h" -#include "Poco/Net/ConsoleCertificateHandler.h" -#include -#include - - -using Poco::URIStreamOpener; -using Poco::StreamCopier; -using Poco::Path; -using Poco::URI; -using Poco::SharedPtr; -using Poco::Exception; -using Poco::Net::HTTPStreamFactory; -using Poco::Net::HTTPSStreamFactory; -using Poco::Net::FTPStreamFactory; -using Poco::Net::SSLManager; -using Poco::Net::Context; -using Poco::Net::KeyConsoleHandler; -using Poco::Net::PrivateKeyPassphraseHandler; -using Poco::Net::InvalidCertificateHandler; -using Poco::Net::ConsoleCertificateHandler; - - -class SSLInitializer -{ -public: - SSLInitializer() - { - Poco::Net::initializeSSL(); - } - - ~SSLInitializer() - { - Poco::Net::uninitializeSSL(); - } -}; - - -int main(int argc, char** argv) -{ - SSLInitializer sslInitializer; - HTTPStreamFactory::registerFactory(); - HTTPSStreamFactory::registerFactory(); - FTPStreamFactory::registerFactory(); - - if (argc != 2) - { - Path p(argv[0]); - std::cerr << "usage: " << p.getBaseName() << " " << std::endl; - std::cerr << " Download to standard output." << std::endl; - std::cerr << " Works with http, https, ftp and file URIs." << std::endl; - return 1; - } - - // Note: we must create the passphrase handler prior Context - SharedPtr ptrCert = new ConsoleCertificateHandler(false); // ask the user via console - Context::Ptr ptrContext = new Context(Context::CLIENT_USE, "", "", "rootcert.pem", Context::VERIFY_RELAXED, 9, false, "ALL:!ADH:!LOW:!EXP:!MD5:@STRENGTH"); - SSLManager::instance().initializeClient(0, ptrCert, ptrContext); - - try - { - URI uri(argv[1]); - std::unique_ptr pStr(URIStreamOpener::defaultOpener().open(uri)); - StreamCopier::copyStream(*pStr.get(), std::cout); - } - catch (Exception& exc) - { - std::cerr << exc.displayText() << std::endl; - return 1; - } - - return 0; -} diff --git a/contrib/libpoco/NetSSL_OpenSSL/src/AcceptCertificateHandler.cpp b/contrib/libpoco/NetSSL_OpenSSL/src/AcceptCertificateHandler.cpp deleted file mode 100644 index 5ace06d8e15..00000000000 --- a/contrib/libpoco/NetSSL_OpenSSL/src/AcceptCertificateHandler.cpp +++ /dev/null @@ -1,40 +0,0 @@ -// -// AcceptCertificateHandler.cpp -// -// $Id: //poco/1.4/NetSSL_OpenSSL/src/AcceptCertificateHandler.cpp#1 $ -// -// Library: NetSSL_OpenSSL -// Package: SSLCore -// Module: AcceptCertificateHandler -// -// Copyright (c) 2006-2009, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "Poco/Net/AcceptCertificateHandler.h" - - -namespace Poco { -namespace Net { - - -AcceptCertificateHandler::AcceptCertificateHandler(bool server): InvalidCertificateHandler(server) -{ -} - - -AcceptCertificateHandler::~AcceptCertificateHandler() -{ -} - - -void AcceptCertificateHandler::onInvalidCertificate(const void*, VerificationErrorArgs& errorCert) -{ - errorCert.setIgnoreError(true); -} - - -} } // namespace Poco::Net diff --git a/contrib/libpoco/NetSSL_OpenSSL/src/CertificateHandlerFactory.cpp b/contrib/libpoco/NetSSL_OpenSSL/src/CertificateHandlerFactory.cpp deleted file mode 100644 index d9969a2ab41..00000000000 --- a/contrib/libpoco/NetSSL_OpenSSL/src/CertificateHandlerFactory.cpp +++ /dev/null @@ -1,46 +0,0 @@ -// -// CertificateHandlerFactory.cpp -// -// $Id: //poco/1.4/NetSSL_OpenSSL/src/CertificateHandlerFactory.cpp#1 $ -// -// Library: NetSSL_OpenSSL -// Package: SSLCore -// Module: CertificateHandlerFactory -// -// Copyright (c) 2006-2009, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "Poco/Net/CertificateHandlerFactory.h" -#include "Poco/Net/SSLManager.h" - - -namespace Poco { -namespace Net { - - -CertificateHandlerFactory::CertificateHandlerFactory() -{ -} - - -CertificateHandlerFactory::~CertificateHandlerFactory() -{ -} - - -CertificateHandlerFactoryRegistrar::CertificateHandlerFactoryRegistrar(const std::string& name, CertificateHandlerFactory* pFactory) -{ - SSLManager::instance().certificateHandlerFactoryMgr().setFactory(name, pFactory); -} - - -CertificateHandlerFactoryRegistrar::~CertificateHandlerFactoryRegistrar() -{ -} - - -} } // namespace Poco::Net diff --git a/contrib/libpoco/NetSSL_OpenSSL/src/CertificateHandlerFactoryMgr.cpp b/contrib/libpoco/NetSSL_OpenSSL/src/CertificateHandlerFactoryMgr.cpp deleted file mode 100644 index aa8d0ce47cb..00000000000 --- a/contrib/libpoco/NetSSL_OpenSSL/src/CertificateHandlerFactoryMgr.cpp +++ /dev/null @@ -1,71 +0,0 @@ -// -// CertificateHandlerFactoryMgr.cpp -// -// $Id: //poco/1.4/NetSSL_OpenSSL/src/CertificateHandlerFactoryMgr.cpp#1 $ -// -// Library: NetSSL_OpenSSL -// Package: SSLCore -// Module: CertificateHandlerFactoryMgr -// -// Copyright (c) 2006-2009, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "Poco/Net/CertificateHandlerFactoryMgr.h" -#include "Poco/Net/ConsoleCertificateHandler.h" -#include "Poco/Net/AcceptCertificateHandler.h" -#include "Poco/Net/RejectCertificateHandler.h" - - -namespace Poco { -namespace Net { - - -CertificateHandlerFactoryMgr::CertificateHandlerFactoryMgr() -{ - setFactory("ConsoleCertificateHandler", new CertificateHandlerFactoryImpl()); - setFactory("AcceptCertificateHandler", new CertificateHandlerFactoryImpl()); - setFactory("RejectCertificateHandler", new CertificateHandlerFactoryImpl()); -} - - -CertificateHandlerFactoryMgr::~CertificateHandlerFactoryMgr() -{ -} - - -void CertificateHandlerFactoryMgr::setFactory(const std::string& name, CertificateHandlerFactory* pFactory) -{ - bool success = _factories.insert(make_pair(name, Poco::SharedPtr(pFactory))).second; - if (!success) - delete pFactory; - poco_assert(success); -} - - -bool CertificateHandlerFactoryMgr::hasFactory(const std::string& name) const -{ - return _factories.find(name) != _factories.end(); -} - - -const CertificateHandlerFactory* CertificateHandlerFactoryMgr::getFactory(const std::string& name) const -{ - FactoriesMap::const_iterator it = _factories.find(name); - if (it != _factories.end()) - return it->second; - else - return 0; -} - - -void CertificateHandlerFactoryMgr::removeFactory(const std::string& name) -{ - _factories.erase(name); -} - - -} } // namespace Poco::Net diff --git a/contrib/libpoco/NetSSL_OpenSSL/src/ConsoleCertificateHandler.cpp b/contrib/libpoco/NetSSL_OpenSSL/src/ConsoleCertificateHandler.cpp deleted file mode 100644 index 40cf8ce8b43..00000000000 --- a/contrib/libpoco/NetSSL_OpenSSL/src/ConsoleCertificateHandler.cpp +++ /dev/null @@ -1,55 +0,0 @@ -// -// ConsoleCertificateHandler.cpp -// -// $Id: //poco/1.4/NetSSL_OpenSSL/src/ConsoleCertificateHandler.cpp#1 $ -// -// Library: NetSSL_OpenSSL -// Package: SSLCore -// Module: ConsoleCertificateHandler -// -// Copyright (c) 2006-2009, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "Poco/Net/ConsoleCertificateHandler.h" -#include - - -namespace Poco { -namespace Net { - - -ConsoleCertificateHandler::ConsoleCertificateHandler(bool server): InvalidCertificateHandler(server) -{ -} - - -ConsoleCertificateHandler::~ConsoleCertificateHandler() -{ -} - - -void ConsoleCertificateHandler::onInvalidCertificate(const void*, VerificationErrorArgs& errorCert) -{ - const X509Certificate& aCert = errorCert.certificate(); - std::cout << "\n"; - std::cout << "WARNING: Certificate verification failed\n"; - std::cout << "----------------------------------------\n"; - std::cout << "Issuer Name: " << aCert.issuerName() << "\n"; - std::cout << "Subject Name: " << aCert.subjectName() << "\n\n"; - std::cout << "The certificate yielded the error: " << errorCert.errorMessage() << "\n\n"; - std::cout << "The error occurred in the certificate chain at position " << errorCert.errorDepth() << "\n"; - std::cout << "Accept the certificate (y,n)? "; - char c; - std::cin >> c; - if (c == 'y' || c == 'Y') - errorCert.setIgnoreError(true); - else - errorCert.setIgnoreError(false); -} - - -} } // namespace Poco::Net diff --git a/contrib/libpoco/NetSSL_OpenSSL/src/Context.cpp b/contrib/libpoco/NetSSL_OpenSSL/src/Context.cpp deleted file mode 100644 index 89b2b426156..00000000000 --- a/contrib/libpoco/NetSSL_OpenSSL/src/Context.cpp +++ /dev/null @@ -1,374 +0,0 @@ -// -// Context.cpp -// -// $Id: //poco/1.4/NetSSL_OpenSSL/src/Context.cpp#2 $ -// -// Library: NetSSL_OpenSSL -// Package: SSLCore -// Module: Context -// -// Copyright (c) 2006-2010, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "Poco/Net/Context.h" -#include "Poco/Net/SSLManager.h" -#include "Poco/Net/SSLException.h" -#include "Poco/Net/Utility.h" -#include "Poco/Crypto/OpenSSLInitializer.h" -#include "Poco/File.h" -#include "Poco/Path.h" -#include "Poco/Timestamp.h" -#include -#include -#include -#include - - -namespace Poco { -namespace Net { - - -Context::Context( - Usage usage, - const std::string& privateKeyFile, - const std::string& certificateFile, - const std::string& caLocation, - VerificationMode verificationMode, - int verificationDepth, - bool loadDefaultCAs, - const std::string& cipherList): - _usage(usage), - _mode(verificationMode), - _pSSLContext(0), - _extendedCertificateVerification(true) -{ - Poco::Crypto::OpenSSLInitializer::initialize(); - - createSSLContext(); - - try - { - int errCode = 0; - if (!caLocation.empty()) - { - Poco::File aFile(caLocation); - if (aFile.isDirectory()) - errCode = SSL_CTX_load_verify_locations(_pSSLContext, 0, Poco::Path::transcode(caLocation).c_str()); - else - errCode = SSL_CTX_load_verify_locations(_pSSLContext, Poco::Path::transcode(caLocation).c_str(), 0); - if (errCode != 1) - { - std::string msg = Utility::getLastError(); - throw SSLContextException(std::string("Cannot load CA file/directory at ") + caLocation, msg); - } - } - - if (loadDefaultCAs) - { - errCode = SSL_CTX_set_default_verify_paths(_pSSLContext); - if (errCode != 1) - { - std::string msg = Utility::getLastError(); - throw SSLContextException("Cannot load default CA certificates", msg); - } - } - - if (!privateKeyFile.empty()) - { - errCode = SSL_CTX_use_PrivateKey_file(_pSSLContext, Poco::Path::transcode(privateKeyFile).c_str(), SSL_FILETYPE_PEM); - if (errCode != 1) - { - std::string msg = Utility::getLastError(); - throw SSLContextException(std::string("Error loading private key from file ") + privateKeyFile, msg); - } - } - - if (!certificateFile.empty()) - { - errCode = SSL_CTX_use_certificate_chain_file(_pSSLContext, Poco::Path::transcode(certificateFile).c_str()); - if (errCode != 1) - { - std::string errMsg = Utility::getLastError(); - throw SSLContextException(std::string("Error loading certificate from file ") + certificateFile, errMsg); - } - } - - if (isForServerUse()) - SSL_CTX_set_verify(_pSSLContext, verificationMode, &SSLManager::verifyServerCallback); - else - SSL_CTX_set_verify(_pSSLContext, verificationMode, &SSLManager::verifyClientCallback); - - SSL_CTX_set_cipher_list(_pSSLContext, cipherList.c_str()); - SSL_CTX_set_verify_depth(_pSSLContext, verificationDepth); - SSL_CTX_set_mode(_pSSLContext, SSL_MODE_AUTO_RETRY); - SSL_CTX_set_session_cache_mode(_pSSLContext, SSL_SESS_CACHE_OFF); - } - catch (...) - { - SSL_CTX_free(_pSSLContext); - throw; - } -} - - -Context::Context( - Usage usage, - const std::string& caLocation, - VerificationMode verificationMode, - int verificationDepth, - bool loadDefaultCAs, - const std::string& cipherList): - _usage(usage), - _mode(verificationMode), - _pSSLContext(0), - _extendedCertificateVerification(true) -{ - Poco::Crypto::OpenSSLInitializer::initialize(); - - createSSLContext(); - - try - { - int errCode = 0; - if (!caLocation.empty()) - { - Poco::File aFile(caLocation); - if (aFile.isDirectory()) - errCode = SSL_CTX_load_verify_locations(_pSSLContext, 0, Poco::Path::transcode(caLocation).c_str()); - else - errCode = SSL_CTX_load_verify_locations(_pSSLContext, Poco::Path::transcode(caLocation).c_str(), 0); - if (errCode != 1) - { - std::string msg = Utility::getLastError(); - throw SSLContextException(std::string("Cannot load CA file/directory at ") + caLocation, msg); - } - } - - if (loadDefaultCAs) - { - errCode = SSL_CTX_set_default_verify_paths(_pSSLContext); - if (errCode != 1) - { - std::string msg = Utility::getLastError(); - throw SSLContextException("Cannot load default CA certificates", msg); - } - } - - if (isForServerUse()) - SSL_CTX_set_verify(_pSSLContext, verificationMode, &SSLManager::verifyServerCallback); - else - SSL_CTX_set_verify(_pSSLContext, verificationMode, &SSLManager::verifyClientCallback); - - SSL_CTX_set_cipher_list(_pSSLContext, cipherList.c_str()); - SSL_CTX_set_verify_depth(_pSSLContext, verificationDepth); - SSL_CTX_set_mode(_pSSLContext, SSL_MODE_AUTO_RETRY); - SSL_CTX_set_session_cache_mode(_pSSLContext, SSL_SESS_CACHE_OFF); - } - catch (...) - { - SSL_CTX_free(_pSSLContext); - throw; - } -} - - -Context::~Context() -{ - try - { - SSL_CTX_free(_pSSLContext); - Poco::Crypto::OpenSSLInitializer::uninitialize(); - } - catch (...) - { - poco_unexpected(); - } -} - - -void Context::useCertificate(const Poco::Crypto::X509Certificate& certificate) -{ - int errCode = SSL_CTX_use_certificate(_pSSLContext, const_cast(certificate.certificate())); - if (errCode != 1) - { - std::string msg = Utility::getLastError(); - throw SSLContextException("Cannot set certificate for Context", msg); - } -} - - -void Context::addChainCertificate(const Poco::Crypto::X509Certificate& certificate) -{ - int errCode = SSL_CTX_add_extra_chain_cert(_pSSLContext, certificate.certificate()); - if (errCode != 1) - { - std::string msg = Utility::getLastError(); - throw SSLContextException("Cannot add chain certificate to Context", msg); - } -} - - -void Context::usePrivateKey(const Poco::Crypto::RSAKey& key) -{ - int errCode = SSL_CTX_use_RSAPrivateKey(_pSSLContext, key.impl()->getRSA()); - if (errCode != 1) - { - std::string msg = Utility::getLastError(); - throw SSLContextException("Cannot set private key for Context", msg); - } -} - - -void Context::enableSessionCache(bool flag) -{ - if (flag) - { - SSL_CTX_set_session_cache_mode(_pSSLContext, isForServerUse() ? SSL_SESS_CACHE_SERVER : SSL_SESS_CACHE_CLIENT); - } - else - { - SSL_CTX_set_session_cache_mode(_pSSLContext, SSL_SESS_CACHE_OFF); - } -} - - -void Context::enableSessionCache(bool flag, const std::string& sessionIdContext) -{ - poco_assert (isForServerUse()); - - if (flag) - { - SSL_CTX_set_session_cache_mode(_pSSLContext, SSL_SESS_CACHE_SERVER); - } - else - { - SSL_CTX_set_session_cache_mode(_pSSLContext, SSL_SESS_CACHE_OFF); - } - - unsigned length = static_cast(sessionIdContext.length()); - if (length > SSL_MAX_SSL_SESSION_ID_LENGTH) length = SSL_MAX_SSL_SESSION_ID_LENGTH; - int rc = SSL_CTX_set_session_id_context(_pSSLContext, reinterpret_cast(sessionIdContext.data()), length); - if (rc != 1) throw SSLContextException("cannot set session ID context"); -} - - -bool Context::sessionCacheEnabled() const -{ - return SSL_CTX_get_session_cache_mode(_pSSLContext) != SSL_SESS_CACHE_OFF; -} - - -void Context::setSessionCacheSize(std::size_t size) -{ - poco_assert (isForServerUse()); - - SSL_CTX_sess_set_cache_size(_pSSLContext, static_cast(size)); -} - - -std::size_t Context::getSessionCacheSize() const -{ - poco_assert (isForServerUse()); - - return static_cast(SSL_CTX_sess_get_cache_size(_pSSLContext)); -} - - -void Context::setSessionTimeout(long seconds) -{ - poco_assert (isForServerUse()); - - SSL_CTX_set_timeout(_pSSLContext, seconds); -} - - -long Context::getSessionTimeout() const -{ - poco_assert (isForServerUse()); - - return SSL_CTX_get_timeout(_pSSLContext); -} - - -void Context::flushSessionCache() -{ - poco_assert (isForServerUse()); - - Poco::Timestamp now; - SSL_CTX_flush_sessions(_pSSLContext, static_cast(now.epochTime())); -} - - -void Context::enableExtendedCertificateVerification(bool flag) -{ - _extendedCertificateVerification = flag; -} - - -void Context::disableStatelessSessionResumption() -{ -#if defined(SSL_OP_NO_TICKET) - SSL_CTX_set_options(_pSSLContext, SSL_OP_NO_TICKET); -#endif -} - - -void Context::createSSLContext() -{ - if (SSLManager::isFIPSEnabled()) - { - _pSSLContext = SSL_CTX_new(TLSv1_method()); - } - else - { - switch (_usage) - { - case CLIENT_USE: - _pSSLContext = SSL_CTX_new(SSLv23_client_method()); - break; - case SERVER_USE: - _pSSLContext = SSL_CTX_new(SSLv23_server_method()); - break; - case TLSV1_CLIENT_USE: - _pSSLContext = SSL_CTX_new(TLSv1_client_method()); - break; - case TLSV1_SERVER_USE: - _pSSLContext = SSL_CTX_new(TLSv1_server_method()); - break; -#if OPENSSL_VERSION_NUMBER >= 0x10000000L - case TLSV1_1_CLIENT_USE: - _pSSLContext = SSL_CTX_new(TLSv1_1_client_method()); - break; - case TLSV1_1_SERVER_USE: - _pSSLContext = SSL_CTX_new(TLSv1_1_server_method()); - break; -#endif -#if OPENSSL_VERSION_NUMBER >= 0x10001000L - case TLSV1_2_CLIENT_USE: - _pSSLContext = SSL_CTX_new(TLSv1_2_client_method()); - break; - case TLSV1_2_SERVER_USE: - _pSSLContext = SSL_CTX_new(TLSv1_2_server_method()); - break; -#endif - default: - throw Poco::InvalidArgumentException("Invalid or unsupported usage"); - } - } - if (!_pSSLContext) - { - unsigned long err = ERR_get_error(); - throw SSLException("Cannot create SSL_CTX object", ERR_error_string(err, 0)); - } - - SSL_CTX_set_default_passwd_cb(_pSSLContext, &SSLManager::privateKeyPassphraseCallback); - Utility::clearErrorStack(); - SSL_CTX_set_options(_pSSLContext, SSL_OP_ALL); -} - - -} } // namespace Poco::Net diff --git a/contrib/libpoco/NetSSL_OpenSSL/src/HTTPSClientSession.cpp b/contrib/libpoco/NetSSL_OpenSSL/src/HTTPSClientSession.cpp deleted file mode 100644 index d338981d1b0..00000000000 --- a/contrib/libpoco/NetSSL_OpenSSL/src/HTTPSClientSession.cpp +++ /dev/null @@ -1,193 +0,0 @@ -// -// HTTPSClientSession.cpp -// -// $Id: //poco/1.4/NetSSL_OpenSSL/src/HTTPSClientSession.cpp#4 $ -// -// Library: NetSSL_OpenSSL -// Package: HTTPSClient -// Module: HTTPSClientSession -// -// Copyright (c) 2006-2010, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "Poco/Net/HTTPSClientSession.h" -#include "Poco/Net/SecureStreamSocket.h" -#include "Poco/Net/SecureStreamSocketImpl.h" -#include "Poco/Net/SSLManager.h" -#include "Poco/Net/SSLException.h" -#include "Poco/Net/HTTPRequest.h" -#include "Poco/Net/HTTPResponse.h" -#include "Poco/Net/NetException.h" -#include "Poco/NumberFormatter.h" - - -using Poco::NumberFormatter; -using Poco::IllegalStateException; - - -namespace Poco { -namespace Net { - - -HTTPSClientSession::HTTPSClientSession(): - HTTPClientSession(SecureStreamSocket()), - _pContext(SSLManager::instance().defaultClientContext()) -{ - setPort(HTTPS_PORT); -} - - -HTTPSClientSession::HTTPSClientSession(const SecureStreamSocket& socket): - HTTPClientSession(socket), - _pContext(socket.context()) -{ - setPort(HTTPS_PORT); -} - - -HTTPSClientSession::HTTPSClientSession(const SecureStreamSocket& socket, Session::Ptr pSession): - HTTPClientSession(socket), - _pContext(socket.context()), - _pSession(pSession) -{ - setPort(HTTPS_PORT); -} - - -HTTPSClientSession::HTTPSClientSession(const std::string& host, Poco::UInt16 port): - HTTPClientSession(SecureStreamSocket()), - _pContext(SSLManager::instance().defaultClientContext()) -{ - setHost(host); - setPort(port); - SecureStreamSocket sss(socket()); - sss.setPeerHostName(host); -} - - -HTTPSClientSession::HTTPSClientSession(Context::Ptr pContext): - HTTPClientSession(SecureStreamSocket(pContext)), - _pContext(pContext) -{ -} - - -HTTPSClientSession::HTTPSClientSession(Context::Ptr pContext, Session::Ptr pSession): - HTTPClientSession(SecureStreamSocket(pContext, pSession)), - _pContext(pContext), - _pSession(pSession) -{ -} - - -HTTPSClientSession::HTTPSClientSession(const std::string& host, Poco::UInt16 port, Context::Ptr pContext): - HTTPClientSession(SecureStreamSocket(pContext)), - _pContext(pContext) -{ - setHost(host); - setPort(port); - SecureStreamSocket sss(socket()); - sss.setPeerHostName(host); -} - - -HTTPSClientSession::HTTPSClientSession(const std::string& host, Poco::UInt16 port, Context::Ptr pContext, Session::Ptr pSession): - HTTPClientSession(SecureStreamSocket(pContext, pSession)), - _pContext(pContext), - _pSession(pSession) -{ - setHost(host); - setPort(port); - SecureStreamSocket sss(socket()); - sss.setPeerHostName(host); -} - - -HTTPSClientSession::~HTTPSClientSession() -{ -} - - -bool HTTPSClientSession::secure() const -{ - return true; -} - - -void HTTPSClientSession::abort() -{ - SecureStreamSocket sss(socket()); - sss.abort(); -} - - -X509Certificate HTTPSClientSession::serverCertificate() -{ - SecureStreamSocket sss(socket()); - return sss.peerCertificate(); -} - - -std::string HTTPSClientSession::proxyRequestPrefix() const -{ - return std::string(); -} - - -void HTTPSClientSession::proxyAuthenticate(HTTPRequest& request) -{ -} - - -void HTTPSClientSession::connect(const SocketAddress& address) -{ - if (getProxyHost().empty() || bypassProxy()) - { - SecureStreamSocket sss(socket()); - if (_pContext->sessionCacheEnabled()) - { - sss.useSession(_pSession); - } - HTTPSession::connect(address); - if (_pContext->sessionCacheEnabled()) - { - _pSession = sss.currentSession(); - } - } - else - { - StreamSocket proxySocket(proxyConnect()); - SecureStreamSocket secureSocket = SecureStreamSocket::attach(proxySocket, getHost(), _pContext, _pSession); - attachSocket(secureSocket); - if (_pContext->sessionCacheEnabled()) - { - _pSession = secureSocket.currentSession(); - } - } -} - - -int HTTPSClientSession::read(char* buffer, std::streamsize length) -{ - try - { - return HTTPSession::read(buffer, length); - } - catch(SSLConnectionUnexpectedlyClosedException&) - { - return 0; - } -} - - -Session::Ptr HTTPSClientSession::sslSession() -{ - return _pSession; -} - - -} } // namespace Poco::Net diff --git a/contrib/libpoco/NetSSL_OpenSSL/src/HTTPSSessionInstantiator.cpp b/contrib/libpoco/NetSSL_OpenSSL/src/HTTPSSessionInstantiator.cpp deleted file mode 100644 index 4131e408682..00000000000 --- a/contrib/libpoco/NetSSL_OpenSSL/src/HTTPSSessionInstantiator.cpp +++ /dev/null @@ -1,70 +0,0 @@ -// -// HTTPSSessionInstantiator.cpp -// -// $Id: //poco/1.4/NetSSL_OpenSSL/src/HTTPSSessionInstantiator.cpp#2 $ -// -// Library: NetSSL_OpenSSL -// Package: HTTPSClient -// Module: HTTPSSessionInstantiator -// -// Copyright (c) 2006-2009, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "Poco/Net/HTTPSSessionInstantiator.h" -#include "Poco/Net/HTTPSessionFactory.h" -#include "Poco/Net/HTTPSClientSession.h" - - -namespace Poco { -namespace Net { - - -HTTPSSessionInstantiator::HTTPSSessionInstantiator() -{ -} - - -HTTPSSessionInstantiator::HTTPSSessionInstantiator(Context::Ptr pContext) : - _pContext(pContext) -{ -} - - -HTTPSSessionInstantiator::~HTTPSSessionInstantiator() -{ -} - - -HTTPClientSession* HTTPSSessionInstantiator::createClientSession(const Poco::URI& uri) -{ - poco_assert (uri.getScheme() == "https"); - HTTPSClientSession* pSession = _pContext.isNull() ? new HTTPSClientSession(uri.getHost(), uri.getPort()) : new HTTPSClientSession(uri.getHost(), uri.getPort(), _pContext); - pSession->setProxy(proxyHost(), proxyPort()); - pSession->setProxyCredentials(proxyUsername(), proxyPassword()); - return pSession; -} - - -void HTTPSSessionInstantiator::registerInstantiator() -{ - HTTPSessionFactory::defaultFactory().registerProtocol("https", new HTTPSSessionInstantiator); -} - - -void HTTPSSessionInstantiator::registerInstantiator(Context::Ptr context) -{ - HTTPSessionFactory::defaultFactory().registerProtocol("https", new HTTPSSessionInstantiator(context)); -} - - -void HTTPSSessionInstantiator::unregisterInstantiator() -{ - HTTPSessionFactory::defaultFactory().unregisterProtocol("https"); -} - - -} } // namespace Poco::Net diff --git a/contrib/libpoco/NetSSL_OpenSSL/src/HTTPSStreamFactory.cpp b/contrib/libpoco/NetSSL_OpenSSL/src/HTTPSStreamFactory.cpp deleted file mode 100644 index 37c3a47beab..00000000000 --- a/contrib/libpoco/NetSSL_OpenSSL/src/HTTPSStreamFactory.cpp +++ /dev/null @@ -1,187 +0,0 @@ -// -// HTTPSStreamFactory.cpp -// -// $Id: //poco/1.4/NetSSL_OpenSSL/src/HTTPSStreamFactory.cpp#2 $ -// -// Library: NetSSL_OpenSSL -// Package: HTTPSClient -// Module: HTTPSStreamFactory -// -// Copyright (c) 2006-2012, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "Poco/Net/HTTPSStreamFactory.h" -#include "Poco/Net/HTTPSClientSession.h" -#include "Poco/Net/HTTPIOStream.h" -#include "Poco/Net/HTTPRequest.h" -#include "Poco/Net/HTTPResponse.h" -#include "Poco/Net/HTTPCredentials.h" -#include "Poco/Net/NetException.h" -#include "Poco/URI.h" -#include "Poco/URIStreamOpener.h" -#include "Poco/UnbufferedStreamBuf.h" -#include "Poco/NullStream.h" -#include "Poco/StreamCopier.h" - - -using Poco::URIStreamFactory; -using Poco::URI; -using Poco::URIStreamOpener; -using Poco::UnbufferedStreamBuf; - - -namespace Poco { -namespace Net { - - -HTTPSStreamFactory::HTTPSStreamFactory(): - _proxyPort(HTTPSession::HTTP_PORT) -{ -} - - -HTTPSStreamFactory::HTTPSStreamFactory(const std::string& proxyHost, Poco::UInt16 proxyPort): - _proxyHost(proxyHost), - _proxyPort(proxyPort) -{ -} - - -HTTPSStreamFactory::HTTPSStreamFactory(const std::string& proxyHost, Poco::UInt16 proxyPort, const std::string& proxyUsername, const std::string& proxyPassword): - _proxyHost(proxyHost), - _proxyPort(proxyPort), - _proxyUsername(proxyUsername), - _proxyPassword(proxyPassword) -{ -} - - -HTTPSStreamFactory::~HTTPSStreamFactory() -{ -} - - -std::istream* HTTPSStreamFactory::open(const URI& uri) -{ - poco_assert (uri.getScheme() == "https" || uri.getScheme() == "http"); - - URI resolvedURI(uri); - URI proxyUri; - HTTPClientSession* pSession = 0; - HTTPResponse res; - try - { - bool retry = false; - bool authorize = false; - int redirects = 0; - std::string username; - std::string password; - - do - { - if (!pSession) - { - if (resolvedURI.getScheme() != "http") - pSession = new HTTPSClientSession(resolvedURI.getHost(), resolvedURI.getPort()); - else - pSession = new HTTPClientSession(resolvedURI.getHost(), resolvedURI.getPort()); - - if (proxyUri.empty()) - { - if (!_proxyHost.empty()) - { - pSession->setProxy(_proxyHost, _proxyPort); - pSession->setProxyCredentials(_proxyUsername, _proxyPassword); - } - } - else - { - pSession->setProxy(proxyUri.getHost(), proxyUri.getPort()); - if (!_proxyUsername.empty()) - { - pSession->setProxyCredentials(_proxyUsername, _proxyPassword); - } - } - } - std::string path = resolvedURI.getPathAndQuery(); - if (path.empty()) path = "/"; - HTTPRequest req(HTTPRequest::HTTP_GET, path, HTTPMessage::HTTP_1_1); - - if (authorize) - { - HTTPCredentials::extractCredentials(uri, username, password); - HTTPCredentials cred(username, password); - cred.authenticate(req, res); - } - - pSession->sendRequest(req); - std::istream& rs = pSession->receiveResponse(res); - bool moved = (res.getStatus() == HTTPResponse::HTTP_MOVED_PERMANENTLY || - res.getStatus() == HTTPResponse::HTTP_FOUND || - res.getStatus() == HTTPResponse::HTTP_SEE_OTHER || - res.getStatus() == HTTPResponse::HTTP_TEMPORARY_REDIRECT); - if (moved) - { - resolvedURI.resolve(res.get("Location")); - if (!username.empty()) - { - resolvedURI.setUserInfo(username + ":" + password); - authorize = false; - } - delete pSession; pSession = 0; - ++redirects; - retry = true; - } - else if (res.getStatus() == HTTPResponse::HTTP_OK) - { - return new HTTPResponseStream(rs, pSession); - } - else if (res.getStatus() == HTTPResponse::HTTP_USEPROXY && !retry) - { - // The requested resource MUST be accessed through the proxy - // given by the Location field. The Location field gives the - // URI of the proxy. The recipient is expected to repeat this - // single request via the proxy. 305 responses MUST only be generated by origin servers. - // only use for one single request! - proxyUri.resolve(res.get("Location")); - delete pSession; - pSession = 0; - retry = true; // only allow useproxy once - } - else if (res.getStatus() == HTTPResponse::HTTP_UNAUTHORIZED && !authorize) - { - authorize = true; - retry = true; - Poco::NullOutputStream null; - Poco::StreamCopier::copyStream(rs, null); - } - else throw HTTPException(res.getReason(), uri.toString()); - } - while (retry && redirects < MAX_REDIRECTS); - throw HTTPException("Too many redirects", uri.toString()); - } - catch (...) - { - delete pSession; - throw; - } -} - - -void HTTPSStreamFactory::registerFactory() -{ - URIStreamOpener::defaultOpener().registerStreamFactory("https", new HTTPSStreamFactory); -} - - -void HTTPSStreamFactory::unregisterFactory() -{ - URIStreamOpener::defaultOpener().unregisterStreamFactory("https"); -} - - -} } // namespace Poco::Net diff --git a/contrib/libpoco/NetSSL_OpenSSL/src/InvalidCertificateHandler.cpp b/contrib/libpoco/NetSSL_OpenSSL/src/InvalidCertificateHandler.cpp deleted file mode 100644 index 26e2db36410..00000000000 --- a/contrib/libpoco/NetSSL_OpenSSL/src/InvalidCertificateHandler.cpp +++ /dev/null @@ -1,54 +0,0 @@ -// -// InvalidCertificateHandler.cpp -// -// $Id: //poco/1.4/NetSSL_OpenSSL/src/InvalidCertificateHandler.cpp#1 $ -// -// Library: NetSSL_OpenSSL -// Package: SSLCore -// Module: InvalidCertificateHandler -// -// Copyright (c) 2006-2009, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "Poco/Net/InvalidCertificateHandler.h" -#include "Poco/Net/SSLManager.h" -#include "Poco/Delegate.h" - - -using Poco::Delegate; - - -namespace Poco { -namespace Net { - - -InvalidCertificateHandler::InvalidCertificateHandler(bool handleErrorsOnServerSide): _handleErrorsOnServerSide(handleErrorsOnServerSide) -{ - if (_handleErrorsOnServerSide) - SSLManager::instance().ServerVerificationError += Delegate(this, &InvalidCertificateHandler::onInvalidCertificate); - else - SSLManager::instance().ClientVerificationError += Delegate(this, &InvalidCertificateHandler::onInvalidCertificate); -} - - -InvalidCertificateHandler::~InvalidCertificateHandler() -{ - try - { - if (_handleErrorsOnServerSide) - SSLManager::instance().ServerVerificationError -= Delegate(this, &InvalidCertificateHandler::onInvalidCertificate); - else - SSLManager::instance().ClientVerificationError -= Delegate(this, &InvalidCertificateHandler::onInvalidCertificate); - } - catch (...) - { - poco_unexpected(); - } -} - - -} } // namespace Poco::Net diff --git a/contrib/libpoco/NetSSL_OpenSSL/src/KeyConsoleHandler.cpp b/contrib/libpoco/NetSSL_OpenSSL/src/KeyConsoleHandler.cpp deleted file mode 100644 index 167a3f7e496..00000000000 --- a/contrib/libpoco/NetSSL_OpenSSL/src/KeyConsoleHandler.cpp +++ /dev/null @@ -1,42 +0,0 @@ -// -// KeyConsoleHandler.cpp -// -// $Id: //poco/1.4/NetSSL_OpenSSL/src/KeyConsoleHandler.cpp#1 $ -// -// Library: NetSSL_OpenSSL -// Package: SSLCore -// Module: KeyConsoleHandler -// -// Copyright (c) 2006-2009, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "Poco/Net/KeyConsoleHandler.h" -#include - - -namespace Poco { -namespace Net { - - -KeyConsoleHandler::KeyConsoleHandler(bool server):PrivateKeyPassphraseHandler(server) -{ -} - - -KeyConsoleHandler::~KeyConsoleHandler() -{ -} - - -void KeyConsoleHandler::onPrivateKeyRequested(const void* pSender, std::string& privateKey) -{ - std::cout << "Please enter the passphrase for the private key: "; - std::cin >> privateKey; -} - - -} } // namespace Poco::Net diff --git a/contrib/libpoco/NetSSL_OpenSSL/src/KeyFileHandler.cpp b/contrib/libpoco/NetSSL_OpenSSL/src/KeyFileHandler.cpp deleted file mode 100644 index 68c82170427..00000000000 --- a/contrib/libpoco/NetSSL_OpenSSL/src/KeyFileHandler.cpp +++ /dev/null @@ -1,63 +0,0 @@ -// -// KeyFileHandler.cpp -// -// $Id: //poco/1.4/NetSSL_OpenSSL/src/KeyFileHandler.cpp#1 $ -// -// Library: NetSSL_OpenSSL -// Package: SSLCore -// Module: KeyFileHandler -// -// Copyright (c) 2006-2009, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "Poco/Net/KeyFileHandler.h" -#include "Poco/Net/SSLManager.h" -#include "Poco/File.h" -#include "Poco/Util/AbstractConfiguration.h" -#include "Poco/Util/Application.h" -#include "Poco/Util/OptionException.h" - - -namespace Poco { -namespace Net { - - -const std::string KeyFileHandler::CFG_PRIV_KEY_FILE("privateKeyPassphraseHandler.options.password"); - - -KeyFileHandler::KeyFileHandler(bool server):PrivateKeyPassphraseHandler(server) -{ -} - - -KeyFileHandler::~KeyFileHandler() -{ -} - - -void KeyFileHandler::onPrivateKeyRequested(const void* pSender, std::string& privateKey) -{ - try - { - Poco::Util::AbstractConfiguration& config = Poco::Util::Application::instance().config(); - std::string prefix = serverSide() ? SSLManager::CFG_SERVER_PREFIX : SSLManager::CFG_CLIENT_PREFIX; - if (!config.hasProperty(prefix + CFG_PRIV_KEY_FILE)) - throw Poco::Util::EmptyOptionException(std::string("Missing Configuration Entry: ") + prefix + CFG_PRIV_KEY_FILE); - - privateKey = config.getString(prefix + CFG_PRIV_KEY_FILE); - } - catch (Poco::NullPointerException&) - { - throw Poco::IllegalStateException( - "An application configuration is required to obtain the private key passphrase, " - "but no Poco::Util::Application instance is available." - ); - } -} - - -} } // namespace Poco::Net diff --git a/contrib/libpoco/NetSSL_OpenSSL/src/PrivateKeyFactory.cpp b/contrib/libpoco/NetSSL_OpenSSL/src/PrivateKeyFactory.cpp deleted file mode 100644 index 5830f20b23c..00000000000 --- a/contrib/libpoco/NetSSL_OpenSSL/src/PrivateKeyFactory.cpp +++ /dev/null @@ -1,46 +0,0 @@ -// -// PrivateKeyFactory.cpp -// -// $Id: //poco/1.4/NetSSL_OpenSSL/src/PrivateKeyFactory.cpp#1 $ -// -// Library: NetSSL_OpenSSL -// Package: SSLCore -// Module: PrivateKeyFactory -// -// Copyright (c) 2006-2009, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "Poco/Net/PrivateKeyFactory.h" -#include "Poco/Net/SSLManager.h" - - -namespace Poco { -namespace Net { - - -PrivateKeyFactory::PrivateKeyFactory() -{ -} - - -PrivateKeyFactory::~PrivateKeyFactory() -{ -} - - -PrivateKeyFactoryRegistrar::PrivateKeyFactoryRegistrar(const std::string& name, PrivateKeyFactory* pFactory) -{ - SSLManager::instance().privateKeyFactoryMgr().setFactory(name, pFactory); -} - - -PrivateKeyFactoryRegistrar::~PrivateKeyFactoryRegistrar() -{ -} - - -} } // namespace Poco::Net diff --git a/contrib/libpoco/NetSSL_OpenSSL/src/PrivateKeyFactoryMgr.cpp b/contrib/libpoco/NetSSL_OpenSSL/src/PrivateKeyFactoryMgr.cpp deleted file mode 100644 index f2d1bc28b32..00000000000 --- a/contrib/libpoco/NetSSL_OpenSSL/src/PrivateKeyFactoryMgr.cpp +++ /dev/null @@ -1,69 +0,0 @@ -// -// PrivateKeyFactoryMgr.cpp -// -// $Id: //poco/1.4/NetSSL_OpenSSL/src/PrivateKeyFactoryMgr.cpp#1 $ -// -// Library: NetSSL_OpenSSL -// Package: SSLCore -// Module: PrivateKeyFactoryMgr -// -// Copyright (c) 2006-2009, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "Poco/Net/PrivateKeyFactoryMgr.h" -#include "Poco/Net/KeyFileHandler.h" -#include "Poco/Net/KeyConsoleHandler.h" - - -namespace Poco { -namespace Net { - - -PrivateKeyFactoryMgr::PrivateKeyFactoryMgr() -{ - setFactory("KeyFileHandler", new PrivateKeyFactoryImpl()); - setFactory("KeyConsoleHandler", new PrivateKeyFactoryImpl()); -} - - -PrivateKeyFactoryMgr::~PrivateKeyFactoryMgr() -{ -} - - -void PrivateKeyFactoryMgr::setFactory(const std::string& name, PrivateKeyFactory* pFactory) -{ - bool success = _factories.insert(make_pair(name, Poco::SharedPtr(pFactory))).second; - if (!success) - delete pFactory; - poco_assert(success); -} - - -bool PrivateKeyFactoryMgr::hasFactory(const std::string& name) const -{ - return _factories.find(name) != _factories.end(); -} - - -const PrivateKeyFactory* PrivateKeyFactoryMgr::getFactory(const std::string& name) const -{ - FactoriesMap::const_iterator it = _factories.find(name); - if (it != _factories.end()) - return it->second; - else - return 0; -} - - -void PrivateKeyFactoryMgr::removeFactory(const std::string& name) -{ - _factories.erase(name); -} - - -} } // namespace Poco::Net diff --git a/contrib/libpoco/NetSSL_OpenSSL/src/PrivateKeyPassphraseHandler.cpp b/contrib/libpoco/NetSSL_OpenSSL/src/PrivateKeyPassphraseHandler.cpp deleted file mode 100644 index 2749614cad6..00000000000 --- a/contrib/libpoco/NetSSL_OpenSSL/src/PrivateKeyPassphraseHandler.cpp +++ /dev/null @@ -1,48 +0,0 @@ -// -// PrivateKeyPassphraseHandler.cpp -// -// $Id: //poco/1.4/NetSSL_OpenSSL/src/PrivateKeyPassphraseHandler.cpp#1 $ -// -// Library: NetSSL_OpenSSL -// Package: SSLCore -// Module: PrivateKeyPassphraseHandler -// -// Copyright (c) 2006-2009, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "Poco/Net/PrivateKeyPassphraseHandler.h" -#include "Poco/Net/SSLManager.h" -#include "Poco/Delegate.h" - - -using Poco::Delegate; - - -namespace Poco { -namespace Net { - - -PrivateKeyPassphraseHandler::PrivateKeyPassphraseHandler(bool onServerSide): _serverSide(onServerSide) -{ - SSLManager::instance().PrivateKeyPassphraseRequired += Delegate(this, &PrivateKeyPassphraseHandler::onPrivateKeyRequested); -} - - -PrivateKeyPassphraseHandler::~PrivateKeyPassphraseHandler() -{ - try - { - SSLManager::instance().PrivateKeyPassphraseRequired -= Delegate(this, &PrivateKeyPassphraseHandler::onPrivateKeyRequested); - } - catch (...) - { - poco_unexpected(); - } -} - - -} } // namespace Poco::Net diff --git a/contrib/libpoco/NetSSL_OpenSSL/src/RejectCertificateHandler.cpp b/contrib/libpoco/NetSSL_OpenSSL/src/RejectCertificateHandler.cpp deleted file mode 100644 index 09572817c23..00000000000 --- a/contrib/libpoco/NetSSL_OpenSSL/src/RejectCertificateHandler.cpp +++ /dev/null @@ -1,40 +0,0 @@ -// -// RejectCertificateHandler.cpp -// -// $Id: //poco/1.4/NetSSL_OpenSSL/src/RejectCertificateHandler.cpp#1 $ -// -// Library: NetSSL_OpenSSL -// Package: SSLCore -// Module: RejectCertificateHandler -// -// Copyright (c) 2006-2009, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "Poco/Net/RejectCertificateHandler.h" - - -namespace Poco { -namespace Net { - - -RejectCertificateHandler::RejectCertificateHandler(bool server): InvalidCertificateHandler(server) -{ -} - - -RejectCertificateHandler::~RejectCertificateHandler() -{ -} - - -void RejectCertificateHandler::onInvalidCertificate(const void*, VerificationErrorArgs& errorCert) -{ - errorCert.setIgnoreError(false); -} - - -} } // namespace Poco::Net diff --git a/contrib/libpoco/NetSSL_OpenSSL/src/SSLException.cpp b/contrib/libpoco/NetSSL_OpenSSL/src/SSLException.cpp deleted file mode 100644 index 0137d1cbbfc..00000000000 --- a/contrib/libpoco/NetSSL_OpenSSL/src/SSLException.cpp +++ /dev/null @@ -1,32 +0,0 @@ -// -// SSLException.cpp -// -// $Id: //poco/1.4/NetSSL_OpenSSL/src/SSLException.cpp#1 $ -// -// Library: NetSSL_OpenSSL -// Package: SSLCore -// Module: SSLException -// -// Copyright (c) 2006-2009, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "Poco/Net/SSLException.h" -#include - - -namespace Poco { -namespace Net { - - -POCO_IMPLEMENT_EXCEPTION(SSLException, NetException, "SSL Exception") -POCO_IMPLEMENT_EXCEPTION(SSLContextException, SSLException, "SSL context exception") -POCO_IMPLEMENT_EXCEPTION(InvalidCertificateException, SSLException, "Invalid certficate") -POCO_IMPLEMENT_EXCEPTION(CertificateValidationException, SSLException, "Certificate validation error") -POCO_IMPLEMENT_EXCEPTION(SSLConnectionUnexpectedlyClosedException, SSLException, "SSL connection unexpectedly closed") - - -} } // namespace Poco::Net diff --git a/contrib/libpoco/NetSSL_OpenSSL/src/SSLManager.cpp b/contrib/libpoco/NetSSL_OpenSSL/src/SSLManager.cpp deleted file mode 100644 index 166c018e773..00000000000 --- a/contrib/libpoco/NetSSL_OpenSSL/src/SSLManager.cpp +++ /dev/null @@ -1,411 +0,0 @@ -// -// SSLManager.cpp -// -// $Id: //poco/1.4/NetSSL_OpenSSL/src/SSLManager.cpp#3 $ -// -// Library: NetSSL_OpenSSL -// Package: SSLCore -// Module: SSLManager -// -// Copyright (c) 2006-2010, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "Poco/Net/SSLManager.h" -#include "Poco/Net/Context.h" -#include "Poco/Net/Utility.h" -#include "Poco/Net/PrivateKeyPassphraseHandler.h" -#include "Poco/Crypto/OpenSSLInitializer.h" -#include "Poco/Net/SSLException.h" -#include "Poco/SingletonHolder.h" -#include "Poco/Delegate.h" -#include "Poco/Util/Application.h" -#include "Poco/Util/OptionException.h" - - -namespace Poco { -namespace Net { - - -const std::string SSLManager::CFG_PRIV_KEY_FILE("privateKeyFile"); -const std::string SSLManager::CFG_CERTIFICATE_FILE("certificateFile"); -const std::string SSLManager::CFG_CA_LOCATION("caConfig"); -const std::string SSLManager::CFG_VER_MODE("verificationMode"); -const Context::VerificationMode SSLManager::VAL_VER_MODE(Context::VERIFY_STRICT); -const std::string SSLManager::CFG_VER_DEPTH("verificationDepth"); -const int SSLManager::VAL_VER_DEPTH(9); -const std::string SSLManager::CFG_ENABLE_DEFAULT_CA("loadDefaultCAFile"); -const bool SSLManager::VAL_ENABLE_DEFAULT_CA(false); -const std::string SSLManager::CFG_CIPHER_LIST("cipherList"); -const std::string SSLManager::CFG_CYPHER_LIST("cypherList"); -const std::string SSLManager::VAL_CIPHER_LIST("ALL:!ADH:!LOW:!EXP:!MD5:@STRENGTH"); -const std::string SSLManager::CFG_DELEGATE_HANDLER("privateKeyPassphraseHandler.name"); -const std::string SSLManager::VAL_DELEGATE_HANDLER("KeyConsoleHandler"); -const std::string SSLManager::CFG_CERTIFICATE_HANDLER("invalidCertificateHandler.name"); -const std::string SSLManager::VAL_CERTIFICATE_HANDLER("ConsoleCertificateHandler"); -const std::string SSLManager::CFG_SERVER_PREFIX("openSSL.server."); -const std::string SSLManager::CFG_CLIENT_PREFIX("openSSL.client."); -const std::string SSLManager::CFG_CACHE_SESSIONS("cacheSessions"); -const std::string SSLManager::CFG_SESSION_ID_CONTEXT("sessionIdContext"); -const std::string SSLManager::CFG_SESSION_CACHE_SIZE("sessionCacheSize"); -const std::string SSLManager::CFG_SESSION_TIMEOUT("sessionTimeout"); -const std::string SSLManager::CFG_EXTENDED_VERIFICATION("extendedVerification"); -const std::string SSLManager::CFG_REQUIRE_TLSV1("requireTLSv1"); -const std::string SSLManager::CFG_REQUIRE_TLSV1_1("requireTLSv1_1"); -const std::string SSLManager::CFG_REQUIRE_TLSV1_2("requireTLSv1_2"); -#ifdef OPENSSL_FIPS -const std::string SSLManager::CFG_FIPS_MODE("openSSL.fips"); -const bool SSLManager::VAL_FIPS_MODE(false); -#endif - - -SSLManager::SSLManager() -{ -} - - -SSLManager::~SSLManager() -{ - try - { - shutdown(); - } - catch (...) - { - poco_unexpected(); - } -} - - -void SSLManager::shutdown() -{ - PrivateKeyPassphraseRequired.clear(); - ClientVerificationError.clear(); - ServerVerificationError.clear(); - _ptrDefaultServerContext = 0; - _ptrDefaultClientContext = 0; -} - - -namespace -{ - static Poco::SingletonHolder singleton; -} - - -SSLManager& SSLManager::instance() -{ - return *singleton.get(); -} - - -void SSLManager::initializeServer(PrivateKeyPassphraseHandlerPtr ptrPassphraseHandler, InvalidCertificateHandlerPtr ptrHandler, Context::Ptr ptrContext) -{ - _ptrServerPassphraseHandler = ptrPassphraseHandler; - _ptrServerCertificateHandler = ptrHandler; - _ptrDefaultServerContext = ptrContext; -} - - -void SSLManager::initializeClient(PrivateKeyPassphraseHandlerPtr ptrPassphraseHandler, InvalidCertificateHandlerPtr ptrHandler, Context::Ptr ptrContext) -{ - _ptrClientPassphraseHandler = ptrPassphraseHandler; - _ptrClientCertificateHandler = ptrHandler; - _ptrDefaultClientContext = ptrContext; -} - - -Context::Ptr SSLManager::defaultServerContext() -{ - Poco::FastMutex::ScopedLock lock(_mutex); - - if (!_ptrDefaultServerContext) - initDefaultContext(true); - - return _ptrDefaultServerContext; -} - - -Context::Ptr SSLManager::defaultClientContext() -{ - Poco::FastMutex::ScopedLock lock(_mutex); - - if (!_ptrDefaultClientContext) - initDefaultContext(false); - - return _ptrDefaultClientContext; -} - - -SSLManager::PrivateKeyPassphraseHandlerPtr SSLManager::serverPassphraseHandler() -{ - Poco::FastMutex::ScopedLock lock(_mutex); - - if (!_ptrServerPassphraseHandler) - initPassphraseHandler(true); - - return _ptrServerPassphraseHandler; -} - - -SSLManager::PrivateKeyPassphraseHandlerPtr SSLManager::clientPassphraseHandler() -{ - Poco::FastMutex::ScopedLock lock(_mutex); - - if (!_ptrClientPassphraseHandler) - initPassphraseHandler(false); - - return _ptrClientPassphraseHandler; -} - - -SSLManager::InvalidCertificateHandlerPtr SSLManager::serverCertificateHandler() -{ - Poco::FastMutex::ScopedLock lock(_mutex); - - if (!_ptrServerCertificateHandler) - initCertificateHandler(true); - - return _ptrServerCertificateHandler; -} - - -SSLManager::InvalidCertificateHandlerPtr SSLManager::clientCertificateHandler() -{ - Poco::FastMutex::ScopedLock lock(_mutex); - - if (!_ptrClientCertificateHandler) - initCertificateHandler(false); - - return _ptrClientCertificateHandler; -} - - -int SSLManager::verifyCallback(bool server, int ok, X509_STORE_CTX* pStore) -{ - if (!ok) - { - X509* pCert = X509_STORE_CTX_get_current_cert(pStore); - X509Certificate x509(pCert, true); - int depth = X509_STORE_CTX_get_error_depth(pStore); - int err = X509_STORE_CTX_get_error(pStore); - std::string error(X509_verify_cert_error_string(err)); - VerificationErrorArgs args(x509, depth, err, error); - if (server) - SSLManager::instance().ServerVerificationError.notify(&SSLManager::instance(), args); - else - SSLManager::instance().ClientVerificationError.notify(&SSLManager::instance(), args); - ok = args.getIgnoreError() ? 1 : 0; - } - - return ok; -} - - -int SSLManager::privateKeyPassphraseCallback(char* pBuf, int size, int flag, void* userData) -{ - std::string pwd; - SSLManager::instance().PrivateKeyPassphraseRequired.notify(&SSLManager::instance(), pwd); - - strncpy(pBuf, (char *)(pwd.c_str()), size); - pBuf[size - 1] = '\0'; - if ((size_t)size > pwd.length()) - size = (int) pwd.length(); - - return size; -} - - -void SSLManager::initDefaultContext(bool server) -{ - if (server && _ptrDefaultServerContext) return; - if (!server && _ptrDefaultClientContext) return; - - Poco::Crypto::OpenSSLInitializer openSSLInitializer; - initEvents(server); - Poco::Util::AbstractConfiguration& config = appConfig(); - -#ifdef OPENSSL_FIPS - bool fipsEnabled = config.getBool(CFG_FIPS_MODE, VAL_FIPS_MODE); - if (fipsEnabled && !Poco::Crypto::OpenSSLInitializer::isFIPSEnabled()) - { - Poco::Crypto::OpenSSLInitializer::enableFIPSMode(true); - } -#endif - - std::string prefix = server ? CFG_SERVER_PREFIX : CFG_CLIENT_PREFIX; - - // mandatory options - std::string privKeyFile = config.getString(prefix + CFG_PRIV_KEY_FILE, ""); - std::string certFile = config.getString(prefix + CFG_CERTIFICATE_FILE, privKeyFile); - std::string caLocation = config.getString(prefix + CFG_CA_LOCATION, ""); - - if (server && certFile.empty() && privKeyFile.empty()) - throw SSLException("Configuration error: no certificate file has been specified"); - - // optional options for which we have defaults defined - Context::VerificationMode verMode = VAL_VER_MODE; - if (config.hasProperty(prefix + CFG_VER_MODE)) - { - // either: none, relaxed, strict, once - std::string mode = config.getString(prefix + CFG_VER_MODE); - verMode = Utility::convertVerificationMode(mode); - } - - int verDepth = config.getInt(prefix + CFG_VER_DEPTH, VAL_VER_DEPTH); - bool loadDefCA = config.getBool(prefix + CFG_ENABLE_DEFAULT_CA, VAL_ENABLE_DEFAULT_CA); - std::string cipherList = config.getString(prefix + CFG_CIPHER_LIST, VAL_CIPHER_LIST); - cipherList = config.getString(prefix + CFG_CYPHER_LIST, cipherList); // for backwards compatibility - bool requireTLSv1 = config.getBool(prefix + CFG_REQUIRE_TLSV1, false); - bool requireTLSv1_1 = config.getBool(prefix + CFG_REQUIRE_TLSV1_1, false); - bool requireTLSv1_2 = config.getBool(prefix + CFG_REQUIRE_TLSV1_2, false); - Context::Usage usage; - - if (server) - { - if (requireTLSv1_2) - usage = Context::TLSV1_2_SERVER_USE; - else if (requireTLSv1_1) - usage = Context::TLSV1_1_SERVER_USE; - else if (requireTLSv1) - usage = Context::TLSV1_SERVER_USE; - else - usage = Context::SERVER_USE; - _ptrDefaultServerContext = new Context(usage, privKeyFile, certFile, caLocation, verMode, verDepth, loadDefCA, cipherList); - } - else - { - if (requireTLSv1_2) - usage = Context::TLSV1_2_CLIENT_USE; - else if (requireTLSv1_1) - usage = Context::TLSV1_1_CLIENT_USE; - else if (requireTLSv1) - usage = Context::TLSV1_CLIENT_USE; - else - usage = Context::CLIENT_USE; - _ptrDefaultClientContext = new Context(usage, privKeyFile, certFile, caLocation, verMode, verDepth, loadDefCA, cipherList); - } - - - bool cacheSessions = config.getBool(prefix + CFG_CACHE_SESSIONS, false); - if (server) - { - std::string sessionIdContext = config.getString(prefix + CFG_SESSION_ID_CONTEXT, config.getString("application.name", "")); - _ptrDefaultServerContext->enableSessionCache(cacheSessions, sessionIdContext); - if (config.hasProperty(prefix + CFG_SESSION_CACHE_SIZE)) - { - int cacheSize = config.getInt(prefix + CFG_SESSION_CACHE_SIZE); - _ptrDefaultServerContext->setSessionCacheSize(cacheSize); - } - if (config.hasProperty(prefix + CFG_SESSION_TIMEOUT)) - { - int timeout = config.getInt(prefix + CFG_SESSION_TIMEOUT); - _ptrDefaultServerContext->setSessionTimeout(timeout); - } - } - else - { - _ptrDefaultClientContext->enableSessionCache(cacheSessions); - } - bool extendedVerification = config.getBool(prefix + CFG_EXTENDED_VERIFICATION, false); - if (server) - _ptrDefaultServerContext->enableExtendedCertificateVerification(extendedVerification); - else - _ptrDefaultClientContext->enableExtendedCertificateVerification(extendedVerification); -} - - -void SSLManager::initEvents(bool server) -{ - initPassphraseHandler(server); - initCertificateHandler(server); -} - - -void SSLManager::initPassphraseHandler(bool server) -{ - if (server && _ptrServerPassphraseHandler) return; - if (!server && _ptrClientPassphraseHandler) return; - - std::string prefix = server ? CFG_SERVER_PREFIX : CFG_CLIENT_PREFIX; - Poco::Util::AbstractConfiguration& config = appConfig(); - - std::string className(config.getString(prefix + CFG_DELEGATE_HANDLER, VAL_DELEGATE_HANDLER)); - - const PrivateKeyFactory* pFactory = 0; - if (privateKeyFactoryMgr().hasFactory(className)) - { - pFactory = privateKeyFactoryMgr().getFactory(className); - } - - if (pFactory) - { - if (server) - _ptrServerPassphraseHandler = pFactory->create(server); - else - _ptrClientPassphraseHandler = pFactory->create(server); - } - else throw Poco::Util::UnknownOptionException(std::string("No passphrase handler known with the name ") + className); -} - - -void SSLManager::initCertificateHandler(bool server) -{ - if (server && _ptrServerCertificateHandler) return; - if (!server && _ptrClientCertificateHandler) return; - - std::string prefix = server ? CFG_SERVER_PREFIX : CFG_CLIENT_PREFIX; - Poco::Util::AbstractConfiguration& config = appConfig(); - - std::string className(config.getString(prefix+CFG_CERTIFICATE_HANDLER, VAL_CERTIFICATE_HANDLER)); - - const CertificateHandlerFactory* pFactory = 0; - if (certificateHandlerFactoryMgr().hasFactory(className)) - { - pFactory = certificateHandlerFactoryMgr().getFactory(className); - } - - if (pFactory) - { - if (server) - _ptrServerCertificateHandler = pFactory->create(true); - else - _ptrClientCertificateHandler = pFactory->create(false); - } - else throw Poco::Util::UnknownOptionException(std::string("No InvalidCertificate handler known with the name ") + className); -} - - -Poco::Util::AbstractConfiguration& SSLManager::appConfig() -{ - try - { - return Poco::Util::Application::instance().config(); - } - catch (Poco::NullPointerException&) - { - throw Poco::IllegalStateException( - "An application configuration is required to initialize the Poco::Net::SSLManager, " - "but no Poco::Util::Application instance is available." - ); - } -} - - -void initializeSSL() -{ - Poco::Crypto::initializeCrypto(); -} - - -void uninitializeSSL() -{ - SSLManager::instance().shutdown(); - Poco::Crypto::uninitializeCrypto(); -} - - -} } // namespace Poco::Net diff --git a/contrib/libpoco/NetSSL_OpenSSL/src/SecureSMTPClientSession.cpp b/contrib/libpoco/NetSSL_OpenSSL/src/SecureSMTPClientSession.cpp deleted file mode 100644 index b441e818424..00000000000 --- a/contrib/libpoco/NetSSL_OpenSSL/src/SecureSMTPClientSession.cpp +++ /dev/null @@ -1,66 +0,0 @@ -// -// SecureSMTPClientSession.h -// -// $Id: //poco/1.4/NetSSL_OpenSSL/src/SecureSMTPClientSession.cpp#1 $ -// -// Library: NetSSL_OpenSSL -// Package: Mail -// Module: SecureSMTPClientSession -// -// Copyright (c) 2010, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "Poco/Net/SecureSMTPClientSession.h" -#include "Poco/Net/SecureStreamSocket.h" -#include "Poco/Net/SSLManager.h" -#include "Poco/Net/DialogSocket.h" - - -namespace Poco { -namespace Net { - - -SecureSMTPClientSession::SecureSMTPClientSession(const StreamSocket& socket): - SMTPClientSession(socket) -{ -} - - -SecureSMTPClientSession::SecureSMTPClientSession(const std::string& host, Poco::UInt16 port): - SMTPClientSession(host, port), - _host(host) -{ -} - - -SecureSMTPClientSession::~SecureSMTPClientSession() -{ -} - - -bool SecureSMTPClientSession::startTLS() -{ - return startTLS(SSLManager::instance().defaultClientContext()); -} - - -bool SecureSMTPClientSession::startTLS(Context::Ptr pContext) -{ - int status = 0; - std::string response; - - status = sendCommand("STARTTLS", response); - if (!isPositiveCompletion(status)) return false; - - SecureStreamSocket sss(SecureStreamSocket::attach(socket(), _host, pContext)); - socket() = sss; - - return true; -} - - -} } // namespace Poco::Net diff --git a/contrib/libpoco/NetSSL_OpenSSL/src/SecureServerSocket.cpp b/contrib/libpoco/NetSSL_OpenSSL/src/SecureServerSocket.cpp deleted file mode 100644 index 6308ccc093a..00000000000 --- a/contrib/libpoco/NetSSL_OpenSSL/src/SecureServerSocket.cpp +++ /dev/null @@ -1,123 +0,0 @@ -// -// SecureServerSocket.cpp -// -// $Id: //poco/1.4/NetSSL_OpenSSL/src/SecureServerSocket.cpp#1 $ -// -// Library: NetSSL_OpenSSL -// Package: SSLSockets -// Module: SecureServerSocket -// -// Copyright (c) 2006-2009, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "Poco/Net/SecureServerSocket.h" -#include "Poco/Net/SecureServerSocketImpl.h" -#include "Poco/Net/SecureStreamSocket.h" -#include "Poco/Net/SSLManager.h" -#include "Poco/Exception.h" - - -using Poco::InvalidArgumentException; - - -namespace Poco { -namespace Net { - - -SecureServerSocket::SecureServerSocket(): - ServerSocket(new SecureServerSocketImpl(SSLManager::instance().defaultServerContext()), true) -{ -} - - -SecureServerSocket::SecureServerSocket(Context::Ptr pContext): - ServerSocket(new SecureServerSocketImpl(pContext), true) -{ -} - - -SecureServerSocket::SecureServerSocket(const Socket& socket): - ServerSocket(socket) -{ - if (!dynamic_cast(impl())) - throw InvalidArgumentException("Cannot assign incompatible socket"); -} - - -SecureServerSocket::SecureServerSocket(const SocketAddress& address, int backlog): - ServerSocket(new SecureServerSocketImpl(SSLManager::instance().defaultServerContext()), true) -{ - impl()->bind(address, true); - impl()->listen(backlog); -} - - -SecureServerSocket::SecureServerSocket(const SocketAddress& address, int backlog, Context::Ptr pContext): - ServerSocket(new SecureServerSocketImpl(pContext), true) -{ - impl()->bind(address, true); - impl()->listen(backlog); -} - - -SecureServerSocket::SecureServerSocket(Poco::UInt16 port, int backlog): - ServerSocket(new SecureServerSocketImpl(SSLManager::instance().defaultServerContext()), true) -{ - IPAddress wildcardAddr; - SocketAddress address(wildcardAddr, port); - impl()->bind(address, true); - impl()->listen(backlog); -} - -SecureServerSocket::SecureServerSocket(Poco::UInt16 port, int backlog, Context::Ptr pContext): - ServerSocket(new SecureServerSocketImpl(pContext), true) -{ - IPAddress wildcardAddr; - SocketAddress address(wildcardAddr, port); - impl()->bind(address, true); - impl()->listen(backlog); -} - - -SecureServerSocket::~SecureServerSocket() -{ -} - - -SecureServerSocket& SecureServerSocket::operator = (const Socket& socket) -{ - if (&socket != this) - { - if (dynamic_cast(socket.impl())) - ServerSocket::operator = (socket); - else - throw InvalidArgumentException("Cannot assign incompatible socket"); - } - return *this; -} - - -StreamSocket SecureServerSocket::acceptConnection(SocketAddress& clientAddr) -{ - return SecureStreamSocket(impl()->acceptConnection(clientAddr)); -} - - -StreamSocket SecureServerSocket::acceptConnection() -{ - SocketAddress clientAddr; - return SecureStreamSocket(impl()->acceptConnection(clientAddr)); -} - - -Context::Ptr SecureServerSocket::context() const -{ - return static_cast(impl())->context(); -} - - -} } // namespace Poco::Net diff --git a/contrib/libpoco/NetSSL_OpenSSL/src/SecureServerSocketImpl.cpp b/contrib/libpoco/NetSSL_OpenSSL/src/SecureServerSocketImpl.cpp deleted file mode 100644 index dc8c5b89892..00000000000 --- a/contrib/libpoco/NetSSL_OpenSSL/src/SecureServerSocketImpl.cpp +++ /dev/null @@ -1,124 +0,0 @@ -// -// SecureServerSocketImpl.cpp -// -// $Id: //poco/1.4/NetSSL_OpenSSL/src/SecureServerSocketImpl.cpp#1 $ -// -// Library: NetSSL_OpenSSL -// Package: SSLSockets -// Module: SecureServerSocketImpl -// -// Copyright (c) 2006-2009, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "Poco/Net/SecureServerSocketImpl.h" - - -namespace Poco { -namespace Net { - - -SecureServerSocketImpl::SecureServerSocketImpl(Context::Ptr pContext): - _impl(new ServerSocketImpl, pContext) -{ -} - - -SecureServerSocketImpl::~SecureServerSocketImpl() -{ - try - { - reset(); - } - catch (...) - { - poco_unexpected(); - } -} - - -SocketImpl* SecureServerSocketImpl::acceptConnection(SocketAddress& clientAddr) -{ - return _impl.acceptConnection(clientAddr); -} - - -void SecureServerSocketImpl::connect(const SocketAddress& address) -{ - throw Poco::InvalidAccessException("Cannot connect() a SecureServerSocket"); -} - - -void SecureServerSocketImpl::connect(const SocketAddress& address, const Poco::Timespan& timeout) -{ - throw Poco::InvalidAccessException("Cannot connect() a SecureServerSocket"); -} - - -void SecureServerSocketImpl::connectNB(const SocketAddress& address) -{ - throw Poco::InvalidAccessException("Cannot connect() a SecureServerSocket"); -} - - -void SecureServerSocketImpl::bind(const SocketAddress& address, bool reuseAddress) -{ - _impl.bind(address, reuseAddress); - reset(_impl.sockfd()); -} - - -void SecureServerSocketImpl::listen(int backlog) -{ - _impl.listen(backlog); - reset(_impl.sockfd()); -} - - -void SecureServerSocketImpl::close() -{ - reset(); - _impl.close(); -} - - -int SecureServerSocketImpl::sendBytes(const void* buffer, int length, int flags) -{ - throw Poco::InvalidAccessException("Cannot sendBytes() on a SecureServerSocket"); -} - - -int SecureServerSocketImpl::receiveBytes(void* buffer, int length, int flags) -{ - throw Poco::InvalidAccessException("Cannot receiveBytes() on a SecureServerSocket"); -} - - -int SecureServerSocketImpl::sendTo(const void* buffer, int length, const SocketAddress& address, int flags) -{ - throw Poco::InvalidAccessException("Cannot sendTo() on a SecureServerSocket"); -} - - -int SecureServerSocketImpl::receiveFrom(void* buffer, int length, SocketAddress& address, int flags) -{ - throw Poco::InvalidAccessException("Cannot receiveFrom() on a SecureServerSocket"); -} - - -void SecureServerSocketImpl::sendUrgent(unsigned char data) -{ - throw Poco::InvalidAccessException("Cannot sendUrgent() on a SecureServerSocket"); -} - - -bool SecureServerSocketImpl::secure() const -{ - return true; -} - - -} } // namespace Poco::Net diff --git a/contrib/libpoco/NetSSL_OpenSSL/src/SecureSocketImpl.cpp b/contrib/libpoco/NetSSL_OpenSSL/src/SecureSocketImpl.cpp deleted file mode 100644 index aef9bdaf694..00000000000 --- a/contrib/libpoco/NetSSL_OpenSSL/src/SecureSocketImpl.cpp +++ /dev/null @@ -1,524 +0,0 @@ -// -// SecureSocketImpl.cpp -// -// $Id: //poco/1.4/NetSSL_OpenSSL/src/SecureSocketImpl.cpp#11 $ -// -// Library: NetSSL_OpenSSL -// Package: SSLSockets -// Module: SecureSocketImpl -// -// Copyright (c) 2006-2010, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "Poco/Net/SecureSocketImpl.h" -#include "Poco/Net/SSLException.h" -#include "Poco/Net/Context.h" -#include "Poco/Net/X509Certificate.h" -#include "Poco/Net/Utility.h" -#include "Poco/Net/SecureStreamSocket.h" -#include "Poco/Net/SecureStreamSocketImpl.h" -#include "Poco/Net/StreamSocketImpl.h" -#include "Poco/Net/StreamSocket.h" -#include "Poco/Net/NetException.h" -#include "Poco/Net/DNS.h" -#include "Poco/NumberFormatter.h" -#include "Poco/NumberParser.h" -#include "Poco/Format.h" -#include -#include - - -using Poco::IOException; -using Poco::TimeoutException; -using Poco::InvalidArgumentException; -using Poco::NumberFormatter; -using Poco::Timespan; - - -// workaround for C++-incompatible macro -#define POCO_BIO_set_nbio_accept(b,n) BIO_ctrl(b,BIO_C_SET_ACCEPT,1,(void*)((n)?"a":NULL)) - - -namespace Poco { -namespace Net { - - -SecureSocketImpl::SecureSocketImpl(Poco::AutoPtr pSocketImpl, Context::Ptr pContext): - _pSSL(0), - _pSocket(pSocketImpl), - _pContext(pContext), - _needHandshake(false) -{ - poco_check_ptr (_pSocket); - poco_check_ptr (_pContext); -} - - -SecureSocketImpl::~SecureSocketImpl() -{ - try - { - reset(); - } - catch (...) - { - poco_unexpected(); - } -} - - -SocketImpl* SecureSocketImpl::acceptConnection(SocketAddress& clientAddr) -{ - poco_assert (!_pSSL); - - StreamSocket ss = _pSocket->acceptConnection(clientAddr); - Poco::AutoPtr pSecureStreamSocketImpl = new SecureStreamSocketImpl(static_cast(ss.impl()), _pContext); - pSecureStreamSocketImpl->acceptSSL(); - pSecureStreamSocketImpl->duplicate(); - return pSecureStreamSocketImpl; -} - - -void SecureSocketImpl::acceptSSL() -{ - poco_assert (!_pSSL); - - BIO* pBIO = BIO_new(BIO_s_socket()); - if (!pBIO) throw SSLException("Cannot create BIO object"); - BIO_set_fd(pBIO, static_cast(_pSocket->sockfd()), BIO_NOCLOSE); - - _pSSL = SSL_new(_pContext->sslContext()); - if (!_pSSL) - { - BIO_free(pBIO); - throw SSLException("Cannot create SSL object"); - } - SSL_set_bio(_pSSL, pBIO, pBIO); - SSL_set_accept_state(_pSSL); - _needHandshake = true; -} - - -void SecureSocketImpl::connect(const SocketAddress& address, bool performHandshake) -{ - if (_pSSL) reset(); - - poco_assert (!_pSSL); - - _pSocket->connect(address); - connectSSL(performHandshake); -} - - -void SecureSocketImpl::connect(const SocketAddress& address, const Poco::Timespan& timeout, bool performHandshake) -{ - if (_pSSL) reset(); - - poco_assert (!_pSSL); - - _pSocket->connect(address, timeout); - Poco::Timespan receiveTimeout = _pSocket->getReceiveTimeout(); - Poco::Timespan sendTimeout = _pSocket->getSendTimeout(); - _pSocket->setReceiveTimeout(timeout); - _pSocket->setSendTimeout(timeout); - connectSSL(performHandshake); - _pSocket->setReceiveTimeout(receiveTimeout); - _pSocket->setSendTimeout(sendTimeout); -} - - -void SecureSocketImpl::connectNB(const SocketAddress& address) -{ - if (_pSSL) reset(); - - poco_assert (!_pSSL); - - _pSocket->connectNB(address); - connectSSL(false); -} - - -void SecureSocketImpl::connectSSL(bool performHandshake) -{ - poco_assert (!_pSSL); - poco_assert (_pSocket->initialized()); - - BIO* pBIO = BIO_new(BIO_s_socket()); - if (!pBIO) throw SSLException("Cannot create SSL BIO object"); - BIO_set_fd(pBIO, static_cast(_pSocket->sockfd()), BIO_NOCLOSE); - - _pSSL = SSL_new(_pContext->sslContext()); - if (!_pSSL) - { - BIO_free(pBIO); - throw SSLException("Cannot create SSL object"); - } - SSL_set_bio(_pSSL, pBIO, pBIO); - -#if OPENSSL_VERSION_NUMBER >= 0x0908060L && !defined(OPENSSL_NO_TLSEXT) - if (!_peerHostName.empty()) - { - SSL_set_tlsext_host_name(_pSSL, _peerHostName.c_str()); - } -#endif - - if (_pSession) - { - SSL_set_session(_pSSL, _pSession->sslSession()); - } - - try - { - if (performHandshake && _pSocket->getBlocking()) - { - int ret = SSL_connect(_pSSL); - handleError(ret); - verifyPeerCertificate(); - } - else - { - SSL_set_connect_state(_pSSL); - _needHandshake = true; - } - } - catch (...) - { - SSL_free(_pSSL); - _pSSL = 0; - throw; - } -} - - -void SecureSocketImpl::bind(const SocketAddress& address, bool reuseAddress) -{ - poco_check_ptr (_pSocket); - - _pSocket->bind(address, reuseAddress); -} - - -void SecureSocketImpl::listen(int backlog) -{ - poco_check_ptr (_pSocket); - - _pSocket->listen(backlog); -} - - -void SecureSocketImpl::shutdown() -{ - if (_pSSL) - { - // Don't shut down the socket more than once. - int shutdownState = SSL_get_shutdown(_pSSL); - bool shutdownSent = (shutdownState & SSL_SENT_SHUTDOWN) == SSL_SENT_SHUTDOWN; - if (!shutdownSent) - { - // A proper clean shutdown would require us to - // retry the shutdown if we get a zero return - // value, until SSL_shutdown() returns 1. - // However, this will lead to problems with - // most web browsers, so we just set the shutdown - // flag by calling SSL_shutdown() once and be - // done with it. - int rc = SSL_shutdown(_pSSL); - if (rc < 0) handleError(rc); - if (_pSocket->getBlocking()) - { - _pSocket->shutdown(); - } - } - } -} - - -void SecureSocketImpl::close() -{ - try - { - shutdown(); - } - catch (...) - { - } - _pSocket->close(); -} - - -int SecureSocketImpl::sendBytes(const void* buffer, int length, int flags) -{ - poco_assert (_pSocket->initialized()); - poco_check_ptr (_pSSL); - - int rc; - if (_needHandshake) - { - rc = completeHandshake(); - if (rc == 1) - verifyPeerCertificate(); - else if (rc == 0) - throw SSLConnectionUnexpectedlyClosedException(); - else - return rc; - } - do - { - rc = SSL_write(_pSSL, buffer, length); - } - while (rc <= 0 && _pSocket->lastError() == POCO_EINTR); - if (rc <= 0) - { - rc = handleError(rc); - if (rc == 0) throw SSLConnectionUnexpectedlyClosedException(); - } - return rc; -} - - -int SecureSocketImpl::receiveBytes(void* buffer, int length, int flags) -{ - poco_assert (_pSocket->initialized()); - poco_check_ptr (_pSSL); - - int rc; - if (_needHandshake) - { - rc = completeHandshake(); - if (rc == 1) - verifyPeerCertificate(); - else - return rc; - } - do - { - rc = SSL_read(_pSSL, buffer, length); - } - while (rc <= 0 && _pSocket->lastError() == POCO_EINTR); - if (rc <= 0) - { - return handleError(rc); - } - return rc; -} - - -int SecureSocketImpl::available() const -{ - poco_check_ptr (_pSSL); - - return SSL_pending(_pSSL); -} - - -int SecureSocketImpl::completeHandshake() -{ - poco_assert (_pSocket->initialized()); - poco_check_ptr (_pSSL); - - int rc; - do - { - rc = SSL_do_handshake(_pSSL); - } - while (rc <= 0 && _pSocket->lastError() == POCO_EINTR); - if (rc <= 0) - { - return handleError(rc); - } - _needHandshake = false; - return rc; -} - - -void SecureSocketImpl::verifyPeerCertificate() -{ - if (_peerHostName.empty()) - _peerHostName = _pSocket->peerAddress().host().toString(); - - verifyPeerCertificate(_peerHostName); -} - - -void SecureSocketImpl::verifyPeerCertificate(const std::string& hostName) -{ - long certErr = verifyPeerCertificateImpl(hostName); - if (certErr != X509_V_OK) - { - std::string msg = Utility::convertCertificateError(certErr); - throw CertificateValidationException("Unacceptable certificate from " + hostName, msg); - } -} - - -long SecureSocketImpl::verifyPeerCertificateImpl(const std::string& hostName) -{ - Context::VerificationMode mode = _pContext->verificationMode(); - if (mode == Context::VERIFY_NONE || !_pContext->extendedCertificateVerificationEnabled() || - (mode != Context::VERIFY_STRICT && isLocalHost(hostName))) - { - return X509_V_OK; - } - - X509* pCert = SSL_get_peer_certificate(_pSSL); - if (pCert) - { - X509Certificate cert(pCert); - return cert.verify(hostName) ? X509_V_OK : X509_V_ERR_APPLICATION_VERIFICATION; - } - else return X509_V_OK; -} - - -bool SecureSocketImpl::isLocalHost(const std::string& hostName) -{ - SocketAddress addr(hostName, 0); - return addr.host().isLoopback(); -} - - -X509* SecureSocketImpl::peerCertificate() const -{ - if (_pSSL) - return SSL_get_peer_certificate(_pSSL); - else - return 0; -} - - -int SecureSocketImpl::handleError(int rc) -{ - if (rc > 0) return rc; - - int sslError = SSL_get_error(_pSSL, rc); - int error = SocketImpl::lastError(); - - switch (sslError) - { - case SSL_ERROR_ZERO_RETURN: - return 0; - case SSL_ERROR_WANT_READ: - if (_pSocket->getBlocking() && error != 0) - { - if (error == POCO_EAGAIN) - throw TimeoutException(error); - else - SocketImpl::error(error); - } - return SecureStreamSocket::ERR_SSL_WANT_READ; - case SSL_ERROR_WANT_WRITE: - return SecureStreamSocket::ERR_SSL_WANT_WRITE; - case SSL_ERROR_WANT_CONNECT: - case SSL_ERROR_WANT_ACCEPT: - case SSL_ERROR_WANT_X509_LOOKUP: - // these should not occur - poco_bugcheck(); - return rc; - case SSL_ERROR_SYSCALL: - if (error != 0) - { - if (_pSocket->getBlocking() && error == POCO_EAGAIN) - throw TimeoutException(error); - else - SocketImpl::error(error); - return rc; - } - // fallthrough - default: - { - long lastError = ERR_get_error(); - if (lastError == 0) - { - if (rc == 0) - { - // Most web browsers do this, don't report an error - if (_pContext->isForServerUse()) - return 0; - else - throw SSLConnectionUnexpectedlyClosedException(); - } - else if (rc == -1) - { - throw SSLConnectionUnexpectedlyClosedException(); - } - else - { - SecureStreamSocketImpl::error(Poco::format("The BIO reported an error: %d", rc)); - } - } - else - { - char buffer[256]; - ERR_error_string_n(lastError, buffer, sizeof(buffer)); - std::string msg(buffer); - throw SSLException(msg); - } - } - break; - } - return rc; -} - - -void SecureSocketImpl::setPeerHostName(const std::string& peerHostName) -{ - _peerHostName = peerHostName; -} - - -void SecureSocketImpl::reset() -{ - close(); - if (_pSSL) - { - SSL_free(_pSSL); - _pSSL = 0; - } -} - - -void SecureSocketImpl::abort() -{ - _pSocket->shutdown(); -} - - -Session::Ptr SecureSocketImpl::currentSession() -{ - if (_pSSL) - { - SSL_SESSION* pSession = SSL_get1_session(_pSSL); - if (pSession) - { - if (_pSession && pSession == _pSession->sslSession()) - { - SSL_SESSION_free(pSession); - return _pSession; - } - else return new Session(pSession); - } - } - return 0; -} - - -void SecureSocketImpl::useSession(Session::Ptr pSession) -{ - _pSession = pSession; -} - - -bool SecureSocketImpl::sessionWasReused() -{ - if (_pSSL) - return SSL_session_reused(_pSSL) != 0; - else - return false; -} - - -} } // namespace Poco::Net diff --git a/contrib/libpoco/NetSSL_OpenSSL/src/SecureStreamSocket.cpp b/contrib/libpoco/NetSSL_OpenSSL/src/SecureStreamSocket.cpp deleted file mode 100644 index 635a8a3316d..00000000000 --- a/contrib/libpoco/NetSSL_OpenSSL/src/SecureStreamSocket.cpp +++ /dev/null @@ -1,289 +0,0 @@ -// -// SecureStreamSocket.cpp -// -// $Id: //poco/1.4/NetSSL_OpenSSL/src/SecureStreamSocket.cpp#2 $ -// -// Library: NetSSL_OpenSSL -// Package: SSLSockets -// Module: SecureStreamSocket -// -// Copyright (c) 2006-2010, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "Poco/Net/SecureStreamSocket.h" -#include "Poco/Net/SecureStreamSocketImpl.h" -#include "Poco/Net/SocketImpl.h" -#include "Poco/Net/SSLManager.h" -#include "Poco/Exception.h" - - -using Poco::InvalidArgumentException; - - -namespace Poco { -namespace Net { - - -SecureStreamSocket::SecureStreamSocket(): - StreamSocket(new SecureStreamSocketImpl(SSLManager::instance().defaultClientContext())) -{ -} - - -SecureStreamSocket::SecureStreamSocket(Context::Ptr pContext): - StreamSocket(new SecureStreamSocketImpl(pContext)) -{ -} - - -SecureStreamSocket::SecureStreamSocket(Context::Ptr pContext, Session::Ptr pSession): - StreamSocket(new SecureStreamSocketImpl(pContext)) -{ - useSession(pSession); -} - - -SecureStreamSocket::SecureStreamSocket(const SocketAddress& address): - StreamSocket(new SecureStreamSocketImpl(SSLManager::instance().defaultClientContext())) -{ - connect(address); -} - - -SecureStreamSocket::SecureStreamSocket(const SocketAddress& address, const std::string& hostName): - StreamSocket(new SecureStreamSocketImpl(SSLManager::instance().defaultClientContext())) -{ - static_cast(impl())->setPeerHostName(hostName); - connect(address); -} - - -SecureStreamSocket::SecureStreamSocket(const SocketAddress& address, Context::Ptr pContext): - StreamSocket(new SecureStreamSocketImpl(pContext)) -{ - connect(address); -} - - -SecureStreamSocket::SecureStreamSocket(const SocketAddress& address, Context::Ptr pContext, Session::Ptr pSession): - StreamSocket(new SecureStreamSocketImpl(pContext)) -{ - useSession(pSession); - connect(address); -} - - -SecureStreamSocket::SecureStreamSocket(const SocketAddress& address, const std::string& hostName, Context::Ptr pContext): - StreamSocket(new SecureStreamSocketImpl(pContext)) -{ - static_cast(impl())->setPeerHostName(hostName); - connect(address); -} - - -SecureStreamSocket::SecureStreamSocket(const SocketAddress& address, const std::string& hostName, Context::Ptr pContext, Session::Ptr pSession): - StreamSocket(new SecureStreamSocketImpl(pContext)) -{ - static_cast(impl())->setPeerHostName(hostName); - useSession(pSession); - connect(address); -} - - -SecureStreamSocket::SecureStreamSocket(const Socket& socket): - StreamSocket(socket) -{ - if (!dynamic_cast(impl())) - throw InvalidArgumentException("Cannot assign incompatible socket"); -} - - -SecureStreamSocket::SecureStreamSocket(SocketImpl* pImpl): - StreamSocket(pImpl) -{ - if (!dynamic_cast(impl())) - throw InvalidArgumentException("Cannot assign incompatible socket"); -} - - -SecureStreamSocket::~SecureStreamSocket() -{ -} - - -SecureStreamSocket& SecureStreamSocket::operator = (const Socket& socket) -{ - if (dynamic_cast(socket.impl())) - StreamSocket::operator = (socket); - else - throw InvalidArgumentException("Cannot assign incompatible socket"); - return *this; -} - - -bool SecureStreamSocket::havePeerCertificate() const -{ - return static_cast(impl())->havePeerCertificate(); -} - - -X509Certificate SecureStreamSocket::peerCertificate() const -{ - return static_cast(impl())->peerCertificate(); -} - - -void SecureStreamSocket::setPeerHostName(const std::string& hostName) -{ - static_cast(impl())->setPeerHostName(hostName); -} - - -const std::string& SecureStreamSocket::getPeerHostName() const -{ - return static_cast(impl())->getPeerHostName(); -} - - -SecureStreamSocket SecureStreamSocket::attach(const StreamSocket& streamSocket) -{ - SecureStreamSocketImpl* pImpl = new SecureStreamSocketImpl(static_cast(streamSocket.impl()), SSLManager::instance().defaultClientContext()); - SecureStreamSocket result(pImpl); - if (pImpl->context()->isForServerUse()) - pImpl->acceptSSL(); - else - pImpl->connectSSL(); - return result; -} - - -SecureStreamSocket SecureStreamSocket::attach(const StreamSocket& streamSocket, Context::Ptr pContext) -{ - SecureStreamSocketImpl* pImpl = new SecureStreamSocketImpl(static_cast(streamSocket.impl()), pContext); - SecureStreamSocket result(pImpl); - if (pImpl->context()->isForServerUse()) - pImpl->acceptSSL(); - else - pImpl->connectSSL(); - return result; -} - - -SecureStreamSocket SecureStreamSocket::attach(const StreamSocket& streamSocket, Context::Ptr pContext, Session::Ptr pSession) -{ - SecureStreamSocketImpl* pImpl = new SecureStreamSocketImpl(static_cast(streamSocket.impl()), pContext); - SecureStreamSocket result(pImpl); - result.useSession(pSession); - if (pImpl->context()->isForServerUse()) - pImpl->acceptSSL(); - else - pImpl->connectSSL(); - return result; -} - - -SecureStreamSocket SecureStreamSocket::attach(const StreamSocket& streamSocket, const std::string& peerHostName) -{ - SecureStreamSocketImpl* pImpl = new SecureStreamSocketImpl(static_cast(streamSocket.impl()), SSLManager::instance().defaultClientContext()); - SecureStreamSocket result(pImpl); - result.setPeerHostName(peerHostName); - if (pImpl->context()->isForServerUse()) - pImpl->acceptSSL(); - else - pImpl->connectSSL(); - return result; -} - - -SecureStreamSocket SecureStreamSocket::attach(const StreamSocket& streamSocket, const std::string& peerHostName, Context::Ptr pContext) -{ - SecureStreamSocketImpl* pImpl = new SecureStreamSocketImpl(static_cast(streamSocket.impl()), pContext); - SecureStreamSocket result(pImpl); - result.setPeerHostName(peerHostName); - if (pImpl->context()->isForServerUse()) - pImpl->acceptSSL(); - else - pImpl->connectSSL(); - return result; -} - - -SecureStreamSocket SecureStreamSocket::attach(const StreamSocket& streamSocket, const std::string& peerHostName, Context::Ptr pContext, Session::Ptr pSession) -{ - SecureStreamSocketImpl* pImpl = new SecureStreamSocketImpl(static_cast(streamSocket.impl()), pContext); - SecureStreamSocket result(pImpl); - result.setPeerHostName(peerHostName); - result.useSession(pSession); - if (pImpl->context()->isForServerUse()) - pImpl->acceptSSL(); - else - pImpl->connectSSL(); - return result; -} - - -Context::Ptr SecureStreamSocket::context() const -{ - return static_cast(impl())->context(); -} - - -void SecureStreamSocket::setLazyHandshake(bool flag) -{ - static_cast(impl())->setLazyHandshake(flag); -} - - -bool SecureStreamSocket::getLazyHandshake() const -{ - return static_cast(impl())->getLazyHandshake(); -} - - -void SecureStreamSocket::verifyPeerCertificate() -{ - static_cast(impl())->verifyPeerCertificate(); -} - - -void SecureStreamSocket::verifyPeerCertificate(const std::string& hostName) -{ - static_cast(impl())->verifyPeerCertificate(hostName); -} - - -int SecureStreamSocket::completeHandshake() -{ - return static_cast(impl())->completeHandshake(); -} - - -Session::Ptr SecureStreamSocket::currentSession() -{ - return static_cast(impl())->currentSession(); -} - - -void SecureStreamSocket::useSession(Session::Ptr pSession) -{ - static_cast(impl())->useSession(pSession); -} - - -bool SecureStreamSocket::sessionWasReused() -{ - return static_cast(impl())->sessionWasReused(); -} - - -void SecureStreamSocket::abort() -{ - static_cast(impl())->abort(); -} - - -} } // namespace Poco::Net diff --git a/contrib/libpoco/NetSSL_OpenSSL/src/SecureStreamSocketImpl.cpp b/contrib/libpoco/NetSSL_OpenSSL/src/SecureStreamSocketImpl.cpp deleted file mode 100644 index efb2fd2f41c..00000000000 --- a/contrib/libpoco/NetSSL_OpenSSL/src/SecureStreamSocketImpl.cpp +++ /dev/null @@ -1,230 +0,0 @@ -// -// SecureStreamSocketImpl.cpp -// -// $Id: //poco/1.4/NetSSL_OpenSSL/src/SecureStreamSocketImpl.cpp#6 $ -// -// Library: NetSSL_OpenSSL -// Package: SSLSockets -// Module: SecureStreamSocketImpl -// -// Copyright (c) 2006-2010, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "Poco/Net/SecureStreamSocketImpl.h" -#include "Poco/Net/SSLException.h" -#include "Poco/Thread.h" - - -namespace Poco { -namespace Net { - - -SecureStreamSocketImpl::SecureStreamSocketImpl(Context::Ptr pContext): - _impl(new StreamSocketImpl, pContext), - _lazyHandshake(false) -{ -} - - -SecureStreamSocketImpl::SecureStreamSocketImpl(StreamSocketImpl* pStreamSocket, Context::Ptr pContext): - _impl(pStreamSocket, pContext), - _lazyHandshake(false) -{ - pStreamSocket->duplicate(); - reset(_impl.sockfd()); -} - - -SecureStreamSocketImpl::~SecureStreamSocketImpl() -{ - try - { - reset(); - } - catch (...) - { - poco_unexpected(); - } -} - - -SocketImpl* SecureStreamSocketImpl::acceptConnection(SocketAddress& clientAddr) -{ - throw Poco::InvalidAccessException("Cannot acceptConnection() on a SecureStreamSocketImpl"); -} - - -void SecureStreamSocketImpl::acceptSSL() -{ - _impl.acceptSSL(); -} - - -void SecureStreamSocketImpl::connect(const SocketAddress& address) -{ - _impl.connect(address, !_lazyHandshake); - reset(_impl.sockfd()); -} - - -void SecureStreamSocketImpl::connect(const SocketAddress& address, const Poco::Timespan& timeout) -{ - _impl.connect(address, timeout, !_lazyHandshake); - reset(_impl.sockfd()); -} - - -void SecureStreamSocketImpl::connectNB(const SocketAddress& address) -{ - _impl.connectNB(address); - reset(_impl.sockfd()); -} - - -void SecureStreamSocketImpl::connectSSL() -{ - _impl.connectSSL(!_lazyHandshake); -} - - -void SecureStreamSocketImpl::bind(const SocketAddress& address, bool reuseAddress) -{ - throw Poco::InvalidAccessException("Cannot bind() a SecureStreamSocketImpl"); -} - - -void SecureStreamSocketImpl::listen(int backlog) -{ - throw Poco::InvalidAccessException("Cannot listen() on a SecureStreamSocketImpl"); -} - - -void SecureStreamSocketImpl::close() -{ - reset(); - _impl.close(); -} - - -void SecureStreamSocketImpl::abort() -{ - reset(); - _impl.abort(); -} - - -int SecureStreamSocketImpl::sendBytes(const void* buffer, int length, int flags) -{ - return _impl.sendBytes(buffer, length, flags); -} - - -int SecureStreamSocketImpl::receiveBytes(void* buffer, int length, int flags) -{ - return _impl.receiveBytes(buffer, length, flags); -} - - -int SecureStreamSocketImpl::sendTo(const void* buffer, int length, const SocketAddress& address, int flags) -{ - throw Poco::InvalidAccessException("Cannot sendTo() on a SecureStreamSocketImpl"); -} - - -int SecureStreamSocketImpl::receiveFrom(void* buffer, int length, SocketAddress& address, int flags) -{ - throw Poco::InvalidAccessException("Cannot receiveFrom() on a SecureStreamSocketImpl"); -} - - -void SecureStreamSocketImpl::sendUrgent(unsigned char data) -{ - throw Poco::InvalidAccessException("Cannot sendUrgent() on a SecureStreamSocketImpl"); -} - - -int SecureStreamSocketImpl::available() -{ - return _impl.available(); -} - - -void SecureStreamSocketImpl::shutdownReceive() -{ -} - - -void SecureStreamSocketImpl::shutdownSend() -{ -} - - -void SecureStreamSocketImpl::shutdown() -{ - _impl.shutdown(); -} - - -bool SecureStreamSocketImpl::secure() const -{ - return true; -} - - -bool SecureStreamSocketImpl::havePeerCertificate() const -{ - X509* pCert = _impl.peerCertificate(); - if (pCert) - { - X509_free(pCert); - return true; - } - else return false; -} - - -X509Certificate SecureStreamSocketImpl::peerCertificate() const -{ - X509* pCert = _impl.peerCertificate(); - if (pCert) - return X509Certificate(pCert); - else - throw SSLException("No certificate available"); -} - - -void SecureStreamSocketImpl::setLazyHandshake(bool flag) -{ - _lazyHandshake = flag; -} - - -bool SecureStreamSocketImpl::getLazyHandshake() const -{ - return _lazyHandshake; -} - - -void SecureStreamSocketImpl::verifyPeerCertificate() -{ - _impl.verifyPeerCertificate(); -} - - -void SecureStreamSocketImpl::verifyPeerCertificate(const std::string& hostName) -{ - _impl.verifyPeerCertificate(hostName); -} - - -int SecureStreamSocketImpl::completeHandshake() -{ - return _impl.completeHandshake(); -} - - -} } // namespace Poco::Net diff --git a/contrib/libpoco/NetSSL_OpenSSL/src/Session.cpp b/contrib/libpoco/NetSSL_OpenSSL/src/Session.cpp deleted file mode 100644 index 8fe7e0f21a8..00000000000 --- a/contrib/libpoco/NetSSL_OpenSSL/src/Session.cpp +++ /dev/null @@ -1,45 +0,0 @@ -// -// Session.cpp -// -// $Id: //poco/1.4/NetSSL_OpenSSL/src/Session.cpp#2 $ -// -// Library: NetSSL_OpenSSL -// Package: SSLCore -// Module: Session -// -// Copyright (c) 2010, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#pragma GCC diagnostic push -#if defined(__APPLE__) -// Some OpenSSL functions are deprecated in OS X 10.7 -#pragma GCC diagnostic ignored "-Wdeprecated-declarations" -#endif - - -#include "Poco/Net/Session.h" - - -namespace Poco { -namespace Net { - - -Session::Session(SSL_SESSION* pSession): - _pSession(pSession) -{ -} - - -Session::~Session() -{ - SSL_SESSION_free(_pSession); -} - - -} } // namespace Poco::Net - -#pragma GCC diagnostic pop diff --git a/contrib/libpoco/NetSSL_OpenSSL/src/Utility.cpp b/contrib/libpoco/NetSSL_OpenSSL/src/Utility.cpp deleted file mode 100644 index ea94ecac84a..00000000000 --- a/contrib/libpoco/NetSSL_OpenSSL/src/Utility.cpp +++ /dev/null @@ -1,73 +0,0 @@ -// -// Utility.cpp -// -// $Id: //poco/1.4/NetSSL_OpenSSL/src/Utility.cpp#1 $ -// -// Library: NetSSL_OpenSSL -// Package: SSLCore -// Module: Utility -// -// Copyright (c) 2006-2009, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "Poco/Net/Utility.h" -#include "Poco/String.h" -#include "Poco/Util/OptionException.h" -#include - - -namespace Poco { -namespace Net { - - -Context::VerificationMode Utility::convertVerificationMode(const std::string& vMode) -{ - std::string mode = Poco::toLower(vMode); - Context::VerificationMode verMode = Context::VERIFY_STRICT; - - if (mode == "none") - verMode = Context::VERIFY_NONE; - else if (mode == "relaxed") - verMode = Context::VERIFY_RELAXED; - else if (mode == "strict") - verMode = Context::VERIFY_STRICT; - else if (mode == "once") - verMode = Context::VERIFY_ONCE; - else - throw Poco::InvalidArgumentException("Invalid verification mode. Should be relaxed, strict or once but got", vMode); - - return verMode; -} - - -std::string Utility::convertCertificateError(long errCode) -{ - std::string errMsg(X509_verify_cert_error_string(errCode)); - return errMsg; -} - - -std::string Utility::getLastError() -{ - unsigned long errCode = ERR_get_error(); - if (errCode != 0) - { - char buffer[256]; - ERR_error_string_n(errCode, buffer, sizeof(buffer)); - return std::string(buffer); - } - else return "No error"; -} - - -void Utility::clearErrorStack() -{ - ERR_clear_error(); -} - - -} } // namespace Poco::Net diff --git a/contrib/libpoco/NetSSL_OpenSSL/src/VerificationErrorArgs.cpp b/contrib/libpoco/NetSSL_OpenSSL/src/VerificationErrorArgs.cpp deleted file mode 100644 index d90be6fe664..00000000000 --- a/contrib/libpoco/NetSSL_OpenSSL/src/VerificationErrorArgs.cpp +++ /dev/null @@ -1,39 +0,0 @@ -// -// VerificationErrorArgs.cpp -// -// $Id: //poco/1.4/NetSSL_OpenSSL/src/VerificationErrorArgs.cpp#1 $ -// -// Library: NetSSL_OpenSSL -// Package: SSLCore -// Module: VerificationErrorArgs -// -// Copyright (c) 2006-2009, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "Poco/Net/VerificationErrorArgs.h" - - -namespace Poco { -namespace Net { - - -VerificationErrorArgs::VerificationErrorArgs(const X509Certificate& cert, int errDepth, int errNum, const std::string& errMsg): - _cert(cert), - _errorDepth(errDepth), - _errorNumber(errNum), - _errorMessage(errMsg), - _ignoreError(false) -{ -} - - -VerificationErrorArgs::~VerificationErrorArgs() -{ -} - - -} } // namespace Poco::Net diff --git a/contrib/libpoco/NetSSL_OpenSSL/src/X509Certificate.cpp b/contrib/libpoco/NetSSL_OpenSSL/src/X509Certificate.cpp deleted file mode 100644 index a0463b2a609..00000000000 --- a/contrib/libpoco/NetSSL_OpenSSL/src/X509Certificate.cpp +++ /dev/null @@ -1,161 +0,0 @@ -// -// X509Certificate.cpp -// -// $Id: //poco/1.4/NetSSL_OpenSSL/src/X509Certificate.cpp#4 $ -// -// Library: NetSSL_OpenSSL -// Package: SSLCore -// Module: X509Certificate -// -// Copyright (c) 2006-2009, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "Poco/Net/X509Certificate.h" -#include "Poco/Net/SSLException.h" -#include "Poco/Net/SSLManager.h" -#include "Poco/Net/DNS.h" -#include "Poco/TemporaryFile.h" -#include "Poco/FileStream.h" -#include "Poco/StreamCopier.h" -#include "Poco/String.h" -#include "Poco/RegularExpression.h" -#include "Poco/DateTimeParser.h" -#include -#include -#include - - -namespace Poco { -namespace Net { - - -X509Certificate::X509Certificate(std::istream& istr): - Poco::Crypto::X509Certificate(istr) -{ -} - - -X509Certificate::X509Certificate(const std::string& path): - Poco::Crypto::X509Certificate(path) -{ -} - - -X509Certificate::X509Certificate(X509* pCert): - Poco::Crypto::X509Certificate(pCert) -{ -} - - -X509Certificate::X509Certificate(X509* pCert, bool shared): - Poco::Crypto::X509Certificate(pCert, shared) -{ -} - - -X509Certificate::X509Certificate(const Poco::Crypto::X509Certificate& cert): - Poco::Crypto::X509Certificate(cert) -{ -} - - -X509Certificate& X509Certificate::operator = (const Poco::Crypto::X509Certificate& cert) -{ - X509Certificate tmp(cert); - swap(tmp); - return *this; -} - - -X509Certificate::~X509Certificate() -{ -} - - -bool X509Certificate::verify(const std::string& hostName) const -{ - return verify(*this, hostName); -} - - -bool X509Certificate::verify(const Poco::Crypto::X509Certificate& certificate, const std::string& hostName) -{ - std::string commonName; - std::set dnsNames; - certificate.extractNames(commonName, dnsNames); - if (!commonName.empty()) dnsNames.insert(commonName); - bool ok = (dnsNames.find(hostName) != dnsNames.end()); - if (!ok) - { - for (std::set::const_iterator it = dnsNames.begin(); !ok && it != dnsNames.end(); ++it) - { - try - { - // two cases: name contains wildcards or not - if (containsWildcards(*it)) - { - // a compare by IPAddress is not possible with wildcards - // only allow compare by name - ok = matchWildcard(*it, hostName); - } - else - { - // it depends on hostName whether we compare by IP or by alias - IPAddress ip; - if (IPAddress::tryParse(hostName, ip)) - { - // compare by IP - const HostEntry& heData = DNS::resolve(*it); - const HostEntry::AddressList& addr = heData.addresses(); - HostEntry::AddressList::const_iterator it = addr.begin(); - HostEntry::AddressList::const_iterator itEnd = addr.end(); - for (; it != itEnd && !ok; ++it) - { - ok = (*it == ip); - } - } - else - { - ok = Poco::icompare(*it, hostName) == 0; - } - } - } - catch (NoAddressFoundException&) - { - } - catch (HostNotFoundException&) - { - } - } - } - return ok; -} - - -bool X509Certificate::containsWildcards(const std::string& commonName) -{ - return (commonName.find('*') != std::string::npos || commonName.find('?') != std::string::npos); -} - - -bool X509Certificate::matchWildcard(const std::string& wildcard, const std::string& hostName) -{ - // fix wildcards - std::string wildcardExpr("^"); - wildcardExpr += Poco::replace(wildcard, ".", "\\."); - Poco::replaceInPlace(wildcardExpr, "*", ".*"); - Poco::replaceInPlace(wildcardExpr, "..*", ".*"); - Poco::replaceInPlace(wildcardExpr, "?", ".?"); - Poco::replaceInPlace(wildcardExpr, "..?", ".?"); - wildcardExpr += "$"; - - Poco::RegularExpression expr(wildcardExpr, Poco::RegularExpression::RE_CASELESS); - return expr.match(hostName); -} - - -} } // namespace Poco::Net diff --git a/contrib/libpoco/NetSSL_OpenSSL/testsuite/CMakeLists.txt b/contrib/libpoco/NetSSL_OpenSSL/testsuite/CMakeLists.txt deleted file mode 100644 index 5819a70d9c9..00000000000 --- a/contrib/libpoco/NetSSL_OpenSSL/testsuite/CMakeLists.txt +++ /dev/null @@ -1,28 +0,0 @@ -set(TESTUNIT "${LIBNAME}-testrunner") - -# Sources -file(GLOB SRCS_G "src/*.cpp") -POCO_SOURCES_AUTO( TEST_SRCS ${SRCS_G}) - -# Headers -file(GLOB_RECURSE HDRS_G "src/*.h" ) -POCO_HEADERS_AUTO( TEST_SRCS ${HDRS_G}) - -POCO_SOURCES_AUTO_PLAT( TEST_SRCS OFF - src/WinDriver.cpp -) - -POCO_SOURCES_AUTO_PLAT( TEST_SRCS WINCE - src/WinCEDriver.cpp -) - -add_executable( ${TESTUNIT} ${TEST_SRCS} ) -add_test(NAME ${LIBNAME} WORKING_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY} COMMAND ${TESTUNIT} -all) -target_link_libraries( ${TESTUNIT} PocoNetSSL PocoCrypto PocoNet PocoUtil PocoXML PocoFoundation CppUnit) - -# The test is run in the build directory. So the test data is copied there too -add_custom_command(TARGET ${TESTUNIT} POST_BUILD - COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/any.pem ${CMAKE_RUNTIME_OUTPUT_DIRECTORY} - COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/rootcert.pem ${CMAKE_RUNTIME_OUTPUT_DIRECTORY} - COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/testrunner.xml ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${TESTUNIT}.xml - ) diff --git a/contrib/libpoco/NetSSL_OpenSSL/testsuite/TestSuite.xml b/contrib/libpoco/NetSSL_OpenSSL/testsuite/TestSuite.xml deleted file mode 100644 index 9ca7058a232..00000000000 --- a/contrib/libpoco/NetSSL_OpenSSL/testsuite/TestSuite.xml +++ /dev/null @@ -1,48 +0,0 @@ - - - - ${application.configDir}any.pem - ${application.configDir}rootcert.pem - none - 9 - true - ALL:!ADH:!LOW:!EXP:!MD5:@STRENGTH - - KeyFileHandler - - secret - - - - AcceptCertificateHandler - - - - - - ${application.configDir}any.pem - ${application.configDir}rootcert.pem - relaxed - 9 - true - ALL:!ADH:!LOW:!EXP:!MD5:@STRENGTH - - KeyFileHandler - - secret - - - - AcceptCertificateHandler - - - - - - - - proxy.aon.at - 8080 - - - diff --git a/contrib/libpoco/NetSSL_OpenSSL/testsuite/TestSuitemt.xml b/contrib/libpoco/NetSSL_OpenSSL/testsuite/TestSuitemt.xml deleted file mode 100644 index 9ca7058a232..00000000000 --- a/contrib/libpoco/NetSSL_OpenSSL/testsuite/TestSuitemt.xml +++ /dev/null @@ -1,48 +0,0 @@ - - - - ${application.configDir}any.pem - ${application.configDir}rootcert.pem - none - 9 - true - ALL:!ADH:!LOW:!EXP:!MD5:@STRENGTH - - KeyFileHandler - - secret - - - - AcceptCertificateHandler - - - - - - ${application.configDir}any.pem - ${application.configDir}rootcert.pem - relaxed - 9 - true - ALL:!ADH:!LOW:!EXP:!MD5:@STRENGTH - - KeyFileHandler - - secret - - - - AcceptCertificateHandler - - - - - - - - proxy.aon.at - 8080 - - - diff --git a/contrib/libpoco/NetSSL_OpenSSL/testsuite/any.pem b/contrib/libpoco/NetSSL_OpenSSL/testsuite/any.pem deleted file mode 100644 index 37d97c850cb..00000000000 --- a/contrib/libpoco/NetSSL_OpenSSL/testsuite/any.pem +++ /dev/null @@ -1,54 +0,0 @@ ------BEGIN CERTIFICATE----- -MIIEFjCCAv6gAwIBAgIBAjALBgkqhkiG9w0BAQUwgdMxEzARBgNVBAMMCmFwcGlu -Zi5jb20xNjA0BgNVBAoMLUFwcGxpZWQgSW5mb3JtYXRpY3MgU29mdHdhcmUgRW5n -aW5lZXJpbmcgR21iSDEUMBIGA1UECwwLRGV2ZWxvcG1lbnQxEjAQBgNVBAgMCUNh -cmludGhpYTELMAkGA1UEBgwCQVQxHjAcBgNVBAcMFVN0LiBKYWtvYiBpbSBSb3Nl -bnRhbDEtMCsGCSqGSIb3DQEJAQweZ3VlbnRlci5vYmlsdHNjaG5pZ0BhcHBpbmYu -Y29tMB4XDTA5MDIyMzEzNDIwMloXDTExMTEyMDEzNDIwMlowgcoxCjAIBgNVBAMM -ASoxNjA0BgNVBAoMLUFwcGxpZWQgSW5mb3JtYXRpY3MgU29mdHdhcmUgRW5naW5l -ZXJpbmcgR21iSDEUMBIGA1UECwwLRGV2ZWxvcG1lbnQxEjAQBgNVBAgMCUNhcmlu -dGhpYTELMAkGA1UEBgwCQVQxHjAcBgNVBAcMFVN0LiBKYWtvYiBpbSBSb3NlbnRh -bDEtMCsGCSqGSIb3DQEJAQweZ3VlbnRlci5vYmlsdHNjaG5pZ0BhcHBpbmYuY29t -MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxjGFE96wa83Kdiv0m10O -XmBmZ5xuclalVTCisLzUmAekbItMjkmI6dVw9r5gd0W5zDWrgPYUmYgtvqnxSHRK -PRAN410Yq9vqWYvQscpnXGlqUag8t+OBXJhiFnnea/btA0zGVZk6RE/7cWK8AtKH -Q/Xds3AUJ1L/1uV/e/5azyUDyptsmHbCMUwWhGBrj/KZEviHmRMN/xJLrbIBPkla -4HRB61rI8in0jziCwThJ7KiQumzWRu2IJjS+VoNWvG52dYLDvfxppuY1rlF0SG/h -JuSJQqJjZZ11V4TePHscFkGU2tnHqF4UhSjLFJWsGuxnAmZTeIRmavmIIMm3/G6C -WwIDAQABMA0GCSqGSIb3DQEBBQUAA4IBAQAc+mn/ZEaK59B/UAgx8cMlGM9UigJv -L9O46pno3YirBq9SrMzf5b6rrbJm8tkQNfldqaVNA5oVbfxnAHhCUDkX8m0x/De8 -teo9nFei8kETQ25ykV+WLapOdrYxakHPtNVgDTGWNb2GY/hH3nMvtdgFvaS80ncD -tOa13tE4jopFQFY56VKq+sv4Hm5JDvr+dD/g77Cio02sUzSH96FrFIG5/kw1NihB -IJKZ4n7atQizDe4TiR/NRonmZNbsB+18yTKT8traCS30JGKQqYxXuVKPyQd7FARv -ajZxRPbcpAtvWBKXpRHXo4xIBJaPktVOG2hGovjRixXYb83hQ87t1Ozy ------END CERTIFICATE----- ------BEGIN RSA PRIVATE KEY----- -Proc-Type: 4,ENCRYPTED -DEK-Info: DES-EDE3-CBC,0950752701CB74AF - -OmaLdMcP3JDy8JMX41wNH/WvMp6gLGwmqQRob633n95YxVdii0oR8fk4GgmJeYF0 -FrNm5g32vnVyqDZylX4as3GT822HhCA+f7mYpGZltQ47TG15tGTMUNuwIhHlouZs -ZGNclelBB3FHEZAD0Fns2hZ4jZhMDj67wD0YyGcp8so/A+fxedGdwNbJSC1Auuy4 -7uRsY0ZJC1LjMHXkyBEXaL1QA4CGjBlm22Dbo8eoGXcaohsZpDsM7OU7MaQnldM0 -AK8jONZ45127JoDJD41Wgfm0m7tIErsD5CbhHPaddOjQ0OerprEkplhOR+V+ano1 -Pv4adRZOBjr00NDB43WK9x+ZHVQ5tIXxUbqYWZAfvA1PpiYego5XLUCxfy7D6Lms -hV6CAt/fYeBrQOvwLREboKLBOe9A8quP2wi7zkR3KQHty9Tm9efF3PfQSxJTlKg9 -YJ2n/6omX1aXCjQghbnfEcl4tCmj6z2rHCSiJgEOcwDYhGRbQveYieZUH5iKMzYY -YytHkHPfZfzhlJ0WG0AKdA6UlrjEjF09txaZR3Nj4Zf4kZAu727N81HnlFCRvDqV -ZjHUrbE7fJuc3diffUfIHuQZuWcoYDejIbASjcJMHZOpbbPR2ZCYQqUmvg/IgAD6 -M2GDbvfvLnu1BaCrNMdOxM4j+sLNhm8qqAMxZ/wkZA9Sqhi2EifZwf5jWKNU3Vtx -C/w621efHawDME3WTMunDtjn7Sgm3NP508cz8OgcEcZLwENu8JH5pWR0Y0+qvlPM -DYpCu2Zh6TBLU6Cfuxl2GigHHBhm8Eza/vE6dVbpyvEozejtVKi+RYskqz8ynYtl -r9NpDkEFcqGFLX/X7fajR4JxzxYx0Ms+CHHBlBLw44eMl1Izb9OBgfUK3a7wJ0Z1 -vEmzcVtXZMqKDvqY3wddCcbtpVZhRnAUFgT3/b5ISxQ6xxFg67YQaJ0knuRwOZCI -xSvNsxXb6s5xt8gRx8MY8W1CVW0QSH4gUpKdJFiF/6nYq7h8F1A5QYr34uJn5pa2 -bsagCMhCUHKn/hrtTJ/4bC7n7utulXyEZJDGS38nNe5TBmAxeA+MkOAO7AEb8aDo -RylaKT77tmeZXWBtlQGHj0bt2fPOEW3e0WUeNwk4qnKqSGdwbXGFK+yWxgGOxFDT -4NqUjDV7lhj1r3mKEufLIqP6GxAlewpH1uLA+ty2eNfG793pytlyhNikzmkliXex -WnBUYQM6ZBclW0nALHxxOJWZlnBCESgo9lSHMeB7adJXuwaUmqHx4u+yNzaFS6pr -LemBEUCHfLeGFM9E9YbgNe51q5+vXZYN5MZtqyex4AqPdGEGpwXBk43RK79mP84G -QQRAAcs6KMj1/Sl7pmg9acrxskLWljtsnvdCJ8a+VXjLDyp2wks1z2Gnw7cguZdD -Ah4hjH8LDTsEJxOr2DNJu/V9JDPKd0uGyaW0AOanwAn7tszivGddb/WrzImCIMBa -Lb/cqujvS9YsIK6xrq4LMxR5wE6Hol0qs6xO89Y9OpuuRxAYfRUl4nDTg0WjS5Ga -0aoSXB0kOFkEwb3WGq+b26606RBYDKu7RsJoyWoXq42JZ1jkEYKCNeNS8hWh8GKd ------END RSA PRIVATE KEY----- diff --git a/contrib/libpoco/NetSSL_OpenSSL/testsuite/rootcert.pem b/contrib/libpoco/NetSSL_OpenSSL/testsuite/rootcert.pem deleted file mode 100644 index 71470bafc4e..00000000000 --- a/contrib/libpoco/NetSSL_OpenSSL/testsuite/rootcert.pem +++ /dev/null @@ -1,3971 +0,0 @@ ------BEGIN CERTIFICATE----- -MIIG0zCCBbugAwIBAgIBADANBgkqhkiG9w0BAQUFADCBzDELMAkGA1UEBhMCQVQx -EDAOBgNVBAgTB0F1c3RyaWExDzANBgNVBAcTBlZpZW5uYTE6MDgGA1UEChMxQVJH -RSBEQVRFTiAtIEF1c3RyaWFuIFNvY2lldHkgZm9yIERhdGEgUHJvdGVjdGlvbjEl -MCMGA1UECxMcQS1DRVJUIENlcnRpZmljYXRpb24gU2VydmljZTEYMBYGA1UEAxMP -QS1DRVJUIEFEVkFOQ0VEMR0wGwYJKoZIhvcNAQkBFg5pbmZvQGEtY2VydC5hdDAe -Fw0wNDEwMjMxNDE0MTRaFw0xMTEwMjMxNDE0MTRaMIHMMQswCQYDVQQGEwJBVDEQ -MA4GA1UECBMHQXVzdHJpYTEPMA0GA1UEBxMGVmllbm5hMTowOAYDVQQKEzFBUkdF -IERBVEVOIC0gQXVzdHJpYW4gU29jaWV0eSBmb3IgRGF0YSBQcm90ZWN0aW9uMSUw -IwYDVQQLExxBLUNFUlQgQ2VydGlmaWNhdGlvbiBTZXJ2aWNlMRgwFgYDVQQDEw9B -LUNFUlQgQURWQU5DRUQxHTAbBgkqhkiG9w0BCQEWDmluZm9AYS1jZXJ0LmF0MIIB -IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA3euXIy+mnf6BYKbK+QH5k679 -tUFqeT8jlZxMew8eNiHuw9KoxWBzL6KksK+5uK7Gatw+sbAYntEGE80P+Jg1hADM -e+Fr5V0bc6QS3gkVtfUCW/RIvfMM39oxvmqJmOgPnJU7H6+nmLtsq61tv9kVJi/2 -4Y5wXW3odet72sF57EoG6s78w0BUVLNcMngS9bZZzmdG3/d6JbkGgoNF/8DcgCBJ -W/t0JrcIzyppXIOVtUzzOrrU86zuUgT3Rtkl5kjG7DEHpFb9H0fTOY1v8+gRoaO6 -2gA0PCiysgVZjwgVeYe3KAg11nznyleDv198uK3Dc1oXIGYjJx2FpKWUvAuAEwID -AQABo4ICvDCCArgwHQYDVR0OBBYEFDd/Pj6ZcWDKJNSRE3nQdCm0qCTYMIH5BgNV -HSMEgfEwge6AFDd/Pj6ZcWDKJNSRE3nQdCm0qCTYoYHSpIHPMIHMMQswCQYDVQQG -EwJBVDEQMA4GA1UECBMHQXVzdHJpYTEPMA0GA1UEBxMGVmllbm5hMTowOAYDVQQK -EzFBUkdFIERBVEVOIC0gQXVzdHJpYW4gU29jaWV0eSBmb3IgRGF0YSBQcm90ZWN0 -aW9uMSUwIwYDVQQLExxBLUNFUlQgQ2VydGlmaWNhdGlvbiBTZXJ2aWNlMRgwFgYD -VQQDEw9BLUNFUlQgQURWQU5DRUQxHTAbBgkqhkiG9w0BCQEWDmluZm9AYS1jZXJ0 -LmF0ggEAMA8GA1UdEwEB/wQFMAMBAf8wCwYDVR0PBAQDAgHmMEcGA1UdJQRAMD4G -CCsGAQUFBwMBBggrBgEFBQcDAgYIKwYBBQUHAwMGCCsGAQUFBwMEBggrBgEFBQcD -CAYKKwYBBAGCNwoDBDARBglghkgBhvhCAQEEBAMCAP8wUQYDVR0gBEowSDBGBggq -KAAYAQEBAzA6MDgGCCsGAQUFBwIBFixodHRwOi8vd3d3LmEtY2VydC5hdC9jZXJ0 -aWZpY2F0ZS1wb2xpY3kuaHRtbDA7BglghkgBhvhCAQgELhYsaHR0cDovL3d3dy5h -LWNlcnQuYXQvY2VydGlmaWNhdGUtcG9saWN5Lmh0bWwwGQYDVR0RBBIwEIEOaW5m -b0BhLWNlcnQuYXQwLwYDVR0SBCgwJoEOaW5mb0BhLWNlcnQuYXSGFGh0dHA6Ly93 -d3cuYS1jZXJ0LmF0MEUGA1UdHwQ+MDwwOqA4oDaGNGh0dHBzOi8vc2VjdXJlLmEt -Y2VydC5hdC9jZ2ktYmluL2EtY2VydC1hZHZhbmNlZC5jZ2kwDQYJKoZIhvcNAQEF -BQADggEBACX1IvgfdG2rvfv35O48vSEvcVaEdlN8USFBHWz3JRAozgzvaBtwHkjK -Zwt5l/BWOtjbvHfRjDt7ijlBEcxOOrNC1ffyMHwHrXpvff6YpQ5wnxmIYEQcURiG -HMqruEX0WkuDNgSKwefsgXs27eeBauHgNGVcTYH1rmHu/ZyLpLxOyJQ2PCzA1DzW -3rWkIX92ogJ7lTRdWrbxwUL1XGinxnnaQ74+/y0pI9JNEv7ic2tpkweRMpkedaLW -msC1+orfKTebsg69aMaCx7o6jNONRmR/7TVaPf8/k6g52cHZ9YWjQvup22b5rWxG -J5r5LZ4vCPmF4+T4lutjUYAa/lGuQTg= ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIDXTCCAkWgAwIBAgIDAOJCMA0GCSqGSIb3DQEBBQUAMFUxCzAJBgNVBAYTAkFU -MRAwDgYDVQQKEwdBLVRydXN0MRkwFwYDVQQLExBBLVRydXN0LW5RdWFsLTAxMRkw -FwYDVQQDExBBLVRydXN0LW5RdWFsLTAxMB4XDTA0MTEzMDIzMDAwMFoXDTE0MTEz -MDIzMDAwMFowVTELMAkGA1UEBhMCQVQxEDAOBgNVBAoTB0EtVHJ1c3QxGTAXBgNV -BAsTEEEtVHJ1c3QtblF1YWwtMDExGTAXBgNVBAMTEEEtVHJ1c3QtblF1YWwtMDEw -ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQD/9RyAEZ6eHmhYzNJ328f0 -jmdSUFi6EqRqOxb3jHNPTIpK82CR6z5lmSnZQNUuCPD+htbNZffd2DKVB06NOyZ1 -2zcOMCgj4GtkZoqE0zPpPT3bpoE55nkZZe/qWEX/64wz/L/4EdkvKDSKG/UsP75M -tmCVY5m2Eg73RVFRz4ccBIMpHel4lzEqSkdDtZOY5fnkrE333hx67nxq21vY8Eyf -8O4fPQ5RtN8eohQCcPQ1z6ypU1R7N9jPRpnI+yzMOiwd3+QcKhHi1miCzo0pkOaB -1CwmfsTyNl8qU0NJUL9Ta6cea7WThwTiWol2yD88cd2cy388xpbNkfrCPmZNGLoV -AgMBAAGjNjA0MA8GA1UdEwEB/wQFMAMBAf8wEQYDVR0OBAoECE5ZzscCMocwMA4G -A1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOCAQEA69I9R1hU9Gbl9vV7W7AH -QpUJAlFAvv2It/eY8p2ouQUPVaSZikaKtAYrCD/arzfXB43Qet+dM6CpHsn8ikYR -vQKePjXv3Evf+C1bxwJAimcnZV6W+bNOTpdo8lXljxkmfN+Z5S+XzvK2ttUtP4Et -YOVaxHw2mPMNbvDeY+foJkiBn3KYjGabMaR8moZqof5ofj4iS/WyamTZti6v/fKx -n1vII+/uWkcxV5DT5+r9HLon0NYF0Vg317Wh+gWDV59VZo+dcwJDb+keYqMFYoqp -77SGkZGu41S8NGYkQY3X9rNHRkDbLfpKYDmy6NanpOE1EHW1/sNSFAs43qZZKJEQ -xg== ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIDzzCCAregAwIBAgIDAWweMA0GCSqGSIb3DQEBBQUAMIGNMQswCQYDVQQGEwJB -VDFIMEYGA1UECgw/QS1UcnVzdCBHZXMuIGYuIFNpY2hlcmhlaXRzc3lzdGVtZSBp -bSBlbGVrdHIuIERhdGVudmVya2VociBHbWJIMRkwFwYDVQQLDBBBLVRydXN0LW5R -dWFsLTAzMRkwFwYDVQQDDBBBLVRydXN0LW5RdWFsLTAzMB4XDTA1MDgxNzIyMDAw -MFoXDTE1MDgxNzIyMDAwMFowgY0xCzAJBgNVBAYTAkFUMUgwRgYDVQQKDD9BLVRy -dXN0IEdlcy4gZi4gU2ljaGVyaGVpdHNzeXN0ZW1lIGltIGVsZWt0ci4gRGF0ZW52 -ZXJrZWhyIEdtYkgxGTAXBgNVBAsMEEEtVHJ1c3QtblF1YWwtMDMxGTAXBgNVBAMM -EEEtVHJ1c3QtblF1YWwtMDMwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB -AQCtPWFuA/OQO8BBC4SAzewqo51ru27CQoT3URThoKgtUaNR8t4j8DRE/5TrzAUj -lUC5B3ilJfYKvUWG6Nm9wASOhURh73+nyfrBJcyFLGM/BWBzSQXgYHiVEEvc+RFZ -znF/QJuKqiTfC0Li21a8StKlDJu3Qz7dg9MmEALP6iPESU7l0+m0iKsMrmKS1GWH -2WrX9IWf5DMiJaXlyDO6w8dB3F/GaswADm0yqLaHNgBid5seHzTLkDx4iHQF63n1 -k3Flyp3HaxgtPVxO59X4PzF9j4fsCiIvI+n+u33J4PTs63zEsMMtYrWacdaxaujs -2e3Vcuy+VwHOBVWf3tFgiBCzAgMBAAGjNjA0MA8GA1UdEwEB/wQFMAMBAf8wEQYD -VR0OBAoECERqlWdVeRFPMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOC -AQEAVdRU0VlIXLOThaq/Yy/kgM40ozRiPvbY7meIMQQDbwvUB/tOdQ/TLtPAF8fG -KOwGDREkDg6lXb+MshOWcdzUzg4NCmgybLlBMRmrsQd7TZjTXLDR8KdCoLXEjq/+ -8T/0709GAHbrAvv5ndJAlseIOrifEXnzgGWovR/TeIGgUUw3tKZdJXDRZslo+S4R -FGjxVJgIrCaSD96JntT6s3kr0qN51OyLrIdTaEJMUVF0HhsnLuP1Hyl0Te2v9+GS -mYHovjrHF1D2t8b8m7CKa9aIA5GPBnc6hQLdmNVDeD/GMBWsm2vLV7eJUYs66MmE -DNuxUCAKGkq6ahq97BvIxYSazQ== ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIEUzCCAzugAwIBAgIDAOJDMA0GCSqGSIb3DQEBBQUAMIHPMQswCQYDVQQGEwJB -VDGBizCBiAYDVQQKHoGAAEEALQBUAHIAdQBzAHQAIABHAGUAcwAuACAAZgD8AHIA -IABTAGkAYwBoAGUAcgBoAGUAaQB0AHMAcwB5AHMAdABlAG0AZQAgAGkAbQAgAGUA -bABlAGsAdAByAC4AIABEAGEAdABlAG4AdgBlAHIAawBlAGgAcgAgAEcAbQBiAEgx -GDAWBgNVBAsTD0EtVHJ1c3QtUXVhbC0wMTEYMBYGA1UEAxMPQS1UcnVzdC1RdWFs -LTAxMB4XDTA0MTEzMDIzMDAwMFoXDTE0MTEzMDIzMDAwMFowgc8xCzAJBgNVBAYT -AkFUMYGLMIGIBgNVBAoegYAAQQAtAFQAcgB1AHMAdAAgAEcAZQBzAC4AIABmAPwA -cgAgAFMAaQBjAGgAZQByAGgAZQBpAHQAcwBzAHkAcwB0AGUAbQBlACAAaQBtACAA -ZQBsAGUAawB0AHIALgAgAEQAYQB0AGUAbgB2AGUAcgBrAGUAaAByACAARwBtAGIA -SDEYMBYGA1UECxMPQS1UcnVzdC1RdWFsLTAxMRgwFgYDVQQDEw9BLVRydXN0LVF1 -YWwtMDEwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCmhgdxIbxTGEOH -fXGiewI3NFldAWKFWfLofO+5I1UbvA5avt7IgsGXz/tI/f5HGUbascI0i7xG0tqV -lA5ctQgLRqxgxHtgTkMcqsAEYdsz3LZsCdXO1QrvEBGLTSABdxiL/gSWJ6z77CSw -x7Xg02HwxPV82cjGkSF3ENGJntuIAAnRDWn/ORHjFatNRymoMbHaOEZXSGhf7Y5F -rrHEqGyi9E6sv784De/T1aTvskn8cWeUmDzv//omiG/a/V9KQex/61XN8OthUQVn -X+u/liL2NKx74I2C/GgHX5B0WkPNqsSOgmlvJ/cKuT0PveUgVFDAA0oYBgcE1KDM -lBbN0kmPAgMBAAGjNjA0MA8GA1UdEwEB/wQFMAMBAf8wEQYDVR0OBAoECEs8jB2F -6W+tMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOCAQEAIUusmJzMJRiQ -8TAHrJAOelfuWoTGcqdIv7Tys/fNl2yF2fjvHT8J01aKialFVpbVeQ2XKb1O2bHO -QYAKgsdZ2jZ/sdL2UVFRTHmidLu6PdgWCBRhJYQELQophO9QVvfhAA0TwbESYqTz -+nlI5Gr7CZe8f6HEmhJmCtUQsdQCufGglRh4T+tIGiNGcnyVEHZ93mSVepFr1VA2 -9CTRPteuGjA81jeAz9peYiFE1CXvxK9cJiv0BcALFLWmADCoRLzIRZhA+sAwYUmw -M1rqVCPA3kBQvIC95tyQvNy2dG0Vs+O6PwLaNX/suSlElQ06X2l1VwMaYb4vZKFq -N0bOhBXEVg== ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIDyzCCArOgAwIBAgIDAOJIMA0GCSqGSIb3DQEBBQUAMIGLMQswCQYDVQQGEwJB -VDFIMEYGA1UECgw/QS1UcnVzdCBHZXMuIGYuIFNpY2hlcmhlaXRzc3lzdGVtZSBp -bSBlbGVrdHIuIERhdGVudmVya2VociBHbWJIMRgwFgYDVQQLDA9BLVRydXN0LVF1 -YWwtMDIxGDAWBgNVBAMMD0EtVHJ1c3QtUXVhbC0wMjAeFw0wNDEyMDIyMzAwMDBa -Fw0xNDEyMDIyMzAwMDBaMIGLMQswCQYDVQQGEwJBVDFIMEYGA1UECgw/QS1UcnVz -dCBHZXMuIGYuIFNpY2hlcmhlaXRzc3lzdGVtZSBpbSBlbGVrdHIuIERhdGVudmVy -a2VociBHbWJIMRgwFgYDVQQLDA9BLVRydXN0LVF1YWwtMDIxGDAWBgNVBAMMD0Et -VHJ1c3QtUXVhbC0wMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJaR -q9eOsFm4Ab20Hq2Z/aH86gyWa48uSUjY6eQkguHYuszr3gdcSMYZggFHQgnhfLmf -ro/27l5rqKhWiDhWs+b+yZ1PNDhRPJy+86ycHMg9XJqErveULBSyZDdgjhSwOyrN -ibUir/fkf+4sKzP5jjytTKJXD/uCxY4fAd9TjMEVpN3umpIS0ijpYhclYDHvzzGU -833z5Dwhq5D8bc9jp8YSAHFJ1xzIoO1jmn3jjyjdYPnY5harJtHQL73nDQnfbtTs -5ThT9GQLulrMgLU4WeyAWWWEMWpfVZFMJOUkmoOEer6A8e5fIAeqdxdsC+JVqpZ4 -CAKel/Arrlj1gFA//jsCAwEAAaM2MDQwDwYDVR0TAQH/BAUwAwEB/zARBgNVHQ4E -CgQIQj0rJKbBRc4wDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBBQUAA4IBAQBG -yxFjUA2bPkXUSC2SfJ29tmrbiLKal+g6a9M8Xwd+Ejo+oYkNP6F4GfeDtAXpm7xb -9Ly8lhdbHcpRhzCUQHJ1tBCiGdLgmhSx7TXjhhanKOdDgkdsC1T+++piuuYL72TD -gUy2Sb1GHlJ1Nc6rvB4fpxSDAOHqGpUq9LWsc3tFkXqRqmQVtqtR77npKIFBioc6 -2jTBwDMPX3hDJDR1DSPc6BnZliaNw2IHdiMQ0mBoYeRnFdq+TyDKsjmJOOQPLzzL -/saaw6F891+gBjLFEFquDyR73lAPJS279R3csi8WWk4ZYUC/1V8H3Ktip/J6ac8e -qhLCbmJ81Lo92JGHz/ot ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIEMjCCAxqgAwIBAgIBATANBgkqhkiG9w0BAQUFADB7MQswCQYDVQQGEwJHQjEb -MBkGA1UECAwSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRow -GAYDVQQKDBFDb21vZG8gQ0EgTGltaXRlZDEhMB8GA1UEAwwYQUFBIENlcnRpZmlj -YXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAwMDAwMFoXDTI4MTIzMTIzNTk1OVowezEL -MAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UE -BwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENBIExpbWl0ZWQxITAfBgNVBAMM -GEFBQSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCCASIwDQYJKoZIhvcNAQEBBQADggEP -ADCCAQoCggEBAL5AnfRu4ep2hxxNRUSOvkbIgwadwSr+GB+O5AL686tdUIoWMQua -BtDFcCLNSS1UY8y2bmhGC1Pqy0wkwLxyTurxFa70VJoSCsN6sjNg4tqJVfMiWPPe -3M/vg4aijJRPn2jymJBGhCfHdr/jzDUsi14HZGWCwEiwqJH5YZ92IFCokcdmtet4 -YgNW8IoaE+oxox6gmf049vYnMlhvB/VruPsUK6+3qszWY19zjNoFmag4qMsXeDZR -rOme9Hg6jc8P2ULimAyrL58OAd7vn5lJ8S3frHRNG5i1R8XlKdH5kBjHYpy+g8cm -ez6KJcfA3Z3mNWgQIJ2P2N7Sw4ScDV7oL8kCAwEAAaOBwDCBvTAdBgNVHQ4EFgQU -oBEKIz6W8Qfs4q8p74Klf9AwpLQwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQF -MAMBAf8wewYDVR0fBHQwcjA4oDagNIYyaHR0cDovL2NybC5jb21vZG9jYS5jb20v -QUFBQ2VydGlmaWNhdGVTZXJ2aWNlcy5jcmwwNqA0oDKGMGh0dHA6Ly9jcmwuY29t -b2RvLm5ldC9BQUFDZXJ0aWZpY2F0ZVNlcnZpY2VzLmNybDANBgkqhkiG9w0BAQUF -AAOCAQEACFb8AvCb6P+k+tZ7xkSAzk/ExfYAWMymtrwUSWgEdujm7l3sAg9g1o1Q -GE8mTgHj5rCl7r+8dFRBv/38ErjHT1r0iWAFf2C3BUrz9vHCv8S5dIa2LX1rzNLz -Rt0vxuBqw8M0Ayx9lt1awg6nCpnBBYurDC/zXDrPbDdVCYfeU0BsWO/8tqtlbgT2 -G9w84FoVxp7Z8VlIMCFlA2zs6SFz7JsDoeA3raAVGI/6ugLOpyypEBMs1OUIJqsi -l2D4kF501KKaU73yqWjgom7C12yxow+ev+to51byrvLjKzg6CYG1a4XXvi3tPxq3 -smPi9WIsgtRqAEFQ8TmDn5XpNpaYbg== ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIGZjCCBE6gAwIBAgIPB35Sk3vgFeNX8GmMy+wMMA0GCSqGSIb3DQEBBQUAMHsx -CzAJBgNVBAYTAkNPMUcwRQYDVQQKDD5Tb2NpZWRhZCBDYW1lcmFsIGRlIENlcnRp -ZmljYWNpw7NuIERpZ2l0YWwgLSBDZXJ0aWPDoW1hcmEgUy5BLjEjMCEGA1UEAwwa -QUMgUmHDrXogQ2VydGljw6FtYXJhIFMuQS4wHhcNMDYxMTI3MjA0NjI5WhcNMzAw -NDAyMjE0MjAyWjB7MQswCQYDVQQGEwJDTzFHMEUGA1UECgw+U29jaWVkYWQgQ2Ft -ZXJhbCBkZSBDZXJ0aWZpY2FjacOzbiBEaWdpdGFsIC0gQ2VydGljw6FtYXJhIFMu -QS4xIzAhBgNVBAMMGkFDIFJhw616IENlcnRpY8OhbWFyYSBTLkEuMIICIjANBgkq -hkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAq2uJo1PMSCMI+8PPUZYILrgIem08kBeG -qentLhM0R7LQcNzJPNCNyu5LF6vQhbCnIwTLqKL85XXbQMpiiY9QngE9JlsYhBzL -fDe3fezTf3MZsGqy2IiKLUV0qPezuMDU2s0iiXRNWhU5cxh0T7XrmafBHoi0wpOQ -Y5fzp6cSsgkiBzPZkc0OnB8OIMfuuzONj8LSWKdf/WU34ojC2I+GdV75LaeHM/J4 -Ny+LvB2GNzmxlPLYvEqcgxhaBvzz1NS6jBUJJfD5to0EfhcSM2tXSExP2yYe68yQ -54v5aHxwD6Mq0Do43zeX4lvegGHTgNiRg0JaTASJaBE8rF9ogEHMYELODVoqDA+b -MMCm8Ibbq0nXl21Ii/kDwFJnmxL3wvIumGVC2daa49AZMQyth9VXAnow6IYm+48j -ilSH5L887uvDdUhfHjlvgWJsxS3EF1QZtzeNnDeRyPYL1epjb4OsOMLzP96a++Ej -YfDIJss2yKHzMI+ko6Kh3VOz3vCaMh+DkXkwwakfU5tTohVTP92dsxA7SH2JD/zt -A/X7JWR1DhcZDY8AFmd5ekD8LVkH2ZD6mq093ICK5lw1omdMEWux+IBkAC1vImHF -rEsm5VoQgpukg3s0956JkSCXjrdCx2bD0Omk1vUgjcTDlaxECp1bczwmPS9KvqfJ -pxAe+59QafMCAwEAAaOB5jCB4zAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQE -AwIBBjAdBgNVHQ4EFgQU0QnQ6dfOeXRU+Tows/RtLAMDG2gwgaAGA1UdIASBmDCB -lTCBkgYEVR0gADCBiTArBggrBgEFBQcCARYfaHR0cDovL3d3dy5jZXJ0aWNhbWFy -YS5jb20vZHBjLzBaBggrBgEFBQcCAjBOGkxMaW1pdGFjaW9uZXMgZGUgZ2FyYW50 -7WFzIGRlIGVzdGUgY2VydGlmaWNhZG8gc2UgcHVlZGVuIGVuY29udHJhciBlbiBs -YSBEUEMuMA0GCSqGSIb3DQEBBQUAA4ICAQBclLW4RZFNjmEfAygPU3zmpFmps4p6 -xbD/CHwso3EcIRNnoZUSQDWDg4902zNc8El2CoFS3UnUmjIz75uny3XlesuXEpBc -unvFm9+7OSPI/5jOCk0iAUgHforA1SBClETvv3eiiWdIG0ADBaGJ7M9i4z0ldma/ -Jre7Ir5v/zlXdLp6yQGVwZVR6Kss+LGGIOk/yzVb0hfpKv6DExdA7ohiZVvVO2Dp -ezy4ydV/NgIlqmjCMRW3MGXrfx1IebHPOeJCgBbT9ZMj/EyXyVo3bHwi2ErN0o42 -gzmRkBDI8ck1fj+404HGIGQatlDCIaR43NAvO2STdPCWkPHv+wlaNECW8DYSwaN0 -jJN+Qd53i+yG2dIPPy3RzECiiWZIHiCznCNZc6lEc7wkeZBWN7PGKX6jD/EpOe9+ -XCgycDWs2rjIdWb8m0w5R44bb5tNAlQiM+9hup4phO9OSzNHdpdqy35f/RWmnkJD -W2ZaiogN9xa5P1FlK2Zqi9E4UqLWRhH6/JocdJ6PlwsCT2TG9WjTSy3/pDceiz+/ -RL5hRqGEPQgnTIEgd4kI6mdAXmwIUV80WoyWaM3X94nCHNMyAK9Sy9NgWyo6R35r -MDOhYil/SrnhLecUIw4OGEfhefwVVdCx/CVxY3UzHCMrr1zZ7Ud3YA47Dx7SwNxk -BYn8eNZcLCZDqQ== ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIEGDCCAwCgAwIBAgIBATANBgkqhkiG9w0BAQUFADBlMQswCQYDVQQGEwJTRTEU -MBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3 -b3JrMSEwHwYDVQQDExhBZGRUcnVzdCBDbGFzcyAxIENBIFJvb3QwHhcNMDAwNTMw -MTAzODMxWhcNMjAwNTMwMTAzODMxWjBlMQswCQYDVQQGEwJTRTEUMBIGA1UEChML -QWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSEwHwYD -VQQDExhBZGRUcnVzdCBDbGFzcyAxIENBIFJvb3QwggEiMA0GCSqGSIb3DQEBAQUA -A4IBDwAwggEKAoIBAQCWltQhSWDia+hBBwzexODcEyPNwTXH+9ZOEQpnXvUGW2ul -CDtbKRY654eyNAbFvAWlA3yCyykQruGIgb3WntP+LVbBFc7jJp0VLhD7Bo8wBN6n -tGO0/7Gcrjyvd7ZWxbWroulpOj0OM3kyP3CCkplhbY0wCI9xP6ZIVxn4JdxLZlyl -dI+Yrsj5wAYi56xz36Uu+1LcsRVlIPo1Zmne3yzxbrww2ywkEtvrNTVokMsAsJch -PXQhI2U0K7t4WaPW4XY5mqRJjox0r26kmqPZm9I4XJuiGMx1I4S+6+JNM3GOGvDC -+Mcdoq0Dlyz4zyXG9rgkMbFjXZJ/Y/AlyVMuH79NAgMBAAGjgdIwgc8wHQYDVR0O -BBYEFJWxtPCUtr3H2tERCSG+wa9J/RB7MAsGA1UdDwQEAwIBBjAPBgNVHRMBAf8E -BTADAQH/MIGPBgNVHSMEgYcwgYSAFJWxtPCUtr3H2tERCSG+wa9J/RB7oWmkZzBl -MQswCQYDVQQGEwJTRTEUMBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFk -ZFRydXN0IFRUUCBOZXR3b3JrMSEwHwYDVQQDExhBZGRUcnVzdCBDbGFzcyAxIENB -IFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBACxtZBsfzQ3duQH6lmM0MkhHma6X -7f1yFqZzR1r0693p9db7RcwpiURdv0Y5PejuvE1Uhh4dbOMXJ0PhiVYrqW9yTkkz -43J8KiOavD7/KCrto/8cI7pDVwlnTUtiBi34/2ydYB7YHEt9tTEv2dB8Xfjea4MY -eDdXL+gzB2ffHsdrKpV2ro9Xo/D0UrSpUwjP4E/TelOL/bscVjby/rK25Xa71SJl -pz/+0WatC7xrmYbvP33zGDLKe8bjq2RGlfgmadlVg3sslgf/WSxEo8bl6ancoWOA -WiFeIc9TVPC6b4nbqKqVz4vjccweGyBECMB6tkD9xOQ14R0WHNC8K47Wcdk= ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIENjCCAx6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBvMQswCQYDVQQGEwJTRTEU -MBIGA1UEChMLQWRkVHJ1c3QgQUIxJjAkBgNVBAsTHUFkZFRydXN0IEV4dGVybmFs -IFRUUCBOZXR3b3JrMSIwIAYDVQQDExlBZGRUcnVzdCBFeHRlcm5hbCBDQSBSb290 -MB4XDTAwMDUzMDEwNDgzOFoXDTIwMDUzMDEwNDgzOFowbzELMAkGA1UEBhMCU0Ux -FDASBgNVBAoTC0FkZFRydXN0IEFCMSYwJAYDVQQLEx1BZGRUcnVzdCBFeHRlcm5h -bCBUVFAgTmV0d29yazEiMCAGA1UEAxMZQWRkVHJ1c3QgRXh0ZXJuYWwgQ0EgUm9v -dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALf3GjPm8gAELTngTlvt -H7xsD821+iO2zt6bETOXpClMfZOfvUq8k+0DGuOPz+VtUFrWlymUWoCwSXrbLpX9 -uMq/NzgtHj6RQa1wVsfwTz/oMp50ysiQVOnGXw94nZpAPA6sYapeFI+eh6FqUNzX -mk6vBbOmcZSccbNQYArHE504B4YCqOmoaSYYkKtMsE8jqzpPhNjfzp/haW+710LX -a0Tkx63ubUFfclpxCDezeWWkWaCUN/cALw3CknLa0Dhy2xSoRcRdKn23tNbE7qzN -E0S3ySvdQwAl+mG5aWpYIxG3pzOPVnVZ9c0p10a3CitlttNCbxWyuHv77+ldU9U0 -WicCAwEAAaOB3DCB2TAdBgNVHQ4EFgQUrb2YejS0Jvf6xCZU7wO94CTLVBowCwYD -VR0PBAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wgZkGA1UdIwSBkTCBjoAUrb2YejS0 -Jvf6xCZU7wO94CTLVBqhc6RxMG8xCzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRU -cnVzdCBBQjEmMCQGA1UECxMdQWRkVHJ1c3QgRXh0ZXJuYWwgVFRQIE5ldHdvcmsx -IjAgBgNVBAMTGUFkZFRydXN0IEV4dGVybmFsIENBIFJvb3SCAQEwDQYJKoZIhvcN -AQEFBQADggEBALCb4IUlwtYj4g+WBpKdQZic2YR5gdkeWxQHIzZlj7DYd7usQWxH -YINRsPkyPef89iYTx4AWpb9a/IfPeHmJIZriTAcKhjW88t5RxNKWt9x+Tu5w/Rw5 -6wwCURQtjr0W4MHfRnXnJK3s9EK0hZNwEGe6nQY1ShjTK3rMUUKhemPR5ruhxSvC -Nr4TDea9Y355e6cJDUCrat2PisP29owaQgVR1EX1n6diIWgVIEM8med8vSTYqZEX -c4g/VhsxOBi0cQ+azcgOno4uG+GMmIPLHzHxREzGBHNJdmAPx/i9F4BrLunMTA5a -mnkPIAou1Z5jJh5VkpTYghdae9C8x49OhgQ= ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIEFTCCAv2gAwIBAgIBATANBgkqhkiG9w0BAQUFADBkMQswCQYDVQQGEwJTRTEU -MBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3 -b3JrMSAwHgYDVQQDExdBZGRUcnVzdCBQdWJsaWMgQ0EgUm9vdDAeFw0wMDA1MzAx -MDQxNTBaFw0yMDA1MzAxMDQxNTBaMGQxCzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtB -ZGRUcnVzdCBBQjEdMBsGA1UECxMUQWRkVHJ1c3QgVFRQIE5ldHdvcmsxIDAeBgNV -BAMTF0FkZFRydXN0IFB1YmxpYyBDQSBSb290MIIBIjANBgkqhkiG9w0BAQEFAAOC -AQ8AMIIBCgKCAQEA6Rowj4OIFMEg2Dybjxt+A3S72mnTRqX4jsIMEZBRpS9mVEBV -6tsfSlbunyNu9DnLoblv8n75XYcmYZ4c+OLspoH4IcUkzBEMP9smcnrHAZcHF/nX -GCwwfQ56HmIexkvA/X1id9NEHif2P0tEs7c42TkfYNVRknMDtABp4/MUTu7R3AnP -dzRGULD4EfL+OHn3Bzn+UZKXC1sIXzSGAa2Il+tmzV7R/9x98oTaunet3IAIx6eH -1lWfl2royBFkuucZKT8Rs3iQhCBSWxHveNCD9tVIkNAwHM+A+WD+eeSI8t0A65RF -62WUaUC6wNW0uLp9BBGo6zEFlpROWCGOn9Bg/QIDAQABo4HRMIHOMB0GA1UdDgQW -BBSBPjfYkrAfd59ctKtzquf2NGAv+jALBgNVHQ8EBAMCAQYwDwYDVR0TAQH/BAUw -AwEB/zCBjgYDVR0jBIGGMIGDgBSBPjfYkrAfd59ctKtzquf2NGAv+qFopGYwZDEL -MAkGA1UEBhMCU0UxFDASBgNVBAoTC0FkZFRydXN0IEFCMR0wGwYDVQQLExRBZGRU -cnVzdCBUVFAgTmV0d29yazEgMB4GA1UEAxMXQWRkVHJ1c3QgUHVibGljIENBIFJv -b3SCAQEwDQYJKoZIhvcNAQEFBQADggEBAAP3FUr4JNojVhaTdt02KLmuG7jD8WS6 -IBh4lSknVwW8fCr0uVFV2ocC3g8WFzH4qnkuCRO7r7IgGRLlk/lL+YPoRNWyQSW/ -iHVv/xD8SlTQX/D67zZzfRs2RcYhbbQVuE7PnFylPVoAjgbjPGsye/Kf8Lb93/Ao -GEjwxrzQvzSAlsJKsW2Ox5BF3i9nrEUEo3rcVZLJR2bYGozH7ZxOmuASu7VqTITh -4SINhwBk/ox9Yjllpu9CtoAlEmEBqCQTcAARJl/6NVDFSMwGR+gn2HCNX2TmoUQm -XiLsks3/QppEIW1cxeMiHV9HEufOX1362KqxMy3ZdvJOOjMMK7MtkAY= ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIEHjCCAwagAwIBAgIBATANBgkqhkiG9w0BAQUFADBnMQswCQYDVQQGEwJTRTEU -MBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3 -b3JrMSMwIQYDVQQDExpBZGRUcnVzdCBRdWFsaWZpZWQgQ0EgUm9vdDAeFw0wMDA1 -MzAxMDQ0NTBaFw0yMDA1MzAxMDQ0NTBaMGcxCzAJBgNVBAYTAlNFMRQwEgYDVQQK -EwtBZGRUcnVzdCBBQjEdMBsGA1UECxMUQWRkVHJ1c3QgVFRQIE5ldHdvcmsxIzAh -BgNVBAMTGkFkZFRydXN0IFF1YWxpZmllZCBDQSBSb290MIIBIjANBgkqhkiG9w0B -AQEFAAOCAQ8AMIIBCgKCAQEA5B6a/twJWoekn0e+EV+vhDTbYjx5eLfpMLXsDBwq -xBb/4Oxx64r1EW7tTw2R0hIYLUkVAcKkIhPHEWT/IhKauY5cLwjPcWqzZwFZ8V1G -87B4pfYOQnrjfxvM0PC3KP0q6p6zsLkEqv32x7SxuCqg+1jxGaBvcCV+PmlKfw8i -2O+tCBGaKZnhqkRFmhJePp1tUvznoD1oL/BLcHwTOK28FSXx1s6rosAx1i+f4P8U -WfyEk9mHfExUE+uf0S0R+Bg6Ot4l2ffTQO2kBhLEO+GRwVY18BTcZTYJbqukB8c1 -0cIDMzZbdSZtQvESa0NvS3GU+jQd7RNuyoB/mC9suWXY6QIDAQABo4HUMIHRMB0G -A1UdDgQWBBQ5lYtii1zJ1IC6WA+XPxUIQ8yYpzALBgNVHQ8EBAMCAQYwDwYDVR0T -AQH/BAUwAwEB/zCBkQYDVR0jBIGJMIGGgBQ5lYtii1zJ1IC6WA+XPxUIQ8yYp6Fr -pGkwZzELMAkGA1UEBhMCU0UxFDASBgNVBAoTC0FkZFRydXN0IEFCMR0wGwYDVQQL -ExRBZGRUcnVzdCBUVFAgTmV0d29yazEjMCEGA1UEAxMaQWRkVHJ1c3QgUXVhbGlm -aWVkIENBIFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBABmrder4i2VhlRO6aQTv -hsoToMeqT2QbPxj2qC0sVY8FtzDqQmodwCVRLae/DLPt7wh/bDxGGuoYQ992zPlm -hpwsaPXpF/gxsxjE1kh9I0xowX67ARRvxdlu3rsEQmr49lx95dr6h+sNNVJn0J6X -dgWTP5XHAeZpVTh/EGGZyeNfpso+gmNIquIISD6q8rKFYqa0p9m9N5xotS1WfbC3 -P6CxB9bpT9zeRXEwMn8bLgn5v1Kh7sKAPgZcLlVAwRv1cEWw3F369nJad9Jjzc9Y -iQBCYz95OdBEsIJuQRno3eDBiFrRHnGTHyQwdOUeqN48Jzd/g66ed8/wMLH/S5no -xqE= ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIDpDCCAoygAwIBAgIBATANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEc -MBoGA1UEChMTQW1lcmljYSBPbmxpbmUgSW5jLjE2MDQGA1UEAxMtQW1lcmljYSBP -bmxpbmUgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAxMB4XDTAyMDUyODA2 -MDAwMFoXDTM3MTExOTIwNDMwMFowYzELMAkGA1UEBhMCVVMxHDAaBgNVBAoTE0Ft -ZXJpY2EgT25saW5lIEluYy4xNjA0BgNVBAMTLUFtZXJpY2EgT25saW5lIFJvb3Qg -Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkgMTCCASIwDQYJKoZIhvcNAQEBBQADggEP -ADCCAQoCggEBAKgv6KRpBgNHw+kqmP8ZonCaxlCyfqXfaE0bfA+2l2h9LaaLl+lk -hsmj76CGv2BlnEtUiMJIxUo5vxTjWVXlGbR0yLQFOVwWpeKVBeASrlmLojNoWBym -1BW32J/X3HGrfpq/m44zDyL9Hy7nBzbvYjnF3cu6JRQj3gzGPTzOggjmZj7aUTsW -OqMFf6Dch9Wc/HKpoH145LcxVR5lu9RhsCFg7RAycsWSJR74kEoYeEfffjA3PlAb -2xzTa5qGUwew76wGePiEmf4hjUyAtgyC9mZweRrTT6PP8c9GsEsPPt2IYriMqQko -O3rHl+Ee5fSfwMCuJKDIodkP1nsmgmkyPacCAwEAAaNjMGEwDwYDVR0TAQH/BAUw -AwEB/zAdBgNVHQ4EFgQUAK3Zo/Z59m50qX8zPYEX10zPM94wHwYDVR0jBBgwFoAU -AK3Zo/Z59m50qX8zPYEX10zPM94wDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEB -BQUAA4IBAQB8itEfGDeC4Liwo+1WlchiYZwFos3CYiZhzRAW18y0ZTTQEYqtqKkF -Zu90821fnZmv9ov761KyBZiibyrFVL0lvV+uyIbqRizBs73B6UlwGBaXCBOMIOAb -LjpHyx7kADCVW/RFo8AasAFOq73AI25jP4BKxQft3OJvx8Fi8eNy1gTIdGcL+oir -oQHIb/AUr9KZzVGTfu0uOMe9zkZQPXLjeSWdm4grECDdpbgyn43gKd8hdIaC2y+C -MMbHNYaz+ZZfRtsMRf3zUMNvxsNIrUam4SdHCh0Om7bCd39j8uB9Gr784N/Xx6ds -sPmuujz9dLQR6FgNgLzTqIA6me11zEZ7 ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIFpDCCA4ygAwIBAgIBATANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEc -MBoGA1UEChMTQW1lcmljYSBPbmxpbmUgSW5jLjE2MDQGA1UEAxMtQW1lcmljYSBP -bmxpbmUgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAyMB4XDTAyMDUyODA2 -MDAwMFoXDTM3MDkyOTE0MDgwMFowYzELMAkGA1UEBhMCVVMxHDAaBgNVBAoTE0Ft -ZXJpY2EgT25saW5lIEluYy4xNjA0BgNVBAMTLUFtZXJpY2EgT25saW5lIFJvb3Qg -Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkgMjCCAiIwDQYJKoZIhvcNAQEBBQADggIP -ADCCAgoCggIBAMxBRR3pPU0Q9oyxQcngXssNt79Hc9PwVU3dxgz6sWYFas14tNwC -206B89enfHG8dWOgXeMHDEjsJcQDIPT/DjsS/5uN4cbVG7RtIuOx238hZK+GvFci -KtZHgVdEglZTvYYUAQv8f3SkWq7xuhG1m1hagLQ3eAkzfDJHA1zEpYNI9FdWboE2 -JxhP7JsowtS013wMPgwr38oE18aO6lhOqKSlGBxsRZijQdEt0sdtjRnxrXm3gT+9 -BoInLRBYBbV4Bbkv2wxrkJB+FFk4u5QkE+XRnRTf04JNRvCAOVIyD+OEsnpD8l7e -Xz8d3eOyG6ChKiMDbi4BFYdcpnV1x5dhvt6G3NRI270qv0pV2uh9UPu0gBe4lL8B -PeraunzgWGcXuVjgiIZGZ2ydEEdYMtA1fHkqkKJaEBEjNa0vzORKW6fIJ/KD3l67 -Xnfn6KVuY8INXWHQjNJsWiEOyiijzirplcdIz5ZvHZIlyMbGwcEMBawmxNJ10uEq -Z8A9W6Wa6897GqidFEXlD6CaZd4vKL3Ob5Rmg0gp2OpljK+T2WSfVVcmv2/LNzGZ -o2C7HK2JNDJiuEMhBnIMoVxtRsX6Kc8w3onccVvdtjc+31D1uAclJuW8tf48ArO3 -+L5DwYcRlJ4jbBeKuIonDFRH8KmzwICMoCfrHRnjB453cMor9H124HhnAgMBAAGj -YzBhMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFE1FwWg4u3OpaaEg5+31IqEj -FNeeMB8GA1UdIwQYMBaAFE1FwWg4u3OpaaEg5+31IqEjFNeeMA4GA1UdDwEB/wQE -AwIBhjANBgkqhkiG9w0BAQUFAAOCAgEAZ2sGuV9FOypLM7PmG2tZTiLMubekJcmn -xPBUlgtk87FYT15R/LKXeydlwuXK5w0MJXti4/qftIe3RUavg6WXSIylvfEWK5t2 -LHo1YGwRgJfMqZJS5ivmae2p+DYtLHe/YUjRYwu5W1LtGLBDQiKmsXeu3mnFzccc -obGlHBD7GL4acN3Bkku+KVqdPzW+5X1R+FXgJXUjhx5c3LqdsKyzadsXg8n33gy8 -CNyRnqjQ1xU3c6U1uPx+xURABsPr+CKAXEfOAuMRn0T//ZoyzH1kUQ7rVyZ2OuMe -IjzCpjbdGe+n/BLzJsBZMYVMnNjP36TMzCmT/5RtdlwTCJfy7aULTd3oyWgOZtMA -DjMSW7yV5TKQqLPGbIOtd+6Lfn6xqavT4fG2wLHqiMDn05DpKJKUe2h7lyoKZy2F -AjgQ5ANh1NolNscIWC2hp1GvMApJ9aZphwctREZ2jirlmjvXGKL8nDgQzMY70rUX -Om/9riW99XJZZLF0KjhfGEzfz3EEWjbUvy+ZnOjZurGV5gJLIaFb1cFPj65pbVPb -AZO1XB4Y3WRayhgoPmMEEf0cjQAPuDffZ4qdZqkCapH/E8ovXYO8h5Ns3CRRFgQl -Zvqz2cK6Kb6aSDiCmfS/O0oxGfm/jiEzFMpPVF/7zvuPcX/9XhmgD0uRuMRUvAaw -RY8mkaKO/qk= ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIID5jCCAs6gAwIBAgIBATANBgkqhkiG9w0BAQUFADCBgzELMAkGA1UEBhMCVVMx -HTAbBgNVBAoTFEFPTCBUaW1lIFdhcm5lciBJbmMuMRwwGgYDVQQLExNBbWVyaWNh -IE9ubGluZSBJbmMuMTcwNQYDVQQDEy5BT0wgVGltZSBXYXJuZXIgUm9vdCBDZXJ0 -aWZpY2F0aW9uIEF1dGhvcml0eSAxMB4XDTAyMDUyOTA2MDAwMFoXDTM3MTEyMDE1 -MDMwMFowgYMxCzAJBgNVBAYTAlVTMR0wGwYDVQQKExRBT0wgVGltZSBXYXJuZXIg -SW5jLjEcMBoGA1UECxMTQW1lcmljYSBPbmxpbmUgSW5jLjE3MDUGA1UEAxMuQU9M -IFRpbWUgV2FybmVyIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgMTCCASIw -DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJnej8Mlo2k06AX3dLm/WpcZuS+U -0pPlLYnKhHw/EEMbjIt8hFj4JHxIzyr9wBXZGH6EGhfT257XyuTZ16pYUYfw8ItI -TuLCxFlpMGK2MKKMCxGZYTVtfu/FsRkGIBKOQuHfD5YQUqjPnF+VFNivO3ULMSAf -RC+iYkGzuxgh28pxPIzstrkNn+9R7017EvILDOGsQI93f7DKeHEMXRZxcKLXwjqF -zQ6axOAAsNUl6twr5JQtOJyJQVdkKGUZHLZEtMgxa44Be3ZZJX8VHIQIfHNlIAqh -BC4aMqiaILGcLCFZ5/vP7nAtCMpjPiybkxlqpMKX/7eGV4iFbJ4VFitNLLMCAwEA -AaNjMGEwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUoTYwFsuGkABFgFOxj8jY -PXy+XxIwHwYDVR0jBBgwFoAUoTYwFsuGkABFgFOxj8jYPXy+XxIwDgYDVR0PAQH/ -BAQDAgGGMA0GCSqGSIb3DQEBBQUAA4IBAQCKIBilvrMvtKaEAEAwKfq0FHNMeUWn -9nDg6H5kHgqVfGphwu9OH77/yZkfB2FK4V1Mza3u0FIy2VkyvNp5ctZ7CegCgTXT -Ct8RHcl5oIBN/lrXVtbtDyqvpxh1MwzqwWEFT2qaifKNuZ8u77BfWgDrvq2g+EQF -Z7zLBO+eZMXpyD8Fv8YvBxzDNnGGyjhmSs3WuEvGbKeXO/oTLW4jYYehY0KswsuX -n2Fozy1MBJ3XJU8KDk2QixhWqJNIV9xvrr2eZ1d3iVCzvhGbRWeDhhmH05i9CBoW -H1iCC+GWaQVLjuyDUTEH1dSf/1l7qG6Fz9NLqUmwX7A5KGgOc90lmt4S ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIF5jCCA86gAwIBAgIBATANBgkqhkiG9w0BAQUFADCBgzELMAkGA1UEBhMCVVMx -HTAbBgNVBAoTFEFPTCBUaW1lIFdhcm5lciBJbmMuMRwwGgYDVQQLExNBbWVyaWNh -IE9ubGluZSBJbmMuMTcwNQYDVQQDEy5BT0wgVGltZSBXYXJuZXIgUm9vdCBDZXJ0 -aWZpY2F0aW9uIEF1dGhvcml0eSAyMB4XDTAyMDUyOTA2MDAwMFoXDTM3MDkyODIz -NDMwMFowgYMxCzAJBgNVBAYTAlVTMR0wGwYDVQQKExRBT0wgVGltZSBXYXJuZXIg -SW5jLjEcMBoGA1UECxMTQW1lcmljYSBPbmxpbmUgSW5jLjE3MDUGA1UEAxMuQU9M -IFRpbWUgV2FybmVyIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgMjCCAiIw -DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALQ3WggWmRToVbEbJGv8x4vmh6mJ -7ouZzU9AhqS2TcnZsdw8TQ2FTBVsRotSeJ/4I/1n9SQ6aF3Q92RhQVSji6UI0ilb -m2BPJoPRYxJWSXakFsKlnUWsi4SVqBax7J/qJBrvuVdcmiQhLE0OcR+mrF1FdAOY -xFSMFkpBd4aVdQxHAWZg/BXxD+r1FHjHDtdugRxev17nOirYlxcwfACtCJ0zr7iZ -YYCLqJV+FNwSbKTQ2O9ASQI2+W6p1h2WVgSysy0WVoaP2SBXgM1nEG2wTPDaRrbq -JS5Gr42whTg0ixQmgiusrpkLjhTXUr2eacOGAgvqdnUxCc4zGSGFQ+aJLZ8lN2fx -I2rSAG2X+Z/nKcrdH9cG6rjJuQkhn8g/BsXS6RJGAE57COtCPStIbp1n3UsC5ETz -kxmlJ85per5n0/xQpCyrw2u544BMzwVhSyvcG7mm0tCq9Stz+86QNZ8MUhy/XCFh -EVsVS6kkUfykXPcXnbDS+gfpj1bkGoxoigTTfFrjnqKhynFbotSg5ymFXQNoKk/S -Btc9+cMDLz9l+WceR0DTYw/j1Y75hauXTLPXJuuWCpTehTacyH+BCQJJKg71ZDIM -gtG6aoIbs0t0EfOMd9afv9w3pKdVBC/UMejTRrkDfNoSTllkt1ExMVCgyhwn2RAu -rda9EGYrw7AiShJbAgMBAAGjYzBhMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYE -FE9pbQN+nZ8HGEO8txBO1b+pxCAoMB8GA1UdIwQYMBaAFE9pbQN+nZ8HGEO8txBO -1b+pxCAoMA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQUFAAOCAgEAO/Ouyugu -h4X7ZVnnrREUpVe8WJ8kEle7+z802u6teio0cnAxa8cZmIDJgt43d15Ui47y6mdP -yXSEkVYJ1eV6moG2gcKtNuTxVBFT8zRFASbI5Rq8NEQh3q0l/HYWdyGQgJhXnU7q -7C+qPBR7V8F+GBRn7iTGvboVsNIYvbdVgaxTwOjdaRITQrcCtQVBynlQboIOcXKT -RuidDV29rs4prWPVVRaAMCf/drr3uNZK49m1+VLQTkCpx+XCMseqdiThawVQ68W/ -ClTluUI8JPu3B5wwn3la5uBAUhX0/Kr0VvlEl4ftDmVyXr4m+02kLQgH3thcoNyB -M5kYJRF3p+v9WAksmWsbivNSPxpNSGDxoPYzAlOL7SUJuA0t7Zdz7NeWH45gDtoQ -my8YJPamTQr5O8t1wswvziRpyQoijlmn94IM19drNZxDAGrElWe6nEXLuA4399xO -AU++CrYD062KRffaJ00psUjf5BHklka9bAI+1lHIlRcBFanyqqryvy9lG2/QuRqT -9Y41xICHPpQvZuTpqP9BnHAqTyo5GJUefvthATxRCC4oGKQWDzH9OmwjkyB24f0H -hdFbP9IcczLd+rn4jM8Ch3qaluTtT4mNU0OrDhPAARW0eTjb/G49nlG2uBOLZ8/5 -fNkiHfZdxRwBL5joeiQYvITX+txyW/fBOmg= ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIEuzCCA6OgAwIBAgIBAjANBgkqhkiG9w0BAQUFADBiMQswCQYDVQQGEwJVUzET -MBEGA1UEChMKQXBwbGUgSW5jLjEmMCQGA1UECxMdQXBwbGUgQ2VydGlmaWNhdGlv -biBBdXRob3JpdHkxFjAUBgNVBAMTDUFwcGxlIFJvb3QgQ0EwHhcNMDYwNDI1MjE0 -MDM2WhcNMzUwMjA5MjE0MDM2WjBiMQswCQYDVQQGEwJVUzETMBEGA1UEChMKQXBw -bGUgSW5jLjEmMCQGA1UECxMdQXBwbGUgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkx -FjAUBgNVBAMTDUFwcGxlIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw -ggEKAoIBAQDkkakJH5HbHkdQ6wXtXnmELes2oldMVeyLGYne+Uts9QerIjAC6Bg+ -+FAJ039BqJj50cpmnCRrEdCju+QbKsMflZ56DKRHi1vUFjczy8QPTc4UadHJGXL1 -XQ7Vf1+b8iUDulWPTV0N8WQ1IxVLFVkds5T39pyez1C6wVhQZ48ItCD3y6wsIG9w -tj8BMIy3Q88PnT3zK0koGsj+zrW5DtleHNbLPbU6rfQPDgCSC7EhFi501TwN22IW -q6NxkkdTVcGvL0Gz+PvjcM3mo0xFfh9Ma1CWQYnEdGILEINBhzOKgbEwWOxaBDKM -aLOPHd5lc/9nXmW8Sdh2nzMUZaF3lMktAgMBAAGjggF6MIIBdjAOBgNVHQ8BAf8E -BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUK9BpR5R2Cf70a40uQKb3 -R01/CF4wHwYDVR0jBBgwFoAUK9BpR5R2Cf70a40uQKb3R01/CF4wggERBgNVHSAE -ggEIMIIBBDCCAQAGCSqGSIb3Y2QFATCB8jAqBggrBgEFBQcCARYeaHR0cHM6Ly93 -d3cuYXBwbGUuY29tL2FwcGxlY2EvMIHDBggrBgEFBQcCAjCBthqBs1JlbGlhbmNl -IG9uIHRoaXMgY2VydGlmaWNhdGUgYnkgYW55IHBhcnR5IGFzc3VtZXMgYWNjZXB0 -YW5jZSBvZiB0aGUgdGhlbiBhcHBsaWNhYmxlIHN0YW5kYXJkIHRlcm1zIGFuZCBj -b25kaXRpb25zIG9mIHVzZSwgY2VydGlmaWNhdGUgcG9saWN5IGFuZCBjZXJ0aWZp -Y2F0aW9uIHByYWN0aWNlIHN0YXRlbWVudHMuMA0GCSqGSIb3DQEBBQUAA4IBAQBc -NplMLXi37Yyb3PN3m/J20ncwT8EfhYOFG5k9RzfyqZtAjizUsZAS2L70c5vu0mQP -y3lPNNiiPvl4/2vIB+x9OYOLUyDTOMSxv5pPCmv/K/xZpwUJfBdAVhEedNO3iyM7 -R6PVbyTi69G3cN8PReEnyvFteO3ntRcXqNx+IjXKJdXZD9Zr1KIkIxH3oayPc4Fg -xhtbCS+SsvhESPBgOJ4V9T0mZyCKM2r3DYLP3uujL/lTaltkwGMzd/c6ByxW69oP -IQ7aunMZT7XZNn/Bh1XZp5m5MkL72NVxnn6hUrcbvZNCJBIqxw8dtk2cXmPIS4AX -UKqK1drk/NAJBzewdXUh ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIFujCCBKKgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBhjELMAkGA1UEBhMCVVMx -HTAbBgNVBAoTFEFwcGxlIENvbXB1dGVyLCBJbmMuMS0wKwYDVQQLEyRBcHBsZSBD -b21wdXRlciBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkxKTAnBgNVBAMTIEFwcGxlIFJv -b3QgQ2VydGlmaWNhdGUgQXV0aG9yaXR5MB4XDTA1MDIxMDAwMTgxNFoXDTI1MDIx -MDAwMTgxNFowgYYxCzAJBgNVBAYTAlVTMR0wGwYDVQQKExRBcHBsZSBDb21wdXRl -ciwgSW5jLjEtMCsGA1UECxMkQXBwbGUgQ29tcHV0ZXIgQ2VydGlmaWNhdGUgQXV0 -aG9yaXR5MSkwJwYDVQQDEyBBcHBsZSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0 -eTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAOSRqQkfkdseR1DrBe1e -eYQt6zaiV0xV7IsZid75S2z1B6siMALoGD74UAnTf0GomPnRymacJGsR0KO75Bsq -wx+VnnoMpEeLW9QWNzPLxA9NzhRp0ckZcvVdDtV/X5vyJQO6VY9NXQ3xZDUjFUsV -WR2zlPf2nJ7PULrBWFBnjwi0IPfLrCwgb3C2PwEwjLdDzw+dPfMrSSgayP7OtbkO -2V4c1ss9tTqt9A8OAJILsSEWLnTVPA3bYharo3GSR1NVwa8vQbP4++NwzeajTEV+ -H0xrUJZBicR0YgsQg0GHM4qBsTBY7FoEMoxos48d3mVz/2deZbxJ2HafMxRloXeU -yS0CAwEAAaOCAi8wggIrMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/ -MB0GA1UdDgQWBBQr0GlHlHYJ/vRrjS5ApvdHTX8IXjAfBgNVHSMEGDAWgBQr0GlH -lHYJ/vRrjS5ApvdHTX8IXjCCASkGA1UdIASCASAwggEcMIIBGAYJKoZIhvdjZAUB -MIIBCTBBBggrBgEFBQcCARY1aHR0cHM6Ly93d3cuYXBwbGUuY29tL2NlcnRpZmlj -YXRlYXV0aG9yaXR5L3Rlcm1zLmh0bWwwgcMGCCsGAQUFBwICMIG2GoGzUmVsaWFu -Y2Ugb24gdGhpcyBjZXJ0aWZpY2F0ZSBieSBhbnkgcGFydHkgYXNzdW1lcyBhY2Nl -cHRhbmNlIG9mIHRoZSB0aGVuIGFwcGxpY2FibGUgc3RhbmRhcmQgdGVybXMgYW5k -IGNvbmRpdGlvbnMgb2YgdXNlLCBjZXJ0aWZpY2F0ZSBwb2xpY3kgYW5kIGNlcnRp -ZmljYXRpb24gcHJhY3RpY2Ugc3RhdGVtZW50cy4wRAYDVR0fBD0wOzA5oDegNYYz -aHR0cHM6Ly93d3cuYXBwbGUuY29tL2NlcnRpZmljYXRlYXV0aG9yaXR5L3Jvb3Qu -Y3JsMFUGCCsGAQUFBwEBBEkwRzBFBggrBgEFBQcwAoY5aHR0cHM6Ly93d3cuYXBw -bGUuY29tL2NlcnRpZmljYXRlYXV0aG9yaXR5L2Nhc2lnbmVycy5odG1sMA0GCSqG -SIb3DQEBBQUAA4IBAQCd2i0oWC99dgS5BNM+zrdmY06PL9T+S61yvaM5xlJNBZhS -9YlRASR5vhoy9+VEi0tEBzmC1lrKtCBe2a4VXR2MHTK/ODFiSF3H4ZCx+CRA+F9Y -m1FdV53B5f88zHIhbsTp6aF31ywXJsM/65roCwO66bNKcuszCVut5mIxauivL9Wv -Hld2j383LS4CXN1jyfJxuCZA3xWNdUQ/eb3mHZnhQyw+rW++uaT+DjUZUWOxw961 -kj5ReAFziqQjyqSI8R5cH0EWLX6VCqrpiUGYGxrdyyC/R14MJsVVNU3GMIuZZxTH -CR+6R8faAQmHJEKVvRNgGQrv6n8Obs3BREM6StXj ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIDoDCCAoigAwIBAgIBMTANBgkqhkiG9w0BAQUFADA5MQswCQYDVQQGEwJKUDEO -MAwGA1UEChMFTEdQS0kxGjAYBgNVBAsTEUFwcGxpY2F0aW9uIENBIEcyMB4XDTA2 -MDMzMTE1MDAwMFoXDTE2MDMzMTE0NTk1OVowOTELMAkGA1UEBhMCSlAxDjAMBgNV -BAoTBUxHUEtJMRowGAYDVQQLExFBcHBsaWNhdGlvbiBDQSBHMjCCASIwDQYJKoZI -hvcNAQEBBQADggEPADCCAQoCggEBALk1xhD422jbB8RATLAdHjbcw0H2z1UVbQh/ -XMZoVeXnV/GWUebhTXgPbkAVcDtl/hHf59PWWDU74Z8C/JRSRi6znmCbAp7JgtL2 -464JT4REtmKbAFFouDqt7GTRMkvplESDtA7OIYlrsDbAmMZLnMI+W2AqCTErLatM -3rGg/VhWwoMdILzEhAmHe6iVl8YljoPgPpMN0cd9c6mo/BkAQC4iuHozQfV4/Vpx -54LZSIhc7KiFhy1tgIlnGmm+EMBaju2IfT5vLDhrN85H2KIxMN5+U2Vsi4ZTQSBs -vUilfq8AWlYSWIHR3IlZ+bXu+E2a2EQpi3mn9yKq6nxctBaIIA0CAwEAAaOBsjCB -rzAdBgNVHQ4EFgQUf7hdjsQYa8Z9zC7prs405xdd4KEwDgYDVR0PAQH/BAQDAgEG -MEwGA1UdHwRFMEMwQaA/oD2kOzA5MQswCQYDVQQGEwJKUDEOMAwGA1UEChMFTEdQ -S0kxGjAYBgNVBAsTEUFwcGxpY2F0aW9uIENBIEcyMA8GA1UdEwEB/wQFMAMBAf8w -HwYDVR0jBBgwFoAUf7hdjsQYa8Z9zC7prs405xdd4KEwDQYJKoZIhvcNAQEFBQAD -ggEBADzYczZABkhKVBn1J0g5JaVuQue2zRvLOTS3m+xPKr535MqE/B3rmyJA1fT7 -aIdy/Eddag5SSuO1XUjGIpbmM21tq/bN18skWoyoRZ4+YYJ9lNUF8Bo1X3EvLlS1 -QQXvhg1S75yYG/EsTDrR84bTjD56L4ZFjoMyJlu/U8oOUVbcmsJaMBkNp57Vqpsg -OWl4IfSXbdEOEUwu0xtasPmXeFwqj1Jl7kxCJcI3MA5tKzWUgwbor0U7BGanMLv5 -4CE7Y259RF06alPvERck/VSyWmxzViHJbC2XpEKzJ2EFIWNt6ii8TxpvQtyYq1XT -HhvAkj+bweY7F1bixJhDJe62ywA= ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIDwzCCAyygAwIBAgIBADANBgkqhkiG9w0BAQQFADCBmDELMAkGA1UEBhMCQVQx -EDAOBgNVBAgTB0F1c3RyaWExDzANBgNVBAcTBlZpZW5uYTFCMEAGA1UEChM5QXJn -ZSBEYXRlbiBPZXN0ZXJyZWljaGlzY2hlIEdlc2VsbHNjaGFmdCBmdWVyIERhdGVu -c2NodXR6MSIwIAYJKoZIhvcNAQkBFhNhLWNlcnRAYXJnZWRhdGVuLmF0MB4XDTAx -MDIxMjExMzAzMFoXDTA5MDIxMjExMzAzMFowgZgxCzAJBgNVBAYTAkFUMRAwDgYD -VQQIEwdBdXN0cmlhMQ8wDQYDVQQHEwZWaWVubmExQjBABgNVBAoTOUFyZ2UgRGF0 -ZW4gT2VzdGVycmVpY2hpc2NoZSBHZXNlbGxzY2hhZnQgZnVlciBEYXRlbnNjaHV0 -ejEiMCAGCSqGSIb3DQEJARYTYS1jZXJ0QGFyZ2VkYXRlbi5hdDCBnzANBgkqhkiG -9w0BAQEFAAOBjQAwgYkCgYEAwgsHqoNtmmrJ86+e1I4hOVBaL4kokqKN2IPOIL+1 -XwY8vfOOUfPEdhWpaC0ldt7VYrksgDiUccgH0FROANWK2GkfKMDzjjXHysR04uEb -Om7Kqjqn0nproOGkFG+QvBZgs+Ws+HXNFJA6V76fU4+JXq4452LSK4Lr5YcBquu3 -NJECAwEAAaOCARkwggEVMB0GA1UdDgQWBBQ0j59zH/G31zRjgK1y2P//tSAWZjCB -xQYDVR0jBIG9MIG6gBQ0j59zH/G31zRjgK1y2P//tSAWZqGBnqSBmzCBmDELMAkG -A1UEBhMCQVQxEDAOBgNVBAgTB0F1c3RyaWExDzANBgNVBAcTBlZpZW5uYTFCMEAG -A1UEChM5QXJnZSBEYXRlbiBPZXN0ZXJyZWljaGlzY2hlIEdlc2VsbHNjaGFmdCBm -dWVyIERhdGVuc2NodXR6MSIwIAYJKoZIhvcNAQkBFhNhLWNlcnRAYXJnZWRhdGVu -LmF0ggEAMAwGA1UdEwQFMAMBAf8wCwYDVR0PBAQDAgEGMBEGCWCGSAGG+EIBAQQE -AwICBDANBgkqhkiG9w0BAQQFAAOBgQBFuJYncqMYB6gXQS3eDOI90BEHfFTKy/dV -AV+K7QdAYikWmqgBheRdPKddJdccPy/Zl/p3ZT7GhDyC5f3wZjcuu8AJ27BNwbCA -x54dgxgCNcyPm79nY8MRtEdEpoRGdSsFKJemz6hpXM++MWFciyrRWIIA44XB0Gv3 -US0spjsDPQ== ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIDdzCCAl+gAwIBAgIEAgAAuTANBgkqhkiG9w0BAQUFADBaMQswCQYDVQQGEwJJ -RTESMBAGA1UEChMJQmFsdGltb3JlMRMwEQYDVQQLEwpDeWJlclRydXN0MSIwIAYD -VQQDExlCYWx0aW1vcmUgQ3liZXJUcnVzdCBSb290MB4XDTAwMDUxMjE4NDYwMFoX -DTI1MDUxMjIzNTkwMFowWjELMAkGA1UEBhMCSUUxEjAQBgNVBAoTCUJhbHRpbW9y -ZTETMBEGA1UECxMKQ3liZXJUcnVzdDEiMCAGA1UEAxMZQmFsdGltb3JlIEN5YmVy -VHJ1c3QgUm9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKMEuyKr -mD1X6CZymrV51Cni4eiVgLGw41uOKymaZN+hXe2wCQVt2yguzmKiYv60iNoS6zjr -IZ3AQSsBUnuId9Mcj8e6uYi1agnnc+gRQKfRzMpijS3ljwumUNKoUMMo6vWrJYeK -mpYcqWe4PwzV9/lSEy/CG9VwcPCPwBLKBsua4dnKM3p31vjsufFoREJIE9LAwqSu -XmD+tqYF/LTdB1kC1FkYmGP1pWPgkAx9XbIGevOF6uvUA65ehD5f/xXtabz5OTZy -dc93Uk3zyZAsuT3lySNTPx8kmCFcB5kpvcY67Oduhjprl3RjM71oGDHweI12v/ye -jl0qhqdNkNwnGjkCAwEAAaNFMEMwHQYDVR0OBBYEFOWdWTCCR1jMrPoIVDaGezq1 -BE3wMBIGA1UdEwEB/wQIMAYBAf8CAQMwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3 -DQEBBQUAA4IBAQCFDF2O5G9RaEIFoN27TyclhAO992T9Ldcw46QQF+vaKSm2eT92 -9hkTI7gQCvlYpNRhcL0EYWoSihfVCr3FvDB81ukMJY2GQE/szKN+OMY3EU/t3Wgx -jkzSswF07r51XgdIGn9w/xZchMB5hbgF/X++ZRGjD8ACtPhSNzkE1akxehi/oCr0 -Epn3o0WC4zxe9Z2etciefC7IpJ5OCBRLbf1wbWsaY71k5h+3zvDyny67G7fyUIhz -ksLi4xaNmjICq44Y3ekQEe5+NauQrz4wlHrQMz2nZQ/1/I6eYs9HRCwBXbsdtTLS -R9I4LtD+gdwyah617jzV/OeBHRnDJELqYzmp ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIDlDCCAnygAwIBAgIQWAsFbFMk27JQVxhf+eWmUDANBgkqhkiG9w0BAQUFADAn -MQswCQYDVQQGEwJCRTEYMBYGA1UEAxMPQmVsZ2l1bSBSb290IENBMB4XDTAzMDEy -NjIzMDAwMFoXDTE0MDEyNjIzMDAwMFowJzELMAkGA1UEBhMCQkUxGDAWBgNVBAMT -D0JlbGdpdW0gUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB -AMihcekcRkJ5eHFvna6pqKsot03HIOswkVp19eLSz8hMFJhCWK3HEcVAQGpa+XQS -J4fpnOVxTiIs0RIYqjBeoiG52bv/9nTrMQHnO35YD5EWTXaJqAFPrSJmcPpLHZXB -MFjqvNll2Jq0iOtJRlLf0lMVdssUXRlJsW9q09P9vMIt7EU/CT9YvvzU7wCMgTVy -v/cY6pZifSsofxVsY9LKyn0FrMhtB20yvmi4BUCuVJhWPmbxMOjvxKuTXgfeMo8S -dKpbNCNUwOpszv42kqgJF+qhLc9s44Qd3ocuMws8dOIhUDiVLlzg5cYx+dtA+mqh -pIqTm6chBocdJ9PEoclMsG8CAwEAAaOBuzCBuDAOBgNVHQ8BAf8EBAMCAQYwDwYD -VR0TAQH/BAUwAwEB/zBCBgNVHSAEOzA5MDcGBWA4AQEBMC4wLAYIKwYBBQUHAgEW -IGh0dHA6Ly9yZXBvc2l0b3J5LmVpZC5iZWxnaXVtLmJlMB0GA1UdDgQWBBQQ8AxW -m2HqVzq2NZdtn925FI7b5jARBglghkgBhvhCAQEEBAMCAAcwHwYDVR0jBBgwFoAU -EPAMVpth6lc6tjWXbZ/duRSO2+YwDQYJKoZIhvcNAQEFBQADggEBAMhtIlGKYfgP -lm7VILKB+MbcoxYA2s1q52sq+llIp0xJN9dzoWoBZV4yveeX09AuPHPTjHuD79ZC -wT+oqV0PN7p20kC9zC0/00RBSZz9Wyn0AiMiW3Ebv1jZKE4tRfTa57VjRUQRDSp/ -M382SbTObqkCMa5c/ciJv0J71/Fg8teH9lcuen5qE4Ad3OPQYx49cTGxYNSeCMqr -8JTHSHVUgfMbrXec6LKP24OsjzRr6L/D2fVDw2RV6xq9NoY2uiGMlxoh1OotO6y6 -7Kcdq765Sps1LxxcHVGnH1TtEpf/8m6HfUbJdNbv6z195lluBpQE5KJVhzgoaiJe -4r50ErAEQyo= ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIFLDCCBBSgAwIBAgIEOU99hzANBgkqhkiG9w0BAQUFADBaMQswCQYDVQQGEwJX -VzESMBAGA1UEChMJYmVUUlVTVGVkMRswGQYDVQQDExJiZVRSVVNUZWQgUm9vdCBD -QXMxGjAYBgNVBAMTEWJlVFJVU1RlZCBSb290IENBMB4XDTAwMDYyMDE0MjEwNFoX -DTEwMDYyMDEzMjEwNFowWjELMAkGA1UEBhMCV1cxEjAQBgNVBAoTCWJlVFJVU1Rl -ZDEbMBkGA1UEAxMSYmVUUlVTVGVkIFJvb3QgQ0FzMRowGAYDVQQDExFiZVRSVVNU -ZWQgUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANS0c3oT -CjhVAb6JVuGUntS+WutKNHUbYSnE4a0IYCF4SP+00PpeQY1hRIfo7clY+vyTmt9P -6j41ffgzeubx181vSUs9Ty1uDoM6GHh3o8/n9E1z2Jo7Gh2+lVPPIJfCzz4kUmwM -jmVZxXH/YgmPqsWPzGCgc0rXOD8Vcr+il7dw6K/ifhYGTPWqZCZyByWtNfwYsSbX -2P8ZDoMbjNx4RWc0PfSvHI3kbWvtILNnmrRhyxdviTX/507AMhLn7uzf/5cwdO2N -R47rtMNE5qdMf1ZD6Li8tr76g5fmu/vEtpO+GRg+jIG5c4gW9JZDnGdzF5DYCW5j -rEq2I8QBoa2k5MUCAwEAAaOCAfgwggH0MA8GA1UdEwEB/wQFMAMBAf8wggFZBgNV -HSAEggFQMIIBTDCCAUgGCisGAQQBsT4BAAAwggE4MIIBAQYIKwYBBQUHAgIwgfQa -gfFSZWxpYW5jZSBvbiB0aGlzIGNlcnRpZmljYXRlIGJ5IGFueSBwYXJ0eSBhc3N1 -bWVzIGFjY2VwdGFuY2Ugb2YgdGhlIHRoZW4gYXBwbGljYWJsZSBzdGFuZGFyZCB0 -ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB1c2UsIGFuZCBjZXJ0aWZpY2F0aW9uIHBy -YWN0aWNlIHN0YXRlbWVudCwgd2hpY2ggY2FuIGJlIGZvdW5kIGF0IGJlVFJVU1Rl -ZCdzIHdlYiBzaXRlLCBodHRwczovL3d3dy5iZVRSVVNUZWQuY29tL3ZhdWx0L3Rl -cm1zMDEGCCsGAQUFBwIBFiVodHRwczovL3d3dy5iZVRSVVNUZWQuY29tL3ZhdWx0 -L3Rlcm1zMDQGA1UdHwQtMCswKaAnoCWkIzAhMRIwEAYDVQQKEwliZVRSVVNUZWQx -CzAJBgNVBAYTAldXMB0GA1UdDgQWBBQquZtpLjub2M3eKjEENGvKBxirZzAfBgNV -HSMEGDAWgBQquZtpLjub2M3eKjEENGvKBxirZzAOBgNVHQ8BAf8EBAMCAf4wDQYJ -KoZIhvcNAQEFBQADggEBAHlh26Nebhax6nZR+csVm8tpvuaBa58oH2U+3RGFktTo -Qb9+M70j5/Egv6S0phkBxoyNNXxlpE8JpNbYIxUFE6dDea/bow6be3ga8wSGWsb2 -jCBHOElQBp1yZzrwmAOtlmdE/D8QDYZN5AA7KXvOOzuZhmElQITcE2K3+spZ1gMe -1lMBzW1MaFVA4e5rxyoAAEiCswoBw2AqDPeCNe5IhpbkdNQ96gFxugR1QKepfzk5 -mlWXKWWuGVUlBXJH0+gY3Ljpr0NzARJ0o+FcXxVdJPP55PS2Z2cS52QiivalQaYc -tmBjRYoQtLpGEK5BV2VsPyMQPyEQWbfkQN0mDCP2qq4= ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIDqDCCApCgAwIBAgIJAP7c4wEPyUj/MA0GCSqGSIb3DQEBBQUAMDQxCzAJBgNV -BAYTAkZSMRIwEAYDVQQKDAlEaGlteW90aXMxETAPBgNVBAMMCENlcnRpZ25hMB4X -DTA3MDYyOTE1MTMwNVoXDTI3MDYyOTE1MTMwNVowNDELMAkGA1UEBhMCRlIxEjAQ -BgNVBAoMCURoaW15b3RpczERMA8GA1UEAwwIQ2VydGlnbmEwggEiMA0GCSqGSIb3 -DQEBAQUAA4IBDwAwggEKAoIBAQDIaPHJ1tazNHUmgh7stL7qXOEm7RFHYeGifBZ4 -QCHkYJ5ayGPhxLGWkv8YbWkj4Sti993iNi+RB7lIzw7sebYs5zRLcAglozyHGxny -gQcPOJAZ0xH+hrTy0V4eHpbNgGzOOzGTtvKg0KmVEn2lmsxryIRWijOp5yIVUxbw -zBfsV1/pogqYCd7jX5xv3EjjhQsVWqa6n6xI4wmy9/Qy3l40vhx4XUJbzg4ij02Q -130yGLMLLGq/jj8UEYkgDncUtT2UCIf3JR7VsmAA7G8qKCVuKj4YYxclPz5EIBb2 -JsglrgVKtOdjLPOMFlN+XPsRGgjBRmKfIrjxwo1p3Po6WAbfAgMBAAGjgbwwgbkw -DwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUGu3+QTmQtCRZvgHyUtVF9lo53BEw -ZAYDVR0jBF0wW4AUGu3+QTmQtCRZvgHyUtVF9lo53BGhOKQ2MDQxCzAJBgNVBAYT -AkZSMRIwEAYDVQQKDAlEaGlteW90aXMxETAPBgNVBAMMCENlcnRpZ25hggkA/tzj -AQ/JSP8wDgYDVR0PAQH/BAQDAgEGMBEGCWCGSAGG+EIBAQQEAwIABzANBgkqhkiG -9w0BAQUFAAOCAQEAhQMeknH2Qq/ho2Ge6/PAD/Kl1NqV5ta+aDY9fm4fTIrv0Q8h -bV6lUmPOEvjvKtpv6zf+EwLHyzs+ImvaYS5/1HI93TDhHkxAGYwP15zRgzB7mFnc -fca5DClMoTOi62c6ZYTTluLtdkVwj7Ur3vkj1kluPBS1xp81HlDQwY9qcEQCYsuu -HWhBp6pX6FOqB9IG9tUUBguRA3UsbHK1YZWaDYu5Def131TN3ubY1gkIl2PlwS6w -t0QmwCbAr1UwnjvVNioZBPRcHv/PLLf/0P2HQBHVESO7SMAhqaQoLf0V+LBOK/Qw -WyH8EZE0vkHve52Xdf+XlcCWWC/qu0bXu+TZLg== ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIDczCCAlugAwIBAgIQMDAwMDk3Mzc1NzM4NjAwMDANBgkqhkiG9w0BAQUFADBV -MQswCQYDVQQGEwJGUjETMBEGA1UEChMKQ2VydGlOb21pczEcMBoGA1UECxMTQUMg -UmFjaW5lIC0gUm9vdCBDQTETMBEGA1UEAxMKQ2VydGlOb21pczAeFw0wMDExMDkw -MDAwMDBaFw0xMjExMDkwMDAwMDBaMFUxCzAJBgNVBAYTAkZSMRMwEQYDVQQKEwpD -ZXJ0aU5vbWlzMRwwGgYDVQQLExNBQyBSYWNpbmUgLSBSb290IENBMRMwEQYDVQQD -EwpDZXJ0aU5vbWlzMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA8SWb -4mS5RXB3ENSIcfrEzCj/TRUQuT1tMCU0YUfXFSgcPdWglIzCv3kvh07QoB+8xMl+ -fQHvSSduAxnNewz0GBY9rApCPKlP6CcnJr74OSVZIiWt9wLfl4wwhNhZOiikIpZp -EdOXWqRc84P5cUlN3Lwmr1sjCWmHfTSS4cAKxfDbFLfE61etosyoFZUTQbIhb1Bf -JL5xRXAUZudQiU42n/yAoSUrN4FLUfPQNlOe1AB81pIgX8g2ojwxDjfgqSs1JmBF -uLKJ45uVLEenQBPmQCGjL3maV86IRmR3a9UGlgvKAk0NBdh8mrQyQvcUlLBIQBCm -l7wppt6maQHUNEPQSwIDAQABoz8wPTALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/BAUw -AwEB/zAdBgNVHQ4EFgQU+F4ho6ijFeb4tRG7/kIEXU2OgnowDQYJKoZIhvcNAQEF -BQADggEBACe9FJayK6bXkJQrilBFMh75QPdFOks9PJuo86OMUlBDZGYFTCh9Arex -N3KYCnAEzazYIALwr7eASJJDIQMu1Q+pkx/7ACde4kP47F27M2rm+v5HnGooCLz2 -s7Fe/WUycTQqgwF5lNp03m1ce/TvovgkEZeVN5wM/7+SsZLJGDigXGeq48j2g2hn -8OckX9Ciyo0U3/1IVeigNBisiaOlsHSZOEPBZQRiZULob+NVbXVPo8nM1OyP3aHI -LQex1yYcCr9m93nOiZyKkur3Uedf1yMTBe+fflnPFKGYnVqvTGXCKVdHzQBfpILA -AuaC+5ykZhSiSMf8nmL2oPMcLO7YQw4= ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIESjCCAzKgAwIBAgIBAzANBgkqhkiG9w0BAQUFADBBMQswCQYDVQQGEwJLUjEN -MAsGA1UEChMES0lTQTEPMA0GA1UECxMGUk9PVENBMRIwEAYDVQQDEwlDZXJ0UlNB -MDEwHhcNMDAwMzAyMTUwMDAwWhcNMTAwMzAzMTQ1OTU5WjBBMQswCQYDVQQGEwJL -UjENMAsGA1UEChMES0lTQTEPMA0GA1UECxMGUk9PVENBMRIwEAYDVQQDEwlDZXJ0 -UlNBMDEwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDOz+3h6FYdyUsy -YJsqt5eHYQY0aMsXrsB4xcYRW0t8l6u5bE4vAPZTLOnhnFqQaj16ODg1Wq0cClmF -u/VjZwkT6SZP2Dxd71NC3kVi5D7NcqT6s8DgH46U4mUtVcEVkixv80PUNQUFNDeg -LLRzW/EnJpSa9boSzPp4NaKtVNVmjxHqphlN1xM1VHuRlwNHY7CpD2i+0vSe6o21 -e0S1uS04yQDj5b/GdYkDmf+MSwgPwgUxpE0XEc7DdQ9rsF/QrIatfemgiLnGEtbA -OizSb2wnHar/RZvGAxACafkG758ioDg4gsgkEayhno9Nvnhf37o/gwN9UaP4x12o -kWgfHnLdAgMBAAGjggFLMIIBRzAdBgNVHQ4EFgQU/4pGcjNY6EiIIqoXaNoWSAmL -NZEwHwYDVR0jBBgwFoAU/4pGcjNY6EiIIqoXaNoWSAmLNZEwDgYDVR0PAQH/BAQD -AgEGMBUGA1UdIAQOMAwwCgYIKoMajJpEAgEwMAYDVR0RBCkwJ6QlMCMxITAfBgNV -BAMMGO2VnOq1reygleuztOuztO2YuOyEvO2EsDAwBgNVHRIEKTAnpCUwIzEhMB8G -A1UEAwwY7ZWc6rWt7KCV67O067O07Zi47IS87YSwMBIGA1UdEwEB/wQIMAYBAf8C -AQEwDAYDVR0kBAUwA4ABADBYBgNVHR8EUTBPME2gS6BJhkdsZGFwOi8vZGlyc3lz -LnJvb3RjYS5vci5rcjozODkvQ049Uk9PVC1SU0EtQ1JMLCBPVT1ST09UQ0EsIE89 -S0lTQSwgQz1LUjANBgkqhkiG9w0BAQUFAAOCAQEALDykI2xC+IkoR1B84+bnIy02 -NsaIKpGY+x58D6udEa11rORcazERdDNib9QGkRHGcnSYL7Bi+zQprxTyxmTgv6vL -V7lhnPNiTTN512YqUczcAFQFAVZ+jLaOE/QtmVHhmni8VVFKSdpbC4L7Qz3azZMJ -y7WjCcOwfVlIopvY+zfDbw436gWXv9Juocjow/vzrTLIVZI0QuDUEuXU7SGK55iS -/1zXpWaqv/E6fC3C4FU1BdqRagdT0YWxlMcmDRtoKQjBIZMPa6JguFOvRNlkXdNu -m4QSeDEY2nO/rCT4qy2/Dn66ewnKWomoLFLMTHSt2V+zt9YF90FfceVmGQYleQ== ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIEvTCCA6WgAwIBAgIBADANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJFVTEn -MCUGA1UEChMeQUMgQ2FtZXJmaXJtYSBTQSBDSUYgQTgyNzQzMjg3MSMwIQYDVQQL -ExpodHRwOi8vd3d3LmNoYW1iZXJzaWduLm9yZzEiMCAGA1UEAxMZQ2hhbWJlcnMg -b2YgQ29tbWVyY2UgUm9vdDAeFw0wMzA5MzAxNjEzNDNaFw0zNzA5MzAxNjEzNDRa -MH8xCzAJBgNVBAYTAkVVMScwJQYDVQQKEx5BQyBDYW1lcmZpcm1hIFNBIENJRiBB -ODI3NDMyODcxIzAhBgNVBAsTGmh0dHA6Ly93d3cuY2hhbWJlcnNpZ24ub3JnMSIw -IAYDVQQDExlDaGFtYmVycyBvZiBDb21tZXJjZSBSb290MIIBIDANBgkqhkiG9w0B -AQEFAAOCAQ0AMIIBCAKCAQEAtzZV5aVdGDDg2olUkfzIx1L4L1DZ77F1c2VHfRtb -unXF/KGIJPov7coISjlUxFF6tdpg6jg8gbLL8bvZkSM/SAFwdakFKq0fcfPJVD0d -BmpAPrMMhe5cG3nCYsS4No41XQEMIwRHNaqbYE6gZj3LJgqcQKH0XZi/caulAGgq -7YN6D6IUtdQis4CwPAxaUWktWBiP7Zme8a7ileb2R6jWDA+wWFjbw2Y3npuRVDM3 -0pQcakjJyfKl2qUMI/cjDpwyVV5xnIQFUZot/eZOKjRa3spAN2cMVCFVd9oKDMyX -roDclDZK9D7ONhMeU+SsTjoF7Nuucpw4i9A5O4kKPnf+dQIBA6OCAUQwggFAMBIG -A1UdEwEB/wQIMAYBAf8CAQwwPAYDVR0fBDUwMzAxoC+gLYYraHR0cDovL2NybC5j -aGFtYmVyc2lnbi5vcmcvY2hhbWJlcnNyb290LmNybDAdBgNVHQ4EFgQU45T1sU3p -26EpW1eLTXYGduHRooowDgYDVR0PAQH/BAQDAgEGMBEGCWCGSAGG+EIBAQQEAwIA -BzAnBgNVHREEIDAegRxjaGFtYmVyc3Jvb3RAY2hhbWJlcnNpZ24ub3JnMCcGA1Ud -EgQgMB6BHGNoYW1iZXJzcm9vdEBjaGFtYmVyc2lnbi5vcmcwWAYDVR0gBFEwTzBN -BgsrBgEEAYGHLgoDATA+MDwGCCsGAQUFBwIBFjBodHRwOi8vY3BzLmNoYW1iZXJz -aWduLm9yZy9jcHMvY2hhbWJlcnNyb290Lmh0bWwwDQYJKoZIhvcNAQEFBQADggEB -AAxBl8IahsAifJ/7kPMa0QOx7xP5IV8EnNrJpY0nbJaHkb5BkAFyk+cefV/2icZd -p0AJPaxJRUXcLo0waLIJuvvDL8y6C98/d3tGfToSJI6WjzwFCm/SlCgdbQzALogi -1djPHRPH8EjX1wWnz8dHnjs8NMiAT9QUu/wNUPf6s+xCX6ndbcj0dc97wXImsQEc -XCz9ek60AcUFV7nnPKoF2YjpB0ZBzu9Bga5Y34OirsrXdx/nADydb47kMgkdTXg0 -eDQ8lJsm7U9xxhl6vSAiSFr+S30Dt+dYvsYyTnQeaN2oaFuzPu5ifdmA6Ap1erfu -tGWaIZDgqtCYvDi1czyL+Nw= ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIDQzCCAiugAwIBAgIQX/h7KCtU3I1CoxW1aMmt/zANBgkqhkiG9w0BAQUFADA1 -MRYwFAYDVQQKEw1DaXNjbyBTeXN0ZW1zMRswGQYDVQQDExJDaXNjbyBSb290IENB -IDIwNDgwHhcNMDQwNTE0MjAxNzEyWhcNMjkwNTE0MjAyNTQyWjA1MRYwFAYDVQQK -Ew1DaXNjbyBTeXN0ZW1zMRswGQYDVQQDExJDaXNjbyBSb290IENBIDIwNDgwggEg -MA0GCSqGSIb3DQEBAQUAA4IBDQAwggEIAoIBAQCwmrmrp68Kd6ficba0ZmKUeIhH -xmJVhEAyv8CrLqUccda8bnuoqrpu0hWISEWdovyD0My5jOAmaHBKeN8hF570YQXJ -FcjPFto1YYmUQ6iEqDGYeJu5Tm8sUxJszR2tKyS7McQr/4NEb7Y9JHcJ6r8qqB9q -VvYgDxFUl4F1pyXOWWqCZe+36ufijXWLbvLdT6ZeYpzPEApk0E5tzivMW/VgpSdH -jWn0f84bcN5wGyDWbs2mAag8EtKpP6BrXruOIIt6keO1aO6g58QBdKhTCytKmg9l -Eg6CTY5j/e/rmxrbU6YTYK/CfdfHbBcl1HP7R2RQgYCUTOG/rksc35LtLgXfAgED -o1EwTzALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUJ/PI -FR5umgIJFq0roIlgX9p7L6owEAYJKwYBBAGCNxUBBAMCAQAwDQYJKoZIhvcNAQEF -BQADggEBAJ2dhISjQal8dwy3U8pORFBi71R803UXHOjgxkhLtv5MOhmBVrBW7hmW -Yqpao2TB9k5UM8Z3/sUcuuVdJcr18JOagxEu5sv4dEX+5wW4q+ffy0vhN4TauYuX -cB7w4ovXsNgOnbFp1iqRe6lJT37mjpXYgyc81WhJDtSd9i7rp77rMKSsH0T8lasz -Bvt9YAretIpjsJyp8qS5UwGH0GikJ3+r/+n6yUA4iGe0OcaEb1fJU9u6ju7AQ7L4 -CYNu/2bPPu8Xs1gYJQk0XuPL1hS27PKSb3TkL4Eq1ZKR4OCXPDJoBYVL0fdX4lId -kxpUnwVwwEpxYB5DC2Ae/qPOgRnhCzU= ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIICPTCCAaYCEQDNun9W8N/kvFT+IqyzcqpVMA0GCSqGSIb3DQEBAgUAMF8xCzAJ -BgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE3MDUGA1UECxMuQ2xh -c3MgMSBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw05 -NjAxMjkwMDAwMDBaFw0yODA4MDEyMzU5NTlaMF8xCzAJBgNVBAYTAlVTMRcwFQYD -VQQKEw5WZXJpU2lnbiwgSW5jLjE3MDUGA1UECxMuQ2xhc3MgMSBQdWJsaWMgUHJp -bWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCBnzANBgkqhkiG9w0BAQEFAAOB -jQAwgYkCgYEA5Rm/baNWYS2ZSHH2Z965jeu3noaACpEO+jglr0aIguVzqKCbJF0N -H8xlbgyw0FaEGIeaBpsQoXPftFg5a27B9hXVqKg/qhIGjTGsf7A01480Z4gJzRQR -4k5FVmkfeAKA2txHkSm7NsljXMXg1y2He6G3MrB7MLoqLzGq7qNn2tsCAwEAATAN -BgkqhkiG9w0BAQIFAAOBgQBMP7iLxmjf7kMzDl3ppssHhE16M/+SG/Q2rdiVIjZo -EWx8QszznC7EBz8UsA9P/5CSdvnivErpj82ggAr3xSnxgiJduLHdgSOjeyUVRjB5 -FvjqBUuUfx3CHMjjt/QQQDwTw18fU+hI5Ia0e6E1sHslurjTjqs/OJ0ANACY89Fx -lA== ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIDAjCCAmsCEEzH6qqYPnHTkxD4PTqJkZIwDQYJKoZIhvcNAQEFBQAwgcExCzAJ -BgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xh -c3MgMSBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcy -MTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3Jp -emVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMB4X -DTk4MDUxODAwMDAwMFoXDTI4MDgwMTIzNTk1OVowgcExCzAJBgNVBAYTAlVTMRcw -FQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgMSBQdWJsaWMg -UHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEo -YykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5 -MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMIGfMA0GCSqGSIb3DQEB -AQUAA4GNADCBiQKBgQCq0Lq+Fi24g9TK0g+8djHKlNgdk4xWArzZbxpvUjZudVYK -VdPfQ4chEWWKfo+9Id5rMj8bhDSVBZ1BNeuS65bdqlk/AVNtmU/t5eIqWpDBucSm -Fc/IReumXY6cPvBkJHalzasab7bYe1FhbqZ/h8jit+U03EGI6glAvnOSPWvndQID -AQABMA0GCSqGSIb3DQEBBQUAA4GBAKlPww3HZ74sy9mozS11534Vnjty637rXC0J -h9ZrbWB85a7FkCMMXErQr7Fd88e2CtvgFZMN3QO8x3aKtd1Pw5sTdbgBwObJW2ul -uIncrKTdcu1OofdPvAbT6shkdHvClUGcZXNY8ZCaPGqxmMnEh7zPRW1F4m4iP/68 -DzFc6PLZ ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIDkjCCAnqgAwIBAgIRAIW9S/PY2uNp9pTXX8OlRCMwDQYJKoZIhvcNAQEFBQAw -PTELMAkGA1UEBhMCRlIxETAPBgNVBAoTCENlcnRwbHVzMRswGQYDVQQDExJDbGFz -cyAyIFByaW1hcnkgQ0EwHhcNOTkwNzA3MTcwNTAwWhcNMTkwNzA2MjM1OTU5WjA9 -MQswCQYDVQQGEwJGUjERMA8GA1UEChMIQ2VydHBsdXMxGzAZBgNVBAMTEkNsYXNz -IDIgUHJpbWFyeSBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANxQ -ltAS+DXSCHh6tlJw/W/uz7kRy1134ezpfgSN1sxvc0NXYKwzCkTsA18cgCSR5aiR -VhKC9+Ar9NuuYS6JEI1rbLqzAr3VNsVINyPi8Fo3UjMXEuLRYE2+L0ER4/YXJQyL -kcAbmXuZVg2v7tK8R1fjeUl7NIknJITesezpWE7+Tt9avkGtrAjFGA7v0lPubNCd -EgETjdyAYveVqUSISnFOYFWe2yMZeVYHDD9jC1yw4r5+FfyUM1hBOHTE4Y+L3yas -H7WLO7dDWWuwJKZtkIvEcupdM5i3y95ee++U8Rs+yskhwcWYAqqi9lt3m/V+llU0 -HGdpwPFC40es/CgcZlUCAwEAAaOBjDCBiTAPBgNVHRMECDAGAQH/AgEKMAsGA1Ud -DwQEAwIBBjAdBgNVHQ4EFgQU43Mt38sOKAze3bOkynm4jrvoMIkwEQYJYIZIAYb4 -QgEBBAQDAgEGMDcGA1UdHwQwMC4wLKAqoCiGJmh0dHA6Ly93d3cuY2VydHBsdXMu -Y29tL0NSTC9jbGFzczIuY3JsMA0GCSqGSIb3DQEBBQUAA4IBAQCnVM+IRBnL39R/ -AN9WM2K191EBkOvDP9GIROkkXe/nFL0gt5o8AP5tn9uQ3Nf0YtaLcF3n5QRIqWh8 -yfFC82x/xXp8HVGIutIKPidd3i1RTtMTZGnkLuPT55sJmabglZvOGtd/vjzOUrMR -FcEPF80Du5wlFbqidon8BvEY0JNLDnyCt6X09l/+7UCmnYR0ObncHoUW2ikbhiMA -ybuJfm6AiB4vFLQDJKgybwOaRywwvlbGp0ICcBvqQNi6BQNwB6SW//1IMwrh3KWB -kJtN3X3n57LNXMhqlfil9o3EXXgIvnsG1knPGTZQIy4I5p4FTUcY1Rbpsda2ENW7 -l7+ijrRU ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIICPDCCAaUCEC0b/EoXjaOR6+f/9YtFvgswDQYJKoZIhvcNAQECBQAwXzELMAkG -A1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFz -cyAyIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk2 -MDEyOTAwMDAwMFoXDTI4MDgwMTIzNTk1OVowXzELMAkGA1UEBhMCVVMxFzAVBgNV -BAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAyIFB1YmxpYyBQcmlt -YXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUAA4GN -ADCBiQKBgQC2WoujDWojg4BrzzmH9CETMwZMJaLtVRKXxaeAufqDwSCg+i8VDXyh -YGt+eSz6Bg86rvYbb7HS/y8oUl+DfUvEerf4Zh+AVPy3wo5ZShRXRtGak75BkQO7 -FYCTXOvnzAhsPz6zSvz/S2wj1VCCJkQZjiPDceoZJEcEnnW/yKYAHwIDAQABMA0G -CSqGSIb3DQEBAgUAA4GBAIobK/o5wXTXXtgZZKJYSi034DNHD6zt96rbHuSLBlxg -J8pFUs4W7z8GZOeUaHxgMxURaa+dYo2jA1Rrpr7l7gUYYAS/QoD90KioHgE796Nc -r6Pc5iaAIzy4RHT3Cq5Ji2F4zCS/iIqnDupzGUH9TQPwiNHleI2lKk/2lw0Xd8rY ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIDAzCCAmwCEQC5L2DMiJ+hekYJuFtwbIqvMA0GCSqGSIb3DQEBBQUAMIHBMQsw -CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xPDA6BgNVBAsTM0Ns -YXNzIDIgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBH -MjE6MDgGA1UECxMxKGMpIDE5OTggVmVyaVNpZ24sIEluYy4gLSBGb3IgYXV0aG9y -aXplZCB1c2Ugb25seTEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1c3QgTmV0d29yazAe -Fw05ODA1MTgwMDAwMDBaFw0yODA4MDEyMzU5NTlaMIHBMQswCQYDVQQGEwJVUzEX -MBUGA1UEChMOVmVyaVNpZ24sIEluYy4xPDA6BgNVBAsTM0NsYXNzIDIgUHVibGlj -IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMjE6MDgGA1UECxMx -KGMpIDE5OTggVmVyaVNpZ24sIEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25s -eTEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1c3QgTmV0d29yazCBnzANBgkqhkiG9w0B -AQEFAAOBjQAwgYkCgYEAp4gBIXQs5xoD8JjhlzwPIQjxnNuX6Zr8wgQGE75fUsjM -HiwSViy4AWkszJkfrbCWrnkE8hM5wXuYuggs6MKEEyyqaekJ9MepAqRCwiNPStjw -DqL7MWzJ5m+ZJwf15vRMeJ5t60aG+rmGyVTyssSv1EYcWskVMP8NbPUtDm3Of3cC -AwEAATANBgkqhkiG9w0BAQUFAAOBgQByLvl/0fFx+8Se9sVeUYpAmLho+Jscg9ji -nb3/7aHmZuovCfTK1+qlK5X2JGCGTUQug6XELaDTrnhpb3LabK4I8GOSN+a7xDAX -rXfMSTWqz9iP0b63GJZHc2pUIjRkLbYWm1lbtFFZOrMLFPQS32eg9K0yZF6xRnIn -jBJ7xUS0rg== ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIICPDCCAaUCEHC65B0Q2Sk0tjjKewPMur8wDQYJKoZIhvcNAQECBQAwXzELMAkG -A1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFz -cyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk2 -MDEyOTAwMDAwMFoXDTI4MDgwMTIzNTk1OVowXzELMAkGA1UEBhMCVVMxFzAVBgNV -BAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAzIFB1YmxpYyBQcmlt -YXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUAA4GN -ADCBiQKBgQDJXFme8huKARS0EN8EQNvjV69qRUCPhAwL0TPZ2RHP7gJYHyX3KqhE -BarsAx94f56TuZoAqiN91qyFomNFx3InzPRMxnVx0jnvT0Lwdd8KkMaOIG+YD/is -I19wKTakyYbnsZogy1Olhec9vn2a/iRFM9x2Fe0PonFkTGUugWhFpwIDAQABMA0G -CSqGSIb3DQEBAgUAA4GBALtMEivPLCYATxQT3ab7/AoRhIzzKBxnki98tsX63/Do -lbwdj2wsqFHMc9ikwFPwTtYmwHYBV4GSXiHx0bH/59AhWM1pF+NEHJwZRDmJXNyc -AA9WjQKZ7aKQRUzkuxCkPfAyAw7xzvjoyVGM5mKf5p/AfbdynMk2OmufTqj/ZA1k ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIDAjCCAmsCEH3Z/gfPqB63EHln+6eJNMYwDQYJKoZIhvcNAQEFBQAwgcExCzAJ -BgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xh -c3MgMyBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcy -MTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3Jp -emVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMB4X -DTk4MDUxODAwMDAwMFoXDTI4MDgwMTIzNTk1OVowgcExCzAJBgNVBAYTAlVTMRcw -FQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgMyBQdWJsaWMg -UHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEo -YykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5 -MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMIGfMA0GCSqGSIb3DQEB -AQUAA4GNADCBiQKBgQDMXtERXVxp0KvTuWpMmR9ZmDCOFoUgRm1HP9SFIIThbbP4 -pO0M8RcPO/mn+SXXwc+EY/J8Y8+iR/LGWzOOZEAEaMGAuWQcRXfH2G71lSk8UOg0 -13gfqLptQ5GVj0VXXn7F+8qkBOvqlzdUMG+7AUcyM83cV5tkaWH4mx0ciU9cZwID -AQABMA0GCSqGSIb3DQEBBQUAA4GBAFFNzb5cy5gZnBWyATl4Lk0PZ3BwmcYQWpSk -U01UbSuvDV1Ai2TT1+7eVmGSX6bEHRBhNtMsJzzoKQm5EWR0zLVznxxIqbxhAe7i -F6YM40AIOw7n60RzKprxaZLvcRTDOaxxp5EJb+RxBrO6WVcmeQD2+A2iMzAo1KpY -oJ2daZH9 ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIDAjCCAmsCEDKIjprS9esTR/h/xCA3JfgwDQYJKoZIhvcNAQEFBQAwgcExCzAJ -BgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xh -c3MgNCBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcy -MTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3Jp -emVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMB4X -DTk4MDUxODAwMDAwMFoXDTI4MDgwMTIzNTk1OVowgcExCzAJBgNVBAYTAlVTMRcw -FQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgNCBQdWJsaWMg -UHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEo -YykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5 -MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMIGfMA0GCSqGSIb3DQEB -AQUAA4GNADCBiQKBgQC68OTP+cSuhVS5B1f5j8V/aBH4xBewRNzjMHPVKmIquNDM -HO0oW369atyzkSTKQWI8/AIBvxwWMZQFl3Zuoq29YRdsTjCG8FE3KlDHqGKB3FtK -qsGgtG7rL+VXxbErQHDbWk2hjh+9Ax/YA9SPTJlxvOKCzFjomDqG04Y48wApHwID -AQABMA0GCSqGSIb3DQEBBQUAA4GBAIWMEsGnuVAVess+rLhDityq3RS6iYF+ATwj -cSGIL4LcY/oCRaxFWdcqWERbt5+BO5JoPeI3JPV7bI92NZYJqFmduc4jq3TWg/0y -cyfYaT5DdPauxYma51N86Xv2S/PBZYPejYqcPIiNOVn8qj8ijaHBZlCBckztImRP -T8qAkbYp ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIDejCCAmKgAwIBAgIQOeOBVATFCrJH7/7zNs/GmDANBgkqhkiG9w0BAQUFADBO -MQswCQYDVQQGEwJ1czEYMBYGA1UEChMPVS5TLiBHb3Zlcm5tZW50MQ0wCwYDVQQL -EwRGQkNBMRYwFAYDVQQDEw1Db21tb24gUG9saWN5MB4XDTA0MTAwNjE4NDUwOVoX -DTEwMTAwNjE4NTM1NlowTjELMAkGA1UEBhMCdXMxGDAWBgNVBAoTD1UuUy4gR292 -ZXJubWVudDENMAsGA1UECxMERkJDQTEWMBQGA1UEAxMNQ29tbW9uIFBvbGljeTCC -ASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAM8mfLBpTHcAyvTjdBmU+1ph -r2LkvcMA5SSjASag1Nbj0fmmeO/r9AGSqDCQL8ozo2iCICXUN7LtGSC3KRazC1k4 -B0RBYQiRX3FCxWQqKS5GugwypRMl49nevfjJE5CKVxG1V0h4OLUn0ayFyir4QPgl -f51CIOFz20X901qav91H7j4+SRgA5Pa+XIgteCgHrl7S1pvmvfwsuifzlr4w/iD4 -99moD3hxx1MjzbCsf0eMz3EmwRrDMCSeCNNYdCXyFt+w0II3NWiZieG9BKBOlmKe -wWO0GlFS/MneL/he9X2MbxtBgU27KFOum2E/Kerc0LepUx2u9aqW1lx3k1YqSVMC -AwEAAaNUMFIwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0O -BBYEFB4sS/nsZqYekl+HeQPt1cKVt5WDMBAGCSsGAQQBgjcVAQQDAgEAMA0GCSqG -SIb3DQEBBQUAA4IBAQBmNcuhcoLgN86WWb4HzKl+FxrREMhdjB36ElzHcjmi6SyE -WGD+d/lNO2sT6t7bPuYZ9mxjhHoFa+46Gc20zk7hFTFBN2OKNH+Uh8cIo/fL+bB7 -SeHoIdehwuTypq3n80B5oensf6AkisUbNR7Ko+B55oejo8Z8OcZJwhAu/5fSbH7T -uw8b61YaYyy8wx62smnHZ+3KTC2fBDCj4kZSAIPV1Qpr7ek0IJAYVIS6lzw3kYcz -6vpcGVt8LCmajURYdLsGMW6JtFkReeCa0jxiQT1MOum5pUnFAI8PoXdcPUaUekqO -CDEtJXsIYBGs+zrud8xtBs5DpekCyb3iWLoIeq0H ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIEHTCCAwWgAwIBAgIQToEtioJl4AsC7j41AkblPTANBgkqhkiG9w0BAQUFADCB -gTELMAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4G -A1UEBxMHU2FsZm9yZDEaMBgGA1UEChMRQ09NT0RPIENBIExpbWl0ZWQxJzAlBgNV -BAMTHkNPTU9ETyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNjEyMDEwMDAw -MDBaFw0yOTEyMzEyMzU5NTlaMIGBMQswCQYDVQQGEwJHQjEbMBkGA1UECBMSR3Jl -YXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHEwdTYWxmb3JkMRowGAYDVQQKExFDT01P -RE8gQ0EgTGltaXRlZDEnMCUGA1UEAxMeQ09NT0RPIENlcnRpZmljYXRpb24gQXV0 -aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0ECLi3LjkRv3 -UcEbVASY06m/weaKXTuH+7uIzg3jLz8GlvCiKVCZrts7oVewdFFxze1CkU1B/qnI -2GqGd0S7WWaXUF601CxwRM/aN5VCaTwwxHGzUvAhTaHYujl8HJ6jJJ3ygxaYqhZ8 -Q5sVW7euNJH+1GImGEaaP+vB+fGQV+useg2L23IwambV4EajcNxo2f8ESIl33rXp -+2dtQem8Ob0y2WIC8bGoPW43nOIv4tOiJovGuFVDiOEjPqXSJDlqR6sA1KGzqSX+ -DT+nHbrTUcELpNqsOO9VUCQFZUaTNE8tja3G1CEZ0o7KBWFxB3NH5YoZEr0ETc5O -nKVIrLsm9wIDAQABo4GOMIGLMB0GA1UdDgQWBBQLWOWLxkwVN6RAqTCpIb5HNlpW -/zAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zBJBgNVHR8EQjBAMD6g -PKA6hjhodHRwOi8vY3JsLmNvbW9kb2NhLmNvbS9DT01PRE9DZXJ0aWZpY2F0aW9u -QXV0aG9yaXR5LmNybDANBgkqhkiG9w0BAQUFAAOCAQEAPpiem/Yb6dc5t3iuHXIY -SdOH5EOC6z/JqvWote9VfCFSZfnVDeFs9D6Mk3ORLgLETgdxb8CPOGEIqB6BCsAv -IC9Bi5HcSEW88cbeunZrM8gALTFGTO3nnc+IlP8zwFboJIYmuNg4ON8qa90SzMc/ -RxdMosIGlgnW2/4/PEZB31jiVg88O8EckzXZOFKs7sjsLjBOlDW0JB9LeGna8gI4 -zJVSk/BwJVmcIGfE7vmLV2H0knZ9P4SNVbfo5azV8fUZVqZa+5Acr5Pr5RzUZ5dd -BA6+C4OmF4O5MBKgxTMVBbkN+8cFduPYSo38NBejxiEovjBFMR7HeL5YYTisO+IB -ZQ== ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIDnzCCAoegAwIBAgIBJjANBgkqhkiG9w0BAQUFADBxMQswCQYDVQQGEwJERTEc -MBoGA1UEChMTRGV1dHNjaGUgVGVsZWtvbSBBRzEfMB0GA1UECxMWVC1UZWxlU2Vj -IFRydXN0IENlbnRlcjEjMCEGA1UEAxMaRGV1dHNjaGUgVGVsZWtvbSBSb290IENB -IDIwHhcNOTkwNzA5MTIxMTAwWhcNMTkwNzA5MjM1OTAwWjBxMQswCQYDVQQGEwJE -RTEcMBoGA1UEChMTRGV1dHNjaGUgVGVsZWtvbSBBRzEfMB0GA1UECxMWVC1UZWxl -U2VjIFRydXN0IENlbnRlcjEjMCEGA1UEAxMaRGV1dHNjaGUgVGVsZWtvbSBSb290 -IENBIDIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCrC6M14IspFLEU -ha88EOQ5bzVdSq7d6mGNlUn0b2SjGmBmpKlAIoTZ1KXleJMOaAGtuU1cOs7TuKhC -QN/Po7qCWWqSG6wcmtoIKyUn+WkjR/Hg6yx6m/UTAtB+NHzCnjwAWav12gz1Mjwr -rFDa1sPeg5TKqAyZMg4ISFZbavva4VhYAUlfckE8FQYBjl2tqriTtM2e66foai1S -NNs671x1Udrb8zH57nGYMsRUFUQM+ZtV7a3fGAigo4aKSe5TBY8ZTNXeWHmb0moc -QqvF1afPaA+W5OFhmHZhyJF81j4A4pFQh+GdCuatl9Idxjp9y7zaAzTVjlsB9WoH -txa2bkp/AgMBAAGjQjBAMB0GA1UdDgQWBBQxw3kbuvVT1xfgiXotF2wKsyudMzAP -BgNVHRMECDAGAQH/AgEFMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOC -AQEAlGRZrTlk5ynrE/5aw4sTV8gEJPB0d8Bg42f76Ymmg7+Wgnxu1MM9756Abrsp -tJh6sTtU6zkXR34ajgv8HzFZMQSyzhfzLMdiNlXiItiJVbSYSKpk+tYcNthEeFpa -IzpXl/V6ME+un2pMSyuOoAPjPuCp1NJ70rOo4nI8rZ7/gFnkm0W09juwzTkZmDLl -6iFhkOQxIY40sfcvNUqFENrnijchvllj4PKFiDFT1FQUhXB59C4Gdyd1Lx+4ivn+ -xbrYNuSD7Odlt79jWvNGr4GUN9RBjNYj1h7P9WgbRGOiWrqnNVmh5XAFmw4jV5mU -Cm26OWMohpLzGITY+9HPBVZkVw== ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIDtzCCAp+gAwIBAgIQDOfg5RfYRv6P5WD8G/AwOTANBgkqhkiG9w0BAQUFADBl -MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 -d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJv -b3QgQ0EwHhcNMDYxMTEwMDAwMDAwWhcNMzExMTEwMDAwMDAwWjBlMQswCQYDVQQG -EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNl -cnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0EwggEi -MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCtDhXO5EOAXLGH87dg+XESpa7c -JpSIqvTO9SA5KFhgDPiA2qkVlTJhPLWxKISKityfCgyDF3qPkKyK53lTXDGEKvYP -mDI2dsze3Tyoou9q+yHyUmHfnyDXH+Kx2f4YZNISW1/5WBg1vEfNoTb5a3/UsDg+ -wRvDjDPZ2C8Y/igPs6eD1sNuRMBhNZYW/lmci3Zt1/GiSw0r/wty2p5g0I6QNcZ4 -VYcgoc/lbQrISXwxmDNsIumH0DJaoroTghHtORedmTpyoeb6pNnVFzF1roV9Iq4/ -AUaG9ih5yLHa5FcXxH4cDrC0kqZWs72yl+2qp/C3xag/lRbQ/6GW6whfGHdPAgMB -AAGjYzBhMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQW -BBRF66Kv9JLLgjEtUYunpyGd823IDzAfBgNVHSMEGDAWgBRF66Kv9JLLgjEtUYun -pyGd823IDzANBgkqhkiG9w0BAQUFAAOCAQEAog683+Lt8ONyc3pklL/3cmbYMuRC -dWKuh+vy1dneVrOfzM4UKLkNl2BcEkxY5NM9g0lFWJc1aRqoR+pWxnmrEthngYTf -fwk8lOa4JiwgvT2zKIn3X/8i4peEH+ll74fg38FnSbNd67IJKusm7Xi+fT8r87cm -NW1fiQG2SVufAQWbqz0lwcy2f8Lxb4bG+mRo64EtlOtCt/qMHt1i8b5QZ7dsvfPx -H2sMNgcWfzd8qVttevESRmCD1ycEvkvOl77DZypoEd+A5wwzZr8TDRRu838fYxAe -+o0bJW1sj6W3YQGx0qMmoRBxna3iw/nDmVG3KwcIzi7mULKn+gpFL6Lw8g== ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIDrzCCApegAwIBAgIQCDvgVpBCRrGhdWrJWZHHSjANBgkqhkiG9w0BAQUFADBh -MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 -d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBD -QTAeFw0wNjExMTAwMDAwMDBaFw0zMTExMTAwMDAwMDBaMGExCzAJBgNVBAYTAlVT -MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j -b20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IENBMIIBIjANBgkqhkiG -9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4jvhEXLeqKTTo1eqUKKPC3eQyaKl7hLOllsB -CSDMAZOnTjC3U/dDxGkAV53ijSLdhwZAAIEJzs4bg7/fzTtxRuLWZscFs3YnFo97 -nh6Vfe63SKMI2tavegw5BmV/Sl0fvBf4q77uKNd0f3p4mVmFaG5cIzJLv07A6Fpt -43C/dxC//AH2hdmoRBBYMql1GNXRor5H4idq9Joz+EkIYIvUX7Q6hL+hqkpMfT7P -T19sdl6gSzeRntwi5m3OFBqOasv+zbMUZBfHWymeMr/y7vrTC0LUq7dBMtoM1O/4 -gdW7jVg/tRvoSSiicNoxBN33shbyTApOB6jtSj1etX+jkMOvJwIDAQABo2MwYTAO -BgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUA95QNVbR -TLtm8KPiGxvDl7I90VUwHwYDVR0jBBgwFoAUA95QNVbRTLtm8KPiGxvDl7I90VUw -DQYJKoZIhvcNAQEFBQADggEBAMucN6pIExIK+t1EnE9SsPTfrgT1eXkIoyQY/Esr -hMAtudXH/vTBH1jLuG2cenTnmCmrEbXjcKChzUyImZOMkXDiqw8cvpOp/2PV5Adg -06O/nVsJ8dWO41P0jmP6P6fbtGbfYmbW0W5BjfIttep3Sp+dWOIrWcBAI+0tKIJF -PnlUkiaY4IBIqDfv8NZ5YBberOgOzW6sRBc4L0na4UU+Krk2U886UAb3LujEV0ls -YSEY1QSteDwsOoBrp+uvFRTp2InBuThs4pFsiv9kuXclVzDAGySj4dzp30d8tbQk -CAUw7C29C79Fv1C5qfPrmAESrciIxpg0X40KPMbp1ZWVbd4= ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIDxTCCAq2gAwIBAgIQAqxcJmoLQJuPC3nyrkYldzANBgkqhkiG9w0BAQUFADBs -MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 -d3cuZGlnaWNlcnQuY29tMSswKQYDVQQDEyJEaWdpQ2VydCBIaWdoIEFzc3VyYW5j -ZSBFViBSb290IENBMB4XDTA2MTExMDAwMDAwMFoXDTMxMTExMDAwMDAwMFowbDEL -MAkGA1UEBhMCVVMxFTATBgNVBAoTDERpZ2lDZXJ0IEluYzEZMBcGA1UECxMQd3d3 -LmRpZ2ljZXJ0LmNvbTErMCkGA1UEAxMiRGlnaUNlcnQgSGlnaCBBc3N1cmFuY2Ug -RVYgUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMbM5XPm -+9S75S0tMqbf5YE/yc0lSbZxKsPVlDRnogocsF9ppkCxxLeyj9CYpKlBWTrT3JTW -PNt0OKRKzE0lgvdKpVMSOO7zSW1xkX5jtqumX8OkhPhPYlG++MXs2ziS4wblCJEM -xChBVfvLWokVfnHoNb9Ncgk9vjo4UFt3MRuNs8ckRZqnrG0AFFoEt7oT61EKmEFB -Ik5lYYeBQVCmeVyJ3hlKV9Uu5l0cUyx+mM0aBhakaHPQNAQTXKFx01p8VdteZOE3 -hzBWBOURtCmAEvF5OYiiAhF8J2a3iLd48soKqDirCmTCv2ZdlYTBoSUeh10aUAsg -EsxBu24LUTi4S8sCAwEAAaNjMGEwDgYDVR0PAQH/BAQDAgGGMA8GA1UdEwEB/wQF -MAMBAf8wHQYDVR0OBBYEFLE+w2kD+L9HAdSYJhoIAu9jZCvDMB8GA1UdIwQYMBaA -FLE+w2kD+L9HAdSYJhoIAu9jZCvDMA0GCSqGSIb3DQEBBQUAA4IBAQAcGgaX3Nec -nzyIZgYIVyHbIUf4KmeqvxgydkAQV8GK83rZEWWONfqe/EW1ntlMMUu4kehDLI6z -eM7b41N5cdblIZQB2lWHmiRk9opmzN6cN82oNLFpmyPInngiK3BD41VHMWEZ71jF -hS9OMPagMRYjyOfiZRYzy78aG6A9+MpeizGLYAiJLQwGXFK3xPkKmNEVX58Svnw2 -Yzi9RKR/5CYrCsSXaQ3pjOLAEFe4yHYSkVXySGnYvCoCWw9E1CAx2/S6cCZdkGCe -vEsXCS+0yx5DaMkHJ8HSXPfqIbloEpw8nL+e/IBcm2PN7EeqJSdnoDfzAIJ9VNep -+OkuE6N36B9K ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIFijCCA3KgAwIBAgIQDHbanJEMTiye/hXQWJM8TDANBgkqhkiG9w0BAQUFADBf -MQswCQYDVQQGEwJOTDESMBAGA1UEChMJRGlnaU5vdGFyMRowGAYDVQQDExFEaWdp -Tm90YXIgUm9vdCBDQTEgMB4GCSqGSIb3DQEJARYRaW5mb0BkaWdpbm90YXIubmww -HhcNMDcwNTE2MTcxOTM2WhcNMjUwMzMxMTgxOTIxWjBfMQswCQYDVQQGEwJOTDES -MBAGA1UEChMJRGlnaU5vdGFyMRowGAYDVQQDExFEaWdpTm90YXIgUm9vdCBDQTEg -MB4GCSqGSIb3DQEJARYRaW5mb0BkaWdpbm90YXIubmwwggIiMA0GCSqGSIb3DQEB -AQUAA4ICDwAwggIKAoICAQCssFjBAL3YIQgLK5r+blYwBZ8bd5AQQVzDDYcRd46B -8cp86Yxq7Th0Nbva3/m7wAk3tJZzgX0zGpg595NvlX89ubF1h7pRSOiLcD6VBMXY -tsMW2YiwsYcdcNqGtA8Ui3rPENF0NqISe3eGSnnme98CEWilToauNFibJBN4ViIl -HgGLS1Fx+4LMWZZpiFpoU8W5DQI3y0u8ZkqQfioLBQftFl9VkHXYRskbg+IIvvEj -zJkd1ioPgyAVWCeCLvriIsJJsbkBgWqdbZ1Ad2h2TiEqbYRAhU52mXyC8/O3AlnU -JgEbjt+tUwbRrhjd4rI6y9eIOI6sWym5GdOY+RgDz0iChmYLG2kPyes4iHomGgVM -ktck1JbyrFIto0fVUvY//s6EBnCmqj6i8rZWNBhXouSBbefK8GrTx5FrAoNBfBXv -a5pkXuPQPOWx63tdhvvL5ndJzaNl3Pe5nLjkC1+Tz8wwGjIczhxjlaX56uF0i57p -K6kwe6AYHw4YC+VbqdPRbB4HZ4+RS6mKvNJmqpMBiLKR+jFc1abBUggJzQpjotMi -puih2TkGl/VujQKQjBR7P4DNG5y6xFhyI6+2Vp/GekIzKQc/gsnmHwUNzUwoNovT -yD4cxojvXu6JZOkd69qJfjKmadHdzIif0dDJZiHcBmfFlHqabWJMfczgZICynkeO -owIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNV -HQ4EFgQUiGi/4I41xDs4a2L3KDuEgcgM100wDQYJKoZIhvcNAQEFBQADggIBADsC -jcs8MOhuoK3yc7NfniUTBAXT9uOLuwt5zlPe5JbF0a9zvNXD0EBVfEB/zRtfCdXy -fJ9oHbtdzno5wozWmHvFg1Wo1X1AyuAe94leY12hE8JdiraKfADzI8PthV9xdvBo -Y6pFITlIYXg23PFDk9Qlx/KAZeFTAnVR/Ho67zerhChXDNjU1JlWbOOi/lmEtDHo -M/hklJRRl6s5xUvt2t2AC298KQ3EjopyDedTFLJgQT2EkTFoPSdE2+Xe9PpjRchM -Ppj1P0G6Tss3DbpmmPHdy59c91Q2gmssvBNhl0L4eLvMyKKfyvBovWsdst+Nbwed -2o5nx0ceyrm/KkKRt2NTZvFCo+H0Wk1Ya7XkpDOtXHAd3ODy63MUkZoDweoAZbwH -/M8SESIsrqC9OuCiKthZ6SnTGDWkrBFfGbW1G/8iSlzGeuQX7yCpp/Q/rYqnmgQl -nQ7KN+ZQ/YxCKQSa7LnPS3K94gg2ryMvYuXKAdNw23yCIywWMQzGNgeQerEfZ1jE -O1hZibCMjFCz2IbLaKPECudpSyDOwR5WS5WpI2jYMNjD67BVUc3l/Su49bsRn1NU -9jQZjHkJNsphFyUXC4KYcwx3dMPVDceoEkzHp1RxRy4sGn3J4ys7SN4nhKdjNrN9 -j6BkOSQNPXuHr2ZcdBtLc7LljPCGmbjlxd+Ewbfr ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIICZzCCAdCgAwIBAgIBBDANBgkqhkiG9w0BAQUFADBhMQswCQYDVQQGEwJVUzEY -MBYGA1UEChMPVS5TLiBHb3Zlcm5tZW50MQwwCgYDVQQLEwNEb0QxDDAKBgNVBAsT -A1BLSTEcMBoGA1UEAxMTRG9EIENMQVNTIDMgUm9vdCBDQTAeFw0wMDA1MTkxMzEz -MDBaFw0yMDA1MTQxMzEzMDBaMGExCzAJBgNVBAYTAlVTMRgwFgYDVQQKEw9VLlMu -IEdvdmVybm1lbnQxDDAKBgNVBAsTA0RvRDEMMAoGA1UECxMDUEtJMRwwGgYDVQQD -ExNEb0QgQ0xBU1MgMyBSb290IENBMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKB -gQC1MP5kvurMbe2BLPd/6Rm6DmlqKOGpqcuVWB/x5pppU+CIP5HFUbljl6jmIYwT -XjY8qFf6+HAsTGrLvzCnTBbkMlz4ErBR+BZXjS+0TfouqJToKmHUVw1Hzm4sL36Y -Z8wACKu2lhY1woWR5VugCsdmUmLzYXWVF668KlYppeArUwIDAQABoy8wLTAdBgNV -HQ4EFgQUbJyl8FyPbUGNxBc7kFfCD6PNbf4wDAYDVR0TBAUwAwEB/zANBgkqhkiG -9w0BAQUFAAOBgQCvcUT5lyPMaGmMQwdBuoggsyIAQciYoFUczT9usZNcrfoYmrsc -c2/9JEKPh59Rz76Gn+nXikhPCNlplKw/5g8tlw8ok3ZPYt//oM1h+KaGDDE0INx/ -L6j7Ob6V7jhZAmLB3mwVT+DfnbvkeXMk/WNklfdKqJkfSGWVx3u/eDLneg== ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIICZzCCAdCgAwIBAgIBGjANBgkqhkiG9w0BAQUFADBhMQswCQYDVQQGEwJVUzEY -MBYGA1UEChMPVS5TLiBHb3Zlcm5tZW50MQwwCgYDVQQLEwNEb0QxDDAKBgNVBAsT -A1BLSTEcMBoGA1UEAxMTRG9EIFBLSSBNZWQgUm9vdCBDQTAeFw05ODA4MDYxNTAx -MDBaFw0wODA4MDcxNTAxMDBaMGExCzAJBgNVBAYTAlVTMRgwFgYDVQQKEw9VLlMu -IEdvdmVybm1lbnQxDDAKBgNVBAsTA0RvRDEMMAoGA1UECxMDUEtJMRwwGgYDVQQD -ExNEb0QgUEtJIE1lZCBSb290IENBMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKB -gQC5arG1dp5gWLAG69GfVnf0laK3aCAXLKGE65A72UGYsJQ3ENGaE9lW/JoDaLV8 -wrjQIL87bVC34jTvJs2aPjd7oeUaUXjeddt8bYjwRV/fwXl/oUoGx9umpJUuNvEW -1H9P6xJFyzB9jpm+HGW+Oid3wtWKqNq1xsSuMByHlpoXtwIDAQABoy8wLTAdBgNV -HQ4EFgQUxVnSzvGYlVBmqG3eMkvWYTXiRrMwDAYDVR0TBAUwAwEB/zANBgkqhkiG -9w0BAQUFAAOBgQAyPjGMqsgKSbKHr38GlCT6WmkKtCWX6YX/3S3vaf39asluzJX6 -3sTcMByqi0jy7BLYbgKzPvxmuW3yVUlLl6rV6YrId62ezjPmaIqkDI8snEM0BWSW -2ousTPara2J0xvzdC5lj/+ke6LHrO9yhSLRFMk8quccSXtFW6H5ei0+sGg== ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIDcDCCAligAwIBAgIBBTANBgkqhkiG9w0BAQUFADBbMQswCQYDVQQGEwJVUzEY -MBYGA1UEChMPVS5TLiBHb3Zlcm5tZW50MQwwCgYDVQQLEwNEb0QxDDAKBgNVBAsT -A1BLSTEWMBQGA1UEAxMNRG9EIFJvb3QgQ0EgMjAeFw0wNDEyMTMxNTAwMTBaFw0y -OTEyMDUxNTAwMTBaMFsxCzAJBgNVBAYTAlVTMRgwFgYDVQQKEw9VLlMuIEdvdmVy -bm1lbnQxDDAKBgNVBAsTA0RvRDEMMAoGA1UECxMDUEtJMRYwFAYDVQQDEw1Eb0Qg -Um9vdCBDQSAyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwCzB9o07 -rP8/PNZxvrh0IgfscEEV/KtA4weqwcPYn/7aTDq/P8jYKHtLNgHArEUlw9IOCo+F -GGQQPRoTcCpvjtfcjZOzQQ84Ic2tq8I9KgXTVxE3Dc2MUfmT48xGSSGOFLTNyxQ+ -OM1yMe6rEvJl6jQuVl3/7mN1y226kTT8nvP0LRy+UMRC31mI/2qz+qhsPctWcXEF -lrufgOWARVlnQbDrw61gpIB1BhecDvRD4JkOG/t/9bPMsoGCsf0ywbi+QaRktWA6 -WlEwjM7eQSwZR1xJEGS5dKmHQa99brrBuKG/ZTE6BGf5tbuOkooAY7ix5ow4X4P/ -UNU7ol1rshDMYwIDAQABoz8wPTAdBgNVHQ4EFgQUSXS7DF66ev4CVO97oMaVxgmA -cJYwCwYDVR0PBAQDAgGGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEFBQAD -ggEBAJiRjT+JyLv1wGlzKTs1rLqzCHY9cAmS6YREIQF9FHYb7lFsHY0VNy17MWn0 -mkS4r0bMNPojywMnGdKDIXUr5+AbmSbchECV6KjSzPZYXGbvP0qXEIIdugqi3VsG -K52nZE7rLgE1pLQ/E61V5NVzqGmbEfGY8jEeb0DU+HifjpGgb3AEkGaqBivO4XqS -tX3h4NGW56E6LcyxnR8FRO2HmdNNGnA5wQQM5X7Z8a/XIA7xInolpHOZzD+kByeW -qKKV7YK5FtOeC4fCwfKI9WLfaN/HvGlR7bFc3FRUKQ8JOZqsA8HbDE2ubwp6Fknx -v5HSOJTT9pUst2zJQraNypCNhdk= ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIECTCCAvGgAwIBAgIQDV6ZCtadt3js2AdWO4YV2TANBgkqhkiG9w0BAQUFADBb -MQswCQYDVQQGEwJVUzEgMB4GA1UEChMXRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3Qx -ETAPBgNVBAsTCERTVCBBQ0VTMRcwFQYDVQQDEw5EU1QgQUNFUyBDQSBYNjAeFw0w -MzExMjAyMTE5NThaFw0xNzExMjAyMTE5NThaMFsxCzAJBgNVBAYTAlVTMSAwHgYD -VQQKExdEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdDERMA8GA1UECxMIRFNUIEFDRVMx -FzAVBgNVBAMTDkRTVCBBQ0VTIENBIFg2MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A -MIIBCgKCAQEAuT31LMmU3HWKlV1j6IR3dma5WZFcRt2SPp/5DgO0PWGSvSMmtWPu -ktKe1jzIDZBfZIGxqAgNTNj50wUoUrQBJcWVHAx+PhCEdc/BGZFjz+iokYi5Q1K7 -gLFViYsx+tC3dr5BPTCapCIlF3PoHuLTrCq9Wzgh1SpL11V94zpVvddtawJXa+ZH -fAjIgrrep4c9oW24MFbCswKBXy314powGCi4ZtPLAZZv6opFVdbgnf9nKxcCpk4a -ahELfrd755jWjHZvwTvbUJN+5dCOHze4vbrGn2zpfDPyMjwmR/onJALJfh1biEIT -ajV8fTXpLmaRcpPVMibEdPVTo7NdmvYJywIDAQABo4HIMIHFMA8GA1UdEwEB/wQF -MAMBAf8wDgYDVR0PAQH/BAQDAgHGMB8GA1UdEQQYMBaBFHBraS1vcHNAdHJ1c3Rk -c3QuY29tMGIGA1UdIARbMFkwVwYKYIZIAWUDAgEBATBJMEcGCCsGAQUFBwIBFjto -dHRwOi8vd3d3LnRydXN0ZHN0LmNvbS9jZXJ0aWZpY2F0ZXMvcG9saWN5L0FDRVMt -aW5kZXguaHRtbDAdBgNVHQ4EFgQUCXIGThhDD+XWzMNqizF7eI+og7gwDQYJKoZI -hvcNAQEFBQADggEBAKPYjtay284F5zLNAdMEA+V25FYrnJmQ6AgwbN99Pe7lv7Uk -QIRJ4dEorsTCOlMwiPH1d25Ryvr/ma8kXxug/fKshMrfqfBfBC6tFr8hlxCBPeP/ -h40y3JTlR4peahPJlJU90u7INJXQgNStMgiAVDzgvVJT11J8smk/f3rPanTK+gQq -nExaBqXpIK1FZg9p8d2/6eMyi/rgwYZNcjwu2JN4Cir42NInPRmJX1p7ijvMDNpR -rscL9yuwNwXsvFcj4jjSm2jzVhKIT0J8uDHEtdvkyCE06UgRNe76x5JXxZ805Mf2 -9w4LTJxoeHtxMcfrHuBnQfO3oKfN5XozNmr6mis= ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIDSjCCAjKgAwIBAgIQRK+wgNajJ7qJMDmGLvhAazANBgkqhkiG9w0BAQUFADA/ -MSQwIgYDVQQKExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4xFzAVBgNVBAMT -DkRTVCBSb290IENBIFgzMB4XDTAwMDkzMDIxMTIxOVoXDTIxMDkzMDE0MDExNVow -PzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QgQ28uMRcwFQYDVQQD -Ew5EU1QgUm9vdCBDQSBYMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB -AN+v6ZdQCINXtMxiZfaQguzH0yxrMMpb7NnDfcdAwRgUi+DoM3ZJKuM/IUmTrE4O -rz5Iy2Xu/NMhD2XSKtkyj4zl93ewEnu1lcCJo6m67XMuegwGMoOifooUMM0RoOEq -OLl5CjH9UL2AZd+3UWODyOKIYepLYYHsUmu5ouJLGiifSKOeDNoJjj4XLh7dIN9b -xiqKqy69cK3FCxolkHRyxXtqqzTWMIn/5WgTe1QLyNau7Fqckh49ZLOMxt+/yUFw -7BZy1SbsOFU5Q9D8/RhcQPGX69Wam40dutolucbY38EVAjqr2m7xPi71XAicPNaD -aeQQmxkqtilX4+U9m5/wAl0CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNV -HQ8BAf8EBAMCAQYwHQYDVR0OBBYEFMSnsaR7LHH62+FLkHX/xBVghYkQMA0GCSqG -SIb3DQEBBQUAA4IBAQCjGiybFwBcqR7uKGY3Or+Dxz9LwwmglSBd49lZRNI+DT69 -ikugdB/OEIKcdBodfpga3csTS7MgROSR6cz8faXbauX+5v3gTt23ADq1cEmv8uXr -AvHRAosZy5Q6XkjEGB5YGV8eAlrwDPGxrancWYaLbumR9YbK+rlmM6pZW87ipxZz -R8srzJmwN0jP41ZL9c8PDHIyh8bwRLtTcm1D9SZImlJnt1ir/md2cXjbDaJWFBM5 -JDGFoqgCWjBH4d1QB7wCCZAA62RjYJsWvIjJEubSfZGL+T0yjWW06XyxV3bqxbYo -Ob8VZRzI9neWagqNdwvYkQsEjgfbKbYK7p2CNTUQ ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIDOzCCAiOgAwIBAgIRANAeRlAAACmMAAAAAgAAAAIwDQYJKoZIhvcNAQEFBQAw -PzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QgQ28uMRcwFQYDVQQD -Ew5EU1QgUm9vdCBDQSBYNDAeFw0wMDA5MTMwNjIyNTBaFw0yMDA5MTMwNjIyNTBa -MD8xJDAiBgNVBAoTG0RpZ2l0YWwgU2lnbmF0dXJlIFRydXN0IENvLjEXMBUGA1UE -AxMORFNUIFJvb3QgQ0EgWDQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB -AQCthX3OFEYY8gSeIYur0O4ypOT68HnDrjLfIutL5PZHRwQGjzCPb9PFo/ihboJ8 -RvfGhBAqpQCo47zwYEhpWm1jB+L/OE/dBBiyn98krfU2NiBKSom2J58RBeAwHGEy -cO+lewyjVvbDDLUy4CheY059vfMjPAftCRXjqSZIolQb9FdPcAoa90mFwB7rKniE -J7vppdrUScSS0+eBrHSUPLdvwyn4RGp+lSwbWYcbg5EpSpE0GRJdchic0YDjvIoC -YHpe7Rkj93PYRTQyU4bhC88ck8tMqbvRYqMRqR+vobbkrj5LLCOQCHV5WEoxWh+0 -E2SpIFe7RkV++MmpIAc0h1tZAgMBAAGjMjAwMA8GA1UdEwEB/wQFMAMBAf8wHQYD -VR0OBBYEFPCD6nPIP1ubWzdf9UyPWvf0hki9MA0GCSqGSIb3DQEBBQUAA4IBAQCE -G85wl5eEWd7adH6XW/ikGN5salvpq/Fix6yVTzE6CrhlP5LBdkf6kx1bSPL18M45 -g0rw2zA/MWOhJ3+S6U+BE0zPGCuu8YQaZibR7snm3HiHUaZNMu5c8D0x0bcMxDjY -AVVcHCoNiL53Q4PLW27nbY6wwG0ffFKmgV3blxrYWfuUDgGpyPwHwkfVFvz9qjaV -mf12VJffL6W8omBPtgteb6UaT/k1oJ7YI0ldGf+ngpVbRhD+LC3cUtT6GO/BEPZu -8YTV/hbiDH5v3khVqMIeKT6o8IuXGG7F6a6vKwP1F1FwTXf4UC/ivhme7vdUH7B/ -Vv4AEbT8dNfEeFxrkDbh ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIID2DCCAsACEQDQHkCLAAACfAAAAAIAAAABMA0GCSqGSIb3DQEBBQUAMIGpMQsw -CQYDVQQGEwJ1czENMAsGA1UECBMEVXRhaDEXMBUGA1UEBxMOU2FsdCBMYWtlIENp -dHkxJDAiBgNVBAoTG0RpZ2l0YWwgU2lnbmF0dXJlIFRydXN0IENvLjERMA8GA1UE -CxMIRFNUQ0EgWDExFjAUBgNVBAMTDURTVCBSb290Q0EgWDExITAfBgkqhkiG9w0B -CQEWEmNhQGRpZ3NpZ3RydXN0LmNvbTAeFw05ODEyMDExODE4NTVaFw0wODExMjgx -ODE4NTVaMIGpMQswCQYDVQQGEwJ1czENMAsGA1UECBMEVXRhaDEXMBUGA1UEBxMO -U2FsdCBMYWtlIENpdHkxJDAiBgNVBAoTG0RpZ2l0YWwgU2lnbmF0dXJlIFRydXN0 -IENvLjERMA8GA1UECxMIRFNUQ0EgWDExFjAUBgNVBAMTDURTVCBSb290Q0EgWDEx -ITAfBgkqhkiG9w0BCQEWEmNhQGRpZ3NpZ3RydXN0LmNvbTCCASIwDQYJKoZIhvcN -AQEBBQADggEPADCCAQoCggEBANLGJrbnpT3BxGjVUG9TxW9JEwm4ryxIjRRqoxdf -WvnTLnUv2Chi0ZMv/E3Uq4flCMeZ55I/db3rJbQVwZsZPdJEjdd0IG03Ao9pk1uK -xBmd9LIO/BZsubEFkoPRhSxglD5FVaDZqwgh5mDoO3TymVBRaNADLbGAvqPYUrBE -zUNKcI5YhZXhTizWLUFv1oTnyJhEykfbLCSlaSbPa7gnYsP0yXqSI+0TZ4KuRS5F -5X5yP4WdlGIQ5jyRoa13AOAV7POEgHJ6jm5gl8ckWRA0g1vhpaRptlc1HHhZxtMv -OnNn7pTKBBMFYgZwI7P0fO5F2WQLW0mqpEPOJsREEmy43XkCAwEAATANBgkqhkiG -9w0BAQUFAAOCAQEAojeyP2n714Z5VEkxlTMr89EJFEliYIalsBHiUMIdBlc+Legz -ZL6bqq1fG03UmZWii5rJYnK1aerZWKs17RWiQ9a2vAd5ZWRzfdd5ynvVWlHG4VME -lo04z6MXrDlxawHDi1M8Y+nuecDkvpIyZHqzH5eUYr3qsiAVlfuX8ngvYzZAOONG -Dx3drJXK50uQe7FLqdTF65raqtWjlBRGjS0f8zrWkzr2Pnn86Oawde3uPclwx12q -gUtGJRzHbBXjlU4PqjI3lAoXJJIThFjSY28r9+ZbYgsTF7ANUkz+/m9c4pFuHf2k -Ytdo+o56T9II2pPc8JIRetDccpMMc5NihWjQ9A== ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIID2DCCAsACEQDQHkCLAAB3bQAAAAEAAAAEMA0GCSqGSIb3DQEBBQUAMIGpMQsw -CQYDVQQGEwJ1czENMAsGA1UECBMEVXRhaDEXMBUGA1UEBxMOU2FsdCBMYWtlIENp -dHkxJDAiBgNVBAoTG0RpZ2l0YWwgU2lnbmF0dXJlIFRydXN0IENvLjERMA8GA1UE -CxMIRFNUQ0EgWDIxFjAUBgNVBAMTDURTVCBSb290Q0EgWDIxITAfBgkqhkiG9w0B -CQEWEmNhQGRpZ3NpZ3RydXN0LmNvbTAeFw05ODExMzAyMjQ2MTZaFw0wODExMjcy -MjQ2MTZaMIGpMQswCQYDVQQGEwJ1czENMAsGA1UECBMEVXRhaDEXMBUGA1UEBxMO -U2FsdCBMYWtlIENpdHkxJDAiBgNVBAoTG0RpZ2l0YWwgU2lnbmF0dXJlIFRydXN0 -IENvLjERMA8GA1UECxMIRFNUQ0EgWDIxFjAUBgNVBAMTDURTVCBSb290Q0EgWDIx -ITAfBgkqhkiG9w0BCQEWEmNhQGRpZ3NpZ3RydXN0LmNvbTCCASIwDQYJKoZIhvcN -AQEBBQADggEPADCCAQoCggEBANx18IzAdZaawGIfJvfE4Zrq4FZzW5nNAUSoCLbV -p9oaBBg5kkp4o4HC9Xd6ULRw/5qrxsfKboNPQpj7Jgva3G3WqZlVUmfpKAOS3OWw -BZoPFflrWXJW8vo5/Kpo7g8fEIMv/J36F5bdguPmRX3AS4BEH+0s4IT9kVySVGkl -5WJp3OXuAFK9MwutdQKFp2RQLcUZGTDAJtvJ0/0uma1ZtQtN1EGuhUhDWdy3qOKi -3sOP17ihYqZoUFLkzzGnlIXan0YyF1bl8utmPRL/Q9uY73fPy4GNNLHGUEom0eQ+ -QVCvbK4iNC7Va26Dunm4dmVI2gkpZGMiuftHdoWMhkTLCdsCAwEAATANBgkqhkiG -9w0BAQUFAAOCAQEAtTYOXeFhKFoRZcA/gwN5Tb4opgsHAlKFzfiR0BBstWogWxyQ -2TA8xkieil5k+aFxd+8EJx8H6+Qm93N0yUQYGmbT4EOvkTvRyyzYdFQ6HE3K1GjN -I3wdEJ5F6fYAbqbNGf9PLCmPV03Ed5K+4EwJ+11EhmYhqLkyolbV6YyDfFk/xPEL -553snr2cGA4+wjl5KLcDDQjLxufZATdQEOzMYRZA1K8xdHv8PzGn0EdzMzkbzE5q -10mDEQb+64JYMzJM8FasHpwvVpp7wUocpf1VNs78lk30sPDst2yC7S8xmUJMqbIN -uBVd8d+6ybVK1GSYsyapMMj9puyrliGtf8J4tg== ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIF5zCCA8+gAwIBAgIITK9zQhyOdAIwDQYJKoZIhvcNAQEFBQAwgYAxODA2BgNV -BAMML0VCRyBFbGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sx -c8SxMTcwNQYDVQQKDC5FQkcgQmlsacWfaW0gVGVrbm9sb2ppbGVyaSB2ZSBIaXpt -ZXRsZXJpIEEuxZ4uMQswCQYDVQQGEwJUUjAeFw0wNjA4MTcwMDIxMDlaFw0xNjA4 -MTQwMDMxMDlaMIGAMTgwNgYDVQQDDC9FQkcgRWxla3Ryb25payBTZXJ0aWZpa2Eg -SGl6bWV0IFNhxJ9sYXnEsWPEsXPEsTE3MDUGA1UECgwuRUJHIEJpbGnFn2ltIFRl -a25vbG9qaWxlcmkgdmUgSGl6bWV0bGVyaSBBLsWeLjELMAkGA1UEBhMCVFIwggIi -MA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDuoIRh0DpqZhAy2DE4f6en5f2h -4fuXd7hxlugTlkaDT7byX3JWbhNgpQGR4lvFzVcfd2NR/y8927k/qqk153nQ9dAk -tiHq6yOU/im/+4mRDGSaBUorzAzu8T2bgmmkTPiab+ci2hC6X5L8GCcKqKpE+i4s -tPtGmggDg3KriORqcsnlZR9uKg+ds+g75AxuetpX/dfreYteIAbTdgtsApWjluTL -dlHRKJ2hGvxEok3MenaoDT2/F08iiFD9rrbskFBKW5+VQarKD7JK/oCZTqNGFav4 -c0JqwmZ2sQomFd2TkuzbqV9UIlKRcF0T6kjsbgNs2d1s/OsNA/+mgxKb8amTD8Um -TDGyY5lhcucqZJnSuOl14nypqZoaqsNW2xCaPINStnuWt6yHd6i58mcLlEOzrz5z -+kI2sSXFCjEmN1ZnuqMLfdb3ic1nobc6HmZP9qBVFCVMLDMNpkGMvQQxahByCp0O -Lna9XvNRiYuoP1Vzv9s6xiQFlpJIqkuNKgPlV5EQ9GooFW5Hd4RcUXSfGenmHmMW -OeMRFeNYGkS9y8RsZteEBt8w9DeiQyJ50hBs37vmExH8nYQKE3vwO9D8owrXieqW -fo1IhR5kX9tUoqzVegJ5a9KK8GfaZXINFHDk6Y54jzJ0fFfy1tb0Nokb+Clsi7n2 -l9GkLqq+CxnCRelwXQIDAJ3Zo2MwYTAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB -/wQEAwIBBjAdBgNVHQ4EFgQU587GT/wWZ5b6SqMHwQSny2re2kcwHwYDVR0jBBgw -FoAU587GT/wWZ5b6SqMHwQSny2re2kcwDQYJKoZIhvcNAQEFBQADggIBAJuYml2+ -8ygjdsZs93/mQJ7ANtyVDR2tFcU22NU57/IeIl6zgrRdu0waypIN30ckHrMk2pGI -6YNw3ZPX6bqz3xZaPt7gyPvT/Wwp+BVGoGgmzJNSroIBk5DKd8pNSe/iWtkqvTDO -TLKBtjDOWU/aWR1qeqRFsIImgYZ29fUQALjuswnoT4cCB64kXPBfrAowzIpAoHME -wfuJJPaaHFy3PApnNgUIMbOv2AFoKuB4j3TeuFGkjGwgPaL7s9QJ/XvCgKqTbCmY -Iai7FvOpEl90tYeY8pUm3zTvilORiF0alKM/fCL414i6poyWqD1SNGKfAB5UVUJn -xk1Gj7sURT0KlhaOEKGXmdXTMIXM3rRyt7yKPBgpaP3ccQfuJDlq+u2lrDgv+R4Q -DgZxGhBM/nV+/x5XOULK1+EVoVZVWRvRo68R2E7DpSvvkL/A7IITW43WciyTTo9q -Kd+FPNMN4KIYEsxVL0e3p5sC/kH2iExt2qkBR4NkJ2IQgtYSe14DHzSpyZH+r11t -hie3I6p1GMog57AP14kOpmciY/SDQSsGS7tY1dHXt7kQY9iJSrSq3RZj9W6+YKH4 -7ejWkE8axsWgKdOnIaj1Wjz3x0miIZpKlVIglnKaZsv30oZDfCK+lvm9AahH3eU7 -QPl1K5srRmSGjR70j/sHd9DqSaIcjVIUpgqT ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIICmDCCAgGgAwIBAgIBDjANBgkqhkiG9w0BAQUFADBLMQswCQYDVQQGEwJVUzEY -MBYGA1UEChMPVS5TLiBHb3Zlcm5tZW50MQwwCgYDVQQLEwNFQ0ExFDASBgNVBAMT -C0VDQSBSb290IENBMB4XDTA0MDYxNDEwMjAwOVoXDTQwMDYxNDEwMjAwOVowSzEL -MAkGA1UEBhMCVVMxGDAWBgNVBAoTD1UuUy4gR292ZXJubWVudDEMMAoGA1UECxMD -RUNBMRQwEgYDVQQDEwtFQ0EgUm9vdCBDQTCBnzANBgkqhkiG9w0BAQEFAAOBjQAw -gYkCgYEArkr2eXIS6oAKIpDkOlcQZdMGdncoygCEIU+ktqY3of5SVVXU7/it7kJ1 -EUzR4ii2vthQtbww9aAnpQxcEmXZk8eEyiGEPy+cCQMllBY+efOtKgjbQNDZ3lB9 -19qzUJwBl2BMxslU1XsJQw9SK10lPbQm4asa8E8e5zTUknZBWnECAwEAAaOBizCB -iDAfBgNVHSMEGDAWgBT2uAQnDlYW2blj2f2hVGVBoAhILzAdBgNVHQ4EFgQU9rgE -Jw5WFtm5Y9n9oVRlQaAISC8wDgYDVR0PAQH/BAQDAgGGMA8GA1UdEwEB/wQFMAMB -Af8wJQYDVR0gBB4wHDAMBgpghkgBZQMCAQwBMAwGCmCGSAFlAwIBDAIwDQYJKoZI -hvcNAQEFBQADgYEAHh0EQY2cZ209aBb5q0wW1ER0dc4OGzsLyqjHfaQ4TEaMmUwL -AJRta/c4KVWLiwbODsvgJk+CaWmSL03gRW/ciVb/qDV7qh9Pyd1cOlanZTAnPog2 -i82yL3i2fK9DCC84uoxEQbgqK2jx9bIjFTwlAqITk9fGAm5mdT84IEwq1Gw= ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIEkTCCA3mgAwIBAgIERWtQVDANBgkqhkiG9w0BAQUFADCBsDELMAkGA1UEBhMC -VVMxFjAUBgNVBAoTDUVudHJ1c3QsIEluYy4xOTA3BgNVBAsTMHd3dy5lbnRydXN0 -Lm5ldC9DUFMgaXMgaW5jb3Jwb3JhdGVkIGJ5IHJlZmVyZW5jZTEfMB0GA1UECxMW -KGMpIDIwMDYgRW50cnVzdCwgSW5jLjEtMCsGA1UEAxMkRW50cnVzdCBSb290IENl -cnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTA2MTEyNzIwMjM0MloXDTI2MTEyNzIw -NTM0MlowgbAxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1FbnRydXN0LCBJbmMuMTkw -NwYDVQQLEzB3d3cuZW50cnVzdC5uZXQvQ1BTIGlzIGluY29ycG9yYXRlZCBieSBy -ZWZlcmVuY2UxHzAdBgNVBAsTFihjKSAyMDA2IEVudHJ1c3QsIEluYy4xLTArBgNV -BAMTJEVudHJ1c3QgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASIwDQYJ -KoZIhvcNAQEBBQADggEPADCCAQoCggEBALaVtkNC+sZtKm9I35RMOVcF7sN5EUFo -Nu3s/poBj6E4KPz3EEZmLk0eGrEaTsbRwJWIsMn/MYszA9u3g3s+IIRe7bJWKKf4 -4LlAcTfFy0cOlypowCKVYhXbR9n10Cv/gkvJrT7eTNuQgFA/CYqEAOwwCj0Yzfv9 -KlmaI5UXLEWeH25DeW0MXJj+SKfFI0dcXv1u5x609mhF0YaDW6KKjbHjKYD+JXGI -rb68j6xSlkuqUY3kEzEZ6E5Nn9uss2rVvDlUccp6en+Q3X0dgNmBu1kmwhH+5pPi -94DkZfs0Nw4pgHBNrziGLp5/V6+eF67rHMsoIV+2HNjnogQi+dPa2MsCAwEAAaOB -sDCBrTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zArBgNVHRAEJDAi -gA8yMDA2MTEyNzIwMjM0MlqBDzIwMjYxMTI3MjA1MzQyWjAfBgNVHSMEGDAWgBRo -kORnpKZTgMeGZqTx90tD+4S9bTAdBgNVHQ4EFgQUaJDkZ6SmU4DHhmak8fdLQ/uE -vW0wHQYJKoZIhvZ9B0EABBAwDhsIVjcuMTo0LjADAgSQMA0GCSqGSIb3DQEBBQUA -A4IBAQCT1DCw1wMgKtD5Y+iRDAUgqV8ZyntyTtSx29CW+1RaGSwMCPeyvIWonX9t -O1KzKtvn1ISMY/YPyyYBkVBs9F8U4pN0wBOeMDpQ47RgxRzwIkSNcUesyBrJ6Zua -AGAT/3B+XxFNSRuzFVJ7yVTav52Vr2ua2J7p8eRDjeIRRDq/r72DQnNSi6q7pynP -9WQcCk3RvKqsnyrQ/39/2n3qse0wJcGE2jTSW3iDVuycNsMm4hH2Z0kdkquM++v/ -eu6FSqdQgPCnXEqULl8FmTxSQeDNtGPPAUO6nIPcj2A781q0tHuu2guQOHXvgR1m -0vdXcDazv/wor3ElhVsT/h5/WrQ8 ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIEXDCCA0SgAwIBAgIEOGO5ZjANBgkqhkiG9w0BAQUFADCBtDEUMBIGA1UEChML -RW50cnVzdC5uZXQxQDA+BgNVBAsUN3d3dy5lbnRydXN0Lm5ldC9DUFNfMjA0OCBp -bmNvcnAuIGJ5IHJlZi4gKGxpbWl0cyBsaWFiLikxJTAjBgNVBAsTHChjKSAxOTk5 -IEVudHJ1c3QubmV0IExpbWl0ZWQxMzAxBgNVBAMTKkVudHJ1c3QubmV0IENlcnRp -ZmljYXRpb24gQXV0aG9yaXR5ICgyMDQ4KTAeFw05OTEyMjQxNzUwNTFaFw0xOTEy -MjQxODIwNTFaMIG0MRQwEgYDVQQKEwtFbnRydXN0Lm5ldDFAMD4GA1UECxQ3d3d3 -LmVudHJ1c3QubmV0L0NQU18yMDQ4IGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxp -YWIuKTElMCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEG -A1UEAxMqRW50cnVzdC5uZXQgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgKDIwNDgp -MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArU1LqRKGsuqjIAcVFmQq -K0vRvwtKTY7tgHalZ7d4QMBzQshowNtTK91euHaYNZOLGp18EzoOH1u3Hs/lJBQe -sYGpjX24zGtLA/ECDNyrpUAkAH90lKGdCCmziAv1h3edVc3kw37XamSrhRSGlVuX -MlBvPci6Zgzj/L24ScF2iUkZ/cCovYmjZy/Gn7xxGWC4LeksyZB2ZnuU4q941mVT -XTzWnLLPKQP5L6RQstRIzgUyVYr9smRMDuSYB3Xbf9+5CFVghTAp+XtIpGmG4zU/ -HoZdenoVve8AjhUiVBcAkCaTvA5JaJG/+EfTnZVCwQ5N328mz8MYIWJmQ3DW1cAH -4QIDAQABo3QwcjARBglghkgBhvhCAQEEBAMCAAcwHwYDVR0jBBgwFoAUVeSB0RGA -vtiJuQijMfmhJAkWuXAwHQYDVR0OBBYEFFXkgdERgL7YibkIozH5oSQJFrlwMB0G -CSqGSIb2fQdBAAQQMA4bCFY1LjA6NC4wAwIEkDANBgkqhkiG9w0BAQUFAAOCAQEA -WUesIYSKF8mciVMeuoCFGsY8Tj6xnLZ8xpJdGGQC49MGCBFhfGPjK50xA3B20qMo -oPS7mmNz7W3lKtvtFKkrxjYR0CvrB4ul2p5cGZ1WEvVUKcgF7bISKo30Axv/55IQ -h7A6tcOdBTcSo8f0FbnVpDkWm1M6I5HxqIKiaohowXkCIryqptau37AUX7iH0N18 -f3v/rxzP5tsHrV7bhZ3QKw0z2wTR5klAEyt2+z7pnIkPFc4YsIV4IU9rTw76NmfN -B/L/CNDi3tm/Kq+4h4YhPATKt5Rof8886ZjXOP/swNlQ8C5LWK5Gb9Auw2DaclVy -vUxFnmG6v4SBkgPR0ml8xQ== ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIE7TCCBFagAwIBAgIEOAOR7jANBgkqhkiG9w0BAQQFADCByTELMAkGA1UEBhMC -VVMxFDASBgNVBAoTC0VudHJ1c3QubmV0MUgwRgYDVQQLFD93d3cuZW50cnVzdC5u -ZXQvQ2xpZW50X0NBX0luZm8vQ1BTIGluY29ycC4gYnkgcmVmLiBsaW1pdHMgbGlh -Yi4xJTAjBgNVBAsTHChjKSAxOTk5IEVudHJ1c3QubmV0IExpbWl0ZWQxMzAxBgNV -BAMTKkVudHJ1c3QubmV0IENsaWVudCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAe -Fw05OTEwMTIxOTI0MzBaFw0xOTEwMTIxOTU0MzBaMIHJMQswCQYDVQQGEwJVUzEU -MBIGA1UEChMLRW50cnVzdC5uZXQxSDBGBgNVBAsUP3d3dy5lbnRydXN0Lm5ldC9D -bGllbnRfQ0FfSW5mby9DUFMgaW5jb3JwLiBieSByZWYuIGxpbWl0cyBsaWFiLjEl -MCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEGA1UEAxMq -RW50cnVzdC5uZXQgQ2xpZW50IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGdMA0G -CSqGSIb3DQEBAQUAA4GLADCBhwKBgQDIOpleMRffrCdvkHvkGf9FozTC28GoT/Bo -6oT9n3V5z8GKUZSvx1cDR2SerYIbWtp/N3hHuzeYEpbOxhN979IMMFGpOZ5V+Pux -5zDeg7K6PvHViTs7hbqqdCz+PzFur5GVbgbUB01LLFZHGARS2g4Qk79jkJvh34zm -AqTmT173iwIBA6OCAeAwggHcMBEGCWCGSAGG+EIBAQQEAwIABzCCASIGA1UdHwSC -ARkwggEVMIHkoIHhoIHepIHbMIHYMQswCQYDVQQGEwJVUzEUMBIGA1UEChMLRW50 -cnVzdC5uZXQxSDBGBgNVBAsUP3d3dy5lbnRydXN0Lm5ldC9DbGllbnRfQ0FfSW5m -by9DUFMgaW5jb3JwLiBieSByZWYuIGxpbWl0cyBsaWFiLjElMCMGA1UECxMcKGMp -IDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEGA1UEAxMqRW50cnVzdC5uZXQg -Q2xpZW50IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMCyg -KqAohiZodHRwOi8vd3d3LmVudHJ1c3QubmV0L0NSTC9DbGllbnQxLmNybDArBgNV -HRAEJDAigA8xOTk5MTAxMjE5MjQzMFqBDzIwMTkxMDEyMTkyNDMwWjALBgNVHQ8E -BAMCAQYwHwYDVR0jBBgwFoAUxPucKXuXzUyW/O5bs8qZdIuV6kwwHQYDVR0OBBYE -FMT7nCl7l81MlvzuW7PKmXSLlepMMAwGA1UdEwQFMAMBAf8wGQYJKoZIhvZ9B0EA -BAwwChsEVjQuMAMCBJAwDQYJKoZIhvcNAQEEBQADgYEAP66K8ddmAwWePvrqHEa7 -pFuPeJoSSJn59DXeDDYHAmsQOokUgZwxpnyyQbJq5wcBoUv5nyU7lsqZwz6hURzz -wy5E97BnRqqS5TvaHBkUODDV4qIxJS7x7EU47fgGWANzYrAQMY9Av2TgXD7FTx/a -EkP/TOYGJqibGapEPHayXOw= ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIEgzCCA+ygAwIBAgIEOJ725DANBgkqhkiG9w0BAQQFADCBtDEUMBIGA1UEChML -RW50cnVzdC5uZXQxQDA+BgNVBAsUN3d3dy5lbnRydXN0Lm5ldC9HQ0NBX0NQUyBp -bmNvcnAuIGJ5IHJlZi4gKGxpbWl0cyBsaWFiLikxJTAjBgNVBAsTHChjKSAyMDAw -IEVudHJ1c3QubmV0IExpbWl0ZWQxMzAxBgNVBAMTKkVudHJ1c3QubmV0IENsaWVu -dCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wMDAyMDcxNjE2NDBaFw0yMDAy -MDcxNjQ2NDBaMIG0MRQwEgYDVQQKEwtFbnRydXN0Lm5ldDFAMD4GA1UECxQ3d3d3 -LmVudHJ1c3QubmV0L0dDQ0FfQ1BTIGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxp -YWIuKTElMCMGA1UECxMcKGMpIDIwMDAgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEG -A1UEAxMqRW50cnVzdC5uZXQgQ2xpZW50IENlcnRpZmljYXRpb24gQXV0aG9yaXR5 -MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCTdLS25MVL1qFof2LV7PdRV7Ny -Spj10InJrWPNTTVRaoTUrcloeW+46xHbh65cJFET8VQlhK8pK5/jgOLZy93GRUk0 -iJBeAZfv6lOm3fzB3ksqJeTpNfpVBQbliXrqpBFXO/x8PTbNZzVtpKklWb1m9fkn -5JVn1j+SgF7yNH0rhQIDAQABo4IBnjCCAZowEQYJYIZIAYb4QgEBBAQDAgAHMIHd -BgNVHR8EgdUwgdIwgc+ggcyggcmkgcYwgcMxFDASBgNVBAoTC0VudHJ1c3QubmV0 -MUAwPgYDVQQLFDd3d3cuZW50cnVzdC5uZXQvR0NDQV9DUFMgaW5jb3JwLiBieSBy -ZWYuIChsaW1pdHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMjAwMCBFbnRydXN0Lm5l -dCBMaW1pdGVkMTMwMQYDVQQDEypFbnRydXN0Lm5ldCBDbGllbnQgQ2VydGlmaWNh -dGlvbiBBdXRob3JpdHkxDTALBgNVBAMTBENSTDEwKwYDVR0QBCQwIoAPMjAwMDAy -MDcxNjE2NDBagQ8yMDIwMDIwNzE2NDY0MFowCwYDVR0PBAQDAgEGMB8GA1UdIwQY -MBaAFISLdP3FjcD/J20gN0V8/i3OutN9MB0GA1UdDgQWBBSEi3T9xY3A/ydtIDdF -fP4tzrrTfTAMBgNVHRMEBTADAQH/MB0GCSqGSIb2fQdBAAQQMA4bCFY1LjA6NC4w -AwIEkDANBgkqhkiG9w0BAQQFAAOBgQBObzWAO9GK9Q6nIMstZVXQkvTnhLUGJoMS -hAusO7JE7r3PQNsgDrpuFOow4DtifH+La3xKp9U1PL6oXOpLu5OOgGarDyn9TS2/ -GpsKkMWr2tGzhtQvJFJcem3G8v7lTRowjJDyutdKPkN+1MhQGof4T4HHdguEOnKd -zmVml64mXg== ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIElTCCA/6gAwIBAgIEOJsRPDANBgkqhkiG9w0BAQQFADCBujEUMBIGA1UEChML -RW50cnVzdC5uZXQxPzA9BgNVBAsUNnd3dy5lbnRydXN0Lm5ldC9TU0xfQ1BTIGlu -Y29ycC4gYnkgcmVmLiAobGltaXRzIGxpYWIuKTElMCMGA1UECxMcKGMpIDIwMDAg -RW50cnVzdC5uZXQgTGltaXRlZDE6MDgGA1UEAxMxRW50cnVzdC5uZXQgU2VjdXJl -IFNlcnZlciBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wMDAyMDQxNzIwMDBa -Fw0yMDAyMDQxNzUwMDBaMIG6MRQwEgYDVQQKEwtFbnRydXN0Lm5ldDE/MD0GA1UE -CxQ2d3d3LmVudHJ1c3QubmV0L1NTTF9DUFMgaW5jb3JwLiBieSByZWYuIChsaW1p -dHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMjAwMCBFbnRydXN0Lm5ldCBMaW1pdGVk -MTowOAYDVQQDEzFFbnRydXN0Lm5ldCBTZWN1cmUgU2VydmVyIENlcnRpZmljYXRp -b24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDHwV9OcfHO -8GCGD9JYf9Mzly0XonUwtZZkJi9ow0SrqHXmAGc0V55lxyKbc+bT3QgON1WqJUaB -bL3+qPZ1V1eMkGxKwz6LS0MKyRFWmponIpnPVZ5h2QLifLZ8OAfc439PmrkDQYC2 -dWcTC5/oVzbIXQA23mYU2m52H083jIITiQIDAQABo4IBpDCCAaAwEQYJYIZIAYb4 -QgEBBAQDAgAHMIHjBgNVHR8EgdswgdgwgdWggdKggc+kgcwwgckxFDASBgNVBAoT -C0VudHJ1c3QubmV0MT8wPQYDVQQLFDZ3d3cuZW50cnVzdC5uZXQvU1NMX0NQUyBp -bmNvcnAuIGJ5IHJlZi4gKGxpbWl0cyBsaWFiLikxJTAjBgNVBAsTHChjKSAyMDAw -IEVudHJ1c3QubmV0IExpbWl0ZWQxOjA4BgNVBAMTMUVudHJ1c3QubmV0IFNlY3Vy -ZSBTZXJ2ZXIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxDTALBgNVBAMTBENSTDEw -KwYDVR0QBCQwIoAPMjAwMDAyMDQxNzIwMDBagQ8yMDIwMDIwNDE3NTAwMFowCwYD -VR0PBAQDAgEGMB8GA1UdIwQYMBaAFMtswGvjuz7L/CKc/vuLkpyw8m4iMB0GA1Ud -DgQWBBTLbMBr47s+y/winP77i5KcsPJuIjAMBgNVHRMEBTADAQH/MB0GCSqGSIb2 -fQdBAAQQMA4bCFY1LjA6NC4wAwIEkDANBgkqhkiG9w0BAQQFAAOBgQBi24GRzsia -d0Iv7L0no1MPUBvqTpLwqa+poLpIYcvvyQbvH9X07t9WLebKahlzqlO+krNQAraF -JnJj2HVQYnUUt7NQGj/KEQALhUVpbbalrlHhStyCP2yMNLJ3a9kC9n8O6mUE8c1U -yrrJzOCE98g+EZfTYAkYvAX/bIkz8OwVDw== ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIE2DCCBEGgAwIBAgIEN0rSQzANBgkqhkiG9w0BAQUFADCBwzELMAkGA1UEBhMC -VVMxFDASBgNVBAoTC0VudHJ1c3QubmV0MTswOQYDVQQLEzJ3d3cuZW50cnVzdC5u -ZXQvQ1BTIGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxpYWIuKTElMCMGA1UECxMc -KGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDE6MDgGA1UEAxMxRW50cnVzdC5u -ZXQgU2VjdXJlIFNlcnZlciBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw05OTA1 -MjUxNjA5NDBaFw0xOTA1MjUxNjM5NDBaMIHDMQswCQYDVQQGEwJVUzEUMBIGA1UE -ChMLRW50cnVzdC5uZXQxOzA5BgNVBAsTMnd3dy5lbnRydXN0Lm5ldC9DUFMgaW5j -b3JwLiBieSByZWYuIChsaW1pdHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMTk5OSBF -bnRydXN0Lm5ldCBMaW1pdGVkMTowOAYDVQQDEzFFbnRydXN0Lm5ldCBTZWN1cmUg -U2VydmVyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGdMA0GCSqGSIb3DQEBAQUA -A4GLADCBhwKBgQDNKIM0VBuJ8w+vN5Ex/68xYMmo6LIQaO2f55M28Qpku0f1BBc/ -I0dNxScZgSYMVHINiC3ZH5oSn7yzcdOAGT9HZnuMNSjSuQrfJNqc1lB5gXpa0zf3 -wkrYKZImZNHkmGw6AIr1NJtl+O3jEP/9uElY3KDegjlrgbEWGWG5VLbmQwIBA6OC -AdcwggHTMBEGCWCGSAGG+EIBAQQEAwIABzCCARkGA1UdHwSCARAwggEMMIHeoIHb -oIHYpIHVMIHSMQswCQYDVQQGEwJVUzEUMBIGA1UEChMLRW50cnVzdC5uZXQxOzA5 -BgNVBAsTMnd3dy5lbnRydXN0Lm5ldC9DUFMgaW5jb3JwLiBieSByZWYuIChsaW1p -dHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMTk5OSBFbnRydXN0Lm5ldCBMaW1pdGVk -MTowOAYDVQQDEzFFbnRydXN0Lm5ldCBTZWN1cmUgU2VydmVyIENlcnRpZmljYXRp -b24gQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMCmgJ6AlhiNodHRwOi8vd3d3LmVu -dHJ1c3QubmV0L0NSTC9uZXQxLmNybDArBgNVHRAEJDAigA8xOTk5MDUyNTE2MDk0 -MFqBDzIwMTkwNTI1MTYwOTQwWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAU8Bdi -E1U9s/8KAGv7UISX8+1i0BowHQYDVR0OBBYEFPAXYhNVPbP/CgBr+1CEl/PtYtAa -MAwGA1UdEwQFMAMBAf8wGQYJKoZIhvZ9B0EABAwwChsEVjQuMAMCBJAwDQYJKoZI -hvcNAQEFBQADgYEAkNwwAvpkdMKnCqV8IY00F6j7Rw7/JXyNEwr75Ji174z4xRAN -95K+8cPV1ZVqBLssziY2ZcgxxufuP+NXdYR6Ee9GTxj005i7qIcyunL2POI9n9cd -2cNgQ4xYDiKWL2KjLB+6rQXvqzJ4h6BUcxm1XAX5Uj5tLUUL9wqT6u0G+bI= ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIDIDCCAomgAwIBAgIENd70zzANBgkqhkiG9w0BAQUFADBOMQswCQYDVQQGEwJV -UzEQMA4GA1UEChMHRXF1aWZheDEtMCsGA1UECxMkRXF1aWZheCBTZWN1cmUgQ2Vy -dGlmaWNhdGUgQXV0aG9yaXR5MB4XDTk4MDgyMjE2NDE1MVoXDTE4MDgyMjE2NDE1 -MVowTjELMAkGA1UEBhMCVVMxEDAOBgNVBAoTB0VxdWlmYXgxLTArBgNVBAsTJEVx -dWlmYXggU2VjdXJlIENlcnRpZmljYXRlIEF1dGhvcml0eTCBnzANBgkqhkiG9w0B -AQEFAAOBjQAwgYkCgYEAwV2xWGcIYu6gmi0fCG2RFGiYCh7+2gRvE4RiIcPRfM6f -BeC4AfBONOziipUEZKzxa1NfBbPLZ4C/QgKO/t0BCezhABRP/PvwDN1Dulsr4R+A -cJkVV5MW8Q+XarfCaCMczE1ZMKxRHjuvK9buY0V7xdlfUNLjUA86iOe/FP3gx7kC -AwEAAaOCAQkwggEFMHAGA1UdHwRpMGcwZaBjoGGkXzBdMQswCQYDVQQGEwJVUzEQ -MA4GA1UEChMHRXF1aWZheDEtMCsGA1UECxMkRXF1aWZheCBTZWN1cmUgQ2VydGlm -aWNhdGUgQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMBoGA1UdEAQTMBGBDzIwMTgw -ODIyMTY0MTUxWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUSOZo+SvSspXXR9gj -IBBPM5iQn9QwHQYDVR0OBBYEFEjmaPkr0rKV10fYIyAQTzOYkJ/UMAwGA1UdEwQF -MAMBAf8wGgYJKoZIhvZ9B0EABA0wCxsFVjMuMGMDAgbAMA0GCSqGSIb3DQEBBQUA -A4GBAFjOKer89961zgK5F7WF0bnj4JXMJTENAKaSbn+2kmOeUJXRmm/kEd5jhW6Y -7qj/WsjTVbJmcVfewCHrPSqnI0kBBIZCe/zuf6IWUrVnZ9NA2zsmWLIodz2uFHdh -1voqZiegDfqnc1zqcPGUIWVEX/r87yloqaKHee9570+sB3c4 ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIICgjCCAeugAwIBAgIBBDANBgkqhkiG9w0BAQQFADBTMQswCQYDVQQGEwJVUzEc -MBoGA1UEChMTRXF1aWZheCBTZWN1cmUgSW5jLjEmMCQGA1UEAxMdRXF1aWZheCBT -ZWN1cmUgZUJ1c2luZXNzIENBLTEwHhcNOTkwNjIxMDQwMDAwWhcNMjAwNjIxMDQw -MDAwWjBTMQswCQYDVQQGEwJVUzEcMBoGA1UEChMTRXF1aWZheCBTZWN1cmUgSW5j -LjEmMCQGA1UEAxMdRXF1aWZheCBTZWN1cmUgZUJ1c2luZXNzIENBLTEwgZ8wDQYJ -KoZIhvcNAQEBBQADgY0AMIGJAoGBAM4vGbwXt3fek6lfWg0XTzQaDJj0ItlZ1MRo -RvC0NcWFAyDGr0WlIVFFQesWWDYyb+JQYmT5/VGcqiTZ9J2DKocKIdMSODRsjQBu -WqDZQu4aIZX5UkxVWsUPOE9G+m34LjXWHXzr4vCwdYDIqROsvojvOm6rXyo4YgKw -Env+j6YDAgMBAAGjZjBkMBEGCWCGSAGG+EIBAQQEAwIABzAPBgNVHRMBAf8EBTAD -AQH/MB8GA1UdIwQYMBaAFEp4MlIR21kWNl7fwRQ2QGpHfEyhMB0GA1UdDgQWBBRK -eDJSEdtZFjZe38EUNkBqR3xMoTANBgkqhkiG9w0BAQQFAAOBgQB1W6ibAxHm6VZM -zfmpTMANmvPMZWnmJXbMWbfWVMMdzZmsGd20hdXgPfxiIKeES1hl8eL5lSE/9dR+ -WB5Hh1Q+WKG1tfgq73HnvMP2sUlG4tega+VWeponmHxGYhTnyfxuAxJ5gDgdSIKN -/Bf+KpYrtWKmpj29f5JZzVoqgrI3eQ== ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIDIDCCAomgAwIBAgIEN3DPtTANBgkqhkiG9w0BAQUFADBOMQswCQYDVQQGEwJV -UzEXMBUGA1UEChMORXF1aWZheCBTZWN1cmUxJjAkBgNVBAsTHUVxdWlmYXggU2Vj -dXJlIGVCdXNpbmVzcyBDQS0yMB4XDTk5MDYyMzEyMTQ0NVoXDTE5MDYyMzEyMTQ0 -NVowTjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDkVxdWlmYXggU2VjdXJlMSYwJAYD -VQQLEx1FcXVpZmF4IFNlY3VyZSBlQnVzaW5lc3MgQ0EtMjCBnzANBgkqhkiG9w0B -AQEFAAOBjQAwgYkCgYEA5Dk5kx5SBhsoNviyoynF7Y6yEb3+6+e0dMKP/wXn2Z0G -vxLIPw7y1tEkshHe0XMJitSxLJgJDR5QRrKDpkWNYmi7hRsgcDKqQM2mll/EcTc/ -BPO3QSQ5BxoeLmFYoBIL5aXfxavqN3HMHMg3OrmXUqesxWoklE6ce8/AatbfIb0C -AwEAAaOCAQkwggEFMHAGA1UdHwRpMGcwZaBjoGGkXzBdMQswCQYDVQQGEwJVUzEX -MBUGA1UEChMORXF1aWZheCBTZWN1cmUxJjAkBgNVBAsTHUVxdWlmYXggU2VjdXJl -IGVCdXNpbmVzcyBDQS0yMQ0wCwYDVQQDEwRDUkwxMBoGA1UdEAQTMBGBDzIwMTkw -NjIzMTIxNDQ1WjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUUJ4L6q9euSBIplBq -y/3YIHqngnYwHQYDVR0OBBYEFFCeC+qvXrkgSKZQasv92CB6p4J2MAwGA1UdEwQF -MAMBAf8wGgYJKoZIhvZ9B0EABA0wCxsFVjMuMGMDAgbAMA0GCSqGSIb3DQEBBQUA -A4GBAAyGgq3oThr1jokn4jVYPSm0B482UJW/bsGe68SQsoWou7dC4A8HOd/7npCy -0cE+U58DRLB+S/Rv5Hwf5+Kx5Lia78O9zt4LMjTZ3ijtM2vE1Nc9ElirfQkty3D1 -E4qUoSek1nDFbZS1yX2doNLGCEnZZpum0/QL3MUmV+GRMOrN ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIICkDCCAfmgAwIBAgIBATANBgkqhkiG9w0BAQQFADBaMQswCQYDVQQGEwJVUzEc -MBoGA1UEChMTRXF1aWZheCBTZWN1cmUgSW5jLjEtMCsGA1UEAxMkRXF1aWZheCBT -ZWN1cmUgR2xvYmFsIGVCdXNpbmVzcyBDQS0xMB4XDTk5MDYyMTA0MDAwMFoXDTIw -MDYyMTA0MDAwMFowWjELMAkGA1UEBhMCVVMxHDAaBgNVBAoTE0VxdWlmYXggU2Vj -dXJlIEluYy4xLTArBgNVBAMTJEVxdWlmYXggU2VjdXJlIEdsb2JhbCBlQnVzaW5l -c3MgQ0EtMTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAuucXkAJlsTRVPEnC -UdXfp9E3j9HngXNBUmCbnaEXJnitx7HoJpQytd4zjTov2/KaelpzmKNc6fuKcxtc -58O/gGzNqfTWK8D3+ZmqY6KxRwIP1ORROhI8bIpaVIRw28HFkM9yRcuoWcDNM50/ -o5brhTMhHD4ePmBudpxnhcXIw2ECAwEAAaNmMGQwEQYJYIZIAYb4QgEBBAQDAgAH -MA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUvqigdHJQa0S3ySPY+6j/s1dr -aGwwHQYDVR0OBBYEFL6ooHRyUGtEt8kj2Puo/7NXa2hsMA0GCSqGSIb3DQEBBAUA -A4GBADDiAVGqx+pf2rnQZQ8w1j7aDRRJbpGTJxQx78T3LUX47Me/okENI7SS+RkA -Z70Br83gcfxaz2TE4JaY0KNA4gGK7ycH8WUBikQtBmV1UsCGECAhX2xrD2yuCRyv -8qIYNMR1pHMc8Y3c7635s3a0kr/clRAevsvIO1qEYBlWlKlV ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIFFjCCBH+gAwIBAgIBADANBgkqhkiG9w0BAQQFADCBsDELMAkGA1UEBhMCSUwx -DzANBgNVBAgTBklzcmFlbDEOMAwGA1UEBxMFRWlsYXQxFjAUBgNVBAoTDVN0YXJ0 -Q29tIEx0ZC4xGjAYBgNVBAsTEUNBIEF1dGhvcml0eSBEZXAuMSkwJwYDVQQDEyBG -cmVlIFNTTCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEhMB8GCSqGSIb3DQEJARYS -YWRtaW5Ac3RhcnRjb20ub3JnMB4XDTA1MDMxNzE3Mzc0OFoXDTM1MDMxMDE3Mzc0 -OFowgbAxCzAJBgNVBAYTAklMMQ8wDQYDVQQIEwZJc3JhZWwxDjAMBgNVBAcTBUVp -bGF0MRYwFAYDVQQKEw1TdGFydENvbSBMdGQuMRowGAYDVQQLExFDQSBBdXRob3Jp -dHkgRGVwLjEpMCcGA1UEAxMgRnJlZSBTU0wgQ2VydGlmaWNhdGlvbiBBdXRob3Jp -dHkxITAfBgkqhkiG9w0BCQEWEmFkbWluQHN0YXJ0Y29tLm9yZzCBnzANBgkqhkiG -9w0BAQEFAAOBjQAwgYkCgYEA7YRgACOeyEpRKSfeOqE5tWmrCbIvNP1h3D3TsM+x -18LEwrHkllbEvqoUDufMOlDIOmKdw6OsWXuO7lUaHEe+o5c5s7XvIywI6Nivcy+5 -yYPo7QAPyHWlLzRMGOh2iCNJitu27Wjaw7ViKUylS7eYtAkUEKD4/mJ2IhULpNYI -LzUCAwEAAaOCAjwwggI4MA8GA1UdEwEB/wQFMAMBAf8wCwYDVR0PBAQDAgHmMB0G -A1UdDgQWBBQcicOWzL3+MtUNjIExtpidjShkjTCB3QYDVR0jBIHVMIHSgBQcicOW -zL3+MtUNjIExtpidjShkjaGBtqSBszCBsDELMAkGA1UEBhMCSUwxDzANBgNVBAgT -BklzcmFlbDEOMAwGA1UEBxMFRWlsYXQxFjAUBgNVBAoTDVN0YXJ0Q29tIEx0ZC4x -GjAYBgNVBAsTEUNBIEF1dGhvcml0eSBEZXAuMSkwJwYDVQQDEyBGcmVlIFNTTCBD -ZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEhMB8GCSqGSIb3DQEJARYSYWRtaW5Ac3Rh -cnRjb20ub3JnggEAMB0GA1UdEQQWMBSBEmFkbWluQHN0YXJ0Y29tLm9yZzAdBgNV -HRIEFjAUgRJhZG1pbkBzdGFydGNvbS5vcmcwEQYJYIZIAYb4QgEBBAQDAgAHMC8G -CWCGSAGG+EIBDQQiFiBGcmVlIFNTTCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAy -BglghkgBhvhCAQQEJRYjaHR0cDovL2NlcnQuc3RhcnRjb20ub3JnL2NhLWNybC5j -cmwwKAYJYIZIAYb4QgECBBsWGWh0dHA6Ly9jZXJ0LnN0YXJ0Y29tLm9yZy8wOQYJ -YIZIAYb4QgEIBCwWKmh0dHA6Ly9jZXJ0LnN0YXJ0Y29tLm9yZy9pbmRleC5waHA/ -YXBwPTExMTANBgkqhkiG9w0BAQQFAAOBgQBscSXhnjSRIe/bbL0BCFaPiNhBOlP1 -ct8nV0t2hPdopP7rPwl+KLhX6h/BquL/lp9JmeaylXOWxkjHXo0Hclb4g4+fd68p -00UOpO6wNnQt8M2YI3s3S9r+UZjEHjQ8iP2ZO1CnwYszx8JSFhKVU2Ui77qLzmLb -cCOxgN8aIDjnfg== ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIDVDCCAjygAwIBAgIDAjRWMA0GCSqGSIb3DQEBBQUAMEIxCzAJBgNVBAYTAlVT -MRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMRswGQYDVQQDExJHZW9UcnVzdCBHbG9i -YWwgQ0EwHhcNMDIwNTIxMDQwMDAwWhcNMjIwNTIxMDQwMDAwWjBCMQswCQYDVQQG -EwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEbMBkGA1UEAxMSR2VvVHJ1c3Qg -R2xvYmFsIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2swYYzD9 -9BcjGlZ+W988bDjkcbd4kdS8odhM+KhDtgPpTSEHCIjaWC9mOSm9BXiLnTjoBbdq -fnGk5sRgprDvgOSJKA+eJdbtg/OtppHHmMlCGDUUna2YRpIuT8rxh0PBFpVXLVDv -iS2Aelet8u5fa9IAjbkU+BQVNdnARqN7csiRv8lVK83Qlz6cJmTM386DGXHKTubU -1XupGc1V3sjs0l44U+VcT4wt/lAjNvxm5suOpDkZALeVAjmRCw7+OC7RHQWa9k0+ -bw8HHa8sHo9gOeL6NlMTOdReJivbPagUvTLrGAMoUgRx5aszPeE4uwc2hGKceeoW -MPRfwCvocWvk+QIDAQABo1MwUTAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBTA -ephojYn7qwVkDBF9qn1luMrMTjAfBgNVHSMEGDAWgBTAephojYn7qwVkDBF9qn1l -uMrMTjANBgkqhkiG9w0BAQUFAAOCAQEANeMpauUvXVSOKVCUn5kaFOSPeCpilKIn -Z57QzxpeR+nBsqTP3UEaBU6bS+5Kb1VSsyShNwrrZHYqLizz/Tt1kL/6cdjHPTfS -tQWVYrmm3ok9Nns4d0iXrKYgjy6myQzCsplFAMfOEVEiIuCl6rYVSAlk6l5PdPcF -PseKUgzbFbS9bZvlxrFUaKnjaZC2mqUPuLk/IH2uSrW4nOQdtqvmlKXBx4Ot2/Un -hw4EbNX/3aBd7YdStysVAq45pmp06drE57xNNB6pXE0zX5IJL4hmXXeXxx12E6nV -5fEWCRE11azbJHFwLJhWC9kXtNHjUStedejV0NxPNO3CBWaAocvmMw== ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIDfDCCAmSgAwIBAgIQGKy1av1pthU6Y2yv2vrEoTANBgkqhkiG9w0BAQUFADBY -MQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjExMC8GA1UEAxMo -R2VvVHJ1c3QgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNjEx -MjcwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMFgxCzAJBgNVBAYTAlVTMRYwFAYDVQQK -Ew1HZW9UcnVzdCBJbmMuMTEwLwYDVQQDEyhHZW9UcnVzdCBQcmltYXJ5IENlcnRp -ZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC -AQEAvrgVe//UfH1nrYNke8hCUy3f9oQIIGHWAVlqnEQRr+92/ZV+zmEwu3qDXwK9 -AWbK7hWNb6EwnL2hhZ6UOvNWiAAxz9juapYC2e0DjPt1befquFUWBRaa9OBesYjA -ZIVcFU2Ix7e64HXprQU9nceJSOC7KMgD4TCTZF5SwFlwIjVXiIrxlQqD17wxcwE0 -7e9GceBrAqg1cmuXm2bgyxx5X9gaBGgeRwLmnWDiNpcB3841kt++Z8dtd1k7j53W -kBWUvEI0EME5+bEnPn7WinXFsq+W06Lem+SYvn3h6YGttm/81w7a4DSwDRp35+MI -mO9Y+pyEtzavwt+s0vQQBnBxNQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4G -A1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQULNVQQZcVi/CPNmFbSvtr2ZnJM5IwDQYJ -KoZIhvcNAQEFBQADggEBAFpwfyzdtzRP9YZRqSa+S7iq8XEN3GHHoOo0Hnp3DwQ1 -6CePbJC/kRYkRj5KTs4rFtULUh38H2eiAkUxT87z+gOneZ1TatnaYzr4gNfTmeGl -4b7UVXGYNTq+k+qurUKykG/g/CFNNWMziUnWm07Kx+dOCQD32sfvmWKZd7aVIl6K -oKv0uHiYyjgZmclynnjNS6yvGaBzEi38wkG6gZHaFloxt/m0cYASSJlyc1pZU8Fj -UjPtp8nSOQJw+uCxQmYpqptR7TBUIhRf2asdweSU8Pj1K/fqynhG1riR/aYNKxoU -AT6A8EKglQdebc3MS6RFjasS6LPeWuWgfOgPIh1a6Vk= ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIDIzCCAgugAwIBAgIQMDAwMTAwMDQ0ODczMzAwMDANBgkqhkiG9w0BAQUFADAf -MQswCQYDVQQGEwJGUjEQMA4GA1UEChMHR0lQLUNQUzAeFw0wMTA2MjYwMDAwMDBa -Fw0xMDEyMzEwMDAwMDBaMB8xCzAJBgNVBAYTAkZSMRAwDgYDVQQKEwdHSVAtQ1BT -MIIBITANBgkqhkiG9w0BAQEFAAOCAQ4AMIIBCQKCAQBvz+ogB2ovWM18JmOtizrL -Y2KgEZ8TpU6H7zu+r6cT1Q8xgLm8BPOfeW3eI/e0PLmZN+Sp+LZ4wyFMecJmp/FT -M9/9Gp23vpMePge/tJctwu0mihabVcUHFoIMtpKgSJ2+Xlywk16AjsHN3DONcWBa -xV4wa4Tt/BtaEkf9148pDn074lZZ2mKmANu9zNDm/buSgRkqqS1eVCbLxkRaMBSp -dwGAjsBYEqPjmI4So915ab3Eqqz5zawQwC4T+O41wRgpD9bDTo+9xAFiZz8PqYs9 -pc2tHOKhIlRxJbQqcWQW+St9I7Y+rRx2lTMrt6DD7CMoxrt1TuGzxdN777w1GSfx -AgMBAAGjXDBaMA4GA1UdDwEB/wQEAwICBDASBgNVHRMBAf8ECDAGAQH/AgEBMB0G -A1UdDgQWBBTnqP2NPQkWlq78dWMnkCN5XlvZtDAVBgNVHSAEDjAMMAoGCCqBegFH -AwcDMA0GCSqGSIb3DQEBBQUAA4IBAQAc9sFFWGgFJ14VGI91Cf1h9KYuuh1m2y2u -xF/mVb58IYBDE0fwG371XwpOHd6d9cM3ANSpK51V5EOmwgFDGkNGtDYcPXR+Ndli -rhD8aSq0Yv2p3h78o5O6y4GMRycFPsTfWpE9h7fGmsfZXWnYJGRAGM2iKYn7x3f7 -+kOrtbVj+XAvws7PqO2lLh/HjWCek4efnU9EaG6SDqu7srTuhyILFRBJ+sfOr68t -5bwyjufk391dbPBYcQ1AK9CQrnaorhPo+S7iNekX1e5iJShETVrZJkH/AAido34c -3ohHWmmZPyNW+5CpxZlRL6J6mlcAxIDqkXXsxj/r5zxGrW/jGwxo ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIExTCCA62gAwIBAgIBADANBgkqhkiG9w0BAQUFADB9MQswCQYDVQQGEwJFVTEn -MCUGA1UEChMeQUMgQ2FtZXJmaXJtYSBTQSBDSUYgQTgyNzQzMjg3MSMwIQYDVQQL -ExpodHRwOi8vd3d3LmNoYW1iZXJzaWduLm9yZzEgMB4GA1UEAxMXR2xvYmFsIENo -YW1iZXJzaWduIFJvb3QwHhcNMDMwOTMwMTYxNDE4WhcNMzcwOTMwMTYxNDE4WjB9 -MQswCQYDVQQGEwJFVTEnMCUGA1UEChMeQUMgQ2FtZXJmaXJtYSBTQSBDSUYgQTgy -NzQzMjg3MSMwIQYDVQQLExpodHRwOi8vd3d3LmNoYW1iZXJzaWduLm9yZzEgMB4G -A1UEAxMXR2xvYmFsIENoYW1iZXJzaWduIFJvb3QwggEgMA0GCSqGSIb3DQEBAQUA -A4IBDQAwggEIAoIBAQCicKLQn0KuWxfH2H3PFIP8T8mhtxOviteePgQKkotgVvq0 -Mi+ITaFgCPS3CU6gSS9J1tPfnZdan5QEcOw/Wdm3zGaLmFIoCQLfxS+EjXqXd7/s -QJ0lcqu1PzKY+7e3/HKE5TWH+VX6ox8Oby4o3Wmg2UIQxvi1RMLQQ3/bvOSiPGpV -eAp3qdjqGTK3L/5cPxvusZjsyq16aUXjlg9V9ubtdepl6DJWk0aJqCWKZQbua795 -B9Dxt6/tLE2Su8CoX6dnfQTyFQhwrJLWfQTSM/tMtgsL+xrJxI0DqX5c8lCrEqWh -z0hQpe/SyBoT+rB/sYIcd2oPX9wLlY/vQ37mRQklAgEDo4IBUDCCAUwwEgYDVR0T -AQH/BAgwBgEB/wIBDDA/BgNVHR8EODA2MDSgMqAwhi5odHRwOi8vY3JsLmNoYW1i -ZXJzaWduLm9yZy9jaGFtYmVyc2lnbnJvb3QuY3JsMB0GA1UdDgQWBBRDnDafsJ4w -TcbOX60Qq+UDpfqpFDAOBgNVHQ8BAf8EBAMCAQYwEQYJYIZIAYb4QgEBBAQDAgAH -MCoGA1UdEQQjMCGBH2NoYW1iZXJzaWducm9vdEBjaGFtYmVyc2lnbi5vcmcwKgYD -VR0SBCMwIYEfY2hhbWJlcnNpZ25yb290QGNoYW1iZXJzaWduLm9yZzBbBgNVHSAE -VDBSMFAGCysGAQQBgYcuCgEBMEEwPwYIKwYBBQUHAgEWM2h0dHA6Ly9jcHMuY2hh -bWJlcnNpZ24ub3JnL2Nwcy9jaGFtYmVyc2lnbnJvb3QuaHRtbDANBgkqhkiG9w0B -AQUFAAOCAQEAPDtwkfkEVCeR4e3t/mh/YV3lQWVPMvEYBZRqHN4fcNs+ezICNLUM -bKGKfKX0j//U2K0X1S0E0T9YgOKBWYi+wONGkyT+kL0mojAt6JcmVzWJdJYY9hXi -ryQZVgICsroPFOrGimbBhkVVi76SvpykBMdJPJ7oKXqJ1/6v/2j1pReQvayZzKWG -VwlnRtvWFsJG8eSpUPWP0ZIV018+xgBJOm5YstHRJw0lyDL4IBHNfTIzSJRUTN3c -ecQwn+uOuFW114hcxWokPbLTBQNRxgfvzBRydD1ucs4YKIxKoHflCStFREest2d/ -AYoFWpO+ocH/+OcOZ6RHSXZddZAa9SaP8A== ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIDujCCAqKgAwIBAgILBAAAAAABD4Ym5g0wDQYJKoZIhvcNAQEFBQAwTDEgMB4G -A1UECxMXR2xvYmFsU2lnbiBSb290IENBIC0gUjIxEzARBgNVBAoTCkdsb2JhbFNp -Z24xEzARBgNVBAMTCkdsb2JhbFNpZ24wHhcNMDYxMjE1MDgwMDAwWhcNMjExMjE1 -MDgwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxTaWduIFJvb3QgQ0EgLSBSMjETMBEG -A1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2lnbjCCASIwDQYJKoZI -hvcNAQEBBQADggEPADCCAQoCggEBAKbPJA6+Lm8omUVCxKs+IVSbC9N/hHD6ErPL -v4dfxn+G07IwXNb9rfF73OX4YJYJkhD10FPe+3t+c4isUoh7SqbKSaZeqKeMWhG8 -eoLrvozps6yWJQeXSpkqBy+0Hne/ig+1AnwblrjFuTosvNYSuetZfeLQBoZfXklq -tTleiDTsvHgMCJiEbKjNS7SgfQx5TfC4LcshytVsW33hoCmEofnTlEnLJGKRILzd -C9XZzPnqJworc5HGnRusyMvo4KD0L5CLTfuwNhv2GXqF4G3yYROIXJ/gkwpRl4pa -zq+r1feqCapgvdzZX99yqWATXgAByUr6P6TqBwMhAo6CygPCm48CAwEAAaOBnDCB -mTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUm+IH -V2ccHsBqBt5ZtJot39wZhi4wNgYDVR0fBC8wLTAroCmgJ4YlaHR0cDovL2NybC5n -bG9iYWxzaWduLm5ldC9yb290LXIyLmNybDAfBgNVHSMEGDAWgBSb4gdXZxwewGoG -3lm0mi3f3BmGLjANBgkqhkiG9w0BAQUFAAOCAQEAmYFThxxol4aR7OBKuEQLq4Gs -J0/WwbgcQ3izDJr86iw8bmEbTUsp9Z8FHSbBuOmDAGJFtqkIk7mpM0sYmsL4h4hO -291xNBrBVNpGP+DTKqttVCL1OmLNIG+6KYnX3ZHu01yiPqFbQfXf5WRDLenVOavS -ot+3i9DAgBkcRcAtjOj4LaR0VknFBbVPFd5uRHg5h6h+u/N5GJG79G+dwfCMNYxd -AfvDbbnvRG15RjF+Cv6pgsH/76tuIMRQyV+dTZsXjAzlAcmgQWpzU/qlULRuJQ/7 -TBj0/VLZjmmx6BEP3ojY+x1J96relc8geMJgEtslQIxq/H5COEBkEveegeGTLg== ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIDdTCCAl2gAwIBAgILAgAAAAAA1ni3lAUwDQYJKoZIhvcNAQEEBQAwVzELMAkG -A1UEBhMCQkUxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jv -b3QgQ0ExGzAZBgNVBAMTEkdsb2JhbFNpZ24gUm9vdCBDQTAeFw05ODA5MDExMjAw -MDBaFw0xNDAxMjgxMjAwMDBaMFcxCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9i -YWxTaWduIG52LXNhMRAwDgYDVQQLEwdSb290IENBMRswGQYDVQQDExJHbG9iYWxT -aWduIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDaDuaZ -jc6j40+Kfvvxi4Mla+pIH/EqsLmVEQS98GPR4mdmzxzdzxtIK+6NiY6arymAZavp -xy0Sy6scTHAHoT0KMM0VjU/43dSMUBUc71DuxC73/OlS8pF94G3VNTCOXkNz8kHp -1Wrjsok6Vjk4bwY8iGlbKk3Fp1S4bInMm/k8yuX9ifUSPJJ4ltbcdG6TRGHRjcdG -snUOhugZitVtbNV4FpWi6cgKOOvyJBNPc1STE4U6G7weNLWLBYy5d4ux2x8gkasJ -U26Qzns3dLlwR5EiUWMWea6xrkEmCMgZK9FGqkjWZCrXgzT/LCrBbBlDSgeF59N8 -9iFo7+ryUp9/k5DPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIABjAdBgNVHQ4EFgQU -YHtmGkUNl8qJUC99BM00qP/8/UswDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0B -AQQFAAOCAQEArqqf/LfSyx9fOSkoGJ40yWxPbxrwZKJwSk8ThptgKJ7ogUmYfQq7 -5bCdPTbbjwVR/wkxKh/diXeeDy5slQTthsu0AD+EAk2AaioteAuubyuig0SDH81Q -gkwkr733pbTIWg/050deSY43lv6aiAU62cDbKYfmGZZHpzqmjIs8d/5GY6dT2iHR -rH5Jokvmw2dZL7OKDrssvamqQnw1wdh/1acxOk5jQzmvCLBhNIzTmKlDNPYPhyk7 -ncJWWJh3w/cbrPad+D6qp1RF8PX51TFl/mtYnHGzHtdS6jIX/EBgHcl5JLL2bP2o -Zg6C3ZjL2sJETy6ge/L3ayx2EYRGinij4w== ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIEADCCAuigAwIBAgIBADANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEh -MB8GA1UEChMYVGhlIEdvIERhZGR5IEdyb3VwLCBJbmMuMTEwLwYDVQQLEyhHbyBE -YWRkeSBDbGFzcyAyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTA0MDYyOTE3 -MDYyMFoXDTM0MDYyOTE3MDYyMFowYzELMAkGA1UEBhMCVVMxITAfBgNVBAoTGFRo -ZSBHbyBEYWRkeSBHcm91cCwgSW5jLjExMC8GA1UECxMoR28gRGFkZHkgQ2xhc3Mg -MiBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASAwDQYJKoZIhvcNAQEBBQADggEN -ADCCAQgCggEBAN6d1+pXGEmhW+vXX0iG6r7d/+TvZxz0ZWizV3GgXne77ZtJ6XCA -PVYYYwhv2vLM0D9/AlQiVBDYsoHUwHU9S3/Hd8M+eKsaA7Ugay9qK7HFiH7Eux6w -wdhFJ2+qN1j3hybX2C32qRe3H3I2TqYXP2WYktsqbl2i/ojgC95/5Y0V4evLOtXi -EqITLdiOr18SPaAIBQi2XKVlOARFmR6jYGB0xUGlcmIbYsUfb18aQr4CUWWoriMY -avx4A6lNf4DD+qta/KFApMoZFv6yyO9ecw3ud72a9nmYvLEHZ6IVDd2gWMZEewo+ -YihfukEHU1jPEX44dMX4/7VpkI+EdOqXG68CAQOjgcAwgb0wHQYDVR0OBBYEFNLE -sNKR1EwRcbNhyz2h/t2oatTjMIGNBgNVHSMEgYUwgYKAFNLEsNKR1EwRcbNhyz2h -/t2oatTjoWekZTBjMQswCQYDVQQGEwJVUzEhMB8GA1UEChMYVGhlIEdvIERhZGR5 -IEdyb3VwLCBJbmMuMTEwLwYDVQQLEyhHbyBEYWRkeSBDbGFzcyAyIENlcnRpZmlj -YXRpb24gQXV0aG9yaXR5ggEAMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQAD -ggEBADJL87LKPpH8EsahB4yOd6AzBhRckB4Y9wimPQoZ+YeAEW5p5JYXMP80kWNy -OO7MHAGjHZQopDH2esRU1/blMVgDoszOYtuURXO1v0XJJLXVggKtI3lpjbi2Tc7P -TMozI+gciKqdi0FuFskg5YmezTvacPd+mSYgFFQlq25zheabIZ0KbIIOqPjCDPoQ -HmyW74cNxA9hi63ugyuV+I6ShHI56yDqg+2DzZduCLzrTia2cyvk0/ZM/iZx4mER -dEr/VxqHD3VILs9RaRegAhJhldXRQLIQTO7ErBBDpqWeCtWVYpoNz4iCxTIM5Cuf -ReYNnyicsbkqWletNw+vHX/bvZ8= ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIICWjCCAcMCAgGlMA0GCSqGSIb3DQEBBAUAMHUxCzAJBgNVBAYTAlVTMRgwFgYD -VQQKEw9HVEUgQ29ycG9yYXRpb24xJzAlBgNVBAsTHkdURSBDeWJlclRydXN0IFNv -bHV0aW9ucywgSW5jLjEjMCEGA1UEAxMaR1RFIEN5YmVyVHJ1c3QgR2xvYmFsIFJv -b3QwHhcNOTgwODEzMDAyOTAwWhcNMTgwODEzMjM1OTAwWjB1MQswCQYDVQQGEwJV -UzEYMBYGA1UEChMPR1RFIENvcnBvcmF0aW9uMScwJQYDVQQLEx5HVEUgQ3liZXJU -cnVzdCBTb2x1dGlvbnMsIEluYy4xIzAhBgNVBAMTGkdURSBDeWJlclRydXN0IEds -b2JhbCBSb290MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCVD6C28FCc6HrH -iM3dFw4usJTQGz0O9pTAipTHBsiQl8i4ZBp6fmw8U+E3KHNgf7KXUwefU/ltWJTS -r41tiGeA5u2ylc9yMcqlHHK6XALnZELn+aks1joNrI1CqiQBOeacPwGFVw1Yh0X4 -04Wqk2kmhXBIgD8SFcd5tB8FLztimQIDAQABMA0GCSqGSIb3DQEBBAUAA4GBAG3r -GwnpXtlR22ciYaQqPEh346B8pt5zohQDhT37qw4wxYMWM4ETCJ57NE7fQMh017l9 -3PR2VX2bY1QY6fDq81yx2YtCHrnAlU66+tXifPVoYb+O7AWXX1uw16OFNMQkpw0P -lZPvy5TYnh+dXIVtx6quTx8itc2VrbqnzPmrC3p/ ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIB+jCCAWMCAgGjMA0GCSqGSIb3DQEBBAUAMEUxCzAJBgNVBAYTAlVTMRgwFgYD -VQQKEw9HVEUgQ29ycG9yYXRpb24xHDAaBgNVBAMTE0dURSBDeWJlclRydXN0IFJv -b3QwHhcNOTYwMjIzMjMwMTAwWhcNMDYwMjIzMjM1OTAwWjBFMQswCQYDVQQGEwJV -UzEYMBYGA1UEChMPR1RFIENvcnBvcmF0aW9uMRwwGgYDVQQDExNHVEUgQ3liZXJU -cnVzdCBSb290MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC45k+625h8cXyv -RLfTD0bZZOWTwUKOx7pJjTUteueLveUFMVnGsS8KDPufpz+iCWaEVh43KRuH6X4M -ypqfpX/1FZSj1aJGgthoTNE3FQZor734sLPwKfWVWgkWYXcKIiXUT0Wqx73llt/5 -1KiOQswkwB6RJ0q1bQaAYznEol44AwIDAQABMA0GCSqGSIb3DQEBBAUAA4GBABKz -dcZfHeFhVYAA1IFLezEPI2PnPfMD+fQ2qLvZ46WXTeorKeDWanOB5sCJo9Px4KWl -IjeaY8JIILTbcuPI9tl8vrGvU9oUtCG41tWW4/5ODFlitppK+ULdjG+BqXH/9Apy -bW1EDp3zdHSo1TRJ6V6e6bR64eVaH4QwnNOfpSXY ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0 -IFZhbGlkYXRpb24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAz -BgNVBAsTLFZhbGlDZXJ0IENsYXNzIDEgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9y -aXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG -9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNTIyMjM0OFoXDTE5MDYy -NTIyMjM0OFowgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0d29y -azEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs -YXNzIDEgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRw -Oi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNl -cnQuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDYWYJ6ibiWuqYvaG9Y -LqdUHAZu9OqNSLwxlBfw8068srg1knaw0KWlAdcAAxIiGQj4/xEjm84H9b9pGib+ -TunRf50sQB1ZaG6m+FiwnRqP0z/x3BkGgagO4DrdyFNFCQbmD3DD+kCmDuJWBQ8Y -TfwggtFzVXSNdnKgHZ0dwN0/cQIDAQABMA0GCSqGSIb3DQEBBQUAA4GBAFBoPUn0 -LBwGlN+VYH+Wexf+T3GtZMjdd9LvWVXoP+iOBSoh8gfStadS/pyxtuJbdxdA6nLW -I8sogTLDAHkY7FkXicnGah5xyf23dKUlRWnFSKsZ4UWKJWsZ7uW7EvV/96aNUcPw -nXS3qT6gpf+2SQMT2iLM7XGCK5nPOrf1LXLI ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0 -IFZhbGlkYXRpb24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAz -BgNVBAsTLFZhbGlDZXJ0IENsYXNzIDIgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9y -aXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG -9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNjAwMTk1NFoXDTE5MDYy -NjAwMTk1NFowgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0d29y -azEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs -YXNzIDIgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRw -Oi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNl -cnQuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDOOnHK5avIWZJV16vY -dA757tn2VUdZZUcOBVXc65g2PFxTXdMwzzjsvUGJ7SVCCSRrCl6zfN1SLUzm1NZ9 -WlmpZdRJEy0kTRxQb7XBhVQ7/nHk01xC+YDgkRoKWzk2Z/M/VXwbP7RfZHM047QS -v4dk+NoS/zcnwbNDu+97bi5p9wIDAQABMA0GCSqGSIb3DQEBBQUAA4GBADt/UG9v -UJSZSWI4OB9L+KXIPqeCgfYrx+jFzug6EILLGACOTb2oWH+heQC1u+mNr0HZDzTu -IYEZoDJJKPTEjlbVUjP9UNV+mWwD5MlM/Mtsq2azSiGM5bUMMj4QssxsodyamEwC -W/POuZ6lcg5Ktz885hZo+L7tdEy8W9ViH0Pd ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0 -IFZhbGlkYXRpb24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAz -BgNVBAsTLFZhbGlDZXJ0IENsYXNzIDMgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9y -aXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG -9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNjAwMjIzM1oXDTE5MDYy -NjAwMjIzM1owgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0d29y -azEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs -YXNzIDMgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRw -Oi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNl -cnQuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDjmFGWHOjVsQaBalfD -cnWTq8+epvzzFlLWLU2fNUSoLgRNB0mKOCn1dzfnt6td3zZxFJmP3MKS8edgkpfs -2Ejcv8ECIMYkpChMMFp2bbFc893enhBxoYjHW5tBbcqwuI4V7q0zK89HBFx1cQqY -JJgpp0lZpd34t0NiYfPT4tBVPwIDAQABMA0GCSqGSIb3DQEBBQUAA4GBAFa7AliE -Zwgs3x/be0kz9dNnnfS0ChCzycUs4pJqcXgn8nCDQtM+z6lU9PHYkhaM0QTLS6vJ -n0WuPIqpsHEzXcjFV9+vqDWzf4mH6eglkrh/hXqu1rweN1gqZ8mRzyqBPu3GOd/A -PhmcGcwTTYJBtYze4D1gCCAPRX5ron+jjBXu ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIH/zCCB2igAwIBAgIBADANBgkqhkiG9w0BAQUFADCCARwxCzAJBgNVBAYTAkVT -MRIwEAYDVQQIEwlCYXJjZWxvbmExEjAQBgNVBAcTCUJhcmNlbG9uYTEuMCwGA1UE -ChMlSVBTIEludGVybmV0IHB1Ymxpc2hpbmcgU2VydmljZXMgcy5sLjErMCkGA1UE -ChQiaXBzQG1haWwuaXBzLmVzIEMuSS5GLiAgQi02MDkyOTQ1MjEzMDEGA1UECxMq -SVBTIENBIENoYWluZWQgQ0FzIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MTMwMQYD -VQQDEypJUFMgQ0EgQ2hhaW5lZCBDQXMgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkx -HjAcBgkqhkiG9w0BCQEWD2lwc0BtYWlsLmlwcy5lczAeFw0wMTEyMzExMTE0NTRa -Fw0yNTEyMjkxMTE0NTRaMIIBHDELMAkGA1UEBhMCRVMxEjAQBgNVBAgTCUJhcmNl -bG9uYTESMBAGA1UEBxMJQmFyY2Vsb25hMS4wLAYDVQQKEyVJUFMgSW50ZXJuZXQg -cHVibGlzaGluZyBTZXJ2aWNlcyBzLmwuMSswKQYDVQQKFCJpcHNAbWFpbC5pcHMu -ZXMgQy5JLkYuICBCLTYwOTI5NDUyMTMwMQYDVQQLEypJUFMgQ0EgQ2hhaW5lZCBD -QXMgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxMzAxBgNVBAMTKklQUyBDQSBDaGFp -bmVkIENBcyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEeMBwGCSqGSIb3DQEJARYP -aXBzQG1haWwuaXBzLmVzMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCpOZZJ -iHAzKHzoV9xIki3eLXp56UjxFehnY+c+Dh1nUiVO0t//vmGMP6B2LTFfx9FBKRBi -kYcW7raIcSDi62Or0sAG5UUgG4ruGLE7XtCnnx4xjgbFZ4tTjdgi5Wh9GVhfP7Oo -9ahi8Eqao+alFbhvB6LD3xZZqM2j9cmD8GzYAQIDAQABo4IESzCCBEcwHQYDVR0O -BBYEFAeUqHBsCqTumbhV3S5MRXf2Nq+5MIIBTgYDVR0jBIIBRTCCAUGAFAeUqHBs -CqTumbhV3S5MRXf2Nq+5oYIBJKSCASAwggEcMQswCQYDVQQGEwJFUzESMBAGA1UE -CBMJQmFyY2Vsb25hMRIwEAYDVQQHEwlCYXJjZWxvbmExLjAsBgNVBAoTJUlQUyBJ -bnRlcm5ldCBwdWJsaXNoaW5nIFNlcnZpY2VzIHMubC4xKzApBgNVBAoUImlwc0Bt -YWlsLmlwcy5lcyBDLkkuRi4gIEItNjA5Mjk0NTIxMzAxBgNVBAsTKklQUyBDQSBD -aGFpbmVkIENBcyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEzMDEGA1UEAxMqSVBT -IENBIENoYWluZWQgQ0FzIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MR4wHAYJKoZI -hvcNAQkBFg9pcHNAbWFpbC5pcHMuZXOCAQAwDAYDVR0TBAUwAwEB/zAMBgNVHQ8E -BQMDB/+AMGsGA1UdJQRkMGIGCCsGAQUFBwMBBggrBgEFBQcDAgYIKwYBBQUHAwMG -CCsGAQUFBwMEBggrBgEFBQcDCAYKKwYBBAGCNwIBFQYKKwYBBAGCNwIBFgYKKwYB -BAGCNwoDAQYKKwYBBAGCNwoDBDARBglghkgBhvhCAQEEBAMCAAcwGgYDVR0RBBMw -EYEPaXBzQG1haWwuaXBzLmVzMBoGA1UdEgQTMBGBD2lwc0BtYWlsLmlwcy5lczBD -BglghkgBhvhCAQ0ENhY0Q2hhaW5lZCBDQSBDZXJ0aWZpY2F0ZSBpc3N1ZWQgYnkg -aHR0cHM6Ly93d3cuaXBzLmVzLzAqBglghkgBhvhCAQIEHRYbaHR0cHM6Ly93d3cu -aXBzLmVzL2lwczIwMDIvMDgGCWCGSAGG+EIBBAQrFilodHRwczovL3d3dy5pcHMu -ZXMvaXBzMjAwMi9pcHMyMDAyQ0FDLmNybDA9BglghkgBhvhCAQMEMBYuaHR0cHM6 -Ly93d3cuaXBzLmVzL2lwczIwMDIvcmV2b2NhdGlvbkNBQy5odG1sPzA6BglghkgB -hvhCAQcELRYraHR0cHM6Ly93d3cuaXBzLmVzL2lwczIwMDIvcmVuZXdhbENBQy5o -dG1sPzA4BglghkgBhvhCAQgEKxYpaHR0cHM6Ly93d3cuaXBzLmVzL2lwczIwMDIv -cG9saWN5Q0FDLmh0bWwwbwYDVR0fBGgwZjAvoC2gK4YpaHR0cHM6Ly93d3cuaXBz -LmVzL2lwczIwMDIvaXBzMjAwMkNBQy5jcmwwM6AxoC+GLWh0dHBzOi8vd3d3YmFj -ay5pcHMuZXMvaXBzMjAwMi9pcHMyMDAyQ0FDLmNybDAvBggrBgEFBQcBAQQjMCEw -HwYIKwYBBQUHMAGGE2h0dHA6Ly9vY3NwLmlwcy5lcy8wDQYJKoZIhvcNAQEFBQAD -gYEATiRvY2nro9B6QNgTOgojWSrXMKpXHa6hLRxL2GZPEFg059x2ERs3pw7RlJJZ -ctupZam06zvBnGfQL4ZhevXl6ST6RAAmOikuj8kbiFSgujjCJY1wv5/7zzgBWzdL -NzqKC18p1T2KZa8B2qKfQCqzV/J3fgI/725+9ekqKNLiE5Q= ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIH8jCCB1ugAwIBAgIBADANBgkqhkiG9w0BAQUFADCCARIxCzAJBgNVBAYTAkVT -MRIwEAYDVQQIEwlCYXJjZWxvbmExEjAQBgNVBAcTCUJhcmNlbG9uYTEuMCwGA1UE -ChMlSVBTIEludGVybmV0IHB1Ymxpc2hpbmcgU2VydmljZXMgcy5sLjErMCkGA1UE -ChQiaXBzQG1haWwuaXBzLmVzIEMuSS5GLiAgQi02MDkyOTQ1MjEuMCwGA1UECxMl -SVBTIENBIENMQVNFMSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEuMCwGA1UEAxMl -SVBTIENBIENMQVNFMSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEeMBwGCSqGSIb3 -DQEJARYPaXBzQG1haWwuaXBzLmVzMB4XDTAxMTIzMTExMTEwM1oXDTI1MTIyOTEx -MTEwM1owggESMQswCQYDVQQGEwJFUzESMBAGA1UECBMJQmFyY2Vsb25hMRIwEAYD -VQQHEwlCYXJjZWxvbmExLjAsBgNVBAoTJUlQUyBJbnRlcm5ldCBwdWJsaXNoaW5n -IFNlcnZpY2VzIHMubC4xKzApBgNVBAoUImlwc0BtYWlsLmlwcy5lcyBDLkkuRi4g -IEItNjA5Mjk0NTIxLjAsBgNVBAsTJUlQUyBDQSBDTEFTRTEgQ2VydGlmaWNhdGlv -biBBdXRob3JpdHkxLjAsBgNVBAMTJUlQUyBDQSBDTEFTRTEgQ2VydGlmaWNhdGlv -biBBdXRob3JpdHkxHjAcBgkqhkiG9w0BCQEWD2lwc0BtYWlsLmlwcy5lczCBnzAN -BgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA55+R7+voFuF0vIkTodduR8ZfPxKU5u/h -M+GrgqufAwHmdG+KF5fPVy8Mdi7mbqfK2veLFBVADbNq2e2+s2q8Ai0chS3vl//P -l9rrR10eU79dVN4ndGMZfpXUMZblz0/Kq3Uvk5AsWUwfv1YokIhi4RMeBtOCVv3j -LSV1rDsiap8CAwEAAaOCBFIwggROMB0GA1UdDgQWBBRtW6MBjmE3nQR4tq+blh0C -QeXbeTCCAUQGA1UdIwSCATswggE3gBRtW6MBjmE3nQR4tq+blh0CQeXbeaGCARqk -ggEWMIIBEjELMAkGA1UEBhMCRVMxEjAQBgNVBAgTCUJhcmNlbG9uYTESMBAGA1UE -BxMJQmFyY2Vsb25hMS4wLAYDVQQKEyVJUFMgSW50ZXJuZXQgcHVibGlzaGluZyBT -ZXJ2aWNlcyBzLmwuMSswKQYDVQQKFCJpcHNAbWFpbC5pcHMuZXMgQy5JLkYuICBC -LTYwOTI5NDUyMS4wLAYDVQQLEyVJUFMgQ0EgQ0xBU0UxIENlcnRpZmljYXRpb24g -QXV0aG9yaXR5MS4wLAYDVQQDEyVJUFMgQ0EgQ0xBU0UxIENlcnRpZmljYXRpb24g -QXV0aG9yaXR5MR4wHAYJKoZIhvcNAQkBFg9pcHNAbWFpbC5pcHMuZXOCAQAwDAYD -VR0TBAUwAwEB/zAMBgNVHQ8EBQMDB/+AMGsGA1UdJQRkMGIGCCsGAQUFBwMBBggr -BgEFBQcDAgYIKwYBBQUHAwMGCCsGAQUFBwMEBggrBgEFBQcDCAYKKwYBBAGCNwIB -FQYKKwYBBAGCNwIBFgYKKwYBBAGCNwoDAQYKKwYBBAGCNwoDBDARBglghkgBhvhC -AQEEBAMCAAcwGgYDVR0RBBMwEYEPaXBzQG1haWwuaXBzLmVzMBoGA1UdEgQTMBGB -D2lwc0BtYWlsLmlwcy5lczBCBglghkgBhvhCAQ0ENRYzQ0xBU0UxIENBIENlcnRp -ZmljYXRlIGlzc3VlZCBieSBodHRwczovL3d3dy5pcHMuZXMvMCoGCWCGSAGG+EIB -AgQdFhtodHRwczovL3d3dy5pcHMuZXMvaXBzMjAwMi8wOwYJYIZIAYb4QgEEBC4W -LGh0dHBzOi8vd3d3Lmlwcy5lcy9pcHMyMDAyL2lwczIwMDJDTEFTRTEuY3JsMEAG -CWCGSAGG+EIBAwQzFjFodHRwczovL3d3dy5pcHMuZXMvaXBzMjAwMi9yZXZvY2F0 -aW9uQ0xBU0UxLmh0bWw/MD0GCWCGSAGG+EIBBwQwFi5odHRwczovL3d3dy5pcHMu -ZXMvaXBzMjAwMi9yZW5ld2FsQ0xBU0UxLmh0bWw/MDsGCWCGSAGG+EIBCAQuFixo -dHRwczovL3d3dy5pcHMuZXMvaXBzMjAwMi9wb2xpY3lDTEFTRTEuaHRtbDB1BgNV -HR8EbjBsMDKgMKAuhixodHRwczovL3d3dy5pcHMuZXMvaXBzMjAwMi9pcHMyMDAy -Q0xBU0UxLmNybDA2oDSgMoYwaHR0cHM6Ly93d3diYWNrLmlwcy5lcy9pcHMyMDAy -L2lwczIwMDJDTEFTRTEuY3JsMC8GCCsGAQUFBwEBBCMwITAfBggrBgEFBQcwAYYT -aHR0cDovL29jc3AuaXBzLmVzLzANBgkqhkiG9w0BAQUFAAOBgQBacEdMbCU0z2bO -X+iyJafrUbjPE+5KzJz2jB1YXC2d7kMy2Hhbp8gVyfUFQpd+F2IgBBj9z3IRNkDN -foHhdse5j2cUUH+fno9jj8EPE2GPhXVmCjIP6KuPp8yzz89gC+ry+bkfSFzjHUQt -K15I/jRAHfyJywwUrwtmklZIX0E5Og== ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIH8jCCB1ugAwIBAgIBADANBgkqhkiG9w0BAQUFADCCARIxCzAJBgNVBAYTAkVT -MRIwEAYDVQQIEwlCYXJjZWxvbmExEjAQBgNVBAcTCUJhcmNlbG9uYTEuMCwGA1UE -ChMlSVBTIEludGVybmV0IHB1Ymxpc2hpbmcgU2VydmljZXMgcy5sLjErMCkGA1UE -ChQiaXBzQG1haWwuaXBzLmVzIEMuSS5GLiAgQi02MDkyOTQ1MjEuMCwGA1UECxMl -SVBTIENBIENMQVNFMyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEuMCwGA1UEAxMl -SVBTIENBIENMQVNFMyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEeMBwGCSqGSIb3 -DQEJARYPaXBzQG1haWwuaXBzLmVzMB4XDTAxMTIzMTExMTkzMVoXDTI1MTIyOTEx -MTkzMVowggESMQswCQYDVQQGEwJFUzESMBAGA1UECBMJQmFyY2Vsb25hMRIwEAYD -VQQHEwlCYXJjZWxvbmExLjAsBgNVBAoTJUlQUyBJbnRlcm5ldCBwdWJsaXNoaW5n -IFNlcnZpY2VzIHMubC4xKzApBgNVBAoUImlwc0BtYWlsLmlwcy5lcyBDLkkuRi4g -IEItNjA5Mjk0NTIxLjAsBgNVBAsTJUlQUyBDQSBDTEFTRTMgQ2VydGlmaWNhdGlv -biBBdXRob3JpdHkxLjAsBgNVBAMTJUlQUyBDQSBDTEFTRTMgQ2VydGlmaWNhdGlv -biBBdXRob3JpdHkxHjAcBgkqhkiG9w0BCQEWD2lwc0BtYWlsLmlwcy5lczCBnzAN -BgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAve2QhYLxoN2P3DVo4Xw+6Gyb2vDjfzvB -JRvH+WFIXO3KItC1dJk2W7iFnsZJnb65Q6NDKxhwfQ4XnLuBSPqMVJ6EHB++I1p2 -pg0j7YOtec++o3ysS6zf1r01HSh8i85+AcGcgLO4Z79w9jtEGlSdrFhCLUjJJSEs -XdzSbkEFrkMCAwEAAaOCBFIwggROMB0GA1UdDgQWBBT7o4z3Z4tAqk02rzCA6po7 -4C9o6DCCAUQGA1UdIwSCATswggE3gBT7o4z3Z4tAqk02rzCA6po74C9o6KGCARqk -ggEWMIIBEjELMAkGA1UEBhMCRVMxEjAQBgNVBAgTCUJhcmNlbG9uYTESMBAGA1UE -BxMJQmFyY2Vsb25hMS4wLAYDVQQKEyVJUFMgSW50ZXJuZXQgcHVibGlzaGluZyBT -ZXJ2aWNlcyBzLmwuMSswKQYDVQQKFCJpcHNAbWFpbC5pcHMuZXMgQy5JLkYuICBC -LTYwOTI5NDUyMS4wLAYDVQQLEyVJUFMgQ0EgQ0xBU0UzIENlcnRpZmljYXRpb24g -QXV0aG9yaXR5MS4wLAYDVQQDEyVJUFMgQ0EgQ0xBU0UzIENlcnRpZmljYXRpb24g -QXV0aG9yaXR5MR4wHAYJKoZIhvcNAQkBFg9pcHNAbWFpbC5pcHMuZXOCAQAwDAYD -VR0TBAUwAwEB/zAMBgNVHQ8EBQMDB/+AMGsGA1UdJQRkMGIGCCsGAQUFBwMBBggr -BgEFBQcDAgYIKwYBBQUHAwMGCCsGAQUFBwMEBggrBgEFBQcDCAYKKwYBBAGCNwIB -FQYKKwYBBAGCNwIBFgYKKwYBBAGCNwoDAQYKKwYBBAGCNwoDBDARBglghkgBhvhC -AQEEBAMCAAcwGgYDVR0RBBMwEYEPaXBzQG1haWwuaXBzLmVzMBoGA1UdEgQTMBGB -D2lwc0BtYWlsLmlwcy5lczBCBglghkgBhvhCAQ0ENRYzQ0xBU0UzIENBIENlcnRp -ZmljYXRlIGlzc3VlZCBieSBodHRwczovL3d3dy5pcHMuZXMvMCoGCWCGSAGG+EIB -AgQdFhtodHRwczovL3d3dy5pcHMuZXMvaXBzMjAwMi8wOwYJYIZIAYb4QgEEBC4W -LGh0dHBzOi8vd3d3Lmlwcy5lcy9pcHMyMDAyL2lwczIwMDJDTEFTRTMuY3JsMEAG -CWCGSAGG+EIBAwQzFjFodHRwczovL3d3dy5pcHMuZXMvaXBzMjAwMi9yZXZvY2F0 -aW9uQ0xBU0UzLmh0bWw/MD0GCWCGSAGG+EIBBwQwFi5odHRwczovL3d3dy5pcHMu -ZXMvaXBzMjAwMi9yZW5ld2FsQ0xBU0UzLmh0bWw/MDsGCWCGSAGG+EIBCAQuFixo -dHRwczovL3d3dy5pcHMuZXMvaXBzMjAwMi9wb2xpY3lDTEFTRTMuaHRtbDB1BgNV -HR8EbjBsMDKgMKAuhixodHRwczovL3d3dy5pcHMuZXMvaXBzMjAwMi9pcHMyMDAy -Q0xBU0UzLmNybDA2oDSgMoYwaHR0cHM6Ly93d3diYWNrLmlwcy5lcy9pcHMyMDAy -L2lwczIwMDJDTEFTRTMuY3JsMC8GCCsGAQUFBwEBBCMwITAfBggrBgEFBQcwAYYT -aHR0cDovL29jc3AuaXBzLmVzLzANBgkqhkiG9w0BAQUFAAOBgQAiu2FuR8MoQlYw -3QtFc/BI7DgkUUeSIM49JoMU0H3a4Y+JbQxQ4q/n6yAbEuMETUyqob/HmS/NkLJq -ur3RvGBseDXgxNyePGjFc97ITNWf5X1+4CXtBf+TTKNEMg1UpPbCz+9EkjzTcYj1 -5tjLbAp/mmLLZmCOV7cCGuXGSTBNzA== ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIH/zCCB2igAwIBAgIBADANBgkqhkiG9w0BAQUFADCCARQxCzAJBgNVBAYTAkVT -MRIwEAYDVQQIEwlCYXJjZWxvbmExEjAQBgNVBAcTCUJhcmNlbG9uYTEuMCwGA1UE -ChMlSVBTIEludGVybmV0IHB1Ymxpc2hpbmcgU2VydmljZXMgcy5sLjErMCkGA1UE -ChQiaXBzQG1haWwuaXBzLmVzIEMuSS5GLiAgQi02MDkyOTQ1MjEvMC0GA1UECxMm -SVBTIENBIENMQVNFQTEgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxLzAtBgNVBAMT -JklQUyBDQSBDTEFTRUExIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MR4wHAYJKoZI -hvcNAQkBFg9pcHNAbWFpbC5pcHMuZXMwHhcNMDExMjMxMTEyMTQxWhcNMjUxMjI5 -MTEyMTQxWjCCARQxCzAJBgNVBAYTAkVTMRIwEAYDVQQIEwlCYXJjZWxvbmExEjAQ -BgNVBAcTCUJhcmNlbG9uYTEuMCwGA1UEChMlSVBTIEludGVybmV0IHB1Ymxpc2hp -bmcgU2VydmljZXMgcy5sLjErMCkGA1UEChQiaXBzQG1haWwuaXBzLmVzIEMuSS5G -LiAgQi02MDkyOTQ1MjEvMC0GA1UECxMmSVBTIENBIENMQVNFQTEgQ2VydGlmaWNh -dGlvbiBBdXRob3JpdHkxLzAtBgNVBAMTJklQUyBDQSBDTEFTRUExIENlcnRpZmlj -YXRpb24gQXV0aG9yaXR5MR4wHAYJKoZIhvcNAQkBFg9pcHNAbWFpbC5pcHMuZXMw -gZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAM8g89BgSKoCxBXZ5C+NnlURLSnM -UWZoAGXaFFWf6q7f69uN1nXaUfTEzPstvTUfE7fpZmF8lEDz+2AvjBg086hVnra0 -b0APA0VnanJyW2ZIlkKFGMCB4WJqh7JB7i45jITVXthPV2vsjlKM97Pnnhimz8Fb -r+RZcsz69vRptMqxAgMBAAGjggRbMIIEVzAdBgNVHQ4EFgQUL8zsbGe+T/iqPIiN -EvvHnUxb9F4wggFGBgNVHSMEggE9MIIBOYAUL8zsbGe+T/iqPIiNEvvHnUxb9F6h -ggEcpIIBGDCCARQxCzAJBgNVBAYTAkVTMRIwEAYDVQQIEwlCYXJjZWxvbmExEjAQ -BgNVBAcTCUJhcmNlbG9uYTEuMCwGA1UEChMlSVBTIEludGVybmV0IHB1Ymxpc2hp -bmcgU2VydmljZXMgcy5sLjErMCkGA1UEChQiaXBzQG1haWwuaXBzLmVzIEMuSS5G -LiAgQi02MDkyOTQ1MjEvMC0GA1UECxMmSVBTIENBIENMQVNFQTEgQ2VydGlmaWNh -dGlvbiBBdXRob3JpdHkxLzAtBgNVBAMTJklQUyBDQSBDTEFTRUExIENlcnRpZmlj -YXRpb24gQXV0aG9yaXR5MR4wHAYJKoZIhvcNAQkBFg9pcHNAbWFpbC5pcHMuZXOC -AQAwDAYDVR0TBAUwAwEB/zAMBgNVHQ8EBQMDB/+AMGsGA1UdJQRkMGIGCCsGAQUF -BwMBBggrBgEFBQcDAgYIKwYBBQUHAwMGCCsGAQUFBwMEBggrBgEFBQcDCAYKKwYB -BAGCNwIBFQYKKwYBBAGCNwIBFgYKKwYBBAGCNwoDAQYKKwYBBAGCNwoDBDARBglg -hkgBhvhCAQEEBAMCAAcwGgYDVR0RBBMwEYEPaXBzQG1haWwuaXBzLmVzMBoGA1Ud -EgQTMBGBD2lwc0BtYWlsLmlwcy5lczBDBglghkgBhvhCAQ0ENhY0Q0xBU0VBMSBD -QSBDZXJ0aWZpY2F0ZSBpc3N1ZWQgYnkgaHR0cHM6Ly93d3cuaXBzLmVzLzAqBglg -hkgBhvhCAQIEHRYbaHR0cHM6Ly93d3cuaXBzLmVzL2lwczIwMDIvMDwGCWCGSAGG -+EIBBAQvFi1odHRwczovL3d3dy5pcHMuZXMvaXBzMjAwMi9pcHMyMDAyQ0xBU0VB -MS5jcmwwQQYJYIZIAYb4QgEDBDQWMmh0dHBzOi8vd3d3Lmlwcy5lcy9pcHMyMDAy -L3Jldm9jYXRpb25DTEFTRUExLmh0bWw/MD4GCWCGSAGG+EIBBwQxFi9odHRwczov -L3d3dy5pcHMuZXMvaXBzMjAwMi9yZW5ld2FsQ0xBU0VBMS5odG1sPzA8BglghkgB -hvhCAQgELxYtaHR0cHM6Ly93d3cuaXBzLmVzL2lwczIwMDIvcG9saWN5Q0xBU0VB -MS5odG1sMHcGA1UdHwRwMG4wM6AxoC+GLWh0dHBzOi8vd3d3Lmlwcy5lcy9pcHMy -MDAyL2lwczIwMDJDTEFTRUExLmNybDA3oDWgM4YxaHR0cHM6Ly93d3diYWNrLmlw -cy5lcy9pcHMyMDAyL2lwczIwMDJDTEFTRUExLmNybDAvBggrBgEFBQcBAQQjMCEw -HwYIKwYBBQUHMAGGE2h0dHA6Ly9vY3NwLmlwcy5lcy8wDQYJKoZIhvcNAQEFBQAD -gYEAGY2khC4v4mlenqRcy8Mn8mcWca88t4CY9LCJMqlIt7i559BNkMMB66tXsNp9 -N2QhnTordKOjkdgZJmCb7DUdMJEQQT0Y5W7JA6WvHatAFu8feRJ4ImaTjI0Xz3Dd -Jbz6O++igCw0l4EY5gayn2BFpAm+7ZpEcdpR/OCOH80lNDo= ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIH/zCCB2igAwIBAgIBADANBgkqhkiG9w0BAQUFADCCARQxCzAJBgNVBAYTAkVT -MRIwEAYDVQQIEwlCYXJjZWxvbmExEjAQBgNVBAcTCUJhcmNlbG9uYTEuMCwGA1UE -ChMlSVBTIEludGVybmV0IHB1Ymxpc2hpbmcgU2VydmljZXMgcy5sLjErMCkGA1UE -ChQiaXBzQG1haWwuaXBzLmVzIEMuSS5GLiAgQi02MDkyOTQ1MjEvMC0GA1UECxMm -SVBTIENBIENMQVNFQTMgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxLzAtBgNVBAMT -JklQUyBDQSBDTEFTRUEzIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MR4wHAYJKoZI -hvcNAQkBFg9pcHNAbWFpbC5pcHMuZXMwHhcNMDExMjMxMTEyMzU5WhcNMjUxMjI5 -MTEyMzU5WjCCARQxCzAJBgNVBAYTAkVTMRIwEAYDVQQIEwlCYXJjZWxvbmExEjAQ -BgNVBAcTCUJhcmNlbG9uYTEuMCwGA1UEChMlSVBTIEludGVybmV0IHB1Ymxpc2hp -bmcgU2VydmljZXMgcy5sLjErMCkGA1UEChQiaXBzQG1haWwuaXBzLmVzIEMuSS5G -LiAgQi02MDkyOTQ1MjEvMC0GA1UECxMmSVBTIENBIENMQVNFQTMgQ2VydGlmaWNh -dGlvbiBBdXRob3JpdHkxLzAtBgNVBAMTJklQUyBDQSBDTEFTRUEzIENlcnRpZmlj -YXRpb24gQXV0aG9yaXR5MR4wHAYJKoZIhvcNAQkBFg9pcHNAbWFpbC5pcHMuZXMw -gZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMFh+lWUEmnBK5F6da6IALvvPO6f -MWYw9LFAmwJsjcdKTVElPugUKLwgPLHxjO19kdmXIqPVzGOxq9krIwvdppffBYRU -Fro6y8xja40gpdaeBXFGdVj19mR7C2adPoeVPTy1OTdSVLsWF8W/rdiLMy/p+PrV -gTP/t56Fpu9MOeDjAgMBAAGjggRbMIIEVzAdBgNVHQ4EFgQU/J6FGtwGJXEh8C+L -ElXQxYDuBq4wggFGBgNVHSMEggE9MIIBOYAU/J6FGtwGJXEh8C+LElXQxYDuBq6h -ggEcpIIBGDCCARQxCzAJBgNVBAYTAkVTMRIwEAYDVQQIEwlCYXJjZWxvbmExEjAQ -BgNVBAcTCUJhcmNlbG9uYTEuMCwGA1UEChMlSVBTIEludGVybmV0IHB1Ymxpc2hp -bmcgU2VydmljZXMgcy5sLjErMCkGA1UEChQiaXBzQG1haWwuaXBzLmVzIEMuSS5G -LiAgQi02MDkyOTQ1MjEvMC0GA1UECxMmSVBTIENBIENMQVNFQTMgQ2VydGlmaWNh -dGlvbiBBdXRob3JpdHkxLzAtBgNVBAMTJklQUyBDQSBDTEFTRUEzIENlcnRpZmlj -YXRpb24gQXV0aG9yaXR5MR4wHAYJKoZIhvcNAQkBFg9pcHNAbWFpbC5pcHMuZXOC -AQAwDAYDVR0TBAUwAwEB/zAMBgNVHQ8EBQMDB/+AMGsGA1UdJQRkMGIGCCsGAQUF -BwMBBggrBgEFBQcDAgYIKwYBBQUHAwMGCCsGAQUFBwMEBggrBgEFBQcDCAYKKwYB -BAGCNwIBFQYKKwYBBAGCNwIBFgYKKwYBBAGCNwoDAQYKKwYBBAGCNwoDBDARBglg -hkgBhvhCAQEEBAMCAAcwGgYDVR0RBBMwEYEPaXBzQG1haWwuaXBzLmVzMBoGA1Ud -EgQTMBGBD2lwc0BtYWlsLmlwcy5lczBDBglghkgBhvhCAQ0ENhY0Q0xBU0VBMyBD -QSBDZXJ0aWZpY2F0ZSBpc3N1ZWQgYnkgaHR0cHM6Ly93d3cuaXBzLmVzLzAqBglg -hkgBhvhCAQIEHRYbaHR0cHM6Ly93d3cuaXBzLmVzL2lwczIwMDIvMDwGCWCGSAGG -+EIBBAQvFi1odHRwczovL3d3dy5pcHMuZXMvaXBzMjAwMi9pcHMyMDAyQ0xBU0VB -My5jcmwwQQYJYIZIAYb4QgEDBDQWMmh0dHBzOi8vd3d3Lmlwcy5lcy9pcHMyMDAy -L3Jldm9jYXRpb25DTEFTRUEzLmh0bWw/MD4GCWCGSAGG+EIBBwQxFi9odHRwczov -L3d3dy5pcHMuZXMvaXBzMjAwMi9yZW5ld2FsQ0xBU0VBMy5odG1sPzA8BglghkgB -hvhCAQgELxYtaHR0cHM6Ly93d3cuaXBzLmVzL2lwczIwMDIvcG9saWN5Q0xBU0VB -My5odG1sMHcGA1UdHwRwMG4wM6AxoC+GLWh0dHBzOi8vd3d3Lmlwcy5lcy9pcHMy -MDAyL2lwczIwMDJDTEFTRUEzLmNybDA3oDWgM4YxaHR0cHM6Ly93d3diYWNrLmlw -cy5lcy9pcHMyMDAyL2lwczIwMDJDTEFTRUEzLmNybDAvBggrBgEFBQcBAQQjMCEw -HwYIKwYBBQUHMAGGE2h0dHA6Ly9vY3NwLmlwcy5lcy8wDQYJKoZIhvcNAQEFBQAD -gYEAGG8JN0Ca0pQR0X/Lg33qtKfi2JPe2iRqdRswDoL3CTn+bRN20V/wbKDAwyxc -7eJOroysytPkEF4wZhipaKCjaWJROZGCeU1jM7mZe9pQPzeofT//VLi8zKaUA4lZ -BvYI44gntZQoaFxJna5NHHde+mbbPYlHb8c6g0mf9S3tODs= ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIIQTCCB6qgAwIBAgIBADANBgkqhkiG9w0BAQUFADCCAR4xCzAJBgNVBAYTAkVT -MRIwEAYDVQQIEwlCYXJjZWxvbmExEjAQBgNVBAcTCUJhcmNlbG9uYTEuMCwGA1UE -ChMlSVBTIEludGVybmV0IHB1Ymxpc2hpbmcgU2VydmljZXMgcy5sLjErMCkGA1UE -ChQiaXBzQG1haWwuaXBzLmVzIEMuSS5GLiAgQi02MDkyOTQ1MjE0MDIGA1UECxMr -SVBTIENBIFRpbWVzdGFtcGluZyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTE0MDIG -A1UEAxMrSVBTIENBIFRpbWVzdGFtcGluZyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0 -eTEeMBwGCSqGSIb3DQEJARYPaXBzQG1haWwuaXBzLmVzMB4XDTAxMTIzMTExMjY0 -M1oXDTI1MTIyOTExMjY0M1owggEeMQswCQYDVQQGEwJFUzESMBAGA1UECBMJQmFy -Y2Vsb25hMRIwEAYDVQQHEwlCYXJjZWxvbmExLjAsBgNVBAoTJUlQUyBJbnRlcm5l -dCBwdWJsaXNoaW5nIFNlcnZpY2VzIHMubC4xKzApBgNVBAoUImlwc0BtYWlsLmlw -cy5lcyBDLkkuRi4gIEItNjA5Mjk0NTIxNDAyBgNVBAsTK0lQUyBDQSBUaW1lc3Rh -bXBpbmcgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxNDAyBgNVBAMTK0lQUyBDQSBU -aW1lc3RhbXBpbmcgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxHjAcBgkqhkiG9w0B -CQEWD2lwc0BtYWlsLmlwcy5lczCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA -0umTdn+FPP2gAb0RL0ZCDyt/BZvGa/VRcayaUh8flSfMkO+WP45RNv0WAM43pSGU -Rmvt5P+hfuqf0aKbOPMTxLmYumVFQ/nXvRWdlC4AYN6YGrk8yfXh/NbEJN/n48iE -GRK0HFyz9eIWYSdg8vAt5PDzrPigeYSdReL2AfBE5ZECAwEAAaOCBIkwggSFMB0G -A1UdDgQWBBSR2UK8nKnK0Bw3E1JXFqANHikdPjCCAVAGA1UdIwSCAUcwggFDgBSR -2UK8nKnK0Bw3E1JXFqANHikdPqGCASakggEiMIIBHjELMAkGA1UEBhMCRVMxEjAQ -BgNVBAgTCUJhcmNlbG9uYTESMBAGA1UEBxMJQmFyY2Vsb25hMS4wLAYDVQQKEyVJ -UFMgSW50ZXJuZXQgcHVibGlzaGluZyBTZXJ2aWNlcyBzLmwuMSswKQYDVQQKFCJp -cHNAbWFpbC5pcHMuZXMgQy5JLkYuICBCLTYwOTI5NDUyMTQwMgYDVQQLEytJUFMg -Q0EgVGltZXN0YW1waW5nIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MTQwMgYDVQQD -EytJUFMgQ0EgVGltZXN0YW1waW5nIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MR4w -HAYJKoZIhvcNAQkBFg9pcHNAbWFpbC5pcHMuZXOCAQAwDAYDVR0TBAUwAwEB/zAM -BgNVHQ8EBQMDB/+AMGsGA1UdJQRkMGIGCCsGAQUFBwMBBggrBgEFBQcDAgYIKwYB -BQUHAwMGCCsGAQUFBwMEBggrBgEFBQcDCAYKKwYBBAGCNwIBFQYKKwYBBAGCNwIB -FgYKKwYBBAGCNwoDAQYKKwYBBAGCNwoDBDARBglghkgBhvhCAQEEBAMCAAcwGgYD -VR0RBBMwEYEPaXBzQG1haWwuaXBzLmVzMBoGA1UdEgQTMBGBD2lwc0BtYWlsLmlw -cy5lczBIBglghkgBhvhCAQ0EOxY5VGltZXN0YW1waW5nIENBIENlcnRpZmljYXRl -IGlzc3VlZCBieSBodHRwczovL3d3dy5pcHMuZXMvMCoGCWCGSAGG+EIBAgQdFhto -dHRwczovL3d3dy5pcHMuZXMvaXBzMjAwMi8wQQYJYIZIAYb4QgEEBDQWMmh0dHBz -Oi8vd3d3Lmlwcy5lcy9pcHMyMDAyL2lwczIwMDJUaW1lc3RhbXBpbmcuY3JsMEYG -CWCGSAGG+EIBAwQ5FjdodHRwczovL3d3dy5pcHMuZXMvaXBzMjAwMi9yZXZvY2F0 -aW9uVGltZXN0YW1waW5nLmh0bWw/MEMGCWCGSAGG+EIBBwQ2FjRodHRwczovL3d3 -dy5pcHMuZXMvaXBzMjAwMi9yZW5ld2FsVGltZXN0YW1waW5nLmh0bWw/MEEGCWCG -SAGG+EIBCAQ0FjJodHRwczovL3d3dy5pcHMuZXMvaXBzMjAwMi9wb2xpY3lUaW1l -c3RhbXBpbmcuaHRtbDCBgQYDVR0fBHoweDA4oDagNIYyaHR0cHM6Ly93d3cuaXBz -LmVzL2lwczIwMDIvaXBzMjAwMlRpbWVzdGFtcGluZy5jcmwwPKA6oDiGNmh0dHBz -Oi8vd3d3YmFjay5pcHMuZXMvaXBzMjAwMi9pcHMyMDAyVGltZXN0YW1waW5nLmNy -bDAvBggrBgEFBQcBAQQjMCEwHwYIKwYBBQUHMAGGE2h0dHA6Ly9vY3NwLmlwcy5l -cy8wDQYJKoZIhvcNAQEFBQADgYEAxKMCdGABCUwYXU900W1zDCfTSDC1TxFVGRnH -I4soqfp4D34sJ/adkgD2GMgkAMVf+C1MY/yQFV4nmOal9K7SNrG1JR8OeDoRjpM4 -rtO9qYbuHD3TW47/y/aZSZxP4ccocGpPOkvqfrnndKRKY0WUk/7Qg5aqpIXni2Gg -olkTZbQ= ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIICtzCCAiACAQAwDQYJKoZIhvcNAQEEBQAwgaMxCzAJBgNVBAYTAkVTMRIwEAYD -VQQIEwlCQVJDRUxPTkExEjAQBgNVBAcTCUJBUkNFTE9OQTEZMBcGA1UEChMQSVBT -IFNlZ3VyaWRhZCBDQTEYMBYGA1UECxMPQ2VydGlmaWNhY2lvbmVzMRcwFQYDVQQD -Ew5JUFMgU0VSVklET1JFUzEeMBwGCSqGSIb3DQEJARYPaXBzQG1haWwuaXBzLmVz -MB4XDTk4MDEwMTIzMjEwN1oXDTA5MTIyOTIzMjEwN1owgaMxCzAJBgNVBAYTAkVT -MRIwEAYDVQQIEwlCQVJDRUxPTkExEjAQBgNVBAcTCUJBUkNFTE9OQTEZMBcGA1UE -ChMQSVBTIFNlZ3VyaWRhZCBDQTEYMBYGA1UECxMPQ2VydGlmaWNhY2lvbmVzMRcw -FQYDVQQDEw5JUFMgU0VSVklET1JFUzEeMBwGCSqGSIb3DQEJARYPaXBzQG1haWwu -aXBzLmVzMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCsT1J0nznqjtwlxLyY -XZhkJAk8IbPMGbWOlI6H0fg3PqHILVikgDVboXVsHUUMH2Fjal5vmwpMwci4YSM1 -gf/+rHhwLWjhOgeYlQJU3c0jt4BT18g3RXIGJBK6E2Ehim51KODFDzT9NthFf+G4 -Nu+z4cYgjui0OLzhPvYR3oydAQIDAQABMA0GCSqGSIb3DQEBBAUAA4GBACzzw3lY -JN7GO9HgQmm47mSzPWIBubOE3yN93ZjPEKn+ANgilgUTB1RXxafey9m4iEL2mdsU -dx+2/iU94aI+A6mB0i1sR/WWRowiq8jMDQ6XXotBtDvECgZAHd1G9AHduoIuPD14 -cJ58GNCr+Lh3B0Zx8coLY1xq+XKU1QFPoNtC ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIDczCCAlugAwIBAgIBBDANBgkqhkiG9w0BAQUFADBkMQswCQYDVQQGEwJLUjEN -MAsGA1UECgwES0lTQTEuMCwGA1UECwwlS29yZWEgQ2VydGlmaWNhdGlvbiBBdXRo -b3JpdHkgQ2VudHJhbDEWMBQGA1UEAwwNS0lTQSBSb290Q0EgMTAeFw0wNTA4MjQw -ODA1NDZaFw0yNTA4MjQwODA1NDZaMGQxCzAJBgNVBAYTAktSMQ0wCwYDVQQKDARL -SVNBMS4wLAYDVQQLDCVLb3JlYSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSBDZW50 -cmFsMRYwFAYDVQQDDA1LSVNBIFJvb3RDQSAxMIIBIDANBgkqhkiG9w0BAQEFAAOC -AQ0AMIIBCAKCAQEAvATk+hM58DSWIGtsaLv623f/J/es7C/n/fB/bW+MKs0lCVsk -9KFo/CjsySXirO3eyDOE9bClCTqnsUdIxcxPjHmc+QZXfd3uOPbPFLKc6tPAXXdi -8EcNuRpAU1xkcK8IWsD3z3X5bI1kKB4g/rcbGdNaZoNy4rCbvdMlFQ0yb2Q3lIVG -yHK+d9VuHygvx2nt54OJM1jT3qC/QOhDUO7cTWu8peqmyGGO9cNkrwYV3CmLP3WM -vHFE2/yttRcdbYmDz8Yzvb9Fov4Kn6MRXw+5H5wawkbMnChmn3AmPC7fqoD+jMUE -CSVPzZNHPDfqAmeS/vwiJFys0izgXAEzisEZ2wIBA6MyMDAwHQYDVR0OBBYEFL+2 -J9gDWnZlTGEBQVYx5Yt7OtnMMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEF -BQADggEBABOvUQveimpb5poKyLGQSk6hAp3MiNKrZr097LuxQpVqslxa/6FjZJap -aBV/JV6K+KRzwYCKhQoOUugy50X4TmWAkZl0Q+VFnUkq8JSV3enhMNITbslOsXfl -BM+tWh6UCVrXPAgcrnrpFDLBRa3SJkhyrKhB2vAhhzle3/xk/2F0KpzZm4tfwjeT -2KM3LzuTa7IbB6d/CVDv0zq+IWuKkDsnSlFOa56ch534eJAx7REnxqhZvvwYC/uO -fi5C4e3nCSG9uRPFVmf0JqZCQ5BEVLRxm3bkGhKsGigA35vB1fjbXKP4krG9tNT5 -UNkAAk/bg9ART6RCVmE6fhMy04Qfybo= ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIFUjCCBDqgAwIBAgIBAjANBgkqhkiG9w0BAQUFADBkMQswCQYDVQQGEwJLUjEN -MAsGA1UEChMES0lTQTEuMCwGA1UECxMlS29yZWEgQ2VydGlmaWNhdGlvbiBBdXRo -b3JpdHkgQ2VudHJhbDEWMBQGA1UEAxMNS0lTQSBSb290Q0EgMzAeFw0wNDExMTkw -NjM5NTFaFw0xNDExMTkwNjM5NTFaMGQxCzAJBgNVBAYTAktSMQ0wCwYDVQQKEwRL -SVNBMS4wLAYDVQQLEyVLb3JlYSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSBDZW50 -cmFsMRYwFAYDVQQDEw1LSVNBIFJvb3RDQSAzMIIBIDANBgkqhkiG9w0BAQEFAAOC -AQ0AMIIBCAKCAQEA3rrtF2Wu0b1KPazbgHLMWOHn4ZPazDB6z+8Lri2nQ6u/p0LP -CFYIpEcdffqG79gwlyY0YTyADvjU65/8IjAboW0+40zSVU4WQDfC9gdu2we1pYyW -geKbXH6UYcjOhDyx+gDmctMJhXfp3F4hT7TkTvTiF6tQrxz/oTlYdVsSspa5jfBw -YkhbVigqpYeRNrkeJPW5unu2UlFbF1pgBWycwubGjD756t08jP+J3kNwrB248XXN -OMpTDUdoasY8GMq94bS+DvTQ49IT+rBRERHUQavo9DmO4TSETwuTqmo4/OXGeEeu -dhf6oYA3BgAVCP1rI476cg2V1ktisWjC3TSbXQIBA6OCAg8wggILMB8GA1UdIwQY -MBaAFI+B8NqmzXQ8vmb0FWtGpP4GKMyqMB0GA1UdDgQWBBSPgfDaps10PL5m9BVr -RqT+BijMqjAOBgNVHQ8BAf8EBAMCAQYwggEuBgNVHSAEggElMIIBITCCAR0GBFUd -IAAwggETMDAGCCsGAQUFBwIBFiRodHRwOi8vd3d3LnJvb3RjYS5vci5rci9yY2Ev -Y3BzLmh0bWwwgd4GCCsGAQUFBwICMIHRHoHOx3QAIMd4yZ3BHLKUACCs9cd4x3jJ -ncEcx4WyyLLkACgAVABoAGkAcwAgAGMAZQByAHQAaQBmAGkAYwBhAHQAZQAgAGkA -cwAgAGEAYwBjAHIAZQBkAGkAdABlAGQAIAB1AG4AZABlAHIAIABFAGwAZQBjAHQA -cgBvAG4AaQBjACAAUwBpAGcAbgBhAHQAdQByAGUAIABBAGMAdAAgAG8AZgAgAHQA -aABlACAAUgBlAHAAdQBiAGwAaQBjACAAbwBmACAASwBvAHIAZQBhACkwMwYDVR0R -BCwwKqQoMCYxJDAiBgNVBAMMG+2VnOq1reygleuztOuztO2YuOynhO2dpeybkDAz -BgNVHRIELDAqpCgwJjEkMCIGA1UEAwwb7ZWc6rWt7KCV67O067O07Zi47KeE7Z2l -7JuQMA8GA1UdEwEB/wQFMAMBAf8wDAYDVR0kBAUwA4ABADANBgkqhkiG9w0BAQUF -AAOCAQEAz9b3Dv2wjG4FFY6oXCuyWtEeV6ZeGKqCEQj8mbdbp+PI0qLT+SQ09+Pk -rolUR9NpScmAwRHr4inH9gaLX7riXs+rw87P7pIl3J85Hg4D9N6QW6FwmVzHc07J -pHVJeyWhn4KSjU3sYcUMMqfHODiAVToqgx2cZHm5Dac1Smjvj/8F2LpOVmHY+Epw -mAiWk9hgxzrsX58dKzVPSBShmrtv7tIDhlPxEMcHVGJeNo7iHCsdF03m9VrvirqC -6HfZKBF+N4dKlArJQOk1pTr7ZD7yXxZ683bXzu4/RB1Fql8RqlMcOh9SUWJUD6OQ -Nc9Nb7rHviwJ8TX4Absk3TC8SA/u2Q== ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIDdjCCAl6gAwIBAgIEOhsEBTANBgkqhkiG9w0BAQUFADBRMQswCQYDVQQGEwJE -SzEMMAoGA1UEChMDS01EMQ8wDQYDVQQLEwZLTUQtQ0ExIzAhBgNVBAMTGktNRC1D -QSBLdmFsaWZpY2VyZXQgUGVyc29uMB4XDTAwMTEyMTIzMjQ1OVoXDTE1MTEyMjIz -MjQ1OVowUTELMAkGA1UEBhMCREsxDDAKBgNVBAoTA0tNRDEPMA0GA1UECxMGS01E -LUNBMSMwIQYDVQQDExpLTUQtQ0EgS3ZhbGlmaWNlcmV0IFBlcnNvbjCCASIwDQYJ -KoZIhvcNAQEBBQADggEPADCCAQoCggEBANriF4Xd6yD7ZlBE317UBDObn+vRMVc6 -p3wNQODdEDJe2z1ncCz9NJvhoLGdOJhyg7VVPh0P2c+KZ9WI9mWOKZI2bp2WkLju -jCcxbhTrurY3Wfc6gwLBqqFV8wWgaZKmvVWizjw9Kyi25f3yX4fOho6Qq2lvVbub -tvVFXAd51GJ+/2Yed+a4Or2bz2RcqHS81B3pywsD4mgJR5xREv5jqPfwNP+V7bkc -X+pfO4kVhZ/V+8MSPdQHgcV/iB3wP2mwgWyIBNc1reBidGTiz8unnWu55hcNfsvt -LJbTs9OHhsR7naRuy+S402nDnD5vnONOFEsiHn46w+T0rtu7h6j4OvkCAwEAAaNW -MFQwEgYDVR0TAQH/BAgwBgEB/wIBADAdBgNVHQ4EFgQUeWLqmhI42Jxj7DifDsW+ -DlQhKD0wHwYDVR0jBBgwFoAUeWLqmhI42Jxj7DifDsW+DlQhKD0wDQYJKoZIhvcN -AQEFBQADggEBANML/P42OuJ9aUV/0fItuIyc1JhqWvSqn5bXj+9eyEegcp8bHLHY -42D1O+z0lNipdjYPSdMJ0wZOEUhr+150SdDQ1P/zQL8AUaLEBkRt7ZdzXPVH3PER -qnf9IrpYBknZKfCAoVchA6Rr9WU3Sd8bMoRfMLKg8c0M8G6EPwCTcOFriSkbtvNG -zd8r8I+WfUYIN/p8DI9JT9qfjVODnYPRMUm6KPvq27TsrGruKrqyaV94kWc8co8A -v3zFLeCtghvUiRBdx+8Q7m5t4CkuSr0WINrqjIPFW2QrM1r82y09Fd16RkqL4LOg -Lh6vB5KnTApv62rWdw7zWwYnjY6/vXYY1Aw= ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIDWjCCAkKgAwIBAgIEO8rJUjANBgkqhkiG9w0BAQUFADBmMQswCQYDVQQGEwJE -SzEMMAoGA1UEChMDS01EMQ8wDQYDVQQLEwZLTUQtQ0ExFjAUBgNVBAMTDUtNRC1D -QSBTZXJ2ZXIxIDAeBgoJkiaJk/IsZAEDFBBpbmZvY2FAa21kLWNhLmRrMB4XDTk4 -MTAxNjE5MTkyMVoXDTE4MTAxMjE5MTkyMVowZjELMAkGA1UEBhMCREsxDDAKBgNV -BAoTA0tNRDEPMA0GA1UECxMGS01ELUNBMRYwFAYDVQQDEw1LTUQtQ0EgU2VydmVy -MSAwHgYKCZImiZPyLGQBAxQQaW5mb2NhQGttZC1jYS5kazCCASIwDQYJKoZIhvcN -AQEBBQADggEPADCCAQoCggEBAJsLpbSgFxQ7IhFgf5f+RfBxnbCkx5C7yTjfCZvp -/BP2LBD3OKjgLRwvASoCU3I5NMhccho6uhZVf1HC+Ac5HmXUUd+v92a7gDnohPPy -Rgv8c6f/+R2fFen37SBemYFDtZveamVXZ2To7xAxNiMKgPTPs/Rl7F6LDsYgv1bD -36FrjahNoSTmTbYRoK21eIOVwrZeNSzo9w3W8fj0n+V2IB1jsOh+AvjXkjbvAVky -0/57GMlyBNKP7JIGP7LXqwWfrBXuAph1DUMz467KlHZOMkPwCjTZOab7CcLQXCCY -12s5c5QAkwpf35hQRuOaNo6d/XFM6J9mofiWlGTT3Px1EX0CAwEAAaMQMA4wDAYD -VR0TBAUwAwEB/zANBgkqhkiG9w0BAQUFAAOCAQEAPlA6VZ2C2cJbsI0SBIe9v+M9 -GxI45QI7P0D7QGyrqM7oNqGq7hJdN6NFb0LyPcF3/pVzmtYVJzaGKF6spaxOEveB -9ki1xRoXUKpaCxSweBpTzEktWa43OytRy0sbryEmHJCQkz8MPufWssf2yXHzgFFo -XMQpcMyT7JwxPlfYVvab9Kp+nW7fIyDOG0wdmBerZ+GEQJxJEkri1HskjigxhGze -ziocJatBuOWgqw5KRylgGIQjUGRTCbODVta+Kmqb9d+cB7FStbYtt2HebOXzBIY3 -XUM5KtGC++We7DqgU5Firek7brw8i2XsHPLKJTceb6Xo6DsSxLfBAWV6+8DCkQ== ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIDtDCCApygAwIBAgIBADANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJKUDEc -MBoGA1UEChMTSmFwYW5lc2UgR292ZXJubWVudDEOMAwGA1UECxMFTVBIUFQxJjAk -BgNVBAsTHU1QSFBUIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTAyMDMxNDA3 -NTAyNloXDTEyMDMxMzE0NTk1OVowYzELMAkGA1UEBhMCSlAxHDAaBgNVBAoTE0ph -cGFuZXNlIEdvdmVybm1lbnQxDjAMBgNVBAsTBU1QSFBUMSYwJAYDVQQLEx1NUEhQ -VCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASIwDQYJKoZIhvcNAQEBBQADggEP -ADCCAQoCggEBAI3GUWlK9G9FVm8DhpKu5t37oxZbj6lZcFvEZY07YrYojWO657ub -z56WE7q/PI/6Sm7i7qYE+Vp80r6thJvfmn7SS3BENrRqiapSenhooYD12jIe3iZQ -2SXqx7WgYwyBGdQwGaYTijzbRFpgc0K8o4a99fIoHhz9J8AKqXasddMCqfJRaH30 -YJ7HnOvRYGL6HBrGhJ7X4Rzijyk9a9+3VOBsYcnIlx9iODoiYhA6r0ojuIu8/JA1 -oTTZrS0MyU/SLdFdJze2O1wnqTULXQybzJz3ad6oC/F5a69c0m92akYd9nGBrPxj -EhucaQynC/QoCLs3aciLgioAnEJqy7i3EgUCAwEAAaNzMHEwHwYDVR0jBBgwFoAU -YML3pLoA0h93Yngl8Gb/UgAh73owHQYDVR0OBBYEFGDC96S6ANIfd2J4JfBm/1IA -Ie96MAwGA1UdEwQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMBEGCWCGSAGG+EIBAQQE -AwIABTANBgkqhkiG9w0BAQUFAAOCAQEANPR8DN66iWZBs/lSm1vOzhqRkXDLT6xL -LvJtjPLqmE469szGyFSKzsof6y+/8YgZlOoeX1inF4ox/SH1ATnwdIIsPbXuRLjt -axboXvBh5y2ffC3hmzJVvJ87tb6mVWQeL9VFUhNhAI0ib+9OIZVEYI/64MFkDk4e -iWG5ts6oqIJH1V7dVZg6pQ1Tc0Ckhn6N1m1hD30S0/zoPn/20Wq6OCF3he8VJrRG -dcW9BD/Bkesko1HKhMBDjHVrJ8cFwbnDSoo+Ki47eJWaz/cOzaSsaMVUsR5POava -/abhhgHn/eOJdXiVslyK0DYscjsdB3aBUfwZlomxYOzG6CgjQPhJdw== ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIFTzCCBLigAwIBAgIBaDANBgkqhkiG9w0BAQQFADCBmzELMAkGA1UEBhMCSFUx -ETAPBgNVBAcTCEJ1ZGFwZXN0MScwJQYDVQQKEx5OZXRMb2NrIEhhbG96YXRiaXp0 -b25zYWdpIEtmdC4xGjAYBgNVBAsTEVRhbnVzaXR2YW55a2lhZG9rMTQwMgYDVQQD -EytOZXRMb2NrIEV4cHJlc3N6IChDbGFzcyBDKSBUYW51c2l0dmFueWtpYWRvMB4X -DTk5MDIyNTE0MDgxMVoXDTE5MDIyMDE0MDgxMVowgZsxCzAJBgNVBAYTAkhVMREw -DwYDVQQHEwhCdWRhcGVzdDEnMCUGA1UEChMeTmV0TG9jayBIYWxvemF0Yml6dG9u -c2FnaSBLZnQuMRowGAYDVQQLExFUYW51c2l0dmFueWtpYWRvazE0MDIGA1UEAxMr -TmV0TG9jayBFeHByZXNzeiAoQ2xhc3MgQykgVGFudXNpdHZhbnlraWFkbzCBnzAN -BgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA6+ywbGGKIyWvYCDj2Z/8kwvbXY2wobNA -OoLO/XXgeDIDhlqGlZHtU/qdQPzm6N3ZW3oDvV3zOwzDUXmbrVWg6dADEK8KuhRC -2VImESLH0iDMgqSaqf64gXadarfSNnU+sYYJ9m5tfk63euyucYT2BDMIJTLrdKwW -RMbkQJMdf60CAwEAAaOCAp8wggKbMBIGA1UdEwEB/wQIMAYBAf8CAQQwDgYDVR0P -AQH/BAQDAgAGMBEGCWCGSAGG+EIBAQQEAwIABzCCAmAGCWCGSAGG+EIBDQSCAlEW -ggJNRklHWUVMRU0hIEV6ZW4gdGFudXNpdHZhbnkgYSBOZXRMb2NrIEtmdC4gQWx0 -YWxhbm9zIFN6b2xnYWx0YXRhc2kgRmVsdGV0ZWxlaWJlbiBsZWlydCBlbGphcmFz -b2sgYWxhcGphbiBrZXN6dWx0LiBBIGhpdGVsZXNpdGVzIGZvbHlhbWF0YXQgYSBO -ZXRMb2NrIEtmdC4gdGVybWVrZmVsZWxvc3NlZy1iaXp0b3NpdGFzYSB2ZWRpLiBB -IGRpZ2l0YWxpcyBhbGFpcmFzIGVsZm9nYWRhc2FuYWsgZmVsdGV0ZWxlIGF6IGVs -b2lydCBlbGxlbm9yemVzaSBlbGphcmFzIG1lZ3RldGVsZS4gQXogZWxqYXJhcyBs -ZWlyYXNhIG1lZ3RhbGFsaGF0byBhIE5ldExvY2sgS2Z0LiBJbnRlcm5ldCBob25s -YXBqYW4gYSBodHRwczovL3d3dy5uZXRsb2NrLm5ldC9kb2NzIGNpbWVuIHZhZ3kg -a2VyaGV0byBheiBlbGxlbm9yemVzQG5ldGxvY2submV0IGUtbWFpbCBjaW1lbi4g -SU1QT1JUQU5UISBUaGUgaXNzdWFuY2UgYW5kIHRoZSB1c2Ugb2YgdGhpcyBjZXJ0 -aWZpY2F0ZSBpcyBzdWJqZWN0IHRvIHRoZSBOZXRMb2NrIENQUyBhdmFpbGFibGUg -YXQgaHR0cHM6Ly93d3cubmV0bG9jay5uZXQvZG9jcyBvciBieSBlLW1haWwgYXQg -Y3BzQG5ldGxvY2submV0LjANBgkqhkiG9w0BAQQFAAOBgQAQrX/XDDKACtiG8XmY -ta3UzbM2xJZIwVzNmtkFLp++UOv0JhQQLdRmF/iewSf98e3ke0ugbLWrmldwpu2g -pO0u9f38vf5NNwgMvOOWgyL1SRt/Syu0VMGAfJlOHdCM7tCs5ZL6dVb+ZKATj7i4 -Fp1hBWeAyNDYpQcCNJgEjTME1A== ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIGfTCCBWWgAwIBAgICAQMwDQYJKoZIhvcNAQEEBQAwga8xCzAJBgNVBAYTAkhV -MRAwDgYDVQQIEwdIdW5nYXJ5MREwDwYDVQQHEwhCdWRhcGVzdDEnMCUGA1UEChMe -TmV0TG9jayBIYWxvemF0Yml6dG9uc2FnaSBLZnQuMRowGAYDVQQLExFUYW51c2l0 -dmFueWtpYWRvazE2MDQGA1UEAxMtTmV0TG9jayBLb3pqZWd5em9pIChDbGFzcyBB -KSBUYW51c2l0dmFueWtpYWRvMB4XDTk5MDIyNDIzMTQ0N1oXDTE5MDIxOTIzMTQ0 -N1owga8xCzAJBgNVBAYTAkhVMRAwDgYDVQQIEwdIdW5nYXJ5MREwDwYDVQQHEwhC -dWRhcGVzdDEnMCUGA1UEChMeTmV0TG9jayBIYWxvemF0Yml6dG9uc2FnaSBLZnQu -MRowGAYDVQQLExFUYW51c2l0dmFueWtpYWRvazE2MDQGA1UEAxMtTmV0TG9jayBL -b3pqZWd5em9pIChDbGFzcyBBKSBUYW51c2l0dmFueWtpYWRvMIIBIjANBgkqhkiG -9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvHSMD7tM9DceqQWC2ObhbHDqeLVu0ThEDaiD -zl3S1tWBxdRL51uUcCbbO51qTGL3cfNk1mE7PetzozfZz+qMkjvN9wfcZnSX9EUi -3fRc4L9t875lM+QVOr/bmJBVOMTtplVjC7B4BPTjbsE/jvxReB+SnoPC/tmwqcm8 -WgD/qaiYdPv2LD4VOQ22BFWoDpggQrOxJa1+mm9dU7GrDPzr4PN6s6iz/0b2Y6LY -Oph7tqyF/7AlT3Rj5xMHpQqPBffAZG9+pyeAlt7ULoZgx2srXnN7F+eRP2QM2Esi -NCubMvJIH5+hCoR64sKtlz2O1cH5VqNQ6ca0+pii7pXmKgOM3wIDAQABo4ICnzCC -ApswDgYDVR0PAQH/BAQDAgAGMBIGA1UdEwEB/wQIMAYBAf8CAQQwEQYJYIZIAYb4 -QgEBBAQDAgAHMIICYAYJYIZIAYb4QgENBIICURaCAk1GSUdZRUxFTSEgRXplbiB0 -YW51c2l0dmFueSBhIE5ldExvY2sgS2Z0LiBBbHRhbGFub3MgU3pvbGdhbHRhdGFz -aSBGZWx0ZXRlbGVpYmVuIGxlaXJ0IGVsamFyYXNvayBhbGFwamFuIGtlc3p1bHQu -IEEgaGl0ZWxlc2l0ZXMgZm9seWFtYXRhdCBhIE5ldExvY2sgS2Z0LiB0ZXJtZWtm -ZWxlbG9zc2VnLWJpenRvc2l0YXNhIHZlZGkuIEEgZGlnaXRhbGlzIGFsYWlyYXMg -ZWxmb2dhZGFzYW5hayBmZWx0ZXRlbGUgYXogZWxvaXJ0IGVsbGVub3J6ZXNpIGVs -amFyYXMgbWVndGV0ZWxlLiBBeiBlbGphcmFzIGxlaXJhc2EgbWVndGFsYWxoYXRv -IGEgTmV0TG9jayBLZnQuIEludGVybmV0IGhvbmxhcGphbiBhIGh0dHBzOi8vd3d3 -Lm5ldGxvY2submV0L2RvY3MgY2ltZW4gdmFneSBrZXJoZXRvIGF6IGVsbGVub3J6 -ZXNAbmV0bG9jay5uZXQgZS1tYWlsIGNpbWVuLiBJTVBPUlRBTlQhIFRoZSBpc3N1 -YW5jZSBhbmQgdGhlIHVzZSBvZiB0aGlzIGNlcnRpZmljYXRlIGlzIHN1YmplY3Qg -dG8gdGhlIE5ldExvY2sgQ1BTIGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5uZXRs -b2NrLm5ldC9kb2NzIG9yIGJ5IGUtbWFpbCBhdCBjcHNAbmV0bG9jay5uZXQuMA0G -CSqGSIb3DQEBBAUAA4IBAQBIJEb3ulZv+sgoA0BO5TE5ayZrU3/b39/zcT0mwBQO -xmd7I6gMc90Bu8bKbjc5VdXHjFYgDigKDtIqpLBJUsY4B/6+CgmM0ZjPytoUMaFP -0jn8DxEsQ8Pdq5PHVT5HfBgaANzze9jyf1JsIPQLX2lS9O74silg6+NJMSEN1rUQ -QeJBCWziGppWS3cC9qCbmieH6FUpccKQn0V4GuEVZD3QDtigdp+uxdAu6tYPVuxk -f1qbFFgBJ34TUMdrKuZoPL9coAob4Q566eKAw+np9v1sEZ7Q5SgnK1QyQhSCdeZK -8CtmdWOMovsEPoMOmzbwGOQmIMOM8CgHrTwXZoi1/baI ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIG0TCCBbmgAwIBAgIBezANBgkqhkiG9w0BAQUFADCByTELMAkGA1UEBhMCSFUx -ETAPBgNVBAcTCEJ1ZGFwZXN0MScwJQYDVQQKEx5OZXRMb2NrIEhhbG96YXRiaXp0 -b25zYWdpIEtmdC4xGjAYBgNVBAsTEVRhbnVzaXR2YW55a2lhZG9rMUIwQAYDVQQD -EzlOZXRMb2NrIE1pbm9zaXRldHQgS296amVneXpvaSAoQ2xhc3MgUUEpIFRhbnVz -aXR2YW55a2lhZG8xHjAcBgkqhkiG9w0BCQEWD2luZm9AbmV0bG9jay5odTAeFw0w -MzAzMzAwMTQ3MTFaFw0yMjEyMTUwMTQ3MTFaMIHJMQswCQYDVQQGEwJIVTERMA8G -A1UEBxMIQnVkYXBlc3QxJzAlBgNVBAoTHk5ldExvY2sgSGFsb3phdGJpenRvbnNh -Z2kgS2Z0LjEaMBgGA1UECxMRVGFudXNpdHZhbnlraWFkb2sxQjBABgNVBAMTOU5l -dExvY2sgTWlub3NpdGV0dCBLb3pqZWd5em9pIChDbGFzcyBRQSkgVGFudXNpdHZh -bnlraWFkbzEeMBwGCSqGSIb3DQEJARYPaW5mb0BuZXRsb2NrLmh1MIIBIjANBgkq -hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAx1Ilstg91IRVCacbvWy5FPSKAtt2/Goq -eKvld/Bu4IwjZ9ulZJm53QE+b+8tmjwi8F3JV6BVQX/yQ15YglMxZc4e8ia6AFQe -r7C8HORSjKAyr7c3sVNnaHRnUPYtLmTeriZ539+Zhqurf4XsoPuAzPS4DB6TRWO5 -3Lhbm+1bOdRfYrCnjnxmOCyqsQhjF2d9zL2z8cM/z1A57dEZgxXbhxInlrfa6uWd -vLrqOU+L73Sa58XQ0uqGURzk/mQIKAR5BevKxXEOC++r6uwSEaEYBTJp0QwsGj0l -mT+1fMptsK6ZmfoIYOcZwvK9UdPM0wKswREMgM6r3JSda6M5UzrWhQIDAMV9o4IC -wDCCArwwEgYDVR0TAQH/BAgwBgEB/wIBBDAOBgNVHQ8BAf8EBAMCAQYwggJ1Bglg -hkgBhvhCAQ0EggJmFoICYkZJR1lFTEVNISBFemVuIHRhbnVzaXR2YW55IGEgTmV0 -TG9jayBLZnQuIE1pbm9zaXRldHQgU3pvbGdhbHRhdGFzaSBTemFiYWx5emF0YWJh -biBsZWlydCBlbGphcmFzb2sgYWxhcGphbiBrZXN6dWx0LiBBIG1pbm9zaXRldHQg -ZWxla3Ryb25pa3VzIGFsYWlyYXMgam9naGF0YXMgZXJ2ZW55ZXN1bGVzZW5laywg -dmFsYW1pbnQgZWxmb2dhZGFzYW5hayBmZWx0ZXRlbGUgYSBNaW5vc2l0ZXR0IFN6 -b2xnYWx0YXRhc2kgU3phYmFseXphdGJhbiwgYXogQWx0YWxhbm9zIFN6ZXJ6b2Rl -c2kgRmVsdGV0ZWxla2JlbiBlbG9pcnQgZWxsZW5vcnplc2kgZWxqYXJhcyBtZWd0 -ZXRlbGUuIEEgZG9rdW1lbnR1bW9rIG1lZ3RhbGFsaGF0b2sgYSBodHRwczovL3d3 -dy5uZXRsb2NrLmh1L2RvY3MvIGNpbWVuIHZhZ3kga2VyaGV0b2sgYXogaW5mb0Bu -ZXRsb2NrLm5ldCBlLW1haWwgY2ltZW4uIFdBUk5JTkchIFRoZSBpc3N1YW5jZSBh -bmQgdGhlIHVzZSBvZiB0aGlzIGNlcnRpZmljYXRlIGFyZSBzdWJqZWN0IHRvIHRo -ZSBOZXRMb2NrIFF1YWxpZmllZCBDUFMgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3 -Lm5ldGxvY2suaHUvZG9jcy8gb3IgYnkgZS1tYWlsIGF0IGluZm9AbmV0bG9jay5u -ZXQwHQYDVR0OBBYEFAlqYhaSsFq7VQ7LdTI6MuWyIckoMA0GCSqGSIb3DQEBBQUA -A4IBAQCRalCc23iBmz+LQuM7/KbD7kPgz/PigDVJRXYC4uMvBcXxKufAQTPGtpvQ -MznNwNuhrWw3AkxYQTvyl5LGSKjN5Yo5iWH5Upfpvfb5lHTocQ68d4bDBsxafEp+ -NFAwLvt/MpqNPfMgW/hqyobzMUwsWYACff44yTB1HLdV47yfuqhthCgFdbOLDcCR -VCHnpgu0mfVRQdzNo0ci2ccBgcTcR08m6h/t280NmPSjnLRzMkqWmf68f8glWPhY -83ZmiVSkpj7EUFy6iRiCdUgh0k8T6GB+B3bbELVR5qq5aKrN9p2QdRLqOBrKROi3 -macqaJVmlaut74nLYKkGEsaUR+ko ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIFSzCCBLSgAwIBAgIBaTANBgkqhkiG9w0BAQQFADCBmTELMAkGA1UEBhMCSFUx -ETAPBgNVBAcTCEJ1ZGFwZXN0MScwJQYDVQQKEx5OZXRMb2NrIEhhbG96YXRiaXp0 -b25zYWdpIEtmdC4xGjAYBgNVBAsTEVRhbnVzaXR2YW55a2lhZG9rMTIwMAYDVQQD -EylOZXRMb2NrIFV6bGV0aSAoQ2xhc3MgQikgVGFudXNpdHZhbnlraWFkbzAeFw05 -OTAyMjUxNDEwMjJaFw0xOTAyMjAxNDEwMjJaMIGZMQswCQYDVQQGEwJIVTERMA8G -A1UEBxMIQnVkYXBlc3QxJzAlBgNVBAoTHk5ldExvY2sgSGFsb3phdGJpenRvbnNh -Z2kgS2Z0LjEaMBgGA1UECxMRVGFudXNpdHZhbnlraWFkb2sxMjAwBgNVBAMTKU5l -dExvY2sgVXpsZXRpIChDbGFzcyBCKSBUYW51c2l0dmFueWtpYWRvMIGfMA0GCSqG -SIb3DQEBAQUAA4GNADCBiQKBgQCx6gTsIKAjwo84YM/HRrPVG/77uZmeBNwcf4xK -gZjupNTKihe5In+DCnVMm8Bp2GQ5o+2So/1bXHQawEfKOml2mrriRBf8TKPV/riX -iK+IA4kfpPIEPsgHC+b5sy96YhQJRhTKZPWLgLViqNhr1nGTLbO/CVRY7QbrqHvc -Q7GhaQIDAQABo4ICnzCCApswEgYDVR0TAQH/BAgwBgEB/wIBBDAOBgNVHQ8BAf8E -BAMCAAYwEQYJYIZIAYb4QgEBBAQDAgAHMIICYAYJYIZIAYb4QgENBIICURaCAk1G -SUdZRUxFTSEgRXplbiB0YW51c2l0dmFueSBhIE5ldExvY2sgS2Z0LiBBbHRhbGFu -b3MgU3pvbGdhbHRhdGFzaSBGZWx0ZXRlbGVpYmVuIGxlaXJ0IGVsamFyYXNvayBh -bGFwamFuIGtlc3p1bHQuIEEgaGl0ZWxlc2l0ZXMgZm9seWFtYXRhdCBhIE5ldExv -Y2sgS2Z0LiB0ZXJtZWtmZWxlbG9zc2VnLWJpenRvc2l0YXNhIHZlZGkuIEEgZGln -aXRhbGlzIGFsYWlyYXMgZWxmb2dhZGFzYW5hayBmZWx0ZXRlbGUgYXogZWxvaXJ0 -IGVsbGVub3J6ZXNpIGVsamFyYXMgbWVndGV0ZWxlLiBBeiBlbGphcmFzIGxlaXJh -c2EgbWVndGFsYWxoYXRvIGEgTmV0TG9jayBLZnQuIEludGVybmV0IGhvbmxhcGph -biBhIGh0dHBzOi8vd3d3Lm5ldGxvY2submV0L2RvY3MgY2ltZW4gdmFneSBrZXJo -ZXRvIGF6IGVsbGVub3J6ZXNAbmV0bG9jay5uZXQgZS1tYWlsIGNpbWVuLiBJTVBP -UlRBTlQhIFRoZSBpc3N1YW5jZSBhbmQgdGhlIHVzZSBvZiB0aGlzIGNlcnRpZmlj -YXRlIGlzIHN1YmplY3QgdG8gdGhlIE5ldExvY2sgQ1BTIGF2YWlsYWJsZSBhdCBo -dHRwczovL3d3dy5uZXRsb2NrLm5ldC9kb2NzIG9yIGJ5IGUtbWFpbCBhdCBjcHNA -bmV0bG9jay5uZXQuMA0GCSqGSIb3DQEBBAUAA4GBAATbrowXr/gOkDFOzT4JwG06 -sPgzTEdM43WIEJessDgVkcYplswhwG08pXTP2IKlOcNl40JwuyKQ433bNXbhoLXa -n3BukxowOR0w2y7jfLKRstE3Kfq51hdcR0/jHTjrn9V7lagonhVK0dHQKwCXoOKS -NitjrFgBazMpUIaD8QFI ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIID5jCCAs6gAwIBAgIQV8szb8JcFuZHFhfjkDFo4DANBgkqhkiG9w0BAQUFADBi -MQswCQYDVQQGEwJVUzEhMB8GA1UEChMYTmV0d29yayBTb2x1dGlvbnMgTC5MLkMu -MTAwLgYDVQQDEydOZXR3b3JrIFNvbHV0aW9ucyBDZXJ0aWZpY2F0ZSBBdXRob3Jp -dHkwHhcNMDYxMjAxMDAwMDAwWhcNMjkxMjMxMjM1OTU5WjBiMQswCQYDVQQGEwJV -UzEhMB8GA1UEChMYTmV0d29yayBTb2x1dGlvbnMgTC5MLkMuMTAwLgYDVQQDEydO -ZXR3b3JrIFNvbHV0aW9ucyBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwggEiMA0GCSqG -SIb3DQEBAQUAA4IBDwAwggEKAoIBAQDkvH6SMG3G2I4rC7xGzuAnlt7e+foS0zwz -c7MEL7xxjOWftiJgPl9dzgn/ggwbmlFQGiaJ3dVhXRncEg8tCqJDXRfQNJIg6nPP -OCwGJgl6cvf6UDL4wpPTaaIjzkGxzOTVHzbRijr4jGPiFFlp7Q3Tf2vouAPlT2rl -mGNpSAW+Lv8ztumXWWn4Zxmuk2GWRBXTcrA/vGp97Eh/jcOrqnErU2lBUzS1sLnF -BgrEsEX1QV1uiUV7PTsmjHTC5dLRfbIR1PtYMiKagMnc/Qzpf14Dl847ABSHJ3A4 -qY5usyd2mFHgBeMhqxrVhSI8KbWaFsWAqPS7azCPL0YCorEMIuDTAgMBAAGjgZcw -gZQwHQYDVR0OBBYEFCEwyfsA106Y2oeqKtCnLrFAMadMMA4GA1UdDwEB/wQEAwIB -BjAPBgNVHRMBAf8EBTADAQH/MFIGA1UdHwRLMEkwR6BFoEOGQWh0dHA6Ly9jcmwu -bmV0c29sc3NsLmNvbS9OZXR3b3JrU29sdXRpb25zQ2VydGlmaWNhdGVBdXRob3Jp -dHkuY3JsMA0GCSqGSIb3DQEBBQUAA4IBAQC7rkvnt1frf6ott3NHhWrB5KUd5Oc8 -6fRZZXe1eltajSU24HqXLjjAV2CDmAaDn7l2em5Q4LqILPxFzBiwmZVRDuwduIj/ -h1AcgsLj4DKAv6ALR8jDMe+ZZzKATxcheQxpXN5eNK4CtSbqUN9/GGUsyfJj4akH -/nxxH2szJGoeBfcFaMBqEssuXmHLrijTfsK0ZpEmXzwuJF/LWA/rKOyvEZbz3Htv -wKeI8lN3s2Berq4o2jUsbzRF0ybh3uxbTydrFny9RAQYgrOJeRcQcT16ohZO9QHN -pGxlaKFJdlxDydi8NmdspZS11My5vWo1ViHe2MPr+8ukYEywVaCge1ey ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIID8TCCAtmgAwIBAgIQQT1yx/RrH4FDffHSKFTfmjANBgkqhkiG9w0BAQUFADCB -ijELMAkGA1UEBhMCQ0gxEDAOBgNVBAoTB1dJU2VLZXkxGzAZBgNVBAsTEkNvcHly -aWdodCAoYykgMjAwNTEiMCAGA1UECxMZT0lTVEUgRm91bmRhdGlvbiBFbmRvcnNl -ZDEoMCYGA1UEAxMfT0lTVEUgV0lTZUtleSBHbG9iYWwgUm9vdCBHQSBDQTAeFw0w -NTEyMTExNjAzNDRaFw0zNzEyMTExNjA5NTFaMIGKMQswCQYDVQQGEwJDSDEQMA4G -A1UEChMHV0lTZUtleTEbMBkGA1UECxMSQ29weXJpZ2h0IChjKSAyMDA1MSIwIAYD -VQQLExlPSVNURSBGb3VuZGF0aW9uIEVuZG9yc2VkMSgwJgYDVQQDEx9PSVNURSBX -SVNlS2V5IEdsb2JhbCBSb290IEdBIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A -MIIBCgKCAQEAy0+zAJs9Nt350UlqaxBJH+zYK7LG+DKBKUOVTJoZIyEVRd7jyBxR -VVuuk+g3/ytr6dTqvirdqFEr12bDYVxgAsj1znJ7O7jyTmUIms2kahnBAbtzptf2 -w93NvKSLtZlhuAGio9RN1AU9ka34tAhxZK9w8RxrfvbDd50kc3vkDIzh2TbhmYsF -mQvtRTEJysIA2/dyoJaqlYfQjse2YXMNdmaM3Bu0Y6Kff5MTMPGhJ9vZ/yxViJGg -4E8HsChWjBgbl0SOid3gF27nKu+POQoxhILYQBRJLnpB5Kf+42TMwVlxSywhp1t9 -4B3RLoGbw9ho972WG6xwsRYUC9tguSYBBQIDAQABo1EwTzALBgNVHQ8EBAMCAYYw -DwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUswN+rja8sHnR3JQmthG+IbJphpQw -EAYJKwYBBAGCNxUBBAMCAQAwDQYJKoZIhvcNAQEFBQADggEBAEuh/wuHbrP5wUOx -SPMowB0uyQlB+pQAHKSkq0lPjz0e701vvbyk9vImMMkQyh2I+3QZH4VFvbBsUfk2 -ftv1TDI6QU9bR8/oCy22xBmddMVHxjtqD6wU2zz0c5ypBd8A3HR4+vg1YFkCExh8 -vPtNsCBtQ7tgMHpnM1zFmdH4LTlSc/uMqpclXHLZCB6rTjzjgTGfA6b7wP4piFXa -hNVQA7bihKOmNqoROgHhGEvWRGizPflTdISzRpFGlgC3gCy24eMQ4tui5yiPAZZi -Fj4A4xylNoEYokxSdsARo27mHbrjWr42U8U+dY+GaSlYU7Wcu2+fXMUY7N0v4ZjJ -/L7fCg0= ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIEajCCA1KgAwIBAgIBATANBgkqhkiG9w0BAQUFADBaMQswCQYDVQQGEwJKUDEN -MAsGA1UECgwESlBLSTEpMCcGA1UECwwgUHJlZmVjdHVyYWwgQXNzb2NpYXRpb24g -Rm9yIEpQS0kxETAPBgNVBAsMCEJyaWRnZUNBMB4XDTAzMTIyNzA1MDgxNVoXDTEz -MTIyNjE0NTk1OVowWjELMAkGA1UEBhMCSlAxDTALBgNVBAoMBEpQS0kxKTAnBgNV -BAsMIFByZWZlY3R1cmFsIEFzc29jaWF0aW9uIEZvciBKUEtJMREwDwYDVQQLDAhC -cmlkZ2VDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANTnUmg7K3m8 -52vd77kwkq156euwoWm5no8E8kmaTSc7x2RABPpqNTlMKdZ6ttsyYrqREeDkcvPL -yF7yf/I8+innasNtsytcTAy8xY8Avsbd4JkCGW9dyPjk9pzzc3yLQ64Rx2fujRn2 -agcEVdPCr/XpJygX8FD5bbhkZ0CVoiASBmlHOcC3YpFlfbT1QcpOSOb7o+VdKVEi -MMfbBuU2IlYIaSr/R1nO7RPNtkqkFWJ1/nKjKHyzZje7j70qSxb+BTGcNgTHa1YA -UrogKB+UpBftmb4ds+XlkEJ1dvwokiSbCDaWFKD+YD4B2s0bvjCbw8xuZFYGhNyR -/2D5XfN1s2MCAwEAAaOCATkwggE1MA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8E -BTADAQH/MG0GA1UdHwRmMGQwYqBgoF6kXDBaMQswCQYDVQQGEwJKUDENMAsGA1UE -CgwESlBLSTEpMCcGA1UECwwgUHJlZmVjdHVyYWwgQXNzb2NpYXRpb24gRm9yIEpQ -S0kxETAPBgNVBAsMCEJyaWRnZUNBMIGDBgNVHREEfDB6pHgwdjELMAkGA1UEBhMC -SlAxJzAlBgNVBAoMHuWFrOeahOWAi+S6uuiqjeiovOOCteODvOODk+OCuTEeMBwG -A1UECwwV6YO96YGT5bqc55yM5Y2U6K2w5LyaMR4wHAYDVQQLDBXjg5bjg6rjg4Pj -grjoqo3oqLzlsYAwHQYDVR0OBBYEFNQXMiCqQNkR2OaZmQgLtf8mR8p8MA0GCSqG -SIb3DQEBBQUAA4IBAQATjJo4reTNPC5CsvAKu1RYT8PyXFVYHbKsEpGt4GR8pDCg -HEGAiAhHSNrGh9CagZMXADvlG0gmMOnXowriQQixrtpkmx0TB8tNAlZptZWkZC+R -8TnjOkHrk2nFAEC3ezbdK0R7MR4tJLDQCnhEWbg50rf0wZ/aF8uAaVeEtHXa6W0M -Xq3dSe0XAcrLbX4zZHQTaWvdpLAIjl6DZ3SCieRMyoWUL+LXaLFdTP5WBCd+No58 -IounD9X4xxze2aeRVaiV/WnQ0OSPNS7n7YXy6xQdnaOU4KRW/Lne1EDf5IfWC/ih -bVAmhZMbcrkWWcsR6aCPG+2mV3zTD6AUzuKPal8Y ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIFtzCCA5+gAwIBAgICBQkwDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMCQk0x -GTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMTElF1b1ZhZGlzIFJv -b3QgQ0EgMjAeFw0wNjExMjQxODI3MDBaFw0zMTExMjQxODIzMzNaMEUxCzAJBgNV -BAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMRswGQYDVQQDExJRdW9W -YWRpcyBSb290IENBIDIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCa -GMpLlA0ALa8DKYrwD4HIrkwZhR0In6spRIXzL4GtMh6QRr+jhiYaHv5+HBg6XJxg -Fyo6dIMzMH1hVBHL7avg5tKifvVrbxi3Cgst/ek+7wrGsxDp3MJGF/hd/aTa/55J -WpzmM+Yklvc/ulsrHHo1wtZn/qtmUIttKGAr79dgw8eTvI02kfN/+NsRE8Scd3bB -rrcCaoF6qUWD4gXmuVbBlDePSHFjIuwXZQeVikvfj8ZaCuWw419eaxGrDPmF60Tp -+ARz8un+XJiM9XOva7R+zdRcAitMOeGylZUtQofX1bOQQ7dsE/He3fbE+Ik/0XX1 -ksOR1YqI0JDs3G3eicJlcZaLDQP9nL9bFqyS2+r+eXyt66/3FsvbzSUr5R/7mp/i -Ucw6UwxI5g69ybR2BlLmEROFcmMDBOAENisgGQLodKcftslWZvB1JdxnwQ5hYIiz -PtGo/KPaHbDRsSNU30R2be1B2MGyIrZTHN81Hdyhdyox5C315eXbyOD/5YDXC2Og -/zOhD7osFRXql7PSorW+8oyWHhqPHWykYTe5hnMz15eWniN9gqRMgeKh0bpnX5UH -oycR7hYQe7xFSkyyBNKr79X9DFHOUGoIMfmR2gyPZFwDwzqLID9ujWc9Otb+fVuI -yV77zGHcizN300QyNQliBJIWENieJ0f7OyHj+OsdWwIDAQABo4GwMIGtMA8GA1Ud -EwEB/wQFMAMBAf8wCwYDVR0PBAQDAgEGMB0GA1UdDgQWBBQahGK8SEwzJQTU7tD2 -A8QZRtGUazBuBgNVHSMEZzBlgBQahGK8SEwzJQTU7tD2A8QZRtGUa6FJpEcwRTEL -MAkGA1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMT -ElF1b1ZhZGlzIFJvb3QgQ0EgMoICBQkwDQYJKoZIhvcNAQEFBQADggIBAD4KFk2f -BluornFdLwUvZ+YTRYPENvbzwCYMDbVHZF34tHLJRqUDGCdViXh9duqWNIAXINzn -g/iN/Ae42l9NLmeyhP3ZRPx3UIHmfLTJDQtyU/h2BwdBR5YM++CCJpNVjP4iH2Bl -fF/nJrP3MpCYUNQ3cVX2kiF495V5+vgtJodmVjB3pjd4M1IQWK4/YY7yarHvGH5K -WWPKjaJW1acvvFYfzznB4vsKqBUsfU16Y8Zsl0Q80m/DShcK+JDSV6IZUaUtl0Ha -B0+pUNqQjZRG4T7wlP0QADj1O+hA4bRuVhogzG9Yje0uRY/W6ZM/57Es3zrWIozc -hLsib9D45MY56QSIPMO661V6bYCZJPVsAfv4l7CUW+v90m/xd2gNNWQjrLhVoQPR -TUIZ3Ph1WVaj+ahJefivDrkRoHy3au000LYmYjgahwz46P0u05B/B5EqHdZ+XIWD -mbA4CD/pXvk1B+TJYm5Xf6dQlfe6yJvmjqIBxdZmv3lh8zwc4bmCXF2gw+nYSL0Z -ohEUGW6yhhtoPkg3Goi3XZZenMfvJ2II4pEZXNLxId26F0KCl3GBUzGpn/Z9Yr9y -4aOTHcyKJloJONDO1w2AFrR4pTqHTI2KpdVGl/IsELm8VCLAAVBpQ570su9t+Oza -8eOx79+Rj1QqCyXBJhnEUhAFZdWCEOrCMc0u ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIGnTCCBIWgAwIBAgICBcYwDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMCQk0x -GTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMTElF1b1ZhZGlzIFJv -b3QgQ0EgMzAeFw0wNjExMjQxOTExMjNaFw0zMTExMjQxOTA2NDRaMEUxCzAJBgNV -BAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMRswGQYDVQQDExJRdW9W -YWRpcyBSb290IENBIDMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDM -V0IWVJzmmNPTTe7+7cefQzlKZbPoFog02w1ZkXTPkrgEQK0CSzGrvI2RaNggDhoB -4hp7Thdd4oq3P5kazethq8Jlph+3t723j/z9cI8LoGe+AaJZz3HmDyl2/7FWeUUr -H556VOijKTVopAFPD6QuN+8bv+OPEKhyq1hX51SGyMnzW9os2l2ObjyjPtr7guXd -8lyyBTNvijbO0BNO/79KDDRMpsMhvVAEVeuxu537RR5kFd5VAYwCdrXLoT9Cabwv -vWhDFlaJKjdhkf2mrk7AyxRllDdLkgbvBNDInIjbC3uBr7E9KsRlOni27tyAsdLT -mZw67mtaa7ONt9XOnMK+pUsvFrGeaDsGb659n/je7Mwpp5ijJUMv7/FfJuGITfhe -btfZFG4ZM2mnO4SJk8RTVROhUXhA+LjJou57ulJCg54U7QVSWllWp5f8nT8KKdjc -T5EOE7zelaTfi5m+rJsziO+1ga8bxiJTyPbH7pcUsMV8eFLI8M5ud2CEpukqdiDt -WAEXMJPpGovgc2PZapKUSU60rUqFxKMiMPwJ7Wgic6aIDFUhWMXhOp8q3crhkODZ -c6tsgLjoC2SToJyMGf+z0gzskSaHirOi4XCPLArlzW1oUevaPwV/izLmE1xr/l9A -4iLItLRkT9a6fUg+qGkM17uGcclzuD87nSVL2v9A6wIDAQABo4IBlTCCAZEwDwYD -VR0TAQH/BAUwAwEB/zCB4QYDVR0gBIHZMIHWMIHTBgkrBgEEAb5YAAMwgcUwgZMG -CCsGAQUFBwICMIGGGoGDQW55IHVzZSBvZiB0aGlzIENlcnRpZmljYXRlIGNvbnN0 -aXR1dGVzIGFjY2VwdGFuY2Ugb2YgdGhlIFF1b1ZhZGlzIFJvb3QgQ0EgMyBDZXJ0 -aWZpY2F0ZSBQb2xpY3kgLyBDZXJ0aWZpY2F0aW9uIFByYWN0aWNlIFN0YXRlbWVu -dC4wLQYIKwYBBQUHAgEWIWh0dHA6Ly93d3cucXVvdmFkaXNnbG9iYWwuY29tL2Nw -czALBgNVHQ8EBAMCAQYwHQYDVR0OBBYEFPLAE+CCQz777i9nMpY1XNu4ywLQMG4G -A1UdIwRnMGWAFPLAE+CCQz777i9nMpY1XNu4ywLQoUmkRzBFMQswCQYDVQQGEwJC -TTEZMBcGA1UEChMQUXVvVmFkaXMgTGltaXRlZDEbMBkGA1UEAxMSUXVvVmFkaXMg -Um9vdCBDQSAzggIFxjANBgkqhkiG9w0BAQUFAAOCAgEAT62gLEz6wPJv92ZVqyM0 -7ucp2sNbtrCD2dDQ4iH782CnO11gUyeim/YIIirnv6By5ZwkajGxkHon24QRiSem -d1o417+shvzuXYO8BsbRd2sPbSQvS3pspweWyuOEn62Iix2rFo1bZhfZFvSLgNLd -+LJ2w/w4E6oM3kJpK27zPOuAJ9v1pkQNn1pVWQvVDVJIxa6f8i+AxeoyUDUSly7B -4f/xI4hROJ/yZlZ25w9Rl6VSDE1JUZU2Pb+iSwwQHYaZTKrzchGT5Or2m9qoXadN -t54CrnMAyNojA+j56hl0YgCUyyIgvpSnWbWCar6ZeXqp8kokUvd0/bpO5qgdAm6x -DYBEwa7TIzdfu4V8K5Iu6H6li92Z4b8nby1dqnuH/grdS/yO9SbkbnBCbjPsMZ57 -k8HkyWkaPcBrTiJt7qtYTcbQQcEr6k8Sh17rRdhs9ZgC06DYVYoGmRmioHfRMJ6s -zHXug/WwYjnPbFfiTNKRCw51KBuav/0aQ/HKd/s7j2G4aSgWQgRecCocIdiP4b0j -Wy10QJLZYxkNc91pvGJHvOB0K7Lrfb5BG7XARsWhIstfTsEokt4YutUqKLsRixeT -mJlglFwjz1onl14LBQaTNx47aTbrqZ5hHY8y2o4M1nQ+ewkk2gF3R8Q7zTSMmfXK -4SVhM7JZG+Ju1zdXtg2pEto= ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIF0DCCBLigAwIBAgIEOrZQizANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJC -TTEZMBcGA1UEChMQUXVvVmFkaXMgTGltaXRlZDElMCMGA1UECxMcUm9vdCBDZXJ0 -aWZpY2F0aW9uIEF1dGhvcml0eTEuMCwGA1UEAxMlUXVvVmFkaXMgUm9vdCBDZXJ0 -aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wMTAzMTkxODMzMzNaFw0yMTAzMTcxODMz -MzNaMH8xCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMSUw -IwYDVQQLExxSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MS4wLAYDVQQDEyVR -dW9WYWRpcyBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG -9w0BAQEFAAOCAQ8AMIIBCgKCAQEAv2G1lVO6V/z68mcLOhrfEYBklbTRvM16z/Yp -li4kVEAkOPcahdxYTMukJ0KX0J+DisPkBgNbAKVRHnAEdOLB1Dqr1607BxgFjv2D -rOpm2RgbaIr1VxqYuvXtdj182d6UajtLF8HVj71lODqV0D1VNk7feVcxKh7YWWVJ -WCCYfqtffp/p1k3sg3Spx2zY7ilKhSoGFPlU5tPaZQeLYzcS19Dsw3sgQUSj7cug -F+FxZc4dZjH3dgEZyH0DWLaVSR2mEiboxgx24ONmy+pdpibu5cxfvWenAScOospU -xbF6lR1xHkopigPcakXBpBlebzbNw6Kwt/5cOOJSvPhEQ+aQuwIDAQABo4ICUjCC -Ak4wPQYIKwYBBQUHAQEEMTAvMC0GCCsGAQUFBzABhiFodHRwczovL29jc3AucXVv -dmFkaXNvZmZzaG9yZS5jb20wDwYDVR0TAQH/BAUwAwEB/zCCARoGA1UdIASCAREw -ggENMIIBCQYJKwYBBAG+WAABMIH7MIHUBggrBgEFBQcCAjCBxxqBxFJlbGlhbmNl -IG9uIHRoZSBRdW9WYWRpcyBSb290IENlcnRpZmljYXRlIGJ5IGFueSBwYXJ0eSBh -c3N1bWVzIGFjY2VwdGFuY2Ugb2YgdGhlIHRoZW4gYXBwbGljYWJsZSBzdGFuZGFy -ZCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB1c2UsIGNlcnRpZmljYXRpb24gcHJh -Y3RpY2VzLCBhbmQgdGhlIFF1b1ZhZGlzIENlcnRpZmljYXRlIFBvbGljeS4wIgYI -KwYBBQUHAgEWFmh0dHA6Ly93d3cucXVvdmFkaXMuYm0wHQYDVR0OBBYEFItLbe3T -KbkGGew5Oanwl4Rqy+/fMIGuBgNVHSMEgaYwgaOAFItLbe3TKbkGGew5Oanwl4Rq -y+/foYGEpIGBMH8xCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1p -dGVkMSUwIwYDVQQLExxSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MS4wLAYD -VQQDEyVRdW9WYWRpcyBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggQ6tlCL -MA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOCAQEAitQUtf70mpKnGdSk -fnIYj9lofFIk3WdvOXrEql494liwTXCYhGHoG+NpGA7O+0dQoE7/8CQfvbLO9Sf8 -7C9TqnN7Az10buYWnuulLsS/VidQK2K6vkscPFVcQR0kvoIgR13VRH56FmjffU1R -cHhXHTMe/QKZnAzNCgVPx7uOpHX6Sm2xgI4JVrmcGmD+XcHXetwReNDWXcG31a0y -mQM6isxUJTkxgXsTIlG6Rmyhu576BGxJJnSP0nPrzDCi5upZIof4l/UO/erMkqQW -xFIY6iHOsfHmhIHluqmGKPJDWl0Snawe2ajlCmqnf6CHKc/yiU3U7MXi5nrQNiOK -SnQ2+Q== ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIICXDCCAcWgAwIBAgIQCgEBAQAAAnwAAAALAAAAAjANBgkqhkiG9w0BAQUFADA6 -MRkwFwYDVQQKExBSU0EgU2VjdXJpdHkgSW5jMR0wGwYDVQQLExRSU0EgU2VjdXJp -dHkgMTAyNCBWMzAeFw0wMTAyMjIyMTAxNDlaFw0yNjAyMjIyMDAxNDlaMDoxGTAX -BgNVBAoTEFJTQSBTZWN1cml0eSBJbmMxHTAbBgNVBAsTFFJTQSBTZWN1cml0eSAx -MDI0IFYzMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDV3f5mCc8kPD6ugU5O -isRpgFtZO9+5TUzKtS3DJy08rwBCbbwoppbPf9dYrIMKo1W1exeQFYRMiu4mmdxY -78c4pqqv0I5CyGLXq6yp+0p9v+r+Ek3d/yYtbzZUaMjShFbuklNhCbM/OZuoyZu9 -zp9+1BlqFikYvtc6adwlWzMaUQIDAQABo2MwYTAPBgNVHRMBAf8EBTADAQH/MA4G -A1UdDwEB/wQEAwIBBjAfBgNVHSMEGDAWgBTEwBykB5T9zU0B1FTapQxf3q4FWjAd -BgNVHQ4EFgQUxMAcpAeU/c1NAdRU2qUMX96uBVowDQYJKoZIhvcNAQEFBQADgYEA -Py1q4yZDlX2Jl2X7deRyHUZXxGFraZ8SmyzVWujAovBDleMf6XbN3Ou8k6BlCsdN -T1+nr6JGFLkM88y9am63nd4lQtBU/55oc2PcJOsiv6hy8l4A4Q1OOkNumU4/iXgD -mMrzVcydro7BqkWY+o8aoI2II/EVQQ2lRj6RP4vr93E= ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIDYTCCAkmgAwIBAgIQCgEBAQAAAnwAAAAKAAAAAjANBgkqhkiG9w0BAQUFADA6 -MRkwFwYDVQQKExBSU0EgU2VjdXJpdHkgSW5jMR0wGwYDVQQLExRSU0EgU2VjdXJp -dHkgMjA0OCBWMzAeFw0wMTAyMjIyMDM5MjNaFw0yNjAyMjIyMDM5MjNaMDoxGTAX -BgNVBAoTEFJTQSBTZWN1cml0eSBJbmMxHTAbBgNVBAsTFFJTQSBTZWN1cml0eSAy -MDQ4IFYzMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAt49VcdKA3Xtp -eafwGFAyPGJn9gqVB93mG/Oe2dJBVGutn3y+Gc37RqtBaB4Y6lXIL5F4iSj7Jylg -/9+PjDvJSZu1pJTOAeo+tWN7fyb9Gd3AIb2E0S1PRsNO3Ng3OTsor8udGuorryGl -wSMiuLgbWhOHV4PR8CDn6E8jQrAApX2J6elhc5SYcSa8LWrg903w8bYqODGBDSnh -AMFRD0xS+ARaqn1y07iHKrtjEAMqs6FPDVpeRrc9DvV07Jmf+T0kgYim3WBU6JU2 -PcYJk5qjEoAAVZkZR73QpXzDuvsf9/UP+Ky5tfQ3mBMY3oVbtwyCO4dvlTlYMNpu -AWgXIszACwIDAQABo2MwYTAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIB -BjAfBgNVHSMEGDAWgBQHw1EwpKrpRa41JPr/JCwz0LGdjDAdBgNVHQ4EFgQUB8NR -MKSq6UWuNST6/yQsM9CxnYwwDQYJKoZIhvcNAQEFBQADggEBAF8+hnZuuDU8TjYc -HnmYv/3VEhF5Ug7uMYm83X/50cYVIeiKAVQNOvtUudZj1LGqlk2iQk3UUx+LEN5/ -Zb5gEydxiKRz44Rj0aRV4VCT5hsOedBnvEbIvz8XDZXmxpBp3ue0L96VfdASPz0+ -f00/FGj1EVDVwfSQpQgdMWD/YIwjVAqv/qFuxdF6Kmh4zx6CCiC0H63lhbJqaHVO -rSU3lIW+vaHU6rcMSzyd6BIA8F+sDeGscGNz9395nzIlQnQFgCi/vcEkllgVsRch -6YlL2weIZ/QVrXA+L02FO8K32/6YaCOJ4XQP3vTFhGMpG8zLB8kApKnXwiJPZ9d3 -7CAFYd4= ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIEPzCCAyegAwIBAgIBATANBgkqhkiG9w0BAQUFADB+MQswCQYDVQQGEwJHQjEb -MBkGA1UECAwSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRow -GAYDVQQKDBFDb21vZG8gQ0EgTGltaXRlZDEkMCIGA1UEAwwbU2VjdXJlIENlcnRp -ZmljYXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAwMDAwMFoXDTI4MTIzMTIzNTk1OVow -fjELMAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4G -A1UEBwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENBIExpbWl0ZWQxJDAiBgNV -BAMMG1NlY3VyZSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCCASIwDQYJKoZIhvcNAQEB -BQADggEPADCCAQoCggEBAMBxM4KK0HDrc4eCQNUd5MvJDkKQ+d40uaG6EfQlhfPM -cm3ye5drswfxdySRXyWP9nQ95IDC+DwN879A6vfIUtFyb+/Iq0G4bi4XKpVpDM3S -HpR7LZQdqnXXs5jLrLxkU0C8j6ysNstcrbvd4JQX7NFc0L/vpZXJkMWwrPsbQ996 -CF23uPJAGysnnlDOXmWCiIxe004MeuoIkbY2qitC++rCoznl2yY4rYsK7hljxxwk -3wN42ubqwUcaCwtGCd0C/N7Lh1/XMGNooa7cMqG6vv5Eq2i2pRcV/b3Vp6ea5EQz -6YiO/O1R65NxTq0B50SOqy3LqP4BSUjwwN3HaNiS/j0CAwEAAaOBxzCBxDAdBgNV -HQ4EFgQUPNiTiMLAggnMAZkGkyDpnnAJY08wDgYDVR0PAQH/BAQDAgEGMA8GA1Ud -EwEB/wQFMAMBAf8wgYEGA1UdHwR6MHgwO6A5oDeGNWh0dHA6Ly9jcmwuY29tb2Rv -Y2EuY29tL1NlY3VyZUNlcnRpZmljYXRlU2VydmljZXMuY3JsMDmgN6A1hjNodHRw -Oi8vY3JsLmNvbW9kby5uZXQvU2VjdXJlQ2VydGlmaWNhdGVTZXJ2aWNlcy5jcmww -DQYJKoZIhvcNAQEFBQADggEBAIcBbSMdflsXfcFhMs+P5/OKlFlm4J4oqF7Tt/Q0 -5qo5spcWxYJvMqTpjOev/e/C6LlLqqP05tqNZSH7uoDrJiiFGv45jN5bBAS0VPmj -Z55B+glSzAVIqMk/IQQezkhr/IXownuvf7fM+F86/TXGDe+X3EyrEeFryzHRbPtI -gKvcnDe4IRRLDXE97IMzbtFuMhbsmMcWi1mmNKsFVy2T96oTy9IT4rcuO81rUBcJ -aD61JlfutuC23bkpgHl9j6PwpCikFcSF9CfUa7/lXORlAnZUtOM3ZiTTGWHIUhDl -izeauan5Hb/qmZJhlv8BzaFfDbxxvA6sCx1HRR3B7Hzs/Sk= ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIDvDCCAqSgAwIBAgIQB1YipOjUiolN9BPI8PjqpTANBgkqhkiG9w0BAQUFADBK -MQswCQYDVQQGEwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24x -GTAXBgNVBAMTEFNlY3VyZSBHbG9iYWwgQ0EwHhcNMDYxMTA3MTk0MjI4WhcNMjkx -MjMxMTk1MjA2WjBKMQswCQYDVQQGEwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3Qg -Q29ycG9yYXRpb24xGTAXBgNVBAMTEFNlY3VyZSBHbG9iYWwgQ0EwggEiMA0GCSqG -SIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvNS7YrGxVaQZx5RNoJLNP2MwhR/jxYDiJ -iQPpvepeRlMJ3Fz1Wuj3RSoC6zFh1ykzTM7HfAo3fg+6MpjhHZevj8fcyTiW89sa -/FHtaMbQbqR8JNGuQsiWUGMu4P51/pinX0kuleM5M2SOHqRfkNJnPLLZ/kG5VacJ -jnIFHovdRIWCQtBJwB1g8NEXLJXr9qXBkqPFwqcIYA1gBBCWeZ4WNOaptvolRTnI -HmX5k/Wq8VLcmZg9pYYaDDUz+kulBAYVHDGA76oYa8J719rO+TMg1fW9ajMtgQT7 -sFzUnKPiXB3jqUJ1XnvUd+85VLrJChgbEplJL4hL/VBi0XPnj3pDAgMBAAGjgZ0w -gZowEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0PBAQDAgGGMA8GA1UdEwEB/wQF -MAMBAf8wHQYDVR0OBBYEFK9EBMJBfkiD2045AuzshHrmzsmkMDQGA1UdHwQtMCsw -KaAnoCWGI2h0dHA6Ly9jcmwuc2VjdXJldHJ1c3QuY29tL1NHQ0EuY3JsMBAGCSsG -AQQBgjcVAQQDAgEAMA0GCSqGSIb3DQEBBQUAA4IBAQBjGghAfaReUw132HquHw0L -URYD7xh8yOOvaliTFGCRsoTciE6+OYo68+aCiV0BN7OrJKQVDpI1WkpEXk5X+nXO -H0jOZvQ8QCaSmGwb7iRGDBezUqXbpZGRzzfTb+cnCDpOGR86p1hcF895P4vkp9Mm -I50mD1hp/Ed+stCNi5O/KU9DaXR2Z0vPB4zmAve14bRDtUstFJ/53CYNv6ZHdAbY -iNE6KTCEztI5gGIbqMdXSbxqVVFnFUq+NQfk1XWYN3kwFNspnWzFacxHVaIw98xc -f8LDmBxrThaA63p4ZUWiABqvDA1VZDRIuJK58bRQKfJPIx/abKwfROHdI3hRW8cW ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIICNDCCAaECEAKtZn5ORf5eV288mBle3cAwDQYJKoZIhvcNAQECBQAwXzELMAkG -A1UEBhMCVVMxIDAeBgNVBAoTF1JTQSBEYXRhIFNlY3VyaXR5LCBJbmMuMS4wLAYD -VQQLEyVTZWN1cmUgU2VydmVyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk0 -MTEwOTAwMDAwMFoXDTEwMDEwNzIzNTk1OVowXzELMAkGA1UEBhMCVVMxIDAeBgNV -BAoTF1JTQSBEYXRhIFNlY3VyaXR5LCBJbmMuMS4wLAYDVQQLEyVTZWN1cmUgU2Vy -dmVyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGbMA0GCSqGSIb3DQEBAQUAA4GJ -ADCBhQJ+AJLOesGugz5aqomDV6wlAXYMra6OLDfO6zV4ZFQD5YRAUcm/jwjiioII -0haGN1XpsSECrXZogZoFokvJSyVmIlZsiAeP94FZbYQHZXATcXY+m3dM41CJVphI -uR2nKRoTLkoRWZweFdVJVCxzOmmCsZc5nG1wZ0jl3S3WyB57AgMBAAEwDQYJKoZI -hvcNAQECBQADfgBl3X7hsuyw4jrg7HFGmhkRuNPHoLQDQCYCPgmc4RKz0Vr2N6W3 -YQO2WxZpO8ZECAyIUwxrl0nHPjXcbLm7qt9cuzovk2C2qUtN8iD3zV9/ZHuO3ABc -1/p3yjkWWW8O6tO1g39NTUJWdrTJXwT4OPjr0l91X817/OWOgHz8UA== ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIDuDCCAqCgAwIBAgIQDPCOXAgWpa1Cf/DrJxhZ0DANBgkqhkiG9w0BAQUFADBI -MQswCQYDVQQGEwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24x -FzAVBgNVBAMTDlNlY3VyZVRydXN0IENBMB4XDTA2MTEwNzE5MzExOFoXDTI5MTIz -MTE5NDA1NVowSDELMAkGA1UEBhMCVVMxIDAeBgNVBAoTF1NlY3VyZVRydXN0IENv -cnBvcmF0aW9uMRcwFQYDVQQDEw5TZWN1cmVUcnVzdCBDQTCCASIwDQYJKoZIhvcN -AQEBBQADggEPADCCAQoCggEBAKukgeWVzfX2FI7CT8rU4niVWJxB4Q2ZQCQXOZEz -Zum+4YOvYlyJ0fwkW2Gz4BERQRwdbvC4u/jep4G6pkjGnx29vo6pQT64lO0pGtSO -0gMdA+9tDWccV9cGrcrI9f4Or2YlSASWC12juhbDCE/RRvgUXPLIXgGZbf2IzIao -wW8xQmxSPmjL8xk037uHGFaAJsTQ3MBv396gwpEWoGQRS0S8Hvbn+mPeZqx2pHGj -7DaUaHp3pLHnDi+BeuK1cobvomuL8A/b01k/unK8RCSc43Oz969XL0Imnal0ugBS -8kvNU3xHCzaFDmapCJcWNFfBZveA4+1wVMeT4C4oFVmHursCAwEAAaOBnTCBmjAT -BgkrBgEEAYI3FAIEBh4EAEMAQTALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB -/zAdBgNVHQ4EFgQUQjK2FvoE/f5dS3rD/fdMQB1aQ68wNAYDVR0fBC0wKzApoCeg -JYYjaHR0cDovL2NybC5zZWN1cmV0cnVzdC5jb20vU1RDQS5jcmwwEAYJKwYBBAGC -NxUBBAMCAQAwDQYJKoZIhvcNAQEFBQADggEBADDtT0rhWDpSclu1pqNlGKa7UTt3 -6Z3q059c4EVlew3KW+JwULKUBRSuSceNQQcSc5R+DCMh/bwQf2AQWnL1mA6s7Ll/ -3XpvXdMc9P+IBWlCqQVxyLesJugutIxq/3HcuLHfmbx8IVQr5Fiiu1cprp6poxkm -D5kuCLDv/WnPmRoJjeOnnyvJNjR7JLN4TJUXpAYmHrZkUjZfYGfZnMUFdAvnZyPS -CPyI6a6Lf+Ew9Dd+/cYy2i2eRDAwbO4H3tI0/NL/QPZL9GZGBlSm8jIKYyYwa5vR -3ItHuuG51WLQoqD0ZwV4KWMabwTW+MZMo5qxN7SN5ShLHZ4swrhovO0C7jE= ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIDWjCCAkKgAwIBAgIBADANBgkqhkiG9w0BAQUFADBQMQswCQYDVQQGEwJKUDEY -MBYGA1UEChMPU0VDT00gVHJ1c3QubmV0MScwJQYDVQQLEx5TZWN1cml0eSBDb21t -dW5pY2F0aW9uIFJvb3RDQTEwHhcNMDMwOTMwMDQyMDQ5WhcNMjMwOTMwMDQyMDQ5 -WjBQMQswCQYDVQQGEwJKUDEYMBYGA1UEChMPU0VDT00gVHJ1c3QubmV0MScwJQYD -VQQLEx5TZWN1cml0eSBDb21tdW5pY2F0aW9uIFJvb3RDQTEwggEiMA0GCSqGSIb3 -DQEBAQUAA4IBDwAwggEKAoIBAQCzs/5/022x7xZ8V6UMbXaKL0u/ZPtM7orw8yl8 -9f/uKuDp6bpbZCKamm8sOiZpUQWZJtzVHGpxxpp9Hp3dfGzGjGdnSj74cbAZJ6kJ -DKaVv0uMDPpVmDvY6CKhS3E4eayXkmmziX7qIWgGmBSWh9JhNrxtJ1aeV+7AwFb9 -Ms+k2Y7CI9eNqPPYJayX5HA49LY6tJ07lyZDo6G8SVlyTCMwhwFY9k6+HGhWZq/N -QV3Is00qVUarH9oe4kA92819uZKAnDfdDJZkndwi92SL32HeFZRSFaB9UslLqCHJ -xrHty8OVYNEP8Ktw+N/LTX7s1vqr2b1/VPKl6Xn62dZ2JChzAgMBAAGjPzA9MB0G -A1UdDgQWBBSgc0mZaNyFW2XjmygvV5+9M7wHSDALBgNVHQ8EBAMCAQYwDwYDVR0T -AQH/BAUwAwEB/zANBgkqhkiG9w0BAQUFAAOCAQEAaECpqLvkT115swW1F7NgE+vG -kl3g0dNq/vu+m22/xwVtWSDEHPC32oRYAmP6SBbvT6UL90qY8j+eG61Ha2POCEfr -Uj94nK9NrvjVT8+amCoQQTlSxN3Zmw7vkwGusi7KaEIkQmywszo+zenaSMQVy+n5 -Bw+SUEmK3TGXX8npN6o7WWWXlDLJs58+OmJYxUmtYg5xpTKqL8aJdkNAExNnPaJU -JRDL8Try2frbSVa7pv6nQTXD4IhhyYjH3zYQIphZ6rBK+1YWc26sTfcioU+tHXot -RSflMMFe8toTyyVCUZVHA4xsIcx0Qu1T/zOLjw9XARYvz6buyXAiFL39vmwLAw== ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIID+zCCAuOgAwIBAgIENuWNnjANBgkqhkiG9w0BAQUFADCBtDELMAkGA1UEBhMC -VVkxKzApBgNVBAoTIkFETUlOSVNUUkFDSU9OIE5BQ0lPTkFMIERFIENPUlJFT1Mx -HzAdBgNVBAsTFlNFUlZJQ0lPUyBFTEVDVFJPTklDT1MxLDAqBgNVBAMTI1NFUlZJ -Q0lPUyBERSBDRVJUSUZJQ0FDSU9OIC0gQS5OLkMuMSkwJwYKCZImiZPyLGQBAxQZ -Y29ycmVvX2NlcnRAY29ycmVvLmNvbS51eTAeFw05OTAzMDkyMTA4MDdaFw0wOTAz -MDkyMTA4MDdaMIG0MQswCQYDVQQGEwJVWTErMCkGA1UEChMiQURNSU5JU1RSQUNJ -T04gTkFDSU9OQUwgREUgQ09SUkVPUzEfMB0GA1UECxMWU0VSVklDSU9TIEVMRUNU -Uk9OSUNPUzEsMCoGA1UEAxMjU0VSVklDSU9TIERFIENFUlRJRklDQUNJT04gLSBB -Lk4uQy4xKTAnBgoJkiaJk/IsZAEDFBljb3JyZW9fY2VydEBjb3JyZW8uY29tLnV5 -MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsiov7CtZakOTiUYqiuXs -+gX64sjeQWuvA9sAWu9IN89XifvdyZIQ3ncDlRyQPse2ZyU7VZjv2Tz+JuSKO0Sp -dDeDCncndLipca3dlxPSyqIuuLqdyb5Z6Nly8oqFZhxHXrSHgtYP32cmpr02sfNd -kFBRdjIsOy+qX2Fe41TVEl3/DY0Rx4J6Nt/hTBbEdN0tau/QsfAzp/6/N2dDEi55 -SpSvhPsHEQhOMJN16QFUzsXeFIbwrq6bciUPRHfi82yveZwuSceemHYyFpq8AN7g -tCAFkRfdgBUU7jZBxCGP7tkAShnGcWGlEV0AO+SndGw6Sm6D4HoxXCFl+AiHQodn -5QIDAQABoxMwETAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBBQUAA4IBAQCZ -H0kiXPhlf4NukGYvAs+09lY6Zjaht5INNsNFWDZL5szxWsxzMp6aqK7Tduvv/oAs -4xA0skefHCVq6ES1j0y+gfPQwMELzQMWoEJVVk7B47QgrV+btlVfSBAS7ySzVnzM -BRuyySqpaBGSfi/pP0Tx0MaQG0vd92Ei7GmGFUCz4qVqd/Oz8lQn2kkqZBn0Od58 -dobZnHJXCjT19S/QOWgb20WlGOOAVDuTEJAUwhQBqqV2LX0P5Fbz/3Mqb47B2ID7 -u5AdGxpJnARjxEId82+7s0lK3UftSboCLSqMxwNWueJo0MGwhrWMSzqujRyIhEz9 -UK+ZJnYIwoCtKHlV0y3m ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIDIDCCAgigAwIBAgIBJDANBgkqhkiG9w0BAQUFADA5MQswCQYDVQQGEwJGSTEP -MA0GA1UEChMGU29uZXJhMRkwFwYDVQQDExBTb25lcmEgQ2xhc3MxIENBMB4XDTAx -MDQwNjEwNDkxM1oXDTIxMDQwNjEwNDkxM1owOTELMAkGA1UEBhMCRkkxDzANBgNV -BAoTBlNvbmVyYTEZMBcGA1UEAxMQU29uZXJhIENsYXNzMSBDQTCCASIwDQYJKoZI -hvcNAQEBBQADggEPADCCAQoCggEBALWJHytPZwp5/8Ue+H887dF+2rDNbS82rDTG -29lkFwhjMDMiikzujrsPDUJVyZ0upe/3p4zDq7mXy47vPxVnqIJyY1MPQYx9EJUk -oVqlBvqSV536pQHydekfvFYmUk54GWVYVQNYwBSujHxVX3BbdyMGNpfzJLWaRpXk -3w0LBUXl0fIdgrvGE+D+qnr9aTCU89JFhfzyMlsy3uhsXR/LpCJ0sICOXZT3BgBL -qdReLjVQCfOAl/QMF6452F/NM8EcyonCIvdFEu1eEpOdY6uCLrnrQkFEy0oaAIIN -nvmLVz5MxxftLItyM19yejhW1ebZrgUaHXVFsculJRwSVzb9IjcCAwEAAaMzMDEw -DwYDVR0TAQH/BAUwAwEB/zARBgNVHQ4ECgQIR+IMi/ZTiFIwCwYDVR0PBAQDAgEG -MA0GCSqGSIb3DQEBBQUAA4IBAQCLGrLJXWG04bkruVPRsoWdd44W7hE928Jj2VuX -ZfsSZ9gqXLar5V7DtxYvyOirHYr9qxp81V9jz9yw3Xe5qObSIjiHBxTZ/75Wtf0H -DjxVyhbMp6Z3N/vbXB9OWQaHowND9Rart4S9Tu+fMTfwRvFAttEMpWT4Y14h21VO -TzF2nBBhjrZTOqMRvq9tfB69ri3iDGnHhVNoomG6xT60eVR4ngrHAr5i0RGCS2Uv -kVrCqIexVmiUefkl98HVrhq4uz2PqYo4Ffdz0Fpg0YCw8NzVUM1O7pJIae2yIx4w -zMiUyLb1O4Z/P6Yun/Y+LLWSlj7fLJOK/4GMDw9ZIRlXvVWa ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIDIDCCAgigAwIBAgIBHTANBgkqhkiG9w0BAQUFADA5MQswCQYDVQQGEwJGSTEP -MA0GA1UEChMGU29uZXJhMRkwFwYDVQQDExBTb25lcmEgQ2xhc3MyIENBMB4XDTAx -MDQwNjA3Mjk0MFoXDTIxMDQwNjA3Mjk0MFowOTELMAkGA1UEBhMCRkkxDzANBgNV -BAoTBlNvbmVyYTEZMBcGA1UEAxMQU29uZXJhIENsYXNzMiBDQTCCASIwDQYJKoZI -hvcNAQEBBQADggEPADCCAQoCggEBAJAXSjWdyvANlsdE+hY3/Ei9vX+ALTU74W+o -Z6m/AxxNjG8yR9VBaKQTBME1DJqEQ/xcHf+Js+gXGM2RX/uJ4+q/Tl18GybTdXnt -5oTjV+WtKcT0OijnpXuENmmz/V52vaMtmdOQTiMofRhj8VQ7Jp12W5dCsv+u8E7s -3TmVToMGf+dJQMjFAbJUWmYdPfz56TwKnoG4cPABi+QjVHzIrviQHgCWctRUz2Ej -vOr7nQKV0ba5cTppCD8PtOFCx4j1P5iop7oc4HFx71hXgVB6XGt0Rg6DA5jDjqhu -8nYybieDwnPz3BjotJPqdURrBGAgcVeHnfO+oJAjPYok4doh28MCAwEAAaMzMDEw -DwYDVR0TAQH/BAUwAwEB/zARBgNVHQ4ECgQISqCqWITTXjwwCwYDVR0PBAQDAgEG -MA0GCSqGSIb3DQEBBQUAA4IBAQBazof5FnIVV0sd2ZvnoiYw7JNn39Yt0jSv9zil -zqsWuasvfDXLrNAPtEwr/IDva4yRXzZ299uzGxnq9LIR/WFxRL8oszodv7ND6J+/ -3DEIcbCdjdY0RzKQxmUk96BKfARzjzlvF4xytb1LyHr4e4PDKE6cCepnP7JnBBvD -FNr450kkkdAdavphOe9r5yF1BgfYErQhIHBCcYHaPJo2vqZbDWpsmh+Re/n570K6 -Tk6ezAyNlNzZRZxe7EJQY670XcSxEtzKO6gunRRaBXW37Ndj4ro1tgQIkejanZz2 -ZrUYrAqmVCY0M9IbwdR/GjqOC6oybtv8TyWf2TLHllpwrN9M ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIDujCCAqKgAwIBAgIEAJiWijANBgkqhkiG9w0BAQUFADBVMQswCQYDVQQGEwJO -TDEeMBwGA1UEChMVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSYwJAYDVQQDEx1TdGFh -dCBkZXIgTmVkZXJsYW5kZW4gUm9vdCBDQTAeFw0wMjEyMTcwOTIzNDlaFw0xNTEy -MTYwOTE1MzhaMFUxCzAJBgNVBAYTAk5MMR4wHAYDVQQKExVTdGFhdCBkZXIgTmVk -ZXJsYW5kZW4xJjAkBgNVBAMTHVN0YWF0IGRlciBOZWRlcmxhbmRlbiBSb290IENB -MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAmNK1URF6gaYUmHFtvszn -ExvWJw56s2oYHLZhWtVhCb/ekBPHZ+7d89rFDBKeNVU+LCeIQGv33N0iYfXCxw71 -9tV2U02PjLwYdjeFnejKScfST5gTCaI+Ioicf9byEGW07l8Y1Rfj+MX94p2i71MO -hXeiD+EwR+4A5zN9RGcaC1Hoi6CeUJhoNFIfLm0B8mBF8jHrqTFoKbt6QZ7GGX+U -tFE5A3+y3qcym7RHjm+0Sq7lr7HcsBthvJly3uSJt3omXdozSVtSnA71iq3DuD3o -BmrC1SoLbHuEvVYFy4ZlkuxEK7COudxwC0barbxjiDn622r+I/q85Ej0ZytqERAh -SQIDAQABo4GRMIGOMAwGA1UdEwQFMAMBAf8wTwYDVR0gBEgwRjBEBgRVHSAAMDww -OgYIKwYBBQUHAgEWLmh0dHA6Ly93d3cucGtpb3ZlcmhlaWQubmwvcG9saWNpZXMv -cm9vdC1wb2xpY3kwDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBSofeu8Y6R0E3QA -7Jbg0zTBLL9s+DANBgkqhkiG9w0BAQUFAAOCAQEABYSHVXQ2YcG70dTGFagTtJ+k -/rvuFbQvBgwp8qiSpGEN/KtcCFtREytNwiphyPgJWPwtArI5fZlmgb9uXJVFIGzm -eafR2Bwp/MIgJ1HI8XxdNGdphREwxgDS1/PTfLbwMVcoEoJz6TMvplW0C5GUR5z6 -u3pCMuiufi3IvKwUv9kP2Vv8wfl6leF9fpb8cbDCTMjfRTTJzg3ynGQI0DvDKcWy -7ZAEwbEpkcUwb8GpcjPM/l0WFywRaed+/sWDCN+83CI6LiBpIzlWYGeQiy52OfsR -iJf2fL1LuCAWZwWN4jvBcj+UlTfHXbme2JOhF4//DGYVwSR8MnwDHTuhWEUykw== ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIFyjCCA7KgAwIBAgIEAJiWjDANBgkqhkiG9w0BAQsFADBaMQswCQYDVQQGEwJO -TDEeMBwGA1UECgwVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSswKQYDVQQDDCJTdGFh -dCBkZXIgTmVkZXJsYW5kZW4gUm9vdCBDQSAtIEcyMB4XDTA4MDMyNjExMTgxN1oX -DTIwMDMyNTExMDMxMFowWjELMAkGA1UEBhMCTkwxHjAcBgNVBAoMFVN0YWF0IGRl -ciBOZWRlcmxhbmRlbjErMCkGA1UEAwwiU3RhYXQgZGVyIE5lZGVybGFuZGVuIFJv -b3QgQ0EgLSBHMjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMVZ5291 -qj5LnLW4rJ4L5PnZyqtdj7U5EILXr1HgO+EASGrP2uEGQxGZqhQlEq0i6ABtQ8Sp -uOUfiUtnvWFI7/3S4GCI5bkYYCjDdyutsDeqN95kWSpGV+RLufg3fNU254DBtvPU -Z5uW6M7XxgpT0GtJlvOjCwV3SPcl5XCsMBQgJeN/dVrlSPhOewMHBPqCYYdu8DvE -pMfQ9XQ+pV0aCPKbJdL2rAQmPlU6Yiile7Iwr/g3wtG61jj99O9JMDeZJiFIhQGp -5Rbn3JBV3w/oOM2ZNyFPXfUib2rFEhZgF1XyZWampzCROME4HYYEhLoaJXhena/M -UGDWE4dS7WMfbWV9whUYdMrhfmQpjHLYFhN9C0lK8SgbIHRrxT3dsKpICT0ugpTN -GmXZK4iambwYfp/ufWZ8Pr2UuIHOzZgweMFvZ9C+X+Bo7d7iscksWXiSqt8rYGPy -5V6548r6f1CGPqI0GAwJaCgRHOThuVw+R7oyPxjMW4T182t0xHJ04eOLoEq9jWYv -6q012iDTiIJh8BIitrzQ1aTsr1SIJSQ8p22xcik/Plemf1WvbibG/ufMQFxRRIEK -eN5KzlW/HdXZt1bv8Hb/C3m1r737qWmRRpdogBQ2HbN/uymYNqUg+oJgYjOk7Na6 -B6duxc8UpufWkjTYgfX8HV2qXB72o007uPc5AgMBAAGjgZcwgZQwDwYDVR0TAQH/ -BAUwAwEB/zBSBgNVHSAESzBJMEcGBFUdIAAwPzA9BggrBgEFBQcCARYxaHR0cDov -L3d3dy5wa2lvdmVyaGVpZC5ubC9wb2xpY2llcy9yb290LXBvbGljeS1HMjAOBgNV -HQ8BAf8EBAMCAQYwHQYDVR0OBBYEFJFoMocVHYnitfGsNig0jQt8YojrMA0GCSqG -SIb3DQEBCwUAA4ICAQCoQUpnKpKBglBu4dfYszk78wIVCVBR7y29JHuIhjv5tLyS -CZa59sCrI2AGeYwRTlHSeYAz+51IvuxBQ4EffkdAHOV6CMqqi3WtFMTC6GY8ggen -5ieCWxjmD27ZUD6KQhgpxrRW/FYQoAUXvQwjf/ST7ZwaUb7dRUG/kSS0H4zpX897 -IZmflZ85OkYcbPnNe5yQzSipx6lVu6xiNGI1E0sUOlWDuYaNkqbG9AclVMwWVxJK -gnjIFNkXgiYtXSAfea7+1HAWFpWD2DU5/1JddRwWxRNVz0fMdWVSSt7wsKfkCpYL -+63C4iWEst3kvX5ZbJvw8NjnyvLplzh+ib7M+zkXYT9y2zqR2GUBGR2tUKRXCnxL -vJxxcypFURmFzI79R6d0lR2o0a9OF7FpJsKqeFdbxU2n5Z4FF5TKsl+gSRiNNOkm -bEgeqmiSBeGCc1qb3AdbCG19ndeNIdn8FCCqwkXfP+cAslHkwvgFuXkajDTznlvk -N1trSt8sV4pAWja63XVECDdCcAz+3F4hoKOKwJCcaNpQ5kUQR3i2TtJlycM33+FC -Y7BXN0Ute4qcvwXqZVUz9zkQxSgqIXobisQk+T8VyJoVIPVVYpbtbZNQvOSqeK3Z -ywplh6ZmwcSBo3c6WB4L7oOLnR7SUqTMHW+wmG2UMbX4cQrcufx9MmDm66+KAQ== ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIEDzCCAvegAwIBAgIBADANBgkqhkiG9w0BAQUFADBoMQswCQYDVQQGEwJVUzEl -MCMGA1UEChMcU3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAGA1UECxMp -U3RhcmZpZWxkIENsYXNzIDIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDQw -NjI5MTczOTE2WhcNMzQwNjI5MTczOTE2WjBoMQswCQYDVQQGEwJVUzElMCMGA1UE -ChMcU3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAGA1UECxMpU3RhcmZp -ZWxkIENsYXNzIDIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggEgMA0GCSqGSIb3 -DQEBAQUAA4IBDQAwggEIAoIBAQC3Msj+6XGmBIWtDBFk385N78gDGIc/oav7PKaf -8MOh2tTYbitTkPskpD6E8J7oX+zlJ0T1KKY/e97gKvDIr1MvnsoFAZMej2YcOadN -+lq2cwQlZut3f+dZxkqZJRRU6ybH838Z1TBwj6+wRir/resp7defqgSHo9T5iaU0 -X9tDkYI22WY8sbi5gv2cOj4QyDvvBmVmepsZGD3/cVE8MC5fvj13c7JdBmzDI1aa -K4UmkhynArPkPw2vCHmCuDY96pzTNbO8acr1zJ3o/WSNF4Azbl5KXZnJHoe0nRrA -1W4TNSNe35tfPe/W93bC6j67eA0cQmdrBNj41tpvi/JEoAGrAgEDo4HFMIHCMB0G -A1UdDgQWBBS/X7fRzt0fhvRbVazc1xDCDqmI5zCBkgYDVR0jBIGKMIGHgBS/X7fR -zt0fhvRbVazc1xDCDqmI56FspGowaDELMAkGA1UEBhMCVVMxJTAjBgNVBAoTHFN0 -YXJmaWVsZCBUZWNobm9sb2dpZXMsIEluYy4xMjAwBgNVBAsTKVN0YXJmaWVsZCBD -bGFzcyAyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggEAMAwGA1UdEwQFMAMBAf8w -DQYJKoZIhvcNAQEFBQADggEBAAWdP4id0ckaVaGsafPzWdqbAYcaT1epoXkJKtv3 -L7IezMdeatiDh6GX70k1PncGQVhiv45YuApnP+yz3SFmH8lU+nLMPUxA2IGvd56D -eruix/U0F47ZEUD0/CwqTRV/p2JdLiXTAAsgGh1o+Re49L2L7ShZ3U0WixeDyLJl -xy16paq8U4Zt3VekyvggQQto8PT7dL5WXXp59fkdheMtlb71cZBDzI0fmgAKhynp -VSJYACPq4xJDKVtHCN2MQWplBqjlIapBtJUhlbl90TSrE9atvNziPTnNvT51cKEY -WQPJIrSPnNVeKtelttQKbfi3QBFGmh95DmK/D5fs4C8fF5Q= ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIHyTCCBbGgAwIBAgIBATANBgkqhkiG9w0BAQUFADB9MQswCQYDVQQGEwJJTDEW -MBQGA1UEChMNU3RhcnRDb20gTHRkLjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwg -Q2VydGlmaWNhdGUgU2lnbmluZzEpMCcGA1UEAxMgU3RhcnRDb20gQ2VydGlmaWNh -dGlvbiBBdXRob3JpdHkwHhcNMDYwOTE3MTk0NjM2WhcNMzYwOTE3MTk0NjM2WjB9 -MQswCQYDVQQGEwJJTDEWMBQGA1UEChMNU3RhcnRDb20gTHRkLjErMCkGA1UECxMi -U2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmluZzEpMCcGA1UEAxMgU3Rh -cnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUA -A4ICDwAwggIKAoICAQDBiNsJvGxGfHiflXu1M5DycmLWwTYgIiRezul38kMKogZk -pMyONvg45iPwbm2xPN1yo4UcodM9tDMr0y+v/uqwQVlntsQGfQqedIXWeUyAN3rf -OQVSWff0G0ZDpNKFhdLDcfN1YjS6LIp/Ho/u7TTQEceWzVI9ujPW3U3eCztKS5/C -Ji/6tRYccjV3yjxd5srhJosaNnZcAdt0FCX+7bWgiA/deMotHweXMAEtcnn6RtYT -Kqi5pquDSR3l8u/d5AGOGAqPY1MWhWKpDhk6zLVmpsJrdAfkK+F2PrRt2PZE4XNi -HzvEvqBTViVsUQn3qqvKv3b9bZvzndu/PWa8DFaqr5hIlTpL36dYUNk4dalb6kMM -Av+Z6+hsTXBbKWWc3apdzK8BMewM69KN6Oqce+Zu9ydmDBpI125C4z/eIT574Q1w -+2OqqGwaVLRcJXrJosmLFqa7LH4XXgVNWG4SHQHuEhANxjJ/GP/89PrNbpHoNkm+ -Gkhpi8KWTRoSsmkXwQqQ1vp5Iki/untp+HDH+no32NgN0nZPV/+Qt+OR0t3vwmC3 -Zzrd/qqc8NSLf3Iizsafl7b4r4qgEKjZ+xjGtrVcUjyJthkqcwEKDwOzEmDyei+B -26Nu/yYwl/WL3YlXtq09s68rxbd2AvCl1iuahhQqcvbjM4xdCUsT37uMdBNSSwID -AQABo4ICUjCCAk4wDAYDVR0TBAUwAwEB/zALBgNVHQ8EBAMCAa4wHQYDVR0OBBYE -FE4L7xqkQFulF2mHMMo0aEPQQa7yMGQGA1UdHwRdMFswLKAqoCiGJmh0dHA6Ly9j -ZXJ0LnN0YXJ0Y29tLm9yZy9zZnNjYS1jcmwuY3JsMCugKaAnhiVodHRwOi8vY3Js -LnN0YXJ0Y29tLm9yZy9zZnNjYS1jcmwuY3JsMIIBXQYDVR0gBIIBVDCCAVAwggFM -BgsrBgEEAYG1NwEBATCCATswLwYIKwYBBQUHAgEWI2h0dHA6Ly9jZXJ0LnN0YXJ0 -Y29tLm9yZy9wb2xpY3kucGRmMDUGCCsGAQUFBwIBFilodHRwOi8vY2VydC5zdGFy -dGNvbS5vcmcvaW50ZXJtZWRpYXRlLnBkZjCB0AYIKwYBBQUHAgIwgcMwJxYgU3Rh -cnQgQ29tbWVyY2lhbCAoU3RhcnRDb20pIEx0ZC4wAwIBARqBl0xpbWl0ZWQgTGlh -YmlsaXR5LCByZWFkIHRoZSBzZWN0aW9uICpMZWdhbCBMaW1pdGF0aW9ucyogb2Yg -dGhlIFN0YXJ0Q29tIENlcnRpZmljYXRpb24gQXV0aG9yaXR5IFBvbGljeSBhdmFp -bGFibGUgYXQgaHR0cDovL2NlcnQuc3RhcnRjb20ub3JnL3BvbGljeS5wZGYwEQYJ -YIZIAYb4QgEBBAQDAgAHMDgGCWCGSAGG+EIBDQQrFilTdGFydENvbSBGcmVlIFNT -TCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTANBgkqhkiG9w0BAQUFAAOCAgEAFmyZ -9GYMNPXQhV59CuzaEE44HF7fpiUFS5Eyweg78T3dRAlbB0mKKctmArexmvclmAk8 -jhvh3TaHK0u7aNM5Zj2gJsfyOZEdUauCe37Vzlrk4gNXcGmXCPleWKYK34wGmkUW -FjgKXlf2Ysd6AgXmvB618p70qSmD+LIU424oh0TDkBreOKk8rENNZEXO3SipXPJz -ewT4F+irsfMuXGRuczE6Eri8sxHkfY+BUZo7jYn0TZNmezwD7dOaHZrzZVD1oNB1 -ny+v8OqCQ5j4aZyJecRDjkZy42Q2Eq/3JR44iZB3fsNrarnDy0RLrHiQi+fHLB5L -EUTINFInzQpdn4XBidUaePKVEFMy3YCEZnXZtWgo+2EuvoSoOMCZEoalHmdkrQYu -L6lwhceWD3yJZfWOQ1QOq92lgDmUYMA0yZZwLKMS9R9Ie70cfmu3nZD0Ijuu+Pwq -yvqCUqDvr0tVk+vBtfAii6w0TiYiBKGHLHVKt+V9E9e4DGTANtLJL4YSjCMJwRuC -O3NJo2pXh5Tl1njFmUNj403gdy3hZZlyaQQaRwnmDwFWJPsfvw55qVguucQJAX6V -um0ABj6y6koQOdjQK/W/7HW/lwLFCRsI3FU34oH7N4RDYiDK51ZLZer+bMEkkySh -NOsF/5oirpt9P/FlUQqmMGqz9IgcgA38corog14= ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIF2TCCA8GgAwIBAgIQXAuFXAvnWUHfV8w/f52oNjANBgkqhkiG9w0BAQUFADBk -MQswCQYDVQQGEwJjaDERMA8GA1UEChMIU3dpc3Njb20xJTAjBgNVBAsTHERpZ2l0 -YWwgQ2VydGlmaWNhdGUgU2VydmljZXMxGzAZBgNVBAMTElN3aXNzY29tIFJvb3Qg -Q0EgMTAeFw0wNTA4MTgxMjA2MjBaFw0yNTA4MTgyMjA2MjBaMGQxCzAJBgNVBAYT -AmNoMREwDwYDVQQKEwhTd2lzc2NvbTElMCMGA1UECxMcRGlnaXRhbCBDZXJ0aWZp -Y2F0ZSBTZXJ2aWNlczEbMBkGA1UEAxMSU3dpc3Njb20gUm9vdCBDQSAxMIICIjAN -BgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA0LmwqAzZuz8h+BvVM5OAFmUgdbI9 -m2BtRsiMMW8Xw/qabFbtPMWRV8PNq5ZJkCoZSx6jbVfd8StiKHVFXqrWW/oLJdih -FvkcxC7mlSpnzNApbjyFNDhhSbEAn9Y6cV9Nbc5fuankiX9qUvrKm/LcqfmdmUc/ -TilftKaNXXsLmREDA/7n29uj/x2lzZAeAR81sH8A25Bvxn570e56eqeqDFdvpG3F -EzuwpdntMhy0XmeLVNxzh+XTF3xmUHJd1BpYwdnP2IkCb6dJtDZd0KTeByy2dbco -kdaXvij1mB7qWybJvbCXc9qukSbraMH5ORXWZ0sKbU/Lz7DkQnGMU3nn7uHbHaBu -HYwadzVcFh4rUx80i9Fs/PJnB3r1re3WmquhsUvhzDdf/X/NTa64H5xD+SpYVUNF -vJbNcA78yeNmuk6NO4HLFWR7uZToXTNShXEuT46iBhFRyePLoW4xCGQMwtI89Tbo -19AOeCMgkckkKmUpWyL3Ic6DXqTz3kvTaI9GdVyDCW4pa8RwjPWd1yAv/0bSKzjC -L3UcPX7ape8eYIVpQtPM+GP+HkM5haa2Y0EQs3MevNP6yn0WR+Kn1dCjigoIlmJW -bjTb2QK5MHXjBNLnj8KwEUAKrNVxAmKLMb7dxiNYMUJDLXT5xp6mig/p/r+D5kNX -JLrvRjSq1xIBOO0CAwEAAaOBhjCBgzAOBgNVHQ8BAf8EBAMCAYYwHQYDVR0hBBYw -FDASBgdghXQBUwABBgdghXQBUwABMBIGA1UdEwEB/wQIMAYBAf8CAQcwHwYDVR0j -BBgwFoAUAyUv3m+CATpcLNwroWm1Z9SM0/0wHQYDVR0OBBYEFAMlL95vggE6XCzc -K6FptWfUjNP9MA0GCSqGSIb3DQEBBQUAA4ICAQA1EMvspgQNDQ/NwNurqPKIlwzf -ky9NfEBWMXrrpA9gzXrzvsMnjgM+pN0S734edAY8PzHyHHuRMSG08NBsl9Tpl7Ik -Vh5WwzW9iAUPWxAaZOHHgjD5Mq2eUCzneAXQMbFamIp1TpBcahQq4FJHgmDmHtqB -sfsUC1rxn9KVuj7QG9YVHaO+htXbD8BJZLsuUBlL0iT43R4HVtA4oJVwIHaM190e -3p9xxCPvgxNcoyQVTSlAPGrEqdi3pkSlDfTgnXceQHAm/NrZNuR55LU/vJtlvrsR -ls/bxig5OgjOR1tTWsWZ/l2p3e9M1MalrQLmjAcSHm8D0W+go/MpvRLHUKKwf4ip -mXeascClOS5cfGniLLDqN2qk4Vrh9VDlg++luyqI54zb/W1elxmofmZ1a3Hqv7HH -b6D0jqTsNFFbjCYDcKF31QESVwA12yPeDooomf2xEG9L/zgtYE4snOtnta1J7ksf -rK/7DZBaZmBwXarNeNQk7shBoJMBkpxqnvy5JMWzFYJ+vq6VK+uxwNrjAWALXmms -hFZhvnEX/h0TD/7Gh0Xp/jKgGg0TpJRVcaUWi7rKibCyx/yP2FS1k2Kdzs9Z+z0Y -zirLNRWCXf9UIltxUvu3yf5gmwBBZPCqKuy2QkPOiWaByIufOVQDJdMWNY6E0F/6 -MBr1mmz0DlP5OlvRHA== ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIDtTCCAp2gAwIBAgIIBhDCeat3PfIwDQYJKoZIhvcNAQEFBQAwdjELMAkGA1UE -BhMCQ0gxEjAQBgNVBAoTCVN3aXNzU2lnbjEyMDAGA1UEAxMpU3dpc3NTaWduIENB -IChSU0EgSUsgTWF5IDYgMTk5OSAxODowMDo1OCkxHzAdBgkqhkiG9w0BCQEWEGNh -QFN3aXNzU2lnbi5jb20wHhcNMDAxMTI2MjMyNzQxWhcNMzExMTI2MjMyNzQxWjB2 -MQswCQYDVQQGEwJDSDESMBAGA1UEChMJU3dpc3NTaWduMTIwMAYDVQQDEylTd2lz -c1NpZ24gQ0EgKFJTQSBJSyBNYXkgNiAxOTk5IDE4OjAwOjU4KTEfMB0GCSqGSIb3 -DQEJARYQY2FAU3dpc3NTaWduLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC -AQoCggEBAKw5fjnmNneLQlUCQG8jQLwwfbrOZoUwNX8cbNqhxK03/xUloFVgAt+S -Te2RxNXaCAXLBPn5ZST35TLV57aLmbHCtifv3YZqaaQGvjedltIBMJihJhZ+h3LY -SKsUb+xEJ3x5ZUf8jP+Q1g57y1s8SnBFWN/ni5NkF1Y1y31VwOi9wiOf/VISL+uu -SC4i1CP1Kbz3BDs6Hht1GpRYCbJ/K0bc9oJSpWpT5PGONsGIawqMbJuyoDghsXQ1 -pbn2e8K64BSscGZVZTNooSGgNiHmACNJBYXiWVWrwXPF4l6SddmC3Rj0aKXjgECc -FkHLDQcsM5JsK2ZLryTDUsQFbxVP2ikCAwEAAaNHMEUwCwYDVR0PBAQDAgEGMAwG -A1UdEwQFMAMBAf8wHQYDVR0OBBYEFJbXcc05KtT8iLGKq1N4ae+PR34WMAkGA1Ud -IwQCMAAwDQYJKoZIhvcNAQEFBQADggEBAKMy6W8HvZdS1fBpEUzl6Lvw50bgE1Xc -HU1JypSBG9mhdcXZo5AlPB4sCvx9Dmfwhyrdsshc0TP2V3Vh6eQqnEF5qB4lVziT -Bko9mW6Ot+pPnwsy4SHpx3rw6jCYnOqfUcZjWqqqRrq/3P1waz+Mn4cLMVEg3Xaz -qYov/khvSqS0JniwjRlo2H6f/1oVUKZvP+dUhpQepfZrOqMAWZW4otp6FolyQyeU -NN6UCRNiUKl5vTijbKwUUwfER/1Vci3M1/O1QCfttQ4vRN4Buc0xqYtGL3cd5WiO -vWzyhlTzAI6VUdNkQhhHJSAyTpj6dmXDRzrryoFGa2PjgESxz7XBaSI= ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIFujCCA6KgAwIBAgIJALtAHEP1Xk+wMA0GCSqGSIb3DQEBBQUAMEUxCzAJBgNV -BAYTAkNIMRUwEwYDVQQKEwxTd2lzc1NpZ24gQUcxHzAdBgNVBAMTFlN3aXNzU2ln -biBHb2xkIENBIC0gRzIwHhcNMDYxMDI1MDgzMDM1WhcNMzYxMDI1MDgzMDM1WjBF -MQswCQYDVQQGEwJDSDEVMBMGA1UEChMMU3dpc3NTaWduIEFHMR8wHQYDVQQDExZT -d2lzc1NpZ24gR29sZCBDQSAtIEcyMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC -CgKCAgEAr+TufoskDhJuqVAtFkQ7kpJcyrhdhJJCEyq8ZVeCQD5XJM1QiyUqt2/8 -76LQwB8CJEoTlo8jE+YoWACjR8cGp4QjK7u9lit/VcyLwVcfDmJlD909Vopz2q5+ -bbqBHH5CjCA12UNNhPqE21Is8w4ndwtrvxEvcnifLtg+5hg3Wipy+dpikJKVyh+c -6bM8K8vzARO/Ws/BtQpgvd21mWRTuKCWs2/iJneRjOBiEAKfNA+k1ZIzUd6+jbqE -emA8atufK+ze3gE/bk3lUIbLtK/tREDFylqM2tIrfKjuvqblCqoOpd8FUrdVxyJd -MmqXl2MT28nbeTZ7hTpKxVKJ+STnnXepgv9VHKVxaSvRAiTysybUa9oEVeXBCsdt -MDeQKuSeFDNeFhdVxVu1yzSJkvGdJo+hB9TGsnhQ2wwMC3wLjEHXuendjIj3o02y -MszYF9rNt85mndT9Xv+9lz4pded+p2JYryU0pUHHPbwNUMoDAw8IWh+Vc3hiv69y -FGkOpeUDDniOJihC8AcLYiAQZzlG+qkDzAQ4embvIIO1jEpWjpEA/I5cgt6IoMPi -aG59je883WX0XaxR7ySArqpWl2/5rX3aYT+YdzylkbYcjCbaZaIJbcHiVOO5ykxM -gI93e2CaHt+28kgeDrpOVG2Y4OGiGqJ3UM/EY5LsRxmd6+ZrzsECAwEAAaOBrDCB -qTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUWyV7 -lqRlUX64OfPAeGZe6Drn8O4wHwYDVR0jBBgwFoAUWyV7lqRlUX64OfPAeGZe6Drn -8O4wRgYDVR0gBD8wPTA7BglghXQBWQECAQEwLjAsBggrBgEFBQcCARYgaHR0cDov -L3JlcG9zaXRvcnkuc3dpc3NzaWduLmNvbS8wDQYJKoZIhvcNAQEFBQADggIBACe6 -45R88a7A3hfm5djV9VSwg/S7zV4Fe0+fdWavPOhWfvxyeDgD2StiGwC5+OlgzczO -UYrHUDFu4Up+GC9pWbY9ZIEr44OE5iKHjn3g7gKZYbge9LgriBIWhMIxkziWMaa5 -O1M/wySTVltpkuzFwbs4AOPsF6m43Md8AYOfMke6UiI0HTJ6CVanfCU2qT1L2sCC -bwq7EsiHSycR+R4tx5M/nttfJmtS2S6K8RTGRI0Vqbe/vd6mGu6uLftIdxf+u+yv -GPUqUfA5hJeVbG4bwyvEdGB5JbAKJ9/fXtI5z0V9QkvfsywexcZdylU6oJxpmo/a -77KwPJ+HbBIrZXAVUjEaJM9vMSNQH4xPjyPDdEFjHFWoFN0+4FFQz/EbMFYOkrCC -hdiDyyJkvC24JdVUorgG6q2SpCSgwYa1ShNqR88uC1aVVMvOmttqtKay20EIhid3 -92qgQmwLOM7XdVAyksLfKzAiSNDVQTglXaTpXZ/GlHXQRf0wl0OPkKsKx4ZzYEpp -Ld6leNcG2mqeSz53OiATIgHQv2ieY2BrNU0LbbqhPcCT4H8js1WtciVORvnSFu+w -ZMEBnunKoGqYDs/YYPIvSbjkQuE4NRb0yG5P94FW6LqjviOvrv1vA+ACOzB2+htt -Qc8Bsem4yWb02ybzOqR08kkkW8mw0FfB+j564ZfJ ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIFwTCCA6mgAwIBAgIITrIAZwwDXU8wDQYJKoZIhvcNAQEFBQAwSTELMAkGA1UE -BhMCQ0gxFTATBgNVBAoTDFN3aXNzU2lnbiBBRzEjMCEGA1UEAxMaU3dpc3NTaWdu -IFBsYXRpbnVtIENBIC0gRzIwHhcNMDYxMDI1MDgzNjAwWhcNMzYxMDI1MDgzNjAw -WjBJMQswCQYDVQQGEwJDSDEVMBMGA1UEChMMU3dpc3NTaWduIEFHMSMwIQYDVQQD -ExpTd2lzc1NpZ24gUGxhdGludW0gQ0EgLSBHMjCCAiIwDQYJKoZIhvcNAQEBBQAD -ggIPADCCAgoCggIBAMrfogLi2vj8Bxax3mCq3pZcZB/HL37PZ/pEQtZ2Y5Wu669y -IIpFR4ZieIbWIDkm9K6j/SPnpZy1IiEZtzeTIsBQnIJ71NUERFzLtMKfkr4k2Htn -IuJpX+UFeNSH2XFwMyVTtIc7KZAoNppVRDBopIOXfw0enHb/FZ1glwCNioUD7IC+ -6ixuEFGSzH7VozPY1kneWCqv9hbrS3uQMpe5up1Y8fhXSQQeol0GcN1x2/ndi5ob -jM89o03Oy3z2u5yg+gnOI2Ky6Q0f4nIoj5+saCB9bzuohTEJfwvH6GXp43gOCWcw -izSC+13gzJ2BbWLuCB4ELE6b7P6pT1/9aXjvCR+htL/68++QHkwFix7qepF6w9fl -+zC8bBsQWJj3Gl/QKTIDE0ZNYWqFTFJ0LwYfexHihJfGmfNtf9dng34TaNhxKFrY -zt3oEBSa/m0jh26OWnA81Y0JAKeqvLAxN23IhBQeW71FYyBrS3SMvds6DsHPWhaP -pZjydomyExI7C3d3rLvlPClKknLKYRorXkzig3R3+jVIeoVNjZpTxN94ypeRSCtF -KwH3HBqi7Ri6Cr2D+m+8jVeTO9TUps4e8aCxzqv9KyiaTxvXw3LbpMS/XUz13XuW -ae5ogObnmLo2t/5u7Su9IPhlGdpVCX4l3P5hYnL5fhgC72O00Puv5TtjjGePAgMB -AAGjgawwgakwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0O -BBYEFFCvzAeHFUdvOMW0ZdHelarp35zMMB8GA1UdIwQYMBaAFFCvzAeHFUdvOMW0 -ZdHelarp35zMMEYGA1UdIAQ/MD0wOwYJYIV0AVkBAQEBMC4wLAYIKwYBBQUHAgEW -IGh0dHA6Ly9yZXBvc2l0b3J5LnN3aXNzc2lnbi5jb20vMA0GCSqGSIb3DQEBBQUA -A4ICAQAIhab1Fgz8RBrBY+D5VUYI/HAcQiiWjrfFwUF1TglxeeVtlspLpYhg0DB0 -uMoI3LQwnkAHFmtllXcBrqS3NQuB2nEVqXQXOHtYyvkv+8Bldo1bAbl93oI9ZLi+ -FHSjClTTLJUYFzX1UWs/j6KWYTl4a0vlpqD4U99REJNi54Av4tHgvI42Rncz7Lj7 -jposiU0xEQ8mngS7twSNC/K5/FqdOxa3L8iYq/6KUFkuozv8KV2LwUvJ4ooTHbG/ -u0IdUt1O2BReEMYxB+9xJ/cbOQncguqLs5WGXv312l0xpuAxtpTmREl0xRbl9x8D -YSjFyMsSoEJL+WuICI20MhjzdZ/EfwBPBZWcoxcCw7NTm6ogOSkrZvqdr16zktK1 -puEa+S1BaYEUtLS17Yk9zvupnTVCRLEcFHOBzyoBNZox1S2PbYTfgE1X4z/FhHXa -icYwu+uPyyIIoK6q8QNsOktNCaUOcsZWayFCTiMlFGiudgp8DAdwZPmaL/YFOSbG -DI8Zf0NebvRbFS/bYV3mZy8/CJT5YLSYMdp08YSTcU1f+2BY0fvEwW2JorsgH51x -kcsymxM9Pn2SUjWskpSi0xjCfMfqr3YFFt1nJ8J+HAciIfNAChs0B0QTwoRqjt8Z -Wr9/6x3iGjjRXK9HkmuAtTClyY3YqzGBH9/CZjfTk6mFhnll0g== ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIFvTCCA6WgAwIBAgIITxvUL1S7L0swDQYJKoZIhvcNAQEFBQAwRzELMAkGA1UE -BhMCQ0gxFTATBgNVBAoTDFN3aXNzU2lnbiBBRzEhMB8GA1UEAxMYU3dpc3NTaWdu -IFNpbHZlciBDQSAtIEcyMB4XDTA2MTAyNTA4MzI0NloXDTM2MTAyNTA4MzI0Nlow -RzELMAkGA1UEBhMCQ0gxFTATBgNVBAoTDFN3aXNzU2lnbiBBRzEhMB8GA1UEAxMY -U3dpc3NTaWduIFNpbHZlciBDQSAtIEcyMIICIjANBgkqhkiG9w0BAQEFAAOCAg8A -MIICCgKCAgEAxPGHf9N4Mfc4yfjDmUO8x/e8N+dOcbpLj6VzHVxumK4DV644N0Mv -Fz0fyM5oEMF4rhkDKxD6LHmD9ui5aLlV8gREpzn5/ASLHvGiTSf5YXu6t+WiE7br -YT7QbNHm+/pe7R20nqA1W6GSy/BJkv6FCgU+5tkL4k+73JU3/JHpMjUi0R86TieF -nbAVlDLaYQ1HTWBCrpJH6INaUFjpiou5XaHc3ZlKHzZnu0jkg7Y360g6rw9njxcH -6ATK72oxh9TAtvmUcXtnZLi2kUpCe2UuMGoM9ZDulebyzYLs2aFK7PayS+VFheZt -eJMELpyCbTapxDFkH4aDCyr0NQp4yVXPQbBH6TCfmb5hqAaEuSh6XzjZG6k4sIN/ -c8HDO0gqgg8hm7jMqDXDhBuDsz6+pJVpATqJAHgE2cn0mRmrVn5bi4Y5FZGkECwJ -MoBgs5PAKrYYC51+jUnyEEp/+dVGLxmSo5mnJqy7jDzmDrxHB9xzUfFwZC8I+bRH -HTBsROopN4WSaGa8gzj+ezku01DwH/teYLappvonQfGbGHLy9YR0SslnxFSuSGTf -jNFusB3hB48IHpmccelM2KX3RxIfdNFRnobzwqIjQAtz20um53MGjMGg6cFZrEb6 -5i/4z3GcRm25xBWNOHkDRUjvxF3XCO6HOSKGsg0PWEP3calILv3q1h8CAwEAAaOB -rDCBqTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU -F6DNweRBtjpbO8tFnb0cwpj6hlgwHwYDVR0jBBgwFoAUF6DNweRBtjpbO8tFnb0c -wpj6hlgwRgYDVR0gBD8wPTA7BglghXQBWQEDAQEwLjAsBggrBgEFBQcCARYgaHR0 -cDovL3JlcG9zaXRvcnkuc3dpc3NzaWduLmNvbS8wDQYJKoZIhvcNAQEFBQADggIB -AHPGgeAn0i0P4JUw4ppBf1AsX19iYamGamkYDHRJ1l2E6kFSGG9YrVBWIGrGvShp -WJHckRE1qTodvBqlYJ7YH39FkWnZfrt4csEGDyrOj4VwYaygzQu4OSlWhDJOhrs9 -xCrZ1x9y7v5RoSJBsXECYxqCsGKrXlcSH9/L3XWgwF15kIwb4FDm3jH+mHtwX6WQ -2K34ArZv02DdQEsixT2tOnqfGhpHkXkzuoLcMmkDlm4fS/Bx/uNncqCxv1yL5PqZ -IseEuRuNI5c/7SXgz2W79WEE790eslpBIlqhn10s6FvJbakMDHiqYMZWjwFaDGi8 -aRl5xB9+lwW/xekkUV7U1UtT7dkjWjYDZaPBA61BMPNGG4WQr2W11bHkFlt4dR2X -em1ZqSqPe97Dh4kQmUlzeMg9vVE1dCrV8X5pGyq7O70luJpaPXJhkGaH7gzWTdQR -dAtq/gsD/KNVV4n+SsuuWxcFyPKNIzFTONItaj+CuY0IavdeQXRuwxF+B6wpYJE/ -OMpXEA29MC/HpeZBoNquBYeaoKRlbEwJDIm6uNO5wJOKMPqN5ZprFQFOZ6raYlY+ -hAhm0sQ2fac+EPyI4NSA5QC9qvNOBqN6avlicuMJT+ubDgEj8Z+7fNzcbBGXJbLy -tGMU0gYqZ4yD9c7qB9iaah7s5Aq7KkzrCWA5zspi2C5u ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIENTCCA56gAwIBAgIBATANBgkqhkiG9w0BAQQFADCBvDELMAkGA1UEBhMCREUx -EDAOBgNVBAgTB0hhbWJ1cmcxEDAOBgNVBAcTB0hhbWJ1cmcxOjA4BgNVBAoTMVRD -IFRydXN0Q2VudGVyIGZvciBTZWN1cml0eSBpbiBEYXRhIE5ldHdvcmtzIEdtYkgx -IjAgBgNVBAsTGVRDIFRydXN0Q2VudGVyIENsYXNzIDAgQ0ExKTAnBgkqhkiG9w0B -CQEWGmNlcnRpZmljYXRlQHRydXN0Y2VudGVyLmRlMB4XDTk4MDMwOTEzNTQ0OFoX -DTA1MTIzMTEzNTQ0OFowgbwxCzAJBgNVBAYTAkRFMRAwDgYDVQQIEwdIYW1idXJn -MRAwDgYDVQQHEwdIYW1idXJnMTowOAYDVQQKEzFUQyBUcnVzdENlbnRlciBmb3Ig -U2VjdXJpdHkgaW4gRGF0YSBOZXR3b3JrcyBHbWJIMSIwIAYDVQQLExlUQyBUcnVz -dENlbnRlciBDbGFzcyAwIENBMSkwJwYJKoZIhvcNAQkBFhpjZXJ0aWZpY2F0ZUB0 -cnVzdGNlbnRlci5kZTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA333mvr/V -8C9tTg7R4I0LfztU6IrisJ8oxYrGubMzJ/UnyhpMVBJrtLJGsx1Ls/QhC0sCLqHC -NJyFoMR4EdvbaycrCSoYTkDMn3EZZ5l0onw/wdiLI8hjO4ohq1zeHvSN3LQYwwVz -9Gq0ofoBCCsBD203W6o4hmc51+Vf+uR+zKMCAwEAAaOCAUMwggE/MEAGCWCGSAGG -+EIBAwQzFjFodHRwczovL3d3dy50cnVzdGNlbnRlci5kZS9jZ2ktYmluL2NoZWNr -LXJldi5jZ2k/MEAGCWCGSAGG+EIBBAQzFjFodHRwczovL3d3dy50cnVzdGNlbnRl -ci5kZS9jZ2ktYmluL2NoZWNrLXJldi5jZ2k/MDwGCWCGSAGG+EIBBwQvFi1odHRw -czovL3d3dy50cnVzdGNlbnRlci5kZS9jZ2ktYmluL1JlbmV3LmNnaT8wPgYJYIZI -AYb4QgEIBDEWL2h0dHA6Ly93d3cudHJ1c3RjZW50ZXIuZGUvZ3VpZGVsaW5lcy9p -bmRleC5odG1sMCgGCWCGSAGG+EIBDQQbFhlUQyBUcnVzdENlbnRlciBDbGFzcyAw -IENBMBEGCWCGSAGG+EIBAQQEAwIABzANBgkqhkiG9w0BAQQFAAOBgQBNB39fCTAZ -kqoFR3qUdVQqrs/82AxC4UU4KySVssqHynnEw5eQXmIYxsk4YUxoNdNMFBHrxM2h -qdjFnmgnMgc1RQT4XyGgYB4cAEgEWNLFy65tMm49d5WMhcflrlCddUp7/wsneepN -pFn/7FrqJqU5g6TReM6nqX683SvKEpMDSg== ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIENTCCA56gAwIBAgIBAjANBgkqhkiG9w0BAQQFADCBvDELMAkGA1UEBhMCREUx -EDAOBgNVBAgTB0hhbWJ1cmcxEDAOBgNVBAcTB0hhbWJ1cmcxOjA4BgNVBAoTMVRD -IFRydXN0Q2VudGVyIGZvciBTZWN1cml0eSBpbiBEYXRhIE5ldHdvcmtzIEdtYkgx -IjAgBgNVBAsTGVRDIFRydXN0Q2VudGVyIENsYXNzIDEgQ0ExKTAnBgkqhkiG9w0B -CQEWGmNlcnRpZmljYXRlQHRydXN0Y2VudGVyLmRlMB4XDTk4MDMwOTEzNTYzM1oX -DTA1MTIzMTEzNTYzM1owgbwxCzAJBgNVBAYTAkRFMRAwDgYDVQQIEwdIYW1idXJn -MRAwDgYDVQQHEwdIYW1idXJnMTowOAYDVQQKEzFUQyBUcnVzdENlbnRlciBmb3Ig -U2VjdXJpdHkgaW4gRGF0YSBOZXR3b3JrcyBHbWJIMSIwIAYDVQQLExlUQyBUcnVz -dENlbnRlciBDbGFzcyAxIENBMSkwJwYJKoZIhvcNAQkBFhpjZXJ0aWZpY2F0ZUB0 -cnVzdGNlbnRlci5kZTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAsCnrtHaz -rte2W7Re573jsZxJBFdboavZfxMb/bphq9jncd8tAJRdUUh9I+91YoSQPAofWRF0 -L46Apf0wAj0pUs1yGkkhnLzLUo5IoWOWyBCFMGlXdEXAWobG1T3gaFd9MWokjUWX -PjF+aGYybiRt7DI2yUHK8DFEyKNhyhugNh8CAwEAAaOCAUMwggE/MEAGCWCGSAGG -+EIBAwQzFjFodHRwczovL3d3dy50cnVzdGNlbnRlci5kZS9jZ2ktYmluL2NoZWNr -LXJldi5jZ2k/MEAGCWCGSAGG+EIBBAQzFjFodHRwczovL3d3dy50cnVzdGNlbnRl -ci5kZS9jZ2ktYmluL2NoZWNrLXJldi5jZ2k/MDwGCWCGSAGG+EIBBwQvFi1odHRw -czovL3d3dy50cnVzdGNlbnRlci5kZS9jZ2ktYmluL1JlbmV3LmNnaT8wPgYJYIZI -AYb4QgEIBDEWL2h0dHA6Ly93d3cudHJ1c3RjZW50ZXIuZGUvZ3VpZGVsaW5lcy9p -bmRleC5odG1sMCgGCWCGSAGG+EIBDQQbFhlUQyBUcnVzdENlbnRlciBDbGFzcyAx -IENBMBEGCWCGSAGG+EIBAQQEAwIABzANBgkqhkiG9w0BAQQFAAOBgQAFQlImpAwn -AUSsXCUowkRCVAi5HcU+bFlmxLNOUKf4+JZ1oZZ16BY4oM1dbvp5pxt7HR7DALlm -vlrWYg/n8nu470zgwD9Zrjm3hAmeq/GpLmtp4q3M8up4CQUgOEJxGH7Hspfm1QIF -BlajX/GqwsRP/vfvFg+d7KqFzz0pJPEEzQ== ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIDXDCCAsWgAwIBAgICA+kwDQYJKoZIhvcNAQEEBQAwgbwxCzAJBgNVBAYTAkRF -MRAwDgYDVQQIEwdIYW1idXJnMRAwDgYDVQQHEwdIYW1idXJnMTowOAYDVQQKEzFU -QyBUcnVzdENlbnRlciBmb3IgU2VjdXJpdHkgaW4gRGF0YSBOZXR3b3JrcyBHbWJI -MSIwIAYDVQQLExlUQyBUcnVzdENlbnRlciBDbGFzcyAxIENBMSkwJwYJKoZIhvcN -AQkBFhpjZXJ0aWZpY2F0ZUB0cnVzdGNlbnRlci5kZTAeFw05ODAzMDkxMTU5NTla -Fw0xMTAxMDExMTU5NTlaMIG8MQswCQYDVQQGEwJERTEQMA4GA1UECBMHSGFtYnVy -ZzEQMA4GA1UEBxMHSGFtYnVyZzE6MDgGA1UEChMxVEMgVHJ1c3RDZW50ZXIgZm9y -IFNlY3VyaXR5IGluIERhdGEgTmV0d29ya3MgR21iSDEiMCAGA1UECxMZVEMgVHJ1 -c3RDZW50ZXIgQ2xhc3MgMSBDQTEpMCcGCSqGSIb3DQEJARYaY2VydGlmaWNhdGVA -dHJ1c3RjZW50ZXIuZGUwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBALAp67R2 -s67Xtlu0Xue947GcSQRXW6Gr2X8TG/26YavY53HfLQCUXVFIfSPvdWKEkDwKH1kR -dC+OgKX9MAI9KVLNchpJIZy8y1KOSKFjlsgQhTBpV3RFwFqGxtU94GhXfTFqJI1F -lz4xfmhmMm4kbewyNslByvAxRMijYcoboDYfAgMBAAGjazBpMA8GA1UdEwEB/wQF -MAMBAf8wDgYDVR0PAQH/BAQDAgGGMDMGCWCGSAGG+EIBCAQmFiRodHRwOi8vd3d3 -LnRydXN0Y2VudGVyLmRlL2d1aWRlbGluZXMwEQYJYIZIAYb4QgEBBAQDAgAHMA0G -CSqGSIb3DQEBBAUAA4GBAE+ZWYXIZFaCxW892EYJLzxRwadwWIGSEur01BYAll5y -KOfWNl8anK8fwoMatAVVmaZYXDco8lce612/sdNFD3IcA9IAxyxV2v5fiXaL4tR3 -9U0JF6/EuqswK0+4HerZ/1nwUHRGul7qNrDrknsPWNoy4VK9IzcP9fMASq6wXt5u ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIENTCCA56gAwIBAgIBAzANBgkqhkiG9w0BAQQFADCBvDELMAkGA1UEBhMCREUx -EDAOBgNVBAgTB0hhbWJ1cmcxEDAOBgNVBAcTB0hhbWJ1cmcxOjA4BgNVBAoTMVRD -IFRydXN0Q2VudGVyIGZvciBTZWN1cml0eSBpbiBEYXRhIE5ldHdvcmtzIEdtYkgx -IjAgBgNVBAsTGVRDIFRydXN0Q2VudGVyIENsYXNzIDIgQ0ExKTAnBgkqhkiG9w0B -CQEWGmNlcnRpZmljYXRlQHRydXN0Y2VudGVyLmRlMB4XDTk4MDMwOTEzNTc0NFoX -DTA1MTIzMTEzNTc0NFowgbwxCzAJBgNVBAYTAkRFMRAwDgYDVQQIEwdIYW1idXJn -MRAwDgYDVQQHEwdIYW1idXJnMTowOAYDVQQKEzFUQyBUcnVzdENlbnRlciBmb3Ig -U2VjdXJpdHkgaW4gRGF0YSBOZXR3b3JrcyBHbWJIMSIwIAYDVQQLExlUQyBUcnVz -dENlbnRlciBDbGFzcyAyIENBMSkwJwYJKoZIhvcNAQkBFhpjZXJ0aWZpY2F0ZUB0 -cnVzdGNlbnRlci5kZTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA2jjo7TIA -KXGDAQ2/jAHc2satOaSpii/Vi1xoX1DGYvVmvcqRIuyqHVHXPbNRsoNOXctJsPBM -VeVrLceFCzAckk6C1MoC7fdvvtzg4xS4BVPymvRWi1qehZPRtIJWrk27qEtXFrz+ -+Fie+CmNsHvNeMlPrItnDPGc+/xXm1dcTw0CAwEAAaOCAUMwggE/MEAGCWCGSAGG -+EIBAwQzFjFodHRwczovL3d3dy50cnVzdGNlbnRlci5kZS9jZ2ktYmluL2NoZWNr -LXJldi5jZ2k/MEAGCWCGSAGG+EIBBAQzFjFodHRwczovL3d3dy50cnVzdGNlbnRl -ci5kZS9jZ2ktYmluL2NoZWNrLXJldi5jZ2k/MDwGCWCGSAGG+EIBBwQvFi1odHRw -czovL3d3dy50cnVzdGNlbnRlci5kZS9jZ2ktYmluL1JlbmV3LmNnaT8wPgYJYIZI -AYb4QgEIBDEWL2h0dHA6Ly93d3cudHJ1c3RjZW50ZXIuZGUvZ3VpZGVsaW5lcy9p -bmRleC5odG1sMCgGCWCGSAGG+EIBDQQbFhlUQyBUcnVzdENlbnRlciBDbGFzcyAy -IENBMBEGCWCGSAGG+EIBAQQEAwIABzANBgkqhkiG9w0BAQQFAAOBgQCJG/Tv6Tji -bAz2zW9JzinM+6YP+Y0+lUbW/EcyibLIBmF60ucNEwKUC9mLVkf0u+fFX3v0Y0yu -fDTqDaKpsyyF8+P+J1QQkrCPksGYQhhwSNtOLOsNJGjk0fe+Cakph7vo2tw+o4hC -MfXR43+u2I4AWnSYsE/G/yN7XHMAeMnbTg== ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIDXDCCAsWgAwIBAgICA+owDQYJKoZIhvcNAQEEBQAwgbwxCzAJBgNVBAYTAkRF -MRAwDgYDVQQIEwdIYW1idXJnMRAwDgYDVQQHEwdIYW1idXJnMTowOAYDVQQKEzFU -QyBUcnVzdENlbnRlciBmb3IgU2VjdXJpdHkgaW4gRGF0YSBOZXR3b3JrcyBHbWJI -MSIwIAYDVQQLExlUQyBUcnVzdENlbnRlciBDbGFzcyAyIENBMSkwJwYJKoZIhvcN -AQkBFhpjZXJ0aWZpY2F0ZUB0cnVzdGNlbnRlci5kZTAeFw05ODAzMDkxMTU5NTla -Fw0xMTAxMDExMTU5NTlaMIG8MQswCQYDVQQGEwJERTEQMA4GA1UECBMHSGFtYnVy -ZzEQMA4GA1UEBxMHSGFtYnVyZzE6MDgGA1UEChMxVEMgVHJ1c3RDZW50ZXIgZm9y -IFNlY3VyaXR5IGluIERhdGEgTmV0d29ya3MgR21iSDEiMCAGA1UECxMZVEMgVHJ1 -c3RDZW50ZXIgQ2xhc3MgMiBDQTEpMCcGCSqGSIb3DQEJARYaY2VydGlmaWNhdGVA -dHJ1c3RjZW50ZXIuZGUwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBANo46O0y -AClxgwENv4wB3NrGrTmkqYov1YtcaF9QxmL1Zr3KkSLsqh1R1z2zUbKDTl3LSbDw -TFXlay3HhQswHJJOgtTKAu33b77c4OMUuAVT8pr0VotanoWT0bSCVq5Nu6hLVxa8 -/vhYnvgpjbB7zXjJT6yLZwzxnPv8V5tXXE8NAgMBAAGjazBpMA8GA1UdEwEB/wQF -MAMBAf8wDgYDVR0PAQH/BAQDAgGGMDMGCWCGSAGG+EIBCAQmFiRodHRwOi8vd3d3 -LnRydXN0Y2VudGVyLmRlL2d1aWRlbGluZXMwEQYJYIZIAYb4QgEBBAQDAgAHMA0G -CSqGSIb3DQEBBAUAA4GBAIRS+yjf/x91AbwBvgRWl2p0QiQxg/lGsQaKic+WLDO/ -jLVfenKhhQbOhvgFjuj5Jcrag4wGrOs2bYWRNAQ29ELw+HkuCkhcq8xRT3h2oNms -Gb0q0WkEKJHKNhAngFdb0lz1wlurZIFjdFH0l7/NEij3TWZ/p/AcASZ4smZHcFFk ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIEqjCCA5KgAwIBAgIOLmoAAQACH9dSISwRXDswDQYJKoZIhvcNAQEFBQAwdjEL -MAkGA1UEBhMCREUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVyIEdtYkgxIjAgBgNV -BAsTGVRDIFRydXN0Q2VudGVyIENsYXNzIDIgQ0ExJTAjBgNVBAMTHFRDIFRydXN0 -Q2VudGVyIENsYXNzIDIgQ0EgSUkwHhcNMDYwMTEyMTQzODQzWhcNMjUxMjMxMjI1 -OTU5WjB2MQswCQYDVQQGEwJERTEcMBoGA1UEChMTVEMgVHJ1c3RDZW50ZXIgR21i -SDEiMCAGA1UECxMZVEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMiBDQTElMCMGA1UEAxMc -VEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMiBDQSBJSTCCASIwDQYJKoZIhvcNAQEBBQAD -ggEPADCCAQoCggEBAKuAh5uO8MN8h9foJIIRszzdQ2Lu+MNF2ujhoF/RKrLqk2jf -tMjWQ+nEdVl//OEd+DFwIxuInie5e/060smp6RQvkL4DUsFJzfb95AhmC1eKokKg -uNV/aVyQMrKXDcpK3EY+AlWJU+MaWss2xgdW94zPEfRMuzBwBJWl9jmM/XOBCH2J -XjIeIqkiRUuwZi4wzJ9l/fzLganx4Duvo4bRierERXlQXa7pIXSSTYtZgo+U4+lK -8edJsBTj9WLL1XK9H7nSn6DNqPoByNkN39r8R52zyFTfSUrxIan+GE7uSNQZu+99 -5OKdy1u2bv/jzVrndIIFuoAlOMvkaZ6vQaoahPUCAwEAAaOCATQwggEwMA8GA1Ud -EwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBTjq1RMgKHbVkO3 -kUrL84J6E1wIqzCB7QYDVR0fBIHlMIHiMIHfoIHcoIHZhjVodHRwOi8vd3d3LnRy -dXN0Y2VudGVyLmRlL2NybC92Mi90Y19jbGFzc18yX2NhX0lJLmNybIaBn2xkYXA6 -Ly93d3cudHJ1c3RjZW50ZXIuZGUvQ049VEMlMjBUcnVzdENlbnRlciUyMENsYXNz -JTIwMiUyMENBJTIwSUksTz1UQyUyMFRydXN0Q2VudGVyJTIwR21iSCxPVT1yb290 -Y2VydHMsREM9dHJ1c3RjZW50ZXIsREM9ZGU/Y2VydGlmaWNhdGVSZXZvY2F0aW9u -TGlzdD9iYXNlPzANBgkqhkiG9w0BAQUFAAOCAQEAjNfffu4bgBCzg/XbEeprS6iS -GNn3Bzn1LL4GdXpoUxUc6krtXvwjshOg0wn/9vYua0Fxec3ibf2uWWuFHbhOIprt -ZjluS5TmVfwLG4t3wVMTZonZKNaL80VKY7f9ewthXbhtvsPcW3nS7Yblok2+XnR8 -au0WOB9/WIFaGusyiC2y8zl3gK9etmF1KdsjTYjKUCjLhdLTEKJZbtOTVAB6okaV -hgWcqRmY5TFyDADiZ9lA4CQze28suVyrZZ0srHbqNZn1l7kPJOzHdiEoZa5X6AeI -dUpWoNIFOqTmjZKILPPy4cHGYdtBxceb9w4aUUXCYWvcZCcXjFq32nQozZfkvQ== ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIEUzCCA7ygAwIBAgIBCTANBgkqhkiG9w0BAQQFADCBxjELMAkGA1UEBhMCREUx -EDAOBgNVBAgTB0hhbWJ1cmcxEDAOBgNVBAcTB0hhbWJ1cmcxOjA4BgNVBAoTMVRD -IFRydXN0Q2VudGVyIGZvciBTZWN1cml0eSBpbiBEYXRhIE5ldHdvcmtzIEdtYkgx -LDAqBgNVBAsTI1RDIFRydXN0Q2VudGVyIENsYXNzIDIgTFJBLUFkbWluIENBMSkw -JwYJKoZIhvcNAQkBFhpjZXJ0aWZpY2F0ZUB0cnVzdGNlbnRlci5kZTAeFw05ODAz -MDkxNDA3MjVaFw0wNTEyMzExNDA3MjVaMIHGMQswCQYDVQQGEwJERTEQMA4GA1UE -CBMHSGFtYnVyZzEQMA4GA1UEBxMHSGFtYnVyZzE6MDgGA1UEChMxVEMgVHJ1c3RD -ZW50ZXIgZm9yIFNlY3VyaXR5IGluIERhdGEgTmV0d29ya3MgR21iSDEsMCoGA1UE -CxMjVEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMiBMUkEtQWRtaW4gQ0ExKTAnBgkqhkiG -9w0BCQEWGmNlcnRpZmljYXRlQHRydXN0Y2VudGVyLmRlMIGfMA0GCSqGSIb3DQEB -AQUAA4GNADCBiQKBgQDZmDnf8UPwIWk6TVuK4UuUSGJc8i7Z7cIuKXBFPQSm6Cyo -BRKYOS94XSin61CAufz/zMWAxe4LrB2r5Tn9Ngj+s6fSMLh4EBeytCSB1T+D+KP6 -k4xiCAYxN4FYzXZ45lc1dLiML7Q6JAR7MMF+FuI4hyv3AsRNzg6nXNYakivSSwID -AQABo4IBTTCCAUkwQAYJYIZIAYb4QgEDBDMWMWh0dHBzOi8vd3d3LnRydXN0Y2Vu -dGVyLmRlL2NnaS1iaW4vY2hlY2stcmV2LmNnaT8wQAYJYIZIAYb4QgEEBDMWMWh0 -dHBzOi8vd3d3LnRydXN0Y2VudGVyLmRlL2NnaS1iaW4vY2hlY2stcmV2LmNnaT8w -PAYJYIZIAYb4QgEHBC8WLWh0dHBzOi8vd3d3LnRydXN0Y2VudGVyLmRlL2NnaS1i -aW4vUmVuZXcuY2dpPzA+BglghkgBhvhCAQgEMRYvaHR0cDovL3d3dy50cnVzdGNl -bnRlci5kZS9ndWlkZWxpbmVzL2luZGV4Lmh0bWwwMgYJYIZIAYb4QgENBCUWI1RD -IFRydXN0Q2VudGVyIENsYXNzIDIgTFJBIEFkbWluIENBMBEGCWCGSAGG+EIBAQQE -AwIABzANBgkqhkiG9w0BAQQFAAOBgQCMoQBYc2Sgof2MpCM/r4Bs6uXJeoL/TC0i -p+18wPLPCO0SyiO8wPDrL9S3vF27HPnZWT1ocfrwTvhyFbQhvKc+xnW+yLRlprEU -lv4jHqhMWPLLK/5cNERpNj+SmHv9oDIBaNN9uJAvcO6c0VQsDOUMIf5alFZZR9A4 -lxnC/AsoOw== ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIDXDCCAsWgAwIBAgICA+swDQYJKoZIhvcNAQEEBQAwgbwxCzAJBgNVBAYTAkRF -MRAwDgYDVQQIEwdIYW1idXJnMRAwDgYDVQQHEwdIYW1idXJnMTowOAYDVQQKEzFU -QyBUcnVzdENlbnRlciBmb3IgU2VjdXJpdHkgaW4gRGF0YSBOZXR3b3JrcyBHbWJI -MSIwIAYDVQQLExlUQyBUcnVzdENlbnRlciBDbGFzcyAzIENBMSkwJwYJKoZIhvcN -AQkBFhpjZXJ0aWZpY2F0ZUB0cnVzdGNlbnRlci5kZTAeFw05ODAzMDkxMTU5NTla -Fw0xMTAxMDExMTU5NTlaMIG8MQswCQYDVQQGEwJERTEQMA4GA1UECBMHSGFtYnVy -ZzEQMA4GA1UEBxMHSGFtYnVyZzE6MDgGA1UEChMxVEMgVHJ1c3RDZW50ZXIgZm9y -IFNlY3VyaXR5IGluIERhdGEgTmV0d29ya3MgR21iSDEiMCAGA1UECxMZVEMgVHJ1 -c3RDZW50ZXIgQ2xhc3MgMyBDQTEpMCcGCSqGSIb3DQEJARYaY2VydGlmaWNhdGVA -dHJ1c3RjZW50ZXIuZGUwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBALa0wTUF -Lg2N7KBAahwOJ6ZQkmtQGwfeLud2zODa/ISoXoxjaitN2U4CdhHBC/KNecoAtvGw -Dtf7pBc9r6tpepYnv68zoZoqWarEtTcI8hKlMbZD9TKWcSgoq40oht+77uMMfTDW -w1Krj10nnGvAo+cFa1dJRLNu6mTP0o56UHd3AgMBAAGjazBpMA8GA1UdEwEB/wQF -MAMBAf8wDgYDVR0PAQH/BAQDAgGGMDMGCWCGSAGG+EIBCAQmFiRodHRwOi8vd3d3 -LnRydXN0Y2VudGVyLmRlL2d1aWRlbGluZXMwEQYJYIZIAYb4QgEBBAQDAgAHMA0G -CSqGSIb3DQEBBAUAA4GBABY9xs3Bu4VxhUafPiCPUSiZ7C1FIWMjWwS7TJC4iJIE -Tb19AaM/9uzO8d7+feXhPrvGq14L3T2WxMup1Pkm5gZOngylerpuw3yCGdHHsbHD -2w2Om0B8NwvxXej9H5CIpQ5ON2QhqE6NtJ/x3kit1VYYUimLRzQSCdS7kjXvD9s0 ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIENTCCA56gAwIBAgIBBDANBgkqhkiG9w0BAQQFADCBvDELMAkGA1UEBhMCREUx -EDAOBgNVBAgTB0hhbWJ1cmcxEDAOBgNVBAcTB0hhbWJ1cmcxOjA4BgNVBAoTMVRD -IFRydXN0Q2VudGVyIGZvciBTZWN1cml0eSBpbiBEYXRhIE5ldHdvcmtzIEdtYkgx -IjAgBgNVBAsTGVRDIFRydXN0Q2VudGVyIENsYXNzIDMgQ0ExKTAnBgkqhkiG9w0B -CQEWGmNlcnRpZmljYXRlQHRydXN0Y2VudGVyLmRlMB4XDTk4MDMwOTEzNTg0OVoX -DTA1MTIzMTEzNTg0OVowgbwxCzAJBgNVBAYTAkRFMRAwDgYDVQQIEwdIYW1idXJn -MRAwDgYDVQQHEwdIYW1idXJnMTowOAYDVQQKEzFUQyBUcnVzdENlbnRlciBmb3Ig -U2VjdXJpdHkgaW4gRGF0YSBOZXR3b3JrcyBHbWJIMSIwIAYDVQQLExlUQyBUcnVz -dENlbnRlciBDbGFzcyAzIENBMSkwJwYJKoZIhvcNAQkBFhpjZXJ0aWZpY2F0ZUB0 -cnVzdGNlbnRlci5kZTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAtrTBNQUu -DY3soEBqHA4nplCSa1AbB94u53bM4Nr8hKhejGNqK03ZTgJ2EcEL8o15ygC28bAO -1/ukFz2vq2l6lie/rzOhmipZqsS1NwjyEqUxtkP1MpZxKCirjSiG37vu4wx9MNbD -UquPXSeca8Cj5wVrV0lEs27qZM/SjnpQd3cCAwEAAaOCAUMwggE/MEAGCWCGSAGG -+EIBAwQzFjFodHRwczovL3d3dy50cnVzdGNlbnRlci5kZS9jZ2ktYmluL2NoZWNr -LXJldi5jZ2k/MEAGCWCGSAGG+EIBBAQzFjFodHRwczovL3d3dy50cnVzdGNlbnRl -ci5kZS9jZ2ktYmluL2NoZWNrLXJldi5jZ2k/MDwGCWCGSAGG+EIBBwQvFi1odHRw -czovL3d3dy50cnVzdGNlbnRlci5kZS9jZ2ktYmluL1JlbmV3LmNnaT8wPgYJYIZI -AYb4QgEIBDEWL2h0dHA6Ly93d3cudHJ1c3RjZW50ZXIuZGUvZ3VpZGVsaW5lcy9p -bmRleC5odG1sMCgGCWCGSAGG+EIBDQQbFhlUQyBUcnVzdENlbnRlciBDbGFzcyAz -IENBMBEGCWCGSAGG+EIBAQQEAwIABzANBgkqhkiG9w0BAQQFAAOBgQCEhlBieaAn -4SW6CbE0DxMJ7S3Ko+aV+TCszRelzj2Xnex8jyZ/wGHKIveR3Tw2WZqbdfe85Mjt -7AK2IqfzLPHIknhttu7FKOyAIE+5awjnL6eGHn2xCJ9UuQA3PKDYGsiWHPQyFJw5 -lbfu8ENJwl7oy3lvU7/7SYos2EvZVfIScA== ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIEqjCCA5KgAwIBAgIOSkcAAQAC5aBd1j8AUb8wDQYJKoZIhvcNAQEFBQAwdjEL -MAkGA1UEBhMCREUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVyIEdtYkgxIjAgBgNV -BAsTGVRDIFRydXN0Q2VudGVyIENsYXNzIDMgQ0ExJTAjBgNVBAMTHFRDIFRydXN0 -Q2VudGVyIENsYXNzIDMgQ0EgSUkwHhcNMDYwMTEyMTQ0MTU3WhcNMjUxMjMxMjI1 -OTU5WjB2MQswCQYDVQQGEwJERTEcMBoGA1UEChMTVEMgVHJ1c3RDZW50ZXIgR21i -SDEiMCAGA1UECxMZVEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMyBDQTElMCMGA1UEAxMc -VEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMyBDQSBJSTCCASIwDQYJKoZIhvcNAQEBBQAD -ggEPADCCAQoCggEBALTgu1G7OVyLBMVMeRwjhjEQY0NVJz/GRcekPewJDRoeIMJW -Ht4bNwcwIi9v8Qbxq63WyKthoy9DxLCyLfzDlml7forkzMA5EpBCYMnMNWju2l+Q -Vl/NHE1bWEnrDgFPZPosPIlY2C8u4rBo6SI7dYnWRBpl8huXJh0obazovVkdKyT2 -1oQDZogkAHhg8fir/gKya/si+zXmFtGt9i4S5Po1auUZuV3bOx4a+9P/FRQI2Alq -ukWdFHlgfa9Aigdzs5OW03Q0jTo3Kd5c7PXuLjHCINy+8U9/I1LZW+Jk2ZyqBwi1 -Rb3R0DHBq1SfqdLDYmAD8bs5SpJKPQq5ncWg/jcCAwEAAaOCATQwggEwMA8GA1Ud -EwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBTUovyfs8PYA9NX -XAek0CSnwPIA1DCB7QYDVR0fBIHlMIHiMIHfoIHcoIHZhjVodHRwOi8vd3d3LnRy -dXN0Y2VudGVyLmRlL2NybC92Mi90Y19jbGFzc18zX2NhX0lJLmNybIaBn2xkYXA6 -Ly93d3cudHJ1c3RjZW50ZXIuZGUvQ049VEMlMjBUcnVzdENlbnRlciUyMENsYXNz -JTIwMyUyMENBJTIwSUksTz1UQyUyMFRydXN0Q2VudGVyJTIwR21iSCxPVT1yb290 -Y2VydHMsREM9dHJ1c3RjZW50ZXIsREM9ZGU/Y2VydGlmaWNhdGVSZXZvY2F0aW9u -TGlzdD9iYXNlPzANBgkqhkiG9w0BAQUFAAOCAQEANmDkcPcGIEPZIxpC8vijsrlN -irTzwppVMXzEO2eatN9NDoqTSheLG43KieHPOh6sHfGcMrSOWXaiQYUlN6AT0PV8 -TtXqluJucsG7Kv5sbviRmEb8yRtXW+rIGjs/sFGYPAfaLFkB2otE6OF0/ado3VS6 -g0bsyEa1+K+XwDsJHI/OcpY9M1ZwvJbL2NV9IJqDnxrcOfHFcqMRA/07QlIp2+gB -95tejNaNhk4Z+rwcvsUhpYeeeC422wlxo3I0+GzjBgnyXlal092Y+tTmBvTwtiBj -S+opvaqCZh77gaqnN60TGOaSw4HBM7uIHqHn4rS9MWwOUT1v+5ZWgOI2F9Hc5A== ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIEUzCCA7ygAwIBAgIBCjANBgkqhkiG9w0BAQQFADCBxjELMAkGA1UEBhMCREUx -EDAOBgNVBAgTB0hhbWJ1cmcxEDAOBgNVBAcTB0hhbWJ1cmcxOjA4BgNVBAoTMVRD -IFRydXN0Q2VudGVyIGZvciBTZWN1cml0eSBpbiBEYXRhIE5ldHdvcmtzIEdtYkgx -LDAqBgNVBAsTI1RDIFRydXN0Q2VudGVyIENsYXNzIDMgTFJBLUFkbWluIENBMSkw -JwYJKoZIhvcNAQkBFhpjZXJ0aWZpY2F0ZUB0cnVzdGNlbnRlci5kZTAeFw05ODAz -MDkxNDA4MjJaFw0wNTEyMzExNDA4MjJaMIHGMQswCQYDVQQGEwJERTEQMA4GA1UE -CBMHSGFtYnVyZzEQMA4GA1UEBxMHSGFtYnVyZzE6MDgGA1UEChMxVEMgVHJ1c3RD -ZW50ZXIgZm9yIFNlY3VyaXR5IGluIERhdGEgTmV0d29ya3MgR21iSDEsMCoGA1UE -CxMjVEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMyBMUkEtQWRtaW4gQ0ExKTAnBgkqhkiG -9w0BCQEWGmNlcnRpZmljYXRlQHRydXN0Y2VudGVyLmRlMIGfMA0GCSqGSIb3DQEB -AQUAA4GNADCBiQKBgQDQCrjckP0s0ZieKAwDcveqxrX4uNaw1is1+zIPHx6DVPtU -xtelbka3AQW8/g5cOPjrFJd3hhh0f2QZ6Bl62uGhYQ6FhBPrWQm5fOkzOBz/8541 -tdR2OJXtJzxfqyt56YbBk9rM9HHKzYVHuP9JieQUqsH/bevA80Vk30oCtZ5ApwID -AQABo4IBTTCCAUkwQAYJYIZIAYb4QgEDBDMWMWh0dHBzOi8vd3d3LnRydXN0Y2Vu -dGVyLmRlL2NnaS1iaW4vY2hlY2stcmV2LmNnaT8wQAYJYIZIAYb4QgEEBDMWMWh0 -dHBzOi8vd3d3LnRydXN0Y2VudGVyLmRlL2NnaS1iaW4vY2hlY2stcmV2LmNnaT8w -PAYJYIZIAYb4QgEHBC8WLWh0dHBzOi8vd3d3LnRydXN0Y2VudGVyLmRlL2NnaS1i -aW4vUmVuZXcuY2dpPzA+BglghkgBhvhCAQgEMRYvaHR0cDovL3d3dy50cnVzdGNl -bnRlci5kZS9ndWlkZWxpbmVzL2luZGV4Lmh0bWwwMgYJYIZIAYb4QgENBCUWI1RD -IFRydXN0Q2VudGVyIENsYXNzIDMgTFJBIEFkbWluIENBMBEGCWCGSAGG+EIBAQQE -AwIABzANBgkqhkiG9w0BAQQFAAOBgQB6gF2gmlUFHM/tFjiR9SWs0I3Br/0egXds -bUWqFqLmhLWWjE5S73CyJPdh7w2tEh35/5EohLhrpy1Mr35ZZvNR4yhEfcgnZtDI -7IyljsPaOAiNIQWWl/VtAn13V99lESO71Hg6IzhUfe3W6P0XpQe2sWF3hZSf9O44 -NpghDjpk8A== ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIDXDCCAsWgAwIBAgICA+wwDQYJKoZIhvcNAQEEBQAwgbwxCzAJBgNVBAYTAkRF -MRAwDgYDVQQIEwdIYW1idXJnMRAwDgYDVQQHEwdIYW1idXJnMTowOAYDVQQKEzFU -QyBUcnVzdENlbnRlciBmb3IgU2VjdXJpdHkgaW4gRGF0YSBOZXR3b3JrcyBHbWJI -MSIwIAYDVQQLExlUQyBUcnVzdENlbnRlciBDbGFzcyA0IENBMSkwJwYJKoZIhvcN -AQkBFhpjZXJ0aWZpY2F0ZUB0cnVzdGNlbnRlci5kZTAeFw05ODAzMDkxMTU5NTla -Fw0xMTAxMDExMTU5NTlaMIG8MQswCQYDVQQGEwJERTEQMA4GA1UECBMHSGFtYnVy -ZzEQMA4GA1UEBxMHSGFtYnVyZzE6MDgGA1UEChMxVEMgVHJ1c3RDZW50ZXIgZm9y -IFNlY3VyaXR5IGluIERhdGEgTmV0d29ya3MgR21iSDEiMCAGA1UECxMZVEMgVHJ1 -c3RDZW50ZXIgQ2xhc3MgNCBDQTEpMCcGCSqGSIb3DQEJARYaY2VydGlmaWNhdGVA -dHJ1c3RjZW50ZXIuZGUwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAL8vY9Y2 -e7IN01X1ZGzmJV3GtMgUuiU4g+tWYqVVqWWj9COZwku50M1UZ6ajoKOpMyt25L2t -d7LtXBJ0w8W2D1KacpNDkGJmFQ9Fpd3g3bhvQG5XwXlyo2CqunYdEolTWvwCvuEJ -E8VKL9w9ixmt14skRftM9M1cNR0pTFHz8mxVAgMBAAGjazBpMA8GA1UdEwEB/wQF -MAMBAf8wDgYDVR0PAQH/BAQDAgGGMDMGCWCGSAGG+EIBCAQmFiRodHRwOi8vd3d3 -LnRydXN0Y2VudGVyLmRlL2d1aWRlbGluZXMwEQYJYIZIAYb4QgEBBAQDAgAHMA0G -CSqGSIb3DQEBBAUAA4GBAHIR5ZVBRTK6HPiAFPtmt+uums51g1HAroq7F9Eo53Yf -E8YrRnGmFXcEmedespEkbwMMc+cjnnbKvgzFy8SQGPxtOm7gVoAbw9+MNhNH+WXB -g1LVXFy92UJm4TUhaBIQpGCQPj+B6MOMobAVBFrO6yxUVkv5BHktneqMWS+teb1I ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIENTCCA56gAwIBAgIBBTANBgkqhkiG9w0BAQQFADCBvDELMAkGA1UEBhMCREUx -EDAOBgNVBAgTB0hhbWJ1cmcxEDAOBgNVBAcTB0hhbWJ1cmcxOjA4BgNVBAoTMVRD -IFRydXN0Q2VudGVyIGZvciBTZWN1cml0eSBpbiBEYXRhIE5ldHdvcmtzIEdtYkgx -IjAgBgNVBAsTGVRDIFRydXN0Q2VudGVyIENsYXNzIDQgQ0ExKTAnBgkqhkiG9w0B -CQEWGmNlcnRpZmljYXRlQHRydXN0Y2VudGVyLmRlMB4XDTk4MDMwOTE0MDAyMFoX -DTA1MTIzMTE0MDAyMFowgbwxCzAJBgNVBAYTAkRFMRAwDgYDVQQIEwdIYW1idXJn -MRAwDgYDVQQHEwdIYW1idXJnMTowOAYDVQQKEzFUQyBUcnVzdENlbnRlciBmb3Ig -U2VjdXJpdHkgaW4gRGF0YSBOZXR3b3JrcyBHbWJIMSIwIAYDVQQLExlUQyBUcnVz -dENlbnRlciBDbGFzcyA0IENBMSkwJwYJKoZIhvcNAQkBFhpjZXJ0aWZpY2F0ZUB0 -cnVzdGNlbnRlci5kZTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAvy9j1jZ7 -sg3TVfVkbOYlXca0yBS6JTiD61ZipVWpZaP0I5nCS7nQzVRnpqOgo6kzK3bkva13 -su1cEnTDxbYPUppyk0OQYmYVD0Wl3eDduG9AblfBeXKjYKq6dh0SiVNa/AK+4QkT -xUov3D2LGa3XiyRF+0z0zVw1HSlMUfPybFUCAwEAAaOCAUMwggE/MEAGCWCGSAGG -+EIBAwQzFjFodHRwczovL3d3dy50cnVzdGNlbnRlci5kZS9jZ2ktYmluL2NoZWNr -LXJldi5jZ2k/MEAGCWCGSAGG+EIBBAQzFjFodHRwczovL3d3dy50cnVzdGNlbnRl -ci5kZS9jZ2ktYmluL2NoZWNrLXJldi5jZ2k/MDwGCWCGSAGG+EIBBwQvFi1odHRw -czovL3d3dy50cnVzdGNlbnRlci5kZS9jZ2ktYmluL1JlbmV3LmNnaT8wPgYJYIZI -AYb4QgEIBDEWL2h0dHA6Ly93d3cudHJ1c3RjZW50ZXIuZGUvZ3VpZGVsaW5lcy9p -bmRleC5odG1sMCgGCWCGSAGG+EIBDQQbFhlUQyBUcnVzdENlbnRlciBDbGFzcyA0 -IENBMBEGCWCGSAGG+EIBAQQEAwIABzANBgkqhkiG9w0BAQQFAAOBgQCUaBQbJZ4p -mbGyI9JEs5Wf0Z5VBN3jL4IzVZZ3GZ0rnmUc+orjx48l/LEeVUYPj/9PNy+kdlmm -ZOvVFnC93ZUzDKQNJOtkULRDEfJDvg1xmCLsAa/s98dcccN1kVgZ6N2g9LTxvBBK -85O0Bkm7H2bSvXRH4Zr569erbR+64R0s2g== ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIDtjCCAp6gAwIBAgIOBcAAAQACQdAGCk3OdRAwDQYJKoZIhvcNAQEFBQAwdjEL -MAkGA1UEBhMCREUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVyIEdtYkgxIjAgBgNV -BAsTGVRDIFRydXN0Q2VudGVyIENsYXNzIDQgQ0ExJTAjBgNVBAMTHFRDIFRydXN0 -Q2VudGVyIENsYXNzIDQgQ0EgSUkwHhcNMDYwMzIzMTQxMDIzWhcNMjUxMjMxMjI1 -OTU5WjB2MQswCQYDVQQGEwJERTEcMBoGA1UEChMTVEMgVHJ1c3RDZW50ZXIgR21i -SDEiMCAGA1UECxMZVEMgVHJ1c3RDZW50ZXIgQ2xhc3MgNCBDQTElMCMGA1UEAxMc -VEMgVHJ1c3RDZW50ZXIgQ2xhc3MgNCBDQSBJSTCCASIwDQYJKoZIhvcNAQEBBQAD -ggEPADCCAQoCggEBALXNTJytrlG7fEjFDSmGehSt2VA9CXIgDRS2Y8b+WJ7gIV7z -jyIZ3E6RIM1viCmis8GsKnK6i1S4QF/yqvhDhsIwXMynXX/GCEnkDjkvjhjWkd0j -FnmA22xIHbzB3ygQY9GB493fL3l1oht48pQB5hBiecugfQLANIJ7x8CtHUzXapZ2 -W78mhEj9h/aECqqSB5lIPGG8ToVYx5ct/YFKocabEvVCUNFkPologiJw3fX64yhC -L04y87OjNopq1mJcrPoBbbTgci6VaLTxkwzGioLSHVPqfOA/QrcSWrjN2qUGZ8uh -d32llvCSHmcOHUJG5vnt+0dTf1cERh9GX8eu4I8CAwEAAaNCMEAwDwYDVR0TAQH/ -BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAYYwHQYDVR0OBBYEFB/quz4lGwa9pd1iBX7G -TFq/6A9DMA0GCSqGSIb3DQEBBQUAA4IBAQBYpCubTPfkpJKknGWYGWIi/HIy6QRd -xMRwLVpG3kxHiiW5ot3u6hKvSI3vK2fbO8w0mCr3CEf/Iq978fTr4jgCMxh1KBue -dmWsiANy8jhHHYz1nwqIUxAUu4DlDLNdjRfuHhkcho0UZ3iMksseIUn3f9MYv5x5 -+F0IebWqak2SNmy8eesOPXmK2PajVnBd3ttPedJ60pVchidlvqDTB4FAVd0Qy+BL -iILAkH0457+W4Ze6mqtCD9Of2J4VMxHL94J59bXAQVaS4d9VA61Iz9PyLrHHLVZM -ZHQqMc7cdalUR6SnQnIJ5+ECpkeyBM1CE+FhDOB4OiIgohxgQoaH96Xm ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIDQzCCAqygAwIBAgICA/EwDQYJKoZIhvcNAQEEBQAwgcExCzAJBgNVBAYTAkRF -MRAwDgYDVQQIEwdIYW1idXJnMRAwDgYDVQQHEwdIYW1idXJnMTowOAYDVQQKEzFU -QyBUcnVzdENlbnRlciBmb3IgU2VjdXJpdHkgaW4gRGF0YSBOZXR3b3JrcyBHbWJI -MSgwJgYDVQQLEx9UQyBUcnVzdENlbnRlciBUaW1lIFN0YW1waW5nIENBMSgwJgYD -VQQDEx9UQyBUcnVzdENlbnRlciBUaW1lIFN0YW1waW5nIENBMB4XDTk4MDMwOTEx -NTk1OVoXDTExMDEwMTExNTk1OVowgcExCzAJBgNVBAYTAkRFMRAwDgYDVQQIEwdI -YW1idXJnMRAwDgYDVQQHEwdIYW1idXJnMTowOAYDVQQKEzFUQyBUcnVzdENlbnRl -ciBmb3IgU2VjdXJpdHkgaW4gRGF0YSBOZXR3b3JrcyBHbWJIMSgwJgYDVQQLEx9U -QyBUcnVzdENlbnRlciBUaW1lIFN0YW1waW5nIENBMSgwJgYDVQQDEx9UQyBUcnVz -dENlbnRlciBUaW1lIFN0YW1waW5nIENBMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCB -iQKBgQC2S+Q2apwDjOkZb76H+fcwjD4vGE1U3ujMLAg9fEYvhAyd6+/7EZRj5+y0 -zRP9mvYwZcWKfciC0aO9EXsefr8v3GeBBFtwS+rhs7aYPbW+cNM+eV0LN5hYisP6 -mSiPAQRjHoB/d3LEXX//T1f/qslWd0Ot/BY3ajgvdEEZN6f/wwIDAQABo0gwRjAP -BgNVHRMBAf8EBTADAQH/MDMGCWCGSAGG+EIBCAQmFiRodHRwOi8vd3d3LnRydXN0 -Y2VudGVyLmRlL2d1aWRlbGluZXMwDQYJKoZIhvcNAQEEBQADgYEALqyPthmgpIxe -AbsJadYuBft2K2k118hvBqgb8tVfC8xL88FT9JW/nI5ss197C8bmnKfQLAM+1Tnh -nG7rQfjJZEO4PaJK4R5PhZLXG0duPxfar+wWPo4aiS1BidZpL0OqXS7y6NBU7g0W -xdpw2BJ0RK4WS3TtjAurNQpIaOxpAyk= ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIID3TCCAsWgAwIBAgIOHaIAAQAC7LdggHiNtgYwDQYJKoZIhvcNAQEFBQAweTEL -MAkGA1UEBhMCREUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVyIEdtYkgxJDAiBgNV -BAsTG1RDIFRydXN0Q2VudGVyIFVuaXZlcnNhbCBDQTEmMCQGA1UEAxMdVEMgVHJ1 -c3RDZW50ZXIgVW5pdmVyc2FsIENBIEkwHhcNMDYwMzIyMTU1NDI4WhcNMjUxMjMx -MjI1OTU5WjB5MQswCQYDVQQGEwJERTEcMBoGA1UEChMTVEMgVHJ1c3RDZW50ZXIg -R21iSDEkMCIGA1UECxMbVEMgVHJ1c3RDZW50ZXIgVW5pdmVyc2FsIENBMSYwJAYD -VQQDEx1UQyBUcnVzdENlbnRlciBVbml2ZXJzYWwgQ0EgSTCCASIwDQYJKoZIhvcN -AQEBBQADggEPADCCAQoCggEBAKR3I5ZEr5D0MacQ9CaHnPM42Q9e3s9B6DGtxnSR -JJZ4Hgmgm5qVSkr1YnwCqMqs+1oEdjneX/H5s7/zA1hV0qq34wQi0fiU2iIIAI3T -fCZdzHd55yx4Oagmcw6iXSVphU9VDprvxrlE4Vc93x9UIuVvZaozhDrzznq+VZeu -jRIPFDPiUHDDSYcTvFHe15gSWu86gzOSBnWLknwSaHtwag+1m7Z3W0hZneTvWq3z -wZ7U10VOylY0Ibw+F1tvdwxIAUMpsN0/lm7mlaoMwCC2/T42J5zjXM9OgdwZu5GQ -fezmlwQek8wiSdeXhrYTCjxDI3d+8NzmzSQfO4ObNDqDNOMCAwEAAaNjMGEwHwYD -VR0jBBgwFoAUkqR1LKSevoFE63n8isWVpesQdXMwDwYDVR0TAQH/BAUwAwEB/zAO -BgNVHQ8BAf8EBAMCAYYwHQYDVR0OBBYEFJKkdSyknr6BROt5/IrFlaXrEHVzMA0G -CSqGSIb3DQEBBQUAA4IBAQAo0uCG1eb4e/CX3CJrO5UUVg8RMKWaTzqwOuAGy2X1 -7caXJ/4l8lfmXpWMPmRgFVp/Lw0BxbFg/UU1z/CyvwbZ71q+s2IhtNerNXxTPqYn -8aEt2hojnczd7Dwtnic0XQ/CNnm8yUpiLe1r2X1BQ3y2qsrtYbE3ghUJGooWMNjs -ydZHcnhLEEYUjl8Or+zHL6sQ17bxbuyGssLoDZJz3KL0Dzq/YSMQiZxIQG5wALPT -ujdEWBF6AmqI8Dc08BnprNRlc/ZpjGSUOnmFKbAWKwyCPwacx/0QK54PLLae4xW/ -2TYcuiUaUj0a7CIMHOCkoj3w6DnPgcB77V0fb8XQC9eY ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIF3zCCA8egAwIBAgIOGTMAAQACKBqaBLzyVUUwDQYJKoZIhvcNAQEFBQAwejEL -MAkGA1UEBhMCREUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVyIEdtYkgxJDAiBgNV -BAsTG1RDIFRydXN0Q2VudGVyIFVuaXZlcnNhbCBDQTEnMCUGA1UEAxMeVEMgVHJ1 -c3RDZW50ZXIgVW5pdmVyc2FsIENBIElJMB4XDTA2MDMyMjE1NTgzNFoXDTMwMTIz -MTIyNTk1OVowejELMAkGA1UEBhMCREUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVy -IEdtYkgxJDAiBgNVBAsTG1RDIFRydXN0Q2VudGVyIFVuaXZlcnNhbCBDQTEnMCUG -A1UEAxMeVEMgVHJ1c3RDZW50ZXIgVW5pdmVyc2FsIENBIElJMIICIjANBgkqhkiG -9w0BAQEFAAOCAg8AMIICCgKCAgEAi9R3azRs5TbYalxeOO781R15Azt7g2JEgk6I -7d6D/+7MUGIFBZWZdpj2ufJf2AaRksL2LWYXH/1TA+iojWOpbuHWG4y8mLOLO9Tk -Lsp9hUkmW3m4GotAnn+7yT9jLM/RWny6KCJBElpN+Rd3/IX9wkngKhh/6aAsnPlE -/AxoOUL1JwW+jhV6YJ3wO8c85j4WvK923mq3ouGrRkXrjGV90ZfzlxElq1nroCLZ -gt2Y7X7i+qBhCkoy3iwX921E6oFHWZdXNwM53V6CItQzuPomCba8OYgvURVOm8M7 -3xOCiN1LNPIz1pDp81PcNXzAw9l8eLPNcD+NauCjgUjkKa1juPD8KGQ7mbN9/pqd -iPaZIgiRRxaJNXhdd6HPv0nh/SSUK2k2e+gc5iqQilvVOzRZQtxtz7sPQRxVzfUN -Wy4WIibvYR6X/OJTyM9bo8ep8boOhhLLE8oVx+zkNo3aXBM9ZdIOXXB03L+PemrB -Lg/Txl4PK1lszGFs/sBhTtnmT0ayWuIZFHCE+CAA7QGnl37DvRJckiMXoKUdRRcV -I5qSCLUiiI3cKyTr4LEXaNOvYb3ZhXj2jbp4yjeNY77nrB/fpUcJucglMVRGURFV -DYlcjdrSGC1z8rjVJ/VIIjfRYvd7Dcg4i6FKsPzQ8eu3hmPn4A5zf/1yUbXpfeJV -BWR4Z38CAwEAAaNjMGEwHwYDVR0jBBgwFoAUzdeQoW6jv9sw1toyJZAM5jkegGUw -DwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAYYwHQYDVR0OBBYEFM3XkKFu -o7/bMNbaMiWQDOY5HoBlMA0GCSqGSIb3DQEBBQUAA4ICAQB+FojoEw42zG4qhQc4 -xlaJeuNHIWZMUAgxWlHQ/KZeFHXeTDvs8e3MfhEHSmHu6rOOOqQzxu2KQmZP8Tx7 -yaUFQZmx7Cxb7tyW0ohTS3g0uW7muw/FeqZ8Dhjfbw90TNGp8aHp2FRkzF6WeKJW -GsFzshXGVwXf2vdIJIqOf2qp+U3pPmrOYCx9LZAI9mOPFdAtnIz/8f38DBZQVhT7 -upeG7rRJA1TuG1l/MDoCgoYhrv7wFfLfToPmmcW6NfcgkIw47XXP4S73BDD7Ua2O -giRAyn0pXdXZ92Vk/KqfdLh9kl3ShCngE+qK99CrxK7vFcXCifJ7tjtJmGHzTnKR -N4xJkunI7Cqg90lufA0kxmts8jgvynAF5X/fxisrgIDV2m/LQLvYG/AkyRDIRAJ+ -LtOYqqIN8SvQ2vqOHP9U6OFKbt2o1ni1N6WsZNUUI8cOpevhCTjXwHxgpV2Yj4wC -1dxWqPNNWKkL1HxkdAEy8t8PSoqpAqKiHYR3wvHMl700GXRd4nQ+dSf3r7/ufA5t -VIimVuImrTESPB5BeW0X6hNeH/Vcn0lZo7Ivo0LD+qh+v6WfSMlgYmIK371F3uNC -tVGW/cT1Gpm4UqJEzS1hjBWPgdVdotSQPYxuQGHDWV3Y2eH2dEcieXR92sqjbzcV -NvAsGnE8EXbfXRo+VGN4a2V+Hw== ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIEKzCCAxOgAwIBAgIEOsylTDANBgkqhkiG9w0BAQUFADBDMQswCQYDVQQGEwJE -SzEVMBMGA1UEChMMVERDIEludGVybmV0MR0wGwYDVQQLExRUREMgSW50ZXJuZXQg -Um9vdCBDQTAeFw0wMTA0MDUxNjMzMTdaFw0yMTA0MDUxNzAzMTdaMEMxCzAJBgNV -BAYTAkRLMRUwEwYDVQQKEwxUREMgSW50ZXJuZXQxHTAbBgNVBAsTFFREQyBJbnRl -cm5ldCBSb290IENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxLhA -vJHVYx/XmaCLDEAedLdInUaMArLgJF/wGROnN4NrXceO+YQwzho7+vvOi20jxsNu -Zp+Jpd/gQlBn+h9sHvTQBda/ytZO5GhgbEaqHF1j4QeGDmUApy6mcca8uYGoOn0a -0vnRrEvLznWv3Hv6gXPU/Lq9QYjUdLP5Xjg6PEOo0pVOd20TDJ2PeAG3WiAfAzc1 -4izbSysseLlJ28TQx5yc5IogCSEWVmb/Bexb4/DPqyQkXsN/cHoSxNK1EKC2IeGN -eGlVRGn1ypYcNIUXJXfi9i8nmHj9eQY6otZaQ8H/7AQ77hPv01ha/5Lr7K7a8jcD -R0G2l8ktCkEiu7vmpwIDAQABo4IBJTCCASEwEQYJYIZIAYb4QgEBBAQDAgAHMGUG -A1UdHwReMFwwWqBYoFakVDBSMQswCQYDVQQGEwJESzEVMBMGA1UEChMMVERDIElu -dGVybmV0MR0wGwYDVQQLExRUREMgSW50ZXJuZXQgUm9vdCBDQTENMAsGA1UEAxME -Q1JMMTArBgNVHRAEJDAigA8yMDAxMDQwNTE2MzMxN1qBDzIwMjEwNDA1MTcwMzE3 -WjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUbGQBx/2FbazI2p5QCIUItTxWqFAw -HQYDVR0OBBYEFGxkAcf9hW2syNqeUAiFCLU8VqhQMAwGA1UdEwQFMAMBAf8wHQYJ -KoZIhvZ9B0EABBAwDhsIVjUuMDo0LjADAgSQMA0GCSqGSIb3DQEBBQUAA4IBAQBO -Q8zR3R0QGwZ/t6T609lN+yOfI1Rb5osvBCiLtSdtiaHsmGnc540mgwV5dOy0uaOX -wTUA/RXaOYE6lTGQ3pfphqiZdwzlWqCE/xIWrG64jcN7ksKsLtB9KOy282A4aW8+ -2ARVPp7MVdK6/rtHBNcK2RYKNCn1WBPVT8+PVkuzHu7TmHnaCB4Mb7j4Fifvwm89 -9qNLPg7kbWzbO0ESm70NRyN/PErQr8Cv9u8btRXE64PECV90i9kR+8JWsTz4cMo0 -jUNAE4z9mQNUecYu6oah9jrUCbz0vGbMPVjQV0kK7iXiQe4T+Zs4NNEA9X7nlB38 -aQNiuJkFBT1reBK9sG9l ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIFGTCCBAGgAwIBAgIEPki9xDANBgkqhkiG9w0BAQUFADAxMQswCQYDVQQGEwJE -SzEMMAoGA1UEChMDVERDMRQwEgYDVQQDEwtUREMgT0NFUyBDQTAeFw0wMzAyMTEw -ODM5MzBaFw0zNzAyMTEwOTA5MzBaMDExCzAJBgNVBAYTAkRLMQwwCgYDVQQKEwNU -REMxFDASBgNVBAMTC1REQyBPQ0VTIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A -MIIBCgKCAQEArGL2YSCyz8DGhdfjeebM7fI5kqSXLmSjhFuHnEz9pPPEXyG9VhDr -2y5h7JNp46PMvZnDBfwGuMo2HP6QjklMxFaaL1a8z3sM8W9Hpg1DTeLpHTk0zY0s -2RKY+ePhwUp8hjjEqcRhiNJerxomTdXkoCJHhNlktxmW/OwZ5LKXJk5KTMuPJItU -GBxIYXvViGjaXbXqzRowwYCDdlCqT9HU3Tjw7xb04QxQBr/q+3pJoSgrHPb8FTKj -dGqPqcNiKXEx5TukYBdedObaE+3pHx8b0bJoc8YQNHVGEBDjkAB2QMuLt0MJIf+r -TpPGWOmlgtt3xDqZsXKVSQTwtyv6e1mO3QIDAQABo4ICNzCCAjMwDwYDVR0TAQH/ -BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwgewGA1UdIASB5DCB4TCB3gYIKoFQgSkB -AQEwgdEwLwYIKwYBBQUHAgEWI2h0dHA6Ly93d3cuY2VydGlmaWthdC5kay9yZXBv -c2l0b3J5MIGdBggrBgEFBQcCAjCBkDAKFgNUREMwAwIBARqBgUNlcnRpZmlrYXRl -ciBmcmEgZGVubmUgQ0EgdWRzdGVkZXMgdW5kZXIgT0lEIDEuMi4yMDguMTY5LjEu -MS4xLiBDZXJ0aWZpY2F0ZXMgZnJvbSB0aGlzIENBIGFyZSBpc3N1ZWQgdW5kZXIg -T0lEIDEuMi4yMDguMTY5LjEuMS4xLjARBglghkgBhvhCAQEEBAMCAAcwgYEGA1Ud -HwR6MHgwSKBGoESkQjBAMQswCQYDVQQGEwJESzEMMAoGA1UEChMDVERDMRQwEgYD -VQQDEwtUREMgT0NFUyBDQTENMAsGA1UEAxMEQ1JMMTAsoCqgKIYmaHR0cDovL2Ny -bC5vY2VzLmNlcnRpZmlrYXQuZGsvb2Nlcy5jcmwwKwYDVR0QBCQwIoAPMjAwMzAy -MTEwODM5MzBagQ8yMDM3MDIxMTA5MDkzMFowHwYDVR0jBBgwFoAUYLWF7FZkfhIZ -J2cdUBVLc647+RIwHQYDVR0OBBYEFGC1hexWZH4SGSdnHVAVS3OuO/kSMB0GCSqG -SIb2fQdBAAQQMA4bCFY2LjA6NC4wAwIEkDANBgkqhkiG9w0BAQUFAAOCAQEACrom -JkbTc6gJ82sLMJn9iuFXehHTuJTXCRBuo7E4A9G28kNBKWKnctj7fAXmMXAnVBhO -inxO5dHKjHiIzxvTkIvmI/gLDjNDfZziChmPyQE+dF10yYscA+UYyAFMP8uXBV2Y -caaYb7Z8vTd/vuGTJW1v8AqtFxjhA7wHKcitJuj4YfD9IQl+mo6paH1IYnK9AOoB -mbgGglGBTvH1tJFUuSN6AJqfXY3gPGS5GhKSKseCRHI53OI8xthV9RVOyAUO28bQ -YqbsFbS1AoLbrIyigfCbmTH1ICCoiGEKB5+U/NDXG8wuF/MEJ3Zn61SD/aSQfgY9 -BKNDLdr8C2LqL19iUw== ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIDITCCAoqgAwIBAgIBADANBgkqhkiG9w0BAQQFADCByzELMAkGA1UEBhMCWkEx -FTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMRowGAYD -VQQKExFUaGF3dGUgQ29uc3VsdGluZzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBT -ZXJ2aWNlcyBEaXZpc2lvbjEhMB8GA1UEAxMYVGhhd3RlIFBlcnNvbmFsIEJhc2lj -IENBMSgwJgYJKoZIhvcNAQkBFhlwZXJzb25hbC1iYXNpY0B0aGF3dGUuY29tMB4X -DTk2MDEwMTAwMDAwMFoXDTIwMTIzMTIzNTk1OVowgcsxCzAJBgNVBAYTAlpBMRUw -EwYDVQQIEwxXZXN0ZXJuIENhcGUxEjAQBgNVBAcTCUNhcGUgVG93bjEaMBgGA1UE -ChMRVGhhd3RlIENvbnN1bHRpbmcxKDAmBgNVBAsTH0NlcnRpZmljYXRpb24gU2Vy -dmljZXMgRGl2aXNpb24xITAfBgNVBAMTGFRoYXd0ZSBQZXJzb25hbCBCYXNpYyBD -QTEoMCYGCSqGSIb3DQEJARYZcGVyc29uYWwtYmFzaWNAdGhhd3RlLmNvbTCBnzAN -BgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAvLyTU23AUE+CFeZIlDWmWr5vQvoPR+53 -dXLdjUmbllegeNTKP1GzaQuRdhciB5dqxFGTS+CN7zeVoQxN2jSQHReJl+A1OFdK -wPQIcOk8RHtQfmGakOMj04gRRif1CwcOu93RfyAKiLlWCy4cgNrx454p7xS9CkT7 -G1sY0b8jkyECAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQQF -AAOBgQAt4plrsD16iddZopQBHyvdEktTwq1/qqcAXJFAVyVKOKqEcLnZgA+le1z7 -c8a914phXAPjLSeoF+CEhULcXpvGt7Jtu3Sv5D/Lp7ew4F2+eIMllNLbgQ95B21P -9DkVWlIBe94y1k049hJcBlDfBVu9FEuh3ym6O0GN92NWod8isQ== ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIDLTCCApagAwIBAgIBADANBgkqhkiG9w0BAQQFADCB0TELMAkGA1UEBhMCWkEx -FTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMRowGAYD -VQQKExFUaGF3dGUgQ29uc3VsdGluZzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBT -ZXJ2aWNlcyBEaXZpc2lvbjEkMCIGA1UEAxMbVGhhd3RlIFBlcnNvbmFsIEZyZWVt -YWlsIENBMSswKQYJKoZIhvcNAQkBFhxwZXJzb25hbC1mcmVlbWFpbEB0aGF3dGUu -Y29tMB4XDTk2MDEwMTAwMDAwMFoXDTIwMTIzMTIzNTk1OVowgdExCzAJBgNVBAYT -AlpBMRUwEwYDVQQIEwxXZXN0ZXJuIENhcGUxEjAQBgNVBAcTCUNhcGUgVG93bjEa -MBgGA1UEChMRVGhhd3RlIENvbnN1bHRpbmcxKDAmBgNVBAsTH0NlcnRpZmljYXRp -b24gU2VydmljZXMgRGl2aXNpb24xJDAiBgNVBAMTG1RoYXd0ZSBQZXJzb25hbCBG -cmVlbWFpbCBDQTErMCkGCSqGSIb3DQEJARYccGVyc29uYWwtZnJlZW1haWxAdGhh -d3RlLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA1GnX1LCUZFtx6UfY -DFG26nKRsIRefS0Nj3sS34UldSh0OkIsYyeflXtL734Zhx2G6qPduc6WZBrCFG5E -rHzmj+hND3EfQDimAKOHePb5lIZererAXnbr2RSjXW56fAylS1V/Bhkpf56aJtVq -uzgkCGqYx7Hao5iR/Xnb5VrEHLkCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zAN -BgkqhkiG9w0BAQQFAAOBgQDH7JJ+Tvj1lqVnYiqk8E0RYNBvjWBYYawmu1I1XAjP -MPuoSpaKH2JCI4wXD/S6ZJwXrEcp352YXtJsYHFcoqzceePnbgBHH7UNKOgCneSa -/RP0ptl8sfjcXyMmCZGAc9AUG95DqYMl8uacLxXK/qarigd1iwzdUYRr5PjRznei -gQ== ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIDKTCCApKgAwIBAgIBADANBgkqhkiG9w0BAQQFADCBzzELMAkGA1UEBhMCWkEx -FTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMRowGAYD -VQQKExFUaGF3dGUgQ29uc3VsdGluZzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBT -ZXJ2aWNlcyBEaXZpc2lvbjEjMCEGA1UEAxMaVGhhd3RlIFBlcnNvbmFsIFByZW1p -dW0gQ0ExKjAoBgkqhkiG9w0BCQEWG3BlcnNvbmFsLXByZW1pdW1AdGhhd3RlLmNv -bTAeFw05NjAxMDEwMDAwMDBaFw0yMDEyMzEyMzU5NTlaMIHPMQswCQYDVQQGEwJa -QTEVMBMGA1UECBMMV2VzdGVybiBDYXBlMRIwEAYDVQQHEwlDYXBlIFRvd24xGjAY -BgNVBAoTEVRoYXd0ZSBDb25zdWx0aW5nMSgwJgYDVQQLEx9DZXJ0aWZpY2F0aW9u -IFNlcnZpY2VzIERpdmlzaW9uMSMwIQYDVQQDExpUaGF3dGUgUGVyc29uYWwgUHJl -bWl1bSBDQTEqMCgGCSqGSIb3DQEJARYbcGVyc29uYWwtcHJlbWl1bUB0aGF3dGUu -Y29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDJZtn4B0TPuYwu8KHvE0Vs -Bd/eJxZRNkERbGw77f4QfRKe5ZtCmv5gMcNmt3M6SK5O0DI3lIi1DbbZ8/JE2dWI -Et12TfIa/G8jHnrx2JhFTgcQ7xZC0EN1bUre4qrJMf8fAHB8Zs8QJQi6+u4A6UYD -ZicRFTuqW/KY3TZCstqIdQIDAQABoxMwETAPBgNVHRMBAf8EBTADAQH/MA0GCSqG -SIb3DQEBBAUAA4GBAGk2ifc0KjNyL2071CKyuG+axTZmDhs8obF1Wub9NdP4qPIH -b4Vnjt4rueIXsDqg8A6iAJrf8xQVbrvIhVqYgPn/vnQdPfP+MCXRNzRn+qVxeTBh -KXLA4CxM+1bkOqhv5TJZUtt1KFBZDPgLGeSs2a+WjS9Q2wfD6h+rM+D1KzGJ ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIDJzCCApCgAwIBAgIBATANBgkqhkiG9w0BAQQFADCBzjELMAkGA1UEBhMCWkEx -FTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYD -VQQKExRUaGF3dGUgQ29uc3VsdGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlv -biBTZXJ2aWNlcyBEaXZpc2lvbjEhMB8GA1UEAxMYVGhhd3RlIFByZW1pdW0gU2Vy -dmVyIENBMSgwJgYJKoZIhvcNAQkBFhlwcmVtaXVtLXNlcnZlckB0aGF3dGUuY29t -MB4XDTk2MDgwMTAwMDAwMFoXDTIwMTIzMTIzNTk1OVowgc4xCzAJBgNVBAYTAlpB -MRUwEwYDVQQIEwxXZXN0ZXJuIENhcGUxEjAQBgNVBAcTCUNhcGUgVG93bjEdMBsG -A1UEChMUVGhhd3RlIENvbnN1bHRpbmcgY2MxKDAmBgNVBAsTH0NlcnRpZmljYXRp -b24gU2VydmljZXMgRGl2aXNpb24xITAfBgNVBAMTGFRoYXd0ZSBQcmVtaXVtIFNl -cnZlciBDQTEoMCYGCSqGSIb3DQEJARYZcHJlbWl1bS1zZXJ2ZXJAdGhhd3RlLmNv -bTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA0jY2aovXwlue2oFBYo847kkE -VdbQ7xwblRZH7xhINTpS9CtqBo87L+pW46+GjZ4X9560ZXUCTe/LCaIhUdib0GfQ -ug2SBhRz1JPLlyoAnFxODLz6FVL88kRu2hFKbgifLy3j+ao6hnO2RlNYyIkFvYMR -uHM/qgeN9EJN50CdHDcCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG -9w0BAQQFAAOBgQAmSCwWwlj66BZ0DKqqX1Q/8tfJeGBeXm43YyJ3Nn6yF8Q0ufUI -hfzJATj/Tb7yFkJD57taRvvBxhEf8UqwKEbJw8RCfbz6q1lu1bdRiBHjpIUZa4JM -pAwSremkrj/xw0llmozFyD4lt5SZu5IycQfwhl7tUCemDaYj+bvLpgcUQg== ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIEIDCCAwigAwIBAgIQNE7VVyDV7exJ9C/ON9srbTANBgkqhkiG9w0BAQUFADCB -qTELMAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjEoMCYGA1UECxMf -Q2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMvKGMpIDIw -MDYgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxHzAdBgNV -BAMTFnRoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EwHhcNMDYxMTE3MDAwMDAwWhcNMzYw -NzE2MjM1OTU5WjCBqTELMAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5j -LjEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjE4MDYG -A1UECxMvKGMpIDIwMDYgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl -IG9ubHkxHzAdBgNVBAMTFnRoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EwggEiMA0GCSqG -SIb3DQEBAQUAA4IBDwAwggEKAoIBAQCsoPD7gFnUnMekz52hWXMJEEUMDSxuaPFs -W0hoSVk3/AszGcJ3f8wQLZU0HObrTQmnHNK4yZc2AreJ1CRfBsDMRJSUjQJib+ta -3RGNKJpchJAQeg29dGYvajig4tVUROsdB58Hum/u6f1OCyn1PoSgAfGcq/gcfomk -6KHYcWUNo1F77rzSImANuVud37r8UVsLr5iy6S7pBOhih94ryNdOwUxkHt3Ph1i6 -Sk/KaAcdHJ1KxtUvkcx8cXIcxcBn6zL9yZJclNqFwJu/U30rCfSMnZEfl2pSy94J -NqR32HuHUETVPm4pafs5SSYeCaWAe0At6+gnhcn+Yf1+5nyXHdWdAgMBAAGjQjBA -MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBR7W0XP -r87Lev0xkhpqtvNG61dIUDANBgkqhkiG9w0BAQUFAAOCAQEAeRHAS7ORtvzw6WfU -DW5FvlXok9LOAz/t2iWwHVfLHjp2oEzsUHboZHIMpKnxuIvW1oeEuzLlQRHAd9mz -YJ3rG9XRbkREqaYB7FViHXe4XI5ISXycO1cRrK1zN44veFyQaEfZYGDm/Ac9IiAX -xPcW6cTYcvnIc3zfFi8VqT79aie2oetaupgf1eNNZAqdE8hhuvU5HIe6uL17In/2 -/qxAeeWsEG89jxt5dovEN7MhGITlNgDrYyCZuen+MwS7QcjBAvlEYyCegc5C09Y/ -LHbTY5xZ3Y+m4Q6gLkH3LpVHz7z9M/P2C2F+fpErgUfCJzDupxBdN49cOSvkBPB7 -jVaMaA== ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIDEzCCAnygAwIBAgIBATANBgkqhkiG9w0BAQQFADCBxDELMAkGA1UEBhMCWkEx -FTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYD -VQQKExRUaGF3dGUgQ29uc3VsdGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlv -biBTZXJ2aWNlcyBEaXZpc2lvbjEZMBcGA1UEAxMQVGhhd3RlIFNlcnZlciBDQTEm -MCQGCSqGSIb3DQEJARYXc2VydmVyLWNlcnRzQHRoYXd0ZS5jb20wHhcNOTYwODAx -MDAwMDAwWhcNMjAxMjMxMjM1OTU5WjCBxDELMAkGA1UEBhMCWkExFTATBgNVBAgT -DFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYDVQQKExRUaGF3 -dGUgQ29uc3VsdGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNl -cyBEaXZpc2lvbjEZMBcGA1UEAxMQVGhhd3RlIFNlcnZlciBDQTEmMCQGCSqGSIb3 -DQEJARYXc2VydmVyLWNlcnRzQHRoYXd0ZS5jb20wgZ8wDQYJKoZIhvcNAQEBBQAD -gY0AMIGJAoGBANOkUG7I/1Zr5s9dtuoMaHVHoqrC2oQl/Kj0R1HahbUgdJSGHg91 -yekIYfUGbTBuFRkC6VLAYttNmZ7iagxEOM3+vuNkCXDF/rFrKbYvScg71CcEJRCX -L+eQbcAoQpnXTEPew/UhbVSfXcNY4cDk2VuwuNy0e982OsK1ZiIS1ocNAgMBAAGj -EzARMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEEBQADgYEAB/pMaVz7lcxG -7oWDTSEwjsrZqG9JGubaUeNgcGyEYRGhGshIPllDfU+VPaGLtwtimHp1it2ITk6e -QNuozDJ0uW8NxuOzRAvZim+aKZuZGCg70eNAKJpaPNW15yAbi8qkq43pUdniTCxZ -qdq5snUb9kLy78fyGPmJvKP/iiMucEc= ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIEQzCCAyugAwIBAgIBATANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJHQjEb -MBkGA1UECAwSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRow -GAYDVQQKDBFDb21vZG8gQ0EgTGltaXRlZDElMCMGA1UEAwwcVHJ1c3RlZCBDZXJ0 -aWZpY2F0ZSBTZXJ2aWNlczAeFw0wNDAxMDEwMDAwMDBaFw0yODEyMzEyMzU5NTla -MH8xCzAJBgNVBAYTAkdCMRswGQYDVQQIDBJHcmVhdGVyIE1hbmNoZXN0ZXIxEDAO -BgNVBAcMB1NhbGZvcmQxGjAYBgNVBAoMEUNvbW9kbyBDQSBMaW1pdGVkMSUwIwYD -VQQDDBxUcnVzdGVkIENlcnRpZmljYXRlIFNlcnZpY2VzMIIBIjANBgkqhkiG9w0B -AQEFAAOCAQ8AMIIBCgKCAQEA33FvNlhTWvI2VFeAxHQIIO0Yfyod5jWaHiWsnOWW -fnJSoBVC21ndZHoa0Lh73TkVvFVIxO06AOoxEbrycXQaZ7jPM8yoMa+j49d/vzMt -TGo87IvDktJTdyR0nAducPy9C1t2ul/y/9c3S0pgePfw+spwtOpZqqPOSC+pw7IL -fhdyFgymBwwbOM/JYrc/oJOlh0Hyt3BAd9i+FHzjqMB6juljatEPmsbS9Is6FARW -1O24zG71++IsWL1/T2sr92AkWCTOJu80kTrV44HQsvAEAtdbtz6SrGsSivnkBbA7 -kUlcsutT6vifR4buv5XAwAaf0lteERv0xwQ1KdJVXOTt6wIDAQABo4HJMIHGMB0G -A1UdDgQWBBTFe1i97doladL3WRaoszLAeydb9DAOBgNVHQ8BAf8EBAMCAQYwDwYD -VR0TAQH/BAUwAwEB/zCBgwYDVR0fBHwwejA8oDqgOIY2aHR0cDovL2NybC5jb21v -ZG9jYS5jb20vVHJ1c3RlZENlcnRpZmljYXRlU2VydmljZXMuY3JsMDqgOKA2hjRo -dHRwOi8vY3JsLmNvbW9kby5uZXQvVHJ1c3RlZENlcnRpZmljYXRlU2VydmljZXMu -Y3JsMA0GCSqGSIb3DQEBBQUAA4IBAQDIk4E7ibSvuIQSTI3S8NtwuleGFTQQuS9/ -HrCoiWChisJ3DFBKmwCL2Iv0QeLQg4pKHBQGsKNoBXAxMKdTmw7pSqBYaWcOrp32 -pSxBvzwGa+RZzG0Q8ZZvH9/0BAKkn0U+yNj6NkZEUD+Cl5EfKNsYEYwq5GWDVxIS -jBc/lDb+XbDABHcTuPQV1T84zJQ6VdCsmPW6AF/ghhmBeC8owH7TzEIK9a5QoNE+ -xqFx7D+gIIxmOom0jtTYsU0lR+4viMi14QVFwL4Ucd56/Y57fU0IlqUSc/Atyjcn -dBInTMu2l+nZrghtWjlA3QVHdWpaIbOjGM9O9y5Xt5hwXsjEeLBi ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIID+zCCAuOgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBtzE/MD0GA1UEAww2VMOc -UktUUlVTVCBFbGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sx -c8SxMQswCQYDVQQGDAJUUjEPMA0GA1UEBwwGQU5LQVJBMVYwVAYDVQQKDE0oYykg -MjAwNSBUw5xSS1RSVVNUIEJpbGdpIMSwbGV0acWfaW0gdmUgQmlsacWfaW0gR8O8 -dmVubGnEn2kgSGl6bWV0bGVyaSBBLsWeLjAeFw0wNTA1MTMxMDI3MTdaFw0xNTAz -MjIxMDI3MTdaMIG3MT8wPQYDVQQDDDZUw5xSS1RSVVNUIEVsZWt0cm9uaWsgU2Vy -dGlmaWthIEhpem1ldCBTYcSfbGF5xLFjxLFzxLExCzAJBgNVBAYMAlRSMQ8wDQYD -VQQHDAZBTktBUkExVjBUBgNVBAoMTShjKSAyMDA1IFTDnFJLVFJVU1QgQmlsZ2kg -xLBsZXRpxZ9pbSB2ZSBCaWxpxZ9pbSBHw7x2ZW5sacSfaSBIaXptZXRsZXJpIEEu -xZ4uMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAylIF1mMD2Bxf3dJ7 -XfIMYGFbazt0K3gNfUW9InTojAPBxhEqPZW8qZSwu5GXyGl8hMW0kWxsE2qkVa2k -heiVfrMArwDCBRj1cJ02i67L5BuBf5OI+2pVu32Fks66WJ/bMsW9Xe8iSi9BB35J -YbOG7E6mQW6EvAPs9TscyB/C7qju6hJKjRTP8wrgUDn5CDX4EVmt5yLqS8oUBt5C -urKZ8y1UiBAG6uEaPj1nH/vO+3yC6BFdSsG5FOpU2WabfIl9BJpiyelSPJ6c79L1 -JuTm5Rh8i27fbMx4W09ysstcP4wFjdFMjK2Sx+F4f2VsSQZQLJ4ywtdKxnWKWU51 -b0dewQIDAQABoxAwDjAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEBBQUAA4IBAQAV -9VX/N5aAWSGk/KEVTCD21F/aAyT8z5Aa9CEKmu46sWrv7/hg0Uw2ZkUd82YCdAR7 -kjCo3gp2D++Vbr3JN+YaDayJSFvMgzbC9UZcWYJWtNX+I7TYVBxEq8Sn5RTOPEFh -fEPmzcSBCYsk+1Ql1haolgxnB2+zUEfjHCQo3SqYpGH+2+oSN7wBGjSFvW5P55Fy -B0SFHljKVETd96y5y4khctuPwGkplyqjrhgjlxxBKot8KsF8kOipKMDTkcatKIdA -aLX/7KfS0zgYnNN9aV3wxqUeJBujR/xpB2jn5Jq07Q+hh4cCzofSSE7hvP/L8XKS -RGQDJereW26fyfJOrN3H ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIEPTCCAyWgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBvzE/MD0GA1UEAww2VMOc -UktUUlVTVCBFbGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sx -c8SxMQswCQYDVQQGEwJUUjEPMA0GA1UEBwwGQW5rYXJhMV4wXAYDVQQKDFVUw5xS -S1RSVVNUIEJpbGdpIMSwbGV0acWfaW0gdmUgQmlsacWfaW0gR8O8dmVubGnEn2kg -SGl6bWV0bGVyaSBBLsWeLiAoYykgQXJhbMSxayAyMDA3MB4XDTA3MTIyNTE4Mzcx -OVoXDTE3MTIyMjE4MzcxOVowgb8xPzA9BgNVBAMMNlTDnFJLVFJVU1QgRWxla3Ry -b25payBTZXJ0aWZpa2EgSGl6bWV0IFNhxJ9sYXnEsWPEsXPEsTELMAkGA1UEBhMC -VFIxDzANBgNVBAcMBkFua2FyYTFeMFwGA1UECgxVVMOcUktUUlVTVCBCaWxnaSDE -sGxldGnFn2ltIHZlIEJpbGnFn2ltIEfDvHZlbmxpxJ9pIEhpem1ldGxlcmkgQS7F -ni4gKGMpIEFyYWzEsWsgMjAwNzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC -ggEBAKu3PgqMyKVYFeaK7yc9SrToJdPNM8Ig3BnuiD9NYvDdE3ePYakqtdTyuTFY -KTsvP2qcb3N2Je40IIDu6rfwxArNK4aUyeNgsURSsloptJGXg9i3phQvKUmi8wUG -+7RP2qFsmmaf8EMJyupyj+sA1zU511YXRxcw9L6/P8JorzZAwan0qafoEGsIiveG -HtyaKhUG9qPw9ODHFNRRf8+0222vR5YXm3dx2KdxnSQM9pQ/hTEST7ruToK4uT6P -IzdezKKqdfcYbwnTrqdUKDT74eA7YH2gvnmJhsifLfkKS8RQouf9eRbHegsYz85M -733WB2+Y8a+xwXrXgTW4qhe04MsCAwEAAaNCMEAwHQYDVR0OBBYEFCnFkKslrxHk -Yb+j/4hhkeYO/pyBMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MA0G -CSqGSIb3DQEBBQUAA4IBAQAQDdr4Ouwo0RSVgrESLFF6QSU2TJ/sPx+EnWVUXKgW -AkD6bho3hO9ynYYKVZ1WKKxmLNA6VpM0ByWtCLCPyA8JWcqdmBzlVPi5RX9ql2+I -aE1KBiY3iAIOtsbWcpnOa3faYjGkVh+uX4132l32iPwa2Z61gfAyuOOI0JzzaqC5 -mxRZNTZPz/OOXl0XrRWV2N2y1RVuAE6zS89mlOTgzbUF2mNXi+WzqtvALhyQRNsa -XRik7r4EW5nVcV9VZWRi1aKbBFmGyGJ353yCRWo9F7/snXUMrqNvWtMvmDb08PUZ -qxFdyKbjKlhqQgnDvZImZjINXQhVdP+MmNAKpoRq0Tl9 ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIEXjCCA0agAwIBAgIQRL4Mi1AAIbQR0ypoBqmtaTANBgkqhkiG9w0BAQUFADCB -kzELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2Ug -Q2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExho -dHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xGzAZBgNVBAMTElVUTiAtIERBVEFDb3Jw -IFNHQzAeFw05OTA2MjQxODU3MjFaFw0xOTA2MjQxOTA2MzBaMIGTMQswCQYDVQQG -EwJVUzELMAkGA1UECBMCVVQxFzAVBgNVBAcTDlNhbHQgTGFrZSBDaXR5MR4wHAYD -VQQKExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxITAfBgNVBAsTGGh0dHA6Ly93d3cu -dXNlcnRydXN0LmNvbTEbMBkGA1UEAxMSVVROIC0gREFUQUNvcnAgU0dDMIIBIjAN -BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA3+5YEKIrblXEjr8uRgnn4AgPLit6 -E5Qbvfa2gI5lBZMAHryv4g+OGQ0SR+ysraP6LnD43m77VkIVni5c7yPeIbkFdicZ -D0/Ww5y0vpQZY/KmEQrrU0icvvIpOxboGqBMpsn0GFlowHDyUwDAXlCCpVZvNvlK -4ESGoE1O1kduSUrLZ9emxAW5jh70/P/N5zbgnAVssjMiFdC04MwXwLLA9P4yPykq -lXvY8qdOD1R8oQ2AswkDwf9c3V6aPryuvEeKaq5xyh+xKrhfQgUL7EYw0XILyulW -bfXv33i+Ybqypa4ETLyorGkVl73v67SMvzX41MPRKA5cOp9wGDMgd8SirwIDAQAB -o4GrMIGoMAsGA1UdDwQEAwIBxjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRT -MtGzz3/64PGgXYVOktKeRR20TzA9BgNVHR8ENjA0MDKgMKAuhixodHRwOi8vY3Js -LnVzZXJ0cnVzdC5jb20vVVROLURBVEFDb3JwU0dDLmNybDAqBgNVHSUEIzAhBggr -BgEFBQcDAQYKKwYBBAGCNwoDAwYJYIZIAYb4QgQBMA0GCSqGSIb3DQEBBQUAA4IB -AQAnNZcAiosovcYzMB4p/OL31ZjUQLtgyr+rFywJNn9Q+kHcrpY6CiM+iVnJowft -Gzet/Hy+UUla3joKVAgWRcKZsYfNjGjgaQPpxE6YsjuMFrMOoAyYUJuTqXAJyCyj -j98C5OBxOvG0I3KgqgHf35g+FFCgMSa9KOlaMCZ1+XtgHI3zzVAmbQQnmt/VDUVH -KWss5nbZqSl9Mt3JNjy9rjXxEZ4du5A/EkdOjtd+D2JzHVImOBwYSf0wdJrE5SIv -2MCN7ZF6TACPcn9d2t0bi0Vr591pl6jFVkwPDPafepE39peC4N1xaf92P2BNPM/3 -mfnGV/TJVTl4uix5yaaIK/QI ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIEojCCA4qgAwIBAgIQRL4Mi1AAJLQR0zYlJWfJiTANBgkqhkiG9w0BAQUFADCB -rjELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2Ug -Q2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExho -dHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xNjA0BgNVBAMTLVVUTi1VU0VSRmlyc3Qt -Q2xpZW50IEF1dGhlbnRpY2F0aW9uIGFuZCBFbWFpbDAeFw05OTA3MDkxNzI4NTBa -Fw0xOTA3MDkxNzM2NThaMIGuMQswCQYDVQQGEwJVUzELMAkGA1UECBMCVVQxFzAV -BgNVBAcTDlNhbHQgTGFrZSBDaXR5MR4wHAYDVQQKExVUaGUgVVNFUlRSVVNUIE5l -dHdvcmsxITAfBgNVBAsTGGh0dHA6Ly93d3cudXNlcnRydXN0LmNvbTE2MDQGA1UE -AxMtVVROLVVTRVJGaXJzdC1DbGllbnQgQXV0aGVudGljYXRpb24gYW5kIEVtYWls -MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsjmFpPJ9q0E7YkY3rs3B -YHW8OWX5ShpHornMSMxqmNVNNRm5pELlzkniii8efNIxB8dOtINknS4p1aJkxIW9 -hVE1eaROaJB7HHqkkqgX8pgV8pPMyaQylbsMTzC9mKALi+VuG6JG+ni8om+rWV6l -L8/K2m2qL+usobNqqrcuZzWLeeEeaYji5kbNoKXqvgvOdjp6Dpvq/NonWz1zHyLm -SGHGTPNpsaguG7bUMSAsvIKKjqQOpdeJQ/wWWq8dcdcRWdq6hw2v+vPhwvCkxWeM -1tZUOt4KpLoDd7NlyP0e03RiqhjKaJMeoYV+9Udly/hNVyh00jT/MLbu9mIwFIws -6wIDAQABo4G5MIG2MAsGA1UdDwQEAwIBxjAPBgNVHRMBAf8EBTADAQH/MB0GA1Ud -DgQWBBSJgmd9xJ0mcABLtFBIfN49rgRufTBYBgNVHR8EUTBPME2gS6BJhkdodHRw -Oi8vY3JsLnVzZXJ0cnVzdC5jb20vVVROLVVTRVJGaXJzdC1DbGllbnRBdXRoZW50 -aWNhdGlvbmFuZEVtYWlsLmNybDAdBgNVHSUEFjAUBggrBgEFBQcDAgYIKwYBBQUH -AwQwDQYJKoZIhvcNAQEFBQADggEBALFtYV2mGn98q0rkMPxTbyUkxsrt4jFcKw7u -7mFVbwQ+zznexRtJlOTrIEy05p5QLnLZjfWqo7NK2lYcYJeA3IKirUq9iiv/Cwm0 -xtcgBEXkzYABurorbs6q15L+5K/r9CYdFip/bDCVNy8zEqx/3cfREYxRmLLQo5HQ -rfafnoOTHh1CuEava2bwm3/q4wMC5QJRwarVNZ1yQAOJujEdxRBoUp7fooXFXAim -eOZTT7Hot9MUnpOmw2TjrH5xzbyf6QMbzPvprDHBr3wVdAKZw7JHpsIyYdfHb0gk -USeh1YdV8nuPmD0Wnu51tvjQjvLzxq4oW6fw8zYX/MMF08oDSlQ= ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIEdDCCA1ygAwIBAgIQRL4Mi1AAJLQR0zYq/mUK/TANBgkqhkiG9w0BAQUFADCB -lzELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2Ug -Q2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExho -dHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xHzAdBgNVBAMTFlVUTi1VU0VSRmlyc3Qt -SGFyZHdhcmUwHhcNOTkwNzA5MTgxMDQyWhcNMTkwNzA5MTgxOTIyWjCBlzELMAkG -A1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0eTEe -MBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8v -d3d3LnVzZXJ0cnVzdC5jb20xHzAdBgNVBAMTFlVUTi1VU0VSRmlyc3QtSGFyZHdh -cmUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCx98M4P7Sof885glFn -0G2f0v9Y8+efK+wNiVSZuTiZFvfgIXlIwrthdBKWHTxqctU8EGc6Oe0rE81m65UJ -M6Rsl7HoxuzBdXmcRl6Nq9Bq/bkqVRcQVLMZ8Jr28bFdtqdt++BxF2uiiPsA3/4a -MXcMmgF6sTLjKwEHOG7DpV4jvEWbe1DByTCP2+UretNb+zNAHqDVmBe8i4fDidNd -oI6yqqr2jmmIBsX6iSHzCJ1pLgkzmykNRg+MzEk0sGlRvfkGzWitZky8PqxhvQqI -DsjfPe58BEydCl5rkdbux+0ojatNh4lz0G6k0B4WixThdkQDf2Os5M1JnMWS9Ksy -oUhbAgMBAAGjgbkwgbYwCwYDVR0PBAQDAgHGMA8GA1UdEwEB/wQFMAMBAf8wHQYD -VR0OBBYEFKFyXyYbKJhDlV0HN9WFlp1L0sNFMEQGA1UdHwQ9MDswOaA3oDWGM2h0 -dHA6Ly9jcmwudXNlcnRydXN0LmNvbS9VVE4tVVNFUkZpcnN0LUhhcmR3YXJlLmNy -bDAxBgNVHSUEKjAoBggrBgEFBQcDAQYIKwYBBQUHAwUGCCsGAQUFBwMGBggrBgEF -BQcDBzANBgkqhkiG9w0BAQUFAAOCAQEARxkP3nTGmZev/K0oXnWO6y1n7k57K9cM -//bey1WiCuFMVGWTYGufEpytXoMs61quwOQt9ABjHbjAbPLPSbtNk28Gpgoiskli -CE7/yMgUsogWXecB5BKV5UU0s4tpvc+0hY91UZ59Ojg6FEgSxvunOxqNDYJAB+gE -CJChicsZUN/KHAG8HQQZexB2lzvukJDKxA4fFm517zP4029bHpbj4HR3dHuKom4t -3XbWOTCC8KucUvIqx69JXn7HaOWCgchqJ/kniCrVWFCVH/A7HFe7fRQ5YiuayZSS -KqMiDP+JJn1fIytH1xUdqWqeUQ0qUZ6B+dQ7XnASfxAynB67nfhmqA== ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIEZDCCA0ygAwIBAgIQRL4Mi1AAJLQR0zYwS8AzdzANBgkqhkiG9w0BAQUFADCB -ozELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2Ug -Q2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExho -dHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xKzApBgNVBAMTIlVUTi1VU0VSRmlyc3Qt -TmV0d29yayBBcHBsaWNhdGlvbnMwHhcNOTkwNzA5MTg0ODM5WhcNMTkwNzA5MTg1 -NzQ5WjCBozELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0 -IExha2UgQ2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYD -VQQLExhodHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xKzApBgNVBAMTIlVUTi1VU0VS -Rmlyc3QtTmV0d29yayBBcHBsaWNhdGlvbnMwggEiMA0GCSqGSIb3DQEBAQUAA4IB -DwAwggEKAoIBAQCz+5Gh5DZVhawGNFugmliy+LUPBXeDrjKxdpJo7CNKyXY/45y2 -N3kDuatpjQclthln5LAbGHNhSuh+zdMvZOOmfAz6F4CjDUeJT1FxL+78P/m4FoCH -iZMlIJpDgmkkdihZNaEdwH+DBmQWICzTSaSFtMBhf1EI+GgVkYDLpdXuOzr0hARe -YFmnjDRy7rh4xdE7EkpvfmUnuaRVxblvQ6TFHSyZwFKkeEwVs0CYCGtDxgGwenv1 -axwiP8vv/6jQOkt2FZ7S0cYu49tXGzKiuG/ohqY/cKvlcJKrRB5AUPuco2LkbG6g -yN7igEL66S/ozjIEj3yNtxyjNTwV3Z7DrpelAgMBAAGjgZEwgY4wCwYDVR0PBAQD -AgHGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFPqGydvguul49Uuo1hXf8NPh -ahQ8ME8GA1UdHwRIMEYwRKBCoECGPmh0dHA6Ly9jcmwudXNlcnRydXN0LmNvbS9V -VE4tVVNFUkZpcnN0LU5ldHdvcmtBcHBsaWNhdGlvbnMuY3JsMA0GCSqGSIb3DQEB -BQUAA4IBAQCk8yXM0dSRgyLQzDKrm5ZONJFUICU0YV8qAhXhi6r/fWRRzwr/vH3Y -IWp4yy9Rb/hCHTO967V7lMPDqaAt39EpHx3+jz+7qEUqf9FuVSTiuwL7MT++6Lzs -QCv4AdRWOOTKRIK1YSAhZ2X28AvnNPilwpyjXEAfhZOVBt5P1CeptqX8Fs1zMT+4 -ZSfP1FMa8Kxun08FDAOBp4QpxFq9ZFdyrTvPNximmMatBrTcCKME1SmklpoSZ0qM -YEWd8SOasACcaLWYUNPvji6SZbFIPiG+FTAqDbUMo2s/rn9X9R+WfN9v3YIwLGUb -QErNaLly7HF27FSOH4UMAWr6pjisH8SE ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIEZjCCA06gAwIBAgIQRL4Mi1AAJLQR0zYt4LNfGzANBgkqhkiG9w0BAQUFADCB -lTELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2Ug -Q2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExho -dHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xHTAbBgNVBAMTFFVUTi1VU0VSRmlyc3Qt -T2JqZWN0MB4XDTk5MDcwOTE4MzEyMFoXDTE5MDcwOTE4NDAzNlowgZUxCzAJBgNV -BAYTAlVTMQswCQYDVQQIEwJVVDEXMBUGA1UEBxMOU2FsdCBMYWtlIENpdHkxHjAc -BgNVBAoTFVRoZSBVU0VSVFJVU1QgTmV0d29yazEhMB8GA1UECxMYaHR0cDovL3d3 -dy51c2VydHJ1c3QuY29tMR0wGwYDVQQDExRVVE4tVVNFUkZpcnN0LU9iamVjdDCC -ASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAM6qgT+jo2F4qjEAVZURnicP -HxzfOpuCaDDASmEd8S8O+r5596Uj71VRloTN2+O5bj4x2AogZ8f02b+U60cEPgLO -KqJdhwQJ9jCdGIqXsqoc/EHSoTbL+z2RuufZcDX65OeQw5ujm9M89RKZd7G3CeBo -5hy485RjiGpq/gt2yb70IuRnuasaXnfBhQfdDWy/7gbHd2pBnqcP1/vulBe3/IW+ -pKvEHDHd17bR5PDv3xaPslKT16HUiaEHLr/hARJCHhrh2JU022R5KP+6LhHC5ehb -kkj7RwvCbNqtMoNB86XlQXD9ZZBt+vpRxPm9lisZBCzTbafc8H9vg2XiaquHhnUC -AwEAAaOBrzCBrDALBgNVHQ8EBAMCAcYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4E -FgQU2u1kdBScFDyr3ZmpvVsoTYs8ydgwQgYDVR0fBDswOTA3oDWgM4YxaHR0cDov -L2NybC51c2VydHJ1c3QuY29tL1VUTi1VU0VSRmlyc3QtT2JqZWN0LmNybDApBgNV -HSUEIjAgBggrBgEFBQcDAwYIKwYBBQUHAwgGCisGAQQBgjcKAwQwDQYJKoZIhvcN -AQEFBQADggEBAAgfUrE3RHjb/c652pWWmKpVZIC1WkDdIaXFwfNfLEzIR1pp6ujw -NTX00CXzyKakh0q9G7FzCL3Uw8q2NbtZhncxzaeAFK4T7/yxSPlrJSUtUbYsbUXB -mMiKVl0+7kNOPmsnjtA6S4ULX9Ptaqd1y9Fahy85dRNacrACgZ++8A+EVCBibGnU -4U3GDZlDAQ0Slox4nb9QorFEqmrPF3rPbw/U+CRVX/A0FklmPlBGyWNxODFiuGK5 -81OtbLUrohKqGU8J2l7nk8aOFAj+8DCAGKCGhU3IfdeLA/5u1fedFqySLKAj5ZyR -Uh+U3xeUc8OzwcFxBSAAeL0TUh2oPs0AH8g= ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIHqTCCBZGgAwIBAgIQYwaGp8U3ZaVDkKhqWMzUMjANBgkqhkiG9w0BAQUFADCB -jzELMAkGA1UEBhMCTFYxNTAzBgNVBAoTLFZBUyBMYXR2aWphcyBQYXN0cyAtIFZp -ZW4ucmVnLk5yLjQwMDAzMDUyNzkwMSMwIQYDVQQLExpTZXJ0aWZpa2FjaWphcyBw -YWthbHBvanVtaTEkMCIGA1UEAxMbVkFTIExhdHZpamFzIFBhc3RzIFNTSShSQ0Ep -MB4XDTA2MDkxMzA5MjIxMFoXDTI0MDkxMzA5Mjc1N1owgY8xCzAJBgNVBAYTAkxW -MTUwMwYDVQQKEyxWQVMgTGF0dmlqYXMgUGFzdHMgLSBWaWVuLnJlZy5Oci40MDAw -MzA1Mjc5MDEjMCEGA1UECxMaU2VydGlmaWthY2lqYXMgcGFrYWxwb2p1bWkxJDAi -BgNVBAMTG1ZBUyBMYXR2aWphcyBQYXN0cyBTU0koUkNBKTCCAiIwDQYJKoZIhvcN -AQEBBQADggIPADCCAgoCggIBAJu4+f1hVS9PpKUUtS6OuSSPrPuxVD9A/0/F5YZo -e1OT+zWCNahQLpRSoNuDPnXaFXCsCc/ugkmtNkm5tHGLtAChQgbKCApjl7YI/O60 -3Jh4GYLJ+H9kPqrJ/rGN67Bk9bzzxD46kOpOjj8bGbxqg8ORPGxV+wpSwOjhXXeF -M8VJ3+xqv79sN/6OSaIVGM6LjmseOKMwb4iBfnJWRBrEejkP9sSPltSy6wBOXN67 -5zu35iQFk2tN5pFEv+6YG8eFGxFBeyI2p74+6Ho33BjekJ2PzbLXmj/iF39bDOHv -P2Y9biTksM7DDIhslNo4JXxSOeNzFLMARWOaDEJAXgTG93JkzsluM7Pk020klTeT -fvIAXRmLH/NDc6ifRdIGqey0Qrv67gzHTz9RH9Gv0KwYf4eBIv6p3QeWbXz4TtlN -OlBp1UF+xdp02I5z5X6D4cMZgbe9v0COvi6aogyqTgIuuyrhCF0xA8msJ7Cv3NXI -FH1AnVWJIfmQzNTJYEFzq+jN2DpVOQqCmf6b9fU8HJHLwPpGVK4h/CqsXHveepdx -/WxrzUiapNuBfBg3L5B9YZS9F8lctlQWd8oJSqrpvE+UdQFaVryS0o+515feVnQB -9xZxSbH1GEaZQe5i4bMsZXVpKXJDA/ibH/o49J7sQBCOrJfVsDO+nxjcLfdBeFRK -YkTnAgMBAAGjggH9MIIB+TAOBgNVHQ8BAf8EBAMCAQYwGAYIKwYBBQUHAQMEDDAK -MAgGBgQAjkYBATAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBTMw/Vm/3OsOFqW -GyGJuIFMH8teJTAQBgkrBgEEAYI3FQEEAwIBADCCAYkGA1UdIASCAYAwggF8MIIB -eAYLKwYBBAGBxFkBAQIwggFnMIIBOAYIKwYBBQUHAgIwggEqHoIBJgBTAGkAcwAg -AGkAcgAgAHMAZQByAHQAaQBmAGkAawBhAHQAcwAsACAAawBvACAAaQB6AGQAZQB2 -AGkAcwAgAFYAQQBTACAATABhAHQAdgBpAGoAYQBzACAAUABhAHMAdABzACwAIABu -AG8AZAByAG8AcwBpAG4AbwB0ACAAYQB0AGIAaQBsAHMAdABpAGIAdQAgAEUAbABl -AGsAdAByAG8AbgBpAHMAawBvACAAZABvAGsAdQBtAGUAbgB0AHUAIABsAGkAawB1 -AG0AYQBtACAAdQBuACAARQBpAHIAbwBwAGEAcwAgAFAAYQByAGwAYQBtAGUAbgB0 -AGEAIABkAGkAcgBlAGsAdABpAHYAYQBpACAAMQA5ADkAOQAvADkAMwAvAEUASzAp -BggrBgEFBQcCARYdaHR0cDovL3d3dy5lLW1lLmx2L3JlcG9zaXRvcnkwDQYJKoZI -hvcNAQEFBQADggIBAB8oSjWQIWNoCi94r6MegiaXoz8nGdJLo0J6BhNlW8EEy+t9 -fO+U8vGJ9bffUgIhadLqljTloM+XuJxVDhCFoxReLAX4tTp28/l6uN62DCdp8suU -kQsdudWOb5kvzfIZVjk6SFbwAf+Cdbay/dHU9fJjV0xNoX7MELoEae/0FPyzlx9F -7m9KKH/Rxie8x6Opa3vtghNvq94P+3HrXBEaqSzQMJ/8NjdW75XpurcTtq6fAmGt -nuxrBG82nw+Z98LJyEwouSjUIdeeVNXAzvSO5FWUe48kxjj8q3qkVnc9qEXvZJKk -0Ep+u3OL9A1Sc7g6SF5DgNOpcHdi/8coHHMeQ+YnJFtJueY2pI79xS0veqV5EnrX -IbIlbcgPosNhS+VI4le6n/KKId3bZPDaGd/OwJuAOcJ3d2MVU3KE+qSPBzeGIX1Q -+j1qN9uRDjez/c4Lynth0Jx0nH04aG3pex3W8Sq07ztgUncF5gLCX4xbvPB9t3PH -kWuyKrNjozTVq60lcUf/Gj56to2VdsPups0DCWzuRWeYz5lIdsHOinSaaFIBNCLI -7eIUC4S9bhCMsXKbvugI11fVf+q0AT1O5OLoZ+eMfunnQhHvlUbIkda+JxeAGTSY -58bfHvwhX56GPbx+8Jy9cp70R4JbcWfz+txUTKhc2FnH0AcOEzMnvPRp8Gsh ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIEGjCCAwICEQCLW3VWhFSFCwDPrzhIzrGkMA0GCSqGSIb3DQEBBQUAMIHKMQsw -CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZl -cmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWdu -LCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlT -aWduIENsYXNzIDEgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3Jp -dHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQswCQYD -VQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlT -aWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJ -bmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWdu -IENsYXNzIDEgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg -LSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAN2E1Lm0+afY8wR4 -nN493GwTFtl63SRRZsDHJlkNrAYIwpTRMx/wgzUfbhvI3qpuFU5UJ+/EbRrsC+MO -8ESlV8dAWB6jRx9x7GD2bZTIGDnt/kIYVt/kTEkQeE4BdjVjEjbdZrwBBDajVWjV -ojYJrKshJlQGrT/KFOCsyq0GHZXi+J3x4GD/wn91K0zM2v6HmSHquv4+VNfSWXjb -PG7PoBMAGrgnoeS+Z5bKoMWznN3JdZ7rMJpfo83ZrngZPyPpXNspva1VyBtUjGP2 -6KbqxzcSXKMpHgLZ2x87tNcPVkeBFQRKr4Mn0cVYiMHd9qqnoxjaaKptEVHhv2Vr -n5Z20T0CAwEAATANBgkqhkiG9w0BAQUFAAOCAQEAq2aN17O6x5q25lXQBfGfMY1a -qtmqRiYPce2lrVNWYgFHKkTp/j90CxObufRNG7LRX7K20ohcs5/Ny9Sn2WCVhDr4 -wTcdYcrnsMXlkdpUpqwxga6X3s0IrLjAl4B/bnKk52kTlWUfxJM8/XmPBNQ+T+r3 -ns7NZ3xPZQL/kYVUc8f/NveGLezQXk//EZ9yBta4GvFMDSZl4kSAHsef493oCtrs -pSCAaWihT37ha88HQfqDjrw43bAuEbFrskLMmrz5SCJ5ShkPshw+IHTZasO+8ih4 -E1Z5T21Q6huwtVexN2ZYI/PcD98Kh8TvhgXVOBRgmaNL3gaWcSzy27YfpO8/7g== ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIEGTCCAwECEGFwy0mMX5hFKeewptlQW3owDQYJKoZIhvcNAQEFBQAwgcoxCzAJ -BgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjEfMB0GA1UECxMWVmVy -aVNpZ24gVHJ1c3QgTmV0d29yazE6MDgGA1UECxMxKGMpIDE5OTkgVmVyaVNpZ24s -IEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTFFMEMGA1UEAxM8VmVyaVNp -Z24gQ2xhc3MgMiBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0 -eSAtIEczMB4XDTk5MTAwMTAwMDAwMFoXDTM2MDcxNjIzNTk1OVowgcoxCzAJBgNV -BAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjEfMB0GA1UECxMWVmVyaVNp -Z24gVHJ1c3QgTmV0d29yazE6MDgGA1UECxMxKGMpIDE5OTkgVmVyaVNpZ24sIElu -Yy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTFFMEMGA1UEAxM8VmVyaVNpZ24g -Q2xhc3MgMiBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAt -IEczMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArwoNwtUs22e5LeWU -J92lvuCwTY+zYVY81nzD9M0+hsuiiOLh2KRpxbXiv8GmR1BeRjmL1Za6tW8UvxDO -JxOeBUebMXoT2B/Z0wI3i60sR/COgQanDTAM6/c8DyAd3HJG7qUCyFvDyVZpTMUY -wZF7C9UTAJu878NIPkZgIIUq1ZC2zYugzDLdt/1AVbJQHFauzI13TccgTacxdu9o -koqQHgiBVrKtaaNS0MscxCM9H5n+TOgWY47GCI72MfbS+uV23bUckqNJzc0BzWjN -qWm6o+sdDZykIKbBoMXRRkwXbdKsZj+WjOCE1Db/IlnF+RFgqF8EffIa9iVCYQ/E -Srg+iQIDAQABMA0GCSqGSIb3DQEBBQUAA4IBAQA0JhU8wI1NQ0kdvekhktdmnLfe -xbjQ5F1fdiLAJvmEOjr5jLX77GDx6M4EsMjdpwOPMPOY36TmpDHf0xwLRtxyID+u -7gU8pDM/CzmscHhzS5kr3zDCVLCoO1Wh/hYozUK9dG6A2ydEp85EXdQbkJgNHkKU -sQAsBNB0owIFImNjzYO1+8FtYmtpdf1dcEG59b98377BMnMiIYtYgXsVkXq642RI -sH/7NiXaldDxJBQX3RiAa0YjOVT1jmIJBB2UkKab5iXiQkWquJCtvgiPqQtCGJTP -cjnhsUPgKM+351psE2tJs//jGHyJizNdrDPXp/naOlXJWBD5qu9ats9LS98q ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIEGjCCAwICEQCbfgZJoz5iudXukEhxKe9XMA0GCSqGSIb3DQEBBQUAMIHKMQsw -CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZl -cmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWdu -LCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlT -aWduIENsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3Jp -dHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQswCQYD -VQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlT -aWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJ -bmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWdu -IENsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg -LSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMu6nFL8eB8aHm8b -N3O9+MlrlBIwT/A2R/XQkQr1F8ilYcEWQE37imGQ5XYgwREGfassbqb1EUGO+i2t -KmFZpGcmTNDovFJbcCAEWNF6yaRpvIMXZK0Fi7zQWM6NjPXr8EJJC52XJ2cybuGu -kxUccLwgTS8Y3pKI6GyFVxEa6X7jJhFUokWWVYPKMIno3Nij7SqAP395ZVc+FSBm -CC+Vk7+qRy+oRpfwEuL+wgorUeZ25rdGt+INpsyow0xZVYnm6FNcHOqd8GIWC6fJ -Xwzw3sJ2zq/3avL6QaaiMxTJ5Xpj055iN9WFZZ4O5lMkdBteHRJTW8cs54NJOxWu -imi5V5cCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEAERSWwauSCPc/L8my/uRan2Te -2yFPhpk0djZX3dAVL8WtfxUfN2JzPtTnX84XA9s1+ivbrmAJXx5fj267Cz3qWhMe -DGBvtcC1IyIuBwvLqXTLR7sdwdela8wv0kL9Sd2nic9TutoAWii/gt/4uhMdUIaC -/Y4wjylGsB49Ndo4YhYYSq3mtlFs3q9i6wHQHiT+eo8SGhJouPtmmRQURVyu565p -F4ErWjfJXir0xuKhXFSbplQAz/DxwceYMBo7Nhbbo27q/a2ywtrvAkcTisDxszGt -TxzhT5yvDwyd93gN2PQ1VoDat20Xj50egWTh/sVFuq1ruQp6Tk9LhO5L8X3dEQ== ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIE0zCCA7ugAwIBAgIQGNrRniZ96LtKIVjNzGs7SjANBgkqhkiG9w0BAQUFADCB -yjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQL -ExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJp -U2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxW -ZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0 -aG9yaXR5IC0gRzUwHhcNMDYxMTA4MDAwMDAwWhcNMzYwNzE2MjM1OTU5WjCByjEL -MAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZW -ZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJpU2ln -biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJp -U2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9y -aXR5IC0gRzUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvJAgIKXo1 -nmAMqudLO07cfLw8RRy7K+D+KQL5VwijZIUVJ/XxrcgxiV0i6CqqpkKzj/i5Vbex -t0uz/o9+B1fs70PbZmIVYc9gDaTY3vjgw2IIPVQT60nKWVSFJuUrjxuf6/WhkcIz -SdhDY2pSS9KP6HBRTdGJaXvHcPaz3BJ023tdS1bTlr8Vd6Gw9KIl8q8ckmcY5fQG -BO+QueQA5N06tRn/Arr0PO7gi+s3i+z016zy9vA9r911kTMZHRxAy3QkGSGT2RT+ -rCpSx4/VBEnkjWNHiDxpg8v+R70rfk/Fla4OndTRQ8Bnc+MUCH7lP59zuDMKz10/ -NIeWiu5T6CUVAgMBAAGjgbIwga8wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8E -BAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZMFcwVRYJaW1hZ2UvZ2lmMCEwHzAH -BgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7GS4wJRYjaHR0cDovL2xvZ28udmVy -aXNpZ24uY29tL3ZzbG9nby5naWYwHQYDVR0OBBYEFH/TZafC3ey78DAJ80M5+gKv -MzEzMA0GCSqGSIb3DQEBBQUAA4IBAQCTJEowX2LP2BqYLz3q3JktvXf2pXkiOOzE -p6B4Eq1iDkVwZMXnl2YtmAl+X6/WzChl8gGqCBpH3vn5fJJaCGkgDdk+bW48DW7Y -5gaRQBi5+MHt39tBquCWIMnNZBU4gcmU7qKEKQsTb47bDN0lAtukixlE0kF6BWlK -WE9gyn6CagsCqiUXObXbf+eEZSqVir2G3l6BFoMtEMze/aiCKm0oHw0LxOXnGiYZ -4fQRbxC1lfznQgUy286dUV4otp6F01vvpX1FQHKOtw5rDgb7MzVIcbidJ4vEZV8N -hnacRHr2lVz2XTIIM6RUthg/aFzyQkqFOFSDX9HoLPKsEdao7WNq ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIEGjCCAwICEQDsoKeLbnVqAc/EfMwvlF7XMA0GCSqGSIb3DQEBBQUAMIHKMQsw -CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZl -cmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWdu -LCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlT -aWduIENsYXNzIDQgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3Jp -dHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQswCQYD -VQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlT -aWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJ -bmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWdu -IENsYXNzIDQgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg -LSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAK3LpRFpxlmr8Y+1 -GQ9Wzsy1HyDkniYlS+BzZYlZ3tCD5PUPtbut8XzoIfzk6AzufEUiGXaStBO3IFsJ -+mGuqPKljYXCKtbeZjbSmwL0qJJgfJxptI8kHtCGUvYynEFYHiK9zUVilQhu0Gbd -U6LM8BDcVHOLBKFGMzNcF0C5nk3T875Vg+ixiY5afJqWIpA7iCXy0lOIAgwLePLm -NxdLMEYH5IBtptiWLugs+BGzOA1mppvqySNb247i8xOOGlktqgLw7KSHZtzBP/XY -ufTsgsbSPZUd5cBPhMnZo0QoBmrXRazwa2rvTl/4EYIeOGM0ZlDUPpNz+jDDZq3/ -ky2X7wMCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEAj/ola09b5KROJ1WrIhVZPMq1 -CtRK26vdoV9TxaBXOcLORyu+OshWv8LZJxA6sQU8wHcxuzrTBXttmhwwjIDLk5Mq -g6sFUYICABFna/OIYUdfA5PVWw3g8dShMjWFsjrbsIKr0csKvE+MW8VLADsfKoKm -fjaF3H48ZwC15DtS4KjrXRX5xm3wrR0OhbepmnMUWluPQSjA1egtTaRezarZ7c7c -2NU8Qh0XwRJdRTjDOPP8hS6DRkiy1yBfkjaP53kPmF6Z6PDQpLv1U70qzlmwr25/ -bLvSHgCwIe34QWKCudiyxLtGUPMxxY8BqHTr9Xgn2uf3ZkPznoM+IKrDNWCRzg== ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIDojCCAoqgAwIBAgIQE4Y1TR0/BvLB+WUF1ZAcYjANBgkqhkiG9w0BAQUFADBr -MQswCQYDVQQGEwJVUzENMAsGA1UEChMEVklTQTEvMC0GA1UECxMmVmlzYSBJbnRl -cm5hdGlvbmFsIFNlcnZpY2UgQXNzb2NpYXRpb24xHDAaBgNVBAMTE1Zpc2EgZUNv -bW1lcmNlIFJvb3QwHhcNMDIwNjI2MDIxODM2WhcNMjIwNjI0MDAxNjEyWjBrMQsw -CQYDVQQGEwJVUzENMAsGA1UEChMEVklTQTEvMC0GA1UECxMmVmlzYSBJbnRlcm5h -dGlvbmFsIFNlcnZpY2UgQXNzb2NpYXRpb24xHDAaBgNVBAMTE1Zpc2EgZUNvbW1l -cmNlIFJvb3QwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvV95WHm6h -2mCxlCfLF9sHP4CFT8icttD0b0/Pmdjh28JIXDqsOTPHH2qLJj0rNfVIsZHBAk4E -lpF7sDPwsRROEW+1QK8bRaVK7362rPKgH1g/EkZgPI2h4H3PVz4zHvtH8aoVlwdV -ZqW1LS7YgFmypw23RuwhY/81q6UCzyr0TP579ZRdhE2o8mCP2w4lPJ9zcc+U30rq -299yOIzzlr3xF7zSujtFWsan9sYXiwGd/BmoKoMWuDpI/k4+oKsGGelT84ATB+0t -vz8KPFUgOSwsAGl0lUq8ILKpeeUYiZGo3BxN77t+Nwtd/jmliFKMAGzsGHxBvfaL -dXe6YJ2E5/4tAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQD -AgEGMB0GA1UdDgQWBBQVOIMPPyw/cDMezUb+B4wg4NfDtzANBgkqhkiG9w0BAQUF -AAOCAQEAX/FBfXxcCLkr4NWSR/pnXKUTwwMhmytMiUbPWU3J/qVAtmPN3XEolWcR -zCSs00Rsca4BIGsDoo8Ytyk6feUWYFN4PMCvFYP3j1IzJL1kk5fui/fbGKhtcbP3 -LBfQdCVp9/5rPJS+TUtBjE7ic9DjkCJzQ83z7+pzzkWKsKZJ/0x9nXGIxHYdkFsd -7v3M9+79YKWxehZx0RbQfBI8bGmX265fOZpwLwU8GUYEmSA20GBuYQa7FkKMcPcw -++DbZqMAAb3mLNqRX6BGi01qnD093QVG/na/oAo85ADmJ7f/hC3euiInlhBx6yLt -398znM/jra6O1I7mT1GvFpLgXPYHDw== ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIID5TCCAs2gAwIBAgIEOeSXnjANBgkqhkiG9w0BAQUFADCBgjELMAkGA1UEBhMC -VVMxFDASBgNVBAoTC1dlbGxzIEZhcmdvMSwwKgYDVQQLEyNXZWxscyBGYXJnbyBD -ZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEvMC0GA1UEAxMmV2VsbHMgRmFyZ28gUm9v -dCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcNMDAxMDExMTY0MTI4WhcNMjEwMTE0 -MTY0MTI4WjCBgjELMAkGA1UEBhMCVVMxFDASBgNVBAoTC1dlbGxzIEZhcmdvMSww -KgYDVQQLEyNXZWxscyBGYXJnbyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEvMC0G -A1UEAxMmV2VsbHMgRmFyZ28gUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwggEi -MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDVqDM7Jvk0/82bfuUER84A4n13 -5zHCLielTWi5MbqNQ1mXx3Oqfz1cQJ4F5aHiidlMuD+b+Qy0yGIZLEWukR5zcUHE -SxP9cMIlrCL1dQu3U+SlK93OvRw6esP3E48mVJwWa2uv+9iWsWCaSOAlIiR5NM4O -JgALTqv9i86C1y8IcGjBqAr5dE8Hq6T54oN+J3N0Prj5OEL8pahbSCOz6+MlsoCu -ltQKnMJ4msZoGK43YjdeUXWoWGPAUe5AeH6orxqg4bB4nVCMe+ez/I4jsNtlAHCE -AQgAFG5Uhpq6zPk3EPbg3oQtnaSFN9OH4xXQwReQfhkhahKpdv0SAulPIV4XAgMB -AAGjYTBfMA8GA1UdEwEB/wQFMAMBAf8wTAYDVR0gBEUwQzBBBgtghkgBhvt7hwcB -CzAyMDAGCCsGAQUFBwIBFiRodHRwOi8vd3d3LndlbGxzZmFyZ28uY29tL2NlcnRw -b2xpY3kwDQYJKoZIhvcNAQEFBQADggEBANIn3ZwKdyu7IvICtUpKkfnRLb7kuxpo -7w6kAOnu5+/u9vnldKTC2FJYxHT7zmu1Oyl5GFrvm+0fazbuSCUlFLZWohDo7qd/ -0D+j0MNdJu4HzMPBJCGHHt8qElNvQRbn7a6U+oxy+hNH8Dx+rn0ROhPs7fpvcmR7 -nX1/Jv16+yWt6j4pf0zjAFcysLPp7VMX2YuyFA4w6OXVE8Zkr8QA1dhYJPz1j+zx -x32l2w8n0cbyQIjmH/ZhqPRCyLk306m+LFZ4wnKbWV01QIroTmMatukgalHizqSQ -33ZwmVxwQ023tqcZZE6St8WRPH9IFmV7Fv3L/PvZ1dZPIWU7Sn9Ho/s= ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIEMDCCAxigAwIBAgIQUJRs7Bjq1ZxN1ZfvdY+grTANBgkqhkiG9w0BAQUFADCB -gjELMAkGA1UEBhMCVVMxHjAcBgNVBAsTFXd3dy54cmFtcHNlY3VyaXR5LmNvbTEk -MCIGA1UEChMbWFJhbXAgU2VjdXJpdHkgU2VydmljZXMgSW5jMS0wKwYDVQQDEyRY -UmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDQxMTAxMTcx -NDA0WhcNMzUwMTAxMDUzNzE5WjCBgjELMAkGA1UEBhMCVVMxHjAcBgNVBAsTFXd3 -dy54cmFtcHNlY3VyaXR5LmNvbTEkMCIGA1UEChMbWFJhbXAgU2VjdXJpdHkgU2Vy -dmljZXMgSW5jMS0wKwYDVQQDEyRYUmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBB -dXRob3JpdHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCYJB69FbS6 -38eMpSe2OAtp87ZOqCwuIR1cRN8hXX4jdP5efrRKt6atH67gBhbim1vZZ3RrXYCP -KZ2GG9mcDZhtdhAoWORlsH9KmHmf4MMxfoArtYzAQDsRhtDLooY2YKTVMIJt2W7Q -DxIEM5dfT2Fa8OT5kavnHTu86M/0ay00fOJIYRyO82FEzG+gSqmUsE3a56k0enI4 -qEHMPJQRfevIpoy3hsvKMzvZPTeL+3o+hiznc9cKV6xkmxnr9A8ECIqsAxcZZPRa -JSKNNCyy9mgdEm3Tih4U2sSPpuIjhdV6Db1q4Ons7Be7QhtnqiXtRYMh/MHJfNVi -PvryxS3T/dRlAgMBAAGjgZ8wgZwwEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0P -BAQDAgGGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFMZPoj0GY4QJnM5i5ASs -jVy16bYbMDYGA1UdHwQvMC0wK6ApoCeGJWh0dHA6Ly9jcmwueHJhbXBzZWN1cml0 -eS5jb20vWEdDQS5jcmwwEAYJKwYBBAGCNxUBBAMCAQEwDQYJKoZIhvcNAQEFBQAD -ggEBAJEVOQMBG2f7Shz5CmBbodpNl2L5JFMn14JkTpAuw0kbK5rc/Kh4ZzXxHfAR -vbdI4xD2Dd8/0sm2qlWkSLoC295ZLhVbO50WfUfXN+pfTXYSNrsf16GBBEYgoyxt -qZ4Bfj8pzgCT3/3JknOJiWSe5yvkHJEs0rnOfc5vMZnT5r7SHpDwCRR5XCOrTdLa -IR9NmXmd4c8nnxCbHIgNsIpkQTG4DmyQJKSbXHGPurt+HBvbaoAPIbzp26a3QPSy -i6mx5O+aGtA9aZnuqCij4Tyz8LIRnM98QObd50N9otg6tamN8jSZxNQQ4Qb9CYQQ -O+7ETPTsJ3xCwnR8gooJybQDJbw= ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIEQTCCAymgAwIBAgIBATALBgkqhkiG9w0BAQUwgdMxEzARBgNVBAMMCmFwcGlu -Zi5jb20xNjA0BgNVBAoMLUFwcGxpZWQgSW5mb3JtYXRpY3MgU29mdHdhcmUgRW5n -aW5lZXJpbmcgR21iSDEUMBIGA1UECwwLRGV2ZWxvcG1lbnQxEjAQBgNVBAgMCUNh -cmludGhpYTELMAkGA1UEBgwCQVQxHjAcBgNVBAcMFVN0LiBKYWtvYiBpbSBSb3Nl -bnRhbDEtMCsGCSqGSIb3DQEJAQweZ3VlbnRlci5vYmlsdHNjaG5pZ0BhcHBpbmYu -Y29tMB4XDTA5MDIyMzEzNDAzNVoXDTExMTEyMDEzNDAzNVowgdMxEzARBgNVBAMM -CmFwcGluZi5jb20xNjA0BgNVBAoMLUFwcGxpZWQgSW5mb3JtYXRpY3MgU29mdHdh -cmUgRW5naW5lZXJpbmcgR21iSDEUMBIGA1UECwwLRGV2ZWxvcG1lbnQxEjAQBgNV -BAgMCUNhcmludGhpYTELMAkGA1UEBgwCQVQxHjAcBgNVBAcMFVN0LiBKYWtvYiBp -bSBSb3NlbnRhbDEtMCsGCSqGSIb3DQEJAQweZ3VlbnRlci5vYmlsdHNjaG5pZ0Bh -cHBpbmYuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAx8mI/DXh -dwvwt/qMD5Mm+1ataiRJzau0ct07kyFv0hTYGJR7sl4ocC+lLqLOgOxeG0IaIKvP -Apqq7KQ1ZJBtpZAAwj8NwMXg8fGYM0JtpkGYmkRGmFolwFWA0FLVmGxAuw2iKN6k -ajl8U4pz5qzYFEKNL5IJMI8rS2Fsek1pgfpZ5dYFChgVW7urxFhAJCXMrHAOLfed -SjXtZpvepXRvBtuvOosXSIjmY9x/3/1QeRvZpza2atWRv4pnKBldtI9BZDUQqS3F -fi/ydXlZVeY3aHW6Cw9DfbnnLv2RegUzjUZCx07IrPulZmqS6rabIIwY/bhX+n7y -YcP4ADkXDKct6QIDAQABoyAwHjAPBgNVHRMBAf8EBTADAQH/MAsGA1UdDwQEAwIC -hDANBgkqhkiG9w0BAQUFAAOCAQEAAfoSQow7qv3C9SiOZ+h3s9reQBJnZUcSQ5AS -90jGmtmcJ1eyWQyGxES0iKYPcF1GbSBkO/kqMzdM/E2GQnbHVrgiPj+9tTxjG/hK -42K2AEACDYtuQWTui4K1BmrWRJvdoiGRrt87DhmOG6UY5wtUAZdgVjhwBGEWJhYp -IgeNe5OEdrBkSBjYb2VnJOJFQA7bB7G4snTjNMY+n5+odISHU3debZLdXvX3gKVG -nVwp91/LnCSCvvZ+nH9xLzNdTbXqhI96bJh/iXLNcwcHOWPYWKuANAs5FR7OSZ+l -57gz8/BTaM4pTyJzER5p0+cTIzLGF7aYLuKKqXiKykjruO3U7A== ------END CERTIFICATE----- diff --git a/contrib/libpoco/NetSSL_OpenSSL/testsuite/src/Driver.cpp b/contrib/libpoco/NetSSL_OpenSSL/testsuite/src/Driver.cpp deleted file mode 100644 index 81c51eca7a5..00000000000 --- a/contrib/libpoco/NetSSL_OpenSSL/testsuite/src/Driver.cpp +++ /dev/null @@ -1,77 +0,0 @@ -// -// Driver.cpp -// -// $Id: //poco/1.4/NetSSL_OpenSSL/testsuite/src/Driver.cpp#1 $ -// -// Console-based test driver for Poco NetSSL. -// -// Copyright (c) 2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "CppUnit/TestRunner.h" -#include "NetSSLTestSuite.h" -#include "Poco/Util/Application.h" -#include "Poco/Net/HTTPStreamFactory.h" -#include "Poco/Net/HTTPSStreamFactory.h" -#include - - -class NetSSLApp: public Poco::Util::Application -{ -public: - NetSSLApp() - { - Poco::Net::initializeSSL(); - Poco::Net::HTTPStreamFactory::registerFactory(); - Poco::Net::HTTPSStreamFactory::registerFactory(); - } - - ~NetSSLApp() - { - Poco::Net::uninitializeSSL(); - } - - int main(const std::vector& args) - { - CppUnit::TestRunner runner; - runner.addTest("NetSSLTestSuite", NetSSLTestSuite::suite()); - return runner.run(_targs) ? 0 : 1; - } - - void setup(int argc, char** argv) - { - init(1, argv); - for (int i = 0; i < argc; ++i) - _targs.push_back(std::string(argv[i])); - } - -protected: - void initialize(Poco::Util::Application& self) - { - loadConfiguration(); // load default configuration files, if present - Poco::Util::Application::initialize(self); - } - -private: - std::vector _targs; -}; - - -int main(int ac, char **av) -{ - NetSSLApp app; - try - { - app.setup(ac, av); - return app.run(); - } - catch (Poco::Exception& exc) - { - std::cout << exc.displayText() << std::endl; - return 1; - } -} diff --git a/contrib/libpoco/NetSSL_OpenSSL/testsuite/src/HTTPSClientSessionTest.cpp b/contrib/libpoco/NetSSL_OpenSSL/testsuite/src/HTTPSClientSessionTest.cpp deleted file mode 100644 index ed2106af031..00000000000 --- a/contrib/libpoco/NetSSL_OpenSSL/testsuite/src/HTTPSClientSessionTest.cpp +++ /dev/null @@ -1,482 +0,0 @@ -// -// HTTPSClientSessionTest.cpp -// -// $Id: //poco/1.4/NetSSL_OpenSSL/testsuite/src/HTTPSClientSessionTest.cpp#1 $ -// -// Copyright (c) 2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "HTTPSClientSessionTest.h" -#include "CppUnit/TestCaller.h" -#include "CppUnit/TestSuite.h" -#include "Poco/Net/HTTPSClientSession.h" -#include "Poco/Net/HTTPRequest.h" -#include "Poco/Net/HTTPRequestHandler.h" -#include "Poco/Net/HTTPRequestHandlerFactory.h" -#include "Poco/Net/HTTPResponse.h" -#include "Poco/Net/HTTPServer.h" -#include "Poco/Net/HTTPServerResponse.h" -#include "Poco/Net/HTTPServerRequest.h" -#include "Poco/Net/HTTPServerParams.h" -#include "Poco/Net/SecureStreamSocket.h" -#include "Poco/Net/Context.h" -#include "Poco/Net/Session.h" -#include "Poco/Net/SSLManager.h" -#include "Poco/Net/SSLException.h" -#include "Poco/Util/Application.h" -#include "Poco/Util/AbstractConfiguration.h" -#include "Poco/StreamCopier.h" -#include "Poco/Exception.h" -#include "Poco/DateTimeFormatter.h" -#include "Poco/DateTimeFormat.h" -#include "Poco/Thread.h" -#include "HTTPSTestServer.h" -#include -#include -#include - - -using namespace Poco::Net; -using Poco::Util::Application; -using Poco::StreamCopier; -using Poco::Thread; - - -class TestRequestHandler: public HTTPRequestHandler - /// Return a HTML document with the current date and time. -{ -public: - TestRequestHandler() - { - } - - void handleRequest(HTTPServerRequest& request, HTTPServerResponse& response) - { - response.setChunkedTransferEncoding(true); - response.setContentType(request.getContentType()); - std::ostream& ostr = response.send(); - Poco::StreamCopier::copyStream(request.stream(), ostr); - } - -}; - - -class TestRequestHandlerFactory: public HTTPRequestHandlerFactory -{ -public: - TestRequestHandlerFactory() - { - } - - HTTPRequestHandler* createRequestHandler(const HTTPServerRequest& request) - { - return new TestRequestHandler(); - } -}; - - -HTTPSClientSessionTest::HTTPSClientSessionTest(const std::string& name): CppUnit::TestCase(name) -{ -} - - -HTTPSClientSessionTest::~HTTPSClientSessionTest() -{ -} - - -void HTTPSClientSessionTest::testGetSmall() -{ - HTTPSTestServer srv; - HTTPSClientSession s("localhost", srv.port()); - HTTPRequest request(HTTPRequest::HTTP_GET, "/small"); - s.sendRequest(request); - HTTPResponse response; - std::istream& rs = s.receiveResponse(response); - assert (response.getContentLength() == HTTPSTestServer::SMALL_BODY.length()); - assert (response.getContentType() == "text/plain"); - std::ostringstream ostr; - StreamCopier::copyStream(rs, ostr); - assert (ostr.str() == HTTPSTestServer::SMALL_BODY); -} - - -void HTTPSClientSessionTest::testGetLarge() -{ - HTTPSTestServer srv; - HTTPSClientSession s("localhost", srv.port()); - HTTPRequest request(HTTPRequest::HTTP_GET, "/large"); - s.sendRequest(request); - HTTPResponse response; - std::istream& rs = s.receiveResponse(response); - assert (response.getContentLength() == HTTPSTestServer::LARGE_BODY.length()); - assert (response.getContentType() == "text/plain"); - std::ostringstream ostr; - StreamCopier::copyStream(rs, ostr); - assert (ostr.str() == HTTPSTestServer::LARGE_BODY); -} - - -void HTTPSClientSessionTest::testHead() -{ - HTTPSTestServer srv; - HTTPSClientSession s("localhost", srv.port()); - HTTPRequest request(HTTPRequest::HTTP_HEAD, "/large"); - s.sendRequest(request); - HTTPResponse response; - std::istream& rs = s.receiveResponse(response); - assert (response.getContentLength() == HTTPSTestServer::LARGE_BODY.length()); - assert (response.getContentType() == "text/plain"); - std::ostringstream ostr; - assert (StreamCopier::copyStream(rs, ostr) == 0); -} - - -void HTTPSClientSessionTest::testPostSmallIdentity() -{ - HTTPSTestServer srv; - HTTPSClientSession s("localhost", srv.port()); - HTTPRequest request(HTTPRequest::HTTP_POST, "/echo"); - std::string body("this is a random request body\r\n0\r\n"); - request.setContentLength((int) body.length()); - s.sendRequest(request) << body; - HTTPResponse response; - std::istream& rs = s.receiveResponse(response); - assert (response.getContentLength() == body.length()); - std::ostringstream ostr; - StreamCopier::copyStream(rs, ostr); - assert (ostr.str() == body); -} - - -void HTTPSClientSessionTest::testPostLargeIdentity() -{ - HTTPSTestServer srv; - HTTPSClientSession s("localhost", srv.port()); - HTTPRequest request(HTTPRequest::HTTP_POST, "/echo"); - std::string body(8000, 'x'); - body.append("\r\n0\r\n"); - request.setContentLength((int) body.length()); - s.sendRequest(request) << body; - HTTPResponse response; - std::istream& rs = s.receiveResponse(response); - assert (response.getContentLength() == body.length()); - std::ostringstream ostr; - StreamCopier::copyStream(rs, ostr); - assert (ostr.str() == body); -} - - -void HTTPSClientSessionTest::testPostSmallChunked() -{ - HTTPSTestServer srv; - HTTPSClientSession s("localhost", srv.port()); - HTTPRequest request(HTTPRequest::HTTP_POST, "/echo"); - std::string body("this is a random request body"); - request.setChunkedTransferEncoding(true); - s.sendRequest(request) << body; - HTTPResponse response; - std::istream& rs = s.receiveResponse(response); - assert (response.getChunkedTransferEncoding()); - assert (response.getContentLength() == HTTPMessage::UNKNOWN_CONTENT_LENGTH); - std::ostringstream ostr; - StreamCopier::copyStream(rs, ostr); - assert (ostr.str() == body); -} - - -void HTTPSClientSessionTest::testPostLargeChunked() -{ - HTTPSTestServer srv; - HTTPSClientSession s("localhost", srv.port()); - HTTPRequest request(HTTPRequest::HTTP_POST, "/echo"); - std::string body(16000, 'x'); - request.setChunkedTransferEncoding(true); - s.sendRequest(request) << body; - HTTPResponse response; - std::istream& rs = s.receiveResponse(response); - assert (response.getChunkedTransferEncoding()); - assert (response.getContentLength() == HTTPMessage::UNKNOWN_CONTENT_LENGTH); - std::ostringstream ostr; - StreamCopier::copyStream(rs, ostr); - assert (ostr.str() == body); -} - - -void HTTPSClientSessionTest::testPostLargeChunkedKeepAlive() -{ - SecureServerSocket svs(32322); - HTTPServer srv(new TestRequestHandlerFactory(), svs, new HTTPServerParams()); - srv.start(); - try - { - HTTPSClientSession s("localhost", srv.port()); - s.setKeepAlive(true); - for (int i = 0; i < 10; ++i) - { - HTTPRequest request(HTTPRequest::HTTP_POST, "/keepAlive", HTTPMessage::HTTP_1_1); - std::string body(16000, 'x'); - request.setChunkedTransferEncoding(true); - s.sendRequest(request) << body; - HTTPResponse response; - std::istream& rs = s.receiveResponse(response); - assert (response.getChunkedTransferEncoding()); - assert (response.getContentLength() == HTTPMessage::UNKNOWN_CONTENT_LENGTH); - std::ostringstream ostr; - StreamCopier::copyStream(rs, ostr); - assert (ostr.str() == body); - } - srv.stop(); - } - catch (...) - { - srv.stop(); - throw; - } -} - - -void HTTPSClientSessionTest::testKeepAlive() -{ - HTTPSTestServer srv; - HTTPSClientSession s("localhost", srv.port()); - s.setKeepAlive(true); - HTTPRequest request(HTTPRequest::HTTP_HEAD, "/keepAlive", HTTPMessage::HTTP_1_1); - s.sendRequest(request); - HTTPResponse response; - std::istream& rs1 = s.receiveResponse(response); - assert (response.getContentLength() == HTTPSTestServer::SMALL_BODY.length()); - assert (response.getContentType() == "text/plain"); - assert (response.getKeepAlive()); - std::ostringstream ostr1; - assert (StreamCopier::copyStream(rs1, ostr1) == 0); - - request.setMethod(HTTPRequest::HTTP_GET); - request.setURI("/small"); - s.sendRequest(request); - std::istream& rs2 = s.receiveResponse(response); - assert (response.getContentLength() == HTTPSTestServer::SMALL_BODY.length()); - assert (response.getKeepAlive()); - std::ostringstream ostr2; - StreamCopier::copyStream(rs2, ostr2); - assert (ostr2.str() == HTTPSTestServer::SMALL_BODY); - - request.setMethod(HTTPRequest::HTTP_GET); - request.setURI("/large"); - s.sendRequest(request); - std::istream& rs3 = s.receiveResponse(response); - assert (response.getContentLength() == HTTPMessage::UNKNOWN_CONTENT_LENGTH); - assert (response.getChunkedTransferEncoding()); - assert (response.getKeepAlive()); - std::ostringstream ostr3; - StreamCopier::copyStream(rs3, ostr3); - assert (ostr3.str() == HTTPSTestServer::LARGE_BODY); - - request.setMethod(HTTPRequest::HTTP_HEAD); - request.setURI("/large"); - s.sendRequest(request); - std::istream& rs4 = s.receiveResponse(response); - assert (response.getContentLength() == HTTPSTestServer::LARGE_BODY.length()); - assert (response.getContentType() == "text/plain"); - assert (!response.getKeepAlive()); - std::ostringstream ostr4; - assert (StreamCopier::copyStream(rs4, ostr4) == 0); -} - - -void HTTPSClientSessionTest::testInterop() -{ - HTTPSClientSession s("secure.appinf.com"); - HTTPRequest request(HTTPRequest::HTTP_GET, "/public/poco/NetSSL.txt"); - s.sendRequest(request); - X509Certificate cert = s.serverCertificate(); - HTTPResponse response; - std::istream& rs = s.receiveResponse(response); - std::ostringstream ostr; - StreamCopier::copyStream(rs, ostr); - std::string str(ostr.str()); - assert (str == "This is a test file for NetSSL.\n"); - assert (cert.commonName() == "secure.appinf.com" || cert.commonName() == "*.appinf.com"); -} - - -void HTTPSClientSessionTest::testProxy() -{ - HTTPSTestServer srv; - HTTPSClientSession s("secure.appinf.com"); - s.setProxy( - Application::instance().config().getString("testsuite.proxy.host"), - Application::instance().config().getInt("testsuite.proxy.port") - ); - HTTPRequest request(HTTPRequest::HTTP_GET, "/public/poco/NetSSL.txt"); - s.sendRequest(request); - X509Certificate cert = s.serverCertificate(); - HTTPResponse response; - std::istream& rs = s.receiveResponse(response); - std::ostringstream ostr; - StreamCopier::copyStream(rs, ostr); - std::string str(ostr.str()); - assert (str == "This is a test file for NetSSL.\n"); - assert (cert.commonName() == "secure.appinf.com" || cert.commonName() == "*.appinf.com"); -} - - -void HTTPSClientSessionTest::testCachedSession() -{ - // ensure OpenSSL machinery is fully setup - Context::Ptr pDefaultServerContext = SSLManager::instance().defaultServerContext(); - Context::Ptr pDefaultClientContext = SSLManager::instance().defaultClientContext(); - - Context::Ptr pServerContext = new Context( - Context::SERVER_USE, - Application::instance().config().getString("openSSL.server.privateKeyFile"), - Application::instance().config().getString("openSSL.server.privateKeyFile"), - Application::instance().config().getString("openSSL.server.caConfig"), - Context::VERIFY_NONE, - 9, - true, - "ALL:!ADH:!LOW:!EXP:!MD5:@STRENGTH"); - pServerContext->enableSessionCache(true, "TestSuite"); - pServerContext->setSessionTimeout(10); - pServerContext->setSessionCacheSize(1000); - pServerContext->disableStatelessSessionResumption(); - - HTTPSTestServer srv(pServerContext); - - Context::Ptr pClientContext = new Context( - Context::CLIENT_USE, - Application::instance().config().getString("openSSL.client.privateKeyFile"), - Application::instance().config().getString("openSSL.client.privateKeyFile"), - Application::instance().config().getString("openSSL.client.caConfig"), - Context::VERIFY_RELAXED, - 9, - true, - "ALL:!ADH:!LOW:!EXP:!MD5:@STRENGTH"); - pClientContext->enableSessionCache(true); - - HTTPSClientSession s1("localhost", srv.port(), pClientContext); - HTTPRequest request1(HTTPRequest::HTTP_GET, "/small"); - s1.sendRequest(request1); - Session::Ptr pSession1 = s1.sslSession(); - HTTPResponse response1; - std::istream& rs1 = s1.receiveResponse(response1); - assert (response1.getContentLength() == HTTPSTestServer::SMALL_BODY.length()); - assert (response1.getContentType() == "text/plain"); - std::ostringstream ostr1; - StreamCopier::copyStream(rs1, ostr1); - assert (ostr1.str() == HTTPSTestServer::SMALL_BODY); - - HTTPSClientSession s2("localhost", srv.port(), pClientContext, pSession1); - HTTPRequest request2(HTTPRequest::HTTP_GET, "/small"); - s2.sendRequest(request2); - Session::Ptr pSession2 = s2.sslSession(); - HTTPResponse response2; - std::istream& rs2 = s2.receiveResponse(response2); - assert (response2.getContentLength() == HTTPSTestServer::SMALL_BODY.length()); - assert (response2.getContentType() == "text/plain"); - std::ostringstream ostr2; - StreamCopier::copyStream(rs2, ostr2); - assert (ostr2.str() == HTTPSTestServer::SMALL_BODY); - - assert (pSession1 == pSession2); - - HTTPRequest request3(HTTPRequest::HTTP_GET, "/small"); - s2.sendRequest(request3); - Session::Ptr pSession3 = s2.sslSession(); - HTTPResponse response3; - std::istream& rs3 = s2.receiveResponse(response3); - assert (response3.getContentLength() == HTTPSTestServer::SMALL_BODY.length()); - assert (response3.getContentType() == "text/plain"); - std::ostringstream ostr3; - StreamCopier::copyStream(rs3, ostr3); - assert (ostr3.str() == HTTPSTestServer::SMALL_BODY); - - assert (pSession1 == pSession3); - - Thread::sleep(15000); // wait for session to expire - pServerContext->flushSessionCache(); - - HTTPRequest request4(HTTPRequest::HTTP_GET, "/small"); - s2.sendRequest(request4); - Session::Ptr pSession4 = s2.sslSession(); - HTTPResponse response4; - std::istream& rs4 = s2.receiveResponse(response4); - assert (response4.getContentLength() == HTTPSTestServer::SMALL_BODY.length()); - assert (response4.getContentType() == "text/plain"); - std::ostringstream ostr4; - StreamCopier::copyStream(rs4, ostr4); - assert (ostr4.str() == HTTPSTestServer::SMALL_BODY); - - assert (pSession1 != pSession4); -} - - -void HTTPSClientSessionTest::testUnknownContentLength() -{ - HTTPSTestServer srv; - HTTPSClientSession s("localhost", srv.port()); - HTTPRequest request(HTTPRequest::HTTP_GET, "/nolength"); - s.sendRequest(request); - HTTPResponse response; - std::istream& rs = s.receiveResponse(response); - assert (response.getContentLength() == HTTPMessage::UNKNOWN_CONTENT_LENGTH); - assert (response.getContentType() == "text/plain"); - std::ostringstream ostr; - StreamCopier::copyStream(rs, ostr); - assert (ostr.str() == HTTPSTestServer::SMALL_BODY); -} - - -void HTTPSClientSessionTest::testServerAbort() -{ - HTTPSTestServer srv; - HTTPSClientSession s("localhost", srv.port()); - HTTPRequest request(HTTPRequest::HTTP_GET, "/nolength/connection/abort"); - s.sendRequest(request); - HTTPResponse response; - std::istream& rs = s.receiveResponse(response); - assert (response.getContentLength() == HTTPMessage::UNKNOWN_CONTENT_LENGTH); - assert (response.getContentType() == "text/plain"); - std::ostringstream ostr; - StreamCopier::copyStream(rs, ostr); - assert (ostr.str() == HTTPSTestServer::SMALL_BODY); - assert ( dynamic_cast( - s.networkException()) != NULL ); -} - - -void HTTPSClientSessionTest::setUp() -{ -} - - -void HTTPSClientSessionTest::tearDown() -{ -} - - -CppUnit::Test* HTTPSClientSessionTest::suite() -{ - CppUnit::TestSuite* pSuite = new CppUnit::TestSuite("HTTPSClientSessionTest"); - - CppUnit_addTest(pSuite, HTTPSClientSessionTest, testGetSmall); - CppUnit_addTest(pSuite, HTTPSClientSessionTest, testGetLarge); - CppUnit_addTest(pSuite, HTTPSClientSessionTest, testHead); - CppUnit_addTest(pSuite, HTTPSClientSessionTest, testPostSmallIdentity); - CppUnit_addTest(pSuite, HTTPSClientSessionTest, testPostLargeIdentity); - CppUnit_addTest(pSuite, HTTPSClientSessionTest, testPostSmallChunked); - CppUnit_addTest(pSuite, HTTPSClientSessionTest, testPostLargeChunked); - CppUnit_addTest(pSuite, HTTPSClientSessionTest, testPostLargeChunkedKeepAlive); - CppUnit_addTest(pSuite, HTTPSClientSessionTest, testKeepAlive); - CppUnit_addTest(pSuite, HTTPSClientSessionTest, testInterop); - CppUnit_addTest(pSuite, HTTPSClientSessionTest, testProxy); - CppUnit_addTest(pSuite, HTTPSClientSessionTest, testCachedSession); - CppUnit_addTest(pSuite, HTTPSClientSessionTest, testUnknownContentLength); - CppUnit_addTest(pSuite, HTTPSClientSessionTest, testServerAbort); - - return pSuite; -} diff --git a/contrib/libpoco/NetSSL_OpenSSL/testsuite/src/HTTPSClientSessionTest.h b/contrib/libpoco/NetSSL_OpenSSL/testsuite/src/HTTPSClientSessionTest.h deleted file mode 100644 index 41e89c05e4c..00000000000 --- a/contrib/libpoco/NetSSL_OpenSSL/testsuite/src/HTTPSClientSessionTest.h +++ /dev/null @@ -1,54 +0,0 @@ -// -// HTTPSClientSessionTest.h -// -// $Id: //poco/1.4/NetSSL_OpenSSL/testsuite/src/HTTPSClientSessionTest.h#1 $ -// -// Definition of the HTTPSClientSessionTest class. -// -// Copyright (c) 2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef HTTPSClientSessionTest_INCLUDED -#define HTTPSClientSessionTest_INCLUDED - - -#include "Poco/Net/Net.h" -#include "CppUnit/TestCase.h" - - -class HTTPSClientSessionTest: public CppUnit::TestCase -{ -public: - HTTPSClientSessionTest(const std::string& name); - ~HTTPSClientSessionTest(); - - void testGetSmall(); - void testGetLarge(); - void testHead(); - void testPostSmallIdentity(); - void testPostLargeIdentity(); - void testPostSmallChunked(); - void testPostLargeChunked(); - void testPostLargeChunkedKeepAlive(); - void testKeepAlive(); - void testInterop(); - void testProxy(); - void testCachedSession(); - void testUnknownContentLength(); - void testServerAbort(); - - - void setUp(); - void tearDown(); - - static CppUnit::Test* suite(); - -private: -}; - - -#endif // HTTPSClientSessionTest_INCLUDED diff --git a/contrib/libpoco/NetSSL_OpenSSL/testsuite/src/HTTPSClientTestSuite.cpp b/contrib/libpoco/NetSSL_OpenSSL/testsuite/src/HTTPSClientTestSuite.cpp deleted file mode 100644 index 4c919f9807d..00000000000 --- a/contrib/libpoco/NetSSL_OpenSSL/testsuite/src/HTTPSClientTestSuite.cpp +++ /dev/null @@ -1,26 +0,0 @@ -// -// HTTPSClientTestSuite.cpp -// -// $Id: //poco/1.4/NetSSL_OpenSSL/testsuite/src/HTTPSClientTestSuite.cpp#1 $ -// -// Copyright (c) 2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "HTTPSClientTestSuite.h" -#include "HTTPSClientSessionTest.h" -#include "HTTPSStreamFactoryTest.h" - - -CppUnit::Test* HTTPSClientTestSuite::suite() -{ - CppUnit::TestSuite* pSuite = new CppUnit::TestSuite("HTTPSClientTestSuite"); - - pSuite->addTest(HTTPSClientSessionTest::suite()); - pSuite->addTest(HTTPSStreamFactoryTest::suite()); - - return pSuite; -} diff --git a/contrib/libpoco/NetSSL_OpenSSL/testsuite/src/HTTPSClientTestSuite.h b/contrib/libpoco/NetSSL_OpenSSL/testsuite/src/HTTPSClientTestSuite.h deleted file mode 100644 index 94f7059dad9..00000000000 --- a/contrib/libpoco/NetSSL_OpenSSL/testsuite/src/HTTPSClientTestSuite.h +++ /dev/null @@ -1,29 +0,0 @@ -// -// HTTPSClientTestSuite.h -// -// $Id: //poco/1.4/NetSSL_OpenSSL/testsuite/src/HTTPSClientTestSuite.h#1 $ -// -// Definition of the HTTPSClientTestSuite class. -// -// Copyright (c) 2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef HTTPSClientTestSuite_INCLUDED -#define HTTPSClientTestSuite_INCLUDED - - -#include "CppUnit/TestSuite.h" - - -class HTTPSClientTestSuite -{ -public: - static CppUnit::Test* suite(); -}; - - -#endif // HTTPSClientTestSuite_INCLUDED diff --git a/contrib/libpoco/NetSSL_OpenSSL/testsuite/src/HTTPSServerTest.cpp b/contrib/libpoco/NetSSL_OpenSSL/testsuite/src/HTTPSServerTest.cpp deleted file mode 100644 index 7e603dd26d7..00000000000 --- a/contrib/libpoco/NetSSL_OpenSSL/testsuite/src/HTTPSServerTest.cpp +++ /dev/null @@ -1,351 +0,0 @@ -// -// HTTPSServerTest.cpp -// -// $Id: //poco/1.4/NetSSL_OpenSSL/testsuite/src/HTTPSServerTest.cpp#1 $ -// -// Copyright (c) 2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "HTTPSServerTest.h" -#include "CppUnit/TestCaller.h" -#include "CppUnit/TestSuite.h" -#include "Poco/Net/HTTPServer.h" -#include "Poco/Net/HTTPServerParams.h" -#include "Poco/Net/HTTPRequestHandler.h" -#include "Poco/Net/HTTPRequestHandlerFactory.h" -#include "Poco/Net/HTTPSClientSession.h" -#include "Poco/Net/HTTPRequest.h" -#include "Poco/Net/HTTPServerRequest.h" -#include "Poco/Net/HTTPResponse.h" -#include "Poco/Net/HTTPServerResponse.h" -#include "Poco/Net/SecureServerSocket.h" -#include "Poco/StreamCopier.h" -#include - - -using Poco::Net::HTTPServer; -using Poco::Net::HTTPServerParams; -using Poco::Net::HTTPRequestHandler; -using Poco::Net::HTTPRequestHandlerFactory; -using Poco::Net::HTTPSClientSession; -using Poco::Net::HTTPRequest; -using Poco::Net::HTTPServerRequest; -using Poco::Net::HTTPResponse; -using Poco::Net::HTTPServerResponse; -using Poco::Net::HTTPMessage; -using Poco::Net::SecureServerSocket; -using Poco::StreamCopier; - - -namespace -{ - class EchoBodyRequestHandler: public HTTPRequestHandler - { - public: - void handleRequest(HTTPServerRequest& request, HTTPServerResponse& response) - { - if (request.getChunkedTransferEncoding()) - response.setChunkedTransferEncoding(true); - else if (request.getContentLength() != HTTPMessage::UNKNOWN_CONTENT_LENGTH) - response.setContentLength(request.getContentLength()); - - response.setContentType(request.getContentType()); - - std::istream& istr = request.stream(); - std::ostream& ostr = response.send(); - StreamCopier::copyStream(istr, ostr); - } - }; - - class EchoHeaderRequestHandler: public HTTPRequestHandler - { - public: - void handleRequest(HTTPServerRequest& request, HTTPServerResponse& response) - { - std::ostringstream osstr; - request.write(osstr); - int n = (int) osstr.str().length(); - response.setContentLength(n); - std::ostream& ostr = response.send(); - if (request.getMethod() != HTTPRequest::HTTP_HEAD) - request.write(ostr); - } - }; - - class RedirectRequestHandler: public HTTPRequestHandler - { - public: - void handleRequest(HTTPServerRequest& request, HTTPServerResponse& response) - { - response.redirect("http://www.appinf.com/"); - } - }; - - class AuthRequestHandler: public HTTPRequestHandler - { - public: - void handleRequest(HTTPServerRequest& request, HTTPServerResponse& response) - { - response.requireAuthentication("/auth"); - response.send(); - } - }; - - class RequestHandlerFactory: public HTTPRequestHandlerFactory - { - public: - HTTPRequestHandler* createRequestHandler(const HTTPServerRequest& request) - { - if (request.getURI() == "/echoBody") - return new EchoBodyRequestHandler; - else if (request.getURI() == "/echoHeader") - return new EchoHeaderRequestHandler; - else if (request.getURI() == "/redirect") - return new RedirectRequestHandler(); - else if (request.getURI() == "/auth") - return new AuthRequestHandler(); - else - return 0; - } - }; -} - - -HTTPSServerTest::HTTPSServerTest(const std::string& name): CppUnit::TestCase(name) -{ -} - - -HTTPSServerTest::~HTTPSServerTest() -{ -} - - -void HTTPSServerTest::testIdentityRequest() -{ - SecureServerSocket svs(0); - HTTPServerParams* pParams = new HTTPServerParams; - pParams->setKeepAlive(false); - HTTPServer srv(new RequestHandlerFactory, svs, pParams); - srv.start(); - - HTTPSClientSession cs("localhost", svs.address().port()); - std::string body(5000, 'x'); - HTTPRequest request("POST", "/echoBody"); - request.setContentLength((int) body.length()); - request.setContentType("text/plain"); - cs.sendRequest(request) << body; - HTTPResponse response; - std::string rbody; - cs.receiveResponse(response) >> rbody; - assert (response.getContentLength() == body.size()); - assert (response.getContentType() == "text/plain"); - assert (rbody == body); -} - - -void HTTPSServerTest::testChunkedRequest() -{ - SecureServerSocket svs(0); - HTTPServerParams* pParams = new HTTPServerParams; - pParams->setKeepAlive(false); - HTTPServer srv(new RequestHandlerFactory, svs, pParams); - srv.start(); - - HTTPSClientSession cs("localhost", svs.address().port()); - std::string body(5000, 'x'); - HTTPRequest request("POST", "/echoBody"); - request.setContentType("text/plain"); - request.setChunkedTransferEncoding(true); - cs.sendRequest(request) << body; - HTTPResponse response; - std::string rbody; - cs.receiveResponse(response) >> rbody; - assert (response.getContentLength() == HTTPMessage::UNKNOWN_CONTENT_LENGTH); - assert (response.getContentType() == "text/plain"); - assert (response.getChunkedTransferEncoding()); - assert (rbody == body); -} - - -void HTTPSServerTest::testIdentityRequestKeepAlive() -{ - SecureServerSocket svs(0); - HTTPServerParams* pParams = new HTTPServerParams; - pParams->setKeepAlive(true); - HTTPServer srv(new RequestHandlerFactory, svs, pParams); - srv.start(); - - HTTPSClientSession cs("localhost", svs.address().port()); - cs.setKeepAlive(true); - std::string body(5000, 'x'); - HTTPRequest request("POST", "/echoBody", HTTPMessage::HTTP_1_1); - request.setContentLength((int) body.length()); - request.setContentType("text/plain"); - cs.sendRequest(request) << body; - HTTPResponse response; - std::string rbody; - cs.receiveResponse(response) >> rbody; - assert (response.getContentLength() == body.size()); - assert (response.getContentType() == "text/plain"); - assert (response.getKeepAlive()); - assert (rbody == body); - - body.assign(1000, 'y'); - request.setContentLength((int) body.length()); - request.setKeepAlive(false); - cs.sendRequest(request) << body; - cs.receiveResponse(response) >> rbody; - assert (response.getContentLength() == body.size()); - assert (response.getContentType() == "text/plain"); - assert (!response.getKeepAlive()); - assert (rbody == body);} - - -void HTTPSServerTest::testChunkedRequestKeepAlive() -{ - SecureServerSocket svs(0); - HTTPServerParams* pParams = new HTTPServerParams; - pParams->setKeepAlive(true); - HTTPServer srv(new RequestHandlerFactory, svs, pParams); - srv.start(); - - HTTPSClientSession cs("localhost", svs.address().port()); - cs.setKeepAlive(true); - std::string body(5000, 'x'); - HTTPRequest request("POST", "/echoBody", HTTPMessage::HTTP_1_1); - request.setContentType("text/plain"); - request.setChunkedTransferEncoding(true); - cs.sendRequest(request) << body; - HTTPResponse response; - std::string rbody; - cs.receiveResponse(response) >> rbody; - assert (response.getContentLength() == HTTPMessage::UNKNOWN_CONTENT_LENGTH); - assert (response.getContentType() == "text/plain"); - assert (response.getChunkedTransferEncoding()); - assert (rbody == body); - - body.assign(1000, 'y'); - request.setKeepAlive(false); - cs.sendRequest(request) << body; - cs.receiveResponse(response) >> rbody; - assert (response.getContentLength() == HTTPMessage::UNKNOWN_CONTENT_LENGTH); - assert (response.getContentType() == "text/plain"); - assert (response.getChunkedTransferEncoding()); - assert (!response.getKeepAlive()); - assert (rbody == body); -} - - -void HTTPSServerTest::test100Continue() -{ - SecureServerSocket svs(0); - HTTPServerParams* pParams = new HTTPServerParams; - pParams->setKeepAlive(false); - HTTPServer srv(new RequestHandlerFactory, svs, pParams); - srv.start(); - - HTTPSClientSession cs("localhost", svs.address().port()); - std::string body(5000, 'x'); - HTTPRequest request("POST", "/echoBody"); - request.setContentLength((int) body.length()); - request.setContentType("text/plain"); - request.set("Expect", "100-Continue"); - cs.sendRequest(request) << body; - HTTPResponse response; - std::string rbody; - cs.receiveResponse(response) >> rbody; - assert (response.getContentLength() == body.size()); - assert (response.getContentType() == "text/plain"); - assert (rbody == body); -} - - -void HTTPSServerTest::testRedirect() -{ - SecureServerSocket svs(0); - HTTPServerParams* pParams = new HTTPServerParams; - pParams->setKeepAlive(false); - HTTPServer srv(new RequestHandlerFactory, svs, pParams); - srv.start(); - - HTTPSClientSession cs("localhost", svs.address().port()); - HTTPRequest request("GET", "/redirect"); - cs.sendRequest(request); - HTTPResponse response; - std::string rbody; - cs.receiveResponse(response) >> rbody; - assert (response.getStatus() == HTTPResponse::HTTP_FOUND); - assert (response.get("Location") == "http://www.appinf.com/"); - assert (rbody.empty()); -} - - -void HTTPSServerTest::testAuth() -{ - SecureServerSocket svs(0); - HTTPServerParams* pParams = new HTTPServerParams; - pParams->setKeepAlive(false); - HTTPServer srv(new RequestHandlerFactory, svs, pParams); - srv.start(); - - HTTPSClientSession cs("localhost", svs.address().port()); - HTTPRequest request("GET", "/auth"); - cs.sendRequest(request); - HTTPResponse response; - std::string rbody; - cs.receiveResponse(response) >> rbody; - assert (response.getStatus() == HTTPResponse::HTTP_UNAUTHORIZED); - assert (response.get("WWW-Authenticate") == "Basic realm=\"/auth\""); - assert (rbody.empty()); -} - - -void HTTPSServerTest::testNotImpl() -{ - SecureServerSocket svs(0); - HTTPServerParams* pParams = new HTTPServerParams; - pParams->setKeepAlive(false); - HTTPServer srv(new RequestHandlerFactory, svs, pParams); - srv.start(); - - HTTPSClientSession cs("localhost", svs.address().port()); - HTTPRequest request("GET", "/notImpl"); - cs.sendRequest(request); - HTTPResponse response; - std::string rbody; - cs.receiveResponse(response) >> rbody; - assert (response.getStatus() == HTTPResponse::HTTP_NOT_IMPLEMENTED); - assert (rbody.empty()); -} - - -void HTTPSServerTest::setUp() -{ -} - - -void HTTPSServerTest::tearDown() -{ -} - - -CppUnit::Test* HTTPSServerTest::suite() -{ - CppUnit::TestSuite* pSuite = new CppUnit::TestSuite("HTTPSServerTest"); - - CppUnit_addTest(pSuite, HTTPSServerTest, testIdentityRequest); - CppUnit_addTest(pSuite, HTTPSServerTest, testChunkedRequest); - CppUnit_addTest(pSuite, HTTPSServerTest, testIdentityRequestKeepAlive); - CppUnit_addTest(pSuite, HTTPSServerTest, testChunkedRequestKeepAlive); - CppUnit_addTest(pSuite, HTTPSServerTest, test100Continue); - CppUnit_addTest(pSuite, HTTPSServerTest, testRedirect); - CppUnit_addTest(pSuite, HTTPSServerTest, testAuth); - CppUnit_addTest(pSuite, HTTPSServerTest, testNotImpl); - - return pSuite; -} diff --git a/contrib/libpoco/NetSSL_OpenSSL/testsuite/src/HTTPSServerTest.h b/contrib/libpoco/NetSSL_OpenSSL/testsuite/src/HTTPSServerTest.h deleted file mode 100644 index 7ff9ed68e56..00000000000 --- a/contrib/libpoco/NetSSL_OpenSSL/testsuite/src/HTTPSServerTest.h +++ /dev/null @@ -1,47 +0,0 @@ -// -// HTTPSServerTest.h -// -// $Id: //poco/1.4/NetSSL_OpenSSL/testsuite/src/HTTPSServerTest.h#1 $ -// -// Definition of the HTTPSServerTest class. -// -// Copyright (c) 2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef HTTPSServerTest_INCLUDED -#define HTTPSServerTest_INCLUDED - - -#include "Poco/Net/Net.h" -#include "CppUnit/TestCase.h" - - -class HTTPSServerTest: public CppUnit::TestCase -{ -public: - HTTPSServerTest(const std::string& name); - ~HTTPSServerTest(); - - void testIdentityRequest(); - void testChunkedRequest(); - void testIdentityRequestKeepAlive(); - void testChunkedRequestKeepAlive(); - void test100Continue(); - void testRedirect(); - void testAuth(); - void testNotImpl(); - - void setUp(); - void tearDown(); - - static CppUnit::Test* suite(); - -private: -}; - - -#endif // HTTPSServerTest_INCLUDED diff --git a/contrib/libpoco/NetSSL_OpenSSL/testsuite/src/HTTPSServerTestSuite.cpp b/contrib/libpoco/NetSSL_OpenSSL/testsuite/src/HTTPSServerTestSuite.cpp deleted file mode 100644 index ec58bea7f55..00000000000 --- a/contrib/libpoco/NetSSL_OpenSSL/testsuite/src/HTTPSServerTestSuite.cpp +++ /dev/null @@ -1,24 +0,0 @@ -// -// HTTPSServerTestSuite.cpp -// -// $Id: //poco/1.4/NetSSL_OpenSSL/testsuite/src/HTTPSServerTestSuite.cpp#1 $ -// -// Copyright (c) 2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "HTTPSServerTestSuite.h" -#include "HTTPSServerTest.h" - - -CppUnit::Test* HTTPSServerTestSuite::suite() -{ - CppUnit::TestSuite* pSuite = new CppUnit::TestSuite("HTTPSServerTestSuite"); - - pSuite->addTest(HTTPSServerTest::suite()); - - return pSuite; -} diff --git a/contrib/libpoco/NetSSL_OpenSSL/testsuite/src/HTTPSServerTestSuite.h b/contrib/libpoco/NetSSL_OpenSSL/testsuite/src/HTTPSServerTestSuite.h deleted file mode 100644 index cc97bf2c1d1..00000000000 --- a/contrib/libpoco/NetSSL_OpenSSL/testsuite/src/HTTPSServerTestSuite.h +++ /dev/null @@ -1,29 +0,0 @@ -// -// HTTPSServerTestSuite.h -// -// $Id: //poco/1.4/NetSSL_OpenSSL/testsuite/src/HTTPSServerTestSuite.h#1 $ -// -// Definition of the HTTPSServerTestSuite class. -// -// Copyright (c) 2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef HTTPSServerTestSuite_INCLUDED -#define HTTPSServerTestSuite_INCLUDED - - -#include "CppUnit/TestSuite.h" - - -class HTTPSServerTestSuite -{ -public: - static CppUnit::Test* suite(); -}; - - -#endif // HTTPSServerTestSuite_INCLUDED diff --git a/contrib/libpoco/NetSSL_OpenSSL/testsuite/src/HTTPSStreamFactoryTest.cpp b/contrib/libpoco/NetSSL_OpenSSL/testsuite/src/HTTPSStreamFactoryTest.cpp deleted file mode 100644 index 216c451068c..00000000000 --- a/contrib/libpoco/NetSSL_OpenSSL/testsuite/src/HTTPSStreamFactoryTest.cpp +++ /dev/null @@ -1,139 +0,0 @@ -// -// HTTPSStreamFactoryTest.cpp -// -// $Id: //poco/1.4/NetSSL_OpenSSL/testsuite/src/HTTPSStreamFactoryTest.cpp#1 $ -// -// Copyright (c) 2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "HTTPSStreamFactoryTest.h" -#include "CppUnit/TestCaller.h" -#include "CppUnit/TestSuite.h" -#include "Poco/Net/HTTPSStreamFactory.h" -#include "Poco/Net/NetException.h" -#include "Poco/Util/Application.h" -#include "Poco/Util/AbstractConfiguration.h" -#include "Poco/URI.h" -#include "Poco/Exception.h" -#include "Poco/StreamCopier.h" -#include "HTTPSTestServer.h" -#include -#include - - -using Poco::Net::HTTPSStreamFactory; -using Poco::Net::NetException; -using Poco::Net::HTTPException; -using Poco::Util::Application; -using Poco::URI; -using Poco::StreamCopier; - - -HTTPSStreamFactoryTest::HTTPSStreamFactoryTest(const std::string& name): CppUnit::TestCase(name) -{ -} - - -HTTPSStreamFactoryTest::~HTTPSStreamFactoryTest() -{ -} - - -void HTTPSStreamFactoryTest::testNoRedirect() -{ - HTTPSTestServer server; - HTTPSStreamFactory factory; - URI uri("https://localhost/large"); - uri.setPort(server.port()); - std::unique_ptr pStr(factory.open(uri)); - std::ostringstream ostr; - StreamCopier::copyStream(*pStr.get(), ostr); - assert (ostr.str() == HTTPSTestServer::LARGE_BODY); -} - - -void HTTPSStreamFactoryTest::testEmptyPath() -{ - HTTPSTestServer server; - HTTPSStreamFactory factory; - URI uri("https://localhost"); - uri.setPort(server.port()); - std::unique_ptr pStr(factory.open(uri)); - std::ostringstream ostr; - StreamCopier::copyStream(*pStr.get(), ostr); - assert (ostr.str() == HTTPSTestServer::SMALL_BODY); -} - - -void HTTPSStreamFactoryTest::testRedirect() -{ - HTTPSTestServer server; - HTTPSStreamFactory factory; - URI uri("https://localhost/redirect"); - uri.setPort(server.port()); - std::unique_ptr pStr(factory.open(uri)); - std::ostringstream ostr; - StreamCopier::copyStream(*pStr.get(), ostr); - assert (ostr.str() == HTTPSTestServer::LARGE_BODY); -} - - -void HTTPSStreamFactoryTest::testProxy() -{ - HTTPSTestServer server; - HTTPSStreamFactory factory( - Application::instance().config().getString("testsuite.proxy.host"), - Application::instance().config().getInt("testsuite.proxy.port") - ); - URI uri("https://secure.appinf.com/public/poco/NetSSL.txt"); - std::unique_ptr pStr(factory.open(uri)); - std::ostringstream ostr; - StreamCopier::copyStream(*pStr.get(), ostr); - assert (ostr.str().length() > 0); -} - - -void HTTPSStreamFactoryTest::testError() -{ - HTTPSTestServer server; - HTTPSStreamFactory factory; - URI uri("https://localhost/notfound"); - uri.setPort(server.port()); - try - { - std::istream* pStr = factory.open(uri); - fail("not found - must throw"); - } - catch (HTTPException& exc) - { - std::string m = exc.displayText(); - } -} - - -void HTTPSStreamFactoryTest::setUp() -{ -} - - -void HTTPSStreamFactoryTest::tearDown() -{ -} - - -CppUnit::Test* HTTPSStreamFactoryTest::suite() -{ - CppUnit::TestSuite* pSuite = new CppUnit::TestSuite("HTTPSStreamFactoryTest"); - - CppUnit_addTest(pSuite, HTTPSStreamFactoryTest, testNoRedirect); - CppUnit_addTest(pSuite, HTTPSStreamFactoryTest, testEmptyPath); - CppUnit_addTest(pSuite, HTTPSStreamFactoryTest, testRedirect); - CppUnit_addTest(pSuite, HTTPSStreamFactoryTest, testProxy); - CppUnit_addTest(pSuite, HTTPSStreamFactoryTest, testError); - - return pSuite; -} diff --git a/contrib/libpoco/NetSSL_OpenSSL/testsuite/src/HTTPSStreamFactoryTest.h b/contrib/libpoco/NetSSL_OpenSSL/testsuite/src/HTTPSStreamFactoryTest.h deleted file mode 100644 index 13cfba3e01a..00000000000 --- a/contrib/libpoco/NetSSL_OpenSSL/testsuite/src/HTTPSStreamFactoryTest.h +++ /dev/null @@ -1,44 +0,0 @@ -// -// HTTPSStreamFactoryTest.h -// -// $Id: //poco/1.4/NetSSL_OpenSSL/testsuite/src/HTTPSStreamFactoryTest.h#1 $ -// -// Definition of the HTTPSStreamFactoryTest class. -// -// Copyright (c) 2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef HTTPSStreamFactoryTest_INCLUDED -#define HTTPSStreamFactoryTest_INCLUDED - - -#include "Poco/Net/Net.h" -#include "CppUnit/TestCase.h" - - -class HTTPSStreamFactoryTest: public CppUnit::TestCase -{ -public: - HTTPSStreamFactoryTest(const std::string& name); - ~HTTPSStreamFactoryTest(); - - void testNoRedirect(); - void testEmptyPath(); - void testRedirect(); - void testProxy(); - void testError(); - - void setUp(); - void tearDown(); - - static CppUnit::Test* suite(); - -private: -}; - - -#endif // HTTPSStreamFactoryTest_INCLUDED diff --git a/contrib/libpoco/NetSSL_OpenSSL/testsuite/src/HTTPSTestServer.cpp b/contrib/libpoco/NetSSL_OpenSSL/testsuite/src/HTTPSTestServer.cpp deleted file mode 100644 index d67ff52c144..00000000000 --- a/contrib/libpoco/NetSSL_OpenSSL/testsuite/src/HTTPSTestServer.cpp +++ /dev/null @@ -1,249 +0,0 @@ -// -// HTTPSTestServer.cpp -// -// $Id: //poco/1.4/NetSSL_OpenSSL/testsuite/src/HTTPSTestServer.cpp#1 $ -// -// Copyright (c) 2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "HTTPSTestServer.h" -#include "Poco/Net/SecureStreamSocket.h" -#include "Poco/Net/SocketAddress.h" -#include "Poco/Net/SecureStreamSocketImpl.h" -#include "Poco/Timespan.h" -#include "Poco/NumberFormatter.h" -#include - - -using Poco::Net::Socket; -using Poco::Net::StreamSocket; -using Poco::Net::SecureStreamSocket; -using Poco::Net::SecureServerSocket; -using Poco::Net::SocketAddress; -using Poco::Net::SecureStreamSocketImpl; -using Poco::NumberFormatter; - - -const std::string HTTPSTestServer::SMALL_BODY("This is some random text data returned by the server"); -const std::string HTTPSTestServer::LARGE_BODY(4000, 'x'); - - -HTTPSTestServer::HTTPSTestServer(): - _socket(SocketAddress()), - _thread("HTTPSTestServer"), - _stop(false) -{ - _thread.start(*this); - _ready.wait(); - _lastRequest.reserve(4000); -} - - -HTTPSTestServer::HTTPSTestServer(Poco::Net::Context::Ptr pContext): - _socket(SocketAddress(), 64, pContext), - _thread("HTTPSTestServer"), - _stop(false) -{ - _thread.start(*this); - _ready.wait(); - _lastRequest.reserve(4000); -} - - -HTTPSTestServer::~HTTPSTestServer() -{ - _stop = true; - _thread.join(); -} - - -Poco::UInt16 HTTPSTestServer::port() const -{ - return _socket.address().port(); -} - - -const std::string& HTTPSTestServer::lastRequest() const -{ - return _lastRequest; -} - - -void HTTPSTestServer::run() -{ - _ready.set(); - Poco::Timespan span(250000); - while (!_stop) - { - if (_socket.poll(span, Socket::SELECT_READ)) - { - StreamSocket ss = _socket.acceptConnection(); - try - { - _lastRequest.clear(); - char buffer[256]; - int n = ss.receiveBytes(buffer, sizeof(buffer)); - while (n > 0 && !_stop) - { - _lastRequest.append(buffer, n); - if (!requestComplete()) - n = ss.receiveBytes(buffer, sizeof(buffer)); - else - n = 0; - } - std::string response = handleRequest(); - ss.sendBytes(response.data(), (int) response.size()); - if(_lastRequest.find("/connection/abort")!=std::string::npos) { - SecureStreamSocketImpl* sss = dynamic_cast(ss.impl()); - if(sss!=NULL) sss->abort(); - } - Poco::Thread::sleep(1000); - } - catch (Poco::Exception& exc) - { - std::cerr << "HTTPSTestServer: " << exc.displayText() << std::endl; - } - } - } -} - - -bool HTTPSTestServer::requestComplete() const -{ - return ((_lastRequest.substr(0, 3) == "GET" || _lastRequest.substr(0, 4) == "HEAD") && - (_lastRequest.find("\r\n\r\n") != std::string::npos)) || - (_lastRequest.find("\r\n0\r\n") != std::string::npos); -} - - -std::string HTTPSTestServer::handleRequest() const -{ - std::string response; - response.reserve(16000); - if (_lastRequest.substr(0, 10) == "GET /small" || - _lastRequest.substr(0, 11) == "HEAD /small") - { - std::string body(SMALL_BODY); - response.append("HTTP/1.0 200 OK\r\n"); - response.append("Content-Type: text/plain\r\n"); - response.append("Content-Length: "); - response.append(NumberFormatter::format((int) body.size())); - response.append("\r\n"); - response.append("Connection: Close\r\n"); - response.append("\r\n"); - if (_lastRequest.substr(0, 3) == "GET") - response.append(body); - } - else if (_lastRequest.substr(0, 10) == "GET /large" || - _lastRequest.substr(0, 11) == "HEAD /large" || - _lastRequest.substr(0, 36) == "GET http://www.somehost.com:80/large") - { - std::string body(LARGE_BODY); - response.append("HTTP/1.0 200 OK\r\n"); - response.append("Content-Type: text/plain\r\n"); - response.append("Content-Length: "); - response.append(NumberFormatter::format((int) body.size())); - response.append("\r\n"); - response.append("Connection: Close\r\n"); - response.append("\r\n"); - if (_lastRequest.substr(0, 3) == "GET") - response.append(body); - } - else if (_lastRequest.substr(0, 13) == "GET /nolength" || - _lastRequest.substr(0, 14) == "HEAD /nolength") - { - std::string body(SMALL_BODY); - response.append("HTTP/1.0 200 OK\r\n"); - response.append("Content-Type: text/plain\r\n"); - response.append("Connection: Close\r\n"); - response.append("\r\n"); - if (_lastRequest.substr(0, 3) == "GET") - response.append(body); - } - else if (_lastRequest.substr(0, 4) == "POST") - { - std::string::size_type pos = _lastRequest.find("\r\n\r\n"); - pos += 4; - std::string body = _lastRequest.substr(pos); - response.append("HTTP/1.0 200 OK\r\n"); - response.append("Content-Type: text/plain\r\n"); - if (_lastRequest.find("Content-Length") != std::string::npos) - { - response.append("Content-Length: "); - response.append(NumberFormatter::format((int) body.size())); - response.append("\r\n"); - } - else if (_lastRequest.find("chunked") != std::string::npos) - { - response.append("Transfer-Encoding: chunked\r\n"); - } - if (_lastRequest.substr(0,15) == "POST /keepAlive") - response.append("Connection: keep-alive\r\n"); - else - response.append("Connection: Close\r\n"); - response.append("\r\n"); - response.append(body); - } - else if (_lastRequest.substr(0, 15) == "HEAD /keepAlive") - { - std::string body(SMALL_BODY); - response.append("HTTP/1.1 200 OK\r\n"); - response.append("Connection: keep-alive\r\n"); - response.append("Content-Type: text/plain\r\n"); - response.append("Content-Length: "); - response.append(NumberFormatter::format((int) body.size())); - response.append("\r\n\r\n"); - response.append("HTTP/1.1 200 OK\r\n"); - response.append("Connection: Keep-Alive\r\n"); - response.append("Content-Type: text/plain\r\n"); - response.append("Content-Length: "); - response.append(NumberFormatter::format((int) body.size())); - response.append("\r\n\r\n"); - response.append(body); - body = LARGE_BODY; - response.append("HTTP/1.1 200 OK\r\n"); - response.append("Connection: keep-alive\r\n"); - response.append("Content-Type: text/plain\r\n"); - response.append("Transfer-Encoding: chunked\r\n\r\n"); - response.append(NumberFormatter::formatHex((unsigned) body.length())); - response.append("\r\n"); - response.append(body); - response.append("\r\n0\r\n\r\n"); - response.append("HTTP/1.1 200 OK\r\n"); - response.append("Connection: close\r\n"); - response.append("Content-Type: text/plain\r\n"); - response.append("Content-Length: "); - response.append(NumberFormatter::format((int) body.size())); - response.append("\r\n\r\n"); - } - else if (_lastRequest.substr(0, 13) == "GET /redirect") - { - response.append("HTTP/1.0 302 Found\r\n"); - response.append("Location: /large\r\n"); - response.append("\r\n"); - } - else if (_lastRequest.substr(0, 13) == "GET /notfound") - { - response.append("HTTP/1.0 404 Not Found\r\n"); - response.append("\r\n"); - } - else if (_lastRequest.substr(0, 5) == "GET /" || - _lastRequest.substr(0, 6) == "HEAD /") - { - std::string body(SMALL_BODY); - response.append("HTTP/1.0 200 OK\r\n"); - response.append("Content-Type: text/plain\r\n"); - response.append("Content-Length: "); - response.append(NumberFormatter::format((int) body.size())); - response.append("\r\n"); - response.append("Connection: Close\r\n"); - response.append("\r\n"); - if (_lastRequest.substr(0, 3) == "GET") - response.append(body); - } - return response; -} diff --git a/contrib/libpoco/NetSSL_OpenSSL/testsuite/src/HTTPSTestServer.h b/contrib/libpoco/NetSSL_OpenSSL/testsuite/src/HTTPSTestServer.h deleted file mode 100644 index e6d51b38c24..00000000000 --- a/contrib/libpoco/NetSSL_OpenSSL/testsuite/src/HTTPSTestServer.h +++ /dev/null @@ -1,64 +0,0 @@ -// -// HTTPSTestServer.h -// -// $Id: //poco/1.4/NetSSL_OpenSSL/testsuite/src/HTTPSTestServer.h#1 $ -// -// Definition of the HTTPSTestServer class. -// -// Copyright (c) 2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef HTTPSTestServer_INCLUDED -#define HTTPSTestServer_INCLUDED - - -#include "Poco/Net/Net.h" -#include "Poco/Net/SecureServerSocket.h" -#include "Poco/Thread.h" -#include "Poco/Event.h" - - -class HTTPSTestServer: public Poco::Runnable - /// A simple sequential echo server. -{ -public: - HTTPSTestServer(); - /// Creates the HTTPSTestServer. - - explicit HTTPSTestServer(Poco::Net::Context::Ptr pContext); - /// Creates the HTTPSTestServer using the given Context. - - ~HTTPSTestServer(); - /// Destroys the HTTPSTestServer. - - Poco::UInt16 port() const; - /// Returns the port the echo server is - /// listening on. - - void run(); - /// Does the work. - - const std::string& lastRequest() const; - /// Returns the last request. - - static const std::string SMALL_BODY; - static const std::string LARGE_BODY; - -protected: - bool requestComplete() const; - std::string handleRequest() const; - -private: - Poco::Net::SecureServerSocket _socket; - Poco::Thread _thread; - Poco::Event _ready; - bool _stop; - std::string _lastRequest; -}; - - -#endif // HTTPSTestServer_INCLUDED diff --git a/contrib/libpoco/NetSSL_OpenSSL/testsuite/src/NetSSLTestSuite.cpp b/contrib/libpoco/NetSSL_OpenSSL/testsuite/src/NetSSLTestSuite.cpp deleted file mode 100644 index 241a68dbd55..00000000000 --- a/contrib/libpoco/NetSSL_OpenSSL/testsuite/src/NetSSLTestSuite.cpp +++ /dev/null @@ -1,30 +0,0 @@ -// -// OpenSSLTestSuite.cpp -// -// $Id: //poco/1.4/NetSSL_OpenSSL/testsuite/src/NetSSLTestSuite.cpp#1 $ -// -// Copyright (c) 2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "NetSSLTestSuite.h" - -#include "HTTPSClientTestSuite.h" -#include "TCPServerTestSuite.h" -#include "HTTPSServerTestSuite.h" - - -CppUnit::Test* NetSSLTestSuite::suite() -{ - CppUnit::TestSuite* pSuite = new CppUnit::TestSuite("OpenSSLTestSuite"); - - - pSuite->addTest(HTTPSClientTestSuite::suite()); - pSuite->addTest(TCPServerTestSuite::suite()); - pSuite->addTest(HTTPSServerTestSuite::suite()); - - return pSuite; -} diff --git a/contrib/libpoco/NetSSL_OpenSSL/testsuite/src/NetSSLTestSuite.h b/contrib/libpoco/NetSSL_OpenSSL/testsuite/src/NetSSLTestSuite.h deleted file mode 100644 index afc1f5abbc3..00000000000 --- a/contrib/libpoco/NetSSL_OpenSSL/testsuite/src/NetSSLTestSuite.h +++ /dev/null @@ -1,29 +0,0 @@ -// -// NetSSLTestSuite.h -// -// $Id: //poco/1.4/NetSSL_OpenSSL/testsuite/src/NetSSLTestSuite.h#1 $ -// -// Definition of the NetSSLTestSuite class. -// -// Copyright (c) 2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef NetSSLTestSuite_INCLUDED -#define NetSSLTestSuite_INCLUDED - - -#include "CppUnit/TestSuite.h" - - -class NetSSLTestSuite -{ -public: - static CppUnit::Test* suite(); -}; - - -#endif // NetSSLTestSuite_INCLUDED diff --git a/contrib/libpoco/NetSSL_OpenSSL/testsuite/src/TCPServerTest.cpp b/contrib/libpoco/NetSSL_OpenSSL/testsuite/src/TCPServerTest.cpp deleted file mode 100644 index 4a39a1f1204..00000000000 --- a/contrib/libpoco/NetSSL_OpenSSL/testsuite/src/TCPServerTest.cpp +++ /dev/null @@ -1,407 +0,0 @@ -// -// TCPServerTest.cpp -// -// $Id: //poco/1.4/NetSSL_OpenSSL/testsuite/src/TCPServerTest.cpp#2 $ -// -// Copyright (c) 2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "TCPServerTest.h" -#include "CppUnit/TestCaller.h" -#include "CppUnit/TestSuite.h" -#include "Poco/Net/TCPServer.h" -#include "Poco/Net/TCPServerConnection.h" -#include "Poco/Net/TCPServerConnectionFactory.h" -#include "Poco/Net/TCPServerParams.h" -#include "Poco/Net/SecureStreamSocket.h" -#include "Poco/Net/SecureServerSocket.h" -#include "Poco/Net/Context.h" -#include "Poco/Net/Session.h" -#include "Poco/Net/SSLManager.h" -#include "Poco/Util/Application.h" -#include "Poco/Util/AbstractConfiguration.h" -#include "Poco/Thread.h" -#include - - -using Poco::Net::TCPServer; -using Poco::Net::TCPServerConnection; -using Poco::Net::TCPServerConnectionFactory; -using Poco::Net::TCPServerConnectionFactoryImpl; -using Poco::Net::TCPServerParams; -using Poco::Net::StreamSocket; -using Poco::Net::SecureStreamSocket; -using Poco::Net::SecureServerSocket; -using Poco::Net::SocketAddress; -using Poco::Net::Context; -using Poco::Net::Session; -using Poco::Net::SSLManager; -using Poco::Thread; -using Poco::Util::Application; - - -namespace -{ - class EchoConnection: public TCPServerConnection - { - public: - EchoConnection(const StreamSocket& s): TCPServerConnection(s) - { - } - - void run() - { - StreamSocket& ss = socket(); - try - { - char buffer[256]; - int n = ss.receiveBytes(buffer, sizeof(buffer)); - while (n > 0) - { - ss.sendBytes(buffer, n); - n = ss.receiveBytes(buffer, sizeof(buffer)); - } - } - catch (Poco::Exception& exc) - { - std::cerr << "EchoConnection: " << exc.displayText() << std::endl; - } - } - }; -} - - -TCPServerTest::TCPServerTest(const std::string& name): CppUnit::TestCase(name) -{ -} - - -TCPServerTest::~TCPServerTest() -{ -} - - -void TCPServerTest::testOneConnection() -{ - SecureServerSocket svs(0); - TCPServer srv(new TCPServerConnectionFactoryImpl(), svs); - srv.start(); - assert (srv.currentConnections() == 0); - assert (srv.currentThreads() == 0); - assert (srv.queuedConnections() == 0); - assert (srv.totalConnections() == 0); - - SocketAddress sa("localhost", svs.address().port()); - SecureStreamSocket ss1(sa); - std::string data("hello, world"); - ss1.sendBytes(data.data(), (int) data.size()); - char buffer[256]; - int n = ss1.receiveBytes(buffer, sizeof(buffer)); - assert (n > 0); - assert (std::string(buffer, n) == data); - assert (srv.currentConnections() == 1); - assert (srv.currentThreads() == 1); - assert (srv.queuedConnections() == 0); - assert (srv.totalConnections() == 1); - ss1.close(); - Thread::sleep(300); - assert (srv.currentConnections() == 0); -} - - -void TCPServerTest::testTwoConnections() -{ - SecureServerSocket svs(0); - TCPServer srv(new TCPServerConnectionFactoryImpl(), svs); - srv.start(); - assert (srv.currentConnections() == 0); - assert (srv.currentThreads() == 0); - assert (srv.queuedConnections() == 0); - assert (srv.totalConnections() == 0); - - SocketAddress sa("localhost", svs.address().port()); - SecureStreamSocket ss1(sa); - SecureStreamSocket ss2(sa); - std::string data("hello, world"); - ss1.sendBytes(data.data(), (int) data.size()); - ss2.sendBytes(data.data(), (int) data.size()); - - char buffer[256]; - int n = ss1.receiveBytes(buffer, sizeof(buffer)); - assert (n > 0); - assert (std::string(buffer, n) == data); - - n = ss2.receiveBytes(buffer, sizeof(buffer)); - assert (n > 0); - assert (std::string(buffer, n) == data); - - assert (srv.currentConnections() == 2); - assert (srv.currentThreads() == 2); - assert (srv.queuedConnections() == 0); - assert (srv.totalConnections() == 2); - ss1.close(); - Thread::sleep(300); - assert (srv.currentConnections() == 1); - assert (srv.currentThreads() == 1); - assert (srv.queuedConnections() == 0); - assert (srv.totalConnections() == 2); - ss2.close(); - - Thread::sleep(300); - assert (srv.currentConnections() == 0); -} - - -void TCPServerTest::testMultiConnections() -{ - SecureServerSocket svs(0); - TCPServerParams* pParams = new TCPServerParams; - pParams->setMaxThreads(4); - pParams->setMaxQueued(4); - pParams->setThreadIdleTime(100); - TCPServer srv(new TCPServerConnectionFactoryImpl(), svs, pParams); - srv.start(); - assert (srv.currentConnections() == 0); - assert (srv.currentThreads() == 0); - assert (srv.queuedConnections() == 0); - assert (srv.totalConnections() == 0); - - SocketAddress sa("localhost", svs.address().port()); - SecureStreamSocket ss1(sa); - SecureStreamSocket ss2(sa); - SecureStreamSocket ss3(sa); - SecureStreamSocket ss4(sa); - std::string data("hello, world"); - ss1.sendBytes(data.data(), (int) data.size()); - ss2.sendBytes(data.data(), (int) data.size()); - ss3.sendBytes(data.data(), (int) data.size()); - ss4.sendBytes(data.data(), (int) data.size()); - - char buffer[256]; - int n = ss1.receiveBytes(buffer, sizeof(buffer)); - assert (n > 0); - assert (std::string(buffer, n) == data); - - n = ss2.receiveBytes(buffer, sizeof(buffer)); - assert (n > 0); - assert (std::string(buffer, n) == data); - - n = ss3.receiveBytes(buffer, sizeof(buffer)); - assert (n > 0); - assert (std::string(buffer, n) == data); - - n = ss4.receiveBytes(buffer, sizeof(buffer)); - assert (n > 0); - assert (std::string(buffer, n) == data); - - assert (srv.currentConnections() == 4); - assert (srv.currentThreads() == 4); - assert (srv.queuedConnections() == 0); - assert (srv.totalConnections() == 4); - - SecureStreamSocket ss5; - ss5.setLazyHandshake(); - ss5.connect(sa); - Thread::sleep(200); - assert (srv.queuedConnections() == 1); - SecureStreamSocket ss6; - ss6.setLazyHandshake(); - ss6.connect(sa); - Thread::sleep(200); - assert (srv.queuedConnections() == 2); - - ss1.close(); - Thread::sleep(300); - assert (srv.currentConnections() == 4); - assert (srv.currentThreads() == 4); - assert (srv.queuedConnections() == 1); - assert (srv.totalConnections() == 5); - - ss2.close(); - Thread::sleep(300); - assert (srv.currentConnections() == 4); - assert (srv.currentThreads() == 4); - assert (srv.queuedConnections() == 0); - assert (srv.totalConnections() == 6); - - ss3.close(); - Thread::sleep(300); - assert (srv.currentConnections() == 3); - assert (srv.currentThreads() == 3); - assert (srv.queuedConnections() == 0); - assert (srv.totalConnections() == 6); - - ss4.close(); - Thread::sleep(300); - assert (srv.currentConnections() == 2); - assert (srv.currentThreads() == 2); - assert (srv.queuedConnections() == 0); - assert (srv.totalConnections() == 6); - - ss5.close(); - ss6.close(); - Thread::sleep(300); - assert (srv.currentConnections() == 0); -} - - -void TCPServerTest::testReuseSocket() -{ - SecureServerSocket svs(0); - TCPServer srv(new TCPServerConnectionFactoryImpl(), svs); - srv.start(); - assert (srv.currentConnections() == 0); - assert (srv.currentThreads() == 0); - assert (srv.queuedConnections() == 0); - assert (srv.totalConnections() == 0); - - SocketAddress sa("localhost", svs.address().port()); - SecureStreamSocket ss1(sa); - std::string data("hello, world"); - ss1.sendBytes(data.data(), (int) data.size()); - char buffer[256]; - int n = ss1.receiveBytes(buffer, sizeof(buffer)); - assert (n > 0); - assert (std::string(buffer, n) == data); - assert (srv.currentConnections() == 1); - assert (srv.currentThreads() == 1); - assert (srv.queuedConnections() == 0); - assert (srv.totalConnections() == 1); - ss1.close(); - Thread::sleep(300); - assert (srv.currentConnections() == 0); - - ss1.connect(sa); - ss1.sendBytes(data.data(), (int) data.size()); - n = ss1.receiveBytes(buffer, sizeof(buffer)); - assert (n > 0); - assert (std::string(buffer, n) == data); - assert (srv.currentConnections() == 1); - assert (srv.queuedConnections() == 0); - assert (srv.totalConnections() == 2); - ss1.close(); - Thread::sleep(300); - assert (srv.currentConnections() == 0); -} - - -void TCPServerTest::testReuseSession() -{ - // ensure OpenSSL machinery is fully setup - Context::Ptr pDefaultServerContext = SSLManager::instance().defaultServerContext(); - Context::Ptr pDefaultClientContext = SSLManager::instance().defaultClientContext(); - - Context::Ptr pServerContext = new Context( - Context::SERVER_USE, - Application::instance().config().getString("openSSL.server.privateKeyFile"), - Application::instance().config().getString("openSSL.server.privateKeyFile"), - Application::instance().config().getString("openSSL.server.caConfig"), - Context::VERIFY_NONE, - 9, - true, - "ALL:!ADH:!LOW:!EXP:!MD5:@STRENGTH"); - pServerContext->enableSessionCache(true, "TestSuite"); - pServerContext->setSessionTimeout(10); - pServerContext->setSessionCacheSize(1000); - pServerContext->disableStatelessSessionResumption(); - - SecureServerSocket svs(0, 64, pServerContext); - TCPServer srv(new TCPServerConnectionFactoryImpl(), svs); - srv.start(); - assert (srv.currentConnections() == 0); - assert (srv.currentThreads() == 0); - assert (srv.queuedConnections() == 0); - assert (srv.totalConnections() == 0); - - Context::Ptr pClientContext = new Context( - Context::CLIENT_USE, - Application::instance().config().getString("openSSL.client.privateKeyFile"), - Application::instance().config().getString("openSSL.client.privateKeyFile"), - Application::instance().config().getString("openSSL.client.caConfig"), - Context::VERIFY_RELAXED, - 9, - true, - "ALL:!ADH:!LOW:!EXP:!MD5:@STRENGTH"); - pClientContext->enableSessionCache(true); - - SocketAddress sa("localhost", svs.address().port()); - SecureStreamSocket ss1(sa, pClientContext); - assert (!ss1.sessionWasReused()); - std::string data("hello, world"); - ss1.sendBytes(data.data(), (int) data.size()); - char buffer[256]; - int n = ss1.receiveBytes(buffer, sizeof(buffer)); - assert (n > 0); - assert (std::string(buffer, n) == data); - assert (srv.currentConnections() == 1); - assert (srv.currentThreads() == 1); - assert (srv.queuedConnections() == 0); - assert (srv.totalConnections() == 1); - - Session::Ptr pSession = ss1.currentSession(); - - ss1.close(); - Thread::sleep(300); - assert (srv.currentConnections() == 0); - - ss1.useSession(pSession); - ss1.connect(sa); - assert (ss1.sessionWasReused()); - assert (ss1.currentSession() == pSession); - ss1.sendBytes(data.data(), (int) data.size()); - n = ss1.receiveBytes(buffer, sizeof(buffer)); - assert (n > 0); - assert (std::string(buffer, n) == data); - assert (srv.currentConnections() == 1); - assert (srv.queuedConnections() == 0); - assert (srv.totalConnections() == 2); - ss1.close(); - Thread::sleep(300); - assert (srv.currentConnections() == 0); - - Thread::sleep(15000); // wait for session to expire - pServerContext->flushSessionCache(); - - ss1.useSession(pSession); - ss1.connect(sa); - assert (!ss1.sessionWasReused()); - assert (ss1.currentSession() != pSession); - ss1.sendBytes(data.data(), (int) data.size()); - n = ss1.receiveBytes(buffer, sizeof(buffer)); - assert (n > 0); - assert (std::string(buffer, n) == data); - assert (srv.currentConnections() == 1); - assert (srv.queuedConnections() == 0); - assert (srv.totalConnections() == 3); - ss1.close(); - Thread::sleep(300); - assert (srv.currentConnections() == 0); -} - - -void TCPServerTest::setUp() -{ -} - - -void TCPServerTest::tearDown() -{ -} - - -CppUnit::Test* TCPServerTest::suite() -{ - CppUnit::TestSuite* pSuite = new CppUnit::TestSuite("TCPServerTest"); - - CppUnit_addTest(pSuite, TCPServerTest, testOneConnection); - CppUnit_addTest(pSuite, TCPServerTest, testTwoConnections); - CppUnit_addTest(pSuite, TCPServerTest, testMultiConnections); - CppUnit_addTest(pSuite, TCPServerTest, testReuseSocket); - CppUnit_addTest(pSuite, TCPServerTest, testReuseSession); - - return pSuite; -} diff --git a/contrib/libpoco/NetSSL_OpenSSL/testsuite/src/TCPServerTest.h b/contrib/libpoco/NetSSL_OpenSSL/testsuite/src/TCPServerTest.h deleted file mode 100644 index 8673230e302..00000000000 --- a/contrib/libpoco/NetSSL_OpenSSL/testsuite/src/TCPServerTest.h +++ /dev/null @@ -1,44 +0,0 @@ -// -// TCPServerTest.h -// -// $Id: //poco/1.4/NetSSL_OpenSSL/testsuite/src/TCPServerTest.h#1 $ -// -// Definition of the TCPServerTest class. -// -// Copyright (c) 2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef TCPServerTest_INCLUDED -#define TCPServerTest_INCLUDED - - -#include "Poco/Net/Net.h" -#include "CppUnit/TestCase.h" - - -class TCPServerTest: public CppUnit::TestCase -{ -public: - TCPServerTest(const std::string& name); - ~TCPServerTest(); - - void testOneConnection(); - void testTwoConnections(); - void testMultiConnections(); - void testReuseSocket(); - void testReuseSession(); - - void setUp(); - void tearDown(); - - static CppUnit::Test* suite(); - -private: -}; - - -#endif // TCPServerTest_INCLUDED diff --git a/contrib/libpoco/NetSSL_OpenSSL/testsuite/src/TCPServerTestSuite.cpp b/contrib/libpoco/NetSSL_OpenSSL/testsuite/src/TCPServerTestSuite.cpp deleted file mode 100644 index 94e706bd47c..00000000000 --- a/contrib/libpoco/NetSSL_OpenSSL/testsuite/src/TCPServerTestSuite.cpp +++ /dev/null @@ -1,24 +0,0 @@ -// -// TCPServerTestSuite.cpp -// -// $Id: //poco/1.4/NetSSL_OpenSSL/testsuite/src/TCPServerTestSuite.cpp#1 $ -// -// Copyright (c) 2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "TCPServerTestSuite.h" -#include "TCPServerTest.h" - - -CppUnit::Test* TCPServerTestSuite::suite() -{ - CppUnit::TestSuite* pSuite = new CppUnit::TestSuite("TCPServerTestSuite"); - - pSuite->addTest(TCPServerTest::suite()); - - return pSuite; -} diff --git a/contrib/libpoco/NetSSL_OpenSSL/testsuite/src/TCPServerTestSuite.h b/contrib/libpoco/NetSSL_OpenSSL/testsuite/src/TCPServerTestSuite.h deleted file mode 100644 index 644bb9bf51a..00000000000 --- a/contrib/libpoco/NetSSL_OpenSSL/testsuite/src/TCPServerTestSuite.h +++ /dev/null @@ -1,29 +0,0 @@ -// -// TCPServerTestSuite.h -// -// $Id: //poco/1.4/NetSSL_OpenSSL/testsuite/src/TCPServerTestSuite.h#1 $ -// -// Definition of the TCPServerTestSuite class. -// -// Copyright (c) 2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef TCPServerTestSuite_INCLUDED -#define TCPServerTestSuite_INCLUDED - - -#include "CppUnit/TestSuite.h" - - -class TCPServerTestSuite -{ -public: - static CppUnit::Test* suite(); -}; - - -#endif // TCPServerTestSuite_INCLUDED diff --git a/contrib/libpoco/NetSSL_OpenSSL/testsuite/src/WinCEDriver.cpp b/contrib/libpoco/NetSSL_OpenSSL/testsuite/src/WinCEDriver.cpp deleted file mode 100644 index a6cc405f5b8..00000000000 --- a/contrib/libpoco/NetSSL_OpenSSL/testsuite/src/WinCEDriver.cpp +++ /dev/null @@ -1,90 +0,0 @@ -// -// WinCEDriver.cpp -// -// $Id: //poco/1.4/NetSSL_OpenSSL/testsuite/src/WinCEDriver.cpp#1 $ -// -// Console-based test driver for Windows CE. -// -// Copyright (c) 2004-2010, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "CppUnit/TestRunner.h" -#include "NetSSLTestSuite.h" -#include "Poco/Util/Application.h" -#include "Poco/Net/HTTPStreamFactory.h" -#include "Poco/Net/HTTPSStreamFactory.h" -#include - - -class NetSSLApp: public Poco::Util::Application -{ -public: - NetSSLApp() - { - Poco::Net::initializeSSL(); - Poco::Net::HTTPStreamFactory::registerFactory(); - Poco::Net::HTTPSStreamFactory::registerFactory(); - } - - ~NetSSLApp() - { - Poco::Net::uninitializeSSL(); - } - - int main(const std::vector& args) - { - CppUnit::TestRunner runner; - runner.addTest("NetSSLTestSuite", NetSSLTestSuite::suite()); - return runner.run(_targs) ? 0 : 1; - } - - void setup(const std::vector& args) - { - char* argv[] = - { - const_cast(args[0].c_str()) - }; - - init(1, argv); - for (std::size_t i = 0; i < args.size(); ++i) - _targs.push_back(args[i]); - } - -protected: - void initialize(Poco::Util::Application& self) - { - loadConfiguration(); // load default configuration files, if present - Poco::Util::Application::initialize(self); - } - -private: - std::vector _targs; -}; - - -int _tmain(int argc, wchar_t* argv[]) -{ - std::vector args; - for (int i = 0; i < argc; ++i) - { - char buffer[1024]; - std::wcstombs(buffer, argv[i], sizeof(buffer)); - args.push_back(std::string(buffer)); - } - - NetSSLApp app; - try - { - app.setup(args); - return app.run(); - } - catch (Poco::Exception& exc) - { - std::cout << exc.displayText() << std::endl; - return 1; - } -} diff --git a/contrib/libpoco/NetSSL_OpenSSL/testsuite/src/WinDriver.cpp b/contrib/libpoco/NetSSL_OpenSSL/testsuite/src/WinDriver.cpp deleted file mode 100644 index 78517ca5ff8..00000000000 --- a/contrib/libpoco/NetSSL_OpenSSL/testsuite/src/WinDriver.cpp +++ /dev/null @@ -1,77 +0,0 @@ -// -// WinDriver.cpp -// -// $Id: //poco/1.4/NetSSL_OpenSSL/testsuite/src/WinDriver.cpp#1 $ -// -// Windows test driver for Poco OpenSSL. -// -// Copyright (c) 2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#include "WinTestRunner/WinTestRunner.h" -#include "NetSSLTestSuite.h" -#include "Poco/Util/Application.h" -#include "Poco/Net/HTTPStreamFactory.h" -#include "Poco/Net/HTTPSStreamFactory.h" - - -class NetSSLApp: public Poco::Util::Application -{ -public: - NetSSLApp() - { - Poco::Net::initializeSSL(); - Poco::Net::HTTPStreamFactory::registerFactory(); - Poco::Net::HTTPSStreamFactory::registerFactory(); - } - - ~NetSSLApp() - { - Poco::Net::uninitializeSSL(); - } - - int main(const std::vector& args) - { - CppUnit::WinTestRunner runner; - runner.addTest(NetSSLTestSuite::suite()); - runner.run(); - return 0; - } - -protected: - void initialize(Poco::Util::Application& self) - { - loadConfiguration(); // load default configuration files, if present - Poco::Util::Application::initialize(self); - } - -private: - std::vector _targs; -}; - - -class TestDriver: public CppUnit::WinTestRunnerApp -{ - void TestMain() - { - NetSSLApp app; - std::string argv("TestSuite"); - const char* pArgv = argv.c_str(); - try - { - app.init(1, (char**)&pArgv); - app.run(); - } - catch (Poco::Exception& exc) - { - app.logger().log(exc); - } - } -}; - - -static TestDriver theDriver; diff --git a/contrib/libpoco/NetSSL_OpenSSL/testsuite/testrunner.xml b/contrib/libpoco/NetSSL_OpenSSL/testsuite/testrunner.xml deleted file mode 100644 index 9ca7058a232..00000000000 --- a/contrib/libpoco/NetSSL_OpenSSL/testsuite/testrunner.xml +++ /dev/null @@ -1,48 +0,0 @@ - - - - ${application.configDir}any.pem - ${application.configDir}rootcert.pem - none - 9 - true - ALL:!ADH:!LOW:!EXP:!MD5:@STRENGTH - - KeyFileHandler - - secret - - - - AcceptCertificateHandler - - - - - - ${application.configDir}any.pem - ${application.configDir}rootcert.pem - relaxed - 9 - true - ALL:!ADH:!LOW:!EXP:!MD5:@STRENGTH - - KeyFileHandler - - secret - - - - AcceptCertificateHandler - - - - - - - - proxy.aon.at - 8080 - - - diff --git a/contrib/libpoco/README b/contrib/libpoco/README deleted file mode 100644 index 9d9520fc687..00000000000 --- a/contrib/libpoco/README +++ /dev/null @@ -1,294 +0,0 @@ -This is the README file for the POCO C++ Libraries. - -In this document you will find a brief description of the directory layout, -as well as a description necessary steps to build the POCO C++ Libraries. - -The Foundation library contains a platform abstraction layer (including classes -for multithreading, file system access, logging, etc.), as well as -a large number of useful utility classes, such various stream buffer and stream -classes, URI handling, and many more. -The XML library contains an XML parser with SAX2 and DOM interfaces, -as well as an XMLWriter. -The Util library contains classes for working with configuration files and -command line arguments, as well as various utility classes. -The Net library contains network classes (sockets, HTTP client/server, etc.). -All libraries come with a test suite and a number of sample programs. - -The basic directory layout is as follows: - -build/ the build system for Unix/OpenVMS and additional utility scripts - config/ build configurations for various Unix platforms - rules/ common build rules for all platforms - scripts/ build and utility scripts - vms/ OpenVMS build system scripts - vxconfig/ VxWorks build configurations - -bin/ all executables (dynamic link libraries on Windows) -bin64/ all 64-bit executables (and DLLs) - -doc/ additional documentation - -lib/ all libraries (import libraries on Windows) -lib64/ all 64-bit libraries - -CppUnit/ project and make/build files for the CppUnit unit testing framework - doc/ additional documentation - include/ - CppUnit/ header files for CppUnit - src/ source files for CppUnit - WinTestRunner/ Windows GUI for CppUnit - -Foundation/ project and make/build files for the Foundation library - include/ - Poco/ header files for the Foundation library - src/ source files for the Foundation library - testsuite/ project and make/build files for the Foundation testsuite - src/ source files for the Foundation testsuite - bin/ test suite executables - samples/ sample applications for the Foundation library - -XML/ project and make/build files for the XML library - include/ - Poco/ - XML/ header files for the core XML library - SAX/ header files for SAX support - DOM/ header files for DOM support - src/ source files for the XML library - testsuite/ project and make/build files for the XML testsuite - src/ source files for the XML testsuite - bin/ test suite executables - samples/ sample applications for the XML library - -Net/ project and make/build files for the Net library - include/ - Poco/ - Net/ header files for the Net library - src/ source files for the Net library - testsuite/ project and make/build files for the Net testsuite - src/ source files for the Net testsuite - bin/ test suite executables - samples/ sample applications for the Net library - - -Depending on what package you have downloaded, there may be other libraries -as well (such as Data, Crypto, NetSSL_OpenSSL and Zip). - - -DOCUMENTATION -============= - -Plenty of documentation (tutorial slides, articles and SDK reference) -is available at . - - -EXTERNAL DEPENDENCIES -===================== - -The following libraries require third-party software (header files and -libraries) being installed to build properly: - -- NetSSL_OpenSSL and Crypt require OpenSSL. -- Data/ODBC requires ODBC - (Microsoft ODBC on Windows, unixODBC or iODBC on Unix/Linux) -- Data/MySQL requires the MySQL client. - -Most Unix/Linux systems already have OpenSSL preinstalled. If your system -does not have OpenSSL, please get it from http://www.openssl.org or -another source. You do not have to build OpenSSL yourself - a binary -distribution is fine (e.g., apt-get install openssl libssl-dev). - -The easiest way to install OpenSSL on Windows is to use a binary -(prebuild) release, for example the one from Shining Light -Productions that comes with a Windows installer -(http://www.slproweb.com/products/Win32OpenSSL.html). -Depending on where you have installed the OpenSSL libraries, -you might have to edit the build script (buildwin.cmd), or add the -necessary paths to the INCLUDE and LIB environment variables. - -The Data library requires ODBC support on your system if you want -to build the ODBC connector (which is the default). On Windows -platforms, ODBC should be readily available if you have the -Windows SDK. On Unix/Linux platforms, you can use iODBC -(preinstalled on Mac OS X) or unixODBC. For the MySQL connector, -the MySQL client libraries and header files are required. - -The Data/ODBC and Data/MySQL Makefiles will search for the ODBC -and MySQL headers and libraries in various places. Nevertheless, -the Makefiles may not be able to find the headers and libraries. -In this case, please edit the Makefile in Data/ODBC and/or Data/MySQL -accordingly. - - -BUILDING ON WINDOWS -=================== - -Microsoft Visual Studio 7.1 (2003), 8.0 (2005), 9.0 (2008) or 10.0 (2010) is required to -build the POCO C++ Libraries on Windows platforms. Solution and project files for all -versions are included. For Visual Studio 2008 and 2010, 64-bit (x64) builds are -supported as well. -You can either build from within Visual Studio (Build->Batch Build->Select All;Rebuild) -or from the command line. To build from the command line, start the -Visual Studio .NET 2003 (or 2005/2008/2010) Command Prompt and cd to the directory where you -have extracted the POCO C++ Libraries sources. Then, simply start the buildwin.cmd script -and pass as argument the version of visual studio (71, 80, 90 or 100). You can customize -what is being built by buildwin.cmd by passing appropriate command line arguments to -it. Call buildwin.cmd without arguments to see what is available. - -To disable certain components (e.g., NetSSL_OpenSSL or Data/MySQL) from the build, -edit the file named "components" and remove the respective lines. - -Certain libraries, like NetSSL_OpenSSL, Crypto or Data/MySQL have dependencies -to other libraries. Since the build script does not know where to find the necessary -header files and import libraries, you have to either add the header file paths to -the INCLUDE environment variable and the library path to the LIB environment variable, -or you'll have to edit the buildwin.cmd script, where these environment variables can -be set as well. - -In order to run the test suite and the samples, the top-most bin directory containing -the shared libraries must be in the PATH environment variable. - -IMPORTANT NOTE: Please make sure that the path to the directory containing the -POCO C++ Libraries source tree does not contain spaces. Otherwise, the Microsoft -message compiler may fail when building the Foundation library. - - -BUILDING FOR WINDOWS CE - -Building for Windows CE is supported with Microsoft Visual Studio 2008. -Unless you have the Digi JumpStart Windows CE 6.0 SDK installed, you'll -have to modify the included Visual Studio project and solution files. -Please see the SDK Reference Documentation (http://pocoproject.org/documentation) -for instructions. - - -BUILDING ON UNIX/LINUX/MAC OS X -=============================== - -For building on Unix platforms, the POCO C++ Libraries come with their own -build system. The build system is based on GNU Make 3.80 (or newer), with the help -from a few shell scripts. If you do not have GNU Make 3.80 (or later) installed on -your machine, you will need to download it from -http://directory.fsf.org/devel/build/make.html>, -build and install it prior to building the POCO C++ Libraries. - -You can check the version of GNU Make installed on your system with - -> gmake --version - -or - -> make --version - -Once you have GNU Make up and running, the rest is quite simple. -To extract the sources and build all libraries, testsuites and samples, simply - -> gunzip poco-X.Y.tar.gz -> tar -xf poco-X.Y.tar -> cd poco-X.Y -> ./configure -> gmake -s - -See the configure script source for a list of possible options. -For starters, we recommend --no-tests and --no-samples, to reduce build times. -On a multicore or multiprocessor machine, use parallel makes to speed up -the build (make -j4). - -Once you have successfully built POCO, you can install it -to /usr/local (or another directory specified as parameter -to configure --prefix=): - -> sudo gmake -s install - -You can omit certain components from the build. For example, you might -want to omit Data/ODBC or Data/MySQL if you do not have the corresponding -third-party libraries (iodbc or unixodbc, mysqlclient) installed -on your system. To do this, use the --omit argument to configure: - -> ./configure --omit=Data/ODBC,Data/MySQL - - -To build on Mac OS X 10.3 with GCC 3, do the following: -(NOTE: This only affects 10.3; for 10.4/10.5 see above) - -> ./configure --config=Darwin7 -> make -s - - -IMPORTANT: Make sure that the path to the build directory does not -contain symbolic links. Furthermore, on Mac OS X (or other systems -with case insensitive filesystems), make sure that the characters in -the path have the correct case. Otherwise you'll get an error saying -"Current working directory not under $PROJECT_BASE.". - - -BUILDING ON QNX NEUTRINO -======================== - -For QNX Neutrino, the Unix build system (see the instructions above) is used. -You can use the build system to cross-compile for a target platform on a Solaris or -Linux host. Unfortunately, the Cygwin-based Windows host environment has some major -quirks that prevent the build system from working there. You can also use the -build system on a self-hosted QNX system. The default build configuration for QNX -(found in build/config/QNX) is for a self-hosted x86 platform. To specify another -target, edit the CCVER setting in the build configuration file. For example, to -compile for a PowerPC target, specify CCVER=3.3.1,gcc_ntoppcbe. - -Service Pack 1 for QNX Neutrino 6.3 must be installed, otherwise compiling the -Foundation library will fail due to a problem with the header in the -default (Dinkumware) C++ standard library. - -When building on QNX, you might want to disable NetSSL_OpenSSL, Crypto and -some Data connectors, unless you have the necessary third party components -available: - -> ./configure --omit=NetSSL_OpenSSL,Crypto,Data/ODBC,Data/MySQL - - -BUILDING FOR VXWORKS -==================== - -Please see the VxWorks Platform Notes in the Reference Documentation for -more information. The Reference Documentation can be found online -at . - - -BUILDING ON OPENVMS -=================== - -OpenVMS is no longer supported in recent versions of POCO, due to both a -lack of interest and a lack of contributors. The following -instructions are here for historical reasons. - -The POCO C++ Libraries come with their own build system for OpenVMS, implemented -by a bunch of DCL scripts. The scripts can be found in the build/vms directory. - -To build the POCO C++ Libraries on OpenVMS, follow the following steps. - -1) Download the .zip distribution of the POCO C++ Libraries - -2) Unzip the archive - $ unzip -aa poco-0_91_4.zip - -3) Change the directory - $ set def [.poco-0_01_4] - -4) Create a lib directory - $ create/dir [.lib] - -5) Run the buildvms.com script - $ @buildvms - -This will build the debug versions of the libraries. To build the release -versions, use - $ @buildvms -release - - -MORE INFORMATION -================ - -For more information, see the POCO C++ Libraries website -at . - - --- -$Id: //poco/1.4/dist/README#4 $ diff --git a/contrib/libpoco/Util/CMakeLists.txt b/contrib/libpoco/Util/CMakeLists.txt deleted file mode 100644 index 88c8c49036b..00000000000 --- a/contrib/libpoco/Util/CMakeLists.txt +++ /dev/null @@ -1,43 +0,0 @@ -set(LIBNAME "PocoUtil") -set(POCO_LIBNAME "${LIBNAME}") - -# Sources -file(GLOB SRCS_G "src/*.cpp") -POCO_SOURCES_AUTO( SRCS ${SRCS_G}) - -# Headers -file(GLOB_RECURSE HDRS_G "include/*.h" ) -POCO_HEADERS_AUTO( SRCS ${HDRS_G}) - -POCO_SOURCES_AUTO_PLAT( SRCS WIN32 - src/WinRegistryConfiguration.cpp - src/WinRegistryKey.cpp - src/WinService.cpp -) - -include_directories (BEFORE include) - -add_library( "${LIBNAME}" ${LIB_MODE} ${SRCS} ) -set_target_properties( "${LIBNAME}" - PROPERTIES - VERSION ${SHARED_LIBRARY_VERSION} SOVERSION ${SHARED_LIBRARY_VERSION} - OUTPUT_NAME ${POCO_LIBNAME} - DEFINE_SYMBOL Util_EXPORTS - ) - -target_link_libraries( "${LIBNAME}" PocoFoundation) -if (POCO_ENABLE_XML) - target_link_libraries( "${LIBNAME}" PocoXML) -else () - add_definitions( -DPOCO_UTIL_NO_XMLCONFIGURATION ) -endif() -if (POCO_ENABLE_JSON) - target_link_libraries( "${LIBNAME}" PocoJSON) -else () - add_definitions( -DPOCO_UTIL_NO_JSONCONFIGURATION ) -endif() - -if (POCO_ENABLE_TESTS) - add_subdirectory(samples) - add_subdirectory(testsuite) -endif () diff --git a/contrib/libpoco/Util/cmake/PocoUtilConfig.cmake b/contrib/libpoco/Util/cmake/PocoUtilConfig.cmake deleted file mode 100644 index ca62b41ec16..00000000000 --- a/contrib/libpoco/Util/cmake/PocoUtilConfig.cmake +++ /dev/null @@ -1,5 +0,0 @@ -include(CMakeFindDependencyMacro) -find_dependency(PocoFoundation) -find_dependency(PocoXML) -find_dependency(PocoJSON) -include("${CMAKE_CURRENT_LIST_DIR}/PocoUtilTargets.cmake") diff --git a/contrib/libpoco/Util/include/Poco/Util/AbstractConfiguration.h b/contrib/libpoco/Util/include/Poco/Util/AbstractConfiguration.h deleted file mode 100644 index 4cc09cf07e0..00000000000 --- a/contrib/libpoco/Util/include/Poco/Util/AbstractConfiguration.h +++ /dev/null @@ -1,383 +0,0 @@ -// -// AbstractConfiguration.h -// -// $Id: //poco/1.4/Util/include/Poco/Util/AbstractConfiguration.h#2 $ -// -// Library: Util -// Package: Configuration -// Module: AbstractConfiguration -// -// Definition of the AbstractConfiguration class. -// -// Copyright (c) 2004-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Util_AbstractConfiguration_INCLUDED -#define Util_AbstractConfiguration_INCLUDED - - -#include "Poco/Util/Util.h" -#include "Poco/Mutex.h" -#include "Poco/RefCountedObject.h" -#include "Poco/BasicEvent.h" -#include -#include - - -namespace Poco { -namespace Util { - - -class Util_API AbstractConfiguration: public Poco::RefCountedObject - /// AbstractConfiguration is an abstract base class for different - /// kinds of configuration data, such as INI files, property files, - /// XML configuration files or the Windows Registry. - /// - /// Configuration property keys have a hierarchical format, consisting - /// of names separated by periods. The exact interpretation of key names - /// is up to the actual subclass implementation of AbstractConfiguration. - /// Keys are case sensitive. - /// - /// All public methods are synchronized, so the class is safe for multithreaded use. - /// AbstractConfiguration implements reference counting based garbage collection. - /// - /// Subclasses must override the getRaw(), setRaw() and enumerate() methods. -{ -public: - typedef std::vector Keys; - - class KeyValue - /// A key-value pair, used as event argument. - { - public: - KeyValue(const std::string& key, std::string& value): - _key(key), - _value(value) - { - } - - const std::string& key() const - { - return _key; - } - - const std::string& value() const - { - return _value; - } - - std::string& value() - { - return _value; - } - - private: - const std::string& _key; - std::string& _value; - }; - - Poco::BasicEvent propertyChanging; - /// Fired before a property value is changed or - /// a new property is created. - /// - /// Can be used to check or fix a property value, - /// or to cancel the change by throwing an exception. - /// - /// The event delegate can use one of the get...() functions - /// to obtain the current property value. - - Poco::BasicEvent propertyChanged; - /// Fired after a property value has been changed - /// or a property has been created. - - Poco::BasicEvent propertyRemoving; - /// Fired before a property is removed by a - /// call to remove(). - /// - /// Note: This will even be fired if the key - /// does not exist and the remove operation will - /// fail with an exception. - - Poco::BasicEvent propertyRemoved; - /// Fired after a property has been removed by - /// a call to remove(). - - AbstractConfiguration(); - /// Creates the AbstractConfiguration. - - bool hasProperty(const std::string& key) const; - /// Returns true iff the property with the given key exists. - - bool hasOption(const std::string& key) const; - /// Returns true iff the property with the given key exists. - /// - /// Same as hasProperty(). - - bool has(const std::string& key) const; - /// Returns true iff the property with the given key exists. - /// - /// Same as hasProperty(). - - std::string getString(const std::string& key) const; - /// Returns the string value of the property with the given name. - /// Throws a NotFoundException if the key does not exist. - /// If the value contains references to other properties (${}), these - /// are expanded. - - std::string getString(const std::string& key, const std::string& defaultValue) const; - /// If a property with the given key exists, returns the property's string value, - /// otherwise returns the given default value. - /// If the value contains references to other properties (${}), these - /// are expanded. - - std::string getRawString(const std::string& key) const; - /// Returns the raw string value of the property with the given name. - /// Throws a NotFoundException if the key does not exist. - /// References to other properties are not expanded. - - std::string getRawString(const std::string& key, const std::string& defaultValue) const; - /// If a property with the given key exists, returns the property's raw string value, - /// otherwise returns the given default value. - /// References to other properties are not expanded. - - int getInt(const std::string& key) const; - /// Returns the int value of the property with the given name. - /// Throws a NotFoundException if the key does not exist. - /// Throws a SyntaxException if the property can not be converted - /// to an int. - /// Numbers starting with 0x are treated as hexadecimal. - /// If the value contains references to other properties (${}), these - /// are expanded. - - unsigned int getUInt(const std::string& key) const; - /// Returns the unsigned int value of the property with the given name. - /// Throws a NotFoundException if the key does not exist. - /// Throws a SyntaxException if the property can not be converted - /// to an unsigned int. - /// Numbers starting with 0x are treated as hexadecimal. - /// If the value contains references to other properties (${}), these - /// are expanded. - - int getInt(const std::string& key, int defaultValue) const; - /// If a property with the given key exists, returns the property's int value, - /// otherwise returns the given default value. - /// Throws a SyntaxException if the property can not be converted - /// to an int. - /// Numbers starting with 0x are treated as hexadecimal. - /// If the value contains references to other properties (${}), these - /// are expanded. - - unsigned int getUInt(const std::string& key, unsigned int defaultValue) const; - /// If a property with the given key exists, returns the property's unsigned int - /// value, otherwise returns the given default value. - /// Throws a SyntaxException if the property can not be converted - /// to an unsigned int. - /// Numbers starting with 0x are treated as hexadecimal. - /// If the value contains references to other properties (${}), these - /// are expanded. - -#if defined(POCO_HAVE_INT64) - - Int64 getInt64(const std::string& key) const; - /// Returns the Int64 value of the property with the given name. - /// Throws a NotFoundException if the key does not exist. - /// Throws a SyntaxException if the property can not be converted - /// to an Int64. - /// Numbers starting with 0x are treated as hexadecimal. - /// If the value contains references to other properties (${}), these - /// are expanded. - - UInt64 getUInt64(const std::string& key) const; - /// Returns the UInt64 value of the property with the given name. - /// Throws a NotFoundException if the key does not exist. - /// Throws a SyntaxException if the property can not be converted - /// to an UInt64. - /// Numbers starting with 0x are treated as hexadecimal. - /// If the value contains references to other properties (${}), these - /// are expanded. - - Int64 getInt64(const std::string& key, Int64 defaultValue) const; - /// If a property with the given key exists, returns the property's Int64 value, - /// otherwise returns the given default value. - /// Throws a SyntaxException if the property can not be converted - /// to an Int64. - /// Numbers starting with 0x are treated as hexadecimal. - /// If the value contains references to other properties (${}), these - /// are expanded. - - UInt64 getUInt64(const std::string& key, UInt64 defaultValue) const; - /// If a property with the given key exists, returns the property's UInt64 - /// value, otherwise returns the given default value. - /// Throws a SyntaxException if the property can not be converted - /// to an UInt64. - /// Numbers starting with 0x are treated as hexadecimal. - /// If the value contains references to other properties (${}), these - /// are expanded. - -#endif // defined(POCO_HAVE_INT64) - - double getDouble(const std::string& key) const; - /// Returns the double value of the property with the given name. - /// Throws a NotFoundException if the key does not exist. - /// Throws a SyntaxException if the property can not be converted - /// to a double. - /// If the value contains references to other properties (${}), these - /// are expanded. - - double getDouble(const std::string& key, double defaultValue) const; - /// If a property with the given key exists, returns the property's double value, - /// otherwise returns the given default value. - /// Throws a SyntaxException if the property can not be converted - /// to an double. - /// If the value contains references to other properties (${}), these - /// are expanded. - - bool getBool(const std::string& key) const; - /// Returns the boolean value of the property with the given name. - /// Throws a NotFoundException if the key does not exist. - /// Throws a SyntaxException if the property can not be converted - /// to a boolean. - /// If the value contains references to other properties (${}), these - /// are expanded. - - bool getBool(const std::string& key, bool defaultValue) const; - /// If a property with the given key exists, returns the property's boolean value, - /// otherwise returns the given default value. - /// Throws a SyntaxException if the property can not be converted - /// to a boolean. - /// The following string values can be converted into a boolean: - /// - numerical values: non zero becomes true, zero becomes false - /// - strings: true, yes, on become true, false, no, off become false - /// Case does not matter. - /// If the value contains references to other properties (${}), these - /// are expanded. - - virtual void setString(const std::string& key, const std::string& value); - /// Sets the property with the given key to the given value. - /// An already existing value for the key is overwritten. - - virtual void setInt(const std::string& key, int value); - /// Sets the property with the given key to the given value. - /// An already existing value for the key is overwritten. - - virtual void setUInt(const std::string& key, unsigned int value); - /// Sets the property with the given key to the given value. - /// An already existing value for the key is overwritten. - -#if defined(POCO_HAVE_INT64) - - virtual void setInt64(const std::string& key, Int64 value); - /// Sets the property with the given key to the given value. - /// An already existing value for the key is overwritten. - - virtual void setUInt64(const std::string& key, UInt64 value); - /// Sets the property with the given key to the given value. - /// An already existing value for the key is overwritten. - -#endif // defined(POCO_HAVE_INT64) - - virtual void setDouble(const std::string& key, double value); - /// Sets the property with the given key to the given value. - /// An already existing value for the key is overwritten. - - virtual void setBool(const std::string& key, bool value); - /// Sets the property with the given key to the given value. - /// An already existing value for the key is overwritten. - - void keys(Keys& range) const; - /// Returns in range the names of all keys at root level. - - void keys(const std::string& key, Keys& range) const; - /// Returns in range the names of all subkeys under the given key. - /// If an empty key is passed, all root level keys are returned. - - const AbstractConfiguration* createView(const std::string& prefix) const; - /// Creates a non-mutable view (see ConfigurationView) into the configuration. - - AbstractConfiguration* createView(const std::string& prefix); - /// Creates a view (see ConfigurationView) into the configuration. - - std::string expand(const std::string& value) const; - /// Replaces all occurences of ${} in value with the - /// value of the . If does not exist, - /// nothing is changed. - /// - /// If a circular property reference is detected, a - /// CircularReferenceException will be thrown. - - void remove(const std::string& key); - /// Removes the property with the given key. - /// - /// Does nothing if the key does not exist. - - void enableEvents(bool enable = true); - /// Enables (or disables) events. - - bool eventsEnabled() const; - /// Returns true iff events are enabled. - -protected: - virtual bool getRaw(const std::string& key, std::string& value) const = 0; - /// If the property with the given key exists, stores the property's value - /// in value and returns true. Otherwise, returns false. - /// - /// Must be overridden by subclasses. - - virtual void setRaw(const std::string& key, const std::string& value) = 0; - /// Sets the property with the given key to the given value. - /// An already existing value for the key is overwritten. - /// - /// Must be overridden by subclasses. - - virtual void enumerate(const std::string& key, Keys& range) const = 0; - /// Returns in range the names of all subkeys under the given key. - /// If an empty key is passed, all root level keys are returned. - - virtual void removeRaw(const std::string& key); - /// Removes the property with the given key. - /// - /// Does nothing if the key does not exist. - /// - /// Should be overridden by subclasses; the default - /// implementation throws a Poco::NotImplementedException. - - static int parseInt(const std::string& value); - static int parseUInt(const std::string& value); - -#if defined(POCO_HAVE_INT64) - - static Int64 parseInt64(const std::string& value); - static UInt64 parseUInt64(const std::string& value); - -#endif // defined(POCO_HAVE_INT64) - - static bool parseBool(const std::string& value); - void setRawWithEvent(const std::string& key, std::string value); - - virtual ~AbstractConfiguration(); - -private: - std::string internalExpand(const std::string& value) const; - std::string uncheckedExpand(const std::string& value) const; - - AbstractConfiguration(const AbstractConfiguration&); - AbstractConfiguration& operator = (const AbstractConfiguration&); - - mutable int _depth; - bool _eventsEnabled; - mutable Poco::Mutex _mutex; - - friend class LayeredConfiguration; - friend class ConfigurationView; - friend class ConfigurationMapper; -}; - - -} } // namespace Poco::Util - - -#endif // Util_AbstractConfiguration_INCLUDED diff --git a/contrib/libpoco/Util/include/Poco/Util/Application.h b/contrib/libpoco/Util/include/Poco/Util/Application.h deleted file mode 100644 index d2843cb117c..00000000000 --- a/contrib/libpoco/Util/include/Poco/Util/Application.h +++ /dev/null @@ -1,543 +0,0 @@ -// -// Application.h -// -// $Id: //poco/1.4/Util/include/Poco/Util/Application.h#4 $ -// -// Library: Util -// Package: Application -// Module: Application -// -// Definition of the Application class. -// -// Copyright (c) 2004-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Util_Application_INCLUDED -#define Util_Application_INCLUDED - - -#include "Poco/Util/Util.h" -#include "Poco/Util/Subsystem.h" -#include "Poco/Util/LayeredConfiguration.h" -#include "Poco/Util/OptionSet.h" -#include "Poco/AutoPtr.h" -#include "Poco/Logger.h" -#include "Poco/Path.h" -#include "Poco/Timestamp.h" -#include "Poco/Timespan.h" -#include "Poco/AutoPtr.h" -#if defined(POCO_VXWORKS) -#include -#endif -#include -#include - - -namespace Poco { -namespace Util { - - -class OptionSet; - - -class Util_API Application: public Subsystem - /// The Application class implements the main subsystem - /// in a process. The application class is responsible for - /// initializing all its subsystems. - /// - /// Subclasses can and should override the following virtual methods: - /// - initialize() (the one-argument, protected variant) - /// - uninitialize() - /// - reinitialize() - /// - defineOptions() - /// - handleOption() - /// - main() - /// - /// The application's main logic should be implemented in - /// the main() method. - /// - /// There may be at most one instance of the Application class - /// in a process. - /// - /// The Application class maintains a LayeredConfiguration (available - /// via the config() member function) consisting of: - /// - a MapConfiguration (priority -100) storing application-specific - /// properties, as well as properties from bound command line arguments. - /// - a SystemConfiguration (priority 100) - /// - the configurations loaded with loadConfiguration(). - /// - /// The Application class sets a few default properties in - /// its configuration. These are: - /// - application.path: the absolute path to application executable - /// - application.name: the file name of the application executable - /// - application.baseName: the file name (excluding extension) of the application executable - /// - application.dir: the path to the directory where the application executable resides - /// - application.configDir: the path to the directory where the last configuration file loaded with loadConfiguration() was found. - /// - /// If loadConfiguration() has never been called, application.configDir will be equal to application.dir. - /// - /// The POCO_APP_MAIN macro can be used to implement main(argc, argv). - /// If POCO has been built with POCO_WIN32_UTF8, POCO_APP_MAIN supports - /// Unicode command line arguments. -{ -public: - typedef std::vector ArgVec; - typedef Poco::AutoPtr SubsystemPtr; - typedef std::vector SubsystemVec; - - enum ExitCode - /// Commonly used exit status codes. - /// Based on the definitions in the 4.3BSD header file. - { - EXIT_OK = 0, /// successful termination - EXIT_USAGE = 64, /// command line usage error - EXIT_DATAERR = 65, /// data format error - EXIT_NOINPUT = 66, /// cannot open input - EXIT_NOUSER = 67, /// addressee unknown - EXIT_NOHOST = 68, /// host name unknown - EXIT_UNAVAILABLE = 69, /// service unavailable - EXIT_SOFTWARE = 70, /// internal software error - EXIT_OSERR = 71, /// system error (e.g., can't fork) - EXIT_OSFILE = 72, /// critical OS file missing - EXIT_CANTCREAT = 73, /// can't create (user) output file - EXIT_IOERR = 74, /// input/output error - EXIT_TEMPFAIL = 75, /// temp failure; user is invited to retry - EXIT_PROTOCOL = 76, /// remote error in protocol - EXIT_NOPERM = 77, /// permission denied - EXIT_CONFIG = 78 /// configuration error - }; - - enum ConfigPriority - { - PRIO_APPLICATION = -100, - PRIO_DEFAULT = 0, - PRIO_SYSTEM = 100 - }; - - Application(); - /// Creates the Application. - - Application(int argc, char* argv[]); - /// Creates the Application and calls init(argc, argv). - - void addSubsystem(Subsystem* pSubsystem); - /// Adds a new subsystem to the application. The - /// application immediately takes ownership of it, so that a - /// call in the form - /// Application::instance().addSubsystem(new MySubsystem); - /// is okay. - - void init(int argc, char* argv[]); - /// Processes the application's command line arguments - /// and sets the application's properties (e.g., - /// "application.path", "application.name", etc.). - /// - /// Note that as of release 1.3.7, init() no longer - /// calls initialize(). This is now called from run(). - -#if defined(POCO_WIN32_UTF8) && !defined(POCO_NO_WSTRING) - void init(int argc, wchar_t* argv[]); - /// Processes the application's command line arguments - /// and sets the application's properties (e.g., - /// "application.path", "application.name", etc.). - /// - /// Note that as of release 1.3.7, init() no longer - /// calls initialize(). This is now called from run(). - /// - /// This Windows-specific version of init is used for passing - /// Unicode command line arguments from wmain(). -#endif - - void init(const ArgVec& args); - /// Processes the application's command line arguments - /// and sets the application's properties (e.g., - /// "application.path", "application.name", etc.). - /// - /// Note that as of release 1.3.7, init() no longer - /// calls initialize(). This is now called from run(). - - bool initialized() const; - /// Returns true iff the application is in initialized state - /// (that means, has been initialized but not yet uninitialized). - - void setUnixOptions(bool flag); - /// Specify whether command line option handling is Unix-style - /// (flag == true; default) or Windows/OpenVMS-style (flag == false). - /// - /// This member function should be called from the constructor of - /// a subclass to be effective. - - int loadConfiguration(int priority = PRIO_DEFAULT); - /// Loads configuration information from a default location. - /// - /// The configuration(s) will be added to the application's - /// LayeredConfiguration with the given priority. - /// - /// The configuration file(s) must be located in the same directory - /// as the executable or a parent directory of it, and must have the - /// same base name as the executable, with one of the following extensions: - /// .properties, .ini or .xml. - /// - /// The .properties file, if it exists, is loaded first, followed - /// by the .ini file and the .xml file. - /// - /// If the application is built in debug mode (the _DEBUG preprocessor - /// macro is defined) and the base name of the appication executable - /// ends with a 'd', a config file without the 'd' ending its base name is - /// also found. - /// - /// Example: Given the application "SampleAppd.exe", built in debug mode. - /// Then loadConfiguration() will automatically find a configuration file - /// named "SampleApp.properties" if it exists and if "SampleAppd.properties" - /// cannot be found. - /// - /// Returns the number of configuration files loaded, which may be zero. - /// - /// This method must not be called before init(argc, argv) - /// has been called. - - void loadConfiguration(const std::string& path, int priority = PRIO_DEFAULT); - /// Loads configuration information from the file specified by - /// the given path. The file type is determined by the file - /// extension. The following extensions are supported: - /// - .properties - properties file (PropertyFileConfiguration) - /// - .ini - initialization file (IniFileConfiguration) - /// - .xml - XML file (XMLConfiguration) - /// - /// Extensions are not case sensitive. - /// - /// The configuration will be added to the application's - /// LayeredConfiguration with the given priority. - - template C& getSubsystem() const; - /// Returns a reference to the subsystem of the class - /// given as template argument. - /// - /// Throws a NotFoundException if such a subsystem has - /// not been registered. - - SubsystemVec& subsystems(); - /// Returns a reference to the subsystem list - - virtual int run(); - /// Runs the application by performing additional (un)initializations - /// and calling the main() method. - /// - /// First calls initialize(), then calls main(), and - /// finally calls uninitialize(). The latter will be called - /// even if main() throws an exception. If initialize() throws - /// an exception, main() will not be called and the exception - /// will be propagated to the caller. If uninitialize() throws - /// an exception, the exception will be propagated to the caller. - - std::string commandName() const; - /// Returns the command name used to invoke the application. - - std::string commandPath() const; - /// Returns the full command path used to invoke the application. - - LayeredConfiguration& config() const; - /// Returns the application's configuration. - - Poco::Logger& logger() const; - /// Returns the application's logger. - /// - /// Before the logging subsystem has been initialized, the - /// application's logger is "ApplicationStartup", which is - /// connected to a ConsoleChannel. - /// - /// After the logging subsystem has been initialized, which - /// usually happens as the first action in Application::initialize(), - /// the application's logger is the one specified by the - /// "application.logger" configuration property. If that property - /// is not specified, the logger is "Application". - - const ArgVec& argv() const; - /// Returns reference to vector of the application's arguments as - /// specified on the command line. If user overrides the - /// Application::main(const ArgVec&) function, it will receive - /// only the command line parameters that were not processed in - /// Application::processOptons(). This function returns the - /// full set of command line parameters as received in - /// main(argc, argv*). - - const OptionSet& options() const; - /// Returns the application's option set. - - static Application& instance(); - /// Returns a reference to the Application singleton. - /// - /// Throws a NullPointerException if no Application instance exists. - - const Poco::Timestamp& startTime() const; - /// Returns the application start time (UTC). - - Poco::Timespan uptime() const; - /// Returns the application uptime. - - void stopOptionsProcessing(); - /// If called from an option callback, stops all further - /// options processing. - /// - /// If called, the following options on the command line - /// will not be processed, and required options will not - /// be checked. - /// - /// This is useful, for example, if an option for displaying - /// help information has been encountered and no other things - /// besides displaying help shall be done. - - const char* name() const; - -protected: - void initialize(Application& self); - /// Initializes the application and all registered subsystems. - /// Subsystems are always initialized in the exact same order - /// in which they have been registered. - /// - /// Overriding implementations must call the base class implementation. - - void uninitialize(); - /// Uninitializes the application and all registered subsystems. - /// Subsystems are always uninitialized in reverse order in which - /// they have been initialized. - /// - /// Overriding implementations must call the base class implementation. - - void reinitialize(Application& self); - /// Re-nitializes the application and all registered subsystems. - /// Subsystems are always reinitialized in the exact same order - /// in which they have been registered. - /// - /// Overriding implementations must call the base class implementation. - - virtual void defineOptions(OptionSet& options); - /// Called before command line processing begins. - /// If a subclass wants to support command line arguments, - /// it must override this method. - /// The default implementation does not define any options itself, - /// but calls defineOptions() on all registered subsystems. - /// - /// Overriding implementations should call the base class implementation. - - virtual void handleOption(const std::string& name, const std::string& value); - /// Called when the option with the given name is encountered - /// during command line arguments processing. - /// - /// The default implementation does option validation, bindings - /// and callback handling. - /// - /// Overriding implementations must call the base class implementation. - - void setLogger(Poco::Logger& logger); - /// Sets the logger used by the application. - - virtual int main(const std::vector& args); - /// The application's main logic. - /// - /// Unprocessed command line arguments are passed in args. - /// Note that all original command line arguments are available - /// via the properties application.argc and application.argv[]. - /// - /// Returns an exit code which should be one of the values - /// from the ExitCode enumeration. - - bool findFile(Poco::Path& path) const; - /// Searches for the file in path in the application directory. - /// - /// If path is absolute, the method immediately returns true and - /// leaves path unchanged. - /// - /// If path is relative, searches for the file in the application - /// directory and in all subsequent parent directories. - /// Returns true and stores the absolute path to the file in - /// path if the file could be found. Returns false and leaves path - /// unchanged otherwise. - - void init(); - /// Common initialization code. - - ~Application(); - /// Destroys the Application and deletes all registered subsystems. - -private: - void setup(); - void setArgs(int argc, char* argv[]); - void setArgs(const ArgVec& args); - void getApplicationPath(Poco::Path& path) const; - void processOptions(); - bool findAppConfigFile(const std::string& appName, const std::string& extension, Poco::Path& path) const; - - typedef Poco::AutoPtr ConfigPtr; - - ConfigPtr _pConfig; - SubsystemVec _subsystems; - bool _initialized; - std::string _command; - ArgVec _argv; - ArgVec _unprocessedArgs; - OptionSet _options; - bool _unixOptions; - Poco::Logger* _pLogger; - Poco::Timestamp _startTime; - bool _stopOptionsProcessing; - -#if defined(POCO_OS_FAMILY_UNIX) && !defined(POCO_VXWORKS) - std::string _workingDirAtLaunch; -#endif - - static Application* _pInstance; - - friend class LoggingSubsystem; - - Application(const Application&); - Application& operator = (const Application&); -}; - - -// -// inlines -// -template C& Application::getSubsystem() const -{ - for (SubsystemVec::const_iterator it = _subsystems.begin(); it != _subsystems.end(); ++it) - { - const Subsystem* pSS(it->get()); - const C* pC = dynamic_cast(pSS); - if (pC) return *const_cast(pC); - } - throw Poco::NotFoundException("The subsystem has not been registered", typeid(C).name()); -} - -inline Application::SubsystemVec& Application::subsystems() -{ - return _subsystems; -} - - -inline bool Application::initialized() const -{ - return _initialized; -} - - -inline LayeredConfiguration& Application::config() const -{ - return *const_cast(_pConfig.get()); -} - - -inline Poco::Logger& Application::logger() const -{ - poco_check_ptr (_pLogger); - return *_pLogger; -} - - -inline const Application::ArgVec& Application::argv() const -{ - return _argv; -} - - -inline const OptionSet& Application::options() const -{ - return _options; -} - - -inline Application& Application::instance() -{ - poco_check_ptr (_pInstance); - return *_pInstance; -} - - -inline const Poco::Timestamp& Application::startTime() const -{ - return _startTime; -} - - -inline Poco::Timespan Application::uptime() const -{ - Poco::Timestamp now; - Poco::Timespan uptime = now - _startTime; - - return uptime; -} - - -} } // namespace Poco::Util - - -// -// Macro to implement main() -// -#if defined(_WIN32) && defined(POCO_WIN32_UTF8) && !defined(POCO_NO_WSTRING) - #define POCO_APP_MAIN(App) \ - int wmain(int argc, wchar_t** argv) \ - { \ - Poco::AutoPtr pApp = new App; \ - try \ - { \ - pApp->init(argc, argv); \ - } \ - catch (Poco::Exception& exc) \ - { \ - pApp->logger().log(exc); \ - return Poco::Util::Application::EXIT_CONFIG;\ - } \ - return pApp->run(); \ - } -#elif defined(POCO_VXWORKS) - #define POCO_APP_MAIN(App) \ - int pocoAppMain(const char* appName, ...) \ - { \ - std::vector args; \ - args.push_back(std::string(appName)); \ - va_list vargs; \ - va_start(vargs, appName); \ - const char* arg = va_arg(vargs, const char*); \ - while (arg) \ - { \ - args.push_back(std::string(arg)); \ - arg = va_arg(vargs, const char*); \ - } \ - va_end(vargs); \ - Poco::AutoPtr pApp = new App; \ - try \ - { \ - pApp->init(args); \ - } \ - catch (Poco::Exception& exc) \ - { \ - pApp->logger().log(exc); \ - return Poco::Util::Application::EXIT_CONFIG;\ - } \ - return pApp->run(); \ - } -#else - #define POCO_APP_MAIN(App) \ - int main(int argc, char** argv) \ - { \ - Poco::AutoPtr pApp = new App; \ - try \ - { \ - pApp->init(argc, argv); \ - } \ - catch (Poco::Exception& exc) \ - { \ - pApp->logger().log(exc); \ - return Poco::Util::Application::EXIT_CONFIG;\ - } \ - return pApp->run(); \ - } -#endif - - -#endif // Util_Application_INCLUDED diff --git a/contrib/libpoco/Util/include/Poco/Util/ConfigurationMapper.h b/contrib/libpoco/Util/include/Poco/Util/ConfigurationMapper.h deleted file mode 100644 index 3b14b17e12e..00000000000 --- a/contrib/libpoco/Util/include/Poco/Util/ConfigurationMapper.h +++ /dev/null @@ -1,96 +0,0 @@ -// -// ConfigurationMapper.h -// -// $Id: //poco/1.4/Util/include/Poco/Util/ConfigurationMapper.h#1 $ -// -// Library: Util -// Package: Configuration -// Module: ConfigurationMapper -// -// Definition of the ConfigurationMapper class. -// -// Copyright (c) 2004-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Util_ConfigurationMapper_INCLUDED -#define Util_ConfigurationMapper_INCLUDED - - -#include "Poco/Util/Util.h" -#include "Poco/Util/AbstractConfiguration.h" - - -namespace Poco { -namespace Util { - - -class Util_API ConfigurationMapper: public AbstractConfiguration - /// This configuration maps a property hierarchy into another - /// hierarchy. - /// - /// For example, given a configuration with the following properties: - /// config.value1 - /// config.value2 - /// config.sub.value1 - /// config.sub.value2 - /// and a ConfigurationView with fromPrefix == "config" and toPrefix == "root.conf", then - /// the above properties will be available via the mapper as - /// root.conf.value1 - /// root.conf.value2 - /// root.conf.sub.value1 - /// root.conf.sub.value2 - /// - /// FromPrefix can be empty, in which case, and given toPrefix == "root", - /// the properties will be available as - /// root.config.value1 - /// root.config.value2 - /// root.config.sub.value1 - /// root.config.sub.value2 - /// - /// This is equivalent to the functionality of the ConfigurationView class. - /// - /// Similarly, toPrefix can also be empty. Given fromPrefix == "config" and - /// toPrefix == "", the properties will be available as - /// value1 - /// value2 - /// sub.value1 - /// sub.value2 - /// - /// If both fromPrefix and toPrefix are empty, no mapping is performed. - /// - /// A ConfigurationMapper is most useful in combination with a - /// LayeredConfiguration. -{ -public: - ConfigurationMapper(const std::string& fromPrefix, const std::string& toPrefix, AbstractConfiguration* pConfig); - /// Creates the ConfigurationMapper. The ConfigurationMapper does not take - /// ownership of the passed configuration. - -protected: - bool getRaw(const std::string& key, std::string& value) const; - void setRaw(const std::string& key, const std::string& value); - void enumerate(const std::string& key, Keys& range) const; - void removeRaw(const std::string& key); - - std::string translateKey(const std::string& key) const; - - ~ConfigurationMapper(); - -private: - ConfigurationMapper(const ConfigurationMapper&); - ConfigurationMapper& operator = (const ConfigurationMapper&); - - std::string _fromPrefix; - std::string _toPrefix; - AbstractConfiguration* _pConfig; -}; - - -} } // namespace Poco::Util - - -#endif // Util_ConfigurationMapper_INCLUDED diff --git a/contrib/libpoco/Util/include/Poco/Util/ConfigurationView.h b/contrib/libpoco/Util/include/Poco/Util/ConfigurationView.h deleted file mode 100644 index 7b166bdc723..00000000000 --- a/contrib/libpoco/Util/include/Poco/Util/ConfigurationView.h +++ /dev/null @@ -1,84 +0,0 @@ -// -// ConfigurationView.h -// -// $Id: //poco/1.4/Util/include/Poco/Util/ConfigurationView.h#1 $ -// -// Library: Util -// Package: Configuration -// Module: ConfigurationView -// -// Definition of the ConfigurationView class. -// -// Copyright (c) 2004-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Util_ConfigurationView_INCLUDED -#define Util_ConfigurationView_INCLUDED - - -#include "Poco/Util/Util.h" -#include "Poco/Util/AbstractConfiguration.h" - - -namespace Poco { -namespace Util { - - -class Util_API ConfigurationView: public AbstractConfiguration - /// This configuration implements a "view" into a sub-hierarchy - /// of another configuration. - /// - /// For example, given a configuration with the following properties: - /// config.value1 - /// config.value2 - /// config.sub.value1 - /// config.sub.value2 - /// and a ConfigurationView with the prefix "config", then - /// the above properties will be available via the view as - /// value1 - /// value2 - /// sub.value1 - /// sub.value2 - /// - /// A ConfigurationView is most useful in combination with a - /// LayeredConfiguration. - /// - /// If a property is not found in the view, it is searched in - /// the original configuration. Given the above example configuration, - /// the property named "config.value1" will still be found in the view. - /// - /// The main reason for this is that placeholder expansion (${property}) - /// still works as expected given a ConfigurationView. -{ -public: - ConfigurationView(const std::string& prefix, AbstractConfiguration* pConfig); - /// Creates the ConfigurationView. The ConfigurationView does not take - /// ownership of the passed configuration. - -protected: - bool getRaw(const std::string& key, std::string& value) const; - void setRaw(const std::string& key, const std::string& value); - void enumerate(const std::string& key, Keys& range) const; - void removeRaw(const std::string& key); - - std::string translateKey(const std::string& key) const; - - ~ConfigurationView(); - -private: - ConfigurationView(const ConfigurationView&); - ConfigurationView& operator = (const ConfigurationView&); - - std::string _prefix; - AbstractConfiguration* _pConfig; -}; - - -} } // namespace Poco::Util - - -#endif // Util_ConfigurationView_INCLUDED diff --git a/contrib/libpoco/Util/include/Poco/Util/FilesystemConfiguration.h b/contrib/libpoco/Util/include/Poco/Util/FilesystemConfiguration.h deleted file mode 100644 index 652025c413a..00000000000 --- a/contrib/libpoco/Util/include/Poco/Util/FilesystemConfiguration.h +++ /dev/null @@ -1,95 +0,0 @@ -// -// FilesystemConfiguration.h -// -// $Id: //poco/1.4/Util/include/Poco/Util/FilesystemConfiguration.h#1 $ -// -// Library: Util -// Package: Configuration -// Module: FilesystemConfiguration -// -// Definition of the FilesystemConfiguration class. -// -// Copyright (c) 2004-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Util_FilesystemConfiguration_INCLUDED -#define Util_FilesystemConfiguration_INCLUDED - - -#include "Poco/Util/Util.h" -#include "Poco/Util/AbstractConfiguration.h" -#include "Poco/Path.h" - - -namespace Poco { -namespace Util { - - -class Util_API FilesystemConfiguration: public AbstractConfiguration - /// An implementation of AbstractConfiguration that stores configuration data - /// in a directory hierarchy in the filesystem. - /// - /// Every period-separated part of a property name is represented - /// as a directory in the filesystem, relative to the base directory. - /// Values are stored in files named "data". - /// - /// All changes to properties are immediately persisted in the filesystem. - /// - /// For example, a configuration consisting of the properties - /// - /// logging.loggers.root.channel.class = ConsoleChannel - /// logging.loggers.app.name = Application - /// logging.loggers.app.channel = c1 - /// logging.formatters.f1.class = PatternFormatter - /// logging.formatters.f1.pattern = [%p] %t - /// - /// is stored in the filesystem as follows: - /// - /// logging/ - /// loggers/ - /// root/ - /// channel/ - /// class/ - /// data ("ConsoleChannel") - /// app/ - /// name/ - /// data ("Application") - /// channel/ - /// data ("c1") - /// formatters/ - /// f1/ - /// class/ - /// data ("PatternFormatter") - /// pattern/ - /// data ("[%p] %t") -{ -public: - FilesystemConfiguration(const std::string& path); - /// Creates a FilesystemConfiguration using the given path. - /// All directories are created as necessary. - - void clear(); - /// Clears the configuration by erasing the configuration - /// directory and all its subdirectories and files. - -protected: - bool getRaw(const std::string& key, std::string& value) const; - void setRaw(const std::string& key, const std::string& value); - void enumerate(const std::string& key, Keys& range) const; - void removeRaw(const std::string& key); - Poco::Path keyToPath(const std::string& key) const; - ~FilesystemConfiguration(); - -private: - Poco::Path _path; -}; - - -} } // namespace Poco::Util - - -#endif // Util_FilesystemConfiguration_INCLUDED diff --git a/contrib/libpoco/Util/include/Poco/Util/HelpFormatter.h b/contrib/libpoco/Util/include/Poco/Util/HelpFormatter.h deleted file mode 100644 index bb35445739b..00000000000 --- a/contrib/libpoco/Util/include/Poco/Util/HelpFormatter.h +++ /dev/null @@ -1,204 +0,0 @@ -// -// HelpFormatter.h -// -// $Id: //poco/1.4/Util/include/Poco/Util/HelpFormatter.h#1 $ -// -// Library: Util -// Package: Options -// Module: HelpFormatter -// -// Definition of the HelpFormatter class. -// -// Copyright (c) 2004-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Util_HelpFormatter_INCLUDED -#define Util_HelpFormatter_INCLUDED - - -#include "Poco/Util/Util.h" -#include - - -namespace Poco { -namespace Util { - - -class OptionSet; -class Option; - - -class Util_API HelpFormatter - /// This class formats a help message from an OptionSet. -{ -public: - HelpFormatter(const OptionSet& options); - /// Creates the HelpFormatter, using the given - /// options. - /// - /// The HelpFormatter just stores a reference - /// to the given OptionSet, so the OptionSet must not - /// be destroyed during the lifetime of the HelpFormatter. - - ~HelpFormatter(); - /// Destroys the HelpFormatter. - - void setCommand(const std::string& command); - /// Sets the command name. - - const std::string& getCommand() const; - /// Returns the command name. - - void setUsage(const std::string& usage); - /// Sets the usage string. - - const std::string& getUsage() const; - /// Returns the usage string. - - void setHeader(const std::string& header); - /// Sets the header string. - - const std::string& getHeader() const; - /// Returns the header string. - - void setFooter(const std::string& footer); - /// Sets the footer string. - - const std::string& getFooter() const; - /// Returns the footer string. - - void format(std::ostream& ostr) const; - /// Writes the formatted help text to the given stream. - - void setWidth(int width); - /// Sets the line width for the formatted help text. - - int getWidth() const; - /// Returns the line width for the formatted help text. - /// - /// The default width is 72. - - void setIndent(int indent); - /// Sets the indentation for description continuation lines. - - int getIndent() const; - /// Returns the indentation for description continuation lines. - - void setAutoIndent(); - /// Sets the indentation for description continuation lines so that - /// the description text is left-aligned. - - void setUnixStyle(bool flag); - /// Enables Unix-style options. Both short and long option names - /// are printed if Unix-style is set. Otherwise, only long option - /// names are printed. - /// - /// After calling setUnixStyle(), setAutoIndent() should be called - /// as well to ensure proper help text formatting. - - bool isUnixStyle() const; - /// Returns if Unix-style options are set. - - std::string shortPrefix() const; - /// Returns the platform-specific prefix for short options. - /// "-" on Unix, "/" on Windows and OpenVMS. - - std::string longPrefix() const; - /// Returns the platform-specific prefix for long options. - /// "--" on Unix, "/" on Windows and OpenVMS. - -protected: - int calcIndent() const; - /// Calculates the indentation for the option descriptions - /// from the given options. - - void formatOptions(std::ostream& ostr) const; - /// Formats all options. - - void formatOption(std::ostream& ostr, const Option& option, int width) const; - /// Formats an option, using the platform-specific - /// prefixes. - - void formatText(std::ostream& ostr, const std::string& text, int indent) const; - /// Formats the given text. - - void formatText(std::ostream& ostr, const std::string& text, int indent, int firstIndent) const; - /// Formats the given text. - - void formatWord(std::ostream& ostr, int& pos, const std::string& word, int indent) const; - /// Formats the given word. - - void clearWord(std::ostream& ostr, int& pos, std::string& word, int indent) const; - /// Formats and then clears the given word. - -private: - HelpFormatter(const HelpFormatter&); - HelpFormatter& operator = (const HelpFormatter&); - - const OptionSet& _options; - int _width; - int _indent; - std::string _command; - std::string _usage; - std::string _header; - std::string _footer; - bool _unixStyle; - - static const int TAB_WIDTH; - static const int LINE_WIDTH; -}; - - -// -// inlines -// -inline int HelpFormatter::getWidth() const -{ - return _width; -} - - -inline int HelpFormatter::getIndent() const -{ - return _indent; -} - - -inline const std::string& HelpFormatter::getCommand() const -{ - return _command; -} - - -inline const std::string& HelpFormatter::getUsage() const -{ - return _usage; -} - - -inline const std::string& HelpFormatter::getHeader() const -{ - return _header; -} - - -inline const std::string& HelpFormatter::getFooter() const -{ - return _footer; -} - - -inline bool HelpFormatter::isUnixStyle() const -{ - return _unixStyle; -} - - -} } // namespace Poco::Util - - -#endif // Util_HelpFormatter_INCLUDED diff --git a/contrib/libpoco/Util/include/Poco/Util/IniFileConfiguration.h b/contrib/libpoco/Util/include/Poco/Util/IniFileConfiguration.h deleted file mode 100644 index 3c4fde3abd6..00000000000 --- a/contrib/libpoco/Util/include/Poco/Util/IniFileConfiguration.h +++ /dev/null @@ -1,101 +0,0 @@ -// -// IniFileConfiguration.h -// -// $Id: //poco/1.4/Util/include/Poco/Util/IniFileConfiguration.h#1 $ -// -// Library: Util -// Package: Configuration -// Module: IniFileConfiguration -// -// Definition of the IniFileConfiguration class. -// -// Copyright (c) 2004-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Util_IniFileConfiguration_INCLUDED -#define Util_IniFileConfiguration_INCLUDED - - -#include "Poco/Util/Util.h" - - -#ifndef POCO_UTIL_NO_INIFILECONFIGURATION - - -#include "Poco/Util/AbstractConfiguration.h" -#include -#include - - -namespace Poco { -namespace Util { - - -class Util_API IniFileConfiguration: public AbstractConfiguration - /// This implementation of a Configuration reads properties - /// from a legacy Windows initialization (.ini) file. - /// - /// The file syntax is implemented as follows. - /// - a line starting with a semicolon is treated as a comment and ignored - /// - a line starting with a square bracket denotes a section key [] - /// - every other line denotes a property assignment in the form - /// = - /// - /// The name of a property is composed of the section key and the value key, - /// separated by a period (
.). - /// - /// Property names are not case sensitive. Leading and trailing whitespace is - /// removed from both keys and values. -{ -public: - IniFileConfiguration(); - /// Creates an empty IniFileConfiguration. - - IniFileConfiguration(std::istream& istr); - /// Creates an IniFileConfiguration and loads the configuration data - /// from the given stream, which must be in initialization file format. - - IniFileConfiguration(const std::string& path); - /// Creates an IniFileConfiguration and loads the configuration data - /// from the given file, which must be in initialization file format. - - void load(std::istream& istr); - /// Loads the configuration data from the given stream, which - /// must be in initialization file format. - - void load(const std::string& path); - /// Loads the configuration data from the given file, which - /// must be in initialization file format. - -protected: - bool getRaw(const std::string& key, std::string& value) const; - void setRaw(const std::string& key, const std::string& value); - void enumerate(const std::string& key, Keys& range) const; - void removeRaw(const std::string& key); - ~IniFileConfiguration(); - -private: - void parseLine(std::istream& istr); - - struct ICompare - { - bool operator () (const std::string& s1, const std::string& s2) const; - }; - typedef std::map IStringMap; - - IStringMap _map; - std::string _sectionKey; -}; - - -} } // namespace Poco::Util - - -#endif // POCO_UTIL_NO_INIFILECONFIGURATION - - -#endif // Util_IniFileConfiguration_INCLUDED diff --git a/contrib/libpoco/Util/include/Poco/Util/IntValidator.h b/contrib/libpoco/Util/include/Poco/Util/IntValidator.h deleted file mode 100644 index acc12077270..00000000000 --- a/contrib/libpoco/Util/include/Poco/Util/IntValidator.h +++ /dev/null @@ -1,58 +0,0 @@ -// -// IntValidator.h -// -// $Id: //poco/1.4/Util/include/Poco/Util/IntValidator.h#1 $ -// -// Library: Util -// Package: Options -// Module: IntValidator -// -// Definition of the IntValidator class. -// -// Copyright (c) 2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Util_IntValidator_INCLUDED -#define Util_IntValidator_INCLUDED - - -#include "Poco/Util/Util.h" -#include "Poco/Util/Validator.h" - - -namespace Poco { -namespace Util { - - -class Util_API IntValidator: public Validator - /// The IntValidator tests whether the option argument, - /// which must be an integer, lies within a given range. -{ -public: - IntValidator(int min, int max); - /// Creates the IntValidator. - - ~IntValidator(); - /// Destroys the IntValidator. - - void validate(const Option& option, const std::string& value); - /// Validates the value for the given option by - /// testing whether it's an integer that lies within - /// a given range. - -private: - IntValidator(); - - int _min; - int _max; -}; - - -} } // namespace Poco::Util - - -#endif // Util_IntValidator_INCLUDED diff --git a/contrib/libpoco/Util/include/Poco/Util/JSONConfiguration.h b/contrib/libpoco/Util/include/Poco/Util/JSONConfiguration.h deleted file mode 100644 index f8e2f3c44e2..00000000000 --- a/contrib/libpoco/Util/include/Poco/Util/JSONConfiguration.h +++ /dev/null @@ -1,152 +0,0 @@ -// -// JSONConfiguration.h -// -// $Id$ -// -// Library: Util -// Package: Util -// Module: JSONConfiguration -// -// Definition of the JSONConfiguration class. -// -// Copyright (c) 2012, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Util_JSONConfiguration_INCLUDED -#define Util_JSONConfiguration_INCLUDED - - -#include "Poco/Util/Util.h" - - -#ifndef POCO_UTIL_NO_JSONCONFIGURATION - - -#include "Poco/Util/AbstractConfiguration.h" -#include "Poco/JSON/Object.h" -#include - - -namespace Poco { -namespace Util { - - -class Util_API JSONConfiguration : public AbstractConfiguration - /// This configuration class extracts configuration properties - /// from a JSON object. An XPath-like syntax for property - /// names is supported to allow full access to the JSON object. - /// - /// Given the following JSON object as an example: - /// { - /// "config" : { - /// "prop1" : "value1", - /// "prop2" : 10, - /// "prop3" : [ - /// "element1", - /// "element2" - /// ], - /// "prop4" : { - /// "prop5" : false, - /// "prop6" : null - /// } - /// } - /// } - /// The following property names would be valid and would - /// yield the shown values: - /// - /// config.prop1 --> "value1" - /// config.prop3[1] --> "element2" - /// config.prop4.prop5 --> false -{ -public: - - JSONConfiguration(); - /// Creates an empty configuration - - - JSONConfiguration(const std::string& path); - /// Creates a configuration and loads the JSON structure from the given file - - - JSONConfiguration(std::istream& istr); - /// Creates a configuration and loads the JSON structure from the given stream - - - JSONConfiguration(const JSON::Object::Ptr& object); - /// Creates a configuration from the given JSON object - - - virtual ~JSONConfiguration(); - /// Destructor - - - void load(const std::string& path); - /// Loads the configuration from the given file - - - void load(std::istream& istr); - /// Loads the configuration from the given stream - - - void loadEmpty(const std::string& root); - /// Loads an empty object containing only a root object with the given name. - - - void save(std::ostream& ostr, unsigned int indent = 2) const; - /// Saves the configuration to the given stream - - - virtual void setInt(const std::string& key, int value); - - - virtual void setBool(const std::string& key, bool value); - - - virtual void setDouble(const std::string& key, double value); - - - virtual void setString(const std::string& key, const std::string& value); - - - virtual void removeRaw(const std::string& key); - - -protected: - - bool getRaw(const std::string & key, std::string & value) const; - - - void setRaw(const std::string& key, const std::string& value); - - - void enumerate(const std::string& key, Keys& range) const; - - -private: - - - JSON::Object::Ptr findStart(const std::string& key, std::string& lastPart); - - - void getIndexes(std::string& name, std::vector& indexes); - - - void setValue(const std::string& key, const Poco::DynamicAny& value); - - - JSON::Object::Ptr _object; -}; - - -} } // namespace Poco::Util - - -#endif // POCO_UTIL_NO_JSONCONFIGURATION - - -#endif // Util_JSONConfiguration_INCLUDED - diff --git a/contrib/libpoco/Util/include/Poco/Util/LayeredConfiguration.h b/contrib/libpoco/Util/include/Poco/Util/LayeredConfiguration.h deleted file mode 100644 index 8c258ed95b5..00000000000 --- a/contrib/libpoco/Util/include/Poco/Util/LayeredConfiguration.h +++ /dev/null @@ -1,150 +0,0 @@ -// -// LayeredConfiguration.h -// -// $Id: //poco/1.4/Util/include/Poco/Util/LayeredConfiguration.h#1 $ -// -// Library: Util -// Package: Configuration -// Module: LayeredConfiguration -// -// Definition of the LayeredConfiguration class. -// -// Copyright (c) 2004-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Util_LayeredConfiguration_INCLUDED -#define Util_LayeredConfiguration_INCLUDED - - -#include "Poco/Util/Util.h" -#include "Poco/Util/AbstractConfiguration.h" -#include "Poco/AutoPtr.h" -#include - - -namespace Poco { -namespace Util { - - -class Util_API LayeredConfiguration: public AbstractConfiguration - /// A LayeredConfiguration consists of a number of AbstractConfigurations. - /// - /// When reading a configuration property in a LayeredConfiguration, - /// all added configurations are searched, in order of their priority. - /// Configurations with lower priority values have precedence. - /// - /// When setting a property, the property is always written to the first writeable - /// configuration (see addWriteable()). - /// If no writeable configuration has been added to the LayeredConfiguration, and an - /// attempt is made to set a property, a RuntimeException is thrown. - /// - /// Every configuration added to the LayeredConfiguration has a priority value. - /// The priority determines the position where the configuration is inserted, - /// with lower priority values coming before higher priority values. - /// - /// If no priority is specified, a priority of 0 is assumed. -{ -public: - LayeredConfiguration(); - /// Creates the LayeredConfiguration. - - void add(AbstractConfiguration* pConfig); - /// Adds a read-only configuration to the back of the LayeredConfiguration. - /// The LayeredConfiguration does not take ownership of the given - /// configuration. In other words, the configuration's reference - /// count is incremented. - - void add(AbstractConfiguration* pConfig, bool shared); - /// Adds a read-only configuration to the back of the LayeredConfiguration. - /// If shared is false, the LayeredConfiguration takes ownership - /// of the given configuration (and the configuration's reference - /// count remains unchanged). - - void add(AbstractConfiguration* pConfig, int priority); - /// Adds a read-only configuration to the LayeredConfiguration. - /// The LayeredConfiguration does not take ownership of the given - /// configuration. In other words, the configuration's reference - /// count is incremented. - - void add(AbstractConfiguration* pConfig, int priority, bool shared); - /// Adds a read-only configuration the LayeredConfiguration. - /// If shared is false, the LayeredConfiguration takes ownership - /// of the given configuration (and the configuration's reference - /// count remains unchanged). - - void add(AbstractConfiguration* pConfig, int priority, bool writeable, bool shared); - /// Adds a configuration to the LayeredConfiguration. - /// If shared is false, the LayeredConfiguration takes ownership - /// of the given configuration (and the configuration's reference - /// count remains unchanged). - - void addWriteable(AbstractConfiguration* pConfig, int priority); - /// Adds a writeable configuration to the LayeredConfiguration. - /// The LayeredConfiguration does not take ownership of the given - /// configuration. In other words, the configuration's reference - /// count is incremented. - - void addWriteable(AbstractConfiguration* pConfig, int priority, bool shared); - /// Adds a writeable configuration to the LayeredConfiguration. - /// If shared is false, the LayeredConfiguration takes ownership - /// of the given configuration (and the configuration's reference - /// count remains unchanged). - - //@ deprecated - void addFront(AbstractConfiguration* pConfig); - /// Adds a read-only configuration to the front of the LayeredConfiguration. - /// The LayeredConfiguration does not take ownership of the given - /// configuration. In other words, the configuration's reference - /// count is incremented. - - //@ deprecated - void addFront(AbstractConfiguration* pConfig, bool shared); - /// Adds a read-only configuration to the front of the LayeredConfiguration. - /// If shared is true, the LayeredConfiguration takes ownership - /// of the given configuration. - - void removeConfiguration(AbstractConfiguration* pConfig); - /// Removes the given configuration from the LayeredConfiguration. - /// - /// Does nothing if the given configuration is not part of the - /// LayeredConfiguration. - -protected: - typedef Poco::AutoPtr ConfigPtr; - - struct ConfigItem - { - ConfigPtr pConfig; - int priority; - bool writeable; - }; - - bool getRaw(const std::string& key, std::string& value) const; - void setRaw(const std::string& key, const std::string& value); - void enumerate(const std::string& key, Keys& range) const; - void removeRaw(const std::string& key); - - int lowest() const; - int highest() const; - void insert(const ConfigItem& item); - - ~LayeredConfiguration(); - -private: - LayeredConfiguration(const LayeredConfiguration&); - LayeredConfiguration& operator = (const LayeredConfiguration&); - - typedef std::list ConfigList; - - ConfigList _configs; -}; - - -} } // namespace Poco::Util - - -#endif // Util_LayeredConfiguration_INCLUDED diff --git a/contrib/libpoco/Util/include/Poco/Util/LoggingConfigurator.h b/contrib/libpoco/Util/include/Poco/Util/LoggingConfigurator.h deleted file mode 100644 index 4ffcaf2945c..00000000000 --- a/contrib/libpoco/Util/include/Poco/Util/LoggingConfigurator.h +++ /dev/null @@ -1,141 +0,0 @@ -// -// LoggingConfigurator.h -// -// $Id: //poco/1.4/Util/include/Poco/Util/LoggingConfigurator.h#1 $ -// -// Library: Util -// Package: Configuration -// Module: LoggingConfigurator -// -// Definition of the LoggingConfigurator class. -// -// Copyright (c) 2004-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Util_LoggingConfigurator_INCLUDED -#define Util_LoggingConfigurator_INCLUDED - - -#include "Poco/Util/Util.h" -#include "Poco/Formatter.h" -#include "Poco/Channel.h" - - -namespace Poco { -namespace Util { - - -class AbstractConfiguration; - - -class Util_API LoggingConfigurator - /// This utility class uses a configuration object to configure the - /// logging subsystem of an application. - /// - /// The LoggingConfigurator sets up and connects formatters, channels - /// and loggers. To accomplish its work, the LoggingConfigurator relies on the - /// functionality provided by the LoggingFactory und LoggingRegistry classes. - /// - /// The LoggingConfigurator expects all configuration data to be under a root - /// property named "logging". - /// - /// Configuring Formatters - /// - /// A formatter is configured using the "logging.formatters" property. Every - /// formatter has an internal name, which is only used for referring to it - /// during configuration time. This name becomes part of the property name. - /// Every formatter has a mandatory "class" property, which specifies the actual - /// class implementing the formatter. Any other properties are passed on to - /// the formatter by calling its setProperty() method. - /// - /// A typical formatter definition looks as follows: - /// logging.formatters.f1.class = PatternFormatter - /// logging.formatters.f1.pattern = %s: [%p] %t - /// logging.formatters.f1.times = UTC - /// - /// Configuring Channels - /// - /// A channel is configured using the "logging.channels" property. Like with - /// Formatters, every channel has an internal name, which is used during - /// configuration only. The name becomes part of the property name. - /// Every channel has a mandatory "class" property, which specifies the actual - /// class implementing the channel. Any other properties are passed on to - /// the formatter by calling its setProperty() method. - /// - /// For convenience, the "formatter" property of a channel is treated - /// specifically. The "formatter" property can either be used to refer to - /// an already defined formatter, or it can be used to specify an "inline" - /// formatter definition. In either case, when a "formatter" property is - /// present, the channel is automatically "wrapped" in a FormattingChannel - /// object. - /// - /// Similarly, a channel supports also a "pattern" property, which results - /// in the automatic instantiation of a FormattingChannel object with a - /// connected PatternFormatter. - /// - /// Examples: - /// logging.channels.c1.class = ConsoleChannel - /// logging.channels.c1.formatter = f1 - /// logging.channels.c2.class = FileChannel - /// logging.channels.c2.path = ${system.tempDir}/sample.log - /// logging.channels.c2.formatter.class = PatternFormatter - /// logging.channels.c2.formatter.pattern = %s: [%p] %t - /// logging.channels.c3.class = ConsoleChannel - /// logging.channels.c3.pattern = %s: [%p] %t - /// - /// Configuring Loggers - /// - /// A logger is configured using the "logging.loggers" property. Like with - /// channels and formatters, every logger has an internal name, which, however, - /// is only used to ensure the uniqueness of the property names. Note that this - /// name is different from the logger's full name, which is used to access - /// the logger at runtime. - /// Every logger except the root logger has a mandatory "name" property which - /// is used to specify the logger's full name. - /// Furthermore, a "channel" property is supported, which can either refer - /// to a named channel, or which can contain an inline channel definition. - /// - /// Examples: - /// logging.loggers.root.channel = c1 - /// logging.loggers.root.level = warning - /// logging.loggers.l1.name = logger1 - /// logging.loggers.l1.channel.class = ConsoleChannel - /// logging.loggers.l1.channel.pattern = %s: [%p] %t - /// logging.loggers.l1.level = information -{ -public: - LoggingConfigurator(); - /// Creates the LoggingConfigurator. - - ~LoggingConfigurator(); - /// Destroys the LoggingConfigurator. - - void configure(AbstractConfiguration* pConfig); - /// Configures the logging subsystem based on - /// the given configuration. - /// - /// A ConfigurationView can be used to pass only - /// a part of a larger configuration. - -private: - void configureFormatters(AbstractConfiguration* pConfig); - void configureChannels(AbstractConfiguration* pConfig); - void configureLoggers(AbstractConfiguration* pConfig); - Poco::Formatter* createFormatter(AbstractConfiguration* pConfig); - Poco::Channel* createChannel(AbstractConfiguration* pConfig); - void configureChannel(Channel* pChannel, AbstractConfiguration* pConfig); - void configureLogger(AbstractConfiguration* pConfig); - - LoggingConfigurator(const LoggingConfigurator&); - LoggingConfigurator& operator = (const LoggingConfigurator&); -}; - - -} } // namespace Poco::Util - - -#endif // Util_LoggingConfigurator_INCLUDED diff --git a/contrib/libpoco/Util/include/Poco/Util/LoggingSubsystem.h b/contrib/libpoco/Util/include/Poco/Util/LoggingSubsystem.h deleted file mode 100644 index fb15e484847..00000000000 --- a/contrib/libpoco/Util/include/Poco/Util/LoggingSubsystem.h +++ /dev/null @@ -1,54 +0,0 @@ -// -// LoggingSubsystem.h -// -// $Id: //poco/1.4/Util/include/Poco/Util/LoggingSubsystem.h#1 $ -// -// Library: Util -// Package: Application -// Module: LoggingSubsystem -// -// Definition of the LoggingSubsystem class. -// -// Copyright (c) 2004-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Util_LoggingSubsystem_INCLUDED -#define Util_LoggingSubsystem_INCLUDED - - -#include "Poco/Util/Util.h" -#include "Poco/Util/Subsystem.h" - - -namespace Poco { -namespace Util { - - -class Util_API LoggingSubsystem: public Subsystem - /// The LoggingSubsystem class initializes the logging - /// framework using the LoggingConfigurator. - /// - /// It also sets the Application's logger to - /// the logger specified by the "application.logger" - /// property, or to "Application" if the property - /// is not specified. -{ -public: - LoggingSubsystem(); - const char* name() const; - -protected: - void initialize(Application& self); - void uninitialize(); - ~LoggingSubsystem(); -}; - - -} } // namespace Poco::Util - - -#endif // Util_LoggingSubsystem_INCLUDED diff --git a/contrib/libpoco/Util/include/Poco/Util/MapConfiguration.h b/contrib/libpoco/Util/include/Poco/Util/MapConfiguration.h deleted file mode 100644 index 5fea33f984e..00000000000 --- a/contrib/libpoco/Util/include/Poco/Util/MapConfiguration.h +++ /dev/null @@ -1,63 +0,0 @@ -// -// MapConfiguration.h -// -// $Id: //poco/1.4/Util/include/Poco/Util/MapConfiguration.h#1 $ -// -// Library: Util -// Package: Configuration -// Module: MapConfiguration -// -// Definition of the MapConfiguration class. -// -// Copyright (c) 2004-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Util_MapConfiguration_INCLUDED -#define Util_MapConfiguration_INCLUDED - - -#include "Poco/Util/Util.h" -#include "Poco/Util/AbstractConfiguration.h" -#include - - -namespace Poco { -namespace Util { - - -class Util_API MapConfiguration: public AbstractConfiguration - /// An implementation of AbstractConfiguration that stores configuration data in a map. -{ -public: - MapConfiguration(); - /// Creates an empty MapConfiguration. - - void clear(); - /// Clears the configuration. - -protected: - typedef std::map StringMap; - typedef StringMap::const_iterator iterator; - - bool getRaw(const std::string& key, std::string& value) const; - void setRaw(const std::string& key, const std::string& value); - void enumerate(const std::string& key, Keys& range) const; - void removeRaw(const std::string& key); - ~MapConfiguration(); - - iterator begin() const; - iterator end() const; - -private: - StringMap _map; -}; - - -} } // namespace Poco::Util - - -#endif // Util_MapConfiguration_INCLUDED diff --git a/contrib/libpoco/Util/include/Poco/Util/Option.h b/contrib/libpoco/Util/include/Poco/Util/Option.h deleted file mode 100644 index 66c23942def..00000000000 --- a/contrib/libpoco/Util/include/Poco/Util/Option.h +++ /dev/null @@ -1,334 +0,0 @@ -// -// Option.h -// -// $Id: //poco/1.4/Util/include/Poco/Util/Option.h#1 $ -// -// Library: Util -// Package: Options -// Module: Option -// -// Definition of the Option class. -// -// Copyright (c) 2004-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Util_Option_INCLUDED -#define Util_Option_INCLUDED - - -#include "Poco/Util/Util.h" -#include "Poco/Util/OptionCallback.h" - - -namespace Poco { -namespace Util { - - -class Application; -class Validator; -class AbstractConfiguration; - - -class Util_API Option - /// This class represents and stores the properties - /// of a command line option. - /// - /// An option has a full name, an optional short name, - /// a description (used for printing a usage statement), - /// and an optional argument name. - /// An option can be optional or required. - /// An option can be repeatable, which means that it can - /// be given more than once on the command line. - /// - /// An option can be part of an option group. At most one - /// option of each group may be specified on the command - /// line. - /// - /// An option can be bound to a configuration property. - /// In this case, a configuration property will automatically - /// receive the option's argument value. - /// - /// A callback method can be specified for options. This method - /// is called whenever an option is specified on the command line. - /// - /// Option argument values can be automatically validated using a - /// Validator. - /// - /// Option instances are value objects. - /// - /// Typcally, after construction, an Option object is immediately - /// passed to an Options object. - /// - /// An Option object can be created by chaining the constructor - /// with any of the setter methods, as in the following example: - /// - /// Option versionOpt("include", "I", "specify an include directory") - /// .required(false) - /// .repeatable(true) - /// .argument("directory"); -{ -public: - Option(); - /// Creates an empty Option. - - Option(const Option& option); - /// Creates an option from another one. - - Option(const std::string& fullName, const std::string& shortName); - /// Creates an option with the given properties. - - Option(const std::string& fullName, const std::string& shortName, const std::string& description, bool required = false); - /// Creates an option with the given properties. - - Option(const std::string& fullName, const std::string& shortName, const std::string& description, bool required, const std::string& argName, bool argRequired = false); - /// Creates an option with the given properties. - - ~Option(); - /// Destroys the Option. - - Option& operator = (const Option& option); - /// Assignment operator. - - void swap(Option& option); - /// Swaps the option with another one. - - Option& shortName(const std::string& name); - /// Sets the short name of the option. - - Option& fullName(const std::string& name); - /// Sets the full name of the option. - - Option& description(const std::string& text); - /// Sets the description of the option. - - Option& required(bool flag); - /// Sets whether the option is required (flag == true) - /// or optional (flag == false). - - Option& repeatable(bool flag); - /// Sets whether the option can be specified more than once - /// (flag == true) or at most once (flag == false). - - Option& argument(const std::string& name, bool required = true); - /// Specifies that the option takes an (optional or required) - /// argument. - - Option& noArgument(); - /// Specifies that the option does not take an argument (default). - - Option& group(const std::string& group); - /// Specifies the option group the option is part of. - - Option& binding(const std::string& propertyName); - /// Binds the option to the configuration property with the given name. - /// - /// The configuration will automatically receive the option's argument. - - Option& binding(const std::string& propertyName, AbstractConfiguration* pConfig); - /// Binds the option to the configuration property with the given name, - /// using the given AbstractConfiguration. - /// - /// The configuration will automatically receive the option's argument. - - Option& callback(const AbstractOptionCallback& cb); - /// Binds the option to the given method. - /// - /// The callback method will be called when the option - /// has been specified on the command line. - /// - /// Usage: - /// callback(OptionCallback(this, &MyApplication::myCallback)); - - Option& validator(Validator* pValidator); - /// Sets the validator for the given option. - /// - /// The Option takes ownership of the Validator and - /// deletes it when it's no longer needed. - - const std::string& shortName() const; - /// Returns the short name of the option. - - const std::string& fullName() const; - /// Returns the full name of the option. - - const std::string& description() const; - /// Returns the description of the option. - - bool required() const; - /// Returns true if the option is required, false if not. - - bool repeatable() const; - /// Returns true if the option can be specified more than - /// once, or false if at most once. - - bool takesArgument() const; - /// Returns true if the options takes an (optional) argument. - - bool argumentRequired() const; - /// Returns true if the argument is required. - - const std::string& argumentName() const; - /// Returns the argument name, if specified. - - const std::string& group() const; - /// Returns the option group the option is part of, - /// or an empty string, if the option is not part of - /// a group. - - const std::string& binding() const; - /// Returns the property name the option is bound to, - /// or an empty string in case it is not bound. - - AbstractOptionCallback* callback() const; - /// Returns a pointer to the callback method for the option, - /// or NULL if no callback has been specified. - - Validator* validator() const; - /// Returns the option's Validator, if one has been specified, - /// or NULL otherwise. - - AbstractConfiguration* config() const; - /// Returns the configuration, if specified, or NULL otherwise. - - bool matchesShort(const std::string& option) const; - /// Returns true if the given option string matches the - /// short name. - /// - /// The first characters of the option string must match - /// the short name of the option (case sensitive), - /// or the option string must partially match the full - /// name (case insensitive). - - bool matchesFull(const std::string& option) const; - /// Returns true if the given option string matches the - /// full name. - /// - /// The option string must match the full - /// name (case insensitive). - - bool matchesPartial(const std::string& option) const; - /// Returns true if the given option string partially matches the - /// full name. - /// - /// The option string must partially match the full - /// name (case insensitive). - - void process(const std::string& option, std::string& arg) const; - /// Verifies that the given option string matches the - /// requirements of the option, and extracts the option argument, - /// if present. - /// - /// If the option string is okay and carries an argument, - /// the argument is returned in arg. - /// - /// Throws a MissingArgumentException if a required argument - /// is missing. Throws an UnexpectedArgumentException if an - /// argument has been found, but none is expected. - -private: - std::string _shortName; - std::string _fullName; - std::string _description; - bool _required; - bool _repeatable; - std::string _argName; - bool _argRequired; - std::string _group; - std::string _binding; - Validator* _pValidator; - AbstractOptionCallback* _pCallback; - AbstractConfiguration* _pConfig; -}; - - -// -// inlines -// - - -inline const std::string& Option::shortName() const -{ - return _shortName; -} - - -inline const std::string& Option::fullName() const -{ - return _fullName; -} - - -inline const std::string& Option::description() const -{ - return _description; -} - - -inline bool Option::required() const -{ - return _required; -} - - -inline bool Option::repeatable() const -{ - return _repeatable; -} - - -inline bool Option::takesArgument() const -{ - return !_argName.empty(); -} - - -inline bool Option::argumentRequired() const -{ - return _argRequired; -} - - -inline const std::string& Option::argumentName() const -{ - return _argName; -} - - -inline const std::string& Option::group() const -{ - return _group; -} - - -inline const std::string& Option::binding() const -{ - return _binding; -} - - -inline AbstractOptionCallback* Option::callback() const -{ - return _pCallback; -} - - -inline Validator* Option::validator() const -{ - return _pValidator; -} - - -inline AbstractConfiguration* Option::config() const -{ - return _pConfig; -} - - -} } // namespace Poco::Util - - -#endif // Util_Option_INCLUDED diff --git a/contrib/libpoco/Util/include/Poco/Util/OptionCallback.h b/contrib/libpoco/Util/include/Poco/Util/OptionCallback.h deleted file mode 100644 index 578175fbba1..00000000000 --- a/contrib/libpoco/Util/include/Poco/Util/OptionCallback.h +++ /dev/null @@ -1,111 +0,0 @@ -// -// OptionCallback.h -// -// $Id: //poco/1.4/Util/include/Poco/Util/OptionCallback.h#1 $ -// -// Library: Util -// Package: Options -// Module: OptionCallback -// -// Definition of the OptionCallback class. -// -// Copyright (c) 2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Util_OptionCallback_INCLUDED -#define Util_OptionCallback_INCLUDED - - -#include "Poco/Util/Util.h" - - -namespace Poco { -namespace Util { - - -class Util_API AbstractOptionCallback - /// Base class for OptionCallback. -{ -public: - virtual void invoke(const std::string& name, const std::string& value) const = 0; - /// Invokes the callback member function. - - virtual AbstractOptionCallback* clone() const = 0; - /// Creates and returns a copy of the object. - - virtual ~AbstractOptionCallback(); - /// Destroys the AbstractOptionCallback. - -protected: - AbstractOptionCallback(); - AbstractOptionCallback(const AbstractOptionCallback&); -}; - - -template -class OptionCallback: public AbstractOptionCallback - /// This class is used as an argument to Option::callback(). - /// - /// It stores a pointer to an object and a pointer to a member - /// function of the object's class. -{ -public: - typedef void (C::*Callback)(const std::string& name, const std::string& value); - - OptionCallback(C* pObject, Callback method): - _pObject(pObject), - _method(method) - /// Creates the OptionCallback for the given object and member function. - { - poco_check_ptr (pObject); - } - - OptionCallback(const OptionCallback& cb): - AbstractOptionCallback(cb), - _pObject(cb._pObject), - _method(cb._method) - /// Creates an OptionCallback from another one. - { - } - - ~OptionCallback() - /// Destroys the OptionCallback. - { - } - - OptionCallback& operator = (const OptionCallback& cb) - { - if (&cb != this) - { - this->_pObject = cb._pObject; - this->_method = cb._method; - } - return *this; - } - - void invoke(const std::string& name, const std::string& value) const - { - (_pObject->*_method)(name, value); - } - - AbstractOptionCallback* clone() const - { - return new OptionCallback(_pObject, _method); - } - -private: - OptionCallback(); - - C* _pObject; - Callback _method; -}; - - -} } // namespace Poco::Util - - -#endif // Util_OptionCallback_INCLUDED diff --git a/contrib/libpoco/Util/include/Poco/Util/OptionException.h b/contrib/libpoco/Util/include/Poco/Util/OptionException.h deleted file mode 100644 index 031913c7b14..00000000000 --- a/contrib/libpoco/Util/include/Poco/Util/OptionException.h +++ /dev/null @@ -1,46 +0,0 @@ -// -// OptionException.h -// -// $Id: //poco/1.4/Util/include/Poco/Util/OptionException.h#1 $ -// -// Library: Util -// Package: Options -// Module: OptionException -// -// Definition of the OptionException class. -// -// Copyright (c) 2004-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Util_OptionException_INCLUDED -#define Util_OptionException_INCLUDED - - -#include "Poco/Util/Util.h" -#include "Poco/Exception.h" - - -namespace Poco { -namespace Util { - - -POCO_DECLARE_EXCEPTION(Util_API, OptionException, Poco::DataException) -POCO_DECLARE_EXCEPTION(Util_API, UnknownOptionException, OptionException) -POCO_DECLARE_EXCEPTION(Util_API, AmbiguousOptionException, OptionException) -POCO_DECLARE_EXCEPTION(Util_API, MissingOptionException, OptionException) -POCO_DECLARE_EXCEPTION(Util_API, MissingArgumentException, OptionException) -POCO_DECLARE_EXCEPTION(Util_API, InvalidArgumentException, OptionException) -POCO_DECLARE_EXCEPTION(Util_API, UnexpectedArgumentException, OptionException) -POCO_DECLARE_EXCEPTION(Util_API, IncompatibleOptionsException, OptionException) -POCO_DECLARE_EXCEPTION(Util_API, DuplicateOptionException, OptionException) -POCO_DECLARE_EXCEPTION(Util_API, EmptyOptionException, OptionException) - - -} } // namespace Poco::Util - - -#endif // Util_OptionException_INCLUDED diff --git a/contrib/libpoco/Util/include/Poco/Util/OptionProcessor.h b/contrib/libpoco/Util/include/Poco/Util/OptionProcessor.h deleted file mode 100644 index 752aa084adf..00000000000 --- a/contrib/libpoco/Util/include/Poco/Util/OptionProcessor.h +++ /dev/null @@ -1,139 +0,0 @@ -// -// OptionProcessor.h -// -// $Id: //poco/1.4/Util/include/Poco/Util/OptionProcessor.h#2 $ -// -// Library: Util -// Package: Options -// Module: OptionProcessor -// -// Definition of the OptionProcessor class. -// -// Copyright (c) 2004-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Util_OptionProcessor_INCLUDED -#define Util_OptionProcessor_INCLUDED - - -#include "Poco/Util/Util.h" -#include - - -namespace Poco { -namespace Util { - - -class OptionSet; - - -class Util_API OptionProcessor - /// An OptionProcessor is used to process the command line - /// arguments of an application. - /// - /// The process() method takes an argument from the command line. - /// If that argument starts with an option prefix, the argument - /// is further processed. Otherwise, the argument is ignored and - /// false is returned. The argument must match one of the options - /// given in the OptionSet that is passed to the OptionProcessor - /// with the constructor. If an option is part of a group, at most - /// one option of the group can be passed to the OptionProcessor. - /// Otherwise an IncompatibleOptionsException is thrown. - /// If the same option is given multiple times, but the option - /// is not repeatable, a DuplicateOptionException is thrown. - /// If the option is not recognized, a UnexpectedArgumentException - /// is thrown. - /// If the option requires an argument, but none is given, an - /// MissingArgumentException is thrown. - /// If no argument is expected, but one is present, a - /// UnexpectedArgumentException is thrown. - /// If a partial option name is ambiguous, an AmbiguousOptionException - /// is thrown. - /// - /// The OptionProcessor supports two modes: Unix mode and default mode. - /// In Unix mode, the option prefix is a dash '-'. A dash must be followed - /// by a short option name, or another dash, followed by a (partial) - /// long option name. - /// In default mode, the option prefix is a slash '/', followed by - /// a (partial) long option name. - /// If the special option '--' is encountered in Unix mode, all following - /// options are ignored. - /// - /// Option arguments can be specified in three ways. If a Unix short option - /// ("-o") is given, the argument directly follows the option name, without - /// any delimiting character or space ("-ovalue"). In default option mode, or if a - /// Unix long option ("--option") is given, the option argument is - /// delimited from the option name with either an equal sign ('=') or - /// a colon (':'), as in "--option=value" or "/option:value". Finally, - /// a required option argument can be specified on the command line after the - /// option, delimited with a space, as in "--option value" or "-o value". - /// The latter only works for required option arguments, not optional ones. -{ -public: - OptionProcessor(const OptionSet& options); - /// Creates the OptionProcessor, using the given OptionSet. - - ~OptionProcessor(); - /// Destroys the OptionProcessor. - - void setUnixStyle(bool flag); - /// Enables (flag == true) or disables (flag == false) Unix-style - /// option processing. - /// - /// If Unix-style processing is enabled, options are expected to - /// begin with a single or a double dash ('-' or '--', respectively). - /// A single dash must be followed by a short option name. A double - /// dash must be followed by a (partial) full option name. - /// - /// If Unix-style processing is disabled, options are expected to - /// begin with a slash ('/'), followed by a (partial) full option name. - - bool isUnixStyle() const; - /// Returns true iff Unix-style option processing is enabled. - - bool process(const std::string& argument, std::string& optionName, std::string& optionArg); - /// Examines and processes the given command line argument. - /// - /// If the argument begins with an option prefix, the option is processed - /// and true is returned. The full option name is stored in optionName and the - /// option argument, if present, is stored in optionArg. - /// - /// If the option does not begin with an option prefix, false is returned. - - void checkRequired() const; - /// Checks if all required options have been processed. - /// - /// Does nothing if all required options have been processed. - /// Throws a MissingOptionException otherwise. - -private: - bool processUnix(const std::string& argument, std::string& optionName, std::string& optionArg); - bool processDefault(const std::string& argument, std::string& optionName, std::string& optionArg); - bool processCommon(const std::string& option, bool isShort, std::string& optionName, std::string& optionArg); - - const OptionSet& _options; - bool _unixStyle; - bool _ignore; - std::set _groups; - std::set _specifiedOptions; - std::string _deferredOption; -}; - - -// -// inlines -// -inline bool OptionProcessor::isUnixStyle() const -{ - return _unixStyle; -} - - -} } // namespace Poco::Util - - -#endif // Util_OptionProcessor_INCLUDED diff --git a/contrib/libpoco/Util/include/Poco/Util/OptionSet.h b/contrib/libpoco/Util/include/Poco/Util/OptionSet.h deleted file mode 100644 index b02aed310d1..00000000000 --- a/contrib/libpoco/Util/include/Poco/Util/OptionSet.h +++ /dev/null @@ -1,90 +0,0 @@ -// -// OptionSet.h -// -// $Id: //poco/1.4/Util/include/Poco/Util/OptionSet.h#1 $ -// -// Library: Util -// Package: Options -// Module: OptionSet -// -// Definition of the OptionSet class. -// -// Copyright (c) 2004-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Util_OptionSet_INCLUDED -#define Util_OptionSet_INCLUDED - - -#include "Poco/Util/Util.h" -#include "Poco/Util/Option.h" -#include - - -namespace Poco { -namespace Util { - - -class Util_API OptionSet - /// A collection of Option objects. -{ -public: - typedef std::vector