ascii-chat
Binary v0.15.83-53-gb711d8720
Library lib/v0.3.2-701-gb711d8720
Video chat in your terminal
Loading...
Searching...
No Matches
ip.h
Go to the documentation of this file.
1#pragma once
2
46
47#include <stdint.h>
48#include <stddef.h>
49#include "../common.h"
50
51/* ============================================================================
52 * IP Address Validation Functions
53 * @{
54 */
55
77int is_valid_ipv4(const char *ip);
78
101int is_valid_ipv6(const char *ip);
102
104
105/* ============================================================================
106 * IP Address Parsing Functions
107 * @{
108 */
109
133int parse_ipv6_address(const char *input, char *output, size_t output_size);
134
168int parse_ip_with_port(const char *input, char *ip_output, size_t ip_output_size, uint16_t *port_output);
169
223int parse_address_with_optional_port(const char *input, char *address_output, size_t address_output_size,
224 uint16_t *port_output, uint16_t default_port);
225
227
228/* ============================================================================
229 * IP Address Formatting Functions
230 * @{
231 */
232
265asciichat_error_t format_ip_address(int family, const struct sockaddr *addr, char *output, size_t output_size);
266
268asciichat_error_t parse_numeric_socket_address(const char *host, uint16_t port, struct sockaddr_storage *address,
269 socklen_t *length);
270
301asciichat_error_t format_ip_with_port(const char *ip, uint16_t port, char *output, size_t output_size);
302
304
305/* ============================================================================
306 * IP Version Detection & Unified Validation
307 * @{
308 */
309
330int get_ip_version(const char *ip);
331
355int is_valid_ip(const char *ip);
356
358
359/* ============================================================================
360 * IP Address Comparison & Equality
361 * @{
362 */
363
394int ip_equals(const char *ip1, const char *ip2);
395
422int ip_compare(const char *ip1, const char *ip2);
423
458int compare_ip_port_strings(const char *ip_port1, const char *ip_port2);
459
461
462/* ============================================================================
463 * CIDR/Subnet Utilities
464 * @{
465 */
466
498int parse_cidr(const char *cidr, char *ip_out, size_t ip_out_size, int *prefix_out);
499
526int ip_in_cidr(const char *ip, const char *cidr);
527
551int ip_in_cidr_parsed(const char *ip, const char *network, int prefix_len);
552
554
555/* ============================================================================
556 * IPv4-Mapped IPv6 Utilities
557 * @{
558 */
559
585asciichat_error_t ipv4_to_ipv6_mapped(const char *ipv4, char *ipv6_out, size_t out_size);
586
613asciichat_error_t extract_ipv4_from_mapped_ipv6(const char *ipv6, char *ipv4_out, size_t out_size);
614
633int is_ipv4_mapped_ipv6(const char *ipv6);
634
636
637/* ============================================================================
638 * IPv6 Canonicalization & Formatting
639 * @{
640 */
641
673asciichat_error_t canonicalize_ipv6(const char *ipv6, char *canonical_out, size_t out_size);
674
703asciichat_error_t expand_ipv6(const char *ipv6, char *expanded_out, size_t out_size);
704
734asciichat_error_t compact_ipv6(const char *ipv6, char *compact_out, size_t out_size);
735
737
738/* ============================================================================
739 * IP Address Classification Functions
740 * @{
741 */
742
766int is_anycast_ipv6(const char *ipv6);
767
768/* ============================================================================
769 * IP Address Classification Functions
770 * @{
771 */
772
794int is_lan_ipv4(const char *ip);
795
815int is_lan_ipv6(const char *ip);
816
838int is_broadcast_ipv4(const char *ip);
839
860int is_broadcast_ipv6(const char *ip);
861
881int is_localhost_ipv4(const char *ip);
882
902int is_localhost_ipv6(const char *ip);
903
925int is_link_local_ipv4(const char *ip);
926
948int is_link_local_ipv6(const char *ip);
949
976int is_internet_ipv4(const char *ip);
977
1003int is_internet_ipv6(const char *ip);
1004
1029int extract_ip_from_address(const char *addr_with_port, char *ip_out, size_t ip_out_size);
1030
1057const char *get_ip_type_string(const char *ip);
1058
⚙️ Common definitions, error codes, macros, and types shared throughout the application
unsigned short uint16_t
Definition common.h:61
asciichat_error_t
Error and exit codes - unified status values (0-255).
Definition error_codes.h:44
int ip_compare(const char *ip1, const char *ip2)
Compare two IP addresses for sorting.
Definition ip.c:520
asciichat_error_t expand_ipv6(const char *ipv6, char *expanded_out, size_t out_size)
Expand IPv6 address to full form.
Definition ip.c:851
int is_lan_ipv6(const char *ip)
Check if IPv6 address is a private/LAN address.
Definition ip.c:1135
asciichat_error_t format_ip_with_port(const char *ip, uint16_t port, char *output, size_t output_size)
Format IP address with port number.
Definition ip.c:176
int is_broadcast_ipv6(const char *ip)
Check if IPv6 address is a multicast address.
Definition ip.c:1187
int ip_in_cidr(const char *ip, const char *cidr)
Check if IP address is within CIDR range.
Definition ip.c:739
int is_link_local_ipv6(const char *ip)
Check if IPv6 address is a link-local address.
Definition ip.c:1296
asciichat_error_t extract_ipv4_from_mapped_ipv6(const char *ipv6, char *ipv4_out, size_t out_size)
Extract IPv4 address from IPv6-mapped format.
Definition ip.c:815
int is_localhost_ipv6(const char *ip)
Check if IPv6 address is localhost.
Definition ip.c:1239
int is_internet_ipv4(const char *ip)
Check if IPv4 address is a public internet address.
Definition ip.c:1327
int is_valid_ipv4(const char *ip)
Check if a string is a valid IPv4 address.
Definition ip.c:32
int extract_ip_from_address(const char *addr_with_port, char *ip_out, size_t ip_out_size)
Extract IP address (without port) from formatted address string.
Definition ip.c:972
const char * get_ip_type_string(const char *ip)
Get human-readable string describing IP address type.
Definition ip.c:1010
int parse_ip_with_port(const char *input, char *ip_output, size_t ip_output_size, uint16_t *port_output)
Parse IP address and port from string.
Definition ip.c:210
int is_lan_ipv4(const char *ip)
Check if IPv4 address is a private/LAN address.
Definition ip.c:1104
asciichat_error_t compact_ipv6(const char *ipv6, char *compact_out, size_t out_size)
Compress IPv6 address using :: notation.
Definition ip.c:918
int parse_cidr(const char *cidr, char *ip_out, size_t ip_out_size, int *prefix_out)
Parse CIDR notation into IP and prefix length.
Definition ip.c:584
int is_valid_ipv6(const char *ip)
Check if a string is a valid IPv6 address.
Definition ip.c:63
int is_ipv4_mapped_ipv6(const char *ipv6)
Check if IPv6 address is IPv4-mapped.
Definition ip.c:779
int is_broadcast_ipv4(const char *ip)
Check if IPv4 address is a broadcast address.
Definition ip.c:1166
int is_localhost_ipv4(const char *ip)
Check if IPv4 address is localhost.
Definition ip.c:1218
int ip_equals(const char *ip1, const char *ip2)
Compare two IP addresses for equality.
Definition ip.c:476
int parse_address_with_optional_port(const char *input, char *address_output, size_t address_output_size, uint16_t *port_output, uint16_t default_port)
Parse address with optional port from string.
Definition ip.c:284
int is_link_local_ipv4(const char *ip)
Check if IPv4 address is a link-local address.
Definition ip.c:1275
int is_valid_ip(const char *ip)
Check if string is a valid IP address (IPv4 or IPv6).
Definition ip.c:453
int is_internet_ipv6(const char *ip)
Check if IPv6 address is a public internet address.
Definition ip.c:1409
int ip_in_cidr_parsed(const char *ip, const char *network, int prefix_len)
Check if IP is within CIDR range (parsed form).
Definition ip.c:685
asciichat_error_t canonicalize_ipv6(const char *ipv6, char *canonical_out, size_t out_size)
Canonicalize IPv6 address to standard form.
Definition ip.c:888
int get_ip_version(const char *ip)
Get IP address version.
Definition ip.c:429
int parse_ipv6_address(const char *input, char *output, size_t output_size)
Parse IPv6 address, removing brackets if present.
Definition ip.c:116
int compare_ip_port_strings(const char *ip_port1, const char *ip_port2)
Compare two "IP:port" strings with IPv6 normalization.
Definition ip.c:1052
int is_anycast_ipv6(const char *ipv6)
Check if IPv6 address is anycast.
Definition ip.c:923
asciichat_error_t format_ip_address(int family, const struct sockaddr *addr, char *output, size_t output_size)
Format IP address from socket address structure.
asciichat_error_t ipv4_to_ipv6_mapped(const char *ipv4, char *ipv6_out, size_t out_size)
Convert IPv4 address to IPv6-mapped format.
Definition ip.c:759
asciichat_error_t parse_numeric_socket_address(const char *host, uint16_t port, struct sockaddr_storage *address, socklen_t *length)
Definition ip.c:154