|
DataMuseum.dkPresents historical artifacts from the history of: DKUUG/EUUG Conference tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about DKUUG/EUUG Conference tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - downloadIndex: T d
Length: 7345 (0x1cb1) Types: TextFile Names: »dr2txt.c«
└─⟦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«
/* 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; }