Skip to content
Snippets Groups Projects
Commit 23caf293 authored by deuce's avatar deuce
Browse files

Instead of returning false, always return a fully populated object with an

additional error property set to a descriptive error string.
parent f328b974
Branches
Tags
No related merge requests found
...@@ -8,7 +8,7 @@ load("sockdefs.js") ...@@ -8,7 +8,7 @@ load("sockdefs.js")
function SPAMC_Message(messagefile, addr, port, user) function SPAMC_Message(messagefile, addr, port, user)
{ {
if(!file_exists(messagefile)) if(!file_exists(messagefile))
return(false); this.error="Message file '"+messagefile+"' does not exist";
this.addr=addr; this.addr=addr;
if(this.addr==undefined) if(this.addr==undefined)
this.addr='127.0.0.1'; this.addr='127.0.0.1';
...@@ -30,13 +30,13 @@ function Message_DoCommand(command) ...@@ -30,13 +30,13 @@ function Message_DoCommand(command)
var rcvd=new Array(); var rcvd=new Array();
var tmp; var tmp;
var sock=new Socket(SOCK_STREAM, "spamc"); var sock=new Socket(SOCK_STREAM, "spamc");
var ret=new Object(); var ret={message:'', isSpam:false, score:'unknown', threshold:'unknown', symbols:[]};
ret.message='';
if(!sock.connect(this.addr, this.port)) { if(!sock.connect(this.addr, this.port)) {
log("ERROR: spamc.js failed to connect!"); ret.error='Failed to connect to spamd';
return(false); return(ret);
} }
sock.write(command.toUpperCase()+" SPAMC/1.2\r\n"); sock.write(command.toUpperCase()+" SPAMC/1.2\r\n");
sock.write("Content-length: "+file_size(this.messagefile)+"\r\n"); sock.write("Content-length: "+file_size(this.messagefile)+"\r\n");
if(this.user) // Optional if(this.user) // Optional
...@@ -44,6 +44,7 @@ function Message_DoCommand(command) ...@@ -44,6 +44,7 @@ function Message_DoCommand(command)
sock.write("\r\n"); sock.write("\r\n");
sock.sendfile(this.messagefile); sock.sendfile(this.messagefile);
sock.is_writeable=false; sock.is_writeable=false;
while(1) { while(1) {
tmp=sock.recvline(); tmp=sock.recvline();
if(tmp==undefined || tmp=='') if(tmp==undefined || tmp=='')
...@@ -61,18 +62,20 @@ function Message_DoCommand(command) ...@@ -61,18 +62,20 @@ function Message_DoCommand(command)
ret.message += tmp; ret.message += tmp;
} }
} }
if(rcvd.length < 1) { if(rcvd.length < 1) {
log("ERROR: No lines read from spamd"); ret.error='No lines read from spamd');
return(false) return(ret)
} }
var tmp=rcvd[0].split(/\s+/,3);
tmp=rcvd[0].split(/\s+/,3);
if(tmp.length < 3) { if(tmp.length < 3) {
log("ERROR: Unable to parse line '"+rcvd[0]); ret.error="Unable to parse line '"+rcvd[0];
return(false) return(ret)
} }
if(tmp[1] != 0) { if(tmp[1] != '0') {
log("ERROR: spamd returned error "+tmp[2]+" ("+tmp[1]+")"); ret.error="spamd returned error "+tmp[2]+" ("+tmp[1]+")";
return(false) return(ret)
} }
/* Parse headers */ /* Parse headers */
...@@ -94,11 +97,9 @@ function Message_DoCommand(command) ...@@ -94,11 +97,9 @@ function Message_DoCommand(command)
} }
if(command == 'SYMBOLS') { if(command == 'SYMBOLS') {
if(ret!==false) { ret.message=ret.message.replace(/[\r\n]/g,'');
ret.message=ret.message.replace(/[\r\n]/g,''); ret.symbols=ret.message.split(/,/);
ret.symbols=ret.message.split(/,/); ret.message='';
ret.message='';
}
} }
return(ret); return(ret);
......
...@@ -41,14 +41,18 @@ function main() ...@@ -41,14 +41,18 @@ function main()
} }
var msg=new SPAMC_Message(message_text_filename, address, tcp_port, user); var msg=new SPAMC_Message(message_text_filename, address, tcp_port, user);
if(msg === false) if(msg.error != undefined) {
log(LOG_ERR,"spamc: !ERROR "+msg.error);
return; return;
}
msg.debug=true; msg.debug=true;
log(LOG_INFO, "spamc: Executing command: " + cmd); log(LOG_INFO, "spamc: Executing command: " + cmd);
var ret=msg.DoCommand(cmd); var ret=msg.DoCommand(cmd);
if(ret === false) if(ret.error != undefined) {
log(LOG_ERR,"spamc: !ERROR "+ret.error);
return; return;
if(ret.score!=undefined) { }
if(!isNaN(ret.score)) {
log(LOG_INFO, "spamc: Score: " + ret.score + ' / ' + ret.threshold); log(LOG_INFO, "spamc: Score: " + ret.score + ' / ' + ret.threshold);
if(threshold && ret.score < threshold) if(threshold && ret.score < threshold)
var ret=msg.DoCommand(cmd='PROCESS'); var ret=msg.DoCommand(cmd='PROCESS');
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment