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

📄 errorcode.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 de.javawi.jstun.util.Utility;import de.javawi.jstun.util.UtilityException;public class ErrorCode 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    * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+    * |                   0                     |Class|     Number    |    * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+    * |      Reason Phrase (variable)                                ..    * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+    */		int responseCode;	String reason;		public ErrorCode() {		super(MessageAttribute.MessageAttributeType.ErrorCode);	}		public void setResponseCode(int responseCode) throws MessageAttributeException {		switch (responseCode) {		case 400: reason = "Bad Request"; break;		case 401: reason = "Unauthorized"; break;		case 420: reason = "Unkown Attribute"; break;		case 430: reason = "Stale Credentials"; break;		case 431: reason = "Integrity Check Failure"; break;		case 432: reason = "Missing Username"; break;		case 433: reason = "Use TLS"; break;		case 500: reason = "Server Error"; break;		case 600: reason = "Global Failure"; break;		default: throw new MessageAttributeException("Response Code is not valid");		}		this.responseCode = responseCode;	}		public int getResponseCode() {		return responseCode;	}		public String getReason() {		return reason;	}	public byte[] getBytes() throws UtilityException {		int length = reason.length();		// length adjustment		if ((length % 4) != 0) {			length += 4 - (length % 4);		}		// message attribute header		length += 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);				// error code header		int classHeader = (int) Math.floor(((double)responseCode)/100);		result[6] = Utility.IntegerToOneByte(classHeader);		result[7] = Utility.IntegerToOneByte(responseCode%100);		byte[] reasonArray = reason.getBytes();		System.arraycopy(reasonArray, 0, result, 8, reasonArray.length);				return result;	}		public static ErrorCode parse(byte[] data) throws MessageAttributeParsingException {		try {			if (data.length < 4) {				throw new MessageAttributeParsingException("Data array too short");			}			byte classHeaderByte = data[3];			int classHeader = Utility.OneByteToInteger(classHeaderByte);			if ((classHeader < 1) || (classHeader > 6)) throw new MessageAttributeParsingException("Class parsing error");			byte numberByte = data[4];			int number = Utility.OneByteToInteger(numberByte);			if ((number < 0) || (number > 99)) throw new MessageAttributeParsingException("Number parsing error");			int responseCode = (classHeader * 100) + number;			ErrorCode result = new ErrorCode();			result.setResponseCode(responseCode);			return result;		} catch (UtilityException ue) {			throw new MessageAttributeParsingException("Parsing error");		} catch (MessageAttributeException mae) {			throw new MessageAttributeParsingException("Parsing error");		}			}}

⌨️ 快捷键说明

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