2016-09-21 16:44:27 +10:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								/* HTTPS GET Example using plain mbedTLS sockets
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								 * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								 *  Contacts  the  howsmyssl . com  API  via  TLS  v1 .2  and  reads  a  JSON 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								 *  response . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								 * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								 *  Adapted  from  the  ssl_client1  example  in  mbedtls . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								 * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								 *  Original  Copyright  ( C )  2006 - 2016 ,  ARM  Limited ,  All  Rights  Reserved ,  Apache  2.0  License . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								 *  Additions  Copyright  ( C )  Copyright  2015 - 2016  Espressif  Systems  ( Shanghai )  PTE  LTD ,  Apache  2.0  License . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								 * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								 * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								 *  Licensed  under  the  Apache  License ,  Version  2.0  ( the  " License " ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								 *  you  may  not  use  this  file  except  in  compliance  with  the  License . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								 *  You  may  obtain  a  copy  of  the  License  at 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								 * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								 *      http : //www.apache.org/licenses/LICENSE-2.0
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								 * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								 *  Unless  required  by  applicable  law  or  agreed  to  in  writing ,  software 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								 *  distributed  under  the  License  is  distributed  on  an  " AS IS "  BASIS , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								 *  WITHOUT  WARRANTIES  OR  CONDITIONS  OF  ANY  KIND ,  either  express  or  implied . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								 *  See  the  License  for  the  specific  language  governing  permissions  and 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								 *  limitations  under  the  License . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								 */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								# include  <string.h> 
 
							 
						 
					
						
							
								
									
										
										
										
											2016-11-24 08:08:09 +11:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								# include  <stdlib.h> 
 
							 
						 
					
						
							
								
									
										
										
										
											2016-09-21 16:44:27 +10:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								# include  "freertos/FreeRTOS.h" 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								# include  "freertos/task.h" 
 
							 
						 
					
						
							
								
									
										
										
										
											2016-09-26 15:48:36 +10:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								# include  "freertos/event_groups.h" 
 
							 
						 
					
						
							
								
									
										
										
										
											2016-09-21 16:44:27 +10:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								# include  "esp_wifi.h" 
 
							 
						 
					
						
							
								
									
										
										
										
											2019-04-11 18:54:26 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								# include  "esp_event.h" 
 
							 
						 
					
						
							
								
									
										
										
										
											2016-09-21 16:44:27 +10:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								# include  "esp_log.h" 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								# include  "esp_system.h" 
 
							 
						 
					
						
							
								
									
										
										
										
											2016-09-27 11:16:40 +10:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								# include  "nvs_flash.h" 
 
							 
						 
					
						
							
								
									
										
										
										
											2019-04-11 18:54:26 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								# include  "protocol_examples_common.h" 
 
							 
						 
					
						
							
								
									
										
										
										
											2019-08-31 16:19:21 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								# include  "esp_netif.h" 
 
							 
						 
					
						
							
								
									
										
										
										
											2016-09-21 16:44:27 +10:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								# include  "lwip/err.h" 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								# include  "lwip/sockets.h" 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								# include  "lwip/sys.h" 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								# include  "lwip/netdb.h" 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								# include  "lwip/dns.h" 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-02-14 18:51:26 +05:30 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								# include  "esp_tls.h" 
 
							 
						 
					
						
							
								
									
										
										
										
											2019-09-29 18:04:34 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								# include  "esp_crt_bundle.h" 
 
							 
						 
					
						
							
								
									
										
										
										
											2018-02-12 23:41:31 +05:30 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-09-21 16:44:27 +10:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								/* Constants that aren't configurable in menuconfig */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								# define WEB_SERVER "www.howsmyssl.com" 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								# define WEB_PORT "443" 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								# define WEB_URL "https: //www.howsmyssl.com/a/check"
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								static  const  char  * TAG  =  " example " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-01-08 16:56:28 +05:30 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								static  const  char  REQUEST [ ]  =  " GET  "  WEB_URL  "  HTTP/1.1 \r \n " 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                             " Host:  " WEB_SERVER " \r \n " 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                             " User-Agent: esp-idf/1.0 esp32 \r \n " 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                             " \r \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-09-21 16:44:27 +10:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-01-08 16:56:28 +05:30 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								/* Root cert for howsmyssl.com, taken from server_root_cert.pem
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								   The  PEM  file  was  extracted  from  the  output  of  this  command : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								   openssl  s_client  - showcerts  - connect  www . howsmyssl . com : 443  < / dev / null 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								   The  CA  root  cert  is  the  last  cert  given  in  the  chain  of  certs . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								   To  embed  it  in  the  app  binary ,  the  PEM  file  is  named 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								   in  the  component . mk  COMPONENT_EMBED_TXTFILES  variable . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								*/ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								extern  const  uint8_t  server_root_cert_pem_start [ ]  asm ( " _binary_server_root_cert_pem_start " ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								extern  const  uint8_t  server_root_cert_pem_end [ ]    asm ( " _binary_server_root_cert_pem_end " ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2021-09-02 09:06:09 +05:30 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								# ifdef CONFIG_ESP_TLS_CLIENT_SESSION_TICKETS 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								esp_tls_client_session_t  * tls_client_session  =  NULL ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								# endif 
 
							 
						 
					
						
							
								
									
										
										
										
											2021-01-08 16:56:28 +05:30 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								static  void  https_get_request ( esp_tls_cfg_t  cfg ) 
							 
						 
					
						
							
								
									
										
										
										
											2016-09-21 16:44:27 +10:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								{ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    char  buf [ 512 ] ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-02-12 23:41:31 +05:30 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    int  ret ,  len ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-09-21 16:44:27 +10:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-01-08 16:56:28 +05:30 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    struct  esp_tls  * tls  =  esp_tls_conn_http_new ( WEB_URL ,  & cfg ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2019-09-29 18:04:34 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-01-08 16:56:28 +05:30 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    if  ( tls  ! =  NULL )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        ESP_LOGI ( TAG ,  " Connection established... " ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    }  else  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        ESP_LOGE ( TAG ,  " Connection failed... " ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        goto  exit ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2019-09-29 18:04:34 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-09-02 09:06:09 +05:30 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								# ifdef CONFIG_ESP_TLS_CLIENT_SESSION_TICKETS 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    /* The TLS session is successfully established, now saving the session ctx for reuse */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    if  ( tls_client_session  = =  NULL )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        tls_client_session  =  esp_tls_get_client_session ( tls ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								# endif 
 
							 
						 
					
						
							
								
									
										
										
										
											2021-01-08 16:56:28 +05:30 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    size_t  written_bytes  =  0 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    do  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        ret  =  esp_tls_conn_write ( tls , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                                 REQUEST  +  written_bytes , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                                 sizeof ( REQUEST )  -  written_bytes ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        if  ( ret  > =  0 )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            ESP_LOGI ( TAG ,  " %d bytes written " ,  ret ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            written_bytes  + =  ret ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        }  else  if  ( ret  ! =  ESP_TLS_ERR_SSL_WANT_READ   & &  ret  ! =  ESP_TLS_ERR_SSL_WANT_WRITE )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            ESP_LOGE ( TAG ,  " esp_tls_conn_write  returned: [0x%02X](%s) " ,  ret ,  esp_err_to_name ( ret ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-02-26 16:04:47 +05:30 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								            goto  exit ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-09-21 16:44:27 +10:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								        } 
							 
						 
					
						
							
								
									
										
										
										
											2021-01-08 16:56:28 +05:30 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    }  while  ( written_bytes  <  sizeof ( REQUEST ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2019-09-29 18:04:34 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-01-08 16:56:28 +05:30 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    ESP_LOGI ( TAG ,  " Reading HTTP response... " ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-08-17 17:25:39 +10:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-01-08 16:56:28 +05:30 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    do  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        len  =  sizeof ( buf )  -  1 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        bzero ( buf ,  sizeof ( buf ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        ret  =  esp_tls_conn_read ( tls ,  ( char  * ) buf ,  len ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        if  ( ret  = =  ESP_TLS_ERR_SSL_WANT_WRITE   | |  ret  = =  ESP_TLS_ERR_SSL_WANT_READ )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            continue ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        } 
							 
						 
					
						
							
								
									
										
										
										
											2017-08-17 17:25:39 +10:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-01-08 16:56:28 +05:30 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								        if  ( ret  <  0 )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            ESP_LOGE ( TAG ,  " esp_tls_conn_read  returned [-0x%02X](%s) " ,  - ret ,  esp_err_to_name ( ret ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            break ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-09-21 16:44:27 +10:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								        } 
							 
						 
					
						
							
								
									
										
										
										
											2021-01-08 16:56:28 +05:30 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        if  ( ret  = =  0 )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            ESP_LOGI ( TAG ,  " connection closed " ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            break ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        len  =  ret ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        ESP_LOGD ( TAG ,  " %d bytes read " ,  len ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        /* Print response directly to stdout as it is read */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        for  ( int  i  =  0 ;  i  <  len ;  i + + )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            putchar ( buf [ i ] ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        putchar ( ' \n ' ) ;  // JSON output doesn't have a newline at end
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    }  while  ( 1 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								exit : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    esp_tls_conn_delete ( tls ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    for  ( int  countdown  =  10 ;  countdown  > =  0 ;  countdown - - )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        ESP_LOGI ( TAG ,  " %d... " ,  countdown ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        vTaskDelay ( 1000  /  portTICK_PERIOD_MS ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-09-21 16:44:27 +10:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-01-08 16:56:28 +05:30 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								static  void  https_get_request_using_crt_bundle ( void ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								{ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    ESP_LOGI ( TAG ,  " https_request using crt bundle " ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    esp_tls_cfg_t  cfg  =  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        . crt_bundle_attach  =  esp_crt_bundle_attach , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    } ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    https_get_request ( cfg ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-09-02 09:06:09 +05:30 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-01-08 16:56:28 +05:30 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								static  void  https_get_request_using_cacert_buf ( void ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								{ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    ESP_LOGI ( TAG ,  " https_request using cacert_buf " ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    esp_tls_cfg_t  cfg  =  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        . cacert_buf  =  ( const  unsigned  char  * )  server_root_cert_pem_start , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        . cacert_bytes  =  server_root_cert_pem_end  -  server_root_cert_pem_start , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    } ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    https_get_request ( cfg ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								static  void  https_get_request_using_global_ca_store ( void ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								{ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    esp_err_t  esp_ret  =  ESP_FAIL ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    ESP_LOGI ( TAG ,  " https_request using global ca_store " ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    esp_ret  =  esp_tls_set_global_ca_store ( server_root_cert_pem_start ,  server_root_cert_pem_end  -  server_root_cert_pem_start ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    if  ( esp_ret  ! =  ESP_OK )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        ESP_LOGE ( TAG ,  " Error in setting the global ca store: [%02X] (%s),could not complete the https_request using global_ca_store " ,  esp_ret ,  esp_err_to_name ( esp_ret ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        return ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    esp_tls_cfg_t  cfg  =  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        . use_global_ca_store  =  true , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    } ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    https_get_request ( cfg ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    esp_tls_free_global_ca_store ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-09-02 09:06:09 +05:30 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								# ifdef CONFIG_ESP_TLS_CLIENT_SESSION_TICKETS 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								static  void  https_get_request_using_already_saved_session ( void ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								{ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    ESP_LOGI ( TAG ,  " https_request using saved client session " ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    esp_tls_cfg_t  cfg  =  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        . client_session  =  tls_client_session , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    } ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    https_get_request ( cfg ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    free ( tls_client_session ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    tls_client_session  =  NULL ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								# endif 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-01-08 16:56:28 +05:30 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								static  void  https_request_task ( void  * pvparameters ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								{ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    ESP_LOGI ( TAG ,  " Start https_request example " ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    https_get_request_using_crt_bundle ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    https_get_request_using_cacert_buf ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    https_get_request_using_global_ca_store ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2021-09-02 09:06:09 +05:30 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								# ifdef CONFIG_ESP_TLS_CLIENT_SESSION_TICKETS 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    https_get_request_using_already_saved_session ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								# endif 
 
							 
						 
					
						
							
								
									
										
										
										
											2021-01-08 16:56:28 +05:30 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    ESP_LOGI ( TAG ,  " Finish https_request example " ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    vTaskDelete ( NULL ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2019-07-16 16:33:30 +07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								void  app_main ( void ) 
							 
						 
					
						
							
								
									
										
										
										
											2016-09-21 16:44:27 +10:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								{ 
							 
						 
					
						
							
								
									
										
										
										
											2017-03-14 21:39:44 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    ESP_ERROR_CHECK (  nvs_flash_init ( )  ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2019-11-29 10:54:02 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    ESP_ERROR_CHECK ( esp_netif_init ( ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2019-04-11 18:54:26 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    ESP_ERROR_CHECK ( esp_event_loop_create_default ( ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    /* This helper function configures Wi-Fi or Ethernet, as selected in menuconfig.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								     *  Read  " Establishing Wi-Fi or Ethernet Connection "  section  in 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								     *  examples / protocols / README . md  for  more  information  about  this  function . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								     */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    ESP_ERROR_CHECK ( example_connect ( ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-01-08 16:56:28 +05:30 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    xTaskCreate ( & https_request_task ,  " https_get_task " ,  8192 ,  NULL ,  5 ,  NULL ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-09-21 16:44:27 +10:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								}