|
|
1.1 root 1: /* tsapstate.c - TPM: hack state */
2:
3: #ifndef lint
4: static char *rcsid = "$Header: /f/osi/tsap/RCS/tsapstate.c,v 7.2 90/03/23 17:31:54 mrose Exp $";
5: #endif
6:
7: /*
8: * $Header: /f/osi/tsap/RCS/tsapstate.c,v 7.2 90/03/23 17:31:54 mrose Exp $
9: *
10: *
11: * $Log: tsapstate.c,v $
12: * Revision 7.2 90/03/23 17:31:54 mrose
13: * 8
14: *
15: * Revision 7.1 90/03/22 08:38:12 mrose
16: * touch-up
17: *
18: * Revision 7.0 89/11/23 22:30:58 mrose
19: * Release 6.0
20: *
21: */
22:
23: /*
24: * NOTICE
25: *
26: * Acquisition, use, and distribution of this module and related
27: * materials are subject to the restrictions of a license agreement.
28: * Consult the Preface in the User's Manual for the full terms of
29: * this agreement.
30: *
31: */
32:
33:
34: /* LINTLIBRARY */
35:
36: #include <stdio.h>
37: #include <signal.h>
38: #include "tpkt.h"
39:
40: /* */
41:
42: int TSaveState (sd, vec, td)
43: int sd;
44: char **vec;
45: register struct TSAPdisconnect *td;
46: {
47: SBV smask;
48: register struct tsapblk *tb;
49: static char buffer[sizeof *tb * 2 + 1];
50:
51: missingP (vec);
52:
53: smask = sigioblock ();
54:
55: tsapPsig (tb, sd);
56:
57: if (tb -> tb_len > 0) {
58: (void) sigiomask (smask);
59:
60: return tsaplose (td, DR_WAITING, NULLCP, NULLCP);
61: }
62:
63: buffer[explode (buffer, (u_char *) tb, sizeof *tb)] = NULL;
64: *vec++ = buffer;
65: *vec = NULL;
66:
67: tb -> tb_fd = NOTOK;
68:
69: freetblk (tb);
70:
71: (void) sigiomask (smask);
72:
73: return OK;
74: }
75:
76: /* */
77:
78: int TRestoreState (buffer, ts, td)
79: char *buffer;
80: register struct TSAPstart *ts;
81: register struct TSAPdisconnect *td;
82: {
83: struct tsapblk tbs;
84: register struct tsapblk *tb;
85:
86: missingP (buffer);
87: missingP (ts);
88:
89: if ((tb = newtblk ()) == NULL)
90: return tsaplose (td, DR_CONGEST, NULLCP, "out of memory");
91:
92: if (implode ((u_char *) &tbs, buffer, strlen (buffer)) != sizeof tbs) {
93: (void) tsaplose (td, DR_PARAMETER, NULLCP, "bad state vector");
94: goto out1;
95: }
96:
97: if (findtblk (tbs.tb_fd)) {
98: (void) tsaplose (td, DR_PARAMETER, NULLCP, "transport descriptor active");
99: goto out1;
100: }
101: tb -> tb_fd = tbs.tb_fd;
102: tb -> tb_flags = tbs.tb_flags & (TB_CONN | TB_EXPD | TB_TP0 | TB_TP4);
103: tb -> tb_srcref = tbs.tb_srcref;
104: tb -> tb_dstref = tbs.tb_dstref;
105: tb -> tb_initiating = tbs.tb_initiating; /* struct copy */
106: tb -> tb_responding = tbs.tb_responding; /* struct copy */
107:
108: switch (tb -> tb_flags & (TB_TP0 | TB_TP4)) {
109: #ifdef TCP
110: case TB_TCP:
111: (void) TTService (tb);
112: break;
113: #endif
114:
115: #ifdef X25
116: case TB_X25:
117: (void) XTService (tb);
118: break;
119: #endif
120:
121: #ifdef BRIDGE_X25
122: case TB_BRG:
123: (void) BTService (tb);
124: break;
125: #endif
126:
127: #ifdef TP4
128: case TB_TP4:
129: (void) tp4init (tb);
130: break;
131: #endif
132:
133: default:
134: (void) tsaplose (td, DR_PARAMETER, NULLCP, "network type not set");
135: tb -> tb_fd = NOTOK;
136: goto out1;
137: }
138:
139: tb -> tb_tsdusize = tbs.tb_tsdusize;
140:
141: bzero ((char *) ts, sizeof *ts);
142: ts -> ts_sd = tb -> tb_fd;
143: copyTSAPaddrX (&tb -> tb_initiating, &ts -> ts_calling);
144: copyTSAPaddrX (&tb -> tb_responding, &ts -> ts_called);
145: if (tb -> tb_flags & TB_EXPD)
146: ts -> ts_expedited = 1;
147: ts -> ts_tsdusize = tb -> tb_tsdusize;
148: ts -> ts_qos = tb -> tb_qos; /* struct copy */
149:
150: return OK;
151:
152: out1: ;
153: freetblk (tb);
154:
155: return NOTOK;
156: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.