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

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

Issue 78393005: More cleanup in the socket C++ code (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Addressed review comments Created 7 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 | Annotate | Revision Log
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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
11 #include "platform/globals.h" 11 #include "platform/globals.h"
12 #include "platform/thread.h" 12 #include "platform/thread.h"
13 #include "platform/utils.h" 13 #include "platform/utils.h"
14 14
15 #include "include/dart_api.h" 15 #include "include/dart_api.h"
16 16
17 17
18 namespace dart { 18 namespace dart {
19 namespace bin { 19 namespace bin {
20 20
21 static const int kSocketIdNativeField = 0; 21 static const int kSocketIdNativeField = 0;
22 22
23 dart::Mutex* Socket::mutex_ = new dart::Mutex(); 23 dart::Mutex* Socket::mutex_ = new dart::Mutex();
24 int Socket::service_ports_size_ = 0; 24 int Socket::service_ports_size_ = 0;
25 Dart_Port* Socket::service_ports_ = NULL; 25 Dart_Port* Socket::service_ports_ = NULL;
26 int Socket::service_ports_index_ = 0; 26 int Socket::service_ports_index_ = 0;
27 27
28 28
29 static Dart_Handle GetSockAddr(Dart_Handle obj, RawAddr* addr) { 29 static void GetSockAddr(Dart_Handle obj, RawAddr* addr) {
30 Dart_TypedData_Type data_type; 30 Dart_TypedData_Type data_type;
31 uint8_t* data = NULL; 31 uint8_t* data = NULL;
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)) Dart_PropagateError(result);
36 memmove(reinterpret_cast<void *>(addr), data, len); 36 memmove(reinterpret_cast<void *>(addr), data, len);
37 return Dart_Null(); 37 Dart_TypedDataReleaseData(obj);
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_Handle id_obj = Dart_GetNativeArgument(args, 0);
43 ASSERT(!Dart_IsError(id_obj));
44 int64_t id = 0; 42 int64_t id = 0;
45 bool ok = DartUtils::GetInt64Value(id_obj, &id); 43 bool ok = DartUtils::GetInt64Value(Dart_GetNativeArgument(args, 0), &id);
46 ASSERT(ok); 44 ASSERT(ok);
47 USE(ok); 45 USE(ok);
48 RawAddr raw; 46 RawAddr raw;
49 memset(&raw, 0, sizeof(raw)); 47 memset(&raw, 0, sizeof(raw));
50 switch (id) { 48 switch (id) {
51 case SocketAddress::ADDRESS_LOOPBACK_IP_V4: { 49 case SocketAddress::ADDRESS_LOOPBACK_IP_V4: {
52 raw.in.sin_family = AF_INET; 50 raw.in.sin_family = AF_INET;
53 raw.in.sin_addr.s_addr = htonl(INADDR_LOOPBACK); 51 raw.in.sin_addr.s_addr = htonl(INADDR_LOOPBACK);
54 break; 52 break;
55 } 53 }
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
96 ok = Socket::ParseAddress(type, address, &raw); 94 ok = Socket::ParseAddress(type, address, &raw);
97 if (!ok) { 95 if (!ok) {
98 Dart_SetReturnValue(args, Dart_Null()); 96 Dart_SetReturnValue(args, Dart_Null());
99 } else { 97 } else {
100 Dart_SetReturnValue(args, SocketAddress::ToTypedData(&raw)); 98 Dart_SetReturnValue(args, SocketAddress::ToTypedData(&raw));
101 } 99 }
102 } 100 }
103 101
104 102
105 void FUNCTION_NAME(Socket_CreateConnect)(Dart_NativeArguments args) { 103 void FUNCTION_NAME(Socket_CreateConnect)(Dart_NativeArguments args) {
106 Dart_Handle socket_obj = Dart_GetNativeArgument(args, 0);
107 Dart_Handle host_obj = Dart_GetNativeArgument(args, 1);
108 RawAddr addr; 104 RawAddr addr;
109 Dart_Handle result = GetSockAddr(host_obj, &addr); 105 GetSockAddr(Dart_GetNativeArgument(args, 1), &addr);
110 int64_t port = 0; 106 int64_t port = 0;
111 if (!Dart_IsError(result) && 107 if (DartUtils::GetInt64Value(Dart_GetNativeArgument(args, 2), &port)) {
112 DartUtils::GetInt64Value(Dart_GetNativeArgument(args, 2), &port)) {
113 intptr_t socket = Socket::CreateConnect(addr, port); 108 intptr_t socket = Socket::CreateConnect(addr, port);
114 OSError error; 109 OSError error;
115 Dart_TypedDataReleaseData(host_obj);
116 if (socket >= 0) { 110 if (socket >= 0) {
117 Socket::SetSocketIdNativeField(socket_obj, socket); 111 Socket::SetSocketIdNativeField(Dart_GetNativeArgument(args, 0), socket);
118 Dart_SetReturnValue(args, Dart_True()); 112 Dart_SetReturnValue(args, Dart_True());
119 } else { 113 } else {
120 Dart_SetReturnValue(args, DartUtils::NewDartOSError(&error)); 114 Dart_SetReturnValue(args, DartUtils::NewDartOSError(&error));
121 } 115 }
122 } else { 116 } else {
123 OSError os_error(-1, "Invalid argument", OSError::kUnknown); 117 OSError os_error(-1, "Invalid argument", OSError::kUnknown);
124 Dart_Handle err = DartUtils::NewDartOSError(&os_error); 118 Dart_Handle err = DartUtils::NewDartOSError(&os_error);
125 if (Dart_IsError(err)) Dart_PropagateError(err); 119 if (Dart_IsError(err)) Dart_PropagateError(err);
126 Dart_SetReturnValue(args, err); 120 Dart_SetReturnValue(args, err);
127 } 121 }
(...skipping 12 matching lines...) Expand all
140 } 134 }
141 135
142 136
143 void FUNCTION_NAME(Socket_Read)(Dart_NativeArguments args) { 137 void FUNCTION_NAME(Socket_Read)(Dart_NativeArguments args) {
144 static bool short_socket_reads = Dart_IsVMFlagSet("short_socket_read"); 138 static bool short_socket_reads = Dart_IsVMFlagSet("short_socket_read");
145 intptr_t socket = 139 intptr_t socket =
146 Socket::GetSocketIdNativeField(Dart_GetNativeArgument(args, 0)); 140 Socket::GetSocketIdNativeField(Dart_GetNativeArgument(args, 0));
147 intptr_t available = Socket::Available(socket); 141 intptr_t available = Socket::Available(socket);
148 if (available > 0) { 142 if (available > 0) {
149 int64_t length = 0; 143 int64_t length = 0;
150 Dart_Handle length_obj = Dart_GetNativeArgument(args, 1); 144 if (DartUtils::GetInt64Value(Dart_GetNativeArgument(args, 1), &length)) {
151 if (DartUtils::GetInt64Value(length_obj, &length)) {
152 if (length == -1 || available < length) { 145 if (length == -1 || available < length) {
153 length = available; 146 length = available;
154 } 147 }
155 if (short_socket_reads) { 148 if (short_socket_reads) {
156 length = (length + 1) / 2; 149 length = (length + 1) / 2;
157 } 150 }
158 uint8_t* buffer = NULL; 151 uint8_t* buffer = NULL;
159 Dart_Handle result = IOBuffer::Allocate(length, &buffer); 152 Dart_Handle result = IOBuffer::Allocate(length, &buffer);
160 if (Dart_IsError(result)) Dart_PropagateError(result); 153 if (Dart_IsError(result)) Dart_PropagateError(result);
161 ASSERT(buffer != NULL); 154 ASSERT(buffer != NULL);
(...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after
285 intptr_t type = Socket::GetType(socket); 278 intptr_t type = Socket::GetType(socket);
286 if (type >= 0) { 279 if (type >= 0) {
287 Dart_SetReturnValue(args, Dart_NewInteger(type)); 280 Dart_SetReturnValue(args, Dart_NewInteger(type));
288 } else { 281 } else {
289 Dart_SetReturnValue(args, DartUtils::NewDartOSError()); 282 Dart_SetReturnValue(args, DartUtils::NewDartOSError());
290 } 283 }
291 } 284 }
292 285
293 286
294 void FUNCTION_NAME(Socket_GetStdioHandle)(Dart_NativeArguments args) { 287 void FUNCTION_NAME(Socket_GetStdioHandle)(Dart_NativeArguments args) {
295 Dart_Handle socket_obj = Dart_GetNativeArgument(args, 0);
296 intptr_t num = 288 intptr_t num =
297 DartUtils::GetIntptrValue(Dart_GetNativeArgument(args, 1)); 289 DartUtils::GetIntptrValue(Dart_GetNativeArgument(args, 1));
298 ASSERT(num == 0 || num == 1 || num == 2); 290 ASSERT(num == 0 || num == 1 || num == 2);
299 intptr_t socket = Socket::GetStdioHandle(num); 291 intptr_t socket = Socket::GetStdioHandle(num);
300 Socket::SetSocketIdNativeField(socket_obj, socket); 292 Socket::SetSocketIdNativeField(Dart_GetNativeArgument(args, 0), socket);
301 Dart_SetReturnValue(args, Dart_NewBoolean(socket >= 0)); 293 Dart_SetReturnValue(args, Dart_NewBoolean(socket >= 0));
302 } 294 }
303 295
304 296
305 void FUNCTION_NAME(Socket_SetSocketId)(Dart_NativeArguments args) { 297 void FUNCTION_NAME(Socket_SetSocketId)(Dart_NativeArguments args) {
306 Dart_Handle socket_obj = Dart_GetNativeArgument(args, 0);
307 intptr_t id = 298 intptr_t id =
308 DartUtils::GetIntptrValue(Dart_GetNativeArgument(args, 1)); 299 DartUtils::GetIntptrValue(Dart_GetNativeArgument(args, 1));
309 Socket::SetSocketIdNativeField(socket_obj, id); 300 Socket::SetSocketIdNativeField(Dart_GetNativeArgument(args, 0), id);
310 } 301 }
311 302
312 303
313 void FUNCTION_NAME(ServerSocket_CreateBindListen)(Dart_NativeArguments args) { 304 void FUNCTION_NAME(ServerSocket_CreateBindListen)(Dart_NativeArguments args) {
314 Dart_Handle socket_obj = Dart_GetNativeArgument(args, 0);
315 Dart_Handle host_obj = Dart_GetNativeArgument(args, 1);
316 RawAddr addr; 305 RawAddr addr;
317 Dart_Handle result = GetSockAddr(host_obj, &addr);
318 Dart_Handle port_obj = Dart_GetNativeArgument(args, 2);
319 Dart_Handle backlog_obj = Dart_GetNativeArgument(args, 3);
320 Dart_Handle v6_only_obj = Dart_GetNativeArgument(args, 4);
321 bool v6_only = DartUtils::GetBooleanValue(v6_only_obj);
322 int64_t port = 0; 306 int64_t port = 0;
323 int64_t backlog = 0; 307 int64_t backlog = 0;
324 if (!Dart_IsError(result) && 308 GetSockAddr(Dart_GetNativeArgument(args, 1), &addr);
325 DartUtils::GetInt64Value(port_obj, &port) && 309 if (DartUtils::GetInt64Value(Dart_GetNativeArgument(args, 2), &port) &&
326 DartUtils::GetInt64Value(backlog_obj, &backlog)) { 310 DartUtils::GetInt64Value(Dart_GetNativeArgument(args, 3), &backlog)) {
311 bool v6_only = DartUtils::GetBooleanValue(Dart_GetNativeArgument(args, 4));
327 intptr_t socket = ServerSocket::CreateBindListen( 312 intptr_t socket = ServerSocket::CreateBindListen(
328 addr, port, backlog, v6_only); 313 addr, port, backlog, v6_only);
329 OSError error; 314 OSError error;
330 Dart_TypedDataReleaseData(host_obj);
331 if (socket >= 0) { 315 if (socket >= 0) {
332 Socket::SetSocketIdNativeField(socket_obj, socket); 316 Socket::SetSocketIdNativeField(Dart_GetNativeArgument(args, 0), socket);
333 Dart_SetReturnValue(args, Dart_True()); 317 Dart_SetReturnValue(args, Dart_True());
334 } else { 318 } else {
335 if (socket == -5) { 319 if (socket == -5) {
336 OSError os_error(-1, "Invalid host", OSError::kUnknown); 320 OSError os_error(-1, "Invalid host", OSError::kUnknown);
337 Dart_SetReturnValue(args, DartUtils::NewDartOSError(&os_error)); 321 Dart_SetReturnValue(args, DartUtils::NewDartOSError(&os_error));
338 } else { 322 } else {
339 Dart_SetReturnValue(args, DartUtils::NewDartOSError(&error)); 323 Dart_SetReturnValue(args, DartUtils::NewDartOSError(&error));
340 } 324 }
341 } 325 }
342 } else { 326 } else {
343 OSError os_error(-1, "Invalid argument", OSError::kUnknown); 327 OSError os_error(-1, "Invalid argument", OSError::kUnknown);
344 Dart_Handle err = DartUtils::NewDartOSError(&os_error); 328 Dart_Handle err = DartUtils::NewDartOSError(&os_error);
345 if (Dart_IsError(err)) Dart_PropagateError(err); 329 if (Dart_IsError(err)) Dart_PropagateError(err);
346 Dart_SetReturnValue(args, err); 330 Dart_SetReturnValue(args, err);
347 } 331 }
348 } 332 }
349 333
350 334
351 void FUNCTION_NAME(ServerSocket_Accept)(Dart_NativeArguments args) { 335 void FUNCTION_NAME(ServerSocket_Accept)(Dart_NativeArguments args) {
352 intptr_t socket = 336 intptr_t socket =
353 Socket::GetSocketIdNativeField(Dart_GetNativeArgument(args, 0)); 337 Socket::GetSocketIdNativeField(Dart_GetNativeArgument(args, 0));
354 Dart_Handle result_socket_obj = Dart_GetNativeArgument(args, 1);
355 intptr_t new_socket = ServerSocket::Accept(socket); 338 intptr_t new_socket = ServerSocket::Accept(socket);
356 if (new_socket >= 0) { 339 if (new_socket >= 0) {
357 Socket::SetSocketIdNativeField(result_socket_obj, new_socket); 340 Socket::SetSocketIdNativeField(Dart_GetNativeArgument(args, 1), new_socket);
358 Dart_SetReturnValue(args, Dart_True()); 341 Dart_SetReturnValue(args, Dart_True());
359 } else if (new_socket == ServerSocket::kTemporaryFailure) { 342 } else if (new_socket == ServerSocket::kTemporaryFailure) {
360 Dart_SetReturnValue(args, Dart_False()); 343 Dart_SetReturnValue(args, Dart_False());
361 } else { 344 } else {
362 Dart_SetReturnValue(args, DartUtils::NewDartOSError()); 345 Dart_SetReturnValue(args, DartUtils::NewDartOSError());
363 } 346 }
364 } 347 }
365 348
366 349
367 CObject* Socket::LookupRequest(const CObjectArray& request) { 350 CObject* Socket::LookupRequest(const CObjectArray& request) {
(...skipping 152 matching lines...) Expand 10 before | Expand all | Expand 10 after
520 intptr_t Socket::GetSocketIdNativeField(Dart_Handle socket_obj) { 503 intptr_t Socket::GetSocketIdNativeField(Dart_Handle socket_obj) {
521 intptr_t socket = 0; 504 intptr_t socket = 0;
522 Dart_Handle err = 505 Dart_Handle err =
523 Dart_GetNativeInstanceField(socket_obj, kSocketIdNativeField, &socket); 506 Dart_GetNativeInstanceField(socket_obj, kSocketIdNativeField, &socket);
524 if (Dart_IsError(err)) Dart_PropagateError(err); 507 if (Dart_IsError(err)) Dart_PropagateError(err);
525 return socket; 508 return socket;
526 } 509 }
527 510
528 } // namespace bin 511 } // namespace bin
529 } // namespace dart 512 } // namespace dart
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698