diff options
Diffstat (limited to 'lib/asio/generic')
-rw-r--r-- | lib/asio/generic/basic_endpoint.hpp | 193 | ||||
-rw-r--r-- | lib/asio/generic/datagram_protocol.hpp | 123 | ||||
-rw-r--r-- | lib/asio/generic/detail/endpoint.hpp | 133 | ||||
-rw-r--r-- | lib/asio/generic/detail/impl/endpoint.ipp | 110 | ||||
-rw-r--r-- | lib/asio/generic/raw_protocol.hpp | 121 | ||||
-rw-r--r-- | lib/asio/generic/seq_packet_protocol.hpp | 122 | ||||
-rw-r--r-- | lib/asio/generic/stream_protocol.hpp | 127 |
7 files changed, 0 insertions, 929 deletions
diff --git a/lib/asio/generic/basic_endpoint.hpp b/lib/asio/generic/basic_endpoint.hpp deleted file mode 100644 index 73aa151..0000000 --- a/lib/asio/generic/basic_endpoint.hpp +++ /dev/null @@ -1,193 +0,0 @@ -// -// generic/basic_endpoint.hpp -// ~~~~~~~~~~~~~~~~~~~~~~~~~~ -// -// Copyright (c) 2003-2018 Christopher M. Kohlhoff (chris at kohlhoff dot com) -// -// Distributed under the Boost Software License, Version 1.0. (See accompanying -// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) -// - -#ifndef ASIO_GENERIC_BASIC_ENDPOINT_HPP -#define ASIO_GENERIC_BASIC_ENDPOINT_HPP - -#if defined(_MSC_VER) && (_MSC_VER >= 1200) -# pragma once -#endif // defined(_MSC_VER) && (_MSC_VER >= 1200) - -#include "asio/detail/config.hpp" -#include "asio/generic/detail/endpoint.hpp" - -#include "asio/detail/push_options.hpp" - -namespace asio { -namespace generic { - -/// Describes an endpoint for any socket type. -/** - * The asio::generic::basic_endpoint class template describes an endpoint - * that may be associated with any socket type. - * - * @note The socket types sockaddr type must be able to fit into a - * @c sockaddr_storage structure. - * - * @par Thread Safety - * @e Distinct @e objects: Safe.@n - * @e Shared @e objects: Unsafe. - * - * @par Concepts: - * Endpoint. - */ -template <typename Protocol> -class basic_endpoint -{ -public: - /// The protocol type associated with the endpoint. - typedef Protocol protocol_type; - - /// The type of the endpoint structure. This type is dependent on the - /// underlying implementation of the socket layer. -#if defined(GENERATING_DOCUMENTATION) - typedef implementation_defined data_type; -#else - typedef asio::detail::socket_addr_type data_type; -#endif - - /// Default constructor. - basic_endpoint() - { - } - - /// Construct an endpoint from the specified socket address. - basic_endpoint(const void* socket_address, - std::size_t socket_address_size, int socket_protocol = 0) - : impl_(socket_address, socket_address_size, socket_protocol) - { - } - - /// Construct an endpoint from the specific endpoint type. - template <typename Endpoint> - basic_endpoint(const Endpoint& endpoint) - : impl_(endpoint.data(), endpoint.size(), endpoint.protocol().protocol()) - { - } - - /// Copy constructor. - basic_endpoint(const basic_endpoint& other) - : impl_(other.impl_) - { - } - -#if defined(ASIO_HAS_MOVE) - /// Move constructor. - basic_endpoint(basic_endpoint&& other) - : impl_(other.impl_) - { - } -#endif // defined(ASIO_HAS_MOVE) - - /// Assign from another endpoint. - basic_endpoint& operator=(const basic_endpoint& other) - { - impl_ = other.impl_; - return *this; - } - -#if defined(ASIO_HAS_MOVE) - /// Move-assign from another endpoint. - basic_endpoint& operator=(basic_endpoint&& other) - { - impl_ = other.impl_; - return *this; - } -#endif // defined(ASIO_HAS_MOVE) - - /// The protocol associated with the endpoint. - protocol_type protocol() const - { - return protocol_type(impl_.family(), impl_.protocol()); - } - - /// Get the underlying endpoint in the native type. - data_type* data() - { - return impl_.data(); - } - - /// Get the underlying endpoint in the native type. - const data_type* data() const - { - return impl_.data(); - } - - /// Get the underlying size of the endpoint in the native type. - std::size_t size() const - { - return impl_.size(); - } - - /// Set the underlying size of the endpoint in the native type. - void resize(std::size_t new_size) - { - impl_.resize(new_size); - } - - /// Get the capacity of the endpoint in the native type. - std::size_t capacity() const - { - return impl_.capacity(); - } - - /// Compare two endpoints for equality. - friend bool operator==(const basic_endpoint<Protocol>& e1, - const basic_endpoint<Protocol>& e2) - { - return e1.impl_ == e2.impl_; - } - - /// Compare two endpoints for inequality. - friend bool operator!=(const basic_endpoint<Protocol>& e1, - const basic_endpoint<Protocol>& e2) - { - return !(e1.impl_ == e2.impl_); - } - - /// Compare endpoints for ordering. - friend bool operator<(const basic_endpoint<Protocol>& e1, - const basic_endpoint<Protocol>& e2) - { - return e1.impl_ < e2.impl_; - } - - /// Compare endpoints for ordering. - friend bool operator>(const basic_endpoint<Protocol>& e1, - const basic_endpoint<Protocol>& e2) - { - return e2.impl_ < e1.impl_; - } - - /// Compare endpoints for ordering. - friend bool operator<=(const basic_endpoint<Protocol>& e1, - const basic_endpoint<Protocol>& e2) - { - return !(e2 < e1); - } - - /// Compare endpoints for ordering. - friend bool operator>=(const basic_endpoint<Protocol>& e1, - const basic_endpoint<Protocol>& e2) - { - return !(e1 < e2); - } - -private: - // The underlying generic endpoint. - asio::generic::detail::endpoint impl_; -}; - -} // namespace generic -} // namespace asio - -#include "asio/detail/pop_options.hpp" - -#endif // ASIO_GENERIC_BASIC_ENDPOINT_HPP diff --git a/lib/asio/generic/datagram_protocol.hpp b/lib/asio/generic/datagram_protocol.hpp deleted file mode 100644 index 8678ad8..0000000 --- a/lib/asio/generic/datagram_protocol.hpp +++ /dev/null @@ -1,123 +0,0 @@ -// -// generic/datagram_protocol.hpp -// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -// -// Copyright (c) 2003-2018 Christopher M. Kohlhoff (chris at kohlhoff dot com) -// -// Distributed under the Boost Software License, Version 1.0. (See accompanying -// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) -// - -#ifndef ASIO_GENERIC_DATAGRAM_PROTOCOL_HPP -#define ASIO_GENERIC_DATAGRAM_PROTOCOL_HPP - -#if defined(_MSC_VER) && (_MSC_VER >= 1200) -# pragma once -#endif // defined(_MSC_VER) && (_MSC_VER >= 1200) - -#include "asio/detail/config.hpp" - -#include <typeinfo> -#include "asio/basic_datagram_socket.hpp" -#include "asio/detail/socket_types.hpp" -#include "asio/detail/throw_exception.hpp" -#include "asio/generic/basic_endpoint.hpp" - -#include "asio/detail/push_options.hpp" - -namespace asio { -namespace generic { - -/// Encapsulates the flags needed for a generic datagram-oriented socket. -/** - * The asio::generic::datagram_protocol class contains flags necessary - * for datagram-oriented sockets of any address family and protocol. - * - * @par Examples - * Constructing using a native address family and socket protocol: - * @code datagram_protocol p(AF_INET, IPPROTO_UDP); @endcode - * Constructing from a specific protocol type: - * @code datagram_protocol p(asio::ip::udp::v4()); @endcode - * - * @par Thread Safety - * @e Distinct @e objects: Safe.@n - * @e Shared @e objects: Safe. - * - * @par Concepts: - * Protocol. - */ -class datagram_protocol -{ -public: - /// Construct a protocol object for a specific address family and protocol. - datagram_protocol(int address_family, int socket_protocol) - : family_(address_family), - protocol_(socket_protocol) - { - } - - /// Construct a generic protocol object from a specific protocol. - /** - * @throws @c bad_cast Thrown if the source protocol is not datagram-oriented. - */ - template <typename Protocol> - datagram_protocol(const Protocol& source_protocol) - : family_(source_protocol.family()), - protocol_(source_protocol.protocol()) - { - if (source_protocol.type() != type()) - { - std::bad_cast ex; - asio::detail::throw_exception(ex); - } - } - - /// Obtain an identifier for the type of the protocol. - int type() const - { - return ASIO_OS_DEF(SOCK_DGRAM); - } - - /// Obtain an identifier for the protocol. - int protocol() const - { - return protocol_; - } - - /// Obtain an identifier for the protocol family. - int family() const - { - return family_; - } - - /// Compare two protocols for equality. - friend bool operator==(const datagram_protocol& p1, - const datagram_protocol& p2) - { - return p1.family_ == p2.family_ && p1.protocol_ == p2.protocol_; - } - - /// Compare two protocols for inequality. - friend bool operator!=(const datagram_protocol& p1, - const datagram_protocol& p2) - { - return !(p1 == p2); - } - - /// The type of an endpoint. - typedef basic_endpoint<datagram_protocol> endpoint; - - /// The generic socket type. - typedef basic_datagram_socket<datagram_protocol> socket; - -private: - int family_; - int protocol_; -}; - -} // namespace generic -} // namespace asio - -#include "asio/detail/pop_options.hpp" - -#endif // ASIO_GENERIC_DATAGRAM_PROTOCOL_HPP diff --git a/lib/asio/generic/detail/endpoint.hpp b/lib/asio/generic/detail/endpoint.hpp deleted file mode 100644 index 190beb1..0000000 --- a/lib/asio/generic/detail/endpoint.hpp +++ /dev/null @@ -1,133 +0,0 @@ -// -// generic/detail/endpoint.hpp -// ~~~~~~~~~~~~~~~~~~~~~~~~~~~ -// -// Copyright (c) 2003-2018 Christopher M. Kohlhoff (chris at kohlhoff dot com) -// -// Distributed under the Boost Software License, Version 1.0. (See accompanying -// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) -// - -#ifndef ASIO_GENERIC_DETAIL_ENDPOINT_HPP -#define ASIO_GENERIC_DETAIL_ENDPOINT_HPP - -#if defined(_MSC_VER) && (_MSC_VER >= 1200) -# pragma once -#endif // defined(_MSC_VER) && (_MSC_VER >= 1200) - -#include "asio/detail/config.hpp" - -#include <cstddef> -#include "asio/detail/socket_types.hpp" - -#include "asio/detail/push_options.hpp" - -namespace asio { -namespace generic { -namespace detail { - -// Helper class for implementing a generic socket endpoint. -class endpoint -{ -public: - // Default constructor. - ASIO_DECL endpoint(); - - // Construct an endpoint from the specified raw bytes. - ASIO_DECL endpoint(const void* sock_addr, - std::size_t sock_addr_size, int sock_protocol); - - // Copy constructor. - endpoint(const endpoint& other) - : data_(other.data_), - size_(other.size_), - protocol_(other.protocol_) - { - } - - // Assign from another endpoint. - endpoint& operator=(const endpoint& other) - { - data_ = other.data_; - size_ = other.size_; - protocol_ = other.protocol_; - return *this; - } - - // Get the address family associated with the endpoint. - int family() const - { - return data_.base.sa_family; - } - - // Get the socket protocol associated with the endpoint. - int protocol() const - { - return protocol_; - } - - // Get the underlying endpoint in the native type. - asio::detail::socket_addr_type* data() - { - return &data_.base; - } - - // Get the underlying endpoint in the native type. - const asio::detail::socket_addr_type* data() const - { - return &data_.base; - } - - // Get the underlying size of the endpoint in the native type. - std::size_t size() const - { - return size_; - } - - // Set the underlying size of the endpoint in the native type. - ASIO_DECL void resize(std::size_t size); - - // Get the capacity of the endpoint in the native type. - std::size_t capacity() const - { - return sizeof(asio::detail::sockaddr_storage_type); - } - - // Compare two endpoints for equality. - ASIO_DECL friend bool operator==( - const endpoint& e1, const endpoint& e2); - - // Compare endpoints for ordering. - ASIO_DECL friend bool operator<( - const endpoint& e1, const endpoint& e2); - -private: - // The underlying socket address. - union data_union - { - asio::detail::socket_addr_type base; - asio::detail::sockaddr_storage_type generic; - } data_; - - // The length of the socket address stored in the endpoint. - std::size_t size_; - - // The socket protocol associated with the endpoint. - int protocol_; - - // Initialise with a specified memory. - ASIO_DECL void init(const void* sock_addr, - std::size_t sock_addr_size, int sock_protocol); -}; - -} // namespace detail -} // namespace generic -} // namespace asio - -#include "asio/detail/pop_options.hpp" - -#if defined(ASIO_HEADER_ONLY) -# include "asio/generic/detail/impl/endpoint.ipp" -#endif // defined(ASIO_HEADER_ONLY) - -#endif // ASIO_GENERIC_DETAIL_ENDPOINT_HPP diff --git a/lib/asio/generic/detail/impl/endpoint.ipp b/lib/asio/generic/detail/impl/endpoint.ipp deleted file mode 100644 index 227ffe1..0000000 --- a/lib/asio/generic/detail/impl/endpoint.ipp +++ /dev/null @@ -1,110 +0,0 @@ -// -// generic/detail/impl/endpoint.hpp -// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -// -// Copyright (c) 2003-2018 Christopher M. Kohlhoff (chris at kohlhoff dot com) -// -// Distributed under the Boost Software License, Version 1.0. (See accompanying -// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) -// - -#ifndef ASIO_GENERIC_DETAIL_IMPL_ENDPOINT_IPP -#define ASIO_GENERIC_DETAIL_IMPL_ENDPOINT_IPP - -#if defined(_MSC_VER) && (_MSC_VER >= 1200) -# pragma once -#endif // defined(_MSC_VER) && (_MSC_VER >= 1200) - -#include "asio/detail/config.hpp" - -#include <cstring> -#include <typeinfo> -#include "asio/detail/socket_ops.hpp" -#include "asio/detail/throw_error.hpp" -#include "asio/detail/throw_exception.hpp" -#include "asio/error.hpp" -#include "asio/generic/detail/endpoint.hpp" - -#include "asio/detail/push_options.hpp" - -namespace asio { -namespace generic { -namespace detail { - -endpoint::endpoint() -{ - init(0, 0, 0); -} - -endpoint::endpoint(const void* sock_addr, - std::size_t sock_addr_size, int sock_protocol) -{ - init(sock_addr, sock_addr_size, sock_protocol); -} - -void endpoint::resize(std::size_t new_size) -{ - if (new_size > sizeof(asio::detail::sockaddr_storage_type)) - { - asio::error_code ec(asio::error::invalid_argument); - asio::detail::throw_error(ec); - } - else - { - size_ = new_size; - protocol_ = 0; - } -} - -bool operator==(const endpoint& e1, const endpoint& e2) -{ - using namespace std; // For memcmp. - return e1.size() == e2.size() && memcmp(e1.data(), e2.data(), e1.size()) == 0; -} - -bool operator<(const endpoint& e1, const endpoint& e2) -{ - if (e1.protocol() < e2.protocol()) - return true; - - if (e1.protocol() > e2.protocol()) - return false; - - using namespace std; // For memcmp. - std::size_t compare_size = e1.size() < e2.size() ? e1.size() : e2.size(); - int compare_result = memcmp(e1.data(), e2.data(), compare_size); - - if (compare_result < 0) - return true; - - if (compare_result > 0) - return false; - - return e1.size() < e2.size(); -} - -void endpoint::init(const void* sock_addr, - std::size_t sock_addr_size, int sock_protocol) -{ - if (sock_addr_size > sizeof(asio::detail::sockaddr_storage_type)) - { - asio::error_code ec(asio::error::invalid_argument); - asio::detail::throw_error(ec); - } - - using namespace std; // For memset and memcpy. - memset(&data_.generic, 0, sizeof(asio::detail::sockaddr_storage_type)); - if (sock_addr_size > 0) - memcpy(&data_.generic, sock_addr, sock_addr_size); - - size_ = sock_addr_size; - protocol_ = sock_protocol; -} - -} // namespace detail -} // namespace generic -} // namespace asio - -#include "asio/detail/pop_options.hpp" - -#endif // ASIO_GENERIC_DETAIL_IMPL_ENDPOINT_IPP diff --git a/lib/asio/generic/raw_protocol.hpp b/lib/asio/generic/raw_protocol.hpp deleted file mode 100644 index b83dca6..0000000 --- a/lib/asio/generic/raw_protocol.hpp +++ /dev/null @@ -1,121 +0,0 @@ -// -// generic/raw_protocol.hpp -// ~~~~~~~~~~~~~~~~~~~~~~~~ -// -// Copyright (c) 2003-2018 Christopher M. Kohlhoff (chris at kohlhoff dot com) -// -// Distributed under the Boost Software License, Version 1.0. (See accompanying -// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) -// - -#ifndef ASIO_GENERIC_RAW_PROTOCOL_HPP -#define ASIO_GENERIC_RAW_PROTOCOL_HPP - -#if defined(_MSC_VER) && (_MSC_VER >= 1200) -# pragma once -#endif // defined(_MSC_VER) && (_MSC_VER >= 1200) - -#include "asio/detail/config.hpp" - -#include <typeinfo> -#include "asio/basic_raw_socket.hpp" -#include "asio/detail/socket_types.hpp" -#include "asio/detail/throw_exception.hpp" -#include "asio/generic/basic_endpoint.hpp" - -#include "asio/detail/push_options.hpp" - -namespace asio { -namespace generic { - -/// Encapsulates the flags needed for a generic raw socket. -/** - * The asio::generic::raw_protocol class contains flags necessary for - * raw sockets of any address family and protocol. - * - * @par Examples - * Constructing using a native address family and socket protocol: - * @code raw_protocol p(AF_INET, IPPROTO_ICMP); @endcode - * Constructing from a specific protocol type: - * @code raw_protocol p(asio::ip::icmp::v4()); @endcode - * - * @par Thread Safety - * @e Distinct @e objects: Safe.@n - * @e Shared @e objects: Safe. - * - * @par Concepts: - * Protocol. - */ -class raw_protocol -{ -public: - /// Construct a protocol object for a specific address family and protocol. - raw_protocol(int address_family, int socket_protocol) - : family_(address_family), - protocol_(socket_protocol) - { - } - - /// Construct a generic protocol object from a specific protocol. - /** - * @throws @c bad_cast Thrown if the source protocol is not raw-oriented. - */ - template <typename Protocol> - raw_protocol(const Protocol& source_protocol) - : family_(source_protocol.family()), - protocol_(source_protocol.protocol()) - { - if (source_protocol.type() != type()) - { - std::bad_cast ex; - asio::detail::throw_exception(ex); - } - } - - /// Obtain an identifier for the type of the protocol. - int type() const - { - return ASIO_OS_DEF(SOCK_RAW); - } - - /// Obtain an identifier for the protocol. - int protocol() const - { - return protocol_; - } - - /// Obtain an identifier for the protocol family. - int family() const - { - return family_; - } - - /// Compare two protocols for equality. - friend bool operator==(const raw_protocol& p1, const raw_protocol& p2) - { - return p1.family_ == p2.family_ && p1.protocol_ == p2.protocol_; - } - - /// Compare two protocols for inequality. - friend bool operator!=(const raw_protocol& p1, const raw_protocol& p2) - { - return !(p1 == p2); - } - - /// The type of an endpoint. - typedef basic_endpoint<raw_protocol> endpoint; - - /// The generic socket type. - typedef basic_raw_socket<raw_protocol> socket; - -private: - int family_; - int protocol_; -}; - -} // namespace generic -} // namespace asio - -#include "asio/detail/pop_options.hpp" - -#endif // ASIO_GENERIC_RAW_PROTOCOL_HPP diff --git a/lib/asio/generic/seq_packet_protocol.hpp b/lib/asio/generic/seq_packet_protocol.hpp deleted file mode 100644 index f92a4c8..0000000 --- a/lib/asio/generic/seq_packet_protocol.hpp +++ /dev/null @@ -1,122 +0,0 @@ -// -// generic/seq_packet_protocol.hpp -// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -// -// Copyright (c) 2003-2018 Christopher M. Kohlhoff (chris at kohlhoff dot com) -// -// Distributed under the Boost Software License, Version 1.0. (See accompanying -// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) -// - -#ifndef ASIO_GENERIC_SEQ_PACKET_PROTOCOL_HPP -#define ASIO_GENERIC_SEQ_PACKET_PROTOCOL_HPP - -#if defined(_MSC_VER) && (_MSC_VER >= 1200) -# pragma once -#endif // defined(_MSC_VER) && (_MSC_VER >= 1200) - -#include "asio/detail/config.hpp" - -#include <typeinfo> -#include "asio/basic_seq_packet_socket.hpp" -#include "asio/detail/socket_types.hpp" -#include "asio/detail/throw_exception.hpp" -#include "asio/generic/basic_endpoint.hpp" - -#include "asio/detail/push_options.hpp" - -namespace asio { -namespace generic { - -/// Encapsulates the flags needed for a generic sequenced packet socket. -/** - * The asio::generic::seq_packet_protocol class contains flags necessary - * for seq_packet-oriented sockets of any address family and protocol. - * - * @par Examples - * Constructing using a native address family and socket protocol: - * @code seq_packet_protocol p(AF_INET, IPPROTO_SCTP); @endcode - * - * @par Thread Safety - * @e Distinct @e objects: Safe.@n - * @e Shared @e objects: Safe. - * - * @par Concepts: - * Protocol. - */ -class seq_packet_protocol -{ -public: - /// Construct a protocol object for a specific address family and protocol. - seq_packet_protocol(int address_family, int socket_protocol) - : family_(address_family), - protocol_(socket_protocol) - { - } - - /// Construct a generic protocol object from a specific protocol. - /** - * @throws @c bad_cast Thrown if the source protocol is not based around - * sequenced packets. - */ - template <typename Protocol> - seq_packet_protocol(const Protocol& source_protocol) - : family_(source_protocol.family()), - protocol_(source_protocol.protocol()) - { - if (source_protocol.type() != type()) - { - std::bad_cast ex; - asio::detail::throw_exception(ex); - } - } - - /// Obtain an identifier for the type of the protocol. - int type() const - { - return ASIO_OS_DEF(SOCK_SEQPACKET); - } - - /// Obtain an identifier for the protocol. - int protocol() const - { - return protocol_; - } - - /// Obtain an identifier for the protocol family. - int family() const - { - return family_; - } - - /// Compare two protocols for equality. - friend bool operator==(const seq_packet_protocol& p1, - const seq_packet_protocol& p2) - { - return p1.family_ == p2.family_ && p1.protocol_ == p2.protocol_; - } - - /// Compare two protocols for inequality. - friend bool operator!=(const seq_packet_protocol& p1, - const seq_packet_protocol& p2) - { - return !(p1 == p2); - } - - /// The type of an endpoint. - typedef basic_endpoint<seq_packet_protocol> endpoint; - - /// The generic socket type. - typedef basic_seq_packet_socket<seq_packet_protocol> socket; - -private: - int family_; - int protocol_; -}; - -} // namespace generic -} // namespace asio - -#include "asio/detail/pop_options.hpp" - -#endif // ASIO_GENERIC_SEQ_PACKET_PROTOCOL_HPP diff --git a/lib/asio/generic/stream_protocol.hpp b/lib/asio/generic/stream_protocol.hpp deleted file mode 100644 index 8349f25..0000000 --- a/lib/asio/generic/stream_protocol.hpp +++ /dev/null @@ -1,127 +0,0 @@ -// -// generic/stream_protocol.hpp -// ~~~~~~~~~~~~~~~~~~~~~~~~~~~ -// -// Copyright (c) 2003-2018 Christopher M. Kohlhoff (chris at kohlhoff dot com) -// -// Distributed under the Boost Software License, Version 1.0. (See accompanying -// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) -// - -#ifndef ASIO_GENERIC_STREAM_PROTOCOL_HPP -#define ASIO_GENERIC_STREAM_PROTOCOL_HPP - -#if defined(_MSC_VER) && (_MSC_VER >= 1200) -# pragma once -#endif // defined(_MSC_VER) && (_MSC_VER >= 1200) - -#include "asio/detail/config.hpp" - -#include <typeinfo> -#include "asio/basic_socket_iostream.hpp" -#include "asio/basic_stream_socket.hpp" -#include "asio/detail/socket_types.hpp" -#include "asio/detail/throw_exception.hpp" -#include "asio/generic/basic_endpoint.hpp" - -#include "asio/detail/push_options.hpp" - -namespace asio { -namespace generic { - -/// Encapsulates the flags needed for a generic stream-oriented socket. -/** - * The asio::generic::stream_protocol class contains flags necessary for - * stream-oriented sockets of any address family and protocol. - * - * @par Examples - * Constructing using a native address family and socket protocol: - * @code stream_protocol p(AF_INET, IPPROTO_TCP); @endcode - * Constructing from a specific protocol type: - * @code stream_protocol p(asio::ip::tcp::v4()); @endcode - * - * @par Thread Safety - * @e Distinct @e objects: Safe.@n - * @e Shared @e objects: Safe. - * - * @par Concepts: - * Protocol. - */ -class stream_protocol -{ -public: - /// Construct a protocol object for a specific address family and protocol. - stream_protocol(int address_family, int socket_protocol) - : family_(address_family), - protocol_(socket_protocol) - { - } - - /// Construct a generic protocol object from a specific protocol. - /** - * @throws @c bad_cast Thrown if the source protocol is not stream-oriented. - */ - template <typename Protocol> - stream_protocol(const Protocol& source_protocol) - : family_(source_protocol.family()), - protocol_(source_protocol.protocol()) - { - if (source_protocol.type() != type()) - { - std::bad_cast ex; - asio::detail::throw_exception(ex); - } - } - - /// Obtain an identifier for the type of the protocol. - int type() const - { - return ASIO_OS_DEF(SOCK_STREAM); - } - - /// Obtain an identifier for the protocol. - int protocol() const - { - return protocol_; - } - - /// Obtain an identifier for the protocol family. - int family() const - { - return family_; - } - - /// Compare two protocols for equality. - friend bool operator==(const stream_protocol& p1, const stream_protocol& p2) - { - return p1.family_ == p2.family_ && p1.protocol_ == p2.protocol_; - } - - /// Compare two protocols for inequality. - friend bool operator!=(const stream_protocol& p1, const stream_protocol& p2) - { - return !(p1 == p2); - } - - /// The type of an endpoint. - typedef basic_endpoint<stream_protocol> endpoint; - - /// The generic socket type. - typedef basic_stream_socket<stream_protocol> socket; - -#if !defined(ASIO_NO_IOSTREAM) - /// The generic socket iostream type. - typedef basic_socket_iostream<stream_protocol> iostream; -#endif // !defined(ASIO_NO_IOSTREAM) - -private: - int family_; - int protocol_; -}; - -} // namespace generic -} // namespace asio - -#include "asio/detail/pop_options.hpp" - -#endif // ASIO_GENERIC_STREAM_PROTOCOL_HPP |