@@ -33,11 +33,11 @@ IPAddress::IPAddress(IPType ip_type)
33
33
IPAddress::IPAddress (uint8_t first_octet, uint8_t second_octet, uint8_t third_octet, uint8_t fourth_octet)
34
34
{
35
35
_type = IPv4;
36
- memset (_address.bytes , 0 , sizeof (_address.bytes ) - sizeof ( uint32_t ) );
37
- _address.bytes [12 ] = first_octet;
38
- _address.bytes [13 ] = second_octet;
39
- _address.bytes [14 ] = third_octet;
40
- _address.bytes [15 ] = fourth_octet;
36
+ memset (_address.bytes , 0 , sizeof (_address.bytes ));
37
+ _address.bytes [IPADDRESS_V4_BYTES_INDEX ] = first_octet;
38
+ _address.bytes [IPADDRESS_V4_BYTES_INDEX + 1 ] = second_octet;
39
+ _address.bytes [IPADDRESS_V4_BYTES_INDEX + 2 ] = third_octet;
40
+ _address.bytes [IPADDRESS_V4_BYTES_INDEX + 3 ] = fourth_octet;
41
41
}
42
42
43
43
IPAddress::IPAddress (uint8_t o1, uint8_t o2, uint8_t o3, uint8_t o4, uint8_t o5, uint8_t o6, uint8_t o7, uint8_t o8, uint8_t o9, uint8_t o10, uint8_t o11, uint8_t o12, uint8_t o13, uint8_t o14, uint8_t o15, uint8_t o16) {
@@ -64,8 +64,8 @@ IPAddress::IPAddress(uint32_t address)
64
64
{
65
65
// IPv4 only
66
66
_type = IPv4;
67
- memset (_address.bytes , 0 , sizeof (_address.bytes ) - sizeof ( uint32_t ) );
68
- _address.dword [3 ] = address;
67
+ memset (_address.bytes , 0 , sizeof (_address.bytes ));
68
+ _address.dword [IPADDRESS_V4_DWORD_INDEX ] = address;
69
69
70
70
// NOTE on conversion/comparison and uint32_t:
71
71
// These conversions are host platform dependent.
@@ -82,8 +82,8 @@ IPAddress::IPAddress(IPType ip_type, const uint8_t *address)
82
82
{
83
83
_type = ip_type;
84
84
if (ip_type == IPv4) {
85
- memset (_address.bytes , 0 , sizeof (_address.bytes ) - sizeof ( uint32_t ) );
86
- memcpy (&_address.bytes [12 ], address, sizeof (uint32_t ));
85
+ memset (_address.bytes , 0 , sizeof (_address.bytes ));
86
+ memcpy (&_address.bytes [IPADDRESS_V4_BYTES_INDEX ], address, sizeof (uint32_t ));
87
87
} else {
88
88
memcpy (_address.bytes , address, sizeof (_address.bytes ));
89
89
}
@@ -103,6 +103,7 @@ bool IPAddress::fromString4(const char *address)
103
103
int16_t acc = -1 ; // Accumulator
104
104
uint8_t dots = 0 ;
105
105
106
+ memset (_address.bytes , 0 , sizeof (_address.bytes ));
106
107
while (*address)
107
108
{
108
109
char c = *address++;
@@ -124,7 +125,7 @@ bool IPAddress::fromString4(const char *address)
124
125
/* No value between dots, e.g. '1..' */
125
126
return false ;
126
127
}
127
- _address.bytes [12 + dots++] = acc;
128
+ _address.bytes [IPADDRESS_V4_BYTES_INDEX + dots++] = acc;
128
129
acc = -1 ;
129
130
}
130
131
else
@@ -142,8 +143,7 @@ bool IPAddress::fromString4(const char *address)
142
143
/* No value between dots, e.g. '1..' */
143
144
return false ;
144
145
}
145
- memset (_address.bytes , 0 , sizeof (_address.bytes ) - sizeof (uint32_t ));
146
- _address.bytes [15 ] = acc;
146
+ _address.bytes [IPADDRESS_V4_BYTES_INDEX + 3 ] = acc;
147
147
_type = IPv4;
148
148
return true ;
149
149
}
@@ -220,8 +220,8 @@ IPAddress& IPAddress::operator=(const uint8_t *address)
220
220
{
221
221
// IPv4 only conversion from byte pointer
222
222
_type = IPv4;
223
- memset (_address.bytes , 0 , sizeof (_address.bytes ) - sizeof ( uint32_t ) );
224
- memcpy (&_address.bytes [12 ], address, sizeof (uint32_t ));
223
+ memset (_address.bytes , 0 , sizeof (_address.bytes ));
224
+ memcpy (&_address.bytes [IPADDRESS_V4_BYTES_INDEX ], address, sizeof (uint32_t ));
225
225
return *this ;
226
226
}
227
227
@@ -230,10 +230,8 @@ IPAddress& IPAddress::operator=(uint32_t address)
230
230
// IPv4 conversion
231
231
// See note on conversion/comparison and uint32_t
232
232
_type = IPv4;
233
- _address.dword [0 ] = 0 ;
234
- _address.dword [1 ] = 0 ;
235
- _address.dword [2 ] = 0 ;
236
- _address.dword [3 ] = address;
233
+ memset (_address.bytes , 0 , sizeof (_address.bytes ));
234
+ _address.dword [IPADDRESS_V4_DWORD_INDEX] = address;
237
235
return *this ;
238
236
}
239
237
@@ -246,19 +244,19 @@ bool IPAddress::operator==(const uint8_t* addr) const
246
244
{
247
245
// IPv4 only comparison to byte pointer
248
246
// Can't support IPv6 as we know our type, but not the length of the pointer
249
- return _type == IPv4 && memcmp (addr, &_address.bytes [12 ], sizeof (uint32_t )) == 0 ;
247
+ return _type == IPv4 && memcmp (addr, &_address.bytes [IPADDRESS_V4_BYTES_INDEX ], sizeof (uint32_t )) == 0 ;
250
248
}
251
249
252
250
uint8_t IPAddress::operator [](int index) const {
253
251
if (_type == IPv4) {
254
- return _address.bytes [index + 12 ];
252
+ return _address.bytes [IPADDRESS_V4_BYTES_INDEX + index ];
255
253
}
256
254
return _address.bytes [index ];
257
255
};
258
256
259
257
uint8_t & IPAddress::operator [](int index) {
260
258
if (_type == IPv4) {
261
- return _address.bytes [index + 12 ];
259
+ return _address.bytes [IPADDRESS_V4_BYTES_INDEX + index ];
262
260
}
263
261
return _address.bytes [index ];
264
262
};
@@ -321,10 +319,10 @@ size_t IPAddress::printTo(Print& p) const
321
319
// IPv4
322
320
for (int i =0 ; i < 3 ; i++)
323
321
{
324
- n += p.print (_address.bytes [12 + i], DEC);
322
+ n += p.print (_address.bytes [IPADDRESS_V4_BYTES_INDEX + i], DEC);
325
323
n += p.print (' .' );
326
324
}
327
- n += p.print (_address.bytes [15 ], DEC);
325
+ n += p.print (_address.bytes [IPADDRESS_V4_BYTES_INDEX + 3 ], DEC);
328
326
return n;
329
327
}
330
328
0 commit comments