cleanups, simplify odbc ifdefs, remove some unnecessary var declarations, handle return values of unlink, whitespace cleanup.
git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@6804 d0543943-73ff-0310-b7d9-9358b9ac24b2
This commit is contained in:
parent
da8d9bc20f
commit
531fe4de8f
|
@ -98,11 +98,7 @@ struct vm_profile {
|
|||
uint32_t record_threshold;
|
||||
uint32_t record_silence_hits;
|
||||
uint32_t record_sample_rate;
|
||||
#ifdef SWITCH_HAVE_ODBC
|
||||
switch_odbc_handle_t *master_odbc;
|
||||
#else
|
||||
void *filler1;
|
||||
#endif
|
||||
};
|
||||
typedef struct vm_profile vm_profile_t;
|
||||
|
||||
|
@ -115,8 +111,8 @@ static switch_status_t vm_execute_sql(vm_profile_t *profile, char *sql, switch_m
|
|||
switch_mutex_lock(mutex);
|
||||
}
|
||||
|
||||
#ifdef SWITCH_HAVE_ODBC
|
||||
if (profile->odbc_dsn) {
|
||||
#ifdef SWITCH_HAVE_ODBC
|
||||
SQLHSTMT stmt;
|
||||
if (switch_odbc_handle_exec(profile->master_odbc, sql, &stmt) != SWITCH_ODBC_SUCCESS) {
|
||||
char *err_str;
|
||||
|
@ -126,27 +122,21 @@ static switch_status_t vm_execute_sql(vm_profile_t *profile, char *sql, switch_m
|
|||
status = SWITCH_STATUS_FALSE;
|
||||
}
|
||||
SQLFreeHandle(SQL_HANDLE_STMT, stmt);
|
||||
} else {
|
||||
#endif
|
||||
} else {
|
||||
if (!(db = switch_core_db_open_file(profile->dbname))) {
|
||||
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Error Opening DB %s\n", profile->dbname);
|
||||
status = SWITCH_STATUS_FALSE;
|
||||
goto end;
|
||||
}
|
||||
|
||||
status = switch_core_db_persistant_execute(db, sql, 25);
|
||||
switch_core_db_close(db);
|
||||
|
||||
#ifdef SWITCH_HAVE_ODBC
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
end:
|
||||
if (mutex) {
|
||||
switch_mutex_unlock(mutex);
|
||||
}
|
||||
|
||||
return status;
|
||||
}
|
||||
|
||||
|
@ -165,21 +155,16 @@ static switch_bool_t vm_execute_sql_callback(vm_profile_t *profile,
|
|||
switch_mutex_lock(mutex);
|
||||
}
|
||||
|
||||
|
||||
#ifdef SWITCH_HAVE_ODBC
|
||||
if (profile->odbc_dsn) {
|
||||
#ifdef SWITCH_HAVE_ODBC
|
||||
switch_odbc_handle_callback_exec(profile->master_odbc, sql, callback, pdata);
|
||||
} else {
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
} else {
|
||||
if (!(db = switch_core_db_open_file(profile->dbname))) {
|
||||
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Error Opening DB %s\n", profile->dbname);
|
||||
goto end;
|
||||
}
|
||||
|
||||
|
||||
switch_core_db_exec(db, sql, callback, pdata, &errmsg);
|
||||
|
||||
if (errmsg) {
|
||||
|
@ -190,22 +175,13 @@ static switch_bool_t vm_execute_sql_callback(vm_profile_t *profile,
|
|||
if (db) {
|
||||
switch_core_db_close(db);
|
||||
}
|
||||
|
||||
#ifdef SWITCH_HAVE_ODBC
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
end:
|
||||
|
||||
if (mutex) {
|
||||
switch_mutex_unlock(mutex);
|
||||
}
|
||||
|
||||
|
||||
|
||||
return ret;
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
@ -225,7 +201,6 @@ static char vm_sql[] =
|
|||
" read_flags VARCHAR(255)\n"
|
||||
");\n";
|
||||
|
||||
|
||||
static char vm_pref_sql[] =
|
||||
"CREATE TABLE voicemail_prefs (\n"
|
||||
" user VARCHAR(255),\n"
|
||||
|
@ -234,9 +209,6 @@ static char vm_pref_sql[] =
|
|||
" greeting_path VARCHAR(255)\n"
|
||||
");\n";
|
||||
|
||||
|
||||
|
||||
|
||||
static switch_status_t load_config(void)
|
||||
{
|
||||
char *cf = "voicemail.conf";
|
||||
|
@ -323,8 +295,7 @@ static switch_status_t load_config(void)
|
|||
email_headers = switch_core_strdup(globals.pool, param->txt);
|
||||
}
|
||||
|
||||
|
||||
for (param = switch_xml_child(x_email, "param"); param; param = param->next) {
|
||||
for (param = switch_xml_child(x_email, "param"); param; param = param->next) {
|
||||
char *var, *val;
|
||||
|
||||
var = (char *) switch_xml_attr_soft(param, "name");
|
||||
|
@ -371,8 +342,7 @@ static switch_status_t load_config(void)
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
for (param = switch_xml_child(x_profile, "param"); param; param = param->next) {
|
||||
for (param = switch_xml_child(x_profile, "param"); param; param = param->next) {
|
||||
char *var, *val;
|
||||
|
||||
var = (char *) switch_xml_attr_soft(param, "name");
|
||||
|
@ -551,8 +521,8 @@ static switch_status_t load_config(void)
|
|||
} else {
|
||||
profile->dbname = switch_core_sprintf(globals.pool, "voicemail_%s", name);
|
||||
}
|
||||
#ifdef SWITCH_HAVE_ODBC
|
||||
if (profile->odbc_dsn) {
|
||||
#ifdef SWITCH_HAVE_ODBC
|
||||
if (!(profile->master_odbc = switch_odbc_handle_new(profile->odbc_dsn, profile->odbc_user, profile->odbc_pass))) {
|
||||
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CRIT, "Cannot Open ODBC Database!\n");
|
||||
continue;
|
||||
|
@ -573,8 +543,8 @@ static switch_status_t load_config(void)
|
|||
switch_odbc_handle_exec(profile->master_odbc, "drop table voicemail_data", NULL);
|
||||
switch_odbc_handle_exec(profile->master_odbc, vm_pref_sql, NULL);
|
||||
}
|
||||
} else {
|
||||
#endif
|
||||
} else {
|
||||
if ((db = switch_core_db_open_file(profile->dbname))) {
|
||||
switch_core_db_test_reactive(db, "select count(message_len) from voicemail_data", "drop table voicemail_data", vm_sql);
|
||||
switch_core_db_test_reactive(db, "select count(user) from voicemail_prefs", "drop table voicemail_data", vm_pref_sql);
|
||||
|
@ -583,9 +553,7 @@ static switch_status_t load_config(void)
|
|||
continue;
|
||||
}
|
||||
switch_core_db_close(db);
|
||||
#ifdef SWITCH_HAVE_ODBC
|
||||
}
|
||||
#endif
|
||||
|
||||
profile->web_head = web_head;
|
||||
profile->web_tail = web_tail;
|
||||
|
@ -633,23 +601,17 @@ static switch_status_t load_config(void)
|
|||
|
||||
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "Added Profile %s\n", profile->name);
|
||||
switch_core_hash_insert(globals.profile_hash, profile->name, profile);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
end:
|
||||
|
||||
switch_xml_free(xml);
|
||||
|
||||
return SWITCH_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
|
||||
static switch_status_t cancel_on_dtmf(switch_core_session_t *session, void *input, switch_input_type_t itype, void *buf, unsigned int buflen)
|
||||
{
|
||||
|
||||
|
||||
switch (itype) {
|
||||
case SWITCH_INPUT_TYPE_DTMF:
|
||||
{
|
||||
|
@ -678,8 +640,6 @@ typedef struct call_control cc_t;
|
|||
|
||||
static switch_status_t control_playback(switch_core_session_t *session, void *input, switch_input_type_t itype, void *buf, unsigned int buflen)
|
||||
{
|
||||
|
||||
|
||||
switch (itype) {
|
||||
case SWITCH_INPUT_TYPE_DTMF:
|
||||
{
|
||||
|
@ -707,9 +667,9 @@ static switch_status_t control_playback(switch_core_session_t *session, void *in
|
|||
}
|
||||
|
||||
if (*dtmf == *cc->profile->restart_key) {
|
||||
unsigned int pos = 0;
|
||||
unsigned int seekpos = 0;
|
||||
fh->speed = 0;
|
||||
switch_core_file_seek(fh, &pos, 0, SEEK_SET);
|
||||
switch_core_file_seek(fh, &seekpos, 0, SEEK_SET);
|
||||
return SWITCH_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
|
@ -724,7 +684,6 @@ static switch_status_t control_playback(switch_core_session_t *session, void *in
|
|||
switch_core_file_seek(fh, &pos, fh->pos - samps, SEEK_SET);
|
||||
return SWITCH_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
}
|
||||
break;
|
||||
default:
|
||||
|
@ -761,7 +720,6 @@ typedef enum {
|
|||
VM_CHECK_LISTEN
|
||||
} vm_check_state_t;
|
||||
|
||||
|
||||
#define VM_ACK_MACRO "voicemail_ack"
|
||||
#define VM_SAY_DATE_MACRO "voicemail_say_date"
|
||||
#define VM_PLAY_GREETING_MACRO "voicemail_play_greeting"
|
||||
|
@ -791,7 +749,6 @@ typedef enum {
|
|||
#define URGENT_FLAG_STRING "A_URGENT"
|
||||
#define NORMAL_FLAG_STRING "B_NORMAL"
|
||||
|
||||
|
||||
static switch_status_t vm_macro_get(switch_core_session_t *session,
|
||||
char *macro,
|
||||
char *macro_arg,
|
||||
|
@ -808,7 +765,7 @@ static switch_status_t vm_macro_get(switch_core_session_t *session,
|
|||
switch_size_t bslen;
|
||||
|
||||
channel = switch_core_session_get_channel(session);
|
||||
assert(channel != NULL);
|
||||
switch_assert(channel != NULL);
|
||||
|
||||
if (buf && buflen) {
|
||||
memset(buf, 0, buflen);
|
||||
|
@ -863,7 +820,9 @@ static int sql2str_callback(void *pArg, int argc, char **argv, char **columnName
|
|||
static int unlink_callback(void *pArg, int argc, char **argv, char **columnNames)
|
||||
{
|
||||
if (argv[0]) {
|
||||
unlink(argv[0]);
|
||||
if (unlink(argv[0]) != 0) {
|
||||
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "failed to delete file [%s]\n", argv[0]);
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
@ -887,7 +846,7 @@ static switch_status_t create_file(switch_core_session_t *session, vm_profile_t
|
|||
cc_t cc = { 0 };
|
||||
switch_codec_t *read_codec;
|
||||
channel = switch_core_session_get_channel(session);
|
||||
assert(channel != NULL);
|
||||
switch_assert(channel != NULL);
|
||||
|
||||
read_codec = switch_core_session_get_read_codec(session);
|
||||
|
||||
|
@ -898,7 +857,6 @@ static switch_status_t create_file(switch_core_session_t *session, vm_profile_t
|
|||
profile->save_file_key,
|
||||
profile->record_file_key);
|
||||
|
||||
|
||||
record_file:
|
||||
args.input_callback = cancel_on_dtmf;
|
||||
TRY_CODE(switch_ivr_phrase_macro(session, macro_name, NULL, NULL, NULL));
|
||||
|
@ -920,9 +878,8 @@ static switch_status_t create_file(switch_core_session_t *session, vm_profile_t
|
|||
cc.fh = &fh;
|
||||
args.buf = &cc;
|
||||
switch_ivr_play_file(session, &fh, file_path, &args);
|
||||
|
||||
|
||||
while(switch_channel_ready(channel)) {
|
||||
|
||||
while(switch_channel_ready(channel)) {
|
||||
if (*cc.buf) {
|
||||
*input = *cc.buf;
|
||||
*(input+1) = '\0';
|
||||
|
@ -945,7 +902,6 @@ static switch_status_t create_file(switch_core_session_t *session, vm_profile_t
|
|||
}
|
||||
|
||||
end:
|
||||
|
||||
return status;
|
||||
}
|
||||
|
||||
|
@ -990,8 +946,7 @@ static int listen_callback(void *pArg, int argc, char **argv, char **columnNames
|
|||
switch_copy_string(cbt->message_len, argv[9], 255);
|
||||
switch_copy_string(cbt->flags, argv[10], 255);
|
||||
switch_copy_string(cbt->read_flags, argv[11], 255);
|
||||
|
||||
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
@ -1005,9 +960,8 @@ static void message_count(vm_profile_t *profile, const char *myid, const char *d
|
|||
|
||||
cbt.buf = msg_count;
|
||||
cbt.len = sizeof(msg_count);
|
||||
|
||||
|
||||
switch_snprintf(sql, sizeof(sql),
|
||||
switch_snprintf(sql, sizeof(sql),
|
||||
"select count(*) from voicemail_data where user='%s' and domain='%s' and in_folder='%s' and read_epoch=0",
|
||||
myid,
|
||||
domain_name,
|
||||
|
@ -1032,8 +986,7 @@ static void message_count(vm_profile_t *profile, const char *myid, const char *d
|
|||
vm_execute_sql_callback(profile, profile->mutex, sql, sql2str_callback, &cbt);
|
||||
*total_saved_messages = atoi(msg_count);
|
||||
|
||||
|
||||
switch_snprintf(sql, sizeof(sql),
|
||||
switch_snprintf(sql, sizeof(sql),
|
||||
"select count(*) from voicemail_data where user='%s' and domain='%s' and in_folder='%s' and read_epoch!=0 and read_flags='%s'",
|
||||
myid,
|
||||
domain_name,
|
||||
|
@ -1041,7 +994,6 @@ static void message_count(vm_profile_t *profile, const char *myid, const char *d
|
|||
URGENT_FLAG_STRING);
|
||||
vm_execute_sql_callback(profile, profile->mutex, sql, sql2str_callback, &cbt);
|
||||
*total_saved_urgent_messages = atoi(msg_count);
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
@ -1055,23 +1007,20 @@ static switch_status_t listen_file(switch_core_session_t *session, vm_profile_t
|
|||
switch_file_handle_t fh = { 0 };
|
||||
cc_t cc = { 0 };
|
||||
channel = switch_core_session_get_channel(session);
|
||||
assert(channel != NULL);
|
||||
|
||||
switch_assert(channel != NULL);
|
||||
|
||||
if(switch_channel_ready(channel)) {
|
||||
if(switch_channel_ready(channel)) {
|
||||
|
||||
args.input_callback = cancel_on_dtmf;
|
||||
|
||||
|
||||
switch_snprintf(key_buf, sizeof(key_buf), "%s:%s:%s:%s:%s",
|
||||
switch_snprintf(key_buf, sizeof(key_buf), "%s:%s:%s:%s:%s",
|
||||
profile->listen_file_key,
|
||||
profile->save_file_key,
|
||||
profile->delete_file_key,
|
||||
profile->email_key,
|
||||
profile->callback_key);
|
||||
|
||||
|
||||
switch_snprintf(input, sizeof(input), "%s:%d", cbt->type == MSG_NEW ? "new" : "saved", cbt->want+1);
|
||||
switch_snprintf(input, sizeof(input), "%s:%d", cbt->type == MSG_NEW ? "new" : "saved", cbt->want+1);
|
||||
memset(&cc, 0, sizeof(cc));
|
||||
cc.profile = profile;
|
||||
args.buf = &cc;
|
||||
|
@ -1134,8 +1083,7 @@ static switch_status_t listen_file(switch_core_session_t *session, vm_profile_t
|
|||
priority = 1;
|
||||
}
|
||||
|
||||
|
||||
message_count(profile, cbt->user, cbt->domain, cbt->in_folder, &total_new_messages, &total_saved_messages,
|
||||
message_count(profile, cbt->user, cbt->domain, cbt->in_folder, &total_new_messages, &total_saved_messages,
|
||||
&total_new_urgent_messages, &total_saved_urgent_messages);
|
||||
|
||||
switch_time_exp_lt(&tm, atoi(cbt->created_epoch) * 1000000);
|
||||
|
@ -1258,10 +1206,9 @@ static void voicemail_check_main(switch_core_session_t *session, const char *pro
|
|||
char *email_vm = NULL;
|
||||
|
||||
channel = switch_core_session_get_channel(session);
|
||||
assert(channel != NULL);
|
||||
switch_assert(channel != NULL);
|
||||
|
||||
|
||||
if (!(profile = switch_core_hash_find(globals.profile_hash, profile_name))) {
|
||||
if (!(profile = switch_core_hash_find(globals.profile_hash, profile_name))) {
|
||||
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Error invalid profile %s\n", profile_name);
|
||||
return;
|
||||
}
|
||||
|
@ -1274,7 +1221,6 @@ static void voicemail_check_main(switch_core_session_t *session, const char *pro
|
|||
status = switch_ivr_phrase_macro(session, VM_HELLO_MACRO, NULL, NULL, NULL);
|
||||
|
||||
while(switch_channel_ready(channel)) {
|
||||
|
||||
switch_ivr_sleep(session, 100);
|
||||
|
||||
switch(vm_check_state) {
|
||||
|
@ -1307,9 +1253,7 @@ static void voicemail_check_main(switch_core_session_t *session, const char *pro
|
|||
message_count(profile, myid, domain_name, myfolder, &total_new_messages, &total_saved_messages,
|
||||
&total_new_urgent_messages, &total_saved_urgent_messages);
|
||||
|
||||
|
||||
|
||||
if (total_new_urgent_messages > 0) {
|
||||
if (total_new_urgent_messages > 0) {
|
||||
switch_snprintf(msg_count, sizeof(msg_count), "%d:urgent-new", total_new_urgent_messages);
|
||||
TRY_CODE(switch_ivr_phrase_macro(session, VM_MESSAGE_COUNT_MACRO, msg_count, NULL, NULL));
|
||||
informed++;
|
||||
|
@ -1352,8 +1296,7 @@ static void voicemail_check_main(switch_core_session_t *session, const char *pro
|
|||
informed++;
|
||||
}
|
||||
|
||||
|
||||
vm_check_state = VM_CHECK_MENU;
|
||||
vm_check_state = VM_CHECK_MENU;
|
||||
}
|
||||
break;
|
||||
case VM_CHECK_PLAY_MESSAGES:
|
||||
|
@ -1405,8 +1348,7 @@ static void voicemail_check_main(switch_core_session_t *session, const char *pro
|
|||
vm_execute_sql(profile, sql, profile->mutex);
|
||||
vm_check_state = VM_CHECK_FOLDER_SUMMARY;
|
||||
|
||||
|
||||
message_count(profile, id, domain_name, myfolder, &total_new_messages, &total_saved_messages,
|
||||
message_count(profile, id, domain_name, myfolder, &total_new_messages, &total_saved_messages,
|
||||
&total_new_urgent_messages, &total_saved_urgent_messages);
|
||||
|
||||
if (switch_event_create(&event, SWITCH_EVENT_MESSAGE_WAITING) == SWITCH_STATUS_SUCCESS) {
|
||||
|
@ -1496,9 +1438,8 @@ static void voicemail_check_main(switch_core_session_t *session, const char *pro
|
|||
} else if (!strcmp(input, profile->record_greeting_key)) {
|
||||
int num;
|
||||
TRY_CODE(vm_macro_get(session, VM_CHOOSE_GREETING_MACRO, key_buf, input, sizeof(input), 1, "", &term, timeout));
|
||||
|
||||
|
||||
num = atoi(input);
|
||||
|
||||
num = atoi(input);
|
||||
if (num < 1 || num > 3) {
|
||||
TRY_CODE(switch_ivr_phrase_macro(session, VM_CHOOSE_GREETING_FAIL_MACRO, NULL, NULL, NULL));
|
||||
} else {
|
||||
|
@ -1518,7 +1459,6 @@ static void voicemail_check_main(switch_core_session_t *session, const char *pro
|
|||
switch_safe_free(file_path);
|
||||
switch_safe_free(sql);
|
||||
}
|
||||
|
||||
continue;
|
||||
}
|
||||
break;
|
||||
|
@ -1554,8 +1494,7 @@ static void voicemail_check_main(switch_core_session_t *session, const char *pro
|
|||
vm_check_state = VM_CHECK_PLAY_MESSAGES;
|
||||
}
|
||||
|
||||
|
||||
continue;
|
||||
continue;
|
||||
}
|
||||
break;
|
||||
case VM_CHECK_AUTH:
|
||||
|
@ -1587,8 +1526,7 @@ static void voicemail_check_main(switch_core_session_t *session, const char *pro
|
|||
caller_profile = switch_channel_get_caller_profile(channel);
|
||||
xtra = switch_mprintf("mailbox=%s&destination_number=%s&caller_id_number=%s",
|
||||
myid,caller_profile->destination_number,caller_profile->caller_id_number);
|
||||
|
||||
assert(xtra);
|
||||
switch_assert(xtra);
|
||||
|
||||
if (switch_xml_locate_user("id", myid, domain_name, switch_channel_get_variable(channel, "network_addr"),
|
||||
&x_domain_root, &x_domain, &x_user, xtra) != SWITCH_STATUS_SUCCESS) {
|
||||
|
@ -1658,16 +1596,14 @@ static void voicemail_check_main(switch_core_session_t *session, const char *pro
|
|||
SWITCH_PATH_SEPARATOR,
|
||||
myid);
|
||||
}
|
||||
|
||||
|
||||
if (switch_dir_make_recursive(dir_path, SWITCH_DEFAULT_DIR_PERMS, switch_core_session_get_pool(session)) != SWITCH_STATUS_SUCCESS) {
|
||||
|
||||
if (switch_dir_make_recursive(dir_path, SWITCH_DEFAULT_DIR_PERMS, switch_core_session_get_pool(session)) != SWITCH_STATUS_SUCCESS) {
|
||||
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Error creating %s\n", dir_path);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
vm_check_state = VM_CHECK_FOLDER_SUMMARY;
|
||||
vm_check_state = VM_CHECK_FOLDER_SUMMARY;
|
||||
} else {
|
||||
goto failed;
|
||||
}
|
||||
|
@ -1698,7 +1634,6 @@ static void voicemail_check_main(switch_core_session_t *session, const char *pro
|
|||
if (x_domain_root) {
|
||||
switch_xml_free(x_domain_root);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
@ -1740,7 +1675,7 @@ static switch_status_t voicemail_leave_main(switch_core_session_t *session, cons
|
|||
}
|
||||
|
||||
channel = switch_core_session_get_channel(session);
|
||||
assert(channel != NULL);
|
||||
switch_assert(channel != NULL);
|
||||
|
||||
caller_profile = switch_channel_get_caller_profile(channel);
|
||||
if(switch_strlen_zero(profile->storage_dir)) {
|
||||
|
@ -1764,14 +1699,13 @@ static switch_status_t voicemail_leave_main(switch_core_session_t *session, cons
|
|||
goto end;
|
||||
}
|
||||
|
||||
|
||||
if (id) {
|
||||
if (id) {
|
||||
int ok = 1;
|
||||
char *xtra = switch_mprintf("mailbox=%s", id);
|
||||
switch_xml_t x_domain, x_domain_root, x_user, x_params, x_param;
|
||||
const char *email_addr = NULL;
|
||||
|
||||
assert(xtra);
|
||||
switch_assert(xtra);
|
||||
x_user = x_domain = x_domain_root = NULL;
|
||||
if (switch_xml_locate_user("id", id, domain_name, switch_channel_get_variable(channel, "network_addr"),
|
||||
&x_domain_root, &x_domain, &x_user, xtra) == SWITCH_STATUS_SUCCESS) {
|
||||
|
@ -1802,9 +1736,8 @@ static switch_status_t voicemail_leave_main(switch_core_session_t *session, cons
|
|||
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "can't find user [%s@%s]\n", id, domain_name);
|
||||
ok = 0;
|
||||
}
|
||||
|
||||
|
||||
switch_safe_free(xtra);
|
||||
switch_safe_free(xtra);
|
||||
switch_xml_free(x_domain_root);
|
||||
if (!ok) {
|
||||
goto end;
|
||||
|
@ -1870,8 +1803,7 @@ static switch_status_t voicemail_leave_main(switch_core_session_t *session, cons
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
memset(&fh, 0, sizeof(fh));
|
||||
memset(&fh, 0, sizeof(fh));
|
||||
args.input_callback = control_playback;
|
||||
memset(&cc, 0, sizeof(cc));
|
||||
cc.profile = profile;
|
||||
|
@ -1945,16 +1877,12 @@ static switch_status_t voicemail_leave_main(switch_core_session_t *session, cons
|
|||
|
||||
end:
|
||||
|
||||
|
||||
if (send_mail && !switch_strlen_zero(email_vm)) {
|
||||
if (send_mail && !switch_strlen_zero(email_vm)) {
|
||||
switch_event_t *event;
|
||||
char *from;
|
||||
char *body;
|
||||
char *headers;
|
||||
char *header_string;
|
||||
switch_size_t retsize;
|
||||
switch_time_exp_t tm;
|
||||
char date[80] = "";
|
||||
char tmp[50]="";
|
||||
int total_new_messages = 0;
|
||||
int total_saved_messages = 0;
|
||||
|
@ -1991,9 +1919,7 @@ static switch_status_t voicemail_leave_main(switch_core_session_t *session, cons
|
|||
switch_channel_set_variable(channel, "voicemail_priority", tmp);
|
||||
switch_channel_set_variable(channel, "voicemail_email", email_vm);
|
||||
|
||||
|
||||
|
||||
l_duration = (long)message_len * 1000000;
|
||||
l_duration = (long)message_len * 1000000;
|
||||
switch_core_measure_time(l_duration, &duration);
|
||||
duration.day += duration.yr * 365;
|
||||
duration.hr += duration.day * 24;
|
||||
|
@ -2002,10 +1928,8 @@ static switch_status_t voicemail_leave_main(switch_core_session_t *session, cons
|
|||
duration.min,
|
||||
duration.sec
|
||||
);
|
||||
|
||||
|
||||
|
||||
switch_channel_set_variable(channel, "voicemail_message_len", duration_str);
|
||||
switch_channel_set_variable(channel, "voicemail_message_len", duration_str);
|
||||
|
||||
if (switch_strlen_zero(profile->email_from)) {
|
||||
from = switch_core_session_sprintf(session, "%s@%s", id, domain_name);
|
||||
|
@ -2036,8 +1960,7 @@ static switch_status_t voicemail_leave_main(switch_core_session_t *session, cons
|
|||
|
||||
header_string = switch_core_session_sprintf(session, "%s\nX-Voicemail-Length: %u", headers, message_len);
|
||||
|
||||
|
||||
if (switch_event_create(&event, SWITCH_EVENT_MESSAGE) == SWITCH_STATUS_SUCCESS) {
|
||||
if (switch_event_create(&event, SWITCH_EVENT_MESSAGE) == SWITCH_STATUS_SUCCESS) {
|
||||
switch_channel_event_set_data(channel, event);
|
||||
switch_event_add_header(event, SWITCH_STACK_BOTTOM, "Message-Type", "voicemail");
|
||||
switch_event_fire(&event);
|
||||
|
@ -2059,7 +1982,9 @@ static switch_status_t voicemail_leave_main(switch_core_session_t *session, cons
|
|||
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Sending message to %s\n", email_vm);
|
||||
switch_safe_free(body);
|
||||
if (email_delete) {
|
||||
unlink(file_path);
|
||||
if (unlink(file_path) != 0) {
|
||||
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "failed to delete file [%s]\n", file_path);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -2070,8 +1995,6 @@ static switch_status_t voicemail_leave_main(switch_core_session_t *session, cons
|
|||
}
|
||||
|
||||
return status;
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
@ -2091,7 +2014,7 @@ SWITCH_STANDARD_APP(voicemail_function)
|
|||
switch_channel_t *channel;
|
||||
|
||||
channel = switch_core_session_get_channel(session);
|
||||
assert(channel != NULL);
|
||||
switch_assert(channel != NULL);
|
||||
|
||||
if (switch_dir_make_recursive(SWITCH_GLOBAL_dirs.storage_dir, SWITCH_DEFAULT_DIR_PERMS, switch_core_session_get_pool(session)) != SWITCH_STATUS_SUCCESS) {
|
||||
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Error creating %s\n", SWITCH_GLOBAL_dirs.storage_dir);
|
||||
|
@ -2127,8 +2050,7 @@ SWITCH_STANDARD_APP(voicemail_function)
|
|||
id = argv[x++];
|
||||
}
|
||||
|
||||
|
||||
if ((auth_var = switch_channel_get_variable(channel, "voicemail_authorized")) && switch_true(auth_var)) {
|
||||
if ((auth_var = switch_channel_get_variable(channel, "voicemail_authorized")) && switch_true(auth_var)) {
|
||||
auth = 1;
|
||||
}
|
||||
|
||||
|
@ -2177,7 +2099,7 @@ static void message_query_handler(switch_event_t *event)
|
|||
} else {
|
||||
id = strdup(account);
|
||||
}
|
||||
assert(id);
|
||||
switch_assert(id);
|
||||
|
||||
if ((domain = strchr(id, '@'))) {
|
||||
*domain++ = '\0';
|
||||
|
@ -2215,8 +2137,6 @@ static void message_query_handler(switch_event_t *event)
|
|||
switch_event_fire(&new_event);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
#define VOICEMAIL_SYNTAX "rss [<host> <port> <uri> <user> <domain>]"
|
||||
|
@ -2240,7 +2160,9 @@ struct holder {
|
|||
static int del_callback(void *pArg, int argc, char **argv, char **columnNames)
|
||||
{
|
||||
if (argc > 8) {
|
||||
unlink(argv[8]);
|
||||
if (unlink(argv[8]) != 0) {
|
||||
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "failed to delete file [%s]\n", argv[8]);
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
@ -2281,12 +2203,9 @@ static int play_callback(void *pArg, int argc, char **argv, char **columnNames)
|
|||
}
|
||||
|
||||
holder->stream->raw_write_function(holder->stream, chunk, flen);
|
||||
|
||||
}
|
||||
|
||||
switch_file_close(fd);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -2309,8 +2228,6 @@ static void do_play(vm_profile_t *profile, char *user, char *domain, char *file,
|
|||
vm_execute_sql_callback(profile, profile->mutex, sql, play_callback, &holder);
|
||||
switch_core_destroy_memory_pool(&holder.pool);
|
||||
switch_safe_free(sql);
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
@ -2318,15 +2235,9 @@ static void do_del(vm_profile_t *profile, char *user, char *domain, char *file,
|
|||
{
|
||||
char *sql;
|
||||
struct holder holder;
|
||||
//char *uri, *host, *port;
|
||||
char *ref = NULL;
|
||||
|
||||
//host = port = uri = NULL;
|
||||
|
||||
if (stream->event) {
|
||||
//host = switch_event_get_header(stream->event, "http-host");
|
||||
//port = switch_event_get_header(stream->event, "http-port");
|
||||
//uri = switch_event_get_header(stream->event, "http-uri");
|
||||
ref = switch_event_get_header(stream->event, "http-referer");
|
||||
}
|
||||
|
||||
|
@ -2345,11 +2256,9 @@ static void do_del(vm_profile_t *profile, char *user, char *domain, char *file,
|
|||
stream->write_function(stream,"Content-type: text/html\n\n<h2>Message Deleted</h2>\n"
|
||||
"<META http-equiv=\"refresh\" content=\"1;URL=%s\">", ref);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
static int web_callback(void *pArg, int argc, char **argv, char **columnNames)
|
||||
{
|
||||
struct holder *holder = (struct holder *) pArg;
|
||||
|
@ -2381,8 +2290,7 @@ static int web_callback(void *pArg, int argc, char **argv, char **columnNames)
|
|||
l_duration = atol(argv[9]) * 1000000;
|
||||
}
|
||||
|
||||
|
||||
if ((fname = strrchr(argv[8], '/'))) {
|
||||
if ((fname = strrchr(argv[8], '/'))) {
|
||||
fname++;
|
||||
} else {
|
||||
fname = argv[8];
|
||||
|
@ -2430,9 +2338,7 @@ static int web_callback(void *pArg, int argc, char **argv, char **columnNames)
|
|||
switch_snprintf(title_b4, sizeof(title_b4), "%s <%s> %s", argv[5], argv[6], rss_date);
|
||||
switch_url_encode(title_b4, title_aft, sizeof(title_aft)-1);
|
||||
|
||||
|
||||
|
||||
holder->stream->write_function(holder->stream,
|
||||
holder->stream->write_function(holder->stream,
|
||||
"<br><object width=550 height=15 \n"
|
||||
"type=\"application/x-shockwave-flash\" \n"
|
||||
"data=\"http://%s:%s/pub/slim.swf?song_url=%s&player_title=%s\">\n"
|
||||
|
@ -2524,9 +2430,7 @@ static int rss_callback(void *pArg, int argc, char **argv, char **columnNames)
|
|||
x_link = switch_xml_add_child_d(holder->x_item, "fsvm:rmlink", 0);
|
||||
switch_xml_set_txt_d(x_link, del);
|
||||
|
||||
|
||||
|
||||
tmp = switch_mprintf("<![CDATA[Priority: %s<br>"
|
||||
tmp = switch_mprintf("<![CDATA[Priority: %s<br>"
|
||||
"Last Heard: %s<br>Duration: %s<br>"
|
||||
"<a href=%s>Delete This Message</a><br>"
|
||||
"]]>",
|
||||
|
@ -2536,17 +2440,13 @@ static int rss_callback(void *pArg, int argc, char **argv, char **columnNames)
|
|||
free(tmp);
|
||||
free(del);
|
||||
|
||||
|
||||
x_tmp = switch_xml_add_child_d(holder->x_item, "pubDate", 0);
|
||||
x_tmp = switch_xml_add_child_d(holder->x_item, "pubDate", 0);
|
||||
switch_xml_set_txt_d(x_tmp, rss_date);
|
||||
|
||||
x_tmp = switch_xml_add_child_d(holder->x_item, "itunes:duration", 0);
|
||||
switch_xml_set_txt_d(x_tmp, duration_str);
|
||||
|
||||
|
||||
|
||||
|
||||
x_tmp = switch_xml_add_child_d(holder->x_item, "guid", 0);
|
||||
x_tmp = switch_xml_add_child_d(holder->x_item, "guid", 0);
|
||||
switch_xml_set_txt_d(x_tmp, get);
|
||||
|
||||
x_link = switch_xml_add_child_d(holder->x_item, "link", 0);
|
||||
|
@ -2556,9 +2456,7 @@ static int rss_callback(void *pArg, int argc, char **argv, char **columnNames)
|
|||
switch_xml_set_attr_d(x_tmp, "url", get);
|
||||
free(get);
|
||||
|
||||
|
||||
|
||||
if (switch_file_open(&fd, argv[8], SWITCH_FOPEN_READ, SWITCH_FPROT_UREAD | SWITCH_FPROT_UWRITE, holder->pool) == SWITCH_STATUS_SUCCESS) {
|
||||
if (switch_file_open(&fd, argv[8], SWITCH_FOPEN_READ, SWITCH_FPROT_UREAD | SWITCH_FPROT_UWRITE, holder->pool) == SWITCH_STATUS_SUCCESS) {
|
||||
flen = switch_file_get_size(fd);
|
||||
tmp = switch_mprintf("%ld", (long) flen);
|
||||
switch_xml_set_attr_d(x_tmp, "length", tmp);
|
||||
|
@ -2580,7 +2478,6 @@ static int rss_callback(void *pArg, int argc, char **argv, char **columnNames)
|
|||
|
||||
static void do_rss(vm_profile_t *profile, char *user, char *domain, char *host, char *port, char *uri, switch_stream_handle_t *stream)
|
||||
{
|
||||
|
||||
struct holder holder;
|
||||
switch_xml_t x_tmp;
|
||||
char *sql, *xmlstr;
|
||||
|
@ -2598,7 +2495,7 @@ static void do_rss(vm_profile_t *profile, char *user, char *domain, char *host,
|
|||
holder.uri = uri;
|
||||
|
||||
switch_core_new_memory_pool(&holder.pool);
|
||||
assert(holder.xml);
|
||||
switch_assert(holder.xml);
|
||||
|
||||
switch_xml_set_attr_d(holder.xml, "xmlns:itunes", "http://www.itunes.com/dtds/podcast-1.0.dtd");
|
||||
switch_xml_set_attr_d(holder.xml, "xmlns:fsvm", "http://www.freeswitch.org/dtd/fsvm.dtd");
|
||||
|
@ -2618,9 +2515,8 @@ static void do_rss(vm_profile_t *profile, char *user, char *domain, char *host,
|
|||
|
||||
x_tmp = switch_xml_add_child_d(holder.x_channel, "ttl", 0);
|
||||
switch_xml_set_txt_d(x_tmp, "15");
|
||||
|
||||
|
||||
sql = switch_mprintf("select * from voicemail_data where user='%s' and domain='%s' order by read_flags", user, domain);
|
||||
sql = switch_mprintf("select * from voicemail_data where user='%s' and domain='%s' order by read_flags", user, domain);
|
||||
vm_execute_sql_callback(profile, profile->mutex, sql, rss_callback, &holder);
|
||||
|
||||
xmlstr = switch_xml_toxml(holder.xml, SWITCH_TRUE);
|
||||
|
@ -2652,8 +2548,7 @@ static void do_web(vm_profile_t *profile, char *user, char *domain, char *host,
|
|||
holder.port = port;
|
||||
holder.uri = uri;
|
||||
|
||||
|
||||
if (profile->web_head) {
|
||||
if (profile->web_head) {
|
||||
stream->raw_write_function(stream, (uint8_t *)profile->web_head, strlen(profile->web_head));
|
||||
}
|
||||
|
||||
|
@ -2674,7 +2569,6 @@ static void do_web(vm_profile_t *profile, char *user, char *domain, char *host,
|
|||
if (profile->web_tail) {
|
||||
stream->raw_write_function(stream, (uint8_t *)profile->web_tail, strlen(profile->web_tail));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
SWITCH_STANDARD_API(voicemail_api_function)
|
||||
|
@ -2703,7 +2597,7 @@ SWITCH_STANDARD_API(voicemail_api_function)
|
|||
|
||||
if (!switch_strlen_zero(cmd)) {
|
||||
mydata = strdup(cmd);
|
||||
assert(mydata);
|
||||
switch_assert(mydata);
|
||||
argc = switch_separate_string(mydata, ' ', argv, (sizeof(argv) / sizeof(argv[0])));
|
||||
}
|
||||
|
||||
|
@ -2778,13 +2672,8 @@ SWITCH_STANDARD_API(voicemail_api_function)
|
|||
stream->write_function(stream, "Error: %s\n", VOICEMAIL_SYNTAX);
|
||||
|
||||
done:
|
||||
|
||||
switch_safe_free(mydata);
|
||||
|
||||
|
||||
return SWITCH_STATUS_SUCCESS;
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
@ -2801,7 +2690,6 @@ SWITCH_MODULE_LOAD_FUNCTION(mod_voicemail_load)
|
|||
*module_interface = switch_loadable_module_create_module_interface(pool, modname);
|
||||
SWITCH_ADD_APP(app_interface, "voicemail", "Voicemail", VM_DESC, voicemail_function, VM_USAGE, SAF_NONE);
|
||||
|
||||
|
||||
if (switch_event_bind((char *) modname, SWITCH_EVENT_MESSAGE_QUERY, SWITCH_EVENT_SUBCLASS_ANY, message_query_handler, NULL)
|
||||
!= SWITCH_STATUS_SUCCESS) {
|
||||
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Couldn't bind!\n");
|
||||
|
|
Loading…
Reference in New Issue