|
|
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;
}