Cleanup libcommuni code a bit, fix the tests and PM receiving when it is initiated from IRC

This commit is contained in:
Jan Kaluza 2015-12-17 15:08:37 +01:00
parent efd14b776c
commit ba5c6ce41e
6 changed files with 104 additions and 95 deletions

View file

@ -29,27 +29,26 @@ DEFINE_LOGGER(logger, "IRCNetworkPlugin");
#define TO_UTF8(WHAT) std::string((WHAT).toUtf8().data(), (WHAT).toUtf8().size())
IRCNetworkPlugin::IRCNetworkPlugin(Config *config, Swift::QtEventLoop *loop, const std::string &host, int port) {
this->config = config;
m_config = config;
m_currentServer = 0;
m_firstPing = true;
m_socket = new QTcpSocket();
m_socket->connectToHost(FROM_UTF8(host), port);
connect(m_socket, SIGNAL(readyRead()), this, SLOT(readData()));
std::string server = CONFIG_STRING_DEFAULTED(config, "service.irc_server", "");
std::string server = CONFIG_STRING_DEFAULTED(m_config, "service.irc_server", "");
if (!server.empty()) {
m_servers.push_back(server);
}
else {
std::list<std::string> list;
list = CONFIG_LIST_DEFAULTED(config, "service.irc_server", list);
list = CONFIG_LIST_DEFAULTED(m_config, "service.irc_server", list);
m_servers.insert(m_servers.begin(), list.begin(), list.end());
}
if (CONFIG_HAS_KEY(config, "service.irc_identify")) {
m_identify = CONFIG_STRING(config, "service.irc_identify");
if (CONFIG_HAS_KEY(m_config, "service.irc_identify")) {
m_identify = CONFIG_STRING(m_config, "service.irc_identify");
}
else {
m_identify = "NickServ identify $name $password";
@ -71,12 +70,9 @@ void IRCNetworkPlugin::readData() {
if (m_firstPing) {
m_firstPing = false;
// Users can join the network without registering if we allow
// one user to connect multiple IRC networks.
NetworkPlugin::PluginConfig cfg;
// if (m_servers.empty()) {
cfg.setNeedRegistration(false);
// }
cfg.setNeedRegistration(false);
cfg.setSupportMUC(true);
cfg.disableJIDEscaping();
sendConfig(cfg);
@ -125,7 +121,7 @@ void IRCNetworkPlugin::handleLoginRequest(const std::string &user, const std::st
}
else {
// We are waiting for first room join to connect user to IRC network, because we don't know which
// network he choose...
// network he chooses...
LOG4CXX_INFO(logger, user << ": Ready for connections");
handleConnected(user);
}
@ -144,7 +140,7 @@ void IRCNetworkPlugin::handleLogoutRequest(const std::string &user, const std::s
std::string IRCNetworkPlugin::getSessionName(const std::string &user, const std::string &legacyName) {
std::string u = user;
if (!CONFIG_BOOL(config, "service.server_mode") && m_servers.empty()) {
if (!CONFIG_BOOL(m_config, "service.server_mode") && m_servers.empty()) {
u = user + legacyName.substr(legacyName.find("@") + 1);
if (u.find("/") != std::string::npos) {
u = u.substr(0, u.find("/"));
@ -155,14 +151,12 @@ std::string IRCNetworkPlugin::getSessionName(const std::string &user, const std:
std::string IRCNetworkPlugin::getTargetName(const std::string &legacyName) {
std::string r = legacyName;
// if (!CONFIG_BOOL(config, "service.server_mode")) {
if (legacyName.find("/") == std::string::npos) {
r = legacyName.substr(0, r.find("@"));
}
else {
r = legacyName.substr(legacyName.find("/") + 1);
}
// }
if (legacyName.find("/") == std::string::npos) {
r = legacyName.substr(0, r.find("@"));
}
else {
r = legacyName.substr(legacyName.find("/") + 1);
}
return r;
}
@ -173,7 +167,6 @@ void IRCNetworkPlugin::handleMessageSendRequest(const std::string &user, const s
return;
}
LOG4CXX_INFO(logger, user << ": XXX name: " << session << ", message to " << legacyName);
std::string target = getTargetName(legacyName);
// We are sending PM message. On XMPP side, user is sending PM using the particular channel,
// for example #room@irc.freenode.org/hanzz. On IRC side, we are forwarding this message
@ -234,6 +227,7 @@ void IRCNetworkPlugin::handleJoinRoomRequest(const std::string &user, const std:
m_sessions[session]->addAutoJoinChannel(target, password);
m_sessions[session]->sendCommand(IrcCommand::createJoin(FROM_UTF8(target), FROM_UTF8(password)));
m_sessions[session]->rooms += 1;
// update nickname, because we have nickname per session, no nickname per room.
handleRoomNicknameChanged(user, target, TO_UTF8(m_sessions[session]->nickName()));
}

View file

@ -19,6 +19,7 @@
*/
#pragma once
#ifndef Q_MOC_RUN
#include "transport/Config.h"
#include "transport/NetworkPlugin.h"
@ -58,7 +59,7 @@ class IRCNetworkPlugin : public QObject, public NetworkPlugin {
std::string getTargetName(const std::string &legacyName);
private:
Config *config;
Config *m_config;
QTcpSocket *m_socket;
std::map<std::string, MyIrcSession *> m_sessions;
std::vector<std::string> m_servers;

View file

@ -21,7 +21,6 @@
#include "transport/Config.h"
#include "transport/NetworkPlugin.h"
#include "transport/Logging.h"
#include "session.h"
#include <QtCore>
#include <QtNetwork>
#include "Swiften/EventLoop/Qt/QtEventLoop.h"

View file

@ -34,15 +34,16 @@
DEFINE_LOGGER(logger, "IRCConnection");
static bool sentList;
// static bool sentList;
MyIrcSession::MyIrcSession(const std::string &user, IRCNetworkPlugin *np, const std::string &suffix, QObject* parent) : IrcConnection(parent)
{
this->np = np;
this->user = user;
this->suffix = suffix;
m_np = np;
m_user = user;
m_suffix = suffix;
m_connected = false;
rooms = 0;
connect(this, SIGNAL(disconnected()), SLOT(on_disconnected()));
connect(this, SIGNAL(socketError(QAbstractSocket::SocketError)), SLOT(on_socketError(QAbstractSocket::SocketError)));
connect(this, SIGNAL(connected()), SLOT(on_connected()));
@ -59,8 +60,8 @@ MyIrcSession::~MyIrcSession() {
void MyIrcSession::on_connected() {
m_connected = true;
if (suffix.empty()) {
np->handleConnected(user);
if (m_suffix.empty()) {
m_np->handleConnected(m_user);
// if (!sentList) {
// sendCommand(IrcCommand::createList("", ""));
// sentList = true;
@ -76,13 +77,13 @@ void MyIrcSession::on_connected() {
if (getIdentify().find(" ") != std::string::npos) {
std::string to = getIdentify().substr(0, getIdentify().find(" "));
std::string what = getIdentify().substr(getIdentify().find(" ") + 1);
LOG4CXX_INFO(logger, user << ": Sending IDENTIFY message to " << to);
LOG4CXX_INFO(logger, m_user << ": Sending IDENTIFY message to " << to);
sendCommand(IrcCommand::createMessage(FROM_UTF8(to), FROM_UTF8(what)));
}
}
void MyIrcSession::addPM(const std::string &name, const std::string &room) {
LOG4CXX_INFO(logger, user << ": Adding PM " << name << " " << room);
LOG4CXX_INFO(logger, m_user << ": Adding PM conversation " << name << " " << room);
m_pms[name] = room;
}
@ -102,22 +103,22 @@ void MyIrcSession::on_socketError(QAbstractSocket::SocketError error) {
default: reason= "Unknown error."; break;
};
if (!suffix.empty()) {
if (!m_suffix.empty()) {
for(AutoJoinMap::iterator it = m_autoJoin.begin(); it != m_autoJoin.end(); it++) {
np->handleParticipantChanged(user, TO_UTF8(nickName()), it->second->getChannel() + suffix, pbnetwork::PARTICIPANT_FLAG_ROOM_NOT_FOUND, pbnetwork::STATUS_NONE, reason);
m_np->handleParticipantChanged(m_user, TO_UTF8(nickName()), it->second->getChannel() + m_suffix, pbnetwork::PARTICIPANT_FLAG_ROOM_NOT_FOUND, pbnetwork::STATUS_NONE, reason);
}
}
else {
np->handleDisconnected(user, 0, reason);
np->tryNextServer();
m_np->handleDisconnected(m_user, 0, reason);
m_np->tryNextServer();
}
m_connected = false;
}
void MyIrcSession::on_disconnected() {
if (suffix.empty()) {
np->handleDisconnected(user, 0, "");
np->tryNextServer();
if (m_suffix.empty()) {
m_np->handleDisconnected(m_user, 0, "");
m_np->tryNextServer();
}
m_connected = false;
}
@ -142,8 +143,8 @@ void MyIrcSession::on_joined(IrcMessage *message) {
std::string nickname = TO_UTF8(m->nick());
bool op = correctNickname(nickname);
getIRCBuddy(TO_UTF8(m->channel().toLower()), nickname).setOp(op);
np->handleParticipantChanged(user, nickname, TO_UTF8(m->channel().toLower()) + suffix, op, pbnetwork::STATUS_ONLINE);
LOG4CXX_INFO(logger, user << ": " << nickname << " joined " << TO_UTF8(m->channel().toLower()) + suffix);
m_np->handleParticipantChanged(m_user, nickname, TO_UTF8(m->channel().toLower()) + m_suffix, op, pbnetwork::STATUS_ONLINE);
LOG4CXX_INFO(logger, m_user << ": " << nickname << " joined " << TO_UTF8(m->channel().toLower()) + m_suffix);
}
@ -152,8 +153,8 @@ void MyIrcSession::on_parted(IrcMessage *message) {
std::string nickname = TO_UTF8(m->nick());
bool op = correctNickname(nickname);
removeIRCBuddy(TO_UTF8(m->channel().toLower()), nickname);
LOG4CXX_INFO(logger, user << ": " << nickname << " parted " << TO_UTF8(m->channel().toLower()) + suffix);
np->handleParticipantChanged(user, nickname, TO_UTF8(m->channel().toLower()) + suffix, op, pbnetwork::STATUS_NONE, TO_UTF8(m->reason()));
LOG4CXX_INFO(logger, m_user << ": " << nickname << " parted " << TO_UTF8(m->channel().toLower()) + m_suffix);
m_np->handleParticipantChanged(m_user, nickname, TO_UTF8(m->channel().toLower()) + m_suffix, op, pbnetwork::STATUS_NONE, TO_UTF8(m->reason()));
}
void MyIrcSession::on_quit(IrcMessage *message) {
@ -166,8 +167,8 @@ void MyIrcSession::on_quit(IrcMessage *message) {
continue;
}
removeIRCBuddy(it->second->getChannel(), nickname);
LOG4CXX_INFO(logger, user << ": " << nickname << " quit " << it->second->getChannel() + suffix);
np->handleParticipantChanged(user, nickname, it->second->getChannel() + suffix, op, pbnetwork::STATUS_NONE, TO_UTF8(m->reason()));
LOG4CXX_INFO(logger, m_user << ": " << nickname << " quit " << it->second->getChannel() + m_suffix);
m_np->handleParticipantChanged(m_user, nickname, it->second->getChannel() + m_suffix, op, pbnetwork::STATUS_NONE, TO_UTF8(m->reason()));
}
}
@ -181,8 +182,8 @@ void MyIrcSession::on_nickChanged(IrcMessage *message) {
continue;
}
IRCBuddy &buddy = getIRCBuddy(it->second->getChannel(), nickname);
LOG4CXX_INFO(logger, user << ": " << nickname << " changed nickname to " << TO_UTF8(m->nick()));
np->handleParticipantChanged(user, nickname, it->second->getChannel() + suffix,(int) buddy.isOp(), pbnetwork::STATUS_ONLINE, "", TO_UTF8(m->nick()));
LOG4CXX_INFO(logger, m_user << ": " << nickname << " changed nickname to " << TO_UTF8(m->nick()));
m_np->handleParticipantChanged(m_user, nickname, it->second->getChannel() + m_suffix,(int) buddy.isOp(), pbnetwork::STATUS_ONLINE, "", TO_UTF8(m->nick()));
}
}
@ -208,9 +209,9 @@ void MyIrcSession::on_modeChanged(IrcMessage *message) {
buddy.setOp(false);
}
np->handleParticipantChanged(user, nickname, TO_UTF8(m->target().toLower()) + suffix,(int) buddy.isOp(), pbnetwork::STATUS_ONLINE, "");
m_np->handleParticipantChanged(m_user, nickname, TO_UTF8(m->target().toLower()) + m_suffix,(int) buddy.isOp(), pbnetwork::STATUS_ONLINE, "");
LOG4CXX_INFO(logger, user << ": " << nickname << " changed mode to " << mode << " in " << TO_UTF8(m->target().toLower()));
LOG4CXX_INFO(logger, m_user << ": " << nickname << " changed mode to " << mode << " in " << TO_UTF8(m->target().toLower()));
}
void MyIrcSession::on_topicChanged(IrcMessage *message) {
@ -219,8 +220,8 @@ void MyIrcSession::on_topicChanged(IrcMessage *message) {
std::string nickname = TO_UTF8(m->nick());
correctNickname(nickname);
LOG4CXX_INFO(logger, user << ": " << nickname << " topic changed to " << TO_UTF8(m->topic()));
np->handleSubject(user, TO_UTF8(m->channel().toLower()) + suffix, TO_UTF8(m->topic()), nickname);
LOG4CXX_INFO(logger, m_user << ": " << nickname << " topic changed to " << TO_UTF8(m->topic()));
m_np->handleSubject(m_user, TO_UTF8(m->channel().toLower()) + m_suffix, TO_UTF8(m->topic()), nickname);
}
void MyIrcSession::on_messageReceived(IrcMessage *message) {
@ -228,7 +229,7 @@ void MyIrcSession::on_messageReceived(IrcMessage *message) {
if (m->isRequest()) {
QString request = m->content().split(" ", QString::SkipEmptyParts).value(0).toUpper();
if (request == "PING" || request == "TIME" || request == "VERSION") {
LOG4CXX_INFO(logger, user << ": " << TO_UTF8(request) << " received and has been answered");
LOG4CXX_INFO(logger, m_user << ": " << TO_UTF8(request) << " received and has been answered");
return;
}
}
@ -249,36 +250,39 @@ void MyIrcSession::on_messageReceived(IrcMessage *message) {
// }
std::string target = TO_UTF8(m->target().toLower());
LOG4CXX_INFO(logger, user << ": Message from " << target);
if (target.find("#") == 0) {
std::string nickname = TO_UTF8(m->nick());
correctNickname(nickname);
np->handleMessage(user, target + suffix, TO_UTF8(msg), nickname, TO_UTF8(html));
m_np->handleMessage(m_user, target + m_suffix, TO_UTF8(msg), nickname, TO_UTF8(html));
}
else {
std::string nickname = TO_UTF8(m->nick());
correctNickname(nickname);
LOG4CXX_INFO(logger, user << ": Corrected nickname " << nickname);
if (m_pms.find(nickname) != m_pms.end()) {
std::string room = m_pms[nickname].substr(0, m_pms[nickname].find("/"));
room = room.substr(0, room.find("@"));
if (hasIRCBuddy(room, nickname)) {
LOG4CXX_INFO(logger, nickname);
LOG4CXX_INFO(logger, room << " " << suffix);
np->handleMessage(user, room + suffix, TO_UTF8(msg), nickname, TO_UTF8(html), "", false, true);
m_np->handleMessage(m_user, room + m_suffix, TO_UTF8(msg), nickname, TO_UTF8(html), "", false, true);
return;
}
else {
LOG4CXX_INFO(logger, user << ": nickname not found " << nickname);
nickname = nickname + suffix;
nickname = nickname + m_suffix;
}
}
else {
nickname = nickname + suffix;
for (AutoJoinMap::iterator it = m_autoJoin.begin(); it != m_autoJoin.end(); it++) {
if (!hasIRCBuddy(it->second->getChannel(), nickname)) {
continue;
}
addPM(nickname, it->second->getChannel());
m_np->handleMessage(m_user, it->second->getChannel() + m_suffix, TO_UTF8(msg), nickname, TO_UTF8(html), "", false, true);
return;
}
nickname = nickname + m_suffix;
}
LOG4CXX_INFO(logger, nickname);
np->handleMessage(user, nickname, TO_UTF8(msg), "", TO_UTF8(html));
m_np->handleMessage(m_user, nickname, TO_UTF8(msg), "", TO_UTF8(html));
}
}
@ -306,7 +310,7 @@ void MyIrcSession::on_numericMessageReceived(IrcMessage *message) {
if (nick.find("/") != std::string::npos) {
nick = nick.substr(0, nick.find("/"));
}
np->handleSubject(user, TO_UTF8(parameters[1].toLower()) + suffix, m_topicData, nick);
m_np->handleSubject(m_user, TO_UTF8(parameters[1].toLower()) + m_suffix, m_topicData, nick);
break;
case 352: {
channel = parameters[1].toLower();
@ -316,12 +320,12 @@ void MyIrcSession::on_numericMessageReceived(IrcMessage *message) {
if (parameters[6].toUpper().startsWith("G")) {
if (!buddy.isAway()) {
buddy.setAway(true);
np->handleParticipantChanged(user, nick, TO_UTF8(channel) + suffix, buddy.isOp(), pbnetwork::STATUS_AWAY);
m_np->handleParticipantChanged(m_user, nick, TO_UTF8(channel) + m_suffix, buddy.isOp(), pbnetwork::STATUS_AWAY);
}
}
else if (buddy.isAway()) {
buddy.setAway(false);
np->handleParticipantChanged(user, nick, TO_UTF8(channel) + suffix, buddy.isOp(), pbnetwork::STATUS_ONLINE);
m_np->handleParticipantChanged(m_user, nick, TO_UTF8(channel) + m_suffix, buddy.isOp(), pbnetwork::STATUS_ONLINE);
}
break;
}
@ -329,45 +333,45 @@ void MyIrcSession::on_numericMessageReceived(IrcMessage *message) {
channel = parameters[2].toLower();
members = parameters[3].split(" ");
LOG4CXX_INFO(logger, user << ": Received members for " << TO_UTF8(channel) << suffix);
LOG4CXX_INFO(logger, m_user << ": Received members for " << TO_UTF8(channel) << m_suffix);
for (int i = 0; i < members.size(); i++) {
bool op = 0;
std::string nickname = TO_UTF8(members.at(i));
op = correctNickname(nickname);
IRCBuddy &buddy = getIRCBuddy(TO_UTF8(channel), nickname);
buddy.setOp(op);
np->handleParticipantChanged(user, nickname, TO_UTF8(channel) + suffix, buddy.isOp(), pbnetwork::STATUS_ONLINE);
m_np->handleParticipantChanged(m_user, nickname, TO_UTF8(channel) + m_suffix, buddy.isOp(), pbnetwork::STATUS_ONLINE);
}
break;
case 366:
// ask /who to get away states
channel = parameters[1].toLower();
LOG4CXX_INFO(logger, user << "Asking /who for channel " << TO_UTF8(channel));
LOG4CXX_INFO(logger, m_user << "Asking /who for channel " << TO_UTF8(channel));
sendCommand(IrcCommand::createWho(channel));
break;
case 432:
np->handleDisconnected(user, pbnetwork::CONNECTION_ERROR_INVALID_USERNAME, "Erroneous Nickname");
m_np->handleDisconnected(m_user, pbnetwork::CONNECTION_ERROR_INVALID_USERNAME, "Erroneous Nickname");
break;
case 433:
for(AutoJoinMap::iterator it = m_autoJoin.begin(); it != m_autoJoin.end(); it++) {
np->handleParticipantChanged(user, TO_UTF8(nickName()), it->second->getChannel() + suffix, pbnetwork::PARTICIPANT_FLAG_CONFLICT);
m_np->handleParticipantChanged(m_user, TO_UTF8(nickName()), it->second->getChannel() + m_suffix, pbnetwork::PARTICIPANT_FLAG_CONFLICT);
}
if (suffix.empty()) {
np->handleDisconnected(user, pbnetwork::CONNECTION_ERROR_INVALID_USERNAME, "Nickname is already in use");
if (m_suffix.empty()) {
m_np->handleDisconnected(m_user, pbnetwork::CONNECTION_ERROR_INVALID_USERNAME, "Nickname is already in use");
}
break;
case 436:
for(AutoJoinMap::iterator it = m_autoJoin.begin(); it != m_autoJoin.end(); it++) {
np->handleParticipantChanged(user, TO_UTF8(nickName()), it->second->getChannel() + suffix, pbnetwork::PARTICIPANT_FLAG_CONFLICT);
m_np->handleParticipantChanged(m_user, TO_UTF8(nickName()), it->second->getChannel() + m_suffix, pbnetwork::PARTICIPANT_FLAG_CONFLICT);
}
np->handleDisconnected(user, pbnetwork::CONNECTION_ERROR_INVALID_USERNAME, "Nickname collision KILL");
m_np->handleDisconnected(m_user, pbnetwork::CONNECTION_ERROR_INVALID_USERNAME, "Nickname collision KILL");
case 464:
for(AutoJoinMap::iterator it = m_autoJoin.begin(); it != m_autoJoin.end(); it++) {
np->handleParticipantChanged(user, TO_UTF8(nickName()), it->second->getChannel() + suffix, pbnetwork::PARTICIPANT_FLAG_NOT_AUTHORIZED);
m_np->handleParticipantChanged(m_user, TO_UTF8(nickName()), it->second->getChannel() + m_suffix, pbnetwork::PARTICIPANT_FLAG_NOT_AUTHORIZED);
}
if (suffix.empty()) {
np->handleDisconnected(user, pbnetwork::CONNECTION_ERROR_INVALID_USERNAME, "Password incorrect");
if (m_suffix.empty()) {
m_np->handleDisconnected(m_user, pbnetwork::CONNECTION_ERROR_INVALID_USERNAME, "Password incorrect");
}
case 321:
m_rooms.clear();
@ -378,14 +382,14 @@ void MyIrcSession::on_numericMessageReceived(IrcMessage *message) {
m_names.push_back(TO_UTF8(parameters[1]));
break;
case 323:
np->handleRoomList("", m_rooms, m_names);
m_np->handleRoomList("", m_rooms, m_names);
break;
default:
break;
}
if (m->code() >= 400 && m->code() < 500) {
LOG4CXX_INFO(logger, user << ": Error message received: " << message->toData().data());
LOG4CXX_INFO(logger, m_user << ": Error message received: " << message->toData().data());
}
}
@ -400,7 +404,7 @@ void MyIrcSession::awayTimeout() {
void MyIrcSession::on_noticeMessageReceived(IrcMessage *message) {
IrcNoticeMessage *m = (IrcNoticeMessage *) message;
LOG4CXX_INFO(logger, user << ": NOTICE " << TO_UTF8(m->content()));
LOG4CXX_INFO(logger, m_user << ": NOTICE " << TO_UTF8(m->content()));
QString msg = m->content();
CommuniBackport::toPlainText(msg);
@ -409,7 +413,7 @@ void MyIrcSession::on_noticeMessageReceived(IrcMessage *message) {
if (target.find("#") == 0) {
std::string nickname = TO_UTF8(m->nick());
correctNickname(nickname);
np->handleMessage(user, target + suffix, TO_UTF8(msg), nickname);
m_np->handleMessage(m_user, target + m_suffix, TO_UTF8(msg), nickname);
}
else {
std::string nickname = TO_UTF8(m->nick());
@ -418,26 +422,26 @@ void MyIrcSession::on_noticeMessageReceived(IrcMessage *message) {
return;
}
if (m_pms.find(nickname) != m_pms.end()) {
if (hasIRCBuddy(m_pms[nickname], nickname)) {
LOG4CXX_INFO(logger, nickname);
np->handleMessage(user, m_pms[nickname] + suffix, TO_UTF8(msg), nickname, "", "", false, true);
std::string room = m_pms[nickname].substr(0, m_pms[nickname].find("/"));
room = room.substr(0, room.find("@"));
if (hasIRCBuddy(room, nickname)) {
m_np->handleMessage(m_user, room + m_suffix, TO_UTF8(msg), nickname, "", "", false, true);
return;
}
else {
nickname = nickname + suffix;
nickname = nickname + m_suffix;
}
}
else {
nickname = nickname + suffix;
nickname = nickname + m_suffix;
}
LOG4CXX_INFO(logger, nickname);
np->handleMessage(user, nickname, TO_UTF8(msg), "");
m_np->handleMessage(m_user, nickname, TO_UTF8(msg), "");
}
}
void MyIrcSession::onMessageReceived(IrcMessage *message) {
// LOG4CXX_INFO(logger, user << ": " << TO_UTF8(message->toString()));
switch (message->type()) {
case IrcMessage::Join:
on_joined(message);

View file

@ -133,7 +133,6 @@ public:
void on_numericMessageReceived(IrcMessage *message);
void on_noticeMessageReceived(IrcMessage *message);
std::string suffix;
int rooms;
protected Q_SLOTS:
@ -145,8 +144,8 @@ protected Q_SLOTS:
void awayTimeout();
protected:
IRCNetworkPlugin *np;
std::string user;
IRCNetworkPlugin *m_np;
std::string m_user;
std::string m_identify;
AutoJoinMap m_autoJoin;
std::string m_topicData;
@ -156,6 +155,7 @@ protected:
std::map<std::string, std::string> m_pms;
IRCBuddyMap m_buddies;
QTimer *m_awayTimer;
std::string m_suffix;
};
#endif // SESSION_H

View file

@ -19,9 +19,16 @@ class Responder(sleekxmpp.ClientXMPP):
self.tests = {}
def message(self, msg):
if msg['body'] == "abc" and msg['from'] == self.room + "/client":
self.send_message(mto=self.room + "/client",
mbody="echo %s" % msg['body'],
mtype='chat')
elif msg['body'] == "def" and msg['from'] == self.room + "/client":
self.send_message(mto=self.room + "/client",
mbody="echo %s" % msg['body'],
mtype='chat')
else:
self.finished = True
def start(self, event):
self.plugin['xep_0045'].joinMUC(self.room, self.nick, wait=True)
@ -36,11 +43,15 @@ class Client(sleekxmpp.ClientXMPP):
self.finished = False
self.tests = {}
self.tests["echo_received"] = ["libcommuni: Send and receive private messages", False]
self.tests["echo1_received"] = ["libcommuni: Send and receive private messages - 1st msg", False]
self.tests["echo2_received"] = ["libcommuni: Send and receive private messages - 2nd msg", False]
def message(self, msg):
if msg['body'] == "echo abc" and msg['from'] == self.room + "/responder":
self.tests["echo_received"][1] = True
self.tests["echo1_received"][1] = True
self.send_message(mto=self.room + "/responder", mbody="def", mtype='chat')
elif msg['body'] == "echo def" and msg['from'] == self.room + "/responder":
self.tests["echo2_received"][1] = True
self.finished = True
def start(self, event):