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

📄 unknownattribute.java

📁 解决了nat穿越的问题
💻 JAVA
字号:
/* * This file is part of JSTUN.  *  * Copyright (c) 2005 Thomas King <king@t-king.de> - All rights * reserved. *  * This software is licensed under either the GNU Public License (GPL), * or the Apache 2.0 license. Copies of both license agreements are * included in this distribution. */package de.javawi.jstun.attribute;import java.util.*;import de.javawi.jstun.util.Utility;import de.javawi.jstun.util.UtilityException;public class UnknownAttribute extends MessageAttribute {	/* 	 *  0                   1                   2                   3	 *  0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1	 * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+	 * |      Attribute 1 Type           |     Attribute 2 Type        |	 * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+	 * |      Attribute 3 Type           |     Attribute 4 Type    ...	 * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+	 */		Vector<MessageAttributeType> unkown = new Vector<MessageAttributeType>();		public UnknownAttribute() {		super(MessageAttribute.MessageAttributeType.UnknownAttribute);	}		public void addAttribute(MessageAttributeType attribute) {		unkown.add(attribute);	}		public byte[] getBytes() throws UtilityException {		int length = 0;		if (unkown.size()%2 == 1) {			length = 2 * (unkown.size() + 1) + 4;		} else {			length = 2 * unkown.size() + 4;		}		byte[] result = new byte[length];		// message attribute header		// type		System.arraycopy(Utility.IntegerToTwoBytes(typeToInteger(type)), 0, result, 0, 2);		// length		System.arraycopy(Utility.IntegerToTwoBytes(length - 4), 0, result, 2, 2);				// unkown attribute header		Iterator<MessageAttributeType> it = unkown.iterator();		while(it.hasNext()) {			MessageAttributeType attri = it.next();			System.arraycopy(Utility.IntegerToTwoBytes(typeToInteger(attri)), 0, result, 4, 2);		}		// padding		if (unkown.size()%2 == 1) {			System.arraycopy(Utility.IntegerToTwoBytes(typeToInteger(unkown.elementAt(1))), 0, result, 4, 2);		}		return result;	}	public static UnknownAttribute parse(byte[] data) throws MessageAttributeParsingException {		try {			UnknownAttribute result = new UnknownAttribute();			if (data.length % 4 != 0) throw new MessageAttributeParsingException("Data array too short");			for (int i = 0; i < data.length; i += 4) {				byte[] temp = new byte[4];				System.arraycopy(data, i, temp, 0, 4);				long attri = Utility.FourBytesToLong(temp);				result.addAttribute(MessageAttribute.intToType(attri));			}			return result;		} catch (UtilityException ue) {			throw new MessageAttributeParsingException("Parsing error");		}	}}

⌨️ 快捷键说明

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