summaryrefslogtreecommitdiff
AgeCommit message (Collapse)Author
2015-04-29ARI: Fix missing dependencies.Corey Farrell
ARI modules that are generated by 'make ari-stubs' are all dependent on res_ari_model. Additionally some of the same modules depend on one or more res_stasis_* modules. ASTERISK-25027 #close Reported by: Corey Farrell Change-Id: I8e07fe7e81fedacb87232f2b6f8b5f47927b4153
2015-04-29res_pjsip: Remove incorrect MODULEINFO from presence_xml.c.Corey Farrell
Remove incorrect MODULEINFO block and unneeded header includes from presence_xml.c. ASTERISK-25027 Reported by: Corey Farrell Change-Id: I977c609ab9d1fe05373027c4138900f6985990eb
2015-04-29Git Migration: Create doc/rest-api when needed.Corey Farrell
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
2015-04-29res_pjsip_outbound_registration: Fix build due to removal of transaction.Joshua Colp
Change-Id: I7a8a7beec3334cec304943f2dd7597eabe2e3150
2015-04-28Merge "res_pjsip_outbound_registration: Add debugging messages." into 13Joshua Colp
2015-04-28Merge "res_pjsip_outbound_registration: Don't fail on delayed processing: ↵Joshua Colp
13." into 13
2015-04-28res_pjsip_outbound_registration: Don't fail on delayed processing: 13.Mark Michelson
This is the Asterisk 13 version of a change to master that allows for registration responses to be processed successfully potentially after the original transaction has timed out. The main difference between this and the master change is that the master version has API changes that are unacceptable for 13. For 13, this is worked around by adding a new API call that the outbound registration code uses instead. The following is the text from the master version of this commit: Odd behaviors have been observed during outbound registrations. The most common problem witnessed has been one where a request with authentication credentials cannot be created after receiving a 401 response. Other behaviors include apparently processing an incorrect SIP response. Inspecting the code led to an apparent issue with regards to how we handle transactions in outbound registration code. When a response to a REGISTER arrives, we save a pointer to the transaction and then push a task onto the registration serializer. Between the time that we save the pointer and push the task, it's possible for the transaction to be destroyed due to a timeout. It's also possible for the address to be reused by the transaction layer for a new transaction. To allow for authentication of a REGISTER request to be authenticated after the transaction has timed out, we now also hold a reference to the original REGISTER request instead of the transaction. The function for creating a request with authentication has been altered to take the original request instead of the transaction where the original request was sent. ASTERISK-25020 Reported by Mark Michelson Change-Id: If1ee5f601be839479a219424f0358a229f358f7c
2015-04-28res_pjsip_outbound_registration: Add debugging messages.Mark Michelson
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
2015-04-28Merge "Example script for scan-build (the llvm static analyzer)" into 13Joshua Colp
2015-04-28res_rtp_asterisk: Resolve 2 discrete memory leaks in DTLSSteve Davies
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
2015-04-28Merge "cdr/cdr_odbc.c: Added to record new columns add on CDR 1.8 Asterisk ↵Joshua Colp
Version" into 13
2015-04-27res_pjsip: Fix SEGV on pending-qualify contactsGeorge Joseph
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
2015-04-27cdr/cdr_odbc.c: Added to record new columns add on CDR 1.8 Asterisk VersionRodrigo Ramírez Norambuena
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
2015-04-26channels/chan_skinny: Fix compilation error introduced in f8e21a1adfMatt Jordan
A typo in commit f8e21a1adf resulted in a compilation error in chan_skinny. This patch fixes the typo. ASTERISK-24917 Change-Id: Id7f4ad1fe948eb2408622e80c27936ce4516c33c
2015-04-26Merge "Clang: Fix some more tautological-compare warnings." into 13Matt Jordan
2015-04-24Merge "app_confbridge: Default the template option to a compatible default ↵Matt Jordan
profile." into 13
2015-04-24app_confbridge: Default the template option to a compatible default profile.Kevin Harwell
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
2015-04-24res_pjsip_outbound_authenticator: Increase CSeq on authed requests.Mark Michelson
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
2015-04-24Merge "res_pjsip_t38: Don't crash on authenticated reinvite after originated ↵Matt Jordan
T.38 FAX." into 13
2015-04-24Example script for scan-build (the llvm static analyzer)Diederik de Groot
- Added Pre-amble (Options / Flags / Usage Example / GNU License) - Extended Configurability - Made Executable ASTERISK-24917 Change-Id: I70405fe54e4be7dbfbcb62e291690069b88617a8
2015-04-23Merge "Clang: change previous tautological-compare fixes." into 13Mark Michelson
2015-04-23res_pjsip_t38: Don't crash on authenticated reinvite after originated T.38 FAX.Mark Michelson
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
2015-04-23res_pjsip: Validate that contact uris start with sip: or sips:George Joseph
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
2015-04-23Clang: change previous tautological-compare fixes.Diederik de Groot
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
2015-04-23Merge "Astobj2: Ensure all calls to __adjust_lock pass a valid object." into 13Matt Jordan
2015-04-23res_corosync: Add check for config file before calling corosync apisGeorge Joseph
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
2015-04-22Astobj2: Ensure all calls to __adjust_lock pass a valid object.Corey Farrell
__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
2015-04-22.gitignore: Add .gcno and .gcdaGeorge Joseph
Products of --enable-coverage Change-Id: Ie20882d64b60692e2c941ea8872ab82a86ce77a3
2015-04-22Merge "Fix/Update clang-RAII macro implementation" into 13Matt Jordan
2015-04-22Merge "res_pjsip_mwi: Send unsolicited MWI NOTIFY on startup and when ↵Mark Michelson
endpoint registers." into 13
2015-04-22Clang: Fix some more tautological-compare warnings.Diederik de Groot
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
2015-04-22Merge "Check for ao2_alloc failure in __ast_channel_internal_alloc." into 13Joshua Colp
2015-04-22res_pjsip_mwi: Send unsolicited MWI NOTIFY on startup and when endpoint ↵Joshua Colp
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
2015-04-22Merge "res_pjsip_pubsub: Set the endpoint on SUBSCRIBE dialogs." into 13Joshua Colp
2015-04-21Check for ao2_alloc failure in __ast_channel_internal_alloc.Corey Farrell
Fix a crash that could occur in __ast_channel_internal_alloc if ao2_alloc fails. ASTERISK-24991 #close Change-Id: I4ca89189eb22f907408cb87d0a1645cfe1314a90
2015-04-21res_pjsip_pubsub: Set the endpoint on SUBSCRIBE dialogs.Mark Michelson
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
2015-04-20chan_dahdi/sig_pri: Make post AMI HangupRequest events on PRI channels.Richard Mudgett
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
2015-04-20Merge "pjsip_options: Fix non-qualified contacts showing as unavailable" ↵Joshua Colp
into 13
2015-04-20Fix/Update clang-RAII macro implementationDiederik de Groot
- 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
2015-04-20pjsip_options: Fix format specifier for int64_t rtt.George Joseph
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
2015-04-20Merge "main/pbx: Don't attempt to destroy a previously destroyed ↵Matt Jordan
exten/priority tuple" into 13
2015-04-20Merge "Fix issue with AST_THREADSTORAGE_RAW when DEBUG_THREADLOCALS is ↵Joshua Colp
enabled." into 13
2015-04-19pjsip_options: Fix non-qualified contacts showing as unavailableGeorge Joseph
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
2015-04-19main/pbx: Don't attempt to destroy a previously destroyed exten/priority tupleMatt Jordan
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
2015-04-17res_fax: Fix latent bug exposed by ASTERISK-24841 changes.Richard Mudgett
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
2015-04-17Fix issue with AST_THREADSTORAGE_RAW when DEBUG_THREADLOCALS is enabled.Corey Farrell
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
2015-04-17Merge "Detect potential forwarding loops based on count." into 13Matt Jordan
2015-04-17Detect potential forwarding loops based on count.Mark Michelson
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
2015-04-17pjsip_options: Add qualify_timeout processing and eventingGeorge Joseph
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>
2015-04-17Merge "res_pjsip: Refactor endpt_send_request to include transaction ↵Matt Jordan
timeout" into 13