Changes in / [b8c2ace:55ec2d6]


Ignore:
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • bitlbee.c

    rb8c2ace r55ec2d6  
    133133        if( condition & G_IO_ERR || condition & G_IO_HUP )
    134134        {
    135                 irc_free( irc );
     135                irc_abort( irc, 1, "Read error" );
    136136                return FALSE;
    137137        }
     
    140140        if( st == 0 )
    141141        {
    142                 irc_free( irc );
     142                irc_abort( irc, 1, "Connection reset by peer" );
    143143                return FALSE;
    144144        }
     
    151151                else
    152152                {
    153                         irc_free( irc );
     153                        irc_abort( irc, 1, "Read error: %s", strerror( errno ) );
    154154                        return FALSE;
    155155                }
     
    177177        if( irc->readbuffer && ( strlen( irc->readbuffer ) > 1024 ) )
    178178        {
    179                 log_message( LOGLVL_ERROR, "Maximum line length exceeded." );
    180                 irc_abort( irc );
     179                irc_abort( irc, 0, "Maximum line length exceeded" );
    181180                return FALSE;
    182181        }
     
    199198        if( st == 0 || ( st < 0 && !sockerr_again() ) )
    200199        {
    201                 irc_free( irc );
     200                irc_abort( irc, 1, "Write error: %s", strerror( errno ) );
    202201                return FALSE;
    203202        }
  • irc.c

    rb8c2ace r55ec2d6  
    152152}
    153153
    154 void irc_abort( irc_t *irc )
    155 {
     154void irc_abort( irc_t *irc, int immed, char *format, ... )
     155{
     156        va_list params;
     157       
     158        if( format != NULL )
     159        {
     160                char *reason;
     161               
     162                va_start( params, format );
     163                reason = g_strdup_printf( format, params );
     164                va_end( params );
     165               
     166                if( !immed )
     167                        irc_write( irc, "ERROR :Closing link: %s", reason );
     168               
     169                ipc_to_master_str( "OPERMSG :Client exiting: %s@%s [%s]\r\n",
     170                                   irc->nick, irc->host, reason" );
     171               
     172                g_free( reason );
     173        }
     174        else
     175        {
     176                if( !immed )
     177                        irc_write( irc, "ERROR :Closing link" );
     178               
     179                ipc_to_master_str( "OPERMSG :Client exiting: %s@%s [%s]\r\n",
     180                                   irc->nick, irc->host, "No reason given" );
     181        }
     182       
    156183        irc->status = USTATUS_SHUTDOWN;
    157         if( irc->sendbuffer )
    158         {
     184        if( irc->sendbuffer && !immed )
     185        {
     186                /* We won't read from this socket anymore. Instead, we'll connect a timer
     187                   to it that should shut down the connection in a second, just in case
     188                   bitlbee_.._write doesn't do it first. */
     189               
    159190                g_source_remove( irc->r_watch_source_id );
    160191                irc->r_watch_source_id = g_timeout_add_full( G_PRIORITY_HIGH, 1000, (GSourceFunc) irc_free, irc, NULL );
     
    11151146        if( rv > 0 )
    11161147        {
    1117                 irc_write( irc, "ERROR :Closing Link: Ping Timeout: %d seconds", rv );
    1118                 irc_free( irc );
     1148                irc_abort( irc, "ERROR :Closing Link: Ping Timeout: %d seconds", rv );
    11191149                return FALSE;
    11201150        }
  • irc.h

    rb8c2ace r55ec2d6  
    105105
    106106irc_t *irc_new( int fd );
    107 void irc_abort( irc_t *irc );
     107void irc_abort( irc_t *irc, int immed, char *format, ... );
    108108void irc_free( irc_t *irc );
    109109
Note: See TracChangeset for help on using the changeset viewer.