Author: dbkr
Date: 2006-07-16 17:35:37 +0000 (Sun, 16 Jul 2006)
New Revision: 9634

Added:
   trunk/apps/Freemail/src/freemail/NIMFetcher.java
   trunk/apps/Freemail/src/freemail/RTSFetcher.java
Removed:
   trunk/apps/Freemail/src/freemail/MailFetcher.java
Modified:
   trunk/apps/Freemail/build.xml
   trunk/apps/Freemail/src/freemail/AccountManager.java
   trunk/apps/Freemail/src/freemail/SingleAccountWatcher.java
   trunk/apps/Freemail/src/freemail/utils/PropsFile.java
Log:
Poll for RTS messages


Modified: trunk/apps/Freemail/build.xml
===================================================================
--- trunk/apps/Freemail/build.xml       2006-07-16 17:30:25 UTC (rev 9633)
+++ trunk/apps/Freemail/build.xml       2006-07-16 17:35:37 UTC (rev 9634)
@@ -24,7 +24,7 @@
        <target name="bouncycastle-compile" depends="bouncycastle-fetch" 
unless="bouncycastle-bin.present">
                <mkdir dir="build" />
                <javac srcdir="${deps}/${bcdist}/src" destdir="${build}" 
debug="on" optimize="on" source="1.4" nowarn="true">
-                       <!--<exclude name="**/test/*" />-->
+                       <exclude name="**/test/*" />
                </javac>
        </target>


Modified: trunk/apps/Freemail/src/freemail/AccountManager.java
===================================================================
--- trunk/apps/Freemail/src/freemail/AccountManager.java        2006-07-16 
17:30:25 UTC (rev 9633)
+++ trunk/apps/Freemail/src/freemail/AccountManager.java        2006-07-16 
17:35:37 UTC (rev 9634)
@@ -58,12 +58,7 @@
                        if (!contacts_dir.mkdir()) throw new 
IOException("Failed to create contacts directory");
                }

-               File inbound_dir = new File(contacts_dir, 
SingleAccountWatcher.INBOUND_DIR);
-               if (!inbound_dir.exists()) {
-                       if (!inbound_dir.mkdir()) throw new IOException("Failed 
to create inbound contacts directory");
-               }
-               
-               File nimdir = new File(inbound_dir, NIMDIR);
+               File nimdir = new File(contacts_dir, NIMDIR);
                if (!nimdir.exists()) {
                        if (!nimdir.mkdir()) throw new IOException("Failed to 
create nim directory");
                }

Deleted: trunk/apps/Freemail/src/freemail/MailFetcher.java
===================================================================
--- trunk/apps/Freemail/src/freemail/MailFetcher.java   2006-07-16 17:30:25 UTC 
(rev 9633)
+++ trunk/apps/Freemail/src/freemail/MailFetcher.java   2006-07-16 17:35:37 UTC 
(rev 9634)
@@ -1,134 +0,0 @@
-package freemail;
-
-import freemail.fcp.FCPConnection;
-import freemail.fcp.HighLevelFCPClient;
-import freemail.utils.DateStringFactory;
-
-import java.io.File;
-import java.io.IOException;
-import java.io.BufferedReader;
-import java.io.PrintStream;
-import java.io.FileReader;
-import java.text.SimpleDateFormat;
-import java.util.Date;
-import java.util.Calendar;
-import java.util.TimeZone;
-import java.security.MessageDigest;
-import java.security.NoSuchAlgorithmException;
-
-import org.bouncycastle.util.encoders.Hex;
-
-public class MailFetcher {
-       private final MessageBank mb;
-       private File contact_dir;
-       private final FCPConnection fcpconn;
-       private final SimpleDateFormat sdf;
-       private static final int POLL_AHEAD = 3;
-       private static int PASSES_PER_DAY = 3;
-       private static int MAX_DAYS_BACK = 30;
-
-       MailFetcher(MessageBank m, File ctdir, FCPConnection fcpc) {
-               this.mb = m;
-               this.fcpconn = fcpc;
-               this.sdf = new SimpleDateFormat("dd MMM yyyy HH:mm:ss Z");
-               this.contact_dir = ctdir;
-       }
-       
-       public void fetch_from_all() {
-               File[] contactfiles = contact_dir.listFiles();
-               
-               for (int i = 0; i < contactfiles.length; i++) {
-                       Contact contact = new Contact(contactfiles[i]);
-                       this.fetch_from(contact);
-               }
-       }
-       
-       private void fetch_from(Contact contact) {
-               int i;
-               for (i = 1 - MAX_DAYS_BACK; i <= 0; i++) {
-                       String datestr = 
DateStringFactory.getOffsetKeyString(i);
-                       MailLog log = contact.getLog(datestr);
-                       
-                       if (log.getPasses() < PASSES_PER_DAY) {
-                               this.fetch_day(contact, log, datestr);
-                               // don't count passes for today since more
-                               // mail may arrive
-                               if (i < 0) log.incPasses();
-                       }
-               }
-               
-               TimeZone gmt = TimeZone.getTimeZone("GMT");
-               Calendar cal = Calendar.getInstance(gmt);
-               cal.setTime(new Date());
-               
-               cal.add(Calendar.DAY_OF_MONTH, 0 - MAX_DAYS_BACK);
-               contact.pruneLogs(cal.getTime());
-       }
-       
-       public void fetch_day(Contact contact, MailLog log, String date) {
-               HighLevelFCPClient fcpcli;
-               fcpcli = new HighLevelFCPClient();
-               
-               String keybase;
-               try {
-                       keybase = contact.getKey() + date + "-";
-               } catch (IOException ioe) {
-                       // Jinkies, Scoob! No key!
-                       return;
-               }
-               
-               int startnum = log.getNextMessageId();
-               
-               for (int i = startnum; i < startnum + POLL_AHEAD; i++) {
-                       System.out.println("trying to fetch "+keybase+i);
-                       
-                       File result = fcpcli.fetch(keybase+i);
-                       
-                       if (result != null) {
-                               System.out.println(keybase+i+": got message!");
-                               try {
-                                       String checksum = 
this.storeMessage(result);
-                                       log.addMessage(i, checksum);
-                               } catch (IOException ioe) {
-                                       continue;
-                               }
-                       } else {
-                               System.out.println(keybase+i+": no message.");
-                       }
-               }
-       }
-       
-       private String storeMessage(File file) throws IOException {
-               MailMessage newmsg = this.mb.createMessage();
-               
-               MessageDigest md;
-               try {
-                       md = MessageDigest.getInstance("MD5");
-               } catch (NoSuchAlgorithmException alge) {
-                       System.out.println("No MD5 implementation available - 
can't checksum messages - not storing message.");
-                       return null;
-               }
-               
-               // add our own headers first
-               // recieved and date
-               newmsg.addHeader("Received", "(Freemail); "+this.sdf.format(new 
Date()));
-               
-               BufferedReader rdr = new BufferedReader(new FileReader(file));
-               
-               newmsg.readHeaders(rdr);
-               
-               PrintStream ps = newmsg.writeHeadersAndGetStream();
-               
-               String line;
-               while ( (line = rdr.readLine()) != null) {
-                       ps.println(line);
-               }
-               
-               newmsg.commit();
-               rdr.close();
-               file.delete();
-               
-               byte[] checksum = md.digest();
-               return new String(Hex.encode(checksum));
-       }
-}

Copied: trunk/apps/Freemail/src/freemail/NIMFetcher.java (from rev 9629, 
trunk/apps/Freemail/src/freemail/MailFetcher.java)
===================================================================
--- trunk/apps/Freemail/src/freemail/MailFetcher.java   2006-07-15 21:40:40 UTC 
(rev 9629)
+++ trunk/apps/Freemail/src/freemail/NIMFetcher.java    2006-07-16 17:35:37 UTC 
(rev 9634)
@@ -0,0 +1,125 @@
+package freemail;
+
+import freemail.fcp.FCPConnection;
+import freemail.fcp.HighLevelFCPClient;
+import freemail.utils.DateStringFactory;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.BufferedReader;
+import java.io.PrintStream;
+import java.io.FileReader;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.Calendar;
+import java.util.TimeZone;
+import java.security.MessageDigest;
+import java.security.NoSuchAlgorithmException;
+
+import org.bouncycastle.util.encoders.Hex;
+
+public class NIMFetcher {
+       private final MessageBank mb;
+       private File contact_dir;
+       private final SimpleDateFormat sdf;
+       private static final int POLL_AHEAD = 3;
+       private static int PASSES_PER_DAY = 3;
+       private static int MAX_DAYS_BACK = 30;
+
+       NIMFetcher(MessageBank m, File ctdir) {
+               this.mb = m;
+               this.sdf = new SimpleDateFormat("dd MMM yyyy HH:mm:ss Z");
+               this.contact_dir = ctdir;
+       }
+       
+       public void fetch() {
+               Contact contact = new Contact(this.contact_dir);
+               
+               int i;
+               for (i = 1 - MAX_DAYS_BACK; i <= 0; i++) {
+                       String datestr = 
DateStringFactory.getOffsetKeyString(i);
+                       MailLog log = contact.getLog(datestr);
+                       
+                       if (log.getPasses() < PASSES_PER_DAY) {
+                               this.fetch_day(contact, log, datestr);
+                               // don't count passes for today since more
+                               // mail may arrive
+                               if (i < 0) log.incPasses();
+                       }
+               }
+               
+               TimeZone gmt = TimeZone.getTimeZone("GMT");
+               Calendar cal = Calendar.getInstance(gmt);
+               cal.setTime(new Date());
+               
+               cal.add(Calendar.DAY_OF_MONTH, 0 - MAX_DAYS_BACK);
+               contact.pruneLogs(cal.getTime());
+       }
+       
+       private void fetch_day(Contact contact, MailLog log, String date) {
+               HighLevelFCPClient fcpcli;
+               fcpcli = new HighLevelFCPClient();
+               
+               String keybase;
+               try {
+                       keybase = contact.getKey() + date + "-";
+               } catch (IOException ioe) {
+                       // Jinkies, Scoob! No key!
+                       return;
+               }
+               
+               int startnum = log.getNextMessageId();
+               
+               for (int i = startnum; i < startnum + POLL_AHEAD; i++) {
+                       System.out.println("trying to fetch "+keybase+i);
+                       
+                       File result = fcpcli.fetch(keybase+i);
+                       
+                       if (result != null) {
+                               System.out.println(keybase+i+": got message!");
+                               try {
+                                       String checksum = 
this.storeMessage(result);
+                                       log.addMessage(i, checksum);
+                               } catch (IOException ioe) {
+                                       continue;
+                               }
+                       } else {
+                               System.out.println(keybase+i+": no message.");
+                       }
+               }
+       }
+       
+       private String storeMessage(File file) throws IOException {
+               MailMessage newmsg = this.mb.createMessage();
+               
+               MessageDigest md;
+               try {
+                       md = MessageDigest.getInstance("MD5");
+               } catch (NoSuchAlgorithmException alge) {
+                       System.out.println("No MD5 implementation available - 
can't checksum messages - not storing message.");
+                       return null;
+               }
+               
+               // add our own headers first
+               // recieved and date
+               newmsg.addHeader("Received", "(Freemail); "+this.sdf.format(new 
Date()));
+               
+               BufferedReader rdr = new BufferedReader(new FileReader(file));
+               
+               newmsg.readHeaders(rdr);
+               
+               PrintStream ps = newmsg.writeHeadersAndGetStream();
+               
+               String line;
+               while ( (line = rdr.readLine()) != null) {
+                       ps.println(line);
+               }
+               
+               newmsg.commit();
+               rdr.close();
+               file.delete();
+               
+               byte[] checksum = md.digest();
+               return new String(Hex.encode(checksum));
+       }
+}

Copied: trunk/apps/Freemail/src/freemail/RTSFetcher.java (from rev 9629, 
trunk/apps/Freemail/src/freemail/MailFetcher.java)
===================================================================
--- trunk/apps/Freemail/src/freemail/MailFetcher.java   2006-07-15 21:40:40 UTC 
(rev 9629)
+++ trunk/apps/Freemail/src/freemail/RTSFetcher.java    2006-07-16 17:35:37 UTC 
(rev 9634)
@@ -0,0 +1,82 @@
+package freemail;
+
+import freemail.fcp.FCPConnection;
+import freemail.fcp.HighLevelFCPClient;
+import freemail.utils.DateStringFactory;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.BufferedReader;
+import java.io.PrintStream;
+import java.io.FileReader;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.Calendar;
+import java.util.TimeZone;
+import java.security.MessageDigest;
+import java.security.NoSuchAlgorithmException;
+
+import org.bouncycastle.util.encoders.Hex;
+
+public class RTSFetcher {
+       private String rtskey;
+       private File contact_dir;
+       private final SimpleDateFormat sdf;
+       private static final int POLL_AHEAD = 3;
+       private static int PASSES_PER_DAY = 3;
+       private static int MAX_DAYS_BACK = 30;
+       private static String LOGFILE = "rtslog";
+
+       RTSFetcher(String key, File ctdir) {
+               this.rtskey = key;
+               this.sdf = new SimpleDateFormat("dd MMM yyyy HH:mm:ss Z");
+               this.contact_dir = ctdir;
+       }
+       
+       public void fetch() {
+               int i;
+               RTSLog log = new RTSLog(new File(this.contact_dir, LOGFILE));
+               for (i = 1 - MAX_DAYS_BACK; i <= 0; i++) {
+                       String datestr = 
DateStringFactory.getOffsetKeyString(i);
+                       if (log.getPasses(datestr) < PASSES_PER_DAY) {
+                               this.fetch_day(log, datestr);
+                               // don't count passes for today since more
+                               // mail may arrive
+                               if (i < 0) {
+                                       log.incPasses(datestr);
+                               }
+                       }
+               }
+               
+               TimeZone gmt = TimeZone.getTimeZone("GMT");
+               Calendar cal = Calendar.getInstance(gmt);
+               cal.setTime(new Date());
+               
+               cal.add(Calendar.DAY_OF_MONTH, 0 - MAX_DAYS_BACK);
+               log.pruneBefore(cal.getTime());
+       }
+       
+       private void fetch_day(RTSLog log, String date) {
+               HighLevelFCPClient fcpcli;
+               fcpcli = new HighLevelFCPClient();
+               
+               String keybase;
+               keybase = this.rtskey + date + "-";
+               
+               int startnum = log.getNextId(date);
+               
+               for (int i = startnum; i < startnum + POLL_AHEAD; i++) {
+                       System.out.println("trying to fetch "+keybase+i);
+                       
+                       File result = fcpcli.fetch(keybase+i);
+                       
+                       if (result != null) {
+                               System.out.println(keybase+i+": got RTS!");
+                               log.incNextId(date);
+                               // TODO: handle the RTS!
+                       } else {
+                               System.out.println(keybase+i+": no RTS.");
+                       }
+               }
+       }
+}

Modified: trunk/apps/Freemail/src/freemail/SingleAccountWatcher.java
===================================================================
--- trunk/apps/Freemail/src/freemail/SingleAccountWatcher.java  2006-07-16 
17:30:25 UTC (rev 9633)
+++ trunk/apps/Freemail/src/freemail/SingleAccountWatcher.java  2006-07-16 
17:35:37 UTC (rev 9634)
@@ -11,27 +11,48 @@
        private static final int MIN_POLL_DURATION = 60000; // in milliseconds
        private static final int MAILSITE_UPLOAD_INTERVAL = 60 * 60 * 1000;
        private final MessageBank mb;
-       private final MailFetcher mf;
+       private final NIMFetcher nf;
+       private final RTSFetcher rtsf;

        SingleAccountWatcher(File accdir) {
                File contacts_dir = new File(accdir, CONTACTS_DIR);
                File inbound_dir = new File(contacts_dir, INBOUND_DIR);

+               if (!inbound_dir.exists()) {
+                       inbound_dir.mkdir();
+               }
+               
                // TODO: do this in the loop, periodically
                PropsFile accprops = AccountManager.getAccountFile(accdir);
                MailSite ms = new MailSite(accprops);
                ms.Publish();

                this.mb = new MessageBank(accdir.getName());
-               this.mf = new MailFetcher(this.mb, inbound_dir, 
Freemail.getFCPConnection());
+               
+               File nimdir = new File(contacts_dir, AccountManager.NIMDIR);
+               if (nimdir.exists()) {
+                       this.nf = new NIMFetcher(this.mb, nimdir);
+               } else {
+                       this.nf = null;
+               }
+               
+               this.rtsf = new RTSFetcher("KSK@"+accprops.get("rtskey")+"-", 
inbound_dir);
+               
+               //this.mf = new MailFetcher(this.mb, inbound_dir, 
Freemail.getFCPConnection());
        }

        public void run() {
                while (true) {
                        long start = System.currentTimeMillis();

-                       mf.fetch_from_all();
+                       if (this.nf != null) {
+                               nf.fetch();
+                       }

+                       this.rtsf.fetch();
+                       
+                       //mf.fetch_from_all();
+                       
                        long runtime = System.currentTimeMillis() - start;

                        if (MIN_POLL_DURATION - runtime > 0) {

Modified: trunk/apps/Freemail/src/freemail/utils/PropsFile.java
===================================================================
--- trunk/apps/Freemail/src/freemail/utils/PropsFile.java       2006-07-16 
17:30:25 UTC (rev 9633)
+++ trunk/apps/Freemail/src/freemail/utils/PropsFile.java       2006-07-16 
17:35:37 UTC (rev 9634)
@@ -9,6 +9,7 @@
 import java.util.HashMap;
 import java.util.Iterator;
 import java.util.Map;
+import java.util.Set;

 public class PropsFile {
        private final File file;
@@ -79,4 +80,12 @@
        public boolean exists() {
                return this.file.exists();
        }
+       
+       public Set listProps() {
+               return this.data.keySet();
+       }
+       
+       public void remove(String key) {
+               this.data.remove(key);
+       }
 }


Reply via email to