aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--degesch.c26
1 files changed, 22 insertions, 4 deletions
diff --git a/degesch.c b/degesch.c
index a5443f5..5b10c7b 100644
--- a/degesch.c
+++ b/degesch.c
@@ -2722,10 +2722,28 @@ send_message_to_target (struct app_context *ctx,
return;
}
- // TODO: autosplit
- irc_send (ctx, "PRIVMSG %s :%s", target, message);
- buffer_send (ctx, buffer, BUFFER_LINE_PRIVMSG, 0,
- ctx->irc_user->nickname, NULL, "%s", message);
+ int one_message = 0;
+ if (ctx->irc_user_host)
+ // :<nick>!<user>@<host> PRIVMSG <target> :<message>
+ one_message = 510 - 1 - (int) strlen (ctx->irc_user->nickname)
+ - 1 - (int) strlen (ctx->irc_user_host)
+ - 1 - 7 - 1 - strlen (target) - 1 - 1;
+
+ // FIXME: UTF-8 sequences
+ int left = strlen (message);
+ while (left)
+ {
+ int part = MIN (one_message, left);
+ if (!one_message)
+ part = left;
+
+ irc_send (ctx, "PRIVMSG %s :%.*s", target, part, message);
+ buffer_send (ctx, buffer, BUFFER_LINE_PRIVMSG, 0,
+ ctx->irc_user->nickname, NULL, "%.*s", part, message);
+
+ left -= part;
+ message += part;
+ }
}
static void