Asterisk - The Open Source Telephony Project
21.4.1
|
Implementation of Inter-Asterisk eXchange Version 2 as specified in RFC 5456. More...
#include "asterisk.h"
#include <sys/mman.h>
#include <dirent.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <netinet/in_systm.h>
#include <netinet/ip.h>
#include <sys/time.h>
#include <signal.h>
#include <netdb.h>
#include <fcntl.h>
#include <sys/stat.h>
#include <regex.h>
#include "asterisk/paths.h"
#include "asterisk/lock.h"
#include "asterisk/frame.h"
#include "asterisk/channel.h"
#include "asterisk/module.h"
#include "asterisk/pbx.h"
#include "asterisk/sched.h"
#include "asterisk/io.h"
#include "asterisk/config.h"
#include "asterisk/cli.h"
#include "asterisk/translate.h"
#include "asterisk/md5.h"
#include "asterisk/crypto.h"
#include "asterisk/acl.h"
#include "asterisk/manager.h"
#include "asterisk/callerid.h"
#include "asterisk/app.h"
#include "asterisk/mwi.h"
#include "asterisk/astdb.h"
#include "asterisk/musiconhold.h"
#include "asterisk/features.h"
#include "asterisk/utils.h"
#include "asterisk/causes.h"
#include "asterisk/localtime.h"
#include "asterisk/dnsmgr.h"
#include "asterisk/devicestate.h"
#include "asterisk/stringfields.h"
#include "asterisk/linkedlists.h"
#include "asterisk/astobj2.h"
#include "asterisk/timing.h"
#include "asterisk/taskprocessor.h"
#include "asterisk/test.h"
#include "asterisk/security_events.h"
#include "asterisk/stasis_endpoints.h"
#include "asterisk/bridge.h"
#include "asterisk/stasis.h"
#include "asterisk/stasis_system.h"
#include "asterisk/stasis_channels.h"
#include "asterisk/format_cache.h"
#include "asterisk/format_compatibility.h"
#include "asterisk/format_cap.h"
#include "iax2/include/iax2.h"
#include "iax2/include/firmware.h"
#include "iax2/include/parser.h"
#include "iax2/include/provision.h"
#include "iax2/include/codec_pref.h"
#include "iax2/include/format_compatibility.h"
#include "iax2/include/netsock.h"
#include "jitterbuf.h"
Go to the source code of this file.
Data Structures | |
struct | active_list |
struct | addr_range |
struct | call_number_pool |
struct | chan_iax2_pvt |
struct | create_addr_info |
struct | dpcache |
struct | dpreq_data |
struct | dynamic_list |
struct | iax2_context |
struct | iax2_dpcache |
struct | iax2_peer |
struct | iax2_pkt_buf |
struct | iax2_registry |
struct | iax2_thread |
struct | iax2_trunk_peer |
struct | iax2_user |
struct | iax_rr |
struct | idle_list |
struct | parsed_dial_string |
struct | peercnt |
struct | registrations |
struct | show_peers_context |
struct | chan_iax2_pvt::signaling_queue |
struct | signaling_queue_entry |
struct | tpeers |
Macros | |
#define | ACN_FORMAT1 "%-24.25s %4u %4d %4d %5d %3d %5d %4d %6d %4d %4d %5d %3d %5d %4d %6d %s%s %4s%s\n" |
#define | ACN_FORMAT2 "%s %u %d %d %d %d %d %d %d %d %d %d %d %d %d %d %s%s %s%s\n" |
#define | AUTH_METHOD_NAMES_BUFSIZE 19 |
#define | CALLNO_ENTRY_GET_CALLNO(a) ((a) & 0x7FFF) |
#define | CALLNO_ENTRY_IS_VALIDATED(a) ((a) & 0x8000) |
#define | CALLNO_ENTRY_SET_VALIDATED(a) ((a) |= 0x8000) |
#define | CALLNO_ENTRY_TO_PTR(a) ((void *)(unsigned long)(a)) |
#define | CALLNO_TO_PTR(a) ((void *)(unsigned long)(a)) |
#define | CALLTOKEN_HASH_FORMAT "%s%u%d" /* address + port + ts + randomcalldata */ |
#define | CALLTOKEN_IE_FORMAT "%u?%s" /* time + ? + (40 char hash) */ |
#define | DEBUG_SCHED_MULTITHREAD |
#define | DEBUG_SUPPORT |
#define | DEFAULT_CONTEXT "default" |
#define | DEFAULT_DROP 3 |
#define | DEFAULT_FREQ_NOTOK 10 * 1000 /* How often to check, if the host is down... */ |
#define | DEFAULT_FREQ_OK 60 * 1000 /* How often to check for the host to be up */ |
#define | DEFAULT_MAX_THREAD_COUNT 100 |
#define | DEFAULT_MAXMS 2000 /* Must be faster than 2 seconds by default */ |
#define | DEFAULT_RETRY_TIME 1000 |
#define | DEFAULT_THREAD_COUNT 10 |
#define | DEFAULT_TRUNKDATA 640 * 10 |
#define | FORMAT "%-15.15s %-20.20s %-15.15s %-15.15s %-5.5s %-5.10s\n" |
#define | FORMAT "%-45.45s %-6.6s %-10.10s %-45.45s %8d %s\n" |
#define | FORMAT "%-20.20s %-40.40s %-10.10s %5.5d/%5.5d %5.5d/%5.5d %-5.5dms %-4.4dms %-4.4dms %-6.6s %s%s %3s%s\n" |
#define | FORMAT2 "%-15.15s %-20.20s %-15.15d %-15.15s %-5.5s %-5.10s\n" |
#define | FORMAT2 "%-45.45s %-6.6s %-10.10s %-45.45s %8.8s %s\n" |
#define | FORMAT2 "%-20.20s %-40.40s %-10.10s %-11.11s %-11.11s %-7.7s %-6.6s %-6.6s %s %s %9s\n" |
#define | FORMATB "%-20.20s %-40.40s %-10.10s %5.5d/%5.5d %5.5d/%5.5d [Native Bridged to ID=%5.5d]\n" |
#define | GAMMA (0.01) |
#define | IAX2_TRUNK_PREFACE (sizeof(struct iax_frame) + sizeof(struct ast_iax2_meta_hdr) + sizeof(struct ast_iax2_meta_trunk_hdr)) |
#define | IAX_ALLOWFWDOWNLOAD (uint64_t)(1LLU << 26) |
#define | IAX_ALREADYGONE (uint64_t)(1LLU << 9) |
#define | IAX_CALLENCRYPTED(pvt) (ast_test_flag64(pvt, IAX_ENCRYPTED) && ast_test_flag64(pvt, IAX_KEYPOPULATED)) |
#define | IAX_CAPABILITY_FULLBANDWIDTH 0xFFFF |
#define | IAX_CAPABILITY_LOWBANDWIDTH |
#define | IAX_CAPABILITY_LOWFREE |
#define | IAX_CAPABILITY_MEDBANDWIDTH |
#define | IAX_CODEC_NOCAP (uint64_t)(1LLU << 16) |
#define | IAX_CODEC_NOPREFS (uint64_t)(1LLU << 15) |
#define | IAX_CODEC_USER_FIRST (uint64_t)(1LLU << 14) |
#define | IAX_DEBUGDIGEST(msg, key) |
#define | IAX_DELAYPBXSTART (uint64_t)(1LLU << 25) |
#define | IAX_DELME (uint64_t)(1LLU << 1) |
#define | IAX_DYNAMIC (uint64_t)(1LLU << 6) |
#define | IAX_ENCRYPTED (uint64_t)(1LLU << 12) |
#define | IAX_FORCE_ENCRYPT (uint64_t)(1LLU << 30) |
#define | IAX_HASCALLERID (uint64_t)(1LLU << 0) |
#define | IAX_IMMEDIATE (uint64_t)(1LLU << 27) |
#define | IAX_KEYPOPULATED (uint64_t)(1LLU << 13) |
#define | IAX_MAXAUTHREQ (uint64_t)(1LLU << 24) |
#define | IAX_NOTRANSFER (uint64_t)(1LLU << 4) |
#define | IAX_PROVISION (uint64_t)(1LLU << 10) |
#define | IAX_QUELCH (uint64_t)(1LLU << 11) |
#define | IAX_RECVCONNECTEDLINE (uint64_t)(1LLU << 29) |
#define | IAX_RTAUTOCLEAR (uint64_t)(1LLU << 19) |
#define | IAX_RTCACHEFRIENDS (uint64_t)(1LLU << 17) |
#define | IAX_RTIGNOREREGEXPIRE (uint64_t)(1LLU << 21) |
#define | IAX_RTSAVE_SYSNAME (uint64_t)(1LLU << 8) |
#define | IAX_RTUPDATE (uint64_t)(1LLU << 18) |
#define | IAX_SENDANI (uint64_t)(1LLU << 7) |
#define | IAX_SENDCONNECTEDLINE (uint64_t)(1LLU << 28) |
#define | IAX_SHRINKCALLERID (uint64_t)(1LLU << 31) |
#define | IAX_TEMPONLY (uint64_t)(1LLU << 2) |
#define | IAX_TRANSFERMEDIA (uint64_t)(1LLU << 23) |
#define | IAX_TRUNK (uint64_t)(1LLU << 3) |
#define | IAX_TRUNKTIMESTAMPS (uint64_t)(1LLU << 22) |
#define | IAX_USEJITTERBUF (uint64_t)(1LLU << 5) |
#define | MARK_IAX_SUBCLASS_TX 0x8000 |
#define | MAX_JITTER_BUFFER 50 |
#define | MAX_PEER_BUCKETS 563 |
#define | MAX_RETRY_TIME 10000 |
#define | MAX_TIMESTAMP_SKEW 160 |
#define | MAX_TRUNK_MTU 1240 |
Maximum transmission unit for the UDP packet in the trunk not to be fragmented. This is based on 1516 - ethernet - ip - udp - iax minus one g711 frame = 1240. | |
#define | MAX_TRUNKDATA 640 * 200 |
#define | MAX_USER_BUCKETS MAX_PEER_BUCKETS |
#define | MEMORY_SIZE 100 |
#define | MIN_JITTER_BUFFER 10 |
#define | MIN_RETRY_TIME 100 |
#define | MIN_REUSE_TIME 60 /* Don't reuse a call number within 60 seconds */ |
#define | PEERS_FORMAT "%-15.15s %-40.40s %s %-40.40s %-6s%s %s %-11s %-32.32s\n" |
#define | PEERS_FORMAT2 "%-15.15s %-40.40s %s %-40.40s %-9s %s %-11s %-32.32s\n" |
#define | PTR_TO_CALLNO(a) ((unsigned short)(unsigned long)(a)) |
#define | PTR_TO_CALLNO_ENTRY(a) ((uint16_t)(unsigned long)(a)) |
#define | SCHED_MULTITHREADED |
#define | schedule_action(func, data) __schedule_action(func, data, __PRETTY_FUNCTION__) |
#define | TRUNK_CALL_START (IAX_MAX_CALLS / 2) |
#define | TS_GAP_FOR_JB_RESYNC 5000 |
Typedefs | |
typedef uint16_t | callno_entry |
Enumerations | |
enum | { CACHE_FLAG_EXISTS = (1 << 0), CACHE_FLAG_NONEXISTENT = (1 << 1), CACHE_FLAG_CANEXIST = (1 << 2), CACHE_FLAG_PENDING = (1 << 3), CACHE_FLAG_TIMEOUT = (1 << 4), CACHE_FLAG_TRANSMITTED = (1 << 5), CACHE_FLAG_UNKNOWN = (1 << 6), CACHE_FLAG_MATCHMORE = (1 << 7) } |
enum | { NEW_PREVENT = 0, NEW_ALLOW = 1, NEW_FORCE = 2, NEW_ALLOW_CALLTOKEN_VALIDATED = 3 } |
enum | callno_type { CALLNO_TYPE_NORMAL, CALLNO_TYPE_TRUNK } |
enum | calltoken_peer_enum { CALLTOKEN_DEFAULT = 0, CALLTOKEN_YES = 1, CALLTOKEN_AUTO = 2, CALLTOKEN_NO = 3 } |
Call token validation settings. More... | |
enum | iax2_state { IAX_STATE_STARTED = (1 << 0), IAX_STATE_AUTHENTICATED = (1 << 1), IAX_STATE_TBD = (1 << 2) } |
enum | iax2_thread_iostate { IAX_IOSTATE_IDLE, IAX_IOSTATE_READY, IAX_IOSTATE_PROCESSING, IAX_IOSTATE_SCHEDREADY } |
enum | iax2_thread_type { IAX_THREAD_TYPE_POOL, IAX_THREAD_TYPE_DYNAMIC } |
enum | iax_reg_state { REG_STATE_UNREGISTERED = 0, REG_STATE_REGSENT, REG_STATE_AUTHSENT, REG_STATE_REGISTERED, REG_STATE_REJECTED, REG_STATE_TIMEOUT, REG_STATE_NOAUTH } |
enum | iax_transfer_state { TRANSFER_NONE = 0, TRANSFER_BEGIN, TRANSFER_READY, TRANSFER_RELEASED, TRANSFER_PASSTHROUGH, TRANSFER_MBEGIN, TRANSFER_MREADY, TRANSFER_MRELEASED, TRANSFER_MPASSTHROUGH, TRANSFER_MEDIA, TRANSFER_MEDIAPASS } |
Functions | |
static void | __attempt_transmit (const void *data) |
static void | __auth_reject (const void *nothing) |
static void | __auto_congest (const void *nothing) |
static void | __auto_hangup (const void *nothing) |
static int | __do_deliver (void *data) |
static void | __expire_registry (const void *data) |
static int | __find_callno (unsigned short callno, unsigned short dcallno, struct ast_sockaddr *addr, int new, int sockfd, int return_locked, int check_dcallno) |
static void | __get_from_jb (const void *p) |
static void | __iax2_do_register_s (const void *data) |
static void | __iax2_poke_noanswer (const void *data) |
static void | __iax2_poke_peer_s (const void *data) |
static int | __iax2_show_peers (int fd, int *total, struct mansession *s, const int argc, const char *const argv[]) |
static void | __reg_module (void) |
static int | __schedule_action (void(*func)(const void *data), const void *data, const char *funcname) |
static int | __send_command (struct chan_iax2_pvt *i, char type, int command, unsigned int ts, const unsigned char *data, int datalen, int seqno, int now, int transfer, int final) |
static void | __send_lagrq (const void *data) |
static void | __send_ping (const void *data) |
static int | __unload_module (void) |
static void | __unreg_module (void) |
static void | _iax2_show_peers_one (int fd, struct mansession *s, struct show_peers_context *cont, struct iax2_peer *peer) |
static int | acf_channel_read (struct ast_channel *chan, const char *funcname, char *preparse, char *buf, size_t buflen) |
static int | acf_iaxvar_read (struct ast_channel *chan, const char *cmd, char *data, char *buf, size_t len) |
static int | acf_iaxvar_write (struct ast_channel *chan, const char *cmd, char *data, const char *value) |
static void | acl_change_stasis_cb (void *data, struct stasis_subscription *sub, struct stasis_message *message) |
static void | acl_change_stasis_subscribe (void) |
static void | acl_change_stasis_unsubscribe (void) |
static int | add_calltoken_ignore (const char *addr) |
static void | add_empty_calltoken_ie (struct chan_iax2_pvt *pvt, struct iax_ie_data *ied) |
static int | addr_range_cmp_cb (void *obj, void *arg, int flags) |
static int | addr_range_delme_cb (void *obj, void *arg, int flags) |
static int | addr_range_hash_cb (const void *obj, const int flags) |
static int | addr_range_match_address_cb (void *obj, void *arg, int flags) |
static int | apply_context (struct iax2_context *con, const char *context) |
static int | ast_cli_netstats (struct mansession *s, int fd, int limit_fmt) |
static struct ast_channel * | ast_iax2_new (int callno, int state, iax2_format capability, struct iax2_codec_pref *prefs, const struct ast_assigned_ids *assignedids, const struct ast_channel *requestor, unsigned int cachable) |
Create new call, interface with the PBX core. | |
struct ast_module * | AST_MODULE_SELF_SYM (void) |
static int | attempt_transmit (const void *data) |
static int | auth_fail (int callno, int failcode) |
static char * | auth_method_names (int authmethods, char *restrict buf) |
Get names of all auth methods. More... | |
static int | auth_reject (const void *data) |
static int | authenticate (const char *challenge, const char *secret, const char *keyn, int authmethods, struct iax_ie_data *ied, struct ast_sockaddr *addr, struct chan_iax2_pvt *pvt) |
static int | authenticate_reply (struct chan_iax2_pvt *p, struct ast_sockaddr *addr, struct iax_ies *ies, const char *override, const char *okey) |
static int | authenticate_request (int call_num) |
static int | authenticate_verify (struct chan_iax2_pvt *p, struct iax_ies *ies) |
static int | auto_congest (const void *data) |
static int | auto_hangup (const void *data) |
static void | build_callno_limits (struct ast_variable *v) |
static struct iax2_context * | build_context (const char *context) |
static void | build_ecx_key (const unsigned char *digest, struct chan_iax2_pvt *pvt) |
static void | build_encryption_keys (const unsigned char *digest, struct chan_iax2_pvt *pvt) |
static struct iax2_peer * | build_peer (const char *name, struct ast_variable *v, struct ast_variable *alt, int temponly) |
Create peer structure based on configuration. | |
static void | build_rand_pad (unsigned char *buf, ssize_t len) |
static struct iax2_user * | build_user (const char *name, struct ast_variable *v, struct ast_variable *alt, int temponly) |
Create in-memory user structure from configuration. | |
static int | cache_get_callno_locked (const char *data) |
static unsigned int | calc_rxstamp (struct chan_iax2_pvt *p, unsigned int offset) |
static unsigned int | calc_timestamp (struct chan_iax2_pvt *p, unsigned int ts, struct ast_frame *f) |
static unsigned int | calc_txpeerstamp (struct iax2_trunk_peer *tpeer, int sampms, struct timeval *now) |
static int | calltoken_required (struct ast_sockaddr *addr, const char *name, int subclass) |
static int | check_access (int callno, struct ast_sockaddr *addr, struct iax_ies *ies) |
static int | check_provisioning (struct ast_sockaddr *addr, int sockfd, char *si, unsigned int ver) |
static int | check_srcaddr (struct ast_sockaddr *addr) |
Check if address can be used as packet source. More... | |
static void | cleanup_thread_list (void *head) |
static struct ast_format * | codec_choose_from_prefs (struct iax2_codec_pref *pref, struct ast_format_cap *cap) |
static int | complete_dpreply (struct chan_iax2_pvt *pvt, struct iax_ies *ies) |
static char * | complete_iax2_peers (const char *line, const char *word, int pos, int state, uint64_t flags) |
static char * | complete_iax2_unregister (const char *line, const char *word, int pos, int state) |
static int | complete_transfer (int callno, struct iax_ies *ies) |
static unsigned char | compress_subclass (iax2_format subclass) |
static void | construct_rr (struct chan_iax2_pvt *pvt, struct iax_ie_data *iep) |
static int | create_addr (const char *peername, struct ast_channel *c, struct ast_sockaddr *addr, struct create_addr_info *cai) |
static int | create_callno_pools (void) |
static int | decode_frame (ast_aes_decrypt_key *dcx, struct ast_iax2_full_hdr *fh, struct ast_frame *f, int *datalen) |
static int | decrypt_frame (int callno, struct ast_iax2_full_hdr *fh, struct ast_frame *f, int *datalen) |
static void | defer_full_frame (struct iax2_thread *from_here, struct iax2_thread *to_here) |
Queue the last read full frame for processing by a certain thread. More... | |
static void | delete_users (void) |
static void | dp_lookup (int callno, const char *context, const char *callednum, const char *callerid, int skiplock) |
static void * | dp_lookup_thread (void *data) |
static void | encmethods_to_str (int e, struct ast_str **buf) |
static int | encrypt_frame (ast_aes_encrypt_key *ecx, struct ast_iax2_full_hdr *fh, unsigned char *poo, int *datalen) |
static int | expire_registry (const void *data) |
static struct iax2_dpcache * | find_cache (struct ast_channel *chan, const char *data, const char *context, const char *exten, int priority) |
static int | find_callno (unsigned short callno, unsigned short dcallno, struct ast_sockaddr *addr, int new, int sockfd, int full_frame) |
static int | find_callno_locked (unsigned short callno, unsigned short dcallno, struct ast_sockaddr *addr, int new, int sockfd, int full_frame) |
static struct iax2_thread * | find_idle_thread (void) |
static struct iax2_peer * | find_peer (const char *name, int realtime) |
static struct iax2_trunk_peer * | find_tpeer (struct ast_sockaddr *addr, int fd) |
static struct iax2_user * | find_user (const char *name) |
static int | firmware_show_callback (struct ast_iax2_firmware_header *header, void *user_data) |
static unsigned int | fix_peerts (struct timeval *rxtrunktime, int callno, unsigned int ts) |
static void | free_context (struct iax2_context *con) |
static void | free_signaling_queue_entry (struct signaling_queue_entry *s) |
static int | function_iaxpeer (struct ast_channel *chan, const char *cmd, char *data, char *buf, size_t len) |
static int | get_auth_methods (const char *value) |
static int | get_encrypt_methods (const char *s) |
static int | get_from_jb (const void *p) |
static int | get_unused_callno (enum callno_type type, int validated, callno_entry *entry) |
static int | handle_call_token (struct ast_iax2_full_hdr *fh, struct iax_ies *ies, struct ast_sockaddr *addr, int fd) |
static char * | handle_cli_iax2_provision (struct ast_cli_entry *e, int cmd, struct ast_cli_args *a) |
static char * | handle_cli_iax2_prune_realtime (struct ast_cli_entry *e, int cmd, struct ast_cli_args *a) |
static char * | handle_cli_iax2_reload (struct ast_cli_entry *e, int cmd, struct ast_cli_args *a) |
static char * | handle_cli_iax2_set_debug (struct ast_cli_entry *e, int cmd, struct ast_cli_args *a) |
static char * | handle_cli_iax2_set_debug_jb (struct ast_cli_entry *e, int cmd, struct ast_cli_args *a) |
static char * | handle_cli_iax2_set_debug_trunk (struct ast_cli_entry *e, int cmd, struct ast_cli_args *a) |
static char * | handle_cli_iax2_set_mtu (struct ast_cli_entry *e, int cmd, struct ast_cli_args *a) |
Set trunk MTU from CLI. | |
static char * | handle_cli_iax2_show_cache (struct ast_cli_entry *e, int cmd, struct ast_cli_args *a) |
static char * | handle_cli_iax2_show_callno_limits (struct ast_cli_entry *e, int cmd, struct ast_cli_args *a) |
static char * | handle_cli_iax2_show_channels (struct ast_cli_entry *e, int cmd, struct ast_cli_args *a) |
static char * | handle_cli_iax2_show_firmware (struct ast_cli_entry *e, int cmd, struct ast_cli_args *a) |
static char * | handle_cli_iax2_show_netstats (struct ast_cli_entry *e, int cmd, struct ast_cli_args *a) |
static char * | handle_cli_iax2_show_peer (struct ast_cli_entry *e, int cmd, struct ast_cli_args *a) |
Show one peer in detail. | |
static char * | handle_cli_iax2_show_peers (struct ast_cli_entry *e, int cmd, struct ast_cli_args *a) |
static char * | handle_cli_iax2_show_registry (struct ast_cli_entry *e, int cmd, struct ast_cli_args *a) |
static char * | handle_cli_iax2_show_stats (struct ast_cli_entry *e, int cmd, struct ast_cli_args *a) |
static char * | handle_cli_iax2_show_threads (struct ast_cli_entry *e, int cmd, struct ast_cli_args *a) |
static char * | handle_cli_iax2_show_users (struct ast_cli_entry *e, int cmd, struct ast_cli_args *a) |
static char * | handle_cli_iax2_test_losspct (struct ast_cli_entry *e, int cmd, struct ast_cli_args *a) |
static char * | handle_cli_iax2_unregister (struct ast_cli_entry *e, int cmd, struct ast_cli_args *a) |
static void | handle_deferred_full_frames (struct iax2_thread *thread) |
Handle any deferred full frames for this thread. | |
static int | handle_error (void) |
static int | iax2_ack_registry (struct iax_ies *ies, struct ast_sockaddr *addr, int callno) |
Acknowledgment received for OUR registration. | |
static int attribute_pure | iax2_allow_new (int frametype, int subclass, int inbound) |
static int | iax2_answer (struct ast_channel *c) |
static int | iax2_append_register (const char *hostname, const char *username, const char *secret, const char *porta) |
static int | iax2_call (struct ast_channel *c, const char *dest, int timeout) |
static int | iax2_canmatch (struct ast_channel *chan, const char *context, const char *exten, int priority, const char *callerid, const char *data) |
part of the IAX2 dial plan switch interface | |
static iax2_format | iax2_codec_choose (struct iax2_codec_pref *pref, iax2_format formats) |
static unsigned int | iax2_datetime (const char *tz) |
static int | iax2_delete_from_sched (const void *data) |
static void | iax2_destroy (int callno) |
static void | iax2_destroy_helper (struct chan_iax2_pvt *pvt) |
static int | iax2_devicestate (const char *data) |
Part of the device state notification system —. | |
static int | iax2_digit_begin (struct ast_channel *c, char digit) |
static int | iax2_digit_end (struct ast_channel *c, char digit, unsigned int duration) |
static int | iax2_do_register (struct iax2_registry *reg) |
static int | iax2_do_register_s (const void *data) |
static void | iax2_dprequest (struct iax2_dpcache *dp, int callno) |
static void * | iax2_dup_variable_datastore (void *) |
static int | iax2_exec (struct ast_channel *chan, const char *context, const char *exten, int priority, const char *callerid, const char *data) |
Execute IAX2 dialplan switch. | |
static int | iax2_exists (struct ast_channel *chan, const char *context, const char *exten, int priority, const char *callerid, const char *data) |
Part of the IAX2 switch interface. | |
static int | iax2_fixup (struct ast_channel *oldchannel, struct ast_channel *newchan) |
static void | iax2_frame_free (struct iax_frame *fr) |
static void | iax2_free_variable_datastore (void *) |
const char * | iax2_getformatname (iax2_format format) |
iax2 wrapper function for ast_getformatname | |
static const char * | iax2_getformatname_multiple (iax2_format format, struct ast_str **codec_buf) |
static int | iax2_getpeername (struct ast_sockaddr addr, char *host, int len) |
static int | iax2_getpeertrunk (struct ast_sockaddr addr) |
static int | iax2_hangup (struct ast_channel *c) |
static int | iax2_indicate (struct ast_channel *c, int condition, const void *data, size_t datalen) |
static int | iax2_is_control_frame_allowed (int subtype) |
static int | iax2_key_rotate (const void *vpvt) |
static int | iax2_lock_callno_unless_destroyed (int callno) |
Acquire the iaxsl[callno] if call exists and not having ongoing hangup. More... | |
static void | iax2_lock_owner (int callno) |
static int | iax2_matchmore (struct ast_channel *chan, const char *context, const char *exten, int priority, const char *callerid, const char *data) |
Part of the IAX2 Switch interface. | |
static int | iax2_parse_allow_disallow (struct iax2_codec_pref *pref, iax2_format *formats, const char *list, int allowing) |
static int | iax2_poke_noanswer (const void *data) |
static int | iax2_poke_peer (struct iax2_peer *peer, int heldcall) |
static int | iax2_poke_peer_cb (void *obj, void *arg, int flags) |
static int | iax2_poke_peer_s (const void *data) |
static int | iax2_predestroy (int callno) |
static void * | iax2_process_thread (void *data) |
static void | iax2_process_thread_cleanup (void *data) |
static int | iax2_prov_app (struct ast_channel *chan, const char *data) |
static int | iax2_provision (struct ast_sockaddr *end, int sockfd, const char *dest, const char *template, int force) |
static void | iax2_publish_registry (const char *username, const char *domain, const char *status, const char *cause) |
static int | iax2_queryoption (struct ast_channel *c, int option, void *data, int *datalen) |
static int | iax2_queue_frame (int callno, struct ast_frame *f) |
Queue a frame to a call's owning asterisk channel. More... | |
static int | iax2_queue_hangup (int callno) |
Queue a hangup frame on the ast_channel owner. More... | |
static int | iax2_queue_hold (int callno, const char *musicclass) |
Queue a hold frame on the ast_channel owner. More... | |
static int | iax2_queue_unhold (int callno) |
Queue an unhold frame on the ast_channel owner. More... | |
static struct ast_frame * | iax2_read (struct ast_channel *c) |
static int | iax2_register (const char *value, int lineno) |
static struct ast_channel * | iax2_request (const char *type, struct ast_format_cap *cap, const struct ast_assigned_ids *assignedids, const struct ast_channel *requestor, const char *data, int *cause) |
static int | iax2_sched_add (struct ast_sched_context *sched, int when, ast_sched_cb callback, const void *data) |
static int | iax2_sched_replace (int id, struct ast_sched_context *con, int when, ast_sched_cb callback, const void *data) |
static int | iax2_send (struct chan_iax2_pvt *pvt, struct ast_frame *f, unsigned int ts, int seqno, int now, int transfer, int final) |
static int | iax2_sendhtml (struct ast_channel *c, int subclass, const char *data, int datalen) |
static int | iax2_sendimage (struct ast_channel *c, struct ast_frame *img) |
static int | iax2_sendtext (struct ast_channel *c, const char *text) |
static int | iax2_setoption (struct ast_channel *c, int option, void *data, int datalen) |
static int | iax2_transfer (struct ast_channel *c, const char *dest) |
static int | iax2_transmit (struct iax_frame *fr) |
static int | iax2_trunk_expired (struct iax2_trunk_peer *tpeer, struct timeval *now) |
static int | iax2_trunk_queue (struct chan_iax2_pvt *pvt, struct iax_frame *fr) |
static int | iax2_vnak (int callno) |
static int | iax2_write (struct ast_channel *c, struct ast_frame *f) |
static void | iax_debug_output (const char *data) |
static void | iax_error_output (const char *data) |
static void | iax_outputframe (struct iax_frame *f, struct ast_iax2_full_hdr *fhi, int rx, struct ast_sockaddr *addr, int datalen) |
static ast_callid | iax_pvt_callid_get (int callno) |
static void | iax_pvt_callid_new (int callno) |
static void | iax_pvt_callid_set (int callno, ast_callid callid) |
static struct iax_frame * | iaxfrdup2 (struct iax_frame *fr) |
static void | insert_idle_thread (struct iax2_thread *thread) |
static int | invalid_key (ast_aes_decrypt_key *ecx) |
static void | jb_debug_output (const char *fmt,...) |
static void | jb_error_output (const char *fmt,...) |
static void | jb_warning_output (const char *fmt,...) |
static int | load_module (void) |
Load the module. More... | |
static int | load_objects (void) |
static void | log_jitterstats (unsigned short callno) |
static int | make_trunk (unsigned short callno, int locked) |
static int | manager_iax2_show_netstats (struct mansession *s, const struct message *m) |
static int | manager_iax2_show_peer_list (struct mansession *s, const struct message *m) |
callback to display iax peers in manager format | |
static int | manager_iax2_show_peers (struct mansession *s, const struct message *m) |
callback to display iax peers in manager | |
static int | manager_iax2_show_registry (struct mansession *s, const struct message *m) |
static int | match (struct ast_sockaddr *addr, unsigned short callno, unsigned short dcallno, const struct chan_iax2_pvt *cur, int check_dcallno) |
static void | memcpy_decrypt (unsigned char *dst, const unsigned char *src, int len, ast_aes_decrypt_key *dcx) |
static void | memcpy_encrypt (unsigned char *dst, const unsigned char *src, int len, ast_aes_encrypt_key *ecx) |
static void | merge_encryption (struct chan_iax2_pvt *p, unsigned int enc) |
static int | network_change_sched_cb (const void *data) |
static void | network_change_stasis_cb (void *data, struct stasis_subscription *sub, struct stasis_message *message) |
static void | network_change_stasis_subscribe (void) |
static void | network_change_stasis_unsubscribe (void) |
static void * | network_thread (void *ignore) |
static struct chan_iax2_pvt * | new_iax (struct ast_sockaddr *addr, const char *host) |
static void | parse_dial_string (char *data, struct parsed_dial_string *pds) |
Parses an IAX dial string into its component parts. More... | |
static int | peer_cmp_cb (void *obj, void *arg, int flags) |
static int | peer_delme_cb (void *obj, void *arg, int flags) |
static void | peer_destructor (void *obj) |
static int | peer_hash_cb (const void *obj, const int flags) |
static struct iax2_peer * | peer_ref (struct iax2_peer *peer) |
static int | peer_set_sock_cb (void *obj, void *arg, int flags) |
static int | peer_set_srcaddr (struct iax2_peer *peer, const char *srcaddr) |
Parse the "sourceaddress" value, lookup in netsock list and set peer's sockfd. Defaults to defaultsockfd if not found. | |
static int | peer_status (struct iax2_peer *peer, char *status, int statuslen) |
peer_status: Report Peer status in character string | |
static struct iax2_peer * | peer_unref (struct iax2_peer *peer) |
static int | peercnt_add (struct ast_sockaddr *addr) |
static int | peercnt_cmp_cb (void *obj, void *arg, int flags) |
static int | peercnt_hash_cb (const void *obj, const int flags) |
static void | peercnt_modify (unsigned char reg, uint16_t limit, struct ast_sockaddr *sockaddr) |
static void | peercnt_remove (struct peercnt *peercnt) |
static int | peercnt_remove_by_addr (struct ast_sockaddr *addr) |
static int | peercnt_remove_cb (const void *obj) |
static void | poke_all_peers (void) |
static int | prune_addr_range_cb (void *obj, void *arg, int flags) |
static void | prune_peers (void) |
static void | prune_users (void) |
static int | pvt_cmp_cb (void *obj, void *arg, int flags) |
static void | pvt_destructor (void *obj) |
static int | pvt_hash_cb (const void *obj, const int flags) |
static int | queue_signalling (struct chan_iax2_pvt *pvt, struct ast_frame *f) |
All frames other than that of type AST_FRAME_IAX must be held until we have received a destination call number. | |
static int | raw_hangup (struct ast_sockaddr *addr, unsigned short src, unsigned short dst, int sockfd) |
static struct iax2_peer * | realtime_peer (const char *peername, struct ast_sockaddr *addr) |
static void | realtime_update_peer (const char *peername, struct ast_sockaddr *sockaddr, time_t regtime) |
static struct iax2_user * | realtime_user (const char *username, struct ast_sockaddr *addr) |
static void | reg_source_db (struct iax2_peer *p) |
static void | register_peer_exten (struct iax2_peer *peer, int onoff) |
static int | register_verify (int callno, struct ast_sockaddr *addr, struct iax_ies *ies) |
Verify inbound registration. | |
static int | registry_authrequest (int callno) |
static int | registry_rerequest (struct iax_ies *ies, int callno, struct ast_sockaddr *addr) |
static char * | regstate2str (int regstate) |
static int | reload (void) |
static int | reload_config (int forced_reload) |
static void | remove_by_peercallno (struct chan_iax2_pvt *pvt) |
static void | remove_by_transfercallno (struct chan_iax2_pvt *pvt) |
static int | replace_callno (const void *obj) |
static void | requirecalltoken_mark_auto (const char *name, int subclass) |
static void | resend_with_token (int callno, struct iax_frame *f, const char *newtoken) |
static void | save_osptoken (struct iax_frame *fr, struct iax_ies *ies) |
static void | save_rr (struct iax_frame *fr, struct iax_ies *ies) |
static void | sched_delay_remove (struct ast_sockaddr *addr, callno_entry entry) |
static int | schedule_delivery (struct iax_frame *fr, int updatehistory, int fromtrunk, unsigned int *tsout) |
static int | scheduled_destroy (const void *vid) |
static int | send_apathetic_reply (unsigned short callno, unsigned short dcallno, struct ast_sockaddr *addr, int command, int ts, unsigned char seqno, int sockfd, struct iax_ie_data *ied) |
static int | send_command (struct chan_iax2_pvt *, char, int, unsigned int, const unsigned char *, int, int) |
static int | send_command_final (struct chan_iax2_pvt *, char, int, unsigned int, const unsigned char *, int, int) |
static int | send_command_immediate (struct chan_iax2_pvt *, char, int, unsigned int, const unsigned char *, int, int) |
static int | send_command_locked (unsigned short callno, char, int, unsigned int, const unsigned char *, int, int) |
static int | send_command_transfer (struct chan_iax2_pvt *, char, int, unsigned int, const unsigned char *, int) |
static int | send_lagrq (const void *data) |
static int | send_packet (struct iax_frame *f) |
static int | send_ping (const void *data) |
static void | send_signaling (struct chan_iax2_pvt *pvt) |
This function must be called once we are sure the other side has given us a call number. All signaling is held here until that point. | |
static int | send_trunk (struct iax2_trunk_peer *tpeer, struct timeval *now) |
static int | set_config (const char *config_file, int reload, int forced) |
Load configuration. | |
static void | set_config_destroy (void) |
static void | set_hangup_source_and_cause (int callno, unsigned char causecode) |
static void | set_peercnt_limit (struct peercnt *peercnt) |
static int | set_peercnt_limit_all_cb (void *obj, void *arg, int flags) |
static void | signal_condition (ast_mutex_t *lock, ast_cond_t *cond) |
static int | socket_process (struct iax2_thread *thread) |
static int | socket_process_helper (struct iax2_thread *thread) |
static int | socket_process_meta (int packet_len, struct ast_iax2_meta_hdr *meta, struct ast_sockaddr *addr, int sockfd, struct iax_frame *fr) |
static int | socket_read (int *id, int fd, short events, void *cbdata) |
static void | spawn_dp_lookup (int callno, const char *context, const char *callednum, const char *callerid) |
static int | start_network_thread (void) |
static void | stop_stuff (int callno) |
static void | store_by_peercallno (struct chan_iax2_pvt *pvt) |
static void | store_by_transfercallno (struct chan_iax2_pvt *pvt) |
static int | timing_read (int *id, int fd, short events, void *cbdata) |
static int | transfercallno_pvt_cmp_cb (void *obj, void *arg, int flags) |
static int | transfercallno_pvt_hash_cb (const void *obj, const int flags) |
static int | transmit_frame (void *data) |
static int | transmit_trunk (struct iax_frame *f, struct ast_sockaddr *addr, int sockfd) |
static int | try_transfer (struct chan_iax2_pvt *pvt, struct iax_ies *ies) |
static iax2_format | uncompress_subclass (unsigned char csub) |
static void | unlink_peer (struct iax2_peer *peer) |
static int | unload_module (void) |
static void | unwrap_timestamp (struct iax_frame *fr) |
static void | update_jbsched (struct chan_iax2_pvt *pvt) |
static int | update_packet (struct iax_frame *f) |
static int | update_registry (struct ast_sockaddr *addr, int callno, char *devtype, int fd, unsigned short refresh) |
static int | user_cmp_cb (void *obj, void *arg, int flags) |
static int | user_delme_cb (void *obj, void *arg, int flags) |
static void | user_destructor (void *obj) |
static int | user_hash_cb (const void *obj, const int flags) |
static struct iax2_user * | user_unref (struct iax2_user *user) |
static void | vnak_retransmit (int callno, int last) |
static int | wait_for_peercallno (struct chan_iax2_pvt *pvt) |
Variables | |
static struct ast_module_info | __mod_info = { .name = AST_MODULE, .flags = AST_MODFLAG_LOAD_ORDER , .description = "Inter Asterisk eXchange (Ver 2)" , .key = "This paragraph is copyright (c) 2006 by Digium, Inc. \In order for your module to load, it must return this \key via a function called \"key\". Any code which \includes this paragraph must be licensed under the GNU \General Public License version 2 or later (at your \option). In addition to Digium's general reservations \of rights, Digium expressly reserves the right to \allow other parties to license this paragraph under \different terms. Any use of Digium, Inc. trademarks or \logos (including \"Asterisk\" or \"Digium\") without \express written permission of Digium, Inc. is prohibited.\n" , .buildopt_sum = "da6642af068ee5e6490c5b1d2cc1d238" , .support_level = AST_MODULE_SUPPORT_CORE, .load = load_module, .unload = unload_module, .reload = reload, .load_pri = AST_MODPRI_CHANNEL_DRIVER, .requires = "dnsmgr", .optional_modules = "res_crypto", } |
static char | accountcode [AST_MAX_ACCOUNT_CODE] |
static struct stasis_subscription * | acl_change_sub |
static struct active_list | active_list = { .first = NULL, .last = NULL, .lock = { PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP , NULL, {1, 0} } , } |
static int | adsi = 0 |
static int | amaflags = 0 |
static const struct ast_module_info * | ast_module_info = &__mod_info |
static const char * | auth_method_labels [] |
Name of effective auth method. | |
static int | authdebug = 0 |
static int | autokill = 0 |
static struct ao2_container * | callno_limits |
static struct call_number_pool | callno_pool |
static ast_mutex_t | callno_pool_lock = { PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP , NULL, {1, 0} } |
static struct call_number_pool | callno_pool_trunk |
static struct ao2_container * | calltoken_ignores |
static struct ast_cli_entry | cli_iax2 [] |
static struct ast_sockaddr | debugaddr |
static uint16_t | DEFAULT_MAXCALLNO_LIMIT = 2048 |
static uint16_t | DEFAULT_MAXCALLNO_LIMIT_NONVAL = 8192 |
static char | default_parkinglot [AST_MAX_CONTEXT] |
static int | defaultsockfd = -1 |
static int | delayreject = 0 |
static struct dpcache | dpcache = { .first = NULL, .last = NULL, .lock = { PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP , NULL, {1, 0} } , } |
static struct dynamic_list | dynamic_list = { .first = NULL, .last = NULL, .lock = { PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP , NULL, {1, 0} } , } |
struct { | |
struct iax_frame * first | |
struct iax_frame * last | |
} | frame_queue [IAX_MAX_CALLS] |
a list of frames that may need to be retransmitted More... | |
static int | global_max_trunk_mtu |
static uint16_t | global_maxcallno |
static uint16_t | global_maxcallno_nonval |
static int | global_rtautoclear = 120 |
static struct ast_flags64 | globalflags = { 0 } |
static int | iax2_authmethods = 0 |
static iax2_format | iax2_capability = IAX_CAPABILITY_FULLBANDWIDTH |
static int | iax2_encryption = 0 |
static int(* | iax2_regfunk )(const char *username, int onoff) = NULL |
static struct ast_switch | iax2_switch |
static struct ast_channel_tech | iax2_tech |
static const struct ast_datastore_info | iax2_variable_datastore_info |
static struct ao2_container * | iax_peercallno_pvts |
Another container of iax2_pvt structures. More... | |
static struct ao2_container * | iax_transfercallno_pvts |
Another container of iax2_pvt structures. More... | |
static int | iaxactivethreadcount = 0 |
static int | iaxcompat = 0 |
static int | iaxdebug = 0 |
static int | iaxdefaultdpcache =10 * 60 |
static int | iaxdefaulttimeout = 5 |
static int | iaxdynamicthreadcount = 0 |
static int | iaxdynamicthreadnum = 0 |
static int | iaxmaxthreadcount = DEFAULT_MAX_THREAD_COUNT |
static struct ast_custom_function | iaxpeer_function |
static struct chan_iax2_pvt * | iaxs [IAX_MAX_CALLS] |
an array of iax2 pvt structures More... | |
static ast_mutex_t | iaxsl [ARRAY_LEN(iaxs)] |
chan_iax2_pvt structure locks More... | |
static int | iaxthreadcount = DEFAULT_THREAD_COUNT |
static int | iaxtrunkdebug = 0 |
static struct ast_custom_function | iaxvar_function |
static struct idle_list | idle_list = { .first = NULL, .last = NULL, .lock = { PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP , NULL, {1, 0} } , } |
static struct io_context * | io |
static int | jittertargetextra = 40 |
static int | lagrq_time = 10 |
static char | language [MAX_LANGUAGE] = "" |
static int | last_authmethod = 0 |
static time_t | max_calltoken_delay = 10 |
static int | max_reg_expire |
static int | max_retries = 4 |
static int | maxauthreq = 3 |
static int | maxjitterbuffer =1000 |
static int | maxjitterinterps =10 |
static int | min_reg_expire |
static char | mohinterpret [MAX_MUSICCLASS] |
static char | mohsuggest [MAX_MUSICCLASS] |
static struct ast_netsock_list * | netsock |
static pthread_t | netthreadid = AST_PTHREADT_NULL |
static int | network_change_sched_id = -1 |
static struct stasis_subscription * | network_change_sub |
static struct ast_netsock_list * | outsock |
static char * | papp = "IAX2Provision" |
static struct ao2_container * | peercnts |
static struct ao2_container * | peers |
static int | ping_time = 21 |
static struct iax2_codec_pref | prefs_global |
struct { | |
unsigned int cos | |
unsigned int tos | |
} | qos = { 0, 0 } |
static int | randomcalltokendata |
static char | regcontext [AST_MAX_CONTEXT] = "" |
static struct registrations | registrations = { .first = NULL, .last = NULL, .lock = { PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP , NULL, {1, 0} } , } |
static int | resyncthreshold =1000 |
static struct ast_sched_context * | sched |
static int | srvlookup = 0 |
static const char | tdesc [] = "Inter Asterisk eXchange Driver (Ver 2)" |
static int | test_losspct = 0 |
static struct ast_timer * | timer |
static uint16_t | total_nonval_callno_used = 0 |
static struct tpeers | tpeers = { .first = NULL, .last = NULL, .lock = { PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP , NULL, {1, 0} } , } |
static struct ast_taskprocessor * | transmit_processor |
static int | trunk_maxmtu |
static int | trunk_nmaxmtu |
static int | trunk_timed |
static int | trunk_untimed |
static int | trunkfreq = 20 |
static int | trunkmaxsize = MAX_TRUNKDATA |
static struct ao2_container * | users |
Implementation of Inter-Asterisk eXchange Version 2 as specified in RFC 5456.
Definition in file chan_iax2.c.
#define DEFAULT_TRUNKDATA 640 * 10 |
40ms, uncompressed linear * 10 channels
Definition at line 710 of file chan_iax2.c.
#define IAX_ALLOWFWDOWNLOAD (uint64_t)(1LLU << 26) |
#define IAX_ALREADYGONE (uint64_t)(1LLU << 9) |
Already disconnected
Definition at line 507 of file chan_iax2.c.
Referenced by __do_deliver(), and iax2_predestroy().
#define IAX_CAPABILITY_LOWBANDWIDTH |
Definition at line 385 of file chan_iax2.c.
#define IAX_CAPABILITY_LOWFREE |
Definition at line 390 of file chan_iax2.c.
#define IAX_CODEC_NOCAP (uint64_t)(1LLU << 16) |
only consider requested format and ignore capabilities
Definition at line 514 of file chan_iax2.c.
Referenced by build_user(), and set_config().
#define IAX_CODEC_NOPREFS (uint64_t)(1LLU << 15) |
Force old behaviour by turning off prefs
Definition at line 513 of file chan_iax2.c.
Referenced by build_user(), and set_config().
#define IAX_CODEC_USER_FIRST (uint64_t)(1LLU << 14) |
are we willing to let the other guy choose the codec?
Definition at line 512 of file chan_iax2.c.
Referenced by build_user(), and set_config().
#define IAX_DELAYPBXSTART (uint64_t)(1LLU << 25) |
Don't start a PBX on the channel until the peer sends us a response, so that we've achieved a three-way handshake with them before sending voice or anything else
Definition at line 522 of file chan_iax2.c.
#define IAX_DELME (uint64_t)(1LLU << 1) |
Needs to be deleted
Definition at line 499 of file chan_iax2.c.
Referenced by build_peer(), and build_user().
#define IAX_DYNAMIC (uint64_t)(1LLU << 6) |
dynamic peer
Definition at line 504 of file chan_iax2.c.
Referenced by build_peer(), handle_cli_iax2_show_peer(), realtime_peer(), register_verify(), and set_config().
#define IAX_ENCRYPTED (uint64_t)(1LLU << 12) |
Whether we should assume encrypted tx/rx
Definition at line 510 of file chan_iax2.c.
Referenced by authenticate_reply(), and authenticate_request().
#define IAX_FORCE_ENCRYPT (uint64_t)(1LLU << 30) |
Forces call encryption, if encryption not possible hangup
Definition at line 527 of file chan_iax2.c.
Referenced by __find_callno(), authenticate_reply(), build_peer(), build_user(), and set_config().
#define IAX_HASCALLERID (uint64_t)(1LLU << 0) |
CallerID has been specified
Definition at line 498 of file chan_iax2.c.
Referenced by build_peer(), build_user(), and update_registry().
#define IAX_IMMEDIATE (uint64_t)(1LLU << 27) |
Allow immediate off-hook to extension s
Definition at line 524 of file chan_iax2.c.
Referenced by build_user().
#define IAX_KEYPOPULATED (uint64_t)(1LLU << 13) |
Whether we have a key populated
Definition at line 511 of file chan_iax2.c.
Referenced by authenticate_reply().
#define IAX_MAXAUTHREQ (uint64_t)(1LLU << 24) |
Maximum outstanding AUTHREQ restriction is in place
Definition at line 521 of file chan_iax2.c.
Referenced by authenticate_request(), and iax2_destroy_helper().
#define IAX_NOTRANSFER (uint64_t)(1LLU << 4) |
Don't native bridge
Definition at line 502 of file chan_iax2.c.
Referenced by __find_callno(), build_peer(), build_user(), and set_config().
#define IAX_PROVISION (uint64_t)(1LLU << 10) |
This is a provisioning request
Definition at line 508 of file chan_iax2.c.
#define IAX_QUELCH (uint64_t)(1LLU << 11) |
Whether or not we quelch audio
Definition at line 509 of file chan_iax2.c.
#define IAX_RECVCONNECTEDLINE (uint64_t)(1LLU << 29) |
Allow receiving of connected line updates
Definition at line 526 of file chan_iax2.c.
Referenced by __find_callno(), build_peer(), build_user(), and set_config().
#define IAX_RTAUTOCLEAR (uint64_t)(1LLU << 19) |
erase me on expire
Definition at line 517 of file chan_iax2.c.
Referenced by realtime_peer(), and set_config().
#define IAX_RTCACHEFRIENDS (uint64_t)(1LLU << 17) |
let realtime stay till your reload
Definition at line 515 of file chan_iax2.c.
Referenced by realtime_peer(), realtime_user(), set_config(), and update_registry().
#define IAX_RTIGNOREREGEXPIRE (uint64_t)(1LLU << 21) |
When using realtime, ignore registration expiration
Definition at line 518 of file chan_iax2.c.
Referenced by realtime_peer(), and set_config().
#define IAX_RTSAVE_SYSNAME (uint64_t)(1LLU << 8) |
Save Systname on Realtime Updates
Definition at line 506 of file chan_iax2.c.
Referenced by set_config().
#define IAX_RTUPDATE (uint64_t)(1LLU << 18) |
Send a realtime update
Definition at line 516 of file chan_iax2.c.
Referenced by set_config(), and update_registry().
#define IAX_SENDANI (uint64_t)(1LLU << 7) |
Send ANI along with CallerID
Definition at line 505 of file chan_iax2.c.
Referenced by build_peer().
#define IAX_SENDCONNECTEDLINE (uint64_t)(1LLU << 28) |
Allow sending of connected line updates
Definition at line 525 of file chan_iax2.c.
Referenced by __find_callno(), build_peer(), build_user(), and set_config().
#define IAX_SHRINKCALLERID (uint64_t)(1LLU << 31) |
Turn on and off caller id shrinking
Definition at line 528 of file chan_iax2.c.
Referenced by set_config().
#define IAX_TEMPONLY (uint64_t)(1LLU << 2) |
Temporary (realtime)
Definition at line 500 of file chan_iax2.c.
Referenced by realtime_peer(), realtime_user(), and update_registry().
#define IAX_TRANSFERMEDIA (uint64_t)(1LLU << 23) |
When doing IAX2 transfers, transfer media only
Definition at line 520 of file chan_iax2.c.
Referenced by __find_callno(), build_peer(), build_user(), and set_config().
#define IAX_TRUNK (uint64_t)(1LLU << 3) |
Treat as a trunk
Definition at line 501 of file chan_iax2.c.
Referenced by build_peer(), build_user(), and handle_cli_iax2_show_peer().
#define IAX_TRUNKTIMESTAMPS (uint64_t)(1LLU << 22) |
#define IAX_USEJITTERBUF (uint64_t)(1LLU << 5) |
Use jitter buffer
Definition at line 503 of file chan_iax2.c.
Referenced by __find_callno(), build_peer(), build_user(), schedule_delivery(), and set_config().
#define MAX_PEER_BUCKETS 563 |
This module will get much higher performance when doing a lot of user and peer lookups if the number of buckets is increased from 1. However, to maintain old behavior for Asterisk 1.4, these are set to 1 by default. When using multiple buckets, search order through these containers is considered random, so you will not be able to depend on the order the entires are specified in iax.conf for matching order.
Definition at line 998 of file chan_iax2.c.
#define MAX_TIMESTAMP_SKEW 160 |
maximum difference between actual and predicted ts for sending
Definition at line 712 of file chan_iax2.c.
Referenced by rtp_raw_write().
#define MAX_TRUNKDATA 640 * 200 |
40ms, uncompressed linear * 200 channels
Definition at line 340 of file chan_iax2.c.
Referenced by set_config().
#define SCHED_MULTITHREADED |
Definition at line 281 of file chan_iax2.c.
anonymous enum |
Definition at line 1049 of file chan_iax2.c.
enum calltoken_peer_enum |
Call token validation settings.
Definition at line 536 of file chan_iax2.c.
|
static |
Definition at line 3387 of file chan_iax2.c.
References iax_frame::af, AST_FRFLAG_HAS_TIMING_INFO, iax_frame::callno, iax_frame::data, iax2_queue_frame(), IAX_ALREADYGONE, and iax_frame::retrans.
Referenced by schedule_delivery().
|
static |
Definition at line 3155 of file chan_iax2.c.
References chan_iax2_pvt::addr, ao2_ref, ast_debug, ast_sockaddr_copy(), ast_sockaddr_stringify(), ast_string_field_set, chan_iax2_pvt::callno, chan_iax2_pvt::callno_entry, chan_iax2_pvt::expiry, IAX_FORCE_ENCRYPT, IAX_NOTRANSFER, IAX_RECVCONNECTEDLINE, IAX_SENDCONNECTEDLINE, IAX_TRANSFERMEDIA, IAX_USEJITTERBUF, chan_iax2_pvt::lagid, OBJ_POINTER, chan_iax2_pvt::parkinglot, chan_iax2_pvt::peercallno, chan_iax2_pvt::pingid, chan_iax2_pvt::pingtime, chan_iax2_pvt::sockfd, and chan_iax2_pvt::transfer.
|
static |
Get names of all auth methods.
Bit | field of auth methods | |
[out] | buf | Buffer into which to write the names. Must be of size AUTH_METHOD_NAMES_BUFSIZE. |
Definition at line 415 of file chan_iax2.c.
|
static |
Definition at line 8543 of file chan_iax2.c.
References ao2_iterator_destroy(), ao2_iterator_init(), ast_calloc, ast_channel_datastore_add(), ast_datastore_free(), AST_FRAME_IAX, AST_LIST_HEAD, AST_LIST_HEAD_INIT, AST_LIST_INSERT_TAIL, ast_sockaddr_apply_netmask(), ast_sockaddr_cmp_addr(), ast_sockaddr_copy(), ast_sockaddr_isnull(), ast_strdupa, ast_string_field_set, chan_iax2_pvt::callno, chan_iax2_pvt::challenge, ast_datastore::data, chan_iax2_pvt::dcx, chan_iax2_pvt::ecx, chan_iax2_pvt::encmethods, IAX_ENCRYPTED, IAX_FORCE_ENCRYPT, IAX_KEYPOPULATED, ast_datastore::inheritance, ast_variable::name, ast_variable::next, iax2_peer::outkey, chan_iax2_pvt::owner, chan_iax2_pvt::peer, realtime_peer(), chan_iax2_pvt::secret, chan_iax2_pvt::username, and ast_variable::value.
|
static |
Definition at line 8157 of file chan_iax2.c.
References AST_FRAME_IAX, ast_string_field_set, chan_iax2_pvt::authmethods, chan_iax2_pvt::challenge, iax2_user::curauthreq, chan_iax2_pvt::encmethods, IAX_ENCRYPTED, IAX_IE_AUTHMETHODS, IAX_IE_CAUSE, IAX_IE_CAUSECODE, IAX_IE_CHALLENGE, IAX_IE_ENCRYPTION, IAX_IE_USERNAME, IAX_MAXAUTHREQ, iax2_user::maxauthreq, OBJ_KEY, send_command_final(), and chan_iax2_pvt::username.
|
static |
Check if address can be used as packet source.
0 | address available |
1 | address unavailable |
-1 | error |
Definition at line 12843 of file chan_iax2.c.
References ast_bind(), and ast_debug.
Referenced by peer_set_srcaddr().
|
static |
Queue the last read full frame for processing by a certain thread.
If there are already any full frames queued, they are sorted by sequence number.
Definition at line 9884 of file chan_iax2.c.
References ast_calloc, AST_LIST_INSERT_BEFORE_CURRENT, AST_LIST_INSERT_TAIL, AST_LIST_TRAVERSE_SAFE_BEGIN, AST_LIST_TRAVERSE_SAFE_END, iax2_thread::full_frames, and ast_iax2_full_hdr::oseqno.
|
static |
Definition at line 2056 of file chan_iax2.c.
References OBJ_KEY, and realtime_peer().
Referenced by ast_iax2_new(), handle_cli_iax2_show_peer(), iax2_devicestate(), register_verify(), and update_registry().
|
static |
Definition at line 2135 of file chan_iax2.c.
References ast_atomic_fetchadd_int(), AST_SCHED_DEL, chan_iax2_pvt::authid, chan_iax2_pvt::autoid, iax2_user::curauthreq, chan_iax2_pvt::destroy_initiated, IAX_MAXAUTHREQ, chan_iax2_pvt::initid, chan_iax2_pvt::jbid, chan_iax2_pvt::keyrotateid, chan_iax2_pvt::lagid, OBJ_KEY, chan_iax2_pvt::pingid, and chan_iax2_pvt::username.
Referenced by iax2_predestroy().
|
static |
Acquire the iaxsl[callno] if call exists and not having ongoing hangup.
callno | Call number to lock. |
0 | If call disappeared or has ongoing hangup procedure. |
1 | If call found and mutex is locked. |
Definition at line 1745 of file chan_iax2.c.
References ast_debug.
|
static |
Definition at line 3483 of file chan_iax2.c.
References ast_module_unref, chan_iax2_pvt::callno, iax2_destroy_helper(), iax2_queue_hangup(), IAX_ALREADYGONE, chan_iax2_pvt::owner, and ast_module_info::self.
Referenced by send_command_final().
|
static |
Definition at line 12158 of file chan_iax2.c.
References ast_atomic_fetchadd_int(), AST_LIST_LOCK, AST_LIST_REMOVE, AST_LIST_UNLOCK, ast_samp2tv(), ast_tvadd(), ast_tvnow(), and handle_deferred_full_frames().
|
static |
Queue a frame to a call's owning asterisk channel.
Definition at line 3300 of file chan_iax2.c.
References ast_queue_frame().
Referenced by __do_deliver().
|
static |
Queue a hangup frame on the ast_channel owner.
This function queues a hangup frame on the owner of the IAX2 pvt struct that is active for the given call number.
Definition at line 3369 of file chan_iax2.c.
References ast_queue_hangup().
Referenced by iax2_predestroy().
|
static |
Queue a hold frame on the ast_channel owner.
This function queues a hold frame on the owner of the IAX2 pvt struct that is active for the given call number.
Definition at line 3323 of file chan_iax2.c.
References ast_queue_hold().
|
static |
Queue an unhold frame on the ast_channel owner.
This function queues an unhold frame on the owner of the IAX2 pvt struct that is active for the given call number.
Definition at line 3346 of file chan_iax2.c.
References ast_queue_unhold().
|
static |
Load the module.
Module loading including tests for configuration or dependencies. This function can return AST_MODULE_LOAD_FAILURE, AST_MODULE_LOAD_DECLINE, or AST_MODULE_LOAD_SUCCESS. If a dependency or environment variable fails tests return AST_MODULE_LOAD_FAILURE. If the module can not load the configuration file or other non-critical problem return AST_MODULE_LOAD_DECLINE. On success return AST_MODULE_LOAD_SUCCESS.
Definition at line 14990 of file chan_iax2.c.
References ao2_callback, ao2_ref, ast_channel_register(), ast_cli_register_multiple, ast_custom_function_register, ast_format_cap_alloc, ast_format_cap_append_by_type(), AST_FORMAT_CAP_FLAG_DEFAULT, AST_LIST_LOCK, AST_LIST_TRAVERSE, AST_LIST_UNLOCK, ast_manager_register_xml, AST_MODULE_LOAD_DECLINE, AST_MODULE_LOAD_SUCCESS, ast_realtime_require_field(), ast_register_application_xml, ast_register_switch(), ast_sched_context_create(), ast_sched_context_destroy(), ast_sched_start_thread(), ast_timer_close(), ast_timer_open(), ast_timer_set_rate(), ast_channel_tech::capabilities, iax2_prov_app(), io_context_create(), io_context_destroy(), manager_iax2_show_peer_list(), manager_iax2_show_peers(), and set_config().
|
static |
Definition at line 2380 of file chan_iax2.c.
References ast_debug, AST_SCHED_DEL, iax_frame::callno, chan_iax2_pvt::callno, chan_iax2_pvt::callno_entry, chan_iax2_pvt::lagid, and chan_iax2_pvt::pingid.
|
static |
Parses an IAX dial string into its component parts.
data | the string to be parsed |
pds | pointer to a struct parsed_dial_string to be filled in |
This function parses the string and fills the structure with pointers to its component parts. The input string will be modified.
[username[:password]@]peer[:port][/exten[@context]][/options]
Definition at line 5092 of file chan_iax2.c.
References ast_debug, and ast_strip_quoted().
Referenced by iax2_devicestate(), and set_config().
|
static |
Definition at line 2020 of file chan_iax2.c.
|
static |
Definition at line 2009 of file chan_iax2.c.
References ast_str_hash(), and OBJ_KEY.
|
static |
Definition at line 4417 of file chan_iax2.c.
References ao2_link, ast_debug, ast_get_time_t(), ast_parse_arg(), AST_SCHED_DEL, ast_sockaddr_cmp_addr(), ast_sockaddr_isnull(), ast_sockaddr_parse(), ast_sockaddr_port, ast_sockaddr_resolve(), ast_sockaddr_set_port, ast_sockaddr_stringify_addr(), ast_sockaddr_stringify_port(), ast_strdupa, ast_variables_destroy(), build_peer(), iax2_peer::expire, IAX_DEFAULT_REG_EXPIRE, IAX_DYNAMIC, IAX_RTAUTOCLEAR, IAX_RTCACHEFRIENDS, IAX_RTIGNOREREGEXPIRE, IAX_TEMPONLY, ast_variable::name, ast_variable::next, and ast_variable::value.
Referenced by authenticate_reply(), and find_peer().
|
static |
Definition at line 4549 of file chan_iax2.c.
References ao2_link, ast_sockaddr_cmp_addr(), ast_sockaddr_isnull(), ast_sockaddr_resolve(), ast_sockaddr_stringify_addr(), ast_sockaddr_stringify_port(), ast_strdupa, ast_variables_destroy(), build_user(), IAX_RTCACHEFRIENDS, IAX_TEMPONLY, ast_variable::name, ast_variable::next, and ast_variable::value.
|
static |
Definition at line 4276 of file chan_iax2.c.
References __do_deliver(), iax_frame::af, ast_codec_samples_count(), ast_debug, ast_format_get_sample_rate(), AST_FRAME_CNG, AST_FRAME_VOICE, ast_samp2tv(), ast_tv(), ast_tvadd(), ast_tvzero(), iax_frame::callno, ast_frame::data, ast_frame::datalen, ast_frame::delivery, ast_frame_subclass::format, ast_frame::frametype, IAX_USEJITTERBUF, chan_iax2_pvt::jb, jb_put(), JB_TYPE_CONTROL, JB_TYPE_SILENCE, JB_TYPE_VOICE, ast_frame::len, chan_iax2_pvt::rxcore, ast_frame::subclass, and iax_frame::ts.
|
static |
Definition at line 7856 of file chan_iax2.c.
References chan_iax2_pvt::callno, and iax2_predestroy().
Referenced by authenticate_request(), and update_registry().
|
static |
Definition at line 9144 of file chan_iax2.c.
References ast_app_inboxcount(), ast_db_del(), ast_db_put(), AST_DEVICE_UNAVAILABLE, AST_DEVICE_UNKNOWN, AST_DEVSTATE_CACHABLE, ast_devstate_changed(), ast_endpoint_blob_publish(), AST_ENDPOINT_OFFLINE, AST_ENDPOINT_ONLINE, ast_endpoint_set_state(), ast_endpoint_state_type(), AST_FRAME_IAX, ast_json_pack(), ast_json_unref(), ast_mwi_state_cache(), ast_mwi_state_type(), AST_SCHED_DEL, ast_sockaddr_cmp(), ast_sockaddr_copy(), ast_sockaddr_isnull(), ast_sockaddr_port, ast_sockaddr_stringify(), ast_sockaddr_stringify_addr(), ast_strdupa, iax2_peer::cid_name, iax2_peer::cid_num, iax2_peer::endpoint, iax2_peer::expire, iax2_peer::expiry, find_peer(), IAX_COMMAND_REGACK, IAX_HASCALLERID, IAX_IE_APPARENT_ADDR, IAX_IE_CALLING_NAME, IAX_IE_CALLING_NUMBER, IAX_IE_DATETIME, IAX_IE_FIRMWAREVER, IAX_IE_MSGCOUNT, IAX_IE_REFRESH, IAX_IE_USERNAME, IAX_RTCACHEFRIENDS, IAX_RTUPDATE, IAX_TEMPONLY, iax2_peer::mailbox, iax2_peer::maxcallno, ast_mwi_state::new_msgs, ast_mwi_state::old_msgs, RAII_VAR, refresh, send_command_final(), iax2_peer::sockfd, stasis_cache_get(), stasis_message_data(), and iax2_peer::zonetag.
|
static |
Definition at line 2043 of file chan_iax2.c.
|
static |
Definition at line 2032 of file chan_iax2.c.
References ast_str_hash(), and OBJ_KEY.
|
static |
Definition at line 5425 of file chan_iax2.c.
References chan_iax2_pvt::callno, and chan_iax2_pvt::peercallno.
|
static |
subscription id for ACL change events
Definition at line 328 of file chan_iax2.c.
|
static |
Table containing custom callno limit rules for a range of ip addresses.
Definition at line 1009 of file chan_iax2.c.
|
static |
table of available call numbers
Definition at line 966 of file chan_iax2.c.
|
static |
table of available trunk call numbers
Definition at line 969 of file chan_iax2.c.
|
static |
Table containing ip addresses not requiring calltoken validation
Definition at line 1012 of file chan_iax2.c.
struct { ... } frame_queue[IAX_MAX_CALLS] |
a list of frames that may need to be retransmitted
|
static |
Maximum MTU, 0 if not used
Definition at line 317 of file chan_iax2.c.
Referenced by handle_cli_iax2_set_mtu(), and set_config().
|
static |
Total num of call numbers allowed to be allocated without calltoken validation
Definition at line 1021 of file chan_iax2.c.
|
static |
Definition at line 1569 of file chan_iax2.c.
|
static |
Another container of iax2_pvt structures.
Active IAX2 pvt structs are also stored in this container, if they are a part of an active call where we know the remote side's call number. The reason for this is that incoming media frames do not contain our call number. So, instead of having to iterate the entire iaxs array, we use this container to look up calls where the remote side is using a given call number.
Definition at line 1202 of file chan_iax2.c.
|
static |
Another container of iax2_pvt structures.
Active IAX2 pvt structs used during transfering a call are stored here.
Definition at line 1218 of file chan_iax2.c.
|
static |
Definition at line 14624 of file chan_iax2.c.
|
static |
an array of iax2 pvt structures
The container for active chan_iax2_pvt structures is implemented as an array for extremely quick direct access to the correct pvt structure based on the local call number. The local call number is used as the index into the array where the associated pvt structure is stored.
Definition at line 1173 of file chan_iax2.c.
|
static |
chan_iax2_pvt structure locks
These locks are used when accessing a pvt structure in the iaxs array. The index used here is the same as used in the iaxs array. It is the local call number for the associated pvt struct.
Definition at line 1211 of file chan_iax2.c.
|
static |
Definition at line 10198 of file chan_iax2.c.
|
static |
subscription id for network change events
Definition at line 327 of file chan_iax2.c.
|
static |
used if sourceaddress specified and bindaddr == INADDR_ANY
Definition at line 367 of file chan_iax2.c.
|
static |
Table containing peercnt objects for every ip address consuming a callno
Definition at line 1006 of file chan_iax2.c.
|
static |