- add sources.
[platform/framework/web/crosswalk.git] / src / content / renderer / media / rtc_data_channel_handler.cc
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.
4
5 #include "content/renderer/media/rtc_data_channel_handler.h"
6
7 #include <string>
8
9 #include "base/logging.h"
10 #include "base/strings/utf_string_conversions.h"
11
12 namespace content {
13
14 RtcDataChannelHandler::RtcDataChannelHandler(
15     webrtc::DataChannelInterface* channel)
16     : channel_(channel),
17       webkit_client_(NULL) {
18   DVLOG(1) << "::ctor";
19   channel_->RegisterObserver(this);
20 }
21
22 RtcDataChannelHandler::~RtcDataChannelHandler() {
23   DVLOG(1) << "::dtor";
24   channel_->UnregisterObserver();
25 }
26
27 void RtcDataChannelHandler::setClient(
28     WebKit::WebRTCDataChannelHandlerClient* client) {
29   webkit_client_ = client;
30 }
31
32 WebKit::WebString RtcDataChannelHandler::label() {
33   return UTF8ToUTF16(channel_->label());
34 }
35
36 bool RtcDataChannelHandler::isReliable() {
37   return channel_->reliable();
38 }
39
40 bool RtcDataChannelHandler::ordered() const {
41   return channel_->ordered();
42 }
43
44 unsigned short RtcDataChannelHandler::maxRetransmitTime() const {
45   return channel_->maxRetransmitTime();
46 }
47
48 unsigned short RtcDataChannelHandler::maxRetransmits() const {
49   return channel_->maxRetransmits();
50 }
51
52 WebKit::WebString RtcDataChannelHandler::protocol() const {
53   return UTF8ToUTF16(channel_->protocol());
54 }
55
56 bool RtcDataChannelHandler::negotiated() const {
57   return channel_->negotiated();
58 }
59
60 unsigned short RtcDataChannelHandler::id() const {
61   return channel_->id();
62 }
63
64 unsigned long RtcDataChannelHandler::bufferedAmount() {
65   return channel_->buffered_amount();
66 }
67
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);
73 }
74
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);
79 }
80
81 void RtcDataChannelHandler::close() {
82   channel_->Close();
83 }
84
85 void RtcDataChannelHandler::OnStateChange() {
86   if (!webkit_client_) {
87     LOG(ERROR) << "WebRTCDataChannelHandlerClient not set.";
88     return;
89   }
90   DVLOG(1) << "OnStateChange " << channel_->state();
91   switch (channel_->state()) {
92     case webrtc::DataChannelInterface::kConnecting:
93       webkit_client_->didChangeReadyState(
94           WebKit::WebRTCDataChannelHandlerClient::ReadyStateConnecting);
95       break;
96     case webrtc::DataChannelInterface::kOpen:
97       webkit_client_->didChangeReadyState(
98           WebKit::WebRTCDataChannelHandlerClient::ReadyStateOpen);
99       break;
100     case webrtc::DataChannelInterface::kClosing:
101       webkit_client_->didChangeReadyState(
102           WebKit::WebRTCDataChannelHandlerClient::ReadyStateClosing);
103       break;
104     case webrtc::DataChannelInterface::kClosed:
105       webkit_client_->didChangeReadyState(
106           WebKit::WebRTCDataChannelHandlerClient::ReadyStateClosed);
107       break;
108     default:
109       NOTREACHED();
110       break;
111   }
112 }
113
114 void RtcDataChannelHandler::OnMessage(const webrtc::DataBuffer& buffer) {
115   if (!webkit_client_) {
116     LOG(ERROR) << "WebRTCDataChannelHandlerClient not set.";
117     return;
118   }
119
120   if (buffer.binary) {
121     webkit_client_->didReceiveRawData(buffer.data.data(), buffer.data.length());
122   } else {
123     string16 utf16;
124     if (!UTF8ToUTF16(buffer.data.data(), buffer.data.length(), &utf16)) {
125       LOG(ERROR) << "Failed convert received data to UTF16";
126       return;
127     }
128     webkit_client_->didReceiveStringData(utf16);
129   }
130 }
131
132 }  // namespace content