XMLification (wave 4)

git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@1412 d0543943-73ff-0310-b7d9-9358b9ac24b2
This commit is contained in:
Anthony Minessale
2006-05-10 15:47:54 +00:00
parent 7c0fce5a01
commit f09491a69b
26 changed files with 275 additions and 156 deletions
@@ -33,15 +33,31 @@
static const char modname[] = "mod_commands";
static switch_status_t load_function(char *mod, char *out, size_t outlen)
static switch_status_t status_function(char *cmd, switch_stream_handle_t *stream)
{
switch_loadable_module_load_module((char *) SWITCH_GLOBAL_dirs.mod_dir, (char *) mod);
snprintf(out, outlen, "OK\n");
switch_core_time_duration_t duration;
switch_core_measure_time(switch_core_uptime(), &duration);
stream->write_function(stream, "<b>UP %u year(s), %u day(s), %u hour(s), %u minute(s), %u second(s), %u millisecond(s), %u microsecond(s)</b>\n",
duration.yr,
duration.day,
duration.hr,
duration.min,
duration.sec,
duration.ms,
duration.mms
);
return SWITCH_STATUS_SUCCESS;
}
static switch_status_t kill_function(char *dest, char *out, size_t outlen)
static switch_status_t load_function(char *mod, switch_stream_handle_t *stream)
{
switch_loadable_module_load_module((char *) SWITCH_GLOBAL_dirs.mod_dir, (char *) mod);
stream->write_function(stream, "OK\n");
return SWITCH_STATUS_SUCCESS;
}
static switch_status_t kill_function(char *dest, switch_stream_handle_t *stream)
{
switch_core_session_t *session = NULL;
@@ -50,16 +66,16 @@ static switch_status_t kill_function(char *dest, char *out, size_t outlen)
switch_core_session_kill_channel(session, SWITCH_SIG_KILL);
switch_channel_hangup(channel, SWITCH_CAUSE_NORMAL_CLEARING);
switch_core_session_rwunlock(session);
snprintf(out, outlen, "OK\n");
stream->write_function(stream, "OK\n");
} else {
snprintf(out, outlen, "No Such Channel!\n");
stream->write_function(stream, "No Such Channel!\n");
}
return SWITCH_STATUS_SUCCESS;
}
static switch_status_t transfer_function(char *cmd, char *out, size_t outlen)
static switch_status_t transfer_function(char *cmd, switch_stream_handle_t *stream)
{
switch_core_session_t *session = NULL;
char *argv[4] = {0};
@@ -68,7 +84,7 @@ static switch_status_t transfer_function(char *cmd, char *out, size_t outlen)
argc = switch_separate_string(cmd, ' ', argv, (sizeof(argv) / sizeof(argv[0])));
if (argc < 2 || argc > 4) {
snprintf(out, outlen, "Invalid Parameters\n");
stream->write_function(stream, "Invalid Parameters\n");
} else {
char *uuid = argv[0];
char *dest = argv[1];
@@ -78,15 +94,15 @@ static switch_status_t transfer_function(char *cmd, char *out, size_t outlen)
if ((session = switch_core_session_locate(uuid))) {
if (switch_ivr_session_transfer(session, dest, dp, context) == SWITCH_STATUS_SUCCESS) {
snprintf(out, outlen, "OK\n");
stream->write_function(stream, "OK\n");
} else {
snprintf(out, outlen, "ERROR\n");
stream->write_function(stream, "ERROR\n");
}
switch_core_session_rwunlock(session);
} else {
snprintf(out, outlen, "No Such Channel!\n");
stream->write_function(stream, "No Such Channel!\n");
}
}
@@ -96,7 +112,7 @@ static switch_status_t transfer_function(char *cmd, char *out, size_t outlen)
static switch_status_t pause_function(char *cmd, char *out, size_t outlen)
static switch_status_t pause_function(char *cmd, switch_stream_handle_t *stream)
{
switch_core_session_t *session = NULL;
char *argv[4] = {0};
@@ -105,7 +121,7 @@ static switch_status_t pause_function(char *cmd, char *out, size_t outlen)
argc = switch_separate_string(cmd, ' ', argv, (sizeof(argv) / sizeof(argv[0])));
if (argc < 2) {
snprintf(out, outlen, "Invalid Parameters\n");
stream->write_function(stream, "Invalid Parameters\n");
} else {
char *uuid = argv[0];
char *dest = argv[1];
@@ -122,66 +138,32 @@ static switch_status_t pause_function(char *cmd, char *out, size_t outlen)
switch_core_session_rwunlock(session);
} else {
snprintf(out, outlen, "No Such Channel!\n");
stream->write_function(stream, "No Such Channel!\n");
}
}
return SWITCH_STATUS_SUCCESS;
}
struct show_return {
char *out;
size_t remaining;
};
static int show_callback(void *pArg, int argc, char **argv, char **columnNames){
struct show_return *returnval = (struct show_return *) pArg;
char temp[1024];
size_t len;
switch_stream_handle_t *stream = (switch_stream_handle_t *) pArg;
sprintf(temp, "%s\n", argv[1]);
len = strlen(temp);
if (len < returnval->remaining) {
strcpy(returnval->out, temp);
returnval->remaining -= len;
returnval->out += len;
}
stream->write_function(stream, "%s\n", argv[1]);
return 0;
}
static switch_status_t status_function(char *cmd, char *out, size_t outlen)
{
switch_core_time_duration_t duration;
switch_core_measure_time(switch_core_uptime(), &duration);
snprintf(out, outlen, "<b>UP %u year(s), %u day(s), %u hour(s), %u minute(s), %u second(s), %u millisecond(s), %u microsecond(s)</b>\n",
duration.yr,
duration.day,
duration.hr,
duration.min,
duration.sec,
duration.ms,
duration.mms
);
return SWITCH_STATUS_SUCCESS;
}
static switch_status_t show_function(char *cmd, char *out, size_t outlen)
static switch_status_t show_function(char *cmd, switch_stream_handle_t *stream)
{
char sql[1024];
char *errmsg;
struct show_return returnval;
switch_core_db_t *db = switch_core_db_handle();
sprintf (sql, "select * from interfaces");
returnval.out = out;
returnval.remaining = outlen;
switch_core_db_exec(db, sql, show_callback, &returnval, &errmsg);
switch_core_db_exec(db, sql, show_callback, stream, &errmsg);
if (errmsg) {
snprintf(out, outlen, "SQL ERR [%s]\n",errmsg);
stream->write_function(stream, "SQL ERR [%s]\n",errmsg);
switch_core_db_free(errmsg);
errmsg = NULL;
}
@@ -234,7 +216,6 @@ static switch_api_interface_t commands_api_interface = {
/*.next */ &load_api_interface
};
static const switch_loadable_module_interface_t mod_commands_module_interface = {
/*.module_name */ modname,
/*.endpoint_interface */ NULL,
@@ -57,7 +57,7 @@ static void load_config(void)
switch_xml_t cfg, xml, settings, param;
if (!(xml = switch_xml_open_cfg(cf, &cfg))) {
if (!(xml = switch_xml_open_cfg(cf, &cfg, NULL))) {
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "open of %s failed\n", cf);
return;
}
@@ -131,7 +131,7 @@ static switch_caller_extension_t *dialplan_hunt(switch_core_session_t *session)
char *exten_name = NULL;
switch_xml_t cfg, xml, xcontext, xexten, xaction, xcond;
char *context = NULL;
char params[1024];
channel = switch_core_session_get_channel(session);
if ((caller_profile = switch_channel_get_caller_profile(channel))) {
@@ -142,10 +142,10 @@ static switch_caller_extension_t *dialplan_hunt(switch_core_session_t *session)
}
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "Processing %s->%s!\n", caller_profile->caller_id_name,
caller_profile->destination_number);
caller_profile->destination_number);
if (!(xml = switch_xml_open_cfg(cf, &cfg))) {
snprintf(params, sizeof(params), "dest=%s", caller_profile->destination_number);
if (!(xml = switch_xml_open_cfg(cf, &cfg, params))) {
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "open of %s failed\n", cf);
switch_channel_hangup(channel, SWITCH_CAUSE_DESTINATION_OUT_OF_ORDER);
return NULL;
+11 -11
View File
@@ -148,8 +148,8 @@ SWITCH_DECLARE_GLOBAL_STRING_FUNC(set_global_dialplan, globals.dialplan);
SWITCH_DECLARE_GLOBAL_STRING_FUNC(set_global_codec_string, globals.codec_string);
SWITCH_DECLARE_GLOBAL_STRING_FUNC(set_global_codec_rates_string, globals.codec_rates_string);
static switch_status_t dl_login(char *arg, char *out, size_t outlen);
static switch_status_t dl_logout(char *profile_name, char *out, size_t outlen);
static switch_status_t dl_login(char *arg, switch_stream_handle_t *stream);
static switch_status_t dl_logout(char *profile_name, switch_stream_handle_t *stream);
static switch_status_t channel_on_init(switch_core_session_t *session);
static switch_status_t channel_on_hangup(switch_core_session_t *session);
static switch_status_t channel_on_ring(switch_core_session_t *session);
@@ -1222,20 +1222,20 @@ static void set_profile_val(struct mdl_profile *profile, char *var, char *val)
}
}
static switch_status_t dl_logout(char *profile_name, char *out, size_t outlen)
static switch_status_t dl_logout(char *profile_name, switch_stream_handle_t *stream)
{
struct mdl_profile *profile;
if ((profile = switch_core_hash_find(globals.profile_hash, profile_name))) {
ldl_handle_stop(profile->handle);
snprintf(out, outlen, "OK\n");
stream->write_function(stream, "OK\n");
} else {
snprintf(out, outlen, "NO SUCH PROFILE %s\n", profile_name);
stream->write_function(stream, "NO SUCH PROFILE %s\n", profile_name);
}
return SWITCH_STATUS_SUCCESS;
}
static switch_status_t dl_login(char *arg, char *out, size_t outlen)
static switch_status_t dl_login(char *arg, switch_stream_handle_t *stream)
{
char *argv[10] = {0};
int argc = 0;
@@ -1244,7 +1244,7 @@ static switch_status_t dl_login(char *arg, char *out, size_t outlen)
int x;
if (switch_strlen_zero(arg)) {
snprintf(out, outlen, "FAIL\n");
stream->write_function(stream, "FAIL\n");
return SWITCH_STATUS_SUCCESS;
}
@@ -1259,7 +1259,7 @@ static switch_status_t dl_login(char *arg, char *out, size_t outlen)
if (profile) {
if (switch_test_flag(profile, TFLAG_IO)) {
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Profile already exists.");
snprintf(out, outlen, "Profile already exists\n");
stream->write_function(stream, "Profile already exists\n");
return SWITCH_STATUS_SUCCESS;
}
@@ -1277,9 +1277,9 @@ static switch_status_t dl_login(char *arg, char *out, size_t outlen)
}
if (profile && init_profile(profile, 1) == SWITCH_STATUS_SUCCESS) {
snprintf(out, outlen, "OK\n");
stream->write_function(stream, "OK\n");
} else {
snprintf(out, outlen, "FAIL\n");
stream->write_function(stream, "FAIL\n");
}
return SWITCH_STATUS_SUCCESS;
@@ -1298,7 +1298,7 @@ static switch_status_t load_config(void)
switch_core_hash_init(&globals.profile_hash, module_pool);
if (!(xml = switch_xml_open_cfg(cf, &cfg))) {
if (!(xml = switch_xml_open_cfg(cf, &cfg, NULL))) {
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "open of %s failed\n", cf);
return SWITCH_STATUS_TERM;
}
+1 -1
View File
@@ -1609,7 +1609,7 @@ static int config_exosip(int reload)
globals.bytes_per_frame = DEFAULT_BYTES_PER_FRAME;
if (!(xml = switch_xml_open_cfg(cf, &cfg))) {
if (!(xml = switch_xml_open_cfg(cf, &cfg, NULL))) {
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "open of %s failed\n", cf);
return SWITCH_STATUS_TERM;
}
+1 -1
View File
@@ -822,7 +822,7 @@ static switch_status_t load_config(void)
memset(&globals, 0, sizeof(globals));
if (!(xml = switch_xml_open_cfg(cf, &cfg))) {
if (!(xml = switch_xml_open_cfg(cf, &cfg, NULL))) {
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "open of %s failed\n", cf);
return SWITCH_STATUS_TERM;
}
+1 -1
View File
@@ -352,7 +352,7 @@ SWITCH_MOD_DECLARE(switch_status_t) switch_module_load(const switch_loadable_mod
memset(&globals, 0, sizeof(globals));
if (!(xml = switch_xml_open_cfg(cf, &cfg))) {
if (!(xml = switch_xml_open_cfg(cf, &cfg, NULL))) {
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "open of %s failed\n", cf);
return SWITCH_STATUS_TERM;
}
+25 -25
View File
@@ -115,11 +115,11 @@ SWITCH_DECLARE_GLOBAL_STRING_FUNC(set_global_dialplan, globals.dialplan)
static int dump_info(void);
static switch_status_t load_config(void);
static int get_dev_by_name(char *name, int in);
static switch_status_t place_call(char *dest, char *out, size_t outlen);
static switch_status_t hup_call(char *callid, char *out, size_t outlen);
static switch_status_t call_info(char *callid, char *out, size_t outlen);
static switch_status_t send_dtmf(char *callid, char *out, size_t outlen);
static switch_status_t answer_call(char *callid, char *out, size_t outlen);
static switch_status_t place_call(char *dest, switch_stream_handle_t *stream);
static switch_status_t hup_call(char *callid, switch_stream_handle_t *stream);
static switch_status_t call_info(char *callid, switch_stream_handle_t *stream);
static switch_status_t send_dtmf(char *callid, switch_stream_handle_t *stream);
static switch_status_t answer_call(char *callid, switch_stream_handle_t *stream);
/*
State methods they get called when the state changes to the specific state
@@ -571,7 +571,7 @@ static switch_status_t load_config(void)
memset(&globals, 0, sizeof(globals));
if (!(xml = switch_xml_open_cfg(cf, &cfg))) {
if (!(xml = switch_xml_open_cfg(cf, &cfg, NULL))) {
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "open of %s failed\n", cf);
return SWITCH_STATUS_TERM;
}
@@ -794,7 +794,7 @@ static switch_status_t engage_device(struct private_object *tech_pvt)
return SWITCH_STATUS_FALSE;
}
static switch_status_t place_call(char *dest, char *out, size_t outlen)
static switch_status_t place_call(char *dest, switch_stream_handle_t *stream)
{
switch_core_session_t *session;
switch_status_t status = SWITCH_STATUS_FALSE;
@@ -804,8 +804,8 @@ static switch_status_t place_call(char *dest, char *out, size_t outlen)
return SWITCH_STATUS_FALSE;
}
strncpy(out, "FAIL", outlen - 1);
stream->write_function(stream, "FAIL");
if ((session = switch_core_session_request(&channel_endpoint_interface, NULL)) != 0) {
struct private_object *tech_pvt;
switch_channel_t *channel;
@@ -838,14 +838,14 @@ static switch_status_t place_call(char *dest, char *out, size_t outlen)
if ((status = engage_device(tech_pvt)) == SWITCH_STATUS_SUCCESS) {
switch_channel_set_state(channel, CS_INIT);
switch_core_session_thread_launch(tech_pvt->session);
snprintf(out, outlen, "SUCCESS:%s:%s", tech_pvt->call_id, switch_core_session_get_uuid(tech_pvt->session));
stream->write_function(stream, "SUCCESS:%s:%s", tech_pvt->call_id, switch_core_session_get_uuid(tech_pvt->session));
}
}
return status;
}
static switch_status_t hup_call(char *callid, char *out, size_t outlen)
static switch_status_t hup_call(char *callid, switch_stream_handle_t *stream)
{
struct private_object *tech_pvt;
switch_channel_t *channel = NULL;
@@ -869,7 +869,7 @@ static switch_status_t hup_call(char *callid, char *out, size_t outlen)
i++;
}
snprintf(out, outlen, "HUNGUP: %d", i);
stream->write_function(stream, "HUNGUP: %d", i);
return SWITCH_STATUS_SUCCESS;
}
@@ -880,16 +880,16 @@ static switch_status_t hup_call(char *callid, char *out, size_t outlen)
assert(channel != NULL);
switch_channel_hangup(channel, SWITCH_CAUSE_NORMAL_CLEARING);
strncpy(out, "OK", outlen - 1);
stream->write_function(stream, "OK");
} else {
strncpy(out, "NO SUCH CALL", outlen - 1);
stream->write_function(stream, "NO SUCH CALL");
}
return SWITCH_STATUS_SUCCESS;
}
static switch_status_t send_dtmf(char *callid, char *out, size_t outlen)
static switch_status_t send_dtmf(char *callid, switch_stream_handle_t *stream)
{
struct private_object *tech_pvt = NULL;
switch_channel_t *channel = NULL;
@@ -905,15 +905,15 @@ static switch_status_t send_dtmf(char *callid, char *out, size_t outlen)
channel = switch_core_session_get_channel(tech_pvt->session);
assert(channel != NULL);
switch_channel_queue_dtmf(channel, dtmf);
strncpy(out, "OK", outlen - 1);
stream->write_function(stream, "OK");
} else {
strncpy(out, "NO SUCH CALL", outlen - 1);
stream->write_function(stream, "NO SUCH CALL");
}
return SWITCH_STATUS_SUCCESS;
}
static switch_status_t answer_call(char *callid, char *out, size_t outlen)
static switch_status_t answer_call(char *callid, switch_stream_handle_t *stream)
{
struct private_object *tech_pvt = NULL;
switch_channel_t *channel = NULL;
@@ -924,20 +924,20 @@ static switch_status_t answer_call(char *callid, char *out, size_t outlen)
switch_set_flag(tech_pvt, TFLAG_ANSWER);
switch_channel_answer(channel);
} else {
strncpy(out, "NO SUCH CALL", outlen - 1);
stream->write_function(stream, "NO SUCH CALL");
}
return SWITCH_STATUS_SUCCESS;
}
static void print_info(struct private_object *tech_pvt, char *out, size_t outlen)
static void print_info(struct private_object *tech_pvt, switch_stream_handle_t *stream)
{
switch_channel_t *channel = NULL;
channel = switch_core_session_get_channel(tech_pvt->session);
assert(channel != NULL);
snprintf(out, outlen, "CALL %s\t%s\t%s\t%s\t%s\n",
tech_pvt->call_id,
stream->write_function(stream, "CALL %s\t%s\t%s\t%s\t%s\n",
tech_pvt->call_id,
tech_pvt->caller_profile->caller_id_name ? tech_pvt->caller_profile->caller_id_name : "n/a",
tech_pvt->caller_profile->caller_id_number ? tech_pvt->caller_profile->caller_id_number : "n/a",
tech_pvt->caller_profile->destination_number ? tech_pvt->caller_profile->destination_number : "n/a",
@@ -945,7 +945,7 @@ static void print_info(struct private_object *tech_pvt, char *out, size_t outlen
}
static switch_status_t call_info(char *callid, char *out, size_t outlen)
static switch_status_t call_info(char *callid, switch_stream_handle_t *stream)
{
struct private_object *tech_pvt;
switch_hash_index_t *hi;
@@ -954,12 +954,12 @@ static switch_status_t call_info(char *callid, char *out, size_t outlen)
for (hi = apr_hash_first(module_pool, globals.call_hash); hi; hi = switch_hash_next(hi)) {
switch_hash_this(hi, NULL, NULL, &val);
tech_pvt = val;
print_info(tech_pvt, out + strlen(out), outlen - strlen(out));
print_info(tech_pvt, stream);
}
} else if (callid && (tech_pvt = switch_core_hash_find(globals.call_hash, callid)) != 0) {
print_info(tech_pvt, out, outlen);
} else {
strncpy(out, "NO SUCH CALL", outlen - 1);
stream->write_function(stream, "NO SUCH CALL");
}
return SWITCH_STATUS_SUCCESS;
+1 -1
View File
@@ -1293,7 +1293,7 @@ static switch_status_t config_wanpipe(int reload)
globals.dtmf_off = 50;
if (!(xml = switch_xml_open_cfg(cf, &cfg))) {
if (!(xml = switch_xml_open_cfg(cf, &cfg, NULL))) {
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "open of %s failed\n", cf);
return SWITCH_STATUS_TERM;
}
+1 -1
View File
@@ -1308,7 +1308,7 @@ SWITCH_MOD_DECLARE(switch_status_t) switch_module_load(const switch_loadable_mod
memset(&globals, 0, sizeof(globals));
globals.next_woomera_port = WOOMERA_MIN_PORT;
if (!(xml = switch_xml_open_cfg(cf, &cfg))) {
if (!(xml = switch_xml_open_cfg(cf, &cfg, NULL))) {
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "open of %s failed\n", cf);
return SWITCH_STATUS_TERM;
}
@@ -54,7 +54,7 @@ static switch_status_t load_config(void)
char *cf = "event_multicast.conf";
switch_xml_t cfg, xml, settings, param;
if (!(xml = switch_xml_open_cfg(cf, &cfg))) {
if (!(xml = switch_xml_open_cfg(cf, &cfg, NULL))) {
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "open of %s failed\n", cf);
return SWITCH_STATUS_TERM;
}
@@ -104,7 +104,7 @@ SWITCH_DECLARE_GLOBAL_STRING_FUNC(set_global_jid, globals.jid)
memset(&globals, 0, sizeof(globals));
if (!(xml = switch_xml_open_cfg(cf, &cfg))) {
if (!(xml = switch_xml_open_cfg(cf, &cfg, NULL))) {
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "open of %s failed\n", cf);
return SWITCH_STATUS_TERM;
}
@@ -199,7 +199,7 @@ static switch_status_t load_config(void)
sw_discovery_oid *oid;
switch_xml_t cfg, xml, settings, param;
if (!(xml = switch_xml_open_cfg(cf, &cfg))) {
if (!(xml = switch_xml_open_cfg(cf, &cfg, NULL))) {
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "open of %s failed\n", cf);
return SWITCH_STATUS_TERM;
}
@@ -1791,8 +1791,13 @@ static JSBool js_api_execute(JSContext *cx, JSObject *obj, uintN argc, jsval *ar
if (argc > 1) {
char *cmd = JS_GetStringBytes(JS_ValueToString(cx, argv[0]));
char *arg = JS_GetStringBytes(JS_ValueToString(cx, argv[1]));
switch_stream_handle_t stream = {0};
char retbuf[2048] = "";
switch_api_execute(cmd, arg, retbuf, sizeof(retbuf));
stream.data = retbuf;
stream.end = stream.data;
stream.data_size = sizeof(retbuf);
switch_api_execute(cmd, arg, &stream);
*rval = STRING_TO_JSVAL (JS_NewStringCopyZ(cx, retbuf));
} else {
*rval = STRING_TO_JSVAL (JS_NewStringCopyZ(cx, ""));
@@ -2149,16 +2154,16 @@ static void js_thread_launch(char *text)
}
static switch_status_t launch_async(char *text, char *out, size_t outlen)
static switch_status_t launch_async(char *text, switch_stream_handle_t *stream)
{
if (switch_strlen_zero(text)) {
switch_copy_string(out, "INVALID", outlen);
stream->write_function(stream, "INVALID");
return SWITCH_STATUS_SUCCESS;
}
js_thread_launch(text);
switch_copy_string(out, "OK", outlen);
stream->write_function(stream, "OK");
return SWITCH_STATUS_SUCCESS;
}
+1 -1
View File
@@ -83,7 +83,7 @@ static switch_status_t config_logger(void)
char *cf = "console.conf";
switch_xml_t cfg, xml, settings, param;
if (!(xml = switch_xml_open_cfg(cf, &cfg))) {
if (!(xml = switch_xml_open_cfg(cf, &cfg, NULL))) {
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "open of %s failed\n", cf);
return SWITCH_STATUS_TERM;
}
+46 -26
View File
@@ -41,6 +41,7 @@
static const char modname[] = "mod_xml_rpc";
static struct {
int port;
uint8_t running;
@@ -65,16 +66,18 @@ static size_t file_callback(void *ptr, size_t size, size_t nmemb, void *data)
static switch_xml_t xml_url_fetch(char *section,
char *tag_name,
char *key_name,
char *key_value)
char *tag_name,
char *key_name,
char *key_value,
char *params)
{
char url[1024] = "", filename[1024] = "";
CURL *curl_handle = NULL;
struct config_data config_data;
switch_xml_t xml;
snprintf(url, sizeof(url), "%s?section=%s&tag_name=%s&key_name=%s&key_value=%s\n", globals.url, section, tag_name, key_name, key_value);
snprintf(url, sizeof(url), "%s?section=%s&tag_name=%s&key_name=%s&key_value=%s%s%s\n",
globals.url, section, tag_name, key_name, key_value, params ? "&" : "", params ? params : "");
srand(time(NULL) + strlen(url));
snprintf(filename, sizeof(filename), "%s%04x.tmp", SWITCH_GLOBAL_dirs.temp_dir, (rand() & 0xffff));
curl_global_init(CURL_GLOBAL_ALL);
@@ -126,7 +129,7 @@ static switch_status_t do_config(void)
char *cf = "xml_rpc.conf";
switch_xml_t cfg, xml, settings, param;
if (!(xml = switch_xml_open_cfg(cf, &cfg))) {
if (!(xml = switch_xml_open_cfg(cf, &cfg, NULL))) {
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "open of %s failed\n", cf);
return SWITCH_STATUS_TERM;
}
@@ -171,13 +174,37 @@ SWITCH_MOD_DECLARE(switch_status_t) switch_module_load(const switch_loadable_mod
}
#define CMDLEN 10240
static switch_status_t http_stream_write(switch_stream_handle_t *handle, char *fmt, ...)
{
va_list ap;
TSession *r = handle->data;
int ret = 0;
char *data;
va_start(ap, fmt);
#ifdef HAVE_VASPRINTF
ret = vasprintf(&data, fmt, ap);
#else
if ((data = (char *) malloc(2048))) {
vsnprintf(data, 2048, fmt, ap);
}
#endif
va_end(ap);
if (data) {
ret = 0;
HTTPWrite(r, data, strlen(data));
free(data);
}
return ret ? SWITCH_STATUS_FALSE : SWITCH_STATUS_SUCCESS;
}
abyss_bool HandleHook(TSession *r)
{
char *m = "text/html";
char *retbuf = malloc(CMDLEN);
char *command, *arg;
char *ret = NULL;
switch_stream_handle_t stream = {0};
if(strncmp(r->uri, "/api/", 5)) {
return FALSE;
@@ -191,33 +218,22 @@ abyss_bool HandleHook(TSession *r)
}
ResponseChunked(r);
ResponseStatus(r,200);
memset(retbuf, 0, CMDLEN);
switch_api_execute(command, arg, retbuf, CMDLEN);
if (!strncasecmp(retbuf, "content-type: ", 14)) {
m = retbuf + 14;
if ((ret = strchr(m, '\n'))) {
*ret++ = '\0';
}
}
if (!ret) {
ret = retbuf;
}
ResponseContentType(r, m);
ResponseWrite(r);
HTTPWrite(r, ret , strlen(ret));
stream.data = r;
stream.write_function = http_stream_write;
switch_api_execute(command, arg, &stream);
HTTPWriteEnd(r);
free(command);
free(retbuf);
return TRUE;
}
#define CMDLEN 1024 * 256
static xmlrpc_value *freeswitch_api(xmlrpc_env *const envP, xmlrpc_value *const paramArrayP, void *const userData)
{
char *command, *arg;
char *retbuf = malloc(CMDLEN);
switch_stream_handle_t stream = {0};
xmlrpc_value *val;
/* Parse our argument array. */
@@ -227,7 +243,11 @@ static xmlrpc_value *freeswitch_api(xmlrpc_env *const envP, xmlrpc_value *const
}
memset(retbuf, 0, CMDLEN);
switch_api_execute(command, arg, retbuf, CMDLEN);
stream.data = retbuf;
stream.end = stream.data;
stream.data_size = CMDLEN;
stream.write_function = switch_console_stream_write;
switch_api_execute(command, arg, &stream);
/* Return our result. */
val = xmlrpc_build_value(envP, "s", retbuf);