Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • protocols/nogaim.c

    r5b52a48 rfb62f81f  
    22  * BitlBee -- An IRC to other IM-networks gateway                     *
    33  *                                                                    *
    4   * Copyright 2002-2006 Wilmer van der Gaast and others                *
     4  * Copyright 2002-2004 Wilmer van der Gaast and others                *
    55  \********************************************************************/
    66
     
    1313 * from scratch for BitlBee and doesn't contain any code from Gaim anymore
    1414 * (except for the function names).
     15 *
     16 * Copyright 2002-2006 Wilmer van der Gaast <wilmer@gaast.net> and others
    1517 */
    1618
     
    145147/* multi.c */
    146148
    147 struct gaim_connection *new_gaim_conn( account_t *acc )
     149struct gaim_connection *new_gaim_conn( struct aim_user *user )
    148150{
    149151        struct gaim_connection *gc;
     152        account_t *a;
    150153       
    151154        gc = g_new0( struct gaim_connection, 1 );
    152155       
    153         /* Maybe we should get rid of this memory waste later. ;-) */
    154         g_snprintf( gc->username, sizeof( gc->username ), "%s", acc->user );
    155         g_snprintf( gc->password, sizeof( gc->password ), "%s", acc->pass );
    156        
    157         gc->irc = acc->irc;
    158         gc->acc = acc;
    159         acc->gc = gc;
     156        gc->prpl = user->prpl;
     157        g_snprintf( gc->username, sizeof( gc->username ), "%s", user->username );
     158        g_snprintf( gc->password, sizeof( gc->password ), "%s", user->password );
     159        /* [MD] BUGFIX: don't set gc->irc to the global IRC, but use the one from the struct aim_user.
     160         * This fixes daemon mode breakage where IRC doesn't point to the currently active connection.
     161         */
     162        gc->irc=user->irc;
    160163       
    161164        connections = g_slist_append( connections, gc );
     165       
     166        user->gc = gc;
     167        gc->user = user;
     168       
     169        // Find the account_t so we can set its gc pointer
     170        for( a = gc->irc->accounts; a; a = a->next )
     171                if( ( struct aim_user * ) a->gc == user )
     172                {
     173                        a->gc = gc;
     174                        break;
     175                }
    162176       
    163177        return( gc );
     
    177191       
    178192        connections = g_slist_remove( connections, gc );
     193        g_free( gc->user );
    179194        g_free( gc );
    180195}
     
    207222        va_end( params );
    208223
    209         if( ( g_strcasecmp( set_getstr( &gc->irc->set, "strip_html" ), "always" ) == 0 ) ||
    210             ( ( gc->flags & OPT_CONN_HTML ) && set_getint( &gc->irc->set, "strip_html" ) ) )
     224        if( ( g_strcasecmp( set_getstr( gc->irc, "strip_html" ), "always" ) == 0 ) ||
     225            ( ( gc->flags & OPT_CONN_HTML ) && set_getint( gc->irc, "strip_html" ) ) )
    211226                strip_html( text );
    212227       
    213228        /* Try to find a different connection on the same protocol. */
    214229        for( a = gc->irc->accounts; a; a = a->next )
    215                 if( a->prpl == gc->acc->prpl && a->gc != gc )
     230                if( a->prpl == gc->prpl && a->gc != gc )
    216231                        break;
    217232       
    218233        /* If we found one, include the screenname in the message. */
    219234        if( a )
    220                 irc_usermsg( gc->irc, "%s(%s) - %s", gc->acc->prpl->name, gc->username, text );
     235                irc_usermsg( gc->irc, "%s(%s) - %s", gc->prpl->name, gc->username, text );
    221236        else
    222                 irc_usermsg( gc->irc, "%s - %s", gc->acc->prpl->name, text );
     237                irc_usermsg( gc->irc, "%s - %s", gc->prpl->name, text );
    223238       
    224239        g_free( text );
    225240}
    226241
    227 static gboolean send_keepalive( gpointer d, gint fd, b_input_condition cond )
     242static gboolean send_keepalive( gpointer d )
    228243{
    229244        struct gaim_connection *gc = d;
    230245       
    231         if( gc->acc->prpl->keepalive )
    232                 gc->acc->prpl->keepalive( gc );
     246        if( gc->prpl && gc->prpl->keepalive )
     247                gc->prpl->keepalive( gc );
    233248       
    234249        return TRUE;
     
    249264        serv_got_crap( gc, "Logged in" );
    250265       
    251         gc->keepalive = b_timeout_add( 60000, send_keepalive, gc );
     266        gc->keepalive = g_timeout_add( 60000, send_keepalive, gc );
    252267        gc->flags |= OPT_LOGGED_IN;
    253268       
     
    257272}
    258273
    259 gboolean auto_reconnect( gpointer data, gint fd, b_input_condition cond )
     274gboolean auto_reconnect( gpointer data )
    260275{
    261276        account_t *a = data;
     
    269284void cancel_auto_reconnect( account_t *a )
    270285{
    271         /* while( b_event_remove_by_data( (gpointer) a ) ); */
    272         b_event_remove( a->reconnect );
     286        while( g_source_remove_by_user_data( (gpointer) a ) );
    273287        a->reconnect = 0;
    274288}
     
    281295       
    282296        serv_got_crap( gc, "Signing off.." );
    283        
    284         b_event_remove( gc->keepalive );
    285297        gc->flags |= OPT_LOGGING_OUT;
    286298       
     299        gaim_input_remove( gc->keepalive );
    287300        gc->keepalive = 0;
    288         gc->acc->prpl->close( gc );
    289         b_event_remove( gc->inpa );
     301        gc->prpl->close( gc );
     302        gaim_input_remove( gc->inpa );
    290303       
    291304        while( u )
     
    311324                /* Uhm... This is very sick. */
    312325        }
    313         else if( !gc->wants_to_die && set_getint( &irc->set, "auto_reconnect" ) )
    314         {
    315                 int delay = set_getint( &irc->set, "auto_reconnect_delay" );
    316                
     326        else if( !gc->wants_to_die && set_getint( irc, "auto_reconnect" ) )
     327        {
     328                int delay = set_getint( irc, "auto_reconnect_delay" );
    317329                serv_got_crap( gc, "Reconnecting in %d seconds..", delay );
    318                 a->reconnect = b_timeout_add( delay * 1000, auto_reconnect, a );
     330               
     331                a->reconnect = 1;
     332                g_timeout_add( delay * 1000, auto_reconnect, a );
    319333        }
    320334       
     
    352366        irc_t *irc = gc->irc;
    353367       
    354         if( set_getint( &irc->set, "debug" ) && 0 ) /* This message is too useless */
     368        if( set_getint( irc, "debug" ) && 0 ) /* This message is too useless */
    355369                serv_got_crap( gc, "Receiving user add from handle: %s", handle );
    356370       
    357371        if( user_findhandle( gc, handle ) )
    358372        {
    359                 if( set_getint( &irc->set, "debug" ) )
     373                if( set_getint( irc, "debug" ) )
    360374                        serv_got_crap( gc, "User already exists, ignoring add request: %s", handle );
    361375               
     
    366380       
    367381        memset( nick, 0, MAX_NICK_LENGTH + 1 );
    368         strcpy( nick, nick_get( gc->acc, handle, realname ) );
     382        strcpy( nick, nick_get( gc->irc, handle, gc->prpl, realname ) );
    369383       
    370384        u = user_add( gc->irc, nick );
     
    378392                u->user = g_strndup( handle, s - handle );
    379393        }
    380         else if( gc->acc->server )
     394        else if( gc->user->proto_opt[0] && *gc->user->proto_opt[0] )
    381395        {
    382396                char *colon;
    383397               
    384                 if( ( colon = strchr( gc->acc->server, ':' ) ) )
    385                         u->host = g_strndup( gc->acc->server,
    386                                              colon - gc->acc->server );
     398                if( ( colon = strchr( gc->user->proto_opt[0], ':' ) ) )
     399                        u->host = g_strndup( gc->user->proto_opt[0],
     400                                             colon - gc->user->proto_opt[0] );
    387401                else
    388                         u->host = g_strdup( gc->acc->server );
     402                        u->host = g_strdup( gc->user->proto_opt[0] );
    389403               
    390404                u->user = g_strdup( handle );
     
    397411        else
    398412        {
    399                 u->host = g_strdup( gc->acc->prpl->name );
     413                u->host = g_strdup( gc->user->prpl->name );
    400414                u->user = g_strdup( handle );
    401415        }
     
    445459                u->realname = g_strdup( realname );
    446460               
    447                 if( ( gc->flags & OPT_LOGGED_IN ) && set_getint( &gc->irc->set, "display_namechanges" ) )
     461                if( ( gc->flags & OPT_LOGGED_IN ) && set_getint( gc->irc, "display_namechanges" ) )
    448462                        serv_got_crap( gc, "User `%s' changed name to `%s'", u->nick, u->realname );
    449463        }
     
    467481void show_got_added_yes( gpointer w, struct show_got_added_data *data )
    468482{
    469         data->gc->acc->prpl->add_buddy( data->gc, data->handle );
     483        data->gc->prpl->add_buddy( data->gc, data->handle );
    470484        add_buddy( data->gc, NULL, data->handle, data->handle );
    471485       
     
    501515        if( !u )
    502516        {
    503                 if( g_strcasecmp( set_getstr( &gc->irc->set, "handle_unknown" ), "add" ) == 0 )
     517                if( g_strcasecmp( set_getstr( gc->irc, "handle_unknown" ), "add" ) == 0 )
    504518                {
    505519                        add_buddy( gc, NULL, handle, NULL );
     
    508522                else
    509523                {
    510                         if( set_getint( &gc->irc->set, "debug" ) || g_strcasecmp( set_getstr( &gc->irc->set, "handle_unknown" ), "ignore" ) != 0 )
     524                        if( set_getint( gc->irc, "debug" ) || g_strcasecmp( set_getstr( gc->irc, "handle_unknown" ), "ignore" ) != 0 )
    511525                        {
    512526                                serv_got_crap( gc, "serv_got_update() for handle %s:", handle );
     
    546560        }
    547561       
    548         if( ( type & UC_UNAVAILABLE ) && ( strcmp( gc->acc->prpl->name, "oscar" ) == 0 || strcmp( gc->acc->prpl->name, "icq" ) == 0 ) )
     562        if( ( type & UC_UNAVAILABLE ) && ( !strcmp(gc->prpl->name, "oscar") || !strcmp(gc->prpl->name, "icq")) )
    549563        {
    550564                u->away = g_strdup( "Away" );
    551565        }
    552         else if( ( type & UC_UNAVAILABLE ) && ( strcmp( gc->acc->prpl->name, "jabber" ) == 0 ) )
     566        else if( ( type & UC_UNAVAILABLE ) && ( !strcmp(gc->prpl->name, "jabber") ) )
    553567        {
    554568                if( type & UC_DND )
     
    559573                        u->away = g_strdup( "Away" );
    560574        }
    561         else if( ( type & UC_UNAVAILABLE ) && gc->acc->prpl->get_status_string )
    562         {
    563                 u->away = g_strdup( gc->acc->prpl->get_status_string( gc, type ) );
     575        else if( ( type & UC_UNAVAILABLE ) && gc->prpl->get_status_string )
     576        {
     577                u->away = g_strdup( gc->prpl->get_status_string( gc, type ) );
    564578        }
    565579        else
     
    567581       
    568582        /* LISPy... */
    569         if( ( set_getint( &gc->irc->set, "away_devoice" ) ) &&          /* Don't do a thing when user doesn't want it */
     583        if( ( set_getint( gc->irc, "away_devoice" ) ) &&                /* Don't do a thing when user doesn't want it */
    570584            ( u->online ) &&                                            /* Don't touch offline people */
    571585            ( ( ( u->online != oo ) && !u->away ) ||                    /* Voice joining people */
     
    586600        if( !u )
    587601        {
    588                 char *h = set_getstr( &irc->set, "handle_unknown" );
     602                char *h = set_getstr( irc, "handle_unknown" );
    589603               
    590604                if( g_strcasecmp( h, "ignore" ) == 0 )
    591605                {
    592                         if( set_getint( &irc->set, "debug" ) )
     606                        if( set_getint( irc, "debug" ) )
    593607                                serv_got_crap( gc, "Ignoring message from unknown handle %s", handle );
    594608                       
     
    597611                else if( g_strncasecmp( h, "add", 3 ) == 0 )
    598612                {
    599                         int private = set_getint( &irc->set, "private" );
     613                        int private = set_getint( irc, "private" );
    600614                       
    601615                        if( h[3] )
     
    618632        }
    619633       
    620         if( ( g_strcasecmp( set_getstr( &gc->irc->set, "strip_html" ), "always" ) == 0 ) ||
    621             ( ( gc->flags & OPT_CONN_HTML ) && set_getint( &gc->irc->set, "strip_html" ) ) )
     634        if( ( g_strcasecmp( set_getstr( gc->irc, "strip_html" ), "always" ) == 0 ) ||
     635            ( ( gc->flags & OPT_CONN_HTML ) && set_getint( gc->irc, "strip_html" ) ) )
    622636                strip_html( msg );
    623637
     
    659673        user_t *u;
    660674       
    661         if( !set_getint( &gc->irc->set, "typing_notice" ) )
     675        if( !set_getint( gc->irc, "typing_notice" ) )
    662676                return;
    663677       
     
    681695        GList *ir;
    682696       
    683         if( set_getint( &gc->irc->set, "debug" ) )
     697        if( set_getint( gc->irc, "debug" ) )
    684698                serv_got_crap( gc, "You were removed from conversation %d", (int) id );
    685699       
     
    720734       
    721735        /* Gaim sends own messages through this too. IRC doesn't want this, so kill them */
    722         if( g_strcasecmp( who, gc->username ) == 0 )
     736        if( g_strcasecmp( who, gc->user->username ) == 0 )
    723737                return;
    724738       
     
    726740        for( c = gc->conversations; c && c->id != id; c = c->next );
    727741       
    728         if( ( g_strcasecmp( set_getstr( &gc->irc->set, "strip_html" ), "always" ) == 0 ) ||
    729             ( ( gc->flags & OPT_CONN_HTML ) && set_getint( &gc->irc->set, "strip_html" ) ) )
     742        if( ( g_strcasecmp( set_getstr( gc->irc, "strip_html" ), "always" ) == 0 ) ||
     743            ( ( gc->flags & OPT_CONN_HTML ) && set_getint( gc->irc, "strip_html" ) ) )
    730744                strip_html( msg );
    731745       
     
    760774        g_free( s );
    761775       
    762         if( set_getint( &gc->irc->set, "debug" ) )
     776        if( set_getint( gc->irc, "debug" ) )
    763777                serv_got_crap( gc, "Creating new conversation: (id=%d,handle=%s)", id, handle );
    764778       
     
    774788        int me = 0;
    775789       
    776         if( set_getint( &b->gc->irc->set, "debug" ) )
     790        if( set_getint( b->gc->irc, "debug" ) )
    777791                serv_got_crap( b->gc, "User %s added to conversation %d", handle, b->id );
    778792       
    779793        /* It might be yourself! */
    780         if( b->gc->acc->prpl->handle_cmp( handle, b->gc->username ) == 0 )
     794        if( b->gc->prpl->cmp_buddynames( handle, b->gc->user->username ) == 0 )
    781795        {
    782796                u = user_find( b->gc->irc, b->gc->irc->nick );
     
    808822        int me = 0;
    809823       
    810         if( set_getint( &b->gc->irc->set, "debug" ) )
     824        if( set_getint( b->gc->irc, "debug" ) )
    811825                serv_got_crap( b->gc, "User %s removed from conversation %d (%s)", handle, b->id, reason ? reason : "" );
    812826       
    813827        /* It might be yourself! */
    814         if( g_strcasecmp( handle, b->gc->username ) == 0 )
     828        if( g_strcasecmp( handle, b->gc->user->username ) == 0 )
    815829        {
    816830                u = user_find( b->gc->irc, b->gc->irc->nick );
     
    870884}
    871885
    872 char *set_eval_away_devoice( set_t *set, char *value )
    873 {
    874         irc_t *irc = set->data;
     886char *set_eval_away_devoice( irc_t *irc, set_t *set, char *value )
     887{
    875888        int st;
    876889       
     
    886899        /* Horror.... */
    887900       
    888         if( st != set_getint( &irc->set, "away_devoice" ) )
     901        if( st != set_getint( irc, "away_devoice" ) )
    889902        {
    890903                char list[80] = "";
     
    926939        }
    927940       
    928         return( set_eval_bool( set, value ) );
     941        return( set_eval_bool( irc, set, value ) );
    929942}
    930943
     
    946959        }
    947960       
    948         st = gc->acc->prpl->send_im( gc, handle, msg, strlen( msg ), flags );
     961        st = gc->prpl->send_im( gc, handle, msg, strlen( msg ), flags );
    949962        g_free( buf );
    950963       
     
    963976        }
    964977       
    965         st = gc->acc->prpl->chat_send( gc, id, msg );
     978        st = gc->prpl->chat_send( gc, id, msg );
    966979        g_free( buf );
    967980       
     
    977990       
    978991        if( !away ) away = "";
    979         ms = m = gc->acc->prpl->away_states( gc );
     992        ms = m = gc->prpl->away_states( gc );
    980993       
    981994        while( m )
     
    9981011        if( m )
    9991012        {
    1000                 gc->acc->prpl->set_away( gc, m->data, *away ? away : NULL );
     1013                gc->prpl->set_away( gc, m->data, *away ? away : NULL );
    10011014        }
    10021015        else
     
    10051018                if( s )
    10061019                {
    1007                         gc->acc->prpl->set_away( gc, s, away );
    1008                         if( set_getint( &gc->irc->set, "debug" ) )
     1020                        gc->prpl->set_away( gc, s, away );
     1021                        if( set_getint( gc->irc, "debug" ) )
    10091022                                serv_got_crap( gc, "Setting away state to %s", s );
    10101023                }
    10111024                else
    1012                         gc->acc->prpl->set_away( gc, GAIM_AWAY_CUSTOM, away );
     1025                        gc->prpl->set_away( gc, GAIM_AWAY_CUSTOM, away );
    10131026        }
    10141027       
     
    10621075void bim_add_allow( struct gaim_connection *gc, char *handle )
    10631076{
    1064         if( g_slist_find_custom( gc->permit, handle, (GCompareFunc) gc->acc->prpl->handle_cmp ) == NULL )
     1077        if( g_slist_find_custom( gc->permit, handle, (GCompareFunc) gc->prpl->cmp_buddynames ) == NULL )
    10651078        {
    10661079                gc->permit = g_slist_prepend( gc->permit, g_strdup( handle ) );
    10671080        }
    10681081       
    1069         gc->acc->prpl->add_permit( gc, handle );
     1082        gc->prpl->add_permit( gc, handle );
    10701083}
    10711084
     
    10741087        GSList *l;
    10751088       
    1076         if( ( l = g_slist_find_custom( gc->permit, handle, (GCompareFunc) gc->acc->prpl->handle_cmp ) ) )
     1089        if( ( l = g_slist_find_custom( gc->permit, handle, (GCompareFunc) gc->prpl->cmp_buddynames ) ) )
    10771090        {
    10781091                g_free( l->data );
     
    10801093        }
    10811094       
    1082         gc->acc->prpl->rem_permit( gc, handle );
     1095        gc->prpl->rem_permit( gc, handle );
    10831096}
    10841097
    10851098void bim_add_block( struct gaim_connection *gc, char *handle )
    10861099{
    1087         if( g_slist_find_custom( gc->deny, handle, (GCompareFunc) gc->acc->prpl->handle_cmp ) == NULL )
     1100        if( g_slist_find_custom( gc->deny, handle, (GCompareFunc) gc->prpl->cmp_buddynames ) == NULL )
    10881101        {
    10891102                gc->deny = g_slist_prepend( gc->deny, g_strdup( handle ) );
    10901103        }
    10911104       
    1092         gc->acc->prpl->add_deny( gc, handle );
     1105        gc->prpl->add_deny( gc, handle );
    10931106}
    10941107
     
    10971110        GSList *l;
    10981111       
    1099         if( ( l = g_slist_find_custom( gc->deny, handle, (GCompareFunc) gc->acc->prpl->handle_cmp ) ) )
     1112        if( ( l = g_slist_find_custom( gc->deny, handle, (GCompareFunc) gc->prpl->cmp_buddynames ) ) )
    11001113        {
    11011114                g_free( l->data );
     
    11031116        }
    11041117       
    1105         gc->acc->prpl->rem_deny( gc, handle );
    1106 }
     1118        gc->prpl->rem_deny( gc, handle );
     1119}
Note: See TracChangeset for help on using the changeset viewer.