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 d

⟦cedb25465⟧ TextFile

    Length: 7345 (0x1cb1)
    Types: TextFile
    Names: »dr2txt.c«

Derivation

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

TextFile

/* dr2txt.c: convert dr structure to text encooding */

# ifndef lint
static char Rcsid[] = "@(#)$Header: /cs/research/pp/hubris/pp-beta/Lib/pp/RCS/dr2txt.c,v 5.0 90/09/20 16:10:48 pp Exp Locker: pp $";
# endif

/*
 * $Header: /cs/research/pp/hubris/pp-beta/Lib/pp/RCS/dr2txt.c,v 5.0 90/09/20 16:10:48 pp Exp Locker: pp $
 *
 * $Log:	dr2txt.c,v $
 * Revision 5.0  90/09/20  16:10:48  pp
 * rcsforce : 5.0 public release
 * 
 */



#include        "util.h"
#include        <isode/cmd_srch.h>
#include 	"dr.h"
#include        "tb_dr.h"

#define	crit2txt(n)	rcmd_srch ((n), tbl_crit)
static void rr2txt ();
static void drredir2txt ();

extern	char	*qb2hex ();
extern	char	*int2txt ();
extern	char	*time2txt ();
extern	void	genreset ();
extern	void	mpduid2txt ();
extern	void	argv2fp ();
extern	void	trace2txt ();
extern	void	dlexp2txt ();
extern	void	fname2txt ();
extern	void	extension2txt ();
extern	void	encodedinfo2txt ();

extern CMD_TABLE
		tbl_redir [],
		rr_rcode[],
		rr_dcode [],
		tbl_crit[],
		rrtbl [],
		drtbl [];


/* -------------------  Memory -> Text File  ------------------------------ */


int dr2txt (fp, dr)   /* DeliveryReport -> Txt */
FILE    *fp;
DRmpdu  *dr;
{
	char	*argv[100];
	int	argc;
	Trace	*trace;
	DLHistory	*dlh;
	Extension	*ext;
	Rrinfo		*rr;

	PP_DBG (("Lib/pp/dr2txt()"));

	genreset ();

	if (dr -> dr_mpduid) {
		argv[0] = rcmd_srch (DR_MSGID, drtbl);
		argc = 1;
		mpduid2txt (dr -> dr_mpduid, argv, &argc);
		if (argc > 1) {
			argv[argc] = NULLCP;
			argv2fp (fp, argv);
		}
	}

	argv[0] = rcmd_srch (DR_TRACE, drtbl);
	for (trace = dr -> dr_trace; trace; trace = trace -> trace_next) {
		argc = 1;
		trace2txt (trace, argv, &argc);
		argv[argc] = NULLCP;
		argv2fp (fp, argv);
	}

	argv[0] = rcmd_srch (DR_SI_TRACE, drtbl);
	for (trace = dr -> dr_subject_intermediate_trace; trace;
	     trace = trace -> trace_next) {
		argc = 1;
		trace2txt (trace, argv, &argc);
		argv[argc] = NULLCP;
		argv2fp (fp, argv);
	}

	argv[0] = rcmd_srch (DR_DL_EXP_HIST, drtbl);
	for (dlh = dr -> dr_dl_history; dlh; dlh = dlh -> dlh_next) {
		argc = 1;
		dlexp2txt (dlh, argv, &argc);
		argv[argc] = NULLCP;
		argv2fp (fp, argv);
	}

	if (dr -> dr_dl_history_crit) {
		argv[0] = rcmd_srch (DR_DL_EXP_HIST_CRIT, drtbl);
		argv[1] = crit2txt (dr -> dr_dl_history_crit);
		argv[2] = NULLCP;
		argv2fp (fp, argv);
	}

	if (dr -> dr_reporting_dl_name) {
		argv[0] = rcmd_srch (DR_REPORTING_DL_NAME, drtbl);
		argc = 1;
		fname2txt (dr -> dr_reporting_dl_name,
			   dr -> dr_reporting_dl_name_crit, argv, &argc);
		argv[argc] = NULLCP;
		argv2fp (fp, argv);
	}

	if (dr -> dr_security_label) {
		argv[0] = rcmd_srch (DR_SECURITY_LABEL, drtbl);
		argv[1] = qb2hex (dr -> dr_security_label);
		argv[2] = crit2txt (dr -> dr_security_label_crit);
		argv[3] = NULLCP;
		argv2fp (fp, argv);
		free (argv[1]);
	}

	if (dr -> dr_reporting_mta_certificate) {
		argv[0] = rcmd_srch (DR_REPORTING_MTA_CERTIFICATE, drtbl);
		argv[1] = qb2hex (dr -> dr_reporting_mta_certificate);
		argv[2] = crit2txt (dr -> dr_reporting_mta_certificate_crit);
		argv[3] = NULLCP;
		argv2fp (fp, argv);
		free (argv[1]);
	}

	if (dr -> dr_report_origin_auth_check) {
		argv[0] = rcmd_srch (DR_REPORT_ORIGIN_AUTH_CHECK, drtbl);
		argv[1] = qb2hex (dr -> dr_report_origin_auth_check);
		argv[2] = crit2txt (dr -> dr_report_origin_auth_check_crit);
		argv[3] = NULLCP;
		argv2fp (fp, argv);
		free (argv[1]);
	}

	argv[0] = rcmd_srch (DR_PER_ENVELOPE_EXTENSIONS, drtbl);
	for (ext = dr -> dr_per_envelope_extensions; ext;
	     ext = ext -> ext_next) {
		argc = 1;
		extension2txt (ext, fp, argv, &argc);
	}


	argv[0] = rcmd_srch (DR_PER_REPORT_EXTENSIONS, drtbl);
	for (ext = dr -> dr_per_report_extensions; ext;
	     ext = ext -> ext_next) {
		argc = 1;
		extension2txt (ext, fp, argv, &argc);
	}
	(void) fprintf (fp, "%s\n", rcmd_srch (DR_END_HDR, drtbl));
	
	for (rr = dr -> dr_recip_list; rr; rr = rr -> rr_next)
		rr2txt (rr, fp);
	fprintf (fp, "%s\n", rcmd_srch (RR_END, rrtbl));
	(void) fflush (fp);
	return ferror(fp) ? NOTOK : OK;
}

static void rr2txt (rr, fp)
Rrinfo *rr;
FILE	*fp;
{
	char	*argv[30];
	int	argc;
	Redirection	*redir;
	Extension	*ext;

	genreset ();

	argv[0] = rcmd_srch (RR_RECIP, rrtbl);
	argv[1] = int2txt (rr -> rr_recip);
	argv[2] = NULLCP;
	argv2fp (fp, argv);

	if (rr -> rr_report.rep_type == DR_REP_SUCCESS) {
		argv[0] = rcmd_srch (RR_SUCCESS, rrtbl);
		argv[1] = time2txt (rr -> rr_report.rep.rep_dinfo.del_time);
		argv[2] = int2txt (rr -> rr_report.rep.rep_dinfo.del_type);
		argv[3] = NULLCP;
		argv2fp (fp, argv);
	}
	if (rr -> rr_report.rep_type == DR_REP_FAILURE) {
		argv[0] = rcmd_srch (RR_FAILURE, rrtbl);
		argv[1] = rcmd_srch (rr -> rr_report.rep.rep_ndinfo.nd_rcode,
				     rr_rcode);
		argv[2] = rcmd_srch (rr -> rr_report.rep.rep_ndinfo.nd_dcode,
				     rr_dcode);
		argv[3] = NULLCP;
		argv2fp (fp, argv);
	}
	if (rr -> rr_converted) {
		argv[0] = rcmd_srch (RR_CONVERTED, rrtbl);
		argc = 1;
		encodedinfo2txt (rr -> rr_converted, argv, &argc);
		argv[argc] = NULLCP;
		if (argc != 1)
			argv2fp (fp, argv);
	}

	if (rr -> rr_originally_intended_recip) {
		argv[0] = rcmd_srch (RR_ORIGINALLY_INTENDED_RECIP, rrtbl);
		argc = 1;
		fname2txt (rr -> rr_originally_intended_recip, 0,
			   argv, &argc);
		argv[argc] = NULLCP;
		argv2fp (fp, argv);
	}

	if (rr -> rr_supplementary) {
		argv[0] = rcmd_srch (RR_SUPPLEMENTARY, rrtbl);
		argv[1] = rr -> rr_supplementary;
		argv[2] = NULLCP;
		argv2fp (fp, argv);
	}

	argv[0] = rcmd_srch (RR_REDIRECT_HISTORY, rrtbl);
	for (redir = rr -> rr_redirect_history; redir;
	     redir = redir -> rd_next) {
		argc = 1;
		drredir2txt (redir, argv, &argc);
		argv[argc] = NULLCP;
		argv2fp (fp, argv);
	}
	if (rr -> rr_redirect_history_crit) {
		argv[0] = rcmd_srch (RR_REDIRECT_HISTORY_CRIT, rrtbl);
		argv[1] = crit2txt (rr -> rr_redirect_history_crit);
		argv[2] = NULLCP;
		argv2fp (fp, argv);
	}

	if (rr -> rr_physical_fwd_addr) {
		argv[0] = rcmd_srch (RR_PHYSICAL_FWD, rrtbl);
		fname2txt (rr -> rr_physical_fwd_addr,
			   rr -> rr_physical_fwd_addr_crit, argv, &argc);
		argv[argc] = NULLCP;
		argv2fp (fp, argv);
	}

	if (rr -> rr_recip_certificate) {
		argv[0] = rcmd_srch (RR_RECIP_CERTIFICATE, rrtbl);
		argv[1] = qb2hex (rr -> rr_recip_certificate);
		argv[2] = crit2txt (rr -> rr_recip_certificate_crit);
		argv[3] = NULLCP;
		argv2fp (fp, argv);
		free (argv[1]);
	}

	if (rr -> rr_report_origin_authentication_check) {
		argv[0] = rcmd_srch (RR_REPORT_ORIGIN_CHECK, rrtbl);
		argv[1] = qb2hex (rr -> rr_report_origin_authentication_check);
		argv[2] =
			crit2txt (rr -> rr_report_origin_authentication_check_crit);
		argv[3] = NULLCP;
		argv2fp (fp, argv);
		free (argv[1]);
	}

	if (rr -> rr_arrival) {
		argv[0] = rcmd_srch (RR_ARRIVAL, rrtbl);
		argv[1] = time2txt (rr -> rr_arrival);
		argv[2] = NULLCP;
		argv2fp (fp, argv);
	}

	argv[0] = rcmd_srch (RR_PER_RECIP_EXTENSIONS, rrtbl);
	for (ext = rr -> rr_per_recip_extensions; ext; ext = ext -> ext_next) {
		argc = 1;
		extension2txt (ext, fp, argv, &argc);
	}
	fprintf (fp, "%s\n", rcmd_srch (RR_END_RECIP, rrtbl));
}

static void drredir2txt (rp, argv, argcp)
Redirection *rp;
char	*argv[];
int	*argcp;
{
	int	n = *argcp;
	argv[n++] = rp -> rd_addr ? rp -> rd_addr : "";
	argv[n++] = rp -> rd_dn ? rp -> rd_dn : "";
	argv[n++] = rcmd_srch (rp -> rd_reason, tbl_redir);
	*argcp = n;
}