| Index: webrtc/libjingle/xmpp/pubsub_task.h | 
| diff --git a/webrtc/libjingle/xmpp/pubsub_task.h b/webrtc/libjingle/xmpp/pubsub_task.h | 
| new file mode 100644 | 
| index 0000000000000000000000000000000000000000..b1923a0eb66fceae2c018a05d3059c7e7ef63f10 | 
| --- /dev/null | 
| +++ b/webrtc/libjingle/xmpp/pubsub_task.h | 
| @@ -0,0 +1,58 @@ | 
| +/* | 
| + *  Copyright 2004 The WebRTC Project Authors. All rights reserved. | 
| + * | 
| + *  Use of this source code is governed by a BSD-style license | 
| + *  that can be found in the LICENSE file in the root of the source | 
| + *  tree. An additional intellectual property rights grant can be found | 
| + *  in the file PATENTS.  All contributing project authors may | 
| + *  be found in the AUTHORS file in the root of the source tree. | 
| + */ | 
| + | 
| +#ifndef WEBRTC_LIBJINGLE_XMPP_PUBSUB_TASK_H_ | 
| +#define WEBRTC_LIBJINGLE_XMPP_PUBSUB_TASK_H_ | 
| + | 
| +#include <map> | 
| +#include <string> | 
| +#include "webrtc/libjingle/xmllite/xmlelement.h" | 
| +#include "webrtc/libjingle/xmpp/jid.h" | 
| +#include "webrtc/libjingle/xmpp/xmpptask.h" | 
| + | 
| +namespace buzz { | 
| + | 
| +// Base class to help write pubsub tasks. | 
| +// In ProcessStart call SubscribeNode with namespaces of interest along with | 
| +// NodeHandlers. | 
| +// When pubsub notifications arrive and matches the namespace, the NodeHandlers | 
| +// will be called back. | 
| +class PubsubTask : public buzz::XmppTask { | 
| + public: | 
| +  virtual ~PubsubTask(); | 
| + | 
| + protected: | 
| +  typedef void (PubsubTask::*NodeHandler)(const buzz::XmlElement* node); | 
| + | 
| +  PubsubTask(XmppTaskParentInterface* parent, const buzz::Jid& pubsub_node_jid); | 
| + | 
| +  virtual bool HandleStanza(const buzz::XmlElement* stanza); | 
| +  virtual int ProcessResponse(); | 
| + | 
| +  bool SubscribeToNode(const std::string& pubsub_node, NodeHandler handler); | 
| +  void UnsubscribeFromNode(const std::string& pubsub_node); | 
| + | 
| +  // Called when there is an error. Derived class can do what it needs to. | 
| +  virtual void OnPubsubError(const buzz::XmlElement* error_stanza); | 
| + | 
| + private: | 
| +  typedef std::map<std::string, NodeHandler> NodeSubscriptions; | 
| + | 
| +  void HandlePubsubIqGetResponse(const buzz::XmlElement* pubsub_iq_response); | 
| +  void HandlePubsubEventMessage(const buzz::XmlElement* pubsub_event_message); | 
| +  void HandlePubsubItems(const buzz::XmlElement* items); | 
| + | 
| +  buzz::Jid pubsub_node_jid_; | 
| +  NodeSubscriptions subscribed_nodes_; | 
| +}; | 
| + | 
| +}  // namespace buzz | 
| + | 
| +#endif // WEBRTC_LIBJINGLE_XMPP_PUBSUB_TASK_H_ | 
|  |