@ -127,9 +127,6 @@ static int nochecksums = 0;
# define DEFAULT_RETRY_TIME 1000
# define MEMORY_SIZE 100
# define DEFAULT_DROP 3
/* Flag to use with trunk calls, keeping these calls high up. It halves our effective use
but keeps the division between trunked and non - trunked better . */
# define TRUNK_CALL_START 0x4000
# define DEBUG_SUPPORT
@ -151,8 +148,6 @@ static int maxauthreq = 3;
static int max_retries = 4 ;
static int ping_time = 21 ;
static int lagrq_time = 10 ;
static int maxtrunkcall = TRUNK_CALL_START ;
static int maxnontrunkcall = 1 ;
static int maxjitterbuffer = 1000 ;
static int resyncthreshold = 1000 ;
static int maxjitterinterps = 10 ;
@ -811,8 +806,15 @@ static void jb_debug_output(const char *fmt, ...)
/* XXX We probably should use a mutex when working with this XXX */
static struct chan_iax2_pvt * iaxs [ IAX_MAX_CALLS ] ;
static ast_mutex_t iaxsl [ IAX_MAX_CALLS ] ;
static struct timeval lastused [ IAX_MAX_CALLS ] ;
static ast_mutex_t iaxsl [ ARRAY_LEN ( iaxs ) ] ;
static struct timeval lastused [ ARRAY_LEN ( iaxs ) ] ;
/* Flag to use with trunk calls, keeping these calls high up. It halves our effective use
but keeps the division between trunked and non - trunked better . */
# define TRUNK_CALL_START ARRAY_LEN(iaxs) / 2
static int maxtrunkcall = TRUNK_CALL_START ;
static int maxnontrunkcall = 1 ;
static enum ast_bridge_result iax2_bridge ( struct ast_channel * c0 , struct ast_channel * c1 , int flags , struct ast_frame * * fo , struct ast_channel * * rc , int timeoutms ) ;
static int expire_registry ( const void * data ) ;
@ -1263,11 +1265,14 @@ static void update_max_trunk(void)
{
int max = TRUNK_CALL_START ;
int x ;
/* XXX Prolly don't need locks here XXX */
for ( x = TRUNK_CALL_START ; x < IAX_MAX_CALLS - 1 ; x + + ) {
if ( iaxs [ x ] )
for ( x = TRUNK_CALL_START ; x < ARRAY_LEN ( iaxs ) - 1 ; x + + ) {
if ( iaxs [ x ] ) {
max = x + 1 ;
}
}
maxtrunkcall = max ;
if ( option_debug & & iaxdebug )
ast_log ( LOG_DEBUG , " New max trunk callno is %d \n " , max ) ;
@ -1301,7 +1306,7 @@ static int make_trunk(unsigned short callno, int locked)
return - 1 ;
}
gettimeofday ( & now , NULL ) ;
for ( x = TRUNK_CALL_START ; x < IAX_MAX_CALLS - 1 ; x + + ) {
for ( x = TRUNK_CALL_START ; x < ARRAY_LEN ( iaxs ) - 1 ; x + + ) {
ast_mutex_lock ( & iaxsl [ x ] ) ;
if ( ! iaxs [ x ] & & ( ( now . tv_sec - lastused [ x ] . tv_sec ) > MIN_REUSE_TIME ) ) {
iaxs [ x ] = iaxs [ callno ] ;
@ -1321,7 +1326,7 @@ static int make_trunk(unsigned short callno, int locked)
}
ast_mutex_unlock ( & iaxsl [ x ] ) ;
}
if ( x > = IAX_MAX_CALLS - 1 ) {
if ( x > = ARRAY_LEN ( iaxs ) - 1 ) {
ast_log ( LOG_WARNING , " Unable to trunk call: Insufficient space \n " ) ;
return - 1 ;
}
@ -4696,7 +4701,7 @@ static int iax2_show_channels(int fd, int argc, char *argv[])
if ( argc ! = 3 )
return RESULT_SHOWUSAGE ;
ast_cli ( fd , FORMAT2 , " Channel " , " Peer " , " Username " , " ID (Lo/Rem) " , " Seq (Tx/Rx) " , " Lag " , " Jitter " , " JitBuf " , " Format " ) ;
for ( x = 0 ; x < IAX_MAX_CALLS ; x + + ) {
for ( x = 0 ; x < ARRAY_LEN ( iaxs ) ; x + + ) {
ast_mutex_lock ( & iaxsl [ x ] ) ;
if ( iaxs [ x ] ) {
int lag , jitter , localdelay ;
@ -4736,7 +4741,7 @@ static int ast_cli_netstats(struct mansession *s, int fd, int limit_fmt)
{
int x ;
int numchans = 0 ;
for ( x = 0 ; x < IAX_MAX_CALLS ; x + + ) {
for ( x = 0 ; x < ARRAY_LEN ( iaxs ) ; x + + ) {
ast_mutex_lock ( & iaxsl [ x ] ) ;
if ( iaxs [ x ] ) {
int localjitter , localdelay , locallost , locallosspct , localdropped , localooo ;
@ -10092,7 +10097,7 @@ static int cache_get_callno_locked(const char *data)
struct parsed_dial_string pds ;
char * tmpstr ;
for ( x = 0 ; x < IAX_MAX_CALLS ; x + + ) {
for ( x = 0 ; x < ARRAY_LEN ( iaxs ) ; x + + ) {
/* Look for an *exact match* call. Once a call is negotiated, it can only
look up entries for a single context */
if ( ! ast_mutex_trylock ( & iaxsl [ x ] ) ) {
@ -10844,9 +10849,11 @@ static int __unload_module(void)
ast_netsock_release ( netsock ) ;
ast_netsock_release ( outsock ) ;
for ( x = 0 ; x < IAX_MAX_CALLS ; x + + )
if ( iaxs [ x ] )
for ( x = 0 ; x < ARRAY_LEN ( iaxs ) ; x + + ) {
if ( iaxs [ x ] ) {
iax2_destroy ( x ) ;
}
}
ast_manager_unregister ( " IAXpeers " ) ;
ast_manager_unregister ( " IAXnetstats " ) ;
ast_unregister_application ( papp ) ;
@ -10860,8 +10867,9 @@ static int __unload_module(void)
ast_mutex_destroy ( & waresl . lock ) ;
for ( x = 0 ; x < IAX_MAX_CALLS ; x + + )
for ( x = 0 ; x < ARRAY_LEN ( iaxsl ) ; x + + ) {
ast_mutex_destroy ( & iaxsl [ x ] ) ;
}
ao2_ref ( peers , - 1 ) ;
ao2_ref ( users , - 1 ) ;
@ -10920,8 +10928,9 @@ static int load_module(void)
memset ( iaxs , 0 , sizeof ( iaxs ) ) ;
for ( x = 0 ; x < IAX_MAX_CALLS ; x + + )
for ( x = 0 ; x < ARRAY_LEN ( iaxsl ) ; x + + ) {
ast_mutex_init ( & iaxsl [ x ] ) ;
}
ast_cond_init ( & sched_cond , NULL ) ;