1 /*=========================================================================
2 *
3 * Copyright Insight Software Consortium
4 *
5 * Licensed under the Apache License, Version 2.0 (the "License");
6 * you may not use this file except in compliance with the License.
7 * You may obtain a copy of the License at
8 *
9 * http://www.apache.org/licenses/LICENSE-2.0.txt
10 *
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
16 *
17 *=========================================================================*/
18
19
20 /*
21 * This file is the implementation of the ULTransitionTable class, including
22 * the actual event handling as well as the construction of the table itself.
23 */
24
25 #include "gdcmULTransitionTable.h"
26 #include "gdcmULActionAA.h"
27 #include "gdcmULActionAE.h"
28 #include "gdcmULActionAR.h"
29 #include "gdcmULActionDT.h"
30
31 namespace gdcm
32 {
33 namespace network
34 {
35 //construct the table
ULTransitionTable()36 ULTransitionTable::ULTransitionTable()
37 {
38 //row 1
39 // A-ASSOCIATE Request (local user)
40 mTable[eAASSOCIATERequestLocalUser].transitions[GetStateIndex(eSta1Idle)] =
41 Transition::MakeNew(eSta4LocalAssocDone, new ULActionAE1());
42 //row 2
43 // Transport Conn. Confirmn (local transport service)
44 mTable[eTransportConnConfirmLocal].transitions[GetStateIndex(eSta4LocalAssocDone)] =
45 Transition::MakeNew(eSta5WaitRemoteAssoc, new ULActionAE2());
46 //row 3
47 // A-ASSOCIATE-AC PDU (received on transport connection)
48 mTable[eASSOCIATE_ACPDUreceived].transitions[GetStateIndex(eSta2Open)] =
49 Transition::MakeNew(eSta13AwaitingClose, new ULActionAA1());
50 mTable[eASSOCIATE_ACPDUreceived].transitions[GetStateIndex(eSta3WaitLocalAssoc)] =
51 Transition::MakeNew(eSta13AwaitingClose, new ULActionAA8());
52 mTable[eASSOCIATE_ACPDUreceived].transitions[GetStateIndex(eSta5WaitRemoteAssoc)] =
53 Transition::MakeNew(eSta6TransferReady, new ULActionAE3());
54 mTable[eASSOCIATE_ACPDUreceived].transitions[GetStateIndex(eSta6TransferReady)] =
55 Transition::MakeNew(eSta13AwaitingClose, new ULActionAA8());
56 mTable[eASSOCIATE_ACPDUreceived].transitions[GetStateIndex(eSta7WaitRelease)] =
57 Transition::MakeNew(eSta13AwaitingClose, new ULActionAA8());
58 mTable[eASSOCIATE_ACPDUreceived].transitions[GetStateIndex(eSta8WaitLocalRelease)] =
59 Transition::MakeNew(eSta13AwaitingClose, new ULActionAA8());
60 mTable[eASSOCIATE_ACPDUreceived].transitions[GetStateIndex(eSta9ReleaseCollisionRqLocal)] =
61 Transition::MakeNew(eSta13AwaitingClose, new ULActionAA8());
62 mTable[eASSOCIATE_ACPDUreceived].transitions[GetStateIndex(eSta10ReleaseCollisionAc)] =
63 Transition::MakeNew(eSta13AwaitingClose, new ULActionAA8());
64 mTable[eASSOCIATE_ACPDUreceived].transitions[GetStateIndex(eSta11ReleaseCollisionRq)] =
65 Transition::MakeNew(eSta13AwaitingClose, new ULActionAA8());
66 mTable[eASSOCIATE_ACPDUreceived].transitions[GetStateIndex(eSta12ReleaseCollisionAcLocal)] =
67 Transition::MakeNew(eSta13AwaitingClose, new ULActionAA8());
68 mTable[eASSOCIATE_ACPDUreceived].transitions[GetStateIndex(eSta13AwaitingClose)] =
69 Transition::MakeNew(eSta13AwaitingClose, new ULActionAA6());
70
71 //row 4
72 // A-ASSOCIATE-RJ PDU (received on transport connection)
73 mTable[eASSOCIATE_RJPDUreceived].transitions[GetStateIndex(eSta2Open)] =
74 Transition::MakeNew(eSta13AwaitingClose, new ULActionAA1());
75 mTable[eASSOCIATE_RJPDUreceived].transitions[GetStateIndex(eSta3WaitLocalAssoc)] =
76 Transition::MakeNew(eSta13AwaitingClose, new ULActionAA8());
77 mTable[eASSOCIATE_RJPDUreceived].transitions[GetStateIndex(eSta5WaitRemoteAssoc)] =
78 Transition::MakeNew(eSta1Idle, new ULActionAE4());
79 mTable[eASSOCIATE_RJPDUreceived].transitions[GetStateIndex(eSta6TransferReady)] =
80 Transition::MakeNew(eSta13AwaitingClose, new ULActionAA8());
81 mTable[eASSOCIATE_RJPDUreceived].transitions[GetStateIndex(eSta7WaitRelease)] =
82 Transition::MakeNew(eSta13AwaitingClose, new ULActionAA8());
83 mTable[eASSOCIATE_RJPDUreceived].transitions[GetStateIndex(eSta8WaitLocalRelease)] =
84 Transition::MakeNew(eSta13AwaitingClose, new ULActionAA8());
85 mTable[eASSOCIATE_RJPDUreceived].transitions[GetStateIndex(eSta9ReleaseCollisionRqLocal)] =
86 Transition::MakeNew(eSta13AwaitingClose, new ULActionAA8());
87 mTable[eASSOCIATE_RJPDUreceived].transitions[GetStateIndex(eSta10ReleaseCollisionAc)] =
88 Transition::MakeNew(eSta13AwaitingClose, new ULActionAA8());
89 mTable[eASSOCIATE_RJPDUreceived].transitions[GetStateIndex(eSta11ReleaseCollisionRq)] =
90 Transition::MakeNew(eSta13AwaitingClose, new ULActionAA8());
91 mTable[eASSOCIATE_RJPDUreceived].transitions[GetStateIndex(eSta12ReleaseCollisionAcLocal)] =
92 Transition::MakeNew(eSta13AwaitingClose, new ULActionAA8());
93 mTable[eASSOCIATE_RJPDUreceived].transitions[GetStateIndex(eSta13AwaitingClose)] =
94 Transition::MakeNew(eSta13AwaitingClose, new ULActionAA6());
95 //row 5
96 // Transport Connection Indication (local transport service)
97 mTable[eTransportConnIndicLocal].transitions[GetStateIndex(eSta1Idle)] =
98 Transition::MakeNew(eSta2Open, new ULActionAE5());
99 //row 6
100 // A-ASSOCIATE-RQ PDU (received on transport connection)
101 mTable[eAASSOCIATE_RQPDUreceived].transitions[GetStateIndex(eSta2Open)] =
102 Transition::MakeNew(eSta3WaitLocalAssoc | eSta13AwaitingClose, new ULActionAE6());
103 mTable[eAASSOCIATE_RQPDUreceived].transitions[GetStateIndex(eSta3WaitLocalAssoc)] =
104 Transition::MakeNew(eSta13AwaitingClose, new ULActionAA8());
105 mTable[eAASSOCIATE_RQPDUreceived].transitions[GetStateIndex(eSta5WaitRemoteAssoc)] =
106 Transition::MakeNew(eSta13AwaitingClose, new ULActionAA8());
107 mTable[eAASSOCIATE_RQPDUreceived].transitions[GetStateIndex(eSta6TransferReady)] =
108 Transition::MakeNew(eSta13AwaitingClose, new ULActionAA8());
109 mTable[eAASSOCIATE_RQPDUreceived].transitions[GetStateIndex(eSta7WaitRelease)] =
110 Transition::MakeNew(eSta13AwaitingClose, new ULActionAA8());
111 mTable[eAASSOCIATE_RQPDUreceived].transitions[GetStateIndex(eSta8WaitLocalRelease)] =
112 Transition::MakeNew(eSta13AwaitingClose, new ULActionAA8());
113 mTable[eAASSOCIATE_RQPDUreceived].transitions[GetStateIndex(eSta9ReleaseCollisionRqLocal)] =
114 Transition::MakeNew(eSta13AwaitingClose, new ULActionAA8());
115 mTable[eAASSOCIATE_RQPDUreceived].transitions[GetStateIndex(eSta10ReleaseCollisionAc)] =
116 Transition::MakeNew(eSta13AwaitingClose, new ULActionAA8());
117 mTable[eAASSOCIATE_RQPDUreceived].transitions[GetStateIndex(eSta11ReleaseCollisionRq)] =
118 Transition::MakeNew(eSta13AwaitingClose, new ULActionAA8());
119 mTable[eAASSOCIATE_RQPDUreceived].transitions[GetStateIndex(eSta12ReleaseCollisionAcLocal)] =
120 Transition::MakeNew(eSta13AwaitingClose, new ULActionAA8());
121 mTable[eAASSOCIATE_RQPDUreceived].transitions[GetStateIndex(eSta13AwaitingClose)] =
122 Transition::MakeNew(eSta13AwaitingClose, new ULActionAA7());
123 //row 7
124 // A-ASSOCIATE response primitive (accept)
125 mTable[eAASSOCIATEresponseAccept].transitions[GetStateIndex(eSta3WaitLocalAssoc)] =
126 Transition::MakeNew(eSta7WaitRelease, new ULActionAE7());
127 //row 8
128 // A-ASSOCIATE response primitive (reject)
129 mTable[eAASSOCIATEresponseReject].transitions[GetStateIndex(eSta3WaitLocalAssoc)] =
130 Transition::MakeNew(eSta7WaitRelease, new ULActionAE7());
131 //Row 9
132 // P-DATA request primitive
133 mTable[ePDATArequest].transitions[GetStateIndex(eSta6TransferReady)] =
134 Transition::MakeNew(eSta6TransferReady, new ULActionDT1());
135 mTable[ePDATArequest].transitions[GetStateIndex(eSta8WaitLocalRelease)] =
136 Transition::MakeNew(eSta8WaitLocalRelease, new ULActionAR7());
137 //row 10
138 // P-DATA-TF PDU
139 mTable[ePDATATFPDU].transitions[GetStateIndex(eSta2Open)] =
140 Transition::MakeNew(eSta13AwaitingClose, new ULActionAA1());
141 mTable[ePDATATFPDU].transitions[GetStateIndex(eSta3WaitLocalAssoc)] =
142 Transition::MakeNew(eSta13AwaitingClose, new ULActionAA8());
143 mTable[ePDATATFPDU].transitions[GetStateIndex(eSta5WaitRemoteAssoc)] =
144 Transition::MakeNew(eSta13AwaitingClose, new ULActionAA8());
145 mTable[ePDATATFPDU].transitions[GetStateIndex(eSta6TransferReady)] =
146 Transition::MakeNew(eSta6TransferReady, new ULActionDT2());
147 mTable[ePDATATFPDU].transitions[GetStateIndex(eSta7WaitRelease)] =
148 Transition::MakeNew(eSta7WaitRelease, new ULActionAR6());
149 mTable[ePDATATFPDU].transitions[GetStateIndex(eSta8WaitLocalRelease)] =
150 Transition::MakeNew(eSta13AwaitingClose, new ULActionAA8());
151 mTable[ePDATATFPDU].transitions[GetStateIndex(eSta9ReleaseCollisionRqLocal)] =
152 Transition::MakeNew(eSta13AwaitingClose, new ULActionAA8());
153 mTable[ePDATATFPDU].transitions[GetStateIndex(eSta10ReleaseCollisionAc)] =
154 Transition::MakeNew(eSta13AwaitingClose, new ULActionAA8());
155 mTable[ePDATATFPDU].transitions[GetStateIndex(eSta11ReleaseCollisionRq)] =
156 Transition::MakeNew(eSta13AwaitingClose, new ULActionAA8());
157 mTable[ePDATATFPDU].transitions[GetStateIndex(eSta12ReleaseCollisionAcLocal)] =
158 Transition::MakeNew(eSta13AwaitingClose, new ULActionAA8());
159 mTable[ePDATATFPDU].transitions[GetStateIndex(eSta13AwaitingClose)] =
160 Transition::MakeNew(eSta13AwaitingClose, new ULActionAA6());
161 //row 11
162 // A-RELEASE Request primitive
163 mTable[eARELEASERequest].transitions[GetStateIndex(eSta6TransferReady)] =
164 Transition::MakeNew(eSta7WaitRelease, new ULActionAR1());
165 //row 12
166 // A-RELEASE-RQ PDU (received on open transport connection)
167 mTable[eARELEASE_RQPDUReceivedOpen].transitions[GetStateIndex(eSta2Open)] =
168 Transition::MakeNew(eSta13AwaitingClose, new ULActionAA1());
169 mTable[eARELEASE_RQPDUReceivedOpen].transitions[GetStateIndex(eSta3WaitLocalAssoc)] =
170 Transition::MakeNew(eSta13AwaitingClose, new ULActionAA8());
171 mTable[eARELEASE_RQPDUReceivedOpen].transitions[GetStateIndex(eSta5WaitRemoteAssoc)] =
172 Transition::MakeNew(eSta13AwaitingClose, new ULActionAA8());
173 mTable[eARELEASE_RQPDUReceivedOpen].transitions[GetStateIndex(eSta6TransferReady)] =
174 Transition::MakeNew(eSta8WaitLocalRelease, new ULActionAR2());
175 mTable[eARELEASE_RQPDUReceivedOpen].transitions[GetStateIndex(eSta7WaitRelease)] =
176 Transition::MakeNew(eSta9ReleaseCollisionRqLocal | eSta10ReleaseCollisionAc, new ULActionAR8());
177 mTable[eARELEASE_RQPDUReceivedOpen].transitions[GetStateIndex(eSta8WaitLocalRelease)] =
178 Transition::MakeNew(eSta13AwaitingClose, new ULActionAA8());
179 mTable[eARELEASE_RQPDUReceivedOpen].transitions[GetStateIndex(eSta9ReleaseCollisionRqLocal)] =
180 Transition::MakeNew(eSta13AwaitingClose, new ULActionAA8());
181 mTable[eARELEASE_RQPDUReceivedOpen].transitions[GetStateIndex(eSta10ReleaseCollisionAc)] =
182 Transition::MakeNew(eSta13AwaitingClose, new ULActionAA8());
183 mTable[eARELEASE_RQPDUReceivedOpen].transitions[GetStateIndex(eSta11ReleaseCollisionRq)] =
184 Transition::MakeNew(eSta13AwaitingClose, new ULActionAA8());
185 mTable[eARELEASE_RQPDUReceivedOpen].transitions[GetStateIndex(eSta12ReleaseCollisionAcLocal)] =
186 Transition::MakeNew(eSta13AwaitingClose, new ULActionAA8());
187 mTable[eARELEASE_RQPDUReceivedOpen].transitions[GetStateIndex(eSta13AwaitingClose)] =
188 Transition::MakeNew(eSta13AwaitingClose, new ULActionAA6());
189 //row 13
190 // A-RELEASE-RP PDU (received on transport connection)
191 mTable[eARELEASE_RPPDUReceived].transitions[GetStateIndex(eSta2Open)] =
192 Transition::MakeNew(eSta13AwaitingClose, new ULActionAA1());
193 mTable[eARELEASE_RPPDUReceived].transitions[GetStateIndex(eSta3WaitLocalAssoc)] =
194 Transition::MakeNew(eSta13AwaitingClose, new ULActionAA8());
195 mTable[eARELEASE_RPPDUReceived].transitions[GetStateIndex(eSta5WaitRemoteAssoc)] =
196 Transition::MakeNew(eSta13AwaitingClose, new ULActionAA8());
197 mTable[eARELEASE_RPPDUReceived].transitions[GetStateIndex(eSta6TransferReady)] =
198 Transition::MakeNew(eSta13AwaitingClose, new ULActionAA8());
199 mTable[eARELEASE_RPPDUReceived].transitions[GetStateIndex(eSta7WaitRelease)] =
200 Transition::MakeNew(eSta1Idle, new ULActionAR3());
201 mTable[eARELEASE_RPPDUReceived].transitions[GetStateIndex(eSta8WaitLocalRelease)] =
202 Transition::MakeNew(eSta13AwaitingClose, new ULActionAA8());
203 mTable[eARELEASE_RPPDUReceived].transitions[GetStateIndex(eSta9ReleaseCollisionRqLocal)] =
204 Transition::MakeNew(eSta13AwaitingClose, new ULActionAA8());
205 mTable[eARELEASE_RPPDUReceived].transitions[GetStateIndex(eSta10ReleaseCollisionAc)] =
206 Transition::MakeNew(eSta13AwaitingClose, new ULActionAA8());
207 mTable[eARELEASE_RPPDUReceived].transitions[GetStateIndex(eSta11ReleaseCollisionRq)] =
208 Transition::MakeNew(eSta13AwaitingClose, new ULActionAA8());
209 mTable[eARELEASE_RPPDUReceived].transitions[GetStateIndex(eSta12ReleaseCollisionAcLocal)] =
210 Transition::MakeNew(eSta13AwaitingClose, new ULActionAA8());
211 mTable[eARELEASE_RPPDUReceived].transitions[GetStateIndex(eSta13AwaitingClose)] =
212 Transition::MakeNew(eSta13AwaitingClose, new ULActionAA6());
213 // Row 14
214 // A-RELEASE Response primitive
215 mTable[eARELEASEResponse].transitions[GetStateIndex(eSta8WaitLocalRelease)] =
216 Transition::MakeNew(eSta13AwaitingClose, new ULActionAR4());
217 mTable[eARELEASEResponse].transitions[GetStateIndex(eSta9ReleaseCollisionRqLocal)] =
218 Transition::MakeNew(eSta11ReleaseCollisionRq, new ULActionAR9);
219 mTable[eARELEASEResponse].transitions[GetStateIndex(eSta12ReleaseCollisionAcLocal)] =
220 Transition::MakeNew(eSta13AwaitingClose, new ULActionAR4());
221 // row 15
222 // A-ABORT Request primitive
223 mTable[eAABORTRequest].transitions[GetStateIndex(eSta3WaitLocalAssoc)] =
224 Transition::MakeNew(eSta13AwaitingClose, new ULActionAA1());
225 mTable[eAABORTRequest].transitions[GetStateIndex(eSta4LocalAssocDone)] =
226 Transition::MakeNew(eSta1Idle, new ULActionAA2());
227 mTable[eAABORTRequest].transitions[GetStateIndex(eSta5WaitRemoteAssoc)] =
228 Transition::MakeNew(eSta13AwaitingClose, new ULActionAA1());
229 mTable[eAABORTRequest].transitions[GetStateIndex(eSta6TransferReady)] =
230 Transition::MakeNew(eSta13AwaitingClose, new ULActionAA1());
231 mTable[eAABORTRequest].transitions[GetStateIndex(eSta7WaitRelease)] =
232 Transition::MakeNew(eSta13AwaitingClose, new ULActionAA1());
233 mTable[eAABORTRequest].transitions[GetStateIndex(eSta8WaitLocalRelease)] =
234 Transition::MakeNew(eSta13AwaitingClose, new ULActionAA1());
235 mTable[eAABORTRequest].transitions[GetStateIndex(eSta9ReleaseCollisionRqLocal)] =
236 Transition::MakeNew(eSta13AwaitingClose, new ULActionAA1());
237 mTable[eAABORTRequest].transitions[GetStateIndex(eSta10ReleaseCollisionAc)] =
238 Transition::MakeNew(eSta13AwaitingClose, new ULActionAA1());
239 mTable[eAABORTRequest].transitions[GetStateIndex(eSta11ReleaseCollisionRq)] =
240 Transition::MakeNew(eSta13AwaitingClose, new ULActionAA1());
241 mTable[eAABORTRequest].transitions[GetStateIndex(eSta12ReleaseCollisionAcLocal)] =
242 Transition::MakeNew(eSta13AwaitingClose, new ULActionAA1());
243 // row 16
244 // A-ABORT PDU (received on open transport connection)
245 mTable[eAABORTPDUReceivedOpen].transitions[GetStateIndex(eSta2Open)] =
246 Transition::MakeNew(eSta1Idle, new ULActionAA2());
247 mTable[eAABORTPDUReceivedOpen].transitions[GetStateIndex(eSta3WaitLocalAssoc)] =
248 Transition::MakeNew(eSta1Idle, new ULActionAA3());
249 mTable[eAABORTPDUReceivedOpen].transitions[GetStateIndex(eSta5WaitRemoteAssoc)] =
250 Transition::MakeNew(eSta1Idle, new ULActionAA3());
251 mTable[eAABORTPDUReceivedOpen].transitions[GetStateIndex(eSta6TransferReady)] =
252 Transition::MakeNew(eSta1Idle, new ULActionAA3());
253 mTable[eAABORTPDUReceivedOpen].transitions[GetStateIndex(eSta7WaitRelease)] =
254 Transition::MakeNew(eSta1Idle, new ULActionAA3());
255 mTable[eAABORTPDUReceivedOpen].transitions[GetStateIndex(eSta8WaitLocalRelease)] =
256 Transition::MakeNew(eSta1Idle, new ULActionAA3());
257 mTable[eAABORTPDUReceivedOpen].transitions[GetStateIndex(eSta9ReleaseCollisionRqLocal)] =
258 Transition::MakeNew(eSta1Idle, new ULActionAA3());
259 mTable[eAABORTPDUReceivedOpen].transitions[GetStateIndex(eSta10ReleaseCollisionAc)] =
260 Transition::MakeNew(eSta1Idle, new ULActionAA3());
261 mTable[eAABORTPDUReceivedOpen].transitions[GetStateIndex(eSta11ReleaseCollisionRq)] =
262 Transition::MakeNew(eSta1Idle, new ULActionAA3());
263 mTable[eAABORTPDUReceivedOpen].transitions[GetStateIndex(eSta12ReleaseCollisionAcLocal)] =
264 Transition::MakeNew(eSta1Idle, new ULActionAA3());
265 mTable[eAABORTPDUReceivedOpen].transitions[GetStateIndex(eSta13AwaitingClose)] =
266 Transition::MakeNew(eSta1Idle, new ULActionAA2());
267 //row 17
268 // Transport connection closed indication (local transport service),
269 mTable[eTransportConnectionClosed].transitions[GetStateIndex(eSta2Open)] =
270 Transition::MakeNew(eSta1Idle, new ULActionAA5());
271 mTable[eTransportConnectionClosed].transitions[GetStateIndex(eSta3WaitLocalAssoc)] =
272 Transition::MakeNew(eSta1Idle, new ULActionAA4());
273 mTable[eTransportConnectionClosed].transitions[GetStateIndex(eSta4LocalAssocDone)] =
274 Transition::MakeNew(eSta1Idle, new ULActionAA4());
275 mTable[eTransportConnectionClosed].transitions[GetStateIndex(eSta5WaitRemoteAssoc)] =
276 Transition::MakeNew(eSta1Idle, new ULActionAA4());
277 mTable[eTransportConnectionClosed].transitions[GetStateIndex(eSta6TransferReady)] =
278 Transition::MakeNew(eSta1Idle, new ULActionAA4());
279 mTable[eTransportConnectionClosed].transitions[GetStateIndex(eSta7WaitRelease)] =
280 Transition::MakeNew(eSta1Idle, new ULActionAA4());
281 mTable[eTransportConnectionClosed].transitions[GetStateIndex(eSta8WaitLocalRelease)] =
282 Transition::MakeNew(eSta1Idle, new ULActionAA4());
283 mTable[eTransportConnectionClosed].transitions[GetStateIndex(eSta9ReleaseCollisionRqLocal)] =
284 Transition::MakeNew(eSta1Idle, new ULActionAA4());
285 mTable[eTransportConnectionClosed].transitions[GetStateIndex(eSta10ReleaseCollisionAc)] =
286 Transition::MakeNew(eSta1Idle, new ULActionAA4());
287 mTable[eTransportConnectionClosed].transitions[GetStateIndex(eSta11ReleaseCollisionRq)] =
288 Transition::MakeNew(eSta1Idle, new ULActionAA4());
289 mTable[eTransportConnectionClosed].transitions[GetStateIndex(eSta12ReleaseCollisionAcLocal)] =
290 Transition::MakeNew(eSta1Idle, new ULActionAA4());
291 mTable[eTransportConnectionClosed].transitions[GetStateIndex(eSta13AwaitingClose)] =
292 Transition::MakeNew(eSta1Idle, new ULActionAA5());
293 //row 18
294 // ARTIM timer expired (Association reject/release timer),
295 mTable[eARTIMTimerExpired].transitions[GetStateIndex(eSta2Open)] =
296 Transition::MakeNew(eSta1Idle, new ULActionAA2());
297 mTable[eARTIMTimerExpired].transitions[GetStateIndex(eSta13AwaitingClose)] =
298 Transition::MakeNew(eSta1Idle, new ULActionAA2());
299 //row 19
300 // Unrecognized or invalid PDU received
301 mTable[eUnrecognizedPDUReceived].transitions[GetStateIndex(eSta3WaitLocalAssoc)] =
302 Transition::MakeNew(eSta13AwaitingClose, new ULActionAA1());
303 mTable[eUnrecognizedPDUReceived].transitions[GetStateIndex(eSta13AwaitingClose)] =
304 Transition::MakeNew(eSta1Idle, new ULActionAA8());
305 mTable[eUnrecognizedPDUReceived].transitions[GetStateIndex(eSta5WaitRemoteAssoc)] =
306 Transition::MakeNew(eSta13AwaitingClose, new ULActionAA8());
307 mTable[eUnrecognizedPDUReceived].transitions[GetStateIndex(eSta6TransferReady)] =
308 Transition::MakeNew(eSta13AwaitingClose, new ULActionAA8());
309 mTable[eUnrecognizedPDUReceived].transitions[GetStateIndex(eSta7WaitRelease)] =
310 Transition::MakeNew(eSta13AwaitingClose, new ULActionAA8());
311 mTable[eUnrecognizedPDUReceived].transitions[GetStateIndex(eSta8WaitLocalRelease)] =
312 Transition::MakeNew(eSta13AwaitingClose, new ULActionAA8());
313 mTable[eUnrecognizedPDUReceived].transitions[GetStateIndex(eSta9ReleaseCollisionRqLocal)] =
314 Transition::MakeNew(eSta13AwaitingClose, new ULActionAA8());
315 mTable[eUnrecognizedPDUReceived].transitions[GetStateIndex(eSta10ReleaseCollisionAc)] =
316 Transition::MakeNew(eSta13AwaitingClose, new ULActionAA8());
317 mTable[eUnrecognizedPDUReceived].transitions[GetStateIndex(eSta11ReleaseCollisionRq)] =
318 Transition::MakeNew(eSta13AwaitingClose, new ULActionAA8());
319 mTable[eUnrecognizedPDUReceived].transitions[GetStateIndex(eSta12ReleaseCollisionAcLocal)] =
320 Transition::MakeNew(eSta13AwaitingClose, new ULActionAA7());
321 }
322
323 //given the event and the state of the connection, call the appropriate action
HandleEvent(Subject * s,ULEvent & inEvent,ULConnection & inConnection,bool & outWaitingForEvent,EEventID & outRaisedEvent) const324 void ULTransitionTable::HandleEvent(Subject *s, ULEvent& inEvent, ULConnection& inConnection,
325 bool& outWaitingForEvent, EEventID& outRaisedEvent) const{
326 //first, find the Event
327 EEventID eventID = inEvent.GetEvent();
328 if (eventID < eEventDoesNotExist)
329 { //make sure that the event exists
330 //have to convert the state ID into an index
331 int stateIndex = GetStateIndex(inConnection.GetState());
332 if (stateIndex >= 0 && stateIndex < cMaxStateID)
333 {
334 if ( mTable[eventID].transitions[stateIndex] )
335 {
336 if (mTable[eventID].transitions[stateIndex]->mAction != nullptr)
337 {
338 gdcmDebugMacro( "Process: Event:" << (int)eventID << ", State:" << stateIndex );
339 inConnection.SetState(mTable[eventID].transitions[stateIndex]->mAction->
340 PerformAction(s,inEvent, inConnection, outWaitingForEvent, outRaisedEvent));
341 }
342 }
343 else
344 {
345 gdcmDebugMacro( "Transition failed (NULL) for event:" << (int)eventID << ", State:" << stateIndex );
346 }
347 }
348 }
349 }
350
351 } // end namespace network
352 } // end namespace gdcm
353