IPAddress.cpp
Go to the documentation of this file.
1 /*
2  IPAddress.cpp - Base class that provides IPAddress
3  Copyright (c) 2011 Adrian McEwen. All right reserved.
4 
5  This library is free software; you can redistribute it and/or
6  modify it under the terms of the GNU Lesser General Public
7  License as published by the Free Software Foundation; either
8  version 2.1 of the License, or (at your option) any later version.
9 
10  This library is distributed in the hope that it will be useful,
11  but WITHOUT ANY WARRANTY; without even the implied warranty of
12  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13  Lesser General Public License for more details.
14 
15  You should have received a copy of the GNU Lesser General Public
16  License along with this library; if not, write to the Free Software
17  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
18 */
19 
20 #include <Arduino.h>
21 #include <IPAddress.h>
22 
24 {
25  _address.dword = 0;
26 }
27 
28 IPAddress::IPAddress(uint8_t first_octet, uint8_t second_octet, uint8_t third_octet, uint8_t fourth_octet)
29 {
30  _address.bytes[0] = first_octet;
31  _address.bytes[1] = second_octet;
32  _address.bytes[2] = third_octet;
33  _address.bytes[3] = fourth_octet;
34 }
35 
37 {
38  _address.dword = address;
39 }
40 
42 {
43  memcpy(_address.bytes, address, sizeof(_address.bytes));
44 }
45 
46 bool IPAddress::fromString(const char *address)
47 {
48  uint16_t acc = 0; // Accumulator
49  uint8_t dots = 0;
50 
51  while (*address)
52  {
53  char c = *address++;
54  if (c >= '0' && c <= '9')
55  {
56  acc = acc * 10 + (c - '0');
57  if (acc > 255) {
58  // Value out of [0..255] range
59  return false;
60  }
61  }
62  else if (c == '.')
63  {
64  if (dots == 3) {
65  // Too much dots (there must be 3 dots)
66  return false;
67  }
68  _address.bytes[dots++] = acc;
69  acc = 0;
70  }
71  else
72  {
73  // Invalid char
74  return false;
75  }
76  }
77 
78  if (dots != 3) {
79  // Too few dots (there must be 3 dots)
80  return false;
81  }
82  _address.bytes[3] = acc;
83  return true;
84 }
85 
87 {
88  memcpy(_address.bytes, address, sizeof(_address.bytes));
89  return *this;
90 }
91 
93 {
94  _address.dword = address;
95  return *this;
96 }
97 
98 bool IPAddress::operator==(const uint8_t* addr) const
99 {
100  return memcmp(addr, _address.bytes, sizeof(_address.bytes)) == 0;
101 }
102 
103 size_t IPAddress::printTo(Print& p) const
104 {
105  size_t n = 0;
106  for (int i =0; i < 3; i++)
107  {
108  n += p.print(_address.bytes[i], DEC);
109  n += p.print('.');
110  }
111  n += p.print(_address.bytes[3], DEC);
112  return n;
113 }
114 
void BASE_IMPEXP memcpy(void *dest, size_t destSize, const void *src, size_t copyCount) MRPT_NO_THROWS
union IPAddress::@0 _address
const GLfloat * c
bool operator==(const IPAddress &addr) const
Definition: IPAddress.h:55
size_t print(const __FlashStringHelper *)
Definition: Print.cpp:44
unsigned int uint32_t
bool fromString(const char *address)
Definition: IPAddress.cpp:46
Definition: Print.h:37
GLsizei n
GLenum GLvoid * addr
virtual size_t printTo(Print &p) const
Definition: IPAddress.cpp:103
GLfloat GLfloat p
GLuint address
IPAddress & operator=(const uint8_t *address)
Definition: IPAddress.cpp:86


arduino_daq
Author(s):
autogenerated on Mon Jun 10 2019 12:46:03