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.IpmiVersion;
27 import org.metricshub.ipmi.core.coding.commands.session.GetChannelAuthenticationCapabilities;
28 import org.metricshub.ipmi.core.coding.commands.session.GetChannelCipherSuites;
29 import org.metricshub.ipmi.core.coding.protocol.encoder.Protocolv15Encoder;
30 import org.metricshub.ipmi.core.coding.protocol.encoder.Protocolv20Encoder;
31 import org.metricshub.ipmi.core.coding.rmcp.RmcpMessage;
32 import org.metricshub.ipmi.core.common.TypeConverter;
33 import org.metricshub.ipmi.core.sm.StateMachine;
34 import org.metricshub.ipmi.core.sm.actions.ErrorAction;
35 import org.metricshub.ipmi.core.sm.events.Default;
36 import org.metricshub.ipmi.core.sm.events.GetChannelCipherSuitesPending;
37 import org.metricshub.ipmi.core.sm.events.StateMachineEvent;
38
39
40
41
42
43 public class Uninitialized extends State {
44
45 @Override
46 public void doTransition(StateMachine stateMachine, StateMachineEvent machineEvent) {
47 if (machineEvent instanceof GetChannelCipherSuitesPending) {
48 Default event = (GetChannelCipherSuitesPending) machineEvent;
49 GetChannelCipherSuites cipherSuites = new GetChannelCipherSuites(TypeConverter.intToByte(0xE), (byte) 0);
50 try {
51 stateMachine.setCurrent(new CiphersWaiting(0, event.getSequenceNumber()));
52
53 stateMachine
54 .sendMessage(Encoder.encode(new Protocolv20Encoder(), cipherSuites, event.getSequenceNumber(), 0, 0));
55 } catch (Exception e) {
56 stateMachine.setCurrent(this);
57 stateMachine.doExternalAction(new ErrorAction(e));
58 }
59 } else if (machineEvent instanceof Default) {
60
61
62 Default event = (Default) machineEvent;
63 GetChannelAuthenticationCapabilities authCap = new GetChannelAuthenticationCapabilities(
64 IpmiVersion.V15,
65 IpmiVersion.V20,
66 event.getCipherSuite(),
67 event.getPrivilegeLevel(),
68 TypeConverter.intToByte(0xe));
69 try {
70 stateMachine.setCurrent(new AuthcapWaiting(event.getSequenceNumber()));
71 stateMachine.sendMessage(Encoder.encode(new Protocolv15Encoder(), authCap, event.getSequenceNumber(), 0, 0));
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 @Override
82 public void doAction(StateMachine stateMachine, RmcpMessage message) {
83
84 }
85
86 }