diff options
author | Joel Fischer <joeljfischer@gmail.com> | 2016-03-10 13:46:44 -0500 |
---|---|---|
committer | Joel Fischer <joeljfischer@gmail.com> | 2016-03-10 13:46:44 -0500 |
commit | 291c001d2dedb1d2eaf3ea71d16a3d5fb9a88bec (patch) | |
tree | 3e7a3709e4c86835d5a6cd10dfab3cd3bd4696a6 | |
parent | f92f39b7e93e9d5e8a12a8564dcbab40cd2ee406 (diff) | |
download | sdl_ios-291c001d2dedb1d2eaf3ea71d16a3d5fb9a88bec.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.m | 23 |
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]; |