Changeset - 22679e921b90
[Not reviewed]
0 8 0
Jan Kaluza - 13 years ago 2012-10-15 16:25:36
hanzz.k@gmail.com
add RoomList support to libtransport, so backends can send list of available rooms
8 files changed with 70 insertions and 7 deletions:
0 comments (0 inline, 0 general)
include/transport/discoitemsresponder.h
Show inline comments
 
@@ -37,12 +37,17 @@ class DiscoItemsResponder : public Swift::GetResponder<Swift::DiscoItems> {
 
		void addAdHocCommand(const std::string &node, const std::string &name);
 
// 		void removeAdHocCommand(const std::string &node);
 

	
 
		void addRoom(const std::string &node, const std::string &name);
 
		void clearRooms();
 

	
 

	
 
	private:
 
		virtual bool handleGetRequest(const Swift::JID& from, const Swift::JID& to, const std::string& id, boost::shared_ptr<Swift::DiscoItems> payload);
 

	
 
	private:
 
		Component *m_component;
 
		boost::shared_ptr<Swift::DiscoItems> m_commands;
 
		boost::shared_ptr<Swift::DiscoItems> m_rooms;
 
};
 

	
 
}
 
\ No newline at end of file
include/transport/networkplugin.h
Show inline comments
 
@@ -24,6 +24,7 @@
 
#include "transport/protocol.pb.h"
 
// #include "conversation.h"
 
#include <iostream>
 
#include <list>
 

	
 
namespace Transport {
 

	
 
@@ -164,6 +165,8 @@ class NetworkPlugin {
 

	
 
		void handleFTData(unsigned long ftID, const std::string &data);
 

	
 
		void handleRoomList(const std::string &user, const std::list<std::string> &rooms, const std::list<std::string> &names);
 

	
 
		/// Called when XMPP user wants to connect legacy network.
 
		/// You should connect him to legacy network and call handleConnected or handleDisconnected function later.
 
		/// \param user XMPP JID of user for which this event occurs.
include/transport/networkpluginserver.h
Show inline comments
 
@@ -43,6 +43,7 @@ class RosterResponder;
 
class BlockResponder;
 
class DummyReadBytestream;
 
class AdminInterface;
 
class DiscoItemsResponder;
 

	
 
class NetworkPluginServer {
 
	public:
 
@@ -60,7 +61,7 @@ class NetworkPluginServer {
 
			std::string id;
 
		};
 

	
 
		NetworkPluginServer(Component *component, Config *config, UserManager *userManager, FileTransferManager *ftManager);
 
		NetworkPluginServer(Component *component, Config *config, UserManager *userManager, FileTransferManager *ftManager, DiscoItemsResponder *discoItemsResponder);
 

	
 
		virtual ~NetworkPluginServer();
 

	
 
@@ -109,6 +110,7 @@ class NetworkPluginServer {
 
		void handleFTDataPayload(Backend *b, const std::string &payload);
 
		void handleQueryPayload(Backend *b, const std::string &payload);
 
		void handleBackendConfigPayload(const std::string &payload);
 
		void handleRoomListPayload(const std::string &payload);
 

	
 
		void handleUserCreated(User *user);
 
		void handleRoomJoined(User *user, const Swift::JID &who, const std::string &room, const std::string &nickname, const std::string &password);
 
@@ -154,6 +156,7 @@ class NetworkPluginServer {
 
		std::vector<std::string> m_crashedBackends;
 
		AdminInterface *m_adminInterface;
 
		bool m_startingBackend;
 
		DiscoItemsResponder *m_discoItemsResponder;
 
};
 

	
 
}
include/transport/protocol.proto
Show inline comments
 
@@ -78,6 +78,11 @@ message Room {
 
	optional string password = 4;
 
}
 

	
 
message RoomList {
 
	repeated string room = 1;
 
	repeated string name = 2;
 
}
 

	
 
message Participant {
 
	required string userName = 1;
 
	required string room = 2;
 
@@ -159,6 +164,7 @@ message WrapperMessage {
 
		TYPE_EXIT					= 29;
 
		TYPE_BACKEND_CONFIG			= 30;
 
		TYPE_QUERY					= 31;
 
		TYPE_ROOM_LIST				= 32;
 
	}
 
	required Type type = 1;
 
	optional bytes payload = 2;
plugin/cpp/networkplugin.cpp
Show inline comments
 
@@ -336,6 +336,24 @@ void NetworkPlugin::handleFTData(unsigned long ftID, const std::string &data) {
 
	send(message);
 
}
 

	
 
void NetworkPlugin::handleRoomList(const std::string &user, const std::list<std::string> &rooms, const std::list<std::string> &names) {
 
	pbnetwork::RoomList d;
 
	for (std::list<std::string>::const_iterator it = rooms.begin(); it != rooms.end(); it++) {
 
		d.add_room(*it);
 
	}
 

	
 
	for (std::list<std::string>::const_iterator it = names.begin(); it != names.end(); it++) {
 
		d.add_name(*it);
 
	}
 

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

	
 
	WRAP(message, pbnetwork::WrapperMessage_Type_TYPE_ROOM_LIST);
 
 
 
	send(message);
 
}
 

	
 
void NetworkPlugin::handleLoginPayload(const std::string &data) {
 
	pbnetwork::Login payload;
 
	if (payload.ParseFromString(data) == false) {
spectrum/src/main.cpp
Show inline comments
 
@@ -398,7 +398,10 @@ int main(int argc, char **argv)
 

	
 
	FileTransferManager ftManager(&transport, &userManager);
 

	
 
	NetworkPluginServer plugin(&transport, &config, &userManager, &ftManager);
 
	DiscoItemsResponder discoItemsResponder(&transport);
 
	discoItemsResponder.start();
 

	
 
	NetworkPluginServer plugin(&transport, &config, &userManager, &ftManager, &discoItemsResponder);
 

	
 
	AdminInterface adminInterface(&transport, &userManager, &plugin, storageBackend, userRegistration);
 
	plugin.setAdminInterface(&adminInterface);
 
@@ -409,9 +412,6 @@ int main(int argc, char **argv)
 
	GatewayResponder gatewayResponder(transport.getIQRouter(), &userManager);
 
	gatewayResponder.start();
 

	
 
	DiscoItemsResponder discoItemsResponder(&transport);
 
	discoItemsResponder.start();
 

	
 
	AdHocManager adhocmanager(&transport, &discoItemsResponder, &userManager, storageBackend);
 
	adhocmanager.start();
 

	
src/discoitemsresponder.cpp
Show inline comments
 
@@ -38,6 +38,8 @@ DiscoItemsResponder::DiscoItemsResponder(Component *component) : Swift::GetRespo
 
	m_component = component;
 
	m_commands = boost::shared_ptr<DiscoItems>(new DiscoItems());
 
	m_commands->setNode("http://jabber.org/protocol/commands");
 

	
 
	m_rooms = boost::shared_ptr<DiscoItems>(new DiscoItems());
 
}
 

	
 
DiscoItemsResponder::~DiscoItemsResponder() {
 
@@ -48,6 +50,14 @@ void DiscoItemsResponder::addAdHocCommand(const std::string &node, const std::st
 
	m_commands->addItem(DiscoItems::Item(name, m_component->getJID(), node));
 
}
 

	
 
void DiscoItemsResponder::addRoom(const std::string &node, const std::string &name) {
 
	m_rooms->addItem(DiscoItems::Item(name, m_component->getJID(), node));
 
}
 

	
 
void DiscoItemsResponder::clearRooms() {
 
	m_rooms = boost::shared_ptr<DiscoItems>(new DiscoItems());
 
}
 

	
 

	
 
bool DiscoItemsResponder::handleGetRequest(const Swift::JID& from, const Swift::JID& to, const std::string& id, boost::shared_ptr<Swift::DiscoItems> info) {
 
	LOG4CXX_INFO(logger, "get request received with node " << info->getNode());
 
@@ -55,7 +65,7 @@ bool DiscoItemsResponder::handleGetRequest(const Swift::JID& from, const Swift::
 
		sendResponse(from, id, m_commands);
 
	}
 
	else if (to.getNode().empty()) {
 
		sendResponse(from, id, boost::shared_ptr<DiscoItems>(new DiscoItems()));
 
		sendResponse(from, id, m_rooms);
 
	}
 
	else {
 
		sendResponse(from, id, boost::shared_ptr<DiscoItems>(new DiscoItems()));
src/networkpluginserver.cpp
Show inline comments
 
@@ -44,6 +44,7 @@
 
#include "Swiften/Elements/SpectrumErrorPayload.h"
 
#include "transport/protocol.pb.h"
 
#include "transport/util.h"
 
#include "transport/discoitemsresponder.h"
 

	
 
#include "utf8.h"
 

	
 
@@ -244,7 +245,7 @@ static void handleBuddyPayload(LocalBuddy *buddy, const pbnetwork::Buddy &payloa
 
	buddy->setBlocked(payload.blocked());
 
}
 

	
 
NetworkPluginServer::NetworkPluginServer(Component *component, Config *config, UserManager *userManager, FileTransferManager *ftManager) {
 
NetworkPluginServer::NetworkPluginServer(Component *component, Config *config, UserManager *userManager, FileTransferManager *ftManager, DiscoItemsResponder *discoItemsResponder) {
 
	m_ftManager = ftManager;
 
	m_userManager = userManager;
 
	m_config = config;
 
@@ -252,6 +253,7 @@ NetworkPluginServer::NetworkPluginServer(Component *component, Config *config, U
 
	m_isNextLongRun = false;
 
	m_adminInterface = NULL;
 
	m_startingBackend = false;
 
	m_discoItemsResponder = discoItemsResponder;
 
	m_component->m_factory = new NetworkFactory(this);
 
	m_userManager->onUserCreated.connect(boost::bind(&NetworkPluginServer::handleUserCreated, this, _1));
 
	m_userManager->onUserDestroyed.connect(boost::bind(&NetworkPluginServer::handleUserDestroyed, this, _1));
 
@@ -850,6 +852,19 @@ void NetworkPluginServer::handleBackendConfigPayload(const std::string &data) {
 
	m_config->updateBackendConfig(payload.config());
 
}
 

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

	
 
	m_discoItemsResponder->clearRooms();
 
	for (int i = 0; i < payload.room_size() && i < payload.name_size(); i++) {
 
		m_discoItemsResponder->addRoom(payload.room(i), payload.name(i));
 
	}
 
}
 

	
 
void NetworkPluginServer::handleDataRead(Backend *c, boost::shared_ptr<Swift::SafeByteArray> data) {
 
	// Append data to buffer
 
	c->data.insert(c->data.end(), data->begin(), data->end());
 
@@ -947,6 +962,9 @@ void NetworkPluginServer::handleDataRead(Backend *c, boost::shared_ptr<Swift::Sa
 
			case pbnetwork::WrapperMessage_Type_TYPE_BACKEND_CONFIG:
 
				handleBackendConfigPayload(wrapper.payload());
 
				break;
 
			case pbnetwork::WrapperMessage_Type_TYPE_ROOM_LIST:
 
				handleRoomListPayload(wrapper.payload());
 
				break;
 
			default:
 
				return;
 
		}
0 comments (0 inline, 0 general)