2 * Asterisk -- An open source telephony toolkit.
4 * Copyright (C) 1999 - 2006, Digium, Inc.
6 * Mark Spencer <markster@digium.com>
8 * See http://www.asterisk.org for more information about
9 * the Asterisk project. Please do not directly contact
10 * any of the maintainers of this project for assistance;
11 * the project provides a web site, mailing lists and IRC
12 * channels for your use.
14 * This program is free software, distributed under the terms of
15 * the GNU General Public License Version 2. See the LICENSE file
16 * at the top of the source tree.
21 * \brief Implementation of Inter-Asterisk eXchange Version 2
23 * \author Mark Spencer <markster@digium.com>
26 * \arg \ref Config_iax
28 * \ingroup channel_drivers
30 * \todo Implement musicclass settings for IAX2 devices
39 ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
43 #include <sys/socket.h>
44 #include <netinet/in.h>
45 #include <arpa/inet.h>
46 #include <netinet/in_systm.h>
47 #include <netinet/ip.h>
49 #include <sys/signal.h>
57 #include "asterisk/paths.h" /* need ast_config_AST_DATA_DIR for firmware */
59 #include "asterisk/lock.h"
60 #include "asterisk/frame.h"
61 #include "asterisk/channel.h"
62 #include "asterisk/module.h"
63 #include "asterisk/pbx.h"
64 #include "asterisk/sched.h"
65 #include "asterisk/io.h"
66 #include "asterisk/config.h"
67 #include "asterisk/cli.h"
68 #include "asterisk/translate.h"
69 #include "asterisk/md5.h"
70 #include "asterisk/cdr.h"
71 #include "asterisk/crypto.h"
72 #include "asterisk/acl.h"
73 #include "asterisk/manager.h"
74 #include "asterisk/callerid.h"
75 #include "asterisk/app.h"
76 #include "asterisk/astdb.h"
77 #include "asterisk/musiconhold.h"
78 #include "asterisk/features.h"
79 #include "asterisk/utils.h"
80 #include "asterisk/causes.h"
81 #include "asterisk/localtime.h"
82 #include "asterisk/aes.h"
83 #include "asterisk/dnsmgr.h"
84 #include "asterisk/devicestate.h"
85 #include "asterisk/netsock.h"
86 #include "asterisk/stringfields.h"
87 #include "asterisk/linkedlists.h"
88 #include "asterisk/event.h"
89 #include "asterisk/astobj2.h"
90 #include "asterisk/timing.h"
93 #include "iax2-parser.h"
94 #include "iax2-provision.h"
95 #include "jitterbuf.h"
98 <application name="IAX2Provision" language="en_US">
100 Provision a calling IAXy with a given template.
103 <parameter name="template">
104 <para>If not specified, defaults to <literal>default</literal>.</para>
108 <para>Provisions the calling IAXy (assuming the calling entity is in fact an IAXy) with the
109 given <replaceable>template</replaceable>. Returns <literal>-1</literal> on error
110 or <literal>0</literal> on success.</para>
113 <function name="IAXPEER" language="en_US">
115 Gets IAX peer information.
118 <parameter name="peername" required="true">
120 <enum name="CURRENTCHANNEL">
121 <para>If <replaceable>peername</replaceable> is specified to this value, return the IP address of the
122 endpoint of the current channel</para>
126 <parameter name="item">
127 <para>If <replaceable>peername</replaceable> is specified, valid items are:</para>
130 <para>(default) The IP address.</para>
133 <para>The peer's status (if <literal>qualify=yes</literal>)</para>
135 <enum name="mailbox">
136 <para>The configured mailbox.</para>
138 <enum name="context">
139 <para>The configured context.</para>
142 <para>The epoch time of the next expire.</para>
144 <enum name="dynamic">
145 <para>Is it dynamic? (yes/no).</para>
147 <enum name="callerid_name">
148 <para>The configured Caller ID name.</para>
150 <enum name="callerid_num">
151 <para>The configured Caller ID number.</para>
154 <para>The configured codecs.</para>
156 <enum name="codec[x]">
157 <para>Preferred codec index number <replaceable>x</replaceable> (beginning
158 with <literal>0</literal>)</para>
165 <ref type="function">SIPPEER</ref>
168 <function name="IAXVAR" language="en_US">
170 Sets or retrieves a remote variable.
173 <parameter name="varname" required="true" />
179 /* Define SCHED_MULTITHREADED to run the scheduler in a special
180 multithreaded mode. */
181 #define SCHED_MULTITHREADED
183 /* Define DEBUG_SCHED_MULTITHREADED to keep track of where each
184 thread is actually doing. */
185 #define DEBUG_SCHED_MULTITHREAD
189 static int nochecksums = 0;
192 #define PTR_TO_CALLNO(a) ((unsigned short)(unsigned long)(a))
193 #define CALLNO_TO_PTR(a) ((void *)(unsigned long)(a))
195 #define DEFAULT_THREAD_COUNT 10
196 #define DEFAULT_MAX_THREAD_COUNT 100
197 #define DEFAULT_RETRY_TIME 1000
198 #define MEMORY_SIZE 100
199 #define DEFAULT_DROP 3
201 #define DEBUG_SUPPORT
203 #define MIN_REUSE_TIME 60 /* Don't reuse a call number within 60 seconds */
205 /* Sample over last 100 units to determine historic jitter */
208 static struct ast_codec_pref prefs;
210 static const char tdesc[] = "Inter Asterisk eXchange Driver (Ver 2)";
213 /*! \brief Maximum transmission unit for the UDP packet in the trunk not to be
214 fragmented. This is based on 1516 - ethernet - ip - udp - iax minus one g711 frame = 1240 */
215 #define MAX_TRUNK_MTU 1240
217 static int global_max_trunk_mtu; /*!< Maximum MTU, 0 if not used */
218 static int trunk_timed, trunk_untimed, trunk_maxmtu, trunk_nmaxmtu ; /*!< Trunk MTU statistics */
220 #define DEFAULT_CONTEXT "default"
222 static char default_parkinglot[AST_MAX_CONTEXT];
224 static char language[MAX_LANGUAGE] = "";
225 static char regcontext[AST_MAX_CONTEXT] = "";
227 static int maxauthreq = 3;
228 static int max_retries = 4;
229 static int ping_time = 21;
230 static int lagrq_time = 10;
231 static int maxjitterbuffer=1000;
232 static int resyncthreshold=1000;
233 static int maxjitterinterps=10;
234 static int jittertargetextra = 40; /* number of milliseconds the new jitter buffer adds on to its size */
236 #define MAX_TRUNKDATA 640 * 200 /*!< 40ms, uncompressed linear * 200 channels */
238 static int trunkfreq = 20;
239 static int trunkmaxsize = MAX_TRUNKDATA;
241 static int authdebug = 1;
242 static int autokill = 0;
243 static int iaxcompat = 0;
245 static int iaxdefaultdpcache=10 * 60; /* Cache dialplan entries for 10 minutes by default */
247 static int iaxdefaulttimeout = 5; /* Default to wait no more than 5 seconds for a reply to come back */
254 static int min_reg_expire;
255 static int max_reg_expire;
257 static int srvlookup = 0;
259 static int timingfd = -1; /* Timing file descriptor */
261 static struct ast_netsock_list *netsock;
262 static struct ast_netsock_list *outsock; /*!< used if sourceaddress specified and bindaddr == INADDR_ANY */
263 static int defaultsockfd = -1;
265 int (*iax2_regfunk)(const char *username, int onoff) = NULL;
268 #define IAX_CAPABILITY_FULLBANDWIDTH 0xFFFF
270 #define IAX_CAPABILITY_MEDBANDWIDTH (IAX_CAPABILITY_FULLBANDWIDTH & \
271 ~AST_FORMAT_SLINEAR & \
276 #define IAX_CAPABILITY_LOWBANDWIDTH (IAX_CAPABILITY_MEDBANDWIDTH & \
278 ~AST_FORMAT_G726_AAL2 & \
281 #define IAX_CAPABILITY_LOWFREE (IAX_CAPABILITY_LOWBANDWIDTH & \
285 #define DEFAULT_MAXMS 2000 /* Must be faster than 2 seconds by default */
286 #define DEFAULT_FREQ_OK 60 * 1000 /* How often to check for the host to be up */
287 #define DEFAULT_FREQ_NOTOK 10 * 1000 /* How often to check, if the host is down... */
289 /* if a pvt has encryption setup done and is running on the call */
290 #define IAX_CALLENCRYPTED(pvt) \
291 (ast_test_flag(pvt, IAX_ENCRYPTED) && ast_test_flag(pvt, IAX_KEYPOPULATED))
293 #define IAX_DEBUGDIGEST(msg, key) do { \
295 char digest[33] = ""; \
300 for (idx = 0; idx < 16; idx++) \
301 sprintf(digest + (idx << 1), "%2.2x", (unsigned char) key[idx]); \
303 ast_log(LOG_NOTICE, msg " IAX_COMMAND_RTKEY to rotate key to '%s'\n", digest); \
306 static struct io_context *io;
307 static struct sched_context *sched;
309 static int iax2_capability = IAX_CAPABILITY_FULLBANDWIDTH;
311 static int iaxdebug = 0;
313 static int iaxtrunkdebug = 0;
315 static int test_losspct = 0;
317 static int test_late = 0;
318 static int test_resync = 0;
319 static int test_jit = 0;
320 static int test_jitpct = 0;
321 #endif /* IAXTESTS */
323 static char accountcode[AST_MAX_ACCOUNT_CODE];
324 static char mohinterpret[MAX_MUSICCLASS];
325 static char mohsuggest[MAX_MUSICCLASS];
326 static int amaflags = 0;
328 static int delayreject = 0;
329 static int iax2_encryption = 0;
331 static struct ast_flags globalflags = { 0 };
333 static pthread_t netthreadid = AST_PTHREADT_NULL;
334 static pthread_t schedthreadid = AST_PTHREADT_NULL;
335 AST_MUTEX_DEFINE_STATIC(sched_lock);
336 static ast_cond_t sched_cond;
339 IAX_STATE_STARTED = (1 << 0),
340 IAX_STATE_AUTHENTICATED = (1 << 1),
341 IAX_STATE_TBD = (1 << 2),
342 IAX_STATE_UNCHANGED = (1 << 3),
345 struct iax2_context {
346 char context[AST_MAX_CONTEXT];
347 struct iax2_context *next;
351 IAX_HASCALLERID = (1 << 0), /*!< CallerID has been specified */
352 IAX_DELME = (1 << 1), /*!< Needs to be deleted */
353 IAX_TEMPONLY = (1 << 2), /*!< Temporary (realtime) */
354 IAX_TRUNK = (1 << 3), /*!< Treat as a trunk */
355 IAX_NOTRANSFER = (1 << 4), /*!< Don't native bridge */
356 IAX_USEJITTERBUF = (1 << 5), /*!< Use jitter buffer */
357 IAX_DYNAMIC = (1 << 6), /*!< dynamic peer */
358 IAX_SENDANI = (1 << 7), /*!< Send ANI along with CallerID */
359 /* (1 << 8) is currently unused due to the deprecation of an old option. Go ahead, take it! */
360 IAX_ALREADYGONE = (1 << 9), /*!< Already disconnected */
361 IAX_PROVISION = (1 << 10), /*!< This is a provisioning request */
362 IAX_QUELCH = (1 << 11), /*!< Whether or not we quelch audio */
363 IAX_ENCRYPTED = (1 << 12), /*!< Whether we should assume encrypted tx/rx */
364 IAX_KEYPOPULATED = (1 << 13), /*!< Whether we have a key populated */
365 IAX_CODEC_USER_FIRST = (1 << 14), /*!< are we willing to let the other guy choose the codec? */
366 IAX_CODEC_NOPREFS = (1 << 15), /*!< Force old behaviour by turning off prefs */
367 IAX_CODEC_NOCAP = (1 << 16), /*!< only consider requested format and ignore capabilities*/
368 IAX_RTCACHEFRIENDS = (1 << 17), /*!< let realtime stay till your reload */
369 IAX_RTUPDATE = (1 << 18), /*!< Send a realtime update */
370 IAX_RTAUTOCLEAR = (1 << 19), /*!< erase me on expire */
371 IAX_FORCEJITTERBUF = (1 << 20), /*!< Force jitterbuffer, even when bridged to a channel that can take jitter */
372 IAX_RTIGNOREREGEXPIRE = (1 << 21), /*!< When using realtime, ignore registration expiration */
373 IAX_TRUNKTIMESTAMPS = (1 << 22), /*!< Send trunk timestamps */
374 IAX_TRANSFERMEDIA = (1 << 23), /*!< When doing IAX2 transfers, transfer media only */
375 IAX_MAXAUTHREQ = (1 << 24), /*!< Maximum outstanding AUTHREQ restriction is in place */
376 IAX_DELAYPBXSTART = (1 << 25), /*!< Don't start a PBX on the channel until the peer sends us a
377 response, so that we've achieved a three-way handshake with
378 them before sending voice or anything else*/
379 IAX_ALLOWFWDOWNLOAD = (1 << 26), /*!< Allow the FWDOWNL command? */
380 IAX_NOKEYROTATE = (1 << 27), /*!< Disable key rotation with encryption */
383 static int global_rtautoclear = 120;
385 static int reload_config(void);
388 AST_DECLARE_STRING_FIELDS(
389 AST_STRING_FIELD(name);
390 AST_STRING_FIELD(secret);
391 AST_STRING_FIELD(dbsecret);
392 AST_STRING_FIELD(accountcode);
393 AST_STRING_FIELD(mohinterpret);
394 AST_STRING_FIELD(mohsuggest);
395 AST_STRING_FIELD(inkeys); /*!< Key(s) this user can use to authenticate to us */
396 AST_STRING_FIELD(language);
397 AST_STRING_FIELD(cid_num);
398 AST_STRING_FIELD(cid_name);
399 AST_STRING_FIELD(parkinglot); /*!< Default parkinglot for device */
408 int maxauthreq; /*!< Maximum allowed outstanding AUTHREQs */
409 int curauthreq; /*!< Current number of outstanding AUTHREQs */
410 struct ast_codec_pref prefs;
412 struct iax2_context *contexts;
413 struct ast_variable *vars;
417 AST_DECLARE_STRING_FIELDS(
418 AST_STRING_FIELD(name);
419 AST_STRING_FIELD(username);
420 AST_STRING_FIELD(secret);
421 AST_STRING_FIELD(dbsecret);
422 AST_STRING_FIELD(outkey); /*!< What key we use to talk to this peer */
424 AST_STRING_FIELD(regexten); /*!< Extension to register (if regcontext is used) */
425 AST_STRING_FIELD(context); /*!< For transfers only */
426 AST_STRING_FIELD(peercontext); /*!< Context to pass to peer */
427 AST_STRING_FIELD(mailbox); /*!< Mailbox */
428 AST_STRING_FIELD(mohinterpret);
429 AST_STRING_FIELD(mohsuggest);
430 AST_STRING_FIELD(inkeys); /*!< Key(s) this peer can use to authenticate to us */
431 /* Suggested caller id if registering */
432 AST_STRING_FIELD(cid_num); /*!< Default context (for transfer really) */
433 AST_STRING_FIELD(cid_name); /*!< Default context (for transfer really) */
434 AST_STRING_FIELD(zonetag); /*!< Time Zone */
435 AST_STRING_FIELD(parkinglot); /*!< Default parkinglot for device */
437 struct ast_codec_pref prefs;
438 struct ast_dnsmgr_entry *dnsmgr; /*!< DNS refresh manager */
439 struct sockaddr_in addr;
441 int sockfd; /*!< Socket to use for transmission */
446 /* Dynamic Registration fields */
447 struct sockaddr_in defaddr; /*!< Default address if there is one */
448 int authmethods; /*!< Authentication methods (IAX_AUTH_*) */
449 int encmethods; /*!< Encryption methods (IAX_ENCRYPT_*) */
451 int expire; /*!< Schedule entry for expiry */
452 int expiry; /*!< How soon to expire */
453 int capability; /*!< Capability */
456 int callno; /*!< Call number of POKE request */
457 int pokeexpire; /*!< Scheduled qualification-related task (ie iax2_poke_peer_s or iax2_poke_noanswer) */
458 int lastms; /*!< How long last response took (in ms), or -1 for no response */
459 int maxms; /*!< Max ms we will accept for the host to be up, 0 to not monitor */
461 int pokefreqok; /*!< How often to check if the host is up */
462 int pokefreqnotok; /*!< How often to check when the host has been determined to be down */
463 int historicms; /*!< How long recent average responses took */
464 int smoothing; /*!< Sample over how many units to determine historic ms */
466 struct ast_event_sub *mwi_event_sub;
471 #define IAX2_TRUNK_PREFACE (sizeof(struct iax_frame) + sizeof(struct ast_iax2_meta_hdr) + sizeof(struct ast_iax2_meta_trunk_hdr))
473 struct iax2_trunk_peer {
476 struct sockaddr_in addr;
477 struct timeval txtrunktime; /*!< Transmit trunktime */
478 struct timeval rxtrunktime; /*!< Receive trunktime */
479 struct timeval lasttxtime; /*!< Last transmitted trunktime */
480 struct timeval trunkact; /*!< Last trunk activity */
481 unsigned int lastsent; /*!< Last sent time */
482 /* Trunk data and length */
483 unsigned char *trunkdata;
484 unsigned int trunkdatalen;
485 unsigned int trunkdataalloc;
489 AST_LIST_ENTRY(iax2_trunk_peer) list;
492 static AST_LIST_HEAD_STATIC(tpeers, iax2_trunk_peer);
494 struct iax_firmware {
495 AST_LIST_ENTRY(iax_firmware) list;
499 struct ast_iax2_firmware_header *fwh;
504 REG_STATE_UNREGISTERED = 0,
507 REG_STATE_REGISTERED,
513 enum iax_transfer_state {
523 struct iax2_registry {
524 struct sockaddr_in addr; /*!< Who we connect to for registration purposes */
526 char secret[80]; /*!< Password or key name in []'s */
527 int expire; /*!< Sched ID of expiration */
528 int refresh; /*!< How often to refresh */
529 enum iax_reg_state regstate;
530 int messages; /*!< Message count, low 8 bits = new, high 8 bits = old */
531 int callno; /*!< Associated call number if applicable */
532 struct sockaddr_in us; /*!< Who the server thinks we are */
533 struct ast_dnsmgr_entry *dnsmgr; /*!< DNS refresh manager */
534 AST_LIST_ENTRY(iax2_registry) entry;
537 static AST_LIST_HEAD_STATIC(registrations, iax2_registry);
539 /* Don't retry more frequently than every 10 ms, or less frequently than every 5 seconds */
540 #define MIN_RETRY_TIME 100
541 #define MAX_RETRY_TIME 10000
543 #define MAX_JITTER_BUFFER 50
544 #define MIN_JITTER_BUFFER 10
546 #define DEFAULT_TRUNKDATA 640 * 10 /*!< 40ms, uncompressed linear * 10 channels */
548 #define MAX_TIMESTAMP_SKEW 160 /*!< maximum difference between actual and predicted ts for sending */
550 /* If consecutive voice frame timestamps jump by more than this many milliseconds, then jitter buffer will resync */
551 #define TS_GAP_FOR_JB_RESYNC 5000
553 static int iaxthreadcount = DEFAULT_THREAD_COUNT;
554 static int iaxmaxthreadcount = DEFAULT_MAX_THREAD_COUNT;
555 static int iaxdynamicthreadcount = 0;
556 static int iaxdynamicthreadnum = 0;
557 static int iaxactivethreadcount = 0;
571 struct chan_iax2_pvt {
572 /*! Socket to send/receive on for this call */
574 /*! Last received voice format */
576 /*! Last received video format */
578 /*! Last sent voice format */
580 /*! Last sent video format */
582 /*! What we are capable of sending */
584 /*! Last received timestamp */
586 /*! Last sent timestamp - never send the same timestamp twice in a single call */
587 unsigned int lastsent;
588 /*! Timestamp of the last video frame sent */
589 unsigned int lastvsent;
590 /*! Next outgoing timestamp if everything is good */
591 unsigned int nextpred;
592 /*! True if the last voice we transmitted was not silence/CNG */
593 unsigned int notsilenttx:1;
595 unsigned int pingtime;
596 /*! Max time for initial response */
599 struct sockaddr_in addr;
600 /*! Actual used codec preferences */
601 struct ast_codec_pref prefs;
602 /*! Requested codec preferences */
603 struct ast_codec_pref rprefs;
604 /*! Our call number */
605 unsigned short callno;
607 unsigned short peercallno;
608 /*! Negotiated format, this is only used to remember what format was
609 chosen for an unauthenticated call so that the channel can get
610 created later using the right format */
612 /*! Peer selected format */
614 /*! Peer capability */
616 /*! timeval that we base our transmission on */
617 struct timeval offset;
618 /*! timeval that we base our delivery on */
619 struct timeval rxcore;
620 /*! The jitterbuffer */
622 /*! active jb read scheduler id */
626 /*! Error, as discovered by the manager */
628 /*! Owner if we have one */
629 struct ast_channel *owner;
630 /*! What's our state? */
631 struct ast_flags state;
632 /*! Expiry (optional) */
634 /*! Next outgoing sequence number */
635 unsigned char oseqno;
636 /*! Next sequence number they have not yet acknowledged */
637 unsigned char rseqno;
638 /*! Next incoming sequence number */
639 unsigned char iseqno;
640 /*! Last incoming sequence number we have acknowledged */
641 unsigned char aseqno;
643 AST_DECLARE_STRING_FIELDS(
645 AST_STRING_FIELD(peer);
646 /*! Default Context */
647 AST_STRING_FIELD(context);
648 /*! Caller ID if available */
649 AST_STRING_FIELD(cid_num);
650 AST_STRING_FIELD(cid_name);
651 /*! Hidden Caller ID (i.e. ANI) if appropriate */
652 AST_STRING_FIELD(ani);
654 AST_STRING_FIELD(dnid);
656 AST_STRING_FIELD(rdnis);
657 /*! Requested Extension */
658 AST_STRING_FIELD(exten);
659 /*! Expected Username */
660 AST_STRING_FIELD(username);
661 /*! Expected Secret */
662 AST_STRING_FIELD(secret);
664 AST_STRING_FIELD(challenge);
665 /*! Public keys permitted keys for incoming authentication */
666 AST_STRING_FIELD(inkeys);
667 /*! Private key for outgoing authentication */
668 AST_STRING_FIELD(outkey);
669 /*! Preferred language */
670 AST_STRING_FIELD(language);
671 /*! Hostname/peername for naming purposes */
672 AST_STRING_FIELD(host);
674 AST_STRING_FIELD(dproot);
675 AST_STRING_FIELD(accountcode);
676 AST_STRING_FIELD(mohinterpret);
677 AST_STRING_FIELD(mohsuggest);
678 /*! received OSP token */
679 AST_STRING_FIELD(osptoken);
680 /*! Default parkinglot */
681 AST_STRING_FIELD(parkinglot);
684 /*! permitted authentication methods */
686 /*! permitted encryption methods */
688 /*! Encryption AES-128 Key */
689 ast_aes_encrypt_key ecx;
690 /*! Decryption AES-128 Key */
691 ast_aes_decrypt_key dcx;
692 /*! scheduler id associated with iax_key_rotate
693 * for encrypted calls*/
695 /*! 32 bytes of semi-random data */
696 unsigned char semirand[32];
697 /*! Associated registry */
698 struct iax2_registry *reg;
699 /*! Associated peer for poking */
700 struct iax2_peer *peerpoke;
705 /*! Transferring status */
706 enum iax_transfer_state transferring;
707 /*! Transfer identifier */
709 /*! Who we are IAX transferring to */
710 struct sockaddr_in transfer;
711 /*! What's the new call number for the transfer */
712 unsigned short transfercallno;
713 /*! Transfer encrypt AES-128 Key */
714 ast_aes_encrypt_key tdcx;
716 /*! If transfer has been attempted */
717 unsigned int triedtransfer:1;
718 /*! Whether media is released */
719 unsigned int mediareleased:1;
720 /*! If media released, the peer to send media to */
721 struct sockaddr_in media;
723 /*! Status of knowledge of peer ADSI capability */
726 /*! Who we are bridged to */
727 unsigned short bridgecallno;
729 int pingid; /*!< Transmit PING request */
730 int lagid; /*!< Retransmit lag request */
731 int autoid; /*!< Auto hangup for Dialplan requestor */
732 int authid; /*!< Authentication rejection ID */
733 int authfail; /*!< Reason to report failure */
734 int initid; /*!< Initial peer auto-congest ID (based on qualified peers) */
739 AST_LIST_HEAD_NOLOCK(, iax2_dpcache) dpentries;
740 /*! variables inherited from the user definition */
741 struct ast_variable *vars;
742 /*! variables transmitted in a NEW packet */
743 struct ast_variable *iaxvars;
744 /*! last received remote rr */
745 struct iax_rr remote_rr;
746 /*! Current base time: (just for stats) */
748 /*! Dropped frame count: (just for stats) */
750 /*! received frame count: (just for stats) */
755 * \brief a list of frames that may need to be retransmitted
757 * \note The contents of this list do not need to be explicitly destroyed
758 * on module unload. This is because all active calls are destroyed, and
759 * all frames in this queue will get destroyed as a part of that process.
761 static AST_LIST_HEAD_STATIC(frame_queue, iax_frame);
764 * This module will get much higher performance when doing a lot of
765 * user and peer lookups if the number of buckets is increased from 1.
766 * However, to maintain old behavior for Asterisk 1.4, these are set to
767 * 1 by default. When using multiple buckets, search order through these
768 * containers is considered random, so you will not be able to depend on
769 * the order the entires are specified in iax.conf for matching order. */
771 #define MAX_PEER_BUCKETS 17
773 #define MAX_PEER_BUCKETS 563
775 static struct ao2_container *peers;
777 #define MAX_USER_BUCKETS MAX_PEER_BUCKETS
778 static struct ao2_container *users;
780 static AST_LIST_HEAD_STATIC(firmwares, iax_firmware);
783 /*! Extension exists */
784 CACHE_FLAG_EXISTS = (1 << 0),
785 /*! Extension is nonexistent */
786 CACHE_FLAG_NONEXISTENT = (1 << 1),
787 /*! Extension can exist */
788 CACHE_FLAG_CANEXIST = (1 << 2),
789 /*! Waiting to hear back response */
790 CACHE_FLAG_PENDING = (1 << 3),
792 CACHE_FLAG_TIMEOUT = (1 << 4),
793 /*! Request transmitted */
794 CACHE_FLAG_TRANSMITTED = (1 << 5),
796 CACHE_FLAG_UNKNOWN = (1 << 6),
798 CACHE_FLAG_MATCHMORE = (1 << 7),
801 struct iax2_dpcache {
802 char peercontext[AST_MAX_CONTEXT];
803 char exten[AST_MAX_EXTENSION];
805 struct timeval expiry;
807 unsigned short callno;
809 AST_LIST_ENTRY(iax2_dpcache) cache_list;
810 AST_LIST_ENTRY(iax2_dpcache) peer_list;
813 static AST_LIST_HEAD_STATIC(dpcache, iax2_dpcache);
815 static void reg_source_db(struct iax2_peer *p);
816 static struct iax2_peer *realtime_peer(const char *peername, struct sockaddr_in *sin);
818 static int ast_cli_netstats(struct mansession *s, int fd, int limit_fmt);
819 static char *complete_iax2_peers(const char *line, const char *word, int pos, int state, int flags);
820 static char *complete_iax2_unregister(const char *line, const char *word, int pos, int state);
822 enum iax2_thread_iostate {
825 IAX_IOSTATE_PROCESSING,
826 IAX_IOSTATE_SCHEDREADY,
829 enum iax2_thread_type {
830 IAX_THREAD_TYPE_POOL,
831 IAX_THREAD_TYPE_DYNAMIC,
834 struct iax2_pkt_buf {
835 AST_LIST_ENTRY(iax2_pkt_buf) entry;
837 unsigned char buf[1];
841 AST_LIST_ENTRY(iax2_thread) list;
842 enum iax2_thread_type type;
843 enum iax2_thread_iostate iostate;
844 #ifdef SCHED_MULTITHREADED
845 void (*schedfunc)(const void *);
846 const void *scheddata;
848 #ifdef DEBUG_SCHED_MULTITHREAD
854 struct sockaddr_in iosin;
855 unsigned char readbuf[4096];
863 ast_mutex_t init_lock;
864 ast_cond_t init_cond;
865 /*! if this thread is processing a full frame,
866 some information about that frame will be stored
867 here, so we can avoid dispatching any more full
868 frames for that callno to other threads */
870 unsigned short callno;
871 struct sockaddr_in sin;
875 /*! Queued up full frames for processing. If more full frames arrive for
876 * a call which this thread is already processing a full frame for, they
877 * are queued up here. */
878 AST_LIST_HEAD_NOLOCK(, iax2_pkt_buf) full_frames;
882 static AST_LIST_HEAD_STATIC(idle_list, iax2_thread);
883 static AST_LIST_HEAD_STATIC(active_list, iax2_thread);
884 static AST_LIST_HEAD_STATIC(dynamic_list, iax2_thread);
886 static void *iax2_process_thread(void *data);
887 static void iax2_destroy(int callno);
889 static void signal_condition(ast_mutex_t *lock, ast_cond_t *cond)
891 ast_mutex_lock(lock);
892 ast_cond_signal(cond);
893 ast_mutex_unlock(lock);
897 * \brief an array of iax2 pvt structures
899 * The container for active chan_iax2_pvt structures is implemented as an
900 * array for extremely quick direct access to the correct pvt structure
901 * based on the local call number. The local call number is used as the
902 * index into the array where the associated pvt structure is stored.
904 static struct chan_iax2_pvt *iaxs[IAX_MAX_CALLS];
907 * \brief Another container of iax2_pvt structures
909 * Active IAX2 pvt structs are also stored in this container, if they are a part
910 * of an active call where we know the remote side's call number. The reason
911 * for this is that incoming media frames do not contain our call number. So,
912 * instead of having to iterate the entire iaxs array, we use this container to
913 * look up calls where the remote side is using a given call number.
915 static struct ao2_container *iax_peercallno_pvts;
918 * \brief chan_iax2_pvt structure locks
920 * These locks are used when accessing a pvt structure in the iaxs array.
921 * The index used here is the same as used in the iaxs array. It is the
922 * local call number for the associated pvt struct.
924 static ast_mutex_t iaxsl[ARRAY_LEN(iaxs)];
927 * \brief The last time a call number was used
929 * It is important to know the last time that a call number was used locally so
930 * that it is not used again too soon. The reason for this is the same as the
931 * reason that the TCP protocol state machine requires a "TIME WAIT" state.
933 * For example, say that a call is up. Then, the remote side sends a HANGUP,
934 * which we respond to with an ACK. However, there is no way to know whether
935 * the ACK made it there successfully. If it were to get lost, the remote
936 * side may retransmit the HANGUP. If in the meantime, this call number has
937 * been reused locally, given the right set of circumstances, this retransmitted
938 * HANGUP could potentially improperly hang up the new session. So, to avoid
939 * this potential issue, we must wait a specified timeout period before reusing
940 * a local call number.
942 * The specified time that we must wait before reusing a local call number is
943 * defined as MIN_REUSE_TIME, with a default of 60 seconds.
945 static struct timeval lastused[ARRAY_LEN(iaxs)];
947 /* Flag to use with trunk calls, keeping these calls high up. It halves our effective use
948 but keeps the division between trunked and non-trunked better. */
949 #define TRUNK_CALL_START ARRAY_LEN(iaxs) / 2
951 /* Debug routines... */
952 static struct sockaddr_in debugaddr;
954 static void iax_outputframe(struct iax_frame *f, struct ast_iax2_full_hdr *fhi, int rx, struct sockaddr_in *sin, int datalen)
957 (sin && debugaddr.sin_addr.s_addr &&
958 (!ntohs(debugaddr.sin_port) ||
959 debugaddr.sin_port == sin->sin_port) &&
960 debugaddr.sin_addr.s_addr == sin->sin_addr.s_addr)) {
962 iax_showframe(f, fhi, rx, sin, datalen);
965 iax_showframe(f, fhi, rx, sin, datalen);
971 static void iax_debug_output(const char *data)
974 ast_verbose("%s", data);
977 static void iax_error_output(const char *data)
979 ast_log(LOG_WARNING, "%s", data);
982 static void __attribute__((format (printf, 1, 2))) jb_error_output(const char *fmt, ...)
988 vsnprintf(buf, sizeof(buf), fmt, args);
991 ast_log(LOG_ERROR, "%s", buf);
994 static void __attribute__((format (printf, 1, 2))) jb_warning_output(const char *fmt, ...)
1000 vsnprintf(buf, sizeof(buf), fmt, args);
1003 ast_log(LOG_WARNING, "%s", buf);
1006 static void __attribute__((format (printf, 1, 2))) jb_debug_output(const char *fmt, ...)
1011 va_start(args, fmt);
1012 vsnprintf(buf, sizeof(buf), fmt, args);
1015 ast_verbose("%s", buf);
1018 static int maxtrunkcall = TRUNK_CALL_START;
1019 static int maxnontrunkcall = 1;
1021 static enum ast_bridge_result iax2_bridge(struct ast_channel *c0, struct ast_channel *c1, int flags, struct ast_frame **fo, struct ast_channel **rc, int timeoutms);
1022 static int expire_registry(const void *data);
1023 static int iax2_answer(struct ast_channel *c);
1024 static int iax2_call(struct ast_channel *c, char *dest, int timeout);
1025 static int iax2_devicestate(void *data);
1026 static int iax2_digit_begin(struct ast_channel *c, char digit);
1027 static int iax2_digit_end(struct ast_channel *c, char digit, unsigned int duration);
1028 static int iax2_do_register(struct iax2_registry *reg);
1029 static int iax2_fixup(struct ast_channel *oldchannel, struct ast_channel *newchan);
1030 static int iax2_hangup(struct ast_channel *c);
1031 static int iax2_indicate(struct ast_channel *c, int condition, const void *data, size_t datalen);
1032 static int iax2_poke_peer(struct iax2_peer *peer, int heldcall);
1033 static int iax2_provision(struct sockaddr_in *end, int sockfd, char *dest, const char *template, int force);
1034 static int iax2_send(struct chan_iax2_pvt *pvt, struct ast_frame *f, unsigned int ts, int seqno, int now, int transfer, int final, int media);
1035 static int iax2_sendhtml(struct ast_channel *c, int subclass, const char *data, int datalen);
1036 static int iax2_sendimage(struct ast_channel *c, struct ast_frame *img);
1037 static int iax2_sendtext(struct ast_channel *c, const char *text);
1038 static int iax2_setoption(struct ast_channel *c, int option, void *data, int datalen);
1039 static int iax2_transfer(struct ast_channel *c, const char *dest);
1040 static int iax2_write(struct ast_channel *c, struct ast_frame *f);
1041 static int send_trunk(struct iax2_trunk_peer *tpeer, struct timeval *now);
1042 static int send_command(struct chan_iax2_pvt *, char, int, unsigned int, const unsigned char *, int, int);
1043 static int send_command_final(struct chan_iax2_pvt *, char, int, unsigned int, const unsigned char *, int, int);
1044 static int send_command_immediate(struct chan_iax2_pvt *, char, int, unsigned int, const unsigned char *, int, int);
1045 static int send_command_locked(unsigned short callno, char, int, unsigned int, const unsigned char *, int, int);
1046 static int send_command_transfer(struct chan_iax2_pvt *, char, int, unsigned int, const unsigned char *, int);
1047 static int send_command_media(struct chan_iax2_pvt *, char, int, unsigned int, const unsigned char *, int);
1048 static struct ast_channel *iax2_request(const char *type, int format, void *data, int *cause);
1049 static struct ast_frame *iax2_read(struct ast_channel *c);
1050 static struct iax2_peer *build_peer(const char *name, struct ast_variable *v, struct ast_variable *alt, int temponly);
1051 static struct iax2_user *build_user(const char *name, struct ast_variable *v, struct ast_variable *alt, int temponly);
1052 static void realtime_update_peer(const char *peername, struct sockaddr_in *sin, time_t regtime);
1053 static void prune_peers(void);
1054 static void *iax2_dup_variable_datastore(void *);
1055 static void iax2_free_variable_datastore(void *);
1057 static int acf_channel_read(struct ast_channel *chan, const char *funcname, char *preparse, char *buf, size_t buflen);
1058 static int acf_channel_write(struct ast_channel *chan, const char *function, char *data, const char *value);
1060 static const struct ast_channel_tech iax2_tech = {
1062 .description = tdesc,
1063 .capabilities = IAX_CAPABILITY_FULLBANDWIDTH,
1064 .properties = AST_CHAN_TP_WANTSJITTER,
1065 .requester = iax2_request,
1066 .devicestate = iax2_devicestate,
1067 .send_digit_begin = iax2_digit_begin,
1068 .send_digit_end = iax2_digit_end,
1069 .send_text = iax2_sendtext,
1070 .send_image = iax2_sendimage,
1071 .send_html = iax2_sendhtml,
1073 .hangup = iax2_hangup,
1074 .answer = iax2_answer,
1076 .write = iax2_write,
1077 .write_video = iax2_write,
1078 .indicate = iax2_indicate,
1079 .setoption = iax2_setoption,
1080 .bridge = iax2_bridge,
1081 .transfer = iax2_transfer,
1082 .fixup = iax2_fixup,
1083 .func_channel_read = acf_channel_read,
1084 .func_channel_write = acf_channel_write,
1087 static void mwi_event_cb(const struct ast_event *event, void *userdata)
1089 /* The MWI subscriptions exist just so the core knows we care about those
1090 * mailboxes. However, we just grab the events out of the cache when it
1091 * is time to send MWI, since it is only sent with a REGACK. */
1094 /*! \brief Send manager event at call setup to link between Asterisk channel name
1095 and IAX2 call identifiers */
1096 static void iax2_ami_channelupdate(struct chan_iax2_pvt *pvt)
1098 manager_event(EVENT_FLAG_SYSTEM, "ChannelUpdate",
1099 "Channel: %s\r\nChanneltype: IAX2\r\nIAX2-callno-local: %d\r\nIAX2-callno-remote: %d\r\nIAX2-peer: %s\r\n",
1100 pvt->owner ? pvt->owner->name : "",
1101 pvt->callno, pvt->peercallno, pvt->peer ? pvt->peer : "");
1105 static struct ast_datastore_info iax2_variable_datastore_info = {
1106 .type = "IAX2_VARIABLE",
1107 .duplicate = iax2_dup_variable_datastore,
1108 .destroy = iax2_free_variable_datastore,
1111 static void *iax2_dup_variable_datastore(void *old)
1113 AST_LIST_HEAD(, ast_var_t) *oldlist = old, *newlist;
1114 struct ast_var_t *oldvar, *newvar;
1116 newlist = ast_calloc(sizeof(*newlist), 1);
1118 ast_log(LOG_ERROR, "Unable to duplicate iax2 variables\n");
1122 AST_LIST_HEAD_INIT(newlist);
1123 AST_LIST_LOCK(oldlist);
1124 AST_LIST_TRAVERSE(oldlist, oldvar, entries) {
1125 newvar = ast_var_assign(ast_var_name(oldvar), ast_var_value(oldvar));
1127 AST_LIST_INSERT_TAIL(newlist, newvar, entries);
1129 ast_log(LOG_ERROR, "Unable to duplicate iax2 variable '%s'\n", ast_var_name(oldvar));
1131 AST_LIST_UNLOCK(oldlist);
1135 static void iax2_free_variable_datastore(void *old)
1137 AST_LIST_HEAD(, ast_var_t) *oldlist = old;
1138 struct ast_var_t *oldvar;
1140 AST_LIST_LOCK(oldlist);
1141 while ((oldvar = AST_LIST_REMOVE_HEAD(oldlist, entries))) {
1144 AST_LIST_UNLOCK(oldlist);
1145 AST_LIST_HEAD_DESTROY(oldlist);
1150 /* WARNING: insert_idle_thread should only ever be called within the
1151 * context of an iax2_process_thread() thread.
1153 static void insert_idle_thread(struct iax2_thread *thread)
1155 if (thread->type == IAX_THREAD_TYPE_DYNAMIC) {
1156 AST_LIST_LOCK(&dynamic_list);
1157 AST_LIST_INSERT_TAIL(&dynamic_list, thread, list);
1158 AST_LIST_UNLOCK(&dynamic_list);
1160 AST_LIST_LOCK(&idle_list);
1161 AST_LIST_INSERT_TAIL(&idle_list, thread, list);
1162 AST_LIST_UNLOCK(&idle_list);
1168 static struct iax2_thread *find_idle_thread(void)
1170 struct iax2_thread *thread = NULL;
1172 /* Pop the head of the idle list off */
1173 AST_LIST_LOCK(&idle_list);
1174 thread = AST_LIST_REMOVE_HEAD(&idle_list, list);
1175 AST_LIST_UNLOCK(&idle_list);
1177 /* If we popped a thread off the idle list, just return it */
1179 memset(&thread->ffinfo, 0, sizeof(thread->ffinfo));
1183 /* Pop the head of the dynamic list off */
1184 AST_LIST_LOCK(&dynamic_list);
1185 thread = AST_LIST_REMOVE_HEAD(&dynamic_list, list);
1186 AST_LIST_UNLOCK(&dynamic_list);
1188 /* If we popped a thread off the dynamic list, just return it */
1190 memset(&thread->ffinfo, 0, sizeof(thread->ffinfo));
1194 /* If we can't create a new dynamic thread for any reason, return no thread at all */
1195 if (iaxdynamicthreadcount >= iaxmaxthreadcount || !(thread = ast_calloc(1, sizeof(*thread))))
1198 /* Set default values */
1199 ast_atomic_fetchadd_int(&iaxdynamicthreadcount, 1);
1200 thread->threadnum = ast_atomic_fetchadd_int(&iaxdynamicthreadnum, 1);
1201 thread->type = IAX_THREAD_TYPE_DYNAMIC;
1203 /* Initialize lock and condition */
1204 ast_mutex_init(&thread->lock);
1205 ast_cond_init(&thread->cond, NULL);
1206 ast_mutex_init(&thread->init_lock);
1207 ast_cond_init(&thread->init_cond, NULL);
1208 ast_mutex_lock(&thread->init_lock);
1210 /* Create thread and send it on it's way */
1211 if (ast_pthread_create_detached_background(&thread->threadid, NULL, iax2_process_thread, thread)) {
1212 ast_cond_destroy(&thread->cond);
1213 ast_mutex_destroy(&thread->lock);
1218 /* this thread is not processing a full frame (since it is idle),
1219 so ensure that the field for the full frame call number is empty */
1220 memset(&thread->ffinfo, 0, sizeof(thread->ffinfo));
1222 /* Wait for the thread to be ready before returning it to the caller */
1223 ast_cond_wait(&thread->init_cond, &thread->init_lock);
1225 /* Done with init_lock */
1226 ast_mutex_unlock(&thread->init_lock);
1231 #ifdef SCHED_MULTITHREADED
1232 static int __schedule_action(void (*func)(const void *data), const void *data, const char *funcname)
1234 struct iax2_thread *thread = NULL;
1235 static time_t lasterror;
1238 thread = find_idle_thread();
1240 if (thread != NULL) {
1241 thread->schedfunc = func;
1242 thread->scheddata = data;
1243 thread->iostate = IAX_IOSTATE_SCHEDREADY;
1244 #ifdef DEBUG_SCHED_MULTITHREAD
1245 ast_copy_string(thread->curfunc, funcname, sizeof(thread->curfunc));
1247 signal_condition(&thread->lock, &thread->cond);
1252 ast_debug(1, "Out of idle IAX2 threads for scheduling!\n");
1257 #define schedule_action(func, data) __schedule_action(func, data, __PRETTY_FUNCTION__)
1260 static int iax2_sched_replace(int id, struct sched_context *con, int when, ast_sched_cb callback, const void *data)
1262 AST_SCHED_REPLACE(id, con, when, callback, data);
1263 signal_condition(&sched_lock, &sched_cond);
1268 static int iax2_sched_add(struct sched_context *con, int when, ast_sched_cb callback, const void *data)
1272 res = ast_sched_add(con, when, callback, data);
1273 signal_condition(&sched_lock, &sched_cond);
1278 static int send_ping(const void *data);
1280 static void __send_ping(const void *data)
1282 int callno = (long) data;
1284 ast_mutex_lock(&iaxsl[callno]);
1287 if (iaxs[callno]->peercallno) {
1288 send_command(iaxs[callno], AST_FRAME_IAX, IAX_COMMAND_PING, 0, NULL, 0, -1);
1289 iaxs[callno]->pingid = iax2_sched_add(sched, ping_time * 1000, send_ping, data);
1291 /* I am the schedule, so I'm allowed to do this */
1292 iaxs[callno]->pingid = -1;
1294 } else if (option_debug > 0) {
1295 ast_log(LOG_DEBUG, "I was supposed to send a PING with callno %d, but no such call exists (and I cannot remove pingid, either).\n", callno);
1298 ast_mutex_unlock(&iaxsl[callno]);
1301 static int send_ping(const void *data)
1303 #ifdef SCHED_MULTITHREADED
1304 if (schedule_action(__send_ping, data))
1311 static int get_encrypt_methods(const char *s)
1314 if (!strcasecmp(s, "aes128"))
1315 e = IAX_ENCRYPT_AES128;
1316 else if (ast_true(s))
1317 e = IAX_ENCRYPT_AES128;
1323 static int send_lagrq(const void *data);
1325 static void __send_lagrq(const void *data)
1327 int callno = (long) data;
1329 ast_mutex_lock(&iaxsl[callno]);
1332 if (iaxs[callno]->peercallno) {
1333 send_command(iaxs[callno], AST_FRAME_IAX, IAX_COMMAND_LAGRQ, 0, NULL, 0, -1);
1334 iaxs[callno]->lagid = iax2_sched_add(sched, lagrq_time * 1000, send_lagrq, data);
1336 /* I am the schedule, so I'm allowed to do this */
1337 iaxs[callno]->lagid = -1;
1340 ast_log(LOG_WARNING, "I was supposed to send a LAGRQ with callno %d, but no such call exists (and I cannot remove lagid, either).\n", callno);
1343 ast_mutex_unlock(&iaxsl[callno]);
1346 static int send_lagrq(const void *data)
1348 #ifdef SCHED_MULTITHREADED
1349 if (schedule_action(__send_lagrq, data))
1356 static unsigned char compress_subclass(int subclass)
1360 /* If it's 128 or smaller, just return it */
1361 if (subclass < IAX_FLAG_SC_LOG)
1363 /* Otherwise find its power */
1364 for (x = 0; x < IAX_MAX_SHIFT; x++) {
1365 if (subclass & (1 << x)) {
1367 ast_log(LOG_WARNING, "Can't compress subclass %d\n", subclass);
1373 return power | IAX_FLAG_SC_LOG;
1376 static int uncompress_subclass(unsigned char csub)
1378 /* If the SC_LOG flag is set, return 2^csub otherwise csub */
1379 if (csub & IAX_FLAG_SC_LOG) {
1380 /* special case for 'compressed' -1 */
1384 return 1 << (csub & ~IAX_FLAG_SC_LOG & IAX_MAX_SHIFT);
1391 * \note The only member of the peer passed here guaranteed to be set is the name field
1393 static int peer_hash_cb(const void *obj, const int flags)
1395 const struct iax2_peer *peer = obj;
1397 return ast_str_hash(peer->name);
1401 * \note The only member of the peer passed here guaranteed to be set is the name field
1403 static int peer_cmp_cb(void *obj, void *arg, int flags)
1405 struct iax2_peer *peer = obj, *peer2 = arg;
1407 return !strcmp(peer->name, peer2->name) ? CMP_MATCH | CMP_STOP : 0;
1411 * \note The only member of the user passed here guaranteed to be set is the name field
1413 static int user_hash_cb(const void *obj, const int flags)
1415 const struct iax2_user *user = obj;
1417 return ast_str_hash(user->name);
1421 * \note The only member of the user passed here guaranteed to be set is the name field
1423 static int user_cmp_cb(void *obj, void *arg, int flags)
1425 struct iax2_user *user = obj, *user2 = arg;
1427 return !strcmp(user->name, user2->name) ? CMP_MATCH | CMP_STOP : 0;
1431 * \note This funtion calls realtime_peer -> reg_source_db -> iax2_poke_peer -> find_callno,
1432 * so do not call it with a pvt lock held.
1434 static struct iax2_peer *find_peer(const char *name, int realtime)
1436 struct iax2_peer *peer = NULL;
1437 struct iax2_peer tmp_peer = {
1441 peer = ao2_find(peers, &tmp_peer, OBJ_POINTER);
1443 /* Now go for realtime if applicable */
1444 if(!peer && realtime)
1445 peer = realtime_peer(name, NULL);
1450 static struct iax2_peer *peer_ref(struct iax2_peer *peer)
1456 static inline struct iax2_peer *peer_unref(struct iax2_peer *peer)
1462 static inline struct iax2_user *user_ref(struct iax2_user *user)
1468 static inline struct iax2_user *user_unref(struct iax2_user *user)
1474 static int iax2_getpeername(struct sockaddr_in sin, char *host, int len)
1476 struct iax2_peer *peer = NULL;
1478 struct ao2_iterator i;
1480 i = ao2_iterator_init(peers, 0);
1481 while ((peer = ao2_iterator_next(&i))) {
1482 if ((peer->addr.sin_addr.s_addr == sin.sin_addr.s_addr) &&
1483 (peer->addr.sin_port == sin.sin_port)) {
1484 ast_copy_string(host, peer->name, len);
1493 peer = realtime_peer(NULL, &sin);
1495 ast_copy_string(host, peer->name, len);
1504 /*!\note Assumes the lock on the pvt is already held, when
1505 * iax2_destroy_helper() is called. */
1506 static void iax2_destroy_helper(struct chan_iax2_pvt *pvt)
1508 /* Decrement AUTHREQ count if needed */
1509 if (ast_test_flag(pvt, IAX_MAXAUTHREQ)) {
1510 struct iax2_user *user;
1511 struct iax2_user tmp_user = {
1512 .name = pvt->username,
1515 user = ao2_find(users, &tmp_user, OBJ_POINTER);
1517 ast_atomic_fetchadd_int(&user->curauthreq, -1);
1521 ast_clear_flag(pvt, IAX_MAXAUTHREQ);
1523 /* No more pings or lagrq's */
1524 AST_SCHED_DEL_SPINLOCK(sched, pvt->pingid, &iaxsl[pvt->callno]);
1525 AST_SCHED_DEL_SPINLOCK(sched, pvt->lagid, &iaxsl[pvt->callno]);
1526 AST_SCHED_DEL(sched, pvt->autoid);
1527 AST_SCHED_DEL(sched, pvt->authid);
1528 AST_SCHED_DEL(sched, pvt->initid);
1529 AST_SCHED_DEL(sched, pvt->jbid);
1530 AST_SCHED_DEL(sched, pvt->keyrotateid);
1533 static void iax2_frame_free(struct iax_frame *fr)
1535 AST_SCHED_DEL(sched, fr->retrans);
1539 static int scheduled_destroy(const void *vid)
1541 short callno = PTR_TO_CALLNO(vid);
1542 ast_mutex_lock(&iaxsl[callno]);
1545 ast_log(LOG_DEBUG, "Really destroying %d now...\n", callno);
1547 iax2_destroy(callno);
1549 ast_mutex_unlock(&iaxsl[callno]);
1553 static void pvt_destructor(void *obj)
1555 struct chan_iax2_pvt *pvt = obj;
1556 struct iax_frame *cur = NULL;
1558 ast_mutex_lock(&iaxsl[pvt->callno]);
1559 iax2_destroy_helper(pvt);
1560 ast_mutex_unlock(&iaxsl[pvt->callno]);
1563 ast_set_flag(pvt, IAX_ALREADYGONE);
1565 AST_LIST_LOCK(&frame_queue);
1566 AST_LIST_TRAVERSE(&frame_queue, cur, list) {
1567 /* Cancel any pending transmissions */
1568 if (cur->callno == pvt->callno) {
1572 AST_LIST_UNLOCK(&frame_queue);
1575 pvt->reg->callno = 0;
1581 ast_variables_destroy(pvt->vars);
1585 while (jb_getall(pvt->jb, &frame) == JB_OK) {
1586 iax2_frame_free(frame.data);
1589 jb_destroy(pvt->jb);
1590 ast_string_field_free_memory(pvt);
1594 static struct chan_iax2_pvt *new_iax(struct sockaddr_in *sin, const char *host)
1596 struct chan_iax2_pvt *tmp;
1599 if (!(tmp = ao2_alloc(sizeof(*tmp), pvt_destructor))) {
1603 if (ast_string_field_init(tmp, 32)) {
1615 tmp->keyrotateid = -1;
1617 ast_string_field_set(tmp,exten, "s");
1618 ast_string_field_set(tmp,host, host);
1622 jbconf.max_jitterbuf = maxjitterbuffer;
1623 jbconf.resync_threshold = resyncthreshold;
1624 jbconf.max_contig_interp = maxjitterinterps;
1625 jbconf.target_extra = jittertargetextra;
1626 jb_setconf(tmp->jb,&jbconf);
1628 AST_LIST_HEAD_INIT_NOLOCK(&tmp->dpentries);
1633 static struct iax_frame *iaxfrdup2(struct iax_frame *fr)
1635 struct iax_frame *new = iax_frame_new(DIRECTION_INGRESS, fr->af.datalen, fr->cacheable);
1637 size_t afdatalen = new->afdatalen;
1638 memcpy(new, fr, sizeof(*new));
1639 iax_frame_wrap(new, &fr->af);
1640 new->afdatalen = afdatalen;
1643 new->direction = DIRECTION_INGRESS;
1649 #define NEW_PREVENT 0
1653 static int match(struct sockaddr_in *sin, unsigned short callno, unsigned short dcallno, const struct chan_iax2_pvt *cur, int check_dcallno)
1655 if ((cur->addr.sin_addr.s_addr == sin->sin_addr.s_addr) &&
1656 (cur->addr.sin_port == sin->sin_port)) {
1657 /* This is the main host */
1658 if ( (cur->peercallno == 0 || cur->peercallno == callno) &&
1659 (check_dcallno ? dcallno == cur->callno : 1) ) {
1660 /* That's us. Be sure we keep track of the peer call number */
1664 if ((cur->transfer.sin_addr.s_addr == sin->sin_addr.s_addr) &&
1665 (cur->transfer.sin_port == sin->sin_port) && (cur->transferring)) {
1666 /* We're transferring */
1667 if ((dcallno == cur->callno) || (cur->transferring == TRANSFER_NONE && cur->transfercallno == callno))
1673 static void update_max_trunk(void)
1675 int max = TRUNK_CALL_START;
1678 /* XXX Prolly don't need locks here XXX */
1679 for (x = TRUNK_CALL_START; x < ARRAY_LEN(iaxs) - 1; x++) {
1687 ast_debug(1, "New max trunk callno is %d\n", max);
1690 static void update_max_nontrunk(void)
1694 /* XXX Prolly don't need locks here XXX */
1695 for (x=1;x<TRUNK_CALL_START - 1; x++) {
1699 maxnontrunkcall = max;
1701 ast_debug(1, "New max nontrunk callno is %d\n", max);
1704 static int make_trunk(unsigned short callno, int locked)
1708 struct timeval now = ast_tvnow();
1709 if (iaxs[callno]->oseqno) {
1710 ast_log(LOG_WARNING, "Can't make trunk once a call has started!\n");
1713 if (callno & TRUNK_CALL_START) {
1714 ast_log(LOG_WARNING, "Call %d is already a trunk\n", callno);
1717 for (x = TRUNK_CALL_START; x < ARRAY_LEN(iaxs) - 1; x++) {
1718 ast_mutex_lock(&iaxsl[x]);
1719 if (!iaxs[x] && ((now.tv_sec - lastused[x].tv_sec) > MIN_REUSE_TIME)) {
1721 * \note We delete these before switching the slot, because if
1722 * they fire in the meantime, they will generate a warning.
1724 AST_SCHED_DEL(sched, iaxs[callno]->pingid);
1725 AST_SCHED_DEL(sched, iaxs[callno]->lagid);
1726 iaxs[x] = iaxs[callno];
1727 iaxs[x]->callno = x;
1728 iaxs[callno] = NULL;
1729 /* Update the two timers that should have been started */
1730 iaxs[x]->pingid = iax2_sched_add(sched,
1731 ping_time * 1000, send_ping, (void *)(long)x);
1732 iaxs[x]->lagid = iax2_sched_add(sched,
1733 lagrq_time * 1000, send_lagrq, (void *)(long)x);
1735 ast_mutex_unlock(&iaxsl[callno]);
1738 ast_mutex_unlock(&iaxsl[x]);
1741 ast_mutex_unlock(&iaxsl[x]);
1743 if (x >= ARRAY_LEN(iaxs) - 1) {
1744 ast_log(LOG_WARNING, "Unable to trunk call: Insufficient space\n");
1747 ast_debug(1, "Made call %d into trunk call %d\n", callno, x);
1748 /* We move this call from a non-trunked to a trunked call */
1750 update_max_nontrunk();
1754 static void store_by_peercallno(struct chan_iax2_pvt *pvt)
1756 if (!pvt->peercallno) {
1757 ast_log(LOG_ERROR, "This should not be called without a peer call number.\n");
1761 ao2_link(iax_peercallno_pvts, pvt);
1764 static void remove_by_peercallno(struct chan_iax2_pvt *pvt)
1766 if (!pvt->peercallno) {
1767 ast_log(LOG_ERROR, "This should not be called without a peer call number.\n");
1771 ao2_unlink(iax_peercallno_pvts, pvt);
1775 * \note Calling this function while holding another pvt lock can cause a deadlock.
1777 static int __find_callno(unsigned short callno, unsigned short dcallno, struct sockaddr_in *sin, int new, int sockfd, int return_locked, int check_dcallno)
1784 if (new <= NEW_ALLOW) {
1786 struct chan_iax2_pvt *pvt;
1787 struct chan_iax2_pvt tmp_pvt = {
1789 .peercallno = callno,
1791 .frames_received = check_dcallno,
1794 memcpy(&tmp_pvt.addr, sin, sizeof(tmp_pvt.addr));
1796 if ((pvt = ao2_find(iax_peercallno_pvts, &tmp_pvt, OBJ_POINTER))) {
1797 if (return_locked) {
1798 ast_mutex_lock(&iaxsl[pvt->callno]);
1807 /* This will occur on the first response to a message that we initiated,
1808 * such as a PING. */
1810 ast_mutex_lock(&iaxsl[dcallno]);
1812 if (callno && dcallno && iaxs[dcallno] && !iaxs[dcallno]->peercallno && match(sin, callno, dcallno, iaxs[dcallno], check_dcallno)) {
1813 iaxs[dcallno]->peercallno = callno;
1815 store_by_peercallno(iaxs[dcallno]);
1816 if (!res || !return_locked) {
1817 ast_mutex_unlock(&iaxsl[dcallno]);
1822 ast_mutex_unlock(&iaxsl[dcallno]);
1826 /* If we get here, we SHOULD NOT find a call structure for this
1827 callno; if we do, it means that there is a call structure that
1828 has a peer callno but did NOT get entered into the hash table,
1831 If we find a call structure using this old, slow method, output a log
1832 message so we'll know about it. After a few months of leaving this in
1833 place, if we don't hear about people seeing these messages, we can
1834 remove this code for good.
1837 for (x = 1; !res && x < maxnontrunkcall; x++) {
1838 ast_mutex_lock(&iaxsl[x]);
1840 /* Look for an exact match */
1841 if (match(sin, callno, dcallno, iaxs[x], check_dcallno)) {
1845 if (!res || !return_locked)
1846 ast_mutex_unlock(&iaxsl[x]);
1848 for (x = TRUNK_CALL_START; !res && x < maxtrunkcall; x++) {
1849 ast_mutex_lock(&iaxsl[x]);
1851 /* Look for an exact match */
1852 if (match(sin, callno, dcallno, iaxs[x], check_dcallno)) {
1856 if (!res || !return_locked)
1857 ast_mutex_unlock(&iaxsl[x]);
1861 if (!res && (new >= NEW_ALLOW)) {
1862 int start, found = 0;
1864 /* It may seem odd that we look through the peer list for a name for
1865 * this *incoming* call. Well, it is weird. However, users don't
1866 * have an IP address/port number that we can match against. So,
1867 * this is just checking for a peer that has that IP/port and
1868 * assuming that we have a user of the same name. This isn't always
1869 * correct, but it will be changed if needed after authentication. */
1870 if (!iax2_getpeername(*sin, host, sizeof(host)))
1871 snprintf(host, sizeof(host), "%s:%d", ast_inet_ntoa(sin->sin_addr), ntohs(sin->sin_port));
1874 start = 2 + (ast_random() % (TRUNK_CALL_START - 1));
1875 for (x = start; 1; x++) {
1876 if (x == TRUNK_CALL_START) {
1881 /* Find first unused call number that hasn't been used in a while */
1882 ast_mutex_lock(&iaxsl[x]);
1883 if (!iaxs[x] && ((now.tv_sec - lastused[x].tv_sec) > MIN_REUSE_TIME)) {
1887 ast_mutex_unlock(&iaxsl[x]);
1889 if (x == start - 1) {
1893 /* We've still got lock held if we found a spot */
1894 if (x == start - 1 && !found) {
1895 ast_log(LOG_WARNING, "No more space\n");
1898 iaxs[x] = new_iax(sin, host);
1899 update_max_nontrunk();
1902 ast_debug(1, "Creating new call structure %d\n", x);
1903 iaxs[x]->sockfd = sockfd;
1904 iaxs[x]->addr.sin_port = sin->sin_port;
1905 iaxs[x]->addr.sin_family = sin->sin_family;
1906 iaxs[x]->addr.sin_addr.s_addr = sin->sin_addr.s_addr;
1907 iaxs[x]->peercallno = callno;
1908 iaxs[x]->callno = x;
1909 iaxs[x]->pingtime = DEFAULT_RETRY_TIME;
1910 iaxs[x]->expiry = min_reg_expire;
1911 iaxs[x]->pingid = iax2_sched_add(sched, ping_time * 1000, send_ping, (void *)(long)x);
1912 iaxs[x]->lagid = iax2_sched_add(sched, lagrq_time * 1000, send_lagrq, (void *)(long)x);
1913 iaxs[x]->amaflags = amaflags;
1914 ast_copy_flags(iaxs[x], &globalflags, IAX_NOTRANSFER | IAX_TRANSFERMEDIA | IAX_USEJITTERBUF | IAX_FORCEJITTERBUF | IAX_NOKEYROTATE);
1916 ast_string_field_set(iaxs[x], accountcode, accountcode);
1917 ast_string_field_set(iaxs[x], mohinterpret, mohinterpret);
1918 ast_string_field_set(iaxs[x], mohsuggest, mohsuggest);
1919 ast_string_field_set(iaxs[x], parkinglot, default_parkinglot);
1921 if (iaxs[x]->peercallno) {
1922 store_by_peercallno(iaxs[x]);
1925 ast_log(LOG_WARNING, "Out of resources\n");
1926 ast_mutex_unlock(&iaxsl[x]);
1930 ast_mutex_unlock(&iaxsl[x]);
1936 static int find_callno(unsigned short callno, unsigned short dcallno, struct sockaddr_in *sin, int new, int sockfd, int full_frame) {
1938 return __find_callno(callno, dcallno, sin, new, sockfd, 0, full_frame);
1941 static int find_callno_locked(unsigned short callno, unsigned short dcallno, struct sockaddr_in *sin, int new, int sockfd, int full_frame) {
1943 return __find_callno(callno, dcallno, sin, new, sockfd, 1, full_frame);
1947 * \brief Queue a frame to a call's owning asterisk channel
1949 * \pre This function assumes that iaxsl[callno] is locked when called.
1951 * \note IMPORTANT NOTE!!! Any time this function is used, even if iaxs[callno]
1952 * was valid before calling it, it may no longer be valid after calling it.
1953 * This function may unlock and lock the mutex associated with this callno,
1954 * meaning that another thread may grab it and destroy the call.
1956 static int iax2_queue_frame(int callno, struct ast_frame *f)
1959 if (iaxs[callno] && iaxs[callno]->owner) {
1960 if (ast_channel_trylock(iaxs[callno]->owner)) {
1961 /* Avoid deadlock by pausing and trying again */
1962 DEADLOCK_AVOIDANCE(&iaxsl[callno]);
1964 ast_queue_frame(iaxs[callno]->owner, f);
1965 ast_channel_unlock(iaxs[callno]->owner);
1975 * \brief Queue a hangup frame on the ast_channel owner
1977 * This function queues a hangup frame on the owner of the IAX2 pvt struct that
1978 * is active for the given call number.
1980 * \pre Assumes lock for callno is already held.
1982 * \note IMPORTANT NOTE!!! Any time this function is used, even if iaxs[callno]
1983 * was valid before calling it, it may no longer be valid after calling it.
1984 * This function may unlock and lock the mutex associated with this callno,
1985 * meaning that another thread may grab it and destroy the call.
1987 static int iax2_queue_hangup(int callno)
1990 if (iaxs[callno] && iaxs[callno]->owner) {
1991 if (ast_channel_trylock(iaxs[callno]->owner)) {
1992 /* Avoid deadlock by pausing and trying again */
1993 DEADLOCK_AVOIDANCE(&iaxsl[callno]);
1995 ast_queue_hangup(iaxs[callno]->owner);
1996 ast_channel_unlock(iaxs[callno]->owner);
2006 * \brief Queue a control frame on the ast_channel owner
2008 * This function queues a control frame on the owner of the IAX2 pvt struct that
2009 * is active for the given call number.
2011 * \pre Assumes lock for callno is already held.
2013 * \note IMPORTANT NOTE!!! Any time this function is used, even if iaxs[callno]
2014 * was valid before calling it, it may no longer be valid after calling it.
2015 * This function may unlock and lock the mutex associated with this callno,
2016 * meaning that another thread may grab it and destroy the call.
2018 static int iax2_queue_control_data(int callno,
2019 enum ast_control_frame_type control, const void *data, size_t datalen)
2022 if (iaxs[callno] && iaxs[callno]->owner) {
2023 if (ast_channel_trylock(iaxs[callno]->owner)) {
2024 /* Avoid deadlock by pausing and trying again */
2025 DEADLOCK_AVOIDANCE(&iaxsl[callno]);
2027 ast_queue_control_data(iaxs[callno]->owner, control, data, datalen);
2028 ast_channel_unlock(iaxs[callno]->owner);
2036 static void destroy_firmware(struct iax_firmware *cur)
2038 /* Close firmware */
2040 munmap((void*)cur->fwh, ntohl(cur->fwh->datalen) + sizeof(*(cur->fwh)));
2046 static int try_firmware(char *s)
2049 struct iax_firmware *cur = NULL;
2050 int ifd, fd, res, len, chunk;
2051 struct ast_iax2_firmware_header *fwh, fwh2;
2052 struct MD5Context md5;
2053 unsigned char sum[16], buf[1024];
2056 if (!(s2 = alloca(strlen(s) + 100))) {
2057 ast_log(LOG_WARNING, "Alloca failed!\n");
2061 last = strrchr(s, '/');
2067 snprintf(s2, strlen(s) + 100, "/var/tmp/%s-%ld", last, (unsigned long)ast_random());
2069 if ((res = stat(s, &stbuf) < 0)) {
2070 ast_log(LOG_WARNING, "Failed to stat '%s': %s\n", s, strerror(errno));
2074 /* Make sure it's not a directory */
2075 if (S_ISDIR(stbuf.st_mode))
2077 ifd = open(s, O_RDONLY);
2079 ast_log(LOG_WARNING, "Cannot open '%s': %s\n", s, strerror(errno));
2082 fd = open(s2, O_RDWR | O_CREAT | O_EXCL, AST_FILE_MODE);
2084 ast_log(LOG_WARNING, "Cannot open '%s' for writing: %s\n", s2, strerror(errno));
2088 /* Unlink our newly created file */
2091 /* Now copy the firmware into it */
2092 len = stbuf.st_size;
2095 if (chunk > sizeof(buf))
2096 chunk = sizeof(buf);
2097 res = read(ifd, buf, chunk);
2099 ast_log(LOG_WARNING, "Only read %d of %d bytes of data :(: %s\n", res, chunk, strerror(errno));
2104 res = write(fd, buf, chunk);
2106 ast_log(LOG_WARNING, "Only write %d of %d bytes of data :(: %s\n", res, chunk, strerror(errno));
2114 /* Return to the beginning */
2115 lseek(fd, 0, SEEK_SET);
2116 if ((res = read(fd, &fwh2, sizeof(fwh2))) != sizeof(fwh2)) {
2117 ast_log(LOG_WARNING, "Unable to read firmware header in '%s'\n", s);
2121 if (ntohl(fwh2.magic) != IAX_FIRMWARE_MAGIC) {
2122 ast_log(LOG_WARNING, "'%s' is not a valid firmware file\n", s);
2126 if (ntohl(fwh2.datalen) != (stbuf.st_size - sizeof(fwh2))) {
2127 ast_log(LOG_WARNING, "Invalid data length in firmware '%s'\n", s);
2131 if (fwh2.devname[sizeof(fwh2.devname) - 1] || ast_strlen_zero((char *)fwh2.devname)) {
2132 ast_log(LOG_WARNING, "No or invalid device type specified for '%s'\n", s);
2136 fwh = (struct ast_iax2_firmware_header*)mmap(NULL, stbuf.st_size, PROT_READ, MAP_PRIVATE, fd, 0);
2137 if (fwh == (void *) -1) {
2138 ast_log(LOG_WARNING, "mmap failed: %s\n", strerror(errno));
2143 MD5Update(&md5, fwh->data, ntohl(fwh->datalen));
2144 MD5Final(sum, &md5);
2145 if (memcmp(sum, fwh->chksum, sizeof(sum))) {
2146 ast_log(LOG_WARNING, "Firmware file '%s' fails checksum\n", s);
2147 munmap((void*)fwh, stbuf.st_size);
2152 AST_LIST_TRAVERSE(&firmwares, cur, list) {
2153 if (!strcmp((char *)cur->fwh->devname, (char *)fwh->devname)) {
2154 /* Found a candidate */
2155 if (cur->dead || (ntohs(cur->fwh->version) < ntohs(fwh->version)))
2156 /* The version we have on loaded is older, load this one instead */
2158 /* This version is no newer than what we have. Don't worry about it.
2159 We'll consider it a proper load anyhow though */
2160 munmap((void*)fwh, stbuf.st_size);
2166 if (!cur && ((cur = ast_calloc(1, sizeof(*cur))))) {
2168 AST_LIST_INSERT_TAIL(&firmwares, cur, list);
2173 munmap((void*)cur->fwh, cur->mmaplen);
2178 cur->mmaplen = stbuf.st_size;
2185 static int iax_check_version(char *dev)
2188 struct iax_firmware *cur = NULL;
2190 if (ast_strlen_zero(dev))
2193 AST_LIST_LOCK(&firmwares);
2194 AST_LIST_TRAVERSE(&firmwares, cur, list) {
2195 if (!strcmp(dev, (char *)cur->fwh->devname)) {
2196 res = ntohs(cur->fwh->version);
2200 AST_LIST_UNLOCK(&firmwares);
2205 static int iax_firmware_append(struct iax_ie_data *ied, const unsigned char *dev, unsigned int desc)
2208 unsigned int bs = desc & 0xff;
2209 unsigned int start = (desc >> 8) & 0xffffff;
2211 struct iax_firmware *cur;
2213 if (ast_strlen_zero((char *)dev) || !bs)
2218 AST_LIST_LOCK(&firmwares);
2219 AST_LIST_TRAVERSE(&firmwares, cur, list) {
2220 if (strcmp((char *)dev, (char *)cur->fwh->devname))
2222 iax_ie_append_int(ied, IAX_IE_FWBLOCKDESC, desc);
2223 if (start < ntohl(cur->fwh->datalen)) {
2224 bytes = ntohl(cur->fwh->datalen) - start;
2227 iax_ie_append_raw(ied, IAX_IE_FWBLOCKDATA, cur->fwh->data + start, bytes);
2230 iax_ie_append(ied, IAX_IE_FWBLOCKDATA);
2238 AST_LIST_UNLOCK(&firmwares);
2244 static void reload_firmware(int unload)
2246 struct iax_firmware *cur = NULL;
2249 char dir[256], fn[256];
2251 AST_LIST_LOCK(&firmwares);
2253 /* Mark all as dead */
2254 AST_LIST_TRAVERSE(&firmwares, cur, list)
2257 /* Now that we have marked them dead... load new ones */
2259 snprintf(dir, sizeof(dir), "%s/firmware/iax", ast_config_AST_DATA_DIR);
2262 while((de = readdir(fwd))) {
2263 if (de->d_name[0] != '.') {
2264 snprintf(fn, sizeof(fn), "%s/%s", dir, de->d_name);
2265 if (!try_firmware(fn)) {
2266 ast_verb(2, "Loaded firmware '%s'\n", de->d_name);
2272 ast_log(LOG_WARNING, "Error opening firmware directory '%s': %s\n", dir, strerror(errno));
2275 /* Clean up leftovers */
2276 AST_LIST_TRAVERSE_SAFE_BEGIN(&firmwares, cur, list) {
2279 AST_LIST_REMOVE_CURRENT(list);
2280 destroy_firmware(cur);
2282 AST_LIST_TRAVERSE_SAFE_END;
2284 AST_LIST_UNLOCK(&firmwares);
2288 * \note This function assumes that iaxsl[callno] is locked when called.
2290 * \note IMPORTANT NOTE!!! Any time this function is used, even if iaxs[callno]
2291 * was valid before calling it, it may no longer be valid after calling it.
2292 * This function calls iax2_queue_frame(), which may unlock and lock the mutex
2293 * associated with this callno, meaning that another thread may grab it and destroy the call.
2295 static int __do_deliver(void *data)
2297 /* Just deliver the packet by using queueing. This is called by
2298 the IAX thread with the iaxsl lock held. */
2299 struct iax_frame *fr = data;
2301 ast_clear_flag(&fr->af, AST_FRFLAG_HAS_TIMING_INFO);
2302 if (iaxs[fr->callno] && !ast_test_flag(iaxs[fr->callno], IAX_ALREADYGONE))
2303 iax2_queue_frame(fr->callno, &fr->af);
2304 /* Free our iax frame */
2305 iax2_frame_free(fr);
2306 /* And don't run again */
2310 static int handle_error(void)
2312 /* XXX Ideally we should figure out why an error occurred and then abort those
2313 rather than continuing to try. Unfortunately, the published interface does
2314 not seem to work XXX */
2316 struct sockaddr_in *sin;
2319 struct sock_extended_err e;
2324 m.msg_controllen = sizeof(e);
2326 res = recvmsg(netsocket, &m, MSG_ERRQUEUE);
2328 ast_log(LOG_WARNING, "Error detected, but unable to read error: %s\n", strerror(errno));
2330 if (m.msg_controllen) {
2331 sin = (struct sockaddr_in *)SO_EE_OFFENDER(&e);
2333 ast_log(LOG_WARNING, "Receive error from %s\n", ast_inet_ntoa(sin->sin_addr));
2335 ast_log(LOG_WARNING, "No address detected??\n");
2337 ast_log(LOG_WARNING, "Local error: %s\n", strerror(e.ee_errno));
2344 static int transmit_trunk(struct iax_frame *f, struct sockaddr_in *sin, int sockfd)
2347 res = sendto(sockfd, f->data, f->datalen, 0,(struct sockaddr *)sin,
2350 ast_debug(1, "Received error: %s\n", strerror(errno));
2357 static int send_packet(struct iax_frame *f)
2360 int callno = f->callno;
2361 struct sockaddr_in *addr;
2363 /* Don't send if there was an error, but return error instead */
2364 if (!callno || !iaxs[callno] || iaxs[callno]->error)
2367 /* Called with iaxsl held */
2369 ast_debug(3, "Sending %d on %d/%d to %s:%d\n", f->ts, callno, iaxs[callno]->peercallno, ast_inet_ntoa(iaxs[callno]->addr.sin_addr), ntohs(iaxs[callno]->addr.sin_port));
2372 addr = &iaxs[callno]->media;
2373 } else if (f->transfer) {
2374 addr = &iaxs[callno]->transfer;
2376 addr = &iaxs[callno]->addr;
2379 iax_outputframe(f, NULL, 0, addr, f->datalen - sizeof(struct ast_iax2_full_hdr));
2381 res = sendto(iaxs[callno]->sockfd, f->data, f->datalen, 0,(struct sockaddr *)addr,
2382 sizeof(iaxs[callno]->media));
2386 ast_debug(1, "Received error: %s\n", strerror(errno));
2395 * \note Since this function calls iax2_queue_hangup(), the pvt struct
2396 * for the given call number may disappear during its execution.
2398 static int iax2_predestroy(int callno)
2400 struct ast_channel *c = NULL;
2401 struct chan_iax2_pvt *pvt = iaxs[callno];
2406 if (!ast_test_flag(pvt, IAX_ALREADYGONE)) {
2407 iax2_destroy_helper(pvt);
2408 ast_set_flag(pvt, IAX_ALREADYGONE);
2411 if ((c = pvt->owner)) {
2413 iax2_queue_hangup(callno);
2415 ast_module_unref(ast_module_info->self);
2421 static void iax2_destroy(int callno)
2423 struct chan_iax2_pvt *pvt = NULL;
2424 struct ast_channel *owner = NULL;
2427 if ((pvt = iaxs[callno])) {
2428 iax2_destroy_helper(pvt);
2431 lastused[callno] = ast_tvnow();
2433 owner = pvt ? pvt->owner : NULL;
2436 if (ast_channel_trylock(owner)) {
2437 ast_debug(3, "Avoiding IAX destroy deadlock\n");
2438 DEADLOCK_AVOIDANCE(&iaxsl[callno]);
2444 iaxs[callno] = NULL;
2451 /* If there's an owner, prod it to give up */
2452 /* It is ok to use ast_queue_hangup() here instead of iax2_queue_hangup()
2453 * because we already hold the owner channel lock. */
2454 ast_queue_hangup(owner);
2457 if (pvt->peercallno) {
2458 remove_by_peercallno(pvt);
2468 ast_channel_unlock(owner);
2471 if (callno & 0x4000) {
2476 static int update_packet(struct iax_frame *f)
2478 /* Called with iaxsl lock held, and iaxs[callno] non-NULL */
2479 struct ast_iax2_full_hdr *fh = f->data;
2480 /* Mark this as a retransmission */
2481 fh->dcallno = ntohs(IAX_FLAG_RETRANS | f->dcallno);
2483 f->iseqno = iaxs[f->callno]->iseqno;
2484 fh->iseqno = f->iseqno;
2488 static int attempt_transmit(const void *data);
2489 static void __attempt_transmit(const void *data)
2491 /* Attempt to transmit the frame to the remote peer...
2492 Called without iaxsl held. */
2493 struct iax_frame *f = (struct iax_frame *)data;
2495 int callno = f->callno;
2496 /* Make sure this call is still active */
2498 ast_mutex_lock(&iaxsl[callno]);
2499 if (callno && iaxs[callno]) {
2500 if ((f->retries < 0) /* Already ACK'd */ ||
2501 (f->retries >= max_retries) /* Too many attempts */) {
2502 /* Record an error if we've transmitted too many times */
2503 if (f->retries >= max_retries) {
2505 /* Transfer timeout */
2506 struct iax_ie_data ied;
2507 memset(&ied, 0, sizeof(ied));
2508 iax_ie_append_int(&ied, IAX_IE_TRANSFERID, iaxs[callno]->transferid);
2509 if (iaxs[callno]->mediareleased) {
2510 send_command_media(iaxs[callno], AST_FRAME_IAX, IAX_COMMAND_TXREJ, 0, ied.buf, ied.pos);
2512 send_command(iaxs[callno], AST_FRAME_IAX, IAX_COMMAND_TXREJ, 0, ied.buf, ied.pos, -1);
2514 } else if (f->final) {
2515 iax2_destroy(callno);
2517 if (iaxs[callno]->owner)
2518 ast_log(LOG_WARNING, "Max retries exceeded to host %s on %s (type = %d, subclass = %d, ts=%d, seqno=%d)\n", ast_inet_ntoa(iaxs[f->callno]->addr.sin_addr),iaxs[f->callno]->owner->name , f->af.frametype, f->af.subclass, f->ts, f->oseqno);
2519 iaxs[callno]->error = ETIMEDOUT;
2520 if (iaxs[callno]->owner) {
2521 struct ast_frame fr = { AST_FRAME_CONTROL, AST_CONTROL_HANGUP, .data.uint32 = AST_CAUSE_DESTINATION_OUT_OF_ORDER };
2523 iax2_queue_frame(callno, &fr); /* XXX */
2524 /* Remember, owner could disappear */
2525 if (iaxs[callno] && iaxs[callno]->owner)
2526 iaxs[callno]->owner->hangupcause = AST_CAUSE_DESTINATION_OUT_OF_ORDER;
2528 if (iaxs[callno]->reg) {
2529 memset(&iaxs[callno]->reg->us, 0, sizeof(iaxs[callno]->reg->us));
2530 iaxs[callno]->reg->regstate = REG_STATE_TIMEOUT;
2531 iaxs[callno]->reg->refresh = IAX_DEFAULT_REG_EXPIRE;
2533 iax2_destroy(callno);
2540 /* Update it if it needs it */
2542 /* Attempt transmission */
2545 /* Try again later after 10 times as long */
2547 if (f->retrytime > MAX_RETRY_TIME)
2548 f->retrytime = MAX_RETRY_TIME;
2549 /* Transfer messages max out at one second */
2550 if (f->transfer && (f->retrytime > 1000))
2551 f->retrytime = 1000;
2552 f->retrans = iax2_sched_add(sched, f->retrytime, attempt_transmit, f);
2555 /* Make sure it gets freed */
2560 ast_mutex_unlock(&iaxsl[callno]);
2561 /* Do not try again */
2563 /* Don't attempt delivery, just remove it from the queue */
2564 AST_LIST_LOCK(&frame_queue);
2565 AST_LIST_REMOVE(&frame_queue, f, list);
2566 AST_LIST_UNLOCK(&frame_queue);
2568 /* Free the IAX frame */
2573 static int attempt_transmit(const void *data)
2575 #ifdef SCHED_MULTITHREADED
2576 if (schedule_action(__attempt_transmit, data))
2578 __attempt_transmit(data);
2582 static char *handle_cli_iax2_prune_realtime(struct ast_cli_entry *e, int cmd, struct ast_cli_args *a)
2584 struct iax2_peer *peer;
2585 static char *choices[] = { "all", NULL };
2590 e->command = "iax2 prune realtime";
2592 "Usage: iax2 prune realtime [<peername>|all]\n"
2593 " Prunes object(s) from the cache\n";
2597 cmplt = ast_cli_complete(a->word, choices, a->n);
2599 cmplt = complete_iax2_peers(a->line, a->word, a->pos, a->n - sizeof(choices), IAX_RTCACHEFRIENDS);
2606 return CLI_SHOWUSAGE;
2607 if (!strcmp(a->argv[3], "all")) {
2609 ast_cli(a->fd, "Cache flushed successfully.\n");
2610 } else if ((peer = find_peer(a->argv[3], 0))) {
2611 if (ast_test_flag(peer, IAX_RTCACHEFRIENDS)) {
2612 ast_set_flag(peer, IAX_RTAUTOCLEAR);
2613 expire_registry(peer_ref(peer));
2614 ast_cli(a->fd, "Peer %s was removed from the cache.\n", a->argv[3]);
2616 ast_cli(a->fd, "Peer %s is not eligible for this operation.\n", a->argv[3]);
2620 ast_cli(a->fd, "Peer %s was not found in the cache.\n", a->argv[3]);
2626 static char *handle_cli_iax2_test_losspct(struct ast_cli_entry *e, int cmd, struct ast_cli_args *a)
2630 e->command = "iax2 test losspct";
2632 "Usage: iax2 test losspct <percentage>\n"
2633 " For testing, throws away <percentage> percent of incoming packets\n";
2639 return CLI_SHOWUSAGE;
2641 test_losspct = atoi(a->argv[3]);
2647 static char *handle_cli_iax2_test_late(struct ast_cli_entry *e, int cmd, struct ast_cli_args *a)
2651 e->command = "iax2 test late";
2653 "Usage: iax2 test late <ms>\n"
2654 " For testing, count the next frame as <ms> ms late\n";
2661 return CLI_SHOWUSAGE;
2663 test_late = atoi(a->argv[3]);
2668 static char *handle_cli_iax2_test_resync(struct ast_cli_entry *e, int cmd, struct ast_cli_args *a)
2672 e->command = "iax2 test resync";
2674 "Usage: iax2 test resync <ms>\n"
2675 " For testing, adjust all future frames by <ms> ms\n";
2682 return CLI_SHOWUSAGE;
2684 test_resync = atoi(a->argv[3]);
2689 static char *handle_cli_iax2_test_jitter(struct ast_cli_entry *e, int cmd, struct ast_cli_args *a)
2693 e->command = "iax2 test jitter";
2695 "Usage: iax2 test jitter <ms> <pct>\n"
2696 " For testing, simulate maximum jitter of +/- <ms> on <pct>\n"
2697 " percentage of packets. If <pct> is not specified, adds\n"
2698 " jitter to all packets.\n";
2704 if (a->argc < 4 || a->argc > 5)
2705 return CLI_SHOWUSAGE;
2707 test_jit = atoi(a->argv[3]);
2709 test_jitpct = atoi(a->argv[4]);
2713 #endif /* IAXTESTS */
2715 /*! \brief peer_status: Report Peer status in character string */
2716 /* returns 1 if peer is online, -1 if unmonitored */
2717 static int peer_status(struct iax2_peer *peer, char *status, int statuslen)
2721 if (peer->lastms < 0) {
2722 ast_copy_string(status, "UNREACHABLE", statuslen);
2723 } else if (peer->lastms > peer->maxms) {
2724 snprintf(status, statuslen, "LAGGED (%d ms)", peer->lastms);
2726 } else if (peer->lastms) {
2727 snprintf(status, statuslen, "OK (%d ms)", peer->lastms);
2730 ast_copy_string(status, "UNKNOWN", statuslen);
2733 ast_copy_string(status, "Unmonitored", statuslen);
2739 /*! \brief Show one peer in detail */
2740 static char *handle_cli_iax2_show_peer(struct ast_cli_entry *e, int cmd, struct ast_cli_args *a)
2744 struct iax2_peer *peer;
2745 char codec_buf[512];
2746 int x = 0, codec = 0, load_realtime = 0;
2750 e->command = "iax2 show peer";
2752 "Usage: iax2 show peer <name>\n"
2753 " Display details on specific IAX peer\n";
2757 return complete_iax2_peers(a->line, a->word, a->pos, a->n, 0);
2762 return CLI_SHOWUSAGE;
2764 load_realtime = (a->argc == 5 && !strcmp(a->argv[4], "load")) ? 1 : 0;
2766 peer = find_peer(a->argv[3], load_realtime);
2768 ast_cli(a->fd, "\n\n");
2769 ast_cli(a->fd, " * Name : %s\n", peer->name);
2770 ast_cli(a->fd, " Secret : %s\n", ast_strlen_zero(peer->secret) ? "<Not set>" : "<Set>");
2771 ast_cli(a->fd, " Context : %s\n", peer->context);
2772 ast_cli(a->fd, " Parking lot : %s\n", peer->parkinglot);
2773 ast_cli(a->fd, " Mailbox : %s\n", peer->mailbox);
2774 ast_cli(a->fd, " Dynamic : %s\n", ast_test_flag(peer, IAX_DYNAMIC) ? "Yes" : "No");
2775 ast_cli(a->fd, " Callerid : %s\n", ast_callerid_merge(cbuf, sizeof(cbuf), peer->cid_name, peer->cid_num, "<unspecified>"));
2776 ast_cli(a->fd, " Expire : %d\n", peer->expire);
2777 ast_cli(a->fd, " ACL : %s\n", (peer->ha ? "Yes" : "No"));
2778 ast_cli(a->fd, " Addr->IP : %s Port %d\n", peer->addr.sin_addr.s_addr ? ast_inet_ntoa(peer->addr.sin_addr) : "(Unspecified)", ntohs(peer->addr.sin_port));
2779 ast_cli(a->fd, " Defaddr->IP : %s Port %d\n", ast_inet_ntoa(peer->defaddr.sin_addr), ntohs(peer->defaddr.sin_port));
2780 ast_cli(a->fd, " Username : %s\n", peer->username);
2781 ast_cli(a->fd, " Codecs : ");
2782 ast_getformatname_multiple(codec_buf, sizeof(codec_buf) -1, peer->capability);
2783 ast_cli(a->fd, "%s\n", codec_buf);
2785 ast_cli(a->fd, " Codec Order : (");
2786 for(x = 0; x < 32 ; x++) {
2787 codec = ast_codec_pref_index(&peer->prefs,x);
2790 ast_cli(a->fd, "%s", ast_getformatname(codec));
2791 if(x < 31 && ast_codec_pref_index(&peer->prefs,x+1))
2792 ast_cli(a->fd, "|");
2796 ast_cli(a->fd, "none");
2797 ast_cli(a->fd, ")\n");
2799 ast_cli(a->fd, " Status : ");
2800 peer_status(peer, status, sizeof(status));
2801 ast_cli(a->fd, "%s\n",status);
2802 ast_cli(a->fd, " Qualify : every %dms when OK, every %dms when UNREACHABLE (sample smoothing %s)\n", peer->pokefreqok, peer->pokefreqnotok, peer->smoothing ? "On" : "Off");
2803 ast_cli(a->fd, "\n");
2806 ast_cli(a->fd, "Peer %s not found.\n", a->argv[3]);
2807 ast_cli(a->fd, "\n");
2813 static char *complete_iax2_peers(const char *line, const char *word, int pos, int state, int flags)
2816 struct iax2_peer *peer;
2818 int wordlen = strlen(word);
2819 struct ao2_iterator i;
2821 i = ao2_iterator_init(peers, 0);
2822 while ((peer = ao2_iterator_next(&i))) {
2823 if (!strncasecmp(peer->name, word, wordlen) && ++which > state
2824 && (!flags || ast_test_flag(peer, flags))) {
2825 res = ast_strdup(peer->name);
2835 static char *handle_cli_iax2_show_stats(struct ast_cli_entry *e, int cmd, struct ast_cli_args *a)
2837 struct iax_frame *cur;
2838 int cnt = 0, dead = 0, final = 0;
2842 e->command = "iax2 show stats";
2844 "Usage: iax2 show stats\n"
2845 " Display statistics on IAX channel driver.\n";
2852 return CLI_SHOWUSAGE;
2854 AST_LIST_LOCK(&frame_queue);
2855 AST_LIST_TRAVERSE(&frame_queue, cur, list) {
2856 if (cur->retries < 0)
2862 AST_LIST_UNLOCK(&frame_queue);
2864 ast_cli(a->fd, " IAX Statistics\n");
2865 ast_cli(a->fd, "---------------------\n");
2866 ast_cli(a->fd, "Outstanding frames: %d (%d ingress, %d egress)\n", iax_get_frames(), iax_get_iframes(), iax_get_oframes());
2867 ast_cli(a->fd, "%d timed and %d untimed transmits; MTU %d/%d/%d\n", trunk_timed, trunk_untimed,
2868 trunk_maxmtu, trunk_nmaxmtu, global_max_trunk_mtu);
2869 ast_cli(a->fd, "Packets in transmit queue: %d dead, %d final, %d total\n\n", dead, final, cnt);
2871 trunk_timed = trunk_untimed = 0;
2872 if (trunk_maxmtu > trunk_nmaxmtu)
2873 trunk_nmaxmtu = trunk_maxmtu;
2878 /*! \brief Set trunk MTU from CLI */
2879 static char *handle_cli_iax2_set_mtu(struct ast_cli_entry *e, int cmd, struct ast_cli_args *a)
2885 e->command = "iax2 set mtu";
2887 "Usage: iax2 set mtu <value>\n"
2888 " Set the system-wide IAX IP mtu to <value> bytes net or\n"
2889 " zero to disable. Disabling means that the operating system\n"
2890 " must handle fragmentation of UDP packets when the IAX2 trunk\n"
2891 " packet exceeds the UDP payload size. This is substantially\n"
2892 " below the IP mtu. Try 1240 on ethernets. Must be 172 or\n"
2893 " greater for G.711 samples.\n";
2900 return CLI_SHOWUSAGE;
2901 if (strncasecmp(a->argv[3], "default", strlen(a->argv[3])) == 0)
2902 mtuv = MAX_TRUNK_MTU;
2904 mtuv = atoi(a->argv[3]);
2907 ast_cli(a->fd, "Trunk MTU control disabled (mtu was %d)\n", global_max_trunk_mtu);
2908 global_max_trunk_mtu = 0;
2911 if (mtuv < 172 || mtuv > 4000) {
2912 ast_cli(a->fd, "Trunk MTU must be between 172 and 4000\n");
2913 return CLI_SHOWUSAGE;
2915 ast_cli(a->fd, "Trunk MTU changed from %d to %d\n", global_max_trunk_mtu, mtuv);
2916 global_max_trunk_mtu = mtuv;
2920 static char *handle_cli_iax2_show_cache(struct ast_cli_entry *e, int cmd, struct ast_cli_args *a)
2922 struct iax2_dpcache *dp = NULL;
2923 char tmp[1024], *pc = NULL;
2925 struct timeval now = ast_tvnow();
2929 e->command = "iax2 show cache";
2931 "Usage: iax2 show cache\n"
2932 " Display currently cached IAX Dialplan results.\n";
2938 AST_LIST_LOCK(&dpcache);
2940 ast_cli(a->fd, "%-20.20s %-12.12s %-9.9s %-8.8s %s\n", "Peer/Context", "Exten", "Exp.", "Wait.", "Flags");
2942 AST_LIST_TRAVERSE(&dpcache, dp, cache_list) {
2943 s = dp->expiry.tv_sec - now.tv_sec;
2945 if (dp->flags & CACHE_FLAG_EXISTS)
2946 strncat(tmp, "EXISTS|", sizeof(tmp) - strlen(tmp) - 1);
2947 if (dp->flags & CACHE_FLAG_NONEXISTENT)
2948 strncat(tmp, "NONEXISTENT|", sizeof(tmp) - strlen(tmp) - 1);
2949 if (dp->flags & CACHE_FLAG_CANEXIST)
2950 strncat(tmp, "CANEXIST|", sizeof(tmp) - strlen(tmp) - 1);
2951 if (dp->flags & CACHE_FLAG_PENDING)
2952 strncat(tmp, "PENDING|", sizeof(tmp) - strlen(tmp) - 1);
2953 if (dp->flags & CACHE_FLAG_TIMEOUT)
2954 strncat(tmp, "TIMEOUT|", sizeof(tmp) - strlen(tmp) - 1);
2955 if (dp->flags & CACHE_FLAG_TRANSMITTED)
2956 strncat(tmp, "TRANSMITTED|", sizeof(tmp) - strlen(tmp) - 1);
2957 if (dp->flags & CACHE_FLAG_MATCHMORE)
2958 strncat(tmp, "MATCHMORE|", sizeof(tmp) - strlen(tmp) - 1);
2959 if (dp->flags & CACHE_FLAG_UNKNOWN)
2960 strncat(tmp, "UNKNOWN|", sizeof(tmp) - strlen(tmp) - 1);
2961 /* Trim trailing pipe */
2962 if (!ast_strlen_zero(tmp)) {
2963 tmp[strlen(tmp) - 1] = '\0';
2965 ast_copy_string(tmp, "(none)", sizeof(tmp));
2968 pc = strchr(dp->peercontext, '@');
2970 pc = dp->peercontext;
2974 for (x = 0; x < ARRAY_LEN(dp->waiters); x++) {
2975 if (dp->waiters[x] > -1)
2979 ast_cli(a->fd, "%-20.20s %-12.12s %-9d %-8d %s\n", pc, dp->exten, s, y, tmp);
2981 ast_cli(a->fd, "%-20.20s %-12.12s %-9.9s %-8d %s\n", pc, dp->exten, "(expired)", y, tmp);
2985 AST_LIST_LOCK(&dpcache);
2990 static unsigned int calc_rxstamp(struct chan_iax2_pvt *p, unsigned int offset);
2992 static void unwrap_timestamp(struct iax_frame *fr)
2994 /* Video mini frames only encode the lower 15 bits of the session
2995 * timestamp, but other frame types (e.g. audio) encode 16 bits. */
2996 const int ts_shift = (fr->af.frametype == AST_FRAME_VIDEO) ? 15 : 16;
2997 const int lower_mask = (1 << ts_shift) - 1;
2998 const int upper_mask = ~lower_mask;
2999 const int last_upper = iaxs[fr->callno]->last & upper_mask;
3001 if ( (fr->ts & upper_mask) == last_upper ) {
3002 const int x = fr->ts - iaxs[fr->callno]->last;
3003 const int threshold = (ts_shift == 15) ? 25000 : 50000;
3005 if (x < -threshold) {
3006 /* Sudden big jump backwards in timestamp:
3007 What likely happened here is that miniframe timestamp has circled but we haven't
3008 gotten the update from the main packet. We'll just pretend that we did, and
3009 update the timestamp appropriately. */
3010 fr->ts = (last_upper + (1 << ts_shift)) | (fr->ts & lower_mask);
3012 ast_debug(1, "schedule_delivery: pushed forward timestamp\n");
3013 } else if (x > threshold) {
3014 /* Sudden apparent big jump forwards in timestamp:
3015 What's likely happened is this is an old miniframe belonging to the previous
3016 top 15 or 16-bit timestamp that has turned up out of order.
3017 Adjust the timestamp appropriately. */
3018 fr->ts = (last_upper - (1 << ts_shift)) | (fr->ts & lower_mask);
3020 ast_debug(1, "schedule_delivery: pushed back timestamp\n");
3025 static int get_from_jb(const void *p);
3027 static void update_jbsched(struct chan_iax2_pvt *pvt)
3031 when = ast_tvdiff_ms(ast_tvnow(), pvt->rxcore);
3033 when = jb_next(pvt->jb) - when;
3036 /* XXX should really just empty until when > 0.. */
3040 pvt->jbid = iax2_sched_replace(pvt->jbid, sched, when, get_from_jb,
3041 CALLNO_TO_PTR(pvt->callno));
3044 static void __get_from_jb(const void *p)
3046 int callno = PTR_TO_CALLNO(p);
3047 struct chan_iax2_pvt *pvt = NULL;
3048 struct iax_frame *fr;
3053 struct timeval now = ast_tvnow();
3055 /* Make sure we have a valid private structure before going on */
3056 ast_mutex_lock(&iaxsl[callno]);
3060 ast_mutex_unlock(&iaxsl[callno]);
3066 /* round up a millisecond since ast_sched_runq does; */
3067 /* prevents us from spinning while waiting for our now */
3068 /* to catch up with runq's now */
3069 now.tv_usec += 1000;
3071 ms = ast_tvdiff_ms(now, pvt->rxcore);
3073 if(ms >= (next = jb_next(pvt->jb))) {
3074 ret = jb_get(pvt->jb,&frame,ms,ast_codec_interp_len(pvt->voiceformat));
3079 /* __do_deliver() can cause the call to disappear */
3084 struct ast_frame af = { 0, };
3086 /* create an interpolation frame */
3087 af.frametype = AST_FRAME_VOICE;
3088 af.subclass = pvt->voiceformat;
3089 af.samples = frame.ms * 8;
3090 af.src = "IAX2 JB interpolation";
3091 af.delivery = ast_tvadd(pvt->rxcore, ast_samp2tv(next, 1000));
3092 af.offset = AST_FRIENDLY_OFFSET;
3094 /* queue the frame: For consistency, we would call __do_deliver here, but __do_deliver wants an iax_frame,
3095 * which we'd need to malloc, and then it would free it. That seems like a drag */
3096 if (!ast_test_flag(iaxs[callno], IAX_ALREADYGONE)) {
3097 iax2_queue_frame(callno, &af);
3098 /* iax2_queue_frame() could cause the call to disappear */
3104 iax2_frame_free(frame.data);
3111 /* shouldn't happen */
3116 update_jbsched(pvt);
3117 ast_mutex_unlock(&iaxsl[callno]);
3120 static int get_from_jb(const void *data)
3122 #ifdef SCHED_MULTITHREADED
3123 if (schedule_action(__get_from_jb, data))
3125 __get_from_jb(data);
3130 * \note This function assumes fr->callno is locked
3132 * \note IMPORTANT NOTE!!! Any time this function is used, even if iaxs[callno]
3133 * was valid before calling it, it may no longer be valid after calling it.
3135 static int schedule_delivery(struct iax_frame *fr, int updatehistory, int fromtrunk, unsigned int *tsout)
3140 struct ast_channel *owner = NULL;
3141 struct ast_channel *bridge = NULL;
3143 /* Attempt to recover wrapped timestamps */
3144 unwrap_timestamp(fr);
3146 /* delivery time is sender's sent timestamp converted back into absolute time according to our clock */
3147 if ( !fromtrunk && !ast_tvzero(iaxs[fr->callno]->rxcore))
3148 fr->af.delivery = ast_tvadd(iaxs[fr->callno]->rxcore, ast_samp2tv(fr->ts, 1000));
3151 ast_debug(1, "schedule_delivery: set delivery to 0 as we don't have an rxcore yet, or frame is from trunk.\n");
3153 fr->af.delivery = ast_tv(0,0);
3156 type = JB_TYPE_CONTROL;
3159 if(fr->af.frametype == AST_FRAME_VOICE) {
3160 type = JB_TYPE_VOICE;