summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarkos Rapitis <mrapitis@ford.com>2016-02-04 14:55:09 -0500
committerMarkos Rapitis <mrapitis@ford.com>2016-02-04 14:55:09 -0500
commit55e34eddfb351f331df037ce2410fcc3b95e69bd (patch)
treec26acffc0cd90bb277c4d09fb409c50d1f32f067
parentff204a1d36e122923917d4174a243f94133c09e1 (diff)
downloadsdl_android-55e34eddfb351f331df037ce2410fcc3b95e69bd.tar.gz
Added hashid used for ending the RPC session. Now cycling the proxy when the rpc session has been ended via module request.feature/end_session_hash
-rw-r--r--sdl_android_lib/src/com/smartdevicelink/SdlConnection/ISdlConnectionListener.java2
-rw-r--r--sdl_android_lib/src/com/smartdevicelink/SdlConnection/SdlConnection.java18
-rw-r--r--sdl_android_lib/src/com/smartdevicelink/SdlConnection/SdlSession.java12
-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/ProtocolFrameHeaderFactory.java3
-rw-r--r--sdl_android_lib/src/com/smartdevicelink/protocol/WiProProtocol.java33
-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.java3
9 files changed, 53 insertions, 34 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 384499228..caca68eac 100644
--- a/sdl_android_lib/src/com/smartdevicelink/SdlConnection/SdlConnection.java
+++ b/sdl_android_lib/src/com/smartdevicelink/SdlConnection/SdlConnection.java
@@ -96,12 +96,12 @@ 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;
@@ -210,8 +210,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
@@ -443,7 +443,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);
}
}
}
@@ -464,7 +464,7 @@ public class SdlConnection implements IProtocolListener, ITransportListener, ISt
public void unregisterSession(SdlSession registerListener) {
listenerList.remove(registerListener);
- closeConnection(listenerList.size() == 0, registerListener.getSessionId());
+ closeConnection(listenerList.size() == 0, registerListener.getSessionId(), registerListener.getSessionHashId());
}
@@ -503,17 +503,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 dbc87b792..c029e62b6 100644
--- a/sdl_android_lib/src/com/smartdevicelink/SdlConnection/SdlSession.java
+++ b/sdl_android_lib/src/com/smartdevicelink/SdlConnection/SdlSession.java
@@ -26,6 +26,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;
@@ -69,7 +70,10 @@ public class SdlSession implements ISdlConnectionListener, IHeartbeatMonitorList
_incomingHeartbeatMonitor.setListener(this);
}
-
+ public int getSessionHashId() {
+ return this.sessionHashId;
+ }
+
public byte getSessionId() {
return this.sessionId;
}
@@ -173,12 +177,14 @@ 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);
+ this.sessionListener.onProtocolSessionStarted(sessionType, sessionID, version, correlationID, hashID);
//if (version == 3)
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 e9439b5b1..6af53e26b 100644
--- a/sdl_android_lib/src/com/smartdevicelink/protocol/AbstractProtocol.java
+++ b/sdl_android_lib/src/com/smartdevicelink/protocol/AbstractProtocol.java
@@ -46,7 +46,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.
@@ -124,8 +126,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 56dd88160..7efebf0e8 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/ProtocolFrameHeaderFactory.java b/sdl_android_lib/src/com/smartdevicelink/protocol/ProtocolFrameHeaderFactory.java
index 7d8a710e7..79b9bdda5 100644
--- a/sdl_android_lib/src/com/smartdevicelink/protocol/ProtocolFrameHeaderFactory.java
+++ b/sdl_android_lib/src/com/smartdevicelink/protocol/ProtocolFrameHeaderFactory.java
@@ -63,12 +63,13 @@ public class ProtocolFrameHeaderFactory {
return msg;
}
- public static ProtocolFrameHeader createEndSession(SessionType serviceType, byte sessionID, int messageID, byte version) {
+ public static ProtocolFrameHeader createEndSession(SessionType serviceType, byte sessionID, int messageID, byte version, int dataSize) {
ProtocolFrameHeader msg = new ProtocolFrameHeader();
msg.setVersion(version);
msg.setFrameType(FrameType.Control);
msg.setSessionType(serviceType);
msg.setSessionID(sessionID);
+ msg.setDataSize(dataSize);
msg.setFrameData(FrameDataControlFrameType.EndSession.value());
msg.setMessageID(messageID);
diff --git a/sdl_android_lib/src/com/smartdevicelink/protocol/WiProProtocol.java b/sdl_android_lib/src/com/smartdevicelink/protocol/WiProProtocol.java
index 3ac165fee..a68d3f89e 100644
--- a/sdl_android_lib/src/com/smartdevicelink/protocol/WiProProtocol.java
+++ b/sdl_android_lib/src/com/smartdevicelink/protocol/WiProProtocol.java
@@ -26,7 +26,6 @@ public class WiProProtocol extends AbstractProtocol {
byte[] _dataBuf = null;
int _dataBufWritePos = 0;
- int hashID = 0;
int messageID = 0;
@SuppressWarnings("unused")
@@ -90,12 +89,18 @@ public class WiProProtocol extends AbstractProtocol {
sendFrameToTransport(header);
} // end-method
- public void EndProtocolSession(SessionType sessionType, byte sessionID) {
- ProtocolFrameHeader header = ProtocolFrameHeaderFactory.createEndSession(sessionType, sessionID, hashID, _version);
- //byte[] data = new byte[4];
- //data = BitConverter.intToByteArray(hashID);
- //handleProtocolFrameToSend(header, data, 0, data.length);
- sendFrameToTransport(header);
+ @Override
+ public void EndProtocolService(SessionType serviceType, byte sessionID) {
+ ProtocolFrameHeader header = ProtocolFrameHeaderFactory.createEndSession(serviceType, sessionID, 0x00, _version, 0x00);
+ sendFrameToTransport(header);
+ }
+
+ @Override
+ public void EndProtocolSession(SessionType sessionType, byte sessionID, int hashId) {
+ byte[] data = new byte[4];
+ data = BitConverter.intToByteArray(hashId);
+ ProtocolFrameHeader header = ProtocolFrameHeaderFactory.createEndSession(sessionType, sessionID, 0x00, _version, data.length);
+ handleProtocolFrameToSend(header, data, 0, data.length);
} // end-method
public void SendMessage(ProtocolMessage protocolMsg) {
@@ -449,9 +454,13 @@ public class WiProProtocol extends AbstractProtocol {
messageLock = new Object();
_messageLocks.put(header.getSessionID(), messageLock);
}
- //hashID = BitConverter.intFromByteArray(data, 0);
- if (_version > 1) hashID = header.getMessageID();
- handleProtocolSessionStarted(header.getSessionType(), header.getSessionID(), _version, "");
+ int hashID = 0;
+ if (_version > 1){
+ if (data != null && data.length == 4){ //hashid will be 4 bytes in length
+ hashID = BitConverter.intFromByteArray(data, 0);
+ }
+ }
+ handleProtocolSessionStarted(header.getSessionType(), header.getSessionID(), _version, "", hashID);
} else if (header.getFrameData() == FrameDataControlFrameType.StartSessionNACK.getValue()) {
if (header.getSessionType().eq(SessionType.NAV) || header.getSessionType().eq(SessionType.PCM)) {
handleProtocolSessionNACKed(header.getSessionType(), header.getSessionID(), _version, "");
@@ -459,10 +468,8 @@ public class WiProProtocol extends AbstractProtocol {
handleProtocolError("Got StartSessionNACK for protocol sessionID=" + header.getSessionID(), null);
}
} else if (header.getFrameData() == FrameDataControlFrameType.EndSession.getValue()) {
- //if (hashID == BitConverter.intFromByteArray(data, 0))
if (_version > 1) {
- if (hashID == header.getMessageID())
- handleProtocolSessionEnded(header.getSessionType(), header.getSessionID(), "");
+ handleProtocolSessionEnded(header.getSessionType(), header.getSessionID(), "");
} else handleProtocolSessionEnded(header.getSessionType(), header.getSessionID(), "");
} else if (header.getFrameData() == FrameDataControlFrameType.EndSessionACK.getValue()) {
handleProtocolSessionEnded(header.getSessionType(), header.getSessionID(), "");
diff --git a/sdl_android_lib/src/com/smartdevicelink/proxy/SdlProxyBase.java b/sdl_android_lib/src/com/smartdevicelink/proxy/SdlProxyBase.java
index 17c479050..657957ba0 100644
--- a/sdl_android_lib/src/com/smartdevicelink/proxy/SdlProxyBase.java
+++ b/sdl_android_lib/src/com/smartdevicelink/proxy/SdlProxyBase.java
@@ -290,7 +290,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");
@@ -318,7 +318,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 ac1ba6ac1..ae1a08894 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
@@ -20,7 +20,8 @@ public enum SdlDisconnectedReason {
BLUETOOTH_ADAPTER_ERROR,
SDL_REGISTRATION_ERROR,
APP_INTERFACE_UNREG,
- GENERIC_ERROR;
+ GENERIC_ERROR,
+ RPC_SESSION_ENDED;
public static SdlDisconnectedReason valueForString(String value) {
try{