From 7c2bd04232f7c9f7cfca42f00a68504ee54af365 Mon Sep 17 00:00:00 2001 From: Brian West Date: Tue, 20 Jan 2009 21:24:37 +0000 Subject: [PATCH] fix MODENDP-173 git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@11320 d0543943-73ff-0310-b7d9-9358b9ac24b2 --- .../applications/mod_dptools/mod_dptools.c | 14 ++++---- src/mod/endpoints/mod_sofia/sofia_presence.c | 35 +++++++++++++------ 2 files changed, 32 insertions(+), 17 deletions(-) diff --git a/src/mod/applications/mod_dptools/mod_dptools.c b/src/mod/applications/mod_dptools/mod_dptools.c index f3b15a2146..d042c53f80 100644 --- a/src/mod/applications/mod_dptools/mod_dptools.c +++ b/src/mod/applications/mod_dptools/mod_dptools.c @@ -1064,13 +1064,14 @@ SWITCH_STANDARD_API(presence_api_function) SWITCH_STANDARD_API(chat_api_function) { - char *lbuf, *argv[4]; + char *lbuf, *argv[5]; int argc = 0; if (!switch_strlen_zero(cmd) && (lbuf = strdup(cmd)) - && (argc = switch_separate_string(lbuf, '|', argv, (sizeof(argv) / sizeof(argv[0])))) == 4) { - - if (switch_core_chat_send(argv[0], "dp", argv[1], argv[2], "", argv[3], NULL, "") == SWITCH_STATUS_SUCCESS) { + && (argc = switch_separate_string(lbuf, '|', argv, (sizeof(argv) / sizeof(argv[0])))) >= 4) { + + if (switch_core_chat_send(argv[0], "dp", argv[1], argv[2], "", argv[3], + !switch_strlen_zero(argv[4]) ? argv[4] : NULL , "") == SWITCH_STATUS_SUCCESS) { stream->write_function(stream, "Sent"); } else { stream->write_function(stream, "Error! Message Not Sent"); @@ -2487,7 +2488,8 @@ static switch_status_t api_chat_send(const char *proto, const char *from, const switch_api_execute(cmd, arg, NULL, &stream); if (proto) { - switch_core_chat_send(proto, "api", to, hint && strchr(hint, '/') ? hint : from, "text/plain", (char *) stream.data, NULL, NULL); + switch_core_chat_send(proto, "api", to, hint && strchr(hint, '/') ? hint : from, + !switch_strlen_zero(type) ? type : NULL, (char *) stream.data, NULL, NULL); } switch_safe_free(stream.data); @@ -2540,7 +2542,7 @@ SWITCH_MODULE_LOAD_FUNCTION(mod_dptools_load) SWITCH_ADD_CHAT(chat_interface, "api", api_chat_send); SWITCH_ADD_API(api_interface, "strepoch", "Convert a date string into epoch time", strepoch_api_function, ""); - SWITCH_ADD_API(api_interface, "chat", "chat", chat_api_function, "|||"); + SWITCH_ADD_API(api_interface, "chat", "chat", chat_api_function, "||||[]"); SWITCH_ADD_API(api_interface, "strftime", "strftime", strftime_api_function, ""); SWITCH_ADD_API(api_interface, "presence", "presence", presence_api_function, " "); SWITCH_ADD_APP(app_interface, "privacy", "Set privacy on calls", "Set caller privacy on calls.", privacy_function, "off|on|name|full|number", diff --git a/src/mod/endpoints/mod_sofia/sofia_presence.c b/src/mod/endpoints/mod_sofia/sofia_presence.c index be2267b694..7f29f27ab9 100644 --- a/src/mod/endpoints/mod_sofia/sofia_presence.c +++ b/src/mod/endpoints/mod_sofia/sofia_presence.c @@ -62,15 +62,15 @@ switch_status_t sofia_presence_chat_send(const char *proto, const char *from, co switch_status_t status = SWITCH_STATUS_FALSE; const char *ct = "text/html"; - if (subject && strchr(subject, '/')) { - ct = subject; - } - if (!to) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Missing To: header.\n"); goto end; } + if (!switch_strlen_zero(type)) { + ct = type; + } + dup = strdup(to); switch_assert(dup); prof = dup; @@ -88,13 +88,19 @@ switch_status_t sofia_presence_chat_send(const char *proto, const char *from, co if (!prof) prof = host; } - if (!host || !(profile = sofia_glue_find_profile(prof))) { + if (!prof || !(profile = sofia_glue_find_profile(prof))) { 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]", prof ? prof : "NULL"); goto end; } + if (switch_strlen_zero(host)) { + host = profile->domain_name; + if (switch_strlen_zero(host)) { + host=prof; + } + } if (!sofia_reg_find_reg_url(profile, user, host, buf, sizeof(buf))) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Cannot find user. [%s][%s]\n", user, host); goto end; @@ -103,22 +109,29 @@ switch_status_t sofia_presence_chat_send(const char *proto, const char *from, co if (!strcasecmp(proto, SOFIA_CHAT_PROTO)) { from = hint; } else { - char *fp, *p, *fu = NULL; + char *fp, *p = NULL; + fp = strdup(from); + if (!fp) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CRIT, "Memory Error!\n"); goto end; } if ((p = strchr(fp, '@'))) { - *p = '\0'; - fu = strdup(fp); - *p = '+'; + *p++ = '\0'; } - ffrom = switch_mprintf("\"%s\" ", fu, proto, fp, profile->domain_name); + if (switch_strlen_zero(p)) { + p=profile->domain_name; + if (switch_strlen_zero(p)) { + p=host; + } + } + + ffrom = switch_mprintf("\"%s\" ", fp, proto, fp, p); + from = ffrom; - switch_safe_free(fu); switch_safe_free(fp); }