| Index: chrome/browser/sync/notifier/listener/subscribe_task.cc
|
| ===================================================================
|
| --- chrome/browser/sync/notifier/listener/subscribe_task.cc (revision 0)
|
| +++ chrome/browser/sync/notifier/listener/subscribe_task.cc (revision 0)
|
| @@ -0,0 +1,90 @@
|
| +// Copyright (c) 2009 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +#include "chrome/browser/sync/notifier/listener/subscribe_task.h"
|
| +
|
| +#include <string>
|
| +
|
| +#include "base/logging.h"
|
| +#include "talk/base/task.h"
|
| +#include "talk/xmllite/qname.h"
|
| +#include "talk/xmllite/xmlelement.h"
|
| +#include "talk/xmpp/constants.h"
|
| +#include "talk/xmpp/xmppclient.h"
|
| +#include "talk/xmpp/xmppengine.h"
|
| +
|
| +namespace browser_sync {
|
| +
|
| +SubscribeTask::SubscribeTask(Task* parent)
|
| + : XmppTask(parent, buzz::XmppEngine::HL_SINGLE) {
|
| +}
|
| +
|
| +SubscribeTask::~SubscribeTask() {
|
| +}
|
| +
|
| +bool SubscribeTask::HandleStanza(const buzz::XmlElement* stanza) {
|
| + if (!MatchResponseIq(stanza, GetClient()->jid().BareJid(), task_id()))
|
| + return false;
|
| + QueueStanza(stanza);
|
| + return true;
|
| +}
|
| +
|
| +int SubscribeTask::ProcessStart() {
|
| + LOG(INFO) << "P2P: Subscription task started.";
|
| + scoped_ptr<buzz::XmlElement> iq_stanza(NewSubscriptionMessage());
|
| +
|
| + if (SendStanza(iq_stanza.get()) != buzz::XMPP_RETURN_OK) {
|
| + SignalStatusUpdate(false);
|
| + return STATE_DONE;
|
| + }
|
| + return STATE_RESPONSE;
|
| +}
|
| +
|
| +int SubscribeTask::ProcessResponse() {
|
| + LOG(INFO) << "P2P: Subscription response received.";
|
| + const buzz::XmlElement* stanza = NextStanza();
|
| + if (stanza == NULL) {
|
| + return STATE_BLOCKED;
|
| + }
|
| + // We've receieved a response to our subscription request.
|
| + if (stanza->HasAttr(buzz::QN_TYPE) &&
|
| + stanza->Attr(buzz::QN_TYPE) == buzz::STR_RESULT) {
|
| + SignalStatusUpdate(true);
|
| + return STATE_DONE;
|
| + }
|
| + // An error response was received.
|
| + // TODO(brg) : Error handling.
|
| + SignalStatusUpdate(false);
|
| + return STATE_DONE;
|
| +}
|
| +
|
| +buzz::XmlElement* SubscribeTask::NewSubscriptionMessage() {
|
| + static const buzz::QName kQnNotifierGetAll(true, "google:notifier", "getAll");
|
| + static const buzz::QName kQnNotifierClientActive(true, buzz::STR_EMPTY,
|
| + "ClientActive");
|
| + static const buzz::QName kQnBool(true, buzz::STR_EMPTY, "bool");
|
| + static const std::string kTrueString("true");
|
| +
|
| + // Create the subscription stanza using the notificaitons protocol.
|
| + // <iq type='get' from='{fullJid}' to='{bareJid}' id='{#}'>
|
| + // <gn:getAll xmlns:gn='google:notifier' xmlns=''>
|
| + // <ClientActive bool='true'/>
|
| + // </gn:getAll>
|
| + // </iq>
|
| + buzz::XmlElement* get_all_request =
|
| + MakeIq(buzz::STR_GET, GetClient()->jid().BareJid(), task_id());
|
| +
|
| + buzz::XmlElement* notifier_get =
|
| + new buzz::XmlElement(kQnNotifierGetAll, true);
|
| + get_all_request->AddElement(notifier_get);
|
| +
|
| + buzz::XmlElement* client_active =
|
| + new buzz::XmlElement(kQnNotifierClientActive, true);
|
| + client_active->AddAttr(kQnBool, kTrueString);
|
| + notifier_get->AddElement(client_active);
|
| +
|
| + return get_all_request;
|
| +}
|
| +
|
| +} // namespace browser_sync
|
|
|
| Property changes on: chrome\browser\sync\notifier\listener\subscribe_task.cc
|
| ___________________________________________________________________
|
| Added: svn:eol-style
|
| + LF
|
|
|
|
|