DataMuseum.dk

Presents historical artifacts from the history of:

DKUUG/EUUG Conference tapes

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about DKUUG/EUUG Conference tapes

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - metrics - download
Index: T t

⟦472cf90b7⟧ TextFile

    Length: 3463 (0xd87)
    Types: TextFile
    Names: »tasn.c«

Derivation

└─⟦2d1937cfd⟧ Bits:30007241 EUUGD22: P.P 5.0
    └─⟦dc59850a2⟧ »EurOpenD22/pp5.0/pp-5.tar.Z« 
        └─⟦e5a54fb17⟧ 
            └─⟦this⟧ »pp-5.0/Chans/x40088/tasn.c« 

TextFile

/* tasn.c : test the incremental asn1 reading */

# ifndef lint
static char Rcsid[] = "@(#)$Header: /cs/research/pp/hubris/pp-beta/Chans/x40088/RCS/tasn.c,v 5.0 90/09/20 15:58:23 pp Exp Locker: pp $";
# endif

/*
 * $Header: /cs/research/pp/hubris/pp-beta/Chans/x40088/RCS/tasn.c,v 5.0 90/09/20 15:58:23 pp Exp Locker: pp $
 *
 * $Log:	tasn.c,v $
 * Revision 5.0  90/09/20  15:58:23  pp
 * rcsforce : 5.0 public release
 * 
 */



#include "util.h"
#include "q.h"
#include <isode/psap.h>

char	*myname;
void	adios (), advise ();
int	numbytes = 40;
extern IFP asn_procfnx;

main (argc, argv)
int	argc;
char	**argv;
{
	extern char	*optarg;
	extern int	optind;
	int	opt;

	myname = argv[0];
	while((opt = getopt(argc, argv, "n:")) != EOF)
		switch (opt) {
		    case 'n':
			numbytes = atoi (optarg);
			break;
		    default:
			fprintf (stderr, "Usage: %s\n", myname);
			break;
		}
	argc -= optind;
	argv += optind;

	if (argc > 0) {
		while (argc -- > 0) {
			FILE	*fp;

			if ((fp = fopen (*argv, "r")) == NULL)
				adios (*argv, "Can't open file");
			process (fp);
			(void) fclose (fp);
			argv ++;
		}
	}
	else
		process (stdin);
	exit (0);
}

static int hdrprint (pe, type)
PE	pe;
int	type;
{
	switch (type) {
	    case MT_UMPDU:
		advise (NULLCP, "Message");
		if (print_MTA_MessageTransferEnvelope (pe, 1, NULLINTP,
						       NULLVP, NULL)
		    == NOTOK) {
			advise (NULLCP,
				"print MessageTransferEnvelope failed: [%s]",
				PY_pepy);
			vunknown (pe);
		}
		break;

	    case MT_PMPDU:
		advise (NULLCP, "Probe");
		if (print_MTA_ProbeTransferEnvelope (pe, 1, NULLINTP,
						       NULLVP, NULL)
		    == NOTOK) {
			advise (NULLCP,
				"print MessageTransferEnvelope failed: [%s]",
				PY_pepy);
			vunknown (pe);
		}
		break;

	    case MT_DMPDU:
		advise (NULLCP, "Delivery Report");
		if (print_Transfer_ReportAPDU (pe, 1, NULLINTP,
					       NULLVP, NULL)
		    == NOTOK) {
			advise (NULLCP,
				"print Transfer_ReportAPDU failed: [%s]",
				PY_pepy);
			vunknown (pe);
		}
		break;
	}
	return OK;
}

static int total_count;

copycount (str, len)
char	*str;
int	len;
{
	total_count += len;
	return OK;
}

process (fp)
FILE	*fp;
{
	char	buf[BUFSIZ];
	int n;
	struct qbuf *qb;
	int	result = NOTOK;

	total_count = 0;
	asn_init (hdrprint, copycount);
	while ((n = fread (buf, 1, numbytes, fp)) > 0) {
		qb = str2qb (buf, n, 1);
		result = (*asn_procfnx) (qb);
		qb_free (qb);
		switch (result) {
		    default:
		    case NOTOK:
			adios (NULLCP, "Error");
			break;
		    case OK:
		    case DONE:
			break;
		}
	}
	if (result != DONE)
		adios (NULLCP, "Read message - not parsed");
	else	advise (NULLCP, "Message received, %d bytes of content",
			total_count);
}


#include <varargs.h>


#ifndef	lint
void	_advise ();


void	adios (va_alist)
va_dcl
{
    va_list ap;

    va_start (ap);

    _advise (ap);

    va_end (ap);

    _exit (1);
}
#else
/* VARARGS */

void	adios (what, fmt)
char   *what,
       *fmt;
{
    adios (what, fmt);
}
#endif


#ifndef	lint
void  advise (va_alist)
va_dcl
{
    va_list ap;

    va_start (ap);

    _advise (ap);

    va_end (ap);
}


void  _advise (ap)
va_list	ap;
{
    char    buffer[BUFSIZ];

    asprintf (buffer, ap);

    (void) fflush (stdout);

    fprintf (stderr, "%s: ", myname);
    (void) fputs (buffer, stderr);
    (void) fputc ('\n', stderr);

    (void) fflush (stderr);
}
#else
/* VARARGS */

void  advise (what, fmt)
char   *what,
       *fmt;
{
    advise (what, fmt);
}
#endif