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:
parent
29523bdabd
commit
ef1711db20
4 changed files with 48 additions and 0 deletions
|
@ -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;
|
||||||
|
|
|
@ -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.
|
||||||
|
@ -513,6 +526,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)
|
||||||
|
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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) {
|
||||||
|
|
Loading…
Add table
Reference in a new issue