-rw-r--r-- | noncore/net/opieirc/ircmessageparser.cpp | 26 |
1 files changed, 15 insertions, 11 deletions
diff --git a/noncore/net/opieirc/ircmessageparser.cpp b/noncore/net/opieirc/ircmessageparser.cpp index d1b70a5..2b77414 100644 --- a/noncore/net/opieirc/ircmessageparser.cpp +++ b/noncore/net/opieirc/ircmessageparser.cpp | |||
@@ -32,12 +32,16 @@ IRCNumericalMessageParserStruct IRCMessageParser::numericalParserProcTable[] = { | |||
32 | { 1, FUNC(parseNumerical001) }, // RPL_WELCOME | 32 | { 1, FUNC(parseNumerical001) }, // RPL_WELCOME |
33 | { 2, FUNC(parseNumerical002) }, // RPL_YOURHOST | 33 | { 2, FUNC(parseNumerical002) }, // RPL_YOURHOST |
34 | { 3, FUNC(parseNumerical003) }, // RPL_CREATED | 34 | { 3, FUNC(parseNumerical003) }, // RPL_CREATED |
35 | { 4, FUNC(parseNumerical004) }, // RPL_MYINFO | 35 | { 4, FUNC(parseNumerical004) }, // RPL_MYINFO |
36 | { 5, FUNC(parseNumerical005) }, // RPL_BOUNCE, RPL_PROTOCTL | 36 | { 5, FUNC(parseNumerical005) }, // RPL_BOUNCE, RPL_PROTOCTL |
37 | { 251, FUNC(parseNumericalStats) }, // RPL_LUSERCLIENT | 37 | { 251, FUNC(parseNumericalStats) }, // RPL_LUSERCLIENT |
38 | { 252, FUNC(parseNumericalStats) }, // RPL_LUSEROP | ||
39 | { 265, FUNC(parseNumericalStats) }, // RPL_LOCALUSERS | ||
40 | { 266, FUNC(parseNumericalStats) }, // RPL_GLOBALUSERS | ||
41 | { 250, FUNC(parseNumericalStats) }, // RPL_STATSCONN | ||
38 | { 254, FUNC(nullFunc)}, // RPL_LUSERCHANNELS | 42 | { 254, FUNC(nullFunc)}, // RPL_LUSERCHANNELS |
39 | { 255, FUNC(parseNumericalStats) }, // RPL_LUSERNAME | 43 | { 255, FUNC(parseNumericalStats) }, // RPL_LUSERNAME |
40 | { 332, FUNC(parseNumericalTopic) }, // RPL_TOPIC | 44 | { 332, FUNC(parseNumericalTopic) }, // RPL_TOPIC |
41 | { 333, FUNC(parseNumericalTopicWhoTime) }, // RPL_TOPICWHOTIME | 45 | { 333, FUNC(parseNumericalTopicWhoTime) }, // RPL_TOPICWHOTIME |
42 | { 353, FUNC(parseNumericalNames) }, // RPL_NAMREPLY | 46 | { 353, FUNC(parseNumericalNames) }, // RPL_NAMREPLY |
43 | { 366, FUNC(parseNumericalEndOfNames) }, // RPL_ENDOFNAMES | 47 | { 366, FUNC(parseNumericalEndOfNames) }, // RPL_ENDOFNAMES |
@@ -97,13 +101,13 @@ void IRCMessageParser::parseLiteralPing(IRCMessage *message) { | |||
97 | 101 | ||
98 | void IRCMessageParser::parseLiteralNotice(IRCMessage *message) { | 102 | void IRCMessageParser::parseLiteralNotice(IRCMessage *message) { |
99 | emit outputReady(IRCOutput(OUTPUT_SERVERMESSAGE, message->allParameters())); | 103 | emit outputReady(IRCOutput(OUTPUT_SERVERMESSAGE, message->allParameters())); |
100 | } | 104 | } |
101 | 105 | ||
102 | void IRCMessageParser::parseLiteralJoin(IRCMessage *message) { | 106 | void IRCMessageParser::parseLiteralJoin(IRCMessage *message) { |
103 | QString channelName = message->param(0); | 107 | QString channelName = message->param(0).lower(); |
104 | IRCPerson mask(message->prefix()); | 108 | IRCPerson mask(message->prefix()); |
105 | IRCChannel *channel = m_session->getChannel(channelName); | 109 | IRCChannel *channel = m_session->getChannel(channelName); |
106 | if (!channel) { | 110 | if (!channel) { |
107 | /* We joined */ | 111 | /* We joined */ |
108 | if (mask.nick() == m_session->m_server->nick()) { | 112 | if (mask.nick() == m_session->m_server->nick()) { |
109 | channel = new IRCChannel(channelName); | 113 | channel = new IRCChannel(channelName); |
@@ -135,13 +139,13 @@ void IRCMessageParser::parseLiteralJoin(IRCMessage *message) { | |||
135 | emit outputReady(IRCOutput(OUTPUT_ERROR, tr("You already joined the channel - desynchronized?"))); | 139 | emit outputReady(IRCOutput(OUTPUT_ERROR, tr("You already joined the channel - desynchronized?"))); |
136 | } | 140 | } |
137 | } | 141 | } |
138 | } | 142 | } |
139 | 143 | ||
140 | void IRCMessageParser::parseLiteralPart(IRCMessage *message) { | 144 | void IRCMessageParser::parseLiteralPart(IRCMessage *message) { |
141 | QString channelName = message->param(0); | 145 | QString channelName = message->param(0).lower(); |
142 | IRCChannel *channel = m_session->getChannel(channelName); | 146 | IRCChannel *channel = m_session->getChannel(channelName); |
143 | IRCPerson mask(message->prefix()); | 147 | IRCPerson mask(message->prefix()); |
144 | if (channel) { | 148 | if (channel) { |
145 | if (mask.nick() == m_session->m_server->nick()) { | 149 | if (mask.nick() == m_session->m_server->nick()) { |
146 | m_session->removeChannel(channel); | 150 | m_session->removeChannel(channel); |
147 | IRCOutput output(OUTPUT_SELFPART, tr("You left channel ") + channelName); | 151 | IRCOutput output(OUTPUT_SELFPART, tr("You left channel ") + channelName); |
@@ -178,26 +182,26 @@ void IRCMessageParser::parseLiteralPrivMsg(IRCMessage *message) { | |||
178 | } | 182 | } |
179 | IRCOutput output(OUTPUT_QUERYPRIVMSG, message->param(1)); | 183 | IRCOutput output(OUTPUT_QUERYPRIVMSG, message->param(1)); |
180 | output.addParam(person); | 184 | output.addParam(person); |
181 | emit outputReady(output); | 185 | emit outputReady(output); |
182 | } else if (message->param(0).at(0) == '#') { | 186 | } else if (message->param(0).at(0) == '#') { |
183 | /* IRC Channel message detected, verify sender, channel and display it */ | 187 | /* IRC Channel message detected, verify sender, channel and display it */ |
184 | IRCChannel *channel = m_session->getChannel(message->param(0)); | 188 | IRCChannel *channel = m_session->getChannel(message->param(0).lower()); |
185 | if (channel) { | 189 | if (channel) { |
186 | IRCPerson mask(message->prefix()); | 190 | IRCPerson mask(message->prefix()); |
187 | IRCChannelPerson *person = channel->getPerson(mask.nick()); | 191 | IRCChannelPerson *person = channel->getPerson(mask.nick()); |
188 | if (person) { | 192 | if (person) { |
189 | IRCOutput output(OUTPUT_CHANPRIVMSG, message->param(1)); | 193 | IRCOutput output(OUTPUT_CHANPRIVMSG, message->param(1)); |
190 | output.addParam(channel); | 194 | output.addParam(channel); |
191 | output.addParam(person); | 195 | output.addParam(person); |
192 | emit outputReady(output); | 196 | emit outputReady(output); |
193 | } else { | 197 | } else { |
194 | emit outputReady(IRCOutput(OUTPUT_ERROR, tr("Channel message with unknown sender"))); | 198 | emit outputReady(IRCOutput(OUTPUT_ERROR, tr("Channel message with unknown sender"))); |
195 | } | 199 | } |
196 | } else { | 200 | } else { |
197 | emit outputReady(IRCOutput(OUTPUT_ERROR, tr("Channel message with unknown channel ") + message->param(0))); | 201 | emit outputReady(IRCOutput(OUTPUT_ERROR, tr("Channel message with unknown channel ") + message->param(0).lower())); |
198 | } | 202 | } |
199 | } else { | 203 | } else { |
200 | emit outputReady(IRCOutput(OUTPUT_ERROR, tr("Received PRIVMSG of unknown type"))); | 204 | emit outputReady(IRCOutput(OUTPUT_ERROR, tr("Received PRIVMSG of unknown type"))); |
201 | } | 205 | } |
202 | } | 206 | } |
203 | 207 | ||
@@ -244,13 +248,13 @@ void IRCMessageParser::parseLiteralQuit(IRCMessage *message) { | |||
244 | emit outputReady(IRCOutput(OUTPUT_ERROR, tr("Unknown person quit - desynchronized?"))); | 248 | emit outputReady(IRCOutput(OUTPUT_ERROR, tr("Unknown person quit - desynchronized?"))); |
245 | } | 249 | } |
246 | } | 250 | } |
247 | 251 | ||
248 | void IRCMessageParser::parseLiteralTopic(IRCMessage *message) { | 252 | void IRCMessageParser::parseLiteralTopic(IRCMessage *message) { |
249 | IRCPerson mask(message->prefix()); | 253 | IRCPerson mask(message->prefix()); |
250 | IRCChannel *channel = m_session->getChannel(message->param(0)); | 254 | IRCChannel *channel = m_session->getChannel(message->param(0).lower()); |
251 | if (channel) { | 255 | if (channel) { |
252 | IRCOutput output(OUTPUT_TOPIC, mask.nick() + tr(" changed topic to ") + "\"" + message->param(1) + "\""); | 256 | IRCOutput output(OUTPUT_TOPIC, mask.nick() + tr(" changed topic to ") + "\"" + message->param(1) + "\""); |
253 | output.addParam(channel); | 257 | output.addParam(channel); |
254 | emit outputReady(output); | 258 | emit outputReady(output); |
255 | } else { | 259 | } else { |
256 | emit outputReady(IRCOutput(OUTPUT_ERROR, tr("Unknown channel topic - desynchronized?"))); | 260 | emit outputReady(IRCOutput(OUTPUT_ERROR, tr("Unknown channel topic - desynchronized?"))); |
@@ -274,13 +278,13 @@ void IRCMessageParser::parseCTCPVersion(IRCMessage *message) { | |||
274 | } | 278 | } |
275 | 279 | ||
276 | void IRCMessageParser::parseCTCPAction(IRCMessage *message) { | 280 | void IRCMessageParser::parseCTCPAction(IRCMessage *message) { |
277 | IRCPerson mask(message->prefix()); | 281 | IRCPerson mask(message->prefix()); |
278 | QString dest = message->ctcpDestination(); | 282 | QString dest = message->ctcpDestination(); |
279 | if (dest.startsWith("#")) { | 283 | if (dest.startsWith("#")) { |
280 | IRCChannel *channel = m_session->getChannel(dest); | 284 | IRCChannel *channel = m_session->getChannel(dest.lower()); |
281 | if (channel) { | 285 | if (channel) { |
282 | IRCChannelPerson *person = channel->getPerson(mask.nick()); | 286 | IRCChannelPerson *person = channel->getPerson(mask.nick()); |
283 | if (person) { | 287 | if (person) { |
284 | IRCOutput output(OUTPUT_CHANACTION, "*" + mask.nick() + message->param(0)); | 288 | IRCOutput output(OUTPUT_CHANACTION, "*" + mask.nick() + message->param(0)); |
285 | output.addParam(channel); | 289 | output.addParam(channel); |
286 | output.addParam(person); | 290 | output.addParam(person); |
@@ -309,13 +313,13 @@ void IRCMessageParser::parseCTCPAction(IRCMessage *message) { | |||
309 | } | 313 | } |
310 | 314 | ||
311 | void IRCMessageParser::parseLiteralMode(IRCMessage *message) { | 315 | void IRCMessageParser::parseLiteralMode(IRCMessage *message) { |
312 | IRCPerson mask(message->prefix()); | 316 | IRCPerson mask(message->prefix()); |
313 | 317 | ||
314 | if (message->param(0).startsWith("#")) { | 318 | if (message->param(0).startsWith("#")) { |
315 | IRCChannel *channel = m_session->getChannel(message->param(0)); | 319 | IRCChannel *channel = m_session->getChannel(message->param(0).lower()); |
316 | if (channel) { | 320 | if (channel) { |
317 | QString temp, parameters = message->allParameters().right(message->allParameters().length() - channel->channelname().length() - 1); | 321 | QString temp, parameters = message->allParameters().right(message->allParameters().length() - channel->channelname().length() - 1); |
318 | QTextIStream stream(¶meters); | 322 | QTextIStream stream(¶meters); |
319 | bool set = FALSE; | 323 | bool set = FALSE; |
320 | while (!stream.atEnd()) { | 324 | while (!stream.atEnd()) { |
321 | stream >> temp; | 325 | stream >> temp; |
@@ -380,13 +384,13 @@ void IRCMessageParser::parseLiteralMode(IRCMessage *message) { | |||
380 | emit outputReady(IRCOutput(OUTPUT_ERROR, tr("User modes not supported yet"))); | 384 | emit outputReady(IRCOutput(OUTPUT_ERROR, tr("User modes not supported yet"))); |
381 | } | 385 | } |
382 | } | 386 | } |
383 | 387 | ||
384 | void IRCMessageParser::parseLiteralKick(IRCMessage *message) { | 388 | void IRCMessageParser::parseLiteralKick(IRCMessage *message) { |
385 | IRCPerson mask(message->prefix()); | 389 | IRCPerson mask(message->prefix()); |
386 | IRCChannel *channel = m_session->getChannel(message->param(0)); | 390 | IRCChannel *channel = m_session->getChannel(message->param(0).lower()); |
387 | if (channel) { | 391 | if (channel) { |
388 | IRCChannelPerson *person = channel->getPerson(message->param(1)); | 392 | IRCChannelPerson *person = channel->getPerson(message->param(1)); |
389 | if (person) { | 393 | if (person) { |
390 | if (person->person->nick() == m_session->m_server->nick()) { | 394 | if (person->person->nick() == m_session->m_server->nick()) { |
391 | m_session->removeChannel(channel); | 395 | m_session->removeChannel(channel); |
392 | IRCOutput output(OUTPUT_SELFKICK, tr("You were kicked from ") + channel->channelname() + tr(" by ") + mask.nick() + " (" + message->param(2) + ")"); | 396 | IRCOutput output(OUTPUT_SELFKICK, tr("You were kicked from ") + channel->channelname() + tr(" by ") + mask.nick() + " (" + message->param(2) + ")"); |
@@ -431,13 +435,13 @@ void IRCMessageParser::parseNumerical005(IRCMessage *message) { | |||
431 | void IRCMessageParser::parseNumericalStats(IRCMessage *message) { | 435 | void IRCMessageParser::parseNumericalStats(IRCMessage *message) { |
432 | emit outputReady(IRCOutput(OUTPUT_SERVERMESSAGE, message->param(1))); | 436 | emit outputReady(IRCOutput(OUTPUT_SERVERMESSAGE, message->param(1))); |
433 | } | 437 | } |
434 | 438 | ||
435 | void IRCMessageParser::parseNumericalNames(IRCMessage *message) { | 439 | void IRCMessageParser::parseNumericalNames(IRCMessage *message) { |
436 | /* Name list sent when joining a channel */ | 440 | /* Name list sent when joining a channel */ |
437 | IRCChannel *channel = m_session->getChannel(message->param(2)); | 441 | IRCChannel *channel = m_session->getChannel(message->param(2).lower()); |
438 | if (channel != 0) { | 442 | if (channel != 0) { |
439 | QString people = message->param(3); | 443 | QString people = message->param(3); |
440 | QTextIStream stream(&people); | 444 | QTextIStream stream(&people); |
441 | QString temp; | 445 | QString temp; |
442 | 446 | ||
443 | while (!stream.atEnd()) { | 447 | while (!stream.atEnd()) { |
@@ -475,13 +479,13 @@ void IRCMessageParser::parseNumericalNames(IRCMessage *message) { | |||
475 | emit outputReady(IRCOutput(OUTPUT_ERROR, tr("Server message with unknown channel"))); | 479 | emit outputReady(IRCOutput(OUTPUT_ERROR, tr("Server message with unknown channel"))); |
476 | } | 480 | } |
477 | } | 481 | } |
478 | 482 | ||
479 | void IRCMessageParser::parseNumericalEndOfNames(IRCMessage *message) { | 483 | void IRCMessageParser::parseNumericalEndOfNames(IRCMessage *message) { |
480 | /* Done syncing to channel */ | 484 | /* Done syncing to channel */ |
481 | IRCChannel *channel = m_session->getChannel(message->param(1)); | 485 | IRCChannel *channel = m_session->getChannel(message->param(1).lower()); |
482 | if (channel) { | 486 | if (channel) { |
483 | channel->setHasPeople(TRUE); | 487 | channel->setHasPeople(TRUE); |
484 | /* Yes, we want the names before anything happens inside the GUI */ | 488 | /* Yes, we want the names before anything happens inside the GUI */ |
485 | IRCOutput output(OUTPUT_SELFJOIN, tr("You joined channel ") + channel->channelname()); | 489 | IRCOutput output(OUTPUT_SELFJOIN, tr("You joined channel ") + channel->channelname()); |
486 | output.addParam(channel); | 490 | output.addParam(channel); |
487 | emit outputReady(output); | 491 | emit outputReady(output); |
@@ -498,13 +502,13 @@ void IRCMessageParser::parseNumericalNicknameInUse(IRCMessage *) { | |||
498 | 502 | ||
499 | void IRCMessageParser::parseNumericalNoSuchNick(IRCMessage *) { | 503 | void IRCMessageParser::parseNumericalNoSuchNick(IRCMessage *) { |
500 | emit outputReady(IRCOutput(OUTPUT_ERROR, tr("No such nickname"))); | 504 | emit outputReady(IRCOutput(OUTPUT_ERROR, tr("No such nickname"))); |
501 | } | 505 | } |
502 | 506 | ||
503 | void IRCMessageParser::parseNumericalTopic(IRCMessage *message) { | 507 | void IRCMessageParser::parseNumericalTopic(IRCMessage *message) { |
504 | IRCChannel *channel = m_session->getChannel(message->param(1)); | 508 | IRCChannel *channel = m_session->getChannel(message->param(1).lower()); |
505 | if (channel) { | 509 | if (channel) { |
506 | IRCOutput output(OUTPUT_TOPIC, tr("Topic for channel " + channel->channelname() + " is \"" + message->param(2) + "\"")); | 510 | IRCOutput output(OUTPUT_TOPIC, tr("Topic for channel " + channel->channelname() + " is \"" + message->param(2) + "\"")); |
507 | output.addParam(channel); | 511 | output.addParam(channel); |
508 | emit outputReady(output); | 512 | emit outputReady(output); |
509 | } else { | 513 | } else { |
510 | IRCOutput output(OUTPUT_TOPIC, tr("Topic for channel " + message->param(1) + " is \"" + message->param(2) + "\"")); | 514 | IRCOutput output(OUTPUT_TOPIC, tr("Topic for channel " + message->param(1) + " is \"" + message->param(2) + "\"")); |