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);
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)
{
// 初始化 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
/* 初始化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;