|
|
1.1 ! root 1: /* rosaplose.c - ROPM: you lose */ ! 2: ! 3: #ifndef lint ! 4: static char *rcsid = "$Header: /f/osi/rosap/RCS/rosaplose.c,v 6.0 89/03/18 23:42:27 mrose Rel $"; ! 5: #endif ! 6: ! 7: /* ! 8: * $Header: /f/osi/rosap/RCS/rosaplose.c,v 6.0 89/03/18 23:42:27 mrose Rel $ ! 9: * ! 10: * Based on an TCP-based implementation by George Michaelson of University ! 11: * College London. ! 12: * ! 13: * ! 14: * $Log: rosaplose.c,v $ ! 15: * Revision 6.0 89/03/18 23:42:27 mrose ! 16: * Release 5.0 ! 17: * ! 18: */ ! 19: ! 20: /* ! 21: * NOTICE ! 22: * ! 23: * Acquisition, use, and distribution of this module and related ! 24: * materials are subject to the restrictions of a license agreement. ! 25: * Consult the Preface in the User's Manual for the full terms of ! 26: * this agreement. ! 27: * ! 28: */ ! 29: ! 30: ! 31: /* LINTLIBRARY */ ! 32: ! 33: #include <stdio.h> ! 34: #include <varargs.h> ! 35: #include "ropkt.h" ! 36: #include "tailor.h" ! 37: ! 38: /* */ ! 39: ! 40: #ifndef lint ! 41: int ropktlose (va_alist) ! 42: va_dcl ! 43: { ! 44: int reason, ! 45: result, ! 46: value; ! 47: register struct assocblk *acb; ! 48: register struct RoSAPindication *roi; ! 49: register struct RoSAPpreject *rop; ! 50: va_list ap; ! 51: ! 52: va_start (ap); ! 53: ! 54: acb = va_arg (ap, struct assocblk *); ! 55: roi = va_arg (ap, struct RoSAPindication *); ! 56: reason = va_arg (ap, int); ! 57: ! 58: result = _rosaplose (roi, reason, ap); ! 59: ! 60: va_end (ap); ! 61: ! 62: if ((rop = &roi -> roi_preject) -> rop_cc > 0) { ! 63: SLOG (rosap_log, LLOG_EXCEPTIONS, NULLCP, ! 64: ("ropktlose [%s] %*.*s", RoErrString (rop -> rop_reason), ! 65: rop -> rop_cc, rop -> rop_cc, rop -> rop_data)); ! 66: } ! 67: else ! 68: SLOG (rosap_log, LLOG_EXCEPTIONS, NULLCP, ! 69: ("ropktlose [%s]", RoErrString (rop -> rop_reason))); ! 70: ! 71: if (acb == NULLACB ! 72: || acb -> acb_fd == NOTOK ! 73: || acb -> acb_ropktlose == NULLIFP) ! 74: return result; ! 75: ! 76: switch (reason) { ! 77: case ROS_PROTOCOL: ! 78: value = ABORT_PROTO; ! 79: break; ! 80: ! 81: case ROS_CONGEST: ! 82: value = ABORT_TMP; ! 83: break; ! 84: ! 85: default: ! 86: value = ABORT_LSP; ! 87: break; ! 88: } ! 89: ! 90: (*acb -> acb_ropktlose) (acb, value); ! 91: ! 92: return result; ! 93: } ! 94: #else ! 95: /* VARARGS5 */ ! 96: ! 97: int ropktlose (acb, roi, reason, what, fmt) ! 98: struct assocblk *acb; ! 99: struct RoSAPindication *roi; ! 100: int reason; ! 101: char *what, ! 102: *fmt; ! 103: { ! 104: return ropktlose (acb, roi, reason, what, fmt); ! 105: } ! 106: #endif ! 107: ! 108: /* */ ! 109: ! 110: #ifndef lint ! 111: int rosapreject (va_alist) ! 112: va_dcl ! 113: { ! 114: int reason, ! 115: result; ! 116: register struct assocblk *acb; ! 117: struct RoSAPindication rois; ! 118: register struct RoSAPindication *roi; ! 119: va_list ap; ! 120: ! 121: va_start (ap); ! 122: ! 123: acb = va_arg (ap, struct assocblk *); ! 124: roi = va_arg (ap, struct RoSAPindication *); ! 125: reason = va_arg (ap, int); ! 126: ! 127: result = _rosaplose (roi, reason, ap); ! 128: ! 129: va_end (ap); ! 130: ! 131: if (RoURejectRequestAux (acb, NULLIP, reason - REJECT_GENERAL_BASE, ! 132: REJECT_GENERAL, 0, &rois) == NOTOK ! 133: && ROS_FATAL (rois.roi_preject.rop_reason)) { ! 134: *roi = rois; /* struct copy */ ! 135: result = NOTOK; ! 136: } ! 137: ! 138: return result; ! 139: } ! 140: #else ! 141: /* VARARGS5 */ ! 142: ! 143: int rosapreject (acb, roi, reason, what, fmt) ! 144: struct assocblk *acb; ! 145: struct RoSAPindication *roi; ! 146: int reason; ! 147: char *what, ! 148: *fmt; ! 149: { ! 150: return rosapreject (acb, roi, reason, what, fmt); ! 151: } ! 152: #endif ! 153: ! 154: /* */ ! 155: ! 156: #ifndef lint ! 157: int rosaplose (va_alist) ! 158: va_dcl ! 159: { ! 160: int reason, ! 161: result; ! 162: struct RoSAPindication *roi; ! 163: va_list (ap); ! 164: ! 165: va_start (ap); ! 166: ! 167: roi = va_arg (ap, struct RoSAPindication *); ! 168: reason = va_arg (ap, int); ! 169: ! 170: result = _rosaplose (roi, reason, ap); ! 171: ! 172: va_end (ap); ! 173: ! 174: return result; ! 175: } ! 176: #else ! 177: /* VARARGS4 */ ! 178: ! 179: int rosaplose (roi, reason, what, fmt) ! 180: struct RoSAPindication *roi; ! 181: int reason; ! 182: char *what, ! 183: *fmt; ! 184: { ! 185: return rosaplose (roi, reason, what, fmt); ! 186: } ! 187: #endif ! 188: ! 189: /* */ ! 190: ! 191: #ifndef lint ! 192: static int _rosaplose (roi, reason, ap) /* what, fmt, args ... */ ! 193: register struct RoSAPindication *roi; ! 194: int reason; ! 195: va_list ap; ! 196: { ! 197: register char *bp; ! 198: char buffer[BUFSIZ]; ! 199: register struct RoSAPpreject *rop; ! 200: ! 201: if (roi) { ! 202: bzero ((char *) roi, sizeof *roi); ! 203: roi -> roi_type = ROI_PREJECT; ! 204: rop = &roi -> roi_preject; ! 205: ! 206: asprintf (bp = buffer, ap); ! 207: bp += strlen (bp); ! 208: ! 209: rop -> rop_reason = reason; ! 210: copyRoSAPdata (buffer, bp - buffer, rop); ! 211: } ! 212: ! 213: return NOTOK; ! 214: } ! 215: #endif
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.