7 years agoBlocked revisions 430252
Matthew Jordan [Tue, 6 Jan 2015 22:46:43 +0000 (22:46 +0000)]
Blocked revisions 430252

contrib/ast-db-manage: Correct down_revision path for user_eq_phone

When the user_eq_phone patch was backported to 13, it referenced the downward
revision that the PJSIP optimistic encryption option also references. This
creates a multi-path upgrade Exception when generating the SQL files.

This patch corrects this in the 13 branch. Note that trunk, which already
contained both of these features, is unaffected by this problem.

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

7 years agores_pjsip_mwi: Change warning to notice
George Joseph [Tue, 6 Jan 2015 17:53:42 +0000 (17:53 +0000)]
res_pjsip_mwi: Change warning to notice

When res_pjsip loads and an endpoint auto-subscribes a mailbox for mwi,
if a contact hasn't registered yet, res_pjsip_mwi spits out a warning.
This is a perfectly normal situation though and doesn't require something
as serious as a warning.  It's also self correcting. The device will start
getting mwi as soon as it registers.

This patch changes the warning to a notice.

Tested-by: George Joseph


Merged revisions 430227 from

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

7 years agobridge_native_rtp: Change local/remote message from debug/2 to verb/4
George Joseph [Tue, 6 Jan 2015 17:49:03 +0000 (17:49 +0000)]
bridge_native_rtp: Change local/remote message from debug/2 to verb/4

Change the "Locally bridged"/"Remotely bridged" messages from dbg/2 to verb/4.

Tested-by: George Joseph


Merged revisions 430225 from

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

7 years agooutbound_registration: Add 'pjsip send register' and update 'send unregister'
George Joseph [Tue, 6 Jan 2015 17:43:16 +0000 (17:43 +0000)]
outbound_registration: Add 'pjsip send register' and update 'send unregister'

The current behavior of 'pjsip send unregister' is to send the unregister
(REGISTER with 0 exp) but let the next scheduled register proceed normally.
I don't think that's a good idea.  If you unregister, it should stay
unregistered until you decide to start registrations again.  So this patch
just adds a cancel_registration call to the current unregister_task to
cancel the timer.

Of course, now you need  a way to start registration again so I've added
a 'pjsip send register' command that unregisters and cancels any existing
registration (the same as send unregister), then sends an immediate
registration and starts the timer back up again.

Both changes also ripple to AMI.  There's a new PJSIPRegister command.

There's no harm in calling either command repeatedly.  They don't care
about the actual state.

Tested-by: George Joseph


Merged revisions 430223 from

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

7 years agopjsip cli: Fix sorting of contacts for 'pjsip list contacts'
George Joseph [Tue, 6 Jan 2015 17:29:33 +0000 (17:29 +0000)]
pjsip cli: Fix sorting of contacts for 'pjsip list contacts'

For some reason I was using a hash container instead of a list to gather the
contacts for 'pjsip list/show contacts' so even though I had a sort function,
the output wasn't sorted.  This patch just changes the hash container to a
list container and the contacts now appear sorted in the CLI.

Tested-by: George Joseph


Merged revisions 430221 from

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

7 years agobridge: avoid leaking channel during blond transfer pt2
Scott Griepentrog [Mon, 5 Jan 2015 22:50:32 +0000 (22:50 +0000)]
bridge: avoid leaking channel during blond transfer pt2

A blond transfer to a failed destination, when followed
by a recall attempt, lead to a leak of the reference to
the destination channel.  In addition to correcting the
regression on the previous attempt (r429826) this fixes
the leak and two additional reference leaks on failures
of bridge_import.

ASTERISK-24513 #close

Merged revisions 430199 from

Merged revisions 430200 from

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

7 years agopjsip: Document addition of 'PJSIP_AOR' and 'PJSIP_CONTACT' in CHANGES file.
Joshua Colp [Mon, 5 Jan 2015 17:57:43 +0000 (17:57 +0000)]
pjsip: Document addition of 'PJSIP_AOR' and 'PJSIP_CONTACT' in CHANGES file.

Merged revisions 430181 from

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

7 years agopjsip: Add 'PJSIP_AOR' and 'PJSIP_CONTACT' dialplan functions.
Joshua Colp [Mon, 5 Jan 2015 17:53:42 +0000 (17:53 +0000)]
pjsip: Add 'PJSIP_AOR' and 'PJSIP_CONTACT' dialplan functions.

The PJSIP_AOR dialplan function allows inspection of configured AORs including
what contacts are currently bound to them.

The PJSIP_CONTACT dialplan function allows inspection of contacts in existence.
These can include both externally added (by way of registration) or permanent

Reported by: xrobau


Merged revisions 430179 from

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

7 years agortp_engine: keep payload types in correct range
Scott Griepentrog [Wed, 31 Dec 2014 18:54:37 +0000 (18:54 +0000)]
rtp_engine: keep payload types in correct range

In r428708 additional codecs were added including
a payload type of 128 which is outside of nominal
range of 0-127.  This change moves changes 128 to
96 to avoid causing a pjsip assertion when making
a call to an endpoint configured with allow=all.

ASTERISK-24367 #close

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

7 years agoPJSIP: Update transport method documentation
Kinsey Moore [Mon, 29 Dec 2014 13:14:19 +0000 (13:14 +0000)]
PJSIP: Update transport method documentation

This updates the documentation for the 'method' configuration option to
be more verbose about the behaviors of values 'unspecified' and
'default'. They do exactly the same thing which is to select the
default as defined by PJSIP which is currently TLSv1.


Merged revisions 430145 from

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

7 years agoapp_queue: Update sample conf documenation
Kevin Harwell [Wed, 24 Dec 2014 21:28:14 +0000 (21:28 +0000)]
app_queue: Update sample conf documenation

Updated the queues.conf.sample file to explicitly state which channel queue
variables are propagated to.

Reported by: Mitch Claborn

Merged revisions 430126 from

Merged revisions 430127 from

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

7 years agomain/pbx.c: Fix double lock of contexts lock introduced by r429967
Matthew Jordan [Wed, 24 Dec 2014 16:59:42 +0000 (16:59 +0000)]
main/pbx.c: Fix double lock of contexts lock introduced by r429967

We only need to hold the context_merge_lock once. Locking it twice will make
many other parts of Asterisk very sad.

ASTERISK-24641 #close

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

7 years agopjsip_options: Fix continued qualifies after endpoint/aor deletion
George Joseph [Tue, 23 Dec 2014 23:19:30 +0000 (23:19 +0000)]
pjsip_options: Fix continued qualifies after endpoint/aor deletion

If you remove an endpoint/aor from pjsip.conf then do a core reload,
qualifies will continue even though the object are gone.  This happens
because nothing clears out the qualify tasks.

This patch unschedules all existing qualify tasks before scheduling
new ones on reload.

Tested-by: George Joseph


Merged revisions 430064 from

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

7 years agotest_astobj2: Fix warning for missing trailing slash in category
George Joseph [Tue, 23 Dec 2014 23:16:35 +0000 (23:16 +0000)]
test_astobj2: Fix warning for missing trailing slash in category

This patch adds a trailing slash to the category for this test.
No more warning.

Tested-by: George Joseph


Merged revisions 430059 from

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

7 years agoDTMF atxfer: Setup recall channels as if the transferee initiated the call.
Richard Mudgett [Mon, 22 Dec 2014 21:20:11 +0000 (21:20 +0000)]
DTMF atxfer: Setup recall channels as if the transferee initiated the call.

After the initial DTMF atxfer call attempt to the transfer target fails to
answer during a blonde transfer, the recall callback channels do not get
setup with information from the initial transferrer channel.  As a result,
the recall callback to the transferrer does not have callid, channel
variables, datastores, accountcode, peeraccount, COLP, and CLID setup.  A
similar situation happens with the recall callback to the transfer target
but it is less visible.  The recall callback to the transfer target does
not have callid, channel variables, datastores, accountcode, peeraccount,
and COLP setup.

* Added missing information to the recall callback channels before
initiating the call.  callid, channel variables, datastores, accountcode,
peeraccount, COLP, and CLID

* Set callid of the transferrer channel on the DTMF atxfer controller
thread attended_transfer_monitor_thread().

* Added missing channel unlocks and props unref to off nominal paths in

ASTERISK-23841 #close
Reported by: Richard Mudgett


Merged revisions 430034 from

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

7 years agoFix compilation since the patch for ASTERISK-24363 went in.
Richard Mudgett [Mon, 22 Dec 2014 20:25:40 +0000 (20:25 +0000)]
Fix compilation since the patch for ASTERISK-24363 went in.

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

7 years agoqueue_log: Post QUEUESTART entry when Asterisk fully boots.
Richard Mudgett [Mon, 22 Dec 2014 20:08:35 +0000 (20:08 +0000)]
queue_log: Post QUEUESTART entry when Asterisk fully boots.

The QUEUESTART log entry has historically acted like a fully booted event
for the queue_log file.  When the QUEUESTART entry was posted to the log
was broken by the change made by ASTERISK-15863.

* Made post the QUEUESTART queue_log entry when Asterisk fully boots.
This restores the intent of that log entry and happens after realtime has
had a chance to load.

AST-1444 #close
Reported by: Denis Martinez


Merged revisions 430009 from

Merged revisions 430010 from

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

7 years agochan_sip: Send CANCEL via original INVITE destination even after UPDATE request
Matthew Jordan [Mon, 22 Dec 2014 15:40:27 +0000 (15:40 +0000)]
chan_sip: Send CANCEL via original INVITE destination even after UPDATE request

Given the following scenario:
* Three SIP phones (A, B, C), all communicating via a proxy with Asterisk
* A call is established between A and B. B performs a SIP attended transfer of
  A to C. B sets the call on hold (A is hearing MOH) and dials the extension of
  C. While phone C is ringing, B transfers the call (that is, what we typically
  call a 'blond transfer').
* When the transfer completes, A hears the ringing of phone C, while B is idle.

In the SIP messaging for the above scenario, a REFER request is sent to
transfer the call. When "sendrpid=yes" is set in sip.conf, Asterisk may send an
UPDATE request to phone C to update party information. This update is sent
directly to phone C, not through the intervening proxy. This has the unfortunate
side effect of providing route information, which is then set on the sip_pvt
structure for C. If someone (e.g. B) is trying to get the call back (through a
directed pickup), Asterisk will send a CANCEL request to C. However, since we
have now updated the route set, the CANCEL request will be sent directly to C
and not through the proxy. The phone ignores this CANCEL according to RFC3261
(Section 9.1).

This patch updates reqprep such that the route is not updated if an UPDATE
request is being sent while the INVITE state is INV_PROCEEDING or
INV_EARLY_MEDIA. This ensures that a subsequent CANCEL request is still sent
to the correct location.


ASTERISK-24628 #close
Reported by: Karsten Wemheuer
  issue.patch uploaded by Karsten Wemheuer (License 5930)

Merged revisions 429982 from

Merged revisions 429983 from

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

7 years agopresencestate: Allow channel drivers to provide presence state information
Matthew Jordan [Mon, 22 Dec 2014 14:33:24 +0000 (14:33 +0000)]
presencestate: Allow channel drivers to provide presence state information

This patch adds the ability for channel drivers to supply presence information
in a similar manner to device state. The patch does not provide any channel
driver implementations, but it does provide the core infrastructure necessary
for channel drivers to provide such information.

The core handles multiple providers of presence state information. Ordering
of presence state is as follows:

Each provider can trump the previous if it provides a presence state that
supercedes a previous one.


ASTERISK-24363 #close
Reported by: Gareth Palmer
  chan_presencestate-428146.patch uploaded by Gareth Palmer (License 5169)

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

7 years agoapp_confbridge: Fix build error caused by XML validation errors
Matthew Jordan [Mon, 22 Dec 2014 12:16:36 +0000 (12:16 +0000)]
app_confbridge: Fix build error caused by XML validation errors

Summaries can't contain XML nodes, as they are defined to contain only text

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

7 years agoapp_confbridge: Add the ability to pass options/command to MixMonitor
Matthew Jordan [Mon, 22 Dec 2014 02:35:05 +0000 (02:35 +0000)]
app_confbridge: Add the ability to pass options/command to MixMonitor

This patch adds the ability to pass options and a command to MixMontor when
recording a conference using ConfBridge.

New options are -

* record_options: Options to MixMontor, eg: m(), W() etc.
* record_command: The command to execute when recording is over.
* record_file_timestamp: Append the start time to the file name.

These options can also be used with the CONFBRIDGE function, e.g.,
Set(CONFBRIDGE(bridge,record_command)=/path/to/command ^{MIXMONITOR_FILENAME}))


ASTERISK-24351 #close
Reported by: Gareth Palmer
  record_command-428838.patch uploaded by Gareth Palmer (License 5169)

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

7 years agores_pjsip_phoneprovi_provider: Fix reload
George Joseph [Mon, 22 Dec 2014 00:17:49 +0000 (00:17 +0000)]
res_pjsip_phoneprovi_provider: Fix reload

Reloading wasn't working correctly because on a reload, the sorcery apply
handler was never being called for unchanged users.  So, instead of using
an apply handler, I'm now iterating over all users.  Works much more reliably.

Tested-by: George Joseph


Merged revisions 429914 from

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

7 years agoacl: Fix reloading of configuration if configuration file does not exist at startup.
Joshua Colp [Sat, 20 Dec 2014 20:57:47 +0000 (20:57 +0000)]
acl: Fix reloading of configuration if configuration file does not exist at startup.

The named ACL code incorrectly destroyed the config options information if loading
of the configuration file failed at startup. This would result in reloading
also failing even if a valid configuration file was put in place.

ASTERISK-23733 #close
Reported by: Richard Kenner

Merged revisions 429893 from

Merged revisions 429894 from

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

7 years agores_http_websocket.c: Fix incorrect use of sizeof in ast_websocket_write().
Richard Mudgett [Fri, 19 Dec 2014 20:56:12 +0000 (20:56 +0000)]
res_http_websocket.c: Fix incorrect use of sizeof in ast_websocket_write().

This won't fix the reported issue but it is an incorrect use of sizeof.

Reported by:  Badalian Vyacheslav

Merged revisions 429867 from

Merged revisions 429868 from

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

7 years agochan_dahdi: Don't ignore setvar when using configuration section scheme.
Richard Mudgett [Fri, 19 Dec 2014 17:34:33 +0000 (17:34 +0000)]
chan_dahdi: Don't ignore setvar when using configuration section scheme.

When the configuration section scheme of chan_dahdi.conf is used (keyword
dahdichan instead of channel) all setvar= options are completely ignored.
No variable defined this way appears in the created DAHDI channels.

* Move the clearing of setvar values to after the deferred processing of

AST-1378 #close
Reported by: Guenther Kelleter
Patch by: Guenther Kelleter

Merged revisions 429825 from

Merged revisions 429829 from

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

7 years agobridge: avoid leaking channel during blond transfer
Scott Griepentrog [Fri, 19 Dec 2014 17:27:25 +0000 (17:27 +0000)]
bridge: avoid leaking channel during blond transfer

After a blond transfer (start attended and hang up)
to a destination that also hangs up without answer,
the Local;1 channel was leaked and would show up on
core show channels.  This was happening because the
attended state blond_nonfinal_enter() resetting the
props->transfer_target to null while releasing it's
own reference, which would later prevent props from
releasing another reference during destruction. The
change made here is simply to not assign the target
to NULL.

ASTERISK-24513 #close
Reported by: Mark Michelson

Merged revisions 429826 from

Merged revisions 429827 from

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

7 years agochan_dahdi.c, res_rtp_asterisk.c: Change some spammy debug messages to level 5.
Richard Mudgett [Thu, 18 Dec 2014 22:40:16 +0000 (22:40 +0000)]
chan_dahdi.c, res_rtp_asterisk.c: Change some spammy debug messages to level 5.

ASTERISK-24337 #close
Reported by: Rusty Newton

Merged revisions 429804 from

Merged revisions 429805 from

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

7 years agochan_dahdi: Populate CALLERID(ani2) for incoming calls in featdmf signaling mode.
Richard Mudgett [Thu, 18 Dec 2014 20:09:21 +0000 (20:09 +0000)]
chan_dahdi: Populate CALLERID(ani2) for incoming calls in featdmf signaling mode.

For the featdmf signaling mode the incoming MF Caller-ID information is
formatted as follows: *${CALLERID(ani2)}${CALLERID(ani)}#*${EXTEN}#

Rather than discarding the ani2 digits, populate the CALLERID(ani2) value
with what is received instead.

AST-1368 #close
Reported by: Denis Martinez
      extract_ani2_for_featdmf_v11.patch (license #5621) patch uploaded by Richard Mudgett

Merged revisions 429783 from

Merged revisions 429784 from

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

7 years agores_pjsip_sdp_rtp: wrong bridge chosen when the DTMF mode is not compatible
Kevin Harwell [Thu, 18 Dec 2014 15:55:03 +0000 (15:55 +0000)]
res_pjsip_sdp_rtp: wrong bridge chosen when the DTMF mode is not compatible

A native rtp bridge was being chosen (it shouldn't have been) when using two
pjsip channels with incompatible DTMF modes.  This patch sets the rtp instance
property, AST_RTP_PROPERTY_DTMF, for the appropriate DTMF mode(s) for pjsip.
It was not being set before, meaning all DTMF modes for pjsip were being treated
as compatible, thus native bridging would be chosen as the bridge type when it
shouldn't have been.

ASTERISK-24459 #close
Reported by: Yaniv Simhi

Merged revisions 429763 from

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

7 years agoPrevent potential infinite outbound authentication loops in registration.
Mark Michelson [Thu, 18 Dec 2014 15:40:13 +0000 (15:40 +0000)]
Prevent potential infinite outbound authentication loops in registration.

Prior to this patch, Asterisk would always respond to 401 responses to
registration attempts by trying to provide a registration with authentication
credentials. Even if subsequent attempts were rejected with 401 responses,
Asterisk would continue this behavior. If authentication credentials were
incorrect, this could continue forever.

With this patch, we keep track of whether we have attempted authentication
on an outbound registration attempt. If we already have, we don not try
again until the next attempt. This prevents the infinite loop scenario.


Merged revisions 429761 from

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

7 years agoPrevent possible race condition on dual redirect of channels in the same bridge.
Mark Michelson [Thu, 18 Dec 2014 15:18:45 +0000 (15:18 +0000)]
Prevent possible race condition on dual redirect of channels in the same bridge.

The AST_FLAG_BRIDGE_DUAL_REDIRECT_WAIT flag was created to prevent bridges from
prematurely acting on orphaned channels in bridges. The problem with the AMI
redirect action was that it was setting this flag on channels based on the presence
of a PBX, not whether the channel was in a bridge. Whether a channel has a PBX
is irrelevant, so the condition has been altered to check if the channel is in a

ASTERISK-24536 #close
Reported by Niklas Larsson


Merged revisions 429741 from

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

7 years agoEnsure the correct value is returned for CHANNEL(pjsip, secure)
Mark Michelson [Thu, 18 Dec 2014 14:50:06 +0000 (14:50 +0000)]
Ensure the correct value is returned for CHANNEL(pjsip, secure)

Prior to this patch, we were using the PJSIP dialog's secure flag
to determine if a secure transport was being used. Unfortunately,
the dialog's secure flag was only set if a SIPS URI were in use,
as required by RFC 3261 sections 12.1.1 and 12.1.2. What we're interested
in is not dialog security, but transport security. This code change
switches to a model where we use the dialog's target URI to determine
what transport would be used to communicate, and then check if that
transport is secure.

AST-1450 #close
Reported by John Bigelow


Merged revisions 429739 from

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

7 years agores_pjsip_config_wizard: fix unload SEGV
George Joseph [Thu, 18 Dec 2014 00:11:24 +0000 (00:11 +0000)]
res_pjsip_config_wizard: fix unload SEGV

If certain pjsip modules aren't loaded, the wizard causes a SEGV
when it unloads.  Added a check for the presense of the object
type wizard before trying to clean it up.

Tested-by: George Joseph

Merged revisions 429719 from

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

7 years agores_pjsip_config_wizard: Change FILEUNCHANGED config_load2 flag determination
George Joseph [Wed, 17 Dec 2014 23:06:01 +0000 (23:06 +0000)]
res_pjsip_config_wizard: Change FILEUNCHANGED config_load2 flag determination

The module now applies the FILEUNCHANGED flag when both reloaded is
specified AND there's no last_config for the object type.

Tested-by: George Joseph


Merged revisions 429699 from

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

7 years agoFix printf problems with high ascii characters after r413586 (1.8).
Walter Doekes [Wed, 17 Dec 2014 10:23:32 +0000 (10:23 +0000)]
Fix printf problems with high ascii characters after r413586 (1.8).

In r413586 (1.8) various casts were added to silence gcc 4.10 warnings.
Those fixes included things like:

    -out += sprintf(out, "%%%02X", (unsigned char) *ptr);
    +out += sprintf(out, "%%%02X", (unsigned) *ptr);

That works for low ascii characters, but for the high range that yields
e.g. FFFFFFC3 when C3 is expected.

This changeset:
- fixes those casts to use the 'hh' unsigned char modifier instead
- consistently uses %02x instead of %2.2x (or other non-standard usage)
- adds a few 'h' modifiers in various places
- fixes a 'replcaes' typo
- dev/urandon typo (in 13+ patch)


ASTERISK-24619 #close
Reported by: Stefan27 (on IRC)

Merged revisions 429673 from

Merged revisions 429674 from

Merged revisions 429675 from

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

7 years agores_pjsip_config_wizard: fix test breakage
George Joseph [Tue, 16 Dec 2014 17:53:59 +0000 (17:53 +0000)]
res_pjsip_config_wizard: fix test breakage

Fix test breakage caused by not checking for res_pjsip before
calling ast_sip_get_sorcery.

Tested-by: George Joseph


Merged revisions 429653 from

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

7 years agochan_sip: Allow T.38 switch-over when SRTP is in use.
Joshua Colp [Tue, 16 Dec 2014 16:39:47 +0000 (16:39 +0000)]
chan_sip: Allow T.38 switch-over when SRTP is in use.

Previously when SRTP was enabled on a channel it was not possible
to switch to T.38 as no crypto attributes would be present.

This change makes it so it is now possible. If a T.38 re-invite
comes in SRTP is terminated since in practice you can't encrypt
a UDPTL stream. Now... if we were doing T.38 over RTP (which
does exist) then we'd have a chance but almost nobody does that so
here we are.

ASTERISK-24449 #close
Reported by: Andreas Steinmetz
 udptl-ignore-srtp-v2.patch submitted by Andreas Steinmetz (license 6523)

Merged revisions 429632 from

Merged revisions 429633 from

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

7 years agores_pjsip_t38: Fix T.38 failure when peer reinvites immediately.
Joshua Colp [Tue, 16 Dec 2014 15:44:43 +0000 (15:44 +0000)]
res_pjsip_t38: Fix T.38 failure when peer reinvites immediately.

If a remote endpoint reinvites to T.38 immediately the state machine
will go into a peer reinvite state. If a T.38 capable application
(such as ReceiveFax) queries it will receive this state. Normally
the application will then indicate so that the channel driver will
queue up the T.38 offer previously received. Once it receives this
offer the application will act normally and negotiate.

The res_pjsip_t38 module incorrectly partially squashed this indication.
This would cause the application to think the request had failed when
in reality it had actually worked.

This change makes it so that no T.38 control frames (or indications)
are squashed.

Merged revisions 429612 from

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

7 years agores_pjsip_config_wizard: Allow streamlined config of common pjsip scenarios
George Joseph [Mon, 15 Dec 2014 17:08:24 +0000 (17:08 +0000)]
res_pjsip_config_wizard: Allow streamlined config of common pjsip scenarios

 * This is a new module that adds streamlined configuration capability for
   chan_pjsip.  It's targetted at users who have lots of basic configuration
   scenarios like 'phone' or 'agent' or 'trunk'.  Additional information
   can be found in the sample configuration file at

Tested-by: George Joseph


Merged revisions 429592 from

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

7 years agoActivate persistent subscriptions when they are recreated.
Mark Michelson [Mon, 15 Dec 2014 15:48:47 +0000 (15:48 +0000)]
Activate persistent subscriptions when they are recreated.

Prior to this change, recreating persistent subscriptions would
create the subscription but would not activate it. This led to subscriptions
being listed in the "NULL" state by diagnostics and not sending NOTIFYs
when expected.


Merged revisions 429571 from

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

7 years agoloader: Move definition of ast_module_reload from _private.h to module.h
George Joseph [Fri, 12 Dec 2014 23:57:50 +0000 (23:57 +0000)]
loader: Move definition of ast_module_reload from _private.h to module.h

No functionality change.  Just move the definition of ast_module_reload
from _private.h to module.h so it can be public.

Also removed the include of _private.h from manager.c since ast_module_load
was the only reason for including it.

Tested-by: George Joseph


Merged revisions 429542 from

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

7 years agoDEBUG_THREADS: Fix regression and lock tracking initialization problems.
Richard Mudgett [Fri, 12 Dec 2014 23:49:36 +0000 (23:49 +0000)]
DEBUG_THREADS: Fix regression and lock tracking initialization problems.

This patch started with David Lee's patch at and includes a regression fix
introduced by the ASTERISK-22455 patch.

The initialization of a mutex's lock tracking structure was not protected
in a critical section.  This is fine for any mutex that is explicitly
initialized, but a static mutex may have its lock tracking double
initialized if multiple threads attempt the first lock simultaneously.

* Added a global mutex to properly serialize initialization of the lock
tracking structure.  The painful global lock can be mitigated by adding a
double checked lock flag as discussed on the original review request.

* Defer lock tracking initialization until first use.

* Don't be "helpful" and initialize an uninitialized lock when
DEBUG_THREADS is enabled.  Debug code is not supposed to fix or change
normal code behavior.  We don't need a lock initialization race that would
force a re-setup of lock tracking.  Lock tracking already handles
initialization on first use.

* Properly handle allocation failures of the lock tracking structure.

* No need to initialize tracking data in __ast_pthread_mutex_destroy()
just to turn around and destroy it.

The regression introduced by ASTERISK-22455 is the result of manipulating
a pthread_mutex_t struct outside of the pthread library code.  The
pthread_mutex_t struct seems to have a global linked list pointer member
that can get changed by other threads.  Therefore, saving and restoring
the contents of a pthread_mutex_t struct is a bad thing.

Thanks to Thomas Airmont for finding this obscure regression.

* Don't overwrite the struct ast_lock_track.reentr_mutex member to restore
tracking data in __ast_cond_wait() and __ast_cond_timedwait().  The
pthread_mutex_t struct must be treated as a read-only opaque variable.

Miscellaneous other items fixed by this patch:

* Match ast_suspend_lock_info() with ast_restore_lock_info() in

* Made some uninitialized lock sanity checks return EINVAL and try a

* Fix bad canlog initialization expressions.

ASTERISK-24614 #close
Reported by: Thomas Airmont


Merged revisions 429539 from

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

7 years agores/res_agi: Make Verbose message for 'stream file' match other playbacks
Matthew Jordan [Fri, 12 Dec 2014 22:54:02 +0000 (22:54 +0000)]
res/res_agi: Make Verbose message for 'stream file' match other playbacks

The Verbose message displayed when a file is played back via 'stream file'
was formatted differently than other playbacks:
* It didn't include the channel name
* It didn't include the channel language
It does, however, include the playback offset as well as any escape digits.
That information was kept; however, this patch updates the formatting to more
closely match the Verbose messages displayed when a file is played back by
'control stream file', Playback, ControlPlayback, or any other file playback

Merged revisions 429519 from

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

7 years agomedia: Fix crash when determining sample count of a frame during shutdown.
Joshua Colp [Fri, 12 Dec 2014 17:01:42 +0000 (17:01 +0000)]
media: Fix crash when determining sample count of a frame during shutdown.

When shutting down Asterisk the codecs are cleaned up. As a result anything
attempting to get a codec based on ID or details will find that no codec
exists. This currently occurs when determining the sample count of a frame.
This code did not take this situation into account.

This change fixes this by getting the codec directly from the format and
eliminates the lookup. This is both faster and also provides a guarantee
that the codec will exist and will be valid.

ASTERISK-24604 #close
Reported by: Matt Jordan


Merged revisions 429497 from

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

7 years agochan_pjsip: Race between channel answer and bridge setup when using direct media
Kevin Harwell [Fri, 12 Dec 2014 15:31:38 +0000 (15:31 +0000)]
chan_pjsip: Race between channel answer and bridge setup when using direct media

When direct media is enabled and a pjsip channel is answered a race would occur
between the handling of the answer and bridge setup. Sometimes the media
negotiation would take place after the native bridge was setup. This resulted
in a NULL media address, which in turn resulted in Asterisk using its address
as the remote media address when sending a reinvite.  This patch makes the
chan_pjsip answer handler synchronous thus alleviating the race condition (the
bridge won't start setting things up until after it returns).

ASTERISK-24563 #close
Reported by: Steve Pitts

Merged revisions 429477 from

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

7 years agoFix crash for sorcery misconfigs
David M. Lee [Fri, 12 Dec 2014 15:03:16 +0000 (15:03 +0000)]
Fix crash for sorcery misconfigs

res_pjsip_outbound_publish was missing the CHECK_PJSIP_MODULE_LOADED()
call in load_module, and would crash with a segfault if res_pjsip
declined to load.


Merged revisions 429457 from

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

7 years agoPJSIP: Allow use of 'inactive' streams for hold
Kinsey Moore [Fri, 12 Dec 2014 14:12:38 +0000 (14:12 +0000)]
PJSIP: Allow use of 'inactive' streams for hold

This allows use of the 'inactive' stream direction identifier to be
used for hold where 'sendonly' is normally used. Some Seimens phones
use 'inactive' and this change allows music on hold to operate

Reported by: Steve Pitts

Merged revisions 429432 from

Merged revisions 429433 from

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

7 years agoSorcery: Log when old config remains in use
Kinsey Moore [Fri, 12 Dec 2014 14:04:06 +0000 (14:04 +0000)]
Sorcery: Log when old config remains in use

This adds a log message notifying the user that a stale configuration
is in place upon reload when a config object fails to load. This
situation can end up causing confusion when the object failed to load
but exists from a previous config load especially when the old config
is significantly different from the new config.

Reported by: Thomas Thompson

Merged revisions 429429 from

Merged revisions 429430 from

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

7 years agores_pjsip_session: Delay sending BYE if a re-INVITE transaction is in progress.
Joshua Colp [Fri, 12 Dec 2014 13:06:24 +0000 (13:06 +0000)]
res_pjsip_session: Delay sending BYE if a re-INVITE transaction is in progress.

Given the scenario where a PJSIP channel is in a native RTP bridge with direct
media and the channel is then hung up the code will currently re-INVITE the channel
back to Asterisk and send a BYE at the same time. Many SIP implementations dislike
this greatly.

This change makes it so that if a re-INVITE transaction is in progress the BYE
is queued to occur after the completion of the transaction (be it through normal
means or a timeout).


Merged revisions 429409 from

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

7 years agores_pjsip_session: Fix issue where a declined media stream in a re-INVITE would fail...
Joshua Colp [Fri, 12 Dec 2014 12:32:13 +0000 (12:32 +0000)]
res_pjsip_session: Fix issue where a declined media stream in a re-INVITE would fail SDP negotiation.

In the past the SDP negotiation within res_pjsip_session was made more tolerant of
certain situations. The only case where SDP negotiation will fail is when a major
error occurs during negotiation. Receiving an already declined media stream is
not considered a major error.

When producing the local SDP the logic took this into account so on the initial INVITE
the declined media stream did not cause an SDP negotiation failure. Unfortunately
the logic for handling media streams with a handler did not mirror this logic and
considered an already declined media stream an error and thus failed the SDP

This change makes the logic between both situations match so only under major
errors will the SDP negotiation fail.

ASTERISK-24607 #close
Reported by: Matt Jordan


Merged revisions 429407 from

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

7 years agoARI/AMI: Include language in standard channel snapshot output
Kevin Harwell [Thu, 11 Dec 2014 20:32:21 +0000 (20:32 +0000)]
ARI/AMI: Include language in standard channel snapshot output

The CHANGES verbiage for the "language" addition had been put under the wrong
release. This moves it to be under 13.1 to 13.2 changes.

Reported by: Matt Jordan

Merged revisions 429387 from

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

7 years agoStasis: Update unittest for channel snapshots
Kinsey Moore [Thu, 11 Dec 2014 13:53:39 +0000 (13:53 +0000)]
Stasis: Update unittest for channel snapshots

This adjusts the unit test for channel snapshots to take the new
language key into account.

Merged revisions 429352 from

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

7 years agoARI/AMI: Include language in standard channel snapshot output
Kevin Harwell [Wed, 10 Dec 2014 15:43:48 +0000 (15:43 +0000)]
ARI/AMI: Include language in standard channel snapshot output

Adding information about including "language" in the standard channel snapshot
output to the CHANGES file. Note the actual source changes have already been
previously committed.

Reported by: Matt Jordan

Merged revisions 429325 from

Merged revisions 429326 from

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

7 years agores_http_websocket: Fix crash due to double freeing memory when receiving a payload...
Joshua Colp [Wed, 10 Dec 2014 13:35:52 +0000 (13:35 +0000)]
res_http_websocket: Fix crash due to double freeing memory when receiving a payload length of zero.

Frames with a payload length of 0 were incorrectly handled in res_http_websocket.
Provided a frame with a payload had been received prior it was possible for a double
free to occur. The realloc operation would succeed (thus freeing the payload) but be
treated as an error. When the session was then torn down the payload would be
freed again causing a crash. The read function now takes this into account.

This change also fixes assumptions made by users of res_http_websocket. There is no
guarantee that a frame received from it will be NULL terminated.

ASTERISK-24472 #close
Reported by: Badalian Vyacheslav


Merged revisions 429270 from

Merged revisions 429272 from

Merged revisions 429273 from

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

7 years agoPJSIP: Fix assert on initial mass qualify
Kinsey Moore [Wed, 10 Dec 2014 13:16:19 +0000 (13:16 +0000)]
PJSIP: Fix assert on initial mass qualify

This fixes the MWI test regressions caused by r429127 and ensures that
contacts have non-zero qualify_frequency before attempting scheduling.

Merged revisions 429245 from

Merged revisions 429246 from

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

7 years agocore: avoid possible asterisk -r crash from long id
Scott Griepentrog [Tue, 9 Dec 2014 20:47:05 +0000 (20:47 +0000)]
core: avoid possible asterisk -r crash from long id

When connecting to the remote console, an id string
is first provided that consts of the hostname, pid,
and version.  This is parsed by the remote instance
using a buffer that may be too short, and can allow
a buffer overrun because it is not terminated. This
patch adds termination and a larger buffer.


Merged revisions 429223 from

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

7 years agoARI/AMI: Include language in standard channel snapshot output
Kevin Harwell [Tue, 9 Dec 2014 20:20:27 +0000 (20:20 +0000)]
ARI/AMI: Include language in standard channel snapshot output

The channel "language" was already part of a channel snapshot, however is was
not sent out over AMI or ARI. This patch makes it so the channel "language" is
included in the appropriate AMI or ARI events.

ASTERISK-24553 #close
Reported by: Matt Jordan

Merged revisions 429204 from

Merged revisions 429206 from

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

7 years agoDirect Media calls within private network sometimes get one way audio
Kevin Harwell [Tue, 9 Dec 2014 20:03:22 +0000 (20:03 +0000)]
Direct Media calls within private network sometimes get one way audio

When endpoints with direct_media enabled, behind a firewall (Asterisk on a
separate network) and were bridged sometimes Asterisk would send the ip
address of the firewall in the sdp to one of the phones in the reinvite
resulting in one way audio. When sending the reinvite Asterisk will retrieve
the media address from the associated rtp instance, but if frames were being
read this can be overwritten with another address (in this case the
firewall's).  This patch ensures that Asterisk uses the original device
address when using direct media.

Reported by: Steve Pitts

Merged revisions 429195 from

Merged revisions 429196 from

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

7 years agores_pjsip_outbound_publish: stack overflow when using non-default sorcery wizard
Kevin Harwell [Tue, 9 Dec 2014 18:36:47 +0000 (18:36 +0000)]
res_pjsip_outbound_publish: stack overflow when using non-default sorcery wizard

When using a non-default sorcery wizard (in this instance realtime) for outbound
publishes Asterisk will crash after a stack overflow occurs due to the code
infinitely recursing.  The fix entails removing the outbound publish state
dependency from the outbound publish sorcery object and instead keeping an in
memory container that can be used to lookup the state when needed.

ASTERISK-24514 #close
Reported by: Mark Michelson

Merged revisions 429175 from

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

7 years agoari: Add support for specifying an originator channel when originating.
Joshua Colp [Tue, 9 Dec 2014 15:45:19 +0000 (15:45 +0000)]
ari: Add support for specifying an originator channel when originating.

If an originator channel is specified when originating a channel the linked ID
of it will be applied to the newly originated outgoing channel. This allows
an association to be made between the two so it is known that the originator
has dialed the originated channel.

ASTERISK-24552 #close
Reported by: Matt Jordan


Merged revisions 429153 from

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

7 years agoPJSIP: Stagger outbound qualifies
Kinsey Moore [Tue, 9 Dec 2014 14:01:43 +0000 (14:01 +0000)]
PJSIP: Stagger outbound qualifies

This change staggers initiation of outbound qualify (OPTIONS) attempts
to reduce instantaneous server load and prevent network congestion.

ASTERISK-24342 #close
Reported by: Richard Mudgett

Merged revisions 429127 from

Merged revisions 429128 from

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

7 years agoAMI/ARI: Update version to 2.6.0/1.6.0 respectively for new features
Matthew Jordan [Mon, 8 Dec 2014 16:54:43 +0000 (16:54 +0000)]
AMI/ARI: Update version to 2.6.0/1.6.0 respectively for new features

AMI/ARI are getting a few enhancements in the next release of Asterisk 13. Per
semantic versioning, that warrants a bump in the minor version number, as it
reflects a backwards compatible change. Hence, this commit.

Merged revisions 429091 from

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

7 years agoFix a crash that would occur when receiving a 491 response to a reinvite.
Mark Michelson [Mon, 8 Dec 2014 16:43:00 +0000 (16:43 +0000)]
Fix a crash that would occur when receiving a 491 response to a reinvite.

The reviewboard description does a fine job of summarizing this, so here it is:

A reporter discovered that Asterisk would crash when attempting to retransmit
a reinvite that had previously received a 491 response. The crash occurred
because a pjsip_tx_data structure was being saved for reuse, but its reference
count was not being increased. The result was that the pjsip_tx_data was being
freed before we were actually done with it. When we attempted to re-use the
structure when re-sending the reinvite, Asterisk would crash.

The fix implemented here is not to try holding onto the pjsip_tx_data at all.
Instead, when we reschedule sending the reinvite, we create a brand new
pjsip_tx_data and send that instead. Because of this change, there is no need
for an ast_sip_session_delayed_request structure to have a pjsip_tx_data on
it any more. So any code referencing its use has been removed.

When this initial fix was introduced, I encountered a second crash when
processing a subsequent 200 OK on a rescheduled reinvite. The reason was
that when rescheduling the reinvite, we gave the wrong location for a
response callback. This has been fixed in this patch as well.

ASTERISK-24556 #close
Reported by Abhay Gupta


Merged revisions 429089 from

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

7 years agoAdd new AMI and ARI events for connected line changes on a channel.
Mark Michelson [Mon, 8 Dec 2014 16:24:36 +0000 (16:24 +0000)]
Add new AMI and ARI events for connected line changes on a channel.

The AMI event is called NewConnectedLine and the ARI event is called

ASTERISK-24554 #close
Reported by Matt Jordan


Merged revisions 429064 from

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

7 years agoStasis: Fix StasisStart/End order and missing events
Kinsey Moore [Mon, 8 Dec 2014 15:45:46 +0000 (15:45 +0000)]
Stasis: Fix StasisStart/End order and missing events

This corrects several bugs that currently exist in the stasis
application code.

* After a masquerade, the resulting channels have channel topics that
  do not match their uniqueids
** Masquerades now swap channel topics appropriately
* StasisStart and StasisEnd messages are leaked to observer
  applications due to being published on channel topics
** StasisStart and StasisEnd publishing is now properly restricted
   to controlling apps via app topics
* Race conditions exist where StasisStart and StasisEnd messages due to
  a masquerade may be received out of order due to being published on
  different topics
** These messages are now published directly on the app topic so this
   is now a non-issue
* StasisEnds are sometimes missing when sent due to masquerades and
  bridge swaps into and out of Stasis()
** This was due to StasisEnd processing adjusting message-sent flags
   after Stasis() had already exited and Stasis() had been re-entered
** This was corrected by adjusting these flags prior to sending the
   message while the initial Stasis() application was still shutting

ASTERISK-24537 #close
Reported by: Matt DiMeo

Merged revisions 429061 from

Merged revisions 429062 from

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

7 years agores/res_monitor: Reset in/out sample counts on Monitor start
Matthew Jordan [Sat, 6 Dec 2014 18:16:49 +0000 (18:16 +0000)]
res/res_monitor: Reset in/out sample counts on Monitor start

When repeatedly starting/stopping a Monitor on a channel, the accumulated
in/out sample counts are never reset to 0. This can cause inadvertent jumps
in the recordings, as the code in the channel core will determine incorrectly
that a jump in the recorded file position should occur. Setting the sample
counts to 0 simply reflects the initial state a Monitor should be in when it
is started, as this is the initial count that would be on the channels at that

ASTERISK-24573 #close
Reported by: Nuno Borges
  24573.patch uploaded by Nuno Borges (License 6116)

Merged revisions 429031 from

Merged revisions 429032 from

Merged revisions 429033 from

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

7 years agoapps/app_meetme: Apply default values on initial load with no config file
Matthew Jordan [Sat, 6 Dec 2014 17:36:21 +0000 (17:36 +0000)]
apps/app_meetme: Apply default values on initial load with no config file

When the app_meetme module is loaded without its configuration file, the
module settings aren't initialized. In particular, this impacts the use
of logging realtime members. This patch guarantees that we always set the
default module settings on initial load.


ASTERISK-24572 #close
Reported by: Nuno Borges
  24572.patch uploaded by Nuno Borges (License 6116)

Merged revisions 429027 from

Merged revisions 429028 from

Merged revisions 429029 from

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

7 years agosorcery: Add additional observer capabilities.
George Joseph [Fri, 5 Dec 2014 17:08:27 +0000 (17:08 +0000)]
sorcery: Add additional observer capabilities.

Add new global, instance and wizard observers.

Tested-by: George Joseph


Merged revisions 428999 from

Merged revisions 429000 from

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

7 years agomain/test: Fix compilation issue on 32-bit systems
Matthew Jordan [Thu, 4 Dec 2014 17:13:48 +0000 (17:13 +0000)]
main/test: Fix compilation issue on 32-bit systems

On a 32-bit system, a type of intmax_t will result in a compilation warning
when formatted as a 'long int'. Use the format specifier of %jd (which was
what was used originally in manager.c) to format the JSON extracted integer
on both 32-/64-bit systems.

Merged revisions 428972 from

Merged revisions 428973 from

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

7 years agomain/test: Fix race condition between AMI topic and Test Suite topic
Matthew Jordan [Thu, 4 Dec 2014 15:48:26 +0000 (15:48 +0000)]
main/test: Fix race condition between AMI topic and Test Suite topic

This patch fixes a race condition between the raising of test AMI events (which
drive many tests in the Asterisk Test Suite) and other AMI events. Prior to
this patch, the Stasis messages published to the test topic were not forwarded
to the AMI topic. Instead, the code in manager had a dedicated handler for test
messages that was independent of the topics forwarded to the AMI topic. This
results in no synchronization between the test messages and the rest of the
Stasis messages published out over AMI. In some test with very tight timing
constraints, this can result in out of order messages and spurious test
failures. Properly forwarding the Test Suite topic to the AMI topic ensures
that the messages are synchronized properly.

This patch does that, and moves the message handling to the Stasis definition
of the Test Suite message in test.c as well.


Merged revisions 428945 from

Merged revisions 428946 from

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

7 years agotests/test_cel: Add test_cel_attended_transfer_bridges_link to racey tests
Matthew Jordan [Wed, 3 Dec 2014 20:59:01 +0000 (20:59 +0000)]
tests/test_cel: Add test_cel_attended_transfer_bridges_link to racey tests

Despite failing less often, the ordering of the ATTENDEDTRANSFER event and the
BRIDGE_EXIT event for the Alice and David channels is not defined. This makes
the test still fail.

Merged revisions 428918 from

Merged revisions 428919 from

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

7 years agotests/test_cel: Fix CEL unit test failures caused by attended transfer changes
Matthew Jordan [Wed, 3 Dec 2014 19:49:38 +0000 (19:49 +0000)]
tests/test_cel: Fix CEL unit test failures caused by attended transfer changes

When the publication of attended transfer messages were pushed to another
thread, some subtle race conditions were introduced with the CEL unit tests.
This patch fixes one of them, and pushes the other to ASTERISK-22367, which
already exists to fix another bouncy CEL unit test.

In particular, this patch fixes the test_cel_attended_transfer_bridges_link
test, and defers the test_cel_attended_transfer_bridges_swap test to the
aforementioned JIRA issue.


Merged revisions 428891 from

Merged revisions 428892 from

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

7 years agoapps/app_voicemail: Fix crash with IMAP when streams are opened simultaneously
Matthew Jordan [Wed, 3 Dec 2014 16:45:24 +0000 (16:45 +0000)]
apps/app_voicemail: Fix crash with IMAP when streams are opened simultaneously

The UW IMAP library is instrinsically not thread-safe, and relies upon higher
level applications to guarantee thread safety. For the most part, this is
provided by the vms object, which provides locking for individual streams.
Unfortunately, this is not sufficient for calls to mail_open which create the
IMAP stream. mail_open can, on some systems, call into a UW IMAP specific
function for determining the address of a system based on a hostname,

In the ip6_unix implementation of this function, static variables are used
to hold parsing buffers. This can cause a crash if multiple threads attempt
to convert a hostname to an address at the same time. Locking on a single
mail stream is not sufficient to prevent simultaneous access to these static

In the IMAP library, this function can be called from the mail_open and
imap_status functions. As the imap_status function is not used by
app_voicemail, locking on access to mail_open is sufficient to prevent
any mangling of the buffers.


ASTERISK-24516 #close
Reported by: David Duncan Ross Palmer
Tested by: David Duncan Ross Palmer
  ASTERISK-24516.diff uploaded by David Duncan Ross Palmer (License 6660)

Merged revisions 428863 from

Merged revisions 428864 from

Merged revisions 428865 from

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

7 years agoCHANGES: Add item for new 'pjsip show identif(y|ies) commands
George Joseph [Tue, 2 Dec 2014 21:54:05 +0000 (21:54 +0000)]
CHANGES: Add item for new 'pjsip show identif(y|ies) commands

Tested-by: George Joseph

Merged revisions 428836 from

Merged revisions 428837 from

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

7 years agotests/test_stasis: Resolve compilation issues from Asterisk 12 merge
Matthew Jordan [Tue, 2 Dec 2014 19:04:02 +0000 (19:04 +0000)]
tests/test_stasis: Resolve compilation issues from Asterisk 12 merge

When merging the changes up stream in r428687, I missed the fact that the
signature for stasis_message_type_create was changed. This patch fixes
the compilation issues introduced by that merge.

Merged revisions 428815 from

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

7 years agopbx/pbx_loopback: Speed up switches by avoiding unneeded lookups
Matthew Jordan [Tue, 2 Dec 2014 17:10:57 +0000 (17:10 +0000)]
pbx/pbx_loopback: Speed up switches by avoiding unneeded lookups

This patch makes a small rearrangement to only do dialplan lookups during
loopback switches if the pattern matches. Prior to this patch, the dialplan
lookups were always performed, even when the result would be discarded.
Dialplan lookups can be very costly if remote switches - like DUNDi - are
present. In those cases extension matching is sped up considerably, making
the issue of lost digits more manageable.

As collateral damage, 6 trailing spaces were killed.


ASTERISK-24577 #close
Reported by: Birger Harzenetter
  ast-loopback.patch uploaded by Birger Harzenetter (License 5870)

Merged revisions 428787 from

Merged revisions 428788 from

Merged revisions 428789 from

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

7 years agores_pjsip_refer: Fix issue where native bridge may not occur upon completion of a...
Joshua Colp [Tue, 2 Dec 2014 12:21:34 +0000 (12:21 +0000)]
res_pjsip_refer: Fix issue where native bridge may not occur upon completion of a transfer.

There are two methods within res_pjsip_refer for keeping track of the state of a transfer.
The first is a framehook which looks at frames passing by to determine the state. The second
subscribes to know when the channel joins a bridge. In the case when the channel joins the
bridge the framehook is *NOT* removed and this prevents the native RTP bridging technology
from getting used.

This change gets the channel and if it still exists remove the framehook.


Merged revisions 428760 from

Merged revisions 428761 from

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

7 years agoconfig: Create ast_variable_find_in_list()
George Joseph [Tue, 2 Dec 2014 00:38:56 +0000 (00:38 +0000)]
config: Create ast_variable_find_in_list()

const char *ast_variable_find_in_list(const struct ast_variable *list,
   const char *variable);

ast_variable_find() requires a config category to search whereas
ast_variable_find_in_list() just needs the root list element which is
useful if you don't have a category.

Tested-by: George Joseph


Merged revisions 428733 from

Merged revisions 428734 from

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

7 years agores_pjsip_endpoint_identifier_ip: Add 'show identify(ies)' cli commands
George Joseph [Tue, 2 Dec 2014 00:31:49 +0000 (00:31 +0000)]
res_pjsip_endpoint_identifier_ip: Add 'show identify(ies)' cli commands

While troubleshooting other things I realized there were no pjsip cli
commands for identify.  This patch adds them.  It also also fixes a
reference leak when a 'show endpoint' displayed identifies and properly
sets the return code if load_module can't allocate a cli formatter structure.

Tested-by: George Joseph


Merged revisions 428725 from

Merged revisions 428731 from

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

7 years agortp_engine: Add support for transporting signed linear at 12kHz, 24kHz, 32kHz, 44kHz...
Joshua Colp [Mon, 1 Dec 2014 18:51:52 +0000 (18:51 +0000)]
rtp_engine: Add support for transporting signed linear at 12kHz, 24kHz, 32kHz, 44kHz, 48kHz, 96kHz, and 192kHz over RTP.

This change adds mappings in the RTP engine layer for the remaining signed linear formats.

ASTERISK-24274 #close
Reported by: Frankie Chin


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

7 years agomain/stasis: Allow subscriptions to use a threadpool for message delivery
Matthew Jordan [Mon, 1 Dec 2014 17:59:21 +0000 (17:59 +0000)]
main/stasis: Allow subscriptions to use a threadpool for message delivery

Prior to this patch, all Stasis subscriptions would receive a dedicated
thread for servicing published messages. In contrast, prior to r400178
(see review, the subscriptions
shared a thread pool. It was discovered during some initial work on Stasis
that, for a low subscription count with high message throughput, the
threadpool was not as performant as simply having a dedicated thread per

For situations where a subscriber receives a substantial number of messages
and is always present, the model of having a dedicated thread per subscriber
makes sense. While we still have plenty of subscriptions that would follow
this model, e.g., AMI, CDRs, CEL, etc., there are plenty that also fall into
the following two categories:
* Large number of subscriptions, specifically those tied to endpoints/peers.
* Low number of messages. Some subscriptions exist specifically to coordinate
  a single message - the subscription is created, a message is published, the
  delivery is synchronized, and the subscription is destroyed.
In both of the latter two cases, creating a dedicated thread is wasteful (and
in the case of a large number of peers/endpoints, harmful). In those cases,
having shared delivery threads is far more performant.

This patch adds the ability of a subscriber to Stasis to choose whether or not
their messages are dispatched on a dedicated thread or on a threadpool. The
threadpool is configurable through stasis.conf.


ASTERISK-24533 #close
Reported by: xrobau
Tested by: xrobau

Merged revisions 428681 from

Merged revisions 428687 from

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

7 years agoapp_record: Fix bug where using the 'k' option and hanging up would trim 1/4 of a...
Joshua Colp [Mon, 1 Dec 2014 13:41:43 +0000 (13:41 +0000)]
app_record: Fix bug where using the 'k' option and hanging up would trim 1/4 of a second of the recording.

The Record dialplan function trims 1/4 of a second from the end of recordings in case
they are terminated because of DTMF. When hanging up, however, you don't want this to happen.
This change makes it so on hangup this does not occur.

ASTERISK-24530 #close
Reported by: Ben Smithurst
 app_record_v2.diff submitted by Ben Smithurst (license 6529)


Merged revisions 428653 from

Merged revisions 428654 from

Merged revisions 428655 from

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

7 years agochannel: Extend size of buffer for codecs in "core show channeltype" CLI command.
Joshua Colp [Mon, 1 Dec 2014 13:08:23 +0000 (13:08 +0000)]
channel: Extend size of buffer for codecs in "core show channeltype" CLI command.

The static buffer for codecs when invoking the "core show channeltype" CLI command
did not have enough room for all codecs. This has been extended so it does.

ASTERISK-24542 #close
Reported by: snuffy
 channeltype-tech.diff submitted by snuffy (license 5024)


Merged revisions 428632 from

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

7 years agotest_channel_feature_hooks.c: Fix unit test for DTMF hooks.
Richard Mudgett [Mon, 24 Nov 2014 20:39:01 +0000 (20:39 +0000)]
test_channel_feature_hooks.c: Fix unit test for DTMF hooks.

Fix the failing /channels/features/test_features_channel_dtmf unit test.

DTMF emulation does not work without a stream of packets to prod the
emulation code.


Merged revisions 428604 from

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

7 years agoDTMF hooks: Leaving channels need to push any collected digits into the bridge.
Richard Mudgett [Mon, 24 Nov 2014 20:32:29 +0000 (20:32 +0000)]
DTMF hooks: Leaving channels need to push any collected digits into the bridge.

Any partially collected DTMF digits for a DTMF hook need to be pushed into
the bridge when a channel leaves the bridging system as if there were a


Merged revisions 428601 from

Merged revisions 428602 from

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

7 years agomanager: Fix could not extend string messages.
Richard Mudgett [Fri, 21 Nov 2014 19:16:55 +0000 (19:16 +0000)]
manager: Fix could not extend string messages.

When shutting down Asterisk that has an active AMI connection, you get
several "failed to extend from %d to %d" messages because use of the
EVENT_FLAG_SHUTDOWN attempts to add all AMI permission strings to the

* Created MAX_AUTH_PERM_STRING to use when creating stack based struct
ast_str variables used with the authority_to_str() and
user_authority_to_str() functions instead of a variety of magic numbers
that could be too small.

* Added a special check for EVENT_FLAG_SHUTDOWN to authority_to_str() so
it will not attempt to add all permission level strings.


Merged revisions 428570 from

Merged revisions 428571 from

Merged revisions 428572 from

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

7 years agosorcery: Make is_object_field_registered handle field names that are regexes.
George Joseph [Fri, 21 Nov 2014 17:49:39 +0000 (17:49 +0000)]
sorcery: Make is_object_field_registered handle field names that are regexes.

As a result of, res_sorcery_realtime
was tossing database fields that didn't have an exact match to a sorcery
registered field.  This broke the ability to use regexes as field names which
manifested itself as a failure of res_pjsip_phoneprov_provider which uses
this capability.  It also broke handling of fields that start with '@' in
realtime but I don't think anyone noticed.

This patch does the following...
* Modifies ast_sorcery_fields_register to pre-compile the name regex.
* Modifies ast_sorcery_is_object_field_registered to test the regex if it
  exists instead of doing an exact strcmp.
* Modifies res_pjsip_phoneprov_provider with a few tweaks to get it to work
  with realtime.

Tested-by: George Joseph


Merged revisions 428543 from

Merged revisions 428544 from

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

7 years agosip.conf.sample - note that media_address does not change listen address, just the SDP
Olle Johansson [Fri, 21 Nov 2014 13:59:45 +0000 (13:59 +0000)]
sip.conf.sample - note that media_address does not change listen address, just the SDP

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

7 years agomain/bridge_basic: Fix features regressions introduced by r428165
Matthew Jordan [Fri, 21 Nov 2014 02:17:15 +0000 (02:17 +0000)]
main/bridge_basic: Fix features regressions introduced by r428165

In r428165, two bugs were introduced:

* Prior to entering the features retry loop, the buffer that holds the
  collected digits is wiped. However, this inadvertently wipes out the
  first collected digit on the first pass through, which is obtained
  in ast_stream_and_wait. This caused all of the features tests to fail.
* If ast_app_dtget returns a hangup (-1), the loop would retry incorrectly.
  If we detect a hangup, we have to stop trying the feature.

This patch fixes both issues.


Merged revisions 428505 from

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

7 years agoFix error with mixed address family ACLs.
Mark Michelson [Thu, 20 Nov 2014 16:37:58 +0000 (16:37 +0000)]
Fix error with mixed address family ACLs.

Prior to this commit, the address family of the first item in an ACL
was used to compare all incoming traffic. This could lead to traffic
of other IP address families bypassing ACLs.

ASTERISK-24469 #close

Reported by Matt Jordan
ASTERISK-24469-11.diff uploaded by Matt Jordan (License #6283)


Merged revisions 428402 from

Merged revisions 428417 from

Merged revisions 428422 from

Merged revisions 428425 from

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

7 years agoAST-2014-018 - func_db: DB Dialplan function permission escalation via AMI.
Kevin Harwell [Thu, 20 Nov 2014 16:35:21 +0000 (16:35 +0000)]
AST-2014-018 - func_db: DB Dialplan function permission escalation via AMI.

The DB dialplan function when executed from an external protocol (for instance
AMI), could result in a privilege escalation.

Asterisk now inhibits the DB function from being executed from an external
interface if the live_dangerously option is set to no.

Reported by: Gareth Palmer
patches: submitted by Gareth Palmer (license 5169)

Merged revisions 428331 from

Merged revisions 428363 from

Merged revisions 428409 from

Merged revisions 428413 from

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

7 years agoPJSIP ACLs: Fix ACLs not loading on startup and apply/acl issues on contact
Jonathan Rose [Thu, 20 Nov 2014 16:25:19 +0000 (16:25 +0000)]
PJSIP ACLs: Fix ACLs not loading on startup and apply/acl issues on contact

The biggest problem this patch fixes is that ACLs weren't previously being
loaded when the res_pjsip_acl module was loaded. Yikes. In addition, the
ACL options contact_permit and contact_acl were effectively interpreted as
contact_deny and this patch fixes that as well.

AST-1418 #close
Reported by: Thomas Thompson

ASTERISK-24531 #close
Reported by: Matt Jordan

Merged revisions 428333 from

Merged revisions 428343 from

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

7 years agoAST-2014-017 - app_confbridge: permission escalation/ class authorization.
Kevin Harwell [Thu, 20 Nov 2014 15:57:23 +0000 (15:57 +0000)]
AST-2014-017 - app_confbridge: permission escalation/ class authorization.

Confbridge dialplan function permission escalation via AMI and inappropriate
class authorization on the ConfbridgeStartRecord action. The CONFBRIDGE dialplan
function when executed from an external protocol (for instance AMI), could
result in a privilege escalation. Also, the AMI action “ConfbridgeStartRecord”
could also be used to execute arbitrary system commands without first checking
for system access. The AMI “ConfbridgeStopRecord” has also been updated to
only run under a system authorization.

Asterisk now inhibits the CONFBRIDGE function from being executed from an
external interface if the live_dangerously option is set to no.  Also, the
“ConfbridgeStartRecord” AMI action is now only allowed to execute under a
user with system level access.

Reported by: Gareth Palmer

Merged revisions 428332 from

Merged revisions 428334 from

Merged revisions 428339 from

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

7 years agoAST-2014-016: Fix crash when receiving an in-dialog INVITE with Replaces in res_pjsip...
Joshua Colp [Thu, 20 Nov 2014 14:56:24 +0000 (14:56 +0000)]
AST-2014-016: Fix crash when receiving an in-dialog INVITE with Replaces in res_pjsip_refer.

The implementation of INVITE with Replaces in res_pjsip_refer did not expect them to
occur in-dialog. As a result it would incorrectly attempt to hang up a channel it
thought was under its control. In reality the channel would be under the control of
another thread. When the other thread accessed the channel it would be accessing freed
memory and could crash.

This change makes res_pjsip_refer not act on an in-dialog INVITE with Replaces.

ASTERISK-24528 #close
Reported by: Joshua Colp

Merged revisions 428304 from

Merged revisions 428305 from

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

7 years agoAST-2014-015: Fix race condition in chan_pjsip when sending responses after a CANCEL...
Joshua Colp [Thu, 20 Nov 2014 14:49:48 +0000 (14:49 +0000)]
AST-2014-015: Fix race condition in chan_pjsip when sending responses after a CANCEL has been received.

Due to the serialized architecture of chan_pjsip there exists a race condition where a CANCEL may
be received and processed before responses (such as 180 Ringing, 183 Session Progress, and 200 OK)
are sent. Since the session is in an unexpected state PJSIP will assert when this is attempted.

This change makes it so that these responses are not sent on disconnected sessions.

ASTERISK-24471 #close
Reported by: yaron nahum

Merged revisions 428301 from

Merged revisions 428302 from

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

7 years agostringfields: Fix bug in ast_string_fields_copy.
Corey Farrell [Wed, 19 Nov 2014 19:32:23 +0000 (19:32 +0000)]
stringfields: Fix bug in ast_string_fields_copy.

ast_string_fields_copy relies on the fact that
__ast_string_field_release_active never previously
zeroed pool->used, so keeping the existing pointer
was "ok".  Now that existing pools can be reset to
'empty', it is important to set each field to
__ast_string_field_empty after releasing the memory.

ASTERISK-24535 #close
Reported by: Corey Farrell

Merged revisions 428272 from

Merged revisions 428273 from

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

7 years agoast_str: Fix improper member access to struct ast_str members.
Richard Mudgett [Wed, 19 Nov 2014 17:22:29 +0000 (17:22 +0000)]
ast_str: Fix improper member access to struct ast_str members.

Accessing members of struct ast_str outside of the string manipulation API
routines is invalid since struct ast_str is supposed to be treated as


Merged revisions 428244 from

Merged revisions 428245 from

Merged revisions 428246 from

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

7 years agores_pjsip_sdp_rtp: Add support for optimistic SRTP.
Joshua Colp [Wed, 19 Nov 2014 12:50:47 +0000 (12:50 +0000)]
res_pjsip_sdp_rtp: Add support for optimistic SRTP.

Optimistic SRTP is the ability to enable SRTP but not have it be
a fatal requirement. If SRTP can be used it will be, if not it won't be.
This gives you a better chance of using it without having your sessions
fail when it can't be.

Encrypt all the things!


Merged revisions 428222 from

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

7 years agoalembic: Fix alembic migration for 'moh_passthrough' option in res_pjsip.
Joshua Colp [Wed, 19 Nov 2014 12:45:47 +0000 (12:45 +0000)]
alembic: Fix alembic migration for 'moh_passthrough' option in res_pjsip.

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

7 years agores_pjsip_refer: Ensure Refer-To is NULL terminated and parse it as a URI.
Joshua Colp [Wed, 19 Nov 2014 11:51:23 +0000 (11:51 +0000)]
res_pjsip_refer: Ensure Refer-To is NULL terminated and parse it as a URI.

There is no guarantee that when we get a Refer-To that it will be NULL terminated.
As the URI parsing function requires it to be we now NULL terminate it.

Additionally parsing the Refer-To as a 'To' header is needless and it can
simply be done as a URI. This also fixes a problem where certain Refer-To headers
would not be parsed as a 'To' header causing the REFER to fail.

ASTERISK-24508 #close
Reported by: Beppo Mazzucato


Merged revisions 428195 from

Merged revisions 428196 from

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