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
37 ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
41 #include <sys/types.h>
44 #include <sys/socket.h>
45 #include <netinet/in.h>
46 #include <arpa/inet.h>
47 #include <netinet/in_systm.h>
48 #include <netinet/ip.h>
50 #include <sys/signal.h>
61 #include "asterisk/zapata.h"
63 #include "asterisk/lock.h"
64 #include "asterisk/frame.h"
65 #include "asterisk/channel.h"
66 #include "asterisk/logger.h"
67 #include "asterisk/module.h"
68 #include "asterisk/pbx.h"
69 #include "asterisk/sched.h"
70 #include "asterisk/io.h"
71 #include "asterisk/config.h"
72 #include "asterisk/options.h"
73 #include "asterisk/cli.h"
74 #include "asterisk/translate.h"
75 #include "asterisk/md5.h"
76 #include "asterisk/cdr.h"
77 #include "asterisk/crypto.h"
78 #include "asterisk/acl.h"
79 #include "asterisk/manager.h"
80 #include "asterisk/callerid.h"
81 #include "asterisk/app.h"
82 #include "asterisk/astdb.h"
83 #include "asterisk/musiconhold.h"
84 #include "asterisk/features.h"
85 #include "asterisk/utils.h"
86 #include "asterisk/causes.h"
87 #include "asterisk/localtime.h"
88 #include "asterisk/aes.h"
89 #include "asterisk/dnsmgr.h"
90 #include "asterisk/devicestate.h"
91 #include "asterisk/netsock.h"
92 #include "asterisk/stringfields.h"
93 #include "asterisk/linkedlists.h"
94 #include "asterisk/event.h"
97 #include "iax2-parser.h"
98 #include "iax2-provision.h"
99 #include "jitterbuf.h"
101 /* Define SCHED_MULTITHREADED to run the scheduler in a special
102 multithreaded mode. */
103 #define SCHED_MULTITHREADED
105 /* Define DEBUG_SCHED_MULTITHREADED to keep track of where each
106 thread is actually doing. */
107 #define DEBUG_SCHED_MULTITHREAD
109 #ifndef IPTOS_MINCOST
110 #define IPTOS_MINCOST 0x02
114 static int nochecksums = 0;
118 #define PTR_TO_CALLNO(a) ((unsigned short)(unsigned long)(a))
119 #define CALLNO_TO_PTR(a) ((void *)(unsigned long)(a))
121 #define DEFAULT_THREAD_COUNT 10
122 #define DEFAULT_MAX_THREAD_COUNT 100
123 #define DEFAULT_RETRY_TIME 1000
124 #define MEMORY_SIZE 100
125 #define DEFAULT_DROP 3
126 /* Flag to use with trunk calls, keeping these calls high up. It halves our effective use
127 but keeps the division between trunked and non-trunked better. */
128 #define TRUNK_CALL_START 0x4000
130 #define DEBUG_SUPPORT
132 #define MIN_REUSE_TIME 60 /* Don't reuse a call number within 60 seconds */
134 /* Sample over last 100 units to determine historic jitter */
137 static struct ast_codec_pref prefs;
139 static const char tdesc[] = "Inter Asterisk eXchange Driver (Ver 2)";
142 /*! \brief Maximum transmission unit for the UDP packet in the trunk not to be
143 fragmented. This is based on 1516 - ethernet - ip - udp - iax minus one g711 frame = 1240 */
144 #define MAX_TRUNK_MTU 1240
146 static int global_max_trunk_mtu; /*!< Maximum MTU, 0 if not used */
147 static int trunk_timed, trunk_untimed, trunk_maxmtu, trunk_nmaxmtu ; /*!< Trunk MTU statistics */
150 static char context[80] = "default";
152 static char language[MAX_LANGUAGE] = "";
153 static char regcontext[AST_MAX_CONTEXT] = "";
155 static int maxauthreq = 3;
156 static int max_retries = 4;
157 static int ping_time = 20;
158 static int lagrq_time = 10;
159 static int maxtrunkcall = TRUNK_CALL_START;
160 static int maxnontrunkcall = 1;
161 static int maxjitterbuffer=1000;
162 static int resyncthreshold=1000;
163 static int maxjitterinterps=10;
164 static int jittertargetextra = 40; /* number of milliseconds the new jitter buffer adds on to its size */
166 #define MAX_TRUNKDATA 640 * 200 /*!< 40ms, uncompressed linear * 200 channels */
168 static int trunkfreq = 20;
169 static int trunkmaxsize = MAX_TRUNKDATA;
171 static int authdebug = 1;
172 static int autokill = 0;
173 static int iaxcompat = 0;
175 static int iaxdefaultdpcache=10 * 60; /* Cache dialplan entries for 10 minutes by default */
177 static int iaxdefaulttimeout = 5; /* Default to wait no more than 5 seconds for a reply to come back */
179 static unsigned int tos = 0;
181 static unsigned int cos = 0;
183 static int min_reg_expire;
184 static int max_reg_expire;
186 static int srvlookup = 0;
188 static int timingfd = -1; /* Timing file descriptor */
190 static struct ast_netsock_list *netsock;
191 static struct ast_netsock_list *outsock; /*!< used if sourceaddress specified and bindaddr == INADDR_ANY */
192 static int defaultsockfd = -1;
194 int (*iax2_regfunk)(const char *username, int onoff) = NULL;
197 #define IAX_CAPABILITY_FULLBANDWIDTH 0xFFFF
199 #define IAX_CAPABILITY_MEDBANDWIDTH (IAX_CAPABILITY_FULLBANDWIDTH & \
200 ~AST_FORMAT_SLINEAR & \
205 #define IAX_CAPABILITY_LOWBANDWIDTH (IAX_CAPABILITY_MEDBANDWIDTH & \
207 ~AST_FORMAT_G726_AAL2 & \
210 #define IAX_CAPABILITY_LOWFREE (IAX_CAPABILITY_LOWBANDWIDTH & \
214 #define DEFAULT_MAXMS 2000 /* Must be faster than 2 seconds by default */
215 #define DEFAULT_FREQ_OK 60 * 1000 /* How often to check for the host to be up */
216 #define DEFAULT_FREQ_NOTOK 10 * 1000 /* How often to check, if the host is down... */
218 static struct io_context *io;
219 static struct sched_context *sched;
221 static int iax2_capability = IAX_CAPABILITY_FULLBANDWIDTH;
223 static int iaxdebug = 0;
225 static int iaxtrunkdebug = 0;
227 static int test_losspct = 0;
229 static int test_late = 0;
230 static int test_resync = 0;
231 static int test_jit = 0;
232 static int test_jitpct = 0;
233 #endif /* IAXTESTS */
235 static char accountcode[AST_MAX_ACCOUNT_CODE];
236 static char mohinterpret[MAX_MUSICCLASS];
237 static char mohsuggest[MAX_MUSICCLASS];
238 static int amaflags = 0;
240 static int delayreject = 0;
241 static int iax2_encryption = 0;
243 static struct ast_flags globalflags = { 0 };
245 static pthread_t netthreadid = AST_PTHREADT_NULL;
246 static pthread_t schedthreadid = AST_PTHREADT_NULL;
247 AST_MUTEX_DEFINE_STATIC(sched_lock);
248 static ast_cond_t sched_cond;
251 IAX_STATE_STARTED = (1 << 0),
252 IAX_STATE_AUTHENTICATED = (1 << 1),
253 IAX_STATE_TBD = (1 << 2),
254 IAX_STATE_UNCHANGED = (1 << 3),
257 struct iax2_context {
258 char context[AST_MAX_CONTEXT];
259 struct iax2_context *next;
263 IAX_HASCALLERID = (1 << 0), /*!< CallerID has been specified */
264 IAX_DELME = (1 << 1), /*!< Needs to be deleted */
265 IAX_TEMPONLY = (1 << 2), /*!< Temporary (realtime) */
266 IAX_TRUNK = (1 << 3), /*!< Treat as a trunk */
267 IAX_NOTRANSFER = (1 << 4), /*!< Don't native bridge */
268 IAX_USEJITTERBUF = (1 << 5), /*!< Use jitter buffer */
269 IAX_DYNAMIC = (1 << 6), /*!< dynamic peer */
270 IAX_SENDANI = (1 << 7), /*!< Send ANI along with CallerID */
271 /* (1 << 8) is currently unused due to the deprecation of an old option. Go ahead, take it! */
272 IAX_ALREADYGONE = (1 << 9), /*!< Already disconnected */
273 IAX_PROVISION = (1 << 10), /*!< This is a provisioning request */
274 IAX_QUELCH = (1 << 11), /*!< Whether or not we quelch audio */
275 IAX_ENCRYPTED = (1 << 12), /*!< Whether we should assume encrypted tx/rx */
276 IAX_KEYPOPULATED = (1 << 13), /*!< Whether we have a key populated */
277 IAX_CODEC_USER_FIRST = (1 << 14), /*!< are we willing to let the other guy choose the codec? */
278 IAX_CODEC_NOPREFS = (1 << 15), /*!< Force old behaviour by turning off prefs */
279 IAX_CODEC_NOCAP = (1 << 16), /*!< only consider requested format and ignore capabilities*/
280 IAX_RTCACHEFRIENDS = (1 << 17), /*!< let realtime stay till your reload */
281 IAX_RTUPDATE = (1 << 18), /*!< Send a realtime update */
282 IAX_RTAUTOCLEAR = (1 << 19), /*!< erase me on expire */
283 IAX_FORCEJITTERBUF = (1 << 20), /*!< Force jitterbuffer, even when bridged to a channel that can take jitter */
284 IAX_RTIGNOREREGEXPIRE = (1 << 21), /*!< When using realtime, ignore registration expiration */
285 IAX_TRUNKTIMESTAMPS = (1 << 22), /*!< Send trunk timestamps */
286 IAX_TRANSFERMEDIA = (1 << 23), /*!< When doing IAX2 transfers, transfer media only */
287 IAX_MAXAUTHREQ = (1 << 24), /*!< Maximum outstanding AUTHREQ restriction is in place */
288 IAX_DELAYPBXSTART = (1 << 25), /*!< Don't start a PBX on the channel until the peer sends us a
289 response, so that we've achieved a three-way handshake with
290 them before sending voice or anything else*/
293 static int global_rtautoclear = 120;
295 static int reload_config(void);
296 static int iax2_reload(int fd, int argc, char *argv[]);
300 AST_DECLARE_STRING_FIELDS(
301 AST_STRING_FIELD(name);
302 AST_STRING_FIELD(secret);
303 AST_STRING_FIELD(dbsecret);
304 AST_STRING_FIELD(accountcode);
305 AST_STRING_FIELD(mohinterpret);
306 AST_STRING_FIELD(mohsuggest);
307 AST_STRING_FIELD(inkeys); /*!< Key(s) this user can use to authenticate to us */
308 AST_STRING_FIELD(language);
309 AST_STRING_FIELD(cid_num);
310 AST_STRING_FIELD(cid_name);
319 int maxauthreq; /*!< Maximum allowed outstanding AUTHREQs */
320 int curauthreq; /*!< Current number of outstanding AUTHREQs */
321 struct ast_codec_pref prefs;
323 struct iax2_context *contexts;
324 struct ast_variable *vars;
325 AST_LIST_ENTRY(iax2_user) entry;
329 AST_DECLARE_STRING_FIELDS(
330 AST_STRING_FIELD(name);
331 AST_STRING_FIELD(username);
332 AST_STRING_FIELD(secret);
333 AST_STRING_FIELD(dbsecret);
334 AST_STRING_FIELD(outkey); /*!< What key we use to talk to this peer */
336 AST_STRING_FIELD(regexten); /*!< Extension to register (if regcontext is used) */
337 AST_STRING_FIELD(context); /*!< For transfers only */
338 AST_STRING_FIELD(peercontext); /*!< Context to pass to peer */
339 AST_STRING_FIELD(mailbox); /*!< Mailbox */
340 AST_STRING_FIELD(mohinterpret);
341 AST_STRING_FIELD(mohsuggest);
342 AST_STRING_FIELD(inkeys); /*!< Key(s) this peer can use to authenticate to us */
343 /* Suggested caller id if registering */
344 AST_STRING_FIELD(cid_num); /*!< Default context (for transfer really) */
345 AST_STRING_FIELD(cid_name); /*!< Default context (for transfer really) */
346 AST_STRING_FIELD(zonetag); /*!< Time Zone */
348 struct ast_codec_pref prefs;
349 struct ast_dnsmgr_entry *dnsmgr; /*!< DNS refresh manager */
350 struct sockaddr_in addr;
352 int sockfd; /*!< Socket to use for transmission */
357 /* Dynamic Registration fields */
358 struct sockaddr_in defaddr; /*!< Default address if there is one */
359 int authmethods; /*!< Authentication methods (IAX_AUTH_*) */
360 int encmethods; /*!< Encryption methods (IAX_ENCRYPT_*) */
362 int expire; /*!< Schedule entry for expiry */
363 int expiry; /*!< How soon to expire */
364 int capability; /*!< Capability */
367 int callno; /*!< Call number of POKE request */
368 int pokeexpire; /*!< Scheduled qualification-related task (ie iax2_poke_peer_s or iax2_poke_noanswer) */
369 int lastms; /*!< How long last response took (in ms), or -1 for no response */
370 int maxms; /*!< Max ms we will accept for the host to be up, 0 to not monitor */
372 int pokefreqok; /*!< How often to check if the host is up */
373 int pokefreqnotok; /*!< How often to check when the host has been determined to be down */
374 int historicms; /*!< How long recent average responses took */
375 int smoothing; /*!< Sample over how many units to determine historic ms */
377 struct ast_event_sub *mwi_event_sub;
380 AST_LIST_ENTRY(iax2_peer) entry;
383 #define IAX2_TRUNK_PREFACE (sizeof(struct iax_frame) + sizeof(struct ast_iax2_meta_hdr) + sizeof(struct ast_iax2_meta_trunk_hdr))
385 struct iax2_trunk_peer {
388 struct sockaddr_in addr;
389 struct timeval txtrunktime; /*!< Transmit trunktime */
390 struct timeval rxtrunktime; /*!< Receive trunktime */
391 struct timeval lasttxtime; /*!< Last transmitted trunktime */
392 struct timeval trunkact; /*!< Last trunk activity */
393 unsigned int lastsent; /*!< Last sent time */
394 /* Trunk data and length */
395 unsigned char *trunkdata;
396 unsigned int trunkdatalen;
397 unsigned int trunkdataalloc;
401 AST_LIST_ENTRY(iax2_trunk_peer) list;
404 static AST_LIST_HEAD_STATIC(tpeers, iax2_trunk_peer);
406 struct iax_firmware {
407 AST_LIST_ENTRY(iax_firmware) list;
411 struct ast_iax2_firmware_header *fwh;
416 REG_STATE_UNREGISTERED = 0,
419 REG_STATE_REGISTERED,
425 enum iax_transfer_state {
430 TRANSFER_PASSTHROUGH,
434 TRANSFER_MPASSTHROUGH,
439 struct iax2_registry {
440 struct sockaddr_in addr; /*!< Who we connect to for registration purposes */
442 char secret[80]; /*!< Password or key name in []'s */
444 int expire; /*!< Sched ID of expiration */
445 int refresh; /*!< How often to refresh */
446 enum iax_reg_state regstate;
447 int messages; /*!< Message count, low 8 bits = new, high 8 bits = old */
448 int callno; /*!< Associated call number if applicable */
449 struct sockaddr_in us; /*!< Who the server thinks we are */
450 struct ast_dnsmgr_entry *dnsmgr; /*!< DNS refresh manager */
451 AST_LIST_ENTRY(iax2_registry) entry;
454 static AST_LIST_HEAD_STATIC(registrations, iax2_registry);
456 /* Don't retry more frequently than every 10 ms, or less frequently than every 5 seconds */
457 #define MIN_RETRY_TIME 100
458 #define MAX_RETRY_TIME 10000
460 #define MAX_JITTER_BUFFER 50
461 #define MIN_JITTER_BUFFER 10
463 #define DEFAULT_TRUNKDATA 640 * 10 /*!< 40ms, uncompressed linear * 10 channels */
465 #define MAX_TIMESTAMP_SKEW 160 /*!< maximum difference between actual and predicted ts for sending */
467 /* If consecutive voice frame timestamps jump by more than this many milliseconds, then jitter buffer will resync */
468 #define TS_GAP_FOR_JB_RESYNC 5000
470 static int iaxthreadcount = DEFAULT_THREAD_COUNT;
471 static int iaxmaxthreadcount = DEFAULT_MAX_THREAD_COUNT;
472 static int iaxdynamicthreadcount = 0;
473 static int iaxactivethreadcount = 0;
487 struct chan_iax2_pvt {
488 /*! Socket to send/receive on for this call */
490 /*! Last received voice format */
492 /*! Last received video format */
494 /*! Last sent voice format */
496 /*! Last sent video format */
498 /*! What we are capable of sending */
500 /*! Last received timestamp */
502 /*! Last sent timestamp - never send the same timestamp twice in a single call */
503 unsigned int lastsent;
504 /*! Next outgoing timestamp if everything is good */
505 unsigned int nextpred;
506 /*! True if the last voice we transmitted was not silence/CNG */
507 unsigned int notsilenttx:1;
509 unsigned int pingtime;
510 /*! Max time for initial response */
513 struct sockaddr_in addr;
514 /*! Actual used codec preferences */
515 struct ast_codec_pref prefs;
516 /*! Requested codec preferences */
517 struct ast_codec_pref rprefs;
518 /*! Our call number */
519 unsigned short callno;
521 unsigned short peercallno;
522 /*! Peer selected format */
524 /*! Peer capability */
526 /*! timeval that we base our transmission on */
527 struct timeval offset;
528 /*! timeval that we base our delivery on */
529 struct timeval rxcore;
530 /*! The jitterbuffer */
532 /*! active jb read scheduler id */
536 /*! Error, as discovered by the manager */
538 /*! Owner if we have one */
539 struct ast_channel *owner;
540 /*! What's our state? */
541 struct ast_flags state;
542 /*! Expiry (optional) */
544 /*! Next outgoing sequence number */
545 unsigned char oseqno;
546 /*! Next sequence number they have not yet acknowledged */
547 unsigned char rseqno;
548 /*! Next incoming sequence number */
549 unsigned char iseqno;
550 /*! Last incoming sequence number we have acknowledged */
551 unsigned char aseqno;
553 AST_DECLARE_STRING_FIELDS(
555 AST_STRING_FIELD(peer);
556 /*! Default Context */
557 AST_STRING_FIELD(context);
558 /*! Caller ID if available */
559 AST_STRING_FIELD(cid_num);
560 AST_STRING_FIELD(cid_name);
561 /*! Hidden Caller ID (i.e. ANI) if appropriate */
562 AST_STRING_FIELD(ani);
564 AST_STRING_FIELD(dnid);
566 AST_STRING_FIELD(rdnis);
567 /*! Requested Extension */
568 AST_STRING_FIELD(exten);
569 /*! Expected Username */
570 AST_STRING_FIELD(username);
571 /*! Expected Secret */
572 AST_STRING_FIELD(secret);
574 AST_STRING_FIELD(challenge);
575 /*! Public keys permitted keys for incoming authentication */
576 AST_STRING_FIELD(inkeys);
577 /*! Private key for outgoing authentication */
578 AST_STRING_FIELD(outkey);
579 /*! Preferred language */
580 AST_STRING_FIELD(language);
581 /*! Hostname/peername for naming purposes */
582 AST_STRING_FIELD(host);
584 AST_STRING_FIELD(dproot);
585 AST_STRING_FIELD(accountcode);
586 AST_STRING_FIELD(mohinterpret);
587 AST_STRING_FIELD(mohsuggest);
588 /*! received OSP token */
589 AST_STRING_FIELD(osptoken);
592 /*! permitted authentication methods */
594 /*! permitted encryption methods */
596 /*! Encryption AES-128 Key */
598 /*! Decryption AES-128 Key */
600 /*! 32 bytes of semi-random data */
601 unsigned char semirand[32];
602 /*! Associated registry */
603 struct iax2_registry *reg;
604 /*! Associated peer for poking */
605 struct iax2_peer *peerpoke;
610 /*! Transferring status */
611 enum iax_transfer_state transferring;
612 /*! Transfer identifier */
614 /*! Who we are IAX transferring to */
615 struct sockaddr_in transfer;
616 /*! What's the new call number for the transfer */
617 unsigned short transfercallno;
618 /*! Transfer decrypt AES-128 Key */
619 aes_encrypt_ctx tdcx;
621 /*! Status of knowledge of peer ADSI capability */
624 /*! Who we are bridged to */
625 unsigned short bridgecallno;
627 int pingid; /*!< Transmit PING request */
628 int lagid; /*!< Retransmit lag request */
629 int autoid; /*!< Auto hangup for Dialplan requestor */
630 int authid; /*!< Authentication rejection ID */
631 int authfail; /*!< Reason to report failure */
632 int initid; /*!< Initial peer auto-congest ID (based on qualified peers) */
637 AST_LIST_HEAD_NOLOCK(, iax2_dpcache) dpentries;
638 struct ast_variable *vars;
639 /*! last received remote rr */
640 struct iax_rr remote_rr;
641 /*! Current base time: (just for stats) */
643 /*! Dropped frame count: (just for stats) */
645 /*! received frame count: (just for stats) */
649 static AST_LIST_HEAD_STATIC(queue, iax_frame);
651 static AST_LIST_HEAD_STATIC(users, iax2_user);
653 static AST_LIST_HEAD_STATIC(peers, iax2_peer);
655 static AST_LIST_HEAD_STATIC(firmwares, iax_firmware);
658 /*! Extension exists */
659 CACHE_FLAG_EXISTS = (1 << 0),
660 /*! Extension is nonexistent */
661 CACHE_FLAG_NONEXISTENT = (1 << 1),
662 /*! Extension can exist */
663 CACHE_FLAG_CANEXIST = (1 << 2),
664 /*! Waiting to hear back response */
665 CACHE_FLAG_PENDING = (1 << 3),
667 CACHE_FLAG_TIMEOUT = (1 << 4),
668 /*! Request transmitted */
669 CACHE_FLAG_TRANSMITTED = (1 << 5),
671 CACHE_FLAG_UNKNOWN = (1 << 6),
673 CACHE_FLAG_MATCHMORE = (1 << 7),
676 struct iax2_dpcache {
677 char peercontext[AST_MAX_CONTEXT];
678 char exten[AST_MAX_EXTENSION];
680 struct timeval expiry;
682 unsigned short callno;
684 AST_LIST_ENTRY(iax2_dpcache) cache_list;
685 AST_LIST_ENTRY(iax2_dpcache) peer_list;
688 static AST_LIST_HEAD_STATIC(dpcache, iax2_dpcache);
690 static void reg_source_db(struct iax2_peer *p);
691 static struct iax2_peer *realtime_peer(const char *peername, struct sockaddr_in *sin);
693 static void destroy_peer(struct iax2_peer *peer);
694 static int ast_cli_netstats(struct mansession *s, int fd, int limit_fmt);
696 enum iax2_thread_iostate {
699 IAX_IOSTATE_PROCESSING,
700 IAX_IOSTATE_SCHEDREADY,
703 enum iax2_thread_type {
704 IAX_THREAD_TYPE_POOL,
705 IAX_THREAD_TYPE_DYNAMIC,
709 AST_LIST_ENTRY(iax2_thread) list;
710 enum iax2_thread_type type;
711 enum iax2_thread_iostate iostate;
712 #ifdef SCHED_MULTITHREADED
713 void (*schedfunc)(void *);
716 #ifdef DEBUG_SCHED_MULTITHREAD
722 struct sockaddr_in iosin;
723 unsigned char buf[4096];
732 static AST_LIST_HEAD_STATIC(idle_list, iax2_thread);
733 static AST_LIST_HEAD_STATIC(active_list, iax2_thread);
734 static AST_LIST_HEAD_STATIC(dynamic_list, iax2_thread);
736 static void *iax2_process_thread(void *data);
738 static void signal_condition(ast_mutex_t *lock, ast_cond_t *cond)
740 ast_mutex_lock(lock);
741 ast_cond_signal(cond);
742 ast_mutex_unlock(lock);
745 static void iax_debug_output(const char *data)
748 ast_verbose("%s", data);
751 static void iax_error_output(const char *data)
753 ast_log(LOG_WARNING, "%s", data);
756 static void jb_error_output(const char *fmt, ...)
762 vsnprintf(buf, sizeof(buf), fmt, args);
765 ast_log(LOG_ERROR, buf);
768 static void jb_warning_output(const char *fmt, ...)
774 vsnprintf(buf, sizeof(buf), fmt, args);
777 ast_log(LOG_WARNING, buf);
780 static void jb_debug_output(const char *fmt, ...)
786 vsnprintf(buf, sizeof(buf), fmt, args);
793 * \brief an array of iax2 pvt structures
795 * The container for active chan_iax2_pvt structures is implemented as an
796 * array for extremely quick direct access to the correct pvt structure
797 * based on the local call number. The local call number is used as the
798 * index into the array where the associated pvt structure is stored.
800 static struct chan_iax2_pvt *iaxs[IAX_MAX_CALLS];
802 * \brief chan_iax2_pvt structure locks
804 * These locks are used when accessing a pvt structure in the iaxs array.
805 * The index used here is the same as used in the iaxs array. It is the
806 * local call number for the associated pvt struct.
808 static ast_mutex_t iaxsl[IAX_MAX_CALLS];
810 * \brief The last time a call number was used
812 * It is important to know the last time that a call number was used locally so
813 * that it is not used again too soon. The reason for this is the same as the
814 * reason that the TCP protocol state machine requires a "TIME WAIT" state.
816 * For example, say that a call is up. Then, the remote side sends a HANGUP,
817 * which we respond to with an ACK. However, there is no way to know whether
818 * the ACK made it there successfully. If it were to get lost, the remote
819 * side may retransmit the HANGUP. If in the meantime, this call number has
820 * been reused locally, given the right set of circumstances, this retransmitted
821 * HANGUP could potentially improperly hang up the new session. So, to avoid
822 * this potential issue, we must wait a specified timeout period before reusing
823 * a local call number.
825 * The specified time that we must wait before reusing a local call number is
826 * defined as MIN_REUSE_TIME, with a default of 60 seconds.
828 static struct timeval lastused[IAX_MAX_CALLS];
830 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);
831 static int expire_registry(void *data);
832 static int iax2_answer(struct ast_channel *c);
833 static int iax2_call(struct ast_channel *c, char *dest, int timeout);
834 static int iax2_devicestate(void *data);
835 static int iax2_digit_begin(struct ast_channel *c, char digit);
836 static int iax2_digit_end(struct ast_channel *c, char digit, unsigned int duration);
837 static int iax2_do_register(struct iax2_registry *reg);
838 static int iax2_fixup(struct ast_channel *oldchannel, struct ast_channel *newchan);
839 static int iax2_hangup(struct ast_channel *c);
840 static int iax2_indicate(struct ast_channel *c, int condition, const void *data, size_t datalen);
841 static int iax2_poke_peer(struct iax2_peer *peer, int heldcall);
842 static int iax2_provision(struct sockaddr_in *end, int sockfd, char *dest, const char *template, int force);
843 static int iax2_send(struct chan_iax2_pvt *pvt, struct ast_frame *f, unsigned int ts, int seqno, int now, int transfer, int final);
844 static int iax2_sendhtml(struct ast_channel *c, int subclass, const char *data, int datalen);
845 static int iax2_sendimage(struct ast_channel *c, struct ast_frame *img);
846 static int iax2_sendtext(struct ast_channel *c, const char *text);
847 static int iax2_setoption(struct ast_channel *c, int option, void *data, int datalen);
848 static int iax2_transfer(struct ast_channel *c, const char *dest);
849 static int iax2_write(struct ast_channel *c, struct ast_frame *f);
850 static int send_trunk(struct iax2_trunk_peer *tpeer, struct timeval *now);
851 static int send_command(struct chan_iax2_pvt *, char, int, unsigned int, const unsigned char *, int, int);
852 static int send_command_final(struct chan_iax2_pvt *, char, int, unsigned int, const unsigned char *, int, int);
853 static int send_command_immediate(struct chan_iax2_pvt *, char, int, unsigned int, const unsigned char *, int, int);
854 static int send_command_locked(unsigned short callno, char, int, unsigned int, const unsigned char *, int, int);
855 static int send_command_transfer(struct chan_iax2_pvt *, char, int, unsigned int, const unsigned char *, int);
856 static struct ast_channel *iax2_request(const char *type, int format, void *data, int *cause);
857 static struct ast_frame *iax2_read(struct ast_channel *c);
858 static struct iax2_peer *build_peer(const char *name, struct ast_variable *v, struct ast_variable *alt, int temponly);
859 static struct iax2_user *build_user(const char *name, struct ast_variable *v, struct ast_variable *alt, int temponly);
860 static void realtime_update_peer(const char *peername, struct sockaddr_in *sin, time_t regtime);
861 static void destroy_user(struct iax2_user *user);
862 static void prune_peers(void);
864 static int acf_channel_read(struct ast_channel *chan, const char *funcname, char *preparse, char *buf, size_t buflen);
865 static int acf_channel_write(struct ast_channel *chan, const char *function, char *data, const char *value);
867 static const struct ast_channel_tech iax2_tech = {
869 .description = tdesc,
870 .capabilities = IAX_CAPABILITY_FULLBANDWIDTH,
871 .properties = AST_CHAN_TP_WANTSJITTER,
872 .requester = iax2_request,
873 .devicestate = iax2_devicestate,
874 .send_digit_begin = iax2_digit_begin,
875 .send_digit_end = iax2_digit_end,
876 .send_text = iax2_sendtext,
877 .send_image = iax2_sendimage,
878 .send_html = iax2_sendhtml,
880 .hangup = iax2_hangup,
881 .answer = iax2_answer,
884 .write_video = iax2_write,
885 .indicate = iax2_indicate,
886 .setoption = iax2_setoption,
887 .bridge = iax2_bridge,
888 .transfer = iax2_transfer,
890 .func_channel_read = acf_channel_read,
891 .func_channel_write = acf_channel_write,
894 static void mwi_event_cb(const struct ast_event *event, void *userdata)
896 /* The MWI subscriptions exist just so the core knows we care about those
897 * mailboxes. However, we just grab the events out of the cache when it
898 * is time to send MWI, since it is only sent with a REGACK. */
901 /*! \brief Send manager event at call setup to link between Asterisk channel name
902 and IAX2 call identifiers */
903 static void iax2_ami_channelupdate(struct chan_iax2_pvt *pvt)
905 manager_event(EVENT_FLAG_SYSTEM, "ChannelUpdate",
906 "Channel: %s\r\nChanneltype: IAX2\r\nIAX2-callno-local: %d\r\nIAX2-callno-remote: %d\r\nIAX2-peer: %s\r\n",
907 pvt->owner ? pvt->owner->name : "",
908 pvt->callno, pvt->peercallno, pvt->peer ? pvt->peer : "");
912 static void insert_idle_thread(struct iax2_thread *thread)
914 if (thread->type == IAX_THREAD_TYPE_DYNAMIC) {
915 AST_LIST_LOCK(&dynamic_list);
916 AST_LIST_INSERT_TAIL(&dynamic_list, thread, list);
917 AST_LIST_UNLOCK(&dynamic_list);
919 AST_LIST_LOCK(&idle_list);
920 AST_LIST_INSERT_TAIL(&idle_list, thread, list);
921 AST_LIST_UNLOCK(&idle_list);
927 static struct iax2_thread *find_idle_thread(void)
930 struct iax2_thread *thread = NULL;
932 /* Pop the head of the idle list off */
933 AST_LIST_LOCK(&idle_list);
934 thread = AST_LIST_REMOVE_HEAD(&idle_list, list);
935 AST_LIST_UNLOCK(&idle_list);
937 /* If we popped a thread off the idle list, just return it */
941 /* Pop the head of the dynamic list off */
942 AST_LIST_LOCK(&dynamic_list);
943 thread = AST_LIST_REMOVE_HEAD(&dynamic_list, list);
944 AST_LIST_UNLOCK(&dynamic_list);
946 /* If we popped a thread off the dynamic list, just return it */
950 /* If we can't create a new dynamic thread for any reason, return no thread at all */
951 if (iaxdynamicthreadcount >= iaxmaxthreadcount || !(thread = ast_calloc(1, sizeof(*thread))))
954 /* Set default values */
955 thread->threadnum = ast_atomic_fetchadd_int(&iaxdynamicthreadcount, 1);
956 thread->type = IAX_THREAD_TYPE_DYNAMIC;
958 /* Initialize lock and condition */
959 ast_mutex_init(&thread->lock);
960 ast_cond_init(&thread->cond, NULL);
962 /* Create thread and send it on it's way */
963 pthread_attr_init(&attr);
964 pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
965 if (ast_pthread_create_background(&thread->threadid, &attr, iax2_process_thread, thread)) {
966 ast_cond_destroy(&thread->cond);
967 ast_mutex_destroy(&thread->lock);
975 #ifdef SCHED_MULTITHREADED
976 static int __schedule_action(void (*func)(void *data), void *data, const char *funcname)
978 struct iax2_thread *thread = NULL;
979 static time_t lasterror;
982 thread = find_idle_thread();
984 if (thread != NULL) {
985 thread->schedfunc = func;
986 thread->scheddata = data;
987 thread->iostate = IAX_IOSTATE_SCHEDREADY;
988 #ifdef DEBUG_SCHED_MULTITHREAD
989 ast_copy_string(thread->curfunc, funcname, sizeof(thread->curfunc));
991 signal_condition(&thread->lock, &thread->cond);
996 ast_log(LOG_NOTICE, "Out of idle IAX2 threads for scheduling!\n");
1001 #define schedule_action(func, data) __schedule_action(func, data, __PRETTY_FUNCTION__)
1004 static int send_ping(void *data);
1006 static void __send_ping(void *data)
1008 int callno = (long)data;
1009 ast_mutex_lock(&iaxsl[callno]);
1010 if (iaxs[callno] && iaxs[callno]->pingid != -1) {
1011 send_command(iaxs[callno], AST_FRAME_IAX, IAX_COMMAND_PING, 0, NULL, 0, -1);
1012 iaxs[callno]->pingid = ast_sched_add(sched, ping_time * 1000, send_ping, data);
1014 ast_mutex_unlock(&iaxsl[callno]);
1017 static int send_ping(void *data)
1019 #ifdef SCHED_MULTITHREADED
1020 if (schedule_action(__send_ping, data))
1026 static int get_encrypt_methods(const char *s)
1029 if (!strcasecmp(s, "aes128"))
1030 e = IAX_ENCRYPT_AES128;
1031 else if (ast_true(s))
1032 e = IAX_ENCRYPT_AES128;
1038 static int send_lagrq(void *data);
1040 static void __send_lagrq(void *data)
1042 int callno = (long)data;
1043 /* Ping only if it's real not if it's bridged */
1044 ast_mutex_lock(&iaxsl[callno]);
1045 if (iaxs[callno] && iaxs[callno]->lagid != -1) {
1046 send_command(iaxs[callno], AST_FRAME_IAX, IAX_COMMAND_LAGRQ, 0, NULL, 0, -1);
1047 iaxs[callno]->lagid = ast_sched_add(sched, lagrq_time * 1000, send_lagrq, data);
1049 ast_mutex_unlock(&iaxsl[callno]);
1052 static int send_lagrq(void *data)
1054 #ifdef SCHED_MULTITHREADED
1055 if (schedule_action(__send_lagrq, data))
1061 static unsigned char compress_subclass(int subclass)
1065 /* If it's 128 or smaller, just return it */
1066 if (subclass < IAX_FLAG_SC_LOG)
1068 /* Otherwise find its power */
1069 for (x = 0; x < IAX_MAX_SHIFT; x++) {
1070 if (subclass & (1 << x)) {
1072 ast_log(LOG_WARNING, "Can't compress subclass %d\n", subclass);
1078 return power | IAX_FLAG_SC_LOG;
1081 static int uncompress_subclass(unsigned char csub)
1083 /* If the SC_LOG flag is set, return 2^csub otherwise csub */
1084 if (csub & IAX_FLAG_SC_LOG) {
1085 /* special case for 'compressed' -1 */
1089 return 1 << (csub & ~IAX_FLAG_SC_LOG & IAX_MAX_SHIFT);
1095 static struct iax2_peer *find_peer(const char *name, int realtime)
1097 struct iax2_peer *peer = NULL;
1099 /* Grab peer from linked list */
1100 AST_LIST_LOCK(&peers);
1101 AST_LIST_TRAVERSE(&peers, peer, entry) {
1102 if (!strcasecmp(peer->name, name)) {
1106 AST_LIST_UNLOCK(&peers);
1108 /* Now go for realtime if applicable */
1109 if(!peer && realtime)
1110 peer = realtime_peer(name, NULL);
1114 static int iax2_getpeername(struct sockaddr_in sin, char *host, int len, int lockpeer)
1116 struct iax2_peer *peer = NULL;
1120 AST_LIST_LOCK(&peers);
1121 AST_LIST_TRAVERSE(&peers, peer, entry) {
1122 if ((peer->addr.sin_addr.s_addr == sin.sin_addr.s_addr) &&
1123 (peer->addr.sin_port == sin.sin_port)) {
1124 ast_copy_string(host, peer->name, len);
1130 AST_LIST_UNLOCK(&peers);
1132 peer = realtime_peer(NULL, &sin);
1134 ast_copy_string(host, peer->name, len);
1135 if (ast_test_flag(peer, IAX_TEMPONLY))
1144 static struct chan_iax2_pvt *new_iax(struct sockaddr_in *sin, int lockpeer, const char *host)
1146 struct chan_iax2_pvt *tmp;
1149 if (!(tmp = ast_calloc(1, sizeof(*tmp))))
1152 if (ast_string_field_init(tmp, 32)) {
1165 ast_string_field_set(tmp,exten, "s");
1166 ast_string_field_set(tmp,host, host);
1170 jbconf.max_jitterbuf = maxjitterbuffer;
1171 jbconf.resync_threshold = resyncthreshold;
1172 jbconf.max_contig_interp = maxjitterinterps;
1173 jbconf.target_extra = jittertargetextra;
1174 jb_setconf(tmp->jb,&jbconf);
1176 AST_LIST_HEAD_INIT_NOLOCK(&tmp->dpentries);
1181 static struct iax_frame *iaxfrdup2(struct iax_frame *fr)
1183 struct iax_frame *new = iax_frame_new(DIRECTION_INGRESS, fr->af.datalen, fr->cacheable);
1185 size_t mallocd_datalen = new->mallocd_datalen;
1186 memcpy(new, fr, sizeof(*new));
1187 iax_frame_wrap(new, &fr->af);
1188 new->mallocd_datalen = mallocd_datalen;
1191 new->direction = DIRECTION_INGRESS;
1197 #define NEW_PREVENT 0
1201 static int match(struct sockaddr_in *sin, unsigned short callno, unsigned short dcallno, const struct chan_iax2_pvt *cur)
1203 if ((cur->addr.sin_addr.s_addr == sin->sin_addr.s_addr) &&
1204 (cur->addr.sin_port == sin->sin_port)) {
1205 /* This is the main host */
1206 if ((cur->peercallno == callno) ||
1207 ((dcallno == cur->callno) && !cur->peercallno)) {
1208 /* That's us. Be sure we keep track of the peer call number */
1212 if ((cur->transfer.sin_addr.s_addr == sin->sin_addr.s_addr) &&
1213 (cur->transfer.sin_port == sin->sin_port) && (cur->transferring)) {
1214 /* We're transferring */
1215 if (dcallno == cur->callno)
1221 static void update_max_trunk(void)
1223 int max = TRUNK_CALL_START;
1225 /* XXX Prolly don't need locks here XXX */
1226 for (x=TRUNK_CALL_START;x<IAX_MAX_CALLS - 1; x++) {
1231 if (option_debug && iaxdebug)
1232 ast_log(LOG_DEBUG, "New max trunk callno is %d\n", max);
1235 static void update_max_nontrunk(void)
1239 /* XXX Prolly don't need locks here XXX */
1240 for (x=1;x<TRUNK_CALL_START - 1; x++) {
1244 maxnontrunkcall = max;
1245 if (option_debug && iaxdebug)
1246 ast_log(LOG_DEBUG, "New max nontrunk callno is %d\n", max);
1249 static int make_trunk(unsigned short callno, int locked)
1254 if (iaxs[callno]->oseqno) {
1255 ast_log(LOG_WARNING, "Can't make trunk once a call has started!\n");
1258 if (callno & TRUNK_CALL_START) {
1259 ast_log(LOG_WARNING, "Call %d is already a trunk\n", callno);
1262 gettimeofday(&now, NULL);
1263 for (x=TRUNK_CALL_START;x<IAX_MAX_CALLS - 1; x++) {
1264 ast_mutex_lock(&iaxsl[x]);
1265 if (!iaxs[x] && ((now.tv_sec - lastused[x].tv_sec) > MIN_REUSE_TIME)) {
1266 iaxs[x] = iaxs[callno];
1267 iaxs[x]->callno = x;
1268 iaxs[callno] = NULL;
1269 /* Update the two timers that should have been started */
1270 if (iaxs[x]->pingid > -1)
1271 ast_sched_del(sched, iaxs[x]->pingid);
1272 if (iaxs[x]->lagid > -1)
1273 ast_sched_del(sched, iaxs[x]->lagid);
1274 iaxs[x]->pingid = ast_sched_add(sched, ping_time * 1000, send_ping, (void *)(long)x);
1275 iaxs[x]->lagid = ast_sched_add(sched, lagrq_time * 1000, send_lagrq, (void *)(long)x);
1277 ast_mutex_unlock(&iaxsl[callno]);
1280 ast_mutex_unlock(&iaxsl[x]);
1283 ast_mutex_unlock(&iaxsl[x]);
1285 if (x >= IAX_MAX_CALLS - 1) {
1286 ast_log(LOG_WARNING, "Unable to trunk call: Insufficient space\n");
1290 ast_log(LOG_DEBUG, "Made call %d into trunk call %d\n", callno, x);
1291 /* We move this call from a non-trunked to a trunked call */
1293 update_max_nontrunk();
1298 * \todo XXX Note that this function contains a very expensive operation that
1299 * happens for *every* incoming media frame. It iterates through every
1300 * possible call number, locking and unlocking each one, to try to match the
1301 * incoming frame to an active call. Call numbers can be up to 2^15, 32768.
1302 * So, for an call with a local call number of 20000, every incoming audio
1303 * frame would require 20000 mutex lock and unlock operations. Ouch.
1305 * It's a shame that IAX2 media frames carry the source call number instead of
1306 * the destination call number. If they did, this lookup wouldn't be needed.
1307 * However, it's too late to change that now. Instead, we need to come up with
1308 * a better way of indexing active calls so that these frequent lookups are not
1311 static int find_callno(unsigned short callno, unsigned short dcallno, struct sockaddr_in *sin, int new, int lockpeer, int sockfd)
1317 if (new <= NEW_ALLOW) {
1318 for (x=1;(res < 1) && (x<maxnontrunkcall);x++) {
1319 ast_mutex_lock(&iaxsl[x]);
1321 /* Look for an exact match */
1322 if (match(sin, callno, dcallno, iaxs[x])) {
1326 ast_mutex_unlock(&iaxsl[x]);
1328 for (x=TRUNK_CALL_START;(res < 1) && (x<maxtrunkcall);x++) {
1329 ast_mutex_lock(&iaxsl[x]);
1331 /* Look for an exact match */
1332 if (match(sin, callno, dcallno, iaxs[x])) {
1336 ast_mutex_unlock(&iaxsl[x]);
1339 if ((res < 1) && (new >= NEW_ALLOW)) {
1340 /* It may seem odd that we look through the peer list for a name for
1341 * this *incoming* call. Well, it is weird. However, users don't
1342 * have an IP address/port number that we can match against. So,
1343 * this is just checking for a peer that has that IP/port and
1344 * assuming that we have a user of the same name. This isn't always
1345 * correct, but it will be changed if needed after authentication. */
1346 if (!iax2_getpeername(*sin, host, sizeof(host), lockpeer))
1347 snprintf(host, sizeof(host), "%s:%d", ast_inet_ntoa(sin->sin_addr), ntohs(sin->sin_port));
1348 gettimeofday(&now, NULL);
1349 for (x=1;x<TRUNK_CALL_START;x++) {
1350 /* Find first unused call number that hasn't been used in a while */
1351 ast_mutex_lock(&iaxsl[x]);
1352 if (!iaxs[x] && ((now.tv_sec - lastused[x].tv_sec) > MIN_REUSE_TIME)) break;
1353 ast_mutex_unlock(&iaxsl[x]);
1355 /* We've still got lock held if we found a spot */
1356 if (x >= TRUNK_CALL_START) {
1357 ast_log(LOG_WARNING, "No more space\n");
1360 iaxs[x] = new_iax(sin, lockpeer, host);
1361 update_max_nontrunk();
1363 if (option_debug && iaxdebug)
1364 ast_log(LOG_DEBUG, "Creating new call structure %d\n", x);
1365 iaxs[x]->sockfd = sockfd;
1366 iaxs[x]->addr.sin_port = sin->sin_port;
1367 iaxs[x]->addr.sin_family = sin->sin_family;
1368 iaxs[x]->addr.sin_addr.s_addr = sin->sin_addr.s_addr;
1369 iaxs[x]->peercallno = callno;
1370 iaxs[x]->callno = x;
1371 iaxs[x]->pingtime = DEFAULT_RETRY_TIME;
1372 iaxs[x]->expiry = min_reg_expire;
1373 iaxs[x]->pingid = ast_sched_add(sched, ping_time * 1000, send_ping, (void *)(long)x);
1374 iaxs[x]->lagid = ast_sched_add(sched, lagrq_time * 1000, send_lagrq, (void *)(long)x);
1375 iaxs[x]->amaflags = amaflags;
1376 ast_copy_flags(iaxs[x], (&globalflags), IAX_NOTRANSFER | IAX_TRANSFERMEDIA | IAX_USEJITTERBUF | IAX_FORCEJITTERBUF);
1378 ast_string_field_set(iaxs[x], accountcode, accountcode);
1379 ast_string_field_set(iaxs[x], mohinterpret, mohinterpret);
1380 ast_string_field_set(iaxs[x], mohsuggest, mohsuggest);
1382 ast_log(LOG_WARNING, "Out of resources\n");
1383 ast_mutex_unlock(&iaxsl[x]);
1386 ast_mutex_unlock(&iaxsl[x]);
1392 static void iax2_frame_free(struct iax_frame *fr)
1394 if (fr->retrans > -1)
1395 ast_sched_del(sched, fr->retrans);
1399 static int iax2_queue_frame(int callno, struct ast_frame *f)
1401 /* Assumes lock for callno is already held... */
1403 if (iaxs[callno] && iaxs[callno]->owner) {
1404 if (ast_mutex_trylock(&iaxs[callno]->owner->lock)) {
1405 /* Avoid deadlock by pausing and trying again */
1406 ast_mutex_unlock(&iaxsl[callno]);
1408 ast_mutex_lock(&iaxsl[callno]);
1410 ast_queue_frame(iaxs[callno]->owner, f);
1411 ast_mutex_unlock(&iaxs[callno]->owner->lock);
1420 static void destroy_firmware(struct iax_firmware *cur)
1422 /* Close firmware */
1424 munmap(cur->fwh, ntohl(cur->fwh->datalen) + sizeof(*(cur->fwh)));
1430 static int try_firmware(char *s)
1433 struct iax_firmware *cur = NULL;
1434 int ifd, fd, res, len, chunk;
1435 struct ast_iax2_firmware_header *fwh, fwh2;
1436 struct MD5Context md5;
1437 unsigned char sum[16], buf[1024];
1440 if (!(s2 = alloca(strlen(s) + 100))) {
1441 ast_log(LOG_WARNING, "Alloca failed!\n");
1445 last = strrchr(s, '/');
1451 snprintf(s2, strlen(s) + 100, "/var/tmp/%s-%ld", last, (unsigned long)ast_random());
1453 if ((res = stat(s, &stbuf) < 0)) {
1454 ast_log(LOG_WARNING, "Failed to stat '%s': %s\n", s, strerror(errno));
1458 /* Make sure it's not a directory */
1459 if (S_ISDIR(stbuf.st_mode))
1461 ifd = open(s, O_RDONLY);
1463 ast_log(LOG_WARNING, "Cannot open '%s': %s\n", s, strerror(errno));
1466 fd = open(s2, O_RDWR | O_CREAT | O_EXCL, AST_FILE_MODE);
1468 ast_log(LOG_WARNING, "Cannot open '%s' for writing: %s\n", s2, strerror(errno));
1472 /* Unlink our newly created file */
1475 /* Now copy the firmware into it */
1476 len = stbuf.st_size;
1479 if (chunk > sizeof(buf))
1480 chunk = sizeof(buf);
1481 res = read(ifd, buf, chunk);
1483 ast_log(LOG_WARNING, "Only read %d of %d bytes of data :(: %s\n", res, chunk, strerror(errno));
1488 res = write(fd, buf, chunk);
1490 ast_log(LOG_WARNING, "Only write %d of %d bytes of data :(: %s\n", res, chunk, strerror(errno));
1498 /* Return to the beginning */
1499 lseek(fd, 0, SEEK_SET);
1500 if ((res = read(fd, &fwh2, sizeof(fwh2))) != sizeof(fwh2)) {
1501 ast_log(LOG_WARNING, "Unable to read firmware header in '%s'\n", s);
1505 if (ntohl(fwh2.magic) != IAX_FIRMWARE_MAGIC) {
1506 ast_log(LOG_WARNING, "'%s' is not a valid firmware file\n", s);
1510 if (ntohl(fwh2.datalen) != (stbuf.st_size - sizeof(fwh2))) {
1511 ast_log(LOG_WARNING, "Invalid data length in firmware '%s'\n", s);
1515 if (fwh2.devname[sizeof(fwh2.devname) - 1] || ast_strlen_zero((char *)fwh2.devname)) {
1516 ast_log(LOG_WARNING, "No or invalid device type specified for '%s'\n", s);
1520 fwh = mmap(NULL, stbuf.st_size, PROT_READ, MAP_PRIVATE, fd, 0);
1521 if (fwh == (void *) -1) {
1522 ast_log(LOG_WARNING, "mmap failed: %s\n", strerror(errno));
1527 MD5Update(&md5, fwh->data, ntohl(fwh->datalen));
1528 MD5Final(sum, &md5);
1529 if (memcmp(sum, fwh->chksum, sizeof(sum))) {
1530 ast_log(LOG_WARNING, "Firmware file '%s' fails checksum\n", s);
1531 munmap(fwh, stbuf.st_size);
1536 AST_LIST_TRAVERSE(&firmwares, cur, list) {
1537 if (!strcmp((char *)cur->fwh->devname, (char *)fwh->devname)) {
1538 /* Found a candidate */
1539 if (cur->dead || (ntohs(cur->fwh->version) < ntohs(fwh->version)))
1540 /* The version we have on loaded is older, load this one instead */
1542 /* This version is no newer than what we have. Don't worry about it.
1543 We'll consider it a proper load anyhow though */
1544 munmap(fwh, stbuf.st_size);
1550 if (!cur && ((cur = ast_calloc(1, sizeof(*cur))))) {
1552 AST_LIST_INSERT_TAIL(&firmwares, cur, list);
1557 munmap(cur->fwh, cur->mmaplen);
1562 cur->mmaplen = stbuf.st_size;
1569 static int iax_check_version(char *dev)
1572 struct iax_firmware *cur = NULL;
1574 if (ast_strlen_zero(dev))
1577 AST_LIST_LOCK(&firmwares);
1578 AST_LIST_TRAVERSE(&firmwares, cur, list) {
1579 if (!strcmp(dev, (char *)cur->fwh->devname)) {
1580 res = ntohs(cur->fwh->version);
1584 AST_LIST_UNLOCK(&firmwares);
1589 static int iax_firmware_append(struct iax_ie_data *ied, const unsigned char *dev, unsigned int desc)
1592 unsigned int bs = desc & 0xff;
1593 unsigned int start = (desc >> 8) & 0xffffff;
1595 struct iax_firmware *cur;
1597 if (ast_strlen_zero((char *)dev) || !bs)
1602 AST_LIST_LOCK(&firmwares);
1603 AST_LIST_TRAVERSE(&firmwares, cur, list) {
1604 if (strcmp((char *)dev, (char *)cur->fwh->devname))
1606 iax_ie_append_int(ied, IAX_IE_FWBLOCKDESC, desc);
1607 if (start < ntohl(cur->fwh->datalen)) {
1608 bytes = ntohl(cur->fwh->datalen) - start;
1611 iax_ie_append_raw(ied, IAX_IE_FWBLOCKDATA, cur->fwh->data + start, bytes);
1614 iax_ie_append(ied, IAX_IE_FWBLOCKDATA);
1622 AST_LIST_UNLOCK(&firmwares);
1628 static void reload_firmware(void)
1630 struct iax_firmware *cur = NULL;
1633 char dir[256], fn[256];
1635 AST_LIST_LOCK(&firmwares);
1637 /* Mark all as dead */
1638 AST_LIST_TRAVERSE(&firmwares, cur, list)
1641 /* Now that we have marked them dead... load new ones */
1642 snprintf(dir, sizeof(dir), "%s/firmware/iax", (char *)ast_config_AST_DATA_DIR);
1645 while((de = readdir(fwd))) {
1646 if (de->d_name[0] != '.') {
1647 snprintf(fn, sizeof(fn), "%s/%s", dir, de->d_name);
1648 if (!try_firmware(fn)) {
1649 if (option_verbose > 1)
1650 ast_verbose(VERBOSE_PREFIX_2 "Loaded firmware '%s'\n", de->d_name);
1656 ast_log(LOG_WARNING, "Error opening firmware directory '%s': %s\n", dir, strerror(errno));
1658 /* Clean up leftovers */
1659 AST_LIST_TRAVERSE_SAFE_BEGIN(&firmwares, cur, list) {
1662 AST_LIST_REMOVE_CURRENT(&firmwares, list);
1663 destroy_firmware(cur);
1665 AST_LIST_TRAVERSE_SAFE_END
1667 AST_LIST_UNLOCK(&firmwares);
1670 static int __do_deliver(void *data)
1672 /* Just deliver the packet by using queueing. This is called by
1673 the IAX thread with the iaxsl lock held. */
1674 struct iax_frame *fr = data;
1676 fr->af.has_timing_info = 0;
1677 if (iaxs[fr->callno] && !ast_test_flag(iaxs[fr->callno], IAX_ALREADYGONE))
1678 iax2_queue_frame(fr->callno, &fr->af);
1679 /* Free our iax frame */
1680 iax2_frame_free(fr);
1681 /* And don't run again */
1685 static int handle_error(void)
1687 /* XXX Ideally we should figure out why an error occurred and then abort those
1688 rather than continuing to try. Unfortunately, the published interface does
1689 not seem to work XXX */
1691 struct sockaddr_in *sin;
1694 struct sock_extended_err e;
1699 m.msg_controllen = sizeof(e);
1701 res = recvmsg(netsocket, &m, MSG_ERRQUEUE);
1703 ast_log(LOG_WARNING, "Error detected, but unable to read error: %s\n", strerror(errno));
1705 if (m.msg_controllen) {
1706 sin = (struct sockaddr_in *)SO_EE_OFFENDER(&e);
1708 ast_log(LOG_WARNING, "Receive error from %s\n", ast_inet_ntoa(sin->sin_addr));
1710 ast_log(LOG_WARNING, "No address detected??\n");
1712 ast_log(LOG_WARNING, "Local error: %s\n", strerror(e.ee_errno));
1719 static int transmit_trunk(struct iax_frame *f, struct sockaddr_in *sin, int sockfd)
1722 res = sendto(sockfd, f->data, f->datalen, 0,(struct sockaddr *)sin,
1726 ast_log(LOG_DEBUG, "Received error: %s\n", strerror(errno));
1733 static int send_packet(struct iax_frame *f)
1736 int callno = f->callno;
1738 /* Don't send if there was an error, but return error instead */
1739 if (!callno || !iaxs[callno] || iaxs[callno]->error)
1742 /* Called with iaxsl held */
1743 if (option_debug > 2 && iaxdebug)
1744 ast_log(LOG_DEBUG, "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));
1747 iax_showframe(f, NULL, 0, &iaxs[callno]->transfer, f->datalen - sizeof(struct ast_iax2_full_hdr));
1748 res = sendto(iaxs[callno]->sockfd, f->data, f->datalen, 0,(struct sockaddr *)&iaxs[callno]->transfer,
1749 sizeof(iaxs[callno]->transfer));
1752 iax_showframe(f, NULL, 0, &iaxs[callno]->addr, f->datalen - sizeof(struct ast_iax2_full_hdr));
1753 res = sendto(iaxs[callno]->sockfd, f->data, f->datalen, 0,(struct sockaddr *)&iaxs[callno]->addr,
1754 sizeof(iaxs[callno]->addr));
1757 if (option_debug && iaxdebug)
1758 ast_log(LOG_DEBUG, "Received error: %s\n", strerror(errno));
1765 static void iax2_destroy_helper(struct chan_iax2_pvt *pvt)
1767 struct iax2_user *user = NULL;
1769 /* Decrement AUTHREQ count if needed */
1770 if (ast_test_flag(pvt, IAX_MAXAUTHREQ)) {
1771 AST_LIST_LOCK(&users);
1772 AST_LIST_TRAVERSE(&users, user, entry) {
1773 if (!strcmp(user->name, pvt->username)) {
1778 AST_LIST_UNLOCK(&users);
1779 ast_clear_flag(pvt, IAX_MAXAUTHREQ);
1781 /* No more pings or lagrq's */
1782 if (pvt->pingid > -1)
1783 ast_sched_del(sched, pvt->pingid);
1785 if (pvt->lagid > -1)
1786 ast_sched_del(sched, pvt->lagid);
1788 if (pvt->autoid > -1)
1789 ast_sched_del(sched, pvt->autoid);
1791 if (pvt->authid > -1)
1792 ast_sched_del(sched, pvt->authid);
1794 if (pvt->initid > -1)
1795 ast_sched_del(sched, pvt->initid);
1798 ast_sched_del(sched, pvt->jbid);
1802 static int iax2_predestroy(int callno)
1804 struct ast_channel *c = NULL;
1805 struct chan_iax2_pvt *pvt = iaxs[callno];
1810 if (!ast_test_flag(pvt, IAX_ALREADYGONE)) {
1811 iax2_destroy_helper(pvt);
1812 ast_set_flag(pvt, IAX_ALREADYGONE);
1815 if ((c = pvt->owner)) {
1816 c->_softhangup |= AST_SOFTHANGUP_DEV;
1818 ast_queue_hangup(c);
1820 ast_module_unref(ast_module_info->self);
1826 static void iax2_destroy(int callno)
1828 struct chan_iax2_pvt *pvt = NULL;
1829 struct iax_frame *cur = NULL;
1830 struct ast_channel *owner = NULL;
1834 gettimeofday(&lastused[callno], NULL);
1836 owner = pvt ? pvt->owner : NULL;
1839 if (ast_mutex_trylock(&owner->lock)) {
1840 ast_log(LOG_NOTICE, "Avoiding IAX destroy deadlock\n");
1841 ast_mutex_unlock(&iaxsl[callno]);
1843 ast_mutex_lock(&iaxsl[callno]);
1848 iaxs[callno] = NULL;
1852 iax2_destroy_helper(pvt);
1855 ast_set_flag(pvt, IAX_ALREADYGONE);
1858 /* If there's an owner, prod it to give up */
1859 owner->_softhangup |= AST_SOFTHANGUP_DEV;
1860 ast_queue_hangup(owner);
1863 AST_LIST_LOCK(&queue);
1864 AST_LIST_TRAVERSE(&queue, cur, list) {
1865 /* Cancel any pending transmissions */
1866 if (cur->callno == pvt->callno)
1869 AST_LIST_UNLOCK(&queue);
1872 pvt->reg->callno = 0;
1876 ast_variables_destroy(pvt->vars);
1880 while (jb_getall(pvt->jb, &frame) == JB_OK)
1881 iax2_frame_free(frame.data);
1882 jb_destroy(pvt->jb);
1883 /* gotta free up the stringfields */
1884 ast_string_field_free_pools(pvt);
1889 ast_mutex_unlock(&owner->lock);
1891 if (callno & 0x4000)
1895 static int update_packet(struct iax_frame *f)
1897 /* Called with iaxsl lock held, and iaxs[callno] non-NULL */
1898 struct ast_iax2_full_hdr *fh = f->data;
1899 /* Mark this as a retransmission */
1900 fh->dcallno = ntohs(IAX_FLAG_RETRANS | f->dcallno);
1902 f->iseqno = iaxs[f->callno]->iseqno;
1903 fh->iseqno = f->iseqno;
1907 static int attempt_transmit(void *data);
1908 static void __attempt_transmit(void *data)
1910 /* Attempt to transmit the frame to the remote peer...
1911 Called without iaxsl held. */
1912 struct iax_frame *f = data;
1914 int callno = f->callno;
1915 /* Make sure this call is still active */
1917 ast_mutex_lock(&iaxsl[callno]);
1918 if (callno && iaxs[callno]) {
1919 if ((f->retries < 0) /* Already ACK'd */ ||
1920 (f->retries >= max_retries) /* Too many attempts */) {
1921 /* Record an error if we've transmitted too many times */
1922 if (f->retries >= max_retries) {
1924 /* Transfer timeout */
1925 send_command(iaxs[callno], AST_FRAME_IAX, IAX_COMMAND_TXREJ, 0, NULL, 0, -1);
1926 } else if (f->final) {
1928 iax2_destroy(callno);
1930 if (iaxs[callno]->owner)
1931 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);
1932 iaxs[callno]->error = ETIMEDOUT;
1933 if (iaxs[callno]->owner) {
1934 struct ast_frame fr = { 0, };
1936 fr.frametype = AST_FRAME_CONTROL;
1937 fr.subclass = AST_CONTROL_HANGUP;
1938 iax2_queue_frame(callno, &fr);
1939 /* Remember, owner could disappear */
1940 if (iaxs[callno]->owner)
1941 iaxs[callno]->owner->hangupcause = AST_CAUSE_DESTINATION_OUT_OF_ORDER;
1943 if (iaxs[callno]->reg) {
1944 memset(&iaxs[callno]->reg->us, 0, sizeof(iaxs[callno]->reg->us));
1945 iaxs[callno]->reg->regstate = REG_STATE_TIMEOUT;
1946 iaxs[callno]->reg->refresh = IAX_DEFAULT_REG_EXPIRE;
1948 iax2_destroy(callno);
1955 /* Update it if it needs it */
1957 /* Attempt transmission */
1960 /* Try again later after 10 times as long */
1962 if (f->retrytime > MAX_RETRY_TIME)
1963 f->retrytime = MAX_RETRY_TIME;
1964 /* Transfer messages max out at one second */
1965 if (f->transfer && (f->retrytime > 1000))
1966 f->retrytime = 1000;
1967 f->retrans = ast_sched_add(sched, f->retrytime, attempt_transmit, f);
1970 /* Make sure it gets freed */
1975 ast_mutex_unlock(&iaxsl[callno]);
1976 /* Do not try again */
1978 /* Don't attempt delivery, just remove it from the queue */
1979 AST_LIST_LOCK(&queue);
1980 AST_LIST_REMOVE(&queue, f, list);
1981 AST_LIST_UNLOCK(&queue);
1983 /* Free the IAX frame */
1988 static int attempt_transmit(void *data)
1990 #ifdef SCHED_MULTITHREADED
1991 if (schedule_action(__attempt_transmit, data))
1993 __attempt_transmit(data);
1997 static int iax2_prune_realtime(int fd, int argc, char *argv[])
1999 struct iax2_peer *peer;
2002 return RESULT_SHOWUSAGE;
2003 if (!strcmp(argv[3],"all")) {
2005 ast_cli(fd, "OK cache is flushed.\n");
2006 } else if ((peer = find_peer(argv[3], 0))) {
2007 if(ast_test_flag(peer, IAX_RTCACHEFRIENDS)) {
2008 ast_set_flag(peer, IAX_RTAUTOCLEAR);
2009 expire_registry((void*)peer->name);
2010 ast_cli(fd, "OK peer %s was removed from the cache.\n", argv[3]);
2012 ast_cli(fd, "SORRY peer %s is not eligible for this operation.\n", argv[3]);
2015 ast_cli(fd, "SORRY peer %s was not found in the cache.\n", argv[3]);
2018 return RESULT_SUCCESS;
2021 static int iax2_test_losspct(int fd, int argc, char *argv[])
2024 return RESULT_SHOWUSAGE;
2026 test_losspct = atoi(argv[3]);
2028 return RESULT_SUCCESS;
2032 static int iax2_test_late(int fd, int argc, char *argv[])
2035 return RESULT_SHOWUSAGE;
2037 test_late = atoi(argv[3]);
2039 return RESULT_SUCCESS;
2042 static int iax2_test_resync(int fd, int argc, char *argv[])
2045 return RESULT_SHOWUSAGE;
2047 test_resync = atoi(argv[3]);
2049 return RESULT_SUCCESS;
2052 static int iax2_test_jitter(int fd, int argc, char *argv[])
2054 if (argc < 4 || argc > 5)
2055 return RESULT_SHOWUSAGE;
2057 test_jit = atoi(argv[3]);
2059 test_jitpct = atoi(argv[4]);
2061 return RESULT_SUCCESS;
2063 #endif /* IAXTESTS */
2065 /*! \brief peer_status: Report Peer status in character string */
2066 /* returns 1 if peer is online, -1 if unmonitored */
2067 static int peer_status(struct iax2_peer *peer, char *status, int statuslen)
2071 if (peer->lastms < 0) {
2072 ast_copy_string(status, "UNREACHABLE", statuslen);
2073 } else if (peer->lastms > peer->maxms) {
2074 snprintf(status, statuslen, "LAGGED (%d ms)", peer->lastms);
2076 } else if (peer->lastms) {
2077 snprintf(status, statuslen, "OK (%d ms)", peer->lastms);
2080 ast_copy_string(status, "UNKNOWN", statuslen);
2083 ast_copy_string(status, "Unmonitored", statuslen);
2089 /*! \brief Show one peer in detail */
2090 static int iax2_show_peer(int fd, int argc, char *argv[])
2094 struct iax2_peer *peer;
2095 char codec_buf[512];
2096 int x = 0, codec = 0, load_realtime = 0;
2099 return RESULT_SHOWUSAGE;
2101 load_realtime = (argc == 5 && !strcmp(argv[4], "load")) ? 1 : 0;
2103 peer = find_peer(argv[3], load_realtime);
2106 ast_cli(fd, " * Name : %s\n", peer->name);
2107 ast_cli(fd, " Secret : %s\n", ast_strlen_zero(peer->secret)?"<Not set>":"<Set>");
2108 ast_cli(fd, " Context : %s\n", peer->context);
2109 ast_cli(fd, " Mailbox : %s\n", peer->mailbox);
2110 ast_cli(fd, " Dynamic : %s\n", ast_test_flag(peer, IAX_DYNAMIC) ? "Yes":"No");
2111 ast_cli(fd, " Callerid : %s\n", ast_callerid_merge(cbuf, sizeof(cbuf), peer->cid_name, peer->cid_num, "<unspecified>"));
2112 ast_cli(fd, " Expire : %d\n", peer->expire);
2113 ast_cli(fd, " ACL : %s\n", (peer->ha?"Yes":"No"));
2114 ast_cli(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));
2115 ast_cli(fd, " Defaddr->IP : %s Port %d\n", ast_inet_ntoa(peer->defaddr.sin_addr), ntohs(peer->defaddr.sin_port));
2116 ast_cli(fd, " Username : %s\n", peer->username);
2117 ast_cli(fd, " Codecs : ");
2118 ast_getformatname_multiple(codec_buf, sizeof(codec_buf) -1, peer->capability);
2119 ast_cli(fd, "%s\n", codec_buf);
2121 ast_cli(fd, " Codec Order : (");
2122 for(x = 0; x < 32 ; x++) {
2123 codec = ast_codec_pref_index(&peer->prefs,x);
2126 ast_cli(fd, "%s", ast_getformatname(codec));
2127 if(x < 31 && ast_codec_pref_index(&peer->prefs,x+1))
2132 ast_cli(fd, "none");
2135 ast_cli(fd, " Status : ");
2136 peer_status(peer, status, sizeof(status));
2137 ast_cli(fd, "%s\n",status);
2138 ast_cli(fd, " Qualify : every %dms when OK, every %dms when UNREACHABLE (sample smoothing %s)\n", peer->pokefreqok, peer->pokefreqnotok, peer->smoothing ? "On" : "Off");
2140 if (ast_test_flag(peer, IAX_TEMPONLY))
2143 ast_cli(fd,"Peer %s not found.\n", argv[3]);
2147 return RESULT_SUCCESS;
2150 static char *complete_iax2_show_peer(const char *line, const char *word, int pos, int state)
2153 struct iax2_peer *p = NULL;
2155 int wordlen = strlen(word);
2157 /* 0 - iax2; 1 - show; 2 - peer; 3 - <peername> */
2159 AST_LIST_LOCK(&peers);
2160 AST_LIST_TRAVERSE(&peers, p, entry) {
2161 if (!strncasecmp(p->name, word, wordlen) && ++which > state) {
2162 res = ast_strdup(p->name);
2166 AST_LIST_UNLOCK(&peers);
2172 static int iax2_show_stats(int fd, int argc, char *argv[])
2174 struct iax_frame *cur;
2175 int cnt = 0, dead=0, final=0;
2178 return RESULT_SHOWUSAGE;
2180 AST_LIST_LOCK(&queue);
2181 AST_LIST_TRAVERSE(&queue, cur, list) {
2182 if (cur->retries < 0)
2188 AST_LIST_UNLOCK(&queue);
2190 ast_cli(fd, " IAX Statistics\n");
2191 ast_cli(fd, "---------------------\n");
2192 ast_cli(fd, "Outstanding frames: %d (%d ingress, %d egress)\n", iax_get_frames(), iax_get_iframes(), iax_get_oframes());
2193 ast_cli(fd, "%d timed and %d untimed transmits; MTU %d/%d/%d\n", trunk_timed, trunk_untimed,
2194 trunk_maxmtu, trunk_nmaxmtu, global_max_trunk_mtu);
2196 ast_cli(fd, "Packets in transmit queue: %d dead, %d final, %d total\n\n", dead, final, cnt);
2198 trunk_timed = trunk_untimed = 0;
2199 if (trunk_maxmtu > trunk_nmaxmtu)
2200 trunk_nmaxmtu = trunk_maxmtu;
2202 return RESULT_SUCCESS;
2205 /*! \brief Set trunk MTU from CLI */
2206 static int iax2_set_mtu(int fd, int argc, char *argv[])
2211 return RESULT_SHOWUSAGE;
2212 if (strncasecmp(argv[3], "default", strlen(argv[3])) == 0)
2213 mtuv = MAX_TRUNK_MTU;
2215 mtuv = atoi(argv[3]);
2218 ast_cli(fd, "Trunk MTU control disabled (mtu was %d)\n", global_max_trunk_mtu);
2219 global_max_trunk_mtu = 0;
2220 return RESULT_SUCCESS;
2222 if (mtuv < 172 || mtuv > 4000) {
2223 ast_cli(fd, "Trunk MTU must be between 172 and 4000\n");
2224 return RESULT_SHOWUSAGE;
2226 ast_cli(fd, "Trunk MTU changed from %d to %d\n", global_max_trunk_mtu, mtuv);
2227 global_max_trunk_mtu = mtuv;
2228 return RESULT_SUCCESS;
2231 static int iax2_show_cache(int fd, int argc, char *argv[])
2233 struct iax2_dpcache *dp = NULL;
2234 char tmp[1024], *pc = NULL;
2238 gettimeofday(&tv, NULL);
2240 AST_LIST_LOCK(&dpcache);
2242 ast_cli(fd, "%-20.20s %-12.12s %-9.9s %-8.8s %s\n", "Peer/Context", "Exten", "Exp.", "Wait.", "Flags");
2244 AST_LIST_TRAVERSE(&dpcache, dp, cache_list) {
2245 s = dp->expiry.tv_sec - tv.tv_sec;
2247 if (dp->flags & CACHE_FLAG_EXISTS)
2248 strncat(tmp, "EXISTS|", sizeof(tmp) - strlen(tmp) - 1);
2249 if (dp->flags & CACHE_FLAG_NONEXISTENT)
2250 strncat(tmp, "NONEXISTENT|", sizeof(tmp) - strlen(tmp) - 1);
2251 if (dp->flags & CACHE_FLAG_CANEXIST)
2252 strncat(tmp, "CANEXIST|", sizeof(tmp) - strlen(tmp) - 1);
2253 if (dp->flags & CACHE_FLAG_PENDING)
2254 strncat(tmp, "PENDING|", sizeof(tmp) - strlen(tmp) - 1);
2255 if (dp->flags & CACHE_FLAG_TIMEOUT)
2256 strncat(tmp, "TIMEOUT|", sizeof(tmp) - strlen(tmp) - 1);
2257 if (dp->flags & CACHE_FLAG_TRANSMITTED)
2258 strncat(tmp, "TRANSMITTED|", sizeof(tmp) - strlen(tmp) - 1);
2259 if (dp->flags & CACHE_FLAG_MATCHMORE)
2260 strncat(tmp, "MATCHMORE|", sizeof(tmp) - strlen(tmp) - 1);
2261 if (dp->flags & CACHE_FLAG_UNKNOWN)
2262 strncat(tmp, "UNKNOWN|", sizeof(tmp) - strlen(tmp) - 1);
2263 /* Trim trailing pipe */
2264 if (!ast_strlen_zero(tmp))
2265 tmp[strlen(tmp) - 1] = '\0';
2267 ast_copy_string(tmp, "(none)", sizeof(tmp));
2269 pc = strchr(dp->peercontext, '@');
2271 pc = dp->peercontext;
2274 for (x=0;x<sizeof(dp->waiters) / sizeof(dp->waiters[0]); x++)
2275 if (dp->waiters[x] > -1)
2278 ast_cli(fd, "%-20.20s %-12.12s %-9d %-8d %s\n", pc, dp->exten, s, y, tmp);
2280 ast_cli(fd, "%-20.20s %-12.12s %-9.9s %-8d %s\n", pc, dp->exten, "(expired)", y, tmp);
2283 AST_LIST_LOCK(&dpcache);
2285 return RESULT_SUCCESS;
2288 static unsigned int calc_rxstamp(struct chan_iax2_pvt *p, unsigned int offset);
2290 static void unwrap_timestamp(struct iax_frame *fr)
2294 if ( (fr->ts & 0xFFFF0000) == (iaxs[fr->callno]->last & 0xFFFF0000) ) {
2295 x = fr->ts - iaxs[fr->callno]->last;
2297 /* Sudden big jump backwards in timestamp:
2298 What likely happened here is that miniframe timestamp has circled but we haven't
2299 gotten the update from the main packet. We'll just pretend that we did, and
2300 update the timestamp appropriately. */
2301 fr->ts = ( (iaxs[fr->callno]->last & 0xFFFF0000) + 0x10000) | (fr->ts & 0xFFFF);
2302 if (option_debug && iaxdebug)
2303 ast_log(LOG_DEBUG, "schedule_delivery: pushed forward timestamp\n");
2306 /* Sudden apparent big jump forwards in timestamp:
2307 What's likely happened is this is an old miniframe belonging to the previous
2308 top-16-bit timestamp that has turned up out of order.
2309 Adjust the timestamp appropriately. */
2310 fr->ts = ( (iaxs[fr->callno]->last & 0xFFFF0000) - 0x10000) | (fr->ts & 0xFFFF);
2311 if (option_debug && iaxdebug)
2312 ast_log(LOG_DEBUG, "schedule_delivery: pushed back timestamp\n");
2317 static int get_from_jb(void *p);
2319 static void update_jbsched(struct chan_iax2_pvt *pvt)
2323 when = ast_tvdiff_ms(ast_tvnow(), pvt->rxcore);
2325 when = jb_next(pvt->jb) - when;
2327 if(pvt->jbid > -1) ast_sched_del(sched, pvt->jbid);
2330 /* XXX should really just empty until when > 0.. */
2334 pvt->jbid = ast_sched_add(sched, when, get_from_jb, CALLNO_TO_PTR(pvt->callno));
2336 /* Signal scheduler thread */
2337 signal_condition(&sched_lock, &sched_cond);
2340 static void __get_from_jb(void *p)
2342 int callno = PTR_TO_CALLNO(p);
2343 struct chan_iax2_pvt *pvt = NULL;
2344 struct iax_frame *fr;
2351 /* Make sure we have a valid private structure before going on */
2352 ast_mutex_lock(&iaxsl[callno]);
2356 ast_mutex_unlock(&iaxsl[callno]);
2362 gettimeofday(&tv,NULL);
2363 /* round up a millisecond since ast_sched_runq does; */
2364 /* prevents us from spinning while waiting for our now */
2365 /* to catch up with runq's now */
2368 now = ast_tvdiff_ms(tv, pvt->rxcore);
2370 if(now >= (next = jb_next(pvt->jb))) {
2371 ret = jb_get(pvt->jb,&frame,now,ast_codec_interp_len(pvt->voiceformat));
2379 struct ast_frame af = { 0, };
2381 /* create an interpolation frame */
2382 af.frametype = AST_FRAME_VOICE;
2383 af.subclass = pvt->voiceformat;
2384 af.samples = frame.ms * 8;
2385 af.src = "IAX2 JB interpolation";
2386 af.delivery = ast_tvadd(pvt->rxcore, ast_samp2tv(next, 1000));
2387 af.offset = AST_FRIENDLY_OFFSET;
2389 /* queue the frame: For consistency, we would call __do_deliver here, but __do_deliver wants an iax_frame,
2390 * which we'd need to malloc, and then it would free it. That seems like a drag */
2391 if (!ast_test_flag(iaxs[callno], IAX_ALREADYGONE))
2392 iax2_queue_frame(callno, &af);
2396 iax2_frame_free(frame.data);
2403 /* shouldn't happen */
2407 update_jbsched(pvt);
2408 ast_mutex_unlock(&iaxsl[callno]);
2411 static int get_from_jb(void *data)
2413 #ifdef SCHED_MULTITHREADED
2414 if (schedule_action(__get_from_jb, data))
2416 __get_from_jb(data);
2420 static int schedule_delivery(struct iax_frame *fr, int updatehistory, int fromtrunk, unsigned int *tsout)
2426 /* Attempt to recover wrapped timestamps */
2427 unwrap_timestamp(fr);
2430 /* delivery time is sender's sent timestamp converted back into absolute time according to our clock */
2431 if ( !fromtrunk && !ast_tvzero(iaxs[fr->callno]->rxcore))
2432 fr->af.delivery = ast_tvadd(iaxs[fr->callno]->rxcore, ast_samp2tv(fr->ts, 1000));
2436 ast_log(LOG_DEBUG, "schedule_delivery: set delivery to 0 as we don't have an rxcore yet, or frame is from trunk.\n");
2438 fr->af.delivery = ast_tv(0,0);
2441 type = JB_TYPE_CONTROL;
2444 if(fr->af.frametype == AST_FRAME_VOICE) {
2445 type = JB_TYPE_VOICE;
2446 len = ast_codec_get_samples(&fr->af) / 8;
2447 } else if(fr->af.frametype == AST_FRAME_CNG) {
2448 type = JB_TYPE_SILENCE;
2451 if ( (!ast_test_flag(iaxs[fr->callno], IAX_USEJITTERBUF)) ) {
2458 /* if the user hasn't requested we force the use of the jitterbuffer, and we're bridged to
2459 * a channel that can accept jitter, then flush and suspend the jb, and send this frame straight through */
2460 if( (!ast_test_flag(iaxs[fr->callno], IAX_FORCEJITTERBUF)) &&
2461 iaxs[fr->callno]->owner && ast_bridged_channel(iaxs[fr->callno]->owner) &&
2462 (ast_bridged_channel(iaxs[fr->callno]->owner)->tech->properties & AST_CHAN_TP_WANTSJITTER)) {
2465 /* deliver any frames in the jb */
2466 while(jb_getall(iaxs[fr->callno]->jb,&frame) == JB_OK)
2467 __do_deliver(frame.data);
2469 jb_reset(iaxs[fr->callno]->jb);
2471 if (iaxs[fr->callno]->jbid > -1)
2472 ast_sched_del(sched, iaxs[fr->callno]->jbid);
2474 iaxs[fr->callno]->jbid = -1;
2476 /* deliver this frame now */
2483 /* insert into jitterbuffer */
2484 /* TODO: Perhaps we could act immediately if it's not droppable and late */
2485 ret = jb_put(iaxs[fr->callno]->jb, fr, type, len, fr->ts,
2486 calc_rxstamp(iaxs[fr->callno],fr->ts));
2487 if (ret == JB_DROP) {
2489 } else if (ret == JB_SCHED) {
2490 update_jbsched(iaxs[fr->callno]);
2495 /* Free our iax frame */
2496 iax2_frame_free(fr);
2502 static int iax2_transmit(struct iax_frame *fr)
2504 /* Lock the queue and place this packet at the end */
2505 /* By setting this to 0, the network thread will send it for us, and
2506 queue retransmission if necessary */
2508 AST_LIST_LOCK(&queue);
2509 AST_LIST_INSERT_TAIL(&queue, fr, list);
2510 AST_LIST_UNLOCK(&queue);
2511 /* Wake up the network and scheduler thread */
2512 if (netthreadid != AST_PTHREADT_NULL)
2513 pthread_kill(netthreadid, SIGURG);
2514 signal_condition(&sched_lock, &sched_cond);
2520 static int iax2_digit_begin(struct ast_channel *c, char digit)
2522 return send_command_locked(PTR_TO_CALLNO(c->tech_pvt), AST_FRAME_DTMF_BEGIN, digit, 0, NULL, 0, -1);
2525 static int iax2_digit_end(struct ast_channel *c, char digit, unsigned int duration)
2527 return send_command_locked(PTR_TO_CALLNO(c->tech_pvt), AST_FRAME_DTMF_END, digit, 0, NULL, 0, -1);
2530 static int iax2_sendtext(struct ast_channel *c, const char *text)
2533 return send_command_locked(PTR_TO_CALLNO(c->tech_pvt), AST_FRAME_TEXT,
2534 0, 0, (unsigned char *)text, strlen(text) + 1, -1);
2537 static int iax2_sendimage(struct ast_channel *c, struct ast_frame *img)
2539 return send_command_locked(PTR_TO_CALLNO(c->tech_pvt), AST_FRAME_IMAGE, img->subclass, 0, img->data, img->datalen, -1);
2542 static int iax2_sendhtml(struct ast_channel *c, int subclass, const char *data, int datalen)
2544 return send_command_locked(PTR_TO_CALLNO(c->tech_pvt), AST_FRAME_HTML, subclass, 0, (unsigned char *)data, datalen, -1);
2547 static int iax2_fixup(struct ast_channel *oldchannel, struct ast_channel *newchan)
2549 unsigned short callno = PTR_TO_CALLNO(newchan->tech_pvt);
2550 ast_mutex_lock(&iaxsl[callno]);
2552 iaxs[callno]->owner = newchan;
2554 ast_log(LOG_WARNING, "Uh, this isn't a good sign...\n");
2555 ast_mutex_unlock(&iaxsl[callno]);
2559 static struct iax2_peer *realtime_peer(const char *peername, struct sockaddr_in *sin)
2561 struct ast_variable *var;
2562 struct ast_variable *tmp;
2563 struct iax2_peer *peer=NULL;
2564 time_t regseconds = 0, nowtime;
2568 var = ast_load_realtime("iaxpeers", "name", peername, NULL);
2571 sprintf(porta, "%d", ntohs(sin->sin_port));
2572 var = ast_load_realtime("iaxpeers", "ipaddr", ast_inet_ntoa(sin->sin_addr), "port", porta, NULL);
2574 /* We'll need the peer name in order to build the structure! */
2575 for (tmp = var; tmp; tmp = tmp->next) {
2576 if (!strcasecmp(tmp->name, "name"))
2577 peername = tmp->value;
2584 peer = build_peer(peername, var, NULL, ast_test_flag((&globalflags), IAX_RTCACHEFRIENDS) ? 0 : 1);
2587 ast_variables_destroy(var);
2591 for (tmp = var; tmp; tmp = tmp->next) {
2592 /* Make sure it's not a user only... */
2593 if (!strcasecmp(tmp->name, "type")) {
2594 if (strcasecmp(tmp->value, "friend") &&
2595 strcasecmp(tmp->value, "peer")) {
2596 /* Whoops, we weren't supposed to exist! */
2601 } else if (!strcasecmp(tmp->name, "regseconds")) {
2602 ast_get_time_t(tmp->value, ®seconds, 0, NULL);
2603 } else if (!strcasecmp(tmp->name, "ipaddr")) {
2604 inet_aton(tmp->value, &(peer->addr.sin_addr));
2605 } else if (!strcasecmp(tmp->name, "port")) {
2606 peer->addr.sin_port = htons(atoi(tmp->value));
2607 } else if (!strcasecmp(tmp->name, "host")) {
2608 if (!strcasecmp(tmp->value, "dynamic"))
2613 ast_variables_destroy(var);
2618 if (ast_test_flag((&globalflags), IAX_RTCACHEFRIENDS)) {
2619 ast_copy_flags(peer, &globalflags, IAX_RTAUTOCLEAR|IAX_RTCACHEFRIENDS);
2620 if (ast_test_flag(peer, IAX_RTAUTOCLEAR)) {
2621 if (peer->expire > -1)
2622 ast_sched_del(sched, peer->expire);
2623 peer->expire = ast_sched_add(sched, (global_rtautoclear) * 1000, expire_registry, (void*)peer->name);
2625 AST_LIST_LOCK(&peers);
2626 AST_LIST_INSERT_HEAD(&peers, peer, entry);
2627 AST_LIST_UNLOCK(&peers);
2628 if (ast_test_flag(peer, IAX_DYNAMIC))
2629 reg_source_db(peer);
2631 ast_set_flag(peer, IAX_TEMPONLY);
2634 if (!ast_test_flag(&globalflags, IAX_RTIGNOREREGEXPIRE) && dynamic) {
2636 if ((nowtime - regseconds) > IAX_DEFAULT_REG_EXPIRE) {
2637 memset(&peer->addr, 0, sizeof(peer->addr));
2638 realtime_update_peer(peer->name, &peer->addr, 0);
2640 ast_log(LOG_DEBUG, "realtime_peer: Bah, '%s' is expired (%d/%d/%d)!\n",
2641 peername, (int)(nowtime - regseconds), (int)regseconds, (int)nowtime);
2645 ast_log(LOG_DEBUG, "realtime_peer: Registration for '%s' still active (%d/%d/%d)!\n",
2646 peername, (int)(nowtime - regseconds), (int)regseconds, (int)nowtime);
2653 static struct iax2_user *realtime_user(const char *username)
2655 struct ast_variable *var;
2656 struct ast_variable *tmp;
2657 struct iax2_user *user=NULL;
2659 var = ast_load_realtime("iaxusers", "name", username, NULL);
2665 /* Make sure it's not a peer only... */
2666 if (!strcasecmp(tmp->name, "type")) {
2667 if (strcasecmp(tmp->value, "friend") &&
2668 strcasecmp(tmp->value, "user")) {
2675 user = build_user(username, var, NULL, !ast_test_flag((&globalflags), IAX_RTCACHEFRIENDS));
2677 ast_variables_destroy(var);
2682 if (ast_test_flag((&globalflags), IAX_RTCACHEFRIENDS)) {
2683 ast_set_flag(user, IAX_RTCACHEFRIENDS);
2684 AST_LIST_LOCK(&users);
2685 AST_LIST_INSERT_HEAD(&users, user, entry);
2686 AST_LIST_UNLOCK(&users);
2688 ast_set_flag(user, IAX_TEMPONLY);
2694 static void realtime_update_peer(const char *peername, struct sockaddr_in *sin, time_t regtime)
2697 char regseconds[20];
2699 snprintf(regseconds, sizeof(regseconds), "%d", (int)regtime);
2700 snprintf(port, sizeof(port), "%d", ntohs(sin->sin_port));
2701 ast_update_realtime("iaxpeers", "name", peername,
2702 "ipaddr", ast_inet_ntoa(sin->sin_addr), "port", port,
2703 "regseconds", regseconds, NULL);
2706 struct create_addr_info {
2719 char context[AST_MAX_CONTEXT];
2720 char peercontext[AST_MAX_CONTEXT];
2721 char mohinterpret[MAX_MUSICCLASS];
2722 char mohsuggest[MAX_MUSICCLASS];
2725 static int create_addr(const char *peername, struct sockaddr_in *sin, struct create_addr_info *cai)
2727 struct iax2_peer *peer;
2729 ast_clear_flag(cai, IAX_SENDANI | IAX_TRUNK);
2730 cai->sockfd = defaultsockfd;
2732 sin->sin_family = AF_INET;
2734 if (!(peer = find_peer(peername, 1))) {
2736 if (ast_get_ip_or_srv(sin, peername, srvlookup ? "_iax._udp" : NULL)) {
2737 ast_log(LOG_WARNING, "No such host: %s\n", peername);
2740 sin->sin_port = htons(IAX_DEFAULT_PORTNO);
2741 /* use global iax prefs for unknown peer/user */
2742 ast_codec_pref_convert(&prefs, cai->prefs, sizeof(cai->prefs), 1);
2748 /* if the peer has no address (current or default), return failure */
2749 if (!(peer->addr.sin_addr.s_addr || peer->defaddr.sin_addr.s_addr)) {
2750 if (ast_test_flag(peer, IAX_TEMPONLY))
2755 /* if the peer is being monitored and is currently unreachable, return failure */
2756 if (peer->maxms && ((peer->lastms > peer->maxms) || (peer->lastms < 0))) {
2757 if (ast_test_flag(peer, IAX_TEMPONLY))
2762 ast_copy_flags(cai, peer, IAX_SENDANI | IAX_TRUNK | IAX_NOTRANSFER | IAX_TRANSFERMEDIA | IAX_USEJITTERBUF | IAX_FORCEJITTERBUF);
2763 cai->maxtime = peer->maxms;
2764 cai->capability = peer->capability;
2765 cai->encmethods = peer->encmethods;
2766 cai->sockfd = peer->sockfd;
2767 cai->adsi = peer->adsi;
2768 ast_codec_pref_convert(&peer->prefs, cai->prefs, sizeof(cai->prefs), 1);
2769 ast_copy_string(cai->context, peer->context, sizeof(cai->context));
2770 ast_copy_string(cai->peercontext, peer->peercontext, sizeof(cai->peercontext));
2771 ast_copy_string(cai->username, peer->username, sizeof(cai->username));
2772 ast_copy_string(cai->timezone, peer->zonetag, sizeof(cai->timezone));
2773 ast_copy_string(cai->outkey, peer->outkey, sizeof(cai->outkey));
2774 ast_copy_string(cai->mohinterpret, peer->mohinterpret, sizeof(cai->mohinterpret));
2775 ast_copy_string(cai->mohsuggest, peer->mohsuggest, sizeof(cai->mohsuggest));
2776 if (ast_strlen_zero(peer->dbsecret)) {
2777 ast_copy_string(cai->secret, peer->secret, sizeof(cai->secret));
2782 family = ast_strdupa(peer->dbsecret);
2783 key = strchr(family, '/');
2786 if (!key || ast_db_get(family, key, cai->secret, sizeof(cai->secret))) {
2787 ast_log(LOG_WARNING, "Unable to retrieve database password for family/key '%s'!\n", peer->dbsecret);
2788 if (ast_test_flag(peer, IAX_TEMPONLY))
2794 if (peer->addr.sin_addr.s_addr) {
2795 sin->sin_addr = peer->addr.sin_addr;
2796 sin->sin_port = peer->addr.sin_port;
2798 sin->sin_addr = peer->defaddr.sin_addr;
2799 sin->sin_port = peer->defaddr.sin_port;
2802 if (ast_test_flag(peer, IAX_TEMPONLY))
2808 static void __auto_congest(void *nothing)
2810 int callno = PTR_TO_CALLNO(nothing);
2811 struct ast_frame f = { AST_FRAME_CONTROL, AST_CONTROL_CONGESTION };
2812 ast_mutex_lock(&iaxsl[callno]);
2814 iaxs[callno]->initid = -1;
2815 iax2_queue_frame(callno, &f);
2816 ast_log(LOG_NOTICE, "Auto-congesting call due to slow response\n");
2818 ast_mutex_unlock(&iaxsl[callno]);
2821 static int auto_congest(void *data)
2823 #ifdef SCHED_MULTITHREADED
2824 if (schedule_action(__auto_congest, data))
2826 __auto_congest(data);
2830 static unsigned int iax2_datetime(const char *tz)
2836 localtime_r(&t, &tm);
2837 if (!ast_strlen_zero(tz))
2838 ast_localtime(&t, &tm, tz);
2839 tmp = (tm.tm_sec >> 1) & 0x1f; /* 5 bits of seconds */
2840 tmp |= (tm.tm_min & 0x3f) << 5; /* 6 bits of minutes */
2841 tmp |= (tm.tm_hour & 0x1f) << 11; /* 5 bits of hours */
2842 tmp |= (tm.tm_mday & 0x1f) << 16; /* 5 bits of day of month */
2843 tmp |= ((tm.tm_mon + 1) & 0xf) << 21; /* 4 bits of month */
2844 tmp |= ((tm.tm_year - 100) & 0x7f) << 25; /* 7 bits of year */
2848 struct parsed_dial_string {
2860 * \brief Parses an IAX dial string into its component parts.
2861 * \param data the string to be parsed
2862 * \param pds pointer to a \c struct \c parsed_dial_string to be filled in
2865 * This function parses the string and fills the structure
2866 * with pointers to its component parts. The input string
2869 * \note This function supports both plaintext passwords and RSA
2870 * key names; if the password string is formatted as '[keyname]',
2871 * then the keyname will be placed into the key field, and the
2872 * password field will be set to NULL.
2874 * \note The dial string format is:
2875 * [username[:password]@]peer[:port][/exten[@@context]][/options]
2877 static void parse_dial_string(char *data, struct parsed_dial_string *pds)
2879 if (ast_strlen_zero(data))
2882 pds->peer = strsep(&data, "/");
2883 pds->exten = strsep(&data, "/");
2884 pds->options = data;
2888 pds->exten = strsep(&data, "@");
2889 pds->context = data;
2892 if (strchr(pds->peer, '@')) {
2894 pds->username = strsep(&data, "@");
2898 if (pds->username) {
2899 data = pds->username;
2900 pds->username = strsep(&data, ":");
2901 pds->password = data;
2905 pds->peer = strsep(&data, ":");
2908 /* check for a key name wrapped in [] in the secret position, if found,
2909 move it to the key field instead
2911 if (pds->password && (pds->password[0] == '[')) {
2912 pds->key = ast_strip_quoted(pds->password, "[", "]");
2913 pds->password = NULL;
2917 static int iax2_call(struct ast_channel *c, char *dest, int timeout)
2919 struct sockaddr_in sin;
2920 char *l=NULL, *n=NULL, *tmpstr;
2921 struct iax_ie_data ied;
2922 char *defaultrdest = "s";
2923 unsigned short callno = PTR_TO_CALLNO(c->tech_pvt);
2924 struct parsed_dial_string pds;
2925 struct create_addr_info cai;
2926 struct ast_var_t *var;
2927 const char* osp_token_ptr;
2928 unsigned int osp_token_length;
2929 unsigned char osp_block_index;
2930 unsigned int osp_block_length;
2931 unsigned char osp_buffer[256];
2933 if ((c->_state != AST_STATE_DOWN) && (c->_state != AST_STATE_RESERVED)) {
2934 ast_log(LOG_WARNING, "Channel is already in use (%s)?\n", c->name);
2938 memset(&cai, 0, sizeof(cai));
2939 cai.encmethods = iax2_encryption;
2941 memset(&pds, 0, sizeof(pds));
2942 tmpstr = ast_strdupa(dest);
2943 parse_dial_string(tmpstr, &pds);
2946 pds.exten = defaultrdest;
2948 if (create_addr(pds.peer, &sin, &cai)) {
2949 ast_log(LOG_WARNING, "No address associated with '%s'\n", pds.peer);
2953 if (!pds.username && !ast_strlen_zero(cai.username))
2954 pds.username = cai.username;
2955 if (!pds.password && !ast_strlen_zero(cai.secret))
2956 pds.password = cai.secret;
2957 if (!pds.key && !ast_strlen_zero(cai.outkey))
2958 pds.key = cai.outkey;
2959 if (!pds.context && !ast_strlen_zero(cai.peercontext))
2960 pds.context = cai.peercontext;
2962 /* Keep track of the context for outgoing calls too */
2963 ast_copy_string(c->context, cai.context, sizeof(c->context));
2966 sin.sin_port = htons(atoi(pds.port));
2969 n = c->cid.cid_name;
2971 /* Now build request */
2972 memset(&ied, 0, sizeof(ied));
2974 /* On new call, first IE MUST be IAX version of caller */
2975 iax_ie_append_short(&ied, IAX_IE_VERSION, IAX_PROTO_VERSION);
2976 iax_ie_append_str(&ied, IAX_IE_CALLED_NUMBER, pds.exten);
2977 if (pds.options && strchr(pds.options, 'a')) {
2978 /* Request auto answer */
2979 iax_ie_append(&ied, IAX_IE_AUTOANSWER);
2982 iax_ie_append_str(&ied, IAX_IE_CODEC_PREFS, cai.prefs);
2985 iax_ie_append_str(&ied, IAX_IE_CALLING_NUMBER, l);
2986 iax_ie_append_byte(&ied, IAX_IE_CALLINGPRES, c->cid.cid_pres);
2989 iax_ie_append_byte(&ied, IAX_IE_CALLINGPRES, c->cid.cid_pres);
2991 iax_ie_append_byte(&ied, IAX_IE_CALLINGPRES, AST_PRES_NUMBER_NOT_AVAILABLE);
2994 iax_ie_append_byte(&ied, IAX_IE_CALLINGTON, c->cid.cid_ton);
2995 iax_ie_append_short(&ied, IAX_IE_CALLINGTNS, c->cid.cid_tns);
2998 iax_ie_append_str(&ied, IAX_IE_CALLING_NAME, n);
2999 if (ast_test_flag(iaxs[callno], IAX_SENDANI) && c->cid.cid_ani)
3000 iax_ie_append_str(&ied, IAX_IE_CALLING_ANI, c->cid.cid_ani);
3002 if (!ast_strlen_zero(c->language))
3003 iax_ie_append_str(&ied, IAX_IE_LANGUAGE, c->language);
3004 if (!ast_strlen_zero(c->cid.cid_dnid))
3005 iax_ie_append_str(&ied, IAX_IE_DNID, c->cid.cid_dnid);
3006 if (!ast_strlen_zero(c->cid.cid_rdnis))
3007 iax_ie_append_str(&ied, IAX_IE_RDNIS, c->cid.cid_rdnis);
3010 iax_ie_append_str(&ied, IAX_IE_CALLED_CONTEXT, pds.context);
3013 iax_ie_append_str(&ied, IAX_IE_USERNAME, pds.username);
3016 iax_ie_append_short(&ied, IAX_IE_ENCRYPTION, cai.encmethods);
3018 ast_mutex_lock(&iaxsl[callno]);
3020 if (!ast_strlen_zero(c->context))
3021 ast_string_field_set(iaxs[callno], context, c->context);
3024 ast_string_field_set(iaxs[callno], username, pds.username);
3026 iaxs[callno]->encmethods = cai.encmethods;
3028 iaxs[callno]->adsi = cai.adsi;
3030 ast_string_field_set(iaxs[callno], mohinterpret, cai.mohinterpret);
3031 ast_string_field_set(iaxs[callno], mohsuggest, cai.mohsuggest);
3034 ast_string_field_set(iaxs[callno], outkey, pds.key);
3036 ast_string_field_set(iaxs[callno], secret, pds.password);
3038 iax_ie_append_int(&ied, IAX_IE_FORMAT, c->nativeformats);
3039 iax_ie_append_int(&ied, IAX_IE_CAPABILITY, iaxs[callno]->capability);
3040 iax_ie_append_short(&ied, IAX_IE_ADSICPE, c->adsicpe);
3041 iax_ie_append_int(&ied, IAX_IE_DATETIME, iax2_datetime(cai.timezone));
3043 if (iaxs[callno]->maxtime) {
3044 /* Initialize pingtime and auto-congest time */
3045 iaxs[callno]->pingtime = iaxs[callno]->maxtime / 2;
3046 iaxs[callno]->initid = ast_sched_add(sched, iaxs[callno]->maxtime * 2, auto_congest, CALLNO_TO_PTR(callno));
3047 } else if (autokill) {
3048 iaxs[callno]->pingtime = autokill / 2;
3049 iaxs[callno]->initid = ast_sched_add(sched, autokill * 2, auto_congest, CALLNO_TO_PTR(callno));
3052 /* Check if there is an OSP token set by IAXCHANINFO function */
3053 osp_token_ptr = iaxs[callno]->osptoken;
3054 if (!ast_strlen_zero(osp_token_ptr)) {
3055 if ((osp_token_length = strlen(osp_token_ptr)) <= IAX_MAX_OSPTOKEN_SIZE) {
3056 osp_block_index = 0;
3057 while (osp_token_length > 0) {
3058 osp_block_length = IAX_MAX_OSPBLOCK_SIZE < osp_token_length ? IAX_MAX_OSPBLOCK_SIZE : osp_token_length;
3059 osp_buffer[0] = osp_block_index;
3060 memcpy(osp_buffer + 1, osp_token_ptr, osp_block_length);
3061 iax_ie_append_raw(&ied, IAX_IE_OSPTOKEN, osp_buffer, osp_block_length + 1);
3063 osp_token_ptr += osp_block_length;
3064 osp_token_length -= osp_block_length;
3067 ast_log(LOG_WARNING, "OSP token is too long\n");
3068 } else if (option_debug && iaxdebug)
3069 ast_log(LOG_DEBUG, "OSP token is undefined\n");
3071 /* send the command using the appropriate socket for this peer */
3072 iaxs[callno]->sockfd = cai.sockfd;
3074 /* Add remote vars */
3075 AST_LIST_TRAVERSE(&c->varshead, var, entries) {
3076 if (!strncmp(ast_var_name(var), "~IAX2~", strlen("~IAX2~"))) {
3079 /* Automatically divide the value up into sized chunks */
3080 for (i = 0; i < strlen(ast_var_value(var)); i += 255 - (strlen(ast_var_name(var)) - strlen("~IAX2~") + 1)) {
3081 snprintf(tmp, sizeof(tmp), "%s=%s", ast_var_name(var) + strlen("~IAX2~"), ast_var_value(var) + i);
3082 iax_ie_append_str(&ied, IAX_IE_VARIABLE, tmp);
3087 /* Transmit the string in a "NEW" request */
3088 send_command(iaxs[callno], AST_FRAME_IAX, IAX_COMMAND_NEW, 0, ied.buf, ied.pos, -1);
3090 ast_mutex_unlock(&iaxsl[callno]);
3091 ast_setstate(c, AST_STATE_RINGING);
3096 static int iax2_hangup(struct ast_channel *c)
3098 unsigned short callno = PTR_TO_CALLNO(c->tech_pvt);
3100 struct iax_ie_data ied;
3101 memset(&ied, 0, sizeof(ied));
3102 ast_mutex_lock(&iaxsl[callno]);
3103 if (callno && iaxs[callno]) {
3105 ast_log(LOG_DEBUG, "We're hanging up %s now...\n", c->name);
3106 alreadygone = ast_test_flag(iaxs[callno], IAX_ALREADYGONE);
3107 /* Send the hangup unless we have had a transmission error or are already gone */
3108 iax_ie_append_byte(&ied, IAX_IE_CAUSECODE, (unsigned char)c->hangupcause);
3109 if (!iaxs[callno]->error && !alreadygone)
3110 send_command_final(iaxs[callno], AST_FRAME_IAX, IAX_COMMAND_HANGUP, 0, ied.buf, ied.pos, -1);
3111 /* Explicitly predestroy it */
3112 iax2_predestroy(callno);
3113 /* If we were already gone to begin with, destroy us now */
3116 ast_log(LOG_DEBUG, "Really destroying %s now...\n", c->name);
3117 iax2_destroy(callno);
3120 ast_mutex_unlock(&iaxsl[callno]);
3121 if (option_verbose > 2)
3122 ast_verbose(VERBOSE_PREFIX_3 "Hungup '%s'\n", c->name);
3126 static int iax2_setoption(struct ast_channel *c, int option, void *data, int datalen)
3128 struct ast_option_header *h;
3132 case AST_OPTION_TXGAIN:
3133 case AST_OPTION_RXGAIN:
3134 /* these two cannot be sent, because they require a result */
3138 if (!(h = ast_malloc(datalen + sizeof(*h))))
3141 h->flag = AST_OPTION_FLAG_REQUEST;
3142 h->option = htons(option);
3143 memcpy(h->data, data, datalen);
3144 res = send_command_locked(PTR_TO_CALLNO(c->tech_pvt), AST_FRAME_CONTROL,
3145 AST_CONTROL_OPTION, 0, (unsigned char *) h,
3146 datalen + sizeof(*h), -1);
3152 static struct ast_frame *iax2_read(struct ast_channel *c)
3154 ast_log(LOG_NOTICE, "I should never be called!\n");
3155 return &ast_null_frame;
3158 static int iax2_start_transfer(unsigned short callno0, unsigned short callno1, int mediaonly)
3161 struct iax_ie_data ied0;
3162 struct iax_ie_data ied1;
3163 unsigned int transferid = (unsigned int)ast_random();
3164 memset(&ied0, 0, sizeof(ied0));
3165 iax_ie_append_addr(&ied0, IAX_IE_APPARENT_ADDR, &iaxs[callno1]->addr);
3166 iax_ie_append_short(&ied0, IAX_IE_CALLNO, iaxs[callno1]->peercallno);
3167 iax_ie_append_int(&ied0, IAX_IE_TRANSFERID, transferid);
3169 memset(&ied1, 0, sizeof(ied1));
3170 iax_ie_append_addr(&ied1, IAX_IE_APPARENT_ADDR, &iaxs[callno0]->addr);
3171 iax_ie_append_short(&ied1, IAX_IE_CALLNO, iaxs[callno0]->peercallno);
3172 iax_ie_append_int(&ied1, IAX_IE_TRANSFERID, transferid);
3174 res = send_command(iaxs[callno0], AST_FRAME_IAX, IAX_COMMAND_TXREQ, 0, ied0.buf, ied0.pos, -1);
3177 res = send_command(iaxs[callno1], AST_FRAME_IAX, IAX_COMMAND_TXREQ, 0, ied1.buf, ied1.pos, -1);
3180 iaxs[callno0]->transferring = mediaonly ? TRANSFER_MBEGIN : TRANSFER_BEGIN;
3181 iaxs[callno1]->transferring = mediaonly ? TRANSFER_MBEGIN : TRANSFER_BEGIN;
3185 static void lock_both(unsigned short callno0, unsigned short callno1)
3187 ast_mutex_lock(&iaxsl[callno0]);
3188 while (ast_mutex_trylock(&iaxsl[callno1])) {
3189 ast_mutex_unlock(&iaxsl[callno0]);