// vim: smarttab tabstop=8 shiftwidth=2 expandtab
/********************************************************/
/* */
-/* Main SMTP Daemon */
+/* Email Receiver */
+/* SMTP Daemon dedicated to receive Email. */
/* */
/********************************************************/
#include <signal.h>
#include "unisig.h"
#include "modrec.h"
-#define RECNAME "emlrec"
+#define RECNAME "emlrcvr"
//port listening format is "IP:PORT NUMBER:num iteration"
-#define PORTREC "192.168.0.1:25:1"
+#define DFLTIP "127.168.0.1" //smtp test IP
+#define SMTPORT "1025" //smtp test port
/*
\f
*/
(void) sig_trapsignal(true,sig_alrm);
break;
case 2 : //doing main task
- (void) rec_handlesmtp();
+ (void) rec_handlesmtp(DFLTIP,SMTPORT,1);
break;
case 3 : //doing main tash
(void) prc_cleantitle();
phase=0;
proceed=true;
while (proceed==true) {
+ (void) rou_alert(0,"JMPDBG %s phase='%d'",OPEP,phase);
switch (phase) {
case 0 : //Opening logs
(void) openlog(appname,LOG_NDELAY|LOG_PID,LOG_DAEMON);
/* Waiting and handling smtp request */
/* */
/********************************************************/
-PUBLIC void rec_handlesmtp()
+PUBLIC void rec_handlesmtp(const char *ipnum,const char *port,int nbrbind)
{
#define OPEP "modrec.c:rec_handlesmtp"
-#define LINE "---------------------------------"
pid_t *childs;
-int nbrbind;
SOCPTR **bindings;
int phase;
_Bool proceed;
childs=(pid_t)0;
bindings=(SOCPTR **)0;
-bindings=soc_mkbindinf(bindings,pro_smtps,"192.219.254.70","1465",3);
-bindings=soc_mkbindinf(bindings,pro_smtp,"192.219.254.70","1025",3);
-//bindings=soc_mkbindinf(bindings,pro_smtp,"192.219.254.70","1587",3);
-nbrbind=rou_nbrlist((void **)bindings);
phase=0;
proceed=true;
-if (nbrbind==0) {
- (void) rou_alert(0,"No bindings definition found! (config?)");
- proceed=false;
- }
while (proceed==true) {
switch (phase) {
- case 0 : //looping forever email receiving processes
- (void) rou_alert(0,LINE);
+ case 0 : //preparing iteration
(void) prc_settitle("Emlrec Daemon");
- (void) rou_alert(0,"Starting Emlrec daemon");
+ (void) rou_alert(0,"Starting Emlrec daemon for ip <%s>",ipnum);
childs=(pid_t *)calloc(nbrbind,sizeof(pid_t));
+ bindings=soc_mkbindinf((SOCPTR **)0,pro_smtp,ipnum,port,nbrbind);
+ if (bindings==(SOCPTR **)0) {
+ (void) rou_alert(0,"%s, No bindings definition found! (config?)",OPEP);
+ phase=999;
+ }
break;
case 1 : //Opening ALL channels
for (int i=0;i<nbrbind;i++) {
childs[i]=(pid_t)0;
}
break;
- case 2 : //starting restarting all waiter process
+ case 2 : //starting/restarting all waiting process
for (int i=0;i<nbrbind;i++) {
int offset;
phase=0; //Normal process, lets restart
break;
case 4 : //we got a signal, kill all childs
+ (void) rou_alert(0,"Stopping Emlrec daemon for ip-<%s>",ipnum);
(void) prc_killchilds(childs,nbrbind,10);
break;
default : //SAFE Guard
- (void) rou_alert(0,"Stopping Emlrec daemon");
- (void) rou_alert(0,LINE);
if (childs!=(pid_t *)0)
(void) free(childs);
+ bindings=soc_freebindinf(bindings);
proceed=false;
break;
}
phase++;
}
-bindings=soc_freebindinf(bindings);
-#undef LINE
#undef OPEP
}
/*