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

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

?? dhcpresponsefactory.java

?? DHCP 的JAVA實現
?? JAVA
字號:
/*
 *	This file is part of dhcp4java, a DHCP API for the Java language.
 *	(c) 2006 Stephan Hadinger
 *
 *	This library is free software; you can redistribute it and/or
 *	modify it under the terms of the GNU Lesser General Public
 *	License as published by the Free Software Foundation; either
 *	version 2.1 of the License, or (at your option) any later version.
 *
 *	This library 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
 *	Lesser General Public License for more details.
 *
 *	You should have received a copy of the GNU Lesser General Public
 *	License along with this library; if not, write to the Free Software
 *	Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
 */
package org.dhcp4java;

import static org.dhcp4java.DHCPConstants.*;

import java.net.Inet4Address;
import java.net.InetAddress;
import java.net.InetSocketAddress;
import java.util.logging.Logger;

/**
 * This class provides some standard factories for DHCP responses.
 * 
 * <p>This simplifies DHCP Server development as basic behaviour is already usable
 * as-is.
 * 
 * @author Stephan Hadinger
 * @version 1.00
 *
 */
public final class DHCPResponseFactory {

    // Suppresses default constructor, ensuring non-instantiability.
	private DHCPResponseFactory() {
		throw new UnsupportedOperationException();
	}
    
	@SuppressWarnings("unused")
	private static final Logger logger = Logger.getLogger(DHCPResponseFactory.class.getName().toLowerCase());

	/**
	 * Create a populated DHCPOFFER response.
	 * 
	 * <p>Reponse is populated according to the DHCP request received (must be
	 * DHCPDISCOVER), the proposed client address and a set of pre-set options.
	 * 
	 * <p>Note: <tt>getDefaultSocketAddress</tt> is called internally to populate
	 * address and port number to which response should be sent.
	 * 
	 * @param request
	 * @param offeredAddress
	 * @param options
	 * @return the newly created OFFER Packet
	 */
	public static final DHCPPacket makeDHCPOffer(
			DHCPPacket request,
			InetAddress offeredAddress,
			int leaseTime,
			InetAddress serverIdentifier,
			String message,
			DHCPOption[] options) {
		// check request
		if (request == null) {
			throw new NullPointerException("request is null");
		}
		if (!request.isDhcp()) {
			throw new DHCPBadPacketException("request is BOOTP");
		}
		Byte requestMessageType = request.getDHCPMessageType();
		if (requestMessageType == null) {
			throw new DHCPBadPacketException("request has no message type");
		}
		if (requestMessageType != DHCPDISCOVER) {
			throw new DHCPBadPacketException("request is not DHCPDISCOVER");
		}
		// check offeredAddress
		if (offeredAddress == null) {
			throw new IllegalArgumentException("offeredAddress must not be null");
		}
		if (!(offeredAddress instanceof Inet4Address)) {
			throw new IllegalArgumentException("offeredAddress must be IPv4");
		}
		
		DHCPPacket resp = new DHCPPacket();
		
		resp.setOp(BOOTREPLY);
		resp.setHtype(request.getHtype());
		resp.setHlen(request.getHlen());
		// Hops is left to 0
		resp.setXid(request.getXid());
		// Secs is left to 0
		resp.setFlags(request.getFlags());
		// Ciaddr is left to 0.0.0.0
		resp.setYiaddr(offeredAddress);
		// Siaddr ?
		resp.setGiaddrRaw(request.getGiaddrRaw());
		resp.setChaddr(request.getChaddr());
		// sname left empty
		// file left empty
		
		// we set the DHCPOFFER type
		resp.setDHCPMessageType(DHCPOFFER);
		
		// set standard options
		resp.setOptionAsInt(DHO_DHCP_LEASE_TIME, leaseTime);
		resp.setOptionAsInetAddress(DHO_DHCP_SERVER_IDENTIFIER, serverIdentifier);
		resp.setOptionAsString(DHO_DHCP_MESSAGE, message);	// if null, it is removed
		
		if (options != null) {
			for (DHCPOption opt : options) {
				resp.setOption(opt.applyOption(request));
			}
		}
		
		// we set address/port according to rfc
		resp.setAddrPort(getDefaultSocketAddress(request, DHCPOFFER));
		
		return resp;
	}

	/**
	 * Create a populated DHCPACK response.
	 * 
	 * <p>Reponse is populated according to the DHCP request received (must be
	 * DHCPREQUEST), the proposed client address and a set of pre-set options.
	 * 
	 * <p>Note: <tt>getDefaultSocketAddress</tt> is called internally to populate
	 * address and port number to which response should be sent.
	 * 
	 * @param request
	 * @param offeredAddress
	 * @param options
	 * @return the newly created ACK Packet
	 */
	public static final DHCPPacket makeDHCPAck(
			DHCPPacket request,
			InetAddress offeredAddress,
			int leaseTime,
			InetAddress serverIdentifier,
			String message,
			DHCPOption[] options) {
		// check request
		if (request == null) {
			throw new NullPointerException("request is null");
		}
		if (!request.isDhcp()) {
			throw new DHCPBadPacketException("request is BOOTP");
		}
		Byte requestMessageType = request.getDHCPMessageType();
		if (requestMessageType == null) {
			throw new DHCPBadPacketException("request has no message type");
		}
		if ((requestMessageType != DHCPREQUEST) &&
			(requestMessageType != DHCPINFORM)) {
			throw new DHCPBadPacketException("request is not DHCPREQUEST/DHCPINFORM");
		}
		// check offered address
		if (offeredAddress == null) {
			throw new IllegalArgumentException("offeredAddress must not be null");
		}
		if (!(offeredAddress instanceof Inet4Address)) {
			throw new IllegalArgumentException("offeredAddress must be IPv4");
		}
		
		
		DHCPPacket resp = new DHCPPacket();
		
		resp.setOp(BOOTREPLY);
		resp.setHtype(request.getHtype());
		resp.setHlen(request.getHlen());
		// Hops is left to 0
		resp.setXid(request.getXid());
		// Secs is left to 0
		resp.setFlags(request.getFlags());
		resp.setCiaddrRaw(request.getCiaddrRaw());
		if (requestMessageType != DHCPINFORM) {
			resp.setYiaddr(offeredAddress);
		}
		// Siaddr ?
		resp.setGiaddrRaw(request.getGiaddrRaw());
		resp.setChaddr(request.getChaddr());
		// sname left empty
		// file left empty
		
		// we set the DHCPOFFER type
		resp.setDHCPMessageType(DHCPACK);
		
		// set standard options
		if (requestMessageType == DHCPREQUEST) {			// rfc 2131
			resp.setOptionAsInt(DHO_DHCP_LEASE_TIME, leaseTime);
		}
		resp.setOptionAsInetAddress(DHO_DHCP_SERVER_IDENTIFIER, serverIdentifier);
		resp.setOptionAsString(DHO_DHCP_MESSAGE, message);	// if null, it is removed
		
		if (options != null) {
			for (DHCPOption opt : options) {
				resp.setOption(opt.applyOption(request));
			}
		}
		
		// we set address/port according to rfc
		resp.setAddrPort(getDefaultSocketAddress(request, DHCPACK));
		
		return resp;
	}

	/**
	 * Create a populated DHCPNAK response.
	 * 
	 * <p>Reponse is populated according to the DHCP request received (must be
	 * DHCPREQUEST), the proposed client address and a set of pre-set options.
	 * 
	 * <p>Note: <tt>getDefaultSocketAddress</tt> is called internally to populate
	 * address and port number to which response should be sent.
	 * 
	 * @param request
	 * @param serverIdentifier
	 * @param message
	 * @return the newly created NAK Packet
	 */
	public static final DHCPPacket makeDHCPNak(
			DHCPPacket request,
			InetAddress serverIdentifier,
			String message) {
		// check request
		if (request == null) {
			throw new NullPointerException("request is null");
		}
		if (!request.isDhcp()) {
			throw new DHCPBadPacketException("request is BOOTP");
		}
		Byte requestMessageType = request.getDHCPMessageType();
		if (requestMessageType == null) {
			throw new DHCPBadPacketException("request has no message type");
		}
		if (requestMessageType != DHCPREQUEST) {
			throw new DHCPBadPacketException("request is not DHCPREQUEST");
		}
		
		DHCPPacket resp = new DHCPPacket();
		
		resp.setOp(BOOTREPLY);
		resp.setHtype(request.getHtype());
		resp.setHlen(request.getHlen());
		// Hops is left to 0
		resp.setXid(request.getXid());
		// Secs is left to 0
		resp.setFlags(request.getFlags());
		// ciaddr left to 0
		// yiaddr left to 0
		// Siaddr ?
		resp.setGiaddrRaw(request.getGiaddrRaw());
		resp.setChaddr(request.getChaddr());
		// sname left empty
		// file left empty
		
		// we set the DHCPOFFER type
		resp.setDHCPMessageType(DHCPNAK);

		// set standard options
		resp.setOptionAsInetAddress(DHO_DHCP_SERVER_IDENTIFIER, serverIdentifier);
		resp.setOptionAsString(DHO_DHCP_MESSAGE, message);	// if null, it is removed
		
		// we do not set other options for this type of message
		
		// we set address/port according to rfc
		resp.setAddrPort(getDefaultSocketAddress(request, DHCPNAK));
		
		return resp;
	}
    /**
     * Calculates the addres/port to which the response must be sent, according to
     * rfc 2131, section 4.1.
     * 
     * <p>This is a method ready to use for *standard* behaviour for any RFC
     * compliant DHCP Server.
     * 
     * <p>If <tt>giaddr</tt> is null, it is the client's addres/68, otherwise
     * giaddr/67.
     * 
     * <p>Standard behaviour is to set the response packet as follows:
     * <pre>
     * 		response.setAddrPort(getDefaultSocketAddress(request), response.getOp());
     * </pre>
     *  
     * @param request the client DHCP request
     * @param responseType the DHCP Message Type the servers wants to send (DHCPOFFER,
     * 							DHCPACK, DHCPNAK)
     * @return the ip/port to send back the response
     * @throws IllegalArgumentException if request is <tt>null</tt>.
     * @throws IllegalArgumentException if responseType is not valid.
     */
    public static InetSocketAddress getDefaultSocketAddress(DHCPPacket request, byte responseType) {
    	if (request == null) {
    		throw new IllegalArgumentException("request is null");
    	}
    	InetSocketAddress sockAdr;
    	InetAddress giaddr = request.getGiaddr();
    	InetAddress ciaddr = request.getCiaddr();
    	// check whether there is a giaddr
    	
    	switch (responseType) {
    	case DHCPOFFER:
    	case DHCPACK:
        	if (INADDR_ANY.equals(giaddr)) {
        		if (INADDR_ANY.equals(ciaddr)) {	// broadcast to LAN
            		sockAdr = new InetSocketAddress(INADDR_BROADCAST, 68);
        		} else {
        			sockAdr = new InetSocketAddress(ciaddr, 68);
        		}
        	} else {							// unicast to relay
        		sockAdr = new InetSocketAddress(giaddr, 67);
        	}
    		break;
    	case DHCPNAK:
        	if (INADDR_ANY.equals(giaddr)) {	// always broadcast
        		sockAdr = new InetSocketAddress(INADDR_BROADCAST, 68);
        	} else {							// unicast to relay
        		sockAdr = new InetSocketAddress(giaddr, 67);
        	}
    		break;
    	default:
    		throw new IllegalArgumentException("responseType not valid");
    	}
    	return sockAdr;
    }

	
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91精品国产综合久久蜜臀| 日韩视频国产视频| 8x8x8国产精品| 国产精品午夜春色av| 亚洲一区二区精品3399| 国产九色sp调教91| 欧美色综合久久| 国产日产精品1区| 免费xxxx性欧美18vr| 色婷婷久久久久swag精品 | 美国欧美日韩国产在线播放| www.亚洲色图.com| 欧美一区二区三区四区视频| 中文字幕久久午夜不卡| 日韩成人午夜电影| 色综合视频在线观看| 久久久久久久综合狠狠综合| 亚洲sss视频在线视频| 99国产精品一区| 中文子幕无线码一区tr| 精品一区二区三区免费| 91精品国产综合久久精品| 亚洲精品一二三| 在线看日本不卡| 国产精品久久久久久久久快鸭| 看片的网站亚洲| 日韩一级片网址| 日韩av网站在线观看| 欧美日韩国产精品自在自线| 亚洲欧美偷拍另类a∨色屁股| 国产成人午夜片在线观看高清观看| 日韩欧美国产三级电影视频| 日本欧美加勒比视频| 欧美精品日日鲁夜夜添| 午夜视频久久久久久| 欧美视频一区二| 视频一区中文字幕| 正在播放亚洲一区| 麻豆国产精品官网| 337p日本欧洲亚洲大胆精品| 久久66热re国产| 久久久久久久久伊人| 国产成人免费在线视频| 国产精品无人区| 99久久精品国产导航| 亚洲免费在线电影| 精品视频1区2区3区| 日日夜夜精品免费视频| 日韩网站在线看片你懂的| 久久精品二区亚洲w码| 久久亚洲精品国产精品紫薇| 高清shemale亚洲人妖| 日韩伦理免费电影| 精品视频1区2区3区| 日韩黄色免费电影| 久久久久久亚洲综合| eeuss鲁一区二区三区| 亚洲午夜三级在线| 日韩一区二区三区精品视频| 久久爱www久久做| 国产精品三级视频| 91.麻豆视频| 国产精品一二二区| 亚洲精品老司机| 91精品欧美福利在线观看| 国产精品正在播放| 亚洲色图另类专区| 日韩精品专区在线影院观看| 成人免费视频caoporn| 亚洲午夜日本在线观看| 久久久久久久久99精品| 一本大道久久a久久综合| 久久国产精品72免费观看| 国产精品午夜在线观看| 欧美日韩一卡二卡| 成人av网在线| 麻豆成人免费电影| 亚洲嫩草精品久久| 久久久久久久久久久久久久久99| 在线中文字幕不卡| 精品国产乱码久久久久久牛牛| 亚洲欧洲综合另类在线| 精品一区二区免费看| 亚洲视频 欧洲视频| 日韩一卡二卡三卡| 色成人在线视频| 国产美女一区二区三区| 亚洲高清视频的网址| 国产精品每日更新在线播放网址 | 国产精品三级av在线播放| 3atv在线一区二区三区| 99re在线精品| 国产一区欧美一区| 亚欧色一区w666天堂| 日韩理论片一区二区| 久久人人爽爽爽人久久久| 3d动漫精品啪啪| 欧美性感一类影片在线播放| 懂色av中文字幕一区二区三区 | 国产成人精品影视| 日本欧美一区二区| 亚洲成人激情自拍| 亚洲图片欧美一区| 一区二区三区欧美激情| 欧美国产欧美综合| 欧美极品少妇xxxxⅹ高跟鞋| 精品黑人一区二区三区久久| 在线电影欧美成精品| 欧美三级一区二区| 欧洲精品中文字幕| 在线欧美小视频| 色婷婷综合久久久久中文 | 日韩欧美成人激情| 911精品产国品一二三产区| 在线亚洲免费视频| 91成人国产精品| 欧美视频三区在线播放| 欧美视频一区二区三区四区 | 国产精品久久精品日日| 国产女人水真多18毛片18精品视频| 欧美性感一类影片在线播放| 欧美日韩性生活| 欧美精品一卡两卡| 精品日韩在线观看| 一区二区视频在线看| 中文字幕视频一区| 亚洲天堂av一区| 亚洲一区在线看| 国产精品每日更新在线播放网址| 国产精品亚洲成人| www.av精品| 欧美日韩精品一区二区三区| 中文字幕一区二区三区av| 久久久99精品久久| 亚洲三级在线播放| 免费高清在线一区| 青青青爽久久午夜综合久久午夜| 调教+趴+乳夹+国产+精品| 中文字幕一区二| 日韩一区二区在线看| 欧美人成免费网站| 欧洲另类一二三四区| 国产美女一区二区| 26uuu久久综合| 91精品午夜视频| 国产欧美精品一区二区色综合朱莉| 欧美日韩一区二区在线观看| 欧美日韩中文一区| 亚洲欧洲精品成人久久奇米网| 日韩精品午夜视频| 99精品久久免费看蜜臀剧情介绍| 欧美人与z0zoxxxx视频| 亚洲国产精品t66y| 久久久91精品国产一区二区精品| 一区二区高清视频在线观看| 国v精品久久久网| 欧美大片一区二区| 亚洲在线免费播放| 蜜臀a∨国产成人精品| 欧美精品少妇一区二区三区| 午夜激情综合网| 全部av―极品视觉盛宴亚洲| 91在线精品一区二区| 国产欧美综合在线| 成人在线一区二区三区| 国产婷婷色一区二区三区| 韩国v欧美v亚洲v日本v| 精品免费一区二区三区| 国产福利一区二区三区视频在线| 久久这里都是精品| 免费观看91视频大全| 久久久久青草大香线综合精品| 国产原创一区二区三区| 欧美亚洲图片小说| 自拍偷拍欧美激情| 欧美日韩国产一级二级| 免费在线成人网| 一区二区三区在线免费| 精品乱人伦小说| 91视频com| 久久狠狠亚洲综合| 国产喂奶挤奶一区二区三区| 99久久综合99久久综合网站| 一二三区精品福利视频| 欧美一二三四区在线| 亚洲综合激情另类小说区| 欧美日韩免费一区二区三区视频| 激情伊人五月天久久综合| 一区二区三区高清不卡| 国产亚洲一区二区三区在线观看 | 99在线精品一区二区三区| 亚洲色图视频网| 国产福利一区二区三区视频在线| 欧美天天综合网| 蜜乳av一区二区三区| 91久久精品网| 久久不见久久见中文字幕免费| 亚洲国产精品高清| 日韩亚洲欧美高清| 午夜精品视频在线观看|