|
|
1.1 ! root 1: /* ftamabort.c - FPM: user abort */ ! 2: ! 3: #ifndef lint ! 4: static char *rcsid = "$Header: /f/osi/ftam/RCS/ftamabort.c,v 7.0 89/11/23 21:53:19 mrose Rel $"; ! 5: #endif ! 6: ! 7: /* ! 8: * $Header: /f/osi/ftam/RCS/ftamabort.c,v 7.0 89/11/23 21:53:19 mrose Rel $ ! 9: * ! 10: * ! 11: * $Log: ftamabort.c,v $ ! 12: * Revision 7.0 89/11/23 21:53:19 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-U-ABORT.REQUEST */ ! 35: ! 36: int FUAbortRequest (sd, action, diag, ndiag, fti) ! 37: int sd; ! 38: int action; ! 39: struct FTAMdiagnostic diag[]; ! 40: int ndiag; ! 41: struct FTAMindication *fti; ! 42: { ! 43: SBV smask; ! 44: int result; ! 45: register struct ftamblk *fsb; ! 46: ! 47: switch (action) { ! 48: case FACTION_SUCCESS: ! 49: case FACTION_TRANS: ! 50: case FACTION_PERM: ! 51: break; ! 52: ! 53: default: ! 54: return ftamlose (fti, FS_GEN_NOREASON, 0, NULLCP, ! 55: "bad value for action parameter"); ! 56: } ! 57: toomuchP (diag, ndiag, NFDIAG, "diagnostic"); ! 58: ! 59: smask = sigioblock (); ! 60: ! 61: ftamPsig (fsb, sd); ! 62: ! 63: result = FAbortRequestAux (fsb, type_FTAM_PDU_f__u__abort__request, action, ! 64: diag, ndiag, fti); ! 65: ! 66: (void) sigiomask (smask); ! 67: ! 68: return result; ! 69: } ! 70: ! 71: /* */ ! 72: ! 73: int FAbortRequestAux (fsb, id, action, diag, ndiag, fti) ! 74: register struct ftamblk *fsb; ! 75: int id, ! 76: action; ! 77: struct FTAMdiagnostic diag[]; ! 78: int ndiag; ! 79: struct FTAMindication *fti; ! 80: { ! 81: int result; ! 82: PE pe; ! 83: struct AcSAPindication acis; ! 84: register struct AcSAPindication *aci = &acis; ! 85: register struct AcSAPabort *aca = &aci -> aci_abort; ! 86: register struct type_FTAM_PDU *pdu; ! 87: register struct type_FTAM_F__U__ABORT__request *req; ! 88: ! 89: if ((pdu = (struct type_FTAM_PDU *) calloc (1, sizeof *pdu)) == NULL) ! 90: goto carry_on; ! 91: pdu -> offset = id; /* F-P-ABORT-request is identical... */ ! 92: if ((req = (struct type_FTAM_F__U__ABORT__request *) ! 93: calloc (1, sizeof *req)) == NULL) ! 94: goto carry_on; ! 95: pdu -> un.f__u__abort__request = req; ! 96: if ((req -> action__result = ! 97: (struct type_FTAM_Action__Result *) ! 98: calloc (1, sizeof *req -> action__result)) ! 99: == NULL) ! 100: goto carry_on; ! 101: req -> action__result -> parm = action; ! 102: if (ndiag > 0 ! 103: && (req -> diagnostic = ! 104: diag2fpm (fsb, ! 105: id == type_FTAM_PDU_f__p__abort__request, ! 106: diag, ndiag, fti)) == NULL) { ! 107: free_FTAM_PDU (pdu); ! 108: if (fti -> fti_abort.fta_action == FACTION_TRANS) ! 109: return NOTOK; ! 110: pdu = NULL; ! 111: } ! 112: carry_on: ; ! 113: ! 114: pe = NULLPE; ! 115: if (pdu) { ! 116: result = encode_FTAM_PDU (&pe, 1, 0, NULLCP, pdu); ! 117: ! 118: if (result == NOTOK) { ! 119: if (pe) ! 120: pe_free (pe), pe = NULLPE; ! 121: } ! 122: else ! 123: if (pe) ! 124: pe -> pe_context = fsb -> fsb_id; ! 125: } ! 126: ! 127: fsbtrace (fsb, ! 128: (fsb -> fsb_fd, "A-ABORT.REQUEST", ! 129: id != type_FTAM_PDU_f__p__abort__request ? "F-U-ABORT-request" ! 130: : "F-P-ABORT-request", ! 131: pe, 0)); ! 132: ! 133: result = AcUAbortRequest (fsb -> fsb_fd, pe ? &pe : NULLPEP, pe ? 1 : 0, ! 134: aci); ! 135: ! 136: if (pe) ! 137: pe_free (pe); ! 138: if (pdu) ! 139: free_FTAM_PDU (pdu); ! 140: ! 141: if (result == NOTOK) ! 142: (void) acs2ftamlose (fsb, fti, "AcUAbortRequest", aca); ! 143: else { ! 144: fsb -> fsb_fd = NOTOK; ! 145: result = OK; ! 146: } ! 147: ! 148: if (id != type_FTAM_PDU_f__p__abort__request) ! 149: freefsblk (fsb); ! 150: else ! 151: if (result == OK) ! 152: fsb -> fsb_fd = NOTOK; ! 153: ! 154: return result; ! 155: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.