Changeset d88c92a for protocols/jabber


Ignore:
Timestamp:
2010-12-06T00:03:49Z (13 years ago)
Author:
Wilmer van der Gaast <wilmer@…>
Branches:
master
Children:
d76e12f
Parents:
a429907
Message:

First bits of CTCP support to contacts. (Try /CTCP VERSION on a Jabber
contact.)

Location:
protocols/jabber
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • protocols/jabber/iq.c

    ra429907 rd88c92a  
    794794        return XT_HANDLED;
    795795}
     796
     797static xt_status jabber_iq_version_response( struct im_connection *ic,
     798        struct xt_node *node, struct xt_node *orig );
     799
     800void jabber_iq_version_send( struct im_connection *ic, struct jabber_buddy *bud, void *data )
     801{
     802        struct xt_node *node, *query;
     803       
     804        node = xt_new_node( "query", NULL, NULL );
     805        xt_add_attr( node, "xmlns", XMLNS_VERSION );
     806        query = jabber_make_packet( "iq", "get", bud->full_jid, node );
     807        jabber_cache_add( ic, query, jabber_iq_version_response );
     808
     809        jabber_write_packet( ic, query );
     810}
     811
     812static xt_status jabber_iq_version_response( struct im_connection *ic,
     813        struct xt_node *node, struct xt_node *orig )
     814{
     815        struct xt_node *query;
     816        GString *rets;
     817        char *s;
     818        char *ret[2] = {};
     819        bee_user_t *bu;
     820        struct jabber_buddy *bud = NULL;
     821       
     822        if( ( s = xt_find_attr( node, "from" ) ) &&
     823            ( bud = jabber_buddy_by_jid( ic, s, 0 ) ) &&
     824            ( query = xt_find_node( node->children, "query" ) ) &&
     825            ( bu = bee_user_by_handle( ic->bee, ic, bud->bare_jid ) ) )
     826        {
     827                rets = g_string_new( "Resource " );
     828                g_string_append( rets, bud->resource );
     829        }
     830        else
     831                return XT_HANDLED;
     832       
     833        for( query = query->children; query; query = query->next )
     834                if( query->text_len > 0 )
     835                        g_string_append_printf( rets, " %s: %s,", query->name, query->text );
     836       
     837        g_string_truncate( rets, rets->len - 1 );
     838        ret[0] = rets->str;
     839        imcb_buddy_action_response( bu, "VERSION", ret, NULL );
     840        g_string_free( rets, TRUE );
     841       
     842        return XT_HANDLED;
     843}
  • protocols/jabber/jabber.c

    ra429907 rd88c92a  
    564564}
    565565
     566GList *jabber_buddy_action_list( bee_user_t *bu )
     567{
     568        static GList *ret = NULL;
     569       
     570        if( ret == NULL )
     571        {
     572                struct buddy_action ba[2] = {
     573                        { "VERSION", "Get client (version) information" },
     574                };
     575               
     576                ret = g_list_prepend( ret, ba + 0 );
     577        }
     578       
     579        return ret;
     580}
     581
     582void *jabber_buddy_action( struct bee_user *bu, const char *action, char * const args[], void *data )
     583{
     584        if( g_strcasecmp( action, "VERSION" ) == 0 )
     585        {
     586                struct jabber_buddy *bud;
     587               
     588                if( ( bud = jabber_buddy_by_ext_jid( bu->ic, bu->handle, 0 ) ) == NULL )
     589                        bud = jabber_buddy_by_jid( bu->ic, bu->handle, GET_BUDDY_FIRST );
     590                for( ; bud; bud = bud->next )
     591                        jabber_iq_version_send( bu->ic, bud, data );
     592        }
     593       
     594        return NULL;
     595}
     596
    566597void jabber_initmodule()
    567598{
     
    591622        ret->handle_cmp = g_strcasecmp;
    592623        ret->transfer_request = jabber_si_transfer_request;
     624        ret->buddy_action_list = jabber_buddy_action_list;
     625        ret->buddy_action = jabber_buddy_action;
    593626
    594627        register_protocol( ret );
  • protocols/jabber/jabber.h

    ra429907 rd88c92a  
    241241xt_status jabber_iq_query_features( struct im_connection *ic, char *bare_jid );
    242242xt_status jabber_iq_query_server( struct im_connection *ic, char *jid, char *xmlns );
     243void jabber_iq_version_send( struct im_connection *ic, struct jabber_buddy *bud, void *data );
    243244
    244245/* si.c */
Note: See TracChangeset for help on using the changeset viewer.