|
| 1 | +#pragma once |
| 2 | + |
| 3 | +#include <stdint.h> |
| 4 | + |
| 5 | +class IPAddress { |
| 6 | +private: |
| 7 | + union { |
| 8 | + uint8_t bytes[4]; |
| 9 | + uint32_t dword; |
| 10 | + operator uint8_t* () const { return (uint8_t*) bytes; } |
| 11 | + } _address; |
| 12 | + |
| 13 | +public: |
| 14 | + // Constructors |
| 15 | + IPAddress() { IPAddress(0, 0, 0, 0); } |
| 16 | + IPAddress(uint8_t octet1, uint8_t octet2, uint8_t octet3, uint8_t octet4) { |
| 17 | + _address.bytes[0] = octet1; |
| 18 | + _address.bytes[1] = octet2; |
| 19 | + _address.bytes[2] = octet3; |
| 20 | + _address.bytes[3] = octet4; |
| 21 | + } |
| 22 | + IPAddress(uint32_t dword) { _address.dword = dword; } |
| 23 | + IPAddress(const uint8_t bytes[]) { |
| 24 | + _address.bytes[0] = bytes[0]; |
| 25 | + _address.bytes[1] = bytes[1]; |
| 26 | + _address.bytes[2] = bytes[2]; |
| 27 | + _address.bytes[3] = bytes[3]; |
| 28 | + } |
| 29 | + |
| 30 | + IPAddress(unsigned long dword) { _address.dword = (uint32_t) dword; } |
| 31 | + |
| 32 | + // Accessors |
| 33 | + uint32_t asWord() const { return _address.dword; } |
| 34 | + uint8_t *raw_address() { return _address.bytes; }; |
| 35 | + |
| 36 | + // Comparisons |
| 37 | + bool operator==(const IPAddress &rhs) const { |
| 38 | + return _address.dword == rhs.asWord(); |
| 39 | + } |
| 40 | + |
| 41 | + bool operator!=(const IPAddress &rhs) const { |
| 42 | + return _address.dword != rhs.asWord(); |
| 43 | + } |
| 44 | + |
| 45 | + // Indexing |
| 46 | + uint8_t operator[](int index) const { return _address.bytes[index]; } |
| 47 | + uint8_t &operator[](int index) { return _address.bytes[index]; } |
| 48 | + |
| 49 | + // Conversions |
| 50 | + operator uint32_t() const { return _address.dword; }; |
| 51 | + |
| 52 | + friend class EthernetClass; |
| 53 | + friend class UDP; |
| 54 | + friend class Client; |
| 55 | + friend class Server; |
| 56 | + friend class DhcpClass; |
| 57 | + friend class DNSClient; |
| 58 | +}; |
| 59 | + |
| 60 | +const IPAddress INADDR_NONE(0, 0, 0, 0); |
0 commit comments