Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(908)

Unified Diff: ppapi/proxy/udp_socket_resource_base.cc

Issue 704133005: Pepper: Add support for multicast in PPB_UDPSocket API (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebase, initial unit tests Created 6 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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;

Powered by Google App Engine
This is Rietveld 408576698