diff options
Diffstat (limited to 'remoting/signaling/signal_strategy.h')
-rw-r--r-- | remoting/signaling/signal_strategy.h | 101 |
1 files changed, 101 insertions, 0 deletions
diff --git a/remoting/signaling/signal_strategy.h b/remoting/signaling/signal_strategy.h new file mode 100644 index 0000000..4d54379 --- /dev/null +++ b/remoting/signaling/signal_strategy.h @@ -0,0 +1,101 @@ +// Copyright 2014 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. + +#ifndef REMOTING_SIGNALING_SIGNAL_STRATEGY_H_ +#define REMOTING_SIGNALING_SIGNAL_STRATEGY_H_ + +#include <string> + +#include "base/basictypes.h" +#include "base/memory/scoped_ptr.h" + +namespace buzz { +class XmlElement; +} // namespace buzz + +namespace remoting { + +class SignalStrategy { + public: + enum State { + // Connection is being established. + CONNECTING, + + // Signalling is connected. + CONNECTED, + + // Connection is closed due to an error or because Disconnect() + // was called. + DISCONNECTED, + }; + + enum Error { + OK, + AUTHENTICATION_FAILED, + NETWORK_ERROR, + }; + + // Callback interface for signaling event. Event handlers are not + // allowed to destroy SignalStrategy, but may add or remove other + // listeners. + class Listener { + public: + virtual ~Listener() {} + + // Called after state of the connection has changed. If the state + // is DISCONNECTED, then GetError() can be used to get the reason + // for the disconnection. + virtual void OnSignalStrategyStateChange(State state) = 0; + + // Must return true if the stanza was handled, false + // otherwise. The signal strategy must not be deleted from a + // handler of this message. + virtual bool OnSignalStrategyIncomingStanza( + const buzz::XmlElement* stanza) = 0; + }; + + SignalStrategy() {} + virtual ~SignalStrategy() {} + + // Starts connection attempt. If connection is currently active + // disconnects it and opens a new connection (implicit disconnect + // triggers CLOSED notification). Connection is finished + // asynchronously. + virtual void Connect() = 0; + + // Disconnects current connection if connected. Triggers CLOSED + // notification. + virtual void Disconnect() = 0; + + // Returns current state. + virtual State GetState() const = 0; + + // Returns the last error. Set when state changes to DISCONNECT. + virtual Error GetError() const = 0; + + // Returns local JID or an empty string when not connected. + virtual std::string GetLocalJid() const = 0; + + // Add a |listener| that can listen to all incoming + // messages. Doesn't take ownership of the |listener|. All listeners + // must be removed before this object is destroyed. + virtual void AddListener(Listener* listener) = 0; + + // Remove a |listener| previously added with AddListener(). + virtual void RemoveListener(Listener* listener) = 0; + + // Sends a raw XMPP stanza. + virtual bool SendStanza(scoped_ptr<buzz::XmlElement> stanza) = 0; + + // Returns new ID that should be used for the next outgoing IQ + // request. + virtual std::string GetNextId() = 0; + + private: + DISALLOW_COPY_AND_ASSIGN(SignalStrategy); +}; + +} // namespace remoting + +#endif // REMOTING_SIGNALING_SIGNAL_STRATEGY_H_ |