// ED2Kv2 packet... // Most common scenario: hash + blocks to request + every one // having 2 uint32 tags CMemFile data(16 + 1 + MAX_BLOCKS_REQUESTED*((2+4)*2)); data.WriteHash(m_reqfile->GetFileHash()); uint8 nBlocks = m_PendingBlocks_list.size(); if (nBlocks > MAX_BLOCKS_REQUESTED) { nBlocks = MAX_BLOCKS_REQUESTED; } data.WriteUInt8(nBlocks); std::list::iterator it = m_PendingBlocks_list.begin(); while (nBlocks) { wxASSERT(it != m_PendingBlocks_list.end()); wxASSERT( pending->block->StartOffset <= pending->block->EndOffset ); pending->fZStreamError = 0; pending->fRecovered = 0; CTagVarInt(/*Noname*/0,pending->StartOffset).WriteTagToFile(data); CTagVarInt(/*Noname*/0,pending->EndOffset).WriteTagToFile(data); nBlocks--; } packet = new CPacket(&data, OP_ED2KV2HEADER, OP_REQUESTPARTS);