Matt Jordan [Wed, 29 Apr 2015 15:13:03 +0000 (10:13 -0500)]
Merge "chan_pjsip: Creating Channel Causes Asterisk to Crash When Duplicate AOR Sections Exist in pjsip.conf"
Matt Jordan [Wed, 29 Apr 2015 14:49:43 +0000 (09:49 -0500)]
Merge topic 'ASTERISK-25027'
* changes:
res_pjsip: Remove incorrect MODULEINFO from presence_xml.c.
Git Migration: Create doc/rest-api when needed.
Matt Jordan [Wed, 29 Apr 2015 14:47:58 +0000 (09:47 -0500)]
Merge "Build System: Prevent unneeded changes to asterisk/buildopts.h."
Corey Farrell [Wed, 29 Apr 2015 11:26:13 +0000 (07:26 -0400)]
res_pjsip: Remove incorrect MODULEINFO from presence_xml.c.
Remove incorrect MODULEINFO block and unneeded header includes
from presence_xml.c.
ASTERISK-25027
Reported by: Corey Farrell
Change-Id: I977c609ab9d1fe05373027c4138900f6985990eb
Corey Farrell [Wed, 29 Apr 2015 11:17:00 +0000 (07:17 -0400)]
Git Migration: Create doc/rest-api when needed.
Create the directory './doc/rest-api' at the start of 'make ari-stubs'
to prevent an error when documentation is generated. The directory is
also added to git ignores.
ASTERISK-25027
Reported by: Corey Farrell
Change-Id: Iaccc7f0138501c23aa78feaca2f3cce9e68cbc1b
Joshua Colp [Wed, 29 Apr 2015 10:31:05 +0000 (05:31 -0500)]
Merge "chan_iax2: Ensure that IAX flags are 64 bits."
Corey Farrell [Wed, 29 Apr 2015 08:03:00 +0000 (04:03 -0400)]
Build System: Prevent unneeded changes to asterisk/buildopts.h.
* Add AST_DEVMODE to BUILDOPTS
* Use BUILDOPTS to generate AST_BUILDOPT_SUM.
* Remove loop that defined AST_MODULE_*
These changes ensure that only ABI effecting options are considered for
AST_BUILDOPT_SUM. This also reduces unneeded full system rebuilds caused
by enabling or disabling one module that another is dependent on.
ASTERISK-25028 #close
Reported by: Corey Farrell
Change-Id: I2c516d93df9f6aaa09ae079a8168c887a6ff93a2
Joshua Colp [Wed, 29 Apr 2015 00:18:29 +0000 (19:18 -0500)]
Merge "res_pjsip_outbound_registration: Add debugging messages."
Mark Michelson [Tue, 28 Apr 2015 21:38:11 +0000 (16:38 -0500)]
Merge "CHANGES: Add missing spaces."
Yousf Ateya [Tue, 28 Apr 2015 18:28:50 +0000 (20:28 +0200)]
chan_iax2: Ensure that IAX flags are 64 bits.
Flags are 64 bits. Without LLU suffix the value of 1<<31 is negative.
Although it doesn't have an effect on the current implementation, it will
be problem if more flags are added.
Change-Id: Ic290c81cfbbbf062872392d99d3322932cc49487
Ashley Sanders [Tue, 28 Apr 2015 05:29:42 +0000 (00:29 -0500)]
chan_pjsip: Creating Channel Causes Asterisk to Crash When Duplicate AOR
Sections Exist in pjsip.conf
This patch modifies the current loading strategy of the pjsip configuration. If
duplicate sections (e.g. sections containing the same [id/type]) are defined in
[pjsip.conf], the loader will consider the configuration for the given type as
invalid when the duplicate section is encountered. The entire configuration
(including what was previously loaded) for the duplicate [id/type] sections
will be rejected and destroyed, an error message is logged and the load
processing for the given stops.
ASTERISK-24996
Reported By: Ashley Sanders
Change-Id: I35090ca4cd40f1f34881dfe701a329145c347aef
Richard Mudgett [Tue, 28 Apr 2015 16:50:07 +0000 (11:50 -0500)]
chan_vpb: Fix compile error due to use of ASTERISK_FILE_VERSION.
Change-Id: I51179e2a83937423676da522b766f1126de4059e
Mark Michelson [Mon, 27 Apr 2015 19:44:16 +0000 (14:44 -0500)]
res_pjsip_outbound_registration: Add debugging messages.
When problems occur regarding outbound registrations, it currently
is difficult to debug. Most off-nominal paths had warning messages,
but sometimes we want to know what's going on before hitting the
off-nominal path. This patch adds lots of debugging output that
should give a clearer picture of what is happening with regards
to outbound registrations.
ASTERISK-25020
Reported by Mark Michelson
Change-Id: I577bde7860be0a6c872b5bcb4d5047340bf45d45
Joshua Colp [Tue, 28 Apr 2015 12:15:47 +0000 (07:15 -0500)]
Merge "Example script for scan-build (the llvm static analyzer)"
Steve Davies [Tue, 28 Apr 2015 10:38:30 +0000 (11:38 +0100)]
res_rtp_asterisk: Resolve 2 discrete memory leaks in DTLS
ao2 ref leak in res_rtp_asterisk.c when a DTLS policy is created.
The resources are linked into a table, but the original alloc refs
are never released. ast_strdup leak in rtp_engine.c. If
ast_rtp_dtls_cfg_copy() is called twice on the same destination struct,
a pointer to an alloc'd string is overwritten before the string is free'd.
ASTERISK-25022
Reported by: one47
Change-Id: I62a8ceb8679709f6c3769136dc6aa9a68202ff9b
Joshua Colp [Tue, 28 Apr 2015 11:55:30 +0000 (06:55 -0500)]
Merge "cdr/cdr_odbc.c: Added to record new columns add on CDR 1.8 Asterisk Version"
Matt Jordan [Tue, 28 Apr 2015 11:42:30 +0000 (06:42 -0500)]
Merge "Astobj2: Allow reference debugging to be enabled/disabled by config."
Rodrigo Ramírez Norambuena [Tue, 28 Apr 2015 03:01:25 +0000 (23:01 -0400)]
CHANGES: Add missing spaces.
Change-Id: I534ea0f22759e3633585dfa9b145b4a284efe67f
Corey Farrell [Fri, 17 Apr 2015 07:16:59 +0000 (03:16 -0400)]
Astobj2: Allow reference debugging to be enabled/disabled by config.
* The REF_DEBUG compiler flag no longer has any effect on code that uses
Astobj2. It is used to determine if reference debugging is enabled by
default. Reference debugging can be enabled or disabled in asterisk.conf.
* Caller information is provided in logger errors for ao2 bad magic numbers.
* Optimizes AO2 by merging internal functions with the public counterpart.
This was possible now that we no longer require a dual ABI.
ASTERISK-24974 #close
Reported by: Corey Farrell
Change-Id: Icf3552721fe999365ba8a8cf00a965aa6b897cc1
George Joseph [Mon, 27 Apr 2015 17:11:40 +0000 (11:11 -0600)]
res_pjsip: Fix SEGV on pending-qualify contacts
Permanent contacts that hadn't been qualified yet were missing
their contact_status entries causing SEGVs when running CLI
commands.
This patch makes sure that contact_statuses are created for
both dynamic and permanent contacts when they are created.
It also adds checks in the CLI code to make sure there's a
contact_status, just in case.
ASTERISK-25018 #close
Reported-by: Ivan Poddubny
Tested-by: Ivan Poddubny
Tested-by: George Joseph
Change-Id: I3cc13e5cedcafb24c400368b515b02d7fb81e029
Rodrigo Ramírez Norambuena [Wed, 15 Apr 2015 23:55:33 +0000 (20:55 -0300)]
cdr/cdr_odbc.c: Added to record new columns add on CDR 1.8 Asterisk Version
Add new column to INSERT new columns added in cdr 1.8 version. The columns are:
* peeraccount
* linkedid
* sequence
This feature is configurable in cdr_odbc.conf using a new configuration
option, 'newcdrcolumns'.
ASTERISK-24976 #close
Change-Id: Ibe0c7540a88305c6012786f438a0813ad8b19127
Matt Jordan [Sun, 26 Apr 2015 22:21:15 +0000 (17:21 -0500)]
channels/chan_skinny: Fix compilation error introduced in
f8e21a1adf
A typo in commit
f8e21a1adf resulted in a compilation error in
chan_skinny. This patch fixes the typo.
ASTERISK-24917
Change-Id: Id7f4ad1fe948eb2408622e80c27936ce4516c33c
Matt Jordan [Sun, 26 Apr 2015 20:53:58 +0000 (15:53 -0500)]
Merge "Clang: Fix some more tautological-compare warnings."
Matt Jordan [Fri, 24 Apr 2015 18:07:13 +0000 (13:07 -0500)]
Merge "app_confbridge: Default the template option to a compatible default profile."
Matt Jordan [Fri, 24 Apr 2015 17:24:02 +0000 (12:24 -0500)]
Merge "res_pjsip_outbound_authenticator: Increase CSeq on authed requests."
Kevin Harwell [Thu, 23 Apr 2015 22:29:51 +0000 (17:29 -0500)]
app_confbridge: Default the template option to a compatible default profile.
Confbridge dynamic profiles did not have a default profile unless you
explicitly used Set(CONFBRIDGE(bridge,template)=default_bridge). If a
template was not set prior to the bridge being created then some
options were left with no default values set. This patch makes it so
the default templates are set to the default bridge and user profiles.
ASTERISK-24749 #close
Reported by: philippebolduc
Change-Id: I1bd6e94b38701ac2112d842db68de63d46f60e0a
Joshua Colp [Fri, 24 Apr 2015 16:36:17 +0000 (11:36 -0500)]
Merge "CHANGES remove tab space"
Joshua Colp [Fri, 24 Apr 2015 15:33:12 +0000 (10:33 -0500)]
Merge "CREDITS: Update credits for Olle Johansson"
Olle E. Johansson [Thu, 23 Apr 2015 12:31:42 +0000 (14:31 +0200)]
CREDITS: Update credits for Olle Johansson
Change-Id: I8f3d0a6c3f1075a1f7d8308593394611a96749de
Mark Michelson [Fri, 24 Apr 2015 14:17:25 +0000 (09:17 -0500)]
res_pjsip_outbound_authenticator: Increase CSeq on authed requests.
The way PJSIP generates an authenticated request is to use a previous
request as a template. This means that the authenticated request will
have the same Call-ID, From header (including tag), and CSeq as the
original request. PJSIP generates a new branch on the Via header to
indicate that this is a new transaction, though.
There are some SIP implementations, though, that do not notice the
change in the branch and therefore will match the authed request to the
original request's transaction. Since the CSeq is the same, the server
will repeat the response it sent to the original request.
This patch aids interoperability by increasing the CSeq of the authed
request by one.
ASTERISK-24845 #close
Reported by: Carl Fortin
Tested by: Carl Fortin
Change-Id: I39c4ca52e688a9f83bcc1878371334becdc5be01
Diederik de Groot [Wed, 22 Apr 2015 09:17:56 +0000 (11:17 +0200)]
Clang: Fix some more tautological-compare warnings.
clang can warn about a so called tautological-compare, when it finds
comparisons which are logically always true, and are therefor deemed
unnecessary.
Exanple:
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.
ASTERISK-24917
Change-Id: Ief23ef68916192b9b72dabe702b543ecfeca0b62
Diederik de Groot [Mon, 20 Apr 2015 18:06:20 +0000 (20:06 +0200)]
Example script for scan-build (the llvm static analyzer)
- Added Pre-amble (Options / Flags / Usage Example / GNU License)
- Extended Configurability
- Made Executable
ASTERISK-24917
Change-Id: I70405fe54e4be7dbfbcb62e291690069b88617a8
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."
Mark Michelson [Thu, 23 Apr 2015 22:23:50 +0000 (17:23 -0500)]
Merge "Clang: change previous tautological-compare fixes."
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
crash.
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
code.
ASTERISK-25004 #close
Reported by Mark Michelson
Change-Id: Ic5a1230668369dda4bb13524098aed9306ab45a0
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 myexample.com will fail but myexample.com:5060 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
create_out_of_dialog_request.
ASTERISK-24999
Change-Id: Ifc17d16a4923e1045d37fe51e43bbe29fa556ca2
Reported-by: Brad Latus
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
unnecessary.
Exanple:
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.
ASTERISK-24917
Change-Id: I0557ae0154a0b7de68883848a609309cdf0aee6a
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."
Matt Jordan [Thu, 23 Apr 2015 11:31:16 +0000 (06:31 -0500)]
Merge "New AMI Command Output Format"
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
continue.
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
install.
ASTERISK-24998
Change-Id: Iaf94a9431a4922ec4ec994003f02135acfdd3889
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
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
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."
Matt Jordan [Wed, 22 Apr 2015 19:25:47 +0000 (14:25 -0500)]
Merge "Fix/Update clang-RAII macro implementation"
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."
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
Matt Jordan [Wed, 22 Apr 2015 11:27:38 +0000 (06:27 -0500)]
Merge "cdr/cdr_adaptive_odbc.c: Refactor concatenate columns name."
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
ASTERISK-24917
Change-Id: I12091228090e90831bf2b498293858f46ea7a8c2
Joshua Colp [Wed, 22 Apr 2015 10:46:00 +0000 (05:46 -0500)]
Merge "Check for ao2_alloc failure in __ast_channel_internal_alloc."
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
Joshua Colp [Wed, 22 Apr 2015 10:29:18 +0000 (05:29 -0500)]
Merge "res_pjsip_pubsub: Set the endpoint on SUBSCRIBE dialogs."
Rodrigo Ramírez Norambuena [Tue, 21 Apr 2015 22:45:43 +0000 (19:45 -0300)]
CHANGES remove tab space
Change-Id: I6b43e43474bf6fb77b8227eadb036036f8e90521
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
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
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 https://github.com/asterisk/starpy/pull/34
ASTERISK-24730
Change-Id: I6718d95490f0a6b3f171c1a5cdad9207f9a44888
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
Joshua Colp [Mon, 20 Apr 2015 22:24:04 +0000 (17:24 -0500)]
Merge "pjsip_options: Fix non-qualified contacts showing as unavailable"
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.
ASTERISK-24980
Change-Id: Ib8bb53c42535378581d4ef729cc5ebbb22b067ac
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
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"
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."
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
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
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
ASTERISK-24841:
tests/fax/pjsip/gateway_t38_g711
tests/fax/sip/gateway_mix1
tests/fax/sip/gateway_mix3
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
no-operation.
* 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
consistent.
* Fix copy pasta errors in fax_gateway_framehook() that confuses read and
write when dealing with saved channel formats.
ASTERISK-24841
Reported by: Matt Jordan
Change-Id: I6fda0877104a370af586a5e8cf9e161a484da78d
Corey Farrell [Fri, 17 Apr 2015 21:19:24 +0000 (17:19 -0400)]
Fix issue with AST_THREADSTORAGE_RAW when DEBUG_THREADLOCALS is enabled.
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
Matt Jordan [Fri, 17 Apr 2015 20:58:13 +0000 (15:58 -0500)]
Merge "Detect 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
detected.
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
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
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"
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
Review: https://gerrit.asterisk.org/#/c/133/
Change-Id: I5134b84c4524906d8148817719d76ffb306488ac
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 <george.joseph@fairview5.com>
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
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 https://reviewboard.asterisk.org/r/4572/ and the
discussion at
http://lists.digium.com/pipermail/asterisk-dev/2015-March/073921.html
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 <george.joseph@fairview5.com>
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."
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 https://reviewboard.asterisk.org/r/4572/ and the
discussion at
http://lists.digium.com/pipermail/asterisk-dev/2015-March/073921.html
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
callback.
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
twice.
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 <george.joseph@fairview5.com>
Tested-by: George Joseph <george.joseph@fairview5.com>
Change-Id: I0778dc730d9689c5147a444a04aee3c1026bf747
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."
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 <george.joseph@fairview5.com>
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
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
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."
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
LENGTHEN_BUF2.
ASTERISK-24965 #close
Reported by: Rodrigo Ramirez Norambuena
Change-Id: Icc818697d7d66d34bfe3048cdd15ca2b06c89744
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
Matt Jordan [Tue, 14 Apr 2015 17:39:15 +0000 (12:39 -0500)]
Merge "Build System: Create Makefile macro MOD_ADD_SOURCE."
Matt Jordan [Tue, 14 Apr 2015 17:39:02 +0000 (12:39 -0500)]
Merge "astobj2: Add support for weakproxy objects."
Matt Jordan [Tue, 14 Apr 2015 17:25:56 +0000 (12:25 -0500)]
Merge ".gitignore updates for master/13"
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
Matt Jordan [Tue, 14 Apr 2015 16:39:55 +0000 (11:39 -0500)]
Merge "cdr_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
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
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
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
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
Matt Jordan [Mon, 13 Apr 2015 17:03:46 +0000 (12:03 -0500)]
Merge "build_tools/make_version: Update version parsing for Git migration"
Joshua Colp [Mon, 13 Apr 2015 16:08:07 +0000 (11:08 -0500)]
Merge "git migration: Refactor the ASTERISK_FILE_VERSION macro"
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
of.
ASTERISK-24954 #close
Change-Id: I8090d5d548b6d19e917157ed530b914b7eaf9799
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
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
versions.
Specifically, it does the following:
* Rename ASTERISK_FILE_VERSION macro to ASTERISK_REGISTER_FILE, and
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
Matt Jordan [Sun, 12 Apr 2015 18:58:23 +0000 (13:58 -0500)]
Merge "main/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
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