Changeset - 4ea0afca8c48
[Not reviewed]
0 6 0
HanzZ - 13 years ago 2012-08-02 07:47:18
hanzz.k@gmail.com
Handle non-valid names from legacy network. Wait for instance to stop before stopping another one
6 files changed with 45 insertions and 6 deletions:
0 comments (0 inline, 0 general)
include/transport/buddy.h
Show inline comments
 
@@ -167,9 +167,10 @@ class Buddy {
 
		static std::string JIDToLegacyName(const Swift::JID &jid);
 
		static BuddyFlag buddFlagsFromJID(const Swift::JID &jid);
 

	
 
	private:
 
	protected:
 
		void generateJID();
 

	
 
	private:
 
		long m_id;
 
// 		Swift::Presence::ref m_lastPresence;
 
		Swift::JID m_jid;
include/transport/localbuddy.h
Show inline comments
 
@@ -37,7 +37,7 @@ class LocalBuddy : public Buddy {
 
		void setAlias(const std::string &alias);
 

	
 
		std::string getName() { return m_name; }
 
		void setName(const std::string &name) { m_name = name; }
 
		bool setName(const std::string &name);
 

	
 
		bool getStatus(Swift::StatusShow &status, std::string &statusMessage) {
 
			status = m_status;
spectrum_manager/src/main.cpp
Show inline comments
 
@@ -222,8 +222,22 @@ static void stop_instances(ManagerConfig *config, const std::string &_jid = "")
 
 
					int pid = isRunning(CONFIG_STRING(&vhostCfg, "service.pidfile"));
 
					if (pid) {
 
						std::cout << "Stopping " << itr->path() << ": OK\n";
 
						std::cout << "Stopping " << itr->path() << ": ";
 
						kill(pid, SIGTERM);
 
 
						sleep(1);
 
						int count = 20;
 
						while (kill(pid, 0) == 0 && count != 0) {
 
							std::cout << ".";
 
							sleep(1);
 
							count--;
 
						}
 
						if (count == 0) {
 
							std::cout << " ERROR (timeout)\n";
 
						}
 
						else {
 
							std::cout << " OK\n";
 
						}
 
					}
 
					else {
 
						std::cout << "Stopping " << itr->path() << ": Not running\n";
src/localbuddy.cpp
Show inline comments
 
@@ -31,6 +31,22 @@ LocalBuddy::LocalBuddy(RosterManager *rosterManager, long id) : Buddy(rosterMana
 
LocalBuddy::~LocalBuddy() {
 
}
 

	
 
bool LocalBuddy::setName(const std::string &name) {
 
	if (name == m_name) {
 
		return true;
 
	}
 
	std::string oldName = name;
 
	m_name = name;
 
	try {
 
		generateJID();
 
		return true;
 
	} catch (...) {
 
		m_name = oldName;
 
		return false;
 
	}
 
	
 
}
 

	
 
void LocalBuddy::setAlias(const std::string &alias) {
 
//	if (m_firstSet) {
 
//		m_firstSet = false;
src/networkpluginserver.cpp
Show inline comments
 
@@ -95,7 +95,10 @@ class NetworkFactory : public Factory {
 
		Buddy *createBuddy(RosterManager *rosterManager, const BuddyInfo &buddyInfo) {
 
			LocalBuddy *buddy = new LocalBuddy(rosterManager, buddyInfo.id);
 
			buddy->setAlias(buddyInfo.alias);
 
			buddy->setName(buddyInfo.legacyName);
 
			if (!buddy->setName(buddyInfo.legacyName)) {
 
				delete buddy;
 
				return NULL;
 
			}
 
			if (buddyInfo.subscription == "both") {
 
				buddy->setSubscription(Buddy::Both);
 
			}
 
@@ -203,7 +206,6 @@ static void SigCatcher(int n) {
 
#endif
 

	
 
static void handleBuddyPayload(LocalBuddy *buddy, const pbnetwork::Buddy &payload) {
 
	buddy->setName(payload.buddyname());
 
	// Set alias only if it's not empty. Backends are allowed to send empty alias if it has
 
	// not changed.
 
	if (!payload.alias().empty()) {
 
@@ -503,6 +505,10 @@ void NetworkPluginServer::handleBuddyChangedPayload(const std::string &data) {
 
	}
 
	else {
 
		buddy = new LocalBuddy(user->getRosterManager(), -1);
 
		if (!buddy->setName(payload.buddyname())) {
 
			delete buddy;
 
			return;
 
		}
 
		buddy->setFlags(BUDDY_JID_ESCAPING);
 
		handleBuddyPayload(buddy, payload);
 
		user->getRosterManager()->setBuddy(buddy);
src/rostermanager.cpp
Show inline comments
 
@@ -303,7 +303,9 @@ void RosterManager::handleRemoteRosterResponse(boost::shared_ptr<Swift::RosterPa
 
		buddyInfo.groups = item.getGroups();
 

	
 
		Buddy *buddy = m_component->getFactory()->createBuddy(this, buddyInfo);
 
		setBuddy(buddy);
 
		if (buddy) {
 
			setBuddy(buddy);
 
		}
 
	}
 
}
 

	
0 comments (0 inline, 0 general)