1
0
mirror of https://github.com/weechat/weechat.git synced 2026-07-06 01:33:12 +02:00

Added new option to customize input prompt, added nick modes, fixed commands 332, 333 (/topic now ok when channel is not opened)

This commit is contained in:
Sebastien Helleu
2006-04-12 13:34:33 +00:00
parent 69730a21dd
commit 1bee0ba0b2
36 changed files with 8422 additions and 7128 deletions
+5 -3
View File
@@ -316,14 +316,16 @@ irc_display_away (t_irc_server *server, char *string1, char *string2)
void
irc_display_mode (t_irc_server *server, t_gui_buffer *buffer,
char *channel_name, char set_flag,
char *channel_name, char *nick_name, char set_flag,
char *symbol, char *nick_host, char *message, char *param)
{
irc_display_prefix (server, buffer, PREFIX_INFO);
gui_printf (buffer, "%s[%s%s%s/%s%c%s%s] %s%s",
GUI_COLOR(COLOR_WIN_CHAT_DARK),
GUI_COLOR(COLOR_WIN_CHAT_CHANNEL),
channel_name,
(channel_name) ?
GUI_COLOR(COLOR_WIN_CHAT_CHANNEL) :
GUI_COLOR(COLOR_WIN_CHAT_NICK),
(channel_name) ? channel_name : nick_name,
GUI_COLOR(COLOR_WIN_CHAT),
GUI_COLOR(COLOR_WIN_CHAT_CHANNEL),
set_flag,
+253 -142
View File
@@ -615,9 +615,10 @@ irc_cmd_recv_kill (t_irc_server *server, char *host, char *nick, char *arguments
* irc_get_channel_modes: get channel modes
*/
void irc_get_channel_modes (t_irc_server *server, t_irc_channel *ptr_channel,
void irc_get_channel_modes (t_irc_server *server, t_irc_channel *channel,
char *channel_name,
char *nick_host, char *modes, char *parm)
char *nick_host, char *modes, char *parm,
int no_display)
{
char *pos, set_flag, unknown_mode[3];
t_irc_nick *ptr_nick;
@@ -641,9 +642,10 @@ void irc_get_channel_modes (t_irc_server *server, t_irc_channel *ptr_channel,
if (pos)
pos[0] = '\0';
}
if (nick_host)
irc_display_mode (server, ptr_channel->buffer,
channel_name, set_flag, "b", nick_host,
if (nick_host && !no_display)
irc_display_mode (server, channel->buffer,
channel_name, NULL, set_flag,
"b", nick_host,
(set_flag == '+') ?
_("sets ban on") :
_("removes ban on"),
@@ -666,9 +668,10 @@ void irc_get_channel_modes (t_irc_server *server, t_irc_channel *ptr_channel,
if (pos)
pos[0] = '\0';
}
if (nick_host)
irc_display_mode (server, ptr_channel->buffer,
channel_name, set_flag, "d", nick_host,
if (nick_host && !no_display)
irc_display_mode (server, channel->buffer,
channel_name, NULL, set_flag,
"d", nick_host,
(set_flag == '+') ?
_("sets realname ban on") :
_("removes realname ban on"),
@@ -691,11 +694,12 @@ void irc_get_channel_modes (t_irc_server *server, t_irc_channel *ptr_channel,
if (pos)
pos[0] = '\0';
}
if (nick_host)
irc_display_mode (server, ptr_channel->buffer,
channel_name, set_flag, "e", nick_host,
if (nick_host && !no_display)
irc_display_mode (server, channel->buffer,
channel_name, NULL, set_flag,
"e", nick_host,
(set_flag == '+') ?
_("sets ban exemtion on") :
_("sets ban exemption on") :
_("removes ban exemption on"),
(parm) ? parm : NULL);
@@ -716,9 +720,10 @@ void irc_get_channel_modes (t_irc_server *server, t_irc_channel *ptr_channel,
if (pos)
pos[0] = '\0';
}
if (nick_host)
irc_display_mode (server, ptr_channel->buffer,
channel_name, set_flag, "f", nick_host,
if (nick_host && !no_display)
irc_display_mode (server, channel->buffer,
channel_name, NULL, set_flag,
"f", nick_host,
(set_flag == '+') ?
_("sets mode +f") :
_("removes mode +f"),
@@ -741,21 +746,22 @@ void irc_get_channel_modes (t_irc_server *server, t_irc_channel *ptr_channel,
if (pos)
pos[0] = '\0';
}
if (nick_host)
irc_display_mode (server, ptr_channel->buffer,
channel_name, set_flag, "h", nick_host,
if (nick_host && !no_display)
irc_display_mode (server, channel->buffer,
channel_name, NULL, set_flag,
"h", nick_host,
(set_flag == '+') ?
_("gives half channel operator status to") :
_("removes half channel operator status from"),
(parm) ? parm : NULL);
if (parm)
{
ptr_nick = nick_search (ptr_channel, parm);
ptr_nick = nick_search (channel, parm);
if (ptr_nick)
{
NICK_SET_FLAG(ptr_nick, (set_flag == '+'), NICK_HALFOP);
nick_resort (ptr_channel, ptr_nick);
gui_draw_buffer_nick (ptr_channel->buffer, 1);
nick_resort (channel, ptr_nick);
gui_draw_buffer_nick (channel->buffer, 1);
}
}
@@ -769,14 +775,15 @@ void irc_get_channel_modes (t_irc_server *server, t_irc_channel *ptr_channel,
}
break;
case 'i':
if (nick_host)
irc_display_mode (server, ptr_channel->buffer,
channel_name, set_flag, "i", nick_host,
if (nick_host && !no_display)
irc_display_mode (server, channel->buffer,
channel_name, NULL, set_flag,
"i", nick_host,
(set_flag == '+') ?
_("sets invite-only channel flag") :
_("removes invite-only channel flag"),
NULL);
CHANNEL_SET_MODE(ptr_channel, (set_flag == '+'),
CHANNEL_SET_MODE(channel, (set_flag == '+'),
CHANNEL_MODE_INVITE);
break;
case 'I':
@@ -787,9 +794,10 @@ void irc_get_channel_modes (t_irc_server *server, t_irc_channel *ptr_channel,
if (pos)
pos[0] = '\0';
}
if (nick_host)
irc_display_mode (server, ptr_channel->buffer,
channel_name, set_flag, "I", nick_host,
if (nick_host && !no_display)
irc_display_mode (server, channel->buffer,
channel_name, NULL, set_flag,
"I", nick_host,
(set_flag == '+') ?
_("sets invite-only exemption on") :
_("removes invite-only exemption on"),
@@ -812,20 +820,21 @@ void irc_get_channel_modes (t_irc_server *server, t_irc_channel *ptr_channel,
if (pos)
pos[0] = '\0';
}
if (nick_host)
irc_display_mode (server, ptr_channel->buffer,
channel_name, set_flag, "k", nick_host,
if (nick_host && !no_display)
irc_display_mode (server, channel->buffer,
channel_name, NULL, set_flag,
"k", nick_host,
(set_flag == '+') ?
_("sets channel key to") :
_("removes channel key"),
(set_flag == '+') ?
((parm) ? parm : NULL) :
NULL);
CHANNEL_SET_MODE(ptr_channel, (set_flag == '+'),
CHANNEL_SET_MODE(channel, (set_flag == '+'),
CHANNEL_MODE_KEY);
if (ptr_channel->key)
free (ptr_channel->key);
ptr_channel->key = strdup (parm);
if (channel->key)
free (channel->key);
channel->key = strdup (parm);
/* look for next parameter */
if (parm && pos)
@@ -844,18 +853,19 @@ void irc_get_channel_modes (t_irc_server *server, t_irc_channel *ptr_channel,
if (pos)
pos[0] = '\0';
}
if (nick_host)
irc_display_mode (server, ptr_channel->buffer,
channel_name, set_flag, "l", nick_host,
if (nick_host && !no_display)
irc_display_mode (server, channel->buffer,
channel_name, NULL, set_flag,
"l", nick_host,
(set_flag == '+') ?
_("sets the user limit to") :
_("removes user limit"),
(set_flag == '+') ?
((parm) ? parm : NULL) :
NULL);
CHANNEL_SET_MODE(ptr_channel, (set_flag == '+'),
CHANNEL_SET_MODE(channel, (set_flag == '+'),
CHANNEL_MODE_LIMIT);
ptr_channel->limit = atoi (parm);
channel->limit = atoi (parm);
/* look for next parameter */
if (parm && pos)
@@ -867,25 +877,27 @@ void irc_get_channel_modes (t_irc_server *server, t_irc_channel *ptr_channel,
}
break;
case 'm':
if (nick_host)
irc_display_mode (server, ptr_channel->buffer,
channel_name, set_flag, "m", nick_host,
if (nick_host && !no_display)
irc_display_mode (server, channel->buffer,
channel_name, NULL, set_flag,
"m", nick_host,
(set_flag == '+') ?
_("sets moderated channel flag") :
_("removes moderated channel flag"),
NULL);
CHANNEL_SET_MODE(ptr_channel, (set_flag == '+'),
CHANNEL_SET_MODE(channel, (set_flag == '+'),
CHANNEL_MODE_MODERATED);
break;
case 'n':
if (nick_host)
irc_display_mode (server, ptr_channel->buffer,
channel_name, set_flag, "n", nick_host,
if (nick_host && !no_display)
irc_display_mode (server, channel->buffer,
channel_name, NULL, set_flag,
"n", nick_host,
(set_flag == '+') ?
_("sets messages from channel only flag") :
_("removes messages from channel only flag"),
NULL);
CHANNEL_SET_MODE(ptr_channel, (set_flag == '+'),
CHANNEL_SET_MODE(channel, (set_flag == '+'),
CHANNEL_MODE_NO_MSG_OUT);
break;
case 'o':
@@ -896,21 +908,22 @@ void irc_get_channel_modes (t_irc_server *server, t_irc_channel *ptr_channel,
if (pos)
pos[0] = '\0';
}
if (nick_host)
irc_display_mode (server, ptr_channel->buffer,
channel_name, set_flag, "o", nick_host,
if (nick_host && !no_display)
irc_display_mode (server, channel->buffer,
channel_name, NULL, set_flag,
"o", nick_host,
(set_flag == '+') ?
_("gives channel operator status to") :
_("removes channel operator status from"),
(parm) ? parm : NULL);
if (parm)
{
ptr_nick = nick_search (ptr_channel, parm);
ptr_nick = nick_search (channel, parm);
if (ptr_nick)
{
NICK_SET_FLAG(ptr_nick, (set_flag == '+'), NICK_OP);
nick_resort (ptr_channel, ptr_nick);
gui_draw_buffer_nick (ptr_channel->buffer, 1);
nick_resort (channel, ptr_nick);
gui_draw_buffer_nick (channel->buffer, 1);
}
}
@@ -924,14 +937,15 @@ void irc_get_channel_modes (t_irc_server *server, t_irc_channel *ptr_channel,
}
break;
case 'p':
if (nick_host)
irc_display_mode (server, ptr_channel->buffer,
channel_name, set_flag, "p", nick_host,
if (nick_host && !no_display)
irc_display_mode (server, channel->buffer,
channel_name, NULL, set_flag,
"p", nick_host,
(set_flag == '+') ?
_("sets private channel flag") :
_("removes private channel flag"),
NULL);
CHANNEL_SET_MODE(ptr_channel, (set_flag == '+'),
CHANNEL_SET_MODE(channel, (set_flag == '+'),
CHANNEL_MODE_PRIVATE);
break;
case 'q':
@@ -942,9 +956,10 @@ void irc_get_channel_modes (t_irc_server *server, t_irc_channel *ptr_channel,
if (pos)
pos[0] = '\0';
}
if (nick_host)
irc_display_mode (server, ptr_channel->buffer,
channel_name, set_flag, "q", nick_host,
if (nick_host && !no_display)
irc_display_mode (server, channel->buffer,
channel_name, NULL, set_flag,
"q", nick_host,
(set_flag == '+') ?
_("sets quiet on") :
_("removes quiet on"),
@@ -960,25 +975,27 @@ void irc_get_channel_modes (t_irc_server *server, t_irc_channel *ptr_channel,
}
break;
case 's':
if (nick_host)
irc_display_mode (server, ptr_channel->buffer,
channel_name, set_flag, "s", nick_host,
if (nick_host && !no_display)
irc_display_mode (server, channel->buffer,
channel_name, NULL, set_flag,
"s", nick_host,
(set_flag == '+') ?
_("sets secret channel flag") :
_("removes secret channel flag"),
NULL);
CHANNEL_SET_MODE(ptr_channel, (set_flag == '+'),
CHANNEL_SET_MODE(channel, (set_flag == '+'),
CHANNEL_MODE_SECRET);
break;
case 't':
if (nick_host)
irc_display_mode (server, ptr_channel->buffer,
channel_name, set_flag, "t", nick_host,
if (nick_host && !no_display)
irc_display_mode (server, channel->buffer,
channel_name, NULL, set_flag,
"t", nick_host,
(set_flag == '+') ?
_("sets topic protection") :
_("removes topic protection"),
NULL);
CHANNEL_SET_MODE(ptr_channel, (set_flag == '+'),
CHANNEL_SET_MODE(channel, (set_flag == '+'),
CHANNEL_MODE_TOPIC);
break;
case 'v':
@@ -989,9 +1006,10 @@ void irc_get_channel_modes (t_irc_server *server, t_irc_channel *ptr_channel,
if (pos)
pos[0] = '\0';
}
if (nick_host)
irc_display_mode (server, ptr_channel->buffer,
channel_name, set_flag, "v", nick_host,
if (nick_host && !no_display)
irc_display_mode (server, channel->buffer,
channel_name, NULL, set_flag,
"v", nick_host,
(set_flag == '+') ?
_("gives voice to") :
_("removes voice from"),
@@ -999,12 +1017,12 @@ void irc_get_channel_modes (t_irc_server *server, t_irc_channel *ptr_channel,
if (parm)
{
ptr_nick = nick_search (ptr_channel, parm);
ptr_nick = nick_search (channel, parm);
if (ptr_nick)
{
NICK_SET_FLAG(ptr_nick, (set_flag == '+'), NICK_VOICE);
nick_resort (ptr_channel, ptr_nick);
gui_draw_buffer_nick (ptr_channel->buffer, 1);
nick_resort (channel, ptr_nick);
gui_draw_buffer_nick (channel->buffer, 1);
}
}
@@ -1025,14 +1043,14 @@ void irc_get_channel_modes (t_irc_server *server, t_irc_channel *ptr_channel,
if (pos)
pos[0] = '\0';
}
if (nick_host)
if (nick_host && !no_display)
{
unknown_mode[0] = set_flag;
unknown_mode[1] = modes[0];
unknown_mode[2] = '\0';
irc_display_mode (server, ptr_channel->buffer,
channel_name, set_flag, unknown_mode + 1,
nick_host,
irc_display_mode (server, channel->buffer,
channel_name, NULL, set_flag,
unknown_mode + 1, nick_host,
unknown_mode,
(parm) ? parm : NULL);
}
@@ -1051,6 +1069,122 @@ void irc_get_channel_modes (t_irc_server *server, t_irc_channel *ptr_channel,
}
}
/*
* irc_get_nick_modes: get nick modes
*/
void irc_get_nick_modes (t_irc_server *server,
char *nick_host, char *modes, int no_display)
{
char set_flag, unknown_mode[3];
set_flag = '+';
while (modes && modes[0])
{
switch (modes[0])
{
case ':':
break;
case '+':
set_flag = '+';
break;
case '-':
set_flag = '-';
break;
case 'a':
if (nick_host && !no_display)
irc_display_mode (server, server->buffer,
NULL, server->nick, set_flag,
"a", nick_host,
(set_flag == '+') ?
_("sets away") :
_("removes away"),
NULL);
NICK_SET_MODE(server, (set_flag == '+'), NICK_MODE_AWAY);
break;
case 'i':
if (nick_host && !no_display)
irc_display_mode (server, server->buffer,
NULL, server->nick, set_flag,
"i", nick_host,
(set_flag == '+') ?
_("sets invisible") :
_("removes invisible"),
NULL);
NICK_SET_MODE(server, (set_flag == '+'), NICK_MODE_INVISIBLE);
break;
case 'w':
if (nick_host && !no_display)
irc_display_mode (server, server->buffer,
NULL, server->nick, set_flag,
"w", nick_host,
(set_flag == '+') ?
_("sets wallops") :
_("removes wallops"),
NULL);
NICK_SET_MODE(server, (set_flag == '+'), NICK_MODE_WALLOPS);
break;
case 'r':
if (nick_host && !no_display)
irc_display_mode (server, server->buffer,
NULL, server->nick, set_flag,
"r", nick_host,
(set_flag == '+') ?
_("sets restricted") :
_("removes restricted"),
NULL);
NICK_SET_MODE(server, (set_flag == '+'), NICK_MODE_RESTRICTED);
break;
case 'o':
if (nick_host && !no_display)
irc_display_mode (server, server->buffer,
NULL, server->nick, set_flag,
"o", nick_host,
(set_flag == '+') ?
_("sets operator") :
_("removes operator"),
NULL);
NICK_SET_MODE(server, (set_flag == '+'), NICK_MODE_OPERATOR);
break;
case 'O':
if (nick_host && !no_display)
irc_display_mode (server, server->buffer,
NULL, server->nick, set_flag,
"O", nick_host,
(set_flag == '+') ?
_("sets local operator") :
_("removes local operator"),
NULL);
NICK_SET_MODE(server, (set_flag == '+'), NICK_MODE_LOCAL_OPERATOR);
break;
case 's':
if (nick_host && !no_display)
irc_display_mode (server, server->buffer,
NULL, server->nick, set_flag,
"s", nick_host,
(set_flag == '+') ?
_("sets server notices") :
_("removes server notices"),
NULL);
NICK_SET_MODE(server, (set_flag == '+'), NICK_MODE_LOCAL_OPERATOR);
break;
default: /* unknown mode received */
if (nick_host && !no_display)
{
unknown_mode[0] = set_flag;
unknown_mode[1] = modes[0];
unknown_mode[2] = '\0';
irc_display_mode (server, server->buffer,
NULL, server->nick, set_flag,
unknown_mode + 1, nick_host,
unknown_mode, NULL);
}
break;
}
modes++;
}
}
/*
* irc_cmd_recv_mode: 'mode' message received
*/
@@ -1100,8 +1234,9 @@ irc_cmd_recv_mode (t_irc_server *server, char *host, char *nick, char *arguments
if (ptr_channel)
{
irc_get_channel_modes (server, ptr_channel, arguments, nick,
pos, pos_parm);
pos, pos_parm, command_ignored);
gui_draw_buffer_status (ptr_channel->buffer, 1);
gui_draw_buffer_input (ptr_channel->buffer, 1);
}
else
{
@@ -1114,22 +1249,9 @@ irc_cmd_recv_mode (t_irc_server *server, char *host, char *nick, char *arguments
}
else
{
/* nickname modes */
if (!command_ignored)
{
irc_display_prefix (server, server->buffer, PREFIX_SERVER);
gui_printf (server->buffer, _("%s[%s%s%s/%s%s%s]%s mode changed by %s%s\n"),
GUI_COLOR(COLOR_WIN_CHAT_DARK),
GUI_COLOR(COLOR_WIN_CHAT_NICK),
arguments,
GUI_COLOR(COLOR_WIN_CHAT),
GUI_COLOR(COLOR_WIN_CHAT_NICK),
(pos[0] == ':') ? pos + 1 : pos,
GUI_COLOR(COLOR_WIN_CHAT_DARK),
GUI_COLOR(COLOR_WIN_CHAT),
GUI_COLOR(COLOR_WIN_CHAT_NICK),
nick);
}
irc_get_nick_modes (server, nick, pos, command_ignored);
gui_draw_buffer_status (gui_current_window->buffer, 1);
gui_draw_buffer_input (gui_current_window->buffer, 1);
}
return 0;
}
@@ -3745,7 +3867,7 @@ irc_cmd_recv_324 (t_irc_server *server, char *host, char *nick, char *arguments)
if (ptr_channel)
{
irc_get_channel_modes (server, ptr_channel, NULL, NULL,
pos, pos_parm);
pos, pos_parm, command_ignored);
gui_draw_buffer_status (ptr_channel->buffer, 0);
}
}
@@ -3837,6 +3959,7 @@ irc_cmd_recv_332 (t_irc_server *server, char *host, char *nick, char *arguments)
{
char *pos, *pos2;
t_irc_channel *ptr_channel;
t_gui_buffer *ptr_buffer;
/* make gcc happy */
(void) host;
@@ -3852,39 +3975,33 @@ irc_cmd_recv_332 (t_irc_server *server, char *host, char *nick, char *arguments)
{
pos2[0] = '\0';
ptr_channel = channel_search (server, pos);
ptr_buffer = (ptr_channel) ?
ptr_channel->buffer : server->buffer;
pos2++;
while (pos2[0] == ' ')
pos2++;
if (pos2[0] == ':')
pos2++;
if (ptr_channel)
{
pos2++;
while (pos2[0] == ' ')
pos2++;
if (pos2[0] == ':')
pos2++;
if (ptr_channel->topic)
free (ptr_channel->topic);
ptr_channel->topic = strdup (pos2);
command_ignored |= ignore_check (host, "332", ptr_channel->name, server->name);
if (!command_ignored)
{
irc_display_prefix (server, ptr_channel->buffer, PREFIX_INFO);
gui_printf (ptr_channel->buffer, _("Topic for %s%s%s is: "),
GUI_COLOR(COLOR_WIN_CHAT_CHANNEL),
pos,
GUI_COLOR(COLOR_WIN_CHAT));
gui_printf (ptr_channel->buffer, "\"%s\"\n",
pos2);
}
gui_draw_buffer_title (ptr_channel->buffer, 1);
}
else
command_ignored |= ignore_check (host, "332", pos, server->name);
if (!command_ignored)
{
irc_display_prefix (server, server->buffer, PREFIX_ERROR);
gui_printf_nolog (server->buffer,
_("%s channel \"%s\" not found for \"%s\" command\n"),
WEECHAT_ERROR, pos, "332");
return -1;
irc_display_prefix (server, ptr_buffer, PREFIX_INFO);
gui_printf (ptr_buffer, _("Topic for %s%s%s is: "),
GUI_COLOR(COLOR_WIN_CHAT_CHANNEL),
pos,
GUI_COLOR(COLOR_WIN_CHAT));
gui_printf (ptr_buffer, "\"%s\"\n", pos2);
}
if (ptr_channel)
gui_draw_buffer_title (ptr_buffer, 1);
}
}
else
@@ -3907,6 +4024,7 @@ irc_cmd_recv_333 (t_irc_server *server, char *host, char *nick, char *arguments)
{
char *pos_channel, *pos_nick, *pos_date;
t_irc_channel *ptr_channel;
t_gui_buffer *ptr_buffer;
time_t datetime;
/* make gcc happy */
@@ -3934,27 +4052,20 @@ irc_cmd_recv_333 (t_irc_server *server, char *host, char *nick, char *arguments)
pos_date++;
ptr_channel = channel_search (server, pos_channel);
if (ptr_channel)
ptr_buffer = (ptr_channel) ?
ptr_channel->buffer : server->buffer;
command_ignored |= ignore_check (host, "333",
pos_channel, server->name);
if (!command_ignored)
{
command_ignored |= ignore_check (host, "333", ptr_channel->name, server->name);
if (!command_ignored)
{
datetime = (time_t)(atol (pos_date));
irc_display_prefix (server, ptr_channel->buffer, PREFIX_INFO);
gui_printf (ptr_channel->buffer, _("Topic set by %s%s%s, %s"),
GUI_COLOR(COLOR_WIN_CHAT_NICK),
pos_nick,
GUI_COLOR(COLOR_WIN_CHAT),
ctime (&datetime));
}
}
else
{
irc_display_prefix (server, server->buffer, PREFIX_ERROR);
gui_printf_nolog (server->buffer,
_("%s channel \"%s\" not found for \"%s\" command\n"),
WEECHAT_ERROR, pos_channel, "333");
return -1;
datetime = (time_t)(atol (pos_date));
irc_display_prefix (server, ptr_buffer, PREFIX_INFO);
gui_printf (ptr_buffer, _("Topic set by %s%s%s, %s"),
GUI_COLOR(COLOR_WIN_CHAT_NICK),
pos_nick,
GUI_COLOR(COLOR_WIN_CHAT),
ctime (&datetime));
}
}
else
+18 -5
View File
@@ -56,6 +56,9 @@ t_irc_message *recv_msgq, *msgq_last_msg;
int check_away = 0;
char *nick_modes = "aiwroOs";
/*
* server_init: init server struct with default values
*/
@@ -98,6 +101,9 @@ server_init (t_irc_server *server)
server->ssl_connected = 0;
server->unterminated_message = NULL;
server->nick = NULL;
server->nick_modes = (char *) malloc (NUM_NICK_MODES + 1);
memset (server->nick_modes, ' ', NUM_NICK_MODES);
server->nick_modes[NUM_NICK_MODES] = '\0';
server->reconnect_start = 0;
server->reconnect_join = 0;
server->is_away = 0;
@@ -311,6 +317,8 @@ server_destroy (t_irc_server *server)
free (server->unterminated_message);
if (server->nick)
free (server->nick);
if (server->nick_modes)
free (server->nick_modes);
if (server->channels)
channel_free_all (server);
}
@@ -1179,7 +1187,7 @@ resolve (char *hostname, char *ip, int *version)
*/
int
pass_socks4proxy(int sock, char *address, int port, char *username)
pass_socks4proxy (int sock, char *address, int port, char *username)
{
/*
* socks4 protocol is explain here:
@@ -1366,13 +1374,13 @@ pass_socks5proxy(int sock, char *address, int port)
*/
int
pass_proxy(int sock, char *address, int port, char *username)
pass_proxy (int sock, char *address, int port, char *username)
{
if (strcmp(cfg_proxy_type_values[cfg_proxy_type], "http") == 0)
if (strcmp (cfg_proxy_type_values[cfg_proxy_type], "http") == 0)
return pass_httpproxy(sock, address, port);
if (strcmp(cfg_proxy_type_values[cfg_proxy_type], "socks4") == 0)
if (strcmp (cfg_proxy_type_values[cfg_proxy_type], "socks4") == 0)
return pass_socks4proxy(sock, address, port, username);
if (strcmp(cfg_proxy_type_values[cfg_proxy_type], "socks5") == 0)
if (strcmp (cfg_proxy_type_values[cfg_proxy_type], "socks5") == 0)
return pass_socks5proxy(sock, address, port);
return 1;
@@ -1683,6 +1691,11 @@ server_disconnect (t_irc_server *server, int reconnect)
gui_printf (server->buffer, _("Disconnected from server!\n"));
}
if (server->nick_modes)
{
memset (server->nick_modes, ' ', NUM_NICK_MODES);
server->nick_modes[NUM_NICK_MODES] = '\0';
}
server->is_away = 0;
server->away_time = 0;
server->lag = 0;
+18 -2
View File
@@ -125,6 +125,20 @@ struct t_irc_channel
/* server types */
#define NUM_NICK_MODES 7
#define NICK_MODE_AWAY 0
#define NICK_MODE_INVISIBLE 1
#define NICK_MODE_WALLOPS 2
#define NICK_MODE_RESTRICTED 3
#define NICK_MODE_OPERATOR 4
#define NICK_MODE_LOCAL_OPERATOR 5
#define NICK_MODE_SERVER_NOTICES 6
#define NICK_SET_MODE(server, set, mode) \
if (set) \
server->nick_modes[mode] = nick_modes[mode]; \
else \
server->nick_modes[mode] = ' ';
typedef struct t_irc_server t_irc_server;
struct t_irc_server
@@ -167,6 +181,7 @@ struct t_irc_server
#endif
char *unterminated_message; /* beginning of a message in input buf */
char *nick; /* current nickname */
char *nick_modes; /* nick modes */
time_t reconnect_start; /* this time + delay = reconnect time */
int reconnect_join; /* 1 if channels opened to rejoin */
int is_away; /* 1 is user is marker as away */
@@ -301,6 +316,7 @@ extern int check_away;
extern t_irc_dcc *dcc_list;
extern char *dcc_status_string[6];
extern char *channel_modes;
extern char *nick_modes;
extern char *ignore_types[];
extern t_irc_ignore *irc_ignore;
extern t_irc_ignore *irc_last_ignore;
@@ -408,8 +424,8 @@ extern void irc_display_prefix (t_irc_server *, t_gui_buffer *, char *);
extern void irc_display_nick (t_gui_buffer *, t_irc_nick *, char *, int,
int, int, int);
extern void irc_display_away (t_irc_server *, char *, char *);
extern void irc_display_mode (t_irc_server *, t_gui_buffer *, char *, char,
char *, char *, char *, char *);
extern void irc_display_mode (t_irc_server *, t_gui_buffer *, char *, char *,
char, char *, char *, char *, char *);
extern void irc_display_server (t_irc_server *ptr_server);
/* IRC commands issued by user (irc-send.c) */