[asterisk-commits] dlee: branch dlee/stasis-http r382903 - in /team/dlee/stasis-http: apps/ res/...
SVN commits to the Asterisk project
asterisk-commits at lists.digium.com
Tue Mar 12 14:14:29 CDT 2013
Author: dlee
Date: Tue Mar 12 14:14:26 2013
New Revision: 382903
URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=382903
Log:
Implemented hangup
Modified:
team/dlee/stasis-http/apps/app_stasis.c
team/dlee/stasis-http/res/stasis_http/resource_channels.c
Modified: team/dlee/stasis-http/apps/app_stasis.c
URL: http://svnview.digium.com/svn/asterisk/team/dlee/stasis-http/apps/app_stasis.c?view=diff&rev=382903&r1=382902&r2=382903
==============================================================================
--- team/dlee/stasis-http/apps/app_stasis.c (original)
+++ team/dlee/stasis-http/apps/app_stasis.c Tue Mar 12 14:14:26 2013
@@ -616,6 +616,7 @@
dispatch_commands(control, chan);
if (r == 0) {
+ /* Timeout */
continue;
}
Modified: team/dlee/stasis-http/res/stasis_http/resource_channels.c
URL: http://svnview.digium.com/svn/asterisk/team/dlee/stasis-http/res/stasis_http/resource_channels.c?view=diff&rev=382903&r1=382902&r2=382903
==============================================================================
--- team/dlee/stasis-http/res/stasis_http/resource_channels.c (original)
+++ team/dlee/stasis-http/res/stasis_http/resource_channels.c Tue Mar 12 14:14:26 2013
@@ -83,9 +83,117 @@
const char *channel_id)
{
RAII_VAR(struct stasis_app_control *, control, NULL, ao2_cleanup);
+
+ ast_assert(response != NULL);
+
+ control = stasis_app_control_find_by_channel_id(ast_channel_uniqueid(chan));
+ if (control == NULL) {
+ /* Distinguish between 404 and 409 errors */
+ RAII_VAR(struct ast_channel *, chan, NULL, ao2_cleanup);
+ chan = ast_channel_get_by_name(channel_id);
+ if (chan == NULL) {
+ fill_error(response, 404, "Not Found",
+ "Channel not found");
+ return NULL;
+ }
+
+ fill_error(response, 409, "Conflict",
+ "Channel not in Stasis application");
+ return NULL;
+ }
+
+ ao2_ref(control, +1);
+ return control;
+}
+
+void stasis_http_dial(struct ast_variable *headers, struct ast_dial_args *args, struct stasis_http_response *response)
+{
+ ast_log(LOG_ERROR, "TODO: stasis_http_dial\n");
+}
+
+void stasis_http_continue_in_dialplan(struct ast_variable *headers, struct ast_continue_in_dialplan_args *args, struct stasis_http_response *response)
+{
+ RAII_VAR(struct stasis_app_control *, control, NULL, ao2_cleanup);
+
+ ast_assert(response != NULL);
+
+ control = find_control(response, args->channel_id);
+ if (control == NULL) {
+ return;
+ }
+
+ stasis_app_control_continue(control);
+ fill_no_content(response);
+}
+
+void stasis_http_reject_channel(struct ast_variable *headers, struct ast_reject_channel_args *args, struct stasis_http_response *response)
+{
+ ast_log(LOG_ERROR, "TODO: stasis_http_reject_channel\n");
+}
+
+void stasis_http_answer_channel(struct ast_variable *headers,
+ struct ast_answer_channel_args *args,
+ struct stasis_http_response *response)
+{
+ RAII_VAR(struct stasis_app_control *, control, NULL, ao2_cleanup);
+
+ control = find_control(response, args->channel_id);
+ if (control == NULL) {
+ return;
+ }
+
+ if (stasis_app_control_answer(control) != 0) {
+ fill_error(response, 500, "Internal Server Error",
+ "Failed to answer channel");
+ return;
+ }
+
+ fill_no_content(response);
+}
+
+void stasis_http_mute_channel(struct ast_variable *headers, struct ast_mute_channel_args *args, struct stasis_http_response *response)
+{
+ ast_log(LOG_ERROR, "TODO: stasis_http_mute_channel\n");
+}
+void stasis_http_unmute_channel(struct ast_variable *headers, struct ast_unmute_channel_args *args, struct stasis_http_response *response)
+{
+ ast_log(LOG_ERROR, "TODO: stasis_http_unmute_channel\n");
+}
+void stasis_http_record_channel(struct ast_variable *headers, struct ast_record_channel_args *args, struct stasis_http_response *response)
+{
+ ast_log(LOG_ERROR, "TODO: stasis_http_record_channel\n");
+}
+void stasis_http_get_channel(struct ast_variable *headers, struct ast_get_channel_args *args, struct stasis_http_response *response)
+{
+ RAII_VAR(struct stasis_caching_topic *, caching_topic, NULL, ao2_cleanup);
+ RAII_VAR(struct stasis_message *, msg, NULL, ao2_cleanup);
+ struct ast_channel_snapshot *snapshot;
+
+ caching_topic = ast_channel_topic_all_cached();
+ if (!caching_topic) {
+ fill_error(response, 500, "Internal Server Error", "Message bus not initialized");
+ return;
+ }
+ ao2_ref(caching_topic, +1);
+
+ msg = stasis_cache_get(caching_topic, ast_channel_snapshot(), args->channel_id);
+ if (!msg) {
+ fill_error(response, 404, "Not Found", "Channel not found");
+ return;
+ }
+
+ snapshot = stasis_message_data(msg);
+ ast_assert(snapshot != NULL);
+
+ fill_ok(response, ast_channel_snapshot_to_json(snapshot));
+}
+
+void stasis_http_delete_channel(struct ast_variable *headers,
+ struct ast_delete_channel_args *args,
+ struct stasis_http_response *response)
+{
RAII_VAR(struct ast_channel *, chan, NULL, ao2_cleanup);
-
- ast_assert(response != NULL);
+ int r;
chan = ast_channel_get_by_name(channel_id);
if (chan == NULL) {
@@ -94,103 +202,9 @@
return NULL;
}
- control = stasis_app_control_find_by_channel_id(ast_channel_uniqueid(chan));
- if (control == NULL) {
- /* Distinguish between 404 and 409 errors */
- fill_error(response, 409, "Conflict",
- "Channel not in Stasis application");
- return NULL;
- }
-
- ao2_ref(control, +1);
- return control;
-}
-
-void stasis_http_dial(struct ast_variable *headers, struct ast_dial_args *args, struct stasis_http_response *response)
-{
- ast_log(LOG_ERROR, "TODO: stasis_http_dial\n");
-}
-
-void stasis_http_continue_in_dialplan(struct ast_variable *headers, struct ast_continue_in_dialplan_args *args, struct stasis_http_response *response)
-{
- RAII_VAR(struct stasis_app_control *, control, NULL, ao2_cleanup);
-
- ast_assert(response != NULL);
-
- control = find_control(response, args->channel_id);
- if (control == NULL) {
- return;
- }
-
- stasis_app_control_continue(control);
+ ast_softhangup(chan, AST_SOFTHANGUP_EXPLICIT);
+
fill_no_content(response);
-}
-
-void stasis_http_reject_channel(struct ast_variable *headers, struct ast_reject_channel_args *args, struct stasis_http_response *response)
-{
- ast_log(LOG_ERROR, "TODO: stasis_http_reject_channel\n");
-}
-
-void stasis_http_answer_channel(struct ast_variable *headers,
- struct ast_answer_channel_args *args,
- struct stasis_http_response *response)
-{
- RAII_VAR(struct stasis_app_control *, control, NULL, ao2_cleanup);
-
- control = find_control(response, args->channel_id);
- if (control == NULL) {
- return;
- }
-
- if (stasis_app_control_answer(control) != 0) {
- fill_error(response, 500, "Internal Server Error",
- "Failed to answer channel");
- return;
- }
-
- fill_no_content(response);
-}
-
-void stasis_http_mute_channel(struct ast_variable *headers, struct ast_mute_channel_args *args, struct stasis_http_response *response)
-{
- ast_log(LOG_ERROR, "TODO: stasis_http_mute_channel\n");
-}
-void stasis_http_unmute_channel(struct ast_variable *headers, struct ast_unmute_channel_args *args, struct stasis_http_response *response)
-{
- ast_log(LOG_ERROR, "TODO: stasis_http_unmute_channel\n");
-}
-void stasis_http_record_channel(struct ast_variable *headers, struct ast_record_channel_args *args, struct stasis_http_response *response)
-{
- ast_log(LOG_ERROR, "TODO: stasis_http_record_channel\n");
-}
-void stasis_http_get_channel(struct ast_variable *headers, struct ast_get_channel_args *args, struct stasis_http_response *response)
-{
- RAII_VAR(struct stasis_caching_topic *, caching_topic, NULL, ao2_cleanup);
- RAII_VAR(struct stasis_message *, msg, NULL, ao2_cleanup);
- struct ast_channel_snapshot *snapshot;
-
- caching_topic = ast_channel_topic_all_cached();
- if (!caching_topic) {
- fill_error(response, 500, "Internal Server Error", "Message bus not initialized");
- return;
- }
- ao2_ref(caching_topic, +1);
-
- msg = stasis_cache_get(caching_topic, ast_channel_snapshot(), args->channel_id);
- if (!msg) {
- fill_error(response, 404, "Not Found", "Channel not found");
- return;
- }
-
- snapshot = stasis_message_data(msg);
- ast_assert(snapshot != NULL);
-
- fill_ok(response, ast_channel_snapshot_to_json(snapshot));
-}
-
-void stasis_http_delete_channel(struct ast_variable *headers, struct ast_delete_channel_args *args, struct stasis_http_response *response)
-{
- ast_log(LOG_ERROR, "TODO: stasis_http_delete_channel\n");
}
void stasis_http_get_channels(struct ast_variable *headers, struct ast_get_channels_args *args, struct stasis_http_response *response)
More information about the asterisk-commits
mailing list