diff options
author | sergeyu@chromium.org <sergeyu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-08-26 20:53:14 +0000 |
---|---|---|
committer | sergeyu@chromium.org <sergeyu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-08-26 20:53:14 +0000 |
commit | ae48adcd5ec344a0b0c2ff9c443897d73207f7f4 (patch) | |
tree | fe42b96739dd778e910a5c72f3aa3f9074af4831 /webkit | |
parent | 7dd385150f61d0da787be6e5e1e5f819e6186699 (diff) | |
download | chromium_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.cc | 17 | ||||
-rw-r--r-- | webkit/glue/p2p_transport.h | 21 | ||||
-rw-r--r-- | webkit/glue/webkit_glue.gypi | 1 | ||||
-rw-r--r-- | webkit/plugins/ppapi/ppb_transport_impl.cc | 69 | ||||
-rw-r--r-- | webkit/plugins/ppapi/ppb_transport_impl.h | 3 |
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_; |