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 r

⟦f1cd4a27b⟧ TextFile

    Length: 3324 (0xcfc)
    Types: TextFile
    Names: »rtsping84.c«

Derivation

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

TextFile

/* rtsping.c: test rts connections */

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

/*
 * $Header: /cs/research/pp/hubris/pp-beta/Chans/x40084/RCS/rtsping84.c,v 5.0 90/09/20 15:56:09 pp Exp Locker: pp $
 *
 * $Log:	rtsping84.c,v $
 * Revision 5.0  90/09/20  15:56:09  pp
 * rcsforce : 5.0 public release
 * 
 */



#include "util.h"
#include "rtsparams.h"
#include "chan.h"
#include <isode/rtsap.h>
#include "RTS84-types.h"

char    	*myname;
char    	*channame = "rtsping84";
CHAN    	*mychan;

main (argc, argv)
int     argc;
char    **argv;
{
	extern char     *optarg;
	extern int      optind;
	int     opt;

	myname = argv[0];

	while((opt = getopt(argc, argv, "c:")) != EOF)
		switch (opt) {
		    case 'c':
			channame = optarg;
			break;

		    default:
			fprintf (stderr, "Usage: %s", myname);
			break;
		}
	argc -= optind;
	argv += optind;

	sys_init (channame);
	rename_log (myname);

	if ((mychan = ch_nm2struct (channame)) == NULL)
		adios (NULLCP, "No such channel '%s'", channame);

	while (argc-- > 0)
		rtsping (*argv++);
	exit (0);
}



static rtsping (remote_site)
char    *remote_site;
{
	RtsParams *rp;
	int     sd;
	PE      pe;
	struct RtSAPaddr 			rtsaps, rtsaps2;
	struct RtSAPaddr 			*rtsap = &rtsaps, 
						*rtsap2 = &rtsaps2;
	struct SSAPaddr *sa;
	struct RtSAPindication                  rtis;
	struct RtSAPconnect                     rtcs;
	register struct RtSAPconnect            *rtc = &rtcs;
	register struct RtSAPindication         *rti = &rtis;
	register struct RtSAPabort              *rta = &rti->rti_abort;
	struct type_RTS84_Request       	*req;
	char					err_buf[BUFSIZ];

	if ((rp = tb_rtsparams (mychan, remote_site)) == NULL)
		adios (NULLCP,
			"Can't find RTS information for '%s'", remote_site);

	if (rts_encode_request (&pe, &req, 
		rp -> our_name, rp -> our_passwd) == NOTOK)
			adios (NULLCP, "Can't construct parameters");

	PP_PDU (print_RTS84_Request, pe, "RTS84.Request", PDU_WRITE);

	if (rp -> their_address == NULLCP)
		adios (NULLCP, "Missing remote PSAP for '%s'", remote_site);

	if ((sa = str2saddr (rp -> their_address)) == NULLSA)
		adios (NULLCP, "Illegal remote PSAP '%s'", rp -> their_address);

	rtsap -> rta_addr = *sa;
	rtsap -> rta_port = htons (1);

	if (rp -> our_address) {
		if ((sa = str2saddr (rp -> our_address)) == NULLSA)
			adios (NULLCP, "Illegal local PSAP '%s'",
			       rp -> our_address);
		rtsap2 -> rta_addr = *sa;
		rtsap2 -> rta_port = 0;
	}
	else    rtsap2 = NULLRtA;


	PP_NOTICE (("Connecting to site %s", remote_site));

	if (RtBeginRequest2 (rtsap, rtsap2, rp -> rts_mode, RTS_INITIATOR,
			     pe, rtc, rti) == NOTOK)
		rts_adios (rta, "RT-BEGIN.REQUEST");

	if (rtc -> rtc_result != RTS_ACCEPT) { 
		(void) sprintf (err_buf, "Connection failed: Reason='%s'", 
			RtErrString (rtc -> rtc_result));
		rts_adios (rta, err_buf);
	} 

	sd = rtc -> rtc_sd;

	parameter_checks (rtc->rtc_data, rp -> their_name,
                              rp -> their_passwd, remote_site, FALSE);

	PP_PDU (print_RTS84_Request, rtc -> rtc_data, "RTS84.Response",
		PDU_READ);

	RTCFREE (rtc);

	if (RtEndRequest (sd, rti) == NOTOK)
		rts_adios (rta, "RT-END.REQUEST");

	PP_NOTICE (("Connection successfully terminated"));
}