|
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 t
Length: 7093 (0x1bb5) Types: TextFile Names: »txt2dr.c«
└─⟦2d1937cfd⟧ Bits:30007241 EUUGD22: P.P 5.0 └─⟦dc59850a2⟧ »EurOpenD22/pp5.0/pp-5.tar.Z« └─⟦e5a54fb17⟧ └─⟦this⟧ »pp-5.0/Lib/pp/txt2dr.c«
/* txt2dr.c: converts text encoding back to dr structure */ # ifndef lint static char Rcsid[] = "@(#)$Header: /cs/research/pp/hubris/pp-beta/Lib/pp/RCS/txt2dr.c,v 5.0 90/09/20 16:12:11 pp Exp Locker: pp $"; # endif /* * $Header: /cs/research/pp/hubris/pp-beta/Lib/pp/RCS/txt2dr.c,v 5.0 90/09/20 16:12:11 pp Exp Locker: pp $ * * $Log: txt2dr.c,v $ * Revision 5.0 90/09/20 16:12:11 pp * rcsforce : 5.0 public release * */ #include "util.h" #include <isode/cmd_srch.h> #include "dr.h" #include "tb_dr.h" #include "retcode.h" #define txt2crit(n) cmd_srch ((n), tbl_crit) #define txt2int(n) atoi(n) extern struct qbuf *hex2qb (); extern Extension *txt2extension (); extern CMD_TABLE tbl_redir [], rr_rcode[], rr_dcode [], tbl_crit [], rrtbl [], drtbl [/* delivery-notification */]; /* ------------------- Text File -> Memory ------------------------------ */ int txt2dr (dr, fp) DRmpdu *dr; FILE *fp; { int retval; char buf[BUFSIZ]; int argc; char *argv[100]; for (;;) { if (rp_isbad (retval = txt2buf (buf, fp))) { PP_LOG (LLOG_EXCEPTIONS, ("txt2buf failed")); return retval; } if (retval == RP_DONE) return RP_DONE; PP_DBG (("Lib/pp/txt2dr buf='%s'", buf)); if ((argc = str2arg (buf, 100, argv)) == 0) return RP_PARM; switch (cmd_srch (argv[0], drtbl)) { case DR_MSGID: dr -> dr_mpduid = (MPDUid *) smalloc ( sizeof *dr -> dr_mpduid); bzero ((char *)dr -> dr_mpduid, sizeof *dr -> dr_mpduid); if (txt2mpduid (dr -> dr_mpduid, &argv[1], argc - 1) == NOTOK) return RP_BAD; break; case DR_TRACE: if (txt2trace (&dr -> dr_trace, &argv[1], argc - 1) == NOTOK) return RP_BAD; break; case DR_SI_TRACE: if (txt2trace (&dr -> dr_subject_intermediate_trace, &argv[1], argc - 1) == NOTOK) return RP_BAD; break; case DR_DL_EXP_HIST: if (txt2dlexp (&dr -> dr_dl_history, &argv[1], argc - 1) == NOTOK) return RP_BAD; break; case DR_DL_EXP_HIST_CRIT: dr -> dr_dl_history_crit = txt2int (argv[1]); break; case DR_REPORTING_DL_NAME: if (txt2fname (&dr -> dr_reporting_dl_name, &dr -> dr_reporting_dl_name_crit, &argv[1], argc - 1) == NOTOK) return RP_BAD; break; case DR_SECURITY_LABEL: dr -> dr_security_label = hex2qb(argv[1]); if (argc < 3) break; dr -> dr_security_label_crit = txt2crit (argv[2]); break; case DR_REPORTING_MTA_CERTIFICATE: dr -> dr_reporting_mta_certificate = hex2qb (argv[1]); if (argc < 3) break; dr -> dr_reporting_mta_certificate_crit = txt2crit (argv[2]); break; case DR_REPORT_ORIGIN_AUTH_CHECK: dr -> dr_report_origin_auth_check = hex2qb (argv[1]); if (argc < 3) break; dr -> dr_report_origin_auth_check_crit = txt2crit (argv[2]); break; case DR_PER_REPORT_EXTENSIONS: { Extension *ext, **extp; ext = txt2extension (&argv[1], argc - 1); for (extp = &dr -> dr_per_report_extensions; *extp; extp = &(*extp) -> ext_next) continue; *extp = ext; } break; case DR_PER_ENVELOPE_EXTENSIONS: { Extension *ext, **extp; ext = txt2extension (&argv[1], argc - 1); for (extp = &dr -> dr_per_envelope_extensions; *extp; extp = &(*extp) -> ext_next) continue; *extp = ext; } break; case DR_END_HDR: return rr2txt (&dr -> dr_recip_list, fp); case DR_END: return RP_DONE; } } } int rr2txt (rrp, fp) Rrinfo **rrp; FILE *fp; { Rrinfo *rr = NULL; int retval; char buf[BUFSIZ]; int argc; char *argv[100]; int type; for (;;) { if (rp_isbad (retval = txt2buf (buf, fp))) { PP_LOG (LLOG_EXCEPTIONS, ("txt2buf failed")); return retval; } if (retval == RP_DONE) return RP_DONE; PP_DBG (("Lib/pp/txt2rr buf='%s'", buf)); if ((argc = str2arg (buf, 100, argv)) == 0) return RP_PARM; type = cmd_srch (argv[0], rrtbl); if (type == RR_END) return RP_DONE; if (rr == NULL) { rr = (Rrinfo *) smalloc (sizeof *rr); bzero ((char *)rr, sizeof *rr); *rrp = rr; } switch (type) { case RR_RECIP: rr -> rr_recip = txt2int (argv[1]); break; case RR_SUCCESS: rr -> rr_report.rep_type = DR_REP_SUCCESS; txt2time (argv[1], &rr -> rr_report.rep.rep_dinfo.del_time) ; if (argc < 3) break; rr -> rr_report.rep.rep_dinfo.del_type = txt2int (argv[2]); break; case RR_FAILURE: rr -> rr_report.rep_type = DR_REP_FAILURE; rr -> rr_report.rep.rep_ndinfo.nd_rcode = cmd_srch (argv[1], rr_rcode); if (argc < 3) break; rr -> rr_report.rep.rep_ndinfo.nd_dcode = cmd_srch (argv[2], rr_dcode); break; case RR_CONVERTED: rr -> rr_converted = (EncodedIT *) smalloc (sizeof *rr -> rr_converted); bzero ((char *)rr -> rr_converted, sizeof *rr -> rr_converted); if (txt2encodedinfo (rr -> rr_converted, &argv[1], argc - 1) == NOTOK) return RP_BAD; break; case RR_ORIGINALLY_INTENDED_RECIP: { char junk; if (txt2fname (&rr -> rr_originally_intended_recip, &junk, &argv[1], argc - 1) == NOTOK) return RP_BAD; } break; case RR_SUPPLEMENTARY: rr -> rr_supplementary = strdup (argv[1]); break; case RR_REDIRECT_HISTORY: { Redirection *rp, **rpp, *txt2redir (); rp = txt2redir (&argv[1], argc - 1); for (rpp = &rr -> rr_redirect_history; *rpp; rpp = &(*rpp) -> rd_next) continue; *rpp = rp; } break; case RR_REDIRECT_HISTORY_CRIT: rr -> rr_redirect_history_crit = txt2crit (argv[1]); break; case RR_PHYSICAL_FWD: if (txt2fname (&rr -> rr_physical_fwd_addr, &rr -> rr_physical_fwd_addr_crit, &argv[1], argc - 1) == NOTOK) return RP_BAD; break; case RR_RECIP_CERTIFICATE: rr -> rr_recip_certificate = hex2qb (argv[1]); if (argc < 3) break; rr -> rr_recip_certificate_crit = txt2crit (argv[2]); break; case RR_REPORT_ORIGIN_CHECK: rr -> rr_report_origin_authentication_check = hex2qb (argv[1]); if (argc < 3) break; rr -> rr_report_origin_authentication_check_crit = txt2crit (argv[2]); break; case RR_ARRIVAL: txt2time (argv[1], &rr -> rr_arrival); break; case RR_PER_RECIP_EXTENSIONS: { Extension *ext, **extp; ext = txt2extension (&argv[1], argc - 1); for (extp = &rr -> rr_per_recip_extensions; *extp; extp = &(*extp) -> ext_next) continue; *extp = ext; } break; case RR_END_RECIP: return rr2txt (&rr -> rr_next, fp); case RR_END: return RP_DONE; } } } Redirection *txt2redir (argv, argc) char *argv[]; int argc; { Redirection *rp; rp = (Redirection *) smalloc (sizeof *rp); bzero ((char *)rp, sizeof *rp); if (argc < 1) return rp; rp -> rd_addr = isstr (argv[0]) ? strdup (argv[0]) : NULLCP; rp -> rd_dn =isstr (argv[1]) ? strdup (argv[1]) : NULLCP; rp -> rd_reason = cmd_srch (argv[2], tbl_redir); return rp; }