f3ce8ea7299a9568d5d75a2a4e83548ce692184e
Stefan Schuermans implemented UDP v4 address...

Stefan Schuermans authored 12 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 12 years ago

83) /// return address family
84) int Udp4Addr::getFamily() const
85) {
86)   return AF_INET;
87) }
88) 
Stefan Schuermans add method to read port num...

Stefan Schuermans authored 12 years ago

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

Stefan Schuermans authored 12 years ago

95) /**
96)  * @brief parse from string format
97)  * @param[in] str string format
98)  * @return if parsing was successful
99)  */
100) bool Udp4Addr::fromStr(const std::string &str)
101) {
102)   std::string::size_type posColon;
103)   std::string strIp, strPort;
104)   struct in_addr iaIp;
105)   unsigned long iPort;
106)   const char *szPort;
107)   char *szPortEnd;
108) 
109)   // split address into IP and port
110)   posColon = str.find(':');
111)   if (posColon == std::string::npos)
112)     return false;
113)   strIp = str.substr(0, posColon);
114)   strPort = str.substr(posColon + 1);
115) 
116)   // parse IP
117)   if (!inet_aton(strIp.c_str(), &iaIp))
118)     return false;
119) 
120)   // parse port
121)   szPort = strPort.c_str();
122)   iPort = strtoul(szPort, &szPortEnd, 10);
Stefan Schuermans fixed parsing address

Stefan Schuermans authored 12 years ago

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

Stefan Schuermans authored 12 years ago

124)     return false;
125) 
126)   m_addr.sin_family = AF_INET;
127)   m_addr.sin_port = htons(iPort);
128)   m_addr.sin_addr = iaIp;
Stefan Schuermans fixed parsing address

Stefan Schuermans authored 12 years ago

129)   return true;