Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Diff: mbed/IPAddress.cpp
- Revision:
- 13:54b176a8dbd6
- Parent:
- 1:34b5616a463d
- Child:
- 14:dc2eb02f9689
--- a/mbed/IPAddress.cpp Thu Dec 29 14:09:13 2016 +0100
+++ b/mbed/IPAddress.cpp Thu Dec 29 15:04:13 2016 +0100
@@ -2,8 +2,6 @@
IPAddress.cpp - Base class that provides IPAddress
Copyright (c) 2011 Adrian McEwen. All right reserved.
- Modified (ported to mbed) by Zoltan Hudak <hudakz@inbox.com>
-
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
@@ -18,95 +16,107 @@
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
-#include <mbed.h>
-#include "mbed/IPAddress.h"
-/**
- * @brief
- * @note
- * @param
- * @retval
- */
-IPAddress::IPAddress(void) {
- memset(_address, 0, sizeof(_address));
+#if defined(ARDUINO)
+ #include <Arduino.h>
+#endif
+#if defined(__MBED__)
+ #include <mbed.h>
+ #include "mbed/Print.h"
+#endif
+
+#include <IPAddress.h>
+
+IPAddress::IPAddress()
+{
+ _address.dword = 0;
}
-/**
- * @brief
- * @note
- * @param
- * @retval
- */
-IPAddress::IPAddress(uint8_t first_octet, uint8_t second_octet, uint8_t third_octet, uint8_t fourth_octet) {
- _address[0] = first_octet;
- _address[1] = second_octet;
- _address[2] = third_octet;
- _address[3] = fourth_octet;
+IPAddress::IPAddress(uint8_t first_octet, uint8_t second_octet, uint8_t third_octet, uint8_t fourth_octet)
+{
+ _address.bytes[0] = first_octet;
+ _address.bytes[1] = second_octet;
+ _address.bytes[2] = third_octet;
+ _address.bytes[3] = fourth_octet;
+}
+
+IPAddress::IPAddress(uint32_t address)
+{
+ _address.dword = address;
+}
+
+IPAddress::IPAddress(const uint8_t *address)
+{
+ memcpy(_address.bytes, address, sizeof(_address.bytes));
}
-/**
- * @brief
- * @note
- * @param
- * @retval
- */
-IPAddress::IPAddress(uint32_t address) {
- memcpy(_address, &address, sizeof(_address));
+bool IPAddress::fromString(const char *address)
+{
+ // TODO: add support for "a", "a.b", "a.b.c" formats
+
+ uint16_t acc = 0; // Accumulator
+ uint8_t dots = 0;
+
+ while (*address)
+ {
+ char c = *address++;
+ if (c >= '0' && c <= '9')
+ {
+ acc = acc * 10 + (c - '0');
+ if (acc > 255) {
+ // Value out of [0..255] range
+ return false;
+ }
+ }
+ else if (c == '.')
+ {
+ if (dots == 3) {
+ // Too much dots (there must be 3 dots)
+ return false;
+ }
+ _address.bytes[dots++] = acc;
+ acc = 0;
+ }
+ else
+ {
+ // Invalid char
+ return false;
+ }
+ }
+
+ if (dots != 3) {
+ // Too few dots (there must be 3 dots)
+ return false;
+ }
+ _address.bytes[3] = acc;
+ return true;
}
-/**
- * @brief
- * @note
- * @param
- * @retval
- */
-IPAddress::IPAddress(const uint8_t* address) {
- memcpy(_address, address, sizeof(_address));
-}
-
-/**
- * @brief
- * @note
- * @param
- * @retval
- */
-IPAddress &IPAddress::operator=(const uint8_t* address) {
- memcpy(_address, address, sizeof(_address));
+IPAddress& IPAddress::operator=(const uint8_t *address)
+{
+ memcpy(_address.bytes, address, sizeof(_address.bytes));
return *this;
}
-/**
- * @brief
- * @note
- * @param
- * @retval
- */
-IPAddress &IPAddress::operator=(uint32_t address) {
- memcpy(_address, (const uint8_t*) &address, sizeof(_address));
+IPAddress& IPAddress::operator=(uint32_t address)
+{
+ _address.dword = address;
return *this;
}
-/**
- * @brief
- * @note
- * @param
- * @retval
- */
bool IPAddress::operator==(const uint8_t* addr) const
{
- return memcmp(addr, _address, sizeof(_address)) == 0;
+ return memcmp(addr, _address.bytes, sizeof(_address.bytes)) == 0;
}
-//size_t IPAddress::printTo(Print& p) const
-//{
-// size_t n = 0;
-// for (int i =0; i < 3; i++)
-// {
-// n += p.print(_address[i], DEC);
-// n += p.print('.');
-// }
-// n += p.print(_address[3], DEC);
-// return n;
-//}
-//
-
+size_t IPAddress::printTo(Print& p) const
+{
+ size_t n = 0;
+ for (int i =0; i < 3; i++)
+ {
+ n += p.print(_address.bytes[i], DEC);
+ n += p.print('.');
+ }
+ n += p.print(_address.bytes[3], DEC);
+ return n;
+}