diff -r e978f818f9bd -r cef4ff1e6c4f accessoryservices/accessoryserver/src/Server/AccSrvConnectionController.cpp --- a/accessoryservices/accessoryserver/src/Server/AccSrvConnectionController.cpp Fri Mar 19 09:58:42 2010 +0200 +++ b/accessoryservices/accessoryserver/src/Server/AccSrvConnectionController.cpp Fri Apr 16 16:18:45 2010 +0300 @@ -99,7 +99,7 @@ iConnectionStatusHandler = CAccSrvConnectionStatusHandler::NewL( this ); iModeHandler = CAccSrvModeHandler::NewL( this ); iASYProxyHandler = CAccSrvASYProxyHandler::NewL( this ); - iSettingsHandler = CAccSrvSettingsHandler::NewL( this, *aServerModel ); + iSettingsHandler = CAccSrvSettingsHandler::NewL( this, *aServerModel, iPolicy ); iWiredConnPublisher = CAccSrvWiredConnectionPublisher::NewL(); TRAPD( err, iChargingContextController = CAccSrvChargingContextController::NewL() ); if ( err != KErrNone ) // Server does not need to die on charging context fail. @@ -459,6 +459,95 @@ } // ----------------------------------------------------------------------------- +// CAccSrvConnectionController::HandleConnectionUpdateValidationL +// ----------------------------------------------------------------------------- +// +void CAccSrvConnectionController::HandleConnectionUpdateValidationL( + const TAccPolGenericID& aGenericID, + TAccPolGenericID& aOldGenericId, + const CAccSrvSettingsHandler* aCaller, + TInt aError ) + { + COM_TRACE_( "[AccFW:AccServer] CAccSrvConnectionController::HandleConnectionUpdateValidationL()" ); + + TInt err ( KErrNone ); + TAccSrvConnection isValidConnection(EAccSrvConnect); + TBool isConnected( iServerModel->IsConnected( aGenericID ) ); + + if( KErrNone == aError ) + { + isValidConnection = iPolicy->IsValidConnectionL( aGenericID, err ); + } + else + { + err = aError; + isValidConnection = EAccSrvDeny; + } + + if( iServerModel->FindAndRemoveCancelledConnectAccessory( aGenericID.UniqueID() ) ) + { + //Connection of this accessory is cancelled. + err = KErrCancel; + isValidConnection = EAccSrvDeny; + } + + switch( isValidConnection ) + { + case EAccSrvDetect: + { + } + break; + + case EAccSrvConnect: + { + if( isConnected ) + { + //update connection generic id array + iServerModel->UpdateConnectionL( aGenericID); + + // Complete all possible connection status related requests + iNotificationQueue->CompleteControlMessageL( EAccessoryConnectionStatusChanged, + KErrNone, + aGenericID.UniqueID() ); + iNotificationQueue->CompleteControlMessageL( EAccessoryDisconnected, + KErrNone, + aOldGenericId.UniqueID() ); + iNotificationQueue->CompleteControlMessageL( ENewAccessoryConnected, + KErrNone, + aGenericID.UniqueID() ); + } + + } + break; + + case EAccSrvDeny: + { + iServerModel->RemovePhysicalConnection( aGenericID ); + iServerModel->RemoveASYThreadID( aGenericID.UniqueID() );//Remove ThreadID GID mapping + iServerModel->CapabilityStorage().RemoveCapabilityList( aGenericID); + + + } + break; + + default: + { + TRACE_ASSERT_ALWAYS;//unhandled enum + } + break; + } + + iNotificationQueue->CompleteControlMessageL( EConnectAccessory, + err, + aGenericID.UniqueID() ); + + + COM_TRACE_( "[AccFW:AccServer] CAccSrvConnectionController::HandleConnectionUpdateValidationL - return void" ); + } + + + +// ----------------------------------------------------------------------------- // CAccSrvConnectionController::ConnectionHandlingCancel // ----------------------------------------------------------------------------- //