/* SPDX-License-Identifier: GPL-2.0 */ /** \file net.h exported symbols from net.c */ /** The maximum length of the host component in an URL. */ #define MAX_HOSTLEN 256 /** * Functions to parse and validate (parts of) URLs. */ char *parse_cidr(const char *cidr, char *addr, ssize_t addrlen, int32_t *netmask); char *parse_url(const char *url, char *host, ssize_t hostlen, int32_t *port); const char *stringify_port(int port, const char *transport); int lookup_address(unsigned l4type, bool passive, const char *host, int port_number, struct addrinfo **result); /** * Generic socket creation (passive and active sockets). */ int makesock(unsigned l4type, bool passive, const char *host, uint16_t port_number); int makesock_addrinfo(unsigned l4type, bool passive, struct addrinfo *ai); static inline int para_connect(unsigned l4type, const char *host, uint16_t port) { return makesock(l4type, false, host, port); } void extract_v4_addr(const struct sockaddr_storage *ss, struct in_addr *ia); bool sockaddr_equal(const struct sockaddr *sa1, const struct sockaddr *sa2); /** * Functions to support listening sockets. */ /** How many pending connections queue of a listening server will hold. */ #define BACKLOG 10 int para_listen(unsigned l4type, const char *addr, uint16_t port); int para_listen_simple(unsigned l4type, uint16_t port); /** Pretty-printing of IPv4/6 socket addresses */ char *remote_name(int sockfd); int recv_bin_buffer(int fd, char *buf, size_t size); int recv_buffer(int fd, char *buf, size_t size); int para_accept(int fd, void *addr, socklen_t size, int *new_fd); int create_local_socket(const char *name); int connect_local_socket(const char *name); /* True if ss holds a v6-mapped-v4 address (RFC 4291, 2.5.5.2) */ static inline bool ss_is_addr_v4mapped(const struct sockaddr_storage *ss) { const struct sockaddr_in6 *ia6 = (const struct sockaddr_in6 *)ss; return ss->ss_family == AF_INET6 && IN6_IS_ADDR_V4MAPPED(&ia6->sin6_addr); }