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

Side by Side Diff: runtime/bin/socket.cc

Issue 22303002: Auto create ApiLocalScope before calling native functions, this ensures that (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 7 years, 4 months 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 | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 #include "bin/io_buffer.h" 5 #include "bin/io_buffer.h"
6 #include "bin/socket.h" 6 #include "bin/socket.h"
7 #include "bin/dartutils.h" 7 #include "bin/dartutils.h"
8 #include "bin/thread.h" 8 #include "bin/thread.h"
9 #include "bin/utils.h" 9 #include "bin/utils.h"
10 10
(...skipping 21 matching lines...) Expand all
32 intptr_t len; 32 intptr_t len;
33 Dart_Handle result = Dart_TypedDataAcquireData( 33 Dart_Handle result = Dart_TypedDataAcquireData(
34 obj, &data_type, reinterpret_cast<void**>(&data), &len); 34 obj, &data_type, reinterpret_cast<void**>(&data), &len);
35 if (Dart_IsError(result)) return result; 35 if (Dart_IsError(result)) return result;
36 memmove(reinterpret_cast<void *>(addr), data, len); 36 memmove(reinterpret_cast<void *>(addr), data, len);
37 return Dart_Null(); 37 return Dart_Null();
38 } 38 }
39 39
40 40
41 void FUNCTION_NAME(InternetAddress_Fixed)(Dart_NativeArguments args) { 41 void FUNCTION_NAME(InternetAddress_Fixed)(Dart_NativeArguments args) {
42 Dart_EnterScope();
43 Dart_Handle id_obj = Dart_GetNativeArgument(args, 0); 42 Dart_Handle id_obj = Dart_GetNativeArgument(args, 0);
44 ASSERT(!Dart_IsError(id_obj)); 43 ASSERT(!Dart_IsError(id_obj));
45 int64_t id = 0; 44 int64_t id = 0;
46 bool ok = DartUtils::GetInt64Value(id_obj, &id); 45 bool ok = DartUtils::GetInt64Value(id_obj, &id);
47 ASSERT(ok); 46 ASSERT(ok);
48 USE(ok); 47 USE(ok);
49 RawAddr raw; 48 RawAddr raw;
50 memset(&raw, 0, sizeof(raw)); 49 memset(&raw, 0, sizeof(raw));
51 switch (id) { 50 switch (id) {
52 case SocketAddress::ADDRESS_LOOPBACK_IP_V4: { 51 case SocketAddress::ADDRESS_LOOPBACK_IP_V4: {
(...skipping 19 matching lines...) Expand all
72 default: 71 default:
73 Dart_Handle error = DartUtils::NewDartArgumentError(""); 72 Dart_Handle error = DartUtils::NewDartArgumentError("");
74 if (Dart_IsError(error)) Dart_PropagateError(error); 73 if (Dart_IsError(error)) Dart_PropagateError(error);
75 Dart_ThrowException(error); 74 Dart_ThrowException(error);
76 } 75 }
77 int len = SocketAddress::GetAddrLength(&raw); 76 int len = SocketAddress::GetAddrLength(&raw);
78 Dart_Handle result = Dart_NewTypedData(Dart_TypedData_kUint8, len); 77 Dart_Handle result = Dart_NewTypedData(Dart_TypedData_kUint8, len);
79 if (Dart_IsError(result)) Dart_PropagateError(result); 78 if (Dart_IsError(result)) Dart_PropagateError(result);
80 Dart_ListSetAsBytes(result, 0, reinterpret_cast<uint8_t *>(&raw), len); 79 Dart_ListSetAsBytes(result, 0, reinterpret_cast<uint8_t *>(&raw), len);
81 Dart_SetReturnValue(args, result); 80 Dart_SetReturnValue(args, result);
82 Dart_ExitScope();
83 } 81 }
84 82
85 83
86 void FUNCTION_NAME(Socket_CreateConnect)(Dart_NativeArguments args) { 84 void FUNCTION_NAME(Socket_CreateConnect)(Dart_NativeArguments args) {
87 Dart_EnterScope();
88 Dart_Handle socket_obj = Dart_GetNativeArgument(args, 0); 85 Dart_Handle socket_obj = Dart_GetNativeArgument(args, 0);
89 Dart_Handle host_obj = Dart_GetNativeArgument(args, 1); 86 Dart_Handle host_obj = Dart_GetNativeArgument(args, 1);
90 RawAddr addr; 87 RawAddr addr;
91 Dart_Handle result = GetSockAddr(host_obj, &addr); 88 Dart_Handle result = GetSockAddr(host_obj, &addr);
92 int64_t port = 0; 89 int64_t port = 0;
93 if (!Dart_IsError(result) && 90 if (!Dart_IsError(result) &&
94 DartUtils::GetInt64Value(Dart_GetNativeArgument(args, 2), &port)) { 91 DartUtils::GetInt64Value(Dart_GetNativeArgument(args, 2), &port)) {
95 intptr_t socket = Socket::CreateConnect(addr, port); 92 intptr_t socket = Socket::CreateConnect(addr, port);
96 OSError error; 93 OSError error;
97 Dart_TypedDataReleaseData(host_obj); 94 Dart_TypedDataReleaseData(host_obj);
98 if (socket >= 0) { 95 if (socket >= 0) {
99 Dart_Handle err = Socket::SetSocketIdNativeField(socket_obj, socket); 96 Dart_Handle err = Socket::SetSocketIdNativeField(socket_obj, socket);
100 if (Dart_IsError(err)) Dart_PropagateError(err); 97 if (Dart_IsError(err)) Dart_PropagateError(err);
101 Dart_SetReturnValue(args, Dart_True()); 98 Dart_SetReturnValue(args, Dart_True());
102 } else { 99 } else {
103 Dart_SetReturnValue(args, DartUtils::NewDartOSError(&error)); 100 Dart_SetReturnValue(args, DartUtils::NewDartOSError(&error));
104 } 101 }
105 } else { 102 } else {
106 OSError os_error(-1, "Invalid argument", OSError::kUnknown); 103 OSError os_error(-1, "Invalid argument", OSError::kUnknown);
107 Dart_Handle err = DartUtils::NewDartOSError(&os_error); 104 Dart_Handle err = DartUtils::NewDartOSError(&os_error);
108 if (Dart_IsError(err)) Dart_PropagateError(err); 105 if (Dart_IsError(err)) Dart_PropagateError(err);
109 Dart_SetReturnValue(args, err); 106 Dart_SetReturnValue(args, err);
110 } 107 }
111 Dart_ExitScope();
112 } 108 }
113 109
114 110
115 void FUNCTION_NAME(Socket_Available)(Dart_NativeArguments args) { 111 void FUNCTION_NAME(Socket_Available)(Dart_NativeArguments args) {
116 Dart_EnterScope();
117 Dart_Handle socket_obj = Dart_GetNativeArgument(args, 0); 112 Dart_Handle socket_obj = Dart_GetNativeArgument(args, 0);
118 intptr_t socket = 0; 113 intptr_t socket = 0;
119 Dart_Handle err = Socket::GetSocketIdNativeField(socket_obj, &socket); 114 Dart_Handle err = Socket::GetSocketIdNativeField(socket_obj, &socket);
120 if (Dart_IsError(err)) Dart_PropagateError(err); 115 if (Dart_IsError(err)) Dart_PropagateError(err);
121 intptr_t available = Socket::Available(socket); 116 intptr_t available = Socket::Available(socket);
122 if (available >= 0) { 117 if (available >= 0) {
123 Dart_SetReturnValue(args, Dart_NewInteger(available)); 118 Dart_SetReturnValue(args, Dart_NewInteger(available));
124 } else { 119 } else {
125 Dart_SetReturnValue(args, DartUtils::NewDartOSError()); 120 Dart_SetReturnValue(args, DartUtils::NewDartOSError());
126 } 121 }
127 Dart_ExitScope();
128 } 122 }
129 123
130 124
131 void FUNCTION_NAME(Socket_Read)(Dart_NativeArguments args) { 125 void FUNCTION_NAME(Socket_Read)(Dart_NativeArguments args) {
132 Dart_EnterScope();
133 static bool short_socket_reads = Dart_IsVMFlagSet("short_socket_read"); 126 static bool short_socket_reads = Dart_IsVMFlagSet("short_socket_read");
134 Dart_Handle socket_obj = Dart_GetNativeArgument(args, 0); 127 Dart_Handle socket_obj = Dart_GetNativeArgument(args, 0);
135 intptr_t socket = 0; 128 intptr_t socket = 0;
136 Dart_Handle err = Socket::GetSocketIdNativeField(socket_obj, &socket); 129 Dart_Handle err = Socket::GetSocketIdNativeField(socket_obj, &socket);
137 if (Dart_IsError(err)) Dart_PropagateError(err); 130 if (Dart_IsError(err)) Dart_PropagateError(err);
138 intptr_t available = Socket::Available(socket); 131 intptr_t available = Socket::Available(socket);
139 if (available > 0) { 132 if (available > 0) {
140 int64_t length = 0; 133 int64_t length = 0;
141 Dart_Handle length_obj = Dart_GetNativeArgument(args, 1); 134 Dart_Handle length_obj = Dart_GetNativeArgument(args, 1);
142 if (DartUtils::GetInt64Value(length_obj, &length)) { 135 if (DartUtils::GetInt64Value(length_obj, &length)) {
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
174 OSError os_error(-1, "Invalid argument", OSError::kUnknown); 167 OSError os_error(-1, "Invalid argument", OSError::kUnknown);
175 Dart_Handle err = DartUtils::NewDartOSError(&os_error); 168 Dart_Handle err = DartUtils::NewDartOSError(&os_error);
176 if (Dart_IsError(err)) Dart_PropagateError(err); 169 if (Dart_IsError(err)) Dart_PropagateError(err);
177 Dart_SetReturnValue(args, err); 170 Dart_SetReturnValue(args, err);
178 } 171 }
179 } else if (available == 0) { 172 } else if (available == 0) {
180 Dart_SetReturnValue(args, Dart_Null()); 173 Dart_SetReturnValue(args, Dart_Null());
181 } else { 174 } else {
182 Dart_SetReturnValue(args, DartUtils::NewDartOSError()); 175 Dart_SetReturnValue(args, DartUtils::NewDartOSError());
183 } 176 }
184
185 Dart_ExitScope();
186 } 177 }
187 178
188 179
189 void FUNCTION_NAME(Socket_WriteList)(Dart_NativeArguments args) { 180 void FUNCTION_NAME(Socket_WriteList)(Dart_NativeArguments args) {
190 Dart_EnterScope();
191 static bool short_socket_writes = Dart_IsVMFlagSet("short_socket_write"); 181 static bool short_socket_writes = Dart_IsVMFlagSet("short_socket_write");
192 Dart_Handle socket_obj = Dart_GetNativeArgument(args, 0); 182 Dart_Handle socket_obj = Dart_GetNativeArgument(args, 0);
193 intptr_t socket = 0; 183 intptr_t socket = 0;
194 Dart_Handle err = Socket::GetSocketIdNativeField(socket_obj, &socket); 184 Dart_Handle err = Socket::GetSocketIdNativeField(socket_obj, &socket);
195 if (Dart_IsError(err)) Dart_PropagateError(err); 185 if (Dart_IsError(err)) Dart_PropagateError(err);
196 Dart_Handle buffer_obj = Dart_GetNativeArgument(args, 1); 186 Dart_Handle buffer_obj = Dart_GetNativeArgument(args, 1);
197 ASSERT(Dart_IsList(buffer_obj)); 187 ASSERT(Dart_IsList(buffer_obj));
198 intptr_t offset = 188 intptr_t offset =
199 DartUtils::GetIntegerValue(Dart_GetNativeArgument(args, 2)); 189 DartUtils::GetIntegerValue(Dart_GetNativeArgument(args, 2));
200 intptr_t length = 190 intptr_t length =
(...skipping 12 matching lines...) Expand all
213 intptr_t bytes_written = Socket::Write(socket, buffer, length); 203 intptr_t bytes_written = Socket::Write(socket, buffer, length);
214 if (bytes_written >= 0) { 204 if (bytes_written >= 0) {
215 Dart_TypedDataReleaseData(buffer_obj); 205 Dart_TypedDataReleaseData(buffer_obj);
216 Dart_SetReturnValue(args, Dart_NewInteger(bytes_written)); 206 Dart_SetReturnValue(args, Dart_NewInteger(bytes_written));
217 } else { 207 } else {
218 // Extract OSError before we release data, as it may override the error. 208 // Extract OSError before we release data, as it may override the error.
219 OSError os_error; 209 OSError os_error;
220 Dart_TypedDataReleaseData(buffer_obj); 210 Dart_TypedDataReleaseData(buffer_obj);
221 Dart_SetReturnValue(args, DartUtils::NewDartOSError(&os_error)); 211 Dart_SetReturnValue(args, DartUtils::NewDartOSError(&os_error));
222 } 212 }
223 Dart_ExitScope();
224 } 213 }
225 214
226 215
227 void FUNCTION_NAME(Socket_GetPort)(Dart_NativeArguments args) { 216 void FUNCTION_NAME(Socket_GetPort)(Dart_NativeArguments args) {
228 Dart_EnterScope();
229 Dart_Handle socket_obj = Dart_GetNativeArgument(args, 0); 217 Dart_Handle socket_obj = Dart_GetNativeArgument(args, 0);
230 intptr_t socket = 0; 218 intptr_t socket = 0;
231 Dart_Handle err = Socket::GetSocketIdNativeField(socket_obj, &socket); 219 Dart_Handle err = Socket::GetSocketIdNativeField(socket_obj, &socket);
232 if (Dart_IsError(err)) Dart_PropagateError(err); 220 if (Dart_IsError(err)) Dart_PropagateError(err);
233 OSError os_error; 221 OSError os_error;
234 intptr_t port = Socket::GetPort(socket); 222 intptr_t port = Socket::GetPort(socket);
235 if (port > 0) { 223 if (port > 0) {
236 Dart_SetReturnValue(args, Dart_NewInteger(port)); 224 Dart_SetReturnValue(args, Dart_NewInteger(port));
237 } else { 225 } else {
238 Dart_SetReturnValue(args, DartUtils::NewDartOSError()); 226 Dart_SetReturnValue(args, DartUtils::NewDartOSError());
239 } 227 }
240 Dart_ExitScope();
241 } 228 }
242 229
243 230
244 void FUNCTION_NAME(Socket_GetRemotePeer)(Dart_NativeArguments args) { 231 void FUNCTION_NAME(Socket_GetRemotePeer)(Dart_NativeArguments args) {
245 Dart_EnterScope();
246 Dart_Handle socket_obj = Dart_GetNativeArgument(args, 0); 232 Dart_Handle socket_obj = Dart_GetNativeArgument(args, 0);
247 intptr_t socket = 0; 233 intptr_t socket = 0;
248 Dart_Handle err = Socket::GetSocketIdNativeField(socket_obj, &socket); 234 Dart_Handle err = Socket::GetSocketIdNativeField(socket_obj, &socket);
249 if (Dart_IsError(err)) Dart_PropagateError(err); 235 if (Dart_IsError(err)) Dart_PropagateError(err);
250 OSError os_error; 236 OSError os_error;
251 intptr_t port = 0; 237 intptr_t port = 0;
252 ASSERT(INET6_ADDRSTRLEN >= INET_ADDRSTRLEN); 238 ASSERT(INET6_ADDRSTRLEN >= INET_ADDRSTRLEN);
253 char host[INET6_ADDRSTRLEN]; 239 char host[INET6_ADDRSTRLEN];
254 if (Socket::GetRemotePeer(socket, host, &port)) { 240 if (Socket::GetRemotePeer(socket, host, &port)) {
255 Dart_Handle list = Dart_NewList(2); 241 Dart_Handle list = Dart_NewList(2);
256 Dart_ListSetAt(list, 0, Dart_NewStringFromCString(host)); 242 Dart_ListSetAt(list, 0, Dart_NewStringFromCString(host));
257 Dart_ListSetAt(list, 1, Dart_NewInteger(port)); 243 Dart_ListSetAt(list, 1, Dart_NewInteger(port));
258 Dart_SetReturnValue(args, list); 244 Dart_SetReturnValue(args, list);
259 } else { 245 } else {
260 Dart_SetReturnValue(args, DartUtils::NewDartOSError()); 246 Dart_SetReturnValue(args, DartUtils::NewDartOSError());
261 } 247 }
262 Dart_ExitScope();
263 } 248 }
264 249
265 250
266 void FUNCTION_NAME(Socket_GetError)(Dart_NativeArguments args) { 251 void FUNCTION_NAME(Socket_GetError)(Dart_NativeArguments args) {
267 Dart_EnterScope();
268 Dart_Handle socket_obj = Dart_GetNativeArgument(args, 0); 252 Dart_Handle socket_obj = Dart_GetNativeArgument(args, 0);
269 intptr_t socket = 0; 253 intptr_t socket = 0;
270 Dart_Handle err = Socket::GetSocketIdNativeField(socket_obj, &socket); 254 Dart_Handle err = Socket::GetSocketIdNativeField(socket_obj, &socket);
271 if (Dart_IsError(err)) Dart_PropagateError(err); 255 if (Dart_IsError(err)) Dart_PropagateError(err);
272 OSError os_error; 256 OSError os_error;
273 Socket::GetError(socket, &os_error); 257 Socket::GetError(socket, &os_error);
274 Dart_SetReturnValue(args, DartUtils::NewDartOSError(&os_error)); 258 Dart_SetReturnValue(args, DartUtils::NewDartOSError(&os_error));
275 Dart_ExitScope();
276 } 259 }
277 260
278 261
279 void FUNCTION_NAME(Socket_GetType)(Dart_NativeArguments args) { 262 void FUNCTION_NAME(Socket_GetType)(Dart_NativeArguments args) {
280 Dart_EnterScope();
281 Dart_Handle socket_obj = Dart_GetNativeArgument(args, 0); 263 Dart_Handle socket_obj = Dart_GetNativeArgument(args, 0);
282 intptr_t socket = 0; 264 intptr_t socket = 0;
283 Socket::GetSocketIdNativeField(socket_obj, &socket); 265 Socket::GetSocketIdNativeField(socket_obj, &socket);
284 OSError os_error; 266 OSError os_error;
285 intptr_t type = Socket::GetType(socket); 267 intptr_t type = Socket::GetType(socket);
286 if (type >= 0) { 268 if (type >= 0) {
287 Dart_SetReturnValue(args, Dart_NewInteger(type)); 269 Dart_SetReturnValue(args, Dart_NewInteger(type));
288 } else { 270 } else {
289 Dart_SetReturnValue(args, DartUtils::NewDartOSError()); 271 Dart_SetReturnValue(args, DartUtils::NewDartOSError());
290 } 272 }
291 Dart_ExitScope();
292 } 273 }
293 274
294 275
295 void FUNCTION_NAME(Socket_GetStdioHandle)(Dart_NativeArguments args) { 276 void FUNCTION_NAME(Socket_GetStdioHandle)(Dart_NativeArguments args) {
296 Dart_EnterScope();
297 Dart_Handle socket_obj = Dart_GetNativeArgument(args, 0); 277 Dart_Handle socket_obj = Dart_GetNativeArgument(args, 0);
298 intptr_t num = 278 intptr_t num =
299 DartUtils::GetIntegerValue(Dart_GetNativeArgument(args, 1)); 279 DartUtils::GetIntegerValue(Dart_GetNativeArgument(args, 1));
300 ASSERT(num == 0 || num == 1 || num == 2); 280 ASSERT(num == 0 || num == 1 || num == 2);
301 intptr_t socket = Socket::GetStdioHandle(num); 281 intptr_t socket = Socket::GetStdioHandle(num);
302 Dart_Handle err = Socket::SetSocketIdNativeField(socket_obj, socket); 282 Dart_Handle err = Socket::SetSocketIdNativeField(socket_obj, socket);
303 if (Dart_IsError(err)) Dart_PropagateError(err); 283 if (Dart_IsError(err)) Dart_PropagateError(err);
304 Dart_SetReturnValue(args, Dart_NewBoolean(socket >= 0)); 284 Dart_SetReturnValue(args, Dart_NewBoolean(socket >= 0));
305 Dart_ExitScope();
306 } 285 }
307 286
308 287
309 void FUNCTION_NAME(ServerSocket_CreateBindListen)(Dart_NativeArguments args) { 288 void FUNCTION_NAME(ServerSocket_CreateBindListen)(Dart_NativeArguments args) {
310 Dart_EnterScope();
311 Dart_Handle socket_obj = Dart_GetNativeArgument(args, 0); 289 Dart_Handle socket_obj = Dart_GetNativeArgument(args, 0);
312 Dart_Handle host_obj = Dart_GetNativeArgument(args, 1); 290 Dart_Handle host_obj = Dart_GetNativeArgument(args, 1);
313 RawAddr addr; 291 RawAddr addr;
314 Dart_Handle result = GetSockAddr(host_obj, &addr); 292 Dart_Handle result = GetSockAddr(host_obj, &addr);
315 Dart_Handle port_obj = Dart_GetNativeArgument(args, 2); 293 Dart_Handle port_obj = Dart_GetNativeArgument(args, 2);
316 Dart_Handle backlog_obj = Dart_GetNativeArgument(args, 3); 294 Dart_Handle backlog_obj = Dart_GetNativeArgument(args, 3);
317 Dart_Handle v6_only_obj = Dart_GetNativeArgument(args, 4); 295 Dart_Handle v6_only_obj = Dart_GetNativeArgument(args, 4);
318 bool v6_only = DartUtils::GetBooleanValue(v6_only_obj); 296 bool v6_only = DartUtils::GetBooleanValue(v6_only_obj);
319 int64_t port = 0; 297 int64_t port = 0;
320 int64_t backlog = 0; 298 int64_t backlog = 0;
(...skipping 15 matching lines...) Expand all
336 } else { 314 } else {
337 Dart_SetReturnValue(args, DartUtils::NewDartOSError(&error)); 315 Dart_SetReturnValue(args, DartUtils::NewDartOSError(&error));
338 } 316 }
339 } 317 }
340 } else { 318 } else {
341 OSError os_error(-1, "Invalid argument", OSError::kUnknown); 319 OSError os_error(-1, "Invalid argument", OSError::kUnknown);
342 Dart_Handle err = DartUtils::NewDartOSError(&os_error); 320 Dart_Handle err = DartUtils::NewDartOSError(&os_error);
343 if (Dart_IsError(err)) Dart_PropagateError(err); 321 if (Dart_IsError(err)) Dart_PropagateError(err);
344 Dart_SetReturnValue(args, err); 322 Dart_SetReturnValue(args, err);
345 } 323 }
346 Dart_ExitScope();
347 } 324 }
348 325
349 326
350 void FUNCTION_NAME(ServerSocket_Accept)(Dart_NativeArguments args) { 327 void FUNCTION_NAME(ServerSocket_Accept)(Dart_NativeArguments args) {
351 Dart_EnterScope();
352 Dart_Handle socket_obj = Dart_GetNativeArgument(args, 0); 328 Dart_Handle socket_obj = Dart_GetNativeArgument(args, 0);
353 intptr_t socket = 0; 329 intptr_t socket = 0;
354 Dart_Handle err = Socket::GetSocketIdNativeField(socket_obj, &socket); 330 Dart_Handle err = Socket::GetSocketIdNativeField(socket_obj, &socket);
355 if (Dart_IsError(err)) Dart_PropagateError(err); 331 if (Dart_IsError(err)) Dart_PropagateError(err);
356 Dart_Handle result_socket_obj = Dart_GetNativeArgument(args, 1); 332 Dart_Handle result_socket_obj = Dart_GetNativeArgument(args, 1);
357 intptr_t new_socket = ServerSocket::Accept(socket); 333 intptr_t new_socket = ServerSocket::Accept(socket);
358 if (new_socket >= 0) { 334 if (new_socket >= 0) {
359 Dart_Handle err = Socket::SetSocketIdNativeField(result_socket_obj, 335 Dart_Handle err = Socket::SetSocketIdNativeField(result_socket_obj,
360 new_socket); 336 new_socket);
361 if (Dart_IsError(err)) Dart_PropagateError(err); 337 if (Dart_IsError(err)) Dart_PropagateError(err);
362 Dart_SetReturnValue(args, Dart_True()); 338 Dart_SetReturnValue(args, Dart_True());
363 } else if (new_socket == ServerSocket::kTemporaryFailure) { 339 } else if (new_socket == ServerSocket::kTemporaryFailure) {
364 Dart_SetReturnValue(args, Dart_False()); 340 Dart_SetReturnValue(args, Dart_False());
365 } else { 341 } else {
366 Dart_SetReturnValue(args, DartUtils::NewDartOSError()); 342 Dart_SetReturnValue(args, DartUtils::NewDartOSError());
367 } 343 }
368 Dart_ExitScope();
369 } 344 }
370 345
371 346
372 static CObject* LookupRequest(const CObjectArray& request) { 347 static CObject* LookupRequest(const CObjectArray& request) {
373 if (request.Length() == 3 && 348 if (request.Length() == 3 &&
374 request[1]->IsString() && 349 request[1]->IsString() &&
375 request[2]->IsInt32()) { 350 request[2]->IsInt32()) {
376 CObjectString host(request[1]); 351 CObjectString host(request[1]);
377 CObjectInt32 type(request[2]); 352 CObjectInt32 type(request[2]);
378 CObject* result = NULL; 353 CObject* result = NULL;
(...skipping 160 matching lines...) Expand 10 before | Expand all | Expand 10 after
539 true); 514 true);
540 ASSERT(result != ILLEGAL_PORT); 515 ASSERT(result != ILLEGAL_PORT);
541 service_ports_[service_ports_index_] = result; 516 service_ports_[service_ports_index_] = result;
542 } 517 }
543 service_ports_index_ = (service_ports_index_ + 1) % service_ports_size_; 518 service_ports_index_ = (service_ports_index_ + 1) % service_ports_size_;
544 return result; 519 return result;
545 } 520 }
546 521
547 522
548 void FUNCTION_NAME(Socket_NewServicePort)(Dart_NativeArguments args) { 523 void FUNCTION_NAME(Socket_NewServicePort)(Dart_NativeArguments args) {
549 Dart_EnterScope();
550 Dart_SetReturnValue(args, Dart_Null()); 524 Dart_SetReturnValue(args, Dart_Null());
551 Dart_Port service_port = Socket::GetServicePort(); 525 Dart_Port service_port = Socket::GetServicePort();
552 if (service_port != ILLEGAL_PORT) { 526 if (service_port != ILLEGAL_PORT) {
553 // Return a send port for the service port. 527 // Return a send port for the service port.
554 Dart_Handle send_port = Dart_NewSendPort(service_port); 528 Dart_Handle send_port = Dart_NewSendPort(service_port);
555 Dart_SetReturnValue(args, send_port); 529 Dart_SetReturnValue(args, send_port);
556 } 530 }
557 Dart_ExitScope();
558 } 531 }
559 532
560 533
561 void FUNCTION_NAME(Socket_SetOption)(Dart_NativeArguments args) { 534 void FUNCTION_NAME(Socket_SetOption)(Dart_NativeArguments args) {
562 Dart_EnterScope();
563 Dart_Handle socket_obj = Dart_GetNativeArgument(args, 0); 535 Dart_Handle socket_obj = Dart_GetNativeArgument(args, 0);
564 intptr_t socket = 0; 536 intptr_t socket = 0;
565 bool result = false; 537 bool result = false;
566 Dart_Handle err = Socket::GetSocketIdNativeField(socket_obj, &socket); 538 Dart_Handle err = Socket::GetSocketIdNativeField(socket_obj, &socket);
567 if (Dart_IsError(err)) Dart_PropagateError(err); 539 if (Dart_IsError(err)) Dart_PropagateError(err);
568 Dart_Handle option_obj = Dart_GetNativeArgument(args, 1); 540 Dart_Handle option_obj = Dart_GetNativeArgument(args, 1);
569 int64_t option; 541 int64_t option;
570 err = Dart_IntegerToInt64(option_obj, &option); 542 err = Dart_IntegerToInt64(option_obj, &option);
571 if (Dart_IsError(err)) Dart_PropagateError(err); 543 if (Dart_IsError(err)) Dart_PropagateError(err);
572 Dart_Handle enabled_obj = Dart_GetNativeArgument(args, 2); 544 Dart_Handle enabled_obj = Dart_GetNativeArgument(args, 2);
573 bool enabled; 545 bool enabled;
574 err = Dart_BooleanValue(enabled_obj, &enabled); 546 err = Dart_BooleanValue(enabled_obj, &enabled);
575 if (Dart_IsError(err)) Dart_PropagateError(err); 547 if (Dart_IsError(err)) Dart_PropagateError(err);
576 switch (option) { 548 switch (option) {
577 case 0: // TCP_NODELAY. 549 case 0: // TCP_NODELAY.
578 result = Socket::SetNoDelay(socket, enabled); 550 result = Socket::SetNoDelay(socket, enabled);
579 break; 551 break;
580 default: 552 default:
581 break; 553 break;
582 } 554 }
583 Dart_SetReturnValue(args, Dart_NewBoolean(result)); 555 Dart_SetReturnValue(args, Dart_NewBoolean(result));
584 Dart_ExitScope();
585 } 556 }
586 557
587 558
588 Dart_Handle Socket::SetSocketIdNativeField(Dart_Handle socket, intptr_t id) { 559 Dart_Handle Socket::SetSocketIdNativeField(Dart_Handle socket, intptr_t id) {
589 return Dart_SetNativeInstanceField(socket, kSocketIdNativeField, id); 560 return Dart_SetNativeInstanceField(socket, kSocketIdNativeField, id);
590 } 561 }
591 562
592 563
593 Dart_Handle Socket::GetSocketIdNativeField(Dart_Handle socket, intptr_t* id) { 564 Dart_Handle Socket::GetSocketIdNativeField(Dart_Handle socket, intptr_t* id) {
594 return Dart_GetNativeInstanceField(socket, kSocketIdNativeField, id); 565 return Dart_GetNativeInstanceField(socket, kSocketIdNativeField, id);
595 } 566 }
596 567
597 } // namespace bin 568 } // namespace bin
598 } // namespace dart 569 } // namespace dart
OLDNEW
« no previous file with comments | « runtime/bin/secure_socket_unsupported.cc ('k') | runtime/bin/stdin.cc » ('j') | runtime/vm/ast.h » ('J')

Powered by Google App Engine
This is Rietveld 408576698