可以开始调试了 2063/2
author孙春阳 <snickersun@163.com>
Mon, 11 Aug 2025 06:34:34 +0000 (14:34 +0800)
committer孙春阳 <snickersun@163.com>
Mon, 11 Aug 2025 06:34:34 +0000 (14:34 +0800)
code/sdk/drivers/peripheral/slip/cat1Service/cat1_ws.cpp

index f19097f..f1130d9 100644 (file)
@@ -479,17 +479,17 @@ int send_handshake(WebSocketClient *client,const char *headers,char *response,in
         ret = -1;
     }
     
-    // retlen = tcp_recv_data_directly(client->tcp_handle, (uint8_t *)response, response_len);
+    int retlen = tcp_recv_data_directly(client->tcp_handle, (uint8_t *)response, response_len);
 
-    // if(retlen<0)
-    // {
-    //     printf("tcp_recv_data_directly failed");
-    //     ret = -1;
-    // }
-    // else
-    // {
-    //     ret = retlen;
-    // }
+    if(retlen<0)
+    {
+        printf("tcp_recv_data_directly failed");
+        ret = -1;
+    }
+    else
+    {
+        ret = retlen;
+    }
     
     free(request);
     printf("send_handshake3 %d",ret);
@@ -567,7 +567,33 @@ int send_websocket_message(WebSocketClient *client, uint8_t *message, size_t mes
 
 void _tcp_on_connect_cb(tcp_handle_t handle, bool success)
 {
-    printf("tcp_on_connect_cb %d %d\r\n",handle,success);
+    printf("tcp_on_connect_cb %p %d\r\n", handle, success);
+    
+    if (success) {
+        // 连接成功,查找对应的WebSocket客户端
+        extern WebSocketClient * get_ws_client_by_handle(void* handle);
+        WebSocketClient * client = get_ws_client_by_handle(handle);
+        if (client != NULL) {
+            printf("连接成功,开始WebSocket握手\r\n");
+            
+            // 发送WebSocket握手请求
+            char *buffer = (char *)aic_zalloc(BUFFER_SIZE);
+            if (buffer != NULL) {
+                int bytes_received = send_handshake(client, "", buffer, BUFFER_SIZE);
+                if (bytes_received < 0) {
+                    printf("WebSocket握手失败\r\n");
+                    tcp_manager_close(client->tcp_handle);
+                } else {
+                    printf("WebSocket握手发送成功\r\n");
+                }
+                free(buffer);
+            }
+        } else {
+            printf("未找到对应的WebSocket客户端\r\n");
+        }
+    } else {
+        printf("TCP连接失败\r\n");
+    }
 }
 void _tcp_on_disconnect_cb(tcp_handle_t handle)
 {
@@ -595,13 +621,10 @@ void _tcp_on_data_received_cb(tcp_handle_t handle, uint8_t* data, uint16_t datal
 // 初始化 WebSocket 客户端
 WebSocketClient *init_websocket_client(const char *url, const char *headers,uint8_t use_dns) {
     //printf("init_websocket_client 1\n");
-    char *buffer = NULL;
-    WebSocketClient *client  =NULL;
+    WebSocketClient *client = NULL;
     BK_URL parsed_url = {0};
-    ssize_t bytes_received;
     int opt = 1;
-
-    err_t ret=0;
+    err_t ret = 0;
 
     parsed_url = parse_url(url);//解析url
 
@@ -638,37 +661,24 @@ WebSocketClient *init_websocket_client(const char *url, const char *headers,uint
     
     /* 初始化WebSocket组包解析器 */
     ws_parser_init(&client->parser);
-    buffer=(char *)aic_zalloc(BUFFER_SIZE);
-    if (bytes_received = send_handshake(client,headers,buffer,BUFFER_SIZE) < 0) { //发送头
-         printf("socket send_handshake client_ERROR");
-        tcp_manager_close(client->tcp_handle);
-        goto client_ERROR;
-    }
-
     
-    if (bytes_received > 0) {
-        buffer[bytes_received] = '\0';
-        printf("Received handshake response:\n%s\n", buffer);
-    }
+    /* 握手将在连接成功回调中发送,这里不再立即发送 */
+    printf("WebSocket客户端初始化完成,等待TCP连接建立\r\n");
     
   
 
-    if(strstr(buffer,"HTTP/1.1 101") == NULL)
-    {
+    // if(strstr(buffer,"HTTP/1.1 101") == NULL)
+    // {
         
-        goto client_ERROR;
-    }
-     printf("init_websocket_client end 1");
-    free(buffer);
+    //     goto client_ERROR;
+    // }
+    //  printf("init_websocket_client end 1");
+    // free(buffer);
     free_url(parsed_url);
 
      printf("init_websocket_client end 2");
     return client;
 client_ERROR:
-    if(buffer) {
-        free(buffer);
-        buffer=NULL;
-    }
     if(client){
         free(client);
         client = NULL;