+void CtcpParser::parse(IrcEventRawMessage *e, Message::Type messagetype)
+{
+ QByteArray ctcp;
+
+ //lowlevel message dequote
+ QByteArray dequotedMessage = lowLevelDequote(e->rawMessage());
+
+ CtcpEvent::CtcpType ctcptype = e->type() == EventManager::IrcEventRawNotice
+ ? CtcpEvent::Reply
+ : CtcpEvent::Query;
+
+ Message::Flags flags = (ctcptype == CtcpEvent::Reply && !e->network()->isChannelName(e->target()))
+ ? Message::Redirected
+ : Message::None;
+
+ QList<CtcpEvent *> ctcpEvents;
+ QUuid uuid; // needed to group all replies together
+
+ // extract tagged / extended data
+ int xdelimPos = -1;
+ int xdelimEndPos = -1;
+ int spacePos = -1;
+ while ((xdelimPos = dequotedMessage.indexOf(XDELIM)) != -1) {
+ if (xdelimPos > 0)
+ displayMsg(e, messagetype, targetDecode(e, dequotedMessage.left(xdelimPos)), e->prefix(), e->target(), flags);
+
+ xdelimEndPos = dequotedMessage.indexOf(XDELIM, xdelimPos + 1);
+ if (xdelimEndPos == -1) {
+ // no matching end delimiter found... treat rest of the message as ctcp
+ xdelimEndPos = dequotedMessage.count();
+ }
+ ctcp = xdelimDequote(dequotedMessage.mid(xdelimPos + 1, xdelimEndPos - xdelimPos - 1));
+ dequotedMessage = dequotedMessage.mid(xdelimEndPos + 1);