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

⟦22f25fb89⟧ TextFile

    Length: 5634 (0x1602)
    Types: TextFile
    Names: »tb_rtsparams.c«

Derivation

└─⟦2d1937cfd⟧ Bits:30007241 EUUGD22: P.P 5.0
    └─⟦dc59850a2⟧ »EurOpenD22/pp5.0/pp-5.tar.Z« 
        └─⟦e5a54fb17⟧ 
            └─⟦this⟧ »pp-5.0/Lib/table/tb_rtsparams.c« 

TextFile

/* tb_rtsparams.c: fetch X.400 RTS parameters */

# ifndef lint
static char Rcsid[] = "@(#)$Header: /cs/research/pp/hubris/pp-beta/Lib/table/RCS/tb_rtsparams.c,v 5.0 90/09/20 16:15:57 pp Exp Locker: pp $";
# endif

/*
 * $Header: /cs/research/pp/hubris/pp-beta/Lib/table/RCS/tb_rtsparams.c,v 5.0 90/09/20 16:15:57 pp Exp Locker: pp $
 *
 * $Log:	tb_rtsparams.c,v $
 * Revision 5.0  90/09/20  16:15:57  pp
 * rcsforce : 5.0 public release
 * 
 */



#include "util.h"
#include "chan.h"
#include "rtsparams.h"
#include <isode/rtsap.h>
#include <isode/cmd_srch.h>



static void conv_entry();



CMD_TABLE rts_tbl[] = {
#define RTSP_LMTA       1
	"lmta",         RTSP_LMTA,
#define RTSP_RMTA       2
	"rmta",         RTSP_RMTA,
#define RTSP_LPASS      3
	"lpass",        RTSP_LPASS,
#define RTSP_RPASS      4
	"rpass",        RTSP_RPASS,
#define RTSP_RPPNAME    5
	"rname",        RTSP_RPPNAME,
#define RTSP_MDINFO     6
	"mdinfo",       RTSP_MDINFO,
#define RTSP_LPSAP      7
	"lpsap",        RTSP_LPSAP,
#define RTSP_RPSAP      8
	"rpsap",        RTSP_RPSAP,
#define RTSP_MODE       9
	"mode",         RTSP_MODE,
#define RTSP_TYPE       10
	"type",         RTSP_TYPE,
#define RTSP_OTHER      11
	"other",        RTSP_OTHER,
#define RTSP_TRYNEXT	12
	"trynext",	RTSP_TRYNEXT,
#define RTSP_TRACE	13
	"tracing",	RTSP_TRACE,
	NULLCP,         -1
	};




/* ---------------------  Begin  Routines  -------------------------------- */




RtsParams *tb_rtsparams (chan, remote_site)
CHAN    *chan;
char    *remote_site;
{
	Table		*tbl;
	RtsParams	*rp;
	char		buffer[BUFSIZ];

	if ((tbl = chan -> ch_table) == NULLTBL) {
		PP_LOG (LLOG_EXCEPTIONS,
			("Channel %s does not have a table", chan -> ch_name));
		return NULL;
	}



	/* --- initialisation --- */
	rp = (RtsParams *) smalloc (sizeof *rp);
	bzero ((char *)rp, sizeof *rp);
	rp -> rts_mode   = RTS_MONOLOGUE;
	rp -> type 	 = RTSP_1984;
	rp -> trace_type = RTSP_TRACE_ALL;
	rp -> our_passwd = strdup ("\0");
	rp -> our_name   = strdup ("\0");


	if (tb_k2val (tbl, "default", buffer) == OK)
		conv_entry (rp, buffer, "default");

	if (lexequ ("default", remote_site) == 0)
			return rp;

	if (tb_k2val (tbl, remote_site, buffer) == NOTOK) {
		RPfree (rp);
		return NULL;
	}


	conv_entry (rp, buffer, remote_site);
	return rp;
}




static void conv_entry (rp, buffer, remote_site)
RtsParams *rp;
char	*buffer;
char	*remote_site;
{
	int     argc;
	char    *argv[100];
	int     n;

	if ((argc = str2arg (buffer, 100, argv)) < 2) {
		PP_LOG (LLOG_EXCEPTIONS,
			("Badly formatted table entry for %s", remote_site));
		return;
	}

	for (n = 0; n < argc; ) {
		if ( strcmp (argv[n], "=") != 0) {
			PP_LOG (LLOG_EXCEPTIONS,
				("Bad value %s for %s", argv[n], remote_site));
			n ++;
			continue;
		}

		n ++;
		switch (cmd_srch (argv[n], rts_tbl) ) {
		    case RTSP_LMTA:
			if (rp -> our_name)
				free (rp -> our_name);
			rp -> our_name = strdup (argv[n+1]);
			break;
		    case RTSP_RMTA:
			if (rp -> their_name)
				free (rp -> their_name);
			rp -> their_name = strdup (argv[n+1]);
			break;
		    case RTSP_LPASS:
			if (rp -> our_passwd)
				free (rp -> our_passwd);
			rp -> our_passwd = strdup (argv[n+1]);
			break;
		    case RTSP_RPASS:
			if (rp -> their_passwd)
				free (rp -> their_passwd);
			rp -> their_passwd = strdup (argv[n+1]);
			break;
		    case RTSP_RPPNAME:
			if (rp -> their_internal_ppname)
				free (rp -> their_internal_ppname);
			rp -> their_internal_ppname = strdup (argv[n+1]);
			break;
		    case RTSP_MDINFO:
			if (rp -> md_info)
				free (rp -> md_info);
			rp -> md_info = strdup (argv[n+1]);
			break;
		    case RTSP_LPSAP:
			if (rp -> our_address)
				free (rp -> our_address);
			rp -> our_address = strdup (argv[n+1]);
			break;
		    case RTSP_RPSAP:
			if (rp -> their_address)
				free (rp -> their_address);
			rp -> their_address = strdup (argv[n+1]);
			break;
		    case RTSP_MODE:
			if (lexequ (argv[n+1], "twa") == 0)
				rp -> rts_mode = RTS_TWA;
			else if (lexequ (argv[n+1], "mon") == 0)
				rp -> rts_mode = RTS_MONOLOGUE;
			break;
		    case RTSP_TYPE:
			if (lexequ (argv[n+1], "1988-X410") == 0)
				rp -> type = RTSP_1988_X410MODE;
			else if (lexequ (argv[n+1], "1988-NORMAL") == 0 ||
				 lexequ (argv[n+1], "1988") == 0)
				rp -> type = RTSP_1988_NORMAL;
			else if (lexequ (argv[n+1], "1984") == 0)
				rp -> type = RTSP_1984;
			break;
		    case RTSP_OTHER:
			if (rp -> other_info)
				free (rp -> other_info);
			rp -> other_info = strdup (argv[n+1]);
			break;

		    case RTSP_TRACE:
			if (lexequ (argv[n+1], "admd") == 0)
				rp -> trace_type = RTSP_TRACE_ADMD;
			else if (lexequ (argv[n+1], "nointernal") == 0)
				rp -> trace_type = RTSP_TRACE_NOINT;
			else if (lexequ (argv[n+1], "local-internal") == 0)
				rp -> trace_type = RTSP_TRACE_LOCALINT;
			else rp -> trace_type = RTSP_TRACE_ALL;
			break;
		    case RTSP_TRYNEXT:
			if (rp -> try_next)
				free (rp -> try_next);
			rp -> try_next = strdup (argv[n+1]);
			break;
		    default:
			PP_LOG (LLOG_EXCEPTIONS, ("Unknown keyword %s",
						  argv[n]));
			break;
		}
		n += 2;
	}
}





void RPfree (rp)
RtsParams *rp;
{
	if (rp == NULL)			return;
	if (rp->their_name)		free (rp->their_name);
	if (rp->their_passwd)		free (rp->their_passwd);
	if (rp->their_internal_ppname)	free (rp->their_internal_ppname);
	if (rp->their_address)		free (rp->their_address);
	if (rp->our_name)		free (rp->our_name);
	if (rp->our_passwd)		free (rp->our_passwd);
	if (rp->our_address)		free (rp->our_address);
	if (rp->md_info)		free (rp->md_info);
	if (rp->try_next)		free (rp->try_next);
	if (rp->other_info)		free (rp->other_info);
	free ((char *)rp);
}