diff options
author | perkj@chromium.org <perkj@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-12-13 14:04:54 +0000 |
---|---|---|
committer | perkj@chromium.org <perkj@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-12-13 14:04:54 +0000 |
commit | f2be130d5f3bfa2ff258203f10f839dfd6f75ddf (patch) | |
tree | 52e7855bce69772627c07ba3fd48bf31cd5fcfbe /content/renderer/media/rtc_data_channel_handler.cc | |
parent | 8f0173231670e57f2ba57bba6fcb9d9591f80f00 (diff) | |
download | chromium_src-f2be130d5f3bfa2ff258203f10f839dfd6f75ddf.zip chromium_src-f2be130d5f3bfa2ff258203f10f839dfd6f75ddf.tar.gz chromium_src-f2be130d5f3bfa2ff258203f10f839dfd6f75ddf.tar.bz2 |
Glue code for hooking up PeerConnection DataChannels.
Note: This cl is dependent on a libjingle roll and an updated WebKit version.
WebRtc issue http://code.google.com/p/webrtc/issues/detail?id=876
BUG= 165426
TEST= manual test with the test page in https://codereview.chromium.org/11316187/
Review URL: https://chromiumcodereview.appspot.com/11411195
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@172875 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'content/renderer/media/rtc_data_channel_handler.cc')
-rw-r--r-- | content/renderer/media/rtc_data_channel_handler.cc | 110 |
1 files changed, 110 insertions, 0 deletions
diff --git a/content/renderer/media/rtc_data_channel_handler.cc b/content/renderer/media/rtc_data_channel_handler.cc new file mode 100644 index 0000000..4b0006a --- /dev/null +++ b/content/renderer/media/rtc_data_channel_handler.cc @@ -0,0 +1,110 @@ +// Copyright (c) 2012 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. + +#include "content/renderer/media/rtc_data_channel_handler.h" + +#include <string> + +#include "base/logging.h" +#include "base/utf_string_conversions.h" + +namespace content { + +RtcDataChannelHandler::RtcDataChannelHandler( + webrtc::DataChannelInterface* channel) + : channel_(channel), + webkit_client_(NULL) { + DVLOG(1) << "::ctor"; + channel_->RegisterObserver(this); +} + +RtcDataChannelHandler::~RtcDataChannelHandler() { + DVLOG(1) << "::dtor"; + channel_->UnregisterObserver(); +} + +void RtcDataChannelHandler::setClient( + WebKit::WebRTCDataChannelHandlerClient* client) { + webkit_client_ = client; +} + +WebKit::WebString RtcDataChannelHandler::label() { + return UTF8ToUTF16(channel_->label()); +} + +bool RtcDataChannelHandler::isReliable() { + return channel_->reliable(); +} + +unsigned long RtcDataChannelHandler::bufferedAmount() { + return channel_->buffered_amount(); +} + +bool RtcDataChannelHandler::sendStringData(const WebKit::WebString& data) { + std::string utf8_buffer = UTF16ToUTF8(data); + webrtc::DataBuffer buffer; + buffer.binary = false; + buffer.data.SetData(utf8_buffer.c_str(), utf8_buffer.length()); + return channel_->Send(buffer); +} + +bool RtcDataChannelHandler::sendRawData(const char* data, size_t length) { + webrtc::DataBuffer buffer; + buffer.data.SetData(data, length); + buffer.binary = true; + return channel_->Send(buffer); +} + +void RtcDataChannelHandler::close() { + channel_->Close(); +} + +void RtcDataChannelHandler::OnStateChange() { + if (!webkit_client_) { + LOG(ERROR) << "WebRTCDataChannelHandlerClient not set."; + return; + } + DVLOG(1) << "OnStateChange " << channel_->state(); + switch (channel_->state()) { + case webrtc::DataChannelInterface::kConnecting: + webkit_client_->didChangeReadyState( + WebKit::WebRTCDataChannelHandlerClient::ReadyStateConnecting); + break; + case webrtc::DataChannelInterface::kOpen: + webkit_client_->didChangeReadyState( + WebKit::WebRTCDataChannelHandlerClient::ReadyStateOpen); + break; + case webrtc::DataChannelInterface::kClosing: + webkit_client_->didChangeReadyState( + WebKit::WebRTCDataChannelHandlerClient::ReadyStateClosing); + break; + case webrtc::DataChannelInterface::kClosed: + webkit_client_->didChangeReadyState( + WebKit::WebRTCDataChannelHandlerClient::ReadyStateClosed); + break; + default: + NOTREACHED(); + break; + } +} + +void RtcDataChannelHandler::OnMessage(const webrtc::DataBuffer& buffer) { + if (!webkit_client_) { + LOG(ERROR) << "WebRTCDataChannelHandlerClient not set."; + return; + } + + if (buffer.binary) { + webkit_client_->didReceiveRawData(buffer.data.data(), buffer.data.length()); + } else { + string16 utf16; + if (!UTF8ToUTF16(buffer.data.data(), buffer.data.length(), &utf16)) { + LOG(ERROR) << "Failed convert received data to UTF16"; + return; + } + webkit_client_->didReceiveStringData(utf16); + } +} + +} // namespace content |