Changeset - ef1711db20b2
[Not reviewed]
0 4 0
Jan Kaluza - 10 years ago 2015-12-01 06:39:01
jkaluza@redhat.com
Send buddies to backend in new TYPE_BUDDIES message on login when features.send_buddies_on_login in backend config is set.
4 files changed with 48 insertions and 0 deletions:
0 comments (0 inline, 0 general)
include/transport/protocol.proto
Show inline comments
 
@@ -60,12 +60,16 @@ message Buddy {
 
	optional StatusType status = 5;
 
	optional string statusMessage = 6;
 
	optional string iconHash = 7;
 
	optional bool blocked = 8;
 
}
 

	
 
message Buddies {
 
	repeated Buddy buddy = 1;
 
}
 

	
 
message ConversationMessage {
 
	required string userName = 1;
 
	required string buddyName = 2;
 
	required string message = 3;
 
	optional string nickname = 4;
 
	optional string xhtml = 5;
 
@@ -179,11 +183,12 @@ message WrapperMessage {
 
		TYPE_EXIT					= 29;
 
		TYPE_BACKEND_CONFIG			= 30;
 
		TYPE_QUERY					= 31;
 
		TYPE_ROOM_LIST				= 32;
 
		TYPE_CONV_MESSAGE_ACK		= 33;
 
		TYPE_RAW_XML				= 34;
 
		TYPE_BUDDIES				= 35;
 
	}
 
	required Type type = 1;
 
	optional bytes payload = 2;
 
}
 
;
plugin/python/NetworkPlugin.py
Show inline comments
 
@@ -291,12 +291,20 @@ class NetworkPlugin:
 
		if (payload.ParseFromString(data) == False):
 
			#TODO: ERROR
 
			return
 
		groups = [g for g in payload.group]
 
		self.handleBuddyRemovedRequest(payload.userName, payload.buddyName, groups);
 

	
 
	def handleBuddiesPayload(self, data):
 
		payload = protocol_pb2.Buddies()
 
		if (payload.ParseFromString(data) == False):
 
			#TODO: ERROR
 
			return
 

	
 
		self.handleBuddies(payload);
 

	
 
	def handleChatStatePayload(self, data, msgType):
 
		payload = protocol_pb2.Buddy()
 
		if (payload.ParseFromString(data) == False):
 
			#TODO: ERROR
 
			return
 
		if msgType == protocol_pb2.WrapperMessage.TYPE_BUDDY_TYPING:
 
@@ -360,12 +368,14 @@ class NetworkPlugin:
 
			elif wrapper.type == protocol_pb2.WrapperMessage.TYPE_FT_PAUSE:
 
					self.handleFTPausePayload(wrapper.payload)
 
			elif wrapper.type == protocol_pb2.WrapperMessage.TYPE_FT_CONTINUE:
 
					self.handleFTContinuePayload(wrapper.payload)
 
			elif wrapper.type == protocol_pb2.WrapperMessage.TYPE_EXIT:
 
					self.handleExitRequest()
 
			elif wrapper.type == Protocol_pb2.WrapperMessage.TYPE_BUDDIES:
 
					self.handleBuddiesPayload()
 

	
 

	
 
	def send(self, data):
 
		header = struct.pack('!I',len(data))
 
		self.sendData(header + data)
 

	
 
@@ -421,12 +431,15 @@ class NetworkPlugin:
 
		#YourNetworkPlugin<-LegacyNetwork [label="disconnected"];
 
		#YourNetworkPlugin->NetworkPlugin [label="handleDisconnected()", URL="\ref NetworkPlugin::handleDisconnected()"];
 
		#\endmsc
 

	
 
		raise NotImplementedError, "Implement me"
 

	
 
	def handleBuddies(self, buddies):
 
		pass
 

	
 
	def handleLogoutRequest(self, user, legacyName):
 
		"""
 
		Called when XMPP user wants to disconnect legacy network.
 
		You should disconnect him from legacy network.
 
		@param user: XMPP JID of user for which this event occurs.
 
		@param legacyName: Legacy network name of this user used for login.
 
@@ -510,12 +523,13 @@ class NetworkPlugin:
 
	def handleFTPauseRequest(self, ftID):
 
		pass
 

	
 
	def handleFTContinueRequest(self, ftID):
 
		pass
 
	
 

	
 
	def handleMemoryUsage(self):
 
		return (0,0)
 

	
 
	def handleExitRequest(self):
 
		sys.exit(1)
 

	
src/Config.cpp
Show inline comments
 
@@ -316,12 +316,13 @@ void Config::updateBackendConfig(const std::string &backendConfig) {
 
		("registration.needRegistration", value<bool>()->default_value(false), "")
 
		("registration.extraField", value<std::vector<std::string> >()->multitoken(), "")
 
		("features.receipts", value<bool>()->default_value(false), "")
 
		("features.muc", value<bool>()->default_value(false), "")
 
		("features.rawxml", value<bool>()->default_value(false), "")
 
		("features.disable_jid_escaping", value<bool>()->default_value(false), "")
 
		("features.send_buddies_on_login", value<bool>()->default_value(false), "")
 
	;
 

	
 
	std::stringstream ifs(backendConfig);
 
	parsed_options parsed = parse_config_file(ifs, opts, true);
 

	
 
	store(parsed, m_backendConfig);
src/NetworkPluginServer.cpp
Show inline comments
 
@@ -1454,12 +1454,40 @@ void NetworkPluginServer::handleUserReadyToConnect(User *user) {
 

	
 
	Backend *c = (Backend *) user->getData();
 
	if (!c) {
 
		return;
 
	}
 
	send(c->connection, message);
 

	
 
	// Send buddies
 
	if (CONFIG_BOOL_DEFAULTED(m_config, "features.send_buddies_on_login", false)) {
 
		pbnetwork::Buddies buddies;
 

	
 
		const RosterManager::BuddiesMap &roster = user->getRosterManager()->getBuddies();
 
		for(RosterManager::BuddiesMap::const_iterator bt = roster.begin(); bt != roster.end(); bt++) {
 
			Buddy *b = (*bt).second;
 
			if (!b) {
 
				continue;
 
			}
 

	
 
			pbnetwork::Buddy *buddy = buddies.add_buddy();
 
			buddy->set_username(user->getJID().toBare());
 
			buddy->set_buddyname(b->getName());
 
			buddy->set_alias(b->getAlias());
 
			BOOST_FOREACH(const std::string &g, b->getGroups()) {
 
				buddy->add_group(g);
 
			}
 
			buddy->set_status(pbnetwork::STATUS_NONE);
 
		}
 

	
 
		std::string msg;
 
		buddies.SerializeToString(&msg);
 

	
 
		WRAP(msg, pbnetwork::WrapperMessage_Type_TYPE_BUDDIES);
 
		send(c->connection, msg);
 
	}
 
}
 

	
 
void NetworkPluginServer::handleUserPresenceChanged(User *user, Swift::Presence::ref presence) {
 
	if (presence->getShow() == Swift::StatusShow::None)
 
		return;
 

	
0 comments (0 inline, 0 general)