summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnil Dahiya <anil_dahiya@infosys.com>2016-05-16 18:28:40 +0530
committerAnil Dahiya <anil_dahiya@infosys.com>2016-07-20 16:04:22 +0530
commitb9d21a277be57ffcf2c015ea054bbcb45f5e57ba (patch)
tree54fd1c897e35aba2754bbf7c697c8c816e822ce1
parent18b2a4ce2a8499e361852c479dbbc958669c82b4 (diff)
downloadsdl_android-b9d21a277be57ffcf2c015ea054bbcb45f5e57ba.tar.gz
Additional Changes for handling a crash observed during encryption/decryption in protocl layer.
-rw-r--r--sdl_android_lib/src/com/smartdevicelink/protocol/WiProProtocol.java30
1 files changed, 16 insertions, 14 deletions
diff --git a/sdl_android_lib/src/com/smartdevicelink/protocol/WiProProtocol.java b/sdl_android_lib/src/com/smartdevicelink/protocol/WiProProtocol.java
index 83b7ae68c..9fe72bcf2 100644
--- a/sdl_android_lib/src/com/smartdevicelink/protocol/WiProProtocol.java
+++ b/sdl_android_lib/src/com/smartdevicelink/protocol/WiProProtocol.java
@@ -54,8 +54,8 @@ public class WiProProtocol extends AbstractProtocol {
public byte getVersion() {
return this._version;
}
-
- public void setVersion(byte version) {
+
+ public void setVersion(byte version) {
if (version > 4) {
this._version = 4; //protect for future, proxy only supports v4 or lower
HEADER_SIZE = 12;
@@ -112,7 +112,7 @@ public class WiProProtocol extends AbstractProtocol {
System.arraycopy(secureData, 0, data,HEADER_SIZE, secureData.length);
}
else if (protocolMsg.getBulkData() != null) {
- data = new byte[12 + protocolMsg.getJsonSize() + protocolMsg.getBulkData().length];
+ data = new byte[12 + protocolMsg.getJsonSize() + protocolMsg.getBulkData().length];
sessionType = SessionType.BULK_DATA;
} else {
data = new byte[12 + protocolMsg.getJsonSize()];
@@ -143,8 +143,8 @@ public class WiProProtocol extends AbstractProtocol {
if (sdlSec == null)
return;
- int iNumBytes = sdlSec.encryptData(data, dataToRead);
- if (iNumBytes <= 0)
+ Integer iNumBytes = sdlSec.encryptData(data, dataToRead);
+ if ((iNumBytes == null) || (iNumBytes <= 0))
return;
byte[] encryptedData = new byte[iNumBytes];
@@ -217,14 +217,14 @@ public class WiProProtocol extends AbstractProtocol {
}
}
- public void handlePacketReceived(SdlPacket packet){
+ public void handlePacketReceived(SdlPacket packet){
//Check for a version difference
if (_version == 1) {
setVersion((byte)packet.version);
}
-
+
MessageFrameAssembler assembler = getFrameAssemblerForFrame(packet);
- assembler.handleFrame(packet);
+ assembler.handleFrame(packet);
onResetIncomingHeartbeat(SessionType.valueOf((byte)packet.getServiceType()), (byte)packet.getSessionId());
@@ -325,9 +325,11 @@ public class WiProProtocol extends AbstractProtocol {
SdlSecurityBase sdlSec = session.getSdlSecurity();
byte[] dataToRead = new byte[4096];
-
- int iNumBytes = sdlSec.decryptData(packet.payload, dataToRead);
-
+
+ Integer iNumBytes = sdlSec.decryptData(packet.getPayload(), dataToRead);
+ if ((iNumBytes == null) || (iNumBytes <= 0))
+ return;
+
byte[] decryptedData = new byte[iNumBytes];
System.arraycopy(dataToRead, 0, decryptedData, 0, iNumBytes);
packet.payload = decryptedData;
@@ -367,7 +369,7 @@ public class WiProProtocol extends AbstractProtocol {
}
else if (frameInfo == FrameDataControlFrameType.StartSession.getValue()) {
sendStartProtocolSessionACK(serviceType, (byte)packet.getSessionId());
- } else if (frameInfo == FrameDataControlFrameType.StartSessionACK.getValue()) {
+ } else if (frameInfo == FrameDataControlFrameType.StartSessionACK.getValue()) {
// Use this sessionID to create a message lock
Object messageLock = _messageLocks.get(packet.getSessionId());
if (messageLock == null) {
@@ -412,7 +414,7 @@ public class WiProProtocol extends AbstractProtocol {
message.setPayloadProtected(packet.isEncrypted());
SessionType serviceType = SessionType.valueOf((byte)packet.getServiceType());
if (serviceType == SessionType.RPC) {
- message.setMessageType(MessageType.RPC);
+ message.setMessageType(MessageType.RPC);
} else if (serviceType == SessionType.BULK_DATA) {
message.setMessageType(MessageType.BULK);
} // end-if
@@ -470,7 +472,7 @@ public class WiProProtocol extends AbstractProtocol {
@Override
public void SendHeartBeat(byte sessionID) {
final SdlPacket heartbeat = SdlPacketFactory.createHeartbeat(SessionType.CONTROL, sessionID, _version);
- handlePacketToSend(heartbeat);
+ handlePacketToSend(heartbeat);
}
@Override