Changeset - 0a33a3100eb9
backends/libircclient-qt/main.cpp
Show inline comments
 
@@ -28,7 +28,7 @@ class IRCNetworkPlugin : public NetworkPlugin {
 

	
 
		void handleLoginRequest(const std::string &user, const std::string &legacyName, const std::string &password) {
 
			Swift::JID jid(legacyName);
 
			MyIrcSession *session = new MyIrcSession();
 
			MyIrcSession *session = new MyIrcSession(user, this);
 
			session->setNick(QString::fromStdString(jid.getNode()));
 
			session->connectToServer(QString::fromStdString(jid.getDomain()), 6667);
 
			std::cout << "CONNECTING IRC NETWORK " << jid.getNode() << " " << jid.getDomain() << "\n";
backends/libircclient-qt/session.cpp
Show inline comments
 
@@ -12,8 +12,10 @@
 
#include <QtCore>
 
#include <iostream>
 

	
 
MyIrcSession::MyIrcSession(QObject* parent) : Irc::Session(parent)
 
MyIrcSession::MyIrcSession(const std::string &user, NetworkPlugin *np, QObject* parent) : Irc::Session(parent)
 
{
 
	this->np = np;
 
	this->user = user;
 
}
 

	
 
void MyIrcSession::on_connected()
 
@@ -38,12 +40,14 @@ void MyIrcSession::on_bufferRemoved(Irc::Buffer* buffer)
 

	
 
Irc::Buffer* MyIrcSession::createBuffer(const QString& receiver)
 
{
 
    return new MyIrcBuffer(receiver, this);
 
    return new MyIrcBuffer(receiver, user, np, this);
 
}
 

	
 
MyIrcBuffer::MyIrcBuffer(const QString& receiver, Irc::Session* parent)
 
MyIrcBuffer::MyIrcBuffer(const QString& receiver, const std::string &user, NetworkPlugin *np, Irc::Session* parent)
 
    : Irc::Buffer(receiver, parent)
 
{
 
	this->np = np;
 
	this->user = user;
 
    connect(this, SIGNAL(receiverChanged(QString)), SLOT(on_receiverChanged(QString)));
 
    connect(this, SIGNAL(joined(QString)), SLOT(on_joined(QString)));
 
    connect(this, SIGNAL(parted(QString, QString)), SLOT(on_parted(QString, QString)));
 
@@ -144,6 +148,16 @@ void MyIrcBuffer::on_ctcpActionReceived(const QString& origin, const QString& ac
 

	
 
void MyIrcBuffer::on_numericMessageReceived(const QString& origin, uint code, const QStringList& params)
 
{
 
	switch (code) {
 
		case 353:
 
			QString channel = params.value(2);
 
			QStringList members = params.value(3).split(" ");
 

	
 
			for (int i = 0; i < members.size(); i++) {
 
				np->handleParticipantChanged(user, members.at(i).toStdString(), channel.toStdString(), 0);
 
			}
 
			break;
 
	}
 
    qDebug() << "numeric message received:" << receiver() << origin << code << params;
 
}
 

	
backends/libircclient-qt/session.h
Show inline comments
 
@@ -13,13 +13,16 @@
 

	
 
#include <IrcSession>
 
#include <IrcBuffer>
 
#include <transport/networkplugin.h>
 

	
 
using namespace Transport;
 

	
 
class MyIrcSession : public Irc::Session
 
{
 
    Q_OBJECT
 

	
 
public:
 
    MyIrcSession(QObject* parent = 0);
 
    MyIrcSession(const std::string &user, NetworkPlugin *np, QObject* parent = 0);
 

	
 
protected Q_SLOTS:
 
    void on_connected();
 
@@ -29,6 +32,8 @@ protected Q_SLOTS:
 
    void on_bufferRemoved(Irc::Buffer* buffer);
 

	
 
protected:
 
	NetworkPlugin *np;
 
	std::string user;
 
    virtual Irc::Buffer* createBuffer(const QString& receiver);
 
};
 

	
 
@@ -37,7 +42,9 @@ class MyIrcBuffer : public Irc::Buffer
 
    Q_OBJECT
 

	
 
public:
 
    MyIrcBuffer(const QString& receiver, Irc::Session* parent);
 
    MyIrcBuffer(const QString& receiver, const std::string &user, NetworkPlugin *np, Irc::Session* parent);
 
	NetworkPlugin *np;
 
	std::string user;
 

	
 
protected Q_SLOTS:
 
    void on_receiverChanged(const QString& receiver);
cmake_modules/IRCClientQtConfig.cmake
Show inline comments
 
new file 100644
 
FIND_LIBRARY(IRC_LIBRARY NAMES ircclient-qt)
 
FIND_PATH(IRC_INCLUDE_DIR NAMES "ircglobal.h" PATH_SUFFIXES ircclient-qt )
 

	
 
# message( STATUS ${IRC_LIBRARY})
 
if( IRC_LIBRARY AND IRC_INCLUDE_DIR )
 
    message( STATUS "Found libircclient-qt: ${IRC_LIBRARY}, ${IRC_INCLUDE_DIR}")
 
    set( IRC_FOUND 1 )
 
else()
 
    message( STATUS "Could NOT find libircclient-qt" )
 
endif()
examples/external_network_plugin/CMakeLists.txt
Show inline comments
 
new file 100644
 
FILE(GLOB SRC *.cpp)
 
 
add_custom_command(
 
	OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/pbnetwork_pb2.py"
 
	COMMAND  ${PROTOBUF_PROTOC_EXECUTABLE}
 
	ARGS --python_out  ${CMAKE_CURRENT_BINARY_DIR} pbnetwork.proto
 
	COMMENT "Running Py protocol buffer compiler on pbnetwork.proto"
 
	VERBATIM )
 
 
ADD_EXECUTABLE(external_network_plugin ${SRC} ${CMAKE_CURRENT_BINARY_DIR}/pbnetwork_pb2.py)
 
 
TARGET_LINK_LIBRARIES(external_network_plugin transport ${SWIFTEN_LIBRARIES})
 
examples/external_network_plugin/main.cpp
Show inline comments
 
new file 100644
 
#include "transport/config.h"
 
#include "transport/transport.h"
 
#include "transport/usermanager.h"
 
#include "transport/logger.h"
 
#include "transport/sqlite3backend.h"
 
#include "transport/userregistration.h"
 
#include "transport/networkpluginserver.h"
 
#include "Swiften/EventLoop/SimpleEventLoop.h"
 
 
using namespace Transport;
 
 
int main(void)
 
{
 
	Config config;
 
	if (!config.load("sample.cfg")) {
 
		std::cout << "Can't open sample.cfg configuration file.\n";
 
		return 1;
 
	}
 
 
	Swift::SimpleEventLoop eventLoop;
 
	Component transport(&eventLoop, &config, NULL);
 
	Logger logger(&transport);
 
 
	SQLite3Backend sql(&config);
 
	logger.setStorageBackend(&sql);
 
	if (!sql.connect()) {
 
		std::cout << "Can't connect to database.\n";
 
	}
 
 
	UserManager userManager(&transport, &sql);
 
	UserRegistration userRegistration(&transport, &userManager, &sql);
 
	logger.setUserRegistration(&userRegistration);
 
	logger.setUserManager(&userManager);
 
 
	NetworkPluginServer plugin(&transport, &config, &userManager);
 
 
	transport.connect();
 
	eventLoop.run();
 
}
examples/external_network_plugin/pbnetwork.proto
Show inline comments
 
new file 100644
 
package pbnetwork;
 

	
 
message Connected {
 
	required string name = 1;
 
}
 

	
 
message Disconnected {
 
	required string name = 1;
 
	required int32 error = 2;
 
	optional string message = 3;
 
}
 

	
 
message Login {
 
	required string protocol = 1;
 
	required string legacyName = 2;
 
	required string password = 3;
 
}
 

	
 
message WrapperMessage {
 
	enum Type { 
 
		TYPE_CONNECTED 		= 1;
 
		TYPE_DISCONNECTED 	= 2;
 
		TYPE_LOGIN 			= 3;
 
		TYPE_LOGOUT 		= 4;
 
	}
 
	required Type type = 1;
 
	required bytes payload = 2;
 
}
 
;
 
\ No newline at end of file
examples/external_network_plugin/plugin.py
Show inline comments
 
new file 100644
 
#! /usr/bin/python
 

	
 
from pbnetwork_pb2 import *
 
import time
 
import sys
 
import socket
 
import struct
 

	
 

	
 
connected = Connected()
 
connected.name = "hanzz.k@gmail.com"
 

	
 
wrapper = WrapperMessage()
 
wrapper.type = WrapperMessage.TYPE_CONNECTED
 
wrapper.payload = connected.SerializeToString()
 

	
 
sck = socket.socket()
 
sck.connect(("localhost", 10000))
 

	
 
message = wrapper.SerializeToString();
 
header = struct.pack(">L", len(message))
 
print [header]
 
sck.send(header + message+header + message);
 
sck.send(header + message);
 
sck.send(header + message);
 
sck.send(header + message);
 
sck.send(header + message);
 

	
 
print sck.recv(255)
include/transport/conversation.h
Show inline comments
 
@@ -42,6 +42,10 @@ class Conversation {
 
		const std::string &getLegacyName() { return m_legacyName; }
 

	
 
		void handleMessage(boost::shared_ptr<Swift::Message> &message);
 
		void handleParticipantChanged(const std::string &nickname, int flag);
 
		void setNickname(const std::string &nickname) {
 
			m_nickname = nickname;
 
		}
 

	
 
		virtual void sendMessage(boost::shared_ptr<Swift::Message> &message) = 0;
 

	
 
@@ -52,6 +56,7 @@ class Conversation {
 
	private:
 
		ConversationManager *m_conversationManager;
 
		std::string m_legacyName;
 
		std::string m_nickname;
 
};
 

	
 
}
include/transport/networkplugin.h
Show inline comments
 
@@ -44,6 +44,8 @@ class NetworkPlugin {
 
			const std::string &groups, int status, const std::string &statusMessage = "", const std::string &iconHash = ""
 
		);
 

	
 
		void handleParticipantChanged(const std::string &user, const std::string &nickname, const std::string &room, int flags);
 

	
 
		void handleDisconnected(const std::string &user, const std::string &legacyName, int error, const std::string &message);
 

	
 
		void handleMessage(const std::string &user, const std::string &legacyName, const std::string &message);
include/transport/networkpluginserver.h
Show inline comments
 
@@ -55,6 +55,7 @@ class NetworkPluginServer {
 
		void handleDisconnectedPayload(const std::string &payload);
 
		void handleBuddyChangedPayload(const std::string &payload);
 
		void handleConvMessagePayload(const std::string &payload);
 
		void handleParticipantChangedPayload(const std::string &payload);
 

	
 
		void handleUserCreated(User *user);
 
		void handleRoomJoined(User *user, const std::string &room, const std::string &nickname, const std::string &password);
src/conversation.cpp
Show inline comments
 
@@ -38,17 +38,37 @@ Conversation::~Conversation() {
 
}
 

	
 
void Conversation::handleMessage(boost::shared_ptr<Swift::Message> &message) {
 
	message->setTo(m_conversationManager->getUser()->getJID().toBare());
 
	Buddy *buddy = m_conversationManager->getUser()->getRosterManager()->getBuddy(m_legacyName);
 
	if (buddy) {
 
		std::cout << m_legacyName << " 222222\n";
 
		message->setFrom(buddy->getJID());
 
	if (message->getType() != Swift::Message::Groupchat) {
 
		message->setTo(m_conversationManager->getUser()->getJID().toBare());
 
		Buddy *buddy = m_conversationManager->getUser()->getRosterManager()->getBuddy(m_legacyName);
 
		if (buddy) {
 
			std::cout << m_legacyName << " 222222\n";
 
			message->setFrom(buddy->getJID());
 
		}
 
		else {
 
			std::cout << m_legacyName << " 1111111\n";
 
			// TODO: escape from and setFrom
 
		}
 
		m_conversationManager->getComponent()->getStanzaChannel()->sendMessage(message);
 
	}
 
	else {
 
		std::cout << m_legacyName << " 1111111\n";
 
		// TODO: escape from and setFrom
 
}
 

	
 
void Conversation::handleParticipantChanged(const std::string &nickname, int flag) {
 
	Swift::Presence::ref presence = Swift::Presence::create();
 
 	presence->setFrom(Swift::JID(m_legacyName, m_conversationManager->getComponent()->getJID().toBare(), nickname));
 
	presence->setTo(m_conversationManager->getUser()->getJID().toString());
 
	presence->setType(Swift::Presence::Available);
 

	
 
	Swift::MUCUserPayload *p = new Swift::MUCUserPayload ();
 
	if (m_nickname == nickname) {
 
		Swift::MUCUserPayload::StatusCode c;
 
		c.code = 110;
 
		p->addStatusCode(c);
 
	}
 
	m_conversationManager->getComponent()->getStanzaChannel()->sendMessage(message);
 
	p->addItem(Swift::MUCUserPayload::Item(Swift::MUCOccupant::Member, Swift::MUCOccupant::Participant));
 

	
 
	presence->addPayload(boost::shared_ptr<Swift::Payload>(p));
 
	m_conversationManager->getComponent()->getStanzaChannel()->sendPresence(presence);
 
}
 

	
 
}
src/networkplugin.cpp
Show inline comments
 
@@ -104,6 +104,21 @@ void NetworkPlugin::handleDisconnected(const std::string &user, const std::strin
 
	send(message);
 
}
 

	
 
void NetworkPlugin::handleParticipantChanged(const std::string &user, const std::string &nickname, const std::string &room, int flags) {
 
	pbnetwork::Participant d;
 
	d.set_username(user);
 
	d.set_nickname(nickname);
 
	d.set_room(room);
 
	d.set_flag(flags);
 

	
 
	std::string message;
 
	d.SerializeToString(&message);
 

	
 
	WRAP(message, pbnetwork::WrapperMessage_Type_TYPE_PARTICIPANT_CHANGED);
 

	
 
	send(message);
 
}
 

	
 
void NetworkPlugin::handleConnected(bool error) {
 
	if (error) {
 
		std::cout << "Connecting error\n";
src/networkpluginserver.cpp
Show inline comments
 
@@ -194,6 +194,37 @@ void NetworkPluginServer::handleBuddyChangedPayload(const std::string &data) {
 
	}
 
}
 

	
 
void NetworkPluginServer::handleParticipantChangedPayload(const std::string &data) {
 
	pbnetwork::Participant payload;
 
	if (payload.ParseFromString(data) == false) {
 
		// TODO: ERROR
 
		return;
 
	}
 

	
 
	User *user = m_userManager->getUser(payload.username());
 
	if (!user)
 
		return;
 

	
 
	NetworkConversation *conv = (NetworkConversation *) user->getConversationManager()->getConversation(payload.room());
 
	if (!conv) {
 
		return;
 
	}
 

	
 
	conv->handleParticipantChanged(payload.nickname(), payload.flag());
 

	
 
// 	LocalBuddy *buddy = (LocalBuddy *) user->getRosterManager()->getBuddy(payload.buddyname());
 
// 	if (buddy) {
 
// 		handleBuddyPayload(buddy, payload);
 
// 		buddy->buddyChanged();
 
// 	}
 
// 	else {
 
// 		buddy = new LocalBuddy(user->getRosterManager(), -1);
 
// 		handleBuddyPayload(buddy, payload);
 
// 		user->getRosterManager()->setBuddy(buddy);
 
// 	}
 
	std::cout << payload.nickname() << "\n";
 
}
 

	
 
void NetworkPluginServer::handleConvMessagePayload(const std::string &data) {
 
	pbnetwork::ConversationMessage payload;
 
// 	std::cout << "payload...\n";
 
@@ -258,6 +289,9 @@ void NetworkPluginServer::handleDataRead(boost::shared_ptr<Swift::Connection> c,
 
			case pbnetwork::WrapperMessage_Type_TYPE_PONG:
 
				m_pongReceived = true;
 
				break;
 
			case pbnetwork::WrapperMessage_Type_TYPE_PARTICIPANT_CHANGED:
 
				handleParticipantChangedPayload(wrapper.payload());
 
				break;
 
			default:
 
				return;
 
		}
 
@@ -320,6 +354,10 @@ void NetworkPluginServer::handleRoomJoined(User *user, const std::string &r, con
 
	WRAP(message, pbnetwork::WrapperMessage_Type_TYPE_JOIN_ROOM);
 
 
 
	send(m_client, message);
 

	
 
	NetworkConversation *conv = new NetworkConversation(user->getConversationManager(), r);
 
	conv->onMessageToSend.connect(boost::bind(&NetworkPluginServer::handleMessageReceived, this, _1, _2));
 
	conv->setNickname(nickname);
 
}
 

	
 
void NetworkPluginServer::handleUserDestroyed(User *user) {
0 comments (0 inline, 0 general)