|
|
1.1 ! root 1: /* ftamrelease2.c - FPM: respond to release */ ! 2: ! 3: #ifndef lint ! 4: static char *rcsid = "$Header: /f/osi/ftam/RCS/ftamrelease2.c,v 7.0 89/11/23 21:53:50 mrose Rel $"; ! 5: #endif ! 6: ! 7: /* ! 8: * $Header: /f/osi/ftam/RCS/ftamrelease2.c,v 7.0 89/11/23 21:53:50 mrose Rel $ ! 9: * ! 10: * ! 11: * $Log: ftamrelease2.c,v $ ! 12: * Revision 7.0 89/11/23 21:53:50 mrose ! 13: * Release 6.0 ! 14: * ! 15: */ ! 16: ! 17: /* ! 18: * NOTICE ! 19: * ! 20: * Acquisition, use, and distribution of this module and related ! 21: * materials are subject to the restrictions of a license agreement. ! 22: * Consult the Preface in the User's Manual for the full terms of ! 23: * this agreement. ! 24: * ! 25: */ ! 26: ! 27: ! 28: /* LINTLIBRARY */ ! 29: ! 30: #include <stdio.h> ! 31: #include <signal.h> ! 32: #include "fpkt.h" ! 33: ! 34: /* F-TERMINATE.RESPONSE */ ! 35: ! 36: int FTerminateResponse (sd, sharedASE, charging, fti) ! 37: int sd; ! 38: PE sharedASE; ! 39: struct FTAMcharging *charging; ! 40: struct FTAMindication *fti; ! 41: { ! 42: SBV smask; ! 43: int result; ! 44: register struct ftamblk *fsb; ! 45: ! 46: if (charging && charging -> fc_ncharge > NFCHRG) ! 47: return ftamlose (fti, FS_GEN_NOREASON, 0, NULLCP, ! 48: "too many charges"); ! 49: missingP (fti); ! 50: ! 51: smask = sigioblock (); ! 52: ! 53: ftamFsig (fsb, sd); ! 54: ! 55: result = FTerminateResponseAux (fsb, sharedASE, charging, fti); ! 56: ! 57: (void) sigiomask (smask); ! 58: ! 59: return result; ! 60: } ! 61: ! 62: /* */ ! 63: ! 64: static int FTerminateResponseAux (fsb, sharedASE, charging, fti) ! 65: register struct ftamblk *fsb; ! 66: PE sharedASE; ! 67: struct FTAMcharging *charging; ! 68: struct FTAMindication *fti; ! 69: { ! 70: int result; ! 71: PE pe; ! 72: struct AcSAPindication acis; ! 73: register struct AcSAPindication *aci = &acis; ! 74: register struct AcSAPabort *aca = &aci -> aci_abort; ! 75: register struct type_FTAM_PDU *pdu; ! 76: register struct type_FTAM_F__TERMINATE__response *rsp; ! 77: ! 78: pe = NULLPE; ! 79: if ((pdu = (struct type_FTAM_PDU *) calloc (1, sizeof *pdu)) == NULL) { ! 80: no_mem: ; ! 81: (void) ftamlose (fti, FS_GEN (fsb), 1, NULLCP, "out of memory"); ! 82: out: ; ! 83: if (pe) ! 84: pe_free (pe); ! 85: if (pdu) ! 86: free_FTAM_PDU (pdu); ! 87: if (fti -> fti_abort.fta_action == FACTION_PERM) ! 88: freefsblk (fsb); ! 89: return NOTOK; ! 90: } ! 91: pdu -> offset = type_FTAM_PDU_f__terminate__response; ! 92: if ((rsp = (struct type_FTAM_F__TERMINATE__response *) ! 93: calloc (1, sizeof *rsp)) == NULL) ! 94: goto no_mem; ! 95: pdu -> un.f__terminate__response = rsp; ! 96: if (sharedASE ! 97: && (rsp -> shared__ASE__information = ! 98: shared2fpm (fsb, sharedASE, fti)) == NULL) ! 99: goto out; ! 100: if (charging ! 101: && charging -> fc_ncharge > 0 ! 102: && (rsp -> charging = chrg2fpm (fsb, charging, fti)) == NULL) ! 103: goto out; ! 104: ! 105: if (encode_FTAM_PDU (&pe, 1, 0, NULLCP, pdu) == NOTOK) { ! 106: (void) ftamlose (fti, FS_GEN (fsb), 1, NULLCP, ! 107: "error encoding PDU: %s", PY_pepy); ! 108: goto out; ! 109: } ! 110: ! 111: pe -> pe_context = fsb -> fsb_id; ! 112: ! 113: fsbtrace (fsb, (fsb -> fsb_fd, "A-RELEASE.RESPONSE", ! 114: "F-TERMINATE-response", pe, 0)); ! 115: ! 116: result = AcRelResponse (fsb -> fsb_fd, ACS_ACCEPT, ACR_NORMAL, &pe, 1, ! 117: aci); ! 118: ! 119: pe_free (pe); ! 120: pe = NULLPE; ! 121: free_FTAM_PDU (pdu); ! 122: pdu = NULL; ! 123: ! 124: if (result == NOTOK) { ! 125: (void) acs2ftamlose (fsb, fti, "AcRelResponse", aca); ! 126: goto out; ! 127: } ! 128: ! 129: fsb -> fsb_fd = NOTOK; ! 130: freefsblk (fsb); ! 131: ! 132: return OK; ! 133: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.