|
|
1.1 ! root 1: /* tsaprespond.c - TPM: responder */ ! 2: ! 3: #ifndef lint ! 4: static char *rcsid = "$Header: /f/osi/tsap/RCS/tsaprespond.c,v 7.1 90/03/23 17:31:49 mrose Exp $"; ! 5: #endif ! 6: ! 7: /* ! 8: * $Header: /f/osi/tsap/RCS/tsaprespond.c,v 7.1 90/03/23 17:31:49 mrose Exp $ ! 9: * ! 10: * ! 11: * $Log: tsaprespond.c,v $ ! 12: * Revision 7.1 90/03/23 17:31:49 mrose ! 13: * 8 ! 14: * ! 15: * Revision 7.0 89/11/23 22:30:55 mrose ! 16: * Release 6.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 "tpkt.h" ! 35: #include "tailor.h" ! 36: ! 37: /* T-CONNECT.INDICATION */ ! 38: ! 39: int TInit (vecp, vec, ts, td) ! 40: register int vecp; ! 41: register char **vec; ! 42: register struct TSAPstart *ts; ! 43: register struct TSAPdisconnect *td; ! 44: { ! 45: register struct tsapblk *tb; ! 46: ! 47: isodetailor (NULLCP, 0); ! 48: ! 49: if (vecp < 3) ! 50: return tsaplose (td, DR_PARAMETER, NULLCP, ! 51: "bad initialization vector"); ! 52: missingP (vec); ! 53: missingP (ts); ! 54: missingP (td); ! 55: ! 56: if ((tb = newtblk ()) == NULL) ! 57: return tsaplose (td, DR_CONGEST, NULLCP, "out of memory"); ! 58: ! 59: vec += vecp - 2; ! 60: switch (*vec[0]) { ! 61: case NT_TCP: ! 62: #ifdef TCP ! 63: if (tcprestore (tb, vec[0] + 1, td) == NOTOK) ! 64: goto out; ! 65: break; ! 66: #else ! 67: goto not_supported; ! 68: #endif ! 69: ! 70: case NT_X25: ! 71: #ifdef X25 ! 72: if (x25restore (tb, vec[0] + 1, td) == NOTOK) ! 73: goto out; ! 74: break; ! 75: #else ! 76: goto not_supported; ! 77: #endif ! 78: ! 79: case NT_BRG: ! 80: #ifdef BRIDGE_X25 ! 81: if (bridgerestore (tb, vec[0] + 1, td) == NOTOK) ! 82: goto out; ! 83: break; ! 84: #else ! 85: goto not_supported; ! 86: #endif ! 87: ! 88: case NT_BSD: ! 89: #ifdef BSD_TP4 ! 90: if (tp4restore (tb, vec[0] + 1, td) == NOTOK) ! 91: goto out; ! 92: break; ! 93: #else ! 94: goto not_supported; ! 95: #endif ! 96: ! 97: case NT_SUN: ! 98: #ifdef SUN_TP4 ! 99: if (tp4restore (tb, vec[0] + 1, td) == NOTOK) ! 100: goto out; ! 101: break; ! 102: #else ! 103: goto not_supported; ! 104: #endif ! 105: ! 106: default: ! 107: (void) tsaplose (td, DR_PARAMETER, NULLCP, ! 108: "unknown network type: 0x%x (%c)", *vec[0], *vec[0]); ! 109: goto out; ! 110: } ! 111: bzero (vec[0], strlen (vec[0])); ! 112: ! 113: if ((*tb -> tb_startPfnx) (tb, vec[1], ts, td) == NOTOK) ! 114: goto out; ! 115: bzero (vec[1], strlen (vec[1])); ! 116: ! 117: *vec = NULL; ! 118: ! 119: return OK; ! 120: ! 121: not_supported: ; ! 122: (void) tsaplose (td, DR_PARAMETER, NULLCP, ! 123: "not configured for network type: 0x%x (%c)", ! 124: *vec[0], *vec[0]); ! 125: ! 126: out: ; ! 127: freetblk (tb); ! 128: ! 129: return NOTOK; ! 130: } ! 131: ! 132: /* T-CONNECT.RESPONSE */ ! 133: ! 134: int TConnResponse (sd, responding, expedited, data, cc, qos, td) ! 135: int sd; ! 136: register struct TSAPaddr *responding; ! 137: int expedited, ! 138: cc; ! 139: char *data; ! 140: struct QOStype *qos; ! 141: register struct TSAPdisconnect *td; ! 142: { ! 143: int result; ! 144: register struct tsapblk *tb; ! 145: struct tsapADDR tas; ! 146: ! 147: if ((tb = findtblk (sd)) == NULL || (tb -> tb_flags & TB_CONN)) ! 148: return tsaplose (td, DR_PARAMETER, NULLCP, "invalid transport descriptor"); ! 149: #ifdef notdef ! 150: missingP (responding); ! 151: #endif ! 152: if (responding) { ! 153: copyTSAPaddrY (responding, &tas); ! 154: if (bcmp ((char *) &tb -> tb_responding, (char *) &tas, sizeof tas)) ! 155: tb -> tb_responding = tas; /* struct copy */ ! 156: else ! 157: responding = NULLTA; ! 158: } ! 159: if (expedited && !(tb -> tb_flags & TB_EXPD)) ! 160: return tsaplose (td, DR_PARAMETER, NULLCP, ! 161: "expedited service not available"); ! 162: toomuchP (data, cc, TC_SIZE, "initial"); ! 163: #ifdef notdef ! 164: missingP (qos); ! 165: #endif ! 166: missingP (td); ! 167: ! 168: if (!expedited) ! 169: tb -> tb_flags &= ~TB_EXPD; ! 170: ! 171: if ((result = (*tb -> tb_acceptPfnx) (tb, responding ? 1 : 0, data, cc, ! 172: qos, td)) == NOTOK) ! 173: freetblk (tb); ! 174: #ifdef X25 ! 175: else ! 176: if (tb -> tb_flags & TB_X25) ! 177: LLOG (x25_log, LLOG_NOTICE, ! 178: ("connection %d from %s", ! 179: sd, na2str (&tb -> tb_initiating.ta_addr))); ! 180: #endif ! 181: ! 182: return result; ! 183: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.