aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--irc.c3
-rw-r--r--irc.h3
-rw-r--r--irc_commands.c68
-rw-r--r--irc_send.c26
-rw-r--r--irc_user.c1
5 files changed, 55 insertions, 46 deletions
diff --git a/irc.c b/irc.c
index f21dc974..6e4ba157 100644
--- a/irc.c
+++ b/irc.c
@@ -593,10 +593,9 @@ int irc_check_login( irc_t *irc )
irc->user = irc_user_new( irc, iu->nick );
irc->user->user = iu->user;
+ irc->user->host = iu->host;
irc->user->fullname = iu->fullname;
- g_free( iu->fullname );
g_free( iu->nick );
- g_free( iu->host );
g_free( iu );
irc->umode[0] = '\0';
diff --git a/irc.h b/irc.h
index db07109d..646281ff 100644
--- a/irc.h
+++ b/irc.h
@@ -86,6 +86,8 @@ typedef struct irc
typedef struct irc_user
{
+ irc_t *irc;
+
char *nick;
char *user;
char *host;
@@ -158,6 +160,7 @@ void irc_send_join( irc_channel_t *ic, irc_user_t *iu );
void irc_send_part( irc_channel_t *ic, irc_user_t *iu, const char *reason );
void irc_send_names( irc_channel_t *ic );
void irc_send_topic( irc_channel_t *ic );
+void irc_send_whois( irc_user_t *iu );
/* irc_user.c */
irc_user_t *irc_user_new( irc_t *irc, const char *nick );
diff --git a/irc_commands.c b/irc_commands.c
index e5a97ad9..fbba928a 100644
--- a/irc_commands.c
+++ b/irc_commands.c
@@ -156,6 +156,28 @@ static void irc_cmd_part( irc_t *irc, char **cmd )
}
}
+static void irc_cmd_whois( irc_t *irc, char **cmd )
+{
+ char *nick = cmd[1];
+ irc_user_t *iu = irc_user_find( irc, nick );
+
+ if( iu )
+ irc_send_whois( iu );
+ else
+ irc_send_num( irc, 401, "%s :Nick does not exist", nick );
+}
+
+static void irc_cmd_whowas( irc_t *irc, char **cmd )
+{
+ /* For some reason irssi tries a whowas when whois fails. We can
+ ignore this, but then the user never gets a "user not found"
+ message from irssi which is a bit annoying. So just respond
+ with not-found and irssi users will get better error messages */
+
+ irc_send_num( irc, 406, "%s :Nick does not exist", cmd[1] );
+ irc_send_num( irc, 369, "%s :End of WHOWAS", cmd[1] );
+}
+
#if 0
//#if 0
static void irc_cmd_oper( irc_t *irc, char **cmd )
@@ -474,48 +496,6 @@ static void irc_cmd_away( irc_t *irc, char **cmd )
set_setstr( &irc->set, "away", u->away );
}
-static void irc_cmd_whois( irc_t *irc, char **cmd )
-{
- char *nick = cmd[1];
- user_t *u = user_find( irc, nick );
-
- if( u )
- {
- irc_send_num( irc, 311, "%s %s %s * :%s", u->nick, u->user, u->host, u->realname );
-
- if( u->ic )
- irc_send_num( irc, 312, "%s %s.%s :%s network", u->nick, u->ic->acc->user,
- u->ic->acc->server && *u->ic->acc->server ? u->ic->acc->server : "",
- u->ic->acc->prpl->name );
- else
- irc_send_num( irc, 312, "%s %s :%s", u->nick, irc->myhost, IRCD_INFO );
-
- if( !u->online )
- irc_send_num( irc, 301, "%s :%s", u->nick, "User is offline" );
- else if( u->away )
- irc_send_num( irc, 301, "%s :%s", u->nick, u->away );
- if( u->status_msg )
- irc_send_num( irc, 333, "%s :Status: %s", u->nick, u->status_msg );
-
- irc_send_num( irc, 318, "%s :End of /WHOIS list", nick );
- }
- else
- {
- irc_send_num( irc, 401, "%s :Nick does not exist", nick );
- }
-}
-
-static void irc_cmd_whowas( irc_t *irc, char **cmd )
-{
- /* For some reason irssi tries a whowas when whois fails. We can
- ignore this, but then the user never gets a "user not found"
- message from irssi which is a bit annoying. So just respond
- with not-found and irssi users will get better error messages */
-
- irc_send_num( irc, 406, "%s :Nick does not exist", cmd[1] );
- irc_send_num( irc, 369, "%s :End of WHOWAS", cmd[1] );
-}
-
static void irc_cmd_nickserv( irc_t *irc, char **cmd )
{
/* [SH] This aliases the NickServ command to PRIVMSG root */
@@ -582,6 +562,8 @@ static const command_t irc_commands[] = {
{ "join", 1, irc_cmd_join, IRC_CMD_LOGGED_IN },
{ "names", 1, irc_cmd_names, IRC_CMD_LOGGED_IN },
{ "part", 1, irc_cmd_part, IRC_CMD_LOGGED_IN },
+ { "whois", 1, irc_cmd_whois, IRC_CMD_LOGGED_IN },
+ { "whowas", 1, irc_cmd_whowas, IRC_CMD_LOGGED_IN },
#if 0
{ "oper", 2, irc_cmd_oper, IRC_CMD_LOGGED_IN },
{ "mode", 1, irc_cmd_mode, IRC_CMD_LOGGED_IN },
@@ -594,8 +576,6 @@ static const command_t irc_commands[] = {
{ "watch", 1, irc_cmd_watch, IRC_CMD_LOGGED_IN },
{ "topic", 1, irc_cmd_topic, IRC_CMD_LOGGED_IN },
{ "away", 0, irc_cmd_away, IRC_CMD_LOGGED_IN },
- { "whois", 1, irc_cmd_whois, IRC_CMD_LOGGED_IN },
- { "whowas", 1, irc_cmd_whowas, IRC_CMD_LOGGED_IN },
{ "nickserv", 1, irc_cmd_nickserv, IRC_CMD_LOGGED_IN },
{ "ns", 1, irc_cmd_nickserv, IRC_CMD_LOGGED_IN },
{ "motd", 0, irc_cmd_motd, IRC_CMD_LOGGED_IN },
diff --git a/irc_send.c b/irc_send.c
index 513f556d..b19d6a0f 100644
--- a/irc_send.c
+++ b/irc_send.c
@@ -188,3 +188,29 @@ void irc_send_topic( irc_channel_t *ic )
else
irc_send_num( ic->irc, 331, "%s :No topic for this channel", ic->name );
}
+
+void irc_send_whois( irc_user_t *iu )
+{
+ irc_t *irc = iu->irc;
+
+ irc_send_num( irc, 311, "%s %s %s * :%s",
+ iu->nick, iu->user, iu->host, iu->fullname );
+
+ /*
+ if( u->ic )
+ irc_send_num( irc, 312, "%s %s.%s :%s network", u->nick, u->ic->acc->user,
+ u->ic->acc->server && *u->ic->acc->server ? u->ic->acc->server : "",
+ u->ic->acc->prpl->name );
+ else
+ irc_send_num( irc, 312, "%s %s :%s", u->nick, irc->myhost, IRCD_INFO );
+ */
+
+ /*
+ if( u->away )
+ irc_send_num( irc, 301, "%s :%s", u->nick, u->away );
+ if( u->status_msg )
+ irc_send_num( irc, 333, "%s :Status: %s", u->nick, u->status_msg );
+ */
+
+ irc_send_num( irc, 318, "%s :End of /WHOIS list", iu->nick );
+}
diff --git a/irc_user.c b/irc_user.c
index d1f07bb6..1de0c4e3 100644
--- a/irc_user.c
+++ b/irc_user.c
@@ -29,6 +29,7 @@ irc_user_t *irc_user_new( irc_t *irc, const char *nick )
{
irc_user_t *iu = g_new0( irc_user_t, 1 );
+ iu->irc = irc;
iu->nick = g_strdup( nick );
iu->user = iu->host = iu->fullname = iu->nick;