summaryrefslogtreecommitdiff
path: root/rest-api-templates/res_stasis_http_resource.c.mustache
diff options
context:
space:
mode:
Diffstat (limited to 'rest-api-templates/res_stasis_http_resource.c.mustache')
-rw-r--r--rest-api-templates/res_stasis_http_resource.c.mustache86
1 files changed, 86 insertions, 0 deletions
diff --git a/rest-api-templates/res_stasis_http_resource.c.mustache b/rest-api-templates/res_stasis_http_resource.c.mustache
index b02ab62bd..9b1324c09 100644
--- a/rest-api-templates/res_stasis_http_resource.c.mustache
+++ b/rest-api-templates/res_stasis_http_resource.c.mustache
@@ -47,6 +47,9 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
#include "asterisk/module.h"
#include "stasis_http/resource_{{name}}.h"
+{{#has_events}}
+#include "asterisk/stasis_channels.h"
+{{/has_events}}
{{#apis}}
{{#operations}}
@@ -96,6 +99,89 @@ static void stasis_http_{{c_nickname}}_cb(
{{> rest_handler}}
{{/root_path}}
+{{#has_events}}
+{{#events}}
+{{> event_function_decl}}
+ )
+{
+ RAII_VAR(struct ast_json *, message, NULL, ast_json_unref);
+ RAII_VAR(struct ast_json *, event, NULL, ast_json_unref);
+{{#has_properties}}
+ struct ast_json *validator;
+{{/has_properties}}
+{{#channel}}
+ int ret;
+{{/channel}}
+{{#bridge}}
+{{^channel}}
+ int ret;
+{{/channel}}
+{{/bridge}}
+
+{{#channel}}
+ ast_assert(channel_snapshot != NULL);
+{{/channel}}
+{{#bridge}}
+ ast_assert(bridge_snapshot != NULL);
+{{/bridge}}
+{{#has_properties}}
+ ast_assert(blob != NULL);
+{{#channel}}
+ ast_assert(ast_json_object_get(blob, "channel") == NULL);
+{{/channel}}
+{{#bridge}}
+ ast_assert(ast_json_object_get(blob, "bridge") == NULL);
+{{/bridge}}
+ ast_assert(ast_json_object_get(blob, "type") == NULL);
+{{#properties}}
+
+ validator = ast_json_object_get(blob, "{{name}}");
+ if (validator) {
+ /* do validation? XXX */
+{{#required}}
+ } else {
+ /* fail message generation if the required parameter doesn't exist */
+ return NULL;
+{{/required}}
+ }
+{{/properties}}
+
+ event = ast_json_deep_copy(blob);
+{{/has_properties}}
+{{^has_properties}}
+
+ event = ast_json_object_create();
+{{/has_properties}}
+ if (!event) {
+ return NULL;
+ }
+
+{{#channel}}
+ ret = ast_json_object_set(event,
+ "channel", ast_channel_snapshot_to_json(channel_snapshot));
+ if (ret) {
+ return NULL;
+ }
+
+{{/channel}}
+{{#bridge}}
+ ret = ast_json_object_set(event,
+ "bridge", ast_bridge_snapshot_to_json(bridge_snapshot));
+ if (ret) {
+ return NULL;
+ }
+
+{{/bridge}}
+ message = ast_json_pack("{s: o}", "{{c_id}}", ast_json_ref(event));
+ if (!message) {
+ return NULL;
+ }
+
+ return ast_json_ref(message);
+}
+
+{{/events}}
+{{/has_events}}
static int load_module(void)
{
return stasis_http_add_handler(&{{root_full_name}});