summaryrefslogtreecommitdiff
AgeCommit message (Collapse)Author
2016-03-03Merge "SIP diversion: Fix REDIRECTING(reason) value inconsistencies."Joshua Colp
2016-03-03Merge "res_pjsip_send_to_voicemail.c: Allow either quoted or not send_to_vm ↵Joshua Colp
reason."
2016-03-02Merge "res_pjsip_send_to_voicemail.c: Fix off-nominal double channel unref."zuul
2016-03-02Merge "CHAOS: cleanup possible null vars on msg alloc failure"zuul
2016-03-02CHAOS: cleanup possible null vars on msg alloc failureScott Griepentrog
In message.c, if msg_alloc fails to init the string field, vars may be null, so use a null tolerant cleanup. In res_pjsip_messaging.c, if msg_data_create fails, mdata will be null, so use a null tolerant cleanup. ASTERISK-25323 Change-Id: Ic2d55c2c3750d5616e2a05ea92a19c717507ff56
2016-03-02CHAOS: prevent crash on failed strdupScott Griepentrog
This patch avoids crashing on a null pointer if the strdup() allocation fails. ASTERISK-25323 Change-Id: I3f67434820ba53b53663efd6cbb42749f4f6c0f5
2016-03-01SIP diversion: Fix REDIRECTING(reason) value inconsistencies.Richard Mudgett
Previous chan_sip behavior: Before this patch chan_sip would always strip any quotes from an incoming reason and pass that value up as the REDIRECTING(reason). For an outgoing reason value, chan_sip would check the value against known values and quote any it didn't recognize. Incoming 480 response message reason text was just assigned to the REDIRECTING(reason). Previous chan_pjsip behavior: Before this patch chan_pjsip would always pass the incoming reason value up as the REDIRECTING(reason). For an outgoing reason value, chan_pjsip would send the reason value as passed down. With this patch: Both channel drivers match incoming reason values with values documented by REDIRECTING(reason) and values documented by RFC5806 regardless of whether they are quoted or not. RFC5806 values are mapped to the equivalent REDIRECTING(reason) documented value and is set in REDIRECTING(reason). e.g., an incoming RFC5806 'unconditional' value or a quoted string version ('"unconditional"') is converted to REDIRECTING(reason)'s 'cfu' value. The user's dialplan only needs to deal with 'cfu' instead of any of the aliases. The incoming 480 response reason text supported by chan_sip checks for known reason values and if not matched then puts quotes around the reason string and assigns that to REDIRECTING(reason). Both channel drivers send outgoing known REDIRECTING(reason) values as the unquoted RFC5806 equivalent. User custom values are either sent as is or with added quotes if SIP doesn't allow a character within the value as part of a RFC3261 Section 25.1 token. Note that there are still limitations on what characters can be put in a custom user value. e.g., embedding quotes in the middle of the reason string is silly and just going to cause you grief. * Setting a REDIRECTING(reason) value now recognizes RFC5806 aliases. e.g., Setting REDIRECTING(reason) to 'unconditional' is converted to the 'cfu' value. * Added missing malloc() NULL return check in res_pjsip_diversion.c set_redirecting_reason(). * Fixed potential read from a stale pointer in res_pjsip_diversion.c add_diversion_header(). The reason string needed to be copied into the tdata memory pool to ensure that the string would always be available. Otherwise, if the reason string returned by reason_code_to_str() was a user's reason string then the string could be freed later by another thread. Change-Id: Ifba83d23a195a9f64d55b9c681d2e62476b68a87
2016-03-01res_pjsip_send_to_voicemail.c: Allow either quoted or not send_to_vm reason.Richard Mudgett
Change-Id: Id6350b3c7d4ec8df7ec89863566645e2b0f441fd
2016-03-01res_pjsip_send_to_voicemail.c: Fix off-nominal double channel unref.Richard Mudgett
* Fix double unref of other_party channel in off nominal path. * This is unlikely to be a real problem. However, for safety, in handle_incoming_request() keep the datastore ref with the other_party channel ref until we are finished with the other_party channel. Change-Id: I78f22547bf0bb99fb20814ceab75952bd857f821
2016-03-01Merge "chan_sip.c: Fix T.38 issues caused by leaving a bridge."Joshua Colp
2016-03-01Merge "res_pjsip_t38.c: Back out part of an earlier fix attempt."Joshua Colp
2016-03-01Merge "bridge core: Add owed T.38 terminate when channel leaves a bridge."Joshua Colp
2016-03-01Merge "channel api: Create is_t38_active accessor functions."Joshua Colp
2016-03-01Merge "bridge_channel: Don't settle owed events on an optimization."Joshua Colp
2016-03-01Merge "channel.c: Route all control frames to a channel through the same code."Joshua Colp
2016-02-29Merge "res_pjsip_mwi: Turn some NOTICEs and WARNINGs into debug 1s."zuul
2016-02-29chan_sip.c: Fix T.38 issues caused by leaving a bridge.Richard Mudgett
chan_sip could not handle AST_T38_TERMINATED frames being sent to it when the channel left the bridge. The action resulted in overlapping outgoing reINVITEs. The testsuite tests/fax/sip/directmedia_reinvite_t38 was not happy. * Force T.38 to be remembered as locally bridged. Now when the channel leaves the native RTP bridge after T.38, the channel remembers that it has already reINVITEed the media back to Asterisk. It just needs to terminate T.38 when the AST_T38_TERMINATED arrives. * Prevent redundant AST_T38_TERMINATED from causing problems. Redundant AST_T38_TERMINATED frames could cause overlapping outgoing reINVITEs if they happen before the T.38 state changes to disabled. Now the T.38 state is set to disabled before the reINVITE is sent. ASTERISK-25582 #close Change-Id: I53f5c6ce7d90b3f322a942af1a9bcab6d967b7ce
2016-02-29res_pjsip_t38.c: Back out part of an earlier fix attempt.Richard Mudgett
This backs out item 4 of the 4875e5ac32f5ccad51add6a4216947bfb385245d commit. Item 4 added the t38_bye_supplement. Unfortunately, the frame that it puts into the bridge may or may not be processed by the time the bridged peer is kicked out of the bridge. If it is processed then all is well. However, if it is not processed then that channel is stuck in fax mode until it hangs up or maybe if it joins another bridge for T.38 faxing. ASTERISK-25582 Change-Id: Ib20a03ecadf1bf8a0dcadfadf6c2f2e60919a9f7
2016-02-29bridge core: Add owed T.38 terminate when channel leaves a bridge.Richard Mudgett
The channel is now going to get T.38 terminated when it leaves the bridging system and the bridged peers are going to get T.38 terminated as well. ASTERISK-25582 Change-Id: I77a9205979910210e3068e1ddff400dbf35c4ca7
2016-02-29channel api: Create is_t38_active accessor functions.Richard Mudgett
ASTERISK-25582 Change-Id: I69451920b122de7ee18d15bb231c80ea7067a22b
2016-02-29bridge_channel: Don't settle owed events on an optimization.Richard Mudgett
Local channel optimization could cause DTMF digits to be duplicated. Pending DTMF end events would be posted to a bridge when the local channel optimizes out and is replaced by the channel further down the chain. When the real digit ends, the channel would get another DTMF end posted to the bridge. A -- LocalA;1/n -- LocalA;2/n -- LocalB;1 -- LocalB;2 -- B 1) LocalA has the /n flag to prevent optimization. 2) B is sending DTMF to A through the local channel chain. 3) When LocalB optimizes out it can move B to the position of LocalB;1 4) Without this patch, when B swaps with LocalB;1 then LocalB;1 would settle an owed DTMF end to the bridge toward LocalA;2. 5) When B finally ends its DTMF it sends the DTMF end down the chain. 6) Without this patch, A would hear the DTMF digit end when LocalB optimizes out and when B ends the original digit. ASTERISK-25582 Change-Id: I1bbd28b8b399c0fb54985a5747f330a4cd2aa251
2016-02-29channel.c: Route all control frames to a channel through the same code.Richard Mudgett
Frame hooks can conceivably return a control frame in exchange for an audio frame inside ast_write(). Those returned control frames were not handled quite the same as if they were sent to ast_indicate(). Now it doesn't matter if you use ast_write() to send an AST_FRAME_CONTROL to a channel or ast_indicate(). ASTERISK-25582 Change-Id: I5775f41421aca2b510128198e9b827bf9169629b
2016-02-29sorcery: Refactor create, update and delete to better deal with cachesGeorge Joseph
The ast_sorcery_create, update and delete function have been refactored to better deal with caches and errors. The action is now called on all non-caching wizards first. If ANY succeed, the action is called on all caching wizards and the observers are notified. This way we don't put something in the cache (or update or delete) before knowing the action was performed in at least 1 backend and we only call the observers once even if there were multiple writable backends. ast_sorcery_create was never adding to caches in the first place which was preventing contacts from getting added to a memory_cache when they were created. In turn this was causing memory_cache to emit errors if the contact was deleted before being retrieved (which would have populated the cache). ASTERISK-25811 #close Reported-by: Ross Beer Change-Id: Id5596ce691685a79886e57b0865888458d6e7b46
2016-02-27res_pjsip_mwi: Turn some NOTICEs and WARNINGs into debug 1s.George Joseph
There are a few cases where we're emitting notices or warnings for things that really need neither, like a client retrying to subscribe to mwi when they're not conifgured for it. They get a 404 so there's no need for non-debug messages. Change-Id: I05e38a7ff6c2f2521146f4be6a79731b9864e61f
2016-02-27Merge "res_pjsip/config_transport: Allow reloading transports."Joshua Colp
2016-02-27Merge "res_sorcery_memory_cache: Fix SEGV in some CLI commands"Joshua Colp
2016-02-25Merge "chan_sip: Optionally supply fromuser/fromdomain in SIP dial string."zuul
2016-02-25res_sorcery_memory_cache: Fix SEGV in some CLI commandsGeorge Joseph
A few of the CLI commands weren't checking for enough arguments and were SEGVing. Change-Id: Ie6494132ad2fe54b4f014bcdc112a37c36a9b413
2016-02-24Merge "chan_sip.c: Suppress T.38 SDP c= line if addr is the same."zuul
2016-02-24Merge "res_config_sqlite3: Fix crashes when reading peers from sqlite3 tables"zuul
2016-02-24Merge "rtp_engine.h: Remove extraneous semicolons."zuul
2016-02-23Merge "res_pjsip_config_wizard: Add command to export primitive objects"zuul
2016-02-23rtp_engine.h: Remove extraneous semicolons.Richard Mudgett
Change-Id: Ib462633d396fa941379dfef648dcd2245e350084
2016-02-23chan_sip.c: Suppress T.38 SDP c= line if addr is the same.Richard Mudgett
Use the correct comparison function since we only care if the address without the port is the same. Change-Id: Ibf6c485f843a1be6dee58a47b33d81a7a8cbe3b0
2016-02-22Merge "res_pjproject: Add ability to map pjproject log levels to Asterisk ↵Joshua Colp
log levels"
2016-02-22res_config_sqlite3: Fix crashes when reading peers from sqlite3 tablesChristof Lauber
Introduced realloaction of ast_str buf in sqlite3_escape functions in case the returned buffer from threadstorage was actually too small. Change-Id: I3c5eb43aaade93ee457943daddc651781954c445
2016-02-19res_pjsip/config_transport: Allow reloading transports.George Joseph
The 'reload' mechanism actually involves closing the underlying socket and calling the appropriate udp, tcp or tls start functions again. Only outbound_registration, pubsub and session needed work to reset the transport before sending requests to insure that the pjsip transport didn't get pulled out from under them. In my testing, no calls were dropped when a transport was changed for any of the 3 transport types even if ip addresses or ports were changed. To be on the safe side however, a new transport option was added (allow_reload) which defaults to 'no'. Unless it's explicitly set to 'yes' for a transport, changes to that transport will be ignored on a reload of res_pjsip. This should preserve the current behavior. Change-Id: I5e759850e25958117d4c02f62ceb7244d7ec9edf
2016-02-19chan_sip: Optionally supply fromuser/fromdomain in SIP dial string.Walter Doekes
Previously you could add [!dnid] to the SIP dial string to alter the To: header. This change allows you to alter the From header as well. SIP dial string extra options now look like this: [![touser[@todomain]][![fromuser][@fromdomain]]] INCOMPATIBLE CHANGE: If you were using an exclamation mark in your To: header, that is no longer possible. ASTERISK-25803 #close Change-Id: I2457e9ba7a89eb1da22084bab5a4d4328e189db7
2016-02-18Merge "Fix failing threadpool_auto_increment test."zuul
2016-02-18Merge "res_pjsip_outbound_publish: Fix processing 412 response"zuul
2016-02-18res_pjproject: Add ability to map pjproject log levels to Asterisk log levelsGeorge Joseph
Warnings and errors in the pjproject libraries are generally handled by Asterisk. In many cases, Asterisk wouldn't even consider them to be warnings or errors so the messages emitted by pjproject directly are either superfluous or misleading. A good exampe of this are the level-0 errors pjproject emits when it can't open a TCP/TLS socket to a client to send an OPTIONS. We don't consider a failure to qualify a UDP client an "ERROR", why should a TCP/TLS client be treated any differently? A config file for res_pjproject has bene added (pjproject.conf) and a new log_mappings object allows mapping pjproject levels to Asterisk levels (or nothing). The defaults if no pjproject.conf file is found are the same as those that were hard-coded into res_pjproject initially: 0,1 = LOG_ERROR, 2 = LOG_WARNING, 3,4,5 = LOG_DEBUG<level> Change-Id: Iba7bb349c70397586889b8f45b8c3d6c6c8c3898
2016-02-18Merge "app_queue: fix Calculate talktime when is first call answered"Joshua Colp
2016-02-18res_pjsip_outbound_publish: Fix processing 412 responseAlexei Gradinari
When Asterisk receives a 412 (Conditional Request Failed) response it has to recreate publish session. There is bug in res_pjsip_outbound_publish.c The function sip_outbound_publish_client_alloc is called with wrong object while processing 412 (Conditional Request Failed) response. This patch fixes it. ASTERISK-25229 #close Change-Id: I3b62f2debf6bb1e5817cde7b13ea39ef2bf14359
2016-02-18Fix failing threadpool_auto_increment test.Mark Michelson
The threadpool_auto_increment test fails infrequently for a couple of reasons * The threadpool listener was notified of fewer tasks being pushed than were actually pushed * The "was_empty" flag was set to an unexpected value. The problem is that the test pushes three tasks into the threadpool. Test expects the threadpool to essentially gather those three tasks, and then distribute those to the threadpool threads. It also expects that as the tasks are pushed in, the threadpool listener is alerted immediately that the tasks have been pushed. In reality, a task can be distributed to the threadpool threads quicker than expected, meaning that the threadpool has already emptied by the time each subsequent task is pushed. In addition, the internal threadpool queue can be delayed so that the threadpool listener is not alerted that a task has been pushed even after the task has been executed. From the test's point of view, there's no way to be able to predict exactly the order that task execution/listener notifications will occur, and there is no way to know which listener notifications will indicate that the threadpool was previously empty. For this reason, the test has been updated to only check the things it can check. It ensures that all tasks get executed, that the threads go idle after the tasks are executed, and that the listener is told the proper number of tasks that were pushed. Change-Id: I7673120d74adad64ae6894594a606e102d9a1f2c
2016-02-17cel.c: Fix mismatch in ast_cel_track_event() return type.Richard Mudgett
The return type of ast_cel_track_event() is not large enough to return all 64 potential bits of the event enable mask. Fortunately, the defined CEL events do not really need all 64 bits and the return value is only used to determine if the requested CEL event is enabled. * Made the ast_cel_track_event() return 0 or 1 only so the return value can fit inside an int type instead of zero or a truncated 64 bit non-zero value. Change-Id: I783d932320db11a95c7bf7636a72b6fe2566904c
2016-02-17app_queue: fix Calculate talktime when is first call answeredRodrigo Ramírez Norambuena
Fix calculate of average time for talktime is wrong when is completed the first call beacuse the time for talked would be that call. ASTERISK-25800 #close Change-Id: I94f79028935913cd9174b090b52bb300b91b9492
2016-02-16res_odbc: Fix exports.in for missing symbolsGeorge Joseph
res_odbc.exports.in was missing a few symbols. Changed to wildcards. Change-Id: Ieadd76df24e43ea92577f651d478a0f7b742c30c
2016-02-16res_statsd: Fix exports.in for missing symbolsGeorge Joseph
res_statsd.export.in was missing the _va variations of the log functions causing Asterisk to crash in res_pjsip if OPTIONAL_API wasn't enabled. ASTERISK-25727 #close Reported-by: Gergely Dömsödi Change-Id: I395729f9f51bdd33c5ca757f5f96ebedad74077b
2016-02-15res_pjsip_config_wizard: Add command to export primitive objectsGeorge Joseph
A new command (pjsip export config_wizard primitives) has been added that will export all the pjsip objects it created to the console or a file suitable for reuse in a pjsip.conf file. ASTERISK-24919 #close Reported-by: Ray Crumrine Change-Id: Ica2a5f494244b4f8345b0437b16d06aa0484452b
2016-02-15res_pjsip_caller_id: Fix segfault when replacing rpid or pai headerGeorge Joseph
If the PJSIP_HEADER dialplan function adds a PAI or RPID header and send_rpid or send_pai is set, res_pjsip_caller_id attemps to retrieve, parse and modify the header added by the dialplan function. Since the header added by the dialplan function is generic string, there are no virtual functions to parse the uri and we get a segfault when we try. Since the modify, was really only an overwrite, we now just delete the old header if it was type PJSIP_H_OTHER and recreate it. This raises a question for another time though: What should happen with duplicate headers? Right now res_pjsip_header_funcs doesn't check for dups so if it's session supplement is loaded after res_pjsip_caller_id's (or any other module that adds headers), there'll be dups in the message. ASTERISK-25337 #close Change-Id: I5e296b52d30f106b822c0eb27c4c2b0e0f71c7fa