123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214 |
- /*
- * Asterisk -- An open source telephony toolkit.
- *
- * Copyright (C) 2013, Digium, Inc.
- *
- * David M. Lee, II <dlee@digium.com>
- *
- * See http://www.asterisk.org for more information about
- * the Asterisk project. Please do not directly contact
- * any of the maintainers of this project for assistance;
- * the project provides a web site, mailing lists and IRC
- * channels for your use.
- *
- * This program is free software, distributed under the terms of
- * the GNU General Public License Version 2. See the LICENSE file
- * at the top of the source tree.
- */
- #ifndef _ASTERISK_ENDPOINTS_H
- #define _ASTERISK_ENDPOINTS_H
- /*! \file
- *
- * \brief Endpoint abstractions.
- *
- * \author David M. Lee, II <dlee@digium.com>
- * \since 12
- *
- * An endpoint is an external device/system that may offer/accept channels
- * to/from Asterisk. While this is a very useful concept for end users, it is
- * surprisingly \a not a core concept within Asterisk iteself.
- *
- * This file defines \ref ast_endpoint as a seperate object, which channel
- * drivers may use to expose their concept of an endpoint. As the channel driver
- * creates channels, it can use ast_endpoint_add_channel() to associate channels
- * to the endpoint. This updates the endpoint appropriately, and forwards all of
- * the channel's events to the endpoint's topic.
- *
- * In order to avoid excessive locking on the endpoint object itself, the
- * mutable state is not accessible via getters. Instead, you can create a
- * snapshot using ast_endpoint_snapshot_create() to get a consistent snapshot of
- * the internal state.
- */
- #include "asterisk/json.h"
- /*!
- * \brief Valid states for an endpoint.
- * \since 12
- */
- enum ast_endpoint_state {
- /*! The endpoint state is not known. */
- AST_ENDPOINT_UNKNOWN,
- /*! The endpoint is not available. */
- AST_ENDPOINT_OFFLINE,
- /*! The endpoint is available. */
- AST_ENDPOINT_ONLINE,
- };
- /*!
- * \brief Returns a string representation of the given endpoint state.
- *
- * \param state Endpoint state.
- * \return String representation of \a state.
- * \return \c "?" if \a state isn't in \ref ast_endpoint_state.
- */
- const char *ast_endpoint_state_to_string(enum ast_endpoint_state state);
- /*!
- * \brief Opaque struct representing an endpoint.
- *
- * An endpoint is an external device/system that may offer/accept channels
- * to/from Asterisk.
- *
- * \since 12
- */
- struct ast_endpoint;
- /*!
- * \brief Finds the endpoint with the given tech[/resource] id.
- *
- * Endpoints are refcounted, so ao2_cleanup() when you're done.
- *
- * \note The resource portion of an ID is optional. If not provided,
- * an aggregate endpoint for the entire technology is returned.
- * These endpoints must not be modified, but can be subscribed
- * to in order to receive updates for all endpoints of a given
- * technology.
- *
- * \param id Tech[/resource] id to look for.
- * \return Associated endpoint.
- * \return \c NULL if not found.
- *
- * \since 12
- */
- struct ast_endpoint *ast_endpoint_find_by_id(const char *id);
- /*!
- * \brief Create an endpoint struct.
- *
- * The endpoint is created with a state of UNKNOWN and max_channels of -1
- * (unlimited). While \ref ast_endpoint is AO2 managed, you have to
- * shut it down with ast_endpoint_shutdown() to clean up references from
- * subscriptions.
- *
- * \param tech Technology for this endpoint.
- * \param resource Name of this endpoint.
- * \return Newly created endpoint.
- * \return \c NULL on error.
- * \since 12
- */
- struct ast_endpoint *ast_endpoint_create(const char *tech, const char *resource);
- /*!
- * \brief Shutsdown an \ref ast_endpoint.
- *
- * \param endpoint Endpoint to shut down.
- * \since 12
- */
- void ast_endpoint_shutdown(struct ast_endpoint *endpoint);
- /*!
- * \brief Gets the technology of the given endpoint.
- *
- * This is an immutable string describing the channel provider technology
- * (SIP, IAX2, etc.).
- *
- * \param endpoint The endpoint.
- * \return Tec of the endpoint.
- * \return \c NULL if endpoint is \c NULL.
- * \since 12
- */
- const char *ast_endpoint_get_tech(const struct ast_endpoint *endpoint);
- /*!
- * \brief Gets the resource name of the given endpoint.
- *
- * This is unique for the endpoint's technology, and immutable.
- *
- * \note If the endpoint being queried is a technology aggregate
- * endpoint, this will be an empty string.
- *
- * \param endpoint The endpoint.
- * \return Resource name of the endpoint.
- * \return \c NULL if endpoint is \c NULL.
- * \since 12
- */
- const char *ast_endpoint_get_resource(const struct ast_endpoint *endpoint);
- /*!
- * \brief Gets the tech/resource id of the given endpoint.
- *
- * This is unique across all endpoints, and immutable.
- *
- * \param endpoint The endpoint.
- * \return Tech/resource id of the endpoint.
- * \return \c NULL if endpoint is \c NULL.
- * \since 12
- */
- const char *ast_endpoint_get_id(const struct ast_endpoint *endpoint);
- /*!
- * \brief Gets the state of the given endpoint.
- *
- * \param endpoint The endpoint.
- * \return state.
- * \return \c AST_ENDPOINT_UNKNOWN if endpoint is \c NULL.
- * \since 13.4
- */
- enum ast_endpoint_state ast_endpoint_get_state(const struct ast_endpoint *endpoint);
- /*!
- * \brief Updates the state of the given endpoint.
- *
- * \param endpoint Endpoint to modify.
- * \param state New state.
- * \since 12
- */
- void ast_endpoint_set_state(struct ast_endpoint *endpoint,
- enum ast_endpoint_state state);
- /*!
- * \brief Updates the maximum number of channels an endpoint supports.
- *
- * Set to -1 for unlimited channels.
- *
- * \param endpoint Endpoint to modify.
- * \param max_channels Maximum number of concurrent channels this endpoint
- * supports.
- */
- void ast_endpoint_set_max_channels(struct ast_endpoint *endpoint,
- int max_channels);
- /*!
- * \since 12
- * \brief Adds a channel to the given endpoint.
- *
- * This updates the endpoint's statistics, as well as forwarding all of the
- * channel's messages to the endpoint's topic.
- *
- * The channel is automagically removed from the endpoint when it is disposed
- * of.
- *
- * \param endpoint
- * \param chan Channel.
- * \retval 0 on success.
- * \retval Non-zero on error.
- */
- int ast_endpoint_add_channel(struct ast_endpoint *endpoint,
- struct ast_channel *chan);
- #endif /* _ASTERISK_ENDPOINTS_H */
|