1 /* ----------------------------------------------------------------------
2      MIME Mangler - single pass reduction of MIME to plain text
3 
4      Laurence Lundblade <lgl@qualcomm.com>
5 
6      Copyright 1997, QUALCOMM Inc.
7 
8      File: testjig.c - UNIX main for testing mangler on flat files
9      Version: 0.2.3, Dec 1997
10      Last Edited: Dec 4 21:56
11 
12   ---- */
13 
14 #include "mime.h"
15 #include "mangle.h"
16 #include <stdio.h>
17 
18 
19 /* ----------------------------------------------------------------------
20    Our output function to pass into various handlers. For example
21    the text/enriched stripper needs an output handler like this. Actually
22    all type handlers need something to say where the output goes.
23 
24    Args: pv  - pointer to output function's state/context
25          buf - buffer of stuff to output
26          len - len of data in buffer
27 
28    Returns: nothing
29    ---- */
MyOutputFunc(void * pv,char * buf,long len)30 void MyOutputFunc(void *pv, char *buf, long len)
31 {
32    FILE *fo = (FILE *)pv;
33 
34    while (len--)
35       fputc(*buf++, fo);
36 }
37 
38 
39 
40 
41 /* ----------------------------------------------------------------------
42     The main has weird buffering stuff for the sake of testing. When
43     you call this, any buffering at all is acceptable from character
44     at a time, to 10Mb memory mapped files.
45    ---- */
46 
47 /* For some reason Linux freads() bomb for large buffer sizes. e.g. 50K */
48 
main(int argc,char ** argv)49 main(int argc, char **argv)
50 {
51   char          ibuf[10002];
52   MimeParsePtr  mmangle;
53   long          n, bufsize, line, random;
54   long          lastHeaderWasWanted;
55   ManglerStateType manglerState;
56 
57 
58   manglerState.lastWasGoodHeader = 0;
59   manglerState.outFn = MyOutputFunc;
60   manglerState.outFnState = stdout;
61 
62 
63   bufsize = 1024; /* The default */
64   line = 0;
65   random = 0;
66   if(argc > 1) {
67     bufsize = atoi(argv[1]);
68     if(!strcmp(argv[1], "line"))
69        line = 1;
70     if(!strcmp(argv[1], "random"))
71        random = 1;
72     if(bufsize > 100000)
73       bufsize = 10000;
74   }
75 
76   FillMangleInfo("mangle(text=html;headers=to:,subject:)", &manglerState.rqInfo);
77 
78   mmangle = MimeInit(MangleMapper,&manglerState,stdin);
79 
80   if(line) {
81     while(fgets(ibuf, 100000, stdin) != NULL)
82         MimeInput(mmangle, ibuf, strlen(ibuf));
83   } else {
84     unsigned long nread = (random ? rand() % 10000: bufsize);
85     while(n = fread(ibuf, 1, nread, stdin)) {
86       MimeInput(mmangle, ibuf, n);
87       nread = (random ? rand() % 10000: bufsize);
88     }
89   }
90   MimeFinish(mmangle);
91 }
92