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

📄 icq.java.svn-base

📁 类似QQ的功能
💻 SVN-BASE
📖 第 1 页 / 共 5 页
字号:
				{					if ((dwFP1 != 0) && (dwFP2 != 0) && (dwFP3 != 0)) client = CLI_ICQ2002A2003A;					break;				}				if (((caps & (CAPF_STR20012 + CAPF_AIM_SERVERRELAY)) != 0) && ((caps & CAPF_IS2001) != 0))				{					if ((dwFP1 == 0) && (dwFP2 == 0) && (dwFP3 == 0) && (wVersion == 0)) client = CLI_ICQPPC;					else client = CLI_ICQ2001B; //FP1: 1068985885; FP2:0; FP3:1068986138					break;				}				if (wVersion == 7)				{					if (((caps & CAPF_AIM_SERVERRELAY) != 0) && ((caps & CAPF_DIRECT) != 0))					{						if ((dwFP1 == 0) && (dwFP2 == 0) && (dwFP3 == 0)) client = CLI_ANDRQ;						else client = CLI_ICQ2000;						break;					}					else if ((caps & CAPF_RICHTEXT) != 0)					{						client = CLI_GNOMEICQ;						break;					}				}				if (dwFP1 > 0x35000000 && dwFP1 < 0x40000000)				{					switch (wVersion)					{					case 6:						client = CLI_ICQ99;						break;					case 7:						client = CLI_ICQ2000;						break;					case 8:						client = CLI_ICQ2001B;						break;					case 9:						client = CLI_ICQLITE;						break;					case 10:						client = CLI_ICQ2003B;						break;					}					break;				}			}			if (client != CLI_NONE)			{				item.setIntValue(ContactItem.CONTACTITEM_CLIENT, client);				item.setStringValue(ContactItem.CONTACTITEM_CLIVERSION, szVersion);			}		}		item.setIntValue(ContactItem.CONTACTITEM_CAPABILITIES, (int)(caps&0xFFFFFFFF));		//#sijapp cond.if modules_DEBUGLOG is "true"#//		System.out.println("uin - " + item.getStringValue(ContactItem.CONTACTITEM_UIN) + " found capabilities count:" + capabilities.length/16);//		System.out.println("dwFP1 = " + "0x"+Integer.toHexString(dwFP1) + ", " + "dwFP2 = " + "0x"+Integer.toHexString(dwFP2) + ", " + "dwFP3 = " + "0x"+Integer.toHexString(dwFP3));//		System.out.println("wVersion = " + Integer.toHexString(wVersion));//		System.out.println("client = " + client + ", " + "szVersion = " + szVersion);//		Util.PrintCapabilities("", capabilities);		//#sijapp cond.end#	}	public static String getClientString(int cli)	{		for (int i = clientIndexes.length-1; i >= 0; i--)			if (clientIndexes[i] == cli) return (clientNames[i]);		return null;	}		public static int getClientImageID(int cli)	{		for (int i = clientIndexes.length-1; i >= 0; i--) 			if (clientIndexes[i] == cli) return clientImageIndexes[i]; 		return -1; 	}	private static String detectClientVersion(byte[] buf1, int cli,			int tlvNum)	{		byte[] buf = new byte[16];		System.arraycopy(buf1, tlvNum * 16, buf, 0, 16);		String ver = "";				switch (cli)		{		case CLI_MIRANDA:			if ((buf[0xC] == 0) && (buf[0xD] == 0) && (buf[0xE] == 0)					&& (buf[0xF] == 1))			{				ver = "0.1.2.0";			} else if ((buf[0xC] == 0) && (buf[0xD] <= 3) && (buf[0xE] <= 3)					&& (buf[0xF] <= 1))			{				ver = "0." + buf[0xD] + "." + buf[0xE] + "." + buf[0xF];			} else			{				ver = (buf[0x8] & 0x7F) + "." + buf[0x9] + "." + buf[0xA] + "."						+ buf[0xB];			}			break;					case CLI_LICQ:			ver = buf[0xC] + "." + (buf[0xD] % 100) + "." + buf[0xE];			break;					case CLI_KOPETE:			ver = buf[0xC] + "." + buf[0xD] + "." + buf[0xE] + "." + buf[0xF];			break;					case CLI_ANDRQ:			ver = (char) buf[0xC] + "." + (char) buf[0xB];// + "." +buf[0xA] + "." +buf[9];			break;					case CLI_JIMM:			ver = Util.byteArrayToString(buf, 5, 11);			break;					case CLI_QIP:			ver = Util.byteArrayToString(buf, 11, 5);			break;					case CLI_MCHAT:			ver = Util.byteArrayToString(buf, 0, 16);			break;					case CLI_SMAPER:			ver = Util.byteArrayToString(buf, CAP_SMAPER.length, 16-CAP_SMAPER.length);			break;		case CLI_QUTIM:			if (buf[6] == 46) {			// old qutim id				int ver1 = buf[5] - 48;				int ver2 = buf[7] - 48;				ver = " v" + ver1 + "."+ver2;			} else {				// new qutim id				int ver1 = buf[6];				int ver2 = buf[7];				int ver3 = buf[8];				int svn = Util.getWord(buf, 9, true);				ver = " v" + ver1 + "." + ver2 + "." + ver3 + " svn" + svn;				switch (buf[5]) {					case 'l':						ver += " (Linux)";						break;					case 'w':						ver += " (Windows)";						break;					case 'm':						ver += " (MacOS)";						break;					case 'u':					default:						ver += " (Unknown OS)";						break;				}			}			break;		case CLI_JIMM_DICHAT:			ver = Util.byteArrayToString(buf, CAP_JIMM_DICHAT.length, 16-CAP_JIMM_DICHAT.length);			break;		}		return ver;	}		// Merge two received capabilities into one byte array	public static byte[] mergeCapabilities(byte[] capabilities_old,			byte[] capabilities_new)	{		if (capabilities_new == null)			return capabilities_old;		if (capabilities_old == null)			return capabilities_new;		// Extend new capabilities to match with old ones		byte[] extended_new = new byte[capabilities_new.length * 8];		for (int i = 0; i < capabilities_new.length; i += 2)		{			System.arraycopy(CAP_OLD_HEAD, 0, extended_new, (i * 8),					CAP_OLD_HEAD.length);			System.arraycopy(capabilities_new, i, extended_new,					((i * 8) + CAP_OLD_HEAD.length), 2);			System.arraycopy(CAP_OLD_TAIL, 0, extended_new, ((i * 8)					+ CAP_OLD_HEAD.length + 2), CAP_OLD_TAIL.length);		}		// Check for coexisting capabilities and merge		boolean found = false;		byte[] tmp_old;		byte[] tmp_new;		byte[] merged;		for (int i = 0; i < capabilities_old.length; i += 16)		{			tmp_old = new byte[16];			System.arraycopy(capabilities_old, i, tmp_old, 0, 16);			for (int j = 0; j < extended_new.length; j += 16)			{				//System.out.println(j + " " + i + " " + extended_new.length);				tmp_new = new byte[16];				System.arraycopy(extended_new, j, tmp_new, 0, 16);				if (tmp_old == tmp_new)				{					found = true;					break;				}			}			if (!found)			{				//System.out.println("Merge capability");				merged = new byte[extended_new.length + 16];				System.arraycopy(extended_new, 0, merged, 0,						extended_new.length);				System.arraycopy(tmp_old, 0, merged, extended_new.length,						tmp_old.length);				extended_new = merged;				found = false;			}		}		return extended_new;	}		static public void sendCLI_ADDSTART() throws JimmException	{		sendPacket(new SnacPacket(SnacPacket.CLI_ADDSTART_FAMILY,				SnacPacket.CLI_ADDSTART_COMMAND, SnacPacket.CLI_ADDSTART_COMMAND,				new byte[0], new byte[0]));	}	static public void sendCLI_ADDEND() throws JimmException	{		sendPacket(new SnacPacket(SnacPacket.CLI_ADDEND_FAMILY,				SnacPacket.CLI_ADDEND_COMMAND, SnacPacket.CLI_ADDEND_COMMAND, new byte[0],				new byte[0]));	}		static public final int PROCESS_BUDDY_ADD = 10000;	static public final int PROCESS_BUDDY_DELETE = 10001;		static public void sendProcessBuddy(int mode, String name, int id, int groupId, int buddyType) throws JimmException	{		ByteArrayOutputStream buffer = new ByteArrayOutputStream();				/* Name */		Util.writeLenAndString(buffer, name, true);		/* Group ID */		Util.writeWord(buffer, groupId, true);		/* ID */		Util.writeWord(buffer, id, true);		/* Type */		Util.writeWord(buffer, buddyType, true);				/* No additional data */		Util.writeWord(buffer, 0, true);				int command = -1;				switch (mode)		{		case PROCESS_BUDDY_ADD:			command = SnacPacket.CLI_ROSTERADD_COMMAND;			break;					case PROCESS_BUDDY_DELETE:			command = SnacPacket.CLI_ROSTERDELETE_COMMAND;			break;				default:			throw new JimmException(0, 0);		}				SnacPacket packet = new SnacPacket(0x0013, command, Util.getCounter(), new byte[0], buffer.toByteArray());				sendPacket(packet);	}	public static boolean runActionAndProcessError(Action act) 	{		try		{			Icq.requestAction(act);		} catch (JimmException e)		{			JimmException.handleException(e);			return false;		}				SplashCanvas.addTimerTask("wait", act, false);				return true;	}		public static void removeLocalContact(String uin)	{		byte[] buf = new byte[1 + uin.length()];		Util.putByte(buf, 0, uin.length());		System.arraycopy(uin.getBytes(), 0, buf, 1, uin.length());		try		{			sendPacket(new SnacPacket(0x0003, 0x0005, 0, new byte[0], buf));		} catch (JimmException e)		{			JimmException.handleException(e);		}	}	// Adds a ContactItem to the server saved contact list	static public synchronized void addToContactList(			ContactItem cItem)	{		// Request contact item adding		UpdateContactListAction act = new UpdateContactListAction(cItem,				UpdateContactListAction.ACTION_ADD);		try		{			requestAction(act);		} catch (JimmException e)		{			JimmException.handleException(e);			if (e.isCritical())				return;		}		// Start timer		SplashCanvas.addTimerTask("wait", act, false);		// System.out.println("start addContact");	}	// Dels a ContactItem to the server saved contact list	static public synchronized boolean delFromContactList(			ContactItem cItem)	{		// Check whether contact item is temporary		if (cItem.getBooleanValue(ContactItem.CONTACTITEM_IS_TEMP) && 				!cItem.getBooleanValue(ContactItem.CONTACTITEM_IS_PHANTOM))		{			// Remove this temporary contact item			removeLocalContact(cItem					.getStringValue(ContactItem.CONTACTITEM_UIN));			ContactList.removeContactItem(cItem);			// Activate contact list			ContactList.activateList();		} 		else		{			// Request contact item removal			UpdateContactListAction act2 = new UpdateContactListAction(cItem,					UpdateContactListAction.ACTION_DEL);			try			{				Icq.requestAction(act2);			} catch (JimmException e)			{				JimmException.handleException(e);				if (e.isCritical())					return false;			}			// Start timer			SplashCanvas.addTimerTask("wait", act2, false);		}		return true;	}	//#sijapp cond.if target isnot "DEFAULT"#	public synchronized static void beginTyping(String uin, boolean isTyping)			throws JimmException	{		byte[] uinRaw = Util.stringToByteArray(uin);		int tempBuffLen = Icq.MTN_PACKET_BEGIN.length + 1 + uinRaw.length + 2;		int marker = 0;		byte[] tempBuff = new byte[tempBuffLen];		System.arraycopy(Icq.MTN_PACKET_BEGIN, 0, tempBuff, marker,				Icq.MTN_PACKET_BEGIN.length);		marker += Icq.MTN_PACKET_BEGIN.length;		Util.putByte(tempBuff, marker, uinRaw.length);		marker += 1;		System.arraycopy(uinRaw, 0, tempBuff, marker, uinRaw.length);		marker += uinRaw.length;		Util.putWord(tempBuff, marker, ((isTyping) ? (0x0002) : (0x0000)));		marker += 2;		// Send packet		SnacPacket snacPkt = new SnacPacket(0x0004, 0x

⌨️ 快捷键说明

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