From d39705842a2ab19b0ecc1446416f3bce5619abdb 2011-06-06 10:48:27 From: HanzZ Date: 2011-06-06 10:48:27 Subject: [PATCH] Comments + refactorization --- diff --git a/include/transport/buddy.h b/include/transport/buddy.h index 2d4d4008e04a96b4df7fe8ecaa85189b8ab09b3a..adbe9a384895564ffba9388239bbe5048425df64 100644 --- a/include/transport/buddy.h +++ b/include/transport/buddy.h @@ -39,12 +39,18 @@ typedef enum { BUDDY_NO_FLAG = 0, class Buddy { public: /// Constructor. + + /// \param rosterManager RosterManager associated with this buddy. + /// \param id ID which identifies the buddy in database or -1 if it's new buddy which is + /// not in database yet. Buddy(RosterManager *rosterManager, long id = -1); /// Destructor virtual ~Buddy(); - /// Sets unique ID used to identify this buddy by StorageBackend. This is set + /// Sets unique ID used to identify this buddy by StorageBackend. + + /// This is set /// by RosterStorage class once the buddy is stored into database or when the /// buddy is loaded from database. /// You should not need to set this ID manually. @@ -52,16 +58,19 @@ class Buddy { void setID(long id); /// Returns unique ID used to identify this buddy by StorageBackend. - /// \see Buddy::setID(long) - /// \return ID + + /// \return ID which identifies the buddy in database or -1 if it's new buddy which is + /// not in database yet. long getID(); /// Returns full JID of this buddy. + /// \param hostname hostname used as domain in returned JID /// \return full JID of this buddy const Swift::JID &getJID(); /// Generates whole Presennce stanza with current status/show for this buddy. + /// Presence stanza does not containt "to" attribute, it has to be added manually. /// \param features features used in returned stanza /// \param only_new if True, this function returns Presence stanza only if it's different @@ -76,65 +85,84 @@ class Buddy { void setOffline(); /// Returns true if this buddy is marked as available/online. + /// \return true if this buddy is marked as available/online. bool isOnline(); /// Sets current subscription. + /// \param subscription "to", "from", "both", "ask" void setSubscription(const std::string &subscription); /// Returns current subscription + /// \return subscription "to", "from", "both", "ask" const std::string &getSubscription(); /// Sets this buddy's flags. + /// \param flags flags void setFlags(BuddyFlag flags); /// Returns this buddy's flags. + /// \param flags flags BuddyFlag getFlags(); - /// Returns RosterManager associated with this buddy - /// \return rosterManager + /// Returns RosterManager associated with this buddy. + + /// \return RosterManager associated with this buddy. RosterManager *getRosterManager() { return m_rosterManager; } /// Returns legacy network username which does not contain unsafe characters, /// so it can be used in JIDs. std::string getSafeName(); - void buddyChanged(); + /// This method should be called whenever some information returned by virtual functions changes. + + /// This method sends presence to XMPP user. + void handleBuddyChanged(); - void handleVCardReceived(const std::string &id, const Swift::JID &to, Swift::VCard::ref vcard); + /// Handles VCard from legacy network and forwards it to XMPP user. + /// \param id ID used in IQ-result. + /// \param vcard VCard which will be sent. + void handleVCardReceived(const std::string &id, Swift::VCard::ref vcard); + + /// This signal is emitted when buddyChanged method is called. boost::signal onBuddyChanged; - virtual void getVCard(const std::string &id, const Swift::JID &to) = 0; + /// Returns legacy network username of this buddy. (for example UIN for ICQ, JID for Jabber, ...). - /// Returns legacy network username of this buddy. (for example UIN for ICQ, - /// JID for Jabber, ...). /// \return legacy network username virtual std::string getName() = 0; /// Returns alias (nickname) of this buddy. + /// \return alias (nickname) virtual std::string getAlias() = 0; /// Returns list of groups this buddy is in. + /// \return groups virtual std::vector getGroups() = 0; /// Returns current legacy network status and statuMessage of this buddy. + /// \param status current status/show is stored here /// \param statusMessage current status message is stored here /// \return true if status was stored successfully virtual bool getStatus(Swift::StatusShow &status, std::string &statusMessage) = 0; - /// Returns SHA-1 hash of buddy icon (avatar) or empty string if there is no avatar - /// for this buddy. + /// Returns SHA-1 hash of buddy icon (avatar) or empty string if there is no avatar for this buddy. + /// \return avatar hash or empty string. virtual std::string getIconHash() = 0; + /// Returns legacy name of buddy from JID. + + /// \param jid Jabber ID. + /// \return legacy name of buddy from JID. static std::string JIDToLegacyName(const Swift::JID &jid); private: diff --git a/include/transport/config.h b/include/transport/config.h index dff687d83112204316323061589286df072d4a5e..ea21f562cd0070a489808ccdc7901b986026bcf6 100644 --- a/include/transport/config.h +++ b/include/transport/config.h @@ -53,23 +53,30 @@ class Config { /// Destructor virtual ~Config() {} - /// Loads data from config file. You can pass your extra options which will be recognized by + /// Loads data from config file. + + /// You can pass your extra options which will be recognized by /// the parser using opts parameter. /// \param configfile path to config file /// \param opts extra options which will be recognized by a parser bool load(const std::string &configfile, boost::program_options::options_description &opts); - /// Loads data from config file. This function loads only config variables needed by libtransport. + /// Loads data from config file. + + /// This function loads only config variables needed by libtransport. /// \see load(const std::string &, boost::program_options::options_description &) /// \param configfile path to config file bool load(const std::string &configfile); - /// Returns value of variable defined by key. For variables in sections you can use "section.variable" key format. + /// Returns value of variable defined by key. + + /// For variables in sections you can use "section.variable" key format. /// \param key config variable name const boost::program_options::variable_value &operator[] (const std::string &key) { return m_variables[key]; } + /// Returns path to config file from which data were loaded. const std::string &getConfigFile() { return m_file; } /// This signal is emitted when config is loaded/reloaded. diff --git a/include/transport/conversation.h b/include/transport/conversation.h index 17de85f0253ef73467aa4660fbaf9887244454a4..82a35b0ce8599a321da5d11925f1f5013b76222c 100644 --- a/include/transport/conversation.h +++ b/include/transport/conversation.h @@ -31,38 +31,79 @@ namespace Transport { class ConversationManager; +/// Represents one XMPP-Legacy network conversation. class Conversation { public: + /// Type of participants in MUC rooms. enum ParticipantFlag {None, Moderator}; - /// Constructor. - Conversation(ConversationManager *conversationManager, const std::string &legacyName, bool m_muc = false); + /// Creates new conversation. - /// Destructor + /// \param conversationManager ConversationManager associated with this Conversation. + /// \param legacyName Legacy network name of recipient. + /// \param muc True if this conversation is Multi-user chat. + Conversation(ConversationManager *conversationManager, const std::string &legacyName, bool muc = false); + + /// Destructor. virtual ~Conversation(); + /// Returns legacy network name of this conversation. + + /// \return legacy network name of this conversation. const std::string &getLegacyName() { return m_legacyName; } + /// Handles new message from Legacy network and forwards it to XMPP. + + /// \param message Message received from legacy network. + /// \param nickname For MUC conversation this is nickname of room participant who sent this message. void handleMessage(boost::shared_ptr &message, const std::string &nickname = ""); + + /// Handles participant change in MUC. + + /// \param nickname Nickname of participant which changed. + /// \param flag ParticipantFlag. + /// \param status Current status of this participant. + /// \param statusMessage Current status message of this participant. + /// \param newname If participant was renamed, this variable contains his new name. void handleParticipantChanged(const std::string &nickname, int flag, int status = Swift::StatusShow::None, const std::string &statusMessage = "", const std::string &newname = ""); + + /// Sets XMPP user nickname in MUC rooms. + + /// \param nickname XMPP user nickname in MUC rooms. void setNickname(const std::string &nickname) { m_nickname = nickname; } + /// Sends message to Legacy network. + + /// \param message Message. virtual void sendMessage(boost::shared_ptr &message) = 0; + /// Returns ConversationManager associated with this Conversation. + + /// \return ConversationManager associated with this Conversation. ConversationManager *getConversationManager() { return m_conversationManager; } + /// Returns True if this conversation is MUC room. + + /// \return True if this conversation is MUC room. bool isMUC() { return m_muc; } + /// Sets room name associated with this Conversation. + + /// This is used to detect Private messages associated with particular room. + /// \param room room name associated with this Conversation. void setRoom(const std::string &room) { m_room = room; } + /// Returns room name associated with this Conversation. + + /// \return room name associated with this Conversation. const std::string &getRoom() { return m_room; } diff --git a/include/transport/conversationmanager.h b/include/transport/conversationmanager.h index d7804b93a336b5663655d107ca6e2457919b2167..fd56f8777b5d23a13373eaf1475e872f1df30f36 100644 --- a/include/transport/conversationmanager.h +++ b/include/transport/conversationmanager.h @@ -31,29 +31,45 @@ class Conversation; class User; class Component; +/// Manages all Conversations of particular User. class ConversationManager { public: /// Creates new ConversationManager. + /// \param user User associated with this ConversationManager. - /// \param component Transport instance associated with this roster. + /// \param component Transport instance associated with this ConversationManager. ConversationManager(User *user, Component *component); /// Destructor. virtual ~ConversationManager(); /// Returns user associated with this manager. + /// \return User User *getUser() { return m_user; } + /// Returns component associated with this ConversationManager. + + /// \return component associated with this ConversationManager. Component *getComponent() { return m_component; } + /// Returns Conversation by its legacy network name (for example by UIN in case of ICQ). + + /// \param name legacy network name. + /// \return Conversation or NULL. Conversation *getConversation(const std::string &name) { return m_convs[name]; } - void setConversation(Conversation *conv); + /// Adds new Conversation to the manager. + + /// \param conv Conversation. + void addConversation(Conversation *conv); + + /// Removes Conversation from the manager. - void unsetConversation(Conversation *conv); + /// \param conv Conversation. + void removeConversation(Conversation *conv); private: void handleMessageReceived(Swift::Message::ref message); diff --git a/include/transport/localbuddy.h b/include/transport/localbuddy.h index 3b1e7569bb8ae594dd5d292d45dbded62911a582..588126eafb5de19452297e34b09b004f1d7f3489 100644 --- a/include/transport/localbuddy.h +++ b/include/transport/localbuddy.h @@ -56,8 +56,6 @@ class LocalBuddy : public Buddy { std::vector getGroups() { return m_groups; } void setGroups(const std::vector &groups) { m_groups = groups; } - void getVCard(const std::string &id, const Swift::JID &to) {} - private: std::string m_name; std::string m_alias; diff --git a/include/transport/transport.h b/include/transport/transport.h index 5c91442b7854a1ec3975f548a8cc2d2f345c5152..cd43e238a7fde5ae543441dc4cee525fcb5c65a4 100644 --- a/include/transport/transport.h +++ b/include/transport/transport.h @@ -52,61 +52,92 @@ namespace Transport { /// Represents one transport instance. - /// It's used to connect - /// the Jabber server and provides transaction layer between Jabber server - /// and other classes. + /// It's used to connect the Jabber server and provides transaction layer + /// between Jabber server and other classes. + /// + /// In server mode it represents Jabber server to which users can connect and use + /// it as transport. class Component { public: /// Creates new Component instance. - /// \param loop main event loop - /// \param config cofiguration, this class uses following Config values: + + /// \param loop Main event loop. + /// \param config Cofiguration; this class uses following Config values: /// - service.jid /// - service.password /// - service.server /// - service.port + /// - service.server_mode + /// \param factory Transport Abstract factory used to create basic transport structures. Component(Swift::EventLoop *loop, Config *config, Factory *factory); /// Component destructor. ~Component(); - /// Returns Swift::Component associated with this Transport::Component. - /// You can use it to send presences and other stanzas. - /// \return Swift::Component associated with this Transport::Component + /// Returns Swift::StanzaChannel associated with this Transport::Component. + + /// It can be used to send presences and other stanzas. + /// \return Swift::StanzaChannel associated with this Transport::Component. Swift::StanzaChannel *getStanzaChannel(); + /// Returns Swift::IQRouter associated with this Component. + + /// \return Swift::IQRouter associated with this Component. Swift::IQRouter *getIQRouter() { return m_iqRouter; } /// Returns Swift::PresenceOracle associated with this Transport::Component. + /// You can use it to check current resource connected for particular user. - /// \return Swift::PresenceOracle associated with this Transport::Component + /// \return Swift::PresenceOracle associated with this Transport::Component. Swift::PresenceOracle *getPresenceOracle(); + /// Returns True if the component is in server mode. + + /// \return True if the component is in server mode. bool inServerMode() { return m_server != NULL; } + + /// Returns user password from internal UserRegistry. + + /// In server mode, the password user used for login can be obtained by + /// this method. + /// \param barejid User's bare JID. + /// \return User's password. const std::string &getUserRegistryPassword(const std::string &barejid); /// Connects the Jabber server. - /// \see Component() + + /// In server mode this function does nothing. void connect(); - /// Sets disco#info features which are sent as answer to - /// disco#info IQ-get. This sets features of transport contact (For example "j2j.domain.tld"). + /// Sets disco#info features which are sent as answer to disco#info IQ-get. + + /// This sets features of transport contact (For example "j2j.domain.tld"). /// \param features list of features as sent in disco#info response void setTransportFeatures(std::list &features); - /// Sets disco#info features which are sent as answer to - /// disco#info IQ-get. This sets features of legacy network buddies (For example "me\40gmail.com@j2j.domain.tld"). + /// Sets disco#info features which are sent as answer to disco#info IQ-get. + + /// This sets features of legacy network buddies (For example "me\40gmail.com@j2j.domain.tld"). /// \param features list of features as sent in disco#info response void setBuddyFeatures(std::list &features); /// Returns Jabber ID of this transport. + /// \return Jabber ID of this transport Swift::JID &getJID() { return m_jid; } - Swift::BoostNetworkFactories *getFactories() { return m_factories; } + /// Returns Swift::NetworkFactories which can be used to create new connections. + + /// \return Swift::NetworkFactories which can be used to create new connections. + Swift::BoostNetworkFactories *getNetworkFactories() { return m_factories; } + /// Returns Transport Factory used to create basic Transport components. + + /// \return Transport Factory used to create basic Transport components. Factory *getFactory() { return m_factory; } /// This signal is emitted when server disconnects the transport because of some error. + /// \param error disconnection error boost::signal onConnectionError; @@ -114,15 +145,18 @@ namespace Transport { boost::signal onConnected; /// This signal is emitted when XML stanza is sent to server. + /// \param xml xml stanza boost::signal onXMLOut; /// This signal is emitted when XML stanza is received from server. + /// \param xml xml stanza boost::signal onXMLIn; - /// This signal is emitted when presence from XMPP user (for example "user@domain.tld") - /// is received. It's emitted only for presences addressed to transport itself + /// This signal is emitted when presence from XMPP user is received. + + /// It's emitted only for presences addressed to transport itself /// (for example to="j2j.domain.tld"). /// \param presence presence data boost::signal onUserPresenceReceived; diff --git a/src/buddy.cpp b/src/buddy.cpp index 2edda8ebb5168894fb5c5be1d61ddd3af5fa5e1c..b9879a048cdadeeb548b9ca8c0ef2b17bcb38f57 100644 --- a/src/buddy.cpp +++ b/src/buddy.cpp @@ -146,7 +146,7 @@ std::string Buddy::getSafeName() { return name; } -void Buddy::buddyChanged() { +void Buddy::handleBuddyChanged() { Swift::Presence::ref presence = generatePresenceStanza(255); if (presence) { m_rosterManager->getUser()->getComponent()->getStanzaChannel()->sendPresence(presence); @@ -154,7 +154,7 @@ void Buddy::buddyChanged() { onBuddyChanged(); } -void Buddy::handleVCardReceived(const std::string &id, const Swift::JID &to, Swift::VCard::ref vcard) { +void Buddy::handleVCardReceived(const std::string &id, Swift::VCard::ref vcard) { boost::shared_ptr > request(new Swift::GenericRequest(Swift::IQ::Result, m_rosterManager->getUser()->getJID(), vcard, m_rosterManager->getUser()->getComponent()->getIQRouter())); request->send(); } diff --git a/src/conversation.cpp b/src/conversation.cpp index 64c40093a8d75617b6348df851854f01e4296136..2ae9fcf84ddedcb4ad25e9db91a754cb0acc1874 100644 --- a/src/conversation.cpp +++ b/src/conversation.cpp @@ -30,12 +30,12 @@ namespace Transport { Conversation::Conversation(ConversationManager *conversationManager, const std::string &legacyName, bool isMUC) : m_conversationManager(conversationManager) { m_legacyName = legacyName; - m_conversationManager->setConversation(this); + m_conversationManager->addConversation(this); m_muc = isMUC; } Conversation::~Conversation() { - m_conversationManager->unsetConversation(this); + m_conversationManager->removeConversation(this); } void Conversation::handleMessage(boost::shared_ptr &message, const std::string &nickname) { diff --git a/src/conversationmanager.cpp b/src/conversationmanager.cpp index c1a4f764a6b095660b9a48b17e1c4e7cb395f56c..4110132e262cae5c75860cb2e347809cc14c27b0 100644 --- a/src/conversationmanager.cpp +++ b/src/conversationmanager.cpp @@ -41,11 +41,11 @@ ConversationManager::~ConversationManager() { } } -void ConversationManager::setConversation(Conversation *conv) { +void ConversationManager::addConversation(Conversation *conv) { m_convs[conv->getLegacyName()] = conv; } -void ConversationManager::unsetConversation(Conversation *conv) { +void ConversationManager::removeConversation(Conversation *conv) { for (std::map::const_iterator it = m_convs.begin(); it != m_convs.end(); it++) { if ((*it).second->getRoom() == conv->getLegacyName()) { (*it).second->setRoom(""); diff --git a/src/networkpluginserver.cpp b/src/networkpluginserver.cpp index 2e635fcbe7694e992ded5017950e8c2f587d403e..78fe349bd4539d99132a3d0ebe037cfee44fa994 100644 --- a/src/networkpluginserver.cpp +++ b/src/networkpluginserver.cpp @@ -120,7 +120,7 @@ NetworkPluginServer::NetworkPluginServer(Component *component, Config *config, U m_userManager->onUserCreated.connect(boost::bind(&NetworkPluginServer::handleUserCreated, this, _1)); m_userManager->onUserDestroyed.connect(boost::bind(&NetworkPluginServer::handleUserDestroyed, this, _1)); - m_pingTimer = component->getFactories()->getTimerFactory()->createTimer(10000); + m_pingTimer = component->getNetworkFactories()->getTimerFactory()->createTimer(10000); m_pingTimer->onTick.connect(boost::bind(&NetworkPluginServer::pingTimeout, this)); m_vcardResponder = new VCardResponder(component->getIQRouter(), userManager); @@ -130,7 +130,7 @@ NetworkPluginServer::NetworkPluginServer(Component *component, Config *config, U m_rosterResponder = new RosterResponder(component->getIQRouter(), userManager); m_rosterResponder->start(); - m_server = component->getFactories()->getConnectionFactory()->createConnectionServer(10000); + m_server = component->getNetworkFactories()->getConnectionFactory()->createConnectionServer(10000); m_server->onNewConnection.connect(boost::bind(&NetworkPluginServer::handleNewClientConnection, this, _1)); m_server->start(); @@ -234,7 +234,7 @@ void NetworkPluginServer::handleBuddyChangedPayload(const std::string &data) { LocalBuddy *buddy = (LocalBuddy *) user->getRosterManager()->getBuddy(payload.buddyname()); if (buddy) { handleBuddyPayload(buddy, payload); - buddy->buddyChanged(); + buddy->handleBuddyChanged(); } else { buddy = new LocalBuddy(user->getRosterManager(), -1); diff --git a/src/rostermanager.cpp b/src/rostermanager.cpp index 261b7b0cd439e37aa82eb0f43e2e37600c3f3963..566eb6ced86354c08e68a30948d24a6cb33b6435 100644 --- a/src/rostermanager.cpp +++ b/src/rostermanager.cpp @@ -36,8 +36,8 @@ RosterManager::RosterManager(User *user, Component *component){ m_rosterStorage = NULL; m_user = user; m_component = component; - m_setBuddyTimer = m_component->getFactories()->getTimerFactory()->createTimer(1000); - m_RIETimer = m_component->getFactories()->getTimerFactory()->createTimer(5000); + m_setBuddyTimer = m_component->getNetworkFactories()->getTimerFactory()->createTimer(1000); + m_RIETimer = m_component->getNetworkFactories()->getTimerFactory()->createTimer(5000); m_RIETimer->onTick.connect(boost::bind(&RosterManager::sendRIE, this)); @@ -121,7 +121,7 @@ void RosterManager::unsetBuddy(Buddy *buddy) { void RosterManager::handleBuddyRosterPushResponse(Swift::ErrorPayload::ref error, const std::string &key) { if (m_buddies[key] != NULL) { - m_buddies[key]->buddyChanged(); + m_buddies[key]->handleBuddyChanged(); } } diff --git a/src/rosterstorage.cpp b/src/rosterstorage.cpp index 270e0257a5edb041365bbdbb4ace2ff194e6f33a..294f19e81fd22852e67f3c2a1b0a798169a9275c 100644 --- a/src/rosterstorage.cpp +++ b/src/rosterstorage.cpp @@ -77,7 +77,7 @@ namespace Transport { RosterStorage::RosterStorage(User *user, StorageBackend *storageBackend) { m_user = user; m_storageBackend = storageBackend; - m_storageTimer = m_user->getComponent()->getFactories()->getTimerFactory()->createTimer(5000); + m_storageTimer = m_user->getComponent()->getNetworkFactories()->getTimerFactory()->createTimer(5000); m_storageTimer->onTick.connect(boost::bind(&RosterStorage::storeBuddies, this)); } diff --git a/src/user.cpp b/src/user.cpp index 2c7d5d09d39437eeb3f5892bb2629fab166b7ecb..4b64736c31b8f0c13e17a524e11dfcfe3aae6482 100644 --- a/src/user.cpp +++ b/src/user.cpp @@ -42,7 +42,7 @@ User::User(const Swift::JID &jid, UserInfo &userInfo, Component *component, User m_connected = false; m_readyForConnect = false; - m_reconnectTimer = m_component->getFactories()->getTimerFactory()->createTimer(10000); + m_reconnectTimer = m_component->getNetworkFactories()->getTimerFactory()->createTimer(10000); m_reconnectTimer->onTick.connect(boost::bind(&User::onConnectingTimeout, this)); m_rosterManager = new RosterManager(this, m_component);