diff --git a/include/asterisk/stasis_http.h b/include/asterisk/stasis_http.h index f81a206e67..f20a901064 100644 --- a/include/asterisk/stasis_http.h +++ b/include/asterisk/stasis_http.h @@ -166,7 +166,7 @@ void stasis_http_response_no_content(struct stasis_http_response *response); * \brief Fill in a Created (201) \a stasis_http_response. */ void stasis_http_response_created(struct stasis_http_response *response, - const char *url); + const char *url, struct ast_json *message); /*! * \brief Fill in \a response with a 500 message for allocation failures. diff --git a/res/res_stasis_http.c b/res/res_stasis_http.c index 63e2601e87..a4ea30567a 100644 --- a/res/res_stasis_http.c +++ b/res/res_stasis_http.c @@ -311,7 +311,7 @@ void stasis_http_response_error(struct stasis_http_response *response, void stasis_http_response_ok(struct stasis_http_response *response, struct ast_json *message) { - response->message = message; + response->message = ast_json_ref(message); response->response_code = 200; response->response_text = "OK"; } @@ -331,9 +331,9 @@ void stasis_http_response_alloc_failed(struct stasis_http_response *response) } void stasis_http_response_created(struct stasis_http_response *response, - const char *url) + const char *url, struct ast_json *message) { - response->message = ast_json_null(); + response->message = ast_json_ref(message); response->response_code = 201; response->response_text = "Created"; ast_str_append(&response->headers, 0, "Location: %s\r\n", url); diff --git a/res/res_stasis_playback.c b/res/res_stasis_playback.c index 842fc0e1d0..a5f7303d69 100644 --- a/res/res_stasis_playback.c +++ b/res/res_stasis_playback.c @@ -266,7 +266,7 @@ struct stasis_app_playback *stasis_app_control_play_uri( stasis_app_control_get_channel_id(control), uri); playback = ao2_alloc(sizeof(*playback), playback_dtor); - if (!playback || ast_string_field_init(playback, 128) ){ + if (!playback || ast_string_field_init(playback, 128)) { return NULL; } @@ -330,7 +330,6 @@ struct ast_json *stasis_app_playback_to_json( return NULL; } - json = ast_json_pack("{s: s, s: s, s: s, s: s}", "id", playback->id, "media_uri", playback->media, diff --git a/res/stasis_http/resource_channels.c b/res/stasis_http/resource_channels.c index 0b9c2a61a1..7dfb0c0a4e 100644 --- a/res/stasis_http/resource_channels.c +++ b/res/stasis_http/resource_channels.c @@ -145,6 +145,7 @@ void stasis_http_play_on_channel(struct ast_variable *headers, RAII_VAR(struct ast_channel_snapshot *, snapshot, NULL, ao2_cleanup); RAII_VAR(struct stasis_app_playback *, playback, NULL, ao2_cleanup); RAII_VAR(char *, playback_url, NULL, ast_free); + RAII_VAR(struct ast_json *, json, NULL, ast_json_unref); const char *language; ast_assert(response != NULL); @@ -197,7 +198,15 @@ void stasis_http_play_on_channel(struct ast_variable *headers, return; } - stasis_http_response_created(response, playback_url); + json = stasis_app_playback_to_json(playback); + if (!json) { + stasis_http_response_error( + response, 500, "Internal Server Error", + "Out of memory"); + return; + } + + stasis_http_response_created(response, playback_url, json); } void stasis_http_record_channel(struct ast_variable *headers, struct ast_record_channel_args *args, struct stasis_http_response *response) {