OLD | NEW |
1 // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2016, 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 #if !defined(DART_IO_DISABLED) && !defined(DART_IO_SECURE_SOCKET_DISABLED) | 5 #if !defined(DART_IO_DISABLED) && !defined(DART_IO_SECURE_SOCKET_DISABLED) |
6 | 6 |
7 #include "platform/globals.h" | 7 #include "platform/globals.h" |
8 #if defined(TARGET_OS_MACOS) && !TARGET_OS_IOS | 8 #if defined(TARGET_OS_MACOS) && !TARGET_OS_IOS |
9 | 9 |
10 #include "bin/secure_socket.h" | 10 #include "bin/secure_socket.h" |
(...skipping 359 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
370 result, | 370 result, |
371 kX509NativeFieldIndex, | 371 kX509NativeFieldIndex, |
372 reinterpret_cast<intptr_t>(certificate)); | 372 reinterpret_cast<intptr_t>(certificate)); |
373 if (Dart_IsError(status)) { | 373 if (Dart_IsError(status)) { |
374 return status; | 374 return status; |
375 } | 375 } |
376 return result; | 376 return result; |
377 } | 377 } |
378 | 378 |
379 | 379 |
380 // Where the argument to the constructor is the handle for an object | |
381 // implementing List<int>, this class creates a scope in which the memory | |
382 // backing the list can be accessed. | |
383 // | |
384 // Do not make Dart_ API calls while in a ScopedMemBuffer. | |
385 // Do not call Dart_PropagateError while in a ScopedMemBuffer. | |
386 class ScopedMemBuffer { | |
387 public: | |
388 explicit ScopedMemBuffer(Dart_Handle object) { | |
389 if (!Dart_IsTypedData(object) && !Dart_IsList(object)) { | |
390 Dart_ThrowException(DartUtils::NewDartArgumentError( | |
391 "Argument is not a List<int>")); | |
392 } | |
393 | |
394 uint8_t* bytes = NULL; | |
395 intptr_t bytes_len = 0; | |
396 bool is_typed_data = false; | |
397 if (Dart_IsTypedData(object)) { | |
398 is_typed_data = true; | |
399 Dart_TypedData_Type typ; | |
400 ThrowIfError(Dart_TypedDataAcquireData( | |
401 object, | |
402 &typ, | |
403 reinterpret_cast<void**>(&bytes), | |
404 &bytes_len)); | |
405 } else { | |
406 ASSERT(Dart_IsList(object)); | |
407 ThrowIfError(Dart_ListLength(object, &bytes_len)); | |
408 bytes = Dart_ScopeAllocate(bytes_len); | |
409 ASSERT(bytes != NULL); | |
410 ThrowIfError(Dart_ListGetAsBytes(object, 0, bytes, bytes_len)); | |
411 } | |
412 | |
413 object_ = object; | |
414 bytes_ = bytes; | |
415 bytes_len_ = bytes_len; | |
416 is_typed_data_ = is_typed_data; | |
417 } | |
418 | |
419 ~ScopedMemBuffer() { | |
420 if (is_typed_data_) { | |
421 ThrowIfError(Dart_TypedDataReleaseData(object_)); | |
422 } | |
423 } | |
424 | |
425 uint8_t* get() const { return bytes_; } | |
426 intptr_t length() const { return bytes_len_; } | |
427 | |
428 private: | |
429 Dart_Handle object_; | |
430 uint8_t* bytes_; | |
431 intptr_t bytes_len_; | |
432 bool is_typed_data_; | |
433 | |
434 DISALLOW_ALLOCATION(); | |
435 DISALLOW_COPY_AND_ASSIGN(ScopedMemBuffer); | |
436 }; | |
437 | |
438 | |
439 static const char* GetPasswordArgument(Dart_NativeArguments args, | 380 static const char* GetPasswordArgument(Dart_NativeArguments args, |
440 intptr_t index) { | 381 intptr_t index) { |
441 Dart_Handle password_object = | 382 Dart_Handle password_object = |
442 ThrowIfError(Dart_GetNativeArgument(args, index)); | 383 ThrowIfError(Dart_GetNativeArgument(args, index)); |
443 const char* password = NULL; | 384 const char* password = NULL; |
444 if (Dart_IsString(password_object)) { | 385 if (Dart_IsString(password_object)) { |
445 ThrowIfError(Dart_StringToCString(password_object, &password)); | 386 ThrowIfError(Dart_StringToCString(password_object, &password)); |
446 if (strlen(password) > PEM_BUFSIZE - 1) { | 387 if (strlen(password) > PEM_BUFSIZE - 1) { |
447 Dart_ThrowException(DartUtils::NewDartArgumentError( | 388 Dart_ThrowException(DartUtils::NewDartArgumentError( |
448 "Password length is greater than 1023 bytes.")); | 389 "Password length is greater than 1023 bytes.")); |
(...skipping 1570 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2019 return status; | 1960 return status; |
2020 } | 1961 } |
2021 | 1962 |
2022 } // namespace bin | 1963 } // namespace bin |
2023 } // namespace dart | 1964 } // namespace dart |
2024 | 1965 |
2025 #endif // defined(TARGET_OS_MACOS) && !TARGET_OS_IOS | 1966 #endif // defined(TARGET_OS_MACOS) && !TARGET_OS_IOS |
2026 | 1967 |
2027 #endif // !defined(DART_IO_DISABLED) && | 1968 #endif // !defined(DART_IO_DISABLED) && |
2028 // !defined(DART_IO_SECURE_SOCKET_DISABLED) | 1969 // !defined(DART_IO_SECURE_SOCKET_DISABLED) |
OLD | NEW |