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 t

⟦da98738ec⟧ TextFile

    Length: 9050 (0x235a)
    Types: TextFile
    Names: »txt2q.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/txt2q.c« 

TextFile

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