From ad14f307e7b9647ac2ff96cd1947e709dd45f73d Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Remko=20Tron=C3=A7on?= <git@el-tramo.be>
Date: Mon, 7 May 2012 19:20:10 +0200
Subject: Added convenience method for responding with a custom error payload.


diff --git a/Swiften/Elements/IQ.cpp b/Swiften/Elements/IQ.cpp
index 8e6d7cc..8c0f692 100644
--- a/Swiften/Elements/IQ.cpp
+++ b/Swiften/Elements/IQ.cpp
@@ -44,20 +44,24 @@ boost::shared_ptr<IQ> IQ::createResult(const JID& to, const JID& from, const std
 	return iq;
 }
 
-boost::shared_ptr<IQ> IQ::createError(const JID& to, const std::string& id, ErrorPayload::Condition condition, ErrorPayload::Type type) {
+boost::shared_ptr<IQ> IQ::createError(const JID& to, const std::string& id, ErrorPayload::Condition condition, ErrorPayload::Type type, boost::shared_ptr<Payload> payload) {
 	boost::shared_ptr<IQ> iq = boost::make_shared<IQ>(IQ::Error);
 	iq->setTo(to);
 	iq->setID(id);
-	iq->addPayload(boost::make_shared<Swift::ErrorPayload>(condition, type));
+	boost::shared_ptr<ErrorPayload> errorPayload = boost::make_shared<Swift::ErrorPayload>(condition, type);
+	errorPayload->setPayload(payload);
+	iq->addPayload(errorPayload);
 	return iq;
 }
 
-boost::shared_ptr<IQ> IQ::createError(const JID& to, const JID& from, const std::string& id, ErrorPayload::Condition condition, ErrorPayload::Type type) {
+boost::shared_ptr<IQ> IQ::createError(const JID& to, const JID& from, const std::string& id, ErrorPayload::Condition condition, ErrorPayload::Type type, boost::shared_ptr<Payload> payload) {
 	boost::shared_ptr<IQ> iq = boost::make_shared<IQ>(IQ::Error);
 	iq->setTo(to);
 	iq->setFrom(from);
 	iq->setID(id);
-	iq->addPayload(boost::make_shared<Swift::ErrorPayload>(condition, type));
+	boost::shared_ptr<ErrorPayload> errorPayload = boost::make_shared<Swift::ErrorPayload>(condition, type);
+	errorPayload->setPayload(payload);
+	iq->addPayload(errorPayload);
 	return iq;
 }
 
diff --git a/Swiften/Elements/IQ.h b/Swiften/Elements/IQ.h
index 05cd96a..99561f8 100644
--- a/Swiften/Elements/IQ.h
+++ b/Swiften/Elements/IQ.h
@@ -41,13 +41,15 @@ namespace Swift {
 					const JID& to,
 					const std::string& id,
 					ErrorPayload::Condition condition = ErrorPayload::BadRequest,
-					ErrorPayload::Type type = ErrorPayload::Cancel);
+					ErrorPayload::Type type = ErrorPayload::Cancel,
+					boost::shared_ptr<Payload> payload = boost::shared_ptr<Payload>());
 			static boost::shared_ptr<IQ> createError(
 					const JID& to,
 					const JID& from,
 					const std::string& id,
 					ErrorPayload::Condition condition = ErrorPayload::BadRequest,
-					ErrorPayload::Type type = ErrorPayload::Cancel);
+					ErrorPayload::Type type = ErrorPayload::Cancel,
+					boost::shared_ptr<Payload> payload = boost::shared_ptr<Payload>());
 
 		private:
 			Type type_;
diff --git a/Swiften/Queries/Responder.h b/Swiften/Queries/Responder.h
index 2ba9c24..edcaa52 100644
--- a/Swiften/Queries/Responder.h
+++ b/Swiften/Queries/Responder.h
@@ -83,15 +83,15 @@ namespace Swift {
 			/**
 			 * Convenience function for responding with an error.
 			 */
-			void sendError(const JID& to, const std::string& id, ErrorPayload::Condition condition, ErrorPayload::Type type) {
-				router_->sendIQ(IQ::createError(to, id, condition, type));
+			void sendError(const JID& to, const std::string& id, ErrorPayload::Condition condition, ErrorPayload::Type type, Payload::ref payload = Payload::ref()) {
+				router_->sendIQ(IQ::createError(to, id, condition, type, payload));
 			}
 
 			/**
 			 * Convenience function for responding with an error from a specific from address.
 			 */
-			void sendError(const JID& to, const JID& from, const std::string& id, ErrorPayload::Condition condition, ErrorPayload::Type type) {
-				router_->sendIQ(IQ::createError(to, from, id, condition, type));
+			void sendError(const JID& to, const JID& from, const std::string& id, ErrorPayload::Condition condition, ErrorPayload::Type type, Payload::ref payload = Payload::ref()) {
+				router_->sendIQ(IQ::createError(to, from, id, condition, type, payload));
 			}
 
 			IQRouter* getIQRouter() const {
-- 
cgit v0.10.2-6-g49f6