diff options
author | Joey Grover <joeygrover@gmail.com> | 2018-10-08 15:45:48 -0400 |
---|---|---|
committer | Joey Grover <joeygrover@gmail.com> | 2018-10-08 15:45:48 -0400 |
commit | 4880f37d6cf0dbeac7aa6c382ae67ce1ea31f58f (patch) | |
tree | a6fe2c7d3f87d437677366af12446b6ca6b6afd2 | |
parent | cda09b5688bfea907a6dbab0166b86c3861aaa22 (diff) | |
download | sdl_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.java | 46 |
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: |