Implement real callbacks for load/save prefs

This commit is contained in:
Philippe Teuwen 2020-06-01 23:44:41 +02:00
parent 447105511a
commit 72987d562f
13 changed files with 35 additions and 35 deletions

View file

@ -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;
}

View file

@ -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;
}

View file

@ -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;
}

View file

@ -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;
}

View file

@ -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;
}

View file

@ -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;

View file

@ -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;

View file

@ -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);

View file

@ -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;
}

View file

@ -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));
}

View file

@ -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);

View file

@ -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 *));
/**

View file

@ -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);