summaryrefslogtreecommitdiff
path: root/sdl_android
diff options
context:
space:
mode:
authorAustin Kirk <askirk@umich.edu>2017-07-26 10:12:41 -0400
committerAustin Kirk <askirk@umich.edu>2017-08-03 10:24:38 -0400
commitcded5b37298b9693227cf48ffcb0683686cc93f4 (patch)
tree871db6c36f658ea9257397a304f3bc55a7b1e369 /sdl_android
parent23acbc1fdcdef287b696a5f92984ac33d60ec015 (diff)
downloadsdl_android-cded5b37298b9693227cf48ffcb0683686cc93f4.tar.gz
Support for Bson Tags in Start Service and Start Service ACK control frames
Diffstat (limited to 'sdl_android')
-rw-r--r--sdl_android/build.gradle6
-rw-r--r--sdl_android/libs/bson_java_port-release.aarbin0 -> 107159 bytes
-rw-r--r--sdl_android/src/main/java/com/smartdevicelink/protocol/SdlPacket.java31
-rw-r--r--sdl_android/src/main/java/com/smartdevicelink/protocol/WiProProtocol.java34
-rw-r--r--sdl_android/src/main/java/com/smartdevicelink/protocol/enums/BsonTags.java16
5 files changed, 81 insertions, 6 deletions
diff --git a/sdl_android/build.gradle b/sdl_android/build.gradle
index b9dc7cac8..d25fae5ee 100644
--- a/sdl_android/build.gradle
+++ b/sdl_android/build.gradle
@@ -29,12 +29,18 @@ android {
}
dependencies {
+ compile(name:'bson_java_port-release', ext:'aar')
compile fileTree(dir: 'libs', include: ['*.jar'])
androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
exclude group: 'com.android.support', module: 'support-annotations'
})
testCompile 'junit:junit:4.12'
+}
+repositories {
+ flatDir {
+ dirs 'libs'
+ }
}
buildscript {
diff --git a/sdl_android/libs/bson_java_port-release.aar b/sdl_android/libs/bson_java_port-release.aar
new file mode 100644
index 000000000..23b283ac6
--- /dev/null
+++ b/sdl_android/libs/bson_java_port-release.aar
Binary files differ
diff --git a/sdl_android/src/main/java/com/smartdevicelink/protocol/SdlPacket.java b/sdl_android/src/main/java/com/smartdevicelink/protocol/SdlPacket.java
index 9c7a02852..b417e761d 100644
--- a/sdl_android/src/main/java/com/smartdevicelink/protocol/SdlPacket.java
+++ b/sdl_android/src/main/java/com/smartdevicelink/protocol/SdlPacket.java
@@ -1,7 +1,9 @@
package com.smartdevicelink.protocol;
import java.nio.ByteBuffer;
+import java.util.HashMap;
+import com.livio.bsonjavaport.BSON.BsonEncoder;
import com.smartdevicelink.protocol.enums.FrameType;
import android.os.Parcel;
@@ -65,6 +67,7 @@ public class SdlPacket implements Parcelable{
int messageId;
int priorityCoefficient;
byte[] payload = null;
+ HashMap<String, Object> bsonPayload = new HashMap<>();
public SdlPacket(int version, boolean encryption, int frameType,
int serviceType, int frameInfo, int sessionId,
@@ -186,6 +189,11 @@ public class SdlPacket implements Parcelable{
}
public byte[] constructPacket(){
+ if(!bsonPayload.isEmpty()){
+ byte[] bsonBytes = BsonEncoder.encodeToBytes(bsonPayload);
+ payload = bsonBytes;
+ dataSize = bsonBytes.length;
+ }
return constructPacket(version, encryption, frameType,
serviceType, frameInfo, sessionId,
dataSize, messageId, payload);
@@ -219,6 +227,7 @@ public class SdlPacket implements Parcelable{
public static byte[] constructPacket(int version, boolean encryption, int frameType,
int serviceType, int controlFrameInfo, int sessionId,
int dataSize, int messageId, byte[] payload){
+
ByteBuffer builder;
switch(version){
case 1:
@@ -344,6 +353,24 @@ public class SdlPacket implements Parcelable{
}
};
-
-
+
+ public void putTag(String tag, Object data){
+ bsonPayload.put(tag, data);
+ }
+
+ public Object getTag(String tag){
+ if(bsonPayload.isEmpty()){
+ bsonPayload = BsonEncoder.decodeFromBytes(payload);
+ }
+ if(bsonPayload == null){
+ return null;
+ }
+
+ Object val = bsonPayload.get(tag);
+ if(val == null){
+ return null;
+ }else{
+ return val;
+ }
+ }
}
diff --git a/sdl_android/src/main/java/com/smartdevicelink/protocol/WiProProtocol.java b/sdl_android/src/main/java/com/smartdevicelink/protocol/WiProProtocol.java
index af6973d2e..c456b6179 100644
--- a/sdl_android/src/main/java/com/smartdevicelink/protocol/WiProProtocol.java
+++ b/sdl_android/src/main/java/com/smartdevicelink/protocol/WiProProtocol.java
@@ -1,9 +1,11 @@
package com.smartdevicelink.protocol;
+import com.livio.bsonjavaport.BSON.BsonObject;
import com.smartdevicelink.SdlConnection.SdlConnection;
import com.smartdevicelink.SdlConnection.SdlSession;
import com.smartdevicelink.exception.SdlException;
import com.smartdevicelink.exception.SdlExceptionCause;
+import com.smartdevicelink.protocol.enums.BsonTags;
import com.smartdevicelink.protocol.enums.FrameDataControlFrameType;
import com.smartdevicelink.protocol.enums.FrameType;
import com.smartdevicelink.protocol.enums.MessageType;
@@ -13,11 +15,13 @@ import com.smartdevicelink.util.BitConverter;
import com.smartdevicelink.util.DebugTool;
import java.io.ByteArrayOutputStream;
+import java.util.HashMap;
import java.util.Hashtable;
public class WiProProtocol extends AbstractProtocol {
byte _version = 1;
private final static String FailurePropagating_Msg = "Failure propagating ";
+ public static String MAX_PROTOCOL_VERSION = "5.0.0";
public static final int V1_V2_MTU_SIZE = 1500;
public static final int V3_V4_MTU_SIZE = 131072;
@@ -67,11 +71,15 @@ public class WiProProtocol extends AbstractProtocol {
}
public void setVersion(byte version) {
- if (version > 4) {
- this._version = 4; //protect for future, proxy only supports v4 or lower
+ if (version > 5) {
+ this._version = 5; //protect for future, proxy only supports v5 or lower
HEADER_SIZE = 12;
MAX_DATA_SIZE = V1_V2_MTU_SIZE - HEADER_SIZE; //default to lowest size since capabilities of this version are unknown
- } else if (version == 4) {
+ } else if (version == 5) {
+ this._version = version;
+ HEADER_SIZE = 12;
+ MAX_DATA_SIZE = V3_V4_MTU_SIZE; //versions 5 supports 128k MTU
+ }else if (version == 4) {
this._version = version;
HEADER_SIZE = 12;
MAX_DATA_SIZE = V3_V4_MTU_SIZE; //versions 4 supports 128k MTU
@@ -92,6 +100,9 @@ public class WiProProtocol extends AbstractProtocol {
public void StartProtocolSession(SessionType sessionType) {
SdlPacket header = SdlPacketFactory.createStartSession(sessionType, 0x00, _version, (byte) 0x00, false);
+ if(sessionType.equals(SessionType.RPC)){ // check for RPC session
+ header.putTag(BsonTags.PROTOCOL_VERSION, MAX_PROTOCOL_VERSION);
+ }
handlePacketToSend(header);
} // end-method
@@ -394,6 +405,19 @@ public class WiProProtocol extends AbstractProtocol {
else if (frameInfo == FrameDataControlFrameType.StartSession.getValue()) {
sendStartProtocolSessionACK(serviceType, (byte)packet.getSessionId());
} else if (frameInfo == FrameDataControlFrameType.StartSessionACK.getValue()) {
+ if(packet.version >= 5){
+ if(serviceType.equals(SessionType.RPC)){
+ hashID = (Integer) packet.getTag(BsonTags.HASH_ID);
+ MAX_DATA_SIZE = (Integer) packet.getTag(BsonTags.MTU);
+ MAX_PROTOCOL_VERSION = (String) packet.getTag(BsonTags.PROTOCOL_VERSION);
+ }else if(serviceType.equals(SessionType.PCM)){
+ // Not implemented
+ }else if(serviceType.equals(SessionType.NAV)){
+ // Not implemented
+ }
+ }else{
+
+ }
// Use this sessionID to create a message lock
Object messageLock = _messageLocks.get(packet.getSessionId());
if (messageLock == null) {
@@ -405,7 +429,7 @@ public class WiProProtocol extends AbstractProtocol {
if (packet.payload!= null && packet.dataSize == 4){ //hashid will be 4 bytes in length
hashID = BitConverter.intFromByteArray(packet.payload, 0);
}
- }
+ }
handleProtocolSessionStarted(serviceType,(byte) packet.getSessionId(), _version, "", hashID, packet.isEncrypted());
} else if (frameInfo == FrameDataControlFrameType.StartSessionNACK.getValue()) {
if (serviceType.eq(SessionType.NAV) || serviceType.eq(SessionType.PCM)) {
@@ -479,6 +503,8 @@ public class WiProProtocol extends AbstractProtocol {
@Override
public void StartProtocolService(SessionType sessionType, byte sessionID, boolean isEncrypted) {
+ // TODO: Add bson tags based on sessionType
+
SdlPacket header = SdlPacketFactory.createStartSession(sessionType, 0x00, _version, sessionID, isEncrypted);
handlePacketToSend(header);
diff --git a/sdl_android/src/main/java/com/smartdevicelink/protocol/enums/BsonTags.java b/sdl_android/src/main/java/com/smartdevicelink/protocol/enums/BsonTags.java
new file mode 100644
index 000000000..bebb9f834
--- /dev/null
+++ b/sdl_android/src/main/java/com/smartdevicelink/protocol/enums/BsonTags.java
@@ -0,0 +1,16 @@
+package com.smartdevicelink.protocol.enums;
+
+/**
+ * Created by austinkirk on 7/24/17.
+ */
+
+public class BsonTags {
+ public static final String PROTOCOL_VERSION = "protocolVersion";
+ public static final String HASH_ID = "hashId";
+ public static final String MTU = "MTU";
+ public static final String HEIGHT = "height";
+ public static final String WIDTH = "width";
+ public static final String VIDEO_PROTOCOL = "videoProtocol";
+ public static final String VIDEO_CODEC = "videoCodec";
+ public static final String REJECTED_PARAMS = "rejectedParams";
+}