diff --git a/libs/libdingaling/src/libdingaling.c b/libs/libdingaling/src/libdingaling.c index 7394d1d5c5..0b7c037866 100644 --- a/libs/libdingaling/src/libdingaling.c +++ b/libs/libdingaling/src/libdingaling.c @@ -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; } diff --git a/libs/libdingaling/src/libdingaling.h b/libs/libdingaling/src/libdingaling.h index 7c425e6f45..05fafc6da9 100644 --- a/libs/libdingaling/src/libdingaling.h +++ b/libs/libdingaling/src/libdingaling.h @@ -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, diff --git a/src/mod/endpoints/mod_dingaling/mod_dingaling.c b/src/mod/endpoints/mod_dingaling/mod_dingaling.c index 6be269e565..1592def644 100644 --- a/src/mod/endpoints/mod_dingaling/mod_dingaling.c +++ b/src/mod/endpoints/mod_dingaling/mod_dingaling.c @@ -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);