--- In DownloadClient.cpp /* They make a source request this way..*/ SOURCECLIENTREASK )))){ Packet* packet = new Packet(OP_REQUESTSOURCES,16,OP_EMULEPROT); memcpy(packet->pBuffer,reqfile->GetFileHash(),16); socket->SendPacket(packet,true,true); reqfile->m_ClientSrcAsked = ((::GetTickCount() -SOURCECLIENTREASK) + 6000); } --- In ListenSocket.cpp case OP_REQUESTSOURCES:{ if (size != 16) throw GetResString(IDS_ERR_BADSIZE); CKnownFile* file = theApp.sharedfiles->GetFileByID((uchar*)packet); if (!file) file = theApp.downloadqueue->GetFileByID((uchar*)packet); if (file){ Packet* tosend = file->CreateSrcInfoPacket(client); if (tosend){ SendPacket(tosend,true,true); } } break; } case OP_ANSWERSOURCES:{ try{ CSafeMemFile data((BYTE*)packet,size); uchar hash[16]; data.Read(hash,16); CKnownFile* file = theApp.downloadqueue->GetFileByID((uchar*)packet); if (!file) file = theApp.sharedfiles->GetFileByID((uchar*)packet); if (file && file->IsPartFile()){ ((CPartFile*)file)->AddClientSources(&data); } } catch(CFileException* error){ OUTPUT_DEBUG_TRACE(); error->Delete(); throw GetResString(IDS_ERR_INVALIDPACKAGE); } break; } --- In opcodes.h #define OP_EMULEPROT 0xC5 /* Evil */ #define OP_MLDONKEYPROT 0x00 // extened prot client <-> extened prot client #define OP_EMULEINFO 0x01 #define OP_EMULEINFOANSWER 0x02 #define OP_COMPRESSEDPART 0x40 #define OP_QUEUERANKING 0x60 #define OP_FILEDESC 0x61 #define OP_VERIFYUPSREQ 0x71 #define OP_VERIFYUPSANSWER 0x72 #define OP_UDPVERIFYUPREQ 0x73 #define OP_UDPVERIFYUPA 0x74 #define OP_REQUESTSOURCES 0x81 /*Interesting opcodes..*/ #define OP_ANSWERSOURCES 0x82 /*Interesting opcodes..*/ // extened prot client <-> extened prot client UDP #define OP_REASKFILEPING 0x90 #define OP_REASKACK 0x91 #define OP_FILENOTFOUND 0x92 #define OP_QUEUEFULL 0x93