Feature net udp (#2347)

* add PMTU discovery #2329

* add socket gather/scatter capabilities #2330 (win, udp)

* enable WSAPoll

* add FastMemoryPool

* add receiveFrom() with native args

* allow copying of StringTokenizer

* add AtomicFlag and SpinlockMutex

* update .gitignore

* UDPServer and client #2343 (windows)

* fix warnings

* fix warnings

* regenerate Net VS solutions

* regenerate CppUnit projects/solutions

* clang fixes

* gcc fixes

* try to fix travis

* more travis fixes

* more travis fixes

* handle UDPClient exception

* fix makefiles and init order warnings

* add UNIX gather/scatter sendto/recvfrom implementations and tests

* run travis tests as sudo

* try to run tests as sudo, 2nd attempt

* fix warning

* use mutex in reactor

* lock-order-inversion in SocketReactor #2346

* add PMTU discovery #2329 (linux)

* ICMPSocket does not check reply address #1921

* remove some ignored tests

* add PMTU discovery #2329 (reconcile logic with #1921)

* fix native receiveFrome()

* reinstate ignoring of proxy errors

* add testMTU to ignore list

* add include atomic

* NTPClient not checking reply address #2348

* some ICMP/MTU fixes

* UDPSocketReader cleanup

* resolve some socket inheritance warnings

* add NTP time sync to ignored tests

* SocketNotifier not thread-safe #2345

* prevent x64 samples build attempt for win32

* build TestApp and Library

* fix ICMP tests

* regen VS projects

* regen VS projects and add missing 2012 files

* remove debug prints
This commit is contained in:
Aleksandar Fabijanic 2018-06-02 14:02:33 -05:00 committed by GitHub
parent da15142f69
commit c4e676d36d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
127 changed files with 5540 additions and 1408 deletions

6
.gitignore vendored
View File

@ -142,3 +142,9 @@ cmake-build/
*.bak
stage/
releases/
# Development files #
#####################
postgresql/
mysql/

View File

@ -134,13 +134,13 @@ matrix:
compiler: gcc
script:
- ./configure --everything --omit=PDF && make all -s -j2 && sudo make install
- ./travis/runtests.sh
- sudo -s ./travis/runtests.sh
- env: TEST_NAME="clang (make)"
compiler: clang
script:
- ./configure --everything --omit=PDF --config=Linux-clang && make all -s -j2 && sudo make install
- ./travis/runtests.sh
- sudo -s ./travis/runtests.sh
- env: TEST_NAME="arm-linux-gnueabi- (make)"
script:

View File

@ -2,7 +2,7 @@ Microsoft Visual Studio Solution File, Format Version 10.00
# Visual Studio 2008
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Foundation", "Foundation_x64_vs90.vcproj", "{B01196CC-B693-4548-8464-2FF60499E73F}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "TestSuite", "testsuite\TestSuite_x64_vs90.vcproj", "{F1EE93DF-347F-4CB3-B191-C4E63F38E972}"
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "TestSuite", "testsuite\TestSuite_x64_vs90.vcproj", "{C812E0B9-69A9-4FA1-A1D4-161CF677BD10}"
ProjectSection(ProjectDependencies) = postProject
{B01196CC-B693-4548-8464-2FF60499E73F} = {B01196CC-B693-4548-8464-2FF60499E73F}
EndProjectSection
@ -35,24 +35,24 @@ Global
{B01196CC-B693-4548-8464-2FF60499E73F}.release_static_mt|x64.ActiveCfg = release_static_mt|x64
{B01196CC-B693-4548-8464-2FF60499E73F}.release_static_mt|x64.Build.0 = release_static_mt|x64
{B01196CC-B693-4548-8464-2FF60499E73F}.release_static_mt|x64.Deploy.0 = release_static_mt|x64
{F1EE93DF-347F-4CB3-B191-C4E63F38E972}.debug_shared|x64.ActiveCfg = debug_shared|x64
{F1EE93DF-347F-4CB3-B191-C4E63F38E972}.debug_shared|x64.Build.0 = debug_shared|x64
{F1EE93DF-347F-4CB3-B191-C4E63F38E972}.debug_shared|x64.Deploy.0 = debug_shared|x64
{F1EE93DF-347F-4CB3-B191-C4E63F38E972}.debug_static_md|x64.ActiveCfg = debug_static_md|x64
{F1EE93DF-347F-4CB3-B191-C4E63F38E972}.debug_static_md|x64.Build.0 = debug_static_md|x64
{F1EE93DF-347F-4CB3-B191-C4E63F38E972}.debug_static_md|x64.Deploy.0 = debug_static_md|x64
{F1EE93DF-347F-4CB3-B191-C4E63F38E972}.debug_static_mt|x64.ActiveCfg = debug_static_mt|x64
{F1EE93DF-347F-4CB3-B191-C4E63F38E972}.debug_static_mt|x64.Build.0 = debug_static_mt|x64
{F1EE93DF-347F-4CB3-B191-C4E63F38E972}.debug_static_mt|x64.Deploy.0 = debug_static_mt|x64
{F1EE93DF-347F-4CB3-B191-C4E63F38E972}.release_shared|x64.ActiveCfg = release_shared|x64
{F1EE93DF-347F-4CB3-B191-C4E63F38E972}.release_shared|x64.Build.0 = release_shared|x64
{F1EE93DF-347F-4CB3-B191-C4E63F38E972}.release_shared|x64.Deploy.0 = release_shared|x64
{F1EE93DF-347F-4CB3-B191-C4E63F38E972}.release_static_md|x64.ActiveCfg = release_static_md|x64
{F1EE93DF-347F-4CB3-B191-C4E63F38E972}.release_static_md|x64.Build.0 = release_static_md|x64
{F1EE93DF-347F-4CB3-B191-C4E63F38E972}.release_static_md|x64.Deploy.0 = release_static_md|x64
{F1EE93DF-347F-4CB3-B191-C4E63F38E972}.release_static_mt|x64.ActiveCfg = release_static_mt|x64
{F1EE93DF-347F-4CB3-B191-C4E63F38E972}.release_static_mt|x64.Build.0 = release_static_mt|x64
{F1EE93DF-347F-4CB3-B191-C4E63F38E972}.release_static_mt|x64.Deploy.0 = release_static_mt|x64
{C812E0B9-69A9-4FA1-A1D4-161CF677BD10}.debug_shared|x64.ActiveCfg = debug_shared|x64
{C812E0B9-69A9-4FA1-A1D4-161CF677BD10}.debug_shared|x64.Build.0 = debug_shared|x64
{C812E0B9-69A9-4FA1-A1D4-161CF677BD10}.debug_shared|x64.Deploy.0 = debug_shared|x64
{C812E0B9-69A9-4FA1-A1D4-161CF677BD10}.debug_static_md|x64.ActiveCfg = debug_static_md|x64
{C812E0B9-69A9-4FA1-A1D4-161CF677BD10}.debug_static_md|x64.Build.0 = debug_static_md|x64
{C812E0B9-69A9-4FA1-A1D4-161CF677BD10}.debug_static_md|x64.Deploy.0 = debug_static_md|x64
{C812E0B9-69A9-4FA1-A1D4-161CF677BD10}.debug_static_mt|x64.ActiveCfg = debug_static_mt|x64
{C812E0B9-69A9-4FA1-A1D4-161CF677BD10}.debug_static_mt|x64.Build.0 = debug_static_mt|x64
{C812E0B9-69A9-4FA1-A1D4-161CF677BD10}.debug_static_mt|x64.Deploy.0 = debug_static_mt|x64
{C812E0B9-69A9-4FA1-A1D4-161CF677BD10}.release_shared|x64.ActiveCfg = release_shared|x64
{C812E0B9-69A9-4FA1-A1D4-161CF677BD10}.release_shared|x64.Build.0 = release_shared|x64
{C812E0B9-69A9-4FA1-A1D4-161CF677BD10}.release_shared|x64.Deploy.0 = release_shared|x64
{C812E0B9-69A9-4FA1-A1D4-161CF677BD10}.release_static_md|x64.ActiveCfg = release_static_md|x64
{C812E0B9-69A9-4FA1-A1D4-161CF677BD10}.release_static_md|x64.Build.0 = release_static_md|x64
{C812E0B9-69A9-4FA1-A1D4-161CF677BD10}.release_static_md|x64.Deploy.0 = release_static_md|x64
{C812E0B9-69A9-4FA1-A1D4-161CF677BD10}.release_static_mt|x64.ActiveCfg = release_static_mt|x64
{C812E0B9-69A9-4FA1-A1D4-161CF677BD10}.release_static_mt|x64.Build.0 = release_static_mt|x64
{C812E0B9-69A9-4FA1-A1D4-161CF677BD10}.release_static_mt|x64.Deploy.0 = release_static_mt|x64
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE

View File

@ -0,0 +1,125 @@
//
// AtomicFlag.h
//
// Library: Foundation
// Package: Core
// Module: AtomicFlag
//
// Definition of the AtomicFlag class.
//
// Copyright (c) 2009, Applied Informatics Software Engineering GmbH.
// and Contributors.
//
// SPDX-License-Identifier: BSL-1.0
//
#ifdef POCO_HAVE_STD_ATOMICS
#ifndef Foundation_AtomicFlag_INCLUDED
#define Foundation_AtomicFlag_INCLUDED
#include "Poco/Foundation.h"
#include <atomic>
namespace Poco {
class Foundation_API AtomicFlag
/// This class implements an atomic boolean flag by wrapping
/// the std::atomic_flag. It is guaranteed to be thread-safe
/// and lock-free.
///
/// Only default-construction is allowed, objects of this
/// class are not copyable, assignable or movable.
///
/// Note that this class is not a replacement for (atomic)
/// bool type because its value can not be read without also
/// being set to true. However, after being set (either
/// explicitly, through the set() call or implicitly, via
/// operator bool()), it can be reset and reused.
///
/// The class is useful in scenarios such as busy-wait or
/// one-off code blocks, e.g.:
///
/// class MyClass
/// {
/// public:
/// void myFunc()
/// {
/// if (!_beenHere) doOnce();
/// doMany();
/// }
///
/// void doOnce() { /* executed once */ }
///
/// void doMany() { /* executed multiple times */ }
///
/// private:
/// AtomicFlag _beenHere;
/// }
///
/// MyClass myClass;
/// int i = 0;
/// while (++i < 10) myClass.myFunc();
{
public:
AtomicFlag();
/// Creates AtomicFlag.
~AtomicFlag();
/// Destroys AtomicFlag.
bool set();
/// Sets the flag to true and returns previously
/// held value.
void reset();
/// Resets the flag to false.
operator bool ();
/// Sets the flag to true and returns previously
/// held value.
private:
AtomicFlag(const AtomicFlag&) = delete;
AtomicFlag& operator = (const AtomicFlag&) = delete;
AtomicFlag(AtomicFlag&&) = delete;
AtomicFlag& operator = (AtomicFlag&&) = delete;
std::atomic_flag _flag = ATOMIC_FLAG_INIT;
};
//
// inlines
//
inline bool AtomicFlag::set()
{
return _flag.test_and_set(std::memory_order_acquire);
}
inline void AtomicFlag::reset()
{
_flag.clear(std::memory_order_release);
}
inline AtomicFlag::operator bool ()
{
return set();
}
} // namespace Poco
#endif // Foundation_AtomicFlag_INCLUDED
#endif // POCO_HAVE_STD_ATOMICS

View File

@ -19,6 +19,7 @@
#include "Poco/Foundation.h"
#include "Poco/AtomicCounter.h"
#include "Poco/Mutex.h"
#include <vector>
#include <cstddef>
@ -88,6 +89,298 @@ private:
};
//
// FastMemoryPool
//
// Macro defining the default initial size of any
// FastMemoryPool; can be overriden by specifying
// FastMemoryPool pre-alloc at runtime.
#define POCO_FAST_MEMORY_POOL_PREALLOC 1000
template <typename T, typename M = FastMutex>
class FastMemoryPool
/// FastMemoryPool is a class for pooling fixed-size blocks of memory.
///
/// The main purpose of this class is to speed-up memory allocations,
/// as well as to reduce memory fragmentation in situations where the
/// same blocks are allocated all over again, such as in server
/// applications. It differs from the MemoryPool in the way the block
/// size is determined - it is inferred form the held type size and
/// applied statically. It is also, as its name implies, faster than
/// Poco::MemoryPool. It is likely to be significantly faster than
/// the runtime platform generic memory allocation functionality
/// as well, but it has certain limitations (aside from only giving
/// blocks of fixed size) - see more below.
///
/// An object using memory from the pool should be created using
/// in-place new operator; once released back to the pool, its
/// destructor will be called by the pool. The returned pointer
/// must be a valid pointer to the type for which it was obtained.
///
/// Example use:
///
/// using std::vector;
/// using std:string;
/// using std::to_string;
/// using Poco::FastMemoryPool;
///
/// int blocks = 10;
/// FastMemoryPool<int> fastIntPool(blocks);
/// FastMemoryPool<string> fastStringPool(blocks);
///
/// vector<int*> intVec(blocks, 0);
/// vector<string*> strVec(blocks);
///
/// for (int i = 0; i < blocks; ++i)
/// {
/// intVec[i] = new (fastIntPool.get()) int(i);
/// strVec[i] = new (fastStringPool.get()) string(to_string(i));
/// }
///
/// for (int i = 0; i < blocks; ++i)
/// {
/// fastIntPool.release(intVec[i]);
/// fastStringPool.release(strVec[i]);
/// }
///
/// Pool keeps memory blocks in "buckets". A bucket is an array of
/// blocks; it is always allocated with a single `new[]`, and its blocks
/// are initialized at creation time. Whenever the current capacity
/// of the pool is reached, a new bucket is allocated and its blocks
/// initialized for internal use. If the new bucket allocation would
/// exceed allowed maximum size, std::bad_alloc() exception is thrown,
/// with object itself left intact.
///
/// Pool internally keeps track of available blocks through a linked-list
/// and utilizes unused memory blocks for that purpose. This means that,
/// for types smaller than pointer the size of a block will be greater
/// than the size of the type. The implications are following:
///
/// - FastMemoryPool can not be used for arrays of types smaller
/// than pointer
///
/// - if FastMemoryPool is used to store variable-size arrays, it
/// must not have multiple buckets; the way to achieve this is by
/// specifying proper argument values at construction.
///
/// Neither of the above are primarily intended or recommended modes
/// of use. It is recommended to use a FastMemoryPool for creation of
/// many objects of the same type. Furthermore, it is perfectly fine
/// to have arrays or STL containers of pointers to objects created
/// in blocks of memory obtained from the FastMemoryPool.
///
/// Before a block is given to the user, it is removed from the list;
/// when a block is returned to the pool, it is re-inserted in the
/// list. Pool will return held memory to the system at destruction,
/// and will not leak memory after destruction; this means that after
/// pool destruction, any memory that was taken, but not returned to
/// it becomes invalid.
///
/// FastMemoryPool is thread safe; it uses Poco::FastMutex by
/// default, but other mutexes can be specified through the template
/// parameter, if needed. Poco::NullMutex can be specified as template
/// parameter to avoid locking and improve speed in single-threaded
/// scenarios.
{
private:
class Block
/// A block of memory. This class represents a memory
/// block. It has dual use, the primary one being
/// obvious - memory provided to the user of the pool.
/// The secondary use is for internal "housekeeping"
/// purposes.
///
/// It works like this:
///
/// - when initially created, a Block is properly
/// constructed and positioned into the internal
/// linked list of blocks
///
/// - when given to the user, the Block is removed
/// from the internal linked list of blocks
///
/// - when returned back to the pool, the Block
/// is again in-place constructed and inserted
/// as next available block in the linked list
/// of blocks
{
public:
Block()
/// Creates a Block and sets its next pointer.
/// This constructor should ony be used to initialize
/// a block sequence (an array of blocks) in a newly
/// allocated bucket.
///
/// After the construction, the last block's `next`
/// pointer points outside the allocated memory and
/// must be set to zero. This design improves performance,
/// because otherwise the block array would require an
/// initialization loop after the allocation.
{
_memory.next = this + 1;
}
explicit Block(Block* next)
/// Creates a Block and sets its next pointer.
{
_memory.next = next;
}
union
/// Memory block storage.
///
/// Note that this storage is properly aligned
/// for the datatypes it holds. It will not work
/// for arrays of types smaller than pointer size.
/// Furthermore, the pool itself will not work for
/// a variable-size array of any type after it is
/// resized.
{
char buffer[sizeof(T)];
Block* next;
} _memory;
private:
Block(const Block&);
Block& operator = (const Block&);
};
public:
typedef M MutexType;
typedef typename M::ScopedLock ScopedLock;
typedef Block* Bucket;
typedef std::vector<Bucket> BucketVec;
FastMemoryPool(std::size_t blocksPerBucket = POCO_FAST_MEMORY_POOL_PREALLOC, std::size_t bucketPreAlloc = 10, std::size_t maxAlloc = 0):
_blocksPerBucket(blocksPerBucket),
_maxAlloc(maxAlloc),
_available(0)
/// Creates the FastMemoryPool.
///
/// The size of a block is inferred from the type size. Number of blocks
/// per bucket, pre-allocated bucket pointer storage and maximum allowed
/// total size of the pool can be customized by overriding default
/// parameter value:
///
/// - blocksPerBucket specifies how many blocks each bucket contains
/// defaults to POCO_FAST_MEMORY_POOL_PREALLOC
///
/// - bucketPreAlloc specifies how much space for bucket pointers
/// (buckets themselves are not pre-allocated) will
/// be pre-alocated.
///
/// - maxAlloc specifies maximum allowed total pool size in bytes.
{
if (_blocksPerBucket < 2)
throw std::invalid_argument("FastMemoryPool: blocksPerBucket must be >=2");
_buckets.reserve(bucketPreAlloc);
resize();
}
~FastMemoryPool()
/// Destroys the FastMemoryPool and releases all memory.
/// Any memory taken from, but not returned to, the pool
/// becomes invalid.
{
clear();
}
void* get()
/// Returns pointer to the next available
/// memory block. If the pool is exhausted,
/// it will be resized by allocating a new
/// bucket.
{
Block* ret;
{
ScopedLock l(_mutex);
if(_firstBlock == 0) resize();
ret = _firstBlock;
_firstBlock = _firstBlock->_memory.next;
}
--_available;
return ret;
}
template <typename P>
void release(P* ptr)
/// Recycles the released memory by initializing it for
/// internal use and setting it as next available block;
/// previously next block becomes this block's next.
/// Releasing of null pointers is silently ignored.
/// Destructor is called for the returned pointer.
{
if (!ptr) return;
reinterpret_cast<P*>(ptr)->~P();
++_available;
ScopedLock l(_mutex);
_firstBlock = new (ptr) Block(_firstBlock);
}
std::size_t blockSize() const
/// Returns the block size in bytes.
{
return sizeof(Block);
}
std::size_t allocated() const
/// Returns the total amount of memory allocated, in bytes.
{
return _buckets.size() * _blocksPerBucket;
}
std::size_t available() const
/// Returns currently available amount of memory in bytes.
{
return _available;
}
private:
FastMemoryPool(const FastMemoryPool&);
FastMemoryPool& operator = (const FastMemoryPool&);
void resize()
/// Creates new bucket and initializes it for internal use.
/// Sets the previously next block to point to the new bucket's
/// first block and the new bucket's last block becomes the
/// last block.
{
if (_buckets.size() == _buckets.capacity())
{
std::size_t newSize = _buckets.capacity() * 2;
if (_maxAlloc != 0 && newSize > _maxAlloc) throw std::bad_alloc();
_buckets.reserve(newSize);
}
_buckets.push_back(new Block[_blocksPerBucket]);
_firstBlock = _buckets.back();
// terminate last block
_firstBlock[_blocksPerBucket-1]._memory.next = 0;
_available = _available.value() + static_cast<AtomicCounter::ValueType>(_blocksPerBucket);
}
void clear()
{
typename BucketVec::iterator it = _buckets.begin();
typename BucketVec::iterator end = _buckets.end();
for (; it != end; ++it) delete[] *it;
}
typedef Poco::AtomicCounter Counter;
const
std::size_t _blocksPerBucket;
BucketVec _buckets;
Block* _firstBlock;
std::size_t _maxAlloc;
Counter _available;
mutable M _mutex;
};
//
// inlines
//

View File

@ -21,6 +21,17 @@
#include "Poco/Foundation.h"
#include "Poco/Exception.h"
#include "Poco/ScopedLock.h"
#include "Poco/Timestamp.h"
#if __cplusplus >= 201103L
#ifndef POCO_HAVE_STD_ATOMICS
#define POCO_HAVE_STD_ATOMICS
#endif
#endif
#ifdef POCO_HAVE_STD_ATOMICS
#include <atomic>
#endif
#if defined(POCO_OS_FAMILY_WINDOWS)
@ -150,6 +161,58 @@ private:
};
#ifdef POCO_HAVE_STD_ATOMICS
class Foundation_API SpinlockMutex
/// A SpinlockMutex, implemented in terms of std::atomic_flag, as
/// busy-wait mutual exclusion.
///
/// While in some cases (eg. locking small blocks of code)
/// busy-waiting may be an optimal solution, in many scenarios
/// spinlock may not be the right choice - it is up to the user to
/// choose the proper mutex type for their particular case.
///
/// Works with the ScopedLock class.
{
public:
typedef Poco::ScopedLock<SpinlockMutex> ScopedLock;
SpinlockMutex();
/// Creates the SpinlockMutex.
~SpinlockMutex();
/// Destroys the SpinlockMutex.
void lock();
/// Locks the mutex. Blocks if the mutex
/// is held by another thread.
void lock(long milliseconds);
/// Locks the mutex. Blocks up to the given number of milliseconds
/// if the mutex is held by another thread. Throws a TimeoutException
/// if the mutex can not be locked within the given timeout.
bool tryLock();
/// Tries to lock the mutex. Returns immediately, false
/// if the mutex is already held by another thread, true
/// if the mutex was successfully locked.
bool tryLock(long milliseconds);
/// Locks the mutex. Blocks up to the given number of milliseconds
/// if the mutex is held by another thread.
/// Returns true if the mutex was successfully locked.
void unlock();
/// Unlocks the mutex so that it can be acquired by
/// other threads.
private:
std::atomic_flag _flag = ATOMIC_FLAG_INIT;
};
#endif // POCO_HAVE_STD_ATOMICS
class Foundation_API NullMutex
/// A NullMutex is an empty mutex implementation
/// which performs no locking at all. Useful in policy driven design
@ -202,6 +265,11 @@ public:
//
// inlines
//
//
// Mutex
//
inline void Mutex::lock()
{
lockImpl();
@ -233,6 +301,10 @@ inline void Mutex::unlock()
}
//
// FastMutex
//
inline void FastMutex::lock()
{
lockImpl();
@ -264,6 +336,55 @@ inline void FastMutex::unlock()
}
#ifdef POCO_HAVE_STD_ATOMICS
//
// SpinlockMutex
//
inline void SpinlockMutex::lock()
{
while (_flag.test_and_set(std::memory_order_acquire));
}
inline void SpinlockMutex::lock(long milliseconds)
{
Timestamp now;
Timestamp::TimeDiff diff(Timestamp::TimeDiff(milliseconds)*1000);
while (_flag.test_and_set(std::memory_order_acquire))
{
if (now.isElapsed(diff)) throw TimeoutException();
}
}
inline bool SpinlockMutex::tryLock()
{
return !_flag.test_and_set(std::memory_order_acquire);
}
inline bool SpinlockMutex::tryLock(long milliseconds)
{
Timestamp now;
Timestamp::TimeDiff diff(Timestamp::TimeDiff(milliseconds)*1000);
while (_flag.test_and_set(std::memory_order_acquire))
{
if (now.isElapsed(diff)) return false;
}
return true;
}
inline void SpinlockMutex::unlock()
{
_flag.clear(std::memory_order_release);
}
#endif // POCO_HAVE_STD_ATOMICS
} // namespace Poco

View File

@ -36,7 +36,7 @@ public:
enum Options
{
TOK_IGNORE_EMPTY = 1, /// ignore empty tokens
TOK_TRIM = 2 /// remove leading and trailing whitespace from tokens
TOK_TRIM = 2 /// remove leading and trailing whitespace from tokens
};
typedef std::vector<std::string> TokenVec;
@ -83,9 +83,6 @@ public:
/// Returns the number of tokens equal to the specified token.
private:
StringTokenizer(const StringTokenizer&);
StringTokenizer& operator = (const StringTokenizer&);
void trim(std::string& token);
TokenVec _tokens;

View File

@ -0,0 +1,37 @@
//
// AtomicCounter.cpp
//
// Library: Foundation
// Package: Core
// Module: AtomicCounter
//
// Copyright (c) 2009, Applied Informatics Software Engineering GmbH.
// and Contributors.
//
// SPDX-License-Identifier: BSL-1.0
//
#if defined(POCO_HAVE_STD_ATOMICS)
#include "Poco/AtomicCounter.h"
namespace Poco {
AtomicFlag::AtomicFlag()
{
}
AtomicFlag::~AtomicFlag()
{
}
} // namespace Poco
#endif // POCO_HAVE_STD_ATOMICS

View File

@ -51,4 +51,18 @@ FastMutex::~FastMutex()
}
#ifdef POCO_HAVE_STD_ATOMICS
SpinlockMutex::SpinlockMutex()
{
}
SpinlockMutex::~SpinlockMutex()
{
}
#endif // POCO_HAVE_STD_ATOMICS
} // namespace Poco

View File

@ -12,10 +12,15 @@
#include "CppUnit/TestCaller.h"
#include "CppUnit/TestSuite.h"
#include "Poco/MemoryPool.h"
#include "Poco/NumberFormatter.h"
#include "Poco/Stopwatch.h"
#include <vector>
#include <cstring>
#include <iostream>
using Poco::MemoryPool;
using Poco::NumberFormatter;
MemoryPoolTest::MemoryPoolTest(const std::string& name): CppUnit::TestCase(name)
@ -68,6 +73,221 @@ void MemoryPoolTest::testMemoryPool()
}
namespace
{
template<typename T>
bool fastMemPoolTest(int n)
{
bool ret = true;
std::vector<T*> vec(n, (T*)0);
Poco::FastMemoryPool<T> pool(sizeof(T*), vec.size()/2);
for (int i = 0; i < vec.size(); ++i)
{
vec[i] = new (pool.get()) T(i);
}
for (int i = 0; i < vec.size(); ++i)
{
ret = ret && (vec[i] && *vec[i] == i);
}
for (int i = 0; i < vec.size(); ++i)
{
pool.release(vec[i]);
}
return ret;
}
template <typename T>
bool fastMemPoolTestCustom(int n, const T& val)
{
bool ret = true;
std::vector<T*> vec(n, (T*)0);
Poco::FastMemoryPool<T> pool(sizeof(T*), vec.size()/2);
for (int i = 0; i < vec.size(); ++i)
{
vec[i] = new (pool.get()) T(val);
}
for (int i = 0; i < vec.size(); ++i)
{
ret = ret && (vec[i] && *vec[i] == val);
}
for (int i = 0; i < vec.size(); ++i)
{
pool.release(vec[i]);
}
return ret;
}
struct Custom
{
Custom(): i(42), s("abc") {}
virtual ~Custom() {}
bool operator ==(const Custom& other) const
{
return i == other.i && s == other.s;
}
int i;
std::string s;
};
struct CustomChild1: virtual public Custom
{
CustomChild1(): j(0) {}
bool operator ==(const CustomChild1& other) const
{
return i == other.i && s == other.s && j == other.j;
}
int j;
};
struct CustomChild2: virtual public Custom
{
CustomChild2(): k(0) {}
bool operator ==(const CustomChild2& other) const
{
return i == other.i && s == other.s && k == other.k;
}
int k;
};
struct CustomGrandChild: public CustomChild1, CustomChild2
{
CustomGrandChild(): l(0) {}
bool operator ==(const CustomGrandChild& other) const
{
return i == other.i && s == other.s &&
j == other.j && k == other.k && l == other.l;
}
int l;
};
}
void MemoryPoolTest::testFastMemoryPool()
{
int blocks = 10;
Poco::FastMemoryPool<int> fastIntPool(blocks);
Poco::FastMemoryPool<std::string> fastStringPool(blocks);
std::vector<int*> intVec(blocks, (int*)0);
std::vector<std::string*> strVec(blocks);
for (int i = 0; i < blocks; ++i)
{
intVec[i] = new (fastIntPool.get()) int(i);
strVec[i] = new (fastStringPool.get()) std::string(NumberFormatter::format(i));
}
for (int i = 0; i < blocks; ++i)
{
assertTrue (intVec[i] && *intVec[i] == i);
assertTrue (strVec[i] && *strVec[i] == NumberFormatter::format(i));
}
for (int i = 0; i < blocks; ++i)
{
fastIntPool.release(intVec[i]);
fastStringPool.release(strVec[i]);
}
int sz = 5;
assertTrue (fastMemPoolTest<char>(sz));
assertTrue (fastMemPoolTest<signed char>(sz));
assertTrue (fastMemPoolTest<unsigned char>(sz));
assertTrue (fastMemPoolTest<short>(sz));
assertTrue (fastMemPoolTest<unsigned short>(sz));
assertTrue (fastMemPoolTest<int>(sz));
assertTrue (fastMemPoolTest<unsigned int>(sz));
assertTrue (fastMemPoolTest<long>(sz));
assertTrue (fastMemPoolTest<unsigned long>(sz));
std::string str = "123abc";
assertTrue (fastMemPoolTestCustom(sz, str));
Custom c;
assertTrue (fastMemPoolTestCustom(sz, c));
CustomChild1 c1;
assertTrue (fastMemPoolTestCustom(sz, c1));
CustomChild2 c2;
assertTrue (fastMemPoolTestCustom(sz, c2));
CustomGrandChild gc;
assertTrue (fastMemPoolTestCustom(sz, gc));
const int elements = 16;
Poco::FastMemoryPool<char[elements]> fastArrayPool(blocks);
char* pC = reinterpret_cast<char*>(fastArrayPool.get());
const char* pStr = "1234567890abcde";
std::memcpy(pC, pStr, elements);
assert (strlen(pC) == elements - 1);
assert (std::strcmp(pC, pStr) == 0);
fastArrayPool.release(pC);
}
void MemoryPoolTest::memoryPoolBenchmark()
{
Poco::Stopwatch sw;
int reps = 1000000;
std::vector<int*> iVec(reps, (int*)0);
Poco::FastMemoryPool<int> fastPool(reps);
sw.restart();
for (int i = 0; i < reps; ++i)
{
iVec[i] = new (fastPool.get()) int(i);
}
sw.stop();
std::cout << '\n' << reps << "x\n";
std::cout << "get()\t\tFastMemoryPool=" << sw.elapsed() / 1000 << std::endl;
for (int i = 0; i < reps; ++i)
{
assertTrue(*iVec[i] == i);
}
sw.restart();
for (int i = 0; i < reps; ++i)
{
fastPool.release(iVec[i]);
}
sw.stop();
std::cout << "release()\tFastMemoryPool=" << sw.elapsed() / 1000 << std::endl;
MemoryPool pool(sizeof(int*), reps);
sw.start();
for (int i = 0; i < reps; ++i)
{
iVec[i] = new (pool.get()) int(i);
}
sw.stop();
std::cout << "get()\t\tMemoryPool=" << sw.elapsed() / 1000 << std::endl;
for (int i = 0; i < reps; ++i)
{
assertTrue(iVec[i] && *iVec[i] == i);
}
sw.restart();
for (int i = 0; i < reps; ++i)
{
pool.release(iVec[i]);
}
sw.stop();
std::cout << "release()\tMemoryPool=" << sw.elapsed() / 1000 << std::endl;
}
void MemoryPoolTest::setUp()
{
}
@ -83,6 +303,8 @@ CppUnit::Test* MemoryPoolTest::suite()
CppUnit::TestSuite* pSuite = new CppUnit::TestSuite("MemoryPoolTest");
CppUnit_addTest(pSuite, MemoryPoolTest, testMemoryPool);
CppUnit_addTest(pSuite, MemoryPoolTest, testFastMemoryPool);
//CppUnit_addTest(pSuite, MemoryPoolTest, memoryPoolBenchmark);
return pSuite;
}

View File

@ -25,6 +25,8 @@ public:
~MemoryPoolTest();
void testMemoryPool();
void testFastMemoryPool();
void memoryPoolBenchmark();
void setUp();
void tearDown();

View File

@ -32,7 +32,7 @@ objects = \
RemoteSyslogChannel RemoteSyslogListener SMTPChannel \
WebSocket WebSocketImpl \
OAuth10Credentials OAuth20Credentials \
PollSet
PollSet UDPClient UDPServerParams
target = PocoNet
target_version = $(LIBVERSION)

View File

@ -990,6 +990,33 @@
RelativePath=".\src\OAuth20Credentials.cpp"/>
</Filter>
</Filter>
<Filter
Name="UDP">
<Filter
Name="Source Files">
<File
RelativePath=".\src\UDPClient.cpp"/>
<File
RelativePath=".\src\UDPServerParams.cpp"/>
</Filter>
<Filter
Name="Header Files">
<File
RelativePath=".\include\Poco\Net\MultiSocketPoller.h"/>
<File
RelativePath=".\include\Poco\Net\SingleSocketPoller.h"/>
<File
RelativePath=".\include\Poco\Net\UDPClient.h"/>
<File
RelativePath=".\include\Poco\Net\UDPHandler.h"/>
<File
RelativePath=".\include\Poco\Net\UDPServer.h"/>
<File
RelativePath=".\include\Poco\Net\UDPServerParams.h"/>
<File
RelativePath=".\include\Poco\Net\UDPSocketReader.h"/>
</Filter>
</Filter>
<File
RelativePath="..\DLLVersion.rc">
<FileConfiguration

View File

@ -1,264 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="debug_shared|SDK_AM335X_SK_WEC2013_V300">
<Configuration>debug_shared</Configuration>
<Platform>SDK_AM335X_SK_WEC2013_V300</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="debug_static_md|SDK_AM335X_SK_WEC2013_V300">
<Configuration>debug_static_md</Configuration>
<Platform>SDK_AM335X_SK_WEC2013_V300</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="debug_static_mt|SDK_AM335X_SK_WEC2013_V300">
<Configuration>debug_static_mt</Configuration>
<Platform>SDK_AM335X_SK_WEC2013_V300</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="release_shared|SDK_AM335X_SK_WEC2013_V300">
<Configuration>release_shared</Configuration>
<Platform>SDK_AM335X_SK_WEC2013_V300</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="release_static_md|SDK_AM335X_SK_WEC2013_V300">
<Configuration>release_static_md</Configuration>
<Platform>SDK_AM335X_SK_WEC2013_V300</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="release_static_mt|SDK_AM335X_SK_WEC2013_V300">
<Configuration>release_static_mt</Configuration>
<Platform>SDK_AM335X_SK_WEC2013_V300</Platform>
</ProjectConfiguration>
</ItemGroup>
<PropertyGroup Label="Globals">
<ProjectName>Net</ProjectName>
<ProjectGuid>{B057A1FE-09F7-465E-B8B5-E1B659051D76}</ProjectGuid>
<DefaultLanguage>en-US</DefaultLanguage>
<MinimumVisualStudioVersion>11.0</MinimumVisualStudioVersion>
<EnableRedirectPlatform>true</EnableRedirectPlatform>
<RedirectPlatformValue>SDK_AM335X_SK_WEC2013_V300</RedirectPlatformValue>
<PlatformToolset>CE800</PlatformToolset>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props"/>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='release_static_md|SDK_AM335X_SK_WEC2013_V300'" Label="Configuration">
<ConfigurationType>StaticLibrary</ConfigurationType>
<CharacterSet>Unicode</CharacterSet>
<PlatformToolset>CE800</PlatformToolset>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='debug_static_md|SDK_AM335X_SK_WEC2013_V300'" Label="Configuration">
<ConfigurationType>StaticLibrary</ConfigurationType>
<CharacterSet>Unicode</CharacterSet>
<PlatformToolset>CE800</PlatformToolset>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='release_static_mt|SDK_AM335X_SK_WEC2013_V300'" Label="Configuration">
<ConfigurationType>StaticLibrary</ConfigurationType>
<CharacterSet>Unicode</CharacterSet>
<PlatformToolset>CE800</PlatformToolset>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='debug_static_mt|SDK_AM335X_SK_WEC2013_V300'" Label="Configuration">
<ConfigurationType>StaticLibrary</ConfigurationType>
<CharacterSet>Unicode</CharacterSet>
<PlatformToolset>CE800</PlatformToolset>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='release_shared|SDK_AM335X_SK_WEC2013_V300'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<CharacterSet>Unicode</CharacterSet>
<PlatformToolset>CE800</PlatformToolset>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='debug_shared|SDK_AM335X_SK_WEC2013_V300'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<CharacterSet>Unicode</CharacterSet>
<PlatformToolset>CE800</PlatformToolset>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props"/>
<ImportGroup Label="ExtensionSettings"/>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='release_static_md|SDK_AM335X_SK_WEC2013_V300'" Label="PropertySheets">
<Import Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props"/>
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='debug_static_md|SDK_AM335X_SK_WEC2013_V300'" Label="PropertySheets">
<Import Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props"/>
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='release_static_mt|SDK_AM335X_SK_WEC2013_V300'" Label="PropertySheets">
<Import Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props"/>
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='debug_static_mt|SDK_AM335X_SK_WEC2013_V300'" Label="PropertySheets">
<Import Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props"/>
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='release_shared|SDK_AM335X_SK_WEC2013_V300'" Label="PropertySheets">
<Import Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props"/>
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='debug_shared|SDK_AM335X_SK_WEC2013_V300'" Label="PropertySheets">
<Import Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props"/>
</ImportGroup>
<PropertyGroup Label="UserMacros"/>
<PropertyGroup>
<_ProjectFileVersion>11.0.61030.0</_ProjectFileVersion>
<TargetName Condition="'$(Configuration)|$(Platform)'=='debug_shared|SDK_AM335X_SK_WEC2013_V300'">PocoNetd</TargetName>
<TargetName Condition="'$(Configuration)|$(Platform)'=='debug_static_md|SDK_AM335X_SK_WEC2013_V300'">PocoNetmdd</TargetName>
<TargetName Condition="'$(Configuration)|$(Platform)'=='debug_static_mt|SDK_AM335X_SK_WEC2013_V300'">PocoNetmtd</TargetName>
<TargetName Condition="'$(Configuration)|$(Platform)'=='release_shared|SDK_AM335X_SK_WEC2013_V300'">PocoNet</TargetName>
<TargetName Condition="'$(Configuration)|$(Platform)'=='release_static_md|SDK_AM335X_SK_WEC2013_V300'">PocoNetmd</TargetName>
<TargetName Condition="'$(Configuration)|$(Platform)'=='release_static_mt|SDK_AM335X_SK_WEC2013_V300'">PocoNetmt</TargetName>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='debug_shared|SDK_AM335X_SK_WEC2013_V300'">
<OutDir>..\bin\$(Platform)\</OutDir>
<IntDir>obj\Net\$(Platform)\$(Configuration)\</IntDir>
<LinkIncremental>true</LinkIncremental>
<GenerateManifest>true</GenerateManifest>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='release_shared|SDK_AM335X_SK_WEC2013_V300'">
<OutDir>..\bin\$(Platform)\</OutDir>
<IntDir>obj\Net\$(Platform)\$(Configuration)\</IntDir>
<LinkIncremental>false</LinkIncremental>
<GenerateManifest>true</GenerateManifest>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='debug_static_mt|SDK_AM335X_SK_WEC2013_V300'">
<OutDir>..\lib\$(Platform)\</OutDir>
<IntDir>obj\Net\$(Platform)\$(Configuration)\</IntDir>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='release_static_mt|SDK_AM335X_SK_WEC2013_V300'">
<OutDir>..\lib\$(Platform)\</OutDir>
<IntDir>obj\Net\$(Platform)\$(Configuration)\</IntDir>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='debug_static_md|SDK_AM335X_SK_WEC2013_V300'">
<OutDir>..\lib\$(Platform)\</OutDir>
<IntDir>obj\Net\$(Platform)\$(Configuration)\</IntDir>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='release_static_md|SDK_AM335X_SK_WEC2013_V300'">
<OutDir>..\lib\$(Platform)\</OutDir>
<IntDir>obj\Net\$(Platform)\$(Configuration)\</IntDir>
</PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='debug_shared|SDK_AM335X_SK_WEC2013_V300'">
<ClCompile>
<Optimization>Disabled</Optimization>
<AdditionalIncludeDirectories>.\include;..\Foundation\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>_DEBUG;$(ProjectName)_EXPORTS;_CRT_SECURE_NO_DEPRECATE;_CRT_SECURE_NO_WARNINGS;Net_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<StringPooling>true</StringPooling>
<MinimalRebuild>false</MinimalRebuild>
<RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
<BufferSecurityCheck>true</BufferSecurityCheck>
<RuntimeTypeInfo>true</RuntimeTypeInfo>
<WarningLevel>Level3</WarningLevel>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
</ClCompile>
<Link>
<AdditionalDependencies>ws2.lib;iphlpapi.lib;%(AdditionalDependencies)</AdditionalDependencies>
<OutputFile>..\bin\$(Platform)\PocoNetd.dll</OutputFile>
<AdditionalLibraryDirectories>..\lib\$(Platform);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<GenerateDebugInformation>true</GenerateDebugInformation>
<ProgramDatabaseFile>..\bin\$(Platform)\PocoNetd.pdb</ProgramDatabaseFile>
<OptimizeReferences/>
<EnableCOMDATFolding/>
<ImportLibrary>..\lib\$(Platform)\PocoNetd.lib</ImportLibrary>
<SubSystem>WindowsCE</SubSystem>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='release_shared|SDK_AM335X_SK_WEC2013_V300'">
<ClCompile>
<Optimization>MaxSpeed</Optimization>
<IntrinsicFunctions>true</IntrinsicFunctions>
<FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
<AdditionalIncludeDirectories>.\include;..\Foundation\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>NDEBUG;$(ProjectName)_EXPORTS;_CRT_SECURE_NO_DEPRECATE;_CRT_SECURE_NO_WARNINGS;Net_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<StringPooling>true</StringPooling>
<MinimalRebuild>false</MinimalRebuild>
<RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
<BufferSecurityCheck>false</BufferSecurityCheck>
<RuntimeTypeInfo>true</RuntimeTypeInfo>
<WarningLevel>Level3</WarningLevel>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
</ClCompile>
<Link>
<AdditionalDependencies>ws2.lib;iphlpapi.lib;%(AdditionalDependencies)</AdditionalDependencies>
<OutputFile>..\bin\$(Platform)\PocoNet.dll</OutputFile>
<AdditionalLibraryDirectories>..\lib\$(Platform);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<GenerateDebugInformation>false</GenerateDebugInformation>
<ProgramDatabaseFile/>
<OptimizeReferences/>
<EnableCOMDATFolding/>
<ImportLibrary>..\lib\$(Platform)\PocoNet.lib</ImportLibrary>
<SubSystem>WindowsCE</SubSystem>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='debug_static_mt|SDK_AM335X_SK_WEC2013_V300'">
<ClCompile>
<Optimization>Disabled</Optimization>
<AdditionalIncludeDirectories>.\include;..\Foundation\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>_DEBUG;POCO_STATIC;_CRT_SECURE_NO_DEPRECATE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<StringPooling>true</StringPooling>
<MinimalRebuild>false</MinimalRebuild>
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
<BufferSecurityCheck>true</BufferSecurityCheck>
<RuntimeTypeInfo>true</RuntimeTypeInfo>
<PrecompiledHeader/>
<ProgramDataBaseFileName>..\lib\$(Platform)\PocoNetmtd.pdb</ProgramDataBaseFileName>
<WarningLevel>Level3</WarningLevel>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
<CompileAs>Default</CompileAs>
</ClCompile>
<Lib>
<OutputFile>..\lib\$(Platform)\PocoNetmtd.lib</OutputFile>
</Lib>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='release_static_mt|SDK_AM335X_SK_WEC2013_V300'">
<ClCompile>
<Optimization>MaxSpeed</Optimization>
<IntrinsicFunctions>true</IntrinsicFunctions>
<FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
<AdditionalIncludeDirectories>.\include;..\Foundation\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>NDEBUG;POCO_STATIC;_CRT_SECURE_NO_DEPRECATE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<StringPooling>true</StringPooling>
<MinimalRebuild>false</MinimalRebuild>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<BufferSecurityCheck>false</BufferSecurityCheck>
<RuntimeTypeInfo>true</RuntimeTypeInfo>
<PrecompiledHeader/>
<WarningLevel>Level3</WarningLevel>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
<CompileAs>Default</CompileAs>
</ClCompile>
<Lib>
<OutputFile>..\lib\$(Platform)\PocoNetmt.lib</OutputFile>
</Lib>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='debug_static_md|SDK_AM335X_SK_WEC2013_V300'">
<ClCompile>
<Optimization>Disabled</Optimization>
<AdditionalIncludeDirectories>.\include;..\Foundation\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>_DEBUG;POCO_STATIC;_CRT_SECURE_NO_DEPRECATE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<StringPooling>true</StringPooling>
<MinimalRebuild>false</MinimalRebuild>
<RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
<BufferSecurityCheck>true</BufferSecurityCheck>
<RuntimeTypeInfo>true</RuntimeTypeInfo>
<PrecompiledHeader/>
<ProgramDataBaseFileName>..\lib\$(Platform)\PocoNetmdd.pdb</ProgramDataBaseFileName>
<WarningLevel>Level3</WarningLevel>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
<CompileAs>Default</CompileAs>
</ClCompile>
<Lib>
<OutputFile>..\lib\$(Platform)\PocoNetmdd.lib</OutputFile>
</Lib>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='release_static_md|SDK_AM335X_SK_WEC2013_V300'">
<ClCompile>
<Optimization>MaxSpeed</Optimization>
<IntrinsicFunctions>true</IntrinsicFunctions>
<FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
<AdditionalIncludeDirectories>.\include;..\Foundation\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>NDEBUG;POCO_STATIC;_CRT_SECURE_NO_DEPRECATE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<StringPooling>true</StringPooling>
<MinimalRebuild>false</MinimalRebuild>
<RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
<BufferSecurityCheck>false</BufferSecurityCheck>
<RuntimeTypeInfo>true</RuntimeTypeInfo>
<PrecompiledHeader/>
<WarningLevel>Level3</WarningLevel>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
<CompileAs>Default</CompileAs>
</ClCompile>
<Lib>
<OutputFile>..\lib\$(Platform)\PocoNetmd.lib</OutputFile>
</Lib>
</ItemDefinitionGroup>
<ItemGroup>
<ClInclude Include="include\Poco\Net\DNS.h"/>
<ClInclude Include="include\Poco\Net\HostEntry.h"/>
<ClInclude Include="include\Poco\Net\IPAddress.h"/>
@ -365,7 +107,37 @@
<ClInclude Include="include\Poco\Net\WebSocketImpl.h"/>
<ClInclude Include="include\Poco\Net\OAuth10Credentials.h"/>
<ClInclude Include="include\Poco\Net\OAuth20Credentials.h"/>
<ClInclude Include="include\Poco\Net\MultiSocketPoller.h"/>
<ClInclude Include="include\Poco\Net\SingleSocketPoller.h"/>
<ClInclude Include="include\Poco\Net\UDPClient.h"/>
<ClInclude Include="include\Poco\Net\UDPHandler.h"/>
<ClInclude Include="include\Poco\Net\UDPServer.h"/>
<ClInclude Include="include\Poco\Net\UDPServerParams.h"/>
<ClInclude Include="include\Poco\Net\UDPSocketReader.h"/>
</ItemGroup>
<PropertyGroup Label="Globals">
<ProjectName>Net</ProjectName>
<ProjectGuid>{B057A1FE-09F7-465E-B8B5-E1B659051D76}</ProjectGuid>
<DefaultLanguage>en-US</DefaultLanguage>
<MinimumVisualStudioVersion>11.0</MinimumVisualStudioVersion>
<EnableRedirectPlatform>true</EnableRedirectPlatform>
<RedirectPlatformValue>SDK_AM335X_SK_WEC2013_V300</RedirectPlatformValue>
<PlatformToolset>CE800</PlatformToolset>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props"/>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props"/>
<ImportGroup Label="ExtensionSettings"/>
<PropertyGroup Label="UserMacros"/>
<PropertyGroup>
<_ProjectFileVersion>11.0.50727.1</_ProjectFileVersion>
<TargetName Condition="'$(Configuration)|$(Platform)'=='debug_shared|SDK_AM335X_SK_WEC2013_V300'">PocoNetd</TargetName>
<TargetName Condition="'$(Configuration)|$(Platform)'=='debug_static_md|SDK_AM335X_SK_WEC2013_V300'">PocoNetmdd</TargetName>
<TargetName Condition="'$(Configuration)|$(Platform)'=='debug_static_mt|SDK_AM335X_SK_WEC2013_V300'">PocoNetmtd</TargetName>
<TargetName Condition="'$(Configuration)|$(Platform)'=='release_shared|SDK_AM335X_SK_WEC2013_V300'">PocoNet</TargetName>
<TargetName Condition="'$(Configuration)|$(Platform)'=='release_static_md|SDK_AM335X_SK_WEC2013_V300'">PocoNetmd</TargetName>
<TargetName Condition="'$(Configuration)|$(Platform)'=='release_static_mt|SDK_AM335X_SK_WEC2013_V300'">PocoNetmt</TargetName>
</PropertyGroup>
<ItemDefinitionGroup/>
<ItemGroup>
<ClCompile Include="src\DNS.cpp"/>
<ClCompile Include="src\HostEntry.cpp"/>
@ -467,16 +239,11 @@
<ClCompile Include="src\WebSocketImpl.cpp"/>
<ClCompile Include="src\OAuth10Credentials.cpp"/>
<ClCompile Include="src\OAuth20Credentials.cpp"/>
<ClCompile Include="src\UDPClient.cpp"/>
<ClCompile Include="src\UDPServerParams.cpp"/>
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="..\DLLVersion.rc">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='debug_shared|SDK_AM335X_SK_WEC2013_V300'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='debug_static_md|SDK_AM335X_SK_WEC2013_V300'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='debug_static_mt|SDK_AM335X_SK_WEC2013_V300'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='release_shared|SDK_AM335X_SK_WEC2013_V300'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='release_static_md|SDK_AM335X_SK_WEC2013_V300'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='release_static_mt|SDK_AM335X_SK_WEC2013_V300'">true</ExcludedFromBuild>
</ResourceCompile>
<ResourceCompile Include="..\DLLVersion.rc"/>
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets"/>
<ImportGroup Label="ExtensionTargets"/>

View File

@ -2,148 +2,157 @@
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Filter Include="NetCore">
<UniqueIdentifier>{8ee56ced-ae35-4ed7-bfb0-81727f22ca35}</UniqueIdentifier>
<UniqueIdentifier>{6e35768e-9e83-4e1b-aae2-7cf8146c5df5}</UniqueIdentifier>
</Filter>
<Filter Include="NetCore\Header Files">
<UniqueIdentifier>{d3e8398c-89af-41a7-b047-84d7104e3eeb}</UniqueIdentifier>
<UniqueIdentifier>{fdd20b5f-b38e-4d8b-96d5-2319d6dc2f02}</UniqueIdentifier>
</Filter>
<Filter Include="NetCore\Source Files">
<UniqueIdentifier>{e8121c1c-88e1-45a3-9e98-60f86e6e5e80}</UniqueIdentifier>
<UniqueIdentifier>{54e933ff-0d21-4da8-bfcd-631ddff6146e}</UniqueIdentifier>
</Filter>
<Filter Include="Sockets">
<UniqueIdentifier>{b3b830a0-a79a-4dcf-abd5-627d49bceb8f}</UniqueIdentifier>
<UniqueIdentifier>{50a8db04-7788-4e4a-b30a-a46985108b3c}</UniqueIdentifier>
</Filter>
<Filter Include="Sockets\Header Files">
<UniqueIdentifier>{4a7e380c-5e14-4c83-a09c-988f8b1ee91e}</UniqueIdentifier>
<UniqueIdentifier>{4409d30f-f2f7-439e-b7f1-0dbbd9ea389f}</UniqueIdentifier>
</Filter>
<Filter Include="Sockets\Source Files">
<UniqueIdentifier>{649f9df2-1527-406b-92ae-a83b758a226d}</UniqueIdentifier>
<UniqueIdentifier>{8ffd8aca-d89e-42b9-9f1f-bf858d0729bf}</UniqueIdentifier>
</Filter>
<Filter Include="Messages">
<UniqueIdentifier>{f90a1094-b24d-4db2-b557-da245f81292c}</UniqueIdentifier>
<UniqueIdentifier>{0dbbc7a8-91e0-485a-a589-c86a10a587e9}</UniqueIdentifier>
</Filter>
<Filter Include="Messages\Header Files">
<UniqueIdentifier>{fa2d94c7-7060-4004-b2f4-a4d9be16264f}</UniqueIdentifier>
<UniqueIdentifier>{6662bd96-0b1c-4595-a348-1aadc3b09ec2}</UniqueIdentifier>
</Filter>
<Filter Include="Messages\Source Files">
<UniqueIdentifier>{2002ad1d-44a8-4206-8e9c-ad8b83049fb3}</UniqueIdentifier>
<UniqueIdentifier>{4dcb6e80-b062-4792-bb6c-cd6f5b0fb0a4}</UniqueIdentifier>
</Filter>
<Filter Include="HTTP">
<UniqueIdentifier>{4d41a85b-8419-40b6-90da-4d08c8580e77}</UniqueIdentifier>
<UniqueIdentifier>{bc61e3f7-206a-44eb-b521-02f60d4c12b9}</UniqueIdentifier>
</Filter>
<Filter Include="HTTP\Header Files">
<UniqueIdentifier>{5370f636-392a-4ce2-86a0-9f8a46dd3c8e}</UniqueIdentifier>
<UniqueIdentifier>{30fcd6f8-9e38-401b-ae4d-6828ec7773d5}</UniqueIdentifier>
</Filter>
<Filter Include="HTTP\Source Files">
<UniqueIdentifier>{0c040e0b-020c-42db-b74e-6f8e68b691be}</UniqueIdentifier>
<UniqueIdentifier>{e6ca6c60-fc9a-4615-a5a0-d69f4e8f2fc2}</UniqueIdentifier>
</Filter>
<Filter Include="TCPServer">
<UniqueIdentifier>{39acadd7-43fb-40cb-894e-6cbfbca2ef78}</UniqueIdentifier>
<UniqueIdentifier>{7c9ade5f-a564-4742-86c5-d93e68e5ede7}</UniqueIdentifier>
</Filter>
<Filter Include="TCPServer\Header Files">
<UniqueIdentifier>{b5fef4b0-eee2-40ec-94d2-eea9503a7f62}</UniqueIdentifier>
<UniqueIdentifier>{1dc83bcd-6ca8-455a-9ab7-4eca756c2228}</UniqueIdentifier>
</Filter>
<Filter Include="TCPServer\Source Files">
<UniqueIdentifier>{40073a93-8a74-4efa-b29e-7c699b294ffb}</UniqueIdentifier>
<UniqueIdentifier>{2115b4b9-dfb4-445d-850f-2906256362f5}</UniqueIdentifier>
</Filter>
<Filter Include="HTTPServer">
<UniqueIdentifier>{764bd47f-5f31-43a7-9865-b2ce1d918e7c}</UniqueIdentifier>
<UniqueIdentifier>{5dd8e914-726f-4598-846d-4fcc95f497ae}</UniqueIdentifier>
</Filter>
<Filter Include="HTTPServer\Header Files">
<UniqueIdentifier>{0e294983-abfe-46e6-9799-c2c66afbc43d}</UniqueIdentifier>
<UniqueIdentifier>{f461b76f-d793-425c-9e0a-cf11d51f1bd3}</UniqueIdentifier>
</Filter>
<Filter Include="HTTPServer\Source Files">
<UniqueIdentifier>{db93e519-1ce5-4685-94cf-b85c26b161ac}</UniqueIdentifier>
<UniqueIdentifier>{17dc770e-792a-4491-a987-261326f3cc57}</UniqueIdentifier>
</Filter>
<Filter Include="HTTPClient">
<UniqueIdentifier>{7f53439a-37ba-4048-80c1-8b4225b31008}</UniqueIdentifier>
<UniqueIdentifier>{737a15d9-d24d-4768-9959-91ddf97336d0}</UniqueIdentifier>
</Filter>
<Filter Include="HTTPClient\Header Files">
<UniqueIdentifier>{d78e3692-c47c-474c-8b1c-97c6247782d5}</UniqueIdentifier>
<UniqueIdentifier>{d9d8c54d-1122-4d9e-ad42-aa50f3342a08}</UniqueIdentifier>
</Filter>
<Filter Include="HTTPClient\Source Files">
<UniqueIdentifier>{0041736c-28d5-4a45-9340-7dc95953e37e}</UniqueIdentifier>
<UniqueIdentifier>{d71109d0-cf28-4738-ae78-73f50cf6f183}</UniqueIdentifier>
</Filter>
<Filter Include="HTML">
<UniqueIdentifier>{01a5a86a-8e2d-43eb-af5e-0717379e2383}</UniqueIdentifier>
<UniqueIdentifier>{2b331b5f-7ee0-4671-96a7-d8dc65096c22}</UniqueIdentifier>
</Filter>
<Filter Include="HTML\Header Files">
<UniqueIdentifier>{9f3212ff-39bf-4e54-b344-2ea1024984af}</UniqueIdentifier>
<UniqueIdentifier>{4c9abf90-f611-40f9-a79f-c465bb95a5de}</UniqueIdentifier>
</Filter>
<Filter Include="HTML\Source Files">
<UniqueIdentifier>{7e53936f-b65a-42d2-b24c-d9a8a267aece}</UniqueIdentifier>
<UniqueIdentifier>{64168a9a-9db7-4c80-a382-74a1b747efb7}</UniqueIdentifier>
</Filter>
<Filter Include="FTPClient">
<UniqueIdentifier>{a572aafe-1463-4f92-ad52-19154ba14020}</UniqueIdentifier>
<UniqueIdentifier>{2e6aa01d-73ba-44e2-9a51-294cf16c7ad8}</UniqueIdentifier>
</Filter>
<Filter Include="FTPClient\Header Files">
<UniqueIdentifier>{90e9c9b7-e61c-49af-b2e5-7413c2d3f034}</UniqueIdentifier>
<UniqueIdentifier>{6a6f1729-eb2a-4d63-8ad2-9d67a92abb74}</UniqueIdentifier>
</Filter>
<Filter Include="FTPClient\Source Files">
<UniqueIdentifier>{19cd86f1-c474-4e39-abf8-1aaf821028be}</UniqueIdentifier>
<UniqueIdentifier>{dd78462f-9f2b-45b2-b45d-4bec31a7437a}</UniqueIdentifier>
</Filter>
<Filter Include="Reactor">
<UniqueIdentifier>{23160e3c-8de4-4e44-a6c2-0a57459249d7}</UniqueIdentifier>
<UniqueIdentifier>{49379859-7fc3-4dee-8984-1e8b3bbdba57}</UniqueIdentifier>
</Filter>
<Filter Include="Reactor\Header Files">
<UniqueIdentifier>{afa05c4d-1275-4bea-be5b-9214aabf771b}</UniqueIdentifier>
<UniqueIdentifier>{7c0f1f9b-5129-4679-b484-196bd5b5c4dc}</UniqueIdentifier>
</Filter>
<Filter Include="Reactor\Source Files">
<UniqueIdentifier>{342ac598-b712-4db4-82b5-19d93778633d}</UniqueIdentifier>
<UniqueIdentifier>{884d5cb0-f7e6-4fdf-9f7a-8ffdc2337a24}</UniqueIdentifier>
</Filter>
<Filter Include="Mail">
<UniqueIdentifier>{4158634b-967e-4b6f-a00b-ad078bd13ef9}</UniqueIdentifier>
<UniqueIdentifier>{24357345-c638-4dde-af7f-7d4d2689c886}</UniqueIdentifier>
</Filter>
<Filter Include="Mail\Header Files">
<UniqueIdentifier>{58a5bfcc-60c3-4603-9d69-f0a124f50813}</UniqueIdentifier>
<UniqueIdentifier>{003d0484-e256-4c32-bffa-23971ef9a6a2}</UniqueIdentifier>
</Filter>
<Filter Include="Mail\Source Files">
<UniqueIdentifier>{dece29ca-057c-4353-aae4-28aa6e3eff61}</UniqueIdentifier>
<UniqueIdentifier>{2d712539-6ad7-4c02-8328-0a74e5d696a4}</UniqueIdentifier>
</Filter>
<Filter Include="ICMP">
<UniqueIdentifier>{44234863-8ac2-4a7f-969a-f67f286190b6}</UniqueIdentifier>
<UniqueIdentifier>{73a455a9-084c-49ea-a550-f40c73fb8ba4}</UniqueIdentifier>
</Filter>
<Filter Include="ICMP\Header Files">
<UniqueIdentifier>{365558e6-239e-44ba-9fb4-696d74aedc38}</UniqueIdentifier>
<UniqueIdentifier>{2ca14da0-809c-4786-b4fd-7ccc0f624a3a}</UniqueIdentifier>
</Filter>
<Filter Include="ICMP\Source Files">
<UniqueIdentifier>{8c7e403c-bde5-45b2-bef2-7ac1568d722d}</UniqueIdentifier>
<UniqueIdentifier>{c84f10cb-d40f-4caa-89f5-d0d6ef5302d1}</UniqueIdentifier>
</Filter>
<Filter Include="NTP">
<UniqueIdentifier>{bcd5e8ab-eae0-48ce-b21c-361c65e8b9eb}</UniqueIdentifier>
<UniqueIdentifier>{ca0a5034-e6d1-48ce-ac49-05c4f6f442c6}</UniqueIdentifier>
</Filter>
<Filter Include="NTP\Header Files">
<UniqueIdentifier>{cef33ffd-1101-4abe-a1e2-b7867778e916}</UniqueIdentifier>
<UniqueIdentifier>{f11f8d96-8104-467d-9739-21b64ca6e5fd}</UniqueIdentifier>
</Filter>
<Filter Include="NTP\Source Files">
<UniqueIdentifier>{be07a1f8-516f-4591-acc8-6bdd59e41031}</UniqueIdentifier>
<UniqueIdentifier>{ede4fe25-2bbc-4677-ab96-3372c06fede0}</UniqueIdentifier>
</Filter>
<Filter Include="Logging">
<UniqueIdentifier>{6420f9ab-2ee6-4e4a-8c51-e20b055ddd5a}</UniqueIdentifier>
<UniqueIdentifier>{e0239281-836e-46d6-9bfe-fcec8230f54c}</UniqueIdentifier>
</Filter>
<Filter Include="Logging\Header Files">
<UniqueIdentifier>{5b3465bf-3dea-4120-a07a-9ce4c4603bf4}</UniqueIdentifier>
<UniqueIdentifier>{d0f3b2a4-e15e-4d0c-a5ef-b5898edfa616}</UniqueIdentifier>
</Filter>
<Filter Include="Logging\Source Files">
<UniqueIdentifier>{d63a7c69-e22f-4846-b55c-6eec5151c5bc}</UniqueIdentifier>
<UniqueIdentifier>{73b7bd90-d068-4359-b73d-ca8fa679a678}</UniqueIdentifier>
</Filter>
<Filter Include="WebSocket">
<UniqueIdentifier>{fe9b1bde-92da-4ee6-8ccf-59a6f714d4dd}</UniqueIdentifier>
<UniqueIdentifier>{2861b677-cb4d-4426-8386-4691125bd7f4}</UniqueIdentifier>
</Filter>
<Filter Include="WebSocket\Header Files">
<UniqueIdentifier>{4e69bbbd-e362-43d6-b0fd-34b6da9ae919}</UniqueIdentifier>
<UniqueIdentifier>{3d64261c-34e6-41be-acad-8d7ad3943b77}</UniqueIdentifier>
</Filter>
<Filter Include="WebSocket\Source Files">
<UniqueIdentifier>{29e1911f-be57-41cd-9ff4-b611da1e1f68}</UniqueIdentifier>
<UniqueIdentifier>{2676a94b-2bd8-4c43-8b0b-cb7c1f47e196}</UniqueIdentifier>
</Filter>
<Filter Include="OAuth">
<UniqueIdentifier>{7263f4a3-ccbf-4a21-9c14-a2f9aea4d5cf}</UniqueIdentifier>
<UniqueIdentifier>{b0ddf043-be30-49c9-ab59-c82382028662}</UniqueIdentifier>
</Filter>
<Filter Include="OAuth\Header Files">
<UniqueIdentifier>{084e0512-1072-419f-ac36-df807e4b3f8b}</UniqueIdentifier>
<UniqueIdentifier>{7beec4dd-819e-40e6-bea4-704042f46e9b}</UniqueIdentifier>
</Filter>
<Filter Include="OAuth\Source Files">
<UniqueIdentifier>{99c89e81-5611-43a5-828b-70dc60b0e733}</UniqueIdentifier>
<UniqueIdentifier>{c537ca3e-c040-44a8-8345-4fd620b3cb70}</UniqueIdentifier>
</Filter>
<Filter Include="UDP">
<UniqueIdentifier>{c4c9c248-7a1a-463e-9b8f-32e2da8bd150}</UniqueIdentifier>
</Filter>
<Filter Include="UDP\Source Files">
<UniqueIdentifier>{e2774308-5461-489d-ad9d-b43fbacfdefe}</UniqueIdentifier>
</Filter>
<Filter Include="UDP\Header Files">
<UniqueIdentifier>{1945e2e6-bf73-45ec-a283-11126f1fd9f5}</UniqueIdentifier>
</Filter>
</ItemGroup>
<ItemGroup>
@ -465,6 +474,27 @@
<ClInclude Include="include\Poco\Net\OAuth20Credentials.h">
<Filter>OAuth\Header Files</Filter>
</ClInclude>
<ClInclude Include="include\Poco\Net\MultiSocketPoller.h">
<Filter>UDP\Header Files</Filter>
</ClInclude>
<ClInclude Include="include\Poco\Net\SingleSocketPoller.h">
<Filter>UDP\Header Files</Filter>
</ClInclude>
<ClInclude Include="include\Poco\Net\UDPClient.h">
<Filter>UDP\Header Files</Filter>
</ClInclude>
<ClInclude Include="include\Poco\Net\UDPHandler.h">
<Filter>UDP\Header Files</Filter>
</ClInclude>
<ClInclude Include="include\Poco\Net\UDPServer.h">
<Filter>UDP\Header Files</Filter>
</ClInclude>
<ClInclude Include="include\Poco\Net\UDPServerParams.h">
<Filter>UDP\Header Files</Filter>
</ClInclude>
<ClInclude Include="include\Poco\Net\UDPSocketReader.h">
<Filter>UDP\Header Files</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<ClCompile Include="src\DNS.cpp">
@ -767,6 +797,12 @@
<ClCompile Include="src\OAuth20Credentials.cpp">
<Filter>OAuth\Source Files</Filter>
</ClCompile>
<ClCompile Include="src\UDPClient.cpp">
<Filter>UDP\Source Files</Filter>
</ClCompile>
<ClCompile Include="src\UDPServerParams.cpp">
<Filter>UDP\Source Files</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="..\DLLVersion.rc" />

View File

@ -1,264 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="debug_shared|SDK_AM335X_SK_WEC2013_V310">
<Configuration>debug_shared</Configuration>
<Platform>SDK_AM335X_SK_WEC2013_V310</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="debug_static_md|SDK_AM335X_SK_WEC2013_V310">
<Configuration>debug_static_md</Configuration>
<Platform>SDK_AM335X_SK_WEC2013_V310</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="debug_static_mt|SDK_AM335X_SK_WEC2013_V310">
<Configuration>debug_static_mt</Configuration>
<Platform>SDK_AM335X_SK_WEC2013_V310</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="release_shared|SDK_AM335X_SK_WEC2013_V310">
<Configuration>release_shared</Configuration>
<Platform>SDK_AM335X_SK_WEC2013_V310</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="release_static_md|SDK_AM335X_SK_WEC2013_V310">
<Configuration>release_static_md</Configuration>
<Platform>SDK_AM335X_SK_WEC2013_V310</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="release_static_mt|SDK_AM335X_SK_WEC2013_V310">
<Configuration>release_static_mt</Configuration>
<Platform>SDK_AM335X_SK_WEC2013_V310</Platform>
</ProjectConfiguration>
</ItemGroup>
<PropertyGroup Label="Globals">
<ProjectName>Net</ProjectName>
<ProjectGuid>{B057A1FE-09F7-465E-B8B5-E1B659051D76}</ProjectGuid>
<DefaultLanguage>en-US</DefaultLanguage>
<MinimumVisualStudioVersion>11.0</MinimumVisualStudioVersion>
<EnableRedirectPlatform>true</EnableRedirectPlatform>
<RedirectPlatformValue>SDK_AM335X_SK_WEC2013_V310</RedirectPlatformValue>
<PlatformToolset>CE800</PlatformToolset>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props"/>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='release_static_md|SDK_AM335X_SK_WEC2013_V310'" Label="Configuration">
<ConfigurationType>StaticLibrary</ConfigurationType>
<CharacterSet>Unicode</CharacterSet>
<PlatformToolset>CE800</PlatformToolset>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='debug_static_md|SDK_AM335X_SK_WEC2013_V310'" Label="Configuration">
<ConfigurationType>StaticLibrary</ConfigurationType>
<CharacterSet>Unicode</CharacterSet>
<PlatformToolset>CE800</PlatformToolset>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='release_static_mt|SDK_AM335X_SK_WEC2013_V310'" Label="Configuration">
<ConfigurationType>StaticLibrary</ConfigurationType>
<CharacterSet>Unicode</CharacterSet>
<PlatformToolset>CE800</PlatformToolset>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='debug_static_mt|SDK_AM335X_SK_WEC2013_V310'" Label="Configuration">
<ConfigurationType>StaticLibrary</ConfigurationType>
<CharacterSet>Unicode</CharacterSet>
<PlatformToolset>CE800</PlatformToolset>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='release_shared|SDK_AM335X_SK_WEC2013_V310'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<CharacterSet>Unicode</CharacterSet>
<PlatformToolset>CE800</PlatformToolset>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='debug_shared|SDK_AM335X_SK_WEC2013_V310'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<CharacterSet>Unicode</CharacterSet>
<PlatformToolset>CE800</PlatformToolset>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props"/>
<ImportGroup Label="ExtensionSettings"/>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='release_static_md|SDK_AM335X_SK_WEC2013_V310'" Label="PropertySheets">
<Import Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props"/>
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='debug_static_md|SDK_AM335X_SK_WEC2013_V310'" Label="PropertySheets">
<Import Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props"/>
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='release_static_mt|SDK_AM335X_SK_WEC2013_V310'" Label="PropertySheets">
<Import Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props"/>
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='debug_static_mt|SDK_AM335X_SK_WEC2013_V310'" Label="PropertySheets">
<Import Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props"/>
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='release_shared|SDK_AM335X_SK_WEC2013_V310'" Label="PropertySheets">
<Import Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props"/>
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='debug_shared|SDK_AM335X_SK_WEC2013_V310'" Label="PropertySheets">
<Import Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props"/>
</ImportGroup>
<PropertyGroup Label="UserMacros"/>
<PropertyGroup>
<_ProjectFileVersion>12.0.30501.0</_ProjectFileVersion>
<TargetName Condition="'$(Configuration)|$(Platform)'=='debug_shared|SDK_AM335X_SK_WEC2013_V310'">PocoNetd</TargetName>
<TargetName Condition="'$(Configuration)|$(Platform)'=='debug_static_md|SDK_AM335X_SK_WEC2013_V310'">PocoNetmdd</TargetName>
<TargetName Condition="'$(Configuration)|$(Platform)'=='debug_static_mt|SDK_AM335X_SK_WEC2013_V310'">PocoNetmtd</TargetName>
<TargetName Condition="'$(Configuration)|$(Platform)'=='release_shared|SDK_AM335X_SK_WEC2013_V310'">PocoNet</TargetName>
<TargetName Condition="'$(Configuration)|$(Platform)'=='release_static_md|SDK_AM335X_SK_WEC2013_V310'">PocoNetmd</TargetName>
<TargetName Condition="'$(Configuration)|$(Platform)'=='release_static_mt|SDK_AM335X_SK_WEC2013_V310'">PocoNetmt</TargetName>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='debug_shared|SDK_AM335X_SK_WEC2013_V310'">
<OutDir>..\bin\$(Platform)\</OutDir>
<IntDir>obj\Net\$(Platform)\$(Configuration)\</IntDir>
<LinkIncremental>true</LinkIncremental>
<GenerateManifest>true</GenerateManifest>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='release_shared|SDK_AM335X_SK_WEC2013_V310'">
<OutDir>..\bin\$(Platform)\</OutDir>
<IntDir>obj\Net\$(Platform)\$(Configuration)\</IntDir>
<LinkIncremental>false</LinkIncremental>
<GenerateManifest>true</GenerateManifest>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='debug_static_mt|SDK_AM335X_SK_WEC2013_V310'">
<OutDir>..\lib\$(Platform)\</OutDir>
<IntDir>obj\Net\$(Platform)\$(Configuration)\</IntDir>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='release_static_mt|SDK_AM335X_SK_WEC2013_V310'">
<OutDir>..\lib\$(Platform)\</OutDir>
<IntDir>obj\Net\$(Platform)\$(Configuration)\</IntDir>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='debug_static_md|SDK_AM335X_SK_WEC2013_V310'">
<OutDir>..\lib\$(Platform)\</OutDir>
<IntDir>obj\Net\$(Platform)\$(Configuration)\</IntDir>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='release_static_md|SDK_AM335X_SK_WEC2013_V310'">
<OutDir>..\lib\$(Platform)\</OutDir>
<IntDir>obj\Net\$(Platform)\$(Configuration)\</IntDir>
</PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='debug_shared|SDK_AM335X_SK_WEC2013_V310'">
<ClCompile>
<Optimization>Disabled</Optimization>
<AdditionalIncludeDirectories>.\include;..\Foundation\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>_DEBUG;$(ProjectName)_EXPORTS;_CRT_SECURE_NO_DEPRECATE;_CRT_SECURE_NO_WARNINGS;Net_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<StringPooling>true</StringPooling>
<MinimalRebuild>false</MinimalRebuild>
<RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
<BufferSecurityCheck>true</BufferSecurityCheck>
<RuntimeTypeInfo>true</RuntimeTypeInfo>
<WarningLevel>Level3</WarningLevel>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
</ClCompile>
<Link>
<AdditionalDependencies>ws2.lib;iphlpapi.lib;%(AdditionalDependencies)</AdditionalDependencies>
<OutputFile>..\bin\$(Platform)\PocoNetd.dll</OutputFile>
<AdditionalLibraryDirectories>..\lib\$(Platform);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<GenerateDebugInformation>true</GenerateDebugInformation>
<ProgramDatabaseFile>..\bin\$(Platform)\PocoNetd.pdb</ProgramDatabaseFile>
<OptimizeReferences/>
<EnableCOMDATFolding/>
<ImportLibrary>..\lib\$(Platform)\PocoNetd.lib</ImportLibrary>
<SubSystem>WindowsCE</SubSystem>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='release_shared|SDK_AM335X_SK_WEC2013_V310'">
<ClCompile>
<Optimization>MaxSpeed</Optimization>
<IntrinsicFunctions>true</IntrinsicFunctions>
<FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
<AdditionalIncludeDirectories>.\include;..\Foundation\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>NDEBUG;$(ProjectName)_EXPORTS;_CRT_SECURE_NO_DEPRECATE;_CRT_SECURE_NO_WARNINGS;Net_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<StringPooling>true</StringPooling>
<MinimalRebuild>false</MinimalRebuild>
<RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
<BufferSecurityCheck>false</BufferSecurityCheck>
<RuntimeTypeInfo>true</RuntimeTypeInfo>
<WarningLevel>Level3</WarningLevel>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
</ClCompile>
<Link>
<AdditionalDependencies>ws2.lib;iphlpapi.lib;%(AdditionalDependencies)</AdditionalDependencies>
<OutputFile>..\bin\$(Platform)\PocoNet.dll</OutputFile>
<AdditionalLibraryDirectories>..\lib\$(Platform);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<GenerateDebugInformation>false</GenerateDebugInformation>
<ProgramDatabaseFile/>
<OptimizeReferences/>
<EnableCOMDATFolding/>
<ImportLibrary>..\lib\$(Platform)\PocoNet.lib</ImportLibrary>
<SubSystem>WindowsCE</SubSystem>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='debug_static_mt|SDK_AM335X_SK_WEC2013_V310'">
<ClCompile>
<Optimization>Disabled</Optimization>
<AdditionalIncludeDirectories>.\include;..\Foundation\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>_DEBUG;POCO_STATIC;_CRT_SECURE_NO_DEPRECATE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<StringPooling>true</StringPooling>
<MinimalRebuild>false</MinimalRebuild>
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
<BufferSecurityCheck>true</BufferSecurityCheck>
<RuntimeTypeInfo>true</RuntimeTypeInfo>
<PrecompiledHeader/>
<ProgramDataBaseFileName>..\lib\$(Platform)\PocoNetmtd.pdb</ProgramDataBaseFileName>
<WarningLevel>Level3</WarningLevel>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
<CompileAs>Default</CompileAs>
</ClCompile>
<Lib>
<OutputFile>..\lib\$(Platform)\PocoNetmtd.lib</OutputFile>
</Lib>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='release_static_mt|SDK_AM335X_SK_WEC2013_V310'">
<ClCompile>
<Optimization>MaxSpeed</Optimization>
<IntrinsicFunctions>true</IntrinsicFunctions>
<FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
<AdditionalIncludeDirectories>.\include;..\Foundation\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>NDEBUG;POCO_STATIC;_CRT_SECURE_NO_DEPRECATE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<StringPooling>true</StringPooling>
<MinimalRebuild>false</MinimalRebuild>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<BufferSecurityCheck>false</BufferSecurityCheck>
<RuntimeTypeInfo>true</RuntimeTypeInfo>
<PrecompiledHeader/>
<WarningLevel>Level3</WarningLevel>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
<CompileAs>Default</CompileAs>
</ClCompile>
<Lib>
<OutputFile>..\lib\$(Platform)\PocoNetmt.lib</OutputFile>
</Lib>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='debug_static_md|SDK_AM335X_SK_WEC2013_V310'">
<ClCompile>
<Optimization>Disabled</Optimization>
<AdditionalIncludeDirectories>.\include;..\Foundation\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>_DEBUG;POCO_STATIC;_CRT_SECURE_NO_DEPRECATE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<StringPooling>true</StringPooling>
<MinimalRebuild>false</MinimalRebuild>
<RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
<BufferSecurityCheck>true</BufferSecurityCheck>
<RuntimeTypeInfo>true</RuntimeTypeInfo>
<PrecompiledHeader/>
<ProgramDataBaseFileName>..\lib\$(Platform)\PocoNetmdd.pdb</ProgramDataBaseFileName>
<WarningLevel>Level3</WarningLevel>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
<CompileAs>Default</CompileAs>
</ClCompile>
<Lib>
<OutputFile>..\lib\$(Platform)\PocoNetmdd.lib</OutputFile>
</Lib>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='release_static_md|SDK_AM335X_SK_WEC2013_V310'">
<ClCompile>
<Optimization>MaxSpeed</Optimization>
<IntrinsicFunctions>true</IntrinsicFunctions>
<FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
<AdditionalIncludeDirectories>.\include;..\Foundation\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>NDEBUG;POCO_STATIC;_CRT_SECURE_NO_DEPRECATE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<StringPooling>true</StringPooling>
<MinimalRebuild>false</MinimalRebuild>
<RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
<BufferSecurityCheck>false</BufferSecurityCheck>
<RuntimeTypeInfo>true</RuntimeTypeInfo>
<PrecompiledHeader/>
<WarningLevel>Level3</WarningLevel>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
<CompileAs>Default</CompileAs>
</ClCompile>
<Lib>
<OutputFile>..\lib\$(Platform)\PocoNetmd.lib</OutputFile>
</Lib>
</ItemDefinitionGroup>
<ItemGroup>
<ClInclude Include="include\Poco\Net\AbstractHTTPRequestHandler.h"/>
<ClInclude Include="include\Poco\Net\DatagramSocket.h"/>
<ClInclude Include="include\Poco\Net\DatagramSocketImpl.h"/>
@ -317,6 +59,7 @@
<ClInclude Include="include\Poco\Net\MulticastSocket.h"/>
<ClInclude Include="include\Poco\Net\MultipartReader.h"/>
<ClInclude Include="include\Poco\Net\MultipartWriter.h"/>
<ClInclude Include="include\Poco\Net\MultiSocketPoller.h"/>
<ClInclude Include="include\Poco\Net\NameValueCollection.h"/>
<ClInclude Include="include\Poco\Net\Net.h"/>
<ClInclude Include="include\Poco\Net\NetException.h"/>
@ -342,6 +85,7 @@
<ClInclude Include="include\Poco\Net\RemoteSyslogListener.h"/>
<ClInclude Include="include\Poco\Net\ServerSocket.h"/>
<ClInclude Include="include\Poco\Net\ServerSocketImpl.h"/>
<ClInclude Include="include\Poco\Net\SingleSocketPoller.h"/>
<ClInclude Include="include\Poco\Net\SMTPChannel.h"/>
<ClInclude Include="include\Poco\Net\SMTPClientSession.h"/>
<ClInclude Include="include\Poco\Net\Socket.h"/>
@ -363,9 +107,37 @@
<ClInclude Include="include\Poco\Net\TCPServerConnectionFactory.h"/>
<ClInclude Include="include\Poco\Net\TCPServerDispatcher.h"/>
<ClInclude Include="include\Poco\Net\TCPServerParams.h"/>
<ClInclude Include="include\Poco\Net\UDPClient.h"/>
<ClInclude Include="include\Poco\Net\UDPHandler.h"/>
<ClInclude Include="include\Poco\Net\UDPServer.h"/>
<ClInclude Include="include\Poco\Net\UDPServerParams.h"/>
<ClInclude Include="include\Poco\Net\UDPSocketReader.h"/>
<ClInclude Include="include\Poco\Net\WebSocket.h"/>
<ClInclude Include="include\Poco\Net\WebSocketImpl.h"/>
</ItemGroup>
<PropertyGroup Label="Globals">
<ProjectName>Net</ProjectName>
<ProjectGuid>{B057A1FE-09F7-465E-B8B5-E1B659051D76}</ProjectGuid>
<DefaultLanguage>en-US</DefaultLanguage>
<MinimumVisualStudioVersion>11.0</MinimumVisualStudioVersion>
<EnableRedirectPlatform>true</EnableRedirectPlatform>
<RedirectPlatformValue>SDK_AM335X_SK_WEC2013_V310</RedirectPlatformValue>
<PlatformToolset>CE800</PlatformToolset>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props"/>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props"/>
<ImportGroup Label="ExtensionSettings"/>
<PropertyGroup Label="UserMacros"/>
<PropertyGroup>
<_ProjectFileVersion>12.0.30501.0</_ProjectFileVersion>
<TargetName Condition="'$(Configuration)|$(Platform)'=='debug_shared|SDK_AM335X_SK_WEC2013_V310'">PocoNetd</TargetName>
<TargetName Condition="'$(Configuration)|$(Platform)'=='debug_static_md|SDK_AM335X_SK_WEC2013_V310'">PocoNetmdd</TargetName>
<TargetName Condition="'$(Configuration)|$(Platform)'=='debug_static_mt|SDK_AM335X_SK_WEC2013_V310'">PocoNetmtd</TargetName>
<TargetName Condition="'$(Configuration)|$(Platform)'=='release_shared|SDK_AM335X_SK_WEC2013_V310'">PocoNet</TargetName>
<TargetName Condition="'$(Configuration)|$(Platform)'=='release_static_md|SDK_AM335X_SK_WEC2013_V310'">PocoNetmd</TargetName>
<TargetName Condition="'$(Configuration)|$(Platform)'=='release_static_mt|SDK_AM335X_SK_WEC2013_V310'">PocoNetmt</TargetName>
</PropertyGroup>
<ItemDefinitionGroup/>
<ItemGroup>
<ClCompile Include="src\AbstractHTTPRequestHandler.cpp"/>
<ClCompile Include="src\DatagramSocket.cpp"/>
@ -465,18 +237,13 @@
<ClCompile Include="src\TCPServerConnectionFactory.cpp"/>
<ClCompile Include="src\TCPServerDispatcher.cpp"/>
<ClCompile Include="src\TCPServerParams.cpp"/>
<ClCompile Include="src\UDPClient.cpp"/>
<ClCompile Include="src\UDPServerParams.cpp"/>
<ClCompile Include="src\WebSocket.cpp"/>
<ClCompile Include="src\WebSocketImpl.cpp"/>
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="..\DLLVersion.rc">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='debug_shared|SDK_AM335X_SK_WEC2013_V310'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='debug_static_md|SDK_AM335X_SK_WEC2013_V310'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='debug_static_mt|SDK_AM335X_SK_WEC2013_V310'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='release_shared|SDK_AM335X_SK_WEC2013_V310'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='release_static_md|SDK_AM335X_SK_WEC2013_V310'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='release_static_mt|SDK_AM335X_SK_WEC2013_V310'">true</ExcludedFromBuild>
</ResourceCompile>
<ResourceCompile Include="..\DLLVersion.rc"/>
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets"/>
<ImportGroup Label="ExtensionTargets"/>

View File

@ -2,148 +2,157 @@
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Filter Include="NetCore">
<UniqueIdentifier>{f3e1db68-e5b7-4724-94c5-e1c9560ce937}</UniqueIdentifier>
<UniqueIdentifier>{3d4963b6-d7df-4710-97f8-9d5a675f6095}</UniqueIdentifier>
</Filter>
<Filter Include="NetCore\Header Files">
<UniqueIdentifier>{a207e531-8a37-4149-8d65-2d3c99528e89}</UniqueIdentifier>
<UniqueIdentifier>{bb1fddd8-7855-41ec-b480-5617f359a0b6}</UniqueIdentifier>
</Filter>
<Filter Include="NetCore\Source Files">
<UniqueIdentifier>{c7f09d94-e478-4810-8c6c-443bc6730bcb}</UniqueIdentifier>
<UniqueIdentifier>{299bdd44-1974-4b2c-88b6-98ef3f196745}</UniqueIdentifier>
</Filter>
<Filter Include="Sockets">
<UniqueIdentifier>{b2219a36-f5c1-41b2-aac7-16145caef2b2}</UniqueIdentifier>
<UniqueIdentifier>{2fc8da2a-27a8-4e58-8e7a-9107d5ffa233}</UniqueIdentifier>
</Filter>
<Filter Include="Sockets\Header Files">
<UniqueIdentifier>{1d33cc80-eefc-4711-a028-e93ce942b809}</UniqueIdentifier>
<UniqueIdentifier>{356b63fd-d879-4b8c-a426-b957d1a6a5e7}</UniqueIdentifier>
</Filter>
<Filter Include="Sockets\Source Files">
<UniqueIdentifier>{c540872a-4553-4275-9e3a-0982c9fb271a}</UniqueIdentifier>
<UniqueIdentifier>{e4d5f199-73aa-497d-9dae-422407cf45b5}</UniqueIdentifier>
</Filter>
<Filter Include="Messages">
<UniqueIdentifier>{9995a74c-955c-4c64-853d-6472040f759e}</UniqueIdentifier>
<UniqueIdentifier>{19da3407-2185-473b-9fae-d7b46f3b63b4}</UniqueIdentifier>
</Filter>
<Filter Include="Messages\Header Files">
<UniqueIdentifier>{bcdde3fe-8054-45fa-9307-5f71afeb1122}</UniqueIdentifier>
<UniqueIdentifier>{7969b7e3-61fc-4aa9-8fb5-e1f49ec688ec}</UniqueIdentifier>
</Filter>
<Filter Include="Messages\Source Files">
<UniqueIdentifier>{a9479670-7429-410d-a4b9-56ddfe1914a7}</UniqueIdentifier>
<UniqueIdentifier>{95104171-3b83-431d-8b71-b7e09ed97848}</UniqueIdentifier>
</Filter>
<Filter Include="HTTP">
<UniqueIdentifier>{85668933-3986-40b5-8e84-05842c7a240e}</UniqueIdentifier>
<UniqueIdentifier>{057ecfa6-2332-4d88-922a-c8c6a8de9dbf}</UniqueIdentifier>
</Filter>
<Filter Include="HTTP\Header Files">
<UniqueIdentifier>{af5474c1-aa96-4f90-b8e5-22332b714cec}</UniqueIdentifier>
<UniqueIdentifier>{1dfbf284-65e3-47eb-8b68-c7ef30832805}</UniqueIdentifier>
</Filter>
<Filter Include="HTTP\Source Files">
<UniqueIdentifier>{eed7f32b-3eea-44c6-8067-bd6988c93153}</UniqueIdentifier>
<UniqueIdentifier>{45cad813-7cf8-4701-9d1e-7e96e9c90b72}</UniqueIdentifier>
</Filter>
<Filter Include="TCPServer">
<UniqueIdentifier>{64f6298f-94a7-4f09-830c-f941d1a654b6}</UniqueIdentifier>
<UniqueIdentifier>{0bc87ac1-6d60-48b3-967a-895f8aa1bd64}</UniqueIdentifier>
</Filter>
<Filter Include="TCPServer\Header Files">
<UniqueIdentifier>{f18adc48-2c49-4be5-83db-1bdef111f01d}</UniqueIdentifier>
<UniqueIdentifier>{9cb0c042-8fd4-4531-aa3b-fc5d5a630dc8}</UniqueIdentifier>
</Filter>
<Filter Include="TCPServer\Source Files">
<UniqueIdentifier>{655d4e06-14d8-44ca-8a6c-438e3ec1bd2f}</UniqueIdentifier>
<UniqueIdentifier>{4e432213-4c58-40ca-96a9-b7b5a112829a}</UniqueIdentifier>
</Filter>
<Filter Include="HTTPServer">
<UniqueIdentifier>{5f4532f9-5df5-4352-8dbe-c7b40fa5ee64}</UniqueIdentifier>
<UniqueIdentifier>{e7061686-e7a2-4e17-b348-5af429e8ab58}</UniqueIdentifier>
</Filter>
<Filter Include="HTTPServer\Header Files">
<UniqueIdentifier>{b5bf5492-f8a3-4701-80f0-b6f9d3962944}</UniqueIdentifier>
<UniqueIdentifier>{a3b60b73-dd45-4b8c-9ef8-5699a8a0087f}</UniqueIdentifier>
</Filter>
<Filter Include="HTTPServer\Source Files">
<UniqueIdentifier>{79dec663-746a-4cba-9984-4724e96c5fcc}</UniqueIdentifier>
<UniqueIdentifier>{2566c190-9ae6-4038-a86c-7aa8a84d6e5b}</UniqueIdentifier>
</Filter>
<Filter Include="HTTPClient">
<UniqueIdentifier>{9735918a-31c0-4c17-bd8e-ade820b84222}</UniqueIdentifier>
<UniqueIdentifier>{2d57462d-926c-4b16-bdaf-98267f466e50}</UniqueIdentifier>
</Filter>
<Filter Include="HTTPClient\Header Files">
<UniqueIdentifier>{51f9e232-a754-480f-9e93-9ea102a22de6}</UniqueIdentifier>
<UniqueIdentifier>{758e1049-9f5a-49e7-83d2-4b16ced0430c}</UniqueIdentifier>
</Filter>
<Filter Include="HTTPClient\Source Files">
<UniqueIdentifier>{857bcfb1-da2f-43e8-91ba-b165dd91874f}</UniqueIdentifier>
<UniqueIdentifier>{49dd4cf7-0100-4d8b-9ea6-da95cef91419}</UniqueIdentifier>
</Filter>
<Filter Include="HTML">
<UniqueIdentifier>{dd9291ba-aae6-4be6-ac55-6a540c519cc9}</UniqueIdentifier>
<UniqueIdentifier>{4adb5d60-c6a1-4330-8817-b6ff10ea34e7}</UniqueIdentifier>
</Filter>
<Filter Include="HTML\Header Files">
<UniqueIdentifier>{c7cdd37f-09b8-46dc-bb69-cb61f91719f3}</UniqueIdentifier>
<UniqueIdentifier>{ede5b946-56fb-47bf-9933-23c2e35bb348}</UniqueIdentifier>
</Filter>
<Filter Include="HTML\Source Files">
<UniqueIdentifier>{63fab1c0-d1a3-4ab8-89b6-85a76d6e9bf7}</UniqueIdentifier>
<UniqueIdentifier>{0fab7e33-838c-41d8-bbf6-093f5b008e96}</UniqueIdentifier>
</Filter>
<Filter Include="FTPClient">
<UniqueIdentifier>{3f097d1c-a559-456b-87e8-0d633e27dc86}</UniqueIdentifier>
<UniqueIdentifier>{6dd6869a-a861-41a0-b089-018ab463d521}</UniqueIdentifier>
</Filter>
<Filter Include="FTPClient\Header Files">
<UniqueIdentifier>{6839f33b-b583-4d72-b9c3-e475e10faba8}</UniqueIdentifier>
<UniqueIdentifier>{103a71a3-0dd9-43f7-8ded-a97a67c8f802}</UniqueIdentifier>
</Filter>
<Filter Include="FTPClient\Source Files">
<UniqueIdentifier>{d2d45029-50f7-4ccd-ae05-655dcb9a4225}</UniqueIdentifier>
<UniqueIdentifier>{5b916500-0482-49a8-8a27-79d872a47a0e}</UniqueIdentifier>
</Filter>
<Filter Include="Reactor">
<UniqueIdentifier>{b07f321e-aee4-4325-ba97-a542ce5f4779}</UniqueIdentifier>
<UniqueIdentifier>{5ab0745f-3764-46d0-b0f2-5fa69dee066e}</UniqueIdentifier>
</Filter>
<Filter Include="Reactor\Header Files">
<UniqueIdentifier>{2b394717-615e-4b13-8f73-5979826afa14}</UniqueIdentifier>
<UniqueIdentifier>{8a848701-c617-4d4e-9afb-51aa3a753862}</UniqueIdentifier>
</Filter>
<Filter Include="Reactor\Source Files">
<UniqueIdentifier>{d3fff85e-2d06-4727-9026-9818ce4fc344}</UniqueIdentifier>
<UniqueIdentifier>{0eeca428-6973-4c5f-ac8a-8ce8d11c6625}</UniqueIdentifier>
</Filter>
<Filter Include="Mail">
<UniqueIdentifier>{f896b76e-a236-4b2c-a677-6ac3007c1f02}</UniqueIdentifier>
<UniqueIdentifier>{f9d008b5-fa17-417b-b645-31cf23b81f38}</UniqueIdentifier>
</Filter>
<Filter Include="Mail\Header Files">
<UniqueIdentifier>{8a6543e9-4c02-45b5-92e8-2af763b906df}</UniqueIdentifier>
<UniqueIdentifier>{5e30e60b-37a3-4996-8903-663bae145bd8}</UniqueIdentifier>
</Filter>
<Filter Include="Mail\Source Files">
<UniqueIdentifier>{944f67f7-4cd1-45e8-a4fe-3570c064e8ce}</UniqueIdentifier>
<UniqueIdentifier>{e585dbae-6751-48dc-8e7d-c1fb36a524b6}</UniqueIdentifier>
</Filter>
<Filter Include="ICMP">
<UniqueIdentifier>{7c875980-a6d2-4563-a62b-07a2249489ac}</UniqueIdentifier>
<UniqueIdentifier>{9306c380-189a-43c8-94bb-fbaee760a79b}</UniqueIdentifier>
</Filter>
<Filter Include="ICMP\Header Files">
<UniqueIdentifier>{e98fd658-f7c5-41e6-8496-9aa970adf752}</UniqueIdentifier>
<UniqueIdentifier>{f81396b5-46c7-420e-8a91-7cff884b4d20}</UniqueIdentifier>
</Filter>
<Filter Include="ICMP\Source Files">
<UniqueIdentifier>{9b88fcc2-6ff5-45cf-b2c3-ce2e7977a68c}</UniqueIdentifier>
<UniqueIdentifier>{2decf213-c0e0-42a1-9a38-30e3946f32ec}</UniqueIdentifier>
</Filter>
<Filter Include="NTP">
<UniqueIdentifier>{29f67c09-89d4-4a23-a075-2d904740741a}</UniqueIdentifier>
<UniqueIdentifier>{d8057121-76d4-4166-b6b3-29f6239d4831}</UniqueIdentifier>
</Filter>
<Filter Include="NTP\Header Files">
<UniqueIdentifier>{89ad7280-bfa6-4ce8-9aac-53d7dace085c}</UniqueIdentifier>
<UniqueIdentifier>{4e048ae6-bc42-43c4-a63c-e4fea5db6f26}</UniqueIdentifier>
</Filter>
<Filter Include="NTP\Source Files">
<UniqueIdentifier>{913760bd-fea6-4f8b-92d0-3938752ab30e}</UniqueIdentifier>
<UniqueIdentifier>{d92701ac-4a0f-4be3-9a0d-5795956a1a32}</UniqueIdentifier>
</Filter>
<Filter Include="Logging">
<UniqueIdentifier>{58ff245b-fe9a-422e-8846-cf2cce08187b}</UniqueIdentifier>
<UniqueIdentifier>{a76b54e4-aa61-4075-a449-d10ad20f8af9}</UniqueIdentifier>
</Filter>
<Filter Include="Logging\Header Files">
<UniqueIdentifier>{9b584f35-0765-49f4-b6ea-f2c5c940af6e}</UniqueIdentifier>
<UniqueIdentifier>{b77083a8-fbc9-435a-b667-76ace19e138c}</UniqueIdentifier>
</Filter>
<Filter Include="Logging\Source Files">
<UniqueIdentifier>{e838c493-14da-418b-9fdf-f722177550de}</UniqueIdentifier>
<UniqueIdentifier>{abc047d9-7b16-408c-92ec-c5067e906030}</UniqueIdentifier>
</Filter>
<Filter Include="WebSocket">
<UniqueIdentifier>{55004bfa-4da1-48ae-8e71-a32963f836e1}</UniqueIdentifier>
<UniqueIdentifier>{86b46567-46f7-43ce-a902-61d7f8fae112}</UniqueIdentifier>
</Filter>
<Filter Include="WebSocket\Header Files">
<UniqueIdentifier>{c5112127-ee8a-472f-8a93-5a1579123f01}</UniqueIdentifier>
<UniqueIdentifier>{620a5026-8228-48f0-ad3c-5aed338c1f49}</UniqueIdentifier>
</Filter>
<Filter Include="WebSocket\Source Files">
<UniqueIdentifier>{feafcd59-50bb-41da-8ead-e99c3cdb77bd}</UniqueIdentifier>
<UniqueIdentifier>{4bc8dae5-f38c-4ec2-a662-7ceee49fdad1}</UniqueIdentifier>
</Filter>
<Filter Include="OAuth">
<UniqueIdentifier>{52dd5c39-decb-4e0f-9be0-41b0bc459815}</UniqueIdentifier>
<UniqueIdentifier>{1dbe074f-20d7-43fa-880b-1decd61f640c}</UniqueIdentifier>
</Filter>
<Filter Include="OAuth\Header Files">
<UniqueIdentifier>{8cb55bd0-7803-46d3-aa12-2abb79156501}</UniqueIdentifier>
<UniqueIdentifier>{19c7eddf-a41a-4f7e-b951-9c3498d38d5e}</UniqueIdentifier>
</Filter>
<Filter Include="OAuth\Source Files">
<UniqueIdentifier>{6e9b87ca-7033-4f05-83b6-c2f5d3eee9ce}</UniqueIdentifier>
<UniqueIdentifier>{e15b5545-ae7b-457f-814a-12cf601fe392}</UniqueIdentifier>
</Filter>
<Filter Include="UDP">
<UniqueIdentifier>{44141c42-8b47-49bc-8b87-24ba1cd9de1b}</UniqueIdentifier>
</Filter>
<Filter Include="UDP\Source Files">
<UniqueIdentifier>{ef7cea07-8a0f-48d3-84ef-ff8e85564e3f}</UniqueIdentifier>
</Filter>
<Filter Include="UDP\Header Files">
<UniqueIdentifier>{54859cdf-28f7-4a93-b134-0c8e75d20848}</UniqueIdentifier>
</Filter>
</ItemGroup>
<ItemGroup>
@ -465,6 +474,27 @@
<ClInclude Include="include\Poco\Net\OAuth20Credentials.h">
<Filter>OAuth\Header Files</Filter>
</ClInclude>
<ClInclude Include="include\Poco\Net\MultiSocketPoller.h">
<Filter>UDP\Header Files</Filter>
</ClInclude>
<ClInclude Include="include\Poco\Net\SingleSocketPoller.h">
<Filter>UDP\Header Files</Filter>
</ClInclude>
<ClInclude Include="include\Poco\Net\UDPClient.h">
<Filter>UDP\Header Files</Filter>
</ClInclude>
<ClInclude Include="include\Poco\Net\UDPHandler.h">
<Filter>UDP\Header Files</Filter>
</ClInclude>
<ClInclude Include="include\Poco\Net\UDPServer.h">
<Filter>UDP\Header Files</Filter>
</ClInclude>
<ClInclude Include="include\Poco\Net\UDPServerParams.h">
<Filter>UDP\Header Files</Filter>
</ClInclude>
<ClInclude Include="include\Poco\Net\UDPSocketReader.h">
<Filter>UDP\Header Files</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<ClCompile Include="src\DNS.cpp">
@ -767,6 +797,12 @@
<ClCompile Include="src\OAuth20Credentials.cpp">
<Filter>OAuth\Source Files</Filter>
</ClCompile>
<ClCompile Include="src\UDPClient.cpp">
<Filter>UDP\Source Files</Filter>
</ClCompile>
<ClCompile Include="src\UDPServerParams.cpp">
<Filter>UDP\Source Files</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="..\DLLVersion.rc" />

View File

@ -381,6 +381,13 @@
<ClInclude Include="include\Poco\Net\WebSocketImpl.h"/>
<ClInclude Include="include\Poco\Net\OAuth10Credentials.h"/>
<ClInclude Include="include\Poco\Net\OAuth20Credentials.h"/>
<ClInclude Include="include\Poco\Net\MultiSocketPoller.h"/>
<ClInclude Include="include\Poco\Net\SingleSocketPoller.h"/>
<ClInclude Include="include\Poco\Net\UDPClient.h"/>
<ClInclude Include="include\Poco\Net\UDPHandler.h"/>
<ClInclude Include="include\Poco\Net\UDPServer.h"/>
<ClInclude Include="include\Poco\Net\UDPServerParams.h"/>
<ClInclude Include="include\Poco\Net\UDPSocketReader.h"/>
</ItemGroup>
<ItemGroup>
<ClCompile Include="src\DNS.cpp"/>
@ -483,6 +490,8 @@
<ClCompile Include="src\WebSocketImpl.cpp"/>
<ClCompile Include="src\OAuth10Credentials.cpp"/>
<ClCompile Include="src\OAuth20Credentials.cpp"/>
<ClCompile Include="src\UDPClient.cpp"/>
<ClCompile Include="src\UDPServerParams.cpp"/>
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="..\DLLVersion.rc">

View File

@ -2,148 +2,157 @@
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Filter Include="NetCore">
<UniqueIdentifier>{87211f6d-2bd7-42a7-83f8-577de8900fe4}</UniqueIdentifier>
<UniqueIdentifier>{3112c7c9-dbd2-428c-b9bc-bee436d86fcb}</UniqueIdentifier>
</Filter>
<Filter Include="NetCore\Header Files">
<UniqueIdentifier>{f0e2708b-c1c5-4700-9b9b-26ad95fa976f}</UniqueIdentifier>
<UniqueIdentifier>{2be5f8ef-9fed-47d1-a1be-6c7f5ca89cb4}</UniqueIdentifier>
</Filter>
<Filter Include="NetCore\Source Files">
<UniqueIdentifier>{4793786c-1dda-45be-969c-0df62d07decd}</UniqueIdentifier>
<UniqueIdentifier>{fe26165a-7085-4291-9bc0-a61b9adb1c71}</UniqueIdentifier>
</Filter>
<Filter Include="Sockets">
<UniqueIdentifier>{98313952-bc19-4074-83b1-cb301cea2483}</UniqueIdentifier>
<UniqueIdentifier>{dbf8e162-f7c3-4c76-b48f-a4bf96984cb2}</UniqueIdentifier>
</Filter>
<Filter Include="Sockets\Header Files">
<UniqueIdentifier>{9f3a8fe4-c9b4-453a-b9db-1d0b24d860c5}</UniqueIdentifier>
<UniqueIdentifier>{fe1feba9-bceb-4bd5-8499-f85462920dbf}</UniqueIdentifier>
</Filter>
<Filter Include="Sockets\Source Files">
<UniqueIdentifier>{ae356354-a8c2-4ae9-8347-b3295e4f9857}</UniqueIdentifier>
<UniqueIdentifier>{10a99a4b-6ec4-454d-a237-fbb8fbaff21e}</UniqueIdentifier>
</Filter>
<Filter Include="Messages">
<UniqueIdentifier>{84b0b1bd-05ad-4fe9-af14-26016cd75cec}</UniqueIdentifier>
<UniqueIdentifier>{70dc979d-9ce2-443e-9ad3-89ce5f01fe52}</UniqueIdentifier>
</Filter>
<Filter Include="Messages\Header Files">
<UniqueIdentifier>{aea583e1-232a-40df-9831-1f2cd99faa2e}</UniqueIdentifier>
<UniqueIdentifier>{e52ff7d4-82e6-488a-b11c-6d6c798306d2}</UniqueIdentifier>
</Filter>
<Filter Include="Messages\Source Files">
<UniqueIdentifier>{c36d0e86-9c80-400c-b6cd-bb93efd50734}</UniqueIdentifier>
<UniqueIdentifier>{39b46f91-35df-4254-b119-2ae4386e9ed0}</UniqueIdentifier>
</Filter>
<Filter Include="HTTP">
<UniqueIdentifier>{d84641ab-6aea-43fa-a9b3-c5c6a2f4a7af}</UniqueIdentifier>
<UniqueIdentifier>{7dfdde05-f0f6-4a54-986f-35927089c51f}</UniqueIdentifier>
</Filter>
<Filter Include="HTTP\Header Files">
<UniqueIdentifier>{ba0410df-f386-4a47-855b-1a67489daeb8}</UniqueIdentifier>
<UniqueIdentifier>{52261253-8a5b-4630-bc6b-52bf632c362a}</UniqueIdentifier>
</Filter>
<Filter Include="HTTP\Source Files">
<UniqueIdentifier>{798e1544-bdd5-494a-b849-0201aa9c03cd}</UniqueIdentifier>
<UniqueIdentifier>{b0aa5df0-871d-4e5f-8b50-71f0de694728}</UniqueIdentifier>
</Filter>
<Filter Include="TCPServer">
<UniqueIdentifier>{6d67f85f-7c62-4ab1-8ce5-39522cf5f064}</UniqueIdentifier>
<UniqueIdentifier>{c92b290c-c7d1-4a58-9039-c6cd84642e09}</UniqueIdentifier>
</Filter>
<Filter Include="TCPServer\Header Files">
<UniqueIdentifier>{3971cf3b-df0c-4f97-8314-8905759867d5}</UniqueIdentifier>
<UniqueIdentifier>{d110956c-7eb1-46d3-b37b-54b281f6224d}</UniqueIdentifier>
</Filter>
<Filter Include="TCPServer\Source Files">
<UniqueIdentifier>{f8ceb19d-4df3-4cc5-9c68-f7dddd15d888}</UniqueIdentifier>
<UniqueIdentifier>{a7602bbc-f961-4ecd-ab07-6c57b49db444}</UniqueIdentifier>
</Filter>
<Filter Include="HTTPServer">
<UniqueIdentifier>{7af2aac5-0500-4fde-bcb8-074454ca8235}</UniqueIdentifier>
<UniqueIdentifier>{df6522c7-1921-470e-85f2-aa3228b7bcbf}</UniqueIdentifier>
</Filter>
<Filter Include="HTTPServer\Header Files">
<UniqueIdentifier>{9951c46c-a205-41ae-9eaf-2454bbf4a958}</UniqueIdentifier>
<UniqueIdentifier>{a73b4d3e-cf7d-4a6e-a362-8d1e42e1ecfc}</UniqueIdentifier>
</Filter>
<Filter Include="HTTPServer\Source Files">
<UniqueIdentifier>{9e55ed47-d527-422d-8da3-91739d2892b5}</UniqueIdentifier>
<UniqueIdentifier>{f5a1c829-ad43-47b4-a02a-68a75b02126b}</UniqueIdentifier>
</Filter>
<Filter Include="HTTPClient">
<UniqueIdentifier>{9127f9d7-7f4e-43f9-a5a9-be184c62a8de}</UniqueIdentifier>
<UniqueIdentifier>{2342021b-fa7e-4121-8cb7-5df634b6c45d}</UniqueIdentifier>
</Filter>
<Filter Include="HTTPClient\Header Files">
<UniqueIdentifier>{f80d59e6-8c38-4a98-8ea5-5f9677258c32}</UniqueIdentifier>
<UniqueIdentifier>{12724675-834e-496d-a000-ceb57944985f}</UniqueIdentifier>
</Filter>
<Filter Include="HTTPClient\Source Files">
<UniqueIdentifier>{0291bb8b-b010-44a8-ad32-a22e21feb169}</UniqueIdentifier>
<UniqueIdentifier>{13bf28dc-c06b-4cbf-97e5-68d6129f3f6c}</UniqueIdentifier>
</Filter>
<Filter Include="HTML">
<UniqueIdentifier>{95df4d30-0cc9-4e43-862e-964f0c77dbc5}</UniqueIdentifier>
<UniqueIdentifier>{a59f60e1-76a7-4c95-af3e-ac94b502bd2c}</UniqueIdentifier>
</Filter>
<Filter Include="HTML\Header Files">
<UniqueIdentifier>{e129147f-dd0f-4454-a4a7-720e2459c90d}</UniqueIdentifier>
<UniqueIdentifier>{402c23a6-be16-41ca-a132-54f5b80d59c9}</UniqueIdentifier>
</Filter>
<Filter Include="HTML\Source Files">
<UniqueIdentifier>{94904c68-8bf1-4e87-bcef-d7e1d7b68712}</UniqueIdentifier>
<UniqueIdentifier>{c309c15d-9f94-48eb-9855-7998f6defa9b}</UniqueIdentifier>
</Filter>
<Filter Include="FTPClient">
<UniqueIdentifier>{07b8b34b-e5a6-4a22-b239-d33fb7f15fec}</UniqueIdentifier>
<UniqueIdentifier>{a5f9e6ae-90b2-4417-a561-a55061e5fec9}</UniqueIdentifier>
</Filter>
<Filter Include="FTPClient\Header Files">
<UniqueIdentifier>{94d3c731-800c-45bd-94e6-df699391b501}</UniqueIdentifier>
<UniqueIdentifier>{8466e297-20b4-47ae-a887-c5ff0d45ce78}</UniqueIdentifier>
</Filter>
<Filter Include="FTPClient\Source Files">
<UniqueIdentifier>{586faf30-7ebe-4ff5-89d6-eb17b4a835d0}</UniqueIdentifier>
<UniqueIdentifier>{0445ae82-0782-4886-a214-999676554772}</UniqueIdentifier>
</Filter>
<Filter Include="Reactor">
<UniqueIdentifier>{88b5b6f0-086d-4eca-949e-1fe91f64aa4a}</UniqueIdentifier>
<UniqueIdentifier>{98190227-ff15-4a0e-9138-cf62a710ec6e}</UniqueIdentifier>
</Filter>
<Filter Include="Reactor\Header Files">
<UniqueIdentifier>{0e1e26ff-bd95-4353-84b5-2409bee109ef}</UniqueIdentifier>
<UniqueIdentifier>{d839ac9c-c0c8-4a0d-b71d-983036fdaa2f}</UniqueIdentifier>
</Filter>
<Filter Include="Reactor\Source Files">
<UniqueIdentifier>{1cd34d3a-1baf-45f7-bd37-040eb53038c9}</UniqueIdentifier>
<UniqueIdentifier>{d42fb054-f522-426b-bbc6-1b260c275713}</UniqueIdentifier>
</Filter>
<Filter Include="Mail">
<UniqueIdentifier>{dacf32c6-7cd7-4594-a11b-0163a9b275ac}</UniqueIdentifier>
<UniqueIdentifier>{54d35578-6cb6-4643-99f8-57a0cb16d8e0}</UniqueIdentifier>
</Filter>
<Filter Include="Mail\Header Files">
<UniqueIdentifier>{23b154af-c94e-4bc0-b2aa-6414b1f107b4}</UniqueIdentifier>
<UniqueIdentifier>{5d1fce8e-4527-4809-acba-a2f8fe806890}</UniqueIdentifier>
</Filter>
<Filter Include="Mail\Source Files">
<UniqueIdentifier>{f390b410-3a22-429a-9d2c-7cf724d08d3b}</UniqueIdentifier>
<UniqueIdentifier>{88b736df-0022-4fe5-bccc-436e7e15efad}</UniqueIdentifier>
</Filter>
<Filter Include="ICMP">
<UniqueIdentifier>{7a45b352-0bd6-4e11-b2d5-a576637f0f32}</UniqueIdentifier>
<UniqueIdentifier>{545bbed8-2453-4110-a44d-c736bfc2eb08}</UniqueIdentifier>
</Filter>
<Filter Include="ICMP\Header Files">
<UniqueIdentifier>{cd18f608-2c56-45fe-8cab-88e61b626360}</UniqueIdentifier>
<UniqueIdentifier>{e73b6e65-a0b3-4577-b062-e5df3d91e81f}</UniqueIdentifier>
</Filter>
<Filter Include="ICMP\Source Files">
<UniqueIdentifier>{a2caa923-30ca-46a0-bbda-a4d7b5c68560}</UniqueIdentifier>
<UniqueIdentifier>{8d63beaa-5a39-4b95-a6af-c6101c0fac1a}</UniqueIdentifier>
</Filter>
<Filter Include="NTP">
<UniqueIdentifier>{099bc8ef-9e2c-482c-ab65-7e0d77dc9b7b}</UniqueIdentifier>
<UniqueIdentifier>{dd4de661-d6e9-4dfd-b9de-884ef2d948d0}</UniqueIdentifier>
</Filter>
<Filter Include="NTP\Header Files">
<UniqueIdentifier>{f2530b4c-7a5e-42c0-8670-5cdcd308a5c2}</UniqueIdentifier>
<UniqueIdentifier>{c9eed670-0eac-4978-b619-9f6630082f00}</UniqueIdentifier>
</Filter>
<Filter Include="NTP\Source Files">
<UniqueIdentifier>{75514a2a-029d-4def-b3e2-239a74f2675b}</UniqueIdentifier>
<UniqueIdentifier>{ac9feb06-1987-43f8-8ee8-a279e6085821}</UniqueIdentifier>
</Filter>
<Filter Include="Logging">
<UniqueIdentifier>{223a49f6-01b7-41a1-acec-22cd4ca37f63}</UniqueIdentifier>
<UniqueIdentifier>{1f8b5a2a-3fe9-430a-a2b0-67b3825abb6f}</UniqueIdentifier>
</Filter>
<Filter Include="Logging\Header Files">
<UniqueIdentifier>{db318ab0-4220-458a-9fea-146a056c2232}</UniqueIdentifier>
<UniqueIdentifier>{f9123dc5-28cd-40f8-8e02-a2194555a3c7}</UniqueIdentifier>
</Filter>
<Filter Include="Logging\Source Files">
<UniqueIdentifier>{c1f81966-497e-4a72-907e-47f24b3b2791}</UniqueIdentifier>
<UniqueIdentifier>{4d7908a1-4bd4-4423-80f4-19d91876e879}</UniqueIdentifier>
</Filter>
<Filter Include="WebSocket">
<UniqueIdentifier>{8dc59336-2af6-4ea2-8892-681d94d10426}</UniqueIdentifier>
<UniqueIdentifier>{acfe2593-67b6-467d-a660-45dd35057efd}</UniqueIdentifier>
</Filter>
<Filter Include="WebSocket\Header Files">
<UniqueIdentifier>{403dffb9-502a-4b36-8900-d2816ab04886}</UniqueIdentifier>
<UniqueIdentifier>{b27eca77-9da9-4fc0-b358-a69d6a74eb2b}</UniqueIdentifier>
</Filter>
<Filter Include="WebSocket\Source Files">
<UniqueIdentifier>{b99af649-4203-4f66-a1fa-b53736929615}</UniqueIdentifier>
<UniqueIdentifier>{aaaeac30-cb69-4101-a77c-1d854c3a3d59}</UniqueIdentifier>
</Filter>
<Filter Include="OAuth">
<UniqueIdentifier>{1f4d59d3-29fc-4c60-af5d-97439123c355}</UniqueIdentifier>
<UniqueIdentifier>{68f9783d-6cab-46bd-8779-88e5bfff5799}</UniqueIdentifier>
</Filter>
<Filter Include="OAuth\Header Files">
<UniqueIdentifier>{f162d641-57f2-4e8b-b6ec-bf1f56dd5371}</UniqueIdentifier>
<UniqueIdentifier>{510d818c-813c-4e95-88f8-ccbd8f49db60}</UniqueIdentifier>
</Filter>
<Filter Include="OAuth\Source Files">
<UniqueIdentifier>{a8cf6314-024c-41e1-ba55-957685f05ad2}</UniqueIdentifier>
<UniqueIdentifier>{b507d869-ca40-45fd-89f4-ff1d0b44e4cb}</UniqueIdentifier>
</Filter>
<Filter Include="UDP">
<UniqueIdentifier>{84078495-9523-467a-8a89-facf71482dc4}</UniqueIdentifier>
</Filter>
<Filter Include="UDP\Source Files">
<UniqueIdentifier>{34bc2f46-b881-477e-9df1-7d1913333c1c}</UniqueIdentifier>
</Filter>
<Filter Include="UDP\Header Files">
<UniqueIdentifier>{826a903c-3dde-4514-88cd-f2be3e23820e}</UniqueIdentifier>
</Filter>
</ItemGroup>
<ItemGroup>
@ -465,6 +474,27 @@
<ClInclude Include="include\Poco\Net\OAuth20Credentials.h">
<Filter>OAuth\Header Files</Filter>
</ClInclude>
<ClInclude Include="include\Poco\Net\MultiSocketPoller.h">
<Filter>UDP\Header Files</Filter>
</ClInclude>
<ClInclude Include="include\Poco\Net\SingleSocketPoller.h">
<Filter>UDP\Header Files</Filter>
</ClInclude>
<ClInclude Include="include\Poco\Net\UDPClient.h">
<Filter>UDP\Header Files</Filter>
</ClInclude>
<ClInclude Include="include\Poco\Net\UDPHandler.h">
<Filter>UDP\Header Files</Filter>
</ClInclude>
<ClInclude Include="include\Poco\Net\UDPServer.h">
<Filter>UDP\Header Files</Filter>
</ClInclude>
<ClInclude Include="include\Poco\Net\UDPServerParams.h">
<Filter>UDP\Header Files</Filter>
</ClInclude>
<ClInclude Include="include\Poco\Net\UDPSocketReader.h">
<Filter>UDP\Header Files</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<ClCompile Include="src\DNS.cpp">
@ -767,6 +797,12 @@
<ClCompile Include="src\OAuth20Credentials.cpp">
<Filter>OAuth\Source Files</Filter>
</ClCompile>
<ClCompile Include="src\UDPClient.cpp">
<Filter>UDP\Source Files</Filter>
</ClCompile>
<ClCompile Include="src\UDPServerParams.cpp">
<Filter>UDP\Source Files</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="..\DLLVersion.rc" />

View File

@ -85,7 +85,7 @@
</ImportGroup>
<PropertyGroup Label="UserMacros"/>
<PropertyGroup>
<_ProjectFileVersion>11.0.61030.0</_ProjectFileVersion>
<_ProjectFileVersion>11.0.50727.1</_ProjectFileVersion>
<TargetName Condition="'$(Configuration)|$(Platform)'=='debug_shared|Win32'">PocoNetd</TargetName>
<TargetName Condition="'$(Configuration)|$(Platform)'=='debug_static_md|Win32'">PocoNetmdd</TargetName>
<TargetName Condition="'$(Configuration)|$(Platform)'=='debug_static_mt|Win32'">PocoNetmtd</TargetName>
@ -385,6 +385,13 @@
<ClInclude Include="include\Poco\Net\WebSocketImpl.h"/>
<ClInclude Include="include\Poco\Net\OAuth10Credentials.h"/>
<ClInclude Include="include\Poco\Net\OAuth20Credentials.h"/>
<ClInclude Include="include\Poco\Net\MultiSocketPoller.h"/>
<ClInclude Include="include\Poco\Net\SingleSocketPoller.h"/>
<ClInclude Include="include\Poco\Net\UDPClient.h"/>
<ClInclude Include="include\Poco\Net\UDPHandler.h"/>
<ClInclude Include="include\Poco\Net\UDPServer.h"/>
<ClInclude Include="include\Poco\Net\UDPServerParams.h"/>
<ClInclude Include="include\Poco\Net\UDPSocketReader.h"/>
</ItemGroup>
<ItemGroup>
<ClCompile Include="src\DNS.cpp"/>
@ -487,6 +494,8 @@
<ClCompile Include="src\WebSocketImpl.cpp"/>
<ClCompile Include="src\OAuth10Credentials.cpp"/>
<ClCompile Include="src\OAuth20Credentials.cpp"/>
<ClCompile Include="src\UDPClient.cpp"/>
<ClCompile Include="src\UDPServerParams.cpp"/>
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="..\DLLVersion.rc">

View File

@ -2,148 +2,157 @@
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Filter Include="NetCore">
<UniqueIdentifier>{5e0ee010-8061-41b2-ac78-47dd9ea8b89f}</UniqueIdentifier>
<UniqueIdentifier>{36be9e0a-bda2-4ac3-abbb-de70658044f4}</UniqueIdentifier>
</Filter>
<Filter Include="NetCore\Header Files">
<UniqueIdentifier>{f108715d-a1dd-46cb-b0c7-576c9ad46bf2}</UniqueIdentifier>
<UniqueIdentifier>{4744f7e3-36d0-4c2d-bc19-936f8d68bcfd}</UniqueIdentifier>
</Filter>
<Filter Include="NetCore\Source Files">
<UniqueIdentifier>{00fa8767-4417-4917-9010-e53e005f6bde}</UniqueIdentifier>
<UniqueIdentifier>{f43abe9c-28b3-4894-80a4-3d6fe203b0d5}</UniqueIdentifier>
</Filter>
<Filter Include="Sockets">
<UniqueIdentifier>{139af390-67aa-410e-b721-4fdf3c9c1a1e}</UniqueIdentifier>
<UniqueIdentifier>{c4a86506-4fd7-4d5f-9a19-d622a5561e1a}</UniqueIdentifier>
</Filter>
<Filter Include="Sockets\Header Files">
<UniqueIdentifier>{771658b8-7f1a-49cb-a543-030d1b13585b}</UniqueIdentifier>
<UniqueIdentifier>{763f20ff-5a77-4be5-98a1-b8c70704dcec}</UniqueIdentifier>
</Filter>
<Filter Include="Sockets\Source Files">
<UniqueIdentifier>{084515e3-8451-43fc-8dd6-3ae02b9f68c7}</UniqueIdentifier>
<UniqueIdentifier>{1967af29-06fb-49bf-a13d-ca88975ab8f8}</UniqueIdentifier>
</Filter>
<Filter Include="Messages">
<UniqueIdentifier>{257db6b8-c5bd-4e75-8cbb-ab2222d97fba}</UniqueIdentifier>
<UniqueIdentifier>{4703f187-2778-43e8-a26e-48ab3a5f137d}</UniqueIdentifier>
</Filter>
<Filter Include="Messages\Header Files">
<UniqueIdentifier>{17319ac3-a861-4d29-9629-e3f190672679}</UniqueIdentifier>
<UniqueIdentifier>{c6514151-4f44-4ee5-a027-687bc1ac0629}</UniqueIdentifier>
</Filter>
<Filter Include="Messages\Source Files">
<UniqueIdentifier>{e9d98e13-fd2a-4090-aced-80b00e6a3c8d}</UniqueIdentifier>
<UniqueIdentifier>{a31284d6-0073-49d7-9aa5-178bb03fab6b}</UniqueIdentifier>
</Filter>
<Filter Include="HTTP">
<UniqueIdentifier>{e53be2af-0f95-40b3-b480-72eb5adcde88}</UniqueIdentifier>
<UniqueIdentifier>{4c4f5f1c-ba6f-4dfc-9ec9-1bdfe67282aa}</UniqueIdentifier>
</Filter>
<Filter Include="HTTP\Header Files">
<UniqueIdentifier>{7985d407-f83c-4895-b975-6832f26f40ae}</UniqueIdentifier>
<UniqueIdentifier>{bd90490d-667a-4917-a957-f3abbf423623}</UniqueIdentifier>
</Filter>
<Filter Include="HTTP\Source Files">
<UniqueIdentifier>{08c92788-c737-4895-b508-4aa0bb048db0}</UniqueIdentifier>
<UniqueIdentifier>{53093151-3d78-433a-9688-a7fe731e36c1}</UniqueIdentifier>
</Filter>
<Filter Include="TCPServer">
<UniqueIdentifier>{bd8aa8c9-d2e5-4c8b-a033-d434e09faf2e}</UniqueIdentifier>
<UniqueIdentifier>{6a04e21f-2419-4235-943e-c4b7d851acee}</UniqueIdentifier>
</Filter>
<Filter Include="TCPServer\Header Files">
<UniqueIdentifier>{7198a149-bcff-46d0-9c5f-116dd8d2a9d4}</UniqueIdentifier>
<UniqueIdentifier>{59f9a778-9d87-405e-a5a5-717185dd34bb}</UniqueIdentifier>
</Filter>
<Filter Include="TCPServer\Source Files">
<UniqueIdentifier>{735890b1-1dcc-4c8c-a776-5b365491e562}</UniqueIdentifier>
<UniqueIdentifier>{157f2ba5-e510-401a-a34c-f4bc38c20732}</UniqueIdentifier>
</Filter>
<Filter Include="HTTPServer">
<UniqueIdentifier>{7df90178-20b4-45ca-9faf-04586207ec1b}</UniqueIdentifier>
<UniqueIdentifier>{226832c0-782b-4dcc-8331-f7bb659ca591}</UniqueIdentifier>
</Filter>
<Filter Include="HTTPServer\Header Files">
<UniqueIdentifier>{397dfee6-b7b4-425d-ad72-119910582187}</UniqueIdentifier>
<UniqueIdentifier>{ddfec897-0c48-49e2-8e3c-c84d7b415077}</UniqueIdentifier>
</Filter>
<Filter Include="HTTPServer\Source Files">
<UniqueIdentifier>{0770c3f2-b2d1-4aaa-bbf7-638504e556ea}</UniqueIdentifier>
<UniqueIdentifier>{31f6824c-feab-4b24-a977-09eafc82909e}</UniqueIdentifier>
</Filter>
<Filter Include="HTTPClient">
<UniqueIdentifier>{9389ea48-a056-4ab6-9cc1-cdea1f2d550a}</UniqueIdentifier>
<UniqueIdentifier>{53c599fc-22d4-4c65-82b8-47e46d63aa7a}</UniqueIdentifier>
</Filter>
<Filter Include="HTTPClient\Header Files">
<UniqueIdentifier>{5428ec24-5651-499d-9964-96cbbf7c3ace}</UniqueIdentifier>
<UniqueIdentifier>{31392b91-f7ec-4beb-b7f4-cb809bce9622}</UniqueIdentifier>
</Filter>
<Filter Include="HTTPClient\Source Files">
<UniqueIdentifier>{0ac1d394-1d10-449f-b88a-2893ba3bffb0}</UniqueIdentifier>
<UniqueIdentifier>{f400ff81-e36a-4f47-9a23-ee7b83e39c88}</UniqueIdentifier>
</Filter>
<Filter Include="HTML">
<UniqueIdentifier>{175a171c-aeb9-48a0-a513-83d88aa0df17}</UniqueIdentifier>
<UniqueIdentifier>{11f4e892-3a16-4c81-90dc-7d53e19a72a5}</UniqueIdentifier>
</Filter>
<Filter Include="HTML\Header Files">
<UniqueIdentifier>{253e1cb8-960b-4bcc-9767-f747da7f71e2}</UniqueIdentifier>
<UniqueIdentifier>{33474cb9-3147-4ad4-a658-d56984a74700}</UniqueIdentifier>
</Filter>
<Filter Include="HTML\Source Files">
<UniqueIdentifier>{9b027786-d085-426c-8d0f-7e65d437daed}</UniqueIdentifier>
<UniqueIdentifier>{e619e991-8dbe-43f8-bbc9-a6ec620e333f}</UniqueIdentifier>
</Filter>
<Filter Include="FTPClient">
<UniqueIdentifier>{049ef9e3-c207-4644-bad9-8e928684251e}</UniqueIdentifier>
<UniqueIdentifier>{7b7d8df5-3739-43a5-8c49-bb77fde6f4b8}</UniqueIdentifier>
</Filter>
<Filter Include="FTPClient\Header Files">
<UniqueIdentifier>{63b0ac64-3aa1-45d6-8060-6f69a43d9b0d}</UniqueIdentifier>
<UniqueIdentifier>{f08bfcb3-b4bd-449a-8e1a-f132d7d94190}</UniqueIdentifier>
</Filter>
<Filter Include="FTPClient\Source Files">
<UniqueIdentifier>{eed2bbd9-465b-438f-9306-e1fb43797476}</UniqueIdentifier>
<UniqueIdentifier>{de8ade78-b779-4156-931d-b9b337c2ff01}</UniqueIdentifier>
</Filter>
<Filter Include="Reactor">
<UniqueIdentifier>{3ec2758c-b15a-4448-aea7-8669a088e5d7}</UniqueIdentifier>
<UniqueIdentifier>{39387355-52b3-4274-9d50-51d57d461467}</UniqueIdentifier>
</Filter>
<Filter Include="Reactor\Header Files">
<UniqueIdentifier>{23b81e64-202a-46ac-9cfe-bf155a502a66}</UniqueIdentifier>
<UniqueIdentifier>{ead46adc-922b-4534-a92a-a44485bf92c7}</UniqueIdentifier>
</Filter>
<Filter Include="Reactor\Source Files">
<UniqueIdentifier>{f0716eba-89f0-4409-8191-fef9cdc642ef}</UniqueIdentifier>
<UniqueIdentifier>{0436ddb6-5bc9-447f-b085-affba2ecf245}</UniqueIdentifier>
</Filter>
<Filter Include="Mail">
<UniqueIdentifier>{81e0a8d3-bc93-47bc-87f8-fe0243f28497}</UniqueIdentifier>
<UniqueIdentifier>{30ce5f96-c5ee-4571-8feb-e73efcdda213}</UniqueIdentifier>
</Filter>
<Filter Include="Mail\Header Files">
<UniqueIdentifier>{93bc27ea-657c-4d73-804a-1035ec9d05e1}</UniqueIdentifier>
<UniqueIdentifier>{f431f07c-1dd0-4d53-bc28-bee0ac37bdce}</UniqueIdentifier>
</Filter>
<Filter Include="Mail\Source Files">
<UniqueIdentifier>{13acb61f-3723-4096-b1de-a490d9c79e84}</UniqueIdentifier>
<UniqueIdentifier>{a39a9b2b-ed5d-498a-b83c-dfd1f21d976c}</UniqueIdentifier>
</Filter>
<Filter Include="ICMP">
<UniqueIdentifier>{c852ea94-f521-4f64-9740-e489c3acf98c}</UniqueIdentifier>
<UniqueIdentifier>{4c1ee7d0-846e-4a2b-8e2d-3b32b00c727b}</UniqueIdentifier>
</Filter>
<Filter Include="ICMP\Header Files">
<UniqueIdentifier>{c526f5f7-60b8-49af-bf73-5349bb6409a8}</UniqueIdentifier>
<UniqueIdentifier>{3102b233-638a-431f-9d44-f059eab414ad}</UniqueIdentifier>
</Filter>
<Filter Include="ICMP\Source Files">
<UniqueIdentifier>{7912c8ff-7af3-49d9-a9f2-95f838fe2680}</UniqueIdentifier>
<UniqueIdentifier>{ad25b068-a579-4edb-8d91-d5a1b421b3d7}</UniqueIdentifier>
</Filter>
<Filter Include="NTP">
<UniqueIdentifier>{30571f88-841b-4210-a889-0d6c3da94d4a}</UniqueIdentifier>
<UniqueIdentifier>{ff6af4fd-831c-4abf-940d-64f390fee5f2}</UniqueIdentifier>
</Filter>
<Filter Include="NTP\Header Files">
<UniqueIdentifier>{0cb7be28-5ea2-4bcb-b527-6bddb06f234f}</UniqueIdentifier>
<UniqueIdentifier>{2d52a6f7-6c6e-4882-92d1-2bfee2950838}</UniqueIdentifier>
</Filter>
<Filter Include="NTP\Source Files">
<UniqueIdentifier>{ed825eda-701d-4e69-9c61-0aa2558ba807}</UniqueIdentifier>
<UniqueIdentifier>{6c9ba10d-a26e-4e6a-8f33-bdd4a2ec3218}</UniqueIdentifier>
</Filter>
<Filter Include="Logging">
<UniqueIdentifier>{d75a99d5-e40f-4906-8c31-2b0a1df36134}</UniqueIdentifier>
<UniqueIdentifier>{423b4f67-fdd5-436b-97a4-4b1311568099}</UniqueIdentifier>
</Filter>
<Filter Include="Logging\Header Files">
<UniqueIdentifier>{0ac03649-8844-4d85-908e-78b717c373f5}</UniqueIdentifier>
<UniqueIdentifier>{25f6b863-02dd-44d0-9430-97c6eee7d1b0}</UniqueIdentifier>
</Filter>
<Filter Include="Logging\Source Files">
<UniqueIdentifier>{fe1b2da7-f47f-4839-8dd7-37de9baad4f6}</UniqueIdentifier>
<UniqueIdentifier>{4b96b87e-1e52-4b07-834c-85bbca678d6c}</UniqueIdentifier>
</Filter>
<Filter Include="WebSocket">
<UniqueIdentifier>{358ba0bf-115c-4a7e-b7d8-fce8c59b8538}</UniqueIdentifier>
<UniqueIdentifier>{81618bc1-5d90-49c3-b378-199d10b190f3}</UniqueIdentifier>
</Filter>
<Filter Include="WebSocket\Header Files">
<UniqueIdentifier>{97077836-50f9-4e73-99c4-5cef869b46a8}</UniqueIdentifier>
<UniqueIdentifier>{3504d229-8a6a-4ba9-b22c-e4a33b45d38c}</UniqueIdentifier>
</Filter>
<Filter Include="WebSocket\Source Files">
<UniqueIdentifier>{975c6b48-7219-475d-b6f4-e347b5b53817}</UniqueIdentifier>
<UniqueIdentifier>{c2c3abc9-4777-4bf5-b456-bd45b10adfd1}</UniqueIdentifier>
</Filter>
<Filter Include="OAuth">
<UniqueIdentifier>{5f91d6d4-a99c-4c83-9272-1b17a6e6d11c}</UniqueIdentifier>
<UniqueIdentifier>{cac35a19-3ece-4f9b-96c5-fea7e6d8fbfa}</UniqueIdentifier>
</Filter>
<Filter Include="OAuth\Header Files">
<UniqueIdentifier>{13f2d0e0-3141-4145-a96f-ac9099baecea}</UniqueIdentifier>
<UniqueIdentifier>{e8376318-2015-47b5-b50b-7f168329668d}</UniqueIdentifier>
</Filter>
<Filter Include="OAuth\Source Files">
<UniqueIdentifier>{dc7656fe-fffe-4ee3-8d42-9e01b9d878ef}</UniqueIdentifier>
<UniqueIdentifier>{70a9c9ee-9356-40fa-8a1a-4ec9465c725b}</UniqueIdentifier>
</Filter>
<Filter Include="UDP">
<UniqueIdentifier>{18ceb09f-b777-4ff5-a4a2-23b1d36427e7}</UniqueIdentifier>
</Filter>
<Filter Include="UDP\Source Files">
<UniqueIdentifier>{f49505a3-6f0a-409f-ba53-e50e00c6eea3}</UniqueIdentifier>
</Filter>
<Filter Include="UDP\Header Files">
<UniqueIdentifier>{a383b2e5-530f-4fc0-b434-170087b350fb}</UniqueIdentifier>
</Filter>
</ItemGroup>
<ItemGroup>
@ -465,6 +474,27 @@
<ClInclude Include="include\Poco\Net\OAuth20Credentials.h">
<Filter>OAuth\Header Files</Filter>
</ClInclude>
<ClInclude Include="include\Poco\Net\MultiSocketPoller.h">
<Filter>UDP\Header Files</Filter>
</ClInclude>
<ClInclude Include="include\Poco\Net\SingleSocketPoller.h">
<Filter>UDP\Header Files</Filter>
</ClInclude>
<ClInclude Include="include\Poco\Net\UDPClient.h">
<Filter>UDP\Header Files</Filter>
</ClInclude>
<ClInclude Include="include\Poco\Net\UDPHandler.h">
<Filter>UDP\Header Files</Filter>
</ClInclude>
<ClInclude Include="include\Poco\Net\UDPServer.h">
<Filter>UDP\Header Files</Filter>
</ClInclude>
<ClInclude Include="include\Poco\Net\UDPServerParams.h">
<Filter>UDP\Header Files</Filter>
</ClInclude>
<ClInclude Include="include\Poco\Net\UDPSocketReader.h">
<Filter>UDP\Header Files</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<ClCompile Include="src\DNS.cpp">
@ -767,6 +797,12 @@
<ClCompile Include="src\OAuth20Credentials.cpp">
<Filter>OAuth\Source Files</Filter>
</ClCompile>
<ClCompile Include="src\UDPClient.cpp">
<Filter>UDP\Source Files</Filter>
</ClCompile>
<ClCompile Include="src\UDPServerParams.cpp">
<Filter>UDP\Source Files</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="..\DLLVersion.rc" />

View File

@ -337,6 +337,7 @@
<ClInclude Include="include\Poco\Net\MulticastSocket.h"/>
<ClInclude Include="include\Poco\Net\MultipartReader.h"/>
<ClInclude Include="include\Poco\Net\MultipartWriter.h"/>
<ClInclude Include="include\Poco\Net\MultiSocketPoller.h"/>
<ClInclude Include="include\Poco\Net\NameValueCollection.h"/>
<ClInclude Include="include\Poco\Net\Net.h"/>
<ClInclude Include="include\Poco\Net\NetException.h"/>
@ -362,6 +363,7 @@
<ClInclude Include="include\Poco\Net\RemoteSyslogListener.h"/>
<ClInclude Include="include\Poco\Net\ServerSocket.h"/>
<ClInclude Include="include\Poco\Net\ServerSocketImpl.h"/>
<ClInclude Include="include\Poco\Net\SingleSocketPoller.h"/>
<ClInclude Include="include\Poco\Net\SMTPChannel.h"/>
<ClInclude Include="include\Poco\Net\SMTPClientSession.h"/>
<ClInclude Include="include\Poco\Net\Socket.h"/>
@ -383,6 +385,11 @@
<ClInclude Include="include\Poco\Net\TCPServerConnectionFactory.h"/>
<ClInclude Include="include\Poco\Net\TCPServerDispatcher.h"/>
<ClInclude Include="include\Poco\Net\TCPServerParams.h"/>
<ClInclude Include="include\Poco\Net\UDPClient.h"/>
<ClInclude Include="include\Poco\Net\UDPHandler.h"/>
<ClInclude Include="include\Poco\Net\UDPServer.h"/>
<ClInclude Include="include\Poco\Net\UDPServerParams.h"/>
<ClInclude Include="include\Poco\Net\UDPSocketReader.h"/>
<ClInclude Include="include\Poco\Net\WebSocket.h"/>
<ClInclude Include="include\Poco\Net\WebSocketImpl.h"/>
</ItemGroup>
@ -485,6 +492,8 @@
<ClCompile Include="src\TCPServerConnectionFactory.cpp"/>
<ClCompile Include="src\TCPServerDispatcher.cpp"/>
<ClCompile Include="src\TCPServerParams.cpp"/>
<ClCompile Include="src\UDPClient.cpp"/>
<ClCompile Include="src\UDPServerParams.cpp"/>
<ClCompile Include="src\WebSocket.cpp"/>
<ClCompile Include="src\WebSocketImpl.cpp"/>
</ItemGroup>

View File

@ -2,148 +2,157 @@
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Filter Include="NetCore">
<UniqueIdentifier>{1e635be4-8e33-4a16-b606-3ea1a75d434e}</UniqueIdentifier>
<UniqueIdentifier>{20226d40-f12e-4d93-a047-91b335d171d8}</UniqueIdentifier>
</Filter>
<Filter Include="NetCore\Header Files">
<UniqueIdentifier>{df13f6bc-d5ae-4132-9445-3f2fd5dd1e35}</UniqueIdentifier>
<UniqueIdentifier>{3f28f279-7cd2-4b18-9c22-9255108b440a}</UniqueIdentifier>
</Filter>
<Filter Include="NetCore\Source Files">
<UniqueIdentifier>{a22925d7-6207-489b-a3c8-65b60201f80e}</UniqueIdentifier>
<UniqueIdentifier>{d592797d-4447-4653-b006-c05f42aa3d1a}</UniqueIdentifier>
</Filter>
<Filter Include="Sockets">
<UniqueIdentifier>{75289941-49ff-405d-90ac-c3fcca4c1381}</UniqueIdentifier>
<UniqueIdentifier>{89d30108-61cd-409e-978e-bfee24b2c544}</UniqueIdentifier>
</Filter>
<Filter Include="Sockets\Header Files">
<UniqueIdentifier>{6ef2a968-144c-488a-9809-6a771e885957}</UniqueIdentifier>
<UniqueIdentifier>{3685a932-3a17-4d73-a760-d594ce59bdf4}</UniqueIdentifier>
</Filter>
<Filter Include="Sockets\Source Files">
<UniqueIdentifier>{3c89546d-0118-4150-9119-2a6ddb31694a}</UniqueIdentifier>
<UniqueIdentifier>{b7fe022c-4ab8-4baa-b094-4890ba4e1890}</UniqueIdentifier>
</Filter>
<Filter Include="Messages">
<UniqueIdentifier>{2a707bf2-6006-4ea0-9021-460b12eb03b1}</UniqueIdentifier>
<UniqueIdentifier>{4173068f-0ac9-4bc3-8cc2-90ed730815ad}</UniqueIdentifier>
</Filter>
<Filter Include="Messages\Header Files">
<UniqueIdentifier>{8e293f27-98b5-4770-b989-39b434be7017}</UniqueIdentifier>
<UniqueIdentifier>{ca5341c5-ede1-4a99-a750-c553df90567c}</UniqueIdentifier>
</Filter>
<Filter Include="Messages\Source Files">
<UniqueIdentifier>{f830ea6c-9b77-495a-91a5-8c1911868ef8}</UniqueIdentifier>
<UniqueIdentifier>{eae22c1f-a613-4b70-b2b8-3210530d8347}</UniqueIdentifier>
</Filter>
<Filter Include="HTTP">
<UniqueIdentifier>{59e6a108-b670-4131-96c5-a90a386d9dde}</UniqueIdentifier>
<UniqueIdentifier>{612ceec5-0f2b-4e0f-a344-cdf9c0f4497d}</UniqueIdentifier>
</Filter>
<Filter Include="HTTP\Header Files">
<UniqueIdentifier>{eaab392f-0958-468c-b0f3-52096f1fca6d}</UniqueIdentifier>
<UniqueIdentifier>{ed856472-c113-46c9-989b-f92f17fc56e0}</UniqueIdentifier>
</Filter>
<Filter Include="HTTP\Source Files">
<UniqueIdentifier>{6e6fbf4c-debc-464e-bcf0-4f060d6a6569}</UniqueIdentifier>
<UniqueIdentifier>{a75f2870-f628-46d8-a4d3-ba452923cca3}</UniqueIdentifier>
</Filter>
<Filter Include="TCPServer">
<UniqueIdentifier>{ad760145-9d66-4885-b9c7-1fe4fa8fbc0e}</UniqueIdentifier>
<UniqueIdentifier>{69440fc1-9228-4345-a1c2-0c04e4d37ff0}</UniqueIdentifier>
</Filter>
<Filter Include="TCPServer\Header Files">
<UniqueIdentifier>{91688cbc-6ffe-4874-9925-09d27913adf7}</UniqueIdentifier>
<UniqueIdentifier>{cc896121-0606-4507-87b2-e4b76245f6c2}</UniqueIdentifier>
</Filter>
<Filter Include="TCPServer\Source Files">
<UniqueIdentifier>{7f30e5b0-1a36-466f-9e8a-3748752154b9}</UniqueIdentifier>
<UniqueIdentifier>{3d47ca95-1ec9-4d1a-ae65-d2568636aed3}</UniqueIdentifier>
</Filter>
<Filter Include="HTTPServer">
<UniqueIdentifier>{7e34bdc1-5dd7-4a3c-ba64-27c43158ea6a}</UniqueIdentifier>
<UniqueIdentifier>{844dc5d5-943c-4374-a0dd-9ca3e683cbf7}</UniqueIdentifier>
</Filter>
<Filter Include="HTTPServer\Header Files">
<UniqueIdentifier>{514e46a9-1236-4f51-9892-202a1bbac256}</UniqueIdentifier>
<UniqueIdentifier>{4e39a4e7-3d0a-4bd6-8a43-83db7db862b9}</UniqueIdentifier>
</Filter>
<Filter Include="HTTPServer\Source Files">
<UniqueIdentifier>{86af4f6c-61e2-49e6-87ae-4350ce816d76}</UniqueIdentifier>
<UniqueIdentifier>{33663199-5274-4c91-a08c-b46c9335716b}</UniqueIdentifier>
</Filter>
<Filter Include="HTTPClient">
<UniqueIdentifier>{1e1c8ada-a8c0-400f-995c-a853b4dbc422}</UniqueIdentifier>
<UniqueIdentifier>{0a1b2f6a-cee3-4c12-904f-455f583fcd10}</UniqueIdentifier>
</Filter>
<Filter Include="HTTPClient\Header Files">
<UniqueIdentifier>{e4d581c2-7277-4074-86a3-9d70ec3bf228}</UniqueIdentifier>
<UniqueIdentifier>{142f6855-779f-4fe1-98a7-40cdad53235c}</UniqueIdentifier>
</Filter>
<Filter Include="HTTPClient\Source Files">
<UniqueIdentifier>{dcbc57f5-16d1-40ff-8519-52d834ee4f89}</UniqueIdentifier>
<UniqueIdentifier>{7cd42e62-555a-48e3-9257-bb1f7fd96705}</UniqueIdentifier>
</Filter>
<Filter Include="HTML">
<UniqueIdentifier>{7d34cd9c-9073-4b47-bf0f-86fe0f22ef7d}</UniqueIdentifier>
<UniqueIdentifier>{093b4183-cfe6-4d64-96d2-e836c861fa0f}</UniqueIdentifier>
</Filter>
<Filter Include="HTML\Header Files">
<UniqueIdentifier>{a5dc23af-0f1b-41b4-af3a-7ef9f370a331}</UniqueIdentifier>
<UniqueIdentifier>{c3b2b040-cc63-45db-9e61-53f255a7b8e5}</UniqueIdentifier>
</Filter>
<Filter Include="HTML\Source Files">
<UniqueIdentifier>{88eb3d27-a806-47e4-b127-8d6e88152820}</UniqueIdentifier>
<UniqueIdentifier>{1d5803f9-f1df-4946-bb34-a2e1859c9f01}</UniqueIdentifier>
</Filter>
<Filter Include="FTPClient">
<UniqueIdentifier>{4272fbee-b793-4822-af52-f62de2d5ffdd}</UniqueIdentifier>
<UniqueIdentifier>{bcb39c8a-d124-428d-92b0-01275b149deb}</UniqueIdentifier>
</Filter>
<Filter Include="FTPClient\Header Files">
<UniqueIdentifier>{7a704b64-1076-467f-9785-646354e5f3dc}</UniqueIdentifier>
<UniqueIdentifier>{6f2e0d13-43a5-4e03-bdf0-b9c483f554cd}</UniqueIdentifier>
</Filter>
<Filter Include="FTPClient\Source Files">
<UniqueIdentifier>{e1dca0be-b536-419b-96bb-02d6b944e301}</UniqueIdentifier>
<UniqueIdentifier>{d06344fc-67f6-4a18-8910-7137db5b4eb5}</UniqueIdentifier>
</Filter>
<Filter Include="Reactor">
<UniqueIdentifier>{f13a8274-133f-4858-a9a4-8f824459f5e9}</UniqueIdentifier>
<UniqueIdentifier>{dd53c09f-ec3b-4fd8-9ede-2df2f2f71f5b}</UniqueIdentifier>
</Filter>
<Filter Include="Reactor\Header Files">
<UniqueIdentifier>{128adf4b-8c53-4afd-b3a0-4f4f9a9c0273}</UniqueIdentifier>
<UniqueIdentifier>{46422925-b98f-4b7d-9d31-65f1f92a405e}</UniqueIdentifier>
</Filter>
<Filter Include="Reactor\Source Files">
<UniqueIdentifier>{009ae12a-dde9-4144-a025-242d6af646b3}</UniqueIdentifier>
<UniqueIdentifier>{42dcbce7-d1a0-4645-a540-2906af73a4ae}</UniqueIdentifier>
</Filter>
<Filter Include="Mail">
<UniqueIdentifier>{fbcc447f-ccd0-4181-90cf-c26b38d3fc9c}</UniqueIdentifier>
<UniqueIdentifier>{5277930c-afaa-46da-9d2e-16d36333be9f}</UniqueIdentifier>
</Filter>
<Filter Include="Mail\Header Files">
<UniqueIdentifier>{75689e71-cd1d-43c3-b00f-fc0878486b46}</UniqueIdentifier>
<UniqueIdentifier>{10ed9005-a740-4621-bdbd-22e814c99cdc}</UniqueIdentifier>
</Filter>
<Filter Include="Mail\Source Files">
<UniqueIdentifier>{61520212-54c7-4156-9480-dd92c1476bf1}</UniqueIdentifier>
<UniqueIdentifier>{aaea55cb-0b7e-4bc7-aa6f-6f3fe058517c}</UniqueIdentifier>
</Filter>
<Filter Include="ICMP">
<UniqueIdentifier>{a63e3401-23cf-4cba-a939-a6b133e3dff7}</UniqueIdentifier>
<UniqueIdentifier>{ce4a6a5c-9fb3-4b89-b869-7f3015e0f576}</UniqueIdentifier>
</Filter>
<Filter Include="ICMP\Header Files">
<UniqueIdentifier>{3148caaa-ab31-4d6d-a7ca-8bf37d60322c}</UniqueIdentifier>
<UniqueIdentifier>{fa8c8263-1ba5-431a-ba5e-fab5ba4519f9}</UniqueIdentifier>
</Filter>
<Filter Include="ICMP\Source Files">
<UniqueIdentifier>{9593943a-600f-482a-9d3d-ed4059cdee6d}</UniqueIdentifier>
<UniqueIdentifier>{a37dd266-d220-41fe-b0f5-e4a324c65e15}</UniqueIdentifier>
</Filter>
<Filter Include="NTP">
<UniqueIdentifier>{a8597d1b-52fa-401d-ba47-a16069a46115}</UniqueIdentifier>
<UniqueIdentifier>{8ecd65fc-aa96-484f-a2c3-fe64c199f3b5}</UniqueIdentifier>
</Filter>
<Filter Include="NTP\Header Files">
<UniqueIdentifier>{d292a2fa-688c-46d8-84d4-db85e3e4a49a}</UniqueIdentifier>
<UniqueIdentifier>{dce62d3c-ba92-4163-884a-8d74bb37f2ac}</UniqueIdentifier>
</Filter>
<Filter Include="NTP\Source Files">
<UniqueIdentifier>{0d9e7ada-02e1-4ad7-bbbc-63e38d3a87e7}</UniqueIdentifier>
<UniqueIdentifier>{4d4c3689-9575-49f0-a46d-8207821bd008}</UniqueIdentifier>
</Filter>
<Filter Include="Logging">
<UniqueIdentifier>{940a00b6-f2f9-47a0-86dc-af37329b3061}</UniqueIdentifier>
<UniqueIdentifier>{56cd246f-769c-4f04-861e-52c73ff2cdfc}</UniqueIdentifier>
</Filter>
<Filter Include="Logging\Header Files">
<UniqueIdentifier>{84552020-14d3-496c-83dd-6687aab93f5a}</UniqueIdentifier>
<UniqueIdentifier>{05e1cee3-82c3-413d-a50e-e6ec977d05be}</UniqueIdentifier>
</Filter>
<Filter Include="Logging\Source Files">
<UniqueIdentifier>{d7d0d2ce-4b0b-44e6-9873-b13e07c763c3}</UniqueIdentifier>
<UniqueIdentifier>{ccc8ece7-11d6-43d1-83b1-b29018543e26}</UniqueIdentifier>
</Filter>
<Filter Include="WebSocket">
<UniqueIdentifier>{9cf79b10-a544-4dd4-86a7-242c2533e511}</UniqueIdentifier>
<UniqueIdentifier>{99272443-ebf1-4c46-98cf-7a078a2b27b5}</UniqueIdentifier>
</Filter>
<Filter Include="WebSocket\Header Files">
<UniqueIdentifier>{e0f6bb8d-a9ee-4861-abd8-7a7b98240fda}</UniqueIdentifier>
<UniqueIdentifier>{4fac6bdf-e248-4814-ad50-5c18a41de7f7}</UniqueIdentifier>
</Filter>
<Filter Include="WebSocket\Source Files">
<UniqueIdentifier>{3293491b-5e47-459f-ae4f-0f9a543566d8}</UniqueIdentifier>
<UniqueIdentifier>{dfa8ffe1-6a7a-48ee-b80c-c48c66a77cda}</UniqueIdentifier>
</Filter>
<Filter Include="OAuth">
<UniqueIdentifier>{d47e578f-d697-4255-8476-86d67c4f5587}</UniqueIdentifier>
<UniqueIdentifier>{f1d8f472-6b43-4835-9c9f-1e06d9b89226}</UniqueIdentifier>
</Filter>
<Filter Include="OAuth\Header Files">
<UniqueIdentifier>{6444989f-ffde-4317-a5e0-d34a45c7a339}</UniqueIdentifier>
<UniqueIdentifier>{15a0b857-9eef-4640-9ec5-455cb78398cc}</UniqueIdentifier>
</Filter>
<Filter Include="OAuth\Source Files">
<UniqueIdentifier>{b828f53a-e2fb-4d26-99ad-195145130238}</UniqueIdentifier>
<UniqueIdentifier>{953a7cb0-61fd-491b-b8c1-279cd814c8d6}</UniqueIdentifier>
</Filter>
<Filter Include="UDP">
<UniqueIdentifier>{b7ed54d8-a138-486e-a349-114664dd7876}</UniqueIdentifier>
</Filter>
<Filter Include="UDP\Source Files">
<UniqueIdentifier>{0d50ea4d-4875-4268-92b0-d5ca0859fa29}</UniqueIdentifier>
</Filter>
<Filter Include="UDP\Header Files">
<UniqueIdentifier>{6f5c8ac8-585e-410a-9f7f-d3c50b5cba4a}</UniqueIdentifier>
</Filter>
</ItemGroup>
<ItemGroup>
@ -465,6 +474,27 @@
<ClInclude Include="include\Poco\Net\OAuth20Credentials.h">
<Filter>OAuth\Header Files</Filter>
</ClInclude>
<ClInclude Include="include\Poco\Net\MultiSocketPoller.h">
<Filter>UDP\Header Files</Filter>
</ClInclude>
<ClInclude Include="include\Poco\Net\SingleSocketPoller.h">
<Filter>UDP\Header Files</Filter>
</ClInclude>
<ClInclude Include="include\Poco\Net\UDPClient.h">
<Filter>UDP\Header Files</Filter>
</ClInclude>
<ClInclude Include="include\Poco\Net\UDPHandler.h">
<Filter>UDP\Header Files</Filter>
</ClInclude>
<ClInclude Include="include\Poco\Net\UDPServer.h">
<Filter>UDP\Header Files</Filter>
</ClInclude>
<ClInclude Include="include\Poco\Net\UDPServerParams.h">
<Filter>UDP\Header Files</Filter>
</ClInclude>
<ClInclude Include="include\Poco\Net\UDPSocketReader.h">
<Filter>UDP\Header Files</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<ClCompile Include="src\DNS.cpp">
@ -767,6 +797,12 @@
<ClCompile Include="src\OAuth20Credentials.cpp">
<Filter>OAuth\Source Files</Filter>
</ClCompile>
<ClCompile Include="src\UDPClient.cpp">
<Filter>UDP\Source Files</Filter>
</ClCompile>
<ClCompile Include="src\UDPServerParams.cpp">
<Filter>UDP\Source Files</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="..\DLLVersion.rc" />

View File

@ -85,7 +85,7 @@
</ImportGroup>
<PropertyGroup Label="UserMacros"/>
<PropertyGroup>
<_ProjectFileVersion>14.0.25420.1</_ProjectFileVersion>
<_ProjectFileVersion>14.0.25431.1</_ProjectFileVersion>
<TargetName Condition="'$(Configuration)|$(Platform)'=='debug_shared|Win32'">PocoNetd</TargetName>
<TargetName Condition="'$(Configuration)|$(Platform)'=='debug_static_md|Win32'">PocoNetmdd</TargetName>
<TargetName Condition="'$(Configuration)|$(Platform)'=='debug_static_mt|Win32'">PocoNetmtd</TargetName>
@ -337,6 +337,7 @@
<ClInclude Include="include\Poco\Net\MulticastSocket.h"/>
<ClInclude Include="include\Poco\Net\MultipartReader.h"/>
<ClInclude Include="include\Poco\Net\MultipartWriter.h"/>
<ClInclude Include="include\Poco\Net\MultiSocketPoller.h"/>
<ClInclude Include="include\Poco\Net\NameValueCollection.h"/>
<ClInclude Include="include\Poco\Net\Net.h"/>
<ClInclude Include="include\Poco\Net\NetException.h"/>
@ -362,6 +363,7 @@
<ClInclude Include="include\Poco\Net\RemoteSyslogListener.h"/>
<ClInclude Include="include\Poco\Net\ServerSocket.h"/>
<ClInclude Include="include\Poco\Net\ServerSocketImpl.h"/>
<ClInclude Include="include\Poco\Net\SingleSocketPoller.h"/>
<ClInclude Include="include\Poco\Net\SMTPChannel.h"/>
<ClInclude Include="include\Poco\Net\SMTPClientSession.h"/>
<ClInclude Include="include\Poco\Net\Socket.h"/>
@ -383,6 +385,11 @@
<ClInclude Include="include\Poco\Net\TCPServerConnectionFactory.h"/>
<ClInclude Include="include\Poco\Net\TCPServerDispatcher.h"/>
<ClInclude Include="include\Poco\Net\TCPServerParams.h"/>
<ClInclude Include="include\Poco\Net\UDPClient.h"/>
<ClInclude Include="include\Poco\Net\UDPHandler.h"/>
<ClInclude Include="include\Poco\Net\UDPServer.h"/>
<ClInclude Include="include\Poco\Net\UDPServerParams.h"/>
<ClInclude Include="include\Poco\Net\UDPSocketReader.h"/>
<ClInclude Include="include\Poco\Net\WebSocket.h"/>
<ClInclude Include="include\Poco\Net\WebSocketImpl.h"/>
</ItemGroup>
@ -485,6 +492,8 @@
<ClCompile Include="src\TCPServerConnectionFactory.cpp"/>
<ClCompile Include="src\TCPServerDispatcher.cpp"/>
<ClCompile Include="src\TCPServerParams.cpp"/>
<ClCompile Include="src\UDPClient.cpp"/>
<ClCompile Include="src\UDPServerParams.cpp"/>
<ClCompile Include="src\WebSocket.cpp"/>
<ClCompile Include="src\WebSocketImpl.cpp"/>
</ItemGroup>

View File

@ -2,148 +2,157 @@
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Filter Include="NetCore">
<UniqueIdentifier>{e13faa94-c376-421f-b867-4c5535275306}</UniqueIdentifier>
<UniqueIdentifier>{327293f1-d0c0-43e2-88d9-6338c64d3663}</UniqueIdentifier>
</Filter>
<Filter Include="NetCore\Header Files">
<UniqueIdentifier>{014a2ad0-aade-45c8-a94a-348549ffc89b}</UniqueIdentifier>
<UniqueIdentifier>{802ea8e2-0727-499f-a42b-36c4fb985992}</UniqueIdentifier>
</Filter>
<Filter Include="NetCore\Source Files">
<UniqueIdentifier>{84789459-38f3-43fb-b817-073ddebc42e1}</UniqueIdentifier>
<UniqueIdentifier>{1f1df6fc-0ea4-43d6-bdf6-67b6601e9191}</UniqueIdentifier>
</Filter>
<Filter Include="Sockets">
<UniqueIdentifier>{b7976ba0-3922-49bb-a57e-c544bfb3ee08}</UniqueIdentifier>
<UniqueIdentifier>{20978521-ab21-43d5-9fe2-31ecade5cae3}</UniqueIdentifier>
</Filter>
<Filter Include="Sockets\Header Files">
<UniqueIdentifier>{6686e891-8fa7-44a7-9ff9-0a32f55980b9}</UniqueIdentifier>
<UniqueIdentifier>{f8ec4aa1-d0e9-40b8-8583-0a9f13e61ef5}</UniqueIdentifier>
</Filter>
<Filter Include="Sockets\Source Files">
<UniqueIdentifier>{2e4075ee-ed3b-435f-85cc-f3c5129068a4}</UniqueIdentifier>
<UniqueIdentifier>{357e66ab-a760-4fe5-9ed2-c04027abf116}</UniqueIdentifier>
</Filter>
<Filter Include="Messages">
<UniqueIdentifier>{d6c148a8-0670-4626-9e30-dc5e6fb8a286}</UniqueIdentifier>
<UniqueIdentifier>{15c43f53-4c06-453b-bfaf-ea23efc5f75f}</UniqueIdentifier>
</Filter>
<Filter Include="Messages\Header Files">
<UniqueIdentifier>{12081d7a-41fc-4ab8-a178-d09b6e0444e3}</UniqueIdentifier>
<UniqueIdentifier>{86661b65-52df-4c89-b1b2-18d1ce425dba}</UniqueIdentifier>
</Filter>
<Filter Include="Messages\Source Files">
<UniqueIdentifier>{6dabfc40-72f7-478b-b9ea-c442b231f080}</UniqueIdentifier>
<UniqueIdentifier>{0adb0116-c65b-4853-929e-ada17c6eb45e}</UniqueIdentifier>
</Filter>
<Filter Include="HTTP">
<UniqueIdentifier>{06a9859e-3c1f-4202-a2e7-bf71adeb1ac8}</UniqueIdentifier>
<UniqueIdentifier>{c17dd89f-9d2b-4274-b124-0aeb0a3788f6}</UniqueIdentifier>
</Filter>
<Filter Include="HTTP\Header Files">
<UniqueIdentifier>{4843c85a-dbe3-423a-9b2b-9fd76c8c33fa}</UniqueIdentifier>
<UniqueIdentifier>{4a6ce9d6-7db9-4a98-9a1f-6fc06e7f047f}</UniqueIdentifier>
</Filter>
<Filter Include="HTTP\Source Files">
<UniqueIdentifier>{67208e25-3e42-4c55-9402-b717d6475c1b}</UniqueIdentifier>
<UniqueIdentifier>{bef0ac6a-9f35-4b7c-97f5-d538f387ada1}</UniqueIdentifier>
</Filter>
<Filter Include="TCPServer">
<UniqueIdentifier>{f0b2df8c-bbda-48d9-8285-a1915fddfe41}</UniqueIdentifier>
<UniqueIdentifier>{327b7d17-6574-4024-96da-4d0679df4d90}</UniqueIdentifier>
</Filter>
<Filter Include="TCPServer\Header Files">
<UniqueIdentifier>{98520baa-c1a3-4434-9a2c-8e6e25536f93}</UniqueIdentifier>
<UniqueIdentifier>{4479ec0a-9ba1-447a-bcd3-d4f2f199e4bb}</UniqueIdentifier>
</Filter>
<Filter Include="TCPServer\Source Files">
<UniqueIdentifier>{39071312-dda5-4790-ad5f-11d8e5555cde}</UniqueIdentifier>
<UniqueIdentifier>{44ba159b-5e9a-4c56-81b5-5cb493327551}</UniqueIdentifier>
</Filter>
<Filter Include="HTTPServer">
<UniqueIdentifier>{899b7866-6959-4016-92e2-f636e78ed44b}</UniqueIdentifier>
<UniqueIdentifier>{1581dc0f-aafb-4746-b6b6-34b4a5007ff8}</UniqueIdentifier>
</Filter>
<Filter Include="HTTPServer\Header Files">
<UniqueIdentifier>{0c658dfe-ee5b-4290-a5ab-f8c68d855c0e}</UniqueIdentifier>
<UniqueIdentifier>{aeb30e63-24cd-45f8-b1af-75508d12dd6f}</UniqueIdentifier>
</Filter>
<Filter Include="HTTPServer\Source Files">
<UniqueIdentifier>{80f3b0bb-ab22-42d3-a744-780824f89558}</UniqueIdentifier>
<UniqueIdentifier>{4b37463b-0a68-4a10-9f91-9b6ad71a2390}</UniqueIdentifier>
</Filter>
<Filter Include="HTTPClient">
<UniqueIdentifier>{452b370d-1920-495f-b358-1f2ef8eb3133}</UniqueIdentifier>
<UniqueIdentifier>{290e0abc-2fde-4545-8f89-c42684b4a0e5}</UniqueIdentifier>
</Filter>
<Filter Include="HTTPClient\Header Files">
<UniqueIdentifier>{f8784f7b-f0a1-49ac-891c-122dd828b7c3}</UniqueIdentifier>
<UniqueIdentifier>{a57692cf-b95c-47f4-9e6b-2e37c5a3607d}</UniqueIdentifier>
</Filter>
<Filter Include="HTTPClient\Source Files">
<UniqueIdentifier>{305a2698-16d5-437b-8d17-2bfc68f5670c}</UniqueIdentifier>
<UniqueIdentifier>{433a9ed3-4cfd-40f0-91d3-d4ab058dc9c3}</UniqueIdentifier>
</Filter>
<Filter Include="HTML">
<UniqueIdentifier>{805164a3-fda9-4523-b0d0-9a3634e079de}</UniqueIdentifier>
<UniqueIdentifier>{9c6c1e11-3052-4be7-9027-00a81dcf7967}</UniqueIdentifier>
</Filter>
<Filter Include="HTML\Header Files">
<UniqueIdentifier>{4029e229-c0ad-4661-b624-cb938273cf1e}</UniqueIdentifier>
<UniqueIdentifier>{cf08a45e-639e-4edf-a548-4a23f88e5bc3}</UniqueIdentifier>
</Filter>
<Filter Include="HTML\Source Files">
<UniqueIdentifier>{0d65aebd-95f5-4c1a-8238-d0d582379cdb}</UniqueIdentifier>
<UniqueIdentifier>{8e9e0e9d-0904-404a-ad84-94428cc8f08b}</UniqueIdentifier>
</Filter>
<Filter Include="FTPClient">
<UniqueIdentifier>{5295034e-8fea-4065-9074-d85d1e2a85c2}</UniqueIdentifier>
<UniqueIdentifier>{42dde18e-1b9c-407e-8765-6d6510a7ec8a}</UniqueIdentifier>
</Filter>
<Filter Include="FTPClient\Header Files">
<UniqueIdentifier>{b42bedb0-5e65-454e-9986-10c690e2e393}</UniqueIdentifier>
<UniqueIdentifier>{12a06421-9e81-4c96-884f-b4ce5271a4bb}</UniqueIdentifier>
</Filter>
<Filter Include="FTPClient\Source Files">
<UniqueIdentifier>{988ad0f5-aac2-409f-98bb-56524ce7ae3c}</UniqueIdentifier>
<UniqueIdentifier>{a722934d-e726-48d5-ad97-b0111b91adf1}</UniqueIdentifier>
</Filter>
<Filter Include="Reactor">
<UniqueIdentifier>{fded5aad-b84e-4747-b950-64a416018826}</UniqueIdentifier>
<UniqueIdentifier>{537bc1f0-021d-47b0-8480-dcb5a751c60b}</UniqueIdentifier>
</Filter>
<Filter Include="Reactor\Header Files">
<UniqueIdentifier>{6aa30fba-2a41-435f-aac4-429e121f66bc}</UniqueIdentifier>
<UniqueIdentifier>{1d046918-90a0-4782-9cfd-10a444f0f6a9}</UniqueIdentifier>
</Filter>
<Filter Include="Reactor\Source Files">
<UniqueIdentifier>{165a913c-5c2a-4e41-9eab-1b993329f8b0}</UniqueIdentifier>
<UniqueIdentifier>{02032d59-badb-4c20-a36d-397442e3ccea}</UniqueIdentifier>
</Filter>
<Filter Include="Mail">
<UniqueIdentifier>{8cbbf831-0b36-41dc-a778-544cd564bc23}</UniqueIdentifier>
<UniqueIdentifier>{109e5c7c-82f5-4130-ae13-99f286b33339}</UniqueIdentifier>
</Filter>
<Filter Include="Mail\Header Files">
<UniqueIdentifier>{9e26c752-c056-4441-8048-e87ea2d5f01b}</UniqueIdentifier>
<UniqueIdentifier>{a509c79d-8ea4-4a92-b2b4-fbcda8e195b6}</UniqueIdentifier>
</Filter>
<Filter Include="Mail\Source Files">
<UniqueIdentifier>{adbf62d8-e005-4ba4-a42b-5b209ceb409d}</UniqueIdentifier>
<UniqueIdentifier>{575c78ad-d3ce-482e-b1bd-0565c4347ddc}</UniqueIdentifier>
</Filter>
<Filter Include="ICMP">
<UniqueIdentifier>{cb56d3a9-3e95-492d-bbea-76d337504eb3}</UniqueIdentifier>
<UniqueIdentifier>{9abdae83-305a-4029-8ddf-851a35ff84c3}</UniqueIdentifier>
</Filter>
<Filter Include="ICMP\Header Files">
<UniqueIdentifier>{530bdd12-0e44-4581-8280-e781b1386685}</UniqueIdentifier>
<UniqueIdentifier>{0c026b6a-aec0-40d8-bdaf-8b5bdfcf400f}</UniqueIdentifier>
</Filter>
<Filter Include="ICMP\Source Files">
<UniqueIdentifier>{41bd4080-3b50-4efc-bb2d-393cf8196d4d}</UniqueIdentifier>
<UniqueIdentifier>{6faa64c5-ad49-46af-9440-7ff992a42edc}</UniqueIdentifier>
</Filter>
<Filter Include="NTP">
<UniqueIdentifier>{b1530c78-b818-4305-aa81-7ce8bbaa971d}</UniqueIdentifier>
<UniqueIdentifier>{3f71f93c-171b-4ce5-bd80-b358d93f1f14}</UniqueIdentifier>
</Filter>
<Filter Include="NTP\Header Files">
<UniqueIdentifier>{fb5d6634-ac71-48d7-9274-fd12348f2f04}</UniqueIdentifier>
<UniqueIdentifier>{12a46f2f-a165-410d-9c0c-1aeffa7f59f0}</UniqueIdentifier>
</Filter>
<Filter Include="NTP\Source Files">
<UniqueIdentifier>{7ebc262e-b275-4947-90ad-12609179bf76}</UniqueIdentifier>
<UniqueIdentifier>{e9d2a8fa-42d3-43ac-aef0-b440a6aab1d9}</UniqueIdentifier>
</Filter>
<Filter Include="Logging">
<UniqueIdentifier>{5a880ee9-edfe-4db9-8268-0c78afbd4709}</UniqueIdentifier>
<UniqueIdentifier>{4550d9ea-842b-4973-829d-45aecb1dd879}</UniqueIdentifier>
</Filter>
<Filter Include="Logging\Header Files">
<UniqueIdentifier>{253769a3-0511-439c-b90f-41ff291ab983}</UniqueIdentifier>
<UniqueIdentifier>{3b2ccb96-8122-4ff9-ad9e-6482c3dba58e}</UniqueIdentifier>
</Filter>
<Filter Include="Logging\Source Files">
<UniqueIdentifier>{3d057e1e-ac64-4757-91c5-e0d50fef4e89}</UniqueIdentifier>
<UniqueIdentifier>{55492259-88e8-42b8-8073-306c3e70be66}</UniqueIdentifier>
</Filter>
<Filter Include="WebSocket">
<UniqueIdentifier>{8bce73c2-faf0-4c48-9fd1-0ec39371eaad}</UniqueIdentifier>
<UniqueIdentifier>{bbec80bd-f48f-46ca-babf-2239a22bbf46}</UniqueIdentifier>
</Filter>
<Filter Include="WebSocket\Header Files">
<UniqueIdentifier>{ce839f95-b667-462e-9866-52413285fea9}</UniqueIdentifier>
<UniqueIdentifier>{21493a26-7e65-428c-8435-bf0c68dca5d9}</UniqueIdentifier>
</Filter>
<Filter Include="WebSocket\Source Files">
<UniqueIdentifier>{324d6c1d-06a3-464f-a8b6-5fd016cdc7d5}</UniqueIdentifier>
<UniqueIdentifier>{2eda151e-32b0-48b3-a744-dbcba43de5a7}</UniqueIdentifier>
</Filter>
<Filter Include="OAuth">
<UniqueIdentifier>{6e678ce3-5f43-4ce8-82cd-be1b92a04557}</UniqueIdentifier>
<UniqueIdentifier>{8a2c0cb5-5663-4cf2-bfb4-68ecdc2143b1}</UniqueIdentifier>
</Filter>
<Filter Include="OAuth\Header Files">
<UniqueIdentifier>{03208067-3290-4b25-bde3-21eed0a3fbe4}</UniqueIdentifier>
<UniqueIdentifier>{fe9de743-562e-4919-baed-582ab7d4a412}</UniqueIdentifier>
</Filter>
<Filter Include="OAuth\Source Files">
<UniqueIdentifier>{14a81c8b-a940-4569-8daa-e8d8d218dd5c}</UniqueIdentifier>
<UniqueIdentifier>{4bae7e10-9878-4225-a851-38919129cf51}</UniqueIdentifier>
</Filter>
<Filter Include="UDP">
<UniqueIdentifier>{0c2decbf-0f48-495f-9fdd-5ed2a6a3b7f2}</UniqueIdentifier>
</Filter>
<Filter Include="UDP\Source Files">
<UniqueIdentifier>{4844915f-4d8a-4d0c-a90c-5505abcc8464}</UniqueIdentifier>
</Filter>
<Filter Include="UDP\Header Files">
<UniqueIdentifier>{3543e216-de43-4d98-88cd-f0a2da4d6925}</UniqueIdentifier>
</Filter>
</ItemGroup>
<ItemGroup>
@ -465,6 +474,27 @@
<ClInclude Include="include\Poco\Net\OAuth20Credentials.h">
<Filter>OAuth\Header Files</Filter>
</ClInclude>
<ClInclude Include="include\Poco\Net\MultiSocketPoller.h">
<Filter>UDP\Header Files</Filter>
</ClInclude>
<ClInclude Include="include\Poco\Net\SingleSocketPoller.h">
<Filter>UDP\Header Files</Filter>
</ClInclude>
<ClInclude Include="include\Poco\Net\UDPClient.h">
<Filter>UDP\Header Files</Filter>
</ClInclude>
<ClInclude Include="include\Poco\Net\UDPHandler.h">
<Filter>UDP\Header Files</Filter>
</ClInclude>
<ClInclude Include="include\Poco\Net\UDPServer.h">
<Filter>UDP\Header Files</Filter>
</ClInclude>
<ClInclude Include="include\Poco\Net\UDPServerParams.h">
<Filter>UDP\Header Files</Filter>
</ClInclude>
<ClInclude Include="include\Poco\Net\UDPSocketReader.h">
<Filter>UDP\Header Files</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<ClCompile Include="src\DNS.cpp">
@ -767,6 +797,12 @@
<ClCompile Include="src\OAuth20Credentials.cpp">
<Filter>OAuth\Source Files</Filter>
</ClCompile>
<ClCompile Include="src\UDPClient.cpp">
<Filter>UDP\Source Files</Filter>
</ClCompile>
<ClCompile Include="src\UDPServerParams.cpp">
<Filter>UDP\Source Files</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="..\DLLVersion.rc" />

View File

@ -85,7 +85,7 @@
</ImportGroup>
<PropertyGroup Label="UserMacros"/>
<PropertyGroup>
<_ProjectFileVersion>15.0.26228.4</_ProjectFileVersion>
<_ProjectFileVersion>15.0.27428.2015</_ProjectFileVersion>
<TargetName Condition="'$(Configuration)|$(Platform)'=='debug_shared|Win32'">PocoNetd</TargetName>
<TargetName Condition="'$(Configuration)|$(Platform)'=='debug_static_md|Win32'">PocoNetmdd</TargetName>
<TargetName Condition="'$(Configuration)|$(Platform)'=='debug_static_mt|Win32'">PocoNetmtd</TargetName>
@ -337,6 +337,7 @@
<ClInclude Include="include\Poco\Net\MulticastSocket.h"/>
<ClInclude Include="include\Poco\Net\MultipartReader.h"/>
<ClInclude Include="include\Poco\Net\MultipartWriter.h"/>
<ClInclude Include="include\Poco\Net\MultiSocketPoller.h"/>
<ClInclude Include="include\Poco\Net\NameValueCollection.h"/>
<ClInclude Include="include\Poco\Net\Net.h"/>
<ClInclude Include="include\Poco\Net\NetException.h"/>
@ -362,6 +363,7 @@
<ClInclude Include="include\Poco\Net\RemoteSyslogListener.h"/>
<ClInclude Include="include\Poco\Net\ServerSocket.h"/>
<ClInclude Include="include\Poco\Net\ServerSocketImpl.h"/>
<ClInclude Include="include\Poco\Net\SingleSocketPoller.h"/>
<ClInclude Include="include\Poco\Net\SMTPChannel.h"/>
<ClInclude Include="include\Poco\Net\SMTPClientSession.h"/>
<ClInclude Include="include\Poco\Net\Socket.h"/>
@ -383,6 +385,11 @@
<ClInclude Include="include\Poco\Net\TCPServerConnectionFactory.h"/>
<ClInclude Include="include\Poco\Net\TCPServerDispatcher.h"/>
<ClInclude Include="include\Poco\Net\TCPServerParams.h"/>
<ClInclude Include="include\Poco\Net\UDPClient.h"/>
<ClInclude Include="include\Poco\Net\UDPHandler.h"/>
<ClInclude Include="include\Poco\Net\UDPServer.h"/>
<ClInclude Include="include\Poco\Net\UDPServerParams.h"/>
<ClInclude Include="include\Poco\Net\UDPSocketReader.h"/>
<ClInclude Include="include\Poco\Net\WebSocket.h"/>
<ClInclude Include="include\Poco\Net\WebSocketImpl.h"/>
</ItemGroup>
@ -485,6 +492,8 @@
<ClCompile Include="src\TCPServerConnectionFactory.cpp"/>
<ClCompile Include="src\TCPServerDispatcher.cpp"/>
<ClCompile Include="src\TCPServerParams.cpp"/>
<ClCompile Include="src\UDPClient.cpp"/>
<ClCompile Include="src\UDPServerParams.cpp"/>
<ClCompile Include="src\WebSocket.cpp"/>
<ClCompile Include="src\WebSocketImpl.cpp"/>
</ItemGroup>

View File

@ -2,148 +2,157 @@
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Filter Include="NetCore">
<UniqueIdentifier>{aac20767-0655-447b-a1e7-ad68af5e70c4}</UniqueIdentifier>
<UniqueIdentifier>{eb0d3175-49a6-4381-9ba7-497a1930d5ff}</UniqueIdentifier>
</Filter>
<Filter Include="NetCore\Header Files">
<UniqueIdentifier>{635ff895-975e-436d-b52a-f5f2e08402b1}</UniqueIdentifier>
<UniqueIdentifier>{0bb81fc2-2c02-4cad-a898-0540dfa9494e}</UniqueIdentifier>
</Filter>
<Filter Include="NetCore\Source Files">
<UniqueIdentifier>{32f72e89-e863-4b4d-92a4-370cb580e81a}</UniqueIdentifier>
<UniqueIdentifier>{95ba845a-f0c5-49ce-82e3-2556943fece3}</UniqueIdentifier>
</Filter>
<Filter Include="Sockets">
<UniqueIdentifier>{633a0ab0-5ee9-4341-acf2-b2f0afded777}</UniqueIdentifier>
<UniqueIdentifier>{11efb6cf-6685-4fd1-8992-e43266c4b444}</UniqueIdentifier>
</Filter>
<Filter Include="Sockets\Header Files">
<UniqueIdentifier>{88fc10fc-1bc7-4d27-b020-4b717e9ac766}</UniqueIdentifier>
<UniqueIdentifier>{7ab9bb92-8829-42b3-b5bf-867e33de961b}</UniqueIdentifier>
</Filter>
<Filter Include="Sockets\Source Files">
<UniqueIdentifier>{c13288b9-e65d-4c77-b155-c0d4cf46c86d}</UniqueIdentifier>
<UniqueIdentifier>{a65d7c8f-8318-4087-ad00-4957d99bb20c}</UniqueIdentifier>
</Filter>
<Filter Include="Messages">
<UniqueIdentifier>{992fc706-756a-4f56-8f27-6525d94f54ef}</UniqueIdentifier>
<UniqueIdentifier>{390b3ae5-8189-49f7-a8e1-296164539f22}</UniqueIdentifier>
</Filter>
<Filter Include="Messages\Header Files">
<UniqueIdentifier>{21f7c525-0d0a-4633-9d9b-0880a1d69788}</UniqueIdentifier>
<UniqueIdentifier>{7e1f57ae-a74d-40e2-a651-d227ff6a2361}</UniqueIdentifier>
</Filter>
<Filter Include="Messages\Source Files">
<UniqueIdentifier>{db8bde52-f0ed-4558-a9a9-ca2c78226b20}</UniqueIdentifier>
<UniqueIdentifier>{c2db779d-db53-4d24-b532-949f587bf4ce}</UniqueIdentifier>
</Filter>
<Filter Include="HTTP">
<UniqueIdentifier>{56e739a8-94d0-464c-854a-34c10a37185c}</UniqueIdentifier>
<UniqueIdentifier>{812176c7-7584-4c74-bf4f-e2f5b71f2d21}</UniqueIdentifier>
</Filter>
<Filter Include="HTTP\Header Files">
<UniqueIdentifier>{f877b7f1-7f00-48f7-8e33-7bcde4cfbc37}</UniqueIdentifier>
<UniqueIdentifier>{b88de86c-e0cc-478c-b935-fc673005c628}</UniqueIdentifier>
</Filter>
<Filter Include="HTTP\Source Files">
<UniqueIdentifier>{f8b0fa0d-685a-4a59-aff5-07099b95b0e0}</UniqueIdentifier>
<UniqueIdentifier>{b58bd750-ea42-473f-b998-612d814cb7e9}</UniqueIdentifier>
</Filter>
<Filter Include="TCPServer">
<UniqueIdentifier>{958a5a06-6dad-4539-ac8b-c67517dae842}</UniqueIdentifier>
<UniqueIdentifier>{2ac21899-fa95-4964-a440-4c526492e32f}</UniqueIdentifier>
</Filter>
<Filter Include="TCPServer\Header Files">
<UniqueIdentifier>{e0135028-5d2a-4307-b708-73783391d365}</UniqueIdentifier>
<UniqueIdentifier>{8311a2ab-aa08-45b0-b875-5b7822ceaa0d}</UniqueIdentifier>
</Filter>
<Filter Include="TCPServer\Source Files">
<UniqueIdentifier>{a48db34d-b95b-4f2b-9090-dd8028975efe}</UniqueIdentifier>
<UniqueIdentifier>{329667a3-6240-4fa1-8716-65121592ef8e}</UniqueIdentifier>
</Filter>
<Filter Include="HTTPServer">
<UniqueIdentifier>{d9ae00da-0e0d-4373-8682-7c4fbce11802}</UniqueIdentifier>
<UniqueIdentifier>{162dc987-14df-4d67-8d70-ee1c34d747e3}</UniqueIdentifier>
</Filter>
<Filter Include="HTTPServer\Header Files">
<UniqueIdentifier>{c6844c29-f217-467f-932b-ee30eb57bbb4}</UniqueIdentifier>
<UniqueIdentifier>{3f1ac9eb-90f3-4720-b8e3-132791477e0a}</UniqueIdentifier>
</Filter>
<Filter Include="HTTPServer\Source Files">
<UniqueIdentifier>{a8a368f0-b065-47de-a382-39c24e7fdf73}</UniqueIdentifier>
<UniqueIdentifier>{6bc43e99-8761-4f02-8f26-a4f5adc57aec}</UniqueIdentifier>
</Filter>
<Filter Include="HTTPClient">
<UniqueIdentifier>{fa57e930-8036-4ce0-8062-7896e1455605}</UniqueIdentifier>
<UniqueIdentifier>{64be7987-554b-4692-b081-8c65c2dbbff5}</UniqueIdentifier>
</Filter>
<Filter Include="HTTPClient\Header Files">
<UniqueIdentifier>{ec664dc4-b696-4c04-846f-7922f589fecf}</UniqueIdentifier>
<UniqueIdentifier>{6dcf8c06-856f-4143-90cc-5d8732e5f426}</UniqueIdentifier>
</Filter>
<Filter Include="HTTPClient\Source Files">
<UniqueIdentifier>{fde4d486-ad10-471f-9a20-64ae85819cf6}</UniqueIdentifier>
<UniqueIdentifier>{eaa8f79e-c294-4009-b832-0ddd639d8ba7}</UniqueIdentifier>
</Filter>
<Filter Include="HTML">
<UniqueIdentifier>{36839617-9c2b-45ca-99ee-26b2eb99553e}</UniqueIdentifier>
<UniqueIdentifier>{83c19ec4-0444-4ae6-8742-77076804a962}</UniqueIdentifier>
</Filter>
<Filter Include="HTML\Header Files">
<UniqueIdentifier>{1a950b4d-a441-43b7-97c1-a24415eef8fb}</UniqueIdentifier>
<UniqueIdentifier>{d7fad3e1-58bc-4c71-9a64-3fed964f5b35}</UniqueIdentifier>
</Filter>
<Filter Include="HTML\Source Files">
<UniqueIdentifier>{68736ac4-5f3c-420a-a048-784917418118}</UniqueIdentifier>
<UniqueIdentifier>{a387db79-dcb4-4afa-98f8-9fdb0891188c}</UniqueIdentifier>
</Filter>
<Filter Include="FTPClient">
<UniqueIdentifier>{31e5f98c-29a5-40a9-bcfc-01c1dda2dd3b}</UniqueIdentifier>
<UniqueIdentifier>{c7504644-bc5a-4990-943c-46dce27988cc}</UniqueIdentifier>
</Filter>
<Filter Include="FTPClient\Header Files">
<UniqueIdentifier>{565b7ecb-8974-405f-9649-4c862411d275}</UniqueIdentifier>
<UniqueIdentifier>{dcc830b4-88ec-4a64-96c3-6c031d02876d}</UniqueIdentifier>
</Filter>
<Filter Include="FTPClient\Source Files">
<UniqueIdentifier>{65ee0d87-9e1f-488a-b401-7555cfa50eb6}</UniqueIdentifier>
<UniqueIdentifier>{f42c974a-7fd3-49d3-84cc-e5724a1c7eb5}</UniqueIdentifier>
</Filter>
<Filter Include="Reactor">
<UniqueIdentifier>{23e2c192-45a5-4e1a-a101-e2bbb8495478}</UniqueIdentifier>
<UniqueIdentifier>{160a62b7-b037-4919-9774-e184d78665d3}</UniqueIdentifier>
</Filter>
<Filter Include="Reactor\Header Files">
<UniqueIdentifier>{90ccb97c-9172-4b62-83b9-84e20871640f}</UniqueIdentifier>
<UniqueIdentifier>{f69dc832-321f-4c0c-b74e-8e511aff3f0c}</UniqueIdentifier>
</Filter>
<Filter Include="Reactor\Source Files">
<UniqueIdentifier>{43e68ee1-5d22-4000-bb52-bd015448ce3e}</UniqueIdentifier>
<UniqueIdentifier>{af5a3f1a-80b7-4ea9-88b7-89ddfa70f2d5}</UniqueIdentifier>
</Filter>
<Filter Include="Mail">
<UniqueIdentifier>{51f6959d-75ba-4c41-8d62-5880fd04ff8d}</UniqueIdentifier>
<UniqueIdentifier>{55446d87-e1e7-415c-aeca-75e0f77c5878}</UniqueIdentifier>
</Filter>
<Filter Include="Mail\Header Files">
<UniqueIdentifier>{21510b32-9ed3-40bf-9c51-febe9aff37bd}</UniqueIdentifier>
<UniqueIdentifier>{a7181a07-86f7-45a3-a8a1-b691d45db670}</UniqueIdentifier>
</Filter>
<Filter Include="Mail\Source Files">
<UniqueIdentifier>{0a56f698-6901-4547-ba11-99aa677f9fe5}</UniqueIdentifier>
<UniqueIdentifier>{aac3e923-7695-4ea8-800e-f25fafa2c352}</UniqueIdentifier>
</Filter>
<Filter Include="ICMP">
<UniqueIdentifier>{a4dad996-529f-412f-8349-ea9289dde45a}</UniqueIdentifier>
<UniqueIdentifier>{d0905a38-cfbe-4fd5-9964-7e65624a0954}</UniqueIdentifier>
</Filter>
<Filter Include="ICMP\Header Files">
<UniqueIdentifier>{d69b2ba0-7d11-44c3-bf9e-a62298d9b3dc}</UniqueIdentifier>
<UniqueIdentifier>{14d6f18f-9d20-414e-acc2-1a80572411dc}</UniqueIdentifier>
</Filter>
<Filter Include="ICMP\Source Files">
<UniqueIdentifier>{66b37fb3-3828-4183-ae08-a3b37ff79664}</UniqueIdentifier>
<UniqueIdentifier>{0f64bbd1-ed96-438d-abe8-622713685ac4}</UniqueIdentifier>
</Filter>
<Filter Include="NTP">
<UniqueIdentifier>{b8819de8-ea10-4c9b-88b5-edf315b63858}</UniqueIdentifier>
<UniqueIdentifier>{bd78d35a-2303-42c7-bdf2-8fb7e55d90de}</UniqueIdentifier>
</Filter>
<Filter Include="NTP\Header Files">
<UniqueIdentifier>{83bedcc4-67d4-4da9-9b07-5b23af8e1083}</UniqueIdentifier>
<UniqueIdentifier>{a24bae6b-3b5b-481a-b3ac-66a941350410}</UniqueIdentifier>
</Filter>
<Filter Include="NTP\Source Files">
<UniqueIdentifier>{fa4f6c29-fde7-456b-9a52-1a83c5c6c4bb}</UniqueIdentifier>
<UniqueIdentifier>{b2845e81-fd8d-42b7-8a05-cd10206f9157}</UniqueIdentifier>
</Filter>
<Filter Include="Logging">
<UniqueIdentifier>{a9a7f484-63b1-408f-8d39-c2c6d825c49e}</UniqueIdentifier>
<UniqueIdentifier>{12f7bf7a-e22f-400b-91cb-fdcf4e1e33c3}</UniqueIdentifier>
</Filter>
<Filter Include="Logging\Header Files">
<UniqueIdentifier>{5cda3e90-26ba-4bc6-b0f8-c1fa56255b10}</UniqueIdentifier>
<UniqueIdentifier>{e1c0c1c3-637b-4ebd-9988-d7ebfc47d4bb}</UniqueIdentifier>
</Filter>
<Filter Include="Logging\Source Files">
<UniqueIdentifier>{79241a49-6578-4078-a2c8-263c2b81b82f}</UniqueIdentifier>
<UniqueIdentifier>{95dc64de-0ac0-498a-af51-d760848c6af6}</UniqueIdentifier>
</Filter>
<Filter Include="WebSocket">
<UniqueIdentifier>{3fb5a0a8-6466-47a2-a4c1-56ae6e923f87}</UniqueIdentifier>
<UniqueIdentifier>{f1236e38-4379-477d-bee5-c2f6407abb6c}</UniqueIdentifier>
</Filter>
<Filter Include="WebSocket\Header Files">
<UniqueIdentifier>{de998a84-7e6e-44aa-871d-6b936ed742c2}</UniqueIdentifier>
<UniqueIdentifier>{9bf079ae-cd56-4a5e-9a20-5dbc973e11eb}</UniqueIdentifier>
</Filter>
<Filter Include="WebSocket\Source Files">
<UniqueIdentifier>{a1a1f1bb-93ea-4031-9349-8b406ed23c2c}</UniqueIdentifier>
<UniqueIdentifier>{31c03ace-26e4-4075-8c94-ece8a93942e5}</UniqueIdentifier>
</Filter>
<Filter Include="OAuth">
<UniqueIdentifier>{3392428b-27ad-4a57-b37c-4c56ddc44805}</UniqueIdentifier>
<UniqueIdentifier>{374a50f2-0955-4fa7-a661-5f49fef1241b}</UniqueIdentifier>
</Filter>
<Filter Include="OAuth\Header Files">
<UniqueIdentifier>{8d3c098e-32bb-4449-bf92-3193a12d98de}</UniqueIdentifier>
<UniqueIdentifier>{a628ebc3-6be0-4c0d-a67f-43c02d621393}</UniqueIdentifier>
</Filter>
<Filter Include="OAuth\Source Files">
<UniqueIdentifier>{1275f026-6896-450e-9f17-30c160bac0ce}</UniqueIdentifier>
<UniqueIdentifier>{dadc280c-18d4-45a3-aca6-aa0ad4d73f8e}</UniqueIdentifier>
</Filter>
<Filter Include="UDP">
<UniqueIdentifier>{3cb9856e-0bda-45d2-a61d-bf3e50356423}</UniqueIdentifier>
</Filter>
<Filter Include="UDP\Source Files">
<UniqueIdentifier>{18903566-9d02-4c7e-bb5a-27f1c94a0352}</UniqueIdentifier>
</Filter>
<Filter Include="UDP\Header Files">
<UniqueIdentifier>{2f7bbb60-4d9d-4671-b5cc-f1b6164f745b}</UniqueIdentifier>
</Filter>
</ItemGroup>
<ItemGroup>
@ -465,6 +474,27 @@
<ClInclude Include="include\Poco\Net\OAuth20Credentials.h">
<Filter>OAuth\Header Files</Filter>
</ClInclude>
<ClInclude Include="include\Poco\Net\MultiSocketPoller.h">
<Filter>UDP\Header Files</Filter>
</ClInclude>
<ClInclude Include="include\Poco\Net\SingleSocketPoller.h">
<Filter>UDP\Header Files</Filter>
</ClInclude>
<ClInclude Include="include\Poco\Net\UDPClient.h">
<Filter>UDP\Header Files</Filter>
</ClInclude>
<ClInclude Include="include\Poco\Net\UDPHandler.h">
<Filter>UDP\Header Files</Filter>
</ClInclude>
<ClInclude Include="include\Poco\Net\UDPServer.h">
<Filter>UDP\Header Files</Filter>
</ClInclude>
<ClInclude Include="include\Poco\Net\UDPServerParams.h">
<Filter>UDP\Header Files</Filter>
</ClInclude>
<ClInclude Include="include\Poco\Net\UDPSocketReader.h">
<Filter>UDP\Header Files</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<ClCompile Include="src\DNS.cpp">
@ -767,6 +797,12 @@
<ClCompile Include="src\OAuth20Credentials.cpp">
<Filter>OAuth\Source Files</Filter>
</ClCompile>
<ClCompile Include="src\UDPClient.cpp">
<Filter>UDP\Source Files</Filter>
</ClCompile>
<ClCompile Include="src\UDPServerParams.cpp">
<Filter>UDP\Source Files</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="..\DLLVersion.rc" />

View File

@ -944,6 +944,33 @@
RelativePath=".\src\OAuth20Credentials.cpp"/>
</Filter>
</Filter>
<Filter
Name="UDP">
<Filter
Name="Source Files">
<File
RelativePath=".\src\UDPClient.cpp"/>
<File
RelativePath=".\src\UDPServerParams.cpp"/>
</Filter>
<Filter
Name="Header Files">
<File
RelativePath=".\include\Poco\Net\MultiSocketPoller.h"/>
<File
RelativePath=".\include\Poco\Net\SingleSocketPoller.h"/>
<File
RelativePath=".\include\Poco\Net\UDPClient.h"/>
<File
RelativePath=".\include\Poco\Net\UDPHandler.h"/>
<File
RelativePath=".\include\Poco\Net\UDPServer.h"/>
<File
RelativePath=".\include\Poco\Net\UDPServerParams.h"/>
<File
RelativePath=".\include\Poco\Net\UDPSocketReader.h"/>
</Filter>
</Filter>
<File
RelativePath="..\DLLVersion.rc">
<FileConfiguration

View File

@ -379,6 +379,13 @@
<ClInclude Include="include\Poco\Net\WebSocketImpl.h"/>
<ClInclude Include="include\Poco\Net\OAuth10Credentials.h"/>
<ClInclude Include="include\Poco\Net\OAuth20Credentials.h"/>
<ClInclude Include="include\Poco\Net\MultiSocketPoller.h"/>
<ClInclude Include="include\Poco\Net\SingleSocketPoller.h"/>
<ClInclude Include="include\Poco\Net\UDPClient.h"/>
<ClInclude Include="include\Poco\Net\UDPHandler.h"/>
<ClInclude Include="include\Poco\Net\UDPServer.h"/>
<ClInclude Include="include\Poco\Net\UDPServerParams.h"/>
<ClInclude Include="include\Poco\Net\UDPSocketReader.h"/>
</ItemGroup>
<ItemGroup>
<ClCompile Include="src\DNS.cpp"/>
@ -481,6 +488,8 @@
<ClCompile Include="src\WebSocketImpl.cpp"/>
<ClCompile Include="src\OAuth10Credentials.cpp"/>
<ClCompile Include="src\OAuth20Credentials.cpp"/>
<ClCompile Include="src\UDPClient.cpp"/>
<ClCompile Include="src\UDPServerParams.cpp"/>
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="..\DLLVersion.rc">

View File

@ -2,148 +2,157 @@
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Filter Include="NetCore">
<UniqueIdentifier>{634d2074-0eb4-4c20-ad66-d944e51f6250}</UniqueIdentifier>
<UniqueIdentifier>{3ecf1d29-df14-4352-a8fc-35ed5029fdbf}</UniqueIdentifier>
</Filter>
<Filter Include="NetCore\Header Files">
<UniqueIdentifier>{463403a6-4b5e-4ffe-ba7a-06f8c05c2e65}</UniqueIdentifier>
<UniqueIdentifier>{6e76bb65-4285-4eda-ac8d-79a05b3bc3b6}</UniqueIdentifier>
</Filter>
<Filter Include="NetCore\Source Files">
<UniqueIdentifier>{e25a2924-f25b-45a4-b94b-09119b73c19a}</UniqueIdentifier>
<UniqueIdentifier>{e2b0bb30-ac70-4d46-8c17-0a1ec9bac235}</UniqueIdentifier>
</Filter>
<Filter Include="Sockets">
<UniqueIdentifier>{53f52745-29c7-4b46-b210-33089b01d463}</UniqueIdentifier>
<UniqueIdentifier>{92800a98-bbb9-4053-9ef0-25c4dbfc8289}</UniqueIdentifier>
</Filter>
<Filter Include="Sockets\Header Files">
<UniqueIdentifier>{948101c7-4506-4537-91f6-b41562a18856}</UniqueIdentifier>
<UniqueIdentifier>{814cdcfb-1bda-40fa-aa03-198cfb086014}</UniqueIdentifier>
</Filter>
<Filter Include="Sockets\Source Files">
<UniqueIdentifier>{0d602551-dbd3-4ed5-95fb-4ee89522d53e}</UniqueIdentifier>
<UniqueIdentifier>{c947159a-8794-412e-ab75-b2ccca14f651}</UniqueIdentifier>
</Filter>
<Filter Include="Messages">
<UniqueIdentifier>{58214e21-f187-45ed-ad2c-66a5eed2812e}</UniqueIdentifier>
<UniqueIdentifier>{ceefa62a-ed53-4ece-963b-3ca1ebecd6ef}</UniqueIdentifier>
</Filter>
<Filter Include="Messages\Header Files">
<UniqueIdentifier>{5a9da57a-cfb7-464f-97a1-9370bc8a3f6c}</UniqueIdentifier>
<UniqueIdentifier>{6a90ae2f-e7b1-4389-97a5-96afbeb6d6d6}</UniqueIdentifier>
</Filter>
<Filter Include="Messages\Source Files">
<UniqueIdentifier>{7d9860a5-dd12-4d45-90dc-d6c1af559e88}</UniqueIdentifier>
<UniqueIdentifier>{b6f1b95f-7e7d-4171-b6af-ca324038462b}</UniqueIdentifier>
</Filter>
<Filter Include="HTTP">
<UniqueIdentifier>{956ee141-adae-4bd1-a2b1-18da077a53db}</UniqueIdentifier>
<UniqueIdentifier>{b8580415-78d3-491f-8bea-0d0465ca431b}</UniqueIdentifier>
</Filter>
<Filter Include="HTTP\Header Files">
<UniqueIdentifier>{dda88a0d-ca13-4a56-9ace-a12a98e44193}</UniqueIdentifier>
<UniqueIdentifier>{58cb6b5e-6b66-4c85-87a7-ffdec46a259f}</UniqueIdentifier>
</Filter>
<Filter Include="HTTP\Source Files">
<UniqueIdentifier>{c575b5f2-3880-4fe1-adbe-4398b1c62a1f}</UniqueIdentifier>
<UniqueIdentifier>{b9bb483c-ded1-4c5b-90bf-9cf443e2ff45}</UniqueIdentifier>
</Filter>
<Filter Include="TCPServer">
<UniqueIdentifier>{549d260c-a2be-44ab-8b49-15dc58401d2f}</UniqueIdentifier>
<UniqueIdentifier>{1926c64e-2c87-4013-92b7-3357548f7986}</UniqueIdentifier>
</Filter>
<Filter Include="TCPServer\Header Files">
<UniqueIdentifier>{802b47c1-e483-45f7-aefd-bac072569982}</UniqueIdentifier>
<UniqueIdentifier>{41b48c57-248b-4d6d-aaf7-6acf7825c6ac}</UniqueIdentifier>
</Filter>
<Filter Include="TCPServer\Source Files">
<UniqueIdentifier>{22ca7373-40f8-4add-ba86-f4cc21078765}</UniqueIdentifier>
<UniqueIdentifier>{defc6aa3-7892-403a-9aa5-1db5ad423a39}</UniqueIdentifier>
</Filter>
<Filter Include="HTTPServer">
<UniqueIdentifier>{c1f77065-ba58-4022-a718-5a6369a7dad9}</UniqueIdentifier>
<UniqueIdentifier>{2901253d-0e54-480c-8d1a-c4eb70847409}</UniqueIdentifier>
</Filter>
<Filter Include="HTTPServer\Header Files">
<UniqueIdentifier>{69eec26f-d2df-4a5d-92ec-63f2f869f141}</UniqueIdentifier>
<UniqueIdentifier>{67cf2e74-21c1-446b-835c-41a947272b7c}</UniqueIdentifier>
</Filter>
<Filter Include="HTTPServer\Source Files">
<UniqueIdentifier>{a63f1541-ebc1-4daa-8321-5edf7224322a}</UniqueIdentifier>
<UniqueIdentifier>{7adb2ea5-dcca-4fa0-906d-f411fcec99de}</UniqueIdentifier>
</Filter>
<Filter Include="HTTPClient">
<UniqueIdentifier>{dbb43662-c2c0-43b4-bca6-b5f49533654a}</UniqueIdentifier>
<UniqueIdentifier>{81dee9d4-5b7e-4c8e-bff8-95d3a207f204}</UniqueIdentifier>
</Filter>
<Filter Include="HTTPClient\Header Files">
<UniqueIdentifier>{638dd285-6627-4134-a42f-c425421f0254}</UniqueIdentifier>
<UniqueIdentifier>{ac483e49-b7d1-4761-a2f7-f38dc3fa5605}</UniqueIdentifier>
</Filter>
<Filter Include="HTTPClient\Source Files">
<UniqueIdentifier>{f662fbb3-32b8-498a-b862-93f3d8283017}</UniqueIdentifier>
<UniqueIdentifier>{2cb341a1-641a-4cd2-8484-83c8a283fe12}</UniqueIdentifier>
</Filter>
<Filter Include="HTML">
<UniqueIdentifier>{d252397f-4c59-4597-ad3e-4bbdb9c7caf5}</UniqueIdentifier>
<UniqueIdentifier>{08cd7ef9-b68c-4d41-8883-3331b478b5dd}</UniqueIdentifier>
</Filter>
<Filter Include="HTML\Header Files">
<UniqueIdentifier>{28b839b4-cc8e-489a-8f5a-7dd7539f3991}</UniqueIdentifier>
<UniqueIdentifier>{e2f3947f-b4a0-4239-8a1a-4572564c6e4a}</UniqueIdentifier>
</Filter>
<Filter Include="HTML\Source Files">
<UniqueIdentifier>{c1ee1d25-4a7b-436b-9653-34da9ac2be95}</UniqueIdentifier>
<UniqueIdentifier>{193551eb-3f9c-4ca9-83c3-ef9beb4edd55}</UniqueIdentifier>
</Filter>
<Filter Include="FTPClient">
<UniqueIdentifier>{41766319-105f-4ef5-b34c-16ab0ddf5dc5}</UniqueIdentifier>
<UniqueIdentifier>{6dfc9ed7-6dcb-4b8b-a304-15a10aa92c99}</UniqueIdentifier>
</Filter>
<Filter Include="FTPClient\Header Files">
<UniqueIdentifier>{32dbff4d-7640-4876-b6ac-43ecf710e565}</UniqueIdentifier>
<UniqueIdentifier>{3650b621-e03e-476b-ae5f-9c27af32da23}</UniqueIdentifier>
</Filter>
<Filter Include="FTPClient\Source Files">
<UniqueIdentifier>{521ecaa9-b59d-4997-8300-a1654360d697}</UniqueIdentifier>
<UniqueIdentifier>{1badbde3-67f4-4198-9ea6-02f7c2a66199}</UniqueIdentifier>
</Filter>
<Filter Include="Reactor">
<UniqueIdentifier>{aa07204e-73f5-4f6c-b2e0-9e8a4bc3ed4a}</UniqueIdentifier>
<UniqueIdentifier>{ec469819-b26b-4dc7-b1a1-ace1e1e9d14a}</UniqueIdentifier>
</Filter>
<Filter Include="Reactor\Header Files">
<UniqueIdentifier>{40b37528-b6f8-430a-ba64-ed5cd19d4ecb}</UniqueIdentifier>
<UniqueIdentifier>{02fe2995-2549-443d-8f3e-e36787355f41}</UniqueIdentifier>
</Filter>
<Filter Include="Reactor\Source Files">
<UniqueIdentifier>{69825d1b-553a-40d3-97ed-41f735623d05}</UniqueIdentifier>
<UniqueIdentifier>{b400e6dd-76a6-4579-be33-b78b36cec0d2}</UniqueIdentifier>
</Filter>
<Filter Include="Mail">
<UniqueIdentifier>{b337390b-dbea-40ba-bf6d-31ab102d002d}</UniqueIdentifier>
<UniqueIdentifier>{829b62e5-047b-4173-b1aa-01aa9d659783}</UniqueIdentifier>
</Filter>
<Filter Include="Mail\Header Files">
<UniqueIdentifier>{81dadd50-de3d-45e8-80f2-262b3a81fc87}</UniqueIdentifier>
<UniqueIdentifier>{125ee94d-72f8-4d2a-9e3a-0b1ab6e64520}</UniqueIdentifier>
</Filter>
<Filter Include="Mail\Source Files">
<UniqueIdentifier>{9c81f5da-db8f-48e7-9120-72d9728f08b0}</UniqueIdentifier>
<UniqueIdentifier>{87a3b48a-fe24-4370-a8b3-debccfdbb7e7}</UniqueIdentifier>
</Filter>
<Filter Include="ICMP">
<UniqueIdentifier>{1960a8de-41d3-4e04-aa98-e9ad17dbe6c2}</UniqueIdentifier>
<UniqueIdentifier>{356eedd4-478b-44f9-9bb9-c058b2ca3f7c}</UniqueIdentifier>
</Filter>
<Filter Include="ICMP\Header Files">
<UniqueIdentifier>{f47d2889-4745-4694-9c9c-76ea35156486}</UniqueIdentifier>
<UniqueIdentifier>{ab0b4a30-f563-4628-b46a-6233f5788812}</UniqueIdentifier>
</Filter>
<Filter Include="ICMP\Source Files">
<UniqueIdentifier>{231ea9d4-7d83-42f5-8d49-67ec3036f4b7}</UniqueIdentifier>
<UniqueIdentifier>{61a2bdc6-5ba0-4118-b39b-b7abfb60d81f}</UniqueIdentifier>
</Filter>
<Filter Include="NTP">
<UniqueIdentifier>{c34fd142-fa23-4fa6-9fd4-ad095438fdae}</UniqueIdentifier>
<UniqueIdentifier>{3104c162-2705-4086-b3e4-f05d2e27abda}</UniqueIdentifier>
</Filter>
<Filter Include="NTP\Header Files">
<UniqueIdentifier>{632d45cf-0d31-44b8-9705-b3299c724d8a}</UniqueIdentifier>
<UniqueIdentifier>{3f871fe4-633a-4080-8a9d-2d23356c637b}</UniqueIdentifier>
</Filter>
<Filter Include="NTP\Source Files">
<UniqueIdentifier>{953b5941-d6a5-475a-be82-98a01c5b2a97}</UniqueIdentifier>
<UniqueIdentifier>{301b098d-3705-465b-a451-c989d8c4eef6}</UniqueIdentifier>
</Filter>
<Filter Include="Logging">
<UniqueIdentifier>{34b81470-af4d-4948-b35c-d208f494041f}</UniqueIdentifier>
<UniqueIdentifier>{89e37240-e89e-4b8e-bc26-edcfc677fb11}</UniqueIdentifier>
</Filter>
<Filter Include="Logging\Header Files">
<UniqueIdentifier>{b3e74cb3-2714-46c2-a6c5-d9d9f1ecdf35}</UniqueIdentifier>
<UniqueIdentifier>{fd942a3c-35a8-4542-bf2e-865ced2720ae}</UniqueIdentifier>
</Filter>
<Filter Include="Logging\Source Files">
<UniqueIdentifier>{3719e3e1-af83-4384-a84e-e438f0472b0d}</UniqueIdentifier>
<UniqueIdentifier>{73e6202f-5739-4d3f-8dd0-bbe6ef88901e}</UniqueIdentifier>
</Filter>
<Filter Include="WebSocket">
<UniqueIdentifier>{781c45f7-4ea7-4cef-9045-5bc1304af444}</UniqueIdentifier>
<UniqueIdentifier>{5f5fc393-74d0-4e28-b4c9-f11ae53ad8f1}</UniqueIdentifier>
</Filter>
<Filter Include="WebSocket\Header Files">
<UniqueIdentifier>{38f908d7-8dac-46d8-aeb3-0d96c37858f1}</UniqueIdentifier>
<UniqueIdentifier>{4342bfae-fbb1-4d63-8b4e-d469fcd1d711}</UniqueIdentifier>
</Filter>
<Filter Include="WebSocket\Source Files">
<UniqueIdentifier>{07e9de6b-6403-4c92-9e81-62cf3192f9da}</UniqueIdentifier>
<UniqueIdentifier>{3e2c31a9-22fc-4a6b-9719-2158535f366d}</UniqueIdentifier>
</Filter>
<Filter Include="OAuth">
<UniqueIdentifier>{59ec7036-a39a-48dd-807e-c0edaedeea3e}</UniqueIdentifier>
<UniqueIdentifier>{75085c62-b3e4-4cb2-b77e-cd7f4e142878}</UniqueIdentifier>
</Filter>
<Filter Include="OAuth\Header Files">
<UniqueIdentifier>{37a46160-fe0a-43d8-bed7-b0290f0c2028}</UniqueIdentifier>
<UniqueIdentifier>{7e841082-bddf-4cec-a49d-17b8b67f6825}</UniqueIdentifier>
</Filter>
<Filter Include="OAuth\Source Files">
<UniqueIdentifier>{aff50375-d1a5-4a5a-9f65-66e2d6d89df0}</UniqueIdentifier>
<UniqueIdentifier>{97329ab3-96b7-415a-82f0-b6b56a5683a8}</UniqueIdentifier>
</Filter>
<Filter Include="UDP">
<UniqueIdentifier>{a29f7b88-8b7d-4e42-8834-2bc04d1a460e}</UniqueIdentifier>
</Filter>
<Filter Include="UDP\Source Files">
<UniqueIdentifier>{0d72045d-b073-4fd4-b630-3384a62b8ebd}</UniqueIdentifier>
</Filter>
<Filter Include="UDP\Header Files">
<UniqueIdentifier>{21ab11aa-72f6-463a-b42f-48408073df57}</UniqueIdentifier>
</Filter>
</ItemGroup>
<ItemGroup>
@ -465,6 +474,27 @@
<ClInclude Include="include\Poco\Net\OAuth20Credentials.h">
<Filter>OAuth\Header Files</Filter>
</ClInclude>
<ClInclude Include="include\Poco\Net\MultiSocketPoller.h">
<Filter>UDP\Header Files</Filter>
</ClInclude>
<ClInclude Include="include\Poco\Net\SingleSocketPoller.h">
<Filter>UDP\Header Files</Filter>
</ClInclude>
<ClInclude Include="include\Poco\Net\UDPClient.h">
<Filter>UDP\Header Files</Filter>
</ClInclude>
<ClInclude Include="include\Poco\Net\UDPHandler.h">
<Filter>UDP\Header Files</Filter>
</ClInclude>
<ClInclude Include="include\Poco\Net\UDPServer.h">
<Filter>UDP\Header Files</Filter>
</ClInclude>
<ClInclude Include="include\Poco\Net\UDPServerParams.h">
<Filter>UDP\Header Files</Filter>
</ClInclude>
<ClInclude Include="include\Poco\Net\UDPSocketReader.h">
<Filter>UDP\Header Files</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<ClCompile Include="src\DNS.cpp">
@ -767,6 +797,12 @@
<ClCompile Include="src\OAuth20Credentials.cpp">
<Filter>OAuth\Source Files</Filter>
</ClCompile>
<ClCompile Include="src\UDPClient.cpp">
<Filter>UDP\Source Files</Filter>
</ClCompile>
<ClCompile Include="src\UDPServerParams.cpp">
<Filter>UDP\Source Files</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="..\DLLVersion.rc" />

View File

@ -85,7 +85,7 @@
</ImportGroup>
<PropertyGroup Label="UserMacros"/>
<PropertyGroup>
<_ProjectFileVersion>11.0.61030.0</_ProjectFileVersion>
<_ProjectFileVersion>11.0.50727.1</_ProjectFileVersion>
<TargetName Condition="'$(Configuration)|$(Platform)'=='debug_shared|x64'">PocoNet64d</TargetName>
<TargetName Condition="'$(Configuration)|$(Platform)'=='debug_static_md|x64'">PocoNetmdd</TargetName>
<TargetName Condition="'$(Configuration)|$(Platform)'=='debug_static_mt|x64'">PocoNetmtd</TargetName>
@ -383,6 +383,13 @@
<ClInclude Include="include\Poco\Net\WebSocketImpl.h"/>
<ClInclude Include="include\Poco\Net\OAuth10Credentials.h"/>
<ClInclude Include="include\Poco\Net\OAuth20Credentials.h"/>
<ClInclude Include="include\Poco\Net\MultiSocketPoller.h"/>
<ClInclude Include="include\Poco\Net\SingleSocketPoller.h"/>
<ClInclude Include="include\Poco\Net\UDPClient.h"/>
<ClInclude Include="include\Poco\Net\UDPHandler.h"/>
<ClInclude Include="include\Poco\Net\UDPServer.h"/>
<ClInclude Include="include\Poco\Net\UDPServerParams.h"/>
<ClInclude Include="include\Poco\Net\UDPSocketReader.h"/>
</ItemGroup>
<ItemGroup>
<ClCompile Include="src\DNS.cpp"/>
@ -485,6 +492,8 @@
<ClCompile Include="src\WebSocketImpl.cpp"/>
<ClCompile Include="src\OAuth10Credentials.cpp"/>
<ClCompile Include="src\OAuth20Credentials.cpp"/>
<ClCompile Include="src\UDPClient.cpp"/>
<ClCompile Include="src\UDPServerParams.cpp"/>
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="..\DLLVersion.rc">

View File

@ -2,148 +2,157 @@
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Filter Include="NetCore">
<UniqueIdentifier>{5f56b373-556b-4e44-816f-6e44994ea10e}</UniqueIdentifier>
<UniqueIdentifier>{d99e37a4-e329-4697-9594-27384d023930}</UniqueIdentifier>
</Filter>
<Filter Include="NetCore\Header Files">
<UniqueIdentifier>{96e67995-4da9-4409-9096-585a558d90a4}</UniqueIdentifier>
<UniqueIdentifier>{02691222-f982-4c83-8abd-753ac8a5e421}</UniqueIdentifier>
</Filter>
<Filter Include="NetCore\Source Files">
<UniqueIdentifier>{70e4f321-9ccf-4e0d-a2cc-0276bbd32593}</UniqueIdentifier>
<UniqueIdentifier>{b2485ee7-50cf-49bc-aec1-327f7769eece}</UniqueIdentifier>
</Filter>
<Filter Include="Sockets">
<UniqueIdentifier>{232d4d47-2be9-48c0-b304-355c83a0b18d}</UniqueIdentifier>
<UniqueIdentifier>{a7809dc3-1483-4e95-9223-3a09a9219145}</UniqueIdentifier>
</Filter>
<Filter Include="Sockets\Header Files">
<UniqueIdentifier>{2cd1e9fd-6892-41b9-b7e1-3a082cd7bbee}</UniqueIdentifier>
<UniqueIdentifier>{603307f4-b176-4e06-a06d-8a73aa1c1aff}</UniqueIdentifier>
</Filter>
<Filter Include="Sockets\Source Files">
<UniqueIdentifier>{9440059b-2c4b-41ed-b428-e0b18f2f34ed}</UniqueIdentifier>
<UniqueIdentifier>{60093744-df1e-497f-9b60-6e73b8c6c1c8}</UniqueIdentifier>
</Filter>
<Filter Include="Messages">
<UniqueIdentifier>{6f17a25b-0f21-43eb-a303-b0f369e7fc2b}</UniqueIdentifier>
<UniqueIdentifier>{8bd17f97-3ed3-4829-9cad-2aa7d32d2203}</UniqueIdentifier>
</Filter>
<Filter Include="Messages\Header Files">
<UniqueIdentifier>{97afe09b-520e-441b-8559-79761f188c34}</UniqueIdentifier>
<UniqueIdentifier>{e2f52dcd-0109-4241-8908-84f5e10d03c0}</UniqueIdentifier>
</Filter>
<Filter Include="Messages\Source Files">
<UniqueIdentifier>{8a213149-c4b2-4422-8dc6-a65a8144924b}</UniqueIdentifier>
<UniqueIdentifier>{489d42e8-0b5e-42ec-8779-ab34a622d873}</UniqueIdentifier>
</Filter>
<Filter Include="HTTP">
<UniqueIdentifier>{19589d84-90fa-48e2-a09d-b4aed1d17d41}</UniqueIdentifier>
<UniqueIdentifier>{fe93be7e-07b9-46a6-89e9-4c9e26fc1fac}</UniqueIdentifier>
</Filter>
<Filter Include="HTTP\Header Files">
<UniqueIdentifier>{c5826a10-3f7f-4c85-9276-b29383eb1650}</UniqueIdentifier>
<UniqueIdentifier>{03122b20-9e92-49b9-9840-b5d099fe185e}</UniqueIdentifier>
</Filter>
<Filter Include="HTTP\Source Files">
<UniqueIdentifier>{846750f8-9c20-4cc1-a809-a9b0bb65c4de}</UniqueIdentifier>
<UniqueIdentifier>{843e3cb7-5ba4-4516-84ac-b82651c65a0e}</UniqueIdentifier>
</Filter>
<Filter Include="TCPServer">
<UniqueIdentifier>{7bf420f9-7523-4039-ac51-b21135c1de73}</UniqueIdentifier>
<UniqueIdentifier>{b57ff255-d76a-4bbb-93a1-fb61e5b81fd8}</UniqueIdentifier>
</Filter>
<Filter Include="TCPServer\Header Files">
<UniqueIdentifier>{21e655cc-6f88-46a8-b3e4-53c78c0ee3d8}</UniqueIdentifier>
<UniqueIdentifier>{2e538433-80a9-467b-bb30-a5bb2f871573}</UniqueIdentifier>
</Filter>
<Filter Include="TCPServer\Source Files">
<UniqueIdentifier>{20159af0-aa78-48f8-b7f8-0ea48d80fae2}</UniqueIdentifier>
<UniqueIdentifier>{65871ea5-bd04-4739-9bff-e8598a933cb2}</UniqueIdentifier>
</Filter>
<Filter Include="HTTPServer">
<UniqueIdentifier>{285de856-b318-4ec3-9e55-b5755b9006d7}</UniqueIdentifier>
<UniqueIdentifier>{1f860b22-d8ac-4b82-88d9-a5c68a2e70b0}</UniqueIdentifier>
</Filter>
<Filter Include="HTTPServer\Header Files">
<UniqueIdentifier>{12a6a3ac-5465-431f-9d40-8b61bf73304f}</UniqueIdentifier>
<UniqueIdentifier>{0cf849e6-d54a-48d4-8382-bbe9c52ecda4}</UniqueIdentifier>
</Filter>
<Filter Include="HTTPServer\Source Files">
<UniqueIdentifier>{55bb9474-8d81-4015-a695-3ce985c674f4}</UniqueIdentifier>
<UniqueIdentifier>{5ad28dd3-eb3c-423e-b702-38453495e682}</UniqueIdentifier>
</Filter>
<Filter Include="HTTPClient">
<UniqueIdentifier>{a12e5c3c-cc09-4b8a-a778-e8b49c8a9d83}</UniqueIdentifier>
<UniqueIdentifier>{2d8539f8-e510-43f9-a127-d9e0e5b4e935}</UniqueIdentifier>
</Filter>
<Filter Include="HTTPClient\Header Files">
<UniqueIdentifier>{f00796e8-365f-4194-93af-76c5cb82d1e4}</UniqueIdentifier>
<UniqueIdentifier>{d7a8df64-eb73-4845-8bbd-ea51b73efafd}</UniqueIdentifier>
</Filter>
<Filter Include="HTTPClient\Source Files">
<UniqueIdentifier>{a6471d8e-4bce-4584-b488-941fab3fcce6}</UniqueIdentifier>
<UniqueIdentifier>{ce12c2fc-7ff7-4b1f-89cb-60e2a4998b4a}</UniqueIdentifier>
</Filter>
<Filter Include="HTML">
<UniqueIdentifier>{3e0384f8-79ae-411c-a5fe-83bdb0afe29f}</UniqueIdentifier>
<UniqueIdentifier>{73d45f0a-1444-4a6d-ae6c-37d0a1a23340}</UniqueIdentifier>
</Filter>
<Filter Include="HTML\Header Files">
<UniqueIdentifier>{5f217b69-7bae-4f51-9a84-9baed9b331e7}</UniqueIdentifier>
<UniqueIdentifier>{e92e42bd-6a09-4cd7-b236-ec057bd73c65}</UniqueIdentifier>
</Filter>
<Filter Include="HTML\Source Files">
<UniqueIdentifier>{05e53265-812e-401f-96b8-425623e6ca98}</UniqueIdentifier>
<UniqueIdentifier>{bab1db03-d989-415e-b87e-9f61610f53c8}</UniqueIdentifier>
</Filter>
<Filter Include="FTPClient">
<UniqueIdentifier>{e5e165c4-0bac-4069-81dd-48e738ca0e90}</UniqueIdentifier>
<UniqueIdentifier>{104374fc-fa85-4d17-b8f9-47c9be4f14b8}</UniqueIdentifier>
</Filter>
<Filter Include="FTPClient\Header Files">
<UniqueIdentifier>{a36882b1-5136-407f-9eea-c5280e641f13}</UniqueIdentifier>
<UniqueIdentifier>{bd72b134-9e98-4672-981f-572dd0ab98f2}</UniqueIdentifier>
</Filter>
<Filter Include="FTPClient\Source Files">
<UniqueIdentifier>{7affb99f-e294-4822-a712-79b7f6414bbd}</UniqueIdentifier>
<UniqueIdentifier>{cb067b20-5d34-4381-8a80-52f7e19139ce}</UniqueIdentifier>
</Filter>
<Filter Include="Reactor">
<UniqueIdentifier>{c066dbd7-a314-4592-b2ed-40395bf86e91}</UniqueIdentifier>
<UniqueIdentifier>{faf79489-1cbb-41a5-b362-d2620a3ce848}</UniqueIdentifier>
</Filter>
<Filter Include="Reactor\Header Files">
<UniqueIdentifier>{b12a014a-4781-4226-a1c2-457a1f8a25f6}</UniqueIdentifier>
<UniqueIdentifier>{9c4ab55b-4a54-42a4-aa00-536354eeccf1}</UniqueIdentifier>
</Filter>
<Filter Include="Reactor\Source Files">
<UniqueIdentifier>{244c4495-dce6-4e93-9d72-ffcdf801fd63}</UniqueIdentifier>
<UniqueIdentifier>{f7df8892-95f1-4eac-b4cd-3baab95bfb09}</UniqueIdentifier>
</Filter>
<Filter Include="Mail">
<UniqueIdentifier>{71ff70d3-4151-493e-805b-31eccc6d36d2}</UniqueIdentifier>
<UniqueIdentifier>{5a6eea3a-b645-43e7-9fba-240d4fb20634}</UniqueIdentifier>
</Filter>
<Filter Include="Mail\Header Files">
<UniqueIdentifier>{54a8df04-7019-4148-9682-b828916e43cf}</UniqueIdentifier>
<UniqueIdentifier>{f54b79c6-1bcd-40bd-bcb9-151cc9b5a63d}</UniqueIdentifier>
</Filter>
<Filter Include="Mail\Source Files">
<UniqueIdentifier>{a875c072-f744-438d-a9c3-8a011c267fe6}</UniqueIdentifier>
<UniqueIdentifier>{d381c84c-3634-4f82-8051-9f0b0b89ffb6}</UniqueIdentifier>
</Filter>
<Filter Include="ICMP">
<UniqueIdentifier>{6a04a24a-dc6c-435b-975b-03d6f78582ed}</UniqueIdentifier>
<UniqueIdentifier>{95def0b7-2a7a-43a9-a1cb-8009a4440e76}</UniqueIdentifier>
</Filter>
<Filter Include="ICMP\Header Files">
<UniqueIdentifier>{318b905b-85b7-41e2-b458-98d1f1a54eee}</UniqueIdentifier>
<UniqueIdentifier>{3f658b6e-b7c5-43d7-983e-4f8ee108f0f1}</UniqueIdentifier>
</Filter>
<Filter Include="ICMP\Source Files">
<UniqueIdentifier>{7646cb78-6248-4d3d-a748-cd13766f4303}</UniqueIdentifier>
<UniqueIdentifier>{b7cacee5-d40f-4e38-ac49-e7800d09e7fd}</UniqueIdentifier>
</Filter>
<Filter Include="NTP">
<UniqueIdentifier>{f64537da-0179-4468-9ecb-b7b0173ce74e}</UniqueIdentifier>
<UniqueIdentifier>{557006b3-3121-43f9-b28d-d387d97ecf4b}</UniqueIdentifier>
</Filter>
<Filter Include="NTP\Header Files">
<UniqueIdentifier>{1d94b7ba-2376-4fce-a32c-785440767c91}</UniqueIdentifier>
<UniqueIdentifier>{aebcf1e5-2c35-48be-869f-17b0d9e59ebb}</UniqueIdentifier>
</Filter>
<Filter Include="NTP\Source Files">
<UniqueIdentifier>{63089154-1dce-4366-83e4-50215918b4a8}</UniqueIdentifier>
<UniqueIdentifier>{ed180977-b89a-4c70-8f71-1a2101d5a934}</UniqueIdentifier>
</Filter>
<Filter Include="Logging">
<UniqueIdentifier>{3ae6ad3a-4437-4275-95e4-6e8368b40d45}</UniqueIdentifier>
<UniqueIdentifier>{455f76b3-0ea8-4c5a-bb08-67ae9ca7062b}</UniqueIdentifier>
</Filter>
<Filter Include="Logging\Header Files">
<UniqueIdentifier>{9ba4405d-3474-40e2-a47b-b305dab9d88c}</UniqueIdentifier>
<UniqueIdentifier>{3014291c-c2fa-4903-b83e-f90cdaba09de}</UniqueIdentifier>
</Filter>
<Filter Include="Logging\Source Files">
<UniqueIdentifier>{1b3bd47c-0202-4a1e-8507-9557ab695760}</UniqueIdentifier>
<UniqueIdentifier>{7782bdbf-94d8-4dde-9a7e-d6453c3fbcc4}</UniqueIdentifier>
</Filter>
<Filter Include="WebSocket">
<UniqueIdentifier>{2ff1b24d-2cbb-4843-be9f-b4cdb5496ccf}</UniqueIdentifier>
<UniqueIdentifier>{449ed83d-4727-4401-8bd2-3b80a00e4095}</UniqueIdentifier>
</Filter>
<Filter Include="WebSocket\Header Files">
<UniqueIdentifier>{2f29a313-0df1-48c1-a5e6-1cadcae681ea}</UniqueIdentifier>
<UniqueIdentifier>{a859141c-9435-47b5-bb76-45eb7cf8a6a4}</UniqueIdentifier>
</Filter>
<Filter Include="WebSocket\Source Files">
<UniqueIdentifier>{48309cb4-84d1-4e1a-9544-ac22341a1549}</UniqueIdentifier>
<UniqueIdentifier>{f03bd706-ea93-4c8d-8e65-6f9dcc025da4}</UniqueIdentifier>
</Filter>
<Filter Include="OAuth">
<UniqueIdentifier>{58a64688-f540-420c-9a5f-c14df18cd2b0}</UniqueIdentifier>
<UniqueIdentifier>{0276ac4a-2ef6-43d9-b256-4446420d1211}</UniqueIdentifier>
</Filter>
<Filter Include="OAuth\Header Files">
<UniqueIdentifier>{a9808d70-5d4b-4d25-8684-f97bf9f28a92}</UniqueIdentifier>
<UniqueIdentifier>{778d6ca8-ee88-469b-a6c7-c91debe0d6cf}</UniqueIdentifier>
</Filter>
<Filter Include="OAuth\Source Files">
<UniqueIdentifier>{8d82d270-fc18-487c-9bc6-1a7fd35933d8}</UniqueIdentifier>
<UniqueIdentifier>{fe76a7ef-1826-4121-88fe-f4d09b0fbf9a}</UniqueIdentifier>
</Filter>
<Filter Include="UDP">
<UniqueIdentifier>{b49822bc-4aa6-4cc9-8cc8-027e3787458a}</UniqueIdentifier>
</Filter>
<Filter Include="UDP\Source Files">
<UniqueIdentifier>{df54e47c-4819-47c0-80c1-3f3223040acf}</UniqueIdentifier>
</Filter>
<Filter Include="UDP\Header Files">
<UniqueIdentifier>{b5bfdb6f-d850-4ba1-a6db-b8ab35000cb3}</UniqueIdentifier>
</Filter>
</ItemGroup>
<ItemGroup>
@ -465,6 +474,27 @@
<ClInclude Include="include\Poco\Net\OAuth20Credentials.h">
<Filter>OAuth\Header Files</Filter>
</ClInclude>
<ClInclude Include="include\Poco\Net\MultiSocketPoller.h">
<Filter>UDP\Header Files</Filter>
</ClInclude>
<ClInclude Include="include\Poco\Net\SingleSocketPoller.h">
<Filter>UDP\Header Files</Filter>
</ClInclude>
<ClInclude Include="include\Poco\Net\UDPClient.h">
<Filter>UDP\Header Files</Filter>
</ClInclude>
<ClInclude Include="include\Poco\Net\UDPHandler.h">
<Filter>UDP\Header Files</Filter>
</ClInclude>
<ClInclude Include="include\Poco\Net\UDPServer.h">
<Filter>UDP\Header Files</Filter>
</ClInclude>
<ClInclude Include="include\Poco\Net\UDPServerParams.h">
<Filter>UDP\Header Files</Filter>
</ClInclude>
<ClInclude Include="include\Poco\Net\UDPSocketReader.h">
<Filter>UDP\Header Files</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<ClCompile Include="src\DNS.cpp">
@ -767,6 +797,12 @@
<ClCompile Include="src\OAuth20Credentials.cpp">
<Filter>OAuth\Source Files</Filter>
</ClCompile>
<ClCompile Include="src\UDPClient.cpp">
<Filter>UDP\Source Files</Filter>
</ClCompile>
<ClCompile Include="src\UDPServerParams.cpp">
<Filter>UDP\Source Files</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="..\DLLVersion.rc" />

View File

@ -335,6 +335,7 @@
<ClInclude Include="include\Poco\Net\MulticastSocket.h"/>
<ClInclude Include="include\Poco\Net\MultipartReader.h"/>
<ClInclude Include="include\Poco\Net\MultipartWriter.h"/>
<ClInclude Include="include\Poco\Net\MultiSocketPoller.h"/>
<ClInclude Include="include\Poco\Net\NameValueCollection.h"/>
<ClInclude Include="include\Poco\Net\Net.h"/>
<ClInclude Include="include\Poco\Net\NetException.h"/>
@ -360,6 +361,7 @@
<ClInclude Include="include\Poco\Net\RemoteSyslogListener.h"/>
<ClInclude Include="include\Poco\Net\ServerSocket.h"/>
<ClInclude Include="include\Poco\Net\ServerSocketImpl.h"/>
<ClInclude Include="include\Poco\Net\SingleSocketPoller.h"/>
<ClInclude Include="include\Poco\Net\SMTPChannel.h"/>
<ClInclude Include="include\Poco\Net\SMTPClientSession.h"/>
<ClInclude Include="include\Poco\Net\Socket.h"/>
@ -381,6 +383,11 @@
<ClInclude Include="include\Poco\Net\TCPServerConnectionFactory.h"/>
<ClInclude Include="include\Poco\Net\TCPServerDispatcher.h"/>
<ClInclude Include="include\Poco\Net\TCPServerParams.h"/>
<ClInclude Include="include\Poco\Net\UDPClient.h"/>
<ClInclude Include="include\Poco\Net\UDPHandler.h"/>
<ClInclude Include="include\Poco\Net\UDPServer.h"/>
<ClInclude Include="include\Poco\Net\UDPServerParams.h"/>
<ClInclude Include="include\Poco\Net\UDPSocketReader.h"/>
<ClInclude Include="include\Poco\Net\WebSocket.h"/>
<ClInclude Include="include\Poco\Net\WebSocketImpl.h"/>
</ItemGroup>
@ -483,6 +490,8 @@
<ClCompile Include="src\TCPServerConnectionFactory.cpp"/>
<ClCompile Include="src\TCPServerDispatcher.cpp"/>
<ClCompile Include="src\TCPServerParams.cpp"/>
<ClCompile Include="src\UDPClient.cpp"/>
<ClCompile Include="src\UDPServerParams.cpp"/>
<ClCompile Include="src\WebSocket.cpp"/>
<ClCompile Include="src\WebSocketImpl.cpp"/>
</ItemGroup>

View File

@ -2,148 +2,157 @@
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Filter Include="NetCore">
<UniqueIdentifier>{d793381d-e52a-4be1-b114-935577b22fb6}</UniqueIdentifier>
<UniqueIdentifier>{931ad266-3c66-4ebd-b27e-4eda7ace980f}</UniqueIdentifier>
</Filter>
<Filter Include="NetCore\Header Files">
<UniqueIdentifier>{b10aa5ae-0d2d-499b-9bf8-bd3c0ad633fd}</UniqueIdentifier>
<UniqueIdentifier>{66f7ca5d-1ba2-4818-a22e-264c33ab9778}</UniqueIdentifier>
</Filter>
<Filter Include="NetCore\Source Files">
<UniqueIdentifier>{62671b12-1abc-4fb3-bd51-60426795ae05}</UniqueIdentifier>
<UniqueIdentifier>{c3edc8ae-c3b9-4088-9d3b-fedf548f3537}</UniqueIdentifier>
</Filter>
<Filter Include="Sockets">
<UniqueIdentifier>{589b70da-867e-4a1c-9b9a-6308c8194fe5}</UniqueIdentifier>
<UniqueIdentifier>{f72ef01c-4561-444f-9d70-6eb62308c750}</UniqueIdentifier>
</Filter>
<Filter Include="Sockets\Header Files">
<UniqueIdentifier>{cfa6e673-f174-45ab-add0-90f82d12fc4a}</UniqueIdentifier>
<UniqueIdentifier>{a0726cbd-d4e5-4065-acd4-3434bf80d302}</UniqueIdentifier>
</Filter>
<Filter Include="Sockets\Source Files">
<UniqueIdentifier>{84b21054-f687-4007-af69-a939f8dfefff}</UniqueIdentifier>
<UniqueIdentifier>{bd08bf41-27f4-46ca-859b-5bfe501ea6be}</UniqueIdentifier>
</Filter>
<Filter Include="Messages">
<UniqueIdentifier>{cd97f248-86c4-425e-be74-17f7f7c5e4d6}</UniqueIdentifier>
<UniqueIdentifier>{01e3591b-4889-4ca0-8c1b-bc18fc8640c6}</UniqueIdentifier>
</Filter>
<Filter Include="Messages\Header Files">
<UniqueIdentifier>{842d3f60-8226-416f-9a58-3379620c8072}</UniqueIdentifier>
<UniqueIdentifier>{6a5da09d-abb3-462a-b70e-d0131749a65d}</UniqueIdentifier>
</Filter>
<Filter Include="Messages\Source Files">
<UniqueIdentifier>{2caeb2ec-5b20-4f25-bf56-3b1c46579f93}</UniqueIdentifier>
<UniqueIdentifier>{0815bb2c-dcfa-4e96-b0d6-3b4839a9724c}</UniqueIdentifier>
</Filter>
<Filter Include="HTTP">
<UniqueIdentifier>{7b2f1809-f765-425a-b85b-0680844efe95}</UniqueIdentifier>
<UniqueIdentifier>{839cb5c4-f9aa-41f8-9d28-82b4c70aee25}</UniqueIdentifier>
</Filter>
<Filter Include="HTTP\Header Files">
<UniqueIdentifier>{f95d777c-0513-4616-ad73-809518be9335}</UniqueIdentifier>
<UniqueIdentifier>{1da34696-9f51-468c-b15b-c0e8664f08c5}</UniqueIdentifier>
</Filter>
<Filter Include="HTTP\Source Files">
<UniqueIdentifier>{8f84d5c0-555c-4e2b-ab95-893554db4bb6}</UniqueIdentifier>
<UniqueIdentifier>{c0cc2069-49d5-4234-9cf5-2d6d78f3b55f}</UniqueIdentifier>
</Filter>
<Filter Include="TCPServer">
<UniqueIdentifier>{3eb75081-b071-4756-8779-a161646fb94a}</UniqueIdentifier>
<UniqueIdentifier>{81053fc5-e24d-4dc1-96b0-c92097dc597b}</UniqueIdentifier>
</Filter>
<Filter Include="TCPServer\Header Files">
<UniqueIdentifier>{9353e41d-8399-40b5-849d-1656738374ff}</UniqueIdentifier>
<UniqueIdentifier>{ca8110a1-89e4-4b27-974e-67cc7cdb5826}</UniqueIdentifier>
</Filter>
<Filter Include="TCPServer\Source Files">
<UniqueIdentifier>{06921133-2e92-4bb0-b727-bd2ae2ba5c45}</UniqueIdentifier>
<UniqueIdentifier>{22a42e32-e87c-4057-9150-0fc91ca74c6d}</UniqueIdentifier>
</Filter>
<Filter Include="HTTPServer">
<UniqueIdentifier>{e00832de-fd52-48f6-bb31-ac5bbe089a21}</UniqueIdentifier>
<UniqueIdentifier>{8730d65e-bf26-4e94-a23f-a9a257d5daf2}</UniqueIdentifier>
</Filter>
<Filter Include="HTTPServer\Header Files">
<UniqueIdentifier>{29968123-0afc-4e59-a17d-5b174817ebd8}</UniqueIdentifier>
<UniqueIdentifier>{3339ed1c-e960-4c14-8d93-132b0f0d2ef4}</UniqueIdentifier>
</Filter>
<Filter Include="HTTPServer\Source Files">
<UniqueIdentifier>{f73a1f3d-f05e-43a1-aabb-546855f62795}</UniqueIdentifier>
<UniqueIdentifier>{2354143b-8018-4f1c-9ffe-28b7b02845cb}</UniqueIdentifier>
</Filter>
<Filter Include="HTTPClient">
<UniqueIdentifier>{412ce361-d8c7-49f4-b69a-f8b9cc487dc0}</UniqueIdentifier>
<UniqueIdentifier>{942212c0-6c1a-4c85-a82f-bf43b15565a1}</UniqueIdentifier>
</Filter>
<Filter Include="HTTPClient\Header Files">
<UniqueIdentifier>{00e92899-4431-48bb-a1ce-ef46f5975fac}</UniqueIdentifier>
<UniqueIdentifier>{8d3fbdf6-3f5a-46db-b6d7-e59fab646ec1}</UniqueIdentifier>
</Filter>
<Filter Include="HTTPClient\Source Files">
<UniqueIdentifier>{238188e2-4b3e-49ce-bc6b-a1412077c9b1}</UniqueIdentifier>
<UniqueIdentifier>{1be472bf-562f-4536-b715-2f02546ee1a3}</UniqueIdentifier>
</Filter>
<Filter Include="HTML">
<UniqueIdentifier>{8cece644-fefd-4a34-add4-07e1559e6311}</UniqueIdentifier>
<UniqueIdentifier>{7aa3ba1d-d514-47db-be8f-8dffb8b7e4ff}</UniqueIdentifier>
</Filter>
<Filter Include="HTML\Header Files">
<UniqueIdentifier>{086aefe1-6f0d-4d9d-992a-48cce7966550}</UniqueIdentifier>
<UniqueIdentifier>{4f733e64-4eeb-4b74-a6b6-107ff369860d}</UniqueIdentifier>
</Filter>
<Filter Include="HTML\Source Files">
<UniqueIdentifier>{c32dc6d6-4d1c-4d01-8b4c-6d608a6ef7e6}</UniqueIdentifier>
<UniqueIdentifier>{1174ecb3-a68b-4682-9ca3-4e0c953c0a1b}</UniqueIdentifier>
</Filter>
<Filter Include="FTPClient">
<UniqueIdentifier>{c21b64f3-0b55-47bd-a7c0-5e57b9963476}</UniqueIdentifier>
<UniqueIdentifier>{0825c268-4532-4206-aca6-9960f90aafb7}</UniqueIdentifier>
</Filter>
<Filter Include="FTPClient\Header Files">
<UniqueIdentifier>{a44e5b02-ed0c-4dc0-9809-0b408cc04cb5}</UniqueIdentifier>
<UniqueIdentifier>{e5a112e8-b2c0-4c2c-befd-c1276eb2eee7}</UniqueIdentifier>
</Filter>
<Filter Include="FTPClient\Source Files">
<UniqueIdentifier>{13408722-e641-4ab3-9416-642e52472961}</UniqueIdentifier>
<UniqueIdentifier>{a8faab2a-d2d4-4a4f-8787-470bf6f781a3}</UniqueIdentifier>
</Filter>
<Filter Include="Reactor">
<UniqueIdentifier>{ff62509a-0532-4157-b0f1-34011d0d2160}</UniqueIdentifier>
<UniqueIdentifier>{003e0fac-f29f-47b2-a390-8197b6a5b92a}</UniqueIdentifier>
</Filter>
<Filter Include="Reactor\Header Files">
<UniqueIdentifier>{76648b63-cd72-4010-a1e6-0f68e391d213}</UniqueIdentifier>
<UniqueIdentifier>{dcd62c48-7aea-4c06-bf76-b4e9d6fe689b}</UniqueIdentifier>
</Filter>
<Filter Include="Reactor\Source Files">
<UniqueIdentifier>{3abe382a-6613-4f22-9eb5-34165acd5d1c}</UniqueIdentifier>
<UniqueIdentifier>{2855ff32-fb29-404f-906a-9af115e7d854}</UniqueIdentifier>
</Filter>
<Filter Include="Mail">
<UniqueIdentifier>{846ee1ad-1f67-48ae-b683-9e9b3d0522d9}</UniqueIdentifier>
<UniqueIdentifier>{b96a84e5-c45c-4515-8da2-1ddfa2a1469f}</UniqueIdentifier>
</Filter>
<Filter Include="Mail\Header Files">
<UniqueIdentifier>{25c2d553-e719-40ad-a62a-566dd4ee7126}</UniqueIdentifier>
<UniqueIdentifier>{74cd9510-478c-43e1-b745-4cb17e81799a}</UniqueIdentifier>
</Filter>
<Filter Include="Mail\Source Files">
<UniqueIdentifier>{ff2b48a0-0e0b-469a-b30f-9a719a4998eb}</UniqueIdentifier>
<UniqueIdentifier>{021581e0-8de3-4b1d-b0cd-ff46963936c9}</UniqueIdentifier>
</Filter>
<Filter Include="ICMP">
<UniqueIdentifier>{30d8f778-f9fe-45ac-8a03-27188ea98ad0}</UniqueIdentifier>
<UniqueIdentifier>{edb0f9d9-9018-4afe-9fdb-5bbb282d22d0}</UniqueIdentifier>
</Filter>
<Filter Include="ICMP\Header Files">
<UniqueIdentifier>{a0f33d50-227b-46cc-ad85-2c641a0383a2}</UniqueIdentifier>
<UniqueIdentifier>{10fa16b0-df42-499e-bfb8-730146debc60}</UniqueIdentifier>
</Filter>
<Filter Include="ICMP\Source Files">
<UniqueIdentifier>{87b4e91d-748f-4f2f-923c-17a5fc954381}</UniqueIdentifier>
<UniqueIdentifier>{4b0bdfb3-161c-4665-aa11-74e4b69e9e6d}</UniqueIdentifier>
</Filter>
<Filter Include="NTP">
<UniqueIdentifier>{4159a203-b013-4706-825b-7bb5b4fd3c68}</UniqueIdentifier>
<UniqueIdentifier>{05e5176c-b25f-48f2-a990-14dceba99608}</UniqueIdentifier>
</Filter>
<Filter Include="NTP\Header Files">
<UniqueIdentifier>{0720cef2-bfda-4ca7-a299-c5d43dc9014a}</UniqueIdentifier>
<UniqueIdentifier>{dd09c611-b4a1-4605-b11c-4c1f2806b98e}</UniqueIdentifier>
</Filter>
<Filter Include="NTP\Source Files">
<UniqueIdentifier>{39c8a605-b6ff-4fc1-a585-a73bba457f39}</UniqueIdentifier>
<UniqueIdentifier>{5bdb6e63-975a-4d35-8860-7d0b9b8b433f}</UniqueIdentifier>
</Filter>
<Filter Include="Logging">
<UniqueIdentifier>{61dbd680-e8eb-4e1c-b814-5ef8fa6ca9e8}</UniqueIdentifier>
<UniqueIdentifier>{e7730f2b-b7eb-46bb-a2a0-46c4d62f2360}</UniqueIdentifier>
</Filter>
<Filter Include="Logging\Header Files">
<UniqueIdentifier>{8cd2ae23-4297-4223-90cc-cf6ade33b9bc}</UniqueIdentifier>
<UniqueIdentifier>{363985f4-df96-4aec-a764-b3bdd280218e}</UniqueIdentifier>
</Filter>
<Filter Include="Logging\Source Files">
<UniqueIdentifier>{88b8f574-352b-4963-a042-95b8d8d836eb}</UniqueIdentifier>
<UniqueIdentifier>{39b84c59-e79b-4cfb-87a7-0e4cc15ec022}</UniqueIdentifier>
</Filter>
<Filter Include="WebSocket">
<UniqueIdentifier>{1f505612-23bb-4ab4-a5a2-1260bec1b68e}</UniqueIdentifier>
<UniqueIdentifier>{d2a734ea-b5df-45bf-8f5f-260b94de4eb9}</UniqueIdentifier>
</Filter>
<Filter Include="WebSocket\Header Files">
<UniqueIdentifier>{5c2822ff-d9f3-408e-9e29-69182ee9289b}</UniqueIdentifier>
<UniqueIdentifier>{28f3ed68-456a-49d0-a2d4-5409afaabcb9}</UniqueIdentifier>
</Filter>
<Filter Include="WebSocket\Source Files">
<UniqueIdentifier>{8595d6a0-c3a5-4d46-ac64-4e0f415c974c}</UniqueIdentifier>
<UniqueIdentifier>{e8f017ed-0dbd-415c-9b14-d41dde04baae}</UniqueIdentifier>
</Filter>
<Filter Include="OAuth">
<UniqueIdentifier>{eccca1da-4cb3-40c2-b5c1-222dc60847f9}</UniqueIdentifier>
<UniqueIdentifier>{c6ec91b6-061a-47a1-8462-0ffda32f219d}</UniqueIdentifier>
</Filter>
<Filter Include="OAuth\Header Files">
<UniqueIdentifier>{60b9db26-d2d0-4cee-a699-8dde212cc2c0}</UniqueIdentifier>
<UniqueIdentifier>{78a8c8cf-ef98-4925-9275-d80ccda2cf4c}</UniqueIdentifier>
</Filter>
<Filter Include="OAuth\Source Files">
<UniqueIdentifier>{edbb27bd-7567-42be-adf9-7cc12ff5b521}</UniqueIdentifier>
<UniqueIdentifier>{b6a1fdbb-7983-4e80-96ad-3d0878e2890f}</UniqueIdentifier>
</Filter>
<Filter Include="UDP">
<UniqueIdentifier>{fc306e36-4d66-4737-8db0-0b8e2c21989c}</UniqueIdentifier>
</Filter>
<Filter Include="UDP\Source Files">
<UniqueIdentifier>{46e35b39-ca2a-4fb6-92d0-120839dc63b1}</UniqueIdentifier>
</Filter>
<Filter Include="UDP\Header Files">
<UniqueIdentifier>{b5c32f96-05c9-4b20-8f53-cc6baa427c08}</UniqueIdentifier>
</Filter>
</ItemGroup>
<ItemGroup>
@ -465,6 +474,27 @@
<ClInclude Include="include\Poco\Net\OAuth20Credentials.h">
<Filter>OAuth\Header Files</Filter>
</ClInclude>
<ClInclude Include="include\Poco\Net\MultiSocketPoller.h">
<Filter>UDP\Header Files</Filter>
</ClInclude>
<ClInclude Include="include\Poco\Net\SingleSocketPoller.h">
<Filter>UDP\Header Files</Filter>
</ClInclude>
<ClInclude Include="include\Poco\Net\UDPClient.h">
<Filter>UDP\Header Files</Filter>
</ClInclude>
<ClInclude Include="include\Poco\Net\UDPHandler.h">
<Filter>UDP\Header Files</Filter>
</ClInclude>
<ClInclude Include="include\Poco\Net\UDPServer.h">
<Filter>UDP\Header Files</Filter>
</ClInclude>
<ClInclude Include="include\Poco\Net\UDPServerParams.h">
<Filter>UDP\Header Files</Filter>
</ClInclude>
<ClInclude Include="include\Poco\Net\UDPSocketReader.h">
<Filter>UDP\Header Files</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<ClCompile Include="src\DNS.cpp">
@ -767,6 +797,12 @@
<ClCompile Include="src\OAuth20Credentials.cpp">
<Filter>OAuth\Source Files</Filter>
</ClCompile>
<ClCompile Include="src\UDPClient.cpp">
<Filter>UDP\Source Files</Filter>
</ClCompile>
<ClCompile Include="src\UDPServerParams.cpp">
<Filter>UDP\Source Files</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="..\DLLVersion.rc" />

View File

@ -85,7 +85,7 @@
</ImportGroup>
<PropertyGroup Label="UserMacros"/>
<PropertyGroup>
<_ProjectFileVersion>14.0.25420.1</_ProjectFileVersion>
<_ProjectFileVersion>14.0.25431.1</_ProjectFileVersion>
<TargetName Condition="'$(Configuration)|$(Platform)'=='debug_shared|x64'">PocoNet64d</TargetName>
<TargetName Condition="'$(Configuration)|$(Platform)'=='debug_static_md|x64'">PocoNetmdd</TargetName>
<TargetName Condition="'$(Configuration)|$(Platform)'=='debug_static_mt|x64'">PocoNetmtd</TargetName>
@ -335,6 +335,7 @@
<ClInclude Include="include\Poco\Net\MulticastSocket.h"/>
<ClInclude Include="include\Poco\Net\MultipartReader.h"/>
<ClInclude Include="include\Poco\Net\MultipartWriter.h"/>
<ClInclude Include="include\Poco\Net\MultiSocketPoller.h"/>
<ClInclude Include="include\Poco\Net\NameValueCollection.h"/>
<ClInclude Include="include\Poco\Net\Net.h"/>
<ClInclude Include="include\Poco\Net\NetException.h"/>
@ -360,6 +361,7 @@
<ClInclude Include="include\Poco\Net\RemoteSyslogListener.h"/>
<ClInclude Include="include\Poco\Net\ServerSocket.h"/>
<ClInclude Include="include\Poco\Net\ServerSocketImpl.h"/>
<ClInclude Include="include\Poco\Net\SingleSocketPoller.h"/>
<ClInclude Include="include\Poco\Net\SMTPChannel.h"/>
<ClInclude Include="include\Poco\Net\SMTPClientSession.h"/>
<ClInclude Include="include\Poco\Net\Socket.h"/>
@ -381,6 +383,11 @@
<ClInclude Include="include\Poco\Net\TCPServerConnectionFactory.h"/>
<ClInclude Include="include\Poco\Net\TCPServerDispatcher.h"/>
<ClInclude Include="include\Poco\Net\TCPServerParams.h"/>
<ClInclude Include="include\Poco\Net\UDPClient.h"/>
<ClInclude Include="include\Poco\Net\UDPHandler.h"/>
<ClInclude Include="include\Poco\Net\UDPServer.h"/>
<ClInclude Include="include\Poco\Net\UDPServerParams.h"/>
<ClInclude Include="include\Poco\Net\UDPSocketReader.h"/>
<ClInclude Include="include\Poco\Net\WebSocket.h"/>
<ClInclude Include="include\Poco\Net\WebSocketImpl.h"/>
</ItemGroup>
@ -483,6 +490,8 @@
<ClCompile Include="src\TCPServerConnectionFactory.cpp"/>
<ClCompile Include="src\TCPServerDispatcher.cpp"/>
<ClCompile Include="src\TCPServerParams.cpp"/>
<ClCompile Include="src\UDPClient.cpp"/>
<ClCompile Include="src\UDPServerParams.cpp"/>
<ClCompile Include="src\WebSocket.cpp"/>
<ClCompile Include="src\WebSocketImpl.cpp"/>
</ItemGroup>

View File

@ -2,148 +2,157 @@
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Filter Include="NetCore">
<UniqueIdentifier>{572a7c45-7da5-41e6-a245-9825a8bce416}</UniqueIdentifier>
<UniqueIdentifier>{c94a716b-53e1-4386-9dd9-c34b92252f38}</UniqueIdentifier>
</Filter>
<Filter Include="NetCore\Header Files">
<UniqueIdentifier>{26c36012-06b0-48d5-aead-fa85ce5456e1}</UniqueIdentifier>
<UniqueIdentifier>{c19f980f-ac2d-438a-bd97-e0b5e5fa3fab}</UniqueIdentifier>
</Filter>
<Filter Include="NetCore\Source Files">
<UniqueIdentifier>{454a3c9f-6a54-48ee-bfb2-8e2edfabde87}</UniqueIdentifier>
<UniqueIdentifier>{16872e64-b64e-4a72-8620-9afc7c75797f}</UniqueIdentifier>
</Filter>
<Filter Include="Sockets">
<UniqueIdentifier>{5702a9a0-04ef-4649-a989-d3836ec6505a}</UniqueIdentifier>
<UniqueIdentifier>{5d667a8c-d9b7-4ae6-a5f8-62136279d936}</UniqueIdentifier>
</Filter>
<Filter Include="Sockets\Header Files">
<UniqueIdentifier>{3a9ad8b3-dfbf-40d5-8efe-98c49ed92dab}</UniqueIdentifier>
<UniqueIdentifier>{28933fe5-51c6-4d78-b5d0-684ec2d1f912}</UniqueIdentifier>
</Filter>
<Filter Include="Sockets\Source Files">
<UniqueIdentifier>{81d1a49c-43d3-49b3-a82a-8954c5d3122b}</UniqueIdentifier>
<UniqueIdentifier>{6c4d7854-3581-414d-8bad-50a448dab5ea}</UniqueIdentifier>
</Filter>
<Filter Include="Messages">
<UniqueIdentifier>{a598334e-37f7-4569-ba95-2c27a8a819ff}</UniqueIdentifier>
<UniqueIdentifier>{5ffa2a4b-f0fe-4276-b54a-247336b7c9b6}</UniqueIdentifier>
</Filter>
<Filter Include="Messages\Header Files">
<UniqueIdentifier>{a5ba0e57-cb82-4e96-9cb2-9905e65ececb}</UniqueIdentifier>
<UniqueIdentifier>{c536b97b-2898-4ffa-bff3-c994faaaa13e}</UniqueIdentifier>
</Filter>
<Filter Include="Messages\Source Files">
<UniqueIdentifier>{2ad77310-465a-45a3-ac0a-e835f431ffa1}</UniqueIdentifier>
<UniqueIdentifier>{bdbfba26-462e-4894-837b-adcef804398a}</UniqueIdentifier>
</Filter>
<Filter Include="HTTP">
<UniqueIdentifier>{54e40ac0-ef22-4ba6-bf9a-254582c7610d}</UniqueIdentifier>
<UniqueIdentifier>{948e8e1e-0de5-4cfe-9ad2-f41c6bf38307}</UniqueIdentifier>
</Filter>
<Filter Include="HTTP\Header Files">
<UniqueIdentifier>{ca1f3ccd-7fcb-463c-9082-505134fcf001}</UniqueIdentifier>
<UniqueIdentifier>{b763091c-4383-45c2-98f8-e0e9e78e00ea}</UniqueIdentifier>
</Filter>
<Filter Include="HTTP\Source Files">
<UniqueIdentifier>{d2855f37-1e15-4c78-96b6-c03cb8221849}</UniqueIdentifier>
<UniqueIdentifier>{5ece25a2-9b25-4d2b-b2e4-bfdb84de3429}</UniqueIdentifier>
</Filter>
<Filter Include="TCPServer">
<UniqueIdentifier>{66234b30-77a3-4792-9e44-834b7210eb22}</UniqueIdentifier>
<UniqueIdentifier>{aa325e18-d972-4788-a35b-c5e05e394c70}</UniqueIdentifier>
</Filter>
<Filter Include="TCPServer\Header Files">
<UniqueIdentifier>{e4d52904-8772-4d44-ba30-19b1acf57f22}</UniqueIdentifier>
<UniqueIdentifier>{6b9bc75b-b771-450c-9603-df9f3039ba61}</UniqueIdentifier>
</Filter>
<Filter Include="TCPServer\Source Files">
<UniqueIdentifier>{ee62c23e-f534-48d5-8366-9ec3496afe92}</UniqueIdentifier>
<UniqueIdentifier>{e0604263-fa12-4325-a0c9-8f16d6e4e8f8}</UniqueIdentifier>
</Filter>
<Filter Include="HTTPServer">
<UniqueIdentifier>{eb25b565-5bc2-44df-b9ad-24ee4ec643b2}</UniqueIdentifier>
<UniqueIdentifier>{9f455320-229d-43ac-9563-8c81e24b5948}</UniqueIdentifier>
</Filter>
<Filter Include="HTTPServer\Header Files">
<UniqueIdentifier>{484a1405-0f70-4e4f-b5b9-6935e1e9094d}</UniqueIdentifier>
<UniqueIdentifier>{bf7573a3-4801-4c8d-b633-ce85114390b0}</UniqueIdentifier>
</Filter>
<Filter Include="HTTPServer\Source Files">
<UniqueIdentifier>{3126bb62-8060-4c90-be29-69c1f0c297fa}</UniqueIdentifier>
<UniqueIdentifier>{9f56a585-c7ba-4f23-b887-ceb2674fbd3c}</UniqueIdentifier>
</Filter>
<Filter Include="HTTPClient">
<UniqueIdentifier>{c7b17268-a9fa-4338-a236-118b69247461}</UniqueIdentifier>
<UniqueIdentifier>{b58373ef-eac1-4561-8e39-928b53ccd21c}</UniqueIdentifier>
</Filter>
<Filter Include="HTTPClient\Header Files">
<UniqueIdentifier>{a2e6c69b-f917-4ee5-9347-60d3f4125adf}</UniqueIdentifier>
<UniqueIdentifier>{939beac3-2438-4458-a10c-4d341d0117b5}</UniqueIdentifier>
</Filter>
<Filter Include="HTTPClient\Source Files">
<UniqueIdentifier>{220af5fc-79e0-4a5f-983f-a6d5db6df0f5}</UniqueIdentifier>
<UniqueIdentifier>{55afc085-6e69-4d34-957a-1746662233b7}</UniqueIdentifier>
</Filter>
<Filter Include="HTML">
<UniqueIdentifier>{981531d7-1bc8-4576-98a7-c1449d05fafa}</UniqueIdentifier>
<UniqueIdentifier>{c82e6404-9e54-4134-8990-be4d457a0def}</UniqueIdentifier>
</Filter>
<Filter Include="HTML\Header Files">
<UniqueIdentifier>{f41afed5-7f39-4177-9fb0-d51d8b94e3a9}</UniqueIdentifier>
<UniqueIdentifier>{942711b4-9e0e-4bcb-b38d-3766b8b12730}</UniqueIdentifier>
</Filter>
<Filter Include="HTML\Source Files">
<UniqueIdentifier>{bff5a89b-6dd5-4696-af9f-1bcce957cea2}</UniqueIdentifier>
<UniqueIdentifier>{a32b91e8-e9d3-4e62-8beb-60bee2d318f7}</UniqueIdentifier>
</Filter>
<Filter Include="FTPClient">
<UniqueIdentifier>{d92ee96f-b606-465e-ad5b-5cbeb5e45f36}</UniqueIdentifier>
<UniqueIdentifier>{ccd8114c-f8e0-46d7-871b-f4aa40c2199b}</UniqueIdentifier>
</Filter>
<Filter Include="FTPClient\Header Files">
<UniqueIdentifier>{bad9b007-3e1c-4c84-97e1-cd83c6e302ae}</UniqueIdentifier>
<UniqueIdentifier>{1b972912-7b3e-443f-99fc-34c009860e55}</UniqueIdentifier>
</Filter>
<Filter Include="FTPClient\Source Files">
<UniqueIdentifier>{0717bac8-1f48-46f3-b920-9f1138d33da9}</UniqueIdentifier>
<UniqueIdentifier>{2278dca2-c9fc-4411-9c2c-3281182b47da}</UniqueIdentifier>
</Filter>
<Filter Include="Reactor">
<UniqueIdentifier>{e978c1ad-8625-4556-bd29-c829ea3656c6}</UniqueIdentifier>
<UniqueIdentifier>{08727dc6-16f9-4269-98e2-9f2fe2559705}</UniqueIdentifier>
</Filter>
<Filter Include="Reactor\Header Files">
<UniqueIdentifier>{61408b0a-c532-4ec4-8ae1-3d343287f67f}</UniqueIdentifier>
<UniqueIdentifier>{855f886e-a191-4caf-b439-111bfd4b0212}</UniqueIdentifier>
</Filter>
<Filter Include="Reactor\Source Files">
<UniqueIdentifier>{0d06b32d-daf3-4656-aae6-1ce4e0553def}</UniqueIdentifier>
<UniqueIdentifier>{5d0e7adf-887a-4e66-a16a-6a7ebd1f092d}</UniqueIdentifier>
</Filter>
<Filter Include="Mail">
<UniqueIdentifier>{a7ee7a75-6e88-4743-8538-0544a9a4dacd}</UniqueIdentifier>
<UniqueIdentifier>{57f71f31-57d3-4b50-8454-6eaef8c39fc7}</UniqueIdentifier>
</Filter>
<Filter Include="Mail\Header Files">
<UniqueIdentifier>{67256a36-5629-404e-bdda-00280b4c39a7}</UniqueIdentifier>
<UniqueIdentifier>{2f699d4e-404d-4943-8d3c-c7b402737060}</UniqueIdentifier>
</Filter>
<Filter Include="Mail\Source Files">
<UniqueIdentifier>{5a720884-2a6f-4643-ba1c-e4ad8a2656ce}</UniqueIdentifier>
<UniqueIdentifier>{794900a2-01fb-4815-8f4c-2eef95b0b5ab}</UniqueIdentifier>
</Filter>
<Filter Include="ICMP">
<UniqueIdentifier>{4ec0d94b-38b8-4418-9bb5-e36d32208a0a}</UniqueIdentifier>
<UniqueIdentifier>{c86e3328-f294-4455-8f6f-8415f30e970b}</UniqueIdentifier>
</Filter>
<Filter Include="ICMP\Header Files">
<UniqueIdentifier>{152cf4f2-aaa2-4eff-bb39-a207b8454ffe}</UniqueIdentifier>
<UniqueIdentifier>{ac76352d-9d0a-4d51-8951-c21ccccc4ae3}</UniqueIdentifier>
</Filter>
<Filter Include="ICMP\Source Files">
<UniqueIdentifier>{1587a1aa-507b-4206-b9eb-d4f354d6f91c}</UniqueIdentifier>
<UniqueIdentifier>{ad749fee-ac21-46c4-a23e-b87b9cd4f56c}</UniqueIdentifier>
</Filter>
<Filter Include="NTP">
<UniqueIdentifier>{2e355966-256f-4002-bcc0-1a7736444f8a}</UniqueIdentifier>
<UniqueIdentifier>{88070294-2185-4d6e-b84b-eb8153fb3498}</UniqueIdentifier>
</Filter>
<Filter Include="NTP\Header Files">
<UniqueIdentifier>{bc46d662-a42d-4f59-babd-990286d6e7a1}</UniqueIdentifier>
<UniqueIdentifier>{daf8e611-43b8-4a52-833f-843d571431c0}</UniqueIdentifier>
</Filter>
<Filter Include="NTP\Source Files">
<UniqueIdentifier>{247f2a99-67f7-4f4f-b737-e805295cec47}</UniqueIdentifier>
<UniqueIdentifier>{db848d2d-4cc5-4223-bf4f-25e1af700caa}</UniqueIdentifier>
</Filter>
<Filter Include="Logging">
<UniqueIdentifier>{68aaf8ef-ed05-4ca7-a211-366725899ff6}</UniqueIdentifier>
<UniqueIdentifier>{6f625173-d3f5-411a-825b-f910fb06631c}</UniqueIdentifier>
</Filter>
<Filter Include="Logging\Header Files">
<UniqueIdentifier>{8ee4b537-4645-4cab-a3d7-18d02f148813}</UniqueIdentifier>
<UniqueIdentifier>{2c658be7-7e1c-4b7a-9611-ffc18c0cef15}</UniqueIdentifier>
</Filter>
<Filter Include="Logging\Source Files">
<UniqueIdentifier>{20b3b977-8e3c-420e-950a-531c1220b364}</UniqueIdentifier>
<UniqueIdentifier>{3e42085e-6da7-48af-bdfa-473a7899bfb4}</UniqueIdentifier>
</Filter>
<Filter Include="WebSocket">
<UniqueIdentifier>{f810dba1-6fd4-44ab-bf32-b249b4078d1b}</UniqueIdentifier>
<UniqueIdentifier>{b1aa8065-20f8-467d-9061-e08578c828c6}</UniqueIdentifier>
</Filter>
<Filter Include="WebSocket\Header Files">
<UniqueIdentifier>{250a034c-57f7-4196-8258-8f1e1612d13f}</UniqueIdentifier>
<UniqueIdentifier>{f7664e6a-fe43-4daf-991f-859df7cde10c}</UniqueIdentifier>
</Filter>
<Filter Include="WebSocket\Source Files">
<UniqueIdentifier>{60aa49e2-5ebd-4b2d-a4ae-1e1046163318}</UniqueIdentifier>
<UniqueIdentifier>{f1326ffa-e64d-40d3-a47e-915195e0351a}</UniqueIdentifier>
</Filter>
<Filter Include="OAuth">
<UniqueIdentifier>{7eb4829c-c085-46fb-af72-79ba1183d85a}</UniqueIdentifier>
<UniqueIdentifier>{9d9212b8-0273-4b98-b591-33f7c86ee91b}</UniqueIdentifier>
</Filter>
<Filter Include="OAuth\Header Files">
<UniqueIdentifier>{2d1fc457-7ce3-4338-8d44-99d4b3df7135}</UniqueIdentifier>
<UniqueIdentifier>{3f164c69-63fc-4f82-93ae-2e34fdb3f458}</UniqueIdentifier>
</Filter>
<Filter Include="OAuth\Source Files">
<UniqueIdentifier>{003a505a-337e-4229-8ccc-bd78602391c0}</UniqueIdentifier>
<UniqueIdentifier>{9fb68d4d-2dbe-4999-88cd-d6ce4f0f160d}</UniqueIdentifier>
</Filter>
<Filter Include="UDP">
<UniqueIdentifier>{f4114ffe-9994-4331-897d-a52029366aff}</UniqueIdentifier>
</Filter>
<Filter Include="UDP\Source Files">
<UniqueIdentifier>{4b53770a-8215-4d4b-b70e-f575d1820382}</UniqueIdentifier>
</Filter>
<Filter Include="UDP\Header Files">
<UniqueIdentifier>{828714c4-311d-4f1d-a8b7-055e63091653}</UniqueIdentifier>
</Filter>
</ItemGroup>
<ItemGroup>
@ -465,6 +474,27 @@
<ClInclude Include="include\Poco\Net\OAuth20Credentials.h">
<Filter>OAuth\Header Files</Filter>
</ClInclude>
<ClInclude Include="include\Poco\Net\MultiSocketPoller.h">
<Filter>UDP\Header Files</Filter>
</ClInclude>
<ClInclude Include="include\Poco\Net\SingleSocketPoller.h">
<Filter>UDP\Header Files</Filter>
</ClInclude>
<ClInclude Include="include\Poco\Net\UDPClient.h">
<Filter>UDP\Header Files</Filter>
</ClInclude>
<ClInclude Include="include\Poco\Net\UDPHandler.h">
<Filter>UDP\Header Files</Filter>
</ClInclude>
<ClInclude Include="include\Poco\Net\UDPServer.h">
<Filter>UDP\Header Files</Filter>
</ClInclude>
<ClInclude Include="include\Poco\Net\UDPServerParams.h">
<Filter>UDP\Header Files</Filter>
</ClInclude>
<ClInclude Include="include\Poco\Net\UDPSocketReader.h">
<Filter>UDP\Header Files</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<ClCompile Include="src\DNS.cpp">
@ -767,6 +797,12 @@
<ClCompile Include="src\OAuth20Credentials.cpp">
<Filter>OAuth\Source Files</Filter>
</ClCompile>
<ClCompile Include="src\UDPClient.cpp">
<Filter>UDP\Source Files</Filter>
</ClCompile>
<ClCompile Include="src\UDPServerParams.cpp">
<Filter>UDP\Source Files</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="..\DLLVersion.rc" />

View File

@ -85,7 +85,7 @@
</ImportGroup>
<PropertyGroup Label="UserMacros"/>
<PropertyGroup>
<_ProjectFileVersion>15.0.26228.4</_ProjectFileVersion>
<_ProjectFileVersion>15.0.27428.2015</_ProjectFileVersion>
<TargetName Condition="'$(Configuration)|$(Platform)'=='debug_shared|x64'">PocoNet64d</TargetName>
<TargetName Condition="'$(Configuration)|$(Platform)'=='debug_static_md|x64'">PocoNetmdd</TargetName>
<TargetName Condition="'$(Configuration)|$(Platform)'=='debug_static_mt|x64'">PocoNetmtd</TargetName>
@ -335,6 +335,7 @@
<ClInclude Include="include\Poco\Net\MulticastSocket.h"/>
<ClInclude Include="include\Poco\Net\MultipartReader.h"/>
<ClInclude Include="include\Poco\Net\MultipartWriter.h"/>
<ClInclude Include="include\Poco\Net\MultiSocketPoller.h"/>
<ClInclude Include="include\Poco\Net\NameValueCollection.h"/>
<ClInclude Include="include\Poco\Net\Net.h"/>
<ClInclude Include="include\Poco\Net\NetException.h"/>
@ -360,6 +361,7 @@
<ClInclude Include="include\Poco\Net\RemoteSyslogListener.h"/>
<ClInclude Include="include\Poco\Net\ServerSocket.h"/>
<ClInclude Include="include\Poco\Net\ServerSocketImpl.h"/>
<ClInclude Include="include\Poco\Net\SingleSocketPoller.h"/>
<ClInclude Include="include\Poco\Net\SMTPChannel.h"/>
<ClInclude Include="include\Poco\Net\SMTPClientSession.h"/>
<ClInclude Include="include\Poco\Net\Socket.h"/>
@ -381,6 +383,11 @@
<ClInclude Include="include\Poco\Net\TCPServerConnectionFactory.h"/>
<ClInclude Include="include\Poco\Net\TCPServerDispatcher.h"/>
<ClInclude Include="include\Poco\Net\TCPServerParams.h"/>
<ClInclude Include="include\Poco\Net\UDPClient.h"/>
<ClInclude Include="include\Poco\Net\UDPHandler.h"/>
<ClInclude Include="include\Poco\Net\UDPServer.h"/>
<ClInclude Include="include\Poco\Net\UDPServerParams.h"/>
<ClInclude Include="include\Poco\Net\UDPSocketReader.h"/>
<ClInclude Include="include\Poco\Net\WebSocket.h"/>
<ClInclude Include="include\Poco\Net\WebSocketImpl.h"/>
</ItemGroup>
@ -483,6 +490,8 @@
<ClCompile Include="src\TCPServerConnectionFactory.cpp"/>
<ClCompile Include="src\TCPServerDispatcher.cpp"/>
<ClCompile Include="src\TCPServerParams.cpp"/>
<ClCompile Include="src\UDPClient.cpp"/>
<ClCompile Include="src\UDPServerParams.cpp"/>
<ClCompile Include="src\WebSocket.cpp"/>
<ClCompile Include="src\WebSocketImpl.cpp"/>
</ItemGroup>

View File

@ -2,148 +2,157 @@
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Filter Include="NetCore">
<UniqueIdentifier>{6442b4c1-66d3-4ec8-a40e-7f08ab47c795}</UniqueIdentifier>
<UniqueIdentifier>{8c360576-b88d-41b5-ac00-b02e07d09cad}</UniqueIdentifier>
</Filter>
<Filter Include="NetCore\Header Files">
<UniqueIdentifier>{8d1c024d-8244-4c90-9579-76a8f1d58e79}</UniqueIdentifier>
<UniqueIdentifier>{18bfce41-a69b-4228-9a42-0ac30b16698c}</UniqueIdentifier>
</Filter>
<Filter Include="NetCore\Source Files">
<UniqueIdentifier>{f38d6d8b-41ef-4ffd-b8db-d114e669859c}</UniqueIdentifier>
<UniqueIdentifier>{5c176d7a-f182-4488-98ff-d17a15d04bfa}</UniqueIdentifier>
</Filter>
<Filter Include="Sockets">
<UniqueIdentifier>{5069f6eb-db4d-4753-8029-b136bd203799}</UniqueIdentifier>
<UniqueIdentifier>{7e039cc8-1a2c-4eb9-83ad-71475167de66}</UniqueIdentifier>
</Filter>
<Filter Include="Sockets\Header Files">
<UniqueIdentifier>{3ae5c32f-5564-49f7-bcfb-8aa03efc35dc}</UniqueIdentifier>
<UniqueIdentifier>{7871194f-a873-49ee-9a0d-ffd580f27cc4}</UniqueIdentifier>
</Filter>
<Filter Include="Sockets\Source Files">
<UniqueIdentifier>{cabdd975-3dcc-4d5f-b2ed-2666ae8770c3}</UniqueIdentifier>
<UniqueIdentifier>{7ea32787-6bdc-42a4-98df-345ca5d07307}</UniqueIdentifier>
</Filter>
<Filter Include="Messages">
<UniqueIdentifier>{9f678a1e-cf41-40b4-a4ee-b208c5d5f3e1}</UniqueIdentifier>
<UniqueIdentifier>{8edc6273-bb7f-426a-9f3a-a87eac52713a}</UniqueIdentifier>
</Filter>
<Filter Include="Messages\Header Files">
<UniqueIdentifier>{c7c82e5d-9689-4993-bcac-a506c851e0bc}</UniqueIdentifier>
<UniqueIdentifier>{1d06f153-2714-423d-b139-91211b5c00a1}</UniqueIdentifier>
</Filter>
<Filter Include="Messages\Source Files">
<UniqueIdentifier>{e900fb82-05fb-4b16-8629-d4094811513c}</UniqueIdentifier>
<UniqueIdentifier>{aa5617c4-5f30-49ef-aec0-2107956a8bfb}</UniqueIdentifier>
</Filter>
<Filter Include="HTTP">
<UniqueIdentifier>{fcfa3d93-a1ce-4aca-aaf8-30387304db50}</UniqueIdentifier>
<UniqueIdentifier>{c5d1e6bf-7e4c-4176-a694-8d2db8aafd6d}</UniqueIdentifier>
</Filter>
<Filter Include="HTTP\Header Files">
<UniqueIdentifier>{a92530db-130d-43cc-952f-01530dacb399}</UniqueIdentifier>
<UniqueIdentifier>{ea97dbd1-c9ff-4be4-964a-1630c1755f88}</UniqueIdentifier>
</Filter>
<Filter Include="HTTP\Source Files">
<UniqueIdentifier>{a459fa4a-3bac-4955-86d9-2619baefd417}</UniqueIdentifier>
<UniqueIdentifier>{110189b9-c5fc-48e3-976a-1ba94a8a84b5}</UniqueIdentifier>
</Filter>
<Filter Include="TCPServer">
<UniqueIdentifier>{e4b42a8f-9f89-43e4-8b4d-118b87e6a83e}</UniqueIdentifier>
<UniqueIdentifier>{1e350ffe-0b71-4113-b817-f63a3c8f1df1}</UniqueIdentifier>
</Filter>
<Filter Include="TCPServer\Header Files">
<UniqueIdentifier>{4dd5f092-8d24-4351-b009-87de1c5842be}</UniqueIdentifier>
<UniqueIdentifier>{01f7dacf-0b9c-4b63-8208-ec65923b77e4}</UniqueIdentifier>
</Filter>
<Filter Include="TCPServer\Source Files">
<UniqueIdentifier>{ffe7dffe-bccb-46e0-9339-56139122bd92}</UniqueIdentifier>
<UniqueIdentifier>{3f780e9a-9ad8-47a1-9b60-4a540d051efb}</UniqueIdentifier>
</Filter>
<Filter Include="HTTPServer">
<UniqueIdentifier>{9d775cec-dfe6-40c8-a80f-26903eb3ddab}</UniqueIdentifier>
<UniqueIdentifier>{a5040df9-a415-4606-907f-907ce1720530}</UniqueIdentifier>
</Filter>
<Filter Include="HTTPServer\Header Files">
<UniqueIdentifier>{e7dc7c66-5b6a-46cc-a80c-fab35c122001}</UniqueIdentifier>
<UniqueIdentifier>{4da71e83-6da3-40af-9037-3bfa842a7c30}</UniqueIdentifier>
</Filter>
<Filter Include="HTTPServer\Source Files">
<UniqueIdentifier>{7c7b0b3e-c6da-45ae-876e-926f5e7480b2}</UniqueIdentifier>
<UniqueIdentifier>{077b37ca-21d9-4b66-a707-16e4747a48d0}</UniqueIdentifier>
</Filter>
<Filter Include="HTTPClient">
<UniqueIdentifier>{c0816cbe-28b2-4ecc-aa24-d1fcae444a2e}</UniqueIdentifier>
<UniqueIdentifier>{fe4d7bde-9c0d-4463-a73a-5973e0c118fd}</UniqueIdentifier>
</Filter>
<Filter Include="HTTPClient\Header Files">
<UniqueIdentifier>{7f79be94-acfe-4a89-b15f-e5932a0ff6ab}</UniqueIdentifier>
<UniqueIdentifier>{b052f2b1-83a1-45f6-9fe3-dad6db836a93}</UniqueIdentifier>
</Filter>
<Filter Include="HTTPClient\Source Files">
<UniqueIdentifier>{c3be2ec8-6f4c-429c-b0a6-1d56a9321894}</UniqueIdentifier>
<UniqueIdentifier>{f78e369c-7705-4df9-b495-acd9c19bee3b}</UniqueIdentifier>
</Filter>
<Filter Include="HTML">
<UniqueIdentifier>{bddade8c-a271-45ac-b9db-b4c2f6a036d5}</UniqueIdentifier>
<UniqueIdentifier>{0d762274-ff95-4c84-8400-ec5a13284808}</UniqueIdentifier>
</Filter>
<Filter Include="HTML\Header Files">
<UniqueIdentifier>{75fa7ceb-e139-4814-840e-09a8ee9f12c6}</UniqueIdentifier>
<UniqueIdentifier>{85a97687-15d4-40bd-bbac-2c603a3fb933}</UniqueIdentifier>
</Filter>
<Filter Include="HTML\Source Files">
<UniqueIdentifier>{be05f4bc-b5cd-4a2d-a969-3c3d8bbdc464}</UniqueIdentifier>
<UniqueIdentifier>{f0bbd38d-9831-4765-8295-32e26f05289b}</UniqueIdentifier>
</Filter>
<Filter Include="FTPClient">
<UniqueIdentifier>{e2d94fdc-c522-403b-ac8e-126a6f544a95}</UniqueIdentifier>
<UniqueIdentifier>{03801d34-2c13-4d76-a279-b68f93fabd0a}</UniqueIdentifier>
</Filter>
<Filter Include="FTPClient\Header Files">
<UniqueIdentifier>{dc6a25f2-d885-4f6a-b377-26abed436d6f}</UniqueIdentifier>
<UniqueIdentifier>{70cf80a2-ceae-4121-86ef-07e43803e4e4}</UniqueIdentifier>
</Filter>
<Filter Include="FTPClient\Source Files">
<UniqueIdentifier>{8e3fd2c1-f4af-47f6-8555-ce39ffb08319}</UniqueIdentifier>
<UniqueIdentifier>{ef7dd9a8-7388-4cef-bf14-0b226d8d513e}</UniqueIdentifier>
</Filter>
<Filter Include="Reactor">
<UniqueIdentifier>{7e2382b2-cd3e-486d-b1a7-56912c32ad70}</UniqueIdentifier>
<UniqueIdentifier>{4a1e679d-9e0b-44b3-82f2-924f87ad062d}</UniqueIdentifier>
</Filter>
<Filter Include="Reactor\Header Files">
<UniqueIdentifier>{d6c53942-bb1d-438a-ad39-6f9c2f4a7c36}</UniqueIdentifier>
<UniqueIdentifier>{f15ae96a-41bb-488c-9868-a366a8191230}</UniqueIdentifier>
</Filter>
<Filter Include="Reactor\Source Files">
<UniqueIdentifier>{a9162ecb-0f50-4b17-a857-6afe98b83c23}</UniqueIdentifier>
<UniqueIdentifier>{16e13148-39ec-4506-9ea7-9bd3bf8465ea}</UniqueIdentifier>
</Filter>
<Filter Include="Mail">
<UniqueIdentifier>{e25932fa-c91c-4546-aaee-77d5ca5be6e7}</UniqueIdentifier>
<UniqueIdentifier>{a36ecb86-ff31-4009-8113-bcbbbdee0f3f}</UniqueIdentifier>
</Filter>
<Filter Include="Mail\Header Files">
<UniqueIdentifier>{f42eb6dd-fdc5-4db7-934a-0d54090c30f8}</UniqueIdentifier>
<UniqueIdentifier>{0e56671e-da7d-4d74-a00d-7e883ba1dc4c}</UniqueIdentifier>
</Filter>
<Filter Include="Mail\Source Files">
<UniqueIdentifier>{f440ae27-b2e0-4b9d-8925-0f83b37ea292}</UniqueIdentifier>
<UniqueIdentifier>{4b511863-51ce-4ce9-a04d-b72df588c249}</UniqueIdentifier>
</Filter>
<Filter Include="ICMP">
<UniqueIdentifier>{54aa7b50-6cb3-4aaf-94ee-dea8cf336938}</UniqueIdentifier>
<UniqueIdentifier>{0d3b8b06-8044-4147-807b-f1544a7831cd}</UniqueIdentifier>
</Filter>
<Filter Include="ICMP\Header Files">
<UniqueIdentifier>{e6f8e338-f6d0-4af3-90f5-7b74f53874b8}</UniqueIdentifier>
<UniqueIdentifier>{f41cba0e-ae39-4e9e-af20-df35feb1287c}</UniqueIdentifier>
</Filter>
<Filter Include="ICMP\Source Files">
<UniqueIdentifier>{2cb7138d-2ad6-44ec-bc80-31d05b0f86a7}</UniqueIdentifier>
<UniqueIdentifier>{921c45df-3c3f-4e19-ad13-4f53a997775d}</UniqueIdentifier>
</Filter>
<Filter Include="NTP">
<UniqueIdentifier>{3a7eff2f-3852-47d9-b508-0aa6997d9336}</UniqueIdentifier>
<UniqueIdentifier>{f977ddc9-519f-43ce-bf98-0bd8e531fdb7}</UniqueIdentifier>
</Filter>
<Filter Include="NTP\Header Files">
<UniqueIdentifier>{f78d7274-2486-4ca7-bebf-a88f1c527daa}</UniqueIdentifier>
<UniqueIdentifier>{6c1894a9-37bf-4712-8113-fb079bbf526e}</UniqueIdentifier>
</Filter>
<Filter Include="NTP\Source Files">
<UniqueIdentifier>{ab469949-29b6-466a-af0e-a66eadfa91a8}</UniqueIdentifier>
<UniqueIdentifier>{bf761fc0-7076-46bc-9197-b151ccecc044}</UniqueIdentifier>
</Filter>
<Filter Include="Logging">
<UniqueIdentifier>{a5b27e6c-3cd4-498c-82d9-516b801262f6}</UniqueIdentifier>
<UniqueIdentifier>{eb52d784-50e9-4588-91e1-b817e6d5363d}</UniqueIdentifier>
</Filter>
<Filter Include="Logging\Header Files">
<UniqueIdentifier>{46562fa2-614c-4fd3-bab3-2b1735a1ebfb}</UniqueIdentifier>
<UniqueIdentifier>{e8182ebd-0a74-418c-a292-213ae8920c43}</UniqueIdentifier>
</Filter>
<Filter Include="Logging\Source Files">
<UniqueIdentifier>{43f39d87-319a-447f-a2e2-60dadeb6936b}</UniqueIdentifier>
<UniqueIdentifier>{9134903b-32d9-4687-9f45-312123788be6}</UniqueIdentifier>
</Filter>
<Filter Include="WebSocket">
<UniqueIdentifier>{a1abe9f6-97c3-48be-926a-6a2088855450}</UniqueIdentifier>
<UniqueIdentifier>{ab7abfc7-3f8e-415c-af6d-225bd748bad8}</UniqueIdentifier>
</Filter>
<Filter Include="WebSocket\Header Files">
<UniqueIdentifier>{2c643087-03eb-44e6-8408-6d1247660651}</UniqueIdentifier>
<UniqueIdentifier>{447b8371-ebf6-4dad-82dc-b974217ae77a}</UniqueIdentifier>
</Filter>
<Filter Include="WebSocket\Source Files">
<UniqueIdentifier>{bc9ffab9-4642-4bf4-aa51-46b9c0c7de14}</UniqueIdentifier>
<UniqueIdentifier>{cd7f3933-6bac-44b0-ab50-7e7687495afe}</UniqueIdentifier>
</Filter>
<Filter Include="OAuth">
<UniqueIdentifier>{b57ce297-c602-4055-ada3-8011c281b5fd}</UniqueIdentifier>
<UniqueIdentifier>{12ff6202-dfae-46ab-bd22-33edaf6f39ab}</UniqueIdentifier>
</Filter>
<Filter Include="OAuth\Header Files">
<UniqueIdentifier>{78a31153-b77b-4820-a587-39b0a7c14875}</UniqueIdentifier>
<UniqueIdentifier>{cda4dc65-06df-4076-823e-e376c4cec54f}</UniqueIdentifier>
</Filter>
<Filter Include="OAuth\Source Files">
<UniqueIdentifier>{aaf92947-b538-4cef-be49-cf5332dec37e}</UniqueIdentifier>
<UniqueIdentifier>{65a35422-66bf-4eef-8cca-4e3bc7838500}</UniqueIdentifier>
</Filter>
<Filter Include="UDP">
<UniqueIdentifier>{208c459f-5f9d-46f8-ad10-ed5477471e29}</UniqueIdentifier>
</Filter>
<Filter Include="UDP\Source Files">
<UniqueIdentifier>{8fe08a04-9cf9-46f4-ada4-bf7026a3c718}</UniqueIdentifier>
</Filter>
<Filter Include="UDP\Header Files">
<UniqueIdentifier>{e8126c7b-f7eb-4fd0-8405-a25686a2eb43}</UniqueIdentifier>
</Filter>
</ItemGroup>
<ItemGroup>
@ -465,6 +474,27 @@
<ClInclude Include="include\Poco\Net\OAuth20Credentials.h">
<Filter>OAuth\Header Files</Filter>
</ClInclude>
<ClInclude Include="include\Poco\Net\MultiSocketPoller.h">
<Filter>UDP\Header Files</Filter>
</ClInclude>
<ClInclude Include="include\Poco\Net\SingleSocketPoller.h">
<Filter>UDP\Header Files</Filter>
</ClInclude>
<ClInclude Include="include\Poco\Net\UDPClient.h">
<Filter>UDP\Header Files</Filter>
</ClInclude>
<ClInclude Include="include\Poco\Net\UDPHandler.h">
<Filter>UDP\Header Files</Filter>
</ClInclude>
<ClInclude Include="include\Poco\Net\UDPServer.h">
<Filter>UDP\Header Files</Filter>
</ClInclude>
<ClInclude Include="include\Poco\Net\UDPServerParams.h">
<Filter>UDP\Header Files</Filter>
</ClInclude>
<ClInclude Include="include\Poco\Net\UDPSocketReader.h">
<Filter>UDP\Header Files</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<ClCompile Include="src\DNS.cpp">
@ -767,6 +797,12 @@
<ClCompile Include="src\OAuth20Credentials.cpp">
<Filter>OAuth\Source Files</Filter>
</ClCompile>
<ClCompile Include="src\UDPClient.cpp">
<Filter>UDP\Source Files</Filter>
</ClCompile>
<ClCompile Include="src\UDPServerParams.cpp">
<Filter>UDP\Source Files</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="..\DLLVersion.rc" />

View File

@ -949,6 +949,33 @@
RelativePath=".\src\OAuth20Credentials.cpp"/>
</Filter>
</Filter>
<Filter
Name="UDP">
<Filter
Name="Source Files">
<File
RelativePath=".\src\UDPClient.cpp"/>
<File
RelativePath=".\src\UDPServerParams.cpp"/>
</Filter>
<Filter
Name="Header Files">
<File
RelativePath=".\include\Poco\Net\MultiSocketPoller.h"/>
<File
RelativePath=".\include\Poco\Net\SingleSocketPoller.h"/>
<File
RelativePath=".\include\Poco\Net\UDPClient.h"/>
<File
RelativePath=".\include\Poco\Net\UDPHandler.h"/>
<File
RelativePath=".\include\Poco\Net\UDPServer.h"/>
<File
RelativePath=".\include\Poco\Net\UDPServerParams.h"/>
<File
RelativePath=".\include\Poco\Net\UDPSocketReader.h"/>
</Filter>
</Filter>
<File
RelativePath="..\DLLVersion.rc">
<FileConfiguration

View File

@ -20,6 +20,7 @@
#include "Poco/Net/Net.h"
#include "Poco/Net/Socket.h"
#include "Poco/Buffer.h"
namespace Poco {
@ -108,12 +109,29 @@ public:
/// Returns the number of bytes sent, which may be
/// less than the number of bytes specified.
int sendBytes(const SocketBufVec& buffer, int flags = 0);
/// Sends the contents of the given buffers 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 receiveBytes(SocketBufVec& buffer, int flags = 0);
/// Receives data from the socket and stores it in buffers.
///
/// Returns the number of bytes received.
int receiveBytes(Poco::Buffer<char>& buffer, int flags = 0, const Poco::Timespan& timeout = 100000);
/// Receives data from the socket and stores it in buffers.
///
/// 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.
@ -121,6 +139,13 @@ public:
/// Returns the number of bytes sent, which may be
/// less than the number of bytes specified.
int sendTo(const SocketBufVec& buffers, const SocketAddress& address, int flags = 0);
/// Sends the contents of the given buffers 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.
@ -128,6 +153,30 @@ public:
///
/// Returns the number of bytes received.
int receiveFrom(void* buffer, int length, struct sockaddr** ppSA, poco_socklen_t** ppSALen, int flags = 0);
/// Receives data from the socket and stores it
/// in buffer. Up to length bytes are received.
/// Stores the native address of the sender in
/// ppSA, and the length of native address in ppSALen.
///
/// Returns the number of bytes received.
int receiveFrom(SocketBufVec& buffers, SocketAddress& address, int flags = 0);
/// Receives data from the socket and stores it
/// in buffers. Up to total length of all buffers
/// are received.
/// Stores the address of the sender in address.
///
/// Returns the number of bytes received.
int receiveFrom(SocketBufVec& buffers, struct sockaddr** ppSA, poco_socklen_t** ppSALen, int flags = 0);
/// Receives data from the socket and stores it
/// in buffers.
/// Stores the native address of the sender in
/// ppSA, and the length of native address in ppSALen.
///
/// Returns the number of bytes received.
void setBroadcast(bool flag);
/// Sets the value of the SO_BROADCAST socket option.
///

View File

@ -67,7 +67,7 @@ public:
int repeat = 1,
int dataSize = 48,
int ttl = 128,
int timeout = 50000);
int timeout = 100000);
/// Pings the specified address [repeat] times.
/// Notifications are not posted for events.
///
@ -77,7 +77,7 @@ public:
int repeat = 1,
int dataSize = 48,
int ttl = 128,
int timeout = 50000);
int timeout = 100000);
/// Calls ICMPClient::ping(SocketAddress&, int) and
/// returns the result.
///

View File

@ -59,20 +59,22 @@ public:
/// 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);
std::string errorDescription(Poco::UInt8* buffer, int length, int& type, int& code);
/// Returns error description string.
/// If supplied buffer contains an ICMP echo reply packet, an
/// empty string is returned indicating the absence of error.
///
/// If type and code of the error can be determined, they are
/// assigned to the type and code respectively.
///
/// Supplied buffer includes IP header, ICMP header and data.
std::string typeDescription(int typeId);

View File

@ -71,11 +71,13 @@ public:
/// Supplied buffer includes IP header, ICMP header and data.
/// Must be overriden.
virtual std::string errorDescription(Poco::UInt8* buffer, int length) = 0;
virtual std::string errorDescription(Poco::UInt8* buffer, int length, int& type, int& code) = 0;
/// Returns error description string.
/// If supplied buffer contains an ICMP echo reply packet, an
/// empty string is returned indicating the absence of error.
///
/// If type and code of the error can be determined, they are
/// assigned to the type and code respectively.
///
/// Supplied buffer includes IP header, ICMP header and data.
/// Must be overriden.
@ -84,6 +86,7 @@ public:
/// Must be overriden.
static const Poco::UInt16 MAX_PACKET_SIZE;
static const Poco::UInt16 MAX_PAYLOAD_SIZE;
static const Poco::UInt16 MAX_SEQ_VALUE;
protected:

View File

@ -69,12 +69,19 @@ public:
int dataSize() const;
/// Returns the data size in bytes.
int packetSize() const;
/// Returns the packet size in bytes.
int ttl() const;
/// Returns the Time-To-Live value.
int timeout() const;
/// Returns the socket timeout value.
static Poco::UInt16 mtu(const SocketAddress& address, Poco::UInt16 sz);
/// Returns minimum payload path MTU size for the destination,
/// or 0 if MTU can not be determined.
protected:
ICMPSocket(SocketImpl* pImpl);
/// Creates the Socket and attaches the given SocketImpl.

View File

@ -51,6 +51,9 @@ public:
int dataSize() const;
/// Returns the data size in bytes.
int packetSize() const;
/// Returns the packet size in bytes.
int ttl() const;
/// Returns the Time-To-Live value.
@ -61,6 +64,8 @@ protected:
~ICMPSocketImpl();
private:
void checkFragmentation(const std::string& err, int type, int code);
ICMPPacket _icmpPacket;
int _ttl;
int _timeout;
@ -70,6 +75,12 @@ private:
//
// inlines
//
inline int ICMPSocketImpl::packetSize() const
{
return _icmpPacket.packetSize();
}
inline int ICMPSocketImpl::dataSize() const
{
return _icmpPacket.getDataSize();

View File

@ -30,7 +30,7 @@ namespace Net {
class Net_API ICMPv4PacketImpl : public ICMPPacketImpl
/// This class implements the ICMPv4 packet.
/// Parts are based on original ICMP code by
/// Parts are based on the original ICMP code by
/// Mike Muuss
/// U. S. Army Ballistic Research Laboratory
/// December, 1983
@ -135,10 +135,12 @@ public:
///
/// Buffer includes IP header, ICMP header and data.
virtual std::string errorDescription(Poco::UInt8* buffer, int length);
virtual std::string errorDescription(Poco::UInt8* buffer, int length, int& type, int& code);
/// Returns error description string.
/// If supplied buffer contains ICMPv4 echo reply packet, an
/// empty string is returned indicating the absence of error.
/// If type and code of the error can be determined, they are
/// assigned to the type and code respectively.
///
/// Buffer includes IP header, ICMP header and data.

View File

@ -0,0 +1,128 @@
//
// MultiSocketPoller.h
//
// Library: Net
// Package: UDP
// Module: MultiSocketPoller
//
// Definition of the MultiSocketPoller class.
//
// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH.
// and Contributors.
//
// SPDX-License-Identifier: BSL-1.0
//
#ifndef Net_MultiSocketPoller_INCLUDED
#define Net_MultiSocketPoller_INCLUDED
#include "Poco/Net/Net.h"
#include "Poco/Net/Socket.h"
#include "Poco/Net/UDPHandler.h"
namespace Poco {
namespace Net {
template <std::size_t S = POCO_UDP_BUF_SIZE>
class MultiSocketPoller
/// MultiSocketPoller, as its name indicates, repeatedly polls a set of
/// sockets for readability and/or eror. If socket is readable or in error
/// state, the reading/error handling actions are delegated to the reader.
{
public:
MultiSocketPoller(typename UDPHandlerImpl<S>::List& handlers, const Poco::Net::SocketAddress& sa, int nSockets = 10, Poco::Timespan timeout = 250000):
_address(sa),
_timeout(timeout),
_reader(handlers)
/// Creates the MutiSocketPoller.
{
poco_assert (_address.port() > 0 && _address.host().toString() != "0.0.0.0");
addSockets(nSockets);
}
MultiSocketPoller(typename UDPHandlerImpl<S>::List& handlers, const UDPServerParams& serverParams):
_address(serverParams.address()),
_timeout(serverParams.timeout()),
_reader(handlers)
/// Creates the MutiSocketPoller.
{
poco_assert (_address.port() > 0 && _address.host().toString() != "0.0.0.0");
addSockets(serverParams.numberOfSockets());
}
~MultiSocketPoller()
/// Destroys MutiSocketPoller
{
}
Poco::UInt16 port() const
/// Returns the port the socket is
/// listening on.
{
return _address.port();
}
Poco::Net::SocketAddress address() const
/// Returns the address of the server.
{
return _address;
}
void poll()
{
if (_reader.handlerStopped()) return;
PollSet::SocketModeMap sm;
PollSet::SocketModeMap::iterator it;
PollSet::SocketModeMap::iterator end;
sm = _pollSet.poll(_timeout);
it = sm.begin();
end = sm.end();
for (; it != end; ++it)
{
if (it->second & PollSet::POLL_READ)
{
DatagramSocket ds(it->first);
_reader.read(ds);
}
else if (it->second & PollSet::POLL_ERROR)
{
_reader.setError(it->first.impl()->sockfd());
}
}
}
void stop()
{
_reader.stopHandler();
}
bool done() const
{
return _reader.handlerDone();
}
private:
void addSockets(int nSockets)
{
for (int i = 0; i < nSockets; ++i)
{
DatagramSocket ds; ds.bind(_address, true, true);
_pollSet.add(ds, PollSet::POLL_READ | PollSet::POLL_ERROR);
}
}
PollSet _pollSet;
SocketAddress _address;
Poco::Timespan _timeout;
UDPSocketReader<S> _reader;
};
} } // namespace Poco::Net
#endif // Net_MultiSocketPoller_INCLUDED

View File

@ -47,6 +47,7 @@ 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, ICMPFragmentationException, NetException)
POCO_DECLARE_EXCEPTION(Net_API, NTPException, NetException)
POCO_DECLARE_EXCEPTION(Net_API, HTMLFormException, NetException)
POCO_DECLARE_EXCEPTION(Net_API, WebSocketException, NetException)

View File

@ -53,7 +53,8 @@ class ParallelSocketAcceptor
/// details.
{
public:
typedef Poco::Net::ParallelSocketReactor<SR> ParallelReactor;
typedef Poco::Net::ParallelSocketReactor<SR> ParallelReactor;
typedef Poco::Observer<ParallelSocketAcceptor, ReadableNotification> Observer;
explicit ParallelSocketAcceptor(ServerSocket& socket,
unsigned threads = Poco::Environment::processorCount()):
@ -79,9 +80,7 @@ public:
/// with the given SocketReactor.
{
init();
_pReactor->addEventHandler(_socket,
Poco::Observer<ParallelSocketAcceptor,
ReadableNotification>(*this, &ParallelSocketAcceptor::onAccept));
_pReactor->addEventHandler(_socket, Observer(*this, &ParallelSocketAcceptor::onAccept));
}
virtual ~ParallelSocketAcceptor()
@ -91,9 +90,7 @@ public:
{
if (_pReactor)
{
_pReactor->removeEventHandler(_socket,
Poco::Observer<ParallelSocketAcceptor,
ReadableNotification>(*this, &ParallelSocketAcceptor::onAccept));
_pReactor->removeEventHandler(_socket, Observer(*this, &ParallelSocketAcceptor::onAccept));
}
}
catch (...)
@ -105,15 +102,9 @@ public:
void setReactor(SocketReactor& reactor)
/// Sets the reactor for this acceptor.
{
_pReactor = &reactor;
if (!_pReactor->hasEventHandler(_socket,
Poco::Observer<ParallelSocketAcceptor,
ReadableNotification>(*this, &ParallelSocketAcceptor::onAccept)))
{
registerAcceptor(reactor);
}
registerAcceptor(reactor);
}
virtual void registerAcceptor(SocketReactor& reactor)
/// Registers the ParallelSocketAcceptor with a SocketReactor.
///
@ -123,13 +114,11 @@ public:
/// 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<ParallelSocketAcceptor,
ReadableNotification>(*this, &ParallelSocketAcceptor::onAccept));
if (!_pReactor->hasEventHandler(_socket, Observer(*this, &ParallelSocketAcceptor::onAccept)))
{
_pReactor->addEventHandler(_socket, Observer(*this, &ParallelSocketAcceptor::onAccept));
}
}
virtual void unregisterAcceptor()
@ -143,9 +132,7 @@ public:
{
if (_pReactor)
{
_pReactor->removeEventHandler(_socket,
Poco::Observer<ParallelSocketAcceptor,
ReadableNotification>(*this, &ParallelSocketAcceptor::onAccept));
_pReactor->removeEventHandler(_socket, Observer(*this, &ParallelSocketAcceptor::onAccept));
}
}

View File

@ -0,0 +1,104 @@
//
// SingleSocketPoller.h
//
// Library: Net
// Package: UDP
// Module: SingleSocketPoller
//
// Definition of the SingleSocketPoller class.
//
// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH.
// and Contributors.
//
// SPDX-License-Identifier: BSL-1.0
//
#ifndef Net_SingleSocketPoller_INCLUDED
#define Net_SingleSocketPoller_INCLUDED
#include "Poco/Net/Net.h"
#include "Poco/Net/DatagramSocket.h"
#include "Poco/Net/UDPHandler.h"
#include "Poco/Net/PollSet.h"
namespace Poco {
namespace Net {
template <std::size_t S = POCO_UDP_BUF_SIZE>
class SingleSocketPoller
/// SinlgeSocketPoller, as its name indicates, repeatedly polls a single
/// socket for readability; if the socket is readable, the reading action
/// is delegated to the reader.
{
public:
SingleSocketPoller(typename UDPHandlerImpl<S>::List& handlers, const Poco::Net::SocketAddress& sa, Poco::Timespan timeout = 250000): _reader(handlers), _timeout(timeout)
/// Creates the SingleSocketPoller and binds it to
/// the given address.
{
_socket.bind(sa, false, false);
_socket.setBlocking(false);
}
SingleSocketPoller(typename UDPHandlerImpl<S>::List& handlers, const UDPServerParams& serverParams): _reader(handlers, serverParams), _timeout(serverParams.timeout())
/// Creates the SingleSocketPoller and binds it to
/// the given address.
{
_socket.bind(serverParams.address(), false, false);
_socket.setBlocking(false);
}
~SingleSocketPoller()
/// Destroys SingleSocketPoller
{
}
Poco::UInt16 port() const
/// Returns the port the socket is
/// listening on.
{
return _socket.address().port();
}
Poco::Net::SocketAddress address() const
/// Returns the address of the server.
{
return _socket.address();
}
void poll()
/// Poll the socket and read if readable.
{
if (_reader.handlerStopped()) return;
if (_socket.poll(_timeout, Socket::SELECT_READ))
{
_reader.read(_socket);
}
}
void stop()
/// Stops the handler.
{
_reader.stopHandler();
}
bool done() const
/// Returns tru if handler is done.
{
return _reader.handlerDone();
}
private:
Poco::Net::DatagramSocket _socket;
UDPSocketReader<S> _reader;
Poco::Timespan _timeout;
};
} } // namespace Poco::Net
#endif // Net_SingleSocketPoller_INCLUDED

View File

@ -35,6 +35,8 @@ class Net_API Socket
/// It provides operations common to all socket types.
{
public:
typedef SocketBufVec BufVec;
enum SelectMode
/// The mode argument to poll() and select().
{
@ -294,6 +296,44 @@ public:
/// of the Socket object makes sense. One example is setting
/// a socket option before calling bind() on a ServerSocket.
static SocketBuf makeBuffer(void* buffer, std::size_t length);
/// Creates and returns buffer. Suitable for creating
/// the appropriate buffer for the platform.
static SocketBufVec makeBufVec(std::size_t size, std::size_t bufLen);
/// Creates and returns a vector of requested size, with
/// allocated buffers and lengths set accordingly.
/// This utility function works well when all buffers are
/// of same size.
static void destroyBufVec(SocketBufVec& buf);
/// Releases the memory pointed to by vector members
/// and shrinks the vector to size 0.
/// The vector must be created by makeBufVec(size_t, size_t).
static SocketBufVec makeBufVec(const std::vector<char*>& vec);
/// Creates and returns a vector of requested size, with
/// buffers pointing to the supplied data (so, `vec` must
/// remain available at the time of use) and lengths set
/// accordingly.
/// Notes:
/// - data length is determined using `strlen`, so this
/// function is not meant to be used with binary data.
///
/// - if the returned buffer is used for read operations
/// (ie. operations that write to the bufer), pointing
/// to string literals will result in undefined behavior,
/// in best case an I/O error and subsequent exception
static SocketBufVec makeBufVec(const std::vector<std::string>& vec);
/// Creates and returns a vector of requested size, with
/// buffers pointing to the supplied data (so, `vec` must
/// remain available at the time of use) and lengths set
/// accordingly.
/// Note:: this function is not suitable for creation
/// of buffers used for writing (ie. reading from socket
/// into buffers).
protected:
Socket(SocketImpl* pImpl);
/// Creates the Socket and attaches the given SocketImpl.

View File

@ -68,6 +68,8 @@ class SocketAcceptor
/// if special steps are necessary to create a ServiceHandler object.
{
public:
typedef Poco::Observer<SocketAcceptor, ReadableNotification> Observer;
explicit SocketAcceptor(ServerSocket& socket):
_socket(socket),
_pReactor(0)
@ -81,8 +83,7 @@ public:
/// Creates a SocketAcceptor, using the given ServerSocket.
/// The SocketAcceptor registers itself with the given SocketReactor.
{
_pReactor->addEventHandler(_socket, Poco::Observer<SocketAcceptor,
ReadableNotification>(*this, &SocketAcceptor::onAccept));
_pReactor->addEventHandler(_socket, Observer(*this, &SocketAcceptor::onAccept));
}
virtual ~SocketAcceptor()
@ -92,8 +93,7 @@ public:
{
if (_pReactor)
{
_pReactor->removeEventHandler(_socket, Poco::Observer<SocketAcceptor,
ReadableNotification>(*this, &SocketAcceptor::onAccept));
_pReactor->removeEventHandler(_socket, Observer(*this, &SocketAcceptor::onAccept));
}
}
catch (...)
@ -120,10 +120,9 @@ public:
/// the reactor.
{
_pReactor = &reactor;
if (!_pReactor->hasEventHandler(_socket, Poco::Observer<SocketAcceptor,
ReadableNotification>(*this, &SocketAcceptor::onAccept)))
if (!_pReactor->hasEventHandler(_socket, Observer(*this, &SocketAcceptor::onAccept)))
{
_pReactor->addEventHandler(_socket, Poco::Observer<SocketAcceptor, ReadableNotification>(*this, &SocketAcceptor::onAccept));
_pReactor->addEventHandler(_socket, Observer(*this, &SocketAcceptor::onAccept));
}
}
@ -139,7 +138,7 @@ public:
{
if (_pReactor)
{
_pReactor->removeEventHandler(_socket, Poco::Observer<SocketAcceptor, ReadableNotification>(*this, &SocketAcceptor::onAccept));
_pReactor->removeEventHandler(_socket, Observer(*this, &SocketAcceptor::onAccept));
}
}

View File

@ -18,6 +18,9 @@
#define Net_SocketDefs_INCLUDED
#include <vector>
#define POCO_ENOERR 0
@ -25,6 +28,7 @@
#include "Poco/UnWindows.h"
#include <winsock2.h>
#include <ws2tcpip.h>
#include <ws2def.h>
#define POCO_INVALID_SOCKET INVALID_SOCKET
#define poco_socket_t SOCKET
#define poco_socklen_t int
@ -133,6 +137,7 @@
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/un.h>
#include <sys/uio.h>
#include <fcntl.h>
#if POCO_OS != POCO_OS_HPUX
#include <sys/select.h>
@ -351,6 +356,14 @@ namespace Poco {
namespace Net {
#if defined(POCO_OS_FAMILY_WINDOWS)
typedef WSABUF SocketBuf;
#elif defined(POCO_OS_FAMILY_UNIX) // TODO: may need more refinement
typedef iovec SocketBuf;
#endif
typedef std::vector<SocketBuf> SocketBufVec;
struct AddressFamily
/// AddressFamily::Family replaces the previously used IPAddress::Family
/// enumeration and is now used for IPAddress::Family and SocketAddress::Family.

View File

@ -23,6 +23,7 @@
#include "Poco/Net/SocketAddress.h"
#include "Poco/RefCountedObject.h"
#include "Poco/Timespan.h"
#include "Poco/Buffer.h"
namespace Poco {
@ -167,6 +168,13 @@ public:
/// Certain socket implementations may also return a negative
/// value denoting a certain condition.
virtual int sendBytes(const SocketBufVec& buffers, int flags = 0);
/// Receives data from the socket and stores it in buffers.
///
/// Returns the number of bytes received.
///
/// Always returns zero for platforms where not implemented.
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.
@ -176,6 +184,22 @@ public:
/// Certain socket implementations may also return a negative
/// value denoting a certain condition.
virtual int receiveBytes(SocketBufVec& buffers, int flags = 0);
/// Receives data from the socket and stores it in buffers.
///
/// Returns the number of bytes received.
///
/// Always returns zero for platforms where not implemented.
virtual int receiveBytes(Poco::Buffer<char>& buffer, int flags = 0, const Poco::Timespan& timeout = 100000);
/// Receives data from the socket and stores it in the buffer.
/// If needed, the buffer will be resized to accomodate the
/// data. Note that this function may impose additional
/// performance penalties due to the check for the available
/// amount of data.
///
/// Returns the number of bytes received.
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.
@ -183,6 +207,23 @@ public:
/// Returns the number of bytes sent, which may be
/// less than the number of bytes specified.
virtual int sendTo(const SocketBufVec& buffers, const SocketAddress& address, int flags = 0);
/// Sends the contents of the buffers through
/// the socket to the given address.
///
/// Returns the number of bytes sent, which may be
/// less than the number of bytes specified.
///
/// Always returns zero for platforms where not implemented.
int receiveFrom(void* buffer, int length, struct sockaddr** ppSA, poco_socklen_t** ppSALen, int flags = 0);
/// Receives data from the socket and stores it
/// in buffer. Up to length bytes are received.
/// Stores the native address of the sender in
/// ppSA, and the length of native address in ppSALen.
///
/// Returns the number of bytes received.
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.
@ -190,6 +231,23 @@ public:
///
/// Returns the number of bytes received.
virtual int receiveFrom(SocketBufVec& buffers, SocketAddress& address, int flags = 0);
/// Receives data from the socket and stores it
/// in buffers.
/// Stores the address of the sender in address.
///
/// Returns the number of bytes received.
///
/// Always returns zero for platforms where not implemented.
int receiveFrom(SocketBufVec& buffers, struct sockaddr** ppSA, poco_socklen_t** ppSALen, int flags);
/// Receives data from the socket and stores it
/// in buffers.
/// Stores the native address of the sender in
/// ppSA, and the length of native address in ppSALen.
///
/// Returns the number of bytes received.
virtual void sendUrgent(unsigned char data);
/// Sends one byte of urgent data through
/// the socket.
@ -432,6 +490,8 @@ protected:
void reset(poco_socket_t fd = POCO_INVALID_SOCKET);
/// Allows subclasses to set the socket manually, iff no valid socket is set yet.
void checkBrokenTimeout();
static int lastError();
/// Returns the last error code.
@ -451,11 +511,11 @@ private:
SocketImpl(const SocketImpl&);
SocketImpl& operator = (const SocketImpl&);
poco_socket_t _sockfd;
poco_socket_t _sockfd;
Poco::Timespan _recvTimeout;
Poco::Timespan _sndTimeout;
bool _blocking;
bool _isBrokenTimeout;
bool _blocking;
bool _isBrokenTimeout;
friend class Socket;
friend class SecureSocketImpl;

View File

@ -70,10 +70,13 @@ protected:
private:
typedef std::multiset<SocketNotification*> EventSet;
typedef Poco::FastMutex MutexType;
typedef MutexType::ScopedLock ScopedLock;
EventSet _events;
Poco::NotificationCenter _nc;
Socket _socket;
MutexType _mutex;
};
@ -82,6 +85,7 @@ private:
//
inline bool SocketNotifier::accepts(SocketNotification* pNotification)
{
ScopedLock l(_mutex);
return _events.find(pNotification) != _events.end();
}

View File

@ -26,6 +26,9 @@
#include "Poco/Observer.h"
#include "Poco/AutoPtr.h"
#include <map>
#ifdef POCO_ENABLE_CPP11
#include <atomic>
#endif
namespace Poco {
@ -209,30 +212,35 @@ private:
typedef Poco::AutoPtr<SocketNotifier> NotifierPtr;
typedef Poco::AutoPtr<SocketNotification> NotificationPtr;
typedef std::map<Socket, NotifierPtr> EventHandlerMap;
typedef Poco::FastMutex MutexType;
typedef MutexType::ScopedLock ScopedLock;
typedef Poco::FastMutex MutexType;
typedef MutexType::ScopedLock ScopedLock;
bool hasSocketHandlers();
void dispatch(NotifierPtr& pNotifier, SocketNotification* pNotification);
NotifierPtr getNotifier(const Socket& socket, bool makeNew = false);
enum
{
DEFAULT_TIMEOUT = 250000
};
bool _stop;
Poco::Timespan _timeout;
EventHandlerMap _handlers;
PollSet _pollSet;
NotificationPtr _pReadableNotification;
NotificationPtr _pWritableNotification;
NotificationPtr _pErrorNotification;
NotificationPtr _pTimeoutNotification;
NotificationPtr _pIdleNotification;
NotificationPtr _pShutdownNotification;
MutexType _mutex;
Poco::Thread* _pThread;
#ifdef POCO_ENABLE_CPP11
std::atomic<bool> _stop;
#else
bool _stop;
#endif
Poco::Timespan _timeout;
EventHandlerMap _handlers;
PollSet _pollSet;
NotificationPtr _pReadableNotification;
NotificationPtr _pWritableNotification;
NotificationPtr _pErrorNotification;
NotificationPtr _pTimeoutNotification;
NotificationPtr _pIdleNotification;
NotificationPtr _pShutdownNotification;
MutexType _mutex;
Poco::Thread* _pThread;
friend class SocketNotifier;
};

View File

@ -107,6 +107,13 @@ public:
/// Certain socket implementations may also return a negative
/// value denoting a certain condition.
int sendBytes(const SocketBufVec& buffer, int flags = 0);
/// Sends the contents of the given buffers through
/// the socket.
///
/// Returns the number of bytes sent, which may be
/// less than the number of bytes specified.
int sendBytes(Poco::FIFOBuffer& buffer);
/// Sends the contents of the given buffer through
/// the socket. FIFOBuffer has writable/readable transition
@ -132,6 +139,16 @@ public:
/// been set and nothing is received within that interval.
/// Throws a NetException (or a subclass) in case of other errors.
int receiveBytes(SocketBufVec& buffer, int flags = 0);
/// Receives data from the socket and stores it in buffers.
///
/// Returns the number of bytes received.
int receiveBytes(Poco::Buffer<char>& buffer, int flags = 0, const Poco::Timespan& timeout = 100000);
/// Receives data from the socket and stores it in buffers.
///
/// Returns the number of bytes received.
int receiveBytes(Poco::FIFOBuffer& buffer);
/// Receives data from the socket and stores it
/// in buffer. Up to length bytes are received. FIFOBuffer has

View File

@ -0,0 +1,158 @@
//
// UDPClient.h
//
// Library: Net
// Package: UDP
// Module: UDPClient
//
// Definition of the UDPClient class.
//
// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH.
// and Contributors.
//
// SPDX-License-Identifier: BSL-1.0
//
#ifndef Net_UDPClient_INCLUDED
#define Net_UDPClient_INCLUDED
#include "Poco/Net/Net.h"
#include "Poco/Net/SocketAddress.h"
#include "Poco/Net/DatagramSocket.h"
#include "Poco/Timespan.h"
#include "Poco/Runnable.h"
#include "Poco/Thread.h"
namespace Poco {
namespace Net {
class Net_API UDPClient : public Poco::Runnable
/// UDP client can either send, or send/receive UDP packets.
/// The mode of operation is specified at construction time.
/// If receiving functionality is enabled, it will run in a
/// separate thread.
/// This class is written as a "companion" to Poco::Net::UDPServer.
/// For other servers, inherit from this class and override the
/// handleResponse(char*, int) virtual member.
{
public:
UDPClient(const std::string& address, Poco::UInt16 port, bool listen = false);
/// Creates UDP client and connects it to specified address/port.
/// If listen is true, a thread is launched where client can receive
/// responses rom the server.
virtual ~UDPClient();
/// Destroys UDPClient.
void run();
/// Runs listener (typically invoked internally, in separate thread).
SocketAddress address() const;
/// Returns client address.
SocketAddress peerAddress() const;
/// Returns server address.
int send(void* data, int length);
/// Sends data.
int send(const SocketBufVec& vec);
/// Sends data.
virtual int handleResponse(char* buffer, int length);
/// Handles responses from UDP server. For non-POCO UDP servers,
/// this function should be overriden in inheriting class.
void setOption(int opt, int val);
/// Sets socket option.
int getOption(int opt);
/// Returns socket option.
void stop();
/// Stops the server reply receiving thread, if running.
int dataBacklog() const;
/// Returns current server data backlog.
int errorBacklog();
/// Returns current server error backlog.
private:
DatagramSocket _socket;
SocketAddress _address;
Thread* _pThread;
bool _stop;
Poco::AtomicCounter _dataBacklog;
Poco::AtomicCounter _errorBacklog;
};
//
// inlines
//
inline SocketAddress UDPClient::address() const
{
return _socket.address();
}
inline SocketAddress UDPClient::peerAddress() const
{
return _address;
}
inline int UDPClient::send(void* data, int length)
{
return _socket.sendBytes(data, length);
}
inline int UDPClient::send(const SocketBufVec& vec)
{
return _socket.sendBytes(vec);
}
inline void UDPClient::setOption(int opt, int val)
{
_socket.setOption(SOL_SOCKET, opt, val);
}
inline int UDPClient::getOption(int opt)
{
int val = 0;
_socket.getOption(SOL_SOCKET, opt, val);
return val;
}
inline void UDPClient::stop()
{
_stop = true;
}
inline int UDPClient::dataBacklog() const
{
return _dataBacklog;
}
inline int UDPClient::errorBacklog()
{
return _errorBacklog;
}
} } // namespace Poco::Net
#endif // Net_UDPClient_INCLUDED

View File

@ -0,0 +1,381 @@
//
// UDPHandler.h
//
// Library: Net
// Package: UDP
// Module: UDPHandler
//
// Definition of the UDPHandler class.
//
// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH.
// and Contributors.
//
// SPDX-License-Identifier: BSL-1.0
//
#ifndef Net_UDPHandler_INCLUDED
#define Net_UDPHandler_INCLUDED
#include "Poco/Net/Net.h"
#include "Poco/RefCountedObject.h"
#include "Poco/AutoPtr.h"
#include "Poco/Runnable.h"
#include "Poco/Thread.h"
#include "Poco/MemoryPool.h"
#include "Poco/Event.h"
#include "Poco/Error.h"
#include "Poco/Mutex.h"
#include "Poco/StringTokenizer.h"
#include <deque>
#include <cstring>
namespace Poco {
namespace Net {
typedef int UDPMsgSizeT;
#define POCO_UDP_BUF_SIZE 1472 + sizeof(UDPMsgSizeT) + SocketAddress::MAX_ADDRESS_LENGTH
template <std::size_t S = POCO_UDP_BUF_SIZE>
class UDPHandlerImpl: public Runnable, public RefCountedObject
/// UDP handler handles the data that arives to the UDP server.
/// The class is thread-safe and runs in its own thread, so many handlers
/// can be used in parallel.Handler manages and provides the storage
/// (fixed-size memory blocks of S size) to the reader, which signals back
/// to the handler when there is data or error ready for processing.
/// Typically, user will inherit from this class and override processData()
/// and processError() members to do the actual work.
{
public:
typedef UDPMsgSizeT MsgSizeT;
typedef AutoPtr<UDPHandlerImpl> Ptr;
typedef std::vector<Ptr> List;
typedef typename List::iterator Iterator;
#ifdef POCO_HAVE_STD_ATOMICS
typedef Poco::SpinlockMutex DFMutex;
#else
typedef Poco::FastMutex DFMutex;
#endif
static const MsgSizeT BUF_STATUS_IDLE = 0;
static const MsgSizeT BUF_STATUS_BUSY = -1;
static const MsgSizeT BUF_STATUS_ERROR = -2;
UDPHandlerImpl(std::size_t bufListSize = 1000, std::ostream* pErr = 0):
_thread("UDPHandlerImpl"),
_stop(false),
_done(false),
_bufListSize(bufListSize),
_blockSize(S),
_dataBacklog(0),
_errorBacklog(0),
_pErr(pErr)
/// Creates the UDPHandlerImpl.
{
_thread.start(*this);
}
~UDPHandlerImpl()
/// Destroys the UDPHandlerImpl.
{
stop();
_thread.join();
}
std::size_t blockSize() const
/// Returns the memory block size.
{
return _blockSize;
}
char* next(poco_socket_t sock)
/// Creates the next BufList entry, and returns
/// the pointers to the newly created guard/buffer.
/// If mutex lock times out, returns null pointer.
{
char* ret = 0;
if (_mutex.tryLock(10))
{
if (_buffers[sock].size() < _bufListSize) // building buffer list
{
makeNext(sock, &ret);
}
else if (*reinterpret_cast<MsgSizeT*>(*_bufIt[sock]) != 0) // busy
{
makeNext(sock, &ret);
}
else if (*reinterpret_cast<MsgSizeT*>(*_bufIt[sock]) == 0) // available
{
setBusy(*_bufIt[sock]);
ret = *_bufIt[sock];
if (++_bufIt[sock] == _buffers[sock].end())
{
_bufIt[sock] = _buffers[sock].begin();
}
}
else // last resort, full scan
{
BufList::iterator it = _buffers[sock].begin();
BufList::iterator end = _buffers[sock].end();
for (; it != end; ++it)
{
if (*reinterpret_cast<MsgSizeT*>(*_bufIt[sock]) == 0) // available
{
setBusy(*it);
ret = *it;
_bufIt[sock] = it;
if (++_bufIt[sock] == _buffers[sock].end())
{
_bufIt[sock] = _buffers[sock].begin();
}
break;
}
}
if (it == end) makeNext(sock, &ret);
}
_mutex.unlock();
}
return ret;
}
void notify()
/// Sets the ready event.
{
_ready.set();
}
void run()
/// Does the work.
{
while (!_stop)
{
_ready.wait();
if (_stop) break;
if (_mutex.tryLock(10))
{
BufMap::iterator it = _buffers.begin();
BufMap::iterator end = _buffers.end();
for (; it != end; ++it)
{
BufList::iterator lIt = it->second.begin();
BufList::iterator lEnd = it->second.end();
for (; lIt != lEnd; ++lIt)
{
if (hasData(*lIt))
{
processData(*lIt);
--_dataBacklog;
setIdle(*lIt);
}
else if (isError(*lIt))
{
processError(*lIt);
++_errorBacklog;
}
}
}
_mutex.unlock();
}
}
_done = true;
}
void stop()
/// Signals the handler to stop.
{
_stop = true;
_ready.set();
}
bool stopped() const
/// Returns true if the handler was signalled to stop.
{
return _stop == true;
}
bool done() const
/// Returns true if handler is done (ie. run() thread
/// entrypoint end was reached).
{
return _done;
}
void setBusy(char*& pBuf)
/// Flags the buffer as busy (usually done before buffer
/// is passed to the reader.
{
setStatus(pBuf, BUF_STATUS_BUSY);
}
void setIdle(char*& pBuf)
/// Flags the buffer as idle, ie. not used by reader or
/// waiting to be processed, so ready to be reused for
/// reading.
{
setStatus(pBuf, BUF_STATUS_IDLE);
}
AtomicCounter::ValueType setData(char*& pBuf, MsgSizeT sz)
/// Flags the buffer as containing data.
{
setStatus(pBuf, sz);
return ++_dataBacklog;
}
AtomicCounter::ValueType setError(char*& pBuf, const std::string& err)
/// Sets the error into the buffer.
{
std::size_t availLen = S - sizeof(MsgSizeT);
std::memset(pBuf + sizeof(MsgSizeT), 0, availLen);
std::size_t msgLen = err.length();
if (msgLen)
{
if (msgLen >= availLen) msgLen = availLen;
std::memcpy(pBuf + sizeof(MsgSizeT), err.data(), msgLen);
}
setStatus(pBuf, BUF_STATUS_ERROR);
return --_errorBacklog;
}
bool hasData(char*& pBuf)
/// Returns true if buffer contains data.
{
DFMutex::ScopedLock l(_dfMutex);
return *reinterpret_cast<MsgSizeT*>(pBuf) > 0;
}
bool isError(char*& pBuf)
/// Returns true if buffer contains error.
{
DFMutex::ScopedLock l(_dfMutex);
return *reinterpret_cast<MsgSizeT*>(pBuf) == BUF_STATUS_ERROR;
}
static Poco::UInt16 offset()
/// Returns buffer data offset.
{
return sizeof(MsgSizeT) + sizeof(poco_socklen_t) + SocketAddress::MAX_ADDRESS_LENGTH;
}
static MsgSizeT payloadSize(char* buf)
{
return *((MsgSizeT*) buf);
}
static SocketAddress address(char* buf)
{
poco_socklen_t* len = reinterpret_cast<poco_socklen_t*>(buf + sizeof(MsgSizeT));
struct sockaddr* pSA = reinterpret_cast<struct sockaddr*>(buf + sizeof(MsgSizeT) + sizeof(poco_socklen_t));
return SocketAddress(pSA, *len);
}
static char* payload(char* buf)
/// Returns pointer to payload.
///
/// Total message size is S.
///
/// Data message layout is as follows:
///
/// +------------------------+------------------------+-----------------------------------+--------- ~ ---+
/// | sizeof(MsgSizeT) bytes | sizeof(poco_socklen_t) | SocketAddress::MAX_ADDRESS_LENGTH | payload |
/// +------------------------+------------------------+-----------------------------------+--------- ~ ---+
{
return buf + offset();
}
static Poco::StringTokenizer payload(char* buf, char delimiter)
/// Returns tokenized payload.
/// Used when multiple logical messages are contained in a
/// single physical message. Messages must be ASCII, as well as
/// unambiguously delimited in order for this function to succeed.
{
return Poco::StringTokenizer(payload(buf), std::string(1, delimiter), StringTokenizer::TOK_IGNORE_EMPTY);
}
static char* error(char* buf)
/// Returns pointer to the erro message payload.
///
/// Total message size is S.
///
/// Error message layout is as follows:
///
/// +------------------------+--------- ~ ---+
/// | sizeof(MsgSizeT) bytes | payload |
/// +------------------------+--------- ~ ---+
{
return buf + sizeof(MsgSizeT);
}
virtual void processData(char*)
/// Caled when data is received by reader.
///
/// No-op here, must be overriden by inheriting
/// class in order to do useful work.
{
};
virtual void processError(char* buf)
/// Caled when error is detected by reader.
///
/// Only functional if stream pointer is provided
/// to the handler, otherwise it must be overriden
/// by inheriting class in order to do useful work.
{
if (_pErr) *_pErr << error(buf) << std::endl;
setIdle(buf);
}
private:
typedef std::deque<char*> BufList;
typedef std::map<poco_socket_t, BufList> BufMap;
typedef typename BufList::iterator BLIt;
typedef std::map<poco_socket_t, BLIt> BufIt;
typedef Poco::FastMemoryPool<char[S]> MemPool;
void setStatusImpl(char*& pBuf, MsgSizeT status)
{
*reinterpret_cast<MsgSizeT*>(pBuf) = status;
}
void setStatus(char*& pBuf, MsgSizeT status)
{
DFMutex::ScopedLock l(_dfMutex);
setStatusImpl(pBuf, status);
}
void makeNext(poco_socket_t sock, char** ret)
{
_buffers[sock].push_back(reinterpret_cast<char*>(_memPool.get()));
setStatusImpl(_buffers[sock].back(), BUF_STATUS_BUSY);
_bufIt[sock] = _buffers[sock].begin();
*ret = _buffers[sock].back();
}
Poco::Event _ready;
Poco::Thread _thread;
bool _stop;
bool _done;
BufMap _buffers;
BufIt _bufIt;
std::size_t _bufListSize;
const std::size_t _blockSize;
MemPool _memPool;
AtomicCounter _dataBacklog;
AtomicCounter _errorBacklog;
Poco::FastMutex _mutex;
DFMutex _dfMutex;
std::ostream* _pErr;
};
typedef UDPHandlerImpl<POCO_UDP_BUF_SIZE> UDPHandler;
} } // namespace Poco::Net
#endif // Net_UDPHandler_INCLUDED

View File

@ -0,0 +1,106 @@
//
// UDPServer.h
//
// Library: Net
// Package: UDP
// Module: UDPServer
//
// Definition of the UDPServer class.
//
// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH.
// and Contributors.
//
// SPDX-License-Identifier: BSL-1.0
//
#ifndef Net_UDPServer_INCLUDED
#define Net_UDPServer_INCLUDED
#include "Poco/Net/Net.h"
#include "Poco/Net/DatagramSocket.h"
#include "Poco/Net/PollSet.h"
#include "Poco/Net/UDPHandler.h"
#include "Poco/Net/UDPServerParams.h"
#include "Poco/Net/UDPSocketReader.h"
#include "Poco/Net/SingleSocketPoller.h"
#include "Poco/Net/MultiSocketPoller.h"
#include <map>
namespace Poco {
namespace Net {
template <std::size_t S = POCO_UDP_BUF_SIZE,
typename P = SingleSocketPoller<S> >
class UDPServerImpl: public Poco::Runnable
/// UDP server, runs in its own thread and owns a poller, to which
/// data arrival and discovery is delegated. See SingleSocketPoller and
/// MultipleSocketPoller for more information.
{
public:
UDPServerImpl(typename UDPHandlerImpl<S>::List& handlers, const Poco::Net::SocketAddress& sa):
_poller(handlers, sa),
_thread("UDPServer"),
_stop(false)
/// Creates the UDPServer and binds it to
/// the given address.
{
_thread.start(*this);
}
UDPServerImpl(typename UDPHandlerImpl<S>::List& handlers, const UDPServerParams& params):
_poller(handlers, params),
_thread("UDPServer"),
_stop(false)
/// Creates the UDPServer and binds it to
/// the given address.
{
_thread.start(*this);
}
~UDPServerImpl()
/// Destroys the UDPServer.
{
_stop = true;
_poller.stop();
while (!_poller.done()) Thread::sleep(10);
_thread.join();
}
Poco::UInt16 port() const
/// Returns the port the server is
/// listening on.
{
return _poller.port();
}
Poco::Net::SocketAddress address() const
/// Returns the address of the server.
{
return _poller.address();
}
void run()
/// Does the work.
{
while (!_stop) _poller.poll();
}
private:
P _poller;
Poco::Thread _thread;
bool _stop;
};
typedef UDPServerImpl<POCO_UDP_BUF_SIZE, SingleSocketPoller<POCO_UDP_BUF_SIZE> > UDPServer;
typedef UDPServerImpl<POCO_UDP_BUF_SIZE, MultiSocketPoller<POCO_UDP_BUF_SIZE> > UDPMultiServer;
} } // namespace Poco::Net
#endif // Net_UDPServer_INCLUDED

View File

@ -0,0 +1,122 @@
//
// UDPServerParams.h
//
// Library: Net
// Package: UDP
// Module: UDPServerParams
//
// Definition of the UDPServerParams class.
//
// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH.
// and Contributors.
//
// SPDX-License-Identifier: BSL-1.0
//
#ifndef Net_UDPServerParams_INCLUDED
#define Net_UDPServerParams_INCLUDED
#include "Poco/Net/Net.h"
#include "Poco/Net/SocketAddress.h"
#include "Poco/Timespan.h"
namespace Poco {
namespace Net {
class Net_API UDPServerParams
/// A class encapsulating UDP server parameters.
{
public:
UDPServerParams(const Poco::Net::SocketAddress& sa,
int nSockets = 10,
Poco::Timespan timeout = 250000,
std::size_t handlerBufListSize = 1000,
bool notifySender = false,
int backlogThreshold = 10);
/// Creates UDPServerParams.
~UDPServerParams();
/// Destroys UDPServerParams.
const Poco::Net::SocketAddress& address() const;
/// Returns the server address.
Poco::Timespan timeout() const;
/// Returns polling timeout.
int numberOfSockets() const;
/// Returns nuber of sockets for the server.
std::size_t handlerBufListSize() const;
/// Returns the number of handler buffers allocated
/// before buffers start being reused.
bool notifySender() const;
/// Returns the flag inidcating whether server
/// should send notifications back to the client.
int backlogThreshold() const;
/// Size of mesage or error backlogs at which server
/// reports backlogs back to the client. Only meaningful
/// if notifySender() is true.
private:
UDPServerParams();
Poco::Net::SocketAddress _sa;
int _nSockets;
Poco::Timespan _timeout;
std::size_t _handlerBufListSize;
bool _notifySender;
int _backlogThreshold;
};
//
// inlines
//
inline const Poco::Net::SocketAddress& UDPServerParams::address() const
{
return _sa;
}
inline int UDPServerParams::numberOfSockets() const
{
return _nSockets;
}
inline Poco::Timespan UDPServerParams::timeout() const
{
return _timeout;
}
inline std::size_t UDPServerParams::handlerBufListSize() const
{
return _handlerBufListSize;
}
inline bool UDPServerParams::notifySender() const
{
return _notifySender;
}
inline int UDPServerParams::backlogThreshold() const
{
return _backlogThreshold;
}
} } // namespace Poco::Net
#endif // Net_UDPServerParams_INCLUDED

View File

@ -0,0 +1,222 @@
//
// UDPSocketReader.h
//
// Library: Net
// Package: UDP
// Module: UDPSocketReader
//
// Definition of the UDPSocketReader class.
//
// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH.
// and Contributors.
//
// SPDX-License-Identifier: BSL-1.0
//
#ifndef Net_UDPSocketReader_INCLUDED
#define Net_UDPSocketReader_INCLUDED
#include "Poco/Net/Net.h"
#include "Poco/Net/DatagramSocket.h"
namespace Poco {
namespace Net {
template <std::size_t S = POCO_UDP_BUF_SIZE>
class UDPSocketReader
/// UDPSocketReader is responsible for UDP socket I/O operations.
/// When data or error is detected on a socket, the reader is invoked
/// to do the I/O. After the data is read, it is passed on, to one
/// of the handlers for processing. Errors are also passed to a
/// handler for handling (if any configured).
/// Depending on settings, data senders may be notified of the handler's
/// data and error backlogs.
{
private:
class Counter
{
public:
Counter(): val(0)
{
}
operator AtomicCounter::ValueType ()
{
return static_cast<AtomicCounter::ValueType>(val);
}
Counter& operator=(AtomicCounter::ValueType value)
{
val = static_cast<Poco::Int32>(value);
return *this;
}
Poco::Int32 operator++()
{
return ++val;
}
Counter& operator++(int)
{
return val++;
}
private:
Poco::Int32 val;
};
public:
UDPSocketReader(typename UDPHandlerImpl<S>::List& handlers, int backlogThreshold = 0):
_handlers(handlers),
_handler(_handlers.begin()),
_backlogThreshold(backlogThreshold)
/// Creates the UDPSocketReader.
{
poco_assert(_handler != _handlers.end());
}
UDPSocketReader(typename UDPHandlerImpl<S>::List& handlers, const UDPServerParams& serverParams):
_handlers(handlers),
_handler(_handlers.begin()),
_backlogThreshold(serverParams.backlogThreshold())
/// Creates the UDPSocketReader.
{
poco_assert(_handler != _handlers.end());
}
~UDPSocketReader()
/// Destroys the UDPSocketReader.
{
}
void read(DatagramSocket& sock)
/// Reads data from the socket and passes it to the next handler.
/// Errors are also passed to the handler. If object is configured
/// for replying to sender and data or error backlog threshold is
/// exceeded, sender is notified of the current backlog size.
{
typedef typename UDPHandlerImpl<S>::MsgSizeT RT;
char* p = 0;
struct sockaddr* pSA = 0;
poco_socklen_t* pAL = 0;
poco_socket_t sockfd = sock.impl()->sockfd();
nextHandler();
try
{
p = handler().next(sockfd);
if (p)
{
Poco::UInt16 off = handler().offset();
poco_socklen_t* pAL = reinterpret_cast<poco_socklen_t*>(p + sizeof(RT));
*pAL = SocketAddress::MAX_ADDRESS_LENGTH;
struct sockaddr* pSA = reinterpret_cast<struct sockaddr*>(p + sizeof(RT) + sizeof(poco_socklen_t));
RT ret = sock.receiveFrom(p + off, S - off - 1, &pSA, &pAL);
if (ret < 0)
{
AtomicCounter::ValueType errors = setError(sock.impl()->sockfd(), p, Error::getMessage(Error::last()));
if (_backlogThreshold > 0 && errors > _backlogThreshold && errors != _errorBacklog[sockfd])
{
Poco::Int32 err = static_cast<Poco::Int32>(errors);
sock.sendTo(&err, sizeof(Poco::Int32), SocketAddress(pSA, *pAL));
_errorBacklog[sockfd] = errors;
}
return;
}
AtomicCounter::ValueType data = handler().setData(p, ret);
p[off + ret] = 0; // for ascii convenience, zero-terminate
if (_backlogThreshold > 0 && data > _backlogThreshold && data != _dataBacklog[sockfd])
{
Poco::Int32 d = static_cast<Poco::Int32>(data);
sock.sendTo(&d, sizeof(Poco::Int32), SocketAddress(pSA, *pAL));
_dataBacklog[sockfd] = data;
}
}
else return;
}
catch (Poco::Exception& exc)
{
AtomicCounter::ValueType errors = setError(sock.impl()->sockfd(), p, exc.displayText());
if (_backlogThreshold > 0 && errors > _backlogThreshold && errors != _errorBacklog[sockfd] && pSA && pAL)
{
Poco::Int32 err = static_cast<Poco::Int32>(errors);
sock.sendTo(&err, sizeof(Poco::Int32), SocketAddress(pSA, *pAL));
_errorBacklog[sockfd] = errors;
}
}
handler().notify();
}
bool handlerStopped() const
/// Returns true if all handlers are stopped.
{
bool stopped = true;
typename UDPHandlerImpl<S>::List::iterator it = _handlers.begin();
typename UDPHandlerImpl<S>::List::iterator end = _handlers.end();
for (; it != end; ++it) stopped = stopped && (*it)->stopped();
return stopped;
}
void stopHandler()
/// Stops all handlers.
{
typename UDPHandlerImpl<S>::List::iterator it = _handlers.begin();
typename UDPHandlerImpl<S>::List::iterator end = _handlers.end();
for (; it != end; ++it) (*it)->stop();
}
bool handlerDone() const
/// Returns true if all handlers are done processing data.
{
bool done = true;
typename UDPHandlerImpl<S>::List::iterator it = _handlers.begin();
typename UDPHandlerImpl<S>::List::iterator end = _handlers.end();
for (; it != end; ++it) done = done && (*it)->done();
return done;
}
AtomicCounter::ValueType setError(poco_socket_t sock, char* buf = 0, const std::string& err = "")
/// Sets error to the provided buffer buf. If the buffer is null, a new buffer is obtained
/// from handler.
/// If successful, returns the handler's eror backlog size, otherwise returns zero.
{
if (!buf) buf = handler().next(sock);
if (buf) return handler().setError(buf, err.empty() ? Error::getMessage(Error::last()) : err);
return 0;
}
private:
void nextHandler()
/// Re-points the handler iterator to the next handler in
/// round-robin fashion.
{
poco_assert_dbg (_handler != _handlers.end());
if (++_handler == _handlers.end()) _handler = _handlers.begin();
}
UDPHandlerImpl<S>& handler()
/// Returns the reference to the current handler.
{
poco_assert_dbg (_handler != _handlers.end());
return **_handler;
}
typedef typename UDPHandlerImpl<S>::List HandlerList;
typedef typename UDPHandlerImpl<S>::List::iterator HandlerIterator;
typedef std::map<poco_socket_t, Counter> CounterMap;
HandlerList& _handlers;
HandlerIterator _handler;
CounterMap _dataBacklog;
CounterMap _errorBacklog;
int _backlogThreshold;
};
} } // namespace Poco::Net
#endif // Net_UDPSocketReader_INCLUDED

View File

@ -21,7 +21,6 @@
#include "Poco/Net/StreamSocketImpl.h"
#include "Poco/Buffer.h"
#include "Poco/Random.h"
#include "Poco/Buffer.h"
namespace Poco {
@ -46,7 +45,7 @@ public:
virtual int receiveBytes(void* buffer, int length, int flags);
/// Receives a WebSocket protocol frame.
virtual int receiveBytes(Poco::Buffer<char>& buffer, int flags);
virtual int receiveBytes(Poco::Buffer<char>& buffer, int flags = 0, const Poco::Timespan& span = 0);
/// Receives a WebSocket protocol frame.
virtual SocketImpl* acceptConnection(SocketAddress& clientAddr);

View File

@ -316,7 +316,7 @@ std::string DNS::decodeIDNLabel(const std::string& encodedIDN)
Poco::UTF32Encoding utf32;
Poco::UTF8Encoding utf8;
Poco::TextConverter converter(utf32, utf8);
converter.convert(buffer, size*sizeof(punycode_uint), decoded);
converter.convert(buffer, static_cast<int>(size*sizeof(punycode_uint)), decoded);
}
else throw DNSException("Failed to decode IDN label: ", encodedIDN);
}

View File

@ -93,22 +93,64 @@ int DatagramSocket::sendBytes(const void* buffer, int length, int flags)
}
int DatagramSocket::sendBytes(const SocketBufVec& buffers, int flags)
{
return impl()->sendBytes(buffers, flags);
}
int DatagramSocket::receiveBytes(void* buffer, int length, int flags)
{
return impl()->receiveBytes(buffer, length, flags);
}
int DatagramSocket::receiveBytes(SocketBufVec& buffers, int flags)
{
return impl()->receiveBytes(buffers, flags);
}
int DatagramSocket::receiveBytes(Poco::Buffer<char>& buffer, int flags, const Poco::Timespan& timeout)
{
return impl()->receiveBytes(buffer, flags, timeout);
}
int DatagramSocket::sendTo(const void* buffer, int length, const SocketAddress& address, int flags)
{
return impl()->sendTo(buffer, length, address, flags);
}
int DatagramSocket::sendTo(const SocketBufVec& buffers, const SocketAddress& address, int flags)
{
return impl()->sendTo(buffers, address, flags);
}
int DatagramSocket::receiveFrom(void* buffer, int length, SocketAddress& address, int flags)
{
return impl()->receiveFrom(buffer, length, address, flags);
}
int DatagramSocket::receiveFrom(void* buffer, int length, struct sockaddr** ppSA, poco_socklen_t** saLen, int flags)
{
return impl()->receiveFrom(buffer, length, ppSA, saLen, flags);
}
int DatagramSocket::receiveFrom(SocketBufVec& buffers, SocketAddress& address, int flags)
{
return impl()->receiveFrom(buffers, address, flags);
}
int DatagramSocket::receiveFrom(SocketBufVec& buffers, struct sockaddr** ppSA, poco_socklen_t** ppSALen, int flags)
{
return impl()->receiveFrom(buffers, ppSA, ppSALen, flags);
}
} } // namespace Poco::Net

View File

@ -43,7 +43,7 @@ DatagramSocketImpl::DatagramSocketImpl(SocketAddress::Family family)
else throw InvalidArgumentException("Invalid or unsupported address family passed to DatagramSocketImpl");
}
DatagramSocketImpl::DatagramSocketImpl(poco_socket_t sockfd): SocketImpl(sockfd)
{
}

View File

@ -14,11 +14,10 @@
#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 "Poco/Format.h"
#include <sstream>
@ -62,21 +61,27 @@ int ICMPClient::ping(SocketAddress& address, int repeat) const
if (repeat <= 0) return 0;
ICMPSocket icmpSocket(_family, _dataSize, _ttl, _timeout);
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);
int sent = icmpSocket.sendTo(address);
if (icmpSocket.packetSize() == sent)
{
SocketAddress requestAddress(address);
++eventArgs;
int t = icmpSocket.receiveFrom(address);
poco_assert (address.host() == requestAddress.host());
eventArgs.setReplyTime(i, t);
pingReply.notify(this, eventArgs);
}
else
throw ICMPException(Poco::format("Error sending ICMP packet "
"(sent=%d, expected=%d)", sent, icmpSocket.packetSize()));
}
catch (TimeoutException&)
{
@ -89,16 +94,14 @@ int ICMPClient::ping(SocketAddress& address, int repeat) const
catch (ICMPException& ex)
{
std::ostringstream os;
os << address.host().toString() << ": " << ex.what();
os << address.host().toString() << ": " << ex.displayText();
eventArgs.setError(i, os.str());
pingError.notify(this, eventArgs);
continue;
}
catch (Exception& ex)
{
std::ostringstream os;
os << ex.displayText();
eventArgs.setError(i, os.str());
eventArgs.setError(i, ex.displayText());
pingError.notify(this, eventArgs);
continue;
}
@ -125,23 +128,21 @@ int ICMPClient::ping(SocketAddress& address,
if (repeat <= 0) return 0;
ICMPSocket icmpSocket(family, dataSize, ttl, timeout);
SocketAddress returnAddress;
int received = 0;
for (int i = 0; i < repeat; ++i)
{
icmpSocket.sendTo(address);
try
{
icmpSocket.receiveFrom(returnAddress);
++received;
}
catch (TimeoutException&)
{
}
catch (ICMPException&)
{
SocketAddress requestAddress(address);
if (icmpSocket.sendTo(address) == icmpSocket.packetSize())
{
icmpSocket.receiveFrom(address);
poco_assert (address.host() == requestAddress.host());
++received;
}
}
catch (Exception&) { }
}
return received;
}

View File

@ -95,9 +95,9 @@ bool ICMPPacket::validReplyID(Poco::UInt8* buffer, int length) const
}
std::string ICMPPacket::errorDescription(Poco::UInt8* buffer, int length)
std::string ICMPPacket::errorDescription(Poco::UInt8* buffer, int length, int& type, int& code)
{
return _pImpl->errorDescription(buffer, length);
return _pImpl->errorDescription(buffer, length, type, code);
}

View File

@ -33,8 +33,9 @@ namespace Poco {
namespace Net {
const UInt16 ICMPPacketImpl::MAX_PACKET_SIZE = 4096;
const UInt16 ICMPPacketImpl::MAX_SEQ_VALUE = 65535;
const UInt16 ICMPPacketImpl::MAX_PACKET_SIZE = 65535;
const UInt16 ICMPPacketImpl::MAX_PAYLOAD_SIZE = 65507;
const UInt16 ICMPPacketImpl::MAX_SEQ_VALUE = 65535;
ICMPPacketImpl::ICMPPacketImpl(int dataSize):

View File

@ -15,6 +15,7 @@
#include "Poco/Net/ICMPSocket.h"
#include "Poco/Net/ICMPSocketImpl.h"
#include "Poco/Exception.h"
#include "Poco/Net/NetException.h"
using Poco::InvalidArgumentException;
@ -79,6 +80,12 @@ int ICMPSocket::dataSize() const
}
int ICMPSocket::packetSize() const
{
return static_cast<ICMPSocketImpl*>(impl())->packetSize();
}
int ICMPSocket::ttl() const
{
return static_cast<ICMPSocketImpl*>(impl())->ttl();
@ -91,4 +98,50 @@ int ICMPSocket::timeout() const
}
Poco::UInt16 ICMPSocket::mtu(const SocketAddress& address, Poco::UInt16 sz)
{
if (address.family() != IPAddress::IPv4) return 0;
SocketAddress returnAddress(address);
for (; sz >= 68 /*RFC791*/; --sz)
{
ICMPSocket icmpSocket(address.family(), sz);
#ifdef IP_DONTFRAGMENT
icmpSocket.setOption(IPPROTO_IP, IP_DONTFRAGMENT, 1);
#elif defined(IP_MTU_DISCOVER)
icmpSocket.setOption(IPPROTO_IP, IP_MTU_DISCOVER, IP_PMTUDISC_DO);
#elif defined(IP_DONTFRAG)
icmpSocket.setOption(IPPROTO_IP, IP_DONTFRAG, 1);
#else
throw NotImplementedException("ICMPSocket::mtu()");
#endif
try
{
icmpSocket.sendTo(address);
icmpSocket.receiveFrom(returnAddress);
poco_assert_dbg (returnAddress == address);
return sz;
}
catch (ICMPFragmentationException&)
{
// PMTU fragmentation, continue discovery
continue;
}
catch (NetException& ex)
{
// local MTU limit, continue discovery
if (ex.code() == POCO_EMSGSIZE)
continue;
}
catch (Exception&)
{
return 0;
}
}
return 0;
}
} } // namespace Poco::Net

View File

@ -13,10 +13,9 @@
#include "Poco/Net/ICMPSocketImpl.h"
#include "Poco/Net/ICMPv4PacketImpl.h"
#include "Poco/Net/NetException.h"
#include "Poco/Timespan.h"
#include "Poco/Timestamp.h"
#include "Poco/Exception.h"
#include "Poco/Format.h"
#include "Poco/Buffer.h"
@ -36,6 +35,7 @@ ICMPSocketImpl::ICMPSocketImpl(IPAddress::Family family, int dataSize, int ttl,
_timeout(timeout)
{
setOption(IPPROTO_IP, IP_TTL, ttl);
setBlocking(true);
setReceiveTimeout(Timespan(timeout));
}
@ -52,37 +52,67 @@ int ICMPSocketImpl::sendTo(const void*, int, const SocketAddress& address, int f
}
void ICMPSocketImpl::checkFragmentation(const std::string& err, int type, int code)
{
if (type == ICMPv4PacketImpl::DESTINATION_UNREACHABLE &&
code == ICMPv4PacketImpl::FRAGMENTATION_NEEDED_AND_DF_SET)
{
throw ICMPFragmentationException(err);
}
}
int ICMPSocketImpl::receiveFrom(void*, int, SocketAddress& address, int flags)
{
int maxPacketSize = _icmpPacket.maxPacketSize();
Poco::Buffer<unsigned char> buffer(maxPacketSize);
int expected = _icmpPacket.packetSize();
int type = 0, code = 0;
try
{
Poco::Timestamp ts;
int rc;
do
{
if (ts.isElapsed(_timeout))
// guard against a DoS attack
if (ts.isElapsed(_timeout)) throw TimeoutException();
buffer.clear();
SocketAddress respAddr;
rc = SocketImpl::receiveFrom(buffer.begin(), maxPacketSize, respAddr, flags);
if (rc == 0) break;
if (respAddr == address)
{
// This guards against a possible DoS attack, where sending
// fake ping responses will cause an endless loop.
throw TimeoutException();
expected -= rc;
if (expected <= 0)
{
if (_icmpPacket.validReplyID(buffer.begin(), maxPacketSize)) break;
std::string err = _icmpPacket.errorDescription(buffer.begin(), maxPacketSize, type, code);
if (address.family() == IPAddress::IPv4) checkFragmentation(err, type, code);
if (!err.empty()) throw ICMPException(err);
throw ICMPException("Invalid ICMP reply");
}
}
SocketImpl::receiveFrom(buffer.begin(), maxPacketSize, address, flags);
else continue;
}
while (!_icmpPacket.validReplyID(buffer.begin(), maxPacketSize));
while (expected > 0 && !_icmpPacket.validReplyID(buffer.begin(), maxPacketSize));
}
catch (TimeoutException&)
catch (ICMPException&)
{
throw;
}
catch (Exception&)
{
std::string err = _icmpPacket.errorDescription(buffer.begin(), maxPacketSize);
if (!err.empty())
throw ICMPException(err);
else
throw;
std::string err = _icmpPacket.errorDescription(buffer.begin(), maxPacketSize, type, code);
if (address.family() == IPAddress::IPv4) checkFragmentation(err, type, code);
if (!err.empty()) throw ICMPException(err);
else throw;
}
if (expected > 0)
{
throw ICMPException(Poco::format("No response: expected %d, received: %d", _icmpPacket.packetSize(),
_icmpPacket.packetSize() - expected));
}
struct timeval then = _icmpPacket.time(buffer.begin(), maxPacketSize);

View File

@ -36,10 +36,10 @@ namespace Poco {
namespace Net {
const UInt8 ICMPv4PacketImpl::DESTINATION_UNREACHABLE_TYPE = 3;
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 UInt8 ICMPv4PacketImpl::TIME_EXCEEDED_TYPE = 11;
const Poco::UInt8 ICMPv4PacketImpl::PARAMETER_PROBLEM_TYPE = 12;
@ -193,7 +193,7 @@ bool ICMPv4PacketImpl::validReplyID(Poco::UInt8* buffer, int length) const
}
std::string ICMPv4PacketImpl::errorDescription(unsigned char* buffer, int length)
std::string ICMPv4PacketImpl::errorDescription(unsigned char* buffer, int length, int& type, int& code)
{
Header *icp = header(buffer, length);
@ -207,11 +207,12 @@ std::string ICMPv4PacketImpl::errorDescription(unsigned char* buffer, int length
pointer = icp->id & mask;
}
MessageType type = static_cast<MessageType>(icp->type);
int code = icp->code;
type = icp->type;
MessageType msgType = static_cast<MessageType>(type);
code = icp->code;
std::ostringstream err;
switch (type)
switch (msgType)
{
case DESTINATION_UNREACHABLE_TYPE:
if (code >= NET_UNREACHABLE && code < DESTINATION_UNREACHABLE_UNKNOWN)
@ -220,7 +221,7 @@ std::string ICMPv4PacketImpl::errorDescription(unsigned char* buffer, int length
err << DESTINATION_UNREACHABLE_CODE[DESTINATION_UNREACHABLE_UNKNOWN];
break;
case SOURCE_QUENCH_TYPE:
case SOURCE_QUENCH_TYPE:
err << "Source quench";
break;

View File

@ -46,7 +46,7 @@ int NTPClient::request(const std::string& address) const
int NTPClient::request(SocketAddress& address) const
{
Poco::Net::SocketAddress sa;
SocketAddress sa;
DatagramSocket ntpSocket(_family);
ntpSocket.setReceiveTimeout(_timeout);
ntpSocket.bind(sa);
@ -62,22 +62,30 @@ int NTPClient::request(SocketAddress& address) const
ntpSocket.sendTo(p, 48, address);
int received = 0;
try
Timestamp start;
while (true)
{
Poco::Net::SocketAddress sender;
int n = ntpSocket.receiveFrom(p, sizeof(p)-1, sender);
try
{
int n = ntpSocket.receiveFrom(p, sizeof(p) - 1, sa);
if (sa != address) // reply mixup, try until timeout ...
{
if ((Timestamp() - start) < _timeout) continue;
break;
}
if (n < 48) // NTP packet must have at least 48 bytes
throw Poco::Net::NTPException("Invalid response received");
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
packet.setPacket(p);
eventArgs.setPacket(packet);
++received;
response.notify(this, eventArgs);
break;
}
catch (Poco::TimeoutException &)
{
break;
}
}
return received;

View File

@ -44,6 +44,7 @@ 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(ICMPFragmentationException, NetException, "ICMP Fragmentation needed")
POCO_IMPLEMENT_EXCEPTION(NTPException, NetException, "NTP Exception")
POCO_IMPLEMENT_EXCEPTION(HTMLFormException, NetException, "HTML Form Exception")
POCO_IMPLEMENT_EXCEPTION(WebSocketException, NetException, "WebSocket Exception")

View File

@ -159,7 +159,10 @@ public:
{
PollSet::SocketModeMap result;
if (_socketMap.empty()) return result;
{
Poco::FastMutex::ScopedLock lock(_mutex);
if(_socketMap.empty()) return result;
}
Poco::Timespan remainingTime(timeout);
int rc;
@ -322,7 +325,7 @@ public:
{
Poco::Timestamp start;
#ifdef _WIN32
rc = WSAPoll(&_pollfds[0], _pollfds.size(), static_cast<INT>(timeout.totalMilliseconds()));
rc = WSAPoll(&_pollfds[0], static_cast<ULONG>(_pollfds.size()), static_cast<INT>(timeout.totalMilliseconds()));
#else
rc = ::poll(&_pollfds[0], _pollfds.size(), timeout.totalMilliseconds());
#endif

View File

@ -389,4 +389,79 @@ int Socket::select(SocketList& readList, SocketList& writeList, SocketList& exce
}
SocketBufVec Socket::makeBufVec(std::size_t size, std::size_t bufLen)
{
SocketBufVec buf(size);
SocketBufVec::iterator it = buf.begin();
SocketBufVec::iterator end = buf.end();
for (; it != end; ++it)
{
// TODO: use memory pool
*it = makeBuffer(malloc(bufLen), bufLen);
}
return buf;
}
void Socket::destroyBufVec(SocketBufVec& buf)
{
SocketBufVec::iterator it = buf.begin();
SocketBufVec::iterator end = buf.end();
for (; it != end; ++it)
{
#if defined(POCO_OS_FAMILY_WINDOWS)
free(it->buf);
#elif defined(POCO_OS_FAMILY_UNIX)
free(it->iov_base);
#endif
}
SocketBufVec().swap(buf);
}
SocketBuf Socket::makeBuffer(void* buffer, std::size_t length)
{
SocketBuf ret;
#if defined(POCO_OS_FAMILY_WINDOWS)
ret.buf = reinterpret_cast<char*>(buffer);
ret.len = static_cast<ULONG>(length);
#elif defined(POCO_OS_FAMILY_UNIX)
ret.iov_base = buffer;
ret.iov_len = length;
#else
throw NotImplementedException("Socket::makeBuffer(void*, size_t)");
#endif
return ret;
}
SocketBufVec Socket::makeBufVec(const std::vector<char*>& vec)
{
SocketBufVec buf(vec.size());
SocketBufVec::iterator it = buf.begin();
SocketBufVec::iterator end = buf.end();
std::vector<char*>::const_iterator vIt = vec.begin();
for (; it != end; ++it, ++vIt)
{
*it = makeBuffer(*vIt, strlen(*vIt));
}
return buf;
}
SocketBufVec Socket::makeBufVec(const std::vector<std::string>& vec)
{
SocketBufVec buf(vec.size());
SocketBufVec::iterator it = buf.begin();
SocketBufVec::iterator end = buf.end();
std::vector<std::string>::const_iterator vIt = vec.begin();
for (; it != end; ++it, ++vIt)
{
char* c = const_cast<char*>(vIt->data());
*it = makeBuffer(reinterpret_cast<void*>(c), vIt->size());
}
return buf;
}
} } // namespace Poco::Net

View File

@ -18,11 +18,26 @@
#include "Poco/NumberFormatter.h"
#include "Poco/Timestamp.h"
#include <string.h> // FD_SET needs memset on some platforms, so we can't use <cstring>
#if defined(_WIN32) && _WIN32_WINNT >= 0x0600
#ifndef POCO_HAVE_FD_POLL
#define POCO_HAVE_FD_POLL 1
#endif
#elif defined(POCO_OS_FAMILY_BSD)
#ifndef POCO_HAVE_FD_POLL
#define POCO_HAVE_FD_POLL 1
#endif
#endif
#if defined(POCO_HAVE_FD_EPOLL)
#include <sys/epoll.h>
#elif defined(POCO_HAVE_FD_POLL)
#ifndef _WIN32
#include <poll.h>
#endif
#endif
#if defined(sun) || defined(__sun) || defined(__sun__)
@ -56,7 +71,7 @@ bool checkIsBrokenTimeout()
// https://social.msdn.microsoft.com/Forums/en-US/76620f6d-22b1-4872-aaf0-833204f3f867/minimum-timeout-value-for-sorcvtimeo
OSVERSIONINFO vi;
vi.dwOSVersionInfoSize = sizeof(vi);
if (GetVersionEx(&vi) == 0) return true; //throw SystemException("Cannot get OS version information");
if (GetVersionEx(&vi) == 0) return true;
return vi.dwMajorVersion < 6 || (vi.dwMajorVersion == 6 && vi.dwMinorVersion < 2);
#endif
return false;
@ -84,7 +99,7 @@ SocketImpl::~SocketImpl()
close();
}
SocketImpl* SocketImpl::acceptConnection(SocketAddress& clientAddr)
{
if (_sockfd == POCO_INVALID_SOCKET) throw InvalidSocketException();
@ -189,7 +204,7 @@ void SocketImpl::connectNB(const SocketAddress& address)
void SocketImpl::bind(const SocketAddress& address, bool reuseAddress)
{
bind(address, reuseAddress, true);
bind(address, reuseAddress, true);
}
@ -201,7 +216,7 @@ void SocketImpl::bind(const SocketAddress& address, bool reuseAddress, bool reus
}
if (reuseAddress)
setReuseAddress(true);
if (reusePort)
if (reusePort)
setReusePort(true);
#if defined(POCO_VXWORKS)
int rc = ::bind(_sockfd, (sockaddr*) address.addr(), address.length());
@ -214,7 +229,7 @@ void SocketImpl::bind(const SocketAddress& address, bool reuseAddress, bool reus
void SocketImpl::bind6(const SocketAddress& address, bool reuseAddress, bool ipV6Only)
{
bind6(address, reuseAddress, true, ipV6Only);
bind6(address, reuseAddress, true, ipV6Only);
}
@ -235,7 +250,7 @@ void SocketImpl::bind6(const SocketAddress& address, bool reuseAddress, bool reu
#endif
if (reuseAddress)
setReuseAddress(true);
if (reusePort)
if (reusePort)
setReusePort(true);
int rc = ::bind(_sockfd, address.addr(), address.length());
if (rc != 0) error(address.toString());
@ -244,7 +259,7 @@ void SocketImpl::bind6(const SocketAddress& address, bool reuseAddress, bool reu
#endif
}
void SocketImpl::listen(int backlog)
{
if (_sockfd == POCO_INVALID_SOCKET) throw InvalidSocketException();
@ -272,7 +287,7 @@ void SocketImpl::shutdownReceive()
if (rc != 0) error();
}
void SocketImpl::shutdownSend()
{
if (_sockfd == POCO_INVALID_SOCKET) throw InvalidSocketException();
@ -281,7 +296,7 @@ void SocketImpl::shutdownSend()
if (rc != 0) error();
}
void SocketImpl::shutdown()
{
if (_sockfd == POCO_INVALID_SOCKET) throw InvalidSocketException();
@ -291,16 +306,22 @@ void SocketImpl::shutdown()
}
int SocketImpl::sendBytes(const void* buffer, int length, int flags)
void SocketImpl::checkBrokenTimeout()
{
if (_isBrokenTimeout)
{
if (_sndTimeout.totalMicroseconds() != 0)
if (_recvTimeout.totalMicroseconds() != 0)
{
if (!poll(_sndTimeout, SELECT_WRITE))
if (!poll(_recvTimeout, SELECT_READ))
throw TimeoutException();
}
}
}
int SocketImpl::sendBytes(const void* buffer, int length, int flags)
{
checkBrokenTimeout();
int rc;
do
@ -314,17 +335,35 @@ int SocketImpl::sendBytes(const void* buffer, int length, int flags)
}
int SocketImpl::sendBytes(const SocketBufVec& buffers, int flags)
{
checkBrokenTimeout();
int rc = 0;
do
{
if (_sockfd == POCO_INVALID_SOCKET) throw InvalidSocketException();
#if defined(POCO_OS_FAMILY_WINDOWS)
DWORD sent = 0;
rc = WSASend(_sockfd, const_cast<LPWSABUF>(&buffers[0]),
static_cast<DWORD>(buffers.size()), &sent,
static_cast<DWORD>(flags), 0, 0);
if (rc == SOCKET_ERROR) error();
rc = sent;
#elif defined(POCO_OS_FAMILY_UNIX)
rc = writev(_sockfd, &buffers[0], static_cast<int>(buffers.size()));
#endif
}
while (_blocking && rc < 0 && lastError() == POCO_EINTR);
if (rc < 0) error();
return rc;
}
int SocketImpl::receiveBytes(void* buffer, int length, int flags)
{
if (_isBrokenTimeout)
{
if (_recvTimeout.totalMicroseconds() != 0)
{
if (!poll(_recvTimeout, SELECT_READ))
throw TimeoutException();
}
}
checkBrokenTimeout();
int rc;
do
{
@ -346,12 +385,76 @@ int SocketImpl::receiveBytes(void* buffer, int length, int flags)
}
int SocketImpl::receiveBytes(SocketBufVec& buffers, int flags)
{
checkBrokenTimeout();
int rc = 0;
do
{
if (_sockfd == POCO_INVALID_SOCKET) throw InvalidSocketException();
#if defined(POCO_OS_FAMILY_WINDOWS)
DWORD recvd = 0;
DWORD dwFlags = static_cast<DWORD>(flags);
rc = WSARecv(_sockfd, &buffers[0], static_cast<DWORD>(buffers.size()),
&recvd, &dwFlags, 0, 0);
if (rc == SOCKET_ERROR) error();
rc = recvd;
#elif defined(POCO_OS_FAMILY_UNIX)
rc = readv(_sockfd, &buffers[0], static_cast<int>(buffers.size()));
#endif
}
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::receiveBytes(Poco::Buffer<char>& buffer, int flags, const Poco::Timespan& timeout)
{
int rc = 0;
if (poll(timeout, SELECT_READ))
{
int avail = available();
if (buffer.size() < avail) buffer.resize(avail);
do
{
if (_sockfd == POCO_INVALID_SOCKET) throw InvalidSocketException();
rc = ::recv(_sockfd, buffer.begin(), static_cast<int>(buffer.size()), 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);
}
if (rc < buffer.size()) buffer.resize(rc);
}
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 (_sockfd == POCO_INVALID_SOCKET) init(address.af());
#if defined(POCO_VXWORKS)
rc = ::sendto(_sockfd, (char*) buffer, length, flags, (sockaddr*) address.addr(), address.length());
#else
@ -364,32 +467,121 @@ int SocketImpl::sendTo(const void* buffer, int length, const SocketAddress& addr
}
int SocketImpl::sendTo(const SocketBufVec& buffers, const SocketAddress& address, int flags)
{
int rc = 0;
do
{
if (_sockfd == POCO_INVALID_SOCKET) init(address.af());
#if defined(POCO_OS_FAMILY_WINDOWS)
DWORD sent = 0;
rc = WSASendTo(_sockfd, const_cast<LPWSABUF>(&buffers[0]),
static_cast<DWORD>(buffers.size()), &sent,
static_cast<DWORD>(flags),
address.addr(), address.length(), 0, 0);
if (rc == SOCKET_ERROR) error();
rc = sent;
#elif defined(POCO_OS_FAMILY_UNIX)
struct msghdr msgHdr;
msgHdr.msg_name = const_cast<sockaddr*>(address.addr());
msgHdr.msg_namelen = address.length();
msgHdr.msg_iov = const_cast<iovec*>(&buffers[0]);
msgHdr.msg_iovlen = buffers.size();
msgHdr.msg_control = 0;
msgHdr.msg_controllen = 0;
msgHdr.msg_flags = flags;
rc = sendmsg(_sockfd, &msgHdr, flags);
#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 (_isBrokenTimeout)
{
if (_recvTimeout.totalMicroseconds() != 0)
{
if (!poll(_recvTimeout, SELECT_READ))
throw TimeoutException();
}
}
char abuffer[SocketAddress::MAX_ADDRESS_LENGTH];
struct sockaddr* pSA = reinterpret_cast<struct sockaddr*>(abuffer);
poco_socklen_t saLen = sizeof(abuffer);
int rc;
do
{
if (_sockfd == POCO_INVALID_SOCKET) throw InvalidSocketException();
rc = ::recvfrom(_sockfd, reinterpret_cast<char*>(buffer), length, flags, pSA, &saLen);
}
while (_blocking && rc < 0 && lastError() == POCO_EINTR);
poco_socklen_t* pSALen = &saLen;
int rc = receiveFrom(buffer, length, &pSA, &pSALen, flags);
if (rc >= 0)
{
address = SocketAddress(pSA, saLen);
}
else
return rc;
}
int SocketImpl::receiveFrom(void* buffer, int length, struct sockaddr** ppSA, poco_socklen_t** ppSALen, int flags)
{
checkBrokenTimeout();
int rc;
do
{
if (_sockfd == POCO_INVALID_SOCKET) throw InvalidSocketException();
rc = ::recvfrom(_sockfd, reinterpret_cast<char*>(buffer), length, flags, *ppSA, *ppSALen);
}
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::receiveFrom(SocketBufVec& buffers, SocketAddress& address, int flags)
{
char abuffer[SocketAddress::MAX_ADDRESS_LENGTH];
struct sockaddr* pSA = reinterpret_cast<struct sockaddr*>(abuffer);
poco_socklen_t saLen = sizeof(abuffer);
poco_socklen_t* pSALen = &saLen;
int rc = receiveFrom(buffers, &pSA, &pSALen, flags);
if(rc >= 0)
{
address = SocketAddress(pSA, saLen);
}
return rc;
}
int SocketImpl::receiveFrom(SocketBufVec& buffers, struct sockaddr** pSA, poco_socklen_t** ppSALen, int flags)
{
checkBrokenTimeout();
int rc = 0;
do
{
if (_sockfd == POCO_INVALID_SOCKET) throw InvalidSocketException();
#if defined(POCO_OS_FAMILY_WINDOWS)
DWORD recvd = 0;
DWORD dwFlags = static_cast<DWORD>(flags);
rc = WSARecvFrom(_sockfd, &buffers[0], static_cast<DWORD>(buffers.size()),
&recvd, &dwFlags, *pSA, *ppSALen, 0, 0);
if (rc == SOCKET_ERROR) error();
rc = recvd;
#elif defined(POCO_OS_FAMILY_UNIX)
struct msghdr msgHdr;
msgHdr.msg_name = *pSA;
msgHdr.msg_namelen = **ppSALen;
msgHdr.msg_iov = &buffers[0];
msgHdr.msg_iovlen = buffers.size();
msgHdr.msg_control = 0;
msgHdr.msg_controllen = 0;
msgHdr.msg_flags = flags;
rc = recvmsg(_sockfd, &msgHdr, flags);
if (rc >= 0) **ppSALen = msgHdr.msg_namelen;
#endif
}
while (_blocking && rc < 0 && lastError() == POCO_EINTR);
if (rc < 0)
{
int err = lastError();
if (err == POCO_EAGAIN && !_blocking)
@ -414,7 +606,7 @@ void SocketImpl::sendUrgent(unsigned char data)
int SocketImpl::available()
{
int result;
int result = 0;
ioctl(FIONREAD, result);
return result;
}
@ -494,8 +686,11 @@ bool SocketImpl::poll(const Poco::Timespan& timeout, int mode)
do
{
Poco::Timestamp start;
#ifdef _WIN32
rc = WSAPoll(&pollBuf, 1, static_cast<INT>(timeout.totalMilliseconds()));
#else
rc = ::poll(&pollBuf, 1, remainingTime.totalMilliseconds());
#endif
if (rc < 0 && lastError() == POCO_EINTR)
{
Poco::Timestamp end;
@ -939,7 +1134,7 @@ void SocketImpl::initSocket(int af, int type, int proto)
// 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.
// best to just ignore SIGPIPE altogether.
setOption(SOL_SOCKET, SO_NOSIGPIPE, 1);
#endif
}

View File

@ -26,15 +26,16 @@ SocketNotifier::SocketNotifier(const Socket& socket):
{
}
SocketNotifier::~SocketNotifier()
{
}
void SocketNotifier::addObserver(SocketReactor* pReactor, const Poco::AbstractObserver& observer)
{
_nc.addObserver(observer);
ScopedLock l(_mutex);
if (observer.accepts(pReactor->_pReadableNotification))
_events.insert(pReactor->_pReadableNotification.get());
else if (observer.accepts(pReactor->_pWritableNotification))
@ -45,10 +46,11 @@ void SocketNotifier::addObserver(SocketReactor* pReactor, const Poco::AbstractOb
_events.insert(pReactor->_pTimeoutNotification.get());
}
void SocketNotifier::removeObserver(SocketReactor* pReactor, const Poco::AbstractObserver& observer)
{
_nc.removeObserver(observer);
ScopedLock l(_mutex);
EventSet::iterator it = _events.end();
if (observer.accepts(pReactor->_pReadableNotification))
it = _events.find(pReactor->_pReadableNotification.get());

View File

@ -115,10 +115,9 @@ void SocketReactor::run()
bool SocketReactor::hasSocketHandlers()
{
ScopedLock lock(_mutex);
if (!_pollSet.empty())
{
ScopedLock lock(_mutex);
for (EventHandlerMap::iterator it = _handlers.begin(); it != _handlers.end(); ++it)
{
if (it->second->accepts(_pReadableNotification) ||
@ -157,21 +156,9 @@ const Poco::Timespan& SocketReactor::getTimeout() const
void SocketReactor::addEventHandler(const Socket& socket, const Poco::AbstractObserver& observer)
{
NotifierPtr pNotifier;
{
ScopedLock lock(_mutex);
EventHandlerMap::iterator it = _handlers.find(socket);
if (it == _handlers.end())
{
pNotifier = new SocketNotifier(socket);
_handlers[socket] = pNotifier;
}
else pNotifier = it->second;
NotifierPtr pNotifier = getNotifier(socket, true);
if (!pNotifier->hasObserver(observer))
pNotifier->addObserver(this, observer);
}
if (!pNotifier->hasObserver(observer)) pNotifier->addObserver(this, observer);
int mode = 0;
if (pNotifier->accepts(_pReadableNotification)) mode |= PollSet::POLL_READ;
@ -183,44 +170,40 @@ void SocketReactor::addEventHandler(const Socket& socket, const Poco::AbstractOb
bool SocketReactor::hasEventHandler(const Socket& socket, const Poco::AbstractObserver& observer)
{
NotifierPtr pNotifier;
{
ScopedLock lock(_mutex);
EventHandlerMap::iterator it = _handlers.find(socket);
if (it != _handlers.end())
{
if (it->second->hasObserver(observer))
return true;
}
}
NotifierPtr pNotifier = getNotifier(socket);
if (!pNotifier) return false;
if (pNotifier->hasObserver(observer)) return true;
return false;
}
SocketReactor::NotifierPtr SocketReactor::getNotifier(const Socket& socket, bool makeNew)
{
ScopedLock lock(_mutex);
EventHandlerMap::iterator it = _handlers.find(socket);
if (it != _handlers.end()) return it->second;
else if (makeNew) return (_handlers[socket] = new SocketNotifier(socket));
return 0;
}
void SocketReactor::removeEventHandler(const Socket& socket, const Poco::AbstractObserver& observer)
{
NotifierPtr pNotifier;
{
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);
_pollSet.remove(socket);
}
}
}
NotifierPtr pNotifier = getNotifier(socket);
if (pNotifier && pNotifier->hasObserver(observer))
{
if(pNotifier->countObservers() == 1)
{
{
ScopedLock lock(_mutex);
_handlers.erase(socket);
}
_pollSet.remove(socket);
}
pNotifier->removeObserver(this, observer);
}
}
@ -255,15 +238,8 @@ void SocketReactor::onBusy()
void SocketReactor::dispatch(const Socket& socket, SocketNotification* pNotification)
{
NotifierPtr pNotifier;
{
ScopedLock lock(_mutex);
EventHandlerMap::iterator it = _handlers.find(socket);
if (it != _handlers.end())
pNotifier = it->second;
else
return;
}
NotifierPtr pNotifier = getNotifier(socket);
if (!pNotifier) return;
dispatch(pNotifier, pNotification);
}
@ -271,9 +247,9 @@ void SocketReactor::dispatch(const Socket& socket, SocketNotification* pNotifica
void SocketReactor::dispatch(SocketNotification* pNotification)
{
std::vector<NotifierPtr> delegates;
delegates.reserve(_handlers.size());
{
ScopedLock lock(_mutex);
delegates.reserve(_handlers.size());
for (EventHandlerMap::iterator it = _handlers.begin(); it != _handlers.end(); ++it)
delegates.push_back(it->second);
}

View File

@ -102,7 +102,7 @@ void StreamSocket::shutdownSend()
impl()->shutdownSend();
}
void StreamSocket::shutdown()
{
impl()->shutdown();
@ -115,6 +115,12 @@ int StreamSocket::sendBytes(const void* buffer, int length, int flags)
}
int StreamSocket::sendBytes(const SocketBufVec& buffers, int flags)
{
return impl()->sendBytes(buffers, flags);
}
int StreamSocket::sendBytes(FIFOBuffer& fifoBuf)
{
ScopedLock<Mutex> l(fifoBuf.mutex());
@ -131,6 +137,18 @@ int StreamSocket::receiveBytes(void* buffer, int length, int flags)
}
int StreamSocket::receiveBytes(SocketBufVec& buffers, int flags)
{
return impl()->receiveBytes(buffers, flags);
}
int StreamSocket::receiveBytes(Poco::Buffer<char>& buffer, int flags, const Poco::Timespan& timeout)
{
return impl()->receiveBytes(buffer, flags, timeout);
}
int StreamSocket::receiveBytes(FIFOBuffer& fifoBuf)
{
ScopedLock<Mutex> l(fifoBuf.mutex());

91
Net/src/UDPClient.cpp Normal file
View File

@ -0,0 +1,91 @@
//
// UDPClient.cpp
//
// Library: Net
// Package: UDP
// Module: UDPClient
//
// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH.
// and Contributors.
//
// SPDX-License-Identifier: BSL-1.0
//
#include "Poco/Net/UDPClient.h"
#include "Poco/ErrorHandler.h"
namespace Poco {
namespace Net {
UDPClient::UDPClient(const std::string& address, Poco::UInt16 port, bool listen):
_address(address, port),
_pThread(0),
_stop(false)
{
_socket.bind(SocketAddress(address, 0), true, true);
_socket.setReuseAddress(true);
_socket.setReusePort(true);
_socket.connect(_address);
_socket.setBlocking(true);
if (listen)
{
_pThread = new Thread;
_pThread->start(*this);
}
}
UDPClient::~UDPClient()
{
_stop = true;
if (_pThread)
{
_pThread->join();
delete _pThread;
}
}
void UDPClient::run()
{
Poco::Timespan span(250000);
while (!_stop)
{
if (_socket.poll(span, Socket::SELECT_READ))
{
try
{
char buffer[sizeof(Poco::UInt32)*2];
int n = _socket.receiveBytes(buffer, sizeof(buffer));
if (n >= sizeof(Poco::Int32)) handleResponse(buffer, n);
}
catch (Exception& exc)
{
ErrorHandler::handle(exc);
}
catch (std::exception& exc)
{
ErrorHandler::handle(exc);
}
catch (...)
{
ErrorHandler::handle();
}
}
}
}
int UDPClient::handleResponse(char* buffer, int length)
{
Poco::Int32 count = *reinterpret_cast<Poco::Int32*>(buffer);
if (count > 0) _dataBacklog = count;
else if (count < 0) _errorBacklog = count;
return count;
}
} } // namespace Poco::Net

View File

@ -0,0 +1,42 @@
//
// UDPServerParams.cpp
//
// Library: Net
// Package: UDP
// Module: UDPServerParams
//
// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH.
// and Contributors.
//
// SPDX-License-Identifier: BSL-1.0
//
#include "Poco/Net/UDPServerParams.h"
namespace Poco {
namespace Net {
UDPServerParams::UDPServerParams(const Poco::Net::SocketAddress& sa,
int nSockets,
Poco::Timespan timeout,
std::size_t handlerBufListSize,
bool notifySender,
int backlogThreshold): _sa(sa),
_nSockets(nSockets),
_timeout(timeout),
_handlerBufListSize(handlerBufListSize),
_notifySender(notifySender),
_backlogThreshold(backlogThreshold)
{
}
UDPServerParams::~UDPServerParams()
{
}
} } // namespace Poco::Net

View File

@ -198,14 +198,14 @@ int WebSocketImpl::receiveBytes(void* buffer, int length, int)
}
int WebSocketImpl::receiveBytes(Poco::Buffer<char>& buffer, int)
int WebSocketImpl::receiveBytes(Poco::Buffer<char>& buffer, int, const Poco::Timespan&)
{
char mask[4];
bool useMask;
int payloadLength = receiveHeader(mask, useMask);
if (payloadLength <= 0)
return payloadLength;
int oldSize = buffer.size();
int oldSize = static_cast<int>(buffer.size());
buffer.resize(oldSize + payloadLength);
return receivePayload(buffer.begin() + oldSize, payloadLength, mask, useMask);
}
@ -231,7 +231,7 @@ int WebSocketImpl::receiveNBytes(void* buffer, int bytes)
int WebSocketImpl::receiveSomeBytes(char* buffer, int bytes)
{
int n = _buffer.size() - _bufferOffset;
int n = static_cast<int>(_buffer.size()) - _bufferOffset;
if (n > 0)
{
if (bytes < n) n = bytes;
@ -375,7 +375,7 @@ Poco::Timespan WebSocketImpl::getReceiveTimeout()
int WebSocketImpl::available()
{
int n = _buffer.size() - _bufferOffset;
int n = static_cast<int>(_buffer.size()) - _bufferOffset;
if (n > 0)
return n + _pStreamSocketImpl->available();
else

View File

@ -27,7 +27,7 @@ objects = \
WebSocketTest WebSocketTestSuite \
SyslogTest \
OAuth10CredentialsTest OAuth20CredentialsTest OAuthTestSuite \
PollSetTest
PollSetTest UDPServerTest UDPServerTestSuite
target = testrunner
target_version = 1

View File

@ -867,6 +867,23 @@
RelativePath=".\src\OAuthTestSuite.cpp"/>
</Filter>
</Filter>
<Filter
Name="UDP">
<Filter
Name="Source Files">
<File
RelativePath=".\src\UDPServerTest.cpp"/>
<File
RelativePath=".\src\UDPServerTestSuite.cpp"/>
</Filter>
<Filter
Name="Header Files">
<File
RelativePath=".\src\UDPServerTest.h"/>
<File
RelativePath=".\src\UDPServerTestSuite.h"/>
</Filter>
</Filter>
</Files>
<Globals/>
</VisualStudioProject>

View File

@ -62,6 +62,8 @@
<ClInclude Include="src\OAuth10CredentialsTest.h"/>
<ClInclude Include="src\OAuth20CredentialsTest.h"/>
<ClInclude Include="src\OAuthTestSuite.h"/>
<ClInclude Include="src\UDPServerTest.h"/>
<ClInclude Include="src\UDPServerTestSuite.h"/>
</ItemGroup>
<PropertyGroup Label="Globals">
<ProjectName>TestSuite</ProjectName>
@ -149,6 +151,8 @@
<ClCompile Include="src\OAuth10CredentialsTest.cpp"/>
<ClCompile Include="src\OAuth20CredentialsTest.cpp"/>
<ClCompile Include="src\OAuthTestSuite.cpp"/>
<ClCompile Include="src\UDPServerTest.cpp"/>
<ClCompile Include="src\UDPServerTestSuite.cpp"/>
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets"/>
<ImportGroup Label="ExtensionTargets"/>

View File

@ -2,6 +2,173 @@
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Filter Include="NetCore">
<UniqueIdentifier>{8fd34284-5041-4d4d-802b-f74e6937fb93}</UniqueIdentifier>
</Filter>
<Filter Include="NetCore\Header Files">
<UniqueIdentifier>{8374b2df-5899-4dc8-9256-6f41c7d293af}</UniqueIdentifier>
</Filter>
<Filter Include="NetCore\Source Files">
<UniqueIdentifier>{2b6c78c7-a628-407f-b009-1def77b72cc3}</UniqueIdentifier>
</Filter>
<Filter Include="_Suite">
<UniqueIdentifier>{b100f247-a3bc-4d4d-bb26-8007aa8faf66}</UniqueIdentifier>
</Filter>
<Filter Include="_Suite\Header Files">
<UniqueIdentifier>{e7a26e0b-836c-4044-a991-39fe6582b916}</UniqueIdentifier>
</Filter>
<Filter Include="_Suite\Source Files">
<UniqueIdentifier>{e6d98da1-96d3-475c-8b56-739a6f11307d}</UniqueIdentifier>
</Filter>
<Filter Include="_Driver">
<UniqueIdentifier>{299dfbde-165d-4012-9e10-504b5fe7d137}</UniqueIdentifier>
</Filter>
<Filter Include="_Driver\Source Files">
<UniqueIdentifier>{ccf4bb9f-dfab-48e6-bda3-7af19964d7f5}</UniqueIdentifier>
</Filter>
<Filter Include="Sockets">
<UniqueIdentifier>{3c9a4501-fe57-4330-9a82-ef4125285683}</UniqueIdentifier>
</Filter>
<Filter Include="Sockets\Header Files">
<UniqueIdentifier>{b5d2fafc-cc93-4a55-9cd9-fb0e00884ef3}</UniqueIdentifier>
</Filter>
<Filter Include="Sockets\Source Files">
<UniqueIdentifier>{aae8072c-c43f-4838-a523-e418d6c181a2}</UniqueIdentifier>
</Filter>
<Filter Include="Messages">
<UniqueIdentifier>{c8f64c2a-d223-47fa-9132-33757148ba66}</UniqueIdentifier>
</Filter>
<Filter Include="Messages\Header Files">
<UniqueIdentifier>{77ba14ac-9d9d-4acf-9bb4-92221afd94c4}</UniqueIdentifier>
</Filter>
<Filter Include="Messages\Source Files">
<UniqueIdentifier>{f0612864-a55c-4ccd-b7fe-0ce2c5b1f981}</UniqueIdentifier>
</Filter>
<Filter Include="HTTP">
<UniqueIdentifier>{1b599fc6-d3cc-48d3-81b4-57e06b89fc5a}</UniqueIdentifier>
</Filter>
<Filter Include="HTTP\Header Files">
<UniqueIdentifier>{a1f079f9-e099-469c-bd66-3f49253d8986}</UniqueIdentifier>
</Filter>
<Filter Include="HTTP\Source Files">
<UniqueIdentifier>{779f116d-ba2f-4127-b2fc-4628c696c26a}</UniqueIdentifier>
</Filter>
<Filter Include="TCPServer">
<UniqueIdentifier>{4e616ad5-a332-47e1-802d-8e1405737022}</UniqueIdentifier>
</Filter>
<Filter Include="TCPServer\Header Files">
<UniqueIdentifier>{dca364ec-80fe-4efa-80fb-262704f3e9f1}</UniqueIdentifier>
</Filter>
<Filter Include="TCPServer\Source Files">
<UniqueIdentifier>{218a32aa-0296-4294-956c-69a073ec88b3}</UniqueIdentifier>
</Filter>
<Filter Include="HTTPServer">
<UniqueIdentifier>{9d9abf3d-5524-4809-9728-00b4e72e55a6}</UniqueIdentifier>
</Filter>
<Filter Include="HTTPServer\Header Files">
<UniqueIdentifier>{5e1a3d45-1a90-4e36-bbe0-6557fdf99ee3}</UniqueIdentifier>
</Filter>
<Filter Include="HTTPServer\Source Files">
<UniqueIdentifier>{81246b85-ce01-428c-94dd-20063d2f34dc}</UniqueIdentifier>
</Filter>
<Filter Include="HTML">
<UniqueIdentifier>{28bce7bd-cc3e-4b70-9702-ad7a4d383af1}</UniqueIdentifier>
</Filter>
<Filter Include="HTML\Header Files">
<UniqueIdentifier>{b9e5422b-b33b-426e-9652-9043ed3bb407}</UniqueIdentifier>
</Filter>
<Filter Include="HTML\Source Files">
<UniqueIdentifier>{ad4153c5-c306-4301-adca-b9f9d88fc878}</UniqueIdentifier>
</Filter>
<Filter Include="HTTPClient">
<UniqueIdentifier>{55a4195b-7abb-46e2-97bd-33514e81b42d}</UniqueIdentifier>
</Filter>
<Filter Include="HTTPClient\Header Files">
<UniqueIdentifier>{5091a3c3-4f6a-4f82-bb68-8d0af73353e1}</UniqueIdentifier>
</Filter>
<Filter Include="HTTPClient\Source Files">
<UniqueIdentifier>{4ae26cd0-5d30-440d-8e1e-0960612d1fdd}</UniqueIdentifier>
</Filter>
<Filter Include="FTPClient">
<UniqueIdentifier>{6cba48e5-b2c5-4ccd-a885-d24fbc3cdfd4}</UniqueIdentifier>
</Filter>
<Filter Include="FTPClient\Header Files">
<UniqueIdentifier>{b91c5670-ba96-4a68-bbd9-16bdc96714ba}</UniqueIdentifier>
</Filter>
<Filter Include="FTPClient\Source Files">
<UniqueIdentifier>{5dffd684-fc2b-4b98-8399-e07547284cdf}</UniqueIdentifier>
</Filter>
<Filter Include="Reactor">
<UniqueIdentifier>{7def3556-ad47-479c-aa2c-47d2c5d5d72f}</UniqueIdentifier>
</Filter>
<Filter Include="Reactor\Header Files">
<UniqueIdentifier>{eaf50a82-f987-49aa-82ba-45a48420d21f}</UniqueIdentifier>
</Filter>
<Filter Include="Reactor\Source Files">
<UniqueIdentifier>{61296c01-e573-4647-8d23-6dc6c1413b01}</UniqueIdentifier>
</Filter>
<Filter Include="Mail">
<UniqueIdentifier>{0e300645-2c8d-4f0f-8a6d-5691369eef3a}</UniqueIdentifier>
</Filter>
<Filter Include="Mail\Header Files">
<UniqueIdentifier>{d9d3c50b-8430-486c-bf0c-2871617108ba}</UniqueIdentifier>
</Filter>
<Filter Include="Mail\Source Files">
<UniqueIdentifier>{1addeb3f-65d2-4eab-b139-0de2c143dbb9}</UniqueIdentifier>
</Filter>
<Filter Include="ICMP">
<UniqueIdentifier>{f8be8317-a8ac-4987-982a-c7841b1424fd}</UniqueIdentifier>
</Filter>
<Filter Include="ICMP\Header Files">
<UniqueIdentifier>{cfc4aaa1-171f-48cd-a763-1104a5c9d7c9}</UniqueIdentifier>
</Filter>
<Filter Include="ICMP\Source Files">
<UniqueIdentifier>{1c6d9527-2c97-4fe9-8741-f3234859d09e}</UniqueIdentifier>
</Filter>
<Filter Include="NTP">
<UniqueIdentifier>{d009a5e8-68d3-46e2-b28e-3cc9b3579be5}</UniqueIdentifier>
</Filter>
<Filter Include="NTP\Header Files">
<UniqueIdentifier>{a531dfcc-d6f1-420e-a3b6-85bf6fc6aa81}</UniqueIdentifier>
</Filter>
<Filter Include="NTP\Source Files">
<UniqueIdentifier>{a7449a2e-8536-455d-bbc1-7346542fd14b}</UniqueIdentifier>
</Filter>
<Filter Include="Logging">
<UniqueIdentifier>{d3b068ab-6a55-4f67-98c6-3355c5da158e}</UniqueIdentifier>
</Filter>
<Filter Include="Logging\Header Files">
<UniqueIdentifier>{d130dc6a-df34-4a1f-aa09-738b7cfcc2e0}</UniqueIdentifier>
</Filter>
<Filter Include="Logging\Source Files">
<UniqueIdentifier>{00782206-4918-4d6f-a646-9dcde41e030e}</UniqueIdentifier>
</Filter>
<Filter Include="WebSocket">
<UniqueIdentifier>{73fc95f5-80a0-4bfa-95b8-70aa672b8f48}</UniqueIdentifier>
</Filter>
<Filter Include="WebSocket\Header Files">
<UniqueIdentifier>{a2570d2f-defe-40a8-8091-ccaa13545d2d}</UniqueIdentifier>
</Filter>
<Filter Include="WebSocket\Source Files">
<UniqueIdentifier>{5eda9803-086b-4e46-a366-dd45f6e3f203}</UniqueIdentifier>
</Filter>
<Filter Include="OAuth">
<UniqueIdentifier>{c9b8927e-10dc-4dc9-8205-9fac549fb9d4}</UniqueIdentifier>
</Filter>
<Filter Include="OAuth\Header Files">
<UniqueIdentifier>{faed4c5f-51db-4881-9909-3719990a9ee0}</UniqueIdentifier>
</Filter>
<Filter Include="OAuth\Source Files">
<UniqueIdentifier>{6ef4b606-5466-453e-a672-4329c984923d}</UniqueIdentifier>
</Filter>
<Filter Include="UDP">
<UniqueIdentifier>{4b0efdd4-8d14-48bf-b1d7-d199db870aac}</UniqueIdentifier>
</Filter>
<Filter Include="UDP\Source Files">
<UniqueIdentifier>{de49d06d-e74f-414a-9fb6-0014b701787a}</UniqueIdentifier>
</Filter>
<Filter Include="UDP\Header Files">
<UniqueIdentifier>{46752604-f224-4bff-85b2-6b6f1a82199b}</UniqueIdentifier>
=======
<UniqueIdentifier>{6e872251-5e76-4583-8311-a70ec08a00a2}</UniqueIdentifier>
</Filter>
<Filter Include="NetCore\Header Files">
@ -345,6 +512,12 @@
<ClInclude Include="src\OAuthTestSuite.h">
<Filter>OAuth\Header Files</Filter>
</ClInclude>
<ClInclude Include="src\UDPServerTest.h">
<Filter>UDP\Header Files</Filter>
</ClInclude>
<ClInclude Include="src\UDPServerTestSuite.h">
<Filter>UDP\Header Files</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<ClCompile Include="src\DNSTest.cpp">
@ -533,5 +706,11 @@
<ClCompile Include="src\OAuthTestSuite.cpp">
<Filter>OAuth\Source Files</Filter>
</ClCompile>
<ClCompile Include="src\UDPServerTest.cpp">
<Filter>UDP\Source Files</Filter>
</ClCompile>
<ClCompile Include="src\UDPServerTestSuite.cpp">
<Filter>UDP\Source Files</Filter>
</ClCompile>
</ItemGroup>
</Project>

View File

@ -60,6 +60,8 @@
<ClInclude Include="src\TCPServerTest.h"/>
<ClInclude Include="src\TCPServerTestSuite.h"/>
<ClInclude Include="src\UDPEchoServer.h"/>
<ClInclude Include="src\UDPServerTest.h"/>
<ClInclude Include="src\UDPServerTestSuite.h"/>
<ClInclude Include="src\WebSocketTest.h"/>
<ClInclude Include="src\WebSocketTestSuite.h"/>
</ItemGroup>
@ -146,6 +148,8 @@
<ClCompile Include="src\TCPServerTest.cpp"/>
<ClCompile Include="src\TCPServerTestSuite.cpp"/>
<ClCompile Include="src\UDPEchoServer.cpp"/>
<ClCompile Include="src\UDPServerTest.cpp"/>
<ClCompile Include="src\UDPServerTestSuite.cpp"/>
<ClCompile Include="src\WebSocketTest.cpp"/>
<ClCompile Include="src\WebSocketTestSuite.cpp"/>
<ClCompile Include="src\WinCEDriver.cpp"/>

View File

@ -345,6 +345,12 @@
<ClInclude Include="src\OAuthTestSuite.h">
<Filter>OAuth\Header Files</Filter>
</ClInclude>
<ClInclude Include="src\UDPServerTest.h">
<Filter>UDP\Header Files</Filter>
</ClInclude>
<ClInclude Include="src\UDPServerTestSuite.h">
<Filter>UDP\Header Files</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<ClCompile Include="src\DNSTest.cpp">
@ -533,5 +539,11 @@
<ClCompile Include="src\OAuthTestSuite.cpp">
<Filter>OAuth\Source Files</Filter>
</ClCompile>
<ClCompile Include="src\UDPServerTest.cpp">
<Filter>UDP\Source Files</Filter>
</ClCompile>
<ClCompile Include="src\UDPServerTestSuite.cpp">
<Filter>UDP\Source Files</Filter>
</ClCompile>
</ItemGroup>
</Project>

View File

@ -373,6 +373,8 @@
<ClInclude Include="src\OAuth10CredentialsTest.h"/>
<ClInclude Include="src\OAuth20CredentialsTest.h"/>
<ClInclude Include="src\OAuthTestSuite.h"/>
<ClInclude Include="src\UDPServerTest.h"/>
<ClInclude Include="src\UDPServerTestSuite.h"/>
</ItemGroup>
<ItemGroup>
<ClCompile Include="src\DNSTest.cpp"/>
@ -437,6 +439,8 @@
<ClCompile Include="src\OAuth10CredentialsTest.cpp"/>
<ClCompile Include="src\OAuth20CredentialsTest.cpp"/>
<ClCompile Include="src\OAuthTestSuite.cpp"/>
<ClCompile Include="src\UDPServerTest.cpp"/>
<ClCompile Include="src\UDPServerTestSuite.cpp"/>
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets"/>
<ImportGroup Label="ExtensionTargets"/>

View File

@ -345,6 +345,12 @@
<ClInclude Include="src\OAuthTestSuite.h">
<Filter>OAuth\Header Files</Filter>
</ClInclude>
<ClInclude Include="src\UDPServerTest.h">
<Filter>UDP\Header Files</Filter>
</ClInclude>
<ClInclude Include="src\UDPServerTestSuite.h">
<Filter>UDP\Header Files</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<ClCompile Include="src\DNSTest.cpp">
@ -533,5 +539,11 @@
<ClCompile Include="src\OAuthTestSuite.cpp">
<Filter>OAuth\Source Files</Filter>
</ClCompile>
<ClCompile Include="src\UDPServerTest.cpp">
<Filter>UDP\Source Files</Filter>
</ClCompile>
<ClCompile Include="src\UDPServerTestSuite.cpp">
<Filter>UDP\Source Files</Filter>
</ClCompile>
</ItemGroup>
</Project>

View File

@ -373,6 +373,8 @@
<ClInclude Include="src\OAuth10CredentialsTest.h"/>
<ClInclude Include="src\OAuth20CredentialsTest.h"/>
<ClInclude Include="src\OAuthTestSuite.h"/>
<ClInclude Include="src\UDPServerTest.h"/>
<ClInclude Include="src\UDPServerTestSuite.h"/>
</ItemGroup>
<ItemGroup>
<ClCompile Include="src\DNSTest.cpp"/>
@ -437,6 +439,8 @@
<ClCompile Include="src\OAuth10CredentialsTest.cpp"/>
<ClCompile Include="src\OAuth20CredentialsTest.cpp"/>
<ClCompile Include="src\OAuthTestSuite.cpp"/>
<ClCompile Include="src\UDPServerTest.cpp"/>
<ClCompile Include="src\UDPServerTestSuite.cpp"/>
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets"/>
<ImportGroup Label="ExtensionTargets"/>

View File

@ -345,6 +345,12 @@
<ClInclude Include="src\OAuthTestSuite.h">
<Filter>OAuth\Header Files</Filter>
</ClInclude>
<ClInclude Include="src\UDPServerTest.h">
<Filter>UDP\Header Files</Filter>
</ClInclude>
<ClInclude Include="src\UDPServerTestSuite.h">
<Filter>UDP\Header Files</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<ClCompile Include="src\DNSTest.cpp">
@ -533,5 +539,11 @@
<ClCompile Include="src\OAuthTestSuite.cpp">
<Filter>OAuth\Source Files</Filter>
</ClCompile>
<ClCompile Include="src\UDPServerTest.cpp">
<Filter>UDP\Source Files</Filter>
</ClCompile>
<ClCompile Include="src\UDPServerTestSuite.cpp">
<Filter>UDP\Source Files</Filter>
</ClCompile>
</ItemGroup>
</Project>

View File

@ -363,6 +363,8 @@
<ClInclude Include="src\TCPServerTest.h"/>
<ClInclude Include="src\TCPServerTestSuite.h"/>
<ClInclude Include="src\UDPEchoServer.h"/>
<ClInclude Include="src\UDPServerTest.h"/>
<ClInclude Include="src\UDPServerTestSuite.h"/>
<ClInclude Include="src\WebSocketTest.h"/>
<ClInclude Include="src\WebSocketTestSuite.h"/>
</ItemGroup>
@ -427,6 +429,8 @@
<ClCompile Include="src\TCPServerTest.cpp"/>
<ClCompile Include="src\TCPServerTestSuite.cpp"/>
<ClCompile Include="src\UDPEchoServer.cpp"/>
<ClCompile Include="src\UDPServerTest.cpp"/>
<ClCompile Include="src\UDPServerTestSuite.cpp"/>
<ClCompile Include="src\WebSocketTest.cpp"/>
<ClCompile Include="src\WebSocketTestSuite.cpp"/>
</ItemGroup>

View File

@ -345,6 +345,12 @@
<ClInclude Include="src\OAuthTestSuite.h">
<Filter>OAuth\Header Files</Filter>
</ClInclude>
<ClInclude Include="src\UDPServerTest.h">
<Filter>UDP\Header Files</Filter>
</ClInclude>
<ClInclude Include="src\UDPServerTestSuite.h">
<Filter>UDP\Header Files</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<ClCompile Include="src\DNSTest.cpp">
@ -533,5 +539,11 @@
<ClCompile Include="src\OAuthTestSuite.cpp">
<Filter>OAuth\Source Files</Filter>
</ClCompile>
<ClCompile Include="src\UDPServerTest.cpp">
<Filter>UDP\Source Files</Filter>
</ClCompile>
<ClCompile Include="src\UDPServerTestSuite.cpp">
<Filter>UDP\Source Files</Filter>
</ClCompile>
</ItemGroup>
</Project>

View File

@ -173,7 +173,7 @@
<CompileAs>Default</CompileAs>
</ClCompile>
<Link>
<AdditionalDependencies>ws2_32.lib;iphlpapi.lib;%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalDependencies>CppUnit.lib;ws2_32.lib;iphlpapi.lib;%(AdditionalDependencies)</AdditionalDependencies>
<OutputFile>bin\TestSuite.exe</OutputFile>
<AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<GenerateDebugInformation>false</GenerateDebugInformation>
@ -202,7 +202,7 @@
<CompileAs>Default</CompileAs>
</ClCompile>
<Link>
<AdditionalDependencies>iphlpapi.lib;winmm.lib;ws2_32.lib;iphlpapi.lib;%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalDependencies>CppUnitmtd.lib;iphlpapi.lib;winmm.lib;ws2_32.lib;iphlpapi.lib;%(AdditionalDependencies)</AdditionalDependencies>
<OutputFile>bin\static_mt\TestSuited.exe</OutputFile>
<AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<SuppressStartupBanner>true</SuppressStartupBanner>
@ -233,7 +233,7 @@
<CompileAs>Default</CompileAs>
</ClCompile>
<Link>
<AdditionalDependencies>iphlpapi.lib;winmm.lib;ws2_32.lib;iphlpapi.lib;%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalDependencies>CppUnitmt.lib;iphlpapi.lib;winmm.lib;ws2_32.lib;iphlpapi.lib;%(AdditionalDependencies)</AdditionalDependencies>
<OutputFile>bin\static_mt\TestSuite.exe</OutputFile>
<AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<GenerateDebugInformation>false</GenerateDebugInformation>
@ -262,7 +262,7 @@
<CompileAs>Default</CompileAs>
</ClCompile>
<Link>
<AdditionalDependencies>iphlpapi.lib;winmm.lib;ws2_32.lib;iphlpapi.lib;%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalDependencies>CppUnitmdd.lib;iphlpapi.lib;winmm.lib;ws2_32.lib;iphlpapi.lib;%(AdditionalDependencies)</AdditionalDependencies>
<OutputFile>bin\static_md\TestSuited.exe</OutputFile>
<AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<SuppressStartupBanner>true</SuppressStartupBanner>
@ -293,7 +293,7 @@
<CompileAs>Default</CompileAs>
</ClCompile>
<Link>
<AdditionalDependencies>iphlpapi.lib;winmm.lib;ws2_32.lib;iphlpapi.lib;%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalDependencies>CppUnitmd.lib;iphlpapi.lib;winmm.lib;ws2_32.lib;iphlpapi.lib;%(AdditionalDependencies)</AdditionalDependencies>
<OutputFile>bin\static_md\TestSuite.exe</OutputFile>
<AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<GenerateDebugInformation>false</GenerateDebugInformation>
@ -363,6 +363,8 @@
<ClInclude Include="src\TCPServerTest.h"/>
<ClInclude Include="src\TCPServerTestSuite.h"/>
<ClInclude Include="src\UDPEchoServer.h"/>
<ClInclude Include="src\UDPServerTest.h"/>
<ClInclude Include="src\UDPServerTestSuite.h"/>
<ClInclude Include="src\WebSocketTest.h"/>
<ClInclude Include="src\WebSocketTestSuite.h"/>
</ItemGroup>
@ -427,6 +429,8 @@
<ClCompile Include="src\TCPServerTest.cpp"/>
<ClCompile Include="src\TCPServerTestSuite.cpp"/>
<ClCompile Include="src\UDPEchoServer.cpp"/>
<ClCompile Include="src\UDPServerTest.cpp"/>
<ClCompile Include="src\UDPServerTestSuite.cpp"/>
<ClCompile Include="src\WebSocketTest.cpp"/>
<ClCompile Include="src\WebSocketTestSuite.cpp"/>
</ItemGroup>

View File

@ -345,6 +345,12 @@
<ClInclude Include="src\OAuthTestSuite.h">
<Filter>OAuth\Header Files</Filter>
</ClInclude>
<ClInclude Include="src\UDPServerTest.h">
<Filter>UDP\Header Files</Filter>
</ClInclude>
<ClInclude Include="src\UDPServerTestSuite.h">
<Filter>UDP\Header Files</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<ClCompile Include="src\DNSTest.cpp">
@ -533,5 +539,11 @@
<ClCompile Include="src\OAuthTestSuite.cpp">
<Filter>OAuth\Source Files</Filter>
</ClCompile>
<ClCompile Include="src\UDPServerTest.cpp">
<Filter>UDP\Source Files</Filter>
</ClCompile>
<ClCompile Include="src\UDPServerTestSuite.cpp">
<Filter>UDP\Source Files</Filter>
</ClCompile>
</ItemGroup>
</Project>

View File

@ -363,6 +363,8 @@
<ClInclude Include="src\TCPServerTest.h"/>
<ClInclude Include="src\TCPServerTestSuite.h"/>
<ClInclude Include="src\UDPEchoServer.h"/>
<ClInclude Include="src\UDPServerTest.h"/>
<ClInclude Include="src\UDPServerTestSuite.h"/>
<ClInclude Include="src\WebSocketTest.h"/>
<ClInclude Include="src\WebSocketTestSuite.h"/>
</ItemGroup>
@ -427,6 +429,8 @@
<ClCompile Include="src\TCPServerTest.cpp"/>
<ClCompile Include="src\TCPServerTestSuite.cpp"/>
<ClCompile Include="src\UDPEchoServer.cpp"/>
<ClCompile Include="src\UDPServerTest.cpp"/>
<ClCompile Include="src\UDPServerTestSuite.cpp"/>
<ClCompile Include="src\WebSocketTest.cpp"/>
<ClCompile Include="src\WebSocketTestSuite.cpp"/>
</ItemGroup>

View File

@ -345,6 +345,12 @@
<ClInclude Include="src\OAuthTestSuite.h">
<Filter>OAuth\Header Files</Filter>
</ClInclude>
<ClInclude Include="src\UDPServerTest.h">
<Filter>UDP\Header Files</Filter>
</ClInclude>
<ClInclude Include="src\UDPServerTestSuite.h">
<Filter>UDP\Header Files</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<ClCompile Include="src\DNSTest.cpp">
@ -533,5 +539,11 @@
<ClCompile Include="src\OAuthTestSuite.cpp">
<Filter>OAuth\Source Files</Filter>
</ClCompile>
<ClCompile Include="src\UDPServerTest.cpp">
<Filter>UDP\Source Files</Filter>
</ClCompile>
<ClCompile Include="src\UDPServerTestSuite.cpp">
<Filter>UDP\Source Files</Filter>
</ClCompile>
</ItemGroup>
</Project>

View File

@ -848,6 +848,23 @@
RelativePath=".\src\OAuthTestSuite.cpp"/>
</Filter>
</Filter>
<Filter
Name="UDP">
<Filter
Name="Source Files">
<File
RelativePath=".\src\UDPServerTest.cpp"/>
<File
RelativePath=".\src\UDPServerTestSuite.cpp"/>
</Filter>
<Filter
Name="Header Files">
<File
RelativePath=".\src\UDPServerTest.h"/>
<File
RelativePath=".\src\UDPServerTestSuite.h"/>
</Filter>
</Filter>
</Files>
<Globals/>
</VisualStudioProject>

Some files were not shown because too many files have changed in this diff Show More