Skip to content
Snippets Groups Projects
Commit 64a6ab9d authored by Rob Swindell's avatar Rob Swindell :speech_balloon:
Browse files

Don't display menu of file xfer prots when auto-selecting user's default prot

When a user has a "default download protocol" selected (configured for their
user account), don't display a menu of file transfer protocols when we're
just going to auto-select their default anyway (e.g. when downloading a QWK
packet).

This change also introduces an argument (%s, the protocol name) in the
StartXferNow text.dat string, so that if/when the user forgets which default
download transfer protocol they had selected, they'll be reminded ("oh yeah,
I need start an XMODEM download!").

This fixes issue #767
parent 54523145
Branches
Tags
1 merge request!455Update branch with changes from master
Pipeline #6531 passed
...@@ -338,6 +338,8 @@ bool sbbs_t::start_batch_download() ...@@ -338,6 +338,8 @@ bool sbbs_t::start_batch_download()
bputs(text[NotEnoughTimeToDl]); bputs(text[NotEnoughTimeToDl]);
return(false); return(false);
} }
i = protnum(useron.prot);
if (i >= cfg.total_prots) {
xfer_prot_menu(XFER_BATCH_DOWNLOAD); xfer_prot_menu(XFER_BATCH_DOWNLOAD);
sync(); sync();
mnemonics(text[ProtocolOrQuit]); mnemonics(text[ProtocolOrQuit]);
...@@ -347,7 +349,6 @@ bool sbbs_t::start_batch_download() ...@@ -347,7 +349,6 @@ bool sbbs_t::start_batch_download()
sprintf(tmp,"%c",cfg.prot[i]->mnemonic); sprintf(tmp,"%c",cfg.prot[i]->mnemonic);
SAFECAT(str,tmp); SAFECAT(str,tmp);
} }
ungetkey(useron.prot);
ch=(char)getkeys(str,0); ch=(char)getkeys(str,0);
if(ch==quit_key() || sys_status&SS_ABORT) if(ch==quit_key() || sys_status&SS_ABORT)
return(false); return(false);
...@@ -355,6 +356,7 @@ bool sbbs_t::start_batch_download() ...@@ -355,6 +356,7 @@ bool sbbs_t::start_batch_download()
if(cfg.prot[i]->batdlcmd[0] && cfg.prot[i]->mnemonic==ch if(cfg.prot[i]->batdlcmd[0] && cfg.prot[i]->mnemonic==ch
&& chk_ar(cfg.prot[i]->ar,&useron,&client)) && chk_ar(cfg.prot[i]->ar,&useron,&client))
break; break;
}
if(i>=cfg.total_prots || !create_batchdn_lst((cfg.prot[i]->misc&PROT_NATIVE) ? true:false)) { if(i>=cfg.total_prots || !create_batchdn_lst((cfg.prot[i]->misc&PROT_NATIVE) ? true:false)) {
return(false); return(false);
} }
......
...@@ -147,7 +147,7 @@ int sbbs_t::protocol(prot_t* prot, enum XFER_TYPE type ...@@ -147,7 +147,7 @@ int sbbs_t::protocol(prot_t* prot, enum XFER_TYPE type
if(sys_status&SS_ABORT || !online) { /* if ctrl-c or hangup */ if(sys_status&SS_ABORT || !online) { /* if ctrl-c or hangup */
return(-1); return(-1);
} }
bputs(text[StartXferNow]); bprintf(text[StartXferNow], prot->name);
if(cd) if(cd)
p=cfg.temp_dir; p=cfg.temp_dir;
else else
...@@ -396,9 +396,8 @@ bool sbbs_t::sendfile(char* fname, char prot, const char* desc, bool autohang) ...@@ -396,9 +396,8 @@ bool sbbs_t::sendfile(char* fname, char prot, const char* desc, bool autohang)
int error; int error;
bool result; bool result;
if(prot > ' ') i = protnum(prot);
ch=toupper(prot); if (i >= cfg.total_prots) {
else {
xfer_prot_menu(XFER_DOWNLOAD); xfer_prot_menu(XFER_DOWNLOAD);
mnemonics(text[ProtocolOrQuit]); mnemonics(text[ProtocolOrQuit]);
sprintf(keys,"%c",quit_key()); sprintf(keys,"%c",quit_key());
...@@ -410,12 +409,12 @@ bool sbbs_t::sendfile(char* fname, char prot, const char* desc, bool autohang) ...@@ -410,12 +409,12 @@ bool sbbs_t::sendfile(char* fname, char prot, const char* desc, bool autohang)
if(ch==quit_key() || sys_status&SS_ABORT) if(ch==quit_key() || sys_status&SS_ABORT)
return false; return false;
}
for(i=0;i<cfg.total_prots;i++) for(i=0;i<cfg.total_prots;i++)
if(cfg.prot[i]->mnemonic==ch && chk_ar(cfg.prot[i]->ar,&useron,&client)) if(cfg.prot[i]->mnemonic==ch && chk_ar(cfg.prot[i]->ar,&useron,&client))
break; break;
if(i >= cfg.total_prots) if(i >= cfg.total_prots)
return false; return false;
}
time_t elapsed = 0; time_t elapsed = 0;
error = protocol(cfg.prot[i], XFER_DOWNLOAD, fname, fname, false, autohang, &elapsed); error = protocol(cfg.prot[i], XFER_DOWNLOAD, fname, fname, false, autohang, &elapsed);
if(cfg.prot[i]->misc&PROT_DSZLOG) if(cfg.prot[i]->misc&PROT_DSZLOG)
......
...@@ -603,6 +603,8 @@ void sbbs_t::qwk_sec() ...@@ -603,6 +603,8 @@ void sbbs_t::qwk_sec()
/***************/ /***************/
/* Send Packet */ /* Send Packet */
/***************/ /***************/
i = protnum(useron.prot);
if (i >= cfg.total_prots) {
xfer_prot_menu(XFER_DOWNLOAD); xfer_prot_menu(XFER_DOWNLOAD);
mnemonics(text[ProtocolOrQuit]); mnemonics(text[ProtocolOrQuit]);
snprintf(tmp2, sizeof tmp2, "%c",quit_key()); snprintf(tmp2, sizeof tmp2, "%c",quit_key());
...@@ -611,7 +613,6 @@ void sbbs_t::qwk_sec() ...@@ -611,7 +613,6 @@ void sbbs_t::qwk_sec()
snprintf(tmp, sizeof tmp, "%c",cfg.prot[i]->mnemonic); snprintf(tmp, sizeof tmp, "%c",cfg.prot[i]->mnemonic);
strcat(tmp2,tmp); strcat(tmp2,tmp);
} }
ungetkey(useron.prot);
ch=(char)getkeys(tmp2,0); ch=(char)getkeys(tmp2,0);
if(ch==quit_key() || sys_status&SS_ABORT || !online) { if(ch==quit_key() || sys_status&SS_ABORT || !online) {
for(i=0;i<cfg.total_subs;i++) for(i=0;i<cfg.total_subs;i++)
...@@ -623,6 +624,7 @@ void sbbs_t::qwk_sec() ...@@ -623,6 +624,7 @@ void sbbs_t::qwk_sec()
if(cfg.prot[i]->dlcmd[0] && cfg.prot[i]->mnemonic==ch if(cfg.prot[i]->dlcmd[0] && cfg.prot[i]->mnemonic==ch
&& chk_ar(cfg.prot[i]->ar,&useron,&client)) && chk_ar(cfg.prot[i]->ar,&useron,&client))
break; break;
}
if(i<cfg.total_prots) { if(i<cfg.total_prots) {
snprintf(str, sizeof str, "%s%s.qwk",cfg.temp_dir,cfg.sys_id); snprintf(str, sizeof str, "%s%s.qwk",cfg.temp_dir,cfg.sys_id);
snprintf(tmp2, sizeof tmp2, "%s.qwk",cfg.sys_id); snprintf(tmp2, sizeof tmp2, "%s.qwk",cfg.sys_id);
......
...@@ -838,6 +838,7 @@ public: ...@@ -838,6 +838,7 @@ public:
char cmdstr_output[512]{}; char cmdstr_output[512]{};
char* ultoac(uint32_t, char*, char sep=','); char* ultoac(uint32_t, char*, char sep=',');
char* u64toac(uint64_t, char*, char sep=','); char* u64toac(uint64_t, char*, char sep=',');
int protnum(char prot);
const char* protname(char prot); const char* protname(char prot);
void subinfo(int subnum); void subinfo(int subnum);
......
...@@ -1428,11 +1428,21 @@ char* sbbs_t::u64toac(uint64_t val, char* str, char sep) ...@@ -1428,11 +1428,21 @@ char* sbbs_t::u64toac(uint64_t val, char* str, char sep)
return ::u64toac(val, str, sep); return ::u64toac(val, str, sep);
} }
int sbbs_t::protnum(char prot)
{
int i;
for(i = 0; i < cfg.total_prots; ++i) {
if(prot == cfg.prot[i]->mnemonic && chk_ar(cfg.prot[i]->ar, &useron, &client))
break;
}
return i;
}
const char* sbbs_t::protname(char prot) const char* sbbs_t::protname(char prot)
{ {
for(int i=0; i < cfg.total_prots; ++i) { int i = protnum(prot);
if(prot == cfg.prot[i]->mnemonic) if(i < cfg.total_prots)
return cfg.prot[i]->name; return cfg.prot[i]->name;
}
return text[None]; return text[None];
} }
...@@ -153,14 +153,12 @@ const char * const text_defaults[TOTAL_TEXT]={ ...@@ -153,14 +153,12 @@ const char * const text_defaults[TOTAL_TEXT]={
,"\x01\x6c\x01\x5f\x01\x63\x01\x68\x47\x65\x6e\x65\x72\x61\x6c\x20\x54\x65\x78\x74\x20\x46\x69\x6c\x65\x20\x53\x65\x63\x74\x69\x6f" ,"\x01\x6c\x01\x5f\x01\x63\x01\x68\x47\x65\x6e\x65\x72\x61\x6c\x20\x54\x65\x78\x74\x20\x46\x69\x6c\x65\x20\x53\x65\x63\x74\x69\x6f"
"\x6e\x73\x3a\x0d\x0a\x0d\x0a" // 081 TextSectionLstHdr "\x6e\x73\x3a\x0d\x0a\x0d\x0a" // 081 TextSectionLstHdr
,"\x01\x6e\x01\x63\x3c\x01\x68\x25\x64\x01\x6e\x01\x63\x3e\x20\x25\x73\x0d\x0a" // 082 TextSectionLstFmt ,"\x01\x6e\x01\x63\x3c\x01\x68\x25\x64\x01\x6e\x01\x63\x3e\x20\x25\x73\x0d\x0a" // 082 TextSectionLstFmt
,"\x01\x5f\x0d\x0a\x01\x63\x40\x57\x68\x69\x63\x68\x40\x20\x6f\x72\x20\x01\x68\x7e\x51\x01\x6e\x01\x63\x75\x69\x74\x3a\x20\x01\x68" ,"\x0d\x0a\x40\x4d\x4e\x45\x3a\x43\x40\x40\x57\x68\x69\x63\x68\x40\x20\x6f\x72\x20\x7e\x40\x51\x75\x69\x74\x40\x3a\x20" // 083 WhichTextSection
"" // 083 WhichTextSection
,"\x01\x6c\x01\x5f\x01\x63\x01\x68\x25\x73\x20\x46\x69\x6c\x65\x73\x3a\x0d\x0a\x0d\x0a" // 084 TextFilesLstHdr ,"\x01\x6c\x01\x5f\x01\x63\x01\x68\x25\x73\x20\x46\x69\x6c\x65\x73\x3a\x0d\x0a\x0d\x0a" // 084 TextFilesLstHdr
,"\x01\x63\x01\x68\x25\x33\x64\x3a\x20\x01\x6e\x01\x63\x25\x73" // 085 TextFilesLstFmt ,"\x01\x63\x01\x68\x25\x33\x64\x3a\x20\x01\x6e\x01\x63\x25\x73" // 085 TextFilesLstFmt
,"\x0d\x0a\x40\x57\x68\x69\x63\x68\x40\x2c\x20\x7e\x41\x64\x64\x2c\x20\x7e\x52\x65\x6d\x6f\x76\x65\x2c\x20\x7e\x45\x64\x69\x74\x2c" ,"\x0d\x0a\x40\x4d\x4e\x45\x3a\x43\x40\x40\x57\x68\x69\x63\x68\x40\x2c\x20\x7e\x41\x64\x64\x2c\x20\x7e\x52\x65\x6d\x6f\x76\x65\x2c"
"\x20\x6f\x72\x20\x7e\x40\x51\x75\x69\x74\x40\x3a\x20" // 086 WhichTextFileSysop "\x20\x7e\x45\x64\x69\x74\x2c\x20\x6f\x72\x20\x7e\x40\x51\x75\x69\x74\x40\x3a\x20" // 086 WhichTextFileSysop
,"\x01\x5f\x0d\x0a\x01\x6e\x01\x63\x40\x57\x68\x69\x63\x68\x40\x20\x6f\x72\x20\x01\x68\x7e\x51\x01\x6e\x01\x63\x75\x69\x74\x3a\x20" ,"\x0d\x0a\x40\x4d\x4e\x45\x3a\x43\x40\x40\x57\x68\x69\x63\x68\x40\x20\x6f\x72\x20\x7e\x40\x51\x75\x69\x74\x40\x3a\x20" // 087 WhichTextFile
"\x01\x68" // 087 WhichTextFile
,"\x01\x5f\x0d\x0a\x01\x79\x01\x68\x42\x65\x66\x6f\x72\x65\x20\x77\x68\x69\x63\x68\x20\x66\x69\x6c\x65\x20\x5b\x6c\x61\x73\x74\x5d" ,"\x01\x5f\x0d\x0a\x01\x79\x01\x68\x42\x65\x66\x6f\x72\x65\x20\x77\x68\x69\x63\x68\x20\x66\x69\x6c\x65\x20\x5b\x6c\x61\x73\x74\x5d"
"\x3a\x20\x01\x6e" // 088 AddTextFileBeforeWhich "\x3a\x20\x01\x6e" // 088 AddTextFileBeforeWhich
,"\x0d\x0a\x50\x61\x74\x68\x20\x61\x6e\x64\x20\x66\x69\x6c\x65\x6e\x61\x6d\x65\x20\x28\x6e\x6f\x20\x70\x61\x74\x68\x20\x69\x6e\x64" ,"\x0d\x0a\x50\x61\x74\x68\x20\x61\x6e\x64\x20\x66\x69\x6c\x65\x6e\x61\x6d\x65\x20\x28\x6e\x6f\x20\x70\x61\x74\x68\x20\x69\x6e\x64"
...@@ -463,8 +461,8 @@ const char * const text_defaults[TOTAL_TEXT]={ ...@@ -463,8 +461,8 @@ const char * const text_defaults[TOTAL_TEXT]={
"\x6e\x6c\x6f\x61\x64\x20\x71\x75\x65\x75\x65\x20\x28\x31\x2d\x25\x64\x29\x3a\x20\x01\x6e" // 280 RemoveWhichFromDlQueue "\x6e\x6c\x6f\x61\x64\x20\x71\x75\x65\x75\x65\x20\x28\x31\x2d\x25\x64\x29\x3a\x20\x01\x6e" // 280 RemoveWhichFromDlQueue
,"\x0d\x0a\x55\x70\x6c\x6f\x61\x64\x20\x71\x75\x65\x75\x65\x20\x69\x73\x20\x65\x6d\x70\x74\x79\x2e\x0d\x0a" // 281 UploadQueueIsEmpty ,"\x0d\x0a\x55\x70\x6c\x6f\x61\x64\x20\x71\x75\x65\x75\x65\x20\x69\x73\x20\x65\x6d\x70\x74\x79\x2e\x0d\x0a" // 281 UploadQueueIsEmpty
,"\x0d\x0a\x48\x61\x6e\x67\x20\x75\x70\x20\x61\x66\x74\x65\x72\x20\x74\x72\x61\x6e\x73\x66\x65\x72" // 282 HangUpAfterXferQ ,"\x0d\x0a\x48\x61\x6e\x67\x20\x75\x70\x20\x61\x66\x74\x65\x72\x20\x74\x72\x61\x6e\x73\x66\x65\x72" // 282 HangUpAfterXferQ
,"\x0d\x0a\x01\x77\x01\x68\x53\x74\x61\x72\x74\x20\x74\x72\x61\x6e\x73\x66\x65\x72\x20\x6e\x6f\x77\x20\x28\x43\x74\x72\x6c\x2d\x58" ,"\x0d\x0a\x01\x77\x01\x68\x53\x74\x61\x72\x74\x20\x25\x73\x20\x74\x72\x61\x6e\x73\x66\x65\x72\x20\x6e\x6f\x77\x20\x28\x43\x74\x72"
"\x20\x74\x6f\x20\x61\x62\x6f\x72\x74\x29\x3a\x0d\x0a\x01\x6e" // 283 StartXferNow "\x6c\x2d\x58\x20\x74\x6f\x20\x61\x62\x6f\x72\x74\x29\x3a\x0d\x0a\x01\x6e" // 283 StartXferNow
,"\x01\x5f\x0d\x0a\x01\x62\x01\x68\x44\x69\x73\x63\x6f\x6e\x6e\x65\x63\x74\x69\x6e\x67\x20\x40\x45\x4c\x4c\x49\x50\x53\x49\x53\x40" ,"\x01\x5f\x0d\x0a\x01\x62\x01\x68\x44\x69\x73\x63\x6f\x6e\x6e\x65\x63\x74\x69\x6e\x67\x20\x40\x45\x4c\x4c\x49\x50\x53\x49\x53\x40"
"\x20\x01\x77\x48\x01\x62\x61\x6e\x67\x20\x75\x70\x20\x6f\x72\x20\x01\x77\x41\x01\x62\x62\x6f\x72\x74\x20" // 284 Disconnecting "\x20\x01\x77\x48\x01\x62\x61\x6e\x67\x20\x75\x70\x20\x6f\x72\x20\x01\x77\x41\x01\x62\x62\x6f\x72\x74\x20" // 284 Disconnecting
,"\x01\x5b\x01\x77\x01\x68\x47\x6f\x6f\x64\x2d\x62\x79\x65\x21\x20\x20\x28\x54\x69\x6d\x65\x20\x55\x73\x65\x64\x3a\x20\x40\x54\x55" ,"\x01\x5b\x01\x77\x01\x68\x47\x6f\x6f\x64\x2d\x62\x79\x65\x21\x20\x20\x28\x54\x69\x6d\x65\x20\x55\x73\x65\x64\x3a\x20\x40\x54\x55"
...@@ -642,8 +640,7 @@ const char * const text_defaults[TOTAL_TEXT]={ ...@@ -642,8 +640,7 @@ const char * const text_defaults[TOTAL_TEXT]={
,"\x01\x68\xc4\xc4\xc4\xc4\xc5\xc4\xc4\xc4\xc4\xc4\xc4\xc4\xc4\xc4\xc4\xc4\xc4\xc4\xc4\xc4\xc4\xc4\xc4\xc4\xc4\xc4\xc4\xc4\xc4\xc4" ,"\x01\x68\xc4\xc4\xc4\xc4\xc5\xc4\xc4\xc4\xc4\xc4\xc4\xc4\xc4\xc4\xc4\xc4\xc4\xc4\xc4\xc4\xc4\xc4\xc4\xc4\xc4\xc4\xc4\xc4\xc4\xc4"
"\xc4\xc4\xc4\xc4\xc4\xc4\xc4\xc4\x20" // 382 XtrnProgLstUnderline "\xc4\xc4\xc4\xc4\xc4\xc4\xc4\xc4\x20" // 382 XtrnProgLstUnderline
,"\x01\x68\x01\x63\x25\x33\x75\x20\xb3\x20\x01\x6e\x01\x63\x25\x2d\x33\x32\x2e\x33\x32\x73\x01\x68\x20" // 383 XtrnProgLstFmt ,"\x01\x68\x01\x63\x25\x33\x75\x20\xb3\x20\x01\x6e\x01\x63\x25\x2d\x33\x32\x2e\x33\x32\x73\x01\x68\x20" // 383 XtrnProgLstFmt
,"\x0d\x0a\x01\x2d\x01\x63\x40\x57\x68\x69\x63\x68\x40\x20\x6f\x72\x20\x01\x68\x7e\x51\x01\x6e\x01\x63\x75\x69\x74\x3a\x20\x01\x68" ,"\x0d\x0a\x40\x4d\x4e\x45\x3a\x43\x40\x40\x57\x68\x69\x63\x68\x40\x20\x6f\x72\x20\x7e\x40\x51\x75\x69\x74\x40\x3a\x20" // 384 WhichXtrnProg
"" // 384 WhichXtrnProg
,"\x0d\x0a\x25\x73\x20\x69\x73\x20\x63\x75\x72\x72\x65\x6e\x74\x6c\x79\x20\x72\x75\x6e\x6e\x69\x6e\x67\x20\x25\x73\x20\x6f\x6e\x20" ,"\x0d\x0a\x25\x73\x20\x69\x73\x20\x63\x75\x72\x72\x65\x6e\x74\x6c\x79\x20\x72\x75\x6e\x6e\x69\x6e\x67\x20\x25\x73\x20\x6f\x6e\x20"
"\x6e\x6f\x64\x65\x20\x25\x64\x2e\x0d\x0a\x0d\x0a\x54\x72\x79\x20\x61\x67\x61\x69\x6e\x20\x6c\x61\x74\x65\x72\x2e\x0d\x0a\x0d\x0a" "\x6e\x6f\x64\x65\x20\x25\x64\x2e\x0d\x0a\x0d\x0a\x54\x72\x79\x20\x61\x67\x61\x69\x6e\x20\x6c\x61\x74\x65\x72\x2e\x0d\x0a\x0d\x0a"
"" // 385 UserRunningXtrn "" // 385 UserRunningXtrn
...@@ -910,8 +907,8 @@ const char * const text_defaults[TOTAL_TEXT]={ ...@@ -910,8 +907,8 @@ const char * const text_defaults[TOTAL_TEXT]={
"\x35\x73\x20\x01\x6d\x25\x2d\x32\x35\x2e\x32\x35\x73\x01\x6e\x01\x6d\x25\x30\x32\x75\x3a\x25\x30\x32\x75\x20\x01\x68\x25\x2d\x38" "\x35\x73\x20\x01\x6d\x25\x2d\x32\x35\x2e\x32\x35\x73\x01\x6e\x01\x6d\x25\x30\x32\x75\x3a\x25\x30\x32\x75\x20\x01\x68\x25\x2d\x38"
"\x2e\x38\x73\x20\x01\x6e\x01\x6d\x25\x33\x64" // 545 LastFewCallersFmt "\x2e\x38\x73\x20\x01\x6e\x01\x6d\x25\x33\x64" // 545 LastFewCallersFmt
,"\x0d\x0a\x01\x67\x01\x68\x4c\x6f\x67\x6f\x6e\x73\x20\x54\x6f\x64\x61\x79\x3a\x01\x6e\x01\x67" // 546 CallersToday ,"\x0d\x0a\x01\x67\x01\x68\x4c\x6f\x67\x6f\x6e\x73\x20\x54\x6f\x64\x61\x79\x3a\x01\x6e\x01\x67" // 546 CallersToday
,"\x01\x5f\x01\x62\x01\x68\x44\x6f\x20\x79\x6f\x75\x20\x6d\x65\x61\x6e\x20\x25\x73\x20\x23\x25\x75\x20\x28\x01\x63\x59\x01\x62\x65" ,"\x44\x6f\x20\x79\x6f\x75\x20\x6d\x65\x61\x6e\x20\x25\x73\x20\x23\x25\x75\x20\x28\x7e\x40\x59\x65\x73\x40\x2c\x20\x7e\x40\x4e\x6f"
"\x73\x2c\x20\x01\x63\x4e\x01\x62\x6f\x2c\x20\x6f\x72\x20\x01\x63\x51\x01\x62\x75\x69\x74\x29\x20\x3f\x20\x01\x6e" // 547 DoYouMeanThisUserQ "\x40\x2c\x20\x6f\x72\x20\x7e\x40\x51\x75\x69\x74\x40\x29\x20\x3f\x20" // 547 DoYouMeanThisUserQ
,"\x55\x4e\x4b\x4e\x4f\x57\x4e\x20\x55\x53\x45\x52" // 548 UNKNOWN_USER ,"\x55\x4e\x4b\x4e\x4f\x57\x4e\x20\x55\x53\x45\x52" // 548 UNKNOWN_USER
,"\x0d\x0a\x54\x69\x6d\x65\x27\x73\x20\x75\x70\x2e\x0d\x0a" // 549 TimesUp ,"\x0d\x0a\x54\x69\x6d\x65\x27\x73\x20\x75\x70\x2e\x0d\x0a" // 549 TimesUp
,"\x01\x5f\x01\x77\x01\x68\x4e\x6f\x64\x65\x20\x25\x32\x64\x3a\x20\x01\x67\x25\x73\x01\x6e\x01\x67\x20\x6c\x6f\x67\x67\x65\x64\x20" ,"\x01\x5f\x01\x77\x01\x68\x4e\x6f\x64\x65\x20\x25\x32\x64\x3a\x20\x01\x67\x25\x73\x01\x6e\x01\x67\x20\x6c\x6f\x67\x67\x65\x64\x20"
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment