Removed the split feature of send.
authormarkus schnalke <meillo@marmaro.de>
Sun, 16 Oct 2011 08:47:04 +0000 (10:47 +0200)
committermarkus schnalke <meillo@marmaro.de>
Sun, 16 Oct 2011 08:47:04 +0000 (10:47 +0200)
It would split large messages into several partial ones, using MIME.
But if a message contains one large file attached, it won't solve the
problem. We better go without this feature and leave it to the user.

etc/sendfiles.in
h/mime.h
man/mh-chart.man
man/send.man
man/sendfiles.man
uip/send.c
uip/sendsbr.c
uip/viamail.c
uip/whatnowsbr.c

index a3545d1..5582b2a 100755 (executable)
@@ -4,7 +4,6 @@
 # image, in a MIME message.
 #
 
-DELAY=0
 FROM=
 
 # compression method (none, gzip or compress)
@@ -24,7 +23,7 @@ elif command -v gzip >/dev/null 2>&1 ; then
     METHOD=gzip
 fi
 
-# handle command-line options to override compression method and delay
+# handle command-line options to override compression method
 while [ $# -gt 3 ]; do
     case "$1" in
         -gzip)
@@ -39,10 +38,6 @@ while [ $# -gt 3 ]; do
             METHOD=none
             shift
             ;;
-        -*)
-            DELAY="`echo $1 | sed -e 's%-%%'`"
-            shift
-            ;;
         *)
             break
             ;;
@@ -83,5 +78,4 @@ tar cvf - "$@" | $COMPRESS | \
     %libdir%/viamail -to "$mailpath" -subject "$subject" \
         -parameters "type=tar$CONVERSION" \
         -comment "extract with $UNCOMPRESS | tar xvpf -" \
-        -delay "$DELAY" \
         -verbose $FROM
index d51e3af..9773293 100644 (file)
--- a/h/mime.h
+++ b/h/mime.h
@@ -31,5 +31,3 @@
 
 #define CPERLIN  76
 #define BPERLIN  (CPERLIN / 4)
-#define LPERMSG  632
-#define CPERMSG  (LPERMSG * CPERLIN)
index adf2a56..1efacfd 100644 (file)
@@ -647,8 +647,6 @@ all/to/cc/me]
 .RB [ \-mime " | " \-nomime ]
 .RB [ \-msgid " | " \-nomsgid ]
 .RB [ \-push " | " \-nopush ]
-.RB [ \-split
-.IR seconds ]
 .RB [ \-verbose " | " \-noverbose ]
 .RB [ \-watch " | " \-nowatch ]
 .RB [ \-width
index a45eb8f..7d0a4a2 100644 (file)
@@ -24,8 +24,6 @@ send \- send a message
 .RB [ \-mime " | " \-nomime ]
 .RB [ \-msgid " | " \-nomsgid ]
 .RB [ \-push " | " \-nopush ]
-.RB [ \-split
-.IR seconds ]
 .RB [ \-verbose " | " \-noverbose ]
 .RB [ \-watch " | " \-nowatch ]
 .RB [ \-server
@@ -189,31 +187,6 @@ useful) feature.  Consult the
 man page for more
 information.
 .PP
-If
-.B \-split
-is specified,
-.B send
-will split the draft into one
-or more partial messages prior to sending.  This makes use of the
-MIME features in
-.BR nmh .
-Note however that if
-.B send
-is
-invoked under
-.BR dist ,
-then this switch is ignored\0--\0it makes
-no sense to redistribute a message in this fashion.  Sometimes you want
-.B send
-to pause after posting a partial message.  This is usually
-the case when you are running
-.B sendmail
-and expect to generate a
-lot of partial messages.  The argument to
-.B \-split
-tells it how long
-to pause between postings.
-.PP
 .B Send
 with no
 .I file
@@ -383,8 +356,3 @@ Under some configurations, it is not possible to monitor the mail delivery
 transaction;
 .B \-watch
 is a no-op on those systems.
-.PP
-Using
-.B \-split
-.I 0
-doesn't work correctly.
index ed67329..39a867a 100644 (file)
@@ -8,7 +8,6 @@ sendfiles \- send multiple files via a MIME message
 .HP
 .na
 .B sendfiles
-.RB [ delay ]
 .I mailpath
 .I subject
 .I file1
@@ -31,9 +30,6 @@ with the
 .B tar
 command, and then mail the compressed
 archive to the \*(lqmailpath\*(rq with the given \*(lqsubject\*(rq.
-The archive
-will be automatically split up into as many messages as necessary
-in order to get past most mailers.
 .PP
 Sometimes you want
 .B sendfiles
index 91f1c16..d1a183e 100644 (file)
@@ -49,8 +49,6 @@ static struct swit switches[] = {
        { "push", 0 },
 #define NPUSHSW  17
        { "nopush", 0 },
-#define SPLITSW  18
-       { "split seconds", 0 },
 #define UNIQSW  19
        { "unique", -6 },
 #define NUNIQSW  20
@@ -110,7 +108,6 @@ extern int debugsw;  /* from sendsbr.c */
 extern int forwsw;
 extern int inplace;
 extern int pushsw;
-extern int splitsw;
 extern int unique;
 extern int verbsw;
 
@@ -196,11 +193,6 @@ main (int argc, char **argv)
                                        pushsw = 0;
                                        continue;
 
-                               case SPLITSW:
-                                       if (!(cp = *argp++) || sscanf (cp, "%d", &splitsw) != 1)
-                                               adios (NULL, "missing argument to %s", argp[-2]);
-                                       continue;
-
                                case UNIQSW:
                                        unique++;
                                        continue;
index 772c006..f7c2a08 100644 (file)
@@ -30,7 +30,6 @@ int debugsw = 0;  /* global */
 int forwsw  = 1;
 int inplace = 1;
 int pushsw  = 0;
-int splitsw = -1;
 int unique  = 0;
 int verbsw  = 0;
 
@@ -62,7 +61,6 @@ static void alert (char *, int);
 static int tmp_fd (void);
 static void anno (int, struct stat *);
 static void annoaux (int);
-static int splitmsg (char **, int, char *, struct stat *, int);
 static int sendaux (char **, int, char *, struct stat *);
 
 static int attach(char *, char *, int);
@@ -81,7 +79,6 @@ sendsbr (char **vec, int vecp, char *drft, struct stat *st,
 {
        int status;
        char buffer[BUFSIZ], file[BUFSIZ];
-       struct stat sts;
        char *original_draft;  /* name of original draft file */
        char *p;  /* string pointer for building file name */
 
@@ -135,16 +132,7 @@ sendsbr (char **vec, int vecp, char *drft, struct stat *st,
                        drft = file;
                }
 
-               /*
-                * Check if we need to split the message into
-                * multiple messages of type "message/partial".
-                */
-               if (splitsw >= 0 && !distfile && stat (drft, &sts) != NOTOK
-                               && sts.st_size >= CPERMSG) {
-                       status = splitmsg (vec, vecp, drft, st, splitsw) ? NOTOK : OK;
-               } else {
-                       status = sendaux (vec, vecp, drft, st) ? NOTOK : OK;
-               }
+               status = sendaux (vec, vecp, drft, st) ? NOTOK : OK;
 
                /* rename the original draft */
                if (rename_drft && status == OK &&
@@ -559,243 +547,6 @@ make_mime_composition_file_entry(char *file_name, int attachformat)
 }
 
 /*
- * Split large message into several messages of
- * type "message/partial" and send them.
- */
-
-static int
-splitmsg (char **vec, int vecp, char *drft, struct stat *st, int delay)
-{
-       int compnum, nparts, partno, state, status;
-       long pos, start;
-       time_t clock;
-       char *cp, *dp, buffer[BUFSIZ], msgid[BUFSIZ];
-       char subject[BUFSIZ];
-       char name[NAMESZ], partnum[BUFSIZ];
-       FILE *in;
-
-       if ((in = fopen (drft, "r")) == NULL)
-               adios (drft, "unable to open for reading");
-
-       cp = dp = NULL;
-       start = 0L;
-
-       /*
-        * Scan through the message and examine the various header fields,
-        * as well as locate the beginning of the message body.
-        */
-       for (compnum = 1, state = FLD;;) {
-               switch (state = m_getfld (state, name, buffer, sizeof(buffer), in)) {
-                       case FLD:
-                       case FLDPLUS:
-                       case FLDEOF:
-                               compnum++;
-
-                               /*
-                                * This header field is discarded.
-                                */
-                               if (!mh_strcasecmp (name, "Message-ID")) {
-                                       while (state == FLDPLUS)
-                                               state = m_getfld (state, name, buffer, sizeof(buffer), in);
-                               } else if (uprf (name, XXX_FIELD_PRF)
-                                       || !mh_strcasecmp (name, VRSN_FIELD)
-                                       || !mh_strcasecmp (name, "Subject")
-                                       || !mh_strcasecmp (name, "Encrypted")) {
-                                       /*
-                                        * These header fields are copied
-                                        * to the enclosed header of the
-                                        * first message in the collection
-                                        * of message/partials.  For the
-                                        * "Subject" header field,
-                                        * we also record it, so that
-                                        * a modified version of it,
-                                        * can be copied to the header
-                                        * of each messsage/partial in
-                                        * the collection.
-                                        */
-                                       if (!mh_strcasecmp (name, "Subject")) {
-                                               size_t sublen;
-
-                                               strncpy (subject, buffer, BUFSIZ);
-                                               sublen = strlen (subject);
-                                               if (sublen > 0 && subject[sublen - 1] == '\n')
-                                                       subject[sublen - 1] = '\0';
-                                       }
-
-                                       dp = add (concat (name, ":", buffer, NULL), dp);
-                                       while (state == FLDPLUS) {
-                                               state = m_getfld (state, name, buffer, sizeof(buffer), in);
-                                               dp = add (buffer, dp);
-                                       }
-                               } else {
-                                       /*
-                                        * These header fields are
-                                        * copied to the header of
-                                        * each message/partial in
-                                        * the collection.
-                                        */
-                                       cp = add (concat (name, ":", buffer, NULL), cp);
-                                       while (state == FLDPLUS) {
-                                               state = m_getfld (state, name, buffer, sizeof(buffer), in);
-                                               cp = add (buffer, cp);
-                                       }
-                               }
-
-                               if (state != FLDEOF) {
-                                       start = ftell (in) + 1;
-                                       continue;
-                               }
-                               /* else fall... */
-
-                  case BODY:
-                  case BODYEOF:
-                  case FILEEOF:
-                               break;
-
-                  case LENERR:
-                  case FMTERR:
-                               adios (NULL, "message format error in component #%d", compnum);
-
-                  default:
-                               adios (NULL, "getfld () returned %d", state);
-               }
-
-               break;
-       }
-       if (cp == NULL)
-               adios (NULL, "headers missing from draft");
-
-       nparts = 1;
-       pos = start;
-       while (fgets (buffer, sizeof(buffer) - 1, in)) {
-               long len;
-
-               if ((pos += (len = strlen (buffer))) > CPERMSG) {
-                       nparts++;
-                       pos = len;
-               }
-       }
-
-       /* Only one part, nothing to split */
-       if (nparts == 1) {
-               free (cp);
-               if (dp)
-                       free (dp);
-
-               fclose (in);
-               return sendaux (vec, vecp, drft, st);
-       }
-
-       if (!pushsw) {
-               printf ("Sending as %d Partial Messages\n", nparts);
-               fflush (stdout);
-       }
-       status = OK;
-
-       vec[vecp++] = "-partno";
-       vec[vecp++] = partnum;
-       if (delay == 0)
-               vec[vecp++] = "-queued";
-
-       time (&clock);
-       snprintf (msgid, sizeof(msgid), "<%d.%ld@%s>",
-                               (int) getpid(), (long) clock, LocalName());
-
-       fseek (in, start, SEEK_SET);
-       for (partno = 1; partno <= nparts; partno++) {
-               char tmpdrf[BUFSIZ];
-               FILE *out;
-
-               char *cp = m_mktemp2(drft, invo_name, NULL, &out);
-               if (cp == NULL) {
-                       adios (drft, "unable to create temporary file for");
-               }
-               strncpy(tmpdrf, cp, sizeof(tmpdrf));
-               chmod (tmpdrf, 0600);
-
-               /*
-                * Output the header fields
-                */
-               fputs (cp, out);
-               fprintf (out, "Subject: %s (part %d of %d)\n", subject, partno, nparts);
-               fprintf (out, "%s: %s\n", VRSN_FIELD, VRSN_VALUE);
-               fprintf (out, "%s: message/partial; id=\"%s\";\n", TYPE_FIELD, msgid);
-               fprintf (out, "\tnumber=%d; total=%d\n", partno, nparts);
-               fprintf (out, "%s: part %d of %d\n\n", DESCR_FIELD, partno, nparts);
-
-               /*
-                * If this is the first in the collection, output the
-                * header fields we are encapsulating at the beginning
-                * of the body of the first message.
-                */
-               if (partno == 1) {
-                       if (dp)
-                               fputs (dp, out);
-                       fprintf (out, "Message-ID: %s\n", msgid);
-                       fprintf (out, "\n");
-               }
-
-               pos = 0;
-               for (;;) {
-                       long len;
-
-                       if (!fgets (buffer, sizeof(buffer) - 1, in)) {
-                               if (partno == nparts)
-                                       break;
-                               adios (NULL, "premature eof");
-                       }
-
-                       if ((pos += (len = strlen (buffer))) > CPERMSG) {
-                               fseek (in, -len, SEEK_CUR);
-                               break;
-                       }
-
-                       fputs (buffer, out);
-               }
-
-               if (fflush (out))
-                       adios (tmpdrf, "error writing to");
-
-               fclose (out);
-
-               if (!pushsw && verbsw) {
-                       printf ("\n");
-                       fflush (stdout);
-               }
-
-               /* Pause here, if a delay is specified */
-               if (delay > 0 && 1 < partno && partno <= nparts) {
-                       if (!pushsw) {
-                               printf ("pausing %d seconds before sending part %d...\n",
-                                               delay, partno);
-                               fflush (stdout);
-                       }
-                       sleep ((unsigned int) delay);
-               }
-
-               snprintf (partnum, sizeof(partnum), "%d", partno);
-               status = sendaux (vec, vecp, tmpdrf, st);
-               unlink (tmpdrf);
-               if (status != OK)
-                       break;
-
-               /*
-                * This is so sendaux will only annotate
-                * the altmsg the first time it is called.
-                */
-               annotext = NULL;
-       }
-
-       free (cp);
-       if (dp)
-               free (dp);
-
-       fclose (in);  /* close the draft */
-       return status;
-}
-
-
-/*
  * Annotate original message, and
  * call `postproc' to send message.
  */
index 1d876cb..ccca115 100644 (file)
@@ -34,8 +34,6 @@ static struct swit switches[] = {
        { "description text", 0 },
 #define COMMENTSW  5
        { "comment text", 0 },
-#define DELAYSW  6
-       { "delay seconds", 0 },
 #define VERBSW  7
        { "verbose", 0 },
 #define NVERBSW  8
@@ -50,7 +48,6 @@ static struct swit switches[] = {
 };
 
 extern int debugsw;
-extern int splitsw;
 extern int verbsw;
 
 int ebcdicsw = 0;  /* hack for linking purposes */
@@ -64,13 +61,12 @@ int writeBase64aux (FILE *, FILE *);
 /*
  * static prototypes
  */
-static int via_mail (char *, char *, char *, char *, char *, int, char *);
+static int via_mail (char *, char *, char *, char *, char *, char *);
 
 
 int
 main (int argc, char **argv)
 {
-       int delay = 0;
        char *f1 = NULL, *f2 = NULL, *f3 = NULL;
        char *f4 = NULL, *f5 = NULL, *f7 = NULL;
        char *cp, buf[BUFSIZ];
@@ -125,18 +121,6 @@ main (int argc, char **argv)
                                if (!(f5 = *argp++))
                                        adios (NULL, "missing argument to %s", argp[-2]);
                                continue;
-                       case DELAYSW:
-                               if (!(cp = *argp++) || *cp == '-')
-                                       adios (NULL, "missing argument to %s", argp[-2]);
-
-                               /*
-                                * If there is an error, just reset the
-                                * delay parameter to -1.  We will set
-                                * a default delay later.
-                                */
-                               if (sscanf (cp, "%d", &delay) != 1)
-                                       delay = -1;
-                               continue;
                        case FROMSW:
                                if (!(f7 = *argp++))
                                        adios (NULL, "missing argument to %s", argp[-2]);
@@ -161,7 +145,7 @@ main (int argc, char **argv)
        if (!f1)
                adios (NULL, "missing -viamail \"mailpath\" switch");
 
-       via_mail (f1, f2, f3, f4, f5, delay, f7);
+       via_mail (f1, f2, f3, f4, f5, f7);
        return 0;  /* dead code to satisfy the compiler */
 }
 
@@ -172,7 +156,7 @@ main (int argc, char **argv)
 
 static int
 via_mail (char *mailsw, char *subjsw, char *parmsw, char *descsw,
-       char *cmntsw, int delay, char *fromsw)
+       char *cmntsw, char *fromsw)
 {
        int status, vecp = 1;
        char tmpfil[BUFSIZ];
@@ -225,11 +209,6 @@ via_mail (char *mailsw, char *subjsw, char *parmsw, char *descsw,
        if (fstat (fileno (fp), &st) == NOTOK)
                adios ("failed", "fstat of %s", tmpfil);
 
-       if (delay < 0)
-               splitsw = 10;
-       else
-               splitsw = delay;
-
        status = 0;
        vec[0] = r1bindex (postproc, '/');
        if (verbsw)
index a41ee46..afc56fd 100644 (file)
@@ -1017,8 +1017,6 @@ static struct swit  sendswitches[] = {
        { "push", 0 },
 #define NSPSHSW  13
        { "nopush", 0 },
-#define SPLITSW  14
-       { "split seconds", 0 },
 #define UNIQSW  15
        { "unique", -6 },
 #define NUNIQSW  16
@@ -1075,7 +1073,6 @@ extern int debugsw;  /* from sendsbr.c */
 extern int forwsw;
 extern int inplace;
 extern int pushsw;
-extern int splitsw;
 extern int unique;
 extern int verbsw;
 
@@ -1173,13 +1170,6 @@ sendit (char *sp, char **arg, char *file, int pushed)
                                        pushed = 0;
                                        continue;
 
-                               case SPLITSW:
-                                       if (!(cp = *argp++) || sscanf (cp, "%d", &splitsw) != 1) {
-                                               advise (NULL, "missing argument to %s", argp[-2]);
-                                               return;
-                                       }
-                                       continue;
-
                                case UNIQSW:
                                        unique++;
                                        continue;