NetCpp  v0.2
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Macros Pages
protocol.hpp
Go to the documentation of this file.
1 /*
2  * Copyright (C) 2013 Evidence Srl - www.evidence.eu.com
3  *
4  * Boost Software License - Version 1.0 - August 17th, 2003
5  *
6  * Permission is hereby granted, free of charge, to any person or organization
7  * obtaining a copy of the software and accompanying documentation covered by
8  * this license (the "Software") to use, reproduce, display, distribute,
9  * execute, and transmit the Software, and to prepare derivative works of the
10  * Software, and to permit third-parties to whom the Software is furnished to
11  * do so, all subject to the following:
12  *
13  * The copyright notices in the Software and this entire statement, including
14  * the above license grant, this restriction and the following disclaimer,
15  * must be included in all copies of the Software, in whole or in part, and
16  * all derivative works of the Software, unless such copies or derivative
17  * works are solely in the form of machine-executable object code generated by
18  * a source language processor.
19  *
20  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
21  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
22  * FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
23  * SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
24  * FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
25  * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
26  * DEALINGS IN THE SOFTWARE.
27  */
28 
29 #ifndef PROTOCOL_HPP_
30 #define PROTOCOL_HPP_
31 
32 namespace net {
33 
34 /**
35  * @brief Protocol type
36  */
37 enum class protocol_type {
38  STREAM, //< Stream (e.g., TCP) communications
39  DGRAM //< Dgram (e.g., UDP) communications
40 };
41 
42 /**
43  * @brief Protocol domain
44  */
45 enum class protocol_domain {
46  LOCAL, //< Local (e.g., Unix) communications
47  IPv4 //< IPv4 communications
48 };
49 
50 
51 /**
52  * @brief Protocol used for the communication
53  *
54  * This class encapsulates information about type and domain of
55  * the communication protocol.
56  */
57 class protocol {
58 public:
59  /**
60  * @brief Constructor
61  *
62  * @param type Protocol type (see net::protocol_type)
63  * @param domain Protocol domain (see net::protocol_domain)
64  */
65  protocol (enum protocol_type type,
66  enum protocol_domain domain):
67  type_{type}, domain_{domain}{}
68 
69  /**
70  * @brief Get protocol type
71  *
72  * @return protocol type
73  */
74  inline enum protocol_type getType() const
75  {
76  return type_;
77  }
78 
79  /**
80  * @brief Get protocol domain
81  *
82  * @return protocol domain
83  */
84  inline enum protocol_domain getDomain() const
85  {
86  return domain_;
87  }
88 
89  /**
90  * @brief Operator ==
91  *
92  * @return true if protocols are equal; false otherwise
93  */
94  inline bool operator==(const protocol& p) const
95  {
96  if ((type_ == p.type_) && (domain_ == p.domain_))
97  return true;
98  return false;
99  }
100 
101  /**
102  * @brief Operator !=
103  *
104  * @return false if protocols are equal; true otherwise
105  */
106  inline bool operator!=(const protocol& p) const
107  {
108  if ((type_ == p.type_) && (domain_ == p.domain_))
109  return false;
110  return true;
111  }
112 
113 private:
114  /// Protocol type
115  enum protocol_type type_;
116 
117  /// Protocol domain
118  enum protocol_domain domain_;
119 };
120 
125 
126 } // net
127 
128 #endif // PROTOCOL_HPP_
129