mirror of
				https://github.com/pascallanger/DIY-Multiprotocol-TX-Module.git
				synced 2025-10-31 03:14:16 +00:00 
			
		
		
		
	
		
			
	
	
		
			83 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			83 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
|  | /*
 | ||
|  |   IPAddress.h - 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 | ||
|  | */ | ||
|  | 
 | ||
|  | #ifndef IPAddress_h
 | ||
|  | #define IPAddress_h
 | ||
|  | 
 | ||
|  | #include <Printable.h>
 | ||
|  | 
 | ||
|  | // A class to make it easier to handle and pass around IP addresses
 | ||
|  | 
 | ||
|  | class IPAddress : public Printable | ||
|  | { | ||
|  | private: | ||
|  |     uint8_t _address[4];  // IPv4 address
 | ||
|  |     // Access the raw byte array containing the address.  Because this returns a pointer
 | ||
|  |     // to the internal structure rather than a copy of the address this function should only
 | ||
|  |     // be used when you know that the usage of the returned uint8_t* will be transient and not
 | ||
|  |     // stored.
 | ||
|  |     uint8_t* raw_address() { return _address; }; | ||
|  | 
 | ||
|  | public: | ||
|  |     // Constructors
 | ||
|  |     IPAddress(); | ||
|  |     IPAddress(uint8_t first_octet, uint8_t second_octet, uint8_t third_octet, uint8_t fourth_octet); | ||
|  |     IPAddress(uint32_t address); | ||
|  |     IPAddress(const uint8_t *address); | ||
|  | 
 | ||
|  |     // Overloaded cast operator to allow IPAddress objects to be used where a pointer
 | ||
|  |     // to a four-byte uint8_t array is expected
 | ||
|  |     operator uint32_t() | ||
|  |     { | ||
|  |       register const uint32_t *p1 = (const uint32_t *)(const void *)_address; | ||
|  |       return *p1; | ||
|  |     }; | ||
|  |     bool operator==(const IPAddress& addr) | ||
|  |     { | ||
|  |       register const uint32_t *p1 = (const uint32_t*)_address; | ||
|  |       register const uint32_t *p2 = (const uint32_t*)(addr._address); | ||
|  | 
 | ||
|  |       return *p1 == *p2; | ||
|  |     }; | ||
|  |    | ||
|  |     bool operator==(const uint8_t* addr); | ||
|  | 
 | ||
|  |     // Overloaded index operator to allow getting and setting individual octets of the address
 | ||
|  |     uint8_t operator[](int index) const { return _address[index]; }; | ||
|  |     uint8_t& operator[](int index) { return _address[index]; }; | ||
|  | 
 | ||
|  |     // Overloaded copy operators to allow initialisation of IPAddress objects from other types
 | ||
|  |     IPAddress& operator=(const uint8_t *address); | ||
|  |     IPAddress& operator=(uint32_t address); | ||
|  | 
 | ||
|  |     virtual size_t printTo(Print& p) const; | ||
|  | 
 | ||
|  |     friend class EthernetClass; | ||
|  |     friend class UDP; | ||
|  |     friend class Client; | ||
|  |     friend class Server; | ||
|  |     friend class DhcpClass; | ||
|  |     friend class DNSClient; | ||
|  | }; | ||
|  | 
 | ||
|  | const IPAddress INADDR_NONE(0,0,0,0); | ||
|  | 
 | ||
|  | 
 | ||
|  | #endif
 |