tests/mm/test_mm.c

/* [<][>]
[^][v][top][bottom][index][help] */

FUNCTIONS

This source file includes following functions.
  1. error_init
  2. main
  3. usage

   1 /***************************************
   2   $Revision: 1.17 $
   3 
   4   Example code: MIME parser.
   5 
   6   Design and implementation by: Daniele Arena
   7 
   8   ******************/ /******************
   9   Modification History:
  10         daniele (20/07/2000) Created.
  11   ******************/ /******************
  12   Copyright (c) 2000                              RIPE NCC
  13  
  14   All Rights Reserved
  15   
  16   Permission to use, copy, modify, and distribute this software and its
  17   documentation for any purpose and without fee is hereby granted,
  18   provided that the above copyright notice appear in all copies and that
  19   both that copyright notice and this permission notice appear in
  20   supporting documentation, and that the name of the author not be
  21   used in advertising or publicity pertaining to distribution of the
  22   software without specific, written prior permission.
  23   
  24   THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
  25   ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS; IN NO EVENT SHALL
  26   AUTHOR BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY
  27   DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN
  28   AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
  29   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  30   ***************************************/
  31 
  32 
  33 /* Included headers: */
  34 
  35 /* Standard headers */
  36 #include <stdio.h>
  37 #include <signal.h>
  38 #include <string.h>
  39 #include <sys/time.h>
  40 
  41 
  42 /* This is the header to include the MM module*/
  43 #include "mm.h"
  44 #include "mail_parser.h"
  45 #include "erroutines.h"
  46 
  47 
  48 /* Other modules */
  49 #include "ca_configFns.h"
  50 #include "ca_dictSyms.h"
  51 #include "ca_macros.h"
  52 
  53 
  54 /* Global variables */
  55 
  56 char *gpgcmd = NULL;
  57 
  58 
  59 /* This is the temporary file where stdin is stored by MM_store */
  60 /* #define MAIL_FILE "/tmp/daniele/mm.unprocessed" */
  61 #define DEFLT_CONFIG_FILENAME "ripedb.config"
  62 
  63 /* Function declaration */
  64 int main (int argc, char* argv[]);
  65 void usage(char *argv[]);
  66 
  67 
  68 void error_init(int argc, char ** argv) 
     /* [<][>][^][v][top][bottom][index][help] */
  69 {
  70 
  71   char *slash;     
  72   char progname[32];
  73   
  74   slash = rindex(argv[0],'/');                            
  75   strncpy(progname, (slash != NULL) ? slash+1 : argv[0], 31);
  76   progname[31]=0;
  77   
  78 
  79   ER_init(progname, 0);
  80 
  81   {
  82     char *err_msg = NULL;
  83     char *buf = 
  84       "CREATE testdbg { FORMAT PROGNAME|PIDFULL|SEVCHAR|FACSYMB|TEXTLONG|DATETIME NAME /tmp/mmtest.dbg DATE }"
  85       "( FAC mm ASP MM_GEN SEV d-f ) "
  86       ;
  87     char *buf2 =
  88       "CREATE testinf { FORMAT PROGNAME|PIDFULL|SEVCHAR|FACSYMB|TEXTLONG|DATETIME NAME /tmp/mmtest.inf DATE }"
  89       "( FAC mm ASP MM_GEN SEV i-f ) "
  90       ;
  91     
  92     int parsres = ER_parse_spec(buf, &err_msg);
  93     
  94     if( parsres != 0 ) 
  95       { 
  96         /* print only on failure */
  97         puts(err_msg);
  98       }
  99     
 100     free(err_msg);
 101     
 102     if( parsres == 0 ) 
 103       { 
 104         /* success */
 105         char *pbuf = NULL;
 106         
 107         er_print_paths(&pbuf);
 108         puts(pbuf);
 109         free(pbuf);
 110       }
 111     else 
 112       die;
 113 
 114     
 115     parsres = ER_parse_spec(buf2, &err_msg);
 116     
 117     if( parsres != 0 ) 
 118       { 
 119         /* print only on failure */
 120         puts(err_msg);
 121       }
 122     
 123     free(err_msg);
 124     
 125     if( parsres == 0 ) 
 126       { 
 127         /* success */
 128         char *pbuf = NULL;
 129         
 130         er_print_paths(&pbuf);
 131         puts(pbuf);
 132         free(pbuf);
 133       }
 134     else 
 135       die;
 136   }
 137   
 138 }
 139 
 140 
 141 /* Main program - initialization */
 142 
 143 int main (int argc, char *argv[])
     /* [<][>][^][v][top][bottom][index][help] */
 144 {
 145  
 146   long debug = 0;
 147   long mesgno;
 148   int retcode;
 149   /* MM_header *mail_header = NULL; */
 150   /* EP_Mail_Descr *mail_header; */
 151   EP_Mail_Descr *mail_elmt;
 152   Mail_Header_Field *mhfp;
 153   char mail_file[FILENAMELEN];
 154   char *input_file;
 155   extern char *optarg;
 156   extern int optind;
 157   int ch;
 158   short sflg = 0;
 159   short fflg = 0;
 160   short errflg = 0;
 161   char *config_filename = NULL;
 162   char *tmpdir = NULL;
 163 
 164   /* EP_mail_node *mailtree; */
 165 
 166 
 167   while ((ch = getopt(argc, argv, "sf:d:c:h")) != EOF)
 168     switch((char)ch) 
 169       {
 170       case 's':
 171         if (fflg)
 172           errflg++;
 173         else
 174           {
 175             sflg++;
 176             input_file = (char *)malloc(STR_S);
 177             sprintf (input_file,"-");
 178           }
 179         break;
 180       case 'f':
 181         if (sflg)
 182           errflg++;
 183         else
 184           {
 185             fflg++;
 186             input_file = optarg;
 187           }
 188         break;
 189       case 'd':
 190         debug = atol (optarg);
 191         break;
 192       case 'c':
 193         config_filename = strdup(optarg);
 194         break;
 195       case 'h':
 196       default:
 197         errflg++;
 198       }
 199 
 200   if (errflg)
 201     usage(argv);
 202 
 203 
 204   /* N.B.: There should be only one message in the file,
 205    * so mesgno should always be 1.
 206    * If you want a general MIME parser, you should add an option
 207    * to read mesgno.
 208    */
 209 
 210 
 211   /* For memory leak tests */
 212   /*   
 213        for (;;)
 214        {
 215        printf ("Pass # %d\n",j++);
 216        for (k = 1; k < 10000000; k++)
 217        {} 
 218        */
 219 
 220   mesgno = 1;
 221 
 222 
 223 
 224   /* Config stuff */
 225   /*  ca_populateDictionary(dictionary, VARS);
 226    
 227    if(config_filename != NULL)
 228      ca_readConfig(config_filename, confVars, VARS);
 229    else
 230      ca_readConfig(DEFLT_CONFIG_FILENAME, confVars, VARS); */
 231    
 232   if(config_filename != NULL)
 233     ca_init(config_filename);
 234   else
 235     ca_init(DEFLT_CONFIG_FILENAME);
 236   
 237 
 238   /* Get variables from config file */
 239   tmpdir = ca_get_tmpdir;
 240   gpgcmd = ca_get_pgpv;
 241 
 242   /* Initialize error handling */
 243   error_init(argc, argv);
 244 
 245 
 246 
 247   /*sprintf (mail_file,"%s",MAIL_FILE); */     /* the file where the mail message will be stored */
 248 
 249 
 250   /* Put stdin in the mail file */
 251 
 252   /*if ((retcode = MM_store(input_file,mail_file, debug)) != 0)
 253     exit (retcode);
 254     */
 255 
 256   /* Allocate memory for the header */
 257 
 258   /* mail_header = (EP_Mail_Descr *)malloc(sizeof(EP_Mail_Descr)); */
 259 
 260   /* mail_elmt = InitializeMailDescr(mail_file); */
 261 
 262   
 263   /* if ((retcode = MM_get_msg_headers(mail_file, mail_elmt, mesgno, debug)) != 0) */
 264   /* if ((mail_elmt = InitializeMailDescr(mail_file)) == NULL) */
 265   if ((mail_elmt = EP_ParseMail(input_file, tmpdir, "/home/daniele/.gnupg/pubring.gpg", gpgcmd)) == NULL)
 266     {
 267       /* Temporary... */
 268       retcode = 1;
 269       
 270       printf ("Trouble in InitializeMailDescr()! Return code = %d\n",retcode);
 271       exit(retcode);
 272     }
 273   else
 274     {
 275       
 276       printf ("Mail headers:\n\n");
 277       
 278       printf ("From - %s",mail_elmt->from->field);
 279       
 280       printf ("Subject - %s",mail_elmt->subject->field);
 281       
 282       printf ("Date - %s",mail_elmt->date->field);
 283       
 284       printf ("Message-ID - %s",mail_elmt->message_id->field);
 285       
 286       printf ("Reply-To - ");
 287       for (mhfp = mail_elmt->reply_to; mhfp != NULL; mhfp = mhfp->next)
 288         printf ("%s",mhfp->field);  
 289       
 290       printf ("Cc - %s",mail_elmt->cc->field);
 291 
 292       printf ("Content-Type - %s",mail_elmt->content_type->field);
 293 
 294       /*  } */
 295 
 296 
 297   /* mailtree = EP_InitializeRootNode(mail_file); */
 298 
 299       /* if ((retcode = MM_extract_mime(mail_file, NULL, mail_elmt->tree, debug)) != 0)
 300     {
 301       exit (retcode);
 302     }
 303   else
 304     { */
 305 
 306       /* replace this with tree surfing */
 307       /* partptr = part_list->head;
 308       
 309       while (partptr != NULL)
 310         {
 311           
 312           printf("-----------------------------------------\n");
 313           printf ("Section: %s\n",partptr->number);
 314           printf ("Content-type: %s\n",partptr->type);
 315           if (partptr->supported)
 316             printf ("Supported\n");
 317           else
 318             printf ("Unsupported\n");
 319           if (debug) printf ("=== DEBUG: Reading file %s...\n",partptr->file);
 320           read_file(partptr->file);
 321 
 322           printf ("\n\n");
 323           partptr = partptr->next;
 324         } */
 325       
 326 
 327       /* Clean up the temporary files */
 328       /* MM_cleanup(part_list,debug); */
 329 
 330       EP_ShowTree(mail_elmt->tree);
 331 
 332       /* EP_MailDescrCleanUp(mail_elmt); */
 333     }
 334 
 335   /* Closing the memory leak test... */
 336   /* }  */
 337 
 338   exit (0);
 339 
 340   
 341 } /* main */
 342 
 343 
 344 
 345 void usage(char *argv[])
     /* [<][>][^][v][top][bottom][index][help] */
 346 {
 347   printf ("Usage: \n");
 348   printf ("%s -s [-d debug] < input-message \n", argv[0]);
 349   printf ("%s -f input-message [-d debug] \n", argv[0]);
 350   printf ("    Default debug level: %d\n",DEFAULT_DEBUG);
 351   /* DEFAULT_DEBUG is defined in mm.h */
 352   exit (1);
 353 }
 354 

/* [<][>][^][v][top][bottom][index][help] */