diff options
author | Brett <3911458+BrettyWhite@users.noreply.github.com> | 2019-04-12 14:06:02 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-04-12 14:06:02 -0400 |
commit | 02d22038a57cbe9188ebb621d711b778d0141f27 (patch) | |
tree | 68e8d6db0935b28cfdc22a40383f3f154f47bf8a | |
parent | e2e6c3befc3360a2a7e5a9e5f22b99e9d4c7f3c0 (diff) | |
parent | f5342369f3b4973df6a83676e72903b1012ce1dd (diff) | |
download | sdl_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.java | 4 | ||||
-rw-r--r-- | android/sdl_android/src/main/java/com/smartdevicelink/transport/TransportManager.java | 29 |
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() |