mirror of
https://github.com/RPCS3/rpcs3.git
synced 2025-07-13 10:18:40 +12:00
Logging system rework
* use one central unified log with channels/priorities ad-hoc listener registration and de-registration * disable buffering by default * add multi-threaded ringbuffer implementation * use buffered listener for the gui (using the ringbuffer)
This commit is contained in:
parent
394b698e92
commit
21da317453
165 changed files with 1731 additions and 1519 deletions
|
@ -1,6 +1,6 @@
|
|||
#include "stdafx.h"
|
||||
#include "unedat.h"
|
||||
#include "Emu/ConLog.h"
|
||||
#include "Utilities/Log.h"
|
||||
|
||||
void generate_key(int crypto_mode, int version, unsigned char *key_final, unsigned char *iv_final, unsigned char *key, unsigned char *iv)
|
||||
{
|
||||
|
@ -74,7 +74,7 @@ bool crypto(int hash_mode, int crypto_mode, int version, unsigned char *in, unsi
|
|||
}
|
||||
else
|
||||
{
|
||||
ConLog.Error("EDAT: Unknown crypto algorithm!\n");
|
||||
LOG_ERROR(LOADER, "EDAT: Unknown crypto algorithm!\n");
|
||||
return false;
|
||||
}
|
||||
|
||||
|
@ -92,7 +92,7 @@ bool crypto(int hash_mode, int crypto_mode, int version, unsigned char *in, unsi
|
|||
}
|
||||
else
|
||||
{
|
||||
ConLog.Error("EDAT: Unknown hashing algorithm!\n");
|
||||
LOG_ERROR(LOADER, "EDAT: Unknown hashing algorithm!\n");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
@ -158,7 +158,7 @@ int decrypt_data(rFile *in, rFile *out, EDAT_SDAT_HEADER *edat, NPD_HEADER *npd,
|
|||
|
||||
if ((edat->flags & EDAT_FLAG_0x3C) != 0 || (edat->flags & EDAT_FLAG_0x3D) != 0)
|
||||
{
|
||||
ConLog.Error("EDAT: Flag 0x3C/0x3D EDAT files are unsupported yet");
|
||||
LOG_ERROR(LOADER, "EDAT: Flag 0x3C/0x3D EDAT files are unsupported yet");
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
@ -268,15 +268,15 @@ int decrypt_data(rFile *in, rFile *out, EDAT_SDAT_HEADER *edat, NPD_HEADER *npd,
|
|||
memset(decomp_data, 0, decomp_size);
|
||||
|
||||
if (verbose)
|
||||
ConLog.Write("EDAT: Decompressing...\n");
|
||||
LOG_NOTICE(LOADER, "EDAT: Decompressing...\n");
|
||||
|
||||
int res = lz_decompress(decomp_data, dec_data, decomp_size);
|
||||
out->Write(decomp_data, res);
|
||||
|
||||
if (verbose)
|
||||
{
|
||||
ConLog.Write("EDAT: Compressed block size: %d\n", pad_length);
|
||||
ConLog.Write("EDAT: Decompressed block size: %d\n", res);
|
||||
LOGF_NOTICE(LOADER, "EDAT: Compressed block size: %d\n", pad_length);
|
||||
LOGF_NOTICE(LOADER, "EDAT: Decompressed block size: %d\n", res);
|
||||
}
|
||||
|
||||
edat->file_size -= res;
|
||||
|
@ -285,11 +285,11 @@ int decrypt_data(rFile *in, rFile *out, EDAT_SDAT_HEADER *edat, NPD_HEADER *npd,
|
|||
{
|
||||
if (res < 0)
|
||||
{
|
||||
ConLog.Error("EDAT: Decompression failed!\n");
|
||||
LOG_ERROR(LOADER, "EDAT: Decompression failed!\n");
|
||||
return 1;
|
||||
}
|
||||
else
|
||||
ConLog.Success("EDAT: Data successfully decompressed!\n");
|
||||
LOG_SUCCESS(LOADER, "EDAT: Data successfully decompressed!\n");
|
||||
}
|
||||
|
||||
delete[] decomp_data;
|
||||
|
@ -315,7 +315,7 @@ static bool check_flags(EDAT_SDAT_HEADER *edat, NPD_HEADER *npd)
|
|||
{
|
||||
if (edat->flags & 0x7EFFFFFE)
|
||||
{
|
||||
ConLog.Error("EDAT: Bad header flags!\n");
|
||||
LOG_ERROR(LOADER, "EDAT: Bad header flags!\n");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
@ -323,7 +323,7 @@ static bool check_flags(EDAT_SDAT_HEADER *edat, NPD_HEADER *npd)
|
|||
{
|
||||
if (edat->flags & 0x7EFFFFE0)
|
||||
{
|
||||
ConLog.Error("EDAT: Bad header flags!\n");
|
||||
LOG_ERROR(LOADER, "EDAT: Bad header flags!\n");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
@ -331,13 +331,13 @@ static bool check_flags(EDAT_SDAT_HEADER *edat, NPD_HEADER *npd)
|
|||
{
|
||||
if (edat->flags & 0x7EFFFFC0)
|
||||
{
|
||||
ConLog.Error("EDAT: Bad header flags!\n");
|
||||
LOG_ERROR(LOADER, "EDAT: Bad header flags!\n");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
else if (npd->version > 4)
|
||||
{
|
||||
ConLog.Error("EDAT: Unknown version - %d\n", npd->version);
|
||||
LOGF_ERROR(LOADER, "EDAT: Unknown version - %d\n", npd->version);
|
||||
return false;
|
||||
}
|
||||
|
||||
|
@ -370,7 +370,7 @@ int check_data(unsigned char *key, EDAT_SDAT_HEADER *edat, NPD_HEADER *npd, rFil
|
|||
int hash_mode = ((edat->flags & EDAT_ENCRYPTED_KEY_FLAG) == 0) ? 0x00000002 : 0x10000002;
|
||||
if ((edat->flags & EDAT_DEBUG_DATA_FLAG) != 0)
|
||||
{
|
||||
ConLog.Warning("EDAT: DEBUG data detected!\n");
|
||||
LOG_ERROR(LOADER, "EDAT: DEBUG data detected!\n");
|
||||
hash_mode |= 0x01000000;
|
||||
}
|
||||
|
||||
|
@ -382,14 +382,14 @@ int check_data(unsigned char *key, EDAT_SDAT_HEADER *edat, NPD_HEADER *npd, rFil
|
|||
if (!crypto(hash_mode, crypto_mode, (npd->version == 4), header, tmp, 0xA0, header_key, header_iv, key, hash_result))
|
||||
{
|
||||
if (verbose)
|
||||
ConLog.Warning("EDAT: Header hash is invalid!\n");
|
||||
LOG_WARNING(LOADER, "EDAT: Header hash is invalid!\n");
|
||||
}
|
||||
|
||||
// Parse the metadata info.
|
||||
int metadata_section_size = 0x10;
|
||||
if (((edat->flags & EDAT_COMPRESSED_FLAG) != 0))
|
||||
{
|
||||
ConLog.Warning("EDAT: COMPRESSED data detected!\n");
|
||||
LOG_WARNING(LOADER, "EDAT: COMPRESSED data detected!\n");
|
||||
metadata_section_size = 0x20;
|
||||
}
|
||||
|
||||
|
@ -418,7 +418,7 @@ int check_data(unsigned char *key, EDAT_SDAT_HEADER *edat, NPD_HEADER *npd, rFil
|
|||
if (!crypto(hash_mode, crypto_mode, (npd->version == 4), data, tmp, block_size, header_key, header_iv, key, hash_result))
|
||||
{
|
||||
if (verbose)
|
||||
ConLog.Warning("EDAT: Metadata hash from block 0x%08x is invalid!\n", metadata_offset + bytes_read);
|
||||
LOGF_WARNING(LOADER, "EDAT: Metadata hash from block 0x%08x is invalid!\n", metadata_offset + bytes_read);
|
||||
}
|
||||
|
||||
// Adjust sizes.
|
||||
|
@ -455,9 +455,9 @@ void validate_data(const char* file_name, unsigned char *klicensee, NPD_HEADER *
|
|||
if (verbose)
|
||||
{
|
||||
if (title_hash_result)
|
||||
ConLog.Success("EDAT: NPD title hash is valid!\n");
|
||||
LOG_SUCCESS(LOADER, "EDAT: NPD title hash is valid!\n");
|
||||
else
|
||||
ConLog.Warning("EDAT: NPD title hash is invalid!\n");
|
||||
LOG_WARNING(LOADER, "EDAT: NPD title hash is invalid!\n");
|
||||
}
|
||||
|
||||
// Check for an empty dev_hash (can't validate if devklic is NULL);
|
||||
|
@ -474,7 +474,7 @@ void validate_data(const char* file_name, unsigned char *klicensee, NPD_HEADER *
|
|||
if (isDevklicEmpty)
|
||||
{
|
||||
if (verbose)
|
||||
ConLog.Warning("EDAT: NPD dev hash is empty!\n");
|
||||
LOG_WARNING(LOADER, "EDAT: NPD dev hash is empty!\n");
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -487,9 +487,9 @@ void validate_data(const char* file_name, unsigned char *klicensee, NPD_HEADER *
|
|||
if (verbose)
|
||||
{
|
||||
if (dev_hash_result)
|
||||
ConLog.Success("EDAT: NPD dev hash is valid!\n");
|
||||
LOG_SUCCESS(LOADER, "EDAT: NPD dev hash is valid!\n");
|
||||
else
|
||||
ConLog.Warning("EDAT: NPD dev hash is invalid!\n");
|
||||
LOG_WARNING(LOADER, "EDAT: NPD dev hash is invalid!\n");
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -522,7 +522,7 @@ bool extract_data(rFile *input, rFile *output, const char* input_file_name, unsi
|
|||
unsigned char npd_magic[4] = {0x4E, 0x50, 0x44, 0x00}; //NPD0
|
||||
if(memcmp(NPD->magic, npd_magic, 4))
|
||||
{
|
||||
ConLog.Error("EDAT: File has invalid NPD header.");
|
||||
LOG_ERROR(LOADER, "EDAT: File has invalid NPD header.");
|
||||
delete NPD;
|
||||
delete EDAT;
|
||||
return 1;
|
||||
|
@ -534,16 +534,16 @@ bool extract_data(rFile *input, rFile *output, const char* input_file_name, unsi
|
|||
|
||||
if (verbose)
|
||||
{
|
||||
ConLog.Write("NPD HEADER\n");
|
||||
ConLog.Write("NPD version: %d\n", NPD->version);
|
||||
ConLog.Write("NPD license: %d\n", NPD->license);
|
||||
ConLog.Write("NPD type: %d\n", NPD->type);
|
||||
ConLog.Write("\n");
|
||||
ConLog.Write("EDAT HEADER\n");
|
||||
ConLog.Write("EDAT flags: 0x%08X\n", EDAT->flags);
|
||||
ConLog.Write("EDAT block size: 0x%08X\n", EDAT->block_size);
|
||||
ConLog.Write("EDAT file size: 0x%08X\n", EDAT->file_size);
|
||||
ConLog.Write("\n");
|
||||
LOG_NOTICE(LOADER, "NPD HEADER\n");
|
||||
LOGF_NOTICE(LOADER, "NPD version: %d\n", NPD->version);
|
||||
LOGF_NOTICE(LOADER, "NPD license: %d\n", NPD->license);
|
||||
LOGF_NOTICE(LOADER, "NPD type: %d\n", NPD->type);
|
||||
LOG_NOTICE(LOADER, "\n");
|
||||
LOG_NOTICE(LOADER, "EDAT HEADER\n");
|
||||
LOGF_NOTICE(LOADER, "EDAT flags: 0x%08X\n", EDAT->flags);
|
||||
LOGF_NOTICE(LOADER, "EDAT block size: 0x%08X\n", EDAT->block_size);
|
||||
LOGF_NOTICE(LOADER, "EDAT file size: 0x%08X\n", EDAT->file_size);
|
||||
LOG_NOTICE(LOADER, "\n");
|
||||
}
|
||||
|
||||
// Set decryption key.
|
||||
|
@ -552,7 +552,7 @@ bool extract_data(rFile *input, rFile *output, const char* input_file_name, unsi
|
|||
|
||||
if((EDAT->flags & SDAT_FLAG) == SDAT_FLAG)
|
||||
{
|
||||
ConLog.Warning("EDAT: SDAT detected!\n");
|
||||
LOG_WARNING(LOADER, "EDAT: SDAT detected!\n");
|
||||
xor_(key, NPD->dev_hash, SDAT_KEY, 0x10);
|
||||
}
|
||||
else
|
||||
|
@ -579,7 +579,7 @@ bool extract_data(rFile *input, rFile *output, const char* input_file_name, unsi
|
|||
|
||||
if (!test)
|
||||
{
|
||||
ConLog.Error("EDAT: A valid RAP file is needed!");
|
||||
LOG_ERROR(LOADER, "EDAT: A valid RAP file is needed!");
|
||||
delete NPD;
|
||||
delete EDAT;
|
||||
return 1;
|
||||
|
@ -587,19 +587,19 @@ bool extract_data(rFile *input, rFile *output, const char* input_file_name, unsi
|
|||
}
|
||||
}
|
||||
|
||||
ConLog.Write("EDAT: Parsing data...\n");
|
||||
LOG_NOTICE(LOADER, "EDAT: Parsing data...\n");
|
||||
if (check_data(key, EDAT, NPD, input, verbose))
|
||||
ConLog.Error("EDAT: Data parsing failed!\n");
|
||||
LOG_ERROR(LOADER, "EDAT: Data parsing failed!\n");
|
||||
else
|
||||
ConLog.Success("EDAT: Data successfully parsed!\n");
|
||||
LOG_SUCCESS(LOADER, "EDAT: Data successfully parsed!\n");
|
||||
|
||||
printf("\n");
|
||||
|
||||
ConLog.Write("EDAT: Decrypting data...\n");
|
||||
LOG_NOTICE(LOADER, "EDAT: Decrypting data...\n");
|
||||
if (decrypt_data(input, output, EDAT, NPD, key, verbose))
|
||||
ConLog.Error("EDAT: Data decryption failed!");
|
||||
LOG_ERROR(LOADER, "EDAT: Data decryption failed!");
|
||||
else
|
||||
ConLog.Success("EDAT: Data successfully decrypted!");
|
||||
LOG_SUCCESS(LOADER, "EDAT: Data successfully decrypted!");
|
||||
|
||||
delete NPD;
|
||||
delete EDAT;
|
||||
|
@ -652,21 +652,21 @@ int DecryptEDAT(const std::string& input_file_name, const std::string& output_fi
|
|||
memcpy(devklic, custom_klic, 0x10);
|
||||
else
|
||||
{
|
||||
ConLog.Error("EDAT: Invalid custom klic!\n");
|
||||
LOG_ERROR(LOADER, "EDAT: Invalid custom klic!\n");
|
||||
return -1;
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
default:
|
||||
ConLog.Error("EDAT: Invalid mode!\n");
|
||||
LOG_ERROR(LOADER, "EDAT: Invalid mode!\n");
|
||||
return -1;
|
||||
}
|
||||
|
||||
// Check the input/output files.
|
||||
if (!input.IsOpened() || !output.IsOpened())
|
||||
{
|
||||
ConLog.Error("EDAT: Failed to open files!\n");
|
||||
LOG_ERROR(LOADER, "EDAT: Failed to open files!\n");
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue