📄 opcodes.h
字号:
//this file is part of eMule
//Copyright (C)2002 Merkur ( devs@emule-project.net / http://www.emule-project.net )
//
//This program is free software; you can redistribute it and/or
//modify it under the terms of the GNU General Public License
//as published by the Free Software Foundation; either
//version 2 of the License, or (at your option) any later version.
//
//This program is distributed in the hope that it will be useful,
//but WITHOUT ANY WARRANTY; without even the implied warranty of
//MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
//GNU General Public License for more details.
//
//You should have received a copy of the GNU General Public License
//along with this program; if not, write to the Free Software
//Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#pragma once
// MOD Note: Do not change this part - Merkur
#define EMULE_PROTOCOL 0x01
// MOD Note: end
#define EDONKEYVERSION 0x3C
#define PREFFILE_VERSION 0x14 //<<-- last change: reduced .dat, by using .ini
#define PARTFILE_VERSION 0xe0
#define PARTFILE_SPLITTEDVERSION 0xe1
#define CREDITFILE_VERSION 0x12
#define CREDITFILE_VERSION_29 0x11
#define COMPILE_DATE __DATE__
#define COMPILE_TIME __TIME__
#ifdef _DEBUG
#define EMULE_GUID _T("EMULE-{4EADC6FC-516F-4b7c-9066-97D893649570}-DEBUG")
#else
#define EMULE_GUID _T("EMULE-{4EADC6FC-516F-4b7c-9066-97D893649570}")
#endif
#define SEC2MS(sec) ((sec)*1000)
#define MIN2MS(min) SEC2MS((min)*60)
#define HR2MS(hr) MIN2MS((hr)*60)
#define SEC(sec) (sec)
#define MIN2S(min) ((min)*60)
#define HR2S(hr) MIN2S((hr)*60)
// MOD Note: Do not change this part - Merkur
#define UDPSEARCHSPEED SEC2MS(1) //1 sec - if this value is too low you will miss sources
#define MAX_RESULTS 100 // max global search results
#define MAX_MORE_SEARCH_REQ 5 // this gives a max. total search results of (1+5)*201 = 1206 or (1+5)*300 = 1800
#define MAX_CLIENTCONNECTIONTRY 2
#define CONNECTION_TIMEOUT SEC2MS(40) //40 secs - set his lower if you want less connections at once, set it higher if you have enough sockets (edonkey has its own timout too, so a very high value won't effect this)
#define FILEREASKTIME MIN2MS(29) //29 mins
#define SERVERREASKTIME MIN2MS(15) //15 mins - don't set this too low, it wont speed up anything, but it could kill emule or your internetconnection
#define UDPSERVERREASKTIME MIN2MS(30) //30 mins
#define MAX_SERVERFAILCOUNT 10
#define SOURCECLIENTREASKS MIN2MS(40) //40 mins
#define SOURCECLIENTREASKF MIN2MS(5) //5 mins
#define KADEMLIAASKTIME SEC2MS(1) //1 second
#define KADEMLIATOTALFILE 7 //Total files to search sources for.
#define KADEMLIAREASKTIME HR2MS(1) //1 hour
#define KADEMLIAPUBLISHTIME SEC2MS(2) //2 second
#define KADEMLIATOTALSTORESRC 2 //Total hashes to store.
#define KADEMLIATOTALSTOREKEY 1 //Total hashes to store.
#define KADEMLIAREPUBLISHTIMES HR2S(5) //5 hours
#define KADEMLIAREPUBLISHTIMEK HR2S(24) //24 hours
#define KADEMLIADISCONNECTDELAY MIN2S(20) //20 mins
#define KADEMLIAMAXINDEX 50000 //Total keyword indexes.
#define KADEMLIAMAXENTRIES 60000 //Total keyword entries.
#define KADEMLIAMAXSOUCEPERFILE 300 //Max number of sources per file in index.
#define KADEMLIAMAXNOTESPERETRY 50 //Max number of notes per entry in index.
#define ED2KREPUBLISHTIME MIN2MS(1) //1 min
#define MINCOMMONPENALTY 4
#define UDPSERVERSTATTIME SEC2MS(5) //5 secs
#define UDPSERVSTATREASKTIME HR2S(4) //4 hours
#define UDPSERVERPORT 4665 //default udp port
#define UDPMAXQUEUETIME SEC2MS(30) //30 Seconds
#define RSAKEYSIZE 384 //384 bits
#define MAX_SOURCES_FILE_SOFT 500
#define MAX_SOURCES_FILE_UDP 50
#define SESSIONMAXTRANS (9.3*1024*1024) // 9.3 Mbytes. "Try to send complete chunks" always sends this amount of data
#define SESSIONMAXTIME HR2MS(1) //1 hour
#define MAXFILECOMMENTLEN 50
// MOD Note: end
#define CONFIGFOLDER _T("config\\")
#define MAXCONPER5SEC 20
#define MAXCON5WIN9X 10
#define UPLOAD_CHECK_CLIENT_DR 2048
#define UPLOAD_CLIENT_DATARATE 3072 // uploadspeed per client in bytes - you may want to adjust this if you have a slow connection or T1-T3 ;)
#define MAX_UP_CLIENTS_ALLOWED 250 // max. clients allowed regardless UPLOAD_CLIENT_DATARATE or any other factors. Don't set this too low, use DATARATE to adjust uploadspeed per client
#define MIN_UP_CLIENTS_ALLOWED 2 // min. clients allowed to download regardless UPLOAD_CLIENT_DATARATE or any other factors. Don't set this too high
#define DOWNLOADTIMEOUT SEC2MS(100)
#define CONSERVTIMEOUT SEC2MS(25) // agelimit for pending connection attempts
#define RARE_FILE 50
#define BADCLIENTBAN 4
#define MIN_REQUESTTIME MIN2MS(10)
#define MAX_PURGEQUEUETIME HR2MS(1)
#define PURGESOURCESWAPSTOP MIN2MS(15) // (15 mins), how long forbid swapping a source to a certain file (NNP,...)
#define CONNECTION_LATENCY 22050 // latency for responces
#define MINWAIT_BEFORE_DLDISPLAY_WINDOWUPDATE 1000
#define MINWAIT_BEFORE_ULDISPLAY_WINDOWUPDATE 1000
#define CLIENTBANTIME HR2MS(2) // 2h
#define TRACKED_CLEANUP_TIME HR2MS(1) // 1 hour
#define KEEPTRACK_TIME HR2MS(2) // 2h //how long to keep track of clients which were once in the uploadqueue
#define LOCALSERVERREQUESTS 20000 // only one local src request during this timespan (WHERE IS THIS USED?)
#define DISKSPACERECHECKTIME MIN2MS(15) // SLUGFILLER: checkDiskspace
#define CLIENTLIST_CLEANUP_TIME MIN2MS(34) // 34 min
// you shouldn't change anything here if you are not really sure, or emule will probaly not work
#define MAXFRAGSIZE 1300
#define EMBLOCKSIZE 184320
#define OP_EDONKEYHEADER 0xE3
#define OP_KADEMLIAHEADER 0xE4
#define OP_KADEMLIAPACKEDPROT 0xE5
#define OP_EDONKEYPROT OP_EDONKEYHEADER
#define OP_PACKEDPROT 0xD4
#define OP_EMULEPROT 0xC5
#define OP_MLDONKEYPROT 0x00
#define MET_HEADER 0x0E
#define UNLIMITED 0xFFFF
//Proxytypes deadlake
#define PROXYTYPE_NOPROXY 0
#define PROXYTYPE_SOCKS4 1
#define PROXYTYPE_SOCKS4A 2
#define PROXYTYPE_SOCKS5 3
#define PROXYTYPE_HTTP11 4
// client <-> server
#define OP_LOGINREQUEST 0x01 //<HASH 16><ID 4><PORT 2><1 Tag_set>
#define OP_REJECT 0x05 //(null)
#define OP_GETSERVERLIST 0x14 //(null)client->server
#define OP_OFFERFILES 0x15 // <count 4>(<HASH 16><ID 4><PORT 2><1 Tag_set>)[count]
#define OP_SEARCHREQUEST 0x16 // <Query_Tree>
#define OP_DISCONNECT 0x18 // (not verified)
#define OP_GETSOURCES 0x19 // <HASH 16>
#define OP_SEARCH_USER 0x1A // <Query_Tree>
#define OP_CALLBACKREQUEST 0x1C // <ID 4>
#define OP_QUERY_CHATS 0x1D // (deprecated not supported by server any longer)
#define OP_CHAT_MESSAGE 0x1E // (deprecated not supported by server any longer)
#define OP_JOIN_ROOM 0x1F // (deprecated not supported by server any longer)
#define OP_QUERY_MORE_RESULT 0x21 // (null)
#define OP_SERVERLIST 0x32 // <count 1>(<IP 4><PORT 2>)[count] server->client
#define OP_SEARCHRESULT 0x33 // <count 4>(<HASH 16><ID 4><PORT 2><1 Tag_set>)[count]
#define OP_SERVERSTATUS 0x34 // <USER 4><FILES 4>
#define OP_CALLBACKREQUESTED 0x35 // <IP 4><PORT 2>
#define OP_CALLBACK_FAIL 0x36 // (null notverified)
#define OP_SERVERMESSAGE 0x38 // <len 2><Message len>
#define OP_CHAT_ROOM_REQUEST 0x39 // (deprecated not supported by server any longer)
#define OP_CHAT_BROADCAST 0x3A // (deprecated not supported by server any longer)
#define OP_CHAT_USER_JOIN 0x3B // (deprecated not supported by server any longer)
#define OP_CHAT_USER_LEAVE 0x3C // (deprecated not supported by server any longer)
#define OP_CHAT_USER 0x3D // (deprecated not supported by server any longer)
#define OP_IDCHANGE 0x40 // <NEW_ID 4>
#define OP_SERVERIDENT 0x41 // <HASH 16><IP 4><PORT 2>{1 TAG_SET}
#define OP_FOUNDSOURCES 0x42 // <HASH 16><count 1>(<ID 4><PORT 2>)[count]
#define OP_USERS_LIST 0x43 // <count 4>(<HASH 16><ID 4><PORT 2><1 Tag_set>)[count]
//client <-> UDP server
#define OP_GLOBSEARCHREQ2 0x92 // <search_tree>
#define OP_GLOBSERVSTATREQ 0x96 // (null)
#define OP_GLOBSERVSTATRES 0x97 // <USER 4><FILES 4>
#define OP_GLOBSEARCHREQ 0x98 // <search_tree>
#define OP_GLOBSEARCHRES 0x99 //
#define OP_GLOBGETSOURCES 0x9A // <HASH 16>
#define OP_GLOBFOUNDSOURCES 0x9B //
#define OP_GLOBCALLBACKREQ 0x9C // <IP 4><PORT 2><client_ID 4>
#define OP_INVALID_LOWID 0x9E // <ID 4>
#define OP_SERVER_LIST_REQ 0xA0 // <IP 4><PORT 2>
#define OP_SERVER_LIST_RES 0xA1 // <count 1> (<ip 4><port 2>)[count]
#define OP_SERVER_DESC_REQ 0xA2 // (null)
#define OP_SERVER_DESC_RES 0xA3 // <name_len 2><name name_len><desc_len 2 desc_en>
#define OP_SERVER_LIST_REQ2 0xA4 // (null)
#define INV_SERV_DESC_LEN 0xF0FF // used as an 'invalid' string len for OP_SERVER_DESC_REQ/RES
// client <-> client
#define OP_HELLO 0x01 // 0x10<HASH 16><ID 4><PORT 2><1 Tag_set>
#define OP_SENDINGPART 0x46 // <HASH 16><von 4><bis 4><Daten len:(von-bis)>
#define OP_REQUESTPARTS 0x47 // <HASH 16><von[3] 4*3><bis[3] 4*3>
#define OP_FILEREQANSNOFIL 0x48 // <HASH 16>
#define OP_END_OF_DOWNLOAD 0x49 // <HASH 16>
#define OP_ASKSHAREDFILES 0x4A // (null)
#define OP_ASKSHAREDFILESANSWER 0x4B // <count 4>(<HASH 16><ID 4><PORT 2><1 Tag_set>)[count]
#define OP_HELLOANSWER 0x4C // <HASH 16><ID 4><PORT 2><1 Tag_set><SERVER_IP 4><SERVER_PORT 2>
#define OP_CHANGE_CLIENT_ID 0x4D // <ID_old 4><ID_new 4>
#define OP_MESSAGE 0x4E // <len 2><Message len>
#define OP_SETREQFILEID 0x4F // <HASH 16>
#define OP_FILESTATUS 0x50 // <HASH 16><count 2><status(bit array) len:((count+7)/8)>
#define OP_HASHSETREQUEST 0x51 // <HASH 16>
#define OP_HASHSETANSWER 0x52 // <count 2><HASH[count] 16*count>
#define OP_STARTUPLOADREQ 0x54 // <HASH 16>
#define OP_ACCEPTUPLOADREQ 0x55 // (null)
#define OP_CANCELTRANSFER 0x56 // (null)
#define OP_OUTOFPARTREQS 0x57 // (null)
#define OP_REQUESTFILENAME 0x58 // <HASH 16> (more correctly file_name_request)
#define OP_REQFILENAMEANSWER 0x59 // <HASH 16><len 4><NAME len>
#define OP_CHANGE_SLOT 0x5B // <HASH 16>
#define OP_QUEUERANK 0x5C // <wert 4> (slot index of the request)
#define OP_ASKSHAREDDIRS 0x5D // (null)
#define OP_ASKSHAREDFILESDIR 0x5E // <len 2><Directory len>
#define OP_ASKSHAREDDIRSANS 0x5F // <count 4>(<len 2><Directory len>)[count]
#define OP_ASKSHAREDFILESDIRANS 0x60 // <len 2><Directory len><count 4>(<HASH 16><ID 4><PORT 2><1 Tag_set>)[count]
#define OP_ASKSHAREDDENIEDANS 0x61 // (null)
// this 'identifier' is used for referencing shared part (incomplete) files with the OP_ASKSHAREDDIRS and related opcodes
// it was introduced with eDonkeyHybrid and is considered as part of the protocol.
#define OP_INCOMPLETE_SHARED_FILES "!Incomplete Files"
// eDonkeyHybrid truncates every received client message to 200 bytes, although it allows to send messages of any(?) size.
#define MAX_CLIENT_MSG_LEN 450 // using 200 is just too short
#define MAX_IRC_MSG_LEN 450 // 450 = same as in mIRC
// extened prot client <-> extened prot client
#define OP_EMULEINFO 0x01 //
#define OP_EMULEINFOANSWER 0x02 //
#define OP_COMPRESSEDPART 0x40 //
#define OP_QUEUERANKING 0x60 // <RANG 2>
#define OP_FILEDESC 0x61 // <len 2><NAME len>
#define OP_REQUESTSOURCES 0x81 // <HASH 16>
#define OP_ANSWERSOURCES 0x82 //
#define OP_PUBLICKEY 0x85 // <len 1><pubkey len>
#define OP_SIGNATURE 0x86 // v1: <len 1><signature len> v2:<len 1><signature len><sigIPused 1>
#define OP_SECIDENTSTATE 0x87 // <state 1><rndchallenge 4>
#define OP_REQUESTPREVIEW 0x90 // <HASH 16>
#define OP_PREVIEWANSWER 0x91 // <HASH 16><frames 1>{frames * <len 4><frame len>}
#define OP_MULTIPACKET 0x92
#define OP_MULTIPACKETANSWER 0x93
#define OP_PEERCACHE_QUERY 0x94
#define OP_PEERCACHE_ANSWER 0x95
#define OP_PEERCACHE_ACK 0x96
#define OP_PUBLICIP_REQ 0x97
#define OP_PUBLICIP_ANSWER 0x98
#define OP_CALLBACK 0x99 // <HASH 16><HASH 16><uint 16>
#define OP_REASKCALLBACKTCP 0x9A
#define OP_AICHREQUEST 0x9B // <HASH 16><uint16><HASH aichhashlen>
#define OP_AICHANSWER 0x9C // <HASH 16><uint16><HASH aichhashlen> <data>
#define OP_AICHFILEHASHANS 0x9D
#define OP_AICHFILEHASHREQ 0x9E
// extened prot client <-> extened prot client UDP
#define OP_REASKFILEPING 0x90 // <HASH 16>
#define OP_REASKACK 0x91 // <RANG 2>
#define OP_FILENOTFOUND 0x92 // (null)
#define OP_QUEUEFULL 0x93 // (null)
#define OP_REASKCALLBACKUDP 0x94
#define OP_PORTTEST 0xFE // Connection Test
// server.met
#define ST_SERVERNAME 0x01 // <string>
#define ST_DESCRIPTION 0x0B // <string>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -