summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoel Fischer <joeljfischer@gmail.com>2016-03-10 13:46:44 -0500
committerJoel Fischer <joeljfischer@gmail.com>2016-03-10 13:46:44 -0500
commit291c001d2dedb1d2eaf3ea71d16a3d5fb9a88bec (patch)
tree3e7a3709e4c86835d5a6cd10dfab3cd3bd4696a6
parentf92f39b7e93e9d5e8a12a8564dcbab40cd2ee406 (diff)
downloadsdl_ios-hotfix/issue_349.tar.gz
Remove a session id after the service is disconnectedhotfix/issue_349
* Prefix some private SDLProtocol methods
-rw-r--r--SmartDeviceLink-iOS/SmartDeviceLink/SDLProtocol.m23
1 files changed, 16 insertions, 7 deletions
diff --git a/SmartDeviceLink-iOS/SmartDeviceLink/SDLProtocol.m b/SmartDeviceLink-iOS/SmartDeviceLink/SDLProtocol.m
index fa55239a6..2ff7f13e7 100644
--- a/SmartDeviceLink-iOS/SmartDeviceLink/SDLProtocol.m
+++ b/SmartDeviceLink-iOS/SmartDeviceLink/SDLProtocol.m
@@ -57,11 +57,17 @@
return self;
}
-- (void)storeSessionID:(UInt8)sessionID forServiceType:(SDLServiceType)serviceType {
+- (void)sdl_storeSessionID:(UInt8)sessionID forServiceType:(SDLServiceType)serviceType {
_sessionIDs[@(serviceType)] = @(sessionID);
}
-- (UInt8)retrieveSessionIDforServiceType:(SDLServiceType)serviceType {
+- (void)sdl_removeSessionIdForServiceType:(SDLServiceType)serviceType {
+ if (_sessionIDs[@(serviceType)] != nil) {
+ [_sessionIDs removeObjectForKey:@(serviceType)];
+ }
+}
+
+- (UInt8)sdl_retrieveSessionIDforServiceType:(SDLServiceType)serviceType {
NSNumber *number = _sessionIDs[@(serviceType)];
if (!number) {
NSString *logMessage = [NSString stringWithFormat:@"Warning: Tried to retrieve sessionID for serviceType %i, but no sessionID is saved for that service type.", serviceType];
@@ -77,8 +83,8 @@
case SDLServiceType_RPC: {
// Need a different header for starting the RPC service
header = [SDLProtocolHeader headerForVersion:1];
- if ([self retrieveSessionIDforServiceType:SDLServiceType_RPC]) {
- header.sessionID = [self retrieveSessionIDforServiceType:SDLServiceType_RPC];
+ if ([self sdl_retrieveSessionIDforServiceType:SDLServiceType_RPC]) {
+ header.sessionID = [self sdl_retrieveSessionIDforServiceType:SDLServiceType_RPC];
}
} break;
default: {
@@ -98,7 +104,7 @@
header.frameType = SDLFrameType_Control;
header.serviceType = serviceType;
header.frameData = SDLFrameData_EndSession;
- header.sessionID = [self retrieveSessionIDforServiceType:serviceType];
+ header.sessionID = [self sdl_retrieveSessionIDforServiceType:serviceType];
SDLProtocolMessage *message = [SDLProtocolMessage messageWithHeader:header andPayload:nil];
[self sendDataToTransport:message.data withPriority:serviceType];
@@ -156,7 +162,7 @@
header.frameType = SDLFrameType_Single;
header.serviceType = SDLServiceType_RPC;
header.frameData = SDLFrameData_SingleFrame;
- header.sessionID = [self retrieveSessionIDforServiceType:SDLServiceType_RPC];
+ header.sessionID = [self sdl_retrieveSessionIDforServiceType:SDLServiceType_RPC];
header.bytesInPayload = (UInt32)messagePayload.length;
// V2+ messages need to have message ID property set.
@@ -324,7 +330,7 @@
break;
}
- [self storeSessionID:sessionID forServiceType:serviceType];
+ [self sdl_storeSessionID:sessionID forServiceType:serviceType];
for (id<SDLProtocolListener> listener in self.protocolDelegateTable.allObjects) {
if ([listener respondsToSelector:@selector(handleProtocolStartSessionACK:sessionID:version:)]) {
@@ -342,6 +348,9 @@
}
- (void)handleProtocolEndSessionACK:(SDLServiceType)serviceType {
+ // Remove the session id
+ [self sdl_removeSessionIdForServiceType:serviceType];
+
for (id<SDLProtocolListener> listener in self.protocolDelegateTable.allObjects) {
if ([listener respondsToSelector:@selector(handleProtocolEndSessionACK:)]) {
[listener handleProtocolEndSessionACK:serviceType];