OLD | NEW |
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2012, 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/secure_socket.h" | 5 #include "bin/secure_socket.h" |
6 | 6 |
7 #include <errno.h> | 7 #include <errno.h> |
8 #include <fcntl.h> | 8 #include <fcntl.h> |
9 #include <sys/stat.h> | 9 #include <sys/stat.h> |
10 #include <stdio.h> | 10 #include <stdio.h> |
(...skipping 166 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
177 | 177 |
178 | 178 |
179 void FUNCTION_NAME(SecureSocket_Connect)(Dart_NativeArguments args) { | 179 void FUNCTION_NAME(SecureSocket_Connect)(Dart_NativeArguments args) { |
180 Dart_Handle host_name_object = ThrowIfError(Dart_GetNativeArgument(args, 1)); | 180 Dart_Handle host_name_object = ThrowIfError(Dart_GetNativeArgument(args, 1)); |
181 Dart_Handle context_object = ThrowIfError(Dart_GetNativeArgument(args, 2)); | 181 Dart_Handle context_object = ThrowIfError(Dart_GetNativeArgument(args, 2)); |
182 bool is_server = DartUtils::GetBooleanValue(Dart_GetNativeArgument(args, 3)); | 182 bool is_server = DartUtils::GetBooleanValue(Dart_GetNativeArgument(args, 3)); |
183 bool request_client_certificate = | 183 bool request_client_certificate = |
184 DartUtils::GetBooleanValue(Dart_GetNativeArgument(args, 4)); | 184 DartUtils::GetBooleanValue(Dart_GetNativeArgument(args, 4)); |
185 bool require_client_certificate = | 185 bool require_client_certificate = |
186 DartUtils::GetBooleanValue(Dart_GetNativeArgument(args, 5)); | 186 DartUtils::GetBooleanValue(Dart_GetNativeArgument(args, 5)); |
187 bool send_client_certificate = | |
188 DartUtils::GetBooleanValue(Dart_GetNativeArgument(args, 6)); | |
189 Dart_Handle protocols_handle = | 187 Dart_Handle protocols_handle = |
190 ThrowIfError(Dart_GetNativeArgument(args, 7)); | 188 ThrowIfError(Dart_GetNativeArgument(args, 6)); |
191 | 189 |
192 const char* host_name = NULL; | 190 const char* host_name = NULL; |
193 // TODO(whesse): Is truncating a Dart string containing \0 what we want? | 191 // TODO(whesse): Is truncating a Dart string containing \0 what we want? |
194 ThrowIfError(Dart_StringToCString(host_name_object, &host_name)); | 192 ThrowIfError(Dart_StringToCString(host_name_object, &host_name)); |
195 | 193 |
196 SSL_CTX* context = NULL; | 194 SSL_CTX* context = NULL; |
197 if (!Dart_IsNull(context_object)) { | 195 if (!Dart_IsNull(context_object)) { |
198 ThrowIfError(Dart_GetNativeInstanceField( | 196 ThrowIfError(Dart_GetNativeInstanceField( |
199 context_object, | 197 context_object, |
200 kSecurityContextNativeFieldIndex, | 198 kSecurityContextNativeFieldIndex, |
201 reinterpret_cast<intptr_t*>(&context))); | 199 reinterpret_cast<intptr_t*>(&context))); |
202 } | 200 } |
203 | 201 |
204 // The protocols_handle is guaranteed to be a valid Uint8List. | 202 // The protocols_handle is guaranteed to be a valid Uint8List. |
205 // It will have the correct length encoding of the protocols array. | 203 // It will have the correct length encoding of the protocols array. |
206 ASSERT(!Dart_IsNull(protocols_handle)); | 204 ASSERT(!Dart_IsNull(protocols_handle)); |
207 | 205 |
208 GetFilter(args)->Connect(host_name, | 206 GetFilter(args)->Connect(host_name, |
209 context, | 207 context, |
210 is_server, | 208 is_server, |
211 request_client_certificate, | 209 request_client_certificate, |
212 require_client_certificate, | 210 require_client_certificate, |
213 send_client_certificate, | |
214 protocols_handle); | 211 protocols_handle); |
215 } | 212 } |
216 | 213 |
217 | 214 |
218 void FUNCTION_NAME(SecureSocket_Destroy)(Dart_NativeArguments args) { | 215 void FUNCTION_NAME(SecureSocket_Destroy)(Dart_NativeArguments args) { |
219 SSLFilter* filter = GetFilter(args); | 216 SSLFilter* filter = GetFilter(args); |
220 SetFilter(args, NULL); | 217 SetFilter(args, NULL); |
221 filter->Destroy(); | 218 filter->Destroy(); |
222 delete filter; | 219 delete filter; |
223 } | 220 } |
(...skipping 660 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
884 } | 881 } |
885 Dart_TypedDataReleaseData(protocols_handle); | 882 Dart_TypedDataReleaseData(protocols_handle); |
886 } | 883 } |
887 | 884 |
888 | 885 |
889 void SSLFilter::Connect(const char* hostname, | 886 void SSLFilter::Connect(const char* hostname, |
890 SSL_CTX* context, | 887 SSL_CTX* context, |
891 bool is_server, | 888 bool is_server, |
892 bool request_client_certificate, | 889 bool request_client_certificate, |
893 bool require_client_certificate, | 890 bool require_client_certificate, |
894 bool send_client_certificate, | |
895 Dart_Handle protocols_handle) { | 891 Dart_Handle protocols_handle) { |
896 is_server_ = is_server; | 892 is_server_ = is_server; |
897 if (in_handshake_) { | 893 if (in_handshake_) { |
898 FATAL("Connect called twice on the same _SecureFilter."); | 894 FATAL("Connect called twice on the same _SecureFilter."); |
899 } | 895 } |
900 | 896 |
901 int status; | 897 int status; |
902 int error; | 898 int error; |
903 BIO* ssl_side; | 899 BIO* ssl_side; |
904 status = BIO_new_bio_pair(&ssl_side, 10000, &socket_side_, 10000); | 900 status = BIO_new_bio_pair(&ssl_side, 10000, &socket_side_, 10000); |
(...skipping 216 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1121 } else { | 1117 } else { |
1122 if (SSL_LOG_DATA) Log::Print( | 1118 if (SSL_LOG_DATA) Log::Print( |
1123 "WriteEncrypted BIO_read wrote %d bytes\n", bytes_processed); | 1119 "WriteEncrypted BIO_read wrote %d bytes\n", bytes_processed); |
1124 } | 1120 } |
1125 } | 1121 } |
1126 return bytes_processed; | 1122 return bytes_processed; |
1127 } | 1123 } |
1128 | 1124 |
1129 } // namespace bin | 1125 } // namespace bin |
1130 } // namespace dart | 1126 } // namespace dart |
OLD | NEW |