• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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