summaryrefslogtreecommitdiff
path: root/src/irc
diff options
context:
space:
mode:
authorSebastien Helleu <flashcode@flashtux.org>2005-12-11 00:52:32 +0000
committerSebastien Helleu <flashcode@flashtux.org>2005-12-11 00:52:32 +0000
commit77e00d03812564d58fdc9ed60bd4e07c09326288 (patch)
treeaad5bf938b2a09afbbc478ca5b37106208127315 /src/irc
parentb8662d79c2ef0276049e727ce3ea175e143459a4 (diff)
downloadweechat-77e00d03812564d58fdc9ed60bd4e07c09326288.zip
Added charset by server and channel, new command: /charset
Diffstat (limited to 'src/irc')
-rw-r--r--src/irc/irc-channel.c220
-rw-r--r--src/irc/irc-dcc.c21
-rw-r--r--src/irc/irc-display.c39
-rw-r--r--src/irc/irc-recv.c8
-rw-r--r--src/irc/irc-server.c121
-rw-r--r--src/irc/irc.h26
6 files changed, 316 insertions, 119 deletions
diff --git a/src/irc/irc-channel.c b/src/irc/irc-channel.c
index 761e64fc7..6d2baa925 100644
--- a/src/irc/irc-channel.c
+++ b/src/irc/irc-channel.c
@@ -30,6 +30,8 @@
#include "../common/weechat.h"
#include "irc.h"
+#include "../common/utf8.h"
+#include "../common/weeconfig.h"
#include "../gui/gui.h"
@@ -172,6 +174,143 @@ string_is_channel (char *string)
}
/*
+ * channel_get_charset_decode_iso: get decode iso value for channel
+ * if not found for channel, look for server
+ * if not found for server, look for global
+ */
+
+char *
+channel_get_charset_decode_iso (t_irc_server *server, t_irc_channel *channel)
+{
+ char *pos, *result;
+ int length;
+
+ if (!server)
+ return (cfg_look_charset_decode_iso) ?
+ strdup (cfg_look_charset_decode_iso) : strdup ("");
+
+ if (!channel)
+ return server_get_charset_decode_iso (server);
+
+ config_option_list_get_value (&(server->charset_decode_iso),
+ channel->name, &pos, &length);
+ if (pos && (length > 0))
+ {
+ result = strdup (pos);
+ result[length] = '\0';
+ return result;
+ }
+
+ return server_get_charset_decode_iso (server);
+}
+
+/*
+ * channel_get_charset_decode_utf: get decode utf value for channel
+ * if not found for channel, look for server
+ * if not found for server, look for global
+ */
+
+char *
+channel_get_charset_decode_utf (t_irc_server *server, t_irc_channel *channel)
+{
+ char *pos, *result;
+ int length;
+
+ if (!server)
+ return (cfg_look_charset_decode_utf) ?
+ strdup (cfg_look_charset_decode_utf) : strdup ("");
+
+ if (!channel)
+ return server_get_charset_decode_utf (server);
+
+ config_option_list_get_value (&(server->charset_decode_utf),
+ channel->name, &pos, &length);
+ if (pos && (length > 0))
+ {
+ result = strdup (pos);
+ result[length] = '\0';
+ return result;
+ }
+
+ return server_get_charset_decode_utf (server);
+}
+
+/*
+ * channel_get_charset_encode: get encode value for channel
+ * if not found for channel, look for server
+ * if not found for server, look for global
+ */
+
+char *
+channel_get_charset_encode (t_irc_server *server, t_irc_channel *channel)
+{
+ char *pos, *result;
+ int length;
+
+ if (!server)
+ return (cfg_look_charset_encode) ?
+ strdup (cfg_look_charset_encode) : strdup ("");
+
+ if (!channel)
+ return server_get_charset_encode (server);
+
+ config_option_list_get_value (&(server->charset_encode),
+ channel->name, &pos, &length);
+ if (pos && (length > 0))
+ {
+ result = strdup (pos);
+ result[length] = '\0';
+ return result;
+ }
+
+ return server_get_charset_encode (server);
+}
+
+/*
+ * channel_iconv_decode: convert string to local charset
+ */
+
+char *
+channel_iconv_decode (t_irc_server *server, t_irc_channel *channel, char *string)
+{
+ char *from_charset, *string2;
+
+ if (!local_utf8 || !utf8_is_valid (string))
+ {
+ if (local_utf8)
+ from_charset = channel_get_charset_decode_iso (server, channel);
+ else
+ from_charset = channel_get_charset_decode_utf (server, channel);
+ string2 = weechat_iconv (from_charset,
+ (cfg_look_charset_internal && cfg_look_charset_internal[0]) ?
+ cfg_look_charset_internal : local_charset,
+ string);
+ free (from_charset);
+ return string2;
+ }
+ else
+ return strdup (string);
+}
+
+/*
+ *
+ */
+
+char *
+channel_iconv_encode (t_irc_server *server, t_irc_channel *channel, char *string)
+{
+ char *to_charset, *string2;
+
+ to_charset = channel_get_charset_encode (server, channel);
+ string2 = weechat_iconv ((cfg_look_charset_internal && cfg_look_charset_internal[0]) ?
+ cfg_look_charset_internal : local_charset,
+ to_charset,
+ string);
+ free (to_charset);
+ return string2;
+}
+
+/*
* channel_remove_away: remove away for all nicks on a channel
*/
@@ -306,96 +445,25 @@ channel_get_notify_level (t_irc_server *server, t_irc_channel *channel)
}
/*
- * server_remove_notify_level: remove channel notify from list
- */
-
-void
-channel_remove_notify_level (t_irc_server *server, t_irc_channel *channel)
-{
- char *name, *pos, *pos2;
-
- if ((!server) || (!channel))
- return;
-
- name = (char *) malloc (strlen (channel->name) + 2);
- strcpy (name, channel->name);
- strcat (name, ":");
- pos = strstr (server->notify_levels, name);
- free (name);
- if (pos)
- {
- pos2 = pos + strlen (channel->name);
- if (pos2[0] == ':')
- {
- pos2++;
- if (pos2[0])
- {
- pos2++;
- if (pos2[0] == ',')
- pos2++;
- if (!pos2[0] && (pos != server->notify_levels))
- pos--;
- strcpy (pos, pos2);
- server->notify_levels = (char *) realloc (server->notify_levels,
- strlen (server->notify_levels) + 1);
- }
- }
- }
-}
-
-/*
* server_set_notify_level: set channel notify level
*/
void
channel_set_notify_level (t_irc_server *server, t_irc_channel *channel, int notify)
{
- char *name, *pos, *pos2, level_string[2];
+ char level_string[2];
if ((!server) || (!channel))
return;
if (notify == NOTIFY_LEVEL_DEFAULT)
- {
- channel_remove_notify_level (server, channel);
- return;
- }
-
- if (!server->notify_levels)
- {
- server->notify_levels = (char *) malloc (strlen (channel->name) + 3);
- server->notify_levels[0] = '\0';
- }
+ config_option_list_remove (&(server->notify_levels), channel->name);
else
{
- name = (char *) malloc (strlen (channel->name) + 2);
- strcpy (name, channel->name);
- strcat (name, ":");
- pos = strstr (server->notify_levels, name);
- free (name);
- if (pos)
- {
- pos2 = pos + strlen (channel->name) + 1;
- if (pos2[0])
- {
- pos2[0] = '0' + notify;
- return;
- }
- }
- /* realloc notify list to add channel */
- server->notify_levels = (char *) realloc (server->notify_levels,
- strlen (server->notify_levels) + 1 +
- strlen (channel->name) + 2 + 1);
+ level_string[0] = notify + '0';
+ level_string[1] = '\0';
+ config_option_list_set (&(server->notify_levels), channel->name, level_string);
}
-
- /* channel not in notify list => add it */
- if (server->notify_levels[0])
- strcat (server->notify_levels, ",");
- strcat (server->notify_levels, channel->name);
- strcat (server->notify_levels, ":");
- level_string[0] = notify + '0';
- level_string[1] = '\0';
- strcat (server->notify_levels, level_string);
}
/*
diff --git a/src/irc/irc-dcc.c b/src/irc/irc-dcc.c
index cdf7d08b1..422e4c85a 100644
--- a/src/irc/irc-dcc.c
+++ b/src/irc/irc-dcc.c
@@ -1120,10 +1120,9 @@ dcc_chat_sendf (t_irc_dcc *ptr_dcc, char *fmt, ...)
gui_printf (ptr_dcc->server->buffer, "[DEBUG] Sending to remote host (DCC CHAT) >>> %s\n", buffer);
buffer[size_buf - 2] = '\r';
#endif
- buf2 = weechat_convert_encoding ((cfg_look_charset_internal && cfg_look_charset_internal[0]) ?
- cfg_look_charset_internal : local_charset,
- cfg_look_charset_encode,
- buffer);
+ buf2 = channel_iconv_encode (ptr_dcc->server,
+ ptr_dcc->channel,
+ buffer);
if (dcc_chat_send (ptr_dcc, buf2, strlen (buf2)) <= 0)
{
irc_display_prefix (ptr_dcc->server, ptr_dcc->server->buffer,
@@ -1144,7 +1143,7 @@ void
dcc_chat_recv (t_irc_dcc *ptr_dcc)
{
static char buffer[4096 + 2];
- char *buf2, *pos, *ptr_buf, *next_ptr_buf;
+ char *buf2, *pos, *ptr_buf, *ptr_buf2, *next_ptr_buf;
char *ptr_buf_color;
int num_read;
@@ -1196,7 +1195,11 @@ dcc_chat_recv (t_irc_dcc *ptr_dcc)
if (ptr_buf)
{
- ptr_buf_color = (char *)gui_color_decode ((unsigned char *)ptr_buf,
+ ptr_buf2 = channel_iconv_decode (ptr_dcc->server,
+ ptr_dcc->channel,
+ ptr_buf);
+ ptr_buf_color = (char *)gui_color_decode ((ptr_buf2) ?
+ (unsigned char *)ptr_buf2 : (unsigned char *)ptr_buf,
cfg_irc_colors_receive);
gui_printf_type (ptr_dcc->channel->buffer, MSG_TYPE_NICK,
"%s<", GUI_COLOR(COLOR_WIN_CHAT_DARK));
@@ -1213,7 +1216,7 @@ dcc_chat_recv (t_irc_dcc *ptr_dcc)
COLOR_WIN_INFOBAR_HIGHLIGHT,
_("Private %s> %s"),
ptr_dcc->nick,
- (ptr_buf_color) ? ptr_buf_color : ptr_buf);
+ (ptr_buf_color) ? ptr_buf_color : ((ptr_buf2) ? ptr_buf2 : ptr_buf));
}
else
gui_printf_type (ptr_dcc->channel->buffer, MSG_TYPE_NICK,
@@ -1228,13 +1231,15 @@ dcc_chat_recv (t_irc_dcc *ptr_dcc)
(ptr_buf_color) ? ptr_buf_color : ptr_buf);
if (ptr_buf_color)
free (ptr_buf_color);
+ if (ptr_buf2)
+ free (ptr_buf2);
}
ptr_buf = next_ptr_buf;
}
if (buf2)
-free (buf2);
+ free (buf2);
}
else
{
diff --git a/src/irc/irc-display.c b/src/irc/irc-display.c
index b8be20219..05332ae63 100644
--- a/src/irc/irc-display.c
+++ b/src/irc/irc-display.c
@@ -185,27 +185,27 @@ irc_display_server (t_irc_server *server)
_("connected") : _("not connected"),
GUI_COLOR(COLOR_WIN_CHAT_DARK));
- gui_printf (NULL, " server_autoconnect . . . .: %s%s\n",
+ gui_printf (NULL, " server_autoconnect . . . . : %s%s\n",
(server->autoconnect) ? _("on") : _("off"),
(server->command_line) ?
_(" (temporary server, will not be saved)") : "");
- gui_printf (NULL, " server_autoreconnect . . .: %s\n",
+ gui_printf (NULL, " server_autoreconnect . . . : %s\n",
(server->autoreconnect) ? _("on") : _("off"));
- gui_printf (NULL, " server_autoreconnect_delay: %d %s\n",
+ gui_printf (NULL, " server_autoreconnect_delay : %d %s\n",
server->autoreconnect_delay,
_("seconds"));
- gui_printf (NULL, " server_address . . . . . .: %s\n",
+ gui_printf (NULL, " server_address . . . . . . : %s\n",
server->address);
- gui_printf (NULL, " server_port . . . . . . .: %d\n",
+ gui_printf (NULL, " server_port . . . . . . . : %d\n",
server->port);
- gui_printf (NULL, " server_ipv6 . . . . . . .: %s\n",
+ gui_printf (NULL, " server_ipv6 . . . . . . . : %s\n",
(server->ipv6) ? _("on") : _("off"));
- gui_printf (NULL, " server_ssl . . . . . . . .: %s\n",
+ gui_printf (NULL, " server_ssl . . . . . . . . : %s\n",
(server->ssl) ? _("on") : _("off"));
- gui_printf (NULL, " server_password . . . . .: %s\n",
+ gui_printf (NULL, " server_password . . . . . : %s\n",
(server->password && server->password[0]) ?
_("(hidden)") : "");
- gui_printf (NULL, " server_nick1/2/3 . . . . .: %s %s/ %s%s %s/ %s%s\n",
+ gui_printf (NULL, " server_nick1/2/3 . . . . . : %s %s/ %s%s %s/ %s%s\n",
server->nick1,
GUI_COLOR(COLOR_WIN_CHAT_DARK),
GUI_COLOR(COLOR_WIN_CHAT),
@@ -213,20 +213,29 @@ irc_display_server (t_irc_server *server)
GUI_COLOR(COLOR_WIN_CHAT_DARK),
GUI_COLOR(COLOR_WIN_CHAT),
server->nick3);
- gui_printf (NULL, " server_username . . . . .: %s\n",
+ gui_printf (NULL, " server_username . . . . . : %s\n",
server->username);
- gui_printf (NULL, " server_realname . . . . .: %s\n",
+ gui_printf (NULL, " server_realname . . . . . : %s\n",
server->realname);
- gui_printf (NULL, " server_command . . . . . .: %s\n",
+ gui_printf (NULL, " server_command . . . . . . : %s\n",
(server->command && server->command[0]) ?
server->command : "");
- gui_printf (NULL, " server_command_delay . . .: %d %s\n",
+ gui_printf (NULL, " server_command_delay . . . : %d %s\n",
server->command_delay,
_("seconds"));
- gui_printf (NULL, " server_autojoin . . . . .: %s\n",
+ gui_printf (NULL, " server_autojoin . . . . . : %s\n",
(server->autojoin && server->autojoin[0]) ?
server->autojoin : "");
- gui_printf (NULL, " server_notify_levels . . .: %s\n",
+ gui_printf (NULL, " server_notify_levels . . . : %s\n",
(server->notify_levels && server->notify_levels[0]) ?
server->notify_levels : "");
+ gui_printf (NULL, " server_charset_decode_iso. : %s\n",
+ (server->charset_decode_iso && server->charset_decode_iso[0]) ?
+ server->charset_decode_iso : "");
+ gui_printf (NULL, " server_charset_decode_utf. : %s\n",
+ (server->charset_decode_utf && server->charset_decode_utf[0]) ?
+ server->charset_decode_utf : "");
+ gui_printf (NULL, " server_charset_encode. . . : %s\n",
+ (server->charset_encode && server->charset_encode[0]) ?
+ server->charset_encode : "");
}
diff --git a/src/irc/irc-recv.c b/src/irc/irc-recv.c
index a19196315..bb0eeb359 100644
--- a/src/irc/irc-recv.c
+++ b/src/irc/irc-recv.c
@@ -2225,14 +2225,16 @@ irc_cmd_recv_quit (t_irc_server *server, char *host, char *nick, char *arguments
pos = strchr (host, '!');
irc_display_prefix (server, ptr_channel->buffer, PREFIX_QUIT);
gui_printf (ptr_channel->buffer,
- _("%s%s %s(%s%s%s)%s has quit %s(%s%s%s)\n"),
+ _("%s%s %s(%s%s%s)%s has quit"),
GUI_COLOR(COLOR_WIN_CHAT_NICK),
nick,
GUI_COLOR(COLOR_WIN_CHAT_DARK),
GUI_COLOR(COLOR_WIN_CHAT_HOST),
(pos) ? pos + 1 : "",
GUI_COLOR(COLOR_WIN_CHAT_DARK),
- GUI_COLOR(COLOR_WIN_CHAT),
+ GUI_COLOR(COLOR_WIN_CHAT));
+ gui_printf (ptr_channel->buffer,
+ " %s(%s%s%s)\n",
GUI_COLOR(COLOR_WIN_CHAT_DARK),
GUI_COLOR(COLOR_WIN_CHAT),
arguments,
@@ -2447,7 +2449,7 @@ irc_cmd_recv_004 (t_irc_server *server, char *host, char *nick, char *arguments)
/* execute command once connected */
if (server->command && server->command[0])
{
- user_command(server, NULL, server->command);
+ user_command(NULL, server, server->command);
if (server->command_delay > 0)
sleep (server->command_delay);
}
diff --git a/src/irc/irc-server.c b/src/irc/irc-server.c
index 2a4b6107e..33cf7afd0 100644
--- a/src/irc/irc-server.c
+++ b/src/irc/irc-server.c
@@ -84,6 +84,9 @@ server_init (t_irc_server *server)
server->autojoin = NULL;
server->autorejoin = 0;
server->notify_levels = NULL;
+ server->charset_decode_iso = NULL;
+ server->charset_decode_utf = NULL;
+ server->charset_encode = NULL;
/* internal vars */
server->child_pid = 0;
@@ -294,6 +297,12 @@ server_destroy (t_irc_server *server)
free (server->autojoin);
if (server->notify_levels)
free (server->notify_levels);
+ if (server->charset_decode_iso)
+ free (server->charset_decode_iso);
+ if (server->charset_decode_utf)
+ free (server->charset_decode_utf);
+ if (server->charset_encode)
+ free (server->charset_encode);
if (server->unterminated_message)
free (server->unterminated_message);
if (server->nick)
@@ -355,7 +364,8 @@ server_new (char *name, int autoconnect, int autoreconnect, int autoreconnect_de
int command_line, char *address, int port, int ipv6, int ssl, char *password,
char *nick1, char *nick2, char *nick3, char *username,
char *realname, char *command, int command_delay, char *autojoin,
- int autorejoin, char *notify_levels)
+ int autorejoin, char *notify_levels, char *charset_decode_iso,
+ char *charset_decode_utf, char *charset_encode)
{
t_irc_server *new_server;
@@ -365,12 +375,16 @@ server_new (char *name, int autoconnect, int autoreconnect, int autoreconnect_de
#ifdef DEBUG
weechat_log_printf ("Creating new server (name:%s, address:%s, port:%d, pwd:%s, "
"nick1:%s, nick2:%s, nick3:%s, username:%s, realname:%s, "
- "command:%s, autojoin:%s, autorejoin:%s, notify_levels:%s)\n",
+ "command:%s, autojoin:%s, autorejoin:%s, notify_levels:%s, "
+ "decode_iso:%s, decode_utf:%s, encode:%s)\n",
name, address, port, (password) ? password : "",
(nick1) ? nick1 : "", (nick2) ? nick2 : "", (nick3) ? nick3 : "",
(username) ? username : "", (realname) ? realname : "",
(command) ? command : "", (autojoin) ? autojoin : "",
- (autorejoin) ? "on" : "off", (notify_levels) ? notify_levels : "");
+ (autorejoin) ? "on" : "off", (notify_levels) ? notify_levels : "",
+ (charset_decode_iso) ? charset_decode_iso : "",
+ (charset_decode_utf) ? charset_decode_utf : "",
+ (charset_encode) ? charset_encode : "");
#endif
if ((new_server = server_alloc ()))
@@ -400,6 +414,12 @@ server_new (char *name, int autoconnect, int autoreconnect, int autoreconnect_de
new_server->autorejoin = autorejoin;
new_server->notify_levels =
(notify_levels) ? strdup (notify_levels) : NULL;
+ new_server->charset_decode_iso =
+ (charset_decode_iso) ? strdup (charset_decode_iso) : NULL;
+ new_server->charset_decode_utf =
+ (charset_decode_utf) ? strdup (charset_decode_utf) : NULL;
+ new_server->charset_encode =
+ (charset_encode) ? strdup (charset_encode) : NULL;
}
else
return NULL;
@@ -407,6 +427,90 @@ server_new (char *name, int autoconnect, int autoreconnect, int autoreconnect_de
}
/*
+ * server_get_charset_decode_iso: get decode iso value for server
+ * if not found for server, look for global
+ */
+
+char *
+server_get_charset_decode_iso (t_irc_server *server)
+{
+ char *pos, *result;
+ int length;
+
+ if (!server)
+ return (cfg_look_charset_decode_iso) ?
+ strdup (cfg_look_charset_decode_iso) : strdup ("");
+
+ config_option_list_get_value (&(server->charset_decode_iso),
+ "server", &pos, &length);
+ if (pos && (length > 0))
+ {
+ result = strdup (pos);
+ result[length] = '\0';
+ return result;
+ }
+
+ return (cfg_look_charset_decode_iso) ?
+ strdup (cfg_look_charset_decode_iso) : strdup ("");
+}
+
+/*
+ * server_get_charset_decode_utf: get decode utf value for server
+ * if not found for server, look for global
+ */
+
+char *
+server_get_charset_decode_utf (t_irc_server *server)
+{
+ char *pos, *result;
+ int length;
+
+ if (!server)
+ return (cfg_look_charset_decode_utf) ?
+ strdup (cfg_look_charset_decode_utf) : strdup ("");
+
+ config_option_list_get_value (&(server->charset_decode_utf),
+ "server", &pos, &length);
+ if (pos && (length > 0))
+ {
+ result = strdup (pos);
+ result[length] = '\0';
+ return result;
+ }
+
+ return (cfg_look_charset_decode_utf) ?
+ strdup (cfg_look_charset_decode_utf) : strdup ("");
+}
+
+/*
+ * server_get_charset_encode: get encode value for server
+ * if not found for server, look for global
+ */
+
+char *
+server_get_charset_encode (t_irc_server *server)
+{
+ char *pos, *result;
+ int length;
+
+ if (!server)
+ return (cfg_look_charset_encode) ?
+ strdup (cfg_look_charset_encode) : strdup ("");
+
+ config_option_list_get_value (&(server->charset_encode),
+ "server", &pos, &length);
+ if (pos && (length > 0))
+ {
+ result = strdup (pos);
+ result[length] = '\0';
+ return result;
+ }
+
+ return (cfg_look_charset_encode) ?
+ strdup (cfg_look_charset_encode) : strdup ("");
+}
+
+/*
* server_send: send data to IRC server
*/
@@ -433,7 +537,6 @@ server_sendf (t_irc_server *server, char *fmt, ...)
{
va_list args;
static char buffer[4096];
- char *buf2;
int size_buf;
if (!server)
@@ -454,17 +557,12 @@ server_sendf (t_irc_server *server, char *fmt, ...)
gui_printf (server->buffer, "[DEBUG] Sending to server >>> %s\n", buffer);
buffer[size_buf - 2] = '\r';
#endif
- buf2 = weechat_convert_encoding ((cfg_look_charset_internal && cfg_look_charset_internal[0]) ?
- cfg_look_charset_internal : local_charset,
- cfg_look_charset_encode,
- buffer);
- if (server_send (server, buf2, strlen (buf2)) <= 0)
+ if (server_send (server, buffer, strlen (buffer)) <= 0)
{
irc_display_prefix (server, server->buffer, PREFIX_ERROR);
gui_printf (server->buffer, _("%s error sending data to IRC server\n"),
WEECHAT_ERROR);
}
- free (buf2);
}
/*
@@ -1782,6 +1880,9 @@ server_print_log (t_irc_server *server)
weechat_log_printf (" autojoin. . . . . . : '%s'\n", server->autojoin);
weechat_log_printf (" autorejoin. . . . . : %d\n", server->autorejoin);
weechat_log_printf (" notify_levels . . . : %s\n", server->notify_levels);
+ weechat_log_printf (" charset_decode_iso. : %s\n", server->charset_decode_iso);
+ weechat_log_printf (" charset_decode_utf. : %s\n", server->charset_decode_utf);
+ weechat_log_printf (" charset_encode. . . : %s\n", server->charset_encode);
weechat_log_printf (" child_pid . . . . . : %d\n", server->child_pid);
weechat_log_printf (" child_read . . . . : %d\n", server->child_read);
weechat_log_printf (" child_write . . . . : %d\n", server->child_write);
diff --git a/src/irc/irc.h b/src/irc/irc.h
index e2fdc00fb..28a10b13f 100644
--- a/src/irc/irc.h
+++ b/src/irc/irc.h
@@ -143,6 +143,9 @@ struct t_irc_server
char *autojoin; /* channels to automatically join */
int autorejoin; /* auto rejoin channels when kicked */
char *notify_levels; /* channels notify levels */
+ char *charset_decode_iso; /* channels charsets for decoding ISO */
+ char *charset_decode_utf; /* channels charsets for decoding UTF */
+ char *charset_encode; /* channels charsets for encoding msgs */
/* internal vars */
pid_t child_pid; /* pid of child process (connecting) */
@@ -301,7 +304,11 @@ extern void server_free (t_irc_server *);
extern void server_free_all ();
extern t_irc_server *server_new (char *, int, int, int, int, char *, int, int, int,
char *, char *, char *, char *, char *, char *,
- char *, int, char *, int, char *);
+ char *, int, char *, int, char *, char *, char *,
+ char *);
+extern char *server_get_charset_decode_iso (t_irc_server *);
+extern char *server_get_charset_decode_utf (t_irc_server *);
+extern char *server_get_charset_encode (t_irc_server *);
extern int server_send (t_irc_server *, char *, int);
extern void server_sendf (t_irc_server *, char *, ...);
extern void server_recv (t_irc_server *);
@@ -336,13 +343,17 @@ extern void channel_free (t_irc_server *, t_irc_channel *);
extern void channel_free_all (t_irc_server *);
extern t_irc_channel *channel_search (t_irc_server *, char *);
extern int string_is_channel (char *);
+extern char *channel_get_charset_decode_iso (t_irc_server *, t_irc_channel *);
+extern char *channel_get_charset_decode_utf (t_irc_server *, t_irc_channel *);
+extern char *channel_get_charset_encode (t_irc_server *, t_irc_channel *);
+extern char *channel_iconv_decode (t_irc_server *, t_irc_channel *, char *);
+extern char *channel_iconv_encode (t_irc_server *, t_irc_channel *, char *);
extern void channel_remove_away (t_irc_channel *);
extern void channel_check_away (t_irc_server *, t_irc_channel *);
extern void channel_set_away (t_irc_channel *, char *, int);
extern int channel_create_dcc (t_irc_dcc *);
extern void channel_remove_dcc (t_irc_dcc *);
extern int channel_get_notify_level (t_irc_server *, t_irc_channel *);
-extern void channel_remove_notify_level (t_irc_server *, t_irc_channel *);
extern void channel_set_notify_level (t_irc_server *, t_irc_channel *, int);
extern void channel_print_log (t_irc_channel *);
@@ -387,12 +398,9 @@ extern void irc_display_mode (t_irc_server *, t_gui_buffer *, char *, char,
char *, char *, char *, char *);
extern void irc_display_server (t_irc_server *ptr_server);
-/* IRC protocol (irc-commands.c) */
+/* IRC commands issued by user (irc-send.c) */
-extern int irc_is_highlight (char *, char *);
-extern int irc_recv_command (t_irc_server *, char *, char *, char *, char *);
extern void irc_login (t_irc_server *);
-/* IRC commands issued by user */
extern int irc_cmd_send_admin (t_irc_server *, char *);
extern int irc_cmd_send_ame (t_irc_server *, char *);
extern int irc_cmd_send_amsg (t_irc_server *, char *);
@@ -452,7 +460,11 @@ extern int irc_cmd_send_wallops (t_irc_server *, char *);
extern int irc_cmd_send_who (t_irc_server *, char *);
extern int irc_cmd_send_whois (t_irc_server *, char *);
extern int irc_cmd_send_whowas (t_irc_server *, char *);
-/* IRC commands executed when received from server */
+
+/* IRC commands executed when received from server (irc-recv.c) */
+
+extern int irc_is_highlight (char *, char *);
+extern int irc_recv_command (t_irc_server *, char *, char *, char *, char *);
extern int irc_cmd_recv_error (t_irc_server *, char *, char *, char *);
extern int irc_cmd_recv_invite (t_irc_server *, char *, char *, char *);
extern int irc_cmd_recv_join (t_irc_server *, char *, char *, char *);