1 // Copyright 2014 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 #ifndef REMOTING_SIGNALING_SIGNAL_STRATEGY_H_ 6 #define REMOTING_SIGNALING_SIGNAL_STRATEGY_H_ 7 8 #include <string> 9 10 #include "base/basictypes.h" 11 #include "base/memory/scoped_ptr.h" 12 13 namespace buzz { 14 class XmlElement; 15 } // namespace buzz 16 17 namespace remoting { 18 19 class SignalStrategy { 20 public: 21 enum State { 22 // Connection is being established. 23 CONNECTING, 24 25 // Signalling is connected. 26 CONNECTED, 27 28 // Connection is closed due to an error or because Disconnect() 29 // was called. 30 DISCONNECTED, 31 }; 32 33 enum Error { 34 OK, 35 AUTHENTICATION_FAILED, 36 NETWORK_ERROR, 37 }; 38 39 // Callback interface for signaling event. Event handlers are not 40 // allowed to destroy SignalStrategy, but may add or remove other 41 // listeners. 42 class Listener { 43 public: ~Listener()44 virtual ~Listener() {} 45 46 // Called after state of the connection has changed. If the state 47 // is DISCONNECTED, then GetError() can be used to get the reason 48 // for the disconnection. 49 virtual void OnSignalStrategyStateChange(State state) = 0; 50 51 // Must return true if the stanza was handled, false 52 // otherwise. The signal strategy must not be deleted from a 53 // handler of this message. 54 virtual bool OnSignalStrategyIncomingStanza( 55 const buzz::XmlElement* stanza) = 0; 56 }; 57 SignalStrategy()58 SignalStrategy() {} ~SignalStrategy()59 virtual ~SignalStrategy() {} 60 61 // Starts connection attempt. If connection is currently active 62 // disconnects it and opens a new connection (implicit disconnect 63 // triggers CLOSED notification). Connection is finished 64 // asynchronously. 65 virtual void Connect() = 0; 66 67 // Disconnects current connection if connected. Triggers CLOSED 68 // notification. 69 virtual void Disconnect() = 0; 70 71 // Returns current state. 72 virtual State GetState() const = 0; 73 74 // Returns the last error. Set when state changes to DISCONNECT. 75 virtual Error GetError() const = 0; 76 77 // Returns local JID or an empty string when not connected. 78 virtual std::string GetLocalJid() const = 0; 79 80 // Add a |listener| that can listen to all incoming 81 // messages. Doesn't take ownership of the |listener|. All listeners 82 // must be removed before this object is destroyed. 83 virtual void AddListener(Listener* listener) = 0; 84 85 // Remove a |listener| previously added with AddListener(). 86 virtual void RemoveListener(Listener* listener) = 0; 87 88 // Sends a raw XMPP stanza. 89 virtual bool SendStanza(scoped_ptr<buzz::XmlElement> stanza) = 0; 90 91 // Returns new ID that should be used for the next outgoing IQ 92 // request. 93 virtual std::string GetNextId() = 0; 94 95 private: 96 DISALLOW_COPY_AND_ASSIGN(SignalStrategy); 97 }; 98 99 } // namespace remoting 100 101 #endif // REMOTING_SIGNALING_SIGNAL_STRATEGY_H_ 102