diff options
author | RHeniz <heniganr1@gmail.com> | 2021-10-22 16:12:48 -0400 |
---|---|---|
committer | RHeniz <heniganr1@gmail.com> | 2021-10-22 16:12:48 -0400 |
commit | 08def323c33fdc8035a63cb1e9b8e79f3a98743c (patch) | |
tree | 68f93fb7dbfc3a2996017b227593b640d6ec8986 | |
parent | 13a7d2f782c7136e4a03aab5f3c0dbf7bc5f77a8 (diff) | |
download | sdl_android-08def323c33fdc8035a63cb1e9b8e79f3a98743c.tar.gz |
Update SecurityQueryPayload to include json data
3 files changed, 54 insertions, 21 deletions
diff --git a/android/sdl_android/src/androidTest/java/com/smartdevicelink/test/protocol/SecurityQueryPayloadTests.java b/android/sdl_android/src/androidTest/java/com/smartdevicelink/test/protocol/SecurityQueryPayloadTests.java index 8c0c36041..68c64fedf 100644 --- a/android/sdl_android/src/androidTest/java/com/smartdevicelink/test/protocol/SecurityQueryPayloadTests.java +++ b/android/sdl_android/src/androidTest/java/com/smartdevicelink/test/protocol/SecurityQueryPayloadTests.java @@ -25,7 +25,7 @@ public class SecurityQueryPayloadTests { bqh.setQueryID(SecurityQueryID.SEND_HANDSHAKE_DATA); bqh.setQueryType(SecurityQueryType.REQUEST); bqh.setBulkData(null); - bqh.setJsonSize(0); + bqh.setJsonData(null); return bqh; } @@ -66,9 +66,9 @@ public class SecurityQueryPayloadTests { dummyBqh.setQueryType(SecurityQueryType.REQUEST); dummyBqh.setQueryID(SecurityQueryID.SEND_HANDSHAKE_DATA); dummyBqh.setCorrelationID(3); - dummyBqh.setJsonSize(0); + dummyBqh.setJsonData(new byte[0]); - byte[] assembledHeader = dummyBqh.assembleHeaderBytes(); + byte[] assembledHeader = dummyBqh.assembleSecurityQueryPayload(0); assertEquals(dummyBqh.getQueryType(), SecurityQueryType.valueOf(assembledHeader[0])); byte[] queryIDFromHeader = new byte[3]; System.arraycopy(assembledHeader, 1, queryIDFromHeader, 0, 3); @@ -81,7 +81,7 @@ public class SecurityQueryPayloadTests { public void testAssemblyAndParse() { SecurityQueryPayload bqh = createDummyBqh(); - byte[] bqhBytes = bqh.assembleHeaderBytes(); + byte[] bqhBytes = bqh.assembleSecurityQueryPayload(0); assertNotNull(bqhBytes); SecurityQueryPayload parsedBqh = SecurityQueryPayload.parseBinaryQueryHeader(bqhBytes); @@ -99,7 +99,7 @@ public class SecurityQueryPayloadTests { public void testCorruptHeader() { SecurityQueryPayload bqh = createDummyBqh(); - byte[] bqhBytes = bqh.assembleHeaderBytes(); + byte[] bqhBytes = bqh.assembleSecurityQueryPayload(0); assertNotNull(safeParse(bqhBytes)); @@ -114,13 +114,10 @@ public class SecurityQueryPayloadTests { } @Test - public void testJsonSetException() { - try { - SecurityQueryPayload bqh = createDummyBqh(); - bqh.setJsonData(null); - fail("Setting JSON data to null should have thrown an exception"); - } catch (Exception e) { - //Pass - } + public void testNullJsonData() { + SecurityQueryPayload bqh = createDummyBqh(); + bqh.setJsonData(null); + assertEquals(0, bqh.getJsonSize()); + assertEquals(null, bqh.getJsonData()); } } diff --git a/base/src/main/java/com/smartdevicelink/protocol/SecurityQueryPayload.java b/base/src/main/java/com/smartdevicelink/protocol/SecurityQueryPayload.java index c7bc1326d..2a102b8aa 100644 --- a/base/src/main/java/com/smartdevicelink/protocol/SecurityQueryPayload.java +++ b/base/src/main/java/com/smartdevicelink/protocol/SecurityQueryPayload.java @@ -84,7 +84,20 @@ public class SecurityQueryPayload { return msg; } - public byte[] assembleHeaderBytes() { + public byte[] assembleSecurityQueryPayload(int payloadSize) { + byte[] payLoad = new byte[SECURITY_QUERY_HEADER_SIZE + payloadSize]; + System.arraycopy(assembleHeaderBytes(), 0, payLoad, 0, SECURITY_QUERY_HEADER_SIZE); + + if (_securityQueryID == SecurityQueryID.SEND_INTERNAL_ERROR && _securityQueryType == SecurityQueryType.NOTIFICATION) { + System.arraycopy(_jsonData, 0, payLoad, SECURITY_QUERY_HEADER_SIZE, _jsonSize); + } else if (_securityQueryID == SecurityQueryID.SEND_HANDSHAKE_DATA && _securityQueryType == SecurityQueryType.RESPONSE) { + System.arraycopy(_bulkData, 0, payLoad, SECURITY_QUERY_HEADER_SIZE, payloadSize); + } + + return payLoad; + } + + private byte[] assembleHeaderBytes() { // From the properties, create a data buffer // Query Type - first 8 bits // Query ID - next 24 bits @@ -126,7 +139,7 @@ public class SecurityQueryPayload { return _jsonSize; } - public void setJsonSize(int _jsonSize) { + private void setJsonSize(int _jsonSize) { this._jsonSize = _jsonSize; } @@ -143,6 +156,12 @@ public class SecurityQueryPayload { } public void setJsonData(byte[] _jsonData) { + if (_jsonData == null) { + this._jsonSize = 0; + this._jsonData = null; + return; + } + this._jsonSize = _jsonData.length; this._jsonData = new byte[this._jsonSize]; System.arraycopy(_jsonData, 0, this._jsonData, 0, _jsonSize); } diff --git a/base/src/main/java/com/smartdevicelink/session/BaseSdlSession.java b/base/src/main/java/com/smartdevicelink/session/BaseSdlSession.java index d68e9cd20..8f2b3740d 100644 --- a/base/src/main/java/com/smartdevicelink/session/BaseSdlSession.java +++ b/base/src/main/java/com/smartdevicelink/session/BaseSdlSession.java @@ -44,6 +44,7 @@ import com.smartdevicelink.protocol.ProtocolMessage; import com.smartdevicelink.protocol.SdlPacket; import com.smartdevicelink.protocol.SdlProtocolBase; import com.smartdevicelink.protocol.enums.ControlFrameTags; +import com.smartdevicelink.protocol.enums.SecurityQueryErrorCode; import com.smartdevicelink.protocol.enums.SecurityQueryID; import com.smartdevicelink.protocol.enums.SecurityQueryType; import com.smartdevicelink.protocol.enums.SessionType; @@ -61,6 +62,9 @@ import com.smartdevicelink.util.DebugTool; import com.smartdevicelink.util.SystemInfo; import com.smartdevicelink.util.Version; +import org.json.JSONException; +import org.json.JSONObject; + import java.util.ArrayList; import java.util.HashMap; import java.util.List; @@ -240,24 +244,37 @@ public abstract class BaseSdlSession implements ISdlProtocol, ISecurityInitializ // Assemble a security query payload header for our response SecurityQueryPayload responseHeader = new SecurityQueryPayload(); + byte[] returnBytes; if (iNumBytes == null || iNumBytes <= 0) { DebugTool.logError(TAG, "Internal Error processing control service"); responseHeader.setQueryID(SecurityQueryID.SEND_INTERNAL_ERROR); responseHeader.setQueryType(SecurityQueryType.NOTIFICATION); responseHeader.setCorrelationID(msg.getCorrID()); - responseHeader.setJsonSize(0); + byte[] jsonData; + JSONObject jsonObject = new JSONObject(); + try { + jsonObject.put("id", 254); + jsonObject.put("text", "Error value for testing"); + jsonData = jsonObject.toString().getBytes(); + } catch (JSONException e) { + DebugTool.logError(TAG, "JSON exception when constructing handshake error Notification"); + e.printStackTrace(); + jsonData = new byte[0]; + } + responseHeader.setJsonData(jsonData); + responseHeader.setBulkData(null); + responseHeader.setErrorCode(SecurityQueryErrorCode.ERROR_UNKNOWN_INTERNAL_ERROR); + returnBytes = responseHeader.assembleSecurityQueryPayload(responseHeader.getJsonSize()); } else { responseHeader.setQueryID(SecurityQueryID.SEND_HANDSHAKE_DATA); responseHeader.setQueryType(SecurityQueryType.RESPONSE); responseHeader.setCorrelationID(msg.getCorrID()); - responseHeader.setJsonSize(0); + responseHeader.setBulkData(dataToRead); + responseHeader.setJsonData(null); + returnBytes = responseHeader.assembleSecurityQueryPayload(iNumBytes); } - byte[] returnBytes = new byte[iNumBytes + 12]; - System.arraycopy(responseHeader.assembleHeaderBytes(), 0, returnBytes, 0, 12); - System.arraycopy(dataToRead, 0, returnBytes, 12, iNumBytes); - ProtocolMessage protocolMessage = new ProtocolMessage(); protocolMessage.setSessionType(SessionType.CONTROL); protocolMessage.setData(returnBytes); |