added support for DCC, VipulRazor
authoradam <adam@megacz.com>
Sat, 15 Apr 2006 05:48:14 +0000 (05:48 +0000)
committeradam <adam@megacz.com>
Sat, 15 Apr 2006 05:48:14 +0000 (05:48 +0000)
darcs-hash:20060415054814-5007d-883fbd2111dda1a940ccd99899868d74f8aee10b.gz

src/org/ibex/mail/target/Script.java

index d493384..b509b86 100644 (file)
@@ -4,6 +4,7 @@
 
 package org.ibex.mail.target;
 import org.ibex.js.*;
+import org.ibex.io.*;
 import org.ibex.util.*;
 import org.ibex.mail.*;
 import org.ibex.mail.filter.*;
@@ -120,9 +121,13 @@ public class Script extends JS.Obj implements Target {
             case "mail.send": return METHOD;
             case "mail.attempt": return METHOD;
             case "mail.later": return Later.instance;
-            case "mail.drop": return Drop.instance;
+           case "mail.drop": return METHOD;
+           case "mail.razor": return getSub("mail.razor");
+            case "mail.razor.check": return METHOD;
+           case "mail.dcc": return getSub("mail.dcc");
+            case "mail.dcc.check": return METHOD;
             case "mail.bounce": return METHOD;
-            case "mail.error": return METHOD;
+            case "mail.reject": return METHOD;
             case "mail.my": return getSub("mail.my");
             case "mail.my.prefs": try {
                     return new org.ibex.js.Directory(new File("/etc/org.ibex.mail.prefs"));
@@ -184,6 +189,22 @@ public class Script extends JS.Obj implements Target {
                     if (!ok && !attempt) throw new JSExn("SMTP server rejected message");
                     return JSU.B(ok);
                 }
+                if (name.equals("mail.razor.check")) {
+                   Process p = Runtime.getRuntime().exec("razor-check");
+                   ((Message)args[0]).getStream().transcribe(new Stream(p.getOutputStream()), true);
+                   return JSU.N(p.waitFor());
+               }
+                if (name.equals("mail.dcc.check")) {
+                   Process p = Runtime.getRuntime().exec(new String[] { "dccproc", "-H" });
+                   ((Message)args[0]).getStream().transcribe(new Stream(p.getOutputStream()), true);
+                   StringBuffer ret = new StringBuffer();
+                   new Stream(p.getInputStream()).transcribe(ret);
+                   p.waitFor();
+                   return JSU.S(ret.toString());
+               }
+                if (name.equals("mail.drop")) {
+                    return args.length==0 ? new Drop() : new Drop(JSU.toString(args[0]));
+               }
                 if (name.equals("mail.bounce")) {
                     return new JSTarget() {
                             public void accept(Message m) throws MailException {
@@ -210,11 +231,11 @@ public class Script extends JS.Obj implements Target {
                 }
                 if (name.equals("mail.forward") || name.equals("forward")) {
                     Message m2 = Message.newMessage(Script.this.m, Script.this.m.envelopeFrom, new Address(JSU.toString(a)));
-                    org.ibex.mail.protocol.SMTP.Outgoing.attempt(m2);
+                    org.ibex.mail.protocol.SMTP.Outgoing.attempt(m2, false);
                     return Drop.instance;
                 }
-                if (name.equals("mail.error"))
-                    throw new MailException.Malformed(JSU.toString(a));
+                if (name.equals("mail.reject"))
+                    return new Reject(JSU.toString(a));
                 if (name.equals("log.debug") || name.equals("debug")) {    JSU.debug(a== null ? "**null**" : JSU.toString(a)); return null; }
                 if (name.equals("log.info") || name.equals("info")) {     JSU.info(a== null ? "**null**" : JSU.toString(a)); return null; }
                 if (name.equals("log.warn") || name.equals("warn")) {     JSU.warn(a== null ? "**null**" : JSU.toString(a)); return null; }