-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Hi, I enclose the patch that recodes channel names according to the encoding specified for the chatnet. Now it is possible to join and control channels the names of which are in different encoding than the current encoding is.
Denis -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.10 (GNU/Linux) iEYEARECAAYFAkyEBQkACgkQ2NWb5jcEx3zr4gCfSoidKRb/a+XK0r8976Ryg0Ky uuUAn0wpVOCwTYiMfFwGKZkUfwlWg9k1 =g4qv -----END PGP SIGNATURE-----
Index: src/fe-common/irc/fe-events.c
===================================================================
--- src/fe-common/irc/fe-events.c (revision 5190)
+++ src/fe-common/irc/fe-events.c (working copy)
@@ -50,6 +50,8 @@
g_return_if_fail(data != NULL);
params = event_get_params(data, 2 | PARAM_FLAG_GETREST, &target, &msg);
+ if (ischannel(*target))
+ target = recode_in(SERVER(server), target, NULL);
if (nick == NULL) nick = server->real_address;
if (addr == NULL) addr = "";
if (*target == '@' && ischannel(target[1])) {
@@ -65,6 +67,8 @@
server, recoded, nick, addr,
get_visible_target(server, target));
}
+ if (ischannel(*target))
+ g_free(target);
g_free(params);
g_free(recoded);
@@ -115,26 +119,33 @@
params = event_get_params(data, 1, &channel);
tmp = strchr(channel, 7); /* ^G does something weird.. */
if (tmp != NULL) *tmp = '\0';
+ channel = recode_in(SERVER(server), channel, NULL);
signal_emit("message join", 4, server,
get_visible_target(server, channel), nick, addr);
+
+ g_free(channel);
g_free(params);
}
static void event_part(IRC_SERVER_REC *server, const char *data,
const char *nick, const char *addr)
{
- char *params, *channel, *reason, *recoded;
+ char *params, *channel, *reason;
g_return_if_fail(data != NULL);
params = event_get_params(data, 2 | PARAM_FLAG_GETREST,
&channel, &reason);
- recoded = recode_in(SERVER(server), reason, channel);
+ channel = recode_in(SERVER(server), channel, NULL);
+ reason = recode_in(SERVER(server), reason, channel);
+
signal_emit("message part", 5, server,
- get_visible_target(server, channel), nick, addr, recoded);
+ get_visible_target(server, channel), nick, addr, reason);
+
+ g_free(reason);
+ g_free(channel);
g_free(params);
- g_free(recoded);
}
static void event_quit(IRC_SERVER_REC *server, const char *data,
@@ -153,18 +164,22 @@
static void event_kick(IRC_SERVER_REC *server, const char *data,
const char *kicker, const char *addr)
{
- char *params, *channel, *nick, *reason, *recoded;
+ char *params, *channel, *nick, *reason;
g_return_if_fail(data != NULL);
params = event_get_params(data, 3 | PARAM_FLAG_GETREST,
&channel, &nick, &reason);
- recoded = recode_in(SERVER(server), reason, channel);
+ channel = recode_in(SERVER(server), channel, NULL);
+ reason = recode_in(SERVER(server), reason, channel);
+
signal_emit("message kick", 6,
server, get_visible_target(server, channel),
- nick, kicker, addr, recoded);
+ nick, kicker, addr, reason);
+
+ g_free(reason);
+ g_free(channel);
g_free(params);
- g_free(recoded);
}
static void event_kill(IRC_SERVER_REC *server, const char *data,
@@ -225,10 +240,13 @@
params = event_get_params(data, 2 | PARAM_FLAG_GETREST,
&channel, &mode);
+ channel = recode_in(SERVER(server), channel, NULL);
signal_emit("message irc mode", 5,
server, get_visible_target(server, channel),
nick, addr, g_strchomp(mode));
+
+ g_free(channel);
g_free(params);
}
@@ -252,25 +270,33 @@
g_return_if_fail(data != NULL);
params = event_get_params(data, 2, NULL, &channel);
+ channel = recode_in(SERVER(server), channel, NULL);
+
signal_emit("message invite", 4,
server, get_visible_target(server, channel), nick, addr);
+
+ g_free(channel);
g_free(params);
}
static void event_topic(IRC_SERVER_REC *server, const char *data,
const char *nick, const char *addr)
{
- char *params, *channel, *topic, *recoded;
+ char *params, *channel, *topic;
g_return_if_fail(data != NULL);
params = event_get_params(data, 2 | PARAM_FLAG_GETREST,
&channel, &topic);
- recoded = recode_in(SERVER(server), topic, channel);
+ channel = recode_in(SERVER(server), channel, NULL);
+ topic = recode_in(SERVER(server), topic, channel);
+
signal_emit("message topic", 5, server,
- get_visible_target(server, channel), recoded, nick, addr);
+ get_visible_target(server, channel), topic, nick, addr);
+
+ g_free(topic);
+ g_free(channel);
g_free(params);
- g_free(recoded);
}
static void event_error(IRC_SERVER_REC *server, const char *data)
Index: src/fe-common/irc/fe-events-numeric.c
===================================================================
--- src/fe-common/irc/fe-events-numeric.c (revision 5190)
+++ src/fe-common/irc/fe-events-numeric.c (working copy)
@@ -75,6 +75,7 @@
g_return_if_fail(data != NULL);
params = event_get_params(data, 4, NULL, NULL, &channel, &names);
+ channel = recode_in(SERVER(server), channel, NULL);
chanrec = irc_channel_find(server, channel);
if (chanrec == NULL || chanrec->names_got) {
@@ -84,6 +85,7 @@
printtext(server, channel, MSGLEVEL_CRAP, "%s", names);
}
+ g_free(channel);
g_free(params);
}
@@ -96,35 +98,44 @@
g_return_if_fail(data != NULL);
params = event_get_params(data, 2, NULL, &channel);
+ channel = recode_in(SERVER(server), channel, NULL);
chanrec = irc_channel_find(server, channel);
if (chanrec == NULL || chanrec->names_got)
print_event_received(server, data, nick, FALSE);
+
+ g_free(channel);
g_free(params);
}
static void event_who(IRC_SERVER_REC *server, const char *data)
{
char *params, *nick, *channel, *user, *host, *stat, *realname, *hops;
- char *serv, *recoded;
+ char *serv;
g_return_if_fail(data != NULL);
params = event_get_params(data, 8, NULL, &channel, &user,
&host, &serv, &nick, &stat, &realname);
+ channel = recode_in(SERVER(server), channel, NULL);
+ user = recode_in(SERVER(server), user, NULL);
+ host = recode_in(SERVER(server), host, NULL);
/* split hops/realname */
hops = realname;
while (*realname != '\0' && *realname != ' ') realname++;
if (*realname == ' ')
*realname++ = '\0';
-
- recoded = recode_in(SERVER(server), realname, nick);
+ realname = recode_in(SERVER(server), realname, nick);
+
printformat(server, NULL, MSGLEVEL_CRAP, IRCTXT_WHO,
- channel, nick, stat, hops, user, host, recoded, serv);
+ channel, nick, stat, hops, user, host, realname, serv);
+ //g_free(realname);
+ g_free(host);
+ g_free(user);
+ g_free(channel);
g_free(params);
- g_free(recoded);
}
static void event_end_of_who(IRC_SERVER_REC *server, const char *data)
@@ -134,7 +145,11 @@
g_return_if_fail(data != NULL);
params = event_get_params(data, 2, NULL, &channel);
+ channel = recode_in(SERVER(server), channel, NULL);
+
printformat(server, NULL, MSGLEVEL_CRAP, IRCTXT_END_OF_WHO, channel);
+
+ g_free(channel);
g_free(params);
}
@@ -142,47 +157,50 @@
{
IRC_CHANNEL_REC *chanrec;
BAN_REC *banrec;
- const char *channel;
- char *params, *ban, *setby, *tims;
+ char *params, *channel, *ban, *setby, *tims;
+ const char *target;
long secs;
g_return_if_fail(data != NULL);
params = event_get_params(data, 5, NULL, &channel,
&ban, &setby, &tims);
+ channel = recode_in(SERVER(server), channel, NULL);
+ target = get_visible_target(server, channel);
+ chanrec = irc_channel_find(server, target);
+ banrec = chanrec == NULL ? NULL : banlist_find(chanrec->banlist, ban);
secs = *tims == '\0' ? 0 :
(long) (time(NULL) - atol(tims));
- chanrec = irc_channel_find(server, channel);
- banrec = chanrec == NULL ? NULL : banlist_find(chanrec->banlist, ban);
-
- channel = get_visible_target(server, channel);
- printformat(server, channel, MSGLEVEL_CRAP,
+ printformat(server, target, MSGLEVEL_CRAP,
*setby == '\0' ? IRCTXT_BANLIST : IRCTXT_BANLIST_LONG,
banrec == NULL ? 0 : g_slist_index(chanrec->banlist, banrec)+1,
- channel, ban, setby, secs);
+ target, ban, setby, secs);
+ g_free(channel);
g_free(params);
}
static void event_eban_list(IRC_SERVER_REC *server, const char *data)
{
- const char *channel;
- char *params, *ban, *setby, *tims;
+ char *params, *channel, *ban, *setby, *tims;
+ const char *target;
long secs;
g_return_if_fail(data != NULL);
params = event_get_params(data, 5, NULL, &channel,
&ban, &setby, &tims);
+ channel = recode_in(SERVER(server), channel, NULL);
+ target = get_visible_target(server, channel);
secs = *tims == '\0' ? 0 :
(long) (time(NULL) - atol(tims));
- channel = get_visible_target(server, channel);
- printformat(server, channel, MSGLEVEL_CRAP,
+ printformat(server, target, MSGLEVEL_CRAP,
*setby == '\0' ? IRCTXT_EBANLIST : IRCTXT_EBANLIST_LONG,
- channel, ban, setby, secs);
+ target, ban, setby, secs);
+ g_free(channel);
g_free(params);
}
@@ -213,21 +231,24 @@
static void event_invite_list(IRC_SERVER_REC *server, const char *data)
{
- const char *channel;
- char *params, *invite, *setby, *tims;
+ char *params, *channel, *invite, *setby, *tims;
+ const char *target;
long secs;
g_return_if_fail(data != NULL);
params = event_get_params(data, 5, NULL, &channel, &invite,
&setby, &tims);
+ channel = recode_in(SERVER(server), channel, NULL);
+ target = get_visible_target(server, channel);
secs = *tims == '\0' ? 0 :
(long) (time(NULL) - atol(tims));
- channel = get_visible_target(server, channel);
- printformat(server, channel, MSGLEVEL_CRAP,
+ printformat(server, target, MSGLEVEL_CRAP,
*setby == '\0' ? IRCTXT_INVITELIST : IRCTXT_INVITELIST_LONG,
- channel, invite, setby, secs);
+ target, invite, setby, secs);
+
+ g_free(channel);
g_free(params);
}
@@ -248,72 +269,85 @@
static void event_topic_get(IRC_SERVER_REC *server, const char *data)
{
- const char *channel;
- char *params, *topic, *recoded;
+ char *params, *channel, *topic;
+ const char *target;
g_return_if_fail(data != NULL);
params = event_get_params(data, 3, NULL, &channel, &topic);
- recoded = recode_in(SERVER(server), topic, channel);
- channel = get_visible_target(server, channel);
- printformat(server, channel, MSGLEVEL_CRAP,
- IRCTXT_TOPIC, channel, recoded);
+ channel = recode_in(SERVER(server), channel, NULL);
+ topic = recode_in(SERVER(server), topic, channel);
+ target = get_visible_target(server, channel);
+
+ printformat(server, target, MSGLEVEL_CRAP,
+ IRCTXT_TOPIC, target, topic);
+
+ g_free(topic);
+ g_free(channel);
g_free(params);
- g_free(recoded);
}
static void event_topic_info(IRC_SERVER_REC *server, const char *data)
{
- const char *channel;
- char *params, *timestr, *bynick, *byhost, *topictime;
+ char *params, *channel, *timestr, *bynick, *byhost, *topictime;
+ const char *target;
g_return_if_fail(data != NULL);
params = event_get_params(data, 4, NULL, &channel,
&bynick, &topictime);
-
+ channel = recode_in(SERVER(server), channel, NULL);
+ target = get_visible_target(server, channel);
timestr = my_asctime((time_t) atol(topictime));
byhost = strchr(bynick, '!');
if (byhost != NULL)
*byhost++ = '\0';
- channel = get_visible_target(server, channel);
- printformat(server, channel, MSGLEVEL_CRAP, IRCTXT_TOPIC_INFO,
+ printformat(server, target, MSGLEVEL_CRAP, IRCTXT_TOPIC_INFO,
bynick, timestr, byhost == NULL ? "" : byhost);
+
g_free(timestr);
+ g_free(channel);
g_free(params);
}
static void event_channel_mode(IRC_SERVER_REC *server, const char *data)
{
- const char *channel;
- char *params, *mode;
+ char *params, *channel, *mode;
+ const char *target;
g_return_if_fail(data != NULL);
params = event_get_params(data, 3 | PARAM_FLAG_GETREST,
NULL, &channel, &mode);
- channel = get_visible_target(server, channel);
- printformat(server, channel, MSGLEVEL_CRAP,
- IRCTXT_CHANNEL_MODE, channel, g_strchomp(mode));
+ channel = recode_in(SERVER(server), channel, NULL);
+ target = get_visible_target(server, channel);
+
+ printformat(server, target, MSGLEVEL_CRAP,
+ IRCTXT_CHANNEL_MODE, target, g_strchomp(mode));
+
+ g_free(channel);
g_free(params);
}
static void event_channel_created(IRC_SERVER_REC *server, const char *data)
{
- const char *channel;
- char *params, *createtime, *timestr;
+ char *params, *channel, *createtime, *timestr;
+ const char *target;
g_return_if_fail(data != NULL);
params = event_get_params(data, 3, NULL, &channel, &createtime);
+ channel = recode_in(SERVER(server), channel, NULL);
+ target = get_visible_target(server, channel);
+ timestr = my_asctime((time_t) atol(createtime));
- timestr = my_asctime((time_t) atol(createtime));
- channel = get_visible_target(server, channel);
- printformat(server, channel, MSGLEVEL_CRAP,
- IRCTXT_CHANNEL_CREATED, channel, timestr);
+ printformat(server, target, MSGLEVEL_CRAP,
+ IRCTXT_CHANNEL_CREATED, target, timestr);
+
g_free(timestr);
+ g_free(channel);
g_free(params);
}
@@ -370,22 +404,30 @@
g_return_if_fail(data != NULL);
params = event_get_params(data, 3, NULL, &nick, &channel);
+ channel = recode_in(SERVER(server), channel, NULL);
+
printformat(server, nick, MSGLEVEL_CRAP,
IRCTXT_INVITING, nick, channel);
+
+ g_free(channel);
g_free(params);
}
static void event_chanserv_url(IRC_SERVER_REC *server, const char *data)
{
- const char *channel;
- char *params, *url;
+ char *params, *channel, *url;
+ const char *target;
g_return_if_fail(data != NULL);
params = event_get_params(data, 3, NULL, &channel, &url);
- channel = get_visible_target(server, channel);
- printformat(server, channel, MSGLEVEL_CRAP,
- IRCTXT_CHANNEL_URL, channel, url);
+ channel = recode_in(SERVER(server), channel, NULL);
+ target = get_visible_target(server, channel);
+
+ printformat(server, target, MSGLEVEL_CRAP,
+ IRCTXT_CHANNEL_URL, target, url);
+
+ g_free(channel);
g_free(params);
}
@@ -393,17 +435,18 @@
const char *nick, const char *addr)
{
IRC_CHANNEL_REC *chanrec;
- char *params, *target;
+ char *params, *channel, *target;
g_return_if_fail(data != NULL);
params = event_get_params(data, 2, NULL, &target);
- if (!ischannel(*target)) {
+ channel = recode_in(SERVER(server), target, NULL);
+ if (!ischannel(*channel)) {
/* nick unavailable */
printformat(server, NULL, MSGLEVEL_CRAP,
IRCTXT_NICK_UNAVAILABLE, target);
} else {
- chanrec = irc_channel_find(server, target);
+ chanrec = irc_channel_find(server, channel);
if (chanrec != NULL && chanrec->joined) {
/* dalnet - can't change nick while being banned */
print_event_received(server, data, nick, FALSE);
@@ -414,6 +457,7 @@
}
}
+ g_free(channel);
g_free(params);
}
@@ -441,8 +485,12 @@
g_return_if_fail(data != NULL);
params = event_get_params(data, 2, NULL, &channel);
+ channel = recode_in(SERVER(server), channel, NULL);
+
printformat(server, channel, MSGLEVEL_CRAP,
IRCTXT_NO_SUCH_CHANNEL, channel);
+
+ g_free(channel);
g_free(params);
}
@@ -453,7 +501,11 @@
g_return_if_fail(data != NULL);
params = event_get_params(data, 2, NULL, &channel);
+ channel = recode_in(SERVER(server), channel, NULL);
+
printformat(server, NULL, MSGLEVEL_CRAP, format, channel);
+
+ g_free(channel);
g_free(params);
}
@@ -472,6 +524,7 @@
/* this new addition to ircd breaks completely with older
"standards", "nick Duplicate ::!!channel ...." */
params = event_get_params(data, 3, NULL, NULL, &channel);
+ channel = recode_in(SERVER(server), channel, NULL);
p = strchr(channel, ' ');
if (p != NULL) *p = '\0';
@@ -481,6 +534,7 @@
} else
print_event_received(server, data, nick, FALSE);
+ g_free(channel);
g_free(params);
}
@@ -523,9 +577,12 @@
g_return_if_fail(data != NULL);
params = event_get_params(data, 2, NULL, &channel);
+ channel = recode_in(SERVER(server), channel, NULL);
chanrec = irc_channel_find(server, channel);
print_event_received(server, data, nick, chanrec == NULL || chanrec->joined);
+
+ g_free(channel);
g_free(params);
}
@@ -542,9 +599,12 @@
g_return_if_fail(data != NULL);
params = event_get_params(data, 2, NULL, &channel);
+ channel = recode_in(SERVER(server), channel, NULL);
chanrec = irc_channel_find(server, channel);
print_event_received(server, data, nick, chanrec == NULL || chanrec->joined);
+
+ g_free(channel);
g_free(params);
}
Index: src/irc/core/irc-channels.c
===================================================================
--- src/irc/core/irc-channels.c (revision 5190)
+++ src/irc/core/irc-channels.c (working copy)
@@ -23,6 +23,7 @@
#include "misc.h"
#include "levels.h"
#include "channels-setup.h"
+#include "recode.h"
#include "bans.h"
#include "modes.h"
@@ -146,11 +147,21 @@
continue;
}
if (outchans->len > 0) {
+ char *outchans_recoded;
+ char *outkeys_recoded;
+
g_string_truncate(outchans, outchans->len-1);
+ outchans_recoded = recode_out(SERVER(server),
+ outchans->str, NULL);
g_string_truncate(outkeys, outkeys->len-1);
+ outkeys_recoded = recode_out(SERVER(server),
+ outkeys->str, NULL);
irc_send_cmdv(IRC_SERVER(server),
use_keys ? "JOIN %s %s" : "JOIN %s",
- outchans->str, outkeys->str);
+ outchans_recoded, outkeys_recoded);
+
+ g_free(outkeys_recoded);
+ g_free(outchans_recoded);
}
cmdlen = 0;
g_string_truncate(outchans,0);
Index: src/irc/core/irc-nicklist.c
===================================================================
--- src/irc/core/irc-nicklist.c (revision 5190)
+++ src/irc/core/irc-nicklist.c (working copy)
@@ -21,6 +21,7 @@
#include "module.h"
#include "signals.h"
#include "misc.h"
+#include "recode.h"
#include "irc-servers.h"
#include "irc-channels.h"
@@ -110,10 +111,12 @@
g_return_if_fail(data != NULL);
params = event_get_params(data, 4, NULL, &type, &channel, &names);
+ channel = recode_in(SERVER(server), channel, NULL);
chanrec = irc_channel_find(server, channel);
if (chanrec == NULL || chanrec->names_got) {
/* unknown channel / names list already read */
+ g_free(channel);
g_free(params);
return;
}
@@ -168,6 +171,7 @@
}
}
+ g_free(channel);
g_free(params);
}
@@ -181,6 +185,7 @@
g_return_if_fail(server != NULL);
params = event_get_params(data, 2, NULL, &channel);
+ channel = recode_in(SERVER(server), channel, NULL);
chanrec = irc_channel_find(server, channel);
if (chanrec != NULL && !chanrec->names_got) {
@@ -199,6 +204,7 @@
signal_emit("channel joined", 1, chanrec);
}
+ g_free(channel);
g_free(params);
}
@@ -212,6 +218,7 @@
params = event_get_params(data, 8, NULL, &channel, &user, &host,
NULL, &nick, &stat, &realname);
+ channel = recode_in(SERVER(server), channel, NULL);
/* get hop count */
hops = realname;
@@ -238,6 +245,7 @@
strchr(stat, 'G') != NULL, /* gone */
strchr(stat, '*') != NULL); /* ircop */
+ g_free(channel);
g_free(params);
}
Index: src/irc/core/channel-events.c
===================================================================
--- src/irc/core/channel-events.c (revision 5190)
+++ src/irc/core/channel-events.c (working copy)
@@ -59,10 +59,12 @@
which we haven't joined yet. 4xx are error codes and should
indicate that the join failed. */
params = event_get_params(line, 3, &numeric, NULL, &channel);
+ channel = recode_in(SERVER(server), channel, NULL);
if (numeric[0] == '4')
check_join_failure(server, channel);
+ g_free(channel);
g_free(params);
}
@@ -73,6 +75,7 @@
char *params, *channel;
params = event_get_params(data, 2, NULL, &channel);
+ channel = recode_in(SERVER(server), channel, NULL);
chanrec = *channel == '!' && channel[1] != '\0' ?
channel_find(SERVER(server), channel) : NULL;
@@ -83,12 +86,15 @@
if (setup != NULL && setup->autojoin) {
/* it's autojoin channel though, so create it */
irc_send_cmdv(server, "JOIN !%s", chanrec->name);
+ g_free(channel);
g_free(params);
return;
}
}
check_join_failure(server, channel);
+
+ g_free(channel);
g_free(params);
}
@@ -102,6 +108,7 @@
/* this new addition to ircd breaks completely with older
"standards", "nick Duplicate ::!!channel ...." */
params = event_get_params(data, 3, NULL, NULL, &channel);
+ channel = recode_in(SERVER(server), channel, NULL);
p = strchr(channel, ' ');
if (p != NULL) *p = '\0';
@@ -114,6 +121,7 @@
}
}
+ g_free(channel);
g_free(params);
}
@@ -150,7 +158,11 @@
g_return_if_fail(data != NULL);
params = event_get_params(data, 3, NULL, &channel, &topic);
+ channel = recode_in(SERVER(server), channel, NULL);
+
channel_change_topic(server, channel, topic, NULL, 0);
+
+ g_free(channel);
g_free(params);
}
@@ -162,10 +174,14 @@
g_return_if_fail(data != NULL);
params = event_get_params(data, 2, &channel, &topic);
+ channel = recode_in(SERVER(server), channel, NULL);
mask = addr == NULL ? g_strdup(nick) :
g_strconcat(nick, "!", addr, NULL);
+
channel_change_topic(server, channel, topic, mask, time(NULL));
+
g_free(mask);
+ g_free(channel);
g_free(params);
}
@@ -178,9 +194,12 @@
params = event_get_params(data, 4, NULL, &channel,
&topicby, &topictime);
+ channel = recode_in(SERVER(server), channel, NULL);
+ t = (time_t) atol(topictime);
- t = (time_t) atol(topictime);
channel_change_topic(server, channel, NULL, topicby, t);
+
+ g_free(channel);
g_free(params);
}
@@ -223,6 +242,7 @@
server->userhost = g_strdup(address);
params = event_get_params(data, 1, &channel);
+ channel = recode_in(SERVER(server), channel, NULL);
tmp = strchr(channel, 7); /* ^G does something weird.. */
if (tmp != NULL) *tmp = '\0';
@@ -276,6 +296,7 @@
}
g_free(shortchan);
+ g_free(channel);
g_free(params);
}
@@ -292,6 +313,7 @@
}
params = event_get_params(data, 2, &channel, &reason);
+ channel = recode_in(SERVER(server), channel, NULL);
chanrec = channel_find(SERVER(server), channel);
if (chanrec != NULL && chanrec->joined) {
@@ -299,6 +321,7 @@
channel_destroy(chanrec);
}
+ g_free(channel);
g_free(params);
}
@@ -310,6 +333,7 @@
g_return_if_fail(data != NULL);
params = event_get_params(data, 3, &channel, &nick, &reason);
+ channel = recode_in(SERVER(server), channel, NULL);
if (g_strcasecmp(nick, server->nick) != 0) {
/* someone else was kicked, no need to do anything */
@@ -324,6 +348,7 @@
channel_destroy(chanrec);
}
+ g_free(channel);
g_free(params);
}
@@ -334,6 +359,7 @@
g_return_if_fail(data != NULL);
params = event_get_params(data, 2, NULL, &channel);
+ channel = recode_in(SERVER(server), channel, NULL);
if (irc_channel_find(server, channel) == NULL) {
/* check if we're supposed to autojoin this channel */
@@ -353,6 +379,7 @@
g_free_not_null(server->last_invite);
server->last_invite = g_strdup(channel);
+ g_free(channel);
g_free(params);
}
Index: src/irc/core/irc-commands.c
===================================================================
--- src/irc/core/irc-commands.c (revision 5190)
+++ src/irc/core/irc-commands.c (working copy)
@@ -170,17 +170,20 @@
if (*msg != '\0')
recoded = recode_out(SERVER(server), msg, channame);
+ channame = recode_out(SERVER(server), channame, NULL);
+
irc_send_cmdv(server, ! recoded ? "PART %s" : "PART %s :%s",
channame, recoded);
g_free(recoded);
+ g_free(channame);
cmd_params_free(free_arg);
}
/* SYNTAX: KICK [<channel>] <nicks> [<reason>] */
static void cmd_kick(const char *data, IRC_SERVER_REC *server, WI_ITEM_REC *item)
{
- char *channame, *nicks, *reason, *recoded;
+ char *channame, *nicks, *reason;
void *free_arg;
CMD_IRC_SERVER(server);
@@ -193,12 +196,14 @@
if (*channame == '\0' || *nicks == '\0') cmd_param_error(CMDERR_NOT_ENOUGH_PARAMS);
if (!ischannel(*channame)) cmd_param_error(CMDERR_NOT_JOINED);
- recoded = recode_out(SERVER(server), reason, channame);
- g_string_printf(tmpstr, "KICK %s %s :%s", channame, nicks, recoded);
- g_free(recoded);
+ reason = recode_out(SERVER(server), reason, channame);
+ channame = recode_out(SERVER(server), channame, NULL);
+ g_string_printf(tmpstr, "KICK %s %s :%s", channame, nicks, reason);
irc_send_cmd_split(server, tmpstr->str, 3, server->max_kicks_in_cmd);
+ g_free(reason);
+ g_free(channame);
cmd_params_free(free_arg);
}
@@ -207,7 +212,6 @@
{
GHashTable *optlist;
char *channame, *topic;
- char *recoded = NULL;
void *free_arg;
CMD_IRC_SERVER(server);
@@ -218,11 +222,13 @@
return;
if (*topic != '\0' || g_hash_table_lookup(optlist, "delete") != NULL)
- recoded = recode_out(SERVER(server), topic, channame);
- irc_send_cmdv(server, recoded == NULL ? "TOPIC %s" : "TOPIC %s :%s",
- channame, recoded);
- g_free(recoded);
+ topic = recode_out(SERVER(server), topic, channame);
+ channame = recode_out(SERVER(server), channame, NULL);
+ irc_send_cmdv(server, topic == NULL ? "TOPIC %s" : "TOPIC %s :%s",
+ channame, topic);
+ g_free(topic);
+ g_free(channame);
cmd_params_free(free_arg);
}
@@ -244,8 +250,11 @@
channame = IRC_CHANNEL(item)->name;
}
+ channame = recode_out(SERVER(server), channame, NULL);
irc_send_cmdv(server, "INVITE %s %s", nick, channame);
+
+ g_free(channame);
cmd_params_free(free_arg);
}
@@ -268,7 +277,10 @@
server->channels_formed > LIST_MAX_CHANNELS_PASS))
cmd_param_error(CMDERR_NOT_GOOD_IDEA);
+ str = recode_out(SERVER(server), str, NULL);
irc_send_cmdv(server, "LIST %s", str);
+
+ g_free(str);
cmd_params_free(free_arg);
}
@@ -292,11 +304,14 @@
}
if (strcmp(channel, "**") == 0) {
/* ** displays all nicks.. */
- *channel = '\0';
+ irc_send_cmd(server, "WHO");
+ } else {
+ channel = recode_out(SERVER(server), channel, NULL);
+ irc_send_cmdv(server, *rest == '\0' ? "WHO %s" : "WHO %s %s",
+ channel, rest);
+ g_free(channel);
}
- irc_send_cmdv(server, *rest == '\0' ? "WHO %s" : "WHO %s %s",
- channel, rest);
cmd_params_free(free_arg);
}
@@ -324,7 +339,9 @@
/* ** displays all nicks.. */
irc_send_cmd(server, "NAMES");
} else {
+ channel = recode_out(SERVER(server), channel, NULL);
irc_send_cmdv(server, "NAMES %s", channel);
+ g_free(channel);
}
cmd_params_free(free_arg);
channel-name-recode.diff.sig
Description: PGP signature
