All pastes #39384 Raw Edit

Unnamed

public text v1 · immutable
#39384 ·published 2006-02-01 03:54 UTC
rendered paste body
			bool bHasLongBlocks =  false;
		
			std::list<Pending_Block_Struct*>::iterator it = m_PendingBlocks_list.begin();
			for (uint32 i = 0; i != 3; i++){
				if (it != m_PendingBlocks_list.end()) {
					Pending_Block_Struct* pending = *it++;
					wxASSERT( pending->block->StartOffset <= pending->block->EndOffset );
					if (pending->block->StartOffset > 0xFFFFFFFF || pending->block->EndOffset > 0xFFFFFFFF){
						bHasLongBlocks = true;
						if (!SupportsLargeFiles()){
							// Requesting a large block from a client that doesn't support large files?
							wxASSERT( false );
							if (!GetSentCancelTransfer()){
								CPacket* packet = new CPacket(OP_CANCELTRANSFER, 0, OP_EDONKEYPROT);
								theStats::AddUpOverheadFileRequest(packet->GetPacketSize());
								AddDebugLogLineM( false, logLocalClient, wxT("Local Client: OP_CANCELTRANSFER to ") + GetFullIP() );
								SendPacket(packet,true,true);
								SetSentCancelTransfer(1);
							}					
							SetDownloadState(DS_ERROR);
						}
						break;
					}
				}
			}
			
			CMemFile data(16 /*Hash*/ + (3*(bHasLongBlocks ? 8 : 4) /* uint32/64 start*/) + (3*(bHasLongBlocks ? 8 : 4)/* uint32/64 end*/));
			data.WriteHash(m_reqfile->GetFileHash());
			
			it = m_PendingBlocks_list.begin();
			for (uint32 i = 0; i != 3; i++) {
				if (it != m_PendingBlocks_list.end()) {
					Pending_Block_Struct* pending = *it++;
					wxASSERT( pending->block->StartOffset <= pending->block->EndOffset );
					pending->fZStreamError = 0;
					pending->fRecovered = 0;
					if (bHasLongBlocks) {
						data.WriteUInt64(pending->block->StartOffset);
					} else {
						data.WriteUInt32(pending->block->StartOffset);
					}
				} else {
					if (bHasLongBlocks) {
						data.WriteUInt64(0);
					} else {
						data.WriteUInt32(0);
					}
				}
			}
			
			it = m_PendingBlocks_list.begin();
			for (uint32 i = 0; i != 3; i++) {
				if (it != m_PendingBlocks_list.end()) {
					Requested_Block_Struct* block = (*it++)->block;
					if (bHasLongBlocks) {
						data.WriteUInt64(block->EndOffset+1);
					} else {
						data.WriteUInt32(block->EndOffset+1);		
					}
				} else {
					if (bHasLongBlocks) {			
						data.WriteUInt64(0);
					} else {
						data.WriteUInt32(0);
					}
				}
			}	
			packet = new CPacket(&data, (bHasLongBlocks ? OP_EMULEPROT : OP_EDONKEYPROT), (bHasLongBlocks ? (uint8)OP_REQUESTPARTS_I64 : (uint8)OP_REQUESTPARTS));