|
|
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: 5634 (0x1602)
Types: TextFile
Names: »tb_rtsparams.c«
└─⟦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«
/* 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);
}