bool CChatSelector::SendMessage(const CString& rstrMessage) { CChatItem* ci = GetCurrentChatItem(); if (!ci) return false; if (ci->history.GetCount() == thePrefs.GetMaxChatHistoryLines()) ci->history.RemoveAt(0); ci->history.Add(rstrMessage); ci->history_pos = ci->history.GetCount(); // advance spamfilter stuff ci->client->IncMessagesSent(); ci->client->SetSpammer(false); if (ci->client->GetChatState() == MS_CONNECTING) return false; //==>timestamp in chatwindow [shadow2004] if (thePrefs.GetIRCAddTimestamp()) AddTimeStamp(ci); //<==timestamp in chatwindow [shadow2004] if (ci->client->socket && ci->client->socket->IsConnected()) { CSafeMemFile data; data.WriteString(rstrMessage, ci->client->GetUnicodeSupport()); Packet* packet = new Packet(&data, OP_EDONKEYPROT, OP_MESSAGE); theStats.AddUpDataOverheadOther(packet->size); ci->client->socket->SendPacket(packet, true, true); ci->log->AppendKeyWord(thePrefs.GetUserNick(), RGB(1,180,20)); ci->log->AppendText(_T(": ")); ci->log->AppendText(rstrMessage + _T("\n")); } else { ci->log->AppendKeyWord(_T("*** ") + GetResString(IDS_CONNECTING), RGB(255,0,0)); ci->strMessagePending = rstrMessage; ci->client->SetChatState(MS_CONNECTING); //==>Fix for closed [cyrex2001] #ifdef FIX_CLOSED ci->client->TryToConnect(true); #else //Fix for closed ci->client->TryToConnect(); #endif //Fix for closed //<==Fix for closed [cyrex2001] } return true; }
void CChatSelector::ConnectingResult(CUpDownClient* sender, bool success) { CChatItem* ci = GetItemByClient(sender); if (!ci) return; ci->client->SetChatState(MS_CHATTING); if (!success){ if (!ci->strMessagePending.IsEmpty()){ ci->log->AppendKeyWord(_T(" ") + GetResString(IDS_FAILED) + _T("\n"), RGB(255,0,0)); ci->strMessagePending.Empty(); } else{ //==>timestamp in chatwindow [shadow2004] if (thePrefs.GetIRCAddTimestamp()) AddTimeStamp(ci); //<==timestamp in chatwindow [shadow2004] ci->log->AppendKeyWord(GetResString(IDS_CHATDISCONNECTED) + _T("\n"), RGB(255,0,0)); } } else if (!ci->strMessagePending.IsEmpty()){ ci->log->AppendKeyWord(_T(" ok\n"), RGB(255,0,0)); CSafeMemFile data; data.WriteString(ci->strMessagePending, ci->client->GetUnicodeSupport()); Packet* packet = new Packet(&data, OP_EDONKEYPROT, OP_MESSAGE); theStats.AddUpDataOverheadOther(packet->size); ci->client->socket->SendPacket(packet, true, true); //==>timestamp in chatwindow [shadow2004] if (thePrefs.GetIRCAddTimestamp()) AddTimeStamp(ci); //<==timestamp in chatwindow [shadow2004] ci->log->AppendKeyWord(thePrefs.GetUserNick(), RGB(1,180,20)); ci->log->AppendText(_T(": ")); ci->log->AppendText(ci->strMessagePending + _T("\n")); ci->strMessagePending.Empty(); } else{ //==>timestamp in chatwindow [shadow2004] if (thePrefs.GetIRCAddTimestamp()) AddTimeStamp(ci); //==>timestamp in chatwindow [shadow2004] ci->log->AppendKeyWord(_T("*** Connected\n"), RGB(255,0,0)); } }
void CAICHRecoveryHashSet::DbgTest(){ #ifdef _DEBUG //define TESTSIZE 4294567295 uint8 maxLevel = 0; uint32 cHash = 1; uint8 curLevel = 0; //uint32 cParts = 0; maxLevel = 0; /* CAICHHashTree* pTest = new CAICHHashTree(TESTSIZE, true, 9728000); for (uint64 i = 0; i+9728000 < TESTSIZE; i += 9728000){ CAICHHashTree* pTest2 = new CAICHHashTree(9728000, true, EMBLOCKSIZE); pTest->ReplaceHashTree(i, 9728000, &pTest2); cParts++; } CAICHHashTree* pTest2 = new CAICHHashTree(TESTSIZE-i, true, EMBLOCKSIZE); pTest->ReplaceHashTree(i, (TESTSIZE-i), &pTest2); cParts++; */ #define TESTSIZE m_pHashTree.m_nDataSize if (m_pHashTree.m_nDataSize <= EMBLOCKSIZE) return; CAICHRecoveryHashSet TestHashSet(m_pOwner); TestHashSet.SetFileSize(m_pOwner->GetFileSize()); TestHashSet.SetMasterHash(GetMasterHash(), AICH_VERIFIED); CSafeMemFile file; uint64 i; for (i = 0; i+9728000 < TESTSIZE; i += 9728000){ VERIFY( CreatePartRecoveryData(i, &file) ); /*uint32 nRandomCorruption = (rand() * rand()) % (file.GetLength()-4); file.Seek(nRandomCorruption, CFile::begin); file.Write(&nRandomCorruption, 4);*/ file.SeekToBegin(); VERIFY( TestHashSet.ReadRecoveryData(i, &file) ); file.SeekToBegin(); TestHashSet.FreeHashSet(); uint32 j; for (j = 0; j+EMBLOCKSIZE < 9728000; j += EMBLOCKSIZE){ VERIFY( m_pHashTree.FindHash(i+j, EMBLOCKSIZE, &curLevel) ); //TRACE(_T("%u - %s\r\n"), cHash, m_pHashTree.FindHash(i+j, EMBLOCKSIZE, &curLevel)->m_Hash.GetString()); maxLevel = max(curLevel, maxLevel); curLevel = 0; cHash++; } VERIFY( m_pHashTree.FindHash(i+j, 9728000-j, &curLevel) ); //TRACE(_T("%u - %s\r\n"), cHash, m_pHashTree.FindHash(i+j, 9728000-j, &curLevel)->m_Hash.GetString()); maxLevel = max(curLevel, maxLevel); curLevel = 0; cHash++; } VERIFY( CreatePartRecoveryData(i, &file) ); file.SeekToBegin(); VERIFY( TestHashSet.ReadRecoveryData(i, &file) ); file.SeekToBegin(); TestHashSet.FreeHashSet(); uint64 j; for (j = 0; j+EMBLOCKSIZE < TESTSIZE-i; j += EMBLOCKSIZE){ VERIFY( m_pHashTree.FindHash(i+j, EMBLOCKSIZE, &curLevel) ); //TRACE(_T("%u - %s\r\n"), cHash,m_pHashTree.FindHash(i+j, EMBLOCKSIZE, &curLevel)->m_Hash.GetString()); maxLevel = max(curLevel, maxLevel); curLevel = 0; cHash++; } //VERIFY( m_pHashTree.FindHash(i+j, (TESTSIZE-i)-j, &curLevel) ); TRACE(_T("%u - %s\r\n"), cHash,m_pHashTree.FindHash(i+j, (TESTSIZE-i)-j, &curLevel)->m_Hash.GetString()); maxLevel = max(curLevel, maxLevel); #endif }
void CSearchList::KademliaSearchKeyword(uint32 searchID, const Kademlia::CUInt128* fileID, LPCTSTR name, uint32 size, LPCTSTR type, UINT numProperties, ...) { va_list args; va_start(args, numProperties); EUtf8Str eStrEncode = utf8strRaw; CSafeMemFile* temp = new CSafeMemFile(250); uchar fileid[16]; fileID->toByteArray(fileid); temp->WriteHash16(fileid); temp->WriteUInt32(0); // client IP temp->WriteUInt16(0); // client port // write tag list UINT uFilePosTagCount = (UINT)temp->GetPosition(); uint32 tagcount = 0; temp->WriteUInt32(tagcount); // dummy tag count, will be filled later // standard tags CTag tagName(FT_FILENAME, name); tagName.WriteTagToFile(temp, eStrEncode); tagcount++; CTag tagSize(FT_FILESIZE, size); tagSize.WriteTagToFile(temp, eStrEncode); tagcount++; if (type != NULL && type[0] != _T('\0')) { CTag tagType(FT_FILETYPE, type); tagType.WriteTagToFile(temp, eStrEncode); tagcount++; } // additional tags while (numProperties-- > 0) { UINT uPropType = va_arg(args, UINT); LPCSTR pszPropName = va_arg(args, LPCSTR); LPVOID pvPropValue = va_arg(args, LPVOID); if (uPropType == 2 /*TAGTYPE_STRING*/) { if ((LPCTSTR)pvPropValue != NULL && ((LPCTSTR)pvPropValue)[0] != _T('\0')) { if (strlen(pszPropName) == 1) { CTag tagProp((uint8)*pszPropName, (LPCTSTR)pvPropValue); tagProp.WriteTagToFile(temp, eStrEncode); } else { CTag tagProp(pszPropName, (LPCTSTR)pvPropValue); tagProp.WriteTagToFile(temp, eStrEncode); } tagcount++; } } else if (uPropType == 3 /*TAGTYPE_UINT32*/) { if ((uint32)pvPropValue != 0) { CTag tagProp(pszPropName, (uint32)pvPropValue); tagProp.WriteTagToFile(temp, eStrEncode); tagcount++; } } else { ASSERT(0); } } va_end(args); temp->Seek(uFilePosTagCount, SEEK_SET); temp->WriteUInt32(tagcount); temp->SeekToBegin(); CSearchFile* tempFile = new CSearchFile(temp, eStrEncode == utf8strRaw, searchID, 0, 0, 0, true); AddToList(tempFile); delete temp; }