|
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: 9050 (0x235a) Types: TextFile Names: »txt2q.c«
└─⟦2d1937cfd⟧ Bits:30007241 EUUGD22: P.P 5.0 └─⟦dc59850a2⟧ »EurOpenD22/pp5.0/pp-5.tar.Z« └─⟦e5a54fb17⟧ └─⟦this⟧ »pp-5.0/Lib/pp/txt2q.c«
/* txt2q.c: text encoding into Q struct */ # ifndef lint static char Rcsid[] = "@(#)$Header: /cs/research/pp/hubris/pp-beta/Lib/pp/RCS/txt2q.c,v 5.0 90/09/20 16:12:24 pp Exp Locker: pp $"; # endif /* * $Header: /cs/research/pp/hubris/pp-beta/Lib/pp/RCS/txt2q.c,v 5.0 90/09/20 16:12:24 pp Exp Locker: pp $ * * $Log: txt2q.c,v $ * Revision 5.0 90/09/20 16:12:24 pp * rcsforce : 5.0 public release * */ #include "util.h" #include <isode/cmd_srch.h> #include "q.h" #include "tb_com.h" #include "tb_q.h" #include "mta.h" #define txt2crit(n) cmd_srch ((n), tbl_crit) #define txt2int(n) atoi (n) extern CMD_TABLE tbl_bool [], tbl_crit [], qtbl_que [/* message-envelope-parameters */], qtbl_mt_type [/* message-type */], qtbl_con_type [/* content-type */], qtbl_priority [/* message-priority */]; extern struct qbuf *hex2qb (); extern Extension *txt2extension (); static int Q_txt2msgtype (); static int Q_txt2priority (); /* ------------------- Text File -> Memory ------------------------------ */ int txt2q (qp, argv, argc) /* Txt -> MessageEnvelopePrarmeters */ Q_struct *qp; char **argv; int argc; { int key; PP_DBG (("Lib/pp/txt2q('%s' %d)", argv[0], argc)); key = cmd_srch (argv[0], qtbl_que); switch (key) { case Q_MSGTYPE: return (Q_txt2msgtype (&qp->msgtype, argv[1])); case Q_MSGSIZE: if (!isstr (argv[1])) return OK; qp->msgsize = atoi (argv[1]); return OK; case Q_DEFERREDTIME: if (!isstr (argv[1])) return OK; return (txt2time (argv[1], &qp->defertime)); case Q_LATESTTIME: if (!isstr (argv[1])) return OK; return txt2time (argv[1], &qp ->latest_time); case Q_NWARNS: if (!isstr (argv[1])) return OK; qp->nwarns = atoi (argv[1]); return OK; case Q_WARNINTERVAL: if (!isstr (argv[1])) return OK; qp->warninterval = atoi (argv[1]); return OK; case Q_RETINTERVAL: if (!isstr (argv[1])) return OK; qp->retinterval = atoi (argv[1]); return OK; case Q_CONTENT_TYPE: if (!isstr (argv[1])) return OK; qp->cont_type = strdup(argv[1]); return OK; case Q_ENCODED_INFO: if (!isstr (argv[1])) return OK; if (txt2encodedinfo (&qp->encodedinfo, &argv[1], argc - 1) == NOTOK) return NOTOK; return OK; case Q_ORIG_ENCODED_INFO: if (!isstr (argv[1])) return OK; if (txt2encodedinfo (&qp->orig_encodedinfo, &argv[1], argc - 1) == NOTOK) return NOTOK; return OK; case Q_PRIORITY: if (!isstr (argv[1])) return OK; return (Q_txt2priority (&qp->priority, argv[1])); case Q_DISCLOSE_RECIPS: if (!isstr (argv[1])) return OK; qp -> disclose_recips = cmd_srch (argv[1], tbl_bool); return OK; case Q_IMPLICIT_CONVERSION: if (!isstr(argv[1])) return OK; qp -> implicit_conversion = cmd_srch (argv[1], tbl_bool); return OK; case Q_ALTERNATE_RECIP_ALLOWED: if (!isstr(argv[1])) return OK; qp -> alternate_recip_allowed = cmd_srch (argv[1], tbl_bool); return OK; case Q_CONTENT_RETURN_REQUEST: if (!isstr(argv[1])) return OK; qp -> content_return_request = cmd_srch (argv[1], tbl_bool); return OK; case Q_RECIP_REASSIGN_PROHIBITED: if (!isstr (argv[1])) return OK; qp -> recip_reassign_prohibited = cmd_srch (argv[1], tbl_bool); if (!isstr (argv[2])) return OK; qp -> recip_reassign_crit = txt2crit (argv[2]); return OK; case Q_DL_EXP_PROHIBITIED: if (!isstr (argv[1])) return OK; qp -> dl_expansion_prohibited = cmd_srch (argv[1], tbl_bool); if (!isstr (argv[2])) return OK; qp -> dl_expansion_crit = txt2crit (argv[2]); return OK; case Q_CONV_WITH_LOSS: if (!isstr (argv[1])) return OK; qp -> conversion_with_loss_prohibited = cmd_srch (argv[1], tbl_bool); if (!isstr (argv[2])) return OK; qp -> conversion_with_loss_crit = txt2crit (argv[2]); return OK; case Q_UA_ID: if (!isstr (argv[1])) return OK; qp->ua_id = strdup (argv[1]); return OK; case Q_PP_CONT_CORR: if (!isstr (argv[1])) return OK; qp -> pp_content_correlator = strdup (argv[1]); return OK; case Q_GEN_CONT_CORR: if (!isstr(argv[1])) return OK; qp -> general_content_correlator = hex2qb (argv[1]); if (!isstr (argv[2])) return OK; qp -> content_correlator_crit = txt2crit (argv[2]); return OK; case Q_ORIG_RETURN_ADDRESS: return txt2fname (&qp -> originator_return_address, &qp -> originator_return_address_crit, argv + 1, argc -1); case Q_FORWARDING_REQUEST: if (!isstr (argv[0])) return OK; qp -> forwarding_request = txt2int (argv[1]); if (!isstr (argv[2])) return OK; qp -> forwarding_request_crit = txt2crit (argv[2]); return OK; case Q_ORIGINATOR_CERT: if (!isstr (argv[1])) return OK; qp -> originator_certificate = hex2qb (argv[1]); if (!isstr (argv[2])) return OK; qp -> originator_certificate_crit = txt2crit (argv[2]); return OK; case Q_ALGORITHM_ID: if (!isstr (argv[1])) return OK; qp -> algorithm_identifier = hex2qb (argv[1]); if (!isstr (argv[2])) return OK; qp -> algorithm_identifier_crit = txt2crit (argv[2]); return OK; case Q_MESSAGE_ORIGIN_AUTH_CHECK: if (!isstr (argv[1])) return OK; qp -> message_origin_auth_check = hex2qb (argv[1]); if (!isstr (argv[2])) return OK; qp -> message_origin_auth_check_crit = txt2crit (argv[2]); return OK; case Q_SECURITY_LABEL: if (!isstr (argv[1])) return OK; qp -> security_label = hex2qb (argv[1]); if (!isstr (argv[2])) return OK; qp -> security_label_crit = txt2crit (argv[2]); return OK; case Q_PROOF_OF_SUB: if (!isstr (argv[1])) return OK; qp -> proof_of_submission_request = txt2int (argv[1]); if (!isstr (argv[2])) return OK; qp -> proof_of_submission_crit = txt2crit (argv[2]); return OK; case Q_MESSAGE_EXTENSIONS: { Extension *ext, **extp; ext = txt2extension (&argv[1], argc - 1); for (extp = &qp-> per_message_extensions; *extp; extp = &(*extp) -> ext_next) continue; *extp = ext; } return OK; case Q_INCHANNEL: if (!isstr (argv[1])) return NOTOK; if (qp -> inbound == NULL) qp->inbound = list_rchan_new (NULLCP, argv[1]); else list_rchan_schan (qp->inbound, argv[1]); return OK; case Q_INHOST: if (!isstr (argv[1])) return NOTOK; if (qp -> inbound == NULL) qp -> inbound = list_rchan_new (argv[1], NULLCP); else list_rchan_ssite (qp -> inbound, argv[1]); return OK; case Q_MSGID: if (txt2mpduid (&qp->msgid, &argv[1], argc - 1) == NOTOK) return NOTOK; return OK; case Q_TRACE: if (txt2trace (&qp->trace, &argv[1], argc - 1) == NOTOK) return NOTOK; return OK; case Q_DL_EXP_HISTORY: return txt2dlexp (&qp -> dl_expansion_history, argv + 1, argc - 1); case Q_DL_EXP_HIST_CRIT: if (!isstr (argv[1])) return OK; qp -> dl_expansion_history_crit = txt2int (argv[1]); return OK; case Q_QUEUETIME: if (!isstr (argv[1])) return OK; return (txt2time (argv[1], &qp->queuetime)); case Q_DEPARTIME: if (!isstr (argv[1])) return OK; return (txt2time (argv[1], &qp->departime)); case Q_END: return Q_END; } PP_LOG (LLOG_EXCEPTIONS, ("Lib/pp/txt2q Unable to parse '%s'", argv[0])); return NOTOK; } static int Q_txt2msgtype (msgtype, keywd) /* Txt -> Message-type */ int *msgtype; char *keywd; { PP_DBG (("Lib/pp/Q_txt2msgtype(%s)", keywd)); switch (*msgtype = cmd_srch (keywd, qtbl_mt_type)) { case MT_UMPDU: case MT_PMPDU: case MT_DMPDU: return OK; } return NOTOK; } static int Q_txt2priority (priority, keywd) /* Txt -> Priority */ int *priority; char *keywd; { PP_DBG (("Lib/pp/Q_txt2priority(%s)", keywd)); switch (*priority = cmd_srch (keywd, qtbl_priority)) { case PRIO_NORMAL: case PRIO_NONURGENT: case PRIO_URGENT: return OK; } return NOTOK; } struct qbuf *hex2qb (hexstr) char *hexstr; { char *str; int n; struct qbuf *qb; str = smalloc ((n = strlen (hexstr)) / 2); n = implode ((unsigned char *)str, hexstr, n); qb = str2qb (str, n, 1); free (str); return qb; } int txt2fname (fname, crit, argv, argc) FullName **fname; char *crit; char **argv; int argc; { FullName *fn; *fname = fn = (FullName *) smalloc (sizeof *fn); if (argc < 1) return OK; if (*argv) fn -> fn_addr = strdup (*argv); argv ++; argc --; if (argc < 1) return OK; if (*argv) fn -> fn_dn = strdup (*argv); argv ++; argc --; if (argc < 1) return OK; if (*argv) *crit = txt2int (*argv); return OK; } int txt2dlexp (dlp, argv, argc) DLHistory **dlp; char **argv; int argc; { if (argc < 1) return OK; for (;*dlp; dlp = &(*dlp) -> dlh_next) continue; *dlp = (DLHistory *) smalloc (sizeof **dlp); bzero ((char *)*dlp , sizeof **dlp); if (argc < 1) return OK; if (*argv) (*dlp) -> dlh_addr = strdup (*argv); argv ++; argc --; if (argc < 1) return OK; if (*argv) (*dlp) -> dlh_dn = strdup (*argv); argv ++; argc --; if (argc < 1) return OK; txt2time (*argv, &(*dlp) -> dlh_time); return OK; }