diff options
| author | Edwin Mons <edwin.mons@isode.com> | 2018-10-29 14:32:15 (GMT) |
|---|---|---|
| committer | Edwin Mons <edwin.mons@isode.com> | 2018-11-14 10:20:55 (GMT) |
| commit | 5758cc48f5f340132d19e79f647dd5d3ad8c54fc (patch) | |
| tree | d4c6d449344d99f333ee49b834ac76ab848b6e78 | |
| parent | 961a997b406cc1283f316c88bb0475e35e7cc9aa (diff) | |
| download | swift-5758cc48f5f340132d19e79f647dd5d3ad8c54fc.zip swift-5758cc48f5f340132d19e79f647dd5d3ad8c54fc.tar.bz2 | |
Fix Stanza Ack maximum and tests
The stanza ack code now uses a constexpr without numeric cast to
calculate the maximum, and test code uses the constant UINT32_MAX from
limits, both of which should result in the same number.
Test-Information:
Unit tests pass on macOS 10.14
Change-Id: Iba8fc779e52699d480d1ce458df0c6581a16ad06
| -rw-r--r-- | Swiften/Elements/StanzaAck.cpp | 8 | ||||
| -rw-r--r-- | Swiften/Elements/StanzaAck.h | 4 | ||||
| -rw-r--r-- | Swiften/Parser/StanzaAckParser.cpp | 4 | ||||
| -rw-r--r-- | Swiften/StreamManagement/StanzaAckRequester.cpp | 6 | ||||
| -rw-r--r-- | Swiften/StreamManagement/StanzaAckResponder.cpp | 6 | ||||
| -rw-r--r-- | Swiften/StreamManagement/UnitTest/StanzaAckRequesterTest.cpp | 7 | ||||
| -rw-r--r-- | Swiften/StreamManagement/UnitTest/StanzaAckResponderTest.cpp | 7 |
7 files changed, 19 insertions, 23 deletions
diff --git a/Swiften/Elements/StanzaAck.cpp b/Swiften/Elements/StanzaAck.cpp index bd0b78d..dda97f5 100644 --- a/Swiften/Elements/StanzaAck.cpp +++ b/Swiften/Elements/StanzaAck.cpp @@ -1,19 +1,17 @@ /* - * Copyright (c) 2013 Isode Limited. + * Copyright (c) 2013-2018 Isode Limited. * All rights reserved. * See the COPYING file for more information. */ #include <Swiften/Elements/StanzaAck.h> -#include <boost/numeric/conversion/cast.hpp> - using namespace Swift; StanzaAck::~StanzaAck() { } -void StanzaAck::setHandledStanzasCount(int i) { - handledStanzasCount = boost::numeric_cast<unsigned int>(i); +void StanzaAck::setHandledStanzasCount(unsigned int i) { + handledStanzasCount = i; valid = true; } diff --git a/Swiften/Elements/StanzaAck.h b/Swiften/Elements/StanzaAck.h index 68f0a2f..f664aca 100644 --- a/Swiften/Elements/StanzaAck.h +++ b/Swiften/Elements/StanzaAck.h @@ -1,11 +1,11 @@ /* - * Copyright (c) 2010-2016 Isode Limited. + * Copyright (c) 2010-2018 Isode Limited. * All rights reserved. * See the COPYING file for more information. */ #pragma once #include <memory> #include <Swiften/Base/API.h> @@ -18,19 +18,19 @@ namespace Swift { StanzaAck() : valid(false), handledStanzasCount(0) {} StanzaAck(unsigned int handledStanzasCount) : valid(true), handledStanzasCount(handledStanzasCount) {} virtual ~StanzaAck(); unsigned int getHandledStanzasCount() const { return handledStanzasCount; } - void setHandledStanzasCount(int i); + void setHandledStanzasCount(unsigned int i); bool isValid() const { return valid; } private: bool valid; unsigned int handledStanzasCount; }; diff --git a/Swiften/Parser/StanzaAckParser.cpp b/Swiften/Parser/StanzaAckParser.cpp index de0287e..42ab181 100644 --- a/Swiften/Parser/StanzaAckParser.cpp +++ b/Swiften/Parser/StanzaAckParser.cpp @@ -1,29 +1,29 @@ /* - * Copyright (c) 2010 Isode Limited. + * Copyright (c) 2010-2018 Isode Limited. * All rights reserved. * See the COPYING file for more information. */ #include <Swiften/Parser/StanzaAckParser.h> #include <boost/lexical_cast.hpp> namespace Swift { StanzaAckParser::StanzaAckParser() : GenericElementParser<StanzaAck>(), depth(0) { } void StanzaAckParser::handleStartElement(const std::string&, const std::string&, const AttributeMap& attributes) { if (depth == 0) { std::string handledStanzasString = attributes.getAttribute("h"); try { - getElementGeneric()->setHandledStanzasCount(boost::lexical_cast<int>(handledStanzasString)); + getElementGeneric()->setHandledStanzasCount(boost::lexical_cast<unsigned int>(handledStanzasString)); } catch (const boost::bad_lexical_cast &) { } } ++depth; } void StanzaAckParser::handleEndElement(const std::string&, const std::string&) { --depth; diff --git a/Swiften/StreamManagement/StanzaAckRequester.cpp b/Swiften/StreamManagement/StanzaAckRequester.cpp index 8941f4a..a0f5b70 100644 --- a/Swiften/StreamManagement/StanzaAckRequester.cpp +++ b/Swiften/StreamManagement/StanzaAckRequester.cpp @@ -1,25 +1,23 @@ /* - * Copyright (c) 2010-2016 Isode Limited. + * Copyright (c) 2010-2018 Isode Limited. * All rights reserved. * See the COPYING file for more information. */ #include <Swiften/StreamManagement/StanzaAckRequester.h> -#include <boost/numeric/conversion/cast.hpp> - #include <Swiften/Base/Log.h> #include <Swiften/Elements/Message.h> namespace Swift { -static const unsigned int MAX_HANDLED_STANZA_COUNT = boost::numeric_cast<unsigned int>((1ULL<<32) - 1); +static const unsigned int MAX_HANDLED_STANZA_COUNT = static_cast<unsigned int>((1ULL<<32) - 1); StanzaAckRequester::StanzaAckRequester() : lastHandledStanzasCount(0) { } void StanzaAckRequester::handleStanzaSent(std::shared_ptr<Stanza> stanza) { unackedStanzas.push_back(stanza); if (std::dynamic_pointer_cast<Message>(stanza)) { onRequestAck(); diff --git a/Swiften/StreamManagement/StanzaAckResponder.cpp b/Swiften/StreamManagement/StanzaAckResponder.cpp index b6171d0..bfe6f4d 100644 --- a/Swiften/StreamManagement/StanzaAckResponder.cpp +++ b/Swiften/StreamManagement/StanzaAckResponder.cpp @@ -1,22 +1,20 @@ /* - * Copyright (c) 2010 Isode Limited. + * Copyright (c) 2010-2018 Isode Limited. * All rights reserved. * See the COPYING file for more information. */ #include <Swiften/StreamManagement/StanzaAckResponder.h> -#include <boost/numeric/conversion/cast.hpp> - namespace Swift { -static const unsigned int MAX_HANDLED_STANZA_COUNT = boost::numeric_cast<unsigned int>((1ULL<<32) - 1); +static const unsigned int MAX_HANDLED_STANZA_COUNT = static_cast<unsigned int>((1ULL << 32) - 1); StanzaAckResponder::StanzaAckResponder() : handledStanzasCount(0) { } void StanzaAckResponder::handleStanzaReceived() { handledStanzasCount = (handledStanzasCount == MAX_HANDLED_STANZA_COUNT ? 0 : handledStanzasCount + 1); } void StanzaAckResponder::handleAckRequestReceived() { diff --git a/Swiften/StreamManagement/UnitTest/StanzaAckRequesterTest.cpp b/Swiften/StreamManagement/UnitTest/StanzaAckRequesterTest.cpp index ce16e1f..e0ebefd 100644 --- a/Swiften/StreamManagement/UnitTest/StanzaAckRequesterTest.cpp +++ b/Swiften/StreamManagement/UnitTest/StanzaAckRequesterTest.cpp @@ -1,17 +1,18 @@ /* - * Copyright (c) 2010-2016 Isode Limited. + * Copyright (c) 2010-2018 Isode Limited. * All rights reserved. * See the COPYING file for more information. */ +#include <cstdint> + #include <boost/bind.hpp> -#include <boost/numeric/conversion/cast.hpp> #include <cppunit/extensions/HelperMacros.h> #include <cppunit/extensions/TestFactoryRegistry.h> #include <Swiften/Elements/IQ.h> #include <Swiften/Elements/Message.h> #include <Swiften/Elements/Presence.h> #include <Swiften/StreamManagement/StanzaAckRequester.h> @@ -105,19 +106,19 @@ class StanzaAckRequesterTest : public CppUnit::TestFixture { CPPUNIT_ASSERT_EQUAL(3, static_cast<int>(ackedStanzas.size())); CPPUNIT_ASSERT_EQUAL(std::string("m1"), ackedStanzas[0]->getID()); CPPUNIT_ASSERT_EQUAL(std::string("m2"), ackedStanzas[1]->getID()); CPPUNIT_ASSERT_EQUAL(std::string("m3"), ackedStanzas[2]->getID()); } // Handle stanza ack count wrapping, as per the XEP void testHandleAckReceived_WrapAround() { std::shared_ptr<StanzaAckRequester> testling(createRequester()); - testling->lastHandledStanzasCount = boost::numeric_cast<unsigned int>((1ULL<<32) - 1); + testling->lastHandledStanzasCount = UINT32_MAX; testling->handleStanzaSent(createMessage("m1")); testling->handleStanzaSent(createMessage("m2")); testling->handleAckReceived(1); CPPUNIT_ASSERT_EQUAL(2, static_cast<int>(ackedStanzas.size())); CPPUNIT_ASSERT_EQUAL(std::string("m1"), ackedStanzas[0]->getID()); CPPUNIT_ASSERT_EQUAL(std::string("m2"), ackedStanzas[1]->getID()); } diff --git a/Swiften/StreamManagement/UnitTest/StanzaAckResponderTest.cpp b/Swiften/StreamManagement/UnitTest/StanzaAckResponderTest.cpp index ffdabe9..ee4b913 100644 --- a/Swiften/StreamManagement/UnitTest/StanzaAckResponderTest.cpp +++ b/Swiften/StreamManagement/UnitTest/StanzaAckResponderTest.cpp @@ -1,17 +1,18 @@ /* - * Copyright (c) 2010-2016 Isode Limited. + * Copyright (c) 2010-2018 Isode Limited. * All rights reserved. * See the COPYING file for more information. */ +#include <cstdint> + #include <boost/bind.hpp> -#include <boost/numeric/conversion/cast.hpp> #include <cppunit/extensions/HelperMacros.h> #include <cppunit/extensions/TestFactoryRegistry.h> #include <Swiften/Elements/Message.h> #include <Swiften/StreamManagement/StanzaAckResponder.h> using namespace Swift; @@ -57,19 +58,19 @@ class StanzaAckResponderTest : public CppUnit::TestFixture { CPPUNIT_ASSERT_EQUAL(2, static_cast<int>(acks.size())); CPPUNIT_ASSERT_EQUAL(1U, acks[0]); CPPUNIT_ASSERT_EQUAL(2U, acks[1]); } // Handle stanza ack count wrapping, as per the XEP void testHandleAckRequestReceived_WrapAround() { std::shared_ptr<StanzaAckResponder> testling(createResponder()); - testling->handledStanzasCount = boost::numeric_cast<unsigned int>((1ULL<<32) - 1); + testling->handledStanzasCount = UINT32_MAX; testling->handleStanzaReceived(); testling->handleStanzaReceived(); testling->handleAckRequestReceived(); CPPUNIT_ASSERT_EQUAL(1, static_cast<int>(acks.size())); CPPUNIT_ASSERT_EQUAL(1U, acks[0]); } |
Swift