Changeset 1f0224c


Ignore:
Timestamp:
2010-06-06T01:11:13Z (10 years ago)
Author:
Wilmer van der Gaast <wilmer@…>
Branches:
master
Children:
88eaf4b
Parents:
18da20b
Message:

Send one /QUIT instead of one or more /PARTs for a user that is being
removed. Also restored netsplit simulation.

Files:
3 edited

Legend:

Unmodified
Added
Removed
  • irc.h

    r18da20b r1f0224c  
    239239void irc_send_join( irc_channel_t *ic, irc_user_t *iu );
    240240void irc_send_part( irc_channel_t *ic, irc_user_t *iu, const char *reason );
     241void irc_send_quit( irc_user_t *iu, const char *reason );
    241242void irc_send_names( irc_channel_t *ic );
    242243void irc_send_topic( irc_channel_t *ic, gboolean topic_change );
  • irc_send.c

    r18da20b r1f0224c  
    153153}
    154154
     155void irc_send_quit( irc_user_t *iu, const char *reason )
     156{
     157        irc_write( iu->irc, ":%s!%s@%s QUIT :%s", iu->nick, iu->user, iu->host, reason ? : "" );
     158}
     159
    155160void irc_send_names( irc_channel_t *ic )
    156161{
  • irc_user.c

    r18da20b r1f0224c  
    5050{
    5151        GSList *l;
     52        gboolean send_quit = FALSE;
    5253       
    5354        if( !iu )
     
    5859       
    5960        for( l = irc->channels; l; l = l->next )
    60                 irc_channel_del_user( (irc_channel_t*) l->data, iu, FALSE, NULL );
     61                send_quit |= irc_channel_del_user( (irc_channel_t*) l->data, iu, TRUE, NULL );
     62       
     63        if( send_quit )
     64        {
     65                static struct im_connection *last_ic;
     66                static char *msg;
     67               
     68                if( iu->bu &&
     69                    ( iu->bu->ic->flags & OPT_LOGGING_OUT ) &&
     70                    iu->bu->ic != last_ic )
     71                {
     72                        char host_prefix[] = "bitlbee.";
     73                        char *s;
     74                       
     75                        /* Irssi recognises netsplits by quitmsgs with two
     76                           hostnames, where a hostname is a "word" with one
     77                           of more dots. Mangle no-dot hostnames a bit. */
     78                        if( strchr( irc->root->host, '.' ) )
     79                                *host_prefix = '\0';
     80                       
     81                        last_ic = iu->bu->ic;
     82                        g_free( msg );
     83                        if( !set_getbool( &irc->b->set, "simulate_netsplit" ) )
     84                                msg = g_strdup( "Account off-line" );
     85                        else if( ( s = strchr( iu->bu->ic->acc->user, '@' ) ) )
     86                                msg = g_strdup_printf( "%s%s %s", host_prefix,
     87                                        irc->root->host, s + 1 );
     88                        else
     89                                msg = g_strdup_printf( "%s%s %s.%s",
     90                                        host_prefix, irc->root->host,
     91                                        iu->bu->ic->acc->prpl->name, irc->root->host );
     92                }
     93                else if( !iu->bu || !( iu->bu->ic->flags & OPT_LOGGING_OUT ) )
     94                {
     95                        g_free( msg );
     96                        msg = g_strdup( "Removed" );
     97                        last_ic = NULL;
     98                }
     99                irc_send_quit( iu, msg );
     100        }
    61101       
    62102        g_free( iu->nick );
Note: See TracChangeset for help on using the changeset viewer.