summaryrefslogtreecommitdiffstats
path: root/webkit
diff options
context:
space:
mode:
authorsergeyu@chromium.org <sergeyu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-08-26 20:53:14 +0000
committersergeyu@chromium.org <sergeyu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-08-26 20:53:14 +0000
commitae48adcd5ec344a0b0c2ff9c443897d73207f7f4 (patch)
treefe42b96739dd778e910a5c72f3aa3f9074af4831 /webkit
parent7dd385150f61d0da787be6e5e1e5f819e6186699 (diff)
downloadchromium_src-ae48adcd5ec344a0b0c2ff9c443897d73207f7f4.zip
chromium_src-ae48adcd5ec344a0b0c2ff9c443897d73207f7f4.tar.gz
chromium_src-ae48adcd5ec344a0b0c2ff9c443897d73207f7f4.tar.bz2
Add SetProperti() in the PPB_Transport_Dev interface.
BUG=41776 TEST=Unittests Review URL: http://codereview.chromium.org/7713021 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@98485 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'webkit')
-rw-r--r--webkit/glue/p2p_transport.cc17
-rw-r--r--webkit/glue/p2p_transport.h21
-rw-r--r--webkit/glue/webkit_glue.gypi1
-rw-r--r--webkit/plugins/ppapi/ppb_transport_impl.cc69
-rw-r--r--webkit/plugins/ppapi/ppb_transport_impl.h3
5 files changed, 109 insertions, 2 deletions
diff --git a/webkit/glue/p2p_transport.cc b/webkit/glue/p2p_transport.cc
new file mode 100644
index 0000000..4cf4396
--- /dev/null
+++ b/webkit/glue/p2p_transport.cc
@@ -0,0 +1,17 @@
+// Copyright (c) 2011 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 "webkit/glue/p2p_transport.h"
+
+namespace webkit_glue {
+
+P2PTransport::Config::Config()
+ : tcp_receive_window(0),
+ tcp_send_window(0) {
+}
+
+P2PTransport::Config::~Config() {
+}
+
+} // namespace webkit_glue
diff --git a/webkit/glue/p2p_transport.h b/webkit/glue/p2p_transport.h
index 2c3200f..363975f 100644
--- a/webkit/glue/p2p_transport.h
+++ b/webkit/glue/p2p_transport.h
@@ -6,6 +6,7 @@
#define WEBKIT_GLUE_P2P_TRANSPORT_H_
#include <string>
+#include <vector>
namespace net {
class Socket;
@@ -43,13 +44,31 @@ class P2PTransport {
virtual void OnError(int error) = 0;
};
+ struct Config {
+ Config();
+ ~Config();
+
+ // STUN server address and port, e.g. "stun.example.com:23542".
+ std::string stun_server;
+
+ // Relay server name, e.g. "relay.example.com".
+ std::string relay_server;
+
+ // Relay token to use for relay servers.
+ std::string relay_token;
+
+ // TCP window sizes. Default size is used when set to 0.
+ int tcp_receive_window;
+ int tcp_send_window;
+ };
+
virtual ~P2PTransport() {}
// Initialize transport using specified configuration. Returns true
// if initialization succeeded.
virtual bool Init(const std::string& name,
Protocol protocol,
- const std::string& config,
+ const Config& config,
EventHandler* event_handler) = 0;
// Add candidate received from the remote peer. Returns false if the
diff --git a/webkit/glue/webkit_glue.gypi b/webkit/glue/webkit_glue.gypi
index b79662c..e6c9cea 100644
--- a/webkit/glue/webkit_glue.gypi
+++ b/webkit/glue/webkit_glue.gypi
@@ -361,6 +361,7 @@
'multipart_response_delegate.h',
'npruntime_util.cc',
'npruntime_util.h',
+ 'p2p_transport.cc',
'p2p_transport.h',
'password_form.cc',
'password_form.h',
diff --git a/webkit/plugins/ppapi/ppb_transport_impl.cc b/webkit/plugins/ppapi/ppb_transport_impl.cc
index d4ba8df..fe8a38a 100644
--- a/webkit/plugins/ppapi/ppb_transport_impl.cc
+++ b/webkit/plugins/ppapi/ppb_transport_impl.cc
@@ -30,6 +30,9 @@ namespace {
const char kUdpProtocolName[] = "udp";
const char kTcpProtocolName[] = "tcp";
+const int kMinBufferSize = 1024;
+const int kMaxBufferSize = 1024 * 1024;
+
int MapNetError(int result) {
if (result > 0)
return result;
@@ -101,6 +104,70 @@ PP_Bool PPB_Transport_Impl::IsWritable() {
return PP_FromBool(writable_);
}
+int32_t PPB_Transport_Impl::SetProperty(PP_TransportProperty property,
+ PP_Var value) {
+ // SetProperty() may be called only before Connect().
+ if (started_)
+ return PP_ERROR_FAILED;
+
+ switch (property) {
+ case PP_TRANSPORTPROPERTY_STUN_SERVER: {
+ StringVar* value_str = StringVar::FromPPVar(value);
+ if (!value_str)
+ return PP_ERROR_BADARGUMENT;
+ config_.stun_server = value_str->value();
+ break;
+ }
+
+ case PP_TRANSPORTPROPERTY_RELAY_SERVER: {
+ StringVar* value_str = StringVar::FromPPVar(value);
+ if (!value_str)
+ return PP_ERROR_BADARGUMENT;
+ config_.relay_server = value_str->value();
+ break;
+ }
+
+ case PP_TRANSPORTPROPERTY_RELAY_TOKEN: {
+ StringVar* value_str = StringVar::FromPPVar(value);
+ if (!value_str)
+ return PP_ERROR_BADARGUMENT;
+ config_.relay_token = value_str->value();
+ break;
+ }
+
+ case PP_TRANSPORTPROPERTY_TCP_RECEIVE_WINDOW: {
+ if (!use_tcp_)
+ return PP_ERROR_BADARGUMENT;
+
+ int32_t int_value = value.value.as_int;
+ if (value.type != PP_VARTYPE_INT32 || int_value < kMinBufferSize ||
+ int_value > kMaxBufferSize) {
+ return PP_ERROR_BADARGUMENT;
+ }
+ config_.tcp_receive_window = int_value;
+ break;
+ }
+
+ case PP_TRANSPORTPROPERTY_TCP_SEND_WINDOW: {
+ if (!use_tcp_)
+ return PP_ERROR_BADARGUMENT;
+
+ int32_t int_value = value.value.as_int;
+ if (value.type != PP_VARTYPE_INT32 || int_value < kMinBufferSize ||
+ int_value > kMaxBufferSize) {
+ return PP_ERROR_BADARGUMENT;
+ }
+ config_.tcp_send_window = int_value;
+ break;
+ }
+
+ default:
+ return PP_ERROR_BADARGUMENT;
+ }
+
+ return PP_OK;
+}
+
int32_t PPB_Transport_Impl::Connect(PP_CompletionCallback callback) {
if (!p2p_transport_.get())
return PP_ERROR_FAILED;
@@ -112,7 +179,7 @@ int32_t PPB_Transport_Impl::Connect(PP_CompletionCallback callback) {
P2PTransport::Protocol protocol = use_tcp_ ?
P2PTransport::PROTOCOL_TCP : P2PTransport::PROTOCOL_UDP;
- if (!p2p_transport_->Init(name_, protocol, "", this))
+ if (!p2p_transport_->Init(name_, protocol, config_, this))
return PP_ERROR_FAILED;
started_ = true;
diff --git a/webkit/plugins/ppapi/ppb_transport_impl.h b/webkit/plugins/ppapi/ppb_transport_impl.h
index e49153b..e4fe025 100644
--- a/webkit/plugins/ppapi/ppb_transport_impl.h
+++ b/webkit/plugins/ppapi/ppb_transport_impl.h
@@ -34,6 +34,8 @@ class PPB_Transport_Impl : public ::ppapi::Resource,
// PPB_Transport_API implementation.
virtual PP_Bool IsWritable() OVERRIDE;
+ virtual int32_t SetProperty(PP_TransportProperty property,
+ PP_Var value) OVERRIDE;
virtual int32_t Connect(PP_CompletionCallback callback) OVERRIDE;
virtual int32_t GetNextAddress(PP_Var* address,
PP_CompletionCallback callback) OVERRIDE;
@@ -59,6 +61,7 @@ class PPB_Transport_Impl : public ::ppapi::Resource,
std::string name_;
bool use_tcp_;
+ webkit_glue::P2PTransport::Config config_;
bool started_;
scoped_ptr<webkit_glue::P2PTransport> p2p_transport_;
bool writable_;