Commit e1dc9bc1 authored by 957dd's avatar 957dd

修改了验证逻辑,空字符串不验证,验证失败会最多验证3次,防止失败

parent 39dea0c6
No preview for this file type
......@@ -285,10 +285,10 @@ static void car0102_steering_angle_smooth_process() {
if (steering_mode == 3) {
// 左转: 90 -> 130
wanted_angle = 90 + (input_angle * 30) / 180;
wanted_angle = 90 + (input_angle * 37) / 180;
} else if (steering_mode == 4) {
// 右转: 90 -> 50
wanted_angle = 90 - (input_angle * 30) / 180;
wanted_angle = 90 - (input_angle * 37) / 180;
} else {
wanted_angle = 90;
smooth_step = STEER_STEP_RETURN; // 回正阶段使用更大的步长
......
......@@ -25,6 +25,12 @@ char g_secret_key[1024];//存储上一次的topic
bool g_secret_key_index = TRUE;//用于判断是否对比topic
/* topic 不同时发后端验证,失败可重试,超过 3 次不通过则判定该 topic 不通过 */
static char g_pending_verify_token[1024];
static char g_last_seen_token[1024]; /* 用于判断token是否变化(首次启动默认全0) */
static int g_verify_retry_count = 0;
#define VERIFY_RETRY_MAX 3
int g_verify_index =0;//判断是否验证成功
pthread_mutex_t g_verify_mutex = PTHREAD_MUTEX_INITIALIZER;//线程锁
......@@ -97,19 +103,46 @@ int receive_jwt(cJSON *body) {
token=json_token->valuestring;
token_time=json_token_time->valuestring;
if(g_secret_key_index == FALSE) {
if(strcmp(token,g_secret_key)!=0){
/* 空字符串视为无效,不发给后端 */
if (token == NULL || token[0] == '\0' || token_time == NULL || token_time[0] == '\0') {
my_zlog_debug("验证为空");
g_verify_index = 1;
return 1;
}
/*
* token 变化触发验证策略:
* - 首次启动(g_last_seen_token 为空)只保存,不验证,确保下一次必定“有变化”再验证
* - 之后每次只要 token 和上一次接收到的不一样,就发起后端验证
*/
if (g_last_seen_token[0] == '\0') {
strncpy(g_last_seen_token, token, sizeof(g_last_seen_token) - 1);
g_last_seen_token[sizeof(g_last_seen_token) - 1] = '\0';
strncpy(g_pending_verify_token, token, sizeof(g_pending_verify_token) - 1);
g_pending_verify_token[sizeof(g_pending_verify_token) - 1] = '\0';
g_verify_retry_count = 0;
send_jwtser(token);
g_secret_key_index = TRUE;
pthread_mutex_lock(&g_verify_mutex);
g_verify_count=0;
g_verify_count = 0;
pthread_mutex_unlock(&g_verify_mutex);
my_zlog_notice("topic不同,验证完成");
}
}else {
my_zlog_notice("topic相同");
strcpy(g_secret_key,token);
g_secret_key_index = FALSE;
my_zlog_notice("首次token,发起验证");
} else if (strcmp(token, g_last_seen_token) != 0) {
strncpy(g_last_seen_token, token, sizeof(g_last_seen_token) - 1);
g_last_seen_token[sizeof(g_last_seen_token) - 1] = '\0';
strncpy(g_pending_verify_token, token, sizeof(g_pending_verify_token) - 1);
g_pending_verify_token[sizeof(g_pending_verify_token) - 1] = '\0';
g_verify_retry_count = 0;
send_jwtser(token);
pthread_mutex_lock(&g_verify_mutex);
g_verify_count = 0;
pthread_mutex_unlock(&g_verify_mutex);
my_zlog_notice("token变化,发起验证");
} else {
my_zlog_notice("token未变化");
}
......@@ -170,13 +203,30 @@ int message2006_verify(cJSON *body){
if(strcmp(onlyid,g_only_id_middle) == 0 && strcmp(status, "1") == 0){
my_zlog_debug("获得验证正确");
g_service_verify = TRUE;
}else {
my_zlog_debug("获得验证c错误,禁止使用");
g_verify_index=1;
my_zlog_debug("g_verify_index= %d ",g_verify_index);
g_verify_index = 0; /* 后端通过后必须清除失败标志,否则正确 token 仍会提示验证不通过 */
strcpy(g_secret_key, g_pending_verify_token);
g_secret_key_index = FALSE;
g_verify_retry_count = 0;
} else {
/* 仅当 onlyid 匹配时视为本次验证的回复,否则可能是旧包 */
if (strcmp(onlyid, g_only_id_middle) == 0) {
g_verify_retry_count++;
if (g_verify_retry_count < VERIFY_RETRY_MAX) {
my_zlog_notice("验证不通过,第%d次重试", g_verify_retry_count);
send_jwtser(g_pending_verify_token);
} else {
my_zlog_warn("topic验证超过%d次不通过,禁止使用", VERIFY_RETRY_MAX);
g_verify_index = 1;
g_service_verify = FALSE;
return 2;
}
} else {
my_zlog_debug("获得验证错误,禁止使用");
g_verify_index = 1;
g_service_verify = FALSE;
return 2;
}
}
return 0;
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment