{
QByteArray MQUOTE = QByteArray("\020");
- ctcpMDequoteHash[MQUOTE + '0'] = QByteArray("\000");
- ctcpMDequoteHash[MQUOTE + 'n'] = QByteArray("\n");
- ctcpMDequoteHash[MQUOTE + 'r'] = QByteArray("\r");
+ ctcpMDequoteHash[MQUOTE + '0'] = QByteArray(1, '\000');
+ ctcpMDequoteHash[MQUOTE + 'n'] = QByteArray(1, '\n');
+ ctcpMDequoteHash[MQUOTE + 'r'] = QByteArray(1, '\r');
ctcpMDequoteHash[MQUOTE + MQUOTE] = MQUOTE;
QByteArray XQUOTE = QByteArray("\134");
ctcpXDelimDequoteHash[XQUOTE + QByteArray("a")] = XDELIM;
}
-QByteArray CtcpHandler::dequote(const QByteArray &message) {
+QByteArray CtcpHandler::lowLevelQuote(const QByteArray &message) {
+ QByteArray quotedMessage = message;
+
+ QHash<QByteArray, QByteArray> quoteHash = ctcpMDequoteHash;
+ QByteArray MQUOTE = QByteArray("\020");
+ quoteHash.remove(MQUOTE + MQUOTE);
+ quotedMessage.replace(MQUOTE, MQUOTE + MQUOTE);
+
+ QHash<QByteArray, QByteArray>::const_iterator quoteIter = quoteHash.constBegin();
+ while(quoteIter != quoteHash.constEnd()) {
+ quotedMessage.replace(quoteIter.value(), quoteIter.key());
+ quoteIter++;
+ }
+ return quotedMessage;
+}
+
+QByteArray CtcpHandler::lowLevelDequote(const QByteArray &message) {
QByteArray dequotedMessage;
QByteArray messagepart;
QHash<QByteArray, QByteArray>::iterator ctcpquote;
return dequotedMessage;
}
+QByteArray CtcpHandler::xdelimQuote(const QByteArray &message) {
+ QByteArray quotedMessage = message;
+ QHash<QByteArray, QByteArray>::const_iterator quoteIter = ctcpXDelimDequoteHash.constBegin();
+ while(quoteIter != ctcpXDelimDequoteHash.constEnd()) {
+ quotedMessage.replace(quoteIter.value(), quoteIter.key());
+ quoteIter++;
+ }
+ return quotedMessage;
+}
QByteArray CtcpHandler::xdelimDequote(const QByteArray &message) {
QByteArray dequotedMessage;
QByteArray ctcp;
//lowlevel message dequote
- QByteArray dequotedMessage = dequote(message);
+ QByteArray dequotedMessage = lowLevelDequote(message);
CtcpType ctcptype = messageType == Message::Notice
? CtcpReply
}
QByteArray CtcpHandler::pack(const QByteArray &ctcpTag, const QByteArray &message) {
- return XDELIM + ctcpTag + ' ' + message + XDELIM;
+ return XDELIM + ctcpTag + ' ' + xdelimQuote(message) + XDELIM;
}
-// TODO handle encodings correctly!
void CtcpHandler::query(const QString &bufname, const QString &ctcpTag, const QString &message) {
QList<QByteArray> params;
- params << serverEncode(bufname) << pack(serverEncode(ctcpTag), userEncode(bufname, message));
+ params << serverEncode(bufname) << lowLevelQuote(pack(serverEncode(ctcpTag), userEncode(bufname, message)));
emit putCmd("PRIVMSG", params);
}
void CtcpHandler::reply(const QString &bufname, const QString &ctcpTag, const QString &message) {
QList<QByteArray> params;
- params << serverEncode(bufname) << pack(serverEncode(ctcpTag), userEncode(bufname, message));
+ params << serverEncode(bufname) << lowLevelQuote(pack(serverEncode(ctcpTag), userEncode(bufname, message)));
emit putCmd("NOTICE", params);
}
Q_UNUSED(target)
if(ctcptype == CtcpQuery) {
reply(nickFromMask(prefix), "VERSION", QString("Quassel IRC %1 (built on %2) -- http://www.quassel-irc.org")
- .arg(Global::quasselVersion).arg(Global::quasselBuildDate));
+ .arg(Quassel::buildInfo().plainVersionString)
+ .arg(Quassel::buildInfo().buildDate));
emit displayMsg(Message::Server, BufferInfo::StatusBuffer, "", tr("Received CTCP VERSION request by %1").arg(prefix));
} else {
// display Version answer