From e51087192810c656c6203b138fecca38ba986720 Mon Sep 17 00:00:00 2001 From: Michiel Broek Date: Sun, 30 Dec 2001 15:04:11 +0000 Subject: [PATCH] mbtask fixes for z2 mailhour --- mbtask/mbtask.c | 38 ++++++++++++++++++++------------------ mbtask/outstat.c | 42 ++++++++++++++++++++++-------------------- 2 files changed, 42 insertions(+), 38 deletions(-) diff --git a/mbtask/mbtask.c b/mbtask/mbtask.c index bdc3baf9..36dd5c56 100644 --- a/mbtask/mbtask.c +++ b/mbtask/mbtask.c @@ -1210,9 +1210,14 @@ void scheduler(void) initnl(); sem_set((char *)"scanout", TRUE); + /* + * Enter the mainloop (forever) + */ do { /* - * Poll UNIX Datagram socket until the defined timeout. + * Poll UNIX Datagram socket until the defined timeout of one second. + * This means we listen of a MBSE BBS client program has something + * to tell. */ pfd.fd = sock; pfd.events = POLLIN | POLLPRI; @@ -1227,6 +1232,9 @@ void scheduler(void) } } else if (rc) { if (pfd.revents & POLLIN) { + /* + * Process the clients request + */ memset(&buf, 0, sizeof(buf)); fromlen = sizeof(from); rlen = recvfrom(sock, buf, sizeof(buf) -1, 0, &from, &fromlen); @@ -1284,12 +1292,15 @@ void scheduler(void) /* * Touch the mbtask.last semafore to prove this daemon * is actually running. - * Reload configuration data if the file is changed. + * Reload configuration data if some file is changed. */ now = time(NULL); tm = localtime(&now); utm = gmtime(&now); if (tm->tm_min != olddo) { + /* + * Each minute we execute this part + */ olddo = tm->tm_min; TouchSema((char *)"mbtask.last"); if (file_time(tcfgfn) != tcfg_time) { @@ -1312,7 +1323,7 @@ void scheduler(void) * If the next event time is reached, rescan the outbound */ if ((utm->tm_hour == nxt_hour) && (utm->tm_min == nxt_min)) { - tasklog('o', "Next event time reached %02d:%02d %02d:%02d", tm->tm_hour, tm->tm_min, utm->tm_hour, utm->tm_min); + tasklog('+', "It is now %02d:%02d UTC, starting new event", utm->tm_hour, utm->tm_min); sem_set((char *)"scanout", TRUE); } } @@ -1337,6 +1348,8 @@ void scheduler(void) /* * Here we run all normal operations. */ + running = checktasks(0); + if (s_mailout && (!ptimer) && (!runtasktype(MBFIDO))) { launch(TCFG.cmd_mailout, NULL, (char *)"mailout", MBFIDO); running = checktasks(0); @@ -1383,7 +1396,7 @@ void scheduler(void) } /* - * Creating filerequest indexes. + * Creating filerequest indexes, also only if nothing to do. */ if (s_reqindex && (!ptimer) && (!running)) { launch(TCFG.cmd_reqindex, NULL, (char *)"reqindex", MBFILE); @@ -1523,22 +1536,11 @@ void scheduler(void) cmd = NULL; } } - - /* - * Run the mailer if something to do. For now we run just - * one task and lock it with CALL_POTS. - * Later tasks for different calltypes should run parallel. - */ -// if (s_scanout && !runtasktype(CALL_POTS)) { -// cmd = xstrcpy(pw->pw_dir); -// cmd = xstrcat(cmd, (char *)"/bin/mbcico"); -// launch(cmd, (char *)"-r1", (char *)"mbcico", CALL_POTS); -// running = checktasks(0); -// free(cmd); -// cmd = NULL; -// } } + /* + * PING state changes + */ switch (pingstate) { case P_NONE: pingresult[pingnr] = TRUE; break; diff --git a/mbtask/outstat.c b/mbtask/outstat.c index a660b52c..77a546a6 100644 --- a/mbtask/outstat.c +++ b/mbtask/outstat.c @@ -80,11 +80,9 @@ void set_next(int hour, int min) if (hour < nxt_hour) { nxt_hour = hour; nxt_min = min; - tasklog('o', "set_next(%02d:%02d), next event setting %02d:%02d", hour, min, nxt_hour, nxt_min); } else if ((hour == nxt_hour) && (min < nxt_min)) { nxt_hour = hour; nxt_min = min; - tasklog('o', "set_next(%02d:%02d), next event setting %02d:%02d", hour, min, nxt_hour, nxt_min); } } } @@ -131,7 +129,7 @@ char *callmode(int mode) int outstat() { - int rc, first = TRUE, T_window, iszmh = FALSE, pass_midnight; + int rc, first = TRUE, T_window, iszmh = FALSE; struct _alist *tmp, *old; char flstr[13]; char temp[81]; @@ -187,7 +185,7 @@ int outstat() set_next(9, 0); set_next(10, 0); break; - case 2: if (((uhour >= 2) && (umin >= 30)) && ((uhour <= 3) && (umin < 30))) + case 2: if (((uhour == 2) && (umin >= 30)) || ((uhour == 3) && (umin < 30))) iszmh = TRUE; set_next(2, 30); set_next(3, 30); @@ -235,38 +233,44 @@ int outstat() tmin = 30; sprintf(be, "%02d:%02d", thour, tmin); set_next(thour, tmin); - if (strcmp(as, be) > 0) - pass_midnight = TRUE; - else - pass_midnight = FALSE; - tasklog('o', "window %s - %s, pass midnight=%s, %d", as, be, pass_midnight?"true":"false", strcmp(as, be)); - if (pass_midnight) { - tasklog('o', "strcmp(utc, as)=%d strcmp(utc, be)=%d", strcmp(utc, as), strcmp(utc, be)); + if (strcmp(as, be) > 0) { + /* + * Time window is passing midnight + */ if ((strcmp(utc, as) >= 0) || (strcmp(utc, be) < 0)) T_window = TRUE; } else { - tasklog('o', "strcmp(utc, as)=%d strcmp(utc, be)=%d", strcmp(utc, as), strcmp(utc, be)); + /* + * Time window is not passing midnight + */ if ((strcmp(utc, as) >= 0) && (strcmp(utc, be) < 0)) T_window = TRUE; } } tasklog('o', "T_window=%s, iszmh=%s", T_window?"true":"false", iszmh?"true":"false"); strcpy(flstr,"...... ... .."); + /* + * If the node has internet and we have internet available, check if we can send + * immediatly. + */ + if (internet && TCFG.max_tcp && ((tmp->ipflags & IP_IBN) || (tmp->ipflags & IP_IFC) || (tmp->ipflags & IP_ITN))) { + tmp->flavors |= F_CALL; + } if ((tmp->flavors) & F_IMM ) { flstr[0]='I'; /* - * Immediate mail, send if node is CM. + * Immediate mail, send if node is CM or is in a Txx window or is in ZMH. */ - if ((tmp->olflags & OL_CM) || T_window) { + if ((tmp->olflags & OL_CM) || T_window || iszmh) { tmp->flavors |= F_CALL; } } if ((tmp->flavors) & F_CRASH ) { flstr[1]='C'; /* - * Crash mail, send if node is CM. + * Crash mail, send if node is CM or is in a Txx window or is in ZMH. */ - if ((tmp->olflags & OL_CM) || T_window) { + if ((tmp->olflags & OL_CM) || T_window || iszmh) { tmp->flavors |= F_CALL; } } @@ -274,10 +278,8 @@ int outstat() flstr[2]='N'; /* * Normal mail, send during ZMH or if node has a Txx window. - * Also if node has TCP/IP capability and internet is ready. */ - if (iszmh || T_window || (internet && TCFG.max_tcp && - ((tmp->ipflags & IP_IBN) || (tmp->ipflags & IP_IFC) || (tmp->ipflags & IP_ITN)))) { + if (iszmh || T_window) { tmp->flavors |= F_CALL; } } @@ -299,6 +301,7 @@ int outstat() */ tmp->flavors &= ~F_CALL; } + /* Check retry timer also here */ if ((tmp->flavors) & F_CALL ) flstr[9]='C'; if (tmp->t1) @@ -320,7 +323,6 @@ int outstat() ((tmp->ipflags & IP_IBN) || (tmp->ipflags & IP_IFC) || (tmp->ipflags & IP_ITN))) { inet_calls++; tmp->callmode = CM_INET; - tasklog('o', "Call over internet"); } if (!TCFG.ipblocks || (TCFG.ipblocks && !internet)) { /*