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

📄 toicqsrvpacket.java

📁 类似QQ的功能
💻 JAVA
字号:
/******************************************************************************* Jimm - Mobile Messaging - J2ME ICQ clone Copyright (C) 2003-05  Jimm Project 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., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA. ******************************************************************************** File: src/jimm/comm/ToIcqSrvPacket.java Version: ###VERSION###  Date: ###DATE### Author(s): Manuel Linsmayer, Andreas Rossbacher *******************************************************************************/package jimm.comm;import jimm.JimmException;public class ToIcqSrvPacket extends SnacPacket{	// CLI_REQOFFLINEMSGS packet subcommand	public static final int CLI_REQOFFLINEMSGS_SUBCMD = 0x003C;	// CLI_ACKOFFLINEMSGS packet subcommand	public static final int CLI_ACKOFFLINEMSGS_SUBCMD = 0x003E;	// CLI_META packet subcommand and types	public static final int CLI_META_SUBCMD = 0x07D0;	public static final int CLI_META_REQINFO_TYPE = 0x04D0;   // doesn't work	public static final int CLI_META_REQMOREINFO_TYPE = 0x04B2;	public static final int CLI_SET_FULLINFO = 0x0C3A;	/****************************************************************************/	/****************************************************************************/	/****************************************************************************/	// ICQ sequence number	protected int icqSequence;	// UIN	protected String uin;	// Subcommand	protected int subcommand;	// Constructor	public ToIcqSrvPacket(int sequence, long reference, int snacFlags, int icqSequence, String uin, int subcommand, byte[] extData, byte[] data)	{		super(sequence, SnacPacket.CLI_TOICQSRV_FAMILY, SnacPacket.CLI_TOICQSRV_COMMAND, snacFlags, reference, extData, data);		this.icqSequence = icqSequence;		this.uin = uin;		this.subcommand = subcommand;	}	// Constructor	public ToIcqSrvPacket(long reference, int icqSequence, String uin, int subcommand, byte[] extData, byte[] data)	{		this(-1,reference,0,icqSequence,uin,subcommand,extData,data);	}	// Constructor	public ToIcqSrvPacket(long reference, String uin, int subcommand, byte[] extData, byte[] data)	{		this(-1, reference, 0, -1, uin, subcommand, extData, data);	}	// Returns the ICQ sequence number	public int getIcqSequence()	{		return (this.icqSequence);	}	// Sets the ICQ sequence number	public void setIcqSequence(int icqSequence)	{		this.icqSequence = icqSequence;	}	// Returns the UIN	public String getUin()	{		return this.uin;	}	// Returns the subcommand	public int getSubcommand()	{		return (this.subcommand);	}	// Returns the package as byte array	public byte[] toByteArray()	{		// Allocate memory		byte buf[] = new byte[6 + 10 + 14 + this.data.length + (this.extData.length > 0 ? 2 + this.extData.length : 0)];		// Assemble FLAP header		Util.putByte(buf, 0, 0x2A);   // FLAP.ID		Util.putByte(buf, 1, 0x02);   // FLAP.CHANNEL		Util.putWord(buf, 2, this.sequence);   // FLAP.SEQUENCE		Util.putWord(buf, 4, 10 + 14 + this.data.length + (this.extData.length > 0 ? 2 + this.extData.length : 0));   // FLAP.LENGTH		// Assemble SNAC header		Util.putWord(buf, 6, this.family);   // SNAC.FAMILY		Util.putWord(buf, 8, this.command);   // SNAC.COMMAND		Util.putWord(buf, 10, (this.extData.length > 0 ? 0x8000 : 0x0000));   // SNAC.FLAGS		Util.putDWord(buf, 12, this.reference);   // SNAC.REFERENCE;		// Assemlbe SNAC.DATA		if (this.extData.length > 0)		{			Util.putWord(buf, 16, this.extData.length);			System.arraycopy(this.extData, 0, buf, 18, this.extData.length);			Util.putWord(buf, 18 + this.extData.length, 0x0001);			Util.putWord(buf, 20 + this.extData.length, 10 + this.data.length);			Util.putWord(buf, 22 + this.extData.length, 8 + this.data.length, false);   // CLI_TOICQSRV.LENGTH in Little Endian			Util.putDWord(buf, 24 + this.extData.length, Long.parseLong(this.uin), false);   // CLI_TOICQSRV.UIN in Little Endian			Util.putWord(buf, 28 + this.extData.length, this.subcommand, false);   // CLI_TOICQSRV.SUBCOMMAND in Little Endian			Util.putWord(buf, 30 + this.extData.length, this.icqSequence, false);   // CLI_TOICQSRV.SEQUENCE in Little Endian			System.arraycopy(this.data, 0, buf, 32 + this.extData.length, this.data.length);   // CLI_TOICQSRV.DATA in Little Endian		}		else		{			Util.putWord(buf, 16, 0x0001);			Util.putWord(buf, 18, 10 + this.data.length);			Util.putWord(buf, 20, 8 + this.data.length, false);   // CLI_TOICQSRV.LENGTH in Little Endian			Util.putDWord(buf, 22, Long.parseLong(this.uin), false);   // CLI_TOICQSRV.UIN in Little Endian			Util.putWord(buf, 26, this.subcommand, false);   // CLI_TOICQSRV.SUBCOMMAND in Little Endian			Util.putWord(buf, 28, this.icqSequence, false);   // CLI_TOICQSRV.SEQUENCE in Little Endian			System.arraycopy(this.data, 0, buf, 30, this.data.length);   // CLI_TOICQSRV.DATA in Little Endian		}		// Return		return (buf);	}	// Parses given byte array and returns a ToIcqSrvPacket object	public static Packet parse(byte[] buf, int off, int len) throws JimmException	{		// Get FLAP sequence number		int flapSequence = Util.getWord(buf, off + 2);		// Get length of FLAP data		int flapLength = Util.getWord(buf, off + 4);		// Check length (min. 24 bytes)		if (flapLength < 24)		{			throw (new JimmException(137, 3));		}		// Get SNAC flags		int snacFlags = Util.getWord(buf, off + 10);		// Get SNAC reference		long snacReference = Util.getDWord(buf, off + 12);		// Get data and extra data (if available)		byte[] extData;		byte[] data;		String uin;		int subcommand;		int icqSequence;		if (snacFlags == 0x8000)		{			// Check length (min. 26 bytes)			if (flapLength < 10 + 24 + 2)			{				throw (new JimmException(137, 4));			}			// Get length of extra data			int extDataLength = Util.getWord(buf, off + 16);			// Check length (min. 26+extDataLength bytes)			if (flapLength < 10 + 24 + 2 + extDataLength)			{				throw (new JimmException(137, 5));			}			// Get extra data			extData = new byte[extDataLength];			System.arraycopy(buf, off + 6 + 10 + 2, extData, 0, extDataLength);			// Get uin, subcommand and icq sequence number			uin = String.valueOf(Util.getDWord(buf, off + 6 + 10 + 6 + 2 + extDataLength, false));			subcommand = Util.getWord(buf, off + 6 + 10 + 10 + 2 + extDataLength, false);			icqSequence = Util.getWord(buf, off + 6 + 10 + 12 + 2 + extDataLength, false);			// Get data			data = new byte[flapLength - 10 - 14 - 2 - extDataLength];			System.arraycopy(buf, off + 6 + 10 + 14 + 2 + extDataLength, data, 0, flapLength - 10 - 14 - 2 - extDataLength);		}		else		{			// Get uin, subcommand and icq sequence number			uin = String.valueOf(Util.getDWord(buf, off + 6 + 10 + 6, false));			subcommand = Util.getWord(buf, off + 6 + 10 + 10, false);			icqSequence = Util.getWord(buf, off + 6 + 10 + 12, false);			// Get extra data and data			extData = new byte[0];			data = new byte[flapLength - 10 - 14];			System.arraycopy(buf, off + 6 + 10 + 14, data, 0, flapLength - 10 - 14);		}		// Instantiate ToIcqSrvPacket		return (new ToIcqSrvPacket(flapSequence, snacReference, snacFlags, icqSequence, uin, subcommand, extData, data));	}	// Parses given byte array and returns a ToIcqSrvPacket object	public static Packet parse(byte[] buf) throws JimmException	{		return (ToIcqSrvPacket.parse(buf, 0, buf.length));	}}

⌨️ 快捷键说明

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