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

📄 hourlimiterfilter.java

📁 很棒的web服务器源代码
💻 JAVA
字号:
// HourLimiterFilter.java// $Id: HourLimiterFilter.java,v 1.4 2000/08/16 21:37:37 ylafon Exp $// (c) COPYRIGHT MIT and INRIA, 1998.// Please first read the full copyright statement in file COPYRIGHT.htmlpackage org.w3c.jigsaw.filters;import java.util.Calendar;import java.util.Date;import org.w3c.tools.resources.Attribute;import org.w3c.tools.resources.AttributeHolder;import org.w3c.tools.resources.AttributeRegistry;import org.w3c.tools.resources.BooleanAttribute;import org.w3c.tools.resources.DateAttribute;import org.w3c.tools.resources.FramedResource;import org.w3c.tools.resources.ReplyInterface;import org.w3c.tools.resources.RequestInterface;import org.w3c.tools.resources.ResourceFilter;import org.w3c.tools.resources.ResourceFrame;import org.w3c.jigsaw.http.Reply;import org.w3c.jigsaw.http.Request;import org.w3c.www.http.HTTP;import org.w3c.jigsaw.html.HtmlGenerator;public class HourLimiterFilter extends ResourceFilter {    /**     * Repeat every day?     */    public static int ATTR_DAY_REPEAT = -1;    /**     * Repeat every week?     */    public static int ATTR_WEEK_REPEAT = -1;       /**     * Repeat every month?     */    public static int ATTR_MONTH_REPEAT = -1;      /**     * Repeat every year?     */    public static int ATTR_YEAR_REPEAT = -1;    /**     * start date     */    public static int ATTR_DATE_START = -1;    /**     * end date     */    public static int ATTR_DATE_END = -1;    static {	Attribute a   = null ;	Class     cls = null ;		try {	    cls = Class.forName("org.w3c.jigsaw.filters.HourLimiterFilter") ;	} catch (Exception ex) {	    ex.printStackTrace() ;	    System.exit(1) ;	}	// Declare the day_repeat attribute	a = new BooleanAttribute("day_repeat"				 , Boolean.FALSE				 , Attribute.EDITABLE) ;	ATTR_DAY_REPEAT = AttributeRegistry.registerAttribute(cls, a) ;	// Declare the week_repeat attribute	a = new BooleanAttribute("week_repeat"				 , Boolean.FALSE				 , Attribute.EDITABLE) ;	ATTR_WEEK_REPEAT = AttributeRegistry.registerAttribute(cls, a) ;	// Declare the day_repeat attribute	a = new BooleanAttribute("month_repeat"				 , Boolean.FALSE				 , Attribute.EDITABLE) ;	ATTR_MONTH_REPEAT = AttributeRegistry.registerAttribute(cls, a) ;	// Declare the week_repeat attribute	a = new BooleanAttribute("year_repeat"				 , Boolean.FALSE				 , Attribute.EDITABLE) ;	ATTR_YEAR_REPEAT = AttributeRegistry.registerAttribute(cls, a) ;	// Declare the start date	a = new DateAttribute("start"			      , null			      , Attribute.EDITABLE) ;	ATTR_DATE_START = AttributeRegistry.registerAttribute(cls, a) ;	// Declare the end date	a = new DateAttribute("end"			      , null			      , Attribute.EDITABLE) ;	ATTR_DATE_END = AttributeRegistry.registerAttribute(cls, a) ;    }    private int a_year, a_month, a_week, a_day, a_time;    private int b_year, b_month, b_week, b_day, b_time;    protected boolean getDayRepeat() {	return getBoolean(ATTR_DAY_REPEAT, false);    }    protected boolean getWeekRepeat() {	return getBoolean(ATTR_WEEK_REPEAT, false);    }    protected boolean getMonthRepeat() {	return getBoolean(ATTR_MONTH_REPEAT, false);    }    protected boolean getYearRepeat() {	return getBoolean(ATTR_YEAR_REPEAT, false);    }    /**     * We override setValues to compute locally everything we need     * @param idx The index of the attribute to modify.     * @param value The new attribute value.     */    public void setValue(int idx, Object value) {	super.setValue(idx, value);	if (idx == ATTR_DATE_START) {	    Calendar cal = Calendar.getInstance();	    cal.setTime(new Date(((Long)value).longValue()));	    a_year  = cal.get(Calendar.YEAR);	    a_month = cal.get(Calendar.MONTH);	    a_week  = cal.get(Calendar.DAY_OF_WEEK);	    a_day   = cal.get(Calendar.DAY_OF_MONTH);	    a_time  = cal.get(Calendar.HOUR_OF_DAY) * 3600 +		cal.get(Calendar.MINUTE) * 60 +		cal.get(Calendar.SECOND);	} else if (idx == ATTR_DATE_END) {	    Calendar cal = Calendar.getInstance();	    cal.setTime(new Date(((Long)value).longValue()));	    b_year  = cal.get(Calendar.YEAR);	    b_month = cal.get(Calendar.MONTH);	    b_week  = cal.get(Calendar.DAY_OF_WEEK);	    b_day   = cal.get(Calendar.DAY_OF_MONTH);	    b_time  = cal.get(Calendar.HOUR_OF_DAY) * 3600 + 		cal.get(Calendar.MINUTE) * 60 +		cal.get(Calendar.SECOND);	}    }    /**     * Initialize the filter.     */    public void initialize(Object values[]) {	Calendar cal = Calendar.getInstance();	long d = System.currentTimeMillis();	super.initialize(values);	cal.setTime(new Date(getLong(ATTR_DATE_START, d)));	a_year  = cal.get(Calendar.YEAR);	a_month = cal.get(Calendar.MONTH);	a_week  = cal.get(Calendar.DAY_OF_WEEK);	a_day   = cal.get(Calendar.DAY_OF_MONTH);	a_time  = cal.get(Calendar.HOUR_OF_DAY) * 3600 +	    cal.get(Calendar.MINUTE) * 60 +	    cal.get(Calendar.SECOND);	cal.setTime(new Date(getLong(ATTR_DATE_END, d)));	b_year  = cal.get(Calendar.YEAR);	b_month = cal.get(Calendar.MONTH);	b_week  = cal.get(Calendar.DAY_OF_WEEK);	b_day   = cal.get(Calendar.DAY_OF_MONTH);	b_time  = cal.get(Calendar.HOUR_OF_DAY) * 3600 + 	    cal.get(Calendar.MINUTE) * 60 +	    cal.get(Calendar.SECOND);    }    /**     * We check that the date is in the right values     * otherwise, send a NOT_AVAILABLE and fills the right Retry-After header     * @return a Reply if blocked, null otherwise     */    public synchronized ReplyInterface ingoingFilter(RequestInterface req) {	Request request = (Request) req;	Reply   reply   = null;	int n_year, n_month, n_week, n_day, n_time;	int a, b, n;	Calendar cal = Calendar.getInstance();	n_year  = cal.get(Calendar.YEAR);	n_month = cal.get(Calendar.MONTH);	n_week  = cal.get(Calendar.DAY_OF_WEEK);	n_day   = cal.get(Calendar.DAY_OF_MONTH);	n_time  = cal.get(Calendar.HOUR_OF_DAY) * 3600 + 	    cal.get(Calendar.MINUTE) * 60 +	    cal.get(Calendar.SECOND);		if (getDayRepeat()) { // check it if it is repeated every day	    if ((n_time < a_time) || (n_time > b_time)) {		reply = request.makeReply(HTTP.SERVICE_UNAVAILABLE);		if (n_time < a_time)		    reply.setRetryAfter(a_time - n_time);		else		    reply.setRetryAfter(84600 + n_time - a_time);	    }	} else if (getWeekRepeat()) { // check it if it is repeated every week	    a = a_time + a_week * 86400;	    b = b_time + b_week * 86400;	    n = n_time + n_week * 86400;	    if ((n < a) || (n > b)) {		reply = request.makeReply(HTTP.SERVICE_UNAVAILABLE);		if (n < a)		    reply.setRetryAfter(a - n);		else		    reply.setRetryAfter(84600*7 + n - a);	    }	} else if (getMonthRepeat()) { // check it if it's repeated every month	    a = a_time + a_day * 86400;	    b = b_time + b_day * 86400;	    n = n_time + n_day * 86400;	    if ((n < a) || (n > b)) {		reply = request.makeReply(HTTP.SERVICE_UNAVAILABLE);		if (n < a)		    reply.setRetryAfter(a - n);		else {		    cal.setTime(new Date(getLong(ATTR_DATE_START, -1)));		    cal.set(Calendar.YEAR, n_year);		    cal.set(Calendar.MONTH, n_month);		    cal.roll(Calendar.MONTH, true);		    reply.setRetryAfter(cal.getTime().getTime());		}	    }	} else if (getYearRepeat()) { // check it if it's repeated every year	    Calendar c_a = Calendar.getInstance();	    Calendar c_b = Calendar.getInstance();	    c_a.setTime(new Date(getLong(ATTR_DATE_START, -1)));	    c_b.setTime(new Date(getLong(ATTR_DATE_END, -1)));	    c_a.set(Calendar.YEAR, n_year);	    c_b.set(Calendar.YEAR, n_year);	    if (cal.before(c_a)) {		reply = request.makeReply(HTTP.SERVICE_UNAVAILABLE);		reply.setRetryAfter(c_a.getTime().getTime());	    } else if (cal.after(c_b)) {		c_a.roll(Calendar.YEAR, true);		reply = request.makeReply(HTTP.SERVICE_UNAVAILABLE);		reply.setRetryAfter(c_a.getTime().getTime());	    }	} else { /* no repeat */	    Calendar c_a = Calendar.getInstance();	    Calendar c_b = Calendar.getInstance();	    c_a.setTime(new Date(getLong(ATTR_DATE_START, -1)));	    c_b.setTime(new Date(getLong(ATTR_DATE_END, -1)));	    if (cal.before(c_a)) {		reply = request.makeReply(HTTP.SERVICE_UNAVAILABLE);		reply.setRetryAfter(c_a.getTime().getTime());	    } else if (cal.after(c_b)) {		reply = request.makeReply(HTTP.SERVICE_UNAVAILABLE);	    }	}	if (reply != null) {	    HtmlGenerator g = new HtmlGenerator("Service Unavailable");	    g.append("You may retry after the delay or the date given");	    reply.setStream(g);	}	return reply;    }}

⌨️ 快捷键说明

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