Stefan Schuermans commited on 2017-10-08 20:02:30
Showing 6 changed files, with 546 additions and 0 deletions.
... | ... |
@@ -0,0 +1,77 @@ |
1 |
+/* |
|
2 |
+implementations in this file are taken from |
|
3 |
+https://github.com/pkulchenko/luasocket/blob/5a58786a39bbef7ed4805821cc921f1d40f12068/src/inet.c |
|
4 |
+ |
|
5 |
+LuaSocket 2.1 license |
|
6 |
+Copyright © 2004-2012 Diego Nehab |
|
7 |
+ |
|
8 |
+Permission is hereby granted, free of charge, to any person obtaining a |
|
9 |
+copy of this software and associated documentation files (the "Software"), |
|
10 |
+to deal in the Software without restriction, including without limitation |
|
11 |
+the rights to use, copy, modify, merge, publish, distribute, sublicense, |
|
12 |
+and/or sell copies of the Software, and to permit persons to whom the |
|
13 |
+Software is furnished to do so, subject to the following conditions: |
|
14 |
+ |
|
15 |
+The above copyright notice and this permission notice shall be included in |
|
16 |
+all copies or substantial portions of the Software. |
|
17 |
+ |
|
18 |
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
|
19 |
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
|
20 |
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |
|
21 |
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
|
22 |
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING |
|
23 |
+FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER |
|
24 |
+DEALINGS IN THE SOFTWARE. |
|
25 |
+*/ |
|
26 |
+ |
|
27 |
+#include <winsock2.h> |
|
28 |
+#include <windows.h> |
|
29 |
+#include <ws2tcpip.h> |
|
30 |
+ |
|
31 |
+#include "InetTools.h" |
|
32 |
+ |
|
33 |
+#define NS_INT16SZ 2 |
|
34 |
+#define NS_INADDRSZ 4 |
|
35 |
+#define NS_IN6ADDRSZ 16 |
|
36 |
+ |
|
37 |
+namespace Blinker { |
|
38 |
+ |
|
39 |
+const char *inet_ntop(int af, const void *src, char *dst, socklen_t cnt) |
|
40 |
+{ |
|
41 |
+ if (af == AF_INET) { |
|
42 |
+ struct sockaddr_in in; |
|
43 |
+ memset(&in, 0, sizeof(in)); |
|
44 |
+ in.sin_family = AF_INET; |
|
45 |
+ memcpy(&in.sin_addr, src, sizeof(struct in_addr)); |
|
46 |
+ getnameinfo((struct sockaddr *)&in, sizeof(struct sockaddr_in), dst, cnt, NULL, 0, NI_NUMERICHOST); |
|
47 |
+ return dst; |
|
48 |
+ } else if (af == AF_INET6) { |
|
49 |
+ struct sockaddr_in6 in; |
|
50 |
+ memset(&in, 0, sizeof(in)); |
|
51 |
+ in.sin6_family = AF_INET6; |
|
52 |
+ memcpy(&in.sin6_addr, src, sizeof(struct in_addr6)); |
|
53 |
+ getnameinfo((struct sockaddr *)&in, sizeof(struct sockaddr_in6), dst, cnt, NULL, 0, NI_NUMERICHOST); |
|
54 |
+ return dst; |
|
55 |
+ } |
|
56 |
+ return NULL; |
|
57 |
+} |
|
58 |
+ |
|
59 |
+int inet_pton(int af, const char *src, void *dst) |
|
60 |
+{ |
|
61 |
+ struct addrinfo hints, *res, *ressave; |
|
62 |
+ memset(&hints, 0, sizeof(struct addrinfo)); |
|
63 |
+ hints.ai_family = af; |
|
64 |
+ if (getaddrinfo(src, NULL, &hints, &res) != 0) { |
|
65 |
+ return -1; |
|
66 |
+ } |
|
67 |
+ ressave = res; |
|
68 |
+ while (res) { |
|
69 |
+ memcpy(dst, res->ai_addr, res->ai_addrlen); |
|
70 |
+ res = res->ai_next; |
|
71 |
+ } |
|
72 |
+ freeaddrinfo(ressave); |
|
73 |
+ return 0; |
|
74 |
+} |
|
75 |
+ |
|
76 |
+} // namespace Blinker |
|
77 |
+ |
... | ... |
@@ -0,0 +1,21 @@ |
1 |
+/* Blinker |
|
2 |
+ Copyright 2011-2014 Stefan Schuermans <stefan@blinkenarea.org> |
|
3 |
+ Copyleft GNU public license - http://www.gnu.org/copyleft/gpl.html |
|
4 |
+ a blinkenarea.org project */ |
|
5 |
+ |
|
6 |
+#ifndef INETTOOLS_H |
|
7 |
+#define INTETOOLS_H |
|
8 |
+ |
|
9 |
+#include <winsock2.h> |
|
10 |
+#include <windows.h> |
|
11 |
+#include <ws2tcpip.h> |
|
12 |
+ |
|
13 |
+namespace Blinker { |
|
14 |
+ |
|
15 |
+const char * inet_ntop(int af, const void *src, char *dst, socklen_t cnt); |
|
16 |
+int inet_pton(int af, const char *src, void *dst); |
|
17 |
+ |
|
18 |
+} // namespace Blinker |
|
19 |
+ |
|
20 |
+#endif // #ifndef INETTOOLS_H |
|
21 |
+ |
... | ... |
@@ -0,0 +1,150 @@ |
1 |
+/* Blinker |
|
2 |
+ Copyright 2011-2014 Stefan Schuermans <stefan@blinkenarea.org> |
|
3 |
+ Copyleft GNU public license - http://www.gnu.org/copyleft/gpl.html |
|
4 |
+ a blinkenarea.org project */ |
|
5 |
+ |
|
6 |
+#include <winsock2.h> |
|
7 |
+#include <windows.h> |
|
8 |
+ |
|
9 |
+#include <sstream> |
|
10 |
+#include <stdlib.h> |
|
11 |
+#include <string> |
|
12 |
+ |
|
13 |
+#include "InetTools.h" |
|
14 |
+#include "Udp4Addr.h" |
|
15 |
+ |
|
16 |
+namespace Blinker { |
|
17 |
+ |
|
18 |
+/// constructor |
|
19 |
+Udp4Addr::Udp4Addr() |
|
20 |
+{ |
|
21 |
+ m_addr.sin_family = AF_INET; |
|
22 |
+ m_addr.sin_port = htons(0); |
|
23 |
+ m_addr.sin_addr.s_addr = htonl(INADDR_NONE); |
|
24 |
+} |
|
25 |
+ |
|
26 |
+/// virtual destructor |
|
27 |
+Udp4Addr::~Udp4Addr() |
|
28 |
+{ |
|
29 |
+} |
|
30 |
+ |
|
31 |
+/// comparison |
|
32 |
+//@{ |
|
33 |
+ |
|
34 |
+int Udp4Addr::compare(const Udp4Addr &that) const |
|
35 |
+{ |
|
36 |
+ if (m_addr.sin_family < that.m_addr.sin_family) |
|
37 |
+ return -1; |
|
38 |
+ if (m_addr.sin_family > that.m_addr.sin_family) |
|
39 |
+ return 1; |
|
40 |
+ if (ntohl(m_addr.sin_addr.s_addr) < ntohl(that.m_addr.sin_addr.s_addr)) |
|
41 |
+ return -1; |
|
42 |
+ if (ntohl(m_addr.sin_addr.s_addr) > ntohl(that.m_addr.sin_addr.s_addr)) |
|
43 |
+ return 1; |
|
44 |
+ if (ntohs(m_addr.sin_port) < ntohs(that.m_addr.sin_port)) |
|
45 |
+ return -1; |
|
46 |
+ if (ntohs(m_addr.sin_port) > ntohs(that.m_addr.sin_port)) |
|
47 |
+ return 1; |
|
48 |
+ return 0; |
|
49 |
+} |
|
50 |
+ |
|
51 |
+bool Udp4Addr::operator==(const Udp4Addr &that) const |
|
52 |
+{ |
|
53 |
+ return compare(that) == 0; |
|
54 |
+} |
|
55 |
+ |
|
56 |
+bool Udp4Addr::operator!=(const Udp4Addr &that) const |
|
57 |
+{ |
|
58 |
+ return compare(that) != 0; |
|
59 |
+} |
|
60 |
+ |
|
61 |
+bool Udp4Addr::operator<(const Udp4Addr &that) const |
|
62 |
+{ |
|
63 |
+ return compare(that) < 0; |
|
64 |
+} |
|
65 |
+ |
|
66 |
+bool Udp4Addr::operator>(const Udp4Addr &that) const |
|
67 |
+{ |
|
68 |
+ return compare(that) > 0; |
|
69 |
+} |
|
70 |
+ |
|
71 |
+bool Udp4Addr::operator<=(const Udp4Addr &that) const |
|
72 |
+{ |
|
73 |
+ return compare(that) <= 0; |
|
74 |
+} |
|
75 |
+ |
|
76 |
+bool Udp4Addr::operator>=(const Udp4Addr &that) const |
|
77 |
+{ |
|
78 |
+ return compare(that) >= 0; |
|
79 |
+} |
|
80 |
+ |
|
81 |
+//@} |
|
82 |
+ |
|
83 |
+/// return address family |
|
84 |
+int Udp4Addr::getFamily() const |
|
85 |
+{ |
|
86 |
+ return AF_INET; |
|
87 |
+} |
|
88 |
+ |
|
89 |
+/// return port (use this function only if absolutely necessary) |
|
90 |
+int Udp4Addr::getPort() const |
|
91 |
+{ |
|
92 |
+ return ntohs(m_addr.sin_port); |
|
93 |
+} |
|
94 |
+ |
|
95 |
+/// set port (use this function only if absolutely necessary) |
|
96 |
+void Udp4Addr::setPort(int port) |
|
97 |
+{ |
|
98 |
+ m_addr.sin_port = htons(port); |
|
99 |
+} |
|
100 |
+ |
|
101 |
+/** |
|
102 |
+ * @brief parse from string format |
|
103 |
+ * @param[in] str string format |
|
104 |
+ * @return if parsing was successful |
|
105 |
+ */ |
|
106 |
+bool Udp4Addr::fromStr(const std::string &str) |
|
107 |
+{ |
|
108 |
+ std::string::size_type posColon; |
|
109 |
+ std::string strIp, strPort; |
|
110 |
+ struct in_addr iaIp; |
|
111 |
+ unsigned long iPort; |
|
112 |
+ const char *szPort; |
|
113 |
+ char *szPortEnd; |
|
114 |
+ |
|
115 |
+ // split address into IP and port |
|
116 |
+ posColon = str.find(':'); |
|
117 |
+ if (posColon == std::string::npos) |
|
118 |
+ return false; |
|
119 |
+ strIp = str.substr(0, posColon); |
|
120 |
+ strPort = str.substr(posColon + 1); |
|
121 |
+ |
|
122 |
+ // parse IP |
|
123 |
+ if (!inet_pton(AF_INET, strIp.c_str(), &iaIp)) |
|
124 |
+ return false; |
|
125 |
+ |
|
126 |
+ // parse port |
|
127 |
+ szPort = strPort.c_str(); |
|
128 |
+ iPort = strtoul(szPort, &szPortEnd, 10); |
|
129 |
+ if (*szPort == 0 || *szPortEnd != 0) |
|
130 |
+ return false; |
|
131 |
+ |
|
132 |
+ m_addr.sin_family = AF_INET; |
|
133 |
+ m_addr.sin_port = htons(iPort); |
|
134 |
+ m_addr.sin_addr = iaIp; |
|
135 |
+ return true; |
|
136 |
+} |
|
137 |
+ |
|
138 |
+/** |
|
139 |
+ * @brief convert to string format |
|
140 |
+ * @return string format |
|
141 |
+ */ |
|
142 |
+std::string Udp4Addr::toStr() const |
|
143 |
+{ |
|
144 |
+ std::stringstream strm; |
|
145 |
+ strm << inet_ntoa(m_addr.sin_addr) << ":" << ntohs(m_addr.sin_port); |
|
146 |
+ return strm.str(); |
|
147 |
+} |
|
148 |
+ |
|
149 |
+} // namespace Blinker |
|
150 |
+ |
... | ... |
@@ -0,0 +1,70 @@ |
1 |
+/* Blinker |
|
2 |
+ Copyright 2011-2014 Stefan Schuermans <stefan@blinkenarea.org> |
|
3 |
+ Copyleft GNU public license - http://www.gnu.org/copyleft/gpl.html |
|
4 |
+ a blinkenarea.org project */ |
|
5 |
+ |
|
6 |
+#ifndef UDP4ADDR_H |
|
7 |
+#define UDP4ADDR_H |
|
8 |
+ |
|
9 |
+#include <winsock2.h> |
|
10 |
+#include <windows.h> |
|
11 |
+ |
|
12 |
+#include <string> |
|
13 |
+ |
|
14 |
+#include "Addr.h" |
|
15 |
+ |
|
16 |
+namespace Blinker { |
|
17 |
+ |
|
18 |
+/// UDP v4 address |
|
19 |
+class Udp4Addr: public Addr |
|
20 |
+{ |
|
21 |
+public: |
|
22 |
+ /// constructor |
|
23 |
+ Udp4Addr(); |
|
24 |
+ |
|
25 |
+ /// virtual destructor |
|
26 |
+ virtual ~Udp4Addr(); |
|
27 |
+ |
|
28 |
+public: |
|
29 |
+ /// comparison |
|
30 |
+ //@{ |
|
31 |
+ int compare(const Udp4Addr &that) const; |
|
32 |
+ bool operator==(const Udp4Addr &that) const; |
|
33 |
+ bool operator!=(const Udp4Addr &that) const; |
|
34 |
+ bool operator<(const Udp4Addr &that) const; |
|
35 |
+ bool operator>(const Udp4Addr &that) const; |
|
36 |
+ bool operator<=(const Udp4Addr &that) const; |
|
37 |
+ bool operator>=(const Udp4Addr &that) const; |
|
38 |
+ //@} |
|
39 |
+ |
|
40 |
+ /// return address family |
|
41 |
+ virtual int getFamily() const; |
|
42 |
+ |
|
43 |
+ /// return port (use this function only if absolutely necessary) |
|
44 |
+ virtual int getPort() const; |
|
45 |
+ |
|
46 |
+ /// set port (use this function only if absolutely necessary) |
|
47 |
+ virtual void setPort(int port); |
|
48 |
+ |
|
49 |
+ /** |
|
50 |
+ * @brief parse from string format |
|
51 |
+ * @param[in] str string format |
|
52 |
+ * @return if parsing was successful |
|
53 |
+ */ |
|
54 |
+ virtual bool fromStr(const std::string &str); |
|
55 |
+ |
|
56 |
+ /** |
|
57 |
+ * @brief convert to string format |
|
58 |
+ * @return string format |
|
59 |
+ */ |
|
60 |
+ virtual std::string toStr() const; |
|
61 |
+protected: |
|
62 |
+ struct sockaddr_in m_addr; |
|
63 |
+ |
|
64 |
+friend class Udp4Sock; |
|
65 |
+}; // class Udp4Addr |
|
66 |
+ |
|
67 |
+} // namespace Blinker |
|
68 |
+ |
|
69 |
+#endif // #ifndef UDP4ADDR_H |
|
70 |
+ |
... | ... |
@@ -0,0 +1,157 @@ |
1 |
+/* Blinker |
|
2 |
+ Copyright 2011-2014 Stefan Schuermans <stefan@blinkenarea.org> |
|
3 |
+ Copyleft GNU public license - http://www.gnu.org/copyleft/gpl.html |
|
4 |
+ a blinkenarea.org project */ |
|
5 |
+ |
|
6 |
+#include <winsock2.h> |
|
7 |
+#include <windows.h> |
|
8 |
+#include <ws2tcpip.h> |
|
9 |
+ |
|
10 |
+#include <sstream> |
|
11 |
+#include <stdlib.h> |
|
12 |
+#include <string> |
|
13 |
+#include <string.h> |
|
14 |
+ |
|
15 |
+#include "InetTools.h" |
|
16 |
+#include "Udp6Addr.h" |
|
17 |
+ |
|
18 |
+namespace Blinker { |
|
19 |
+ |
|
20 |
+/// constructor |
|
21 |
+Udp6Addr::Udp6Addr() |
|
22 |
+{ |
|
23 |
+ m_addr.sin6_family = AF_INET6; |
|
24 |
+ m_addr.sin6_port = htons(0); |
|
25 |
+ inet_pton(AF_INET6, "::", &m_addr.sin6_addr); |
|
26 |
+} |
|
27 |
+ |
|
28 |
+/// virtual destructor |
|
29 |
+Udp6Addr::~Udp6Addr() |
|
30 |
+{ |
|
31 |
+} |
|
32 |
+ |
|
33 |
+/// comparison |
|
34 |
+//@{ |
|
35 |
+ |
|
36 |
+int Udp6Addr::compare(const Udp6Addr &that) const |
|
37 |
+{ |
|
38 |
+ if (m_addr.sin6_family < that.m_addr.sin6_family) |
|
39 |
+ return -1; |
|
40 |
+ if (m_addr.sin6_family > that.m_addr.sin6_family) |
|
41 |
+ return 1; |
|
42 |
+ int cmp = memcmp(&m_addr.sin6_addr, &that.m_addr.sin6_addr, |
|
43 |
+ sizeof(m_addr.sin6_addr)); |
|
44 |
+ if (cmp != 0) |
|
45 |
+ return cmp; |
|
46 |
+ if (ntohs(m_addr.sin6_port) < ntohs(that.m_addr.sin6_port)) |
|
47 |
+ return -1; |
|
48 |
+ if (ntohs(m_addr.sin6_port) > ntohs(that.m_addr.sin6_port)) |
|
49 |
+ return 1; |
|
50 |
+ return 0; |
|
51 |
+} |
|
52 |
+ |
|
53 |
+bool Udp6Addr::operator==(const Udp6Addr &that) const |
|
54 |
+{ |
|
55 |
+ return compare(that) == 0; |
|
56 |
+} |
|
57 |
+ |
|
58 |
+bool Udp6Addr::operator!=(const Udp6Addr &that) const |
|
59 |
+{ |
|
60 |
+ return compare(that) != 0; |
|
61 |
+} |
|
62 |
+ |
|
63 |
+bool Udp6Addr::operator<(const Udp6Addr &that) const |
|
64 |
+{ |
|
65 |
+ return compare(that) < 0; |
|
66 |
+} |
|
67 |
+ |
|
68 |
+bool Udp6Addr::operator>(const Udp6Addr &that) const |
|
69 |
+{ |
|
70 |
+ return compare(that) > 0; |
|
71 |
+} |
|
72 |
+ |
|
73 |
+bool Udp6Addr::operator<=(const Udp6Addr &that) const |
|
74 |
+{ |
|
75 |
+ return compare(that) <= 0; |
|
76 |
+} |
|
77 |
+ |
|
78 |
+bool Udp6Addr::operator>=(const Udp6Addr &that) const |
|
79 |
+{ |
|
80 |
+ return compare(that) >= 0; |
|
81 |
+} |
|
82 |
+ |
|
83 |
+//@} |
|
84 |
+ |
|
85 |
+/// return address family |
|
86 |
+int Udp6Addr::getFamily() const |
|
87 |
+{ |
|
88 |
+ return AF_INET6; |
|
89 |
+} |
|
90 |
+ |
|
91 |
+/// return port (use this function only if absolutely necessary) |
|
92 |
+int Udp6Addr::getPort() const |
|
93 |
+{ |
|
94 |
+ return ntohs(m_addr.sin6_port); |
|
95 |
+} |
|
96 |
+ |
|
97 |
+/// set port (use this function only if absolutely necessary) |
|
98 |
+void Udp6Addr::setPort(int port) |
|
99 |
+{ |
|
100 |
+ m_addr.sin6_port = htons(port); |
|
101 |
+} |
|
102 |
+ |
|
103 |
+/** |
|
104 |
+ * @brief parse from string format |
|
105 |
+ * @param[in] str string format |
|
106 |
+ * @return if parsing was successful |
|
107 |
+ */ |
|
108 |
+bool Udp6Addr::fromStr(const std::string &str) |
|
109 |
+{ |
|
110 |
+ std::string::size_type posBraceColon; |
|
111 |
+ std::string strIp, strPort; |
|
112 |
+ struct in6_addr iaIp; |
|
113 |
+ unsigned long iPort; |
|
114 |
+ const char *szPort; |
|
115 |
+ char *szPortEnd; |
|
116 |
+ |
|
117 |
+ // split address into IP and port |
|
118 |
+ if (str.length() < 1 || str.at(0) != '[') |
|
119 |
+ return false; |
|
120 |
+ posBraceColon = str.find("]:"); |
|
121 |
+ if (posBraceColon == std::string::npos) |
|
122 |
+ return false; |
|
123 |
+ strIp = str.substr(1, posBraceColon - 1); |
|
124 |
+ strPort = str.substr(posBraceColon + 2); |
|
125 |
+ |
|
126 |
+ // parse IP |
|
127 |
+ if (!inet_pton(AF_INET6, strIp.c_str(), &iaIp)) |
|
128 |
+ return false; |
|
129 |
+ |
|
130 |
+ // parse port |
|
131 |
+ szPort = strPort.c_str(); |
|
132 |
+ iPort = strtoul(szPort, &szPortEnd, 10); |
|
133 |
+ if (*szPort == 0 || *szPortEnd != 0) |
|
134 |
+ return false; |
|
135 |
+ |
|
136 |
+ m_addr.sin6_family = AF_INET6; |
|
137 |
+ m_addr.sin6_port = htons(iPort); |
|
138 |
+ m_addr.sin6_addr = iaIp; |
|
139 |
+ return true; |
|
140 |
+} |
|
141 |
+ |
|
142 |
+/** |
|
143 |
+ * @brief convert to string format |
|
144 |
+ * @return string format |
|
145 |
+ */ |
|
146 |
+std::string Udp6Addr::toStr() const |
|
147 |
+{ |
|
148 |
+ std::stringstream strm; |
|
149 |
+ char buf[INET6_ADDRSTRLEN]; |
|
150 |
+ strm << "[" |
|
151 |
+ << inet_ntop(AF_INET6, &m_addr.sin6_addr, buf, INET6_ADDRSTRLEN) |
|
152 |
+ << "]:" << ntohs(m_addr.sin6_port); |
|
153 |
+ return strm.str(); |
|
154 |
+} |
|
155 |
+ |
|
156 |
+} // namespace Blinker |
|
157 |
+ |
... | ... |
@@ -0,0 +1,71 @@ |
1 |
+/* Blinker |
|
2 |
+ Copyright 2011-2014 Stefan Schuermans <stefan@blinkenarea.org> |
|
3 |
+ Copyleft GNU public license - http://www.gnu.org/copyleft/gpl.html |
|
4 |
+ a blinkenarea.org project */ |
|
5 |
+ |
|
6 |
+#ifndef UDP6ADDR_H |
|
7 |
+#define UDP6ADDR_H |
|
8 |
+ |
|
9 |
+#include <winsock2.h> |
|
10 |
+#include <windows.h> |
|
11 |
+#include <ws2tcpip.h> |
|
12 |
+ |
|
13 |
+#include <string> |
|
14 |
+ |
|
15 |
+#include "Addr.h" |
|
16 |
+ |
|
17 |
+namespace Blinker { |
|
18 |
+ |
|
19 |
+/// UDP v6 address |
|
20 |
+class Udp6Addr: public Addr |
|
21 |
+{ |
|
22 |
+public: |
|
23 |
+ /// constructor |
|
24 |
+ Udp6Addr(); |
|
25 |
+ |
|
26 |
+ /// virtual destructor |
|
27 |
+ virtual ~Udp6Addr(); |
|
28 |
+ |
|
29 |
+public: |
|
30 |
+ /// comparison |
|
31 |
+ //@{ |
|
32 |
+ int compare(const Udp6Addr &that) const; |
|
33 |
+ bool operator==(const Udp6Addr &that) const; |
|
34 |
+ bool operator!=(const Udp6Addr &that) const; |
|
35 |
+ bool operator<(const Udp6Addr &that) const; |
|
36 |
+ bool operator>(const Udp6Addr &that) const; |
|
37 |
+ bool operator<=(const Udp6Addr &that) const; |
|
38 |
+ bool operator>=(const Udp6Addr &that) const; |
|
39 |
+ //@} |
|
40 |
+ |
|
41 |
+ /// return address family |
|
42 |
+ virtual int getFamily() const; |
|
43 |
+ |
|
44 |
+ /// return port (use this function only if absolutely necessary) |
|
45 |
+ virtual int getPort() const; |
|
46 |
+ |
|
47 |
+ /// set port (use this function only if absolutely necessary) |
|
48 |
+ virtual void setPort(int port); |
|
49 |
+ |
|
50 |
+ /** |
|
51 |
+ * @brief parse from string format |
|
52 |
+ * @param[in] str string format |
|
53 |
+ * @return if parsing was successful |
|
54 |
+ */ |
|
55 |
+ virtual bool fromStr(const std::string &str); |
|
56 |
+ |
|
57 |
+ /** |
|
58 |
+ * @brief convert to string format |
|
59 |
+ * @return string format |
|
60 |
+ */ |
|
61 |
+ virtual std::string toStr() const; |
|
62 |
+protected: |
|
63 |
+ struct sockaddr_in6 m_addr; |
|
64 |
+ |
|
65 |
+friend class Udp6Sock; |
|
66 |
+}; // class Udp6Addr |
|
67 |
+ |
|
68 |
+} // namespace Blinker |
|
69 |
+ |
|
70 |
+#endif // #ifndef UDP6ADDR_H |
|
71 |
+ |
|
0 | 72 |