Update of /cvsroot/freenet/freenet/src/freenet/support
In directory sc8-pr-cvs1:/tmp/cvs-serv25429/src/freenet/support
Modified Files:
Fields.java
Log Message:
6295:
If HTL == maxHTL, 50% chance of not decrementing. I believe this converges to an extra
2 hops, somebody please check my math. This provides some plausible deniability when
you send a request at max HTL (perturb runs only on client level...).
?date= now accepts {+,-}{number}{day|week|etc} - relative date/time support in ?date
in fproxy, on the CLI etc (Fields.dateTime).
Index: Fields.java
===================================================================
RCS file: /cvsroot/freenet/freenet/src/freenet/support/Fields.java,v
retrieving revision 1.20
retrieving revision 1.21
diff -u -w -r1.20 -r1.21
--- Fields.java 18 Oct 2003 00:17:56 -0000 1.20
+++ Fields.java 31 Oct 2003 23:23:06 -0000 1.21
@@ -1,4 +1,5 @@
package freenet.support;
+import java.util.Calendar;
import java.util.StringTokenizer;
import java.util.GregorianCalendar;
import java.util.Date;
@@ -305,11 +306,54 @@
* The value has to be of the form YYYYMMDD-HH:MM:SS (where seconds
* may include a decimal) or YYYYMMDD (in which case 00:00:00 is assumed
* for time).
+ * Another accepted format is +/-{integer}{day|month|year|minute|second}
* @returns millis of the epoch of at the time described.
*/
public static final long dateTime(String date)
throws NumberFormatException {
+ if(date.length() == 0)
+ throw new NumberFormatException("Date time empty");
+
+ if(date.charAt(0) == '-' || date.charAt(0) == '+') {
+ // Relative date
+ StringBuffer sb = new StringBuffer(10);
+ for(int x=1;x<date.length();x++) {
+ char c = date.charAt(x);
+ if(Character.isDigit(date.charAt(x))) {
+ sb.append(c);
+ } else break;
+ }
+ int num = Integer.parseInt(new String(sb));
+ int chop = 1 + sb.length();
+ int deltaType = 0;
+ if(date.length() == chop)
+ deltaType = Calendar.DAY_OF_YEAR;
+ else {
+ String deltaTypeString = date.substring(chop).toLowerCase();
+ if(deltaTypeString.equals("y") ||
deltaTypeString.equals("yes"))
+ deltaType = Calendar.YEAR;
+ else if(deltaTypeString.equals("month") ||
deltaTypeString.equals("mo"))
+ deltaType = Calendar.MONTH;
+ else if(deltaTypeString.equals("week") ||
deltaTypeString.equals("w"))
+ deltaType = Calendar.WEEK_OF_YEAR;
+ else if(deltaTypeString.equals("day") ||
deltaTypeString.equals("d"))
+ deltaType = Calendar.DAY_OF_YEAR;
+ else if(deltaTypeString.equals("hour") ||
deltaTypeString.equals("h"))
+ deltaType = Calendar.HOUR;
+ else if(deltaTypeString.equals("minute") ||
deltaTypeString.equals("min"))
+ deltaType = Calendar.MINUTE;
+ else if(deltaTypeString.equals("second") ||
deltaTypeString.equals("s") ||
+ deltaTypeString.equals("sec"))
+ deltaType = Calendar.SECOND;
+ else
+ throw new NumberFormatException("unknown
time/date delta type: "+deltaTypeString);
+ GregorianCalendar gc = new GregorianCalendar();
+ gc.add(deltaType, (date.charAt(0) == '+') ? 1 : -1);
+ return gc.getTime().getTime();
+ }
+ }
+
int dash = date.indexOf('-');
_______________________________________________
cvs mailing list
[EMAIL PROTECTED]
http://dodo.freenetproject.org/cgi-bin/mailman/listinfo/cvs