Commit edda081e authored by 957dd's avatar 957dd

Merge branch 'feature/refactor_devid_0405' into 'master'

修改了验证1s一次,减少了部分bug See merge request !110
parents 3c27f73d 8154c61f
No preview for this file type
...@@ -6,7 +6,7 @@ int mylog_init(); ...@@ -6,7 +6,7 @@ int mylog_init();
#ifdef LOG_PRODUCTION #ifdef LOG_PRODUCTION
#define my_zlog_debug(...) ((void)0) #define my_zlog_debug(...) ((void)0)
#define my_zlog_info(...) ((void)0) #define my_zlog _info(...) ((void)0)
#else #else
void my_zlog_debug(const char *format, ...) ; void my_zlog_debug(const char *format, ...) ;
void my_zlog_info(const char *format, ...) ; void my_zlog_info(const char *format, ...) ;
......
...@@ -29,7 +29,9 @@ static bool s_secret_key_index = TRUE;//用于判断是否对比topic ...@@ -29,7 +29,9 @@ static bool s_secret_key_index = TRUE;//用于判断是否对比topic
static char s_pending_verify_token[1024]; static char s_pending_verify_token[1024];
static char s_last_seen_token[1024]; /* 用于判断token是否变化(首次启动默认全0) */ static char s_last_seen_token[1024]; /* 用于判断token是否变化(首次启动默认全0) */
static int s_verify_retry_count = 0; static int s_verify_retry_count = 0;
static time_t s_verify_retry_after_time = 0; /* 允许发起重试的时间戳,0 表示无待重试 */
#define VERIFY_RETRY_MAX 3 #define VERIFY_RETRY_MAX 3
#define VERIFY_RETRY_INTERVAL_SEC 1
int g_verify_index =0;//判断是否验证成功 int g_verify_index =0;//判断是否验证成功
pthread_mutex_t g_verify_mutex = PTHREAD_MUTEX_INITIALIZER;//线程锁 pthread_mutex_t g_verify_mutex = PTHREAD_MUTEX_INITIALIZER;//线程锁
...@@ -111,6 +113,14 @@ int receive_jwt(cJSON *body) { ...@@ -111,6 +113,14 @@ int receive_jwt(cJSON *body) {
return 1; return 1;
} }
/* 有待重试且已过 1s:等有消息进来时再发重试,不阻塞 */
if (s_verify_retry_count > 0 && s_verify_retry_count < VERIFY_RETRY_MAX
&& s_verify_retry_after_time > 0 && time(NULL) >= s_verify_retry_after_time) {
s_verify_retry_after_time = 0;
send_jwtser(s_pending_verify_token);
my_zlog_notice("距上次失败已过%d秒,发起第%d次重试验证", VERIFY_RETRY_INTERVAL_SEC, s_verify_retry_count + 1);
}
/* /*
* token 变化触发验证策略: * token 变化触发验证策略:
* - 首次启动(s_last_seen_token 为空)只保存,不验证,确保下一次必定“有变化”再验证 * - 首次启动(s_last_seen_token 为空)只保存,不验证,确保下一次必定“有变化”再验证
...@@ -208,13 +218,14 @@ int message2006_verify(cJSON *body){ ...@@ -208,13 +218,14 @@ int message2006_verify(cJSON *body){
strcpy(s_secret_key, s_pending_verify_token); strcpy(s_secret_key, s_pending_verify_token);
s_secret_key_index = FALSE; s_secret_key_index = FALSE;
s_verify_retry_count = 0; s_verify_retry_count = 0;
s_verify_retry_after_time = 0;
} else { } else {
/* 仅当 onlyid 匹配时视为本次验证的回复,否则可能是旧包 */ /* 仅当 onlyid 匹配时视为本次验证的回复,否则可能是旧包 */
if (strcmp(onlyid, s_only_id_middle) == 0) { if (strcmp(onlyid, s_only_id_middle) == 0) {
s_verify_retry_count++; s_verify_retry_count++;
if (s_verify_retry_count < VERIFY_RETRY_MAX) { if (s_verify_retry_count < VERIFY_RETRY_MAX) {
my_zlog_notice("验证不通过,第%d次重试", s_verify_retry_count); my_zlog_notice("验证不通过,第%d次,将在下次收到消息且距本次超过%ds后重试", s_verify_retry_count, VERIFY_RETRY_INTERVAL_SEC);
send_jwtser(s_pending_verify_token); s_verify_retry_after_time = time(NULL) + VERIFY_RETRY_INTERVAL_SEC;
} else { } else {
my_zlog_warn("topic验证超过%d次不通过,禁止使用", VERIFY_RETRY_MAX); my_zlog_warn("topic验证超过%d次不通过,禁止使用", VERIFY_RETRY_MAX);
g_verify_index = 1; g_verify_index = 1;
......
...@@ -9,4 +9,4 @@ file perms = 600 ...@@ -9,4 +9,4 @@ file perms = 600
millisecond = "%d(%Y-%m-%d %H:%M:%S).%ms [%V] %m%n" millisecond = "%d(%Y-%m-%d %H:%M:%S).%ms [%V] %m%n"
[rules] [rules]
my_log.* "/home/orangepi/car/master/log/log_2026-03-14.log"; millisecond my_log.* "/home/orangepi/car/master/log/log_2026-03-16.log"; millisecond
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