Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • protocols/nogaim.c

    rfb62f81f r5b52a48  
    22  * BitlBee -- An IRC to other IM-networks gateway                     *
    33  *                                                                    *
    4   * Copyright 2002-2004 Wilmer van der Gaast and others                *
     4  * Copyright 2002-2006 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
    1715 */
    1816
     
    147145/* multi.c */
    148146
    149 struct gaim_connection *new_gaim_conn( struct aim_user *user )
     147struct gaim_connection *new_gaim_conn( account_t *acc )
    150148{
    151149        struct gaim_connection *gc;
    152         account_t *a;
    153150       
    154151        gc = g_new0( struct gaim_connection, 1 );
    155152       
    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;
     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;
    163160       
    164161        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                 }
    176162       
    177163        return( gc );
     
    191177       
    192178        connections = g_slist_remove( connections, gc );
    193         g_free( gc->user );
    194179        g_free( gc );
    195180}
     
    222207        va_end( params );
    223208
    224         if( ( g_strcasecmp( set_getstr( gc->irc, "strip_html" ), "always" ) == 0 ) ||
    225             ( ( gc->flags & OPT_CONN_HTML ) && set_getint( gc->irc, "strip_html" ) ) )
     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" ) ) )
    226211                strip_html( text );
    227212       
    228213        /* Try to find a different connection on the same protocol. */
    229214        for( a = gc->irc->accounts; a; a = a->next )
    230                 if( a->prpl == gc->prpl && a->gc != gc )
     215                if( a->prpl == gc->acc->prpl && a->gc != gc )
    231216                        break;
    232217       
    233218        /* If we found one, include the screenname in the message. */
    234219        if( a )
    235                 irc_usermsg( gc->irc, "%s(%s) - %s", gc->prpl->name, gc->username, text );
     220                irc_usermsg( gc->irc, "%s(%s) - %s", gc->acc->prpl->name, gc->username, text );
    236221        else
    237                 irc_usermsg( gc->irc, "%s - %s", gc->prpl->name, text );
     222                irc_usermsg( gc->irc, "%s - %s", gc->acc->prpl->name, text );
    238223       
    239224        g_free( text );
    240225}
    241226
    242 static gboolean send_keepalive( gpointer d )
     227static gboolean send_keepalive( gpointer d, gint fd, b_input_condition cond )
    243228{
    244229        struct gaim_connection *gc = d;
    245230       
    246         if( gc->prpl && gc->prpl->keepalive )
    247                 gc->prpl->keepalive( gc );
     231        if( gc->acc->prpl->keepalive )
     232                gc->acc->prpl->keepalive( gc );
    248233       
    249234        return TRUE;
     
    264249        serv_got_crap( gc, "Logged in" );
    265250       
    266         gc->keepalive = g_timeout_add( 60000, send_keepalive, gc );
     251        gc->keepalive = b_timeout_add( 60000, send_keepalive, gc );
    267252        gc->flags |= OPT_LOGGED_IN;
    268253       
     
    272257}
    273258
    274 gboolean auto_reconnect( gpointer data )
     259gboolean auto_reconnect( gpointer data, gint fd, b_input_condition cond )
    275260{
    276261        account_t *a = data;
     
    284269void cancel_auto_reconnect( account_t *a )
    285270{
    286         while( g_source_remove_by_user_data( (gpointer) a ) );
     271        /* while( b_event_remove_by_data( (gpointer) a ) ); */
     272        b_event_remove( a->reconnect );
    287273        a->reconnect = 0;
    288274}
     
    295281       
    296282        serv_got_crap( gc, "Signing off.." );
     283       
     284        b_event_remove( gc->keepalive );
    297285        gc->flags |= OPT_LOGGING_OUT;
    298286       
    299         gaim_input_remove( gc->keepalive );
    300287        gc->keepalive = 0;
    301         gc->prpl->close( gc );
    302         gaim_input_remove( gc->inpa );
     288        gc->acc->prpl->close( gc );
     289        b_event_remove( gc->inpa );
    303290       
    304291        while( u )
     
    324311                /* Uhm... This is very sick. */
    325312        }
    326         else if( !gc->wants_to_die && set_getint( irc, "auto_reconnect" ) )
    327         {
    328                 int delay = set_getint( irc, "auto_reconnect_delay" );
     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               
    329317                serv_got_crap( gc, "Reconnecting in %d seconds..", delay );
    330                
    331                 a->reconnect = 1;
    332                 g_timeout_add( delay * 1000, auto_reconnect, a );
     318                a->reconnect = b_timeout_add( delay * 1000, auto_reconnect, a );
    333319        }
    334320       
     
    366352        irc_t *irc = gc->irc;
    367353       
    368         if( set_getint( irc, "debug" ) && 0 ) /* This message is too useless */
     354        if( set_getint( &irc->set, "debug" ) && 0 ) /* This message is too useless */
    369355                serv_got_crap( gc, "Receiving user add from handle: %s", handle );
    370356       
    371357        if( user_findhandle( gc, handle ) )
    372358        {
    373                 if( set_getint( irc, "debug" ) )
     359                if( set_getint( &irc->set, "debug" ) )
    374360                        serv_got_crap( gc, "User already exists, ignoring add request: %s", handle );
    375361               
     
    380366       
    381367        memset( nick, 0, MAX_NICK_LENGTH + 1 );
    382         strcpy( nick, nick_get( gc->irc, handle, gc->prpl, realname ) );
     368        strcpy( nick, nick_get( gc->acc, handle, realname ) );
    383369       
    384370        u = user_add( gc->irc, nick );
     
    392378                u->user = g_strndup( handle, s - handle );
    393379        }
    394         else if( gc->user->proto_opt[0] && *gc->user->proto_opt[0] )
     380        else if( gc->acc->server )
    395381        {
    396382                char *colon;
    397383               
    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] );
     384                if( ( colon = strchr( gc->acc->server, ':' ) ) )
     385                        u->host = g_strndup( gc->acc->server,
     386                                             colon - gc->acc->server );
    401387                else
    402                         u->host = g_strdup( gc->user->proto_opt[0] );
     388                        u->host = g_strdup( gc->acc->server );
    403389               
    404390                u->user = g_strdup( handle );
     
    411397        else
    412398        {
    413                 u->host = g_strdup( gc->user->prpl->name );
     399                u->host = g_strdup( gc->acc->prpl->name );
    414400                u->user = g_strdup( handle );
    415401        }
     
    459445                u->realname = g_strdup( realname );
    460446               
    461                 if( ( gc->flags & OPT_LOGGED_IN ) && set_getint( gc->irc, "display_namechanges" ) )
     447                if( ( gc->flags & OPT_LOGGED_IN ) && set_getint( &gc->irc->set, "display_namechanges" ) )
    462448                        serv_got_crap( gc, "User `%s' changed name to `%s'", u->nick, u->realname );
    463449        }
     
    481467void show_got_added_yes( gpointer w, struct show_got_added_data *data )
    482468{
    483         data->gc->prpl->add_buddy( data->gc, data->handle );
     469        data->gc->acc->prpl->add_buddy( data->gc, data->handle );
    484470        add_buddy( data->gc, NULL, data->handle, data->handle );
    485471       
     
    515501        if( !u )
    516502        {
    517                 if( g_strcasecmp( set_getstr( gc->irc, "handle_unknown" ), "add" ) == 0 )
     503                if( g_strcasecmp( set_getstr( &gc->irc->set, "handle_unknown" ), "add" ) == 0 )
    518504                {
    519505                        add_buddy( gc, NULL, handle, NULL );
     
    522508                else
    523509                {
    524                         if( set_getint( gc->irc, "debug" ) || g_strcasecmp( set_getstr( gc->irc, "handle_unknown" ), "ignore" ) != 0 )
     510                        if( set_getint( &gc->irc->set, "debug" ) || g_strcasecmp( set_getstr( &gc->irc->set, "handle_unknown" ), "ignore" ) != 0 )
    525511                        {
    526512                                serv_got_crap( gc, "serv_got_update() for handle %s:", handle );
     
    560546        }
    561547       
    562         if( ( type & UC_UNAVAILABLE ) && ( !strcmp(gc->prpl->name, "oscar") || !strcmp(gc->prpl->name, "icq")) )
     548        if( ( type & UC_UNAVAILABLE ) && ( strcmp( gc->acc->prpl->name, "oscar" ) == 0 || strcmp( gc->acc->prpl->name, "icq" ) == 0 ) )
    563549        {
    564550                u->away = g_strdup( "Away" );
    565551        }
    566         else if( ( type & UC_UNAVAILABLE ) && ( !strcmp(gc->prpl->name, "jabber") ) )
     552        else if( ( type & UC_UNAVAILABLE ) && ( strcmp( gc->acc->prpl->name, "jabber" ) == 0 ) )
    567553        {
    568554                if( type & UC_DND )
     
    573559                        u->away = g_strdup( "Away" );
    574560        }
    575         else if( ( type & UC_UNAVAILABLE ) && gc->prpl->get_status_string )
    576         {
    577                 u->away = g_strdup( gc->prpl->get_status_string( gc, type ) );
     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 ) );
    578564        }
    579565        else
     
    581567       
    582568        /* LISPy... */
    583         if( ( set_getint( gc->irc, "away_devoice" ) ) &&                /* Don't do a thing when user doesn't want it */
     569        if( ( set_getint( &gc->irc->set, "away_devoice" ) ) &&          /* Don't do a thing when user doesn't want it */
    584570            ( u->online ) &&                                            /* Don't touch offline people */
    585571            ( ( ( u->online != oo ) && !u->away ) ||                    /* Voice joining people */
     
    600586        if( !u )
    601587        {
    602                 char *h = set_getstr( irc, "handle_unknown" );
     588                char *h = set_getstr( &irc->set, "handle_unknown" );
    603589               
    604590                if( g_strcasecmp( h, "ignore" ) == 0 )
    605591                {
    606                         if( set_getint( irc, "debug" ) )
     592                        if( set_getint( &irc->set, "debug" ) )
    607593                                serv_got_crap( gc, "Ignoring message from unknown handle %s", handle );
    608594                       
     
    611597                else if( g_strncasecmp( h, "add", 3 ) == 0 )
    612598                {
    613                         int private = set_getint( irc, "private" );
     599                        int private = set_getint( &irc->set, "private" );
    614600                       
    615601                        if( h[3] )
     
    632618        }
    633619       
    634         if( ( g_strcasecmp( set_getstr( gc->irc, "strip_html" ), "always" ) == 0 ) ||
    635             ( ( gc->flags & OPT_CONN_HTML ) && set_getint( gc->irc, "strip_html" ) ) )
     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" ) ) )
    636622                strip_html( msg );
    637623
     
    673659        user_t *u;
    674660       
    675         if( !set_getint( gc->irc, "typing_notice" ) )
     661        if( !set_getint( &gc->irc->set, "typing_notice" ) )
    676662                return;
    677663       
     
    695681        GList *ir;
    696682       
    697         if( set_getint( gc->irc, "debug" ) )
     683        if( set_getint( &gc->irc->set, "debug" ) )
    698684                serv_got_crap( gc, "You were removed from conversation %d", (int) id );
    699685       
     
    734720       
    735721        /* Gaim sends own messages through this too. IRC doesn't want this, so kill them */
    736         if( g_strcasecmp( who, gc->user->username ) == 0 )
     722        if( g_strcasecmp( who, gc->username ) == 0 )
    737723                return;
    738724       
     
    740726        for( c = gc->conversations; c && c->id != id; c = c->next );
    741727       
    742         if( ( g_strcasecmp( set_getstr( gc->irc, "strip_html" ), "always" ) == 0 ) ||
    743             ( ( gc->flags & OPT_CONN_HTML ) && set_getint( gc->irc, "strip_html" ) ) )
     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" ) ) )
    744730                strip_html( msg );
    745731       
     
    774760        g_free( s );
    775761       
    776         if( set_getint( gc->irc, "debug" ) )
     762        if( set_getint( &gc->irc->set, "debug" ) )
    777763                serv_got_crap( gc, "Creating new conversation: (id=%d,handle=%s)", id, handle );
    778764       
     
    788774        int me = 0;
    789775       
    790         if( set_getint( b->gc->irc, "debug" ) )
     776        if( set_getint( &b->gc->irc->set, "debug" ) )
    791777                serv_got_crap( b->gc, "User %s added to conversation %d", handle, b->id );
    792778       
    793779        /* It might be yourself! */
    794         if( b->gc->prpl->cmp_buddynames( handle, b->gc->user->username ) == 0 )
     780        if( b->gc->acc->prpl->handle_cmp( handle, b->gc->username ) == 0 )
    795781        {
    796782                u = user_find( b->gc->irc, b->gc->irc->nick );
     
    822808        int me = 0;
    823809       
    824         if( set_getint( b->gc->irc, "debug" ) )
     810        if( set_getint( &b->gc->irc->set, "debug" ) )
    825811                serv_got_crap( b->gc, "User %s removed from conversation %d (%s)", handle, b->id, reason ? reason : "" );
    826812       
    827813        /* It might be yourself! */
    828         if( g_strcasecmp( handle, b->gc->user->username ) == 0 )
     814        if( g_strcasecmp( handle, b->gc->username ) == 0 )
    829815        {
    830816                u = user_find( b->gc->irc, b->gc->irc->nick );
     
    884870}
    885871
    886 char *set_eval_away_devoice( irc_t *irc, set_t *set, char *value )
    887 {
     872char *set_eval_away_devoice( set_t *set, char *value )
     873{
     874        irc_t *irc = set->data;
    888875        int st;
    889876       
     
    899886        /* Horror.... */
    900887       
    901         if( st != set_getint( irc, "away_devoice" ) )
     888        if( st != set_getint( &irc->set, "away_devoice" ) )
    902889        {
    903890                char list[80] = "";
     
    939926        }
    940927       
    941         return( set_eval_bool( irc, set, value ) );
     928        return( set_eval_bool( set, value ) );
    942929}
    943930
     
    959946        }
    960947       
    961         st = gc->prpl->send_im( gc, handle, msg, strlen( msg ), flags );
     948        st = gc->acc->prpl->send_im( gc, handle, msg, strlen( msg ), flags );
    962949        g_free( buf );
    963950       
     
    976963        }
    977964       
    978         st = gc->prpl->chat_send( gc, id, msg );
     965        st = gc->acc->prpl->chat_send( gc, id, msg );
    979966        g_free( buf );
    980967       
     
    990977       
    991978        if( !away ) away = "";
    992         ms = m = gc->prpl->away_states( gc );
     979        ms = m = gc->acc->prpl->away_states( gc );
    993980       
    994981        while( m )
     
    1011998        if( m )
    1012999        {
    1013                 gc->prpl->set_away( gc, m->data, *away ? away : NULL );
     1000                gc->acc->prpl->set_away( gc, m->data, *away ? away : NULL );
    10141001        }
    10151002        else
     
    10181005                if( s )
    10191006                {
    1020                         gc->prpl->set_away( gc, s, away );
    1021                         if( set_getint( gc->irc, "debug" ) )
     1007                        gc->acc->prpl->set_away( gc, s, away );
     1008                        if( set_getint( &gc->irc->set, "debug" ) )
    10221009                                serv_got_crap( gc, "Setting away state to %s", s );
    10231010                }
    10241011                else
    1025                         gc->prpl->set_away( gc, GAIM_AWAY_CUSTOM, away );
     1012                        gc->acc->prpl->set_away( gc, GAIM_AWAY_CUSTOM, away );
    10261013        }
    10271014       
     
    10751062void bim_add_allow( struct gaim_connection *gc, char *handle )
    10761063{
    1077         if( g_slist_find_custom( gc->permit, handle, (GCompareFunc) gc->prpl->cmp_buddynames ) == NULL )
     1064        if( g_slist_find_custom( gc->permit, handle, (GCompareFunc) gc->acc->prpl->handle_cmp ) == NULL )
    10781065        {
    10791066                gc->permit = g_slist_prepend( gc->permit, g_strdup( handle ) );
    10801067        }
    10811068       
    1082         gc->prpl->add_permit( gc, handle );
     1069        gc->acc->prpl->add_permit( gc, handle );
    10831070}
    10841071
     
    10871074        GSList *l;
    10881075       
    1089         if( ( l = g_slist_find_custom( gc->permit, handle, (GCompareFunc) gc->prpl->cmp_buddynames ) ) )
     1076        if( ( l = g_slist_find_custom( gc->permit, handle, (GCompareFunc) gc->acc->prpl->handle_cmp ) ) )
    10901077        {
    10911078                g_free( l->data );
     
    10931080        }
    10941081       
    1095         gc->prpl->rem_permit( gc, handle );
     1082        gc->acc->prpl->rem_permit( gc, handle );
    10961083}
    10971084
    10981085void bim_add_block( struct gaim_connection *gc, char *handle )
    10991086{
    1100         if( g_slist_find_custom( gc->deny, handle, (GCompareFunc) gc->prpl->cmp_buddynames ) == NULL )
     1087        if( g_slist_find_custom( gc->deny, handle, (GCompareFunc) gc->acc->prpl->handle_cmp ) == NULL )
    11011088        {
    11021089                gc->deny = g_slist_prepend( gc->deny, g_strdup( handle ) );
    11031090        }
    11041091       
    1105         gc->prpl->add_deny( gc, handle );
     1092        gc->acc->prpl->add_deny( gc, handle );
    11061093}
    11071094
     
    11101097        GSList *l;
    11111098       
    1112         if( ( l = g_slist_find_custom( gc->deny, handle, (GCompareFunc) gc->prpl->cmp_buddynames ) ) )
     1099        if( ( l = g_slist_find_custom( gc->deny, handle, (GCompareFunc) gc->acc->prpl->handle_cmp ) ) )
    11131100        {
    11141101                g_free( l->data );
     
    11161103        }
    11171104       
    1118         gc->prpl->rem_deny( gc, handle );
    1119 }
     1105        gc->acc->prpl->rem_deny( gc, handle );
     1106}
Note: See TracChangeset for help on using the changeset viewer.