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/rand_util.h"
8#include "base/strings/string_number_conversions.h"
9#include "third_party/webrtc/libjingle/xmllite/xmlelement.h"
10
11namespace remoting {
12
13DelegatingSignalStrategy::DelegatingSignalStrategy(
14    std::string local_jid,
15    const SendIqCallback& send_iq_callback)
16    : local_jid_(local_jid),
17      send_iq_callback_(send_iq_callback) {
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  return base::Uint64ToString(base::RandUint64());
71}
72
73}  // namespace remoting
74