summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoey Grover <joeygrover@gmail.com>2016-06-09 14:59:04 -0400
committerJoey Grover <joeygrover@gmail.com>2016-06-09 14:59:04 -0400
commit778fe5c9477b4a4e3bc44a0f3d9833ea5093ce9b (patch)
treee345fd08a656577beef6b8c7e9e8617315e79a6d
parent3619704e391b696fe0559a5743c65531f5c04697 (diff)
parentb72572664e9bab13eaa9936b5944deab5f7c7b57 (diff)
downloadsdl_android-778fe5c9477b4a4e3bc44a0f3d9833ea5093ce9b.tar.gz
Merge branch 'develop' of https://github.com/smartdevicelink/sdl_android into feature/multiplexing
# Conflicts: # sdl_android_lib/src/com/smartdevicelink/SdlConnection/SdlConnection.java # sdl_android_lib/src/com/smartdevicelink/SdlConnection/SdlSession.java # sdl_android_lib/src/com/smartdevicelink/protocol/ProtocolFrameHeaderFactory.java # sdl_android_lib/src/com/smartdevicelink/protocol/WiProProtocol.java # sdl_android_lib/src/com/smartdevicelink/proxy/rpc/enums/SdlDisconnectedReason.java
-rw-r--r--sdl_android_lib/src/com/smartdevicelink/SdlConnection/ISdlConnectionListener.java2
-rw-r--r--sdl_android_lib/src/com/smartdevicelink/SdlConnection/SdlConnection.java20
-rw-r--r--sdl_android_lib/src/com/smartdevicelink/SdlConnection/SdlSession.java15
-rw-r--r--sdl_android_lib/src/com/smartdevicelink/protocol/AbstractProtocol.java8
-rw-r--r--sdl_android_lib/src/com/smartdevicelink/protocol/IProtocolListener.java2
-rw-r--r--sdl_android_lib/src/com/smartdevicelink/protocol/SdlPacketFactory.java4
-rw-r--r--sdl_android_lib/src/com/smartdevicelink/protocol/WiProProtocol.java30
-rw-r--r--sdl_android_lib/src/com/smartdevicelink/proxy/SdlProxyBase.java6
-rw-r--r--sdl_android_lib/src/com/smartdevicelink/proxy/rpc/enums/SdlDisconnectedReason.java4
-rw-r--r--sdl_android_lib/src/com/smartdevicelink/transport/SdlRouterService.java6
10 files changed, 58 insertions, 39 deletions
diff --git a/sdl_android_lib/src/com/smartdevicelink/SdlConnection/ISdlConnectionListener.java b/sdl_android_lib/src/com/smartdevicelink/SdlConnection/ISdlConnectionListener.java
index 57fb15e50..2f9eff800 100644
--- a/sdl_android_lib/src/com/smartdevicelink/SdlConnection/ISdlConnectionListener.java
+++ b/sdl_android_lib/src/com/smartdevicelink/SdlConnection/ISdlConnectionListener.java
@@ -15,7 +15,7 @@ public interface ISdlConnectionListener {
byte sessionID, byte version, String correlationID);
public void onProtocolSessionStarted(SessionType sessionType,
- byte sessionID, byte version, String correlationID);
+ byte sessionID, byte version, String correlationID, int hashID);
public void onProtocolSessionEnded(SessionType sessionType,
byte sessionID, String correlationID);
diff --git a/sdl_android_lib/src/com/smartdevicelink/SdlConnection/SdlConnection.java b/sdl_android_lib/src/com/smartdevicelink/SdlConnection/SdlConnection.java
index 02d6b45e0..60d6e5362 100644
--- a/sdl_android_lib/src/com/smartdevicelink/SdlConnection/SdlConnection.java
+++ b/sdl_android_lib/src/com/smartdevicelink/SdlConnection/SdlConnection.java
@@ -145,13 +145,13 @@ public class SdlConnection implements IProtocolListener, ITransportListener, ISt
- private void closeConnection(boolean willRecycle, byte rpcSessionID) {
+ private void closeConnection(boolean willRecycle, byte rpcSessionID, int sessionHashId) {
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.EndProtocolSession(SessionType.RPC, rpcSessionID, sessionHashId);
}
if (willRecycle) {
_protocol = null;
@@ -261,8 +261,8 @@ public class SdlConnection implements IProtocolListener, ITransportListener, ISt
@Override
public void onProtocolSessionStarted(SessionType sessionType,
- byte sessionID, byte version, String correlationID) {
- _connectionListener.onProtocolSessionStarted(sessionType, sessionID, version, correlationID);
+ byte sessionID, byte version, String correlationID, int hashID) {
+ _connectionListener.onProtocolSessionStarted(sessionType, sessionID, version, correlationID, hashID);
}
@Override
@@ -494,7 +494,7 @@ public class SdlConnection implements IProtocolListener, ITransportListener, ISt
public void endService (SessionType sessionType, byte sessionID) {
synchronized(PROTOCOL_REFERENCE_LOCK){
if(_protocol != null){
- _protocol.EndProtocolSession(sessionType, sessionID);
+ _protocol.EndProtocolService(sessionType, sessionID);
}
}
}
@@ -519,8 +519,8 @@ public class SdlConnection implements IProtocolListener, ITransportListener, ISt
boolean didRemove = listenerList.remove(registerListener);
if(didRemove && _transport !=null && _transport.getTransportType()== TransportType.MULTIPLEX){ //If we're connected we can request the extra session now
((MultiplexTransport)_transport).removeSession(registerListener.getSessionId());
- }
- closeConnection(listenerList.size() == 0, registerListener.getSessionId());
+ }
+ closeConnection(listenerList.size() == 0, registerListener.getSessionId(), registerListener.getSessionHashId());
}
@@ -594,17 +594,17 @@ public class SdlConnection implements IProtocolListener, ITransportListener, ISt
@Override
public void onProtocolSessionStarted(SessionType sessionType,
- byte sessionID, byte version, String correlationID) {
+ byte sessionID, byte version, String correlationID, int hashID) {
for (SdlSession session : listenerList) {
if (session.getSessionId() == 0) {
- session.onProtocolSessionStarted(sessionType, sessionID, version, correlationID);
+ session.onProtocolSessionStarted(sessionType, sessionID, version, correlationID, hashID);
break;
}
}
if (sessionType.equals(SessionType.NAV) || sessionType.equals(SessionType.PCM)){
SdlSession session = findSessionById(sessionID);
if (session != null) {
- session.onProtocolSessionStarted(sessionType, sessionID, version, correlationID);
+ session.onProtocolSessionStarted(sessionType, sessionID, version, correlationID, hashID);
}
}
}
diff --git a/sdl_android_lib/src/com/smartdevicelink/SdlConnection/SdlSession.java b/sdl_android_lib/src/com/smartdevicelink/SdlConnection/SdlSession.java
index d4e9212ba..7f1359963 100644
--- a/sdl_android_lib/src/com/smartdevicelink/SdlConnection/SdlSession.java
+++ b/sdl_android_lib/src/com/smartdevicelink/SdlConnection/SdlSession.java
@@ -27,6 +27,7 @@ public class SdlSession implements ISdlConnectionListener, IHeartbeatMonitorList
IHeartbeatMonitor _incomingHeartbeatMonitor = null;
private static final String TAG = "SdlSession";
private LockScreenManager lockScreenMan = new LockScreenManager();
+ private int sessionHashId = 0;
@@ -70,7 +71,10 @@ public class SdlSession implements ISdlConnectionListener, IHeartbeatMonitorList
_incomingHeartbeatMonitor.setListener(this);
}
-
+ public int getSessionHashId() {
+ return this.sessionHashId;
+ }
+
public byte getSessionId() {
return this.sessionId;
}
@@ -174,12 +178,15 @@ public class SdlSession implements ISdlConnectionListener, IHeartbeatMonitorList
@Override
public void onProtocolSessionStarted(SessionType sessionType,
- byte sessionID, byte version, String correlationID) {
+ byte sessionID, byte version, String correlationID, int hashID) {
this.sessionId = sessionID;
lockScreenMan.setSessionID(sessionID);
- this.sessionListener.onProtocolSessionStarted(sessionType, sessionID, version, correlationID);Log.d(TAG, "session - on pro start");
+ this.sessionListener.onProtocolSessionStarted(sessionType, sessionID, version, correlationID, hashID);
//if (version == 3)
- initialiseSession();Log.d(TAG, "inited");
+ initialiseSession();
+ if (sessionType.eq(SessionType.RPC)){
+ sessionHashId = hashID;
+ }
}
@Override
diff --git a/sdl_android_lib/src/com/smartdevicelink/protocol/AbstractProtocol.java b/sdl_android_lib/src/com/smartdevicelink/protocol/AbstractProtocol.java
index 4db9383f1..bcc2e1df5 100644
--- a/sdl_android_lib/src/com/smartdevicelink/protocol/AbstractProtocol.java
+++ b/sdl_android_lib/src/com/smartdevicelink/protocol/AbstractProtocol.java
@@ -45,7 +45,9 @@ public abstract class AbstractProtocol {
// This method ends a protocol session. A corresponding call to the protocol
// listener onProtocolSessionEnded() method will be made when the protocol
// session has ended.
- public abstract void EndProtocolSession(SessionType sessionType, byte sessionID);
+ public abstract void EndProtocolSession(SessionType sessionType, byte sessionID, int hashID);
+
+ public abstract void EndProtocolService(SessionType serviceType, byte sessionID);
// TODO REMOVE
// This method sets the interval at which heartbeat protocol messages will be
// sent to SDL.
@@ -122,8 +124,8 @@ public abstract class AbstractProtocol {
// This method handles the startup of a protocol session. A callback is sent
// to the protocol listener.
protected void handleProtocolSessionStarted(SessionType sessionType,
- byte sessionID, byte version, String correlationID) {
- _protocolListener.onProtocolSessionStarted(sessionType, sessionID, version, correlationID);
+ byte sessionID, byte version, String correlationID, int hashID) {
+ _protocolListener.onProtocolSessionStarted(sessionType, sessionID, version, correlationID, hashID);
}
protected void handleProtocolSessionNACKed(SessionType sessionType,
diff --git a/sdl_android_lib/src/com/smartdevicelink/protocol/IProtocolListener.java b/sdl_android_lib/src/com/smartdevicelink/protocol/IProtocolListener.java
index 0e3ff6842..47317a086 100644
--- a/sdl_android_lib/src/com/smartdevicelink/protocol/IProtocolListener.java
+++ b/sdl_android_lib/src/com/smartdevicelink/protocol/IProtocolListener.java
@@ -12,7 +12,7 @@ public interface IProtocolListener {
void onProtocolMessageReceived(ProtocolMessage msg);
// Called to indicate that a protocol session has been started (from either side)
- void onProtocolSessionStarted(SessionType sessionType, byte sessionID, byte version, String correlationID);
+ void onProtocolSessionStarted(SessionType sessionType, byte sessionID, byte version, String correlationID, int hashID);
void onProtocolSessionNACKed(SessionType sessionType, byte sessionID, byte version, String correlationID);
diff --git a/sdl_android_lib/src/com/smartdevicelink/protocol/SdlPacketFactory.java b/sdl_android_lib/src/com/smartdevicelink/protocol/SdlPacketFactory.java
index 8f9faefd8..1fff2b1a2 100644
--- a/sdl_android_lib/src/com/smartdevicelink/protocol/SdlPacketFactory.java
+++ b/sdl_android_lib/src/com/smartdevicelink/protocol/SdlPacketFactory.java
@@ -47,10 +47,10 @@ public class SdlPacketFactory {
0,messageID,null);
}
- public static SdlPacket createEndSession(SessionType serviceType, byte sessionID, int messageID, byte version) {
+ public static SdlPacket createEndSession(SessionType serviceType, byte sessionID, int messageID, byte version, byte[] payload) {
return new SdlPacket(version,false,SdlPacket.FRAME_TYPE_CONTROL,
serviceType.getValue(),SdlPacket.FRAME_INFO_END_SERVICE,sessionID,
- 0,messageID,null);
+ payload.length,messageID,payload);
}
public static SdlPacket createSingleSendData(SessionType serviceType, byte sessionID,
diff --git a/sdl_android_lib/src/com/smartdevicelink/protocol/WiProProtocol.java b/sdl_android_lib/src/com/smartdevicelink/protocol/WiProProtocol.java
index 413ab61d8..284f04574 100644
--- a/sdl_android_lib/src/com/smartdevicelink/protocol/WiProProtocol.java
+++ b/sdl_android_lib/src/com/smartdevicelink/protocol/WiProProtocol.java
@@ -76,9 +76,10 @@ public class WiProProtocol extends AbstractProtocol {
handlePacketToSend(header);
} // end-method
- public void EndProtocolSession(SessionType sessionType, byte sessionID) {
- SdlPacket header = SdlPacketFactory.createEndSession(sessionType, sessionID, hashID, _version);
+ public void EndProtocolSession(SessionType sessionType, byte sessionID, int hashId) {
+ SdlPacket header = SdlPacketFactory.createEndSession(sessionType, sessionID, hashID, _version, BitConverter.intToByteArray(hashId));
handlePacketToSend(header);
+
} // end-method
public void SendMessage(ProtocolMessage protocolMsg) {
@@ -301,24 +302,22 @@ public class WiProProtocol extends AbstractProtocol {
messageLock = new Object();
_messageLocks.put((byte)packet.getSessionId(), messageLock);
}
- //hashID = BitConverter.intFromByteArray(data, 0);
+ int hashID = 0;
if (_version > 1){
- hashID = packet.getMessageId();
- }
- handleProtocolSessionStarted(serviceType,(byte) packet.getSessionId(), _version, "");
+ if (packet.payload!= null && packet.dataSize == 4){ //hashid will be 4 bytes in length
+ hashID = BitConverter.intFromByteArray(packet.payload, 0);
+ }
+ }
+ handleProtocolSessionStarted(serviceType,(byte) packet.getSessionId(), _version, "", hashID);
} else if (frameInfo == FrameDataControlFrameType.StartSessionNACK.getValue()) {
if (serviceType.eq(SessionType.NAV) || serviceType.eq(SessionType.PCM)) {
handleProtocolSessionNACKed(serviceType, (byte)packet.getSessionId(), _version, "");
-
} else {
handleProtocolError("Got StartSessionNACK for protocol sessionID=" + packet.getSessionId(), null);
}
} else if (frameInfo == FrameDataControlFrameType.EndSession.getValue()) {
- //if (hashID == BitConverter.intFromByteArray(data, 0))
if (_version > 1) {
- if (hashID == packet.getMessageId()){
- handleProtocolSessionEnded(serviceType, (byte)packet.getSessionId(), "");
- }//else...nothing
+ handleProtocolSessionEnded(serviceType, (byte)packet.getSessionId(), "");
} else {
handleProtocolSessionEnded(serviceType, (byte)packet.getSessionId(), "");
}
@@ -327,7 +326,7 @@ public class WiProProtocol extends AbstractProtocol {
} else if (frameInfo == FrameDataControlFrameType.EndSessionNACK.getValue()) {
handleProtocolSessionEndedNACK(serviceType, (byte)packet.getSessionId(), "");
} else if (frameInfo == FrameDataControlFrameType.ServiceDataACK.getValue()) {
- handleProtocolServiceDataACK(serviceType, (byte)packet.getSessionId ());
+ handleProtocolServiceDataACK(serviceType, (byte)packet.getSessionId ());
}
} // end-method
@@ -401,4 +400,11 @@ public class WiProProtocol extends AbstractProtocol {
final SdlPacket heartbeat = SdlPacketFactory.createHeartbeatACK(SessionType.CONTROL, sessionID, _version);
handlePacketToSend(heartbeat);
}
+
+ @Override
+ public void EndProtocolService(SessionType serviceType, byte sessionID) {
+ SdlPacket header = SdlPacketFactory.createEndSession(serviceType, sessionID, hashID, _version, new byte[4]);
+ handlePacketToSend(header);
+
+ }
} // end-class \ No newline at end of file
diff --git a/sdl_android_lib/src/com/smartdevicelink/proxy/SdlProxyBase.java b/sdl_android_lib/src/com/smartdevicelink/proxy/SdlProxyBase.java
index 9268648ed..470cb6a14 100644
--- a/sdl_android_lib/src/com/smartdevicelink/proxy/SdlProxyBase.java
+++ b/sdl_android_lib/src/com/smartdevicelink/proxy/SdlProxyBase.java
@@ -295,7 +295,7 @@ public abstract class SdlProxyBase<proxyListenerType extends IProxyListenerBase>
@Override
public void onProtocolSessionStarted(SessionType sessionType,
- byte sessionID, byte version, String correlationID) {
+ byte sessionID, byte version, String correlationID, int hashID) {
Intent sendIntent = createBroadcastIntent();
updateBroadcastIntent(sendIntent, "FUNCTION_NAME", "onProtocolSessionStarted");
@@ -323,7 +323,9 @@ public abstract class SdlProxyBase<proxyListenerType extends IProxyListenerBase>
NavServiceStarted();
} else if (sessionType.eq(SessionType.PCM)) {
AudioServiceStarted();
- }
+ } else if (sessionType.eq(SessionType.RPC)){
+ cycleProxy(SdlDisconnectedReason.RPC_SESSION_ENDED);
+ }
else if (_wiproVersion > 1) {
//If version is 2 or above then don't need to specify a Session Type
startRPCProtocolSession(sessionID, correlationID);
diff --git a/sdl_android_lib/src/com/smartdevicelink/proxy/rpc/enums/SdlDisconnectedReason.java b/sdl_android_lib/src/com/smartdevicelink/proxy/rpc/enums/SdlDisconnectedReason.java
index d1e69f744..0d1902e3a 100644
--- a/sdl_android_lib/src/com/smartdevicelink/proxy/rpc/enums/SdlDisconnectedReason.java
+++ b/sdl_android_lib/src/com/smartdevicelink/proxy/rpc/enums/SdlDisconnectedReason.java
@@ -24,8 +24,10 @@ public enum SdlDisconnectedReason {
/**
* This only occurs when multiplexing is running and it is found to be on an old gen 1 system.
*/
- LEGACY_BLUETOOTH_MODE_ENABLED
+ LEGACY_BLUETOOTH_MODE_ENABLED,
+ RPC_SESSION_ENDED
;
+
public static SdlDisconnectedReason valueForString(String value) {
try{
diff --git a/sdl_android_lib/src/com/smartdevicelink/transport/SdlRouterService.java b/sdl_android_lib/src/com/smartdevicelink/transport/SdlRouterService.java
index 914a4f292..2bf9efce6 100644
--- a/sdl_android_lib/src/com/smartdevicelink/transport/SdlRouterService.java
+++ b/sdl_android_lib/src/com/smartdevicelink/transport/SdlRouterService.java
@@ -1214,7 +1214,7 @@ public class SdlRouterService extends Service{
removeSessionFromMap(session);
byte[] uai = createForceUnregisterApp((byte)session, (byte)packet.getVersion());
manuallyWriteBytes(uai,0,uai.length);
- byte[] stopService = (SdlPacketFactory.createEndSession(SessionType.RPC, (byte)session, 0, (byte)packet.getVersion())).constructPacket();
+ byte[] stopService = (SdlPacketFactory.createEndSession(SessionType.RPC, (byte)session, 0, (byte)packet.getVersion(),new byte[4])).constructPacket();
manuallyWriteBytes(stopService,0,stopService.length);
return false;
}
@@ -1298,7 +1298,7 @@ public class SdlRouterService extends Service{
Log.i(TAG, "Attempting to stop session " + session);
byte[] uai = createForceUnregisterApp((byte)session, (byte)version);
manuallyWriteBytes(uai,0,uai.length);
- byte[] stopService = (SdlPacketFactory.createEndSession(SessionType.RPC, (byte)session, 0, (byte)version)).constructPacket();
+ byte[] stopService = (SdlPacketFactory.createEndSession(SessionType.RPC, (byte)session, 0, (byte)version,new byte[4])).constructPacket();
manuallyWriteBytes(stopService,0,stopService.length);
}
@@ -1316,7 +1316,7 @@ public class SdlRouterService extends Service{
sessionId = sessions.get(i).intValue();
unregister = createForceUnregisterApp((byte)sessionId,version);
manuallyWriteBytes(unregister,0,unregister.length);
- stopService = (SdlPacketFactory.createEndSession(SessionType.RPC, (byte)sessionId, 0, version)).constructPacket();
+ stopService = (SdlPacketFactory.createEndSession(SessionType.RPC, (byte)sessionId, 0, version,new byte[4])).constructPacket();
manuallyWriteBytes(stopService,0,stopService.length);
synchronized(SESSION_LOCK){
this.sessionMap.remove(sessionId);