res_stasis_recording: Add a "target_uri" field to recording events.
authorJoshua Colp <jcolp@digium.com>
Thu, 6 Mar 2014 18:20:37 +0000 (18:20 +0000)
committerJoshua Colp <jcolp@digium.com>
Thu, 6 Mar 2014 18:20:37 +0000 (18:20 +0000)
This change adds a target_uri field to the live recording object. It
contains the URI of what is being recorded.

(closes issue ASTERISK-23258)
Reported by: Ben Merrills

Review: https://reviewboard.asterisk.org/r/3299/
........

Merged revisions 410025 from http://svn.asterisk.org/svn/asterisk/branches/12

git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@410027 65c4cc65-6c06-0410-ace0-fbb531ad65f3

CHANGES
include/asterisk/stasis_app_recording.h
res/ari/ari_model_validators.c
res/ari/ari_model_validators.h
res/ari/resource_bridges.c
res/ari/resource_channels.c
res/res_stasis_recording.c
rest-api/api-docs/recordings.json

diff --git a/CHANGES b/CHANGES
index 665d008..91acc9e 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -90,6 +90,15 @@ Debugging
    exist until the next restart of asterisk.
 
 ------------------------------------------------------------------------------
+--- Functionality changes from Asterisk 12.1.0 to Asterisk 12.2.0 ------------
+------------------------------------------------------------------------------
+
+ARI
+------------------
+ * The live recording object on recording events now contains a target_uri
+   field which contains the URI of what is being recorded.
+
+------------------------------------------------------------------------------
 --- Functionality changes from Asterisk 12.0.0 to Asterisk 12.1.0 ------------
 ------------------------------------------------------------------------------
 
index aa90470..f67c204 100644 (file)
@@ -140,6 +140,7 @@ struct stasis_app_recording_options {
        AST_DECLARE_STRING_FIELDS(
                AST_STRING_FIELD(name); /*!< name Name of the recording. */
                AST_STRING_FIELD(format);       /*!< Format to be recorded (wav, gsm, etc.) */
+               AST_STRING_FIELD(target); /*!< URI of what is being recorded */
                );
        /*! Number of seconds of silence before ending the recording. */
        int max_silence_seconds;
index 88cfc26..5c24b9c 100644 (file)
@@ -1026,6 +1026,7 @@ int ast_ari_validate_live_recording(struct ast_json *json)
        int has_format = 0;
        int has_name = 0;
        int has_state = 0;
+       int has_target_uri = 0;
 
        for (iter = ast_json_object_iter(json); iter; iter = ast_json_object_iter_next(json, iter)) {
                if (strcmp("cause", ast_json_object_iter_key(iter)) == 0) {
@@ -1067,6 +1068,16 @@ int ast_ari_validate_live_recording(struct ast_json *json)
                                res = 0;
                        }
                } else
+               if (strcmp("target_uri", ast_json_object_iter_key(iter)) == 0) {
+                       int prop_is_valid;
+                       has_target_uri = 1;
+                       prop_is_valid = ast_ari_validate_string(
+                               ast_json_object_iter_value(iter));
+                       if (!prop_is_valid) {
+                               ast_log(LOG_ERROR, "ARI LiveRecording field target_uri failed validation\n");
+                               res = 0;
+                       }
+               } else
                {
                        ast_log(LOG_ERROR,
                                "ARI LiveRecording has undocumented field %s\n",
@@ -1090,6 +1101,11 @@ int ast_ari_validate_live_recording(struct ast_json *json)
                res = 0;
        }
 
+       if (!has_target_uri) {
+               ast_log(LOG_ERROR, "ARI LiveRecording missing required field target_uri\n");
+               res = 0;
+       }
+
        return res;
 }
 
index c299724..7214a58 100644 (file)
@@ -1146,6 +1146,7 @@ ari_validator ast_ari_validate_application_fn(void);
  * - format: string (required)
  * - name: string (required)
  * - state: string (required)
+ * - target_uri: string (required)
  * StoredRecording
  * - format: string (required)
  * - name: string (required)
index 9f6562b..a8f2c3c 100644 (file)
@@ -462,6 +462,7 @@ void ast_ari_bridges_record(struct ast_variable *headers,
                return;
        }
 
+       ast_string_field_build(options, target, "bridge:%s", args->bridge_id);
        options->max_silence_seconds = args->max_silence_seconds;
        options->max_duration_seconds = args->max_duration_seconds;
        options->terminate_on =
index 97d9bb3..3552070 100644 (file)
@@ -468,6 +468,7 @@ void ast_ari_channels_record(struct ast_variable *headers,
                        response, 500, "Internal Server Error",
                        "Out of memory");
        }
+       ast_string_field_build(options, target, "channel:%s", args->channel_id);
        options->max_silence_seconds = args->max_silence_seconds;
        options->max_duration_seconds = args->max_duration_seconds;
        options->terminate_on =
index 70536dc..080ee7b 100644 (file)
@@ -476,10 +476,11 @@ struct ast_json *stasis_app_recording_to_json(
                return NULL;
        }
 
-       json = ast_json_pack("{s: s, s: s, s: s}",
+       json = ast_json_pack("{s: s, s: s, s: s, s: s}",
                "name", recording->options->name,
                "format", recording->options->format,
-               "state", state_to_string(recording->state));
+               "state", state_to_string(recording->state),
+               "target_uri", recording->options->target);
 
        return ast_json_ref(json);
 }
index 665df4d..e75b2aa 100644 (file)
                                        "type": "string",
                                        "description": "Recording format (wav, gsm, etc.)"
                                },
+                               "target_uri": {
+                                       "required": true,
+                                       "type": "string",
+                                       "description": "URI for the channel or bridge being recorded"
+                               },
                                "state": {
                                        "required": false,
                                        "type": "string",