Statistics
| Revision:

root / tmp / org.txm.statsengine.r.core.win32 / res / win32 / library / BH / include / boost / asio / ip / icmp.hpp @ 2486

History | View | Annotate | Download (2.7 kB)

1
//
2
// ip/icmp.hpp
3
// ~~~~~~~~~~~
4
//
5
// Copyright (c) 2003-2015 Christopher M. Kohlhoff (chris at kohlhoff dot com)
6
//
7
// Distributed under the Boost Software License, Version 1.0. (See accompanying
8
// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
9
//
10

    
11
#ifndef BOOST_ASIO_IP_ICMP_HPP
12
#define BOOST_ASIO_IP_ICMP_HPP
13

    
14
#if defined(_MSC_VER) && (_MSC_VER >= 1200)
15
# pragma once
16
#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
17

    
18
#include <boost/asio/detail/config.hpp>
19
#include <boost/asio/detail/socket_types.hpp>
20
#include <boost/asio/basic_raw_socket.hpp>
21
#include <boost/asio/ip/basic_endpoint.hpp>
22
#include <boost/asio/ip/basic_resolver.hpp>
23
#include <boost/asio/ip/basic_resolver_iterator.hpp>
24
#include <boost/asio/ip/basic_resolver_query.hpp>
25

    
26
#include <boost/asio/detail/push_options.hpp>
27

    
28
namespace boost {
29
namespace asio {
30
namespace ip {
31

    
32
/// Encapsulates the flags needed for ICMP.
33
/**
34
 * The boost::asio::ip::icmp class contains flags necessary for ICMP sockets.
35
 *
36
 * @par Thread Safety
37
 * @e Distinct @e objects: Safe.@n
38
 * @e Shared @e objects: Safe.
39
 *
40
 * @par Concepts:
41
 * Protocol, InternetProtocol.
42
 */
43
class icmp
44
{
45
public:
46
  /// The type of a ICMP endpoint.
47
  typedef basic_endpoint<icmp> endpoint;
48

    
49
  /// Construct to represent the IPv4 ICMP protocol.
50
  static icmp v4()
51
  {
52
    return icmp(BOOST_ASIO_OS_DEF(IPPROTO_ICMP),
53
        BOOST_ASIO_OS_DEF(AF_INET));
54
  }
55

    
56
  /// Construct to represent the IPv6 ICMP protocol.
57
  static icmp v6()
58
  {
59
    return icmp(BOOST_ASIO_OS_DEF(IPPROTO_ICMPV6),
60
        BOOST_ASIO_OS_DEF(AF_INET6));
61
  }
62

    
63
  /// Obtain an identifier for the type of the protocol.
64
  int type() const
65
  {
66
    return BOOST_ASIO_OS_DEF(SOCK_RAW);
67
  }
68

    
69
  /// Obtain an identifier for the protocol.
70
  int protocol() const
71
  {
72
    return protocol_;
73
  }
74

    
75
  /// Obtain an identifier for the protocol family.
76
  int family() const
77
  {
78
    return family_;
79
  }
80

    
81
  /// The ICMP socket type.
82
  typedef basic_raw_socket<icmp> socket;
83

    
84
  /// The ICMP resolver type.
85
  typedef basic_resolver<icmp> resolver;
86

    
87
  /// Compare two protocols for equality.
88
  friend bool operator==(const icmp& p1, const icmp& p2)
89
  {
90
    return p1.protocol_ == p2.protocol_ && p1.family_ == p2.family_;
91
  }
92

    
93
  /// Compare two protocols for inequality.
94
  friend bool operator!=(const icmp& p1, const icmp& p2)
95
  {
96
    return p1.protocol_ != p2.protocol_ || p1.family_ != p2.family_;
97
  }
98

    
99
private:
100
  // Construct with a specific family.
101
  explicit icmp(int protocol_id, int protocol_family)
102
    : protocol_(protocol_id),
103
      family_(protocol_family)
104
  {
105
  }
106

    
107
  int protocol_;
108
  int family_;
109
};
110

    
111
} // namespace ip
112
} // namespace asio
113
} // namespace boost
114

    
115
#include <boost/asio/detail/pop_options.hpp>
116

    
117
#endif // BOOST_ASIO_IP_ICMP_HPP