summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrett <3911458+BrettyWhite@users.noreply.github.com>2019-04-12 14:06:02 -0400
committerGitHub <noreply@github.com>2019-04-12 14:06:02 -0400
commit02d22038a57cbe9188ebb621d711b778d0141f27 (patch)
tree68e8d6db0935b28cfdc22a40383f3f154f47bf8a
parente2e6c3befc3360a2a7e5a9e5f22b99e9d4c7f3c0 (diff)
parentf5342369f3b4973df6a83676e72903b1012ce1dd (diff)
downloadsdl_android-02d22038a57cbe9188ebb621d711b778d0141f27.tar.gz
Merge pull request #1039 from smartdevicelink/bugfix/handle_old_rs_tr
Handle corner case during transport d/c
-rw-r--r--android/sdl_android/src/main/java/com/smartdevicelink/transport/TransportBroker.java4
-rw-r--r--android/sdl_android/src/main/java/com/smartdevicelink/transport/TransportManager.java29
2 files changed, 32 insertions, 1 deletions
diff --git a/android/sdl_android/src/main/java/com/smartdevicelink/transport/TransportBroker.java b/android/sdl_android/src/main/java/com/smartdevicelink/transport/TransportBroker.java
index 95dab5a62..0ab335bf9 100644
--- a/android/sdl_android/src/main/java/com/smartdevicelink/transport/TransportBroker.java
+++ b/android/sdl_android/src/main/java/com/smartdevicelink/transport/TransportBroker.java
@@ -535,6 +535,10 @@ public class TransportBroker {
}
+ protected int getRouterServiceVersion(){
+ return routerServiceVersion;
+ }
+
/**
* We want to check to see if the Router service is already up and running
*
diff --git a/android/sdl_android/src/main/java/com/smartdevicelink/transport/TransportManager.java b/android/sdl_android/src/main/java/com/smartdevicelink/transport/TransportManager.java
index 75094a4b0..ad4b41b84 100644
--- a/android/sdl_android/src/main/java/com/smartdevicelink/transport/TransportManager.java
+++ b/android/sdl_android/src/main/java/com/smartdevicelink/transport/TransportManager.java
@@ -295,8 +295,35 @@ public class TransportManager extends TransportManagerBase{
}
synchronized (TRANSPORT_STATUS_LOCK){
- TransportManager.this.transportStatus.remove(record);
+ boolean wasRemoved = TransportManager.this.transportStatus.remove(record);
//Might check connectedTransports vs transportStatus to ensure they are equal
+
+ //If the transport wasn't removed, check RS version for corner case
+ if(!wasRemoved && getRouterServiceVersion() == 8){
+ boolean foundMatch = false;
+ //There is an issue in the first gen of multi transport router services that
+ //will remove certain extras from messages to the TransportBroker if older apps
+ //are connected that do not support the multi transport messages. Because of
+ //that, we check the records we have and if the transport matches we assume it
+ //was the original transport that was received regardless of the address.
+ TransportType disconnectedTransportType = record.getType();
+ if(disconnectedTransportType != null) {
+ for (TransportRecord transportRecord : TransportManager.this.transportStatus) {
+ if (disconnectedTransportType.equals(transportRecord.getType())) {
+ //The record stored in the TM will contain the actual record the
+ //protocol layer used during the transport connection event
+ record = transportRecord;
+ foundMatch = true;
+ break;
+ }
+ }
+
+ if (foundMatch) { //Remove item after the loop to avoid concurrent modifications
+ TransportManager.this.transportStatus.remove(record);
+ Log.d(TAG, "Handling corner case of transport disconnect mismatch");
+ }
+ }
+ }
}
if(isLegacyModeEnabled()