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.
mbed/IPAddress.cpp@14:dc2eb02f9689, 2016-12-30 (annotated)
- Committer:
- cassyarduino
- Date:
- Fri Dec 30 11:45:48 2016 +0100
- Revision:
- 14:dc2eb02f9689
- Parent:
- 13:54b176a8dbd6
- Child:
- 35:f9f3a91fe4d4
Changes
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| cassyarduino | 1:34b5616a463d | 1 | /* |
| cassyarduino | 1:34b5616a463d | 2 | IPAddress.cpp - Base class that provides IPAddress |
| cassyarduino | 1:34b5616a463d | 3 | Copyright (c) 2011 Adrian McEwen. All right reserved. |
| cassyarduino | 1:34b5616a463d | 4 | |
| cassyarduino | 1:34b5616a463d | 5 | This library is free software; you can redistribute it and/or |
| cassyarduino | 1:34b5616a463d | 6 | modify it under the terms of the GNU Lesser General Public |
| cassyarduino | 1:34b5616a463d | 7 | License as published by the Free Software Foundation; either |
| cassyarduino | 1:34b5616a463d | 8 | version 2.1 of the License, or (at your option) any later version. |
| cassyarduino | 1:34b5616a463d | 9 | |
| cassyarduino | 1:34b5616a463d | 10 | This library is distributed in the hope that it will be useful, |
| cassyarduino | 1:34b5616a463d | 11 | but WITHOUT ANY WARRANTY; without even the implied warranty of |
| cassyarduino | 1:34b5616a463d | 12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
| cassyarduino | 1:34b5616a463d | 13 | Lesser General Public License for more details. |
| cassyarduino | 1:34b5616a463d | 14 | |
| cassyarduino | 1:34b5616a463d | 15 | You should have received a copy of the GNU Lesser General Public |
| cassyarduino | 1:34b5616a463d | 16 | License along with this library; if not, write to the Free Software |
| cassyarduino | 1:34b5616a463d | 17 | Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA |
| cassyarduino | 1:34b5616a463d | 18 | */ |
| cassyarduino | 1:34b5616a463d | 19 | |
| cassyarduino | 13:54b176a8dbd6 | 20 | #if defined(ARDUINO) |
| cassyarduino | 13:54b176a8dbd6 | 21 | #include <Arduino.h> |
| cassyarduino | 14:dc2eb02f9689 | 22 | #include <IPAddress.h> |
| cassyarduino | 13:54b176a8dbd6 | 23 | #endif |
| cassyarduino | 13:54b176a8dbd6 | 24 | #if defined(__MBED__) |
| cassyarduino | 13:54b176a8dbd6 | 25 | #include <mbed.h> |
| cassyarduino | 13:54b176a8dbd6 | 26 | #include "mbed/Print.h" |
| cassyarduino | 14:dc2eb02f9689 | 27 | #include "mbed/IPAddress.h" |
| cassyarduino | 13:54b176a8dbd6 | 28 | #endif |
| cassyarduino | 13:54b176a8dbd6 | 29 | |
| cassyarduino | 13:54b176a8dbd6 | 30 | IPAddress::IPAddress() |
| cassyarduino | 13:54b176a8dbd6 | 31 | { |
| cassyarduino | 13:54b176a8dbd6 | 32 | _address.dword = 0; |
| cassyarduino | 1:34b5616a463d | 33 | } |
| cassyarduino | 1:34b5616a463d | 34 | |
| cassyarduino | 13:54b176a8dbd6 | 35 | IPAddress::IPAddress(uint8_t first_octet, uint8_t second_octet, uint8_t third_octet, uint8_t fourth_octet) |
| cassyarduino | 13:54b176a8dbd6 | 36 | { |
| cassyarduino | 13:54b176a8dbd6 | 37 | _address.bytes[0] = first_octet; |
| cassyarduino | 13:54b176a8dbd6 | 38 | _address.bytes[1] = second_octet; |
| cassyarduino | 13:54b176a8dbd6 | 39 | _address.bytes[2] = third_octet; |
| cassyarduino | 13:54b176a8dbd6 | 40 | _address.bytes[3] = fourth_octet; |
| cassyarduino | 13:54b176a8dbd6 | 41 | } |
| cassyarduino | 13:54b176a8dbd6 | 42 | |
| cassyarduino | 13:54b176a8dbd6 | 43 | IPAddress::IPAddress(uint32_t address) |
| cassyarduino | 13:54b176a8dbd6 | 44 | { |
| cassyarduino | 13:54b176a8dbd6 | 45 | _address.dword = address; |
| cassyarduino | 13:54b176a8dbd6 | 46 | } |
| cassyarduino | 13:54b176a8dbd6 | 47 | |
| cassyarduino | 13:54b176a8dbd6 | 48 | IPAddress::IPAddress(const uint8_t *address) |
| cassyarduino | 13:54b176a8dbd6 | 49 | { |
| cassyarduino | 13:54b176a8dbd6 | 50 | memcpy(_address.bytes, address, sizeof(_address.bytes)); |
| cassyarduino | 1:34b5616a463d | 51 | } |
| cassyarduino | 1:34b5616a463d | 52 | |
| cassyarduino | 13:54b176a8dbd6 | 53 | bool IPAddress::fromString(const char *address) |
| cassyarduino | 13:54b176a8dbd6 | 54 | { |
| cassyarduino | 13:54b176a8dbd6 | 55 | // TODO: add support for "a", "a.b", "a.b.c" formats |
| cassyarduino | 13:54b176a8dbd6 | 56 | |
| cassyarduino | 13:54b176a8dbd6 | 57 | uint16_t acc = 0; // Accumulator |
| cassyarduino | 13:54b176a8dbd6 | 58 | uint8_t dots = 0; |
| cassyarduino | 13:54b176a8dbd6 | 59 | |
| cassyarduino | 13:54b176a8dbd6 | 60 | while (*address) |
| cassyarduino | 13:54b176a8dbd6 | 61 | { |
| cassyarduino | 13:54b176a8dbd6 | 62 | char c = *address++; |
| cassyarduino | 13:54b176a8dbd6 | 63 | if (c >= '0' && c <= '9') |
| cassyarduino | 13:54b176a8dbd6 | 64 | { |
| cassyarduino | 13:54b176a8dbd6 | 65 | acc = acc * 10 + (c - '0'); |
| cassyarduino | 13:54b176a8dbd6 | 66 | if (acc > 255) { |
| cassyarduino | 13:54b176a8dbd6 | 67 | // Value out of [0..255] range |
| cassyarduino | 13:54b176a8dbd6 | 68 | return false; |
| cassyarduino | 13:54b176a8dbd6 | 69 | } |
| cassyarduino | 13:54b176a8dbd6 | 70 | } |
| cassyarduino | 13:54b176a8dbd6 | 71 | else if (c == '.') |
| cassyarduino | 13:54b176a8dbd6 | 72 | { |
| cassyarduino | 13:54b176a8dbd6 | 73 | if (dots == 3) { |
| cassyarduino | 13:54b176a8dbd6 | 74 | // Too much dots (there must be 3 dots) |
| cassyarduino | 13:54b176a8dbd6 | 75 | return false; |
| cassyarduino | 13:54b176a8dbd6 | 76 | } |
| cassyarduino | 13:54b176a8dbd6 | 77 | _address.bytes[dots++] = acc; |
| cassyarduino | 13:54b176a8dbd6 | 78 | acc = 0; |
| cassyarduino | 13:54b176a8dbd6 | 79 | } |
| cassyarduino | 13:54b176a8dbd6 | 80 | else |
| cassyarduino | 13:54b176a8dbd6 | 81 | { |
| cassyarduino | 13:54b176a8dbd6 | 82 | // Invalid char |
| cassyarduino | 13:54b176a8dbd6 | 83 | return false; |
| cassyarduino | 13:54b176a8dbd6 | 84 | } |
| cassyarduino | 13:54b176a8dbd6 | 85 | } |
| cassyarduino | 13:54b176a8dbd6 | 86 | |
| cassyarduino | 13:54b176a8dbd6 | 87 | if (dots != 3) { |
| cassyarduino | 13:54b176a8dbd6 | 88 | // Too few dots (there must be 3 dots) |
| cassyarduino | 13:54b176a8dbd6 | 89 | return false; |
| cassyarduino | 13:54b176a8dbd6 | 90 | } |
| cassyarduino | 13:54b176a8dbd6 | 91 | _address.bytes[3] = acc; |
| cassyarduino | 13:54b176a8dbd6 | 92 | return true; |
| cassyarduino | 1:34b5616a463d | 93 | } |
| cassyarduino | 1:34b5616a463d | 94 | |
| cassyarduino | 13:54b176a8dbd6 | 95 | IPAddress& IPAddress::operator=(const uint8_t *address) |
| cassyarduino | 13:54b176a8dbd6 | 96 | { |
| cassyarduino | 13:54b176a8dbd6 | 97 | memcpy(_address.bytes, address, sizeof(_address.bytes)); |
| cassyarduino | 1:34b5616a463d | 98 | return *this; |
| cassyarduino | 1:34b5616a463d | 99 | } |
| cassyarduino | 1:34b5616a463d | 100 | |
| cassyarduino | 13:54b176a8dbd6 | 101 | IPAddress& IPAddress::operator=(uint32_t address) |
| cassyarduino | 13:54b176a8dbd6 | 102 | { |
| cassyarduino | 13:54b176a8dbd6 | 103 | _address.dword = address; |
| cassyarduino | 1:34b5616a463d | 104 | return *this; |
| cassyarduino | 1:34b5616a463d | 105 | } |
| cassyarduino | 1:34b5616a463d | 106 | |
| cassyarduino | 1:34b5616a463d | 107 | bool IPAddress::operator==(const uint8_t* addr) const |
| cassyarduino | 1:34b5616a463d | 108 | { |
| cassyarduino | 13:54b176a8dbd6 | 109 | return memcmp(addr, _address.bytes, sizeof(_address.bytes)) == 0; |
| cassyarduino | 1:34b5616a463d | 110 | } |
| cassyarduino | 1:34b5616a463d | 111 | |
| cassyarduino | 13:54b176a8dbd6 | 112 | size_t IPAddress::printTo(Print& p) const |
| cassyarduino | 13:54b176a8dbd6 | 113 | { |
| cassyarduino | 13:54b176a8dbd6 | 114 | size_t n = 0; |
| cassyarduino | 13:54b176a8dbd6 | 115 | for (int i =0; i < 3; i++) |
| cassyarduino | 13:54b176a8dbd6 | 116 | { |
| cassyarduino | 13:54b176a8dbd6 | 117 | n += p.print(_address.bytes[i], DEC); |
| cassyarduino | 13:54b176a8dbd6 | 118 | n += p.print('.'); |
| cassyarduino | 13:54b176a8dbd6 | 119 | } |
| cassyarduino | 13:54b176a8dbd6 | 120 | n += p.print(_address.bytes[3], DEC); |
| cassyarduino | 13:54b176a8dbd6 | 121 | return n; |
| cassyarduino | 13:54b176a8dbd6 | 122 | } |