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

Reply via email to