update
git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@1425 d0543943-73ff-0310-b7d9-9358b9ac24b2
This commit is contained in:
parent
3230f6ef20
commit
295424544d
|
@ -229,6 +229,15 @@ SWITCH_DECLARE(switch_status_t) switch_event_reserve_subclass_detailed(char *own
|
||||||
*/
|
*/
|
||||||
SWITCH_DECLARE(switch_status_t) switch_event_serialize(switch_event_t *event, char *buf, switch_size_t buflen, char *fmt, ...);
|
SWITCH_DECLARE(switch_status_t) switch_event_serialize(switch_event_t *event, char *buf, switch_size_t buflen, char *fmt, ...);
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief Render a XML representation of an event sutable for printing or network transport
|
||||||
|
\param event the event to render
|
||||||
|
\param fmt optional body of the event (varargs see standard sprintf family)
|
||||||
|
\return the xml object if the operation was successful
|
||||||
|
\note the body supplied by this function will supersede an existing body the event may have
|
||||||
|
*/
|
||||||
|
SWITCH_DECLARE(switch_xml_t) switch_event_xmlize(switch_event_t *event, char *fmt, ...);
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
\brief Determine if the event system has been initilized
|
\brief Determine if the event system has been initilized
|
||||||
\return SWITCH_STATUS_SUCCESS if the system is running
|
\return SWITCH_STATUS_SUCCESS if the system is running
|
||||||
|
|
|
@ -68,6 +68,7 @@ struct switch_stream_handle {
|
||||||
void *end;
|
void *end;
|
||||||
switch_size_t data_size;
|
switch_size_t data_size;
|
||||||
switch_size_t data_len;
|
switch_size_t data_len;
|
||||||
|
switch_event_t *event;
|
||||||
};
|
};
|
||||||
|
|
||||||
/*! \brief Node in which to store custom outgoing channel callback hooks */
|
/*! \brief Node in which to store custom outgoing channel callback hooks */
|
||||||
|
|
|
@ -39,15 +39,33 @@ static const char modname[] = "mod_event_test";
|
||||||
static void event_handler(switch_event_t *event)
|
static void event_handler(switch_event_t *event)
|
||||||
{
|
{
|
||||||
char buf[1024];
|
char buf[1024];
|
||||||
|
switch_xml_t xml;
|
||||||
|
char *xmlstr = "N/A";
|
||||||
|
uint8_t dofree = 0;
|
||||||
|
|
||||||
switch (event->event_id) {
|
switch (event->event_id) {
|
||||||
case SWITCH_EVENT_LOG:
|
case SWITCH_EVENT_LOG:
|
||||||
return;
|
return;
|
||||||
default:
|
default:
|
||||||
switch_event_serialize(event, buf, sizeof(buf), NULL);
|
switch_event_serialize(event, buf, sizeof(buf), NULL);
|
||||||
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CONSOLE, "\nEVENT\n--------------------------------\n%s\n", buf);
|
if ((xml = switch_event_xmlize(event, NULL))) {
|
||||||
|
xmlstr = switch_xml_toxml(xml);
|
||||||
|
dofree++;
|
||||||
|
}
|
||||||
|
|
||||||
|
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CONSOLE, "\nEVENT (text version)\n--------------------------------\n%s", buf);
|
||||||
|
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CONSOLE, "\nEVENT (xml version)\n--------------------------------\n%s\n", xmlstr);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (dofree) {
|
||||||
|
if (xml) {
|
||||||
|
switch_xml_free(xml);
|
||||||
|
}
|
||||||
|
if (xmlstr) {
|
||||||
|
free(xmlstr);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -208,10 +208,23 @@ abyss_bool HandleHook(TSession *r)
|
||||||
char *m = "text/html";
|
char *m = "text/html";
|
||||||
switch_stream_handle_t stream = {0};
|
switch_stream_handle_t stream = {0};
|
||||||
char *command;
|
char *command;
|
||||||
|
|
||||||
if(strncmp(r->uri, "/api/", 5)) {
|
if(strncmp(r->uri, "/api/", 5)) {
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (switch_event_create(&stream.event, SWITCH_EVENT_API) == SWITCH_STATUS_SUCCESS) {
|
||||||
|
if (r->uri) switch_event_add_header(stream.event, SWITCH_STACK_BOTTOM, "HTTP-URI", r->uri);
|
||||||
|
if (r->query) switch_event_add_header(stream.event, SWITCH_STACK_BOTTOM, "HTTP-QUERY", r->query);
|
||||||
|
if (r->host) switch_event_add_header(stream.event, SWITCH_STACK_BOTTOM, "HTTP-HOST", r->host);
|
||||||
|
if (r->from) switch_event_add_header(stream.event, SWITCH_STACK_BOTTOM, "HTTP-FROM", r->from);
|
||||||
|
if (r->useragent) switch_event_add_header(stream.event, SWITCH_STACK_BOTTOM, "HTTP-USER-AGENT", r->useragent);
|
||||||
|
if (r->referer) switch_event_add_header(stream.event, SWITCH_STACK_BOTTOM, "HTTP-REFERER", r->referer);
|
||||||
|
if (r->requestline) switch_event_add_header(stream.event, SWITCH_STACK_BOTTOM, "HTTP-REQUESTLINE", r->requestline);
|
||||||
|
if (r->user) switch_event_add_header(stream.event, SWITCH_STACK_BOTTOM, "HTTP-USER", r->user);
|
||||||
|
if (r->port) switch_event_add_header(stream.event, SWITCH_STACK_BOTTOM, "HTTP-PORT", "%u", r->port);
|
||||||
|
}
|
||||||
|
|
||||||
command = r->uri + 5;
|
command = r->uri + 5;
|
||||||
|
|
||||||
ResponseChunked(r);
|
ResponseChunked(r);
|
||||||
|
|
|
@ -538,6 +538,78 @@ SWITCH_DECLARE(switch_status_t) switch_event_serialize(switch_event_t *event, ch
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static switch_xml_t add_xml_header(switch_xml_t xml, char *name, char *value, int offset)
|
||||||
|
{
|
||||||
|
switch_xml_t header = NULL;
|
||||||
|
|
||||||
|
if ((header = switch_xml_add_child_d(xml, "header", offset))) {
|
||||||
|
switch_xml_set_attr_d(header, "name", name);
|
||||||
|
switch_xml_set_attr_d(header, "value", value);
|
||||||
|
}
|
||||||
|
|
||||||
|
return header;
|
||||||
|
}
|
||||||
|
|
||||||
|
SWITCH_DECLARE(switch_xml_t) switch_event_xmlize(switch_event_t *event, char *fmt, ...)
|
||||||
|
{
|
||||||
|
switch_event_header_t *hp;
|
||||||
|
char *data = NULL, *body = NULL;
|
||||||
|
int ret = 0;
|
||||||
|
switch_xml_t xml = NULL;
|
||||||
|
uint32_t off = 0;
|
||||||
|
va_list ap;
|
||||||
|
|
||||||
|
if (!(xml = switch_xml_new("event"))) {
|
||||||
|
return xml;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (fmt) {
|
||||||
|
va_start(ap, fmt);
|
||||||
|
#ifdef HAVE_VASPRINTF
|
||||||
|
ret = vasprintf(&data, fmt, ap);
|
||||||
|
#else
|
||||||
|
data = (char *) malloc(2048);
|
||||||
|
vsnprintf(data, 2048, fmt, ap);
|
||||||
|
#endif
|
||||||
|
va_end(ap);
|
||||||
|
if (ret == -1) {
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
for (hp = event->headers; hp; hp = hp->next) {
|
||||||
|
add_xml_header(xml, hp->name, hp->value, off++);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (data) {
|
||||||
|
body = data;
|
||||||
|
} else if (event->body) {
|
||||||
|
body = event->body;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (body) {
|
||||||
|
int blen = (int) strlen(body);
|
||||||
|
char blena[25];
|
||||||
|
snprintf(blena, sizeof(blena), "%d", blen);
|
||||||
|
if (blen) {
|
||||||
|
switch_xml_t xbody = NULL;
|
||||||
|
|
||||||
|
add_xml_header(xml, "Content-Length", blena, off++);
|
||||||
|
if ((xbody = switch_xml_add_child_d(xml, "body", 0))) {
|
||||||
|
switch_xml_set_txt_d(xbody, body);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (data) {
|
||||||
|
free(data);
|
||||||
|
}
|
||||||
|
|
||||||
|
return xml;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
SWITCH_DECLARE(switch_status_t) switch_event_fire_detailed(char *file, char *func, int line, switch_event_t **event,
|
SWITCH_DECLARE(switch_status_t) switch_event_fire_detailed(char *file, char *func, int line, switch_event_t **event,
|
||||||
void *user_data)
|
void *user_data)
|
||||||
{
|
{
|
||||||
|
|
|
@ -671,12 +671,24 @@ SWITCH_DECLARE(switch_status_t) switch_api_execute(char *cmd, char *arg, switch_
|
||||||
{
|
{
|
||||||
switch_api_interface_t *api;
|
switch_api_interface_t *api;
|
||||||
switch_status_t status;
|
switch_status_t status;
|
||||||
switch_event_t *event;
|
|
||||||
|
|
||||||
assert(stream != NULL);
|
assert(stream != NULL);
|
||||||
assert(stream->data != NULL);
|
assert(stream->data != NULL);
|
||||||
assert(stream->write_function != NULL);
|
assert(stream->write_function != NULL);
|
||||||
|
|
||||||
|
if (!stream->event) {
|
||||||
|
switch_event_create(&stream->event, SWITCH_EVENT_API);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (stream->event) {
|
||||||
|
if (cmd) {
|
||||||
|
switch_event_add_header(stream->event, SWITCH_STACK_BOTTOM, "API-Command", cmd);
|
||||||
|
}
|
||||||
|
if (arg) {
|
||||||
|
switch_event_add_header(stream->event, SWITCH_STACK_BOTTOM, "API-Command-Arguement", arg);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if ((api = switch_loadable_module_get_api_interface(cmd)) != 0) {
|
if ((api = switch_loadable_module_get_api_interface(cmd)) != 0) {
|
||||||
status = api->function(arg, stream);
|
status = api->function(arg, stream);
|
||||||
} else {
|
} else {
|
||||||
|
@ -685,15 +697,8 @@ SWITCH_DECLARE(switch_status_t) switch_api_execute(char *cmd, char *arg, switch_
|
||||||
//snprintf(retbuf, len, "INVALID COMMAND [%s]", cmd);
|
//snprintf(retbuf, len, "INVALID COMMAND [%s]", cmd);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (switch_event_create(&event, SWITCH_EVENT_API) == SWITCH_STATUS_SUCCESS) {
|
if (stream->event) {
|
||||||
if (cmd) {
|
switch_event_fire(&stream->event);
|
||||||
switch_event_add_header(event, SWITCH_STACK_BOTTOM, "API-Command", cmd);
|
|
||||||
}
|
|
||||||
if (arg) {
|
|
||||||
switch_event_add_header(event, SWITCH_STACK_BOTTOM, "API-Command-Arguement", arg);
|
|
||||||
}
|
|
||||||
//switch_event_add_body(event, retbuf);
|
|
||||||
switch_event_fire(&event);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue