diff options
Diffstat (limited to 'Swiften/Queries/Request.cpp')
| -rw-r--r-- | Swiften/Queries/Request.cpp | 12 | 
1 files changed, 8 insertions, 4 deletions
diff --git a/Swiften/Queries/Request.cpp b/Swiften/Queries/Request.cpp index 189bbaa..a788e91 100644 --- a/Swiften/Queries/Request.cpp +++ b/Swiften/Queries/Request.cpp @@ -4,17 +4,20 @@  namespace Swift { -Request::Request(IQ::Type type, const JID& receiver, boost::shared_ptr<Payload> payload, IQRouter* router, AutoDeleteBehavior autoDeleteBehavior) : IQHandler(router), type_(type), receiver_(receiver), payload_(payload), autoDeleteBehavior_(autoDeleteBehavior), sent_(false) { -	id_ = getRouter()->getNewIQID(); +Request::Request(IQ::Type type, const JID& receiver, boost::shared_ptr<Payload> payload, IQRouter* router, AutoDeleteBehavior autoDeleteBehavior) : router_(router), type_(type), receiver_(receiver), payload_(payload), autoDeleteBehavior_(autoDeleteBehavior), sent_(false) {  }  void Request::send() { +	assert(!sent_); +	sent_ = true; +  	boost::shared_ptr<IQ> iq(new IQ(type_));  	iq->setTo(receiver_);  	iq->addPayload(payload_); +	id_ = router_->getNewIQID();  	iq->setID(id_); -	sent_ = true; -	getRouter()->sendIQ(iq); +	router_->addHandler(this); +	router_->sendIQ(iq);  }  bool Request::handleIQ(boost::shared_ptr<IQ> iq) { @@ -27,6 +30,7 @@ bool Request::handleIQ(boost::shared_ptr<IQ> iq) {  			// FIXME: Get proper error  			handleResponse(boost::shared_ptr<Payload>(), boost::optional<Error>(Error::UndefinedCondition));  		} +		router_->removeHandler(this);  		if (autoDeleteBehavior_ == AutoDeleteAfterResponse) {  			MainEventLoop::deleteLater(this);  		}  | 
 Swift