OLD | NEW |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 |
OLD | NEW |