]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
fix MODENDP-173
authorBrian West <brian@freeswitch.org>
Tue, 20 Jan 2009 21:24:37 +0000 (21:24 +0000)
committerBrian West <brian@freeswitch.org>
Tue, 20 Jan 2009 21:24:37 +0000 (21:24 +0000)
git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@11320 d0543943-73ff-0310-b7d9-9358b9ac24b2

src/mod/applications/mod_dptools/mod_dptools.c
src/mod/endpoints/mod_sofia/sofia_presence.c

index f3b15a214695d7d469bfbb112bedcafdecffc451..d042c53f804594dfa697c6c2357620c01c44fe62 100644 (file)
@@ -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, "<string>");
-       SWITCH_ADD_API(api_interface, "chat", "chat", chat_api_function, "<proto>|<from>|<to>|<message>");
+       SWITCH_ADD_API(api_interface, "chat", "chat", chat_api_function, "<proto>|<from>|<to>|<message>|[<content-type>]");
        SWITCH_ADD_API(api_interface, "strftime", "strftime", strftime_api_function, "<format_string>");
        SWITCH_ADD_API(api_interface, "presence", "presence", presence_api_function, "<user> <rpid> <message>");
        SWITCH_ADD_APP(app_interface, "privacy", "Set privacy on calls", "Set caller privacy on calls.", privacy_function, "off|on|name|full|number",
index be2267b694d182a09d978b1010d9b640a6a41dab..7f29f27ab9b0d02b1de79fd17664026bbf8f51f1 100644 (file)
@@ -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\" <sip:%s+%s@%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\" <sip:%s+%s@%s>", fp, proto, fp, p);
+
                from = ffrom;
-               switch_safe_free(fu);
                switch_safe_free(fp);
        }