mbed-os5 only for TYBLE16

Dependents:   TYBLE16_simple_data_logger TYBLE16_MP3_Air

Committer:
kenjiArai
Date:
Tue Dec 31 06:02:27 2019 +0000
Revision:
1:9db0e321a9f4
Parent:
0:5b88d5760320
updated based on mbed-os5.15.0

Who changed what in which revision?

UserRevisionLine numberNew contents of line
kenjiArai 0:5b88d5760320 1 /*
kenjiArai 0:5b88d5760320 2 * Copyright (c) 2018 ARM Limited
kenjiArai 0:5b88d5760320 3 * SPDX-License-Identifier: Apache-2.0
kenjiArai 0:5b88d5760320 4 *
kenjiArai 0:5b88d5760320 5 * Licensed under the Apache License, Version 2.0 (the "License");
kenjiArai 0:5b88d5760320 6 * you may not use this file except in compliance with the License.
kenjiArai 0:5b88d5760320 7 * You may obtain a copy of the License at
kenjiArai 0:5b88d5760320 8 *
kenjiArai 0:5b88d5760320 9 * http://www.apache.org/licenses/LICENSE-2.0
kenjiArai 0:5b88d5760320 10 *
kenjiArai 0:5b88d5760320 11 * Unless required by applicable law or agreed to in writing, software
kenjiArai 0:5b88d5760320 12 * distributed under the License is distributed on an "AS IS" BASIS,
kenjiArai 0:5b88d5760320 13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
kenjiArai 0:5b88d5760320 14 * See the License for the specific language governing permissions and
kenjiArai 0:5b88d5760320 15 * limitations under the License.
kenjiArai 0:5b88d5760320 16 */
kenjiArai 0:5b88d5760320 17
kenjiArai 0:5b88d5760320 18 #include "TLSSocket.h"
kenjiArai 0:5b88d5760320 19
kenjiArai 0:5b88d5760320 20 #define TRACE_GROUP "TLSS"
kenjiArai 0:5b88d5760320 21 #include "mbed-trace/mbed_trace.h"
kenjiArai 0:5b88d5760320 22
kenjiArai 1:9db0e321a9f4 23 #if !defined(MBED_CONF_NSAPI_OFFLOAD_TLSSOCKET) || !(MBED_CONF_NSAPI_OFFLOAD_TLSSOCKET)
kenjiArai 1:9db0e321a9f4 24
kenjiArai 0:5b88d5760320 25 // This class requires Mbed TLS SSL/TLS client code
kenjiArai 0:5b88d5760320 26 #if defined(MBEDTLS_SSL_CLI_C)
kenjiArai 0:5b88d5760320 27
kenjiArai 0:5b88d5760320 28 nsapi_error_t TLSSocket::connect(const char *host, uint16_t port)
kenjiArai 0:5b88d5760320 29 {
kenjiArai 0:5b88d5760320 30 nsapi_error_t ret = NSAPI_ERROR_OK;
kenjiArai 0:5b88d5760320 31 if (!is_handshake_started()) {
kenjiArai 0:5b88d5760320 32 ret = tcp_socket.connect(host, port);
kenjiArai 0:5b88d5760320 33 if (ret == NSAPI_ERROR_OK || ret == NSAPI_ERROR_IN_PROGRESS) {
kenjiArai 0:5b88d5760320 34 set_hostname(host);
kenjiArai 0:5b88d5760320 35 }
kenjiArai 0:5b88d5760320 36 if (ret != NSAPI_ERROR_OK && ret != NSAPI_ERROR_IS_CONNECTED) {
kenjiArai 0:5b88d5760320 37 return ret;
kenjiArai 0:5b88d5760320 38 }
kenjiArai 0:5b88d5760320 39 }
kenjiArai 0:5b88d5760320 40 return TLSSocketWrapper::start_handshake(ret == NSAPI_ERROR_OK);
kenjiArai 0:5b88d5760320 41 }
kenjiArai 0:5b88d5760320 42
kenjiArai 0:5b88d5760320 43 TLSSocket::~TLSSocket()
kenjiArai 0:5b88d5760320 44 {
kenjiArai 0:5b88d5760320 45 /* Transport is a member of TLSSocket which is derived from TLSSocketWrapper.
kenjiArai 0:5b88d5760320 46 * Make sure that TLSSocketWrapper::close() is called before the transport is
kenjiArai 0:5b88d5760320 47 * destroyed.
kenjiArai 0:5b88d5760320 48 */
kenjiArai 0:5b88d5760320 49 close();
kenjiArai 0:5b88d5760320 50 }
kenjiArai 1:9db0e321a9f4 51 #endif // MBEDTLS_SSL_CLI_C
kenjiArai 0:5b88d5760320 52
kenjiArai 1:9db0e321a9f4 53 #else // MBED_CONF_NSAPI_OFFLOAD_TLSSOCKET
kenjiArai 1:9db0e321a9f4 54
kenjiArai 1:9db0e321a9f4 55 TLSSocket::TLSSocket()
kenjiArai 1:9db0e321a9f4 56 {
kenjiArai 1:9db0e321a9f4 57 }
kenjiArai 1:9db0e321a9f4 58
kenjiArai 1:9db0e321a9f4 59 TLSSocket::~TLSSocket()
kenjiArai 1:9db0e321a9f4 60 {
kenjiArai 1:9db0e321a9f4 61 }
kenjiArai 1:9db0e321a9f4 62
kenjiArai 1:9db0e321a9f4 63
kenjiArai 1:9db0e321a9f4 64 nsapi_error_t TLSSocket::set_hostname(const char *hostname)
kenjiArai 1:9db0e321a9f4 65 {
kenjiArai 1:9db0e321a9f4 66 return setsockopt(NSAPI_TLSSOCKET_LEVEL, NSAPI_TLSSOCKET_SET_HOSTNAME, hostname, strlen(hostname));
kenjiArai 1:9db0e321a9f4 67 }
kenjiArai 1:9db0e321a9f4 68
kenjiArai 1:9db0e321a9f4 69 nsapi_error_t TLSSocket::set_root_ca_cert(const void *root_ca, size_t len)
kenjiArai 1:9db0e321a9f4 70 {
kenjiArai 1:9db0e321a9f4 71 return setsockopt(NSAPI_TLSSOCKET_LEVEL, NSAPI_TLSSOCKET_SET_CACERT, root_ca, len);
kenjiArai 1:9db0e321a9f4 72 }
kenjiArai 1:9db0e321a9f4 73
kenjiArai 1:9db0e321a9f4 74 nsapi_error_t TLSSocket::set_root_ca_cert(const char *root_ca_pem)
kenjiArai 1:9db0e321a9f4 75 {
kenjiArai 1:9db0e321a9f4 76 return set_root_ca_cert(root_ca_pem, strlen(root_ca_pem));
kenjiArai 1:9db0e321a9f4 77 }
kenjiArai 1:9db0e321a9f4 78
kenjiArai 1:9db0e321a9f4 79 nsapi_error_t TLSSocket::set_client_cert_key(const void *client_cert, size_t client_cert_len,
kenjiArai 1:9db0e321a9f4 80 const void *client_private_key_pem, size_t client_private_key_len)
kenjiArai 1:9db0e321a9f4 81 {
kenjiArai 1:9db0e321a9f4 82 nsapi_error_t ret = setsockopt(NSAPI_TLSSOCKET_LEVEL, NSAPI_TLSSOCKET_SET_CLCERT, client_cert, client_cert_len);
kenjiArai 1:9db0e321a9f4 83 if (ret == NSAPI_ERROR_OK) {
kenjiArai 1:9db0e321a9f4 84 ret = setsockopt(NSAPI_TLSSOCKET_LEVEL, NSAPI_TLSSOCKET_SET_CLKEY, client_private_key_pem, client_private_key_len);
kenjiArai 1:9db0e321a9f4 85 }
kenjiArai 1:9db0e321a9f4 86 return ret;
kenjiArai 1:9db0e321a9f4 87 }
kenjiArai 1:9db0e321a9f4 88
kenjiArai 1:9db0e321a9f4 89 nsapi_error_t TLSSocket::set_client_cert_key(const char *client_cert_pem, const char *client_private_key_pem)
kenjiArai 1:9db0e321a9f4 90 {
kenjiArai 1:9db0e321a9f4 91 return set_client_cert_key(client_cert_pem, strlen(client_cert_pem), client_private_key_pem, strlen(client_private_key_pem));
kenjiArai 1:9db0e321a9f4 92 }
kenjiArai 1:9db0e321a9f4 93
kenjiArai 1:9db0e321a9f4 94 nsapi_error_t TLSSocket::connect(const char *host, uint16_t port)
kenjiArai 1:9db0e321a9f4 95 {
kenjiArai 1:9db0e321a9f4 96 nsapi_error_t ret = enable_tlssocket();
kenjiArai 1:9db0e321a9f4 97 if (ret == NSAPI_ERROR_OK) {
kenjiArai 1:9db0e321a9f4 98 ret = TCPSocket::connect(host, port);
kenjiArai 1:9db0e321a9f4 99 }
kenjiArai 1:9db0e321a9f4 100 return ret;
kenjiArai 1:9db0e321a9f4 101 }
kenjiArai 1:9db0e321a9f4 102
kenjiArai 1:9db0e321a9f4 103 nsapi_error_t TLSSocket::connect(const SocketAddress &address)
kenjiArai 1:9db0e321a9f4 104 {
kenjiArai 1:9db0e321a9f4 105 nsapi_error_t ret = enable_tlssocket();
kenjiArai 1:9db0e321a9f4 106 if (ret == NSAPI_ERROR_OK) {
kenjiArai 1:9db0e321a9f4 107 ret = TCPSocket::connect(address);
kenjiArai 1:9db0e321a9f4 108 }
kenjiArai 1:9db0e321a9f4 109 return ret;
kenjiArai 1:9db0e321a9f4 110 }
kenjiArai 1:9db0e321a9f4 111
kenjiArai 1:9db0e321a9f4 112 nsapi_error_t TLSSocket::enable_tlssocket()
kenjiArai 1:9db0e321a9f4 113 {
kenjiArai 1:9db0e321a9f4 114 bool enabled = true;
kenjiArai 1:9db0e321a9f4 115 return setsockopt(NSAPI_TLSSOCKET_LEVEL, NSAPI_TLSSOCKET_ENABLE, &enabled, sizeof(enabled));
kenjiArai 1:9db0e321a9f4 116 }
kenjiArai 1:9db0e321a9f4 117
kenjiArai 1:9db0e321a9f4 118 #endif // MBED_CONF_NSAPI_OFFLOAD_TLSSOCKET