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.OpenSession;
27 import org.metricshub.ipmi.core.coding.commands.session.Rakp1;
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.events.OpenSessionAck;
33 import org.metricshub.ipmi.core.sm.events.StateMachineEvent;
34
35
36
37
38
39 public class OpenSessionComplete extends State {
40
41 @Override
42 public void doTransition(StateMachine stateMachine,
43 StateMachineEvent machineEvent) {
44 if (machineEvent instanceof OpenSessionAck) {
45 OpenSessionAck event = (OpenSessionAck) machineEvent;
46
47 Rakp1 rakp1 = new Rakp1(event.getManagedSystemSessionId(),
48 event.getPrivilegeLevel(), event.getUsername(),
49 event.getPassword(), event.getBmcKey(),
50 event.getCipherSuite());
51
52 try {
53 stateMachine.setCurrent(new Rakp1Waiting(event.getSequenceNumber(), rakp1));
54 stateMachine.sendMessage(Encoder.encode(
55 new Protocolv20Encoder(), rakp1,
56 event.getSequenceNumber(), 0, 0));
57 } catch (Exception e) {
58 stateMachine.setCurrent(this);
59 stateMachine.doExternalAction(new ErrorAction(e));
60 }
61 } else {
62 stateMachine.doExternalAction(new ErrorAction(
63 new IllegalArgumentException("Invalid transition")));
64 }
65
66 }
67
68 @Override
69 public void doAction(StateMachine stateMachine, RmcpMessage message) {
70
71 }
72
73 }