diff options
-rw-r--r-- | irc.c | 26 | ||||
-rw-r--r-- | protocols/nogaim.c | 3 | ||||
-rw-r--r-- | protocols/nogaim.h | 6 |
3 files changed, 30 insertions, 5 deletions
@@ -898,9 +898,31 @@ void irc_kick( irc_t *irc, user_t *u, char *channel, user_t *kicker ) void irc_kill( irc_t *irc, user_t *u ) { - char *nick; + char *nick, *s; + char reason[64]; + + if( u->gc && u->gc->flags & OPT_LOGGING_OUT ) + { + if( u->gc->user->proto_opt[0][0] ) + g_snprintf( reason, sizeof( reason ), "%s %s", irc->myhost, + u->gc->user->proto_opt[0] ); + else if( ( s = strchr( u->gc->username, '@' ) ) ) + g_snprintf( reason, sizeof( reason ), "%s %s", irc->myhost, + s + 1 ); + else + g_snprintf( reason, sizeof( reason ), "%s %s.%s", irc->myhost, + u->gc->prpl->name, irc->myhost ); + + /* proto_opt might contain garbage after the : */ + if( ( s = strchr( reason, ':' ) ) ) + *s = 0; + } + else + { + strcpy( reason, "Leaving..." ); + } - irc_write( irc, ":%s!%s@%s QUIT :%s", u->nick, u->user, u->host, "Leaving..." ); + irc_write( irc, ":%s!%s@%s QUIT :%s", u->nick, u->user, u->host, reason ); nick = g_strdup( u->nick ); nick_lc( nick ); diff --git a/protocols/nogaim.c b/protocols/nogaim.c index 04d48236..f95ddd8a 100644 --- a/protocols/nogaim.c +++ b/protocols/nogaim.c @@ -294,7 +294,8 @@ void signoff( struct gaim_connection *gc ) account_t *a; serv_got_crap( gc, "Signing off.." ); - + gc->flags |= OPT_LOGGING_OUT; + gaim_input_remove( gc->keepalive ); gc->keepalive = 0; gc->prpl->close( gc ); diff --git a/protocols/nogaim.h b/protocols/nogaim.h index 8744054a..b143440a 100644 --- a/protocols/nogaim.h +++ b/protocols/nogaim.h @@ -53,10 +53,12 @@ #define WEBSITE "http://www.bitlbee.org/" #define IM_FLAG_AWAY 0x0020 -#define OPT_CONN_HTML 0x00000001 -#define OPT_LOGGED_IN 0x00010000 #define GAIM_AWAY_CUSTOM "Custom" +#define OPT_CONN_HTML 0x00000001 +#define OPT_LOGGED_IN 0x00010000 +#define OPT_LOGGING_OUT 0x00020000 + /* ok. now the fun begins. first we create a connection structure */ struct gaim_connection { |