From b6246efcf15f03bb5b44bc79190bc9f4c7be9506 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Remko=20Tron=C3=A7on?= <git@el-tramo.be>
Date: Wed, 20 Apr 2011 20:48:38 +0200
Subject: Finished Stream Management parserialements.


diff --git a/Swiften/Elements/StreamManagementEnabled.cpp b/Swiften/Elements/StreamManagementEnabled.cpp
new file mode 100644
index 0000000..bab7516
--- /dev/null
+++ b/Swiften/Elements/StreamManagementEnabled.cpp
@@ -0,0 +1,15 @@
+/*
+ * Copyright (c) 2011 Remko Tronçon
+ * Licensed under the GNU General Public License v3.
+ * See Documentation/Licenses/GPLv3.txt for more information.
+ */
+
+#include <Swiften/Elements/StreamManagementEnabled.h>
+
+using namespace Swift;
+
+StreamManagementEnabled::StreamManagementEnabled() {
+}
+
+StreamManagementEnabled::~StreamManagementEnabled() {
+}
diff --git a/Swiften/Elements/StreamManagementEnabled.h b/Swiften/Elements/StreamManagementEnabled.h
index 0c72b84..02e77f3 100644
--- a/Swiften/Elements/StreamManagementEnabled.h
+++ b/Swiften/Elements/StreamManagementEnabled.h
@@ -1,17 +1,39 @@
 /*
- * Copyright (c) 2010 Remko Tronçon
+ * Copyright (c) 2010-2011 Remko Tronçon
  * Licensed under the GNU General Public License v3.
  * See Documentation/Licenses/GPLv3.txt for more information.
  */
 
 #pragma once
 
-#include "Swiften/Elements/Element.h"
+#include <string>
 
+#include <Swiften/Elements/Element.h>
 
 namespace Swift {
 	class StreamManagementEnabled : public Element {
 		public:
-			StreamManagementEnabled() {}
+			StreamManagementEnabled();
+			~StreamManagementEnabled();
+
+			void setResumeSupported() {
+				resumeSupported = true;
+			}
+
+			bool getResumeSupported() const {
+				return resumeSupported;
+			}
+
+			void setResumeID(const std::string& id) {
+				resumeID = id;
+			}
+
+			const std::string& getResumeID() const {
+				return resumeID;
+			}
+
+		private:
+			bool resumeSupported;
+			std::string resumeID;
 	};
 }
diff --git a/Swiften/Elements/StreamResume.cpp b/Swiften/Elements/StreamResume.cpp
new file mode 100644
index 0000000..d55ef78
--- /dev/null
+++ b/Swiften/Elements/StreamResume.cpp
@@ -0,0 +1,15 @@
+/*
+ * Copyright (c) 2011 Remko Tronçon
+ * Licensed under the GNU General Public License v3.
+ * See Documentation/Licenses/GPLv3.txt for more information.
+ */
+
+#include <Swiften/Elements/StreamResume.h>
+
+using namespace Swift;
+
+StreamResume::StreamResume() {
+}
+
+StreamResume::~StreamResume() {
+}
diff --git a/Swiften/Elements/StreamResume.h b/Swiften/Elements/StreamResume.h
new file mode 100644
index 0000000..652182a
--- /dev/null
+++ b/Swiften/Elements/StreamResume.h
@@ -0,0 +1,40 @@
+/*
+ * Copyright (c) 2011 Remko Tronçon
+ * Licensed under the GNU General Public License v3.
+ * See Documentation/Licenses/GPLv3.txt for more information.
+ */
+
+#pragma once
+
+#include <string>
+#include <boost/optional.hpp>
+
+#include <Swiften/Elements/Element.h>
+
+namespace Swift {
+	class StreamResume : public Element {
+		public:
+			StreamResume();
+			~StreamResume();
+
+			void setResumeID(const std::string& id) {
+				resumeID = id;
+			}
+
+			const std::string& getResumeID() const {
+				return resumeID;
+			}
+
+			const boost::optional<int> getHandledStanzasCount() const {
+				return handledStanzasCount;
+			}
+
+			void setHandledStanzasCount(int i) {
+				handledStanzasCount = i;
+			}
+
+		private:
+			std::string resumeID;
+			boost::optional<int> handledStanzasCount;
+	};
+}
diff --git a/Swiften/Elements/StreamResumed.cpp b/Swiften/Elements/StreamResumed.cpp
new file mode 100644
index 0000000..552e654
--- /dev/null
+++ b/Swiften/Elements/StreamResumed.cpp
@@ -0,0 +1,15 @@
+/*
+ * Copyright (c) 2011 Remko Tronçon
+ * Licensed under the GNU General Public License v3.
+ * See Documentation/Licenses/GPLv3.txt for more information.
+ */
+
+#include <Swiften/Elements/StreamResumed.h>
+
+using namespace Swift;
+
+StreamResumed::StreamResumed() {
+}
+
+StreamResumed::~StreamResumed() {
+}
diff --git a/Swiften/Elements/StreamResumed.h b/Swiften/Elements/StreamResumed.h
new file mode 100644
index 0000000..cc42895
--- /dev/null
+++ b/Swiften/Elements/StreamResumed.h
@@ -0,0 +1,40 @@
+/*
+ * Copyright (c) 2011 Remko Tronçon
+ * Licensed under the GNU General Public License v3.
+ * See Documentation/Licenses/GPLv3.txt for more information.
+ */
+
+#pragma once
+
+#include <string>
+#include <boost/optional.hpp>
+
+#include <Swiften/Elements/Element.h>
+
+namespace Swift {
+	class StreamResumed : public Element {
+		public:
+			StreamResumed();
+			~StreamResumed();
+
+			void setResumeID(const std::string& id) {
+				resumeID = id;
+			}
+
+			const std::string& getResumeID() const {
+				return resumeID;
+			}
+
+			const boost::optional<int> getHandledStanzasCount() const {
+				return handledStanzasCount;
+			}
+
+			void setHandledStanzasCount(int i) {
+				handledStanzasCount = i;
+			}
+
+		private:
+			std::string resumeID;
+			boost::optional<int> handledStanzasCount;
+	};
+}
diff --git a/Swiften/Parser/SConscript b/Swiften/Parser/SConscript
index 03e4208..e7e8991 100644
--- a/Swiften/Parser/SConscript
+++ b/Swiften/Parser/SConscript
@@ -59,6 +59,8 @@ sources = [
 		"StanzaParser.cpp",
 		"StreamErrorParser.cpp",
 		"StreamFeaturesParser.cpp",
+		"StreamManagementEnabledParser.cpp",
+		"StreamResumeParser.cpp",
 		"XMLParser.cpp",
 		"XMLParserClient.cpp",
 		"XMLParserFactory.cpp",
diff --git a/Swiften/Parser/StreamManagementEnabledParser.cpp b/Swiften/Parser/StreamManagementEnabledParser.cpp
new file mode 100644
index 0000000..906e071
--- /dev/null
+++ b/Swiften/Parser/StreamManagementEnabledParser.cpp
@@ -0,0 +1,29 @@
+/*
+ * Copyright (c) 2011 Remko Tronçon
+ * Licensed under the GNU General Public License v3.
+ * See Documentation/Licenses/GPLv3.txt for more information.
+ */
+
+#include <Swiften/Parser/StreamManagementEnabledParser.h>
+
+using namespace Swift;
+
+StreamManagementEnabledParser::StreamManagementEnabledParser() : level(TopLevel) {
+}
+
+StreamManagementEnabledParser::~StreamManagementEnabledParser() {
+}
+
+void StreamManagementEnabledParser::handleStartElement(const std::string&, const std::string&, const AttributeMap& attributes) {
+	if (level == TopLevel) {
+		if (attributes.getBoolAttribute("resume", false)) {
+			getElementGeneric()->setResumeSupported();
+		}
+		getElementGeneric()->setResumeID(attributes.getAttribute("id"));
+	}
+	++level;
+}
+
+void StreamManagementEnabledParser::handleEndElement(const std::string&, const std::string&) {
+	--level;
+}
diff --git a/Swiften/Parser/StreamManagementEnabledParser.h b/Swiften/Parser/StreamManagementEnabledParser.h
index adc45ab..db616af 100644
--- a/Swiften/Parser/StreamManagementEnabledParser.h
+++ b/Swiften/Parser/StreamManagementEnabledParser.h
@@ -1,17 +1,27 @@
 /*
- * Copyright (c) 2010 Remko Tronçon
+ * Copyright (c) 2010-2011 Remko Tronçon
  * Licensed under the GNU General Public License v3.
  * See Documentation/Licenses/GPLv3.txt for more information.
  */
 
 #pragma once
 
-#include "Swiften/Parser/GenericElementParser.h"
-#include "Swiften/Elements/StreamManagementEnabled.h"
+#include <Swiften/Parser/GenericElementParser.h>
+#include <Swiften/Elements/StreamManagementEnabled.h>
 
 namespace Swift {
 	class StreamManagementEnabledParser : public GenericElementParser<StreamManagementEnabled> {
 		public:
-			StreamManagementEnabledParser() : GenericElementParser<StreamManagementEnabled>() {}
+			StreamManagementEnabledParser();
+			~StreamManagementEnabledParser();
+
+			virtual void handleStartElement(const std::string&, const std::string&, const AttributeMap&);
+			virtual void handleEndElement(const std::string&, const std::string&);
+
+		private:
+			enum Level { 
+				TopLevel = 0
+			};
+			int level;
 	};
 }
diff --git a/Swiften/Parser/StreamResumeParser.cpp b/Swiften/Parser/StreamResumeParser.cpp
new file mode 100644
index 0000000..f54dcf0
--- /dev/null
+++ b/Swiften/Parser/StreamResumeParser.cpp
@@ -0,0 +1,36 @@
+/*
+ * Copyright (c) 2011 Remko Tronçon
+ * Licensed under the GNU General Public License v3.
+ * See Documentation/Licenses/GPLv3.txt for more information.
+ */
+
+#include <Swiften/Parser/StreamResumeParser.h>
+
+#include <boost/lexical_cast.hpp>
+
+using namespace Swift;
+
+StreamResumeParser::StreamResumeParser() : level(TopLevel) {
+}
+
+StreamResumeParser::~StreamResumeParser() {
+}
+
+void StreamResumeParser::handleStartElement(const std::string&, const std::string&, const AttributeMap& attributes) {
+	if (level == TopLevel) {
+		boost::optional<std::string> handledStanzasCount = attributes.getAttributeValue("h");
+		if (handledStanzasCount) {
+			try {
+				getElementGeneric()->setHandledStanzasCount(boost::lexical_cast<int>(*handledStanzasCount));
+			}
+			catch (const boost::bad_lexical_cast &) {
+			}
+		}
+		getElementGeneric()->setResumeID(attributes.getAttribute("previd"));
+	}
+	++level;
+}
+
+void StreamResumeParser::handleEndElement(const std::string&, const std::string&) {
+	--level;
+}
diff --git a/Swiften/Parser/StreamResumeParser.h b/Swiften/Parser/StreamResumeParser.h
new file mode 100644
index 0000000..0ccd24c
--- /dev/null
+++ b/Swiften/Parser/StreamResumeParser.h
@@ -0,0 +1,27 @@
+/*
+ * Copyright (c) 2011 Remko Tronçon
+ * Licensed under the GNU General Public License v3.
+ * See Documentation/Licenses/GPLv3.txt for more information.
+ */
+
+#pragma once
+
+#include <Swiften/Parser/GenericElementParser.h>
+#include <Swiften/Elements/StreamResume.h>
+
+namespace Swift {
+	class StreamResumeParser : public GenericElementParser<StreamResume> {
+		public:
+			StreamResumeParser();
+			~StreamResumeParser();
+
+			virtual void handleStartElement(const std::string&, const std::string&, const AttributeMap&);
+			virtual void handleEndElement(const std::string&, const std::string&);
+
+		private:
+			enum Level { 
+				TopLevel = 0
+			};
+			int level;
+	};
+}
diff --git a/Swiften/Parser/UnitTest/StreamManagementEnabledParserTest.cpp b/Swiften/Parser/UnitTest/StreamManagementEnabledParserTest.cpp
new file mode 100644
index 0000000..07b7b31
--- /dev/null
+++ b/Swiften/Parser/UnitTest/StreamManagementEnabledParserTest.cpp
@@ -0,0 +1,34 @@
+/*
+ * Copyright (c) 2010 Remko Tronçon
+ * Licensed under the GNU General Public License v3.
+ * See Documentation/Licenses/GPLv3.txt for more information.
+ */
+
+#include <cppunit/extensions/HelperMacros.h>
+#include <cppunit/extensions/TestFactoryRegistry.h>
+
+#include <Swiften/Parser/StreamManagementEnabledParser.h>
+#include <Swiften/Parser/UnitTest/ElementParserTester.h>
+
+using namespace Swift;
+
+class StreamManagementEnabledParserTest : public CppUnit::TestFixture {
+		CPPUNIT_TEST_SUITE(StreamManagementEnabledParserTest);
+		CPPUNIT_TEST(testParse);
+		CPPUNIT_TEST_SUITE_END();
+
+	public:
+		void testParse() {
+			StreamManagementEnabledParser testling;
+			ElementParserTester parser(&testling);
+
+			CPPUNIT_ASSERT(parser.parse(
+				"<enabled xmlns=\"urn:xmpp:sm:3\" id=\"some-long-sm-id\" resume=\"true\"/>"));
+
+			boost::shared_ptr<StreamManagementEnabled> element = boost::dynamic_pointer_cast<StreamManagementEnabled>(testling.getElement());
+			CPPUNIT_ASSERT(element->getResumeSupported());
+			CPPUNIT_ASSERT_EQUAL(std::string("some-long-sm-id"), element->getResumeID());
+		}
+};
+
+CPPUNIT_TEST_SUITE_REGISTRATION(StreamManagementEnabledParserTest);
diff --git a/Swiften/Parser/XMPPParser.cpp b/Swiften/Parser/XMPPParser.cpp
index 1fb7682..adcfdf5 100644
--- a/Swiften/Parser/XMPPParser.cpp
+++ b/Swiften/Parser/XMPPParser.cpp
@@ -29,6 +29,7 @@
 #include "Swiften/Parser/EnableStreamManagementParser.h"
 #include "Swiften/Parser/StreamManagementEnabledParser.h"
 #include "Swiften/Parser/StreamManagementFailedParser.h"
+#include "Swiften/Parser/StreamResumeParser.h"
 #include "Swiften/Parser/StanzaAckParser.h"
 #include "Swiften/Parser/StanzaAckRequestParser.h"
 #include "Swiften/Parser/StartTLSParser.h"
@@ -182,6 +183,12 @@ ElementParser* XMPPParser::createElementParser(const std::string& element, const
 	else if (element == "failed" && ns == "urn:xmpp:sm:2") {
 		return new StreamManagementFailedParser();
 	}
+	else if (element == "resume" && ns == "urn:xmpp:sm:2") {
+		return new StreamResumeParser();
+	}
+	else if (element == "resumed" && ns == "urn:xmpp:sm:2") {
+		return new StreamResumeParser();
+	}
 	else if (element == "a" && ns == "urn:xmpp:sm:2") {
 		return new StanzaAckParser();
 	}
diff --git a/Swiften/SConscript b/Swiften/SConscript
index d2706f1..7c1f70f 100644
--- a/Swiften/SConscript
+++ b/Swiften/SConscript
@@ -77,6 +77,9 @@ if env["SCONS_STAGE"] == "build" :
 			"Elements/RosterPayload.cpp",
 			"Elements/Stanza.cpp",
 			"Elements/StatusShow.cpp",
+			"Elements/StreamManagementEnabled.cpp",
+			"Elements/StreamResume.cpp",
+			"Elements/StreamResumed.cpp",
 			"Elements/VCard.cpp",
 			"Elements/MUCOccupant.cpp",
 			"Entity/Entity.cpp",
@@ -105,6 +108,9 @@ if env["SCONS_STAGE"] == "build" :
 			"Serializer/CompressRequestSerializer.cpp",
 			"Serializer/ElementSerializer.cpp",
 			"Serializer/MessageSerializer.cpp",
+			"Serializer/StreamManagementEnabledSerializer.cpp",
+			"Serializer/StreamResumeSerializer.cpp",
+			"Serializer/StreamResumedSerializer.cpp",
 			"Serializer/ComponentHandshakeSerializer.cpp",
 			"Serializer/PayloadSerializer.cpp",
 			"Serializer/PayloadSerializerCollection.cpp",
@@ -265,6 +271,7 @@ if env["SCONS_STAGE"] == "build" :
 			File("Parser/UnitTest/SerializingParserTest.cpp"),
 			File("Parser/UnitTest/StanzaParserTest.cpp"),
 			File("Parser/UnitTest/StreamFeaturesParserTest.cpp"),
+			File("Parser/UnitTest/StreamManagementEnabledParserTest.cpp"),
 			File("Parser/UnitTest/XMLParserTest.cpp"),
 			File("Parser/UnitTest/XMPPParserTest.cpp"),
 			File("Presence/UnitTest/PresenceOracleTest.cpp"),
diff --git a/Swiften/Serializer/StreamManagementEnabledSerializer.cpp b/Swiften/Serializer/StreamManagementEnabledSerializer.cpp
new file mode 100644
index 0000000..02cf948
--- /dev/null
+++ b/Swiften/Serializer/StreamManagementEnabledSerializer.cpp
@@ -0,0 +1,29 @@
+/*
+ * Copyright (c) 2010 Remko Tronçon
+ * Licensed under the GNU General Public License v3.
+ * See Documentation/Licenses/GPLv3.txt for more information.
+ */
+
+#include <Swiften/Serializer/StreamManagementEnabledSerializer.h>
+
+#include <boost/shared_ptr.hpp>
+
+#include <Swiften/Elements/StreamManagementEnabled.h>
+#include <Swiften/Serializer/XML/XMLElement.h>
+
+using namespace Swift;
+
+StreamManagementEnabledSerializer::StreamManagementEnabledSerializer() : GenericElementSerializer<StreamManagementEnabled>() {
+}
+
+std::string StreamManagementEnabledSerializer::serialize(boost::shared_ptr<Element> el) const {
+	boost::shared_ptr<StreamManagementEnabled> e(boost::dynamic_pointer_cast<StreamManagementEnabled>(el));
+	XMLElement element("enabled", "urn:xmpp:sm:2");
+	if (!e->getResumeID().empty()) {
+		element.setAttribute("id", e->getResumeID());
+	}
+	if (e->getResumeSupported()) {
+		element.setAttribute("resume", "true");
+	}
+	return element.serialize();
+}
diff --git a/Swiften/Serializer/StreamManagementEnabledSerializer.h b/Swiften/Serializer/StreamManagementEnabledSerializer.h
index fc7bd86..8ee9e31 100644
--- a/Swiften/Serializer/StreamManagementEnabledSerializer.h
+++ b/Swiften/Serializer/StreamManagementEnabledSerializer.h
@@ -10,16 +10,12 @@
 
 #include "Swiften/Elements/StreamManagementEnabled.h"
 #include "Swiften/Serializer/GenericElementSerializer.h"
-#include "Swiften/Serializer/XML/XMLElement.h"
 
 namespace Swift {
 	class StreamManagementEnabledSerializer : public GenericElementSerializer<StreamManagementEnabled> {
 		public:
-			StreamManagementEnabledSerializer() : GenericElementSerializer<StreamManagementEnabled>() {
-			}
+			StreamManagementEnabledSerializer();
 
-			virtual std::string serialize(boost::shared_ptr<Element>) const {
-				return XMLElement("enabled", "urn:xmpp:sm:2").serialize();
-			}
+			virtual std::string serialize(boost::shared_ptr<Element>) const;
 	};
 }
diff --git a/Swiften/Serializer/StreamResumeSerializer.cpp b/Swiften/Serializer/StreamResumeSerializer.cpp
new file mode 100644
index 0000000..a7a2e3b
--- /dev/null
+++ b/Swiften/Serializer/StreamResumeSerializer.cpp
@@ -0,0 +1,28 @@
+/*
+ * Copyright (c) 2011 Remko Tronçon
+ * Licensed under the GNU General Public License v3.
+ * See Documentation/Licenses/GPLv3.txt for more information.
+ */
+
+#include <Swiften/Serializer/StreamResumeSerializer.h>
+
+#include <boost/shared_ptr.hpp>
+#include <boost/lexical_cast.hpp>
+
+#include <Swiften/Elements/StreamResume.h>
+#include <Swiften/Serializer/XML/XMLElement.h>
+
+using namespace Swift;
+
+StreamResumeSerializer::StreamResumeSerializer() : GenericElementSerializer<StreamResume>() {
+}
+
+std::string StreamResumeSerializer::serialize(boost::shared_ptr<Element> el) const {
+	boost::shared_ptr<StreamResume> e(boost::dynamic_pointer_cast<StreamResume>(el));
+	XMLElement element("resume", "urn:xmpp:sm:2");
+	element.setAttribute("previd", e->getResumeID());
+	if (e->getHandledStanzasCount()) {
+		element.setAttribute("h", boost::lexical_cast<std::string>(e->getHandledStanzasCount()));
+	}
+	return element.serialize();
+}
diff --git a/Swiften/Serializer/StreamResumeSerializer.h b/Swiften/Serializer/StreamResumeSerializer.h
new file mode 100644
index 0000000..6ea7365
--- /dev/null
+++ b/Swiften/Serializer/StreamResumeSerializer.h
@@ -0,0 +1,21 @@
+/*
+ * Copyright (c) 2011 Remko Tronçon
+ * Licensed under the GNU General Public License v3.
+ * See Documentation/Licenses/GPLv3.txt for more information.
+ */
+
+#pragma once
+
+#include <boost/shared_ptr.hpp>
+
+#include <Swiften/Elements/StreamResume.h>
+#include <Swiften/Serializer/GenericElementSerializer.h>
+
+namespace Swift {
+	class StreamResumeSerializer : public GenericElementSerializer<StreamResume> {
+		public:
+			StreamResumeSerializer();
+
+			virtual std::string serialize(boost::shared_ptr<Element>) const;
+	};
+}
diff --git a/Swiften/Serializer/StreamResumedSerializer.cpp b/Swiften/Serializer/StreamResumedSerializer.cpp
new file mode 100644
index 0000000..d3beafb
--- /dev/null
+++ b/Swiften/Serializer/StreamResumedSerializer.cpp
@@ -0,0 +1,28 @@
+/*
+ * Copyright (c) 2011 Remko Tronçon
+ * Licensed under the GNU General Public License v3.
+ * See Documentation/Licenses/GPLv3.txt for more information.
+ */
+
+#include <Swiften/Serializer/StreamResumedSerializer.h>
+
+#include <boost/shared_ptr.hpp>
+#include <boost/lexical_cast.hpp>
+
+#include <Swiften/Elements/StreamResumed.h>
+#include <Swiften/Serializer/XML/XMLElement.h>
+
+using namespace Swift;
+
+StreamResumedSerializer::StreamResumedSerializer() : GenericElementSerializer<StreamResumed>() {
+}
+
+std::string StreamResumedSerializer::serialize(boost::shared_ptr<Element> el) const {
+	boost::shared_ptr<StreamResumed> e(boost::dynamic_pointer_cast<StreamResumed>(el));
+	XMLElement element("resumed", "urn:xmpp:sm:2");
+	element.setAttribute("previd", e->getResumeID());
+	if (e->getHandledStanzasCount()) {
+		element.setAttribute("h", boost::lexical_cast<std::string>(e->getHandledStanzasCount()));
+	}
+	return element.serialize();
+}
diff --git a/Swiften/Serializer/StreamResumedSerializer.h b/Swiften/Serializer/StreamResumedSerializer.h
new file mode 100644
index 0000000..38d846f
--- /dev/null
+++ b/Swiften/Serializer/StreamResumedSerializer.h
@@ -0,0 +1,21 @@
+/*
+ * Copyright (c) 2011 Remko Tronçon
+ * Licensed under the GNU General Public License v3.
+ * See Documentation/Licenses/GPLv3.txt for more information.
+ */
+
+#pragma once
+
+#include <boost/shared_ptr.hpp>
+
+#include <Swiften/Elements/StreamResumed.h>
+#include <Swiften/Serializer/GenericElementSerializer.h>
+
+namespace Swift {
+	class StreamResumedSerializer : public GenericElementSerializer<StreamResumed> {
+		public:
+			StreamResumedSerializer();
+
+			virtual std::string serialize(boost::shared_ptr<Element>) const;
+	};
+}
diff --git a/Swiften/Serializer/XMPPSerializer.cpp b/Swiften/Serializer/XMPPSerializer.cpp
index 06f3558..19a30ce 100644
--- a/Swiften/Serializer/XMPPSerializer.cpp
+++ b/Swiften/Serializer/XMPPSerializer.cpp
@@ -4,36 +4,38 @@
  * See Documentation/Licenses/GPLv3.txt for more information.
  */
 
-#include "Swiften/Serializer/XMPPSerializer.h"
+#include <Swiften/Serializer/XMPPSerializer.h>
 
 #include <boost/bind.hpp>
 #include <boost/smart_ptr/make_shared.hpp>
 #include <iostream>
 #include <cassert>
 
-#include "Swiften/Elements/ProtocolHeader.h"
-#include "Swiften/Base/foreach.h"
-#include "Swiften/Serializer/CompressRequestSerializer.h"
-#include "Swiften/Serializer/CompressFailureSerializer.h"
-#include "Swiften/Serializer/StreamErrorSerializer.h"
-#include "Swiften/Serializer/StreamFeaturesSerializer.h"
-#include "Swiften/Serializer/AuthRequestSerializer.h"
-#include "Swiften/Serializer/AuthFailureSerializer.h"
-#include "Swiften/Serializer/AuthSuccessSerializer.h"
-#include "Swiften/Serializer/AuthChallengeSerializer.h"
-#include "Swiften/Serializer/AuthResponseSerializer.h"
-#include "Swiften/Serializer/EnableStreamManagementSerializer.h"
-#include "Swiften/Serializer/StreamManagementEnabledSerializer.h"
-#include "Swiften/Serializer/StreamManagementFailedSerializer.h"
-#include "Swiften/Serializer/StanzaAckSerializer.h"
-#include "Swiften/Serializer/StanzaAckRequestSerializer.h"
-#include "Swiften/Serializer/StartTLSRequestSerializer.h"
-#include "Swiften/Serializer/StartTLSFailureSerializer.h"
-#include "Swiften/Serializer/TLSProceedSerializer.h"
-#include "Swiften/Serializer/MessageSerializer.h"
-#include "Swiften/Serializer/PresenceSerializer.h"
-#include "Swiften/Serializer/IQSerializer.h"
-#include "Swiften/Serializer/ComponentHandshakeSerializer.h"
+#include <Swiften/Elements/ProtocolHeader.h>
+#include <Swiften/Base/foreach.h>
+#include <Swiften/Serializer/CompressRequestSerializer.h>
+#include <Swiften/Serializer/CompressFailureSerializer.h>
+#include <Swiften/Serializer/StreamErrorSerializer.h>
+#include <Swiften/Serializer/StreamFeaturesSerializer.h>
+#include <Swiften/Serializer/AuthRequestSerializer.h>
+#include <Swiften/Serializer/AuthFailureSerializer.h>
+#include <Swiften/Serializer/AuthSuccessSerializer.h>
+#include <Swiften/Serializer/AuthChallengeSerializer.h>
+#include <Swiften/Serializer/AuthResponseSerializer.h>
+#include <Swiften/Serializer/EnableStreamManagementSerializer.h>
+#include <Swiften/Serializer/StreamManagementEnabledSerializer.h>
+#include <Swiften/Serializer/StreamResumeSerializer.h>
+#include <Swiften/Serializer/StreamResumedSerializer.h>
+#include <Swiften/Serializer/StreamManagementFailedSerializer.h>
+#include <Swiften/Serializer/StanzaAckSerializer.h>
+#include <Swiften/Serializer/StanzaAckRequestSerializer.h>
+#include <Swiften/Serializer/StartTLSRequestSerializer.h>
+#include <Swiften/Serializer/StartTLSFailureSerializer.h>
+#include <Swiften/Serializer/TLSProceedSerializer.h>
+#include <Swiften/Serializer/MessageSerializer.h>
+#include <Swiften/Serializer/PresenceSerializer.h>
+#include <Swiften/Serializer/IQSerializer.h>
+#include <Swiften/Serializer/ComponentHandshakeSerializer.h>
 
 namespace Swift {
 
@@ -56,6 +58,8 @@ XMPPSerializer::XMPPSerializer(PayloadSerializerCollection* payloadSerializers,
 	serializers_.push_back(boost::make_shared<EnableStreamManagementSerializer>());
 	serializers_.push_back(boost::make_shared<StreamManagementEnabledSerializer>());
 	serializers_.push_back(boost::make_shared<StreamManagementFailedSerializer>());
+	serializers_.push_back(boost::make_shared<StreamResumeSerializer>());
+	serializers_.push_back(boost::make_shared<StreamResumedSerializer>());
 	serializers_.push_back(boost::make_shared<StanzaAckSerializer>());
 	serializers_.push_back(boost::make_shared<StanzaAckRequestSerializer>());
 	serializers_.push_back(boost::make_shared<ComponentHandshakeSerializer>());
-- 
cgit v0.10.2-6-g49f6