|
|
// lemonfan - I count 9 tags... | // lemonfan - I count 9 tags... |
// Kry - Yes, my fault | // Kry - Yes, my fault |
data->Write((uint32)9); /* 7 -> 8 */ |
data->Write((uint32)8); /* 7 -> 8 */ |
| |
CTag tag1(ET_COMPRESSION,1); | CTag tag1(ET_COMPRESSION,1); |
|
|
tag8.WriteTagToFile(data); | tag8.WriteTagToFile(data); |
| |
|
/* |
// Support for tag ET_MOD_VERSION | // Support for tag ET_MOD_VERSION |
CTag tag9(ET_MOD_VERSION, MOD_VERSION); | CTag tag9(ET_MOD_VERSION, MOD_VERSION); |
tag9.WriteTagToFile(data); | tag9.WriteTagToFile(data); |
// Maella end | // Maella end |
|
*/ |
| |
Packet* packet = new Packet(data,OP_EMULEPROT); | Packet* packet = new Packet(data,OP_EMULEPROT); |
|
|
void CUpDownClient::ProcessMuleInfoPacket(char* pachPacket, uint32 nSize) | void CUpDownClient::ProcessMuleInfoPacket(char* pachPacket, uint32 nSize) |
{ | { |
|
try { |
| |
|
//DumpMem(pachPacket,nSize); |
CSafeMemFile data((BYTE*)pachPacket,nSize); | CSafeMemFile data((BYTE*)pachPacket,nSize); |
m_byCompatibleClient = 0; | m_byCompatibleClient = 0; |
|
|
return; | return; |
} | } |
|
|
m_bEmuleProtocol = true; | m_bEmuleProtocol = true; |
| |
|
|
m_bySupportSecIdent = temptag.tag.intvalue & 3; | m_bySupportSecIdent = temptag.tag.intvalue & 3; |
m_bSupportsPreview = (temptag.tag.intvalue & 128) > 0; | m_bSupportsPreview = (temptag.tag.intvalue & 128) > 0; |
|
break;/* |
|
case ET_MOD_VERSION: |
|
if (temptag.tag.type == 2) |
|
m_strModVersion = temptag.tag.stringvalue; |
|
else if (temptag.tag.type == 3) |
|
m_strModVersion.Format(_T("ModID=%u"), temptag.tag.intvalue); |
|
else |
|
m_strModVersion = _T("ModID=<Unknwon>"); |
|
break;*/ |
|
default: |
|
//printf("Mule Unk Tag 0x%02x=%x\n", temptag.tag.specialtag, (UINT)temptag.tag.intvalue); |
break; | break; |
} | } |
} | } |
|
} |
|
catch ( CStrangePacket ) |
|
{ |
|
printf("Wrong Tags on hello packet!!\n"); |
|
printf("Sent by %s on ip %s using client 5i version %i\n",GetUserName(),GetFullIP(),GetClientSoft(),GetMuleVersion()); |
|
printf("Packet Dump:\n"); |
|
DumpMem(pachPacket,nSize); |
|
} |
|
catch ( CInvalidPacket ) |
|
{ |
|
printf("Wrong Tags on hello packet!!!\n\n"); |
|
printf("Sent by %s on ip %s using client 5i version %i\n",GetUserName(),GetFullIP(),GetClientSoft(),GetMuleVersion()); |
|
printf("Packet Dump:\n"); |
|
DumpMem(pachPacket,nSize); |
|
} |
|
|
if( m_byDataCompVer == 0 ){ | if( m_byDataCompVer == 0 ){ |
m_bySourceExchangeVer = 0; | m_bySourceExchangeVer = 0; |
|
|
return 0; | return 0; |
// dont' read over buffer end | // dont' read over buffer end |
|
//printf("fPos %i, fFSize %i\n",fPosition,fFileSize); |
if (fPosition>fFileSize) { | if (fPosition>fFileSize) { |
throw CInvalidPacket("short packet on read (corrupted tag?)"); | throw CInvalidPacket("short packet on read (corrupted tag?)"); |
|
|
} | } |
unsigned int readlen=length; | unsigned int readlen=length; |
if(length+fPosition>fFileSize) |
if(length+fPosition>fFileSize) { |
|
printf("Read After End Of File!!!!\n"); |
|
throw CInvalidPacket("short packet on read (corrupted tagcount?)"); |
readlen=fFileSize-fPosition; | readlen=fFileSize-fPosition; |
|
} |
| |
memcpy(buf,fBuffer+fPosition,readlen); | memcpy(buf,fBuffer+fPosition,readlen); |
|
|
off_t CSafeMemFile::ReadRaw(void* lpBuf,UINT nCount) { | off_t CSafeMemFile::ReadRaw(void* lpBuf,UINT nCount) { |
if (GetPosition()+nCount > this->GetLength()) { | if (GetPosition()+nCount > this->GetLength()) { |
// AfxThrowFileException(CFileException::endOfFile,0,GetFileName()); |
printf("Read after safemem file!!!!\n"); |
|
throw ("short packet on read (corrupted tagcount?)"); |
return 0; | return 0; |
} | } |