summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRHeniz <heniganr1@gmail.com>2021-10-22 16:12:48 -0400
committerRHeniz <heniganr1@gmail.com>2021-10-22 16:12:48 -0400
commit08def323c33fdc8035a63cb1e9b8e79f3a98743c (patch)
tree68f93fb7dbfc3a2996017b227593b640d6ec8986
parent13a7d2f782c7136e4a03aab5f3c0dbf7bc5f77a8 (diff)
downloadsdl_android-08def323c33fdc8035a63cb1e9b8e79f3a98743c.tar.gz
Update SecurityQueryPayload to include json data
-rw-r--r--android/sdl_android/src/androidTest/java/com/smartdevicelink/test/protocol/SecurityQueryPayloadTests.java23
-rw-r--r--base/src/main/java/com/smartdevicelink/protocol/SecurityQueryPayload.java23
-rw-r--r--base/src/main/java/com/smartdevicelink/session/BaseSdlSession.java29
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);