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