Index: protocols/jabber/io.c
===================================================================
--- protocols/jabber/io.c (revision 101d84fe3018ba138a9cb5f0f030997e8ff7bdbe)
+++ protocols/jabber/io.c (revision 090f1cbe72373b31e753af4a1442ddd53b02791b)
@@ -386,5 +386,5 @@
if( jd->flags & JFLAG_AUTHENTICATED && ( jd->flags & ( JFLAG_WAIT_BIND | JFLAG_WAIT_SESSION ) ) == 0 )
{
- if( !jabber_get_roster( gc ) || !jabber_get_privacy( gc ) )
+ if( !jabber_get_roster( gc ) )
return XT_ABORT;
}
Index: protocols/jabber/iq.c
===================================================================
--- protocols/jabber/iq.c (revision 101d84fe3018ba138a9cb5f0f030997e8ff7bdbe)
+++ protocols/jabber/iq.c (revision 090f1cbe72373b31e753af4a1442ddd53b02791b)
@@ -109,40 +109,4 @@
account_online( gc );
}
- if( strcmp( type, "result" ) == 0 && xmlns && strcmp( xmlns, "jabber:iq:privacy" ) == 0 )
- {
- struct xt_node *node;
-
- /* When receiving a list of lists: */
- if( ( node = xt_find_node( query->children, "active" ) ) )
- {
- if( ( s = xt_find_attr( node, "name" ) ) )
- {
- set_t *set;
-
- g_free( jd->privacy_active );
- jd->privacy_active = g_strdup( s );
-
- /* Save it so the user can see it. */
- if( ( set = set_find( &gc->acc->set, "privacy_list" ) ) )
- {
- g_free( set->value );
- set->value = g_strdup( s );
- }
-
- if( !jabber_get_privacy( gc ) )
- return XT_ABORT;
- }
- }
- /* When receiving an actual list: */
- else if( ( node = xt_find_node( query->children, "list" ) ) )
- {
- xt_free_node( jd->privacy_list );
- jd->privacy_list = xt_dup( node );
- }
- else if( query->children == NULL )
- {
- /* What to do here if there is no privacy list defined yet... */
- }
- }
else if( strcmp( type, "result" ) == 0 && orig )
{
@@ -157,5 +121,5 @@
the old (non-SASL) way. */
jd->flags |= JFLAG_AUTHENTICATED;
- if( !jabber_get_roster( gc ) || !jabber_get_privacy( gc ) )
+ if( !jabber_get_roster( gc ) )
return XT_ABORT;
}
@@ -181,18 +145,7 @@
if( ( jd->flags & ( JFLAG_WAIT_BIND | JFLAG_WAIT_SESSION ) ) == 0 )
{
- if( !jabber_get_roster( gc ) || !jabber_get_privacy( gc ) )
+ if( !jabber_get_roster( gc ) )
return XT_ABORT;
}
- }
- else if( ( c = xt_find_node( orig->children, "query" ) ) &&
- ( c = xt_find_node( c->children, "active" ) ) )
- {
- /* We just successfully activated a (different)
- privacy list. Fetch it now. */
- g_free( jd->privacy_active );
- jd->privacy_active = g_strdup( xt_find_attr( c, "name" ) );
-
- if( !jabber_get_privacy( gc ) )
- return XT_ABORT;
}
}
@@ -209,31 +162,4 @@
return XT_ABORT;
}
- else if( ( xmlns && strcmp( xmlns, "jabber:iq:privacy" ) == 0 ) ||
- ( orig &&
- ( c = xt_find_node( orig->children, "query" ) ) &&
- ( s = xt_find_attr( c, "xmlns" ) ) &&
- strcmp( s, "jabber:iq:privacy" ) == 0 ) )
- {
- /* All errors related to privacy lists. */
- if( ( c = xt_find_node( node->children, "error" ) ) == NULL )
- {
- hide_login_progress_error( gc, "Received malformed error packet" );
- signoff( gc );
- return XT_ABORT;
- }
-
- if( xt_find_node( c->children, "item-not-found" ) )
- {
- serv_got_crap( gc, "Error while activating privacy list, maybe it doesn't exist" );
- /* Should I do anything else here? */
- }
- else if( xt_find_node( c->children, "feature-not-implemented" ) )
- {
- jd->flags |= JFLAG_PRIVACY_BROKEN;
- /* Probably there's no need to inform the user.
- We can do that if the user ever tries to use
- the block/allow commands. */
- }
- }
}
@@ -316,76 +242,2 @@
return st;
}
-
-/* Request the privacy list from the server. We need this, because every
- time we remove/add something we have to send the whole new list to the
- server again... If no privacy list is specified yet, this function will
- first ask for the list of lists (XMPP supports multiple "privacy lists",
- don't ask me why), later we can then fetch the list we want to use. */
-int jabber_get_privacy( struct gaim_connection *gc )
-{
- struct jabber_data *jd = gc->proto_data;
- struct xt_node *node = NULL;
- char *name;
- int st;
-
- if( jd->privacy_active )
- {
- /* If we know what is the active list right now, fetch it. */
- node = xt_new_node( "list", NULL, NULL );
- xt_add_attr( node, "name", jd->privacy_active );
- }
- /* Okay, we don't know yet. If the user set a specific list, we'll
- activate that one. Otherwise, we should figure out which list is
- currently active. */
- else if( ( name = set_getstr( &gc->acc->set, "privacy_list" ) ) )
- {
- return jabber_set_privacy( gc, name );
- }
- /* else: sending this packet without a
element will give
- a list of available lists and information about the currently
- active list. */
-
- node = xt_new_node( "query", NULL, node );
- xt_add_attr( node, "xmlns", "jabber:iq:privacy" );
- node = jabber_make_packet( "iq", "get", NULL, node );
-
- jabber_cache_packet( gc, node );
- st = jabber_write_packet( gc, node );
-
- return st;
-}
-
-int jabber_set_privacy( struct gaim_connection *gc, char *name )
-{
- struct xt_node *node;
-
- node = xt_new_node( "active", NULL, NULL );
- xt_add_attr( node, "name", name );
- node = xt_new_node( "query", NULL, node );
- xt_add_attr( node, "xmlns", "jabber:iq:privacy" );
-
- node = jabber_make_packet( "iq", "set", NULL, node );
- jabber_cache_packet( gc, node );
-
- return jabber_write_packet( gc, node );
-}
-
-char *set_eval_privacy_list( set_t *set, char *value )
-{
- account_t *acc = set->data;
- struct jabber_data *jd = acc->gc->proto_data;
-
- if( jd->flags & JFLAG_PRIVACY_BROKEN )
- {
- serv_got_crap( acc->gc, "Privacy lists not supported by this server" );
- return NULL;
- }
-
- /* If we're on-line, return NULL and let the server decide if the
- chosen list is valid. If we're off-line, just accept it and we'll
- see later (when we connect). */
- if( acc->gc )
- jabber_set_privacy( acc->gc, value );
-
- return acc->gc ? NULL : value;
-}
Index: protocols/jabber/jabber.c
===================================================================
--- protocols/jabber/jabber.c (revision 101d84fe3018ba138a9cb5f0f030997e8ff7bdbe)
+++ protocols/jabber/jabber.c (revision 090f1cbe72373b31e753af4a1442ddd53b02791b)
@@ -42,6 +42,4 @@
s = set_add( &acc->set, "priority", "0", set_eval_priority, acc );
- s = set_add( &acc->set, "privacy_list", NULL, set_eval_privacy_list, acc );
-
s = set_add( &acc->set, "resource", "BitlBee", NULL, acc );
s->flags |= ACC_SET_OFFLINE_ONLY;
@@ -110,7 +108,4 @@
if( jd->tx_len )
g_free( jd->txq );
-
- xt_free_node( jd->privacy_list );
- g_free( jd->privacy_active );
xt_free_node( jd->node_cache );
@@ -227,36 +222,4 @@
c->flags |= XT_SEEN;
}
-}
-
-static void jabber_add_permit( struct gaim_connection *gc, char *who )
-{
- struct jabber_data *jd = gc->proto_data;
-
- if( jd->flags & JFLAG_PRIVACY_BROKEN )
- {
- serv_got_crap( gc, "Privacy lists not supported by this server" );
- return;
- }
-}
-
-static void jabber_rem_permit( struct gaim_connection *gc, char *who )
-{
- struct jabber_data *jd = gc->proto_data;
-
- if( jd->flags & JFLAG_PRIVACY_BROKEN )
- {
- serv_got_crap( gc, "Privacy lists not supported by this server" );
- return;
- }
-}
-
-/* XMPP doesn't have both a block- and and allow-list, so these two functions
- will be no-ops: */
-static void jabber_add_deny( struct gaim_connection *gc, char *who )
-{
-}
-
-static void jabber_rem_deny( struct gaim_connection *gc, char *who )
-{
}
@@ -282,8 +245,4 @@
// ret->chat_open = jabber_chat_open;
ret->keepalive = jabber_keepalive;
- ret->add_permit = jabber_add_permit;
- ret->rem_permit = jabber_rem_permit;
- ret->add_deny = jabber_add_deny;
- ret->rem_deny = jabber_rem_deny;
// ret->send_typing = jabber_send_typing;
ret->handle_cmp = g_strcasecmp;
Index: protocols/jabber/jabber.h
===================================================================
--- protocols/jabber/jabber.h (revision 101d84fe3018ba138a9cb5f0f030997e8ff7bdbe)
+++ protocols/jabber/jabber.h (revision 090f1cbe72373b31e753af4a1442ddd53b02791b)
@@ -37,5 +37,4 @@
JFLAG_WAIT_SESSION = 8, /* Set if we sent a tag and need a reply before we continue. */
JFLAG_WAIT_BIND = 16, /* ... for tag. */
- JFLAG_PRIVACY_BROKEN = 32, /* Or just not supported, actually. */
} jabber_flags_t;
@@ -61,8 +60,4 @@
char *away_message;
- /* Updates to this one should be synchronized using jabber_privacy_update(). */
- struct xt_node *privacy_list;
- char *privacy_active;
-
struct xt_node *node_cache;
};
@@ -74,6 +69,4 @@
};
-#define DEFAULT_PRIVACY_LIST "simple_blocklist"
-
/* iq.c */
xt_status jabber_pkt_iq( struct xt_node *node, gpointer data );
@@ -82,7 +75,4 @@
int jabber_add_to_roster( struct gaim_connection *gc, char *handle, char *name );
int jabber_remove_from_roster( struct gaim_connection *gc, char *handle );
-int jabber_get_privacy( struct gaim_connection *gc );
-int jabber_set_privacy( struct gaim_connection *gc, char *name );
-char *set_eval_privacy_list( set_t *set, char *value );
/* message.c */
Index: protocols/jabber/xmltree.c
===================================================================
--- protocols/jabber/xmltree.c (revision 101d84fe3018ba138a9cb5f0f030997e8ff7bdbe)
+++ protocols/jabber/xmltree.c (revision 090f1cbe72373b31e753af4a1442ddd53b02791b)
@@ -528,8 +528,24 @@
int i;
- for( i = 0; node->attr[i].key; i ++ );
- node->attr = g_renew( struct xt_attr, node->attr, i + 2 );
- node->attr[i].key = g_strdup( key );
+ /* Now actually it'd be nice if we can also change existing attributes
+ (which actually means this function doesn't have the right name).
+ So let's find out if we have this attribute already... */
+ for( i = 0; node->attr[i].key; i ++ )
+ if( strcmp( node->attr[i].key, key ) == 0 )
+ break;
+
+ if( node->attr[i].key == NULL )
+ {
+ /* If not, allocate space for a new attribute. */
+ node->attr = g_renew( struct xt_attr, node->attr, i + 2 );
+ node->attr[i].key = g_strdup( key );
+ node->attr[i+1].key = NULL;
+ }
+ else
+ {
+ /* Otherwise, free the old value before setting the new one. */
+ g_free( node->attr[i].value );
+ }
+
node->attr[i].value = g_strdup( value );
- node->attr[i+1].key = NULL;
-}
+}