| @@ -0,0 +1,65 @@ | |||
| /* | |||
| IPAddress.cpp - Base class that provides IPAddress | |||
| Copyright (c) 2011 Adrian McEwen. All right reserved. | |||
| 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 | |||
| version 2.1 of the License, or (at your option) any later version. | |||
| This library is distributed in the hope that it will be useful, | |||
| but WITHOUT ANY WARRANTY; without even the implied warranty of | |||
| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |||
| Lesser General Public License for more details. | |||
| You should have received a copy of the GNU Lesser General Public | |||
| 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 <Arduino.h> | |||
| #include "IPAddress.h" | |||
| size_t IPAddress::printTo(Print& p) const | |||
| { | |||
| int i=0; | |||
| while (1) { | |||
| p.print(_address.bytes[i], DEC); | |||
| if (++i >= 4) return 4; | |||
| p.write('.'); | |||
| } | |||
| } | |||
| bool IPAddress::fromString(const char *address) | |||
| { | |||
| unsigned int acc = 0; // Accumulator | |||
| unsigned int 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; | |||
| } | |||