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

Side by Side 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 unified diff | Download patch
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "ppapi/proxy/udp_socket_resource_base.h" 5 #include "ppapi/proxy/udp_socket_resource_base.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <cstring> 8 #include <cstring>
9 9
10 #include "base/logging.h" 10 #include "base/logging.h"
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
58 UDPSocketResourceBase::~UDPSocketResourceBase() { 58 UDPSocketResourceBase::~UDPSocketResourceBase() {
59 } 59 }
60 60
61 int32_t UDPSocketResourceBase::SetOptionImpl( 61 int32_t UDPSocketResourceBase::SetOptionImpl(
62 PP_UDPSocket_Option name, 62 PP_UDPSocket_Option name,
63 const PP_Var& value, 63 const PP_Var& value,
64 scoped_refptr<TrackedCallback> callback) { 64 scoped_refptr<TrackedCallback> callback) {
65 if (closed_) 65 if (closed_)
66 return PP_ERROR_FAILED; 66 return PP_ERROR_FAILED;
67 67
68 // Check if socket is expected to be bound or not according to the option
69 switch (name) {
70 case PP_UDPSOCKET_OPTION_ADDRESS_REUSE:
71 case PP_UDPSOCKET_OPTION_BROADCAST:
72 case PP_UDPSOCKET_OPTION_MULTICAST_LOOP:
73 case PP_UDPSOCKET_OPTION_MULTICAST_TTL:
74 case PP_UDPSOCKET_OPTION_MULTICAST_IF: {
75 if (bound_)
76 return PP_ERROR_FAILED;
77 break;
78 }
79 case PP_UDPSOCKET_OPTION_SEND_BUFFER_SIZE:
80 case PP_UDPSOCKET_OPTION_RECV_BUFFER_SIZE:
81 case PP_UDPSOCKET_OPTION_MULTICAST_JOIN:
82 case PP_UDPSOCKET_OPTION_MULTICAST_LEAVE: {
83 if (!bound_)
84 return PP_ERROR_FAILED;
85 break;
86 }
87 }
88
68 SocketOptionData option_data; 89 SocketOptionData option_data;
69 switch (name) { 90 switch (name) {
70 case PP_UDPSOCKET_OPTION_ADDRESS_REUSE: 91 case PP_UDPSOCKET_OPTION_ADDRESS_REUSE:
71 case PP_UDPSOCKET_OPTION_BROADCAST: { 92 case PP_UDPSOCKET_OPTION_BROADCAST: {
72 if (bound_)
73 return PP_ERROR_FAILED;
74 if (value.type != PP_VARTYPE_BOOL) 93 if (value.type != PP_VARTYPE_BOOL)
75 return PP_ERROR_BADARGUMENT; 94 return PP_ERROR_BADARGUMENT;
76 option_data.SetBool(PP_ToBool(value.value.as_bool)); 95 option_data.SetBool(PP_ToBool(value.value.as_bool));
77 break; 96 break;
78 } 97 }
79 case PP_UDPSOCKET_OPTION_SEND_BUFFER_SIZE: 98 case PP_UDPSOCKET_OPTION_SEND_BUFFER_SIZE:
80 case PP_UDPSOCKET_OPTION_RECV_BUFFER_SIZE: { 99 case PP_UDPSOCKET_OPTION_RECV_BUFFER_SIZE:
81 if (!bound_) 100 case PP_UDPSOCKET_OPTION_MULTICAST_IF: {
82 return PP_ERROR_FAILED;
83 if (value.type != PP_VARTYPE_INT32) 101 if (value.type != PP_VARTYPE_INT32)
84 return PP_ERROR_BADARGUMENT; 102 return PP_ERROR_BADARGUMENT;
85 option_data.SetInt32(value.value.as_int); 103 option_data.SetInt32(value.value.as_int);
86 break; 104 break;
87 } 105 }
106 case PP_UDPSOCKET_OPTION_MULTICAST_LOOP: {
107 if (value.type != PP_VARTYPE_BOOL)
108 return PP_ERROR_BADARGUMENT;
109 option_data.SetBool(PP_ToBool(value.value.as_bool));
110 break;
111 }
112 case PP_UDPSOCKET_OPTION_MULTICAST_TTL: {
113 int32_t ival = value.value.as_int;
114 if (value.type != PP_VARTYPE_INT32 && (ival < 0 || ival > 255))
115 return PP_ERROR_BADARGUMENT;
116 option_data.SetInt32(ival);
117 break;
118 }
119 case PP_UDPSOCKET_OPTION_MULTICAST_JOIN:
120 case PP_UDPSOCKET_OPTION_MULTICAST_LEAVE: {
121 if (value.type != PP_VARTYPE_RESOURCE)
122 return PP_ERROR_BADARGUMENT;
123 PP_Resource resource = static_cast<PP_Resource>(value.value.as_id);
124 option_data.SetInt32(resource);
125 break;
126 }
88 default: { 127 default: {
89 NOTREACHED(); 128 NOTREACHED();
90 return PP_ERROR_BADARGUMENT; 129 return PP_ERROR_BADARGUMENT;
91 } 130 }
92 } 131 }
93 132
94 Call<PpapiPluginMsg_UDPSocket_SetOptionReply>( 133 Call<PpapiPluginMsg_UDPSocket_SetOptionReply>(
95 BROWSER, 134 BROWSER,
96 PpapiHostMsg_UDPSocket_SetOption(name, option_data), 135 PpapiHostMsg_UDPSocket_SetOption(name, option_data),
97 base::Bind(&UDPSocketResourceBase::OnPluginMsgSetOptionReply, 136 base::Bind(&UDPSocketResourceBase::OnPluginMsgSetOptionReply,
(...skipping 246 matching lines...) Expand 10 before | Expand all | Expand 10 after
344 if (result == PP_OK && !data.empty()) 383 if (result == PP_OK && !data.empty())
345 memcpy(output_buffer, data.c_str(), data.size()); 384 memcpy(output_buffer, data.c_str(), data.size());
346 385
347 recvfrom_addr_ = addr; 386 recvfrom_addr_ = addr;
348 387
349 return result == PP_OK ? static_cast<int32_t>(data.size()) : result; 388 return result == PP_OK ? static_cast<int32_t>(data.size()) : result;
350 } 389 }
351 390
352 } // namespace proxy 391 } // namespace proxy
353 } // namespace ppapi 392 } // namespace ppapi
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698