IoT_Error_t iot_tls_connect(Network *pNetwork, TLSConnectParams *params)
{
	if (pNetwork == NULL)
		return NULL_VALUE_ERROR;

	IoT_Error_t ret_val = AWS_FAILURE;

	if (params != NULL) {
		Populate_ConnectParams(pNetwork, params->pRootCALocation,
				       params->pDeviceCertLocation,
				       params->pDevicePrivateKeyLocation,
				       params->pDestinationURL,
				       params->DestinationPort,
				       params->timeout_ms,
				       params->ServerVerificationFlag);
	}

	pNetwork->my_socket = Create_TCPSocket();
	if (-1 == pNetwork->my_socket) {
		ret_val = TCP_CONNECTION_ERROR;
		return ret_val;
	}

	ret_val = Connect_TCPSocket(pNetwork->my_socket,
				    pNetwork->tlsConnectParams.pDestinationURL,
				    pNetwork->tlsConnectParams.DestinationPort);
	if (AWS_SUCCESS != ret_val) {
		Close_TCPSocket(&pNetwork->my_socket);
		return ret_val;
	}
	tls_cfg.flags = TLS_USE_CLIENT_CERT;
	tls_cfg.tls.client.client_cert = (unsigned char *)
		pNetwork->tlsConnectParams.pDeviceCertLocation;
	tls_cfg.tls.client.client_cert_size =
		strlen(pNetwork->tlsConnectParams.pDeviceCertLocation);
	tls_cfg.tls.client.client_key = (unsigned char *)
		pNetwork->tlsConnectParams.pDevicePrivateKeyLocation;
	tls_cfg.tls.client.client_key_size =
		strlen(pNetwork->tlsConnectParams.pDevicePrivateKeyLocation);
	tls_cfg.tls.client.ca_cert =
		(unsigned char *)pNetwork->tlsConnectParams.pRootCALocation;
	tls_cfg.tls.client.ca_cert_size =
		strlen(pNetwork->tlsConnectParams.pRootCALocation);

	ret_val = tls_session_init(&tls_handle, pNetwork->my_socket, &tls_cfg);
	if (AWS_SUCCESS != ret_val)
		Close_TCPSocket(&pNetwork->my_socket);
	return ret_val;
}
IoT_Error_t iot_tls_disconnect(Network *pNetwork)
{
	wm_tls_client_close(&tls_hd);
	Close_TCPSocket(&pNetwork->my_socket);

	return AWS_SUCCESS;
}
IoT_Error_t iot_tls_disconnect(Network *pNetwork)
{
	if (tls_handle)
		tls_close(&tls_handle);
	Close_TCPSocket(&pNetwork->my_socket);

	return AWS_SUCCESS;
}
IoT_Error_t iot_tls_connect(Network *pNetwork, TLSConnectParams *params)
{
	if (pNetwork == NULL)
		return NULL_VALUE_ERROR;

	IoT_Error_t ret_val = AWS_FAILURE;

	if (params != NULL) {
		Populate_ConnectParams(pNetwork, params->pRootCALocation,
				       params->pDeviceCertLocation,
				       params->pDevicePrivateKeyLocation,
				       params->pDestinationURL,
				       params->DestinationPort,
				       params->timeout_ms,
				       params->ServerVerificationFlag);
	}

	pNetwork->my_socket = Create_TCPSocket();
	if (-1 == pNetwork->my_socket) {
		ret_val = TCP_CONNECTION_ERROR;
		return ret_val;
	}

	ret_val = Connect_TCPSocket(pNetwork->my_socket,
				    pNetwork->tlsConnectParams.pDestinationURL,
				    pNetwork->tlsConnectParams.DestinationPort);
	if (AWS_SUCCESS != ret_val) {
		Close_TCPSocket(&pNetwork->my_socket);
		return ret_val;
	}
	memset(&tls_hd, 0, sizeof(tls_hd));
	ret_val = wm_tls_client_open(&tls_hd,
	 (wm_tls_cert_t *) pNetwork->tlsConnectParams.pRootCALocation,
	 (wm_tls_cert_t *) pNetwork->tlsConnectParams.pDeviceCertLocation,
	 (wm_tls_key_t *) pNetwork->tlsConnectParams.pDevicePrivateKeyLocation,
	 pNetwork->my_socket);
	if (ret_val != WM_SUCCESS)
		goto out;

	return WM_SUCCESS;
out:
	wm_tls_client_close(&tls_hd);
	Close_TCPSocket(&pNetwork->my_socket);
	return -WM_FAIL;

}