| Index: ppapi/proxy/udp_socket_resource_base.cc
|
| diff --git a/ppapi/proxy/udp_socket_resource_base.cc b/ppapi/proxy/udp_socket_resource_base.cc
|
| index 521a6e2f4e284220d649e8d49934f503b6245127..7bdcab55d79d4c9ab202094511a94de40ad16c29 100644
|
| --- a/ppapi/proxy/udp_socket_resource_base.cc
|
| +++ b/ppapi/proxy/udp_socket_resource_base.cc
|
| @@ -65,26 +65,65 @@ int32_t UDPSocketResourceBase::SetOptionImpl(
|
| if (closed_)
|
| return PP_ERROR_FAILED;
|
|
|
| - SocketOptionData option_data;
|
| + // Check if socket is expected to be bound or not according to the option
|
| switch (name) {
|
| case PP_UDPSOCKET_OPTION_ADDRESS_REUSE:
|
| - case PP_UDPSOCKET_OPTION_BROADCAST: {
|
| + case PP_UDPSOCKET_OPTION_BROADCAST:
|
| + case PP_UDPSOCKET_OPTION_MULTICAST_LOOP:
|
| + case PP_UDPSOCKET_OPTION_MULTICAST_TTL:
|
| + case PP_UDPSOCKET_OPTION_MULTICAST_IF: {
|
| if (bound_)
|
| return PP_ERROR_FAILED;
|
| + break;
|
| + }
|
| + case PP_UDPSOCKET_OPTION_SEND_BUFFER_SIZE:
|
| + case PP_UDPSOCKET_OPTION_RECV_BUFFER_SIZE:
|
| + case PP_UDPSOCKET_OPTION_MULTICAST_JOIN:
|
| + case PP_UDPSOCKET_OPTION_MULTICAST_LEAVE: {
|
| + if (!bound_)
|
| + return PP_ERROR_FAILED;
|
| + break;
|
| + }
|
| + }
|
| +
|
| + SocketOptionData option_data;
|
| + switch (name) {
|
| + case PP_UDPSOCKET_OPTION_ADDRESS_REUSE:
|
| + case PP_UDPSOCKET_OPTION_BROADCAST: {
|
| if (value.type != PP_VARTYPE_BOOL)
|
| return PP_ERROR_BADARGUMENT;
|
| option_data.SetBool(PP_ToBool(value.value.as_bool));
|
| break;
|
| }
|
| case PP_UDPSOCKET_OPTION_SEND_BUFFER_SIZE:
|
| - case PP_UDPSOCKET_OPTION_RECV_BUFFER_SIZE: {
|
| - if (!bound_)
|
| - return PP_ERROR_FAILED;
|
| + case PP_UDPSOCKET_OPTION_RECV_BUFFER_SIZE:
|
| + case PP_UDPSOCKET_OPTION_MULTICAST_IF: {
|
| if (value.type != PP_VARTYPE_INT32)
|
| return PP_ERROR_BADARGUMENT;
|
| option_data.SetInt32(value.value.as_int);
|
| break;
|
| }
|
| + case PP_UDPSOCKET_OPTION_MULTICAST_LOOP: {
|
| + if (value.type != PP_VARTYPE_BOOL)
|
| + return PP_ERROR_BADARGUMENT;
|
| + option_data.SetBool(PP_ToBool(value.value.as_bool));
|
| + break;
|
| + }
|
| + case PP_UDPSOCKET_OPTION_MULTICAST_TTL: {
|
| + int32_t ival = value.value.as_int;
|
| + if (value.type != PP_VARTYPE_INT32 && (ival < 0 || ival > 255))
|
| + return PP_ERROR_BADARGUMENT;
|
| + option_data.SetInt32(ival);
|
| + break;
|
| + }
|
| + case PP_UDPSOCKET_OPTION_MULTICAST_JOIN:
|
| + case PP_UDPSOCKET_OPTION_MULTICAST_LEAVE: {
|
| + if (value.type != PP_VARTYPE_RESOURCE)
|
| + return PP_ERROR_BADARGUMENT;
|
| + PP_Resource resource = static_cast<PP_Resource>(value.value.as_id);
|
| + option_data.SetInt32(resource);
|
| + break;
|
| + }
|
| default: {
|
| NOTREACHED();
|
| return PP_ERROR_BADARGUMENT;
|
|
|