Adapt WSS to new boards and use MQTT domain for eSIM connectivity
Preserve main GNSS and volume behavior while porting verified TLS, receive fixes and full-handshake optimizations. Add MQTT connection diagnostics and route MQTT through banban.api.talkingq.com:1883. Include migration documentation and regression tools. Firmware builds and package checks passed; user confirmed new-board connectivity after switching the MQTT host to the domain.
This commit is contained in:
@@ -3,6 +3,7 @@
|
||||
#include <librws.h>
|
||||
#include "cJSON.h"
|
||||
#include "app_inc.h"
|
||||
#include "talkingq_wss.h"
|
||||
#include "ql_rtos.h"
|
||||
#include "ql_application.h"
|
||||
#include "ql_audio.h"
|
||||
@@ -129,6 +130,7 @@ unsigned char get_xiaoice_connected_status(void)
|
||||
|
||||
static void onopen(rws_socket socket)
|
||||
{
|
||||
if (socket != app->socket || !app->init) return;
|
||||
wss_connect_counter=0;
|
||||
|
||||
LOG_D("websocket connected. ");
|
||||
@@ -153,12 +155,14 @@ static void onclose(rws_socket socket)
|
||||
LOG_D("websocket disconnect! ");
|
||||
}
|
||||
|
||||
xiaoice_wss_connect_status = 0;
|
||||
|
||||
rws_socket_disconnect_and_release(app->socket);
|
||||
if (socket != app->socket) return;
|
||||
xiaoice_wss_connect_status = 0;
|
||||
app->socket = NULL;
|
||||
/* The worker owns and releases this socket after the callback. */
|
||||
|
||||
RLOGD("onclose end\r\n");
|
||||
app->init = 0;
|
||||
if (ws_connect_sem) ql_rtos_semaphore_release(ws_connect_sem);
|
||||
|
||||
hal_led_b_off();
|
||||
}
|
||||
@@ -305,8 +309,8 @@ int talkingq_ws_connect()
|
||||
{
|
||||
int result;
|
||||
int ret = -1;
|
||||
char wss_path[56]={0};
|
||||
char ws_talkingq_url[56]={0};
|
||||
char wss_path[TALKINGQ_PATH_CAPACITY]={0};
|
||||
char ws_talkingq_url[TALKINGQ_URL_CAPACITY]={0};
|
||||
int port;
|
||||
// char session_id[56]={0};
|
||||
// char ip_name[56]={0};
|
||||
@@ -329,40 +333,33 @@ int talkingq_ws_connect()
|
||||
ql_rtos_semaphore_create(&ws_connect_sem, 0);
|
||||
}
|
||||
|
||||
sprintf(wss_path,"%s","/ws");
|
||||
|
||||
if (ws_connect_sem) while (ql_rtos_semaphore_wait(ws_connect_sem, 0) == 0) {}
|
||||
hal_os_get_talkingq_url(ws_talkingq_url);
|
||||
printf("ws_talkingq_url %s",ws_talkingq_url);
|
||||
|
||||
if(strncmp(ws_talkingq_url,"ws://",5)){
|
||||
printf("error ws url %s",ws_talkingq_url);
|
||||
return -1;
|
||||
}
|
||||
|
||||
char *testp = strstr(ws_talkingq_url+5,":");
|
||||
if(!testp){
|
||||
strcpy(talkingq_host,ws_talkingq_url+5);
|
||||
port = 80;
|
||||
}else{
|
||||
port = atoi(testp+1);
|
||||
*testp = 0;
|
||||
strcpy(talkingq_host,ws_talkingq_url+5);
|
||||
}
|
||||
if (talkingq_parse_wss_url(ws_talkingq_url, talkingq_host, sizeof(talkingq_host),
|
||||
&port, wss_path, sizeof(wss_path)) != 0) {
|
||||
LOG_E("Invalid WSS endpoint; cleartext fallback is disabled\n");
|
||||
app->init = 0;
|
||||
xiaoice_wss_connect_status = 0;
|
||||
return -1;
|
||||
}
|
||||
|
||||
app->socket = rws_socket_create();
|
||||
if(app->socket == NULL)
|
||||
{
|
||||
app->init = 0;
|
||||
app->init = 0;
|
||||
xiaoice_wss_connect_status = 0;
|
||||
LOG_E("librws socket create failed. ");
|
||||
return (-1);
|
||||
}
|
||||
|
||||
printf("talkingq host %s , port %d",talkingq_host,port);
|
||||
|
||||
//todo wss
|
||||
//rws_socket_set_url(app->socket, "ws", "hz.api.talkingq.com", 8080, wss_path);
|
||||
//118.25.13.180:8080
|
||||
rws_socket_set_url(app->socket, "ws", talkingq_host, port, wss_path);
|
||||
/* Server-authenticated TLS; application authentication stays in onopen. */
|
||||
rws_socket_set_url(app->socket, "wss", talkingq_host, port, wss_path);
|
||||
rws_socket_set_server_cert(app->socket, talkingq_root_ca, talkingq_root_ca_size);
|
||||
|
||||
rws_socket_set_on_connected(app->socket, &onopen);
|
||||
rws_socket_set_on_disconnected(app->socket, &onclose);
|
||||
@@ -374,7 +371,9 @@ int talkingq_ws_connect()
|
||||
ret = rws_socket_connect(app->socket);
|
||||
if(ret == rws_false)
|
||||
{
|
||||
app->init = 0;
|
||||
rws_socket_disconnect_and_release(app->socket);
|
||||
app->socket = NULL;
|
||||
app->init = 0;
|
||||
LOG_E("rws_socket_connect failed. ");
|
||||
ret = -1;
|
||||
}
|
||||
@@ -383,14 +382,17 @@ int talkingq_ws_connect()
|
||||
ret = -1;
|
||||
LOG_D("try rws_socket_connect. ");
|
||||
if(ws_connect_sem){
|
||||
result = ql_rtos_semaphore_wait(ws_connect_sem, 10000);
|
||||
if(result==0){
|
||||
result = ql_rtos_semaphore_wait(ws_connect_sem, 45000);
|
||||
if(result == 0 && app->init && app->socket && rws_socket_is_connected(app->socket)){
|
||||
LOG_I("ws connect okay");
|
||||
wss_connect_counter = 0;
|
||||
ret = 0;
|
||||
}else{
|
||||
app->init = 0;
|
||||
LOG_E("ws connect wait timeout");
|
||||
/* Stop the pending worker before allowing a new attempt. */
|
||||
if (app->socket) rws_socket_disconnect_and_release(app->socket);
|
||||
app->socket = NULL;
|
||||
app->init = 0;
|
||||
LOG_E("ws connect failed or wait timeout");
|
||||
wss_connect_counter++;
|
||||
}
|
||||
}else{
|
||||
@@ -399,7 +401,7 @@ int talkingq_ws_connect()
|
||||
}
|
||||
}
|
||||
|
||||
if(app->init == 1){
|
||||
if(ret == 0 && app->init == 1){
|
||||
xiaoice_wss_connect_status = 2;
|
||||
hal_led_b_on();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user