1 package org.metricshub.ipmi.core.sm.states;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25 import org.metricshub.ipmi.core.coding.Encoder;
26 import org.metricshub.ipmi.core.coding.commands.session.Rakp1;
27 import org.metricshub.ipmi.core.coding.commands.session.Rakp3;
28 import org.metricshub.ipmi.core.coding.protocol.encoder.Protocolv20Encoder;
29 import org.metricshub.ipmi.core.coding.rmcp.RmcpMessage;
30 import org.metricshub.ipmi.core.sm.StateMachine;
31 import org.metricshub.ipmi.core.sm.actions.ErrorAction;
32 import org.metricshub.ipmi.core.sm.actions.GetSikAction;
33 import org.metricshub.ipmi.core.sm.events.Rakp2Ack;
34 import org.metricshub.ipmi.core.sm.events.StateMachineEvent;
35
36
37
38
39
40 public class Rakp1Complete extends State {
41
42 private Rakp1 rakp1;
43
44
45
46
47
48
49
50
51 public Rakp1Complete(Rakp1 rakp1) {
52 this.rakp1 = rakp1;
53 }
54
55 @Override
56 public void doTransition(StateMachine stateMachine, StateMachineEvent machineEvent) {
57 if (machineEvent instanceof Rakp2Ack) {
58 Rakp2Ack event = (Rakp2Ack) machineEvent;
59
60 Rakp3 rakp3 = new Rakp3(
61 event.getStatusCode(),
62 event.getManagedSystemSessionId(),
63 event.getCipherSuite(),
64 rakp1,
65 event.getRakp1ResponseData());
66
67 try {
68 stateMachine.setCurrent(
69 new Rakp3Waiting(event.getSequenceNumber(), rakp1, event.getRakp1ResponseData(), event.getCipherSuite()));
70 stateMachine.sendMessage(Encoder.encode(new Protocolv20Encoder(), rakp3, event.getSequenceNumber(), 0, 0));
71 stateMachine.doExternalAction(new GetSikAction(rakp1.calculateSik(event.getRakp1ResponseData())));
72 } catch (Exception e) {
73 stateMachine.setCurrent(this);
74 stateMachine.doExternalAction(new ErrorAction(e));
75 }
76 } else {
77 stateMachine.doExternalAction(new ErrorAction(new IllegalArgumentException("Invalid transition")));
78 }
79
80 }
81
82 @Override
83 public void doAction(StateMachine stateMachine, RmcpMessage message) {
84
85 }
86
87 }