亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? dhcpoption.java

?? DHCP 的JAVA實現
?? JAVA
?? 第 1 頁 / 共 4 頁
字號:
	 * DHO_STDA_SERVER(76)
	 * DHO_NDS_SERVERS(85)
     * </pre>
     * 
     * @param code the option code.
     * @param val the value array
     * @throws IllegalArgumentException the option code is not in the list above.
     */
    public static DHCPOption newOptionAsInetAddresses(byte code, InetAddress[] val) {
    	if (!isOptionAsInetAddrs(code)) {
            throw new IllegalArgumentException("DHCP option type ("+code+") is not InetAddresses");
        }
        return new DHCPOption(code, inetAddresses2Bytes(val));
    }

    /**
     * Creates a DHCP Option as String format.
     * 
     * <p>This method is only allowed for the following option codes:
     * <pre>
	 * DHO_HOST_NAME(12)
	 * DHO_MERIT_DUMP(14)
	 * DHO_DOMAIN_NAME(15)
	 * DHO_ROOT_PATH(17)
	 * DHO_EXTENSIONS_PATH(18)
	 * DHO_NETBIOS_SCOPE(47)
	 * DHO_DHCP_MESSAGE(56)
	 * DHO_VENDOR_CLASS_IDENTIFIER(60)
	 * DHO_NWIP_DOMAIN_NAME(62)
	 * DHO_NIS_DOMAIN(64)
	 * DHO_NIS_SERVER(65)
	 * DHO_TFTP_SERVER(66)
	 * DHO_BOOTFILE(67)
	 * DHO_NDS_TREE_NAME(86)
	 * DHO_USER_AUTHENTICATION_PROTOCOL(98)
     * </pre>
     * 
     * @param code the option code.
     * @param val the value
     * @throws IllegalArgumentException the option code is not in the list above.
     */
    public static DHCPOption newOptionAsString(byte code, String val) {
    	if (!isOptionAsString(code)) {
            throw new IllegalArgumentException("DHCP option type ("+code+") is not string");
        }
    	return new DHCPOption(code, DHCPPacket.stringToBytes(val));
    }

	/**
	 * Get the option value based on the context, i.e. the client's request.
	 * 
	 * <p>This should be the only method used with this class to get relevant values.
	 * 
	 * @param request the client's DHCP requets
	 * @return the value of the specific option in the client request
	 * @throws NullPointerException if <tt>request</tt> is <tt>null</tt>.
	 */
	public DHCPOption applyOption(DHCPPacket request) {
		if (request == null) {
			throw new NullPointerException("request is null");
		}
		if (this.mirror) {
			DHCPOption res = request.getOption(this.getCode());
			return (res != null ? res : this);	// return res or this
		} else {
			return this;
		}
	}
	
    /**
     * Appends to this string builder a detailed string representation of the DHCP datagram.
     *
     * <p>This multi-line string details: the static, options and padding parts
     * of the object. This is useful for debugging, but not efficient.
     *
     * @param buffer the string builder the string representation of this object should be appended.
     */
    public void append(StringBuilder buffer) {
        // check for readable option name
        if (_DHO_NAMES.containsKey(this.code)) {
        	buffer.append(_DHO_NAMES.get(this.code));
        }
        buffer.append('(')
              .append(unsignedByte(this.code))
              .append(")=");
        
        if (this.mirror) {
        	buffer.append("<mirror>");
        }

        // check for value printing
        if (this.value == null) {
        	buffer.append("<null>");
        } else if (this.code == DHO_DHCP_MESSAGE_TYPE) {
        	Byte cmd = this.getValueAsByte();
        	if (_DHCP_CODES.containsKey(cmd)) {
        		buffer.append(_DHCP_CODES.get(cmd));
        	} else {
        		buffer.append(cmd);
        	}
        } else if (this.code == DHO_USER_CLASS) {
        	buffer.append(userClassToString(this.value));
        } else if (this.code == DHO_DHCP_AGENT_OPTIONS) {
        	buffer.append(agentOptionsToString(this.value));
        } else if (_DHO_FORMATS.containsKey(this.code)) {
        	// formatted output
        	try {	// catch malformed values
        		switch (_DHO_FORMATS.get(this.code)) {
                    case INET:
                        DHCPPacket.appendHostAddress(buffer, this.getValueAsInetAddr());
                        break;
                    case INETS:
                        for (InetAddress addr : this.getValueAsInetAddrs()) {
                            DHCPPacket.appendHostAddress(buffer, addr);
                            buffer.append(' ');
                        }
                        break;
                    case INT:
                        buffer.append(this.getValueAsInt());
                        break;
                    case SHORT:
                        buffer.append(this.getValueAsShort());
                        break;
                    case SHORTS:
                        for (short aShort : this.getValueAsShorts()) {
                            buffer.append(aShort)
                                  .append(' ');
                        }
                        break;
                    case BYTE:
                        buffer.append(this.getValueAsByte());
                        break;
                    case STRING:
                        buffer.append('"')
                              .append(this.getValueAsString())
                              .append('"');
                        break;
                    case BYTES:
                        if (this.value != null) {
                            for (byte aValue : this.value) {
                                buffer.append(unsignedByte(aValue))
                                      .append(' ');
                            }
                        }
                        break;
        		default:
        			buffer.append("0x");
                    DHCPPacket.appendHex(buffer, this.value);
            		break;
        		}
        	} catch (IllegalArgumentException e) {
        		// fallback to bytes
                buffer.append("0x");
                DHCPPacket.appendHex(buffer, this.value);
        	}
        } else {
        	// unformatted raw output
        	buffer.append("0x");
            DHCPPacket.appendHex(buffer, this.value);
        }
    }

    /**
     * Returns a detailed string representation of the DHCP datagram.
     * 
     * <p>This multi-line string details: the static, options and padding parts
     * of the object. This is useful for debugging, but not efficient.
     * 
     * @return a string representation of the object.
     */
    @Override
    public String toString() {
        StringBuilder s = new StringBuilder();

        this.append(s);
        return s.toString();
    }

    /**
     * Convert unsigned byte to int
     */
    private static int unsignedByte(byte b) {
        return (b & 0xFF);
    }
    
    /**************************************************************************
     * 
     * Type converters.
     * 
     **************************************************************************/

    public static byte[] byte2Bytes(byte val) {
        byte[] raw = { val };
        return raw;
    }
    public static byte[] short2Bytes(short val) {
        byte[] raw = { (byte) ((val & 0xFF00) >>> 8), (byte) (val & 0XFF) };
        return raw;
    }
    public static byte[] int2Bytes(int val) {
        byte[] raw = {  (byte) ((val & 0xFF000000) >>> 24),
                		(byte) ((val & 0X00FF0000) >>> 16),
                		(byte) ((val & 0x0000FF00) >>>  8),
                		(byte) ((val & 0x000000FF)       ) };
        return raw;
    }
    public static byte[] inetAddress2Bytes(InetAddress val) {
        if (val == null){
        	return null;
        }
        if (!(val instanceof Inet4Address)) {
            throw new IllegalArgumentException("Adress must be of subclass Inet4Address");
        }
        return val.getAddress();
    }
    public static byte[] inetAddresses2Bytes(InetAddress[] val) {
        if (val == null) {
            return null;
        }
        
        byte[] buf = new byte[val.length * 4];
        for (int i=0; i<val.length; i++) {
            InetAddress addr = val[i];
            if (!(addr instanceof Inet4Address)) {
                throw new IllegalArgumentException("Adress must be of subclass Inet4Address");
            }
            System.arraycopy(addr.getAddress(), 0, buf, i*4, 4);
        }
        return buf;
    }

    /**
     * Convert DHO_USER_CLASS (77) option to a List.
     * 
     * @param buf option value of type User Class.
     * @return List of String values.
     */
    public static List<String> userClassToList(byte[] buf) {
        if (buf == null) {
            return null;
        }
        
        LinkedList<String> list = new LinkedList<String>();
        int i=0;
        while (i<buf.length) {
            int size = unsignedByte(buf[i++]);
            int instock = buf.length - i;
            if (size > instock) {
                size = instock;
            }
            list.add(DHCPPacket.bytesToString(buf, i, size));
            i += size;
        }
        return list;
    }

    /**
     * Converts DHO_USER_CLASS (77) option to a printable string
     * 
     * @param buf option value of type User Class.
     * @return printable string.
     */
    public static String userClassToString(byte[] buf) {
        if (buf == null) {
            return null;
        }
        
        List list = userClassToList(buf);
        Iterator it = list.iterator();
        StringBuffer s = new StringBuffer();
        
        while (it.hasNext()) {
            s.append('"').append((String) it.next()).append('"');
            if (it.hasNext()) {
                s.append(',');
            }
        }
        return s.toString();
    }
    /**
     * Converts this list of strings to a DHO_USER_CLASS (77) option.
     *
     * @param list the list of strings
     * @return byte[] buffer to use with <tt>setOptionRaw</tt>, <tt>null</tt> if list is null
     * @throws IllegalArgumentException if List contains anything else than String
     */
    public static byte[] stringListToUserClass(List<String> list) {
        if (list == null) { return null; }

        ByteArrayOutputStream buf = new ByteArrayOutputStream(32);
        DataOutputStream      out = new DataOutputStream(buf);

        try {
            for (String s : list) {
                byte[] bytes = DHCPPacket.stringToBytes(s);
                int    size  = bytes.length;

                if (size > 255) { size = 255; }
                out.writeByte(size);
                out.write(bytes, 0, size);
            }
            return buf.toByteArray();
        } catch (IOException e) {
            logger.log(Level.SEVERE, "Unexpected IOException", e);
            return buf.toByteArray();
        }
    }

    /**
     * Converts DHO_DHCP_AGENT_OPTIONS (82) option type to a printable string
     * 
     * @param buf option value of type Agent Option.
     * @return printable string.
     */
    public static String agentOptionsToString(byte[] buf) {
    	if (buf == null) {
    		return null;
    	}
    	
        Map<Byte, String> map = agentOptionsToMap(buf);
        StringBuffer s = new StringBuffer();
        for (Entry<Byte, String> entry : map.entrySet()) {
            s.append('{').append(unsignedByte(entry.getKey())).append("}\"");
            s.append(entry.getValue()).append('\"');
            s.append(',');
        }
        if (s.length() > 0) {
        	s.setLength(s.length() - 1);
        }

        return s.toString();
    }
    /**
     * Converts Map<Byte,String> to DHO_DHCP_AGENT_OPTIONS (82) option.
     * 
     * <p>LinkedHashMap are preferred as they preserve insertion order. Regular
     * HashMap order is randon.
     * 
     * @param map Map<Byte,String> couples
     * @return byte[] buffer to use with <tt>setOptionRaw</tt>
     * @throws IllegalArgumentException if List contains anything else than String
     */
    public static byte[] agentOptionToRaw(Map<Byte, String> map) {
    	if (map == null) {
            return null;
        }
        ByteArrayOutputStream buf = new ByteArrayOutputStream(64);
        DataOutputStream out = new DataOutputStream(buf);
        try {
        	for (Entry<Byte, String> entry : map.entrySet()) {
	            byte[] bufTemp = DHCPPacket.stringToBytes(entry.getValue());
	            int size = bufTemp.length;
	            assert (size >= 0);
	            if (size > 255) {
	            	throw new IllegalArgumentException("Value size is greater then 255 bytes");
                }
	            out.writeByte(entry.getKey());
	            out.writeByte(size);
	            out.write(bufTemp, 0, size);
        	}
	        return buf.toByteArray();

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91高清视频在线| 91香蕉视频mp4| 天堂精品中文字幕在线| 夜夜精品视频一区二区| 综合婷婷亚洲小说| 亚洲日本青草视频在线怡红院| 中文字幕av不卡| 亚洲图片欧美激情| 亚洲一区二区三区在线看| 亚洲一区在线观看网站| 日本中文字幕不卡| 国内不卡的二区三区中文字幕| 蜜臀av性久久久久蜜臀aⅴ流畅| 亚洲综合激情网| 亚洲h动漫在线| 九色综合狠狠综合久久| 国产精品影视在线观看| 成人一区二区三区中文字幕| 91免费观看视频在线| 欧美亚州韩日在线看免费版国语版| 欧美视频一区二区三区| 欧美电影免费观看高清完整版在线| 精品久久久久久综合日本欧美| 国产亚洲欧美激情| 亚洲久本草在线中文字幕| 日本三级亚洲精品| 国产一区二区毛片| 91麻豆国产福利在线观看| 91精品欧美久久久久久动漫 | 国产一区日韩二区欧美三区| 国产不卡视频一区二区三区| 精品污污网站免费看| 久久久亚洲精品一区二区三区| 综合久久国产九一剧情麻豆| 日韩高清不卡一区二区三区| 成人久久18免费网站麻豆| 欧美日韩一区二区三区在线看| xf在线a精品一区二区视频网站| 1024亚洲合集| 精品亚洲porn| 欧美午夜不卡视频| 中文字幕av一区二区三区免费看| 婷婷综合五月天| 成人91在线观看| 精品国产一区二区国模嫣然| 国产精品久久久久影视| 蜜臀av一区二区在线观看 | 亚洲福利一二三区| 国产精品911| 538prom精品视频线放| 成人免费在线观看入口| 韩国av一区二区| 色域天天综合网| 国产欧美精品在线观看| 久久成人久久鬼色| 欧美综合色免费| 最新日韩av在线| 高清不卡一区二区在线| 欧美一区二区三区性视频| 日韩美女久久久| 国产成人精品免费网站| www国产亚洲精品久久麻豆| 秋霞影院一区二区| 日韩视频一区二区三区在线播放| 午夜激情一区二区| www.亚洲色图| 亚洲国产激情av| 成人激情开心网| 中文字幕乱码亚洲精品一区 | 波多野结衣91| 久久久www成人免费无遮挡大片| 免费看欧美美女黄的网站| 在线播放视频一区| 日韩成人av影视| 777久久久精品| 日韩av午夜在线观看| 91精品久久久久久久久99蜜臂| 五月婷婷激情综合网| 欧美日韩极品在线观看一区| 三级影片在线观看欧美日韩一区二区| 色欧美日韩亚洲| 午夜久久久影院| 欧美一区二区观看视频| 久久国产免费看| 久久一二三国产| www.欧美日韩| 依依成人综合视频| 欧美三级一区二区| 久久国产尿小便嘘嘘尿| 国产亚洲精品超碰| 色欲综合视频天天天| 亚洲图片欧美色图| 欧美嫩在线观看| 激情综合色播五月| 欧美国产激情一区二区三区蜜月| 成人性生交大片免费看中文| 亚洲免费高清视频在线| 欧美久久久久久久久中文字幕| 免费成人av在线播放| 亚洲国产精品精华液ab| 色狠狠桃花综合| 看电影不卡的网站| 国产精品美女一区二区| 欧美日韩在线播放| 国产在线看一区| 中文字幕在线不卡一区| 欧美精品日韩一区| 高清国产一区二区| 亚洲无人区一区| 国产日韩高清在线| 欧美日韩精品欧美日韩精品| 国产精品一线二线三线精华| 亚洲另类春色校园小说| 精品电影一区二区三区 | 亚洲国产欧美一区二区三区丁香婷| 欧美一区二区三区免费大片 | 久久精品久久99精品久久| 中文字幕免费一区| 欧美久久久久免费| 91在线精品一区二区三区| 麻豆精品一区二区av白丝在线| 久久久欧美精品sm网站| 欧美日韩亚州综合| 国产精品99久| 久久99精品久久只有精品| 亚洲激情在线播放| 欧美国产日韩一二三区| 日韩一级在线观看| 色综合久久中文综合久久牛| 精品午夜一区二区三区在线观看| 一区二区三区中文免费| 国产日韩亚洲欧美综合| 日韩精品一区二区三区蜜臀| 欧美视频在线一区二区三区 | 91传媒视频在线播放| 盗摄精品av一区二区三区| 精品午夜久久福利影院| 亚洲综合视频在线| 日韩码欧中文字| 中文一区在线播放| 欧美激情一区二区三区全黄| 亚洲精品在线观| 精品国产免费久久| 日韩精品一区国产麻豆| 欧美性色黄大片手机版| 91丝袜美女网| 97se狠狠狠综合亚洲狠狠| 国产毛片一区二区| 韩国女主播一区| 经典三级在线一区| 免费在线观看视频一区| 亚洲一区二区三区中文字幕| 国产精品的网站| 日本一区二区不卡视频| 中文字幕制服丝袜一区二区三区| 国产欧美视频一区二区| 国产清纯白嫩初高生在线观看91| 久久久精品黄色| 亚洲国产精品传媒在线观看| 国产精品欧美精品| 亚洲三级电影网站| 亚洲电影一级片| 热久久免费视频| 久久精品国产在热久久| 精品一区二区三区免费毛片爱| 国产精品一区在线观看你懂的| 成人午夜精品一区二区三区| gogogo免费视频观看亚洲一| 色噜噜狠狠色综合欧洲selulu| 欧美日韩视频在线一区二区| 日韩免费在线观看| 精品成a人在线观看| 日本一区二区免费在线观看视频| 亚洲国产精品国自产拍av| 一区二区三区在线看| 日韩中文欧美在线| 国产成人鲁色资源国产91色综| 成人国产精品免费网站| 欧美日韩精品电影| 久久久国产综合精品女国产盗摄| 国产精品久久久久影院| 日韩av高清在线观看| 国产91在线|亚洲| 欧美日韩一区久久| 欧美极品美女视频| 五月天激情综合| 国产成人99久久亚洲综合精品| 色婷婷精品大在线视频| 欧美电视剧在线观看完整版| 中文字幕一区不卡| 久久国产日韩欧美精品| 97精品超碰一区二区三区| 欧美成人福利视频| 亚洲人成精品久久久久| 激情综合色综合久久综合| 欧美视频自拍偷拍| 国产精品青草久久| 激情五月婷婷综合| 在线电影国产精品| 成人欧美一区二区三区1314|