summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoey Grover <joeygrover@gmail.com>2018-10-08 15:45:48 -0400
committerJoey Grover <joeygrover@gmail.com>2018-10-08 15:45:48 -0400
commit4880f37d6cf0dbeac7aa6c382ae67ce1ea31f58f (patch)
treea6fe2c7d3f87d437677366af12446b6ca6b6afd2
parentcda09b5688bfea907a6dbab0166b86c3861aaa22 (diff)
downloadsdl_android-4880f37d6cf0dbeac7aa6c382ae67ce1ea31f58f.tar.gz
Fix logic for TCP connection requestsbugfix/multi_tcp_lifecycle
-rw-r--r--sdl_android/src/main/java/com/smartdevicelink/transport/SdlRouterService.java46
1 files changed, 37 insertions, 9 deletions
diff --git a/sdl_android/src/main/java/com/smartdevicelink/transport/SdlRouterService.java b/sdl_android/src/main/java/com/smartdevicelink/transport/SdlRouterService.java
index 4b37dfd24..ec61a13e3 100644
--- a/sdl_android/src/main/java/com/smartdevicelink/transport/SdlRouterService.java
+++ b/sdl_android/src/main/java/com/smartdevicelink/transport/SdlRouterService.java
@@ -614,17 +614,45 @@ public class SdlRouterService extends Service{
break;
case TransportConstants.ROUTER_REQUEST_SECONDARY_TRANSPORT_CONNECTION:
// Currently this only handles one TCP connection
+
String ipAddress = receivedBundle.getString(ControlFrameTags.RPC.TransportEventUpdate.TCP_IP_ADDRESS);
int port = receivedBundle.getInt(ControlFrameTags.RPC.TransportEventUpdate.TCP_PORT);
- if(ipAddress == null){ // double check if null or empty
- // Handle TCP disconnection
- if(service.tcpTransport != null){
- service.tcpTransport.stop(MultiplexBaseTransport.STATE_NONE);
- service.tcpTransport = null;
- }
- }else{
- service.tcpTransport = new MultiplexTcpTransport(port, ipAddress, true, service.tcpHandler);
- service.tcpTransport.start();
+
+ if(ipAddress != null){
+ if(service.tcpTransport != null){
+ switch (service.tcpTransport.getState()){
+ case MultiplexBaseTransport.STATE_CONNECTED:
+ case MultiplexBaseTransport.STATE_CONNECTING:
+ // A TCP connection is currently active. This version of the
+ // router service can't handle multiple TCP transports so just
+ // return a connected message to requester.
+ if(msg.replyTo != null){
+ // Send a transport connect message to the app that requested
+ // the tcp transport
+ try {
+ msg.replyTo.send(service.createHardwareConnectedMessage(service.tcpTransport.transportRecord));
+ } catch (RemoteException e) {
+ e.printStackTrace();
+ }
+ }
+ //Nothing else to do, so return out of this method
+ return;
+
+ case MultiplexBaseTransport.STATE_NONE:
+ case MultiplexBaseTransport.STATE_LISTEN:
+ case MultiplexBaseTransport.STATE_ERROR:
+ //Clear out tcp transport
+ service.tcpTransport.stop(MultiplexBaseTransport.STATE_NONE);
+ service.tcpTransport = null;
+ //Do not return, need to create a new TCP connection
+ }
+
+ }//else { TCP transport does not exists.}
+
+ //TCP transport either doesn't exist or is not connected. Start one up.
+ service.tcpTransport = new MultiplexTcpTransport(port, ipAddress, true, service.tcpHandler);
+ service.tcpTransport.start();
+
}
break;
default: