|
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 f
Length: 4349 (0x10fd) Types: TextFile Names: »ftamrelease1.c«
└─⟦3d0c2be1b⟧ Bits:30001254 ISODE-5.0 Tape └─⟦eba4602b1⟧ »./isode-5.0.tar.Z« └─⟦d3ac74d73⟧ └─⟦this⟧ »isode-5.0/ftam/ftamrelease1.c«
/* ftamrelease1.c - FPM: initiate release */ #ifndef lint static char *rcsid = "$Header: /f/osi/ftam/RCS/ftamrelease1.c,v 6.0 89/03/18 23:30:54 mrose Rel $"; #endif /* * $Header: /f/osi/ftam/RCS/ftamrelease1.c,v 6.0 89/03/18 23:30:54 mrose Rel $ * * * $Log: ftamrelease1.c,v $ * Revision 6.0 89/03/18 23:30:54 mrose * Release 5.0 * */ /* * NOTICE * * Acquisition, use, and distribution of this module and related * materials are subject to the restrictions of a license agreement. * Consult the Preface in the User's Manual for the full terms of * this agreement. * */ /* LINTLIBRARY */ #include <stdio.h> #include <signal.h> #include "fpkt.h" /* \f F-TERMINATE.REQUEST */ int FTerminateRequest (sd, sharedASE, ftr, fti) int sd; PE sharedASE; struct FTAMrelease *ftr; struct FTAMindication *fti; { SBV smask; int result; register struct ftamblk *fsb; missingP (ftr); missingP (fti); smask = sigioblock (); ftamPsig (fsb, sd); result = FTerminateRequestAux (fsb, sharedASE, ftr, fti); (void) sigiomask (smask); return result; } /* \f */ static int FTerminateRequestAux (fsb, sharedASE, ftr, fti) register struct ftamblk *fsb; PE sharedASE; struct FTAMrelease *ftr; struct FTAMindication *fti; { int result; PE pe; struct AcSAPrelease acrs; register struct AcSAPrelease *acr = &acrs; struct AcSAPindication acis; register struct AcSAPindication *aci = &acis; register struct AcSAPabort *aca = &aci -> aci_abort; struct type_FTAM_PDU *pdu; register struct type_FTAM_F__TERMINATE__response *rsp; if (!(fsb -> fsb_flags & FSB_INIT)) return ftamlose (fti, FS_GEN (fsb), 0, NULLCP, "not initiator"); if (fsb -> fsb_state != FSB_INITIALIZED) return ftamlose (fti, FS_GEN (fsb), 0, NULLCP, "not in the initialized state"); bzero ((char *) acr, sizeof *acr); bzero ((char *) ftr, sizeof *ftr); pe = NULLPE; if ((pdu = (struct type_FTAM_PDU *) calloc (1, sizeof *pdu)) == NULL) { (void) ftamlose (fti, FS_GEN (fsb), 1, NULLCP, "out of memory"); out: ; if (pe) pe_free (pe); if (pdu) free_FTAM_PDU (pdu); if (fti -> fti_abort.fta_action == FACTION_PERM) freefsblk (fsb); return NOTOK; } pdu -> offset = type_FTAM_PDU_f__terminate__request; if (sharedASE && (pdu -> un.f__terminate__request = shared2fpm (fsb, sharedASE, fti)) == NULL) goto out; if (encode_FTAM_PDU (&pe, 1, 0, NULLCP, pdu) == NOTOK) { (void) ftamlose (fti, FS_GEN (fsb), 1, NULLCP, "error encoding PDU: %s", PY_pepy); goto out; } pe -> pe_context = fsb -> fsb_id; fsbtrace (fsb, (fsb -> fsb_fd, "A-RELEASE.REQUEST", "F-TERMINATE-request", pe, 0)); result = AcRelRequest (fsb -> fsb_fd, ACF_NORMAL, &pe, 1, acr, aci); pe_free (pe); pe = NULLPE; free_FTAM_PDU (pdu); pdu = NULL; if (result == NOTOK) { if (aca -> aca_source == ACA_USER) return acs2ftamabort (fsb, aca, fti); (void) acs2ftamlose (fsb, fti, "AcRelRequest", aca); goto out; } if (!acr -> acr_affirmative) { result = fpktlose (fsb, fti, FS_ACS_MGMT, NULLCP, "other side refused to release association"); goto done; } fsb -> fsb_fd = NOTOK; if (acr -> acr_ninfo < 1 || (pe = acr -> acr_info[0]) == NULLPE) { result = fpktlose (fsb, fti, FS_PRO_ERR, NULLCP, NULLCP); goto done; } if (decode_FTAM_PDU (pe, 1, NULLIP, NULLVP, &pdu) == NOTOK) result = fpktlose (fsb, fti, FS_PRO_ERRMSG, NULLCP, "unable to parse PDU: %s", PY_pepy); else { if (pdu -> offset != type_FTAM_PDU_f__terminate__response) { result = fpktlose (fsb, fti, FS_PRO_ERRPROC, NULLCP, "expecting F-TERMINATE-response, got %d", pdu -> offset); goto done; } rsp = pdu -> un.f__terminate__response; fsbtrace (fsb, (fsb -> fsb_fd, "A-RELEASE.CONFIRMATION", "F-TERMINATE-response", pe, 1)); if (rsp -> shared__ASE__information && fpm2shared (fsb, rsp -> shared__ASE__information, &ftr -> ftr_sharedASE, fti) == NOTOK) goto done; if (rsp -> charging && fpm2chrg (fsb, rsp -> charging, &ftr -> ftr_charges, fti) == NOTOK) goto done; result = OK; } done: ; if (pdu) free_FTAM_PDU (pdu); ACRFREE (acr); freefsblk (fsb); return result; }