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);
+ }
}