1 /* 2 * Copyright 2011 The WebRTC Project Authors. All rights reserved. 3 * 4 * Use of this source code is governed by a BSD-style license 5 * that can be found in the LICENSE file in the root of the source 6 * tree. An additional intellectual property rights grant can be found 7 * in the file PATENTS. All contributing project authors may 8 * be found in the AUTHORS file in the root of the source tree. 9 */ 10 11 #ifndef WEBRTC_LIBJINGLE_XMPP_PUBSUBTASKS_H_ 12 #define WEBRTC_LIBJINGLE_XMPP_PUBSUBTASKS_H_ 13 14 #include <vector> 15 16 #include "webrtc/libjingle/xmpp/iqtask.h" 17 #include "webrtc/libjingle/xmpp/receivetask.h" 18 #include "webrtc/base/sigslot.h" 19 20 namespace buzz { 21 22 // A PubSub itemid + payload. Useful for signaling items. 23 struct PubSubItem { 24 std::string itemid; 25 // The entire <item>, owned by the stanza handler. To keep a 26 // reference after handling, make a copy. 27 const XmlElement* elem; 28 }; 29 30 // An IqTask which gets a <pubsub><items> for a particular jid and 31 // node, parses the items in the response and signals the items. 32 class PubSubRequestTask : public IqTask { 33 public: 34 PubSubRequestTask(XmppTaskParentInterface* parent, 35 const Jid& pubsubjid, 36 const std::string& node); 37 38 sigslot::signal2<PubSubRequestTask*, 39 const std::vector<PubSubItem>&> SignalResult; 40 // SignalError inherited by IqTask. 41 private: 42 virtual void HandleResult(const XmlElement* stanza); 43 }; 44 45 // A ReceiveTask which listens for <event><items> of a particular 46 // pubsub JID and node and then signals them items. 47 class PubSubReceiveTask : public ReceiveTask { 48 public: PubSubReceiveTask(XmppTaskParentInterface * parent,const Jid & pubsubjid,const std::string & node)49 PubSubReceiveTask(XmppTaskParentInterface* parent, 50 const Jid& pubsubjid, 51 const std::string& node) 52 : ReceiveTask(parent), 53 pubsubjid_(pubsubjid), 54 node_(node) { 55 } 56 57 virtual int ProcessStart(); 58 sigslot::signal2<PubSubReceiveTask*, 59 const std::vector<PubSubItem>&> SignalUpdate; 60 61 protected: 62 virtual bool WantsStanza(const XmlElement* stanza); 63 virtual void ReceiveStanza(const XmlElement* stanza); 64 65 private: 66 Jid pubsubjid_; 67 std::string node_; 68 }; 69 70 // An IqTask which publishes a <pubsub><publish><item> to a particular 71 // pubsub jid and node. 72 class PubSubPublishTask : public IqTask { 73 public: 74 // Takes ownership of children 75 PubSubPublishTask(XmppTaskParentInterface* parent, 76 const Jid& pubsubjid, 77 const std::string& node, 78 const std::string& itemid, 79 const std::vector<XmlElement*>& children); 80 itemid()81 const std::string& itemid() const { return itemid_; } 82 83 sigslot::signal1<PubSubPublishTask*> SignalResult; 84 85 private: 86 // SignalError inherited by IqTask. 87 virtual void HandleResult(const XmlElement* stanza); 88 89 std::string itemid_; 90 }; 91 92 // An IqTask which publishes a <pubsub><publish><retract> to a particular 93 // pubsub jid and node. 94 class PubSubRetractTask : public IqTask { 95 public: 96 PubSubRetractTask(XmppTaskParentInterface* parent, 97 const Jid& pubsubjid, 98 const std::string& node, 99 const std::string& itemid); 100 itemid()101 const std::string& itemid() const { return itemid_; } 102 103 sigslot::signal1<PubSubRetractTask*> SignalResult; 104 105 private: 106 // SignalError inherited by IqTask. 107 virtual void HandleResult(const XmlElement* stanza); 108 109 std::string itemid_; 110 }; 111 112 } // namespace buzz 113 114 #endif // WEBRTC_LIBJINGLE_XMPP_PUBSUBTASKS_H_ 115