Home | History | Annotate | Download | only in jingle_glue
      1 // Copyright (c) 2012 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_JINGLE_GLUE_SIGNAL_STRATEGY_H_
      6 #define REMOTING_JINGLE_GLUE_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:
     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 
     58   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_JINGLE_GLUE_SIGNAL_STRATEGY_H_
    102