Send buddies to backend in new TYPE_BUDDIES message on login when features.send_buddies_on_login in backend config is set.

This commit is contained in:
Jan Kaluza 2015-12-01 06:39:01 +01:00
parent 29523bdabd
commit ef1711db20
4 changed files with 48 additions and 0 deletions

View file

@ -63,6 +63,10 @@ message Buddy {
optional bool blocked = 8; optional bool blocked = 8;
} }
message Buddies {
repeated Buddy buddy = 1;
}
message ConversationMessage { message ConversationMessage {
required string userName = 1; required string userName = 1;
required string buddyName = 2; required string buddyName = 2;
@ -182,6 +186,7 @@ message WrapperMessage {
TYPE_ROOM_LIST = 32; TYPE_ROOM_LIST = 32;
TYPE_CONV_MESSAGE_ACK = 33; TYPE_CONV_MESSAGE_ACK = 33;
TYPE_RAW_XML = 34; TYPE_RAW_XML = 34;
TYPE_BUDDIES = 35;
} }
required Type type = 1; required Type type = 1;
optional bytes payload = 2; optional bytes payload = 2;

View file

@ -294,6 +294,14 @@ class NetworkPlugin:
groups = [g for g in payload.group] groups = [g for g in payload.group]
self.handleBuddyRemovedRequest(payload.userName, payload.buddyName, groups); 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): def handleChatStatePayload(self, data, msgType):
payload = protocol_pb2.Buddy() payload = protocol_pb2.Buddy()
if (payload.ParseFromString(data) == False): if (payload.ParseFromString(data) == False):
@ -363,6 +371,8 @@ class NetworkPlugin:
self.handleFTContinuePayload(wrapper.payload) self.handleFTContinuePayload(wrapper.payload)
elif wrapper.type == protocol_pb2.WrapperMessage.TYPE_EXIT: elif wrapper.type == protocol_pb2.WrapperMessage.TYPE_EXIT:
self.handleExitRequest() self.handleExitRequest()
elif wrapper.type == Protocol_pb2.WrapperMessage.TYPE_BUDDIES:
self.handleBuddiesPayload()
def send(self, data): def send(self, data):
@ -424,6 +434,9 @@ class NetworkPlugin:
raise NotImplementedError, "Implement me" raise NotImplementedError, "Implement me"
def handleBuddies(self, buddies):
pass
def handleLogoutRequest(self, user, legacyName): def handleLogoutRequest(self, user, legacyName):
""" """
Called when XMPP user wants to disconnect legacy network. Called when XMPP user wants to disconnect legacy network.
@ -512,6 +525,7 @@ class NetworkPlugin:
def handleFTContinueRequest(self, ftID): def handleFTContinueRequest(self, ftID):
pass pass
def handleMemoryUsage(self): def handleMemoryUsage(self):
return (0,0) return (0,0)

View file

@ -319,6 +319,7 @@ void Config::updateBackendConfig(const std::string &backendConfig) {
("features.muc", value<bool>()->default_value(false), "") ("features.muc", value<bool>()->default_value(false), "")
("features.rawxml", value<bool>()->default_value(false), "") ("features.rawxml", value<bool>()->default_value(false), "")
("features.disable_jid_escaping", 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); std::stringstream ifs(backendConfig);

View file

@ -1457,6 +1457,34 @@ void NetworkPluginServer::handleUserReadyToConnect(User *user) {
return; return;
} }
send(c->connection, message); 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) { void NetworkPluginServer::handleUserPresenceChanged(User *user, Swift::Presence::ref presence) {