A device detection library that is used natively or by 51Degrees products

ip.h

1/* *********************************************************************
2 * This Original Work is copyright of 51 Degrees Mobile Experts Limited.
3 * Copyright 2026 51 Degrees Mobile Experts Limited, Davidson House,
4 * Forbury Square, Reading, Berkshire, United Kingdom RG1 3EU.
5 *
6 * This Original Work is licensed under the European Union Public Licence
7 * (EUPL) v.1.2 and is subject to its terms as set out below.
8 *
9 * If a copy of the EUPL was not distributed with this file, You can obtain
10 * one at https://opensource.org/licenses/EUPL-1.2.
11 *
12 * The 'Compatible Licences' set out in the Appendix to the EUPL (as may be
13 * amended by the European Commission) shall be deemed incompatible for
14 * the purposes of the Work and the provisions of the compatibility
15 * clause in Article 5 of the EUPL shall not apply.
16 *
17 * If using the Work as, or as part of, a network application, by
18 * including the attribution notice(s) required under Article 5 of the EUPL
19 * in the end user terms of the application under an appropriate heading,
20 * such notice(s) shall fulfill the requirements of that article.
21 * ********************************************************************* */
22
23#ifndef FIFTYONE_DEGREES_IP_H_INCLUDED
24#define FIFTYONE_DEGREES_IP_H_INCLUDED
25
26#ifdef FIFTYONE_DEGREES_IPI_SYMBOLS
27#include "ipiSymbols.h"
28#endif
29
43
44#include <stdint.h>
45#include <stdbool.h>
46#include <stdlib.h>
47#include "data.h"
48#include "common.h"
49
53#define FIFTYONE_DEGREES_IPV4_LENGTH 4
54
58#define FIFTYONE_DEGREES_IPV6_LENGTH 16
59
63typedef enum e_fiftyone_degrees_ip_type {
68
72typedef struct fiftyone_degrees_ip_address_t {
75 byte type;
77
87 const char *start,
88 const char *end,
90
104 const unsigned char *ipAddress1,
105 const unsigned char *ipAddress2,
107
111
112#endif
bool fiftyoneDegreesIpAddressParse(const char *start, const char *end, fiftyoneDegreesIpAddress *address)
Parse a single IP address string.
fiftyoneDegreesIpType
Enum indicating the type of IP address.
Definition ip.h:63
#define FIFTYONE_DEGREES_IPV6_LENGTH
The number of bytes in an Ipv6 Address.
Definition ip.h:58
int fiftyoneDegreesIpAddressesCompare(const unsigned char *ipAddress1, const unsigned char *ipAddress2, fiftyoneDegreesIpType type)
Compare two IP addresses in its binary form.
@ FIFTYONE_DEGREES_IP_TYPE_INVALID
Invalid IP address.
Definition ip.h:64
@ FIFTYONE_DEGREES_IP_TYPE_IPV4
An IPv4 address.
Definition ip.h:65
@ FIFTYONE_DEGREES_IP_TYPE_IPV6
An IPv6 address.
Definition ip.h:66
The structure to hold a IP Address in byte array format.
Definition ip.h:72
byte type
The type of the IP.
Definition ip.h:75
byte value[FIFTYONE_DEGREES_IPV6_LENGTH]
Buffer to hold the IP address bytes array.
Definition ip.h:73