// For example, blowfish-ebc seems to create 8-char chunks.
static const char *cmd = "PRIVMSG";
- static const char *splitter = " .,-";
+ static const char *splitter = " .,-!?";
int maxSplitPos = message.count();
int splitPos = maxSplitPos;
inline CoreNetwork *coreNetwork() const { return qobject_cast<CoreNetwork *>(parent()); }
void handleUserInput(const BufferInfo &bufferInfo, const QString &text);
+ int lastParamOverrun(const QString &cmd, const QList<QByteArray> ¶ms);
public slots:
void handleAway(const BufferInfo &bufferInfo, const QString &text);
void doMode(const BufferInfo& bufferInfo, const QChar &addOrRemove, const QChar &mode, const QString &nickList);
void banOrUnban(const BufferInfo &bufferInfo, const QString &text, bool ban);
void putPrivmsg(const QByteArray &target, const QByteArray &message, Cipher *cipher = 0);
- int lastParamOverrun(const QString &cmd, const QList<QByteArray> ¶ms);
#ifdef HAVE_QCA2
QByteArray encrypt(const QString &target, const QByteArray &message, bool *didEncrypt = 0) const;
#include "coresession.h"
#include "ctcpevent.h"
#include "messageevent.h"
+#include "coreuserinputhandler.h"
const QByteArray XDELIM = "\001";
void CtcpParser::query(CoreNetwork *net, const QString &bufname, const QString &ctcpTag, const QString &message)
{
QList<QByteArray> params;
+ QList<QByteArray> newparams;
params << net->serverEncode(bufname) << lowLevelQuote(pack(net->serverEncode(ctcpTag), net->userEncode(bufname, message)));
- net->putCmd("PRIVMSG", params);
+
+ static const char *splitter = " .,-!?";
+ int maxSplitPos = message.count();
+ int splitPos = maxSplitPos;
+
+ int overrun = net->userInputHandler()->lastParamOverrun("PRIVMSG", params);
+ if (overrun) {
+ maxSplitPos = message.count() - overrun -2;
+ splitPos = -1;
+ for (const char *splitChar = splitter; *splitChar != 0; splitChar++) {
+ splitPos = qMax(splitPos, message.lastIndexOf(*splitChar, maxSplitPos) + 1); // keep split char on old line
+ }
+ if (splitPos <= 0 || splitPos > maxSplitPos)
+ splitPos = maxSplitPos;
+ }
+ newparams << net->serverEncode(bufname) << lowLevelQuote(pack(net->serverEncode(ctcpTag), net->userEncode(bufname, message.left(splitPos))));
+ net->putCmd("PRIVMSG", newparams);
+
+ if (splitPos < message.count())
+ query(net, bufname, ctcpTag, message.mid(splitPos));
}