blob: 2f8fb12ac0b4649977887c0e71fc98d928236576 [file] [log] [blame]
#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 <proton/import_export.h>
#include <proton/types.h>
#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 */