| Index: remoting/protocol/session_manager.h
|
| diff --git a/remoting/protocol/session_manager.h b/remoting/protocol/session_manager.h
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..ab8cdcfd47ecc917c229a1aa066720ed5f88de48
|
| --- /dev/null
|
| +++ b/remoting/protocol/session_manager.h
|
| @@ -0,0 +1,106 @@
|
| +// Copyright (c) 2010 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.
|
| +
|
| +// The purprose of SessionManager is to facilitate creation of chromotocol
|
| +// sessions. Both host and client use it to establish chromotocol
|
| +// sessions. JingleChromotocolServer implements this inteface using
|
| +// libjingle.
|
| +//
|
| +// OUTGOING SESSIONS
|
| +// Connect() must be used to create new session to a remote host. The
|
| +// returned sessionion is initially in INITIALIZING state. Later state is
|
| +// changed to CONNECTED if the session is accepted by the host or CLOSED
|
| +// if the session is rejected.
|
| +//
|
| +// INCOMING SESSIONS
|
| +// The IncomingSessionCallback is called when a client attempts to connect.
|
| +// The callback function decides whether the session should be accepted or
|
| +// rejected.
|
| +//
|
| +// SESSION OWNERSHIP AND SHUTDOWN
|
| +// SessionManager owns all Chromotocol Session it creates. The server
|
| +// must not be closed while sessions created by the server are still in use.
|
| +// When shutting down the Close() method for the sessionion and the server
|
| +// objects must be called in the following order: Session,
|
| +// SessionManager, JingleClient. The same order must be followed in the case
|
| +// of rejected and failed sessions.
|
| +//
|
| +// PROTOCOL VERSION NEGOTIATION
|
| +// When client connects to a host it sends a session-initiate stanza with list
|
| +// of supported configurations for each channel. If the host decides to accept
|
| +// session, then it selects configuration that is supported by both sides
|
| +// and then replies with the session-accept stanza that contans selected
|
| +// configuration. The configuration specified in the session-accept is used
|
| +// for the session.
|
| +//
|
| +// The CandidateChromotocolConfig class represents list of configurations
|
| +// supported by an endpoint. The |chromotocol_config| argument in the Connect()
|
| +// specifies configuration supported on the client side. When the host receives
|
| +// session-initiate stanza, the IncomingSessionCallback is called. The
|
| +// configuration sent in the session-intiate staza is available via
|
| +// ChromotocolConnnection::candidate_config(). If an incoming session is
|
| +// being accepted then the IncomingSessionCallback callback function must
|
| +// select session configuration and then set it with Session::set_config().
|
| +
|
| +#ifndef REMOTING_PROTOCOL_SESSION_MANAGER_H_
|
| +#define REMOTING_PROTOCOL_SESSION_MANAGER_H_
|
| +
|
| +#include <string>
|
| +
|
| +#include "base/callback.h"
|
| +#include "base/ref_counted.h"
|
| +#include "remoting/protocol/session.h"
|
| +
|
| +class Task;
|
| +
|
| +namespace remoting {
|
| +
|
| +namespace protocol {
|
| +
|
| +// Generic interface for Chromoting session manager.
|
| +class SessionManager : public base::RefCountedThreadSafe<SessionManager> {
|
| + public:
|
| + enum IncomingSessionResponse {
|
| + ACCEPT,
|
| + INCOMPATIBLE,
|
| + DECLINE,
|
| + };
|
| +
|
| + // IncomingSessionCallback is called when a new session is received. If
|
| + // the callback decides to accept the session it should set the second
|
| + // argument to ACCEPT. Otherwise it should set it to DECLINE, or
|
| + // INCOMPATIBLE. INCOMPATIBLE indicates that the session has incompatible
|
| + // configuration, and cannot be accepted.
|
| + // If the callback accepts session then it must also set configuration
|
| + // for the new session using Session::set_config().
|
| + typedef Callback2<Session*, IncomingSessionResponse*>::Type
|
| + IncomingSessionCallback;
|
| +
|
| + // Initializes session to the host |jid|. Ownership of the
|
| + // |chromotocol_config| is passed to the new session.
|
| + virtual scoped_refptr<Session> Connect(
|
| + const std::string& jid,
|
| + CandidateChromotocolConfig* chromotocol_config,
|
| + Session::StateChangeCallback* state_change_callback) = 0;
|
| +
|
| + // Close session manager and all current sessions. |close_task| is executed
|
| + // after the session client is actually closed. No callbacks are called after
|
| + // |closed_task| is executed.
|
| + virtual void Close(Task* closed_task) = 0;
|
| +
|
| + protected:
|
| + friend class base::RefCountedThreadSafe<SessionManager>;
|
| +
|
| + SessionManager() { }
|
| + virtual ~SessionManager() { }
|
| +
|
| + private:
|
| + DISALLOW_COPY_AND_ASSIGN(SessionManager);
|
| +};
|
| +
|
| +} // namespace protocol
|
| +
|
| +} // namespace remoting
|
| +
|
| +#endif // REMOTING_PROTOCOL_SESSION_MANAGER_H_
|
|
|