From f35db5cebaf1b9e267a7f2341699bb50fbc54c65 Mon Sep 17 00:00:00 2001 From: Florent Le Coz Date: Tue, 6 May 2014 22:39:09 +0200 Subject: Implement next_id() to --- src/test.cpp | 8 ++++++++ src/xmpp/xmpp_component.cpp | 7 +++++++ src/xmpp/xmpp_component.hpp | 9 ++++++++- 3 files changed, 23 insertions(+), 1 deletion(-) 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 #include #include #include @@ -58,6 +59,13 @@ int main() assert(utils::remove_invalid_xml_chars(in) == in); 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 */ 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> 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 - -- cgit v1.2.3