|
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 p
Length: 5961 (0x1749) Types: TextFile Names: »probe.c«
└─⟦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«
/* 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; }