UINT CSearchList::ProcessSearchAnswer(const uchar* in_packet, uint32 size, bool bOptUTF8, uint32 nServerIP, uint16 nServerPort, bool* pbMoreResultsAvailable) { CSafeMemFile packet(in_packet, size); UINT results = packet.ReadUInt32(); for (UINT i = 0; i < results; i++){ CSearchFile* toadd = new CSearchFile(&packet, bOptUTF8, m_nCurED2KSearchID); toadd->SetClientServerIP(nServerIP); toadd->SetClientServerPort(nServerPort); if (nServerIP && nServerPort){ CSearchFile::SServer server(nServerIP, nServerPort); server.m_uAvail = toadd->GetIntTagValue(FT_SOURCES); toadd->AddServer(server); } AddToList(toadd, false); } if (m_MobilMuleSearch) theApp.mmserver->SearchFinished(false); m_MobilMuleSearch = false; if (pbMoreResultsAvailable) *pbMoreResultsAvailable = false; int iAddData = (int)(packet.GetLength() - packet.GetPosition()); if (iAddData == 1){ uint8 ucMore = packet.ReadUInt8(); if (ucMore == 0x00 || ucMore == 0x01){ if (pbMoreResultsAvailable) *pbMoreResultsAvailable = ucMore!=0; if (thePrefs.GetDebugServerTCPLevel() > 0) Debug(_T(" Search answer(Server %s:%u): More=%u\n"), ipstr(nServerIP), nServerPort, ucMore); } else{ if (thePrefs.GetDebugServerTCPLevel() > 0) Debug(_T("*** NOTE: ProcessSearchAnswer(Server %s:%u): ***AddData: 1 byte: 0x%02x\n"), ipstr(nServerIP), nServerPort, ucMore); } } else if (iAddData > 0){ if (thePrefs.GetDebugServerTCPLevel() > 0){ Debug(_T("*** NOTE: ProcessSearchAnswer(Server %s:%u): ***AddData: %u bytes\n"), ipstr(nServerIP), nServerPort, iAddData); DebugHexDump(in_packet + packet.GetPosition(), iAddData); } } packet.Close(); return GetED2KResultCount(); }
UINT CSearchList::ProcessSearchAnswer(const uchar* in_packet, uint32 size, CUpDownClient* Sender, bool* pbMoreResultsAvailable, LPCTSTR pszDirectory) { ASSERT( Sender != NULL ); uint32 nSearchID = (uint32)Sender; SSearchParams* pParams = new SSearchParams; pParams->strExpression = Sender->GetUserName(); pParams->dwSearchID = nSearchID; pParams->bClientSharedFiles = true; if (theApp.emuledlg->searchwnd->CreateNewTab(pParams)){ m_foundFilesCount.SetAt(nSearchID, 0); m_foundSourcesCount.SetAt(nSearchID, 0); } else{ delete pParams; pParams = NULL; } CSafeMemFile packet(in_packet, size); UINT results = packet.ReadUInt32(); for (UINT i = 0; i < results; i++){ CSearchFile* toadd = new CSearchFile(&packet, Sender ? Sender->GetUnicodeSupport()!=utf8strNone : false, nSearchID, 0, 0, pszDirectory); if (Sender){ toadd->SetClientID(Sender->GetIP()); toadd->SetClientPort(Sender->GetUserPort()); toadd->SetClientServerIP(Sender->GetServerIP()); toadd->SetClientServerPort(Sender->GetServerPort()); if (Sender->GetServerIP() && Sender->GetServerPort()){ CSearchFile::SServer server(Sender->GetServerIP(), Sender->GetServerPort()); server.m_uAvail = 1; toadd->AddServer(server); } toadd->SetPreviewPossible( Sender->GetPreviewSupport() && ED2KFT_VIDEO == GetED2KFileTypeID(toadd->GetFileName()) ); } AddToList(toadd, true); } if (pbMoreResultsAvailable) *pbMoreResultsAvailable = false; int iAddData = (int)(packet.GetLength() - packet.GetPosition()); if (iAddData == 1){ uint8 ucMore = packet.ReadUInt8(); if (ucMore == 0x00 || ucMore == 0x01){ if (pbMoreResultsAvailable) *pbMoreResultsAvailable = ucMore!=0; if (thePrefs.GetDebugClientTCPLevel() > 0) Debug(_T(" Client search answer(%s): More=%u\n"), Sender->GetUserName(), ucMore); } else{ if (thePrefs.GetDebugClientTCPLevel() > 0) Debug(_T("*** NOTE: Client ProcessSearchAnswer(%s): ***AddData: 1 byte: 0x%02x\n"), Sender->GetUserName(), ucMore); } } else if (iAddData > 0){ if (thePrefs.GetDebugClientTCPLevel() > 0){ Debug(_T("*** NOTE: Client ProcessSearchAnswer(%s): ***AddData: %u bytes\n"), Sender->GetUserName(), iAddData); DebugHexDump(in_packet + packet.GetPosition(), iAddData); } } packet.Close(); return GetResultCount(nSearchID); }