Przeglądaj źródła

【修改】TLS 例程文件使用地址和流程

chenyong 7 lat temu
rodzic
commit
571bb73ef0
2 zmienionych plików z 64 dodań i 66 usunięć
  1. 1 0
      ports/inc/tls_config.h
  2. 63 66
      samples/tls_app_test.c

+ 1 - 0
ports/inc/tls_config.h

@@ -2726,5 +2726,6 @@
 #define tls_free    rt_free
 #define tls_realloc rt_realloc
 #define tls_calloc  rt_calloc
+#define tls_strdup  rt_strdup
 
 #endif /* MBEDTLS_CONFIG_H */

+ 63 - 66
samples/tls_app_test.c

@@ -27,72 +27,72 @@
 
 #include <rtthread.h>
 
-#include "tls_certificate.h"
-#include "tls_client.h"
+#include <tls_certificate.h>
+#include <tls_client.h>
 
 #if !defined(MBEDTLS_CONFIG_FILE)
-#include "mbedtls/config.h"
+#include <mbedtls/config.h>
 #else
 #include MBEDTLS_CONFIG_FILE
 #endif
 
-#define malloc  tls_malloc
-#define free    tls_free
-#define strdup  rt_strdup
-
-#define MBEDTLS_WEB_SERVER  "www.howsmyssl.com"
+// https://www.rt-thread.org/download/rt-thread.txt
+#define MBEDTLS_WEB_SERVER  "www.rt-thread.org"
 #define MBEDTLS_WEB_PORT    "443"
 
 #define MBEDTLS_READ_BUFFER 1024
 
-static const char *REQUEST = "GET https://www.howsmyssl.com/a/check HTTP/1.1\r\n"
-    "Host: www.howsmyssl.com\r\n"
+static const char *REQUEST = "GET /download/rt-thread.txt HTTP/1.1\r\n"
+    "Host: www.rt-thread.org\r\n"
     "User-Agent: rtthread/3.1 rtt\r\n"
     "\r\n";
 
 static void mbedlts_client_entry(void *parament)
 {
-    int ret = 0, len = 0;
+    int ret = 0;
     MbedTLSSession *tls_session = RT_NULL;
     char *pers = "hello_world";
 
     rt_kprintf("MbedTLS test sample!\r\n");
-    rt_kprintf("Memory usage before the handshake connection is established:\r\n");
-    msh_exec("free", strlen("free"));    
 
-    tls_session = (MbedTLSSession *)malloc(sizeof(MbedTLSSession));
-    if(!tls_session)
-    {   
-        rt_kprintf("no memory for tls_session struct\n");
+#ifdef FINSH_USING_MSH
+    rt_kprintf("Memory usage before the handshake connection is established:\r\n");
+    msh_exec("free", rt_strlen("free"));
+#endif
+    tls_session = (MbedTLSSession *) tls_malloc(sizeof(MbedTLSSession));
+    if (tls_session == RT_NULL)
+    {
+        rt_kprintf("No memory for MbedTLS session object.\n");
         return;
     }
-    
-    tls_session->host = strdup(MBEDTLS_WEB_SERVER);
-    tls_session->port = strdup(MBEDTLS_WEB_PORT);
+
+    tls_session->host = tls_strdup(MBEDTLS_WEB_SERVER);
+    tls_session->port = tls_strdup(MBEDTLS_WEB_PORT);
 
     tls_session->buffer_len = MBEDTLS_READ_BUFFER;
-    tls_session->buffer = malloc(tls_session->buffer_len);
-    if(!tls_session->buffer)
+    tls_session->buffer = tls_malloc(tls_session->buffer_len);
+    if (tls_session->buffer == RT_NULL)
     {
-        rt_kprintf("no memory for tls_session->buffer malloc\n");
+        rt_kprintf("No memory for MbedTLS buffer\n");
+        tls_free(tls_session);
         return;
     }
 
     rt_kprintf("Start handshake tick:%d\n", rt_tick_get());
-    
-    if((ret = mbedtls_client_init(tls_session, (void *)pers, strlen(pers))) != 0)
+
+    if ((ret = mbedtls_client_init(tls_session, (void *) pers, rt_strlen(pers))) != 0)
     {
         rt_kprintf("MbedTLSClientInit err return : -0x%x\n", -ret);
         goto __exit;
     }
 
-    if((ret = mbedtls_client_context(tls_session)) < 0)
+    if ((ret = mbedtls_client_context(tls_session)) < 0)
     {
         rt_kprintf("MbedTLSCLlientContext err return : -0x%x\n", -ret);
         goto __exit;
     }
 
-    if((ret = mbedtls_client_connect(tls_session)) != 0)
+    if ((ret = mbedtls_client_connect(tls_session)) != 0)
     {
         rt_kprintf("MbedTLSCLlientConnect err return : -0x%x\n", -ret);
         goto __exit;
@@ -102,77 +102,74 @@ static void mbedlts_client_entry(void *parament)
 
     rt_kprintf("MbedTLS connect success...\n");
 
+#ifdef FINSH_USING_MSH
     rt_kprintf("Memory usage after the handshake connection is established:\r\n");
-    msh_exec("free", strlen("free"));
+    msh_exec("free", rt_strlen("free"));
+#endif
 
-    while((ret = mbedtls_client_write(tls_session, (const unsigned char *)REQUEST, strlen(REQUEST))) <= 0)
+    while ((ret = mbedtls_client_write(tls_session, (const unsigned char *) REQUEST, rt_strlen(REQUEST))) <= 0)
     {
-        if(ret != MBEDTLS_ERR_SSL_WANT_READ && ret != MBEDTLS_ERR_SSL_WANT_WRITE)
+        if (ret != MBEDTLS_ERR_SSL_WANT_READ && ret != MBEDTLS_ERR_SSL_WANT_WRITE)
         {
             rt_kprintf("mbedtls_ssl_write returned -0x%x\n", -ret);
             goto __exit;
         }
     }
     rt_kprintf("Writing HTTP request success...\n");
-    
-    len = ret;
 
     rt_kprintf("Getting HTTP response...\n");
-    do
     {
-        int i= 0;
-        
-        memset(tls_session->buffer, 0x00, tls_session->buffer_len);
-        ret = mbedtls_client_read(tls_session, (unsigned char *)tls_session->buffer, len);
-        if(ret == MBEDTLS_ERR_SSL_WANT_READ || ret == MBEDTLS_ERR_SSL_WANT_WRITE)	
-                continue;
-        
-        if(ret == MBEDTLS_ERR_SSL_PEER_CLOSE_NOTIFY)
-            break;
-
-        if(ret < 0)
+        int i = 0;
+
+        rt_memset(tls_session->buffer, 0x00, MBEDTLS_READ_BUFFER);
+        ret = mbedtls_client_read(tls_session, (unsigned char *) tls_session->buffer, MBEDTLS_READ_BUFFER);
+        if (ret == MBEDTLS_ERR_SSL_WANT_READ || ret == MBEDTLS_ERR_SSL_WANT_WRITE
+                || ret == MBEDTLS_ERR_SSL_PEER_CLOSE_NOTIFY)
+            goto __exit;
+
+        if (ret < 0)
         {
-            rt_kprintf("mbedtls_ssl_read returned -0x%x\n", -ret);
-            break;
+            rt_kprintf("Mbedtls_ssl_read returned -0x%x\n", -ret);
+            goto __exit;
         }
 
-        if(ret == 0)
+        if (ret == 0)
         {
-            rt_kprintf("connection closed\n");
-            break;
+            rt_kprintf("TCP server connection closed.\n");
+            goto __exit;
         }
 
-        len = ret;
-        for(i = 0; i<len; i++)
+        for (i = 0; i < ret; i++)
             rt_kprintf("%c", tls_session->buffer[i]);
-    }while(1);
-    rt_kprintf("\n");
-    
+
+        rt_kprintf("\n");
+    }
+
 __exit:
     mbedtls_client_close(tls_session);
 
-    rt_kprintf("mbedlts_client_entry close!\n");
+    rt_kprintf("MbedTLS connection close success.\n");
 
-    return ;
+    return;
 }
+
 int mbedlts_client_start(void)
 {
     rt_thread_t tid;
-  
-    tid = rt_thread_create("tls_c",
-                    mbedlts_client_entry, NULL,
-                    6 * 1024, RT_THREAD_PRIORITY_MAX / 3 - 1, 5);
-    if (tid != RT_NULL)
-        rt_thread_startup(tid); 
+
+    tid = rt_thread_create("tls_c", mbedlts_client_entry, RT_NULL, 6 * 1024, RT_THREAD_PRIORITY_MAX / 3 - 1, 5);
+    if (tid)
+    {
+        rt_thread_startup(tid);
+    }
 
     return RT_EOK;
 }
 
 #ifdef RT_USING_FINSH
 #include <finsh.h>
-    FINSH_FUNCTION_EXPORT_ALIAS(mbedlts_client_start, tls_test, mbedtls client test start);
+FINSH_FUNCTION_EXPORT_ALIAS(mbedlts_client_start, tls_test, mbedtls client test start);
 #ifdef FINSH_USING_MSH
-    MSH_CMD_EXPORT_ALIAS(mbedlts_client_start, tls_test, mbedtls client test start);
-#endif 
+MSH_CMD_EXPORT_ALIAS(mbedlts_client_start, tls_test, mbedtls client test start);
+#endif
 #endif
-