X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fcore%2Fserver.cpp;h=44d66ab59c9d708e291e2a9c76557b61c3100b6a;hp=39fcfb34591764a6fc8891590dc7de3e427d42b4;hb=cfbd7e0ec3624307cfb612fe4804d58c34b7eec9;hpb=0ac9ce4d7cf768d13993d6aa1d6b791c4149a843 diff --git a/src/core/server.cpp b/src/core/server.cpp index 39fcfb34..44d66ab5 100644 --- a/src/core/server.cpp +++ b/src/core/server.cpp @@ -36,10 +36,12 @@ Server::Server(UserId uid, QString net) : user(uid), network(net) { QString XQUOTE = QString('\134'); ctcpXDelimDequoteHash[XQUOTE + XQUOTE] = XQUOTE; ctcpXDelimDequoteHash[XQUOTE + QString('a')] = XDELIM; + + serverinfo = new ServerInfo(); } Server::~Server() { - + delete serverinfo; } void Server::run() { @@ -82,9 +84,9 @@ void Server::disconnectFromIrc(QString net) { void Server::socketHasData() { while(socket.canReadLine()) { - QString s = socket.readLine().trimmed(); + QByteArray s = socket.readLine().trimmed(); //qDebug() << "Read" << s; - emit recvRawServerMsg(s); + //emit recvRawServerMsg(s); // signal not needed, and we should make sure we consider encodings where we need them //Message *msg = Message::createFromServerString(this, s); handleServerMsg(s); } @@ -158,13 +160,24 @@ void Server::putCmd(QString cmd, QStringList params, QString prefix) { socket.write(m.toAscii()); } -/** Handle a raw message string sent by the server. We try to find a suitable handler, otherwise we call a default handler. */ -void Server::handleServerMsg(QString msg) { +/*! Handle a raw message string sent by the server. We try to find a suitable handler, otherwise we call a default handler. */ +void Server::handleServerMsg(QByteArray rawmsg) { try { - if(msg.isEmpty()) { + if(rawmsg.isEmpty()) { qWarning() << "Received empty string from server!"; return; } + // TODO Implement encoding conversion + /* At this point, we have a raw message as a byte array. This needs to be converted to a QString somewhere. + * Problem is, that at this point we don't know which encoding to use for the various parts of the message. + * This is something the command handler needs to take care of (e.g. PRIVMSG needs to first parse for CTCP, + * and then convert the raw strings into the correct encoding. + * We _can_ safely assume Server encoding for prefix and cmd, but not for the params. Therefore, we need to + * change from a QStringList to a QList in all the handlers, and have the handlers call decodeString + * where needed... + */ + QString msg = QString::fromLatin1(rawmsg); + // OK, first we split the raw message into its various parts... QString prefix = ""; QString cmd;