/*==LICENSE==*
CyanWorlds.com Engine - MMOG client, server and tools
Copyright (C) 2011 Cyan Worlds, Inc.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see .
You can contact Cyan Worlds, Inc. by email legal@cyan.com
or by snail mail at:
Cyan Worlds, Inc.
14617 N Newport Hwy
Mead, WA 99021
*==LICENSE==*/
/*****************************************************************************
*
* plLogDecrypt - Used by mantis to decrypt log files
*
***/
#include
#include "hsTypes.h"
#include "../plStatusLog/plEncryptLogLine.h"
void IProcessFile(const char *path)
{
char out_path[512];
strcpy(out_path, path);
strcat(out_path, ".decrypt");
FILE * fpIn = fopen(path, "rb");
FILE * fpOut = fopen(out_path, "w");
if( fpIn != nil && fpOut != nil)
{
UInt8 line[ 2048 ];
while( !feof( fpIn ) )
{
// Read next string
long pos = ftell(fpIn);
if( pos == -1L )
break;
UInt8 hint = (UInt8)pos;
UInt16 sizeHint = (UInt16)pos;
UInt16 size;
if( stricmp( path + strlen( path ) - 4, ".log" ) == 0 )
{
int i;
for( i = 0; i < 511; i++ )
{
int c = fgetc( fpIn );
if( c == EOF || c == hint )
break;
line[ i ] = (UInt8)c;
}
line[ i ] = 0;
size = i;
}
else
{
// UInt16 line length is encoded first
int c = fgetc( fpIn );
if( c == EOF )
break;
size = ( c & 0xff ) | ( fgetc( fpIn ) << 8 );
size = size ^ sizeHint;
if( size > sizeof( line ) )
{
hsAssert( size <= sizeof( line ) - 1, "Invalid line size" );
break;
}
fread( line, 1, size, fpIn );
line[ size ] = 0;
}
plStatusEncrypt::Decrypt( line, size, hint );
fprintf(fpOut, "%s\n", (const char *)line);
}
}
if (fpIn)
fclose(fpIn);
if (fpOut)
fclose(fpOut);
}
int main(int argc, const char * argv[])
{
if (argc == 2)
{
IProcessFile(argv[1]);
}
return 0;
}