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 d4ba8dfa660065cc2e95f6724a2929664f582233..fe8a38ab714ff9d9e9749562f828f48d851157eb 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; |