home *** CD-ROM | disk | FTP | other *** search
/ InfoMagic Internet Tools 1993 July / Internet Tools.iso / RockRidge / mail / pp / pp-6.0 / Chans / x40088 / tasn.c < prev    next >
Encoding:
C/C++ Source or Header  |  1991-12-18  |  3.8 KB  |  241 lines

  1. /* tasn.c : test the incremental asn1 reading */
  2.  
  3. # ifndef lint
  4. static char Rcsid[] = "@(#)$Header: /xtel/pp/pp-beta/Chans/x40088/RCS/tasn.c,v 6.0 1991/12/18 20:14:27 jpo Rel $";
  5. # endif
  6.  
  7. /*
  8.  * $Header: /xtel/pp/pp-beta/Chans/x40088/RCS/tasn.c,v 6.0 1991/12/18 20:14:27 jpo Rel $
  9.  *
  10.  * $Log: tasn.c,v $
  11.  * Revision 6.0  1991/12/18  20:14:27  jpo
  12.  * Release 6.0
  13.  *
  14.  */
  15.  
  16.  
  17.  
  18. #include "MTA-types.h"
  19. #include "Trans-types.h"
  20. #include "util.h"
  21. #include "q.h"
  22. #include <isode/psap.h>
  23.  
  24. char    *myname;
  25. void    adios (), advise ();
  26. int    numbytes = 40;
  27. extern IFP asn_procfnx;
  28. char    *remote_site = "remote-site";
  29. int    log_msgtype = MT_UMPDU;
  30. int    ext;
  31.  
  32. main (argc, argv)
  33. int    argc;
  34. char    **argv;
  35. {
  36.     extern char    *optarg;
  37.     extern int    optind;
  38.     int    opt;
  39.  
  40.     myname = argv[0];
  41.     sys_init (myname);
  42.     while((opt = getopt(argc, argv, "Ddxn:")) != EOF)
  43.         switch (opt) {
  44.             case 'n':
  45.             numbytes = atoi (optarg);
  46.             break;
  47.             case 'x':
  48.             ext = 1;
  49.             break;
  50.             case 'd':
  51.             pp_log_norm -> ll_events |= (LLOG_TRACE|LLOG_NOTICE);
  52.             break;
  53.             case 'D':
  54.             pp_log_norm -> ll_events = LLOG_ALL;
  55.             break;
  56.             default:
  57.             fprintf (stderr, "Usage: %s\n", myname);
  58.             break;
  59.         }
  60.     argc -= optind;
  61.     argv += optind;
  62.  
  63.     if (argc > 0) {
  64.         while (argc -- > 0) {
  65.             FILE    *fp;
  66.  
  67.             if ((fp = fopen (*argv, "r")) == NULL)
  68.                 adios (*argv, "Can't open file");
  69.             process (fp);
  70.             (void) fclose (fp);
  71.             argv ++;
  72.         }
  73.     }
  74.     else
  75.         process (stdin);
  76.     exit (0);
  77. }
  78.  
  79. static int hdrprint (pe, type)
  80. PE    pe;
  81. int    type;
  82. {
  83.     switch (type) {
  84.         case MT_UMPDU:
  85.         advise (NULLCP, "Message");
  86.         if (print_MTA_MessageTransferEnvelope (pe, 1, NULLINTP,
  87.                                NULLVP, NULL)
  88.             == NOTOK) {
  89.             advise (NULLCP,
  90.                 "print MessageTransferEnvelope failed: [%s]",
  91.                 PY_pepy);
  92.             vunknown (pe);
  93.         }
  94.         break;
  95.  
  96.         case MT_PMPDU:
  97.         advise (NULLCP, "Probe");
  98.         if (print_MTA_ProbeTransferEnvelope (pe, 1, NULLINTP,
  99.                                NULLVP, NULL)
  100.             == NOTOK) {
  101.             advise (NULLCP,
  102.                 "print MessageTransferEnvelope failed: [%s]",
  103.                 PY_pepy);
  104.             vunknown (pe);
  105.         }
  106.         break;
  107.  
  108.         case MT_DMPDU:
  109.         advise (NULLCP, "Delivery Report");
  110.         if (print_Transfer_ReportAPDU (pe, 1, NULLINTP,
  111.                            NULLVP, NULL)
  112.             == NOTOK) {
  113.             advise (NULLCP,
  114.                 "print Transfer_ReportAPDU failed: [%s]",
  115.                 PY_pepy);
  116.             vunknown (pe);
  117.         }
  118.         break;
  119.     }
  120.     return OK;
  121. }
  122.  
  123. static int total_count;
  124.  
  125. copycount (str, len)
  126. char    *str;
  127. int    len;
  128. {
  129.     total_count += len;
  130.     return OK;
  131. }
  132.  
  133. process (fp)
  134. FILE    *fp;
  135. {
  136.     char    buf[BUFSIZ];
  137.     int n;
  138.     struct qbuf *qb;
  139.     int    result = NOTOK;
  140.     int    extra;
  141.  
  142.     total_count = 0;
  143.     asn_init (hdrprint, copycount, ext);
  144.     while ((n = fread (buf, 1, numbytes, fp)) > 0) {
  145.         qb = str2qb (buf, n, 1);
  146.         result = (*asn_procfnx) (qb);
  147.         qb_free (qb);
  148.         switch (result) {
  149.             default:
  150.             case NOTOK:
  151.             adios (NULLCP, "Error");
  152.             break;
  153.             case OK:
  154.             case DONE:
  155.             break;
  156.         }
  157.     }
  158.     if (result != DONE)
  159.         adios (NULLCP, "Read message - not parsed");
  160.     else    advise (NULLCP, "Message received, %d bytes of content",
  161.             total_count);
  162.     extra = 0;
  163.     while ((n = fread (buf, 1, numbytes, fp)) > 0)
  164.         extra += n;
  165.     if (extra)
  166.         advise (NULLCP, "Message had %d extra trailing bytes", extra);
  167. }
  168.  
  169.  
  170. #include <varargs.h>
  171.  
  172.  
  173. #ifndef    lint
  174. void    _advise ();
  175.  
  176.  
  177. void    adios (va_alist)
  178. va_dcl
  179. {
  180.     va_list ap;
  181.  
  182.     va_start (ap);
  183.  
  184.     _advise (ap);
  185.  
  186.     va_end (ap);
  187.  
  188.     _exit (1);
  189. }
  190. #else
  191. /* VARARGS */
  192.  
  193. void    adios (what, fmt)
  194. char   *what,
  195.        *fmt;
  196. {
  197.     adios (what, fmt);
  198. }
  199. #endif
  200.  
  201.  
  202. #ifndef    lint
  203. void  advise (va_alist)
  204. va_dcl
  205. {
  206.     va_list ap;
  207.  
  208.     va_start (ap);
  209.  
  210.     _advise (ap);
  211.  
  212.     va_end (ap);
  213. }
  214.  
  215.  
  216. void  _advise (ap)
  217. va_list    ap;
  218. {
  219.     char    buffer[BUFSIZ];
  220.  
  221.     asprintf (buffer, ap);
  222.  
  223.     (void) fflush (stdout);
  224.  
  225.     fprintf (stderr, "%s: ", myname);
  226.     (void) fputs (buffer, stderr);
  227.     (void) fputc ('\n', stderr);
  228.  
  229.     (void) fflush (stderr);
  230. }
  231. #else
  232. /* VARARGS */
  233.  
  234. void  advise (what, fmt)
  235. char   *what,
  236.        *fmt;
  237. {
  238.     advise (what, fmt);
  239. }
  240. #endif
  241.