8 years agoMerge "res_pjsip_t38: Don't crash on authenticated reinvite after originated T.38...
Matt Jordan [Fri, 24 Apr 2015 14:24:54 +0000 (09:24 -0500)]
Merge "res_pjsip_t38: Don't crash on authenticated reinvite after originated T.38 FAX."

8 years agoMerge "Clang: change previous tautological-compare fixes."
Mark Michelson [Thu, 23 Apr 2015 22:23:50 +0000 (17:23 -0500)]
Merge "Clang: change previous tautological-compare fixes."

8 years agores_pjsip_t38: Don't crash on authenticated reinvite after originated T.38 FAX.
Mark Michelson [Thu, 23 Apr 2015 17:54:30 +0000 (12:54 -0500)]
res_pjsip_t38: Don't crash on authenticated reinvite after originated T.38 FAX.

When Asterisk originates a channel to an application, the channel is
hung up once the application finishes executing. When the application
in question is SendFax, the Asterisk PJSIP code will attempt to reinvite
the T.38 session to audio after the FAX completes. The hangup of the
channel happens in the midst of this reinvite transaction. In most
circumstances, this works out okay because the BYE is delayed until the
reinvite transaction can complete.

However, if the reinvite that Asterisk sends receives a 401/407
response, then Asterisk's attempt to re-send the reinvite with
authentication will fail. This is because the session supplement in
res_pjsip_t38 makes the assumption that the channel on the session will
always be non-NULL. Since the channel has been hung up, though, the
channel is now NULL. Attempting to operate on the channel causes a

This patch fixes the issue by ensuring that the channel on the session
is not NULL before attempting to mess with the T.38 framehook.

This patch also contains some corrections for comments that were
incorrect and really confused me when I first started looking at the

ASTERISK-25004 #close
Reported by Mark Michelson

Change-Id: Ic5a1230668369dda4bb13524098aed9306ab45a0

8 years agores_pjsip: Validate that contact uris start with sip: or sips:
George Joseph [Thu, 23 Apr 2015 14:16:45 +0000 (08:16 -0600)]
res_pjsip:  Validate that contact uris start with sip: or sips:

Currently we use pjsip_parse_hdr to validate contact uris but it
appears that it allows uris without a scheme if there's a port
supplied.  I.E will fail but will
pass even though it has no scheme.  This causes SEGVs later on
whenever the uri is used.

To prevent this, permanent_contact_validate has been updated to check
that the scheme is either 'sip' or 'sips'.

2 uses of possibly-null endpoint have also been fixed in


Change-Id: Ifc17d16a4923e1045d37fe51e43bbe29fa556ca2
Reported-by: Brad Latus

8 years agoClang: change previous tautological-compare fixes.
Diederik de Groot [Thu, 23 Apr 2015 13:00:42 +0000 (15:00 +0200)]
Clang: change previous tautological-compare fixes.

clang can warn about a so called tautological-compare, when it finds
comparisons which are logically always true, and are therefor deemed

unsigned int x = 4;
if (x > 0)    // x is always going to be bigger than 0

Enum Case:
Each enumeration is its own type. Enums are an integer type but they
do not have to be *signed*. C leaves it up to the compiler as an
implementation option what to consider the integer type of a particu-
lar enumeration is. Gcc treats an enum without negative values as
an int while clang treats this enum as an unsigned int.

rmudgett & mmichelson: cast the enum to (unsigned int) in assert.
The cast does have an effect. For gcc, which seems to treat all enums
as int, the cast to unsigned int will eliminate the possibility of
negative values being allowed. For clang, which seems to treat enums
without any negative members as unsigned int, the cast will have no
effect. If for some reason in the future a negative value is ever
added to the enum the assert will still catch the negative value.


Change-Id: I0557ae0154a0b7de68883848a609309cdf0aee6a

8 years agoMerge "Astobj2: Ensure all calls to __adjust_lock pass a valid object."
Matt Jordan [Thu, 23 Apr 2015 11:50:52 +0000 (06:50 -0500)]
Merge "Astobj2: Ensure all calls to __adjust_lock pass a valid object."

8 years agoMerge "New AMI Command Output Format"
Matt Jordan [Thu, 23 Apr 2015 11:31:16 +0000 (06:31 -0500)]
Merge "New AMI Command Output Format"

8 years agores_corosync: Add check for config file before calling corosync apis
George Joseph [Wed, 22 Apr 2015 21:22:10 +0000 (15:22 -0600)]
res_corosync: Add check for config file before calling corosync apis

On some systems, res_corosync isn't compatible with the installed version of
corosync so corosync_cfg_initialize fails, load_module returns LOAD_FAILURE,
and Asterisk terminates.  The work around has been to remember to add
res_corosync as a noload in modules.conf.  A better solution though is to have
res_corosync check for its config file before attempting to call corosync apis
and return LOAD_DECLINE if there's no config file.  This lets Asterisk loading

If you have a res_corosync.conf file and res_corosync fails, you get the same
behavior as today and the fatal error tells you something is wrong with the


Change-Id: Iaf94a9431a4922ec4ec994003f02135acfdd3889

8 years agoAstobj2: Ensure all calls to __adjust_lock pass a valid object.
Corey Farrell [Wed, 22 Apr 2015 20:17:53 +0000 (16:17 -0400)]
Astobj2: Ensure all calls to __adjust_lock pass a valid object.

__adjust_lock doesn't check for invalid objects, and doesn't have an
appropriate return value for invalid objects.  Most callers of
__adjust_lock pass objects that have already been confirmed valid,
this change adds checks before the remaining calls.

ASTERISK-24997 #close
Reported by: Corey Farrell

Change-Id: I669100f87937cc3f867cec56a27ae9c01292908f

8 years ago.gitignore: Add .gcno and .gcda
George Joseph [Wed, 22 Apr 2015 21:32:53 +0000 (15:32 -0600)]
.gitignore:  Add .gcno and .gcda

Products of --enable-coverage

Change-Id: Ie20882d64b60692e2c941ea8872ab82a86ce77a3

8 years agoMerge "dns: Make query sets hold on to queries for their lifetime."
Matt Jordan [Wed, 22 Apr 2015 19:26:02 +0000 (14:26 -0500)]
Merge "dns: Make query sets hold on to queries for their lifetime."

8 years agoMerge "Fix/Update clang-RAII macro implementation"
Matt Jordan [Wed, 22 Apr 2015 19:25:47 +0000 (14:25 -0500)]
Merge "Fix/Update clang-RAII macro implementation"

8 years agoMerge "res_pjsip_mwi: Send unsolicited MWI NOTIFY on startup and when endpoint regist...
Mark Michelson [Wed, 22 Apr 2015 19:07:58 +0000 (14:07 -0500)]
Merge "res_pjsip_mwi: Send unsolicited MWI NOTIFY on startup and when endpoint registers."

8 years agodns: Make query sets hold on to queries for their lifetime.
Joshua Colp [Wed, 22 Apr 2015 16:28:09 +0000 (13:28 -0300)]
dns: Make query sets hold on to queries for their lifetime.

The query set documentation states that upon completion queries can be
retrieved for the lifetime of the query set. This is a reasonable
expectation but does not currently occur. This was originally done
to resolve a circular reference between queries and query sets, but
in practice the query can be kept.

This change makes it so a query does not have a reference to the
query set until it begins resolving. It also makes it so that the
reference is given up upon the query being completed. This allows
the queries to remain for the lifetime of the query set. As the
query set on the query is only useful to the query set functionality
and only for the lifetime that the query is resolving this is safe
to do.

ASTERISK-24994 #close
Reported by: Joshua Colp

Change-Id: I54e09c0cb45475896654e7835394524e816d1aa0

8 years agoMerge "cdr/cdr_adaptive_odbc.c: Refactor concatenate columns name."
Matt Jordan [Wed, 22 Apr 2015 11:27:38 +0000 (06:27 -0500)]
Merge "cdr/cdr_adaptive_odbc.c: Refactor concatenate columns name."

8 years agoFix/Update clang-RAII macro implementation
Diederik de Groot [Mon, 20 Apr 2015 18:01:35 +0000 (20:01 +0200)]
Fix/Update clang-RAII macro implementation

- When you need to refer to 'variable XXX' outside a block, it needs
to be declared as '__block XXX', otherwise it will not be available with-
in the block, making updating that variable hard to do, and ast_free
lead to issues.

- Removed the #error message
because it creates complications when compiling external projects
against asterisk For example when using a different compiler than the
one used to compile asterisk. The warning/error should be generated
during the configure process not the compilation process

Change-Id: I12091228090e90831bf2b498293858f46ea7a8c2

8 years agoMerge "Check for ao2_alloc failure in __ast_channel_internal_alloc."
Joshua Colp [Wed, 22 Apr 2015 10:46:00 +0000 (05:46 -0500)]
Merge "Check for ao2_alloc failure in __ast_channel_internal_alloc."

8 years agores_pjsip_mwi: Send unsolicited MWI NOTIFY on startup and when endpoint registers.
Joshua Colp [Tue, 14 Apr 2015 19:04:46 +0000 (16:04 -0300)]
res_pjsip_mwi: Send unsolicited MWI NOTIFY on startup and when endpoint registers.

Currently the res_pjsip_mwi module only sends an unsolicited MWI NOTIFY upon
a mailbox state change (such as a new message being left, or one being deleted).
In practice this is not sufficient to keep clients aware of the current MWI status.

This change makes the module send unsolicited MWI NOTIFY on startup so that
clients are guaranteed to have the most up to date MWI information. It also makes
clients receive an unsolicited MWI NOTIFY upon registration so if they are unaware
of the current MWI status they receive it.

ASTERISK-24982 #close
Reported by: Joshua Colp

Change-Id: I043f20230227e91218f18a82c7d5bb2aa62b1d58

8 years agoMerge "res_pjsip_pubsub: Set the endpoint on SUBSCRIBE dialogs."
Joshua Colp [Wed, 22 Apr 2015 10:29:18 +0000 (05:29 -0500)]
Merge "res_pjsip_pubsub: Set the endpoint on SUBSCRIBE dialogs."

8 years agoCheck for ao2_alloc failure in __ast_channel_internal_alloc.
Corey Farrell [Tue, 21 Apr 2015 20:17:33 +0000 (16:17 -0400)]
Check for ao2_alloc failure in __ast_channel_internal_alloc.

Fix a crash that could occur in __ast_channel_internal_alloc if
ao2_alloc fails.

ASTERISK-24991 #close

Change-Id: I4ca89189eb22f907408cb87d0a1645cfe1314a90

8 years agores_pjsip_pubsub: Set the endpoint on SUBSCRIBE dialogs.
Mark Michelson [Mon, 20 Apr 2015 19:30:47 +0000 (14:30 -0500)]
res_pjsip_pubsub: Set the endpoint on SUBSCRIBE dialogs.

When SUBSCRIBE dialogs were established, we never associated
the endpoint that created the subscription with the dialog
we end up creating. In most cases, this ended up not causing
any problems.

The actual bug that was observed was that when a device that
was behind NAT established a subscription with Asterisk, Asterisk
would end up sending in-dialog NOTIFY requests to the device's
private IP addres instead of the public address of the NAT router.

When Asterisk receives the initial SUBSCRIBE from the device,
res_pjsip_nat rewrites the contact to the public address on which the
SUBSCRIBE was received. This allows for the dialog to have its target
address set to the proper public address. Asterisk then would send a 200
OK response to the SUBSCRIBE, then a NOTIFY with the initial
subscription state. The device would then send a 200 OK response to
Asterisk's NOTIFY.

Here's where things went wrong. When the 200 OK arrived, res_pjsip_nat
did not rewrite the address in the Contact header. Then, when the PJSIP
dialog layer processed the 200 OK, PJSIP would perform a comparison
between the IP address in the Contact header and its saved target
address for the dialog. Since they differed, PJSIP would update the
target dialog address to be the address in the Contact header. From this
point, if Asterisk needed to send a NOTIFY to the device, the result was
that the NOTIFY would be sent to the private address that the device
placed in the Contact header.

The reason why res_pjsip_nat did not rewrite the address when it
received the 200 OK response was that it could not associate the
incoming response with a configured endpoint. This is because on a
response, the only way to associate the response to an endpoint is by
finding the dialog that the response is associated with and then finding
the endpoint that is associated with that dialog. We do not perform
endpoint lookups on responses. res_pjsip_pubsub skipped the step of
associating the endpoint with the dialog we created, so res_pjsip_nat
could not find the associated endpoint and therefore couldn't rewrite
the contact.

This commit message is like 50x longer than the actual fix.

ASTERISK 24981 #close
Reported by Mark Michelson

Change-Id: I2b963c58c063bae293e038406f7d044a8a5377cd

8 years agoNew AMI Command Output Format
Gareth Palmer [Fri, 17 Apr 2015 03:34:59 +0000 (15:34 +1200)]
New AMI Command Output Format

This change modifies how the the output from a CLI command is sent
to a client over AMI.

Output from the CLI command is now sent as a series of zero-or-more
Output: headers.

Additionally, commands that fail to execute (eg: no such command,
invalid syntax etc.) now cause an Error response instead of Success.

If the command executed successfully, but the manager unable to
provide the output the reason will be included in the Message:
header. Otherwise it will contain 'Command output follows'.

Depends on a new version of starpy (> 1.0.2) that supports the new
output format.

See pull-request


Change-Id: I6718d95490f0a6b3f171c1a5cdad9207f9a44888

8 years agochan_dahdi/sig_pri: Make post AMI HangupRequest events on PRI channels.
Richard Mudgett [Mon, 20 Apr 2015 23:00:34 +0000 (18:00 -0500)]
chan_dahdi/sig_pri: Make post AMI HangupRequest events on PRI channels.

The chan_dahdi channel driver is a very old driver.  The ability for it to
support ISDN was added well after the initial analog support.  Setting the
softhangup flags is a carry over from the original analog code.  The
driver was not updated to call ast_queue_hangup() which will post the AMI
HangupRequest event.

* Changed sig_pri.c to call ast_queue_hangup() instead of setting the
softhangup flag when the remote party initiates a hangup.

ASTERISK-24895 #close
Reported by: Andrew Zherdin

Change-Id: I5fe2e48556507785fd8ab8e1c960683fd5d20325

8 years agoMerge "pjsip_options: Fix non-qualified contacts showing as unavailable"
Joshua Colp [Mon, 20 Apr 2015 22:24:04 +0000 (17:24 -0500)]
Merge "pjsip_options:  Fix non-qualified contacts showing as unavailable"

8 years agocdr/cdr_adaptive_odbc.c: Refactor concatenate columns name.
Rodrigo Ramírez Norambuena [Mon, 20 Apr 2015 18:40:12 +0000 (15:40 -0300)]
cdr/cdr_adaptive_odbc.c: Refactor concatenate columns name.

The concatenate for columns name to INSERT INTO is always the same. It is
possible to do it on one line.


Change-Id: Ib8bb53c42535378581d4ef729cc5ebbb22b067ac

8 years agopjsip_options: Fix format specifier for int64_t rtt.
George Joseph [Mon, 20 Apr 2015 14:53:00 +0000 (08:53 -0600)]
pjsip_options:  Fix format specifier for int64_t rtt.

Contact status rtt is an int64_t and needs the PRId64 macro to
properly create the format specifier on 32-bit systems.

Change-Id: I4b8ab958fc1e9a179556a9b4ffa49673ba9fdec7

8 years agoMerge "main/pbx: Don't attempt to destroy a previously destroyed exten/priority tuple"
Matt Jordan [Mon, 20 Apr 2015 11:30:03 +0000 (06:30 -0500)]
Merge "main/pbx: Don't attempt to destroy a previously destroyed exten/priority tuple"

8 years agoMerge "Fix issue with AST_THREADSTORAGE_RAW when DEBUG_THREADLOCALS is enabled."
Joshua Colp [Mon, 20 Apr 2015 10:53:48 +0000 (05:53 -0500)]
Merge "Fix issue with AST_THREADSTORAGE_RAW when DEBUG_THREADLOCALS is enabled."

8 years agopjsip_options: Fix non-qualified contacts showing as unavailable
George Joseph [Sat, 18 Apr 2015 18:36:19 +0000 (12:36 -0600)]
pjsip_options:  Fix non-qualified contacts showing as unavailable

The "Add qualify_timeout processing and eventing" patch introduced
an issue where contacts that had qualify_frequency set to 0 were
showing Unavailable instead Unknown.  This patch checks for
qualify_frequency=0 and create an "Unknown"  contact_status
with an RTT = 0.

Previously, the lack of contact_status implied Unknown but since
we're now changing endpoint state based on contact_status, I've
had to add new UNKNOWN status so that changes could trigger the
appropriate contact_status observers.

ASTERISK-24977: #close

Change-Id: Ifcbc01533ce57f0e4e584b89a395326e098b8fe7

8 years agomain/pbx: Don't attempt to destroy a previously destroyed exten/priority tuple
Matt Jordan [Sun, 19 Apr 2015 20:49:43 +0000 (15:49 -0500)]
main/pbx: Don't attempt to destroy a previously destroyed exten/priority tuple

When a PBX registrar is unloaded, it will fail to remove its extension from
the context root_table if a dialplan application used by that extension is
still loaded. This can be the case for AGI, which can be unloaded after several
of the standard PBX providers. Often, this is harmless; however, if the
extension's priorities are removed during the failed unloading *and* the
dialplan application later unregisters, it leaves a ticking timebomb for the
next PBX provider that attempts to iterate over the extensions. When that
occurs, the peer_table pointer on the extension will already be set to NULL.
The current code does not check to see if the pointer is NULL before passing
it to a hashtab function this is not NULL tolerant.

Since it is possible for the peer_table to be NULL when we normally would not
expect that to be the case, the solution in this patch is to simply skip over
processing an extension's priorities if peer_table is NULL.

Prior to this patch, the tests/pbx/callerid_match test would crash during
module unload. With this patch, the test no longer crashes after running.

ASTERISK-24774 #close
Reported by: Corey Farrell

Change-Id: I2bbeecb7e0f77bac303a1b9135e4cdb4db6d4c40

8 years agores_fax: Fix latent bug exposed by ASTERISK-24841 changes.
Richard Mudgett [Fri, 17 Apr 2015 23:05:37 +0000 (18:05 -0500)]
res_fax: Fix latent bug exposed by ASTERISK-24841 changes.

Three fax related tests started failing as a result of changes made for

Historically, ast_channel_make_compatible() did nothing if the channels
were already "compatible" even if they had a sub-optimal translation path
already setup.  With the changes from ASTERISK-24841 this is no longer
true in order to allow the best translation paths to always be picked.  In
res_fax.c:fax_gateway_framehook() code manually setup the channels to go
through slin and then called ast_channel_make_compatible().  With the
previous version of ast_channel_make_compatible() this was always a

* Remove call to ast_channel_make_compatible() in fax_gateway_framehook()
that now undoes what was just setup when the framehook is attached.

* Fixed locking around saving the channel formats in
fax_gateway_framehook() to ensure that the formats that are saved are

* Fix copy pasta errors in fax_gateway_framehook() that confuses read and
write when dealing with saved channel formats.

Reported by: Matt Jordan

Change-Id: I6fda0877104a370af586a5e8cf9e161a484da78d

8 years agoFix issue with AST_THREADSTORAGE_RAW when DEBUG_THREADLOCALS is enabled.
Corey Farrell [Fri, 17 Apr 2015 21:19:24 +0000 (17:19 -0400)]

When DEBUG_THREADLOCALS is enabled it causes the threadlocal cleanup to be
called as a function.  This causes a compile error with raw threadstorage as
it uses NULL for cleanup.  This fix uses a macro that provides NULL when
DEBUG_THREADLOCALS is disabled, and replaces the call to "c_cleanup(data);"
with "{};" when DEBUG_THREADLOCALS is enabled.

ASTERISK-24975 #close
Reported by: Ashley Sanders

Change-Id: I3ef7428ee402816d9fcefa1b3b95830c00d5c402

8 years agoMerge "Detect potential forwarding loops based on count."
Matt Jordan [Fri, 17 Apr 2015 20:58:13 +0000 (15:58 -0500)]
Merge "Detect potential forwarding loops based on count."

8 years agoDetect potential forwarding loops based on count.
Mark Michelson [Wed, 15 Apr 2015 15:38:02 +0000 (10:38 -0500)]
Detect potential forwarding loops based on count.

A potential problem that can arise is the following:

* Bob's phone is programmed to automatically forward to Carol.
* Carol's phone is programmed to automatically forward to Bob.
* Alice calls Bob.

If left unchecked, this results in an endless loops of call forwards
that would eventually result in some sort of fiery crash.

Asterisk's method of solving this issue was to track which interfaces
had been dialed. If a destination were dialed a second time, then
the attempt to call that destination would fail since a loop was

The problem with this method is that call forwarding has evolved. Some
SIP phones allow for a user to manually forward an incoming call to an
ad-hoc destination. This can mean that:

* There are legitimate use cases where a device may be dialed multiple
times, or
* There can be human error when forwarding calls.

This change removes the old method of detecting forwarding loops in
favor of keeping a count of the number of destinations a channel has
dialed on a particular branch of a call. If the number exceeds the
set number of max forwards, then the call fails. This approach has
the following advantages over the old:

* It is much simpler.
* It can detect loops involving local channels.
* It is user configurable.

The only disadvantage it has is that in the case where there is a
legitimate forwarding loop present, it takes longer to detect it.
However, the forwarding loop is still properly detected and the
call is cleaned up as it should be.

Address review feedback on gerrit.

* Correct "mfgium" to "Digium"
* Decrement max forwards by one in the case where allocation of the
  max forwards datastore is required.
* Remove irrelevant code change from pjsip_global_headers.c

ASTERISK-24958 #close

Change-Id: Ia7e4b7cd3bccfbd34d9a859838356931bba56c23

8 years agoMerge topic 'ASTERISK-24863'
Matt Jordan [Fri, 17 Apr 2015 20:33:29 +0000 (15:33 -0500)]
Merge topic 'ASTERISK-24863'

* changes:
  res_pjsip: Add global option to limit the maximum time for initial qualifies
  pjsip_options: Add qualify_timeout processing and eventing
  res_pjsip: Refactor endpt_send_request to include transaction timeout

8 years agoMerge "res_pjsip_pubsub: On notify fail deleted sub_tree is then referenced"
Joshua Colp [Fri, 17 Apr 2015 15:25:23 +0000 (10:25 -0500)]
Merge "res_pjsip_pubsub: On notify fail deleted sub_tree is then referenced"

8 years agobridge.c: NULL app causes crash during attended transfer
Kevin Harwell [Thu, 16 Apr 2015 15:51:50 +0000 (10:51 -0500)]
bridge.c: NULL app causes crash during attended transfer

Due to a race condition there was a chance that during an attended transfer the
channel's application would return NULL. This, of course, would cause a crash
when attempting to access the memory. This patch retrieves the channel's app
at an earlier time in processing in hopes that the app name is available.
However, if it is not then "unknown" is used instead. Since some string value
is now always present the crash can no longer occur.

ASTERISK-24869 #close
Reported by: viniciusfontes

Change-Id: I5134b84c4524906d8148817719d76ffb306488ac

8 years agores_pjsip: Add global option to limit the maximum time for initial qualifies
George Joseph [Sat, 11 Apr 2015 22:04:32 +0000 (16:04 -0600)]
res_pjsip: Add global option to limit the maximum time for initial qualifies

Currently when Asterisk starts initial qualifies of contacts are spread out
randomly between 0 and qualify_timeout to prevent network and system overload.
If a contact's qualify_frequency is 5 minutes however, that contact may be
unavailable to accept calls for the entire 5 minutes after startup.  So while
staggering the initial qualifies is a good idea, basing the time on
qualify_timeout could leave contacts unavailable for too long.

This patch adds a new global parameter "max_initial_qualify_time" that sets the
maximum time for the initial qualifies.  This way you could make sure that all
your contacts are initialy, randomly qualified within say 30 seconds but still
have the contact's ongoing qualifies at a 5 minute interval.

If max_initial_qualify_time is > 0, the formula is initial_interval =
min(max_initial_interval, qualify_timeout * random().  If not set,
qualify_timeout is used.

The default is "0" (disabled).

ASTERISK-24863 #close

Change-Id: Ib80498aa1ea9923277bef51d6a9015c9c79740f4
Tested-by: George Joseph <>

8 years agores_pjsip_pubsub: On notify fail deleted sub_tree is then referenced
Scott Griepentrog [Thu, 16 Apr 2015 18:20:29 +0000 (13:20 -0500)]
res_pjsip_pubsub: On notify fail deleted sub_tree is then referenced

This change makes the send_notify of the sub_tree
not happen when the sub_tree has been deleted due
to the notify call failing, which avoids a crash.

ASTERISK-24970 #close

Change-Id: I1f20ffc08b192f59c457293b218025a693992cbf

8 years agopjsip_options: Add qualify_timeout processing and eventing
George Joseph [Sat, 11 Apr 2015 21:56:52 +0000 (15:56 -0600)]
pjsip_options: Add qualify_timeout processing and eventing

This is the second follow-on to and the
discussion at

The basic issues are that changes in contact status don't cause events to be
emitted for the associated endpoint.  Only dynamic contact add/delete actions
update the endpoint.  Also, the qualify timeout is fixed by pjsip at 32 seconds
which is a long time.

This patch makes use of the new transaction timeout feature in r4585 and
provides the following capabilities...

1.  A new aor/contact variable 'qualify_timeout' has been added that allows the
user to specify the maximum time in milliseconds to wait for a response to an
OPTIONS message.  The default is 3000ms.  When the timer expires, the contact is
marked unavailable.

2.  Contact status changes are now propagated up to the endpoint as follows...
When any contact is 'Available', the endpoint is marked as 'Reachable'.  When
all contacts are 'Unavailable', the endpoint is marked as 'Unreachable'.  The
existing endpoint events are generated appropriately.

ASTERISK-24863 #close

Change-Id: Id0ce0528e58014da1324856ea537e7765466044a
Tested-by: Dmitriy Serov
Tested-by: George Joseph <>

8 years agoMerge "res_pjsip: Add external PJSIP resolver implementation using core DNS API."
Matt Jordan [Thu, 16 Apr 2015 12:13:21 +0000 (07:13 -0500)]
Merge "res_pjsip: Add external PJSIP resolver implementation using core DNS API."

8 years agores_pjsip: Refactor endpt_send_request to include transaction timeout
George Joseph [Sat, 11 Apr 2015 21:39:29 +0000 (15:39 -0600)]
res_pjsip: Refactor endpt_send_request to include transaction timeout

This is the first follow-on to and the
discussion at

Since we currently have no control over pjproject transaction timeout, this
patch pulls the pjsip_endpt_send_request function out of pjproject and into
res_pjsip/endpt_send_transaction in order to implement that capability.

Now when the transaction is initiated, we also schedule our own pj_timer with
our own desired timeout.

If the transaction completes before either timeout, pjproject cancels its timer,
and calls our tsx callback where we cancel our timer and run the app callback.

If the pjproject timer times out first, pjproject calls our tsx callback where
we cancel our timer and run the app callback.

If our timer times out first, we terminate the transaction which causes
pjproject to cancel its timer and call our tsx callback where we run the app

Regardless of the scenario, pjproject is calling the tsx callback inside the
group_lock and there are checks in the callback to make sure it doesn't run

As part of this patch ast_sip_send_out_of_dialog_request was created to replace
its similarly named private function.  It takes a new timeout argument in
milliseconds (<= 0 to disable the timeout).

ASTERISK-24863 #close
Reported-by: George Joseph <>
Tested-by: George Joseph <>

Change-Id: I0778dc730d9689c5147a444a04aee3c1026bf747

8 years agoMerge "Build System: Enable use of ~/.asterisk.makeopts and /etc/asterisk.makeopts."
Matt Jordan [Thu, 16 Apr 2015 02:26:24 +0000 (21:26 -0500)]
Merge "Build System: Enable use of ~/.asterisk.makeopts and /etc/asterisk.makeopts."

8 years agoMore .gitignore updates
George Joseph [Wed, 15 Apr 2015 21:08:09 +0000 (15:08 -0600)]
More .gitignore updates

Added .pyc and .sha1 to the top-level .gitignore.

Change-Id: I7dfc4f554d54d22947b38140d3305007503cc16a
Tested-by: George Joseph <>

8 years agoBuild System: Enable use of ~/.asterisk.makeopts and /etc/asterisk.makeopts.
Corey Farrell [Tue, 14 Apr 2015 07:36:03 +0000 (03:36 -0400)]
Build System: Enable use of ~/.asterisk.makeopts and /etc/asterisk.makeopts.

The Makefile claims that you can set default menuselect options by creating
~/.asterisk.makeopts or /etc/asterisk.makeopts, but they are never read.
The rule for menuselect.makeopts is only allowed to run if the active target
is 'menuselect', but the menuselect target doesn't depend on
menuselect.makeopts.  A dot (wildcard character) was added so the rule will
be active for the targets that cause it to run: nmenuselect, cmenuselect,
and gmenuselect.

ASTERISK-13271 #close
Reported by: John Nemeth

Change-Id: Ibde804ff196283def49ccb9432fbf224a22586e2

8 years agores_pjsip: Add external PJSIP resolver implementation using core DNS API.
Joshua Colp [Mon, 13 Apr 2015 13:47:01 +0000 (10:47 -0300)]
res_pjsip: Add external PJSIP resolver implementation using core DNS API.

This change adds the following:

1. A query set implementation. This is an API that allows queries to be executed in parallel and once all have completed a callback is invoked.
2. Unit tests for the query set implementation.
3. An external PJSIP resolver which uses the DNS core API to do NAPTR, SRV, AAAA, and A lookups.

For the resolver it will do NAPTR, SRV, and AAAA/A lookups in parallel. If NAPTR or SRV
are available it will then do more queries. And so on. Preference is NAPTR > SRV > AAAA/A,
with IPv6 preferred over IPv4. For transport it will prefer TLS > TCP > UDP if no explicit
transport has been provided. Configured transports on the system are taken into account to
eliminate resolved addresses which have no hope of completing.

ASTERISK-24947 #close
Reported by: Joshua Colp

Change-Id: I56cb03ce4f9d3d600776f36928e0b3e379b5d71e

8 years agoMerge "cel_pgsql: Fix name string for log on unable allocate memory."
Matt Jordan [Wed, 15 Apr 2015 12:04:15 +0000 (07:04 -0500)]
Merge "cel_pgsql: Fix name string for log on unable allocate memory."

8 years agocel_pgsql: Fix name string for log on unable allocate memory.
Rodrigo Ramírez Norambuena [Tue, 14 Apr 2015 18:16:45 +0000 (15:16 -0300)]
cel_pgsql: Fix name string for log on unable allocate memory.

The LOG_ERROR has reference to CDR instead of CEL  for LENGTHEN_BUF1 and

ASTERISK-24965 #close
Reported by: Rodrigo Ramirez Norambuena

Change-Id: Icc818697d7d66d34bfe3048cdd15ca2b06c89744

8 years agotest_astobj2_weaken: Fix source file registration.
Corey Farrell [Tue, 14 Apr 2015 20:59:29 +0000 (16:59 -0400)]
test_astobj2_weaken: Fix source file registration.

Update test_astobj2_weaken to use the new AST_REGISTER_FILE macro.

Change-Id: Ieedadf16610f2e042f393e0501a36447cd07f83d

8 years agoMerge "Build System: Create Makefile macro MOD_ADD_SOURCE."
Matt Jordan [Tue, 14 Apr 2015 17:39:15 +0000 (12:39 -0500)]
Merge "Build System: Create Makefile macro MOD_ADD_SOURCE."

8 years agoMerge "astobj2: Add support for weakproxy objects."
Matt Jordan [Tue, 14 Apr 2015 17:39:02 +0000 (12:39 -0500)]
Merge "astobj2: Add support for weakproxy objects."

8 years agoMerge ".gitignore updates for master/13"
Matt Jordan [Tue, 14 Apr 2015 17:25:56 +0000 (12:25 -0500)]
Merge ".gitignore updates for master/13"

8 years agoBuild System: Create Makefile macro MOD_ADD_SOURCE.
Corey Farrell [Mon, 13 Apr 2015 10:28:32 +0000 (06:28 -0400)]
Build System: Create Makefile macro MOD_ADD_SOURCE.

This new macro allows a single line to add all additional
sources to a module.  This helps prevent modules from
missing steps, and makes future changes easier since
they can be made in a single place.

ASTERISK-24960 #close
Reported by: Corey Farrell

Change-Id: I38f12d8b72c5e7bb37a879b2fb51761a2855eb4b

8 years agoMerge "cdr_pgsql: Fix CLI "cdr show pgsql status" command."
Matt Jordan [Tue, 14 Apr 2015 16:39:55 +0000 (11:39 -0500)]
Merge "cdr_pgsql: Fix CLI "cdr show pgsql status" command."

8 years agocdr_pgsql: Fix CLI "cdr show pgsql status" command.
Rodrigo Ramírez Norambuena [Sun, 12 Apr 2015 14:08:30 +0000 (11:08 -0300)]
cdr_pgsql: Fix CLI "cdr show pgsql status" command.

The command always showed the usage information.

* Fix the error in command validation for CLI_SHOWUSAGE.

ASTERISK-24959 #close
Reported by: Rodrigo Ramirez Norambuena

Change-Id: I584f0936bb01001336a468a55c1d05d79fe795d5

8 years ago.gitignore updates for master/13
George Joseph [Tue, 14 Apr 2015 00:06:46 +0000 (18:06 -0600)]
.gitignore updates for master/13

Added products of ./bootstrap

Added nmenuselect and gmenuselect to menuselect/

Change-Id: Ied658463958bafc04a9aff9ebc28e40c116a6e35

8 years agoAMI: Fix improper handling of lines that are exactly 1025 bytes long.
Corey Farrell [Mon, 13 Apr 2015 11:52:01 +0000 (07:52 -0400)]
AMI: Fix improper handling of lines that are exactly 1025 bytes long.

When AMI receives a line that is 1025 bytes long, it sends two error
messages.  Copy the last byte in the buffer to the first postiion,
set the length to 1.

ASTERISK-20524 #close
Reported by: David M. Lee

Change-Id: Ifda403e2713b59582c715229814fd64a0733c5ea

8 years agoastobj2: Add support for weakproxy objects.
Corey Farrell [Sun, 12 Apr 2015 08:22:41 +0000 (04:22 -0400)]
astobj2: Add support for weakproxy objects.

This implements "weak" references.  The weakproxy object is a real ao2 with
normal reference counting of its own.  When a weakproxy is pointed to a normal
object they hold references to each other.  The normal object is automatically
freed when a single reference remains (the weakproxy).  The weakproxy also
supports subscriptions that will notify callbacks when it does not point
to any real object.

ASTERISK-24936 #close
Reported by: Corey Farrell

Change-Id: Ib9f73c02262488d314d9d9d62f58165b9ec43c67

8 years agoFixing extconf compile
David M. Lee [Mon, 13 Apr 2015 19:41:40 +0000 (14:41 -0500)]
Fixing extconf compile

During the mass code deletion for clang support, a stray backslash was
left behind that was causing utils to fail to compile.

Change-Id: I60e5fa58c9a5b248bde23aaada79ff663f87a2a1

8 years agoMerge "build_tools/make_version: Update version parsing for Git migration"
Matt Jordan [Mon, 13 Apr 2015 17:03:46 +0000 (12:03 -0500)]
Merge "build_tools/make_version: Update version parsing for Git migration"

8 years agoMerge "git migration: Refactor the ASTERISK_FILE_VERSION macro"
Joshua Colp [Mon, 13 Apr 2015 16:08:07 +0000 (11:08 -0500)]
Merge "git migration: Refactor the ASTERISK_FILE_VERSION macro"

8 years agobuild_tools/make_version: Update version parsing for Git migration
Matt Jordan [Mon, 13 Apr 2015 14:54:18 +0000 (09:54 -0500)]
build_tools/make_version: Update version parsing for Git migration

External systems - such as the Asterisk Test Suite - require knowledge of the
upstream branch. Unfortunately, after moving to Git, the Asterisk version
currently consists of only a 'GIT" prefix followed by an object blob,
e.g., GIT-as08d7. This makes it difficult for such systems to know what
features are available in a particular check out of Asterisk.

This patch fixes this by hardcoding the branch in a variable in the
make_version script. Since the mainline branches are not changed often -
typically only once a year - this is a reasonable approach to solving
the problem, and is more reliable than parsing the output of 'git branch
-vv'. Branches that track off of an upstream primary branch will then get the
benefit of knowing which mainline branch they are currently based off

ASTERISK-24954 #close

Change-Id: I8090d5d548b6d19e917157ed530b914b7eaf9799

8 years agoOptional API: Fix handling of sources that are both provider and user.
Corey Farrell [Mon, 13 Apr 2015 10:57:02 +0000 (06:57 -0400)]
Optional API: Fix handling of sources that are both provider and user.

OPTIONAL_API has conditionals to define AST_OPTIONAL_API and
AST_OPTIONAL_API_ATTR differently based on if AST_API_MODULE is defined.
Unfortunately this is inside the include protection block, so only the
first status of AST_API_MODULE is respected.  For example res_monitor
is an optional API provider, but uses func_periodic_hook.  This makes
func_periodic_hook non-optional to res_monitor.

This changes optional_api.h so that AST_OPTIONAL_API and
AST_OPTIONAL_API_ATTR is redefined every time the header is included.

ASTERISK-17608 #close
Reported by: Warren Selby

Change-Id: I8fcf2a5e7b481893e17484ecde4f172c9ffb5679

8 years agogit migration: Refactor the ASTERISK_FILE_VERSION macro
Matt Jordan [Sun, 12 Apr 2015 02:38:22 +0000 (21:38 -0500)]
git migration: Refactor the ASTERISK_FILE_VERSION macro

Git does not support the ability to replace a token with a version
string during check-in. While it does have support for replacing a
token on clone, this is somewhat sub-optimal: the token is replaced
with the object hash, which is not particularly easy for human
consumption. What's more, in practice, the source file version was often
not terribly useful. Generally, when triaging bugs, the overall version
of Asterisk is far more useful than an individual SVN version of a file. As a
result, this patch removes Asterisk's support for showing source file

Specifically, it does the following:

  remove passing the version in with the macro. Other facilities
  than 'core show file version' make use of the file names, such as
  setting a debug level only on a specific file. As such, the act of
  registering source files with the Asterisk core still has use. The
  macro rename now reflects the new macro purpose.

* main/asterisk:
  - Refactor the file_version structure to reflect that it no longer
    tracks a version field.
  - Remove the "core show file version" CLI command. Without the file
    version, it is no longer useful.
  - Remove the ast_file_version_find function. The file version is no
    longer tracked.
  - Rename ast_register_file_version/ast_unregister_file_version to
    ast_register_file/ast_unregister_file, respectively.

* main/manager: Remove value from the Version key of the ModuleCheck
  Action. The actual key itself has not been removed, as doing so would
  absolutely constitute a backwards incompatible change. However, since
  the file version is no longer tracked, there is no need to attempt to
  include it in the Version key.

* UPGRADE: Add notes for:
  - Modification to the ModuleCheck AMI Action
  - Removal of the "core show file version" CLI command

Change-Id: I6cf0ff280e1668bf4957dc21f32a5ff43444a40e

8 years agoMerge "main/editline: Add .gitignore."
Matt Jordan [Sun, 12 Apr 2015 18:58:23 +0000 (13:58 -0500)]
Merge "main/editline: Add .gitignore."

8 years agomain/editline: Add .gitignore.
Corey Farrell [Sun, 12 Apr 2015 11:12:45 +0000 (07:12 -0400)]
main/editline: Add .gitignore.

This patch adds a .gitignore for main/editline to ignore all build results.

Change-Id: I68c7bf375ea46282689e5a706534b69fca233b5d

8 years ago.gitignore: Ignore tarballs (*.gz)
Matt Jordan [Sun, 12 Apr 2015 04:22:59 +0000 (23:22 -0500)]
.gitignore: Ignore tarballs (*.gz)

This patch updates the root .gitignore file to ignore files with a .gz
extension. This will cause git to ignore downloaded sound tarballs in
the the sounds/ directory.

Change-Id: Ie84f085cc0fa51262209e7bfc1b1ba8c04a1ef59

8 years agoAdd .gitignore and .gitreview files
George Joseph [Sat, 11 Apr 2015 18:20:07 +0000 (12:20 -0600)]
Add .gitignore and .gitreview files

Add the .gitignore and .gitreview files to the asterisk repo.

NB:  You can add local ignores to the .git/info/exclude file
without having to do a commit.

Common ignore patterns are in the top-level .gitignore file.
Subdirectory-specific ignore patterns are in their own .gitignore

Change-Id: I842a1588ff27d8a0189f12d597f0a7af033d6c69
Tested-by: George Joseph

8 years agoclang compiler warnings: Fix various warnings for tests
Matthew Jordan [Sat, 11 Apr 2015 15:27:08 +0000 (15:27 +0000)]
clang compiler warnings: Fix various warnings for tests

This patch fixes a variety of clang compiler warnings for unit tests. This
includes autological comparison issues, ignored return values, and
interestingly enough, one embedded function. Fun!


Reported by: dkdegroot
  rb4555.patch submitted by dkdegroot (License 6600)

Merged revisions 434705 from

Merged revisions 434706 from

git-svn-id: 65c4cc65-6c06-0410-ace0-fbb531ad65f3

8 years agores/res_pjsip_t38: Add missing initialization of t38faxmaxdatagram
Matthew Jordan [Sat, 11 Apr 2015 15:11:15 +0000 (15:11 +0000)]
res/res_pjsip_t38: Add missing initialization of t38faxmaxdatagram

Prior to this patch, the far_max_datagram value on the UDPTL structure would
remain -1 if the remote endpoint fails to provide the SDP media attribute
T38FaxMaxDatagram. This can result in the INVITE request being rejected. With
this patch, we will now properly initialize the value with either the default
value or with the value provided by pjsip.conf's t38_udptl_maxdatagram


ASTERISK-24928 #close
Reported by: Juergen Spies
Tested by: Juergen Spies
  pjsipT38patch20150331.txt submitted by Juergen Spies (License 6698)

Merged revisions 434688 from

git-svn-id: 65c4cc65-6c06-0410-ace0-fbb531ad65f3

8 years agochan_pjsip/res_pjsip/bridge_softmix/core: Improve translation path choices.
Richard Mudgett [Fri, 10 Apr 2015 23:37:20 +0000 (23:37 +0000)]
chan_pjsip/res_pjsip/bridge_softmix/core: Improve translation path choices.

With this patch, chan_pjsip/res_pjsip now sets the native formats to the
codecs negotiated by a call.

* The changes in chan_pjsip.c and res_pjsip_sdp_rtp.c set the native
formats to include all the negotiated audio codecs instead of only the
initial preferred audio codec and later the currently received audio

* The audio frame handling in channel.c:ast_read() is more streamlined and
will automatically adjust to changes in received frame formats.  The new
policy is to remove translation and pass the new frame format to the
receiver except if the translation was to a signed linear format.  A more
long winded version is commented in ast_read() along with some caveats.

* The audio frame handling in channel.c:ast_write() is more streamlined
and will automatically adjust any needed translation to changes in the
frame formats sent.  Frame formats sent can change for many reasons such
as a recording is being played back or the bridged peer changed the format
it sends.  Since it is a normal expectation that sent formats can change,
the codec mismatch warning message is demoted to a debug message.

* Removed the short circuit check in
channel.c:ast_channel_make_compatible_helper().  Two party bridges need to
make channels compatible with each other.  However, transfers and moving
channels among bridges can result in otherwise compatible channels having
sub-optimal translation paths if the make compatible check is short
circuited.  A result of forcing the reevaluation of channel compatibility
is that the asterisk.conf:transcode_via_slin and codecs.conf:genericplc
options take effect consistently now.  It is unfortunate that these two
options are enabled by default and negate some of the benefits to the
changes in channel.c:ast_read() by forcing translation through signed
linear on a two party bridge.

* Improved the softmix bridge technology to better control the translation
of frames to the bridge.  All of the incoming translation is now normally
handled by ast_read() instead of splitting any translation steps between
ast_read() and the slin factory.  If any frame comes in with an unexpected
format then the translation path in ast_read() is updated for the next
frame and the slin factory handles the current frame translation.

This is the final patch in a series of patches aimed at improving
translation path choices.  The other patches are on the following reviews:

ASTERISK-24841 #close
Reported by: Matt Jordan


Merged revisions 434671 from

git-svn-id: 65c4cc65-6c06-0410-ace0-fbb531ad65f3

8 years agochan_sip: make progressinband default to no
Kevin Harwell [Fri, 10 Apr 2015 21:06:23 +0000 (21:06 +0000)]
chan_sip: make progressinband default to no

After the "progressinband" value setting of "never" was updated to never send a
183 this separated its use from the "no" value. Since "never" was the default,
but most users probably expect "no" this patch updates the default for the
"progressinband" setting to "no."

ASTERISK-24835 #close
Reported by: Andrew Nagy

Merged revisions 434654 from

git-svn-id: 65c4cc65-6c06-0410-ace0-fbb531ad65f3

8 years agores_pjsip: Add an 'auto' option for DTMF Mode
Matthew Jordan [Fri, 10 Apr 2015 17:56:47 +0000 (17:56 +0000)]
res_pjsip: Add an 'auto' option for DTMF Mode

This patch adds support for automatically detecting the type of DTMF that a
PJSIP endpoint supports. When the 'dtmf_mode' endpoint option is set to 'auto',
the channel created for an endpoint will attempt to determine if RFC 4733
DTMF is supported. If so, it will use that DTMF type. If not, the DTMF type
for the channel will be set to inband.


ASTERISK-24706 #close
Reported by: yaron nahum
  yaron_patch_3_Feb.diff submitted by yaron nahum (License 6676)

Merged revisions 434637 from

git-svn-id: 65c4cc65-6c06-0410-ace0-fbb531ad65f3

8 years agores_pjsip_config_wizard: Cleanup load unload
George Joseph [Fri, 10 Apr 2015 17:00:38 +0000 (17:00 +0000)]
res_pjsip_config_wizard: Cleanup load unload

While investigating other unload issues I realized that the load/unload process
for the config wizard was pretty ugly so I've refactored it as follows...

When the res_pjsip sorcery instance is created the config_wizard bumps it's own
module reference to prevent it from unloading while the sorcery instance is
still active.  When res_pjsip unloads and it's sorcery instance is destroyed,
the config wizard unrefs itself which then allows itself to unload cleanly.
Since the config wizard now can't load after res_pjsip or unload before it
(which should have been the correct behavior all along), I was able to remove
the chunks of code in both load_module and unload_module that handled that case.

Ran the testsuite tests to insure there were no functional changes and REF_DEBUG
to insure that Asterisk was shutting down cleanly with no FRACKs or leaks.

Tested-by: George Joseph

Merged revisions 434619 from

git-svn-id: 65c4cc65-6c06-0410-ace0-fbb531ad65f3

8 years agobridge_softmix.c,channel.c: Minor code simplification and cleanup.
Richard Mudgett [Fri, 10 Apr 2015 16:38:58 +0000 (16:38 +0000)]
bridge_softmix.c,channel.c: Minor code simplification and cleanup.

* Made code easier to follow in bridge_softmix.c:analyse_softmix_stats()
and made some debug messages more helpful.

* Made some debug and warning messages more helpful in


Merged revisions 434617 from

git-svn-id: 65c4cc65-6c06-0410-ace0-fbb531ad65f3

8 years agotranslate.c: Only select audio codecs to determine the best translation choice.
Richard Mudgett [Fri, 10 Apr 2015 16:32:28 +0000 (16:32 +0000)]
translate.c: Only select audio codecs to determine the best translation choice.

Given a source capability of h264 and ulaw, a destination capability of
h264 and g722 then ast_translator_best_choice() would pick h264 as the
best choice even though h264 is a video codec and Asterisk only supports
translation of audio codecs.  When the audio starts flowing, there are
warnings about a codec mismatch when the channel tries to write a frame to
the peer.

* Made ast_translator_best_choice() only select audio codecs.

* Restore a check in channel.c:set_format() lost after v1.8 to prevent
trying to set a non-audio codec.

This is an intermediate patch for a series of patches aimed at improving
translation path choices for ASTERISK-24841.

This patch is a complete enough fix for ASTERISK-21777 as the v11 version
of ast_translator_best_choice() does the same thing.  However, chan_sip.c
still somehow tries to call ast_codec_choose() which then calls
ast_best_codec() with a capability set that doesn't contain any audio
formats for the incoming call.  The remaining warning message seems to be
a benign transient.

ASTERISK-21777 #close
Reported by: Nick Ruggles

ASTERISK-24380 #close
Reported by: Matt Jordan


Merged revisions 434614 from

Merged revisions 434615 from

git-svn-id: 65c4cc65-6c06-0410-ace0-fbb531ad65f3

8 years agores/ari: Fix model validation for ChannelHold event
Matthew Jordan [Fri, 10 Apr 2015 14:56:05 +0000 (14:56 +0000)]
res/ari: Fix model validation for ChannelHold event

When the ChannelHold event was added, the 'musicclass' parameter was
erroneously removed. This caused the ChannelHold events to be rejected as
they failed model validation. This patch updates the Swagger schema such that
it now properly reflects the event that is being created.

Hooray for tests that catch things like this.

Merged revisions 434597 from

git-svn-id: 65c4cc65-6c06-0410-ace0-fbb531ad65f3

8 years agodns: Fix build when TEST_FRAMEWORK is not defined.
Joshua Colp [Fri, 10 Apr 2015 13:32:24 +0000 (13:32 +0000)]
dns: Fix build when TEST_FRAMEWORK is not defined.

git-svn-id: 65c4cc65-6c06-0410-ace0-fbb531ad65f3

8 years agochannels/chan_iax2: Improve POKE expiration time calculation for lossy networks
Matthew Jordan [Fri, 10 Apr 2015 12:40:36 +0000 (12:40 +0000)]
channels/chan_iax2: Improve POKE expiration time calculation for lossy networks

POKE is used to check for peer availability; however, in networks with packet
loss, the current calculations may result in POKE expiration times that are too
short. This patch alters the expiration/retry time logic to take into account
the last known qualify round trip time, as opposed to always using a static
value for each peer.


ASTERISK-22352 #close
Reported by: Frederic Van Espen

ASTERISK-24894 #close
Reported by: Y Ateya
  poke_noanswer_duration.diff submitted by Y Ateya (License 6693)

Merged revisions 434564 from

Merged revisions 434565 from

git-svn-id: 65c4cc65-6c06-0410-ace0-fbb531ad65f3

8 years agochannels/chan_iax2: Add a configuration parameter for call token expiration
Matthew Jordan [Fri, 10 Apr 2015 12:23:42 +0000 (12:23 +0000)]
channels/chan_iax2: Add a configuration parameter for call token expiration

This patch adds a new configuration parameter, 'calltokenexpiration', that
controls how long before an authentication call token is expired. The default
maintains the RFC specified 10 seconds. Setting it to a higher value may be
useful in lossy networks.


ASTERISK-24939 #close
Reported by: Y Ateya
  ctoken_configuration.diff submitted by Y Ateya (License 6693)

git-svn-id: 65c4cc65-6c06-0410-ace0-fbb531ad65f3

8 years agores_pjsip_phoneprov_provider: Fix reference leak on unload
George Joseph [Thu, 9 Apr 2015 23:12:13 +0000 (23:12 +0000)]
res_pjsip_phoneprov_provider: Fix reference leak on unload

res_pjsip_phoneprov_provider was leaking references to phoneprov objects due to
a missing OBJ_NODATA in an ao2_callback in load_users().  Rather than adding the
OBJ_NODATA, I changed load_users to use a more straightforward ao2_iterator.
This plugged the leak but exposed an unload order issue between
res_pjsip_phoneprov_provider, res_phoneprov and res_pjsip.

res_pjsip_phoneprov_provider unloads first, then res_phoneprov, then res_pjsip.
Since res_pjsip_phoneprov_provider uses res_pjsip's sorcery instance, when it
unloads, it's objects are still in the sorcery instance.  When res_pjsip
unloads, it destroys all its objects including res_pjsip_phoneprov_provider's.
The phoneprov destructor then attempts to unregister the extension from
res_phoneprov but because res_phoneprov is already cleaned up, its users
container is gone and we get a FRACK.

Simple solution, check for the NULL users container before attempting to remove
the entry. Duh.

Ran tests/res_phoneprov/res_phoneprov_provider.  No leaks in
res_pjsip_phoneprov_provider and no FRACKs.

Reported-by: Corey Farrell
Tested-by: George Joseph
ASTERISK-24935 #close

Merged revisions 434545 from

git-svn-id: 65c4cc65-6c06-0410-ace0-fbb531ad65f3

8 years agoloader/main: Don't set ast_fully_booted until deferred reloads are processed
George Joseph [Thu, 9 Apr 2015 23:08:10 +0000 (23:08 +0000)]
loader/main: Don't set ast_fully_booted until deferred reloads are processed

Until we have a true module management facility it's sometimes necessary for one
module to force a reload on another before its own load is complete.  If
Asterisk isn't fully booted yet, these reloads are deferred.  The problem is
that asterisk reports fully booted before processing the deferred reloads which
means Asterisk really isn't quite ready when it says it is.

This patch moves the report of fully booted after the processing of the deferred
reloads is complete.

Since the pjsip stack has the most number of related modules, I ran the
channels/pjsip testsuite to make sure there aren't any issues.  All tests

Tested-by: George Joseph

Merged revisions 434544 from

git-svn-id: 65c4cc65-6c06-0410-ace0-fbb531ad65f3

8 years agores_pjsip: add CLI command to show global and system configuration
Kevin Harwell [Thu, 9 Apr 2015 22:07:50 +0000 (22:07 +0000)]
res_pjsip: add CLI command to show global and system configuration

Added a new CLI command for res_pjsip that shows both global and system
configuration settings: pjsip show settings

ASTERISK-24918 #close
Reported by: Scott Griepentrog

Merged revisions 434527 from

git-svn-id: 65c4cc65-6c06-0410-ace0-fbb531ad65f3

8 years agochan_iax2.c: Fix ref leak in iax2_request().
Richard Mudgett [Thu, 9 Apr 2015 16:09:58 +0000 (16:09 +0000)]
chan_iax2.c: Fix ref leak in iax2_request().

* Increased warning message format capability string buffer size in


Merged revisions 434510 from

git-svn-id: 65c4cc65-6c06-0410-ace0-fbb531ad65f3

8 years agobridge_native_rtp.c: Defer allocation and check if it fails in native_rtp_bridge_comp...
Richard Mudgett [Thu, 9 Apr 2015 16:05:44 +0000 (16:05 +0000)]
bridge_native_rtp.c: Defer allocation and check if it fails in native_rtp_bridge_compatible().


Merged revisions 434508 from

git-svn-id: 65c4cc65-6c06-0410-ace0-fbb531ad65f3

8 years agores/res_pjsip_dlg_options: Add a module to handle in-dialog OPTIONS requests
Matthew Jordan [Thu, 9 Apr 2015 15:43:20 +0000 (15:43 +0000)]
res/res_pjsip_dlg_options: Add a module to handle in-dialog OPTIONS requests

This patch adds a new session supplement that handles in-dialog OPTIONS
requests. Said OPTIONS requests are sent a 200 OK, as an endpoint lookup
for the OPTIONS request would already have been done by the time the
session supplement receives the inbound request.

ASTERISK-24862 #close
Reported by: yaron nahum
  res_pjsip_dlg_options.c submitted by yaron nahum (License 6676)

Merged revisions 434506 from

git-svn-id: 65c4cc65-6c06-0410-ace0-fbb531ad65f3

8 years agoReduce duplication of common DNS code.
Mark Michelson [Thu, 9 Apr 2015 14:58:02 +0000 (14:58 +0000)]
Reduce duplication of common DNS code.

The NAPTR and SRV branches were worked on independently and
resulted in some code being duplicated in each. Since both
have been merged into trunk now, this patch reduces the
duplication by factoring out common code into its own
source files.

git-svn-id: 65c4cc65-6c06-0410-ace0-fbb531ad65f3

8 years agoclang compiler warnings: Fix autological comparisons
Matthew Jordan [Thu, 9 Apr 2015 12:57:21 +0000 (12:57 +0000)]
clang compiler warnings: Fix autological comparisons

This fixes autological comparison warnings in the following:
 * chan_skinny: letohl may return a signed or unsigned value, depending on the
   macro chosen
 * func_curl: Provide a specific cast to CURLoption to prevent mismatch
 * cel: Fix enum comparisons where the enum can never be negative
 * enum: Fix comparison of return result of dn_expand, which returns a signed
   int value
 * event: Fix enum comparisons where the enum can never be negative
 * indications: tone_data.freq1 and freq2 are unsigned, and hence can never be
 * presencestate: Use the actual enum value for INVALID state
 * security_events: Fix enum comparisons where the enum can never be negative
 * udptl: Don't bother to check if the return value from encode_length is less
   than 0, as it returns an unsigned int
 * translate: Since the parameters are unsigned int, don't bother checking
   to see if they are negative. The cast to unsigned int would already blow
   past the matrix bounds.
 * res_pjsip_exten_state: Use a temporary value to cache the return of
 * res_stasis_playback: Fix enum comparisons where the enum can never be
 * res_stasis_recording: Add an enum value for the case where the recording
   operation is in error; fix enum comparisons
 * resource_bridges: Use enum value as opposed to -1
 * resource_channels: Use enum value as opposed to -1

Reported by: dkdegroot
  rb4533.patch submitted by dkdegroot (License 6600)

Merged revisions 434469 from

Merged revisions 434470 from

git-svn-id: 65c4cc65-6c06-0410-ace0-fbb531ad65f3

8 years agoapps/app_queue: Prevent possible crash when evaluating queue penalty rules
Matthew Jordan [Thu, 9 Apr 2015 02:05:26 +0000 (02:05 +0000)]
apps/app_queue: Prevent possible crash when evaluating queue penalty rules

Although it only occurred once, a crash occurred when a queue attempted to
evaluate a queue penalty rule that appeared to have already been destroyed.
In many locations in app_queue, a test is done to see if qe->pr is NULL;
however, when we dispose of a queue's penalty rules, we don't set the pointer
to NULL after free'ing it. This patch does that to prevent any dangling
pointers from lingering on the queue object.


ASTERISK-23319 #close
Reported by: Vadim
  rb4552.patch submitted by Stefan Engström (License 6691)

Merged revisions 434448 from

Merged revisions 434449 from

git-svn-id: 65c4cc65-6c06-0410-ace0-fbb531ad65f3

8 years agores_pjsip_t38: Fix FAX failures when using PJSIP with authentication
Jonathan Rose [Wed, 8 Apr 2015 18:32:31 +0000 (18:32 +0000)]
res_pjsip_t38: Fix FAX failures when using PJSIP with authentication

Without this patch, if a PJSIP endpoint with udptl enabled and authentication
set attempted to use sendFax, the FAX session would fail during setup. This
was because the invite issued in response to being auth challenged would cause
the PJSIP channel performing the FAX to receive a second T38 framehook and
this would cause frames to be consumed in an inappropriate manner.

ASTERISK-24933 #close
Reported by: Jonathan Rose

Merged revisions 434425 from

git-svn-id: 65c4cc65-6c06-0410-ace0-fbb531ad65f3

8 years agoBridging: Eliminate the unnecessary make channel compatible with bridge operation.
Richard Mudgett [Wed, 8 Apr 2015 18:20:26 +0000 (18:20 +0000)]
Bridging: Eliminate the unnecessary make channel compatible with bridge operation.

When a channel enters the bridging system it is first made compatible with
the bridge and then the bridge technology makes the channel compatible
with the technology.  For all but the DAHDI native and softmix bridge
technologies the make channel compatible with the bridge step is an
effective noop because the other technologies allow all audio formats.
For the DAHDI native bridge technology it doesn't matter because it is not
an initial bridge technology and chan_dahdi allows only one native format
per channel.  For the softmix bridge technology, it is a noop at best and
harmful at worst because the wrong translation path could be setup if the
channel's native formats allow more than one audio format.

This is an intermediate patch for a series of patches aimed at improving
translation path choices.

* Removed code dealing with the unnecessary step of making the channel
compatible with the bridge.

Reported by: Matt Jordan


Merged revisions 434424 from

git-svn-id: 65c4cc65-6c06-0410-ace0-fbb531ad65f3

8 years agoSecurity/tcptls: MitM Attack potential from certificate with NULL byte in CN.
Jonathan Rose [Wed, 8 Apr 2015 16:49:18 +0000 (16:49 +0000)]
Security/tcptls: MitM Attack potential from certificate with NULL byte in CN.

When registering to a SIP server with TLS, Asterisk will accept CA signed
certificates with a common name that was signed for a domain other than the
one requested if it contains a null character in the common name portion of
the cert. This patch fixes that by checking that the common name length
matches the the length of the content we actually read from the common name
segment. Some certificate authorities automatically sign CA requests when
the requesting CN isn't already taken, so an attacker could potentially
register a CN with something like\
and have their certificate signed and Asterisk would accept that certificate
as though it had been for - this is a security fix and is
noted in AST-2015-003.

ASTERISK-24847 #close
Reported by: Maciej Szmigiero
 asterisk-null-in-cn.patch submitted by mhej (license 6085)

Merged revisions 434337 from

Merged revisions 434338 from

Merged revisions 434384 from

git-svn-id: 65c4cc65-6c06-0410-ace0-fbb531ad65f3

8 years agoformat_cache.c: Add missing slin12 format to ast_format_cache_is_slinear().
Richard Mudgett [Wed, 8 Apr 2015 16:31:45 +0000 (16:31 +0000)]
format_cache.c: Add missing slin12 format to ast_format_cache_is_slinear().

Merged revisions 434357 from

git-svn-id: 65c4cc65-6c06-0410-ace0-fbb531ad65f3

8 years agochan_iax2: Fix compilation issue due to funky merge
Matthew Jordan [Wed, 8 Apr 2015 12:02:37 +0000 (12:02 +0000)]
chan_iax2: Fix compilation issue due to funky merge

Don't mix declarations and code!

git-svn-id: 65c4cc65-6c06-0410-ace0-fbb531ad65f3

8 years agochan_iax2: Fix crash caused by unprotected access to iaxs[peer->callno]
Matthew Jordan [Wed, 8 Apr 2015 12:00:35 +0000 (12:00 +0000)]
chan_iax2: Fix crash caused by unprotected access to iaxs[peer->callno]

This patch fixes an access to the peer callnumber that is unprotected by a
corresponding mutex. The peer->callno value can be changed by multiple threads,
and all data inside the iaxs array must be procted by a corresponding lock
of iaxsl.

The patch moves the unprotected access to a location where the mutex is
safely obtained.


ASTERISK-21211 #close
Reported by: Jaco Kroon
  asterisk-11.2.1-iax2_poke-segfault.diff submitted by Jaco Kroon (License 5671)

Merged revisions 434291 from

Merged revisions 434292 from

git-svn-id: 65c4cc65-6c06-0410-ace0-fbb531ad65f3

8 years agochan_sip: Handle IPv4 mapped IPv6 clients when NAT is enabled
Matthew Jordan [Wed, 8 Apr 2015 11:54:09 +0000 (11:54 +0000)]
chan_sip: Handle IPv4 mapped IPv6 clients when NAT is enabled

When udpbindaddr is set to the IPv6 bind all address of '::', Asterisk will
attempt to handle both IPv4 and IPv6 addresses, although the information will
be stored in a struct with an AF_INET6 address type. However, the current
NAT handling code won't handle the IPv4 mapped IPv6 addresses correctly.
This patch adds an additional check for the mapped address case, allowing
the NAT code to handle clients even when the address is IPv6.


ASTERISK-18032 #close
Reported by: Christoph Timm
  nat_with_ipv6.diff submitted by Valentin Vidić (License 6697)

Merged revisions 434288 from

Merged revisions 434289 from

git-svn-id: 65c4cc65-6c06-0410-ace0-fbb531ad65f3

8 years agoclang compiler warnings: Fix pointer-bool-converesion warnings
Matthew Jordan [Wed, 8 Apr 2015 11:45:05 +0000 (11:45 +0000)]
clang compiler warnings: Fix pointer-bool-converesion warnings

This patch fixes several warnings pointed out by the clang compiler.
* chan_pjsip: Removed check for data->text, as it will always be non-NULL.
* app_minivm: Fixed evaluation of etemplate->locale, which will always
  evaluate to 'true'. This patch changes the evaluation to use
* app_queue:
  - Fixed evaluation of qe->parent->monfmt, which always evaluates to
    true. Instead, we just check to see if the dereferenced pointer
    evaluates to true.
  - Fixed evaluation of mem->state_interface, wrapping it with a call to
* res_smdi: Wrapped search_msg->mesg_desk_term with calls to ast_strlen_zero.


Reported by: dkdegroot
  rb4541.patch submitted by dkdegroot (License 6600)

Merged revisions 434285 from

Merged revisions 434286 from

git-svn-id: 65c4cc65-6c06-0410-ace0-fbb531ad65f3

8 years agocel_pgsl: Add support for GMT timestamps
Matthew Jordan [Wed, 8 Apr 2015 11:35:53 +0000 (11:35 +0000)]
cel_pgsl: Add support for GMT timestamps

This patch adds a new option to cel_pgsl, "usegmtime", which causes timestamps
to be logged in GMT.


ASTERISK-23186 #close
Reported by: Rodrigo Ramirez Norambuena
  cel_pgsql.c_add_usegmtime2.patch submitted by Rodrigo Ramirez Norambuena (License 6577)

git-svn-id: 65c4cc65-6c06-0410-ace0-fbb531ad65f3

8 years agopjsip: resolve compatibility problem with ast_sip_session
Scott Griepentrog [Tue, 7 Apr 2015 19:40:22 +0000 (19:40 +0000)]
pjsip: resolve compatibility problem with ast_sip_session

A change in r430179 inserted a variable near the top of a
structure caused a problem when running DPMA in a version
of Asterisk compiled across the change.  This patch moves
the new variable to the end of the structure, eliminating
the problem.


Merged revisions 433944 from

Merged revisions 434261 from

git-svn-id: 65c4cc65-6c06-0410-ace0-fbb531ad65f3

8 years agobridge.c: Hangup attended transfer target after it has been swapped out
Kevin Harwell [Tue, 7 Apr 2015 16:42:18 +0000 (16:42 +0000)]
bridge.c: Hangup attended transfer target after it has been swapped out

After completing an attended transfer the transfer target channel (the one that
gets swapped out) was not being hung up after leaving the bridge. This resulted
in a channel possibly being left around. Added an explicit softhangup for the
channel in question after the transfer is successfully completed in order to
make sure the channel is hung up.

ASTERISK-24782 #close
Reported by: John Bigelow

Merged revisions 434240 from

git-svn-id: 65c4cc65-6c06-0410-ace0-fbb531ad65f3