422825abc36131142498020d0db03e5786f20226
Stefan Schuermans implemented UDP v4 address...

Stefan Schuermans authored 13 years ago

1) /* Blinker
2)    Copyright 2011 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 <arpa/inet.h>
7) #include <netinet/in.h>
8) #include <sstream>
9) #include <stdlib.h>
10) #include <string>
11) #include <sys/socket.h>
12) #include <sys/types.h>
13) 
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) 
Stefan Schuermans implement all comparison op...

Stefan Schuermans authored 12 years ago

31) /// comparison
32) //@{
33) 
34) int Udp4Addr::compare(const Udp4Addr &that) const
Stefan Schuermans implemented dynamic destina...

Stefan Schuermans authored 12 years ago

35) {
36)   if (m_addr.sin_family < that.m_addr.sin_family)
Stefan Schuermans implement all comparison op...

Stefan Schuermans authored 12 years ago

37)     return -1;
Stefan Schuermans implemented dynamic destina...

Stefan Schuermans authored 12 years ago

38)   if (m_addr.sin_family > that.m_addr.sin_family)
Stefan Schuermans implement all comparison op...

Stefan Schuermans authored 12 years ago

39)     return 1;
Stefan Schuermans implemented dynamic destina...

Stefan Schuermans authored 12 years ago

40)   if (ntohl(m_addr.sin_addr.s_addr) < ntohl(that.m_addr.sin_addr.s_addr))
Stefan Schuermans implement all comparison op...

Stefan Schuermans authored 12 years ago

41)     return -1;
Stefan Schuermans implemented dynamic destina...

Stefan Schuermans authored 12 years ago

42)   if (ntohl(m_addr.sin_addr.s_addr) > ntohl(that.m_addr.sin_addr.s_addr))
Stefan Schuermans implement all comparison op...

Stefan Schuermans authored 12 years ago

43)     return 1;
Stefan Schuermans implemented dynamic destina...

Stefan Schuermans authored 12 years ago

44)   if (ntohs(m_addr.sin_port) < ntohs(that.m_addr.sin_port))
Stefan Schuermans implement all comparison op...

Stefan Schuermans authored 12 years ago

45)     return -1;
Stefan Schuermans implemented dynamic destina...

Stefan Schuermans authored 12 years ago

46)   if (ntohs(m_addr.sin_port) > ntohs(that.m_addr.sin_port))
Stefan Schuermans implement all comparison op...

Stefan Schuermans authored 12 years ago

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;
Stefan Schuermans implemented dynamic destina...

Stefan Schuermans authored 12 years ago

69) }
70) 
Stefan Schuermans implement all comparison op...

Stefan Schuermans authored 12 years ago

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) 
Stefan Schuermans implemented UDP v4 address...

Stefan Schuermans authored 13 years ago

83) /// return address family
84) int Udp4Addr::getFamily() const
85) {
86)   return AF_INET;
87) }
88) 
89) /**
90)  * @brief parse from string format
91)  * @param[in] str string format
92)  * @return if parsing was successful
93)  */
94) bool Udp4Addr::fromStr(const std::string &str)
95) {
96)   std::string::size_type posColon;
97)   std::string strIp, strPort;
98)   struct in_addr iaIp;
99)   unsigned long iPort;
100)   const char *szPort;
101)   char *szPortEnd;
102) 
103)   // split address into IP and port
104)   posColon = str.find(':');
105)   if (posColon == std::string::npos)
106)     return false;
107)   strIp = str.substr(0, posColon);
108)   strPort = str.substr(posColon + 1);
109) 
110)   // parse IP
111)   if (!inet_aton(strIp.c_str(), &iaIp))
112)     return false;
113) 
114)   // parse port
115)   szPort = strPort.c_str();
116)   iPort = strtoul(szPort, &szPortEnd, 10);
Stefan Schuermans fixed parsing address

Stefan Schuermans authored 13 years ago

117)   if (*szPort == 0 || *szPortEnd != 0)
Stefan Schuermans implemented UDP v4 address...

Stefan Schuermans authored 13 years ago

118)     return false;
119) 
120)   m_addr.sin_family = AF_INET;
121)   m_addr.sin_port = htons(iPort);
122)   m_addr.sin_addr = iaIp;
Stefan Schuermans fixed parsing address

Stefan Schuermans authored 13 years ago

123)   return true;