Changeset - 50bcfbf84cb1
[Not reviewed]
0 4 0
HanzZ - 15 years ago 2011-04-03 21:15:14
hanzz.k@gmail.com
Don't store passwords to DB in server mode. Fixed disconnecting from legacy network
4 files changed with 44 insertions and 6 deletions:
0 comments (0 inline, 0 general)
include/transport/user.h
Show inline comments
 
@@ -28,23 +28,24 @@
 

	
 
namespace Transport {
 

	
 
class Component;
 
class RosterManager;
 
class ConversationManager;
 
class UserManager;
 
struct UserInfo;
 

	
 
/// Represents online XMPP user.
 
class User {
 
	public:
 
		/// Creates new User class.
 
		/// \param jid XMPP JID associated with this user
 
		/// \param userInfo UserInfo struct with informations needed to connect
 
		/// this user to legacy network
 
		/// \param component Component associated with this user
 
		User(const Swift::JID &jid, UserInfo &userInfo, Component * component);
 
		User(const Swift::JID &jid, UserInfo &userInfo, Component * component, UserManager *userManager);
 

	
 
		/// Destroyes User.
 
		virtual ~User();
 

	
 
		/// Returns JID of XMPP user who is currently connected using this User class.
 
		/// \return full JID
 
@@ -69,20 +70,24 @@ class User {
 
		void handlePresence(Swift::Presence::ref presence);
 

	
 
		/// Returns language.
 
		/// \return language
 
		const char *getLang() { return "en"; }
 

	
 
		void handleDisconnected(const std::string &error);
 

	
 
		boost::signal<void ()> onReadyToConnect;
 
		boost::signal<void ()> onDisconnected;
 

	
 
	private:
 
		void onConnectingTimeout();
 

	
 
		Swift::JID m_jid;
 
		Component *m_component;
 
		RosterManager *m_rosterManager;
 
		UserManager *m_userManager;
 
		ConversationManager *m_conversationManager;
 
		Swift::EntityCapsManager *m_entityCapsManager;
 
		Swift::PresenceOracle *m_presenceOracle;
 
		UserInfo m_userInfo;
 
		void *m_data;
 
		bool m_connected;
spectrum/src/main.cpp
Show inline comments
 
@@ -201,20 +201,44 @@ static PurpleConversationUiOps conversation_ui_ops =
 
	NULL,
 
	NULL,
 
	NULL,
 
	NULL
 
};
 

	
 
static void connection_report_disconnect(PurpleConnection *gc, PurpleConnectionError reason, const char *text){
 
	PurpleAccount *account = purple_connection_get_account(gc);
 
	User *user = (User *) account->ui_data;
 

	
 
	if (!user)
 
		return;
 
	user->handleDisconnected(text);
 
}
 

	
 
static PurpleConnectionUiOps conn_ui_ops =
 
{
 
	NULL,
 
	NULL,
 
	NULL,//connection_disconnected,
 
	NULL,
 
	NULL,
 
	NULL,
 
	NULL,
 
	connection_report_disconnect,
 
	NULL,
 
	NULL,
 
	NULL
 
};
 

	
 
static void transport_core_ui_init(void)
 
{
 
	purple_blist_set_ui_ops(&blistUiOps);
 
// 	purple_accounts_set_ui_ops(&accountUiOps);
 
// 	purple_notify_set_ui_ops(&notifyUiOps);
 
// 	purple_request_set_ui_ops(&requestUiOps);
 
// 	purple_xfers_set_ui_ops(getXferUiOps());
 
// 	purple_connections_set_ui_ops(&conn_ui_ops);
 
	purple_connections_set_ui_ops(&conn_ui_ops);
 
	purple_conversations_set_ui_ops(&conversation_ui_ops);
 
// #ifndef WIN32
 
// 	purple_dnsquery_set_ui_ops(getDNSUiOps());
 
// #endif
 
}
 

	
src/user.cpp
Show inline comments
 
@@ -19,35 +19,38 @@
 
 */
 

	
 
#include "transport/user.h"
 
#include "transport/transport.h"
 
#include "transport/storagebackend.h"
 
#include "transport/rostermanager.h"
 
#include "transport/usermanager.h"
 
#include "transport/conversationmanager.h"
 
#include "Swiften/Swiften.h"
 

	
 
namespace Transport {
 

	
 
User::User(const Swift::JID &jid, UserInfo &userInfo, Component *component) {
 
User::User(const Swift::JID &jid, UserInfo &userInfo, Component *component, UserManager *userManager) {
 
	m_jid = jid;
 

	
 
	m_component = component;
 
	m_presenceOracle = component->m_presenceOracle;
 
	m_entityCapsManager = component->m_entityCapsManager;
 
	m_userManager = userManager;
 
	m_userInfo = userInfo;
 
	m_connected = false;
 
	m_readyForConnect = false;
 

	
 
	m_reconnectTimer = m_component->getFactories()->getTimerFactory()->createTimer(10000);
 
	m_reconnectTimer->onTick.connect(boost::bind(&User::onConnectingTimeout, this)); 
 

	
 
	m_rosterManager = new RosterManager(this, m_component);
 
	m_conversationManager = new ConversationManager(this, m_component);
 
}
 

	
 
User::~User(){
 
	m_reconnectTimer->stop();
 
	delete m_rosterManager;
 
	delete m_conversationManager;
 
}
 

	
 
const Swift::JID &User::getJID() {
 
	return m_jid;
 
@@ -97,7 +100,12 @@ void User::onConnectingTimeout() {
 
		return;
 
	m_reconnectTimer->stop();
 
	m_readyForConnect = true;
 
	onReadyToConnect();
 
}
 

	
 
void User::handleDisconnected(const std::string &error) {
 
	onDisconnected();
 
	m_userManager->removeUser(this);
 
}
 

	
 
}
src/usermanager.cpp
Show inline comments
 
@@ -99,14 +99,15 @@ void UserManager::handlePresence(Swift::Presence::ref presence) {
 
			res.password = m_component->getUserRegistryPassword(userkey);
 
			res.uin = presence->getFrom().getNode();
 
			res.jid = userkey;
 
			if (res.uin.find_last_of("%") != std::string::npos) {
 
				res.uin.replace(res.uin.find_last_of("%"), 1, "@");
 
			}
 
			m_storageBackend->setUser(res);
 
			registered = m_storageBackend->getUser(userkey, res);
 
// 			m_storageBackend->setUser(res);
 
// 			registered = m_storageBackend->getUser(userkey, res);
 
			registered = true;
 
		}
 

	
 
		if (!registered) {
 
			// TODO: logging
 
			return;
 
		}
 
@@ -117,13 +118,13 @@ void UserManager::handlePresence(Swift::Presence::ref presence) {
 
// // 			if (CONFIG().onlyForVIP && !isVip && std::find(x.begin(), x.end(), presence->getFrom().getDomain().getUTF8String()) == x.end()) {
 
// // 				Log(presence->getFrom().toString().getUTF8String(), "This user is not VIP, can't login...");
 
// // 				return;
 
// // 			}
 
// // 
 
// // 
 
				user = new User(presence->getFrom(), res, m_component);
 
				user = new User(presence->getFrom(), res, m_component, this);
 
				// TODO: handle features somehow
 
// // 			user->setFeatures(isVip ? CONFIG().VIPFeatures : CONFIG().transportFeatures);
 
// // // 				if (c != NULL)
 
// // // 					if (Transport::instance()->hasClientCapabilities(c->findAttribute("ver")))
 
// // // 						user->setResource(stanza.from().resource(), stanza.priority(), Transport::instance()->getCapabilities(c->findAttribute("ver")));
 
// // // 
0 comments (0 inline, 0 general)