Index: webrtc/libjingle/xmpp/pubsub_task.cc |
diff --git a/webrtc/libjingle/xmpp/pubsub_task.cc b/webrtc/libjingle/xmpp/pubsub_task.cc |
deleted file mode 100644 |
index 812cb95832cfef34d3116c2381511031e8532969..0000000000000000000000000000000000000000 |
--- a/webrtc/libjingle/xmpp/pubsub_task.cc |
+++ /dev/null |
@@ -1,201 +0,0 @@ |
-/* |
- * 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. |
- */ |
- |
-#include "webrtc/libjingle/xmpp/pubsub_task.h" |
- |
-#include <map> |
-#include <memory> |
-#include <string> |
- |
-#include "webrtc/libjingle/xmpp/constants.h" |
-#include "webrtc/libjingle/xmpp/xmppengine.h" |
-#include "webrtc/base/common.h" |
- |
-namespace buzz { |
- |
-PubsubTask::PubsubTask(XmppTaskParentInterface* parent, |
- const buzz::Jid& pubsub_node_jid) |
- : buzz::XmppTask(parent, buzz::XmppEngine::HL_SENDER), |
- pubsub_node_jid_(pubsub_node_jid) { |
-} |
- |
-PubsubTask::~PubsubTask() { |
-} |
- |
-// Checks for pubsub publish events as well as responses to get IQs. |
-bool PubsubTask::HandleStanza(const buzz::XmlElement* stanza) { |
- const buzz::QName& stanza_name(stanza->Name()); |
- if (stanza_name == buzz::QN_MESSAGE) { |
- if (MatchStanzaFrom(stanza, pubsub_node_jid_)) { |
- const buzz::XmlElement* pubsub_event_item = |
- stanza->FirstNamed(QN_PUBSUB_EVENT); |
- if (pubsub_event_item != NULL) { |
- QueueStanza(pubsub_event_item); |
- return true; |
- } |
- } |
- } else if (stanza_name == buzz::QN_IQ) { |
- if (MatchResponseIq(stanza, pubsub_node_jid_, task_id())) { |
- const buzz::XmlElement* pubsub_item = stanza->FirstNamed(QN_PUBSUB); |
- if (pubsub_item != NULL) { |
- QueueStanza(pubsub_item); |
- return true; |
- } |
- } |
- } |
- return false; |
-} |
- |
-int PubsubTask::ProcessResponse() { |
- const buzz::XmlElement* stanza = NextStanza(); |
- if (stanza == NULL) { |
- return STATE_BLOCKED; |
- } |
- |
- if (stanza->Attr(buzz::QN_TYPE) == buzz::STR_ERROR) { |
- OnPubsubError(stanza->FirstNamed(buzz::QN_ERROR)); |
- return STATE_RESPONSE; |
- } |
- |
- const buzz::QName& stanza_name(stanza->Name()); |
- if (stanza_name == QN_PUBSUB_EVENT) { |
- HandlePubsubEventMessage(stanza); |
- } else if (stanza_name == QN_PUBSUB) { |
- HandlePubsubIqGetResponse(stanza); |
- } |
- |
- return STATE_RESPONSE; |
-} |
- |
-// Registers a function pointer to be called when the value of the pubsub |
-// node changes. |
-// Note that this does not actually change the XMPP pubsub |
-// subscription. All publish events are always received by everyone in the |
-// MUC. This function just controls whether the handle function will get |
-// called when the event is received. |
-bool PubsubTask::SubscribeToNode(const std::string& pubsub_node, |
- NodeHandler handler) { |
- subscribed_nodes_[pubsub_node] = handler; |
- std::unique_ptr<buzz::XmlElement> get_iq_request( |
- MakeIq(buzz::STR_GET, pubsub_node_jid_, task_id())); |
- if (!get_iq_request) { |
- return false; |
- } |
- buzz::XmlElement* pubsub_element = new buzz::XmlElement(QN_PUBSUB, true); |
- buzz::XmlElement* items_element = new buzz::XmlElement(QN_PUBSUB_ITEMS, true); |
- |
- items_element->AddAttr(buzz::QN_NODE, pubsub_node); |
- pubsub_element->AddElement(items_element); |
- get_iq_request->AddElement(pubsub_element); |
- |
- if (SendStanza(get_iq_request.get()) != buzz::XMPP_RETURN_OK) { |
- return false; |
- } |
- |
- return true; |
-} |
- |
-void PubsubTask::UnsubscribeFromNode(const std::string& pubsub_node) { |
- subscribed_nodes_.erase(pubsub_node); |
-} |
- |
-void PubsubTask::OnPubsubError(const buzz::XmlElement* error_stanza) { |
-} |
- |
-// Checks for a pubsub event message like the following: |
-// |
-// <message from="muvc-private-chat-some-id@groupchat.google.com" |
-// to="john@site.com/gcomm582B14C9"> |
-// <event xmlns:"http://jabber.org/protocol/pubsub#event"> |
-// <items node="node-name"> |
-// <item id="some-id"> |
-// <payload/> |
-// </item> |
-// </items> |
-// </event> |
-// </message> |
-// |
-// It also checks for retraction event messages like the following: |
-// |
-// <message from="muvc-private-chat-some-id@groupchat.google.com" |
-// to="john@site.com/gcomm582B14C9"> |
-// <event xmlns:"http://jabber.org/protocol/pubsub#event"> |
-// <items node="node-name"> |
-// <retract id="some-id"/> |
-// </items> |
-// </event> |
-// </message> |
-void PubsubTask::HandlePubsubEventMessage( |
- const buzz::XmlElement* pubsub_event) { |
- ASSERT(pubsub_event->Name() == QN_PUBSUB_EVENT); |
- for (const buzz::XmlChild* child = pubsub_event->FirstChild(); |
- child != NULL; |
- child = child->NextChild()) { |
- const buzz::XmlElement* child_element = child->AsElement(); |
- const buzz::QName& child_name(child_element->Name()); |
- if (child_name == QN_PUBSUB_EVENT_ITEMS) { |
- HandlePubsubItems(child_element); |
- } |
- } |
-} |
- |
-// Checks for a response to an pubsub IQ get like the following: |
-// |
-// <iq from="muvc-private-chat-some-id@groupchat.google.com" |
-// to="john@site.com/gcomm582B14C9" |
-// type="result"> |
-// <pubsub xmlns:"http://jabber.org/protocol/pubsub"> |
-// <items node="node-name"> |
-// <item id="some-id"> |
-// <payload/> |
-// </item> |
-// </items> |
-// </event> |
-// </message> |
-void PubsubTask::HandlePubsubIqGetResponse( |
- const buzz::XmlElement* pubsub_iq_response) { |
- ASSERT(pubsub_iq_response->Name() == QN_PUBSUB); |
- for (const buzz::XmlChild* child = pubsub_iq_response->FirstChild(); |
- child != NULL; |
- child = child->NextChild()) { |
- const buzz::XmlElement* child_element = child->AsElement(); |
- const buzz::QName& child_name(child_element->Name()); |
- if (child_name == QN_PUBSUB_ITEMS) { |
- HandlePubsubItems(child_element); |
- } |
- } |
-} |
- |
-// Calls registered handlers in response to pubsub event or response to |
-// IQ pubsub get. |
-// 'items' is the child of a pubsub#event:event node or pubsub:pubsub node. |
-void PubsubTask::HandlePubsubItems(const buzz::XmlElement* items) { |
- ASSERT(items->HasAttr(QN_NODE)); |
- const std::string& node_name(items->Attr(QN_NODE)); |
- NodeSubscriptions::iterator iter = subscribed_nodes_.find(node_name); |
- if (iter != subscribed_nodes_.end()) { |
- NodeHandler handler = iter->second; |
- const buzz::XmlElement* item = items->FirstElement(); |
- while (item != NULL) { |
- const buzz::QName& item_name(item->Name()); |
- if (item_name != QN_PUBSUB_EVENT_ITEM && |
- item_name != QN_PUBSUB_EVENT_RETRACT && |
- item_name != QN_PUBSUB_ITEM) { |
- continue; |
- } |
- |
- (this->*handler)(item); |
- item = item->NextElement(); |
- } |
- return; |
- } |
-} |
- |
-} |