event socket / ESL improvements

git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@12228 d0543943-73ff-0310-b7d9-9358b9ac24b2
This commit is contained in:
Anthony Minessale 2009-02-21 23:19:58 +00:00
parent c7d6662d08
commit 99026e02e7
18 changed files with 156 additions and 57 deletions

View File

@ -786,12 +786,11 @@ ESL_DECLARE(esl_status_t) esl_recv_event(esl_handle_t *handle, esl_event_t **sav
while(handle->connected) { while(handle->connected) {
rrval = recv(handle->sock, c, 1, 0); rrval = recv(handle->sock, c, 1, 0);
if (rrval == 0) { if (rrval == 0) {
if (++zc >= 100) { if (++zc >= 100) {
esl_disconnect(handle); esl_disconnect(handle);
esl_mutex_unlock(handle->mutex); esl_mutex_unlock(handle->mutex);
return ESL_FAIL; return ESL_DISCONNECTED;
} }
} else if (rrval < 0) { } else if (rrval < 0) {
strerror_r(handle->errnum, handle->err, sizeof(handle->err)); strerror_r(handle->errnum, handle->err, sizeof(handle->err));
@ -876,21 +875,16 @@ ESL_DECLARE(esl_status_t) esl_recv_event(esl_handle_t *handle, esl_event_t **sav
hval = esl_event_get_header(revent, "content-type"); hval = esl_event_get_header(revent, "content-type");
if (!esl_strlen_zero(hval) && !esl_safe_strcasecmp(hval, "text/event-plain") && revent->body) { if (!esl_safe_strcasecmp(hval, "text/disconnect-notice") && revent->body) {
const char *en; goto fail;
}
if (!esl_safe_strcasecmp(hval, "text/event-plain") && revent->body) {
esl_event_types_t et = ESL_EVENT_COMMAND; esl_event_types_t et = ESL_EVENT_COMMAND;
char *body = strdup(revent->body); char *body = strdup(revent->body);
esl_event_safe_destroy(&handle->last_ievent); esl_event_safe_destroy(&handle->last_ievent);
if ((en = esl_stristr("event-name:", body))) {
en++;
while(*en == ' ') en++;
if (en) {
esl_name_event(en, &et);
}
}
esl_event_create(&handle->last_ievent, et); esl_event_create(&handle->last_ievent, et);
beg = body; beg = body;
@ -914,7 +908,11 @@ ESL_DECLARE(esl_status_t) esl_recv_event(esl_handle_t *handle, esl_event_t **sav
if (hname && hval) { if (hname && hval) {
esl_url_decode(hval); esl_url_decode(hval);
esl_log(ESL_LOG_DEBUG, "RECV INNER HEADER [%s] = [%s]\n", hname, hval); esl_log(ESL_LOG_DEBUG, "RECV INNER HEADER [%s] = [%s]\n", hname, hval);
if (!strcasecmp(hname, "event-name")) {
esl_event_del_header(handle->last_ievent, "event-name");
}
esl_event_add_header_string(handle->last_ievent, ESL_STACK_BOTTOM, hname, hval); esl_event_add_header_string(handle->last_ievent, ESL_STACK_BOTTOM, hname, hval);
esl_name_event(hval, &handle->last_event->event_id);
} }
beg = c + 1; beg = c + 1;

View File

@ -118,6 +118,8 @@ static const char *EVENT_NAMES[] = {
"GENERAL", "GENERAL",
"COMMAND", "COMMAND",
"SESSION_HEARTBEAT", "SESSION_HEARTBEAT",
"CLIENT_DISCONNECTED",
"SERVER_DISCONNECTED",
"ALL" "ALL"
}; };
@ -157,6 +159,8 @@ ESL_DECLARE(esl_status_t) esl_event_create_subclass(esl_event_t **event, esl_eve
(*event)->event_id = event_id; (*event)->event_id = event_id;
esl_event_add_header_string(*event, ESL_STACK_BOTTOM, "Event-Name", esl_event_name((*event)->event_id));
if (subclass_name) { if (subclass_name) {
(*event)->subclass_name = DUP(subclass_name); (*event)->subclass_name = DUP(subclass_name);
esl_event_add_header_string(*event, ESL_STACK_BOTTOM, "Event-Subclass", subclass_name); esl_event_add_header_string(*event, ESL_STACK_BOTTOM, "Event-Subclass", subclass_name);

View File

@ -163,7 +163,9 @@ ESLevent *ESLconnection::recvEvent()
} }
} }
return NULL; last_event_obj = new ESLevent("server_disconnected");
return last_event_obj;
} }
ESLevent *ESLconnection::recvEventTimed(int ms) ESLevent *ESLconnection::recvEventTimed(int ms)
@ -183,7 +185,8 @@ ESLevent *ESLconnection::recvEventTimed(int ms)
} }
} }
return NULL; last_event_obj = new ESLevent("server_disconnected");
return last_event_obj;
} }
int ESLconnection::filter(const char *header, const char *value) int ESLconnection::filter(const char *header, const char *value)

View File

@ -248,7 +248,8 @@ typedef int16_t esl_port_t;
typedef enum { typedef enum {
ESL_SUCCESS, ESL_SUCCESS,
ESL_FAIL, ESL_FAIL,
ESL_BREAK ESL_BREAK,
ESL_DISCONNECTED
} esl_status_t; } esl_status_t;
#include <esl_threadmutex.h> #include <esl_threadmutex.h>
@ -341,7 +342,15 @@ ESL_DECLARE(esl_status_t) esl_events(esl_handle_t *handle, esl_event_type_t etyp
#define esl_recv(_h) esl_recv_event(_h, NULL) #define esl_recv(_h) esl_recv_event(_h, NULL)
#define esl_recv_timed(_h, _ms) esl_recv_event_timed(_h, _ms, NULL) #define esl_recv_timed(_h, _ms) esl_recv_event_timed(_h, _ms, NULL)
#define esl_safe_strcasecmp(_s1, _s2) ((_s1) && (_s2)) ? strcasecmp((_s1), (_s2)) : 1
static __inline__ int esl_safe_strcasecmp(const char *s1, const char *s2)
{
if (!(s1 && s2)) {
return 1;
}
return strcasecmp(s1, s2);
}
#ifdef __cplusplus #ifdef __cplusplus
} }

View File

@ -106,6 +106,8 @@ typedef enum {
ESL_EVENT_GENERAL, ESL_EVENT_GENERAL,
ESL_EVENT_COMMAND, ESL_EVENT_COMMAND,
ESL_EVENT_SESSION_HEARTBEAT, ESL_EVENT_SESSION_HEARTBEAT,
ESL_EVENT_CLIENT_DISCONNECTED,
ESL_EVENT_SERVER_DISCONNECTED,
ESL_EVENT_ALL ESL_EVENT_ALL
} esl_event_types_t; } esl_event_types_t;

View File

@ -830,9 +830,10 @@ SWITCH_DECLARE(uint32_t) switch_core_session_event_count(_In_ switch_core_sessio
\brief DE-Queue an event on a given session \brief DE-Queue an event on a given session
\param session the session to de-queue the message on \param session the session to de-queue the message on
\param event the de-queued event \param event the de-queued event
\param force force the dequeue
\return the SWITCH_STATUS_SUCCESS if the event was de-queued \return the SWITCH_STATUS_SUCCESS if the event was de-queued
*/ */
SWITCH_DECLARE(switch_status_t) switch_core_session_dequeue_event(_In_ switch_core_session_t *session, _Out_ switch_event_t **event); SWITCH_DECLARE(switch_status_t) switch_core_session_dequeue_event(_In_ switch_core_session_t *session, _Out_ switch_event_t **event, switch_bool_t force);
/*! /*!
\brief Queue a private event on a given session \brief Queue a private event on a given session

View File

@ -121,7 +121,10 @@ SWITCH_DECLARE(switch_status_t) switch_event_shutdown(void);
\param subclass_name the subclass name for custom event (only valid when event_id is SWITCH_EVENT_CUSTOM) \param subclass_name the subclass name for custom event (only valid when event_id is SWITCH_EVENT_CUSTOM)
\return SWITCH_STATUS_SUCCESS on success \return SWITCH_STATUS_SUCCESS on success
*/ */
SWITCH_DECLARE(switch_status_t) switch_event_create_subclass(switch_event_t **event, switch_event_types_t event_id, const char *subclass_name); SWITCH_DECLARE(switch_status_t) switch_event_create_subclass_detailed(const char *file, const char *func, int line,
switch_event_t **event, switch_event_types_t event_id, const char *subclass_name);
#define switch_event_create_subclass(_e, _eid, _sn) switch_event_create_subclass_detailed(__FILE__, (char * )__SWITCH_FUNC__, __LINE__, _e, _eid, _sn)
/*! /*!
\brief Set the priority of an event \brief Set the priority of an event
@ -198,6 +201,10 @@ SWITCH_DECLARE(switch_status_t) switch_event_dup(switch_event_t **event, switch_
*/ */
SWITCH_DECLARE(switch_status_t) switch_event_fire_detailed(const char *file, const char *func, int line, switch_event_t **event, void *user_data); SWITCH_DECLARE(switch_status_t) switch_event_fire_detailed(const char *file, const char *func, int line, switch_event_t **event, void *user_data);
SWITCH_DECLARE(void) switch_event_prep_for_delivery_detailed(const char *file, const char *func, int line, switch_event_t *event);
#define switch_event_prep_for_delivery(_event) switch_event_prep_for_delivery_detailed(__FILE__, (char * )__SWITCH_FUNC__, __LINE__, _event)
/*! /*!
\brief Bind an event callback to a specific event \brief Bind an event callback to a specific event
\param id an identifier token of the binder \param id an identifier token of the binder

View File

@ -844,6 +844,7 @@ typedef enum {
CF_REQ_MEDIA, CF_REQ_MEDIA,
CF_VERBOSE_EVENTS, CF_VERBOSE_EVENTS,
CF_PAUSE_BUGS, CF_PAUSE_BUGS,
CF_DIVERT_EVENTS,
/* WARNING: DO NOT ADD ANY FLAGS BELOW THIS LINE */ /* WARNING: DO NOT ADD ANY FLAGS BELOW THIS LINE */
CF_FLAG_MAX CF_FLAG_MAX
} switch_channel_flag_t; } switch_channel_flag_t;
@ -1212,6 +1213,8 @@ typedef enum {
SWITCH_EVENT_GENERAL, SWITCH_EVENT_GENERAL,
SWITCH_EVENT_COMMAND, SWITCH_EVENT_COMMAND,
SWITCH_EVENT_SESSION_HEARTBEAT, SWITCH_EVENT_SESSION_HEARTBEAT,
SWITCH_EVENT_CLIENT_DISCONNECTED,
SWITCH_EVENT_SERVER_DISCONNECTED,
SWITCH_EVENT_ALL SWITCH_EVENT_ALL
} switch_event_types_t; } switch_event_types_t;

View File

@ -1900,7 +1900,7 @@ static void conference_loop_output(conference_member_t *member)
switch_mutex_lock(member->control_mutex); switch_mutex_lock(member->control_mutex);
if (switch_core_session_dequeue_event(member->session, &event) == SWITCH_STATUS_SUCCESS) { if (switch_core_session_dequeue_event(member->session, &event, SWITCH_FALSE) == SWITCH_STATUS_SUCCESS) {
if (event->event_id == SWITCH_EVENT_MESSAGE) { if (event->event_id == SWITCH_EVENT_MESSAGE) {
char *from = switch_event_get_header(event, "from"); char *from = switch_event_get_header(event, "from");
char *to = switch_event_get_header(event, "to"); char *to = switch_event_get_header(event, "to");

View File

@ -328,7 +328,6 @@ static void event_handler(switch_event_t *event)
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Memory Error!\n"); switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Memory Error!\n");
} }
} }
} }
switch_mutex_unlock(globals.listener_mutex); switch_mutex_unlock(globals.listener_mutex);
} }
@ -988,6 +987,7 @@ static switch_status_t read_packet(listener_t *listener, switch_event_t **event,
while (listener->sock && !prefs.done) { while (listener->sock && !prefs.done) {
uint8_t do_sleep = 1; uint8_t do_sleep = 1;
mlen = 1; mlen = 1;
status = switch_socket_recv(listener->sock, ptr, &mlen); status = switch_socket_recv(listener->sock, ptr, &mlen);
if (prefs.done || (!SWITCH_STATUS_IS_BREAK(status) && status != SWITCH_STATUS_SUCCESS)) { if (prefs.done || (!SWITCH_STATUS_IS_BREAK(status) && status != SWITCH_STATUS_SUCCESS)) {
@ -1129,6 +1129,20 @@ static switch_status_t read_packet(listener_t *listener, switch_event_t **event,
} }
} }
if (listener->session) {
switch_channel_t *channel = switch_core_session_get_channel(listener->session);
if (switch_channel_get_state(channel) < CS_HANGUP && switch_channel_test_flag(channel, CF_DIVERT_EVENTS)) {
switch_event_t *e = NULL;
while (switch_core_session_dequeue_event(listener->session, &e, SWITCH_TRUE) == SWITCH_STATUS_SUCCESS) {
if (switch_queue_trypush(listener->event_queue, e) != SWITCH_STATUS_SUCCESS) {
switch_core_session_queue_event(listener->session, &e);
break;
}
}
}
}
if (switch_test_flag(listener, LFLAG_EVENTS)) { if (switch_test_flag(listener, LFLAG_EVENTS)) {
while (switch_queue_trypop(listener->event_queue, &pop) == SWITCH_STATUS_SUCCESS) { while (switch_queue_trypop(listener->event_queue, &pop) == SWITCH_STATUS_SUCCESS) {
char hbuf[512]; char hbuf[512];
@ -1473,6 +1487,47 @@ static switch_status_t parse_command(listener_t *listener, switch_event_t **even
} }
if (!strncasecmp(cmd, "divert_events", 13)) {
char *onoff = cmd + 13;
switch_channel_t *channel;
if (!listener->session) {
switch_snprintf(reply, reply_len, "-ERR not controlling a session.");
goto done;
}
channel = switch_core_session_get_channel(listener->session);
if (onoff) {
while(*onoff == ' ') {
onoff++;
}
if (*onoff == '\r' || *onoff == '\n') {
onoff = NULL;
} else {
strip_cr(onoff);
}
}
if (switch_strlen_zero(onoff)) {
switch_snprintf(reply, reply_len, "-ERR missing value.");
goto done;
}
if (!strcasecmp(onoff, "on")) {
switch_snprintf(reply, reply_len, "+OK events diverted");
switch_channel_set_flag(channel, CF_DIVERT_EVENTS);
} else {
switch_snprintf(reply, reply_len, "+OK events not diverted");
switch_channel_clear_flag(channel, CF_DIVERT_EVENTS);
}
goto done;
}
if (!strncasecmp(cmd, "sendmsg", 7)) { if (!strncasecmp(cmd, "sendmsg", 7)) {
switch_core_session_t *session; switch_core_session_t *session;
char *uuid = cmd + 7; char *uuid = cmd + 7;

View File

@ -373,7 +373,11 @@ SWITCH_DECLARE(switch_status_t) switch_channel_dequeue_dtmf(switch_channel_t *ch
switch_channel_event_set_data(channel, event); switch_channel_event_set_data(channel, event);
switch_event_add_header(event, SWITCH_STACK_BOTTOM, "DTMF-Digit", "%c", dtmf->digit); switch_event_add_header(event, SWITCH_STACK_BOTTOM, "DTMF-Digit", "%c", dtmf->digit);
switch_event_add_header(event, SWITCH_STACK_BOTTOM, "DTMF-Duration", "%u", dtmf->duration); switch_event_add_header(event, SWITCH_STACK_BOTTOM, "DTMF-Duration", "%u", dtmf->duration);
switch_event_fire(&event); if (switch_channel_test_flag(channel, CF_DIVERT_EVENTS)) {
switch_core_session_queue_event(channel->session, &event);
} else {
switch_event_fire(&event);
}
} }
return status; return status;

View File

@ -680,14 +680,14 @@ SWITCH_DECLARE(uint32_t) switch_core_session_event_count(switch_core_session_t *
return 0; return 0;
} }
SWITCH_DECLARE(switch_status_t) switch_core_session_dequeue_event(switch_core_session_t *session, switch_event_t **event) SWITCH_DECLARE(switch_status_t) switch_core_session_dequeue_event(switch_core_session_t *session, switch_event_t **event, switch_bool_t force)
{ {
switch_status_t status = SWITCH_STATUS_FALSE; switch_status_t status = SWITCH_STATUS_FALSE;
void *pop; void *pop;
switch_assert(session != NULL); switch_assert(session != NULL);
if (session->event_queue) { if (session->event_queue && (force || !switch_channel_test_flag(session->channel, CF_DIVERT_EVENTS))) {
if ((status = (switch_status_t) switch_queue_trypop(session->event_queue, &pop)) == SWITCH_STATUS_SUCCESS) { if ((status = (switch_status_t) switch_queue_trypop(session->event_queue, &pop)) == SWITCH_STATUS_SUCCESS) {
*event = (switch_event_t *) pop; *event = (switch_event_t *) pop;
} }

View File

@ -986,7 +986,7 @@ SWITCH_DECLARE(int) CoreSession::flushEvents()
} }
channel = switch_core_session_get_channel(session); channel = switch_core_session_get_channel(session);
while (switch_core_session_dequeue_event(session, &event) == SWITCH_STATUS_SUCCESS) { while (switch_core_session_dequeue_event(session, &event, SWITCH_TRUE) == SWITCH_STATUS_SUCCESS) {
switch_event_destroy(&event); switch_event_destroy(&event);
} }
return SWITCH_STATUS_SUCCESS; return SWITCH_STATUS_SUCCESS;

View File

@ -170,6 +170,8 @@ static char *EVENT_NAMES[] = {
"GENERAL", "GENERAL",
"COMMAND", "COMMAND",
"SESSION_HEARTBEAT", "SESSION_HEARTBEAT",
"CLIENT_DISCONNECTED",
"SERVER_DISCONNECTED",
"ALL" "ALL"
}; };
@ -589,7 +591,8 @@ SWITCH_DECLARE(switch_status_t) switch_event_init(switch_memory_pool_t *pool)
return SWITCH_STATUS_SUCCESS; return SWITCH_STATUS_SUCCESS;
} }
SWITCH_DECLARE(switch_status_t) switch_event_create_subclass(switch_event_t **event, switch_event_types_t event_id, const char *subclass_name) SWITCH_DECLARE(switch_status_t) switch_event_create_subclass_detailed(const char *file, const char *func, int line,
switch_event_t **event, switch_event_types_t event_id, const char *subclass_name)
{ {
void *pop; void *pop;
@ -610,6 +613,8 @@ SWITCH_DECLARE(switch_status_t) switch_event_create_subclass(switch_event_t **ev
(*event)->event_id = event_id; (*event)->event_id = event_id;
switch_event_prep_for_delivery_detailed(file, func, line, *event);
if (subclass_name) { if (subclass_name) {
(*event)->subclass_name = DUP(subclass_name); (*event)->subclass_name = DUP(subclass_name);
switch_event_add_header_string(*event, SWITCH_STACK_BOTTOM, "Event-Subclass", subclass_name); switch_event_add_header_string(*event, SWITCH_STACK_BOTTOM, "Event-Subclass", subclass_name);
@ -1054,13 +1059,37 @@ SWITCH_DECLARE(switch_xml_t) switch_event_xmlize(switch_event_t *event, const ch
return xml; return xml;
} }
SWITCH_DECLARE(switch_status_t) switch_event_fire_detailed(const char *file, const char *func, int line, switch_event_t **event, void *user_data) SWITCH_DECLARE(void) switch_event_prep_for_delivery_detailed(const char *file, const char *func, int line, switch_event_t *event)
{ {
switch_time_exp_t tm; switch_time_exp_t tm;
char date[80] = ""; char date[80] = "";
switch_size_t retsize; switch_size_t retsize;
switch_time_t ts = switch_micro_time_now(); switch_time_t ts = switch_micro_time_now();
switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Event-Name", switch_event_name(event->event_id));
switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Core-UUID", switch_core_get_uuid());
switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "FreeSWITCH-Hostname", hostname);
switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "FreeSWITCH-IPv4", guess_ip_v4);
switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "FreeSWITCH-IPv6", guess_ip_v6);
switch_time_exp_lt(&tm, ts);
switch_strftime_nocheck(date, &retsize, sizeof(date), "%Y-%m-%d %T", &tm);
switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Event-Date-Local", date);
switch_rfc822_date(date, ts);
switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Event-Date-GMT", date);
switch_event_add_header(event, SWITCH_STACK_BOTTOM, "Event-Date-Timestamp", "%" SWITCH_UINT64_T_FMT, (uint64_t) ts);
switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Event-Calling-File", switch_cut_path(file));
switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Event-Calling-Function", func);
switch_event_add_header(event, SWITCH_STACK_BOTTOM, "Event-Calling-Line-Number", "%d", line);
}
SWITCH_DECLARE(switch_status_t) switch_event_fire_detailed(const char *file, const char *func, int line, switch_event_t **event, void *user_data)
{
switch_assert(BLOCK != NULL); switch_assert(BLOCK != NULL);
switch_assert(RUNTIME_POOL != NULL); switch_assert(RUNTIME_POOL != NULL);
switch_assert(EVENT_QUEUE_MUTEX != NULL); switch_assert(EVENT_QUEUE_MUTEX != NULL);
@ -1072,22 +1101,6 @@ SWITCH_DECLARE(switch_status_t) switch_event_fire_detailed(const char *file, con
return SWITCH_STATUS_SUCCESS; return SWITCH_STATUS_SUCCESS;
} }
switch_event_add_header_string(*event, SWITCH_STACK_BOTTOM, "Event-Name", switch_event_name((*event)->event_id));
switch_event_add_header_string(*event, SWITCH_STACK_BOTTOM, "Core-UUID", switch_core_get_uuid());
switch_event_add_header_string(*event, SWITCH_STACK_BOTTOM, "FreeSWITCH-Hostname", hostname);
switch_event_add_header_string(*event, SWITCH_STACK_BOTTOM, "FreeSWITCH-IPv4", guess_ip_v4);
switch_event_add_header_string(*event, SWITCH_STACK_BOTTOM, "FreeSWITCH-IPv6", guess_ip_v6);
switch_time_exp_lt(&tm, ts);
switch_strftime_nocheck(date, &retsize, sizeof(date), "%Y-%m-%d %T", &tm);
switch_event_add_header_string(*event, SWITCH_STACK_BOTTOM, "Event-Date-Local", date);
switch_rfc822_date(date, ts);
switch_event_add_header_string(*event, SWITCH_STACK_BOTTOM, "Event-Date-GMT", date);
switch_event_add_header(*event, SWITCH_STACK_BOTTOM, "Event-Date-Timestamp", "%" SWITCH_UINT64_T_FMT, (uint64_t) ts);
switch_event_add_header_string(*event, SWITCH_STACK_BOTTOM, "Event-Calling-File", switch_cut_path(file));
switch_event_add_header_string(*event, SWITCH_STACK_BOTTOM, "Event-Calling-Function", func);
switch_event_add_header(*event, SWITCH_STACK_BOTTOM, "Event-Calling-Line-Number", "%d", line);
if (user_data) { if (user_data) {
(*event)->event_user_data = user_data; (*event)->event_user_data = user_data;
} }

View File

@ -248,7 +248,7 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_sleep(switch_core_session_t *session,
if (args->input_callback) { if (args->input_callback) {
switch_event_t *event = NULL; switch_event_t *event = NULL;
if (switch_core_session_dequeue_event(session, &event) == SWITCH_STATUS_SUCCESS) { if (switch_core_session_dequeue_event(session, &event, SWITCH_FALSE) == SWITCH_STATUS_SUCCESS) {
status = args->input_callback(session, event, SWITCH_INPUT_TYPE_EVENT, args->buf, args->buflen); status = args->input_callback(session, event, SWITCH_INPUT_TYPE_EVENT, args->buf, args->buflen);
switch_event_destroy(&event); switch_event_destroy(&event);
} }
@ -783,7 +783,7 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_park(switch_core_session_t *session,
} }
} }
if (switch_core_session_dequeue_event(session, &event) == SWITCH_STATUS_SUCCESS) { if (switch_core_session_dequeue_event(session, &event, SWITCH_FALSE) == SWITCH_STATUS_SUCCESS) {
if (args && args->input_callback) { if (args && args->input_callback) {
if ((status = args->input_callback(session, event, SWITCH_INPUT_TYPE_EVENT, args->buf, args->buflen)) != SWITCH_STATUS_SUCCESS) { if ((status = args->input_callback(session, event, SWITCH_INPUT_TYPE_EVENT, args->buf, args->buflen)) != SWITCH_STATUS_SUCCESS) {
break; break;
@ -853,7 +853,7 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_collect_digits_callback(switch_core_s
status = args->input_callback(session, (void *) &dtmf, SWITCH_INPUT_TYPE_DTMF, args->buf, args->buflen); status = args->input_callback(session, (void *) &dtmf, SWITCH_INPUT_TYPE_DTMF, args->buf, args->buflen);
} }
if (switch_core_session_dequeue_event(session, &event) == SWITCH_STATUS_SUCCESS) { if (switch_core_session_dequeue_event(session, &event, SWITCH_FALSE) == SWITCH_STATUS_SUCCESS) {
status = args->input_callback(session, event, SWITCH_INPUT_TYPE_EVENT, args->buf, args->buflen); status = args->input_callback(session, event, SWITCH_INPUT_TYPE_EVENT, args->buf, args->buflen);
switch_event_destroy(&event); switch_event_destroy(&event);
} }

View File

@ -126,7 +126,7 @@ SWITCH_DECLARE(void) switch_ivr_session_echo(switch_core_session_t *session, swi
if (args->input_callback) { if (args->input_callback) {
switch_event_t *event = NULL; switch_event_t *event = NULL;
if (switch_core_session_dequeue_event(session, &event) == SWITCH_STATUS_SUCCESS) { if (switch_core_session_dequeue_event(session, &event, SWITCH_FALSE) == SWITCH_STATUS_SUCCESS) {
status = args->input_callback(session, event, SWITCH_INPUT_TYPE_EVENT, args->buf, args->buflen); status = args->input_callback(session, event, SWITCH_INPUT_TYPE_EVENT, args->buf, args->buflen);
switch_event_destroy(&event); switch_event_destroy(&event);
} }
@ -692,7 +692,7 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_eavesdrop_session(switch_core_session
goto end; goto end;
} }
if (switch_core_session_dequeue_event(session, &event) == SWITCH_STATUS_SUCCESS) { if (switch_core_session_dequeue_event(session, &event, SWITCH_FALSE) == SWITCH_STATUS_SUCCESS) {
char *command = switch_event_get_header(event, "eavesdrop-command"); char *command = switch_event_get_header(event, "eavesdrop-command");
if (command) { if (command) {
fcommand = command; fcommand = command;

View File

@ -279,7 +279,7 @@ static void *audio_bridge_thread(switch_thread_t *thread, void *obj)
} }
} }
if (switch_core_session_dequeue_event(session_a, &event) == SWITCH_STATUS_SUCCESS) { if (switch_core_session_dequeue_event(session_a, &event, SWITCH_FALSE) == SWITCH_STATUS_SUCCESS) {
if (input_callback) { if (input_callback) {
status = input_callback(session_a, event, SWITCH_INPUT_TYPE_EVENT, user_data, 0); status = input_callback(session_a, event, SWITCH_INPUT_TYPE_EVENT, user_data, 0);
} }

View File

@ -575,7 +575,7 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_record_file(switch_core_session_t *se
if (args->input_callback) { if (args->input_callback) {
switch_event_t *event = NULL; switch_event_t *event = NULL;
if (switch_core_session_dequeue_event(session, &event) == SWITCH_STATUS_SUCCESS) { if (switch_core_session_dequeue_event(session, &event, SWITCH_FALSE) == SWITCH_STATUS_SUCCESS) {
status = args->input_callback(session, event, SWITCH_INPUT_TYPE_EVENT, args->buf, args->buflen); status = args->input_callback(session, event, SWITCH_INPUT_TYPE_EVENT, args->buf, args->buflen);
switch_event_destroy(&event); switch_event_destroy(&event);
} }
@ -742,7 +742,7 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_gentones(switch_core_session_t *sessi
if (args->input_callback) { if (args->input_callback) {
switch_event_t *event; switch_event_t *event;
if (switch_core_session_dequeue_event(session, &event) == SWITCH_STATUS_SUCCESS) { if (switch_core_session_dequeue_event(session, &event, SWITCH_FALSE) == SWITCH_STATUS_SUCCESS) {
status = args->input_callback(session, event, SWITCH_INPUT_TYPE_EVENT, args->buf, args->buflen); status = args->input_callback(session, event, SWITCH_INPUT_TYPE_EVENT, args->buf, args->buflen);
switch_event_destroy(&event); switch_event_destroy(&event);
} }
@ -1070,7 +1070,7 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_play_file(switch_core_session_t *sess
if (args->input_callback) { if (args->input_callback) {
switch_event_t *event; switch_event_t *event;
if (switch_core_session_dequeue_event(session, &event) == SWITCH_STATUS_SUCCESS) { if (switch_core_session_dequeue_event(session, &event, SWITCH_FALSE) == SWITCH_STATUS_SUCCESS) {
status = args->input_callback(session, event, SWITCH_INPUT_TYPE_EVENT, args->buf, args->buflen); status = args->input_callback(session, event, SWITCH_INPUT_TYPE_EVENT, args->buf, args->buflen);
switch_event_destroy(&event); switch_event_destroy(&event);
} }
@ -1715,7 +1715,7 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_speak_text_handle(switch_core_session
} }
if (args->input_callback) { if (args->input_callback) {
if (switch_core_session_dequeue_event(session, &event) == SWITCH_STATUS_SUCCESS) { if (switch_core_session_dequeue_event(session, &event, SWITCH_FALSE) == SWITCH_STATUS_SUCCESS) {
status = args->input_callback(session, event, SWITCH_INPUT_TYPE_EVENT, args->buf, args->buflen); status = args->input_callback(session, event, SWITCH_INPUT_TYPE_EVENT, args->buf, args->buflen);
switch_event_destroy(&event); switch_event_destroy(&event);
} }