summaryrefslogtreecommitdiff
path: root/res
diff options
context:
space:
mode:
authorKinsey Moore <kmoore@digium.com>2014-08-06 12:55:28 +0000
committerKinsey Moore <kmoore@digium.com>2014-08-06 12:55:28 +0000
commitf1036f40dc22c4d4b30cc2ab36199cd749ead9c5 (patch)
tree4fd17b406cb14b5eee97cf0be44382b792ccbff9 /res
parentac5c75b45d9d7fe047ccd9d1d094cb9d30df8b51 (diff)
Stasis: Allow message types to be blocked
This introduces stasis.conf and a mechanism to prevent certain message types from being published. Internally, this works by preventing the chosen message types from being created which ensures that those message types can never be published. This patch also adjusts message publishers such that message payloads are not created if the related message type is not available. ASTERISK-23943 #close Review: https://reviewboard.asterisk.org/r/3823/ git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@420124 65c4cc65-6c06-0410-ace0-fbb531ad65f3
Diffstat (limited to 'res')
-rw-r--r--res/parking/parking_manager.c8
-rw-r--r--res/res_corosync.c4
-rw-r--r--res/res_stasis.c4
-rw-r--r--res/res_stasis_snoop.c7
-rw-r--r--res/res_stasis_test.c4
-rw-r--r--res/res_stun_monitor.c7
6 files changed, 29 insertions, 5 deletions
diff --git a/res/parking/parking_manager.c b/res/parking/parking_manager.c
index 20f8c4e1c..73b5ff495 100644
--- a/res/parking/parking_manager.c
+++ b/res/parking/parking_manager.c
@@ -579,6 +579,10 @@ void publish_parked_call_failure(struct ast_channel *parkee)
RAII_VAR(struct ast_parked_call_payload *, payload, NULL, ao2_cleanup);
RAII_VAR(struct stasis_message *, msg, NULL, ao2_cleanup);
+ if (!ast_parked_call_type()) {
+ return;
+ }
+
payload = parked_call_payload_from_failure(parkee);
if (!payload) {
return;
@@ -597,6 +601,10 @@ void publish_parked_call(struct parked_user *pu, enum ast_parked_call_event_type
RAII_VAR(struct ast_parked_call_payload *, payload, NULL, ao2_cleanup);
RAII_VAR(struct stasis_message *, msg, NULL, ao2_cleanup);
+ if (!ast_parked_call_type()) {
+ return;
+ }
+
payload = parked_call_payload_from_parked_user(pu, event_type);
if (!payload) {
return;
diff --git a/res/res_corosync.c b/res/res_corosync.c
index 1df9ed841..58290c7cc 100644
--- a/res/res_corosync.c
+++ b/res/res_corosync.c
@@ -117,6 +117,10 @@ static void publish_corosync_ping_to_stasis(struct ast_event *event)
ast_assert(ast_event_get_type(event) == AST_EVENT_PING);
ast_assert(event != NULL);
+ if (!corosync_ping_message_type()) {
+ return;
+ }
+
payload = ao2_t_alloc(sizeof(*payload), corosync_ping_payload_dtor, "Create ping payload");
if (!payload) {
return;
diff --git a/res/res_stasis.c b/res/res_stasis.c
index 7d5373153..7b5d16f1a 100644
--- a/res/res_stasis.c
+++ b/res/res_stasis.c
@@ -1357,6 +1357,10 @@ enum stasis_app_user_event_res stasis_app_user_event(const char *app_name,
return STASIS_APP_USER_APP_NOT_FOUND;
}
+ if (!ast_multi_user_event_type()) {
+ return res;
+ }
+
blob = json_variables;
if (!blob) {
blob = ast_json_pack("{}");
diff --git a/res/res_stasis_snoop.c b/res/res_stasis_snoop.c
index af31046fc..72f851923 100644
--- a/res/res_stasis_snoop.c
+++ b/res/res_stasis_snoop.c
@@ -111,9 +111,10 @@ static void publish_chanspy_message(struct stasis_app_snoop *snoop, int start)
RAII_VAR(struct stasis_message *, message, NULL, ao2_cleanup);
RAII_VAR(struct ast_channel_snapshot *, snoop_snapshot, NULL, ao2_cleanup);
RAII_VAR(struct ast_channel_snapshot *, spyee_snapshot, NULL, ao2_cleanup);
+ struct stasis_message_type *type = start ? ast_channel_chanspy_start_type(): ast_channel_chanspy_stop_type();
blob = ast_json_null();
- if (!blob) {
+ if (!blob || !type) {
return;
}
@@ -133,9 +134,7 @@ static void publish_chanspy_message(struct stasis_app_snoop *snoop, int start)
ast_multi_channel_blob_add_channel(payload, "spyee_channel", spyee_snapshot);
}
- message = stasis_message_create(
- start ? ast_channel_chanspy_start_type(): ast_channel_chanspy_stop_type(),
- payload);
+ message = stasis_message_create(type, payload);
if (!message) {
return;
}
diff --git a/res/res_stasis_test.c b/res/res_stasis_test.c
index cec8e20c6..9860b0ebd 100644
--- a/res/res_stasis_test.c
+++ b/res/res_stasis_test.c
@@ -251,6 +251,10 @@ struct stasis_message *stasis_test_message_create(void)
{
RAII_VAR(void *, data, NULL, ao2_cleanup);
+ if (!stasis_test_message_type()) {
+ return NULL;
+ }
+
/* We just need the unique pointer; don't care what's in it */
data = ao2_alloc(1, NULL);
if (!data) {
diff --git a/res/res_stun_monitor.c b/res/res_stun_monitor.c
index 1bda4b9ff..4cdc2fdca 100644
--- a/res/res_stun_monitor.c
+++ b/res/res_stun_monitor.c
@@ -157,10 +157,15 @@ static int stun_monitor_request(const void *blarg)
if (args.external_addr_known) {
RAII_VAR(struct stasis_message *, msg, NULL, ao2_cleanup);
RAII_VAR(struct ast_json_payload *, json_payload, NULL, ao2_cleanup);
- RAII_VAR(struct ast_json *, json_object, ast_json_object_create(), ast_json_unref);
+ RAII_VAR(struct ast_json *, json_object, NULL, ast_json_unref);
+
+ if (!ast_network_change_type()) {
+ goto publish_failure;
+ }
/* This json_object doesn't actually contain anything yet. We have to reference something
* for stasis, and this is useful for if we want to ever add data for any reason. */
+ json_object = ast_json_object_create();
if (!json_object) {
goto publish_failure;
}