⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 packetfactory.java

📁 JMule是一个基于Java开发
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
	 *   </thead>	 *   <tbody>	 *     <tr>	 *       <td>Protocol</td>	 *       <td>1</td>	 *       <td>0xE3</td>	 *       <td>-</td>	 *     </tr>	 *     <tr>	 *       <td>Size</td>	 *       <td>4</td>	 *       <td>-</td>	 *       <td>The size of the message in bytes not including the header and size fields</td>	 *     </tr>	 *     <tr>	 *       <td>Type</td>	 *       <td>1</td>	 *       <td>0x01</td>	 *       <td>The value of the OP HELLO opcode</td>	 *     </tr>	 *     <tr>	 *       <td>User Hash size</td>	 *       <td>1</td>	 *       <td>16</td>	 *       <td>The size of the user hash field</td>	 *     </tr>	 *     <tr>	 *       <td>User Hash</td>	 *       <td>16</td>	 *       <td>&nbsp;</td>	 *       <td>TBD</td>	 *     </tr>	 *     <tr>	 *       <td>Client ID</td>	 *       <td>4</td>	 *       <td>0</td>	 *       <td>TBD</td>	 *     </tr>	 *     <tr>	 *       <td>TCP Port</td>	 *       <td>2</td>	 *       <td>4662</td>	 *       <td>The TCP port used by the client, configurable</td>	 *     </tr>	 *     <tr>	 *       <td>Tag Count</td>	 *       <td>4</td>	 *       <td>4</td>	 *       <td>The number of tags following in the message</td>	 *     </tr>	 *     <tr>	 *       <td>Tag list</td>	 *       <td>varies</td>	 *       <td>NA</td>	 *       <td>A list of tags specifying remote client’s properties	 * </td>	 *     </tr>	 *     <tr>	 *       <td>Server IP</td>	 *       <td>4</td>	 *       <td>NA</td>	 *       <td>The IP of the server to which the client is connected	 * </td>	 *     </tr>	 *     <tr>	 *       <td>Server TCP Port	 * </td>	 *       <td>2</td>	 *       <td>NA</td>	 *       <td>The TCP port on which the server listens</td>	 *     </tr>	 *   </tbody>	 * </table>	 * </table>	 */	public static Packet getPeerHelloPacket(UserHash userHash,ClientID clientID,int myPort,			byte[] serverIP,int serverPort,String userName){        byte[] tagUserName=TagFactory.getStringTag(userName, TAG_NAME_NAME).getData();        byte[] tagMiscOptions1=TagFactory.getDWORDTag(0, TAG_NAME_MISC_OPTIONS1).getData();        byte[] tagMiscOptions2=TagFactory.getDWORDTag(0, TAG_NAME_MISC_OPTIONS2).getData();        byte[] tagProtocolVersion=TagFactory.getDWORDTag(ProtocolVersion,TAG_NAME_PROTOCOLVERSION).getData();//Version tag        byte[] tageMuleVer=TagFactory.getDWORDTag(SoftwareVersion, TAG_NAME_CLIENTVER).getData();        byte[] tagUDPPort = TagFactory.getDWORDTag(ConfigurationManagerFactory.getInstance().getUDP(), TAG_NAME_UDP_PORT_PEER).getData();                Packet packet=new StandardPacket(1+16+4+2+4+tagUserName.length+tagMiscOptions1.length+tagMiscOptions2.length+tagProtocolVersion.length+tageMuleVer.length+tagUDPPort.length+4+2);               packet.setCommand(OP_PEERHELLO);//hello         packet.insertData((byte)16);//Insert length of user Hash        packet.insertData(userHash.getUserHash());//insert user hash        if (clientID == null)        	packet.insertData(new byte[]{0,0,0,0});//insert user ID        else         	packet.insertData(clientID.getClientID());//insert user ID        packet.insertData((short)myPort);//insert my active port        packet.insertData((int)6);//insert tag count        packet.insertData(tagUserName);//insert tag : user name        packet.insertData(tagMiscOptions1);        packet.insertData(tagMiscOptions2);        packet.insertData(tagProtocolVersion);        packet.insertData(tageMuleVer);        packet.insertData(tagUDPPort);        if (serverIP==null) packet.insertData(new byte[]{0,0,0,0});        else packet.insertData((serverIP));                packet.insertData((short)serverPort);        return packet;	}		    /**     * Peer hello answer packet.	 * <table cellspacing="0" border="1" cellpadding="0">	 *   <thead>	 *     <tr>	 *       <th>Name</th>	 *       <th>Size in bytes</th>	 *       <th>Default value</th>	 *       <th>Comment</th>	 *     </tr>	 *   </thead>	 *   <tbody>	 *     <tr>	 *       <td>Protocol</td>	 *       <td>1</td>	 *       <td>0xE3</td>	 *       <td>-</td>	 *     </tr>	 *     <tr>	 *       <td>Size</td>	 *       <td>4</td>	 *       <td>-</td>	 *       <td>The size of the message in bytes not including the header and size fields</td>	 *     </tr>	 *     <tr>	 *       <td>Type</td>	 *       <td>1</td>	 *       <td>0x4C</td>	 *       <td>The value of the OP HELLOANSWER opcode</td>	 *     </tr>	 *     <tr>	 *       <td>Hello fields</td>	 *       <td> &nbsp;</td>	 *       <td> &nbsp;</td>	 *       <td>The same fields as in the hello message starting with the user hash</td>	 *     </tr>	 *   </tbody>	 * </table>     * */	public static Packet getPeerHelloAnswerPacket(UserHash userHash,ClientID clientID,			int myPort,String userName,byte[] serverIP, int serverPort){				byte[] tagUserName=TagFactory.getStringTag(userName, TAG_NAME_NAME).getData();		byte[] tagMiscOptions1=TagFactory.getDWORDTag(0, TAG_NAME_MISC_OPTIONS1).getData();	    byte[] tagMiscOptions2=TagFactory.getDWORDTag(0, TAG_NAME_MISC_OPTIONS2).getData();		byte[] tagProtocolVersion=TagFactory.getDWORDTag(ProtocolVersion,TAG_NAME_PROTOCOLVERSION).getData();//Version tag		byte[] tageMuleVer=TagFactory.getDWORDTag(SoftwareVersion, TAG_NAME_CLIENTVER).getData();		byte[] tagUDPPort = TagFactory.getDWORDTag(ConfigurationManagerFactory.getInstance().getUDP(), TAG_NAME_UDP_PORT_PEER).getData();				Packet packet=new StandardPacket(1+1+16+4+2+4+4+2+tagUserName.length+2+tagMiscOptions1.length+tagMiscOptions2.length+tagProtocolVersion.length+tageMuleVer.length+4+2);		packet.setCommand(OP_PEERHELLOANSWER);//hello answer tag				packet.insertData(userHash.getUserHash());//insert user hash		if (clientID==null)			packet.insertData(new byte[]{0,0,0,0});		else 			packet.insertData(clientID.getClientID());//insert user ID				packet.insertData((short)myPort);//insert my active port		packet.insertData((int)6);//insert tag count		packet.insertData(tagUserName);//insert tag : user name		packet.insertData(tagMiscOptions1);//client flags		packet.insertData(tagMiscOptions2);		packet.insertData(tagProtocolVersion);		packet.insertData(tagUDPPort);		//packet.insertPacketData(tagPort);		packet.insertData(tageMuleVer);		if (serverIP!=null)			packet.insertData(serverIP);		else			packet.insertData(new byte[]{0,0,0,0});//Server IP		if (serverPort!=0)			packet.insertData((short)serverPort);		else			packet.insertData((short)0);//Server port		return packet;	}		/**	 * Peer chat message.	 * <table cellspacing="0" border="1" cellpadding="0">	 *   <thead>	 *     <tr>	 *       <th>Name</th>	 *       <th>Size in bytes</th>	 *       <th>Default value</th>	 *       <th>Comment</th>	 *     </tr>	 *   </thead>	 *   <tbody>	 *     <tr>	 *       <td>Protocol</td>	 *       <td>1</td>	 *       <td>0xE3</td>	 *       <td>-</td>	 *     </tr>	 *     <tr>	 *       <td>Size</td>	 *       <td>4</td>	 *       <td>-</td>	 *       <td>The size of the message in bytes not including	 * the header and size fields	 * </td>	 *     </tr>	 *     <tr>	 *       <td>Type</td>	 *       <td>1</td>	 *       <td>0x4E</td>	 *       <td>The value of the OP_MESSAGE opcode</td>	 *     </tr>	 *     <tr>	 *       <td>Length</td>	 *       <td>2</td>	 *       <td> NA</td>	 *       <td>The length of the message</td>	 *     </tr>	 *     <tr>	 *       <td>Message</td>	 *       <td>Varies</td>	 *       <td>NA</td>	 *       <td>The actual message	 * </td>	 *     </tr>	 *   </tbody>	 * </table>	 **/	public static Packet getMessagePacket(String message){		Packet packet = new StandardPacket(2+message.length());		packet.setCommand(OP_MESSAGE);		packet.insertData(Convert.intToShort(message.length()));		packet.insertData(message.getBytes());		return packet;	}		/**	 * Get File Request packet.	 * <table cellspacing="0" border="1" cellpadding="0">	 *   <thead>	 *     <tr>	 *       <th>Name</th>	 *       <th>Size in bytes</th>	 *       <th>Default value</th>	 *       <th>Comment</th>	 *     </tr>	 *   </thead>	 *   <tbody>	 *     <tr>	 *       <td>Protocol</td>	 *       <td>1</td>	 *       <td>0xE3</td>	 *       <td>-</td>	 *     </tr>	 *     <tr>	 *       <td>Size</td>	 *       <td>4</td>	 *       <td>-</td>	 *       <td>The size of the message in bytes not including	 * the header and size fields	 * </td>	 *     </tr>	 *     <tr>	 *       <td>Type</td>	 *       <td>1</td>	 *       <td>0x58</td>	 *       <td>The value of the OP FILEREQUEST opcode	 * </td>	 *     </tr>	 *     <tr>	 *       <td>File ID</td>	 *       <td>16</td>	 *       <td>NA</td>	 *       <td>Unique file ID</td>	 *     </tr>	 *     <tr>	 *       <td>Part Status</td>	 *       <td>3</td>	 *       <td>NA</td>	 *       <td>Optional, sent if the extended request version	 * indicated in the eMule info message is greater	 * than zero. The file significance is explained in	 * this section	 * </td>	 *     </tr>	 *     <tr>	 *       <td>Source count</td>	 *       <td>2</td>	 *       <td>NA</td>	 *       <td>Optional, sent if the extended request version	 * indicated in the eMule info message is greater	 * than one. Indicated the current number of	 * sources for this file	 * </td>	 *     </tr>	 *   </tbody>	 * </table>	 * */	public static Packet getFileRequestPacket(FileHash fileHash){        Packet packet=new StandardPacket(16);        packet.setCommand(OP_FILEREQUEST);        packet.insertData(fileHash.getHash());        return packet;	}		/**	 * Get requested file ID, this packet must be used with FileRequest packet.	 * @param fileHash file ID	 * @return requested file ID packet	 * <table cellspacing="0" border="1" cellpadding="0">	 *   <thead>	 *     <tr>	 *       <th>Name</th>	 *       <th>Size in bytes</th>	 *       <th>Default value</th>	 *       <th>Comment</th>	 *     </tr>	 *   </thead>	 *   <tbody>	 *     <tr>	 *       <td>Protocol</td>	 *       <td>1</td>	 *       <td>0xE3</td>	 *       <td>-</td>	 *     </tr>	 *     <tr>	 *       <td>Size</td>	 *       <td>4</td>	 *       <td>-</td>	 *       <td>The size of the message in bytes not including	 * the header and size fields	 * </td>	 *     </tr>	 *     <tr>	 *       <td>Type</td>	 *       <td>1</td>	 *       <td>0x4F</td>	 *       <td>The value of the OP SETREQFILEID opcode</td>	 *     </tr>	 *     <tr>	 *       <td>File ID</td>	 *       <td>16</td>	 *       <td>NA</td>	 *       <td>The ID of the requested file</td>	 *     </tr>	 *   </tbody>	 * </table>	 */    public static Packet getFileStatusRequestPacket(FileHash fileHash){            Packet packet=new StandardPacket(16);            packet.setCommand(OP_FILESTATREQ);            packet.insertData(fileHash.getHash());            return packet;    }	    /**     * Start upload request for file.     * @param fileHash file hash     * @return eDonkey packet	 * <table cellspacing="0" border="1" cellpadding="0">	 *   <thead>	 *     <tr>	 *       <th>Name</th>	 *       <th>Size in bytes</th>	 *       <th>Default value</th>	 *       <th>Comment</th>	 *     </tr>	 *   </thead>	 *   <tbody>	 *     <tr>	 *       <td>Protocol</td>	 *       <td>1</td>	 *       <td>0xE3</td>	 *       <td>-</td>	 *     </tr>	 *     <tr>	 *       <td>Size</td>	 *       <td>4</td>	 *       <td>-</td>	 *       <td>The size of the message in bytes not including	 * the header and size fields	 * </td>	 *     </tr>	 *     <tr>	 *       <td>Type</td>	 *       <td>1</td>	 *       <td>0x54</td>	 *       <td>The value of the OP_ STARTUPLOADREQ	 * opcode</td>	 *     </tr>	 *     <tr>	 *       <td>File ID</td>	 *       <td>16</td>	 *       <td> NA</td>	 *       <td>The ID of the requested file</td>	 *     </tr>	 *   </tbody>	 * </table>     */	public static Packet getUploadReuqestPacket(FileHash fileHash){		Packet packet=new StandardPacket(16);		packet.setCommand(OP_SLOTREQUEST);		packet.insertData(fileHash.getHash());		return packet;	} 	/**	 * Request file parts packet.	 * @param fileHash  hash of download file	 * @param partsData position of parts max 3, format <begin> <begin> <begin> <end> <end> <end>	 * @return	 * <table cellspacing="0" border="1" cellpadding="0">	 *   <thead>	 *     <tr>	 *       <th>Name</th>	 *       <th>Size in bytes</th>	 *       <th>Default value</th>	 *       <th>Comment</th>	 *     </tr>	 *   </thead>	 *   <tbody>	 *     <tr>	 *       <td>Protocol</td>	 *       <td>1</td>	 *       <td>0xE3</td>	 *       <td>-</td>	 *     </tr>	 *     <tr>	 *       <td>Size</td>	 *       <td>4</td>	 *       <td>-</td>	 *       <td>The size of the message in bytes not including	 * the header and size fields	 * </td>	 *     </tr>	 *     <tr>	 *       <td>Type</td>	 *       <td>1</td>	 *       <td>0x46</td>	 *       <td>The value of the OP REQUESTPARTS opcode</td>	 *     </tr>	 *     <tr>	 *       <td>File ID</td>	 *       <td> 16</td>	 *       <td> NA</td>	 *       <td>A unique file ID calculated by hashing the	 * file's data	 *  hash</td>	 *     </tr>	 *     <tr>	 *       <td>Part 1 Start	 * offset</td>	 *       <td>4</td>	 *       <td>NA</td>	 *       <td>Start offset of the part 1 in the file</td>	 *     </tr>	 *     <tr>	 *       <td>Part 2 Start offset</td>	 *       <td>4</td>	 *       <td>NA</td>	 *       <td>&nbsp;</td>	 *     </tr>	 *     <tr>	 *       <td>Part 3 Start offset</td>	 *       <td>4</td>	 *       <td>NA</td>	 *       <td>&nbsp;</td>	 *     </tr>	 *     <tr>	 *       <td>Part 1 End offset	 * </td>	 *       <td>4</td>	 *       <td>NA</td>	 *       <td>End offset of the part 1 in the file</td>	 *     </tr>	 *     <tr>	 *       <td>Part 2 End offset</td>	 *       <td>4</td>	 *       <td>NA</td>	 *       <td>&nbsp;</td>	 *     </tr>	 *     <tr>	 *       <td>Part 3 End offset</td>	 *       <td>4</td>	 *       <td>NA</td>	 *       <td>&nbsp;</td>	 *     </tr>	 *   </tbody>	 * </table>	 */	public static Packet getPeerRequestFileParts(FileHash fileHash, long... partsData){		int partCount=partsData.length;		if (partCount % 2 == 0) {		Packet packet = new StandardPacket( 16 + ( 8 * 3 ) );		packet.setCommand(OP_REQUESTPARTS);		packet.insertData(fileHash.getHash());		ByteBuffer num = ByteBuffer.allocate(4);		num.order(ByteOrder.LITTLE_ENDIAN);		for ( int i = 0 ; i < partCount / 2 ; i++) {			num.clear();			num.rewind();			num.putInt(Convert.longToInt(partsData[i]) );			packet.insertData( num.array() );		}		for ( int i = partCount / 2 ; i < partCount ; i++) {			num.clear();			num.rewind();			num.putInt( Convert.longToInt(partsData[i]) );			packet.insertData( num.array() );		}		return packet;		} else {			return null;		}	}		/**	 * Request hashes of parts.	 * @param fileHash file hash	 * @return request file hash packet	 * <table cellspacing="0" border="1" cellpadding="0">

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -