From ce945c3f49ef3783126268b2027f869a4718b772 Mon Sep 17 00:00:00 2001 From: Chris Rienzo Date: Fri, 31 Jan 2014 13:40:39 -0500 Subject: [PATCH] FS-6172 --resolve mod_rayo: fire input-timers-started during prompt lifecycle --- .../mod_rayo/rayo_prompt_component.c | 27 ++++++++++++++++--- 1 file changed, 24 insertions(+), 3 deletions(-) diff --git a/src/mod/event_handlers/mod_rayo/rayo_prompt_component.c b/src/mod/event_handlers/mod_rayo/rayo_prompt_component.c index c35b1cfe3d..9eec428eab 100644 --- a/src/mod/event_handlers/mod_rayo/rayo_prompt_component.c +++ b/src/mod/event_handlers/mod_rayo/rayo_prompt_component.c @@ -64,6 +64,7 @@ struct prompt_component { iks *complete; const char *input_jid; const char *output_jid; + const char *start_timers_request_id; }; #define PROMPT_COMPONENT(x) ((struct prompt_component *)x) @@ -86,6 +87,20 @@ static const char *prompt_component_state_to_string(enum prompt_component_state return "UNKNOWN"; } +/** + * Send input-timers-started event + */ +void rayo_component_send_input_timers_started_event(struct rayo_component *component) +{ + iks *event = iks_new("presence"); + iks *x; + iks_insert_attrib(event, "from", RAYO_JID(component)); + iks_insert_attrib(event, "to", component->client_jid); + x = iks_insert(event, "input-timers-started"); + iks_insert_attrib(x, "xmlns", RAYO_PROMPT_NS); + RAYO_SEND_REPLY(component, component->client_jid, event); +} + /** * Send stop to component */ @@ -131,7 +146,8 @@ static void start_input_timers(struct prompt_component *prompt) iks_insert_attrib(iq, "from", RAYO_JID(prompt)); iks_insert_attrib(iq, "to", prompt->input_jid); iks_insert_attrib(iq, "type", "set"); - iks_insert_attrib_printf(iq, "id", "mod_rayo-prompt-%d", RAYO_SEQ_NEXT(prompt)); + prompt->start_timers_request_id = switch_core_sprintf(RAYO_POOL(prompt), "mod_rayo-prompt-%d", RAYO_SEQ_NEXT(prompt)); + iks_insert_attrib(iq, "id", prompt->start_timers_request_id); x = iks_insert(iq, "start-timers"); iks_insert_attrib(x, "xmlns", RAYO_INPUT_NS); RAYO_SEND_MESSAGE(prompt, prompt->input_jid, iq); @@ -186,6 +202,7 @@ static iks *prompt_component_handle_input_start(struct rayo_actor *prompt, struc case PCS_START_INPUT: PROMPT_COMPONENT(prompt)->input_jid = switch_core_strdup(RAYO_POOL(prompt), msg->from_jid); PROMPT_COMPONENT(prompt)->state = PCS_INPUT; + rayo_component_send_input_timers_started_event(RAYO_COMPONENT(prompt)); break; case PCS_START_INPUT_OUTPUT: PROMPT_COMPONENT(prompt)->input_jid = switch_core_strdup(RAYO_POOL(prompt), msg->from_jid); @@ -235,7 +252,7 @@ static iks *prompt_component_handle_io_start(struct rayo_actor *prompt, struct r } /** - * Handle barge event + * Handle failure to start timers */ static iks *prompt_component_handle_input_start_timers_error(struct rayo_actor *prompt, struct rayo_message *msg, void *data) { @@ -451,11 +468,15 @@ static iks *prompt_component_handle_result(struct rayo_actor *prompt, struct ray iks *iq = msg->payload; /* forward all results, except for internal ones... */ - if (strncmp("mod_rayo-prompt", iks_find_attrib_soft(iq, "id"), 15)) { + const char *id = iks_find_attrib_soft(iq, "id"); + if (strncmp("mod_rayo-prompt", id, 15)) { iks_insert_attrib(iq, "from", RAYO_JID(prompt)); iks_insert_attrib(iq, "to", RAYO_COMPONENT(prompt)->client_jid); RAYO_SEND_REPLY_DUP(prompt, RAYO_COMPONENT(prompt)->client_jid, iq); + } else if (!strcmp(PROMPT_COMPONENT(prompt)->start_timers_request_id, id)) { + rayo_component_send_input_timers_started_event(RAYO_COMPONENT(prompt)); } + return NULL; }