]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
FS-6865 #resolve add XMPP priority to dingaling
authorBrian West <brian@freeswitch.org>
Wed, 1 Oct 2014 15:40:57 +0000 (10:40 -0500)
committerBrian West <brian@freeswitch.org>
Wed, 1 Oct 2014 15:40:57 +0000 (10:40 -0500)
libs/libdingaling/src/libdingaling.c
libs/libdingaling/src/libdingaling.h
src/mod/endpoints/mod_dingaling/mod_dingaling.c

index 7394d1d5c571d3584b59d7494274df3f10a93580..0b7c037866ba1f3cabd3f937fdc0b1eef7cfb188 100644 (file)
@@ -127,6 +127,7 @@ struct ldl_handle {
        char *password;
        char *server;
        char *status_msg;
+       char *priority;
        uint16_t port;
        int features;
        int counter;
@@ -1470,7 +1471,7 @@ static int on_commands(void *user_data, ikspak *pak)
 static int on_result(void *user_data, ikspak *pak)
 {
        ldl_handle_t *handle = user_data;
-       iks *msg, *ctag;
+       iks *msg, *ctag, *tag;
 
        if ((msg = iks_make_pres (IKS_SHOW_AVAILABLE, handle->status_msg))) {
                ctag = iks_insert(msg, "c");
@@ -1480,6 +1481,11 @@ static int on_result(void *user_data, ikspak *pak)
                iks_insert_attrib(ctag, "client", "libdingaling");
                iks_insert_attrib(ctag, "xmlns", "http://jabber.org/protocol/caps");
 
+               if (handle->priority && strlen(handle->priority)) {
+                       tag = iks_insert (msg, "priority");
+                       iks_insert_cdata(tag, handle->priority, 0);
+               }
+
                apr_queue_push(handle->queue, msg);
                msg = NULL;
        }
@@ -3117,6 +3123,7 @@ ldl_status ldl_handle_init(ldl_handle_t **handle,
                                                   char *server,
                                                   ldl_user_flag_t flags,
                                                   char *status_msg,
+                                                  char *priority,
                                                   ldl_loop_callback_t loop_callback,
                                                   ldl_session_callback_t session_callback,
                                                   ldl_response_callback_t response_callback,
@@ -3162,6 +3169,10 @@ ldl_status ldl_handle_init(ldl_handle_t **handle,
                        new_handle->status_msg = apr_pstrdup(pool, status_msg);
                }
 
+               if (priority) {
+                       new_handle->priority = apr_pstrdup(pool, priority);
+               }
+
                if (loop_callback) {
                        new_handle->loop_callback = loop_callback;
                }
index 7c425e6f4542f5b51c6a58e97d88d0d459b57a21..05fafc6da9900f8ef598e3e338098da25ef1f484 100644 (file)
@@ -666,6 +666,7 @@ ldl_status ldl_handle_init(ldl_handle_t **handle,
                                                   char *server,
                                                   ldl_user_flag_t flags,
                                                   char *status_msg,
+                                                  char *priority,
                                                   ldl_loop_callback_t loop_callback,
                                                   ldl_session_callback_t session_callback,
                                                   ldl_response_callback_t response_callback,
index 6be269e565b1a01f06c1014a02e74bfea50ac274..1592def64434de544bd392199625cb9c61588cc2 100644 (file)
@@ -124,6 +124,7 @@ struct mdl_profile {
        char *login;
        char *password;
        char *message;
+       char *priority;
 #ifdef AUTO_REPLY
        char *auto_reply;
 #endif
@@ -2844,7 +2845,7 @@ static switch_status_t init_profile(mdl_profile_t *profile, uint8_t login)
                                                profile->login,
                                                profile->password,
                                                profile->server,
-                                               profile->user_flags, profile->message, handle_loop, handle_signalling, handle_response, profile) == LDL_STATUS_SUCCESS) {
+                                               profile->user_flags, profile->message, profile->priority, handle_loop, handle_signalling, handle_response, profile) == LDL_STATUS_SUCCESS) {
                profile->purge = SWITCH_FALSE;
                switch_thread_rwlock_create(&profile->rwlock, module_pool);
 
@@ -2923,6 +2924,8 @@ static void set_profile_val(mdl_profile_t *profile, char *var, char *val)
                profile->name = switch_core_strdup(module_pool, val);
        } else if (!strcasecmp(var, "message") && !zstr(val)) {
                profile->message = switch_core_strdup(module_pool, val);
+       } else if (!strcasecmp(var, "priority") && !zstr(val)) {
+               profile->priority = switch_core_strdup(module_pool, val);
        } else if (!strcasecmp(var, "local-network-acl") && !zstr(val)) {
                profile->local_network = switch_core_strdup(module_pool, val);
        } else if (!strcasecmp(var, "rtp-ip")) {
@@ -3189,6 +3192,8 @@ static switch_bool_t match_profile(mdl_profile_t *profile, mdl_profile_t *new_pr
                 (new_profile->password && profile->password && !strcasecmp(new_profile->password, profile->password))) &&
                ((!new_profile->message && !profile->message) ||
                 (new_profile->message && profile->message && !strcasecmp(new_profile->message, profile->message))) &&
+               ((!new_profile->priority && !profile->priority) ||
+                (new_profile->priority && profile->priority && !strcasecmp(new_profile->priority, profile->priority))) &&
                ((!new_profile->avatar && !profile->avatar) || (new_profile->avatar && profile->avatar && !strcasecmp(new_profile->avatar, profile->avatar))) &&
 #ifdef AUTO_REPLY
                ((!new_profile->auto_reply && !profile->auto_reply) ||
@@ -3310,6 +3315,7 @@ static switch_status_t soft_reload(void)
 
                        switch_set_flag(profile, TFLAG_AUTO);
                        profile->message = "";
+                       profile->priority = "";
                        profile->user_flags |= LDL_FLAG_COMPONENT;
                        switch_mutex_init(&profile->mutex, SWITCH_MUTEX_NESTED, module_pool);
                        switch_snprintf(dbname, sizeof(dbname), "dingaling_%s", profile->name);
@@ -3440,6 +3446,7 @@ static switch_status_t load_config(void)
 
                        switch_set_flag(profile, TFLAG_AUTO);
                        profile->message = "";
+                       profile->priority = "";
                        profile->user_flags |= LDL_FLAG_COMPONENT;
                        switch_mutex_init(&profile->mutex, SWITCH_MUTEX_NESTED, module_pool);
                        switch_snprintf(dbname, sizeof(dbname), "dingaling_%s", profile->name);