b189cbaddc73fcf5a118dee1056e5c5bd93b9f0d
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 implemented dynamic destina...

Stefan Schuermans authored 12 years ago

31) /// less-than operator (to allow usage as map key)
32) bool Udp4Addr::operator<(const Udp4Addr &that) const
33) {
34)   if (m_addr.sin_family < that.m_addr.sin_family)
35)     return true;
36)   if (m_addr.sin_family > that.m_addr.sin_family)
37)     return false;
38)   if (ntohl(m_addr.sin_addr.s_addr) < ntohl(that.m_addr.sin_addr.s_addr))
39)     return true;
40)   if (ntohl(m_addr.sin_addr.s_addr) > ntohl(that.m_addr.sin_addr.s_addr))
41)     return false;
42)   if (ntohs(m_addr.sin_port) < ntohs(that.m_addr.sin_port))
43)     return true;
44)   if (ntohs(m_addr.sin_port) > ntohs(that.m_addr.sin_port))
45)     return false;
46)   return false;
47) }
48) 
Stefan Schuermans implemented UDP v4 address...

Stefan Schuermans authored 12 years ago

49) /// return address family
50) int Udp4Addr::getFamily() const
51) {
52)   return AF_INET;
53) }
54) 
55) /**
56)  * @brief parse from string format
57)  * @param[in] str string format
58)  * @return if parsing was successful
59)  */
60) bool Udp4Addr::fromStr(const std::string &str)
61) {
62)   std::string::size_type posColon;
63)   std::string strIp, strPort;
64)   struct in_addr iaIp;
65)   unsigned long iPort;
66)   const char *szPort;
67)   char *szPortEnd;
68) 
69)   // split address into IP and port
70)   posColon = str.find(':');
71)   if (posColon == std::string::npos)
72)     return false;
73)   strIp = str.substr(0, posColon);
74)   strPort = str.substr(posColon + 1);
75) 
76)   // parse IP
77)   if (!inet_aton(strIp.c_str(), &iaIp))
78)     return false;
79) 
80)   // parse port
81)   szPort = strPort.c_str();
82)   iPort = strtoul(szPort, &szPortEnd, 10);
Stefan Schuermans fixed parsing address

Stefan Schuermans authored 12 years ago

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

Stefan Schuermans authored 12 years ago

84)     return false;
85) 
86)   m_addr.sin_family = AF_INET;
87)   m_addr.sin_port = htons(iPort);
88)   m_addr.sin_addr = iaIp;
Stefan Schuermans fixed parsing address

Stefan Schuermans authored 12 years ago

89)   return true;