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.
5 #include "content/renderer/media/rtc_data_channel_handler.h"
9 #include "base/logging.h"
10 #include "base/strings/utf_string_conversions.h"
14 RtcDataChannelHandler::RtcDataChannelHandler(
15 webrtc::DataChannelInterface* channel)
17 webkit_client_(NULL) {
19 channel_->RegisterObserver(this);
22 RtcDataChannelHandler::~RtcDataChannelHandler() {
24 channel_->UnregisterObserver();
27 void RtcDataChannelHandler::setClient(
28 WebKit::WebRTCDataChannelHandlerClient* client) {
29 webkit_client_ = client;
32 WebKit::WebString RtcDataChannelHandler::label() {
33 return UTF8ToUTF16(channel_->label());
36 bool RtcDataChannelHandler::isReliable() {
37 return channel_->reliable();
40 bool RtcDataChannelHandler::ordered() const {
41 return channel_->ordered();
44 unsigned short RtcDataChannelHandler::maxRetransmitTime() const {
45 return channel_->maxRetransmitTime();
48 unsigned short RtcDataChannelHandler::maxRetransmits() const {
49 return channel_->maxRetransmits();
52 WebKit::WebString RtcDataChannelHandler::protocol() const {
53 return UTF8ToUTF16(channel_->protocol());
56 bool RtcDataChannelHandler::negotiated() const {
57 return channel_->negotiated();
60 unsigned short RtcDataChannelHandler::id() const {
61 return channel_->id();
64 unsigned long RtcDataChannelHandler::bufferedAmount() {
65 return channel_->buffered_amount();
68 bool RtcDataChannelHandler::sendStringData(const WebKit::WebString& data) {
69 std::string utf8_buffer = UTF16ToUTF8(data);
70 talk_base::Buffer buffer(utf8_buffer.c_str(), utf8_buffer.length());
71 webrtc::DataBuffer data_buffer(buffer, false);
72 return channel_->Send(data_buffer);
75 bool RtcDataChannelHandler::sendRawData(const char* data, size_t length) {
76 talk_base::Buffer buffer(data, length);
77 webrtc::DataBuffer data_buffer(buffer, true);
78 return channel_->Send(data_buffer);
81 void RtcDataChannelHandler::close() {
85 void RtcDataChannelHandler::OnStateChange() {
86 if (!webkit_client_) {
87 LOG(ERROR) << "WebRTCDataChannelHandlerClient not set.";
90 DVLOG(1) << "OnStateChange " << channel_->state();
91 switch (channel_->state()) {
92 case webrtc::DataChannelInterface::kConnecting:
93 webkit_client_->didChangeReadyState(
94 WebKit::WebRTCDataChannelHandlerClient::ReadyStateConnecting);
96 case webrtc::DataChannelInterface::kOpen:
97 webkit_client_->didChangeReadyState(
98 WebKit::WebRTCDataChannelHandlerClient::ReadyStateOpen);
100 case webrtc::DataChannelInterface::kClosing:
101 webkit_client_->didChangeReadyState(
102 WebKit::WebRTCDataChannelHandlerClient::ReadyStateClosing);
104 case webrtc::DataChannelInterface::kClosed:
105 webkit_client_->didChangeReadyState(
106 WebKit::WebRTCDataChannelHandlerClient::ReadyStateClosed);
114 void RtcDataChannelHandler::OnMessage(const webrtc::DataBuffer& buffer) {
115 if (!webkit_client_) {
116 LOG(ERROR) << "WebRTCDataChannelHandlerClient not set.";
121 webkit_client_->didReceiveRawData(buffer.data.data(), buffer.data.length());
124 if (!UTF8ToUTF16(buffer.data.data(), buffer.data.length(), &utf16)) {
125 LOG(ERROR) << "Failed convert received data to UTF16";
128 webkit_client_->didReceiveStringData(utf16);
132 } // namespace content