ARI/AMI: Include language in standard channel snapshot output
authorKevin Harwell <kharwell@digium.com>
Tue, 9 Dec 2014 20:20:27 +0000 (20:20 +0000)
committerKevin Harwell <kharwell@digium.com>
Tue, 9 Dec 2014 20:20:27 +0000 (20:20 +0000)
The channel "language" was already part of a channel snapshot, however is was
not sent out over AMI or ARI. This patch makes it so the channel "language" is
included in the appropriate AMI or ARI events.

ASTERISK-24553 #close
Reported by: Matt Jordan
Review: https://reviewboard.asterisk.org/r/4245/
........

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

Merged revisions 429206 from http://svn.asterisk.org/svn/asterisk/branches/13

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

main/manager_channels.c
main/stasis_channels.c
res/ari/ari_model_validators.c
res/ari/ari_model_validators.h
rest-api/api-docs/channels.json

index d431af2..c12d94e 100644 (file)
@@ -426,6 +426,7 @@ struct ast_str *ast_manager_build_channel_state_string_prefix(
                "%sCallerIDName: %s\r\n"
                "%sConnectedLineNum: %s\r\n"
                "%sConnectedLineName: %s\r\n"
+               "%sLanguage: %s\r\n"
                "%sAccountCode: %s\r\n"
                "%sContext: %s\r\n"
                "%sExten: %s\r\n"
@@ -438,6 +439,7 @@ struct ast_str *ast_manager_build_channel_state_string_prefix(
                prefix, S_OR(snapshot->caller_name, "<unknown>"),
                prefix, S_OR(snapshot->connected_number, "<unknown>"),
                prefix, S_OR(snapshot->connected_name, "<unknown>"),
+               prefix, snapshot->language,
                prefix, snapshot->accountcode,
                prefix, snapshot->context,
                prefix, snapshot->exten,
index 816efdb..11a2941 100644 (file)
@@ -888,7 +888,7 @@ struct ast_json *ast_channel_snapshot_to_json(
                /* Broken up into groups of three for readability */
                "{ s: s, s: s, s: s,"
                "  s: o, s: o, s: s,"
-               "  s: o, s: o }",
+               "  s: o, s: o, s: s }",
                /* First line */
                "id", snapshot->uniqueid,
                "name", snapshot->name,
@@ -902,7 +902,8 @@ struct ast_json *ast_channel_snapshot_to_json(
                /* Third line */
                "dialplan", ast_json_dialplan_cep(
                        snapshot->context, snapshot->exten, snapshot->priority),
-               "creationtime", ast_json_timeval(snapshot->creationtime, NULL));
+               "creationtime", ast_json_timeval(snapshot->creationtime, NULL),
+               "language", snapshot->language);
 
        return ast_json_ref(json_chan);
 }
index 9b5671a..491a4cc 100644 (file)
@@ -786,6 +786,7 @@ int ast_ari_validate_channel(struct ast_json *json)
        int has_creationtime = 0;
        int has_dialplan = 0;
        int has_id = 0;
+       int has_language = 0;
        int has_name = 0;
        int has_state = 0;
 
@@ -850,6 +851,16 @@ int ast_ari_validate_channel(struct ast_json *json)
                                res = 0;
                        }
                } else
+               if (strcmp("language", ast_json_object_iter_key(iter)) == 0) {
+                       int prop_is_valid;
+                       has_language = 1;
+                       prop_is_valid = ast_ari_validate_string(
+                               ast_json_object_iter_value(iter));
+                       if (!prop_is_valid) {
+                               ast_log(LOG_ERROR, "ARI Channel field language failed validation\n");
+                               res = 0;
+                       }
+               } else
                if (strcmp("name", ast_json_object_iter_key(iter)) == 0) {
                        int prop_is_valid;
                        has_name = 1;
@@ -908,6 +919,11 @@ int ast_ari_validate_channel(struct ast_json *json)
                res = 0;
        }
 
+       if (!has_language) {
+               ast_log(LOG_ERROR, "ARI Channel missing required field language\n");
+               res = 0;
+       }
+
        if (!has_name) {
                ast_log(LOG_ERROR, "ARI Channel missing required field name\n");
                res = 0;
index de8547c..947e288 100644 (file)
@@ -1242,6 +1242,7 @@ ari_validator ast_ari_validate_application_fn(void);
  * - creationtime: Date (required)
  * - dialplan: DialplanCEP (required)
  * - id: string (required)
+ * - language: string (required)
  * - name: string (required)
  * - state: string (required)
  * Dialed
index f9c8d86..cd309db 100644 (file)
                                        "required": true,
                                        "type": "Date",
                                        "description": "Timestamp when channel was created"
+                               },
+                               "language": {
+                                       "required": true,
+                                       "type": "string",
+                                       "description": "The default spoken language"
                                }
                        }
                }