1 package org.metricshub.ipmi.core.coding.commands.session;
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.commands.IpmiCommandCoder;
26 import org.metricshub.ipmi.core.coding.payload.IpmiPayload;
27 import org.metricshub.ipmi.core.coding.payload.lan.IPMIException;
28 import org.metricshub.ipmi.core.coding.payload.lan.IpmiLanRequest;
29 import org.metricshub.ipmi.core.coding.payload.lan.NetworkFunction;
30 import org.metricshub.ipmi.core.coding.protocol.IpmiMessage;
31 import org.metricshub.ipmi.core.coding.payload.CompletionCode;
32 import org.metricshub.ipmi.core.common.TypeConverter;
33
34 import java.security.InvalidKeyException;
35 import java.security.NoSuchAlgorithmException;
36
37
38
39
40 public class CloseSession extends IpmiCommandCoder<CloseSessionResponseData> {
41
42 private static final int INVALID_SESSION_ID = 0x87;
43
44 private static final int INVALID_SESSION_HANDLE = 0x88;
45
46 private int sessionId;
47
48
49
50
51
52
53
54 public CloseSession(int sessionId) {
55
56 if (sessionId == 0) {
57 throw new IllegalArgumentException("Cannot close session '0'");
58 }
59
60 this.sessionId = sessionId;
61 }
62
63 @Override
64 public byte getCommandCode() {
65 return TypeConverter.intToByte(0x3c);
66 }
67
68 @Override
69 public NetworkFunction getNetworkFunction() {
70 return NetworkFunction.ApplicationRequest;
71 }
72
73 @Override
74 protected IpmiPayload preparePayload(int sequenceNumber) throws NoSuchAlgorithmException, InvalidKeyException {
75
76 byte[] payload = TypeConverter.intToLittleEndianByteArray(sessionId);
77
78 return new IpmiLanRequest(getNetworkFunction(), getCommandCode(), payload, TypeConverter.intToByte(sequenceNumber));
79 }
80
81 @Override
82 protected CompletionCode decodeCommandSpecificCompletionCode(int rawCode) {
83
84 switch (rawCode) {
85 case INVALID_SESSION_ID:
86 return CompletionCode.InvalidSessionId;
87 case INVALID_SESSION_HANDLE:
88 return CompletionCode.InvalidSessionHandle;
89 default:
90 return CompletionCode.Unknown;
91 }
92 }
93
94 @Override
95 public CloseSessionResponseData getResponseData(IpmiMessage message)
96 throws IPMIException,
97 NoSuchAlgorithmException,
98 InvalidKeyException {
99 validateResponse(message);
100
101 return new CloseSessionResponseData();
102 }
103
104 }