362c1f4c3b5ce9e3fce11167a51fbe4cdb2174de
Stefan Schuermans implemented UDP v4 address...

Stefan Schuermans authored 13 years ago

1) /* Blinker
Stefan Schuermans update copyright header

Stefan Schuermans authored 5 years ago

2)    Copyright 2011-2019 Stefan Schuermans <stefan@blinkenarea.org>
Stefan Schuermans implemented UDP v4 address...

Stefan Schuermans authored 13 years ago

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) 
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) 
BlinkenArea allow setting port

BlinkenArea authored 12 years ago

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

Stefan Schuermans authored 13 years ago

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_aton(strIp.c_str(), &iaIp))
124)     return false;
125) 
126)   // parse port
127)   szPort = strPort.c_str();
128)   iPort = strtoul(szPort, &szPortEnd, 10);
Stefan Schuermans fixed parsing address

Stefan Schuermans authored 13 years ago

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

Stefan Schuermans authored 13 years ago

130)     return false;
131) 
132)   m_addr.sin_family = AF_INET;
133)   m_addr.sin_port = htons(iPort);
134)   m_addr.sin_addr = iaIp;
Stefan Schuermans fixed parsing address

Stefan Schuermans authored 13 years ago

135)   return true;