- added signature creation when sending MeteringReceiptReq during DC charging
- added a fix that prevents a NullPointerException in case MeterInfo element is not present when checked on SECC while processing MeteringReceiptReq
This commit is contained in:
parent
7cd7bde429
commit
fd20302604
|
@ -11,9 +11,11 @@
|
|||
package org.eclipse.risev2g.evcc.states;
|
||||
|
||||
import org.eclipse.risev2g.evcc.session.V2GCommunicationSessionEVCC;
|
||||
import org.eclipse.risev2g.shared.enumerations.GlobalValues;
|
||||
import org.eclipse.risev2g.shared.enumerations.V2GMessages;
|
||||
import org.eclipse.risev2g.shared.messageHandling.ReactionToIncomingMessage;
|
||||
import org.eclipse.risev2g.shared.messageHandling.TerminateSession;
|
||||
import org.eclipse.risev2g.shared.utils.SecurityUtils;
|
||||
import org.eclipse.risev2g.shared.v2gMessages.msgDef.ChargeProgressType;
|
||||
import org.eclipse.risev2g.shared.v2gMessages.msgDef.CurrentDemandResType;
|
||||
import org.eclipse.risev2g.shared.v2gMessages.msgDef.DCEVSEStatusType;
|
||||
|
@ -47,6 +49,18 @@ public class WaitForCurrentDemandRes extends ClientState {
|
|||
meteringReceiptReq.setMeterInfo(currentDemandRes.getMeterInfo());
|
||||
meteringReceiptReq.setSAScheduleTupleID(currentDemandRes.getSAScheduleTupleID());
|
||||
meteringReceiptReq.setSessionID(getCommSessionContext().getSessionID());
|
||||
|
||||
// Set xml reference element
|
||||
getXMLSignatureRefElements().put(meteringReceiptReq.getId(), SecurityUtils.generateDigest(meteringReceiptReq, false));
|
||||
|
||||
// Set signing private key
|
||||
setSignaturePrivateKey(SecurityUtils.getPrivateKey(
|
||||
SecurityUtils.getKeyStore(
|
||||
GlobalValues.EVCC_KEYSTORE_FILEPATH.toString(),
|
||||
GlobalValues.PASSPHRASE_FOR_CERTIFICATES_AND_KEYS.toString()),
|
||||
GlobalValues.ALIAS_CONTRACT_CERTIFICATE.toString())
|
||||
);
|
||||
|
||||
return getSendMessage(meteringReceiptReq, V2GMessages.METERING_RECEIPT_RES);
|
||||
}
|
||||
|
||||
|
|
|
@ -56,6 +56,7 @@ public class WaitForCurrentDemandReq extends ServerState {
|
|||
currentDemandRes.setEVSEPresentCurrent(evseController.getPresentCurrent());
|
||||
currentDemandRes.setEVSEPresentVoltage(evseController.getPresentVoltage());
|
||||
currentDemandRes.setMeterInfo(evseController.getMeterInfo());
|
||||
getCommSessionContext().setSentMeterInfo(evseController.getMeterInfo());
|
||||
currentDemandRes.setSAScheduleTupleID(getCommSessionContext().getChosenSAScheduleTuple());
|
||||
|
||||
// TODO how to determine if a receipt is required or not?
|
||||
|
|
|
@ -77,6 +77,8 @@ public class WaitForMeteringReceiptReq extends ServerState {
|
|||
.getAllowedRequests().add(V2GMessages.POWER_DELIVERY_REQ);
|
||||
((ForkState) getCommSessionContext().getStates().get(V2GMessages.FORK))
|
||||
.getAllowedRequests().add(V2GMessages.CHARGING_STATUS_REQ);
|
||||
((ForkState) getCommSessionContext().getStates().get(V2GMessages.FORK))
|
||||
.getAllowedRequests().add(V2GMessages.CURRENT_DEMAND_REQ);
|
||||
|
||||
return getSendMessage(meteringReceiptRes, V2GMessages.FORK);
|
||||
} else {
|
||||
|
@ -115,13 +117,22 @@ public class WaitForMeteringReceiptReq extends ServerState {
|
|||
}
|
||||
|
||||
|
||||
private boolean meterInfoEquals(MeterInfoType sentMeterInfo, MeterInfoType receivedMeterInfo) {
|
||||
// Only meterID is mandatory field, thus check for null values as well
|
||||
if (!sentMeterInfo.getMeterID().equals(receivedMeterInfo.getMeterID()) ||
|
||||
(sentMeterInfo.getMeterReading() != null && !sentMeterInfo.getMeterReading().equals(receivedMeterInfo.getMeterReading())) ||
|
||||
(sentMeterInfo.getMeterStatus() != null && !sentMeterInfo.getMeterStatus().equals(receivedMeterInfo.getMeterStatus())) ||
|
||||
(sentMeterInfo.getSigMeterReading() != null && !Arrays.equals(sentMeterInfo.getSigMeterReading(), receivedMeterInfo.getSigMeterReading())) ||
|
||||
(sentMeterInfo.getTMeter() != null && !sentMeterInfo.getTMeter().equals(receivedMeterInfo.getTMeter()))) return false;
|
||||
else return true;
|
||||
private boolean meterInfoEquals(MeterInfoType meterInfoSentBySECC, MeterInfoType meterInfoReceivedFromEVCC) {
|
||||
if (meterInfoSentBySECC == null) {
|
||||
getLogger().error("MeterInfo sent by SECC is not saved in session context, value is null");
|
||||
return false;
|
||||
} else if (meterInfoReceivedFromEVCC == null) {
|
||||
getLogger().error("MeterInfo received from EVCC is null");
|
||||
return false;
|
||||
} else {
|
||||
// Only meterID is mandatory field, thus check for null values as well
|
||||
if (!meterInfoSentBySECC.getMeterID().equals(meterInfoReceivedFromEVCC.getMeterID()) ||
|
||||
(meterInfoSentBySECC.getMeterReading() != null && !meterInfoSentBySECC.getMeterReading().equals(meterInfoReceivedFromEVCC.getMeterReading())) ||
|
||||
(meterInfoSentBySECC.getMeterStatus() != null && !meterInfoSentBySECC.getMeterStatus().equals(meterInfoReceivedFromEVCC.getMeterStatus())) ||
|
||||
(meterInfoSentBySECC.getSigMeterReading() != null && !Arrays.equals(meterInfoSentBySECC.getSigMeterReading(), meterInfoReceivedFromEVCC.getSigMeterReading())) ||
|
||||
(meterInfoSentBySECC.getTMeter() != null && !meterInfoSentBySECC.getTMeter().equals(meterInfoReceivedFromEVCC.getTMeter()))
|
||||
) return false;
|
||||
else return true;
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue