Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(539)

Unified Diff: webrtc/libjingle/session/sessionmanager.h

Issue 1175243003: Remove webrtc/libjingle/{examples,session}. (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Created 5 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « webrtc/libjingle/session/sessionclient.h ('k') | webrtc/libjingle/session/sessionmanager.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: webrtc/libjingle/session/sessionmanager.h
diff --git a/webrtc/libjingle/session/sessionmanager.h b/webrtc/libjingle/session/sessionmanager.h
deleted file mode 100644
index ec5cd98aa606e546183717e8a044c07a802ed01d..0000000000000000000000000000000000000000
--- a/webrtc/libjingle/session/sessionmanager.h
+++ /dev/null
@@ -1,436 +0,0 @@
-/*
- * Copyright 2004 The WebRTC Project Authors. All rights reserved.
- *
- * Use of this source code is governed by a BSD-style license
- * that can be found in the LICENSE file in the root of the source
- * tree. An additional intellectual property rights grant can be found
- * in the file PATENTS. All contributing project authors may
- * be found in the AUTHORS file in the root of the source tree.
- */
-
-#ifndef WEBRTC_LIBJINGLE_SESSION_SESSIONMANAGER_H_
-#define WEBRTC_LIBJINGLE_SESSION_SESSIONMANAGER_H_
-
-#include <map>
-#include <string>
-#include <utility>
-#include <vector>
-
-#include "webrtc/base/sigslot.h"
-#include "webrtc/base/thread.h"
-#include "webrtc/libjingle/session/parsing.h"
-#include "webrtc/libjingle/session/sessionclient.h"
-#include "webrtc/libjingle/session/sessionmessages.h"
-#include "webrtc/libjingle/xmllite/xmlelement.h"
-#include "webrtc/libjingle/xmpp/constants.h"
-#include "webrtc/p2p/base/portallocator.h"
-#include "webrtc/p2p/base/session.h"
-#include "webrtc/p2p/base/transportdescriptionfactory.h"
-
-namespace buzz {
-class QName;
-class XmlElement;
-}
-
-namespace cricket {
-
-class BaseSession;
-class SessionClient;
-class SessionManager;
-
-// Used for errors that will send back a specific error message to the
-// remote peer. We add "type" to the errors because it's needed for
-// SignalErrorMessage.
-struct MessageError : ParseError {
- buzz::QName type;
-
- // if unset, assume type is a parse error
- MessageError() : ParseError(), type(buzz::QN_STANZA_BAD_REQUEST) {}
-
- void SetType(const buzz::QName type) {
- this->type = type;
- }
-};
-
-// Used for errors that may be returned by public session methods that
-// can fail.
-// TODO: Use this error in Session::Initiate and
-// Session::Accept.
-struct SessionError : WriteError {
-};
-
-// A specific Session created by the SessionManager, using XMPP for protocol.
-class Session : public BaseSession {
- public:
- // Returns the manager that created and owns this session.
- SessionManager* session_manager() const { return session_manager_; }
-
- // Returns the client that is handling the application data of this session.
- SessionClient* client() const { return client_; }
-
- // Returns the JID of this client.
- const std::string& local_name() const { return local_name_; }
-
- // Returns the JID of the other peer in this session.
- const std::string& remote_name() const { return remote_name_; }
-
- // Set the JID of the other peer in this session.
- // Typically the remote_name_ is set when the session is initiated.
- // However, sometimes (e.g when a proxy is used) the peer name is
- // known after the BaseSession has been initiated and it must be updated
- // explicitly.
- void set_remote_name(const std::string& name) { remote_name_ = name; }
-
- // Set the JID of the initiator of this session. Allows for the overriding
- // of the initiator to be a third-party, eg. the MUC JID when creating p2p
- // sessions.
- void set_initiator_name(const std::string& name) { initiator_name_ = name; }
-
- // Indicates the JID of the entity who initiated this session.
- // In special cases, may be different than both local_name and remote_name.
- const std::string& initiator_name() const { return initiator_name_; }
-
- SignalingProtocol current_protocol() const { return current_protocol_; }
-
- void set_current_protocol(SignalingProtocol protocol) {
- current_protocol_ = protocol;
- }
-
- // Updates the error state, signaling if necessary.
- virtual void SetError(Error error, const std::string& error_desc);
-
- // When the session needs to send signaling messages, it beings by requesting
- // signaling. The client should handle this by calling OnSignalingReady once
- // it is ready to send the messages.
- // (These are called only by SessionManager.)
- sigslot::signal1<Session*> SignalRequestSignaling;
- void OnSignalingReady() { BaseSession::OnSignalingReady(); }
-
- // Takes ownership of session description.
- // TODO: Add an error argument to pass back to the caller.
- bool Initiate(const std::string& to,
- const SessionDescription* sdesc);
-
- // When we receive an initiate, we create a session in the
- // RECEIVEDINITIATE state and respond by accepting or rejecting.
- // Takes ownership of session description.
- // TODO: Add an error argument to pass back to the caller.
- bool Accept(const SessionDescription* sdesc);
- bool Reject(const std::string& reason);
- bool Terminate() {
- return TerminateWithReason(STR_TERMINATE_SUCCESS);
- }
- bool TerminateWithReason(const std::string& reason);
- // Fired whenever we receive a terminate message along with a reason
- sigslot::signal2<Session*, const std::string&> SignalReceivedTerminateReason;
-
- // The two clients in the session may also send one another
- // arbitrary XML messages, which are called "info" messages. Sending
- // takes ownership of the given elements. The signal does not; the
- // parent element will be deleted after the signal.
- bool SendInfoMessage(const XmlElements& elems,
- const std::string& remote_name);
- bool SendDescriptionInfoMessage(const ContentInfos& contents);
- sigslot::signal2<Session*, const buzz::XmlElement*> SignalInfoMessage;
-
- private:
- // Creates or destroys a session. (These are called only SessionManager.)
- Session(SessionManager *session_manager,
- const std::string& local_name, const std::string& initiator_name,
- const std::string& sid, const std::string& content_type,
- SessionClient* client);
- ~Session();
- // For each transport info, create a transport proxy. Can fail for
- // incompatible transport types.
- bool CreateTransportProxies(const TransportInfos& tinfos,
- SessionError* error);
- bool OnRemoteCandidates(const TransportInfos& tinfos,
- ParseError* error);
- // Returns a TransportInfo without candidates for each content name.
- // Uses the transport_type_ of the session.
- TransportInfos GetEmptyTransportInfos(const ContentInfos& contents) const;
-
- // Maps passed to serialization functions.
- TransportParserMap GetTransportParsers();
- ContentParserMap GetContentParsers();
- CandidateTranslatorMap GetCandidateTranslators();
-
- virtual void OnTransportRequestSignaling(Transport* transport);
- virtual void OnTransportConnecting(Transport* transport);
- virtual void OnTransportWritable(Transport* transport);
- virtual void OnTransportProxyCandidatesReady(TransportProxy* proxy,
- const Candidates& candidates);
- virtual void OnMessage(rtc::Message *pmsg);
-
- // Send various kinds of session messages.
- bool SendInitiateMessage(const SessionDescription* sdesc,
- SessionError* error);
- bool SendAcceptMessage(const SessionDescription* sdesc, SessionError* error);
- bool SendRejectMessage(const std::string& reason, SessionError* error);
- bool SendTerminateMessage(const std::string& reason, SessionError* error);
- bool SendTransportInfoMessage(const TransportInfo& tinfo,
- SessionError* error);
- bool SendTransportInfoMessage(const TransportProxy* transproxy,
- const Candidates& candidates,
- SessionError* error);
-
- bool ResendAllTransportInfoMessages(SessionError* error);
- bool SendAllUnsentTransportInfoMessages(SessionError* error);
-
- // All versions of SendMessage send a message of the given type to
- // the other client. Can pass either a set of elements or an
- // "action", which must have a WriteSessionAction method to go along
- // with it. Sending with an action supports sending a "hybrid"
- // message. Sending with elements must be sent as Jingle or Gingle.
-
- // When passing elems, must be either Jingle or Gingle protocol.
- // Takes ownership of action_elems.
- bool SendMessage(ActionType type, const XmlElements& action_elems,
- SessionError* error);
- // Sends a messge, but overrides the remote name.
- bool SendMessage(ActionType type, const XmlElements& action_elems,
- const std::string& remote_name,
- SessionError* error);
- // When passing an action, may be Hybrid protocol.
- template <typename Action>
- bool SendMessage(ActionType type, const Action& action,
- SessionError* error);
-
- // Helper methods to write the session message stanza.
- template <typename Action>
- bool WriteActionMessage(ActionType type, const Action& action,
- buzz::XmlElement* stanza, WriteError* error);
- template <typename Action>
- bool WriteActionMessage(SignalingProtocol protocol,
- ActionType type, const Action& action,
- buzz::XmlElement* stanza, WriteError* error);
-
- // Sending messages in hybrid form requires being able to write them
- // on a per-protocol basis with a common method signature, which all
- // of these have.
- bool WriteSessionAction(SignalingProtocol protocol,
- const SessionInitiate& init,
- XmlElements* elems, WriteError* error);
- bool WriteSessionAction(SignalingProtocol protocol,
- const TransportInfo& tinfo,
- XmlElements* elems, WriteError* error);
- bool WriteSessionAction(SignalingProtocol protocol,
- const SessionTerminate& term,
- XmlElements* elems, WriteError* error);
-
- // Sends a message back to the other client indicating that we have received
- // and accepted their message.
- void SendAcknowledgementMessage(const buzz::XmlElement* stanza);
-
- // Once signaling is ready, the session will use this signal to request the
- // sending of each message. When messages are received by the other client,
- // they should be handed to OnIncomingMessage.
- // (These are called only by SessionManager.)
- sigslot::signal2<Session* , const buzz::XmlElement*> SignalOutgoingMessage;
- void OnIncomingMessage(const SessionMessage& msg);
-
- void OnIncomingResponse(const buzz::XmlElement* orig_stanza,
- const buzz::XmlElement* response_stanza,
- const SessionMessage& msg);
- void OnInitiateAcked();
- void OnFailedSend(const buzz::XmlElement* orig_stanza,
- const buzz::XmlElement* error_stanza);
-
- // Invoked when an error is found in an incoming message. This is translated
- // into the appropriate XMPP response by SessionManager.
- sigslot::signal6<BaseSession*,
- const buzz::XmlElement*,
- const buzz::QName&,
- const std::string&,
- const std::string&,
- const buzz::XmlElement*> SignalErrorMessage;
-
- // Handlers for the various types of messages. These functions may take
- // pointers to the whole stanza or to just the session element.
- bool OnInitiateMessage(const SessionMessage& msg, MessageError* error);
- bool OnAcceptMessage(const SessionMessage& msg, MessageError* error);
- bool OnRejectMessage(const SessionMessage& msg, MessageError* error);
- bool OnInfoMessage(const SessionMessage& msg);
- bool OnTerminateMessage(const SessionMessage& msg, MessageError* error);
- bool OnTransportInfoMessage(const SessionMessage& msg, MessageError* error);
- bool OnTransportAcceptMessage(const SessionMessage& msg, MessageError* error);
- bool OnDescriptionInfoMessage(const SessionMessage& msg, MessageError* error);
- bool OnRedirectError(const SessionRedirect& redirect, SessionError* error);
-
- // Verifies that we are in the appropriate state to receive this message.
- bool CheckState(State state, MessageError* error);
-
- SessionManager* session_manager_;
- bool initiate_acked_;
- std::string local_name_;
- std::string initiator_name_;
- std::string remote_name_;
- SessionClient* client_;
- TransportParser* transport_parser_;
- // Keeps track of what protocol we are speaking.
- SignalingProtocol current_protocol_;
-
- friend class SessionManager; // For access to constructor, destructor,
- // and signaling related methods.
-};
-
-// SessionManager manages session instances.
-class SessionManager : public sigslot::has_slots<> {
- public:
- SessionManager(PortAllocator *allocator,
- rtc::Thread *worker_thread = NULL);
- virtual ~SessionManager();
-
- PortAllocator *port_allocator() const { return allocator_; }
- rtc::Thread *worker_thread() const { return worker_thread_; }
- rtc::Thread *signaling_thread() const { return signaling_thread_; }
-
- int session_timeout() const { return timeout_; }
- void set_session_timeout(int timeout) { timeout_ = timeout; }
-
- // Set what transport protocol we want to default to.
- void set_transport_protocol(TransportProtocol proto) {
- transport_desc_factory_.set_protocol(proto);
- }
-
- // Control use of DTLS. An identity must be supplied if DTLS is enabled.
- void set_secure(SecurePolicy policy) {
- transport_desc_factory_.set_secure(policy);
- }
- void set_identity(rtc::SSLIdentity* identity) {
- transport_desc_factory_.set_identity(identity);
- }
- const TransportDescriptionFactory* transport_desc_factory() const {
- return &transport_desc_factory_;
- }
-
- // Registers support for the given client. If we receive an initiate
- // describing a session of the given type, we will automatically create a
- // Session object and notify this client. The client may then accept or
- // reject the session.
- void AddClient(const std::string& content_type, SessionClient* client);
- void RemoveClient(const std::string& content_type);
- SessionClient* GetClient(const std::string& content_type);
-
- // Creates a new session. The given name is the JID of the client on whose
- // behalf we initiate the session.
- Session *CreateSession(const std::string& local_name,
- const std::string& content_type);
-
- Session *CreateSession(const std::string& id,
- const std::string& local_name,
- const std::string& content_type);
-
- // Destroys the given session.
- void DestroySession(Session *session);
-
- // Returns the session with the given ID or NULL if none exists.
- Session *GetSession(const std::string& sid);
-
- // Terminates all of the sessions created by this manager.
- void TerminateAll();
-
- // These are signaled whenever the set of existing sessions changes.
- sigslot::signal2<Session *, bool> SignalSessionCreate;
- sigslot::signal1<Session *> SignalSessionDestroy;
-
- // Determines whether the given stanza is intended for some session.
- bool IsSessionMessage(const buzz::XmlElement* stanza);
-
- // Given a sid, initiator, and remote_name, this finds the matching Session
- Session* FindSession(const std::string& sid,
- const std::string& remote_name);
-
- // Called when we receive a stanza for which IsSessionMessage is true.
- void OnIncomingMessage(const buzz::XmlElement* stanza);
-
- // Called when we get a response to a message that we sent.
- void OnIncomingResponse(const buzz::XmlElement* orig_stanza,
- const buzz::XmlElement* response_stanza);
-
- // Called if an attempted to send times out or an error is returned. In the
- // timeout case error_stanza will be NULL
- void OnFailedSend(const buzz::XmlElement* orig_stanza,
- const buzz::XmlElement* error_stanza);
-
- // Signalled each time a session generates a signaling message to send.
- // Also signalled on errors, but with a NULL session.
- sigslot::signal2<SessionManager*,
- const buzz::XmlElement*> SignalOutgoingMessage;
-
- // Signaled before sessions try to send certain signaling messages. The
- // client should call OnSignalingReady once it is safe to send them. These
- // steps are taken so that we don't send signaling messages trying to
- // re-establish the connectivity of a session when the client cannot send
- // the messages (and would probably just drop them on the floor).
- //
- // Note: you can connect this directly to OnSignalingReady(), if a signalling
- // check is not supported.
- sigslot::signal0<> SignalRequestSignaling;
- void OnSignalingReady();
-
- // Signaled when this SessionManager is deleted.
- sigslot::signal0<> SignalDestroyed;
-
- private:
- typedef std::map<std::string, Session*> SessionMap;
- typedef std::map<std::string, SessionClient*> ClientMap;
-
- // Helper function for CreateSession. This is also invoked when we receive
- // a message attempting to initiate a session with this client.
- Session *CreateSession(const std::string& local_name,
- const std::string& initiator,
- const std::string& sid,
- const std::string& content_type,
- bool received_initiate);
-
- // Attempts to find a registered session type whose description appears as
- // a child of the session element. Such a child should be present indicating
- // the application they hope to initiate.
- std::string FindClient(const buzz::XmlElement* session);
-
- // Sends a message back to the other client indicating that we found an error
- // in the stanza they sent. name identifies the error, type is one of the
- // standard XMPP types (cancel, continue, modify, auth, wait), and text is a
- // description for debugging purposes.
- void SendErrorMessage(const buzz::XmlElement* stanza,
- const buzz::QName& name,
- const std::string& type,
- const std::string& text,
- const buzz::XmlElement* extra_info);
-
- // Creates and returns an error message from the given components. The
- // caller is responsible for deleting this.
- buzz::XmlElement* CreateErrorMessage(
- const buzz::XmlElement* stanza,
- const buzz::QName& name,
- const std::string& type,
- const std::string& text,
- const buzz::XmlElement* extra_info);
-
- // Called each time a session requests signaling.
- void OnRequestSignaling(Session* session);
-
- // Called each time a session has an outgoing message.
- void OnOutgoingMessage(Session* session, const buzz::XmlElement* stanza);
-
- // Called each time a session has an error to send.
- void OnErrorMessage(BaseSession* session,
- const buzz::XmlElement* stanza,
- const buzz::QName& name,
- const std::string& type,
- const std::string& text,
- const buzz::XmlElement* extra_info);
-
- PortAllocator *allocator_;
- rtc::Thread *signaling_thread_;
- rtc::Thread *worker_thread_;
- int timeout_;
- TransportDescriptionFactory transport_desc_factory_;
- SessionMap session_map_;
- ClientMap client_map_;
-};
-
-} // namespace cricket
-
-#endif // WEBRTC_LIBJINGLE_SESSION_SESSIONMANAGER_H_
« no previous file with comments | « webrtc/libjingle/session/sessionclient.h ('k') | webrtc/libjingle/session/sessionmanager.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698