Skip to content

Commit

Permalink
Enable channel multiplexing for control, event and audio channels.
Browse files Browse the repository at this point in the history
BUG=137135

Review URL: https://chromiumcodereview.appspot.com/10825359

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@152703 0039d316-1c4b-4281-b951-d872f2087c98
  • Loading branch information
sergeyu@chromium.org committed Aug 22, 2012
1 parent 1a5b4b0 commit efac095
Show file tree
Hide file tree
Showing 5 changed files with 71 additions and 20 deletions.
18 changes: 17 additions & 1 deletion remoting/protocol/channel_dispatcher_base.cc
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
#include "net/socket/stream_socket.h"
#include "remoting/protocol/channel_factory.h"
#include "remoting/protocol/session.h"
#include "remoting/protocol/session_config.h"

namespace remoting {
namespace protocol {
Expand All @@ -23,9 +24,24 @@ ChannelDispatcherBase::~ChannelDispatcherBase() {
}

void ChannelDispatcherBase::Init(Session* session,
const ChannelConfig& config,
const InitializedCallback& callback) {
DCHECK(session);
channel_factory_ = session->GetTransportChannelFactory();
switch (config.transport) {
case ChannelConfig::TRANSPORT_MUX_STREAM:
channel_factory_ = session->GetMultiplexedChannelFactory();
break;

case ChannelConfig::TRANSPORT_STREAM:
channel_factory_ = session->GetTransportChannelFactory();
break;

default:
NOTREACHED();
callback.Run(false);
return;
}

initialized_callback_ = callback;

channel_factory_->CreateStreamChannel(channel_name_, base::Bind(
Expand Down
5 changes: 4 additions & 1 deletion remoting/protocol/channel_dispatcher_base.h
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ class StreamSocket;
namespace remoting {
namespace protocol {

struct ChannelConfig;
class ChannelFactory;
class Session;

Expand All @@ -35,7 +36,9 @@ class ChannelDispatcherBase {

// Creates and connects the channel in the specified
// |session|. Caller retains ownership of the Session.
void Init(Session* session, const InitializedCallback& callback);
void Init(Session* session,
const ChannelConfig& config,
const InitializedCallback& callback);

// Returns true if the channel is currently connected.
bool is_connected() { return channel() != NULL; }
Expand Down
18 changes: 12 additions & 6 deletions remoting/protocol/connection_to_client.cc
Original file line number Diff line number Diff line change
Expand Up @@ -119,14 +119,18 @@ void ConnectionToClient::OnSessionStateChange(Session::State state) {
case Session::AUTHENTICATED:
// Initialize channels.
control_dispatcher_.reset(new HostControlDispatcher());
control_dispatcher_->Init(session_.get(), base::Bind(
&ConnectionToClient::OnChannelInitialized, base::Unretained(this)));
control_dispatcher_->Init(
session_.get(), session_->config().control_config(),
base::Bind(&ConnectionToClient::OnChannelInitialized,
base::Unretained(this)));
control_dispatcher_->set_clipboard_stub(clipboard_stub_);
control_dispatcher_->set_host_stub(host_stub_);

event_dispatcher_.reset(new HostEventDispatcher());
event_dispatcher_->Init(session_.get(), base::Bind(
&ConnectionToClient::OnChannelInitialized, base::Unretained(this)));
event_dispatcher_->Init(
session_.get(), session_->config().event_config(),
base::Bind(&ConnectionToClient::OnChannelInitialized,
base::Unretained(this)));
event_dispatcher_->set_input_stub(input_stub_);
event_dispatcher_->set_sequence_number_callback(base::Bind(
&ConnectionToClient::UpdateSequenceNumber, base::Unretained(this)));
Expand All @@ -137,8 +141,10 @@ void ConnectionToClient::OnSessionStateChange(Session::State state) {

audio_writer_ = AudioWriter::Create(session_->config());
if (audio_writer_.get()) {
audio_writer_->Init(session_.get(), base::Bind(
&ConnectionToClient::OnChannelInitialized, base::Unretained(this)));
audio_writer_->Init(
session_.get(), session_->config().audio_config(),
base::Bind(&ConnectionToClient::OnChannelInitialized,
base::Unretained(this)));
}

// Notify the handler after initializing the channels, so that
Expand Down
30 changes: 18 additions & 12 deletions remoting/protocol/connection_to_host.cc
Original file line number Diff line number Diff line change
Expand Up @@ -165,26 +165,32 @@ void ConnectionToHost::OnSessionStateChange(
break;

case Session::AUTHENTICATED:
control_dispatcher_.reset(new ClientControlDispatcher());
control_dispatcher_->Init(
session_.get(), session_->config().control_config(),
base::Bind(&ConnectionToHost::OnChannelInitialized,
base::Unretained(this)));
control_dispatcher_->set_client_stub(client_stub_);
control_dispatcher_->set_clipboard_stub(clipboard_stub_);

event_dispatcher_.reset(new ClientEventDispatcher());
event_dispatcher_->Init(
session_.get(), session_->config().event_config(),
base::Bind(&ConnectionToHost::OnChannelInitialized,
base::Unretained(this)));

video_reader_ = VideoReader::Create(session_->config());
video_reader_->Init(session_.get(), video_stub_, base::Bind(
&ConnectionToHost::OnChannelInitialized, base::Unretained(this)));

audio_reader_ = AudioReader::Create(session_->config());
if (audio_reader_.get()) {
audio_reader_->Init(session_.get(), base::Bind(
&ConnectionToHost::OnChannelInitialized, base::Unretained(this)));
audio_reader_->Init(
session_.get(), session_->config().audio_config(),
base::Bind(&ConnectionToHost::OnChannelInitialized,
base::Unretained(this)));
audio_reader_->set_audio_stub(audio_stub_);
}

control_dispatcher_.reset(new ClientControlDispatcher());
control_dispatcher_->Init(session_.get(), base::Bind(
&ConnectionToHost::OnChannelInitialized, base::Unretained(this)));
control_dispatcher_->set_client_stub(client_stub_);
control_dispatcher_->set_clipboard_stub(clipboard_stub_);

event_dispatcher_.reset(new ClientEventDispatcher());
event_dispatcher_->Init(session_.get(), base::Bind(
&ConnectionToHost::OnChannelInitialized, base::Unretained(this)));
break;

case Session::CLOSED:
Expand Down
20 changes: 20 additions & 0 deletions remoting/protocol/session_config.cc
Original file line number Diff line number Diff line change
Expand Up @@ -163,19 +163,39 @@ scoped_ptr<CandidateSessionConfig> CandidateSessionConfig::CreateFrom(
// static
scoped_ptr<CandidateSessionConfig> CandidateSessionConfig::CreateDefault() {
scoped_ptr<CandidateSessionConfig> result = CreateEmpty();

// Control channel.
result->mutable_control_configs()->push_back(
ChannelConfig(ChannelConfig::TRANSPORT_MUX_STREAM,
kDefaultStreamVersion,
ChannelConfig::CODEC_UNDEFINED));
result->mutable_control_configs()->push_back(
ChannelConfig(ChannelConfig::TRANSPORT_STREAM,
kDefaultStreamVersion,
ChannelConfig::CODEC_UNDEFINED));

// Event channel.
result->mutable_event_configs()->push_back(
ChannelConfig(ChannelConfig::TRANSPORT_MUX_STREAM,
kDefaultStreamVersion,
ChannelConfig::CODEC_UNDEFINED));
result->mutable_event_configs()->push_back(
ChannelConfig(ChannelConfig::TRANSPORT_STREAM,
kDefaultStreamVersion,
ChannelConfig::CODEC_UNDEFINED));

// Video channel.
result->mutable_video_configs()->push_back(
ChannelConfig(ChannelConfig::TRANSPORT_STREAM,
kDefaultStreamVersion,
ChannelConfig::CODEC_VP8));

// Audio channel.
#if defined(ENABLE_REMOTING_AUDIO)
result->mutable_audio_configs()->push_back(
ChannelConfig(ChannelConfig::TRANSPORT_MUX_STREAM,
kDefaultStreamVersion,
ChannelConfig::CODEC_VERBATIM));
result->mutable_audio_configs()->push_back(
ChannelConfig(ChannelConfig::TRANSPORT_STREAM,
kDefaultStreamVersion,
Expand Down

0 comments on commit efac095

Please sign in to comment.