diff options
author | orivej <orivej@yandex-team.ru> | 2022-02-10 16:45:01 +0300 |
---|---|---|
committer | Daniil Cherednik <dcherednik@yandex-team.ru> | 2022-02-10 16:45:01 +0300 |
commit | 2d37894b1b037cf24231090eda8589bbb44fb6fc (patch) | |
tree | be835aa92c6248212e705f25388ebafcf84bc7a1 /contrib/libs/poco/Net/include/Poco | |
parent | 718c552901d703c502ccbefdfc3c9028d608b947 (diff) | |
download | ydb-2d37894b1b037cf24231090eda8589bbb44fb6fc.tar.gz |
Restoring authorship annotation for <orivej@yandex-team.ru>. Commit 2 of 2.
Diffstat (limited to 'contrib/libs/poco/Net/include/Poco')
106 files changed, 17052 insertions, 17052 deletions
diff --git a/contrib/libs/poco/Net/include/Poco/Net/AbstractHTTPRequestHandler.h b/contrib/libs/poco/Net/include/Poco/Net/AbstractHTTPRequestHandler.h index 710ef68702..7bbc174c81 100644 --- a/contrib/libs/poco/Net/include/Poco/Net/AbstractHTTPRequestHandler.h +++ b/contrib/libs/poco/Net/include/Poco/Net/AbstractHTTPRequestHandler.h @@ -1,136 +1,136 @@ -// -// AbstractHTTPRequestHandler.h -// -// Library: Net -// Package: HTTPServer -// Module: AbstractHTTPRequestHandler -// -// Definition of the AbstractHTTPRequestHandler class. -// -// Copyright (c) 2007, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Net_AbstractHTTPRequestHandler_INCLUDED -#define Net_AbstractHTTPRequestHandler_INCLUDED - - -#include "Poco/Net/HTTPRequestHandler.h" -#include "Poco/Net/HTTPResponse.h" - - -namespace Poco { -namespace Net { - - -class HTMLForm; - - -class Net_API AbstractHTTPRequestHandler: public HTTPRequestHandler - /// The abstract base class for AbstractHTTPRequestHandlers - /// created by HTTPServer. - /// - /// Derived classes must override the run() method. - - /// Contrary to a HTTPRequestHandler, an AbstractHTTPRequestHandler - /// stores request and response as member variables to avoid having - /// to pass them around as method parameters. Additionally, a - /// HTMLForm object is created for use by subclasses. - /// - /// The run() method must perform the complete handling - /// of the HTTP request connection. As soon as the run() - /// method returns, the request handler object is destroyed. - /// - /// A new AbstractHTTPRequestHandler object will be created for - /// each new HTTP request that is received by the HTTPServer. -{ -public: - AbstractHTTPRequestHandler(); - /// Creates the AbstractHTTPRequestHandler. - - virtual ~AbstractHTTPRequestHandler(); - /// Destroys the AbstractHTTPRequestHandler. - - void handleRequest(HTTPServerRequest& request, HTTPServerResponse& response); - /// This class implements some common behavior, - /// before calling run() to actually handle the request: - /// - save request and response objects; - /// - call authorize(); - /// - if authorize() returns true call run(), - /// else send 401 (Unauthorized) response. - /// - /// If run() throws an exception and the response has not been - /// sent yet, sends a 500 (Internal Server Error) response with - /// the exception's display text. - - HTTPServerRequest& request(); - /// Returns the request. - - HTTPServerResponse& response(); - /// Returns the response. - - HTMLForm& form(); - /// Returns a HTMLForm for the given request. - /// The HTMLForm object is created when this - /// member function is executed the first time. - - void sendErrorResponse(HTTPResponse::HTTPStatus status, const std::string& message); - /// Sends a HTML error page for the given status code. - /// The given message is added to the page: - /// <HTML> - /// <HEAD> - /// <TITLE>status - reason</TITLE> - /// </HEAD> - /// <BODY> - /// <H1>status - reason</H1> - /// <P>message</P> - /// </BODY> - /// </HTML> - -protected: - virtual void run() = 0; - /// Must be overridden by subclasses. - /// - /// Handles the given request. - - virtual bool authenticate(); - /// Check authentication; returns true if okay, false if failed to authenticate. - /// The default implementation always returns true. - /// - /// Subclasses can override this member function to perform - /// some form of client or request authentication before - /// the request is actually handled. - -private: - HTTPServerRequest* _pRequest; - HTTPServerResponse* _pResponse; - HTMLForm* _pForm; -}; - - -// -// inlines -// -inline HTTPServerRequest& AbstractHTTPRequestHandler::request() -{ - poco_check_ptr (_pRequest); - - return *_pRequest; -} - - -inline HTTPServerResponse& AbstractHTTPRequestHandler::response() -{ - poco_check_ptr (_pResponse); - - return *_pResponse; -} - - -} } // namespace Poco::Net - - -#endif // Net_AbstractHTTPRequestHandler_INCLUDED +// +// AbstractHTTPRequestHandler.h +// +// Library: Net +// Package: HTTPServer +// Module: AbstractHTTPRequestHandler +// +// Definition of the AbstractHTTPRequestHandler class. +// +// Copyright (c) 2007, Applied Informatics Software Engineering GmbH. +// and Contributors. +// +// SPDX-License-Identifier: BSL-1.0 +// + + +#ifndef Net_AbstractHTTPRequestHandler_INCLUDED +#define Net_AbstractHTTPRequestHandler_INCLUDED + + +#include "Poco/Net/HTTPRequestHandler.h" +#include "Poco/Net/HTTPResponse.h" + + +namespace Poco { +namespace Net { + + +class HTMLForm; + + +class Net_API AbstractHTTPRequestHandler: public HTTPRequestHandler + /// The abstract base class for AbstractHTTPRequestHandlers + /// created by HTTPServer. + /// + /// Derived classes must override the run() method. + + /// Contrary to a HTTPRequestHandler, an AbstractHTTPRequestHandler + /// stores request and response as member variables to avoid having + /// to pass them around as method parameters. Additionally, a + /// HTMLForm object is created for use by subclasses. + /// + /// The run() method must perform the complete handling + /// of the HTTP request connection. As soon as the run() + /// method returns, the request handler object is destroyed. + /// + /// A new AbstractHTTPRequestHandler object will be created for + /// each new HTTP request that is received by the HTTPServer. +{ +public: + AbstractHTTPRequestHandler(); + /// Creates the AbstractHTTPRequestHandler. + + virtual ~AbstractHTTPRequestHandler(); + /// Destroys the AbstractHTTPRequestHandler. + + void handleRequest(HTTPServerRequest& request, HTTPServerResponse& response); + /// This class implements some common behavior, + /// before calling run() to actually handle the request: + /// - save request and response objects; + /// - call authorize(); + /// - if authorize() returns true call run(), + /// else send 401 (Unauthorized) response. + /// + /// If run() throws an exception and the response has not been + /// sent yet, sends a 500 (Internal Server Error) response with + /// the exception's display text. + + HTTPServerRequest& request(); + /// Returns the request. + + HTTPServerResponse& response(); + /// Returns the response. + + HTMLForm& form(); + /// Returns a HTMLForm for the given request. + /// The HTMLForm object is created when this + /// member function is executed the first time. + + void sendErrorResponse(HTTPResponse::HTTPStatus status, const std::string& message); + /// Sends a HTML error page for the given status code. + /// The given message is added to the page: + /// <HTML> + /// <HEAD> + /// <TITLE>status - reason</TITLE> + /// </HEAD> + /// <BODY> + /// <H1>status - reason</H1> + /// <P>message</P> + /// </BODY> + /// </HTML> + +protected: + virtual void run() = 0; + /// Must be overridden by subclasses. + /// + /// Handles the given request. + + virtual bool authenticate(); + /// Check authentication; returns true if okay, false if failed to authenticate. + /// The default implementation always returns true. + /// + /// Subclasses can override this member function to perform + /// some form of client or request authentication before + /// the request is actually handled. + +private: + HTTPServerRequest* _pRequest; + HTTPServerResponse* _pResponse; + HTMLForm* _pForm; +}; + + +// +// inlines +// +inline HTTPServerRequest& AbstractHTTPRequestHandler::request() +{ + poco_check_ptr (_pRequest); + + return *_pRequest; +} + + +inline HTTPServerResponse& AbstractHTTPRequestHandler::response() +{ + poco_check_ptr (_pResponse); + + return *_pResponse; +} + + +} } // namespace Poco::Net + + +#endif // Net_AbstractHTTPRequestHandler_INCLUDED diff --git a/contrib/libs/poco/Net/include/Poco/Net/DNS.h b/contrib/libs/poco/Net/include/Poco/Net/DNS.h index 27d700ec5c..f896862d9f 100644 --- a/contrib/libs/poco/Net/include/Poco/Net/DNS.h +++ b/contrib/libs/poco/Net/include/Poco/Net/DNS.h @@ -1,203 +1,203 @@ -// -// DNS.h -// -// Library: Net -// Package: NetCore -// Module: DNS -// -// Definition of the DNS class. -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Net_DNS_INCLUDED -#define Net_DNS_INCLUDED - - -#include "Poco/Net/Net.h" -#include "Poco/Net/SocketDefs.h" -#include "Poco/Net/IPAddress.h" -#include "Poco/Net/HostEntry.h" - -#include "Poco/Timespan.h" - - -namespace Poco { -namespace Net { - - -class Net_API DNS - /// This class provides an interface to the - /// domain name service. - /// - /// Starting with POCO C++ Libraries release 1.9.0, - /// this class also supports Internationalized Domain Names (IDNs). - /// - /// Regarding IDNs, the following rules apply: - /// - /// * An IDN passed to hostByName() must be encoded manually, by calling - /// encodeIDN() (after testing with isIDN() first). - /// * An UTF-8 IDN passed to resolve() or resolveOne() is automatically encoded. - /// * IDNs returned in HostEntry objects are never decoded. They can be - /// decoded by calling decodeIDN() (after testing for an encoded IDN by - /// calling isEncodedIDN()). -{ -public: - enum HintFlag - { - DNS_HINT_NONE = 0, -#ifdef POCO_HAVE_ADDRINFO - DNS_HINT_AI_PASSIVE = AI_PASSIVE, /// Socket address will be used in bind() call - DNS_HINT_AI_CANONNAME = AI_CANONNAME, /// Return canonical name in first ai_canonname - DNS_HINT_AI_NUMERICHOST = AI_NUMERICHOST, /// Nodename must be a numeric address string - DNS_HINT_AI_NUMERICSERV = AI_NUMERICSERV, /// Servicename must be a numeric port number - DNS_HINT_AI_ALL = AI_ALL, /// Query both IP6 and IP4 with AI_V4MAPPED - DNS_HINT_AI_ADDRCONFIG = AI_ADDRCONFIG, /// Resolution only if global address configured - DNS_HINT_AI_V4MAPPED = AI_V4MAPPED /// On v6 failure, query v4 and convert to V4MAPPED format -#endif - }; - - static const Poco::Timespan DEFAULT_DNS_TIMEOUT; - - static HostEntry hostByName(const std::string& hostname, const Poco::Timespan * timeout_ = &DEFAULT_DNS_TIMEOUT, unsigned hintFlags = -#ifdef POCO_HAVE_ADDRINFO - DNS_HINT_AI_CANONNAME | DNS_HINT_AI_ADDRCONFIG -#else - DNS_HINT_NONE -#endif - ); - /// Returns a HostEntry object containing the DNS information - /// for the host with the given name. HintFlag argument is only - /// used on platforms that have getaddrinfo(). - /// - /// Note that Internationalized Domain Names must be encoded - /// using Punycode (see encodeIDN()) before calling this method. - /// - /// Throws a HostNotFoundException if a host with the given - /// name cannot be found. - /// - /// Throws a NoAddressFoundException if no address can be - /// found for the hostname. - /// - /// Throws a DNSException in case of a general DNS error. - /// - /// Throws an IOException in case of any other error. - - static HostEntry hostByAddress(const IPAddress& address, const Poco::Timespan * timeout_ = &DEFAULT_DNS_TIMEOUT, unsigned hintFlags = -#ifdef POCO_HAVE_ADDRINFO - DNS_HINT_AI_CANONNAME | DNS_HINT_AI_ADDRCONFIG -#else - DNS_HINT_NONE -#endif - ); - /// Returns a HostEntry object containing the DNS information - /// for the host with the given IP address. HintFlag argument is only - /// used on platforms that have getaddrinfo(). - /// - /// Throws a HostNotFoundException if a host with the given - /// name cannot be found. - /// - /// Throws a DNSException in case of a general DNS error. - /// - /// Throws an IOException in case of any other error. - - static HostEntry resolve(const std::string& address); - /// Returns a HostEntry object containing the DNS information - /// for the host with the given IP address or host name. - /// - /// If address contains a UTF-8 encoded IDN (internationalized - /// domain name), the domain name will be encoded first using - /// Punycode. - /// - /// Throws a HostNotFoundException if a host with the given - /// name cannot be found. - /// - /// Throws a NoAddressFoundException if no address can be - /// found for the hostname. - /// - /// Throws a DNSException in case of a general DNS error. - /// - /// Throws an IOException in case of any other error. - - static IPAddress resolveOne(const std::string& address); - /// Convenience method that calls resolve(address) and returns - /// the first address from the HostInfo. - - static HostEntry thisHost(); - /// Returns a HostEntry object containing the DNS information - /// for this host. - /// - /// Throws a HostNotFoundException if DNS information - /// for this host cannot be found. - /// - /// Throws a NoAddressFoundException if no address can be - /// found for this host. - /// - /// Throws a DNSException in case of a general DNS error. - /// - /// Throws an IOException in case of any other error. - - static void reload(); - /// Reloads the resolver configuration. - /// - /// This method will call res_init() if the Net library - /// has been compiled with -DPOCO_HAVE_LIBRESOLV. Otherwise - /// it will do nothing. - - static std::string hostName(); - /// Returns the host name of this host. - - static bool isIDN(const std::string& hostname); - /// Returns true if the given hostname is an internationalized - /// domain name (IDN) containing non-ASCII characters, otherwise false. - /// - /// The IDN must be UTF-8 encoded. - - static bool isEncodedIDN(const std::string& hostname); - /// Returns true if the given hostname is an Punycode-encoded - /// internationalized domain name (IDN), otherwise false. - /// - /// An encoded IDN starts with the character sequence "xn--". - - static std::string encodeIDN(const std::string& idn); - /// Encodes the given IDN (internationalized domain name), which must - /// be in UTF-8 encoding. - /// - /// The resulting string will be encoded according to Punycode. - - static std::string decodeIDN(const std::string& encodedIDN); - /// Decodes the given Punycode-encoded IDN (internationalized domain name). - /// - /// The resulting string will be UTF-8 encoded. - -protected: - static int lastError(); - /// Returns the code of the last error. - - static void error(int code, const std::string& arg); - /// Throws an exception according to the error code. - - static void aierror(int code, const std::string& arg); - /// Throws an exception according to the getaddrinfo() error code. - - static std::string encodeIDNLabel(const std::string& idn); - /// Encodes the given IDN (internationalized domain name) label, which must - /// be in UTF-8 encoding. - /// - /// The resulting string will be encoded according to Punycode. - - static std::string decodeIDNLabel(const std::string& encodedIDN); - /// Decodes the given Punycode-encoded IDN (internationalized domain name) label. - /// - /// The resulting string will be UTF-8 encoded. -}; - - -} } // namespace Poco::Net - - -#endif // Net_DNS_INCLUDED +// +// DNS.h +// +// Library: Net +// Package: NetCore +// Module: DNS +// +// Definition of the DNS class. +// +// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. +// and Contributors. +// +// SPDX-License-Identifier: BSL-1.0 +// + + +#ifndef Net_DNS_INCLUDED +#define Net_DNS_INCLUDED + + +#include "Poco/Net/Net.h" +#include "Poco/Net/SocketDefs.h" +#include "Poco/Net/IPAddress.h" +#include "Poco/Net/HostEntry.h" + +#include "Poco/Timespan.h" + + +namespace Poco { +namespace Net { + + +class Net_API DNS + /// This class provides an interface to the + /// domain name service. + /// + /// Starting with POCO C++ Libraries release 1.9.0, + /// this class also supports Internationalized Domain Names (IDNs). + /// + /// Regarding IDNs, the following rules apply: + /// + /// * An IDN passed to hostByName() must be encoded manually, by calling + /// encodeIDN() (after testing with isIDN() first). + /// * An UTF-8 IDN passed to resolve() or resolveOne() is automatically encoded. + /// * IDNs returned in HostEntry objects are never decoded. They can be + /// decoded by calling decodeIDN() (after testing for an encoded IDN by + /// calling isEncodedIDN()). +{ +public: + enum HintFlag + { + DNS_HINT_NONE = 0, +#ifdef POCO_HAVE_ADDRINFO + DNS_HINT_AI_PASSIVE = AI_PASSIVE, /// Socket address will be used in bind() call + DNS_HINT_AI_CANONNAME = AI_CANONNAME, /// Return canonical name in first ai_canonname + DNS_HINT_AI_NUMERICHOST = AI_NUMERICHOST, /// Nodename must be a numeric address string + DNS_HINT_AI_NUMERICSERV = AI_NUMERICSERV, /// Servicename must be a numeric port number + DNS_HINT_AI_ALL = AI_ALL, /// Query both IP6 and IP4 with AI_V4MAPPED + DNS_HINT_AI_ADDRCONFIG = AI_ADDRCONFIG, /// Resolution only if global address configured + DNS_HINT_AI_V4MAPPED = AI_V4MAPPED /// On v6 failure, query v4 and convert to V4MAPPED format +#endif + }; + + static const Poco::Timespan DEFAULT_DNS_TIMEOUT; + + static HostEntry hostByName(const std::string& hostname, const Poco::Timespan * timeout_ = &DEFAULT_DNS_TIMEOUT, unsigned hintFlags = +#ifdef POCO_HAVE_ADDRINFO + DNS_HINT_AI_CANONNAME | DNS_HINT_AI_ADDRCONFIG +#else + DNS_HINT_NONE +#endif + ); + /// Returns a HostEntry object containing the DNS information + /// for the host with the given name. HintFlag argument is only + /// used on platforms that have getaddrinfo(). + /// + /// Note that Internationalized Domain Names must be encoded + /// using Punycode (see encodeIDN()) before calling this method. + /// + /// Throws a HostNotFoundException if a host with the given + /// name cannot be found. + /// + /// Throws a NoAddressFoundException if no address can be + /// found for the hostname. + /// + /// Throws a DNSException in case of a general DNS error. + /// + /// Throws an IOException in case of any other error. + + static HostEntry hostByAddress(const IPAddress& address, const Poco::Timespan * timeout_ = &DEFAULT_DNS_TIMEOUT, unsigned hintFlags = +#ifdef POCO_HAVE_ADDRINFO + DNS_HINT_AI_CANONNAME | DNS_HINT_AI_ADDRCONFIG +#else + DNS_HINT_NONE +#endif + ); + /// Returns a HostEntry object containing the DNS information + /// for the host with the given IP address. HintFlag argument is only + /// used on platforms that have getaddrinfo(). + /// + /// Throws a HostNotFoundException if a host with the given + /// name cannot be found. + /// + /// Throws a DNSException in case of a general DNS error. + /// + /// Throws an IOException in case of any other error. + + static HostEntry resolve(const std::string& address); + /// Returns a HostEntry object containing the DNS information + /// for the host with the given IP address or host name. + /// + /// If address contains a UTF-8 encoded IDN (internationalized + /// domain name), the domain name will be encoded first using + /// Punycode. + /// + /// Throws a HostNotFoundException if a host with the given + /// name cannot be found. + /// + /// Throws a NoAddressFoundException if no address can be + /// found for the hostname. + /// + /// Throws a DNSException in case of a general DNS error. + /// + /// Throws an IOException in case of any other error. + + static IPAddress resolveOne(const std::string& address); + /// Convenience method that calls resolve(address) and returns + /// the first address from the HostInfo. + + static HostEntry thisHost(); + /// Returns a HostEntry object containing the DNS information + /// for this host. + /// + /// Throws a HostNotFoundException if DNS information + /// for this host cannot be found. + /// + /// Throws a NoAddressFoundException if no address can be + /// found for this host. + /// + /// Throws a DNSException in case of a general DNS error. + /// + /// Throws an IOException in case of any other error. + + static void reload(); + /// Reloads the resolver configuration. + /// + /// This method will call res_init() if the Net library + /// has been compiled with -DPOCO_HAVE_LIBRESOLV. Otherwise + /// it will do nothing. + + static std::string hostName(); + /// Returns the host name of this host. + + static bool isIDN(const std::string& hostname); + /// Returns true if the given hostname is an internationalized + /// domain name (IDN) containing non-ASCII characters, otherwise false. + /// + /// The IDN must be UTF-8 encoded. + + static bool isEncodedIDN(const std::string& hostname); + /// Returns true if the given hostname is an Punycode-encoded + /// internationalized domain name (IDN), otherwise false. + /// + /// An encoded IDN starts with the character sequence "xn--". + + static std::string encodeIDN(const std::string& idn); + /// Encodes the given IDN (internationalized domain name), which must + /// be in UTF-8 encoding. + /// + /// The resulting string will be encoded according to Punycode. + + static std::string decodeIDN(const std::string& encodedIDN); + /// Decodes the given Punycode-encoded IDN (internationalized domain name). + /// + /// The resulting string will be UTF-8 encoded. + +protected: + static int lastError(); + /// Returns the code of the last error. + + static void error(int code, const std::string& arg); + /// Throws an exception according to the error code. + + static void aierror(int code, const std::string& arg); + /// Throws an exception according to the getaddrinfo() error code. + + static std::string encodeIDNLabel(const std::string& idn); + /// Encodes the given IDN (internationalized domain name) label, which must + /// be in UTF-8 encoding. + /// + /// The resulting string will be encoded according to Punycode. + + static std::string decodeIDNLabel(const std::string& encodedIDN); + /// Decodes the given Punycode-encoded IDN (internationalized domain name) label. + /// + /// The resulting string will be UTF-8 encoded. +}; + + +} } // namespace Poco::Net + + +#endif // Net_DNS_INCLUDED diff --git a/contrib/libs/poco/Net/include/Poco/Net/DatagramSocket.h b/contrib/libs/poco/Net/include/Poco/Net/DatagramSocket.h index 143381ddee..17d0253155 100644 --- a/contrib/libs/poco/Net/include/Poco/Net/DatagramSocket.h +++ b/contrib/libs/poco/Net/include/Poco/Net/DatagramSocket.h @@ -1,168 +1,168 @@ -// -// DatagramSocket.h -// -// Library: Net -// Package: Sockets -// Module: DatagramSocket -// -// Definition of the DatagramSocket class. -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Net_DatagramSocket_INCLUDED -#define Net_DatagramSocket_INCLUDED - - -#include "Poco/Net/Net.h" -#include "Poco/Net/Socket.h" - - -namespace Poco { -namespace Net { - - -class Net_API DatagramSocket: public Socket - /// This class provides an interface to an - /// UDP stream socket. -{ -public: - DatagramSocket(); - /// Creates an unconnected, unbound datagram socket. - /// - /// Before the datagram socket can be used, bind(), - /// bind6() or connect() must be called. - /// - /// Notice: The behavior of this constructor has changed - /// in release 2.0. Previously, the constructor created - /// an unbound IPv4 datagram socket. - - explicit DatagramSocket(SocketAddress::Family family); - /// Creates an unconnected datagram socket. - /// - /// The socket will be created for the - /// given address family. - - DatagramSocket(const SocketAddress& address, bool reuseAddress = false); - /// Creates a datagram socket and binds it - /// to the given address. - /// - /// Depending on the address family, the socket - /// will be either an IPv4 or an IPv6 socket. - - DatagramSocket(const Socket& socket); - /// Creates the DatagramSocket with the SocketImpl - /// from another socket. The SocketImpl must be - /// a DatagramSocketImpl, otherwise an InvalidArgumentException - /// will be thrown. - - ~DatagramSocket(); - /// Destroys the DatagramSocket. - - DatagramSocket& operator = (const Socket& socket); - /// Assignment operator. - /// - /// Releases the socket's SocketImpl and - /// attaches the SocketImpl from the other socket and - /// increments the reference count of the SocketImpl. - - void connect(const SocketAddress& address); - /// Restricts incoming and outgoing - /// packets to the specified address. - /// - /// Calls to connect() cannot come before calls to bind(). - - void bind(const SocketAddress& address, bool reuseAddress = false); - /// Bind a local address to the socket. - /// - /// This is usually only done when establishing a server - /// socket. - /// - /// If reuseAddress is true, sets the SO_REUSEADDR - /// socket option. - /// - /// Calls to connect cannot() come before calls to bind(). - - void bind(const SocketAddress& address, bool reuseAddress, bool reusePort); - /// Bind a local address to the socket. - /// - /// This is usually only done when establishing a server - /// socket. - /// - /// If reuseAddress is true, sets the SO_REUSEADDR - /// socket option. - /// - /// If reusePort is true, sets the SO_REUSEPORT - /// socket option. - /// - /// Calls to connect cannot() come before calls to bind(). - - int sendBytes(const void* buffer, int length, int flags = 0); - /// Sends the contents of the given buffer through - /// the socket. - /// - /// Returns the number of bytes sent, which may be - /// less than the number of bytes specified. - - int receiveBytes(void* buffer, int length, int flags = 0); - /// Receives data from the socket and stores it - /// in buffer. Up to length bytes are received. - /// - /// Returns the number of bytes received. - - int sendTo(const void* buffer, int length, const SocketAddress& address, int flags = 0); - /// Sends the contents of the given buffer through - /// the socket to the given address. - /// - /// Returns the number of bytes sent, which may be - /// less than the number of bytes specified. - - int receiveFrom(void* buffer, int length, SocketAddress& address, int flags = 0); - /// Receives data from the socket and stores it - /// in buffer. Up to length bytes are received. - /// Stores the address of the sender in address. - /// - /// Returns the number of bytes received. - - void setBroadcast(bool flag); - /// Sets the value of the SO_BROADCAST socket option. - /// - /// Setting this flag allows sending datagrams to - /// the broadcast address. - - bool getBroadcast() const; - /// Returns the value of the SO_BROADCAST socket option. - -protected: - DatagramSocket(SocketImpl* pImpl); - /// Creates the Socket and attaches the given SocketImpl. - /// The socket takes ownership of the SocketImpl. - /// - /// The SocketImpl must be a StreamSocketImpl, otherwise - /// an InvalidArgumentException will be thrown. -}; - - -// -// inlines -// -inline void DatagramSocket::setBroadcast(bool flag) -{ - impl()->setBroadcast(flag); -} - - -inline bool DatagramSocket::getBroadcast() const -{ - return impl()->getBroadcast(); -} - - -} } // namespace Poco::Net - - -#endif // Net_DatagramSocket_INCLUDED +// +// DatagramSocket.h +// +// Library: Net +// Package: Sockets +// Module: DatagramSocket +// +// Definition of the DatagramSocket class. +// +// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. +// and Contributors. +// +// SPDX-License-Identifier: BSL-1.0 +// + + +#ifndef Net_DatagramSocket_INCLUDED +#define Net_DatagramSocket_INCLUDED + + +#include "Poco/Net/Net.h" +#include "Poco/Net/Socket.h" + + +namespace Poco { +namespace Net { + + +class Net_API DatagramSocket: public Socket + /// This class provides an interface to an + /// UDP stream socket. +{ +public: + DatagramSocket(); + /// Creates an unconnected, unbound datagram socket. + /// + /// Before the datagram socket can be used, bind(), + /// bind6() or connect() must be called. + /// + /// Notice: The behavior of this constructor has changed + /// in release 2.0. Previously, the constructor created + /// an unbound IPv4 datagram socket. + + explicit DatagramSocket(SocketAddress::Family family); + /// Creates an unconnected datagram socket. + /// + /// The socket will be created for the + /// given address family. + + DatagramSocket(const SocketAddress& address, bool reuseAddress = false); + /// Creates a datagram socket and binds it + /// to the given address. + /// + /// Depending on the address family, the socket + /// will be either an IPv4 or an IPv6 socket. + + DatagramSocket(const Socket& socket); + /// Creates the DatagramSocket with the SocketImpl + /// from another socket. The SocketImpl must be + /// a DatagramSocketImpl, otherwise an InvalidArgumentException + /// will be thrown. + + ~DatagramSocket(); + /// Destroys the DatagramSocket. + + DatagramSocket& operator = (const Socket& socket); + /// Assignment operator. + /// + /// Releases the socket's SocketImpl and + /// attaches the SocketImpl from the other socket and + /// increments the reference count of the SocketImpl. + + void connect(const SocketAddress& address); + /// Restricts incoming and outgoing + /// packets to the specified address. + /// + /// Calls to connect() cannot come before calls to bind(). + + void bind(const SocketAddress& address, bool reuseAddress = false); + /// Bind a local address to the socket. + /// + /// This is usually only done when establishing a server + /// socket. + /// + /// If reuseAddress is true, sets the SO_REUSEADDR + /// socket option. + /// + /// Calls to connect cannot() come before calls to bind(). + + void bind(const SocketAddress& address, bool reuseAddress, bool reusePort); + /// Bind a local address to the socket. + /// + /// This is usually only done when establishing a server + /// socket. + /// + /// If reuseAddress is true, sets the SO_REUSEADDR + /// socket option. + /// + /// If reusePort is true, sets the SO_REUSEPORT + /// socket option. + /// + /// Calls to connect cannot() come before calls to bind(). + + int sendBytes(const void* buffer, int length, int flags = 0); + /// Sends the contents of the given buffer through + /// the socket. + /// + /// Returns the number of bytes sent, which may be + /// less than the number of bytes specified. + + int receiveBytes(void* buffer, int length, int flags = 0); + /// Receives data from the socket and stores it + /// in buffer. Up to length bytes are received. + /// + /// Returns the number of bytes received. + + int sendTo(const void* buffer, int length, const SocketAddress& address, int flags = 0); + /// Sends the contents of the given buffer through + /// the socket to the given address. + /// + /// Returns the number of bytes sent, which may be + /// less than the number of bytes specified. + + int receiveFrom(void* buffer, int length, SocketAddress& address, int flags = 0); + /// Receives data from the socket and stores it + /// in buffer. Up to length bytes are received. + /// Stores the address of the sender in address. + /// + /// Returns the number of bytes received. + + void setBroadcast(bool flag); + /// Sets the value of the SO_BROADCAST socket option. + /// + /// Setting this flag allows sending datagrams to + /// the broadcast address. + + bool getBroadcast() const; + /// Returns the value of the SO_BROADCAST socket option. + +protected: + DatagramSocket(SocketImpl* pImpl); + /// Creates the Socket and attaches the given SocketImpl. + /// The socket takes ownership of the SocketImpl. + /// + /// The SocketImpl must be a StreamSocketImpl, otherwise + /// an InvalidArgumentException will be thrown. +}; + + +// +// inlines +// +inline void DatagramSocket::setBroadcast(bool flag) +{ + impl()->setBroadcast(flag); +} + + +inline bool DatagramSocket::getBroadcast() const +{ + return impl()->getBroadcast(); +} + + +} } // namespace Poco::Net + + +#endif // Net_DatagramSocket_INCLUDED diff --git a/contrib/libs/poco/Net/include/Poco/Net/DatagramSocketImpl.h b/contrib/libs/poco/Net/include/Poco/Net/DatagramSocketImpl.h index 6bf7bc8fd8..f9d280aa1b 100644 --- a/contrib/libs/poco/Net/include/Poco/Net/DatagramSocketImpl.h +++ b/contrib/libs/poco/Net/include/Poco/Net/DatagramSocketImpl.h @@ -1,55 +1,55 @@ -// -// DatagramSocketImpl.h -// -// Library: Net -// Package: Sockets -// Module: DatagramSocketImpl -// -// Definition of the DatagramSocketImpl class. -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Net_DatagramSocketImpl_INCLUDED -#define Net_DatagramSocketImpl_INCLUDED - - -#include "Poco/Net/Net.h" -#include "Poco/Net/SocketImpl.h" - - -namespace Poco { -namespace Net { - - -class Net_API DatagramSocketImpl: public SocketImpl - /// This class implements an UDP socket. -{ -public: - DatagramSocketImpl(); - /// Creates an unconnected, unbound datagram socket. - - explicit DatagramSocketImpl(SocketAddress::Family family); - /// Creates an unconnected datagram socket. - /// - /// The socket will be created for the - /// given address family. - - DatagramSocketImpl(poco_socket_t sockfd); - /// Creates a StreamSocketImpl using the given native socket. - -protected: - void init(int af); - - ~DatagramSocketImpl(); -}; - - -} } // namespace Poco::Net - - -#endif // Net_DatagramSocketImpl_INCLUDED +// +// DatagramSocketImpl.h +// +// Library: Net +// Package: Sockets +// Module: DatagramSocketImpl +// +// Definition of the DatagramSocketImpl class. +// +// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. +// and Contributors. +// +// SPDX-License-Identifier: BSL-1.0 +// + + +#ifndef Net_DatagramSocketImpl_INCLUDED +#define Net_DatagramSocketImpl_INCLUDED + + +#include "Poco/Net/Net.h" +#include "Poco/Net/SocketImpl.h" + + +namespace Poco { +namespace Net { + + +class Net_API DatagramSocketImpl: public SocketImpl + /// This class implements an UDP socket. +{ +public: + DatagramSocketImpl(); + /// Creates an unconnected, unbound datagram socket. + + explicit DatagramSocketImpl(SocketAddress::Family family); + /// Creates an unconnected datagram socket. + /// + /// The socket will be created for the + /// given address family. + + DatagramSocketImpl(poco_socket_t sockfd); + /// Creates a StreamSocketImpl using the given native socket. + +protected: + void init(int af); + + ~DatagramSocketImpl(); +}; + + +} } // namespace Poco::Net + + +#endif // Net_DatagramSocketImpl_INCLUDED diff --git a/contrib/libs/poco/Net/include/Poco/Net/DialogSocket.h b/contrib/libs/poco/Net/include/Poco/Net/DialogSocket.h index 93fa8c36db..ca47b73ba6 100644 --- a/contrib/libs/poco/Net/include/Poco/Net/DialogSocket.h +++ b/contrib/libs/poco/Net/include/Poco/Net/DialogSocket.h @@ -1,211 +1,211 @@ -// -// DialogSocket.h -// -// Library: Net -// Package: Sockets -// Module: DialogSocket -// -// Definition of the DialogSocket class. -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Net_DialogSocket_INCLUDED -#define Net_DialogSocket_INCLUDED - - -#include "Poco/Net/Net.h" -#include "Poco/Net/StreamSocket.h" -#include <cstdlib> - - -namespace Poco { -namespace Net { - - -class Net_API DialogSocket: public StreamSocket - /// DialogSocket is a subclass of StreamSocket that - /// can be used for implementing request-response - /// based client server connections. - /// - /// A request is always a single-line command terminated - /// by CR-LF. - /// - /// A response can either be a single line of text terminated - /// by CR-LF, or multiple lines of text in the format used - /// by the FTP and SMTP protocols. - /// - /// Limited support for the TELNET protocol (RFC 854) is - /// available. - /// - /// Warning: Do not call receiveBytes() on a DialogSocket. - /// Due to internal buffering in DialogSocket, receiveBytes() - /// may return an unexpected result and interfere with - /// DialogSocket's buffering. Use receiveRawBytes() instead. -{ -public: - DialogSocket(); - /// Creates an unconnected stream socket. +// +// DialogSocket.h +// +// Library: Net +// Package: Sockets +// Module: DialogSocket +// +// Definition of the DialogSocket class. +// +// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. +// and Contributors. +// +// SPDX-License-Identifier: BSL-1.0 +// + + +#ifndef Net_DialogSocket_INCLUDED +#define Net_DialogSocket_INCLUDED + + +#include "Poco/Net/Net.h" +#include "Poco/Net/StreamSocket.h" +#include <cstdlib> + + +namespace Poco { +namespace Net { + + +class Net_API DialogSocket: public StreamSocket + /// DialogSocket is a subclass of StreamSocket that + /// can be used for implementing request-response + /// based client server connections. + /// + /// A request is always a single-line command terminated + /// by CR-LF. + /// + /// A response can either be a single line of text terminated + /// by CR-LF, or multiple lines of text in the format used + /// by the FTP and SMTP protocols. + /// + /// Limited support for the TELNET protocol (RFC 854) is + /// available. + /// + /// Warning: Do not call receiveBytes() on a DialogSocket. + /// Due to internal buffering in DialogSocket, receiveBytes() + /// may return an unexpected result and interfere with + /// DialogSocket's buffering. Use receiveRawBytes() instead. +{ +public: + DialogSocket(); + /// Creates an unconnected stream socket. + /// + /// Before sending or receiving data, the socket + /// must be connected with a call to connect(). + + explicit DialogSocket(const SocketAddress& address); + /// Creates a stream socket and connects it to + /// the socket specified by address. + + DialogSocket(const Socket& socket); + /// Creates the DialogSocket with the SocketImpl + /// from another socket. The SocketImpl must be + /// a StreamSocketImpl, otherwise an InvalidArgumentException + /// will be thrown. + + DialogSocket(const DialogSocket& socket); + /// Creates the DialogSocket as copy of another dialog socket. + + ~DialogSocket(); + /// Destroys the DialogSocket. + + DialogSocket& operator = (const Socket& socket); + /// Assignment operator. + /// + /// Releases the socket's SocketImpl and + /// attaches the SocketImpl from the other socket and + /// increments the reference count of the SocketImpl. + + DialogSocket& operator = (const DialogSocket& socket); + /// Assignment operator. + + void sendByte(unsigned char ch); + /// Sends a single byte over the socket connection. + + void sendString(const char* str); + /// Sends the given null-terminated string over + /// the socket connection. + + void sendString(const std::string& str); + /// Sends the given string over the socket connection. + + void sendMessage(const std::string& message); + /// Appends a CR-LF sequence to the message and sends it + /// over the socket connection. + + void sendMessage(const std::string& message, const std::string& arg); + /// Concatenates message and arg, separated by a space, appends a + /// CR-LF sequence, and sends the result over the socket connection. + + void sendMessage(const std::string& message, const std::string& arg1, const std::string& arg2); + /// Concatenates message and args, separated by a space, appends a + /// CR-LF sequence, and sends the result over the socket connection. + + bool receiveMessage(std::string& message); + /// Receives a single-line message, terminated by CR-LF, + /// from the socket connection and appends it to response. /// - /// Before sending or receiving data, the socket - /// must be connected with a call to connect(). - - explicit DialogSocket(const SocketAddress& address); - /// Creates a stream socket and connects it to - /// the socket specified by address. - - DialogSocket(const Socket& socket); - /// Creates the DialogSocket with the SocketImpl - /// from another socket. The SocketImpl must be - /// a StreamSocketImpl, otherwise an InvalidArgumentException - /// will be thrown. - - DialogSocket(const DialogSocket& socket); - /// Creates the DialogSocket as copy of another dialog socket. - - ~DialogSocket(); - /// Destroys the DialogSocket. - - DialogSocket& operator = (const Socket& socket); - /// Assignment operator. - /// - /// Releases the socket's SocketImpl and - /// attaches the SocketImpl from the other socket and - /// increments the reference count of the SocketImpl. - - DialogSocket& operator = (const DialogSocket& socket); - /// Assignment operator. - - void sendByte(unsigned char ch); - /// Sends a single byte over the socket connection. - - void sendString(const char* str); - /// Sends the given null-terminated string over - /// the socket connection. - - void sendString(const std::string& str); - /// Sends the given string over the socket connection. - - void sendMessage(const std::string& message); - /// Appends a CR-LF sequence to the message and sends it - /// over the socket connection. - - void sendMessage(const std::string& message, const std::string& arg); - /// Concatenates message and arg, separated by a space, appends a - /// CR-LF sequence, and sends the result over the socket connection. - - void sendMessage(const std::string& message, const std::string& arg1, const std::string& arg2); - /// Concatenates message and args, separated by a space, appends a - /// CR-LF sequence, and sends the result over the socket connection. - - bool receiveMessage(std::string& message); - /// Receives a single-line message, terminated by CR-LF, - /// from the socket connection and appends it to response. - /// - /// Returns true if a message has been read or false if - /// the connection has been closed by the peer. - - int receiveStatusMessage(std::string& message); - /// Receives a single-line or multi-line response from - /// the socket connection. The format must be according to - /// one of the response formats specified in the FTP (RFC 959) - /// or SMTP (RFC 2821) specifications. - /// - /// The first line starts with a 3-digit status code. - /// Following the status code is either a space character (' ' ) - /// (in case of a single-line response) or a minus character ('-') - /// in case of a multi-line response. The following lines can have - /// a three-digit status code followed by a minus-sign and some - /// text, or some arbitrary text only. The last line again begins - /// with a three-digit status code (which must be the same as the - /// one in the first line), followed by a space and some arbitrary - /// text. All lines must be terminated by a CR-LF sequence. - /// - /// The response contains all response lines, separated by a newline - /// character, including the status code. The status code is returned. - /// If the response line does not contain a status code, 0 is returned. - - int get(); - /// Reads one character from the connection. - /// - /// Returns -1 (EOF_CHAR) if no more characters are available. - - int peek(); - /// Returns the character that would be returned by the next call - /// to get(), without actually extracting the character from the - /// buffer. - /// - /// Returns -1 (EOF_CHAR) if no more characters are available. - - int receiveRawBytes(void* buffer, int length); - /// Read up to length bytes from the connection and place - /// them into buffer. If there are data bytes in the internal - /// buffer, these bytes are returned first. - /// - /// Use this member function instead of receiveBytes(). - /// - /// Returns the number of bytes read, which may be - /// less than requested. - - void synch(); - /// Sends a TELNET SYNCH signal over the connection. - /// - /// According to RFC 854, a TELNET_DM char is sent - /// via sendUrgent(). - - void sendTelnetCommand(unsigned char command); - /// Sends a TELNET command sequence (TELNET_IAC followed - /// by the given command) over the connection. - - void sendTelnetCommand(unsigned char command, unsigned char arg); - /// Sends a TELNET command sequence (TELNET_IAC followed - /// by the given command, followed by arg) over the connection. - - enum TelnetCodes - { - TELNET_SE = 240, - TELNET_NOP = 241, - TELNET_DM = 242, - TELNET_BRK = 243, - TELNET_IP = 244, - TELNET_AO = 245, - TELNET_AYT = 246, - TELNET_EC = 247, - TELNET_EL = 248, - TELNET_GA = 249, - TELNET_SB = 250, - TELNET_WILL = 251, - TELNET_WONT = 252, - TELNET_DO = 253, - TELNET_DONT = 254, - TELNET_IAC = 255 - }; - -protected: - void allocBuffer(); - void refill(); - bool receiveLine(std::string& line, std::size_t lineLengthLimit = 0); - int receiveStatusLine(std::string& line, std::size_t lineLengthLimit = 0); - -private: - enum - { - RECEIVE_BUFFER_SIZE = 1024, - MAX_LINE_LENGTH = 4096, - EOF_CHAR = -1 - }; - - char* _pBuffer; - char* _pNext; - char* _pEnd; -}; - - -} } // namespace Poco::Net - - -#endif // Net_DialogSocket_INCLUDED + /// Returns true if a message has been read or false if + /// the connection has been closed by the peer. + + int receiveStatusMessage(std::string& message); + /// Receives a single-line or multi-line response from + /// the socket connection. The format must be according to + /// one of the response formats specified in the FTP (RFC 959) + /// or SMTP (RFC 2821) specifications. + /// + /// The first line starts with a 3-digit status code. + /// Following the status code is either a space character (' ' ) + /// (in case of a single-line response) or a minus character ('-') + /// in case of a multi-line response. The following lines can have + /// a three-digit status code followed by a minus-sign and some + /// text, or some arbitrary text only. The last line again begins + /// with a three-digit status code (which must be the same as the + /// one in the first line), followed by a space and some arbitrary + /// text. All lines must be terminated by a CR-LF sequence. + /// + /// The response contains all response lines, separated by a newline + /// character, including the status code. The status code is returned. + /// If the response line does not contain a status code, 0 is returned. + + int get(); + /// Reads one character from the connection. + /// + /// Returns -1 (EOF_CHAR) if no more characters are available. + + int peek(); + /// Returns the character that would be returned by the next call + /// to get(), without actually extracting the character from the + /// buffer. + /// + /// Returns -1 (EOF_CHAR) if no more characters are available. + + int receiveRawBytes(void* buffer, int length); + /// Read up to length bytes from the connection and place + /// them into buffer. If there are data bytes in the internal + /// buffer, these bytes are returned first. + /// + /// Use this member function instead of receiveBytes(). + /// + /// Returns the number of bytes read, which may be + /// less than requested. + + void synch(); + /// Sends a TELNET SYNCH signal over the connection. + /// + /// According to RFC 854, a TELNET_DM char is sent + /// via sendUrgent(). + + void sendTelnetCommand(unsigned char command); + /// Sends a TELNET command sequence (TELNET_IAC followed + /// by the given command) over the connection. + + void sendTelnetCommand(unsigned char command, unsigned char arg); + /// Sends a TELNET command sequence (TELNET_IAC followed + /// by the given command, followed by arg) over the connection. + + enum TelnetCodes + { + TELNET_SE = 240, + TELNET_NOP = 241, + TELNET_DM = 242, + TELNET_BRK = 243, + TELNET_IP = 244, + TELNET_AO = 245, + TELNET_AYT = 246, + TELNET_EC = 247, + TELNET_EL = 248, + TELNET_GA = 249, + TELNET_SB = 250, + TELNET_WILL = 251, + TELNET_WONT = 252, + TELNET_DO = 253, + TELNET_DONT = 254, + TELNET_IAC = 255 + }; + +protected: + void allocBuffer(); + void refill(); + bool receiveLine(std::string& line, std::size_t lineLengthLimit = 0); + int receiveStatusLine(std::string& line, std::size_t lineLengthLimit = 0); + +private: + enum + { + RECEIVE_BUFFER_SIZE = 1024, + MAX_LINE_LENGTH = 4096, + EOF_CHAR = -1 + }; + + char* _pBuffer; + char* _pNext; + char* _pEnd; +}; + + +} } // namespace Poco::Net + + +#endif // Net_DialogSocket_INCLUDED diff --git a/contrib/libs/poco/Net/include/Poco/Net/FTPClientSession.h b/contrib/libs/poco/Net/include/Poco/Net/FTPClientSession.h index ca69ef234f..1750cfc028 100644 --- a/contrib/libs/poco/Net/include/Poco/Net/FTPClientSession.h +++ b/contrib/libs/poco/Net/include/Poco/Net/FTPClientSession.h @@ -1,403 +1,403 @@ -// -// FTPClientSession.h -// -// Library: Net -// Package: FTP -// Module: FTPClientSession -// -// Definition of the FTPClientSession class. -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Net_FTPClientSession_INCLUDED -#define Net_FTPClientSession_INCLUDED - - -#include "Poco/Net/Net.h" -#include "Poco/Net/DialogSocket.h" -#include "Poco/Timespan.h" -#include <istream> -#include <ostream> - - -namespace Poco { -namespace Net { - - -class SocketStream; - - -class Net_API FTPClientSession - /// This class implements an File Transfer Protocol - /// (FTP, RFC 959) client. - /// - /// Most of the features of the FTP protocol, as specified - /// in RFC 959, are supported. Not supported are EBCDIC and - /// LOCAL data types and format control and structured files. - /// - /// Also supported are the EPRT and EPSV commands from - /// RFC 1738 (FTP Extensions for IPv6 and NAT). - /// The client will first attempt to use the EPRT and EPSV - /// commands. If the server does not supports these commands, - /// the client will fall back to PORT and PASV. -{ -public: - enum - { - FTP_PORT = 21 - }; - - enum FileType - { - TYPE_TEXT, // TYPE A (ASCII) - TYPE_BINARY // TYPE I (Image) - }; - - FTPClientSession(); - /// Creates an FTPClientSession. - /// - /// Passive mode will be used for data transfers. - - explicit FTPClientSession(const StreamSocket& socket); - /// Creates an FTPClientSession using the given - /// connected socket for the control connection. - /// - /// Passive mode will be used for data transfers. - - FTPClientSession(const std::string& host, - Poco::UInt16 port = FTP_PORT, - const std::string& username = "", - const std::string& password = ""); - /// Creates an FTPClientSession using a socket connected - /// to the given host and port. If username is supplied, - /// login is attempted. - /// - /// Passive mode will be used for data transfers. - - virtual ~FTPClientSession(); - /// Destroys the FTPClientSession. - - void setTimeout(const Poco::Timespan& timeout); - /// Sets the timeout for socket operations. - - Poco::Timespan getTimeout() const; - /// Returns the timeout for socket operations. - - void setPassive(bool flag, bool useRFC1738 = true); - /// Enables (default) or disables FTP passive mode for this session. - /// - /// If useRFC1738 is true (the default), the RFC 1738 - /// EPSV command is used (with a fallback to PASV if EPSV fails) - /// for switching to passive mode. The same applies to - /// EPRT and PORT for active connections. - - bool getPassive() const; - /// Returns true iff passive mode is enabled for this connection. - - void open(const std::string& host, - Poco::UInt16 port, - const std::string& username = "", - const std::string& password = ""); - /// Opens the FTP connection to the given host and port. - /// If username is supplied, login is attempted. - - void login(const std::string& username, const std::string& password); - /// Authenticates the user against the FTP server. Must be - /// called before any other commands (except QUIT) can be sent. - /// - /// Sends a USER command followed by a PASS command with the - /// respective arguments to the server. - /// - /// Throws a FTPException in case of a FTP-specific error, or a - /// NetException in case of a general network communication failure. - - void logout(); - - void close(); - /// Sends a QUIT command and closes the connection to the server. - /// - /// Throws a FTPException in case of a FTP-specific error, or a - /// NetException in case of a general network communication failure. - - std::string systemType(); - /// Returns the system type of the FTP server. - /// - /// Sends a SYST command to the server and returns the result. - - void setFileType(FileType type); - /// Sets the file type for transferring files. - /// - /// Sends a TYPE command with a corresponding argument to the - /// server. - /// - /// Throws a FTPException in case of a FTP-specific error, or a - /// NetException in case of a general network communication failure. - - FileType getFileType() const; - /// Returns the file type for transferring files. - - void setWorkingDirectory(const std::string& path); - /// Changes the current working directory on the server. - /// - /// Sends a CWD command with the given path as argument to the - /// server. - /// - /// Throws a FTPException in case of a FTP-specific error, or a - /// NetException in case of a general network communication failure. - - std::string getWorkingDirectory(); - /// Returns the current working directory on the server. - /// - /// Throws a FTPException in case of a FTP-specific error, or a - /// NetException in case of a general network communication failure. - - void cdup(); - /// Moves one directory up from the current working directory - /// on the server. - /// - /// Sends a CDUP command to the server. - /// - /// Throws a FTPException in case of a FTP-specific error, or a - /// NetException in case of a general network communication failure. - - void rename(const std::string& oldName, const std::string& newName); - /// Renames the file on the server given by oldName to newName. - /// - /// Sends a RNFR command, followed by a RNTO command to the server. - /// - /// Throws a FTPException in case of a FTP-specific error, or a - /// NetException in case of a general network communication failure. - - void remove(const std::string& path); - /// Deletes the file specified by path on the server. - /// - /// Sends a DELE command with path as argument to the server. - /// - /// Throws a FTPException in case of a FTP-specific error, or a - /// NetException in case of a general network communication failure. - - void createDirectory(const std::string& path); - /// Creates a new directory with the given path on the server. - /// - /// Sends a MKD command with path as argument to the server. - /// - /// Throws a FTPException in case of a FTP-specific error, or a - /// NetException in case of a general network communication failure. - - void removeDirectory(const std::string& path); - /// Removes the directory specified by path from the server. - /// - /// Sends a RMD command with path as argument to the server. - /// - /// Throws a FTPException in case of a FTP-specific error, or a - /// NetException in case of a general network communication failure. - - std::istream& beginDownload(const std::string& path); - /// Starts downloading the file with the given name. - /// After all data has been read from the returned stream, - /// endDownload() must be called to finish the download. - /// - /// A stream for reading the file's content is returned. - /// The stream is valid until endDownload() is called. - /// - /// Creates a data connection between the client and the - /// server. If passive mode is on, then the server waits for - /// a connection request from the client. Otherwise, the - /// client waits for a connection request from the server. - /// After establishing the data connection, a SocketStream - /// for transferring the data is created. - /// - /// If ASCII transfer mode is selected, the caller is - /// responsible for converting the received data to - /// the native text file format. - /// The InputLineEndingConverter class from the Foundation - /// library can be used for that purpose. - - void endDownload(); - /// Must be called to complete a download initiated with - /// beginDownload(). - - std::ostream& beginUpload(const std::string& path); - /// Starts uploading the file with the given name. - /// After all data has been written to the returned stream, - /// endUpload() must be called to finish the upload. - /// - /// A stream for reading the file's content is returned. - /// The stream is valid until endUpload() is called. - /// - /// Creates a data connection between the client and the - /// server. If passive mode is on, then the server waits for - /// a connection request from the client. Otherwise, the - /// client waits for a connection request from the server. - /// After establishing the data connection, a SocketStream - /// for transferring the data is created. - /// - /// If ASCII transfer mode is selected, the caller is - /// responsible for converting the data to be sent - /// into network (CR-LF line endings) format. - /// The OutputLineEndingConverter class from the Foundation - /// library can be used for that purpose. - - void endUpload(); - /// Must be called to complete an upload initiated with - /// beginUpload(). - - std::istream& beginList(const std::string& path = "", bool extended = false); - /// Starts downloading a directory listing. - /// After all data has been read from the returned stream, - /// endList() must be called to finish the download. - /// - /// A stream for reading the directory data is returned. - /// The stream is valid until endList() is called. - /// - /// Optionally, a path to a directory or file can be specified. - /// According to the FTP protocol, if a path to a filename is - /// given, only information for the specific file is returned. - /// If a path to a directory is given, a listing of that directory - /// is returned. If no path is given, a listing of the current - /// working directory is returned. - /// - /// If extended is false, only a filenames (one per line) are - /// returned. Otherwise, a full directory listing including - /// file attributes is returned. The format of this listing - /// depends on the FTP server. No attempt is made to interpret - /// this data. - /// - /// Creates a data connection between the client and the - /// server. If passive mode is on, then the server waits for - /// a connection request from the client. Otherwise, the - /// client waits for a connection request from the server. - /// After establishing the data connection, a SocketStream - /// for transferring the data is created. - - void endList(); - /// Must be called to complete a directory listing download - /// initiated with beginList(). - - void abort(); - /// Aborts the download or upload currently in progress. - /// - /// Sends a TELNET IP/SYNCH sequence, followed by an ABOR - /// command to the server. - /// - /// A separate call to endDownload() or endUpload() is - /// not necessary. - - int sendCommand(const std::string& command, std::string& response); - /// Sends the given command verbatim to the server - /// and waits for a response. - - int sendCommand(const std::string& command, const std::string& arg, std::string& response); - /// Sends the given command verbatim to the server - /// and waits for a response. - - bool isOpen() const; - /// Returns true if the connection with FTP server is opened. - - bool isLoggedIn() const; - /// Returns true if the session is logged in. - -protected: - enum StatusClass - { - FTP_POSITIVE_PRELIMINARY = 1, - FTP_POSITIVE_COMPLETION = 2, - FTP_POSITIVE_INTERMEDIATE = 3, - FTP_TRANSIENT_NEGATIVE = 4, - FTP_PERMANENT_NEGATIVE = 5 - }; - enum - { - DEFAULT_TIMEOUT = 30000000 // 30 seconds default timeout for socket operations - }; - - static bool isPositivePreliminary(int status); - static bool isPositiveCompletion(int status); - static bool isPositiveIntermediate(int status); - static bool isTransientNegative(int status); - static bool isPermanentNegative(int status); - std::string extractPath(const std::string& response); - StreamSocket establishDataConnection(const std::string& command, const std::string& arg); - StreamSocket activeDataConnection(const std::string& command, const std::string& arg); - StreamSocket passiveDataConnection(const std::string& command, const std::string& arg); - void sendPortCommand(const SocketAddress& addr); - SocketAddress sendPassiveCommand(); - bool sendEPRT(const SocketAddress& addr); - void sendPORT(const SocketAddress& addr); - bool sendEPSV(SocketAddress& addr); - void sendPASV(SocketAddress& addr); - void parseAddress(const std::string& str, SocketAddress& addr); - void parseExtAddress(const std::string& str, SocketAddress& addr); - void endTransfer(); - -private: - FTPClientSession(const FTPClientSession&); - FTPClientSession& operator = (const FTPClientSession&); - - std::string _host; - Poco::UInt16 _port; - DialogSocket* _pControlSocket; - SocketStream* _pDataStream; - bool _passiveMode; - FileType _fileType; - bool _supports1738; - bool _serverReady; - bool _isLoggedIn; - Poco::Timespan _timeout; -}; - - -// -// inlines -// -inline bool FTPClientSession::isPositivePreliminary(int status) -{ - return status/100 == FTP_POSITIVE_PRELIMINARY; -} - - -inline bool FTPClientSession::isPositiveCompletion(int status) -{ - return status/100 == FTP_POSITIVE_COMPLETION; -} - - -inline bool FTPClientSession::isPositiveIntermediate(int status) -{ - return status/100 == FTP_POSITIVE_INTERMEDIATE; -} - - -inline bool FTPClientSession::isTransientNegative(int status) -{ - return status/100 == FTP_TRANSIENT_NEGATIVE; -} - - -inline bool FTPClientSession::isPermanentNegative(int status) -{ - return status/100 == FTP_PERMANENT_NEGATIVE; -} - - -inline bool FTPClientSession::isOpen() const -{ - return _pControlSocket != 0; -} - - -inline bool FTPClientSession::isLoggedIn() const -{ - return _isLoggedIn; -} - - -} } // namespace Poco::Net - - -#endif // Net_FTPClientSession_INCLUDED +// +// FTPClientSession.h +// +// Library: Net +// Package: FTP +// Module: FTPClientSession +// +// Definition of the FTPClientSession class. +// +// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. +// and Contributors. +// +// SPDX-License-Identifier: BSL-1.0 +// + + +#ifndef Net_FTPClientSession_INCLUDED +#define Net_FTPClientSession_INCLUDED + + +#include "Poco/Net/Net.h" +#include "Poco/Net/DialogSocket.h" +#include "Poco/Timespan.h" +#include <istream> +#include <ostream> + + +namespace Poco { +namespace Net { + + +class SocketStream; + + +class Net_API FTPClientSession + /// This class implements an File Transfer Protocol + /// (FTP, RFC 959) client. + /// + /// Most of the features of the FTP protocol, as specified + /// in RFC 959, are supported. Not supported are EBCDIC and + /// LOCAL data types and format control and structured files. + /// + /// Also supported are the EPRT and EPSV commands from + /// RFC 1738 (FTP Extensions for IPv6 and NAT). + /// The client will first attempt to use the EPRT and EPSV + /// commands. If the server does not supports these commands, + /// the client will fall back to PORT and PASV. +{ +public: + enum + { + FTP_PORT = 21 + }; + + enum FileType + { + TYPE_TEXT, // TYPE A (ASCII) + TYPE_BINARY // TYPE I (Image) + }; + + FTPClientSession(); + /// Creates an FTPClientSession. + /// + /// Passive mode will be used for data transfers. + + explicit FTPClientSession(const StreamSocket& socket); + /// Creates an FTPClientSession using the given + /// connected socket for the control connection. + /// + /// Passive mode will be used for data transfers. + + FTPClientSession(const std::string& host, + Poco::UInt16 port = FTP_PORT, + const std::string& username = "", + const std::string& password = ""); + /// Creates an FTPClientSession using a socket connected + /// to the given host and port. If username is supplied, + /// login is attempted. + /// + /// Passive mode will be used for data transfers. + + virtual ~FTPClientSession(); + /// Destroys the FTPClientSession. + + void setTimeout(const Poco::Timespan& timeout); + /// Sets the timeout for socket operations. + + Poco::Timespan getTimeout() const; + /// Returns the timeout for socket operations. + + void setPassive(bool flag, bool useRFC1738 = true); + /// Enables (default) or disables FTP passive mode for this session. + /// + /// If useRFC1738 is true (the default), the RFC 1738 + /// EPSV command is used (with a fallback to PASV if EPSV fails) + /// for switching to passive mode. The same applies to + /// EPRT and PORT for active connections. + + bool getPassive() const; + /// Returns true iff passive mode is enabled for this connection. + + void open(const std::string& host, + Poco::UInt16 port, + const std::string& username = "", + const std::string& password = ""); + /// Opens the FTP connection to the given host and port. + /// If username is supplied, login is attempted. + + void login(const std::string& username, const std::string& password); + /// Authenticates the user against the FTP server. Must be + /// called before any other commands (except QUIT) can be sent. + /// + /// Sends a USER command followed by a PASS command with the + /// respective arguments to the server. + /// + /// Throws a FTPException in case of a FTP-specific error, or a + /// NetException in case of a general network communication failure. + + void logout(); + + void close(); + /// Sends a QUIT command and closes the connection to the server. + /// + /// Throws a FTPException in case of a FTP-specific error, or a + /// NetException in case of a general network communication failure. + + std::string systemType(); + /// Returns the system type of the FTP server. + /// + /// Sends a SYST command to the server and returns the result. + + void setFileType(FileType type); + /// Sets the file type for transferring files. + /// + /// Sends a TYPE command with a corresponding argument to the + /// server. + /// + /// Throws a FTPException in case of a FTP-specific error, or a + /// NetException in case of a general network communication failure. + + FileType getFileType() const; + /// Returns the file type for transferring files. + + void setWorkingDirectory(const std::string& path); + /// Changes the current working directory on the server. + /// + /// Sends a CWD command with the given path as argument to the + /// server. + /// + /// Throws a FTPException in case of a FTP-specific error, or a + /// NetException in case of a general network communication failure. + + std::string getWorkingDirectory(); + /// Returns the current working directory on the server. + /// + /// Throws a FTPException in case of a FTP-specific error, or a + /// NetException in case of a general network communication failure. + + void cdup(); + /// Moves one directory up from the current working directory + /// on the server. + /// + /// Sends a CDUP command to the server. + /// + /// Throws a FTPException in case of a FTP-specific error, or a + /// NetException in case of a general network communication failure. + + void rename(const std::string& oldName, const std::string& newName); + /// Renames the file on the server given by oldName to newName. + /// + /// Sends a RNFR command, followed by a RNTO command to the server. + /// + /// Throws a FTPException in case of a FTP-specific error, or a + /// NetException in case of a general network communication failure. + + void remove(const std::string& path); + /// Deletes the file specified by path on the server. + /// + /// Sends a DELE command with path as argument to the server. + /// + /// Throws a FTPException in case of a FTP-specific error, or a + /// NetException in case of a general network communication failure. + + void createDirectory(const std::string& path); + /// Creates a new directory with the given path on the server. + /// + /// Sends a MKD command with path as argument to the server. + /// + /// Throws a FTPException in case of a FTP-specific error, or a + /// NetException in case of a general network communication failure. + + void removeDirectory(const std::string& path); + /// Removes the directory specified by path from the server. + /// + /// Sends a RMD command with path as argument to the server. + /// + /// Throws a FTPException in case of a FTP-specific error, or a + /// NetException in case of a general network communication failure. + + std::istream& beginDownload(const std::string& path); + /// Starts downloading the file with the given name. + /// After all data has been read from the returned stream, + /// endDownload() must be called to finish the download. + /// + /// A stream for reading the file's content is returned. + /// The stream is valid until endDownload() is called. + /// + /// Creates a data connection between the client and the + /// server. If passive mode is on, then the server waits for + /// a connection request from the client. Otherwise, the + /// client waits for a connection request from the server. + /// After establishing the data connection, a SocketStream + /// for transferring the data is created. + /// + /// If ASCII transfer mode is selected, the caller is + /// responsible for converting the received data to + /// the native text file format. + /// The InputLineEndingConverter class from the Foundation + /// library can be used for that purpose. + + void endDownload(); + /// Must be called to complete a download initiated with + /// beginDownload(). + + std::ostream& beginUpload(const std::string& path); + /// Starts uploading the file with the given name. + /// After all data has been written to the returned stream, + /// endUpload() must be called to finish the upload. + /// + /// A stream for reading the file's content is returned. + /// The stream is valid until endUpload() is called. + /// + /// Creates a data connection between the client and the + /// server. If passive mode is on, then the server waits for + /// a connection request from the client. Otherwise, the + /// client waits for a connection request from the server. + /// After establishing the data connection, a SocketStream + /// for transferring the data is created. + /// + /// If ASCII transfer mode is selected, the caller is + /// responsible for converting the data to be sent + /// into network (CR-LF line endings) format. + /// The OutputLineEndingConverter class from the Foundation + /// library can be used for that purpose. + + void endUpload(); + /// Must be called to complete an upload initiated with + /// beginUpload(). + + std::istream& beginList(const std::string& path = "", bool extended = false); + /// Starts downloading a directory listing. + /// After all data has been read from the returned stream, + /// endList() must be called to finish the download. + /// + /// A stream for reading the directory data is returned. + /// The stream is valid until endList() is called. + /// + /// Optionally, a path to a directory or file can be specified. + /// According to the FTP protocol, if a path to a filename is + /// given, only information for the specific file is returned. + /// If a path to a directory is given, a listing of that directory + /// is returned. If no path is given, a listing of the current + /// working directory is returned. + /// + /// If extended is false, only a filenames (one per line) are + /// returned. Otherwise, a full directory listing including + /// file attributes is returned. The format of this listing + /// depends on the FTP server. No attempt is made to interpret + /// this data. + /// + /// Creates a data connection between the client and the + /// server. If passive mode is on, then the server waits for + /// a connection request from the client. Otherwise, the + /// client waits for a connection request from the server. + /// After establishing the data connection, a SocketStream + /// for transferring the data is created. + + void endList(); + /// Must be called to complete a directory listing download + /// initiated with beginList(). + + void abort(); + /// Aborts the download or upload currently in progress. + /// + /// Sends a TELNET IP/SYNCH sequence, followed by an ABOR + /// command to the server. + /// + /// A separate call to endDownload() or endUpload() is + /// not necessary. + + int sendCommand(const std::string& command, std::string& response); + /// Sends the given command verbatim to the server + /// and waits for a response. + + int sendCommand(const std::string& command, const std::string& arg, std::string& response); + /// Sends the given command verbatim to the server + /// and waits for a response. + + bool isOpen() const; + /// Returns true if the connection with FTP server is opened. + + bool isLoggedIn() const; + /// Returns true if the session is logged in. + +protected: + enum StatusClass + { + FTP_POSITIVE_PRELIMINARY = 1, + FTP_POSITIVE_COMPLETION = 2, + FTP_POSITIVE_INTERMEDIATE = 3, + FTP_TRANSIENT_NEGATIVE = 4, + FTP_PERMANENT_NEGATIVE = 5 + }; + enum + { + DEFAULT_TIMEOUT = 30000000 // 30 seconds default timeout for socket operations + }; + + static bool isPositivePreliminary(int status); + static bool isPositiveCompletion(int status); + static bool isPositiveIntermediate(int status); + static bool isTransientNegative(int status); + static bool isPermanentNegative(int status); + std::string extractPath(const std::string& response); + StreamSocket establishDataConnection(const std::string& command, const std::string& arg); + StreamSocket activeDataConnection(const std::string& command, const std::string& arg); + StreamSocket passiveDataConnection(const std::string& command, const std::string& arg); + void sendPortCommand(const SocketAddress& addr); + SocketAddress sendPassiveCommand(); + bool sendEPRT(const SocketAddress& addr); + void sendPORT(const SocketAddress& addr); + bool sendEPSV(SocketAddress& addr); + void sendPASV(SocketAddress& addr); + void parseAddress(const std::string& str, SocketAddress& addr); + void parseExtAddress(const std::string& str, SocketAddress& addr); + void endTransfer(); + +private: + FTPClientSession(const FTPClientSession&); + FTPClientSession& operator = (const FTPClientSession&); + + std::string _host; + Poco::UInt16 _port; + DialogSocket* _pControlSocket; + SocketStream* _pDataStream; + bool _passiveMode; + FileType _fileType; + bool _supports1738; + bool _serverReady; + bool _isLoggedIn; + Poco::Timespan _timeout; +}; + + +// +// inlines +// +inline bool FTPClientSession::isPositivePreliminary(int status) +{ + return status/100 == FTP_POSITIVE_PRELIMINARY; +} + + +inline bool FTPClientSession::isPositiveCompletion(int status) +{ + return status/100 == FTP_POSITIVE_COMPLETION; +} + + +inline bool FTPClientSession::isPositiveIntermediate(int status) +{ + return status/100 == FTP_POSITIVE_INTERMEDIATE; +} + + +inline bool FTPClientSession::isTransientNegative(int status) +{ + return status/100 == FTP_TRANSIENT_NEGATIVE; +} + + +inline bool FTPClientSession::isPermanentNegative(int status) +{ + return status/100 == FTP_PERMANENT_NEGATIVE; +} + + +inline bool FTPClientSession::isOpen() const +{ + return _pControlSocket != 0; +} + + +inline bool FTPClientSession::isLoggedIn() const +{ + return _isLoggedIn; +} + + +} } // namespace Poco::Net + + +#endif // Net_FTPClientSession_INCLUDED diff --git a/contrib/libs/poco/Net/include/Poco/Net/FTPStreamFactory.h b/contrib/libs/poco/Net/include/Poco/Net/FTPStreamFactory.h index f59fbe6bfd..4f33f19c19 100644 --- a/contrib/libs/poco/Net/include/Poco/Net/FTPStreamFactory.h +++ b/contrib/libs/poco/Net/include/Poco/Net/FTPStreamFactory.h @@ -1,120 +1,120 @@ -// -// FTPStreamFactory.h -// -// Library: Net -// Package: FTP -// Module: FTPStreamFactory -// -// Definition of the FTPStreamFactory class. -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Net_FTPStreamFactory_INCLUDED -#define Net_FTPStreamFactory_INCLUDED - - -#include "Poco/Net/Net.h" -#include "Poco/Net/HTTPSession.h" -#include "Poco/URIStreamFactory.h" - - -namespace Poco { -namespace Net { - - -class Net_API FTPPasswordProvider - /// The base class for all password providers. - /// An instance of a subclass of this class can be - /// registered with the FTPStreamFactory to - /// provide a password -{ -public: - virtual std::string password(const std::string& username, const std::string& host) = 0; - /// Provide the password for the given user on the given host. - -protected: - FTPPasswordProvider(); - virtual ~FTPPasswordProvider(); -}; - - -class Net_API FTPStreamFactory: public Poco::URIStreamFactory - /// An implementation of the URIStreamFactory interface - /// that handles File Transfer Protocol (ftp) URIs. - /// - /// The URI's path may end with an optional type specification - /// in the form (;type=<typecode>), where <typecode> is - /// one of a, i or d. If type=a, the file identified by the path - /// is transferred in ASCII (text) mode. If type=i, the file - /// is transferred in Image (binary) mode. If type=d, a directory - /// listing (in NLST format) is returned. This corresponds with - /// the FTP URL format specified in RFC 1738. - /// - /// If the URI does not contain a username and password, the - /// username "anonymous" and the password " -{ -public: - FTPStreamFactory(); - /// Creates the FTPStreamFactory. - - ~FTPStreamFactory(); - /// Destroys the FTPStreamFactory. - - std::istream* open(const Poco::URI& uri); - /// Creates and opens a HTTP stream for the given URI. - /// The URI must be a ftp://... URI. - /// - /// Throws a NetException if anything goes wrong. - - static void setAnonymousPassword(const std::string& password); - /// Sets the password used for anonymous FTP. - /// - /// WARNING: Setting the anonymous password is not - /// thread-safe, so it's best to call this method - /// during application initialization, before the - /// FTPStreamFactory is used for the first time. - - static const std::string& getAnonymousPassword(); - /// Returns the password used for anonymous FTP. - - static void setPasswordProvider(FTPPasswordProvider* pProvider); - /// Sets the FTPPasswordProvider. If NULL is given, - /// no password provider is used. - /// - /// WARNING: Setting the password provider is not - /// thread-safe, so it's best to call this method - /// during application initialization, before the - /// FTPStreamFactory is used for the first time. - - static FTPPasswordProvider* getPasswordProvider(); - /// Returns the FTPPasswordProvider currently in use, - /// or NULL if no one has been set. - - static void registerFactory(); - /// Registers the FTPStreamFactory with the - /// default URIStreamOpener instance. - - static void unregisterFactory(); - /// Unregisters the FTPStreamFactory with the - /// default URIStreamOpener instance. - -protected: - static void splitUserInfo(const std::string& userInfo, std::string& username, std::string& password); - static void getUserInfo(const Poco::URI& uri, std::string& username, std::string& password); - static void getPathAndType(const Poco::URI& uri, std::string& path, char& type); - -private: - static std::string _anonymousPassword; - static FTPPasswordProvider* _pPasswordProvider; -}; - - -} } // namespace Poco::Net - - -#endif // Net_FTPStreamFactory_INCLUDED +// +// FTPStreamFactory.h +// +// Library: Net +// Package: FTP +// Module: FTPStreamFactory +// +// Definition of the FTPStreamFactory class. +// +// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. +// and Contributors. +// +// SPDX-License-Identifier: BSL-1.0 +// + + +#ifndef Net_FTPStreamFactory_INCLUDED +#define Net_FTPStreamFactory_INCLUDED + + +#include "Poco/Net/Net.h" +#include "Poco/Net/HTTPSession.h" +#include "Poco/URIStreamFactory.h" + + +namespace Poco { +namespace Net { + + +class Net_API FTPPasswordProvider + /// The base class for all password providers. + /// An instance of a subclass of this class can be + /// registered with the FTPStreamFactory to + /// provide a password +{ +public: + virtual std::string password(const std::string& username, const std::string& host) = 0; + /// Provide the password for the given user on the given host. + +protected: + FTPPasswordProvider(); + virtual ~FTPPasswordProvider(); +}; + + +class Net_API FTPStreamFactory: public Poco::URIStreamFactory + /// An implementation of the URIStreamFactory interface + /// that handles File Transfer Protocol (ftp) URIs. + /// + /// The URI's path may end with an optional type specification + /// in the form (;type=<typecode>), where <typecode> is + /// one of a, i or d. If type=a, the file identified by the path + /// is transferred in ASCII (text) mode. If type=i, the file + /// is transferred in Image (binary) mode. If type=d, a directory + /// listing (in NLST format) is returned. This corresponds with + /// the FTP URL format specified in RFC 1738. + /// + /// If the URI does not contain a username and password, the + /// username "anonymous" and the password " +{ +public: + FTPStreamFactory(); + /// Creates the FTPStreamFactory. + + ~FTPStreamFactory(); + /// Destroys the FTPStreamFactory. + + std::istream* open(const Poco::URI& uri); + /// Creates and opens a HTTP stream for the given URI. + /// The URI must be a ftp://... URI. + /// + /// Throws a NetException if anything goes wrong. + + static void setAnonymousPassword(const std::string& password); + /// Sets the password used for anonymous FTP. + /// + /// WARNING: Setting the anonymous password is not + /// thread-safe, so it's best to call this method + /// during application initialization, before the + /// FTPStreamFactory is used for the first time. + + static const std::string& getAnonymousPassword(); + /// Returns the password used for anonymous FTP. + + static void setPasswordProvider(FTPPasswordProvider* pProvider); + /// Sets the FTPPasswordProvider. If NULL is given, + /// no password provider is used. + /// + /// WARNING: Setting the password provider is not + /// thread-safe, so it's best to call this method + /// during application initialization, before the + /// FTPStreamFactory is used for the first time. + + static FTPPasswordProvider* getPasswordProvider(); + /// Returns the FTPPasswordProvider currently in use, + /// or NULL if no one has been set. + + static void registerFactory(); + /// Registers the FTPStreamFactory with the + /// default URIStreamOpener instance. + + static void unregisterFactory(); + /// Unregisters the FTPStreamFactory with the + /// default URIStreamOpener instance. + +protected: + static void splitUserInfo(const std::string& userInfo, std::string& username, std::string& password); + static void getUserInfo(const Poco::URI& uri, std::string& username, std::string& password); + static void getPathAndType(const Poco::URI& uri, std::string& path, char& type); + +private: + static std::string _anonymousPassword; + static FTPPasswordProvider* _pPasswordProvider; +}; + + +} } // namespace Poco::Net + + +#endif // Net_FTPStreamFactory_INCLUDED diff --git a/contrib/libs/poco/Net/include/Poco/Net/FilePartSource.h b/contrib/libs/poco/Net/include/Poco/Net/FilePartSource.h index c99b8bbedb..056718541d 100644 --- a/contrib/libs/poco/Net/include/Poco/Net/FilePartSource.h +++ b/contrib/libs/poco/Net/include/Poco/Net/FilePartSource.h @@ -1,77 +1,77 @@ -// -// FilePartSource.h -// -// Library: Net -// Package: Messages -// Module: FilePartSource -// -// Definition of the FilePartSource class. -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Net_FilePartSource_INCLUDED -#define Net_FilePartSource_INCLUDED - - -#include "Poco/Net/Net.h" -#include "Poco/Net/PartSource.h" -#include "Poco/FileStream.h" - - -namespace Poco { -namespace Net { - - -class Net_API FilePartSource: public PartSource - /// An implementation of PartSource for - /// plain files. -{ -public: - FilePartSource(const std::string& path); - /// Creates the FilePartSource for the given path. - /// - /// The MIME type is set to application/octet-stream. - /// - /// Throws an OpenFileException if the file cannot be opened. - - FilePartSource(const std::string& path, const std::string& mediaType); - /// Creates the FilePartSource for the given - /// path and MIME type. - /// - /// Throws an OpenFileException if the file cannot be opened. - - FilePartSource(const std::string& path, const std::string& filename, const std::string& mediaType); - /// Creates the FilePartSource for the given - /// path and MIME type. The given filename is - /// used as part filename (see filename()) only. - /// - /// Throws an OpenFileException if the file cannot be opened. - - ~FilePartSource(); - /// Destroys the FilePartSource. - - std::istream& stream(); - /// Returns a file input stream for the given file. - - const std::string& filename() const; - /// Returns the filename portion of the path. - - std::streamsize getContentLength() const; - /// Returns the file size. - -private: - std::string _path; - std::string _filename; - Poco::FileInputStream _istr; -}; - - -} } // namespace Poco::Net - - -#endif // Net_FilePartSource_INCLUDED +// +// FilePartSource.h +// +// Library: Net +// Package: Messages +// Module: FilePartSource +// +// Definition of the FilePartSource class. +// +// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. +// and Contributors. +// +// SPDX-License-Identifier: BSL-1.0 +// + + +#ifndef Net_FilePartSource_INCLUDED +#define Net_FilePartSource_INCLUDED + + +#include "Poco/Net/Net.h" +#include "Poco/Net/PartSource.h" +#include "Poco/FileStream.h" + + +namespace Poco { +namespace Net { + + +class Net_API FilePartSource: public PartSource + /// An implementation of PartSource for + /// plain files. +{ +public: + FilePartSource(const std::string& path); + /// Creates the FilePartSource for the given path. + /// + /// The MIME type is set to application/octet-stream. + /// + /// Throws an OpenFileException if the file cannot be opened. + + FilePartSource(const std::string& path, const std::string& mediaType); + /// Creates the FilePartSource for the given + /// path and MIME type. + /// + /// Throws an OpenFileException if the file cannot be opened. + + FilePartSource(const std::string& path, const std::string& filename, const std::string& mediaType); + /// Creates the FilePartSource for the given + /// path and MIME type. The given filename is + /// used as part filename (see filename()) only. + /// + /// Throws an OpenFileException if the file cannot be opened. + + ~FilePartSource(); + /// Destroys the FilePartSource. + + std::istream& stream(); + /// Returns a file input stream for the given file. + + const std::string& filename() const; + /// Returns the filename portion of the path. + + std::streamsize getContentLength() const; + /// Returns the file size. + +private: + std::string _path; + std::string _filename; + Poco::FileInputStream _istr; +}; + + +} } // namespace Poco::Net + + +#endif // Net_FilePartSource_INCLUDED diff --git a/contrib/libs/poco/Net/include/Poco/Net/HTMLForm.h b/contrib/libs/poco/Net/include/Poco/Net/HTMLForm.h index 160c0d0d8e..a4649dd2c2 100644 --- a/contrib/libs/poco/Net/include/Poco/Net/HTMLForm.h +++ b/contrib/libs/poco/Net/include/Poco/Net/HTMLForm.h @@ -1,272 +1,272 @@ -// -// HTMLForm.h -// -// Library: Net -// Package: HTML -// Module: HTMLForm -// -// Definition of the HTMLForm class. -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Net_HTMLForm_INCLUDED -#define Net_HTMLForm_INCLUDED - - -#include "Poco/Net/Net.h" -#include "Poco/Net/NameValueCollection.h" -#include <ostream> -#include <istream> -#include <vector> - - -namespace Poco { -namespace Net { - - -class HTTPRequest; -class PartHandler; -class PartSource; - - -class Net_API HTMLForm: public NameValueCollection - /// HTMLForm is a helper class for working with HTML forms, - /// both on the client and on the server side. - /// - /// The maximum number of form fields can be restricted - /// by calling setFieldLimit(). This is useful to - /// defend against certain kinds of denial-of-service - /// attacks. The limit is only enforced when parsing - /// form data from a stream or string, not when adding - /// form fields programmatically. The default limit is 100. -{ -public: - enum Options - { - OPT_USE_CONTENT_LENGTH = 0x01 - /// Don't use Chunked Transfer-Encoding for multipart requests. - }; - - HTMLForm(); - /// Creates an empty HTMLForm and sets the - /// encoding to "application/x-www-form-urlencoded". - - explicit HTMLForm(const std::string& encoding); - /// Creates an empty HTMLForm that uses - /// the given encoding. - /// - /// Encoding must be either "application/x-www-form-urlencoded" - /// (which is the default) or "multipart/form-data". - - HTMLForm(const HTTPRequest& request, std::istream& requestBody, PartHandler& handler); - /// Creates a HTMLForm from the given HTTP request. - /// - /// Uploaded files are passed to the given PartHandler. - - HTMLForm(const HTTPRequest& request, std::istream& requestBody); - /// Creates a HTMLForm from the given HTTP request. - /// - /// Uploaded files are silently discarded. - - explicit HTMLForm(const HTTPRequest& request); - /// Creates a HTMLForm from the given HTTP request. - /// - /// The request must be a GET request and the form data - /// must be in the query string (URL encoded). - /// - /// For POST requests, you must use one of the constructors - /// taking an additional input stream for the request body. - - ~HTMLForm(); - /// Destroys the HTMLForm. - - void setEncoding(const std::string& encoding); - /// Sets the encoding used for posting the form. - /// - /// Encoding must be either "application/x-www-form-urlencoded" - /// (which is the default) or "multipart/form-data". - - const std::string& getEncoding() const; - /// Returns the encoding used for posting the form. - - void addPart(const std::string& name, PartSource* pSource); - /// Adds an part/attachment (file upload) to the form. - /// - /// The form takes ownership of the PartSource and deletes it - /// when it is no longer needed. - /// - /// The part will only be sent if the encoding - /// set for the form is "multipart/form-data" - - void load(const HTTPRequest& request, std::istream& requestBody, PartHandler& handler); - /// Reads the form data from the given HTTP request. - /// - /// Uploaded files are passed to the given PartHandler. - - void load(const HTTPRequest& request, std::istream& requestBody); - /// Reads the form data from the given HTTP request. - /// - /// Uploaded files are silently discarded. - - void load(const HTTPRequest& request); - /// Reads the form data from the given HTTP request. - /// - /// The request must be a GET request and the form data - /// must be in the query string (URL encoded). - /// - /// For POST requests, you must use one of the overloads - /// taking an additional input stream for the request body. - - void read(std::istream& istr, PartHandler& handler); - /// Reads the form data from the given input stream. - /// - /// The form data read from the stream must be - /// in the encoding specified for the form. - /// - /// Note that read() does not clear the form before - /// reading the new values. - - void read(std::istream& istr); - /// Reads the URL-encoded form data from the given input stream. - /// - /// Note that read() does not clear the form before - /// reading the new values. - - void read(const std::string& queryString); - /// Reads the form data from the given HTTP query string. - /// - /// Note that read() does not clear the form before - /// reading the new values. - - void prepareSubmit(HTTPRequest& request, int options = 0); - /// Fills out the request object for submitting the form. - /// - /// If the request method is GET, the encoded form is appended to the - /// request URI as query string. Otherwise (the method is - /// POST), the form's content type is set to the form's encoding. - /// The form's parameters must be written to the - /// request body separately, with a call to write. - /// If the request's HTTP version is HTTP/1.0: - /// - persistent connections are disabled - /// - the content transfer encoding is set to identity encoding - /// Otherwise, if the request's HTTP version is HTTP/1.1: - /// - the request's persistent connection state is left unchanged - /// - the content transfer encoding is set to chunked, unless - /// the OPT_USE_CONTENT_LENGTH is given in options - /// - /// Note: Not using chunked transfer encoding for multipart forms - /// degrades performance, as the request content must be generated - /// twice, first to determine its size, then to actually send it. - - std::streamsize calculateContentLength(); - /// Calculate the content length for the form. - /// May be UNKNOWN_CONTENT_LENGTH if not possible - /// to calculate - - void write(std::ostream& ostr, const std::string& boundary); - /// Writes the form data to the given output stream, - /// using the specified encoding. - - void write(std::ostream& ostr); - /// Writes the form data to the given output stream, - /// using the specified encoding. - - const std::string& boundary() const; - /// Returns the MIME boundary used for writing - /// multipart form data. - - int getFieldLimit() const; - /// Returns the maximum number of header fields - /// allowed. - /// - /// See setFieldLimit() for more information. - - void setFieldLimit(int limit); - /// Sets the maximum number of header fields - /// allowed. This limit is used to defend certain - /// kinds of denial-of-service attacks. - /// Specify 0 for unlimited (not recommended). - /// - /// The default limit is 100. - - void setValueLengthLimit(int limit); - /// Sets the maximum size for form field values - /// stored as strings. - - int getValueLengthLimit() const; - /// Returns the maximum size for form field values - /// stored as strings. - - static const std::string ENCODING_URL; /// "application/x-www-form-urlencoded" - static const std::string ENCODING_MULTIPART; /// "multipart/form-data" - static const int UNKNOWN_CONTENT_LENGTH; - -protected: - void readUrl(std::istream& istr); - void readMultipart(std::istream& istr, PartHandler& handler); - void writeUrl(std::ostream& ostr); - void writeMultipart(std::ostream& ostr); - -private: - HTMLForm(const HTMLForm&); - HTMLForm& operator = (const HTMLForm&); - - enum Limits - { - DFL_FIELD_LIMIT = 100, - MAX_NAME_LENGTH = 1024, - DFL_MAX_VALUE_LENGTH = 256*1024 - }; - - struct Part - { - std::string name; - PartSource* pSource; - }; - - typedef std::vector<Part> PartVec; - - int _fieldLimit; - int _valueLengthLimit; - std::string _encoding; - std::string _boundary; - PartVec _parts; -}; - - -// -// inlines -// -inline const std::string& HTMLForm::getEncoding() const -{ - return _encoding; -} - - -inline const std::string& HTMLForm::boundary() const -{ - return _boundary; -} - - -inline int HTMLForm::getFieldLimit() const -{ - return _fieldLimit; -} - - -inline int HTMLForm::getValueLengthLimit() const -{ - return _valueLengthLimit; -} - - -} } // namespace Poco::Net - - -#endif // Net_HTMLForm_INCLUDED +// +// HTMLForm.h +// +// Library: Net +// Package: HTML +// Module: HTMLForm +// +// Definition of the HTMLForm class. +// +// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. +// and Contributors. +// +// SPDX-License-Identifier: BSL-1.0 +// + + +#ifndef Net_HTMLForm_INCLUDED +#define Net_HTMLForm_INCLUDED + + +#include "Poco/Net/Net.h" +#include "Poco/Net/NameValueCollection.h" +#include <ostream> +#include <istream> +#include <vector> + + +namespace Poco { +namespace Net { + + +class HTTPRequest; +class PartHandler; +class PartSource; + + +class Net_API HTMLForm: public NameValueCollection + /// HTMLForm is a helper class for working with HTML forms, + /// both on the client and on the server side. + /// + /// The maximum number of form fields can be restricted + /// by calling setFieldLimit(). This is useful to + /// defend against certain kinds of denial-of-service + /// attacks. The limit is only enforced when parsing + /// form data from a stream or string, not when adding + /// form fields programmatically. The default limit is 100. +{ +public: + enum Options + { + OPT_USE_CONTENT_LENGTH = 0x01 + /// Don't use Chunked Transfer-Encoding for multipart requests. + }; + + HTMLForm(); + /// Creates an empty HTMLForm and sets the + /// encoding to "application/x-www-form-urlencoded". + + explicit HTMLForm(const std::string& encoding); + /// Creates an empty HTMLForm that uses + /// the given encoding. + /// + /// Encoding must be either "application/x-www-form-urlencoded" + /// (which is the default) or "multipart/form-data". + + HTMLForm(const HTTPRequest& request, std::istream& requestBody, PartHandler& handler); + /// Creates a HTMLForm from the given HTTP request. + /// + /// Uploaded files are passed to the given PartHandler. + + HTMLForm(const HTTPRequest& request, std::istream& requestBody); + /// Creates a HTMLForm from the given HTTP request. + /// + /// Uploaded files are silently discarded. + + explicit HTMLForm(const HTTPRequest& request); + /// Creates a HTMLForm from the given HTTP request. + /// + /// The request must be a GET request and the form data + /// must be in the query string (URL encoded). + /// + /// For POST requests, you must use one of the constructors + /// taking an additional input stream for the request body. + + ~HTMLForm(); + /// Destroys the HTMLForm. + + void setEncoding(const std::string& encoding); + /// Sets the encoding used for posting the form. + /// + /// Encoding must be either "application/x-www-form-urlencoded" + /// (which is the default) or "multipart/form-data". + + const std::string& getEncoding() const; + /// Returns the encoding used for posting the form. + + void addPart(const std::string& name, PartSource* pSource); + /// Adds an part/attachment (file upload) to the form. + /// + /// The form takes ownership of the PartSource and deletes it + /// when it is no longer needed. + /// + /// The part will only be sent if the encoding + /// set for the form is "multipart/form-data" + + void load(const HTTPRequest& request, std::istream& requestBody, PartHandler& handler); + /// Reads the form data from the given HTTP request. + /// + /// Uploaded files are passed to the given PartHandler. + + void load(const HTTPRequest& request, std::istream& requestBody); + /// Reads the form data from the given HTTP request. + /// + /// Uploaded files are silently discarded. + + void load(const HTTPRequest& request); + /// Reads the form data from the given HTTP request. + /// + /// The request must be a GET request and the form data + /// must be in the query string (URL encoded). + /// + /// For POST requests, you must use one of the overloads + /// taking an additional input stream for the request body. + + void read(std::istream& istr, PartHandler& handler); + /// Reads the form data from the given input stream. + /// + /// The form data read from the stream must be + /// in the encoding specified for the form. + /// + /// Note that read() does not clear the form before + /// reading the new values. + + void read(std::istream& istr); + /// Reads the URL-encoded form data from the given input stream. + /// + /// Note that read() does not clear the form before + /// reading the new values. + + void read(const std::string& queryString); + /// Reads the form data from the given HTTP query string. + /// + /// Note that read() does not clear the form before + /// reading the new values. + + void prepareSubmit(HTTPRequest& request, int options = 0); + /// Fills out the request object for submitting the form. + /// + /// If the request method is GET, the encoded form is appended to the + /// request URI as query string. Otherwise (the method is + /// POST), the form's content type is set to the form's encoding. + /// The form's parameters must be written to the + /// request body separately, with a call to write. + /// If the request's HTTP version is HTTP/1.0: + /// - persistent connections are disabled + /// - the content transfer encoding is set to identity encoding + /// Otherwise, if the request's HTTP version is HTTP/1.1: + /// - the request's persistent connection state is left unchanged + /// - the content transfer encoding is set to chunked, unless + /// the OPT_USE_CONTENT_LENGTH is given in options + /// + /// Note: Not using chunked transfer encoding for multipart forms + /// degrades performance, as the request content must be generated + /// twice, first to determine its size, then to actually send it. + + std::streamsize calculateContentLength(); + /// Calculate the content length for the form. + /// May be UNKNOWN_CONTENT_LENGTH if not possible + /// to calculate + + void write(std::ostream& ostr, const std::string& boundary); + /// Writes the form data to the given output stream, + /// using the specified encoding. + + void write(std::ostream& ostr); + /// Writes the form data to the given output stream, + /// using the specified encoding. + + const std::string& boundary() const; + /// Returns the MIME boundary used for writing + /// multipart form data. + + int getFieldLimit() const; + /// Returns the maximum number of header fields + /// allowed. + /// + /// See setFieldLimit() for more information. + + void setFieldLimit(int limit); + /// Sets the maximum number of header fields + /// allowed. This limit is used to defend certain + /// kinds of denial-of-service attacks. + /// Specify 0 for unlimited (not recommended). + /// + /// The default limit is 100. + + void setValueLengthLimit(int limit); + /// Sets the maximum size for form field values + /// stored as strings. + + int getValueLengthLimit() const; + /// Returns the maximum size for form field values + /// stored as strings. + + static const std::string ENCODING_URL; /// "application/x-www-form-urlencoded" + static const std::string ENCODING_MULTIPART; /// "multipart/form-data" + static const int UNKNOWN_CONTENT_LENGTH; + +protected: + void readUrl(std::istream& istr); + void readMultipart(std::istream& istr, PartHandler& handler); + void writeUrl(std::ostream& ostr); + void writeMultipart(std::ostream& ostr); + +private: + HTMLForm(const HTMLForm&); + HTMLForm& operator = (const HTMLForm&); + + enum Limits + { + DFL_FIELD_LIMIT = 100, + MAX_NAME_LENGTH = 1024, + DFL_MAX_VALUE_LENGTH = 256*1024 + }; + + struct Part + { + std::string name; + PartSource* pSource; + }; + + typedef std::vector<Part> PartVec; + + int _fieldLimit; + int _valueLengthLimit; + std::string _encoding; + std::string _boundary; + PartVec _parts; +}; + + +// +// inlines +// +inline const std::string& HTMLForm::getEncoding() const +{ + return _encoding; +} + + +inline const std::string& HTMLForm::boundary() const +{ + return _boundary; +} + + +inline int HTMLForm::getFieldLimit() const +{ + return _fieldLimit; +} + + +inline int HTMLForm::getValueLengthLimit() const +{ + return _valueLengthLimit; +} + + +} } // namespace Poco::Net + + +#endif // Net_HTMLForm_INCLUDED diff --git a/contrib/libs/poco/Net/include/Poco/Net/HTTPAuthenticationParams.h b/contrib/libs/poco/Net/include/Poco/Net/HTTPAuthenticationParams.h index dd182b09a6..492e2c45d4 100644 --- a/contrib/libs/poco/Net/include/Poco/Net/HTTPAuthenticationParams.h +++ b/contrib/libs/poco/Net/include/Poco/Net/HTTPAuthenticationParams.h @@ -1,103 +1,103 @@ -// -// HTTPAuthenticationParams.h -// -// Library: Net -// Package: HTTP -// Module: HTTPAuthenticationParams -// -// Definition of the HTTPAuthenticationParams class. -// -// Copyright (c) 2011, Anton V. Yabchinskiy (arn at bestmx dot ru). -// Copyright (c) 2012, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Net_HTTPAuthenticationParams_INCLUDED -#define Net_HTTPAuthenticationParams_INCLUDED - - -#include "Poco/Net/NameValueCollection.h" - - -namespace Poco { -namespace Net { - - -class HTTPRequest; -class HTTPResponse; - - -class Net_API HTTPAuthenticationParams: public NameValueCollection - /// Collection of name-value pairs of HTTP authentication header (i.e. - /// "realm", "qop", "nonce" in case of digest authentication header). -{ -public: - HTTPAuthenticationParams(); - /// Creates an empty authentication parameters collection. - - explicit HTTPAuthenticationParams(const std::string& authInfo); - /// See fromAuthInfo() documentation. - - explicit HTTPAuthenticationParams(const HTTPRequest& request); - /// See fromRequest() documentation. - - HTTPAuthenticationParams(const HTTPResponse& response, const std::string& header = WWW_AUTHENTICATE); - /// See fromResponse() documentation. - - virtual ~HTTPAuthenticationParams(); - /// Destroys the HTTPAuthenticationParams. - - HTTPAuthenticationParams& operator = (const HTTPAuthenticationParams& authParams); - /// Assigns the content of another HTTPAuthenticationParams. - - void fromAuthInfo(const std::string& authInfo); - /// Creates an HTTPAuthenticationParams by parsing authentication - /// information. - - void fromRequest(const HTTPRequest& request); - /// Extracts authentication information from the request and creates - /// HTTPAuthenticationParams by parsing it. - /// - /// Throws a NotAuthenticatedException if no authentication - /// information is contained in request. - /// Throws a InvalidArgumentException if authentication scheme is - /// unknown or invalid. - - void fromResponse(const HTTPResponse& response, const std::string& header = WWW_AUTHENTICATE); - /// Extracts authentication information from the response and creates - /// HTTPAuthenticationParams by parsing it. - /// - /// Throws a NotAuthenticatedException if no authentication - /// information is contained in response. - /// Throws a InvalidArgumentException if authentication scheme is - /// unknown or invalid. - - void setRealm(const std::string& realm); - /// Sets the "realm" parameter to the provided string. - - const std::string& getRealm() const; - /// Returns value of the "realm" parameter. - /// - /// Throws NotFoundException is there is no "realm" set in the - /// HTTPAuthenticationParams. - - std::string toString() const; - /// Formats the HTTPAuthenticationParams for inclusion in HTTP - /// request or response authentication header. - - static const std::string REALM; - static const std::string WWW_AUTHENTICATE; - static const std::string PROXY_AUTHENTICATE; - -private: - void parse(std::string::const_iterator first, std::string::const_iterator last); -}; - - -} } // namespace Poco::Net - - -#endif // Net_HTTPAuthenticationParams_INCLUDED +// +// HTTPAuthenticationParams.h +// +// Library: Net +// Package: HTTP +// Module: HTTPAuthenticationParams +// +// Definition of the HTTPAuthenticationParams class. +// +// Copyright (c) 2011, Anton V. Yabchinskiy (arn at bestmx dot ru). +// Copyright (c) 2012, Applied Informatics Software Engineering GmbH. +// and Contributors. +// +// SPDX-License-Identifier: BSL-1.0 +// + + +#ifndef Net_HTTPAuthenticationParams_INCLUDED +#define Net_HTTPAuthenticationParams_INCLUDED + + +#include "Poco/Net/NameValueCollection.h" + + +namespace Poco { +namespace Net { + + +class HTTPRequest; +class HTTPResponse; + + +class Net_API HTTPAuthenticationParams: public NameValueCollection + /// Collection of name-value pairs of HTTP authentication header (i.e. + /// "realm", "qop", "nonce" in case of digest authentication header). +{ +public: + HTTPAuthenticationParams(); + /// Creates an empty authentication parameters collection. + + explicit HTTPAuthenticationParams(const std::string& authInfo); + /// See fromAuthInfo() documentation. + + explicit HTTPAuthenticationParams(const HTTPRequest& request); + /// See fromRequest() documentation. + + HTTPAuthenticationParams(const HTTPResponse& response, const std::string& header = WWW_AUTHENTICATE); + /// See fromResponse() documentation. + + virtual ~HTTPAuthenticationParams(); + /// Destroys the HTTPAuthenticationParams. + + HTTPAuthenticationParams& operator = (const HTTPAuthenticationParams& authParams); + /// Assigns the content of another HTTPAuthenticationParams. + + void fromAuthInfo(const std::string& authInfo); + /// Creates an HTTPAuthenticationParams by parsing authentication + /// information. + + void fromRequest(const HTTPRequest& request); + /// Extracts authentication information from the request and creates + /// HTTPAuthenticationParams by parsing it. + /// + /// Throws a NotAuthenticatedException if no authentication + /// information is contained in request. + /// Throws a InvalidArgumentException if authentication scheme is + /// unknown or invalid. + + void fromResponse(const HTTPResponse& response, const std::string& header = WWW_AUTHENTICATE); + /// Extracts authentication information from the response and creates + /// HTTPAuthenticationParams by parsing it. + /// + /// Throws a NotAuthenticatedException if no authentication + /// information is contained in response. + /// Throws a InvalidArgumentException if authentication scheme is + /// unknown or invalid. + + void setRealm(const std::string& realm); + /// Sets the "realm" parameter to the provided string. + + const std::string& getRealm() const; + /// Returns value of the "realm" parameter. + /// + /// Throws NotFoundException is there is no "realm" set in the + /// HTTPAuthenticationParams. + + std::string toString() const; + /// Formats the HTTPAuthenticationParams for inclusion in HTTP + /// request or response authentication header. + + static const std::string REALM; + static const std::string WWW_AUTHENTICATE; + static const std::string PROXY_AUTHENTICATE; + +private: + void parse(std::string::const_iterator first, std::string::const_iterator last); +}; + + +} } // namespace Poco::Net + + +#endif // Net_HTTPAuthenticationParams_INCLUDED diff --git a/contrib/libs/poco/Net/include/Poco/Net/HTTPBasicCredentials.h b/contrib/libs/poco/Net/include/Poco/Net/HTTPBasicCredentials.h index bb1eae3300..56894db8ca 100644 --- a/contrib/libs/poco/Net/include/Poco/Net/HTTPBasicCredentials.h +++ b/contrib/libs/poco/Net/include/Poco/Net/HTTPBasicCredentials.h @@ -1,123 +1,123 @@ -// -// HTTPBasicCredentials.h -// -// Library: Net -// Package: HTTP -// Module: HTTPBasicCredentials -// -// Definition of the HTTPBasicCredentials class. -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Net_HTTPBasicCredentials_INCLUDED -#define Net_HTTPBasicCredentials_INCLUDED - - -#include "Poco/Net/Net.h" - - -namespace Poco { -namespace Net { - - -class HTTPRequest; - - -class Net_API HTTPBasicCredentials - /// This is a utility class for working with - /// HTTP Basic Authentication in HTTPRequest - /// objects. -{ -public: - HTTPBasicCredentials(); - /// Creates an empty HTTPBasicCredentials object. - - HTTPBasicCredentials(const std::string& username, const std::string& password); - /// Creates a HTTPBasicCredentials object with the given username and password. - - explicit HTTPBasicCredentials(const HTTPRequest& request); - /// Creates a HTTPBasicCredentials object with the authentication information - /// from the given request. - /// - /// Throws a NotAuthenticatedException if the request does - /// not contain basic authentication information. - - explicit HTTPBasicCredentials(const std::string& authInfo); - /// Creates a HTTPBasicCredentials object with the authentication information - /// in the given string. The authentication information can be extracted - /// from a HTTPRequest object by calling HTTPRequest::getCredentials(). - - ~HTTPBasicCredentials(); - /// Destroys the HTTPBasicCredentials. - - void clear(); - /// Clears both username and password. - - void setUsername(const std::string& username); - /// Sets the username. - - const std::string& getUsername() const; - /// Returns the username. - - void setPassword(const std::string& password); - /// Sets the password. - - const std::string& getPassword() const; - /// Returns the password. - - bool empty() const; - /// Returns true if both username and password are empty, otherwise false. - - void authenticate(HTTPRequest& request) const; - /// Adds authentication information to the given HTTPRequest. - - void proxyAuthenticate(HTTPRequest& request) const; - /// Adds proxy authentication information to the given HTTPRequest. - - static const std::string SCHEME; - -protected: - void parseAuthInfo(const std::string& authInfo); - /// Extracts username and password from Basic authentication info - /// by base64-decoding authInfo and splitting the resulting - /// string at the ':' delimiter. - -private: - HTTPBasicCredentials(const HTTPBasicCredentials&); - HTTPBasicCredentials& operator = (const HTTPBasicCredentials&); - - std::string _username; - std::string _password; -}; - - -// -// inlines -// -inline const std::string& HTTPBasicCredentials::getUsername() const -{ - return _username; -} - - -inline const std::string& HTTPBasicCredentials::getPassword() const -{ - return _password; -} - - -inline bool HTTPBasicCredentials::empty() const -{ - return _username.empty() && _password.empty(); -} - - -} } // namespace Poco::Net - - -#endif // Net_HTTPBasicCredentials_INCLUDED +// +// HTTPBasicCredentials.h +// +// Library: Net +// Package: HTTP +// Module: HTTPBasicCredentials +// +// Definition of the HTTPBasicCredentials class. +// +// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. +// and Contributors. +// +// SPDX-License-Identifier: BSL-1.0 +// + + +#ifndef Net_HTTPBasicCredentials_INCLUDED +#define Net_HTTPBasicCredentials_INCLUDED + + +#include "Poco/Net/Net.h" + + +namespace Poco { +namespace Net { + + +class HTTPRequest; + + +class Net_API HTTPBasicCredentials + /// This is a utility class for working with + /// HTTP Basic Authentication in HTTPRequest + /// objects. +{ +public: + HTTPBasicCredentials(); + /// Creates an empty HTTPBasicCredentials object. + + HTTPBasicCredentials(const std::string& username, const std::string& password); + /// Creates a HTTPBasicCredentials object with the given username and password. + + explicit HTTPBasicCredentials(const HTTPRequest& request); + /// Creates a HTTPBasicCredentials object with the authentication information + /// from the given request. + /// + /// Throws a NotAuthenticatedException if the request does + /// not contain basic authentication information. + + explicit HTTPBasicCredentials(const std::string& authInfo); + /// Creates a HTTPBasicCredentials object with the authentication information + /// in the given string. The authentication information can be extracted + /// from a HTTPRequest object by calling HTTPRequest::getCredentials(). + + ~HTTPBasicCredentials(); + /// Destroys the HTTPBasicCredentials. + + void clear(); + /// Clears both username and password. + + void setUsername(const std::string& username); + /// Sets the username. + + const std::string& getUsername() const; + /// Returns the username. + + void setPassword(const std::string& password); + /// Sets the password. + + const std::string& getPassword() const; + /// Returns the password. + + bool empty() const; + /// Returns true if both username and password are empty, otherwise false. + + void authenticate(HTTPRequest& request) const; + /// Adds authentication information to the given HTTPRequest. + + void proxyAuthenticate(HTTPRequest& request) const; + /// Adds proxy authentication information to the given HTTPRequest. + + static const std::string SCHEME; + +protected: + void parseAuthInfo(const std::string& authInfo); + /// Extracts username and password from Basic authentication info + /// by base64-decoding authInfo and splitting the resulting + /// string at the ':' delimiter. + +private: + HTTPBasicCredentials(const HTTPBasicCredentials&); + HTTPBasicCredentials& operator = (const HTTPBasicCredentials&); + + std::string _username; + std::string _password; +}; + + +// +// inlines +// +inline const std::string& HTTPBasicCredentials::getUsername() const +{ + return _username; +} + + +inline const std::string& HTTPBasicCredentials::getPassword() const +{ + return _password; +} + + +inline bool HTTPBasicCredentials::empty() const +{ + return _username.empty() && _password.empty(); +} + + +} } // namespace Poco::Net + + +#endif // Net_HTTPBasicCredentials_INCLUDED diff --git a/contrib/libs/poco/Net/include/Poco/Net/HTTPBasicStreamBuf.h b/contrib/libs/poco/Net/include/Poco/Net/HTTPBasicStreamBuf.h index 5ea5626750..0edbec3298 100644 --- a/contrib/libs/poco/Net/include/Poco/Net/HTTPBasicStreamBuf.h +++ b/contrib/libs/poco/Net/include/Poco/Net/HTTPBasicStreamBuf.h @@ -1,36 +1,36 @@ -// -// HTTPBasicStreamBuf.h -// -// Library: Net -// Package: HTTP -// Module: HTTPBasicStreamBuf -// -// Definition of the HTTPBasicStreamBuf class. -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Net_HTTPBasicStreamBuf_INCLUDED -#define Net_HTTPBasicStreamBuf_INCLUDED - - -#include "Poco/Net/Net.h" -#include "Poco/BufferedStreamBuf.h" -#include "Poco/Net/HTTPBufferAllocator.h" - - -namespace Poco { -namespace Net { - - -typedef Poco::BasicBufferedStreamBuf<char, std::char_traits<char>, HTTPBufferAllocator> HTTPBasicStreamBuf; - - -} } // namespace Poco::Net - - -#endif // Net_HTTPBasicStreamBuf_INCLUDED +// +// HTTPBasicStreamBuf.h +// +// Library: Net +// Package: HTTP +// Module: HTTPBasicStreamBuf +// +// Definition of the HTTPBasicStreamBuf class. +// +// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. +// and Contributors. +// +// SPDX-License-Identifier: BSL-1.0 +// + + +#ifndef Net_HTTPBasicStreamBuf_INCLUDED +#define Net_HTTPBasicStreamBuf_INCLUDED + + +#include "Poco/Net/Net.h" +#include "Poco/BufferedStreamBuf.h" +#include "Poco/Net/HTTPBufferAllocator.h" + + +namespace Poco { +namespace Net { + + +typedef Poco::BasicBufferedStreamBuf<char, std::char_traits<char>, HTTPBufferAllocator> HTTPBasicStreamBuf; + + +} } // namespace Poco::Net + + +#endif // Net_HTTPBasicStreamBuf_INCLUDED diff --git a/contrib/libs/poco/Net/include/Poco/Net/HTTPBufferAllocator.h b/contrib/libs/poco/Net/include/Poco/Net/HTTPBufferAllocator.h index 05bc642ae2..ce2039aeaa 100644 --- a/contrib/libs/poco/Net/include/Poco/Net/HTTPBufferAllocator.h +++ b/contrib/libs/poco/Net/include/Poco/Net/HTTPBufferAllocator.h @@ -1,50 +1,50 @@ -// -// HTTPBufferAllocator.h -// -// Library: Net -// Package: HTTP -// Module: HTTPBufferAllocator -// -// Definition of the HTTPBufferAllocator class. -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Net_HTTPBufferAllocator_INCLUDED -#define Net_HTTPBufferAllocator_INCLUDED - - -#include "Poco/Net/Net.h" -#include "Poco/MemoryPool.h" -#include <ios> - - -namespace Poco { -namespace Net { - - -class Net_API HTTPBufferAllocator - /// A BufferAllocator for HTTP streams. -{ -public: - static char* allocate(std::streamsize size); - static void deallocate(char* ptr, std::streamsize size); - - enum - { - BUFFER_SIZE = 4096 - }; - -private: - static Poco::MemoryPool _pool; -}; - - -} } // namespace Poco::Net - - -#endif // Net_HTTPBufferAllocator_INCLUDED +// +// HTTPBufferAllocator.h +// +// Library: Net +// Package: HTTP +// Module: HTTPBufferAllocator +// +// Definition of the HTTPBufferAllocator class. +// +// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. +// and Contributors. +// +// SPDX-License-Identifier: BSL-1.0 +// + + +#ifndef Net_HTTPBufferAllocator_INCLUDED +#define Net_HTTPBufferAllocator_INCLUDED + + +#include "Poco/Net/Net.h" +#include "Poco/MemoryPool.h" +#include <ios> + + +namespace Poco { +namespace Net { + + +class Net_API HTTPBufferAllocator + /// A BufferAllocator for HTTP streams. +{ +public: + static char* allocate(std::streamsize size); + static void deallocate(char* ptr, std::streamsize size); + + enum + { + BUFFER_SIZE = 4096 + }; + +private: + static Poco::MemoryPool _pool; +}; + + +} } // namespace Poco::Net + + +#endif // Net_HTTPBufferAllocator_INCLUDED diff --git a/contrib/libs/poco/Net/include/Poco/Net/HTTPChunkedStream.h b/contrib/libs/poco/Net/include/Poco/Net/HTTPChunkedStream.h index d9dfe11d15..7e140ed586 100644 --- a/contrib/libs/poco/Net/include/Poco/Net/HTTPChunkedStream.h +++ b/contrib/libs/poco/Net/include/Poco/Net/HTTPChunkedStream.h @@ -1,105 +1,105 @@ -// -// HTTPChunkedStream.h -// -// Library: Net -// Package: HTTP -// Module: HTTPChunkedStream -// -// Definition of the HTTPChunkedStream class. -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Net_HTTPChunkedStream_INCLUDED -#define Net_HTTPChunkedStream_INCLUDED - - -#include "Poco/Net/Net.h" -#include "Poco/Net/HTTPBasicStreamBuf.h" -#include "Poco/MemoryPool.h" -#include <cstddef> -#include <istream> -#include <ostream> - - -namespace Poco { -namespace Net { - - -class HTTPSession; - - -class Net_API HTTPChunkedStreamBuf: public HTTPBasicStreamBuf - /// This is the streambuf class used for reading and writing - /// HTTP message bodies in chunked transfer coding. -{ -public: - typedef HTTPBasicStreamBuf::openmode openmode; - - HTTPChunkedStreamBuf(HTTPSession& session, openmode mode); - ~HTTPChunkedStreamBuf(); - void close(); - -protected: - int readFromDevice(char* buffer, std::streamsize length); - int writeToDevice(const char* buffer, std::streamsize length); - -private: - HTTPSession& _session; - openmode _mode; - std::streamsize _chunk; - std::string _chunkBuffer; -}; - - -class Net_API HTTPChunkedIOS: public virtual std::ios - /// The base class for HTTPInputStream. -{ -public: - HTTPChunkedIOS(HTTPSession& session, HTTPChunkedStreamBuf::openmode mode); - ~HTTPChunkedIOS(); - HTTPChunkedStreamBuf* rdbuf(); - -protected: - HTTPChunkedStreamBuf _buf; -}; - - -class Net_API HTTPChunkedInputStream: public HTTPChunkedIOS, public std::istream - /// This class is for internal use by HTTPSession only. -{ -public: - HTTPChunkedInputStream(HTTPSession& session); - ~HTTPChunkedInputStream(); - - void* operator new(std::size_t size); - void operator delete(void* ptr); - -private: - static Poco::MemoryPool _pool; -}; - - -class Net_API HTTPChunkedOutputStream: public HTTPChunkedIOS, public std::ostream - /// This class is for internal use by HTTPSession only. -{ -public: - HTTPChunkedOutputStream(HTTPSession& session); - ~HTTPChunkedOutputStream(); - - void* operator new(std::size_t size); - void operator delete(void* ptr); - -private: - static Poco::MemoryPool _pool; -}; - - -} } // namespace Poco::Net - - -#endif // Net_HTTPChunkedStream_INCLUDED +// +// HTTPChunkedStream.h +// +// Library: Net +// Package: HTTP +// Module: HTTPChunkedStream +// +// Definition of the HTTPChunkedStream class. +// +// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. +// and Contributors. +// +// SPDX-License-Identifier: BSL-1.0 +// + + +#ifndef Net_HTTPChunkedStream_INCLUDED +#define Net_HTTPChunkedStream_INCLUDED + + +#include "Poco/Net/Net.h" +#include "Poco/Net/HTTPBasicStreamBuf.h" +#include "Poco/MemoryPool.h" +#include <cstddef> +#include <istream> +#include <ostream> + + +namespace Poco { +namespace Net { + + +class HTTPSession; + + +class Net_API HTTPChunkedStreamBuf: public HTTPBasicStreamBuf + /// This is the streambuf class used for reading and writing + /// HTTP message bodies in chunked transfer coding. +{ +public: + typedef HTTPBasicStreamBuf::openmode openmode; + + HTTPChunkedStreamBuf(HTTPSession& session, openmode mode); + ~HTTPChunkedStreamBuf(); + void close(); + +protected: + int readFromDevice(char* buffer, std::streamsize length); + int writeToDevice(const char* buffer, std::streamsize length); + +private: + HTTPSession& _session; + openmode _mode; + std::streamsize _chunk; + std::string _chunkBuffer; +}; + + +class Net_API HTTPChunkedIOS: public virtual std::ios + /// The base class for HTTPInputStream. +{ +public: + HTTPChunkedIOS(HTTPSession& session, HTTPChunkedStreamBuf::openmode mode); + ~HTTPChunkedIOS(); + HTTPChunkedStreamBuf* rdbuf(); + +protected: + HTTPChunkedStreamBuf _buf; +}; + + +class Net_API HTTPChunkedInputStream: public HTTPChunkedIOS, public std::istream + /// This class is for internal use by HTTPSession only. +{ +public: + HTTPChunkedInputStream(HTTPSession& session); + ~HTTPChunkedInputStream(); + + void* operator new(std::size_t size); + void operator delete(void* ptr); + +private: + static Poco::MemoryPool _pool; +}; + + +class Net_API HTTPChunkedOutputStream: public HTTPChunkedIOS, public std::ostream + /// This class is for internal use by HTTPSession only. +{ +public: + HTTPChunkedOutputStream(HTTPSession& session); + ~HTTPChunkedOutputStream(); + + void* operator new(std::size_t size); + void operator delete(void* ptr); + +private: + static Poco::MemoryPool _pool; +}; + + +} } // namespace Poco::Net + + +#endif // Net_HTTPChunkedStream_INCLUDED diff --git a/contrib/libs/poco/Net/include/Poco/Net/HTTPClientSession.h b/contrib/libs/poco/Net/include/Poco/Net/HTTPClientSession.h index b48facd7e5..2f2e21c599 100644 --- a/contrib/libs/poco/Net/include/Poco/Net/HTTPClientSession.h +++ b/contrib/libs/poco/Net/include/Poco/Net/HTTPClientSession.h @@ -1,391 +1,391 @@ -// -// HTTPClientSession.h -// -// Library: Net -// Package: HTTPClient -// Module: HTTPClientSession -// -// Definition of the HTTPClientSession class. -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Net_HTTPClientSession_INCLUDED -#define Net_HTTPClientSession_INCLUDED - - -#include "Poco/Net/Net.h" -#include "Poco/Net/HTTPSession.h" -#include "Poco/Net/SocketAddress.h" -#include "Poco/SharedPtr.h" -#include <istream> -#include <ostream> - - -namespace Poco { -namespace Net { - - -class HTTPRequest; -class HTTPResponse; - - -class Net_API HTTPClientSession: public HTTPSession - /// This class implements the client-side of - /// a HTTP session. - /// - /// To send a HTTP request to a HTTP server, first - /// instantiate a HTTPClientSession object and - /// specify the server's host name and port number. - /// - /// Then create a HTTPRequest object, fill it accordingly, - /// and pass it as argument to the sendRequest() method. - /// - /// sendRequest() will return an output stream that can - /// be used to send the request body, if there is any. - /// - /// After you are done sending the request body, create - /// a HTTPResponse object and pass it to receiveResponse(). - /// - /// This will return an input stream that can be used to - /// read the response body. - /// - /// See RFC 2616 <http://www.faqs.org/rfcs/rfc2616.html> for more - /// information about the HTTP protocol. - /// - /// Proxies and proxy authorization (only HTTP Basic Authorization) - /// is supported. Use setProxy() and setProxyCredentials() to - /// set up a session through a proxy. -{ -public: - struct ProxyConfig - /// HTTP proxy server configuration. - { - ProxyConfig(): - port(HTTP_PORT) - { - } - - std::string host; - /// Proxy server host name or IP address. - Poco::UInt16 port; - /// Proxy server TCP port. - std::string username; - /// Proxy server username. - std::string password; - /// Proxy server password. - std::string nonProxyHosts; - /// A regular expression defining hosts for which the proxy should be bypassed, - /// e.g. "localhost|127\.0\.0\.1|192\.168\.0\.\d+". Can also be an empty - /// string to disable proxy bypassing. - }; - - HTTPClientSession(); - /// Creates an unconnected HTTPClientSession. - - explicit HTTPClientSession(const StreamSocket& socket); - /// Creates a HTTPClientSession using the given socket. - /// The socket must not be connected. The session - /// takes ownership of the socket. - - explicit HTTPClientSession(const SocketAddress& address); - /// Creates a HTTPClientSession using the given address. - - HTTPClientSession(const std::string& host, Poco::UInt16 port = HTTPSession::HTTP_PORT); - /// Creates a HTTPClientSession using the given host and port. - - HTTPClientSession(const std::string& host, Poco::UInt16 port, const ProxyConfig& proxyConfig); - /// Creates a HTTPClientSession using the given host, port and proxy configuration. - - virtual ~HTTPClientSession(); - /// Destroys the HTTPClientSession and closes - /// the underlying socket. - - void setHost(const std::string& host); - /// Sets the host name of the target HTTP server. - /// - /// The host must not be changed once there is an - /// open connection to the server. - - const std::string& getHost() const; - /// Returns the host name of the target HTTP server. - - void setPort(Poco::UInt16 port); - /// Sets the port number of the target HTTP server. - /// - /// The port number must not be changed once there is an - /// open connection to the server. - - Poco::UInt16 getPort() const; - /// Returns the port number of the target HTTP server. - - void setProxy(const std::string& host, Poco::UInt16 port = HTTPSession::HTTP_PORT); - /// Sets the proxy host name and port number. - - void setProxyHost(const std::string& host); - /// Sets the host name of the proxy server. - - void setProxyPort(Poco::UInt16 port); - /// Sets the port number of the proxy server. - - const std::string& getProxyHost() const; - /// Returns the proxy host name. - - Poco::UInt16 getProxyPort() const; - /// Returns the proxy port number. - - void setProxyCredentials(const std::string& username, const std::string& password); - /// Sets the username and password for proxy authentication. - /// Only Basic authentication is supported. - - void setProxyUsername(const std::string& username); - /// Sets the username for proxy authentication. - /// Only Basic authentication is supported. - - const std::string& getProxyUsername() const; - /// Returns the username for proxy authentication. - - void setProxyPassword(const std::string& password); - /// Sets the password for proxy authentication. - /// Only Basic authentication is supported. - - const std::string& getProxyPassword() const; - /// Returns the password for proxy authentication. - - void setProxyConfig(const ProxyConfig& config); - /// Sets the proxy configuration. - - const ProxyConfig& getProxyConfig() const; - /// Returns the proxy configuration. - - static void setGlobalProxyConfig(const ProxyConfig& config); - /// Sets the global proxy configuration. - /// - /// The global proxy configuration is used by all HTTPClientSession - /// instances, unless a different proxy configuration is explicitly set. - /// - /// Warning: Setting the global proxy configuration is not thread safe. - /// The global proxy configuration should be set at start up, before - /// the first HTTPClientSession instance is created. - - static const ProxyConfig& getGlobalProxyConfig(); - /// Returns the global proxy configuration. - - void setKeepAliveTimeout(const Poco::Timespan& timeout); - /// Sets the connection timeout for HTTP connections. - - const Poco::Timespan& getKeepAliveTimeout() const; - /// Returns the connection timeout for HTTP connections. - - virtual std::ostream& sendRequest(HTTPRequest& request); - /// Sends the header for the given HTTP request to - /// the server. - /// - /// The HTTPClientSession will set the request's - /// Host and Keep-Alive headers accordingly. - /// - /// The returned output stream can be used to write - /// the request body. The stream is valid until - /// receiveResponse() is called or the session - /// is destroyed. - /// - /// In case a network or server failure happens - /// while writing the request body to the returned stream, - /// the stream state will change to bad or fail. In this - /// case, reset() should be called if the session will - /// be reused and persistent connections are enabled - /// to ensure a new connection will be set up - /// for the next request. - - virtual std::istream& receiveResponse(HTTPResponse& response); - /// Receives the header for the response to the previous - /// HTTP request. - /// - /// The returned input stream can be used to read - /// the response body. The stream is valid until - /// sendRequest() is called or the session is - /// destroyed. - /// - /// It must be ensured that the response stream - /// is fully consumed before sending a new request - /// and persistent connections are enabled. Otherwise, - /// the unread part of the response body may be treated as - /// part of the next request's response header, resulting - /// in a Poco::Net::MessageException being thrown. - /// - /// In case a network or server failure happens - /// while reading the response body from the returned stream, - /// the stream state will change to bad or fail. In this - /// case, reset() should be called if the session will - /// be reused and persistent connections are enabled - /// to ensure a new connection will be set up - /// for the next request. - - virtual bool peekResponse(HTTPResponse& response); - /// If the request contains a "Expect: 100-continue" header, - /// (see HTTPRequest::setExpectContinue()) this method can be - /// used to check whether the server has sent a 100 Continue response - /// before continuing with the request, i.e. sending the request body, - /// after calling sendRequest(). - /// - /// Returns true if the server has responded with 100 Continue, - /// otherwise false. The HTTPResponse object contains the - /// response sent by the server. - /// - /// In any case, receiveResponse() must be called afterwards as well in - /// order to complete the request. The same HTTPResponse object - /// passed to peekResponse() must also be passed to receiveResponse(). - /// - /// This method should only be called if the request contains - /// a "Expect: 100-continue" header. - - void flushRequest(); - /// Flushes the request stream. - /// - /// Normally this method does not need to be called. - /// It can be used to ensure the request has been - /// fully sent if receiveResponse() is not called, e.g., - /// because the underlying socket will be detached. - - void reset(); - /// Resets the session and closes the socket. - /// - /// The next request will initiate a new connection, - /// even if persistent connections are enabled. - /// - /// This should be called whenever something went - /// wrong when sending a request (e.g., sendRequest() - /// or receiveResponse() throws an exception, or - /// the request or response stream changes into - /// fail or bad state, but not eof state). - - virtual bool secure() const; - /// Return true iff the session uses SSL or TLS, - /// or false otherwise. - - bool bypassProxy() const; - /// Returns true if the proxy should be bypassed - /// for the current host. - -protected: - enum - { - DEFAULT_KEEP_ALIVE_TIMEOUT = 8 - }; - - void reconnect(); - /// Connects the underlying socket to the HTTP server. - - int write(const char* buffer, std::streamsize length); - /// Tries to re-connect if keep-alive is on. - - virtual std::string proxyRequestPrefix() const; - /// Returns the prefix prepended to the URI for proxy requests - /// (e.g., "http://myhost.com"). - - virtual bool mustReconnect() const; - /// Checks if we can reuse a persistent connection. - - virtual void proxyAuthenticate(HTTPRequest& request); - /// Sets the proxy credentials (Proxy-Authorization header), if - /// proxy username and password have been set. - - void proxyAuthenticateImpl(HTTPRequest& request); - /// Sets the proxy credentials (Proxy-Authorization header), if - /// proxy username and password have been set. - - StreamSocket proxyConnect(); - /// Sends a CONNECT request to the proxy server and returns - /// a StreamSocket for the resulting connection. - - void proxyTunnel(); - /// Calls proxyConnect() and attaches the resulting StreamSocket - /// to the HTTPClientSession. - -private: - std::string _host; - Poco::UInt16 _port; - ProxyConfig _proxyConfig; - Poco::Timespan _keepAliveTimeout; - Poco::Timestamp _lastRequest; - bool _reconnect; - bool _mustReconnect; - bool _expectResponseBody; - bool _responseReceived; - Poco::SharedPtr<std::ostream> _pRequestStream; - Poco::SharedPtr<std::istream> _pResponseStream; - - static ProxyConfig _globalProxyConfig; - - HTTPClientSession(const HTTPClientSession&); - HTTPClientSession& operator = (const HTTPClientSession&); - - friend class WebSocket; -}; - - -// -// inlines -// -inline const std::string& HTTPClientSession::getHost() const -{ - return _host; -} - - -inline Poco::UInt16 HTTPClientSession::getPort() const -{ - return _port; -} - - -inline const std::string& HTTPClientSession::getProxyHost() const -{ - return _proxyConfig.host; -} - - -inline Poco::UInt16 HTTPClientSession::getProxyPort() const -{ - return _proxyConfig.port; -} - - -inline const std::string& HTTPClientSession::getProxyUsername() const -{ - return _proxyConfig.username; -} - - -inline const std::string& HTTPClientSession::getProxyPassword() const -{ - return _proxyConfig.password; -} - - -inline const HTTPClientSession::ProxyConfig& HTTPClientSession::getProxyConfig() const -{ - return _proxyConfig; -} - - -inline const HTTPClientSession::ProxyConfig& HTTPClientSession::getGlobalProxyConfig() -{ - return _globalProxyConfig; -} - - -inline const Poco::Timespan& HTTPClientSession::getKeepAliveTimeout() const -{ - return _keepAliveTimeout; -} - - -} } // namespace Poco::Net - - -#endif // Net_HTTPClientSession_INCLUDED +// +// HTTPClientSession.h +// +// Library: Net +// Package: HTTPClient +// Module: HTTPClientSession +// +// Definition of the HTTPClientSession class. +// +// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. +// and Contributors. +// +// SPDX-License-Identifier: BSL-1.0 +// + + +#ifndef Net_HTTPClientSession_INCLUDED +#define Net_HTTPClientSession_INCLUDED + + +#include "Poco/Net/Net.h" +#include "Poco/Net/HTTPSession.h" +#include "Poco/Net/SocketAddress.h" +#include "Poco/SharedPtr.h" +#include <istream> +#include <ostream> + + +namespace Poco { +namespace Net { + + +class HTTPRequest; +class HTTPResponse; + + +class Net_API HTTPClientSession: public HTTPSession + /// This class implements the client-side of + /// a HTTP session. + /// + /// To send a HTTP request to a HTTP server, first + /// instantiate a HTTPClientSession object and + /// specify the server's host name and port number. + /// + /// Then create a HTTPRequest object, fill it accordingly, + /// and pass it as argument to the sendRequest() method. + /// + /// sendRequest() will return an output stream that can + /// be used to send the request body, if there is any. + /// + /// After you are done sending the request body, create + /// a HTTPResponse object and pass it to receiveResponse(). + /// + /// This will return an input stream that can be used to + /// read the response body. + /// + /// See RFC 2616 <http://www.faqs.org/rfcs/rfc2616.html> for more + /// information about the HTTP protocol. + /// + /// Proxies and proxy authorization (only HTTP Basic Authorization) + /// is supported. Use setProxy() and setProxyCredentials() to + /// set up a session through a proxy. +{ +public: + struct ProxyConfig + /// HTTP proxy server configuration. + { + ProxyConfig(): + port(HTTP_PORT) + { + } + + std::string host; + /// Proxy server host name or IP address. + Poco::UInt16 port; + /// Proxy server TCP port. + std::string username; + /// Proxy server username. + std::string password; + /// Proxy server password. + std::string nonProxyHosts; + /// A regular expression defining hosts for which the proxy should be bypassed, + /// e.g. "localhost|127\.0\.0\.1|192\.168\.0\.\d+". Can also be an empty + /// string to disable proxy bypassing. + }; + + HTTPClientSession(); + /// Creates an unconnected HTTPClientSession. + + explicit HTTPClientSession(const StreamSocket& socket); + /// Creates a HTTPClientSession using the given socket. + /// The socket must not be connected. The session + /// takes ownership of the socket. + + explicit HTTPClientSession(const SocketAddress& address); + /// Creates a HTTPClientSession using the given address. + + HTTPClientSession(const std::string& host, Poco::UInt16 port = HTTPSession::HTTP_PORT); + /// Creates a HTTPClientSession using the given host and port. + + HTTPClientSession(const std::string& host, Poco::UInt16 port, const ProxyConfig& proxyConfig); + /// Creates a HTTPClientSession using the given host, port and proxy configuration. + + virtual ~HTTPClientSession(); + /// Destroys the HTTPClientSession and closes + /// the underlying socket. + + void setHost(const std::string& host); + /// Sets the host name of the target HTTP server. + /// + /// The host must not be changed once there is an + /// open connection to the server. + + const std::string& getHost() const; + /// Returns the host name of the target HTTP server. + + void setPort(Poco::UInt16 port); + /// Sets the port number of the target HTTP server. + /// + /// The port number must not be changed once there is an + /// open connection to the server. + + Poco::UInt16 getPort() const; + /// Returns the port number of the target HTTP server. + + void setProxy(const std::string& host, Poco::UInt16 port = HTTPSession::HTTP_PORT); + /// Sets the proxy host name and port number. + + void setProxyHost(const std::string& host); + /// Sets the host name of the proxy server. + + void setProxyPort(Poco::UInt16 port); + /// Sets the port number of the proxy server. + + const std::string& getProxyHost() const; + /// Returns the proxy host name. + + Poco::UInt16 getProxyPort() const; + /// Returns the proxy port number. + + void setProxyCredentials(const std::string& username, const std::string& password); + /// Sets the username and password for proxy authentication. + /// Only Basic authentication is supported. + + void setProxyUsername(const std::string& username); + /// Sets the username for proxy authentication. + /// Only Basic authentication is supported. + + const std::string& getProxyUsername() const; + /// Returns the username for proxy authentication. + + void setProxyPassword(const std::string& password); + /// Sets the password for proxy authentication. + /// Only Basic authentication is supported. + + const std::string& getProxyPassword() const; + /// Returns the password for proxy authentication. + + void setProxyConfig(const ProxyConfig& config); + /// Sets the proxy configuration. + + const ProxyConfig& getProxyConfig() const; + /// Returns the proxy configuration. + + static void setGlobalProxyConfig(const ProxyConfig& config); + /// Sets the global proxy configuration. + /// + /// The global proxy configuration is used by all HTTPClientSession + /// instances, unless a different proxy configuration is explicitly set. + /// + /// Warning: Setting the global proxy configuration is not thread safe. + /// The global proxy configuration should be set at start up, before + /// the first HTTPClientSession instance is created. + + static const ProxyConfig& getGlobalProxyConfig(); + /// Returns the global proxy configuration. + + void setKeepAliveTimeout(const Poco::Timespan& timeout); + /// Sets the connection timeout for HTTP connections. + + const Poco::Timespan& getKeepAliveTimeout() const; + /// Returns the connection timeout for HTTP connections. + + virtual std::ostream& sendRequest(HTTPRequest& request); + /// Sends the header for the given HTTP request to + /// the server. + /// + /// The HTTPClientSession will set the request's + /// Host and Keep-Alive headers accordingly. + /// + /// The returned output stream can be used to write + /// the request body. The stream is valid until + /// receiveResponse() is called or the session + /// is destroyed. + /// + /// In case a network or server failure happens + /// while writing the request body to the returned stream, + /// the stream state will change to bad or fail. In this + /// case, reset() should be called if the session will + /// be reused and persistent connections are enabled + /// to ensure a new connection will be set up + /// for the next request. + + virtual std::istream& receiveResponse(HTTPResponse& response); + /// Receives the header for the response to the previous + /// HTTP request. + /// + /// The returned input stream can be used to read + /// the response body. The stream is valid until + /// sendRequest() is called or the session is + /// destroyed. + /// + /// It must be ensured that the response stream + /// is fully consumed before sending a new request + /// and persistent connections are enabled. Otherwise, + /// the unread part of the response body may be treated as + /// part of the next request's response header, resulting + /// in a Poco::Net::MessageException being thrown. + /// + /// In case a network or server failure happens + /// while reading the response body from the returned stream, + /// the stream state will change to bad or fail. In this + /// case, reset() should be called if the session will + /// be reused and persistent connections are enabled + /// to ensure a new connection will be set up + /// for the next request. + + virtual bool peekResponse(HTTPResponse& response); + /// If the request contains a "Expect: 100-continue" header, + /// (see HTTPRequest::setExpectContinue()) this method can be + /// used to check whether the server has sent a 100 Continue response + /// before continuing with the request, i.e. sending the request body, + /// after calling sendRequest(). + /// + /// Returns true if the server has responded with 100 Continue, + /// otherwise false. The HTTPResponse object contains the + /// response sent by the server. + /// + /// In any case, receiveResponse() must be called afterwards as well in + /// order to complete the request. The same HTTPResponse object + /// passed to peekResponse() must also be passed to receiveResponse(). + /// + /// This method should only be called if the request contains + /// a "Expect: 100-continue" header. + + void flushRequest(); + /// Flushes the request stream. + /// + /// Normally this method does not need to be called. + /// It can be used to ensure the request has been + /// fully sent if receiveResponse() is not called, e.g., + /// because the underlying socket will be detached. + + void reset(); + /// Resets the session and closes the socket. + /// + /// The next request will initiate a new connection, + /// even if persistent connections are enabled. + /// + /// This should be called whenever something went + /// wrong when sending a request (e.g., sendRequest() + /// or receiveResponse() throws an exception, or + /// the request or response stream changes into + /// fail or bad state, but not eof state). + + virtual bool secure() const; + /// Return true iff the session uses SSL or TLS, + /// or false otherwise. + + bool bypassProxy() const; + /// Returns true if the proxy should be bypassed + /// for the current host. + +protected: + enum + { + DEFAULT_KEEP_ALIVE_TIMEOUT = 8 + }; + + void reconnect(); + /// Connects the underlying socket to the HTTP server. + + int write(const char* buffer, std::streamsize length); + /// Tries to re-connect if keep-alive is on. + + virtual std::string proxyRequestPrefix() const; + /// Returns the prefix prepended to the URI for proxy requests + /// (e.g., "http://myhost.com"). + + virtual bool mustReconnect() const; + /// Checks if we can reuse a persistent connection. + + virtual void proxyAuthenticate(HTTPRequest& request); + /// Sets the proxy credentials (Proxy-Authorization header), if + /// proxy username and password have been set. + + void proxyAuthenticateImpl(HTTPRequest& request); + /// Sets the proxy credentials (Proxy-Authorization header), if + /// proxy username and password have been set. + + StreamSocket proxyConnect(); + /// Sends a CONNECT request to the proxy server and returns + /// a StreamSocket for the resulting connection. + + void proxyTunnel(); + /// Calls proxyConnect() and attaches the resulting StreamSocket + /// to the HTTPClientSession. + +private: + std::string _host; + Poco::UInt16 _port; + ProxyConfig _proxyConfig; + Poco::Timespan _keepAliveTimeout; + Poco::Timestamp _lastRequest; + bool _reconnect; + bool _mustReconnect; + bool _expectResponseBody; + bool _responseReceived; + Poco::SharedPtr<std::ostream> _pRequestStream; + Poco::SharedPtr<std::istream> _pResponseStream; + + static ProxyConfig _globalProxyConfig; + + HTTPClientSession(const HTTPClientSession&); + HTTPClientSession& operator = (const HTTPClientSession&); + + friend class WebSocket; +}; + + +// +// inlines +// +inline const std::string& HTTPClientSession::getHost() const +{ + return _host; +} + + +inline Poco::UInt16 HTTPClientSession::getPort() const +{ + return _port; +} + + +inline const std::string& HTTPClientSession::getProxyHost() const +{ + return _proxyConfig.host; +} + + +inline Poco::UInt16 HTTPClientSession::getProxyPort() const +{ + return _proxyConfig.port; +} + + +inline const std::string& HTTPClientSession::getProxyUsername() const +{ + return _proxyConfig.username; +} + + +inline const std::string& HTTPClientSession::getProxyPassword() const +{ + return _proxyConfig.password; +} + + +inline const HTTPClientSession::ProxyConfig& HTTPClientSession::getProxyConfig() const +{ + return _proxyConfig; +} + + +inline const HTTPClientSession::ProxyConfig& HTTPClientSession::getGlobalProxyConfig() +{ + return _globalProxyConfig; +} + + +inline const Poco::Timespan& HTTPClientSession::getKeepAliveTimeout() const +{ + return _keepAliveTimeout; +} + + +} } // namespace Poco::Net + + +#endif // Net_HTTPClientSession_INCLUDED diff --git a/contrib/libs/poco/Net/include/Poco/Net/HTTPCookie.h b/contrib/libs/poco/Net/include/Poco/Net/HTTPCookie.h index f525a107d9..c7c47b2e0a 100644 --- a/contrib/libs/poco/Net/include/Poco/Net/HTTPCookie.h +++ b/contrib/libs/poco/Net/include/Poco/Net/HTTPCookie.h @@ -1,272 +1,272 @@ -// -// HTTPCookie.h -// -// Library: Net -// Package: HTTP -// Module: HTTPCookie -// -// Definition of the HTTPCookie class. -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Net_HTTPCookie_INCLUDED -#define Net_HTTPCookie_INCLUDED - - -#include "Poco/Net/Net.h" - - -namespace Poco { -namespace Net { - - -class NameValueCollection; - - -class Net_API HTTPCookie - /// This class represents a HTTP Cookie. - /// - /// A cookie is a small amount of information sent by a Web - /// server to a Web browser, saved by the browser, and later sent back - /// to the server. A cookie's value can uniquely identify a client, so - /// cookies are commonly used for session management. - /// - /// A cookie has a name, a single value, and optional attributes such - /// as a comment, path and domain qualifiers, a maximum age, and a - /// version number. - /// - /// This class supports both the Version 0 (by Netscape) and Version 1 - /// (by RFC 2109) cookie specifications. By default, cookies are created - /// using Version 0 to ensure the best interoperability. -{ -public: - HTTPCookie(); - /// Creates an empty HTTPCookie. - - explicit HTTPCookie(const std::string& name); - /// Creates a cookie with the given name. - /// The cookie never expires. - - explicit HTTPCookie(const NameValueCollection& nvc); - /// Creates a cookie from the given NameValueCollection. - - HTTPCookie(const std::string& name, const std::string& value); - /// Creates a cookie with the given name and value. - /// The cookie never expires. - /// - /// Note: If value contains whitespace or non-alphanumeric - /// characters, the value should be escaped by calling escape() - /// before passing it to the constructor. - - HTTPCookie(const HTTPCookie& cookie); - /// Creates the HTTPCookie by copying another one. - - ~HTTPCookie(); - /// Destroys the HTTPCookie. - - HTTPCookie& operator = (const HTTPCookie& cookie); - /// Assigns a cookie. - - void setVersion(int version); - /// Sets the version of the cookie. - /// - /// Version must be either 0 (denoting a Netscape cookie) - /// or 1 (denoting a RFC 2109 cookie). - - int getVersion() const; - /// Returns the version of the cookie, which is - /// either 0 or 1. - - void setName(const std::string& name); - /// Sets the name of the cookie. - - const std::string& getName() const; - /// Returns the name of the cookie. - - void setValue(const std::string& value); - /// Sets the value of the cookie. - /// - /// According to the cookie specification, the - /// size of the value should not exceed 4 Kbytes. - /// - /// Note: If value contains whitespace or non-alphanumeric - /// characters, the value should be escaped by calling escape() - /// prior to passing it to setName(). - - const std::string& getValue() const; - /// Returns the value of the cookie. - - void setComment(const std::string& comment); - /// Sets the comment for the cookie. - /// - /// Comments are only supported for version 1 cookies. - - const std::string& getComment() const; - /// Returns the comment for the cookie. - - void setDomain(const std::string& domain); - /// Sets the domain for the cookie. - - const std::string& getDomain() const; - /// Returns the domain for the cookie. - - void setPath(const std::string& path); - /// Sets the path for the cookie. - - void setPriority(const std::string& priority); - /// Sets the priority for the cookie. - - const std::string& getPath() const; - /// Returns the path for the cookie. - - const std::string& getPriority() const; - /// Returns the priority for the cookie. - - void setSecure(bool secure); - /// Sets the value of the secure flag for - /// the cookie. - - bool getSecure() const; - /// Returns the value of the secure flag - /// for the cookie. - - void setMaxAge(int maxAge); - /// Sets the maximum age in seconds for - /// the cookie. - /// - /// A value of -1 (default) causes the cookie - /// to become a session cookie, which will - /// be deleted when the browser window - /// is closed. - /// - /// A value of 0 deletes the cookie on - /// the client. - - int getMaxAge() const; - /// Returns the maximum age in seconds for - /// the cookie. - - void setHttpOnly(bool flag = true); - /// Sets the HttpOnly flag for the cookie. - - bool getHttpOnly() const; - /// Returns true iff the cookie's HttpOnly flag is set. - - std::string toString() const; - /// Returns a string representation of the cookie, - /// suitable for use in a Set-Cookie header. - - static std::string escape(const std::string& str); - /// Escapes the given string by replacing all - /// non-alphanumeric characters with escape - /// sequences in the form %xx, where xx is the - /// hexadecimal character code. - /// - /// The following characters will be replaced - /// with escape sequences: - /// - percent sign % - /// - less-than and greater-than < and > - /// - curly brackets { and } - /// - square brackets [ and ] - /// - parenthesis ( and ) - /// - solidus / - /// - vertical line | - /// - reverse solidus (backslash /) - /// - quotation mark " - /// - apostrophe ' - /// - circumflex accent ^ - /// - grave accent ` - /// - comma and semicolon , and ; - /// - whitespace and control characters - - static std::string unescape(const std::string& str); - /// Unescapes the given string by replacing all - /// escape sequences in the form %xx with the - /// respective characters. - -private: - int _version; - std::string _name; - std::string _value; - std::string _comment; - std::string _domain; - std::string _path; - std::string _priority; - bool _secure; - int _maxAge; - bool _httpOnly; -}; - - -// -// inlines -// -inline int HTTPCookie::getVersion() const -{ - return _version; -} - - -inline const std::string& HTTPCookie::getName() const -{ - return _name; -} - - -inline const std::string& HTTPCookie::getValue() const -{ - return _value; -} - - -inline const std::string& HTTPCookie::getComment() const -{ - return _comment; -} - - -inline const std::string& HTTPCookie::getDomain() const -{ - return _domain; -} - - -inline const std::string& HTTPCookie::getPath() const -{ - return _path; -} - - -inline const std::string& HTTPCookie::getPriority() const -{ - return _priority; -} - - -inline bool HTTPCookie::getSecure() const -{ - return _secure; -} - - -inline int HTTPCookie::getMaxAge() const -{ - return _maxAge; -} - - -inline bool HTTPCookie::getHttpOnly() const -{ - return _httpOnly; -} - - -} } // namespace Poco::Net - - -#endif // Net_HTTPCookie_INCLUDED +// +// HTTPCookie.h +// +// Library: Net +// Package: HTTP +// Module: HTTPCookie +// +// Definition of the HTTPCookie class. +// +// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. +// and Contributors. +// +// SPDX-License-Identifier: BSL-1.0 +// + + +#ifndef Net_HTTPCookie_INCLUDED +#define Net_HTTPCookie_INCLUDED + + +#include "Poco/Net/Net.h" + + +namespace Poco { +namespace Net { + + +class NameValueCollection; + + +class Net_API HTTPCookie + /// This class represents a HTTP Cookie. + /// + /// A cookie is a small amount of information sent by a Web + /// server to a Web browser, saved by the browser, and later sent back + /// to the server. A cookie's value can uniquely identify a client, so + /// cookies are commonly used for session management. + /// + /// A cookie has a name, a single value, and optional attributes such + /// as a comment, path and domain qualifiers, a maximum age, and a + /// version number. + /// + /// This class supports both the Version 0 (by Netscape) and Version 1 + /// (by RFC 2109) cookie specifications. By default, cookies are created + /// using Version 0 to ensure the best interoperability. +{ +public: + HTTPCookie(); + /// Creates an empty HTTPCookie. + + explicit HTTPCookie(const std::string& name); + /// Creates a cookie with the given name. + /// The cookie never expires. + + explicit HTTPCookie(const NameValueCollection& nvc); + /// Creates a cookie from the given NameValueCollection. + + HTTPCookie(const std::string& name, const std::string& value); + /// Creates a cookie with the given name and value. + /// The cookie never expires. + /// + /// Note: If value contains whitespace or non-alphanumeric + /// characters, the value should be escaped by calling escape() + /// before passing it to the constructor. + + HTTPCookie(const HTTPCookie& cookie); + /// Creates the HTTPCookie by copying another one. + + ~HTTPCookie(); + /// Destroys the HTTPCookie. + + HTTPCookie& operator = (const HTTPCookie& cookie); + /// Assigns a cookie. + + void setVersion(int version); + /// Sets the version of the cookie. + /// + /// Version must be either 0 (denoting a Netscape cookie) + /// or 1 (denoting a RFC 2109 cookie). + + int getVersion() const; + /// Returns the version of the cookie, which is + /// either 0 or 1. + + void setName(const std::string& name); + /// Sets the name of the cookie. + + const std::string& getName() const; + /// Returns the name of the cookie. + + void setValue(const std::string& value); + /// Sets the value of the cookie. + /// + /// According to the cookie specification, the + /// size of the value should not exceed 4 Kbytes. + /// + /// Note: If value contains whitespace or non-alphanumeric + /// characters, the value should be escaped by calling escape() + /// prior to passing it to setName(). + + const std::string& getValue() const; + /// Returns the value of the cookie. + + void setComment(const std::string& comment); + /// Sets the comment for the cookie. + /// + /// Comments are only supported for version 1 cookies. + + const std::string& getComment() const; + /// Returns the comment for the cookie. + + void setDomain(const std::string& domain); + /// Sets the domain for the cookie. + + const std::string& getDomain() const; + /// Returns the domain for the cookie. + + void setPath(const std::string& path); + /// Sets the path for the cookie. + + void setPriority(const std::string& priority); + /// Sets the priority for the cookie. + + const std::string& getPath() const; + /// Returns the path for the cookie. + + const std::string& getPriority() const; + /// Returns the priority for the cookie. + + void setSecure(bool secure); + /// Sets the value of the secure flag for + /// the cookie. + + bool getSecure() const; + /// Returns the value of the secure flag + /// for the cookie. + + void setMaxAge(int maxAge); + /// Sets the maximum age in seconds for + /// the cookie. + /// + /// A value of -1 (default) causes the cookie + /// to become a session cookie, which will + /// be deleted when the browser window + /// is closed. + /// + /// A value of 0 deletes the cookie on + /// the client. + + int getMaxAge() const; + /// Returns the maximum age in seconds for + /// the cookie. + + void setHttpOnly(bool flag = true); + /// Sets the HttpOnly flag for the cookie. + + bool getHttpOnly() const; + /// Returns true iff the cookie's HttpOnly flag is set. + + std::string toString() const; + /// Returns a string representation of the cookie, + /// suitable for use in a Set-Cookie header. + + static std::string escape(const std::string& str); + /// Escapes the given string by replacing all + /// non-alphanumeric characters with escape + /// sequences in the form %xx, where xx is the + /// hexadecimal character code. + /// + /// The following characters will be replaced + /// with escape sequences: + /// - percent sign % + /// - less-than and greater-than < and > + /// - curly brackets { and } + /// - square brackets [ and ] + /// - parenthesis ( and ) + /// - solidus / + /// - vertical line | + /// - reverse solidus (backslash /) + /// - quotation mark " + /// - apostrophe ' + /// - circumflex accent ^ + /// - grave accent ` + /// - comma and semicolon , and ; + /// - whitespace and control characters + + static std::string unescape(const std::string& str); + /// Unescapes the given string by replacing all + /// escape sequences in the form %xx with the + /// respective characters. + +private: + int _version; + std::string _name; + std::string _value; + std::string _comment; + std::string _domain; + std::string _path; + std::string _priority; + bool _secure; + int _maxAge; + bool _httpOnly; +}; + + +// +// inlines +// +inline int HTTPCookie::getVersion() const +{ + return _version; +} + + +inline const std::string& HTTPCookie::getName() const +{ + return _name; +} + + +inline const std::string& HTTPCookie::getValue() const +{ + return _value; +} + + +inline const std::string& HTTPCookie::getComment() const +{ + return _comment; +} + + +inline const std::string& HTTPCookie::getDomain() const +{ + return _domain; +} + + +inline const std::string& HTTPCookie::getPath() const +{ + return _path; +} + + +inline const std::string& HTTPCookie::getPriority() const +{ + return _priority; +} + + +inline bool HTTPCookie::getSecure() const +{ + return _secure; +} + + +inline int HTTPCookie::getMaxAge() const +{ + return _maxAge; +} + + +inline bool HTTPCookie::getHttpOnly() const +{ + return _httpOnly; +} + + +} } // namespace Poco::Net + + +#endif // Net_HTTPCookie_INCLUDED diff --git a/contrib/libs/poco/Net/include/Poco/Net/HTTPCredentials.h b/contrib/libs/poco/Net/include/Poco/Net/HTTPCredentials.h index 9c26ac7b97..e62b8c2467 100644 --- a/contrib/libs/poco/Net/include/Poco/Net/HTTPCredentials.h +++ b/contrib/libs/poco/Net/include/Poco/Net/HTTPCredentials.h @@ -1,206 +1,206 @@ -// -// HTTPCredentials.h -// -// Library: Net -// Package: HTTP -// Module: HTTPCredentials -// -// Definition of the HTTPCredentials class. -// -// Copyright (c) 2011, Anton V. Yabchinskiy (arn at bestmx dot ru). -// Copyright (c) 2012, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Net_HTTPCredentials_INCLUDED -#define Net_HTTPCredentials_INCLUDED - - -#include "Poco/Net/HTTPDigestCredentials.h" - - -namespace Poco { - - -class URI; - - -namespace Net { - - -class HTTPRequest; -class HTTPResponse; - - -class Net_API HTTPCredentials - /// This is a utility class for working with HTTP - /// authentication (Basic or Digest) in HTTPRequest objects. - /// - /// Usage is as follows: - /// First, create a HTTPCredentials object containing - /// the username and password. - /// Poco::Net::HTTPCredentials creds("user", "s3cr3t"); - /// - /// Second, send the HTTP request with Poco::Net::HTTPClientSession. - /// Poco::Net::HTTPClientSession session("pocoproject.org"); - /// Poco::Net::HTTPRequest request(HTTPRequest::HTTP_GET, "/index.html", HTTPMessage::HTTP_1_1); - /// session.sendRequest(request); - /// Poco::Net::HTTPResponse; - /// std::istream& istr = session.receiveResponse(response); - /// - /// If the server responds with a 401 status, authenticate the - /// request and resend it: - /// if (response.getStatus() == Poco::Net::HTTPResponse::HTTP_UNAUTHORIZED) - /// { - /// creds.authenticate(request, response); - /// session.sendRequest(request); - /// ... - /// } - /// - /// To perform multiple authenticated requests, call updateAuthInfo() - /// instead of authenticate() on subsequent requests. - /// creds.updateAuthInfo(request); - /// session.sendRequest(request); - /// ... - /// - /// Note: Do not forget to read the entire response stream from the 401 response - /// before sending the authenticated request, otherwise there may be - /// problems if a persistent connection is used. -{ -public: - HTTPCredentials(); - /// Creates an empty HTTPCredentials object. - - HTTPCredentials(const std::string& username, const std::string& password); - /// Creates an HTTPCredentials object with the given username and password. - - ~HTTPCredentials(); - /// Destroys the HTTPCredentials. - - void fromUserInfo(const std::string& userInfo); - /// Parses username:password string and sets username and password of - /// the credentials object. - /// Throws SyntaxException on invalid user information. - - void fromURI(const URI& uri); - /// Extracts username and password from the given URI and sets username - /// and password of the credentials object. - /// Does nothing if URI has no user info part. - - void clear(); - /// Clears username, password and host. - - void setUsername(const std::string& username); - /// Sets the username. - - const std::string& getUsername() const; - /// Returns the username. - - void setPassword(const std::string& password); - /// Sets the password. - - const std::string& getPassword() const; - /// Returns the password. - - bool empty() const; - /// Returns true if both username and password are empty, otherwise false. - - void authenticate(HTTPRequest& request, const HTTPResponse& response); - /// Inspects WWW-Authenticate header of the response, initializes - /// the internal state (in case of digest authentication) and - /// adds required information to the given HTTPRequest. - /// - /// Does nothing if there is no WWW-Authenticate header in the - /// HTTPResponse. - - void updateAuthInfo(HTTPRequest& request); - /// Updates internal state (in case of digest authentication) and - /// replaces authentication information in the request accordingly. - - void proxyAuthenticate(HTTPRequest& request, const HTTPResponse& response); - /// Inspects Proxy-Authenticate header of the response, initializes - /// the internal state (in case of digest authentication) and - /// adds required information to the given HTTPRequest. - /// - /// Does nothing if there is no Proxy-Authenticate header in the - /// HTTPResponse. - - void updateProxyAuthInfo(HTTPRequest& request); - /// Updates internal state (in case of digest authentication) and - /// replaces proxy authentication information in the request accordingly. - - static bool isBasicCredentials(const std::string& header); - /// Returns true if authentication header is for Basic authentication. - - static bool isDigestCredentials(const std::string& header); - /// Returns true if authentication header is for Digest authentication. - - static bool hasBasicCredentials(const HTTPRequest& request); - /// Returns true if an Authorization header with Basic credentials is present in the request. - - static bool hasDigestCredentials(const HTTPRequest& request); - /// Returns true if an Authorization header with Digest credentials is present in the request. - - static bool hasNTLMCredentials(const HTTPRequest& request); - /// Returns true if an Authorization header with NTLM credentials is present in the request. - - static bool hasProxyBasicCredentials(const HTTPRequest& request); - /// Returns true if a Proxy-Authorization header with Basic credentials is present in the request. - - static bool hasProxyDigestCredentials(const HTTPRequest& request); - /// Returns true if a Proxy-Authorization header with Digest credentials is present in the request. - - static void extractCredentials(const std::string& userInfo, std::string& username, std::string& password); - /// Extracts username and password from user:password information string. - - static void extractCredentials(const Poco::URI& uri, std::string& username, std::string& password); - /// Extracts username and password from the given URI (e.g.: "http://user:pass@sample.com/secret"). - -private: - HTTPCredentials(const HTTPCredentials&); - HTTPCredentials& operator = (const HTTPCredentials&); - - HTTPDigestCredentials _digest; -}; - - -// -// inlines -// -inline void HTTPCredentials::setUsername(const std::string& username) -{ - _digest.setUsername(username); -} - - -inline const std::string& HTTPCredentials::getUsername() const -{ - return _digest.getUsername(); -} - - -inline void HTTPCredentials::setPassword(const std::string& password) -{ - _digest.setPassword(password); -} - - -inline const std::string& HTTPCredentials::getPassword() const -{ - return _digest.getPassword(); -} - - -inline bool HTTPCredentials::empty() const -{ - return _digest.empty(); -} - - -} } // namespace Poco::Net - - -#endif // Net_HTTPCredentials_INCLUDED +// +// HTTPCredentials.h +// +// Library: Net +// Package: HTTP +// Module: HTTPCredentials +// +// Definition of the HTTPCredentials class. +// +// Copyright (c) 2011, Anton V. Yabchinskiy (arn at bestmx dot ru). +// Copyright (c) 2012, Applied Informatics Software Engineering GmbH. +// and Contributors. +// +// SPDX-License-Identifier: BSL-1.0 +// + + +#ifndef Net_HTTPCredentials_INCLUDED +#define Net_HTTPCredentials_INCLUDED + + +#include "Poco/Net/HTTPDigestCredentials.h" + + +namespace Poco { + + +class URI; + + +namespace Net { + + +class HTTPRequest; +class HTTPResponse; + + +class Net_API HTTPCredentials + /// This is a utility class for working with HTTP + /// authentication (Basic or Digest) in HTTPRequest objects. + /// + /// Usage is as follows: + /// First, create a HTTPCredentials object containing + /// the username and password. + /// Poco::Net::HTTPCredentials creds("user", "s3cr3t"); + /// + /// Second, send the HTTP request with Poco::Net::HTTPClientSession. + /// Poco::Net::HTTPClientSession session("pocoproject.org"); + /// Poco::Net::HTTPRequest request(HTTPRequest::HTTP_GET, "/index.html", HTTPMessage::HTTP_1_1); + /// session.sendRequest(request); + /// Poco::Net::HTTPResponse; + /// std::istream& istr = session.receiveResponse(response); + /// + /// If the server responds with a 401 status, authenticate the + /// request and resend it: + /// if (response.getStatus() == Poco::Net::HTTPResponse::HTTP_UNAUTHORIZED) + /// { + /// creds.authenticate(request, response); + /// session.sendRequest(request); + /// ... + /// } + /// + /// To perform multiple authenticated requests, call updateAuthInfo() + /// instead of authenticate() on subsequent requests. + /// creds.updateAuthInfo(request); + /// session.sendRequest(request); + /// ... + /// + /// Note: Do not forget to read the entire response stream from the 401 response + /// before sending the authenticated request, otherwise there may be + /// problems if a persistent connection is used. +{ +public: + HTTPCredentials(); + /// Creates an empty HTTPCredentials object. + + HTTPCredentials(const std::string& username, const std::string& password); + /// Creates an HTTPCredentials object with the given username and password. + + ~HTTPCredentials(); + /// Destroys the HTTPCredentials. + + void fromUserInfo(const std::string& userInfo); + /// Parses username:password string and sets username and password of + /// the credentials object. + /// Throws SyntaxException on invalid user information. + + void fromURI(const URI& uri); + /// Extracts username and password from the given URI and sets username + /// and password of the credentials object. + /// Does nothing if URI has no user info part. + + void clear(); + /// Clears username, password and host. + + void setUsername(const std::string& username); + /// Sets the username. + + const std::string& getUsername() const; + /// Returns the username. + + void setPassword(const std::string& password); + /// Sets the password. + + const std::string& getPassword() const; + /// Returns the password. + + bool empty() const; + /// Returns true if both username and password are empty, otherwise false. + + void authenticate(HTTPRequest& request, const HTTPResponse& response); + /// Inspects WWW-Authenticate header of the response, initializes + /// the internal state (in case of digest authentication) and + /// adds required information to the given HTTPRequest. + /// + /// Does nothing if there is no WWW-Authenticate header in the + /// HTTPResponse. + + void updateAuthInfo(HTTPRequest& request); + /// Updates internal state (in case of digest authentication) and + /// replaces authentication information in the request accordingly. + + void proxyAuthenticate(HTTPRequest& request, const HTTPResponse& response); + /// Inspects Proxy-Authenticate header of the response, initializes + /// the internal state (in case of digest authentication) and + /// adds required information to the given HTTPRequest. + /// + /// Does nothing if there is no Proxy-Authenticate header in the + /// HTTPResponse. + + void updateProxyAuthInfo(HTTPRequest& request); + /// Updates internal state (in case of digest authentication) and + /// replaces proxy authentication information in the request accordingly. + + static bool isBasicCredentials(const std::string& header); + /// Returns true if authentication header is for Basic authentication. + + static bool isDigestCredentials(const std::string& header); + /// Returns true if authentication header is for Digest authentication. + + static bool hasBasicCredentials(const HTTPRequest& request); + /// Returns true if an Authorization header with Basic credentials is present in the request. + + static bool hasDigestCredentials(const HTTPRequest& request); + /// Returns true if an Authorization header with Digest credentials is present in the request. + + static bool hasNTLMCredentials(const HTTPRequest& request); + /// Returns true if an Authorization header with NTLM credentials is present in the request. + + static bool hasProxyBasicCredentials(const HTTPRequest& request); + /// Returns true if a Proxy-Authorization header with Basic credentials is present in the request. + + static bool hasProxyDigestCredentials(const HTTPRequest& request); + /// Returns true if a Proxy-Authorization header with Digest credentials is present in the request. + + static void extractCredentials(const std::string& userInfo, std::string& username, std::string& password); + /// Extracts username and password from user:password information string. + + static void extractCredentials(const Poco::URI& uri, std::string& username, std::string& password); + /// Extracts username and password from the given URI (e.g.: "http://user:pass@sample.com/secret"). + +private: + HTTPCredentials(const HTTPCredentials&); + HTTPCredentials& operator = (const HTTPCredentials&); + + HTTPDigestCredentials _digest; +}; + + +// +// inlines +// +inline void HTTPCredentials::setUsername(const std::string& username) +{ + _digest.setUsername(username); +} + + +inline const std::string& HTTPCredentials::getUsername() const +{ + return _digest.getUsername(); +} + + +inline void HTTPCredentials::setPassword(const std::string& password) +{ + _digest.setPassword(password); +} + + +inline const std::string& HTTPCredentials::getPassword() const +{ + return _digest.getPassword(); +} + + +inline bool HTTPCredentials::empty() const +{ + return _digest.empty(); +} + + +} } // namespace Poco::Net + + +#endif // Net_HTTPCredentials_INCLUDED diff --git a/contrib/libs/poco/Net/include/Poco/Net/HTTPDigestCredentials.h b/contrib/libs/poco/Net/include/Poco/Net/HTTPDigestCredentials.h index 857d2f31fb..c321c9fc87 100644 --- a/contrib/libs/poco/Net/include/Poco/Net/HTTPDigestCredentials.h +++ b/contrib/libs/poco/Net/include/Poco/Net/HTTPDigestCredentials.h @@ -1,186 +1,186 @@ -// -// HTTPDigestCredentials.h -// -// Library: Net -// Package: HTTP -// Module: HTTPDigestCredentials -// -// Definition of the HTTPDigestCredentials class. -// -// Copyright (c) 2011, Anton V. Yabchinskiy (arn at bestmx dot ru). -// Copyright (c) 2012, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Net_HTTPDigestCredentials_INCLUDED -#define Net_HTTPDigestCredentials_INCLUDED - - -#include "Poco/Net/HTTPAuthenticationParams.h" -#include "Poco/Mutex.h" -#include <map> - - -namespace Poco { -namespace Net { - - -class HTTPRequest; -class HTTPResponse; - - -class Net_API HTTPDigestCredentials - /// This is a utility class for working with - /// HTTP Digest Authentication in HTTPRequest - /// objects. - /// - /// Note: currently, no qop or qop=auth is - /// supported only. -{ -public: - HTTPDigestCredentials(); - /// Creates an empty HTTPDigestCredentials object. - - HTTPDigestCredentials(const std::string& username, const std::string& password); - /// Creates a HTTPDigestCredentials object with the given username and password. - - ~HTTPDigestCredentials(); - /// Destroys the HTTPDigestCredentials. - - void reset(); - /// Resets the HTTPDigestCredentials object to a clean state. - /// Does not clear username and password. - - void clear(); - /// Clears both username and password. - - void setUsername(const std::string& username); - /// Sets the username. - - const std::string& getUsername() const; - /// Returns the username. - - void setPassword(const std::string& password); - /// Sets the password. - - const std::string& getPassword() const; - /// Returns the password. - - bool empty() const; - /// Returns true if both username and password are empty, otherwise false. - - void authenticate(HTTPRequest& request, const HTTPResponse& response); - /// Parses WWW-Authenticate header of the HTTPResponse, initializes - /// internal state, and adds authentication information to the given HTTPRequest. - - void authenticate(HTTPRequest& request, const HTTPAuthenticationParams& responseAuthParams); - /// Initializes internal state according to information from the - /// HTTPAuthenticationParams of the response, and adds authentication - /// information to the given HTTPRequest. - /// - /// Throws InvalidArgumentException if HTTPAuthenticationParams is - /// invalid or some required parameter is missing. - /// Throws NotImplementedException in case of unsupported digest - /// algorithm or quality of protection method. - - void updateAuthInfo(HTTPRequest& request); - /// Updates internal state and adds authentication information to - /// the given HTTPRequest. - - void proxyAuthenticate(HTTPRequest& request, const HTTPResponse& response); - /// Parses Proxy-Authenticate header of the HTTPResponse, initializes - /// internal state, and adds proxy authentication information to the given HTTPRequest. - - void proxyAuthenticate(HTTPRequest& request, const HTTPAuthenticationParams& responseAuthParams); - /// Initializes internal state according to information from the - /// HTTPAuthenticationParams of the response, and adds proxy authentication - /// information to the given HTTPRequest. - /// - /// Throws InvalidArgumentException if HTTPAuthenticationParams is - /// invalid or some required parameter is missing. - /// Throws NotImplementedException in case of unsupported digest - /// algorithm or quality of protection method. - - void updateProxyAuthInfo(HTTPRequest& request); - /// Updates internal state and adds proxy authentication information to - /// the given HTTPRequest. - - bool verifyAuthInfo(const HTTPRequest& request) const; - /// Verifies the digest authentication information in the given HTTPRequest - /// by recomputing the response and comparing it with what's in the request. - /// - /// Note: This method creates a HTTPAuthenticationParams object from the request - /// and calls verifyAuthParams() with request and params. - - bool verifyAuthParams(const HTTPRequest& request, const HTTPAuthenticationParams& params) const; - /// Verifies the digest authentication information in the given HTTPRequest - /// and HTTPAuthenticationParams by recomputing the response and comparing - /// it with what's in the request. - - static std::string createNonce(); - /// Creates a random nonce string. - - static const std::string SCHEME; - -private: - HTTPDigestCredentials(const HTTPDigestCredentials&); - HTTPDigestCredentials& operator = (const HTTPDigestCredentials&); - - void createAuthParams(const HTTPRequest& request, const HTTPAuthenticationParams& responseAuthParams); - void updateAuthParams(const HTTPRequest& request); - int updateNonceCounter(const std::string& nonce); - - static const std::string DEFAULT_ALGORITHM; - static const std::string DEFAULT_QOP; - static const std::string NONCE_PARAM; - static const std::string REALM_PARAM; - static const std::string QOP_PARAM; - static const std::string ALGORITHM_PARAM; - static const std::string USERNAME_PARAM; - static const std::string OPAQUE_PARAM; - static const std::string URI_PARAM; - static const std::string RESPONSE_PARAM; - static const std::string AUTH_PARAM; - static const std::string CNONCE_PARAM; - static const std::string NC_PARAM; - - typedef std::map<std::string, int> NonceCounterMap; - - std::string _username; - std::string _password; - HTTPAuthenticationParams _requestAuthParams; - NonceCounterMap _nc; - - static int _nonceCounter; - static Poco::FastMutex _nonceMutex; -}; - - -// -// inlines -// -inline const std::string& HTTPDigestCredentials::getUsername() const -{ - return _username; -} - - -inline const std::string& HTTPDigestCredentials::getPassword() const -{ - return _password; -} - - -inline bool HTTPDigestCredentials::empty() const -{ - return _username.empty() && _password.empty(); -} - - -} } // namespace Poco::Net - - -#endif // Net_HTTPDigestCredentials_INCLUDED +// +// HTTPDigestCredentials.h +// +// Library: Net +// Package: HTTP +// Module: HTTPDigestCredentials +// +// Definition of the HTTPDigestCredentials class. +// +// Copyright (c) 2011, Anton V. Yabchinskiy (arn at bestmx dot ru). +// Copyright (c) 2012, Applied Informatics Software Engineering GmbH. +// and Contributors. +// +// SPDX-License-Identifier: BSL-1.0 +// + + +#ifndef Net_HTTPDigestCredentials_INCLUDED +#define Net_HTTPDigestCredentials_INCLUDED + + +#include "Poco/Net/HTTPAuthenticationParams.h" +#include "Poco/Mutex.h" +#include <map> + + +namespace Poco { +namespace Net { + + +class HTTPRequest; +class HTTPResponse; + + +class Net_API HTTPDigestCredentials + /// This is a utility class for working with + /// HTTP Digest Authentication in HTTPRequest + /// objects. + /// + /// Note: currently, no qop or qop=auth is + /// supported only. +{ +public: + HTTPDigestCredentials(); + /// Creates an empty HTTPDigestCredentials object. + + HTTPDigestCredentials(const std::string& username, const std::string& password); + /// Creates a HTTPDigestCredentials object with the given username and password. + + ~HTTPDigestCredentials(); + /// Destroys the HTTPDigestCredentials. + + void reset(); + /// Resets the HTTPDigestCredentials object to a clean state. + /// Does not clear username and password. + + void clear(); + /// Clears both username and password. + + void setUsername(const std::string& username); + /// Sets the username. + + const std::string& getUsername() const; + /// Returns the username. + + void setPassword(const std::string& password); + /// Sets the password. + + const std::string& getPassword() const; + /// Returns the password. + + bool empty() const; + /// Returns true if both username and password are empty, otherwise false. + + void authenticate(HTTPRequest& request, const HTTPResponse& response); + /// Parses WWW-Authenticate header of the HTTPResponse, initializes + /// internal state, and adds authentication information to the given HTTPRequest. + + void authenticate(HTTPRequest& request, const HTTPAuthenticationParams& responseAuthParams); + /// Initializes internal state according to information from the + /// HTTPAuthenticationParams of the response, and adds authentication + /// information to the given HTTPRequest. + /// + /// Throws InvalidArgumentException if HTTPAuthenticationParams is + /// invalid or some required parameter is missing. + /// Throws NotImplementedException in case of unsupported digest + /// algorithm or quality of protection method. + + void updateAuthInfo(HTTPRequest& request); + /// Updates internal state and adds authentication information to + /// the given HTTPRequest. + + void proxyAuthenticate(HTTPRequest& request, const HTTPResponse& response); + /// Parses Proxy-Authenticate header of the HTTPResponse, initializes + /// internal state, and adds proxy authentication information to the given HTTPRequest. + + void proxyAuthenticate(HTTPRequest& request, const HTTPAuthenticationParams& responseAuthParams); + /// Initializes internal state according to information from the + /// HTTPAuthenticationParams of the response, and adds proxy authentication + /// information to the given HTTPRequest. + /// + /// Throws InvalidArgumentException if HTTPAuthenticationParams is + /// invalid or some required parameter is missing. + /// Throws NotImplementedException in case of unsupported digest + /// algorithm or quality of protection method. + + void updateProxyAuthInfo(HTTPRequest& request); + /// Updates internal state and adds proxy authentication information to + /// the given HTTPRequest. + + bool verifyAuthInfo(const HTTPRequest& request) const; + /// Verifies the digest authentication information in the given HTTPRequest + /// by recomputing the response and comparing it with what's in the request. + /// + /// Note: This method creates a HTTPAuthenticationParams object from the request + /// and calls verifyAuthParams() with request and params. + + bool verifyAuthParams(const HTTPRequest& request, const HTTPAuthenticationParams& params) const; + /// Verifies the digest authentication information in the given HTTPRequest + /// and HTTPAuthenticationParams by recomputing the response and comparing + /// it with what's in the request. + + static std::string createNonce(); + /// Creates a random nonce string. + + static const std::string SCHEME; + +private: + HTTPDigestCredentials(const HTTPDigestCredentials&); + HTTPDigestCredentials& operator = (const HTTPDigestCredentials&); + + void createAuthParams(const HTTPRequest& request, const HTTPAuthenticationParams& responseAuthParams); + void updateAuthParams(const HTTPRequest& request); + int updateNonceCounter(const std::string& nonce); + + static const std::string DEFAULT_ALGORITHM; + static const std::string DEFAULT_QOP; + static const std::string NONCE_PARAM; + static const std::string REALM_PARAM; + static const std::string QOP_PARAM; + static const std::string ALGORITHM_PARAM; + static const std::string USERNAME_PARAM; + static const std::string OPAQUE_PARAM; + static const std::string URI_PARAM; + static const std::string RESPONSE_PARAM; + static const std::string AUTH_PARAM; + static const std::string CNONCE_PARAM; + static const std::string NC_PARAM; + + typedef std::map<std::string, int> NonceCounterMap; + + std::string _username; + std::string _password; + HTTPAuthenticationParams _requestAuthParams; + NonceCounterMap _nc; + + static int _nonceCounter; + static Poco::FastMutex _nonceMutex; +}; + + +// +// inlines +// +inline const std::string& HTTPDigestCredentials::getUsername() const +{ + return _username; +} + + +inline const std::string& HTTPDigestCredentials::getPassword() const +{ + return _password; +} + + +inline bool HTTPDigestCredentials::empty() const +{ + return _username.empty() && _password.empty(); +} + + +} } // namespace Poco::Net + + +#endif // Net_HTTPDigestCredentials_INCLUDED diff --git a/contrib/libs/poco/Net/include/Poco/Net/HTTPFixedLengthStream.h b/contrib/libs/poco/Net/include/Poco/Net/HTTPFixedLengthStream.h index 112a6a029d..ad781e4e00 100644 --- a/contrib/libs/poco/Net/include/Poco/Net/HTTPFixedLengthStream.h +++ b/contrib/libs/poco/Net/include/Poco/Net/HTTPFixedLengthStream.h @@ -1,110 +1,110 @@ -// -// HTTPFixedLengthStream.h -// -// Library: Net -// Package: HTTP -// Module: HTTPFixedLengthStream -// -// Definition of the HTTPFixedLengthStream class. -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Net_HTTPFixedLengthStream_INCLUDED -#define Net_HTTPFixedLengthStream_INCLUDED - - -#include "Poco/Net/Net.h" -#include "Poco/Net/HTTPBasicStreamBuf.h" -#include <cstddef> -#include <istream> -#include <ostream> - - -namespace Poco { -namespace Net { - - -class HTTPSession; - - -class Net_API HTTPFixedLengthStreamBuf: public HTTPBasicStreamBuf - /// This is the streambuf class used for reading and writing fixed-size - /// HTTP message bodies. - /// - /// At most a given number of bytes are read or written. -{ -public: - typedef HTTPBasicStreamBuf::openmode openmode; - -#if defined(POCO_HAVE_INT64) - typedef Poco::Int64 ContentLength; -#else - typedef std::streamsize ContentLength; -#endif - - HTTPFixedLengthStreamBuf(HTTPSession& session, ContentLength length, openmode mode); - ~HTTPFixedLengthStreamBuf(); - -protected: - int readFromDevice(char* buffer, std::streamsize length); - int writeToDevice(const char* buffer, std::streamsize length); - -private: - HTTPSession& _session; - ContentLength _length; - ContentLength _count; -}; - - -class Net_API HTTPFixedLengthIOS: public virtual std::ios - /// The base class for HTTPFixedLengthInputStream. -{ -public: - HTTPFixedLengthIOS(HTTPSession& session, HTTPFixedLengthStreamBuf::ContentLength length, HTTPFixedLengthStreamBuf::openmode mode); - ~HTTPFixedLengthIOS(); - HTTPFixedLengthStreamBuf* rdbuf(); - -protected: - HTTPFixedLengthStreamBuf _buf; -}; - - -class Net_API HTTPFixedLengthInputStream: public HTTPFixedLengthIOS, public std::istream - /// This class is for internal use by HTTPSession only. -{ -public: - HTTPFixedLengthInputStream(HTTPSession& session, HTTPFixedLengthStreamBuf::ContentLength length); - ~HTTPFixedLengthInputStream(); - - void* operator new(std::size_t size); - void operator delete(void* ptr); - -private: - static Poco::MemoryPool _pool; -}; - - -class Net_API HTTPFixedLengthOutputStream: public HTTPFixedLengthIOS, public std::ostream - /// This class is for internal use by HTTPSession only. -{ -public: - HTTPFixedLengthOutputStream(HTTPSession& session, HTTPFixedLengthStreamBuf::ContentLength length); - ~HTTPFixedLengthOutputStream(); - - void* operator new(std::size_t size); - void operator delete(void* ptr); - -private: - static Poco::MemoryPool _pool; -}; - - -} } // namespace Poco::Net - - -#endif // Net_HTTPFixedLengthStream_INCLUDED +// +// HTTPFixedLengthStream.h +// +// Library: Net +// Package: HTTP +// Module: HTTPFixedLengthStream +// +// Definition of the HTTPFixedLengthStream class. +// +// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. +// and Contributors. +// +// SPDX-License-Identifier: BSL-1.0 +// + + +#ifndef Net_HTTPFixedLengthStream_INCLUDED +#define Net_HTTPFixedLengthStream_INCLUDED + + +#include "Poco/Net/Net.h" +#include "Poco/Net/HTTPBasicStreamBuf.h" +#include <cstddef> +#include <istream> +#include <ostream> + + +namespace Poco { +namespace Net { + + +class HTTPSession; + + +class Net_API HTTPFixedLengthStreamBuf: public HTTPBasicStreamBuf + /// This is the streambuf class used for reading and writing fixed-size + /// HTTP message bodies. + /// + /// At most a given number of bytes are read or written. +{ +public: + typedef HTTPBasicStreamBuf::openmode openmode; + +#if defined(POCO_HAVE_INT64) + typedef Poco::Int64 ContentLength; +#else + typedef std::streamsize ContentLength; +#endif + + HTTPFixedLengthStreamBuf(HTTPSession& session, ContentLength length, openmode mode); + ~HTTPFixedLengthStreamBuf(); + +protected: + int readFromDevice(char* buffer, std::streamsize length); + int writeToDevice(const char* buffer, std::streamsize length); + +private: + HTTPSession& _session; + ContentLength _length; + ContentLength _count; +}; + + +class Net_API HTTPFixedLengthIOS: public virtual std::ios + /// The base class for HTTPFixedLengthInputStream. +{ +public: + HTTPFixedLengthIOS(HTTPSession& session, HTTPFixedLengthStreamBuf::ContentLength length, HTTPFixedLengthStreamBuf::openmode mode); + ~HTTPFixedLengthIOS(); + HTTPFixedLengthStreamBuf* rdbuf(); + +protected: + HTTPFixedLengthStreamBuf _buf; +}; + + +class Net_API HTTPFixedLengthInputStream: public HTTPFixedLengthIOS, public std::istream + /// This class is for internal use by HTTPSession only. +{ +public: + HTTPFixedLengthInputStream(HTTPSession& session, HTTPFixedLengthStreamBuf::ContentLength length); + ~HTTPFixedLengthInputStream(); + + void* operator new(std::size_t size); + void operator delete(void* ptr); + +private: + static Poco::MemoryPool _pool; +}; + + +class Net_API HTTPFixedLengthOutputStream: public HTTPFixedLengthIOS, public std::ostream + /// This class is for internal use by HTTPSession only. +{ +public: + HTTPFixedLengthOutputStream(HTTPSession& session, HTTPFixedLengthStreamBuf::ContentLength length); + ~HTTPFixedLengthOutputStream(); + + void* operator new(std::size_t size); + void operator delete(void* ptr); + +private: + static Poco::MemoryPool _pool; +}; + + +} } // namespace Poco::Net + + +#endif // Net_HTTPFixedLengthStream_INCLUDED diff --git a/contrib/libs/poco/Net/include/Poco/Net/HTTPHeaderStream.h b/contrib/libs/poco/Net/include/Poco/Net/HTTPHeaderStream.h index 6b7f0b1202..f3f4c891b6 100644 --- a/contrib/libs/poco/Net/include/Poco/Net/HTTPHeaderStream.h +++ b/contrib/libs/poco/Net/include/Poco/Net/HTTPHeaderStream.h @@ -1,103 +1,103 @@ -// -// HTTPHeaderStream.h -// -// Library: Net -// Package: HTTP -// Module: HTTPHeaderStream -// -// Definition of the HTTPHeaderStream class. -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Net_HTTPHeaderStream_INCLUDED -#define Net_HTTPHeaderStream_INCLUDED - - -#include "Poco/Net/Net.h" -#include "Poco/Net/HTTPBasicStreamBuf.h" -#include "Poco/MemoryPool.h" -#include <cstddef> -#include <istream> -#include <ostream> - - -namespace Poco { -namespace Net { - - -class HTTPSession; - - -class Net_API HTTPHeaderStreamBuf: public HTTPBasicStreamBuf - /// This is the streambuf class used for reading from a HTTP header - /// in a HTTPSession. -{ -public: - typedef HTTPBasicStreamBuf::openmode openmode; - - HTTPHeaderStreamBuf(HTTPSession& session, openmode mode); - ~HTTPHeaderStreamBuf(); - -protected: - int readFromDevice(char* buffer, std::streamsize length); - int writeToDevice(const char* buffer, std::streamsize length); - -private: - HTTPSession& _session; - bool _end; +// +// HTTPHeaderStream.h +// +// Library: Net +// Package: HTTP +// Module: HTTPHeaderStream +// +// Definition of the HTTPHeaderStream class. +// +// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. +// and Contributors. +// +// SPDX-License-Identifier: BSL-1.0 +// + + +#ifndef Net_HTTPHeaderStream_INCLUDED +#define Net_HTTPHeaderStream_INCLUDED + + +#include "Poco/Net/Net.h" +#include "Poco/Net/HTTPBasicStreamBuf.h" +#include "Poco/MemoryPool.h" +#include <cstddef> +#include <istream> +#include <ostream> + + +namespace Poco { +namespace Net { + + +class HTTPSession; + + +class Net_API HTTPHeaderStreamBuf: public HTTPBasicStreamBuf + /// This is the streambuf class used for reading from a HTTP header + /// in a HTTPSession. +{ +public: + typedef HTTPBasicStreamBuf::openmode openmode; + + HTTPHeaderStreamBuf(HTTPSession& session, openmode mode); + ~HTTPHeaderStreamBuf(); + +protected: + int readFromDevice(char* buffer, std::streamsize length); + int writeToDevice(const char* buffer, std::streamsize length); + +private: + HTTPSession& _session; + bool _end; bool _line_ended; -}; - - -class Net_API HTTPHeaderIOS: public virtual std::ios - /// The base class for HTTPHeaderInputStream. -{ -public: - HTTPHeaderIOS(HTTPSession& session, HTTPHeaderStreamBuf::openmode mode); - ~HTTPHeaderIOS(); - HTTPHeaderStreamBuf* rdbuf(); - -protected: - HTTPHeaderStreamBuf _buf; -}; - - -class Net_API HTTPHeaderInputStream: public HTTPHeaderIOS, public std::istream - /// This class is for internal use by HTTPSession only. -{ -public: - HTTPHeaderInputStream(HTTPSession& session); - ~HTTPHeaderInputStream(); - - void* operator new(std::size_t size); - void operator delete(void* ptr); - -private: - static Poco::MemoryPool _pool; -}; - - -class Net_API HTTPHeaderOutputStream: public HTTPHeaderIOS, public std::ostream - /// This class is for internal use by HTTPSession only. -{ -public: - HTTPHeaderOutputStream(HTTPSession& session); - ~HTTPHeaderOutputStream(); - - void* operator new(std::size_t size); - void operator delete(void* ptr); - -private: - static Poco::MemoryPool _pool; -}; - - -} } // namespace Poco::Net - - -#endif // Net_HTTPHeaderStream_INCLUDED +}; + + +class Net_API HTTPHeaderIOS: public virtual std::ios + /// The base class for HTTPHeaderInputStream. +{ +public: + HTTPHeaderIOS(HTTPSession& session, HTTPHeaderStreamBuf::openmode mode); + ~HTTPHeaderIOS(); + HTTPHeaderStreamBuf* rdbuf(); + +protected: + HTTPHeaderStreamBuf _buf; +}; + + +class Net_API HTTPHeaderInputStream: public HTTPHeaderIOS, public std::istream + /// This class is for internal use by HTTPSession only. +{ +public: + HTTPHeaderInputStream(HTTPSession& session); + ~HTTPHeaderInputStream(); + + void* operator new(std::size_t size); + void operator delete(void* ptr); + +private: + static Poco::MemoryPool _pool; +}; + + +class Net_API HTTPHeaderOutputStream: public HTTPHeaderIOS, public std::ostream + /// This class is for internal use by HTTPSession only. +{ +public: + HTTPHeaderOutputStream(HTTPSession& session); + ~HTTPHeaderOutputStream(); + + void* operator new(std::size_t size); + void operator delete(void* ptr); + +private: + static Poco::MemoryPool _pool; +}; + + +} } // namespace Poco::Net + + +#endif // Net_HTTPHeaderStream_INCLUDED diff --git a/contrib/libs/poco/Net/include/Poco/Net/HTTPIOStream.h b/contrib/libs/poco/Net/include/Poco/Net/HTTPIOStream.h index aa40d06b0a..2c45812ae1 100644 --- a/contrib/libs/poco/Net/include/Poco/Net/HTTPIOStream.h +++ b/contrib/libs/poco/Net/include/Poco/Net/HTTPIOStream.h @@ -1,88 +1,88 @@ -// -// HTTPIOStream.h -// -// Library: Net -// Package: HTTP -// Module: HTTPIOStream -// -// Definition of the HTTPIOStream class. -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Net_HTTPIOStream_INCLUDED -#define Net_HTTPIOStream_INCLUDED - - -#include "Poco/Net/Net.h" -#include "Poco/Net/HTTPResponse.h" -#include "Poco/UnbufferedStreamBuf.h" - - -namespace Poco { -namespace Net { - - -class HTTPClientSession; - - -class Net_API HTTPResponseStreamBuf: public Poco::UnbufferedStreamBuf -{ -public: - HTTPResponseStreamBuf(std::istream& istr); - - ~HTTPResponseStreamBuf(); - -private: - int readFromDevice(); - - std::istream& _istr; -}; - - -inline int HTTPResponseStreamBuf::readFromDevice() -{ - return _istr.get(); -} - - -class Net_API HTTPResponseIOS: public virtual std::ios -{ -public: - HTTPResponseIOS(std::istream& istr); - - ~HTTPResponseIOS(); - - HTTPResponseStreamBuf* rdbuf(); - -protected: - HTTPResponseStreamBuf _buf; -}; - - -inline HTTPResponseStreamBuf* HTTPResponseIOS::rdbuf() -{ - return &_buf; -} - - -class Net_API HTTPResponseStream: public HTTPResponseIOS, public std::istream -{ -public: - HTTPResponseStream(std::istream& istr, HTTPClientSession* pSession); - - ~HTTPResponseStream(); - -private: - HTTPClientSession* _pSession; -}; - - -} } // namespace Poco::Net - - -#endif // Net_HTTPIOStream_INCLUDED +// +// HTTPIOStream.h +// +// Library: Net +// Package: HTTP +// Module: HTTPIOStream +// +// Definition of the HTTPIOStream class. +// +// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. +// and Contributors. +// +// SPDX-License-Identifier: BSL-1.0 +// + + +#ifndef Net_HTTPIOStream_INCLUDED +#define Net_HTTPIOStream_INCLUDED + + +#include "Poco/Net/Net.h" +#include "Poco/Net/HTTPResponse.h" +#include "Poco/UnbufferedStreamBuf.h" + + +namespace Poco { +namespace Net { + + +class HTTPClientSession; + + +class Net_API HTTPResponseStreamBuf: public Poco::UnbufferedStreamBuf +{ +public: + HTTPResponseStreamBuf(std::istream& istr); + + ~HTTPResponseStreamBuf(); + +private: + int readFromDevice(); + + std::istream& _istr; +}; + + +inline int HTTPResponseStreamBuf::readFromDevice() +{ + return _istr.get(); +} + + +class Net_API HTTPResponseIOS: public virtual std::ios +{ +public: + HTTPResponseIOS(std::istream& istr); + + ~HTTPResponseIOS(); + + HTTPResponseStreamBuf* rdbuf(); + +protected: + HTTPResponseStreamBuf _buf; +}; + + +inline HTTPResponseStreamBuf* HTTPResponseIOS::rdbuf() +{ + return &_buf; +} + + +class Net_API HTTPResponseStream: public HTTPResponseIOS, public std::istream +{ +public: + HTTPResponseStream(std::istream& istr, HTTPClientSession* pSession); + + ~HTTPResponseStream(); + +private: + HTTPClientSession* _pSession; +}; + + +} } // namespace Poco::Net + + +#endif // Net_HTTPIOStream_INCLUDED diff --git a/contrib/libs/poco/Net/include/Poco/Net/HTTPMessage.h b/contrib/libs/poco/Net/include/Poco/Net/HTTPMessage.h index 6a6bbdf412..345543d5a1 100644 --- a/contrib/libs/poco/Net/include/Poco/Net/HTTPMessage.h +++ b/contrib/libs/poco/Net/include/Poco/Net/HTTPMessage.h @@ -1,185 +1,185 @@ -// -// HTTPMessage.h -// -// Library: Net -// Package: HTTP -// Module: HTTPMessage -// -// Definition of the HTTPMessage class. -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Net_HTTPMessage_INCLUDED -#define Net_HTTPMessage_INCLUDED - - -#include "Poco/Net/Net.h" -#include "Poco/Net/MessageHeader.h" - - -namespace Poco { -namespace Net { - - -class MediaType; - - -class Net_API HTTPMessage: public MessageHeader - /// The base class for HTTPRequest and HTTPResponse. - /// - /// Defines the common properties of all HTTP messages. - /// These are version, content length, content type - /// and transfer encoding. -{ -public: - void setVersion(const std::string& version); - /// Sets the HTTP version for this message. - - const std::string& getVersion() const; - /// Returns the HTTP version for this message. - - void setContentLength(std::streamsize length); - /// Sets the Content-Length header. - /// - /// If length is UNKNOWN_CONTENT_LENGTH, removes - /// the Content-Length header. - - std::streamsize getContentLength() const; - /// Returns the content length for this message, - /// which may be UNKNOWN_CONTENT_LENGTH if - /// no Content-Length header is present. - -#if defined(POCO_HAVE_INT64) - void setContentLength64(Poco::Int64 length); - /// Sets the Content-Length header. - /// - /// If length is UNKNOWN_CONTENT_LENGTH, removes - /// the Content-Length header. - /// - /// In contrast to setContentLength(), this method takes - /// a 64-bit integer as content length. - - Poco::Int64 getContentLength64() const; - /// Returns the content length for this message, - /// which may be UNKNOWN_CONTENT_LENGTH if - /// no Content-Length header is present. - /// - /// In contrast to getContentLength(), this method - /// always returns a 64-bit integer for content length. -#endif // defined(POCO_HAVE_INT64) - - bool hasContentLength() const; - /// Returns true iff a Content-Length header is present. - - void setTransferEncoding(const std::string& transferEncoding); - /// Sets the transfer encoding for this message. - /// - /// The value should be either IDENTITY_TRANSFER_CODING - /// or CHUNKED_TRANSFER_CODING. - - const std::string& getTransferEncoding() const; - /// Returns the transfer encoding used for this - /// message. - /// - /// Normally, this is the value of the Transfer-Encoding - /// header field. If no such field is present, - /// returns IDENTITY_TRANSFER_CODING. - - void setChunkedTransferEncoding(bool flag); - /// If flag is true, sets the Transfer-Encoding header to - /// chunked. Otherwise, removes the Transfer-Encoding - /// header. - - bool getChunkedTransferEncoding() const; - /// Returns true if the Transfer-Encoding header is set - /// and its value is chunked. - - void setContentType(const std::string& mediaType); - /// Sets the content type for this message. - /// - /// Specify NO_CONTENT_TYPE to remove the - /// Content-Type header. - - void setContentType(const MediaType& mediaType); - /// Sets the content type for this message. - - const std::string& getContentType() const; - /// Returns the content type for this message. - /// - /// If no Content-Type header is present, - /// returns UNKNOWN_CONTENT_TYPE. - - void setKeepAlive(bool keepAlive); - /// Sets the value of the Connection header field. - /// - /// The value is set to "Keep-Alive" if keepAlive is - /// true, or to "Close" otherwise. - - bool getKeepAlive() const; - /// Returns true if - /// * the message has a Connection header field and its value is "Keep-Alive" - /// * the message is a HTTP/1.1 message and not Connection header is set - /// Returns false otherwise. - - static const std::string HTTP_1_0; - static const std::string HTTP_1_1; - - static const std::string IDENTITY_TRANSFER_ENCODING; - static const std::string CHUNKED_TRANSFER_ENCODING; - - static const int UNKNOWN_CONTENT_LENGTH; - static const std::string UNKNOWN_CONTENT_TYPE; - - static const std::string CONTENT_LENGTH; - static const std::string CONTENT_TYPE; - static const std::string TRANSFER_ENCODING; - static const std::string CONNECTION; - - static const std::string CONNECTION_KEEP_ALIVE; - static const std::string CONNECTION_CLOSE; - - static const std::string EMPTY; - -protected: - HTTPMessage(); - /// Creates the HTTPMessage with version HTTP/1.0. - - HTTPMessage(const std::string& version); - /// Creates the HTTPMessage and sets - /// the version. - - virtual ~HTTPMessage(); - /// Destroys the HTTPMessage. - -private: - HTTPMessage(const HTTPMessage&); - HTTPMessage& operator = (const HTTPMessage&); - - std::string _version; -}; - - -// -// inlines -// -inline const std::string& HTTPMessage::getVersion() const -{ - return _version; -} - - -inline bool HTTPMessage::hasContentLength() const -{ - return has(CONTENT_LENGTH); -} - - -} } // namespace Poco::Net - - -#endif // Net_HTTPMessage_INCLUDED +// +// HTTPMessage.h +// +// Library: Net +// Package: HTTP +// Module: HTTPMessage +// +// Definition of the HTTPMessage class. +// +// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. +// and Contributors. +// +// SPDX-License-Identifier: BSL-1.0 +// + + +#ifndef Net_HTTPMessage_INCLUDED +#define Net_HTTPMessage_INCLUDED + + +#include "Poco/Net/Net.h" +#include "Poco/Net/MessageHeader.h" + + +namespace Poco { +namespace Net { + + +class MediaType; + + +class Net_API HTTPMessage: public MessageHeader + /// The base class for HTTPRequest and HTTPResponse. + /// + /// Defines the common properties of all HTTP messages. + /// These are version, content length, content type + /// and transfer encoding. +{ +public: + void setVersion(const std::string& version); + /// Sets the HTTP version for this message. + + const std::string& getVersion() const; + /// Returns the HTTP version for this message. + + void setContentLength(std::streamsize length); + /// Sets the Content-Length header. + /// + /// If length is UNKNOWN_CONTENT_LENGTH, removes + /// the Content-Length header. + + std::streamsize getContentLength() const; + /// Returns the content length for this message, + /// which may be UNKNOWN_CONTENT_LENGTH if + /// no Content-Length header is present. + +#if defined(POCO_HAVE_INT64) + void setContentLength64(Poco::Int64 length); + /// Sets the Content-Length header. + /// + /// If length is UNKNOWN_CONTENT_LENGTH, removes + /// the Content-Length header. + /// + /// In contrast to setContentLength(), this method takes + /// a 64-bit integer as content length. + + Poco::Int64 getContentLength64() const; + /// Returns the content length for this message, + /// which may be UNKNOWN_CONTENT_LENGTH if + /// no Content-Length header is present. + /// + /// In contrast to getContentLength(), this method + /// always returns a 64-bit integer for content length. +#endif // defined(POCO_HAVE_INT64) + + bool hasContentLength() const; + /// Returns true iff a Content-Length header is present. + + void setTransferEncoding(const std::string& transferEncoding); + /// Sets the transfer encoding for this message. + /// + /// The value should be either IDENTITY_TRANSFER_CODING + /// or CHUNKED_TRANSFER_CODING. + + const std::string& getTransferEncoding() const; + /// Returns the transfer encoding used for this + /// message. + /// + /// Normally, this is the value of the Transfer-Encoding + /// header field. If no such field is present, + /// returns IDENTITY_TRANSFER_CODING. + + void setChunkedTransferEncoding(bool flag); + /// If flag is true, sets the Transfer-Encoding header to + /// chunked. Otherwise, removes the Transfer-Encoding + /// header. + + bool getChunkedTransferEncoding() const; + /// Returns true if the Transfer-Encoding header is set + /// and its value is chunked. + + void setContentType(const std::string& mediaType); + /// Sets the content type for this message. + /// + /// Specify NO_CONTENT_TYPE to remove the + /// Content-Type header. + + void setContentType(const MediaType& mediaType); + /// Sets the content type for this message. + + const std::string& getContentType() const; + /// Returns the content type for this message. + /// + /// If no Content-Type header is present, + /// returns UNKNOWN_CONTENT_TYPE. + + void setKeepAlive(bool keepAlive); + /// Sets the value of the Connection header field. + /// + /// The value is set to "Keep-Alive" if keepAlive is + /// true, or to "Close" otherwise. + + bool getKeepAlive() const; + /// Returns true if + /// * the message has a Connection header field and its value is "Keep-Alive" + /// * the message is a HTTP/1.1 message and not Connection header is set + /// Returns false otherwise. + + static const std::string HTTP_1_0; + static const std::string HTTP_1_1; + + static const std::string IDENTITY_TRANSFER_ENCODING; + static const std::string CHUNKED_TRANSFER_ENCODING; + + static const int UNKNOWN_CONTENT_LENGTH; + static const std::string UNKNOWN_CONTENT_TYPE; + + static const std::string CONTENT_LENGTH; + static const std::string CONTENT_TYPE; + static const std::string TRANSFER_ENCODING; + static const std::string CONNECTION; + + static const std::string CONNECTION_KEEP_ALIVE; + static const std::string CONNECTION_CLOSE; + + static const std::string EMPTY; + +protected: + HTTPMessage(); + /// Creates the HTTPMessage with version HTTP/1.0. + + HTTPMessage(const std::string& version); + /// Creates the HTTPMessage and sets + /// the version. + + virtual ~HTTPMessage(); + /// Destroys the HTTPMessage. + +private: + HTTPMessage(const HTTPMessage&); + HTTPMessage& operator = (const HTTPMessage&); + + std::string _version; +}; + + +// +// inlines +// +inline const std::string& HTTPMessage::getVersion() const +{ + return _version; +} + + +inline bool HTTPMessage::hasContentLength() const +{ + return has(CONTENT_LENGTH); +} + + +} } // namespace Poco::Net + + +#endif // Net_HTTPMessage_INCLUDED diff --git a/contrib/libs/poco/Net/include/Poco/Net/HTTPRequest.h b/contrib/libs/poco/Net/include/Poco/Net/HTTPRequest.h index 13ea06121f..817a74dc46 100644 --- a/contrib/libs/poco/Net/include/Poco/Net/HTTPRequest.h +++ b/contrib/libs/poco/Net/include/Poco/Net/HTTPRequest.h @@ -1,200 +1,200 @@ -// -// HTTPRequest.h -// -// Library: Net -// Package: HTTP -// Module: HTTPRequest -// -// Definition of the HTTPRequest class. -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Net_HTTPRequest_INCLUDED -#define Net_HTTPRequest_INCLUDED - - -#include "Poco/Net/Net.h" -#include "Poco/Net/HTTPMessage.h" - - -namespace Poco { -namespace Net { - - -class Net_API HTTPRequest: public HTTPMessage - /// This class encapsulates an HTTP request - /// message. - /// - /// In addition to the properties common to - /// all HTTP messages, a HTTP request has - /// a method (e.g. GET, HEAD, POST, etc.) and - /// a request URI. -{ -public: - HTTPRequest(); - /// Creates a GET / HTTP/1.0 HTTP request. - - HTTPRequest(const std::string& version); - /// Creates a GET / HTTP/1.x request with - /// the given version (HTTP/1.0 or HTTP/1.1). - - HTTPRequest(const std::string& method, const std::string& uri); - /// Creates a HTTP/1.0 request with the given method and URI. - - HTTPRequest(const std::string& method, const std::string& uri, const std::string& version); - /// Creates a HTTP request with the given method, URI and version. - - virtual ~HTTPRequest(); - /// Destroys the HTTPRequest. - - void setMethod(const std::string& method); - /// Sets the method. - - const std::string& getMethod() const; - /// Returns the method. - - void setURI(const std::string& uri); - /// Sets the request URI. - - const std::string& getURI() const; - /// Returns the request URI. - - void setHost(const std::string& host); - /// Sets the value of the Host header field. - - void setHost(const std::string& host, Poco::UInt16 port); - /// Sets the value of the Host header field. - /// - /// If the given port number is a non-standard - /// port number (other than 80 or 443), it is - /// included in the Host header field. - - const std::string& getHost() const; - /// Returns the value of the Host header field. - /// - /// Throws a NotFoundException if the request - /// does not have a Host header field. - - void setCookies(const NameValueCollection& cookies); - /// Adds a Cookie header with the names and - /// values from cookies. - - void getCookies(NameValueCollection& cookies) const; - /// Fills cookies with the cookies extracted - /// from the Cookie headers in the request. - - bool hasCredentials() const; - /// Returns true iff the request contains authentication - /// information in the form of an Authorization header. - - void getCredentials(std::string& scheme, std::string& authInfo) const; - /// Returns the authentication scheme and additional authentication - /// information contained in this request. - /// - /// Throws a NotAuthenticatedException if no authentication information - /// is contained in the request. - - void setCredentials(const std::string& scheme, const std::string& authInfo); - /// Sets the authentication scheme and information for - /// this request. - - bool getExpectContinue() const; - /// Returns true if the request contains an - /// "Expect: 100-continue" header. - - void setExpectContinue(bool expectContinue); - /// Adds a "Expect: 100-continue" header to the request if - /// expectContinue is true, otherwise removes the Expect header. - - bool hasProxyCredentials() const; - /// Returns true iff the request contains proxy authentication - /// information in the form of an Proxy-Authorization header. - - void getProxyCredentials(std::string& scheme, std::string& authInfo) const; - /// Returns the proxy authentication scheme and additional proxy authentication - /// information contained in this request. - /// - /// Throws a NotAuthenticatedException if no proxy authentication information - /// is contained in the request. - - void setProxyCredentials(const std::string& scheme, const std::string& authInfo); - /// Sets the proxy authentication scheme and information for - /// this request. - - void write(std::ostream& ostr) const; - /// Writes the HTTP request to the given - /// output stream. - - void read(std::istream& istr); - /// Reads the HTTP request from the - /// given input stream. - - static const std::string HTTP_GET; - static const std::string HTTP_HEAD; - static const std::string HTTP_PUT; - static const std::string HTTP_POST; - static const std::string HTTP_OPTIONS; - static const std::string HTTP_DELETE; - static const std::string HTTP_TRACE; - static const std::string HTTP_CONNECT; - static const std::string HTTP_PATCH; - - static const std::string HOST; - static const std::string COOKIE; - static const std::string AUTHORIZATION; - static const std::string PROXY_AUTHORIZATION; - static const std::string UPGRADE; - static const std::string EXPECT; - -protected: - void getCredentials(const std::string& header, std::string& scheme, std::string& authInfo) const; - /// Returns the authentication scheme and additional authentication - /// information contained in the given header of request. - /// - /// Throws a NotAuthenticatedException if no authentication information - /// is contained in the request. - - void setCredentials(const std::string& header, const std::string& scheme, const std::string& authInfo); - /// Writes the authentication scheme and information for - /// this request to the given header. - -private: - enum Limits - { - MAX_METHOD_LENGTH = 32, - MAX_URI_LENGTH = 16384, - MAX_VERSION_LENGTH = 8 - }; - - std::string _method; - std::string _uri; - - HTTPRequest(const HTTPRequest&); - HTTPRequest& operator = (const HTTPRequest&); -}; - - -// -// inlines -// -inline const std::string& HTTPRequest::getMethod() const -{ - return _method; -} - - -inline const std::string& HTTPRequest::getURI() const -{ - return _uri; -} - - -} } // namespace Poco::Net - - -#endif // Net_HTTPRequest_INCLUDED +// +// HTTPRequest.h +// +// Library: Net +// Package: HTTP +// Module: HTTPRequest +// +// Definition of the HTTPRequest class. +// +// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. +// and Contributors. +// +// SPDX-License-Identifier: BSL-1.0 +// + + +#ifndef Net_HTTPRequest_INCLUDED +#define Net_HTTPRequest_INCLUDED + + +#include "Poco/Net/Net.h" +#include "Poco/Net/HTTPMessage.h" + + +namespace Poco { +namespace Net { + + +class Net_API HTTPRequest: public HTTPMessage + /// This class encapsulates an HTTP request + /// message. + /// + /// In addition to the properties common to + /// all HTTP messages, a HTTP request has + /// a method (e.g. GET, HEAD, POST, etc.) and + /// a request URI. +{ +public: + HTTPRequest(); + /// Creates a GET / HTTP/1.0 HTTP request. + + HTTPRequest(const std::string& version); + /// Creates a GET / HTTP/1.x request with + /// the given version (HTTP/1.0 or HTTP/1.1). + + HTTPRequest(const std::string& method, const std::string& uri); + /// Creates a HTTP/1.0 request with the given method and URI. + + HTTPRequest(const std::string& method, const std::string& uri, const std::string& version); + /// Creates a HTTP request with the given method, URI and version. + + virtual ~HTTPRequest(); + /// Destroys the HTTPRequest. + + void setMethod(const std::string& method); + /// Sets the method. + + const std::string& getMethod() const; + /// Returns the method. + + void setURI(const std::string& uri); + /// Sets the request URI. + + const std::string& getURI() const; + /// Returns the request URI. + + void setHost(const std::string& host); + /// Sets the value of the Host header field. + + void setHost(const std::string& host, Poco::UInt16 port); + /// Sets the value of the Host header field. + /// + /// If the given port number is a non-standard + /// port number (other than 80 or 443), it is + /// included in the Host header field. + + const std::string& getHost() const; + /// Returns the value of the Host header field. + /// + /// Throws a NotFoundException if the request + /// does not have a Host header field. + + void setCookies(const NameValueCollection& cookies); + /// Adds a Cookie header with the names and + /// values from cookies. + + void getCookies(NameValueCollection& cookies) const; + /// Fills cookies with the cookies extracted + /// from the Cookie headers in the request. + + bool hasCredentials() const; + /// Returns true iff the request contains authentication + /// information in the form of an Authorization header. + + void getCredentials(std::string& scheme, std::string& authInfo) const; + /// Returns the authentication scheme and additional authentication + /// information contained in this request. + /// + /// Throws a NotAuthenticatedException if no authentication information + /// is contained in the request. + + void setCredentials(const std::string& scheme, const std::string& authInfo); + /// Sets the authentication scheme and information for + /// this request. + + bool getExpectContinue() const; + /// Returns true if the request contains an + /// "Expect: 100-continue" header. + + void setExpectContinue(bool expectContinue); + /// Adds a "Expect: 100-continue" header to the request if + /// expectContinue is true, otherwise removes the Expect header. + + bool hasProxyCredentials() const; + /// Returns true iff the request contains proxy authentication + /// information in the form of an Proxy-Authorization header. + + void getProxyCredentials(std::string& scheme, std::string& authInfo) const; + /// Returns the proxy authentication scheme and additional proxy authentication + /// information contained in this request. + /// + /// Throws a NotAuthenticatedException if no proxy authentication information + /// is contained in the request. + + void setProxyCredentials(const std::string& scheme, const std::string& authInfo); + /// Sets the proxy authentication scheme and information for + /// this request. + + void write(std::ostream& ostr) const; + /// Writes the HTTP request to the given + /// output stream. + + void read(std::istream& istr); + /// Reads the HTTP request from the + /// given input stream. + + static const std::string HTTP_GET; + static const std::string HTTP_HEAD; + static const std::string HTTP_PUT; + static const std::string HTTP_POST; + static const std::string HTTP_OPTIONS; + static const std::string HTTP_DELETE; + static const std::string HTTP_TRACE; + static const std::string HTTP_CONNECT; + static const std::string HTTP_PATCH; + + static const std::string HOST; + static const std::string COOKIE; + static const std::string AUTHORIZATION; + static const std::string PROXY_AUTHORIZATION; + static const std::string UPGRADE; + static const std::string EXPECT; + +protected: + void getCredentials(const std::string& header, std::string& scheme, std::string& authInfo) const; + /// Returns the authentication scheme and additional authentication + /// information contained in the given header of request. + /// + /// Throws a NotAuthenticatedException if no authentication information + /// is contained in the request. + + void setCredentials(const std::string& header, const std::string& scheme, const std::string& authInfo); + /// Writes the authentication scheme and information for + /// this request to the given header. + +private: + enum Limits + { + MAX_METHOD_LENGTH = 32, + MAX_URI_LENGTH = 16384, + MAX_VERSION_LENGTH = 8 + }; + + std::string _method; + std::string _uri; + + HTTPRequest(const HTTPRequest&); + HTTPRequest& operator = (const HTTPRequest&); +}; + + +// +// inlines +// +inline const std::string& HTTPRequest::getMethod() const +{ + return _method; +} + + +inline const std::string& HTTPRequest::getURI() const +{ + return _uri; +} + + +} } // namespace Poco::Net + + +#endif // Net_HTTPRequest_INCLUDED diff --git a/contrib/libs/poco/Net/include/Poco/Net/HTTPRequestHandler.h b/contrib/libs/poco/Net/include/Poco/Net/HTTPRequestHandler.h index 790b748c4c..8a6271204c 100644 --- a/contrib/libs/poco/Net/include/Poco/Net/HTTPRequestHandler.h +++ b/contrib/libs/poco/Net/include/Poco/Net/HTTPRequestHandler.h @@ -1,67 +1,67 @@ -// -// HTTPRequestHandler.h -// -// Library: Net -// Package: HTTPServer -// Module: HTTPRequestHandler -// -// Definition of the HTTPRequestHandler class. -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Net_HTTPRequestHandler_INCLUDED -#define Net_HTTPRequestHandler_INCLUDED - - -#include "Poco/Net/Net.h" - - -namespace Poco { -namespace Net { - - -class HTTPServerRequest; -class HTTPServerResponse; - - -class Net_API HTTPRequestHandler - /// The abstract base class for HTTPRequestHandlers - /// created by HTTPServer. - /// - /// Derived classes must override the handleRequest() method. - /// Furthermore, a HTTPRequestHandlerFactory must be provided. - /// - /// The handleRequest() method must perform the complete handling - /// of the HTTP request connection. As soon as the handleRequest() - /// method returns, the request handler object is destroyed. - /// - /// A new HTTPRequestHandler object will be created for - /// each new HTTP request that is received by the HTTPServer. -{ -public: - HTTPRequestHandler(); - /// Creates the HTTPRequestHandler. - - virtual ~HTTPRequestHandler(); - /// Destroys the HTTPRequestHandler. - - virtual void handleRequest(HTTPServerRequest& request, HTTPServerResponse& response) = 0; - /// Must be overridden by subclasses. - /// - /// Handles the given request. - -private: - HTTPRequestHandler(const HTTPRequestHandler&); - HTTPRequestHandler& operator = (const HTTPRequestHandler&); -}; - - -} } // namespace Poco::Net - - -#endif // Net_HTTPRequestHandler_INCLUDED +// +// HTTPRequestHandler.h +// +// Library: Net +// Package: HTTPServer +// Module: HTTPRequestHandler +// +// Definition of the HTTPRequestHandler class. +// +// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. +// and Contributors. +// +// SPDX-License-Identifier: BSL-1.0 +// + + +#ifndef Net_HTTPRequestHandler_INCLUDED +#define Net_HTTPRequestHandler_INCLUDED + + +#include "Poco/Net/Net.h" + + +namespace Poco { +namespace Net { + + +class HTTPServerRequest; +class HTTPServerResponse; + + +class Net_API HTTPRequestHandler + /// The abstract base class for HTTPRequestHandlers + /// created by HTTPServer. + /// + /// Derived classes must override the handleRequest() method. + /// Furthermore, a HTTPRequestHandlerFactory must be provided. + /// + /// The handleRequest() method must perform the complete handling + /// of the HTTP request connection. As soon as the handleRequest() + /// method returns, the request handler object is destroyed. + /// + /// A new HTTPRequestHandler object will be created for + /// each new HTTP request that is received by the HTTPServer. +{ +public: + HTTPRequestHandler(); + /// Creates the HTTPRequestHandler. + + virtual ~HTTPRequestHandler(); + /// Destroys the HTTPRequestHandler. + + virtual void handleRequest(HTTPServerRequest& request, HTTPServerResponse& response) = 0; + /// Must be overridden by subclasses. + /// + /// Handles the given request. + +private: + HTTPRequestHandler(const HTTPRequestHandler&); + HTTPRequestHandler& operator = (const HTTPRequestHandler&); +}; + + +} } // namespace Poco::Net + + +#endif // Net_HTTPRequestHandler_INCLUDED diff --git a/contrib/libs/poco/Net/include/Poco/Net/HTTPRequestHandlerFactory.h b/contrib/libs/poco/Net/include/Poco/Net/HTTPRequestHandlerFactory.h index d3a8319bc7..421c465018 100644 --- a/contrib/libs/poco/Net/include/Poco/Net/HTTPRequestHandlerFactory.h +++ b/contrib/libs/poco/Net/include/Poco/Net/HTTPRequestHandlerFactory.h @@ -1,78 +1,78 @@ -// -// HTTPRequestHandlerFactory.h -// -// Library: Net -// Package: HTTPServer -// Module: HTTPRequestHandlerFactory -// -// Definition of the HTTPRequestHandlerFactory class. -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Net_HTTPRequestHandlerFactory_INCLUDED -#define Net_HTTPRequestHandlerFactory_INCLUDED - - -#include "Poco/Net/Net.h" -#include "Poco/SharedPtr.h" -#include "Poco/BasicEvent.h" - - -namespace Poco { -namespace Net { - - -class HTTPServerRequest; -class HTTPServerResponse; -class HTTPRequestHandler; - - -class Net_API HTTPRequestHandlerFactory - /// A factory for HTTPRequestHandler objects. - /// Subclasses must override the createRequestHandler() - /// method. -{ -public: - typedef Poco::SharedPtr<HTTPRequestHandlerFactory> Ptr; - - HTTPRequestHandlerFactory(); - /// Creates the HTTPRequestHandlerFactory. - - virtual ~HTTPRequestHandlerFactory(); - /// Destroys the HTTPRequestHandlerFactory. - - virtual HTTPRequestHandler* createRequestHandler(const HTTPServerRequest& request) = 0; - /// Must be overridden by subclasses. - /// - /// Creates a new request handler for the given HTTP request. - /// - /// The method should inspect the given HTTPServerRequest object (e.g., method - /// and URI) and create an appropriate HTTPRequestHandler object to handle the - /// request. - /// - /// If the request contains a "Expect: 100-continue" header, it's possible - /// to prevent the server from sending the default 100 Continue response - /// by setting the status of the response object that can be obtained through - /// the request object (request.response()) to something other than 200 OK. - -protected: - Poco::BasicEvent<const bool> serverStopped; - -private: - HTTPRequestHandlerFactory(const HTTPRequestHandlerFactory&); - HTTPRequestHandlerFactory& operator = (const HTTPRequestHandlerFactory&); - - friend class HTTPServer; - friend class HTTPServerConnection; -}; - - -} } // namespace Poco::Net - - -#endif // Net_HTTPRequestHandlerFactory_INCLUDED +// +// HTTPRequestHandlerFactory.h +// +// Library: Net +// Package: HTTPServer +// Module: HTTPRequestHandlerFactory +// +// Definition of the HTTPRequestHandlerFactory class. +// +// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. +// and Contributors. +// +// SPDX-License-Identifier: BSL-1.0 +// + + +#ifndef Net_HTTPRequestHandlerFactory_INCLUDED +#define Net_HTTPRequestHandlerFactory_INCLUDED + + +#include "Poco/Net/Net.h" +#include "Poco/SharedPtr.h" +#include "Poco/BasicEvent.h" + + +namespace Poco { +namespace Net { + + +class HTTPServerRequest; +class HTTPServerResponse; +class HTTPRequestHandler; + + +class Net_API HTTPRequestHandlerFactory + /// A factory for HTTPRequestHandler objects. + /// Subclasses must override the createRequestHandler() + /// method. +{ +public: + typedef Poco::SharedPtr<HTTPRequestHandlerFactory> Ptr; + + HTTPRequestHandlerFactory(); + /// Creates the HTTPRequestHandlerFactory. + + virtual ~HTTPRequestHandlerFactory(); + /// Destroys the HTTPRequestHandlerFactory. + + virtual HTTPRequestHandler* createRequestHandler(const HTTPServerRequest& request) = 0; + /// Must be overridden by subclasses. + /// + /// Creates a new request handler for the given HTTP request. + /// + /// The method should inspect the given HTTPServerRequest object (e.g., method + /// and URI) and create an appropriate HTTPRequestHandler object to handle the + /// request. + /// + /// If the request contains a "Expect: 100-continue" header, it's possible + /// to prevent the server from sending the default 100 Continue response + /// by setting the status of the response object that can be obtained through + /// the request object (request.response()) to something other than 200 OK. + +protected: + Poco::BasicEvent<const bool> serverStopped; + +private: + HTTPRequestHandlerFactory(const HTTPRequestHandlerFactory&); + HTTPRequestHandlerFactory& operator = (const HTTPRequestHandlerFactory&); + + friend class HTTPServer; + friend class HTTPServerConnection; +}; + + +} } // namespace Poco::Net + + +#endif // Net_HTTPRequestHandlerFactory_INCLUDED diff --git a/contrib/libs/poco/Net/include/Poco/Net/HTTPResponse.h b/contrib/libs/poco/Net/include/Poco/Net/HTTPResponse.h index 861dd3d914..0c795f8f29 100644 --- a/contrib/libs/poco/Net/include/Poco/Net/HTTPResponse.h +++ b/contrib/libs/poco/Net/include/Poco/Net/HTTPResponse.h @@ -1,299 +1,299 @@ -// -// HTTPResponse.h -// -// Library: Net -// Package: HTTP -// Module: HTTPResponse -// -// Definition of the HTTPResponse class. -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Net_HTTPResponse_INCLUDED -#define Net_HTTPResponse_INCLUDED - - -#include "Poco/Net/Net.h" -#include "Poco/Net/HTTPMessage.h" -#include "Poco/Net/HTTPCookie.h" -#include "Poco/Timestamp.h" -#include <vector> - - -namespace Poco { -namespace Net { - - -class HTTPCookie; - - -class Net_API HTTPResponse: public HTTPMessage - /// This class encapsulates an HTTP response - /// message. - /// - /// In addition to the properties common to - /// all HTTP messages, a HTTP response has - /// status code and a reason phrase. -{ -public: - enum HTTPStatus - { - HTTP_CONTINUE = 100, - HTTP_SWITCHING_PROTOCOLS = 101, - HTTP_PROCESSING = 102, - HTTP_OK = 200, - HTTP_CREATED = 201, - HTTP_ACCEPTED = 202, - HTTP_NONAUTHORITATIVE = 203, - HTTP_NO_CONTENT = 204, - HTTP_RESET_CONTENT = 205, - HTTP_PARTIAL_CONTENT = 206, - HTTP_MULTI_STATUS = 207, - HTTP_ALREADY_REPORTED = 208, - HTTP_IM_USED = 226, - HTTP_MULTIPLE_CHOICES = 300, - HTTP_MOVED_PERMANENTLY = 301, - HTTP_FOUND = 302, - HTTP_SEE_OTHER = 303, - HTTP_NOT_MODIFIED = 304, - HTTP_USE_PROXY = 305, - HTTP_USEPROXY = 305, /// @deprecated - // UNUSED: 306 - HTTP_TEMPORARY_REDIRECT = 307, - HTTP_PERMANENT_REDIRECT = 308, - HTTP_BAD_REQUEST = 400, - HTTP_UNAUTHORIZED = 401, - HTTP_PAYMENT_REQUIRED = 402, - HTTP_FORBIDDEN = 403, - HTTP_NOT_FOUND = 404, - HTTP_METHOD_NOT_ALLOWED = 405, - HTTP_NOT_ACCEPTABLE = 406, - HTTP_PROXY_AUTHENTICATION_REQUIRED = 407, - HTTP_REQUEST_TIMEOUT = 408, - HTTP_CONFLICT = 409, - HTTP_GONE = 410, - HTTP_LENGTH_REQUIRED = 411, - HTTP_PRECONDITION_FAILED = 412, - HTTP_REQUEST_ENTITY_TOO_LARGE = 413, - HTTP_REQUESTENTITYTOOLARGE = 413, /// @deprecated - HTTP_REQUEST_URI_TOO_LONG = 414, - HTTP_REQUESTURITOOLONG = 414, /// @deprecated - HTTP_UNSUPPORTED_MEDIA_TYPE = 415, - HTTP_UNSUPPORTEDMEDIATYPE = 415, /// @deprecated - HTTP_REQUESTED_RANGE_NOT_SATISFIABLE = 416, - HTTP_EXPECTATION_FAILED = 417, - HTTP_IM_A_TEAPOT = 418, - HTTP_ENCHANCE_YOUR_CALM = 420, - HTTP_MISDIRECTED_REQUEST = 421, - HTTP_UNPROCESSABLE_ENTITY = 422, - HTTP_LOCKED = 423, - HTTP_FAILED_DEPENDENCY = 424, - HTTP_UPGRADE_REQUIRED = 426, - HTTP_PRECONDITION_REQUIRED = 428, - HTTP_TOO_MANY_REQUESTS = 429, - HTTP_REQUEST_HEADER_FIELDS_TOO_LARGE = 431, - HTTP_UNAVAILABLE_FOR_LEGAL_REASONS = 451, - HTTP_INTERNAL_SERVER_ERROR = 500, - HTTP_NOT_IMPLEMENTED = 501, - HTTP_BAD_GATEWAY = 502, - HTTP_SERVICE_UNAVAILABLE = 503, - HTTP_GATEWAY_TIMEOUT = 504, - HTTP_VERSION_NOT_SUPPORTED = 505, - HTTP_VARIANT_ALSO_NEGOTIATES = 506, - HTTP_INSUFFICIENT_STORAGE = 507, - HTTP_LOOP_DETECTED = 508, - HTTP_NOT_EXTENDED = 510, - HTTP_NETWORK_AUTHENTICATION_REQUIRED = 511 - }; - - HTTPResponse(); - /// Creates the HTTPResponse with OK status. - - HTTPResponse(HTTPStatus status, const std::string& reason); - /// Creates the HTTPResponse with the given status - /// and reason phrase. - - HTTPResponse(const std::string& version, HTTPStatus status, const std::string& reason); - /// Creates the HTTPResponse with the given version, status - /// and reason phrase. - - HTTPResponse(HTTPStatus status); - /// Creates the HTTPResponse with the given status - /// an an appropriate reason phrase. - - HTTPResponse(const std::string& version, HTTPStatus status); - /// Creates the HTTPResponse with the given version, status - /// an an appropriate reason phrase. - - virtual ~HTTPResponse(); - /// Destroys the HTTPResponse. - - void setStatus(HTTPStatus status); - /// Sets the HTTP status code. - /// - /// Does not change the reason phrase. - - HTTPStatus getStatus() const; - /// Returns the HTTP status code. - - void setStatus(const std::string& status); - /// Sets the HTTP status code. - /// - /// The string must contain a valid - /// HTTP numerical status code. - - void setReason(const std::string& reason); - /// Sets the HTTP reason phrase. - - const std::string& getReason() const; - /// Returns the HTTP reason phrase. - - void setStatusAndReason(HTTPStatus status, const std::string& reason); - /// Sets the HTTP status code and reason phrase. - - void setStatusAndReason(HTTPStatus status); - /// Sets the HTTP status code and reason phrase. - /// - /// The reason phrase is set according to the status code. - - void setDate(const Poco::Timestamp& dateTime); - /// Sets the Date header to the given date/time value. - - Poco::Timestamp getDate() const; - /// Returns the value of the Date header. - - void addCookie(const HTTPCookie& cookie); - /// Adds the cookie to the response by - /// adding a Set-Cookie header. - - void getCookies(std::vector<HTTPCookie>& cookies) const; - /// Returns a vector with all the cookies - /// set in the response header. - /// - /// May throw an exception in case of a malformed - /// Set-Cookie header. - - void write(std::ostream& ostr) const; - /// Writes the HTTP response to the given - /// output stream. - - void beginWrite(std::ostream& ostr) const; - /// Writes the HTTP response to the given - /// output stream, but do not finish with \r\n delimiter. - - void read(std::istream& istr); - /// Reads the HTTP response from the - /// given input stream. - /// - /// 100 Continue responses are ignored. - - static const std::string& getReasonForStatus(HTTPStatus status); - /// Returns an appropriate reason phrase - /// for the given status code. - - static const std::string HTTP_REASON_CONTINUE; - static const std::string HTTP_REASON_SWITCHING_PROTOCOLS; - static const std::string HTTP_REASON_PROCESSING; - static const std::string HTTP_REASON_OK; - static const std::string HTTP_REASON_CREATED; - static const std::string HTTP_REASON_ACCEPTED; - static const std::string HTTP_REASON_NONAUTHORITATIVE; - static const std::string HTTP_REASON_NO_CONTENT; - static const std::string HTTP_REASON_RESET_CONTENT; - static const std::string HTTP_REASON_PARTIAL_CONTENT; - static const std::string HTTP_REASON_MULTI_STATUS; - static const std::string HTTP_REASON_ALREADY_REPORTED; - static const std::string HTTP_REASON_IM_USED; - static const std::string HTTP_REASON_MULTIPLE_CHOICES; - static const std::string HTTP_REASON_MOVED_PERMANENTLY; - static const std::string HTTP_REASON_FOUND; - static const std::string HTTP_REASON_SEE_OTHER; - static const std::string HTTP_REASON_NOT_MODIFIED; - static const std::string HTTP_REASON_USE_PROXY; - static const std::string HTTP_REASON_TEMPORARY_REDIRECT; - static const std::string HTTP_REASON_PERMANENT_REDIRECT; - static const std::string HTTP_REASON_BAD_REQUEST; - static const std::string HTTP_REASON_UNAUTHORIZED; - static const std::string HTTP_REASON_PAYMENT_REQUIRED; - static const std::string HTTP_REASON_FORBIDDEN; - static const std::string HTTP_REASON_NOT_FOUND; - static const std::string HTTP_REASON_METHOD_NOT_ALLOWED; - static const std::string HTTP_REASON_NOT_ACCEPTABLE; - static const std::string HTTP_REASON_PROXY_AUTHENTICATION_REQUIRED; - static const std::string HTTP_REASON_REQUEST_TIMEOUT; - static const std::string HTTP_REASON_CONFLICT; - static const std::string HTTP_REASON_GONE; - static const std::string HTTP_REASON_LENGTH_REQUIRED; - static const std::string HTTP_REASON_PRECONDITION_FAILED; - static const std::string HTTP_REASON_REQUEST_ENTITY_TOO_LARGE; - static const std::string HTTP_REASON_REQUEST_URI_TOO_LONG; - static const std::string HTTP_REASON_UNSUPPORTED_MEDIA_TYPE; - static const std::string HTTP_REASON_REQUESTED_RANGE_NOT_SATISFIABLE; - static const std::string HTTP_REASON_EXPECTATION_FAILED; - static const std::string HTTP_REASON_IM_A_TEAPOT; - static const std::string HTTP_REASON_ENCHANCE_YOUR_CALM; - static const std::string HTTP_REASON_MISDIRECTED_REQUEST; - static const std::string HTTP_REASON_UNPROCESSABLE_ENTITY; - static const std::string HTTP_REASON_LOCKED; - static const std::string HTTP_REASON_FAILED_DEPENDENCY; - static const std::string HTTP_REASON_UPGRADE_REQUIRED; - static const std::string HTTP_REASON_PRECONDITION_REQUIRED; - static const std::string HTTP_REASON_TOO_MANY_REQUESTS; - static const std::string HTTP_REASON_REQUEST_HEADER_FIELDS_TOO_LARGE; - static const std::string HTTP_REASON_UNAVAILABLE_FOR_LEGAL_REASONS; - static const std::string HTTP_REASON_INTERNAL_SERVER_ERROR; - static const std::string HTTP_REASON_NOT_IMPLEMENTED; - static const std::string HTTP_REASON_BAD_GATEWAY; - static const std::string HTTP_REASON_SERVICE_UNAVAILABLE; - static const std::string HTTP_REASON_GATEWAY_TIMEOUT; - static const std::string HTTP_REASON_VERSION_NOT_SUPPORTED; - static const std::string HTTP_REASON_VARIANT_ALSO_NEGOTIATES; - static const std::string HTTP_REASON_INSUFFICIENT_STORAGE; - static const std::string HTTP_REASON_LOOP_DETECTED; - static const std::string HTTP_REASON_NOT_EXTENDED; - static const std::string HTTP_REASON_NETWORK_AUTHENTICATION_REQUIRED; - static const std::string HTTP_REASON_UNKNOWN; - - static const std::string DATE; - static const std::string SET_COOKIE; - -private: - enum Limits - { - MAX_VERSION_LENGTH = 8, - MAX_STATUS_LENGTH = 3, - MAX_REASON_LENGTH = 512 - }; - - HTTPStatus _status; - std::string _reason; - - HTTPResponse(const HTTPResponse&); - HTTPResponse& operator = (const HTTPResponse&); -}; - - -// -// inlines -// -inline HTTPResponse::HTTPStatus HTTPResponse::getStatus() const -{ - return _status; -} - - -inline const std::string& HTTPResponse::getReason() const -{ - return _reason; -} - - -} } // namespace Poco::Net - - -#endif // Net_HTTPResponse_INCLUDED +// +// HTTPResponse.h +// +// Library: Net +// Package: HTTP +// Module: HTTPResponse +// +// Definition of the HTTPResponse class. +// +// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. +// and Contributors. +// +// SPDX-License-Identifier: BSL-1.0 +// + + +#ifndef Net_HTTPResponse_INCLUDED +#define Net_HTTPResponse_INCLUDED + + +#include "Poco/Net/Net.h" +#include "Poco/Net/HTTPMessage.h" +#include "Poco/Net/HTTPCookie.h" +#include "Poco/Timestamp.h" +#include <vector> + + +namespace Poco { +namespace Net { + + +class HTTPCookie; + + +class Net_API HTTPResponse: public HTTPMessage + /// This class encapsulates an HTTP response + /// message. + /// + /// In addition to the properties common to + /// all HTTP messages, a HTTP response has + /// status code and a reason phrase. +{ +public: + enum HTTPStatus + { + HTTP_CONTINUE = 100, + HTTP_SWITCHING_PROTOCOLS = 101, + HTTP_PROCESSING = 102, + HTTP_OK = 200, + HTTP_CREATED = 201, + HTTP_ACCEPTED = 202, + HTTP_NONAUTHORITATIVE = 203, + HTTP_NO_CONTENT = 204, + HTTP_RESET_CONTENT = 205, + HTTP_PARTIAL_CONTENT = 206, + HTTP_MULTI_STATUS = 207, + HTTP_ALREADY_REPORTED = 208, + HTTP_IM_USED = 226, + HTTP_MULTIPLE_CHOICES = 300, + HTTP_MOVED_PERMANENTLY = 301, + HTTP_FOUND = 302, + HTTP_SEE_OTHER = 303, + HTTP_NOT_MODIFIED = 304, + HTTP_USE_PROXY = 305, + HTTP_USEPROXY = 305, /// @deprecated + // UNUSED: 306 + HTTP_TEMPORARY_REDIRECT = 307, + HTTP_PERMANENT_REDIRECT = 308, + HTTP_BAD_REQUEST = 400, + HTTP_UNAUTHORIZED = 401, + HTTP_PAYMENT_REQUIRED = 402, + HTTP_FORBIDDEN = 403, + HTTP_NOT_FOUND = 404, + HTTP_METHOD_NOT_ALLOWED = 405, + HTTP_NOT_ACCEPTABLE = 406, + HTTP_PROXY_AUTHENTICATION_REQUIRED = 407, + HTTP_REQUEST_TIMEOUT = 408, + HTTP_CONFLICT = 409, + HTTP_GONE = 410, + HTTP_LENGTH_REQUIRED = 411, + HTTP_PRECONDITION_FAILED = 412, + HTTP_REQUEST_ENTITY_TOO_LARGE = 413, + HTTP_REQUESTENTITYTOOLARGE = 413, /// @deprecated + HTTP_REQUEST_URI_TOO_LONG = 414, + HTTP_REQUESTURITOOLONG = 414, /// @deprecated + HTTP_UNSUPPORTED_MEDIA_TYPE = 415, + HTTP_UNSUPPORTEDMEDIATYPE = 415, /// @deprecated + HTTP_REQUESTED_RANGE_NOT_SATISFIABLE = 416, + HTTP_EXPECTATION_FAILED = 417, + HTTP_IM_A_TEAPOT = 418, + HTTP_ENCHANCE_YOUR_CALM = 420, + HTTP_MISDIRECTED_REQUEST = 421, + HTTP_UNPROCESSABLE_ENTITY = 422, + HTTP_LOCKED = 423, + HTTP_FAILED_DEPENDENCY = 424, + HTTP_UPGRADE_REQUIRED = 426, + HTTP_PRECONDITION_REQUIRED = 428, + HTTP_TOO_MANY_REQUESTS = 429, + HTTP_REQUEST_HEADER_FIELDS_TOO_LARGE = 431, + HTTP_UNAVAILABLE_FOR_LEGAL_REASONS = 451, + HTTP_INTERNAL_SERVER_ERROR = 500, + HTTP_NOT_IMPLEMENTED = 501, + HTTP_BAD_GATEWAY = 502, + HTTP_SERVICE_UNAVAILABLE = 503, + HTTP_GATEWAY_TIMEOUT = 504, + HTTP_VERSION_NOT_SUPPORTED = 505, + HTTP_VARIANT_ALSO_NEGOTIATES = 506, + HTTP_INSUFFICIENT_STORAGE = 507, + HTTP_LOOP_DETECTED = 508, + HTTP_NOT_EXTENDED = 510, + HTTP_NETWORK_AUTHENTICATION_REQUIRED = 511 + }; + + HTTPResponse(); + /// Creates the HTTPResponse with OK status. + + HTTPResponse(HTTPStatus status, const std::string& reason); + /// Creates the HTTPResponse with the given status + /// and reason phrase. + + HTTPResponse(const std::string& version, HTTPStatus status, const std::string& reason); + /// Creates the HTTPResponse with the given version, status + /// and reason phrase. + + HTTPResponse(HTTPStatus status); + /// Creates the HTTPResponse with the given status + /// an an appropriate reason phrase. + + HTTPResponse(const std::string& version, HTTPStatus status); + /// Creates the HTTPResponse with the given version, status + /// an an appropriate reason phrase. + + virtual ~HTTPResponse(); + /// Destroys the HTTPResponse. + + void setStatus(HTTPStatus status); + /// Sets the HTTP status code. + /// + /// Does not change the reason phrase. + + HTTPStatus getStatus() const; + /// Returns the HTTP status code. + + void setStatus(const std::string& status); + /// Sets the HTTP status code. + /// + /// The string must contain a valid + /// HTTP numerical status code. + + void setReason(const std::string& reason); + /// Sets the HTTP reason phrase. + + const std::string& getReason() const; + /// Returns the HTTP reason phrase. + + void setStatusAndReason(HTTPStatus status, const std::string& reason); + /// Sets the HTTP status code and reason phrase. + + void setStatusAndReason(HTTPStatus status); + /// Sets the HTTP status code and reason phrase. + /// + /// The reason phrase is set according to the status code. + + void setDate(const Poco::Timestamp& dateTime); + /// Sets the Date header to the given date/time value. + + Poco::Timestamp getDate() const; + /// Returns the value of the Date header. + + void addCookie(const HTTPCookie& cookie); + /// Adds the cookie to the response by + /// adding a Set-Cookie header. + + void getCookies(std::vector<HTTPCookie>& cookies) const; + /// Returns a vector with all the cookies + /// set in the response header. + /// + /// May throw an exception in case of a malformed + /// Set-Cookie header. + + void write(std::ostream& ostr) const; + /// Writes the HTTP response to the given + /// output stream. + + void beginWrite(std::ostream& ostr) const; + /// Writes the HTTP response to the given + /// output stream, but do not finish with \r\n delimiter. + + void read(std::istream& istr); + /// Reads the HTTP response from the + /// given input stream. + /// + /// 100 Continue responses are ignored. + + static const std::string& getReasonForStatus(HTTPStatus status); + /// Returns an appropriate reason phrase + /// for the given status code. + + static const std::string HTTP_REASON_CONTINUE; + static const std::string HTTP_REASON_SWITCHING_PROTOCOLS; + static const std::string HTTP_REASON_PROCESSING; + static const std::string HTTP_REASON_OK; + static const std::string HTTP_REASON_CREATED; + static const std::string HTTP_REASON_ACCEPTED; + static const std::string HTTP_REASON_NONAUTHORITATIVE; + static const std::string HTTP_REASON_NO_CONTENT; + static const std::string HTTP_REASON_RESET_CONTENT; + static const std::string HTTP_REASON_PARTIAL_CONTENT; + static const std::string HTTP_REASON_MULTI_STATUS; + static const std::string HTTP_REASON_ALREADY_REPORTED; + static const std::string HTTP_REASON_IM_USED; + static const std::string HTTP_REASON_MULTIPLE_CHOICES; + static const std::string HTTP_REASON_MOVED_PERMANENTLY; + static const std::string HTTP_REASON_FOUND; + static const std::string HTTP_REASON_SEE_OTHER; + static const std::string HTTP_REASON_NOT_MODIFIED; + static const std::string HTTP_REASON_USE_PROXY; + static const std::string HTTP_REASON_TEMPORARY_REDIRECT; + static const std::string HTTP_REASON_PERMANENT_REDIRECT; + static const std::string HTTP_REASON_BAD_REQUEST; + static const std::string HTTP_REASON_UNAUTHORIZED; + static const std::string HTTP_REASON_PAYMENT_REQUIRED; + static const std::string HTTP_REASON_FORBIDDEN; + static const std::string HTTP_REASON_NOT_FOUND; + static const std::string HTTP_REASON_METHOD_NOT_ALLOWED; + static const std::string HTTP_REASON_NOT_ACCEPTABLE; + static const std::string HTTP_REASON_PROXY_AUTHENTICATION_REQUIRED; + static const std::string HTTP_REASON_REQUEST_TIMEOUT; + static const std::string HTTP_REASON_CONFLICT; + static const std::string HTTP_REASON_GONE; + static const std::string HTTP_REASON_LENGTH_REQUIRED; + static const std::string HTTP_REASON_PRECONDITION_FAILED; + static const std::string HTTP_REASON_REQUEST_ENTITY_TOO_LARGE; + static const std::string HTTP_REASON_REQUEST_URI_TOO_LONG; + static const std::string HTTP_REASON_UNSUPPORTED_MEDIA_TYPE; + static const std::string HTTP_REASON_REQUESTED_RANGE_NOT_SATISFIABLE; + static const std::string HTTP_REASON_EXPECTATION_FAILED; + static const std::string HTTP_REASON_IM_A_TEAPOT; + static const std::string HTTP_REASON_ENCHANCE_YOUR_CALM; + static const std::string HTTP_REASON_MISDIRECTED_REQUEST; + static const std::string HTTP_REASON_UNPROCESSABLE_ENTITY; + static const std::string HTTP_REASON_LOCKED; + static const std::string HTTP_REASON_FAILED_DEPENDENCY; + static const std::string HTTP_REASON_UPGRADE_REQUIRED; + static const std::string HTTP_REASON_PRECONDITION_REQUIRED; + static const std::string HTTP_REASON_TOO_MANY_REQUESTS; + static const std::string HTTP_REASON_REQUEST_HEADER_FIELDS_TOO_LARGE; + static const std::string HTTP_REASON_UNAVAILABLE_FOR_LEGAL_REASONS; + static const std::string HTTP_REASON_INTERNAL_SERVER_ERROR; + static const std::string HTTP_REASON_NOT_IMPLEMENTED; + static const std::string HTTP_REASON_BAD_GATEWAY; + static const std::string HTTP_REASON_SERVICE_UNAVAILABLE; + static const std::string HTTP_REASON_GATEWAY_TIMEOUT; + static const std::string HTTP_REASON_VERSION_NOT_SUPPORTED; + static const std::string HTTP_REASON_VARIANT_ALSO_NEGOTIATES; + static const std::string HTTP_REASON_INSUFFICIENT_STORAGE; + static const std::string HTTP_REASON_LOOP_DETECTED; + static const std::string HTTP_REASON_NOT_EXTENDED; + static const std::string HTTP_REASON_NETWORK_AUTHENTICATION_REQUIRED; + static const std::string HTTP_REASON_UNKNOWN; + + static const std::string DATE; + static const std::string SET_COOKIE; + +private: + enum Limits + { + MAX_VERSION_LENGTH = 8, + MAX_STATUS_LENGTH = 3, + MAX_REASON_LENGTH = 512 + }; + + HTTPStatus _status; + std::string _reason; + + HTTPResponse(const HTTPResponse&); + HTTPResponse& operator = (const HTTPResponse&); +}; + + +// +// inlines +// +inline HTTPResponse::HTTPStatus HTTPResponse::getStatus() const +{ + return _status; +} + + +inline const std::string& HTTPResponse::getReason() const +{ + return _reason; +} + + +} } // namespace Poco::Net + + +#endif // Net_HTTPResponse_INCLUDED diff --git a/contrib/libs/poco/Net/include/Poco/Net/HTTPServer.h b/contrib/libs/poco/Net/include/Poco/Net/HTTPServer.h index 5266fdbec4..69f092a673 100644 --- a/contrib/libs/poco/Net/include/Poco/Net/HTTPServer.h +++ b/contrib/libs/poco/Net/include/Poco/Net/HTTPServer.h @@ -1,103 +1,103 @@ -// -// HTTPServer.h -// -// Library: Net -// Package: HTTPServer -// Module: HTTPServer -// -// Definition of the HTTPServer class. -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Net_HTTPServer_INCLUDED -#define Net_HTTPServer_INCLUDED - - -#include "Poco/Net/Net.h" -#include "Poco/Net/TCPServer.h" -#include "Poco/Net/HTTPRequestHandlerFactory.h" -#include "Poco/Net/HTTPServerParams.h" - - -namespace Poco { -namespace Net { - - -class Net_API HTTPServer: public TCPServer - /// A subclass of TCPServer that implements a - /// full-featured multithreaded HTTP server. - /// - /// A HTTPRequestHandlerFactory must be supplied. - /// The ServerSocket must be bound and in listening state. - /// - /// To configure various aspects of the server, a HTTPServerParams - /// object can be passed to the constructor. - /// - /// The server supports: - /// - HTTP/1.0 and HTTP/1.1 - /// - automatic handling of persistent connections. - /// - automatic decoding/encoding of request/response message bodies - /// using chunked transfer encoding. - /// - /// Please see the TCPServer class for information about - /// connection and thread handling. - /// - /// See RFC 2616 <http://www.faqs.org/rfcs/rfc2616.html> for more - /// information about the HTTP protocol. -{ -public: - HTTPServer(HTTPRequestHandlerFactory::Ptr pFactory, Poco::UInt16 portNumber = 80, HTTPServerParams::Ptr pParams = new HTTPServerParams); - /// Creates HTTPServer listening on the given port (default 80). - /// - /// The server takes ownership of the HTTPRequstHandlerFactory - /// and deletes it when it's no longer needed. - /// - /// New threads are taken from the default thread pool. - - HTTPServer(HTTPRequestHandlerFactory::Ptr pFactory, const ServerSocket& socket, HTTPServerParams::Ptr pParams); - /// Creates the HTTPServer, using the given ServerSocket. - /// - /// The server takes ownership of the HTTPRequstHandlerFactory - /// and deletes it when it's no longer needed. - /// - /// The server also takes ownership of the HTTPServerParams object. - /// - /// New threads are taken from the default thread pool. - - HTTPServer(HTTPRequestHandlerFactory::Ptr pFactory, Poco::ThreadPool& threadPool, const ServerSocket& socket, HTTPServerParams::Ptr pParams); - /// Creates the HTTPServer, using the given ServerSocket. - /// - /// The server takes ownership of the HTTPRequstHandlerFactory - /// and deletes it when it's no longer needed. - /// - /// The server also takes ownership of the HTTPServerParams object. - /// - /// New threads are taken from the given thread pool. - - ~HTTPServer(); - /// Destroys the HTTPServer and its HTTPRequestHandlerFactory. - - void stopAll(bool abortCurrent = false); - /// Stops the server. In contrast to TCPServer::stop(), which also - /// stops the server, but allows all client connections to finish at - /// their pace, this allows finer control over client connections. - /// - /// If abortCurrent is false, all current requests are allowed to - /// complete. If abortCurrent is true, the underlying sockets of - /// all client connections are shut down, causing all requests - /// to abort. - -private: - HTTPRequestHandlerFactory::Ptr _pFactory; -}; - - -} } // namespace Poco::Net - - -#endif // Net_HTTPServer_INCLUDED +// +// HTTPServer.h +// +// Library: Net +// Package: HTTPServer +// Module: HTTPServer +// +// Definition of the HTTPServer class. +// +// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. +// and Contributors. +// +// SPDX-License-Identifier: BSL-1.0 +// + + +#ifndef Net_HTTPServer_INCLUDED +#define Net_HTTPServer_INCLUDED + + +#include "Poco/Net/Net.h" +#include "Poco/Net/TCPServer.h" +#include "Poco/Net/HTTPRequestHandlerFactory.h" +#include "Poco/Net/HTTPServerParams.h" + + +namespace Poco { +namespace Net { + + +class Net_API HTTPServer: public TCPServer + /// A subclass of TCPServer that implements a + /// full-featured multithreaded HTTP server. + /// + /// A HTTPRequestHandlerFactory must be supplied. + /// The ServerSocket must be bound and in listening state. + /// + /// To configure various aspects of the server, a HTTPServerParams + /// object can be passed to the constructor. + /// + /// The server supports: + /// - HTTP/1.0 and HTTP/1.1 + /// - automatic handling of persistent connections. + /// - automatic decoding/encoding of request/response message bodies + /// using chunked transfer encoding. + /// + /// Please see the TCPServer class for information about + /// connection and thread handling. + /// + /// See RFC 2616 <http://www.faqs.org/rfcs/rfc2616.html> for more + /// information about the HTTP protocol. +{ +public: + HTTPServer(HTTPRequestHandlerFactory::Ptr pFactory, Poco::UInt16 portNumber = 80, HTTPServerParams::Ptr pParams = new HTTPServerParams); + /// Creates HTTPServer listening on the given port (default 80). + /// + /// The server takes ownership of the HTTPRequstHandlerFactory + /// and deletes it when it's no longer needed. + /// + /// New threads are taken from the default thread pool. + + HTTPServer(HTTPRequestHandlerFactory::Ptr pFactory, const ServerSocket& socket, HTTPServerParams::Ptr pParams); + /// Creates the HTTPServer, using the given ServerSocket. + /// + /// The server takes ownership of the HTTPRequstHandlerFactory + /// and deletes it when it's no longer needed. + /// + /// The server also takes ownership of the HTTPServerParams object. + /// + /// New threads are taken from the default thread pool. + + HTTPServer(HTTPRequestHandlerFactory::Ptr pFactory, Poco::ThreadPool& threadPool, const ServerSocket& socket, HTTPServerParams::Ptr pParams); + /// Creates the HTTPServer, using the given ServerSocket. + /// + /// The server takes ownership of the HTTPRequstHandlerFactory + /// and deletes it when it's no longer needed. + /// + /// The server also takes ownership of the HTTPServerParams object. + /// + /// New threads are taken from the given thread pool. + + ~HTTPServer(); + /// Destroys the HTTPServer and its HTTPRequestHandlerFactory. + + void stopAll(bool abortCurrent = false); + /// Stops the server. In contrast to TCPServer::stop(), which also + /// stops the server, but allows all client connections to finish at + /// their pace, this allows finer control over client connections. + /// + /// If abortCurrent is false, all current requests are allowed to + /// complete. If abortCurrent is true, the underlying sockets of + /// all client connections are shut down, causing all requests + /// to abort. + +private: + HTTPRequestHandlerFactory::Ptr _pFactory; +}; + + +} } // namespace Poco::Net + + +#endif // Net_HTTPServer_INCLUDED diff --git a/contrib/libs/poco/Net/include/Poco/Net/HTTPServerConnection.h b/contrib/libs/poco/Net/include/Poco/Net/HTTPServerConnection.h index 9e0d3cf376..536889c04a 100644 --- a/contrib/libs/poco/Net/include/Poco/Net/HTTPServerConnection.h +++ b/contrib/libs/poco/Net/include/Poco/Net/HTTPServerConnection.h @@ -1,65 +1,65 @@ -// -// HTTPServerConnection.h -// -// Library: Net -// Package: HTTPServer -// Module: HTTPServerConnection -// -// Definition of the HTTPServerConnection class. -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Net_HTTPServerConnection_INCLUDED -#define Net_HTTPServerConnection_INCLUDED - - -#include "Poco/Net/Net.h" -#include "Poco/Net/TCPServerConnection.h" -#include "Poco/Net/HTTPResponse.h" -#include "Poco/Net/HTTPRequestHandlerFactory.h" -#include "Poco/Net/HTTPServerParams.h" -#include "Poco/Mutex.h" - - -namespace Poco { -namespace Net { - - -class HTTPServerSession; - - -class Net_API HTTPServerConnection: public TCPServerConnection - /// This subclass of TCPServerConnection handles HTTP - /// connections. -{ -public: - HTTPServerConnection(const StreamSocket& socket, HTTPServerParams::Ptr pParams, HTTPRequestHandlerFactory::Ptr pFactory); - /// Creates the HTTPServerConnection. - - virtual ~HTTPServerConnection(); - /// Destroys the HTTPServerConnection. - - void run(); - /// Handles all HTTP requests coming in. - -protected: - void sendErrorResponse(HTTPServerSession& session, HTTPResponse::HTTPStatus status); - void onServerStopped(const bool& abortCurrent); - -private: - HTTPServerParams::Ptr _pParams; - HTTPRequestHandlerFactory::Ptr _pFactory; - bool _stopped; - Poco::FastMutex _mutex; -}; - - -} } // namespace Poco::Net - - -#endif // Net_HTTPServerConnection_INCLUDED +// +// HTTPServerConnection.h +// +// Library: Net +// Package: HTTPServer +// Module: HTTPServerConnection +// +// Definition of the HTTPServerConnection class. +// +// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. +// and Contributors. +// +// SPDX-License-Identifier: BSL-1.0 +// + + +#ifndef Net_HTTPServerConnection_INCLUDED +#define Net_HTTPServerConnection_INCLUDED + + +#include "Poco/Net/Net.h" +#include "Poco/Net/TCPServerConnection.h" +#include "Poco/Net/HTTPResponse.h" +#include "Poco/Net/HTTPRequestHandlerFactory.h" +#include "Poco/Net/HTTPServerParams.h" +#include "Poco/Mutex.h" + + +namespace Poco { +namespace Net { + + +class HTTPServerSession; + + +class Net_API HTTPServerConnection: public TCPServerConnection + /// This subclass of TCPServerConnection handles HTTP + /// connections. +{ +public: + HTTPServerConnection(const StreamSocket& socket, HTTPServerParams::Ptr pParams, HTTPRequestHandlerFactory::Ptr pFactory); + /// Creates the HTTPServerConnection. + + virtual ~HTTPServerConnection(); + /// Destroys the HTTPServerConnection. + + void run(); + /// Handles all HTTP requests coming in. + +protected: + void sendErrorResponse(HTTPServerSession& session, HTTPResponse::HTTPStatus status); + void onServerStopped(const bool& abortCurrent); + +private: + HTTPServerParams::Ptr _pParams; + HTTPRequestHandlerFactory::Ptr _pFactory; + bool _stopped; + Poco::FastMutex _mutex; +}; + + +} } // namespace Poco::Net + + +#endif // Net_HTTPServerConnection_INCLUDED diff --git a/contrib/libs/poco/Net/include/Poco/Net/HTTPServerConnectionFactory.h b/contrib/libs/poco/Net/include/Poco/Net/HTTPServerConnectionFactory.h index 0386b68c7a..fc44f912c5 100644 --- a/contrib/libs/poco/Net/include/Poco/Net/HTTPServerConnectionFactory.h +++ b/contrib/libs/poco/Net/include/Poco/Net/HTTPServerConnectionFactory.h @@ -1,55 +1,55 @@ -// -// HTTPServerConnectionFactory.h -// -// Library: Net -// Package: HTTPServer -// Module: HTTPServerConnectionFactory -// -// Definition of the HTTPServerConnectionFactory class. -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Net_HTTPServerConnectionFactory_INCLUDED -#define Net_HTTPServerConnectionFactory_INCLUDED - - -#include "Poco/Net/Net.h" -#include "Poco/Net/TCPServerConnectionFactory.h" -#include "Poco/Net/HTTPRequestHandlerFactory.h" -#include "Poco/Net/HTTPServerParams.h" - - -namespace Poco { -namespace Net { - - -class Net_API HTTPServerConnectionFactory: public TCPServerConnectionFactory - /// This implementation of a TCPServerConnectionFactory - /// is used by HTTPServer to create HTTPServerConnection objects. -{ -public: - HTTPServerConnectionFactory(HTTPServerParams::Ptr pParams, HTTPRequestHandlerFactory::Ptr pFactory); - /// Creates the HTTPServerConnectionFactory. - - ~HTTPServerConnectionFactory(); - /// Destroys the HTTPServerConnectionFactory. - - TCPServerConnection* createConnection(const StreamSocket& socket); - /// Creates an instance of HTTPServerConnection - /// using the given StreamSocket. - -private: - HTTPServerParams::Ptr _pParams; - HTTPRequestHandlerFactory::Ptr _pFactory; -}; - - -} } // namespace Poco::Net - - -#endif // Net_HTTPServerConnectionFactory_INCLUDED +// +// HTTPServerConnectionFactory.h +// +// Library: Net +// Package: HTTPServer +// Module: HTTPServerConnectionFactory +// +// Definition of the HTTPServerConnectionFactory class. +// +// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. +// and Contributors. +// +// SPDX-License-Identifier: BSL-1.0 +// + + +#ifndef Net_HTTPServerConnectionFactory_INCLUDED +#define Net_HTTPServerConnectionFactory_INCLUDED + + +#include "Poco/Net/Net.h" +#include "Poco/Net/TCPServerConnectionFactory.h" +#include "Poco/Net/HTTPRequestHandlerFactory.h" +#include "Poco/Net/HTTPServerParams.h" + + +namespace Poco { +namespace Net { + + +class Net_API HTTPServerConnectionFactory: public TCPServerConnectionFactory + /// This implementation of a TCPServerConnectionFactory + /// is used by HTTPServer to create HTTPServerConnection objects. +{ +public: + HTTPServerConnectionFactory(HTTPServerParams::Ptr pParams, HTTPRequestHandlerFactory::Ptr pFactory); + /// Creates the HTTPServerConnectionFactory. + + ~HTTPServerConnectionFactory(); + /// Destroys the HTTPServerConnectionFactory. + + TCPServerConnection* createConnection(const StreamSocket& socket); + /// Creates an instance of HTTPServerConnection + /// using the given StreamSocket. + +private: + HTTPServerParams::Ptr _pParams; + HTTPRequestHandlerFactory::Ptr _pFactory; +}; + + +} } // namespace Poco::Net + + +#endif // Net_HTTPServerConnectionFactory_INCLUDED diff --git a/contrib/libs/poco/Net/include/Poco/Net/HTTPServerParams.h b/contrib/libs/poco/Net/include/Poco/Net/HTTPServerParams.h index 10da477742..0fb86aaca1 100644 --- a/contrib/libs/poco/Net/include/Poco/Net/HTTPServerParams.h +++ b/contrib/libs/poco/Net/include/Poco/Net/HTTPServerParams.h @@ -1,154 +1,154 @@ -// -// HTTPServerParams.h -// -// Library: Net -// Package: HTTPServer -// Module: HTTPServerParams -// -// Definition of the HTTPServerParams class. -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Net_HTTPServerParams_INCLUDED -#define Net_HTTPServerParams_INCLUDED - - -#include "Poco/Net/Net.h" -#include "Poco/Net/TCPServerParams.h" - - -namespace Poco { -namespace Net { - - -class Net_API HTTPServerParams: public TCPServerParams - /// This class is used to specify parameters to both the - /// HTTPServer, as well as to HTTPRequestHandler objects. - /// - /// Subclasses may add new parameters to the class. -{ -public: - typedef Poco::AutoPtr<HTTPServerParams> Ptr; - - HTTPServerParams(); - /// Creates the HTTPServerParams. - /// - /// Sets the following default values: - /// - timeout: 60 seconds - /// - keepAlive: true - /// - maxKeepAliveRequests: 0 - /// - keepAliveTimeout: 10 seconds - - void setServerName(const std::string& serverName); - /// Sets the name and port (name:port) that the server uses to identify itself. - /// - /// If this is not set to valid DNS name for your host, server-generated - /// redirections will not work. - - const std::string& getServerName() const; - /// Returns the name and port (name:port) that the server uses to identify itself. - - void setSoftwareVersion(const std::string& softwareVersion); - /// Sets the server software name and version that the server uses to identify - /// itself. If this is set to a non-empty string, the server will - /// automatically include a Server header field with the value given - /// here in every response it sends. - /// - /// The format of the softwareVersion string should be name/version - /// (e.g. MyHTTPServer/1.0). - - const std::string& getSoftwareVersion() const; - /// Returns the server software name and version that the server uses to - /// identify itself. - - void setTimeout(const Poco::Timespan& timeout); - /// Sets the connection timeout for HTTP connections. - - const Poco::Timespan& getTimeout() const; - /// Returns the connection timeout for HTTP connections. - - void setKeepAlive(bool keepAlive); - /// Enables (keepAlive == true) or disables (keepAlive == false) - /// persistent connections. - - bool getKeepAlive() const; - /// Returns true iff persistent connections are enabled. - - void setKeepAliveTimeout(const Poco::Timespan& timeout); - /// Sets the connection timeout for HTTP connections. - - const Poco::Timespan& getKeepAliveTimeout() const; - /// Returns the connection timeout for HTTP connections. - - void setMaxKeepAliveRequests(int maxKeepAliveRequests); - /// Specifies the maximum number of requests allowed - /// during a persistent connection. 0 means unlimited - /// connections. - - int getMaxKeepAliveRequests() const; - /// Returns the maximum number of requests allowed - /// during a persistent connection, or 0 if - /// unlimited connections are allowed. - -protected: - virtual ~HTTPServerParams(); - /// Destroys the HTTPServerParams. - -private: - std::string _serverName; - std::string _softwareVersion; - Poco::Timespan _timeout; - bool _keepAlive; - int _maxKeepAliveRequests; - Poco::Timespan _keepAliveTimeout; -}; - - -// -// inlines -// -inline const std::string& HTTPServerParams::getServerName() const -{ - return _serverName; -} - - -inline const std::string& HTTPServerParams::getSoftwareVersion() const -{ - return _softwareVersion; -} - - -inline const Poco::Timespan& HTTPServerParams::getTimeout() const -{ - return _timeout; -} - - -inline bool HTTPServerParams::getKeepAlive() const -{ - return _keepAlive; -} - - -inline int HTTPServerParams::getMaxKeepAliveRequests() const -{ - return _maxKeepAliveRequests; -} - - -inline const Poco::Timespan& HTTPServerParams::getKeepAliveTimeout() const -{ - return _keepAliveTimeout; -} - - -} } // namespace Poco::Net - - -#endif // Net_HTTPServerParams_INCLUDED +// +// HTTPServerParams.h +// +// Library: Net +// Package: HTTPServer +// Module: HTTPServerParams +// +// Definition of the HTTPServerParams class. +// +// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. +// and Contributors. +// +// SPDX-License-Identifier: BSL-1.0 +// + + +#ifndef Net_HTTPServerParams_INCLUDED +#define Net_HTTPServerParams_INCLUDED + + +#include "Poco/Net/Net.h" +#include "Poco/Net/TCPServerParams.h" + + +namespace Poco { +namespace Net { + + +class Net_API HTTPServerParams: public TCPServerParams + /// This class is used to specify parameters to both the + /// HTTPServer, as well as to HTTPRequestHandler objects. + /// + /// Subclasses may add new parameters to the class. +{ +public: + typedef Poco::AutoPtr<HTTPServerParams> Ptr; + + HTTPServerParams(); + /// Creates the HTTPServerParams. + /// + /// Sets the following default values: + /// - timeout: 60 seconds + /// - keepAlive: true + /// - maxKeepAliveRequests: 0 + /// - keepAliveTimeout: 10 seconds + + void setServerName(const std::string& serverName); + /// Sets the name and port (name:port) that the server uses to identify itself. + /// + /// If this is not set to valid DNS name for your host, server-generated + /// redirections will not work. + + const std::string& getServerName() const; + /// Returns the name and port (name:port) that the server uses to identify itself. + + void setSoftwareVersion(const std::string& softwareVersion); + /// Sets the server software name and version that the server uses to identify + /// itself. If this is set to a non-empty string, the server will + /// automatically include a Server header field with the value given + /// here in every response it sends. + /// + /// The format of the softwareVersion string should be name/version + /// (e.g. MyHTTPServer/1.0). + + const std::string& getSoftwareVersion() const; + /// Returns the server software name and version that the server uses to + /// identify itself. + + void setTimeout(const Poco::Timespan& timeout); + /// Sets the connection timeout for HTTP connections. + + const Poco::Timespan& getTimeout() const; + /// Returns the connection timeout for HTTP connections. + + void setKeepAlive(bool keepAlive); + /// Enables (keepAlive == true) or disables (keepAlive == false) + /// persistent connections. + + bool getKeepAlive() const; + /// Returns true iff persistent connections are enabled. + + void setKeepAliveTimeout(const Poco::Timespan& timeout); + /// Sets the connection timeout for HTTP connections. + + const Poco::Timespan& getKeepAliveTimeout() const; + /// Returns the connection timeout for HTTP connections. + + void setMaxKeepAliveRequests(int maxKeepAliveRequests); + /// Specifies the maximum number of requests allowed + /// during a persistent connection. 0 means unlimited + /// connections. + + int getMaxKeepAliveRequests() const; + /// Returns the maximum number of requests allowed + /// during a persistent connection, or 0 if + /// unlimited connections are allowed. + +protected: + virtual ~HTTPServerParams(); + /// Destroys the HTTPServerParams. + +private: + std::string _serverName; + std::string _softwareVersion; + Poco::Timespan _timeout; + bool _keepAlive; + int _maxKeepAliveRequests; + Poco::Timespan _keepAliveTimeout; +}; + + +// +// inlines +// +inline const std::string& HTTPServerParams::getServerName() const +{ + return _serverName; +} + + +inline const std::string& HTTPServerParams::getSoftwareVersion() const +{ + return _softwareVersion; +} + + +inline const Poco::Timespan& HTTPServerParams::getTimeout() const +{ + return _timeout; +} + + +inline bool HTTPServerParams::getKeepAlive() const +{ + return _keepAlive; +} + + +inline int HTTPServerParams::getMaxKeepAliveRequests() const +{ + return _maxKeepAliveRequests; +} + + +inline const Poco::Timespan& HTTPServerParams::getKeepAliveTimeout() const +{ + return _keepAliveTimeout; +} + + +} } // namespace Poco::Net + + +#endif // Net_HTTPServerParams_INCLUDED diff --git a/contrib/libs/poco/Net/include/Poco/Net/HTTPServerRequest.h b/contrib/libs/poco/Net/include/Poco/Net/HTTPServerRequest.h index 84ad4bcd83..69ffeaec08 100644 --- a/contrib/libs/poco/Net/include/Poco/Net/HTTPServerRequest.h +++ b/contrib/libs/poco/Net/include/Poco/Net/HTTPServerRequest.h @@ -1,80 +1,80 @@ -// -// HTTPServerRequest.h -// -// Library: Net -// Package: HTTPServer -// Module: HTTPServerRequest -// -// Definition of the HTTPServerRequest class. -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Net_HTTPServerRequest_INCLUDED -#define Net_HTTPServerRequest_INCLUDED - - -#include "Poco/Net/Net.h" -#include "Poco/Net/HTTPRequest.h" -#include "Poco/Net/SocketAddress.h" -#include <istream> - - -namespace Poco { -namespace Net { - - -class HTTPServerSession; -class HTTPServerResponse; -class HTTPServerParams; - - -class Net_API HTTPServerRequest: public HTTPRequest - /// This abstract subclass of HTTPRequest is used for - /// representing server-side HTTP requests. - /// - /// A HTTPServerRequest is passed to the - /// handleRequest() method of HTTPRequestHandler. -{ -public: - HTTPServerRequest(); - /// Creates the HTTPServerRequest - - ~HTTPServerRequest(); - /// Destroys the HTTPServerRequest. - - virtual std::istream& stream() = 0; - /// Returns the input stream for reading - /// the request body. - /// - /// The stream must be valid until the HTTPServerRequest - /// object is destroyed. - - virtual const SocketAddress& clientAddress() const = 0; - /// Returns the client's address. - - virtual const SocketAddress& serverAddress() const = 0; - /// Returns the server's address. - - virtual const HTTPServerParams& serverParams() const = 0; - /// Returns a reference to the server parameters. - - virtual HTTPServerResponse& response() const = 0; - /// Returns a reference to the associated response. - - virtual bool secure() const = 0; - /// Returns true if the request is using a secure - /// connection. Returns false if no secure connection - /// is used, or if it is not known whether a secure - /// connection is used. -}; - - -} } // namespace Poco::Net - - -#endif // Net_HTTPServerRequest_INCLUDED +// +// HTTPServerRequest.h +// +// Library: Net +// Package: HTTPServer +// Module: HTTPServerRequest +// +// Definition of the HTTPServerRequest class. +// +// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. +// and Contributors. +// +// SPDX-License-Identifier: BSL-1.0 +// + + +#ifndef Net_HTTPServerRequest_INCLUDED +#define Net_HTTPServerRequest_INCLUDED + + +#include "Poco/Net/Net.h" +#include "Poco/Net/HTTPRequest.h" +#include "Poco/Net/SocketAddress.h" +#include <istream> + + +namespace Poco { +namespace Net { + + +class HTTPServerSession; +class HTTPServerResponse; +class HTTPServerParams; + + +class Net_API HTTPServerRequest: public HTTPRequest + /// This abstract subclass of HTTPRequest is used for + /// representing server-side HTTP requests. + /// + /// A HTTPServerRequest is passed to the + /// handleRequest() method of HTTPRequestHandler. +{ +public: + HTTPServerRequest(); + /// Creates the HTTPServerRequest + + ~HTTPServerRequest(); + /// Destroys the HTTPServerRequest. + + virtual std::istream& stream() = 0; + /// Returns the input stream for reading + /// the request body. + /// + /// The stream must be valid until the HTTPServerRequest + /// object is destroyed. + + virtual const SocketAddress& clientAddress() const = 0; + /// Returns the client's address. + + virtual const SocketAddress& serverAddress() const = 0; + /// Returns the server's address. + + virtual const HTTPServerParams& serverParams() const = 0; + /// Returns a reference to the server parameters. + + virtual HTTPServerResponse& response() const = 0; + /// Returns a reference to the associated response. + + virtual bool secure() const = 0; + /// Returns true if the request is using a secure + /// connection. Returns false if no secure connection + /// is used, or if it is not known whether a secure + /// connection is used. +}; + + +} } // namespace Poco::Net + + +#endif // Net_HTTPServerRequest_INCLUDED diff --git a/contrib/libs/poco/Net/include/Poco/Net/HTTPServerRequestImpl.h b/contrib/libs/poco/Net/include/Poco/Net/HTTPServerRequestImpl.h index fdc329be14..419adbb5e4 100644 --- a/contrib/libs/poco/Net/include/Poco/Net/HTTPServerRequestImpl.h +++ b/contrib/libs/poco/Net/include/Poco/Net/HTTPServerRequestImpl.h @@ -1,142 +1,142 @@ -// -// HTTPServerRequestImpl.h -// -// Library: Net -// Package: HTTPServer -// Module: HTTPServerRequestImpl -// -// Definition of the HTTPServerRequestImpl class. -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Net_HTTPServerRequestImpl_INCLUDED -#define Net_HTTPServerRequestImpl_INCLUDED - - -#include "Poco/Net/Net.h" -#include "Poco/Net/HTTPServerRequest.h" -#include "Poco/Net/HTTPServerResponseImpl.h" -#include "Poco/Net/SocketAddress.h" -#include "Poco/AutoPtr.h" -#include <istream> - - -namespace Poco { -namespace Net { - - -class HTTPServerSession; -class HTTPServerParams; -class StreamSocket; - - -class Net_API HTTPServerRequestImpl: public HTTPServerRequest - /// This subclass of HTTPServerRequest is used for - /// representing server-side HTTP requests. - /// - /// A HTTPServerRequest is passed to the - /// handleRequest() method of HTTPRequestHandler. -{ -public: - HTTPServerRequestImpl(HTTPServerResponseImpl& response, HTTPServerSession& session, HTTPServerParams* pParams); - /// Creates the HTTPServerRequestImpl, using the - /// given HTTPServerSession. - - ~HTTPServerRequestImpl(); - /// Destroys the HTTPServerRequestImpl. - - std::istream& stream(); - /// Returns the input stream for reading - /// the request body. - /// - /// The stream is valid until the HTTPServerRequestImpl - /// object is destroyed. - - const SocketAddress& clientAddress() const; - /// Returns the client's address. - - const SocketAddress& serverAddress() const; - /// Returns the server's address. - - const HTTPServerParams& serverParams() const; - /// Returns a reference to the server parameters. - - HTTPServerResponse& response() const; - /// Returns a reference to the associated response. - - bool secure() const; - /// Returns true if the request is using a secure - /// connection. Returns false if no secure connection - /// is used, or if it is not known whether a secure - /// connection is used. - - StreamSocket& socket(); - /// Returns a reference to the underlying socket. - - StreamSocket detachSocket(); - /// Returns the underlying socket after detaching - /// it from the server session. - - HTTPServerSession& session(); - /// Returns the underlying HTTPServerSession. - -private: - HTTPServerResponseImpl& _response; - HTTPServerSession& _session; - std::istream* _pStream; - Poco::AutoPtr<HTTPServerParams> _pParams; - SocketAddress _clientAddress; - SocketAddress _serverAddress; -}; - - -// -// inlines -// -inline std::istream& HTTPServerRequestImpl::stream() -{ - poco_check_ptr (_pStream); - - return *_pStream; -} - - -inline const SocketAddress& HTTPServerRequestImpl::clientAddress() const -{ - return _clientAddress; -} - - -inline const SocketAddress& HTTPServerRequestImpl::serverAddress() const -{ - return _serverAddress; -} - - -inline const HTTPServerParams& HTTPServerRequestImpl::serverParams() const -{ - return *_pParams; -} - - -inline HTTPServerResponse& HTTPServerRequestImpl::response() const -{ - return _response; -} - - -inline HTTPServerSession& HTTPServerRequestImpl::session() -{ - return _session; -} - - -} } // namespace Poco::Net - - -#endif // Net_HTTPServerRequestImpl_INCLUDED +// +// HTTPServerRequestImpl.h +// +// Library: Net +// Package: HTTPServer +// Module: HTTPServerRequestImpl +// +// Definition of the HTTPServerRequestImpl class. +// +// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. +// and Contributors. +// +// SPDX-License-Identifier: BSL-1.0 +// + + +#ifndef Net_HTTPServerRequestImpl_INCLUDED +#define Net_HTTPServerRequestImpl_INCLUDED + + +#include "Poco/Net/Net.h" +#include "Poco/Net/HTTPServerRequest.h" +#include "Poco/Net/HTTPServerResponseImpl.h" +#include "Poco/Net/SocketAddress.h" +#include "Poco/AutoPtr.h" +#include <istream> + + +namespace Poco { +namespace Net { + + +class HTTPServerSession; +class HTTPServerParams; +class StreamSocket; + + +class Net_API HTTPServerRequestImpl: public HTTPServerRequest + /// This subclass of HTTPServerRequest is used for + /// representing server-side HTTP requests. + /// + /// A HTTPServerRequest is passed to the + /// handleRequest() method of HTTPRequestHandler. +{ +public: + HTTPServerRequestImpl(HTTPServerResponseImpl& response, HTTPServerSession& session, HTTPServerParams* pParams); + /// Creates the HTTPServerRequestImpl, using the + /// given HTTPServerSession. + + ~HTTPServerRequestImpl(); + /// Destroys the HTTPServerRequestImpl. + + std::istream& stream(); + /// Returns the input stream for reading + /// the request body. + /// + /// The stream is valid until the HTTPServerRequestImpl + /// object is destroyed. + + const SocketAddress& clientAddress() const; + /// Returns the client's address. + + const SocketAddress& serverAddress() const; + /// Returns the server's address. + + const HTTPServerParams& serverParams() const; + /// Returns a reference to the server parameters. + + HTTPServerResponse& response() const; + /// Returns a reference to the associated response. + + bool secure() const; + /// Returns true if the request is using a secure + /// connection. Returns false if no secure connection + /// is used, or if it is not known whether a secure + /// connection is used. + + StreamSocket& socket(); + /// Returns a reference to the underlying socket. + + StreamSocket detachSocket(); + /// Returns the underlying socket after detaching + /// it from the server session. + + HTTPServerSession& session(); + /// Returns the underlying HTTPServerSession. + +private: + HTTPServerResponseImpl& _response; + HTTPServerSession& _session; + std::istream* _pStream; + Poco::AutoPtr<HTTPServerParams> _pParams; + SocketAddress _clientAddress; + SocketAddress _serverAddress; +}; + + +// +// inlines +// +inline std::istream& HTTPServerRequestImpl::stream() +{ + poco_check_ptr (_pStream); + + return *_pStream; +} + + +inline const SocketAddress& HTTPServerRequestImpl::clientAddress() const +{ + return _clientAddress; +} + + +inline const SocketAddress& HTTPServerRequestImpl::serverAddress() const +{ + return _serverAddress; +} + + +inline const HTTPServerParams& HTTPServerRequestImpl::serverParams() const +{ + return *_pParams; +} + + +inline HTTPServerResponse& HTTPServerRequestImpl::response() const +{ + return _response; +} + + +inline HTTPServerSession& HTTPServerRequestImpl::session() +{ + return _session; +} + + +} } // namespace Poco::Net + + +#endif // Net_HTTPServerRequestImpl_INCLUDED diff --git a/contrib/libs/poco/Net/include/Poco/Net/HTTPServerResponse.h b/contrib/libs/poco/Net/include/Poco/Net/HTTPServerResponse.h index ca6f9293e5..7d89ffbb7e 100644 --- a/contrib/libs/poco/Net/include/Poco/Net/HTTPServerResponse.h +++ b/contrib/libs/poco/Net/include/Poco/Net/HTTPServerResponse.h @@ -1,127 +1,127 @@ -// -// HTTPServerResponse.h -// -// Library: Net -// Package: HTTPServer -// Module: HTTPServerResponse -// -// Definition of the HTTPServerResponse class. -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Net_HTTPServerResponse_INCLUDED -#define Net_HTTPServerResponse_INCLUDED - - -#include "Poco/Net/Net.h" -#include "Poco/Net/HTTPResponse.h" -#include <cstddef> -#include <ostream> - - -namespace Poco { -namespace Net { - - -class HTTPServerSession; -class HTTPCookie; - - -class Net_API HTTPServerResponse: public HTTPResponse - /// This subclass of HTTPResponse is used for - /// representing server-side HTTP responses. - /// - /// A HTTPServerResponse is passed to the - /// handleRequest() method of HTTPRequestHandler. - /// - /// handleRequest() must set a status code - /// and optional reason phrase, set headers - /// as necessary, and provide a message body. -{ -public: - HTTPServerResponse(); - /// Creates the HTTPServerResponse. - - ~HTTPServerResponse(); - /// Destroys the HTTPServerResponse. - - virtual void sendContinue() = 0; - /// Sends a 100 Continue response to the - /// client. - - virtual std::ostream& send() = 0; - /// Sends the response header to the client and - /// returns an output stream for sending the - /// response body. - /// - /// The returned stream is valid until the response - /// object is destroyed. - /// - /// Must not be called after beginSend(), sendFile(), sendBuffer() - /// or redirect() has been called. - - virtual std::pair<std::ostream *, std::ostream *> beginSend() = 0; - /// Sends the response headers to the client - /// but do not finish headers with \r\n, - /// allowing to continue sending additional header fields. - /// - /// Returns an output streams for sending the remaining headers - /// and response body. - /// - /// Must not be called after send(), sendFile(), sendBuffer() - /// or redirect() has been called. - - virtual void sendFile(const std::string& path, const std::string& mediaType) = 0; - /// Sends the response header to the client, followed - /// by the content of the given file. - /// - /// Must not be called after send(), sendBuffer() - /// or redirect() has been called. - /// - /// Throws a FileNotFoundException if the file - /// cannot be found, or an OpenFileException if - /// the file cannot be opened. - - virtual void sendBuffer(const void* pBuffer, std::size_t length) = 0; - /// Sends the response header to the client, followed - /// by the contents of the given buffer. - /// - /// The Content-Length header of the response is set - /// to length and chunked transfer encoding is disabled. - /// - /// If both the HTTP message header and body (from the - /// given buffer) fit into one single network packet, the - /// complete response can be sent in one network packet. - /// - /// Must not be called after send(), sendFile() - /// or redirect() has been called. - - virtual void redirect(const std::string& uri, HTTPStatus status = HTTP_FOUND) = 0; - /// Sets the status code, which must be one of - /// HTTP_MOVED_PERMANENTLY (301), HTTP_FOUND (302), - /// or HTTP_SEE_OTHER (303), - /// and sets the "Location" header field - /// to the given URI, which according to - /// the HTTP specification, must be absolute. - /// - /// Must not be called after send() has been called. - - virtual void requireAuthentication(const std::string& realm) = 0; - /// Sets the status code to 401 (Unauthorized) - /// and sets the "WWW-Authenticate" header field - /// according to the given realm. - - virtual bool sent() const = 0; - /// Returns true if the response (header) has been sent. -}; - - -} } // namespace Poco::Net - - -#endif // Net_HTTPServerResponse_INCLUDED +// +// HTTPServerResponse.h +// +// Library: Net +// Package: HTTPServer +// Module: HTTPServerResponse +// +// Definition of the HTTPServerResponse class. +// +// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. +// and Contributors. +// +// SPDX-License-Identifier: BSL-1.0 +// + + +#ifndef Net_HTTPServerResponse_INCLUDED +#define Net_HTTPServerResponse_INCLUDED + + +#include "Poco/Net/Net.h" +#include "Poco/Net/HTTPResponse.h" +#include <cstddef> +#include <ostream> + + +namespace Poco { +namespace Net { + + +class HTTPServerSession; +class HTTPCookie; + + +class Net_API HTTPServerResponse: public HTTPResponse + /// This subclass of HTTPResponse is used for + /// representing server-side HTTP responses. + /// + /// A HTTPServerResponse is passed to the + /// handleRequest() method of HTTPRequestHandler. + /// + /// handleRequest() must set a status code + /// and optional reason phrase, set headers + /// as necessary, and provide a message body. +{ +public: + HTTPServerResponse(); + /// Creates the HTTPServerResponse. + + ~HTTPServerResponse(); + /// Destroys the HTTPServerResponse. + + virtual void sendContinue() = 0; + /// Sends a 100 Continue response to the + /// client. + + virtual std::ostream& send() = 0; + /// Sends the response header to the client and + /// returns an output stream for sending the + /// response body. + /// + /// The returned stream is valid until the response + /// object is destroyed. + /// + /// Must not be called after beginSend(), sendFile(), sendBuffer() + /// or redirect() has been called. + + virtual std::pair<std::ostream *, std::ostream *> beginSend() = 0; + /// Sends the response headers to the client + /// but do not finish headers with \r\n, + /// allowing to continue sending additional header fields. + /// + /// Returns an output streams for sending the remaining headers + /// and response body. + /// + /// Must not be called after send(), sendFile(), sendBuffer() + /// or redirect() has been called. + + virtual void sendFile(const std::string& path, const std::string& mediaType) = 0; + /// Sends the response header to the client, followed + /// by the content of the given file. + /// + /// Must not be called after send(), sendBuffer() + /// or redirect() has been called. + /// + /// Throws a FileNotFoundException if the file + /// cannot be found, or an OpenFileException if + /// the file cannot be opened. + + virtual void sendBuffer(const void* pBuffer, std::size_t length) = 0; + /// Sends the response header to the client, followed + /// by the contents of the given buffer. + /// + /// The Content-Length header of the response is set + /// to length and chunked transfer encoding is disabled. + /// + /// If both the HTTP message header and body (from the + /// given buffer) fit into one single network packet, the + /// complete response can be sent in one network packet. + /// + /// Must not be called after send(), sendFile() + /// or redirect() has been called. + + virtual void redirect(const std::string& uri, HTTPStatus status = HTTP_FOUND) = 0; + /// Sets the status code, which must be one of + /// HTTP_MOVED_PERMANENTLY (301), HTTP_FOUND (302), + /// or HTTP_SEE_OTHER (303), + /// and sets the "Location" header field + /// to the given URI, which according to + /// the HTTP specification, must be absolute. + /// + /// Must not be called after send() has been called. + + virtual void requireAuthentication(const std::string& realm) = 0; + /// Sets the status code to 401 (Unauthorized) + /// and sets the "WWW-Authenticate" header field + /// according to the given realm. + + virtual bool sent() const = 0; + /// Returns true if the response (header) has been sent. +}; + + +} } // namespace Poco::Net + + +#endif // Net_HTTPServerResponse_INCLUDED diff --git a/contrib/libs/poco/Net/include/Poco/Net/HTTPServerResponseImpl.h b/contrib/libs/poco/Net/include/Poco/Net/HTTPServerResponseImpl.h index 3adfbfb7db..0210cb830f 100644 --- a/contrib/libs/poco/Net/include/Poco/Net/HTTPServerResponseImpl.h +++ b/contrib/libs/poco/Net/include/Poco/Net/HTTPServerResponseImpl.h @@ -1,151 +1,151 @@ -// -// HTTPServerResponseImpl.h -// -// Library: Net -// Package: HTTPServer -// Module: HTTPServerResponseImpl -// -// Definition of the HTTPServerResponseImpl class. -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Net_HTTPServerResponseImpl_INCLUDED -#define Net_HTTPServerResponseImpl_INCLUDED - - -#include "Poco/Net/Net.h" -#include "Poco/Net/HTTPServerResponse.h" - - -namespace Poco { -namespace Net { - - -class HTTPServerSession; -class HTTPServerRequestImpl; - - -class Net_API HTTPServerResponseImpl: public HTTPServerResponse - /// This subclass of HTTPServerResponse is used for - /// representing server-side HTTP responses. - /// - /// A HTTPServerResponse is passed to the - /// handleRequest() method of HTTPRequestHandler. - /// - /// handleRequest() must set a status code - /// and optional reason phrase, set headers - /// as necessary, and provide a message body. -{ -public: - HTTPServerResponseImpl(HTTPServerSession& session); - /// Creates the HTTPServerResponseImpl. - - ~HTTPServerResponseImpl(); - /// Destroys the HTTPServerResponseImpl. - - void sendContinue(); - /// Sends a 100 Continue response to the - /// client. - - std::ostream& send(); - /// Sends the response header to the client and - /// returns an output stream for sending the - /// response body. - /// - /// The returned stream is valid until the response - /// object is destroyed. - /// - /// Must not be called after beginSend(), sendFile(), sendBuffer() - /// or redirect() has been called. - - std::pair<std::ostream *, std::ostream *> beginSend(); - /// Sends the response headers to the client - /// but do not finish headers with \r\n, - /// allowing to continue sending additional header fields. - /// - /// Returns an output streams for sending the remaining headers - /// and response body. - /// - /// Must not be called after send(), sendFile(), sendBuffer() - /// or redirect() has been called. - - void sendFile(const std::string& path, const std::string& mediaType); - /// Sends the response header to the client, followed - /// by the content of the given file. - /// - /// Must not be called after send(), sendBuffer() - /// or redirect() has been called. - /// - /// Throws a FileNotFoundException if the file - /// cannot be found, or an OpenFileException if - /// the file cannot be opened. - - void sendBuffer(const void* pBuffer, std::size_t length); - /// Sends the response header to the client, followed - /// by the contents of the given buffer. - /// - /// The Content-Length header of the response is set - /// to length and chunked transfer encoding is disabled. - /// - /// If both the HTTP message header and body (from the - /// given buffer) fit into one single network packet, the - /// complete response can be sent in one network packet. - /// - /// Must not be called after send(), sendFile() - /// or redirect() has been called. - - void redirect(const std::string& uri, HTTPStatus status = HTTP_FOUND); - /// Sets the status code, which must be one of - /// HTTP_MOVED_PERMANENTLY (301), HTTP_FOUND (302), - /// or HTTP_SEE_OTHER (303), - /// and sets the "Location" header field - /// to the given URI, which according to - /// the HTTP specification, must be absolute. - /// - /// Must not be called after send() has been called. - - void requireAuthentication(const std::string& realm); - /// Sets the status code to 401 (Unauthorized) - /// and sets the "WWW-Authenticate" header field - /// according to the given realm. - - bool sent() const; - /// Returns true if the response (header) has been sent. - -protected: - void attachRequest(HTTPServerRequestImpl* pRequest); - -private: - HTTPServerSession& _session; - HTTPServerRequestImpl* _pRequest; - std::ostream* _pStream; - std::ostream* _pHeaderStream; - - friend class HTTPServerRequestImpl; -}; - - -// -// inlines -// -inline bool HTTPServerResponseImpl::sent() const -{ - return _pStream != 0; -} - - -inline void HTTPServerResponseImpl::attachRequest(HTTPServerRequestImpl* pRequest) -{ - _pRequest = pRequest; -} - - -} } // namespace Poco::Net - - -#endif // Net_HTTPServerResponseImpl_INCLUDED +// +// HTTPServerResponseImpl.h +// +// Library: Net +// Package: HTTPServer +// Module: HTTPServerResponseImpl +// +// Definition of the HTTPServerResponseImpl class. +// +// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. +// and Contributors. +// +// SPDX-License-Identifier: BSL-1.0 +// + + +#ifndef Net_HTTPServerResponseImpl_INCLUDED +#define Net_HTTPServerResponseImpl_INCLUDED + + +#include "Poco/Net/Net.h" +#include "Poco/Net/HTTPServerResponse.h" + + +namespace Poco { +namespace Net { + + +class HTTPServerSession; +class HTTPServerRequestImpl; + + +class Net_API HTTPServerResponseImpl: public HTTPServerResponse + /// This subclass of HTTPServerResponse is used for + /// representing server-side HTTP responses. + /// + /// A HTTPServerResponse is passed to the + /// handleRequest() method of HTTPRequestHandler. + /// + /// handleRequest() must set a status code + /// and optional reason phrase, set headers + /// as necessary, and provide a message body. +{ +public: + HTTPServerResponseImpl(HTTPServerSession& session); + /// Creates the HTTPServerResponseImpl. + + ~HTTPServerResponseImpl(); + /// Destroys the HTTPServerResponseImpl. + + void sendContinue(); + /// Sends a 100 Continue response to the + /// client. + + std::ostream& send(); + /// Sends the response header to the client and + /// returns an output stream for sending the + /// response body. + /// + /// The returned stream is valid until the response + /// object is destroyed. + /// + /// Must not be called after beginSend(), sendFile(), sendBuffer() + /// or redirect() has been called. + + std::pair<std::ostream *, std::ostream *> beginSend(); + /// Sends the response headers to the client + /// but do not finish headers with \r\n, + /// allowing to continue sending additional header fields. + /// + /// Returns an output streams for sending the remaining headers + /// and response body. + /// + /// Must not be called after send(), sendFile(), sendBuffer() + /// or redirect() has been called. + + void sendFile(const std::string& path, const std::string& mediaType); + /// Sends the response header to the client, followed + /// by the content of the given file. + /// + /// Must not be called after send(), sendBuffer() + /// or redirect() has been called. + /// + /// Throws a FileNotFoundException if the file + /// cannot be found, or an OpenFileException if + /// the file cannot be opened. + + void sendBuffer(const void* pBuffer, std::size_t length); + /// Sends the response header to the client, followed + /// by the contents of the given buffer. + /// + /// The Content-Length header of the response is set + /// to length and chunked transfer encoding is disabled. + /// + /// If both the HTTP message header and body (from the + /// given buffer) fit into one single network packet, the + /// complete response can be sent in one network packet. + /// + /// Must not be called after send(), sendFile() + /// or redirect() has been called. + + void redirect(const std::string& uri, HTTPStatus status = HTTP_FOUND); + /// Sets the status code, which must be one of + /// HTTP_MOVED_PERMANENTLY (301), HTTP_FOUND (302), + /// or HTTP_SEE_OTHER (303), + /// and sets the "Location" header field + /// to the given URI, which according to + /// the HTTP specification, must be absolute. + /// + /// Must not be called after send() has been called. + + void requireAuthentication(const std::string& realm); + /// Sets the status code to 401 (Unauthorized) + /// and sets the "WWW-Authenticate" header field + /// according to the given realm. + + bool sent() const; + /// Returns true if the response (header) has been sent. + +protected: + void attachRequest(HTTPServerRequestImpl* pRequest); + +private: + HTTPServerSession& _session; + HTTPServerRequestImpl* _pRequest; + std::ostream* _pStream; + std::ostream* _pHeaderStream; + + friend class HTTPServerRequestImpl; +}; + + +// +// inlines +// +inline bool HTTPServerResponseImpl::sent() const +{ + return _pStream != 0; +} + + +inline void HTTPServerResponseImpl::attachRequest(HTTPServerRequestImpl* pRequest) +{ + _pRequest = pRequest; +} + + +} } // namespace Poco::Net + + +#endif // Net_HTTPServerResponseImpl_INCLUDED diff --git a/contrib/libs/poco/Net/include/Poco/Net/HTTPServerSession.h b/contrib/libs/poco/Net/include/Poco/Net/HTTPServerSession.h index 092c1329b2..8b169bf556 100644 --- a/contrib/libs/poco/Net/include/Poco/Net/HTTPServerSession.h +++ b/contrib/libs/poco/Net/include/Poco/Net/HTTPServerSession.h @@ -1,76 +1,76 @@ -// -// HTTPServerSession.h -// -// Library: Net -// Package: HTTPServer -// Module: HTTPServerSession -// -// Definition of the HTTPServerSession class. -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Net_HTTPServerSession_INCLUDED -#define Net_HTTPServerSession_INCLUDED - - -#include "Poco/Net/Net.h" -#include "Poco/Net/HTTPSession.h" -#include "Poco/Net/SocketAddress.h" -#include "Poco/Net/HTTPServerSession.h" -#include "Poco/Net/HTTPServerParams.h" -#include "Poco/Timespan.h" - - -namespace Poco { -namespace Net { - - -class Net_API HTTPServerSession: public HTTPSession - /// This class handles the server side of a - /// HTTP session. It is used internally by - /// HTTPServer. -{ -public: - HTTPServerSession(const StreamSocket& socket, HTTPServerParams::Ptr pParams); - /// Creates the HTTPServerSession. - - virtual ~HTTPServerSession(); - /// Destroys the HTTPServerSession. - - bool hasMoreRequests(); - /// Returns true if there are requests available. - - bool canKeepAlive() const; - /// Returns true if the session can be kept alive. - - SocketAddress clientAddress(); - /// Returns the client's address. - - SocketAddress serverAddress(); - /// Returns the server's address. - -private: - bool _firstRequest; - Poco::Timespan _keepAliveTimeout; - int _maxKeepAliveRequests; -}; - - -// -// inlines -// -inline bool HTTPServerSession::canKeepAlive() const -{ - return _maxKeepAliveRequests != 0; -} - - -} } // namespace Poco::Net - - -#endif // Net_HTTPServerSession_INCLUDED +// +// HTTPServerSession.h +// +// Library: Net +// Package: HTTPServer +// Module: HTTPServerSession +// +// Definition of the HTTPServerSession class. +// +// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. +// and Contributors. +// +// SPDX-License-Identifier: BSL-1.0 +// + + +#ifndef Net_HTTPServerSession_INCLUDED +#define Net_HTTPServerSession_INCLUDED + + +#include "Poco/Net/Net.h" +#include "Poco/Net/HTTPSession.h" +#include "Poco/Net/SocketAddress.h" +#include "Poco/Net/HTTPServerSession.h" +#include "Poco/Net/HTTPServerParams.h" +#include "Poco/Timespan.h" + + +namespace Poco { +namespace Net { + + +class Net_API HTTPServerSession: public HTTPSession + /// This class handles the server side of a + /// HTTP session. It is used internally by + /// HTTPServer. +{ +public: + HTTPServerSession(const StreamSocket& socket, HTTPServerParams::Ptr pParams); + /// Creates the HTTPServerSession. + + virtual ~HTTPServerSession(); + /// Destroys the HTTPServerSession. + + bool hasMoreRequests(); + /// Returns true if there are requests available. + + bool canKeepAlive() const; + /// Returns true if the session can be kept alive. + + SocketAddress clientAddress(); + /// Returns the client's address. + + SocketAddress serverAddress(); + /// Returns the server's address. + +private: + bool _firstRequest; + Poco::Timespan _keepAliveTimeout; + int _maxKeepAliveRequests; +}; + + +// +// inlines +// +inline bool HTTPServerSession::canKeepAlive() const +{ + return _maxKeepAliveRequests != 0; +} + + +} } // namespace Poco::Net + + +#endif // Net_HTTPServerSession_INCLUDED diff --git a/contrib/libs/poco/Net/include/Poco/Net/HTTPSession.h b/contrib/libs/poco/Net/include/Poco/Net/HTTPSession.h index 79f0f374f2..666f6f6267 100644 --- a/contrib/libs/poco/Net/include/Poco/Net/HTTPSession.h +++ b/contrib/libs/poco/Net/include/Poco/Net/HTTPSession.h @@ -1,251 +1,251 @@ -// -// HTTPSession.h -// -// Library: Net -// Package: HTTP -// Module: HTTPSession -// -// Definition of the HTTPSession class. -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Net_HTTPSession_INCLUDED -#define Net_HTTPSession_INCLUDED - - -#include "Poco/Net/Net.h" -#include "Poco/Net/StreamSocket.h" -#include "Poco/Timespan.h" -#include "Poco/Exception.h" -#include "Poco/Any.h" -#include "Poco/Buffer.h" -#include <ios> - - -namespace Poco { -namespace Net { - - -class Net_API HTTPSession - /// HTTPSession implements basic HTTP session management - /// for both HTTP clients and HTTP servers. - /// - /// HTTPSession implements buffering for HTTP connections, as well - /// as specific support for the various HTTP stream classes. - /// - /// This class can not be instantiated. HTTPClientSession or - /// HTTPServerSession must be used instead. -{ -public: - void setKeepAlive(bool keepAlive); - /// Sets the keep-alive flag for this session. +// +// HTTPSession.h +// +// Library: Net +// Package: HTTP +// Module: HTTPSession +// +// Definition of the HTTPSession class. +// +// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. +// and Contributors. +// +// SPDX-License-Identifier: BSL-1.0 +// + + +#ifndef Net_HTTPSession_INCLUDED +#define Net_HTTPSession_INCLUDED + + +#include "Poco/Net/Net.h" +#include "Poco/Net/StreamSocket.h" +#include "Poco/Timespan.h" +#include "Poco/Exception.h" +#include "Poco/Any.h" +#include "Poco/Buffer.h" +#include <ios> + + +namespace Poco { +namespace Net { + + +class Net_API HTTPSession + /// HTTPSession implements basic HTTP session management + /// for both HTTP clients and HTTP servers. + /// + /// HTTPSession implements buffering for HTTP connections, as well + /// as specific support for the various HTTP stream classes. + /// + /// This class can not be instantiated. HTTPClientSession or + /// HTTPServerSession must be used instead. +{ +public: + void setKeepAlive(bool keepAlive); + /// Sets the keep-alive flag for this session. + /// + /// If the keep-alive flag is enabled, persistent + /// HTTP/1.1 connections are supported. + + bool getKeepAlive() const; + /// Returns the value of the keep-alive flag for + /// this session. + + void setTimeout(const Poco::Timespan& timeout); + /// Sets the timeout for the HTTP session. + + void setTimeout(const Poco::Timespan& connectionTimeout, const Poco::Timespan& sendTimeout, const Poco::Timespan& receiveTimeout); + /// Sets different timeouts for the HTTP session. + + Poco::Timespan getTimeout() const; + /// Returns the timeout for the HTTP session. + + bool connected() const; + /// Returns true if the underlying socket is connected. + + virtual void abort(); + /// Aborts a session in progress by shutting down + /// and closing the underlying socket. + + const Poco::Exception* networkException() const; + /// If sending or receiving data over the underlying + /// socket connection resulted in an exception, a + /// pointer to this exception is returned. /// - /// If the keep-alive flag is enabled, persistent - /// HTTP/1.1 connections are supported. - - bool getKeepAlive() const; - /// Returns the value of the keep-alive flag for - /// this session. - - void setTimeout(const Poco::Timespan& timeout); - /// Sets the timeout for the HTTP session. - - void setTimeout(const Poco::Timespan& connectionTimeout, const Poco::Timespan& sendTimeout, const Poco::Timespan& receiveTimeout); - /// Sets different timeouts for the HTTP session. - - Poco::Timespan getTimeout() const; - /// Returns the timeout for the HTTP session. - - bool connected() const; - /// Returns true if the underlying socket is connected. - - virtual void abort(); - /// Aborts a session in progress by shutting down - /// and closing the underlying socket. - - const Poco::Exception* networkException() const; - /// If sending or receiving data over the underlying - /// socket connection resulted in an exception, a - /// pointer to this exception is returned. - /// - /// Otherwise, NULL is returned. - - void attachSessionData(const Poco::Any& data); - /// Allows to attach an application-specific data - /// item to the session. - /// - /// On the server side, this can be used to manage - /// data that must be maintained over the entire - /// lifetime of a persistent connection (that is, - /// multiple requests sent over the same connection). - - const Poco::Any& sessionData() const; - /// Returns the data attached with attachSessionData(), - /// or an empty Poco::Any if no user data has been - /// attached. - - enum - { - HTTP_PORT = 80 - }; - - StreamSocket detachSocket(); - /// Detaches the socket from the session. - /// - /// The socket is returned, and a new, uninitialized socket is - /// attached to the session. - - StreamSocket& socket(); - /// Returns a reference to the underlying socket. - - void drainBuffer(Poco::Buffer<char>& buffer); - /// Copies all bytes remaining in the internal buffer to the - /// given Poco::Buffer, resizing it as necessary. - /// - /// This is usually used together with detachSocket() to - /// obtain any data already read from the socket, but not - /// yet processed. - -protected: - HTTPSession(); - /// Creates a HTTP session using an - /// unconnected stream socket. - - HTTPSession(const StreamSocket& socket); - /// Creates a HTTP session using the - /// given socket. The session takes ownership - /// of the socket and closes it when it's no - /// longer used. - - HTTPSession(const StreamSocket& socket, bool keepAlive); - /// Creates a HTTP session using the - /// given socket. The session takes ownership - /// of the socket and closes it when it's no - /// longer used. - - virtual ~HTTPSession(); - /// Destroys the HTTPSession and closes the - /// underlying socket. - - int get(); - /// Returns the next byte in the buffer. - /// Reads more data from the socket if there are - /// no bytes left in the buffer. - - int peek(); - /// Peeks at the next character in the buffer. - /// Reads more data from the socket if there are - /// no bytes left in the buffer. - - virtual int read(char* buffer, std::streamsize length); - /// Reads up to length bytes. - /// - /// If there is data in the buffer, this data - /// is returned. Otherwise, data is read from - /// the socket to avoid unnecessary buffering. - - virtual int write(const char* buffer, std::streamsize length); - /// Writes data to the socket. - - int receive(char* buffer, int length); - /// Reads up to length bytes. - - int buffered() const; - /// Returns the number of bytes in the buffer. - - void refill(); - /// Refills the internal buffer. - - virtual void connect(const SocketAddress& address); - /// Connects the underlying socket to the given address - /// and sets the socket's receive timeout. - - void attachSocket(const StreamSocket& socket); - /// Attaches a socket to the session, replacing the - /// previously attached socket. - - void close(); - /// Closes the underlying socket. - - void setException(const Poco::Exception& exc); - /// Stores a clone of the exception. - - void clearException(); - /// Clears the stored exception. - -private: - enum - { - HTTP_DEFAULT_TIMEOUT = 60000000, - HTTP_DEFAULT_CONNECTION_TIMEOUT = 30000000 - }; - - HTTPSession(const HTTPSession&); - HTTPSession& operator = (const HTTPSession&); - - StreamSocket _socket; - char* _pBuffer; - char* _pCurrent; - char* _pEnd; - bool _keepAlive; - Poco::Timespan _connectionTimeout; - Poco::Timespan _receiveTimeout; - Poco::Timespan _sendTimeout; - Poco::Exception* _pException; - Poco::Any _data; - - friend class HTTPStreamBuf; - friend class HTTPHeaderStreamBuf; - friend class HTTPFixedLengthStreamBuf; - friend class HTTPChunkedStreamBuf; -}; - - -// -// inlines -// -inline bool HTTPSession::getKeepAlive() const -{ - return _keepAlive; -} - - -inline Poco::Timespan HTTPSession::getTimeout() const -{ - return _receiveTimeout; -} - - -inline StreamSocket& HTTPSession::socket() -{ - return _socket; -} - - -inline const Poco::Exception* HTTPSession::networkException() const -{ - return _pException; -} - - -inline int HTTPSession::buffered() const -{ - return static_cast<int>(_pEnd - _pCurrent); -} - - -inline const Poco::Any& HTTPSession::sessionData() const -{ - return _data; -} - - -} } // namespace Poco::Net - - -#endif // Net_HTTPSession_INCLUDED + /// Otherwise, NULL is returned. + + void attachSessionData(const Poco::Any& data); + /// Allows to attach an application-specific data + /// item to the session. + /// + /// On the server side, this can be used to manage + /// data that must be maintained over the entire + /// lifetime of a persistent connection (that is, + /// multiple requests sent over the same connection). + + const Poco::Any& sessionData() const; + /// Returns the data attached with attachSessionData(), + /// or an empty Poco::Any if no user data has been + /// attached. + + enum + { + HTTP_PORT = 80 + }; + + StreamSocket detachSocket(); + /// Detaches the socket from the session. + /// + /// The socket is returned, and a new, uninitialized socket is + /// attached to the session. + + StreamSocket& socket(); + /// Returns a reference to the underlying socket. + + void drainBuffer(Poco::Buffer<char>& buffer); + /// Copies all bytes remaining in the internal buffer to the + /// given Poco::Buffer, resizing it as necessary. + /// + /// This is usually used together with detachSocket() to + /// obtain any data already read from the socket, but not + /// yet processed. + +protected: + HTTPSession(); + /// Creates a HTTP session using an + /// unconnected stream socket. + + HTTPSession(const StreamSocket& socket); + /// Creates a HTTP session using the + /// given socket. The session takes ownership + /// of the socket and closes it when it's no + /// longer used. + + HTTPSession(const StreamSocket& socket, bool keepAlive); + /// Creates a HTTP session using the + /// given socket. The session takes ownership + /// of the socket and closes it when it's no + /// longer used. + + virtual ~HTTPSession(); + /// Destroys the HTTPSession and closes the + /// underlying socket. + + int get(); + /// Returns the next byte in the buffer. + /// Reads more data from the socket if there are + /// no bytes left in the buffer. + + int peek(); + /// Peeks at the next character in the buffer. + /// Reads more data from the socket if there are + /// no bytes left in the buffer. + + virtual int read(char* buffer, std::streamsize length); + /// Reads up to length bytes. + /// + /// If there is data in the buffer, this data + /// is returned. Otherwise, data is read from + /// the socket to avoid unnecessary buffering. + + virtual int write(const char* buffer, std::streamsize length); + /// Writes data to the socket. + + int receive(char* buffer, int length); + /// Reads up to length bytes. + + int buffered() const; + /// Returns the number of bytes in the buffer. + + void refill(); + /// Refills the internal buffer. + + virtual void connect(const SocketAddress& address); + /// Connects the underlying socket to the given address + /// and sets the socket's receive timeout. + + void attachSocket(const StreamSocket& socket); + /// Attaches a socket to the session, replacing the + /// previously attached socket. + + void close(); + /// Closes the underlying socket. + + void setException(const Poco::Exception& exc); + /// Stores a clone of the exception. + + void clearException(); + /// Clears the stored exception. + +private: + enum + { + HTTP_DEFAULT_TIMEOUT = 60000000, + HTTP_DEFAULT_CONNECTION_TIMEOUT = 30000000 + }; + + HTTPSession(const HTTPSession&); + HTTPSession& operator = (const HTTPSession&); + + StreamSocket _socket; + char* _pBuffer; + char* _pCurrent; + char* _pEnd; + bool _keepAlive; + Poco::Timespan _connectionTimeout; + Poco::Timespan _receiveTimeout; + Poco::Timespan _sendTimeout; + Poco::Exception* _pException; + Poco::Any _data; + + friend class HTTPStreamBuf; + friend class HTTPHeaderStreamBuf; + friend class HTTPFixedLengthStreamBuf; + friend class HTTPChunkedStreamBuf; +}; + + +// +// inlines +// +inline bool HTTPSession::getKeepAlive() const +{ + return _keepAlive; +} + + +inline Poco::Timespan HTTPSession::getTimeout() const +{ + return _receiveTimeout; +} + + +inline StreamSocket& HTTPSession::socket() +{ + return _socket; +} + + +inline const Poco::Exception* HTTPSession::networkException() const +{ + return _pException; +} + + +inline int HTTPSession::buffered() const +{ + return static_cast<int>(_pEnd - _pCurrent); +} + + +inline const Poco::Any& HTTPSession::sessionData() const +{ + return _data; +} + + +} } // namespace Poco::Net + + +#endif // Net_HTTPSession_INCLUDED diff --git a/contrib/libs/poco/Net/include/Poco/Net/HTTPSessionFactory.h b/contrib/libs/poco/Net/include/Poco/Net/HTTPSessionFactory.h index 3da31f375e..3bc7d15d2c 100644 --- a/contrib/libs/poco/Net/include/Poco/Net/HTTPSessionFactory.h +++ b/contrib/libs/poco/Net/include/Poco/Net/HTTPSessionFactory.h @@ -1,155 +1,155 @@ -// -// HTTPSessionFactory.h -// -// Library: Net -// Package: HTTPClient -// Module: HTTPSessionFactory -// -// Definition of the HTTPSessionFactory class. -// -// Copyright (c) 2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Net_HTTPSessionFactoryMgr_INCLUDED -#define Net_HTTPSessionFactoryMgr_INCLUDED - - -#include "Poco/Net/Net.h" -#include "Poco/Mutex.h" -#include "Poco/URI.h" -#include "Poco/SingletonHolder.h" -#include "Poco/SharedPtr.h" -#include <map> - - -namespace Poco { -namespace Net { - - -class HTTPSessionInstantiator; -class HTTPClientSession; - - -class Net_API HTTPSessionFactory - /// A factory for HTTPClientSession objects. - /// - /// Given a URI, this class creates a HTTPClientSession - /// (for http) or a HTTPSClientSession (for https) for - /// accessing the URI. - /// - /// The actual work of creating the session is done by - /// HTTPSessionInstantiator objects that must be registered - /// with a HTTPSessionFactory. -{ -public: - HTTPSessionFactory(); - /// Creates the HTTPSessionFactory. - - HTTPSessionFactory(const std::string& proxyHost, Poco::UInt16 proxyPort); - /// Creates the HTTPSessionFactory and sets the proxy host and port. - - ~HTTPSessionFactory(); - /// Destroys the HTTPSessionFactory. - - void registerProtocol(const std::string& protocol, HTTPSessionInstantiator* pSessionInstantiator); - /// Registers the session instantiator for the given protocol. - /// The factory takes ownership of the SessionInstantiator. - /// - /// A protocol can be registered more than once. However, only the instantiator - /// that has been registered first is used. Also, for each call to - /// registerProtocol(), a corresponding call to unregisterProtocol() must - /// be made. - - void unregisterProtocol(const std::string& protocol); - /// Removes the registration of a protocol. - /// - /// Throws a NotFoundException if no instantiator has been registered - /// for the given protocol. - - bool supportsProtocol(const std::string& protocol); - /// Returns true if a session instantiator for the given protocol has been registered. - - HTTPClientSession* createClientSession(const Poco::URI& uri); - /// Creates a client session for the given uri scheme. Throws exception if no factory is registered for the given scheme - - const std::string& proxyHost() const; - /// Returns the proxy host, if one has been set, or an empty string otherwise. - - Poco::UInt16 proxyPort() const; - /// Returns the proxy port number, if one has been set, or zero otherwise. - - void setProxy(const std::string& proxyHost, Poco::UInt16 proxyPort); - /// Sets the proxy host and port number. - - void setProxyCredentials(const std::string& username, const std::string& password); - /// Sets the username and password for proxy authorization (Basic auth only). - - const std::string& proxyUsername() const; - /// Returns the username for proxy authorization. - - const std::string& proxyPassword() const; - /// Returns the password for proxy authorization. - - static HTTPSessionFactory& defaultFactory(); - /// Returns the default HTTPSessionFactory. - -private: - struct InstantiatorInfo - { - HTTPSessionInstantiator* pIn; - int cnt; - InstantiatorInfo(HTTPSessionInstantiator* pInst); - // no destructor!!! this is by purpose, don't add one! - }; - - - HTTPSessionFactory(const HTTPSessionFactory&); - HTTPSessionFactory& operator = (const HTTPSessionFactory&); - - typedef std::map<std::string, InstantiatorInfo> Instantiators; - - Instantiators _instantiators; - std::string _proxyHost; - Poco::UInt16 _proxyPort; - std::string _proxyUsername; - std::string _proxyPassword; - - mutable Poco::FastMutex _mutex; -}; - - -// -// inlines -// -inline const std::string& HTTPSessionFactory::proxyHost() const -{ - return _proxyHost; -} - - -inline Poco::UInt16 HTTPSessionFactory::proxyPort() const -{ - return _proxyPort; -} - - -inline const std::string& HTTPSessionFactory::proxyUsername() const -{ - return _proxyUsername; -} - - -inline const std::string& HTTPSessionFactory::proxyPassword() const -{ - return _proxyPassword; -} - - -} } // namespace Poco::Net - - -#endif // Net_HTTPSessionFactoryMgr_INCLUDED +// +// HTTPSessionFactory.h +// +// Library: Net +// Package: HTTPClient +// Module: HTTPSessionFactory +// +// Definition of the HTTPSessionFactory class. +// +// Copyright (c) 2006, Applied Informatics Software Engineering GmbH. +// and Contributors. +// +// SPDX-License-Identifier: BSL-1.0 +// + + +#ifndef Net_HTTPSessionFactoryMgr_INCLUDED +#define Net_HTTPSessionFactoryMgr_INCLUDED + + +#include "Poco/Net/Net.h" +#include "Poco/Mutex.h" +#include "Poco/URI.h" +#include "Poco/SingletonHolder.h" +#include "Poco/SharedPtr.h" +#include <map> + + +namespace Poco { +namespace Net { + + +class HTTPSessionInstantiator; +class HTTPClientSession; + + +class Net_API HTTPSessionFactory + /// A factory for HTTPClientSession objects. + /// + /// Given a URI, this class creates a HTTPClientSession + /// (for http) or a HTTPSClientSession (for https) for + /// accessing the URI. + /// + /// The actual work of creating the session is done by + /// HTTPSessionInstantiator objects that must be registered + /// with a HTTPSessionFactory. +{ +public: + HTTPSessionFactory(); + /// Creates the HTTPSessionFactory. + + HTTPSessionFactory(const std::string& proxyHost, Poco::UInt16 proxyPort); + /// Creates the HTTPSessionFactory and sets the proxy host and port. + + ~HTTPSessionFactory(); + /// Destroys the HTTPSessionFactory. + + void registerProtocol(const std::string& protocol, HTTPSessionInstantiator* pSessionInstantiator); + /// Registers the session instantiator for the given protocol. + /// The factory takes ownership of the SessionInstantiator. + /// + /// A protocol can be registered more than once. However, only the instantiator + /// that has been registered first is used. Also, for each call to + /// registerProtocol(), a corresponding call to unregisterProtocol() must + /// be made. + + void unregisterProtocol(const std::string& protocol); + /// Removes the registration of a protocol. + /// + /// Throws a NotFoundException if no instantiator has been registered + /// for the given protocol. + + bool supportsProtocol(const std::string& protocol); + /// Returns true if a session instantiator for the given protocol has been registered. + + HTTPClientSession* createClientSession(const Poco::URI& uri); + /// Creates a client session for the given uri scheme. Throws exception if no factory is registered for the given scheme + + const std::string& proxyHost() const; + /// Returns the proxy host, if one has been set, or an empty string otherwise. + + Poco::UInt16 proxyPort() const; + /// Returns the proxy port number, if one has been set, or zero otherwise. + + void setProxy(const std::string& proxyHost, Poco::UInt16 proxyPort); + /// Sets the proxy host and port number. + + void setProxyCredentials(const std::string& username, const std::string& password); + /// Sets the username and password for proxy authorization (Basic auth only). + + const std::string& proxyUsername() const; + /// Returns the username for proxy authorization. + + const std::string& proxyPassword() const; + /// Returns the password for proxy authorization. + + static HTTPSessionFactory& defaultFactory(); + /// Returns the default HTTPSessionFactory. + +private: + struct InstantiatorInfo + { + HTTPSessionInstantiator* pIn; + int cnt; + InstantiatorInfo(HTTPSessionInstantiator* pInst); + // no destructor!!! this is by purpose, don't add one! + }; + + + HTTPSessionFactory(const HTTPSessionFactory&); + HTTPSessionFactory& operator = (const HTTPSessionFactory&); + + typedef std::map<std::string, InstantiatorInfo> Instantiators; + + Instantiators _instantiators; + std::string _proxyHost; + Poco::UInt16 _proxyPort; + std::string _proxyUsername; + std::string _proxyPassword; + + mutable Poco::FastMutex _mutex; +}; + + +// +// inlines +// +inline const std::string& HTTPSessionFactory::proxyHost() const +{ + return _proxyHost; +} + + +inline Poco::UInt16 HTTPSessionFactory::proxyPort() const +{ + return _proxyPort; +} + + +inline const std::string& HTTPSessionFactory::proxyUsername() const +{ + return _proxyUsername; +} + + +inline const std::string& HTTPSessionFactory::proxyPassword() const +{ + return _proxyPassword; +} + + +} } // namespace Poco::Net + + +#endif // Net_HTTPSessionFactoryMgr_INCLUDED diff --git a/contrib/libs/poco/Net/include/Poco/Net/HTTPSessionInstantiator.h b/contrib/libs/poco/Net/include/Poco/Net/HTTPSessionInstantiator.h index d58ad2688c..cbb6ee82f2 100644 --- a/contrib/libs/poco/Net/include/Poco/Net/HTTPSessionInstantiator.h +++ b/contrib/libs/poco/Net/include/Poco/Net/HTTPSessionInstantiator.h @@ -1,117 +1,117 @@ -// -// HTTPSessionInstantiator.h -// -// Library: Net -// Package: HTTPClient -// Module: HTTPSessionInstantiator -// -// Definition of the HTTPSessionInstantiator class. -// -// Copyright (c) 2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Net_HTTPSessionInstantiator_INCLUDED -#define Net_HTTPSessionInstantiator_INCLUDED - - -#include "Poco/Net/Net.h" -#include "Poco/Net/HTTPSession.h" -#include "Poco/URI.h" - - -namespace Poco { -namespace Net { - - -class HTTPClientSession; - - -class Net_API HTTPSessionInstantiator - /// A factory for HTTPClientSession objects. - /// - /// Creates a HTTP session for a given URI. - /// A HTTPSessionInstantiator is not used directly. - /// Instances are registered with a HTTPSessionFactory, - /// and used through it. -{ -public: - HTTPSessionInstantiator(); - /// Creates the HTTPSessionInstantiator. - - virtual ~HTTPSessionInstantiator(); - /// Destroys the HTTPSessionInstantiator. - - virtual HTTPClientSession* createClientSession(const Poco::URI& uri); - /// Creates a HTTPClientSession for the given URI. - - static void registerInstantiator(); - /// Registers the instantiator with the global HTTPSessionFactory. - - static void unregisterInstantiator(); - /// Unregisters the factory with the global HTTPSessionFactory. - -protected: - void setProxy(const std::string& host, Poco::UInt16 port); - /// Sets the proxy host and port. - /// Called by HTTPSessionFactory. - - const std::string& proxyHost() const; - /// Returns the proxy post. - - Poco::UInt16 proxyPort() const; - /// Returns the proxy port. - - void setProxyCredentials(const std::string& username, const std::string& password); - /// Sets the username and password for proxy authorization (Basic auth only). - - const std::string& proxyUsername() const; - /// Returns the username for proxy authorization. - - const std::string& proxyPassword() const; - /// Returns the password for proxy authorization. - -private: - std::string _proxyHost; - Poco::UInt16 _proxyPort; - std::string _proxyUsername; - std::string _proxyPassword; - - friend class HTTPSessionFactory; -}; - - -// -// inlines -// -inline const std::string& HTTPSessionInstantiator::proxyHost() const -{ - return _proxyHost; -} - - -inline Poco::UInt16 HTTPSessionInstantiator::proxyPort() const -{ - return _proxyPort; -} - - -inline const std::string& HTTPSessionInstantiator::proxyUsername() const -{ - return _proxyUsername; -} - - -inline const std::string& HTTPSessionInstantiator::proxyPassword() const -{ - return _proxyPassword; -} - - -} } // namespace Poco::Net - - -#endif // Net_HTTPSessionInstantiator_INCLUDED +// +// HTTPSessionInstantiator.h +// +// Library: Net +// Package: HTTPClient +// Module: HTTPSessionInstantiator +// +// Definition of the HTTPSessionInstantiator class. +// +// Copyright (c) 2006, Applied Informatics Software Engineering GmbH. +// and Contributors. +// +// SPDX-License-Identifier: BSL-1.0 +// + + +#ifndef Net_HTTPSessionInstantiator_INCLUDED +#define Net_HTTPSessionInstantiator_INCLUDED + + +#include "Poco/Net/Net.h" +#include "Poco/Net/HTTPSession.h" +#include "Poco/URI.h" + + +namespace Poco { +namespace Net { + + +class HTTPClientSession; + + +class Net_API HTTPSessionInstantiator + /// A factory for HTTPClientSession objects. + /// + /// Creates a HTTP session for a given URI. + /// A HTTPSessionInstantiator is not used directly. + /// Instances are registered with a HTTPSessionFactory, + /// and used through it. +{ +public: + HTTPSessionInstantiator(); + /// Creates the HTTPSessionInstantiator. + + virtual ~HTTPSessionInstantiator(); + /// Destroys the HTTPSessionInstantiator. + + virtual HTTPClientSession* createClientSession(const Poco::URI& uri); + /// Creates a HTTPClientSession for the given URI. + + static void registerInstantiator(); + /// Registers the instantiator with the global HTTPSessionFactory. + + static void unregisterInstantiator(); + /// Unregisters the factory with the global HTTPSessionFactory. + +protected: + void setProxy(const std::string& host, Poco::UInt16 port); + /// Sets the proxy host and port. + /// Called by HTTPSessionFactory. + + const std::string& proxyHost() const; + /// Returns the proxy post. + + Poco::UInt16 proxyPort() const; + /// Returns the proxy port. + + void setProxyCredentials(const std::string& username, const std::string& password); + /// Sets the username and password for proxy authorization (Basic auth only). + + const std::string& proxyUsername() const; + /// Returns the username for proxy authorization. + + const std::string& proxyPassword() const; + /// Returns the password for proxy authorization. + +private: + std::string _proxyHost; + Poco::UInt16 _proxyPort; + std::string _proxyUsername; + std::string _proxyPassword; + + friend class HTTPSessionFactory; +}; + + +// +// inlines +// +inline const std::string& HTTPSessionInstantiator::proxyHost() const +{ + return _proxyHost; +} + + +inline Poco::UInt16 HTTPSessionInstantiator::proxyPort() const +{ + return _proxyPort; +} + + +inline const std::string& HTTPSessionInstantiator::proxyUsername() const +{ + return _proxyUsername; +} + + +inline const std::string& HTTPSessionInstantiator::proxyPassword() const +{ + return _proxyPassword; +} + + +} } // namespace Poco::Net + + +#endif // Net_HTTPSessionInstantiator_INCLUDED diff --git a/contrib/libs/poco/Net/include/Poco/Net/HTTPStream.h b/contrib/libs/poco/Net/include/Poco/Net/HTTPStream.h index 314bd707a3..94d52095c5 100644 --- a/contrib/libs/poco/Net/include/Poco/Net/HTTPStream.h +++ b/contrib/libs/poco/Net/include/Poco/Net/HTTPStream.h @@ -1,103 +1,103 @@ -// -// HTTPStream.h -// -// Library: Net -// Package: HTTP -// Module: HTTPStream -// -// Definition of the HTTPStream class. -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Net_HTTPStream_INCLUDED -#define Net_HTTPStream_INCLUDED - - -#include "Poco/Net/Net.h" -#include "Poco/Net/HTTPBasicStreamBuf.h" -#include "Poco/MemoryPool.h" -#include <cstddef> -#include <istream> -#include <ostream> - - -namespace Poco { -namespace Net { - - -class HTTPSession; - - -class Net_API HTTPStreamBuf: public HTTPBasicStreamBuf - /// This is the streambuf class used for reading and writing - /// HTTP message bodies. -{ -public: - typedef HTTPBasicStreamBuf::openmode openmode; - - HTTPStreamBuf(HTTPSession& session, openmode mode); - ~HTTPStreamBuf(); - void close(); - -protected: - int readFromDevice(char* buffer, std::streamsize length); - int writeToDevice(const char* buffer, std::streamsize length); - -private: - HTTPSession& _session; - openmode _mode; -}; - - -class Net_API HTTPIOS: public virtual std::ios - /// The base class for HTTPInputStream. -{ -public: - HTTPIOS(HTTPSession& session, HTTPStreamBuf::openmode mode); - ~HTTPIOS(); - HTTPStreamBuf* rdbuf(); - -protected: - HTTPStreamBuf _buf; -}; - - -class Net_API HTTPInputStream: public HTTPIOS, public std::istream - /// This class is for internal use by HTTPSession only. -{ -public: - HTTPInputStream(HTTPSession& session); - ~HTTPInputStream(); - - void* operator new(std::size_t size); - void operator delete(void* ptr); - -private: - static Poco::MemoryPool _pool; -}; - - -class Net_API HTTPOutputStream: public HTTPIOS, public std::ostream - /// This class is for internal use by HTTPSession only. -{ -public: - HTTPOutputStream(HTTPSession& session); - ~HTTPOutputStream(); - - void* operator new(std::size_t size); - void operator delete(void* ptr); - -private: - static Poco::MemoryPool _pool; -}; - - -} } // namespace Poco::Net - - -#endif // Net_HTTPStream_INCLUDED +// +// HTTPStream.h +// +// Library: Net +// Package: HTTP +// Module: HTTPStream +// +// Definition of the HTTPStream class. +// +// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. +// and Contributors. +// +// SPDX-License-Identifier: BSL-1.0 +// + + +#ifndef Net_HTTPStream_INCLUDED +#define Net_HTTPStream_INCLUDED + + +#include "Poco/Net/Net.h" +#include "Poco/Net/HTTPBasicStreamBuf.h" +#include "Poco/MemoryPool.h" +#include <cstddef> +#include <istream> +#include <ostream> + + +namespace Poco { +namespace Net { + + +class HTTPSession; + + +class Net_API HTTPStreamBuf: public HTTPBasicStreamBuf + /// This is the streambuf class used for reading and writing + /// HTTP message bodies. +{ +public: + typedef HTTPBasicStreamBuf::openmode openmode; + + HTTPStreamBuf(HTTPSession& session, openmode mode); + ~HTTPStreamBuf(); + void close(); + +protected: + int readFromDevice(char* buffer, std::streamsize length); + int writeToDevice(const char* buffer, std::streamsize length); + +private: + HTTPSession& _session; + openmode _mode; +}; + + +class Net_API HTTPIOS: public virtual std::ios + /// The base class for HTTPInputStream. +{ +public: + HTTPIOS(HTTPSession& session, HTTPStreamBuf::openmode mode); + ~HTTPIOS(); + HTTPStreamBuf* rdbuf(); + +protected: + HTTPStreamBuf _buf; +}; + + +class Net_API HTTPInputStream: public HTTPIOS, public std::istream + /// This class is for internal use by HTTPSession only. +{ +public: + HTTPInputStream(HTTPSession& session); + ~HTTPInputStream(); + + void* operator new(std::size_t size); + void operator delete(void* ptr); + +private: + static Poco::MemoryPool _pool; +}; + + +class Net_API HTTPOutputStream: public HTTPIOS, public std::ostream + /// This class is for internal use by HTTPSession only. +{ +public: + HTTPOutputStream(HTTPSession& session); + ~HTTPOutputStream(); + + void* operator new(std::size_t size); + void operator delete(void* ptr); + +private: + static Poco::MemoryPool _pool; +}; + + +} } // namespace Poco::Net + + +#endif // Net_HTTPStream_INCLUDED diff --git a/contrib/libs/poco/Net/include/Poco/Net/HTTPStreamFactory.h b/contrib/libs/poco/Net/include/Poco/Net/HTTPStreamFactory.h index 951cb5cbc7..df4a5f3336 100644 --- a/contrib/libs/poco/Net/include/Poco/Net/HTTPStreamFactory.h +++ b/contrib/libs/poco/Net/include/Poco/Net/HTTPStreamFactory.h @@ -1,92 +1,92 @@ -// -// HTTPStreamFactory.h -// -// Library: Net -// Package: HTTP -// Module: HTTPStreamFactory -// -// Definition of the HTTPStreamFactory class. -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Net_HTTPStreamFactory_INCLUDED -#define Net_HTTPStreamFactory_INCLUDED - - -#include "Poco/Net/Net.h" -#include "Poco/Net/HTTPSession.h" -#include "Poco/URIStreamFactory.h" - - -namespace Poco { -namespace Net { - - -class Net_API HTTPStreamFactory: public Poco::URIStreamFactory - /// An implementation of the URIStreamFactory interface - /// that handles Hyper-Text Transfer Protocol (http) URIs. -{ -public: - HTTPStreamFactory(); - /// Creates the HTTPStreamFactory. - - HTTPStreamFactory(const std::string& proxyHost, Poco::UInt16 proxyPort = HTTPSession::HTTP_PORT); - /// Creates the HTTPStreamFactory. - /// - /// HTTP connections will use the given proxy. - - HTTPStreamFactory(const std::string& proxyHost, Poco::UInt16 proxyPort, const std::string& proxyUsername, const std::string& proxyPassword); - /// Creates the HTTPStreamFactory. - /// - /// HTTP connections will use the given proxy and - /// will be authorized against the proxy using Basic authentication - /// with the given proxyUsername and proxyPassword. - - virtual ~HTTPStreamFactory(); - /// Destroys the HTTPStreamFactory. - - virtual std::istream* open(const Poco::URI& uri); - /// Creates and opens a HTTP stream for the given URI. - /// The URI must be a http://... URI. - /// - /// Throws a NetException if anything goes wrong. - /// - /// Redirect responses are handled and the redirect - /// location is automatically resolved, as long - /// as the redirect location is still accessible - /// via the HTTP protocol. If a redirection to - /// a non http://... URI is received, a - /// UnsupportedRedirectException exception is thrown. - /// The offending URI can then be obtained via the message() - /// method of UnsupportedRedirectException. - - static void registerFactory(); - /// Registers the HTTPStreamFactory with the - /// default URIStreamOpener instance. - - static void unregisterFactory(); - /// Unregisters the HTTPStreamFactory with the - /// default URIStreamOpener instance. - -private: - enum - { - MAX_REDIRECTS = 10 - }; - - std::string _proxyHost; - Poco::UInt16 _proxyPort; - std::string _proxyUsername; - std::string _proxyPassword; -}; - - -} } // namespace Poco::Net - - -#endif // Net_HTTPStreamFactory_INCLUDED +// +// HTTPStreamFactory.h +// +// Library: Net +// Package: HTTP +// Module: HTTPStreamFactory +// +// Definition of the HTTPStreamFactory class. +// +// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. +// and Contributors. +// +// SPDX-License-Identifier: BSL-1.0 +// + + +#ifndef Net_HTTPStreamFactory_INCLUDED +#define Net_HTTPStreamFactory_INCLUDED + + +#include "Poco/Net/Net.h" +#include "Poco/Net/HTTPSession.h" +#include "Poco/URIStreamFactory.h" + + +namespace Poco { +namespace Net { + + +class Net_API HTTPStreamFactory: public Poco::URIStreamFactory + /// An implementation of the URIStreamFactory interface + /// that handles Hyper-Text Transfer Protocol (http) URIs. +{ +public: + HTTPStreamFactory(); + /// Creates the HTTPStreamFactory. + + HTTPStreamFactory(const std::string& proxyHost, Poco::UInt16 proxyPort = HTTPSession::HTTP_PORT); + /// Creates the HTTPStreamFactory. + /// + /// HTTP connections will use the given proxy. + + HTTPStreamFactory(const std::string& proxyHost, Poco::UInt16 proxyPort, const std::string& proxyUsername, const std::string& proxyPassword); + /// Creates the HTTPStreamFactory. + /// + /// HTTP connections will use the given proxy and + /// will be authorized against the proxy using Basic authentication + /// with the given proxyUsername and proxyPassword. + + virtual ~HTTPStreamFactory(); + /// Destroys the HTTPStreamFactory. + + virtual std::istream* open(const Poco::URI& uri); + /// Creates and opens a HTTP stream for the given URI. + /// The URI must be a http://... URI. + /// + /// Throws a NetException if anything goes wrong. + /// + /// Redirect responses are handled and the redirect + /// location is automatically resolved, as long + /// as the redirect location is still accessible + /// via the HTTP protocol. If a redirection to + /// a non http://... URI is received, a + /// UnsupportedRedirectException exception is thrown. + /// The offending URI can then be obtained via the message() + /// method of UnsupportedRedirectException. + + static void registerFactory(); + /// Registers the HTTPStreamFactory with the + /// default URIStreamOpener instance. + + static void unregisterFactory(); + /// Unregisters the HTTPStreamFactory with the + /// default URIStreamOpener instance. + +private: + enum + { + MAX_REDIRECTS = 10 + }; + + std::string _proxyHost; + Poco::UInt16 _proxyPort; + std::string _proxyUsername; + std::string _proxyPassword; +}; + + +} } // namespace Poco::Net + + +#endif // Net_HTTPStreamFactory_INCLUDED diff --git a/contrib/libs/poco/Net/include/Poco/Net/HostEntry.h b/contrib/libs/poco/Net/include/Poco/Net/HostEntry.h index 1093201861..23cccdffb5 100644 --- a/contrib/libs/poco/Net/include/Poco/Net/HostEntry.h +++ b/contrib/libs/poco/Net/include/Poco/Net/HostEntry.h @@ -1,115 +1,115 @@ -// -// HostEntry.h -// -// Library: Net -// Package: NetCore -// Module: HostEntry -// -// Definition of the HostEntry class. -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Net_HostEntry_INCLUDED -#define Net_HostEntry_INCLUDED - - -#include "Poco/Net/Net.h" -#include "Poco/Net/SocketDefs.h" -#include "Poco/Net/IPAddress.h" -#include <vector> - - -namespace Poco { -namespace Net { - - -class Net_API HostEntry - /// This class stores information about a host - /// such as host name, alias names and a list - /// of IP addresses. -{ -public: - typedef std::vector<std::string> AliasList; - typedef std::vector<IPAddress> AddressList; - - HostEntry(); - /// Creates an empty HostEntry. - - HostEntry(struct hostent* entry); - /// Creates the HostEntry from the data in a hostent structure. - -#if defined(POCO_HAVE_IPv6) || defined(POCO_HAVE_ADDRINFO) - HostEntry(struct addrinfo* info); - /// Creates the HostEntry from the data in an addrinfo structure. -#endif - -#if defined(POCO_VXWORKS) - HostEntry(const std::string& name, const IPAddress& addr); -#endif - - HostEntry(const HostEntry& entry); - /// Creates the HostEntry by copying another one. - - HostEntry& operator = (const HostEntry& entry); - /// Assigns another HostEntry. - - void swap(HostEntry& hostEntry); - /// Swaps the HostEntry with another one. - - ~HostEntry(); - /// Destroys the HostEntry. - - const std::string& name() const; - /// Returns the canonical host name. - - const AliasList& aliases() const; - /// Returns a vector containing alias names for - /// the host name. - - const AddressList& addresses() const; - /// Returns a vector containing the IPAddresses - /// for the host. - -private: - std::string _name; - AliasList _aliases; - AddressList _addresses; -}; - - -// -// inlines -// -inline const std::string& HostEntry::name() const -{ - return _name; -} - - -inline const HostEntry::AliasList& HostEntry::aliases() const -{ - return _aliases; -} - - -inline const HostEntry::AddressList& HostEntry::addresses() const -{ - return _addresses; -} - - -inline void swap(HostEntry& h1, HostEntry& h2) -{ - h1.swap(h2); -} - - -} } // namespace Poco::Net - - -#endif // Net_HostEntry_INCLUDED +// +// HostEntry.h +// +// Library: Net +// Package: NetCore +// Module: HostEntry +// +// Definition of the HostEntry class. +// +// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. +// and Contributors. +// +// SPDX-License-Identifier: BSL-1.0 +// + + +#ifndef Net_HostEntry_INCLUDED +#define Net_HostEntry_INCLUDED + + +#include "Poco/Net/Net.h" +#include "Poco/Net/SocketDefs.h" +#include "Poco/Net/IPAddress.h" +#include <vector> + + +namespace Poco { +namespace Net { + + +class Net_API HostEntry + /// This class stores information about a host + /// such as host name, alias names and a list + /// of IP addresses. +{ +public: + typedef std::vector<std::string> AliasList; + typedef std::vector<IPAddress> AddressList; + + HostEntry(); + /// Creates an empty HostEntry. + + HostEntry(struct hostent* entry); + /// Creates the HostEntry from the data in a hostent structure. + +#if defined(POCO_HAVE_IPv6) || defined(POCO_HAVE_ADDRINFO) + HostEntry(struct addrinfo* info); + /// Creates the HostEntry from the data in an addrinfo structure. +#endif + +#if defined(POCO_VXWORKS) + HostEntry(const std::string& name, const IPAddress& addr); +#endif + + HostEntry(const HostEntry& entry); + /// Creates the HostEntry by copying another one. + + HostEntry& operator = (const HostEntry& entry); + /// Assigns another HostEntry. + + void swap(HostEntry& hostEntry); + /// Swaps the HostEntry with another one. + + ~HostEntry(); + /// Destroys the HostEntry. + + const std::string& name() const; + /// Returns the canonical host name. + + const AliasList& aliases() const; + /// Returns a vector containing alias names for + /// the host name. + + const AddressList& addresses() const; + /// Returns a vector containing the IPAddresses + /// for the host. + +private: + std::string _name; + AliasList _aliases; + AddressList _addresses; +}; + + +// +// inlines +// +inline const std::string& HostEntry::name() const +{ + return _name; +} + + +inline const HostEntry::AliasList& HostEntry::aliases() const +{ + return _aliases; +} + + +inline const HostEntry::AddressList& HostEntry::addresses() const +{ + return _addresses; +} + + +inline void swap(HostEntry& h1, HostEntry& h2) +{ + h1.swap(h2); +} + + +} } // namespace Poco::Net + + +#endif // Net_HostEntry_INCLUDED diff --git a/contrib/libs/poco/Net/include/Poco/Net/ICMPClient.h b/contrib/libs/poco/Net/include/Poco/Net/ICMPClient.h index 333f4de58c..31fb5202af 100644 --- a/contrib/libs/poco/Net/include/Poco/Net/ICMPClient.h +++ b/contrib/libs/poco/Net/include/Poco/Net/ICMPClient.h @@ -1,97 +1,97 @@ -// -// ICMPClient.h -// -// Library: Net -// Package: ICMP -// Module: ICMPClient -// -// Definition of the ICMPClient class. -// -// Copyright (c) 2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Net_ICMPClient_INCLUDED -#define Net_ICMPClient_INCLUDED - - -#include "Poco/Net/Net.h" -#include "Poco/Net/ICMPSocket.h" -#include "Poco/Net/ICMPEventArgs.h" -#include "Poco/Net/SocketAddress.h" -#include "Poco/BasicEvent.h" - - -namespace Poco { -namespace Net { - - -class Net_API ICMPClient - /// This class provides ICMP Ping functionality. +// +// ICMPClient.h +// +// Library: Net +// Package: ICMP +// Module: ICMPClient +// +// Definition of the ICMPClient class. +// +// Copyright (c) 2006, Applied Informatics Software Engineering GmbH. +// and Contributors. +// +// SPDX-License-Identifier: BSL-1.0 +// + + +#ifndef Net_ICMPClient_INCLUDED +#define Net_ICMPClient_INCLUDED + + +#include "Poco/Net/Net.h" +#include "Poco/Net/ICMPSocket.h" +#include "Poco/Net/ICMPEventArgs.h" +#include "Poco/Net/SocketAddress.h" +#include "Poco/BasicEvent.h" + + +namespace Poco { +namespace Net { + + +class Net_API ICMPClient + /// This class provides ICMP Ping functionality. + /// + /// The events are available when class is instantiated + /// and non-static member functions are called. /// - /// The events are available when class is instantiated - /// and non-static member functions are called. - /// - /// A "lightweight" alternative is direct (without instantiation) - /// use of static member functions. -{ -public: - mutable Poco::BasicEvent<ICMPEventArgs> pingBegin; - mutable Poco::BasicEvent<ICMPEventArgs> pingReply; - mutable Poco::BasicEvent<ICMPEventArgs> pingError; - mutable Poco::BasicEvent<ICMPEventArgs> pingEnd; - - explicit ICMPClient(SocketAddress::Family family, int dataSize = 48, int ttl = 128, int timeout = 50000); - /// Creates an ICMP client. - - ~ICMPClient(); - /// Destroys the ICMP client. - - int ping(SocketAddress& address, int repeat = 1) const; - /// Pings the specified address [repeat] times. - /// Notifications are posted for events. - /// - /// Returns the number of valid replies. - - int ping(const std::string& address, int repeat = 1) const; - /// Calls ICMPClient::ping(SocketAddress&, int) and - /// returns the result. - /// - /// Returns the number of valid replies. - - static int ping(SocketAddress& address, - SocketAddress::Family family, - int repeat = 1, - int dataSize = 48, - int ttl = 128, - int timeout = 50000); - /// Pings the specified address [repeat] times. - /// Notifications are not posted for events. - /// - /// Returns the number of valid replies. - - static int pingIPv4(const std::string& address, - int repeat = 1, - int dataSize = 48, - int ttl = 128, - int timeout = 50000); - /// Calls ICMPClient::ping(SocketAddress&, int) and - /// returns the result. - /// - /// Returns the number of valid replies. - -private: - mutable SocketAddress::Family _family; - int _dataSize; - int _ttl; - int _timeout; -}; - - -} } // namespace Poco::Net - - -#endif // Net_ICMPClient_INCLUDED + /// A "lightweight" alternative is direct (without instantiation) + /// use of static member functions. +{ +public: + mutable Poco::BasicEvent<ICMPEventArgs> pingBegin; + mutable Poco::BasicEvent<ICMPEventArgs> pingReply; + mutable Poco::BasicEvent<ICMPEventArgs> pingError; + mutable Poco::BasicEvent<ICMPEventArgs> pingEnd; + + explicit ICMPClient(SocketAddress::Family family, int dataSize = 48, int ttl = 128, int timeout = 50000); + /// Creates an ICMP client. + + ~ICMPClient(); + /// Destroys the ICMP client. + + int ping(SocketAddress& address, int repeat = 1) const; + /// Pings the specified address [repeat] times. + /// Notifications are posted for events. + /// + /// Returns the number of valid replies. + + int ping(const std::string& address, int repeat = 1) const; + /// Calls ICMPClient::ping(SocketAddress&, int) and + /// returns the result. + /// + /// Returns the number of valid replies. + + static int ping(SocketAddress& address, + SocketAddress::Family family, + int repeat = 1, + int dataSize = 48, + int ttl = 128, + int timeout = 50000); + /// Pings the specified address [repeat] times. + /// Notifications are not posted for events. + /// + /// Returns the number of valid replies. + + static int pingIPv4(const std::string& address, + int repeat = 1, + int dataSize = 48, + int ttl = 128, + int timeout = 50000); + /// Calls ICMPClient::ping(SocketAddress&, int) and + /// returns the result. + /// + /// Returns the number of valid replies. + +private: + mutable SocketAddress::Family _family; + int _dataSize; + int _ttl; + int _timeout; +}; + + +} } // namespace Poco::Net + + +#endif // Net_ICMPClient_INCLUDED diff --git a/contrib/libs/poco/Net/include/Poco/Net/ICMPEventArgs.h b/contrib/libs/poco/Net/include/Poco/Net/ICMPEventArgs.h index ea2de2047c..2a663eb32f 100644 --- a/contrib/libs/poco/Net/include/Poco/Net/ICMPEventArgs.h +++ b/contrib/libs/poco/Net/include/Poco/Net/ICMPEventArgs.h @@ -1,163 +1,163 @@ -// -// ICMPEventArgs.h -// -// Library: Net -// Package: ICMP -// Module: ICMPEventArgs -// -// Definition of ICMPEventArgs. -// -// Copyright (c) 2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Net_ICMPEventArgs_INCLUDED -#define Net_ICMPEventArgs_INCLUDED - - -#include "Poco/Net/Net.h" -#include "Poco/Net/SocketAddress.h" -#include <vector> -#include <algorithm> - - -namespace Poco { -namespace Net { - - -class Net_API ICMPEventArgs - /// The purpose of the ICMPEventArgs class is to be used as template parameter - /// to instantiate event members in ICMPClient class. - /// When clients register for an event notification, the reference to the class is - /// passed to the handler function to provide information about the event. -{ -public: - ICMPEventArgs(const SocketAddress& address, int repetitions, int dataSize, int ttl); - /// Creates ICMPEventArgs. - - virtual ~ICMPEventArgs(); - /// Destroys ICMPEventArgs. - - std::string hostName() const; - /// Tries to resolve the target IP address into host name. - /// If unsuccessful, all exceptions are silently ignored and - /// the IP address is returned. - - std::string hostAddress() const; - /// Returns the target IP address. - - int repetitions() const; - /// Returns the number of repetitions for the ping operation. - - int dataSize() const; - /// Returns the packet data size in bytes. - - int ttl() const; - /// Returns time to live. - - int sent() const; - /// Returns the number of packets sent. - - int received() const; - /// Returns the number of packets received. - - int replyTime(int index = -1) const; - /// Returns the reply time for the request specified with index. - /// If index == -1 (default), returns the most recent reply time. - - const std::string& error(int index = -1) const; - /// Returns the error string for the request specified with index. - /// If index == -1 (default), returns the most recent error string. - - int minRTT() const; - /// Returns the minimum round trip time for a sequence of requests. - - int maxRTT() const; - /// Returns the maximum round trip time for a sequence of requests. - - int avgRTT() const; - /// Returns the average round trip time for a sequence of requests. - - float percent() const; - /// Returns the success percentage for a sequence of requests. - -private: - ICMPEventArgs(); - - void setRepetitions(int repetitions); - void setDataSize(int sz); - void setTTL(int timeToLive); - void setReplyTime(int index, int time); - void setError(int index, const std::string& text); - ICMPEventArgs& operator ++ (); - ICMPEventArgs operator ++ (int); - - SocketAddress _address; - int _sent; - int _dataSize; - int _ttl; - std::vector<int> _rtt; - std::vector<std::string> _errors; - - friend class ICMPClient; -}; - - -// -// inlines -// -inline int ICMPEventArgs::repetitions() const -{ - return (int) _rtt.size(); -} - - -inline void ICMPEventArgs::setDataSize(int sz) -{ - _dataSize = sz; -} - - -inline int ICMPEventArgs::dataSize() const -{ - return _dataSize; -} - - -inline void ICMPEventArgs::setTTL(int timeToLive) -{ - _ttl = timeToLive; -} - - -inline int ICMPEventArgs::ttl() const -{ - return _ttl; -} - - -inline int ICMPEventArgs::sent() const -{ - return _sent; -} - - -inline int ICMPEventArgs::minRTT() const -{ - return *std::min_element(_rtt.begin(), _rtt.end()); -} - - -inline int ICMPEventArgs::maxRTT() const -{ - return *std::max_element(_rtt.begin(), _rtt.end()); -} - - -} } // namespace Poco::Net - - -#endif +// +// ICMPEventArgs.h +// +// Library: Net +// Package: ICMP +// Module: ICMPEventArgs +// +// Definition of ICMPEventArgs. +// +// Copyright (c) 2006, Applied Informatics Software Engineering GmbH. +// and Contributors. +// +// SPDX-License-Identifier: BSL-1.0 +// + + +#ifndef Net_ICMPEventArgs_INCLUDED +#define Net_ICMPEventArgs_INCLUDED + + +#include "Poco/Net/Net.h" +#include "Poco/Net/SocketAddress.h" +#include <vector> +#include <algorithm> + + +namespace Poco { +namespace Net { + + +class Net_API ICMPEventArgs + /// The purpose of the ICMPEventArgs class is to be used as template parameter + /// to instantiate event members in ICMPClient class. + /// When clients register for an event notification, the reference to the class is + /// passed to the handler function to provide information about the event. +{ +public: + ICMPEventArgs(const SocketAddress& address, int repetitions, int dataSize, int ttl); + /// Creates ICMPEventArgs. + + virtual ~ICMPEventArgs(); + /// Destroys ICMPEventArgs. + + std::string hostName() const; + /// Tries to resolve the target IP address into host name. + /// If unsuccessful, all exceptions are silently ignored and + /// the IP address is returned. + + std::string hostAddress() const; + /// Returns the target IP address. + + int repetitions() const; + /// Returns the number of repetitions for the ping operation. + + int dataSize() const; + /// Returns the packet data size in bytes. + + int ttl() const; + /// Returns time to live. + + int sent() const; + /// Returns the number of packets sent. + + int received() const; + /// Returns the number of packets received. + + int replyTime(int index = -1) const; + /// Returns the reply time for the request specified with index. + /// If index == -1 (default), returns the most recent reply time. + + const std::string& error(int index = -1) const; + /// Returns the error string for the request specified with index. + /// If index == -1 (default), returns the most recent error string. + + int minRTT() const; + /// Returns the minimum round trip time for a sequence of requests. + + int maxRTT() const; + /// Returns the maximum round trip time for a sequence of requests. + + int avgRTT() const; + /// Returns the average round trip time for a sequence of requests. + + float percent() const; + /// Returns the success percentage for a sequence of requests. + +private: + ICMPEventArgs(); + + void setRepetitions(int repetitions); + void setDataSize(int sz); + void setTTL(int timeToLive); + void setReplyTime(int index, int time); + void setError(int index, const std::string& text); + ICMPEventArgs& operator ++ (); + ICMPEventArgs operator ++ (int); + + SocketAddress _address; + int _sent; + int _dataSize; + int _ttl; + std::vector<int> _rtt; + std::vector<std::string> _errors; + + friend class ICMPClient; +}; + + +// +// inlines +// +inline int ICMPEventArgs::repetitions() const +{ + return (int) _rtt.size(); +} + + +inline void ICMPEventArgs::setDataSize(int sz) +{ + _dataSize = sz; +} + + +inline int ICMPEventArgs::dataSize() const +{ + return _dataSize; +} + + +inline void ICMPEventArgs::setTTL(int timeToLive) +{ + _ttl = timeToLive; +} + + +inline int ICMPEventArgs::ttl() const +{ + return _ttl; +} + + +inline int ICMPEventArgs::sent() const +{ + return _sent; +} + + +inline int ICMPEventArgs::minRTT() const +{ + return *std::min_element(_rtt.begin(), _rtt.end()); +} + + +inline int ICMPEventArgs::maxRTT() const +{ + return *std::max_element(_rtt.begin(), _rtt.end()); +} + + +} } // namespace Poco::Net + + +#endif diff --git a/contrib/libs/poco/Net/include/Poco/Net/ICMPPacket.h b/contrib/libs/poco/Net/include/Poco/Net/ICMPPacket.h index 6859506c01..52d0e87f87 100644 --- a/contrib/libs/poco/Net/include/Poco/Net/ICMPPacket.h +++ b/contrib/libs/poco/Net/include/Poco/Net/ICMPPacket.h @@ -1,89 +1,89 @@ -// -// ICMPPacket.h -// -// Library: Net -// Package: ICMP -// Module: ICMPPacket -// -// Definition of the ICMPPacket class. -// -// Copyright (c) 2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Net_ICMPPacket_INCLUDED -#define Net_ICMPPacket_INCLUDED - - -#include "Poco/Foundation.h" -#include "Poco/Net/Socket.h" -#include "Poco/Net/ICMPPacketImpl.h" - - -namespace Poco { -namespace Net { - - -class Net_API ICMPPacket - /// This class is the ICMP packet abstraction. -{ -public: - ICMPPacket(SocketAddress::Family family, int dataSize = 48); - /// Creates an ICMPPacket of specified family. - - ~ICMPPacket(); - /// Destroys the ICMPPacket. - - const Poco::UInt8* packet(); - /// Returns raw ICMP packet. ICMP header and data are included in the returned packet. - - int packetSize() const; - /// Returns the total length of packet (header + data); - - Poco::UInt16 sequence() const; - /// Returns the most recent sequence number generated. - - void setDataSize(int dataSize); - /// Sets data size. - - int getDataSize() const; - /// Returns data size. - - int maxPacketSize() const; - /// Returns the total length of packet (header + data); - - struct timeval time(Poco::UInt8* buffer = 0, int length = 0) const; - /// Returns current epoch time if either buffer or length are equal to zero. - /// Otherwise, it extracts the time value from the supplied buffer and - /// returns the extracted value. - /// - /// Supplied buffer includes IP header, ICMP header and data. - - bool validReplyID(Poco::UInt8* buffer, int length) const; - /// Returns true if the extracted id is recognized - /// (equals the process id). - /// - /// Supplied buffer includes IP header, ICMP header and data. - - std::string errorDescription(Poco::UInt8* buffer, int length); - /// Returns error description string. - /// If supplied buffer contains an ICMP echo reply packet, an - /// empty string is returned indicating the absence of error. - /// - /// Supplied buffer includes IP header, ICMP header and data. - - std::string typeDescription(int typeId); - /// Returns the description of the packet type. - -private: - ICMPPacketImpl* _pImpl; -}; - - -} } // namespace Poco::Net - - -#endif // Net_ICMPPacket_INCLUDED +// +// ICMPPacket.h +// +// Library: Net +// Package: ICMP +// Module: ICMPPacket +// +// Definition of the ICMPPacket class. +// +// Copyright (c) 2006, Applied Informatics Software Engineering GmbH. +// and Contributors. +// +// SPDX-License-Identifier: BSL-1.0 +// + + +#ifndef Net_ICMPPacket_INCLUDED +#define Net_ICMPPacket_INCLUDED + + +#include "Poco/Foundation.h" +#include "Poco/Net/Socket.h" +#include "Poco/Net/ICMPPacketImpl.h" + + +namespace Poco { +namespace Net { + + +class Net_API ICMPPacket + /// This class is the ICMP packet abstraction. +{ +public: + ICMPPacket(SocketAddress::Family family, int dataSize = 48); + /// Creates an ICMPPacket of specified family. + + ~ICMPPacket(); + /// Destroys the ICMPPacket. + + const Poco::UInt8* packet(); + /// Returns raw ICMP packet. ICMP header and data are included in the returned packet. + + int packetSize() const; + /// Returns the total length of packet (header + data); + + Poco::UInt16 sequence() const; + /// Returns the most recent sequence number generated. + + void setDataSize(int dataSize); + /// Sets data size. + + int getDataSize() const; + /// Returns data size. + + int maxPacketSize() const; + /// Returns the total length of packet (header + data); + + struct timeval time(Poco::UInt8* buffer = 0, int length = 0) const; + /// Returns current epoch time if either buffer or length are equal to zero. + /// Otherwise, it extracts the time value from the supplied buffer and + /// returns the extracted value. + /// + /// Supplied buffer includes IP header, ICMP header and data. + + bool validReplyID(Poco::UInt8* buffer, int length) const; + /// Returns true if the extracted id is recognized + /// (equals the process id). + /// + /// Supplied buffer includes IP header, ICMP header and data. + + std::string errorDescription(Poco::UInt8* buffer, int length); + /// Returns error description string. + /// If supplied buffer contains an ICMP echo reply packet, an + /// empty string is returned indicating the absence of error. + /// + /// Supplied buffer includes IP header, ICMP header and data. + + std::string typeDescription(int typeId); + /// Returns the description of the packet type. + +private: + ICMPPacketImpl* _pImpl; +}; + + +} } // namespace Poco::Net + + +#endif // Net_ICMPPacket_INCLUDED diff --git a/contrib/libs/poco/Net/include/Poco/Net/ICMPPacketImpl.h b/contrib/libs/poco/Net/include/Poco/Net/ICMPPacketImpl.h index 66e74fe1a7..da6bf46484 100644 --- a/contrib/libs/poco/Net/include/Poco/Net/ICMPPacketImpl.h +++ b/contrib/libs/poco/Net/include/Poco/Net/ICMPPacketImpl.h @@ -1,141 +1,141 @@ -// -// ICMPPacketImpl.h -// -// Library: Net -// Package: ICMP -// Module: ICMPPacketImpl -// -// Definition of the ICMPPacketImpl class. -// -// Copyright (c) 2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Net_ICMPPacketImpl_INCLUDED -#define Net_ICMPPacketImpl_INCLUDED - - -#include "Poco/Foundation.h" -#include "Poco/Net/Socket.h" - - -namespace Poco { -namespace Net { - - -class Net_API ICMPPacketImpl - /// This is the abstract class for ICMP packet implementations. -{ -public: - ICMPPacketImpl(int dataSize = 48); - /// Constructor. Creates an ICMPPacketImpl. - - virtual ~ICMPPacketImpl(); - /// Destructor. - - const Poco::UInt8* packet(bool init = true); - /// Returns raw ICMP packet. - /// ICMP header and data are included in the packet. - /// If init is true, initPacket() is called. - - virtual int packetSize() const = 0; - /// Returns the total size of packet (ICMP header + data) in number of octets. - /// Must be overriden. - - virtual int maxPacketSize() const; - /// Returns the maximum permitted size of packet in number of octets. - - Poco::UInt16 sequence() const; - /// Returns the most recent sequence number generated. - - void setDataSize(int dataSize); - /// Sets data size. - - int getDataSize() const; - /// Returns data size. - - virtual struct timeval time(Poco::UInt8* buffer = 0, int length = 0) const = 0; - /// Returns current epoch time if either argument is equal to zero. - /// Otherwise, it extracts the time value from the supplied buffer. - /// - /// Supplied buffer includes IP header, ICMP header and data. - /// Must be overriden. - - virtual bool validReplyID(unsigned char* buffer, int length) const = 0; - /// Returns true if the extracted id is recognized - /// (i.e. equals the process id). - /// - /// Supplied buffer includes IP header, ICMP header and data. - /// Must be overriden. - - virtual std::string errorDescription(Poco::UInt8* buffer, int length) = 0; - /// Returns error description string. - /// If supplied buffer contains an ICMP echo reply packet, an - /// empty string is returned indicating the absence of error. - /// - /// Supplied buffer includes IP header, ICMP header and data. - /// Must be overriden. - - virtual std::string typeDescription(int typeId) = 0; - /// Returns the description of the packet type. - /// Must be overriden. - - static const Poco::UInt16 MAX_PACKET_SIZE; - static const Poco::UInt16 MAX_SEQ_VALUE; - -protected: - Poco::UInt16 nextSequence(); - /// Increments sequence number and returns the new value. - - void resetSequence(); - /// Resets the sequence to zero. - - virtual void initPacket() = 0; - /// (Re)assembles the packet. - /// Must be overriden. - - Poco::UInt16 checksum(Poco::UInt16 *addr, Poco::Int32 len); - /// Calculates the checksum for supplied buffer. - -private: - Poco::UInt16 _seq; - Poco::UInt8* _pPacket; - int _dataSize; - -}; - - -// -// inlines -// -inline Poco::UInt16 ICMPPacketImpl::sequence() const -{ - return _seq; -} - - -inline Poco::UInt16 ICMPPacketImpl::nextSequence() -{ - return ++_seq; -} - - -inline void ICMPPacketImpl::resetSequence() -{ - _seq = 0; -} - - -inline int ICMPPacketImpl::maxPacketSize() const -{ - return MAX_PACKET_SIZE; -} - - -} } // namespace Poco::Net - - -#endif // Net_ICMPPacketImpl_INCLUDED +// +// ICMPPacketImpl.h +// +// Library: Net +// Package: ICMP +// Module: ICMPPacketImpl +// +// Definition of the ICMPPacketImpl class. +// +// Copyright (c) 2006, Applied Informatics Software Engineering GmbH. +// and Contributors. +// +// SPDX-License-Identifier: BSL-1.0 +// + + +#ifndef Net_ICMPPacketImpl_INCLUDED +#define Net_ICMPPacketImpl_INCLUDED + + +#include "Poco/Foundation.h" +#include "Poco/Net/Socket.h" + + +namespace Poco { +namespace Net { + + +class Net_API ICMPPacketImpl + /// This is the abstract class for ICMP packet implementations. +{ +public: + ICMPPacketImpl(int dataSize = 48); + /// Constructor. Creates an ICMPPacketImpl. + + virtual ~ICMPPacketImpl(); + /// Destructor. + + const Poco::UInt8* packet(bool init = true); + /// Returns raw ICMP packet. + /// ICMP header and data are included in the packet. + /// If init is true, initPacket() is called. + + virtual int packetSize() const = 0; + /// Returns the total size of packet (ICMP header + data) in number of octets. + /// Must be overriden. + + virtual int maxPacketSize() const; + /// Returns the maximum permitted size of packet in number of octets. + + Poco::UInt16 sequence() const; + /// Returns the most recent sequence number generated. + + void setDataSize(int dataSize); + /// Sets data size. + + int getDataSize() const; + /// Returns data size. + + virtual struct timeval time(Poco::UInt8* buffer = 0, int length = 0) const = 0; + /// Returns current epoch time if either argument is equal to zero. + /// Otherwise, it extracts the time value from the supplied buffer. + /// + /// Supplied buffer includes IP header, ICMP header and data. + /// Must be overriden. + + virtual bool validReplyID(unsigned char* buffer, int length) const = 0; + /// Returns true if the extracted id is recognized + /// (i.e. equals the process id). + /// + /// Supplied buffer includes IP header, ICMP header and data. + /// Must be overriden. + + virtual std::string errorDescription(Poco::UInt8* buffer, int length) = 0; + /// Returns error description string. + /// If supplied buffer contains an ICMP echo reply packet, an + /// empty string is returned indicating the absence of error. + /// + /// Supplied buffer includes IP header, ICMP header and data. + /// Must be overriden. + + virtual std::string typeDescription(int typeId) = 0; + /// Returns the description of the packet type. + /// Must be overriden. + + static const Poco::UInt16 MAX_PACKET_SIZE; + static const Poco::UInt16 MAX_SEQ_VALUE; + +protected: + Poco::UInt16 nextSequence(); + /// Increments sequence number and returns the new value. + + void resetSequence(); + /// Resets the sequence to zero. + + virtual void initPacket() = 0; + /// (Re)assembles the packet. + /// Must be overriden. + + Poco::UInt16 checksum(Poco::UInt16 *addr, Poco::Int32 len); + /// Calculates the checksum for supplied buffer. + +private: + Poco::UInt16 _seq; + Poco::UInt8* _pPacket; + int _dataSize; + +}; + + +// +// inlines +// +inline Poco::UInt16 ICMPPacketImpl::sequence() const +{ + return _seq; +} + + +inline Poco::UInt16 ICMPPacketImpl::nextSequence() +{ + return ++_seq; +} + + +inline void ICMPPacketImpl::resetSequence() +{ + _seq = 0; +} + + +inline int ICMPPacketImpl::maxPacketSize() const +{ + return MAX_PACKET_SIZE; +} + + +} } // namespace Poco::Net + + +#endif // Net_ICMPPacketImpl_INCLUDED diff --git a/contrib/libs/poco/Net/include/Poco/Net/ICMPSocket.h b/contrib/libs/poco/Net/include/Poco/Net/ICMPSocket.h index 048fb295f9..75e049b382 100644 --- a/contrib/libs/poco/Net/include/Poco/Net/ICMPSocket.h +++ b/contrib/libs/poco/Net/include/Poco/Net/ICMPSocket.h @@ -1,91 +1,91 @@ -// -// ICMPSocket.h -// -// Library: Net -// Package: ICMP -// Module: ICMPSocket -// -// Definition of the ICMPSocket class. -// -// Copyright (c) 2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Net_ICMPSocket_INCLUDED -#define Net_ICMPSocket_INCLUDED - - -#include "Poco/Net/Net.h" -#include "Poco/Net/Socket.h" - - -namespace Poco { -namespace Net { - - -class Net_API ICMPSocket: public Socket - /// This class provides an interface to an - /// ICMP client socket. -{ -public: - ICMPSocket(SocketAddress::Family family, int dataSize = 48, int ttl = 128, int timeout = 5000000); - /// Creates an unconnected ICMP socket. - /// - /// The socket will be created for the - /// given address family. - - ICMPSocket(const Socket& socket); - /// Creates the ICMPSocket with the SocketImpl - /// from another socket. The SocketImpl must be - /// a ICMPSocketImpl, otherwise an InvalidArgumentException - /// will be thrown. - - ~ICMPSocket(); - /// Destroys the ICMPSocket. - - ICMPSocket& operator = (const Socket& socket); - /// Assignment operator. - /// - /// Releases the socket's SocketImpl and - /// attaches the SocketImpl from the other socket and - /// increments the reference count of the SocketImpl. - - int sendTo(const SocketAddress& address, int flags = 0); - /// Sends an ICMP request through - /// the socket to the given address. - /// - /// Returns the number of bytes sent. - - int receiveFrom(SocketAddress& address, int flags = 0); - /// Receives data from the socket. - /// Stores the address of the sender in address. - /// - /// Returns the time elapsed since the originating - /// request was sent. - - int dataSize() const; - /// Returns the data size in bytes. - - int ttl() const; - /// Returns the Time-To-Live value. - - int timeout() const; - /// Returns the socket timeout value. - -protected: - ICMPSocket(SocketImpl* pImpl); - /// Creates the Socket and attaches the given SocketImpl. - /// The socket takes ownership of the SocketImpl. - /// - /// The SocketImpl must be a ICMPSocketImpl, otherwise - /// an InvalidArgumentException will be thrown. -}; - - -} } // namespace Poco::Net - - -#endif // Net_ICMPSocket_INCLUDED +// +// ICMPSocket.h +// +// Library: Net +// Package: ICMP +// Module: ICMPSocket +// +// Definition of the ICMPSocket class. +// +// Copyright (c) 2006, Applied Informatics Software Engineering GmbH. +// and Contributors. +// +// SPDX-License-Identifier: BSL-1.0 +// + + +#ifndef Net_ICMPSocket_INCLUDED +#define Net_ICMPSocket_INCLUDED + + +#include "Poco/Net/Net.h" +#include "Poco/Net/Socket.h" + + +namespace Poco { +namespace Net { + + +class Net_API ICMPSocket: public Socket + /// This class provides an interface to an + /// ICMP client socket. +{ +public: + ICMPSocket(SocketAddress::Family family, int dataSize = 48, int ttl = 128, int timeout = 5000000); + /// Creates an unconnected ICMP socket. + /// + /// The socket will be created for the + /// given address family. + + ICMPSocket(const Socket& socket); + /// Creates the ICMPSocket with the SocketImpl + /// from another socket. The SocketImpl must be + /// a ICMPSocketImpl, otherwise an InvalidArgumentException + /// will be thrown. + + ~ICMPSocket(); + /// Destroys the ICMPSocket. + + ICMPSocket& operator = (const Socket& socket); + /// Assignment operator. + /// + /// Releases the socket's SocketImpl and + /// attaches the SocketImpl from the other socket and + /// increments the reference count of the SocketImpl. + + int sendTo(const SocketAddress& address, int flags = 0); + /// Sends an ICMP request through + /// the socket to the given address. + /// + /// Returns the number of bytes sent. + + int receiveFrom(SocketAddress& address, int flags = 0); + /// Receives data from the socket. + /// Stores the address of the sender in address. + /// + /// Returns the time elapsed since the originating + /// request was sent. + + int dataSize() const; + /// Returns the data size in bytes. + + int ttl() const; + /// Returns the Time-To-Live value. + + int timeout() const; + /// Returns the socket timeout value. + +protected: + ICMPSocket(SocketImpl* pImpl); + /// Creates the Socket and attaches the given SocketImpl. + /// The socket takes ownership of the SocketImpl. + /// + /// The SocketImpl must be a ICMPSocketImpl, otherwise + /// an InvalidArgumentException will be thrown. +}; + + +} } // namespace Poco::Net + + +#endif // Net_ICMPSocket_INCLUDED diff --git a/contrib/libs/poco/Net/include/Poco/Net/ICMPSocketImpl.h b/contrib/libs/poco/Net/include/Poco/Net/ICMPSocketImpl.h index 911487c0d0..98ba9a2259 100644 --- a/contrib/libs/poco/Net/include/Poco/Net/ICMPSocketImpl.h +++ b/contrib/libs/poco/Net/include/Poco/Net/ICMPSocketImpl.h @@ -1,94 +1,94 @@ -// -// ICMPSocketImpl.h -// -// Library: Net -// Package: ICMP -// Module: ICMPSocketImpl -// -// Definition of the ICMPSocketImpl class. -// -// Copyright (c) 2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Net_ICMPSocketImpl_INCLUDED -#define Net_ICMPSocketImpl_INCLUDED - - -#include "Poco/Net/Net.h" -#include "Poco/Net/RawSocketImpl.h" -#include "Poco/Net/ICMPPacket.h" -#include "Poco/Timestamp.h" - - -namespace Poco { -namespace Net { - - -class Net_API ICMPSocketImpl: public RawSocketImpl - /// This class implements an ICMP socket. -{ -public: - ICMPSocketImpl(SocketAddress::Family family, int dataSize, int ttl, int timeout); - /// Creates an unconnected ICMP socket. - /// - /// The socket will be created for the given address family. - - int sendTo(const void*, int, const SocketAddress& address, int flags = 0); - /// Sends an ICMP request through the socket to the given address. - /// - /// Returns the number of bytes sent. - - int receiveFrom(void*, int, SocketAddress& address, int flags = 0); - /// Receives data from the socket. - /// Stores the address of the sender in address. - /// - /// Returns the time elapsed since the originating request was sent. - - int dataSize() const; - /// Returns the data size in bytes. - - int ttl() const; - /// Returns the Time-To-Live value. - - int timeout() const; - /// Returns the socket timeout value. - -protected: - ~ICMPSocketImpl(); - -private: - ICMPPacket _icmpPacket; - int _ttl; - int _timeout; -}; - - -// -// inlines -// -inline int ICMPSocketImpl::dataSize() const -{ - return _icmpPacket.getDataSize(); -} - - -inline int ICMPSocketImpl::ttl() const -{ - return _ttl; -} - - -inline int ICMPSocketImpl::timeout() const -{ - return _timeout; -} - - -} } // namespace Poco::Net - - -#endif // Net_ICMPSocketImpl_INCLUDED +// +// ICMPSocketImpl.h +// +// Library: Net +// Package: ICMP +// Module: ICMPSocketImpl +// +// Definition of the ICMPSocketImpl class. +// +// Copyright (c) 2006, Applied Informatics Software Engineering GmbH. +// and Contributors. +// +// SPDX-License-Identifier: BSL-1.0 +// + + +#ifndef Net_ICMPSocketImpl_INCLUDED +#define Net_ICMPSocketImpl_INCLUDED + + +#include "Poco/Net/Net.h" +#include "Poco/Net/RawSocketImpl.h" +#include "Poco/Net/ICMPPacket.h" +#include "Poco/Timestamp.h" + + +namespace Poco { +namespace Net { + + +class Net_API ICMPSocketImpl: public RawSocketImpl + /// This class implements an ICMP socket. +{ +public: + ICMPSocketImpl(SocketAddress::Family family, int dataSize, int ttl, int timeout); + /// Creates an unconnected ICMP socket. + /// + /// The socket will be created for the given address family. + + int sendTo(const void*, int, const SocketAddress& address, int flags = 0); + /// Sends an ICMP request through the socket to the given address. + /// + /// Returns the number of bytes sent. + + int receiveFrom(void*, int, SocketAddress& address, int flags = 0); + /// Receives data from the socket. + /// Stores the address of the sender in address. + /// + /// Returns the time elapsed since the originating request was sent. + + int dataSize() const; + /// Returns the data size in bytes. + + int ttl() const; + /// Returns the Time-To-Live value. + + int timeout() const; + /// Returns the socket timeout value. + +protected: + ~ICMPSocketImpl(); + +private: + ICMPPacket _icmpPacket; + int _ttl; + int _timeout; +}; + + +// +// inlines +// +inline int ICMPSocketImpl::dataSize() const +{ + return _icmpPacket.getDataSize(); +} + + +inline int ICMPSocketImpl::ttl() const +{ + return _ttl; +} + + +inline int ICMPSocketImpl::timeout() const +{ + return _timeout; +} + + +} } // namespace Poco::Net + + +#endif // Net_ICMPSocketImpl_INCLUDED diff --git a/contrib/libs/poco/Net/include/Poco/Net/ICMPv4PacketImpl.h b/contrib/libs/poco/Net/include/Poco/Net/ICMPv4PacketImpl.h index eaca5a9f99..116f8c7617 100644 --- a/contrib/libs/poco/Net/include/Poco/Net/ICMPv4PacketImpl.h +++ b/contrib/libs/poco/Net/include/Poco/Net/ICMPv4PacketImpl.h @@ -1,173 +1,173 @@ -// -// ICMPv4PacketImpl.h -// -// Library: Net -// Package: ICMP -// Module: ICMPv4PacketImpl -// -// Definition of the ICMPv4PacketImpl class. -// -// Copyright (c) 2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Net_ICMPv4PacketImpl_INCLUDED -#define Net_ICMPv4PacketImpl_INCLUDED - - -#include "Poco/Foundation.h" -#include "Poco/Net/Socket.h" -#include "Poco/Net/ICMPPacketImpl.h" -#include <cstddef> - - -namespace Poco { -namespace Net { - - -class Net_API ICMPv4PacketImpl : public ICMPPacketImpl - /// This class implements the ICMPv4 packet. - /// Parts are based on original ICMP code by - /// Mike Muuss - /// U. S. Army Ballistic Research Laboratory - /// December, 1983 -{ -public: - // ICMPv4 header - struct Header - { - Poco::UInt8 type; // ICMP packet type - Poco::UInt8 code; // Type sub code - Poco::UInt16 checksum; - Poco::UInt16 id; - Poco::UInt16 seq; - }; - - // compile-time shield against misalignment -#if POCO_OS != POCO_OS_ANDROID - poco_static_assert (offsetof(Header, code) == 0x01); - poco_static_assert (offsetof(Header, checksum) == 0x02); - poco_static_assert (offsetof(Header, id) == 0x04); - poco_static_assert (offsetof(Header, seq) == 0x06); -#endif - - enum MessageType - { - ECHO_REPLY, - ICMP_1, - ICMP_2, - DESTINATION_UNREACHABLE, - SOURCE_QUENCH, - REDIRECT, - ICMP_6, - ICMP_7, - ECHO_REQUEST, - ICMP_9, - ICMP_10, - TIME_EXCEEDED, - PARAMETER_PROBLEM, - TIMESTAMP_REQUEST, - TIMESTAMP_REPLY, - INFORMATION_REQUEST, - INFORMATION_REPLY, - MESSAGE_TYPE_UNKNOWN, // non-standard default, must remain last but one - MESSAGE_TYPE_LENGTH // length indicator, must remain last - }; - - enum DestinationUnreachableCode - { - NET_UNREACHABLE, - HOST_UNREACHABLE, - PROTOCOL_UNREACHABLE, - PORT_UNREACHABLE, - FRAGMENTATION_NEEDED_AND_DF_SET, - SOURCE_ROUTE_FAILED, - DESTINATION_UNREACHABLE_UNKNOWN, // non-standard default, must remain last but one - DESTINATION_UNREACHABLE_LENGTH // length indicator, must remain last - }; - - enum RedirectMessageCode - { - REDIRECT_NETWORK, - REDIRECT_HOST, - REDIRECT_SERVICE_NETWORK, - REDIRECT_SERVICE_HOST, - REDIRECT_MESSAGE_UNKNOWN, // non-standard default, must remain last but one - REDIRECT_MESSAGE_LENGTH // length indicator, must remain last - }; - - enum TimeExceededCode - { - TIME_TO_LIVE, - FRAGMENT_REASSEMBLY, - TIME_EXCEEDED_UNKNOWN, // non-standard default, must remain last but one - TIME_EXCEEDED_LENGTH // length indicator, must remain last - }; - - enum ParameterProblemCode - { - POINTER_INDICATES_THE_ERROR, - PARAMETER_PROBLEM_UNKNOWN, // non-standard default, must remain last but one - PARAMETER_PROBLEM_LENGTH // length indicator, must remain last - }; - - ICMPv4PacketImpl(int dataSize = 48); - /// Constructor. Creates an ICMPv4PacketImpl. - - ~ICMPv4PacketImpl(); - /// Destructor. - - int packetSize() const; - /// Returns the total length of packet (header + data); - - struct timeval time(Poco::UInt8* buffer = 0, int length = 0) const; - /// Returns current epoch time if either buffer or length are equal to zero. - /// Otherwise, it extracts the time value from the supplied buffer. - /// - /// Buffer includes IP header, ICMP header and data. - - bool validReplyID(Poco::UInt8* buffer, int length) const; - /// Returns true if the extracted id is recognized - /// (i.e. equals the process id). - /// - /// Buffer includes IP header, ICMP header and data. - - virtual std::string errorDescription(Poco::UInt8* buffer, int length); - /// Returns error description string. - /// If supplied buffer contains ICMPv4 echo reply packet, an - /// empty string is returned indicating the absence of error. - /// - /// Buffer includes IP header, ICMP header and data. - - virtual std::string typeDescription(int typeId); - /// Returns the description of the packet type. - - static const Poco::UInt16 MAX_PACKET_SIZE; - static const std::string MESSAGE_TYPE[MESSAGE_TYPE_LENGTH]; - static const Poco::UInt8 DESTINATION_UNREACHABLE_TYPE; // 3 - static const Poco::UInt8 SOURCE_QUENCH_TYPE; // 4 - static const Poco::UInt8 REDIRECT_MESSAGE_TYPE; // 5 - static const Poco::UInt8 TIME_EXCEEDED_TYPE; // 11 - static const Poco::UInt8 PARAMETER_PROBLEM_TYPE; // 12 - -private: - void initPacket(); - Header* header(Poco::UInt8* buffer, int length) const; - Poco::UInt8* data(Poco::UInt8* buffer, int length) const; - - static const std::string DESTINATION_UNREACHABLE_CODE[DESTINATION_UNREACHABLE_LENGTH]; - static const std::string REDIRECT_MESSAGE_CODE[REDIRECT_MESSAGE_LENGTH]; - static const std::string TIME_EXCEEDED_CODE[TIME_EXCEEDED_LENGTH]; - static const std::string PARAMETER_PROBLEM_CODE[PARAMETER_PROBLEM_LENGTH]; - - Poco::UInt16 _seq; -}; - - -} } // namespace Poco::Net - - -#endif // Net_ICMPv4PacketImpl_INCLUDED +// +// ICMPv4PacketImpl.h +// +// Library: Net +// Package: ICMP +// Module: ICMPv4PacketImpl +// +// Definition of the ICMPv4PacketImpl class. +// +// Copyright (c) 2006, Applied Informatics Software Engineering GmbH. +// and Contributors. +// +// SPDX-License-Identifier: BSL-1.0 +// + + +#ifndef Net_ICMPv4PacketImpl_INCLUDED +#define Net_ICMPv4PacketImpl_INCLUDED + + +#include "Poco/Foundation.h" +#include "Poco/Net/Socket.h" +#include "Poco/Net/ICMPPacketImpl.h" +#include <cstddef> + + +namespace Poco { +namespace Net { + + +class Net_API ICMPv4PacketImpl : public ICMPPacketImpl + /// This class implements the ICMPv4 packet. + /// Parts are based on original ICMP code by + /// Mike Muuss + /// U. S. Army Ballistic Research Laboratory + /// December, 1983 +{ +public: + // ICMPv4 header + struct Header + { + Poco::UInt8 type; // ICMP packet type + Poco::UInt8 code; // Type sub code + Poco::UInt16 checksum; + Poco::UInt16 id; + Poco::UInt16 seq; + }; + + // compile-time shield against misalignment +#if POCO_OS != POCO_OS_ANDROID + poco_static_assert (offsetof(Header, code) == 0x01); + poco_static_assert (offsetof(Header, checksum) == 0x02); + poco_static_assert (offsetof(Header, id) == 0x04); + poco_static_assert (offsetof(Header, seq) == 0x06); +#endif + + enum MessageType + { + ECHO_REPLY, + ICMP_1, + ICMP_2, + DESTINATION_UNREACHABLE, + SOURCE_QUENCH, + REDIRECT, + ICMP_6, + ICMP_7, + ECHO_REQUEST, + ICMP_9, + ICMP_10, + TIME_EXCEEDED, + PARAMETER_PROBLEM, + TIMESTAMP_REQUEST, + TIMESTAMP_REPLY, + INFORMATION_REQUEST, + INFORMATION_REPLY, + MESSAGE_TYPE_UNKNOWN, // non-standard default, must remain last but one + MESSAGE_TYPE_LENGTH // length indicator, must remain last + }; + + enum DestinationUnreachableCode + { + NET_UNREACHABLE, + HOST_UNREACHABLE, + PROTOCOL_UNREACHABLE, + PORT_UNREACHABLE, + FRAGMENTATION_NEEDED_AND_DF_SET, + SOURCE_ROUTE_FAILED, + DESTINATION_UNREACHABLE_UNKNOWN, // non-standard default, must remain last but one + DESTINATION_UNREACHABLE_LENGTH // length indicator, must remain last + }; + + enum RedirectMessageCode + { + REDIRECT_NETWORK, + REDIRECT_HOST, + REDIRECT_SERVICE_NETWORK, + REDIRECT_SERVICE_HOST, + REDIRECT_MESSAGE_UNKNOWN, // non-standard default, must remain last but one + REDIRECT_MESSAGE_LENGTH // length indicator, must remain last + }; + + enum TimeExceededCode + { + TIME_TO_LIVE, + FRAGMENT_REASSEMBLY, + TIME_EXCEEDED_UNKNOWN, // non-standard default, must remain last but one + TIME_EXCEEDED_LENGTH // length indicator, must remain last + }; + + enum ParameterProblemCode + { + POINTER_INDICATES_THE_ERROR, + PARAMETER_PROBLEM_UNKNOWN, // non-standard default, must remain last but one + PARAMETER_PROBLEM_LENGTH // length indicator, must remain last + }; + + ICMPv4PacketImpl(int dataSize = 48); + /// Constructor. Creates an ICMPv4PacketImpl. + + ~ICMPv4PacketImpl(); + /// Destructor. + + int packetSize() const; + /// Returns the total length of packet (header + data); + + struct timeval time(Poco::UInt8* buffer = 0, int length = 0) const; + /// Returns current epoch time if either buffer or length are equal to zero. + /// Otherwise, it extracts the time value from the supplied buffer. + /// + /// Buffer includes IP header, ICMP header and data. + + bool validReplyID(Poco::UInt8* buffer, int length) const; + /// Returns true if the extracted id is recognized + /// (i.e. equals the process id). + /// + /// Buffer includes IP header, ICMP header and data. + + virtual std::string errorDescription(Poco::UInt8* buffer, int length); + /// Returns error description string. + /// If supplied buffer contains ICMPv4 echo reply packet, an + /// empty string is returned indicating the absence of error. + /// + /// Buffer includes IP header, ICMP header and data. + + virtual std::string typeDescription(int typeId); + /// Returns the description of the packet type. + + static const Poco::UInt16 MAX_PACKET_SIZE; + static const std::string MESSAGE_TYPE[MESSAGE_TYPE_LENGTH]; + static const Poco::UInt8 DESTINATION_UNREACHABLE_TYPE; // 3 + static const Poco::UInt8 SOURCE_QUENCH_TYPE; // 4 + static const Poco::UInt8 REDIRECT_MESSAGE_TYPE; // 5 + static const Poco::UInt8 TIME_EXCEEDED_TYPE; // 11 + static const Poco::UInt8 PARAMETER_PROBLEM_TYPE; // 12 + +private: + void initPacket(); + Header* header(Poco::UInt8* buffer, int length) const; + Poco::UInt8* data(Poco::UInt8* buffer, int length) const; + + static const std::string DESTINATION_UNREACHABLE_CODE[DESTINATION_UNREACHABLE_LENGTH]; + static const std::string REDIRECT_MESSAGE_CODE[REDIRECT_MESSAGE_LENGTH]; + static const std::string TIME_EXCEEDED_CODE[TIME_EXCEEDED_LENGTH]; + static const std::string PARAMETER_PROBLEM_CODE[PARAMETER_PROBLEM_LENGTH]; + + Poco::UInt16 _seq; +}; + + +} } // namespace Poco::Net + + +#endif // Net_ICMPv4PacketImpl_INCLUDED diff --git a/contrib/libs/poco/Net/include/Poco/Net/IPAddress.h b/contrib/libs/poco/Net/include/Poco/Net/IPAddress.h index 254cf69604..7d9cb6fa83 100644 --- a/contrib/libs/poco/Net/include/Poco/Net/IPAddress.h +++ b/contrib/libs/poco/Net/include/Poco/Net/IPAddress.h @@ -1,450 +1,450 @@ -// -// IPAddress.h -// -// Library: Net -// Package: NetCore -// Module: IPAddress -// -// Definition of the IPAddress class. -// -// Copyright (c) 2005-2011, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Net_IPAddress_INCLUDED -#define Net_IPAddress_INCLUDED - - -#include "Poco/Net/Net.h" -#include "Poco/Net/SocketDefs.h" -#include "Poco/Net/IPAddressImpl.h" -#include "Poco/AutoPtr.h" -#include "Poco/Exception.h" -#include <vector> -#include <ostream> - - -namespace Poco { - -class BinaryReader; -class BinaryWriter; - -namespace Net { - - -class Net_API IPAddress - /// This class represents an internet (IP) host - /// address. The address can belong either to the - /// IPv4 or the IPv6 address family. - /// - /// Relational operators (==, !=, <, <=, >, >=) are - /// supported. However, you must not interpret any - /// special meaning into the result of these - /// operations, other than that the results are - /// consistent. - /// - /// Especially, an IPv4 address is never equal to - /// an IPv6 address, even if the IPv6 address is - /// IPv4 compatible and the addresses are the same. - /// - /// IPv6 addresses are supported only if the target platform - /// supports IPv6. -{ -public: - typedef std::vector<IPAddress> List; - - // The following declarations keep the Family type - // backwards compatible with the previously used - // enum declaration. - typedef AddressFamily::Family Family; - static const Family IPv4 = AddressFamily::IPv4; -#if defined(POCO_HAVE_IPv6) - static const Family IPv6 = AddressFamily::IPv6; -#endif - - IPAddress(); - /// Creates a wildcard (zero) IPv4 IPAddress. - - IPAddress(const IPAddress& addr); - /// Creates an IPAddress by copying another one. - - explicit IPAddress(Family family); - /// Creates a wildcard (zero) IPAddress for the - /// given address family. - - explicit IPAddress(const std::string& addr); - /// Creates an IPAddress from the string containing - /// an IP address in presentation format (dotted decimal - /// for IPv4, hex string for IPv6). - /// - /// Depending on the format of addr, either an IPv4 or - /// an IPv6 address is created. - /// - /// See toString() for details on the supported formats. - /// - /// Throws an InvalidAddressException if the address cannot be parsed. - - IPAddress(const std::string& addr, Family family); - /// Creates an IPAddress from the string containing - /// an IP address in presentation format (dotted decimal - /// for IPv4, hex string for IPv6). - - IPAddress(const void* addr, poco_socklen_t length); - /// Creates an IPAddress from a native internet address. - /// A pointer to a in_addr or a in6_addr structure may be - /// passed. - - IPAddress(const void* addr, poco_socklen_t length, Poco::UInt32 scope); - /// Creates an IPAddress from a native internet address. - /// A pointer to a in_addr or a in6_addr structure may be - /// passed. Additionally, for an IPv6 address, a scope ID - /// may be specified. The scope ID will be ignored if an IPv4 - /// address is specified. - - IPAddress(unsigned prefix, Family family); - /// Creates an IPAddress mask with the given length of prefix. - -#if defined(_WIN32) - IPAddress(const SOCKET_ADDRESS& socket_address); - /// Creates an IPAddress from Windows SOCKET_ADDRESS structure. -#endif - - IPAddress(const struct sockaddr& sockaddr); - /// Same for struct sock_addr on POSIX. - - - ~IPAddress(); - /// Destroys the IPAddress. - - IPAddress& operator = (const IPAddress& addr); - /// Assigns an IPAddress. - - Family family() const; - /// Returns the address family (IPv4 or IPv6) of the address. - - Poco::UInt32 scope() const; - /// Returns the IPv6 scope identifier of the address. Returns 0 if - /// the address is an IPv4 address, or the address is an - /// IPv6 address but does not have a scope identifier. - - std::string toString() const; - /// Returns a string containing a representation of the address - /// in presentation format. - /// - /// For IPv4 addresses the result will be in dotted-decimal - /// (d.d.d.d) notation. - /// - /// Textual representation of IPv6 address is one of the following forms: - /// - /// The preferred form is x:x:x:x:x:x:x:x, where the 'x's are the hexadecimal - /// values of the eight 16-bit pieces of the address. This is the full form. - /// Example: 1080:0:0:0:8:600:200A:425C - /// - /// It is not necessary to write the leading zeros in an individual field. - /// However, there must be at least one numeral in every field, except as described below. - /// - /// It is common for IPv6 addresses to contain long strings of zero bits. - /// In order to make writing addresses containing zero bits easier, a special syntax is - /// available to compress the zeros. The use of "::" indicates multiple groups of 16-bits of zeros. - /// The "::" can only appear once in an address. The "::" can also be used to compress the leading - /// and/or trailing zeros in an address. Example: 1080::8:600:200A:425C - /// - /// For dealing with IPv4 compatible addresses in a mixed environment, - /// a special syntax is available: x:x:x:x:x:x:d.d.d.d, where the 'x's are the - /// hexadecimal values of the six high-order 16-bit pieces of the address, - /// and the 'd's are the decimal values of the four low-order 8-bit pieces of the - /// standard IPv4 representation address. Example: ::FFFF:192.168.1.120 - /// - /// If an IPv6 address contains a non-zero scope identifier, it is added - /// to the string, delimited by a percent character. On Windows platforms, - /// the numeric value (which specifies an interface index) is directly - /// appended. On Unix platforms, the name of the interface corresponding - /// to the index (interpretation of the scope identifier) is added. - - bool isWildcard() const; - /// Returns true iff the address is a wildcard (all zero) - /// address. - - bool isBroadcast() const; - /// Returns true iff the address is a broadcast address. - /// - /// Only IPv4 addresses can be broadcast addresses. In a broadcast - /// address, all bits are one. - /// - /// For an IPv6 address, returns always false. - - bool isLoopback() const; - /// Returns true iff the address is a loopback address. - /// - /// For IPv4, the loopback address is 127.0.0.1. - /// - /// For IPv6, the loopback address is ::1. - - bool isMulticast() const; - /// Returns true iff the address is a multicast address. - /// - /// IPv4 multicast addresses are in the - /// 224.0.0.0 to 239.255.255.255 range - /// (the first four bits have the value 1110). - /// - /// IPv6 multicast addresses are in the - /// FFxx:x:x:x:x:x:x:x range. - - bool isUnicast() const; - /// Returns true iff the address is a unicast address. - /// - /// An address is unicast if it is neither a wildcard, - /// broadcast or multicast address. - - bool isLinkLocal() const; - /// Returns true iff the address is a link local unicast address. - /// - /// IPv4 link local addresses are in the 169.254.0.0/16 range, - /// according to RFC 3927. - /// - /// IPv6 link local addresses have 1111 1110 10 as the first - /// 10 bits, followed by 54 zeros. - - bool isSiteLocal() const; - /// Returns true iff the address is a site local unicast address. - /// - /// IPv4 site local addresses are in on of the 10.0.0.0/24, - /// 192.168.0.0/16 or 172.16.0.0 to 172.31.255.255 ranges. - /// - /// Originally, IPv6 site-local addresses had FEC0/10 (1111 1110 11) - /// prefix (RFC 4291), followed by 38 zeros. Interfaces using - /// this mask are supported, but obsolete; RFC 4193 prescribes - /// fc00::/7 (1111 110) as local unicast prefix. - - bool isIPv4Compatible() const; - /// Returns true iff the address is IPv4 compatible. - /// - /// For IPv4 addresses, this is always true. - /// - /// For IPv6, the address must be in the ::x:x range (the - /// first 96 bits are zero). - - bool isIPv4Mapped() const; - /// Returns true iff the address is an IPv4 mapped IPv6 address. - /// - /// For IPv4 addresses, this is always true. - /// - /// For IPv6, the address must be in the ::FFFF:x:x range. - - bool isWellKnownMC() const; - /// Returns true iff the address is a well-known multicast address. - /// - /// For IPv4, well-known multicast addresses are in the - /// 224.0.0.0/8 range. - /// - /// For IPv6, well-known multicast addresses are in the - /// FF0x:x:x:x:x:x:x:x range. - - bool isNodeLocalMC() const; - /// Returns true iff the address is a node-local multicast address. - /// - /// IPv4 does not support node-local addresses, thus the result is - /// always false for an IPv4 address. - /// - /// For IPv6, node-local multicast addresses are in the - /// FFx1:x:x:x:x:x:x:x range. - - bool isLinkLocalMC() const; - /// Returns true iff the address is a link-local multicast address. - /// - /// For IPv4, link-local multicast addresses are in the - /// 224.0.0.0/24 range. Note that this overlaps with the range for well-known - /// multicast addresses. - /// - /// For IPv6, link-local multicast addresses are in the - /// FFx2:x:x:x:x:x:x:x range. - - bool isSiteLocalMC() const; - /// Returns true iff the address is a site-local multicast address. - /// - /// For IPv4, site local multicast addresses are in the - /// 239.255.0.0/16 range. - /// - /// For IPv6, site-local multicast addresses are in the - /// FFx5:x:x:x:x:x:x:x range. - - bool isOrgLocalMC() const; - /// Returns true iff the address is a organization-local multicast address. - /// - /// For IPv4, organization-local multicast addresses are in the - /// 239.192.0.0/16 range. - /// - /// For IPv6, organization-local multicast addresses are in the - /// FFx8:x:x:x:x:x:x:x range. - - bool isGlobalMC() const; - /// Returns true iff the address is a global multicast address. - /// - /// For IPv4, global multicast addresses are in the - /// 224.0.1.0 to 238.255.255.255 range. - /// - /// For IPv6, global multicast addresses are in the - /// FFxF:x:x:x:x:x:x:x range. - - bool operator == (const IPAddress& addr) const; - bool operator != (const IPAddress& addr) const; - bool operator < (const IPAddress& addr) const; - bool operator <= (const IPAddress& addr) const; - bool operator > (const IPAddress& addr) const; - bool operator >= (const IPAddress& addr) const; - IPAddress operator & (const IPAddress& addr) const; - IPAddress operator | (const IPAddress& addr) const; - IPAddress operator ^ (const IPAddress& addr) const; - IPAddress operator ~ () const; - - poco_socklen_t length() const; - /// Returns the length in bytes of the internal socket address structure. - - const void* addr() const; - /// Returns the internal address structure. - - int af() const; - /// Returns the address family (AF_INET or AF_INET6) of the address. - - unsigned prefixLength() const; - /// Returns the prefix length. - - void mask(const IPAddress& mask); - /// Masks the IP address using the given netmask, which is usually - /// a IPv4 subnet mask. Only supported for IPv4 addresses. - /// - /// The new address is (address & mask). - - void mask(const IPAddress& mask, const IPAddress& set); - /// Masks the IP address using the given netmask, which is usually - /// a IPv4 subnet mask. Only supported for IPv4 addresses. - /// - /// The new address is (address & mask) | (set & ~mask). - - static IPAddress parse(const std::string& addr); - /// Creates an IPAddress from the string containing - /// an IP address in presentation format (dotted decimal - /// for IPv4, hex string for IPv6). - /// - /// Depending on the format of addr, either an IPv4 or - /// an IPv6 address is created. - /// - /// See toString() for details on the supported formats. - /// - /// Throws an InvalidAddressException if the address cannot be parsed. - - static bool tryParse(const std::string& addr, IPAddress& result); - /// Tries to interpret the given address string as an - /// IP address in presentation format (dotted decimal - /// for IPv4, hex string for IPv6). - /// - /// Returns true and stores the IPAddress in result if the - /// string contains a valid address. - /// - /// Returns false and leaves result unchanged otherwise. - - static IPAddress wildcard(Family family = IPv4); - /// Returns a wildcard IPv4 or IPv6 address (0.0.0.0). - - static IPAddress broadcast(); - /// Returns a broadcast IPv4 address (255.255.255.255). - - enum - { - MAX_ADDRESS_LENGTH = -#if defined(POCO_HAVE_IPv6) - sizeof(struct in6_addr) -#else - sizeof(struct in_addr) -#endif - /// Maximum length in bytes of a socket address. - }; - -private: - typedef Poco::Net::Impl::IPAddressImpl Impl; - typedef Poco::AutoPtr<Impl> Ptr; - - Ptr pImpl() const; - void newIPv4(); - void newIPv4(const void* hostAddr); - void newIPv4(unsigned prefix); -#if defined(POCO_HAVE_IPv6) - void newIPv6(); - void newIPv6(const void* hostAddr); - void newIPv6(const void* hostAddr, Poco::UInt32 scope); - void newIPv6(unsigned prefix); -#endif - Ptr _pImpl; -}; - - -// -// inlines -// -inline IPAddress::Ptr IPAddress::pImpl() const -{ - if (_pImpl) return _pImpl; - throw NullPointerException("IPaddress implementation pointer is NULL."); -} - - -inline void IPAddress::newIPv4() -{ - _pImpl = new Poco::Net::Impl::IPv4AddressImpl; -} - - -inline void IPAddress::newIPv4(const void* hostAddr) -{ - _pImpl = new Poco::Net::Impl::IPv4AddressImpl(hostAddr); -} - - -inline void IPAddress::newIPv4(unsigned prefix) -{ - _pImpl = new Poco::Net::Impl::IPv4AddressImpl(prefix); -} - - -#if defined(POCO_HAVE_IPv6) - - -inline void IPAddress::newIPv6() -{ - _pImpl = new Poco::Net::Impl::IPv6AddressImpl; -} - - -inline void IPAddress::newIPv6(const void* hostAddr) -{ - _pImpl = new Poco::Net::Impl::IPv6AddressImpl(hostAddr); -} - - -inline void IPAddress::newIPv6(const void* hostAddr, Poco::UInt32 scope) -{ - _pImpl = new Poco::Net::Impl::IPv6AddressImpl(hostAddr, scope); -} - - -inline void IPAddress::newIPv6(unsigned prefix) -{ - _pImpl = new Poco::Net::Impl::IPv6AddressImpl(prefix); -} - - -#endif // POCO_HAVE_IPv6 - - -} } // namespace Poco::Net - - -Net_API Poco::BinaryWriter& operator << (Poco::BinaryWriter& writer, const Poco::Net::IPAddress& value); -Net_API Poco::BinaryReader& operator >> (Poco::BinaryReader& reader, Poco::Net::IPAddress& value); -Net_API std::ostream& operator << (std::ostream& ostr, const Poco::Net::IPAddress& addr); - - -#endif // Net_IPAddress_INCLUDED +// +// IPAddress.h +// +// Library: Net +// Package: NetCore +// Module: IPAddress +// +// Definition of the IPAddress class. +// +// Copyright (c) 2005-2011, Applied Informatics Software Engineering GmbH. +// and Contributors. +// +// SPDX-License-Identifier: BSL-1.0 +// + + +#ifndef Net_IPAddress_INCLUDED +#define Net_IPAddress_INCLUDED + + +#include "Poco/Net/Net.h" +#include "Poco/Net/SocketDefs.h" +#include "Poco/Net/IPAddressImpl.h" +#include "Poco/AutoPtr.h" +#include "Poco/Exception.h" +#include <vector> +#include <ostream> + + +namespace Poco { + +class BinaryReader; +class BinaryWriter; + +namespace Net { + + +class Net_API IPAddress + /// This class represents an internet (IP) host + /// address. The address can belong either to the + /// IPv4 or the IPv6 address family. + /// + /// Relational operators (==, !=, <, <=, >, >=) are + /// supported. However, you must not interpret any + /// special meaning into the result of these + /// operations, other than that the results are + /// consistent. + /// + /// Especially, an IPv4 address is never equal to + /// an IPv6 address, even if the IPv6 address is + /// IPv4 compatible and the addresses are the same. + /// + /// IPv6 addresses are supported only if the target platform + /// supports IPv6. +{ +public: + typedef std::vector<IPAddress> List; + + // The following declarations keep the Family type + // backwards compatible with the previously used + // enum declaration. + typedef AddressFamily::Family Family; + static const Family IPv4 = AddressFamily::IPv4; +#if defined(POCO_HAVE_IPv6) + static const Family IPv6 = AddressFamily::IPv6; +#endif + + IPAddress(); + /// Creates a wildcard (zero) IPv4 IPAddress. + + IPAddress(const IPAddress& addr); + /// Creates an IPAddress by copying another one. + + explicit IPAddress(Family family); + /// Creates a wildcard (zero) IPAddress for the + /// given address family. + + explicit IPAddress(const std::string& addr); + /// Creates an IPAddress from the string containing + /// an IP address in presentation format (dotted decimal + /// for IPv4, hex string for IPv6). + /// + /// Depending on the format of addr, either an IPv4 or + /// an IPv6 address is created. + /// + /// See toString() for details on the supported formats. + /// + /// Throws an InvalidAddressException if the address cannot be parsed. + + IPAddress(const std::string& addr, Family family); + /// Creates an IPAddress from the string containing + /// an IP address in presentation format (dotted decimal + /// for IPv4, hex string for IPv6). + + IPAddress(const void* addr, poco_socklen_t length); + /// Creates an IPAddress from a native internet address. + /// A pointer to a in_addr or a in6_addr structure may be + /// passed. + + IPAddress(const void* addr, poco_socklen_t length, Poco::UInt32 scope); + /// Creates an IPAddress from a native internet address. + /// A pointer to a in_addr or a in6_addr structure may be + /// passed. Additionally, for an IPv6 address, a scope ID + /// may be specified. The scope ID will be ignored if an IPv4 + /// address is specified. + + IPAddress(unsigned prefix, Family family); + /// Creates an IPAddress mask with the given length of prefix. + +#if defined(_WIN32) + IPAddress(const SOCKET_ADDRESS& socket_address); + /// Creates an IPAddress from Windows SOCKET_ADDRESS structure. +#endif + + IPAddress(const struct sockaddr& sockaddr); + /// Same for struct sock_addr on POSIX. + + + ~IPAddress(); + /// Destroys the IPAddress. + + IPAddress& operator = (const IPAddress& addr); + /// Assigns an IPAddress. + + Family family() const; + /// Returns the address family (IPv4 or IPv6) of the address. + + Poco::UInt32 scope() const; + /// Returns the IPv6 scope identifier of the address. Returns 0 if + /// the address is an IPv4 address, or the address is an + /// IPv6 address but does not have a scope identifier. + + std::string toString() const; + /// Returns a string containing a representation of the address + /// in presentation format. + /// + /// For IPv4 addresses the result will be in dotted-decimal + /// (d.d.d.d) notation. + /// + /// Textual representation of IPv6 address is one of the following forms: + /// + /// The preferred form is x:x:x:x:x:x:x:x, where the 'x's are the hexadecimal + /// values of the eight 16-bit pieces of the address. This is the full form. + /// Example: 1080:0:0:0:8:600:200A:425C + /// + /// It is not necessary to write the leading zeros in an individual field. + /// However, there must be at least one numeral in every field, except as described below. + /// + /// It is common for IPv6 addresses to contain long strings of zero bits. + /// In order to make writing addresses containing zero bits easier, a special syntax is + /// available to compress the zeros. The use of "::" indicates multiple groups of 16-bits of zeros. + /// The "::" can only appear once in an address. The "::" can also be used to compress the leading + /// and/or trailing zeros in an address. Example: 1080::8:600:200A:425C + /// + /// For dealing with IPv4 compatible addresses in a mixed environment, + /// a special syntax is available: x:x:x:x:x:x:d.d.d.d, where the 'x's are the + /// hexadecimal values of the six high-order 16-bit pieces of the address, + /// and the 'd's are the decimal values of the four low-order 8-bit pieces of the + /// standard IPv4 representation address. Example: ::FFFF:192.168.1.120 + /// + /// If an IPv6 address contains a non-zero scope identifier, it is added + /// to the string, delimited by a percent character. On Windows platforms, + /// the numeric value (which specifies an interface index) is directly + /// appended. On Unix platforms, the name of the interface corresponding + /// to the index (interpretation of the scope identifier) is added. + + bool isWildcard() const; + /// Returns true iff the address is a wildcard (all zero) + /// address. + + bool isBroadcast() const; + /// Returns true iff the address is a broadcast address. + /// + /// Only IPv4 addresses can be broadcast addresses. In a broadcast + /// address, all bits are one. + /// + /// For an IPv6 address, returns always false. + + bool isLoopback() const; + /// Returns true iff the address is a loopback address. + /// + /// For IPv4, the loopback address is 127.0.0.1. + /// + /// For IPv6, the loopback address is ::1. + + bool isMulticast() const; + /// Returns true iff the address is a multicast address. + /// + /// IPv4 multicast addresses are in the + /// 224.0.0.0 to 239.255.255.255 range + /// (the first four bits have the value 1110). + /// + /// IPv6 multicast addresses are in the + /// FFxx:x:x:x:x:x:x:x range. + + bool isUnicast() const; + /// Returns true iff the address is a unicast address. + /// + /// An address is unicast if it is neither a wildcard, + /// broadcast or multicast address. + + bool isLinkLocal() const; + /// Returns true iff the address is a link local unicast address. + /// + /// IPv4 link local addresses are in the 169.254.0.0/16 range, + /// according to RFC 3927. + /// + /// IPv6 link local addresses have 1111 1110 10 as the first + /// 10 bits, followed by 54 zeros. + + bool isSiteLocal() const; + /// Returns true iff the address is a site local unicast address. + /// + /// IPv4 site local addresses are in on of the 10.0.0.0/24, + /// 192.168.0.0/16 or 172.16.0.0 to 172.31.255.255 ranges. + /// + /// Originally, IPv6 site-local addresses had FEC0/10 (1111 1110 11) + /// prefix (RFC 4291), followed by 38 zeros. Interfaces using + /// this mask are supported, but obsolete; RFC 4193 prescribes + /// fc00::/7 (1111 110) as local unicast prefix. + + bool isIPv4Compatible() const; + /// Returns true iff the address is IPv4 compatible. + /// + /// For IPv4 addresses, this is always true. + /// + /// For IPv6, the address must be in the ::x:x range (the + /// first 96 bits are zero). + + bool isIPv4Mapped() const; + /// Returns true iff the address is an IPv4 mapped IPv6 address. + /// + /// For IPv4 addresses, this is always true. + /// + /// For IPv6, the address must be in the ::FFFF:x:x range. + + bool isWellKnownMC() const; + /// Returns true iff the address is a well-known multicast address. + /// + /// For IPv4, well-known multicast addresses are in the + /// 224.0.0.0/8 range. + /// + /// For IPv6, well-known multicast addresses are in the + /// FF0x:x:x:x:x:x:x:x range. + + bool isNodeLocalMC() const; + /// Returns true iff the address is a node-local multicast address. + /// + /// IPv4 does not support node-local addresses, thus the result is + /// always false for an IPv4 address. + /// + /// For IPv6, node-local multicast addresses are in the + /// FFx1:x:x:x:x:x:x:x range. + + bool isLinkLocalMC() const; + /// Returns true iff the address is a link-local multicast address. + /// + /// For IPv4, link-local multicast addresses are in the + /// 224.0.0.0/24 range. Note that this overlaps with the range for well-known + /// multicast addresses. + /// + /// For IPv6, link-local multicast addresses are in the + /// FFx2:x:x:x:x:x:x:x range. + + bool isSiteLocalMC() const; + /// Returns true iff the address is a site-local multicast address. + /// + /// For IPv4, site local multicast addresses are in the + /// 239.255.0.0/16 range. + /// + /// For IPv6, site-local multicast addresses are in the + /// FFx5:x:x:x:x:x:x:x range. + + bool isOrgLocalMC() const; + /// Returns true iff the address is a organization-local multicast address. + /// + /// For IPv4, organization-local multicast addresses are in the + /// 239.192.0.0/16 range. + /// + /// For IPv6, organization-local multicast addresses are in the + /// FFx8:x:x:x:x:x:x:x range. + + bool isGlobalMC() const; + /// Returns true iff the address is a global multicast address. + /// + /// For IPv4, global multicast addresses are in the + /// 224.0.1.0 to 238.255.255.255 range. + /// + /// For IPv6, global multicast addresses are in the + /// FFxF:x:x:x:x:x:x:x range. + + bool operator == (const IPAddress& addr) const; + bool operator != (const IPAddress& addr) const; + bool operator < (const IPAddress& addr) const; + bool operator <= (const IPAddress& addr) const; + bool operator > (const IPAddress& addr) const; + bool operator >= (const IPAddress& addr) const; + IPAddress operator & (const IPAddress& addr) const; + IPAddress operator | (const IPAddress& addr) const; + IPAddress operator ^ (const IPAddress& addr) const; + IPAddress operator ~ () const; + + poco_socklen_t length() const; + /// Returns the length in bytes of the internal socket address structure. + + const void* addr() const; + /// Returns the internal address structure. + + int af() const; + /// Returns the address family (AF_INET or AF_INET6) of the address. + + unsigned prefixLength() const; + /// Returns the prefix length. + + void mask(const IPAddress& mask); + /// Masks the IP address using the given netmask, which is usually + /// a IPv4 subnet mask. Only supported for IPv4 addresses. + /// + /// The new address is (address & mask). + + void mask(const IPAddress& mask, const IPAddress& set); + /// Masks the IP address using the given netmask, which is usually + /// a IPv4 subnet mask. Only supported for IPv4 addresses. + /// + /// The new address is (address & mask) | (set & ~mask). + + static IPAddress parse(const std::string& addr); + /// Creates an IPAddress from the string containing + /// an IP address in presentation format (dotted decimal + /// for IPv4, hex string for IPv6). + /// + /// Depending on the format of addr, either an IPv4 or + /// an IPv6 address is created. + /// + /// See toString() for details on the supported formats. + /// + /// Throws an InvalidAddressException if the address cannot be parsed. + + static bool tryParse(const std::string& addr, IPAddress& result); + /// Tries to interpret the given address string as an + /// IP address in presentation format (dotted decimal + /// for IPv4, hex string for IPv6). + /// + /// Returns true and stores the IPAddress in result if the + /// string contains a valid address. + /// + /// Returns false and leaves result unchanged otherwise. + + static IPAddress wildcard(Family family = IPv4); + /// Returns a wildcard IPv4 or IPv6 address (0.0.0.0). + + static IPAddress broadcast(); + /// Returns a broadcast IPv4 address (255.255.255.255). + + enum + { + MAX_ADDRESS_LENGTH = +#if defined(POCO_HAVE_IPv6) + sizeof(struct in6_addr) +#else + sizeof(struct in_addr) +#endif + /// Maximum length in bytes of a socket address. + }; + +private: + typedef Poco::Net::Impl::IPAddressImpl Impl; + typedef Poco::AutoPtr<Impl> Ptr; + + Ptr pImpl() const; + void newIPv4(); + void newIPv4(const void* hostAddr); + void newIPv4(unsigned prefix); +#if defined(POCO_HAVE_IPv6) + void newIPv6(); + void newIPv6(const void* hostAddr); + void newIPv6(const void* hostAddr, Poco::UInt32 scope); + void newIPv6(unsigned prefix); +#endif + Ptr _pImpl; +}; + + +// +// inlines +// +inline IPAddress::Ptr IPAddress::pImpl() const +{ + if (_pImpl) return _pImpl; + throw NullPointerException("IPaddress implementation pointer is NULL."); +} + + +inline void IPAddress::newIPv4() +{ + _pImpl = new Poco::Net::Impl::IPv4AddressImpl; +} + + +inline void IPAddress::newIPv4(const void* hostAddr) +{ + _pImpl = new Poco::Net::Impl::IPv4AddressImpl(hostAddr); +} + + +inline void IPAddress::newIPv4(unsigned prefix) +{ + _pImpl = new Poco::Net::Impl::IPv4AddressImpl(prefix); +} + + +#if defined(POCO_HAVE_IPv6) + + +inline void IPAddress::newIPv6() +{ + _pImpl = new Poco::Net::Impl::IPv6AddressImpl; +} + + +inline void IPAddress::newIPv6(const void* hostAddr) +{ + _pImpl = new Poco::Net::Impl::IPv6AddressImpl(hostAddr); +} + + +inline void IPAddress::newIPv6(const void* hostAddr, Poco::UInt32 scope) +{ + _pImpl = new Poco::Net::Impl::IPv6AddressImpl(hostAddr, scope); +} + + +inline void IPAddress::newIPv6(unsigned prefix) +{ + _pImpl = new Poco::Net::Impl::IPv6AddressImpl(prefix); +} + + +#endif // POCO_HAVE_IPv6 + + +} } // namespace Poco::Net + + +Net_API Poco::BinaryWriter& operator << (Poco::BinaryWriter& writer, const Poco::Net::IPAddress& value); +Net_API Poco::BinaryReader& operator >> (Poco::BinaryReader& reader, Poco::Net::IPAddress& value); +Net_API std::ostream& operator << (std::ostream& ostr, const Poco::Net::IPAddress& addr); + + +#endif // Net_IPAddress_INCLUDED diff --git a/contrib/libs/poco/Net/include/Poco/Net/IPAddressImpl.h b/contrib/libs/poco/Net/include/Poco/Net/IPAddressImpl.h index 4bdbd2f45d..e43d685509 100644 --- a/contrib/libs/poco/Net/include/Poco/Net/IPAddressImpl.h +++ b/contrib/libs/poco/Net/include/Poco/Net/IPAddressImpl.h @@ -1,179 +1,179 @@ -// -// IPAddressImpl.h -// -// Library: Net -// Package: NetCore -// Module: IPAddressImpl -// -// Definition of the IPAddressImpl class. -// -// Copyright (c) 2005-2011, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Net_IPAddressImpl_INCLUDED -#define Net_IPAddressImpl_INCLUDED - - -#include "Poco/Net/Net.h" -#include "Poco/Net/SocketDefs.h" -#include "Poco/RefCountedObject.h" -#include <vector> - - -namespace Poco { -namespace Net { -namespace Impl { - - -class IPAddressImpl : public Poco::RefCountedObject -{ -public: - typedef AddressFamily::Family Family; - - virtual ~IPAddressImpl(); - - virtual IPAddressImpl* clone() const = 0; - virtual std::string toString() const = 0; - virtual poco_socklen_t length() const = 0; - virtual const void* addr() const = 0; - virtual Family family() const = 0; - virtual int af() const = 0; - virtual Poco::UInt32 scope() const = 0; - virtual bool isWildcard() const = 0; - virtual bool isBroadcast() const = 0; - virtual bool isLoopback() const = 0; - virtual bool isMulticast() const = 0; - virtual bool isLinkLocal() const = 0; - virtual bool isSiteLocal() const = 0; - virtual bool isIPv4Mapped() const = 0; - virtual bool isIPv4Compatible() const = 0; - virtual bool isWellKnownMC() const = 0; - virtual bool isNodeLocalMC() const = 0; - virtual bool isLinkLocalMC() const = 0; - virtual bool isSiteLocalMC() const = 0; - virtual bool isOrgLocalMC() const = 0; - virtual bool isGlobalMC() const = 0; - virtual void mask(const IPAddressImpl* pMask, const IPAddressImpl* pSet) = 0; - virtual unsigned prefixLength() const = 0; - -protected: - IPAddressImpl(); - -private: - IPAddressImpl(const IPAddressImpl&); - IPAddressImpl& operator = (const IPAddressImpl&); -}; - - -// -// IPv4AddressImpl -// - -class IPv4AddressImpl: public IPAddressImpl -{ -public: - IPv4AddressImpl(); - IPv4AddressImpl(const void* addr); - IPv4AddressImpl(unsigned prefix); - IPv4AddressImpl(const IPv4AddressImpl& addr); - IPv4AddressImpl& operator = (const IPv4AddressImpl&); - std::string toString() const; - poco_socklen_t length() const; - const void* addr() const; - Family family() const; - int af() const; - unsigned prefixLength() const; - Poco::UInt32 scope() const; - bool isWildcard() const; - bool isBroadcast() const; - bool isLoopback() const; - bool isMulticast() const; - bool isLinkLocal() const; - bool isSiteLocal() const; - bool isIPv4Compatible() const; - bool isIPv4Mapped() const; - bool isWellKnownMC() const; - bool isNodeLocalMC() const; - bool isLinkLocalMC() const; - bool isSiteLocalMC() const; - bool isOrgLocalMC() const; - bool isGlobalMC() const; - static IPv4AddressImpl parse(const std::string& addr); - void mask(const IPAddressImpl* pMask, const IPAddressImpl* pSet); - IPAddressImpl* clone() const; - IPv4AddressImpl operator & (const IPv4AddressImpl& addr) const; - IPv4AddressImpl operator | (const IPv4AddressImpl& addr) const; - IPv4AddressImpl operator ^ (const IPv4AddressImpl& addr) const; - IPv4AddressImpl operator ~ () const; - bool operator == (const IPv4AddressImpl& addr) const; - bool operator != (const IPv4AddressImpl& addr) const; - -private: - struct in_addr _addr; -}; - - -#if defined(POCO_HAVE_IPv6) - - -// -// IPv6AddressImpl -// - -class IPv6AddressImpl: public IPAddressImpl -{ -public: - IPv6AddressImpl(); - IPv6AddressImpl(const void* addr); - IPv6AddressImpl(const void* addr, Poco::UInt32 scope); - IPv6AddressImpl(unsigned prefix); - std::string toString() const; - poco_socklen_t length() const; - const void* addr() const; - Family family() const; - int af() const; - unsigned prefixLength() const; - Poco::UInt32 scope() const; - bool isWildcard() const; - bool isBroadcast() const; - bool isLoopback() const; - bool isMulticast() const; - bool isLinkLocal() const; - bool isSiteLocal() const; - bool isIPv4Compatible() const; - bool isIPv4Mapped() const; - bool isWellKnownMC() const; - bool isNodeLocalMC() const; - bool isLinkLocalMC() const; - bool isSiteLocalMC() const; - bool isOrgLocalMC() const; - bool isGlobalMC() const; - static IPv6AddressImpl parse(const std::string& addr); - void mask(const IPAddressImpl* pMask, const IPAddressImpl* pSet); - IPAddressImpl* clone() const; - IPv6AddressImpl operator & (const IPv6AddressImpl& addr) const; - IPv6AddressImpl operator | (const IPv6AddressImpl& addr) const; - IPv6AddressImpl operator ^ (const IPv6AddressImpl& addr) const; - IPv6AddressImpl operator ~ () const; - bool operator == (const IPv6AddressImpl& addr) const; - bool operator != (const IPv6AddressImpl& addr) const; - IPv6AddressImpl(const IPv6AddressImpl& addr); - IPv6AddressImpl& operator = (const IPv6AddressImpl&); - -private: - struct in6_addr _addr; - unsigned int _scope; -}; - - -#endif // POCO_HAVE_IPv6 - - -} } } // namespace Poco::Net::Impl - - -#endif // Net_IPAddressImpl_INCLUDED +// +// IPAddressImpl.h +// +// Library: Net +// Package: NetCore +// Module: IPAddressImpl +// +// Definition of the IPAddressImpl class. +// +// Copyright (c) 2005-2011, Applied Informatics Software Engineering GmbH. +// and Contributors. +// +// SPDX-License-Identifier: BSL-1.0 +// + + +#ifndef Net_IPAddressImpl_INCLUDED +#define Net_IPAddressImpl_INCLUDED + + +#include "Poco/Net/Net.h" +#include "Poco/Net/SocketDefs.h" +#include "Poco/RefCountedObject.h" +#include <vector> + + +namespace Poco { +namespace Net { +namespace Impl { + + +class IPAddressImpl : public Poco::RefCountedObject +{ +public: + typedef AddressFamily::Family Family; + + virtual ~IPAddressImpl(); + + virtual IPAddressImpl* clone() const = 0; + virtual std::string toString() const = 0; + virtual poco_socklen_t length() const = 0; + virtual const void* addr() const = 0; + virtual Family family() const = 0; + virtual int af() const = 0; + virtual Poco::UInt32 scope() const = 0; + virtual bool isWildcard() const = 0; + virtual bool isBroadcast() const = 0; + virtual bool isLoopback() const = 0; + virtual bool isMulticast() const = 0; + virtual bool isLinkLocal() const = 0; + virtual bool isSiteLocal() const = 0; + virtual bool isIPv4Mapped() const = 0; + virtual bool isIPv4Compatible() const = 0; + virtual bool isWellKnownMC() const = 0; + virtual bool isNodeLocalMC() const = 0; + virtual bool isLinkLocalMC() const = 0; + virtual bool isSiteLocalMC() const = 0; + virtual bool isOrgLocalMC() const = 0; + virtual bool isGlobalMC() const = 0; + virtual void mask(const IPAddressImpl* pMask, const IPAddressImpl* pSet) = 0; + virtual unsigned prefixLength() const = 0; + +protected: + IPAddressImpl(); + +private: + IPAddressImpl(const IPAddressImpl&); + IPAddressImpl& operator = (const IPAddressImpl&); +}; + + +// +// IPv4AddressImpl +// + +class IPv4AddressImpl: public IPAddressImpl +{ +public: + IPv4AddressImpl(); + IPv4AddressImpl(const void* addr); + IPv4AddressImpl(unsigned prefix); + IPv4AddressImpl(const IPv4AddressImpl& addr); + IPv4AddressImpl& operator = (const IPv4AddressImpl&); + std::string toString() const; + poco_socklen_t length() const; + const void* addr() const; + Family family() const; + int af() const; + unsigned prefixLength() const; + Poco::UInt32 scope() const; + bool isWildcard() const; + bool isBroadcast() const; + bool isLoopback() const; + bool isMulticast() const; + bool isLinkLocal() const; + bool isSiteLocal() const; + bool isIPv4Compatible() const; + bool isIPv4Mapped() const; + bool isWellKnownMC() const; + bool isNodeLocalMC() const; + bool isLinkLocalMC() const; + bool isSiteLocalMC() const; + bool isOrgLocalMC() const; + bool isGlobalMC() const; + static IPv4AddressImpl parse(const std::string& addr); + void mask(const IPAddressImpl* pMask, const IPAddressImpl* pSet); + IPAddressImpl* clone() const; + IPv4AddressImpl operator & (const IPv4AddressImpl& addr) const; + IPv4AddressImpl operator | (const IPv4AddressImpl& addr) const; + IPv4AddressImpl operator ^ (const IPv4AddressImpl& addr) const; + IPv4AddressImpl operator ~ () const; + bool operator == (const IPv4AddressImpl& addr) const; + bool operator != (const IPv4AddressImpl& addr) const; + +private: + struct in_addr _addr; +}; + + +#if defined(POCO_HAVE_IPv6) + + +// +// IPv6AddressImpl +// + +class IPv6AddressImpl: public IPAddressImpl +{ +public: + IPv6AddressImpl(); + IPv6AddressImpl(const void* addr); + IPv6AddressImpl(const void* addr, Poco::UInt32 scope); + IPv6AddressImpl(unsigned prefix); + std::string toString() const; + poco_socklen_t length() const; + const void* addr() const; + Family family() const; + int af() const; + unsigned prefixLength() const; + Poco::UInt32 scope() const; + bool isWildcard() const; + bool isBroadcast() const; + bool isLoopback() const; + bool isMulticast() const; + bool isLinkLocal() const; + bool isSiteLocal() const; + bool isIPv4Compatible() const; + bool isIPv4Mapped() const; + bool isWellKnownMC() const; + bool isNodeLocalMC() const; + bool isLinkLocalMC() const; + bool isSiteLocalMC() const; + bool isOrgLocalMC() const; + bool isGlobalMC() const; + static IPv6AddressImpl parse(const std::string& addr); + void mask(const IPAddressImpl* pMask, const IPAddressImpl* pSet); + IPAddressImpl* clone() const; + IPv6AddressImpl operator & (const IPv6AddressImpl& addr) const; + IPv6AddressImpl operator | (const IPv6AddressImpl& addr) const; + IPv6AddressImpl operator ^ (const IPv6AddressImpl& addr) const; + IPv6AddressImpl operator ~ () const; + bool operator == (const IPv6AddressImpl& addr) const; + bool operator != (const IPv6AddressImpl& addr) const; + IPv6AddressImpl(const IPv6AddressImpl& addr); + IPv6AddressImpl& operator = (const IPv6AddressImpl&); + +private: + struct in6_addr _addr; + unsigned int _scope; +}; + + +#endif // POCO_HAVE_IPv6 + + +} } } // namespace Poco::Net::Impl + + +#endif // Net_IPAddressImpl_INCLUDED diff --git a/contrib/libs/poco/Net/include/Poco/Net/MailMessage.h b/contrib/libs/poco/Net/include/Poco/Net/MailMessage.h index 472284316f..474186036e 100644 --- a/contrib/libs/poco/Net/include/Poco/Net/MailMessage.h +++ b/contrib/libs/poco/Net/include/Poco/Net/MailMessage.h @@ -1,314 +1,314 @@ -// -// MailMessage.h -// -// Library: Net -// Package: Mail -// Module: MailMessage -// -// Definition of the MailMessage class. -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Net_MailMessage_INCLUDED -#define Net_MailMessage_INCLUDED - - -#include "Poco/Net/Net.h" -#include "Poco/Net/MessageHeader.h" -#include "Poco/Net/MailRecipient.h" -#include "Poco/Net/PartStore.h" -#include "Poco/Timestamp.h" -#include <vector> - - -namespace Poco { -namespace Net { - - -class MediaType; -class PartSource; -class PartHandler; -class MultipartWriter; - - -class Net_API MailMessage: public MessageHeader - /// This class represents an e-mail message for - /// use with the SMTPClientSession and POPClientSession - /// classes. - /// - /// MailMessage supports both old-style plain text messages, - /// as well as MIME multipart mail messages with attachments. - /// - /// For multi-part messages, the following content transfer - /// encodings are supported: 7bit, 8bit, quoted-printable - /// and base64. -{ -public: - typedef std::vector<MailRecipient> Recipients; - - enum ContentDisposition - { - CONTENT_INLINE, - CONTENT_ATTACHMENT - }; - - enum ContentTransferEncoding - { - ENCODING_7BIT, - ENCODING_8BIT, - ENCODING_QUOTED_PRINTABLE, - ENCODING_BASE64 - }; - - struct Part - { - std::string name; - PartSource* pSource; - ContentDisposition disposition; - ContentTransferEncoding encoding; - }; - - typedef std::vector<Part> PartVec; - - MailMessage(PartStoreFactory* pStoreFactory = 0); - /// Creates an empty MailMessage. - /// - /// If pStoreFactory is not null, message attachments will be - /// handled by the object created by the factory. Most - /// common reason is to temporarily save attachments to - /// the file system in order to avoid potential memory - /// exhaustion when attachment files are very large. - - virtual ~MailMessage(); - /// Destroys the MailMessage. - - void addRecipient(const MailRecipient& recipient); - /// Adds a recipient for the message. - - void setRecipients(const Recipients& recipient); - /// Clears existing and sets new recipient list for the message. - - const Recipients& recipients() const; - /// Returns the recipients of the message. - - void setSubject(const std::string& subject); - /// Sets the subject of the message. - /// - /// The subject must not contain any non-ASCII - /// characters. To include non-ASCII characters - /// in the subject, use RFC 2047 word encoding - /// (see encodeWord()). - - const std::string& getSubject() const; - /// Returns the subject of the message. - - void setSender(const std::string& sender); - /// Sets the sender of the message (which - /// ends up in the From header field). - /// - /// The sender must either be a valid email - /// address, or a real name followed by - /// an email address enclosed in < and >. - /// - /// The sender must not contain any non-ASCII - /// characters. To include non-ASCII characters - /// in the sender, use RFC 2047 word encoding - /// (see encodeWord()). - - const std::string& getSender() const; - /// Returns the sender of the message (taken - /// from the From header field). - - void setContent(const std::string& content, ContentTransferEncoding encoding = ENCODING_QUOTED_PRINTABLE); - /// Sets the content of the mail message. - /// - /// If the content transfer encoding is ENCODING_7BIT or - /// ENCODING_8BIT, the content string must be formatted - /// according to the rules of an internet email message. - /// - /// The message will be sent as a single-part - /// message. - /// - /// Note that single CR or LF characters as line delimiters must - /// not be used. Content lines always should be terminated with a - /// proper CRLF sequence. - - const std::string& getContent() const; - /// Returns the content of the mail message. - /// - /// A content will only be returned for single-part - /// messages. The content of multi-part mail messages - /// will be reported through the registered PartHandler. - - void setContentType(const std::string& mediaType); - /// Sets the content type for the message. - - void setContentType(const MediaType& mediaType); - /// Sets the content type for the message. - - const std::string& getContentType() const; - /// Returns the content type for the message. - - void setDate(const Poco::Timestamp& dateTime); - /// Sets the Date header to the given date/time value. - - Poco::Timestamp getDate() const; - /// Returns the value of the Date header. - - bool isMultipart() const; - /// Returns true iff the message is a multipart message. - - void addPart(const std::string& name, - PartSource* pSource, - ContentDisposition disposition, - ContentTransferEncoding encoding); - /// Adds a part/attachment to the mail message. - /// - /// The MailMessage takes ownership of the PartSource and deletes it - /// when it is no longer needed. - /// - /// The MailMessage will be converted to a multipart message - /// if it is not already one. - /// - /// The part name, and the filename specified in the part source - /// must not contain any non-ASCII characters. - /// To include non-ASCII characters in the part name or filename, - /// use RFC 2047 word encoding (see encodeWord()). - - void addContent(PartSource* pSource, - ContentTransferEncoding encoding = ENCODING_QUOTED_PRINTABLE); - /// Adds a part to the mail message by calling - /// addPart("", pSource, CONTENT_INLINE, encoding); - /// - /// The part name, and the filename specified in the part source - /// must not contain any non-ASCII characters. - /// To include non-ASCII characters in the part name or filename, - /// use RFC 2047 word encoding (see encodeWord()). - - void addAttachment(const std::string& name, - PartSource* pSource, - ContentTransferEncoding encoding = ENCODING_BASE64); - /// Adds an attachment to the mail message by calling - /// addPart(name, pSource, CONTENT_ATTACHMENT, encoding); - /// - /// The part name, and the filename specified in the part source - /// must not contain any non-ASCII characters. - /// To include non-ASCII characters in the part name or filename, - /// use RFC 2047 word encoding (see encodeWord()). - - PartSource* createPartStore(const std::string& content, - const std::string& mediaType, - const std::string& filename = ""); - /// Returns either default StringPartSource part store or, - /// if the part store factory was provided during construction, - /// the one created by PartStoreFactory. - /// Returned part store is allocated on the heap; it is caller's - /// responsibility to delete it after use. Typical use is handler - /// passing it back to MailMessage, which takes care of the cleanup. - - const PartVec& parts() const; - /// Returns const reference to the vector containing part stores. - - void read(std::istream& istr, PartHandler& handler); - /// Reads the MailMessage from the given input stream. - /// - /// If the message has multiple parts, the parts - /// are reported to the PartHandler. If the message - /// is not a multi-part message, the content is stored - /// in a string available by calling getContent(). - - void read(std::istream& istr); - /// Reads the MailMessage from the given input stream. - /// - /// The raw message (including all MIME parts) is stored - /// in a string and available by calling getContent(). - - void write(std::ostream& ostr) const; - /// Writes the mail message to the given output stream. - - static std::string encodeWord(const std::string& text, const std::string& charset = "UTF-8"); - /// If the given string contains non-ASCII characters, - /// encodes the given string using RFC 2047 "Q" word encoding. - /// - /// The given text must already be encoded in the character set - /// given in charset (default is UTF-8). - /// - /// Returns the encoded string, or the original string if it - /// consists only of ASCII characters. - - static const std::string HEADER_SUBJECT; - static const std::string HEADER_FROM; - static const std::string HEADER_TO; - static const std::string HEADER_CC; - static const std::string HEADER_BCC; - static const std::string HEADER_DATE; - static const std::string HEADER_CONTENT_TYPE; - static const std::string HEADER_CONTENT_TRANSFER_ENCODING; - static const std::string HEADER_CONTENT_DISPOSITION; - static const std::string HEADER_CONTENT_ID; - static const std::string HEADER_MIME_VERSION; - static const std::string EMPTY_HEADER; - static const std::string TEXT_PLAIN; - static const std::string CTE_7BIT; - static const std::string CTE_8BIT; - static const std::string CTE_QUOTED_PRINTABLE; - static const std::string CTE_BASE64; - -protected: - void makeMultipart(); - void writeHeader(const MessageHeader& header, std::ostream& ostr) const; - void writeMultipart(MessageHeader& header, std::ostream& ostr) const; - void writePart(MultipartWriter& writer, const Part& part) const; - void writeEncoded(std::istream& istr, std::ostream& ostr, ContentTransferEncoding encoding) const; - void setRecipientHeaders(MessageHeader& headers) const; - void readHeader(std::istream& istr); - void readMultipart(std::istream& istr, PartHandler& handler); - void readPart(std::istream& istr, const MessageHeader& header, PartHandler& handler); - void handlePart(std::istream& istr, const MessageHeader& header, PartHandler& handler); - static const std::string& contentTransferEncodingToString(ContentTransferEncoding encoding); - static int lineLength(const std::string& str); - static void appendRecipient(const MailRecipient& recipient, std::string& str); - -private: - MailMessage(const MailMessage&); - MailMessage& operator = (const MailMessage&); - - Recipients _recipients; - PartVec _parts; - std::string _content; - ContentTransferEncoding _encoding; - mutable std::string _boundary; - PartStoreFactory* _pStoreFactory; -}; - - -// -// inlines -// -inline const MailMessage::Recipients& MailMessage::recipients() const -{ - return _recipients; -} - - -inline const std::string& MailMessage::getContent() const -{ - return _content; -} - - -inline const MailMessage::PartVec& MailMessage::parts() const -{ - return _parts; -} - - -} } // namespace Poco::Net - - -#endif // Net_MailMessage_INCLUDED +// +// MailMessage.h +// +// Library: Net +// Package: Mail +// Module: MailMessage +// +// Definition of the MailMessage class. +// +// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. +// and Contributors. +// +// SPDX-License-Identifier: BSL-1.0 +// + + +#ifndef Net_MailMessage_INCLUDED +#define Net_MailMessage_INCLUDED + + +#include "Poco/Net/Net.h" +#include "Poco/Net/MessageHeader.h" +#include "Poco/Net/MailRecipient.h" +#include "Poco/Net/PartStore.h" +#include "Poco/Timestamp.h" +#include <vector> + + +namespace Poco { +namespace Net { + + +class MediaType; +class PartSource; +class PartHandler; +class MultipartWriter; + + +class Net_API MailMessage: public MessageHeader + /// This class represents an e-mail message for + /// use with the SMTPClientSession and POPClientSession + /// classes. + /// + /// MailMessage supports both old-style plain text messages, + /// as well as MIME multipart mail messages with attachments. + /// + /// For multi-part messages, the following content transfer + /// encodings are supported: 7bit, 8bit, quoted-printable + /// and base64. +{ +public: + typedef std::vector<MailRecipient> Recipients; + + enum ContentDisposition + { + CONTENT_INLINE, + CONTENT_ATTACHMENT + }; + + enum ContentTransferEncoding + { + ENCODING_7BIT, + ENCODING_8BIT, + ENCODING_QUOTED_PRINTABLE, + ENCODING_BASE64 + }; + + struct Part + { + std::string name; + PartSource* pSource; + ContentDisposition disposition; + ContentTransferEncoding encoding; + }; + + typedef std::vector<Part> PartVec; + + MailMessage(PartStoreFactory* pStoreFactory = 0); + /// Creates an empty MailMessage. + /// + /// If pStoreFactory is not null, message attachments will be + /// handled by the object created by the factory. Most + /// common reason is to temporarily save attachments to + /// the file system in order to avoid potential memory + /// exhaustion when attachment files are very large. + + virtual ~MailMessage(); + /// Destroys the MailMessage. + + void addRecipient(const MailRecipient& recipient); + /// Adds a recipient for the message. + + void setRecipients(const Recipients& recipient); + /// Clears existing and sets new recipient list for the message. + + const Recipients& recipients() const; + /// Returns the recipients of the message. + + void setSubject(const std::string& subject); + /// Sets the subject of the message. + /// + /// The subject must not contain any non-ASCII + /// characters. To include non-ASCII characters + /// in the subject, use RFC 2047 word encoding + /// (see encodeWord()). + + const std::string& getSubject() const; + /// Returns the subject of the message. + + void setSender(const std::string& sender); + /// Sets the sender of the message (which + /// ends up in the From header field). + /// + /// The sender must either be a valid email + /// address, or a real name followed by + /// an email address enclosed in < and >. + /// + /// The sender must not contain any non-ASCII + /// characters. To include non-ASCII characters + /// in the sender, use RFC 2047 word encoding + /// (see encodeWord()). + + const std::string& getSender() const; + /// Returns the sender of the message (taken + /// from the From header field). + + void setContent(const std::string& content, ContentTransferEncoding encoding = ENCODING_QUOTED_PRINTABLE); + /// Sets the content of the mail message. + /// + /// If the content transfer encoding is ENCODING_7BIT or + /// ENCODING_8BIT, the content string must be formatted + /// according to the rules of an internet email message. + /// + /// The message will be sent as a single-part + /// message. + /// + /// Note that single CR or LF characters as line delimiters must + /// not be used. Content lines always should be terminated with a + /// proper CRLF sequence. + + const std::string& getContent() const; + /// Returns the content of the mail message. + /// + /// A content will only be returned for single-part + /// messages. The content of multi-part mail messages + /// will be reported through the registered PartHandler. + + void setContentType(const std::string& mediaType); + /// Sets the content type for the message. + + void setContentType(const MediaType& mediaType); + /// Sets the content type for the message. + + const std::string& getContentType() const; + /// Returns the content type for the message. + + void setDate(const Poco::Timestamp& dateTime); + /// Sets the Date header to the given date/time value. + + Poco::Timestamp getDate() const; + /// Returns the value of the Date header. + + bool isMultipart() const; + /// Returns true iff the message is a multipart message. + + void addPart(const std::string& name, + PartSource* pSource, + ContentDisposition disposition, + ContentTransferEncoding encoding); + /// Adds a part/attachment to the mail message. + /// + /// The MailMessage takes ownership of the PartSource and deletes it + /// when it is no longer needed. + /// + /// The MailMessage will be converted to a multipart message + /// if it is not already one. + /// + /// The part name, and the filename specified in the part source + /// must not contain any non-ASCII characters. + /// To include non-ASCII characters in the part name or filename, + /// use RFC 2047 word encoding (see encodeWord()). + + void addContent(PartSource* pSource, + ContentTransferEncoding encoding = ENCODING_QUOTED_PRINTABLE); + /// Adds a part to the mail message by calling + /// addPart("", pSource, CONTENT_INLINE, encoding); + /// + /// The part name, and the filename specified in the part source + /// must not contain any non-ASCII characters. + /// To include non-ASCII characters in the part name or filename, + /// use RFC 2047 word encoding (see encodeWord()). + + void addAttachment(const std::string& name, + PartSource* pSource, + ContentTransferEncoding encoding = ENCODING_BASE64); + /// Adds an attachment to the mail message by calling + /// addPart(name, pSource, CONTENT_ATTACHMENT, encoding); + /// + /// The part name, and the filename specified in the part source + /// must not contain any non-ASCII characters. + /// To include non-ASCII characters in the part name or filename, + /// use RFC 2047 word encoding (see encodeWord()). + + PartSource* createPartStore(const std::string& content, + const std::string& mediaType, + const std::string& filename = ""); + /// Returns either default StringPartSource part store or, + /// if the part store factory was provided during construction, + /// the one created by PartStoreFactory. + /// Returned part store is allocated on the heap; it is caller's + /// responsibility to delete it after use. Typical use is handler + /// passing it back to MailMessage, which takes care of the cleanup. + + const PartVec& parts() const; + /// Returns const reference to the vector containing part stores. + + void read(std::istream& istr, PartHandler& handler); + /// Reads the MailMessage from the given input stream. + /// + /// If the message has multiple parts, the parts + /// are reported to the PartHandler. If the message + /// is not a multi-part message, the content is stored + /// in a string available by calling getContent(). + + void read(std::istream& istr); + /// Reads the MailMessage from the given input stream. + /// + /// The raw message (including all MIME parts) is stored + /// in a string and available by calling getContent(). + + void write(std::ostream& ostr) const; + /// Writes the mail message to the given output stream. + + static std::string encodeWord(const std::string& text, const std::string& charset = "UTF-8"); + /// If the given string contains non-ASCII characters, + /// encodes the given string using RFC 2047 "Q" word encoding. + /// + /// The given text must already be encoded in the character set + /// given in charset (default is UTF-8). + /// + /// Returns the encoded string, or the original string if it + /// consists only of ASCII characters. + + static const std::string HEADER_SUBJECT; + static const std::string HEADER_FROM; + static const std::string HEADER_TO; + static const std::string HEADER_CC; + static const std::string HEADER_BCC; + static const std::string HEADER_DATE; + static const std::string HEADER_CONTENT_TYPE; + static const std::string HEADER_CONTENT_TRANSFER_ENCODING; + static const std::string HEADER_CONTENT_DISPOSITION; + static const std::string HEADER_CONTENT_ID; + static const std::string HEADER_MIME_VERSION; + static const std::string EMPTY_HEADER; + static const std::string TEXT_PLAIN; + static const std::string CTE_7BIT; + static const std::string CTE_8BIT; + static const std::string CTE_QUOTED_PRINTABLE; + static const std::string CTE_BASE64; + +protected: + void makeMultipart(); + void writeHeader(const MessageHeader& header, std::ostream& ostr) const; + void writeMultipart(MessageHeader& header, std::ostream& ostr) const; + void writePart(MultipartWriter& writer, const Part& part) const; + void writeEncoded(std::istream& istr, std::ostream& ostr, ContentTransferEncoding encoding) const; + void setRecipientHeaders(MessageHeader& headers) const; + void readHeader(std::istream& istr); + void readMultipart(std::istream& istr, PartHandler& handler); + void readPart(std::istream& istr, const MessageHeader& header, PartHandler& handler); + void handlePart(std::istream& istr, const MessageHeader& header, PartHandler& handler); + static const std::string& contentTransferEncodingToString(ContentTransferEncoding encoding); + static int lineLength(const std::string& str); + static void appendRecipient(const MailRecipient& recipient, std::string& str); + +private: + MailMessage(const MailMessage&); + MailMessage& operator = (const MailMessage&); + + Recipients _recipients; + PartVec _parts; + std::string _content; + ContentTransferEncoding _encoding; + mutable std::string _boundary; + PartStoreFactory* _pStoreFactory; +}; + + +// +// inlines +// +inline const MailMessage::Recipients& MailMessage::recipients() const +{ + return _recipients; +} + + +inline const std::string& MailMessage::getContent() const +{ + return _content; +} + + +inline const MailMessage::PartVec& MailMessage::parts() const +{ + return _parts; +} + + +} } // namespace Poco::Net + + +#endif // Net_MailMessage_INCLUDED diff --git a/contrib/libs/poco/Net/include/Poco/Net/MailRecipient.h b/contrib/libs/poco/Net/include/Poco/Net/MailRecipient.h index da2faedc0c..7b146141af 100644 --- a/contrib/libs/poco/Net/include/Poco/Net/MailRecipient.h +++ b/contrib/libs/poco/Net/include/Poco/Net/MailRecipient.h @@ -1,120 +1,120 @@ -// -// MailRecipient.h -// -// Library: Net -// Package: Mail -// Module: MailRecipient -// -// Definition of the MailRecipient class. -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Net_MailRecipient_INCLUDED -#define Net_MailRecipient_INCLUDED - - -#include "Poco/Net/Net.h" - - -namespace Poco { -namespace Net { - - -class Net_API MailRecipient - /// The recipient of an e-mail message. - /// - /// A recipient has a type (primary recipient, - /// carbon-copy recipient, blind-carbon-copy - /// recipient), an e-mail address and an optional - /// real name. -{ -public: - enum RecipientType - { - PRIMARY_RECIPIENT, - CC_RECIPIENT, - BCC_RECIPIENT - }; - - MailRecipient(); - /// Creates an empty MailRecipient. - - MailRecipient(const MailRecipient& recipient); - /// Creates a MailRecipient by copying another one. - - MailRecipient(RecipientType type, const std::string& address); - /// Creates a MailRecipient of the given type. - - MailRecipient(RecipientType type, const std::string& address, const std::string& realName); - /// Creates a MailRecipient of the given type. - - ~MailRecipient(); - /// Destroys the MailRecipient. - - MailRecipient& operator = (const MailRecipient& recipient); - /// Assigns another recipient. - - void swap(MailRecipient& recipient); - /// Exchanges the content of two recipients. - - RecipientType getType() const; - /// Returns the type of the recipient. - - void setType(RecipientType type); - /// Sets the type of the recipient. - - const std::string& getAddress() const; - /// Returns the address of the recipient. - - void setAddress(const std::string& address); - /// Sets the address of the recipient. - - const std::string& getRealName() const; - /// Returns the real name of the recipient. - - void setRealName(const std::string& realName); - /// Sets the real name of the recipient. - -private: - std::string _address; - std::string _realName; - RecipientType _type; -}; - - -// -// inlines -// -inline MailRecipient::RecipientType MailRecipient::getType() const -{ - return _type; -} - - -inline const std::string& MailRecipient::getAddress() const -{ - return _address; -} - - -inline const std::string& MailRecipient::getRealName() const -{ - return _realName; -} - - -inline void swap(MailRecipient& r1, MailRecipient& r2) -{ - r1.swap(r2); -} - - -} } // namespace Poco::Net - - -#endif // Net_MailRecipient_INCLUDED +// +// MailRecipient.h +// +// Library: Net +// Package: Mail +// Module: MailRecipient +// +// Definition of the MailRecipient class. +// +// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. +// and Contributors. +// +// SPDX-License-Identifier: BSL-1.0 +// + + +#ifndef Net_MailRecipient_INCLUDED +#define Net_MailRecipient_INCLUDED + + +#include "Poco/Net/Net.h" + + +namespace Poco { +namespace Net { + + +class Net_API MailRecipient + /// The recipient of an e-mail message. + /// + /// A recipient has a type (primary recipient, + /// carbon-copy recipient, blind-carbon-copy + /// recipient), an e-mail address and an optional + /// real name. +{ +public: + enum RecipientType + { + PRIMARY_RECIPIENT, + CC_RECIPIENT, + BCC_RECIPIENT + }; + + MailRecipient(); + /// Creates an empty MailRecipient. + + MailRecipient(const MailRecipient& recipient); + /// Creates a MailRecipient by copying another one. + + MailRecipient(RecipientType type, const std::string& address); + /// Creates a MailRecipient of the given type. + + MailRecipient(RecipientType type, const std::string& address, const std::string& realName); + /// Creates a MailRecipient of the given type. + + ~MailRecipient(); + /// Destroys the MailRecipient. + + MailRecipient& operator = (const MailRecipient& recipient); + /// Assigns another recipient. + + void swap(MailRecipient& recipient); + /// Exchanges the content of two recipients. + + RecipientType getType() const; + /// Returns the type of the recipient. + + void setType(RecipientType type); + /// Sets the type of the recipient. + + const std::string& getAddress() const; + /// Returns the address of the recipient. + + void setAddress(const std::string& address); + /// Sets the address of the recipient. + + const std::string& getRealName() const; + /// Returns the real name of the recipient. + + void setRealName(const std::string& realName); + /// Sets the real name of the recipient. + +private: + std::string _address; + std::string _realName; + RecipientType _type; +}; + + +// +// inlines +// +inline MailRecipient::RecipientType MailRecipient::getType() const +{ + return _type; +} + + +inline const std::string& MailRecipient::getAddress() const +{ + return _address; +} + + +inline const std::string& MailRecipient::getRealName() const +{ + return _realName; +} + + +inline void swap(MailRecipient& r1, MailRecipient& r2) +{ + r1.swap(r2); +} + + +} } // namespace Poco::Net + + +#endif // Net_MailRecipient_INCLUDED diff --git a/contrib/libs/poco/Net/include/Poco/Net/MailStream.h b/contrib/libs/poco/Net/include/Poco/Net/MailStream.h index e9e7a7e65d..bc674b014d 100644 --- a/contrib/libs/poco/Net/include/Poco/Net/MailStream.h +++ b/contrib/libs/poco/Net/include/Poco/Net/MailStream.h @@ -1,146 +1,146 @@ -// -// MailStream.h -// -// Library: Net -// Package: Mail -// Module: MailStream -// -// Definition of the MailStream class. -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Net_MailStream_INCLUDED -#define Net_MailStream_INCLUDED - - -#include "Poco/Net/Net.h" -#include "Poco/UnbufferedStreamBuf.h" -#include <istream> -#include <ostream> - - -namespace Poco { -namespace Net { - - -class Net_API MailStreamBuf: public Poco::UnbufferedStreamBuf - /// The sole purpose of this stream buffer is to replace - /// a "\r\n.\r\n" character sequence with a "\r\n..\r\n" sequence for - /// output streams and vice-versa for input streams. - /// - /// This is used when sending mail messages to SMTP servers, or - /// receiving mail messages from POP servers. - /// - /// See RFC 2181 (Simple Mail Transfer Protocol) and RFC 1939 - /// (Post Office Protocol - Version 3) for more information. -{ -public: - MailStreamBuf(std::istream& istr); - /// Creates the MailStreamBuf and connects it - /// to the given input stream. - - MailStreamBuf(std::ostream& ostr); - /// Creates the MailStreamBuf and connects it - /// to the given output stream. - - ~MailStreamBuf(); - /// Destroys the MailStreamBuf. - - void close(); - /// Writes the terminating period, followed by - /// CR-LF. - -protected: - int readFromDevice(); - int writeToDevice(char c); - int readOne(); - -private: - enum State - { - ST_DATA, - ST_CR, - ST_CR_LF, - ST_CR_LF_DOT, - ST_CR_LF_DOT_DOT, - ST_CR_LF_DOT_CR, - ST_CR_LF_DOT_CR_LF - }; - - std::istream* _pIstr; - std::ostream* _pOstr; - std::string _buffer; - State _state; -}; - - -class Net_API MailIOS: public virtual std::ios - /// The base class for MailInputStream and MailOutputStream. - /// - /// This class provides common methods and is also needed to ensure - /// the correct initialization order of the stream buffer and base classes. -{ -public: - MailIOS(std::istream& istr); - /// Creates the MailIOS and connects it - /// to the given input stream. - - MailIOS(std::ostream& ostr); - /// Creates the MailIOS and connects it - /// to the given output stream. - - ~MailIOS(); - /// Destroys the stream. - - void close(); - /// Writes the terminating period, followed by - /// CR-LF. - - MailStreamBuf* rdbuf(); - /// Returns a pointer to the underlying streambuf. - -protected: - MailStreamBuf _buf; -}; - - -class Net_API MailInputStream: public MailIOS, public std::istream - /// This class is used for reading E-Mail messages from a - /// POP3 server. All occurrences of "\r\n..\r\n" are replaced with - /// "\r\n.\r\n". The first occurrence of "\r\n.\r\n" denotes the end - /// of the stream. -{ -public: - MailInputStream(std::istream& istr); - /// Creates the MailInputStream and connects it - /// to the given input stream. - - ~MailInputStream(); - /// Destroys the MailInputStream. -}; - - -class Net_API MailOutputStream: public MailIOS, public std::ostream - /// This class is used for writing E-Mail messages to a - /// SMTP server. All occurrences of "\r\n.\r\n" are replaced with - /// "\r\n..\r\n". -{ -public: - MailOutputStream(std::ostream& ostr); - /// Creates the MailOutputStream and connects it - /// to the given input stream. - - ~MailOutputStream(); - /// Destroys the MailOutputStream. -}; - - -} } // namespace Poco::Net - - -#endif // Net_MailStream_INCLUDED +// +// MailStream.h +// +// Library: Net +// Package: Mail +// Module: MailStream +// +// Definition of the MailStream class. +// +// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. +// and Contributors. +// +// SPDX-License-Identifier: BSL-1.0 +// + + +#ifndef Net_MailStream_INCLUDED +#define Net_MailStream_INCLUDED + + +#include "Poco/Net/Net.h" +#include "Poco/UnbufferedStreamBuf.h" +#include <istream> +#include <ostream> + + +namespace Poco { +namespace Net { + + +class Net_API MailStreamBuf: public Poco::UnbufferedStreamBuf + /// The sole purpose of this stream buffer is to replace + /// a "\r\n.\r\n" character sequence with a "\r\n..\r\n" sequence for + /// output streams and vice-versa for input streams. + /// + /// This is used when sending mail messages to SMTP servers, or + /// receiving mail messages from POP servers. + /// + /// See RFC 2181 (Simple Mail Transfer Protocol) and RFC 1939 + /// (Post Office Protocol - Version 3) for more information. +{ +public: + MailStreamBuf(std::istream& istr); + /// Creates the MailStreamBuf and connects it + /// to the given input stream. + + MailStreamBuf(std::ostream& ostr); + /// Creates the MailStreamBuf and connects it + /// to the given output stream. + + ~MailStreamBuf(); + /// Destroys the MailStreamBuf. + + void close(); + /// Writes the terminating period, followed by + /// CR-LF. + +protected: + int readFromDevice(); + int writeToDevice(char c); + int readOne(); + +private: + enum State + { + ST_DATA, + ST_CR, + ST_CR_LF, + ST_CR_LF_DOT, + ST_CR_LF_DOT_DOT, + ST_CR_LF_DOT_CR, + ST_CR_LF_DOT_CR_LF + }; + + std::istream* _pIstr; + std::ostream* _pOstr; + std::string _buffer; + State _state; +}; + + +class Net_API MailIOS: public virtual std::ios + /// The base class for MailInputStream and MailOutputStream. + /// + /// This class provides common methods and is also needed to ensure + /// the correct initialization order of the stream buffer and base classes. +{ +public: + MailIOS(std::istream& istr); + /// Creates the MailIOS and connects it + /// to the given input stream. + + MailIOS(std::ostream& ostr); + /// Creates the MailIOS and connects it + /// to the given output stream. + + ~MailIOS(); + /// Destroys the stream. + + void close(); + /// Writes the terminating period, followed by + /// CR-LF. + + MailStreamBuf* rdbuf(); + /// Returns a pointer to the underlying streambuf. + +protected: + MailStreamBuf _buf; +}; + + +class Net_API MailInputStream: public MailIOS, public std::istream + /// This class is used for reading E-Mail messages from a + /// POP3 server. All occurrences of "\r\n..\r\n" are replaced with + /// "\r\n.\r\n". The first occurrence of "\r\n.\r\n" denotes the end + /// of the stream. +{ +public: + MailInputStream(std::istream& istr); + /// Creates the MailInputStream and connects it + /// to the given input stream. + + ~MailInputStream(); + /// Destroys the MailInputStream. +}; + + +class Net_API MailOutputStream: public MailIOS, public std::ostream + /// This class is used for writing E-Mail messages to a + /// SMTP server. All occurrences of "\r\n.\r\n" are replaced with + /// "\r\n..\r\n". +{ +public: + MailOutputStream(std::ostream& ostr); + /// Creates the MailOutputStream and connects it + /// to the given input stream. + + ~MailOutputStream(); + /// Destroys the MailOutputStream. +}; + + +} } // namespace Poco::Net + + +#endif // Net_MailStream_INCLUDED diff --git a/contrib/libs/poco/Net/include/Poco/Net/MediaType.h b/contrib/libs/poco/Net/include/Poco/Net/MediaType.h index a99cc03bb8..8440cb6245 100644 --- a/contrib/libs/poco/Net/include/Poco/Net/MediaType.h +++ b/contrib/libs/poco/Net/include/Poco/Net/MediaType.h @@ -1,169 +1,169 @@ -// -// MediaType.h -// -// Library: Net -// Package: Messages -// Module: MediaType -// -// Definition of the MediaType class. -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Net_MediaType_INCLUDED -#define Net_MediaType_INCLUDED - - -#include "Poco/Net/Net.h" -#include "Poco/Net/NameValueCollection.h" - - -namespace Poco { -namespace Net { - - -class Net_API MediaType - /// This class represents a MIME media type, consisting of - /// a top-level type, a subtype and an optional set of - /// parameters. - /// - /// The implementation conforms with RFC 2045 and RFC 2046. -{ -public: - MediaType(const std::string& mediaType); - /// Creates the MediaType from the given string, which - /// must have the format <type>/<subtype>{;<parameter>=<value>}. - - MediaType(const std::string& type, const std::string& subType); - /// Creates the MediaType, using the given type and subtype. - - MediaType(const MediaType& mediaType); - /// Creates a MediaType from another one. - - ~MediaType(); - /// Destroys the MediaType. - - MediaType& operator = (const MediaType& mediaType); - /// Assigns another media type. - - MediaType& operator = (const std::string& mediaType); - /// Assigns another media type. - - void swap(MediaType& mediaType); - /// Swaps the MediaType with another one. - - void setType(const std::string& type); - /// Sets the top-level type. - - const std::string& getType() const; - /// Returns the top-level type. - - void setSubType(const std::string& subType); - /// Sets the sub type. - - const std::string& getSubType() const; - /// Returns the sub type. - - void setParameter(const std::string& name, const std::string& value); - /// Sets the parameter with the given name. - - const std::string& getParameter(const std::string& name) const; - /// Returns the parameter with the given name. - /// - /// Throws a NotFoundException if the parameter does not exist. - - bool hasParameter(const std::string& name) const; - /// Returns true iff a parameter with the given name exists. - - void removeParameter(const std::string& name); - /// Removes the parameter with the given name. - - const NameValueCollection& parameters() const; - /// Returns the parameters. - - std::string toString() const; - /// Returns the string representation of the media type - /// which is <type>/<subtype>{;<parameter>=<value>} - - bool matches(const MediaType& mediaType) const; - /// Returns true iff the type and subtype match - /// the type and subtype of the given media type. - /// Matching is case insensitive. - - bool matches(const std::string& type, const std::string& subType) const; - /// Returns true iff the type and subtype match - /// the given type and subtype. - /// Matching is case insensitive. - - bool matches(const std::string& type) const; - /// Returns true iff the type matches the given type. - /// Matching is case insensitive. - - bool matchesRange(const MediaType& mediaType) const; - /// Returns true if the type and subtype match - /// the type and subtype of the given media type. - /// If the MIME type is a range of types it matches - /// any media type within the range (e.g. "image/*" matches - /// any image media type, "*/*" matches anything). - /// Matching is case insensitive. - - bool matchesRange(const std::string& type, const std::string& subType) const; - /// Returns true if the type and subtype match - /// the given type and subtype. - /// If the MIME type is a range of types it matches - /// any media type within the range (e.g. "image/*" matches - /// any image media type, "*/*" matches anything). - /// Matching is case insensitive. - - bool matchesRange(const std::string& type) const; - /// Returns true if the type matches the given type or - /// the type is a range of types denoted by "*". - /// Matching is case insensitive. - -protected: - void parse(const std::string& mediaType); - -private: - MediaType(); - - std::string _type; - std::string _subType; - NameValueCollection _parameters; -}; - - -// -// inlines -// -inline const std::string& MediaType::getType() const -{ - return _type; -} - - -inline const std::string& MediaType::getSubType() const -{ - return _subType; -} - - -inline const NameValueCollection& MediaType::parameters() const -{ - return _parameters; -} - - -inline void swap(MediaType& m1, MediaType& m2) -{ - m1.swap(m2); -} - - -} } // namespace Poco::Net - - -#endif // Net_MediaType_INCLUDED +// +// MediaType.h +// +// Library: Net +// Package: Messages +// Module: MediaType +// +// Definition of the MediaType class. +// +// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. +// and Contributors. +// +// SPDX-License-Identifier: BSL-1.0 +// + + +#ifndef Net_MediaType_INCLUDED +#define Net_MediaType_INCLUDED + + +#include "Poco/Net/Net.h" +#include "Poco/Net/NameValueCollection.h" + + +namespace Poco { +namespace Net { + + +class Net_API MediaType + /// This class represents a MIME media type, consisting of + /// a top-level type, a subtype and an optional set of + /// parameters. + /// + /// The implementation conforms with RFC 2045 and RFC 2046. +{ +public: + MediaType(const std::string& mediaType); + /// Creates the MediaType from the given string, which + /// must have the format <type>/<subtype>{;<parameter>=<value>}. + + MediaType(const std::string& type, const std::string& subType); + /// Creates the MediaType, using the given type and subtype. + + MediaType(const MediaType& mediaType); + /// Creates a MediaType from another one. + + ~MediaType(); + /// Destroys the MediaType. + + MediaType& operator = (const MediaType& mediaType); + /// Assigns another media type. + + MediaType& operator = (const std::string& mediaType); + /// Assigns another media type. + + void swap(MediaType& mediaType); + /// Swaps the MediaType with another one. + + void setType(const std::string& type); + /// Sets the top-level type. + + const std::string& getType() const; + /// Returns the top-level type. + + void setSubType(const std::string& subType); + /// Sets the sub type. + + const std::string& getSubType() const; + /// Returns the sub type. + + void setParameter(const std::string& name, const std::string& value); + /// Sets the parameter with the given name. + + const std::string& getParameter(const std::string& name) const; + /// Returns the parameter with the given name. + /// + /// Throws a NotFoundException if the parameter does not exist. + + bool hasParameter(const std::string& name) const; + /// Returns true iff a parameter with the given name exists. + + void removeParameter(const std::string& name); + /// Removes the parameter with the given name. + + const NameValueCollection& parameters() const; + /// Returns the parameters. + + std::string toString() const; + /// Returns the string representation of the media type + /// which is <type>/<subtype>{;<parameter>=<value>} + + bool matches(const MediaType& mediaType) const; + /// Returns true iff the type and subtype match + /// the type and subtype of the given media type. + /// Matching is case insensitive. + + bool matches(const std::string& type, const std::string& subType) const; + /// Returns true iff the type and subtype match + /// the given type and subtype. + /// Matching is case insensitive. + + bool matches(const std::string& type) const; + /// Returns true iff the type matches the given type. + /// Matching is case insensitive. + + bool matchesRange(const MediaType& mediaType) const; + /// Returns true if the type and subtype match + /// the type and subtype of the given media type. + /// If the MIME type is a range of types it matches + /// any media type within the range (e.g. "image/*" matches + /// any image media type, "*/*" matches anything). + /// Matching is case insensitive. + + bool matchesRange(const std::string& type, const std::string& subType) const; + /// Returns true if the type and subtype match + /// the given type and subtype. + /// If the MIME type is a range of types it matches + /// any media type within the range (e.g. "image/*" matches + /// any image media type, "*/*" matches anything). + /// Matching is case insensitive. + + bool matchesRange(const std::string& type) const; + /// Returns true if the type matches the given type or + /// the type is a range of types denoted by "*". + /// Matching is case insensitive. + +protected: + void parse(const std::string& mediaType); + +private: + MediaType(); + + std::string _type; + std::string _subType; + NameValueCollection _parameters; +}; + + +// +// inlines +// +inline const std::string& MediaType::getType() const +{ + return _type; +} + + +inline const std::string& MediaType::getSubType() const +{ + return _subType; +} + + +inline const NameValueCollection& MediaType::parameters() const +{ + return _parameters; +} + + +inline void swap(MediaType& m1, MediaType& m2) +{ + m1.swap(m2); +} + + +} } // namespace Poco::Net + + +#endif // Net_MediaType_INCLUDED diff --git a/contrib/libs/poco/Net/include/Poco/Net/MessageHeader.h b/contrib/libs/poco/Net/include/Poco/Net/MessageHeader.h index 72221b7618..9b05ccb279 100644 --- a/contrib/libs/poco/Net/include/Poco/Net/MessageHeader.h +++ b/contrib/libs/poco/Net/include/Poco/Net/MessageHeader.h @@ -1,169 +1,169 @@ -// -// MessageHeader.h -// -// Library: Net -// Package: Messages -// Module: MessageHeader -// -// Definition of the MessageHeader class. -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Net_MessageHeader_INCLUDED -#define Net_MessageHeader_INCLUDED - - -#include "Poco/Net/Net.h" -#include "Poco/Net/NameValueCollection.h" -#include <ostream> -#include <istream> -#include <vector> - - -namespace Poco { -namespace Net { - - -class Net_API MessageHeader: public NameValueCollection - /// A collection of name-value pairs that are used in - /// various internet protocols like HTTP and SMTP. - /// - /// The name is case-insensitive. - /// - /// There can be more than one name-value pair with the - /// same name. - /// - /// MessageHeader supports writing and reading the - /// header data in RFC 2822 format. - /// - /// The maximum number of fields can be restricted - /// by calling setFieldLimit(). This is useful to - /// defend against certain kinds of denial-of-service - /// attacks. The limit is only enforced when parsing - /// header fields from a stream, not when programmatically - /// adding them. The default limit is 100. -{ -public: - MessageHeader(); - /// Creates the MessageHeader. - - MessageHeader(const MessageHeader& messageHeader); - /// Creates the MessageHeader by copying - /// another one. - - virtual ~MessageHeader(); - /// Destroys the MessageHeader. - - MessageHeader& operator = (const MessageHeader& messageHeader); - /// Assigns the content of another MessageHeader. - - virtual void write(std::ostream& ostr) const; - /// Writes the message header to the given output stream. - /// - /// The format is one name-value pair per line, with - /// name and value separated by a colon and lines - /// delimited by a carriage return and a linefeed - /// character. See RFC 2822 for details. - - virtual void read(std::istream& istr); - /// Reads the message header from the given input stream. - /// - /// See write() for the expected format. - /// Also supported is folding of field content, according - /// to section 2.2.3 of RFC 2822. - /// - /// Reading stops at the first empty line (a line only - /// containing \r\n or \n), as well as at the end of - /// the stream. - /// - /// Some basic sanity checking of the input stream is - /// performed. - /// - /// Throws a MessageException if the input stream is - /// malformed. - - int getFieldLimit() const; - /// Returns the maximum number of header fields - /// allowed. - /// - /// See setFieldLimit() for more information. - - void setFieldLimit(int limit); - /// Sets the maximum number of header fields - /// allowed. This limit is used to defend certain - /// kinds of denial-of-service attacks. - /// Specify 0 for unlimited (not recommended). - /// - /// The default limit is 100. - - bool hasToken(const std::string& fieldName, const std::string& token) const; - /// Returns true iff the field with the given fieldName contains - /// the given token. Tokens in a header field are expected to be - /// comma-separated and are case insensitive. - - static void splitElements(const std::string& s, std::vector<std::string>& elements, bool ignoreEmpty = true); - /// Splits the given string into separate elements. Elements are expected - /// to be separated by commas. - /// - /// For example, the string - /// text/plain; q=0.5, text/html, text/x-dvi; q=0.8 - /// is split into the elements - /// text/plain; q=0.5 - /// text/html - /// text/x-dvi; q=0.8 - /// - /// Commas enclosed in double quotes do not split elements. - /// - /// If ignoreEmpty is true, empty elements are not returned. - - static void splitParameters(const std::string& s, std::string& value, NameValueCollection& parameters); - /// Splits the given string into a value and a collection of parameters. - /// Parameters are expected to be separated by semicolons. - /// - /// Enclosing quotes of parameter values are removed. - /// +// +// MessageHeader.h +// +// Library: Net +// Package: Messages +// Module: MessageHeader +// +// Definition of the MessageHeader class. +// +// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. +// and Contributors. +// +// SPDX-License-Identifier: BSL-1.0 +// + + +#ifndef Net_MessageHeader_INCLUDED +#define Net_MessageHeader_INCLUDED + + +#include "Poco/Net/Net.h" +#include "Poco/Net/NameValueCollection.h" +#include <ostream> +#include <istream> +#include <vector> + + +namespace Poco { +namespace Net { + + +class Net_API MessageHeader: public NameValueCollection + /// A collection of name-value pairs that are used in + /// various internet protocols like HTTP and SMTP. + /// + /// The name is case-insensitive. + /// + /// There can be more than one name-value pair with the + /// same name. + /// + /// MessageHeader supports writing and reading the + /// header data in RFC 2822 format. + /// + /// The maximum number of fields can be restricted + /// by calling setFieldLimit(). This is useful to + /// defend against certain kinds of denial-of-service + /// attacks. The limit is only enforced when parsing + /// header fields from a stream, not when programmatically + /// adding them. The default limit is 100. +{ +public: + MessageHeader(); + /// Creates the MessageHeader. + + MessageHeader(const MessageHeader& messageHeader); + /// Creates the MessageHeader by copying + /// another one. + + virtual ~MessageHeader(); + /// Destroys the MessageHeader. + + MessageHeader& operator = (const MessageHeader& messageHeader); + /// Assigns the content of another MessageHeader. + + virtual void write(std::ostream& ostr) const; + /// Writes the message header to the given output stream. + /// + /// The format is one name-value pair per line, with + /// name and value separated by a colon and lines + /// delimited by a carriage return and a linefeed + /// character. See RFC 2822 for details. + + virtual void read(std::istream& istr); + /// Reads the message header from the given input stream. + /// + /// See write() for the expected format. + /// Also supported is folding of field content, according + /// to section 2.2.3 of RFC 2822. + /// + /// Reading stops at the first empty line (a line only + /// containing \r\n or \n), as well as at the end of + /// the stream. + /// + /// Some basic sanity checking of the input stream is + /// performed. + /// + /// Throws a MessageException if the input stream is + /// malformed. + + int getFieldLimit() const; + /// Returns the maximum number of header fields + /// allowed. + /// + /// See setFieldLimit() for more information. + + void setFieldLimit(int limit); + /// Sets the maximum number of header fields + /// allowed. This limit is used to defend certain + /// kinds of denial-of-service attacks. + /// Specify 0 for unlimited (not recommended). + /// + /// The default limit is 100. + + bool hasToken(const std::string& fieldName, const std::string& token) const; + /// Returns true iff the field with the given fieldName contains + /// the given token. Tokens in a header field are expected to be + /// comma-separated and are case insensitive. + + static void splitElements(const std::string& s, std::vector<std::string>& elements, bool ignoreEmpty = true); + /// Splits the given string into separate elements. Elements are expected + /// to be separated by commas. + /// /// For example, the string - /// multipart/mixed; boundary="MIME_boundary_01234567" - /// is split into the value - /// multipart/mixed - /// and the parameter - /// boundary -> MIME_boundary_01234567 - - static void splitParameters(const std::string::const_iterator& begin, const std::string::const_iterator& end, NameValueCollection& parameters); - /// Splits the given string into a collection of parameters. - /// Parameters are expected to be separated by semicolons. - /// - /// Enclosing quotes of parameter values are removed. - - static void quote(const std::string& value, std::string& result, bool allowSpace = false); - /// Checks if the value must be quoted. If so, the value is - /// appended to result, enclosed in double-quotes. - /// Otherwise, the value is appended to result as-is. - - static void decodeRFC2047(const std::string& ins, std::string& outs, const std::string& charset = "UTF-8"); - static std::string decodeWord(const std::string& text, const std::string& charset = "UTF-8"); - /// Decode RFC2047 string. - - -private: - enum Limits - /// Limits for basic sanity checks when reading a header - { - MAX_NAME_LENGTH = 256, + /// text/plain; q=0.5, text/html, text/x-dvi; q=0.8 + /// is split into the elements + /// text/plain; q=0.5 + /// text/html + /// text/x-dvi; q=0.8 + /// + /// Commas enclosed in double quotes do not split elements. + /// + /// If ignoreEmpty is true, empty elements are not returned. + + static void splitParameters(const std::string& s, std::string& value, NameValueCollection& parameters); + /// Splits the given string into a value and a collection of parameters. + /// Parameters are expected to be separated by semicolons. + /// + /// Enclosing quotes of parameter values are removed. + /// + /// For example, the string + /// multipart/mixed; boundary="MIME_boundary_01234567" + /// is split into the value + /// multipart/mixed + /// and the parameter + /// boundary -> MIME_boundary_01234567 + + static void splitParameters(const std::string::const_iterator& begin, const std::string::const_iterator& end, NameValueCollection& parameters); + /// Splits the given string into a collection of parameters. + /// Parameters are expected to be separated by semicolons. + /// + /// Enclosing quotes of parameter values are removed. + + static void quote(const std::string& value, std::string& result, bool allowSpace = false); + /// Checks if the value must be quoted. If so, the value is + /// appended to result, enclosed in double-quotes. + /// Otherwise, the value is appended to result as-is. + + static void decodeRFC2047(const std::string& ins, std::string& outs, const std::string& charset = "UTF-8"); + static std::string decodeWord(const std::string& text, const std::string& charset = "UTF-8"); + /// Decode RFC2047 string. + + +private: + enum Limits + /// Limits for basic sanity checks when reading a header + { + MAX_NAME_LENGTH = 256, MAX_VALUE_LENGTH = 16384, - DFL_FIELD_LIMIT = 100 - }; - - int _fieldLimit; -}; - - -} } // namespace Poco::Net - - -#endif // Net_MessageHeader_INCLUDED + DFL_FIELD_LIMIT = 100 + }; + + int _fieldLimit; +}; + + +} } // namespace Poco::Net + + +#endif // Net_MessageHeader_INCLUDED diff --git a/contrib/libs/poco/Net/include/Poco/Net/MulticastSocket.h b/contrib/libs/poco/Net/include/Poco/Net/MulticastSocket.h index d056156651..6ae465775f 100644 --- a/contrib/libs/poco/Net/include/Poco/Net/MulticastSocket.h +++ b/contrib/libs/poco/Net/include/Poco/Net/MulticastSocket.h @@ -1,135 +1,135 @@ -// -// MulticastSocket.h -// -// Library: Net -// Package: Sockets -// Module: MulticastSocket -// -// Definition of the MulticastSocket class. -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Net_MulticastSocket_INCLUDED -#define Net_MulticastSocket_INCLUDED - - -#include "Poco/Net/Net.h" - - -#ifdef POCO_NET_HAS_INTERFACE - - -#include "Poco/Net/DatagramSocket.h" -#include "Poco/Net/NetworkInterface.h" - - -namespace Poco { -namespace Net { - - -class Net_API MulticastSocket: public DatagramSocket - /// A MulticastSocket is a special DatagramSocket - /// that can be used to send packets to and receive - /// packets from multicast groups. -{ -public: - MulticastSocket(); - /// Creates an unconnected, unbound multicast socket. - /// - /// Before the multicast socket can be used, bind(), - /// bind6() or connect() must be called. - /// - /// Notice: The behavior of this constructor has changed - /// in release 2.0. Previously, the constructor created - /// an unbound IPv4 multicast socket. - - explicit MulticastSocket(SocketAddress::Family family); - /// Creates an unconnected datagram socket. - /// - /// The socket will be created for the - /// given address family. - - MulticastSocket(const SocketAddress& address, bool reuseAddress = false); - /// Creates a datagram socket and binds it - /// to the given address. - /// - /// Depending on the address family, the socket - /// will be either an IPv4 or an IPv6 socket. - - MulticastSocket(const Socket& socket); - /// Creates the DatagramSocket with the SocketImpl - /// from another socket. The SocketImpl must be - /// a DatagramSocketImpl, otherwise an InvalidArgumentException - /// will be thrown. - - ~MulticastSocket(); - /// Destroys the DatagramSocket. - - MulticastSocket& operator = (const Socket& socket); - /// Assignment operator. - /// - /// Releases the socket's SocketImpl and - /// attaches the SocketImpl from the other socket and - /// increments the reference count of the SocketImpl. - - void setInterface(const NetworkInterface& interfc); - /// Sets the interface used for sending multicast packets. - /// - /// To select the default interface, specify an empty - /// interface. - /// - /// This is done by setting the IP_MULTICAST_IF/IPV6_MULTICAST_IF - /// socket option. - - NetworkInterface getInterface() const; - /// Returns the interface used for sending multicast packets. - - void setLoopback(bool flag); - /// Enable or disable loopback for multicast packets. - /// - /// Sets the value of the IP_MULTICAST_LOOP/IPV6_MULTICAST_LOOP - /// socket option. - - bool getLoopback() const; - /// Returns true iff loopback for multicast packets is enabled, - /// false otherwise. - - void setTimeToLive(unsigned value); - /// Specifies the TTL/hop limit for outgoing packets. - /// - /// Sets the value of the IP_MULTICAST_TTL/IPV6_MULTICAST_HOPS - /// socket option. - - unsigned getTimeToLive() const; - /// Returns the TTL/hop limit for outgoing packets. - - void joinGroup(const IPAddress& groupAddress); - /// Joins the specified multicast group at the default interface. - - void joinGroup(const IPAddress& groupAddress, const NetworkInterface& interfc); - /// Joins the specified multicast group at the given interface. - - void leaveGroup(const IPAddress& groupAddress); - /// Leaves the specified multicast group at the default interface. - - void leaveGroup(const IPAddress& groupAddress, const NetworkInterface& interfc); - /// Leaves the specified multicast group at the given interface. - -private: - static NetworkInterface findFirstInterface(const IPAddress& groupAddress); - /// Returns first multicast-eligible network interface. -}; - - -} } // namespace Poco::Net - - -#endif // POCO_NET_HAS_INTERFACE - - -#endif // Net_MulticastSocket_INCLUDED +// +// MulticastSocket.h +// +// Library: Net +// Package: Sockets +// Module: MulticastSocket +// +// Definition of the MulticastSocket class. +// +// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. +// and Contributors. +// +// SPDX-License-Identifier: BSL-1.0 +// + + +#ifndef Net_MulticastSocket_INCLUDED +#define Net_MulticastSocket_INCLUDED + + +#include "Poco/Net/Net.h" + + +#ifdef POCO_NET_HAS_INTERFACE + + +#include "Poco/Net/DatagramSocket.h" +#include "Poco/Net/NetworkInterface.h" + + +namespace Poco { +namespace Net { + + +class Net_API MulticastSocket: public DatagramSocket + /// A MulticastSocket is a special DatagramSocket + /// that can be used to send packets to and receive + /// packets from multicast groups. +{ +public: + MulticastSocket(); + /// Creates an unconnected, unbound multicast socket. + /// + /// Before the multicast socket can be used, bind(), + /// bind6() or connect() must be called. + /// + /// Notice: The behavior of this constructor has changed + /// in release 2.0. Previously, the constructor created + /// an unbound IPv4 multicast socket. + + explicit MulticastSocket(SocketAddress::Family family); + /// Creates an unconnected datagram socket. + /// + /// The socket will be created for the + /// given address family. + + MulticastSocket(const SocketAddress& address, bool reuseAddress = false); + /// Creates a datagram socket and binds it + /// to the given address. + /// + /// Depending on the address family, the socket + /// will be either an IPv4 or an IPv6 socket. + + MulticastSocket(const Socket& socket); + /// Creates the DatagramSocket with the SocketImpl + /// from another socket. The SocketImpl must be + /// a DatagramSocketImpl, otherwise an InvalidArgumentException + /// will be thrown. + + ~MulticastSocket(); + /// Destroys the DatagramSocket. + + MulticastSocket& operator = (const Socket& socket); + /// Assignment operator. + /// + /// Releases the socket's SocketImpl and + /// attaches the SocketImpl from the other socket and + /// increments the reference count of the SocketImpl. + + void setInterface(const NetworkInterface& interfc); + /// Sets the interface used for sending multicast packets. + /// + /// To select the default interface, specify an empty + /// interface. + /// + /// This is done by setting the IP_MULTICAST_IF/IPV6_MULTICAST_IF + /// socket option. + + NetworkInterface getInterface() const; + /// Returns the interface used for sending multicast packets. + + void setLoopback(bool flag); + /// Enable or disable loopback for multicast packets. + /// + /// Sets the value of the IP_MULTICAST_LOOP/IPV6_MULTICAST_LOOP + /// socket option. + + bool getLoopback() const; + /// Returns true iff loopback for multicast packets is enabled, + /// false otherwise. + + void setTimeToLive(unsigned value); + /// Specifies the TTL/hop limit for outgoing packets. + /// + /// Sets the value of the IP_MULTICAST_TTL/IPV6_MULTICAST_HOPS + /// socket option. + + unsigned getTimeToLive() const; + /// Returns the TTL/hop limit for outgoing packets. + + void joinGroup(const IPAddress& groupAddress); + /// Joins the specified multicast group at the default interface. + + void joinGroup(const IPAddress& groupAddress, const NetworkInterface& interfc); + /// Joins the specified multicast group at the given interface. + + void leaveGroup(const IPAddress& groupAddress); + /// Leaves the specified multicast group at the default interface. + + void leaveGroup(const IPAddress& groupAddress, const NetworkInterface& interfc); + /// Leaves the specified multicast group at the given interface. + +private: + static NetworkInterface findFirstInterface(const IPAddress& groupAddress); + /// Returns first multicast-eligible network interface. +}; + + +} } // namespace Poco::Net + + +#endif // POCO_NET_HAS_INTERFACE + + +#endif // Net_MulticastSocket_INCLUDED diff --git a/contrib/libs/poco/Net/include/Poco/Net/MultipartReader.h b/contrib/libs/poco/Net/include/Poco/Net/MultipartReader.h index 648fa427c9..5f972dcba2 100644 --- a/contrib/libs/poco/Net/include/Poco/Net/MultipartReader.h +++ b/contrib/libs/poco/Net/include/Poco/Net/MultipartReader.h @@ -1,160 +1,160 @@ -// -// MultipartReader.h -// -// Library: Net -// Package: Messages -// Module: MultipartReader -// -// Definition of the MultipartReader class. -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Net_MultipartReader_INCLUDED -#define Net_MultipartReader_INCLUDED - - -#include "Poco/Net/Net.h" -#include "Poco/BufferedStreamBuf.h" -#include <istream> - - -namespace Poco { -namespace Net { - - -class MessageHeader; - - -class Net_API MultipartStreamBuf: public Poco::BufferedStreamBuf - /// This is the streambuf class used for reading from a multipart message stream. -{ -public: - MultipartStreamBuf(std::istream& istr, const std::string& boundary); - ~MultipartStreamBuf(); - bool lastPart() const; - -protected: - int readFromDevice(char* buffer, std::streamsize length); - -private: - enum - { - STREAM_BUFFER_SIZE = 1024 - }; - - std::istream& _istr; - std::string _boundary; - bool _lastPart; -}; - - -class Net_API MultipartIOS: public virtual std::ios - /// The base class for MultipartInputStream. -{ -public: - MultipartIOS(std::istream& istr, const std::string& boundary); - ~MultipartIOS(); - MultipartStreamBuf* rdbuf(); - bool lastPart() const; - -protected: - MultipartStreamBuf _buf; -}; - - -class Net_API MultipartInputStream: public MultipartIOS, public std::istream - /// This class is for internal use by MultipartReader only. -{ -public: - MultipartInputStream(std::istream& istr, const std::string& boundary); - ~MultipartInputStream(); -}; - - - -class Net_API MultipartReader - /// This class is used to split a MIME multipart - /// message into its single parts. - /// - /// The format of multipart messages is described - /// in section 5.1 of RFC 2046. - /// - /// To split a multipart message into its parts, - /// do the following: - /// - Create a MultipartReader object, passing it - /// an input stream and optionally a boundary string. - /// - while hasNextPart() returns true, call nextPart() - /// and read the part from stream(). - /// - /// Always ensure that you read all data from the part - /// stream, otherwise the MultipartReader will fail to - /// find the next part. -{ -public: - explicit MultipartReader(std::istream& istr); - /// Creates the MultipartReader and attaches it to the - /// given input stream. - /// - /// The boundary string is determined from the input - /// stream. The message must not contain a preamble - /// preceding the first encapsulation boundary. - - MultipartReader(std::istream& istr, const std::string& boundary); - /// Creates the MultipartReader and attaches it to the - /// given input stream. The given boundary string is - /// used to find message boundaries. - - ~MultipartReader(); - /// Destroys the MultipartReader. - - void nextPart(MessageHeader& messageHeader); - /// Moves to the next part in the message and stores the - /// part's header fields in messageHeader. - /// - /// Throws an MultipartException if there are no more parts - /// available, or if no boundary line can be found in - /// the input stream. - - bool hasNextPart(); - /// Returns true iff more parts are available. - /// - /// Before the first call to nextPart(), returns - /// always true. - - std::istream& stream() const; - /// Returns a reference to the reader's stream that - /// can be used to read the current part. - /// - /// The returned reference will be valid until - /// nextPart() is called or the MultipartReader - /// object is destroyed. - - const std::string& boundary() const; - /// Returns the multipart boundary used by this reader. - -protected: - void findFirstBoundary(); - void guessBoundary(); - void parseHeader(MessageHeader& messageHeader); - bool readLine(std::string& line, std::string::size_type n); - -private: - MultipartReader(); - MultipartReader(const MultipartReader&); - MultipartReader& operator = (const MultipartReader&); - - std::istream& _istr; - std::string _boundary; - MultipartInputStream* _pMPI; -}; - - -} } // namespace Poco::Net - - -#endif // Net_MultipartReader_INCLUDED +// +// MultipartReader.h +// +// Library: Net +// Package: Messages +// Module: MultipartReader +// +// Definition of the MultipartReader class. +// +// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. +// and Contributors. +// +// SPDX-License-Identifier: BSL-1.0 +// + + +#ifndef Net_MultipartReader_INCLUDED +#define Net_MultipartReader_INCLUDED + + +#include "Poco/Net/Net.h" +#include "Poco/BufferedStreamBuf.h" +#include <istream> + + +namespace Poco { +namespace Net { + + +class MessageHeader; + + +class Net_API MultipartStreamBuf: public Poco::BufferedStreamBuf + /// This is the streambuf class used for reading from a multipart message stream. +{ +public: + MultipartStreamBuf(std::istream& istr, const std::string& boundary); + ~MultipartStreamBuf(); + bool lastPart() const; + +protected: + int readFromDevice(char* buffer, std::streamsize length); + +private: + enum + { + STREAM_BUFFER_SIZE = 1024 + }; + + std::istream& _istr; + std::string _boundary; + bool _lastPart; +}; + + +class Net_API MultipartIOS: public virtual std::ios + /// The base class for MultipartInputStream. +{ +public: + MultipartIOS(std::istream& istr, const std::string& boundary); + ~MultipartIOS(); + MultipartStreamBuf* rdbuf(); + bool lastPart() const; + +protected: + MultipartStreamBuf _buf; +}; + + +class Net_API MultipartInputStream: public MultipartIOS, public std::istream + /// This class is for internal use by MultipartReader only. +{ +public: + MultipartInputStream(std::istream& istr, const std::string& boundary); + ~MultipartInputStream(); +}; + + + +class Net_API MultipartReader + /// This class is used to split a MIME multipart + /// message into its single parts. + /// + /// The format of multipart messages is described + /// in section 5.1 of RFC 2046. + /// + /// To split a multipart message into its parts, + /// do the following: + /// - Create a MultipartReader object, passing it + /// an input stream and optionally a boundary string. + /// - while hasNextPart() returns true, call nextPart() + /// and read the part from stream(). + /// + /// Always ensure that you read all data from the part + /// stream, otherwise the MultipartReader will fail to + /// find the next part. +{ +public: + explicit MultipartReader(std::istream& istr); + /// Creates the MultipartReader and attaches it to the + /// given input stream. + /// + /// The boundary string is determined from the input + /// stream. The message must not contain a preamble + /// preceding the first encapsulation boundary. + + MultipartReader(std::istream& istr, const std::string& boundary); + /// Creates the MultipartReader and attaches it to the + /// given input stream. The given boundary string is + /// used to find message boundaries. + + ~MultipartReader(); + /// Destroys the MultipartReader. + + void nextPart(MessageHeader& messageHeader); + /// Moves to the next part in the message and stores the + /// part's header fields in messageHeader. + /// + /// Throws an MultipartException if there are no more parts + /// available, or if no boundary line can be found in + /// the input stream. + + bool hasNextPart(); + /// Returns true iff more parts are available. + /// + /// Before the first call to nextPart(), returns + /// always true. + + std::istream& stream() const; + /// Returns a reference to the reader's stream that + /// can be used to read the current part. + /// + /// The returned reference will be valid until + /// nextPart() is called or the MultipartReader + /// object is destroyed. + + const std::string& boundary() const; + /// Returns the multipart boundary used by this reader. + +protected: + void findFirstBoundary(); + void guessBoundary(); + void parseHeader(MessageHeader& messageHeader); + bool readLine(std::string& line, std::string::size_type n); + +private: + MultipartReader(); + MultipartReader(const MultipartReader&); + MultipartReader& operator = (const MultipartReader&); + + std::istream& _istr; + std::string _boundary; + MultipartInputStream* _pMPI; +}; + + +} } // namespace Poco::Net + + +#endif // Net_MultipartReader_INCLUDED diff --git a/contrib/libs/poco/Net/include/Poco/Net/MultipartWriter.h b/contrib/libs/poco/Net/include/Poco/Net/MultipartWriter.h index 81e4cf86fd..97b3fd2356 100644 --- a/contrib/libs/poco/Net/include/Poco/Net/MultipartWriter.h +++ b/contrib/libs/poco/Net/include/Poco/Net/MultipartWriter.h @@ -1,109 +1,109 @@ -// -// MultipartWriter.h -// -// Library: Net -// Package: Messages -// Module: MultipartWriter -// -// Definition of the MultipartWriter class. -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Net_MultipartWriter_INCLUDED -#define Net_MultipartWriter_INCLUDED - - -#include "Poco/Net/Net.h" -#include <ostream> - - -namespace Poco { -namespace Net { - - -class MessageHeader; - - -class Net_API MultipartWriter - /// This class is used to write MIME multipart - /// messages to an output stream. - /// - /// The format of multipart messages is described - /// in section 5.1 of RFC 2046. - /// - /// To create a multipart message, first create - /// a MultipartWriter object. - /// Then, for each part, call nextPart() and - /// write the content to the output stream. - /// Repeat for all parts. - /// After the last part has been written, - /// call close() to finish the multipart message. -{ -public: - explicit MultipartWriter(std::ostream& ostr); - /// Creates the MultipartWriter, using the - /// given output stream. - /// - /// Creates a random boundary string. - - MultipartWriter(std::ostream& ostr, const std::string& boundary); - /// Creates the MultipartWriter, using the - /// given output stream and boundary string. - - ~MultipartWriter(); - /// Destroys the MultipartWriter. - - void nextPart(const MessageHeader& header); - /// Opens a new message part and writes - /// the message boundary string, followed - /// by the message header to the stream. - - void close(); - /// Closes the multipart message and writes - /// the terminating boundary string. - /// - /// Does not close the underlying stream. - - std::ostream& stream(); - /// Returns the writer's stream. - - const std::string& boundary() const; - /// Returns the multipart boundary used by this writer. - - static std::string createBoundary(); - /// Creates a random boundary string. - /// - /// The string always has the form - /// MIME_boundary_XXXXXXXXXXXX, where - /// XXXXXXXXXXXX is a random hexadecimal - /// number. - -private: - MultipartWriter(); - MultipartWriter(const MultipartWriter&); - MultipartWriter& operator = (const MultipartWriter&); - - std::ostream& _ostr; - std::string _boundary; - bool _firstPart; -}; - - -// -// inlines -// -inline std::ostream& MultipartWriter::stream() -{ - return _ostr; -} - - -} } // namespace Poco::Net - - -#endif // Net_MultipartWriter_INCLUDED +// +// MultipartWriter.h +// +// Library: Net +// Package: Messages +// Module: MultipartWriter +// +// Definition of the MultipartWriter class. +// +// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. +// and Contributors. +// +// SPDX-License-Identifier: BSL-1.0 +// + + +#ifndef Net_MultipartWriter_INCLUDED +#define Net_MultipartWriter_INCLUDED + + +#include "Poco/Net/Net.h" +#include <ostream> + + +namespace Poco { +namespace Net { + + +class MessageHeader; + + +class Net_API MultipartWriter + /// This class is used to write MIME multipart + /// messages to an output stream. + /// + /// The format of multipart messages is described + /// in section 5.1 of RFC 2046. + /// + /// To create a multipart message, first create + /// a MultipartWriter object. + /// Then, for each part, call nextPart() and + /// write the content to the output stream. + /// Repeat for all parts. + /// After the last part has been written, + /// call close() to finish the multipart message. +{ +public: + explicit MultipartWriter(std::ostream& ostr); + /// Creates the MultipartWriter, using the + /// given output stream. + /// + /// Creates a random boundary string. + + MultipartWriter(std::ostream& ostr, const std::string& boundary); + /// Creates the MultipartWriter, using the + /// given output stream and boundary string. + + ~MultipartWriter(); + /// Destroys the MultipartWriter. + + void nextPart(const MessageHeader& header); + /// Opens a new message part and writes + /// the message boundary string, followed + /// by the message header to the stream. + + void close(); + /// Closes the multipart message and writes + /// the terminating boundary string. + /// + /// Does not close the underlying stream. + + std::ostream& stream(); + /// Returns the writer's stream. + + const std::string& boundary() const; + /// Returns the multipart boundary used by this writer. + + static std::string createBoundary(); + /// Creates a random boundary string. + /// + /// The string always has the form + /// MIME_boundary_XXXXXXXXXXXX, where + /// XXXXXXXXXXXX is a random hexadecimal + /// number. + +private: + MultipartWriter(); + MultipartWriter(const MultipartWriter&); + MultipartWriter& operator = (const MultipartWriter&); + + std::ostream& _ostr; + std::string _boundary; + bool _firstPart; +}; + + +// +// inlines +// +inline std::ostream& MultipartWriter::stream() +{ + return _ostr; +} + + +} } // namespace Poco::Net + + +#endif // Net_MultipartWriter_INCLUDED diff --git a/contrib/libs/poco/Net/include/Poco/Net/NTPClient.h b/contrib/libs/poco/Net/include/Poco/Net/NTPClient.h index 741ecd7cc2..044a486a73 100644 --- a/contrib/libs/poco/Net/include/Poco/Net/NTPClient.h +++ b/contrib/libs/poco/Net/include/Poco/Net/NTPClient.h @@ -1,64 +1,64 @@ -// -// NTPClient.h -// -// Library: Net -// Package: NTP -// Module: NTPClient -// -// Definition of the NTPClient class. -// -// Copyright (c) 2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Net_NTPClient_INCLUDED -#define Net_NTPClient_INCLUDED - - -#include "Poco/Net/Net.h" -#include "Poco/Net/NTPEventArgs.h" -#include "Poco/Net/SocketAddress.h" -#include "Poco/BasicEvent.h" - - -namespace Poco { -namespace Net { - - -class Net_API NTPClient - /// This class provides NTP (Network Time Protocol) client functionality. -{ -public: - mutable Poco::BasicEvent<NTPEventArgs> response; - - explicit NTPClient(SocketAddress::Family family, int timeout = 3000000); - /// Creates an NTP client. - - ~NTPClient(); - /// Destroys the NTP client. - - int request(SocketAddress& address) const; - /// Request the time from the server at address. - /// Notifications are posted for events. - /// - /// Returns the number of valid replies. - - int request(const std::string& address) const; - /// Request the time from the server at address. - /// Notifications are posted for events. - /// - /// Returns the number of valid replies. - -private: - mutable SocketAddress::Family _family; - int _timeout; -}; - - -} } // namespace Poco::Net - - -#endif // Net_NTPClient_INCLUDED +// +// NTPClient.h +// +// Library: Net +// Package: NTP +// Module: NTPClient +// +// Definition of the NTPClient class. +// +// Copyright (c) 2006, Applied Informatics Software Engineering GmbH. +// and Contributors. +// +// SPDX-License-Identifier: BSL-1.0 +// + + +#ifndef Net_NTPClient_INCLUDED +#define Net_NTPClient_INCLUDED + + +#include "Poco/Net/Net.h" +#include "Poco/Net/NTPEventArgs.h" +#include "Poco/Net/SocketAddress.h" +#include "Poco/BasicEvent.h" + + +namespace Poco { +namespace Net { + + +class Net_API NTPClient + /// This class provides NTP (Network Time Protocol) client functionality. +{ +public: + mutable Poco::BasicEvent<NTPEventArgs> response; + + explicit NTPClient(SocketAddress::Family family, int timeout = 3000000); + /// Creates an NTP client. + + ~NTPClient(); + /// Destroys the NTP client. + + int request(SocketAddress& address) const; + /// Request the time from the server at address. + /// Notifications are posted for events. + /// + /// Returns the number of valid replies. + + int request(const std::string& address) const; + /// Request the time from the server at address. + /// Notifications are posted for events. + /// + /// Returns the number of valid replies. + +private: + mutable SocketAddress::Family _family; + int _timeout; +}; + + +} } // namespace Poco::Net + + +#endif // Net_NTPClient_INCLUDED diff --git a/contrib/libs/poco/Net/include/Poco/Net/NTPEventArgs.h b/contrib/libs/poco/Net/include/Poco/Net/NTPEventArgs.h index 84d638293a..89c12751c3 100644 --- a/contrib/libs/poco/Net/include/Poco/Net/NTPEventArgs.h +++ b/contrib/libs/poco/Net/include/Poco/Net/NTPEventArgs.h @@ -1,84 +1,84 @@ -// -// NTPEventArgs.h -// -// Library: Net -// Package: NTP -// Module: NTPEventArgs -// -// Definition of NTPEventArgs. -// -// Copyright (c) 2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Net_NTPEventArgs_INCLUDED -#define Net_NTPEventArgs_INCLUDED - - -#include "Poco/Net/Net.h" -#include "Poco/Net/SocketAddress.h" -#include "Poco/Net/NTPPacket.h" - - -namespace Poco { -namespace Net { - - -class Net_API NTPEventArgs - /// The purpose of the NTPEventArgs class is to be used as template parameter - /// to instantiate event members in NTPClient class. - /// When clients register for an event notification, the reference to the class is - /// passed to the handler function to provide information about the event. -{ -public: - NTPEventArgs(const SocketAddress& address); - /// Creates NTPEventArgs. - - virtual ~NTPEventArgs(); - /// Destroys NTPEventArgs. - - std::string hostName() const; - /// Tries to resolve the target IP address into host name. - /// If unsuccessful, all exceptions are silently ignored and - /// the IP address is returned. - - std::string hostAddress() const; - /// Returns the target IP address. - - const NTPPacket &packet(); - /// Returns the NTP packet. - -private: - NTPEventArgs(); - - void setPacket(NTPPacket &packet); - - SocketAddress _address; - NTPPacket _packet; - - friend class NTPClient; -}; - - -// -// inlines -// -inline const NTPPacket &NTPEventArgs::packet() -{ - return _packet; -} - - -inline void NTPEventArgs::setPacket(NTPPacket &packet) -{ - _packet = packet; -} - - -} } // namespace Poco::Net - - -#endif +// +// NTPEventArgs.h +// +// Library: Net +// Package: NTP +// Module: NTPEventArgs +// +// Definition of NTPEventArgs. +// +// Copyright (c) 2006, Applied Informatics Software Engineering GmbH. +// and Contributors. +// +// SPDX-License-Identifier: BSL-1.0 +// + + +#ifndef Net_NTPEventArgs_INCLUDED +#define Net_NTPEventArgs_INCLUDED + + +#include "Poco/Net/Net.h" +#include "Poco/Net/SocketAddress.h" +#include "Poco/Net/NTPPacket.h" + + +namespace Poco { +namespace Net { + + +class Net_API NTPEventArgs + /// The purpose of the NTPEventArgs class is to be used as template parameter + /// to instantiate event members in NTPClient class. + /// When clients register for an event notification, the reference to the class is + /// passed to the handler function to provide information about the event. +{ +public: + NTPEventArgs(const SocketAddress& address); + /// Creates NTPEventArgs. + + virtual ~NTPEventArgs(); + /// Destroys NTPEventArgs. + + std::string hostName() const; + /// Tries to resolve the target IP address into host name. + /// If unsuccessful, all exceptions are silently ignored and + /// the IP address is returned. + + std::string hostAddress() const; + /// Returns the target IP address. + + const NTPPacket &packet(); + /// Returns the NTP packet. + +private: + NTPEventArgs(); + + void setPacket(NTPPacket &packet); + + SocketAddress _address; + NTPPacket _packet; + + friend class NTPClient; +}; + + +// +// inlines +// +inline const NTPPacket &NTPEventArgs::packet() +{ + return _packet; +} + + +inline void NTPEventArgs::setPacket(NTPPacket &packet) +{ + _packet = packet; +} + + +} } // namespace Poco::Net + + +#endif diff --git a/contrib/libs/poco/Net/include/Poco/Net/NTPPacket.h b/contrib/libs/poco/Net/include/Poco/Net/NTPPacket.h index de3298e917..4dae347888 100644 --- a/contrib/libs/poco/Net/include/Poco/Net/NTPPacket.h +++ b/contrib/libs/poco/Net/include/Poco/Net/NTPPacket.h @@ -1,207 +1,207 @@ -// -// NTPPacket.h -// -// Library: Net -// Package: NTP -// Module: NTPPacket -// -// Definition of the NTPPacket class. -// -// Copyright (c) 2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Net_NTPPacket_INCLUDED -#define Net_NTPPacket_INCLUDED - - -#include "Poco/Foundation.h" -#include "Poco/Net/Net.h" -#include "Poco/Timestamp.h" - -namespace Poco { -namespace Net { - - -class Net_API NTPPacket - /// This class is the NTP packet abstraction. -{ -public: - NTPPacket(); - /// Creates an NTPPacket. - - NTPPacket(Poco::UInt8 *packet); - /// Creates an NTPPacket. - /// - /// Assumed to have at least 48 bytes. - - ~NTPPacket(); - /// Destroys the NTPPacket. - - void packet(Poco::UInt8 *packet) const; - /// Returns the NTP packet. - /// - /// Assumed to have at least 48 bytes. - - void setPacket(Poco::UInt8 *packet); - /// Returns the NTP packet. - /// - /// Assumed to have exactly 48 bytes. - - Poco::Int8 leapIndicator() const; - /// Returns the leap indicator. - - Poco::Int8 version() const; - /// Returns the version. - - Poco::Int8 mode() const; - /// Returns the mode. - - Poco::Int8 stratum() const; - /// Returns the stratum. - - Poco::Int8 pool() const; - /// Returns the pool. - - Poco::Int8 precision() const; - /// Returns the precision - - Poco::Int32 rootDelay() const; - /// Returns the root delay - - Poco::Int32 rootDispersion() const; - /// Returns the root dispersion - - Poco::Int32 referenceId() const; - /// Returns the reference id - - Poco::Int64 referenceTimestamp() const; - /// Returns the reference timestamp - - Poco::Int64 originateTimestamp() const; - /// Returns the originate timestamp - - Poco::Int64 receiveTimestamp() const; - /// Returns the receive timestamp - - Poco::Int64 transmitTimestamp() const; - /// Returns the transmit timestamp - - Poco::Timestamp referenceTime() const; - /// Returns the reference time - - Poco::Timestamp originateTime() const; - /// Returns the originate time - - Poco::Timestamp receiveTime() const; - /// Returns the receive time - - Poco::Timestamp transmitTime() const; - /// Returns the transmit time -private: - Poco::Timestamp convertTime(Poco::Int64 tm) const; - - Poco::Int8 _leapIndicator; - Poco::Int8 _version; - Poco::Int8 _mode; - Poco::Int8 _stratum; - Poco::Int8 _pool; - Poco::Int8 _precision; - Poco::Int32 _rootDelay; - Poco::Int32 _rootDispersion; - Poco::Int32 _referenceId; - Poco::Int64 _referenceTimestamp; - Poco::Int64 _originateTimestamp; - Poco::Int64 _receiveTimestamp; - Poco::Int64 _transmitTimestamp; -}; - - -// -// inlines -// -inline Poco::Int8 NTPPacket::leapIndicator() const -{ - return _leapIndicator; -} - - -inline Poco::Int8 NTPPacket::version() const -{ - return _version; -} - - -inline Poco::Int8 NTPPacket::mode() const -{ - return _mode; -} - - -inline Poco::Int8 NTPPacket::stratum() const -{ - return _stratum; -} - - -inline Poco::Int8 NTPPacket::pool() const -{ - return _pool; -} - - -inline Poco::Int8 NTPPacket::precision() const -{ - return _precision; -} - - -inline Poco::Int32 NTPPacket::rootDelay() const -{ - return _rootDelay; -} - - -inline Poco::Int32 NTPPacket::rootDispersion() const -{ - return _rootDispersion; -} - - -inline Poco::Int32 NTPPacket::referenceId() const -{ - return _referenceId; -} - - -inline Poco::Int64 NTPPacket::referenceTimestamp() const -{ - return _referenceTimestamp; -} - - -inline Poco::Int64 NTPPacket::originateTimestamp() const -{ - return _originateTimestamp; -} - - -inline Poco::Int64 NTPPacket::receiveTimestamp() const -{ - return _receiveTimestamp; -} - - -inline Poco::Int64 NTPPacket::transmitTimestamp() const -{ - return _transmitTimestamp; -} - - -} } // namespace Poco::Net - - -#endif // Net_NTPPacket_INCLUDED +// +// NTPPacket.h +// +// Library: Net +// Package: NTP +// Module: NTPPacket +// +// Definition of the NTPPacket class. +// +// Copyright (c) 2006, Applied Informatics Software Engineering GmbH. +// and Contributors. +// +// SPDX-License-Identifier: BSL-1.0 +// + + +#ifndef Net_NTPPacket_INCLUDED +#define Net_NTPPacket_INCLUDED + + +#include "Poco/Foundation.h" +#include "Poco/Net/Net.h" +#include "Poco/Timestamp.h" + +namespace Poco { +namespace Net { + + +class Net_API NTPPacket + /// This class is the NTP packet abstraction. +{ +public: + NTPPacket(); + /// Creates an NTPPacket. + + NTPPacket(Poco::UInt8 *packet); + /// Creates an NTPPacket. + /// + /// Assumed to have at least 48 bytes. + + ~NTPPacket(); + /// Destroys the NTPPacket. + + void packet(Poco::UInt8 *packet) const; + /// Returns the NTP packet. + /// + /// Assumed to have at least 48 bytes. + + void setPacket(Poco::UInt8 *packet); + /// Returns the NTP packet. + /// + /// Assumed to have exactly 48 bytes. + + Poco::Int8 leapIndicator() const; + /// Returns the leap indicator. + + Poco::Int8 version() const; + /// Returns the version. + + Poco::Int8 mode() const; + /// Returns the mode. + + Poco::Int8 stratum() const; + /// Returns the stratum. + + Poco::Int8 pool() const; + /// Returns the pool. + + Poco::Int8 precision() const; + /// Returns the precision + + Poco::Int32 rootDelay() const; + /// Returns the root delay + + Poco::Int32 rootDispersion() const; + /// Returns the root dispersion + + Poco::Int32 referenceId() const; + /// Returns the reference id + + Poco::Int64 referenceTimestamp() const; + /// Returns the reference timestamp + + Poco::Int64 originateTimestamp() const; + /// Returns the originate timestamp + + Poco::Int64 receiveTimestamp() const; + /// Returns the receive timestamp + + Poco::Int64 transmitTimestamp() const; + /// Returns the transmit timestamp + + Poco::Timestamp referenceTime() const; + /// Returns the reference time + + Poco::Timestamp originateTime() const; + /// Returns the originate time + + Poco::Timestamp receiveTime() const; + /// Returns the receive time + + Poco::Timestamp transmitTime() const; + /// Returns the transmit time +private: + Poco::Timestamp convertTime(Poco::Int64 tm) const; + + Poco::Int8 _leapIndicator; + Poco::Int8 _version; + Poco::Int8 _mode; + Poco::Int8 _stratum; + Poco::Int8 _pool; + Poco::Int8 _precision; + Poco::Int32 _rootDelay; + Poco::Int32 _rootDispersion; + Poco::Int32 _referenceId; + Poco::Int64 _referenceTimestamp; + Poco::Int64 _originateTimestamp; + Poco::Int64 _receiveTimestamp; + Poco::Int64 _transmitTimestamp; +}; + + +// +// inlines +// +inline Poco::Int8 NTPPacket::leapIndicator() const +{ + return _leapIndicator; +} + + +inline Poco::Int8 NTPPacket::version() const +{ + return _version; +} + + +inline Poco::Int8 NTPPacket::mode() const +{ + return _mode; +} + + +inline Poco::Int8 NTPPacket::stratum() const +{ + return _stratum; +} + + +inline Poco::Int8 NTPPacket::pool() const +{ + return _pool; +} + + +inline Poco::Int8 NTPPacket::precision() const +{ + return _precision; +} + + +inline Poco::Int32 NTPPacket::rootDelay() const +{ + return _rootDelay; +} + + +inline Poco::Int32 NTPPacket::rootDispersion() const +{ + return _rootDispersion; +} + + +inline Poco::Int32 NTPPacket::referenceId() const +{ + return _referenceId; +} + + +inline Poco::Int64 NTPPacket::referenceTimestamp() const +{ + return _referenceTimestamp; +} + + +inline Poco::Int64 NTPPacket::originateTimestamp() const +{ + return _originateTimestamp; +} + + +inline Poco::Int64 NTPPacket::receiveTimestamp() const +{ + return _receiveTimestamp; +} + + +inline Poco::Int64 NTPPacket::transmitTimestamp() const +{ + return _transmitTimestamp; +} + + +} } // namespace Poco::Net + + +#endif // Net_NTPPacket_INCLUDED diff --git a/contrib/libs/poco/Net/include/Poco/Net/NameValueCollection.h b/contrib/libs/poco/Net/include/Poco/Net/NameValueCollection.h index 9ffa9e9a30..e2edce3408 100644 --- a/contrib/libs/poco/Net/include/Poco/Net/NameValueCollection.h +++ b/contrib/libs/poco/Net/include/Poco/Net/NameValueCollection.h @@ -1,126 +1,126 @@ -// -// NameValueCollection.h -// -// Library: Net -// Package: Messages -// Module: NameValueCollection -// -// Definition of the NameValueCollection class. -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Net_NameValueCollection_INCLUDED -#define Net_NameValueCollection_INCLUDED - - -#include "Poco/Net/Net.h" -#include "Poco/String.h" -#include "Poco/ListMap.h" -#include <cstddef> - - -namespace Poco { -namespace Net { - - -class Net_API NameValueCollection - /// A collection of name-value pairs that are used in - /// various internet protocols like HTTP and SMTP. - /// - /// The name is case-insensitive. - /// - /// There can be more than one name-value pair with the - /// same name. -{ -public: - typedef Poco::ListMap<std::string, std::string> HeaderMap; - typedef HeaderMap::Iterator Iterator; - typedef HeaderMap::ConstIterator ConstIterator; - - NameValueCollection(); - /// Creates an empty NameValueCollection. - - NameValueCollection(const NameValueCollection& nvc); - /// Creates a NameValueCollection by copying another one. - - virtual ~NameValueCollection(); - /// Destroys the NameValueCollection. - - NameValueCollection& operator = (const NameValueCollection& nvc); - /// Assigns the name-value pairs of another NameValueCollection to this one. - - void swap(NameValueCollection& nvc); - /// Swaps the NameValueCollection with another one. - - const std::string& operator [] (const std::string& name) const; - /// Returns the value of the (first) name-value pair with the given name. - /// - /// Throws a NotFoundException if the name-value pair does not exist. - - void set(const std::string& name, const std::string& value); - /// Sets the value of the (first) name-value pair with the given name. - - void add(const std::string& name, const std::string& value); - /// Adds a new name-value pair with the given name and value. - - const std::string& get(const std::string& name) const; - /// Returns the value of the first name-value pair with the given name. - /// - /// Throws a NotFoundException if the name-value pair does not exist. - - const std::string& get(const std::string& name, const std::string& defaultValue) const; - /// Returns the value of the first name-value pair with the given name. - /// If no value with the given name has been found, the defaultValue is returned. - - bool has(const std::string& name) const; - /// Returns true if there is at least one name-value pair - /// with the given name. - - ConstIterator find(const std::string& name) const; - /// Returns an iterator pointing to the first name-value pair - /// with the given name. - - ConstIterator begin() const; - /// Returns an iterator pointing to the begin of - /// the name-value pair collection. - - ConstIterator end() const; - /// Returns an iterator pointing to the end of - /// the name-value pair collection. - - bool empty() const; - /// Returns true iff the header does not have any content. - - std::size_t size() const; - /// Returns the number of name-value pairs in the - /// collection. - - void erase(const std::string& name); - /// Removes all name-value pairs with the given name. - - void clear(); - /// Removes all name-value pairs and their values. - -private: - HeaderMap _map; -}; - - -// -// inlines -// -inline void swap(NameValueCollection& nvc1, NameValueCollection& nvc2) -{ - nvc1.swap(nvc2); -} - - -} } // namespace Poco::Net - - -#endif // Net_NameValueCollection_INCLUDED +// +// NameValueCollection.h +// +// Library: Net +// Package: Messages +// Module: NameValueCollection +// +// Definition of the NameValueCollection class. +// +// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. +// and Contributors. +// +// SPDX-License-Identifier: BSL-1.0 +// + + +#ifndef Net_NameValueCollection_INCLUDED +#define Net_NameValueCollection_INCLUDED + + +#include "Poco/Net/Net.h" +#include "Poco/String.h" +#include "Poco/ListMap.h" +#include <cstddef> + + +namespace Poco { +namespace Net { + + +class Net_API NameValueCollection + /// A collection of name-value pairs that are used in + /// various internet protocols like HTTP and SMTP. + /// + /// The name is case-insensitive. + /// + /// There can be more than one name-value pair with the + /// same name. +{ +public: + typedef Poco::ListMap<std::string, std::string> HeaderMap; + typedef HeaderMap::Iterator Iterator; + typedef HeaderMap::ConstIterator ConstIterator; + + NameValueCollection(); + /// Creates an empty NameValueCollection. + + NameValueCollection(const NameValueCollection& nvc); + /// Creates a NameValueCollection by copying another one. + + virtual ~NameValueCollection(); + /// Destroys the NameValueCollection. + + NameValueCollection& operator = (const NameValueCollection& nvc); + /// Assigns the name-value pairs of another NameValueCollection to this one. + + void swap(NameValueCollection& nvc); + /// Swaps the NameValueCollection with another one. + + const std::string& operator [] (const std::string& name) const; + /// Returns the value of the (first) name-value pair with the given name. + /// + /// Throws a NotFoundException if the name-value pair does not exist. + + void set(const std::string& name, const std::string& value); + /// Sets the value of the (first) name-value pair with the given name. + + void add(const std::string& name, const std::string& value); + /// Adds a new name-value pair with the given name and value. + + const std::string& get(const std::string& name) const; + /// Returns the value of the first name-value pair with the given name. + /// + /// Throws a NotFoundException if the name-value pair does not exist. + + const std::string& get(const std::string& name, const std::string& defaultValue) const; + /// Returns the value of the first name-value pair with the given name. + /// If no value with the given name has been found, the defaultValue is returned. + + bool has(const std::string& name) const; + /// Returns true if there is at least one name-value pair + /// with the given name. + + ConstIterator find(const std::string& name) const; + /// Returns an iterator pointing to the first name-value pair + /// with the given name. + + ConstIterator begin() const; + /// Returns an iterator pointing to the begin of + /// the name-value pair collection. + + ConstIterator end() const; + /// Returns an iterator pointing to the end of + /// the name-value pair collection. + + bool empty() const; + /// Returns true iff the header does not have any content. + + std::size_t size() const; + /// Returns the number of name-value pairs in the + /// collection. + + void erase(const std::string& name); + /// Removes all name-value pairs with the given name. + + void clear(); + /// Removes all name-value pairs and their values. + +private: + HeaderMap _map; +}; + + +// +// inlines +// +inline void swap(NameValueCollection& nvc1, NameValueCollection& nvc2) +{ + nvc1.swap(nvc2); +} + + +} } // namespace Poco::Net + + +#endif // Net_NameValueCollection_INCLUDED diff --git a/contrib/libs/poco/Net/include/Poco/Net/Net.h b/contrib/libs/poco/Net/include/Poco/Net/Net.h index d93d024e40..4ec0203515 100644 --- a/contrib/libs/poco/Net/include/Poco/Net/Net.h +++ b/contrib/libs/poco/Net/include/Poco/Net/Net.h @@ -1,122 +1,122 @@ -// -// Net.h -// -// Library: Net -// Package: NetCore -// Module: Net -// -// Basic definitions for the Poco Net library. -// This file must be the first file included by every other Net -// header file. -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Net_Net_INCLUDED -#define Net_Net_INCLUDED - - -#include "Poco/Foundation.h" - - -// -// The following block is the standard way of creating macros which make exporting -// from a DLL simpler. All files within this DLL are compiled with the Net_EXPORTS -// symbol defined on the command line. this symbol should not be defined on any project -// that uses this DLL. This way any other project whose source files include this file see -// Net_API functions as being imported from a DLL, wheras this DLL sees symbols -// defined with this macro as being exported. -// -#if defined(_WIN32) && defined(POCO_DLL) - #if defined(Net_EXPORTS) - #define Net_API __declspec(dllexport) - #else - #define Net_API __declspec(dllimport) - #endif -#endif - - -#if !defined(Net_API) - #if !defined(POCO_NO_GCC_API_ATTRIBUTE) && defined (__GNUC__) && (__GNUC__ >= 4) - #define Net_API __attribute__ ((visibility ("default"))) - #else - #define Net_API - #endif -#endif - - -// -// Automatically link Net library. -// -#if defined(_MSC_VER) - #if !defined(POCO_NO_AUTOMATIC_LIBS) && !defined(Net_EXPORTS) - #pragma comment(lib, "PocoNet" POCO_LIB_SUFFIX) - #endif -#endif - - -// Default to enabled IPv6 support if not explicitly disabled -#if !defined(POCO_NET_NO_IPv6) && !defined (POCO_HAVE_IPv6) - #define POCO_HAVE_IPv6 -#elif defined(POCO_NET_NO_IPv6) && defined (POCO_HAVE_IPv6) - #undef POCO_HAVE_IPv6 -#endif // POCO_NET_NO_IPv6, POCO_HAVE_IPv6 - - -namespace Poco { -namespace Net { - - -void Net_API initializeNetwork(); - /// Initialize the network subsystem. - /// (Windows only, no-op elsewhere) - - -void Net_API uninitializeNetwork(); - /// Uninitialize the network subsystem. - /// (Windows only, no-op elsewhere) - - -}} // namespace Poco::Net - - -// -// Automate network initialization (only relevant on Windows). -// - -#if defined(POCO_OS_FAMILY_WINDOWS) && !defined(POCO_NO_AUTOMATIC_LIB_INIT) && !defined(__GNUC__) - -extern "C" const struct Net_API NetworkInitializer pocoNetworkInitializer; - -#if defined(Net_EXPORTS) - #if defined(_WIN64) || defined(_WIN32_WCE) - #define POCO_NET_FORCE_SYMBOL(s) __pragma(comment (linker, "/export:"#s)) - #elif defined(_WIN32) - #define POCO_NET_FORCE_SYMBOL(s) __pragma(comment (linker, "/export:_"#s)) - #endif -#else // !Net_EXPORTS - #if defined(_WIN64) || defined(_WIN32_WCE) - #define POCO_NET_FORCE_SYMBOL(s) __pragma(comment (linker, "/include:"#s)) - #elif defined(_WIN32) - #define POCO_NET_FORCE_SYMBOL(s) __pragma(comment (linker, "/include:_"#s)) - #endif -#endif // Net_EXPORTS - -POCO_NET_FORCE_SYMBOL(pocoNetworkInitializer) - -#endif // POCO_OS_FAMILY_WINDOWS - - -// -// Define POCO_NET_HAS_INTERFACE for platforms that have network interface detection implemented. -// -#if defined(POCO_OS_FAMILY_WINDOWS) || (POCO_OS == POCO_OS_LINUX) || (POCO_OS == POCO_OS_ANDROID) || defined(POCO_OS_FAMILY_BSD) || (POCO_OS == POCO_OS_SOLARIS) || (POCO_OS == POCO_OS_QNX) - #define POCO_NET_HAS_INTERFACE -#endif - - -#endif // Net_Net_INCLUDED +// +// Net.h +// +// Library: Net +// Package: NetCore +// Module: Net +// +// Basic definitions for the Poco Net library. +// This file must be the first file included by every other Net +// header file. +// +// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. +// and Contributors. +// +// SPDX-License-Identifier: BSL-1.0 +// + + +#ifndef Net_Net_INCLUDED +#define Net_Net_INCLUDED + + +#include "Poco/Foundation.h" + + +// +// The following block is the standard way of creating macros which make exporting +// from a DLL simpler. All files within this DLL are compiled with the Net_EXPORTS +// symbol defined on the command line. this symbol should not be defined on any project +// that uses this DLL. This way any other project whose source files include this file see +// Net_API functions as being imported from a DLL, wheras this DLL sees symbols +// defined with this macro as being exported. +// +#if defined(_WIN32) && defined(POCO_DLL) + #if defined(Net_EXPORTS) + #define Net_API __declspec(dllexport) + #else + #define Net_API __declspec(dllimport) + #endif +#endif + + +#if !defined(Net_API) + #if !defined(POCO_NO_GCC_API_ATTRIBUTE) && defined (__GNUC__) && (__GNUC__ >= 4) + #define Net_API __attribute__ ((visibility ("default"))) + #else + #define Net_API + #endif +#endif + + +// +// Automatically link Net library. +// +#if defined(_MSC_VER) + #if !defined(POCO_NO_AUTOMATIC_LIBS) && !defined(Net_EXPORTS) + #pragma comment(lib, "PocoNet" POCO_LIB_SUFFIX) + #endif +#endif + + +// Default to enabled IPv6 support if not explicitly disabled +#if !defined(POCO_NET_NO_IPv6) && !defined (POCO_HAVE_IPv6) + #define POCO_HAVE_IPv6 +#elif defined(POCO_NET_NO_IPv6) && defined (POCO_HAVE_IPv6) + #undef POCO_HAVE_IPv6 +#endif // POCO_NET_NO_IPv6, POCO_HAVE_IPv6 + + +namespace Poco { +namespace Net { + + +void Net_API initializeNetwork(); + /// Initialize the network subsystem. + /// (Windows only, no-op elsewhere) + + +void Net_API uninitializeNetwork(); + /// Uninitialize the network subsystem. + /// (Windows only, no-op elsewhere) + + +}} // namespace Poco::Net + + +// +// Automate network initialization (only relevant on Windows). +// + +#if defined(POCO_OS_FAMILY_WINDOWS) && !defined(POCO_NO_AUTOMATIC_LIB_INIT) && !defined(__GNUC__) + +extern "C" const struct Net_API NetworkInitializer pocoNetworkInitializer; + +#if defined(Net_EXPORTS) + #if defined(_WIN64) || defined(_WIN32_WCE) + #define POCO_NET_FORCE_SYMBOL(s) __pragma(comment (linker, "/export:"#s)) + #elif defined(_WIN32) + #define POCO_NET_FORCE_SYMBOL(s) __pragma(comment (linker, "/export:_"#s)) + #endif +#else // !Net_EXPORTS + #if defined(_WIN64) || defined(_WIN32_WCE) + #define POCO_NET_FORCE_SYMBOL(s) __pragma(comment (linker, "/include:"#s)) + #elif defined(_WIN32) + #define POCO_NET_FORCE_SYMBOL(s) __pragma(comment (linker, "/include:_"#s)) + #endif +#endif // Net_EXPORTS + +POCO_NET_FORCE_SYMBOL(pocoNetworkInitializer) + +#endif // POCO_OS_FAMILY_WINDOWS + + +// +// Define POCO_NET_HAS_INTERFACE for platforms that have network interface detection implemented. +// +#if defined(POCO_OS_FAMILY_WINDOWS) || (POCO_OS == POCO_OS_LINUX) || (POCO_OS == POCO_OS_ANDROID) || defined(POCO_OS_FAMILY_BSD) || (POCO_OS == POCO_OS_SOLARIS) || (POCO_OS == POCO_OS_QNX) + #define POCO_NET_HAS_INTERFACE +#endif + + +#endif // Net_Net_INCLUDED diff --git a/contrib/libs/poco/Net/include/Poco/Net/NetException.h b/contrib/libs/poco/Net/include/Poco/Net/NetException.h index 82acac93df..92bb3ed912 100644 --- a/contrib/libs/poco/Net/include/Poco/Net/NetException.h +++ b/contrib/libs/poco/Net/include/Poco/Net/NetException.h @@ -1,60 +1,60 @@ -// -// NetException.h -// -// Library: Net -// Package: NetCore -// Module: NetException -// -// Definition of the NetException class. -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Net_NetException_INCLUDED -#define Net_NetException_INCLUDED - - -#include "Poco/Net/Net.h" -#include "Poco/Exception.h" - - -namespace Poco { -namespace Net { - - -POCO_DECLARE_EXCEPTION(Net_API, NetException, Poco::IOException) -POCO_DECLARE_EXCEPTION(Net_API, InvalidAddressException, NetException) -POCO_DECLARE_EXCEPTION(Net_API, InvalidSocketException, NetException) -POCO_DECLARE_EXCEPTION(Net_API, ServiceNotFoundException, NetException) -POCO_DECLARE_EXCEPTION(Net_API, ConnectionAbortedException, NetException) -POCO_DECLARE_EXCEPTION(Net_API, ConnectionResetException, NetException) -POCO_DECLARE_EXCEPTION(Net_API, ConnectionRefusedException, NetException) -POCO_DECLARE_EXCEPTION(Net_API, DNSException, NetException) -POCO_DECLARE_EXCEPTION(Net_API, HostNotFoundException, DNSException) -POCO_DECLARE_EXCEPTION(Net_API, NoAddressFoundException, DNSException) -POCO_DECLARE_EXCEPTION(Net_API, InterfaceNotFoundException, NetException) -POCO_DECLARE_EXCEPTION(Net_API, NoMessageException, NetException) -POCO_DECLARE_EXCEPTION(Net_API, MessageException, NetException) -POCO_DECLARE_EXCEPTION(Net_API, MultipartException, MessageException) -POCO_DECLARE_EXCEPTION(Net_API, HTTPException, NetException) -POCO_DECLARE_EXCEPTION(Net_API, NotAuthenticatedException, HTTPException) -POCO_DECLARE_EXCEPTION(Net_API, UnsupportedRedirectException, HTTPException) -POCO_DECLARE_EXCEPTION(Net_API, FTPException, NetException) -POCO_DECLARE_EXCEPTION(Net_API, SMTPException, NetException) -POCO_DECLARE_EXCEPTION(Net_API, POP3Exception, NetException) -POCO_DECLARE_EXCEPTION(Net_API, ICMPException, NetException) -POCO_DECLARE_EXCEPTION(Net_API, NTPException, NetException) -POCO_DECLARE_EXCEPTION(Net_API, HTMLFormException, NetException) -POCO_DECLARE_EXCEPTION(Net_API, WebSocketException, NetException) -POCO_DECLARE_EXCEPTION(Net_API, UnsupportedFamilyException, NetException) -POCO_DECLARE_EXCEPTION(Net_API, AddressFamilyMismatchException, NetException) - - -} } // namespace Poco::Net - - -#endif // Net_NetException_INCLUDED +// +// NetException.h +// +// Library: Net +// Package: NetCore +// Module: NetException +// +// Definition of the NetException class. +// +// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. +// and Contributors. +// +// SPDX-License-Identifier: BSL-1.0 +// + + +#ifndef Net_NetException_INCLUDED +#define Net_NetException_INCLUDED + + +#include "Poco/Net/Net.h" +#include "Poco/Exception.h" + + +namespace Poco { +namespace Net { + + +POCO_DECLARE_EXCEPTION(Net_API, NetException, Poco::IOException) +POCO_DECLARE_EXCEPTION(Net_API, InvalidAddressException, NetException) +POCO_DECLARE_EXCEPTION(Net_API, InvalidSocketException, NetException) +POCO_DECLARE_EXCEPTION(Net_API, ServiceNotFoundException, NetException) +POCO_DECLARE_EXCEPTION(Net_API, ConnectionAbortedException, NetException) +POCO_DECLARE_EXCEPTION(Net_API, ConnectionResetException, NetException) +POCO_DECLARE_EXCEPTION(Net_API, ConnectionRefusedException, NetException) +POCO_DECLARE_EXCEPTION(Net_API, DNSException, NetException) +POCO_DECLARE_EXCEPTION(Net_API, HostNotFoundException, DNSException) +POCO_DECLARE_EXCEPTION(Net_API, NoAddressFoundException, DNSException) +POCO_DECLARE_EXCEPTION(Net_API, InterfaceNotFoundException, NetException) +POCO_DECLARE_EXCEPTION(Net_API, NoMessageException, NetException) +POCO_DECLARE_EXCEPTION(Net_API, MessageException, NetException) +POCO_DECLARE_EXCEPTION(Net_API, MultipartException, MessageException) +POCO_DECLARE_EXCEPTION(Net_API, HTTPException, NetException) +POCO_DECLARE_EXCEPTION(Net_API, NotAuthenticatedException, HTTPException) +POCO_DECLARE_EXCEPTION(Net_API, UnsupportedRedirectException, HTTPException) +POCO_DECLARE_EXCEPTION(Net_API, FTPException, NetException) +POCO_DECLARE_EXCEPTION(Net_API, SMTPException, NetException) +POCO_DECLARE_EXCEPTION(Net_API, POP3Exception, NetException) +POCO_DECLARE_EXCEPTION(Net_API, ICMPException, NetException) +POCO_DECLARE_EXCEPTION(Net_API, NTPException, NetException) +POCO_DECLARE_EXCEPTION(Net_API, HTMLFormException, NetException) +POCO_DECLARE_EXCEPTION(Net_API, WebSocketException, NetException) +POCO_DECLARE_EXCEPTION(Net_API, UnsupportedFamilyException, NetException) +POCO_DECLARE_EXCEPTION(Net_API, AddressFamilyMismatchException, NetException) + + +} } // namespace Poco::Net + + +#endif // Net_NetException_INCLUDED diff --git a/contrib/libs/poco/Net/include/Poco/Net/NetworkInterface.h b/contrib/libs/poco/Net/include/Poco/Net/NetworkInterface.h index 4f2ade2783..17e10fdf6c 100644 --- a/contrib/libs/poco/Net/include/Poco/Net/NetworkInterface.h +++ b/contrib/libs/poco/Net/include/Poco/Net/NetworkInterface.h @@ -1,352 +1,352 @@ -// -// NetworkInterface.h -// -// Library: Net -// Package: Sockets -// Module: NetworkInterface -// -// Definition of the NetworkInterface class. -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Net_NetworkInterface_INCLUDED -#define Net_NetworkInterface_INCLUDED - - -#include "Poco/Net/Net.h" - - -#ifdef POCO_NET_HAS_INTERFACE - - -#include "Poco/Net/IPAddress.h" -#include "Poco/Mutex.h" -#include "Poco/Tuple.h" -#include <map> -#include <ostream> - - -namespace Poco { -namespace Net { - - -class NetworkInterfaceImpl; - - -class Net_API NetworkInterface - /// This class represents a network interface. - /// - /// NetworkInterface is used with MulticastSocket to specify - /// multicast interfaces for sending and receiving multicast - /// messages. - /// - /// The class also provides static member functions for - /// enumerating or searching network interfaces and their - /// respective configuration values. +// +// NetworkInterface.h +// +// Library: Net +// Package: Sockets +// Module: NetworkInterface +// +// Definition of the NetworkInterface class. +// +// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. +// and Contributors. +// +// SPDX-License-Identifier: BSL-1.0 +// + + +#ifndef Net_NetworkInterface_INCLUDED +#define Net_NetworkInterface_INCLUDED + + +#include "Poco/Net/Net.h" + + +#ifdef POCO_NET_HAS_INTERFACE + + +#include "Poco/Net/IPAddress.h" +#include "Poco/Mutex.h" +#include "Poco/Tuple.h" +#include <map> +#include <ostream> + + +namespace Poco { +namespace Net { + + +class NetworkInterfaceImpl; + + +class Net_API NetworkInterface + /// This class represents a network interface. /// - /// On Windows, detection capabilities vary depending on the - /// OS version/service pack. Although the best effort is made - /// not to attempt access to non-existent features through a - /// combination of compile/runtime checks, when running binaries - /// compiled on a newer version of the OS on an older one - /// problems may occur; if possible, it is best to run - /// binaries on the OS version where they were compiled. - /// This particularly applies to OS versions older than Vista - /// and XP. -{ -public: - typedef std::vector<NetworkInterface> List; - typedef List NetworkInterfaceList;//@deprecated - typedef std::map<unsigned, NetworkInterface> Map; - typedef Poco::Tuple<IPAddress, IPAddress, IPAddress> AddressTuple; - typedef std::vector<AddressTuple> AddressList; - typedef AddressList::iterator AddressIterator; - typedef AddressList::const_iterator ConstAddressIterator; - typedef std::vector<unsigned char> MACAddress; - - enum AddressType - { - IP_ADDRESS, - SUBNET_MASK, - BROADCAST_ADDRESS - }; - - enum Type - { - NI_TYPE_ETHERNET_CSMACD, - NI_TYPE_ISO88025_TOKENRING, - NI_TYPE_FRAMERELAY, - NI_TYPE_PPP, - NI_TYPE_SOFTWARE_LOOPBACK, - NI_TYPE_ATM, - NI_TYPE_IEEE80211, - NI_TYPE_TUNNEL, - NI_TYPE_IEEE1394, - NI_TYPE_OTHER - }; - - enum IPVersion - { - IPv4_ONLY, /// Return interfaces with IPv4 address only - IPv6_ONLY, /// Return interfaces with IPv6 address only - IPv4_OR_IPv6 /// Return interfaces with IPv4 or IPv6 address - }; - - static const unsigned NO_INDEX = ~0; -#if defined(POCO_OS_FAMILY_WINDOWS) - static const char MAC_SEPARATOR = '-'; -#else - static const char MAC_SEPARATOR = ':'; -#endif - - NetworkInterface(unsigned index = NO_INDEX); - /// Creates a NetworkInterface representing the - /// default interface. - /// - /// The name is empty, the IP address is the wildcard - /// address and the index is max value of unsigned integer. - - NetworkInterface(const NetworkInterface& interfc); - /// Creates the NetworkInterface by copying another one. - - ~NetworkInterface(); - /// Destroys the NetworkInterface. - - NetworkInterface& operator = (const NetworkInterface& interfc); - /// Assigns another NetworkInterface. - - bool operator < (const NetworkInterface& other) const; - /// Operator less-than. - - bool operator == (const NetworkInterface& other) const; - /// Operator equal. Compares interface indices. - - void swap(NetworkInterface& other); - /// Swaps the NetworkInterface with another one. - - unsigned index() const; - /// Returns the interface OS index. - - const std::string& name() const; - /// Returns the interface name. - - const std::string& displayName() const; - /// Returns the interface display name. - /// - /// On Windows platforms, this is currently the network adapter - /// name. This may change to the "friendly name" of the network - /// connection in a future version, however. - /// - /// On other platforms this is the same as name(). - - const std::string& adapterName() const; - /// Returns the interface adapter name. - /// - /// On Windows platforms, this is the network adapter LUID. - /// The adapter name is used by some Windows Net APIs like DHCP. - /// - /// On other platforms this is the same as name(). - - const IPAddress& firstAddress(IPAddress::Family family) const; - /// Returns the first IP address bound to the interface. - /// Throws NotFoundException if the address family is not - /// configured on the interface. - - void firstAddress(IPAddress& addr, IPAddress::Family family = IPAddress::IPv4) const; - /// Returns the first IP address bound to the interface. - /// If the address family is not configured on the interface, - /// the address returned in addr will be unspecified (wildcard). - - const IPAddress& address(unsigned index = 0) const; - /// Returns the IP address bound to the interface at index position. - - void addAddress(const IPAddress& address); - /// Adds address to the interface. - - void addAddress(const IPAddress& address, const IPAddress& subnetMask, const IPAddress& broadcastAddress); - /// Adds address to the interface. - - const AddressList& addressList() const; - /// Returns the list of IP addresses bound to the interface. - - const IPAddress& subnetMask(unsigned index = 0) const; - /// Returns the subnet mask for this network interface. - - const IPAddress& broadcastAddress(unsigned index = 0) const; - /// Returns the broadcast address for this network interface. - - const IPAddress& destAddress(unsigned index = 0) const; - /// Returns the IPv4 point-to-point destination address for this network interface. - - const MACAddress& macAddress() const; - /// Returns MAC (Media Access Control) address for the interface. - - unsigned mtu() const; - /// Returns the MTU for this interface. - - NetworkInterface::Type type() const; - /// returns the MIB IfType of the interface. - - bool supportsIP() const; - /// Returns true if the interface supports IP. - - bool supportsIPv4() const; - /// Returns true if the interface supports IPv4. - - bool supportsIPv6() const; - /// Returns true if the interface supports IPv6. - - bool supportsBroadcast() const; - /// Returns true if the interface supports broadcast. - - bool supportsMulticast() const; - /// Returns true if the interface supports multicast. - - bool isLoopback() const; - /// Returns true if the interface is loopback. - - bool isPointToPoint() const; - /// Returns true if the interface is point-to-point. - - bool isRunning() const; - /// Returns true if the interface is running. - - bool isUp() const; - /// Returns true if the interface is up. - - static NetworkInterface forName(const std::string& name, bool requireIPv6 = false); - /// Returns the NetworkInterface for the given name. - /// - /// If requireIPv6 is false, an IPv4 interface is returned. - /// Otherwise, an IPv6 interface is returned. - /// - /// Throws an InterfaceNotFoundException if an interface - /// with the give name does not exist. - - static NetworkInterface forName(const std::string& name, IPVersion ipVersion); - /// Returns the NetworkInterface for the given name. - /// - /// The ipVersion argument can be used to specify whether - /// an IPv4 (IPv4_ONLY) or IPv6 (IPv6_ONLY) interface is required, - /// or whether the caller does not care (IPv4_OR_IPv6). - /// - /// Throws an InterfaceNotFoundException if an interface - /// with the give name does not exist. - - static NetworkInterface forAddress(const IPAddress& address); - /// Returns the NetworkInterface for the given IP address. - /// - /// Throws an InterfaceNotFoundException if an interface - /// with the give address does not exist. - - static NetworkInterface forIndex(unsigned index); - /// Returns the NetworkInterface for the given interface index. - /// - /// Throws an InterfaceNotFoundException if an interface - /// with the given index does not exist. - - static List list(bool ipOnly = true, bool upOnly = true); - /// Returns a list with all network interfaces - /// on the system. - /// - /// If ipOnly is true, only interfaces supporting IP - /// are returned. Otherwise, all system network interfaces - /// are returned. - /// - /// If upOnly is true, only interfaces being up are returned. - /// Otherwise, both interfaces being up and down are returned. - /// - /// If there are multiple addresses bound to one interface, - /// multiple NetworkInterface entries are listed for - /// the same interface. - - static Map map(bool ipOnly = true, bool upOnly = true); - /// Returns a map containing system network interfaces - /// Map is keyed by interface system indices. - /// - /// If ipOnly is true, only interfaces supporting IP - /// are returned. Otherwise, all system network interfaces - /// are returned. + /// NetworkInterface is used with MulticastSocket to specify + /// multicast interfaces for sending and receiving multicast + /// messages. + /// + /// The class also provides static member functions for + /// enumerating or searching network interfaces and their + /// respective configuration values. + /// + /// On Windows, detection capabilities vary depending on the + /// OS version/service pack. Although the best effort is made + /// not to attempt access to non-existent features through a + /// combination of compile/runtime checks, when running binaries + /// compiled on a newer version of the OS on an older one + /// problems may occur; if possible, it is best to run + /// binaries on the OS version where they were compiled. + /// This particularly applies to OS versions older than Vista + /// and XP. +{ +public: + typedef std::vector<NetworkInterface> List; + typedef List NetworkInterfaceList;//@deprecated + typedef std::map<unsigned, NetworkInterface> Map; + typedef Poco::Tuple<IPAddress, IPAddress, IPAddress> AddressTuple; + typedef std::vector<AddressTuple> AddressList; + typedef AddressList::iterator AddressIterator; + typedef AddressList::const_iterator ConstAddressIterator; + typedef std::vector<unsigned char> MACAddress; + + enum AddressType + { + IP_ADDRESS, + SUBNET_MASK, + BROADCAST_ADDRESS + }; + + enum Type + { + NI_TYPE_ETHERNET_CSMACD, + NI_TYPE_ISO88025_TOKENRING, + NI_TYPE_FRAMERELAY, + NI_TYPE_PPP, + NI_TYPE_SOFTWARE_LOOPBACK, + NI_TYPE_ATM, + NI_TYPE_IEEE80211, + NI_TYPE_TUNNEL, + NI_TYPE_IEEE1394, + NI_TYPE_OTHER + }; + + enum IPVersion + { + IPv4_ONLY, /// Return interfaces with IPv4 address only + IPv6_ONLY, /// Return interfaces with IPv6 address only + IPv4_OR_IPv6 /// Return interfaces with IPv4 or IPv6 address + }; + + static const unsigned NO_INDEX = ~0; +#if defined(POCO_OS_FAMILY_WINDOWS) + static const char MAC_SEPARATOR = '-'; +#else + static const char MAC_SEPARATOR = ':'; +#endif + + NetworkInterface(unsigned index = NO_INDEX); + /// Creates a NetworkInterface representing the + /// default interface. + /// + /// The name is empty, the IP address is the wildcard + /// address and the index is max value of unsigned integer. + + NetworkInterface(const NetworkInterface& interfc); + /// Creates the NetworkInterface by copying another one. + + ~NetworkInterface(); + /// Destroys the NetworkInterface. + + NetworkInterface& operator = (const NetworkInterface& interfc); + /// Assigns another NetworkInterface. + + bool operator < (const NetworkInterface& other) const; + /// Operator less-than. + + bool operator == (const NetworkInterface& other) const; + /// Operator equal. Compares interface indices. + + void swap(NetworkInterface& other); + /// Swaps the NetworkInterface with another one. + + unsigned index() const; + /// Returns the interface OS index. + + const std::string& name() const; + /// Returns the interface name. + + const std::string& displayName() const; + /// Returns the interface display name. + /// + /// On Windows platforms, this is currently the network adapter + /// name. This may change to the "friendly name" of the network + /// connection in a future version, however. + /// + /// On other platforms this is the same as name(). + + const std::string& adapterName() const; + /// Returns the interface adapter name. + /// + /// On Windows platforms, this is the network adapter LUID. + /// The adapter name is used by some Windows Net APIs like DHCP. + /// + /// On other platforms this is the same as name(). + + const IPAddress& firstAddress(IPAddress::Family family) const; + /// Returns the first IP address bound to the interface. + /// Throws NotFoundException if the address family is not + /// configured on the interface. + + void firstAddress(IPAddress& addr, IPAddress::Family family = IPAddress::IPv4) const; + /// Returns the first IP address bound to the interface. + /// If the address family is not configured on the interface, + /// the address returned in addr will be unspecified (wildcard). + + const IPAddress& address(unsigned index = 0) const; + /// Returns the IP address bound to the interface at index position. + + void addAddress(const IPAddress& address); + /// Adds address to the interface. + + void addAddress(const IPAddress& address, const IPAddress& subnetMask, const IPAddress& broadcastAddress); + /// Adds address to the interface. + + const AddressList& addressList() const; + /// Returns the list of IP addresses bound to the interface. + + const IPAddress& subnetMask(unsigned index = 0) const; + /// Returns the subnet mask for this network interface. + + const IPAddress& broadcastAddress(unsigned index = 0) const; + /// Returns the broadcast address for this network interface. + + const IPAddress& destAddress(unsigned index = 0) const; + /// Returns the IPv4 point-to-point destination address for this network interface. + + const MACAddress& macAddress() const; + /// Returns MAC (Media Access Control) address for the interface. + + unsigned mtu() const; + /// Returns the MTU for this interface. + + NetworkInterface::Type type() const; + /// returns the MIB IfType of the interface. + + bool supportsIP() const; + /// Returns true if the interface supports IP. + + bool supportsIPv4() const; + /// Returns true if the interface supports IPv4. + + bool supportsIPv6() const; + /// Returns true if the interface supports IPv6. + + bool supportsBroadcast() const; + /// Returns true if the interface supports broadcast. + + bool supportsMulticast() const; + /// Returns true if the interface supports multicast. + + bool isLoopback() const; + /// Returns true if the interface is loopback. + + bool isPointToPoint() const; + /// Returns true if the interface is point-to-point. + + bool isRunning() const; + /// Returns true if the interface is running. + + bool isUp() const; + /// Returns true if the interface is up. + + static NetworkInterface forName(const std::string& name, bool requireIPv6 = false); + /// Returns the NetworkInterface for the given name. /// - /// If upOnly is true, only interfaces being up are returned. - /// Otherwise, both interfaces being up and down are returned. + /// If requireIPv6 is false, an IPv4 interface is returned. + /// Otherwise, an IPv6 interface is returned. + /// + /// Throws an InterfaceNotFoundException if an interface + /// with the give name does not exist. + + static NetworkInterface forName(const std::string& name, IPVersion ipVersion); + /// Returns the NetworkInterface for the given name. /// - /// If there are multiple addresses bound to one interface, - /// they are contained within the NetworkInterface (second) - /// member of the pair. - -protected: - NetworkInterface(const std::string& name, const std::string& displayName, const std::string& adapterName, const IPAddress& address, unsigned index, MACAddress* pMACAddress = 0); - /// Creates the NetworkInterface. - - NetworkInterface(const std::string& name, const std::string& displayName, const std::string& adapterName, unsigned index, MACAddress* pMACAddress = 0); - /// Creates the NetworkInterface. - - NetworkInterface(const std::string& name, const IPAddress& address, unsigned index, MACAddress* pMACAddress = 0); - /// Creates the NetworkInterface. - - NetworkInterface(const std::string& name, - const std::string& displayName, - const std::string& adapterName, - const IPAddress& address, - const IPAddress& subnetMask, - const IPAddress& broadcastAddress, - unsigned index, - MACAddress* pMACAddress = 0); - /// Creates the NetworkInterface. - - NetworkInterface(const std::string& name, - const IPAddress& address, - const IPAddress& subnetMask, - const IPAddress& broadcastAddress, - unsigned index, - MACAddress* pMACAddress = 0); - /// Creates the NetworkInterface. - - IPAddress interfaceNameToAddress(const std::string& interfaceName) const; - /// Determines the IPAddress bound to the interface with the given name. - - unsigned interfaceNameToIndex(const std::string& interfaceName) const; - /// Determines the interface index of the interface with the given name. - - NetworkInterfaceImpl& impl() { return *_pImpl; }; - -private: - NetworkInterfaceImpl* _pImpl; - - static Poco::FastMutex _mutex; -}; - - -/// -/// inlines -/// - - -inline bool NetworkInterface::operator < (const NetworkInterface& other) const -{ - return this->index() < other.index(); -} - - -inline bool NetworkInterface::operator == (const NetworkInterface& other) const -{ - return this->index() == other.index(); -} - - -} } // namespace Poco::Net - - -Net_API std::ostream& operator << (std::ostream& ostr, const Poco::Net::NetworkInterface::MACAddress& addr); - - -#endif // POCO_NET_HAS_INTERFACE - - -#endif // Net_NetworkInterface_INCLUDED + /// The ipVersion argument can be used to specify whether + /// an IPv4 (IPv4_ONLY) or IPv6 (IPv6_ONLY) interface is required, + /// or whether the caller does not care (IPv4_OR_IPv6). + /// + /// Throws an InterfaceNotFoundException if an interface + /// with the give name does not exist. + + static NetworkInterface forAddress(const IPAddress& address); + /// Returns the NetworkInterface for the given IP address. + /// + /// Throws an InterfaceNotFoundException if an interface + /// with the give address does not exist. + + static NetworkInterface forIndex(unsigned index); + /// Returns the NetworkInterface for the given interface index. + /// + /// Throws an InterfaceNotFoundException if an interface + /// with the given index does not exist. + + static List list(bool ipOnly = true, bool upOnly = true); + /// Returns a list with all network interfaces + /// on the system. + /// + /// If ipOnly is true, only interfaces supporting IP + /// are returned. Otherwise, all system network interfaces + /// are returned. + /// + /// If upOnly is true, only interfaces being up are returned. + /// Otherwise, both interfaces being up and down are returned. + /// + /// If there are multiple addresses bound to one interface, + /// multiple NetworkInterface entries are listed for + /// the same interface. + + static Map map(bool ipOnly = true, bool upOnly = true); + /// Returns a map containing system network interfaces + /// Map is keyed by interface system indices. + /// + /// If ipOnly is true, only interfaces supporting IP + /// are returned. Otherwise, all system network interfaces + /// are returned. + /// + /// If upOnly is true, only interfaces being up are returned. + /// Otherwise, both interfaces being up and down are returned. + /// + /// If there are multiple addresses bound to one interface, + /// they are contained within the NetworkInterface (second) + /// member of the pair. + +protected: + NetworkInterface(const std::string& name, const std::string& displayName, const std::string& adapterName, const IPAddress& address, unsigned index, MACAddress* pMACAddress = 0); + /// Creates the NetworkInterface. + + NetworkInterface(const std::string& name, const std::string& displayName, const std::string& adapterName, unsigned index, MACAddress* pMACAddress = 0); + /// Creates the NetworkInterface. + + NetworkInterface(const std::string& name, const IPAddress& address, unsigned index, MACAddress* pMACAddress = 0); + /// Creates the NetworkInterface. + + NetworkInterface(const std::string& name, + const std::string& displayName, + const std::string& adapterName, + const IPAddress& address, + const IPAddress& subnetMask, + const IPAddress& broadcastAddress, + unsigned index, + MACAddress* pMACAddress = 0); + /// Creates the NetworkInterface. + + NetworkInterface(const std::string& name, + const IPAddress& address, + const IPAddress& subnetMask, + const IPAddress& broadcastAddress, + unsigned index, + MACAddress* pMACAddress = 0); + /// Creates the NetworkInterface. + + IPAddress interfaceNameToAddress(const std::string& interfaceName) const; + /// Determines the IPAddress bound to the interface with the given name. + + unsigned interfaceNameToIndex(const std::string& interfaceName) const; + /// Determines the interface index of the interface with the given name. + + NetworkInterfaceImpl& impl() { return *_pImpl; }; + +private: + NetworkInterfaceImpl* _pImpl; + + static Poco::FastMutex _mutex; +}; + + +/// +/// inlines +/// + + +inline bool NetworkInterface::operator < (const NetworkInterface& other) const +{ + return this->index() < other.index(); +} + + +inline bool NetworkInterface::operator == (const NetworkInterface& other) const +{ + return this->index() == other.index(); +} + + +} } // namespace Poco::Net + + +Net_API std::ostream& operator << (std::ostream& ostr, const Poco::Net::NetworkInterface::MACAddress& addr); + + +#endif // POCO_NET_HAS_INTERFACE + + +#endif // Net_NetworkInterface_INCLUDED diff --git a/contrib/libs/poco/Net/include/Poco/Net/NullPartHandler.h b/contrib/libs/poco/Net/include/Poco/Net/NullPartHandler.h index ce9ed0c40d..21c45c6805 100644 --- a/contrib/libs/poco/Net/include/Poco/Net/NullPartHandler.h +++ b/contrib/libs/poco/Net/include/Poco/Net/NullPartHandler.h @@ -1,47 +1,47 @@ -// -// NullPartHandler.h -// -// Library: Net -// Package: Messages -// Module: NullPartHandler -// -// Definition of the NullPartHandler class. -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Net_NullPartHandler_INCLUDED -#define Net_NullPartHandler_INCLUDED - - -#include "Poco/Net/Net.h" -#include "Poco/Net/PartHandler.h" - - -namespace Poco { -namespace Net { - - -class Net_API NullPartHandler: public PartHandler - /// A very special PartHandler that simply discards all data. -{ -public: - NullPartHandler(); - /// Creates the NullPartHandler. - - ~NullPartHandler(); - /// Destroys the NullPartHandler. - - void handlePart(const MessageHeader& header, std::istream& stream); - /// Reads and discards all data from the stream. -}; - - -} } // namespace Poco::Net - - -#endif // Net_NullPartHandler_INCLUDED +// +// NullPartHandler.h +// +// Library: Net +// Package: Messages +// Module: NullPartHandler +// +// Definition of the NullPartHandler class. +// +// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. +// and Contributors. +// +// SPDX-License-Identifier: BSL-1.0 +// + + +#ifndef Net_NullPartHandler_INCLUDED +#define Net_NullPartHandler_INCLUDED + + +#include "Poco/Net/Net.h" +#include "Poco/Net/PartHandler.h" + + +namespace Poco { +namespace Net { + + +class Net_API NullPartHandler: public PartHandler + /// A very special PartHandler that simply discards all data. +{ +public: + NullPartHandler(); + /// Creates the NullPartHandler. + + ~NullPartHandler(); + /// Destroys the NullPartHandler. + + void handlePart(const MessageHeader& header, std::istream& stream); + /// Reads and discards all data from the stream. +}; + + +} } // namespace Poco::Net + + +#endif // Net_NullPartHandler_INCLUDED diff --git a/contrib/libs/poco/Net/include/Poco/Net/OAuth10Credentials.h b/contrib/libs/poco/Net/include/Poco/Net/OAuth10Credentials.h index e0d06e7f0b..1402d40d5b 100644 --- a/contrib/libs/poco/Net/include/Poco/Net/OAuth10Credentials.h +++ b/contrib/libs/poco/Net/include/Poco/Net/OAuth10Credentials.h @@ -1,274 +1,274 @@ -// -// OAuth10Credentials.h -// -// Library: Net -// Package: OAuth -// Module: OAuth10Credentials -// -// Definition of the OAuth10Credentials class. -// -// Copyright (c) 2014, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Net_OAuth10Credentials_INCLUDED -#define Net_OAuth10Credentials_INCLUDED - - -#include "Poco/Net/Net.h" -#include "Poco/URI.h" - - -namespace Poco { -namespace Net { - - -class HTTPRequest; -class HTMLForm; - - -class Net_API OAuth10Credentials - /// This class implements OAuth 1.0A authentication for HTTP requests, - /// according to RFC 5849. - /// - /// Only PLAINTEXT and HMAC-SHA1 signature methods are - /// supported. The RSA-SHA1 signature method is not supported. +// +// OAuth10Credentials.h +// +// Library: Net +// Package: OAuth +// Module: OAuth10Credentials +// +// Definition of the OAuth10Credentials class. +// +// Copyright (c) 2014, Applied Informatics Software Engineering GmbH. +// and Contributors. +// +// SPDX-License-Identifier: BSL-1.0 +// + + +#ifndef Net_OAuth10Credentials_INCLUDED +#define Net_OAuth10Credentials_INCLUDED + + +#include "Poco/Net/Net.h" +#include "Poco/URI.h" + + +namespace Poco { +namespace Net { + + +class HTTPRequest; +class HTMLForm; + + +class Net_API OAuth10Credentials + /// This class implements OAuth 1.0A authentication for HTTP requests, + /// according to RFC 5849. /// - /// The OAuth10Credentials can be used to sign a client request, as - /// well as to verify the signature of a request on the server. - /// - /// To sign a client request, using a known consumer (client) key, consumer (client) secret, - /// OAuth token and token secret: - /// - /// 1. Create an OAuth10Credentials object using all four credentials, either using - /// the four argument constructor, or by using the default constructor and setting - /// the credentials using the setter methods. - /// 2. Create a URI containing the full request URI. - /// 3. Create an appropriate HTTPRequest object. - /// 4. Optionally, create a HTMLForm object containing additional parameters to sign. - /// 5. Sign the request by calling authenticate(). This will add an OAuth - /// Authorization header to the request. - /// 6. Send the request using a HTTPClientSession. - /// - /// To request the OAuth request token from a server, using only the consumer (client) key - /// and consumer (client) secret: - /// - /// 1. Create an OAuth10Credentials object using the two consumer credentials, either using - /// the two argument constructor, or by using the default constructor and setting - /// the credentials using the setter methods. - /// 2. Specify the callback URI using setCallback(). - /// 3. Create a URI containing the full request URI to obtain the token. - /// 4. Create an appropriate HTTPRequest object. - /// 5. Sign the request by calling authenticate(). This will add an OAuth - /// Authorization header to the request. - /// 6. Send the request using a HTTPClientSession. - /// 7. The response will contain the request token and request token secret. - /// These can be extracted from the response body using a HTMLForm object. - /// - /// Requesting the access token and secret (temporary credentials) from the server - /// is analogous to signing a client request using consumer key, consumer secret, - /// request token and request token secret. - /// The server response will contain the access token and access token secret, - /// which can again be extracted from the response body using a HTMLForm object. - /// - /// To verify a request on the server: - /// - /// 1. Create an OAuth10Credentials object using the constructor taking a - /// HTTPRequest object. This will extract the consumer key and token (if - /// provided). - /// 2. Provide the consumer secret and token secret (if required) matching the - /// consumer key and token to the OAuth10Credentials object using the - /// setter methods. - /// 3. Create an URI object containing the full request URI. - /// 4. Call verify() to verify the signature. - /// 5. If verification was successful, and the request was a request for - /// a request (temporary) token, call getCallback() to - /// obtain the callback URI provided by the client. -{ -public: - enum SignatureMethod - /// OAuth 1.0A Signature Method. - { - SIGN_PLAINTEXT, /// OAuth 1.0A PLAINTEXT signature method - SIGN_HMAC_SHA1 /// OAuth 1.0A HMAC-SHA1 signature method - }; - - OAuth10Credentials(); - /// Creates an empty OAuth10Credentials object. - - OAuth10Credentials(const std::string& consumerKey, const std::string& consumerSecret); - /// Creates an OAuth10Credentials object with the given consumer key and consumer secret. - /// - /// The token and tokenSecret will be left empty. - - OAuth10Credentials(const std::string& consumerKey, const std::string& consumerSecret, const std::string& token, const std::string& tokenSecret); - /// Creates an OAuth10Credentials object with the given consumer key and - /// consumer secret, as well as token and token secret. - - explicit OAuth10Credentials(const HTTPRequest& request); - /// Creates an OAuth10Credentials object from a HTTPRequest object. - /// - /// Extracts consumer key and token (if available) from the Authorization header. - /// - /// Throws a NotAuthenticatedException if the request does - /// not contain OAuth 1.0 credentials. - - ~OAuth10Credentials(); - /// Destroys the OAuth10Credentials. - - void setConsumerKey(const std::string& consumerKey); - /// Sets the consumer key. - - const std::string& getConsumerKey() const; - /// Returns the consumer key. - - void setConsumerSecret(const std::string& consumerSecret); - /// Sets the consumer secret. - - const std::string& getConsumerSecret() const; - /// Returns the consumer secret. - - void setToken(const std::string& token); - /// Sets the token. - - const std::string& getToken() const; - /// Returns the token. - - void setTokenSecret(const std::string& tokenSecret); - /// Sets the token. - - const std::string& getTokenSecret() const; - /// Returns the token secret. - - void setRealm(const std::string& realm); - /// Sets the optional realm to be included in the Authorization header. - - const std::string& getRealm() const; - /// Returns the optional realm to be included in the Authorization header. - - void setCallback(const std::string& uri); - /// Sets the callback URI. - - const std::string& getCallback() const; - /// Returns the callback URI. - - void authenticate(HTTPRequest& request, const Poco::URI& uri, SignatureMethod method = SIGN_HMAC_SHA1); - /// Adds an OAuth 1.0A Authentication header to the given request, using - /// the given signature method. - - void authenticate(HTTPRequest& request, const Poco::URI& uri, const Poco::Net::HTMLForm& params, SignatureMethod method = SIGN_HMAC_SHA1); - /// Adds an OAuth 1.0A Authentication header to the given request, using - /// the given signature method. - - bool verify(const HTTPRequest& request, const Poco::URI& uri); - /// Verifies the signature of the given request. - /// - /// The consumer key, consumer secret, token and token secret must have been set. - /// - /// Returns true if the signature is valid, otherwise false. - /// - /// Throws a NotAuthenticatedException if the request does not contain OAuth - /// credentials, or in case of an unsupported OAuth version or signature method. - - bool verify(const HTTPRequest& request, const Poco::URI& uri, const Poco::Net::HTMLForm& params); - /// Verifies the signature of the given request. - /// - /// The consumer key, consumer secret, token and token secret must have been set. - /// - /// Returns true if the signature is valid, otherwise false. - /// - /// Throws a NotAuthenticatedException if the request does not contain OAuth - /// credentials, or in case of an unsupported OAuth version or signature method. - - void nonceAndTimestampForTesting(const std::string& nonce, const std::string& timestamp); - /// Sets the nonce and timestamp to a wellknown value. - /// - /// For use by testsuite only, to test the signature - /// algorithm with wellknown inputs. - /// - /// In normal operation, the nonce is a random value - /// computed by createNonce() and the timestamp is taken - /// from the system time. - - static const std::string SCHEME; - -protected: - void signPlaintext(Poco::Net::HTTPRequest& request) const; - /// Signs the given HTTP request according to OAuth 1.0A PLAINTEXT signature method. - - void signHMACSHA1(Poco::Net::HTTPRequest& request, const std::string& uri, const Poco::Net::HTMLForm& params) const; - /// Signs the given HTTP request according to OAuth 1.0A HMAC-SHA1 signature method. - - std::string createNonce() const; - /// Creates a nonce, which is basically a Base64-encoded 32 character random - /// string, with non-alphanumeric characters removed. - - std::string createSignature(const Poco::Net::HTTPRequest& request, const std::string& uri, const Poco::Net::HTMLForm& params, const std::string& nonce, const std::string& timestamp) const; - /// Creates a OAuth signature for the given request and its parameters, according - /// to <https://dev.twitter.com/docs/auth/creating-signature>. - - static std::string percentEncode(const std::string& str); - /// Percent-encodes the given string according to Twitter API's rules, - /// given in <https://dev.twitter.com/docs/auth/percent-encoding-parameters>. - -private: - OAuth10Credentials(const OAuth10Credentials&); - OAuth10Credentials& operator = (const OAuth10Credentials&); - - std::string _consumerKey; - std::string _consumerSecret; - std::string _token; - std::string _tokenSecret; - std::string _callback; - std::string _realm; - std::string _nonce; - std::string _timestamp; -}; - - -// -// inlines -// -inline const std::string& OAuth10Credentials::getConsumerKey() const -{ - return _consumerKey; -} - - -inline const std::string& OAuth10Credentials::getConsumerSecret() const -{ - return _consumerSecret; -} - - -inline const std::string& OAuth10Credentials::getToken() const -{ - return _token; -} - - -inline const std::string& OAuth10Credentials::getTokenSecret() const -{ - return _tokenSecret; -} - - -inline const std::string& OAuth10Credentials::getRealm() const -{ - return _realm; -} - - -inline const std::string& OAuth10Credentials::getCallback() const -{ - return _callback; -} - - -} } // namespace Poco::Net - - -#endif // Net_OAuth10Credentials_INCLUDED + /// Only PLAINTEXT and HMAC-SHA1 signature methods are + /// supported. The RSA-SHA1 signature method is not supported. + /// + /// The OAuth10Credentials can be used to sign a client request, as + /// well as to verify the signature of a request on the server. + /// + /// To sign a client request, using a known consumer (client) key, consumer (client) secret, + /// OAuth token and token secret: + /// + /// 1. Create an OAuth10Credentials object using all four credentials, either using + /// the four argument constructor, or by using the default constructor and setting + /// the credentials using the setter methods. + /// 2. Create a URI containing the full request URI. + /// 3. Create an appropriate HTTPRequest object. + /// 4. Optionally, create a HTMLForm object containing additional parameters to sign. + /// 5. Sign the request by calling authenticate(). This will add an OAuth + /// Authorization header to the request. + /// 6. Send the request using a HTTPClientSession. + /// + /// To request the OAuth request token from a server, using only the consumer (client) key + /// and consumer (client) secret: + /// + /// 1. Create an OAuth10Credentials object using the two consumer credentials, either using + /// the two argument constructor, or by using the default constructor and setting + /// the credentials using the setter methods. + /// 2. Specify the callback URI using setCallback(). + /// 3. Create a URI containing the full request URI to obtain the token. + /// 4. Create an appropriate HTTPRequest object. + /// 5. Sign the request by calling authenticate(). This will add an OAuth + /// Authorization header to the request. + /// 6. Send the request using a HTTPClientSession. + /// 7. The response will contain the request token and request token secret. + /// These can be extracted from the response body using a HTMLForm object. + /// + /// Requesting the access token and secret (temporary credentials) from the server + /// is analogous to signing a client request using consumer key, consumer secret, + /// request token and request token secret. + /// The server response will contain the access token and access token secret, + /// which can again be extracted from the response body using a HTMLForm object. + /// + /// To verify a request on the server: + /// + /// 1. Create an OAuth10Credentials object using the constructor taking a + /// HTTPRequest object. This will extract the consumer key and token (if + /// provided). + /// 2. Provide the consumer secret and token secret (if required) matching the + /// consumer key and token to the OAuth10Credentials object using the + /// setter methods. + /// 3. Create an URI object containing the full request URI. + /// 4. Call verify() to verify the signature. + /// 5. If verification was successful, and the request was a request for + /// a request (temporary) token, call getCallback() to + /// obtain the callback URI provided by the client. +{ +public: + enum SignatureMethod + /// OAuth 1.0A Signature Method. + { + SIGN_PLAINTEXT, /// OAuth 1.0A PLAINTEXT signature method + SIGN_HMAC_SHA1 /// OAuth 1.0A HMAC-SHA1 signature method + }; + + OAuth10Credentials(); + /// Creates an empty OAuth10Credentials object. + + OAuth10Credentials(const std::string& consumerKey, const std::string& consumerSecret); + /// Creates an OAuth10Credentials object with the given consumer key and consumer secret. + /// + /// The token and tokenSecret will be left empty. + + OAuth10Credentials(const std::string& consumerKey, const std::string& consumerSecret, const std::string& token, const std::string& tokenSecret); + /// Creates an OAuth10Credentials object with the given consumer key and + /// consumer secret, as well as token and token secret. + + explicit OAuth10Credentials(const HTTPRequest& request); + /// Creates an OAuth10Credentials object from a HTTPRequest object. + /// + /// Extracts consumer key and token (if available) from the Authorization header. + /// + /// Throws a NotAuthenticatedException if the request does + /// not contain OAuth 1.0 credentials. + + ~OAuth10Credentials(); + /// Destroys the OAuth10Credentials. + + void setConsumerKey(const std::string& consumerKey); + /// Sets the consumer key. + + const std::string& getConsumerKey() const; + /// Returns the consumer key. + + void setConsumerSecret(const std::string& consumerSecret); + /// Sets the consumer secret. + + const std::string& getConsumerSecret() const; + /// Returns the consumer secret. + + void setToken(const std::string& token); + /// Sets the token. + + const std::string& getToken() const; + /// Returns the token. + + void setTokenSecret(const std::string& tokenSecret); + /// Sets the token. + + const std::string& getTokenSecret() const; + /// Returns the token secret. + + void setRealm(const std::string& realm); + /// Sets the optional realm to be included in the Authorization header. + + const std::string& getRealm() const; + /// Returns the optional realm to be included in the Authorization header. + + void setCallback(const std::string& uri); + /// Sets the callback URI. + + const std::string& getCallback() const; + /// Returns the callback URI. + + void authenticate(HTTPRequest& request, const Poco::URI& uri, SignatureMethod method = SIGN_HMAC_SHA1); + /// Adds an OAuth 1.0A Authentication header to the given request, using + /// the given signature method. + + void authenticate(HTTPRequest& request, const Poco::URI& uri, const Poco::Net::HTMLForm& params, SignatureMethod method = SIGN_HMAC_SHA1); + /// Adds an OAuth 1.0A Authentication header to the given request, using + /// the given signature method. + + bool verify(const HTTPRequest& request, const Poco::URI& uri); + /// Verifies the signature of the given request. + /// + /// The consumer key, consumer secret, token and token secret must have been set. + /// + /// Returns true if the signature is valid, otherwise false. + /// + /// Throws a NotAuthenticatedException if the request does not contain OAuth + /// credentials, or in case of an unsupported OAuth version or signature method. + + bool verify(const HTTPRequest& request, const Poco::URI& uri, const Poco::Net::HTMLForm& params); + /// Verifies the signature of the given request. + /// + /// The consumer key, consumer secret, token and token secret must have been set. + /// + /// Returns true if the signature is valid, otherwise false. + /// + /// Throws a NotAuthenticatedException if the request does not contain OAuth + /// credentials, or in case of an unsupported OAuth version or signature method. + + void nonceAndTimestampForTesting(const std::string& nonce, const std::string& timestamp); + /// Sets the nonce and timestamp to a wellknown value. + /// + /// For use by testsuite only, to test the signature + /// algorithm with wellknown inputs. + /// + /// In normal operation, the nonce is a random value + /// computed by createNonce() and the timestamp is taken + /// from the system time. + + static const std::string SCHEME; + +protected: + void signPlaintext(Poco::Net::HTTPRequest& request) const; + /// Signs the given HTTP request according to OAuth 1.0A PLAINTEXT signature method. + + void signHMACSHA1(Poco::Net::HTTPRequest& request, const std::string& uri, const Poco::Net::HTMLForm& params) const; + /// Signs the given HTTP request according to OAuth 1.0A HMAC-SHA1 signature method. + + std::string createNonce() const; + /// Creates a nonce, which is basically a Base64-encoded 32 character random + /// string, with non-alphanumeric characters removed. + + std::string createSignature(const Poco::Net::HTTPRequest& request, const std::string& uri, const Poco::Net::HTMLForm& params, const std::string& nonce, const std::string& timestamp) const; + /// Creates a OAuth signature for the given request and its parameters, according + /// to <https://dev.twitter.com/docs/auth/creating-signature>. + + static std::string percentEncode(const std::string& str); + /// Percent-encodes the given string according to Twitter API's rules, + /// given in <https://dev.twitter.com/docs/auth/percent-encoding-parameters>. + +private: + OAuth10Credentials(const OAuth10Credentials&); + OAuth10Credentials& operator = (const OAuth10Credentials&); + + std::string _consumerKey; + std::string _consumerSecret; + std::string _token; + std::string _tokenSecret; + std::string _callback; + std::string _realm; + std::string _nonce; + std::string _timestamp; +}; + + +// +// inlines +// +inline const std::string& OAuth10Credentials::getConsumerKey() const +{ + return _consumerKey; +} + + +inline const std::string& OAuth10Credentials::getConsumerSecret() const +{ + return _consumerSecret; +} + + +inline const std::string& OAuth10Credentials::getToken() const +{ + return _token; +} + + +inline const std::string& OAuth10Credentials::getTokenSecret() const +{ + return _tokenSecret; +} + + +inline const std::string& OAuth10Credentials::getRealm() const +{ + return _realm; +} + + +inline const std::string& OAuth10Credentials::getCallback() const +{ + return _callback; +} + + +} } // namespace Poco::Net + + +#endif // Net_OAuth10Credentials_INCLUDED diff --git a/contrib/libs/poco/Net/include/Poco/Net/OAuth20Credentials.h b/contrib/libs/poco/Net/include/Poco/Net/OAuth20Credentials.h index 04ab66e35d..6935f2dfa6 100644 --- a/contrib/libs/poco/Net/include/Poco/Net/OAuth20Credentials.h +++ b/contrib/libs/poco/Net/include/Poco/Net/OAuth20Credentials.h @@ -1,132 +1,132 @@ -// -// OAuth20Credentials.h -// -// Library: Net -// Package: OAuth -// Module: OAuth20Credentials -// -// Definition of the OAuth20Credentials class. -// -// Copyright (c) 2014, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Net_OAuth20Credentials_INCLUDED -#define Net_OAuth20Credentials_INCLUDED - - -#include "Poco/Net/Net.h" - - -namespace Poco { -namespace Net { - - -class HTTPRequest; - - -class Net_API OAuth20Credentials - /// This class implements OAuth 2.0 authentication for HTTP requests, - /// via Bearer tokens in the Authorization header, - /// according to RFC 6749 and RFC 6750. - /// - /// To add an Authorization header containing a bearer token - /// to a HTTPRequest object, create an OAuth20Credentials object - /// with the bearer token and call authenticate(). - /// - /// The bearer token can also be extracted from a HTTPRequest - /// by creating the OAuth20Credentials object with a HTTPRequest - /// object containing a "Bearer" Authorization header and - /// calling getBearerToken(). - /// - /// The authorization header scheme can be changed from - /// "Bearer" to a custom value. For example, GitHub uses - /// the "token" scheme. -{ -public: - OAuth20Credentials(); - /// Creates an empty OAuth20Credentials object. - - explicit OAuth20Credentials(const std::string& bearerToken); - /// Creates an OAuth20Credentials object with the given bearer token. - - OAuth20Credentials(const std::string& bearerToken, const std::string& scheme); - /// Creates an OAuth20Credentials object with the given bearer token - /// and authorization scheme, which overrides the default scheme ("Bearer"). - /// - /// This is useful for services like GitHub, which use "token" as scheme. - - explicit OAuth20Credentials(const HTTPRequest& request); - /// Creates an OAuth20Credentials object from a HTTPRequest object. - /// - /// Extracts bearer token from the Authorization header, which - /// must use the "Bearer" authorization scheme. - /// - /// Throws a NotAuthenticatedException if the request does - /// not contain a bearer token in the Authorization header. - - OAuth20Credentials(const HTTPRequest& request, const std::string& scheme); - /// Creates an OAuth20Credentials object from a HTTPRequest object. - /// - /// Extracts bearer token from the Authorization header, which must - /// use the given authorization scheme. - /// - /// Throws a NotAuthenticatedException if the request does - /// not contain a bearer token in the Authorization header. - - ~OAuth20Credentials(); - /// Destroys the HTTPCredentials. - - void setBearerToken(const std::string& bearerToken); - /// Sets the bearer token. - - const std::string& getBearerToken() const; - /// Returns the bearer token. - - void setScheme(const std::string& scheme); - /// Sets the Authorization header scheme. - - const std::string& getScheme() const; - /// Returns the Authorization header scheme. - - void authenticate(HTTPRequest& request); - /// Adds an Authorization header containing the bearer token to - /// the HTTPRequest. - - static const std::string SCHEME; - -protected: - void extractBearerToken(const HTTPRequest& request); - /// Extracts the bearer token from the HTTPRequest. - -private: - OAuth20Credentials(const OAuth20Credentials&); - OAuth20Credentials& operator = (const OAuth20Credentials&); - - std::string _bearerToken; - std::string _scheme; -}; - - -// -// inlines -// -inline const std::string& OAuth20Credentials::getBearerToken() const -{ - return _bearerToken; -} - - -inline const std::string& OAuth20Credentials::getScheme() const -{ - return _scheme; -} - - -} } // namespace Poco::Net - - -#endif // Net_OAuth20Credentials_INCLUDED +// +// OAuth20Credentials.h +// +// Library: Net +// Package: OAuth +// Module: OAuth20Credentials +// +// Definition of the OAuth20Credentials class. +// +// Copyright (c) 2014, Applied Informatics Software Engineering GmbH. +// and Contributors. +// +// SPDX-License-Identifier: BSL-1.0 +// + + +#ifndef Net_OAuth20Credentials_INCLUDED +#define Net_OAuth20Credentials_INCLUDED + + +#include "Poco/Net/Net.h" + + +namespace Poco { +namespace Net { + + +class HTTPRequest; + + +class Net_API OAuth20Credentials + /// This class implements OAuth 2.0 authentication for HTTP requests, + /// via Bearer tokens in the Authorization header, + /// according to RFC 6749 and RFC 6750. + /// + /// To add an Authorization header containing a bearer token + /// to a HTTPRequest object, create an OAuth20Credentials object + /// with the bearer token and call authenticate(). + /// + /// The bearer token can also be extracted from a HTTPRequest + /// by creating the OAuth20Credentials object with a HTTPRequest + /// object containing a "Bearer" Authorization header and + /// calling getBearerToken(). + /// + /// The authorization header scheme can be changed from + /// "Bearer" to a custom value. For example, GitHub uses + /// the "token" scheme. +{ +public: + OAuth20Credentials(); + /// Creates an empty OAuth20Credentials object. + + explicit OAuth20Credentials(const std::string& bearerToken); + /// Creates an OAuth20Credentials object with the given bearer token. + + OAuth20Credentials(const std::string& bearerToken, const std::string& scheme); + /// Creates an OAuth20Credentials object with the given bearer token + /// and authorization scheme, which overrides the default scheme ("Bearer"). + /// + /// This is useful for services like GitHub, which use "token" as scheme. + + explicit OAuth20Credentials(const HTTPRequest& request); + /// Creates an OAuth20Credentials object from a HTTPRequest object. + /// + /// Extracts bearer token from the Authorization header, which + /// must use the "Bearer" authorization scheme. + /// + /// Throws a NotAuthenticatedException if the request does + /// not contain a bearer token in the Authorization header. + + OAuth20Credentials(const HTTPRequest& request, const std::string& scheme); + /// Creates an OAuth20Credentials object from a HTTPRequest object. + /// + /// Extracts bearer token from the Authorization header, which must + /// use the given authorization scheme. + /// + /// Throws a NotAuthenticatedException if the request does + /// not contain a bearer token in the Authorization header. + + ~OAuth20Credentials(); + /// Destroys the HTTPCredentials. + + void setBearerToken(const std::string& bearerToken); + /// Sets the bearer token. + + const std::string& getBearerToken() const; + /// Returns the bearer token. + + void setScheme(const std::string& scheme); + /// Sets the Authorization header scheme. + + const std::string& getScheme() const; + /// Returns the Authorization header scheme. + + void authenticate(HTTPRequest& request); + /// Adds an Authorization header containing the bearer token to + /// the HTTPRequest. + + static const std::string SCHEME; + +protected: + void extractBearerToken(const HTTPRequest& request); + /// Extracts the bearer token from the HTTPRequest. + +private: + OAuth20Credentials(const OAuth20Credentials&); + OAuth20Credentials& operator = (const OAuth20Credentials&); + + std::string _bearerToken; + std::string _scheme; +}; + + +// +// inlines +// +inline const std::string& OAuth20Credentials::getBearerToken() const +{ + return _bearerToken; +} + + +inline const std::string& OAuth20Credentials::getScheme() const +{ + return _scheme; +} + + +} } // namespace Poco::Net + + +#endif // Net_OAuth20Credentials_INCLUDED diff --git a/contrib/libs/poco/Net/include/Poco/Net/POP3ClientSession.h b/contrib/libs/poco/Net/include/Poco/Net/POP3ClientSession.h index 05fc09f135..a4b12ce1ed 100644 --- a/contrib/libs/poco/Net/include/Poco/Net/POP3ClientSession.h +++ b/contrib/libs/poco/Net/include/Poco/Net/POP3ClientSession.h @@ -1,185 +1,185 @@ -// -// POP3ClientSession.h -// -// Library: Net -// Package: Mail -// Module: POP3ClientSession -// -// Definition of the POP3ClientSession class. -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Net_POP3ClientSession_INCLUDED -#define Net_POP3ClientSession_INCLUDED - - -#include "Poco/Net/Net.h" -#include "Poco/Net/DialogSocket.h" -#include "Poco/Timespan.h" -#include <ostream> -#include <vector> - - -namespace Poco { -namespace Net { - - -class MessageHeader; -class MailMessage; -class PartHandler; - - -class Net_API POP3ClientSession - /// This class implements an Post Office Protocol - /// Version 3 (POP3, RFC 1939) - /// client for receiving e-mail messages. -{ -public: - enum - { - POP3_PORT = 110 - }; - - struct MessageInfo - /// Information returned by listMessages(). - { - int id; - int size; - }; - - typedef std::vector<MessageInfo> MessageInfoVec; - - explicit POP3ClientSession(const StreamSocket& socket); - /// Creates the POP3ClientSession using - /// the given socket, which must be connected - /// to a POP3 server. - - POP3ClientSession(const std::string& host, Poco::UInt16 port = POP3_PORT); - /// Creates the POP3ClientSession using a socket connected - /// to the given host and port. - - virtual ~POP3ClientSession(); - /// Destroys the SMTPClientSession. - - void setTimeout(const Poco::Timespan& timeout); - /// Sets the timeout for socket read operations. - - Poco::Timespan getTimeout() const; - /// Returns the timeout for socket read operations. - - void login(const std::string& username, const std::string& password); - /// Logs in to the POP3 server by sending a USER command - /// followed by a PASS command. - /// - /// Throws a POP3Exception in case of a POP3-specific error, or a - /// NetException in case of a general network communication failure. - - void close(); - /// Sends a QUIT command and closes the connection to the server. - /// - /// Throws a POP3Exception in case of a POP3-specific error, or a - /// NetException in case of a general network communication failure. - - int messageCount(); - /// Sends a STAT command to determine the number of messages - /// available on the server and returns that number. - /// - /// Throws a POP3Exception in case of a POP3-specific error, or a - /// NetException in case of a general network communication failure. - - void listMessages(MessageInfoVec& messages); - /// Fills the given vector with the ids and sizes of all - /// messages available on the server. - /// - /// Throws a POP3Exception in case of a POP3-specific error, or a - /// NetException in case of a general network communication failure. - - void retrieveMessage(int id, MailMessage& message); - /// Retrieves the message with the given id from the server and - /// stores the raw message content in the message's - /// content string, available with message.getContent(). - /// - /// Throws a POP3Exception in case of a POP3-specific error, or a - /// NetException in case of a general network communication failure. - - void retrieveMessage(int id, MailMessage& message, PartHandler& handler); - /// Retrieves the message with the given id from the server and - /// stores it in message. - /// - /// If the message has multiple parts, the parts - /// are reported to the PartHandler. If the message - /// is not a multi-part message, the content is stored - /// in a string available by calling message.getContent(). - /// - /// Throws a POP3Exception in case of a POP3-specific error, or a - /// NetException in case of a general network communication failure. - - void retrieveMessage(int id, std::ostream& ostr); - /// Retrieves the raw message with the given id from the - /// server and copies it to the given output stream. - /// - /// Throws a POP3Exception in case of a POP3-specific error, or a - /// NetException in case of a general network communication failure. - - void retrieveHeader(int id, MessageHeader& header); - /// Retrieves the message header of the message with the - /// given id and stores it in header. - /// - /// For this to work, the server must support the TOP command. - /// - /// Throws a POP3Exception in case of a POP3-specific error, or a - /// NetException in case of a general network communication failure. - - void deleteMessage(int id); - /// Marks the message with the given ID for deletion. The message - /// will be deleted when the connection to the server is - /// closed by calling close(). - /// - /// Throws a POP3Exception in case of a POP3-specific error, or a - /// NetException in case of a general network communication failure. - - bool sendCommand(const std::string& command, std::string& response); - /// Sends the given command verbatim to the server - /// and waits for a response. - /// - /// Returns true if the response is positive, false otherwise. - /// - /// Throws a POP3Exception in case of a POP3-specific error, or a - /// NetException in case of a general network communication failure. - - bool sendCommand(const std::string& command, const std::string& arg, std::string& response); - /// Sends the given command verbatim to the server - /// and waits for a response. - /// - /// Returns true if the response is positive, false otherwise. - /// - /// Throws a POP3Exception in case of a POP3-specific error, or a - /// NetException in case of a general network communication failure. - - bool sendCommand(const std::string& command, const std::string& arg1, const std::string& arg2, std::string& response); - /// Sends the given command verbatim to the server - /// and waits for a response. - /// - /// Returns true if the response is positive, false otherwise. - /// - /// Throws a POP3Exception in case of a POP3-specific error, or a - /// NetException in case of a general network communication failure. - -protected: - static bool isPositive(const std::string& response); - -private: - DialogSocket _socket; - bool _isOpen; -}; - - -} } // namespace Poco::Net - - -#endif // Net_POP3ClientSession_INCLUDED +// +// POP3ClientSession.h +// +// Library: Net +// Package: Mail +// Module: POP3ClientSession +// +// Definition of the POP3ClientSession class. +// +// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. +// and Contributors. +// +// SPDX-License-Identifier: BSL-1.0 +// + + +#ifndef Net_POP3ClientSession_INCLUDED +#define Net_POP3ClientSession_INCLUDED + + +#include "Poco/Net/Net.h" +#include "Poco/Net/DialogSocket.h" +#include "Poco/Timespan.h" +#include <ostream> +#include <vector> + + +namespace Poco { +namespace Net { + + +class MessageHeader; +class MailMessage; +class PartHandler; + + +class Net_API POP3ClientSession + /// This class implements an Post Office Protocol + /// Version 3 (POP3, RFC 1939) + /// client for receiving e-mail messages. +{ +public: + enum + { + POP3_PORT = 110 + }; + + struct MessageInfo + /// Information returned by listMessages(). + { + int id; + int size; + }; + + typedef std::vector<MessageInfo> MessageInfoVec; + + explicit POP3ClientSession(const StreamSocket& socket); + /// Creates the POP3ClientSession using + /// the given socket, which must be connected + /// to a POP3 server. + + POP3ClientSession(const std::string& host, Poco::UInt16 port = POP3_PORT); + /// Creates the POP3ClientSession using a socket connected + /// to the given host and port. + + virtual ~POP3ClientSession(); + /// Destroys the SMTPClientSession. + + void setTimeout(const Poco::Timespan& timeout); + /// Sets the timeout for socket read operations. + + Poco::Timespan getTimeout() const; + /// Returns the timeout for socket read operations. + + void login(const std::string& username, const std::string& password); + /// Logs in to the POP3 server by sending a USER command + /// followed by a PASS command. + /// + /// Throws a POP3Exception in case of a POP3-specific error, or a + /// NetException in case of a general network communication failure. + + void close(); + /// Sends a QUIT command and closes the connection to the server. + /// + /// Throws a POP3Exception in case of a POP3-specific error, or a + /// NetException in case of a general network communication failure. + + int messageCount(); + /// Sends a STAT command to determine the number of messages + /// available on the server and returns that number. + /// + /// Throws a POP3Exception in case of a POP3-specific error, or a + /// NetException in case of a general network communication failure. + + void listMessages(MessageInfoVec& messages); + /// Fills the given vector with the ids and sizes of all + /// messages available on the server. + /// + /// Throws a POP3Exception in case of a POP3-specific error, or a + /// NetException in case of a general network communication failure. + + void retrieveMessage(int id, MailMessage& message); + /// Retrieves the message with the given id from the server and + /// stores the raw message content in the message's + /// content string, available with message.getContent(). + /// + /// Throws a POP3Exception in case of a POP3-specific error, or a + /// NetException in case of a general network communication failure. + + void retrieveMessage(int id, MailMessage& message, PartHandler& handler); + /// Retrieves the message with the given id from the server and + /// stores it in message. + /// + /// If the message has multiple parts, the parts + /// are reported to the PartHandler. If the message + /// is not a multi-part message, the content is stored + /// in a string available by calling message.getContent(). + /// + /// Throws a POP3Exception in case of a POP3-specific error, or a + /// NetException in case of a general network communication failure. + + void retrieveMessage(int id, std::ostream& ostr); + /// Retrieves the raw message with the given id from the + /// server and copies it to the given output stream. + /// + /// Throws a POP3Exception in case of a POP3-specific error, or a + /// NetException in case of a general network communication failure. + + void retrieveHeader(int id, MessageHeader& header); + /// Retrieves the message header of the message with the + /// given id and stores it in header. + /// + /// For this to work, the server must support the TOP command. + /// + /// Throws a POP3Exception in case of a POP3-specific error, or a + /// NetException in case of a general network communication failure. + + void deleteMessage(int id); + /// Marks the message with the given ID for deletion. The message + /// will be deleted when the connection to the server is + /// closed by calling close(). + /// + /// Throws a POP3Exception in case of a POP3-specific error, or a + /// NetException in case of a general network communication failure. + + bool sendCommand(const std::string& command, std::string& response); + /// Sends the given command verbatim to the server + /// and waits for a response. + /// + /// Returns true if the response is positive, false otherwise. + /// + /// Throws a POP3Exception in case of a POP3-specific error, or a + /// NetException in case of a general network communication failure. + + bool sendCommand(const std::string& command, const std::string& arg, std::string& response); + /// Sends the given command verbatim to the server + /// and waits for a response. + /// + /// Returns true if the response is positive, false otherwise. + /// + /// Throws a POP3Exception in case of a POP3-specific error, or a + /// NetException in case of a general network communication failure. + + bool sendCommand(const std::string& command, const std::string& arg1, const std::string& arg2, std::string& response); + /// Sends the given command verbatim to the server + /// and waits for a response. + /// + /// Returns true if the response is positive, false otherwise. + /// + /// Throws a POP3Exception in case of a POP3-specific error, or a + /// NetException in case of a general network communication failure. + +protected: + static bool isPositive(const std::string& response); + +private: + DialogSocket _socket; + bool _isOpen; +}; + + +} } // namespace Poco::Net + + +#endif // Net_POP3ClientSession_INCLUDED diff --git a/contrib/libs/poco/Net/include/Poco/Net/ParallelSocketAcceptor.h b/contrib/libs/poco/Net/include/Poco/Net/ParallelSocketAcceptor.h index 458bf4a692..514bcfbfa1 100644 --- a/contrib/libs/poco/Net/include/Poco/Net/ParallelSocketAcceptor.h +++ b/contrib/libs/poco/Net/include/Poco/Net/ParallelSocketAcceptor.h @@ -1,233 +1,233 @@ -// -// ParallelSocketAcceptor.h -// -// Library: Net -// Package: Reactor -// Module: ParallelSocketAcceptor -// -// Definition of the ParallelSocketAcceptor class. -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Net_ParallelSocketAcceptor_INCLUDED -#define Net_ParallelSocketAcceptor_INCLUDED - - -#include "Poco/Net/ParallelSocketReactor.h" -#include "Poco/Net/StreamSocket.h" -#include "Poco/Net/ServerSocket.h" -#include "Poco/Environment.h" -#include "Poco/NObserver.h" -#include "Poco/SharedPtr.h" -#include <vector> - - -using Poco::Net::Socket; -using Poco::Net::SocketReactor; -using Poco::Net::ServerSocket; -using Poco::Net::StreamSocket; -using Poco::NObserver; -using Poco::AutoPtr; - - -namespace Poco { -namespace Net { - - -template <class ServiceHandler, class SR> -class ParallelSocketAcceptor - /// This class implements the Acceptor part of the Acceptor-Connector design pattern. - /// Only the difference from single-threaded version is documented here, For full - /// description see Poco::Net::SocketAcceptor documentation. - /// - /// This is a multi-threaded version of SocketAcceptor, it differs from the - /// single-threaded version in number of reactors (defaulting to number of processors) - /// that can be specified at construction time and is rotated in a round-robin fashion - /// by event handler. See ParallelSocketAcceptor::onAccept and - /// ParallelSocketAcceptor::createServiceHandler documentation and implementation for - /// details. -{ -public: - typedef Poco::Net::ParallelSocketReactor<SR> ParallelReactor; - - explicit ParallelSocketAcceptor(ServerSocket& socket, - unsigned threads = Poco::Environment::processorCount()): - _socket(socket), - _pReactor(0), - _threads(threads), - _next(0) - /// Creates a ParallelSocketAcceptor using the given ServerSocket, - /// sets number of threads and populates the reactors vector. - { - init(); - } - - ParallelSocketAcceptor(ServerSocket& socket, - SocketReactor& reactor, - unsigned threads = Poco::Environment::processorCount()): - _socket(socket), - _pReactor(&reactor), - _threads(threads), - _next(0) - /// Creates a ParallelSocketAcceptor using the given ServerSocket, sets the - /// number of threads, populates the reactors vector and registers itself - /// with the given SocketReactor. - { - init(); - _pReactor->addEventHandler(_socket, - Poco::Observer<ParallelSocketAcceptor, - ReadableNotification>(*this, &ParallelSocketAcceptor::onAccept)); - } - - virtual ~ParallelSocketAcceptor() - /// Destroys the ParallelSocketAcceptor. - { - try - { - if (_pReactor) - { - _pReactor->removeEventHandler(_socket, - Poco::Observer<ParallelSocketAcceptor, - ReadableNotification>(*this, &ParallelSocketAcceptor::onAccept)); - } - } - catch (...) - { - poco_unexpected(); - } - } - - 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); - } - } - - virtual void registerAcceptor(SocketReactor& reactor) - /// Registers the ParallelSocketAcceptor with a SocketReactor. +// +// ParallelSocketAcceptor.h +// +// Library: Net +// Package: Reactor +// Module: ParallelSocketAcceptor +// +// Definition of the ParallelSocketAcceptor class. +// +// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. +// and Contributors. +// +// SPDX-License-Identifier: BSL-1.0 +// + + +#ifndef Net_ParallelSocketAcceptor_INCLUDED +#define Net_ParallelSocketAcceptor_INCLUDED + + +#include "Poco/Net/ParallelSocketReactor.h" +#include "Poco/Net/StreamSocket.h" +#include "Poco/Net/ServerSocket.h" +#include "Poco/Environment.h" +#include "Poco/NObserver.h" +#include "Poco/SharedPtr.h" +#include <vector> + + +using Poco::Net::Socket; +using Poco::Net::SocketReactor; +using Poco::Net::ServerSocket; +using Poco::Net::StreamSocket; +using Poco::NObserver; +using Poco::AutoPtr; + + +namespace Poco { +namespace Net { + + +template <class ServiceHandler, class SR> +class ParallelSocketAcceptor + /// This class implements the Acceptor part of the Acceptor-Connector design pattern. + /// Only the difference from single-threaded version is documented here, For full + /// description see Poco::Net::SocketAcceptor documentation. + /// + /// This is a multi-threaded version of SocketAcceptor, it differs from the + /// single-threaded version in number of reactors (defaulting to number of processors) + /// that can be specified at construction time and is rotated in a round-robin fashion + /// by event handler. See ParallelSocketAcceptor::onAccept and + /// ParallelSocketAcceptor::createServiceHandler documentation and implementation for + /// details. +{ +public: + typedef Poco::Net::ParallelSocketReactor<SR> ParallelReactor; + + explicit ParallelSocketAcceptor(ServerSocket& socket, + unsigned threads = Poco::Environment::processorCount()): + _socket(socket), + _pReactor(0), + _threads(threads), + _next(0) + /// Creates a ParallelSocketAcceptor using the given ServerSocket, + /// sets number of threads and populates the reactors vector. + { + init(); + } + + ParallelSocketAcceptor(ServerSocket& socket, + SocketReactor& reactor, + unsigned threads = Poco::Environment::processorCount()): + _socket(socket), + _pReactor(&reactor), + _threads(threads), + _next(0) + /// Creates a ParallelSocketAcceptor using the given ServerSocket, sets the + /// number of threads, populates the reactors vector and registers itself + /// with the given SocketReactor. + { + init(); + _pReactor->addEventHandler(_socket, + Poco::Observer<ParallelSocketAcceptor, + ReadableNotification>(*this, &ParallelSocketAcceptor::onAccept)); + } + + virtual ~ParallelSocketAcceptor() + /// Destroys the ParallelSocketAcceptor. + { + try + { + if (_pReactor) + { + _pReactor->removeEventHandler(_socket, + Poco::Observer<ParallelSocketAcceptor, + ReadableNotification>(*this, &ParallelSocketAcceptor::onAccept)); + } + } + catch (...) + { + poco_unexpected(); + } + } + + 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); + } + } + + virtual void registerAcceptor(SocketReactor& reactor) + /// Registers the ParallelSocketAcceptor with a SocketReactor. + /// + /// A subclass can override this function to e.g. + /// register an event handler for timeout event. /// - /// A subclass can override this function to e.g. - /// register an event handler for timeout event. - /// - /// The overriding method must either call the base class - /// implementation or register the accept handler on its own. - { - if (_pReactor) - throw Poco::InvalidAccessException("Acceptor already registered."); - - _pReactor = &reactor; - _pReactor->addEventHandler(_socket, - Poco::Observer<ParallelSocketAcceptor, - ReadableNotification>(*this, &ParallelSocketAcceptor::onAccept)); - } - - virtual void unregisterAcceptor() - /// Unregisters the ParallelSocketAcceptor. + /// 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)); + } + + virtual void unregisterAcceptor() + /// Unregisters the ParallelSocketAcceptor. + /// + /// A subclass can override this function to e.g. + /// unregister its event handler for a timeout event. /// - /// A subclass can override this function to e.g. - /// unregister its event handler for a timeout event. - /// - /// The overriding method must either call the base class - /// implementation or unregister the accept handler on its own. - { - if (_pReactor) - { - _pReactor->removeEventHandler(_socket, - Poco::Observer<ParallelSocketAcceptor, - ReadableNotification>(*this, &ParallelSocketAcceptor::onAccept)); - } - } - - void onAccept(ReadableNotification* pNotification) - /// Accepts connection and creates event handler. - { - pNotification->release(); - StreamSocket sock = _socket.acceptConnection(); - _pReactor->wakeUp(); - createServiceHandler(sock); - } - -protected: - virtual ServiceHandler* createServiceHandler(StreamSocket& socket) - /// Create and initialize a new ServiceHandler instance. - /// - /// Subclasses can override this method. - { - std::size_t next = _next++; - if (_next == _reactors.size()) _next = 0; - _reactors[next]->wakeUp(); - return new ServiceHandler(socket, *_reactors[next]); - } - - SocketReactor* reactor() - /// Returns a pointer to the SocketReactor where - /// this SocketAcceptor is registered. - /// - /// The pointer may be null. - { - return _pReactor; - } - - Socket& socket() - /// Returns a reference to the SocketAcceptor's socket. - { - return _socket; - } - - void init() - /// Populates the reactors vector. - { - poco_assert (_threads > 0); - - for (unsigned i = 0; i < _threads; ++i) - _reactors.push_back(new ParallelReactor); - } - - typedef std::vector<typename ParallelReactor::Ptr> ReactorVec; - - ReactorVec& reactors() - /// Returns reference to vector of reactors. - { - return _reactors; - } - - SocketReactor* reactor(std::size_t idx) - /// Returns reference to the reactor at position idx. - { - return _reactors.at(idx).get(); - } - - std::size_t& next() - /// Returns reference to the next reactor index. - { - return _next; - } - -private: - ParallelSocketAcceptor(); - ParallelSocketAcceptor(const ParallelSocketAcceptor&); - ParallelSocketAcceptor& operator = (const ParallelSocketAcceptor&); - - ServerSocket _socket; - SocketReactor* _pReactor; - unsigned _threads; - ReactorVec _reactors; - std::size_t _next; -}; - - -} } // namespace Poco::Net - - -#endif // Net_ParallelSocketAcceptor_INCLUDED + /// The overriding method must either call the base class + /// implementation or unregister the accept handler on its own. + { + if (_pReactor) + { + _pReactor->removeEventHandler(_socket, + Poco::Observer<ParallelSocketAcceptor, + ReadableNotification>(*this, &ParallelSocketAcceptor::onAccept)); + } + } + + void onAccept(ReadableNotification* pNotification) + /// Accepts connection and creates event handler. + { + pNotification->release(); + StreamSocket sock = _socket.acceptConnection(); + _pReactor->wakeUp(); + createServiceHandler(sock); + } + +protected: + virtual ServiceHandler* createServiceHandler(StreamSocket& socket) + /// Create and initialize a new ServiceHandler instance. + /// + /// Subclasses can override this method. + { + std::size_t next = _next++; + if (_next == _reactors.size()) _next = 0; + _reactors[next]->wakeUp(); + return new ServiceHandler(socket, *_reactors[next]); + } + + SocketReactor* reactor() + /// Returns a pointer to the SocketReactor where + /// this SocketAcceptor is registered. + /// + /// The pointer may be null. + { + return _pReactor; + } + + Socket& socket() + /// Returns a reference to the SocketAcceptor's socket. + { + return _socket; + } + + void init() + /// Populates the reactors vector. + { + poco_assert (_threads > 0); + + for (unsigned i = 0; i < _threads; ++i) + _reactors.push_back(new ParallelReactor); + } + + typedef std::vector<typename ParallelReactor::Ptr> ReactorVec; + + ReactorVec& reactors() + /// Returns reference to vector of reactors. + { + return _reactors; + } + + SocketReactor* reactor(std::size_t idx) + /// Returns reference to the reactor at position idx. + { + return _reactors.at(idx).get(); + } + + std::size_t& next() + /// Returns reference to the next reactor index. + { + return _next; + } + +private: + ParallelSocketAcceptor(); + ParallelSocketAcceptor(const ParallelSocketAcceptor&); + ParallelSocketAcceptor& operator = (const ParallelSocketAcceptor&); + + ServerSocket _socket; + SocketReactor* _pReactor; + unsigned _threads; + ReactorVec _reactors; + std::size_t _next; +}; + + +} } // namespace Poco::Net + + +#endif // Net_ParallelSocketAcceptor_INCLUDED diff --git a/contrib/libs/poco/Net/include/Poco/Net/ParallelSocketReactor.h b/contrib/libs/poco/Net/include/Poco/Net/ParallelSocketReactor.h index 7e65f553eb..a7631ce1d9 100644 --- a/contrib/libs/poco/Net/include/Poco/Net/ParallelSocketReactor.h +++ b/contrib/libs/poco/Net/include/Poco/Net/ParallelSocketReactor.h @@ -1,90 +1,90 @@ -// -// ParallelSocketReactor.h -// -// Library: Net -// Package: Reactor -// Module: ParallelSocketReactor -// -// Definition of the ParallelSocketReactor class. -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Net_ParallelSocketReactor_INCLUDED -#define Net_ParallelSocketReactor_INCLUDED - - -#include "Poco/Net/SocketReactor.h" -#include "Poco/Net/SocketNotification.h" -#include "Poco/Net/StreamSocket.h" -#include "Poco/Net/ServerSocket.h" -#include "Poco/NObserver.h" -#include "Poco/Thread.h" -#include "Poco/SharedPtr.h" - - -using Poco::Net::Socket; -using Poco::Net::SocketReactor; -using Poco::Net::ReadableNotification; -using Poco::Net::ShutdownNotification; -using Poco::Net::ServerSocket; -using Poco::Net::StreamSocket; -using Poco::NObserver; -using Poco::AutoPtr; -using Poco::Thread; - - -namespace Poco { -namespace Net { - - -template <class SR> -class ParallelSocketReactor: public SR -{ -public: - typedef Poco::SharedPtr<ParallelSocketReactor> Ptr; - - ParallelSocketReactor() - { - _thread.start(*this); - } - - ParallelSocketReactor(const Poco::Timespan& timeout): - SR(timeout) - { - _thread.start(*this); - } - - ~ParallelSocketReactor() - { - try - { - this->stop(); - _thread.join(); - } - catch (...) - { - poco_unexpected(); - } - } - -protected: - void onIdle() - { - SR::onIdle(); - Poco::Thread::yield(); - } - -private: - Poco::Thread _thread; -}; - - -} } // namespace Poco::Net - - -#endif // Net_ParallelSocketReactor_INCLUDED +// +// ParallelSocketReactor.h +// +// Library: Net +// Package: Reactor +// Module: ParallelSocketReactor +// +// Definition of the ParallelSocketReactor class. +// +// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. +// and Contributors. +// +// SPDX-License-Identifier: BSL-1.0 +// + + +#ifndef Net_ParallelSocketReactor_INCLUDED +#define Net_ParallelSocketReactor_INCLUDED + + +#include "Poco/Net/SocketReactor.h" +#include "Poco/Net/SocketNotification.h" +#include "Poco/Net/StreamSocket.h" +#include "Poco/Net/ServerSocket.h" +#include "Poco/NObserver.h" +#include "Poco/Thread.h" +#include "Poco/SharedPtr.h" + + +using Poco::Net::Socket; +using Poco::Net::SocketReactor; +using Poco::Net::ReadableNotification; +using Poco::Net::ShutdownNotification; +using Poco::Net::ServerSocket; +using Poco::Net::StreamSocket; +using Poco::NObserver; +using Poco::AutoPtr; +using Poco::Thread; + + +namespace Poco { +namespace Net { + + +template <class SR> +class ParallelSocketReactor: public SR +{ +public: + typedef Poco::SharedPtr<ParallelSocketReactor> Ptr; + + ParallelSocketReactor() + { + _thread.start(*this); + } + + ParallelSocketReactor(const Poco::Timespan& timeout): + SR(timeout) + { + _thread.start(*this); + } + + ~ParallelSocketReactor() + { + try + { + this->stop(); + _thread.join(); + } + catch (...) + { + poco_unexpected(); + } + } + +protected: + void onIdle() + { + SR::onIdle(); + Poco::Thread::yield(); + } + +private: + Poco::Thread _thread; +}; + + +} } // namespace Poco::Net + + +#endif // Net_ParallelSocketReactor_INCLUDED diff --git a/contrib/libs/poco/Net/include/Poco/Net/PartHandler.h b/contrib/libs/poco/Net/include/Poco/Net/PartHandler.h index 6d00892fa7..941dd0305c 100644 --- a/contrib/libs/poco/Net/include/Poco/Net/PartHandler.h +++ b/contrib/libs/poco/Net/include/Poco/Net/PartHandler.h @@ -1,68 +1,68 @@ -// -// PartHandler.h -// -// Library: Net -// Package: Messages -// Module: PartHandler -// -// Definition of the PartHandler class. -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Net_PartHandler_INCLUDED -#define Net_PartHandler_INCLUDED - - -#include "Poco/Net/Net.h" -#include <istream> - - -namespace Poco { -namespace Net { - - -class MessageHeader; - - -class Net_API PartHandler - /// The base class for all part or attachment handlers. - /// - /// Part handlers are used for handling email parts and - /// attachments in MIME multipart messages, as well as file - /// uploads via HTML forms. - /// - /// Subclasses must override handlePart(). -{ -public: - virtual void handlePart(const MessageHeader& header, std::istream& stream) = 0; - /// Called for every part encountered during the processing - /// of an email message or an uploaded HTML form. - /// - /// Information about the part can be extracted from - /// the given message header. What information can be obtained - /// from header depends on the kind of part. - /// - /// The content of the part can be read from stream. - -protected: - PartHandler(); - /// Creates the PartHandler. - - virtual ~PartHandler(); - /// Destroys the PartHandler. - -private: - PartHandler(const PartHandler&); - PartHandler& operator = (const PartHandler&); -}; - - -} } // namespace Poco::Net - - -#endif // Net_PartHandler_INCLUDED +// +// PartHandler.h +// +// Library: Net +// Package: Messages +// Module: PartHandler +// +// Definition of the PartHandler class. +// +// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. +// and Contributors. +// +// SPDX-License-Identifier: BSL-1.0 +// + + +#ifndef Net_PartHandler_INCLUDED +#define Net_PartHandler_INCLUDED + + +#include "Poco/Net/Net.h" +#include <istream> + + +namespace Poco { +namespace Net { + + +class MessageHeader; + + +class Net_API PartHandler + /// The base class for all part or attachment handlers. + /// + /// Part handlers are used for handling email parts and + /// attachments in MIME multipart messages, as well as file + /// uploads via HTML forms. + /// + /// Subclasses must override handlePart(). +{ +public: + virtual void handlePart(const MessageHeader& header, std::istream& stream) = 0; + /// Called for every part encountered during the processing + /// of an email message or an uploaded HTML form. + /// + /// Information about the part can be extracted from + /// the given message header. What information can be obtained + /// from header depends on the kind of part. + /// + /// The content of the part can be read from stream. + +protected: + PartHandler(); + /// Creates the PartHandler. + + virtual ~PartHandler(); + /// Destroys the PartHandler. + +private: + PartHandler(const PartHandler&); + PartHandler& operator = (const PartHandler&); +}; + + +} } // namespace Poco::Net + + +#endif // Net_PartHandler_INCLUDED diff --git a/contrib/libs/poco/Net/include/Poco/Net/PartSource.h b/contrib/libs/poco/Net/include/Poco/Net/PartSource.h index e04c78cf64..06978d74cd 100644 --- a/contrib/libs/poco/Net/include/Poco/Net/PartSource.h +++ b/contrib/libs/poco/Net/include/Poco/Net/PartSource.h @@ -1,110 +1,110 @@ -// -// PartSource.h -// -// Library: Net -// Package: Messages -// Module: PartSource -// -// Definition of the PartSource class. -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Net_PartSource_INCLUDED -#define Net_PartSource_INCLUDED - - -#include "Poco/Net/Net.h" -#include "Poco/Net/MessageHeader.h" -#include <istream> - - -namespace Poco { -namespace Net { - - -class Net_API PartSource - /// This abstract class is used for adding parts or attachments - /// to mail messages, as well as for uploading files as part of a HTML form. -{ -public: - virtual std::istream& stream() = 0; - /// Returns an input stream for reading the - /// part data. - /// - /// Subclasses must override this method. - - virtual const std::string& filename() const; - /// Returns the filename for the part or attachment. - /// - /// May be overridded by subclasses. The default - /// implementation returns an empty string. - - const std::string& mediaType() const; - /// Returns the MIME media type for this part or attachment. - - MessageHeader& headers(); - /// Returns a MessageHeader containing additional header - /// fields for the part. - - const MessageHeader& headers() const; - /// Returns a MessageHeader containing additional header - /// fields for the part. - - virtual std::streamsize getContentLength() const; - /// Returns the content length for this part - /// which may be UNKNOWN_CONTENT_LENGTH if - /// not available. - - virtual ~PartSource(); - /// Destroys the PartSource. - - static const int UNKNOWN_CONTENT_LENGTH; - -protected: - PartSource(); - /// Creates the PartSource, using - /// the application/octet-stream MIME type. - - PartSource(const std::string& mediaType); - /// Creates the PartSource, using the - /// given MIME type. - -private: - PartSource(const PartSource&); - PartSource& operator = (const PartSource&); - - std::string _mediaType; - MessageHeader _headers; -}; - - -// -// inlines -// -inline const std::string& PartSource::mediaType() const -{ - return _mediaType; -} - - -inline MessageHeader& PartSource::headers() -{ - return _headers; -} - - -inline const MessageHeader& PartSource::headers() const -{ - return _headers; -} - - -} } // namespace Poco::Net - - -#endif // Net_PartSource_INCLUDED +// +// PartSource.h +// +// Library: Net +// Package: Messages +// Module: PartSource +// +// Definition of the PartSource class. +// +// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. +// and Contributors. +// +// SPDX-License-Identifier: BSL-1.0 +// + + +#ifndef Net_PartSource_INCLUDED +#define Net_PartSource_INCLUDED + + +#include "Poco/Net/Net.h" +#include "Poco/Net/MessageHeader.h" +#include <istream> + + +namespace Poco { +namespace Net { + + +class Net_API PartSource + /// This abstract class is used for adding parts or attachments + /// to mail messages, as well as for uploading files as part of a HTML form. +{ +public: + virtual std::istream& stream() = 0; + /// Returns an input stream for reading the + /// part data. + /// + /// Subclasses must override this method. + + virtual const std::string& filename() const; + /// Returns the filename for the part or attachment. + /// + /// May be overridded by subclasses. The default + /// implementation returns an empty string. + + const std::string& mediaType() const; + /// Returns the MIME media type for this part or attachment. + + MessageHeader& headers(); + /// Returns a MessageHeader containing additional header + /// fields for the part. + + const MessageHeader& headers() const; + /// Returns a MessageHeader containing additional header + /// fields for the part. + + virtual std::streamsize getContentLength() const; + /// Returns the content length for this part + /// which may be UNKNOWN_CONTENT_LENGTH if + /// not available. + + virtual ~PartSource(); + /// Destroys the PartSource. + + static const int UNKNOWN_CONTENT_LENGTH; + +protected: + PartSource(); + /// Creates the PartSource, using + /// the application/octet-stream MIME type. + + PartSource(const std::string& mediaType); + /// Creates the PartSource, using the + /// given MIME type. + +private: + PartSource(const PartSource&); + PartSource& operator = (const PartSource&); + + std::string _mediaType; + MessageHeader _headers; +}; + + +// +// inlines +// +inline const std::string& PartSource::mediaType() const +{ + return _mediaType; +} + + +inline MessageHeader& PartSource::headers() +{ + return _headers; +} + + +inline const MessageHeader& PartSource::headers() const +{ + return _headers; +} + + +} } // namespace Poco::Net + + +#endif // Net_PartSource_INCLUDED diff --git a/contrib/libs/poco/Net/include/Poco/Net/PartStore.h b/contrib/libs/poco/Net/include/Poco/Net/PartStore.h index cdfb23b588..a7be187c80 100644 --- a/contrib/libs/poco/Net/include/Poco/Net/PartStore.h +++ b/contrib/libs/poco/Net/include/Poco/Net/PartStore.h @@ -1,106 +1,106 @@ -// -// PartStore.h -// -// Library: Net -// Package: Messages -// Module: PartStore -// -// Definition of the PartStore class. -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Net_PartStore_INCLUDED -#define Net_PartStore_INCLUDED - - -#include "Poco/Net/Net.h" -#include "Poco/Net/PartSource.h" -#include "Poco/FileStream.h" - - -namespace Poco { -namespace Net { - - -class Net_API PartStore: public PartSource - /// A parent class for part stores storing message parts. -{ -public: - PartStore(const std::string& mediaType); - /// Creates the PartStore for the given MIME type. - - ~PartStore(); - /// Destroys the PartFileStore. - -private: - PartStore(); -}; - - -class Net_API FilePartStore: public PartStore - /// An implementation of PartSource for persisting - /// parts (usually email attachment files) to the file system. -{ -public: - FilePartStore(const std::string& content, const std::string& mediaType, const std::string& filename = ""); - /// Creates the FilePartStore for the given MIME type. - /// For security purposes, attachment filename is NOT used to save file to the file system. - /// A unique temporary file name is used to persist the file. - /// The given filename parameter is the message part (attachment) filename (see filename()) only. - /// - /// Throws an exception if the file cannot be opened. - - ~FilePartStore(); - /// Destroys the FilePartStore. - - std::istream& stream(); - /// Returns a file input stream for the given file. - - const std::string& filename() const; - /// Returns the filename portion of the path. - /// This is the name under which the file is known - /// to the user of this class (typically, MailMessage - /// class). The real name of the file as saved - /// to the filesystem can be obtained by calling - /// path() member function. - - const std::string& path() const; - /// Returns the full path to the file as saved - /// to the file system. For security reasons, - /// file is not saved under the real file name - /// (as specified by the user). - -private: - std::string _filename; - std::string _path; - Poco::FileStream _fstr; -}; - - -class PartStoreFactory - /// Parent factory class for part stores creation. -{ -public: - virtual PartSource* createPartStore(const std::string& content, const std::string& mediaType, const std::string& filename = "") = 0; -}; - - -class FilePartStoreFactory: public PartStoreFactory -{ -public: - PartSource* createPartStore(const std::string& content, const std::string& mediaType, const std::string& filename = "") - { - return new FilePartStore(content, mediaType, filename); - } -}; - - -} } // namespace Poco::Net - - -#endif // Net_PartStore_INCLUDED +// +// PartStore.h +// +// Library: Net +// Package: Messages +// Module: PartStore +// +// Definition of the PartStore class. +// +// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. +// and Contributors. +// +// SPDX-License-Identifier: BSL-1.0 +// + + +#ifndef Net_PartStore_INCLUDED +#define Net_PartStore_INCLUDED + + +#include "Poco/Net/Net.h" +#include "Poco/Net/PartSource.h" +#include "Poco/FileStream.h" + + +namespace Poco { +namespace Net { + + +class Net_API PartStore: public PartSource + /// A parent class for part stores storing message parts. +{ +public: + PartStore(const std::string& mediaType); + /// Creates the PartStore for the given MIME type. + + ~PartStore(); + /// Destroys the PartFileStore. + +private: + PartStore(); +}; + + +class Net_API FilePartStore: public PartStore + /// An implementation of PartSource for persisting + /// parts (usually email attachment files) to the file system. +{ +public: + FilePartStore(const std::string& content, const std::string& mediaType, const std::string& filename = ""); + /// Creates the FilePartStore for the given MIME type. + /// For security purposes, attachment filename is NOT used to save file to the file system. + /// A unique temporary file name is used to persist the file. + /// The given filename parameter is the message part (attachment) filename (see filename()) only. + /// + /// Throws an exception if the file cannot be opened. + + ~FilePartStore(); + /// Destroys the FilePartStore. + + std::istream& stream(); + /// Returns a file input stream for the given file. + + const std::string& filename() const; + /// Returns the filename portion of the path. + /// This is the name under which the file is known + /// to the user of this class (typically, MailMessage + /// class). The real name of the file as saved + /// to the filesystem can be obtained by calling + /// path() member function. + + const std::string& path() const; + /// Returns the full path to the file as saved + /// to the file system. For security reasons, + /// file is not saved under the real file name + /// (as specified by the user). + +private: + std::string _filename; + std::string _path; + Poco::FileStream _fstr; +}; + + +class PartStoreFactory + /// Parent factory class for part stores creation. +{ +public: + virtual PartSource* createPartStore(const std::string& content, const std::string& mediaType, const std::string& filename = "") = 0; +}; + + +class FilePartStoreFactory: public PartStoreFactory +{ +public: + PartSource* createPartStore(const std::string& content, const std::string& mediaType, const std::string& filename = "") + { + return new FilePartStore(content, mediaType, filename); + } +}; + + +} } // namespace Poco::Net + + +#endif // Net_PartStore_INCLUDED diff --git a/contrib/libs/poco/Net/include/Poco/Net/PollSet.h b/contrib/libs/poco/Net/include/Poco/Net/PollSet.h index 1e4c60201c..9b24e13591 100644 --- a/contrib/libs/poco/Net/include/Poco/Net/PollSet.h +++ b/contrib/libs/poco/Net/include/Poco/Net/PollSet.h @@ -1,86 +1,86 @@ -// -// PollSet.h -// -// Library: Net -// Package: Sockets -// Module: PollSet -// -// Definition of the PollSet class. -// -// Copyright (c) 2016, Applied Informatics Software Engineering GmbH. -// All rights reserved. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Net_PollSet_INCLUDED -#define Net_PollSet_INCLUDED - - -#include "Poco/Net/Socket.h" -#include <map> - - -namespace Poco { -namespace Net { - - -class PollSetImpl; - - -class Net_API PollSet - /// A set of sockets that can be efficiently polled as a whole. - /// - /// If supported, PollSet is implemented using epoll (Linux) or - /// poll (BSD) APIs. A fallback implementation using select() - /// is also provided. -{ -public: - enum Mode - { - POLL_READ = 0x01, - POLL_WRITE = 0x02, - POLL_ERROR = 0x04 - }; - - typedef std::map<Poco::Net::Socket, int> SocketModeMap; - - PollSet(); - /// Creates an empty PollSet. - - ~PollSet(); - /// Destroys the PollSet. - - void add(const Poco::Net::Socket& socket, int mode); - /// Adds the given socket to the set, for polling with - /// the given mode, which can be an OR'd combination of - /// POLL_READ, POLL_WRITE and POLL_ERROR. - - void remove(const Poco::Net::Socket& socket); - /// Removes the given socket from the set. - - void update(const Poco::Net::Socket& socket, int mode); - /// Updates the mode of the given socket. - - void clear(); - /// Removes all sockets from the PollSet. - - SocketModeMap poll(const Poco::Timespan& timeout); - /// Waits until the state of at least one of the PollSet's sockets - /// changes accordingly to its mode, or the timeout expires. - /// Returns a PollMap containing the sockets that have had - /// their state changed. - -private: - PollSetImpl* _pImpl; - - PollSet(const PollSet&); - PollSet& operator = (const PollSet&); -}; - - -} } // namespace Poco::Net - - -#endif // Net_PollSet_INCLUDED +// +// PollSet.h +// +// Library: Net +// Package: Sockets +// Module: PollSet +// +// Definition of the PollSet class. +// +// Copyright (c) 2016, Applied Informatics Software Engineering GmbH. +// All rights reserved. +// +// SPDX-License-Identifier: BSL-1.0 +// + + +#ifndef Net_PollSet_INCLUDED +#define Net_PollSet_INCLUDED + + +#include "Poco/Net/Socket.h" +#include <map> + + +namespace Poco { +namespace Net { + + +class PollSetImpl; + + +class Net_API PollSet + /// A set of sockets that can be efficiently polled as a whole. + /// + /// If supported, PollSet is implemented using epoll (Linux) or + /// poll (BSD) APIs. A fallback implementation using select() + /// is also provided. +{ +public: + enum Mode + { + POLL_READ = 0x01, + POLL_WRITE = 0x02, + POLL_ERROR = 0x04 + }; + + typedef std::map<Poco::Net::Socket, int> SocketModeMap; + + PollSet(); + /// Creates an empty PollSet. + + ~PollSet(); + /// Destroys the PollSet. + + void add(const Poco::Net::Socket& socket, int mode); + /// Adds the given socket to the set, for polling with + /// the given mode, which can be an OR'd combination of + /// POLL_READ, POLL_WRITE and POLL_ERROR. + + void remove(const Poco::Net::Socket& socket); + /// Removes the given socket from the set. + + void update(const Poco::Net::Socket& socket, int mode); + /// Updates the mode of the given socket. + + void clear(); + /// Removes all sockets from the PollSet. + + SocketModeMap poll(const Poco::Timespan& timeout); + /// Waits until the state of at least one of the PollSet's sockets + /// changes accordingly to its mode, or the timeout expires. + /// Returns a PollMap containing the sockets that have had + /// their state changed. + +private: + PollSetImpl* _pImpl; + + PollSet(const PollSet&); + PollSet& operator = (const PollSet&); +}; + + +} } // namespace Poco::Net + + +#endif // Net_PollSet_INCLUDED diff --git a/contrib/libs/poco/Net/include/Poco/Net/QuotedPrintableDecoder.h b/contrib/libs/poco/Net/include/Poco/Net/QuotedPrintableDecoder.h index b9044f1513..b456660f6e 100644 --- a/contrib/libs/poco/Net/include/Poco/Net/QuotedPrintableDecoder.h +++ b/contrib/libs/poco/Net/include/Poco/Net/QuotedPrintableDecoder.h @@ -1,86 +1,86 @@ -// -// QuotedPrintableDecoder.h -// -// Library: Net -// Package: Messages -// Module: QuotedPrintableDecoder -// -// Definition of the QuotedPrintableDecoder class. -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Net_QuotedPrintableDecoder_INCLUDED -#define Net_QuotedPrintableDecoder_INCLUDED - - -#include "Poco/Net/Net.h" -#include "Poco/UnbufferedStreamBuf.h" -#include <istream> - - -namespace Poco { -namespace Net { - - -class Net_API QuotedPrintableDecoderBuf: public Poco::UnbufferedStreamBuf - /// This streambuf decodes all quoted-printable (see RFC 2045) - /// encoded data read from the istream connected to it. - /// - /// Note: For performance reasons, the characters - /// are read directly from the given istream's - /// underlying streambuf, so the state - /// of the istream will not reflect that of - /// its streambuf. -{ -public: - QuotedPrintableDecoderBuf(std::istream& istr); - ~QuotedPrintableDecoderBuf(); - -private: - int readFromDevice(); - - std::streambuf& _buf; -}; - - -class Net_API QuotedPrintableDecoderIOS: public virtual std::ios - /// The base class for QuotedPrintableDecoder. - /// - /// This class is needed to ensure the correct initialization - /// order of the stream buffer and base classes. -{ -public: - QuotedPrintableDecoderIOS(std::istream& istr); - ~QuotedPrintableDecoderIOS(); - QuotedPrintableDecoderBuf* rdbuf(); - -protected: - QuotedPrintableDecoderBuf _buf; -}; - - -class Net_API QuotedPrintableDecoder: public QuotedPrintableDecoderIOS, public std::istream - /// This istream decodes all quoted-printable (see RFC 2045) - /// encoded data read from the istream connected to it. - /// - /// Note: For performance reasons, the characters - /// are read directly from the given istream's - /// underlying streambuf, so the state - /// of the istream will not reflect that of - /// its streambuf. -{ -public: - QuotedPrintableDecoder(std::istream& istr); - ~QuotedPrintableDecoder(); -}; - - -} } // namespace Poco::Net - - -#endif // Net_QuotedPrintableDecoder_INCLUDED +// +// QuotedPrintableDecoder.h +// +// Library: Net +// Package: Messages +// Module: QuotedPrintableDecoder +// +// Definition of the QuotedPrintableDecoder class. +// +// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. +// and Contributors. +// +// SPDX-License-Identifier: BSL-1.0 +// + + +#ifndef Net_QuotedPrintableDecoder_INCLUDED +#define Net_QuotedPrintableDecoder_INCLUDED + + +#include "Poco/Net/Net.h" +#include "Poco/UnbufferedStreamBuf.h" +#include <istream> + + +namespace Poco { +namespace Net { + + +class Net_API QuotedPrintableDecoderBuf: public Poco::UnbufferedStreamBuf + /// This streambuf decodes all quoted-printable (see RFC 2045) + /// encoded data read from the istream connected to it. + /// + /// Note: For performance reasons, the characters + /// are read directly from the given istream's + /// underlying streambuf, so the state + /// of the istream will not reflect that of + /// its streambuf. +{ +public: + QuotedPrintableDecoderBuf(std::istream& istr); + ~QuotedPrintableDecoderBuf(); + +private: + int readFromDevice(); + + std::streambuf& _buf; +}; + + +class Net_API QuotedPrintableDecoderIOS: public virtual std::ios + /// The base class for QuotedPrintableDecoder. + /// + /// This class is needed to ensure the correct initialization + /// order of the stream buffer and base classes. +{ +public: + QuotedPrintableDecoderIOS(std::istream& istr); + ~QuotedPrintableDecoderIOS(); + QuotedPrintableDecoderBuf* rdbuf(); + +protected: + QuotedPrintableDecoderBuf _buf; +}; + + +class Net_API QuotedPrintableDecoder: public QuotedPrintableDecoderIOS, public std::istream + /// This istream decodes all quoted-printable (see RFC 2045) + /// encoded data read from the istream connected to it. + /// + /// Note: For performance reasons, the characters + /// are read directly from the given istream's + /// underlying streambuf, so the state + /// of the istream will not reflect that of + /// its streambuf. +{ +public: + QuotedPrintableDecoder(std::istream& istr); + ~QuotedPrintableDecoder(); +}; + + +} } // namespace Poco::Net + + +#endif // Net_QuotedPrintableDecoder_INCLUDED diff --git a/contrib/libs/poco/Net/include/Poco/Net/QuotedPrintableEncoder.h b/contrib/libs/poco/Net/include/Poco/Net/QuotedPrintableEncoder.h index 7f43db0d64..d0e7d74549 100644 --- a/contrib/libs/poco/Net/include/Poco/Net/QuotedPrintableEncoder.h +++ b/contrib/libs/poco/Net/include/Poco/Net/QuotedPrintableEncoder.h @@ -1,85 +1,85 @@ -// -// QuotedPrintableEncoder.h -// -// Library: Net -// Package: Messages -// Module: QuotedPrintableEncoder -// -// Definition of the QuotedPrintableEncoder class. -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Net_QuotedPrintableEncoder_INCLUDED -#define Net_QuotedPrintableEncoder_INCLUDED - - -#include "Poco/Net/Net.h" -#include "Poco/UnbufferedStreamBuf.h" -#include <ostream> - - -namespace Poco { -namespace Net { - - -class Net_API QuotedPrintableEncoderBuf: public Poco::UnbufferedStreamBuf - /// This streambuf encodes all data written - /// to it in quoted-printable encoding (see RFC 2045) - /// and forwards it to a connected ostream. -{ -public: - QuotedPrintableEncoderBuf(std::ostream& ostr); - ~QuotedPrintableEncoderBuf(); - int close(); - -private: - int writeToDevice(char c); - void writeEncoded(char c); - void writeRaw(char c); - - int _pending; - int _lineLength; - std::ostream& _ostr; -}; - - -class Net_API QuotedPrintableEncoderIOS: public virtual std::ios - /// The base class for QuotedPrintableEncoder. - /// - /// This class is needed to ensure the correct initialization - /// order of the stream buffer and base classes. -{ -public: - QuotedPrintableEncoderIOS(std::ostream& ostr); - ~QuotedPrintableEncoderIOS(); - int close(); - QuotedPrintableEncoderBuf* rdbuf(); - -protected: - QuotedPrintableEncoderBuf _buf; -}; - - -class Net_API QuotedPrintableEncoder: public QuotedPrintableEncoderIOS, public std::ostream - /// This ostream encodes all data - /// written to it in quoted-printable encoding - /// (see RFC 2045) and forwards it to a connected ostream. - /// Always call close() when done - /// writing data, to ensure proper - /// completion of the encoding operation. -{ -public: - QuotedPrintableEncoder(std::ostream& ostr); - ~QuotedPrintableEncoder(); -}; - - -} } // namespace Poco::Net - - -#endif // Net_QuotedPrintableEncoder_INCLUDED +// +// QuotedPrintableEncoder.h +// +// Library: Net +// Package: Messages +// Module: QuotedPrintableEncoder +// +// Definition of the QuotedPrintableEncoder class. +// +// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. +// and Contributors. +// +// SPDX-License-Identifier: BSL-1.0 +// + + +#ifndef Net_QuotedPrintableEncoder_INCLUDED +#define Net_QuotedPrintableEncoder_INCLUDED + + +#include "Poco/Net/Net.h" +#include "Poco/UnbufferedStreamBuf.h" +#include <ostream> + + +namespace Poco { +namespace Net { + + +class Net_API QuotedPrintableEncoderBuf: public Poco::UnbufferedStreamBuf + /// This streambuf encodes all data written + /// to it in quoted-printable encoding (see RFC 2045) + /// and forwards it to a connected ostream. +{ +public: + QuotedPrintableEncoderBuf(std::ostream& ostr); + ~QuotedPrintableEncoderBuf(); + int close(); + +private: + int writeToDevice(char c); + void writeEncoded(char c); + void writeRaw(char c); + + int _pending; + int _lineLength; + std::ostream& _ostr; +}; + + +class Net_API QuotedPrintableEncoderIOS: public virtual std::ios + /// The base class for QuotedPrintableEncoder. + /// + /// This class is needed to ensure the correct initialization + /// order of the stream buffer and base classes. +{ +public: + QuotedPrintableEncoderIOS(std::ostream& ostr); + ~QuotedPrintableEncoderIOS(); + int close(); + QuotedPrintableEncoderBuf* rdbuf(); + +protected: + QuotedPrintableEncoderBuf _buf; +}; + + +class Net_API QuotedPrintableEncoder: public QuotedPrintableEncoderIOS, public std::ostream + /// This ostream encodes all data + /// written to it in quoted-printable encoding + /// (see RFC 2045) and forwards it to a connected ostream. + /// Always call close() when done + /// writing data, to ensure proper + /// completion of the encoding operation. +{ +public: + QuotedPrintableEncoder(std::ostream& ostr); + ~QuotedPrintableEncoder(); +}; + + +} } // namespace Poco::Net + + +#endif // Net_QuotedPrintableEncoder_INCLUDED diff --git a/contrib/libs/poco/Net/include/Poco/Net/RawSocket.h b/contrib/libs/poco/Net/include/Poco/Net/RawSocket.h index f07e369e24..3638b20e45 100644 --- a/contrib/libs/poco/Net/include/Poco/Net/RawSocket.h +++ b/contrib/libs/poco/Net/include/Poco/Net/RawSocket.h @@ -1,161 +1,161 @@ -// -// RawSocket.h -// -// Library: Net -// Package: Sockets -// Module: RawSocket -// -// Definition of the RawSocket class. -// -// Copyright (c) 2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Net_RawSocket_INCLUDED -#define Net_RawSocket_INCLUDED - - -#include "Poco/Net/Net.h" -#include "Poco/Net/Socket.h" - - -namespace Poco { -namespace Net { - - -class Net_API RawSocket: public Socket - /// This class provides an interface to a - /// raw IP socket. -{ -public: - RawSocket(); - /// Creates an unconnected IPv4 raw socket. - - RawSocket(SocketAddress::Family family, int proto = IPPROTO_RAW); - /// Creates an unconnected raw socket. - /// - /// The socket will be created for the - /// given address family. - - RawSocket(const SocketAddress& address, bool reuseAddress = false); - /// Creates a raw socket and binds it - /// to the given address. - /// - /// Depending on the address family, the socket - /// will be either an IPv4 or an IPv6 socket. - - RawSocket(const Socket& socket); - /// Creates the RawSocket with the SocketImpl - /// from another socket. The SocketImpl must be - /// a RawSocketImpl, otherwise an InvalidArgumentException - /// will be thrown. - - ~RawSocket(); - /// Destroys the RawSocket. - - RawSocket& operator = (const Socket& socket); - /// Assignment operator. - /// - /// Releases the socket's SocketImpl and - /// attaches the SocketImpl from the other socket and - /// increments the reference count of the SocketImpl. - - void connect(const SocketAddress& address); - /// Restricts incoming and outgoing - /// packets to the specified address. - /// - /// Calls to connect() cannot come before calls to bind(). - - void bind(const SocketAddress& address, bool reuseAddress = false); - /// Bind a local address to the socket. - /// - /// This is usually only done when establishing a server - /// socket. - /// - /// If reuseAddress is true, sets the SO_REUSEADDR - /// socket option. - /// - /// Calls to connect() cannot come before calls to bind(). - - void bind(const SocketAddress& address, bool reuseAddress, bool reusePort); - /// Bind a local address to the socket. - /// - /// This is usually only done when establishing a server - /// socket. - /// - /// If reuseAddress is true, sets the SO_REUSEADDR - /// socket option. - /// - /// If reusePort is true, sets the SO_REUSEPORT - /// socket option. - /// - /// Calls to connect() cannot come before calls to bind(). - - int sendBytes(const void* buffer, int length, int flags = 0); - /// Sends the contents of the given buffer through - /// the socket. - /// - /// Returns the number of bytes sent, which may be - /// less than the number of bytes specified. - - int receiveBytes(void* buffer, int length, int flags = 0); - /// Receives data from the socket and stores it - /// in buffer. Up to length bytes are received. - /// - /// Returns the number of bytes received. - - int sendTo(const void* buffer, int length, const SocketAddress& address, int flags = 0); - /// Sends the contents of the given buffer through - /// the socket to the given address. - /// - /// Returns the number of bytes sent, which may be - /// less than the number of bytes specified. - - int receiveFrom(void* buffer, int length, SocketAddress& address, int flags = 0); - /// Receives data from the socket and stores it - /// in buffer. Up to length bytes are received. - /// Stores the address of the sender in address. - /// - /// Returns the number of bytes received. - - void setBroadcast(bool flag); - /// Sets the value of the SO_BROADCAST socket option. - /// - /// Setting this flag allows sending datagrams to - /// the broadcast address. - - bool getBroadcast() const; - /// Returns the value of the SO_BROADCAST socket option. - -protected: - RawSocket(SocketImpl* pImpl); - /// Creates the Socket and attaches the given SocketImpl. - /// The socket takes ownership of the SocketImpl. - /// - /// The SocketImpl must be a StreamSocketImpl, otherwise - /// an InvalidArgumentException will be thrown. -}; - - -// -// inlines -// -inline void RawSocket::setBroadcast(bool flag) -{ - impl()->setBroadcast(flag); -} - - -inline bool RawSocket::getBroadcast() const -{ - return impl()->getBroadcast(); -} - - -} } // namespace Poco::Net - - -#endif // Net_RawSocket_INCLUDED +// +// RawSocket.h +// +// Library: Net +// Package: Sockets +// Module: RawSocket +// +// Definition of the RawSocket class. +// +// Copyright (c) 2006, Applied Informatics Software Engineering GmbH. +// and Contributors. +// +// SPDX-License-Identifier: BSL-1.0 +// + + +#ifndef Net_RawSocket_INCLUDED +#define Net_RawSocket_INCLUDED + + +#include "Poco/Net/Net.h" +#include "Poco/Net/Socket.h" + + +namespace Poco { +namespace Net { + + +class Net_API RawSocket: public Socket + /// This class provides an interface to a + /// raw IP socket. +{ +public: + RawSocket(); + /// Creates an unconnected IPv4 raw socket. + + RawSocket(SocketAddress::Family family, int proto = IPPROTO_RAW); + /// Creates an unconnected raw socket. + /// + /// The socket will be created for the + /// given address family. + + RawSocket(const SocketAddress& address, bool reuseAddress = false); + /// Creates a raw socket and binds it + /// to the given address. + /// + /// Depending on the address family, the socket + /// will be either an IPv4 or an IPv6 socket. + + RawSocket(const Socket& socket); + /// Creates the RawSocket with the SocketImpl + /// from another socket. The SocketImpl must be + /// a RawSocketImpl, otherwise an InvalidArgumentException + /// will be thrown. + + ~RawSocket(); + /// Destroys the RawSocket. + + RawSocket& operator = (const Socket& socket); + /// Assignment operator. + /// + /// Releases the socket's SocketImpl and + /// attaches the SocketImpl from the other socket and + /// increments the reference count of the SocketImpl. + + void connect(const SocketAddress& address); + /// Restricts incoming and outgoing + /// packets to the specified address. + /// + /// Calls to connect() cannot come before calls to bind(). + + void bind(const SocketAddress& address, bool reuseAddress = false); + /// Bind a local address to the socket. + /// + /// This is usually only done when establishing a server + /// socket. + /// + /// If reuseAddress is true, sets the SO_REUSEADDR + /// socket option. + /// + /// Calls to connect() cannot come before calls to bind(). + + void bind(const SocketAddress& address, bool reuseAddress, bool reusePort); + /// Bind a local address to the socket. + /// + /// This is usually only done when establishing a server + /// socket. + /// + /// If reuseAddress is true, sets the SO_REUSEADDR + /// socket option. + /// + /// If reusePort is true, sets the SO_REUSEPORT + /// socket option. + /// + /// Calls to connect() cannot come before calls to bind(). + + int sendBytes(const void* buffer, int length, int flags = 0); + /// Sends the contents of the given buffer through + /// the socket. + /// + /// Returns the number of bytes sent, which may be + /// less than the number of bytes specified. + + int receiveBytes(void* buffer, int length, int flags = 0); + /// Receives data from the socket and stores it + /// in buffer. Up to length bytes are received. + /// + /// Returns the number of bytes received. + + int sendTo(const void* buffer, int length, const SocketAddress& address, int flags = 0); + /// Sends the contents of the given buffer through + /// the socket to the given address. + /// + /// Returns the number of bytes sent, which may be + /// less than the number of bytes specified. + + int receiveFrom(void* buffer, int length, SocketAddress& address, int flags = 0); + /// Receives data from the socket and stores it + /// in buffer. Up to length bytes are received. + /// Stores the address of the sender in address. + /// + /// Returns the number of bytes received. + + void setBroadcast(bool flag); + /// Sets the value of the SO_BROADCAST socket option. + /// + /// Setting this flag allows sending datagrams to + /// the broadcast address. + + bool getBroadcast() const; + /// Returns the value of the SO_BROADCAST socket option. + +protected: + RawSocket(SocketImpl* pImpl); + /// Creates the Socket and attaches the given SocketImpl. + /// The socket takes ownership of the SocketImpl. + /// + /// The SocketImpl must be a StreamSocketImpl, otherwise + /// an InvalidArgumentException will be thrown. +}; + + +// +// inlines +// +inline void RawSocket::setBroadcast(bool flag) +{ + impl()->setBroadcast(flag); +} + + +inline bool RawSocket::getBroadcast() const +{ + return impl()->getBroadcast(); +} + + +} } // namespace Poco::Net + + +#endif // Net_RawSocket_INCLUDED diff --git a/contrib/libs/poco/Net/include/Poco/Net/RawSocketImpl.h b/contrib/libs/poco/Net/include/Poco/Net/RawSocketImpl.h index b62724abbb..df10b64587 100644 --- a/contrib/libs/poco/Net/include/Poco/Net/RawSocketImpl.h +++ b/contrib/libs/poco/Net/include/Poco/Net/RawSocketImpl.h @@ -1,56 +1,56 @@ -// -// RawSocketImpl.h -// -// Library: Net -// Package: Sockets -// Module: RawSocketImpl -// -// Definition of the RawSocketImpl class. -// -// Copyright (c) 2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Net_RawSocketImpl_INCLUDED -#define Net_RawSocketImpl_INCLUDED - - -#include "Poco/Net/Net.h" -#include "Poco/Net/SocketImpl.h" - - -namespace Poco { -namespace Net { - - -class Net_API RawSocketImpl: public SocketImpl - /// This class implements a raw socket. -{ -public: - RawSocketImpl(); - /// Creates an unconnected IPv4 raw socket with IPPROTO_RAW. - - RawSocketImpl(SocketAddress::Family family, int proto = IPPROTO_RAW); - /// Creates an unconnected raw socket. - /// - /// The socket will be created for the - /// given address family. - - RawSocketImpl(poco_socket_t sockfd); - /// Creates a RawSocketImpl using the given native socket. - -protected: - void init(int af); - void init2(int af, int proto); - - ~RawSocketImpl(); -}; - - -} } // namespace Poco::Net - - -#endif // Net_RawSocketImpl_INCLUDED +// +// RawSocketImpl.h +// +// Library: Net +// Package: Sockets +// Module: RawSocketImpl +// +// Definition of the RawSocketImpl class. +// +// Copyright (c) 2006, Applied Informatics Software Engineering GmbH. +// and Contributors. +// +// SPDX-License-Identifier: BSL-1.0 +// + + +#ifndef Net_RawSocketImpl_INCLUDED +#define Net_RawSocketImpl_INCLUDED + + +#include "Poco/Net/Net.h" +#include "Poco/Net/SocketImpl.h" + + +namespace Poco { +namespace Net { + + +class Net_API RawSocketImpl: public SocketImpl + /// This class implements a raw socket. +{ +public: + RawSocketImpl(); + /// Creates an unconnected IPv4 raw socket with IPPROTO_RAW. + + RawSocketImpl(SocketAddress::Family family, int proto = IPPROTO_RAW); + /// Creates an unconnected raw socket. + /// + /// The socket will be created for the + /// given address family. + + RawSocketImpl(poco_socket_t sockfd); + /// Creates a RawSocketImpl using the given native socket. + +protected: + void init(int af); + void init2(int af, int proto); + + ~RawSocketImpl(); +}; + + +} } // namespace Poco::Net + + +#endif // Net_RawSocketImpl_INCLUDED diff --git a/contrib/libs/poco/Net/include/Poco/Net/RemoteSyslogChannel.h b/contrib/libs/poco/Net/include/Poco/Net/RemoteSyslogChannel.h index f8b5ace367..848b1634fb 100644 --- a/contrib/libs/poco/Net/include/Poco/Net/RemoteSyslogChannel.h +++ b/contrib/libs/poco/Net/include/Poco/Net/RemoteSyslogChannel.h @@ -1,158 +1,158 @@ -// -// RemoteSyslogChannel.h -// -// Library: Net -// Package: Logging -// Module: RemoteSyslogChannel -// -// Definition of the RemoteSyslogChannel class. -// -// Copyright (c) 2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Net_RemoteSyslogChannel_INCLUDED -#define Net_RemoteSyslogChannel_INCLUDED - - -#include "Poco/Net/Net.h" -#include "Poco/Channel.h" -#include "Poco/Mutex.h" -#include "Poco/Net/DatagramSocket.h" -#include "Poco/Net/SocketAddress.h" - - -namespace Poco { -namespace Net { - - -class Net_API RemoteSyslogChannel: public Poco::Channel - /// This Channel implements remote syslog logging over UDP according - /// to RFC 5424 "The Syslog Protocol" - /// and RFC 5426 "Transmission of syslog messages over UDP". - /// - /// In addition, RemoteSyslogListener also supports the "old" BSD syslog - /// protocol, as described in RFC 3164. - /// - /// RFC 5425 structured data can be passed via the "structured-data" - /// property of the log Message. The content of the "structured-data" - /// property must be correct according to RFC 5425. - /// - /// Example: - /// msg.set("structured-data", "[exampleSDID@32473 iut=\"3\" eventSource=\"Application\" eventID=\"1011\"]"); -{ -public: - static const std::string BSD_TIMEFORMAT; - static const std::string SYSLOG_TIMEFORMAT; - - enum Severity - { - SYSLOG_EMERGENCY = 0, /// Emergency: system is unusable - SYSLOG_ALERT = 1, /// Alert: action must be taken immediately - SYSLOG_CRITICAL = 2, /// Critical: critical conditions - SYSLOG_ERROR = 3, /// Error: error conditions - SYSLOG_WARNING = 4, /// Warning: warning conditions - SYSLOG_NOTICE = 5, /// Notice: normal but significant condition - SYSLOG_INFORMATIONAL = 6, /// Informational: informational messages - SYSLOG_DEBUG = 7 /// Debug: debug-level messages - }; - - enum Facility - { - SYSLOG_KERN = ( 0<<3), /// kernel messages - SYSLOG_USER = ( 1<<3), /// random user-level messages - SYSLOG_MAIL = ( 2<<3), /// mail system - SYSLOG_DAEMON = ( 3<<3), /// system daemons - SYSLOG_AUTH = ( 4<<3), /// security/authorization messages - SYSLOG_SYSLOG = ( 5<<3), /// messages generated internally by syslogd - SYSLOG_LPR = ( 6<<3), /// line printer subsystem - SYSLOG_NEWS = ( 7<<3), /// network news subsystem - SYSLOG_UUCP = ( 8<<3), /// UUCP subsystem - SYSLOG_CRON = ( 9<<3), /// clock daemon - SYSLOG_AUTHPRIV = (10<<3), /// security/authorization messages (private) - SYSLOG_FTP = (11<<3), /// ftp daemon - SYSLOG_NTP = (12<<3), /// ntp subsystem - SYSLOG_LOGAUDIT = (13<<3), /// log audit - SYSLOG_LOGALERT = (14<<3), /// log alert - SYSLOG_CLOCK = (15<<3), /// clock daemon - SYSLOG_LOCAL0 = (16<<3), /// reserved for local use - SYSLOG_LOCAL1 = (17<<3), /// reserved for local use - SYSLOG_LOCAL2 = (18<<3), /// reserved for local use - SYSLOG_LOCAL3 = (19<<3), /// reserved for local use - SYSLOG_LOCAL4 = (20<<3), /// reserved for local use - SYSLOG_LOCAL5 = (21<<3), /// reserved for local use - SYSLOG_LOCAL6 = (22<<3), /// reserved for local use - SYSLOG_LOCAL7 = (23<<3) /// reserved for local use - }; - - enum - { - SYSLOG_PORT = 514 - }; - - RemoteSyslogChannel(); - /// Creates a RemoteSyslogChannel. - - RemoteSyslogChannel(const std::string& address, const std::string& name, int facility = SYSLOG_USER, bool bsdFormat = false); - /// Creates a RemoteSyslogChannel with the given target address, name, and facility. - /// If bsdFormat is true, messages are formatted according to RFC 3164. - - void open(); - /// Opens the RemoteSyslogChannel. - - void close(); - /// Closes the RemoteSyslogChannel. - - void log(const Message& msg); - /// Sends the message's text to the syslog service. - - void setProperty(const std::string& name, const std::string& value); - /// Sets the property with the given value. - /// - /// The following properties are supported: - /// * name: The name used to identify the source of log messages. - /// * facility: The facility added to each log message. See the Facility enumeration for a list of supported values. - /// The LOG_ prefix can be omitted and values are case insensitive (e.g. a facility value "mail" is recognized as SYSLOG_MAIL) - /// * format: "bsd"/"rfc3164" (RFC 3164 format) or "new"/"rfc5424" (default) - /// * loghost: The target IP address or host name where log messages are sent. Optionally, a port number (separated - /// by a colon) can also be specified. - /// * host: (optional) Host name included in syslog messages. If not specified, the host's real domain name or - /// IP address will be used. - - std::string getProperty(const std::string& name) const; - /// Returns the value of the property with the given name. - - static void registerChannel(); - /// Registers the channel with the global LoggingFactory. - - static const std::string PROP_NAME; - static const std::string PROP_FACILITY; - static const std::string PROP_FORMAT; - static const std::string PROP_LOGHOST; - static const std::string PROP_HOST; - static const std::string STRUCTURED_DATA; - -protected: - ~RemoteSyslogChannel(); - static int getPrio(const Message& msg); - -private: - std::string _logHost; - std::string _name; - std::string _host; - int _facility; - bool _bsdFormat; - DatagramSocket _socket; - SocketAddress _socketAddress; - bool _open; - mutable Poco::FastMutex _mutex; -}; - - -} } // namespace Poco::Net - - -#endif // Net_RemoteSyslogChannel_INCLUDED +// +// RemoteSyslogChannel.h +// +// Library: Net +// Package: Logging +// Module: RemoteSyslogChannel +// +// Definition of the RemoteSyslogChannel class. +// +// Copyright (c) 2006, Applied Informatics Software Engineering GmbH. +// and Contributors. +// +// SPDX-License-Identifier: BSL-1.0 +// + + +#ifndef Net_RemoteSyslogChannel_INCLUDED +#define Net_RemoteSyslogChannel_INCLUDED + + +#include "Poco/Net/Net.h" +#include "Poco/Channel.h" +#include "Poco/Mutex.h" +#include "Poco/Net/DatagramSocket.h" +#include "Poco/Net/SocketAddress.h" + + +namespace Poco { +namespace Net { + + +class Net_API RemoteSyslogChannel: public Poco::Channel + /// This Channel implements remote syslog logging over UDP according + /// to RFC 5424 "The Syslog Protocol" + /// and RFC 5426 "Transmission of syslog messages over UDP". + /// + /// In addition, RemoteSyslogListener also supports the "old" BSD syslog + /// protocol, as described in RFC 3164. + /// + /// RFC 5425 structured data can be passed via the "structured-data" + /// property of the log Message. The content of the "structured-data" + /// property must be correct according to RFC 5425. + /// + /// Example: + /// msg.set("structured-data", "[exampleSDID@32473 iut=\"3\" eventSource=\"Application\" eventID=\"1011\"]"); +{ +public: + static const std::string BSD_TIMEFORMAT; + static const std::string SYSLOG_TIMEFORMAT; + + enum Severity + { + SYSLOG_EMERGENCY = 0, /// Emergency: system is unusable + SYSLOG_ALERT = 1, /// Alert: action must be taken immediately + SYSLOG_CRITICAL = 2, /// Critical: critical conditions + SYSLOG_ERROR = 3, /// Error: error conditions + SYSLOG_WARNING = 4, /// Warning: warning conditions + SYSLOG_NOTICE = 5, /// Notice: normal but significant condition + SYSLOG_INFORMATIONAL = 6, /// Informational: informational messages + SYSLOG_DEBUG = 7 /// Debug: debug-level messages + }; + + enum Facility + { + SYSLOG_KERN = ( 0<<3), /// kernel messages + SYSLOG_USER = ( 1<<3), /// random user-level messages + SYSLOG_MAIL = ( 2<<3), /// mail system + SYSLOG_DAEMON = ( 3<<3), /// system daemons + SYSLOG_AUTH = ( 4<<3), /// security/authorization messages + SYSLOG_SYSLOG = ( 5<<3), /// messages generated internally by syslogd + SYSLOG_LPR = ( 6<<3), /// line printer subsystem + SYSLOG_NEWS = ( 7<<3), /// network news subsystem + SYSLOG_UUCP = ( 8<<3), /// UUCP subsystem + SYSLOG_CRON = ( 9<<3), /// clock daemon + SYSLOG_AUTHPRIV = (10<<3), /// security/authorization messages (private) + SYSLOG_FTP = (11<<3), /// ftp daemon + SYSLOG_NTP = (12<<3), /// ntp subsystem + SYSLOG_LOGAUDIT = (13<<3), /// log audit + SYSLOG_LOGALERT = (14<<3), /// log alert + SYSLOG_CLOCK = (15<<3), /// clock daemon + SYSLOG_LOCAL0 = (16<<3), /// reserved for local use + SYSLOG_LOCAL1 = (17<<3), /// reserved for local use + SYSLOG_LOCAL2 = (18<<3), /// reserved for local use + SYSLOG_LOCAL3 = (19<<3), /// reserved for local use + SYSLOG_LOCAL4 = (20<<3), /// reserved for local use + SYSLOG_LOCAL5 = (21<<3), /// reserved for local use + SYSLOG_LOCAL6 = (22<<3), /// reserved for local use + SYSLOG_LOCAL7 = (23<<3) /// reserved for local use + }; + + enum + { + SYSLOG_PORT = 514 + }; + + RemoteSyslogChannel(); + /// Creates a RemoteSyslogChannel. + + RemoteSyslogChannel(const std::string& address, const std::string& name, int facility = SYSLOG_USER, bool bsdFormat = false); + /// Creates a RemoteSyslogChannel with the given target address, name, and facility. + /// If bsdFormat is true, messages are formatted according to RFC 3164. + + void open(); + /// Opens the RemoteSyslogChannel. + + void close(); + /// Closes the RemoteSyslogChannel. + + void log(const Message& msg); + /// Sends the message's text to the syslog service. + + void setProperty(const std::string& name, const std::string& value); + /// Sets the property with the given value. + /// + /// The following properties are supported: + /// * name: The name used to identify the source of log messages. + /// * facility: The facility added to each log message. See the Facility enumeration for a list of supported values. + /// The LOG_ prefix can be omitted and values are case insensitive (e.g. a facility value "mail" is recognized as SYSLOG_MAIL) + /// * format: "bsd"/"rfc3164" (RFC 3164 format) or "new"/"rfc5424" (default) + /// * loghost: The target IP address or host name where log messages are sent. Optionally, a port number (separated + /// by a colon) can also be specified. + /// * host: (optional) Host name included in syslog messages. If not specified, the host's real domain name or + /// IP address will be used. + + std::string getProperty(const std::string& name) const; + /// Returns the value of the property with the given name. + + static void registerChannel(); + /// Registers the channel with the global LoggingFactory. + + static const std::string PROP_NAME; + static const std::string PROP_FACILITY; + static const std::string PROP_FORMAT; + static const std::string PROP_LOGHOST; + static const std::string PROP_HOST; + static const std::string STRUCTURED_DATA; + +protected: + ~RemoteSyslogChannel(); + static int getPrio(const Message& msg); + +private: + std::string _logHost; + std::string _name; + std::string _host; + int _facility; + bool _bsdFormat; + DatagramSocket _socket; + SocketAddress _socketAddress; + bool _open; + mutable Poco::FastMutex _mutex; +}; + + +} } // namespace Poco::Net + + +#endif // Net_RemoteSyslogChannel_INCLUDED diff --git a/contrib/libs/poco/Net/include/Poco/Net/RemoteSyslogListener.h b/contrib/libs/poco/Net/include/Poco/Net/RemoteSyslogListener.h index 435a96cd7c..93895244c2 100644 --- a/contrib/libs/poco/Net/include/Poco/Net/RemoteSyslogListener.h +++ b/contrib/libs/poco/Net/include/Poco/Net/RemoteSyslogListener.h @@ -1,121 +1,121 @@ -// -// RemoteSyslogListener.h -// -// Library: Net -// Package: Logging -// Module: RemoteSyslogListener -// -// Definition of the RemoteSyslogListener class. -// -// Copyright (c) 2007-2011, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Net_RemoteSyslogListener_INCLUDED -#define Net_RemoteSyslogListener_INCLUDED - - -#include "Poco/Net/Net.h" -#include "Poco/Net/SocketAddress.h" -#include "Poco/ThreadPool.h" -#include "Poco/SplitterChannel.h" -#include "Poco/NotificationQueue.h" - - -namespace Poco { -namespace Net { - - -class RemoteUDPListener; -class SyslogParser; - - -class Net_API RemoteSyslogListener: public Poco::SplitterChannel - /// RemoteSyslogListener implements listening for syslog messages - /// sent over UDP, according to RFC 5424 "The Syslog Protocol" - /// and RFC 5426 "Transmission of syslog messages over UDP". - /// - /// In addition, RemoteSyslogListener also supports the "old" BSD syslog - /// protocol, as described in RFC 3164. - /// - /// The RemoteSyslogListener is a subclass of Poco::SplitterChannel. - /// Every received log message is sent to the channels registered - /// with addChannel() or the "channel" property. - /// - /// Poco::Message objects created by RemoteSyslogListener will have - /// the following named parameters: - /// - addr: IP address of the host/interface sending the message. - /// - host: host name; only for "new" syslog messages. - /// - app: application name; only for "new" syslog messages. - /// - structured-data: RFC 5424 structured data, or empty if not present. -{ -public: - RemoteSyslogListener(); - /// Creates the RemoteSyslogListener. - - RemoteSyslogListener(Poco::UInt16 port); - /// Creates the RemoteSyslogListener, listening on the given port number. - - RemoteSyslogListener(Poco::UInt16 port, int threads); - /// Creates the RemoteSyslogListener, listening on the given port number - /// and using the number of threads for message processing. - - void setProperty(const std::string& name, const std::string& value); - /// Sets the property with the given value. - /// - /// The following properties are supported: - /// * port: The UDP port number where to listen for UDP packets - /// containing syslog messages. If 0 is specified, does not - /// listen for UDP messages. - /// * threads: The number of parser threads processing - /// received syslog messages. Defaults to 1. A maximum - /// of 16 threads is supported. - - std::string getProperty(const std::string& name) const; - /// Returns the value of the property with the given name. - - void open(); - /// Starts the listener. - - void close(); - /// Stops the listener. - - void processMessage(const std::string& messageText); - /// Parses a single line of text containing a syslog message - /// and sends it down the filter chain. - - void enqueueMessage(const std::string& messageText, const Poco::Net::SocketAddress& senderAddress); - /// Enqueues a single line of text containing a syslog message - /// for asynchronous processing by a parser thread. - - static void registerChannel(); - /// Registers the channel with the global LoggingFactory. - - static const std::string PROP_PORT; - static const std::string PROP_THREADS; - - static const std::string LOG_PROP_APP; - static const std::string LOG_PROP_HOST; - static const std::string LOG_PROP_STRUCTURED_DATA; - -protected: - ~RemoteSyslogListener(); - /// Destroys the RemoteSyslogListener. - -private: - RemoteUDPListener* _pListener; - SyslogParser* _pParser; - Poco::ThreadPool _threadPool; - Poco::NotificationQueue _queue; - Poco::UInt16 _port; - int _threads; -}; - - -} } // namespace Poco::Net - - -#endif // Net_RemoteSyslogListener_INCLUDED +// +// RemoteSyslogListener.h +// +// Library: Net +// Package: Logging +// Module: RemoteSyslogListener +// +// Definition of the RemoteSyslogListener class. +// +// Copyright (c) 2007-2011, Applied Informatics Software Engineering GmbH. +// and Contributors. +// +// SPDX-License-Identifier: BSL-1.0 +// + + +#ifndef Net_RemoteSyslogListener_INCLUDED +#define Net_RemoteSyslogListener_INCLUDED + + +#include "Poco/Net/Net.h" +#include "Poco/Net/SocketAddress.h" +#include "Poco/ThreadPool.h" +#include "Poco/SplitterChannel.h" +#include "Poco/NotificationQueue.h" + + +namespace Poco { +namespace Net { + + +class RemoteUDPListener; +class SyslogParser; + + +class Net_API RemoteSyslogListener: public Poco::SplitterChannel + /// RemoteSyslogListener implements listening for syslog messages + /// sent over UDP, according to RFC 5424 "The Syslog Protocol" + /// and RFC 5426 "Transmission of syslog messages over UDP". + /// + /// In addition, RemoteSyslogListener also supports the "old" BSD syslog + /// protocol, as described in RFC 3164. + /// + /// The RemoteSyslogListener is a subclass of Poco::SplitterChannel. + /// Every received log message is sent to the channels registered + /// with addChannel() or the "channel" property. + /// + /// Poco::Message objects created by RemoteSyslogListener will have + /// the following named parameters: + /// - addr: IP address of the host/interface sending the message. + /// - host: host name; only for "new" syslog messages. + /// - app: application name; only for "new" syslog messages. + /// - structured-data: RFC 5424 structured data, or empty if not present. +{ +public: + RemoteSyslogListener(); + /// Creates the RemoteSyslogListener. + + RemoteSyslogListener(Poco::UInt16 port); + /// Creates the RemoteSyslogListener, listening on the given port number. + + RemoteSyslogListener(Poco::UInt16 port, int threads); + /// Creates the RemoteSyslogListener, listening on the given port number + /// and using the number of threads for message processing. + + void setProperty(const std::string& name, const std::string& value); + /// Sets the property with the given value. + /// + /// The following properties are supported: + /// * port: The UDP port number where to listen for UDP packets + /// containing syslog messages. If 0 is specified, does not + /// listen for UDP messages. + /// * threads: The number of parser threads processing + /// received syslog messages. Defaults to 1. A maximum + /// of 16 threads is supported. + + std::string getProperty(const std::string& name) const; + /// Returns the value of the property with the given name. + + void open(); + /// Starts the listener. + + void close(); + /// Stops the listener. + + void processMessage(const std::string& messageText); + /// Parses a single line of text containing a syslog message + /// and sends it down the filter chain. + + void enqueueMessage(const std::string& messageText, const Poco::Net::SocketAddress& senderAddress); + /// Enqueues a single line of text containing a syslog message + /// for asynchronous processing by a parser thread. + + static void registerChannel(); + /// Registers the channel with the global LoggingFactory. + + static const std::string PROP_PORT; + static const std::string PROP_THREADS; + + static const std::string LOG_PROP_APP; + static const std::string LOG_PROP_HOST; + static const std::string LOG_PROP_STRUCTURED_DATA; + +protected: + ~RemoteSyslogListener(); + /// Destroys the RemoteSyslogListener. + +private: + RemoteUDPListener* _pListener; + SyslogParser* _pParser; + Poco::ThreadPool _threadPool; + Poco::NotificationQueue _queue; + Poco::UInt16 _port; + int _threads; +}; + + +} } // namespace Poco::Net + + +#endif // Net_RemoteSyslogListener_INCLUDED diff --git a/contrib/libs/poco/Net/include/Poco/Net/SMTPChannel.h b/contrib/libs/poco/Net/include/Poco/Net/SMTPChannel.h index 5e06b78629..373d93ded4 100644 --- a/contrib/libs/poco/Net/include/Poco/Net/SMTPChannel.h +++ b/contrib/libs/poco/Net/include/Poco/Net/SMTPChannel.h @@ -1,108 +1,108 @@ -// -// SMTPChannel.h -// -// Library: Net -// Package: Logging -// Module: SMTPChannel -// -// Definition of the SMTPChannel class. -// -// Copyright (c) 2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Net_SMTPChannel_INCLUDED -#define Net_SMTPChannel_INCLUDED - - -#include "Poco/Net/Net.h" -#include "Poco/Channel.h" -#include "Poco/String.h" - - -namespace Poco { -namespace Net { - - -class Net_API SMTPChannel: public Poco::Channel - /// This Channel implements SMTP (email) logging. -{ -public: - SMTPChannel(); - /// Creates a SMTPChannel. - - SMTPChannel(const std::string& mailhost, const std::string& sender, const std::string& recipient); - /// Creates a SMTPChannel with the given target mailhost, sender, and recipient. - - void open(); - /// Opens the SMTPChannel. - - void close(); - /// Closes the SMTPChannel. - - void log(const Message& msg); - /// Sends the message's text to the recipient. - - void setProperty(const std::string& name, const std::string& value); - /// Sets the property with the given value. - /// - /// The following properties are supported: - /// * mailhost: The SMTP server. Default is "localhost". - /// * sender: The sender address. - /// * recipient: The recipient address. - /// * local: If true, local time is used. Default is true. - /// * attachment: Filename of the file to attach. - /// * type: Content type of the file to attach. - /// * delete: Boolean value indicating whether to delete - /// the attachment file after sending. - /// * throw: Boolean value indicating whether to throw - /// exception upon failure. - - std::string getProperty(const std::string& name) const; - /// Returns the value of the property with the given name. - - static void registerChannel(); - /// Registers the channel with the global LoggingFactory. - - static const std::string PROP_MAILHOST; - static const std::string PROP_SENDER; - static const std::string PROP_RECIPIENT; - static const std::string PROP_LOCAL; - static const std::string PROP_ATTACHMENT; - static const std::string PROP_TYPE; - static const std::string PROP_DELETE; - static const std::string PROP_THROW; - -protected: - ~SMTPChannel(); - -private: - bool isTrue(const std::string& value) const; - - std::string _mailHost; - std::string _sender; - std::string _recipient; - bool _local; - std::string _attachment; - std::string _type; - bool _delete; - bool _throw; -}; - - -inline bool SMTPChannel::isTrue(const std::string& value) const -{ - return ((0 == icompare(value, "true")) || - (0 == icompare(value, "t")) || - (0 == icompare(value, "yes")) || - (0 == icompare(value, "y"))); -} - - -} } // namespace Poco::Net - - -#endif // Net_SMTPChannel_INCLUDED +// +// SMTPChannel.h +// +// Library: Net +// Package: Logging +// Module: SMTPChannel +// +// Definition of the SMTPChannel class. +// +// Copyright (c) 2006, Applied Informatics Software Engineering GmbH. +// and Contributors. +// +// SPDX-License-Identifier: BSL-1.0 +// + + +#ifndef Net_SMTPChannel_INCLUDED +#define Net_SMTPChannel_INCLUDED + + +#include "Poco/Net/Net.h" +#include "Poco/Channel.h" +#include "Poco/String.h" + + +namespace Poco { +namespace Net { + + +class Net_API SMTPChannel: public Poco::Channel + /// This Channel implements SMTP (email) logging. +{ +public: + SMTPChannel(); + /// Creates a SMTPChannel. + + SMTPChannel(const std::string& mailhost, const std::string& sender, const std::string& recipient); + /// Creates a SMTPChannel with the given target mailhost, sender, and recipient. + + void open(); + /// Opens the SMTPChannel. + + void close(); + /// Closes the SMTPChannel. + + void log(const Message& msg); + /// Sends the message's text to the recipient. + + void setProperty(const std::string& name, const std::string& value); + /// Sets the property with the given value. + /// + /// The following properties are supported: + /// * mailhost: The SMTP server. Default is "localhost". + /// * sender: The sender address. + /// * recipient: The recipient address. + /// * local: If true, local time is used. Default is true. + /// * attachment: Filename of the file to attach. + /// * type: Content type of the file to attach. + /// * delete: Boolean value indicating whether to delete + /// the attachment file after sending. + /// * throw: Boolean value indicating whether to throw + /// exception upon failure. + + std::string getProperty(const std::string& name) const; + /// Returns the value of the property with the given name. + + static void registerChannel(); + /// Registers the channel with the global LoggingFactory. + + static const std::string PROP_MAILHOST; + static const std::string PROP_SENDER; + static const std::string PROP_RECIPIENT; + static const std::string PROP_LOCAL; + static const std::string PROP_ATTACHMENT; + static const std::string PROP_TYPE; + static const std::string PROP_DELETE; + static const std::string PROP_THROW; + +protected: + ~SMTPChannel(); + +private: + bool isTrue(const std::string& value) const; + + std::string _mailHost; + std::string _sender; + std::string _recipient; + bool _local; + std::string _attachment; + std::string _type; + bool _delete; + bool _throw; +}; + + +inline bool SMTPChannel::isTrue(const std::string& value) const +{ + return ((0 == icompare(value, "true")) || + (0 == icompare(value, "t")) || + (0 == icompare(value, "yes")) || + (0 == icompare(value, "y"))); +} + + +} } // namespace Poco::Net + + +#endif // Net_SMTPChannel_INCLUDED diff --git a/contrib/libs/poco/Net/include/Poco/Net/SMTPClientSession.h b/contrib/libs/poco/Net/include/Poco/Net/SMTPClientSession.h index c29bfa2a53..5edf999598 100644 --- a/contrib/libs/poco/Net/include/Poco/Net/SMTPClientSession.h +++ b/contrib/libs/poco/Net/include/Poco/Net/SMTPClientSession.h @@ -1,234 +1,234 @@ -// -// SMTPClientSession.h -// -// Library: Net -// Package: Mail -// Module: SMTPClientSession -// -// Definition of the SMTPClientSession class. -// -// Copyright (c) 2005-2008, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Net_SMTPClientSession_INCLUDED -#define Net_SMTPClientSession_INCLUDED - - -#include "Poco/Net/Net.h" -#include "Poco/Net/DialogSocket.h" -#include "Poco/DigestEngine.h" -#include "Poco/Timespan.h" - - -namespace Poco { -namespace Net { - - -class MailMessage; - - -class Net_API SMTPClientSession - /// This class implements an Simple Mail - /// Transfer Protocol (SMTP, RFC 2821) - /// client for sending e-mail messages. -{ -public: - typedef std::vector<std::string> Recipients; - - enum - { - SMTP_PORT = 25 - }; - - enum LoginMethod - { - AUTH_NONE, - AUTH_CRAM_MD5, - AUTH_CRAM_SHA1, - AUTH_LOGIN, - AUTH_PLAIN, - AUTH_XOAUTH2 - }; - - explicit SMTPClientSession(const StreamSocket& socket); - /// Creates the SMTPClientSession using - /// the given socket, which must be connected - /// to a SMTP server. - - SMTPClientSession(const std::string& host, Poco::UInt16 port = SMTP_PORT); - /// Creates the SMTPClientSession using a socket connected - /// to the given host and port. - - virtual ~SMTPClientSession(); - /// Destroys the SMTPClientSession. - - void setTimeout(const Poco::Timespan& timeout); - /// Sets the timeout for socket read operations. - - Poco::Timespan getTimeout() const; - /// Returns the timeout for socket read operations. - - void login(const std::string& hostname); - /// Greets the SMTP server by sending a EHLO command - /// with the given hostname as argument. - /// - /// If the server does not understand the EHLO command, - /// a HELO command is sent instead. - /// - /// Throws a SMTPException in case of a SMTP-specific error, or a - /// NetException in case of a general network communication failure. - - void login(); - /// Calls login(hostname) with the current host name. - - void login(const std::string& hostname, LoginMethod loginMethod, const std::string& username, const std::string& password); - /// Logs in to the SMTP server using the given authentication method and the given - /// credentials. - - void login(LoginMethod loginMethod, const std::string& username, const std::string& password); - /// Logs in to the SMTP server using the given authentication method and the given - /// credentials. - - void open(); - /// Reads the initial response from the SMTP server. - /// - /// Usually called implicitly through login(), but can - /// also be called explicitly to implement different forms - /// of SMTP authentication. - /// - /// Does nothing if called more than once. - - void close(); - /// Sends a QUIT command and closes the connection to the server. - /// - /// Throws a SMTPException in case of a SMTP-specific error, or a - /// NetException in case of a general network communication failure. - - void sendMessage(const MailMessage& message); - /// Sends the given mail message by sending a MAIL FROM command, - /// a RCPT TO command for every recipient, and a DATA command with - /// the message headers and content. Using this function results in - /// RCPT TO commands list generated from the recipient list supplied - /// with the message itself. - /// - /// Throws a SMTPException in case of a SMTP-specific error, or a - /// NetException in case of a general network communication failure. - - void sendMessage(const MailMessage& message, const Recipients& recipients); - /// Sends the given mail message by sending a MAIL FROM command, - /// a RCPT TO command for every recipient, and a DATA command with - /// the message headers and content. Using this function results in - /// message header being generated from the supplied recipients list. - /// - /// Throws a SMTPException in case of a SMTP-specific error, or a - /// NetException in case of a general network communication failure. - - void sendMessage(std::istream& istr); - /// Sends the mail message from the supplied stream. Content of the stream - /// is copied without any checking. Only the completion status is checked and, - /// if not valid, SMTPExcpetion is thrown. - - int sendCommand(const std::string& command, std::string& response); - /// Sends the given command verbatim to the server - /// and waits for a response. - /// - /// Throws a SMTPException in case of a SMTP-specific error, or a - /// NetException in case of a general network communication failure. - - int sendCommand(const std::string& command, const std::string& arg, std::string& response); - /// Sends the given command verbatim to the server - /// and waits for a response. - /// - /// Throws a SMTPException in case of a SMTP-specific error, or a - /// NetException in case of a general network communication failure. - - void sendAddresses(const std::string& from, const Recipients& recipients); - /// Sends the message preamble by sending a MAIL FROM command, - /// and a RCPT TO command for every recipient. - /// - /// Throws a SMTPException in case of a SMTP-specific error, or a - /// NetException in case of a general network communication failure. - - void sendData(); - /// Sends the message preamble by sending a DATA command. - /// - /// Throws a SMTPException in case of a SMTP-specific error, or a - /// NetException in case of a general network communication failure. - -protected: - enum StatusClass - { - SMTP_POSITIVE_COMPLETION = 2, - SMTP_POSITIVE_INTERMEDIATE = 3, - SMTP_TRANSIENT_NEGATIVE = 4, - SMTP_PERMANENT_NEGATIVE = 5 - }; - enum - { - DEFAULT_TIMEOUT = 30000000 // 30 seconds default timeout for socket operations - }; - - static bool isPositiveCompletion(int status); - static bool isPositiveIntermediate(int status); - static bool isTransientNegative(int status); - static bool isPermanentNegative(int status); - - void login(const std::string& hostname, std::string& response); - void loginUsingCRAMMD5(const std::string& username, const std::string& password); - void loginUsingCRAMSHA1(const std::string& username, const std::string& password); - void loginUsingCRAM(const std::string& username, const std::string& method, Poco::DigestEngine& hmac); - void loginUsingLogin(const std::string& username, const std::string& password); - void loginUsingPlain(const std::string& username, const std::string& password); - void loginUsingXOAUTH2(const std::string& username, const std::string& password); - DialogSocket& socket(); - -private: - void sendCommands(const MailMessage& message, const Recipients* pRecipients = 0); - void transportMessage(const MailMessage& message); - - DialogSocket _socket; - bool _isOpen; -}; - - -// -// inlines -// -inline bool SMTPClientSession::isPositiveCompletion(int status) -{ - return status/100 == SMTP_POSITIVE_COMPLETION; -} - - -inline bool SMTPClientSession::isPositiveIntermediate(int status) -{ - return status/100 == SMTP_POSITIVE_INTERMEDIATE; -} - - -inline bool SMTPClientSession::isTransientNegative(int status) -{ - return status/100 == SMTP_TRANSIENT_NEGATIVE; -} - - -inline bool SMTPClientSession::isPermanentNegative(int status) -{ - return status/100 == SMTP_PERMANENT_NEGATIVE; -} - - -inline DialogSocket& SMTPClientSession::socket() -{ - return _socket; -} - - -} } // namespace Poco::Net - - -#endif // Net_SMTPClientSession_INCLUDED +// +// SMTPClientSession.h +// +// Library: Net +// Package: Mail +// Module: SMTPClientSession +// +// Definition of the SMTPClientSession class. +// +// Copyright (c) 2005-2008, Applied Informatics Software Engineering GmbH. +// and Contributors. +// +// SPDX-License-Identifier: BSL-1.0 +// + + +#ifndef Net_SMTPClientSession_INCLUDED +#define Net_SMTPClientSession_INCLUDED + + +#include "Poco/Net/Net.h" +#include "Poco/Net/DialogSocket.h" +#include "Poco/DigestEngine.h" +#include "Poco/Timespan.h" + + +namespace Poco { +namespace Net { + + +class MailMessage; + + +class Net_API SMTPClientSession + /// This class implements an Simple Mail + /// Transfer Protocol (SMTP, RFC 2821) + /// client for sending e-mail messages. +{ +public: + typedef std::vector<std::string> Recipients; + + enum + { + SMTP_PORT = 25 + }; + + enum LoginMethod + { + AUTH_NONE, + AUTH_CRAM_MD5, + AUTH_CRAM_SHA1, + AUTH_LOGIN, + AUTH_PLAIN, + AUTH_XOAUTH2 + }; + + explicit SMTPClientSession(const StreamSocket& socket); + /// Creates the SMTPClientSession using + /// the given socket, which must be connected + /// to a SMTP server. + + SMTPClientSession(const std::string& host, Poco::UInt16 port = SMTP_PORT); + /// Creates the SMTPClientSession using a socket connected + /// to the given host and port. + + virtual ~SMTPClientSession(); + /// Destroys the SMTPClientSession. + + void setTimeout(const Poco::Timespan& timeout); + /// Sets the timeout for socket read operations. + + Poco::Timespan getTimeout() const; + /// Returns the timeout for socket read operations. + + void login(const std::string& hostname); + /// Greets the SMTP server by sending a EHLO command + /// with the given hostname as argument. + /// + /// If the server does not understand the EHLO command, + /// a HELO command is sent instead. + /// + /// Throws a SMTPException in case of a SMTP-specific error, or a + /// NetException in case of a general network communication failure. + + void login(); + /// Calls login(hostname) with the current host name. + + void login(const std::string& hostname, LoginMethod loginMethod, const std::string& username, const std::string& password); + /// Logs in to the SMTP server using the given authentication method and the given + /// credentials. + + void login(LoginMethod loginMethod, const std::string& username, const std::string& password); + /// Logs in to the SMTP server using the given authentication method and the given + /// credentials. + + void open(); + /// Reads the initial response from the SMTP server. + /// + /// Usually called implicitly through login(), but can + /// also be called explicitly to implement different forms + /// of SMTP authentication. + /// + /// Does nothing if called more than once. + + void close(); + /// Sends a QUIT command and closes the connection to the server. + /// + /// Throws a SMTPException in case of a SMTP-specific error, or a + /// NetException in case of a general network communication failure. + + void sendMessage(const MailMessage& message); + /// Sends the given mail message by sending a MAIL FROM command, + /// a RCPT TO command for every recipient, and a DATA command with + /// the message headers and content. Using this function results in + /// RCPT TO commands list generated from the recipient list supplied + /// with the message itself. + /// + /// Throws a SMTPException in case of a SMTP-specific error, or a + /// NetException in case of a general network communication failure. + + void sendMessage(const MailMessage& message, const Recipients& recipients); + /// Sends the given mail message by sending a MAIL FROM command, + /// a RCPT TO command for every recipient, and a DATA command with + /// the message headers and content. Using this function results in + /// message header being generated from the supplied recipients list. + /// + /// Throws a SMTPException in case of a SMTP-specific error, or a + /// NetException in case of a general network communication failure. + + void sendMessage(std::istream& istr); + /// Sends the mail message from the supplied stream. Content of the stream + /// is copied without any checking. Only the completion status is checked and, + /// if not valid, SMTPExcpetion is thrown. + + int sendCommand(const std::string& command, std::string& response); + /// Sends the given command verbatim to the server + /// and waits for a response. + /// + /// Throws a SMTPException in case of a SMTP-specific error, or a + /// NetException in case of a general network communication failure. + + int sendCommand(const std::string& command, const std::string& arg, std::string& response); + /// Sends the given command verbatim to the server + /// and waits for a response. + /// + /// Throws a SMTPException in case of a SMTP-specific error, or a + /// NetException in case of a general network communication failure. + + void sendAddresses(const std::string& from, const Recipients& recipients); + /// Sends the message preamble by sending a MAIL FROM command, + /// and a RCPT TO command for every recipient. + /// + /// Throws a SMTPException in case of a SMTP-specific error, or a + /// NetException in case of a general network communication failure. + + void sendData(); + /// Sends the message preamble by sending a DATA command. + /// + /// Throws a SMTPException in case of a SMTP-specific error, or a + /// NetException in case of a general network communication failure. + +protected: + enum StatusClass + { + SMTP_POSITIVE_COMPLETION = 2, + SMTP_POSITIVE_INTERMEDIATE = 3, + SMTP_TRANSIENT_NEGATIVE = 4, + SMTP_PERMANENT_NEGATIVE = 5 + }; + enum + { + DEFAULT_TIMEOUT = 30000000 // 30 seconds default timeout for socket operations + }; + + static bool isPositiveCompletion(int status); + static bool isPositiveIntermediate(int status); + static bool isTransientNegative(int status); + static bool isPermanentNegative(int status); + + void login(const std::string& hostname, std::string& response); + void loginUsingCRAMMD5(const std::string& username, const std::string& password); + void loginUsingCRAMSHA1(const std::string& username, const std::string& password); + void loginUsingCRAM(const std::string& username, const std::string& method, Poco::DigestEngine& hmac); + void loginUsingLogin(const std::string& username, const std::string& password); + void loginUsingPlain(const std::string& username, const std::string& password); + void loginUsingXOAUTH2(const std::string& username, const std::string& password); + DialogSocket& socket(); + +private: + void sendCommands(const MailMessage& message, const Recipients* pRecipients = 0); + void transportMessage(const MailMessage& message); + + DialogSocket _socket; + bool _isOpen; +}; + + +// +// inlines +// +inline bool SMTPClientSession::isPositiveCompletion(int status) +{ + return status/100 == SMTP_POSITIVE_COMPLETION; +} + + +inline bool SMTPClientSession::isPositiveIntermediate(int status) +{ + return status/100 == SMTP_POSITIVE_INTERMEDIATE; +} + + +inline bool SMTPClientSession::isTransientNegative(int status) +{ + return status/100 == SMTP_TRANSIENT_NEGATIVE; +} + + +inline bool SMTPClientSession::isPermanentNegative(int status) +{ + return status/100 == SMTP_PERMANENT_NEGATIVE; +} + + +inline DialogSocket& SMTPClientSession::socket() +{ + return _socket; +} + + +} } // namespace Poco::Net + + +#endif // Net_SMTPClientSession_INCLUDED diff --git a/contrib/libs/poco/Net/include/Poco/Net/ServerSocket.h b/contrib/libs/poco/Net/include/Poco/Net/ServerSocket.h index 2cd6765788..d8aca6790a 100644 --- a/contrib/libs/poco/Net/include/Poco/Net/ServerSocket.h +++ b/contrib/libs/poco/Net/include/Poco/Net/ServerSocket.h @@ -1,230 +1,230 @@ -// -// ServerSocket.h -// -// Library: Net -// Package: Sockets -// Module: ServerSocket -// -// Definition of the ServerSocket class. -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Net_ServerSocket_INCLUDED -#define Net_ServerSocket_INCLUDED - - -#include "Poco/Net/Net.h" -#include "Poco/Net/Socket.h" -#include "Poco/Net/StreamSocket.h" - - -namespace Poco { -namespace Net { - - -class Net_API ServerSocket: public Socket - /// This class provides an interface to a - /// TCP server socket. -{ -public: - ServerSocket(); - /// Creates a server socket. - /// - /// The server socket must be bound to - /// an address and put into listening state. - - ServerSocket(const Socket& socket); - /// Creates the ServerSocket with the SocketImpl - /// from another socket. The SocketImpl must be - /// a ServerSocketImpl, otherwise an InvalidArgumentException - /// will be thrown. - - ServerSocket(const SocketAddress& address, int backlog = 64); - /// Creates a server socket, binds it - /// to the given address and puts it in listening - /// state. - /// - /// After successful construction, the server socket - /// is ready to accept connections. - - ServerSocket(Poco::UInt16 port, int backlog = 64); - /// Creates a server socket, binds it - /// to the given port and puts it in listening - /// state. - /// - /// After successful construction, the server socket - /// is ready to accept connections. - - virtual ~ServerSocket(); - /// Destroys the StreamSocket. - - ServerSocket& operator = (const Socket& socket); - /// Assignment operator. - /// - /// Releases the socket's SocketImpl and - /// attaches the SocketImpl from the other socket and - /// increments the reference count of the SocketImpl. - - virtual void bind(const SocketAddress& address, bool reuseAddress = false); - /// Binds a local address to the socket. - /// - /// This is usually only done when establishing a server - /// socket. TCP clients should not bind a socket to a - /// specific address. - /// - /// If reuseAddress is true, sets the SO_REUSEADDR - /// socket option. - - virtual void bind(const SocketAddress& address, bool reuseAddress, bool reusePort); - /// Binds a local address to the socket. - /// - /// This is usually only done when establishing a server - /// socket. TCP clients should not bind a socket to a - /// specific address. - /// - /// If reuseAddress is true, sets the SO_REUSEADDR - /// socket option. - /// - /// If reuseAddress is true, sets the SO_REUSEPORT - /// socket option. - - virtual void bind(Poco::UInt16 port, bool reuseAddress = false); - /// Binds a local port to the socket. - /// - /// This is usually only done when establishing a server - /// socket. - /// - /// If reuseAddress is true, sets the SO_REUSEADDR - /// socket option. - - virtual void bind(Poco::UInt16 port, bool reuseAddress, bool reusePort); - /// Binds a local port to the socket. - /// - /// This is usually only done when establishing a server - /// socket. - /// - /// If reuseAddress is true, sets the SO_REUSEADDR - /// socket option. - /// - /// If reusePort is true, sets the SO_REUSEPORT - /// socket option. - - virtual void bind6(const SocketAddress& address, bool reuseAddress = false, bool ipV6Only = false); - /// Binds a local IPv6 address to the socket. - /// - /// This is usually only done when establishing a server - /// socket. TCP clients should not bind a socket to a - /// specific address. - /// - /// If reuseAddress is true, sets the SO_REUSEADDR - /// socket option. - /// - /// The given address must be an IPv6 address. The - /// IPPROTO_IPV6/IPV6_V6ONLY option is set on the socket - /// according to the ipV6Only parameter. - /// - /// If the library has not been built with IPv6 support, - /// a Poco::NotImplementedException will be thrown. - - virtual void bind6(const SocketAddress& address, bool reuseAddress, bool reusePort, bool ipV6Only); - /// Binds a local IPv6 address to the socket. - /// - /// This is usually only done when establishing a server - /// socket. TCP clients should not bind a socket to a - /// specific address. - /// - /// If reuseAddress is true, sets the SO_REUSEADDR - /// socket option. - /// - /// If reusePort is true, sets the SO_REUSEPORT - /// socket option. - /// - /// The given address must be an IPv6 address. The - /// IPPROTO_IPV6/IPV6_V6ONLY option is set on the socket - /// according to the ipV6Only parameter. - /// - /// If the library has not been built with IPv6 support, - /// a Poco::NotImplementedException will be thrown. - - virtual void bind6(Poco::UInt16 port, bool reuseAddress = false, bool ipV6Only = false); - /// Binds a local IPv6 port to the socket. - /// - /// This is usually only done when establishing a server - /// socket. - /// - /// If reuseAddress is true, sets the SO_REUSEADDR - /// socket option. - /// - /// The given address must be an IPv6 address. The - /// IPPROTO_IPV6/IPV6_V6ONLY option is set on the socket - /// according to the ipV6Only parameter. - /// - /// If the library has not been built with IPv6 support, - /// a Poco::NotImplementedException will be thrown. - - virtual void bind6(Poco::UInt16 port, bool reuseAddress, bool reusePort, bool ipV6Only); - /// Binds a local IPv6 port to the socket. - /// - /// This is usually only done when establishing a server - /// socket. - /// - /// If reuseAddress is true, sets the SO_REUSEADDR - /// socket option. - /// - /// If reusePort is true, sets the SO_REUSEPORT - /// socket option. - /// The given address must be an IPv6 address. The - /// IPPROTO_IPV6/IPV6_V6ONLY option is set on the socket - /// according to the ipV6Only parameter. - /// - /// If the library has not been built with IPv6 support, - /// a Poco::NotImplementedException will be thrown. - - virtual void listen(int backlog = 64); - /// Puts the socket into listening state. - /// - /// The socket becomes a passive socket that - /// can accept incoming connection requests. - /// - /// The backlog argument specifies the maximum - /// number of connections that can be queued - /// for this socket. - - virtual StreamSocket acceptConnection(SocketAddress& clientAddr); - /// Gets the next completed connection from the - /// socket's completed connection queue. - /// - /// If the queue is empty, waits until a connection - /// request completes. - /// - /// Returns a new TCP socket for the connection - /// with the client. - /// - /// The client socket's address is returned in clientAddr. - - virtual StreamSocket acceptConnection(); - /// Gets the next completed connection from the - /// socket's completed connection queue. - /// - /// If the queue is empty, waits until a connection - /// request completes. - /// - /// Returns a new TCP socket for the connection - /// with the client. - -protected: - ServerSocket(SocketImpl* pImpl, bool); - /// The bool argument is to resolve an ambiguity with - /// another constructor (Microsoft Visual C++ 2005) -}; - - -} } // namespace Poco::Net - - -#endif // Net_ServerSocket_INCLUDED +// +// ServerSocket.h +// +// Library: Net +// Package: Sockets +// Module: ServerSocket +// +// Definition of the ServerSocket class. +// +// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. +// and Contributors. +// +// SPDX-License-Identifier: BSL-1.0 +// + + +#ifndef Net_ServerSocket_INCLUDED +#define Net_ServerSocket_INCLUDED + + +#include "Poco/Net/Net.h" +#include "Poco/Net/Socket.h" +#include "Poco/Net/StreamSocket.h" + + +namespace Poco { +namespace Net { + + +class Net_API ServerSocket: public Socket + /// This class provides an interface to a + /// TCP server socket. +{ +public: + ServerSocket(); + /// Creates a server socket. + /// + /// The server socket must be bound to + /// an address and put into listening state. + + ServerSocket(const Socket& socket); + /// Creates the ServerSocket with the SocketImpl + /// from another socket. The SocketImpl must be + /// a ServerSocketImpl, otherwise an InvalidArgumentException + /// will be thrown. + + ServerSocket(const SocketAddress& address, int backlog = 64); + /// Creates a server socket, binds it + /// to the given address and puts it in listening + /// state. + /// + /// After successful construction, the server socket + /// is ready to accept connections. + + ServerSocket(Poco::UInt16 port, int backlog = 64); + /// Creates a server socket, binds it + /// to the given port and puts it in listening + /// state. + /// + /// After successful construction, the server socket + /// is ready to accept connections. + + virtual ~ServerSocket(); + /// Destroys the StreamSocket. + + ServerSocket& operator = (const Socket& socket); + /// Assignment operator. + /// + /// Releases the socket's SocketImpl and + /// attaches the SocketImpl from the other socket and + /// increments the reference count of the SocketImpl. + + virtual void bind(const SocketAddress& address, bool reuseAddress = false); + /// Binds a local address to the socket. + /// + /// This is usually only done when establishing a server + /// socket. TCP clients should not bind a socket to a + /// specific address. + /// + /// If reuseAddress is true, sets the SO_REUSEADDR + /// socket option. + + virtual void bind(const SocketAddress& address, bool reuseAddress, bool reusePort); + /// Binds a local address to the socket. + /// + /// This is usually only done when establishing a server + /// socket. TCP clients should not bind a socket to a + /// specific address. + /// + /// If reuseAddress is true, sets the SO_REUSEADDR + /// socket option. + /// + /// If reuseAddress is true, sets the SO_REUSEPORT + /// socket option. + + virtual void bind(Poco::UInt16 port, bool reuseAddress = false); + /// Binds a local port to the socket. + /// + /// This is usually only done when establishing a server + /// socket. + /// + /// If reuseAddress is true, sets the SO_REUSEADDR + /// socket option. + + virtual void bind(Poco::UInt16 port, bool reuseAddress, bool reusePort); + /// Binds a local port to the socket. + /// + /// This is usually only done when establishing a server + /// socket. + /// + /// If reuseAddress is true, sets the SO_REUSEADDR + /// socket option. + /// + /// If reusePort is true, sets the SO_REUSEPORT + /// socket option. + + virtual void bind6(const SocketAddress& address, bool reuseAddress = false, bool ipV6Only = false); + /// Binds a local IPv6 address to the socket. + /// + /// This is usually only done when establishing a server + /// socket. TCP clients should not bind a socket to a + /// specific address. + /// + /// If reuseAddress is true, sets the SO_REUSEADDR + /// socket option. + /// + /// The given address must be an IPv6 address. The + /// IPPROTO_IPV6/IPV6_V6ONLY option is set on the socket + /// according to the ipV6Only parameter. + /// + /// If the library has not been built with IPv6 support, + /// a Poco::NotImplementedException will be thrown. + + virtual void bind6(const SocketAddress& address, bool reuseAddress, bool reusePort, bool ipV6Only); + /// Binds a local IPv6 address to the socket. + /// + /// This is usually only done when establishing a server + /// socket. TCP clients should not bind a socket to a + /// specific address. + /// + /// If reuseAddress is true, sets the SO_REUSEADDR + /// socket option. + /// + /// If reusePort is true, sets the SO_REUSEPORT + /// socket option. + /// + /// The given address must be an IPv6 address. The + /// IPPROTO_IPV6/IPV6_V6ONLY option is set on the socket + /// according to the ipV6Only parameter. + /// + /// If the library has not been built with IPv6 support, + /// a Poco::NotImplementedException will be thrown. + + virtual void bind6(Poco::UInt16 port, bool reuseAddress = false, bool ipV6Only = false); + /// Binds a local IPv6 port to the socket. + /// + /// This is usually only done when establishing a server + /// socket. + /// + /// If reuseAddress is true, sets the SO_REUSEADDR + /// socket option. + /// + /// The given address must be an IPv6 address. The + /// IPPROTO_IPV6/IPV6_V6ONLY option is set on the socket + /// according to the ipV6Only parameter. + /// + /// If the library has not been built with IPv6 support, + /// a Poco::NotImplementedException will be thrown. + + virtual void bind6(Poco::UInt16 port, bool reuseAddress, bool reusePort, bool ipV6Only); + /// Binds a local IPv6 port to the socket. + /// + /// This is usually only done when establishing a server + /// socket. + /// + /// If reuseAddress is true, sets the SO_REUSEADDR + /// socket option. + /// + /// If reusePort is true, sets the SO_REUSEPORT + /// socket option. + /// The given address must be an IPv6 address. The + /// IPPROTO_IPV6/IPV6_V6ONLY option is set on the socket + /// according to the ipV6Only parameter. + /// + /// If the library has not been built with IPv6 support, + /// a Poco::NotImplementedException will be thrown. + + virtual void listen(int backlog = 64); + /// Puts the socket into listening state. + /// + /// The socket becomes a passive socket that + /// can accept incoming connection requests. + /// + /// The backlog argument specifies the maximum + /// number of connections that can be queued + /// for this socket. + + virtual StreamSocket acceptConnection(SocketAddress& clientAddr); + /// Gets the next completed connection from the + /// socket's completed connection queue. + /// + /// If the queue is empty, waits until a connection + /// request completes. + /// + /// Returns a new TCP socket for the connection + /// with the client. + /// + /// The client socket's address is returned in clientAddr. + + virtual StreamSocket acceptConnection(); + /// Gets the next completed connection from the + /// socket's completed connection queue. + /// + /// If the queue is empty, waits until a connection + /// request completes. + /// + /// Returns a new TCP socket for the connection + /// with the client. + +protected: + ServerSocket(SocketImpl* pImpl, bool); + /// The bool argument is to resolve an ambiguity with + /// another constructor (Microsoft Visual C++ 2005) +}; + + +} } // namespace Poco::Net + + +#endif // Net_ServerSocket_INCLUDED diff --git a/contrib/libs/poco/Net/include/Poco/Net/ServerSocketImpl.h b/contrib/libs/poco/Net/include/Poco/Net/ServerSocketImpl.h index 903b153281..aaa5c7cc20 100644 --- a/contrib/libs/poco/Net/include/Poco/Net/ServerSocketImpl.h +++ b/contrib/libs/poco/Net/include/Poco/Net/ServerSocketImpl.h @@ -1,45 +1,45 @@ -// -// ServerSocketImpl.h -// -// Library: Net -// Package: Sockets -// Module: ServerSocketImpl -// -// Definition of the ServerSocketImpl class. -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Net_ServerSocketImpl_INCLUDED -#define Net_ServerSocketImpl_INCLUDED - - -#include "Poco/Net/Net.h" -#include "Poco/Net/SocketImpl.h" - - -namespace Poco { -namespace Net { - - -class Net_API ServerSocketImpl: public SocketImpl - /// This class implements a TCP server socket. -{ -public: - ServerSocketImpl(); - /// Creates the ServerSocketImpl. - -protected: - virtual ~ServerSocketImpl(); - /// Destroys the ServerSocketImpl. -}; - - -} } // namespace Poco::Net - - -#endif // Net_ServerSocketImpl_INCLUDED +// +// ServerSocketImpl.h +// +// Library: Net +// Package: Sockets +// Module: ServerSocketImpl +// +// Definition of the ServerSocketImpl class. +// +// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. +// and Contributors. +// +// SPDX-License-Identifier: BSL-1.0 +// + + +#ifndef Net_ServerSocketImpl_INCLUDED +#define Net_ServerSocketImpl_INCLUDED + + +#include "Poco/Net/Net.h" +#include "Poco/Net/SocketImpl.h" + + +namespace Poco { +namespace Net { + + +class Net_API ServerSocketImpl: public SocketImpl + /// This class implements a TCP server socket. +{ +public: + ServerSocketImpl(); + /// Creates the ServerSocketImpl. + +protected: + virtual ~ServerSocketImpl(); + /// Destroys the ServerSocketImpl. +}; + + +} } // namespace Poco::Net + + +#endif // Net_ServerSocketImpl_INCLUDED diff --git a/contrib/libs/poco/Net/include/Poco/Net/Socket.h b/contrib/libs/poco/Net/include/Poco/Net/Socket.h index 01f3f3ef2d..c509187d8d 100644 --- a/contrib/libs/poco/Net/include/Poco/Net/Socket.h +++ b/contrib/libs/poco/Net/include/Poco/Net/Socket.h @@ -1,631 +1,631 @@ -// -// Socket.h -// -// Library: Net -// Package: Sockets -// Module: Socket -// -// Definition of the Socket class. -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Net_Socket_INCLUDED -#define Net_Socket_INCLUDED - - -#include "Poco/Net/Net.h" -#include "Poco/Net/SocketImpl.h" -#include <vector> - - -namespace Poco { -namespace Net { - - -class Net_API Socket - /// Socket is the common base class for - /// StreamSocket, ServerSocket, DatagramSocket and other - /// socket classes. - /// - /// It provides operations common to all socket types. -{ -public: - enum SelectMode - /// The mode argument to poll() and select(). - { - SELECT_READ = 1, - SELECT_WRITE = 2, - SELECT_ERROR = 4 - }; - - typedef std::vector<Socket> SocketList; - - Socket(); - /// Creates an uninitialized socket. - - Socket(const Socket& socket); - /// Copy constructor. +// +// Socket.h +// +// Library: Net +// Package: Sockets +// Module: Socket +// +// Definition of the Socket class. +// +// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. +// and Contributors. +// +// SPDX-License-Identifier: BSL-1.0 +// + + +#ifndef Net_Socket_INCLUDED +#define Net_Socket_INCLUDED + + +#include "Poco/Net/Net.h" +#include "Poco/Net/SocketImpl.h" +#include <vector> + + +namespace Poco { +namespace Net { + + +class Net_API Socket + /// Socket is the common base class for + /// StreamSocket, ServerSocket, DatagramSocket and other + /// socket classes. + /// + /// It provides operations common to all socket types. +{ +public: + enum SelectMode + /// The mode argument to poll() and select(). + { + SELECT_READ = 1, + SELECT_WRITE = 2, + SELECT_ERROR = 4 + }; + + typedef std::vector<Socket> SocketList; + + Socket(); + /// Creates an uninitialized socket. + + Socket(const Socket& socket); + /// Copy constructor. + /// + /// Attaches the SocketImpl from the other socket and + /// increments the reference count of the SocketImpl. + + Socket& operator = (const Socket& socket); + /// Assignment operator. + /// + /// Releases the socket's SocketImpl and + /// attaches the SocketImpl from the other socket and + /// increments the reference count of the SocketImpl. + + virtual ~Socket(); + /// Destroys the Socket and releases the + /// SocketImpl. + + bool operator == (const Socket& socket) const; + /// Returns true if both sockets share the same + /// SocketImpl, false otherwise. + + bool operator != (const Socket& socket) const; + /// Returns false if both sockets share the same + /// SocketImpl, true otherwise. + + bool operator < (const Socket& socket) const; + /// Compares the SocketImpl pointers. + + bool operator <= (const Socket& socket) const; + /// Compares the SocketImpl pointers. + + bool operator > (const Socket& socket) const; + /// Compares the SocketImpl pointers. + + bool operator >= (const Socket& socket) const; + /// Compares the SocketImpl pointers. + + void close(); + /// Closes the socket. + + static int select(SocketList& readList, SocketList& writeList, SocketList& exceptList, const Poco::Timespan& timeout); + /// Determines the status of one or more sockets, + /// using a call to select(). + /// + /// ReadList contains the list of sockets which should be + /// checked for readability. + /// + /// WriteList contains the list of sockets which should be + /// checked for writeability. + /// + /// ExceptList contains a list of sockets which should be + /// checked for a pending error. + /// + /// Returns the number of sockets ready. + /// + /// After return, + /// * readList contains those sockets ready for reading, + /// * writeList contains those sockets ready for writing, + /// * exceptList contains those sockets with a pending error. + /// + /// If the total number of sockets passed in readList, writeList and + /// exceptList is zero, select() will return immediately and the + /// return value will be 0. + /// + /// If one of the sockets passed to select() is closed while + /// select() runs, select will return immediately. However, + /// the closed socket will not be included in any list. + /// In this case, the return value may be greater than the sum + /// of all sockets in all list. + + bool poll(const Poco::Timespan& timeout, int mode) const; + /// Determines the status of the socket, using a + /// call to poll() or select(). /// - /// Attaches the SocketImpl from the other socket and - /// increments the reference count of the SocketImpl. - - Socket& operator = (const Socket& socket); - /// Assignment operator. - /// - /// Releases the socket's SocketImpl and - /// attaches the SocketImpl from the other socket and - /// increments the reference count of the SocketImpl. - - virtual ~Socket(); - /// Destroys the Socket and releases the - /// SocketImpl. - - bool operator == (const Socket& socket) const; - /// Returns true if both sockets share the same - /// SocketImpl, false otherwise. - - bool operator != (const Socket& socket) const; - /// Returns false if both sockets share the same - /// SocketImpl, true otherwise. - - bool operator < (const Socket& socket) const; - /// Compares the SocketImpl pointers. - - bool operator <= (const Socket& socket) const; - /// Compares the SocketImpl pointers. - - bool operator > (const Socket& socket) const; - /// Compares the SocketImpl pointers. - - bool operator >= (const Socket& socket) const; - /// Compares the SocketImpl pointers. - - void close(); - /// Closes the socket. - - static int select(SocketList& readList, SocketList& writeList, SocketList& exceptList, const Poco::Timespan& timeout); - /// Determines the status of one or more sockets, - /// using a call to select(). - /// - /// ReadList contains the list of sockets which should be - /// checked for readability. - /// - /// WriteList contains the list of sockets which should be - /// checked for writeability. - /// - /// ExceptList contains a list of sockets which should be - /// checked for a pending error. - /// - /// Returns the number of sockets ready. - /// - /// After return, - /// * readList contains those sockets ready for reading, - /// * writeList contains those sockets ready for writing, - /// * exceptList contains those sockets with a pending error. - /// - /// If the total number of sockets passed in readList, writeList and - /// exceptList is zero, select() will return immediately and the - /// return value will be 0. - /// - /// If one of the sockets passed to select() is closed while - /// select() runs, select will return immediately. However, - /// the closed socket will not be included in any list. - /// In this case, the return value may be greater than the sum - /// of all sockets in all list. - - bool poll(const Poco::Timespan& timeout, int mode) const; - /// Determines the status of the socket, using a - /// call to poll() or select(). - /// - /// The mode argument is constructed by combining the values - /// of the SelectMode enumeration. - /// - /// Returns true if the next operation corresponding to - /// mode will not block, false otherwise. - - int available() const; - /// Returns the number of bytes available that can be read - /// without causing the socket to block. - - void setSendBufferSize(int size); - /// Sets the size of the send buffer. - - int getSendBufferSize() const; - /// Returns the size of the send buffer. - /// - /// The returned value may be different than the - /// value previously set with setSendBufferSize(), - /// as the system is free to adjust the value. - - void setReceiveBufferSize(int size); - /// Sets the size of the receive buffer. - - int getReceiveBufferSize() const; - /// Returns the size of the receive buffer. - /// - /// The returned value may be different than the - /// value previously set with setReceiveBufferSize(), - /// as the system is free to adjust the value. - - void setSendTimeout(const Poco::Timespan& timeout); - /// Sets the send timeout for the socket. - - Poco::Timespan getSendTimeout() const; - /// Returns the send timeout for the socket. - /// - /// The returned timeout may be different than the - /// timeout previously set with setSendTimeout(), - /// as the system is free to adjust the value. - - void setReceiveTimeout(const Poco::Timespan& timeout); - /// Sets the send timeout for the socket. - /// - /// On systems that do not support SO_RCVTIMEO, a - /// workaround using poll() is provided. - - Poco::Timespan getReceiveTimeout() const; - /// Returns the receive timeout for the socket. - /// - /// The returned timeout may be different than the - /// timeout previously set with getReceiveTimeout(), - /// as the system is free to adjust the value. - - void setOption(int level, int option, int value); - /// Sets the socket option specified by level and option - /// to the given integer value. - - void setOption(int level, int option, unsigned value); - /// Sets the socket option specified by level and option - /// to the given integer value. - - void setOption(int level, int option, unsigned char value); - /// Sets the socket option specified by level and option - /// to the given integer value. - - void setOption(int level, int option, const Poco::Timespan& value); - /// Sets the socket option specified by level and option - /// to the given time value. - - void setOption(int level, int option, const IPAddress& value); - /// Sets the socket option specified by level and option - /// to the given time value. - - void getOption(int level, int option, int& value) const; - /// Returns the value of the socket option - /// specified by level and option. - - void getOption(int level, int option, unsigned& value) const; - /// Returns the value of the socket option - /// specified by level and option. - - void getOption(int level, int option, unsigned char& value) const; - /// Returns the value of the socket option - /// specified by level and option. - - void getOption(int level, int option, Poco::Timespan& value) const; - /// Returns the value of the socket option - /// specified by level and option. - - void getOption(int level, int option, IPAddress& value) const; - /// Returns the value of the socket option - /// specified by level and option. - - void setLinger(bool on, int seconds); - /// Sets the value of the SO_LINGER socket option. - - void getLinger(bool& on, int& seconds) const; - /// Returns the value of the SO_LINGER socket option. - - void setNoDelay(bool flag); - /// Sets the value of the TCP_NODELAY socket option. - - bool getNoDelay() const; - /// Returns the value of the TCP_NODELAY socket option. - - void setKeepAlive(bool flag); - /// Sets the value of the SO_KEEPALIVE socket option. - - bool getKeepAlive() const; - /// Returns the value of the SO_KEEPALIVE socket option. - - void setReuseAddress(bool flag); - /// Sets the value of the SO_REUSEADDR socket option. - - bool getReuseAddress() const; - /// Returns the value of the SO_REUSEADDR socket option. - - void setReusePort(bool flag); - /// Sets the value of the SO_REUSEPORT socket option. - /// Does nothing if the socket implementation does not - /// support SO_REUSEPORT. - - bool getReusePort() const; - /// Returns the value of the SO_REUSEPORT socket option. - /// - /// Returns false if the socket implementation does not - /// support SO_REUSEPORT. - - void setOOBInline(bool flag); - /// Sets the value of the SO_OOBINLINE socket option. - - bool getOOBInline() const; - /// Returns the value of the SO_OOBINLINE socket option. - - void setBlocking(bool flag); - /// Sets the socket in blocking mode if flag is true, - /// disables blocking mode if flag is false. - - bool getBlocking() const; - /// Returns the blocking mode of the socket. - /// This method will only work if the blocking modes of - /// the socket are changed via the setBlocking method! - - SocketAddress address() const; - /// Returns the IP address and port number of the socket. - - SocketAddress peerAddress() const; - /// Returns the IP address and port number of the peer socket. - - SocketImpl* impl() const; - /// Returns the SocketImpl for this socket. - - bool secure() const; - /// Returns true iff the socket's connection is secure - /// (using SSL or TLS). - - static bool supportsIPv4(); - /// Returns true if the system supports IPv4. - - static bool supportsIPv6(); - /// Returns true if the system supports IPv6. - - void init(int af); - /// Creates the underlying system socket for the given - /// address family. - /// - /// Normally, this method should not be called directly, as - /// socket creation will be handled automatically. There are - /// a few situations where calling this method after creation - /// of the Socket object makes sense. One example is setting - /// a socket option before calling bind() on a ServerSocket. - -protected: - Socket(SocketImpl* pImpl); - /// Creates the Socket and attaches the given SocketImpl. - /// The socket takes ownership of the SocketImpl. - - poco_socket_t sockfd() const; - /// Returns the socket descriptor for this socket. - -private: - -#if defined(POCO_HAVE_FD_POLL) -class FDCompare - /// Utility functor used to compare socket file descriptors. - /// Used in poll() member function. -{ -public: - FDCompare(int fd): _fd(fd) { } - inline bool operator()(const Socket& socket) const - { return socket.sockfd() == _fd; } - -private: - FDCompare(); - int _fd; -}; -#endif - - SocketImpl* _pImpl; -}; - - -// -// inlines -// -inline bool Socket::operator == (const Socket& socket) const -{ - return _pImpl == socket._pImpl; -} - - -inline bool Socket::operator != (const Socket& socket) const -{ - return _pImpl != socket._pImpl; -} - - -inline bool Socket::operator < (const Socket& socket) const -{ - return _pImpl < socket._pImpl; -} - - -inline bool Socket::operator <= (const Socket& socket) const -{ - return _pImpl <= socket._pImpl; -} - - -inline bool Socket::operator > (const Socket& socket) const -{ - return _pImpl > socket._pImpl; -} - - -inline bool Socket::operator >= (const Socket& socket) const -{ - return _pImpl >= socket._pImpl; -} - - -inline void Socket::close() -{ - _pImpl->close(); -} - - -inline bool Socket::poll(const Poco::Timespan& timeout, int mode) const -{ - return _pImpl->poll(timeout, mode); -} - - -inline int Socket::available() const -{ - return _pImpl->available(); -} - - -inline void Socket::setSendBufferSize(int size) -{ - _pImpl->setSendBufferSize(size); -} - - -inline int Socket::getSendBufferSize() const -{ - return _pImpl->getSendBufferSize(); -} - - -inline void Socket::setReceiveBufferSize(int size) -{ - _pImpl->setReceiveBufferSize(size); -} - - -inline int Socket::getReceiveBufferSize() const -{ - return _pImpl->getReceiveBufferSize(); -} - - -inline void Socket::setSendTimeout(const Poco::Timespan& timeout) -{ - _pImpl->setSendTimeout(timeout); -} - - -inline Poco::Timespan Socket::getSendTimeout() const -{ - return _pImpl->getSendTimeout(); -} - - -inline void Socket::setReceiveTimeout(const Poco::Timespan& timeout) -{ - _pImpl->setReceiveTimeout(timeout); -} - - -inline Poco::Timespan Socket::getReceiveTimeout() const -{ - return _pImpl->getReceiveTimeout(); -} - - -inline void Socket::setOption(int level, int option, int value) -{ - _pImpl->setOption(level, option, value); -} - - -inline void Socket::setOption(int level, int option, unsigned value) -{ - _pImpl->setOption(level, option, value); -} - - -inline void Socket::setOption(int level, int option, unsigned char value) -{ - _pImpl->setOption(level, option, value); -} - - -inline void Socket::setOption(int level, int option, const Poco::Timespan& value) -{ - _pImpl->setOption(level, option, value); -} - - -inline void Socket::setOption(int level, int option, const IPAddress& value) -{ - _pImpl->setOption(level, option, value); -} - - -inline void Socket::getOption(int level, int option, int& value) const -{ - _pImpl->getOption(level, option, value); -} - - -inline void Socket::getOption(int level, int option, unsigned& value) const -{ - _pImpl->getOption(level, option, value); -} - - -inline void Socket::getOption(int level, int option, unsigned char& value) const -{ - _pImpl->getOption(level, option, value); -} - - -inline void Socket::getOption(int level, int option, Poco::Timespan& value) const -{ - _pImpl->getOption(level, option, value); -} - - -inline void Socket::getOption(int level, int option, IPAddress& value) const -{ - _pImpl->getOption(level, option, value); -} - - -inline void Socket::setLinger(bool on, int seconds) -{ - _pImpl->setLinger(on, seconds); -} - - -inline void Socket::getLinger(bool& on, int& seconds) const -{ - _pImpl->getLinger(on, seconds); -} - - -inline void Socket::setNoDelay(bool flag) -{ - _pImpl->setNoDelay(flag); -} - - -inline bool Socket::getNoDelay() const -{ - return _pImpl->getNoDelay(); -} - - -inline void Socket::setKeepAlive(bool flag) -{ - _pImpl->setKeepAlive(flag); -} - - -inline bool Socket::getKeepAlive() const -{ - return _pImpl->getKeepAlive(); -} - - -inline void Socket::setReuseAddress(bool flag) -{ - _pImpl->setReuseAddress(flag); -} - - -inline bool Socket::getReuseAddress() const -{ - return _pImpl->getReuseAddress(); -} - - -inline void Socket::setReusePort(bool flag) -{ - _pImpl->setReusePort(flag); -} - - -inline bool Socket::getReusePort() const -{ - return _pImpl->getReusePort(); -} - - -inline void Socket::setOOBInline(bool flag) -{ - _pImpl->setOOBInline(flag); -} - - -inline bool Socket::getOOBInline() const -{ - return _pImpl->getOOBInline(); -} - - -inline void Socket::setBlocking(bool flag) -{ - _pImpl->setBlocking(flag); -} - - -inline bool Socket::getBlocking() const -{ - return _pImpl->getBlocking(); -} - - -inline SocketImpl* Socket::impl() const -{ - return _pImpl; -} - - -inline poco_socket_t Socket::sockfd() const -{ - return _pImpl->sockfd(); -} - - -inline SocketAddress Socket::address() const -{ - return _pImpl->address(); -} - - -inline SocketAddress Socket::peerAddress() const -{ - return _pImpl->peerAddress(); -} - - -inline bool Socket::secure() const -{ - return _pImpl->secure(); -} - - -inline bool Socket::supportsIPv4() -{ - return true; -} - - -inline bool Socket::supportsIPv6() -{ -#if defined(POCO_HAVE_IPv6) - return true; -#else - return false; -#endif -} - - -inline void Socket::init(int af) -{ - _pImpl->init(af); -} - - -} } // namespace Poco::Net - - -#endif // Net_Socket_INCLUDED + /// The mode argument is constructed by combining the values + /// of the SelectMode enumeration. + /// + /// Returns true if the next operation corresponding to + /// mode will not block, false otherwise. + + int available() const; + /// Returns the number of bytes available that can be read + /// without causing the socket to block. + + void setSendBufferSize(int size); + /// Sets the size of the send buffer. + + int getSendBufferSize() const; + /// Returns the size of the send buffer. + /// + /// The returned value may be different than the + /// value previously set with setSendBufferSize(), + /// as the system is free to adjust the value. + + void setReceiveBufferSize(int size); + /// Sets the size of the receive buffer. + + int getReceiveBufferSize() const; + /// Returns the size of the receive buffer. + /// + /// The returned value may be different than the + /// value previously set with setReceiveBufferSize(), + /// as the system is free to adjust the value. + + void setSendTimeout(const Poco::Timespan& timeout); + /// Sets the send timeout for the socket. + + Poco::Timespan getSendTimeout() const; + /// Returns the send timeout for the socket. + /// + /// The returned timeout may be different than the + /// timeout previously set with setSendTimeout(), + /// as the system is free to adjust the value. + + void setReceiveTimeout(const Poco::Timespan& timeout); + /// Sets the send timeout for the socket. + /// + /// On systems that do not support SO_RCVTIMEO, a + /// workaround using poll() is provided. + + Poco::Timespan getReceiveTimeout() const; + /// Returns the receive timeout for the socket. + /// + /// The returned timeout may be different than the + /// timeout previously set with getReceiveTimeout(), + /// as the system is free to adjust the value. + + void setOption(int level, int option, int value); + /// Sets the socket option specified by level and option + /// to the given integer value. + + void setOption(int level, int option, unsigned value); + /// Sets the socket option specified by level and option + /// to the given integer value. + + void setOption(int level, int option, unsigned char value); + /// Sets the socket option specified by level and option + /// to the given integer value. + + void setOption(int level, int option, const Poco::Timespan& value); + /// Sets the socket option specified by level and option + /// to the given time value. + + void setOption(int level, int option, const IPAddress& value); + /// Sets the socket option specified by level and option + /// to the given time value. + + void getOption(int level, int option, int& value) const; + /// Returns the value of the socket option + /// specified by level and option. + + void getOption(int level, int option, unsigned& value) const; + /// Returns the value of the socket option + /// specified by level and option. + + void getOption(int level, int option, unsigned char& value) const; + /// Returns the value of the socket option + /// specified by level and option. + + void getOption(int level, int option, Poco::Timespan& value) const; + /// Returns the value of the socket option + /// specified by level and option. + + void getOption(int level, int option, IPAddress& value) const; + /// Returns the value of the socket option + /// specified by level and option. + + void setLinger(bool on, int seconds); + /// Sets the value of the SO_LINGER socket option. + + void getLinger(bool& on, int& seconds) const; + /// Returns the value of the SO_LINGER socket option. + + void setNoDelay(bool flag); + /// Sets the value of the TCP_NODELAY socket option. + + bool getNoDelay() const; + /// Returns the value of the TCP_NODELAY socket option. + + void setKeepAlive(bool flag); + /// Sets the value of the SO_KEEPALIVE socket option. + + bool getKeepAlive() const; + /// Returns the value of the SO_KEEPALIVE socket option. + + void setReuseAddress(bool flag); + /// Sets the value of the SO_REUSEADDR socket option. + + bool getReuseAddress() const; + /// Returns the value of the SO_REUSEADDR socket option. + + void setReusePort(bool flag); + /// Sets the value of the SO_REUSEPORT socket option. + /// Does nothing if the socket implementation does not + /// support SO_REUSEPORT. + + bool getReusePort() const; + /// Returns the value of the SO_REUSEPORT socket option. + /// + /// Returns false if the socket implementation does not + /// support SO_REUSEPORT. + + void setOOBInline(bool flag); + /// Sets the value of the SO_OOBINLINE socket option. + + bool getOOBInline() const; + /// Returns the value of the SO_OOBINLINE socket option. + + void setBlocking(bool flag); + /// Sets the socket in blocking mode if flag is true, + /// disables blocking mode if flag is false. + + bool getBlocking() const; + /// Returns the blocking mode of the socket. + /// This method will only work if the blocking modes of + /// the socket are changed via the setBlocking method! + + SocketAddress address() const; + /// Returns the IP address and port number of the socket. + + SocketAddress peerAddress() const; + /// Returns the IP address and port number of the peer socket. + + SocketImpl* impl() const; + /// Returns the SocketImpl for this socket. + + bool secure() const; + /// Returns true iff the socket's connection is secure + /// (using SSL or TLS). + + static bool supportsIPv4(); + /// Returns true if the system supports IPv4. + + static bool supportsIPv6(); + /// Returns true if the system supports IPv6. + + void init(int af); + /// Creates the underlying system socket for the given + /// address family. + /// + /// Normally, this method should not be called directly, as + /// socket creation will be handled automatically. There are + /// a few situations where calling this method after creation + /// of the Socket object makes sense. One example is setting + /// a socket option before calling bind() on a ServerSocket. + +protected: + Socket(SocketImpl* pImpl); + /// Creates the Socket and attaches the given SocketImpl. + /// The socket takes ownership of the SocketImpl. + + poco_socket_t sockfd() const; + /// Returns the socket descriptor for this socket. + +private: + +#if defined(POCO_HAVE_FD_POLL) +class FDCompare + /// Utility functor used to compare socket file descriptors. + /// Used in poll() member function. +{ +public: + FDCompare(int fd): _fd(fd) { } + inline bool operator()(const Socket& socket) const + { return socket.sockfd() == _fd; } + +private: + FDCompare(); + int _fd; +}; +#endif + + SocketImpl* _pImpl; +}; + + +// +// inlines +// +inline bool Socket::operator == (const Socket& socket) const +{ + return _pImpl == socket._pImpl; +} + + +inline bool Socket::operator != (const Socket& socket) const +{ + return _pImpl != socket._pImpl; +} + + +inline bool Socket::operator < (const Socket& socket) const +{ + return _pImpl < socket._pImpl; +} + + +inline bool Socket::operator <= (const Socket& socket) const +{ + return _pImpl <= socket._pImpl; +} + + +inline bool Socket::operator > (const Socket& socket) const +{ + return _pImpl > socket._pImpl; +} + + +inline bool Socket::operator >= (const Socket& socket) const +{ + return _pImpl >= socket._pImpl; +} + + +inline void Socket::close() +{ + _pImpl->close(); +} + + +inline bool Socket::poll(const Poco::Timespan& timeout, int mode) const +{ + return _pImpl->poll(timeout, mode); +} + + +inline int Socket::available() const +{ + return _pImpl->available(); +} + + +inline void Socket::setSendBufferSize(int size) +{ + _pImpl->setSendBufferSize(size); +} + + +inline int Socket::getSendBufferSize() const +{ + return _pImpl->getSendBufferSize(); +} + + +inline void Socket::setReceiveBufferSize(int size) +{ + _pImpl->setReceiveBufferSize(size); +} + + +inline int Socket::getReceiveBufferSize() const +{ + return _pImpl->getReceiveBufferSize(); +} + + +inline void Socket::setSendTimeout(const Poco::Timespan& timeout) +{ + _pImpl->setSendTimeout(timeout); +} + + +inline Poco::Timespan Socket::getSendTimeout() const +{ + return _pImpl->getSendTimeout(); +} + + +inline void Socket::setReceiveTimeout(const Poco::Timespan& timeout) +{ + _pImpl->setReceiveTimeout(timeout); +} + + +inline Poco::Timespan Socket::getReceiveTimeout() const +{ + return _pImpl->getReceiveTimeout(); +} + + +inline void Socket::setOption(int level, int option, int value) +{ + _pImpl->setOption(level, option, value); +} + + +inline void Socket::setOption(int level, int option, unsigned value) +{ + _pImpl->setOption(level, option, value); +} + + +inline void Socket::setOption(int level, int option, unsigned char value) +{ + _pImpl->setOption(level, option, value); +} + + +inline void Socket::setOption(int level, int option, const Poco::Timespan& value) +{ + _pImpl->setOption(level, option, value); +} + + +inline void Socket::setOption(int level, int option, const IPAddress& value) +{ + _pImpl->setOption(level, option, value); +} + + +inline void Socket::getOption(int level, int option, int& value) const +{ + _pImpl->getOption(level, option, value); +} + + +inline void Socket::getOption(int level, int option, unsigned& value) const +{ + _pImpl->getOption(level, option, value); +} + + +inline void Socket::getOption(int level, int option, unsigned char& value) const +{ + _pImpl->getOption(level, option, value); +} + + +inline void Socket::getOption(int level, int option, Poco::Timespan& value) const +{ + _pImpl->getOption(level, option, value); +} + + +inline void Socket::getOption(int level, int option, IPAddress& value) const +{ + _pImpl->getOption(level, option, value); +} + + +inline void Socket::setLinger(bool on, int seconds) +{ + _pImpl->setLinger(on, seconds); +} + + +inline void Socket::getLinger(bool& on, int& seconds) const +{ + _pImpl->getLinger(on, seconds); +} + + +inline void Socket::setNoDelay(bool flag) +{ + _pImpl->setNoDelay(flag); +} + + +inline bool Socket::getNoDelay() const +{ + return _pImpl->getNoDelay(); +} + + +inline void Socket::setKeepAlive(bool flag) +{ + _pImpl->setKeepAlive(flag); +} + + +inline bool Socket::getKeepAlive() const +{ + return _pImpl->getKeepAlive(); +} + + +inline void Socket::setReuseAddress(bool flag) +{ + _pImpl->setReuseAddress(flag); +} + + +inline bool Socket::getReuseAddress() const +{ + return _pImpl->getReuseAddress(); +} + + +inline void Socket::setReusePort(bool flag) +{ + _pImpl->setReusePort(flag); +} + + +inline bool Socket::getReusePort() const +{ + return _pImpl->getReusePort(); +} + + +inline void Socket::setOOBInline(bool flag) +{ + _pImpl->setOOBInline(flag); +} + + +inline bool Socket::getOOBInline() const +{ + return _pImpl->getOOBInline(); +} + + +inline void Socket::setBlocking(bool flag) +{ + _pImpl->setBlocking(flag); +} + + +inline bool Socket::getBlocking() const +{ + return _pImpl->getBlocking(); +} + + +inline SocketImpl* Socket::impl() const +{ + return _pImpl; +} + + +inline poco_socket_t Socket::sockfd() const +{ + return _pImpl->sockfd(); +} + + +inline SocketAddress Socket::address() const +{ + return _pImpl->address(); +} + + +inline SocketAddress Socket::peerAddress() const +{ + return _pImpl->peerAddress(); +} + + +inline bool Socket::secure() const +{ + return _pImpl->secure(); +} + + +inline bool Socket::supportsIPv4() +{ + return true; +} + + +inline bool Socket::supportsIPv6() +{ +#if defined(POCO_HAVE_IPv6) + return true; +#else + return false; +#endif +} + + +inline void Socket::init(int af) +{ + _pImpl->init(af); +} + + +} } // namespace Poco::Net + + +#endif // Net_Socket_INCLUDED diff --git a/contrib/libs/poco/Net/include/Poco/Net/SocketAcceptor.h b/contrib/libs/poco/Net/include/Poco/Net/SocketAcceptor.h index 63d2959ead..c9021ecd0b 100644 --- a/contrib/libs/poco/Net/include/Poco/Net/SocketAcceptor.h +++ b/contrib/libs/poco/Net/include/Poco/Net/SocketAcceptor.h @@ -1,196 +1,196 @@ -// -// SocketAcceptor.h -// -// Library: Net -// Package: Reactor -// Module: SocketAcceptor -// -// Definition of the SocketAcceptor class. -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Net_SocketAcceptor_INCLUDED -#define Net_SocketAcceptor_INCLUDED - - -#include "Poco/Net/Net.h" -#include "Poco/Net/SocketNotification.h" -#include "Poco/Net/SocketReactor.h" -#include "Poco/Net/ServerSocket.h" -#include "Poco/Net/StreamSocket.h" -#include "Poco/Observer.h" - - -namespace Poco { -namespace Net { - - -template <class ServiceHandler> -class SocketAcceptor - /// This class implements the Acceptor part of the - /// Acceptor-Connector design pattern. - /// - /// The Acceptor-Connector pattern has been described in the book - /// "Pattern Languages of Program Design 3", edited by Robert Martin, - /// Frank Buschmann and Dirk Riehle (Addison Wesley, 1997). - /// - /// The Acceptor-Connector design pattern decouples connection - /// establishment and service initialization in a distributed system - /// from the processing performed once a service is initialized. - /// This decoupling is achieved with three components: Acceptors, - /// Connectors and Service Handlers. - /// The SocketAcceptor passively waits for connection requests (usually - /// from a remote Connector) and establishes a connection upon - /// arrival of a connection requests. Also, a Service Handler is - /// initialized to process the data arriving via the connection in - /// an application-specific way. - /// - /// The SocketAcceptor sets up a ServerSocket and registers itself - /// for a ReadableNotification, denoting an incoming connection request. - /// - /// When the ServerSocket becomes readable the SocketAcceptor accepts - /// the connection request and creates a ServiceHandler to - /// service the connection. - /// - /// The ServiceHandler class must provide a constructor that - /// takes a StreamSocket and a SocketReactor as arguments, - /// e.g.: - /// MyServiceHandler(const StreamSocket& socket, ServiceReactor& reactor) - /// - /// When the ServiceHandler is done, it must destroy itself. - /// - /// Subclasses can override the createServiceHandler() factory method - /// if special steps are necessary to create a ServiceHandler object. -{ -public: - explicit SocketAcceptor(ServerSocket& socket): - _socket(socket), - _pReactor(0) - /// Creates a SocketAcceptor, using the given ServerSocket. - { - } - - SocketAcceptor(ServerSocket& socket, SocketReactor& reactor): - _socket(socket), - _pReactor(&reactor) - /// Creates a SocketAcceptor, using the given ServerSocket. - /// The SocketAcceptor registers itself with the given SocketReactor. - { - _pReactor->addEventHandler(_socket, Poco::Observer<SocketAcceptor, - ReadableNotification>(*this, &SocketAcceptor::onAccept)); - } - - virtual ~SocketAcceptor() - /// Destroys the SocketAcceptor. - { - try - { - if (_pReactor) - { - _pReactor->removeEventHandler(_socket, Poco::Observer<SocketAcceptor, - ReadableNotification>(*this, &SocketAcceptor::onAccept)); - } - } - catch (...) - { - poco_unexpected(); - } - } - - void setReactor(SocketReactor& reactor) - /// Sets the reactor for this acceptor. - { - _pReactor = &reactor; - if (!_pReactor->hasEventHandler(_socket, Poco::Observer<SocketAcceptor, - ReadableNotification>(*this, &SocketAcceptor::onAccept))) - { - registerAcceptor(reactor); - } - } - - virtual void registerAcceptor(SocketReactor& reactor) - /// Registers the SocketAcceptor with a SocketReactor. +// +// SocketAcceptor.h +// +// Library: Net +// Package: Reactor +// Module: SocketAcceptor +// +// Definition of the SocketAcceptor class. +// +// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. +// and Contributors. +// +// SPDX-License-Identifier: BSL-1.0 +// + + +#ifndef Net_SocketAcceptor_INCLUDED +#define Net_SocketAcceptor_INCLUDED + + +#include "Poco/Net/Net.h" +#include "Poco/Net/SocketNotification.h" +#include "Poco/Net/SocketReactor.h" +#include "Poco/Net/ServerSocket.h" +#include "Poco/Net/StreamSocket.h" +#include "Poco/Observer.h" + + +namespace Poco { +namespace Net { + + +template <class ServiceHandler> +class SocketAcceptor + /// This class implements the Acceptor part of the + /// Acceptor-Connector design pattern. + /// + /// The Acceptor-Connector pattern has been described in the book + /// "Pattern Languages of Program Design 3", edited by Robert Martin, + /// Frank Buschmann and Dirk Riehle (Addison Wesley, 1997). + /// + /// The Acceptor-Connector design pattern decouples connection + /// establishment and service initialization in a distributed system + /// from the processing performed once a service is initialized. + /// This decoupling is achieved with three components: Acceptors, + /// Connectors and Service Handlers. + /// The SocketAcceptor passively waits for connection requests (usually + /// from a remote Connector) and establishes a connection upon + /// arrival of a connection requests. Also, a Service Handler is + /// initialized to process the data arriving via the connection in + /// an application-specific way. + /// + /// The SocketAcceptor sets up a ServerSocket and registers itself + /// for a ReadableNotification, denoting an incoming connection request. + /// + /// When the ServerSocket becomes readable the SocketAcceptor accepts + /// the connection request and creates a ServiceHandler to + /// service the connection. + /// + /// The ServiceHandler class must provide a constructor that + /// takes a StreamSocket and a SocketReactor as arguments, + /// e.g.: + /// MyServiceHandler(const StreamSocket& socket, ServiceReactor& reactor) + /// + /// When the ServiceHandler is done, it must destroy itself. + /// + /// Subclasses can override the createServiceHandler() factory method + /// if special steps are necessary to create a ServiceHandler object. +{ +public: + explicit SocketAcceptor(ServerSocket& socket): + _socket(socket), + _pReactor(0) + /// Creates a SocketAcceptor, using the given ServerSocket. + { + } + + SocketAcceptor(ServerSocket& socket, SocketReactor& reactor): + _socket(socket), + _pReactor(&reactor) + /// Creates a SocketAcceptor, using the given ServerSocket. + /// The SocketAcceptor registers itself with the given SocketReactor. + { + _pReactor->addEventHandler(_socket, Poco::Observer<SocketAcceptor, + ReadableNotification>(*this, &SocketAcceptor::onAccept)); + } + + virtual ~SocketAcceptor() + /// Destroys the SocketAcceptor. + { + try + { + if (_pReactor) + { + _pReactor->removeEventHandler(_socket, Poco::Observer<SocketAcceptor, + ReadableNotification>(*this, &SocketAcceptor::onAccept)); + } + } + catch (...) + { + poco_unexpected(); + } + } + + void setReactor(SocketReactor& reactor) + /// Sets the reactor for this acceptor. + { + _pReactor = &reactor; + if (!_pReactor->hasEventHandler(_socket, Poco::Observer<SocketAcceptor, + ReadableNotification>(*this, &SocketAcceptor::onAccept))) + { + registerAcceptor(reactor); + } + } + + virtual void registerAcceptor(SocketReactor& reactor) + /// Registers the SocketAcceptor with a SocketReactor. + /// + /// A subclass can override this function to e.g. + /// register an event handler for timeout event. /// - /// A subclass can override this function to e.g. - /// register an event handler for timeout event. - /// - /// If acceptor was constructed without providing reactor to it, - /// the override of this method must either call the base class - /// implementation or directly register the accept handler with - /// the reactor. - { - if (_pReactor) - throw Poco::InvalidAccessException("Acceptor already registered."); - - _pReactor = &reactor; - _pReactor->addEventHandler(_socket, Poco::Observer<SocketAcceptor, ReadableNotification>(*this, &SocketAcceptor::onAccept)); - } - - virtual void unregisterAcceptor() - /// Unregisters the SocketAcceptor. + /// If acceptor was constructed without providing reactor to it, + /// the override of this method must either call the base class + /// implementation or directly register the accept handler with + /// the reactor. + { + if (_pReactor) + throw Poco::InvalidAccessException("Acceptor already registered."); + + _pReactor = &reactor; + _pReactor->addEventHandler(_socket, Poco::Observer<SocketAcceptor, ReadableNotification>(*this, &SocketAcceptor::onAccept)); + } + + virtual void unregisterAcceptor() + /// Unregisters the SocketAcceptor. + /// + /// A subclass can override this function to e.g. + /// unregister its event handler for a timeout event. /// - /// A subclass can override this function to e.g. - /// unregister its event handler for a timeout event. - /// - /// If the accept handler was registered with the reactor, - /// the overriding method must either call the base class - /// implementation or directly unregister the accept handler. - { - if (_pReactor) - { - _pReactor->removeEventHandler(_socket, Poco::Observer<SocketAcceptor, ReadableNotification>(*this, &SocketAcceptor::onAccept)); - } - } - - void onAccept(ReadableNotification* pNotification) - /// Accepts connection and creates event handler. - { - pNotification->release(); - StreamSocket sock = _socket.acceptConnection(); - _pReactor->wakeUp(); - createServiceHandler(sock); - } - -protected: - virtual ServiceHandler* createServiceHandler(StreamSocket& socket) - /// Create and initialize a new ServiceHandler instance. - /// - /// Subclasses can override this method. - { - return new ServiceHandler(socket, *_pReactor); - } - - SocketReactor* reactor() - /// Returns a pointer to the SocketReactor where - /// this SocketAcceptor is registered. - /// - /// The pointer may be null. - { - return _pReactor; - } - - Socket& socket() - /// Returns a reference to the SocketAcceptor's socket. - { - return _socket; - } - -private: - SocketAcceptor(); - SocketAcceptor(const SocketAcceptor&); - SocketAcceptor& operator = (const SocketAcceptor&); - - ServerSocket _socket; - SocketReactor* _pReactor; -}; - - -} } // namespace Poco::Net - - -#endif // Net_SocketAcceptor_INCLUDED + /// If the accept handler was registered with the reactor, + /// the overriding method must either call the base class + /// implementation or directly unregister the accept handler. + { + if (_pReactor) + { + _pReactor->removeEventHandler(_socket, Poco::Observer<SocketAcceptor, ReadableNotification>(*this, &SocketAcceptor::onAccept)); + } + } + + void onAccept(ReadableNotification* pNotification) + /// Accepts connection and creates event handler. + { + pNotification->release(); + StreamSocket sock = _socket.acceptConnection(); + _pReactor->wakeUp(); + createServiceHandler(sock); + } + +protected: + virtual ServiceHandler* createServiceHandler(StreamSocket& socket) + /// Create and initialize a new ServiceHandler instance. + /// + /// Subclasses can override this method. + { + return new ServiceHandler(socket, *_pReactor); + } + + SocketReactor* reactor() + /// Returns a pointer to the SocketReactor where + /// this SocketAcceptor is registered. + /// + /// The pointer may be null. + { + return _pReactor; + } + + Socket& socket() + /// Returns a reference to the SocketAcceptor's socket. + { + return _socket; + } + +private: + SocketAcceptor(); + SocketAcceptor(const SocketAcceptor&); + SocketAcceptor& operator = (const SocketAcceptor&); + + ServerSocket _socket; + SocketReactor* _pReactor; +}; + + +} } // namespace Poco::Net + + +#endif // Net_SocketAcceptor_INCLUDED diff --git a/contrib/libs/poco/Net/include/Poco/Net/SocketAddress.h b/contrib/libs/poco/Net/include/Poco/Net/SocketAddress.h index 34fd515d9d..61c5581789 100644 --- a/contrib/libs/poco/Net/include/Poco/Net/SocketAddress.h +++ b/contrib/libs/poco/Net/include/Poco/Net/SocketAddress.h @@ -1,301 +1,301 @@ -// -// SocketAddress.h -// -// Library: Net -// Package: NetCore -// Module: SocketAddress -// -// Definition of the SocketAddress class. -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Net_SocketAddress_INCLUDED -#define Net_SocketAddress_INCLUDED - - -#include "Poco/Net/Net.h" -#include "Poco/Net/SocketAddressImpl.h" -#include <ostream> - - -namespace Poco { - -class BinaryReader; -class BinaryWriter; - -namespace Net { - - -class IPAddress; - - -class Net_API SocketAddress - /// This class represents an internet (IP) endpoint/socket - /// address. The address can belong either to the - /// IPv4 or the IPv6 address family and consists of a - /// host address and a port number. -{ -public: - // The following declarations keep the Family type - // backwards compatible with the previously used - // enum declaration. - typedef AddressFamily::Family Family; - static const Family IPv4 = AddressFamily::IPv4; -#if defined(POCO_HAVE_IPv6) - static const Family IPv6 = AddressFamily::IPv6; -#endif -#if defined(POCO_OS_FAMILY_UNIX) - static const Family UNIX_LOCAL = AddressFamily::UNIX_LOCAL; -#endif - - SocketAddress(); - /// Creates a wildcard (all zero) IPv4 SocketAddress. - - explicit SocketAddress(Family family); - /// Creates a SocketAddress with unspecified (wildcard) IP address - /// of the given family. - - SocketAddress(const IPAddress& hostAddress, Poco::UInt16 portNumber); - /// Creates a SocketAddress from an IP address and given port number. - - explicit SocketAddress(Poco::UInt16 port); - /// Creates a SocketAddress with unspecified (wildcard) IP address - /// and given port number. - - SocketAddress(Family family, Poco::UInt16 port); - /// Creates a SocketAddress with unspecified (wildcard) IP address - /// of the given family, and given port number. - - SocketAddress(const std::string& hostAddress, Poco::UInt16 portNumber); - /// Creates a SocketAddress from an IP address and given port number. - /// - /// The IP address must either be a domain name, or it must - /// be in dotted decimal (IPv4) or hex string (IPv6) format. - - SocketAddress(Family family, const std::string& hostAddress, Poco::UInt16 portNumber); - /// Creates a SocketAddress from an IP address and given port number. - /// - /// The IP address must either be a domain name, or it must - /// be in dotted decimal (IPv4) or hex string (IPv6) format. - /// - /// If a domain name is given in hostAddress, it is resolved and the address - /// matching the given family is used. If no address matching the given family - /// is found, or the IP address given in hostAddress does not match the given - /// family, an AddressFamilyMismatchException is thrown. - - SocketAddress(const std::string& hostAddress, const std::string& portNumber); - /// Creates a SocketAddress from an IP address and the - /// service name or port number. - /// - /// The IP address must either be a domain name, or it must - /// be in dotted decimal (IPv4) or hex string (IPv6) format. - /// - /// The given port must either be a decimal port number, or - /// a service name. - - SocketAddress(Family family, const std::string& hostAddress, const std::string& portNumber); - /// Creates a SocketAddress from an IP address and the - /// service name or port number. - /// - /// The IP address must either be a domain name, or it must - /// be in dotted decimal (IPv4) or hex string (IPv6) format. - /// - /// The given port must either be a decimal port number, or - /// a service name. - /// - /// If a domain name is given in hostAddress, it is resolved and the address - /// matching the given family is used. If no address matching the given family - /// is found, or the IP address given in hostAddress does not match the given - /// family, an AddressFamilyMismatchException is thrown. - - explicit SocketAddress(const std::string& hostAndPort); - /// Creates a SocketAddress from an IP address or host name and the - /// port number/service name. Host name/address and port number must - /// be separated by a colon. In case of an IPv6 address, - /// the address part must be enclosed in brackets. - /// - /// Examples: - /// 192.168.1.10:80 - /// [::ffff:192.168.1.120]:2040 - /// www.appinf.com:8080 - /// - /// On POSIX platforms supporting UNIX_LOCAL sockets, hostAndPort - /// can also be the absolute path of a local socket, starting with a - /// slash, e.g. "/tmp/local.socket". - - SocketAddress(Family family, const std::string& addr); - /// Creates a SocketAddress of the given family from a - /// string representation of the address, which is - /// either an IP address and port number, separated by - /// a colon for IPv4 or IPv6 addresses, or a path for - /// UNIX_LOCAL sockets. - - SocketAddress(const SocketAddress& addr); - /// Creates a SocketAddress by copying another one. - - SocketAddress(const struct sockaddr* addr, poco_socklen_t length); - /// Creates a SocketAddress from a native socket address. - - ~SocketAddress(); - /// Destroys the SocketAddress. - - SocketAddress& operator = (const SocketAddress& socketAddress); - /// Assigns another SocketAddress. - - IPAddress host() const; - /// Returns the host IP address. - - Poco::UInt16 port() const; - /// Returns the port number. - - poco_socklen_t length() const; - /// Returns the length of the internal native socket address. - - const struct sockaddr* addr() const; - /// Returns a pointer to the internal native socket address. - - int af() const; - /// Returns the address family (AF_INET or AF_INET6) of the address. - - std::string toString() const; - /// Returns a string representation of the address. - - Family family() const; - /// Returns the address family of the host's address. - - bool operator < (const SocketAddress& socketAddress) const; - bool operator == (const SocketAddress& socketAddress) const; - bool operator != (const SocketAddress& socketAddress) const; - - enum - { - MAX_ADDRESS_LENGTH = -#if defined(POCO_OS_FAMILY_UNIX) - sizeof(struct sockaddr_un) -#elif defined(POCO_HAVE_IPv6) - sizeof(struct sockaddr_in6) -#else - sizeof(struct sockaddr_in) -#endif - /// Maximum length in bytes of a socket address. - }; - -protected: - void init(const IPAddress& hostAddress, Poco::UInt16 portNumber); - void init(const std::string& hostAddress, Poco::UInt16 portNumber); - void init(Family family, const std::string& hostAddress, Poco::UInt16 portNumber); - void init(Family family, const std::string& address); - void init(const std::string& hostAndPort); - Poco::UInt16 resolveService(const std::string& service); - -private: - typedef Poco::Net::Impl::SocketAddressImpl Impl; - typedef Poco::AutoPtr<Impl> Ptr; - - Ptr pImpl() const; - - void newIPv4(); - void newIPv4(const sockaddr_in*); - void newIPv4(const IPAddress& hostAddress, Poco::UInt16 portNumber); - -#if defined(POCO_HAVE_IPv6) - void newIPv6(const sockaddr_in6*); - void newIPv6(const IPAddress& hostAddress, Poco::UInt16 portNumber); -#endif - -#if defined(POCO_OS_FAMILY_UNIX) - void newLocal(const sockaddr_un* sockAddr); - void newLocal(const std::string& path); -#endif - - Ptr _pImpl; -}; - - -// -// inlines -// -inline SocketAddress::Ptr SocketAddress::pImpl() const -{ - if (_pImpl) return _pImpl; - throw Poco::NullPointerException("Pointer to SocketAddress implementation is NULL."); -} - - -inline void SocketAddress::newIPv4() -{ - _pImpl = new Poco::Net::Impl::IPv4SocketAddressImpl; -} - - -inline void SocketAddress::newIPv4(const sockaddr_in* sockAddr) -{ - _pImpl = new Poco::Net::Impl::IPv4SocketAddressImpl(sockAddr); -} - - -inline void SocketAddress::newIPv4(const IPAddress& hostAddress, Poco::UInt16 portNumber) -{ - _pImpl = new Poco::Net::Impl::IPv4SocketAddressImpl(hostAddress.addr(), htons(portNumber)); -} - - -#if defined(POCO_HAVE_IPv6) -inline void SocketAddress::newIPv6(const sockaddr_in6* sockAddr) -{ - _pImpl = new Poco::Net::Impl::IPv6SocketAddressImpl(sockAddr); -} - - -inline void SocketAddress::newIPv6(const IPAddress& hostAddress, Poco::UInt16 portNumber) -{ - _pImpl = new Poco::Net::Impl::IPv6SocketAddressImpl(hostAddress.addr(), htons(portNumber), hostAddress.scope()); -} -#endif // POCO_HAVE_IPv6 - - -#if defined(POCO_OS_FAMILY_UNIX) -inline void SocketAddress::newLocal(const sockaddr_un* sockAddr) -{ - _pImpl = new Poco::Net::Impl::LocalSocketAddressImpl(sockAddr); -} - - -inline void SocketAddress::newLocal(const std::string& path) -{ - _pImpl = new Poco::Net::Impl::LocalSocketAddressImpl(path.c_str(), path.size()); -} -#endif // POCO_OS_FAMILY_UNIX - - -inline bool SocketAddress::operator == (const SocketAddress& socketAddress) const -{ -#if defined(POCO_OS_FAMILY_UNIX) - if (family() == UNIX_LOCAL) - return toString() == socketAddress.toString(); - else -#endif - return host() == socketAddress.host() && port() == socketAddress.port(); -} - - -inline bool SocketAddress::operator != (const SocketAddress& socketAddress) const -{ - return !(operator == (socketAddress)); -} - - -} } // namespace Poco::Net - - -Net_API Poco::BinaryWriter& operator << (Poco::BinaryWriter& writer, const Poco::Net::SocketAddress& value); -Net_API Poco::BinaryReader& operator >> (Poco::BinaryReader& reader, Poco::Net::SocketAddress& value); -Net_API std::ostream& operator << (std::ostream& ostr, const Poco::Net::SocketAddress& address); - - -#endif // Net_SocketAddress_INCLUDED +// +// SocketAddress.h +// +// Library: Net +// Package: NetCore +// Module: SocketAddress +// +// Definition of the SocketAddress class. +// +// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. +// and Contributors. +// +// SPDX-License-Identifier: BSL-1.0 +// + + +#ifndef Net_SocketAddress_INCLUDED +#define Net_SocketAddress_INCLUDED + + +#include "Poco/Net/Net.h" +#include "Poco/Net/SocketAddressImpl.h" +#include <ostream> + + +namespace Poco { + +class BinaryReader; +class BinaryWriter; + +namespace Net { + + +class IPAddress; + + +class Net_API SocketAddress + /// This class represents an internet (IP) endpoint/socket + /// address. The address can belong either to the + /// IPv4 or the IPv6 address family and consists of a + /// host address and a port number. +{ +public: + // The following declarations keep the Family type + // backwards compatible with the previously used + // enum declaration. + typedef AddressFamily::Family Family; + static const Family IPv4 = AddressFamily::IPv4; +#if defined(POCO_HAVE_IPv6) + static const Family IPv6 = AddressFamily::IPv6; +#endif +#if defined(POCO_OS_FAMILY_UNIX) + static const Family UNIX_LOCAL = AddressFamily::UNIX_LOCAL; +#endif + + SocketAddress(); + /// Creates a wildcard (all zero) IPv4 SocketAddress. + + explicit SocketAddress(Family family); + /// Creates a SocketAddress with unspecified (wildcard) IP address + /// of the given family. + + SocketAddress(const IPAddress& hostAddress, Poco::UInt16 portNumber); + /// Creates a SocketAddress from an IP address and given port number. + + explicit SocketAddress(Poco::UInt16 port); + /// Creates a SocketAddress with unspecified (wildcard) IP address + /// and given port number. + + SocketAddress(Family family, Poco::UInt16 port); + /// Creates a SocketAddress with unspecified (wildcard) IP address + /// of the given family, and given port number. + + SocketAddress(const std::string& hostAddress, Poco::UInt16 portNumber); + /// Creates a SocketAddress from an IP address and given port number. + /// + /// The IP address must either be a domain name, or it must + /// be in dotted decimal (IPv4) or hex string (IPv6) format. + + SocketAddress(Family family, const std::string& hostAddress, Poco::UInt16 portNumber); + /// Creates a SocketAddress from an IP address and given port number. + /// + /// The IP address must either be a domain name, or it must + /// be in dotted decimal (IPv4) or hex string (IPv6) format. + /// + /// If a domain name is given in hostAddress, it is resolved and the address + /// matching the given family is used. If no address matching the given family + /// is found, or the IP address given in hostAddress does not match the given + /// family, an AddressFamilyMismatchException is thrown. + + SocketAddress(const std::string& hostAddress, const std::string& portNumber); + /// Creates a SocketAddress from an IP address and the + /// service name or port number. + /// + /// The IP address must either be a domain name, or it must + /// be in dotted decimal (IPv4) or hex string (IPv6) format. + /// + /// The given port must either be a decimal port number, or + /// a service name. + + SocketAddress(Family family, const std::string& hostAddress, const std::string& portNumber); + /// Creates a SocketAddress from an IP address and the + /// service name or port number. + /// + /// The IP address must either be a domain name, or it must + /// be in dotted decimal (IPv4) or hex string (IPv6) format. + /// + /// The given port must either be a decimal port number, or + /// a service name. + /// + /// If a domain name is given in hostAddress, it is resolved and the address + /// matching the given family is used. If no address matching the given family + /// is found, or the IP address given in hostAddress does not match the given + /// family, an AddressFamilyMismatchException is thrown. + + explicit SocketAddress(const std::string& hostAndPort); + /// Creates a SocketAddress from an IP address or host name and the + /// port number/service name. Host name/address and port number must + /// be separated by a colon. In case of an IPv6 address, + /// the address part must be enclosed in brackets. + /// + /// Examples: + /// 192.168.1.10:80 + /// [::ffff:192.168.1.120]:2040 + /// www.appinf.com:8080 + /// + /// On POSIX platforms supporting UNIX_LOCAL sockets, hostAndPort + /// can also be the absolute path of a local socket, starting with a + /// slash, e.g. "/tmp/local.socket". + + SocketAddress(Family family, const std::string& addr); + /// Creates a SocketAddress of the given family from a + /// string representation of the address, which is + /// either an IP address and port number, separated by + /// a colon for IPv4 or IPv6 addresses, or a path for + /// UNIX_LOCAL sockets. + + SocketAddress(const SocketAddress& addr); + /// Creates a SocketAddress by copying another one. + + SocketAddress(const struct sockaddr* addr, poco_socklen_t length); + /// Creates a SocketAddress from a native socket address. + + ~SocketAddress(); + /// Destroys the SocketAddress. + + SocketAddress& operator = (const SocketAddress& socketAddress); + /// Assigns another SocketAddress. + + IPAddress host() const; + /// Returns the host IP address. + + Poco::UInt16 port() const; + /// Returns the port number. + + poco_socklen_t length() const; + /// Returns the length of the internal native socket address. + + const struct sockaddr* addr() const; + /// Returns a pointer to the internal native socket address. + + int af() const; + /// Returns the address family (AF_INET or AF_INET6) of the address. + + std::string toString() const; + /// Returns a string representation of the address. + + Family family() const; + /// Returns the address family of the host's address. + + bool operator < (const SocketAddress& socketAddress) const; + bool operator == (const SocketAddress& socketAddress) const; + bool operator != (const SocketAddress& socketAddress) const; + + enum + { + MAX_ADDRESS_LENGTH = +#if defined(POCO_OS_FAMILY_UNIX) + sizeof(struct sockaddr_un) +#elif defined(POCO_HAVE_IPv6) + sizeof(struct sockaddr_in6) +#else + sizeof(struct sockaddr_in) +#endif + /// Maximum length in bytes of a socket address. + }; + +protected: + void init(const IPAddress& hostAddress, Poco::UInt16 portNumber); + void init(const std::string& hostAddress, Poco::UInt16 portNumber); + void init(Family family, const std::string& hostAddress, Poco::UInt16 portNumber); + void init(Family family, const std::string& address); + void init(const std::string& hostAndPort); + Poco::UInt16 resolveService(const std::string& service); + +private: + typedef Poco::Net::Impl::SocketAddressImpl Impl; + typedef Poco::AutoPtr<Impl> Ptr; + + Ptr pImpl() const; + + void newIPv4(); + void newIPv4(const sockaddr_in*); + void newIPv4(const IPAddress& hostAddress, Poco::UInt16 portNumber); + +#if defined(POCO_HAVE_IPv6) + void newIPv6(const sockaddr_in6*); + void newIPv6(const IPAddress& hostAddress, Poco::UInt16 portNumber); +#endif + +#if defined(POCO_OS_FAMILY_UNIX) + void newLocal(const sockaddr_un* sockAddr); + void newLocal(const std::string& path); +#endif + + Ptr _pImpl; +}; + + +// +// inlines +// +inline SocketAddress::Ptr SocketAddress::pImpl() const +{ + if (_pImpl) return _pImpl; + throw Poco::NullPointerException("Pointer to SocketAddress implementation is NULL."); +} + + +inline void SocketAddress::newIPv4() +{ + _pImpl = new Poco::Net::Impl::IPv4SocketAddressImpl; +} + + +inline void SocketAddress::newIPv4(const sockaddr_in* sockAddr) +{ + _pImpl = new Poco::Net::Impl::IPv4SocketAddressImpl(sockAddr); +} + + +inline void SocketAddress::newIPv4(const IPAddress& hostAddress, Poco::UInt16 portNumber) +{ + _pImpl = new Poco::Net::Impl::IPv4SocketAddressImpl(hostAddress.addr(), htons(portNumber)); +} + + +#if defined(POCO_HAVE_IPv6) +inline void SocketAddress::newIPv6(const sockaddr_in6* sockAddr) +{ + _pImpl = new Poco::Net::Impl::IPv6SocketAddressImpl(sockAddr); +} + + +inline void SocketAddress::newIPv6(const IPAddress& hostAddress, Poco::UInt16 portNumber) +{ + _pImpl = new Poco::Net::Impl::IPv6SocketAddressImpl(hostAddress.addr(), htons(portNumber), hostAddress.scope()); +} +#endif // POCO_HAVE_IPv6 + + +#if defined(POCO_OS_FAMILY_UNIX) +inline void SocketAddress::newLocal(const sockaddr_un* sockAddr) +{ + _pImpl = new Poco::Net::Impl::LocalSocketAddressImpl(sockAddr); +} + + +inline void SocketAddress::newLocal(const std::string& path) +{ + _pImpl = new Poco::Net::Impl::LocalSocketAddressImpl(path.c_str(), path.size()); +} +#endif // POCO_OS_FAMILY_UNIX + + +inline bool SocketAddress::operator == (const SocketAddress& socketAddress) const +{ +#if defined(POCO_OS_FAMILY_UNIX) + if (family() == UNIX_LOCAL) + return toString() == socketAddress.toString(); + else +#endif + return host() == socketAddress.host() && port() == socketAddress.port(); +} + + +inline bool SocketAddress::operator != (const SocketAddress& socketAddress) const +{ + return !(operator == (socketAddress)); +} + + +} } // namespace Poco::Net + + +Net_API Poco::BinaryWriter& operator << (Poco::BinaryWriter& writer, const Poco::Net::SocketAddress& value); +Net_API Poco::BinaryReader& operator >> (Poco::BinaryReader& reader, Poco::Net::SocketAddress& value); +Net_API std::ostream& operator << (std::ostream& ostr, const Poco::Net::SocketAddress& address); + + +#endif // Net_SocketAddress_INCLUDED diff --git a/contrib/libs/poco/Net/include/Poco/Net/SocketAddressImpl.h b/contrib/libs/poco/Net/include/Poco/Net/SocketAddressImpl.h index 355a25a3ac..079bece510 100644 --- a/contrib/libs/poco/Net/include/Poco/Net/SocketAddressImpl.h +++ b/contrib/libs/poco/Net/include/Poco/Net/SocketAddressImpl.h @@ -1,258 +1,258 @@ -// -// SocketAddressImpl.h -// -// Library: Net -// Package: NetCore -// Module: SocketAddressImpl -// -// Definition of the SocketAddressImpl class. -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Net_SocketAddressImpl_INCLUDED -#define Net_SocketAddressImpl_INCLUDED - - -#include "Poco/Net/Net.h" -#include "Poco/Net/SocketDefs.h" -#include "Poco/Net/IPAddress.h" -#include "Poco/RefCountedObject.h" - - -namespace Poco { -namespace Net { -namespace Impl { - - -class Net_API SocketAddressImpl : public Poco::RefCountedObject -{ -public: - typedef AddressFamily::Family Family; - - virtual ~SocketAddressImpl(); - - virtual IPAddress host() const = 0; - virtual UInt16 port() const = 0; - virtual poco_socklen_t length() const = 0; - virtual const struct sockaddr* addr() const = 0; - virtual int af() const = 0; - virtual Family family() const = 0; - virtual std::string toString() const = 0; - -protected: - SocketAddressImpl(); - -private: - SocketAddressImpl(const SocketAddressImpl&); - SocketAddressImpl& operator = (const SocketAddressImpl&); -}; - - -class Net_API IPv4SocketAddressImpl: public SocketAddressImpl -{ -public: - IPv4SocketAddressImpl(); - IPv4SocketAddressImpl(const struct sockaddr_in* addr); - IPv4SocketAddressImpl(const void* addr, UInt16 port); - IPAddress host() const; - UInt16 port() const; - poco_socklen_t length() const; - const struct sockaddr* addr() const; - int af() const; - Family family() const; - std::string toString() const; - -private: - struct sockaddr_in _addr; -}; - - -// -// inlines -// - -inline IPAddress IPv4SocketAddressImpl::host() const -{ - return IPAddress(&_addr.sin_addr, sizeof(_addr.sin_addr)); -} - - -inline UInt16 IPv4SocketAddressImpl::port() const -{ - return _addr.sin_port; -} - - -inline poco_socklen_t IPv4SocketAddressImpl::length() const -{ - return sizeof(_addr); -} - - -inline const struct sockaddr* IPv4SocketAddressImpl::addr() const -{ - return reinterpret_cast<const struct sockaddr*>(&_addr); -} - - -inline int IPv4SocketAddressImpl::af() const -{ - return _addr.sin_family; -} - - -inline SocketAddressImpl::Family IPv4SocketAddressImpl::family() const -{ - return AddressFamily::IPv4; -} - - -#if defined(POCO_HAVE_IPv6) - - -class Net_API IPv6SocketAddressImpl: public SocketAddressImpl -{ -public: - IPv6SocketAddressImpl(const struct sockaddr_in6* addr); - IPv6SocketAddressImpl(const void* addr, UInt16 port); - IPv6SocketAddressImpl(const void* addr, UInt16 port, UInt32 scope); - IPAddress host() const; - UInt16 port() const; - poco_socklen_t length() const; - const struct sockaddr* addr() const; - int af() const; - Family family() const; - std::string toString() const; - -private: - struct sockaddr_in6 _addr; -}; - - -// -// inlines -// - -inline IPAddress IPv6SocketAddressImpl::host() const -{ - return IPAddress(&_addr.sin6_addr, sizeof(_addr.sin6_addr), _addr.sin6_scope_id); -} - - -inline UInt16 IPv6SocketAddressImpl::port() const -{ - return _addr.sin6_port; -} - - -inline poco_socklen_t IPv6SocketAddressImpl::length() const -{ - return sizeof(_addr); -} - - -inline const struct sockaddr* IPv6SocketAddressImpl::addr() const -{ - return reinterpret_cast<const struct sockaddr*>(&_addr); -} - - -inline int IPv6SocketAddressImpl::af() const -{ - return _addr.sin6_family; -} - - -inline SocketAddressImpl::Family IPv6SocketAddressImpl::family() const -{ - return AddressFamily::IPv6; -} - - -#endif // POCO_HAVE_IPv6 - - -#if defined(POCO_OS_FAMILY_UNIX) - - -class Net_API LocalSocketAddressImpl: public SocketAddressImpl -{ -public: - LocalSocketAddressImpl(const struct sockaddr_un* addr); - LocalSocketAddressImpl(const char* path); - LocalSocketAddressImpl(const char* path, std::size_t length); - ~LocalSocketAddressImpl(); - IPAddress host() const; - UInt16 port() const; - poco_socklen_t length() const; - const struct sockaddr* addr() const; - int af() const; - Family family() const; - const char* path() const; - std::string toString() const; - -private: - struct sockaddr_un* _pAddr; - // Note: We allocate struct sockaddr_un on the heap, otherwise we would - // waste a lot of memory due to small object optimization in SocketAddress. -}; - - -// -// inlines -// - -inline IPAddress LocalSocketAddressImpl::host() const -{ - throw Poco::InvalidAccessException("local socket address does not have host IP address"); -} - - -inline UInt16 LocalSocketAddressImpl::port() const -{ - throw Poco::InvalidAccessException("local socket address does not have port number"); -} - - -inline poco_socklen_t LocalSocketAddressImpl::length() const -{ - return sizeof(struct sockaddr_un); -} - - -inline const struct sockaddr* LocalSocketAddressImpl::addr() const -{ - return reinterpret_cast<const struct sockaddr*>(_pAddr); -} - - -inline int LocalSocketAddressImpl::af() const -{ - return _pAddr->sun_family; -} - - -inline SocketAddressImpl::Family LocalSocketAddressImpl::family() const -{ - return AddressFamily::UNIX_LOCAL; -} - - -inline const char* LocalSocketAddressImpl::path() const -{ - return _pAddr->sun_path; -} - - -#endif // POCO_OS_FAMILY_UNIX - - -} } } // namespace Poco::Net::Impl - - -#endif // Net_SocketAddressImpl_INCLUDED +// +// SocketAddressImpl.h +// +// Library: Net +// Package: NetCore +// Module: SocketAddressImpl +// +// Definition of the SocketAddressImpl class. +// +// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. +// and Contributors. +// +// SPDX-License-Identifier: BSL-1.0 +// + + +#ifndef Net_SocketAddressImpl_INCLUDED +#define Net_SocketAddressImpl_INCLUDED + + +#include "Poco/Net/Net.h" +#include "Poco/Net/SocketDefs.h" +#include "Poco/Net/IPAddress.h" +#include "Poco/RefCountedObject.h" + + +namespace Poco { +namespace Net { +namespace Impl { + + +class Net_API SocketAddressImpl : public Poco::RefCountedObject +{ +public: + typedef AddressFamily::Family Family; + + virtual ~SocketAddressImpl(); + + virtual IPAddress host() const = 0; + virtual UInt16 port() const = 0; + virtual poco_socklen_t length() const = 0; + virtual const struct sockaddr* addr() const = 0; + virtual int af() const = 0; + virtual Family family() const = 0; + virtual std::string toString() const = 0; + +protected: + SocketAddressImpl(); + +private: + SocketAddressImpl(const SocketAddressImpl&); + SocketAddressImpl& operator = (const SocketAddressImpl&); +}; + + +class Net_API IPv4SocketAddressImpl: public SocketAddressImpl +{ +public: + IPv4SocketAddressImpl(); + IPv4SocketAddressImpl(const struct sockaddr_in* addr); + IPv4SocketAddressImpl(const void* addr, UInt16 port); + IPAddress host() const; + UInt16 port() const; + poco_socklen_t length() const; + const struct sockaddr* addr() const; + int af() const; + Family family() const; + std::string toString() const; + +private: + struct sockaddr_in _addr; +}; + + +// +// inlines +// + +inline IPAddress IPv4SocketAddressImpl::host() const +{ + return IPAddress(&_addr.sin_addr, sizeof(_addr.sin_addr)); +} + + +inline UInt16 IPv4SocketAddressImpl::port() const +{ + return _addr.sin_port; +} + + +inline poco_socklen_t IPv4SocketAddressImpl::length() const +{ + return sizeof(_addr); +} + + +inline const struct sockaddr* IPv4SocketAddressImpl::addr() const +{ + return reinterpret_cast<const struct sockaddr*>(&_addr); +} + + +inline int IPv4SocketAddressImpl::af() const +{ + return _addr.sin_family; +} + + +inline SocketAddressImpl::Family IPv4SocketAddressImpl::family() const +{ + return AddressFamily::IPv4; +} + + +#if defined(POCO_HAVE_IPv6) + + +class Net_API IPv6SocketAddressImpl: public SocketAddressImpl +{ +public: + IPv6SocketAddressImpl(const struct sockaddr_in6* addr); + IPv6SocketAddressImpl(const void* addr, UInt16 port); + IPv6SocketAddressImpl(const void* addr, UInt16 port, UInt32 scope); + IPAddress host() const; + UInt16 port() const; + poco_socklen_t length() const; + const struct sockaddr* addr() const; + int af() const; + Family family() const; + std::string toString() const; + +private: + struct sockaddr_in6 _addr; +}; + + +// +// inlines +// + +inline IPAddress IPv6SocketAddressImpl::host() const +{ + return IPAddress(&_addr.sin6_addr, sizeof(_addr.sin6_addr), _addr.sin6_scope_id); +} + + +inline UInt16 IPv6SocketAddressImpl::port() const +{ + return _addr.sin6_port; +} + + +inline poco_socklen_t IPv6SocketAddressImpl::length() const +{ + return sizeof(_addr); +} + + +inline const struct sockaddr* IPv6SocketAddressImpl::addr() const +{ + return reinterpret_cast<const struct sockaddr*>(&_addr); +} + + +inline int IPv6SocketAddressImpl::af() const +{ + return _addr.sin6_family; +} + + +inline SocketAddressImpl::Family IPv6SocketAddressImpl::family() const +{ + return AddressFamily::IPv6; +} + + +#endif // POCO_HAVE_IPv6 + + +#if defined(POCO_OS_FAMILY_UNIX) + + +class Net_API LocalSocketAddressImpl: public SocketAddressImpl +{ +public: + LocalSocketAddressImpl(const struct sockaddr_un* addr); + LocalSocketAddressImpl(const char* path); + LocalSocketAddressImpl(const char* path, std::size_t length); + ~LocalSocketAddressImpl(); + IPAddress host() const; + UInt16 port() const; + poco_socklen_t length() const; + const struct sockaddr* addr() const; + int af() const; + Family family() const; + const char* path() const; + std::string toString() const; + +private: + struct sockaddr_un* _pAddr; + // Note: We allocate struct sockaddr_un on the heap, otherwise we would + // waste a lot of memory due to small object optimization in SocketAddress. +}; + + +// +// inlines +// + +inline IPAddress LocalSocketAddressImpl::host() const +{ + throw Poco::InvalidAccessException("local socket address does not have host IP address"); +} + + +inline UInt16 LocalSocketAddressImpl::port() const +{ + throw Poco::InvalidAccessException("local socket address does not have port number"); +} + + +inline poco_socklen_t LocalSocketAddressImpl::length() const +{ + return sizeof(struct sockaddr_un); +} + + +inline const struct sockaddr* LocalSocketAddressImpl::addr() const +{ + return reinterpret_cast<const struct sockaddr*>(_pAddr); +} + + +inline int LocalSocketAddressImpl::af() const +{ + return _pAddr->sun_family; +} + + +inline SocketAddressImpl::Family LocalSocketAddressImpl::family() const +{ + return AddressFamily::UNIX_LOCAL; +} + + +inline const char* LocalSocketAddressImpl::path() const +{ + return _pAddr->sun_path; +} + + +#endif // POCO_OS_FAMILY_UNIX + + +} } } // namespace Poco::Net::Impl + + +#endif // Net_SocketAddressImpl_INCLUDED diff --git a/contrib/libs/poco/Net/include/Poco/Net/SocketConnector.h b/contrib/libs/poco/Net/include/Poco/Net/SocketConnector.h index 075bdf6d77..d3196c9f62 100644 --- a/contrib/libs/poco/Net/include/Poco/Net/SocketConnector.h +++ b/contrib/libs/poco/Net/include/Poco/Net/SocketConnector.h @@ -1,212 +1,212 @@ -// -// SocketConnector.h -// -// Library: Net -// Package: Reactor -// Module: SocketConnector -// -// Definition of the SocketConnector class. -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Net_SocketConnector_INCLUDED -#define Net_SocketConnector_INCLUDED - - -#include "Poco/Net/Net.h" -#include "Poco/Net/SocketNotification.h" -#include "Poco/Net/SocketAddress.h" -#include "Poco/Net/StreamSocket.h" -#include "Poco/Observer.h" - - -namespace Poco { -namespace Net { - - -template <class ServiceHandler> -class SocketConnector - /// This class implements the Connector part of the - /// Acceptor-Connector design pattern. - /// - /// The Acceptor-Connector pattern has been described in the book - /// "Pattern Languages of Program Design 3", edited by Robert Martin, - /// Frank Buschmann and Dirk Riehle (Addison Wesley, 1997). - /// - /// The Acceptor-Connector design pattern decouples connection - /// establishment and service initialization in a distributed system - /// from the processing performed once a service is initialized. - /// This decoupling is achieved with three components: Acceptors, - /// Connectors and Service Handlers. - /// The Connector actively establishes a connection with a remote - /// server socket (usually managed by an Acceptor) and initializes - /// a Service Handler to manage the connection. - /// - /// The SocketConnector sets up a StreamSocket, initiates a non-blocking - /// connect operation and registers itself for ReadableNotification, WritableNotification - /// and ErrorNotification. ReadableNotification or WritableNotification denote the successful - /// establishment of the connection. - /// - /// When the StreamSocket becomes readable or writeable, the SocketConnector - /// creates a ServiceHandler to service the connection and unregisters - /// itself. - /// - /// In case of an error (ErrorNotification), the SocketConnector unregisters itself - /// and calls the onError() method, which can be overridden by subclasses - /// to perform custom error handling. - /// - /// The ServiceHandler class must provide a constructor that - /// takes a StreamSocket and a SocketReactor as arguments, - /// e.g.: - /// MyServiceHandler(const StreamSocket& socket, ServiceReactor& reactor) - /// - /// When the ServiceHandler is done, it must destroy itself. - /// - /// Subclasses can override the createServiceHandler() factory method - /// if special steps are necessary to create a ServiceHandler object. -{ -public: - explicit SocketConnector(SocketAddress& address): - _pReactor(0) - /// Creates a SocketConnector, using the given Socket. - { - _socket.connectNB(address); - } - - SocketConnector(SocketAddress& address, SocketReactor& reactor): - _pReactor(0) - /// Creates an acceptor, using the given ServerSocket. - /// The SocketConnector registers itself with the given SocketReactor. - { - _socket.connectNB(address); - registerConnector(reactor); - } - - virtual ~SocketConnector() - /// Destroys the SocketConnector. - { - try - { - unregisterConnector(); - } - catch (...) - { - poco_unexpected(); - } - } - - virtual void registerConnector(SocketReactor& reactor) - /// Registers the SocketConnector with a SocketReactor. - /// - /// A subclass can override this and, for example, also register - /// an event handler for a timeout event. - /// - /// The overriding method must call the baseclass implementation first. - { - _pReactor = &reactor; - _pReactor->addEventHandler(_socket, Poco::Observer<SocketConnector, ReadableNotification>(*this, &SocketConnector::onReadable)); - _pReactor->addEventHandler(_socket, Poco::Observer<SocketConnector, WritableNotification>(*this, &SocketConnector::onWritable)); - _pReactor->addEventHandler(_socket, Poco::Observer<SocketConnector, ErrorNotification>(*this, &SocketConnector::onError)); - } - - virtual void unregisterConnector() - /// Unregisters the SocketConnector. - /// - /// A subclass can override this and, for example, also unregister - /// its event handler for a timeout event. - /// - /// The overriding method must call the baseclass implementation first. - { - if (_pReactor) - { - _pReactor->removeEventHandler(_socket, Poco::Observer<SocketConnector, ReadableNotification>(*this, &SocketConnector::onReadable)); - _pReactor->removeEventHandler(_socket, Poco::Observer<SocketConnector, WritableNotification>(*this, &SocketConnector::onWritable)); - _pReactor->removeEventHandler(_socket, Poco::Observer<SocketConnector, ErrorNotification>(*this, &SocketConnector::onError)); - } - } - - void onReadable(ReadableNotification* pNotification) - { - pNotification->release(); - int err = _socket.impl()->socketError(); - if (err) - { - onError(err); - unregisterConnector(); - } - else - { - onConnect(); - } - } - - void onWritable(WritableNotification* pNotification) - { - pNotification->release(); - onConnect(); - } - - void onConnect() - { - _socket.setBlocking(true); - createServiceHandler(); - unregisterConnector(); - } - - void onError(ErrorNotification* pNotification) - { - pNotification->release(); - onError(_socket.impl()->socketError()); - unregisterConnector(); - } - -protected: - virtual ServiceHandler* createServiceHandler() - /// Create and initialize a new ServiceHandler instance. - /// - /// Subclasses can override this method. - { - return new ServiceHandler(_socket, *_pReactor); - } - - virtual void onError(int errorCode) - /// Called when the socket cannot be connected. - /// - /// Subclasses can override this method. - { - } - - SocketReactor* reactor() - /// Returns a pointer to the SocketReactor where - /// this SocketConnector is registered. - /// - /// The pointer may be null. - { - return _pReactor; - } - - StreamSocket& socket() - /// Returns a reference to the SocketConnector's socket. - { - return _socket; - } - -private: - SocketConnector(); - SocketConnector(const SocketConnector&); - SocketConnector& operator = (const SocketConnector&); - - StreamSocket _socket; - SocketReactor* _pReactor; -}; - - -} } // namespace Poco::Net - - -#endif // Net_SocketConnector_INCLUDED +// +// SocketConnector.h +// +// Library: Net +// Package: Reactor +// Module: SocketConnector +// +// Definition of the SocketConnector class. +// +// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. +// and Contributors. +// +// SPDX-License-Identifier: BSL-1.0 +// + + +#ifndef Net_SocketConnector_INCLUDED +#define Net_SocketConnector_INCLUDED + + +#include "Poco/Net/Net.h" +#include "Poco/Net/SocketNotification.h" +#include "Poco/Net/SocketAddress.h" +#include "Poco/Net/StreamSocket.h" +#include "Poco/Observer.h" + + +namespace Poco { +namespace Net { + + +template <class ServiceHandler> +class SocketConnector + /// This class implements the Connector part of the + /// Acceptor-Connector design pattern. + /// + /// The Acceptor-Connector pattern has been described in the book + /// "Pattern Languages of Program Design 3", edited by Robert Martin, + /// Frank Buschmann and Dirk Riehle (Addison Wesley, 1997). + /// + /// The Acceptor-Connector design pattern decouples connection + /// establishment and service initialization in a distributed system + /// from the processing performed once a service is initialized. + /// This decoupling is achieved with three components: Acceptors, + /// Connectors and Service Handlers. + /// The Connector actively establishes a connection with a remote + /// server socket (usually managed by an Acceptor) and initializes + /// a Service Handler to manage the connection. + /// + /// The SocketConnector sets up a StreamSocket, initiates a non-blocking + /// connect operation and registers itself for ReadableNotification, WritableNotification + /// and ErrorNotification. ReadableNotification or WritableNotification denote the successful + /// establishment of the connection. + /// + /// When the StreamSocket becomes readable or writeable, the SocketConnector + /// creates a ServiceHandler to service the connection and unregisters + /// itself. + /// + /// In case of an error (ErrorNotification), the SocketConnector unregisters itself + /// and calls the onError() method, which can be overridden by subclasses + /// to perform custom error handling. + /// + /// The ServiceHandler class must provide a constructor that + /// takes a StreamSocket and a SocketReactor as arguments, + /// e.g.: + /// MyServiceHandler(const StreamSocket& socket, ServiceReactor& reactor) + /// + /// When the ServiceHandler is done, it must destroy itself. + /// + /// Subclasses can override the createServiceHandler() factory method + /// if special steps are necessary to create a ServiceHandler object. +{ +public: + explicit SocketConnector(SocketAddress& address): + _pReactor(0) + /// Creates a SocketConnector, using the given Socket. + { + _socket.connectNB(address); + } + + SocketConnector(SocketAddress& address, SocketReactor& reactor): + _pReactor(0) + /// Creates an acceptor, using the given ServerSocket. + /// The SocketConnector registers itself with the given SocketReactor. + { + _socket.connectNB(address); + registerConnector(reactor); + } + + virtual ~SocketConnector() + /// Destroys the SocketConnector. + { + try + { + unregisterConnector(); + } + catch (...) + { + poco_unexpected(); + } + } + + virtual void registerConnector(SocketReactor& reactor) + /// Registers the SocketConnector with a SocketReactor. + /// + /// A subclass can override this and, for example, also register + /// an event handler for a timeout event. + /// + /// The overriding method must call the baseclass implementation first. + { + _pReactor = &reactor; + _pReactor->addEventHandler(_socket, Poco::Observer<SocketConnector, ReadableNotification>(*this, &SocketConnector::onReadable)); + _pReactor->addEventHandler(_socket, Poco::Observer<SocketConnector, WritableNotification>(*this, &SocketConnector::onWritable)); + _pReactor->addEventHandler(_socket, Poco::Observer<SocketConnector, ErrorNotification>(*this, &SocketConnector::onError)); + } + + virtual void unregisterConnector() + /// Unregisters the SocketConnector. + /// + /// A subclass can override this and, for example, also unregister + /// its event handler for a timeout event. + /// + /// The overriding method must call the baseclass implementation first. + { + if (_pReactor) + { + _pReactor->removeEventHandler(_socket, Poco::Observer<SocketConnector, ReadableNotification>(*this, &SocketConnector::onReadable)); + _pReactor->removeEventHandler(_socket, Poco::Observer<SocketConnector, WritableNotification>(*this, &SocketConnector::onWritable)); + _pReactor->removeEventHandler(_socket, Poco::Observer<SocketConnector, ErrorNotification>(*this, &SocketConnector::onError)); + } + } + + void onReadable(ReadableNotification* pNotification) + { + pNotification->release(); + int err = _socket.impl()->socketError(); + if (err) + { + onError(err); + unregisterConnector(); + } + else + { + onConnect(); + } + } + + void onWritable(WritableNotification* pNotification) + { + pNotification->release(); + onConnect(); + } + + void onConnect() + { + _socket.setBlocking(true); + createServiceHandler(); + unregisterConnector(); + } + + void onError(ErrorNotification* pNotification) + { + pNotification->release(); + onError(_socket.impl()->socketError()); + unregisterConnector(); + } + +protected: + virtual ServiceHandler* createServiceHandler() + /// Create and initialize a new ServiceHandler instance. + /// + /// Subclasses can override this method. + { + return new ServiceHandler(_socket, *_pReactor); + } + + virtual void onError(int errorCode) + /// Called when the socket cannot be connected. + /// + /// Subclasses can override this method. + { + } + + SocketReactor* reactor() + /// Returns a pointer to the SocketReactor where + /// this SocketConnector is registered. + /// + /// The pointer may be null. + { + return _pReactor; + } + + StreamSocket& socket() + /// Returns a reference to the SocketConnector's socket. + { + return _socket; + } + +private: + SocketConnector(); + SocketConnector(const SocketConnector&); + SocketConnector& operator = (const SocketConnector&); + + StreamSocket _socket; + SocketReactor* _pReactor; +}; + + +} } // namespace Poco::Net + + +#endif // Net_SocketConnector_INCLUDED diff --git a/contrib/libs/poco/Net/include/Poco/Net/SocketDefs.h b/contrib/libs/poco/Net/include/Poco/Net/SocketDefs.h index 194e9f0a9a..ef62155389 100644 --- a/contrib/libs/poco/Net/include/Poco/Net/SocketDefs.h +++ b/contrib/libs/poco/Net/include/Poco/Net/SocketDefs.h @@ -1,385 +1,385 @@ -// -// SocketDefs.h -// -// Library: Net -// Package: NetCore -// Module: SocketDefs -// -// Include platform-specific header files for sockets. -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Net_SocketDefs_INCLUDED -#define Net_SocketDefs_INCLUDED - - -#define POCO_ENOERR 0 - - -#if defined(POCO_OS_FAMILY_WINDOWS) - #include "Poco/UnWindows.h" - #include <winsock2.h> - #include <ws2tcpip.h> - #define POCO_INVALID_SOCKET INVALID_SOCKET - #define poco_socket_t SOCKET - #define poco_socklen_t int - #define poco_ioctl_request_t int - #define poco_closesocket(s) closesocket(s) - #define POCO_EINTR WSAEINTR - #define POCO_EACCES WSAEACCES - #define POCO_EFAULT WSAEFAULT - #define POCO_EINVAL WSAEINVAL - #define POCO_EMFILE WSAEMFILE - #define POCO_EAGAIN WSAEWOULDBLOCK - #define POCO_EWOULDBLOCK WSAEWOULDBLOCK - #define POCO_EINPROGRESS WSAEINPROGRESS - #define POCO_EALREADY WSAEALREADY - #define POCO_ENOTSOCK WSAENOTSOCK - #define POCO_EDESTADDRREQ WSAEDESTADDRREQ - #define POCO_EMSGSIZE WSAEMSGSIZE - #define POCO_EPROTOTYPE WSAEPROTOTYPE - #define POCO_ENOPROTOOPT WSAENOPROTOOPT - #define POCO_EPROTONOSUPPORT WSAEPROTONOSUPPORT - #define POCO_ESOCKTNOSUPPORT WSAESOCKTNOSUPPORT - #define POCO_ENOTSUP WSAEOPNOTSUPP - #define POCO_EPFNOSUPPORT WSAEPFNOSUPPORT - #define POCO_EAFNOSUPPORT WSAEAFNOSUPPORT - #define POCO_EADDRINUSE WSAEADDRINUSE - #define POCO_EADDRNOTAVAIL WSAEADDRNOTAVAIL - #define POCO_ENETDOWN WSAENETDOWN - #define POCO_ENETUNREACH WSAENETUNREACH - #define POCO_ENETRESET WSAENETRESET - #define POCO_ECONNABORTED WSAECONNABORTED - #define POCO_ECONNRESET WSAECONNRESET - #define POCO_ENOBUFS WSAENOBUFS - #define POCO_EISCONN WSAEISCONN - #define POCO_ENOTCONN WSAENOTCONN - #define POCO_ESHUTDOWN WSAESHUTDOWN - #define POCO_ETIMEDOUT WSAETIMEDOUT - #define POCO_ECONNREFUSED WSAECONNREFUSED - #define POCO_EHOSTDOWN WSAEHOSTDOWN - #define POCO_EHOSTUNREACH WSAEHOSTUNREACH - #define POCO_ESYSNOTREADY WSASYSNOTREADY - #define POCO_ENOTINIT WSANOTINITIALISED - #define POCO_HOST_NOT_FOUND WSAHOST_NOT_FOUND - #define POCO_TRY_AGAIN WSATRY_AGAIN - #define POCO_NO_RECOVERY WSANO_RECOVERY - #define POCO_NO_DATA WSANO_DATA - #ifndef ADDRESS_FAMILY - #define ADDRESS_FAMILY USHORT - #endif -#elif defined(POCO_VXWORKS) - #include <hostLib.h> - #error #include <ifLib.h> - #error #include <inetLib.h> - #include <ioLib.h> - #include <resolvLib.h> - #include <types.h> - #include <socket.h> - #include <netinet/tcp.h> - #define POCO_INVALID_SOCKET -1 - #define poco_socket_t int - #define poco_socklen_t int - #define poco_ioctl_request_t int - #define poco_closesocket(s) ::close(s) - #define POCO_EINTR EINTR - #define POCO_EACCES EACCES - #define POCO_EFAULT EFAULT - #define POCO_EINVAL EINVAL - #define POCO_EMFILE EMFILE - #define POCO_EAGAIN EAGAIN - #define POCO_EWOULDBLOCK EWOULDBLOCK - #define POCO_EINPROGRESS EINPROGRESS - #define POCO_EALREADY EALREADY - #define POCO_ENOTSOCK ENOTSOCK - #define POCO_EDESTADDRREQ EDESTADDRREQ - #define POCO_EMSGSIZE EMSGSIZE - #define POCO_EPROTOTYPE EPROTOTYPE - #define POCO_ENOPROTOOPT ENOPROTOOPT - #define POCO_EPROTONOSUPPORT EPROTONOSUPPORT - #define POCO_ESOCKTNOSUPPORT ESOCKTNOSUPPORT - #define POCO_ENOTSUP ENOTSUP - #define POCO_EPFNOSUPPORT EPFNOSUPPORT - #define POCO_EAFNOSUPPORT EAFNOSUPPORT - #define POCO_EADDRINUSE EADDRINUSE - #define POCO_EADDRNOTAVAIL EADDRNOTAVAIL - #define POCO_ENETDOWN ENETDOWN - #define POCO_ENETUNREACH ENETUNREACH - #define POCO_ENETRESET ENETRESET - #define POCO_ECONNABORTED ECONNABORTED - #define POCO_ECONNRESET ECONNRESET - #define POCO_ENOBUFS ENOBUFS - #define POCO_EISCONN EISCONN - #define POCO_ENOTCONN ENOTCONN - #define POCO_ESHUTDOWN ESHUTDOWN - #define POCO_ETIMEDOUT ETIMEDOUT - #define POCO_ECONNREFUSED ECONNREFUSED - #define POCO_EHOSTDOWN EHOSTDOWN - #define POCO_EHOSTUNREACH EHOSTUNREACH - #define POCO_ESYSNOTREADY -4 - #define POCO_ENOTINIT -5 - #define POCO_HOST_NOT_FOUND HOST_NOT_FOUND - #define POCO_TRY_AGAIN TRY_AGAIN - #define POCO_NO_RECOVERY NO_RECOVERY - #define POCO_NO_DATA NO_DATA -#elif defined(POCO_OS_FAMILY_UNIX) - #include <unistd.h> - #include <errno.h> - #include <sys/types.h> - #include <sys/socket.h> - #include <sys/un.h> - #include <fcntl.h> - #if POCO_OS != POCO_OS_HPUX - #include <sys/select.h> - #endif - #include <sys/ioctl.h> - #include <arpa/inet.h> - #include <netinet/in.h> - #include <netinet/tcp.h> - #include <netdb.h> - #if defined(POCO_OS_FAMILY_UNIX) - #if (POCO_OS == POCO_OS_LINUX) || (POCO_OS == POCO_OS_ANDROID) - // Net/src/NetworkInterface.cpp changed #include <linux/if.h> to #include <net/if.h> - // no more conflict, can use #include <net/if.h> here - #include <net/if.h> - #elif (POCO_OS == POCO_OS_HPUX) - extern "C" - { - #include <net/if.h> - } - #else - #include <net/if.h> - #endif - #endif - #if (POCO_OS == POCO_OS_SOLARIS) || (POCO_OS == POCO_OS_MAC_OS_X) - #include <sys/sockio.h> - #include <sys/filio.h> - #endif - #define POCO_INVALID_SOCKET -1 - #define poco_socket_t int - #define poco_socklen_t socklen_t - #define poco_fcntl_request_t int - #if defined(POCO_OS_FAMILY_BSD) - #define poco_ioctl_request_t unsigned long - #else - #define poco_ioctl_request_t int - #endif - #define poco_closesocket(s) ::close(s) - #define POCO_EINTR EINTR - #define POCO_EACCES EACCES - #define POCO_EFAULT EFAULT - #define POCO_EINVAL EINVAL - #define POCO_EMFILE EMFILE - #define POCO_EAGAIN EAGAIN - #define POCO_EWOULDBLOCK EWOULDBLOCK - #define POCO_EINPROGRESS EINPROGRESS - #define POCO_EALREADY EALREADY - #define POCO_ENOTSOCK ENOTSOCK - #define POCO_EDESTADDRREQ EDESTADDRREQ - #define POCO_EMSGSIZE EMSGSIZE - #define POCO_EPROTOTYPE EPROTOTYPE - #define POCO_ENOPROTOOPT ENOPROTOOPT - #define POCO_EPROTONOSUPPORT EPROTONOSUPPORT - #if defined(ESOCKTNOSUPPORT) - #define POCO_ESOCKTNOSUPPORT ESOCKTNOSUPPORT - #else - #define POCO_ESOCKTNOSUPPORT -1 - #endif - #define POCO_ENOTSUP ENOTSUP - #define POCO_EPFNOSUPPORT EPFNOSUPPORT - #define POCO_EAFNOSUPPORT EAFNOSUPPORT - #define POCO_EADDRINUSE EADDRINUSE - #define POCO_EADDRNOTAVAIL EADDRNOTAVAIL - #define POCO_ENETDOWN ENETDOWN - #define POCO_ENETUNREACH ENETUNREACH - #define POCO_ENETRESET ENETRESET - #define POCO_ECONNABORTED ECONNABORTED - #define POCO_ECONNRESET ECONNRESET - #define POCO_ENOBUFS ENOBUFS - #define POCO_EISCONN EISCONN - #define POCO_ENOTCONN ENOTCONN - #if defined(ESHUTDOWN) - #define POCO_ESHUTDOWN ESHUTDOWN - #else - #define POCO_ESHUTDOWN -2 - #endif - #define POCO_ETIMEDOUT ETIMEDOUT - #define POCO_ECONNREFUSED ECONNREFUSED - #if defined(EHOSTDOWN) - #define POCO_EHOSTDOWN EHOSTDOWN - #else - #define POCO_EHOSTDOWN -3 - #endif - #define POCO_EHOSTUNREACH EHOSTUNREACH - #define POCO_ESYSNOTREADY -4 - #define POCO_ENOTINIT -5 - #define POCO_HOST_NOT_FOUND HOST_NOT_FOUND - #define POCO_TRY_AGAIN TRY_AGAIN - #define POCO_NO_RECOVERY NO_RECOVERY - #define POCO_NO_DATA NO_DATA -#endif - - -#if defined(POCO_OS_FAMILY_BSD) || (POCO_OS == POCO_OS_TRU64) || (POCO_OS == POCO_OS_AIX) || (POCO_OS == POCO_OS_IRIX) || (POCO_OS == POCO_OS_QNX) || (POCO_OS == POCO_OS_VXWORKS) - #define POCO_HAVE_SALEN 1 -#endif - - -#if POCO_OS != POCO_OS_VXWORKS && !defined(POCO_NET_NO_ADDRINFO) - #define POCO_HAVE_ADDRINFO 1 -#endif - - -#if POCO_OS == POCO_OS_LINUX - #define POCO_HAVE_ADDRINFO_A 1 -#endif - - -/// Without this option, Poco library will restart recv after EINTR, -/// but it doesn't update socket receive timeout that leads to infinite wait -/// when query profiler is activated. The issue persisted in delayed_replica_failover -/// integration test after we enabled query profiler by default. -#define POCO_BROKEN_TIMEOUTS 1 - - -#if defined(POCO_HAVE_ADDRINFO) - #ifndef AI_PASSIVE - #define AI_PASSIVE 0 - #endif - #ifndef AI_CANONNAME - #define AI_CANONNAME 0 - #endif - #ifndef AI_NUMERICHOST - #define AI_NUMERICHOST 0 - #endif - #ifndef AI_NUMERICSERV - #define AI_NUMERICSERV 0 - #endif - #ifndef AI_ALL - #define AI_ALL 0 - #endif - #ifndef AI_ADDRCONFIG - #define AI_ADDRCONFIG 0 - #endif - #ifndef AI_V4MAPPED - #define AI_V4MAPPED 0 - #endif -#endif - - -#if defined(POCO_HAVE_SALEN) - #define poco_set_sa_len(pSA, len) (pSA)->sa_len = (len) - #define poco_set_sin_len(pSA) (pSA)->sin_len = sizeof(struct sockaddr_in) - #if defined(POCO_HAVE_IPv6) - #define poco_set_sin6_len(pSA) (pSA)->sin6_len = sizeof(struct sockaddr_in6) - #endif - #if defined(POCO_OS_FAMILY_UNIX) - #define poco_set_sun_len(pSA, len) (pSA)->sun_len = (len) - #endif -#else - #define poco_set_sa_len(pSA, len) (void) 0 - #define poco_set_sin_len(pSA) (void) 0 - #define poco_set_sin6_len(pSA) (void) 0 - #define poco_set_sun_len(pSA, len) (void) 0 -#endif - - -#ifndef INADDR_NONE - #define INADDR_NONE 0xffffffff -#endif - -#ifndef INADDR_ANY - #define INADDR_ANY 0x00000000 -#endif - -#ifndef INADDR_BROADCAST - #define INADDR_BROADCAST 0xffffffff -#endif - -#ifndef INADDR_LOOPBACK - #define INADDR_LOOPBACK 0x7f000001 -#endif - -#ifndef INADDR_UNSPEC_GROUP - #define INADDR_UNSPEC_GROUP 0xe0000000 -#endif - -#ifndef INADDR_ALLHOSTS_GROUP - #define INADDR_ALLHOSTS_GROUP 0xe0000001 -#endif - -#ifndef INADDR_ALLRTRS_GROUP - #define INADDR_ALLRTRS_GROUP 0xe0000002 -#endif - -#ifndef INADDR_MAX_LOCAL_GROUP - #define INADDR_MAX_LOCAL_GROUP 0xe00000ff -#endif - -#if defined(POCO_ARCH_BIG_ENDIAN) - #define poco_ntoh_16(x) (x) - #define poco_ntoh_32(x) (x) -#else - #define poco_ntoh_16(x) \ - ((((x) >> 8) & 0x00ff) | (((x) << 8) & 0xff00)) - #define poco_ntoh_32(x) \ - ((((x) >> 24) & 0x000000ff) | (((x) >> 8) & 0x0000ff00) | (((x) << 8) & 0x00ff0000) | (((x) << 24) & 0xff000000)) -#endif -#define poco_hton_16(x) poco_ntoh_16(x) -#define poco_hton_32(x) poco_ntoh_32(x) - - -#if !defined(s6_addr16) - #if defined(POCO_OS_FAMILY_WINDOWS) - #define s6_addr16 u.Word - #else - #define s6_addr16 __u6_addr.__u6_addr16 - #endif -#endif - - -#if !defined(s6_addr32) - #if defined(POCO_OS_FAMILY_UNIX) - #if (POCO_OS == POCO_OS_SOLARIS) - #define s6_addr32 _S6_un._S6_u32 - #else - #define s6_addr32 __u6_addr.__u6_addr32 - #endif - #endif -#endif - - -namespace Poco { -namespace Net { - - -struct AddressFamily - /// AddressFamily::Family replaces the previously used IPAddress::Family - /// enumeration and is now used for IPAddress::Family and SocketAddress::Family. -{ - enum Family - /// Possible address families for socket addresses. - { - IPv4, - /// IPv4 address family. - #if defined(POCO_HAVE_IPv6) - IPv6, - /// IPv6 address family. - #endif - #if defined(POCO_OS_FAMILY_UNIX) - UNIX_LOCAL - /// UNIX domain socket address family. Available on UNIX/POSIX platforms only. - #endif - }; -}; - - -} } // namespace Poco::Net - - -#endif // Net_SocketDefs_INCLUDED +// +// SocketDefs.h +// +// Library: Net +// Package: NetCore +// Module: SocketDefs +// +// Include platform-specific header files for sockets. +// +// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. +// and Contributors. +// +// SPDX-License-Identifier: BSL-1.0 +// + + +#ifndef Net_SocketDefs_INCLUDED +#define Net_SocketDefs_INCLUDED + + +#define POCO_ENOERR 0 + + +#if defined(POCO_OS_FAMILY_WINDOWS) + #include "Poco/UnWindows.h" + #include <winsock2.h> + #include <ws2tcpip.h> + #define POCO_INVALID_SOCKET INVALID_SOCKET + #define poco_socket_t SOCKET + #define poco_socklen_t int + #define poco_ioctl_request_t int + #define poco_closesocket(s) closesocket(s) + #define POCO_EINTR WSAEINTR + #define POCO_EACCES WSAEACCES + #define POCO_EFAULT WSAEFAULT + #define POCO_EINVAL WSAEINVAL + #define POCO_EMFILE WSAEMFILE + #define POCO_EAGAIN WSAEWOULDBLOCK + #define POCO_EWOULDBLOCK WSAEWOULDBLOCK + #define POCO_EINPROGRESS WSAEINPROGRESS + #define POCO_EALREADY WSAEALREADY + #define POCO_ENOTSOCK WSAENOTSOCK + #define POCO_EDESTADDRREQ WSAEDESTADDRREQ + #define POCO_EMSGSIZE WSAEMSGSIZE + #define POCO_EPROTOTYPE WSAEPROTOTYPE + #define POCO_ENOPROTOOPT WSAENOPROTOOPT + #define POCO_EPROTONOSUPPORT WSAEPROTONOSUPPORT + #define POCO_ESOCKTNOSUPPORT WSAESOCKTNOSUPPORT + #define POCO_ENOTSUP WSAEOPNOTSUPP + #define POCO_EPFNOSUPPORT WSAEPFNOSUPPORT + #define POCO_EAFNOSUPPORT WSAEAFNOSUPPORT + #define POCO_EADDRINUSE WSAEADDRINUSE + #define POCO_EADDRNOTAVAIL WSAEADDRNOTAVAIL + #define POCO_ENETDOWN WSAENETDOWN + #define POCO_ENETUNREACH WSAENETUNREACH + #define POCO_ENETRESET WSAENETRESET + #define POCO_ECONNABORTED WSAECONNABORTED + #define POCO_ECONNRESET WSAECONNRESET + #define POCO_ENOBUFS WSAENOBUFS + #define POCO_EISCONN WSAEISCONN + #define POCO_ENOTCONN WSAENOTCONN + #define POCO_ESHUTDOWN WSAESHUTDOWN + #define POCO_ETIMEDOUT WSAETIMEDOUT + #define POCO_ECONNREFUSED WSAECONNREFUSED + #define POCO_EHOSTDOWN WSAEHOSTDOWN + #define POCO_EHOSTUNREACH WSAEHOSTUNREACH + #define POCO_ESYSNOTREADY WSASYSNOTREADY + #define POCO_ENOTINIT WSANOTINITIALISED + #define POCO_HOST_NOT_FOUND WSAHOST_NOT_FOUND + #define POCO_TRY_AGAIN WSATRY_AGAIN + #define POCO_NO_RECOVERY WSANO_RECOVERY + #define POCO_NO_DATA WSANO_DATA + #ifndef ADDRESS_FAMILY + #define ADDRESS_FAMILY USHORT + #endif +#elif defined(POCO_VXWORKS) + #include <hostLib.h> + #error #include <ifLib.h> + #error #include <inetLib.h> + #include <ioLib.h> + #include <resolvLib.h> + #include <types.h> + #include <socket.h> + #include <netinet/tcp.h> + #define POCO_INVALID_SOCKET -1 + #define poco_socket_t int + #define poco_socklen_t int + #define poco_ioctl_request_t int + #define poco_closesocket(s) ::close(s) + #define POCO_EINTR EINTR + #define POCO_EACCES EACCES + #define POCO_EFAULT EFAULT + #define POCO_EINVAL EINVAL + #define POCO_EMFILE EMFILE + #define POCO_EAGAIN EAGAIN + #define POCO_EWOULDBLOCK EWOULDBLOCK + #define POCO_EINPROGRESS EINPROGRESS + #define POCO_EALREADY EALREADY + #define POCO_ENOTSOCK ENOTSOCK + #define POCO_EDESTADDRREQ EDESTADDRREQ + #define POCO_EMSGSIZE EMSGSIZE + #define POCO_EPROTOTYPE EPROTOTYPE + #define POCO_ENOPROTOOPT ENOPROTOOPT + #define POCO_EPROTONOSUPPORT EPROTONOSUPPORT + #define POCO_ESOCKTNOSUPPORT ESOCKTNOSUPPORT + #define POCO_ENOTSUP ENOTSUP + #define POCO_EPFNOSUPPORT EPFNOSUPPORT + #define POCO_EAFNOSUPPORT EAFNOSUPPORT + #define POCO_EADDRINUSE EADDRINUSE + #define POCO_EADDRNOTAVAIL EADDRNOTAVAIL + #define POCO_ENETDOWN ENETDOWN + #define POCO_ENETUNREACH ENETUNREACH + #define POCO_ENETRESET ENETRESET + #define POCO_ECONNABORTED ECONNABORTED + #define POCO_ECONNRESET ECONNRESET + #define POCO_ENOBUFS ENOBUFS + #define POCO_EISCONN EISCONN + #define POCO_ENOTCONN ENOTCONN + #define POCO_ESHUTDOWN ESHUTDOWN + #define POCO_ETIMEDOUT ETIMEDOUT + #define POCO_ECONNREFUSED ECONNREFUSED + #define POCO_EHOSTDOWN EHOSTDOWN + #define POCO_EHOSTUNREACH EHOSTUNREACH + #define POCO_ESYSNOTREADY -4 + #define POCO_ENOTINIT -5 + #define POCO_HOST_NOT_FOUND HOST_NOT_FOUND + #define POCO_TRY_AGAIN TRY_AGAIN + #define POCO_NO_RECOVERY NO_RECOVERY + #define POCO_NO_DATA NO_DATA +#elif defined(POCO_OS_FAMILY_UNIX) + #include <unistd.h> + #include <errno.h> + #include <sys/types.h> + #include <sys/socket.h> + #include <sys/un.h> + #include <fcntl.h> + #if POCO_OS != POCO_OS_HPUX + #include <sys/select.h> + #endif + #include <sys/ioctl.h> + #include <arpa/inet.h> + #include <netinet/in.h> + #include <netinet/tcp.h> + #include <netdb.h> + #if defined(POCO_OS_FAMILY_UNIX) + #if (POCO_OS == POCO_OS_LINUX) || (POCO_OS == POCO_OS_ANDROID) + // Net/src/NetworkInterface.cpp changed #include <linux/if.h> to #include <net/if.h> + // no more conflict, can use #include <net/if.h> here + #include <net/if.h> + #elif (POCO_OS == POCO_OS_HPUX) + extern "C" + { + #include <net/if.h> + } + #else + #include <net/if.h> + #endif + #endif + #if (POCO_OS == POCO_OS_SOLARIS) || (POCO_OS == POCO_OS_MAC_OS_X) + #include <sys/sockio.h> + #include <sys/filio.h> + #endif + #define POCO_INVALID_SOCKET -1 + #define poco_socket_t int + #define poco_socklen_t socklen_t + #define poco_fcntl_request_t int + #if defined(POCO_OS_FAMILY_BSD) + #define poco_ioctl_request_t unsigned long + #else + #define poco_ioctl_request_t int + #endif + #define poco_closesocket(s) ::close(s) + #define POCO_EINTR EINTR + #define POCO_EACCES EACCES + #define POCO_EFAULT EFAULT + #define POCO_EINVAL EINVAL + #define POCO_EMFILE EMFILE + #define POCO_EAGAIN EAGAIN + #define POCO_EWOULDBLOCK EWOULDBLOCK + #define POCO_EINPROGRESS EINPROGRESS + #define POCO_EALREADY EALREADY + #define POCO_ENOTSOCK ENOTSOCK + #define POCO_EDESTADDRREQ EDESTADDRREQ + #define POCO_EMSGSIZE EMSGSIZE + #define POCO_EPROTOTYPE EPROTOTYPE + #define POCO_ENOPROTOOPT ENOPROTOOPT + #define POCO_EPROTONOSUPPORT EPROTONOSUPPORT + #if defined(ESOCKTNOSUPPORT) + #define POCO_ESOCKTNOSUPPORT ESOCKTNOSUPPORT + #else + #define POCO_ESOCKTNOSUPPORT -1 + #endif + #define POCO_ENOTSUP ENOTSUP + #define POCO_EPFNOSUPPORT EPFNOSUPPORT + #define POCO_EAFNOSUPPORT EAFNOSUPPORT + #define POCO_EADDRINUSE EADDRINUSE + #define POCO_EADDRNOTAVAIL EADDRNOTAVAIL + #define POCO_ENETDOWN ENETDOWN + #define POCO_ENETUNREACH ENETUNREACH + #define POCO_ENETRESET ENETRESET + #define POCO_ECONNABORTED ECONNABORTED + #define POCO_ECONNRESET ECONNRESET + #define POCO_ENOBUFS ENOBUFS + #define POCO_EISCONN EISCONN + #define POCO_ENOTCONN ENOTCONN + #if defined(ESHUTDOWN) + #define POCO_ESHUTDOWN ESHUTDOWN + #else + #define POCO_ESHUTDOWN -2 + #endif + #define POCO_ETIMEDOUT ETIMEDOUT + #define POCO_ECONNREFUSED ECONNREFUSED + #if defined(EHOSTDOWN) + #define POCO_EHOSTDOWN EHOSTDOWN + #else + #define POCO_EHOSTDOWN -3 + #endif + #define POCO_EHOSTUNREACH EHOSTUNREACH + #define POCO_ESYSNOTREADY -4 + #define POCO_ENOTINIT -5 + #define POCO_HOST_NOT_FOUND HOST_NOT_FOUND + #define POCO_TRY_AGAIN TRY_AGAIN + #define POCO_NO_RECOVERY NO_RECOVERY + #define POCO_NO_DATA NO_DATA +#endif + + +#if defined(POCO_OS_FAMILY_BSD) || (POCO_OS == POCO_OS_TRU64) || (POCO_OS == POCO_OS_AIX) || (POCO_OS == POCO_OS_IRIX) || (POCO_OS == POCO_OS_QNX) || (POCO_OS == POCO_OS_VXWORKS) + #define POCO_HAVE_SALEN 1 +#endif + + +#if POCO_OS != POCO_OS_VXWORKS && !defined(POCO_NET_NO_ADDRINFO) + #define POCO_HAVE_ADDRINFO 1 +#endif + + +#if POCO_OS == POCO_OS_LINUX + #define POCO_HAVE_ADDRINFO_A 1 +#endif + + +/// Without this option, Poco library will restart recv after EINTR, +/// but it doesn't update socket receive timeout that leads to infinite wait +/// when query profiler is activated. The issue persisted in delayed_replica_failover +/// integration test after we enabled query profiler by default. +#define POCO_BROKEN_TIMEOUTS 1 + + +#if defined(POCO_HAVE_ADDRINFO) + #ifndef AI_PASSIVE + #define AI_PASSIVE 0 + #endif + #ifndef AI_CANONNAME + #define AI_CANONNAME 0 + #endif + #ifndef AI_NUMERICHOST + #define AI_NUMERICHOST 0 + #endif + #ifndef AI_NUMERICSERV + #define AI_NUMERICSERV 0 + #endif + #ifndef AI_ALL + #define AI_ALL 0 + #endif + #ifndef AI_ADDRCONFIG + #define AI_ADDRCONFIG 0 + #endif + #ifndef AI_V4MAPPED + #define AI_V4MAPPED 0 + #endif +#endif + + +#if defined(POCO_HAVE_SALEN) + #define poco_set_sa_len(pSA, len) (pSA)->sa_len = (len) + #define poco_set_sin_len(pSA) (pSA)->sin_len = sizeof(struct sockaddr_in) + #if defined(POCO_HAVE_IPv6) + #define poco_set_sin6_len(pSA) (pSA)->sin6_len = sizeof(struct sockaddr_in6) + #endif + #if defined(POCO_OS_FAMILY_UNIX) + #define poco_set_sun_len(pSA, len) (pSA)->sun_len = (len) + #endif +#else + #define poco_set_sa_len(pSA, len) (void) 0 + #define poco_set_sin_len(pSA) (void) 0 + #define poco_set_sin6_len(pSA) (void) 0 + #define poco_set_sun_len(pSA, len) (void) 0 +#endif + + +#ifndef INADDR_NONE + #define INADDR_NONE 0xffffffff +#endif + +#ifndef INADDR_ANY + #define INADDR_ANY 0x00000000 +#endif + +#ifndef INADDR_BROADCAST + #define INADDR_BROADCAST 0xffffffff +#endif + +#ifndef INADDR_LOOPBACK + #define INADDR_LOOPBACK 0x7f000001 +#endif + +#ifndef INADDR_UNSPEC_GROUP + #define INADDR_UNSPEC_GROUP 0xe0000000 +#endif + +#ifndef INADDR_ALLHOSTS_GROUP + #define INADDR_ALLHOSTS_GROUP 0xe0000001 +#endif + +#ifndef INADDR_ALLRTRS_GROUP + #define INADDR_ALLRTRS_GROUP 0xe0000002 +#endif + +#ifndef INADDR_MAX_LOCAL_GROUP + #define INADDR_MAX_LOCAL_GROUP 0xe00000ff +#endif + +#if defined(POCO_ARCH_BIG_ENDIAN) + #define poco_ntoh_16(x) (x) + #define poco_ntoh_32(x) (x) +#else + #define poco_ntoh_16(x) \ + ((((x) >> 8) & 0x00ff) | (((x) << 8) & 0xff00)) + #define poco_ntoh_32(x) \ + ((((x) >> 24) & 0x000000ff) | (((x) >> 8) & 0x0000ff00) | (((x) << 8) & 0x00ff0000) | (((x) << 24) & 0xff000000)) +#endif +#define poco_hton_16(x) poco_ntoh_16(x) +#define poco_hton_32(x) poco_ntoh_32(x) + + +#if !defined(s6_addr16) + #if defined(POCO_OS_FAMILY_WINDOWS) + #define s6_addr16 u.Word + #else + #define s6_addr16 __u6_addr.__u6_addr16 + #endif +#endif + + +#if !defined(s6_addr32) + #if defined(POCO_OS_FAMILY_UNIX) + #if (POCO_OS == POCO_OS_SOLARIS) + #define s6_addr32 _S6_un._S6_u32 + #else + #define s6_addr32 __u6_addr.__u6_addr32 + #endif + #endif +#endif + + +namespace Poco { +namespace Net { + + +struct AddressFamily + /// AddressFamily::Family replaces the previously used IPAddress::Family + /// enumeration and is now used for IPAddress::Family and SocketAddress::Family. +{ + enum Family + /// Possible address families for socket addresses. + { + IPv4, + /// IPv4 address family. + #if defined(POCO_HAVE_IPv6) + IPv6, + /// IPv6 address family. + #endif + #if defined(POCO_OS_FAMILY_UNIX) + UNIX_LOCAL + /// UNIX domain socket address family. Available on UNIX/POSIX platforms only. + #endif + }; +}; + + +} } // namespace Poco::Net + + +#endif // Net_SocketDefs_INCLUDED diff --git a/contrib/libs/poco/Net/include/Poco/Net/SocketImpl.h b/contrib/libs/poco/Net/include/Poco/Net/SocketImpl.h index 4c51121bed..d1fec1de7d 100644 --- a/contrib/libs/poco/Net/include/Poco/Net/SocketImpl.h +++ b/contrib/libs/poco/Net/include/Poco/Net/SocketImpl.h @@ -1,503 +1,503 @@ -// -// SocketImpl.h -// -// Library: Net -// Package: Sockets -// Module: SocketImpl -// -// Definition of the SocketImpl class. -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Net_SocketImpl_INCLUDED -#define Net_SocketImpl_INCLUDED - - -#include "Poco/Net/Net.h" -#include "Poco/Net/SocketDefs.h" -#include "Poco/Net/SocketAddress.h" -#include "Poco/RefCountedObject.h" -#include "Poco/Timespan.h" - - -namespace Poco { -namespace Net { - - -class Net_API SocketImpl: public Poco::RefCountedObject - /// This class encapsulates the Berkeley sockets API. - /// - /// Subclasses implement specific socket types like - /// stream or datagram sockets. - /// - /// You should not create any instances of this class. -{ -public: - enum SelectMode - { - SELECT_READ = 1, - SELECT_WRITE = 2, - SELECT_ERROR = 4 - }; - - virtual SocketImpl* acceptConnection(SocketAddress& clientAddr); - /// Get the next completed connection from the - /// socket's completed connection queue. - /// - /// If the queue is empty, waits until a connection - /// request completes. - /// - /// Returns a new TCP socket for the connection - /// with the client. - /// - /// The client socket's address is returned in clientAddr. - - virtual void connect(const SocketAddress& address); - /// Initializes the socket and establishes a connection to - /// the TCP server at the given address. - /// - /// Can also be used for UDP sockets. In this case, no - /// connection is established. Instead, incoming and outgoing - /// packets are restricted to the specified address. - - virtual void connect(const SocketAddress& address, const Poco::Timespan& timeout); - /// Initializes the socket, sets the socket timeout and - /// establishes a connection to the TCP server at the given address. - - virtual void connectNB(const SocketAddress& address); - /// Initializes the socket and establishes a connection to - /// the TCP server at the given address. Prior to opening the - /// connection the socket is set to nonblocking mode. - - virtual void bind(const SocketAddress& address, bool reuseAddress = false); - /// Bind a local address to the socket. - /// - /// This is usually only done when establishing a server - /// socket. TCP clients should not bind a socket to a - /// specific address. - /// - /// If reuseAddress is true, sets the SO_REUSEADDR - /// socket option. - - virtual void bind(const SocketAddress& address, bool reuseAddress, bool reusePort ); - /// Bind a local address to the socket. - /// - /// This is usually only done when establishing a server - /// socket. TCP clients should not bind a socket to a - /// specific address. - /// - /// If reuseAddress is true, sets the SO_REUSEADDR - /// socket option. - /// - /// If reusePort is true, sets the SO_REUSEPORT - /// socket option. - - virtual void bind6(const SocketAddress& address, bool reuseAddress = false, bool ipV6Only = false); - /// Bind a local IPv6 address to the socket. - /// - /// This is usually only done when establishing a server - /// socket. TCP clients should not bind a socket to a - /// specific address. - /// - /// If reuseAddress is true, sets the SO_REUSEADDR - /// socket option. - /// - /// The given address must be an IPv6 address. The - /// IPPROTO_IPV6/IPV6_V6ONLY option is set on the socket - /// according to the ipV6Only parameter. - /// - /// If the library has not been built with IPv6 support, - /// a Poco::NotImplementedException will be thrown. - - virtual void bind6(const SocketAddress& address, bool reuseAddress, bool reusePort, bool ipV6Only); - /// Bind a local IPv6 address to the socket. - /// - /// This is usually only done when establishing a server - /// socket. TCP clients should not bind a socket to a - /// specific address. - /// - /// If reuseAddress is true, sets the SO_REUSEADDR - /// socket option. - /// - /// If reusePort is true, sets the SO_REUSEPORT - /// socket option. - /// - /// The given address must be an IPv6 address. The - /// IPPROTO_IPV6/IPV6_V6ONLY option is set on the socket - /// according to the ipV6Only parameter. - /// - /// If the library has not been built with IPv6 support, - /// a Poco::NotImplementedException will be thrown. - - virtual void listen(int backlog = 64); - /// Puts the socket into listening state. - /// - /// The socket becomes a passive socket that - /// can accept incoming connection requests. - /// - /// The backlog argument specifies the maximum - /// number of connections that can be queued - /// for this socket. - - virtual void close(); - /// Close the socket. - - virtual void shutdownReceive(); - /// Shuts down the receiving part of the socket connection. - - virtual void shutdownSend(); - /// Shuts down the sending part of the socket connection. - - virtual void shutdown(); - /// Shuts down both the receiving and the sending part - /// of the socket connection. - - virtual int sendBytes(const void* buffer, int length, int flags = 0); - /// Sends the contents of the given buffer through - /// the socket. - /// - /// Returns the number of bytes sent, which may be - /// less than the number of bytes specified. - /// - /// Certain socket implementations may also return a negative - /// value denoting a certain condition. - - virtual int receiveBytes(void* buffer, int length, int flags = 0); - /// Receives data from the socket and stores it - /// in buffer. Up to length bytes are received. - /// - /// Returns the number of bytes received. - /// - /// Certain socket implementations may also return a negative - /// value denoting a certain condition. - - virtual int sendTo(const void* buffer, int length, const SocketAddress& address, int flags = 0); - /// Sends the contents of the given buffer through - /// the socket to the given address. - /// - /// Returns the number of bytes sent, which may be - /// less than the number of bytes specified. - - virtual int receiveFrom(void* buffer, int length, SocketAddress& address, int flags = 0); - /// Receives data from the socket and stores it - /// in buffer. Up to length bytes are received. - /// Stores the address of the sender in address. - /// - /// Returns the number of bytes received. - - virtual void sendUrgent(unsigned char data); - /// Sends one byte of urgent data through - /// the socket. - /// - /// The data is sent with the MSG_OOB flag. - /// - /// The preferred way for a socket to receive urgent data - /// is by enabling the SO_OOBINLINE option. - - virtual int available(); - /// Returns the number of bytes available that can be read - /// without causing the socket to block. - - virtual bool poll(const Poco::Timespan& timeout, int mode); - /// Determines the status of the socket, using a - /// call to select(). - /// - /// The mode argument is constructed by combining the values - /// of the SelectMode enumeration. - /// - /// Returns true if the next operation corresponding to - /// mode will not block, false otherwise. - +// +// SocketImpl.h +// +// Library: Net +// Package: Sockets +// Module: SocketImpl +// +// Definition of the SocketImpl class. +// +// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. +// and Contributors. +// +// SPDX-License-Identifier: BSL-1.0 +// + + +#ifndef Net_SocketImpl_INCLUDED +#define Net_SocketImpl_INCLUDED + + +#include "Poco/Net/Net.h" +#include "Poco/Net/SocketDefs.h" +#include "Poco/Net/SocketAddress.h" +#include "Poco/RefCountedObject.h" +#include "Poco/Timespan.h" + + +namespace Poco { +namespace Net { + + +class Net_API SocketImpl: public Poco::RefCountedObject + /// This class encapsulates the Berkeley sockets API. + /// + /// Subclasses implement specific socket types like + /// stream or datagram sockets. + /// + /// You should not create any instances of this class. +{ +public: + enum SelectMode + { + SELECT_READ = 1, + SELECT_WRITE = 2, + SELECT_ERROR = 4 + }; + + virtual SocketImpl* acceptConnection(SocketAddress& clientAddr); + /// Get the next completed connection from the + /// socket's completed connection queue. + /// + /// If the queue is empty, waits until a connection + /// request completes. + /// + /// Returns a new TCP socket for the connection + /// with the client. + /// + /// The client socket's address is returned in clientAddr. + + virtual void connect(const SocketAddress& address); + /// Initializes the socket and establishes a connection to + /// the TCP server at the given address. + /// + /// Can also be used for UDP sockets. In this case, no + /// connection is established. Instead, incoming and outgoing + /// packets are restricted to the specified address. + + virtual void connect(const SocketAddress& address, const Poco::Timespan& timeout); + /// Initializes the socket, sets the socket timeout and + /// establishes a connection to the TCP server at the given address. + + virtual void connectNB(const SocketAddress& address); + /// Initializes the socket and establishes a connection to + /// the TCP server at the given address. Prior to opening the + /// connection the socket is set to nonblocking mode. + + virtual void bind(const SocketAddress& address, bool reuseAddress = false); + /// Bind a local address to the socket. + /// + /// This is usually only done when establishing a server + /// socket. TCP clients should not bind a socket to a + /// specific address. + /// + /// If reuseAddress is true, sets the SO_REUSEADDR + /// socket option. + + virtual void bind(const SocketAddress& address, bool reuseAddress, bool reusePort ); + /// Bind a local address to the socket. + /// + /// This is usually only done when establishing a server + /// socket. TCP clients should not bind a socket to a + /// specific address. + /// + /// If reuseAddress is true, sets the SO_REUSEADDR + /// socket option. + /// + /// If reusePort is true, sets the SO_REUSEPORT + /// socket option. + + virtual void bind6(const SocketAddress& address, bool reuseAddress = false, bool ipV6Only = false); + /// Bind a local IPv6 address to the socket. + /// + /// This is usually only done when establishing a server + /// socket. TCP clients should not bind a socket to a + /// specific address. + /// + /// If reuseAddress is true, sets the SO_REUSEADDR + /// socket option. + /// + /// The given address must be an IPv6 address. The + /// IPPROTO_IPV6/IPV6_V6ONLY option is set on the socket + /// according to the ipV6Only parameter. + /// + /// If the library has not been built with IPv6 support, + /// a Poco::NotImplementedException will be thrown. + + virtual void bind6(const SocketAddress& address, bool reuseAddress, bool reusePort, bool ipV6Only); + /// Bind a local IPv6 address to the socket. + /// + /// This is usually only done when establishing a server + /// socket. TCP clients should not bind a socket to a + /// specific address. + /// + /// If reuseAddress is true, sets the SO_REUSEADDR + /// socket option. + /// + /// If reusePort is true, sets the SO_REUSEPORT + /// socket option. + /// + /// The given address must be an IPv6 address. The + /// IPPROTO_IPV6/IPV6_V6ONLY option is set on the socket + /// according to the ipV6Only parameter. + /// + /// If the library has not been built with IPv6 support, + /// a Poco::NotImplementedException will be thrown. + + virtual void listen(int backlog = 64); + /// Puts the socket into listening state. + /// + /// The socket becomes a passive socket that + /// can accept incoming connection requests. + /// + /// The backlog argument specifies the maximum + /// number of connections that can be queued + /// for this socket. + + virtual void close(); + /// Close the socket. + + virtual void shutdownReceive(); + /// Shuts down the receiving part of the socket connection. + + virtual void shutdownSend(); + /// Shuts down the sending part of the socket connection. + + virtual void shutdown(); + /// Shuts down both the receiving and the sending part + /// of the socket connection. + + virtual int sendBytes(const void* buffer, int length, int flags = 0); + /// Sends the contents of the given buffer through + /// the socket. + /// + /// Returns the number of bytes sent, which may be + /// less than the number of bytes specified. + /// + /// Certain socket implementations may also return a negative + /// value denoting a certain condition. + + virtual int receiveBytes(void* buffer, int length, int flags = 0); + /// Receives data from the socket and stores it + /// in buffer. Up to length bytes are received. + /// + /// Returns the number of bytes received. + /// + /// Certain socket implementations may also return a negative + /// value denoting a certain condition. + + virtual int sendTo(const void* buffer, int length, const SocketAddress& address, int flags = 0); + /// Sends the contents of the given buffer through + /// the socket to the given address. + /// + /// Returns the number of bytes sent, which may be + /// less than the number of bytes specified. + + virtual int receiveFrom(void* buffer, int length, SocketAddress& address, int flags = 0); + /// Receives data from the socket and stores it + /// in buffer. Up to length bytes are received. + /// Stores the address of the sender in address. + /// + /// Returns the number of bytes received. + + virtual void sendUrgent(unsigned char data); + /// Sends one byte of urgent data through + /// the socket. + /// + /// The data is sent with the MSG_OOB flag. + /// + /// The preferred way for a socket to receive urgent data + /// is by enabling the SO_OOBINLINE option. + + virtual int available(); + /// Returns the number of bytes available that can be read + /// without causing the socket to block. + + virtual bool poll(const Poco::Timespan& timeout, int mode); + /// Determines the status of the socket, using a + /// call to select(). + /// + /// The mode argument is constructed by combining the values + /// of the SelectMode enumeration. + /// + /// Returns true if the next operation corresponding to + /// mode will not block, false otherwise. + bool pollImpl(Poco::Timespan& timeout, int mode); /// Modifies `timeout` - virtual void setSendBufferSize(int size); - /// Sets the size of the send buffer. - - virtual int getSendBufferSize(); - /// Returns the size of the send buffer. - /// - /// The returned value may be different than the - /// value previously set with setSendBufferSize(), - /// as the system is free to adjust the value. - - virtual void setReceiveBufferSize(int size); - /// Sets the size of the receive buffer. - - virtual int getReceiveBufferSize(); - /// Returns the size of the receive buffer. - /// - /// The returned value may be different than the - /// value previously set with setReceiveBufferSize(), - /// as the system is free to adjust the value. - - virtual void setSendTimeout(const Poco::Timespan& timeout); - /// Sets the send timeout for the socket. - - virtual Poco::Timespan getSendTimeout(); - /// Returns the send timeout for the socket. - /// - /// The returned timeout may be different than the - /// timeout previously set with setSendTimeout(), - /// as the system is free to adjust the value. - - virtual void setReceiveTimeout(const Poco::Timespan& timeout); - /// Sets the send timeout for the socket. - /// - /// On systems that do not support SO_RCVTIMEO, a - /// workaround using poll() is provided. - - virtual Poco::Timespan getReceiveTimeout(); - /// Returns the receive timeout for the socket. - /// - /// The returned timeout may be different than the - /// timeout previously set with setReceiveTimeout(), - /// as the system is free to adjust the value. - - virtual SocketAddress address(); - /// Returns the IP address and port number of the socket. - - virtual SocketAddress peerAddress(); - /// Returns the IP address and port number of the peer socket. - - void setOption(int level, int option, int value); - /// Sets the socket option specified by level and option - /// to the given integer value. - - void setOption(int level, int option, unsigned value); - /// Sets the socket option specified by level and option - /// to the given integer value. - - void setOption(int level, int option, unsigned char value); - /// Sets the socket option specified by level and option - /// to the given integer value. - - void setOption(int level, int option, const Poco::Timespan& value); - /// Sets the socket option specified by level and option - /// to the given time value. - - void setOption(int level, int option, const IPAddress& value); - /// Sets the socket option specified by level and option - /// to the given time value. - - virtual void setRawOption(int level, int option, const void* value, poco_socklen_t length); - /// Sets the socket option specified by level and option - /// to the given time value. - - void getOption(int level, int option, int& value); - /// Returns the value of the socket option - /// specified by level and option. - - void getOption(int level, int option, unsigned& value); - /// Returns the value of the socket option - /// specified by level and option. - - void getOption(int level, int option, unsigned char& value); - /// Returns the value of the socket option - /// specified by level and option. - - void getOption(int level, int option, Poco::Timespan& value); - /// Returns the value of the socket option - /// specified by level and option. - - void getOption(int level, int option, IPAddress& value); - /// Returns the value of the socket option - /// specified by level and option. - - virtual void getRawOption(int level, int option, void* value, poco_socklen_t& length); - /// Returns the value of the socket option - /// specified by level and option. - - void setLinger(bool on, int seconds); - /// Sets the value of the SO_LINGER socket option. - - void getLinger(bool& on, int& seconds); - /// Returns the value of the SO_LINGER socket option. - - void setNoDelay(bool flag); - /// Sets the value of the TCP_NODELAY socket option. - - bool getNoDelay(); - /// Returns the value of the TCP_NODELAY socket option. - - void setKeepAlive(bool flag); - /// Sets the value of the SO_KEEPALIVE socket option. - - bool getKeepAlive(); - /// Returns the value of the SO_KEEPALIVE socket option. - - void setReuseAddress(bool flag); - /// Sets the value of the SO_REUSEADDR socket option. - - bool getReuseAddress(); - /// Returns the value of the SO_REUSEADDR socket option. - - void setReusePort(bool flag); - /// Sets the value of the SO_REUSEPORT socket option. - /// Does nothing if the socket implementation does not - /// support SO_REUSEPORT. - - bool getReusePort(); - /// Returns the value of the SO_REUSEPORT socket option. - /// - /// Returns false if the socket implementation does not - /// support SO_REUSEPORT. - - void setOOBInline(bool flag); - /// Sets the value of the SO_OOBINLINE socket option. - - bool getOOBInline(); - /// Returns the value of the SO_OOBINLINE socket option. - - void setBroadcast(bool flag); - /// Sets the value of the SO_BROADCAST socket option. - - bool getBroadcast(); - /// Returns the value of the SO_BROADCAST socket option. - - virtual void setBlocking(bool flag); - /// Sets the socket in blocking mode if flag is true, - /// disables blocking mode if flag is false. - - virtual bool getBlocking() const; - /// Returns the blocking mode of the socket. - /// This method will only work if the blocking modes of - /// the socket are changed via the setBlocking method! - - virtual bool secure() const; - /// Returns true iff the socket's connection is secure - /// (using SSL or TLS). - - int socketError(); - /// Returns the value of the SO_ERROR socket option. - - poco_socket_t sockfd() const; - /// Returns the socket descriptor for the - /// underlying native socket. - - void ioctl(poco_ioctl_request_t request, int& arg); - /// A wrapper for the ioctl system call. - - void ioctl(poco_ioctl_request_t request, void* arg); - /// A wrapper for the ioctl system call. - -#if defined(POCO_OS_FAMILY_UNIX) - int fcntl(poco_fcntl_request_t request); - /// A wrapper for the fcntl system call. - - int fcntl(poco_fcntl_request_t request, long arg); - /// A wrapper for the fcntl system call. -#endif - - bool initialized() const; - /// Returns true iff the underlying socket is initialized. - -protected: - SocketImpl(); - /// Creates a SocketImpl. - - SocketImpl(poco_socket_t sockfd); - /// Creates a SocketImpl using the given native socket. - - virtual ~SocketImpl(); - /// Destroys the SocketImpl. - /// Closes the socket if it is still open. - - virtual void init(int af); - /// Creates the underlying native socket. - /// - /// Subclasses must implement this method so - /// that it calls initSocket() with the - /// appropriate arguments. - /// - /// The default implementation creates a - /// stream socket. - - void initSocket(int af, int type, int proto = 0); - /// Creates the underlying native socket. - /// - /// The first argument, af, specifies the address family - /// used by the socket, which should be either AF_INET or - /// AF_INET6. - /// - /// The second argument, type, specifies the type of the - /// socket, which can be one of SOCK_STREAM, SOCK_DGRAM - /// or SOCK_RAW. - /// - /// The third argument, proto, is normally set to 0, - /// except for raw sockets. - - void reset(poco_socket_t fd = POCO_INVALID_SOCKET); - /// Allows subclasses to set the socket manually, iff no valid socket is set yet. - - static int lastError(); - /// Returns the last error code. - - static void error(); - /// Throws an appropriate exception for the last error. - - static void error(const std::string& arg); - /// Throws an appropriate exception for the last error. - - static void error(int code); - /// Throws an appropriate exception for the given error code. - - static void error(int code, const std::string& arg); - /// Throws an appropriate exception for the given error code. - + virtual void setSendBufferSize(int size); + /// Sets the size of the send buffer. + + virtual int getSendBufferSize(); + /// Returns the size of the send buffer. + /// + /// The returned value may be different than the + /// value previously set with setSendBufferSize(), + /// as the system is free to adjust the value. + + virtual void setReceiveBufferSize(int size); + /// Sets the size of the receive buffer. + + virtual int getReceiveBufferSize(); + /// Returns the size of the receive buffer. + /// + /// The returned value may be different than the + /// value previously set with setReceiveBufferSize(), + /// as the system is free to adjust the value. + + virtual void setSendTimeout(const Poco::Timespan& timeout); + /// Sets the send timeout for the socket. + + virtual Poco::Timespan getSendTimeout(); + /// Returns the send timeout for the socket. + /// + /// The returned timeout may be different than the + /// timeout previously set with setSendTimeout(), + /// as the system is free to adjust the value. + + virtual void setReceiveTimeout(const Poco::Timespan& timeout); + /// Sets the send timeout for the socket. + /// + /// On systems that do not support SO_RCVTIMEO, a + /// workaround using poll() is provided. + + virtual Poco::Timespan getReceiveTimeout(); + /// Returns the receive timeout for the socket. + /// + /// The returned timeout may be different than the + /// timeout previously set with setReceiveTimeout(), + /// as the system is free to adjust the value. + + virtual SocketAddress address(); + /// Returns the IP address and port number of the socket. + + virtual SocketAddress peerAddress(); + /// Returns the IP address and port number of the peer socket. + + void setOption(int level, int option, int value); + /// Sets the socket option specified by level and option + /// to the given integer value. + + void setOption(int level, int option, unsigned value); + /// Sets the socket option specified by level and option + /// to the given integer value. + + void setOption(int level, int option, unsigned char value); + /// Sets the socket option specified by level and option + /// to the given integer value. + + void setOption(int level, int option, const Poco::Timespan& value); + /// Sets the socket option specified by level and option + /// to the given time value. + + void setOption(int level, int option, const IPAddress& value); + /// Sets the socket option specified by level and option + /// to the given time value. + + virtual void setRawOption(int level, int option, const void* value, poco_socklen_t length); + /// Sets the socket option specified by level and option + /// to the given time value. + + void getOption(int level, int option, int& value); + /// Returns the value of the socket option + /// specified by level and option. + + void getOption(int level, int option, unsigned& value); + /// Returns the value of the socket option + /// specified by level and option. + + void getOption(int level, int option, unsigned char& value); + /// Returns the value of the socket option + /// specified by level and option. + + void getOption(int level, int option, Poco::Timespan& value); + /// Returns the value of the socket option + /// specified by level and option. + + void getOption(int level, int option, IPAddress& value); + /// Returns the value of the socket option + /// specified by level and option. + + virtual void getRawOption(int level, int option, void* value, poco_socklen_t& length); + /// Returns the value of the socket option + /// specified by level and option. + + void setLinger(bool on, int seconds); + /// Sets the value of the SO_LINGER socket option. + + void getLinger(bool& on, int& seconds); + /// Returns the value of the SO_LINGER socket option. + + void setNoDelay(bool flag); + /// Sets the value of the TCP_NODELAY socket option. + + bool getNoDelay(); + /// Returns the value of the TCP_NODELAY socket option. + + void setKeepAlive(bool flag); + /// Sets the value of the SO_KEEPALIVE socket option. + + bool getKeepAlive(); + /// Returns the value of the SO_KEEPALIVE socket option. + + void setReuseAddress(bool flag); + /// Sets the value of the SO_REUSEADDR socket option. + + bool getReuseAddress(); + /// Returns the value of the SO_REUSEADDR socket option. + + void setReusePort(bool flag); + /// Sets the value of the SO_REUSEPORT socket option. + /// Does nothing if the socket implementation does not + /// support SO_REUSEPORT. + + bool getReusePort(); + /// Returns the value of the SO_REUSEPORT socket option. + /// + /// Returns false if the socket implementation does not + /// support SO_REUSEPORT. + + void setOOBInline(bool flag); + /// Sets the value of the SO_OOBINLINE socket option. + + bool getOOBInline(); + /// Returns the value of the SO_OOBINLINE socket option. + + void setBroadcast(bool flag); + /// Sets the value of the SO_BROADCAST socket option. + + bool getBroadcast(); + /// Returns the value of the SO_BROADCAST socket option. + + virtual void setBlocking(bool flag); + /// Sets the socket in blocking mode if flag is true, + /// disables blocking mode if flag is false. + + virtual bool getBlocking() const; + /// Returns the blocking mode of the socket. + /// This method will only work if the blocking modes of + /// the socket are changed via the setBlocking method! + + virtual bool secure() const; + /// Returns true iff the socket's connection is secure + /// (using SSL or TLS). + + int socketError(); + /// Returns the value of the SO_ERROR socket option. + + poco_socket_t sockfd() const; + /// Returns the socket descriptor for the + /// underlying native socket. + + void ioctl(poco_ioctl_request_t request, int& arg); + /// A wrapper for the ioctl system call. + + void ioctl(poco_ioctl_request_t request, void* arg); + /// A wrapper for the ioctl system call. + +#if defined(POCO_OS_FAMILY_UNIX) + int fcntl(poco_fcntl_request_t request); + /// A wrapper for the fcntl system call. + + int fcntl(poco_fcntl_request_t request, long arg); + /// A wrapper for the fcntl system call. +#endif + + bool initialized() const; + /// Returns true iff the underlying socket is initialized. + +protected: + SocketImpl(); + /// Creates a SocketImpl. + + SocketImpl(poco_socket_t sockfd); + /// Creates a SocketImpl using the given native socket. + + virtual ~SocketImpl(); + /// Destroys the SocketImpl. + /// Closes the socket if it is still open. + + virtual void init(int af); + /// Creates the underlying native socket. + /// + /// Subclasses must implement this method so + /// that it calls initSocket() with the + /// appropriate arguments. + /// + /// The default implementation creates a + /// stream socket. + + void initSocket(int af, int type, int proto = 0); + /// Creates the underlying native socket. + /// + /// The first argument, af, specifies the address family + /// used by the socket, which should be either AF_INET or + /// AF_INET6. + /// + /// The second argument, type, specifies the type of the + /// socket, which can be one of SOCK_STREAM, SOCK_DGRAM + /// or SOCK_RAW. + /// + /// The third argument, proto, is normally set to 0, + /// except for raw sockets. + + void reset(poco_socket_t fd = POCO_INVALID_SOCKET); + /// Allows subclasses to set the socket manually, iff no valid socket is set yet. + + static int lastError(); + /// Returns the last error code. + + static void error(); + /// Throws an appropriate exception for the last error. + + static void error(const std::string& arg); + /// Throws an appropriate exception for the last error. + + static void error(int code); + /// Throws an appropriate exception for the given error code. + + static void error(int code, const std::string& arg); + /// Throws an appropriate exception for the given error code. + protected: - SocketImpl(const SocketImpl&); - SocketImpl& operator = (const SocketImpl&); - - poco_socket_t _sockfd; - Poco::Timespan _recvTimeout; - Poco::Timespan _sndTimeout; - bool _blocking; - bool _isBrokenTimeout; - - friend class Socket; - friend class SecureSocketImpl; - friend class PollSetImpl; -}; - - -// -// inlines -// -inline poco_socket_t SocketImpl::sockfd() const -{ - return _sockfd; -} - - -inline bool SocketImpl::initialized() const -{ - return _sockfd != POCO_INVALID_SOCKET; -} - - -inline int SocketImpl::lastError() -{ -#if defined(_WIN32) - return WSAGetLastError(); -#else - return errno; -#endif -} - - -inline bool SocketImpl::getBlocking() const -{ - return _blocking; -} - - -} } // namespace Poco::Net - - -#endif // Net_SocketImpl_INCLUDED + SocketImpl(const SocketImpl&); + SocketImpl& operator = (const SocketImpl&); + + poco_socket_t _sockfd; + Poco::Timespan _recvTimeout; + Poco::Timespan _sndTimeout; + bool _blocking; + bool _isBrokenTimeout; + + friend class Socket; + friend class SecureSocketImpl; + friend class PollSetImpl; +}; + + +// +// inlines +// +inline poco_socket_t SocketImpl::sockfd() const +{ + return _sockfd; +} + + +inline bool SocketImpl::initialized() const +{ + return _sockfd != POCO_INVALID_SOCKET; +} + + +inline int SocketImpl::lastError() +{ +#if defined(_WIN32) + return WSAGetLastError(); +#else + return errno; +#endif +} + + +inline bool SocketImpl::getBlocking() const +{ + return _blocking; +} + + +} } // namespace Poco::Net + + +#endif // Net_SocketImpl_INCLUDED diff --git a/contrib/libs/poco/Net/include/Poco/Net/SocketNotification.h b/contrib/libs/poco/Net/include/Poco/Net/SocketNotification.h index 7934dffaab..7b857ecfe8 100644 --- a/contrib/libs/poco/Net/include/Poco/Net/SocketNotification.h +++ b/contrib/libs/poco/Net/include/Poco/Net/SocketNotification.h @@ -1,153 +1,153 @@ -// -// SocketNotification.h -// -// Library: Net -// Package: Reactor -// Module: SocketNotification -// -// Definition of the SocketNotification class. -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Net_SocketNotification_INCLUDED -#define Net_SocketNotification_INCLUDED - - -#include "Poco/Net/Net.h" -#include "Poco/Net/Socket.h" -#include "Poco/Notification.h" - - -namespace Poco { -namespace Net { - - -class SocketReactor; - - -class Net_API SocketNotification: public Poco::Notification - /// The base class for all notifications generated by - /// the SocketReactor. -{ -public: - explicit SocketNotification(SocketReactor* pReactor); - /// Creates the SocketNotification for the given SocketReactor. - - virtual ~SocketNotification(); - /// Destroys the SocketNotification. - - SocketReactor& source() const; - /// Returns the SocketReactor that generated the notification. - - Socket socket() const; - /// Returns the socket that caused the notification. - -private: - void setSocket(const Socket& socket); - - SocketReactor* _pReactor; - Socket _socket; - - friend class SocketNotifier; -}; - - -class Net_API ReadableNotification: public SocketNotification - /// This notification is sent if a socket has become readable. -{ -public: - ReadableNotification(SocketReactor* pReactor); - /// Creates the ReadableNotification for the given SocketReactor. - - ~ReadableNotification(); - /// Destroys the ReadableNotification. -}; - - -class Net_API WritableNotification: public SocketNotification - /// This notification is sent if a socket has become writable. -{ -public: - WritableNotification(SocketReactor* pReactor); - /// Creates the WritableNotification for the given SocketReactor. - - ~WritableNotification(); - /// Destroys the WritableNotification. -}; - - -class Net_API ErrorNotification: public SocketNotification - /// This notification is sent if a socket has signalled an error. -{ -public: - ErrorNotification(SocketReactor* pReactor); - /// Creates the ErrorNotification for the given SocketReactor. - - ~ErrorNotification(); - /// Destroys the ErrorNotification. -}; - - -class Net_API TimeoutNotification: public SocketNotification - /// This notification is sent if no other event has occurred - /// for a specified time. -{ -public: - TimeoutNotification(SocketReactor* pReactor); - /// Creates the TimeoutNotification for the given SocketReactor. - - ~TimeoutNotification(); - /// Destroys the TimeoutNotification. -}; - - -class Net_API IdleNotification: public SocketNotification - /// This notification is sent when the SocketReactor does - /// not have any sockets to react to. -{ -public: - IdleNotification(SocketReactor* pReactor); - /// Creates the IdleNotification for the given SocketReactor. - - ~IdleNotification(); - /// Destroys the IdleNotification. -}; - - -class Net_API ShutdownNotification: public SocketNotification - /// This notification is sent when the SocketReactor is - /// about to shut down. -{ -public: - ShutdownNotification(SocketReactor* pReactor); - /// Creates the ShutdownNotification for the given SocketReactor. - - ~ShutdownNotification(); - /// Destroys the ShutdownNotification. -}; - - -// -// inlines -// -inline SocketReactor& SocketNotification::source() const -{ - return *_pReactor; -} - - -inline Socket SocketNotification::socket() const -{ - return _socket; -} - - -} } // namespace Poco::Net - - -#endif // Net_SocketNotification_INCLUDED +// +// SocketNotification.h +// +// Library: Net +// Package: Reactor +// Module: SocketNotification +// +// Definition of the SocketNotification class. +// +// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. +// and Contributors. +// +// SPDX-License-Identifier: BSL-1.0 +// + + +#ifndef Net_SocketNotification_INCLUDED +#define Net_SocketNotification_INCLUDED + + +#include "Poco/Net/Net.h" +#include "Poco/Net/Socket.h" +#include "Poco/Notification.h" + + +namespace Poco { +namespace Net { + + +class SocketReactor; + + +class Net_API SocketNotification: public Poco::Notification + /// The base class for all notifications generated by + /// the SocketReactor. +{ +public: + explicit SocketNotification(SocketReactor* pReactor); + /// Creates the SocketNotification for the given SocketReactor. + + virtual ~SocketNotification(); + /// Destroys the SocketNotification. + + SocketReactor& source() const; + /// Returns the SocketReactor that generated the notification. + + Socket socket() const; + /// Returns the socket that caused the notification. + +private: + void setSocket(const Socket& socket); + + SocketReactor* _pReactor; + Socket _socket; + + friend class SocketNotifier; +}; + + +class Net_API ReadableNotification: public SocketNotification + /// This notification is sent if a socket has become readable. +{ +public: + ReadableNotification(SocketReactor* pReactor); + /// Creates the ReadableNotification for the given SocketReactor. + + ~ReadableNotification(); + /// Destroys the ReadableNotification. +}; + + +class Net_API WritableNotification: public SocketNotification + /// This notification is sent if a socket has become writable. +{ +public: + WritableNotification(SocketReactor* pReactor); + /// Creates the WritableNotification for the given SocketReactor. + + ~WritableNotification(); + /// Destroys the WritableNotification. +}; + + +class Net_API ErrorNotification: public SocketNotification + /// This notification is sent if a socket has signalled an error. +{ +public: + ErrorNotification(SocketReactor* pReactor); + /// Creates the ErrorNotification for the given SocketReactor. + + ~ErrorNotification(); + /// Destroys the ErrorNotification. +}; + + +class Net_API TimeoutNotification: public SocketNotification + /// This notification is sent if no other event has occurred + /// for a specified time. +{ +public: + TimeoutNotification(SocketReactor* pReactor); + /// Creates the TimeoutNotification for the given SocketReactor. + + ~TimeoutNotification(); + /// Destroys the TimeoutNotification. +}; + + +class Net_API IdleNotification: public SocketNotification + /// This notification is sent when the SocketReactor does + /// not have any sockets to react to. +{ +public: + IdleNotification(SocketReactor* pReactor); + /// Creates the IdleNotification for the given SocketReactor. + + ~IdleNotification(); + /// Destroys the IdleNotification. +}; + + +class Net_API ShutdownNotification: public SocketNotification + /// This notification is sent when the SocketReactor is + /// about to shut down. +{ +public: + ShutdownNotification(SocketReactor* pReactor); + /// Creates the ShutdownNotification for the given SocketReactor. + + ~ShutdownNotification(); + /// Destroys the ShutdownNotification. +}; + + +// +// inlines +// +inline SocketReactor& SocketNotification::source() const +{ + return *_pReactor; +} + + +inline Socket SocketNotification::socket() const +{ + return _socket; +} + + +} } // namespace Poco::Net + + +#endif // Net_SocketNotification_INCLUDED diff --git a/contrib/libs/poco/Net/include/Poco/Net/SocketNotifier.h b/contrib/libs/poco/Net/include/Poco/Net/SocketNotifier.h index 7a14fa1add..a98e407a3d 100644 --- a/contrib/libs/poco/Net/include/Poco/Net/SocketNotifier.h +++ b/contrib/libs/poco/Net/include/Poco/Net/SocketNotifier.h @@ -1,110 +1,110 @@ -// -// SocketNotifier.h -// -// Library: Net -// Package: Reactor -// Module: SocketNotifier -// -// Definition of the SocketNotifier class. -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Net_SocketNotifier_INCLUDED -#define Net_SocketNotifier_INCLUDED - - -#include "Poco/Net/Net.h" -#include "Poco/Net/Socket.h" -#include "Poco/RefCountedObject.h" -#include "Poco/NotificationCenter.h" -#include "Poco/Observer.h" -#include <set> - - -namespace Poco { -namespace Net { - - -class Socket; -class SocketReactor; -class SocketNotification; - - -class Net_API SocketNotifier: public Poco::RefCountedObject - /// This class is used internally by SocketReactor - /// to notify registered event handlers of socket events. -{ -public: - explicit SocketNotifier(const Socket& socket); - /// Creates the SocketNotifier for the given socket. - - void addObserver(SocketReactor* pReactor, const Poco::AbstractObserver& observer); - /// Adds the given observer. - - void removeObserver(SocketReactor* pReactor, const Poco::AbstractObserver& observer); - /// Removes the given observer. - - bool hasObserver(const Poco::AbstractObserver& observer) const; - /// Returns true if the given observer is registered. - - bool accepts(SocketNotification* pNotification); - /// Returns true if there is at least one observer for the given notification. - - void dispatch(SocketNotification* pNotification); - /// Dispatches the notification to all observers. - - bool hasObservers() const; - /// Returns true if there are subscribers. - - std::size_t countObservers() const; - /// Returns the number of subscribers; - -protected: - ~SocketNotifier(); - /// Destroys the SocketNotifier. - -private: - typedef std::multiset<SocketNotification*> EventSet; - - EventSet _events; - Poco::NotificationCenter _nc; - Socket _socket; -}; - - -// -// inlines -// -inline bool SocketNotifier::accepts(SocketNotification* pNotification) -{ - return _events.find(pNotification) != _events.end(); -} - - -inline bool SocketNotifier::hasObserver(const Poco::AbstractObserver& observer) const -{ - return _nc.hasObserver(observer); -} - - -inline bool SocketNotifier::hasObservers() const -{ - return _nc.hasObservers(); -} - - -inline std::size_t SocketNotifier::countObservers() const -{ - return _nc.countObservers(); -} - - -} } // namespace Poco::Net - - -#endif // Net_SocketNotifier_INCLUDED +// +// SocketNotifier.h +// +// Library: Net +// Package: Reactor +// Module: SocketNotifier +// +// Definition of the SocketNotifier class. +// +// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. +// and Contributors. +// +// SPDX-License-Identifier: BSL-1.0 +// + + +#ifndef Net_SocketNotifier_INCLUDED +#define Net_SocketNotifier_INCLUDED + + +#include "Poco/Net/Net.h" +#include "Poco/Net/Socket.h" +#include "Poco/RefCountedObject.h" +#include "Poco/NotificationCenter.h" +#include "Poco/Observer.h" +#include <set> + + +namespace Poco { +namespace Net { + + +class Socket; +class SocketReactor; +class SocketNotification; + + +class Net_API SocketNotifier: public Poco::RefCountedObject + /// This class is used internally by SocketReactor + /// to notify registered event handlers of socket events. +{ +public: + explicit SocketNotifier(const Socket& socket); + /// Creates the SocketNotifier for the given socket. + + void addObserver(SocketReactor* pReactor, const Poco::AbstractObserver& observer); + /// Adds the given observer. + + void removeObserver(SocketReactor* pReactor, const Poco::AbstractObserver& observer); + /// Removes the given observer. + + bool hasObserver(const Poco::AbstractObserver& observer) const; + /// Returns true if the given observer is registered. + + bool accepts(SocketNotification* pNotification); + /// Returns true if there is at least one observer for the given notification. + + void dispatch(SocketNotification* pNotification); + /// Dispatches the notification to all observers. + + bool hasObservers() const; + /// Returns true if there are subscribers. + + std::size_t countObservers() const; + /// Returns the number of subscribers; + +protected: + ~SocketNotifier(); + /// Destroys the SocketNotifier. + +private: + typedef std::multiset<SocketNotification*> EventSet; + + EventSet _events; + Poco::NotificationCenter _nc; + Socket _socket; +}; + + +// +// inlines +// +inline bool SocketNotifier::accepts(SocketNotification* pNotification) +{ + return _events.find(pNotification) != _events.end(); +} + + +inline bool SocketNotifier::hasObserver(const Poco::AbstractObserver& observer) const +{ + return _nc.hasObserver(observer); +} + + +inline bool SocketNotifier::hasObservers() const +{ + return _nc.hasObservers(); +} + + +inline std::size_t SocketNotifier::countObservers() const +{ + return _nc.countObservers(); +} + + +} } // namespace Poco::Net + + +#endif // Net_SocketNotifier_INCLUDED diff --git a/contrib/libs/poco/Net/include/Poco/Net/SocketReactor.h b/contrib/libs/poco/Net/include/Poco/Net/SocketReactor.h index 0de3af64c0..06c40bbd6a 100644 --- a/contrib/libs/poco/Net/include/Poco/Net/SocketReactor.h +++ b/contrib/libs/poco/Net/include/Poco/Net/SocketReactor.h @@ -1,235 +1,235 @@ -// -// SocketReactor.h -// -// Library: Net -// Package: Reactor -// Module: SocketReactor -// -// Definition of the SocketReactor class. -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Net_SocketReactor_INCLUDED -#define Net_SocketReactor_INCLUDED - - -#include "Poco/Net/Net.h" -#include "Poco/Net/Socket.h" -#include "Poco/Runnable.h" -#include "Poco/Timespan.h" -#include "Poco/Observer.h" -#include "Poco/AutoPtr.h" -#include <map> - - -namespace Poco { - - -class Thread; - - -namespace Net { - - -class Socket; -class SocketNotification; -class SocketNotifier; - - -class Net_API SocketReactor: public Poco::Runnable - /// This class, which is part of the Reactor pattern, - /// implements the "Initiation Dispatcher". +// +// SocketReactor.h +// +// Library: Net +// Package: Reactor +// Module: SocketReactor +// +// Definition of the SocketReactor class. +// +// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. +// and Contributors. +// +// SPDX-License-Identifier: BSL-1.0 +// + + +#ifndef Net_SocketReactor_INCLUDED +#define Net_SocketReactor_INCLUDED + + +#include "Poco/Net/Net.h" +#include "Poco/Net/Socket.h" +#include "Poco/Runnable.h" +#include "Poco/Timespan.h" +#include "Poco/Observer.h" +#include "Poco/AutoPtr.h" +#include <map> + + +namespace Poco { + + +class Thread; + + +namespace Net { + + +class Socket; +class SocketNotification; +class SocketNotifier; + + +class Net_API SocketReactor: public Poco::Runnable + /// This class, which is part of the Reactor pattern, + /// implements the "Initiation Dispatcher". + /// + /// The Reactor pattern has been described in the book + /// "Pattern Languages of Program Design" by Jim Coplien + /// and Douglas C. Schmidt (Addison Wesley, 1995). + /// + /// The Reactor design pattern handles service requests that + /// are delivered concurrently to an application by one or more + /// clients. Each service in an application may consist of several + /// methods and is represented by a separate event handler. The event + /// handler is responsible for servicing service-specific requests. + /// The SocketReactor dispatches the event handlers. + /// + /// Event handlers (any class can be an event handler - there + /// is no base class for event handlers) can be registered + /// with the addEventHandler() method and deregistered with + /// the removeEventHandler() method. /// - /// The Reactor pattern has been described in the book - /// "Pattern Languages of Program Design" by Jim Coplien - /// and Douglas C. Schmidt (Addison Wesley, 1995). + /// An event handler is always registered for a certain socket, + /// which is given in the call to addEventHandler(). Any method + /// of the event handler class can be registered to handle the + /// event - the only requirement is that the method takes + /// a pointer to an instance of SocketNotification (or a subclass of it) + /// as argument. + /// + /// Once started, the SocketReactor waits for events + /// on the registered sockets, using Socket::select(). + /// If an event is detected, the corresponding event handler + /// is invoked. There are five event types (and corresponding + /// notification classes) defined: ReadableNotification, WritableNotification, + /// ErrorNotification, TimeoutNotification, IdleNotification and + /// ShutdownNotification. /// - /// The Reactor design pattern handles service requests that - /// are delivered concurrently to an application by one or more - /// clients. Each service in an application may consist of several - /// methods and is represented by a separate event handler. The event - /// handler is responsible for servicing service-specific requests. - /// The SocketReactor dispatches the event handlers. - /// - /// Event handlers (any class can be an event handler - there - /// is no base class for event handlers) can be registered - /// with the addEventHandler() method and deregistered with - /// the removeEventHandler() method. - /// - /// An event handler is always registered for a certain socket, - /// which is given in the call to addEventHandler(). Any method - /// of the event handler class can be registered to handle the - /// event - the only requirement is that the method takes - /// a pointer to an instance of SocketNotification (or a subclass of it) - /// as argument. - /// - /// Once started, the SocketReactor waits for events - /// on the registered sockets, using Socket::select(). - /// If an event is detected, the corresponding event handler - /// is invoked. There are five event types (and corresponding - /// notification classes) defined: ReadableNotification, WritableNotification, - /// ErrorNotification, TimeoutNotification, IdleNotification and - /// ShutdownNotification. - /// - /// The ReadableNotification will be dispatched if a socket becomes - /// readable. The WritableNotification will be dispatched if a socket - /// becomes writable. The ErrorNotification will be dispatched if - /// there is an error condition on a socket. - /// - /// If the timeout expires and no event has occurred, a - /// TimeoutNotification will be dispatched to all event handlers - /// registered for it. This is done in the onTimeout() method - /// which can be overridden by subclasses to perform custom - /// timeout processing. - /// - /// If there are no sockets for the SocketReactor to pass to - /// Socket::select(), an IdleNotification will be dispatched to - /// all event handlers registered for it. This is done in the - /// onIdle() method which can be overridden by subclasses - /// to perform custom idle processing. Since onIdle() will be - /// called repeatedly in a loop, it is recommended to do a - /// short sleep or yield in the event handler. - /// - /// Finally, when the SocketReactor is about to shut down (as a result - /// of stop() being called), it dispatches a ShutdownNotification - /// to all event handlers. This is done in the onShutdown() method - /// which can be overridded by subclasses to perform custom - /// shutdown processing. - /// - /// The SocketReactor is implemented so that it can - /// run in its own thread. It is also possible to run - /// multiple SocketReactors in parallel, as long as - /// they work on different sockets. - /// - /// It is safe to call addEventHandler() and removeEventHandler() - /// from another thread while the SocketReactor is running. Also, - /// it is safe to call addEventHandler() and removeEventHandler() - /// from event handlers. -{ -public: - SocketReactor(); - /// Creates the SocketReactor. - - explicit SocketReactor(const Poco::Timespan& timeout); - /// Creates the SocketReactor, using the given timeout. - - virtual ~SocketReactor(); - /// Destroys the SocketReactor. - - void run(); - /// Runs the SocketReactor. The reactor will run - /// until stop() is called (in a separate thread). - - void stop(); - /// Stops the SocketReactor. - /// - /// The reactor will be stopped when the next event - /// (including a timeout event) occurs. - - void wakeUp(); - /// Wakes up idle reactor. - - void setTimeout(const Poco::Timespan& timeout); - /// Sets the timeout. - /// - /// If no other event occurs for the given timeout - /// interval, a timeout event is sent to all event listeners. - /// - /// The default timeout is 250 milliseconds; - /// - /// The timeout is passed to the Socket::select() - /// method. - - const Poco::Timespan& getTimeout() const; - /// Returns the timeout. - - void addEventHandler(const Socket& socket, const Poco::AbstractObserver& observer); - /// Registers an event handler with the SocketReactor. - /// - /// Usage: - /// Poco::Observer<MyEventHandler, SocketNotification> obs(*this, &MyEventHandler::handleMyEvent); - /// reactor.addEventHandler(obs); - - bool hasEventHandler(const Socket& socket, const Poco::AbstractObserver& observer); - /// Returns true if the observer is registered with SocketReactor for the given socket. - - void removeEventHandler(const Socket& socket, const Poco::AbstractObserver& observer); - /// Unregisters an event handler with the SocketReactor. - /// - /// Usage: - /// Poco::Observer<MyEventHandler, SocketNotification> obs(*this, &MyEventHandler::handleMyEvent); - /// reactor.removeEventHandler(obs); - -protected: - virtual void onTimeout(); - /// Called if the timeout expires and no other events are available. - /// - /// Can be overridden by subclasses. The default implementation - /// dispatches the TimeoutNotification and thus should be called by overriding - /// implementations. - - virtual void onIdle(); - /// Called if no sockets are available to call select() on. - /// - /// Can be overridden by subclasses. The default implementation - /// dispatches the IdleNotification and thus should be called by overriding - /// implementations. - - virtual void onShutdown(); - /// Called when the SocketReactor is about to terminate. - /// - /// Can be overridden by subclasses. The default implementation - /// dispatches the ShutdownNotification and thus should be called by overriding - /// implementations. - - virtual void onBusy(); - /// Called when the SocketReactor is busy and at least one notification - /// has been dispatched. - /// - /// Can be overridden by subclasses to perform additional - /// periodic tasks. The default implementation does nothing. - - void dispatch(const Socket& socket, SocketNotification* pNotification); - /// Dispatches the given notification to all observers - /// registered for the given socket. - - void dispatch(SocketNotification* pNotification); - /// Dispatches the given notification to all observers. - -private: - typedef Poco::AutoPtr<SocketNotifier> NotifierPtr; - typedef Poco::AutoPtr<SocketNotification> NotificationPtr; - typedef std::map<Socket, NotifierPtr> EventHandlerMap; - - void dispatch(NotifierPtr& pNotifier, SocketNotification* pNotification); - - enum - { - DEFAULT_TIMEOUT = 250000 - }; - - bool _stop; - Poco::Timespan _timeout; - EventHandlerMap _handlers; - NotificationPtr _pReadableNotification; - NotificationPtr _pWritableNotification; - NotificationPtr _pErrorNotification; - NotificationPtr _pTimeoutNotification; - NotificationPtr _pIdleNotification; - NotificationPtr _pShutdownNotification; - Poco::FastMutex _mutex; - Poco::Thread* _pThread; - - friend class SocketNotifier; -}; - - -} } // namespace Poco::Net - - -#endif // Net_SocketReactor_INCLUDED + /// The ReadableNotification will be dispatched if a socket becomes + /// readable. The WritableNotification will be dispatched if a socket + /// becomes writable. The ErrorNotification will be dispatched if + /// there is an error condition on a socket. + /// + /// If the timeout expires and no event has occurred, a + /// TimeoutNotification will be dispatched to all event handlers + /// registered for it. This is done in the onTimeout() method + /// which can be overridden by subclasses to perform custom + /// timeout processing. + /// + /// If there are no sockets for the SocketReactor to pass to + /// Socket::select(), an IdleNotification will be dispatched to + /// all event handlers registered for it. This is done in the + /// onIdle() method which can be overridden by subclasses + /// to perform custom idle processing. Since onIdle() will be + /// called repeatedly in a loop, it is recommended to do a + /// short sleep or yield in the event handler. + /// + /// Finally, when the SocketReactor is about to shut down (as a result + /// of stop() being called), it dispatches a ShutdownNotification + /// to all event handlers. This is done in the onShutdown() method + /// which can be overridded by subclasses to perform custom + /// shutdown processing. + /// + /// The SocketReactor is implemented so that it can + /// run in its own thread. It is also possible to run + /// multiple SocketReactors in parallel, as long as + /// they work on different sockets. + /// + /// It is safe to call addEventHandler() and removeEventHandler() + /// from another thread while the SocketReactor is running. Also, + /// it is safe to call addEventHandler() and removeEventHandler() + /// from event handlers. +{ +public: + SocketReactor(); + /// Creates the SocketReactor. + + explicit SocketReactor(const Poco::Timespan& timeout); + /// Creates the SocketReactor, using the given timeout. + + virtual ~SocketReactor(); + /// Destroys the SocketReactor. + + void run(); + /// Runs the SocketReactor. The reactor will run + /// until stop() is called (in a separate thread). + + void stop(); + /// Stops the SocketReactor. + /// + /// The reactor will be stopped when the next event + /// (including a timeout event) occurs. + + void wakeUp(); + /// Wakes up idle reactor. + + void setTimeout(const Poco::Timespan& timeout); + /// Sets the timeout. + /// + /// If no other event occurs for the given timeout + /// interval, a timeout event is sent to all event listeners. + /// + /// The default timeout is 250 milliseconds; + /// + /// The timeout is passed to the Socket::select() + /// method. + + const Poco::Timespan& getTimeout() const; + /// Returns the timeout. + + void addEventHandler(const Socket& socket, const Poco::AbstractObserver& observer); + /// Registers an event handler with the SocketReactor. + /// + /// Usage: + /// Poco::Observer<MyEventHandler, SocketNotification> obs(*this, &MyEventHandler::handleMyEvent); + /// reactor.addEventHandler(obs); + + bool hasEventHandler(const Socket& socket, const Poco::AbstractObserver& observer); + /// Returns true if the observer is registered with SocketReactor for the given socket. + + void removeEventHandler(const Socket& socket, const Poco::AbstractObserver& observer); + /// Unregisters an event handler with the SocketReactor. + /// + /// Usage: + /// Poco::Observer<MyEventHandler, SocketNotification> obs(*this, &MyEventHandler::handleMyEvent); + /// reactor.removeEventHandler(obs); + +protected: + virtual void onTimeout(); + /// Called if the timeout expires and no other events are available. + /// + /// Can be overridden by subclasses. The default implementation + /// dispatches the TimeoutNotification and thus should be called by overriding + /// implementations. + + virtual void onIdle(); + /// Called if no sockets are available to call select() on. + /// + /// Can be overridden by subclasses. The default implementation + /// dispatches the IdleNotification and thus should be called by overriding + /// implementations. + + virtual void onShutdown(); + /// Called when the SocketReactor is about to terminate. + /// + /// Can be overridden by subclasses. The default implementation + /// dispatches the ShutdownNotification and thus should be called by overriding + /// implementations. + + virtual void onBusy(); + /// Called when the SocketReactor is busy and at least one notification + /// has been dispatched. + /// + /// Can be overridden by subclasses to perform additional + /// periodic tasks. The default implementation does nothing. + + void dispatch(const Socket& socket, SocketNotification* pNotification); + /// Dispatches the given notification to all observers + /// registered for the given socket. + + void dispatch(SocketNotification* pNotification); + /// Dispatches the given notification to all observers. + +private: + typedef Poco::AutoPtr<SocketNotifier> NotifierPtr; + typedef Poco::AutoPtr<SocketNotification> NotificationPtr; + typedef std::map<Socket, NotifierPtr> EventHandlerMap; + + void dispatch(NotifierPtr& pNotifier, SocketNotification* pNotification); + + enum + { + DEFAULT_TIMEOUT = 250000 + }; + + bool _stop; + Poco::Timespan _timeout; + EventHandlerMap _handlers; + NotificationPtr _pReadableNotification; + NotificationPtr _pWritableNotification; + NotificationPtr _pErrorNotification; + NotificationPtr _pTimeoutNotification; + NotificationPtr _pIdleNotification; + NotificationPtr _pShutdownNotification; + Poco::FastMutex _mutex; + Poco::Thread* _pThread; + + friend class SocketNotifier; +}; + + +} } // namespace Poco::Net + + +#endif // Net_SocketReactor_INCLUDED diff --git a/contrib/libs/poco/Net/include/Poco/Net/SocketStream.h b/contrib/libs/poco/Net/include/Poco/Net/SocketStream.h index ba626cdbc3..5a9a62c0ef 100644 --- a/contrib/libs/poco/Net/include/Poco/Net/SocketStream.h +++ b/contrib/libs/poco/Net/include/Poco/Net/SocketStream.h @@ -1,177 +1,177 @@ -// -// SocketStream.h -// -// Library: Net -// Package: Sockets -// Module: SocketStream -// -// Definition of the SocketStream class. -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Net_SocketStream_INCLUDED -#define Net_SocketStream_INCLUDED - - -#include "Poco/Net/Net.h" -#include "Poco/Net/StreamSocket.h" -#include "Poco/BufferedBidirectionalStreamBuf.h" -#include <istream> -#include <ostream> - - -namespace Poco { -namespace Net { - - -class StreamSocketImpl; - - -class Net_API SocketStreamBuf: public Poco::BufferedBidirectionalStreamBuf - /// This is the streambuf class used for reading from and writing to a socket. -{ -public: - SocketStreamBuf(const Socket& socket); - /// Creates a SocketStreamBuf with the given socket. - /// - /// The socket's SocketImpl must be a StreamSocketImpl, - /// otherwise an InvalidArgumentException is thrown. - - ~SocketStreamBuf(); - /// Destroys the SocketStreamBuf. - - StreamSocketImpl* socketImpl() const; - /// Returns the internal SocketImpl. - -protected: - int readFromDevice(char* buffer, std::streamsize length); - int writeToDevice(const char* buffer, std::streamsize length); - -private: - enum - { - STREAM_BUFFER_SIZE = 1024 - }; - - StreamSocketImpl* _pImpl; -}; - - -class Net_API SocketIOS: public virtual std::ios - /// The base class for SocketStream, SocketInputStream and - /// SocketOutputStream. - /// - /// This class is needed to ensure the correct initialization - /// order of the stream buffer and base classes. -{ -public: - SocketIOS(const Socket& socket); - /// Creates the SocketIOS with the given socket. - /// - /// The socket's SocketImpl must be a StreamSocketImpl, - /// otherwise an InvalidArgumentException is thrown. - - ~SocketIOS(); - /// Destroys the SocketIOS. - /// - /// Flushes the buffer, but does not close the socket. - - SocketStreamBuf* rdbuf(); - /// Returns a pointer to the internal SocketStreamBuf. - - void close(); - /// Flushes the stream and closes the socket. - - StreamSocket socket() const; - /// Returns the underlying socket. - -protected: - SocketStreamBuf _buf; -}; - - -class Net_API SocketOutputStream: public SocketIOS, public std::ostream - /// An output stream for writing to a socket. -{ -public: - explicit SocketOutputStream(const Socket& socket); - /// Creates the SocketOutputStream with the given socket. - /// - /// The socket's SocketImpl must be a StreamSocketImpl, - /// otherwise an InvalidArgumentException is thrown. - - ~SocketOutputStream(); - /// Destroys the SocketOutputStream. - /// - /// Flushes the buffer, but does not close the socket. -}; - - -class Net_API SocketInputStream: public SocketIOS, public std::istream - /// An input stream for reading from a socket. - /// - /// When using formatted input from a SocketInputStream, - /// always ensure that a receive timeout is set for the - /// socket. Otherwise your program might unexpectedly - /// hang. - /// - /// However, using formatted input from a SocketInputStream - /// is not recommended, due to the read-ahead behavior of - /// istream with formatted reads. -{ -public: - explicit SocketInputStream(const Socket& socket); - /// Creates the SocketInputStream with the given socket. - /// - /// The socket's SocketImpl must be a StreamSocketImpl, - /// otherwise an InvalidArgumentException is thrown. - - ~SocketInputStream(); - /// Destroys the SocketInputStream. -}; - - -class Net_API SocketStream: public SocketIOS, public std::iostream - /// An bidirectional stream for reading from and writing to a socket. - /// - /// When using formatted input from a SocketStream, - /// always ensure that a receive timeout is set for the - /// socket. Otherwise your program might unexpectedly - /// hang. - /// - /// However, using formatted input from a SocketStream - /// is not recommended, due to the read-ahead behavior of - /// istream with formatted reads. -{ -public: - explicit SocketStream(const Socket& socket); - /// Creates the SocketStream with the given socket. - /// - /// The socket's SocketImpl must be a StreamSocketImpl, - /// otherwise an InvalidArgumentException is thrown. - - ~SocketStream(); - /// Destroys the SocketStream. - /// - /// Flushes the buffer, but does not close the socket. -}; - - -// -// inlines -// -inline StreamSocketImpl* SocketStreamBuf::socketImpl() const -{ - return _pImpl; -} - - -} } // namespace Poco::Net - - -#endif // Net_SocketStream_INCLUDED +// +// SocketStream.h +// +// Library: Net +// Package: Sockets +// Module: SocketStream +// +// Definition of the SocketStream class. +// +// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. +// and Contributors. +// +// SPDX-License-Identifier: BSL-1.0 +// + + +#ifndef Net_SocketStream_INCLUDED +#define Net_SocketStream_INCLUDED + + +#include "Poco/Net/Net.h" +#include "Poco/Net/StreamSocket.h" +#include "Poco/BufferedBidirectionalStreamBuf.h" +#include <istream> +#include <ostream> + + +namespace Poco { +namespace Net { + + +class StreamSocketImpl; + + +class Net_API SocketStreamBuf: public Poco::BufferedBidirectionalStreamBuf + /// This is the streambuf class used for reading from and writing to a socket. +{ +public: + SocketStreamBuf(const Socket& socket); + /// Creates a SocketStreamBuf with the given socket. + /// + /// The socket's SocketImpl must be a StreamSocketImpl, + /// otherwise an InvalidArgumentException is thrown. + + ~SocketStreamBuf(); + /// Destroys the SocketStreamBuf. + + StreamSocketImpl* socketImpl() const; + /// Returns the internal SocketImpl. + +protected: + int readFromDevice(char* buffer, std::streamsize length); + int writeToDevice(const char* buffer, std::streamsize length); + +private: + enum + { + STREAM_BUFFER_SIZE = 1024 + }; + + StreamSocketImpl* _pImpl; +}; + + +class Net_API SocketIOS: public virtual std::ios + /// The base class for SocketStream, SocketInputStream and + /// SocketOutputStream. + /// + /// This class is needed to ensure the correct initialization + /// order of the stream buffer and base classes. +{ +public: + SocketIOS(const Socket& socket); + /// Creates the SocketIOS with the given socket. + /// + /// The socket's SocketImpl must be a StreamSocketImpl, + /// otherwise an InvalidArgumentException is thrown. + + ~SocketIOS(); + /// Destroys the SocketIOS. + /// + /// Flushes the buffer, but does not close the socket. + + SocketStreamBuf* rdbuf(); + /// Returns a pointer to the internal SocketStreamBuf. + + void close(); + /// Flushes the stream and closes the socket. + + StreamSocket socket() const; + /// Returns the underlying socket. + +protected: + SocketStreamBuf _buf; +}; + + +class Net_API SocketOutputStream: public SocketIOS, public std::ostream + /// An output stream for writing to a socket. +{ +public: + explicit SocketOutputStream(const Socket& socket); + /// Creates the SocketOutputStream with the given socket. + /// + /// The socket's SocketImpl must be a StreamSocketImpl, + /// otherwise an InvalidArgumentException is thrown. + + ~SocketOutputStream(); + /// Destroys the SocketOutputStream. + /// + /// Flushes the buffer, but does not close the socket. +}; + + +class Net_API SocketInputStream: public SocketIOS, public std::istream + /// An input stream for reading from a socket. + /// + /// When using formatted input from a SocketInputStream, + /// always ensure that a receive timeout is set for the + /// socket. Otherwise your program might unexpectedly + /// hang. + /// + /// However, using formatted input from a SocketInputStream + /// is not recommended, due to the read-ahead behavior of + /// istream with formatted reads. +{ +public: + explicit SocketInputStream(const Socket& socket); + /// Creates the SocketInputStream with the given socket. + /// + /// The socket's SocketImpl must be a StreamSocketImpl, + /// otherwise an InvalidArgumentException is thrown. + + ~SocketInputStream(); + /// Destroys the SocketInputStream. +}; + + +class Net_API SocketStream: public SocketIOS, public std::iostream + /// An bidirectional stream for reading from and writing to a socket. + /// + /// When using formatted input from a SocketStream, + /// always ensure that a receive timeout is set for the + /// socket. Otherwise your program might unexpectedly + /// hang. + /// + /// However, using formatted input from a SocketStream + /// is not recommended, due to the read-ahead behavior of + /// istream with formatted reads. +{ +public: + explicit SocketStream(const Socket& socket); + /// Creates the SocketStream with the given socket. + /// + /// The socket's SocketImpl must be a StreamSocketImpl, + /// otherwise an InvalidArgumentException is thrown. + + ~SocketStream(); + /// Destroys the SocketStream. + /// + /// Flushes the buffer, but does not close the socket. +}; + + +// +// inlines +// +inline StreamSocketImpl* SocketStreamBuf::socketImpl() const +{ + return _pImpl; +} + + +} } // namespace Poco::Net + + +#endif // Net_SocketStream_INCLUDED diff --git a/contrib/libs/poco/Net/include/Poco/Net/StreamSocket.h b/contrib/libs/poco/Net/include/Poco/Net/StreamSocket.h index 8d36cd79a5..46374d85dc 100644 --- a/contrib/libs/poco/Net/include/Poco/Net/StreamSocket.h +++ b/contrib/libs/poco/Net/include/Poco/Net/StreamSocket.h @@ -1,180 +1,180 @@ -// -// StreamSocket.h -// -// Library: Net -// Package: Sockets -// Module: StreamSocket -// -// Definition of the StreamSocket class. -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Net_StreamSocket_INCLUDED -#define Net_StreamSocket_INCLUDED - - -#include "Poco/Net/Net.h" -#include "Poco/Net/Socket.h" -#include "Poco/FIFOBuffer.h" - - -namespace Poco { -namespace Net { - - -class StreamSocketImpl; - - -class Net_API StreamSocket: public Socket - /// This class provides an interface to a - /// TCP stream socket. -{ -public: - StreamSocket(); - /// Creates an unconnected stream socket. - /// - /// Before sending or receiving data, the socket - /// must be connected with a call to connect(). - - explicit StreamSocket(const SocketAddress& address); - /// Creates a stream socket and connects it to - /// the socket specified by address. - - explicit StreamSocket(SocketAddress::Family family); - /// Creates an unconnected stream socket - /// for the given address family. - /// - /// This is useful if certain socket options - /// (like send and receive buffer) sizes, that must - /// be set before connecting the socket, will be - /// set later on. - - StreamSocket(const Socket& socket); - /// Creates the StreamSocket with the SocketImpl - /// from another socket. The SocketImpl must be - /// a StreamSocketImpl, otherwise an InvalidArgumentException - /// will be thrown. - - virtual ~StreamSocket(); - /// Destroys the StreamSocket. - - StreamSocket& operator = (const Socket& socket); - /// Assignment operator. - /// - /// Releases the socket's SocketImpl and - /// attaches the SocketImpl from the other socket and - /// increments the reference count of the SocketImpl. - - void connect(const SocketAddress& address); - /// Initializes the socket and establishes a connection to - /// the TCP server at the given address. - /// - /// Can also be used for UDP sockets. In this case, no - /// connection is established. Instead, incoming and outgoing - /// packets are restricted to the specified address. - - void connect(const SocketAddress& address, const Poco::Timespan& timeout); - /// Initializes the socket, sets the socket timeout and - /// establishes a connection to the TCP server at the given address. - - void connectNB(const SocketAddress& address); - /// Initializes the socket and establishes a connection to - /// the TCP server at the given address. Prior to opening the - /// connection the socket is set to nonblocking mode. - - void shutdownReceive(); - /// Shuts down the receiving part of the socket connection. - - void shutdownSend(); - /// Shuts down the sending part of the socket connection. - - void shutdown(); - /// Shuts down both the receiving and the sending part - /// of the socket connection. - - int sendBytes(const void* buffer, int length, int flags = 0); - /// Sends the contents of the given buffer through - /// the socket. - /// - /// Returns the number of bytes sent, which may be - /// less than the number of bytes specified. - /// - /// Certain socket implementations may also return a negative - /// value denoting a certain condition. - - int sendBytes(Poco::FIFOBuffer& buffer); - /// Sends the contents of the given buffer through - /// the socket. FIFOBuffer has writable/readable transition - /// notifications which may be enabled to notify the caller when - /// the buffer transitions between empty, partially full and - /// full states. - /// - /// Returns the number of bytes sent, which may be - /// less than the number of bytes specified. - /// - /// Certain socket implementations may also return a negative - /// value denoting a certain condition. - - int receiveBytes(void* buffer, int length, int flags = 0); - /// Receives data from the socket and stores it - /// in buffer. Up to length bytes are received. - /// - /// Returns the number of bytes received. - /// A return value of 0 means a graceful shutdown - /// of the connection from the peer. - /// - /// Throws a TimeoutException if a receive timeout has - /// been set and nothing is received within that interval. - /// Throws a NetException (or a subclass) in case of other errors. - - int receiveBytes(Poco::FIFOBuffer& buffer); - /// Receives data from the socket and stores it - /// in buffer. Up to length bytes are received. FIFOBuffer has - /// writable/readable transition notifications which may be enabled - /// to notify the caller when the buffer transitions between empty, - /// partially full and full states. - /// - /// Returns the number of bytes received. - /// A return value of 0 means a graceful shutdown - /// of the connection from the peer. - /// - /// Throws a TimeoutException if a receive timeout has - /// been set and nothing is received within that interval. - /// Throws a NetException (or a subclass) in case of other errors. - - void sendUrgent(unsigned char data); - /// Sends one byte of urgent data through - /// the socket. - /// - /// The data is sent with the MSG_OOB flag. - /// - /// The preferred way for a socket to receive urgent data - /// is by enabling the SO_OOBINLINE option. - - StreamSocket(SocketImpl* pImpl); - /// Creates the Socket and attaches the given SocketImpl. - /// The socket takes ownership of the SocketImpl. - /// - /// The SocketImpl must be a StreamSocketImpl, otherwise - /// an InvalidArgumentException will be thrown. - -private: - enum - { - BUFFER_SIZE = 1024 - }; - - friend class ServerSocket; - friend class SocketIOS; -}; - - -} } // namespace Poco::Net - - -#endif // Net_StreamSocket_INCLUDED +// +// StreamSocket.h +// +// Library: Net +// Package: Sockets +// Module: StreamSocket +// +// Definition of the StreamSocket class. +// +// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. +// and Contributors. +// +// SPDX-License-Identifier: BSL-1.0 +// + + +#ifndef Net_StreamSocket_INCLUDED +#define Net_StreamSocket_INCLUDED + + +#include "Poco/Net/Net.h" +#include "Poco/Net/Socket.h" +#include "Poco/FIFOBuffer.h" + + +namespace Poco { +namespace Net { + + +class StreamSocketImpl; + + +class Net_API StreamSocket: public Socket + /// This class provides an interface to a + /// TCP stream socket. +{ +public: + StreamSocket(); + /// Creates an unconnected stream socket. + /// + /// Before sending or receiving data, the socket + /// must be connected with a call to connect(). + + explicit StreamSocket(const SocketAddress& address); + /// Creates a stream socket and connects it to + /// the socket specified by address. + + explicit StreamSocket(SocketAddress::Family family); + /// Creates an unconnected stream socket + /// for the given address family. + /// + /// This is useful if certain socket options + /// (like send and receive buffer) sizes, that must + /// be set before connecting the socket, will be + /// set later on. + + StreamSocket(const Socket& socket); + /// Creates the StreamSocket with the SocketImpl + /// from another socket. The SocketImpl must be + /// a StreamSocketImpl, otherwise an InvalidArgumentException + /// will be thrown. + + virtual ~StreamSocket(); + /// Destroys the StreamSocket. + + StreamSocket& operator = (const Socket& socket); + /// Assignment operator. + /// + /// Releases the socket's SocketImpl and + /// attaches the SocketImpl from the other socket and + /// increments the reference count of the SocketImpl. + + void connect(const SocketAddress& address); + /// Initializes the socket and establishes a connection to + /// the TCP server at the given address. + /// + /// Can also be used for UDP sockets. In this case, no + /// connection is established. Instead, incoming and outgoing + /// packets are restricted to the specified address. + + void connect(const SocketAddress& address, const Poco::Timespan& timeout); + /// Initializes the socket, sets the socket timeout and + /// establishes a connection to the TCP server at the given address. + + void connectNB(const SocketAddress& address); + /// Initializes the socket and establishes a connection to + /// the TCP server at the given address. Prior to opening the + /// connection the socket is set to nonblocking mode. + + void shutdownReceive(); + /// Shuts down the receiving part of the socket connection. + + void shutdownSend(); + /// Shuts down the sending part of the socket connection. + + void shutdown(); + /// Shuts down both the receiving and the sending part + /// of the socket connection. + + int sendBytes(const void* buffer, int length, int flags = 0); + /// Sends the contents of the given buffer through + /// the socket. + /// + /// Returns the number of bytes sent, which may be + /// less than the number of bytes specified. + /// + /// Certain socket implementations may also return a negative + /// value denoting a certain condition. + + int sendBytes(Poco::FIFOBuffer& buffer); + /// Sends the contents of the given buffer through + /// the socket. FIFOBuffer has writable/readable transition + /// notifications which may be enabled to notify the caller when + /// the buffer transitions between empty, partially full and + /// full states. + /// + /// Returns the number of bytes sent, which may be + /// less than the number of bytes specified. + /// + /// Certain socket implementations may also return a negative + /// value denoting a certain condition. + + int receiveBytes(void* buffer, int length, int flags = 0); + /// Receives data from the socket and stores it + /// in buffer. Up to length bytes are received. + /// + /// Returns the number of bytes received. + /// A return value of 0 means a graceful shutdown + /// of the connection from the peer. + /// + /// Throws a TimeoutException if a receive timeout has + /// been set and nothing is received within that interval. + /// Throws a NetException (or a subclass) in case of other errors. + + int receiveBytes(Poco::FIFOBuffer& buffer); + /// Receives data from the socket and stores it + /// in buffer. Up to length bytes are received. FIFOBuffer has + /// writable/readable transition notifications which may be enabled + /// to notify the caller when the buffer transitions between empty, + /// partially full and full states. + /// + /// Returns the number of bytes received. + /// A return value of 0 means a graceful shutdown + /// of the connection from the peer. + /// + /// Throws a TimeoutException if a receive timeout has + /// been set and nothing is received within that interval. + /// Throws a NetException (or a subclass) in case of other errors. + + void sendUrgent(unsigned char data); + /// Sends one byte of urgent data through + /// the socket. + /// + /// The data is sent with the MSG_OOB flag. + /// + /// The preferred way for a socket to receive urgent data + /// is by enabling the SO_OOBINLINE option. + + StreamSocket(SocketImpl* pImpl); + /// Creates the Socket and attaches the given SocketImpl. + /// The socket takes ownership of the SocketImpl. + /// + /// The SocketImpl must be a StreamSocketImpl, otherwise + /// an InvalidArgumentException will be thrown. + +private: + enum + { + BUFFER_SIZE = 1024 + }; + + friend class ServerSocket; + friend class SocketIOS; +}; + + +} } // namespace Poco::Net + + +#endif // Net_StreamSocket_INCLUDED diff --git a/contrib/libs/poco/Net/include/Poco/Net/StreamSocketImpl.h b/contrib/libs/poco/Net/include/Poco/Net/StreamSocketImpl.h index 879c0f5b93..eb4196983c 100644 --- a/contrib/libs/poco/Net/include/Poco/Net/StreamSocketImpl.h +++ b/contrib/libs/poco/Net/include/Poco/Net/StreamSocketImpl.h @@ -1,59 +1,59 @@ -// -// StreamSocketImpl.h -// -// Library: Net -// Package: Sockets -// Module: StreamSocketImpl -// -// Definition of the StreamSocketImpl class. -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Net_StreamSocketImpl_INCLUDED -#define Net_StreamSocketImpl_INCLUDED - - -#include "Poco/Net/Net.h" -#include "Poco/Net/SocketImpl.h" - - -namespace Poco { -namespace Net { - - -class Net_API StreamSocketImpl: public SocketImpl - /// This class implements a TCP socket. -{ -public: - StreamSocketImpl(); - /// Creates a StreamSocketImpl. - - explicit StreamSocketImpl(SocketAddress::Family addressFamily); - /// Creates a SocketImpl, with the underlying - /// socket initialized for the given address family. - - StreamSocketImpl(poco_socket_t sockfd); - /// Creates a StreamSocketImpl using the given native socket. - - virtual int sendBytes(const void* buffer, int length, int flags = 0); - /// Ensures that all data in buffer is sent if the socket - /// is blocking. In case of a non-blocking socket, sends as - /// many bytes as possible. - /// - /// Returns the number of bytes sent. The return value may also be - /// negative to denote some special condition. - -protected: - virtual ~StreamSocketImpl(); -}; - - -} } // namespace Poco::Net - - -#endif // Net_StreamSocketImpl_INCLUDED +// +// StreamSocketImpl.h +// +// Library: Net +// Package: Sockets +// Module: StreamSocketImpl +// +// Definition of the StreamSocketImpl class. +// +// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. +// and Contributors. +// +// SPDX-License-Identifier: BSL-1.0 +// + + +#ifndef Net_StreamSocketImpl_INCLUDED +#define Net_StreamSocketImpl_INCLUDED + + +#include "Poco/Net/Net.h" +#include "Poco/Net/SocketImpl.h" + + +namespace Poco { +namespace Net { + + +class Net_API StreamSocketImpl: public SocketImpl + /// This class implements a TCP socket. +{ +public: + StreamSocketImpl(); + /// Creates a StreamSocketImpl. + + explicit StreamSocketImpl(SocketAddress::Family addressFamily); + /// Creates a SocketImpl, with the underlying + /// socket initialized for the given address family. + + StreamSocketImpl(poco_socket_t sockfd); + /// Creates a StreamSocketImpl using the given native socket. + + virtual int sendBytes(const void* buffer, int length, int flags = 0); + /// Ensures that all data in buffer is sent if the socket + /// is blocking. In case of a non-blocking socket, sends as + /// many bytes as possible. + /// + /// Returns the number of bytes sent. The return value may also be + /// negative to denote some special condition. + +protected: + virtual ~StreamSocketImpl(); +}; + + +} } // namespace Poco::Net + + +#endif // Net_StreamSocketImpl_INCLUDED diff --git a/contrib/libs/poco/Net/include/Poco/Net/StringPartSource.h b/contrib/libs/poco/Net/include/Poco/Net/StringPartSource.h index b559d5c291..8f2b478dc2 100644 --- a/contrib/libs/poco/Net/include/Poco/Net/StringPartSource.h +++ b/contrib/libs/poco/Net/include/Poco/Net/StringPartSource.h @@ -1,71 +1,71 @@ -// -// StringPartSource.h -// -// Library: Net -// Package: Messages -// Module: StringPartSource -// -// Definition of the StringPartSource class. -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Net_StringPartSource_INCLUDED -#define Net_StringPartSource_INCLUDED - - -#include "Poco/Net/Net.h" -#include "Poco/Net/PartSource.h" -#include <sstream> - - -namespace Poco { -namespace Net { - - -class Net_API StringPartSource: public PartSource - /// An implementation of PartSource for strings. -{ -public: - StringPartSource(const std::string& str); - /// Creates the StringPartSource for the given string. - /// - /// The MIME type is set to text/plain. - - StringPartSource(const std::string& str, const std::string& mediaType); - /// Creates the StringPartSource for the given - /// string and MIME type. - - StringPartSource(const std::string& str, const std::string& mediaType, const std::string& filename); - /// Creates the StringPartSource for the given - /// string, MIME type and filename. - - ~StringPartSource(); - /// Destroys the StringPartSource. - - std::istream& stream(); - /// Returns a string input stream for the string. - - const std::string& filename() const; - /// Returns the filename portion of the path. - - std::streamsize getContentLength() const; - /// Returns the string size. - -private: - std::istringstream _istr; - std::string _filename; - - StringPartSource(const StringPartSource&); - StringPartSource& operator = (const StringPartSource&); -}; - - -} } // namespace Poco::Net - - -#endif // Net_StringPartSource_INCLUDED +// +// StringPartSource.h +// +// Library: Net +// Package: Messages +// Module: StringPartSource +// +// Definition of the StringPartSource class. +// +// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. +// and Contributors. +// +// SPDX-License-Identifier: BSL-1.0 +// + + +#ifndef Net_StringPartSource_INCLUDED +#define Net_StringPartSource_INCLUDED + + +#include "Poco/Net/Net.h" +#include "Poco/Net/PartSource.h" +#include <sstream> + + +namespace Poco { +namespace Net { + + +class Net_API StringPartSource: public PartSource + /// An implementation of PartSource for strings. +{ +public: + StringPartSource(const std::string& str); + /// Creates the StringPartSource for the given string. + /// + /// The MIME type is set to text/plain. + + StringPartSource(const std::string& str, const std::string& mediaType); + /// Creates the StringPartSource for the given + /// string and MIME type. + + StringPartSource(const std::string& str, const std::string& mediaType, const std::string& filename); + /// Creates the StringPartSource for the given + /// string, MIME type and filename. + + ~StringPartSource(); + /// Destroys the StringPartSource. + + std::istream& stream(); + /// Returns a string input stream for the string. + + const std::string& filename() const; + /// Returns the filename portion of the path. + + std::streamsize getContentLength() const; + /// Returns the string size. + +private: + std::istringstream _istr; + std::string _filename; + + StringPartSource(const StringPartSource&); + StringPartSource& operator = (const StringPartSource&); +}; + + +} } // namespace Poco::Net + + +#endif // Net_StringPartSource_INCLUDED diff --git a/contrib/libs/poco/Net/include/Poco/Net/TCPServer.h b/contrib/libs/poco/Net/include/Poco/Net/TCPServer.h index 69da1c2af7..1277475a11 100644 --- a/contrib/libs/poco/Net/include/Poco/Net/TCPServer.h +++ b/contrib/libs/poco/Net/include/Poco/Net/TCPServer.h @@ -1,260 +1,260 @@ -// -// TCPServer.h -// -// Library: Net -// Package: TCPServer -// Module: TCPServer -// -// Definition of the TCPServer class. -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Net_TCPServer_INCLUDED -#define Net_TCPServer_INCLUDED - - -#include "Poco/Net/Net.h" -#include "Poco/Net/ServerSocket.h" -#include "Poco/Net/TCPServerConnectionFactory.h" -#include "Poco/Net/TCPServerParams.h" -#include "Poco/RefCountedObject.h" -#include "Poco/AutoPtr.h" -#include "Poco/Runnable.h" -#include "Poco/Thread.h" -#include "Poco/ThreadPool.h" - -#include <atomic> - - -namespace Poco { -namespace Net { - - -class TCPServerDispatcher; -class StreamSocket; - - -class Net_API TCPServerConnectionFilter: public Poco::RefCountedObject - /// A TCPServerConnectionFilter can be used to reject incoming connections - /// before passing them on to the TCPServerDispatcher and - /// starting a thread to handle them. - /// - /// An example use case is white-list or black-list IP address filtering. - /// - /// Subclasses must override the accept() method. -{ -public: - typedef Poco::AutoPtr<TCPServerConnectionFilter> Ptr; - - virtual bool accept(const StreamSocket& socket) = 0; - /// Returns true if the given StreamSocket connection should - /// be handled, and passed on to the TCPServerDispatcher. - /// - /// Returns false if the socket should be closed immediately. - /// - /// The socket can be prevented from being closed immediately - /// if false is returned by creating a copy of the socket. - /// This can be used to handle certain socket connections in - /// a special way, outside the TCPServer framework. - -protected: - virtual ~TCPServerConnectionFilter(); -}; - - -class Net_API TCPServer: public Poco::Runnable - /// This class implements a multithreaded TCP server. - /// - /// The server uses a ServerSocket to listen for incoming - /// connections. The ServerSocket must have been bound to - /// an address before it is passed to the TCPServer constructor. - /// Additionally, the ServerSocket must be put into listening - /// state before the TCPServer is started by calling the start() - /// method. - /// - /// The server uses a thread pool to assign threads to incoming - /// connections. Before incoming connections are assigned to - /// a connection thread, they are put into a queue. - /// Connection threads fetch new connections from the queue as soon - /// as they become free. Thus, a connection thread may serve more - /// than one connection. - /// - /// As soon as a connection thread fetches the next connection from - /// the queue, it creates a TCPServerConnection object for it - /// (using the TCPServerConnectionFactory passed to the constructor) - /// and calls the TCPServerConnection's start() method. When the - /// start() method returns, the connection object is deleted. - /// - /// The number of connection threads is adjusted dynamically, depending - /// on the number of connections waiting to be served. - /// - /// It is possible to specify a maximum number of queued connections. - /// This prevents the connection queue from overflowing in the - /// case of an extreme server load. In such a case, connections that - /// cannot be queued are silently and immediately closed. - /// - /// TCPServer uses a separate thread to accept incoming connections. - /// Thus, the call to start() returns immediately, and the server - /// continues to run in the background. - /// - /// To stop the server from accepting new connections, call stop(). - /// - /// After calling stop(), no new connections will be accepted and - /// all queued connections will be discarded. - /// Already served connections, however, will continue being served. -{ -public: - TCPServer(TCPServerConnectionFactory::Ptr pFactory, Poco::UInt16 portNumber = 0, TCPServerParams::Ptr pParams = 0); - /// Creates the TCPServer, with ServerSocket listening on the given port. - /// Default port is zero, allowing any available port. The port number - /// can be queried through TCPServer::port() member. - /// - /// The server takes ownership of the TCPServerConnectionFactory - /// and deletes it when it's no longer needed. - /// - /// The server also takes ownership of the TCPServerParams object. - /// If no TCPServerParams object is given, the server's TCPServerDispatcher - /// creates its own one. - /// - /// New threads are taken from the default thread pool. - - TCPServer(TCPServerConnectionFactory::Ptr pFactory, const ServerSocket& socket, TCPServerParams::Ptr pParams = 0); - /// Creates the TCPServer, using the given ServerSocket. - /// - /// The server takes ownership of the TCPServerConnectionFactory - /// and deletes it when it's no longer needed. - /// - /// The server also takes ownership of the TCPServerParams object. - /// If no TCPServerParams object is given, the server's TCPServerDispatcher - /// creates its own one. - /// - /// New threads are taken from the default thread pool. - - TCPServer(TCPServerConnectionFactory::Ptr pFactory, Poco::ThreadPool& threadPool, const ServerSocket& socket, TCPServerParams::Ptr pParams = 0); - /// Creates the TCPServer, using the given ServerSocket. - /// - /// The server takes ownership of the TCPServerConnectionFactory - /// and deletes it when it's no longer needed. - /// - /// The server also takes ownership of the TCPServerParams object. - /// If no TCPServerParams object is given, the server's TCPServerDispatcher - /// creates its own one. - /// - /// New threads are taken from the given thread pool. - - virtual ~TCPServer(); - /// Destroys the TCPServer and its TCPServerConnectionFactory. - - const TCPServerParams& params() const; - /// Returns a const reference to the TCPServerParam object - /// used by the server's TCPServerDispatcher. - - void start(); - /// Starts the server. A new thread will be - /// created that waits for and accepts incoming - /// connections. - /// - /// Before start() is called, the ServerSocket passed to - /// TCPServer must have been bound and put into listening state. - - void stop(); - /// Stops the server. - /// - /// No new connections will be accepted. - /// Already handled connections will continue to be served. - /// - /// Once the server has been stopped, it cannot be restarted. - - int currentThreads() const; - /// Returns the number of currently used connection threads. - - int maxThreads() const; - /// Returns the maximum number of threads available. - - int totalConnections() const; - /// Returns the total number of handled connections. - - int currentConnections() const; - /// Returns the number of currently handled connections. - - int maxConcurrentConnections() const; - /// Returns the maximum number of concurrently handled connections. - - int queuedConnections() const; - /// Returns the number of queued connections. - - int refusedConnections() const; - /// Returns the number of refused connections. - - const ServerSocket& socket() const; - /// Returns the underlying server socket. - - Poco::UInt16 port() const; - /// Returns the port the server socket listens on. - - void setConnectionFilter(const TCPServerConnectionFilter::Ptr& pFilter); - /// Sets a TCPServerConnectionFilter. Can also be used to remove - /// a filter by passing a null pointer. - /// - /// To avoid a potential race condition, the filter must - /// be set before the TCPServer is started. Trying to set - /// the filter after start() has been called will trigger - /// an assertion. - - TCPServerConnectionFilter::Ptr getConnectionFilter() const; - /// Returns the TCPServerConnectionFilter set with setConnectionFilter(), - /// or null pointer if no filter has been set. - -protected: - void run(); - /// Runs the server. The server will run until - /// the stop() method is called, or the server - /// object is destroyed, which implicitly calls - /// the stop() method. - - static std::string threadName(const ServerSocket& socket); - /// Returns a thread name for the server thread. - -private: - TCPServer(); - TCPServer(const TCPServer&); - TCPServer& operator = (const TCPServer&); - - ServerSocket _socket; - TCPServerDispatcher* _pDispatcher; - TCPServerConnectionFilter::Ptr _pConnectionFilter; - Poco::Thread _thread; - std::atomic<bool> _stopped; -}; - - -// -// inlines -// -inline const ServerSocket& TCPServer::socket() const -{ - return _socket; -} - - -inline Poco::UInt16 TCPServer::port() const -{ - return _socket.address().port(); -} - - -inline TCPServerConnectionFilter::Ptr TCPServer::getConnectionFilter() const -{ - return _pConnectionFilter; -} - - -} } // namespace Poco::Net - - -#endif // Net_TCPServer_INCLUDED +// +// TCPServer.h +// +// Library: Net +// Package: TCPServer +// Module: TCPServer +// +// Definition of the TCPServer class. +// +// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. +// and Contributors. +// +// SPDX-License-Identifier: BSL-1.0 +// + + +#ifndef Net_TCPServer_INCLUDED +#define Net_TCPServer_INCLUDED + + +#include "Poco/Net/Net.h" +#include "Poco/Net/ServerSocket.h" +#include "Poco/Net/TCPServerConnectionFactory.h" +#include "Poco/Net/TCPServerParams.h" +#include "Poco/RefCountedObject.h" +#include "Poco/AutoPtr.h" +#include "Poco/Runnable.h" +#include "Poco/Thread.h" +#include "Poco/ThreadPool.h" + +#include <atomic> + + +namespace Poco { +namespace Net { + + +class TCPServerDispatcher; +class StreamSocket; + + +class Net_API TCPServerConnectionFilter: public Poco::RefCountedObject + /// A TCPServerConnectionFilter can be used to reject incoming connections + /// before passing them on to the TCPServerDispatcher and + /// starting a thread to handle them. + /// + /// An example use case is white-list or black-list IP address filtering. + /// + /// Subclasses must override the accept() method. +{ +public: + typedef Poco::AutoPtr<TCPServerConnectionFilter> Ptr; + + virtual bool accept(const StreamSocket& socket) = 0; + /// Returns true if the given StreamSocket connection should + /// be handled, and passed on to the TCPServerDispatcher. + /// + /// Returns false if the socket should be closed immediately. + /// + /// The socket can be prevented from being closed immediately + /// if false is returned by creating a copy of the socket. + /// This can be used to handle certain socket connections in + /// a special way, outside the TCPServer framework. + +protected: + virtual ~TCPServerConnectionFilter(); +}; + + +class Net_API TCPServer: public Poco::Runnable + /// This class implements a multithreaded TCP server. + /// + /// The server uses a ServerSocket to listen for incoming + /// connections. The ServerSocket must have been bound to + /// an address before it is passed to the TCPServer constructor. + /// Additionally, the ServerSocket must be put into listening + /// state before the TCPServer is started by calling the start() + /// method. + /// + /// The server uses a thread pool to assign threads to incoming + /// connections. Before incoming connections are assigned to + /// a connection thread, they are put into a queue. + /// Connection threads fetch new connections from the queue as soon + /// as they become free. Thus, a connection thread may serve more + /// than one connection. + /// + /// As soon as a connection thread fetches the next connection from + /// the queue, it creates a TCPServerConnection object for it + /// (using the TCPServerConnectionFactory passed to the constructor) + /// and calls the TCPServerConnection's start() method. When the + /// start() method returns, the connection object is deleted. + /// + /// The number of connection threads is adjusted dynamically, depending + /// on the number of connections waiting to be served. + /// + /// It is possible to specify a maximum number of queued connections. + /// This prevents the connection queue from overflowing in the + /// case of an extreme server load. In such a case, connections that + /// cannot be queued are silently and immediately closed. + /// + /// TCPServer uses a separate thread to accept incoming connections. + /// Thus, the call to start() returns immediately, and the server + /// continues to run in the background. + /// + /// To stop the server from accepting new connections, call stop(). + /// + /// After calling stop(), no new connections will be accepted and + /// all queued connections will be discarded. + /// Already served connections, however, will continue being served. +{ +public: + TCPServer(TCPServerConnectionFactory::Ptr pFactory, Poco::UInt16 portNumber = 0, TCPServerParams::Ptr pParams = 0); + /// Creates the TCPServer, with ServerSocket listening on the given port. + /// Default port is zero, allowing any available port. The port number + /// can be queried through TCPServer::port() member. + /// + /// The server takes ownership of the TCPServerConnectionFactory + /// and deletes it when it's no longer needed. + /// + /// The server also takes ownership of the TCPServerParams object. + /// If no TCPServerParams object is given, the server's TCPServerDispatcher + /// creates its own one. + /// + /// New threads are taken from the default thread pool. + + TCPServer(TCPServerConnectionFactory::Ptr pFactory, const ServerSocket& socket, TCPServerParams::Ptr pParams = 0); + /// Creates the TCPServer, using the given ServerSocket. + /// + /// The server takes ownership of the TCPServerConnectionFactory + /// and deletes it when it's no longer needed. + /// + /// The server also takes ownership of the TCPServerParams object. + /// If no TCPServerParams object is given, the server's TCPServerDispatcher + /// creates its own one. + /// + /// New threads are taken from the default thread pool. + + TCPServer(TCPServerConnectionFactory::Ptr pFactory, Poco::ThreadPool& threadPool, const ServerSocket& socket, TCPServerParams::Ptr pParams = 0); + /// Creates the TCPServer, using the given ServerSocket. + /// + /// The server takes ownership of the TCPServerConnectionFactory + /// and deletes it when it's no longer needed. + /// + /// The server also takes ownership of the TCPServerParams object. + /// If no TCPServerParams object is given, the server's TCPServerDispatcher + /// creates its own one. + /// + /// New threads are taken from the given thread pool. + + virtual ~TCPServer(); + /// Destroys the TCPServer and its TCPServerConnectionFactory. + + const TCPServerParams& params() const; + /// Returns a const reference to the TCPServerParam object + /// used by the server's TCPServerDispatcher. + + void start(); + /// Starts the server. A new thread will be + /// created that waits for and accepts incoming + /// connections. + /// + /// Before start() is called, the ServerSocket passed to + /// TCPServer must have been bound and put into listening state. + + void stop(); + /// Stops the server. + /// + /// No new connections will be accepted. + /// Already handled connections will continue to be served. + /// + /// Once the server has been stopped, it cannot be restarted. + + int currentThreads() const; + /// Returns the number of currently used connection threads. + + int maxThreads() const; + /// Returns the maximum number of threads available. + + int totalConnections() const; + /// Returns the total number of handled connections. + + int currentConnections() const; + /// Returns the number of currently handled connections. + + int maxConcurrentConnections() const; + /// Returns the maximum number of concurrently handled connections. + + int queuedConnections() const; + /// Returns the number of queued connections. + + int refusedConnections() const; + /// Returns the number of refused connections. + + const ServerSocket& socket() const; + /// Returns the underlying server socket. + + Poco::UInt16 port() const; + /// Returns the port the server socket listens on. + + void setConnectionFilter(const TCPServerConnectionFilter::Ptr& pFilter); + /// Sets a TCPServerConnectionFilter. Can also be used to remove + /// a filter by passing a null pointer. + /// + /// To avoid a potential race condition, the filter must + /// be set before the TCPServer is started. Trying to set + /// the filter after start() has been called will trigger + /// an assertion. + + TCPServerConnectionFilter::Ptr getConnectionFilter() const; + /// Returns the TCPServerConnectionFilter set with setConnectionFilter(), + /// or null pointer if no filter has been set. + +protected: + void run(); + /// Runs the server. The server will run until + /// the stop() method is called, or the server + /// object is destroyed, which implicitly calls + /// the stop() method. + + static std::string threadName(const ServerSocket& socket); + /// Returns a thread name for the server thread. + +private: + TCPServer(); + TCPServer(const TCPServer&); + TCPServer& operator = (const TCPServer&); + + ServerSocket _socket; + TCPServerDispatcher* _pDispatcher; + TCPServerConnectionFilter::Ptr _pConnectionFilter; + Poco::Thread _thread; + std::atomic<bool> _stopped; +}; + + +// +// inlines +// +inline const ServerSocket& TCPServer::socket() const +{ + return _socket; +} + + +inline Poco::UInt16 TCPServer::port() const +{ + return _socket.address().port(); +} + + +inline TCPServerConnectionFilter::Ptr TCPServer::getConnectionFilter() const +{ + return _pConnectionFilter; +} + + +} } // namespace Poco::Net + + +#endif // Net_TCPServer_INCLUDED diff --git a/contrib/libs/poco/Net/include/Poco/Net/TCPServerConnection.h b/contrib/libs/poco/Net/include/Poco/Net/TCPServerConnection.h index d89dffbdbf..380edcc169 100644 --- a/contrib/libs/poco/Net/include/Poco/Net/TCPServerConnection.h +++ b/contrib/libs/poco/Net/include/Poco/Net/TCPServerConnection.h @@ -1,86 +1,86 @@ -// -// TCPServerConnection.h -// -// Library: Net -// Package: TCPServer -// Module: TCPServerConnection -// -// Definition of the TCPServerConnection class. -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Net_TCPServerConnection_INCLUDED -#define Net_TCPServerConnection_INCLUDED - - -#include "Poco/Net/Net.h" -#include "Poco/Net/StreamSocket.h" -#include "Poco/Runnable.h" - - -namespace Poco { -namespace Net { - - -class Net_API TCPServerConnection: public Poco::Runnable - /// The abstract base class for TCP server connections - /// created by TCPServer. - /// - /// Derived classes must override the run() method - /// (inherited from Runnable). Furthermore, a - /// TCPServerConnectionFactory must be provided for the subclass. - /// - /// The run() method must perform the complete handling - /// of the client connection. As soon as the run() method - /// returns, the server connection object is destroyed and - /// the connection is automatically closed. - /// - /// A new TCPServerConnection object will be created for - /// each new client connection that is accepted by - /// TCPServer. -{ -public: - TCPServerConnection(const StreamSocket& socket); - /// Creates the TCPServerConnection using the given - /// stream socket. - - virtual ~TCPServerConnection(); - /// Destroys the TCPServerConnection. - -protected: - StreamSocket& socket(); - /// Returns a reference to the underlying socket. - - void start(); - /// Calls run() and catches any exceptions that - /// might be thrown by run(). - -private: - TCPServerConnection(); - TCPServerConnection(const TCPServerConnection&); - TCPServerConnection& operator = (const TCPServerConnection&); - - StreamSocket _socket; - - friend class TCPServerDispatcher; -}; - - -// -// inlines -// -inline StreamSocket& TCPServerConnection::socket() -{ - return _socket; -} - - -} } // namespace Poco::Net - - -#endif // Net_TCPServerConnection_INCLUDED +// +// TCPServerConnection.h +// +// Library: Net +// Package: TCPServer +// Module: TCPServerConnection +// +// Definition of the TCPServerConnection class. +// +// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. +// and Contributors. +// +// SPDX-License-Identifier: BSL-1.0 +// + + +#ifndef Net_TCPServerConnection_INCLUDED +#define Net_TCPServerConnection_INCLUDED + + +#include "Poco/Net/Net.h" +#include "Poco/Net/StreamSocket.h" +#include "Poco/Runnable.h" + + +namespace Poco { +namespace Net { + + +class Net_API TCPServerConnection: public Poco::Runnable + /// The abstract base class for TCP server connections + /// created by TCPServer. + /// + /// Derived classes must override the run() method + /// (inherited from Runnable). Furthermore, a + /// TCPServerConnectionFactory must be provided for the subclass. + /// + /// The run() method must perform the complete handling + /// of the client connection. As soon as the run() method + /// returns, the server connection object is destroyed and + /// the connection is automatically closed. + /// + /// A new TCPServerConnection object will be created for + /// each new client connection that is accepted by + /// TCPServer. +{ +public: + TCPServerConnection(const StreamSocket& socket); + /// Creates the TCPServerConnection using the given + /// stream socket. + + virtual ~TCPServerConnection(); + /// Destroys the TCPServerConnection. + +protected: + StreamSocket& socket(); + /// Returns a reference to the underlying socket. + + void start(); + /// Calls run() and catches any exceptions that + /// might be thrown by run(). + +private: + TCPServerConnection(); + TCPServerConnection(const TCPServerConnection&); + TCPServerConnection& operator = (const TCPServerConnection&); + + StreamSocket _socket; + + friend class TCPServerDispatcher; +}; + + +// +// inlines +// +inline StreamSocket& TCPServerConnection::socket() +{ + return _socket; +} + + +} } // namespace Poco::Net + + +#endif // Net_TCPServerConnection_INCLUDED diff --git a/contrib/libs/poco/Net/include/Poco/Net/TCPServerConnectionFactory.h b/contrib/libs/poco/Net/include/Poco/Net/TCPServerConnectionFactory.h index 36c52b3d57..8fc4d6b4d0 100644 --- a/contrib/libs/poco/Net/include/Poco/Net/TCPServerConnectionFactory.h +++ b/contrib/libs/poco/Net/include/Poco/Net/TCPServerConnectionFactory.h @@ -1,89 +1,89 @@ -// -// TCPServerConnectionFactory.h -// -// Library: Net -// Package: TCPServer -// Module: TCPServerConnectionFactory -// -// Definition of the TCPServerConnectionFactory class. -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Net_TCPServerConnectionFactory_INCLUDED -#define Net_TCPServerConnectionFactory_INCLUDED - - -#include "Poco/Net/Net.h" -#include "Poco/Net/TCPServerConnection.h" -#include "Poco/SharedPtr.h" - - -namespace Poco { -namespace Net { - - -class Net_API TCPServerConnectionFactory - /// A factory for TCPServerConnection objects. - /// - /// The TCPServer class uses a TCPServerConnectionFactory - /// to create a connection object for each new connection - /// it accepts. - /// - /// Subclasses must override the createConnection() - /// method. - /// - /// The TCPServerConnectionFactoryImpl template class - /// can be used to automatically instantiate a - /// TCPServerConnectionFactory for a given subclass - /// of TCPServerConnection. -{ -public: - typedef Poco::SharedPtr<TCPServerConnectionFactory> Ptr; - - virtual ~TCPServerConnectionFactory(); - /// Destroys the TCPServerConnectionFactory. - - virtual TCPServerConnection* createConnection(const StreamSocket& socket) = 0; - /// Creates an instance of a subclass of TCPServerConnection, - /// using the given StreamSocket. - -protected: - TCPServerConnectionFactory(); - /// Creates the TCPServerConnectionFactory. - -private: - TCPServerConnectionFactory(const TCPServerConnectionFactory&); - TCPServerConnectionFactory& operator = (const TCPServerConnectionFactory&); -}; - - -template <class S> -class TCPServerConnectionFactoryImpl: public TCPServerConnectionFactory - /// This template provides a basic implementation of - /// TCPServerConnectionFactory. -{ -public: - TCPServerConnectionFactoryImpl() - { - } - - ~TCPServerConnectionFactoryImpl() - { - } - - TCPServerConnection* createConnection(const StreamSocket& socket) - { - return new S(socket); - } -}; - - -} } // namespace Poco::Net - - -#endif // Net_TCPServerConnectionFactory_INCLUDED +// +// TCPServerConnectionFactory.h +// +// Library: Net +// Package: TCPServer +// Module: TCPServerConnectionFactory +// +// Definition of the TCPServerConnectionFactory class. +// +// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. +// and Contributors. +// +// SPDX-License-Identifier: BSL-1.0 +// + + +#ifndef Net_TCPServerConnectionFactory_INCLUDED +#define Net_TCPServerConnectionFactory_INCLUDED + + +#include "Poco/Net/Net.h" +#include "Poco/Net/TCPServerConnection.h" +#include "Poco/SharedPtr.h" + + +namespace Poco { +namespace Net { + + +class Net_API TCPServerConnectionFactory + /// A factory for TCPServerConnection objects. + /// + /// The TCPServer class uses a TCPServerConnectionFactory + /// to create a connection object for each new connection + /// it accepts. + /// + /// Subclasses must override the createConnection() + /// method. + /// + /// The TCPServerConnectionFactoryImpl template class + /// can be used to automatically instantiate a + /// TCPServerConnectionFactory for a given subclass + /// of TCPServerConnection. +{ +public: + typedef Poco::SharedPtr<TCPServerConnectionFactory> Ptr; + + virtual ~TCPServerConnectionFactory(); + /// Destroys the TCPServerConnectionFactory. + + virtual TCPServerConnection* createConnection(const StreamSocket& socket) = 0; + /// Creates an instance of a subclass of TCPServerConnection, + /// using the given StreamSocket. + +protected: + TCPServerConnectionFactory(); + /// Creates the TCPServerConnectionFactory. + +private: + TCPServerConnectionFactory(const TCPServerConnectionFactory&); + TCPServerConnectionFactory& operator = (const TCPServerConnectionFactory&); +}; + + +template <class S> +class TCPServerConnectionFactoryImpl: public TCPServerConnectionFactory + /// This template provides a basic implementation of + /// TCPServerConnectionFactory. +{ +public: + TCPServerConnectionFactoryImpl() + { + } + + ~TCPServerConnectionFactoryImpl() + { + } + + TCPServerConnection* createConnection(const StreamSocket& socket) + { + return new S(socket); + } +}; + + +} } // namespace Poco::Net + + +#endif // Net_TCPServerConnectionFactory_INCLUDED diff --git a/contrib/libs/poco/Net/include/Poco/Net/TCPServerDispatcher.h b/contrib/libs/poco/Net/include/Poco/Net/TCPServerDispatcher.h index 5a1a6a79a0..3c46d0f268 100644 --- a/contrib/libs/poco/Net/include/Poco/Net/TCPServerDispatcher.h +++ b/contrib/libs/poco/Net/include/Poco/Net/TCPServerDispatcher.h @@ -1,130 +1,130 @@ -// -// TCPServerDispatcher.h -// -// Library: Net -// Package: TCPServer -// Module: TCPServerDispatcher -// -// Definition of the TCPServerDispatcher class. -// -// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Net_TCPServerDispatcher_INCLUDED -#define Net_TCPServerDispatcher_INCLUDED - - -#include "Poco/Net/Net.h" -#include "Poco/Net/StreamSocket.h" -#include "Poco/Net/TCPServerConnectionFactory.h" -#include "Poco/Net/TCPServerParams.h" -#include "Poco/Runnable.h" -#include "Poco/NotificationQueue.h" -#include "Poco/ThreadPool.h" -#include "Poco/Mutex.h" - - -namespace Poco { -namespace Net { - - -class Net_API TCPServerDispatcher: public Poco::Runnable - /// A helper class for TCPServer that dispatches - /// connections to server connection threads. -{ -public: - TCPServerDispatcher(TCPServerConnectionFactory::Ptr pFactory, Poco::ThreadPool& threadPool, TCPServerParams::Ptr pParams); - /// Creates the TCPServerDispatcher. - /// - /// The dispatcher takes ownership of the TCPServerParams object. - /// If no TCPServerParams object is supplied, the TCPServerDispatcher - /// creates one. - - void duplicate(); - /// Increments the object's reference count. - - void release(); - /// Decrements the object's reference count - /// and deletes the object if the count - /// reaches zero. - - void run(); - /// Runs the dispatcher. - - void enqueue(const StreamSocket& socket); - /// Queues the given socket connection. - - void stop(); - /// Stops the dispatcher. - - int currentThreads() const; - /// Returns the number of currently used threads. - - int maxThreads() const; - /// Returns the maximum number of threads available. - - int totalConnections() const; - /// Returns the total number of handled connections. - - int currentConnections() const; - /// Returns the number of currently handled connections. - - int maxConcurrentConnections() const; - /// Returns the maximum number of concurrently handled connections. - - int queuedConnections() const; - /// Returns the number of queued connections. - - int refusedConnections() const; - /// Returns the number of refused connections. - - const TCPServerParams& params() const; - /// Returns a const reference to the TCPServerParam object. - -protected: - ~TCPServerDispatcher(); - /// Destroys the TCPServerDispatcher. - - void beginConnection(); - /// Updates the performance counters. - - void endConnection(); - /// Updates the performance counters. - -private: - TCPServerDispatcher(); - TCPServerDispatcher(const TCPServerDispatcher&); - TCPServerDispatcher& operator = (const TCPServerDispatcher&); - - int _rc; - TCPServerParams::Ptr _pParams; - int _currentThreads; - int _totalConnections; - int _currentConnections; - int _maxConcurrentConnections; - int _refusedConnections; - bool _stopped; - Poco::NotificationQueue _queue; - TCPServerConnectionFactory::Ptr _pConnectionFactory; - Poco::ThreadPool& _threadPool; - mutable Poco::FastMutex _mutex; -}; - - -// -// inlines -// -inline const TCPServerParams& TCPServerDispatcher::params() const -{ - return *_pParams; -} - - -} } // namespace Poco::Net - - -#endif // Net_TCPServerDispatcher_INCLUDED +// +// TCPServerDispatcher.h +// +// Library: Net +// Package: TCPServer +// Module: TCPServerDispatcher +// +// Definition of the TCPServerDispatcher class. +// +// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. +// and Contributors. +// +// SPDX-License-Identifier: BSL-1.0 +// + + +#ifndef Net_TCPServerDispatcher_INCLUDED +#define Net_TCPServerDispatcher_INCLUDED + + +#include "Poco/Net/Net.h" +#include "Poco/Net/StreamSocket.h" +#include "Poco/Net/TCPServerConnectionFactory.h" +#include "Poco/Net/TCPServerParams.h" +#include "Poco/Runnable.h" +#include "Poco/NotificationQueue.h" +#include "Poco/ThreadPool.h" +#include "Poco/Mutex.h" + + +namespace Poco { +namespace Net { + + +class Net_API TCPServerDispatcher: public Poco::Runnable + /// A helper class for TCPServer that dispatches + /// connections to server connection threads. +{ +public: + TCPServerDispatcher(TCPServerConnectionFactory::Ptr pFactory, Poco::ThreadPool& threadPool, TCPServerParams::Ptr pParams); + /// Creates the TCPServerDispatcher. + /// + /// The dispatcher takes ownership of the TCPServerParams object. + /// If no TCPServerParams object is supplied, the TCPServerDispatcher + /// creates one. + + void duplicate(); + /// Increments the object's reference count. + + void release(); + /// Decrements the object's reference count + /// and deletes the object if the count + /// reaches zero. + + void run(); + /// Runs the dispatcher. + + void enqueue(const StreamSocket& socket); + /// Queues the given socket connection. + + void stop(); + /// Stops the dispatcher. + + int currentThreads() const; + /// Returns the number of currently used threads. + + int maxThreads() const; + /// Returns the maximum number of threads available. + + int totalConnections() const; + /// Returns the total number of handled connections. + + int currentConnections() const; + /// Returns the number of currently handled connections. + + int maxConcurrentConnections() const; + /// Returns the maximum number of concurrently handled connections. + + int queuedConnections() const; + /// Returns the number of queued connections. + + int refusedConnections() const; + /// Returns the number of refused connections. + + const TCPServerParams& params() const; + /// Returns a const reference to the TCPServerParam object. + +protected: + ~TCPServerDispatcher(); + /// Destroys the TCPServerDispatcher. + + void beginConnection(); + /// Updates the performance counters. + + void endConnection(); + /// Updates the performance counters. + +private: + TCPServerDispatcher(); + TCPServerDispatcher(const TCPServerDispatcher&); + TCPServerDispatcher& operator = (const TCPServerDispatcher&); + + int _rc; + TCPServerParams::Ptr _pParams; + int _currentThreads; + int _totalConnections; + int _currentConnections; + int _maxConcurrentConnections; + int _refusedConnections; + bool _stopped; + Poco::NotificationQueue _queue; + TCPServerConnectionFactory::Ptr _pConnectionFactory; + Poco::ThreadPool& _threadPool; + mutable Poco::FastMutex _mutex; +}; + + +// +// inlines +// +inline const TCPServerParams& TCPServerDispatcher::params() const +{ + return *_pParams; +} + + +} } // namespace Poco::Net + + +#endif // Net_TCPServerDispatcher_INCLUDED diff --git a/contrib/libs/poco/Net/include/Poco/Net/TCPServerParams.h b/contrib/libs/poco/Net/include/Poco/Net/TCPServerParams.h index 1752b732b6..1c2057e5ec 100644 --- a/contrib/libs/poco/Net/include/Poco/Net/TCPServerParams.h +++ b/contrib/libs/poco/Net/include/Poco/Net/TCPServerParams.h @@ -1,137 +1,137 @@ -// -// TCPServerParams.h -// -// Library: Net -// Package: TCPServer -// Module: TCPServerParams -// -// Definition of the TCPServerParams class. -// -// Copyright (c) 2005-2007, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Net_TCPServerParams_INCLUDED -#define Net_TCPServerParams_INCLUDED - - -#include "Poco/Net/Net.h" -#include "Poco/RefCountedObject.h" -#include "Poco/Timespan.h" -#include "Poco/Thread.h" -#include "Poco/AutoPtr.h" - - -namespace Poco { -namespace Net { - - -class Net_API TCPServerParams: public Poco::RefCountedObject - /// This class is used to specify parameters to both the - /// TCPServer, as well as to TCPServerDispatcher objects. - /// - /// Subclasses may add new parameters to the class. -{ -public: - typedef Poco::AutoPtr<TCPServerParams> Ptr; - - TCPServerParams(); - /// Creates the TCPServerParams. - /// - /// Sets the following default values: - /// - threadIdleTime: 10 seconds - /// - maxThreads: 0 - /// - maxQueued: 64 - - void setThreadIdleTime(const Poco::Timespan& idleTime); - /// Sets the maximum idle time for a thread before - /// it is terminated. - /// - /// The default idle time is 10 seconds; - - const Poco::Timespan& getThreadIdleTime() const; - /// Returns the maximum thread idle time. - - void setMaxQueued(int count); - /// Sets the maximum number of queued connections. - /// Must be greater than 0. - /// - /// If there are already the maximum number of connections - /// in the queue, new connections will be silently discarded. - /// - /// The default number is 64. - - int getMaxQueued() const; - /// Returns the maximum number of queued connections. - - void setMaxThreads(int count); - /// Sets the maximum number of simultaneous threads - /// available for this TCPServerDispatcher. - /// - /// Must be greater than or equal to 0. - /// If 0 is specified, the TCPServerDispatcher will - /// set this parameter to the number of available threads - /// in its thread pool. - /// - /// The thread pool used by the TCPServerDispatcher - /// must at least have the capacity for the given - /// number of threads. - - int getMaxThreads() const; - /// Returns the maximum number of simultaneous threads - /// available for this TCPServerDispatcher. - - void setThreadPriority(Poco::Thread::Priority prio); - /// Sets the priority of TCP server threads +// +// TCPServerParams.h +// +// Library: Net +// Package: TCPServer +// Module: TCPServerParams +// +// Definition of the TCPServerParams class. +// +// Copyright (c) 2005-2007, Applied Informatics Software Engineering GmbH. +// and Contributors. +// +// SPDX-License-Identifier: BSL-1.0 +// + + +#ifndef Net_TCPServerParams_INCLUDED +#define Net_TCPServerParams_INCLUDED + + +#include "Poco/Net/Net.h" +#include "Poco/RefCountedObject.h" +#include "Poco/Timespan.h" +#include "Poco/Thread.h" +#include "Poco/AutoPtr.h" + + +namespace Poco { +namespace Net { + + +class Net_API TCPServerParams: public Poco::RefCountedObject + /// This class is used to specify parameters to both the + /// TCPServer, as well as to TCPServerDispatcher objects. + /// + /// Subclasses may add new parameters to the class. +{ +public: + typedef Poco::AutoPtr<TCPServerParams> Ptr; + + TCPServerParams(); + /// Creates the TCPServerParams. + /// + /// Sets the following default values: + /// - threadIdleTime: 10 seconds + /// - maxThreads: 0 + /// - maxQueued: 64 + + void setThreadIdleTime(const Poco::Timespan& idleTime); + /// Sets the maximum idle time for a thread before + /// it is terminated. + /// + /// The default idle time is 10 seconds; + + const Poco::Timespan& getThreadIdleTime() const; + /// Returns the maximum thread idle time. + + void setMaxQueued(int count); + /// Sets the maximum number of queued connections. + /// Must be greater than 0. + /// + /// If there are already the maximum number of connections + /// in the queue, new connections will be silently discarded. + /// + /// The default number is 64. + + int getMaxQueued() const; + /// Returns the maximum number of queued connections. + + void setMaxThreads(int count); + /// Sets the maximum number of simultaneous threads + /// available for this TCPServerDispatcher. + /// + /// Must be greater than or equal to 0. + /// If 0 is specified, the TCPServerDispatcher will + /// set this parameter to the number of available threads + /// in its thread pool. + /// + /// The thread pool used by the TCPServerDispatcher + /// must at least have the capacity for the given + /// number of threads. + + int getMaxThreads() const; + /// Returns the maximum number of simultaneous threads + /// available for this TCPServerDispatcher. + + void setThreadPriority(Poco::Thread::Priority prio); + /// Sets the priority of TCP server threads + /// created by TCPServer. + + Poco::Thread::Priority getThreadPriority() const; + /// Returns the priority of TCP server threads /// created by TCPServer. - - Poco::Thread::Priority getThreadPriority() const; - /// Returns the priority of TCP server threads - /// created by TCPServer. - -protected: - virtual ~TCPServerParams(); - /// Destroys the TCPServerParams. - -private: - Poco::Timespan _threadIdleTime; - int _maxThreads; - int _maxQueued; - Poco::Thread::Priority _threadPriority; -}; - - -// -// inlines -// -inline const Poco::Timespan& TCPServerParams::getThreadIdleTime() const -{ - return _threadIdleTime; -} - - -inline int TCPServerParams::getMaxThreads() const -{ - return _maxThreads; -} - - -inline int TCPServerParams::getMaxQueued() const -{ - return _maxQueued; -} - - -inline Poco::Thread::Priority TCPServerParams::getThreadPriority() const -{ - return _threadPriority; -} - - -} } // namespace Poco::Net - - -#endif // Net_TCPServerParams_INCLUDED + +protected: + virtual ~TCPServerParams(); + /// Destroys the TCPServerParams. + +private: + Poco::Timespan _threadIdleTime; + int _maxThreads; + int _maxQueued; + Poco::Thread::Priority _threadPriority; +}; + + +// +// inlines +// +inline const Poco::Timespan& TCPServerParams::getThreadIdleTime() const +{ + return _threadIdleTime; +} + + +inline int TCPServerParams::getMaxThreads() const +{ + return _maxThreads; +} + + +inline int TCPServerParams::getMaxQueued() const +{ + return _maxQueued; +} + + +inline Poco::Thread::Priority TCPServerParams::getThreadPriority() const +{ + return _threadPriority; +} + + +} } // namespace Poco::Net + + +#endif // Net_TCPServerParams_INCLUDED diff --git a/contrib/libs/poco/Net/include/Poco/Net/WebSocket.h b/contrib/libs/poco/Net/include/Poco/Net/WebSocket.h index bb6b29a5e7..5d3f05d12d 100644 --- a/contrib/libs/poco/Net/include/Poco/Net/WebSocket.h +++ b/contrib/libs/poco/Net/include/Poco/Net/WebSocket.h @@ -1,297 +1,297 @@ -// -// WebSocket.h -// -// Library: Net -// Package: WebSocket -// Module: WebSocket -// -// Definition of the WebSocket class. -// -// Copyright (c) 2012, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Net_WebSocket_INCLUDED -#define Net_WebSocket_INCLUDED - - -#include "Poco/Net/Net.h" -#include "Poco/Net/StreamSocket.h" -#include "Poco/Net/HTTPCredentials.h" -#include "Poco/Buffer.h" - - -namespace Poco { -namespace Net { - - -class WebSocketImpl; -class HTTPServerRequest; -class HTTPServerResponse; -class HTTPClientSession; - - -class Net_API WebSocket: public StreamSocket - /// This class implements a WebSocket according - /// to the WebSocket protocol specification in RFC 6455. - /// - /// Both client-side and server-side WebSockets - /// are supported. - /// - /// Server-side WebSockets are usually created from within - /// a HTTPRequestHandler. - /// - /// Client-side WebSockets are created using a HTTPClientSession. - /// - /// Note that special frames like PING must be handled at - /// application level. In the case of a PING, a PONG message - /// must be returned. -{ -public: - enum Mode - { - WS_SERVER, /// Server-side WebSocket. - WS_CLIENT /// Client-side WebSocket. - }; - - enum FrameFlags - /// Frame header flags. - { - FRAME_FLAG_FIN = 0x80, /// FIN bit: final fragment of a multi-fragment message. - FRAME_FLAG_RSV1 = 0x40, /// Reserved for future use. Must be zero. - FRAME_FLAG_RSV2 = 0x20, /// Reserved for future use. Must be zero. - FRAME_FLAG_RSV3 = 0x10 /// Reserved for future use. Must be zero. - }; - - enum FrameOpcodes - /// Frame header opcodes. - { - FRAME_OP_CONT = 0x00, /// Continuation frame. - FRAME_OP_TEXT = 0x01, /// Text frame. - FRAME_OP_BINARY = 0x02, /// Binary frame. - FRAME_OP_CLOSE = 0x08, /// Close connection. - FRAME_OP_PING = 0x09, /// Ping frame. - FRAME_OP_PONG = 0x0a, /// Pong frame. - FRAME_OP_BITMASK = 0x0f, /// Bit mask for opcodes. - FRAME_OP_SETRAW = 0x100 /// Set raw flags (for use with sendBytes() and FRAME_OP_CONT). - }; - - enum SendFlags - /// Combined header flags and opcodes for use with sendFrame(). - { - FRAME_TEXT = FRAME_FLAG_FIN | FRAME_OP_TEXT, - /// Use this for sending a single text (UTF-8) payload frame. - FRAME_BINARY = FRAME_FLAG_FIN | FRAME_OP_BINARY - /// Use this for sending a single binary payload frame. - }; - - enum StatusCodes - /// StatusCodes for CLOSE frames sent with shutdown(). - { - WS_NORMAL_CLOSE = 1000, - WS_ENDPOINT_GOING_AWAY = 1001, - WS_PROTOCOL_ERROR = 1002, - WS_PAYLOAD_NOT_ACCEPTABLE = 1003, - WS_RESERVED = 1004, - WS_RESERVED_NO_STATUS_CODE = 1005, - WS_RESERVED_ABNORMAL_CLOSE = 1006, - WS_MALFORMED_PAYLOAD = 1007, - WS_POLICY_VIOLATION = 1008, - WS_PAYLOAD_TOO_BIG = 1009, - WS_EXTENSION_REQUIRED = 1010, - WS_UNEXPECTED_CONDITION = 1011, - WS_RESERVED_TLS_FAILURE = 1015 - }; - - enum ErrorCodes - /// These error codes can be obtained from a WebSocketException - /// to determine the exact cause of the error. - { - WS_ERR_NO_HANDSHAKE = 1, - /// No Connection: Upgrade or Upgrade: websocket header in handshake request. - WS_ERR_HANDSHAKE_NO_VERSION = 2, - /// No Sec-WebSocket-Version header in handshake request. - WS_ERR_HANDSHAKE_UNSUPPORTED_VERSION = 3, - /// Unsupported WebSocket version requested by client. - WS_ERR_HANDSHAKE_NO_KEY = 4, - /// No Sec-WebSocket-Key header in handshake request. - WS_ERR_HANDSHAKE_ACCEPT = 5, - /// No Sec-WebSocket-Accept header or wrong value. - WS_ERR_UNAUTHORIZED = 6, - /// The server rejected the username or password for authentication. - WS_ERR_PAYLOAD_TOO_BIG = 10, - /// Payload too big for supplied buffer. - WS_ERR_INCOMPLETE_FRAME = 11 - /// Incomplete frame received. - }; - - WebSocket(HTTPServerRequest& request, HTTPServerResponse& response); - /// Creates a server-side WebSocket from within a - /// HTTPRequestHandler. - /// - /// First verifies that the request is a valid WebSocket upgrade - /// request. If so, completes the handshake by sending - /// a proper 101 response. - /// - /// Throws an exception if the request is not a proper WebSocket - /// upgrade request. - - WebSocket(HTTPClientSession& cs, HTTPRequest& request, HTTPResponse& response); - /// Creates a client-side WebSocket, using the given - /// HTTPClientSession and HTTPRequest for the initial handshake - /// (HTTP Upgrade request). - /// - /// Additional HTTP headers for the initial handshake request - /// (such as Origin or Sec-WebSocket-Protocol) can be given - /// in the request object. - /// - /// The result of the handshake can be obtained from the response - /// object. - - WebSocket(HTTPClientSession& cs, HTTPRequest& request, HTTPResponse& response, HTTPCredentials& credentials); - /// Creates a client-side WebSocket, using the given - /// HTTPClientSession and HTTPRequest for the initial handshake - /// (HTTP Upgrade request). - /// - /// The given credentials are used for authentication - /// if requested by the server. - /// - /// Additional HTTP headers for the initial handshake request - /// (such as Origin or Sec-WebSocket-Protocol) can be given - /// in the request object. - /// - /// The result of the handshake can be obtained from the response - /// object. - - WebSocket(const Socket& socket); - /// Creates a WebSocket from another Socket, which must be a WebSocket, - /// otherwise a Poco::InvalidArgumentException will be thrown. - - virtual ~WebSocket(); - /// Destroys the StreamSocket. - - WebSocket& operator = (const Socket& socket); - /// Assignment operator. - /// - /// The other socket must be a WebSocket, otherwise a Poco::InvalidArgumentException - /// will be thrown. - - void shutdown(); - /// Sends a Close control frame to the server end of - /// the connection to initiate an orderly shutdown - /// of the connection. - - void shutdown(Poco::UInt16 statusCode, const std::string& statusMessage = ""); - /// Sends a Close control frame to the server end of - /// the connection to initiate an orderly shutdown - /// of the connection. - - int sendFrame(const void* buffer, int length, int flags = FRAME_TEXT); - /// Sends the contents of the given buffer through - /// the socket as a single frame. - /// - /// Values from the FrameFlags, FrameOpcodes and SendFlags enumerations - /// can be specified in flags. - /// - /// Returns the number of bytes sent, which may be - /// less than the number of bytes specified. - /// - /// Certain socket implementations may also return a negative - /// value denoting a certain condition. - - int receiveFrame(void* buffer, int length, int& flags); - /// Receives a frame from the socket and stores it - /// in buffer. Up to length bytes are received. If - /// the frame's payload is larger, a WebSocketException - /// is thrown and the WebSocket connection must be - /// terminated. - /// - /// The frame's payload size must not exceed the - /// maximum payload size set with setMaxPayloadSize(). - /// If it does, a WebSocketException (WS_ERR_PAYLOAD_TOO_BIG) - /// is thrown and the WebSocket connection must be - /// terminated. - /// - /// A WebSocketException will also be thrown if a malformed - /// or incomplete frame is received. - /// - /// Returns the number of bytes received. - /// A return value of 0 means that the peer has - /// shut down or closed the connection. - /// - /// Throws a TimeoutException if a receive timeout has - /// been set and nothing is received within that interval. - /// Throws a NetException (or a subclass) in case of other errors. - /// - /// The frame flags and opcode (FrameFlags and FrameOpcodes) - /// is stored in flags. - - int receiveFrame(Poco::Buffer<char>& buffer, int& flags); - /// Receives a frame from the socket and stores it - /// after any previous content in buffer. - /// The buffer will be grown as necessary. - /// - /// The frame's payload size must not exceed the - /// maximum payload size set with setMaxPayloadSize(). - /// If it does, a WebSocketException (WS_ERR_PAYLOAD_TOO_BIG) - /// is thrown and the WebSocket connection must be - /// terminated. - /// - /// A WebSocketException will also be thrown if a malformed - /// or incomplete frame is received. - /// - /// If this method is used, a reasonable maximum payload size should - /// be set with setMaxPayloadSize() to prevent a potential - /// DoS attack (memory exhaustion) by sending a WebSocket frame - /// header with a huge payload size. - /// - /// Returns the number of bytes received. - /// A return value of 0 means that the peer has - /// shut down or closed the connection. - /// - /// Throws a TimeoutException if a receive timeout has - /// been set and nothing is received within that interval. - /// Throws a NetException (or a subclass) in case of other errors. - /// - /// The frame flags and opcode (FrameFlags and FrameOpcodes) - /// is stored in flags. - - Mode mode() const; - /// Returns WS_SERVER if the WebSocket is a server-side - /// WebSocket, or WS_CLIENT otherwise. - - void setMaxPayloadSize(int maxPayloadSize); - /// Sets the maximum payload size for receiveFrame(). - /// - /// The default is std::numeric_limits<int>::max(). - - int getMaxPayloadSize() const; - /// Returns the maximum payload size for receiveFrame(). - /// - /// The default is std::numeric_limits<int>::max(). - - static const std::string WEBSOCKET_VERSION; - /// The WebSocket protocol version supported (13). - -protected: - static WebSocketImpl* accept(HTTPServerRequest& request, HTTPServerResponse& response); - static WebSocketImpl* connect(HTTPClientSession& cs, HTTPRequest& request, HTTPResponse& response, HTTPCredentials& credentials); - static WebSocketImpl* completeHandshake(HTTPClientSession& cs, HTTPResponse& response, const std::string& key); - static std::string computeAccept(const std::string& key); - static std::string createKey(); - -private: - WebSocket(); - - static const std::string WEBSOCKET_GUID; - static HTTPCredentials _defaultCreds; -}; - - -} } // namespace Poco::Net - - -#endif // Net_WebSocket_INCLUDED +// +// WebSocket.h +// +// Library: Net +// Package: WebSocket +// Module: WebSocket +// +// Definition of the WebSocket class. +// +// Copyright (c) 2012, Applied Informatics Software Engineering GmbH. +// and Contributors. +// +// SPDX-License-Identifier: BSL-1.0 +// + + +#ifndef Net_WebSocket_INCLUDED +#define Net_WebSocket_INCLUDED + + +#include "Poco/Net/Net.h" +#include "Poco/Net/StreamSocket.h" +#include "Poco/Net/HTTPCredentials.h" +#include "Poco/Buffer.h" + + +namespace Poco { +namespace Net { + + +class WebSocketImpl; +class HTTPServerRequest; +class HTTPServerResponse; +class HTTPClientSession; + + +class Net_API WebSocket: public StreamSocket + /// This class implements a WebSocket according + /// to the WebSocket protocol specification in RFC 6455. + /// + /// Both client-side and server-side WebSockets + /// are supported. + /// + /// Server-side WebSockets are usually created from within + /// a HTTPRequestHandler. + /// + /// Client-side WebSockets are created using a HTTPClientSession. + /// + /// Note that special frames like PING must be handled at + /// application level. In the case of a PING, a PONG message + /// must be returned. +{ +public: + enum Mode + { + WS_SERVER, /// Server-side WebSocket. + WS_CLIENT /// Client-side WebSocket. + }; + + enum FrameFlags + /// Frame header flags. + { + FRAME_FLAG_FIN = 0x80, /// FIN bit: final fragment of a multi-fragment message. + FRAME_FLAG_RSV1 = 0x40, /// Reserved for future use. Must be zero. + FRAME_FLAG_RSV2 = 0x20, /// Reserved for future use. Must be zero. + FRAME_FLAG_RSV3 = 0x10 /// Reserved for future use. Must be zero. + }; + + enum FrameOpcodes + /// Frame header opcodes. + { + FRAME_OP_CONT = 0x00, /// Continuation frame. + FRAME_OP_TEXT = 0x01, /// Text frame. + FRAME_OP_BINARY = 0x02, /// Binary frame. + FRAME_OP_CLOSE = 0x08, /// Close connection. + FRAME_OP_PING = 0x09, /// Ping frame. + FRAME_OP_PONG = 0x0a, /// Pong frame. + FRAME_OP_BITMASK = 0x0f, /// Bit mask for opcodes. + FRAME_OP_SETRAW = 0x100 /// Set raw flags (for use with sendBytes() and FRAME_OP_CONT). + }; + + enum SendFlags + /// Combined header flags and opcodes for use with sendFrame(). + { + FRAME_TEXT = FRAME_FLAG_FIN | FRAME_OP_TEXT, + /// Use this for sending a single text (UTF-8) payload frame. + FRAME_BINARY = FRAME_FLAG_FIN | FRAME_OP_BINARY + /// Use this for sending a single binary payload frame. + }; + + enum StatusCodes + /// StatusCodes for CLOSE frames sent with shutdown(). + { + WS_NORMAL_CLOSE = 1000, + WS_ENDPOINT_GOING_AWAY = 1001, + WS_PROTOCOL_ERROR = 1002, + WS_PAYLOAD_NOT_ACCEPTABLE = 1003, + WS_RESERVED = 1004, + WS_RESERVED_NO_STATUS_CODE = 1005, + WS_RESERVED_ABNORMAL_CLOSE = 1006, + WS_MALFORMED_PAYLOAD = 1007, + WS_POLICY_VIOLATION = 1008, + WS_PAYLOAD_TOO_BIG = 1009, + WS_EXTENSION_REQUIRED = 1010, + WS_UNEXPECTED_CONDITION = 1011, + WS_RESERVED_TLS_FAILURE = 1015 + }; + + enum ErrorCodes + /// These error codes can be obtained from a WebSocketException + /// to determine the exact cause of the error. + { + WS_ERR_NO_HANDSHAKE = 1, + /// No Connection: Upgrade or Upgrade: websocket header in handshake request. + WS_ERR_HANDSHAKE_NO_VERSION = 2, + /// No Sec-WebSocket-Version header in handshake request. + WS_ERR_HANDSHAKE_UNSUPPORTED_VERSION = 3, + /// Unsupported WebSocket version requested by client. + WS_ERR_HANDSHAKE_NO_KEY = 4, + /// No Sec-WebSocket-Key header in handshake request. + WS_ERR_HANDSHAKE_ACCEPT = 5, + /// No Sec-WebSocket-Accept header or wrong value. + WS_ERR_UNAUTHORIZED = 6, + /// The server rejected the username or password for authentication. + WS_ERR_PAYLOAD_TOO_BIG = 10, + /// Payload too big for supplied buffer. + WS_ERR_INCOMPLETE_FRAME = 11 + /// Incomplete frame received. + }; + + WebSocket(HTTPServerRequest& request, HTTPServerResponse& response); + /// Creates a server-side WebSocket from within a + /// HTTPRequestHandler. + /// + /// First verifies that the request is a valid WebSocket upgrade + /// request. If so, completes the handshake by sending + /// a proper 101 response. + /// + /// Throws an exception if the request is not a proper WebSocket + /// upgrade request. + + WebSocket(HTTPClientSession& cs, HTTPRequest& request, HTTPResponse& response); + /// Creates a client-side WebSocket, using the given + /// HTTPClientSession and HTTPRequest for the initial handshake + /// (HTTP Upgrade request). + /// + /// Additional HTTP headers for the initial handshake request + /// (such as Origin or Sec-WebSocket-Protocol) can be given + /// in the request object. + /// + /// The result of the handshake can be obtained from the response + /// object. + + WebSocket(HTTPClientSession& cs, HTTPRequest& request, HTTPResponse& response, HTTPCredentials& credentials); + /// Creates a client-side WebSocket, using the given + /// HTTPClientSession and HTTPRequest for the initial handshake + /// (HTTP Upgrade request). + /// + /// The given credentials are used for authentication + /// if requested by the server. + /// + /// Additional HTTP headers for the initial handshake request + /// (such as Origin or Sec-WebSocket-Protocol) can be given + /// in the request object. + /// + /// The result of the handshake can be obtained from the response + /// object. + + WebSocket(const Socket& socket); + /// Creates a WebSocket from another Socket, which must be a WebSocket, + /// otherwise a Poco::InvalidArgumentException will be thrown. + + virtual ~WebSocket(); + /// Destroys the StreamSocket. + + WebSocket& operator = (const Socket& socket); + /// Assignment operator. + /// + /// The other socket must be a WebSocket, otherwise a Poco::InvalidArgumentException + /// will be thrown. + + void shutdown(); + /// Sends a Close control frame to the server end of + /// the connection to initiate an orderly shutdown + /// of the connection. + + void shutdown(Poco::UInt16 statusCode, const std::string& statusMessage = ""); + /// Sends a Close control frame to the server end of + /// the connection to initiate an orderly shutdown + /// of the connection. + + int sendFrame(const void* buffer, int length, int flags = FRAME_TEXT); + /// Sends the contents of the given buffer through + /// the socket as a single frame. + /// + /// Values from the FrameFlags, FrameOpcodes and SendFlags enumerations + /// can be specified in flags. + /// + /// Returns the number of bytes sent, which may be + /// less than the number of bytes specified. + /// + /// Certain socket implementations may also return a negative + /// value denoting a certain condition. + + int receiveFrame(void* buffer, int length, int& flags); + /// Receives a frame from the socket and stores it + /// in buffer. Up to length bytes are received. If + /// the frame's payload is larger, a WebSocketException + /// is thrown and the WebSocket connection must be + /// terminated. + /// + /// The frame's payload size must not exceed the + /// maximum payload size set with setMaxPayloadSize(). + /// If it does, a WebSocketException (WS_ERR_PAYLOAD_TOO_BIG) + /// is thrown and the WebSocket connection must be + /// terminated. + /// + /// A WebSocketException will also be thrown if a malformed + /// or incomplete frame is received. + /// + /// Returns the number of bytes received. + /// A return value of 0 means that the peer has + /// shut down or closed the connection. + /// + /// Throws a TimeoutException if a receive timeout has + /// been set and nothing is received within that interval. + /// Throws a NetException (or a subclass) in case of other errors. + /// + /// The frame flags and opcode (FrameFlags and FrameOpcodes) + /// is stored in flags. + + int receiveFrame(Poco::Buffer<char>& buffer, int& flags); + /// Receives a frame from the socket and stores it + /// after any previous content in buffer. + /// The buffer will be grown as necessary. + /// + /// The frame's payload size must not exceed the + /// maximum payload size set with setMaxPayloadSize(). + /// If it does, a WebSocketException (WS_ERR_PAYLOAD_TOO_BIG) + /// is thrown and the WebSocket connection must be + /// terminated. + /// + /// A WebSocketException will also be thrown if a malformed + /// or incomplete frame is received. + /// + /// If this method is used, a reasonable maximum payload size should + /// be set with setMaxPayloadSize() to prevent a potential + /// DoS attack (memory exhaustion) by sending a WebSocket frame + /// header with a huge payload size. + /// + /// Returns the number of bytes received. + /// A return value of 0 means that the peer has + /// shut down or closed the connection. + /// + /// Throws a TimeoutException if a receive timeout has + /// been set and nothing is received within that interval. + /// Throws a NetException (or a subclass) in case of other errors. + /// + /// The frame flags and opcode (FrameFlags and FrameOpcodes) + /// is stored in flags. + + Mode mode() const; + /// Returns WS_SERVER if the WebSocket is a server-side + /// WebSocket, or WS_CLIENT otherwise. + + void setMaxPayloadSize(int maxPayloadSize); + /// Sets the maximum payload size for receiveFrame(). + /// + /// The default is std::numeric_limits<int>::max(). + + int getMaxPayloadSize() const; + /// Returns the maximum payload size for receiveFrame(). + /// + /// The default is std::numeric_limits<int>::max(). + + static const std::string WEBSOCKET_VERSION; + /// The WebSocket protocol version supported (13). + +protected: + static WebSocketImpl* accept(HTTPServerRequest& request, HTTPServerResponse& response); + static WebSocketImpl* connect(HTTPClientSession& cs, HTTPRequest& request, HTTPResponse& response, HTTPCredentials& credentials); + static WebSocketImpl* completeHandshake(HTTPClientSession& cs, HTTPResponse& response, const std::string& key); + static std::string computeAccept(const std::string& key); + static std::string createKey(); + +private: + WebSocket(); + + static const std::string WEBSOCKET_GUID; + static HTTPCredentials _defaultCreds; +}; + + +} } // namespace Poco::Net + + +#endif // Net_WebSocket_INCLUDED diff --git a/contrib/libs/poco/Net/include/Poco/Net/WebSocketImpl.h b/contrib/libs/poco/Net/include/Poco/Net/WebSocketImpl.h index fb9751dbce..a2471c3694 100644 --- a/contrib/libs/poco/Net/include/Poco/Net/WebSocketImpl.h +++ b/contrib/libs/poco/Net/include/Poco/Net/WebSocketImpl.h @@ -1,142 +1,142 @@ -// -// WebSocketImpl.h -// -// Library: Net -// Package: WebSocket -// Module: WebSocketImpl -// -// Definition of the StreamSocketImpl class. -// -// Copyright (c) 2012, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Net_WebSocketImpl_INCLUDED -#define Net_WebSocketImpl_INCLUDED - - -#include "Poco/Net/StreamSocketImpl.h" -#include "Poco/Buffer.h" -#include "Poco/Random.h" -#include "Poco/Buffer.h" - - -namespace Poco { -namespace Net { - - -class HTTPSession; - - -class Net_API WebSocketImpl: public StreamSocketImpl - /// This class implements a WebSocket, according - /// to the WebSocket protocol described in RFC 6455. -{ -public: - WebSocketImpl(StreamSocketImpl* pStreamSocketImpl, HTTPSession& session, bool mustMaskPayload); - /// Creates a WebSocketImpl. - - // StreamSocketImpl - virtual int sendBytes(const void* buffer, int length, int flags); - /// Sends a WebSocket protocol frame. - - virtual int receiveBytes(void* buffer, int length, int flags); - /// Receives a WebSocket protocol frame. - - virtual int receiveBytes(Poco::Buffer<char>& buffer, int flags); - /// Receives a WebSocket protocol frame. - - virtual SocketImpl* acceptConnection(SocketAddress& clientAddr); - virtual void connect(const SocketAddress& address); - virtual void connect(const SocketAddress& address, const Poco::Timespan& timeout); - virtual void connectNB(const SocketAddress& address); - virtual void bind(const SocketAddress& address, bool reuseAddress = false); - virtual void bind(const SocketAddress& address, bool reuseAddress, bool reusePort); - virtual void bind6(const SocketAddress& address, bool reuseAddress = false, bool ipV6Only = false); - virtual void bind6(const SocketAddress& address, bool reuseAddress, bool reusePort, bool ipV6Only); - virtual void listen(int backlog = 64); - virtual void close(); - virtual void shutdownReceive(); - virtual void shutdownSend(); - virtual void shutdown(); - virtual int sendTo(const void* buffer, int length, const SocketAddress& address, int flags = 0); - virtual int receiveFrom(void* buffer, int length, SocketAddress& address, int flags = 0); - virtual void sendUrgent(unsigned char data); - virtual int available(); - virtual bool secure() const; - virtual void setSendTimeout(const Poco::Timespan& timeout); - virtual Poco::Timespan getSendTimeout(); - virtual void setReceiveTimeout(const Poco::Timespan& timeout); - virtual Poco::Timespan getReceiveTimeout(); - - // Internal - int frameFlags() const; - /// Returns the frame flags of the most recently received frame. - - bool mustMaskPayload() const; - /// Returns true if the payload must be masked. - - void setMaxPayloadSize(int maxPayloadSize); - /// Sets the maximum payload size for receiveFrame(). - /// - /// The default is std::numeric_limits<int>::max(). - - int getMaxPayloadSize() const; - /// Returns the maximum payload size for receiveFrame(). - /// - /// The default is std::numeric_limits<int>::max(). - -protected: - enum - { - FRAME_FLAG_MASK = 0x80, - MAX_HEADER_LENGTH = 14 - }; - - int receiveHeader(char mask[4], bool& useMask); - int receivePayload(char *buffer, int payloadLength, char mask[4], bool useMask); - int receiveNBytes(void* buffer, int bytes); - int receiveSomeBytes(char* buffer, int bytes); - virtual ~WebSocketImpl(); - -private: - WebSocketImpl(); - - StreamSocketImpl* _pStreamSocketImpl; - int _maxPayloadSize; - Poco::Buffer<char> _buffer; - int _bufferOffset; - int _frameFlags; - bool _mustMaskPayload; - Poco::Random _rnd; -}; - - -// -// inlines -// -inline int WebSocketImpl::frameFlags() const -{ - return _frameFlags; -} - - -inline bool WebSocketImpl::mustMaskPayload() const -{ - return _mustMaskPayload; -} - - -inline int WebSocketImpl::getMaxPayloadSize() const -{ - return _maxPayloadSize; -} - - -} } // namespace Poco::Net - - -#endif // Net_WebSocketImpl_INCLUDED +// +// WebSocketImpl.h +// +// Library: Net +// Package: WebSocket +// Module: WebSocketImpl +// +// Definition of the StreamSocketImpl class. +// +// Copyright (c) 2012, Applied Informatics Software Engineering GmbH. +// and Contributors. +// +// SPDX-License-Identifier: BSL-1.0 +// + + +#ifndef Net_WebSocketImpl_INCLUDED +#define Net_WebSocketImpl_INCLUDED + + +#include "Poco/Net/StreamSocketImpl.h" +#include "Poco/Buffer.h" +#include "Poco/Random.h" +#include "Poco/Buffer.h" + + +namespace Poco { +namespace Net { + + +class HTTPSession; + + +class Net_API WebSocketImpl: public StreamSocketImpl + /// This class implements a WebSocket, according + /// to the WebSocket protocol described in RFC 6455. +{ +public: + WebSocketImpl(StreamSocketImpl* pStreamSocketImpl, HTTPSession& session, bool mustMaskPayload); + /// Creates a WebSocketImpl. + + // StreamSocketImpl + virtual int sendBytes(const void* buffer, int length, int flags); + /// Sends a WebSocket protocol frame. + + virtual int receiveBytes(void* buffer, int length, int flags); + /// Receives a WebSocket protocol frame. + + virtual int receiveBytes(Poco::Buffer<char>& buffer, int flags); + /// Receives a WebSocket protocol frame. + + virtual SocketImpl* acceptConnection(SocketAddress& clientAddr); + virtual void connect(const SocketAddress& address); + virtual void connect(const SocketAddress& address, const Poco::Timespan& timeout); + virtual void connectNB(const SocketAddress& address); + virtual void bind(const SocketAddress& address, bool reuseAddress = false); + virtual void bind(const SocketAddress& address, bool reuseAddress, bool reusePort); + virtual void bind6(const SocketAddress& address, bool reuseAddress = false, bool ipV6Only = false); + virtual void bind6(const SocketAddress& address, bool reuseAddress, bool reusePort, bool ipV6Only); + virtual void listen(int backlog = 64); + virtual void close(); + virtual void shutdownReceive(); + virtual void shutdownSend(); + virtual void shutdown(); + virtual int sendTo(const void* buffer, int length, const SocketAddress& address, int flags = 0); + virtual int receiveFrom(void* buffer, int length, SocketAddress& address, int flags = 0); + virtual void sendUrgent(unsigned char data); + virtual int available(); + virtual bool secure() const; + virtual void setSendTimeout(const Poco::Timespan& timeout); + virtual Poco::Timespan getSendTimeout(); + virtual void setReceiveTimeout(const Poco::Timespan& timeout); + virtual Poco::Timespan getReceiveTimeout(); + + // Internal + int frameFlags() const; + /// Returns the frame flags of the most recently received frame. + + bool mustMaskPayload() const; + /// Returns true if the payload must be masked. + + void setMaxPayloadSize(int maxPayloadSize); + /// Sets the maximum payload size for receiveFrame(). + /// + /// The default is std::numeric_limits<int>::max(). + + int getMaxPayloadSize() const; + /// Returns the maximum payload size for receiveFrame(). + /// + /// The default is std::numeric_limits<int>::max(). + +protected: + enum + { + FRAME_FLAG_MASK = 0x80, + MAX_HEADER_LENGTH = 14 + }; + + int receiveHeader(char mask[4], bool& useMask); + int receivePayload(char *buffer, int payloadLength, char mask[4], bool useMask); + int receiveNBytes(void* buffer, int bytes); + int receiveSomeBytes(char* buffer, int bytes); + virtual ~WebSocketImpl(); + +private: + WebSocketImpl(); + + StreamSocketImpl* _pStreamSocketImpl; + int _maxPayloadSize; + Poco::Buffer<char> _buffer; + int _bufferOffset; + int _frameFlags; + bool _mustMaskPayload; + Poco::Random _rnd; +}; + + +// +// inlines +// +inline int WebSocketImpl::frameFlags() const +{ + return _frameFlags; +} + + +inline bool WebSocketImpl::mustMaskPayload() const +{ + return _mustMaskPayload; +} + + +inline int WebSocketImpl::getMaxPayloadSize() const +{ + return _maxPayloadSize; +} + + +} } // namespace Poco::Net + + +#endif // Net_WebSocketImpl_INCLUDED |