ascii-chat 0.11.33
Video chat in your terminal
Loading...
Searching...
No Matches
ip.h
Go to the documentation of this file.
1#pragma once
2
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
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
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
297asciichat_error_t format_ip_with_port(const char *ip, uint16_t port, char *output, size_t output_size);
298
301/* ============================================================================
302 * IP Version Detection & Unified Validation
303 * @{
304 */
305
326int get_ip_version(const char *ip);
327
351int is_valid_ip(const char *ip);
352
355/* ============================================================================
356 * IP Address Comparison & Equality
357 * @{
358 */
359
390int ip_equals(const char *ip1, const char *ip2);
391
418int ip_compare(const char *ip1, const char *ip2);
419
454int compare_ip_port_strings(const char *ip_port1, const char *ip_port2);
455
458/* ============================================================================
459 * CIDR/Subnet Utilities
460 * @{
461 */
462
494int parse_cidr(const char *cidr, char *ip_out, size_t ip_out_size, int *prefix_out);
495
522int ip_in_cidr(const char *ip, const char *cidr);
523
547int ip_in_cidr_parsed(const char *ip, const char *network, int prefix_len);
548
551/* ============================================================================
552 * IPv4-Mapped IPv6 Utilities
553 * @{
554 */
555
581asciichat_error_t ipv4_to_ipv6_mapped(const char *ipv4, char *ipv6_out, size_t out_size);
582
609asciichat_error_t extract_ipv4_from_mapped_ipv6(const char *ipv6, char *ipv4_out, size_t out_size);
610
629int is_ipv4_mapped_ipv6(const char *ipv6);
630
633/* ============================================================================
634 * IPv6 Canonicalization & Formatting
635 * @{
636 */
637
669asciichat_error_t canonicalize_ipv6(const char *ipv6, char *canonical_out, size_t out_size);
670
699asciichat_error_t expand_ipv6(const char *ipv6, char *expanded_out, size_t out_size);
700
730asciichat_error_t compact_ipv6(const char *ipv6, char *compact_out, size_t out_size);
731
734/* ============================================================================
735 * IP Address Classification Functions
736 * @{
737 */
738
762int is_anycast_ipv6(const char *ipv6);
763
764/* ============================================================================
765 * IP Address Classification Functions
766 * @{
767 */
768
790int is_lan_ipv4(const char *ip);
791
811int is_lan_ipv6(const char *ip);
812
834int is_broadcast_ipv4(const char *ip);
835
856int is_broadcast_ipv6(const char *ip);
857
877int is_localhost_ipv4(const char *ip);
878
898int is_localhost_ipv6(const char *ip);
899
921int is_link_local_ipv4(const char *ip);
922
944int is_link_local_ipv6(const char *ip);
945
972int is_internet_ipv4(const char *ip);
973
999int is_internet_ipv6(const char *ip);
1000
1025int extract_ip_from_address(const char *addr_with_port, char *ip_out, size_t ip_out_size);
1026
1053const char *get_ip_type_string(const char *ip);
1054
unsigned short uint16_t
Definition common.h:57
asciichat_error_t
Error and exit codes - unified status values (0-255)
Definition error_codes.h:49
int ip_compare(const char *ip1, const char *ip2)
Compare two IP addresses for sorting.
Definition ip.c:601
asciichat_error_t expand_ipv6(const char *ipv6, char *expanded_out, size_t out_size)
Expand IPv6 address to full form.
Definition ip.c:932
int is_lan_ipv6(const char *ip)
Check if IPv6 address is a private/LAN address.
Definition ip.c:1216
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:221
int is_broadcast_ipv6(const char *ip)
Check if IPv6 address is a multicast address.
Definition ip.c:1268
int ip_in_cidr(const char *ip, const char *cidr)
Check if IP address is within CIDR range.
Definition ip.c:820
int is_link_local_ipv6(const char *ip)
Check if IPv6 address is a link-local address.
Definition ip.c:1377
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:896
int is_localhost_ipv6(const char *ip)
Check if IPv6 address is localhost.
Definition ip.c:1320
int is_internet_ipv4(const char *ip)
Check if IPv4 address is a public internet address.
Definition ip.c:1408
int is_valid_ipv4(const char *ip)
Check if a string is a valid IPv4 address.
Definition ip.c:58
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:1053
const char * get_ip_type_string(const char *ip)
Get human-readable string describing IP address type.
Definition ip.c:1091
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:296
int is_lan_ipv4(const char *ip)
Check if IPv4 address is a private/LAN address.
Definition ip.c:1185
asciichat_error_t compact_ipv6(const char *ipv6, char *compact_out, size_t out_size)
Compress IPv6 address using :: notation.
Definition ip.c:999
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:665
int is_valid_ipv6(const char *ip)
Check if a string is a valid IPv6 address.
Definition ip.c:105
int is_ipv4_mapped_ipv6(const char *ipv6)
Check if IPv6 address is IPv4-mapped.
Definition ip.c:860
int is_broadcast_ipv4(const char *ip)
Check if IPv4 address is a broadcast address.
Definition ip.c:1247
int is_localhost_ipv4(const char *ip)
Check if IPv4 address is localhost.
Definition ip.c:1299
int ip_equals(const char *ip1, const char *ip2)
Compare two IP addresses for equality.
Definition ip.c:557
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:370
int is_link_local_ipv4(const char *ip)
Check if IPv4 address is a link-local address.
Definition ip.c:1356
int is_valid_ip(const char *ip)
Check if string is a valid IP address (IPv4 or IPv6)
Definition ip.c:534
int is_internet_ipv6(const char *ip)
Check if IPv6 address is a public internet address.
Definition ip.c:1490
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:766
asciichat_error_t canonicalize_ipv6(const char *ipv6, char *canonical_out, size_t out_size)
Canonicalize IPv6 address to standard form.
Definition ip.c:969
int get_ip_version(const char *ip)
Get IP address version.
Definition ip.c:510
int parse_ipv6_address(const char *input, char *output, size_t output_size)
Parse IPv6 address, removing brackets if present.
Definition ip.c:158
int compare_ip_port_strings(const char *ip_port1, const char *ip_port2)
Compare two "IP:port" strings with IPv6 normalization.
Definition ip.c:1133
int is_anycast_ipv6(const char *ipv6)
Check if IPv6 address is anycast.
Definition ip.c:1004
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.
Definition ip.c:196
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:840