Moved functions to xmpp_presence
This commit is contained in:
170
src/xmpp_conn.c
170
src/xmpp_conn.c
@@ -318,149 +318,6 @@ jabber_send_gone(const char * const recipient)
|
||||
chat_session_set_sent(recipient);
|
||||
}
|
||||
|
||||
void
|
||||
jabber_join(Jid *jid)
|
||||
{
|
||||
xmpp_stanza_t *presence = stanza_create_room_join_presence(jabber_conn.ctx,
|
||||
jid->fulljid);
|
||||
xmpp_send(jabber_conn.conn, presence);
|
||||
xmpp_stanza_release(presence);
|
||||
|
||||
muc_join_room(jid->barejid, jid->resourcepart);
|
||||
}
|
||||
|
||||
void
|
||||
jabber_change_room_nick(const char * const room, const char * const nick)
|
||||
{
|
||||
char *full_room_jid = create_fulljid(room, nick);
|
||||
xmpp_stanza_t *presence = stanza_create_room_newnick_presence(jabber_conn.ctx,
|
||||
full_room_jid);
|
||||
xmpp_send(jabber_conn.conn, presence);
|
||||
xmpp_stanza_release(presence);
|
||||
|
||||
free(full_room_jid);
|
||||
}
|
||||
|
||||
void
|
||||
jabber_leave_chat_room(const char * const room_jid)
|
||||
{
|
||||
char *nick = muc_get_room_nick(room_jid);
|
||||
|
||||
xmpp_stanza_t *presence = stanza_create_room_leave_presence(jabber_conn.ctx,
|
||||
room_jid, nick);
|
||||
xmpp_send(jabber_conn.conn, presence);
|
||||
xmpp_stanza_release(presence);
|
||||
}
|
||||
|
||||
void
|
||||
jabber_update_presence(jabber_presence_t status, const char * const msg,
|
||||
int idle)
|
||||
{
|
||||
int pri;
|
||||
char *show, *last;
|
||||
|
||||
// don't send presence when disconnected
|
||||
if (jabber_conn.conn_status != JABBER_CONNECTED)
|
||||
return;
|
||||
|
||||
pri = prefs_get_priority();
|
||||
if (pri < JABBER_PRIORITY_MIN || pri > JABBER_PRIORITY_MAX)
|
||||
pri = 0;
|
||||
|
||||
jabber_conn.presence = status;
|
||||
jabber_conn.priority = pri;
|
||||
|
||||
switch(status)
|
||||
{
|
||||
case PRESENCE_AWAY:
|
||||
show = STANZA_TEXT_AWAY;
|
||||
last = STANZA_TEXT_AWAY;
|
||||
break;
|
||||
case PRESENCE_DND:
|
||||
show = STANZA_TEXT_DND;
|
||||
last = STANZA_TEXT_DND;
|
||||
break;
|
||||
case PRESENCE_CHAT:
|
||||
show = STANZA_TEXT_CHAT;
|
||||
last = STANZA_TEXT_CHAT;
|
||||
break;
|
||||
case PRESENCE_XA:
|
||||
show = STANZA_TEXT_XA;
|
||||
last = STANZA_TEXT_XA;
|
||||
break;
|
||||
default: // PRESENCE_ONLINE
|
||||
show = NULL;
|
||||
last = STANZA_TEXT_ONLINE;
|
||||
break;
|
||||
}
|
||||
|
||||
if (jabber_conn.status != NULL) {
|
||||
free(jabber_conn.status);
|
||||
jabber_conn.status = NULL;
|
||||
}
|
||||
if (msg != NULL)
|
||||
jabber_conn.status = strdup(msg);
|
||||
|
||||
xmpp_stanza_t *presence = stanza_create_presence(jabber_conn.ctx, show, msg);
|
||||
if (pri != 0) {
|
||||
xmpp_stanza_t *priority, *value;
|
||||
char pri_str[10];
|
||||
|
||||
snprintf(pri_str, sizeof(pri_str), "%d", pri);
|
||||
priority = xmpp_stanza_new(jabber_conn.ctx);
|
||||
value = xmpp_stanza_new(jabber_conn.ctx);
|
||||
xmpp_stanza_set_name(priority, STANZA_NAME_PRIORITY);
|
||||
xmpp_stanza_set_text(value, pri_str);
|
||||
xmpp_stanza_add_child(priority, value);
|
||||
xmpp_stanza_add_child(presence, priority);
|
||||
}
|
||||
|
||||
if (idle > 0) {
|
||||
xmpp_stanza_t *query = xmpp_stanza_new(jabber_conn.ctx);
|
||||
xmpp_stanza_set_name(query, STANZA_NAME_QUERY);
|
||||
xmpp_stanza_set_ns(query, STANZA_NS_LASTACTIVITY);
|
||||
char idle_str[10];
|
||||
snprintf(idle_str, sizeof(idle_str), "%d", idle);
|
||||
xmpp_stanza_set_attribute(query, STANZA_ATTR_SECONDS, idle_str);
|
||||
xmpp_stanza_add_child(presence, query);
|
||||
}
|
||||
|
||||
// add caps
|
||||
xmpp_stanza_t *caps = xmpp_stanza_new(jabber_conn.ctx);
|
||||
xmpp_stanza_set_name(caps, STANZA_NAME_C);
|
||||
xmpp_stanza_set_ns(caps, STANZA_NS_CAPS);
|
||||
xmpp_stanza_t *query = caps_create_query_response_stanza(jabber_conn.ctx);
|
||||
|
||||
char *sha1 = caps_create_sha1_str(query);
|
||||
xmpp_stanza_set_attribute(caps, STANZA_ATTR_HASH, "sha-1");
|
||||
xmpp_stanza_set_attribute(caps, STANZA_ATTR_NODE, "http://www.profanity.im");
|
||||
xmpp_stanza_set_attribute(caps, STANZA_ATTR_VER, sha1);
|
||||
xmpp_stanza_add_child(presence, caps);
|
||||
|
||||
xmpp_send(jabber_conn.conn, presence);
|
||||
|
||||
// send presence for each room
|
||||
GList *rooms = muc_get_active_room_list();
|
||||
while (rooms != NULL) {
|
||||
char *room = rooms->data;
|
||||
char *nick = muc_get_room_nick(room);
|
||||
char *full_room_jid = create_fulljid(room, nick);
|
||||
|
||||
xmpp_stanza_set_attribute(presence, STANZA_ATTR_TO, full_room_jid);
|
||||
xmpp_send(jabber_conn.conn, presence);
|
||||
|
||||
rooms = g_list_next(rooms);
|
||||
}
|
||||
g_list_free(rooms);
|
||||
|
||||
xmpp_stanza_release(presence);
|
||||
|
||||
FREE_SET_NULL(sha1);
|
||||
|
||||
// set last presence for account
|
||||
accounts_set_last_presence(saved_account.name, last);
|
||||
}
|
||||
|
||||
void
|
||||
jabber_set_autoping(int seconds)
|
||||
{
|
||||
@@ -518,6 +375,33 @@ jabber_get_status(void)
|
||||
return jabber_conn.status;
|
||||
}
|
||||
|
||||
char *
|
||||
jabber_get_account_name(void)
|
||||
{
|
||||
return saved_account.name;
|
||||
}
|
||||
|
||||
void
|
||||
jabber_conn_set_presence(jabber_presence_t presence)
|
||||
{
|
||||
jabber_conn.presence = presence;
|
||||
}
|
||||
|
||||
void
|
||||
jabber_conn_set_status(const char * const message)
|
||||
{
|
||||
FREE_SET_NULL(jabber_conn.status);
|
||||
if (message != NULL) {
|
||||
jabber_conn.status = strdup(message);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
jabber_conn_set_priority(int priority)
|
||||
{
|
||||
jabber_conn.priority = priority;
|
||||
}
|
||||
|
||||
void
|
||||
jabber_free_resources(void)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user