Chris@16: // Chris@16: // ip/icmp.hpp Chris@16: // ~~~~~~~~~~~ Chris@16: // Chris@101: // Copyright (c) 2003-2015 Christopher M. Kohlhoff (chris at kohlhoff dot com) Chris@16: // Chris@16: // Distributed under the Boost Software License, Version 1.0. (See accompanying Chris@16: // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) Chris@16: // Chris@16: Chris@16: #ifndef BOOST_ASIO_IP_ICMP_HPP Chris@16: #define BOOST_ASIO_IP_ICMP_HPP Chris@16: Chris@16: #if defined(_MSC_VER) && (_MSC_VER >= 1200) Chris@16: # pragma once Chris@16: #endif // defined(_MSC_VER) && (_MSC_VER >= 1200) Chris@16: Chris@16: #include Chris@16: #include Chris@16: #include Chris@16: #include Chris@16: #include Chris@16: #include Chris@16: #include Chris@16: Chris@16: #include Chris@16: Chris@16: namespace boost { Chris@16: namespace asio { Chris@16: namespace ip { Chris@16: Chris@16: /// Encapsulates the flags needed for ICMP. Chris@16: /** Chris@16: * The boost::asio::ip::icmp class contains flags necessary for ICMP sockets. Chris@16: * Chris@16: * @par Thread Safety Chris@16: * @e Distinct @e objects: Safe.@n Chris@16: * @e Shared @e objects: Safe. Chris@16: * Chris@16: * @par Concepts: Chris@16: * Protocol, InternetProtocol. Chris@16: */ Chris@16: class icmp Chris@16: { Chris@16: public: Chris@16: /// The type of a ICMP endpoint. Chris@16: typedef basic_endpoint endpoint; Chris@16: Chris@16: /// Construct to represent the IPv4 ICMP protocol. Chris@16: static icmp v4() Chris@16: { Chris@16: return icmp(BOOST_ASIO_OS_DEF(IPPROTO_ICMP), Chris@16: BOOST_ASIO_OS_DEF(AF_INET)); Chris@16: } Chris@16: Chris@16: /// Construct to represent the IPv6 ICMP protocol. Chris@16: static icmp v6() Chris@16: { Chris@16: return icmp(BOOST_ASIO_OS_DEF(IPPROTO_ICMPV6), Chris@16: BOOST_ASIO_OS_DEF(AF_INET6)); Chris@16: } Chris@16: Chris@16: /// Obtain an identifier for the type of the protocol. Chris@16: int type() const Chris@16: { Chris@16: return BOOST_ASIO_OS_DEF(SOCK_RAW); Chris@16: } Chris@16: Chris@16: /// Obtain an identifier for the protocol. Chris@16: int protocol() const Chris@16: { Chris@16: return protocol_; Chris@16: } Chris@16: Chris@16: /// Obtain an identifier for the protocol family. Chris@16: int family() const Chris@16: { Chris@16: return family_; Chris@16: } Chris@16: Chris@16: /// The ICMP socket type. Chris@16: typedef basic_raw_socket socket; Chris@16: Chris@16: /// The ICMP resolver type. Chris@16: typedef basic_resolver resolver; Chris@16: Chris@16: /// Compare two protocols for equality. Chris@16: friend bool operator==(const icmp& p1, const icmp& p2) Chris@16: { Chris@16: return p1.protocol_ == p2.protocol_ && p1.family_ == p2.family_; Chris@16: } Chris@16: Chris@16: /// Compare two protocols for inequality. Chris@16: friend bool operator!=(const icmp& p1, const icmp& p2) Chris@16: { Chris@16: return p1.protocol_ != p2.protocol_ || p1.family_ != p2.family_; Chris@16: } Chris@16: Chris@16: private: Chris@16: // Construct with a specific family. Chris@16: explicit icmp(int protocol_id, int protocol_family) Chris@16: : protocol_(protocol_id), Chris@16: family_(protocol_family) Chris@16: { Chris@16: } Chris@16: Chris@16: int protocol_; Chris@16: int family_; Chris@16: }; Chris@16: Chris@16: } // namespace ip Chris@16: } // namespace asio Chris@16: } // namespace boost Chris@16: Chris@16: #include Chris@16: Chris@16: #endif // BOOST_ASIO_IP_ICMP_HPP