#ifndef PROTON_NETADDR_H #define PROTON_NETADDR_H /* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ #include #include #ifdef __cplusplus extern "C" { #endif /** * @file * * @copybrief pn_netaddr_t * * @addtogroup proactor * @{ */ /** * **Unsettled API** - The network address of a proactor transport. */ typedef struct pn_netaddr_t pn_netaddr_t; /** * Format a network address string in `buf`. * * @return the length of the string (excluding trailing '\0'), if >= size then * the address was truncated. */ PNP_EXTERN int pn_netaddr_str(const pn_netaddr_t *addr, char *buf, size_t size); /** * Get the local address of a transport. Return `NULL` if not available. * Pointer is invalid after the transport closes (PN_TRANSPORT_CLOSED event is handled) */ PNP_EXTERN const pn_netaddr_t *pn_transport_local_addr(pn_transport_t *t); /** * Get the local address of a transport. Return `NULL` if not available. * Pointer is invalid after the transport closes (PN_TRANSPORT_CLOSED event is handled) */ PNP_EXTERN const pn_netaddr_t *pn_transport_remote_addr(pn_transport_t *t); /** * Get the listening addresses of a listener. * Addresses are only available after the @ref PN_LISTENER_OPEN event for the listener. * * A listener can have more than one address for several reasons: * - DNS host records may indicate more than one address * - On a multi-homed host, listening on the default host "" will listen on all local addresses. * - Some IPv4/IPV6 configurations may expand a single address into a v4/v6 pair. * * pn_netaddr_next() will iterate over the addresses in the list. * * @param l points to the listener * @return The first listening address or NULL if there are no addresses are available. * Use pn_netaddr_next() to iterate over the list. * Pointer is invalid after the listener closes (PN_LISTENER_CLOSED event is handled) */ PNP_EXTERN const pn_netaddr_t *pn_listener_addr(pn_listener_t *l); /** * @return Pointer to the next address in a list of addresses, NULL if at the end of the list or * if this address is not part of a list. */ PNP_EXTERN const pn_netaddr_t *pn_netaddr_next(const pn_netaddr_t *na); struct sockaddr; /** * On POSIX or Windows, get the underlying `struct sockaddr`. * Return NULL if not available. */ PNP_EXTERN const struct sockaddr *pn_netaddr_sockaddr(const pn_netaddr_t *na); /** * On POSIX or Windows, get the size of the underlying `struct sockaddr`. * Return 0 if not available. */ PNP_EXTERN size_t pn_netaddr_socklen(const pn_netaddr_t *na); /** * Get the host and port name from na as separate strings. * Returns 0 if successful, non-0 on error. */ PNP_EXTERN int pn_netaddr_host_port(const pn_netaddr_t* na, char *host, size_t hlen, char *port, size_t plen); /** * **Deprecated** - Use ::pn_transport_local_addr() */ PN_DEPRECATED("Use pn_transport_local_addr") PNP_EXTERN const pn_netaddr_t *pn_netaddr_local(pn_transport_t *t); /** * **Deprecated** - Use ::pn_transport_remote_addr() */ PN_DEPRECATED("Use pn_transport_remote_addr") PNP_EXTERN const pn_netaddr_t *pn_netaddr_remote(pn_transport_t *t); /** * **Deprecated** - Use ::pn_listener_addr() */ PN_DEPRECATED("Use pn_listener_addr") PNP_EXTERN const pn_netaddr_t *pn_netaddr_listening(pn_listener_t *l); /** * @} */ #ifdef __cplusplus } #endif #endif /* PROTON_NETADDR_H */