summaryrefslogtreecommitdiff
path: root/src/irc/proxy/dump.c
diff options
context:
space:
mode:
authorTimo Sirainen <cras@irssi.org>2000-11-09 21:26:55 +0000
committercras <cras@dbcabf3a-b0e7-0310-adc4-f8d773084564>2000-11-09 21:26:55 +0000
commit82a3f10480c25ef673c13b0db1fe6bd80240f084 (patch)
tree4f8b97a6c870051c360f9a03b348c43cf2b47d95 /src/irc/proxy/dump.c
parent76ca80087b40f34ff30f67be57c63f5a1ce15a64 (diff)
downloadirssi-82a3f10480c25ef673c13b0db1fe6bd80240f084.zip
When sending /NAMES after join: Don't send lines longer than 512 chars -
non-irssi clients don't like them :) git-svn-id: http://svn.irssi.org/repos/irssi/trunk@822 dbcabf3a-b0e7-0310-adc4-f8d773084564
Diffstat (limited to 'src/irc/proxy/dump.c')
-rw-r--r--src/irc/proxy/dump.c29
1 files changed, 23 insertions, 6 deletions
diff --git a/src/irc/proxy/dump.c b/src/irc/proxy/dump.c
index 5cc34bdc..0f394b10 100644
--- a/src/irc/proxy/dump.c
+++ b/src/irc/proxy/dump.c
@@ -138,25 +138,42 @@ void proxy_outserver_all_except(CLIENT_REC *client, const char *data, ...)
va_end(args);
}
+static void create_names_start(GString *str, IRC_CHANNEL_REC *channel,
+ CLIENT_REC *client)
+{
+ g_string_sprintf(str, ":proxy 353 %s %c %s :", client->nick,
+ channel_mode_is_set(channel, 'p') ? '*' :
+ channel_mode_is_set(channel, 's') ? '@' : '=',
+ channel->name);
+}
+
static void dump_join(IRC_CHANNEL_REC *channel, CLIENT_REC *client)
{
GSList *tmp, *nicks;
GString *str;
+ int first;
proxy_outserver(client, "JOIN %s", channel->name);
- proxy_outdata(client, ":proxy 353 %s %c %s :", client->nick,
- channel_mode_is_set(channel, 'p') ? '*' :
- channel_mode_is_set(channel, 's') ? '@' : '=',
- channel->name);
str = g_string_new(NULL);
+ create_names_start(str, channel, client);
+ first = TRUE;
nicks = nicklist_getnicks(CHANNEL(channel));
for (tmp = nicks; tmp != NULL; tmp = tmp->next) {
NICK_REC *nick = tmp->data;
- if (tmp != nicks)
- g_string_append_c(str, ' ');
+ if (str->len >= 500) {
+ g_string_append_c(str, '\n');
+ proxy_outdata(client, str->str);
+ create_names_start(str, channel, client);
+ first = TRUE;
+ }
+
+ if (first) {
+ g_string_append_c(str, ' ');
+ first = FALSE;
+ }
if (nick->op)
g_string_append_c(str, '@');