All pastes #117907 Raw Edit

Someone

public text v1 · immutable
·published 2006-08-06 03:31 UTC
rendered paste body
	if (m_PendingBlocks_list.empty()) {

		CUpDownClient* slower_client = NULL;
		
		if (thePrefs::GetDropSlowSources()) {		
			printf("Checking slower client from client %p\n",this);
			slower_client = m_reqfile->GetSlowerDownloadingClient(m_lastaverage, this);
		}
		
		if (slower_client == NULL) {
			slower_client = this;
		}

		if (!slower_client->GetSentCancelTransfer()) {
			CPacket* packet = new CPacket(OP_CANCELTRANSFER, 0, OP_EDONKEYPROT);
			theStats::AddUpOverheadFileRequest(packet->GetPacketSize());
			if (slower_client != this) {
				printf("Dropped client %p to allow client %p to download\n",slower_client, this);
			}
			slower_client->ClearDownloadBlockRequests();
			slower_client->SendPacket(packet,true,true);
			slower_client->SetSentCancelTransfer(1);			
		}
		
		slower_client->SetDownloadState(DS_NONEEDEDPARTS);		
		
		if (slower_client != this) {
			// Re-request freed blocks.
			AddDebugLogLineM( false, logLocalClient, wxT("Local Client: OP_CANCELTRANSFER (faster source eager to transfer) to ") + slower_client->GetFullIP() );
			wxASSERT(m_DownloadBlocks_list.empty());
			wxASSERT(m_PendingBlocks_list.empty());
			uint16 count = m_MaxBlockRequests;
			Requested_Block_Struct* toadd[count];
			if (m_reqfile->GetNextRequestedBlock(this,toadd,&count)) {
				for (int i = 0; i != count; i++) {
					Pending_Block_Struct* pblock = new Pending_Block_Struct;
					pblock->block = toadd[i];
					pblock->zStream = NULL;
					pblock->totalUnzipped = 0;
					pblock->fZStreamError = 0;
					pblock->fRecovered = 0;
					m_PendingBlocks_list.push_back(pblock);
				}
			}	else {
				// WTF, we just freed blocks.
				wxASSERT(0);
				return;
			}
		} else {
			// Drop this one.
			AddDebugLogLineM( false, logLocalClient, wxT("Local Client: OP_CANCELTRANSFER (no free blocks) to ") + GetFullIP() );			
			#warning Kry - Would be nice to swap A4AF here.		
			return;
		}
	}