re-factor, reduce indentation in some function, whitespace and comment cleanup.

git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@6351 d0543943-73ff-0310-b7d9-9358b9ac24b2
This commit is contained in:
Michael Jerris 2007-11-20 03:26:40 +00:00
parent 1ba6b1b518
commit d9728f2aeb
1 changed files with 71 additions and 121 deletions

View File

@ -48,60 +48,63 @@ switch_status_t sofia_presence_chat_send(char *proto, char *from, char *to, char
nua_handle_t *msg_nh;
char *contact;
if (to && (user = strdup(to))) {
if ((host = strchr(user, '@'))) {
*host++ = '\0';
}
if (!to) {
return SWITCH_STATUS_SUCCESS;
}
if (!host || !(profile = sofia_glue_find_profile(host))) {
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR,
"Chat proto [%s]\nfrom [%s]\nto [%s]\n%s\nInvalid Profile %s\n", proto, from, to,
body ? body : "[no body]", host ? host : "NULL");
user = strdup(to);
assert(user);
if ((host = strchr(user, '@'))) {
*host++ = '\0';
}
if (!host || !(profile = sofia_glue_find_profile(host))) {
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR,
"Chat proto [%s]\nfrom [%s]\nto [%s]\n%s\nInvalid Profile %s\n", proto, from, to,
body ? body : "[no body]", host ? host : "NULL");
return SWITCH_STATUS_FALSE;
}
if (!sofia_reg_find_reg_url(profile, user, host, buf, sizeof(buf))) {
return SWITCH_STATUS_FALSE;
}
if (!strcmp(proto, SOFIA_CHAT_PROTO)) {
from = hint;
} else {
char *fp, *p, *fu = NULL;
fp = strdup(from);
if (!fp) {
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CRIT, "Memory Error!\n");
return SWITCH_STATUS_FALSE;
}
if (!sofia_reg_find_reg_url(profile, user, host, buf, sizeof(buf))) {
return SWITCH_STATUS_FALSE;
if ((p = strchr(fp, '@'))) {
*p = '\0';
fu = strdup(fp);
*p = '+';
}
if (!strcmp(proto, SOFIA_CHAT_PROTO)) {
from = hint;
} else {
char *fp, *p, *fu = NULL;
ffrom = switch_mprintf("\"%s\" <sip:%s+%s@%s>", fu, proto, fp, profile->name);
from = ffrom;
switch_safe_free(fu);
switch_safe_free(fp);
}
if (!(fp = strdup(from))) {
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CRIT, "Memory Error!\n");
return SWITCH_STATUS_FALSE;
}
contact = sofia_glue_get_url_from_contact(buf, 1);
msg_nh = nua_handle(profile->nua, NULL, SIPTAG_FROM_STR(from), NUTAG_URL(contact), SIPTAG_TO_STR(buf), // if this cries, add contact here too, change the 1 to 0 and omit the safe_free
SIPTAG_CONTACT_STR(profile->url), TAG_END());
if ((p = strchr(fp, '@'))) {
*p = '\0';
fu = strdup(fp);
*p = '+';
}
switch_safe_free(contact);
ffrom = switch_mprintf("\"%s\" <sip:%s+%s@%s>", fu, proto, fp, profile->name);
from = ffrom;
switch_safe_free(fu);
switch_safe_free(fp);
}
nua_message(msg_nh, SIPTAG_CONTENT_TYPE_STR("text/html"), SIPTAG_PAYLOAD_STR(body), TAG_END());
contact = sofia_glue_get_url_from_contact(buf, 1);
msg_nh = nua_handle(profile->nua, NULL, SIPTAG_FROM_STR(from), NUTAG_URL(contact), SIPTAG_TO_STR(buf), // if this cries, add contact here too, change the 1 to 0 and omit the safe_free
SIPTAG_CONTACT_STR(profile->url), TAG_END());
switch_safe_free(ffrom);
free(user);
switch_safe_free(contact);
nua_message(msg_nh, SIPTAG_CONTENT_TYPE_STR("text/html"), SIPTAG_PAYLOAD_STR(body), TAG_END());
switch_safe_free(ffrom);
free(user);
if (profile) {
switch_thread_rwlock_unlock(profile->rwlock);
}
if (profile) {
switch_thread_rwlock_unlock(profile->rwlock);
}
return SWITCH_STATUS_SUCCESS;
@ -149,8 +152,6 @@ void sofia_presence_establish_presence(sofia_profile_t *profile)
}
}
char *sofia_presence_translate_rpid(char *in, char *ext)
{
char *r = in;
@ -233,7 +234,6 @@ void sofia_presence_mwi_event_handler(switch_event_t *event)
sofia_presence_mwi_callback,
profile);
switch_safe_free(sql);
switch_safe_free(dup_account);
if (profile) {
@ -241,7 +241,6 @@ void sofia_presence_mwi_event_handler(switch_event_t *event)
}
}
void sofia_presence_event_handler(switch_event_t *event)
{
sofia_profile_t *profile = NULL;
@ -252,11 +251,9 @@ void sofia_presence_event_handler(switch_event_t *event)
char *rpid = switch_event_get_header(event, "rpid");
char *status = switch_event_get_header(event, "status");
char *event_type = switch_event_get_header(event, "event_type");
//char *event_subtype = switch_event_get_header(event, "event_subtype");
char *sql = NULL;
char *euser = NULL, *user = NULL, *host = NULL;
if (rpid && !strcasecmp(rpid, "n/a")) {
rpid = NULL;
}
@ -304,15 +301,12 @@ void sofia_presence_event_handler(switch_event_t *event)
continue;
}
sofia_glue_execute_sql_callback(profile,
SWITCH_FALSE,
profile->ireg_mutex,
sql,
sofia_presence_sub_callback,
profile);
}
switch_mutex_unlock(mod_sofia_globals.hash_mutex);
free(sql);
@ -339,12 +333,10 @@ void sofia_presence_event_handler(switch_event_t *event)
} else {
euser = user;
}
} else {
return;
}
switch (event->event_id) {
case SWITCH_EVENT_PRESENCE_PROBE:
if (proto) {
@ -374,9 +366,7 @@ void sofia_presence_event_handler(switch_event_t *event)
sofia_presence_resub_callback,
profile);
sofia_glue_release_profile(profile);
switch_safe_free(sql);
}
switch_safe_free(user);
@ -413,7 +403,6 @@ void sofia_presence_event_handler(switch_event_t *event)
sql,
sofia_presence_sub_callback,
profile);
}
}
switch_mutex_unlock(mod_sofia_globals.hash_mutex);
@ -425,7 +414,6 @@ void sofia_presence_event_handler(switch_event_t *event)
static int sofia_presence_sub_reg_callback(void *pArg, int argc, char **argv, char **columnNames)
{
sofia_profile_t *profile = (sofia_profile_t *) pArg;
//char *proto = argv[0];
char *user = argv[1];
char *host = argv[2];
switch_event_t *event;
@ -603,8 +591,6 @@ static int sofia_presence_sub_callback(void *pArg, int argc, char **argv, char *
SIPTAG_SUBSCRIPTION_STATE_STR("active;expires=3600"),
SIPTAG_EVENT_STR(event), SIPTAG_CONTENT_TYPE_STR("application/pidf+xml"), SIPTAG_PAYLOAD_STR(pl), TAG_END());
if (done) {
switch_core_hash_delete(profile->sub_hash, call_id);
}
@ -621,7 +607,7 @@ static int sofia_presence_mwi_callback(void *pArg, int argc, char **argv, char *
{
//char *proto = argv[0];
//char *user = argv[1];
char *host = argv[2];
//char *host = argv[2];
char *sub_to_user = argv[3];
char *sub_to_host = argv[4];
char *event = argv[5];
@ -638,7 +624,7 @@ static int sofia_presence_mwi_callback(void *pArg, int argc, char **argv, char *
int expire_sec = atoi(expires);
if (!(profile = sofia_glue_find_profile(sub_to_host))) {
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Cannot find profile for host %s\n", host);
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Cannot find profile for host %s\n", sub_to_host);
return 0;
}
@ -658,17 +644,14 @@ static int sofia_presence_mwi_callback(void *pArg, int argc, char **argv, char *
SIPTAG_SUBSCRIPTION_STATE_STR(exp),
SIPTAG_EVENT_STR(event), SIPTAG_CONTENT_TYPE_STR("application/simple-message-summary"), SIPTAG_PAYLOAD_STR(body), TAG_END());
switch_safe_free(id);
switch_safe_free(exp);
sofia_glue_release_profile(profile);
return 0;
}
void sofia_presence_handle_sip_i_subscribe(int status,
char const *phrase,
nua_t *nua, sofia_profile_t *profile, nua_handle_t *nh, sofia_private_t *sofia_private, sip_t const *sip, tagi_t tags[])
@ -678,10 +661,9 @@ void sofia_presence_handle_sip_i_subscribe(int status,
sip_to_t const *to = sip->sip_to;
sip_from_t const *from = sip->sip_from;
sip_contact_t const *contact = sip->sip_contact;
char *from_user = NULL;
char *from_host = NULL;
char *to_user = NULL;
char *to_host = NULL;
const char *from_user = NULL, *from_host = NULL;
const char *to_user = NULL, *to_host = NULL;
char *my_to_user = NULL;
char *sql, *event = NULL;
char *proto = "sip";
char *d_user = NULL;
@ -698,7 +680,6 @@ void sofia_presence_handle_sip_i_subscribe(int status,
tl_gets(tags,
NUTAG_SUBSTATE_REF(sub_state), TAG_END());
if (contact) {
char *port = (char *) contact->m_url->url_port;
@ -732,13 +713,13 @@ void sofia_presence_handle_sip_i_subscribe(int status,
}
if (to) {
to_user = (char *) to->a_url->url_user;
to_host = (char *) to->a_url->url_host;
to_user = to->a_url->url_user;
to_host = to->a_url->url_host;
}
if (sip && sip->sip_from) {
from_user = (char *) sip->sip_from->a_url->url_user;
from_host = (char *) sip->sip_from->a_url->url_host;
from_user = sip->sip_from->a_url->url_user;
from_host = sip->sip_from->a_url->url_host;
} else {
from_user = "n/a";
from_host = "n/a";
@ -776,8 +757,9 @@ void sofia_presence_handle_sip_i_subscribe(int status,
if (strchr(to_user, '+')) {
char *h;
if ((proto = (d_user = strdup(to_user)))) {
if ((to_user = strchr(d_user, '+'))) {
*to_user++ = '\0';
if ((my_to_user = strchr(d_user, '+'))) {
*my_to_user++ = '\0';
to_user = my_to_user;
if ((h = strchr(to_user, '+')) || (h = strchr(to_user, '@'))) {
*h++ = '\0';
to_host = h;
@ -791,7 +773,7 @@ void sofia_presence_handle_sip_i_subscribe(int status,
}
}
call_id = sip->sip_call_id->i_id; //sip_header_as_string(profile->home, (void *) sip->sip_call_id);
call_id = sip->sip_call_id->i_id;
event = sip_header_as_string(profile->home, (void *) sip->sip_event);
full_from = sip_header_as_string(profile->home, (void *) sip->sip_from);
full_via = sip_header_as_string(profile->home, (void *) sip->sip_via);
@ -799,8 +781,6 @@ void sofia_presence_handle_sip_i_subscribe(int status,
exp_raw = (sip->sip_expires ? sip->sip_expires->ex_delta : 3600);
exp = (long) time(NULL) + exp_raw;
switch_mutex_lock(profile->ireg_mutex);
sql = switch_mprintf("delete from sip_subscriptions where "
@ -827,11 +807,9 @@ void sofia_presence_handle_sip_i_subscribe(int status,
sofia_glue_execute_sql(profile, SWITCH_FALSE, sql, NULL);
free(sql);
switch_mutex_unlock(profile->ireg_mutex);
sstr = switch_mprintf("active;expires=%ld", exp_raw);
switch_core_hash_insert(profile->sub_hash, call_id, nh);
}
nua_respond(nh, SIP_202_ACCEPTED,
@ -862,12 +840,6 @@ void sofia_presence_handle_sip_i_subscribe(int status,
su_free(profile->home, event);
}
/*
if (call_id) {
su_free(profile->home, call_id);
}
*/
if (full_from) {
su_free(profile->home, full_from);
}
@ -975,70 +947,52 @@ void sofia_presence_handle_sip_i_publish(nua_t *nua, sofia_profile_t *profile, n
if (event_type) {
su_free(profile->home, event_type);
}
switch_xml_free(xml);
}
}
}
nua_respond(nh, SIP_200_OK, NUTAG_WITH_THIS(nua), TAG_END());
}
void sofia_presence_set_hash_key(char *hash_key, int32_t len, sip_t const *sip)
{
snprintf(hash_key, len, "%s%s%s", (char *) sip->sip_from->a_url->url_user, (char *) sip->sip_from->a_url->url_host,
(char *) sip->sip_to->a_url->url_user);
#if 0
/* nicer one we cant use in both directions >=0 */
snprintf(hash_key, len, "%s%s%s%s%s%s",
(char *) sip->sip_to->a_url->url_user,
(char *) sip->sip_to->a_url->url_host,
(char *) sip->sip_to->a_url->url_params,
(char *) sip->sip_from->a_url->url_user, (char *) sip->sip_from->a_url->url_host, (char *) sip->sip_from->a_url->url_params);
#endif
url_t *to = sip->sip_to->a_url;
url_t *from = sip->sip_from->a_url;
snprintf(hash_key, len, "%s%s%s", from->url_user, from->url_host, to->url_user);
}
void sofia_presence_handle_sip_i_message(int status,
char const *phrase,
nua_t *nua, sofia_profile_t *profile, nua_handle_t *nh, sofia_private_t *sofia_private, sip_t const *sip, tagi_t tags[])
{
if (sip) {
sip_from_t const *from = sip->sip_from;
char *from_user = NULL;
char *from_host = NULL;
const char *from_user = NULL;
const char *from_host = NULL;
sip_to_t const *to = sip->sip_to;
char *to_user = NULL;
char *to_host = NULL;
const char *to_user = NULL;
const char *to_host = NULL;
sip_subject_t const *sip_subject = sip->sip_subject;
sip_payload_t *payload = sip->sip_payload;
const char *subject = "n/a";
char *msg = NULL;
if (sip->sip_content_type) {
if (strstr((char *) sip->sip_content_type->c_subtype, "composing")) {
if (strstr(sip->sip_content_type->c_subtype, "composing")) {
return;
}
}
if (from) {
from_user = (char *) from->a_url->url_user;
from_host = (char *) from->a_url->url_host;
from_user = from->a_url->url_user;
from_host = from->a_url->url_host;
}
if (to) {
to_user = (char *) to->a_url->url_user;
to_host = (char *) to->a_url->url_host;
to_user = to->a_url->url_user;
to_host = to->a_url->url_host;
}
if (!to_user) {
return;
}
@ -1074,14 +1028,12 @@ void sofia_presence_handle_sip_i_message(int status,
*p = '@';
}
}
} else {
to_addr = switch_mprintf("%s@%s", to_user, to_host);
}
from_addr = switch_mprintf("%s@%s", from_user, from_host);
sofia_presence_set_hash_key(hash_key, sizeof(hash_key), sip);
if ((tech_pvt = (private_object_t *) switch_core_hash_find(profile->chat_hash, hash_key))) {
channel = switch_core_session_get_channel(tech_pvt->session);
@ -1107,7 +1059,6 @@ void sofia_presence_handle_sip_i_message(int status,
} else {
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Invalid Chat Interface [%s]!\n", proto);
}
}
switch_safe_free(to_addr);
switch_safe_free(from_addr);
@ -1115,7 +1066,6 @@ void sofia_presence_handle_sip_i_message(int status,
su_free(profile->home, full_from);
}
}
}
}