Commit Graph

5880 Commits

Author SHA1 Message Date
George Joseph 4d6e271419 Merge "astobj2: Comment on OBJ_NOLOCK in ao2_container_clone." into 13 2018-10-04 07:25:11 -05:00
George Joseph 422b4bb112 Merge "http.c: Reload TLS even if http.conf hasn't changed" into 13 2018-10-04 07:24:02 -05:00
George Joseph 6f69e5adf2 Merge "core/frame: Fix ast_frdup() and ast_frisolate() for empty text frames" into 13 2018-10-03 13:55:40 -05:00
Corey Farrell 2cec36fcc3 astobj2: Comment on OBJ_NOLOCK in ao2_container_clone.
The test for OBJ_NOLOCK looks wrong but it isn't.  Add comments to
prevent confusion.

Change-Id: I9662b82eb39e7627a1f1944fd18f967a2b987344
2018-10-03 12:02:35 -04:00
George Joseph 4b812569c8 Merge "core: Disable astobj2 locking for some common objects." into 13 2018-10-03 10:16:34 -05:00
Sean Bright c27da79ede http.c: Reload TLS even if http.conf hasn't changed
There is currently no way to indicate to Asterisk that TLS certificates
and/or keys have been updated other than by modifying http.conf or
restarting Asterisk.

There is already code in main/tcptls.c that determines if a reload is
actually necessary based on the hashes of the certicate and dependent
files, so this change merely gives us a way to request a reload without
explicitly modifying http.conf.

Change-Id: Ie795420dcc7eb3d91336820688a29adbcc321276
2018-10-03 09:34:30 -04:00
Corey Farrell 4ca65bdf17 core: Disable astobj2 locking for some common objects.
* ACO options
* Indications
* Module loader ref_debug object
* Media index info and variants
* xmldoc items

These allocation locations were identified using reflocks.py on the
master branch.

Change-Id: Ie999b9941760be3d1946cdb6e30cb85fd97504d8
2018-10-03 04:24:10 -04:00
Corey Farrell e3c18f073b loader: Fix result of module reload error.
When a module reload fails we never set AST_MODULE_RELOAD_ERROR.  This
caused reload failures to incorrectly report 'No module found'.

Change-Id: I5f3953e0f7d135e53ec797f24c97ee3f73f232e7
2018-10-02 13:14:43 -05:00
neutrino88 3d03fca94a core/frame: Fix ast_frdup() and ast_frisolate() for empty text frames
If a channel creates an AST_TEXT_FRAME with datalen == 0, the ast_frdup()
and ast_frisolate() functions could create a clone frame with an invalid
data.ptr which would cause a crash.  The proposed fix is to make sure that
for such empty text frames, ast_frdup() and ast_frisolate() return cloned
text frames with a valid data.ptr.

ASTERISK-28076
Reported by: Emmanuel BUU
Tested by: Emmanuel BUU

Change-Id: Ib882dd028598f13c4c233edbfdd7e54ad44a68e9
2018-10-02 11:24:10 -05:00
Joshua Colp 35338370cc Merge "astobj2: Reduce memory overhead." into 13 2018-10-01 09:07:07 -05:00
Corey Farrell 95dc10eb72 lock: Improve performance of DEBUG_THREADS.
Add a volatile flag to lock tracking structures so we only need to use
the global lock when first initializing tracking.

Additionally add support for DEBUG_THREADS_LOOSE_ABI.  This is used by
astobj2.c to eliminate storage for tracking fields when DEBUG_THREADS is
not defined.

Change-Id: Iabd650908901843e9fff47ef1c539f0e1b8cb13b
2018-09-28 13:45:34 -05:00
George Joseph 628dc8d63c Merge "config.c: Cleanup AST_INCLUDE_GLOB" into 13 2018-09-28 13:16:23 -05:00
Corey Farrell 73fa382227 astobj2: Reduce memory overhead.
Reduce options to 2-bit field, magic to 30 bit field.  Move ref_counter
next to options the fields will pack.

This reduces memory overhead for every ao2 object by 8 bytes on x86_64.

Change-Id: Idc1baabb35ec3b3d8de463c4fa3011eaf7fcafb5
2018-09-27 19:48:37 -04:00
Sean Bright acfc06cfc0 config.c: Cleanup AST_INCLUDE_GLOB
* In main/config.c, AST_INCLUDE_GLOB is fixed to '1' making the #ifdefs
  pointless.

* In utils/extconf.c, AST_INCLUDE_GLOB is never defined so there is a
  lot of dead code.

Change-Id: I1bad1a46d7466ddf90d52cc724e997195495226c
2018-09-27 16:05:21 -04:00
Corey Farrell 1f5c2a2d0d astobj2: Fix shutdown order.
When REF_DEBUG and AO2_DEBUG are both enabled we closed the refs log
before we shutdown astobj2_container.  This caused the AO2_DEBUG
container registration container to be reported as a leak.

Change-Id: If9111c4c21c68064b22c546d5d7a41fac430430e
2018-09-27 05:42:22 -05:00
George Joseph 4ddca53164 Merge "jansson: Backport fixes to bundled, use json_vsprintf if available." into 13 2018-09-26 11:09:23 -05:00
George Joseph 63c02eeba4 Merge "rtp_engine: rtcp_report_to_json can overflow the ssrc integer value" into 13 2018-09-26 08:02:37 -05:00
Corey Farrell 9c35f80adf jansson: Backport fixes to bundled, use json_vsprintf if available.
Use json_vsprintf from versions which contain fix for va_copy leak.

Apply fixes from jansson master:
* va_copy leak fix.
* Avoid potential invalid memory read in json_pack.
* Rename variable that shadowed another.

Change-Id: I7522e462d2a52f53010ffa1e7d705c666ec35539
2018-09-24 18:55:59 -04:00
George Joseph a509bb729a Merge "app_voicemail: Cleanup mailbox topic and cache" into 13 2018-09-24 09:30:32 -05:00
George Joseph 984af7a1e8 Merge "stasis: Add function to delete topic from pool" into 13 2018-09-24 09:27:45 -05:00
Kevin Harwell 286cf80bec rtp_engine: rtcp_report_to_json can overflow the ssrc integer value
When writing an RTCP report to json the code attempts to pack the "ssrc" and
"source_ssrc" unsigned integer values as a signed int value type. This of course
means if the ssrc's unsigned value is greater than that which can fit into a
signed integer value it gets converted to a negative number. Subsequently, the
negative value goes out in the json report.

This patch now packs the value as a json_int_t, which is the widest integer type
available on a given system. This should make it so the value no longer
overflows.

Note, this was caught by two failing tests hep/rtcp-receiver/ and
hep/rtcp-sender.

Change-Id: I2af275286ee5e795b79f0c3d450d9e4b28e958b0
2018-09-21 17:06:59 -05:00
George Joseph 1948fbe439 channel.c: Address stack overflow in does_id_conflict()
does_id_conflict() was passing a pointer to an int to a callback
that expected a pointer to a size_t.

Found by the Address Sanitizer.

Change-Id: I0ff542067eef63a14a60301654d65d34fe2ad503
2018-09-21 14:23:34 -06:00
George Joseph a741cd4f11 Merge "stasis: No need to keep a stasis type ref in a stasis msg or cache object." into 13 2018-09-20 13:09:07 -05:00
George Joseph 7bdf1d3c67 app_voicemail: Cleanup mailbox topic and cache
app_voicemail wasn't properly cleaning up the stasis cache or the
mwi topic pool when the module was unloaded or when a user was
deleted as a result of a reload.  This resulted in leaks in both
areas.

* app_voicemail now calls ast_delete_mwi_state_full when it frees
  a user structure and ast_delete_mwi_state_full in turn now calls
  the new stasis_topic_pool_delete_topic function to clear the topic
  from the pool.

Change-Id: Ide23144a4a810e7e0faad5a8e988d15947965df8
2018-09-20 12:06:26 -06:00
George Joseph 1d141112b5 stasis: Add function to delete topic from pool
There's been a long standing leak when using topic pools.  The
topics in the pool get cleaned up when the last pool reference is
released but you can't remove a topic specifically.  If you reloaded
app_voicemail for instance, and mailboxes went away, their topics
were left in the pool.

* Added stasis_topic_pool_delete_topic() so modules can clean up
  topics from pools.
* Registered the topic pool containers so it can be examined from
  the CLI when AO2_DEBUG is enabled.  They'll be named
  "<topic_pool_name>-pool".

Change-Id: Ib7957951ee5c9b9b4482af7b9b4349112d62bc25
2018-09-20 08:41:15 -06:00
George Joseph 94a4eea7f6 stasis_cache: Stop caching stasis subscription change messages
Since app_voicemail no longer uses the cache to maintain its state
there is no longer a need to cache these messages.

ASTERISK-27121

Change-Id: I321c708505f5ad8d00e1b0afc4c27dc2ac12ecb4
2018-09-20 07:30:24 -05:00
Richard Mudgett ac18bb23a9 stasis: No need to keep a stasis type ref in a stasis msg or cache object.
Stasis message types are global ao2 objects and we make stasis messages
and cache entries hold references to them.  Since there are currently
situations where cache objects are never deleted, the reference count on
the types can exceed 100000 and generate a FRACK assertion message.  The
stasis message cache could conceivably also have that many messages
legitimately on large systems.

The only down side to not holding the message type ref in the stasis
message is it only makes a crash either at shutdown or when manually
unloading a busy module slightly more likely.  However, this is more
exposing a pre-existing stasis shutdown ordering issue than a problem with
not holding a message type ref in stasis messages.

* Made stasis messages and cache entries no longer hold a ref to the
message type.

Change-Id: Ibaa28efa8d8ad3836f0c65957192424c7f561707
2018-09-19 12:26:54 -05:00
Richard Mudgett 2f84ff9728 stasis_message.c: Don't create immutable stasis objects with locks.
* Create the stasis message object without a lock as it is immutable.
* Create the stasis message type object without a lock as it is immutable.
* Creating the stasis message type could crash if the passed in type name
is NULL and REF_DEBUG is enabled.  Added missing NULL check when passing
the ao2 object tag string.

Change-Id: I28763c58bb9f0b427c11971d0103bf94055e7b32
2018-09-18 12:39:23 -05:00
Joshua Colp 3fd1216083 Merge "stasis_cache: Prune stasis_subscription_change messages" into 13 2018-09-07 05:40:24 -05:00
George Joseph 87550706c8 stasis_cache: Prune stasis_subscription_change messages
The stasis cache provides a way to reconstruct the current state
of topic subscribers.  Unfortunately, since every subscribe and
unsubscribe is cached, the cache continues to grow unabated while
asterisk is running.  This patch removes subscribe messages from
the cache when the corresponding unsubscribe is received.

This patch also registers the cache containers with ao2 so that if
AO2_DEBUG is turned on, you can list the container and get its
stats from the CLI.

ASTERISK-27121

Change-Id: I3d18905e477f3721815da91f30da8d3fbb2d4f56
2018-09-05 12:50:42 -06:00
Richard Mudgett 4e20fe9f06 http.c: Give HTTP error response when received lines are too long.
Added a check when we receive a HTTP request line or header line that is
too long.  We now return an error response to the sender because we are
not able to process the request.

Change-Id: I6df2705435fd7dde4d5d3bdf7acec859cfb7c12d
2018-08-30 16:40:31 -05:00
Joshua Colp c2cafddaf3 Merge "AMI: be less verbose when adding HTTP headers to AMI/HTTP messages." into 13 2018-08-24 10:12:29 -05:00
Jaco Kroon b528715fa0 AMI: be less verbose when adding HTTP headers to AMI/HTTP messages.
All HTTP/AMI message headers are being sent to the verbose channel.
There are multiple places this is happening.  Consolidate the loop into
a function.  Drop the debug/verbose message.

Convert to using ast_asprintf to perform the length calculation, memory
allocation and snprintf all in one step.

Change-Id: Ic45e673fde05bd544be95ad5cdbc69518207c1a1
2018-08-23 12:19:46 -05:00
Richard Mudgett 9b9dee2d2c AMI: Remove docs for nonexistent AMI ContactStatus event headers
Change-Id: I5736965c64c44338f7330e85a24bb46818607f19
2018-08-20 12:31:58 -05:00
Joshua Colp c22efd9990 Merge "stasis: Reduce calculation of stasis message type hash." into 13 2018-08-08 06:04:14 -05:00
Joshua Colp 856b6d1954 stasis: Reduce calculation of stasis message type hash.
When the stasis cache is used a hash is calculated for
retrieving or inserting messages. This change calculates
a hash when the message type is initialized that is then
used each time needed. This ensures that the hash is
calculated only once for the message type.

Change-Id: I4fe6bfdafb55bf5c322dd313fbd8c32cce73ef37
2018-08-06 13:05:56 -03:00
Salah Ahmed 4aa91c6f11 dialplan_functions: wrong srtp use status report of a dialplan function
If asterisk offer an endpoint with SRTP and that endpoint respond
with non srtp, in that case channel(rtp,secure,audio) reply wrong
status.

Why delete flag AST_SRTP_CRYPTO_OFFER_OK while check identical remote_key:
Currently this flag has being set redundantly. In either case identical
or different remote_key this flag has being set. So if we
don't set it while we receive identical remote_key or non SRTP SDP
response then we can take decision of srtp use by using that flag.

ASTERISK-27999

Change-Id: I29dc2843cf4e5ae2604301cb4ff258f1822dc2d7
2018-08-02 16:58:47 -05:00
Jenkins2 111cde6026 Merge "devicestate: Don't create topic when change isn't cached." into 13 2018-07-27 06:09:18 -05:00
Kevin Harwell 059e1e3bc8 json.c: improve ast_json_to_ast_variables performance
When converting from a json object to an ast variables list the conversion
algorithm was doing a complete traversal of the entire variables list for
every item appended from the json structure.

This patch makes it so the list is no longer traversed for each new ast
variable being appended.

Change-Id: I8bf496a1fc449485150d6db36bfc0354934a3977
2018-07-25 15:33:22 -05:00
Joshua Colp dd1b4b38cf devicestate: Don't create topic when change isn't cached.
When publishing a device state the change can be marked as being
cachable or not. If it is not cached the change is just published
to all interested and not stored away for later query. This was not
fully taken into account when publishing in stasis. The act of
publishing would create a topic for the device even if it may be
ephemeral.

This change makes it so messages which are not cached won't create
a topic for the device. If a topic does already exist it will be
published to but otherwise the change will only be published to
the device state all topic.

ASTERISK-27591

Change-Id: I18da0e8cbb18e79602e731020c46ba4101e59f0a
2018-07-25 19:20:35 +00:00
George Joseph 487951735e Merge "sched: Make ABI compatible between dev mode and non-dev mode." into 13 2018-07-23 13:32:10 -05:00
Joshua Colp 1fbe1b1eff sched: Make ABI compatible between dev mode and non-dev mode.
In the past there was an assertion in the ast_sched_del function
and in order to ensure it was useful the calling function name,
line number, and filename had to be passed in. This cause the ABI
to be different between dev mode and non-dev mode.

This assertion is no longer present so the special logic can be
removed to make it the same between them both.

Change-Id: Icbc69c801e357d7004efc5cf2ab936d9b83b6ab8
2018-07-22 15:41:03 +00:00
George Joseph 58c7b64ed6 xmldoc.c: Fix dump of xml document
The "xmldoc dump" cli command was simply concatenating xml documents
into the output file.  The resulting file had multiple "xml"
processing instructions and multiple root elements which is illegal.
Normally this isn't an issue because Asterisk has only 1 main xml
documentation file but codec_opus has its own file so if it's
downloaded and you do "xmldoc dump", the result is invalid.

* Added 2 new functions to xml.c:
    ast_xml_copy_node_list creates a copy of a list of children.
    ast_xml_add_child_list adds a list to an existing list.

* Modified handle_dump_docs to create a new output document and
  add to it the children from each input file.  It then dumps the
  new document to the output file.

Change-Id: I3f182d38c75776aee76413dadd2d489d54a85c07
2018-07-20 05:20:25 -06:00
Chris-Savinovich ae5ba776ae stasis: Improve message type "Use of before/init after destruction"
Fixes issue where error msg
"Use of before/init after destruction"
was being printed on disabled messages
in dev mode.  With this
fix if message is disabled
a warning will print.

ASTERISK-25548
Change-Id: Ie0d866d1cbc60c16dbef08bc65e99505c3c1adfa
2018-07-18 13:11:42 -05:00
Nick French 6a0847cfc6 SRTP: Lower SDES key lifetime minimum to 2^20
SRTP SDES key lifetime support was added in ASTERISK_17899.

In that addition, the minimum key lifetime to be accepted was
set at the 10 hours @ 20ms/packet = 1800000 packets.

The firmware in the obi1xx ATA uses a hardcoded lifetime of
2^20 packets.

Lower the limit to 2^20 to support a wider field of clients.

ASTERISK-27967 #close

Change-Id: I81a0703c595a0c9101dfdf02300149a3cc39bf94
2018-07-17 14:45:56 -05:00
George Joseph 7666b80378 test.c: Make output jUnit compatible
Separate "name" into "classname" and "name".
Use '.' for classname separator instead of '/'.
Prefix reserved words with '_'.
Wrap output with a top-level "testsuites" element.

Change-Id: Iec1a985eba1c478e5c1d65d5dfd95cb708442099
2018-07-06 11:53:09 -06:00
Jenkins2 567e306f8e Merge "main/cdr.c: Alleviate CDR deadlock" into 13 2018-07-02 06:40:22 -05:00
Matthew Fredrickson 33f4716d13 main/cdr.c: Alleviate CDR deadlock
There is a rare case (do to the infrequent timing involved) where
CDR submission threads in batch mode can deadlock with a currently
running CDR batch process.  This patch should remove the need for
holding the lock in the scheduler and should clean a few code
paths up that inconsistently submitted new work to the CDR batch
processor.

ASTERISK-27909

Change-Id: I6333e865db7c593c102c2fd948cecdb96481974d
Reported-by: Denis Lebedev
2018-06-29 09:46:17 -06:00
Richard Mudgett d0e4cbfc51 AMI SendText action: Fix to use correct thread to send the text.
The AMI action was directly sending the text to the channel driver.
However, this makes two threads attempt to handle media and runs afowl of
CHECK_BLOCKING.

* Queue a read action to make the channel's media handling thread actually
send the text message.  This changes the AMI actions success/fail response
to just mean the text was queued to be sent not that the text actually got
sent.  The channel driver may not even support sending text messages.

ASTERISK-27943

Change-Id: I9dce343d8fa634ba5a416a1326d8a6340f98c379
2018-06-28 13:15:46 -05:00
Jenkins2 a5754e7904 Merge "res_pjsip_messaging: Allow application/* for in-dialog MESSAGEs" into 13 2018-06-28 06:02:37 -05:00