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 p

⟦3d6d90009⟧ TextFile

    Length: 5961 (0x1749)
    Types: TextFile
    Names: »probe.c«

Derivation

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

TextFile

/* probe.c: Generates a probe */

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

/*
 * $Header: /cs/research/pp/hubris/pp-beta/Tools/probe/RCS/probe.c,v 5.0 90/09/20 16:30:27 pp Exp Locker: pp $
 *
 * $Log:	probe.c,v $
 * Revision 5.0  90/09/20  16:30:27  pp
 * rcsforce : 5.0 public release
 * 
 */



#include "head.h"
#include "prm.h"
#include "q.h"
#include <isode/cmd_srch.h>



/* --- externals --- */
extern char				*loc_dom_site,
					*local_822_chan,
					*cont_822;
extern ADDR				*make_adr_new();


/* --- queue variables --- */
static struct prm_vars                  PRMstruct;
static Q_struct                         Qstruct;
static struct prm_vars                  *PrmPtr = &PRMstruct;
Q_struct                                *QuePtr = &Qstruct;


/* --- other statics  --- */
static char				*myname = NULLCP;

#define	OPT_TO				1
#define OPT_SIZE			2
#define	OPT_EIT				3
#define	OPT_UAID			4
#define	OPT_IMPCONV			5
#define OPT_ALTRECIP			6

static int				param = OPT_TO;

CMD_TABLE  probe_options[] = { /* probe commandline options */
	"-t",				OPT_TO,
	"-s",				OPT_SIZE,
	"-e",				OPT_EIT,
	"-u",				OPT_UAID,
	"-i",				OPT_IMPCONV,
	"-a",				OPT_ALTRECIP,
	0,				-1
	};



static void		probe_set_rest(), probe_checks(), usage();	






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




main (argc, argv)
int     argc;
char    **argv;
{
	char	*filename;
	ADDR	*ap;
	int	retval;


	bzero ((char *)PrmPtr, sizeof(*PrmPtr));
	bzero ((char *)QuePtr, sizeof(*QuePtr));
	(void) set_from();

	myname = argv[0];

	if (argc > 16)
		usage();

	if (argc == 1) {
		(void) prompt_probe_stdin();	
		probe_process();
	}
		

	while (--argc > 0) {
		argv ++;
		if (**argv == '-')
			switch (param = cmd_srch (*argv, probe_options)) {

			case OPT_TO:
			case OPT_SIZE:
			case OPT_EIT:
			case OPT_UAID:
				break;

			case OPT_IMPCONV:
				QuePtr -> implicit_conversion = YES;
				break;
			case OPT_ALTRECIP:
				QuePtr->alternate_recip_allowed = YES;
				break;
			default:
                        	printf ("\n***Error: Unknown option '%s'\n",
					*argv);
                        	usage();
			}   /* -- end of switch -- */

		else {
			switch (param) {
			case OPT_TO:
				ap = make_adr_new (*argv, AD_RECIPIENT);
                		adr_add (&QuePtr -> Raddress, ap);
				break;
			case OPT_SIZE:
				QuePtr -> msgsize = atoi(*argv);
				break;
			case OPT_EIT:
				retval = set_encoded (*argv);
				if (retval == NOTOK) {
                        		printf ("\n***Error: eits! '%s'\n",
					*argv);
                        		usage();
				}
				break;
			case OPT_UAID:
				QuePtr -> ua_id = strdup (*argv);
				break;
			default:
                        	printf ("\n***Error: Unknown option '%s'\n",
					*argv);
				usage();

			}  /* -- end of switch -- */

		}   /* -- end of else -- */

	}  /* -- end of while -- */

	
	probe_process();
}






/* ---------------------  Static  Routines  ------------------------------- */






static void usage()
{
	printf ("\n\n");
	printf ("Usage:   %s\n", myname); 
	printf ("	  	[-t Recipient]\n");
	printf ("		[-s MessageSize]\n");
	printf ("	  	[-e EncodedInfoTypes]\n");
	printf ("		[-u UAid]\n");
	printf ("	  	[-i ImplicitConversion]\n");
	printf ("	  	[-a AlternateRecipientAllowed]\n");
	printf ("\n\n");
	exit (1);
}





static int probe_process()
{
	int	retval; 

	(void) probe_checks();

	sys_init (myname);
	if (or_init() == NOTOK)	 exit (1);
	or_myinit();
	(void) probe_set_rest();

	printf ("Processing ...\n");
	retval = probe_submit();

	if (rp_isbad (retval)) {
		printf ("*** Error: Unable to submit ***\n\n");
		exit (1);
	}
		
	printf ("Submitted OK\n\n");
	exit (0);
}




static void probe_set_rest()
{
	prm_init (PrmPtr);
        PrmPtr->prm_opts = PRM_ACCEPTALL;

	QuePtr -> msgtype	= MT_PMPDU;
	QuePtr -> cont_type	= strdup(cont_822);
	QuePtr -> priority	= PRIO_URGENT;
	QuePtr -> inbound 	= list_rchan_new (loc_dom_site, local_822_chan);

	if (QuePtr -> msgsize == 0)
	QuePtr -> msgsize 	= 500;

	if (QuePtr -> encodedinfo.eit_types == 0)
		if (set_encoded (NULLCP) == NOTOK) {
			printf ("\n***Error: Unable to set eit\n");
			exit (1);
		}
	(void) MPDUid_new (&QuePtr -> msgid);
}




static void probe_checks()
{

	ADDR	*ap;
	int	err = FALSE;

        if (isstr (QuePtr -> ua_id) && strlen (QuePtr -> ua_id) > 16) {
                printf ("*** Error:  Invalid UA size (max 16) '%s' ***\n",
                        QuePtr -> ua_id);
               	exit (1);
	}

        if (QuePtr -> msgsize < 0) {
                printf ("*** Error:  Invalid Message Size '%d' ***\n",
                        QuePtr -> msgsize);
               	exit (1);
	}
}




static int probe_submit()
{
	RP_Buf          rp;
	ADDR            *ap;
	int		submit_status = RP_BAD;

	if (rp_isbad (io_init(rp))) {
		printf ("*** Error: probe_submit:  io_init\n");
		exit (1);
	}

	if (rp_isbad (io_wprm (PrmPtr, &rp))) {
		printf ("*** Error: probe_submit:  io_wprm\n");
		goto  probe_submit_end;
	}

	if (rp_isbad (io_wrq (QuePtr, &rp))) {
		printf ("*** Error: probe_submit:  io_wrq\n");
		goto  probe_submit_end;
	}

	if (rp_isbad (io_wadr (QuePtr->Oaddress, AD_ORIGINATOR, &rp))) {
		printf ("*** Error: probe_submit:  io_wadr ('%s')\n",
			QuePtr->Oaddress->ad_value);
		goto  probe_submit_end;
	}


	for (ap = QuePtr->Raddress; ap; ap = ap->ad_next) {

		/* -- Red Book X.411 Clause 4.3.2.2 -- */ 
		ap -> ad_mtarreq = AD_MTA_CONFIRM;
		ap -> ad_usrreq = AD_USR_CONFIRM;

		if (rp_isbad (io_wadr (ap, AD_RECIPIENT, &rp))) {
			printf ("*** Error: probe_submit:  io_wadr ('%s')\n",
				ap->ad_value);
			goto  probe_submit_end;
		}
	}


	if (rp_isbad (io_adend (&rp))) {
		printf ("*** Error: probe_submit:  io_adend\n");
		goto  probe_submit_end;
	}


	sleep (20);
	submit_status = RP_OK;

probe_submit_end: ;
	io_end (submit_status);
	return submit_status;
}