c797b87505f1153e79caf7e5f3a286d0ea048666
[asterisk/asterisk.git] / channels / chan_iax2.c
1 /*
2  * Asterisk -- An open source telephony toolkit.
3  *
4  * Copyright (C) 1999 - 2006, Digium, Inc.
5  *
6  * Mark Spencer <markster@digium.com>
7  *
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.
13  *
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.
17  */
18
19 /*! \file
20  *
21  * \brief Implementation of Inter-Asterisk eXchange Version 2
22  *        as specified in RFC 5456
23  *
24  * \author Mark Spencer <markster@digium.com>
25  *
26  * \par See also
27  * \arg \ref Config_iax
28  *
29  * \ingroup channel_drivers
30  *
31  * \todo Implement musicclass settings for IAX2 devices
32  */
33
34 /*! \li \ref chan_iax2.c uses the configuration file \ref iax.conf
35  * \addtogroup configuration_file
36  */
37
38 /*! \page iax.conf iax.conf
39  * \verbinclude iax.conf.sample
40  */
41
42 /*!
43  * \todo XXX The IAX2 channel driver needs its native bridge
44  * code converted to the new bridge technology scheme.
45  *
46  * \note The chan_dahdi native bridge code can be used as an
47  * example.  It also appears that chan_iax2 also has a native
48  * transfer check like chan_dahdi to eliminate tromboned calls.
49  *
50  * \note The existing native bridge code is marked with the
51  * IAX2_NATIVE_BRIDGING conditional.
52  */
53
54 /*** MODULEINFO
55         <use type="external">crypto</use>
56         <support_level>core</support_level>
57  ***/
58
59 #include "asterisk.h"
60
61 ASTERISK_REGISTER_FILE()
62
63 #include <sys/mman.h>
64 #include <dirent.h>
65 #include <sys/socket.h>
66 #include <netinet/in.h>
67 #include <arpa/inet.h>
68 #include <netinet/in_systm.h>
69 #include <netinet/ip.h>
70 #include <sys/time.h>
71 #include <sys/signal.h>
72 #include <signal.h>
73 #include <strings.h>
74 #include <netdb.h>
75 #include <fcntl.h>
76 #include <sys/stat.h>
77 #include <regex.h>
78
79 #include "asterisk/paths.h"
80
81 #include "asterisk/lock.h"
82 #include "asterisk/frame.h"
83 #include "asterisk/channel.h"
84 #include "asterisk/module.h"
85 #include "asterisk/pbx.h"
86 #include "asterisk/sched.h"
87 #include "asterisk/io.h"
88 #include "asterisk/config.h"
89 #include "asterisk/cli.h"
90 #include "asterisk/translate.h"
91 #include "asterisk/md5.h"
92 #include "asterisk/crypto.h"
93 #include "asterisk/acl.h"
94 #include "asterisk/manager.h"
95 #include "asterisk/callerid.h"
96 #include "asterisk/app.h"
97 #include "asterisk/astdb.h"
98 #include "asterisk/musiconhold.h"
99 #include "asterisk/features.h"
100 #include "asterisk/utils.h"
101 #include "asterisk/causes.h"
102 #include "asterisk/localtime.h"
103 #include "asterisk/dnsmgr.h"
104 #include "asterisk/devicestate.h"
105 #include "asterisk/netsock.h"
106 #include "asterisk/stringfields.h"
107 #include "asterisk/linkedlists.h"
108 #include "asterisk/astobj2.h"
109 #include "asterisk/timing.h"
110 #include "asterisk/taskprocessor.h"
111 #include "asterisk/test.h"
112 #include "asterisk/data.h"
113 #include "asterisk/security_events.h"
114 #include "asterisk/stasis_endpoints.h"
115 #include "asterisk/bridge.h"
116 #include "asterisk/stasis.h"
117 #include "asterisk/stasis_system.h"
118 #include "asterisk/stasis_channels.h"
119 #include "asterisk/format_cache.h"
120 #include "asterisk/format_compatibility.h"
121 #include "asterisk/format_cap.h"
122
123 #include "iax2/include/iax2.h"
124 #include "iax2/include/firmware.h"
125 #include "iax2/include/parser.h"
126 #include "iax2/include/provision.h"
127 #include "iax2/include/codec_pref.h"
128 #include "iax2/include/format_compatibility.h"
129
130 #include "jitterbuf.h"
131
132 /*** DOCUMENTATION
133         <application name="IAX2Provision" language="en_US">
134                 <synopsis>
135                         Provision a calling IAXy with a given template.
136                 </synopsis>
137                 <syntax>
138                         <parameter name="template">
139                                 <para>If not specified, defaults to <literal>default</literal>.</para>
140                         </parameter>
141                 </syntax>
142                 <description>
143                         <para>Provisions the calling IAXy (assuming the calling entity is in fact an IAXy) with the
144                         given <replaceable>template</replaceable>. Returns <literal>-1</literal> on error
145                         or <literal>0</literal> on success.</para>
146                 </description>
147         </application>
148         <function name="IAXPEER" language="en_US">
149                 <synopsis>
150                         Gets IAX peer information.
151                 </synopsis>
152                 <syntax>
153                         <parameter name="peername" required="true">
154                                 <enumlist>
155                                         <enum name="CURRENTCHANNEL">
156                                                 <para>If <replaceable>peername</replaceable> is specified to this value, return the IP address of the
157                                                 endpoint of the current channel</para>
158                                         </enum>
159                                 </enumlist>
160                         </parameter>
161                         <parameter name="item">
162                                 <para>If <replaceable>peername</replaceable> is specified, valid items are:</para>
163                                 <enumlist>
164                                         <enum name="ip">
165                                                 <para>(default) The IP address.</para>
166                                         </enum>
167                                         <enum name="status">
168                                                 <para>The peer's status (if <literal>qualify=yes</literal>)</para>
169                                         </enum>
170                                         <enum name="mailbox">
171                                                 <para>The configured mailbox.</para>
172                                         </enum>
173                                         <enum name="context">
174                                                 <para>The configured context.</para>
175                                         </enum>
176                                         <enum name="expire">
177                                                 <para>The epoch time of the next expire.</para>
178                                         </enum>
179                                         <enum name="dynamic">
180                                                 <para>Is it dynamic? (yes/no).</para>
181                                         </enum>
182                                         <enum name="callerid_name">
183                                                 <para>The configured Caller ID name.</para>
184                                         </enum>
185                                         <enum name="callerid_num">
186                                                 <para>The configured Caller ID number.</para>
187                                         </enum>
188                                         <enum name="codecs">
189                                                 <para>The configured codecs.</para>
190                                         </enum>
191                                         <enum name="codec[x]">
192                                                 <para>Preferred codec index number <replaceable>x</replaceable> (beginning
193                                                 with <literal>0</literal>)</para>
194                                         </enum>
195                                 </enumlist>
196                         </parameter>
197                 </syntax>
198                 <description>
199                         <para>Gets information associated with the specified IAX2 peer.</para>
200                 </description>
201                 <see-also>
202                         <ref type="function">SIPPEER</ref>
203                 </see-also>
204         </function>
205         <function name="IAXVAR" language="en_US">
206                 <synopsis>
207                         Sets or retrieves a remote variable.
208                 </synopsis>
209                 <syntax>
210                         <parameter name="varname" required="true" />
211                 </syntax>
212                 <description>
213                         <para>Gets or sets a variable that is sent to a remote IAX2 peer during call setup.</para>
214                 </description>
215         </function>
216         <manager name="IAXpeers" language="en_US">
217                 <synopsis>
218                         List IAX peers.
219                 </synopsis>
220                 <syntax>
221                         <xi:include xpointer="xpointer(/docs/manager[@name='Login']/syntax/parameter[@name='ActionID'])" />
222                 </syntax>
223                 <description>
224                 </description>
225         </manager>
226         <manager name="IAXpeerlist" language="en_US">
227                 <synopsis>
228                         List IAX Peers.
229                 </synopsis>
230                 <syntax>
231                         <xi:include xpointer="xpointer(/docs/manager[@name='Login']/syntax/parameter[@name='ActionID'])" />
232                 </syntax>
233                 <description>
234                         <para>List all the IAX peers.</para>
235                 </description>
236         </manager>
237         <manager name="IAXnetstats" language="en_US">
238                 <synopsis>
239                         Show IAX Netstats.
240                 </synopsis>
241                 <syntax />
242                 <description>
243                         <para>Show IAX channels network statistics.</para>
244                 </description>
245         </manager>
246         <manager name="IAXregistry" language="en_US">
247                 <synopsis>
248                         Show IAX registrations.
249                 </synopsis>
250                 <syntax>
251                         <xi:include xpointer="xpointer(/docs/manager[@name='Login']/syntax/parameter[@name='ActionID'])" />
252                 </syntax>
253                 <description>
254                         <para>Show IAX registrations.</para>
255                 </description>
256         </manager>
257  ***/
258
259 /* Define SCHED_MULTITHREADED to run the scheduler in a special
260    multithreaded mode. */
261 #define SCHED_MULTITHREADED
262
263 /* Define DEBUG_SCHED_MULTITHREADED to keep track of where each
264    thread is actually doing. */
265 #define DEBUG_SCHED_MULTITHREAD
266
267
268 #ifdef SO_NO_CHECK
269 static int nochecksums = 0;
270 #endif
271
272 #define PTR_TO_CALLNO(a) ((unsigned short)(unsigned long)(a))
273 #define CALLNO_TO_PTR(a) ((void *)(unsigned long)(a))
274
275 #define DEFAULT_THREAD_COUNT 10
276 #define DEFAULT_MAX_THREAD_COUNT 100
277 #define DEFAULT_RETRY_TIME 1000
278 #define MEMORY_SIZE 100
279 #define DEFAULT_DROP 3
280
281 #define DEBUG_SUPPORT
282
283 #define MIN_REUSE_TIME          60      /* Don't reuse a call number within 60 seconds */
284
285 /* Sample over last 100 units to determine historic jitter */
286 #define GAMMA (0.01)
287
288 static struct iax2_codec_pref prefs_global;
289
290 static const char tdesc[] = "Inter Asterisk eXchange Driver (Ver 2)";
291
292
293 /*! \brief Maximum transmission unit for the UDP packet in the trunk not to be
294     fragmented. This is based on 1516 - ethernet - ip - udp - iax minus one g711 frame = 1240 */
295 #define MAX_TRUNK_MTU 1240
296
297 static int global_max_trunk_mtu;        /*!< Maximum MTU, 0 if not used */
298 static int trunk_timed, trunk_untimed, trunk_maxmtu, trunk_nmaxmtu ;    /*!< Trunk MTU statistics */
299
300 #define DEFAULT_CONTEXT "default"
301
302 static char default_parkinglot[AST_MAX_CONTEXT];
303
304 static char language[MAX_LANGUAGE] = "";
305 static char regcontext[AST_MAX_CONTEXT] = "";
306
307 static struct stasis_subscription *network_change_sub; /*!< subscription id for network change events */
308 static struct stasis_subscription *acl_change_sub; /*!< subscription id for ACL change events */
309 static int network_change_sched_id = -1;
310
311 static int maxauthreq = 3;
312 static int max_retries = 4;
313 static int ping_time = 21;
314 static int lagrq_time = 10;
315 static int maxjitterbuffer=1000;
316 static int resyncthreshold=1000;
317 static int maxjitterinterps=10;
318 static int jittertargetextra = 40; /* number of milliseconds the new jitter buffer adds on to its size */
319
320 #define MAX_TRUNKDATA           640 * 200       /*!< 40ms, uncompressed linear * 200 channels */
321
322 static int trunkfreq = 20;
323 static int trunkmaxsize = MAX_TRUNKDATA;
324
325 static int authdebug = 0;
326 static int autokill = 0;
327 static int iaxcompat = 0;
328 static int last_authmethod = 0;
329
330 static int iaxdefaultdpcache=10 * 60;   /* Cache dialplan entries for 10 minutes by default */
331
332 static int iaxdefaulttimeout = 5;               /* Default to wait no more than 5 seconds for a reply to come back */
333
334 static struct {
335         unsigned int tos;
336         unsigned int cos;
337 } qos = { 0, 0 };
338
339 static int min_reg_expire;
340 static int max_reg_expire;
341
342 static int srvlookup = 0;
343
344 static struct ast_timer *timer;                         /* Timer for trunking */
345
346 static struct ast_netsock_list *netsock;
347 static struct ast_netsock_list *outsock;                /*!< used if sourceaddress specified and bindaddr == INADDR_ANY */
348 static int defaultsockfd = -1;
349
350 static int (*iax2_regfunk)(const char *username, int onoff) = NULL;
351
352 /* Ethernet, etc */
353 #define IAX_CAPABILITY_FULLBANDWIDTH    0xFFFF
354 /* T1, maybe ISDN */
355 #define IAX_CAPABILITY_MEDBANDWIDTH (IAX_CAPABILITY_FULLBANDWIDTH & \
356                      ~AST_FORMAT_SLIN &      \
357                      ~AST_FORMAT_SLIN16 &    \
358                      ~AST_FORMAT_SIREN7 &       \
359                      ~AST_FORMAT_SIREN14 &      \
360                      ~AST_FORMAT_G719 &         \
361                      ~AST_FORMAT_ULAW &         \
362                      ~AST_FORMAT_ALAW &         \
363                      ~AST_FORMAT_G722)
364 /* A modem */
365 #define IAX_CAPABILITY_LOWBANDWIDTH (IAX_CAPABILITY_MEDBANDWIDTH & \
366                      ~AST_FORMAT_G726 &         \
367                      ~AST_FORMAT_G726_AAL2 &    \
368                      ~AST_FORMAT_ADPCM)
369
370 #define IAX_CAPABILITY_LOWFREE      (IAX_CAPABILITY_LOWBANDWIDTH & \
371                      ~AST_FORMAT_G723)
372
373
374 #define DEFAULT_MAXMS           2000            /* Must be faster than 2 seconds by default */
375 #define DEFAULT_FREQ_OK         60 * 1000       /* How often to check for the host to be up */
376 #define DEFAULT_FREQ_NOTOK      10 * 1000       /* How often to check, if the host is down... */
377
378 /* if a pvt has encryption setup done and is running on the call */
379 #define IAX_CALLENCRYPTED(pvt) \
380         (ast_test_flag64(pvt, IAX_ENCRYPTED) && ast_test_flag64(pvt, IAX_KEYPOPULATED))
381
382 #define IAX_DEBUGDIGEST(msg, key) do { \
383                 int idx; \
384                 char digest[33] = ""; \
385                 \
386                 if (!iaxdebug) \
387                         break; \
388                 \
389                 for (idx = 0; idx < 16; idx++) \
390                         sprintf(digest + (idx << 1), "%02hhx", (unsigned char) key[idx]); \
391                 \
392                 ast_log(LOG_NOTICE, msg " IAX_COMMAND_RTKEY to rotate key to '%s'\n", digest); \
393         } while(0)
394
395 static struct io_context *io;
396 static struct ast_sched_context *sched;
397
398 #define DONT_RESCHEDULE -2
399
400 static iax2_format iax2_capability = IAX_CAPABILITY_FULLBANDWIDTH;
401
402 static int iaxdebug = 0;
403
404 static int iaxtrunkdebug = 0;
405
406 static int test_losspct = 0;
407 #ifdef IAXTESTS
408 static int test_late = 0;
409 static int test_resync = 0;
410 static int test_jit = 0;
411 static int test_jitpct = 0;
412 #endif /* IAXTESTS */
413
414 static char accountcode[AST_MAX_ACCOUNT_CODE];
415 static char mohinterpret[MAX_MUSICCLASS];
416 static char mohsuggest[MAX_MUSICCLASS];
417 static int amaflags = 0;
418 static int adsi = 0;
419 static int delayreject = 0;
420 static int iax2_encryption = 0;
421
422 static struct ast_flags64 globalflags = { 0 };
423
424 static pthread_t netthreadid = AST_PTHREADT_NULL;
425
426 enum iax2_state {
427         IAX_STATE_STARTED =                     (1 << 0),
428         IAX_STATE_AUTHENTICATED =       (1 << 1),
429         IAX_STATE_TBD =                         (1 << 2),
430 };
431
432 struct iax2_context {
433         char context[AST_MAX_CONTEXT];
434         struct iax2_context *next;
435 };
436
437
438 #define IAX_HASCALLERID         (uint64_t)(1LLU << 0)    /*!< CallerID has been specified */
439 #define IAX_DELME               (uint64_t)(1LLU << 1)    /*!< Needs to be deleted */
440 #define IAX_TEMPONLY            (uint64_t)(1LLU << 2)    /*!< Temporary (realtime) */
441 #define IAX_TRUNK               (uint64_t)(1LLU << 3)    /*!< Treat as a trunk */
442 #define IAX_NOTRANSFER          (uint64_t)(1LLU << 4)    /*!< Don't native bridge */
443 #define IAX_USEJITTERBUF        (uint64_t)(1LLU << 5)    /*!< Use jitter buffer */
444 #define IAX_DYNAMIC             (uint64_t)(1LLU << 6)    /*!< dynamic peer */
445 #define IAX_SENDANI             (uint64_t)(1LLU << 7)    /*!< Send ANI along with CallerID */
446 #define IAX_RTSAVE_SYSNAME      (uint64_t)(1LLU << 8)    /*!< Save Systname on Realtime Updates */
447 #define IAX_ALREADYGONE         (uint64_t)(1LLU << 9)    /*!< Already disconnected */
448 #define IAX_PROVISION           (uint64_t)(1LLU << 10)   /*!< This is a provisioning request */
449 #define IAX_QUELCH              (uint64_t)(1LLU << 11)   /*!< Whether or not we quelch audio */
450 #define IAX_ENCRYPTED           (uint64_t)(1LLU << 12)   /*!< Whether we should assume encrypted tx/rx */
451 #define IAX_KEYPOPULATED        (uint64_t)(1LLU << 13)   /*!< Whether we have a key populated */
452 #define IAX_CODEC_USER_FIRST    (uint64_t)(1LLU << 14)   /*!< are we willing to let the other guy choose the codec? */
453 #define IAX_CODEC_NOPREFS       (uint64_t)(1LLU << 15)   /*!< Force old behaviour by turning off prefs */
454 #define IAX_CODEC_NOCAP         (uint64_t)(1LLU << 16)   /*!< only consider requested format and ignore capabilities*/
455 #define IAX_RTCACHEFRIENDS      (uint64_t)(1LLU << 17)   /*!< let realtime stay till your reload */
456 #define IAX_RTUPDATE            (uint64_t)(1LLU << 18)   /*!< Send a realtime update */
457 #define IAX_RTAUTOCLEAR         (uint64_t)(1LLU << 19)   /*!< erase me on expire */
458 #define IAX_RTIGNOREREGEXPIRE   (uint64_t)(1LLU << 21)   /*!< When using realtime, ignore registration expiration */
459 #define IAX_TRUNKTIMESTAMPS     (uint64_t)(1LLU << 22)   /*!< Send trunk timestamps */
460 #define IAX_TRANSFERMEDIA       (uint64_t)(1LLU << 23)   /*!< When doing IAX2 transfers, transfer media only */
461 #define IAX_MAXAUTHREQ          (uint64_t)(1LLU << 24)   /*!< Maximum outstanding AUTHREQ restriction is in place */
462 #define IAX_DELAYPBXSTART       (uint64_t)(1LLU << 25)   /*!< Don't start a PBX on the channel until the peer sends us a response, so that we've achieved a three-way handshake with them before sending voice or anything else */
463 #define IAX_ALLOWFWDOWNLOAD     (uint64_t)(1LLU << 26)   /*!< Allow the FWDOWNL command? */
464 #define IAX_IMMEDIATE           (uint64_t)(1LLU << 27)   /*!< Allow immediate off-hook to extension s */
465 #define IAX_SENDCONNECTEDLINE   (uint64_t)(1LLU << 28)   /*!< Allow sending of connected line updates */
466 #define IAX_RECVCONNECTEDLINE   (uint64_t)(1LLU << 29)   /*!< Allow receiving of connected line updates */
467 #define IAX_FORCE_ENCRYPT       (uint64_t)(1LLU << 30)   /*!< Forces call encryption, if encryption not possible hangup */
468 #define IAX_SHRINKCALLERID      (uint64_t)(1LLU << 31)   /*!< Turn on and off caller id shrinking */
469 static int global_rtautoclear = 120;
470
471 static int reload_config(int forced_reload);
472
473 /*!
474  * \brief Call token validation settings.
475  */
476 enum calltoken_peer_enum {
477         /*! \brief Default calltoken required unless the ip is in the ignorelist */
478         CALLTOKEN_DEFAULT = 0,
479         /*! \brief Require call token validation. */
480         CALLTOKEN_YES = 1,
481         /*! \brief Require call token validation after a successful registration
482          *         using call token validation occurs. */
483         CALLTOKEN_AUTO = 2,
484         /*! \brief Do not require call token validation. */
485         CALLTOKEN_NO = 3,
486 };
487
488 struct iax2_user {
489         AST_DECLARE_STRING_FIELDS(
490                 AST_STRING_FIELD(name);
491                 AST_STRING_FIELD(secret);
492                 AST_STRING_FIELD(dbsecret);
493                 AST_STRING_FIELD(accountcode);
494                 AST_STRING_FIELD(mohinterpret);
495                 AST_STRING_FIELD(mohsuggest);
496                 AST_STRING_FIELD(inkeys);               /*!< Key(s) this user can use to authenticate to us */
497                 AST_STRING_FIELD(language);
498                 AST_STRING_FIELD(cid_num);
499                 AST_STRING_FIELD(cid_name);
500                 AST_STRING_FIELD(parkinglot);           /*!< Default parkinglot for device */
501         );
502
503         int authmethods;
504         int encmethods;
505         int amaflags;
506         int adsi;
507         uint64_t flags;
508         iax2_format capability;
509         int maxauthreq; /*!< Maximum allowed outstanding AUTHREQs */
510         int curauthreq; /*!< Current number of outstanding AUTHREQs */
511         struct iax2_codec_pref prefs;
512         struct ast_acl_list *acl;
513         struct iax2_context *contexts;
514         struct ast_variable *vars;
515         enum calltoken_peer_enum calltoken_required;        /*!< Is calltoken validation required or not, can be YES, NO, or AUTO */
516 };
517
518 struct iax2_peer {
519         AST_DECLARE_STRING_FIELDS(
520                 AST_STRING_FIELD(name);
521                 AST_STRING_FIELD(username);
522                 AST_STRING_FIELD(description);          /*!< Description of the peer */
523                 AST_STRING_FIELD(secret);
524                 AST_STRING_FIELD(dbsecret);
525                 AST_STRING_FIELD(outkey);           /*!< What key we use to talk to this peer */
526
527                 AST_STRING_FIELD(regexten);     /*!< Extension to register (if regcontext is used) */
528                 AST_STRING_FIELD(context);      /*!< For transfers only */
529                 AST_STRING_FIELD(peercontext);  /*!< Context to pass to peer */
530                 AST_STRING_FIELD(mailbox);          /*!< Mailbox */
531                 AST_STRING_FIELD(mohinterpret);
532                 AST_STRING_FIELD(mohsuggest);
533                 AST_STRING_FIELD(inkeys);               /*!< Key(s) this peer can use to authenticate to us */
534                 /* Suggested caller id if registering */
535                 AST_STRING_FIELD(cid_num);              /*!< Default context (for transfer really) */
536                 AST_STRING_FIELD(cid_name);             /*!< Default context (for transfer really) */
537                 AST_STRING_FIELD(zonetag);              /*!< Time Zone */
538                 AST_STRING_FIELD(parkinglot);   /*!< Default parkinglot for device */
539         );
540         struct iax2_codec_pref prefs;
541         struct ast_dnsmgr_entry *dnsmgr;                /*!< DNS refresh manager */
542         struct ast_sockaddr addr;
543         int formats;
544         int sockfd;                                     /*!< Socket to use for transmission */
545         struct ast_sockaddr mask;
546         int adsi;
547         uint64_t flags;
548
549         /* Dynamic Registration fields */
550         struct ast_sockaddr defaddr;                    /*!< Default address if there is one */
551         int authmethods;                                /*!< Authentication methods (IAX_AUTH_*) */
552         int encmethods;                                 /*!< Encryption methods (IAX_ENCRYPT_*) */
553
554         int expire;                                     /*!< Schedule entry for expiry */
555         int expiry;                                     /*!< How soon to expire */
556         iax2_format capability;                         /*!< Capability */
557
558         /* Qualification */
559         int callno;                                     /*!< Call number of POKE request */
560         int pokeexpire;                                 /*!< Scheduled qualification-related task (ie iax2_poke_peer_s or iax2_poke_noanswer) */
561         int lastms;                                     /*!< How long last response took (in ms), or -1 for no response */
562         int maxms;                                      /*!< Max ms we will accept for the host to be up, 0 to not monitor */
563
564         int pokefreqok;                                 /*!< How often to check if the host is up */
565         int pokefreqnotok;                              /*!< How often to check when the host has been determined to be down */
566         int historicms;                                 /*!< How long recent average responses took */
567         int smoothing;                                  /*!< Sample over how many units to determine historic ms */
568         uint16_t maxcallno;                             /*!< Max call number limit for this peer.  Set on registration */
569
570         struct stasis_subscription *mwi_event_sub;      /*!< This subscription lets pollmailboxes know which mailboxes need to be polled */
571
572         struct ast_acl_list *acl;
573         enum calltoken_peer_enum calltoken_required;    /*!< Is calltoken validation required or not, can be YES, NO, or AUTO */
574
575         struct ast_endpoint *endpoint; /*!< Endpoint structure for this peer */
576 };
577
578 #define IAX2_TRUNK_PREFACE (sizeof(struct iax_frame) + sizeof(struct ast_iax2_meta_hdr) + sizeof(struct ast_iax2_meta_trunk_hdr))
579
580 struct iax2_trunk_peer {
581         ast_mutex_t lock;
582         int sockfd;
583         struct ast_sockaddr addr;
584         struct timeval txtrunktime;             /*!< Transmit trunktime */
585         struct timeval rxtrunktime;             /*!< Receive trunktime */
586         struct timeval lasttxtime;              /*!< Last transmitted trunktime */
587         struct timeval trunkact;                /*!< Last trunk activity */
588         unsigned int lastsent;                  /*!< Last sent time */
589         /* Trunk data and length */
590         unsigned char *trunkdata;
591         unsigned int trunkdatalen;
592         unsigned int trunkdataalloc;
593         int trunkmaxmtu;
594         int trunkerror;
595         int calls;
596         AST_LIST_ENTRY(iax2_trunk_peer) list;
597 };
598
599 static AST_LIST_HEAD_STATIC(tpeers, iax2_trunk_peer);
600
601 enum iax_reg_state {
602         REG_STATE_UNREGISTERED = 0,
603         REG_STATE_REGSENT,
604         REG_STATE_AUTHSENT,
605         REG_STATE_REGISTERED,
606         REG_STATE_REJECTED,
607         REG_STATE_TIMEOUT,
608         REG_STATE_NOAUTH
609 };
610
611 enum iax_transfer_state {
612         TRANSFER_NONE = 0,
613         TRANSFER_BEGIN,
614         TRANSFER_READY,
615         TRANSFER_RELEASED,
616         TRANSFER_PASSTHROUGH,
617         TRANSFER_MBEGIN,
618         TRANSFER_MREADY,
619         TRANSFER_MRELEASED,
620         TRANSFER_MPASSTHROUGH,
621         TRANSFER_MEDIA,
622         TRANSFER_MEDIAPASS
623 };
624
625 struct iax2_registry {
626         struct ast_sockaddr addr;               /*!< Who we connect to for registration purposes */
627         char username[80];
628         char secret[80];                        /*!< Password or key name in []'s */
629         int expire;                             /*!< Sched ID of expiration */
630         int refresh;                            /*!< How often to refresh */
631         enum iax_reg_state regstate;
632         int messages;                           /*!< Message count, low 8 bits = new, high 8 bits = old */
633         int callno;                             /*!< Associated call number if applicable */
634         struct ast_sockaddr us;                 /*!< Who the server thinks we are */
635         struct ast_dnsmgr_entry *dnsmgr;        /*!< DNS refresh manager */
636         AST_LIST_ENTRY(iax2_registry) entry;
637         int port;
638         char hostname[];
639 };
640
641 static AST_LIST_HEAD_STATIC(registrations, iax2_registry);
642
643 /* Don't retry more frequently than every 10 ms, or less frequently than every 5 seconds */
644 #define MIN_RETRY_TIME          100
645 #define MAX_RETRY_TIME          10000
646
647 #define MAX_JITTER_BUFFER       50
648 #define MIN_JITTER_BUFFER       10
649
650 #define DEFAULT_TRUNKDATA       640 * 10        /*!< 40ms, uncompressed linear * 10 channels */
651
652 #define MAX_TIMESTAMP_SKEW      160             /*!< maximum difference between actual and predicted ts for sending */
653
654 /* If consecutive voice frame timestamps jump by more than this many milliseconds, then jitter buffer will resync */
655 #define TS_GAP_FOR_JB_RESYNC    5000
656
657 /* used for first_iax_message and last_iax_message.  If this bit is set it was TX, else RX */
658 #define MARK_IAX_SUBCLASS_TX    0x8000
659
660 static int iaxthreadcount = DEFAULT_THREAD_COUNT;
661 static int iaxmaxthreadcount = DEFAULT_MAX_THREAD_COUNT;
662 static int iaxdynamicthreadcount = 0;
663 static int iaxdynamicthreadnum = 0;
664 static int iaxactivethreadcount = 0;
665
666 struct iax_rr {
667         int jitter;
668         int losspct;
669         int losscnt;
670         int packets;
671         int delay;
672         int dropped;
673         int ooo;
674 };
675
676 struct iax2_pvt_ref;
677
678 /* We use the high order bit as the validated flag, and the lower 15 as the
679  * actual call number */
680 typedef uint16_t callno_entry;
681
682 struct chan_iax2_pvt {
683         /*! Socket to send/receive on for this call */
684         int sockfd;
685         /*! ast_callid bound to dialog */
686         ast_callid callid;
687         /*! Last received voice format */
688         iax2_format voiceformat;
689         /*! Last received video format */
690         iax2_format videoformat;
691         /*! Last sent voice format */
692         iax2_format svoiceformat;
693         /*! Last sent video format */
694         iax2_format svideoformat;
695         /*! What we are capable of sending */
696         iax2_format capability;
697         /*! Last received timestamp */
698         unsigned int last;
699         /*! Last sent timestamp - never send the same timestamp twice in a single call */
700         unsigned int lastsent;
701         /*! Timestamp of the last video frame sent */
702         unsigned int lastvsent;
703         /*! Next outgoing timestamp if everything is good */
704         unsigned int nextpred;
705         /*! iax frame subclass that began iax2_pvt entry. 0x8000 bit is set on TX */
706         int first_iax_message;
707         /*! Last iax frame subclass sent or received for a iax2_pvt. 0x8000 bit is set on TX */
708         int last_iax_message;
709         /*! True if the last voice we transmitted was not silence/CNG */
710         unsigned int notsilenttx:1;
711         /*! Ping time */
712         unsigned int pingtime;
713         /*! Max time for initial response */
714         int maxtime;
715         /*! Peer Address */
716         struct ast_sockaddr addr;
717         /*! Actual used codec preferences */
718         struct iax2_codec_pref prefs;
719         /*! Requested codec preferences */
720         struct iax2_codec_pref rprefs;
721         /*! Our call number */
722         unsigned short callno;
723         /*! Our callno_entry entry */
724         callno_entry callno_entry;
725         /*! Peer callno */
726         unsigned short peercallno;
727         /*! Negotiated format, this is only used to remember what format was
728             chosen for an unauthenticated call so that the channel can get
729             created later using the right format */
730         iax2_format chosenformat;
731         /*! Peer selected format */
732         iax2_format peerformat;
733         /*! Peer capability */
734         iax2_format peercapability;
735         /*! timeval that we base our transmission on */
736         struct timeval offset;
737         /*! timeval that we base our delivery on */
738         struct timeval rxcore;
739         /*! The jitterbuffer */
740         jitterbuf *jb;
741         /*! active jb read scheduler id */
742         int jbid;
743         /*! LAG */
744         int lag;
745         /*! Error, as discovered by the manager */
746         int error;
747         /*! Owner if we have one */
748         struct ast_channel *owner;
749         /*! What's our state? */
750         struct ast_flags state;
751         /*! Expiry (optional) */
752         int expiry;
753         /*! Next outgoing sequence number */
754         unsigned char oseqno;
755         /*! Next sequence number they have not yet acknowledged */
756         unsigned char rseqno;
757         /*! Next incoming sequence number */
758         unsigned char iseqno;
759         /*! Last incoming sequence number we have acknowledged */
760         unsigned char aseqno;
761
762         AST_DECLARE_STRING_FIELDS(
763                 /*! Peer name */
764                 AST_STRING_FIELD(peer);
765                 /*! Default Context */
766                 AST_STRING_FIELD(context);
767                 /*! Caller ID if available */
768                 AST_STRING_FIELD(cid_num);
769                 AST_STRING_FIELD(cid_name);
770                 /*! Hidden Caller ID (i.e. ANI) if appropriate */
771                 AST_STRING_FIELD(ani);
772                 /*! DNID */
773                 AST_STRING_FIELD(dnid);
774                 /*! RDNIS */
775                 AST_STRING_FIELD(rdnis);
776                 /*! Requested Extension */
777                 AST_STRING_FIELD(exten);
778                 /*! Expected Username */
779                 AST_STRING_FIELD(username);
780                 /*! Expected Secret */
781                 AST_STRING_FIELD(secret);
782                 /*! MD5 challenge */
783                 AST_STRING_FIELD(challenge);
784                 /*! Public keys permitted keys for incoming authentication */
785                 AST_STRING_FIELD(inkeys);
786                 /*! Private key for outgoing authentication */
787                 AST_STRING_FIELD(outkey);
788                 /*! Preferred language */
789                 AST_STRING_FIELD(language);
790                 /*! Hostname/peername for naming purposes */
791                 AST_STRING_FIELD(host);
792
793                 AST_STRING_FIELD(dproot);
794                 AST_STRING_FIELD(accountcode);
795                 AST_STRING_FIELD(mohinterpret);
796                 AST_STRING_FIELD(mohsuggest);
797                 /*! received OSP token */
798                 AST_STRING_FIELD(osptoken);
799                 /*! Default parkinglot */
800                 AST_STRING_FIELD(parkinglot);
801         );
802         /*! AUTHREJ all AUTHREP frames */
803         int authrej;
804         /*! permitted authentication methods */
805         int authmethods;
806         /*! permitted encryption methods */
807         int encmethods;
808         /*! Encryption AES-128 Key */
809         ast_aes_encrypt_key ecx;
810         /*! Decryption AES-128 Key corresponding to ecx */
811         ast_aes_decrypt_key mydcx;
812         /*! Decryption AES-128 Key used to decrypt peer frames */
813         ast_aes_decrypt_key dcx;
814         /*! scheduler id associated with iax_key_rotate
815          * for encrypted calls*/
816         int keyrotateid;
817         /*! 32 bytes of semi-random data */
818         unsigned char semirand[32];
819         /*! Associated registry */
820         struct iax2_registry *reg;
821         /*! Associated peer for poking */
822         struct iax2_peer *peerpoke;
823         /*! IAX_ flags */
824         uint64_t flags;
825         int adsi;
826
827         /*! Transferring status */
828         enum iax_transfer_state transferring;
829         /*! Transfer identifier */
830         int transferid;
831         /*! Who we are IAX transferring to */
832         struct ast_sockaddr transfer;
833         /*! What's the new call number for the transfer */
834         unsigned short transfercallno;
835         /*! Transfer encrypt AES-128 Key */
836         ast_aes_encrypt_key tdcx;
837
838         /*! Status of knowledge of peer ADSI capability */
839         int peeradsicpe;
840
841         /*! Callno of native bridge peer. (Valid if nonzero) */
842         unsigned short bridgecallno;
843
844         int pingid;                     /*!< Transmit PING request */
845         int lagid;                      /*!< Retransmit lag request */
846         int autoid;                     /*!< Auto hangup for Dialplan requestor */
847         int authid;                     /*!< Authentication rejection ID */
848         int authfail;                   /*!< Reason to report failure */
849         int initid;                     /*!< Initial peer auto-congest ID (based on qualified peers) */
850         int calling_ton;
851         int calling_tns;
852         int calling_pres;
853         int amaflags;
854         AST_LIST_HEAD_NOLOCK(, iax2_dpcache) dpentries;
855         /*! variables inherited from the user definition */
856         struct ast_variable *vars;
857         /*! variables transmitted in a NEW packet */
858         struct ast_variable *iaxvars;
859         /*! last received remote rr */
860         struct iax_rr remote_rr;
861         /*! Current base time: (just for stats) */
862         int min;
863         /*! Dropped frame count: (just for stats) */
864         int frames_dropped;
865         /*! received frame count: (just for stats) */
866         int frames_received;
867         /*! num bytes used for calltoken ie, even an empty ie should contain 2 */
868         unsigned char calltoken_ie_len;
869         /*! hold all signaling frames from the pbx thread until we have a destination callno */
870         char hold_signaling;
871         /*! frame queue for signaling frames from pbx thread waiting for destination callno */
872         AST_LIST_HEAD_NOLOCK(signaling_queue, signaling_queue_entry) signaling_queue;
873 };
874
875 struct signaling_queue_entry {
876         struct ast_frame f;
877         AST_LIST_ENTRY(signaling_queue_entry) next;
878 };
879
880 enum callno_type {
881         CALLNO_TYPE_NORMAL,
882         CALLNO_TYPE_TRUNK,
883 };
884
885 #define PTR_TO_CALLNO_ENTRY(a) ((uint16_t)(unsigned long)(a))
886 #define CALLNO_ENTRY_TO_PTR(a) ((void *)(unsigned long)(a))
887
888 #define CALLNO_ENTRY_SET_VALIDATED(a) ((a) |= 0x8000)
889 #define CALLNO_ENTRY_IS_VALIDATED(a)  ((a) & 0x8000)
890 #define CALLNO_ENTRY_GET_CALLNO(a)    ((a) & 0x7FFF)
891
892 struct call_number_pool {
893         size_t capacity;
894         size_t available;
895         callno_entry numbers[IAX_MAX_CALLS / 2 + 1];
896 };
897
898 AST_MUTEX_DEFINE_STATIC(callno_pool_lock);
899
900 /*! table of available call numbers */
901 static struct call_number_pool callno_pool;
902
903 /*! table of available trunk call numbers */
904 static struct call_number_pool callno_pool_trunk;
905
906 /*!
907  * \brief a list of frames that may need to be retransmitted
908  *
909  * \note The contents of this list do not need to be explicitly destroyed
910  * on module unload.  This is because all active calls are destroyed, and
911  * all frames in this queue will get destroyed as a part of that process.
912  *
913  * \note Contents protected by the iaxsl[] locks
914  */
915 static AST_LIST_HEAD_NOLOCK(, iax_frame) frame_queue[IAX_MAX_CALLS];
916
917 static struct ast_taskprocessor *transmit_processor;
918
919 static int randomcalltokendata;
920
921 static time_t max_calltoken_delay = 10;
922
923 /*!
924  * This module will get much higher performance when doing a lot of
925  * user and peer lookups if the number of buckets is increased from 1.
926  * However, to maintain old behavior for Asterisk 1.4, these are set to
927  * 1 by default.  When using multiple buckets, search order through these
928  * containers is considered random, so you will not be able to depend on
929  * the order the entires are specified in iax.conf for matching order. */
930 #ifdef LOW_MEMORY
931 #define MAX_PEER_BUCKETS 17
932 #else
933 #define MAX_PEER_BUCKETS 563
934 #endif
935 static struct ao2_container *peers;
936
937 #define MAX_USER_BUCKETS MAX_PEER_BUCKETS
938 static struct ao2_container *users;
939
940 /*! Table containing peercnt objects for every ip address consuming a callno */
941 static struct ao2_container *peercnts;
942
943 /*! Table containing custom callno limit rules for a range of ip addresses. */
944 static struct ao2_container *callno_limits;
945
946 /*! Table containing ip addresses not requiring calltoken validation */
947 static struct ao2_container *calltoken_ignores;
948
949 static uint16_t DEFAULT_MAXCALLNO_LIMIT = 2048;
950
951 static uint16_t DEFAULT_MAXCALLNO_LIMIT_NONVAL = 8192;
952
953 static uint16_t global_maxcallno;
954
955 /*! Total num of call numbers allowed to be allocated without calltoken validation */
956 static uint16_t global_maxcallno_nonval;
957
958 static uint16_t total_nonval_callno_used = 0;
959
960 /*! peer connection private, keeps track of all the call numbers
961  *  consumed by a single ip address */
962 struct peercnt {
963         /*! ip address consuming call numbers */
964         struct ast_sockaddr addr;
965         /*! Number of call numbers currently used by this ip address */
966         uint16_t cur;
967         /*! Max call numbers allowed for this ip address */
968         uint16_t limit;
969         /*! Specifies whether limit is set by a registration or not, if so normal
970          *  limit setting rules do not apply to this address. */
971         unsigned char reg;
972 };
973
974 /*! used by both callno_limits and calltoken_ignores containers */
975 struct addr_range {
976         /*! ip address range for custom callno limit rule */
977         struct ast_ha ha;
978         /*! callno limit for this ip address range, only used in callno_limits container */
979         uint16_t limit;
980         /*! delete me marker for reloads */
981         unsigned char delme;
982 };
983
984 enum {
985         /*! Extension exists */
986         CACHE_FLAG_EXISTS      = (1 << 0),
987         /*! Extension is nonexistent */
988         CACHE_FLAG_NONEXISTENT = (1 << 1),
989         /*! Extension can exist */
990         CACHE_FLAG_CANEXIST    = (1 << 2),
991         /*! Waiting to hear back response */
992         CACHE_FLAG_PENDING     = (1 << 3),
993         /*! Timed out */
994         CACHE_FLAG_TIMEOUT     = (1 << 4),
995         /*! Request transmitted */
996         CACHE_FLAG_TRANSMITTED = (1 << 5),
997         /*! Timeout */
998         CACHE_FLAG_UNKNOWN     = (1 << 6),
999         /*! Matchmore */
1000         CACHE_FLAG_MATCHMORE   = (1 << 7),
1001 };
1002
1003 struct iax2_dpcache {
1004         char peercontext[AST_MAX_CONTEXT];
1005         char exten[AST_MAX_EXTENSION];
1006         struct timeval orig;
1007         struct timeval expiry;
1008         int flags;
1009         unsigned short callno;
1010         int waiters[256];
1011         AST_LIST_ENTRY(iax2_dpcache) cache_list;
1012         AST_LIST_ENTRY(iax2_dpcache) peer_list;
1013 };
1014
1015 static AST_LIST_HEAD_STATIC(dpcache, iax2_dpcache);
1016
1017 static void reg_source_db(struct iax2_peer *p);
1018 static struct iax2_peer *realtime_peer(const char *peername, struct ast_sockaddr *addr);
1019 static struct iax2_user *realtime_user(const char *username, struct ast_sockaddr *addr);
1020
1021 static int ast_cli_netstats(struct mansession *s, int fd, int limit_fmt);
1022 static char *complete_iax2_peers(const char *line, const char *word, int pos, int state, uint64_t flags);
1023 static char *complete_iax2_unregister(const char *line, const char *word, int pos, int state);
1024
1025 enum iax2_thread_iostate {
1026         IAX_IOSTATE_IDLE,
1027         IAX_IOSTATE_READY,
1028         IAX_IOSTATE_PROCESSING,
1029         IAX_IOSTATE_SCHEDREADY,
1030 };
1031
1032 enum iax2_thread_type {
1033         IAX_THREAD_TYPE_POOL,
1034         IAX_THREAD_TYPE_DYNAMIC,
1035 };
1036
1037 struct iax2_pkt_buf {
1038         AST_LIST_ENTRY(iax2_pkt_buf) entry;
1039         size_t len;
1040         unsigned char buf[1];
1041 };
1042
1043 struct iax2_thread {
1044         AST_LIST_ENTRY(iax2_thread) list;
1045         enum iax2_thread_type type;
1046         enum iax2_thread_iostate iostate;
1047 #ifdef SCHED_MULTITHREADED
1048         void (*schedfunc)(const void *);
1049         const void *scheddata;
1050 #endif
1051 #ifdef DEBUG_SCHED_MULTITHREAD
1052         char curfunc[80];
1053 #endif
1054         int actions;
1055         pthread_t threadid;
1056         int threadnum;
1057         struct ast_sockaddr ioaddr;
1058         unsigned char readbuf[4096];
1059         unsigned char *buf;
1060         ssize_t buf_len;
1061         size_t buf_size;
1062         int iofd;
1063         time_t checktime;
1064         ast_mutex_t lock;
1065         ast_cond_t cond;
1066         ast_mutex_t init_lock;
1067         ast_cond_t init_cond;
1068         /*! if this thread is processing a full frame,
1069           some information about that frame will be stored
1070           here, so we can avoid dispatching any more full
1071           frames for that callno to other threads */
1072         struct {
1073                 unsigned short callno;
1074                 struct ast_sockaddr addr;
1075                 unsigned char type;
1076                 unsigned char csub;
1077         } ffinfo;
1078         /*! Queued up full frames for processing.  If more full frames arrive for
1079          *  a call which this thread is already processing a full frame for, they
1080          *  are queued up here. */
1081         AST_LIST_HEAD_NOLOCK(, iax2_pkt_buf) full_frames;
1082         unsigned char stop;
1083 };
1084
1085 /* Thread lists */
1086 static AST_LIST_HEAD_STATIC(idle_list, iax2_thread);
1087 static AST_LIST_HEAD_STATIC(active_list, iax2_thread);
1088 static AST_LIST_HEAD_STATIC(dynamic_list, iax2_thread);
1089
1090 static void *iax2_process_thread(void *data);
1091 static void iax2_destroy(int callno);
1092
1093 static void signal_condition(ast_mutex_t *lock, ast_cond_t *cond)
1094 {
1095         ast_mutex_lock(lock);
1096         ast_cond_signal(cond);
1097         ast_mutex_unlock(lock);
1098 }
1099
1100 /*!
1101  * \brief an array of iax2 pvt structures
1102  *
1103  * The container for active chan_iax2_pvt structures is implemented as an
1104  * array for extremely quick direct access to the correct pvt structure
1105  * based on the local call number.  The local call number is used as the
1106  * index into the array where the associated pvt structure is stored.
1107  */
1108 static struct chan_iax2_pvt *iaxs[IAX_MAX_CALLS];
1109
1110 static ast_callid iax_pvt_callid_get(int callno)
1111 {
1112         return iaxs[callno]->callid;
1113 }
1114
1115 static void iax_pvt_callid_set(int callno, ast_callid callid)
1116 {
1117         iaxs[callno]->callid = callid;
1118 }
1119
1120 static void iax_pvt_callid_new(int callno)
1121 {
1122         ast_callid callid = ast_create_callid();
1123         char buffer[AST_CALLID_BUFFER_LENGTH];
1124         ast_callid_strnprint(buffer, sizeof(buffer), callid);
1125         iax_pvt_callid_set(callno, callid);
1126 }
1127
1128 /*!
1129  * \brief Another container of iax2_pvt structures
1130  *
1131  * Active IAX2 pvt structs are also stored in this container, if they are a part
1132  * of an active call where we know the remote side's call number.  The reason
1133  * for this is that incoming media frames do not contain our call number.  So,
1134  * instead of having to iterate the entire iaxs array, we use this container to
1135  * look up calls where the remote side is using a given call number.
1136  */
1137 static struct ao2_container *iax_peercallno_pvts;
1138
1139 /*!
1140  * \brief chan_iax2_pvt structure locks
1141  *
1142  * These locks are used when accessing a pvt structure in the iaxs array.
1143  * The index used here is the same as used in the iaxs array.  It is the
1144  * local call number for the associated pvt struct.
1145  */
1146 static ast_mutex_t iaxsl[ARRAY_LEN(iaxs)];
1147
1148 /*!
1149  *  * \brief Another container of iax2_pvt structures
1150  *
1151  *  Active IAX2 pvt stucts used during transfering a call are stored here.
1152  */
1153 static struct ao2_container *iax_transfercallno_pvts;
1154
1155 /* Flag to use with trunk calls, keeping these calls high up.  It halves our effective use
1156    but keeps the division between trunked and non-trunked better. */
1157 #define TRUNK_CALL_START        (IAX_MAX_CALLS / 2)
1158
1159 /* Debug routines... */
1160 static struct ast_sockaddr debugaddr;
1161
1162 static void iax_outputframe(struct iax_frame *f, struct ast_iax2_full_hdr *fhi, int rx, struct ast_sockaddr *addr, int datalen)
1163 {
1164         if (iaxdebug ||
1165             (addr && !ast_sockaddr_isnull(&debugaddr) &&
1166                 (!ast_sockaddr_port(&debugaddr) ||
1167                   ast_sockaddr_port(&debugaddr) == ast_sockaddr_port(addr)) &&
1168                   !ast_sockaddr_cmp_addr(&debugaddr, addr))) {
1169
1170                 if (iaxdebug) {
1171                         iax_showframe(f, fhi, rx, addr, datalen);
1172                 } else {
1173                         iaxdebug = 1;
1174                         iax_showframe(f, fhi, rx, addr, datalen);
1175                         iaxdebug = 0;
1176                 }
1177         }
1178 }
1179
1180 static void iax_debug_output(const char *data)
1181 {
1182         if (iaxdebug)
1183                 ast_verbose("%s", data);
1184 }
1185
1186 static void iax_error_output(const char *data)
1187 {
1188         ast_log(LOG_WARNING, "%s", data);
1189 }
1190
1191 static void __attribute__((format(printf, 1, 2))) jb_error_output(const char *fmt, ...)
1192 {
1193         va_list args;
1194         char buf[1024];
1195
1196         va_start(args, fmt);
1197         vsnprintf(buf, sizeof(buf), fmt, args);
1198         va_end(args);
1199
1200         ast_log(LOG_ERROR, "%s", buf);
1201 }
1202
1203 static void __attribute__((format(printf, 1, 2))) jb_warning_output(const char *fmt, ...)
1204 {
1205         va_list args;
1206         char buf[1024];
1207
1208         va_start(args, fmt);
1209         vsnprintf(buf, sizeof(buf), fmt, args);
1210         va_end(args);
1211
1212         ast_log(LOG_WARNING, "%s", buf);
1213 }
1214
1215 static void __attribute__((format(printf, 1, 2))) jb_debug_output(const char *fmt, ...)
1216 {
1217         va_list args;
1218         char buf[1024];
1219
1220         va_start(args, fmt);
1221         vsnprintf(buf, sizeof(buf), fmt, args);
1222         va_end(args);
1223
1224         ast_verbose("%s", buf);
1225 }
1226
1227 static int expire_registry(const void *data);
1228 static int iax2_answer(struct ast_channel *c);
1229 static int iax2_call(struct ast_channel *c, const char *dest, int timeout);
1230 static int iax2_devicestate(const char *data);
1231 static int iax2_digit_begin(struct ast_channel *c, char digit);
1232 static int iax2_digit_end(struct ast_channel *c, char digit, unsigned int duration);
1233 static int iax2_do_register(struct iax2_registry *reg);
1234 static int iax2_fixup(struct ast_channel *oldchannel, struct ast_channel *newchan);
1235 static int iax2_hangup(struct ast_channel *c);
1236 static int iax2_indicate(struct ast_channel *c, int condition, const void *data, size_t datalen);
1237 static int iax2_poke_peer(struct iax2_peer *peer, int heldcall);
1238 static int iax2_provision(struct ast_sockaddr *end, int sockfd, const char *dest, const char *template, int force);
1239 static int iax2_send(struct chan_iax2_pvt *pvt, struct ast_frame *f, unsigned int ts, int seqno, int now, int transfer, int final);
1240 static int iax2_sendhtml(struct ast_channel *c, int subclass, const char *data, int datalen);
1241 static int iax2_sendimage(struct ast_channel *c, struct ast_frame *img);
1242 static int iax2_sendtext(struct ast_channel *c, const char *text);
1243 static int iax2_setoption(struct ast_channel *c, int option, void *data, int datalen);
1244 static int iax2_queryoption(struct ast_channel *c, int option, void *data, int *datalen);
1245 static int iax2_transfer(struct ast_channel *c, const char *dest);
1246 static int iax2_write(struct ast_channel *c, struct ast_frame *f);
1247 static int iax2_sched_add(struct ast_sched_context *sched, int when, ast_sched_cb callback, const void *data);
1248
1249 static int send_trunk(struct iax2_trunk_peer *tpeer, struct timeval *now);
1250 static int send_command(struct chan_iax2_pvt *, char, int, unsigned int, const unsigned char *, int, int);
1251 static int send_command_final(struct chan_iax2_pvt *, char, int, unsigned int, const unsigned char *, int, int);
1252 static int send_command_immediate(struct chan_iax2_pvt *, char, int, unsigned int, const unsigned char *, int, int);
1253 static int send_command_locked(unsigned short callno, char, int, unsigned int, const unsigned char *, int, int);
1254 static int send_command_transfer(struct chan_iax2_pvt *, char, int, unsigned int, const unsigned char *, int);
1255 static struct ast_channel *iax2_request(const char *type, struct ast_format_cap *cap, const struct ast_assigned_ids *assignedids, const struct ast_channel *requestor, const char *data, int *cause);
1256 static struct ast_frame *iax2_read(struct ast_channel *c);
1257 static struct iax2_peer *build_peer(const char *name, struct ast_variable *v, struct ast_variable *alt, int temponly);
1258 static struct iax2_user *build_user(const char *name, struct ast_variable *v, struct ast_variable *alt, int temponly);
1259 static void realtime_update_peer(const char *peername, struct ast_sockaddr *sockaddr, time_t regtime);
1260 static void *iax2_dup_variable_datastore(void *);
1261 static void prune_peers(void);
1262 static void prune_users(void);
1263 static void iax2_free_variable_datastore(void *);
1264
1265 static int acf_channel_read(struct ast_channel *chan, const char *funcname, char *preparse, char *buf, size_t buflen);
1266 static int decode_frame(ast_aes_decrypt_key *dcx, struct ast_iax2_full_hdr *fh, struct ast_frame *f, int *datalen);
1267 static int encrypt_frame(ast_aes_encrypt_key *ecx, struct ast_iax2_full_hdr *fh, unsigned char *poo, int *datalen);
1268 static void build_ecx_key(const unsigned char *digest, struct chan_iax2_pvt *pvt);
1269 static void build_rand_pad(unsigned char *buf, ssize_t len);
1270 static int get_unused_callno(enum callno_type type, int validated, callno_entry *entry);
1271 static int replace_callno(const void *obj);
1272 static void sched_delay_remove(struct ast_sockaddr *addr, callno_entry entry);
1273 static void network_change_stasis_cb(void *data, struct stasis_subscription *sub, struct stasis_message *message);
1274 static void acl_change_stasis_cb(void *data, struct stasis_subscription *sub, struct stasis_message *message);
1275
1276 static struct ast_channel_tech iax2_tech = {
1277         .type = "IAX2",
1278         .description = tdesc,
1279         .properties = AST_CHAN_TP_WANTSJITTER,
1280         .requester = iax2_request,
1281         .devicestate = iax2_devicestate,
1282         .send_digit_begin = iax2_digit_begin,
1283         .send_digit_end = iax2_digit_end,
1284         .send_text = iax2_sendtext,
1285         .send_image = iax2_sendimage,
1286         .send_html = iax2_sendhtml,
1287         .call = iax2_call,
1288         .hangup = iax2_hangup,
1289         .answer = iax2_answer,
1290         .read = iax2_read,
1291         .write = iax2_write,
1292         .write_video = iax2_write,
1293         .indicate = iax2_indicate,
1294         .setoption = iax2_setoption,
1295         .queryoption = iax2_queryoption,
1296         .transfer = iax2_transfer,
1297         .fixup = iax2_fixup,
1298         .func_channel_read = acf_channel_read,
1299 };
1300
1301 /*!
1302  * \internal
1303  * \brief Obtain the owner channel lock if the owner exists.
1304  *
1305  * \param callno IAX2 call id.
1306  *
1307  * \note Assumes the iaxsl[callno] lock is already obtained.
1308  *
1309  * \note
1310  * IMPORTANT NOTE!!!  Any time this function is used, even if
1311  * iaxs[callno] was valid before calling it, it may no longer be
1312  * valid after calling it.  This function may unlock and lock
1313  * the mutex associated with this callno, meaning that another
1314  * thread may grab it and destroy the call.
1315  *
1316  * \return Nothing
1317  */
1318 static void iax2_lock_owner(int callno)
1319 {
1320         for (;;) {
1321                 if (!iaxs[callno] || !iaxs[callno]->owner) {
1322                         /* There is no owner lock to get. */
1323                         break;
1324                 }
1325                 if (!ast_channel_trylock(iaxs[callno]->owner)) {
1326                         /* We got the lock */
1327                         break;
1328                 }
1329                 /* Avoid deadlock by pausing and trying again */
1330                 DEADLOCK_AVOIDANCE(&iaxsl[callno]);
1331         }
1332 }
1333
1334 /*!
1335  * \internal
1336  * \brief Check if a control subtype is allowed on the wire.
1337  *
1338  * \param subtype Control frame subtype to check if allowed to/from the wire.
1339  *
1340  * \retval non-zero if allowed.
1341  */
1342 static int iax2_is_control_frame_allowed(int subtype)
1343 {
1344         enum ast_control_frame_type control = subtype;
1345         int is_allowed;
1346
1347         /*
1348          * Note: If we compare the enumeration type, which does not have any
1349          * negative constants, the compiler may optimize this code away.
1350          * Therefore, we must perform an integer comparison here.
1351          */
1352         if (subtype == -1) {
1353                 return -1;
1354         }
1355
1356         /* Default to not allowing control frames to pass. */
1357         is_allowed = 0;
1358
1359         /*
1360          * The switch default is not present in order to take advantage
1361          * of the compiler complaining of a missing enum case.
1362          */
1363         switch (control) {
1364         /*
1365          * These control frames make sense to send/receive across the link.
1366          */
1367         case AST_CONTROL_HANGUP:
1368         case AST_CONTROL_RING:
1369         case AST_CONTROL_RINGING:
1370         case AST_CONTROL_ANSWER:
1371         case AST_CONTROL_BUSY:
1372         case AST_CONTROL_TAKEOFFHOOK:
1373         case AST_CONTROL_OFFHOOK:
1374         case AST_CONTROL_CONGESTION:
1375         case AST_CONTROL_FLASH:
1376         case AST_CONTROL_WINK:
1377         case AST_CONTROL_OPTION:
1378         case AST_CONTROL_RADIO_KEY:
1379         case AST_CONTROL_RADIO_UNKEY:
1380         case AST_CONTROL_PROGRESS:
1381         case AST_CONTROL_PROCEEDING:
1382         case AST_CONTROL_HOLD:
1383         case AST_CONTROL_UNHOLD:
1384         case AST_CONTROL_VIDUPDATE:
1385         case AST_CONTROL_CONNECTED_LINE:
1386         case AST_CONTROL_REDIRECTING:
1387         case AST_CONTROL_T38_PARAMETERS:
1388         case AST_CONTROL_AOC:
1389         case AST_CONTROL_INCOMPLETE:
1390         case AST_CONTROL_MCID:
1391                 is_allowed = -1;
1392                 break;
1393
1394         /*
1395          * These control frames do not make sense to send/receive across the link.
1396          */
1397         case _XXX_AST_CONTROL_T38:
1398                 /* The control value is deprecated in favor of AST_CONTROL_T38_PARAMETERS. */
1399         case AST_CONTROL_SRCUPDATE:
1400                 /* Across an IAX link the source is still the same. */
1401         case AST_CONTROL_TRANSFER:
1402                 /* A success/fail status report from calling ast_transfer() on this machine. */
1403         case AST_CONTROL_CC:
1404                 /* The payload contains pointers that are valid for the sending machine only. */
1405         case AST_CONTROL_SRCCHANGE:
1406                 /* Across an IAX link the source is still the same. */
1407         case AST_CONTROL_READ_ACTION:
1408                 /* The action can only be done by the sending machine. */
1409         case AST_CONTROL_END_OF_Q:
1410                 /* This frame would cause the call to unexpectedly hangup. */
1411         case AST_CONTROL_UPDATE_RTP_PEER:
1412                 /* Only meaningful across a bridge on this machine for direct-media exchange. */
1413         case AST_CONTROL_PVT_CAUSE_CODE:
1414                 /* Intended only for the sending machine's local channel structure. */
1415         case AST_CONTROL_MASQUERADE_NOTIFY:
1416                 /* Intended only for masquerades when calling ast_indicate_data(). */
1417         case AST_CONTROL_STREAM_STOP:
1418         case AST_CONTROL_STREAM_SUSPEND:
1419         case AST_CONTROL_STREAM_RESTART:
1420         case AST_CONTROL_STREAM_REVERSE:
1421         case AST_CONTROL_STREAM_FORWARD:
1422                 /* None of these playback stream control frames should go across the link. */
1423         case AST_CONTROL_RECORD_CANCEL:
1424         case AST_CONTROL_RECORD_STOP:
1425         case AST_CONTROL_RECORD_SUSPEND:
1426         case AST_CONTROL_RECORD_MUTE:
1427                 /* None of these media recording control frames should go across the link. */
1428                 break;
1429         }
1430         return is_allowed;
1431 }
1432
1433 static void network_change_stasis_subscribe(void)
1434 {
1435         if (!network_change_sub) {
1436                 network_change_sub = stasis_subscribe(ast_system_topic(),
1437                         network_change_stasis_cb, NULL);
1438         }
1439 }
1440
1441 static void network_change_stasis_unsubscribe(void)
1442 {
1443         network_change_sub = stasis_unsubscribe_and_join(network_change_sub);
1444 }
1445
1446 static void acl_change_stasis_subscribe(void)
1447 {
1448         if (!acl_change_sub) {
1449                 acl_change_sub = stasis_subscribe(ast_security_topic(),
1450                         acl_change_stasis_cb, NULL);
1451         }
1452 }
1453
1454 static void acl_change_stasis_unsubscribe(void)
1455 {
1456         acl_change_sub = stasis_unsubscribe_and_join(acl_change_sub);
1457 }
1458
1459 static int network_change_sched_cb(const void *data)
1460 {
1461         struct iax2_registry *reg;
1462         network_change_sched_id = -1;
1463         AST_LIST_LOCK(&registrations);
1464         AST_LIST_TRAVERSE(&registrations, reg, entry) {
1465                 iax2_do_register(reg);
1466         }
1467         AST_LIST_UNLOCK(&registrations);
1468
1469         return 0;
1470 }
1471
1472 static void network_change_stasis_cb(void *data, struct stasis_subscription *sub,
1473         struct stasis_message *message)
1474 {
1475         /* This callback is only concerned with network change messages from the system topic. */
1476         if (stasis_message_type(message) != ast_network_change_type()) {
1477                 return;
1478         }
1479
1480         ast_verb(1, "IAX, got a network change message, renewing all IAX registrations.\n");
1481         if (network_change_sched_id == -1) {
1482                 network_change_sched_id = iax2_sched_add(sched, 1000, network_change_sched_cb, NULL);
1483         }
1484 }
1485
1486 static void acl_change_stasis_cb(void *data, struct stasis_subscription *sub,
1487         struct stasis_message *message)
1488 {
1489         if (stasis_message_type(message) != ast_named_acl_change_type()) {
1490                 return;
1491         }
1492
1493         ast_log(LOG_NOTICE, "Reloading chan_iax2 in response to ACL change event.\n");
1494         reload_config(1);
1495 }
1496
1497 static const struct ast_datastore_info iax2_variable_datastore_info = {
1498         .type = "IAX2_VARIABLE",
1499         .duplicate = iax2_dup_variable_datastore,
1500         .destroy = iax2_free_variable_datastore,
1501 };
1502
1503 static void *iax2_dup_variable_datastore(void *old)
1504 {
1505         AST_LIST_HEAD(, ast_var_t) *oldlist = old, *newlist;
1506         struct ast_var_t *oldvar, *newvar;
1507
1508         newlist = ast_calloc(sizeof(*newlist), 1);
1509         if (!newlist) {
1510                 ast_log(LOG_ERROR, "Unable to duplicate iax2 variables\n");
1511                 return NULL;
1512         }
1513
1514         AST_LIST_HEAD_INIT(newlist);
1515         AST_LIST_LOCK(oldlist);
1516         AST_LIST_TRAVERSE(oldlist, oldvar, entries) {
1517                 newvar = ast_var_assign(ast_var_name(oldvar), ast_var_value(oldvar));
1518                 if (newvar)
1519                         AST_LIST_INSERT_TAIL(newlist, newvar, entries);
1520                 else
1521                         ast_log(LOG_ERROR, "Unable to duplicate iax2 variable '%s'\n", ast_var_name(oldvar));
1522         }
1523         AST_LIST_UNLOCK(oldlist);
1524         return newlist;
1525 }
1526
1527 static void iax2_free_variable_datastore(void *old)
1528 {
1529         AST_LIST_HEAD(, ast_var_t) *oldlist = old;
1530         struct ast_var_t *oldvar;
1531
1532         AST_LIST_LOCK(oldlist);
1533         while ((oldvar = AST_LIST_REMOVE_HEAD(oldlist, entries))) {
1534                 ast_free(oldvar);
1535         }
1536         AST_LIST_UNLOCK(oldlist);
1537         AST_LIST_HEAD_DESTROY(oldlist);
1538         ast_free(oldlist);
1539 }
1540
1541
1542 /* WARNING: insert_idle_thread should only ever be called within the
1543  * context of an iax2_process_thread() thread.
1544  */
1545 static void insert_idle_thread(struct iax2_thread *thread)
1546 {
1547         if (thread->type == IAX_THREAD_TYPE_DYNAMIC) {
1548                 AST_LIST_LOCK(&dynamic_list);
1549                 AST_LIST_INSERT_TAIL(&dynamic_list, thread, list);
1550                 AST_LIST_UNLOCK(&dynamic_list);
1551         } else {
1552                 AST_LIST_LOCK(&idle_list);
1553                 AST_LIST_INSERT_TAIL(&idle_list, thread, list);
1554                 AST_LIST_UNLOCK(&idle_list);
1555         }
1556
1557         return;
1558 }
1559
1560 static struct iax2_thread *find_idle_thread(void)
1561 {
1562         struct iax2_thread *thread = NULL;
1563
1564         /* Pop the head of the idle list off */
1565         AST_LIST_LOCK(&idle_list);
1566         thread = AST_LIST_REMOVE_HEAD(&idle_list, list);
1567         AST_LIST_UNLOCK(&idle_list);
1568
1569         /* If we popped a thread off the idle list, just return it */
1570         if (thread) {
1571                 memset(&thread->ffinfo, 0, sizeof(thread->ffinfo));
1572                 return thread;
1573         }
1574
1575         /* Pop the head of the dynamic list off */
1576         AST_LIST_LOCK(&dynamic_list);
1577         thread = AST_LIST_REMOVE_HEAD(&dynamic_list, list);
1578         AST_LIST_UNLOCK(&dynamic_list);
1579
1580         /* If we popped a thread off the dynamic list, just return it */
1581         if (thread) {
1582                 memset(&thread->ffinfo, 0, sizeof(thread->ffinfo));
1583                 return thread;
1584         }
1585
1586         /* If we can't create a new dynamic thread for any reason, return no thread at all */
1587         if (iaxdynamicthreadcount >= iaxmaxthreadcount || !(thread = ast_calloc(1, sizeof(*thread))))
1588                 return NULL;
1589
1590         /* Set default values */
1591         ast_atomic_fetchadd_int(&iaxdynamicthreadcount, 1);
1592         thread->threadnum = ast_atomic_fetchadd_int(&iaxdynamicthreadnum, 1);
1593         thread->type = IAX_THREAD_TYPE_DYNAMIC;
1594
1595         /* Initialize lock and condition */
1596         ast_mutex_init(&thread->lock);
1597         ast_cond_init(&thread->cond, NULL);
1598         ast_mutex_init(&thread->init_lock);
1599         ast_cond_init(&thread->init_cond, NULL);
1600         ast_mutex_lock(&thread->init_lock);
1601
1602         /* Create thread and send it on it's way */
1603         if (ast_pthread_create_background(&thread->threadid, NULL, iax2_process_thread, thread)) {
1604                 ast_cond_destroy(&thread->cond);
1605                 ast_mutex_destroy(&thread->lock);
1606                 ast_mutex_unlock(&thread->init_lock);
1607                 ast_cond_destroy(&thread->init_cond);
1608                 ast_mutex_destroy(&thread->init_lock);
1609                 ast_free(thread);
1610                 return NULL;
1611         }
1612
1613         /* this thread is not processing a full frame (since it is idle),
1614            so ensure that the field for the full frame call number is empty */
1615         memset(&thread->ffinfo, 0, sizeof(thread->ffinfo));
1616
1617         /* Wait for the thread to be ready before returning it to the caller */
1618         ast_cond_wait(&thread->init_cond, &thread->init_lock);
1619
1620         /* Done with init_lock */
1621         ast_mutex_unlock(&thread->init_lock);
1622
1623         return thread;
1624 }
1625
1626 #ifdef SCHED_MULTITHREADED
1627 static int __schedule_action(void (*func)(const void *data), const void *data, const char *funcname)
1628 {
1629         struct iax2_thread *thread;
1630         static time_t lasterror;
1631         time_t t;
1632
1633         thread = find_idle_thread();
1634         if (thread != NULL) {
1635                 thread->schedfunc = func;
1636                 thread->scheddata = data;
1637                 thread->iostate = IAX_IOSTATE_SCHEDREADY;
1638 #ifdef DEBUG_SCHED_MULTITHREAD
1639                 ast_copy_string(thread->curfunc, funcname, sizeof(thread->curfunc));
1640 #endif
1641                 signal_condition(&thread->lock, &thread->cond);
1642                 return 0;
1643         }
1644         time(&t);
1645         if (t != lasterror) {
1646                 lasterror = t;
1647                 ast_debug(1, "Out of idle IAX2 threads for scheduling! (%s)\n", funcname);
1648         }
1649
1650         return -1;
1651 }
1652 #define schedule_action(func, data) __schedule_action(func, data, __PRETTY_FUNCTION__)
1653 #endif
1654
1655 static int iax2_sched_replace(int id, struct ast_sched_context *con, int when,
1656                 ast_sched_cb callback, const void *data)
1657 {
1658         return ast_sched_replace(id, con, when, callback, data);
1659 }
1660
1661 static int iax2_sched_add(struct ast_sched_context *con, int when,
1662                 ast_sched_cb callback, const void *data)
1663 {
1664         return ast_sched_add(con, when, callback, data);
1665 }
1666
1667 static int send_ping(const void *data);
1668
1669 static void __send_ping(const void *data)
1670 {
1671         int callno = (long) data;
1672
1673         ast_mutex_lock(&iaxsl[callno]);
1674
1675         if (iaxs[callno]) {
1676                 if (iaxs[callno]->peercallno) {
1677                         send_command(iaxs[callno], AST_FRAME_IAX, IAX_COMMAND_PING, 0, NULL, 0, -1);
1678                         if (iaxs[callno]->pingid != DONT_RESCHEDULE) {
1679                                 iaxs[callno]->pingid = iax2_sched_add(sched, ping_time * 1000, send_ping, data);
1680                         }
1681                 }
1682         } else {
1683                 ast_debug(1, "I was supposed to send a PING with callno %d, but no such call exists.\n", callno);
1684         }
1685
1686         ast_mutex_unlock(&iaxsl[callno]);
1687 }
1688
1689 static int send_ping(const void *data)
1690 {
1691         int callno = (long) data;
1692         ast_mutex_lock(&iaxsl[callno]);
1693         if (iaxs[callno] && iaxs[callno]->pingid != DONT_RESCHEDULE) {
1694                 iaxs[callno]->pingid = -1;
1695         }
1696         ast_mutex_unlock(&iaxsl[callno]);
1697
1698 #ifdef SCHED_MULTITHREADED
1699         if (schedule_action(__send_ping, data))
1700 #endif
1701                 __send_ping(data);
1702
1703         return 0;
1704 }
1705
1706 static void encmethods_to_str(int e, struct ast_str **buf)
1707 {
1708         ast_str_set(buf, 0, "(");
1709         if (e & IAX_ENCRYPT_AES128) {
1710                 ast_str_append(buf, 0, "aes128");
1711         }
1712         if (e & IAX_ENCRYPT_KEYROTATE) {
1713                 ast_str_append(buf, 0, ",keyrotate");
1714         }
1715         if (ast_str_strlen(*buf) > 1) {
1716                 ast_str_append(buf, 0, ")");
1717         } else {
1718                 ast_str_set(buf, 0, "No");
1719         }
1720 }
1721
1722 static int get_encrypt_methods(const char *s)
1723 {
1724         int e;
1725         if (!strcasecmp(s, "aes128"))
1726                 e = IAX_ENCRYPT_AES128 | IAX_ENCRYPT_KEYROTATE;
1727         else if (ast_true(s))
1728                 e = IAX_ENCRYPT_AES128 | IAX_ENCRYPT_KEYROTATE;
1729         else
1730                 e = 0;
1731         return e;
1732 }
1733
1734 static int send_lagrq(const void *data);
1735
1736 static void __send_lagrq(const void *data)
1737 {
1738         int callno = (long) data;
1739
1740         ast_mutex_lock(&iaxsl[callno]);
1741
1742         if (iaxs[callno]) {
1743                 if (iaxs[callno]->peercallno) {
1744                         send_command(iaxs[callno], AST_FRAME_IAX, IAX_COMMAND_LAGRQ, 0, NULL, 0, -1);
1745                         if (iaxs[callno]->lagid != DONT_RESCHEDULE) {
1746                                 iaxs[callno]->lagid = iax2_sched_add(sched, lagrq_time * 1000, send_lagrq, data);
1747                         }
1748                 }
1749         } else {
1750                 ast_debug(1, "I was supposed to send a LAGRQ with callno %d, but no such call exists.\n", callno);
1751         }
1752
1753         ast_mutex_unlock(&iaxsl[callno]);
1754 }
1755
1756 static int send_lagrq(const void *data)
1757 {
1758         int callno = (long) data;
1759         ast_mutex_lock(&iaxsl[callno]);
1760         if (iaxs[callno] && iaxs[callno]->lagid != DONT_RESCHEDULE) {
1761                 iaxs[callno]->lagid = -1;
1762         }
1763         ast_mutex_unlock(&iaxsl[callno]);
1764
1765 #ifdef SCHED_MULTITHREADED
1766         if (schedule_action(__send_lagrq, data))
1767 #endif
1768                 __send_lagrq(data);
1769         return 0;
1770 }
1771
1772 static unsigned char compress_subclass(iax2_format subclass)
1773 {
1774         int x;
1775         int power=-1;
1776         /* If it's 64 or smaller, just return it */
1777         if (subclass < IAX_FLAG_SC_LOG)
1778                 return subclass;
1779         /* Otherwise find its power */
1780         for (x = 0; x < IAX_MAX_SHIFT; x++) {
1781                 if (subclass & (1LL << x)) {
1782                         if (power > -1) {
1783                                 ast_log(LOG_WARNING, "Can't compress subclass %lld\n", (long long) subclass);
1784                                 return 0;
1785                         } else
1786                                 power = x;
1787                 }
1788         }
1789         return power | IAX_FLAG_SC_LOG;
1790 }
1791
1792 static iax2_format uncompress_subclass(unsigned char csub)
1793 {
1794         /* If the SC_LOG flag is set, return 2^csub otherwise csub */
1795         if (csub & IAX_FLAG_SC_LOG) {
1796                 /* special case for 'compressed' -1 */
1797                 if (csub == 0xff)
1798                         return -1;
1799                 else
1800                         return 1LL << (csub & ~IAX_FLAG_SC_LOG & IAX_MAX_SHIFT);
1801         }
1802         else
1803                 return csub;
1804 }
1805
1806 static struct ast_format *codec_choose_from_prefs(struct iax2_codec_pref *pref, struct ast_format_cap *cap)
1807 {
1808         int x;
1809         struct ast_format *found_format = NULL;
1810
1811         for (x = 0; x < ARRAY_LEN(pref->order); ++x) {
1812                 struct ast_format *pref_format;
1813                 uint64_t pref_bitfield;
1814
1815                 pref_bitfield = iax2_codec_pref_order_value_to_format_bitfield(pref->order[x]);
1816                 if (!pref_bitfield) {
1817                         break;
1818                 }
1819
1820                 pref_format = ast_format_compatibility_bitfield2format(pref_bitfield);
1821                 if (!pref_format) {
1822                         /* The bitfield is not associated with any format. */
1823                         continue;
1824                 }
1825                 found_format = ast_format_cap_get_compatible_format(cap, pref_format);
1826                 if (found_format) {
1827                         break;
1828                 }
1829         }
1830
1831         if (found_format && (ast_format_get_type(found_format) == AST_MEDIA_TYPE_AUDIO)) {
1832                 return found_format;
1833         }
1834
1835         ast_debug(4, "Could not find preferred codec - Returning zero codec.\n");
1836         ao2_cleanup(found_format);
1837         return NULL;
1838 }
1839
1840 static iax2_format iax2_codec_choose(struct iax2_codec_pref *pref, iax2_format formats)
1841 {
1842         struct ast_format_cap *cap;
1843         struct ast_format *tmpfmt;
1844         iax2_format format = 0;
1845
1846         if ((cap = ast_format_cap_alloc(AST_FORMAT_CAP_FLAG_DEFAULT))) {
1847                 iax2_format_compatibility_bitfield2cap(formats, cap);
1848                 tmpfmt = codec_choose_from_prefs(pref, cap);
1849                 if (!tmpfmt) {
1850                         ao2_ref(cap, -1);
1851                         return 0;
1852                 }
1853
1854                 format = ast_format_compatibility_format2bitfield(tmpfmt);
1855                 ao2_ref(tmpfmt, -1);
1856                 ao2_ref(cap, -1);
1857         }
1858
1859         return format;
1860 }
1861
1862 const char *iax2_getformatname(iax2_format format)
1863 {
1864         struct ast_format *tmpfmt;
1865
1866         tmpfmt = ast_format_compatibility_bitfield2format(format);
1867         if (!tmpfmt) {
1868                 return "Unknown";
1869         }
1870
1871         return ast_format_get_name(tmpfmt);
1872 }
1873
1874 static const char *iax2_getformatname_multiple(iax2_format format, struct ast_str **codec_buf)
1875 {
1876         struct ast_format_cap *cap = ast_format_cap_alloc(AST_FORMAT_CAP_FLAG_DEFAULT);
1877
1878         if (!cap) {
1879                 return "(Nothing)";
1880         }
1881         iax2_format_compatibility_bitfield2cap(format, cap);
1882         ast_format_cap_get_names(cap, codec_buf);
1883         ao2_ref(cap, -1);
1884
1885         return ast_str_buffer(*codec_buf);
1886 }
1887
1888 static int iax2_parse_allow_disallow(struct iax2_codec_pref *pref, iax2_format *formats, const char *list, int allowing)
1889 {
1890         int res, i;
1891         struct ast_format_cap *cap;
1892
1893         /* We want to add the formats to the cap in the preferred order */
1894         cap = ast_format_cap_alloc(AST_FORMAT_CAP_FLAG_DEFAULT);
1895         if (!cap || iax2_codec_pref_to_cap(pref, cap)) {
1896                 ao2_cleanup(cap);
1897                 return 1;
1898         }
1899
1900         res = ast_format_cap_update_by_allow_disallow(cap, list, allowing);
1901
1902         /* Adjust formats bitfield and pref list to match. */
1903         *formats = iax2_format_compatibility_cap2bitfield(cap);
1904         iax2_codec_pref_remove_missing(pref, *formats);
1905
1906         for (i = 0; i < ast_format_cap_count(cap); i++) {
1907                 struct ast_format *fmt = ast_format_cap_get_format(cap, i);
1908
1909                 iax2_codec_pref_append(pref, fmt, ast_format_cap_get_format_framing(cap, fmt));
1910                 ao2_ref(fmt, -1);
1911         }
1912
1913         ao2_ref(cap, -1);
1914
1915         return res;
1916 }
1917
1918 static int iax2_data_add_codecs(struct ast_data *root, const char *node_name, iax2_format formats)
1919 {
1920         int res;
1921         struct ast_format_cap *cap = ast_format_cap_alloc(AST_FORMAT_CAP_FLAG_DEFAULT);
1922         if (!cap) {
1923                 return -1;
1924         }
1925         iax2_format_compatibility_bitfield2cap(formats, cap);
1926         res = ast_data_add_codecs(root, node_name, cap);
1927         ao2_ref(cap, -1);
1928         return res;
1929 }
1930
1931 /*!
1932  * \note The only member of the peer passed here guaranteed to be set is the name field
1933  */
1934 static int peer_hash_cb(const void *obj, const int flags)
1935 {
1936         const struct iax2_peer *peer = obj;
1937         const char *name = obj;
1938
1939         return ast_str_hash(flags & OBJ_KEY ? name : peer->name);
1940 }
1941
1942 /*!
1943  * \note The only member of the peer passed here guaranteed to be set is the name field
1944  */
1945 static int peer_cmp_cb(void *obj, void *arg, int flags)
1946 {
1947         struct iax2_peer *peer = obj, *peer2 = arg;
1948         const char *name = arg;
1949
1950         return !strcmp(peer->name, flags & OBJ_KEY ? name : peer2->name) ?
1951                         CMP_MATCH | CMP_STOP : 0;
1952 }
1953
1954 /*!
1955  * \note The only member of the user passed here guaranteed to be set is the name field
1956  */
1957 static int user_hash_cb(const void *obj, const int flags)
1958 {
1959         const struct iax2_user *user = obj;
1960         const char *name = obj;
1961
1962         return ast_str_hash(flags & OBJ_KEY ? name : user->name);
1963 }
1964
1965 /*!
1966  * \note The only member of the user passed here guaranteed to be set is the name field
1967  */
1968 static int user_cmp_cb(void *obj, void *arg, int flags)
1969 {
1970         struct iax2_user *user = obj, *user2 = arg;
1971         const char *name = arg;
1972
1973         return !strcmp(user->name, flags & OBJ_KEY ? name : user2->name) ?
1974                         CMP_MATCH | CMP_STOP : 0;
1975 }
1976
1977 /*!
1978  * \note This funtion calls realtime_peer -> reg_source_db -> iax2_poke_peer -> find_callno,
1979  *       so do not call it with a pvt lock held.
1980  */
1981 static struct iax2_peer *find_peer(const char *name, int realtime)
1982 {
1983         struct iax2_peer *peer = NULL;
1984
1985         peer = ao2_find(peers, name, OBJ_KEY);
1986
1987         /* Now go for realtime if applicable */
1988         if (!peer && realtime) {
1989                 peer = realtime_peer(name, NULL);
1990         }
1991         return peer;
1992 }
1993
1994 static struct iax2_peer *peer_ref(struct iax2_peer *peer)
1995 {
1996         ao2_ref(peer, +1);
1997         return peer;
1998 }
1999
2000 static inline struct iax2_peer *peer_unref(struct iax2_peer *peer)
2001 {
2002         ao2_ref(peer, -1);
2003         return NULL;
2004 }
2005
2006 static struct iax2_user *find_user(const char *name)
2007 {
2008         return ao2_find(users, name, OBJ_KEY);
2009 }
2010
2011 static inline struct iax2_user *user_unref(struct iax2_user *user)
2012 {
2013         ao2_ref(user, -1);
2014         return NULL;
2015 }
2016
2017 static int iax2_getpeername(struct ast_sockaddr addr, char *host, int len)
2018 {
2019         struct iax2_peer *peer = NULL;
2020         int res = 0;
2021         struct ao2_iterator i;
2022
2023         i = ao2_iterator_init(peers, 0);
2024         while ((peer = ao2_iterator_next(&i))) {
2025
2026                 if (!ast_sockaddr_cmp(&peer->addr, &addr)) {
2027                         ast_copy_string(host, peer->name, len);
2028                         peer_unref(peer);
2029                         res = 1;
2030                         break;
2031                 }
2032                 peer_unref(peer);
2033         }
2034         ao2_iterator_destroy(&i);
2035
2036         if (!peer) {
2037                 peer = realtime_peer(NULL, &addr);
2038                 if (peer) {
2039                         ast_copy_string(host, peer->name, len);
2040                         peer_unref(peer);
2041                         res = 1;
2042                 }
2043         }
2044
2045         return res;
2046 }
2047
2048 /*!\note Assumes the lock on the pvt is already held, when
2049  * iax2_destroy_helper() is called. */
2050 static void iax2_destroy_helper(struct chan_iax2_pvt *pvt)
2051 {
2052         /* Decrement AUTHREQ count if needed */
2053         if (ast_test_flag64(pvt, IAX_MAXAUTHREQ)) {
2054                 struct iax2_user *user;
2055
2056                 user = ao2_find(users, pvt->username, OBJ_KEY);
2057                 if (user) {
2058                         ast_atomic_fetchadd_int(&user->curauthreq, -1);
2059                         user_unref(user);
2060                 }
2061
2062                 ast_clear_flag64(pvt, IAX_MAXAUTHREQ);
2063         }
2064         /* No more pings or lagrq's */
2065         AST_SCHED_DEL_SPINLOCK(sched, pvt->pingid, &iaxsl[pvt->callno]);
2066         pvt->pingid = DONT_RESCHEDULE;
2067         AST_SCHED_DEL_SPINLOCK(sched, pvt->lagid, &iaxsl[pvt->callno]);
2068         pvt->lagid = DONT_RESCHEDULE;
2069         AST_SCHED_DEL(sched, pvt->autoid);
2070         AST_SCHED_DEL(sched, pvt->authid);
2071         AST_SCHED_DEL(sched, pvt->initid);
2072         AST_SCHED_DEL(sched, pvt->jbid);
2073         AST_SCHED_DEL(sched, pvt->keyrotateid);
2074 }
2075
2076 static void iax2_frame_free(struct iax_frame *fr)
2077 {
2078         AST_SCHED_DEL(sched, fr->retrans);
2079         iax_frame_free(fr);
2080 }
2081
2082 static int scheduled_destroy(const void *vid)
2083 {
2084         unsigned short callno = PTR_TO_CALLNO(vid);
2085         ast_mutex_lock(&iaxsl[callno]);
2086         if (iaxs[callno]) {
2087                 ast_debug(1, "Really destroying %d now...\n", callno);
2088                 iax2_destroy(callno);
2089         }
2090         ast_mutex_unlock(&iaxsl[callno]);
2091         return 0;
2092 }
2093
2094 static void free_signaling_queue_entry(struct signaling_queue_entry *s)
2095 {
2096         if (s->f.datalen) {
2097                 ast_free(s->f.data.ptr);
2098         }
2099         ast_free(s);
2100 }
2101
2102 /*! \brief This function must be called once we are sure the other side has
2103  *  given us a call number.  All signaling is held here until that point. */
2104 static void send_signaling(struct chan_iax2_pvt *pvt)
2105 {
2106         struct signaling_queue_entry *s = NULL;
2107
2108         while ((s = AST_LIST_REMOVE_HEAD(&pvt->signaling_queue, next))) {
2109                 iax2_send(pvt, &s->f, 0, -1, 0, 0, 0);
2110                 free_signaling_queue_entry(s);
2111         }
2112         pvt->hold_signaling = 0;
2113 }
2114
2115 /*! \brief All frames other than that of type AST_FRAME_IAX must be held until
2116  *  we have received a destination call number. */
2117 static int queue_signalling(struct chan_iax2_pvt *pvt, struct ast_frame *f)
2118 {
2119         struct signaling_queue_entry *qe;
2120
2121         if (f->frametype == AST_FRAME_IAX || !pvt->hold_signaling) {
2122                 return 1; /* do not queue this frame */
2123         } else if (!(qe = ast_calloc(1, sizeof(struct signaling_queue_entry)))) {
2124                 return -1;  /* out of memory */
2125         }
2126
2127         /* copy ast_frame into our queue entry */
2128         qe->f = *f;
2129         if (qe->f.datalen) {
2130                 /* if there is data in this frame copy it over as well */
2131                 if (!(qe->f.data.ptr = ast_malloc(qe->f.datalen))) {
2132                         free_signaling_queue_entry(qe);
2133                         return -1;
2134                 }
2135                 memcpy(qe->f.data.ptr, f->data.ptr, qe->f.datalen);
2136         }
2137         AST_LIST_INSERT_TAIL(&pvt->signaling_queue, qe, next);
2138
2139         return 0;
2140 }
2141
2142 static void pvt_destructor(void *obj)
2143 {
2144         struct chan_iax2_pvt *pvt = obj;
2145         struct iax_frame *cur = NULL;
2146         struct signaling_queue_entry *s = NULL;
2147
2148         ast_mutex_lock(&iaxsl[pvt->callno]);
2149
2150         iax2_destroy_helper(pvt);
2151
2152         sched_delay_remove(&pvt->addr, pvt->callno_entry);
2153         pvt->callno_entry = 0;
2154
2155         /* Already gone */
2156         ast_set_flag64(pvt, IAX_ALREADYGONE);
2157
2158         AST_LIST_TRAVERSE(&frame_queue[pvt->callno], cur, list) {
2159                 /* Cancel any pending transmissions */
2160                 cur->retries = -1;
2161         }
2162
2163         ast_mutex_unlock(&iaxsl[pvt->callno]);
2164
2165         while ((s = AST_LIST_REMOVE_HEAD(&pvt->signaling_queue, next))) {
2166                 free_signaling_queue_entry(s);
2167         }
2168
2169         if (pvt->reg) {
2170                 pvt->reg->callno = 0;
2171         }
2172
2173         if (!pvt->owner) {
2174                 jb_frame frame;
2175                 if (pvt->vars) {
2176                     ast_variables_destroy(pvt->vars);
2177                     pvt->vars = NULL;
2178                 }
2179
2180                 while (jb_getall(pvt->jb, &frame) == JB_OK) {
2181                         iax2_frame_free(frame.data);
2182                 }
2183
2184                 jb_destroy(pvt->jb);
2185                 ast_string_field_free_memory(pvt);
2186         }
2187 }
2188
2189 static struct chan_iax2_pvt *new_iax(struct ast_sockaddr *addr, const char *host)
2190 {
2191         struct chan_iax2_pvt *tmp;
2192         jb_conf jbconf;
2193
2194         if (!(tmp = ao2_alloc(sizeof(*tmp), pvt_destructor))) {
2195                 return NULL;
2196         }
2197
2198         if (ast_string_field_init(tmp, 32)) {
2199                 ao2_ref(tmp, -1);
2200                 tmp = NULL;
2201                 return NULL;
2202         }
2203
2204         tmp->prefs = prefs_global;
2205         tmp->pingid = -1;
2206         tmp->lagid = -1;
2207         tmp->autoid = -1;
2208         tmp->authid = -1;
2209         tmp->initid = -1;
2210         tmp->keyrotateid = -1;
2211
2212         ast_string_field_set(tmp,exten, "s");
2213         ast_string_field_set(tmp,host, host);
2214
2215         tmp->jb = jb_new();
2216         tmp->jbid = -1;
2217         jbconf.max_jitterbuf = maxjitterbuffer;
2218         jbconf.resync_threshold = resyncthreshold;
2219         jbconf.max_contig_interp = maxjitterinterps;
2220         jbconf.target_extra = jittertargetextra;
2221         jb_setconf(tmp->jb,&jbconf);
2222
2223         AST_LIST_HEAD_INIT_NOLOCK(&tmp->dpentries);
2224
2225         tmp->hold_signaling = 1;
2226         AST_LIST_HEAD_INIT_NOLOCK(&tmp->signaling_queue);
2227
2228         return tmp;
2229 }
2230
2231 static struct iax_frame *iaxfrdup2(struct iax_frame *fr)
2232 {
2233         struct iax_frame *new = iax_frame_new(DIRECTION_INGRESS, fr->af.datalen, fr->cacheable);
2234         if (new) {
2235                 size_t afdatalen = new->afdatalen;
2236                 memcpy(new, fr, sizeof(*new));
2237                 iax_frame_wrap(new, &fr->af);
2238                 new->afdatalen = afdatalen;
2239                 new->data = NULL;
2240                 new->datalen = 0;
2241                 new->direction = DIRECTION_INGRESS;
2242                 new->retrans = -1;
2243         }
2244         return new;
2245 }
2246 /* keep these defined in this order.  They are used in find_callno to
2247  * determine whether or not a new call number should be allowed. */
2248 enum {
2249         /* do not allow a new call number, only search ones in use for match */
2250         NEW_PREVENT = 0,
2251         /* search for match first, then allow a new one to be allocated */
2252         NEW_ALLOW = 1,
2253         /* do not search for match, force a new call number */
2254         NEW_FORCE = 2,
2255         /* do not search for match, force a new call number.  Signifies call number
2256          * has been calltoken validated */
2257         NEW_ALLOW_CALLTOKEN_VALIDATED = 3,
2258 };
2259
2260 static int match(struct ast_sockaddr *addr, unsigned short callno, unsigned short dcallno, const struct chan_iax2_pvt *cur, int check_dcallno)
2261 {
2262         if (!ast_sockaddr_cmp(&cur->addr, addr)) {
2263                 /* This is the main host */
2264                 if ( (cur->peercallno == 0 || cur->peercallno == callno) &&
2265                          (check_dcallno ? dcallno == cur->callno : 1) ) {
2266                         /* That's us.  Be sure we keep track of the peer call number */
2267                         return 1;
2268                 }
2269         }
2270         if (!ast_sockaddr_cmp(&cur->transfer, addr) && cur->transferring) {
2271                 /* We're transferring */
2272                 if ((dcallno == cur->callno) || (cur->transferring == TRANSFER_MEDIAPASS && cur->transfercallno == callno))
2273                         return 1;
2274         }
2275         return 0;
2276 }
2277
2278 static int make_trunk(unsigned short callno, int locked)
2279 {
2280         int x;
2281         int res= 0;
2282         callno_entry entry;
2283         if (iaxs[callno]->oseqno) {
2284                 ast_log(LOG_WARNING, "Can't make trunk once a call has started!\n");
2285                 return -1;
2286         }
2287         if (callno >= TRUNK_CALL_START) {
2288                 ast_log(LOG_WARNING, "Call %d is already a trunk\n", callno);
2289                 return -1;
2290         }
2291
2292         if (get_unused_callno(
2293                         CALLNO_TYPE_TRUNK,
2294                         CALLNO_ENTRY_IS_VALIDATED(iaxs[callno]->callno_entry),
2295                         &entry)) {
2296                 ast_log(LOG_WARNING, "Unable to trunk call: Insufficient space\n");
2297                 return -1;
2298         }
2299
2300         x = CALLNO_ENTRY_GET_CALLNO(entry);
2301         ast_mutex_lock(&iaxsl[x]);
2302
2303         /*!
2304          * \note We delete these before switching the slot, because if
2305          * they fire in the meantime, they will generate a warning.
2306          */
2307         AST_SCHED_DEL(sched, iaxs[callno]->pingid);
2308         AST_SCHED_DEL(sched, iaxs[callno]->lagid);
2309         iaxs[callno]->lagid = iaxs[callno]->pingid = -1;
2310         iaxs[x] = iaxs[callno];
2311         iaxs[x]->callno = x;
2312
2313         /* since we copied over the pvt from a different callno, make sure the old entry is replaced
2314          * before assigning the new one */
2315         if (iaxs[x]->callno_entry) {
2316                 iax2_sched_add(
2317                         sched,
2318                         MIN_REUSE_TIME * 1000,
2319                         replace_callno,
2320                         CALLNO_ENTRY_TO_PTR(iaxs[x]->callno_entry));
2321
2322         }
2323         iaxs[x]->callno_entry = entry;
2324
2325         iaxs[callno] = NULL;
2326         /* Update the two timers that should have been started */
2327         iaxs[x]->pingid = iax2_sched_add(sched,
2328                 ping_time * 1000, send_ping, (void *)(long)x);
2329         iaxs[x]->lagid = iax2_sched_add(sched,
2330                 lagrq_time * 1000, send_lagrq, (void *)(long)x);
2331
2332         if (locked)
2333                 ast_mutex_unlock(&iaxsl[callno]);
2334         res = x;
2335         if (!locked)
2336                 ast_mutex_unlock(&iaxsl[x]);
2337
2338         /* We moved this call from a non-trunked to a trunked call */
2339         ast_debug(1, "Made call %d into trunk call %d\n", callno, x);
2340
2341         return res;
2342 }
2343
2344 static void store_by_transfercallno(struct chan_iax2_pvt *pvt)
2345 {
2346         if (!pvt->transfercallno) {
2347                 ast_log(LOG_ERROR, "This should not be called without a transfer call number.\n");
2348                 return;
2349         }
2350
2351         ao2_link(iax_transfercallno_pvts, pvt);
2352 }
2353
2354 static void remove_by_transfercallno(struct chan_iax2_pvt *pvt)
2355 {
2356         if (!pvt->transfercallno) {
2357                 ast_log(LOG_ERROR, "This should not be called without a transfer call number.\n");
2358                 return;
2359         }
2360
2361         ao2_unlink(iax_transfercallno_pvts, pvt);
2362 }
2363 static void store_by_peercallno(struct chan_iax2_pvt *pvt)
2364 {
2365         if (!pvt->peercallno) {
2366                 ast_log(LOG_ERROR, "This should not be called without a peer call number.\n");
2367                 return;
2368         }
2369
2370         ao2_link(iax_peercallno_pvts, pvt);
2371 }
2372
2373 static void remove_by_peercallno(struct chan_iax2_pvt *pvt)
2374 {
2375         if (!pvt->peercallno) {
2376                 ast_log(LOG_ERROR, "This should not be called without a peer call number.\n");
2377                 return;
2378         }
2379
2380         ao2_unlink(iax_peercallno_pvts, pvt);
2381 }
2382
2383 static int addr_range_delme_cb(void *obj, void *arg, int flags)
2384 {
2385         struct addr_range *lim = obj;
2386         lim->delme = 1;
2387         return 0;
2388 }
2389
2390 static int addr_range_hash_cb(const void *obj, const int flags)
2391 {
2392         const struct addr_range *lim = obj;
2393         return abs(ast_sockaddr_hash(&lim->ha.addr));
2394 }
2395
2396 static int addr_range_cmp_cb(void *obj, void *arg, int flags)
2397 {
2398         struct addr_range *lim1 = obj, *lim2 = arg;
2399         return (!(ast_sockaddr_cmp_addr(&lim1->ha.addr, &lim2->ha.addr)) &&
2400                         !(ast_sockaddr_cmp_addr(&lim1->ha.netmask, &lim2->ha.netmask))) ?
2401                         CMP_MATCH | CMP_STOP : 0;
2402 }
2403
2404 static int peercnt_hash_cb(const void *obj, const int flags)
2405 {
2406         const struct peercnt *peercnt = obj;
2407
2408         if (ast_sockaddr_isnull(&peercnt->addr)) {
2409                 return 0;
2410         }
2411         return ast_sockaddr_hash(&peercnt->addr);
2412 }
2413
2414 static int peercnt_cmp_cb(void *obj, void *arg, int flags)
2415 {
2416         struct peercnt *peercnt1 = obj, *peercnt2 = arg;
2417         return !ast_sockaddr_cmp_addr(&peercnt1->addr, &peercnt2->addr) ? CMP_MATCH | CMP_STOP : 0;
2418 }
2419
2420 static int addr_range_match_address_cb(void *obj, void *arg, int flags)
2421 {
2422         struct addr_range *addr_range = obj;
2423         struct ast_sockaddr *addr = arg;
2424         struct ast_sockaddr tmp_addr;
2425
2426         ast_sockaddr_apply_netmask(addr, &addr_range->ha.netmask, &tmp_addr);
2427
2428         if (!ast_sockaddr_cmp_addr(&tmp_addr, &addr_range->ha.addr)) {
2429                 return CMP_MATCH | CMP_STOP;
2430         }
2431         return 0;
2432 }
2433
2434 /*!
2435  * \internal
2436  *
2437  * \brief compares addr to calltoken_ignores table to determine if validation is required.
2438  */
2439 static int calltoken_required(struct ast_sockaddr *addr, const char *name, int subclass)
2440 {
2441         struct addr_range *addr_range;
2442         struct iax2_peer *peer = NULL;
2443         struct iax2_user *user = NULL;
2444         /* if no username is given, check for guest accounts */
2445         const char *find = S_OR(name, "guest");
2446         int res = 1;  /* required by default */
2447         int optional = 0;
2448         enum calltoken_peer_enum calltoken_required = CALLTOKEN_DEFAULT;
2449         /* There are only two cases in which calltoken validation is not required.
2450          * Case 1. sin falls within the list of address ranges specified in the calltoken optional table and
2451          *         the peer definition has not set the requirecalltoken option.
2452          * Case 2. Username is a valid peer/user, and that peer has requirecalltoken set either auto or no.
2453          */
2454
2455         /* ----- Case 1 ----- */
2456         if ((addr_range = ao2_callback(calltoken_ignores, 0, addr_range_match_address_cb, addr))) {
2457                 ao2_ref(addr_range, -1);
2458                 optional = 1;
2459         }
2460
2461         /* ----- Case 2 ----- */
2462         if ((subclass == IAX_COMMAND_NEW) && (user = find_user(find))) {
2463                 calltoken_required = user->calltoken_required;
2464         } else if ((subclass == IAX_COMMAND_NEW) && (user = realtime_user(find, addr))) {
2465                 calltoken_required = user->calltoken_required;
2466         } else if ((subclass != IAX_COMMAND_NEW) && (peer = find_peer(find, 0))) {
2467                 calltoken_required = peer->calltoken_required;
2468         } else if ((subclass != IAX_COMMAND_NEW) && (peer = realtime_peer(find, addr))) {
2469                 calltoken_required = peer->calltoken_required;
2470         }
2471
2472         if (peer) {
2473                 peer_unref(peer);
2474         }
2475         if (user) {
2476                 user_unref(user);
2477         }
2478
2479         ast_debug(1, "Determining if address %s with username %s requires calltoken validation.  Optional = %d  calltoken_required = %u \n", ast_sockaddr_stringify_addr(addr), name, optional, calltoken_required);
2480         if (((calltoken_required == CALLTOKEN_NO) || (calltoken_required == CALLTOKEN_AUTO)) ||
2481                 (optional && (calltoken_required == CALLTOKEN_DEFAULT))) {
2482                 res = 0;
2483         }
2484
2485         return res;
2486 }
2487
2488 /*!
2489  * \internal
2490  *
2491  * \brief set peercnt callno limit.
2492  *
2493  * \details
2494  * First looks in custom definitions. If not found, global limit
2495  * is used.  Entries marked as reg already have
2496  * a custom limit set by a registration and are not modified.
2497  */
2498 static void set_peercnt_limit(struct peercnt *peercnt)
2499 {
2500         uint16_t limit = global_maxcallno;
2501         struct addr_range *addr_range;
2502         struct ast_sockaddr addr;
2503
2504         ast_sockaddr_copy(&addr, &peercnt->addr);
2505
2506         if (peercnt->reg && peercnt->limit) {
2507                 return; /* this peercnt has a custom limit set by a registration */
2508         }
2509
2510         if ((addr_range = ao2_callback(callno_limits, 0, addr_range_match_address_cb, &addr))) {
2511                 limit = addr_range->limit;
2512                 ast_debug(1, "custom addr_range %d found for %s\n", limit, ast_sockaddr_stringify(&addr));
2513                 ao2_ref(addr_range, -1);
2514         }
2515
2516         peercnt->limit = limit;
2517 }
2518
2519 /*!
2520  * \internal
2521  * \brief sets limits for all peercnts in table. done on reload to reflect changes in conf.
2522  */
2523 static int set_peercnt_limit_all_cb(void *obj, void *arg, int flags)
2524 {
2525         struct peercnt *peercnt = obj;
2526
2527         set_peercnt_limit(peercnt);
2528         ast_debug(1, "Reset limits for peercnts table\n");
2529
2530         return 0;
2531 }
2532
2533 /*!
2534  * \internal
2535  * \brief returns match if delme is set.
2536  */
2537 static int prune_addr_range_cb(void *obj, void *arg, int flags)
2538 {
2539         struct addr_range *addr_range = obj;
2540
2541         return addr_range->delme ? CMP_MATCH : 0;
2542 }
2543
2544 /*!
2545  * \internal
2546  * \brief modifies peercnt entry in peercnts table. Used to set custom limit or mark a registered ip
2547  */
2548 static void peercnt_modify(unsigned char reg, uint16_t limit, struct ast_sockaddr *sockaddr)
2549 {
2550         /* this function turns off and on custom callno limits set by peer registration */
2551         struct peercnt *peercnt;
2552         struct peercnt tmp;
2553
2554         ast_sockaddr_copy(&tmp.addr, sockaddr);
2555
2556         if ((peercnt = ao2_find(peercnts, &tmp, OBJ_POINTER))) {
2557                 peercnt->reg = reg;
2558                 if (limit) {
2559                         peercnt->limit = limit;
2560                 } else {
2561                         set_peercnt_limit(peercnt);
2562                 }
2563                 ast_debug(1, "peercnt entry %s modified limit:%d registered:%d", ast_sockaddr_stringify_addr(sockaddr), peercnt->limit, peercnt->reg);
2564                 ao2_ref(peercnt, -1); /* decrement ref from find */
2565         }
2566 }
2567
2568 /*!
2569  * \internal
2570  * \brief adds an ip to the peercnts table, increments connection count if it already exists
2571  *
2572  * \details First searches for the address in the peercnts table.  If found
2573  * the current count is incremented.  If not found a new peercnt is allocated
2574  * and linked into the peercnts table with a call number count of 1.
2575  */
2576 static int peercnt_add(struct ast_sockaddr *addr)
2577 {
2578         struct peercnt *peercnt;
2579         int res = 0;
2580         struct peercnt tmp;
2581
2582         ast_sockaddr_copy(&tmp.addr, addr);
2583
2584         /* Reasoning for peercnts container lock:  Two identical ip addresses
2585          * could be added by different threads at the "same time". Without the container
2586          * lock, both threads could alloc space for the same object and attempt
2587          * to link to table.  With the lock, one would create the object and link
2588          * to table while the other would find the already created peercnt object
2589          * rather than creating a new one. */
2590         ao2_lock(peercnts);
2591         if ((peercnt = ao2_find(peercnts, &tmp, OBJ_POINTER))) {
2592                 ao2_lock(peercnt);
2593         } else if ((peercnt = ao2_alloc(sizeof(*peercnt), NULL))) {
2594                 ao2_lock(peercnt);
2595                 /* create and set defaults */
2596                 ast_sockaddr_copy(&peercnt->addr, addr);
2597                 set_peercnt_limit(peercnt);
2598                 /* guarantees it does not go away after unlocking table
2599                  * ao2_find automatically adds this */
2600                 ao2_link(peercnts, peercnt);
2601         } else {
2602                 ao2_unlock(peercnts);
2603                 return -1;
2604         }
2605
2606         /* check to see if the address has hit its callno limit.  If not increment cur. */
2607         if (peercnt->limit > peercnt->cur) {
2608                 peercnt->cur++;
2609                 ast_debug(1, "ip callno count incremented to %d for %s\n", peercnt->cur, ast_sockaddr_stringify_addr(addr));
2610         } else { /* max num call numbers for this peer has been reached! */
2611                 ast_log(LOG_ERROR, "maxcallnumber limit of %d for %s has been reached!\n", peercnt->limit, ast_sockaddr_stringify_addr(addr));
2612                 res = -1;
2613         }
2614
2615         /* clean up locks and ref count */
2616         ao2_unlock(peercnt);
2617         ao2_unlock(peercnts);
2618         ao2_ref(peercnt, -1); /* decrement ref from find/alloc, only the container ref remains. */
2619
2620         return res;
2621 }
2622
2623 /*!
2624  * \internal
2625  * \brief decrements a peercnts table entry
2626  */
2627 static void peercnt_remove(struct peercnt *peercnt)
2628 {
2629         struct ast_sockaddr addr;
2630
2631         ast_sockaddr_copy(&addr, &peercnt->addr);
2632
2633         /*
2634          * Container locked here since peercnt may be unlinked from
2635          * list.  If left unlocked, peercnt_add could try and grab this
2636          * entry from the table and modify it at the "same time" this
2637          * thread attemps to unlink it.
2638          */
2639         ao2_lock(peercnts);
2640         peercnt->cur--;
2641         ast_debug(1, "ip callno count decremented to %d for %s\n", peercnt->cur, ast_sockaddr_stringify_addr(&addr));
2642         /* if this was the last connection from the peer remove it from table */
2643         if (peercnt->cur == 0) {
2644                 ao2_unlink(peercnts, peercnt);/* decrements ref from table, last ref is left to scheduler */
2645         }
2646         ao2_unlock(peercnts);
2647 }
2648
2649 /*!
2650  * \internal
2651  * \brief called by scheduler to decrement object
2652  */
2653 static int peercnt_remove_cb(const void *obj)
2654 {
2655         struct peercnt *peercnt = (struct peercnt *) obj;
2656
2657         peercnt_remove(peercnt);
2658         ao2_ref(peercnt, -1); /* decrement ref from scheduler */
2659
2660         return 0;
2661 }
2662
2663 /*!
2664  * \internal
2665  * \brief decrements peercnts connection count, finds by addr
2666  */
2667 static int peercnt_remove_by_addr(struct ast_sockaddr *addr)
2668 {
2669         struct peercnt *peercnt;
2670         struct peercnt tmp;
2671
2672         ast_sockaddr_copy(&tmp.addr, addr);
2673
2674         if ((peercnt = ao2_find(peercnts, &tmp, OBJ_POINTER))) {
2675                 peercnt_remove(peercnt);
2676                 ao2_ref(peercnt, -1); /* decrement ref from find */
2677         }
2678         return 0;
2679 }
2680
2681 /*!
2682  * \internal
2683  * \brief Create callno_limit entry based on configuration
2684  */
2685 static void build_callno_limits(struct ast_variable *v)
2686 {
2687         struct addr_range *addr_range = NULL;
2688         struct addr_range tmp;
2689         struct ast_ha *ha;
2690         int limit;
2691         int error;
2692         int found;
2693
2694         for (; v; v = v->next) {
2695                 limit = -1;
2696                 error = 0;
2697                 found = 0;
2698                 ha = ast_append_ha("permit", v->name, NULL, &error);
2699
2700                 /* check for valid config information */
2701                 if (error) {
2702                         ast_log(LOG_ERROR, "Call number limit for %s could not be added, Invalid address range\n.", v->name);
2703                         continue;
2704                 } else if ((sscanf(v->value, "%d", &limit) != 1) || (limit < 0)) {
2705                         ast_log(LOG_ERROR, "Call number limit for %s could not be added. Invalid limit %s\n.", v->name, v->value);
2706                         ast_free_ha(ha);
2707                         continue;
2708                 }
2709
2710                 ast_copy_ha(ha, &tmp.ha);
2711                 /* find or create the addr_range */
2712                 if ((addr_range = ao2_find(callno_limits, &tmp, OBJ_POINTER))) {
2713                         ao2_lock(addr_range);
2714                         found = 1;
2715                 } else if (!(addr_range = ao2_alloc(sizeof(*addr_range), NULL))) {
2716                         ast_free_ha(ha);
2717                         return; /* out of memory */
2718                 }
2719
2720                 /* copy over config data into addr_range object */
2721                 ast_copy_ha(ha, &addr_range->ha); /* this is safe because only one ha is possible for each limit */
2722                 ast_free_ha(ha); /* cleanup the tmp ha */
2723                 addr_range->limit = limit;
2724                 addr_range->delme = 0;
2725
2726                 /* cleanup */
2727                 if (found) {
2728                         ao2_unlock(addr_range);
2729                 } else {
2730                         ao2_link(callno_limits, addr_range);
2731                 }
2732                 ao2_ref(addr_range, -1); /* decrement ref from ao2_find and ao2_alloc, only container ref remains */
2733         }
2734 }
2735
2736 /*!
2737  * \internal
2738  * \brief Create calltoken_ignores entry based on configuration
2739  */
2740 static int add_calltoken_ignore(const char *addr)
2741 {
2742         struct addr_range tmp;
2743         struct addr_range *addr_range = NULL;
2744         struct ast_ha *ha = NULL;
2745         int error = 0;
2746
2747         if (ast_strlen_zero(addr)) {
2748                 ast_log(LOG_WARNING, "invalid calltokenoptional %s\n", addr);
2749                 return -1;
2750         }
2751
2752         ha = ast_append_ha("permit", addr, NULL, &error);
2753
2754         /* check for valid config information */
2755         if (error) {
2756                 ast_log(LOG_WARNING, "Error %d creating calltokenoptional entry %s\n", error, addr);
2757                 return -1;
2758         }
2759
2760         ast_copy_ha(ha, &tmp.ha);
2761         /* find or create the addr_range */
2762         if ((addr_range = ao2_find(calltoken_ignores, &tmp, OBJ_POINTER))) {
2763                 ao2_lock(addr_range);
2764                 addr_range->delme = 0;
2765                 ao2_unlock(addr_range);
2766         } else if ((addr_range = ao2_alloc(sizeof(*addr_range), NULL))) {
2767                 /* copy over config data into addr_range object */
2768                 ast_copy_ha(ha, &addr_range->ha); /* this is safe because only one ha is possible */
2769                 ao2_link(calltoken_ignores, addr_range);
2770         } else {
2771                 ast_free_ha(ha);
2772                 return -1;
2773         }
2774
2775         ast_free_ha(ha);
2776         ao2_ref(addr_range, -1); /* decrement ref from ao2_find and ao2_alloc, only container ref remains */
2777
2778         return 0;
2779 }
2780
2781 static char *handle_cli_iax2_show_callno_limits(struct ast_cli_entry *e, int cmd, struct ast_cli_args *a)
2782 {
2783         struct ao2_iterator i;
2784         struct peercnt *peercnt;
2785         struct ast_sockaddr addr;
2786         int found = 0;
2787
2788         switch (cmd) {
2789         case CLI_INIT:
2790                 e->command = "iax2 show callnumber usage";
2791                 e->usage =
2792                         "Usage: iax2 show callnumber usage [IP address]\n"
2793                         "       Shows current IP addresses which are consuming iax2 call numbers\n";
2794                 return NULL;
2795         case CLI_GENERATE:
2796                 return NULL;
2797         case CLI_HANDLER:
2798                 if (a->argc < 4 || a->argc > 5)
2799                         return CLI_SHOWUSAGE;
2800
2801                 if (a->argc == 4) {
2802                         ast_cli(a->fd, "%-45s %-12s %-12s\n", "Address", "Callno Usage", "Callno Limit");
2803                 }
2804
2805                 i = ao2_iterator_init(peercnts, 0);
2806                 while ((peercnt = ao2_iterator_next(&i))) {
2807                         ast_sockaddr_copy(&addr, &peercnt->addr);
2808
2809                         if (a->argc == 5) {
2810                                 if (!strcasecmp(a->argv[4], ast_sockaddr_stringify(&addr))) {
2811                                         ast_cli(a->fd, "%-45s %-12s %-12s\n", "Address", "Callno Usage", "Callno Limit");
2812                                         ast_cli(a->fd, "%-45s %-12d %-12d\n", ast_sockaddr_stringify(&addr), peercnt->cur, peercnt->limit);
2813                                         ao2_ref(peercnt, -1);
2814                                         found = 1;
2815                                         break;
2816                                 }
2817                         } else {
2818                                 ast_cli(a->fd, "%-45s %-12d %-12d\n", ast_sockaddr_stringify(&addr), peercnt->cur, peercnt->limit);
2819                         }
2820                         ao2_ref(peercnt, -1);
2821                 }
2822                 ao2_iterator_destroy(&i);
2823
2824                 if (a->argc == 4) {
2825                         size_t pool_avail = callno_pool.available;
2826                         size_t trunk_pool_avail = callno_pool_trunk.available;
2827
2828                         ast_cli(a->fd, "\nNon-CallToken Validation Callno Limit: %d\n"
2829                                          "Non-CallToken Validated Callno Used:   %d\n",
2830                                 global_maxcallno_nonval,
2831                                 total_nonval_callno_used);
2832
2833                         ast_cli(a->fd,   "Total Available Callno:                %zu\n"
2834                                          "Regular Callno Available:              %zu\n"
2835                                          "Trunk Callno Available:                %zu\n",
2836                                 pool_avail + trunk_pool_avail,
2837                                 pool_avail,
2838                                 trunk_pool_avail);
2839                 } else if (a->argc == 5 && !found) {
2840                         ast_cli(a->fd, "No call number table entries for %s found\n", a->argv[4] );
2841                 }
2842
2843
2844                 return CLI_SUCCESS;
2845         default:
2846                 return NULL;
2847         }
2848 }
2849
2850 static int get_unused_callno(enum callno_type type, int validated, callno_entry *entry)
2851 {
2852         struct call_number_pool *pool = NULL;
2853         callno_entry swap;
2854         size_t choice;
2855
2856         switch (type) {
2857         case CALLNO_TYPE_NORMAL:
2858                 pool = &callno_pool;
2859                 break;
2860         case CALLNO_TYPE_TRUNK:
2861                 pool = &callno_pool_trunk;
2862                 break;
2863         default:
2864                 ast_assert(0);
2865                 break;
2866         }
2867
2868         /* If we fail, make sure this has a defined value */
2869         *entry = 0;
2870
2871         /* We lock here primarily to ensure thread safety of the
2872          * total_nonval_callno_used check and increment */
2873         ast_mutex_lock(&callno_pool_lock);
2874
2875         /* Bail out if we don't have any available call numbers */
2876         if (!pool->available) {
2877                 ast_log(LOG_WARNING, "Out of call numbers\n");
2878                 ast_mutex_unlock(&callno_pool_lock);
2879                 return 1;
2880         }
2881
2882         /* Only a certain number of non-validated call numbers should be allocated.
2883          * If there ever is an attack, this separates the calltoken validating users
2884          * from the non-calltoken validating users. */
2885         if (!validated && total_nonval_callno_used >= global_maxcallno_nonval) {
2886                 ast_log(LOG_WARNING,
2887                         "NON-CallToken callnumber limit is reached. Current: %d Max: %d\n",
2888                         total_nonval_callno_used,
2889                         global_maxcallno_nonval);
2890                 ast_mutex_unlock(&callno_pool_lock);
2891                 return 1;
2892         }
2893
2894         /* We use a modified Fisher-Yates-Durstenfeld Shuffle to maintain a list of
2895          * available call numbers.  The array of call numbers begins as an ordered
2896          * list from 1 -> n, and we keep a running tally of how many remain unclaimed
2897          * - let's call that x.  When a call number is needed we pick a random index
2898          * into the array between 0 and x and use that as our call number.  In a
2899          * typical FYD shuffle, we would swap the value that we are extracting with
2900          * the number at x, but in our case we swap and don't touch the value at x
2901          * because it is effectively invisible.  We rely on the rest of the IAX2 core
2902          * to return the number to us at some point.  Finally, we decrement x by 1
2903          * which establishes our new unused range.
2904          *
2905          * When numbers are returned to the pool, we put them just past x and bump x
2906          * by 1 so that this number is now available for re-use. */
2907
2908         choice = ast_random() % pool->available;
2909
2910         *entry = pool->numbers[choice];
2911         swap = pool->numbers[pool->available - 1];
2912
2913         pool->numbers[choice] = swap;
2914         pool->available--;
2915
2916         if (validated) {
2917                 CALLNO_ENTRY_SET_VALIDATED(*entry);
2918         } else {
2919                 total_nonval_callno_used++;
2920         }
2921
2922         ast_mutex_unlock(&callno_pool_lock);
2923
2924         return 0;
2925 }
2926
2927 static int replace_callno(const void *obj)
2928 {
2929         callno_entry entry = PTR_TO_CALLNO_ENTRY(obj);
2930         struct call_number_pool *pool;
2931
2932         /* We lock here primarily to ensure thread safety of the
2933          * total_nonval_callno_used check and decrement */
2934         ast_mutex_lock(&callno_pool_lock);
2935
2936         if (!CALLNO_ENTRY_IS_VALIDATED(entry)) {
2937                 if (total_nonval_callno_used) {
2938                         total_nonval_callno_used--;
2939                 } else {
2940                         ast_log(LOG_ERROR,
2941                                 "Attempted to decrement total non calltoken validated "
2942                                 "callnumbers below zero.  Callno is: %d\n",
2943                                 CALLNO_ENTRY_GET_CALLNO(entry));
2944                 }
2945         }
2946
2947         if (CALLNO_ENTRY_GET_CALLNO(entry) < TRUNK_CALL_START) {
2948                 pool = &callno_pool;
2949         } else {
2950                 pool = &callno_pool_trunk;
2951         }
2952
2953         ast_assert(pool->capacity > pool->available);
2954
2955         /* This clears the validated flag */
2956         entry = CALLNO_ENTRY_GET_CALLNO(entry);
2957
2958         pool->numbers[pool->available] = entry;
2959         pool->available++;
2960
2961         ast_mutex_unlock(&callno_pool_lock);
2962
2963         return 0;
2964 }
2965
2966 static int create_callno_pools(void)
2967 {
2968         uint16_t i;
2969
2970         callno_pool.available = callno_pool_trunk.available = 0;
2971
2972         /* We start at 2.  0 and 1 are reserved. */
2973         for (i = 2; i < TRUNK_CALL_START; i++) {
2974                 callno_pool.numbers[callno_pool.available] = i;
2975                 callno_pool.available++;
2976         }
2977
2978         for (i = TRUNK_CALL_START; i < IAX_MAX_CALLS; i++) {
2979                 callno_pool_trunk.numbers[callno_pool_trunk.available] = i;
2980                 callno_pool_trunk.available++;
2981         }
2982
2983         callno_pool.capacity = callno_pool.available;
2984         callno_pool_trunk.capacity = callno_pool_trunk.available;
2985
2986         ast_assert(callno_pool.capacity && callno_pool_trunk.capacity);
2987
2988         return 0;
2989 }
2990
2991 /*!
2992  * \internal
2993  * \brief Schedules delayed removal of iax2_pvt call number data
2994  *
2995  * \note After MIN_REUSE_TIME has passed for a destroyed iax2_pvt, the callno is
2996  * available again, and the address from the previous connection must be decremented
2997  * from the peercnts table.  This function schedules these operations to take place.
2998  */
2999 static void sched_delay_remove(struct ast_sockaddr *addr, callno_entry entry)
3000 {
3001         int i;
3002         struct peercnt *peercnt;
3003         struct peercnt tmp;
3004
3005         ast_sockaddr_copy(&tmp.addr, addr);
3006
3007         if ((peercnt = ao2_find(peercnts, &tmp, OBJ_POINTER))) {
3008                 /* refcount is incremented with ao2_find.  keep that ref for the scheduler */
3009                 ast_debug(1, "schedule decrement of callno used for %s in %d seconds\n", ast_sockaddr_stringify_addr(addr), MIN_REUSE_TIME);
3010                 i = iax2_sched_add(sched, MIN_REUSE_TIME * 1000, peercnt_remove_cb, peercnt);
3011                 if (i == -1) {
3012                         ao2_ref(peercnt, -1);
3013                 }
3014         }
3015
3016         iax2_sched_add(
3017                 sched,
3018                 MIN_REUSE_TIME * 1000,
3019                 replace_callno,
3020                 CALLNO_ENTRY_TO_PTR(entry));
3021 }
3022
3023 /*!
3024  * \internal
3025  * \brief returns whether or not a frame is capable of starting a new IAX2 dialog.
3026  *
3027  * \note For this implementation, inbound pokes should _NOT_ be capable of allocating
3028  * a new callno.
3029  */
3030 static inline int attribute_pure iax2_allow_new(int frametype, int subclass, int inbound)
3031 {
3032         if (frametype != AST_FRAME_IAX) {
3033                 return 0;
3034         }
3035         switch (subclass) {
3036         case IAX_COMMAND_NEW:
3037         case IAX_COMMAND_REGREQ:
3038         case IAX_COMMAND_FWDOWNL:
3039         case IAX_COMMAND_REGREL:
3040                 return 1;
3041         case IAX_COMMAND_POKE:
3042                 if (!inbound) {
3043                         return 1;
3044                 }
3045                 break;
3046         }
3047         return 0;
3048 }
3049
3050 /*
3051  * \note Calling this function while holding another pvt lock can cause a deadlock.
3052  */
3053 static int __find_callno(unsigned short callno, unsigned short dcallno, struct ast_sockaddr *addr, int new, int sockfd, int return_locked, int check_dcallno)
3054 {
3055         int res = 0;
3056         int x;
3057         /* this call is calltoken validated as long as it is either NEW_FORCE
3058          * or NEW_ALLOW_CALLTOKEN_VALIDATED */
3059         int validated = (new > NEW_ALLOW) ? 1 : 0;
3060         char host[80];
3061
3062         if (new <= NEW_ALLOW) {
3063                 if (callno) {
3064                         struct chan_iax2_pvt *pvt;
3065                         struct chan_iax2_pvt tmp_pvt = {
3066                                 .callno = dcallno,
3067                                 .peercallno = callno,
3068                                 .transfercallno = callno,
3069                                 /* hack!! */
3070                                 .frames_received = check_dcallno,
3071                         };
3072
3073                         ast_sockaddr_copy(&tmp_pvt.addr, addr);
3074                         /* this works for finding normal call numbers not involving transfering */
3075                         if ((pvt = ao2_find(iax_peercallno_pvts, &tmp_pvt, OBJ_POINTER))) {
3076                                 if (return_locked) {
3077                                         ast_mutex_lock(&iaxsl[pvt->callno]);
3078                                 }
3079                                 res = pvt->callno;
3080                                 ao2_ref(pvt, -1);
3081                                 pvt = NULL;
3082                                 return res;
3083                         }
3084                         /* this searches for transfer call numbers that might not get caught otherwise */
3085                         memset(&tmp_pvt.addr, 0, sizeof(tmp_pvt.addr));
3086                         ast_sockaddr_copy(&tmp_pvt.transfer, addr);
3087                         if ((pvt = ao2_find(iax_transfercallno_pvts, &tmp_pvt, OBJ_POINTER))) {
3088                                 if (return_locked) {
3089                                         ast_mutex_lock(&iaxsl[pvt->callno]);
3090                                 }
3091                                 res = pvt->callno;
3092                                 ao2_ref(pvt, -1);
3093                                 pvt = NULL;
3094                                 return res;
3095                         }
3096                 }
3097                         /* This will occur on the first response to a message that we initiated,
3098                  * such as a PING. */
3099                 if (dcallno) {
3100                         ast_mutex_lock(&iaxsl[dcallno]);
3101                 }
3102                 if (callno && dcallno && iaxs[dcallno] && !iaxs[dcallno]->peercallno && match(addr, callno, dcallno, iaxs[dcallno], check_dcallno)) {
3103                         iaxs[dcallno]->peercallno = callno;
3104                         res = dcallno;
3105                         store_by_peercallno(iaxs[dcallno]);
3106                         if (!res || !return_locked) {
3107                                 ast_mutex_unlock(&iaxsl[dcallno]);
3108                         }
3109                         return res;
3110                 }
3111                 if (dcallno) {
3112                         ast_mutex_unlock(&iaxsl[dcallno]);
3113                 }
3114         }
3115         if (!res && (new >= NEW_ALLOW)) {
3116                 callno_entry entry;
3117
3118                 /* It may seem odd that we look through the peer list for a name for
3119                  * this *incoming* call.  Well, it is weird.  However, users don't
3120                  * have an IP address/port number that we can match against.  So,
3121                  * this is just checking for a peer that has that IP/port and
3122                  * assuming that we have a user of the same name.  This isn't always
3123                  * correct, but it will be changed if needed after authentication. */
3124                 if (!iax2_getpeername(*addr, host, sizeof(host)))
3125                         snprintf(host, sizeof(host), "%s", ast_sockaddr_stringify(addr));
3126
3127                 if (peercnt_add(addr)) {
3128                         /* This address has hit its callnumber limit.  When the limit
3129                          * is reached, the connection is not added to the peercnts table.*/
3130                         return 0;
3131                 }
3132
3133                 if (get_unused_callno(CALLNO_TYPE_NORMAL, validated, &entry)) {
3134                         /* since we ran out of space, remove the peercnt
3135                          * entry we added earlier */
3136                         peercnt_remove_by_addr(addr);
3137                         ast_log(LOG_WARNING, "No more space\n");
3138                         return 0;
3139                 }
3140                 x = CALLNO_ENTRY_GET_CALLNO(entry);
3141                 ast_mutex_lock(&iaxsl[x]);
3142
3143                 iaxs[x] = new_iax(addr, host);
3144                 if (iaxs[x]) {
3145                         if (iaxdebug)
3146                                 ast_debug(1, "Creating new call structure %d\n", x);
3147                         iaxs[x]->callno_entry = entry;
3148                         iaxs[x]->sockfd = sockfd;
3149                         ast_sockaddr_copy(&iaxs[x]->addr, addr);
3150                         iaxs[x]->peercallno = callno;
3151                         iaxs[x]->callno = x;
3152                         iaxs[x]->pingtime = DEFAULT_RETRY_TIME;
3153                         iaxs[x]->expiry = min_reg_expire;
3154                         iaxs[x]->pingid = iax2_sched_add(sched, ping_time * 1000, send_ping, (void *)(long)x);
3155                         iaxs[x]->lagid = iax2_sched_add(sched, lagrq_time * 1000, send_lagrq, (void *)(long)x);
3156                         iaxs[x]->amaflags = amaflags;
3157                         ast_copy_flags64(iaxs[x], &globalflags, IAX_NOTRANSFER | IAX_TRANSFERMEDIA | IAX_USEJITTERBUF | IAX_SENDCONNECTEDLINE | IAX_RECVCONNECTEDLINE | IAX_FORCE_ENCRYPT);
3158                         ast_string_field_set(iaxs[x], accountcode, accountcode);
3159                         ast_string_field_set(iaxs[x], mohinterpret, mohinterpret);
3160                         ast_string_field_set(iaxs[x], mohsuggest, mohsuggest);
3161                         ast_string_field_set(iaxs[x], parkinglot, default_parkinglot);
3162
3163                         if (iaxs[x]->peercallno) {
3164                                 store_by_peercallno(iaxs[x]);
3165                         }
3166                 } else {
3167                         ast_log(LOG_WARNING, "Out of resources\n");
3168                         ast_mutex_unlock(&iaxsl[x]);
3169                         replace_callno(CALLNO_ENTRY_TO_PTR(entry));
3170                         return 0;
3171                 }
3172                 if (!return_locked)
3173                         ast_mutex_unlock(&iaxsl[x]);
3174                 res = x;
3175         }
3176         return res;
3177 }
3178
3179 static int find_callno(unsigned short callno, unsigned short dcallno, struct ast_sockaddr *addr, int new, int sockfd, int full_frame) {
3180         return __find_callno(callno, dcallno, addr, new, sockfd, 0, full_frame);
3181 }
3182
3183 static int find_callno_locked(unsigned short callno, unsigned short dcallno, struct ast_sockaddr *addr, int new, int sockfd, int full_frame) {
3184
3185         return __find_callno(callno, dcallno, addr, new, sockfd, 1, full_frame);
3186 }
3187
3188 /*!
3189  * \brief Queue a frame to a call's owning asterisk channel
3190  *
3191  * \pre This function assumes that iaxsl[callno] is locked when called.
3192  *
3193  * \note IMPORTANT NOTE!!! Any time this function is used, even if iaxs[callno]
3194  * was valid before calling it, it may no longer be valid after calling it.
3195  * This function may unlock and lock the mutex associated with this callno,
3196  * meaning that another thread may grab it and destroy the call.
3197  */
3198 static int iax2_queue_frame(int callno, struct ast_frame *f)
3199 {
3200         iax2_lock_owner(callno);
3201         if (iaxs[callno] && iaxs[callno]->owner) {
3202                 ast_queue_frame(iaxs[callno]->owner, f);
3203                 ast_channel_unlock(iaxs[callno]->owner);
3204         }
3205         return 0;
3206 }
3207
3208 /*!
3209  * \brief Queue a hold frame on the ast_channel owner
3210  *
3211  * This function queues a hold frame on the owner of the IAX2 pvt struct that
3212  * is active for the given call number.
3213  *
3214  * \pre Assumes lock for callno is already held.
3215  *
3216  * \note IMPORTANT NOTE!!! Any time this function is used, even if iaxs[callno]
3217  * was valid before calling it, it may no longer be valid after calling it.
3218  * This function may unlock and lock the mutex associated with this callno,
3219  * meaning that another thread may grab it and destroy the call.
3220  */
3221 static int iax2_queue_hold(int callno, const char *musicclass)
3222 {
3223         iax2_lock_owner(callno);
3224         if (iaxs[callno] && iaxs[callno]->owner) {
3225                 ast_queue_hold(iaxs[callno]->owner, musicclass);
3226                 ast_channel_unlock(iaxs[callno]->owner);
3227         }
3228         return 0;
3229 }
3230
3231 /*!
3232  * \brief Queue an unhold frame on the ast_channel owner
3233  *
3234  * This function queues an unhold frame on the owner of the IAX2 pvt struct that
3235  * is active for the given call number.
3236  *
3237  * \pre Assumes lock for callno is already held.
3238  *
3239  * \note IMPORTANT NOTE!!! Any time this function is used, even if iaxs[callno]
3240  * was valid before calling it, it may no longer be valid after calling it.
3241  * This function may unlock and lock the mutex associated with this callno,
3242  * meaning that another thread may grab it and destroy the call.
3243  */
3244 static int iax2_queue_unhold(int callno)
3245 {
3246         iax2_lock_owner(callno);
3247         if (iaxs[callno] && iaxs[callno]->owner) {
3248                 ast_queue_unhold(iaxs[callno]->owner);
3249                 ast_channel_unlock(iaxs[callno]->owner);
3250         }
3251         return 0;
3252 }
3253
3254 /*!
3255  * \brief Queue a hangup frame on the ast_channel owner
3256  *
3257  * This function queues a hangup frame on the owner of the IAX2 pvt struct that
3258  * is active for the given call number.
3259  *
3260  * \pre Assumes lock for callno is already held.
3261  *
3262  * \note IMPORTANT NOTE!!! Any time this function is used, even if iaxs[callno]
3263  * was valid before calling it, it may no longer be valid after calling it.
3264  * This function may unlock and lock the mutex associated with this callno,
3265  * meaning that another thread may grab it and destroy the call.
3266  */
3267 static int iax2_queue_hangup(int callno)
3268 {
3269         iax2_lock_owner(callno);
3270         if (iaxs[callno] && iaxs[callno]->owner) {
3271                 ast_queue_hangup(iaxs[callno]->owner);
3272                 ast_channel_unlock(iaxs[callno]->owner);
3273         }
3274         return 0;
3275 }
3276
3277 /*!
3278  * \note This function assumes that iaxsl[callno] is locked when called.
3279  *
3280  * \note IMPORTANT NOTE!!! Any time this function is used, even if iaxs[callno]
3281  * was valid before calling it, it may no longer be valid after calling it.
3282  * This function calls iax2_queue_frame(), which may unlock and lock the mutex
3283  * associated with this callno, meaning that another thread may grab it and destroy the call.
3284  */
3285 static int __do_deliver(void *data)
3286 {
3287         /* Just deliver the packet by using queueing.  This is called by
3288           the IAX thread with the iaxsl lock held. */
3289         struct iax_frame *fr = data;
3290         fr->retrans = -1;
3291         ast_clear_flag(&fr->af, AST_FRFLAG_HAS_TIMING_INFO);
3292         if (iaxs[fr->callno] && !ast_test_flag64(iaxs[fr->callno], IAX_ALREADYGONE))
3293                 iax2_queue_frame(fr->callno, &fr->af);
3294         /* Free our iax frame */
3295         iax2_frame_free(fr);
3296         /* And don't run again */
32