Chromium Code Reviews| Index: webkit/plugins/ppapi/ppb_transport_impl.cc |
| diff --git a/webkit/plugins/ppapi/ppb_transport_impl.cc b/webkit/plugins/ppapi/ppb_transport_impl.cc |
| index 3048c60a3f5af5a68122e3a26ca4de21065159f6..bf4142b9600b59b0c6c50167c3a602438992f7c5 100644 |
| --- a/webkit/plugins/ppapi/ppb_transport_impl.cc |
| +++ b/webkit/plugins/ppapi/ppb_transport_impl.cc |
| @@ -4,8 +4,11 @@ |
| #include "webkit/plugins/ppapi/ppb_transport_impl.h" |
| +#include "base/json/json_reader.h" |
| +#include "base/json/json_writer.h" |
| #include "base/message_loop.h" |
| #include "base/string_util.h" |
| +#include "base/values.h" |
| #include "net/base/io_buffer.h" |
| #include "net/base/net_errors.h" |
| #include "net/socket/socket.h" |
| @@ -29,6 +32,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; |
| @@ -97,6 +103,72 @@ PP_Bool PPB_Transport_Impl::IsWritable() { |
| return PP_FromBool(writable_); |
| } |
| +const char kStringListSeparator = ','; |
|
brettw
2011/08/25 16:48:43
It doesn't look like you use this.
Sergey Ulanov
2011/08/25 17:36:53
Done.
|
| + |
| +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; |
| + }; |
|
brettw
2011/08/25 16:48:43
Don't think you need the ;
Sergey Ulanov
2011/08/25 17:36:53
Done.
|
| + |
| + return PP_OK; |
| +} |
| + |
| int32_t PPB_Transport_Impl::Connect(PP_CompletionCallback callback) { |
| if (!p2p_transport_.get()) |
| return PP_ERROR_FAILED; |
| @@ -108,7 +180,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; |