nfqws: optimize tls mod parse

This commit is contained in:
bol-van 2025-04-06 11:53:57 +03:00
parent d04419a60c
commit 6e1e7e43bc

View File

@ -950,12 +950,12 @@ static bool parse_ip_list(char *opt, ipset *pp)
return true; return true;
} }
static bool parse_tlsmod_list(char *opt, uint32_t *mod, char *sni, size_t sni_buf_len) static bool parse_tlsmod_list(char *opt, struct fake_tls_mod *tls_mod)
{ {
char *e,*e2,*p,c,c2; char *e,*e2,*p,c,c2;
*mod &= FAKE_TLS_MOD_SAVE_MASK; tls_mod->mod &= FAKE_TLS_MOD_SAVE_MASK;
*mod |= FAKE_TLS_MOD_SET; tls_mod->mod |= FAKE_TLS_MOD_SET;
for (p=opt ; p ; ) for (p=opt ; p ; )
{ {
for (e2=p ; *e2 && *e2!=',' && *e2!='=' ; e2++); for (e2=p ; *e2 && *e2!=',' && *e2!='=' ; e2++);
@ -975,20 +975,20 @@ static bool parse_tlsmod_list(char *opt, uint32_t *mod, char *sni, size_t sni_bu
e2=NULL; e2=NULL;
if (!strcmp(p,"rnd")) if (!strcmp(p,"rnd"))
*mod |= FAKE_TLS_MOD_RND; tls_mod->mod |= FAKE_TLS_MOD_RND;
else if (!strcmp(p,"rndsni")) else if (!strcmp(p,"rndsni"))
*mod |= FAKE_TLS_MOD_RND_SNI; tls_mod->mod |= FAKE_TLS_MOD_RND_SNI;
else if (!strcmp(p,"sni")) else if (!strcmp(p,"sni"))
{ {
*mod |= FAKE_TLS_MOD_SNI; tls_mod->mod |= FAKE_TLS_MOD_SNI;
if (!e2 || !e2[1] || e2[1]==',') goto err; if (!e2 || !e2[1] || e2[1]==',') goto err;
strncpy(sni,e2+1,sni_buf_len-1); strncpy(tls_mod->sni,e2+1,sizeof(tls_mod->sni)-1);
sni[sni_buf_len-1]=0; tls_mod->sni[sizeof(tls_mod->sni)-1-1]=0;
} }
else if (!strcmp(p,"padencap")) else if (!strcmp(p,"padencap"))
*mod |= FAKE_TLS_MOD_PADENCAP; tls_mod->mod |= FAKE_TLS_MOD_PADENCAP;
else if (!strcmp(p,"dupsid")) else if (!strcmp(p,"dupsid"))
*mod |= FAKE_TLS_MOD_DUP_SID; tls_mod->mod |= FAKE_TLS_MOD_DUP_SID;
else if (strcmp(p,"none")) else if (strcmp(p,"none"))
goto err; goto err;
@ -2128,7 +2128,7 @@ int main(int argc, char **argv)
} }
break; break;
case 40: /* dpi-desync-fake-tls-mod */ case 40: /* dpi-desync-fake-tls-mod */
if (!parse_tlsmod_list(optarg,&dp->tls_mod_last.mod,dp->tls_mod_last.sni,sizeof(dp->tls_mod_last.sni))) if (!parse_tlsmod_list(optarg,&dp->tls_mod_last))
{ {
DLOG_ERR("Invalid tls mod : %s\n",optarg); DLOG_ERR("Invalid tls mod : %s\n",optarg);
exit_clean(1); exit_clean(1);