delegating_signal_strategy.cc revision 3551c9c881056c480085172ff9840cab31610854
1// Copyright 2013 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include "remoting/client/plugin/delegating_signal_strategy.h"
6
7#include "base/strings/string_number_conversions.h"
8#include "third_party/libjingle/source/talk/xmllite/xmlelement.h"
9
10namespace remoting {
11
12DelegatingSignalStrategy::DelegatingSignalStrategy(
13    std::string local_jid,
14    const SendIqCallback& send_iq_callback)
15    : local_jid_(local_jid),
16      send_iq_callback_(send_iq_callback),
17      last_id_(0) {
18}
19
20DelegatingSignalStrategy::~DelegatingSignalStrategy() {
21}
22
23void DelegatingSignalStrategy::OnIncomingMessage(const std::string& message) {
24 scoped_ptr<buzz::XmlElement> stanza(buzz::XmlElement::ForStr(message));
25  if (!stanza.get()) {
26    LOG(WARNING) << "Malformed XMPP stanza received: " << message;
27    return;
28  }
29
30  ObserverListBase<Listener>::Iterator it(listeners_);
31  Listener* listener;
32  while ((listener = it.GetNext()) != NULL) {
33    if (listener->OnSignalStrategyIncomingStanza(stanza.get()))
34      break;
35  }
36}
37
38void DelegatingSignalStrategy::Connect() {
39}
40
41void DelegatingSignalStrategy::Disconnect() {
42}
43
44SignalStrategy::State DelegatingSignalStrategy::GetState() const {
45  return CONNECTED;
46}
47
48SignalStrategy::Error DelegatingSignalStrategy::GetError() const {
49  return OK;
50}
51
52std::string DelegatingSignalStrategy::GetLocalJid() const {
53  return local_jid_;
54}
55
56void DelegatingSignalStrategy::AddListener(Listener* listener) {
57  listeners_.AddObserver(listener);
58}
59
60void DelegatingSignalStrategy::RemoveListener(Listener* listener) {
61  listeners_.RemoveObserver(listener);
62}
63
64bool DelegatingSignalStrategy::SendStanza(scoped_ptr<buzz::XmlElement> stanza) {
65  send_iq_callback_.Run(stanza->Str());
66  return true;
67}
68
69std::string DelegatingSignalStrategy::GetNextId() {
70  ++last_id_;
71  return base::IntToString(last_id_);
72}
73
74}  // namespace remoting
75