diff options
-rw-r--r-- | src/test.cpp | 8 | ||||
-rw-r--r-- | src/xmpp/xmpp_component.cpp | 7 | ||||
-rw-r--r-- | src/xmpp/xmpp_component.hpp | 9 |
3 files changed, 23 insertions, 1 deletions
diff --git a/src/test.cpp b/src/test.cpp index 0a1af49..1056926 100644 --- a/src/test.cpp +++ b/src/test.cpp @@ -2,6 +2,7 @@ * Just a very simple test suite, by hand, using assert() */ +#include <xmpp/xmpp_component.hpp> #include <xmpp/xmpp_parser.hpp> #include <utils/encoding.hpp> #include <logger/logger.hpp> @@ -59,6 +60,13 @@ int main() assert(utils::remove_invalid_xml_chars("\acouco\u0008u\uFFFEt\uFFFFe\r\n♥") == "coucoute\r\n♥"); /** + * Id generation + */ + assert(XmppComponent::next_id() == "0"); + assert(XmppComponent::next_id() == "1"); + assert(XmppComponent::next_id() == "2"); + + /** * Utils */ std::cout << color << "Testing utils…" << reset << std::endl; diff --git a/src/xmpp/xmpp_component.cpp b/src/xmpp/xmpp_component.cpp index 60b12dd..9f62514 100644 --- a/src/xmpp/xmpp_component.cpp +++ b/src/xmpp/xmpp_component.cpp @@ -29,6 +29,8 @@ #define STANZA_NS "urn:ietf:params:xml:ns:xmpp-stanzas" #define STREAMS_NS "urn:ietf:params:xml:ns:xmpp-streams" +unsigned long XmppComponent::current_id = 0; + XmppComponent::XmppComponent(const std::string& hostname, const std::string& secret): ever_auth(false), last_auth(false), @@ -783,3 +785,8 @@ void XmppComponent::send_self_disco_info(const std::string& id, const std::strin iq.close(); this->send_stanza(iq); } + +std::string XmppComponent::next_id() +{ + return std::to_string(XmppComponent::current_id++); +} diff --git a/src/xmpp/xmpp_component.hpp b/src/xmpp/xmpp_component.hpp index aa19be3..f54ebd7 100644 --- a/src/xmpp/xmpp_component.hpp +++ b/src/xmpp/xmpp_component.hpp @@ -20,10 +20,16 @@ class XmppComponent: public SocketHandler public: explicit XmppComponent(const std::string& hostname, const std::string& secret); ~XmppComponent(); + void on_connection_failed(const std::string& reason) override final; void on_connected() override final; void on_connection_close() override final; void parse_in_buffer(const size_t size) override final; + + /** + * Returns a unique id, to be used in the 'id' element of our iq stanzas. + */ + static std::string next_id(); /** * Send a "close" message to all our connected peers. That message * depends on the protocol used (this may be a QUIT irc message, or a @@ -195,6 +201,8 @@ private: */ std::unordered_map<std::string, std::unique_ptr<Bridge>> bridges; + static unsigned long current_id; + XmppComponent(const XmppComponent&) = delete; XmppComponent(XmppComponent&&) = delete; XmppComponent& operator=(const XmppComponent&) = delete; @@ -202,4 +210,3 @@ private: }; #endif // XMPP_COMPONENT_INCLUDED - |