mirror of
https://github.com/RfidResearchGroup/proxmark3.git
synced 2025-02-25 00:25:48 +08:00
Implement real callbacks for load/save prefs
This commit is contained in:
parent
447105511a
commit
72987d562f
13 changed files with 35 additions and 35 deletions
|
@ -1272,7 +1272,7 @@ static int CmdHF15Dump(const char *Cmd) {
|
|||
size_t datalen = blocknum * 4;
|
||||
saveFile(filename, ".bin", data, datalen);
|
||||
saveFileEML(filename, data, datalen, 4);
|
||||
saveFileJSON(filename, jsf15, data, datalen);
|
||||
saveFileJSON(filename, jsf15, data, datalen, NULL);
|
||||
return PM3_SUCCESS;
|
||||
}
|
||||
|
||||
|
|
|
@ -495,7 +495,7 @@ static int CmdHFCryptoRFESave(const char *Cmd) {
|
|||
//needs to change
|
||||
saveFileEML(filename, data, numofbytes, 8);
|
||||
//needs to change
|
||||
saveFileJSON(filename, jsfRaw, data, numofbytes);
|
||||
saveFileJSON(filename, jsfRaw, data, numofbytes, NULL);
|
||||
return PM3_SUCCESS;
|
||||
}
|
||||
|
||||
|
|
|
@ -776,7 +776,7 @@ static int CmdHFiClassELoad(const char *Cmd) {
|
|||
break;
|
||||
}
|
||||
case JSON: {
|
||||
res = loadFileJSON(filename, dump, 2048, &bytes_read);
|
||||
res = loadFileJSON(filename, dump, 2048, &bytes_read, NULL);
|
||||
break;
|
||||
}
|
||||
case DICTIONARY:
|
||||
|
@ -966,7 +966,7 @@ static int CmdHFiClassDecrypt(const char *Cmd) {
|
|||
|
||||
saveFile(fptr, ".bin", decrypted, decryptedlen);
|
||||
saveFileEML(fptr, decrypted, decryptedlen, 8);
|
||||
saveFileJSON(fptr, jsfIclass, decrypted, decryptedlen);
|
||||
saveFileJSON(fptr, jsfIclass, decrypted, decryptedlen, NULL);
|
||||
|
||||
PrintAndLogEx(INFO, "Following output skips CSN / block0");
|
||||
printIclassDumpContents(decrypted, 1, (decryptedlen / 8), decryptedlen);
|
||||
|
@ -1433,7 +1433,7 @@ static int CmdHFiClassReader_Dump(const char *Cmd) {
|
|||
PrintAndLogEx(SUCCESS, "saving dump file - %zu blocks read", gotBytes / 8);
|
||||
saveFile(filename, ".bin", tag_data, gotBytes);
|
||||
saveFileEML(filename, tag_data, gotBytes, 8);
|
||||
saveFileJSON(filename, jsfIclass, tag_data, gotBytes);
|
||||
saveFileJSON(filename, jsfIclass, tag_data, gotBytes, NULL);
|
||||
return PM3_SUCCESS;
|
||||
}
|
||||
|
||||
|
|
|
@ -1026,7 +1026,7 @@ static int CmdLegicDump(const char *Cmd) {
|
|||
|
||||
saveFile(filename, ".bin", data, readlen);
|
||||
saveFileEML(filename, data, readlen, 8);
|
||||
saveFileJSON(filename, jsfLegic, data, readlen);
|
||||
saveFileJSON(filename, jsfLegic, data, readlen, NULL);
|
||||
free(data);
|
||||
return PM3_SUCCESS;
|
||||
}
|
||||
|
@ -1299,7 +1299,7 @@ static int CmdLegicESave(const char *Cmd) {
|
|||
|
||||
saveFile(filename, ".bin", data, numofbytes);
|
||||
saveFileEML(filename, data, numofbytes, 8);
|
||||
saveFileJSON(filename, jsfLegic, data, numofbytes);
|
||||
saveFileJSON(filename, jsfLegic, data, numofbytes, NULL);
|
||||
return PM3_SUCCESS;
|
||||
}
|
||||
|
||||
|
|
|
@ -1068,7 +1068,7 @@ static int CmdHF14AMfDump(const char *Cmd) {
|
|||
|
||||
saveFile(dataFilename, ".bin", (uint8_t *)carddata, bytes);
|
||||
saveFileEML(dataFilename, (uint8_t *)carddata, bytes, MFBLOCK_SIZE);
|
||||
saveFileJSON(dataFilename, jsfCardMemory, (uint8_t *)carddata, bytes);
|
||||
saveFileJSON(dataFilename, jsfCardMemory, (uint8_t *)carddata, bytes, NULL);
|
||||
return PM3_SUCCESS;
|
||||
}
|
||||
|
||||
|
@ -2518,7 +2518,7 @@ all_found:
|
|||
|
||||
saveFile(filename, ".bin", dump, bytes);
|
||||
saveFileEML(filename, dump, bytes, MFBLOCK_SIZE);
|
||||
saveFileJSON(filename, jsfCardMemory, dump, bytes);
|
||||
saveFileJSON(filename, jsfCardMemory, dump, bytes, NULL);
|
||||
|
||||
// Generate and show statistics
|
||||
t1 = msclock() - t1;
|
||||
|
@ -3832,7 +3832,7 @@ static int CmdHF14AMfESave(const char *Cmd) {
|
|||
|
||||
saveFile(filename, ".bin", dump, bytes);
|
||||
saveFileEML(filename, dump, bytes, MFBLOCK_SIZE);
|
||||
saveFileJSON(filename, jsfCardMemory, dump, bytes);
|
||||
saveFileJSON(filename, jsfCardMemory, dump, bytes, NULL);
|
||||
free(dump);
|
||||
return PM3_SUCCESS;
|
||||
}
|
||||
|
@ -4150,7 +4150,7 @@ static int CmdHF14AMfCLoad(const char *Cmd) {
|
|||
res = loadFile(fileName, ".bin", data, maxdatalen, &datalen);
|
||||
} else {
|
||||
if (fillFromJson) {
|
||||
res = loadFileJSON(fileName, data, maxdatalen, &datalen);
|
||||
res = loadFileJSON(fileName, data, maxdatalen, &datalen, NULL);
|
||||
} else {
|
||||
res = loadFileEML(Cmd, data, &datalen);
|
||||
}
|
||||
|
@ -4412,7 +4412,7 @@ static int CmdHF14AMfCSave(const char *Cmd) {
|
|||
|
||||
saveFile(filename, ".bin", dump, bytes);
|
||||
saveFileEML(filename, dump, bytes, MFBLOCK_SIZE);
|
||||
saveFileJSON(filename, jsfCardMemory, dump, bytes);
|
||||
saveFileJSON(filename, jsfCardMemory, dump, bytes, NULL);
|
||||
free(dump);
|
||||
return PM3_SUCCESS;
|
||||
}
|
||||
|
|
|
@ -4114,7 +4114,7 @@ static int CmdHF14aDesChk(const char *Cmd) {
|
|||
|
||||
// length: UID(10b)+SAK(1b)+ATQA(2b)+ATSlen(1b)+ATS(atslen)+foundKeys[2][64][AES_KEY_LEN + 1]
|
||||
memcpy(&data[14 + atslen], foundKeys, 4 * 0xE * (24 + 1));
|
||||
saveFileJSON((char *)jsonname, jsfMfDesfireKeys, data, 0xE);
|
||||
saveFileJSON((char *)jsonname, jsfMfDesfireKeys, data, 0xE, NULL);
|
||||
}
|
||||
|
||||
return PM3_SUCCESS;
|
||||
|
|
|
@ -1277,7 +1277,7 @@ static int CmdHFMFPChk(const char *Cmd) {
|
|||
|
||||
// length: UID(10b)+SAK(1b)+ATQA(2b)+ATSlen(1b)+ATS(atslen)+foundKeys[2][64][AES_KEY_LEN + 1]
|
||||
memcpy(&data[14 + atslen], foundKeys, 2 * 64 * (AES_KEY_LEN + 1));
|
||||
saveFileJSON((char *)jsonname, jsfMfPlusKeys, data, 64);
|
||||
saveFileJSON((char *)jsonname, jsfMfPlusKeys, data, 64, NULL);
|
||||
}
|
||||
|
||||
return PM3_SUCCESS;
|
||||
|
|
|
@ -2090,7 +2090,7 @@ static int CmdHF14AMfUDump(const char *Cmd) {
|
|||
}
|
||||
uint16_t datalen = pages * 4 + MFU_DUMP_PREFIX_LENGTH;
|
||||
saveFile(filename, ".bin", (uint8_t *)&dump_file_data, datalen);
|
||||
saveFileJSON(filename, jsfMfuMemory, (uint8_t *)&dump_file_data, datalen);
|
||||
saveFileJSON(filename, jsfMfuMemory, (uint8_t *)&dump_file_data, datalen, NULL);
|
||||
|
||||
if (is_partial)
|
||||
PrintAndLogEx(WARNING, "Partial dump created. (%d of %d blocks)", pages, card_mem_size);
|
||||
|
|
|
@ -330,7 +330,7 @@ static int CmdLFHitagSim(const char *Cmd) {
|
|||
break;
|
||||
case 'j':
|
||||
param_getstr(Cmd, cmdp + 1, filename, sizeof(filename));
|
||||
res = loadFileJSON(filename, data, maxdatalen, &datalen);
|
||||
res = loadFileJSON(filename, data, maxdatalen, &datalen, NULL);
|
||||
if (res > 0) {
|
||||
errors = true;
|
||||
break;
|
||||
|
@ -725,7 +725,7 @@ static int CmdLFHitag2Dump(const char *Cmd) {
|
|||
|
||||
saveFile(filename, ".bin", data, 48);
|
||||
saveFileEML(filename, data, 48, 4);
|
||||
saveFileJSON(filename, jsfHitag, data, 48);
|
||||
saveFileJSON(filename, jsfHitag, data, 48, NULL);
|
||||
|
||||
return PM3_SUCCESS;
|
||||
}
|
||||
|
|
|
@ -2319,7 +2319,7 @@ static int CmdT55xxDump(const char *Cmd) {
|
|||
for (int i = 0; i < T55x7_BLOCK_COUNT; i++)
|
||||
data[i] = BSWAP_32(cardmem[i].blockdata);
|
||||
|
||||
saveFileJSON(preferredName, jsfT55x7, (uint8_t *)data, T55x7_BLOCK_COUNT * sizeof(uint32_t));
|
||||
saveFileJSON(preferredName, jsfT55x7, (uint8_t *)data, T55x7_BLOCK_COUNT * sizeof(uint32_t), NULL);
|
||||
saveFileEML(preferredName, (uint8_t *)data, T55x7_BLOCK_COUNT * sizeof(uint32_t), sizeof(uint32_t));
|
||||
saveFile(preferredName, ".bin", data, sizeof(data));
|
||||
}
|
||||
|
|
|
@ -312,10 +312,10 @@ out:
|
|||
return retval;
|
||||
}
|
||||
|
||||
int saveFileJSON(const char *preferredName, JSONFileType ftype, uint8_t *data, size_t datalen) {
|
||||
return saveFileJSONex(preferredName, ftype, data, datalen, true);
|
||||
int saveFileJSON(const char *preferredName, JSONFileType ftype, uint8_t *data, size_t datalen, void (*callback)(json_t *)) {
|
||||
return saveFileJSONex(preferredName, ftype, data, datalen, true, callback);
|
||||
}
|
||||
int saveFileJSONex(const char *preferredName, JSONFileType ftype, uint8_t *data, size_t datalen, bool verbose) {
|
||||
int saveFileJSONex(const char *preferredName, JSONFileType ftype, uint8_t *data, size_t datalen, bool verbose, void (*callback)(json_t *)) {
|
||||
|
||||
if (data == NULL) return PM3_EINVARG;
|
||||
|
||||
|
@ -548,8 +548,8 @@ int saveFileJSONex(const char *preferredName, JSONFileType ftype, uint8_t *data,
|
|||
}
|
||||
}
|
||||
break;
|
||||
case jsfSettings:
|
||||
preferences_save_callback(root);
|
||||
case jsfCustom:
|
||||
(*callback)(root);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
|
@ -855,10 +855,10 @@ out:
|
|||
return retval;
|
||||
}
|
||||
|
||||
int loadFileJSON(const char *preferredName, void *data, size_t maxdatalen, size_t *datalen) {
|
||||
return loadFileJSONex(preferredName, data, maxdatalen, datalen, true);
|
||||
int loadFileJSON(const char *preferredName, void *data, size_t maxdatalen, size_t *datalen, void (*callback)(json_t *)) {
|
||||
return loadFileJSONex(preferredName, data, maxdatalen, datalen, true, callback);
|
||||
}
|
||||
int loadFileJSONex(const char *preferredName, void *data, size_t maxdatalen, size_t *datalen, bool verbose) {
|
||||
int loadFileJSONex(const char *preferredName, void *data, size_t maxdatalen, size_t *datalen, bool verbose, void (*callback)(json_t *)) {
|
||||
|
||||
if (data == NULL) return PM3_EINVARG;
|
||||
char *fileName = filenamemcopy(preferredName, ".json");
|
||||
|
@ -1001,8 +1001,8 @@ int loadFileJSONex(const char *preferredName, void *data, size_t maxdatalen, siz
|
|||
if (verbose)
|
||||
PrintAndLogEx(SUCCESS, "loaded from JSON file " _YELLOW_("%s"), fileName);
|
||||
|
||||
if (!strcmp(ctype, "settings")) {
|
||||
preferences_load_callback(root);
|
||||
if (callback != NULL) {
|
||||
(*callback)(root);
|
||||
}
|
||||
out:
|
||||
json_decref(root);
|
||||
|
|
|
@ -62,7 +62,7 @@ typedef enum {
|
|||
jsfT55x7,
|
||||
jsfT5555,
|
||||
jsfMfPlusKeys,
|
||||
jsfSettings,
|
||||
jsfCustom,
|
||||
jsfMfDesfireKeys,
|
||||
} JSONFileType;
|
||||
|
||||
|
@ -115,8 +115,8 @@ int saveFileEML(const char *preferredName, uint8_t *data, size_t datalen, size_t
|
|||
* @param datalen the length of the data
|
||||
* @return 0 for ok, 1 for failz
|
||||
*/
|
||||
int saveFileJSON(const char *preferredName, JSONFileType ftype, uint8_t *data, size_t datalen);
|
||||
int saveFileJSONex(const char *preferredName, JSONFileType ftype, uint8_t *data, size_t datalen, bool verbose);
|
||||
int saveFileJSON(const char *preferredName, JSONFileType ftype, uint8_t *data, size_t datalen, void (*callback)(json_t *));
|
||||
int saveFileJSONex(const char *preferredName, JSONFileType ftype, uint8_t *data, size_t datalen, bool verbose, void (*callback)(json_t *));
|
||||
|
||||
/** STUB
|
||||
* @brief Utility function to save WAVE data to a file. This method takes a preferred name, but if that
|
||||
|
@ -198,8 +198,8 @@ int loadFileEML(const char *preferredName, void *data, size_t *datalen);
|
|||
* @param datalen the number of bytes loaded from file
|
||||
* @return 0 for ok, 1 for failz
|
||||
*/
|
||||
int loadFileJSON(const char *preferredName, void *data, size_t maxdatalen, size_t *datalen);
|
||||
int loadFileJSONex(const char *preferredName, void *data, size_t maxdatalen, size_t *datalen, bool verbose);
|
||||
int loadFileJSON(const char *preferredName, void *data, size_t maxdatalen, size_t *datalen, void (*callback)(json_t *));
|
||||
int loadFileJSONex(const char *preferredName, void *data, size_t maxdatalen, size_t *datalen, bool verbose, void (*callback)(json_t *));
|
||||
|
||||
|
||||
/**
|
||||
|
|
|
@ -89,7 +89,7 @@ int preferences_load(void) {
|
|||
char *fn = prefGetFilename();
|
||||
if (fileExists(fn)) {
|
||||
PrintAndLogEx(INFO, "Loading Preferences...");
|
||||
if (loadFileJSON(fn, &dummyData, sizeof(dummyData), &dummyDL) == PM3_SUCCESS) {
|
||||
if (loadFileJSON(fn, &dummyData, sizeof(dummyData), &dummyDL, &preferences_load_callback) == PM3_SUCCESS) {
|
||||
session.preferences_loaded = true;
|
||||
}
|
||||
}
|
||||
|
@ -139,7 +139,7 @@ int preferences_save(void) {
|
|||
uint8_t dummyData = 0x00;
|
||||
size_t dummyDL = 0x00;
|
||||
|
||||
if (saveFileJSON(fn, jsfSettings, &dummyData, dummyDL) != PM3_SUCCESS)
|
||||
if (saveFileJSON(fn, jsfCustom, &dummyData, dummyDL, &preferences_save_callback) != PM3_SUCCESS)
|
||||
PrintAndLogEx(ERR, "Error saving preferences to \"%s\"", fn);
|
||||
|
||||
free(fn);
|
||||
|
|
Loading…
Reference in a new issue