Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • irc.c

    rdd89a55 r0356ae3  
    2929#include "ipc.h"
    3030
    31 static gboolean irc_userping( gpointer _irc );
     31static gboolean irc_userping( gpointer _irc, int fd, b_input_condition cond );
    3232
    3333GSList *irc_connection_list = NULL;
     
    5454       
    5555        irc->fd = fd;
    56         irc->io_channel = g_io_channel_unix_new( fd );
    57 #ifdef GLIB2
    58         g_io_channel_set_encoding (irc->io_channel, NULL, NULL);
    59         g_io_channel_set_buffered (irc->io_channel, FALSE);
    60         g_io_channel_set_flags( irc->io_channel, G_IO_FLAG_NONBLOCK, NULL );
    61 #else
    62         fcntl( irc->fd, F_SETFL, O_NONBLOCK);
    63 #endif
    64         irc->r_watch_source_id = g_io_add_watch( irc->io_channel, G_IO_IN | G_IO_ERR | G_IO_HUP, bitlbee_io_current_client_read, irc );
     56        sock_make_nonblocking( irc->fd );
     57       
     58        irc->r_watch_source_id = b_input_add( irc->fd, GAIM_INPUT_READ, bitlbee_io_current_client_read, irc );
    6559       
    6660        irc->status = USTATUS_OFFLINE;
     
    120114
    121115        if( global.conf->ping_interval > 0 && global.conf->ping_timeout > 0 )
    122                 irc->ping_source_id = g_timeout_add( global.conf->ping_interval * 1000, irc_userping, irc );
     116                irc->ping_source_id = b_timeout_add( global.conf->ping_interval * 1000, irc_userping, irc );
    123117       
    124118        irc_write( irc, ":%s NOTICE AUTH :%s", irc->myhost, "BitlBee-IRCd initialized, please go on" );
     
    190184                   bitlbee_.._write doesn't do it first. */
    191185               
    192                 g_source_remove( irc->r_watch_source_id );
    193                 irc->r_watch_source_id = g_timeout_add_full( G_PRIORITY_HIGH, 1000, (GSourceFunc) irc_free, irc, NULL );
     186                b_event_remove( irc->r_watch_source_id );
     187                irc->r_watch_source_id = b_timeout_add( 1000, (b_event_handler) irc_free, irc );
    194188        }
    195189        else
     
    224218       
    225219        if( irc->ping_source_id > 0 )
    226                 g_source_remove( irc->ping_source_id );
    227         g_source_remove( irc->r_watch_source_id );
     220                b_event_remove( irc->ping_source_id );
     221        b_event_remove( irc->r_watch_source_id );
    228222        if( irc->w_watch_source_id > 0 )
    229                 g_source_remove( irc->w_watch_source_id );
    230        
    231         g_io_channel_unref( irc->io_channel );
     223                b_event_remove( irc->w_watch_source_id );
     224       
    232225        irc_connection_list = g_slist_remove( irc_connection_list, irc );
    233226       
     
    279272                        if(user->host!=user->nick) g_free(user->host);
    280273                        if(user->realname!=user->nick) g_free(user->realname);
    281                         gaim_input_remove(user->sendbuf_timer);
     274                        b_event_remove(user->sendbuf_timer);
    282275                                       
    283276                        usertmp = user;
     
    329322       
    330323        if( global.conf->runmode == RUNMODE_INETD || global.conf->runmode == RUNMODE_FORKDAEMON )
    331                 g_main_quit( global.loop );
     324                b_main_quit();
    332325}
    333326
     
    557550       
    558551        u = user_find( irc, irc->mynick );
    559         is_private = u->is_private;
     552        if( u ) is_private = u->is_private;
    560553       
    561554        va_start( params, format );
     
    583576        char line[IRC_MAX_LINE+1], *cs;
    584577               
    585         if( irc->quit )
     578        /* Don't try to write anything new anymore when shutting down. */
     579        if( irc->status == USTATUS_SHUTDOWN )
    586580                return;
    587581       
     
    600594        strcat( line, "\r\n" );
    601595       
    602         if( irc->sendbuffer != NULL ) {
     596        if( irc->sendbuffer != NULL )
     597        {
    603598                size = strlen( irc->sendbuffer ) + strlen( line );
    604599                irc->sendbuffer = g_renew ( char, irc->sendbuffer, size + 1 );
    605600                strcpy( ( irc->sendbuffer + strlen( irc->sendbuffer ) ), line );
    606601        }
    607         else
    608                 irc->sendbuffer = g_strdup(line);       
     602        else
     603        {
     604                irc->sendbuffer = g_strdup(line);
     605        }
    609606       
    610607        if( irc->w_watch_source_id == 0 )
    611608        {
    612                 irc->w_watch_source_id = g_io_add_watch( irc->io_channel, G_IO_OUT, bitlbee_io_current_client_write, irc );
     609                /* If the buffer is empty we can probably write, so call the write event handler
     610                   immediately. If it returns TRUE, it should be called again, so add the event to
     611                   the queue. If it's FALSE, we emptied the buffer and saved ourselves some work
     612                   in the event queue. */
     613                if( bitlbee_io_current_client_write( irc, irc->fd, GAIM_INPUT_WRITE ) )
     614                        irc->w_watch_source_id = b_input_add( irc->fd, GAIM_INPUT_WRITE, bitlbee_io_current_client_write, irc );
    613615        }
    614616       
     
    636638                if( now )
    637639                {
    638                         bitlbee_io_current_client_write( irc->io_channel, G_IO_OUT, irc );
     640                        bitlbee_io_current_client_write( irc, irc->fd, GAIM_INPUT_WRITE );
    639641                }
    640642                temp = temp->next;
     
    10171019}
    10181020
    1019 gboolean buddy_send_handler_delayed( gpointer data )
     1021static gboolean buddy_send_handler_delayed( gpointer data, gint fd, b_input_condition cond )
    10201022{
    10211023        user_t *u = data;
     
    10301032        u->sendbuf_flags = 0;
    10311033       
    1032         return( FALSE );
     1034        return FALSE;
    10331035}
    10341036
     
    10441046                {
    10451047                        //Flush the buffer
    1046                         g_source_remove( u->sendbuf_timer );
    1047                         buddy_send_handler_delayed( u );
     1048                        b_event_remove( u->sendbuf_timer );
     1049                        buddy_send_handler_delayed( u, -1, 0 );
    10481050                }
    10491051
     
    10691071               
    10701072                if( u->sendbuf_timer > 0 )
    1071                         g_source_remove( u->sendbuf_timer );
    1072                 u->sendbuf_timer = g_timeout_add( delay, buddy_send_handler_delayed, u );
     1073                        b_event_remove( u->sendbuf_timer );
     1074                u->sendbuf_timer = b_timeout_add( delay, buddy_send_handler_delayed, u );
    10731075        }
    10741076        else
     
    11541156   pongs from the user. When not connected yet, we don't ping but drop the
    11551157   connection when the user fails to connect in IRC_LOGIN_TIMEOUT secs. */
    1156 static gboolean irc_userping( gpointer _irc )
     1158static gboolean irc_userping( gpointer _irc, gint fd, b_input_condition cond )
    11571159{
    11581160        irc_t *irc = _irc;
Note: See TracChangeset for help on using the changeset viewer.