SDL_Android/SmartDeviceLinkAndroidProxy - added the correct version of the proxy
[profile/ivi/smartdevicelink.git] / SDL_Android / SmartDeviceLinkProxyAndroid / src / com / smartdevicelink / smartDeviceLinkConnection / smartDeviceLinkConnection.java
-//
-// Copyright (c) 2013 Ford Motor Company
-//
-package com.smartdevicelink.syncConnection;
-
-import com.smartdevicelink.exception.SmartDeviceLinkException;
-import com.smartdevicelink.protocol.AbstractProtocol;
-import com.smartdevicelink.protocol.IProtocolListener;
-import com.smartdevicelink.protocol.ProtocolMessage;
-import com.smartdevicelink.protocol.SmartDeviceLinkProtocol;
-import com.smartdevicelink.protocol.enums.SessionType;
-import com.smartdevicelink.transport.BTTransport;
-import com.smartdevicelink.transport.BaseTransportConfig;
-import com.smartdevicelink.transport.ITransportListener;
-import com.smartdevicelink.transport.SmartDeviceLinkTransport;
-import com.smartdevicelink.transport.TCPTransport;
-import com.smartdevicelink.transport.TCPTransportConfig;
-import com.smartdevicelink.transport.TransportType;
-
-public class SmartDeviceLinkConnection implements IProtocolListener, ITransportListener {
-
-       SmartDeviceLinkTransport _transport = null;
-       AbstractProtocol _protocol = null;
-       ISmartDeviceLinkConnectionListener _connectionListener = null;
-
-       // Thread safety locks
-       Object TRANSPORT_REFERENCE_LOCK = new Object();
-       Object PROTOCOL_REFERENCE_LOCK = new Object();
-       
-       public SmartDeviceLinkConnection(ISmartDeviceLinkConnectionListener listener, BaseTransportConfig transportConfig) {
-               _connectionListener = listener;
-               
-               // Initialize the transport
-               synchronized(TRANSPORT_REFERENCE_LOCK) {
-                       // Ensure transport is null
-                       if (_transport != null) {
-                               if (_transport.getIsConnected()) {
-                                       _transport.disconnect();
-                               }
-                               _transport = null;
-                       }
-                       
-                       if (transportConfig.getTransportType() == TransportType.BLUETOOTH)
-                       {
-                               _transport = new BTTransport(this);     
-                       }
-                       else if (transportConfig.getTransportType() == TransportType.TCP)
-                       {
-                _transport = new TCPTransport((TCPTransportConfig) transportConfig, this);
-            }
-               }
-               
-               // Initialize the protocol
-               synchronized(PROTOCOL_REFERENCE_LOCK) {
-                       // Ensure protocol is null
-                       if (_protocol != null) {
-                               _protocol = null;
-                       }
-                       
-                       _protocol = new SmartDeviceLinkProtocol(this);
-               }
-       }
-       
-       public void closeConnection(byte rpcSessionID) {
-               synchronized(PROTOCOL_REFERENCE_LOCK) {
-                       if (_protocol != null) {
-                               // If transport is still connected, sent EndProtocolSessionMessage
-                               if (_transport != null && _transport.getIsConnected()) {
-                                       _protocol.EndProtocolSession(SessionType.RPC, rpcSessionID);
-                               }
-                               _protocol = null;
-                       } // end-if
-               }
-               
-               synchronized (TRANSPORT_REFERENCE_LOCK) {
-                       if (_transport != null) {
-                               _transport.disconnect();
-                       }
-                       _transport = null;
-               }
-       }
-       
-       public void startTransport() throws SmartDeviceLinkException {
-               _transport.openConnection();
-       }
-       
-       public Boolean getIsConnected() {
-               
-               // If _transport is null, then it can't be connected
-               if (_transport == null) {
-                       return false;
-               }
-               
-               return _transport.getIsConnected();
-       }
-       
-       public void sendMessage(ProtocolMessage msg) {
-               _protocol.SendMessage(msg);
-       }
-       
-       @Override
-       public void onTransportBytesReceived(byte[] receivedBytes,
-                       int receivedBytesLength) {
-               // Send bytes to protocol to be interpreted 
-               synchronized(PROTOCOL_REFERENCE_LOCK) {
-                       if (_protocol != null) {
-                               _protocol.HandleReceivedBytes(receivedBytes, receivedBytesLength);
-                       }
-               }
-       }
-
-       @Override
-       public void onTransportConnected() {
-               synchronized(PROTOCOL_REFERENCE_LOCK){
-                       if(_protocol != null){
-                               _protocol.StartProtocolSession(SessionType.RPC);
-                       }
-               }
-       }
-
-       @Override
-       public void onTransportDisconnected(String info) {
-               // Pass directly to connection listener
-               _connectionListener.onTransportDisconnected(info);
-       }
-
-       @Override
-       public void onTransportError(String info, Exception e) {
-               // Pass directly to connection listener
-               _connectionListener.onTransportError(info, e);
-       }
-
-       @Override
-       public void onProtocolMessageBytesToSend(byte[] msgBytes, int offset,
-                       int length) {
-               // Protocol has packaged bytes to send, pass to transport for transmission 
-               synchronized(TRANSPORT_REFERENCE_LOCK) {
-                       if (_transport != null) {
-                               _transport.sendBytes(msgBytes, offset, length);
-                       }
-               }
-       }
-
-       @Override
-       public void onProtocolMessageReceived(ProtocolMessage msg) {
-               _connectionListener.onProtocolMessageReceived(msg);
-       }
-
-       @Override
-       public void onProtocolSessionStarted(SessionType sessionType,
-                       byte sessionID, byte version, String correlationID) {
-               _connectionListener.onProtocolSessionStarted(sessionType, sessionID, version, correlationID);
-       }
-
-       @Override
-       public void onProtocolSessionEnded(SessionType sessionType, byte sessionID,
-                       String correlationID) {
-               _connectionListener.onProtocolSessionEnded(sessionType, sessionID, correlationID);
-       }
-
-       @Override
-       public void onProtocolError(String info, Exception e) {
-               _connectionListener.onProtocolError(info, e);
-       }
-       
-       public TransportType getCurrentTransportType() {
-               return _transport.getTransportType();
-       }
-}
+package com.smartdevicelink.smartDeviceLinkConnection;\r
+\r
+\r
+import com.smartdevicelink.exception.SmartDeviceLinkException;\r
+import com.smartdevicelink.protocol.AbstractProtocol;\r
+import com.smartdevicelink.protocol.IProtocolListener;\r
+import com.smartdevicelink.protocol.ProtocolMessage;\r
+import com.smartdevicelink.protocol.SmartDeviceLinkProtocol;\r
+import com.smartdevicelink.protocol.enums.SessionType;\r
+import com.smartdevicelink.transport.*;\r
+\r
+public class smartDeviceLinkConnection implements IProtocolListener, ITransportListener {\r
+\r
+       SmartDeviceLinkTransport _transport = null;\r
+       AbstractProtocol _protocol = null;\r
+       IsmartDeviceLinkConnectionListener _connectionListener = null;\r
+\r
+       // Thread safety locks\r
+       Object TRANSPORT_REFERENCE_LOCK = new Object();\r
+       Object PROTOCOL_REFERENCE_LOCK = new Object();\r
+       \r
+       /**\r
+        * Constructor.\r
+        * \r
+        * @param listener SmartDeviceLink connection listener.\r
+        * @param transportConfig Transport configuration for this connection.\r
+        */\r
+       public smartDeviceLinkConnection(IsmartDeviceLinkConnectionListener listener, BaseTransportConfig transportConfig) {\r
+               _connectionListener = listener;\r
+               \r
+               // Initialize the transport\r
+               synchronized(TRANSPORT_REFERENCE_LOCK) {\r
+                       // Ensure transport is null\r
+                       if (_transport != null) {\r
+                               if (_transport.getIsConnected()) {\r
+                                       _transport.disconnect();\r
+                               }\r
+                               _transport = null;\r
+                       }\r
+                       \r
+                       if (transportConfig.getTransportType() == TransportType.BLUETOOTH)\r
+                       {\r
+                               _transport = new BTTransport(this);     \r
+                       }\r
+                       else if (transportConfig.getTransportType() == TransportType.TCP)\r
+                       {\r
+                _transport = new TCPTransport((TCPTransportConfig) transportConfig, this);\r
+            }\r
+               }\r
+               \r
+               // Initialize the protocol\r
+               synchronized(PROTOCOL_REFERENCE_LOCK) {\r
+                       // Ensure protocol is null\r
+                       if (_protocol != null) {\r
+                               _protocol = null;\r
+                       }\r
+                       \r
+                       _protocol = new SmartDeviceLinkProtocol(this);\r
+               }\r
+       }\r
+       \r
+       public AbstractProtocol getSmartDeviceLinkProtocolProtocol(){\r
+               return _protocol;\r
+       }\r
+       \r
+       public void closeConnection(byte rpcSessionID) {\r
+               synchronized(PROTOCOL_REFERENCE_LOCK) {\r
+                       if (_protocol != null) {\r
+                               // If transport is still connected, sent EndProtocolSessionMessage\r
+                               if (_transport != null && _transport.getIsConnected()) {\r
+                                       _protocol.EndProtocolSession(SessionType.RPC, rpcSessionID);\r
+                               }\r
+                               _protocol = null;\r
+                       } // end-if\r
+               }\r
+               \r
+               synchronized (TRANSPORT_REFERENCE_LOCK) {\r
+                       if (_transport != null) {\r
+                               _transport.disconnect();\r
+                       }\r
+                       _transport = null;\r
+               }\r
+       }\r
+       \r
+       public void startTransport() throws SmartDeviceLinkException {\r
+               _transport.openConnection();\r
+       }\r
+       \r
+       public Boolean getIsConnected() {\r
+               \r
+               // If _transport is null, then it can't be connected\r
+               if (_transport == null) {\r
+                       return false;\r
+               }\r
+               \r
+               return _transport.getIsConnected();\r
+       }\r
+       \r
+       public void sendMessage(ProtocolMessage msg) {\r
+               _protocol.SendMessage(msg);\r
+       }\r
+       \r
+       @Override\r
+       public void onTransportBytesReceived(byte[] receivedBytes,\r
+                       int receivedBytesLength) {\r
+               // Send bytes to protocol to be interpreted \r
+               synchronized(PROTOCOL_REFERENCE_LOCK) {\r
+                       if (_protocol != null) {\r
+                               _protocol.HandleReceivedBytes(receivedBytes, receivedBytesLength);\r
+                       }\r
+               }\r
+       }\r
+\r
+       @Override\r
+       public void onTransportConnected() {\r
+               synchronized(PROTOCOL_REFERENCE_LOCK){\r
+                       if(_protocol != null){\r
+                               _protocol.StartProtocolSession(SessionType.RPC);                                \r
+                               }\r
+                       }\r
+       }\r
+       \r
+       @Override\r
+       public void onTransportDisconnected(String info) {\r
+               // Pass directly to connection listener\r
+               _connectionListener.onTransportDisconnected(info);\r
+       }\r
+\r
+       @Override\r
+       public void onTransportError(String info, Exception e) {\r
+               // Pass directly to connection listener\r
+               _connectionListener.onTransportError(info, e);\r
+       }\r
+\r
+       @Override\r
+       public void onProtocolMessageBytesToSend(byte[] msgBytes, int offset,\r
+                       int length) {\r
+               // Protocol has packaged bytes to send, pass to transport for transmission \r
+               synchronized(TRANSPORT_REFERENCE_LOCK) {\r
+                       if (_transport != null) {\r
+                               _transport.sendBytes(msgBytes, offset, length);\r
+                       }\r
+               }\r
+       }\r
+\r
+       @Override\r
+       public void onProtocolMessageReceived(ProtocolMessage msg) {\r
+               _connectionListener.onProtocolMessageReceived(msg);\r
+       }\r
+\r
+       @Override\r
+       public void onProtocolSessionStarted(SessionType sessionType,\r
+                       byte sessionID, byte version, String correlationID) {\r
+               _connectionListener.onProtocolSessionStarted(sessionType, sessionID, version, correlationID);\r
+       }\r
+\r
+       @Override\r
+       public void onProtocolSessionEnded(SessionType sessionType, byte sessionID,\r
+                       String correlationID) {\r
+               _connectionListener.onProtocolSessionEnded(sessionType, sessionID, correlationID);\r
+       }\r
+\r
+       @Override\r
+       public void onProtocolError(String info, Exception e) {\r
+               _connectionListener.onProtocolError(info, e);\r
+       }\r
+       \r
+       /**\r
+        * Gets type of transport currently used by this connection.\r
+        * \r
+        * @return One of TransportType enumeration values.\r
+        * \r
+        * @see TransportType\r
+        */\r
+       public TransportType getCurrentTransportType() {\r
+               return _transport.getTransportType();\r
+       }\r
+}\r