|
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 a
Length: 4853 (0x12f5) Types: TextFile Names: »assoc.c«
└─⟦2d1937cfd⟧ Bits:30007241 EUUGD22: P.P 5.0 └─⟦dc59850a2⟧ »EurOpenD22/pp5.0/pp-5.tar.Z« └─⟦e5a54fb17⟧ └─⟦this⟧ »pp-5.0/Src/qmgr/assoc.c«
/* assoc.c: association functions for clients */ # ifndef lint static char Rcsid[] = "@(#)$Header: /cs/research/pp/hubris/pp-beta/Src/qmgr/RCS/assoc.c,v 5.0 90/09/20 16:20:59 pp Exp Locker: pp $"; # endif /* * $Header: /cs/research/pp/hubris/pp-beta/Src/qmgr/RCS/assoc.c,v 5.0 90/09/20 16:20:59 pp Exp Locker: pp $ * * $Log: assoc.c,v $ * Revision 5.0 90/09/20 16:20:59 pp * rcsforce : 5.0 public release * */ #include "util.h" #include <isode/rosy.h> #include "types.h" #include "qmgr.h" int assoc_start (myservice, fd) char *myservice; int *fd; { extern char *pptsapd_addr; struct PSAPctxlist pcs; register struct PSAPctxlist *pc = &pcs; struct SSAPref sfs; register struct SSAPref *sf; struct TSAPaddr *ta; static struct PSAPaddr pas, *pa; OID ctx, pci; struct AcSAPconnect accs; register struct AcSAPconnect *acc = &accs; struct AcSAPindication acis; register struct AcSAPindication *aci = &acis; register struct AcSAPabort *aca = &aci -> aci_abort; struct RoSAPindication rois; register struct RoSAPindication *roi = &rois; register struct RoSAPpreject *rop = &roi -> roi_preject; int result; if (pa == NULLPA) { if ((pa = str2paddr (pptsapd_addr)) == NULLPA) { advise (LLOG_EXCEPTIONS, NULLCP, "Can't translate %s", pptsapd_addr); return NOTOK; } pas = *pa; pa = &pas; } ta = &pa -> pa_addr.sa_addr; ta -> ta_selectlen = str2sel (myservice, 1, ta -> ta_selector, TSSIZE); if ((ctx = oid_cpy (CHANNEL_AC)) == NULLOID) { advise (LLOG_EXCEPTIONS, NULLCP, "out of memory"); return NOTOK; } if ((pci = oid_cpy (CHANNEL_PCI)) == NULLOID) { advise (LLOG_EXCEPTIONS, NULLCP, "out of memory"); return NOTOK; } pc -> pc_nctx = 1; pc -> pc_ctx[0].pc_id = 1; pc -> pc_ctx[0].pc_asn = pci; pc -> pc_ctx[0].pc_atn = NULLOID; if ((sf = addr2ref (PLocalHostName ())) == NULL) { sf = &sfs; (void) bzero ((char *) sf, sizeof *sf); } switch (result = AcAsynAssocRequest (ctx, NULLAEI, NULLAEI, NULLPA, pa, pc, NULLOID, 0, ROS_MYREQUIRE, SERIAL_NONE, 0, sf, NULLPEP, 0, NULLQOS, acc, aci, 1)) { case NOTOK: acs_advise (aca, "A-ASSOCIATE.REQUEST"); return NOTOK; #ifdef CONNECTING_1 case CONNECTING_1: case CONNECTING_2: *fd = acc -> acc_sd; ACCFREE (acc); PP_TRACE (("Association initiated")); return result; #else case OK: *fd = acc -> acc_sd; ACCFREE (acc); PP_TRACE (("Association initiated")); return OK; #endif case DONE: if (acc -> acc_result != ACS_ACCEPT) { advise (LLOG_EXCEPTIONS, NULLCP, "Association rejected: [%s]", AcErrString (acc -> acc_result)); return NOTOK; } *fd = acc -> acc_sd; ACCFREE (acc); PP_TRACE (("Association established")); if (RoSetService (*fd, RoPService, roi) == NOTOK) { ros_advise (rop, "set RO/PS fails"); return NOTOK; } PP_TRACE (("Service set")); return DONE; default: adios (NULLCP, "Bad response from AcAsynAssocRequest"); return NOTOK; } } int acsap_retry (fd) int fd; { struct AcSAPconnect accs; register struct AcSAPconnect *acc = &accs; struct AcSAPindication acis; register struct AcSAPindication *aci = &acis; register struct AcSAPabort *aca = &aci -> aci_abort; struct RoSAPindication rois; register struct RoSAPindication *roi = &rois; register struct RoSAPpreject *rop = &roi -> roi_preject; int result; PP_TRACE (("acsap_retry(%d)", fd)); switch (result = AcAsynRetryRequest (fd, acc, aci)) { #ifdef CONNECTING_1 case CONNECTING_1: case CONNECTING_2: ACCFREE (acc); return result; #else case OK: ACCFREE (acc); return OK; #endif case NOTOK: acs_advise (aca, "A-ASSOCIATE.REQUEST"); return NOTOK; case DONE: if (acc -> acc_result != ACS_ACCEPT) { advise (LLOG_EXCEPTIONS, NULLCP, "Association Rejected: [%s]", AcErrString (acc -> acc_result)); return NOTOK; } ACCFREE (acc); if (RoSetService (fd, RoPService, roi) == NOTOK) { ros_advise (rop, "set RO/PS fails"); return NOTOK; } return DONE; default: adios (NULLCP, "Bad response from AcAsynRetryRequest"); return NOTOK; } } int assoc_release (sd) int sd; { struct AcSAPrelease acrs; register struct AcSAPrelease *acr = &acrs; struct AcSAPindication acis; register struct AcSAPindication *aci = &acis; register struct AcSAPabort *aca = &aci -> aci_abort; #ifdef CONNECTING_1 if (AcRelRequest (sd, ACF_NORMAL, NULLPEP, 0, NOTOK, acr, aci) == NOTOK) { #else if (AcRelRequest (sd, ACF_NORMAL, NULLPEP, 0, acr, aci) == NOTOK) { #endif acs_advise (aca, "A-RELEASE.REQUEST"); return DONE; } if (!acr -> acr_affirmative) { (void) AcUAbortRequest (sd, NULLPEP, 0, aci); advise (LLOG_NOTICE, NULLCP, "Release rejected by peer: %d", acr -> acr_reason); } ACRFREE (acr); PP_TRACE (("Association released")); return DONE; }