From: <st...@us...> - 2012-05-08 20:05:05
|
Revision: 7004 http://xymon.svn.sourceforge.net/xymon/?rev=7004&view=rev Author: storner Date: 2012-05-08 20:04:59 +0000 (Tue, 08 May 2012) Log Message: ----------- SMS manager: Enable "one-shot" messages that will not repeat. Fix memory leak in smsqueue. Fix sorting of recipients. Modified Paths: -------------- sandbox/henrik/smsmanager/Makefile sandbox/henrik/smsmanager/smsadmin.c sandbox/henrik/smsmanager/smsqueue.c Modified: sandbox/henrik/smsmanager/Makefile =================================================================== --- sandbox/henrik/smsmanager/Makefile 2012-05-08 15:52:05 UTC (rev 7003) +++ sandbox/henrik/smsmanager/Makefile 2012-05-08 20:04:59 UTC (rev 7004) @@ -1,5 +1,5 @@ # Directory with Xymon source-code. You must have run "make lib-build" before building this -XYMONDIR = $(HOME)/xymon/trunk +XYMONDIR = $(HOME)/xymon/4.3.7 # Directory for binaries BINDIR = /usr/local/bin Modified: sandbox/henrik/smsmanager/smsadmin.c =================================================================== --- sandbox/henrik/smsmanager/smsadmin.c 2012-05-08 15:52:05 UTC (rev 7003) +++ sandbox/henrik/smsmanager/smsadmin.c 2012-05-08 20:04:59 UTC (rev 7004) @@ -299,6 +299,7 @@ sethostenv_addtolist(listname, "6 hours", "360", NULL, (repeatinterval == 360)); sethostenv_addtolist(listname, "12 hours", "720", NULL, (repeatinterval == 720)); sethostenv_addtolist(listname, "Suspended", "-1", NULL, (repeatinterval == -1)); + sethostenv_addtolist(listname, "No repeat", "-2", NULL, (repeatinterval == -2)); } void setup_lifetime_selection(int fixed) @@ -1038,7 +1039,7 @@ */ for (i=0; (i < lsize); i++) rseq[i] = i; for (i=lsize; (i < (sizeof(recipnames) / sizeof(recipnames[0]))); i++) rseq[i] = -1; - qsort(&rseq[0], lsize, sizeof(int *), rseqcompare); + qsort(&rseq[0], lsize, sizeof(int), rseqcompare); for (i = 0; (i < (sizeof(recipnames) / sizeof(recipnames[0]))); i++) { sprintf(s, "RECIPNAME_%d=%s", i, ((rseq[i] >= 0) ? recipnames[rseq[i]] : "")); Modified: sandbox/henrik/smsmanager/smsqueue.c =================================================================== --- sandbox/henrik/smsmanager/smsqueue.c 2012-05-08 15:52:05 UTC (rev 7003) +++ sandbox/henrik/smsmanager/smsqueue.c 2012-05-08 20:04:59 UTC (rev 7004) @@ -239,24 +239,49 @@ } if (fd) fclose(fd); - if ((repeattime = atoi(l)) <= 0) { - dbgprintf("Entry %s has repeat < 0, i.e. it is suspended\n", adfn); - continue; + repeattime = atoi(l); + if (repeattime == -2) { + /* Non-repeat message, move it to the completed list */ + char olddir[PATH_MAX], olddn[PATH_MAX]; + struct stat st; + + dbgprintf("One-shot message, sending and setting it to completed\n"); + do_xmit(sendcmd, adfn, udent->d_name, xmitfn); + + sprintf(olddir, "%s/old", udent->d_name); + if ((stat(olddir, &st) == -1) && (errno == ENOENT)) mkdir (olddir, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH); + + init_timestamp(); + snprintf(fn, sizeof(fn), "%s/log", adfn); + fd = fopen(fn, "a"); + if (fd) { + fprintf(fd, "%s : Message auto-deleted (no repeat)\n", timestamp); + fclose(fd); + } + + snprintf(olddn, sizeof(olddn), "%s/old/%s", udent->d_name, adent->d_name); + rename(adfn, olddn); + goto cleanup; } + else if (repeattime <= 0) { + dbgprintf("Entry %s has repeat <= 0, i.e. it is suspended\n", adfn); + goto cleanup; + } else { repeattime = 60*atoi(l); + dbgprintf("Entry %s has lastxmit=%d, repeat=%d, next=%d, now=%d\n", + adfn, lastxmit, repeattime, (lastxmit+repeattime), now); } - dbgprintf("Entry %s has lastxmit=%d, repeat=%d, next=%d, now=%d\n", - adfn, lastxmit, repeattime, (lastxmit+repeattime), now); - if ((lastxmit + repeattime) > now) { dbgprintf("Skipping %s, repeating in %d seconds\n", adfn, ((lastxmit + repeattime) - now)); - continue; + goto cleanup; } dbgprintf("Processing %s\n", adfn); do_xmit(sendcmd, adfn, udent->d_name, xmitfn); + +cleanup: free(xmitfn); } closedir(activedir); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |