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; |