diff options
author | Timo Sirainen <cras@irssi.org> | 2000-11-09 21:26:55 +0000 |
---|---|---|
committer | cras <cras@dbcabf3a-b0e7-0310-adc4-f8d773084564> | 2000-11-09 21:26:55 +0000 |
commit | 82a3f10480c25ef673c13b0db1fe6bd80240f084 (patch) | |
tree | 4f8b97a6c870051c360f9a03b348c43cf2b47d95 /src/irc/proxy/dump.c | |
parent | 76ca80087b40f34ff30f67be57c63f5a1ce15a64 (diff) | |
download | irssi-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.c | 29 |
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, '@'); |