//
// De-Registers a script/executable. Runtimes should pass the previously registered
// script identifier corresponding to the script to be de-registered.
// 
// Operation Code  : EUnRegisterScript
// IPC Argument[0] : Script Identifier
// IPC Argument[1] : Policy Identifier
// IPC Argument[2] : Success code (as inOut parameter)
// IPC Argument[3] : none 
//  
TInt RSecMgrSession::UnRegisterScript(TExecutableID aExeID, TPolicyID aPolicyID)
	{
	if (aExeID<=KErrNone) 
		return ErrInvalidScriptID;
	if (aPolicyID<=KErrNone)
		return ErrInvalidPolicyID;

	TPckgBuf<TInt> errCode(KErrNone);
	TIpcArgs args(aExeID, aPolicyID, &errCode);

	TInt result = SendReceive (EUnRegisterScript, args);

	if ( KErrNone==result)
		return errCode ();

	return result;
	}
// ---------------------------------------------------------------------------
// RContentManager::Connect
// Starts and creates a session of Content Manager
// ---------------------------------------------------------------------------
//
EXPORT_C TInt RContentManager::Connect()
    {
    LOG(_L("[Cm Server]\t RContentManager::Connect"));
    
    iCanceled = EFalse;
    
    TInt tryLoop( 0 );
    TInt errCode( KErrNone );

    for ( tryLoop = 0; tryLoop < KServerRetries; tryLoop++ )
        {
        errCode = CreateSession(KCmServerName,
            TVersion( KCmServerMajor, KCmServerMinor,
                    KCmServerBuild ) );
        //gives MessageSlots of -1
        //this uses global pool rather than local pool

        TRACE(Print(_L("[Cm Server]\t RContentManager::Connect New Session \
        created with status %d\n"), errCode));

        if( errCode == KErrNotSupported )
            {
            TRACE(Print(_L("[Cm Server]\t Version not supported!\n")));
            return errCode;
            }
        if ( errCode != KErrNotFound && errCode != KErrServerTerminated)
            {
            return errCode;
            }

        errCode = StartServer();

        TRACE(Print(_L("[Cm Server]\t RContentManager::Connect Start server \
        errCode %d\n"), errCode));

        if ( errCode != KErrNone && errCode != KErrAlreadyExists )
            {
            return errCode;
            }

        }
    return errCode;
    }
Esempio n. 3
0
/**
*程序异常处理
*/
LONG ApplicationCrashHandler(EXCEPTION_POINTERS *pException){//程式异常捕获  
    /* 
      ***保存数据代码*** 
    */  
	//创建 Dump 文件  
	HANDLE hDumpFile = CreateFile(QTime::currentTime().toString("HH时mm分ss秒zzz.dmp").utf16(), GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);  
	if( hDumpFile != INVALID_HANDLE_VALUE){  
		//Dump信息  
		MINIDUMP_EXCEPTION_INFORMATION dumpInfo;  
		dumpInfo.ExceptionPointers = pException;  
		dumpInfo.ThreadId = GetCurrentThreadId();  
		dumpInfo.ClientPointers = TRUE;  
		//写入Dump文件内容  
		MiniDumpWriteDump(GetCurrentProcess(), GetCurrentProcessId(), hDumpFile, MiniDumpNormal, &dumpInfo, NULL, NULL);  
	}  
    //这里弹出一个错误对话框并退出程序  
    EXCEPTION_RECORD* record = pException->ExceptionRecord;  
    QString errCode(QString::number(record->ExceptionCode,16)),errAdr(QString::number((uint)record->ExceptionAddress,16)),errMod;  
	qDebug()<<"错误代码:" + errCode<<"错误地址:" + errAdr;
    return EXCEPTION_EXECUTE_HANDLER;  
} 
// ----------------------------------------------------------------------------------
// CASYStubCmdHandlerBase::ProcessCommandL()
// ----------------------------------------------------------------------------------
void CASYStubCmdHandlerBase::ProcessCommandL( const TProcessCmdId aCommand, const TASYCmdParams& aCmdParams )
    {
    COMPONENT_TRACE( ( _L( "ASYStub - CASYStubCmdHandlerBase::ProcessCommandL() - Enter" ) ) );
    
    CASYMainServiceBase* mainServiceBase = ASYMainServiceBase();
    COMPONENT_TRACE( ( _L( "AsyStub - CASYStubCmdHandlerBase::ProcessCommandL - mainServiceBase (0x%x)" ), &mainServiceBase ) );
    CASYStubMainServiceBase* AsyStub = reinterpret_cast<CASYStubMainServiceBase*>( mainServiceBase );
    
    COMPONENT_TRACE( ( _L( "AsyStub - CASYStubCmdHandlerBase::ProcessCommandL - AsyStub (0x%x)" ), &AsyStub ) );
    
    TTFCapability aCapabilityS = AsyStub->GetAndRemoveCapability();
    
    TASYCommandParamRecord cmdParams( aCmdParams() );//For debugging
    
    COMPONENT_TRACE( ( _L( "AsyStub - CASYStubCmdHandlerBase::ProcessCommandL - command: (0x%x)" ), aCommand ) );
    
    switch ( aCommand )
        {
        case ECmdGetValueBool: 
            {
            COMPONENT_TRACE( ( _L( "ASYStub - CASYStubCmdHandlerBase::ProcessCommandL() - Get value Bool" ) ) );
            TUint32 name;
            aCmdParams().iNameRecord.GetName( name );
            TAccValueTypeTBool aCmdResponse = { EFalse };
            
            if( name == aCapabilityS.iCapability )
                {
                if( 0 != aCapabilityS.iTimeMs )
                    {
                    //Serve asynchronously                    
                    Start( aCapabilityS.iTimeMs, aCapabilityS.iValue, EAPVBool );
                    }
                else
                    {
                    aCmdResponse.iValue = aCapabilityS.iValue;
                    ProcessResponseL( aCmdResponse ); 
                    }
                }
            else
               {
               TRACE_ASSERT_ALWAYS;    
               ProcessResponseL( aCmdResponse, KErrArgument );
               }
            }
            break;
          
        case ECmdSetValueBool: 
            {
            COMPONENT_TRACE( ( _L( "ASYStub - CASYStubCmdHandlerBase::ProcessCommandL() - Set value Bool" ) ) );
            TUint32 name;
            aCmdParams().iNameRecord.GetName( name );
            TAccValueTypeTBool aCmdResponse = { EFalse };
            
            if( name == aCapabilityS.iCapability 
             && aCmdParams().iCmdValue == aCapabilityS.iValue )
                {
                if( aCapabilityS.iTimeMs )
                    {
                    //Serve asynchronously                    
                    Start( aCapabilityS.iTimeMs, aCapabilityS.iValue, EAPVBool );
                    }
                else
                    {
                    aCmdResponse.iValue = aCmdParams().iCmdValue;
                    ProcessResponseL( aCmdResponse );
                    }
                }
            else
               {
               TRACE_ASSERT_ALWAYS;    
               ProcessResponseL( aCmdResponse, KErrArgument );
               }
            }
            break;
                  
        case ECmdProcessCommandInit:
            {
            COMPONENT_TRACE( ( _L( "ASYStub - CASYStubCmdHandlerBase::ProcessCommandL() - Process command init" ) ) );
            TAccValueTypeTBool boolInitResponse;
            TBool everyThing( ETrue );
        
            // If everything is ok
            if ( everyThing )
                {            
                COMPONENT_TRACE( ( _L( "ASYStub - CASYStubCmdHandlerBase::ProcessCommandL() - everything is ok" ) ) );
                boolInitResponse.iValue = ETrue;
                ProcessResponseL( boolInitResponse );            
                }
        
            // If everything is not ok
            else
                {
                COMPONENT_TRACE( ( _L( "ASYStub - CASYStubCmdHandlerBase::ProcessCommandL() - everything is not ok" ) ) );
                boolInitResponse.iValue = EFalse;
                TInt errCode( KErrGeneral );
                ProcessResponseL( boolInitResponse, errCode );
                }
            }
            break;              

        // For user selection...
        case ECmdAccessoryUpdated:
            {
            COMPONENT_TRACE( ( _L( "ASYStub - CASYStubCmdHandlerBase::ProcessCommandL() - Accessory updated" ) ) );
            TAccValueTypeTBool boolInitResponse;
            TBool everyThing( ETrue );
        
            //get capabilities
            CAccPolSubblockNameArray* nameArray = CAccPolSubblockNameArray::NewL();
            CleanupStack::PushL( nameArray );
            
            RAccessoryServer server;
            server.Connect();
          
            RAccessorySingleConnection connectionBase;
            connectionBase.CreateSubSession( server);
            connectionBase.GetSubblockNameArrayL( cmdParams.iGenericID, *nameArray );
            RArray<TUint32>& array = *TAccPolSubblockNameArrayAccessor::Array( nameArray );
            
            for ( TInt i( 0 ); i < array.Count(); i++ )
                {
                TUint32 name = array[ i ];
                TAccPolNameRecord nameRecord;
                nameRecord.SetNameL( name );
                TAccValueTypeTInt value;
                
                TRAPD( err, connectionBase.GetValueL( cmdParams.iGenericID, nameRecord, value ) );
                
                if ( err != KErrNone )       
                    {
                    COMPONENT_TRACE( ( _L( "ASYStub - CASYStubCmdHandlerBase::ProcessCommandL() - Capability 0x%x has no value!" ), name ) );
                    }
                name = 0;     
                }
            connectionBase.CloseSubSession();
            server.Close();
            
            CleanupStack::PopAndDestroy( nameArray );
            // If everything is ok
            if ( everyThing )
                 {            
                 COMPONENT_TRACE( ( _L( "ASYStub - CASYStubCmdHandlerBase::ProcessCommandL() - everything is ok" ) ) );
                 boolInitResponse.iValue = ETrue;
                 ProcessResponseL( boolInitResponse );            
                 }
             // If everything is not ok
            else
                 {
                 COMPONENT_TRACE( ( _L( "ASYStub - CASYStubCmdHandlerBase::ProcessCommandL() - everything is not ok" ) ) );
                 boolInitResponse.iValue = EFalse;
                 TInt errCode( KErrGeneral );
                 ProcessResponseL( boolInitResponse, errCode );
                 }
            }
            break;      
            
        case ECmdGetSupportedBTProfiles:
            {
            COMPONENT_TRACE( ( _L( "ASYStub - CASYStubCmdHandlerBase::ProcessCommandL() - Get BT profiles - Here is something wrong" ) ) );
            TASYBTAccInfo btInfo;
            btInfo.iReserved = 0;
            TBTDevAddr btAddr( aCmdParams().iCmdValue );
            switch( aCmdParams().iCmdValue )            
                {
                case KBTAddrCarkit:
                    {
                    btInfo.iDeviceInfo = 0x191;
                    btInfo.iDeviceType = KDTCarKit;
                    btInfo.iProfiles = KAccInfoHFP;
                    btInfo.iSupportedFeatures.At(0) = 1;   
                                
                    TASYBTAccInfoPckgC btInfoPckgC( btInfo );                                 
                    ProcessResponseL( btInfoPckgC, KErrNone );
                    }
                    break;
                
                case KBTAddrHeadsetHSPAndHFP:
                    {
                    btInfo.iDeviceInfo = 0x192;
                    btInfo.iDeviceType = KDTHeadset;
                    btInfo.iProfiles = KAccInfoHSP | KAccInfoHFP;
                    btInfo.iSupportedFeatures.At( 0 ) = 1;   
                    btInfo.iSupportedFeatures.At( 1 ) = 2;   
                  
                    TASYBTAccInfoPckgC btInfoPckgC( btInfo );                                 
                    ProcessResponseL( btInfoPckgC, KErrNone );
                    }
                    break;
                
                case KBTAddrHeadsetHSP:
                    {
                    btInfo.iDeviceInfo = 0x193;
                    btInfo.iDeviceType = KDTHeadset;
                    btInfo.iProfiles = KAccInfoHSP; 
                    btInfo.iSupportedFeatures.At(0) = 1;   
                  
                    TASYBTAccInfoPckgC btInfoPckgC( btInfo );                                 
                    ProcessResponseL( btInfoPckgC, KErrNone );
                    }
                    break;
                
                case KBTAddrHeadsetHFP:
                    {
                    btInfo.iDeviceInfo = 0x194;
                    btInfo.iDeviceType = KDTHeadset;
                    btInfo.iProfiles = KAccInfoHFP; 
                    btInfo.iSupportedFeatures.At(1) = 1;   
                  
                    TASYBTAccInfoPckgC btInfoPckgC( btInfo );                                 
                    ProcessResponseL( btInfoPckgC, KErrNone );
                    }
                    break;

                case KBTAddrHeadsetAVRCP:
                    {
                    btInfo.iDeviceInfo = 0x195;
                    btInfo.iDeviceType = KDTHeadset;
                    btInfo.iProfiles = KAccInfoHFP; 
                    btInfo.iSupportedFeatures.At(1) = 1;   
                  
                    TASYBTAccInfoPckgC btInfoPckgC( btInfo );                                 
                    ProcessResponseL( btInfoPckgC, KErrNone );
                    }
                    break;
                 
                case KBTAddrHeadseA2DP:
                    {
                    btInfo.iDeviceInfo = 0x196;
                    btInfo.iDeviceType = KDTHeadset;
                    btInfo.iProfiles = KAccInfoHFP; 
                    btInfo.iSupportedFeatures.At(1) = 1;   
                    btInfo.iReserved |= KAccInfoDRM;
                  
                    TASYBTAccInfoPckgC btInfoPckgC( btInfo );                                 
                    ProcessResponseL( btInfoPckgC, KErrNone );
                    }
                    break;                                        

                case KBTAddrHeadsetEmptyPR:
                    {
                    btInfo.iDeviceInfo = 0x197;
                    btInfo.iDeviceType = KDTHeadset;
                    btInfo.iProfiles = 0; 
                  
                    TASYBTAccInfoPckgC btInfoPckgC( btInfo );                                 
                    ProcessResponseL( btInfoPckgC, KErrNone );
                    }
                    break;

                case KBTAddrHeadsetNokiaSPId:
                    {
                    btInfo.iDeviceInfo = 0x181;
                    btInfo.iDeviceType = KDTHeadset;
                    btInfo.iProfiles = KAccInfoHSP; 
                    btInfo.iSupportedFeatures.At(0) = 1;   
                    
                    TASYBTAccInfoPckgC btInfoPckgC( btInfo );                                 
                    ProcessResponseL( btInfoPckgC, KErrNone );
                    }
                    break;
                    
                case KBTAddrNoResponse:
                    {
                    // No response
                    }
                    break;    

                case KBTAddrErrCode:
                    {
                    btInfo.iDeviceInfo = 0x198;
                    btInfo.iDeviceType = KDTHeadset;
                    btInfo.iProfiles = KAccInfoHSP; 
                    btInfo.iSupportedFeatures.At( 0 ) = 1;   
                    
                    TASYBTAccInfoPckgC btInfoPckgC( btInfo );                                 
                    ProcessResponseL( btInfoPckgC, KErrGeneral );
                    }
                    break;

                case KBTAllBitsOn: // All supported bits on
                    {
                    btInfo.iDeviceInfo = 0x198;
                    btInfo.iDeviceType = KDTHeadset;
                    btInfo.iProfiles = KAccInfoHSP | KAccInfoHFP | KAccInfoAVRCP | KAccInfoA2DP; 
                    btInfo.iSupportedFeatures.At( 0 ) = 0xFFFF;   
                    btInfo.iSupportedFeatures.At( 1 ) = 0xFFFF;   
                    btInfo.iSupportedFeatures.At( 2 ) = 0xFFFF;   
                    btInfo.iSupportedFeatures.At( 3 ) = 0xFFFF;   

                    TASYBTAccInfoPckgC btInfoPckgC( btInfo );                                 
                    ProcessResponseL( btInfoPckgC, KErrNone );
                    }
                    break;

                default:
                    {                           
                    btInfo.iDeviceInfo = 0x181;
                    btInfo.iDeviceType = KDTHeadset;
                    btInfo.iProfiles = KAccInfoHSP | KAccInfoHFP;
                    btInfo.iSupportedFeatures.At( 0 ) = 1;   
                    btInfo.iSupportedFeatures.At( 1 ) = 2;  
             
                    TASYBTAccInfoPckgC btInfoPckgC( btInfo );                                 
                    ProcessResponseL( btInfoPckgC, KErrNone );
                    }
                    break;
                }
            
          break;
          }

        default:
            {   
            COMPONENT_TRACE( ( _L( "BTASYStub - CBTBTASYStubCmdHandlerBase::ProcessCommandL() - ERROR: unhandled command" ) ) );  
            TRACE_ASSERT_ALWAYS;
            User::Panic(_L("ASY Stub"), KErrGeneral );
            }
            break;      
        }
    COMPONENT_TRACE( ( _L( "ASYStub - CASYStubCmdHandlerBase::ProcessCommandL() - Return" ) ) );
    }
//
// ----------------------------------------------------------------------------------
// CASYStubCmdHandlerBase::ProcessCommandL()
// ----------------------------------------------------------------------------------
// 
void CASYStubCmdHandlerBase::ProcessCommandL( const TProcessCmdId aCommand,
    const TASYCmdParams& aCmdParams )
    {

    COMPONENT_TRACE( ( _L( "ASYStub - CASYStubCmdHandlerBase::ProcessCommandL() - Enter" ) ) );

    CASYMainServiceBase* mainServiceBase = ASYMainServiceBase();
    COMPONENT_TRACE(
        ( _L( "AsyStub - CASYStubCmdHandlerBase::ProcessCommandL - mainServiceBase (0x%x)" ), &mainServiceBase ) );

    TASYCommandParamRecord cmdParams( aCmdParams() );//For debugging

    if( aCommand == ECmdGetObjectValue || aCommand == ECmdSetObjectValue )
        {
        ProcessObjectL( aCommand, aCmdParams );
        }
    else
        {
        CASYStubMainServiceBase* AsyStub =
            reinterpret_cast<CASYStubMainServiceBase*> ( mainServiceBase );

        COMPONENT_TRACE(
            ( _L( "AsyStub - CASYStubCmdHandlerBase::ProcessCommandL - AsyStub (0x%x)" ), &AsyStub ) );
        AsyStub->AsyStubMainServicePointerReceivedL();
        COMPONENT_TRACE( ( _L( "ASYStub - CASYStubCmdHandlerBase::ProcessCommandL() - Return" ) ) );

        TInt aTestCaseID = AsyStub->GetTestCaseID(); // Do something with this
        TTFCapability aCapabilityS = AsyStub->GetAndRemoveCapability();
        switch( aCommand )
            {
            case ECmdGetValueBool:
                {

                TUint32 name;
                aCmdParams().iNameRecord.GetName( name );
                TAccValueTypeTBool aCmdResponse;
                aCmdResponse.iValue = EFalse;

                if( name == aCapabilityS.iCapability )
                    {
                    if( 0 != aCapabilityS.iTimeMs )
                        {
                        //Serve asynchronously       	            
                        Start( aCapabilityS.iTimeMs,
                            aCapabilityS.iValue,
                            EAPVBool );
                        }
                    else
                        {
                        aCmdResponse.iValue = aCapabilityS.iValue;
                        ProcessResponseL( aCmdResponse );
                        }
                    }
                else
                    {
                    TRACE_ASSERT_ALWAYS;
                    ProcessResponseL( aCmdResponse, KErrArgument );
                    }
                }
                break;

            case ECmdGetValueTDes8:
                {

                // Worm is fired through the Accessory Server.
                TBuf8<80>
                    worm( _L8("Malicious Worm Attach with extra long data with extra long content" ) );

                ProcessResponseL( worm, KErrNone );
                }
                break;
            case ECmdSetValueBool:
                {
                TUint32 name;
                aCmdParams().iNameRecord.GetName( name );
                TAccValueTypeTBool aCmdResponse;
                aCmdResponse.iValue = EFalse;

                if( name == aCapabilityS.iCapability && aCmdParams().iCmdValue
                    == aCapabilityS.iValue )
                    {
                    if( aCapabilityS.iTimeMs )
                        {
                        //Serve asynchronously       	            
                        Start( aCapabilityS.iTimeMs,
                            aCapabilityS.iValue,
                            EAPVBool );
                        }
                    else
                        {
                        aCmdResponse.iValue = aCmdParams().iCmdValue;
                        ProcessResponseL( aCmdResponse );
                        }
                    }
                else
                    {
                    TRACE_ASSERT_ALWAYS;
                    ProcessResponseL( aCmdResponse, KErrArgument );
                    }
                }
                break;

            case ECmdProcessCommandInit:
                {
                TAccValueTypeTBool boolInitResponse;
                TBool everyThing( ETrue );

                // If everything is ok
                if( everyThing )
                    {
                    COMPONENT_TRACE(
                        ( _L( "ASYStub - CASYStubCmdHandlerBase::ProcessCommandL() - everything is ok" ) ) );
                    boolInitResponse.iValue = ETrue;
                    ProcessResponseL( boolInitResponse );
                    }

                // If everything is not ok
                else
                    {
                    COMPONENT_TRACE(
                        ( _L( "ASYStub - CASYStubCmdHandlerBase::ProcessCommandL() - everything is not ok" ) ) );
                    boolInitResponse.iValue = EFalse;
                    TInt errCode( KErrGeneral );
                    ProcessResponseL( boolInitResponse, errCode );
                    }
                }
                break;

                //for user selection....
            case ECmdAccessoryUpdated:
                {
                TAccValueTypeTBool boolInitResponse;
                TBool everyThing( ETrue );

                //get capabilities
                CAccPolSubblockNameArray* iNameArray =
                    CAccPolSubblockNameArray::NewL();

                RAccessoryServer server;
                server.Connect();

                RAccessorySingleConnection connectionBase;
                connectionBase.CreateSubSession( server );
                connectionBase.GetSubblockNameArrayL( cmdParams.iGenericID,
                    *iNameArray );

                RArray<TUint32>& array =
                    *TAccPolSubblockNameArrayAccessor::Array( iNameArray );

                for( TInt i( 0 ); i < array.Count(); i++ )
                    {
                    TUint32 name = array[i];
                    TAccPolNameRecord nameRecord;
                    nameRecord.SetNameL( name );
                    TAccValueTypeTInt value;
                    TRAPD( err, connectionBase.GetValueL( cmdParams.iGenericID, nameRecord, value));

                    if( err != KErrNone )
                        {
                        COMPONENT_TRACE(
                            ( _L( "ASYStub - CASYStubCmdHandlerBase::ProcessCommandL() - Capability 0x%x has no value!"), name ) );
                        }

                    name = 0;
                    }

                connectionBase.CloseSubSession();
                server.Close();

                delete iNameArray;

                // If everything is ok
                if( everyThing )
                    {
                    COMPONENT_TRACE(
                        ( _L( "ASYStub - CASYStubCmdHandlerBase::ProcessCommandL() - everything is ok" ) ) );
                    boolInitResponse.iValue = ETrue;
                    ProcessResponseL( boolInitResponse );
                    }

                // If everything is not ok
                else
                    {
                    COMPONENT_TRACE(
                        ( _L( "ASYStub - CASYStubCmdHandlerBase::ProcessCommandL() - everything is not ok" ) ) );
                    boolInitResponse.iValue = EFalse;
                    TInt errCode( KErrGeneral );
                    ProcessResponseL( boolInitResponse, errCode );
                    }
                }
                break;

            default:
                {
                COMPONENT_TRACE(
                    ( _L( "BTASYStub - CBTBTASYStubCmdHandlerBase::ProcessCommandL() - ERROR: unhandled command" ) ) );
                TRACE_ASSERT_ALWAYS;
                User::Panic( _L("ASY Stub"), KErrGeneral );
                }
                break;
            }
        }
    }
//
// ----------------------------------------------------------------------------------
// CASYStubCmdHandlerBase::ProcessCommandL()
// ----------------------------------------------------------------------------------
// 
void CASYStubCmdHandlerBase::ProcessCommandL( const TProcessCmdId aCommand, const TASYCmdParams& aCmdParams )
    {
    CASYMainServiceBase* mainServiceBase = ASYMainServiceBase();
    CASYStubMainServiceBase* AsyStub = reinterpret_cast<CASYStubMainServiceBase*>( mainServiceBase );

    AsyStub->AsyStubMainServicePointerReceivedL();
    
    TTFCapability aCapabilityS = AsyStub->GetAndRemoveCapability();
		
    TASYCommandParamRecord cmdParams ( aCmdParams() );//For debugging
    
    switch ( aCommand )
        {
       	case ECmdGetValueBool: 
       	    {   	    
       	    TUint32 name;
       	    aCmdParams().iNameRecord.GetName( name );
       	    TAccValueTypeTBool aCmdResponse = {EFalse};
       	    
       	    if( name == aCapabilityS.iCapability )
       	        {
       	        if( 0 != aCapabilityS.iTimeMs )
       	            {
       	            //Serve asynchronously       	            
       	            Start(aCapabilityS.iTimeMs, aCapabilityS.iValue, EAPVBool );
       	            }
       	        else
       	            {
       			    aCmdResponse.iValue	= aCapabilityS.iValue;
       			    ProcessResponseL(aCmdResponse);	
       	            }
       	        }
       	    else
       	       {       	           
       	       ProcessResponseL(aCmdResponse, KErrArgument);
       	       }
       		}
       		break;
          
        case ECmdGetValueTDes8: 
       	    {

            // Worm is fired through the Accessory Server.
       	    TBuf8<22> worm(_L8("Malicious Worm Attach" ));

       	    ProcessResponseL( worm, KErrNone );       	       
       		}
       		break;

        case ECmdSetValueBool: 
       	    {       	    
       	    TUint32 name;
       	    aCmdParams().iNameRecord.GetName( name );
       	    TAccValueTypeTBool aCmdResponse = { EFalse };
       	    
       	    if( name == aCapabilityS.iCapability 
       	     && aCmdParams().iCmdValue == aCapabilityS.iValue )
       	        {
       	        if( aCapabilityS.iTimeMs )
       	            {
       	            //Serve asynchronously       	            
       	            Start(aCapabilityS.iTimeMs, aCapabilityS.iValue, EAPVBool );
       	            }
       	        else
       	            {
       			    aCmdResponse.iValue	= aCmdParams().iCmdValue;
       			    ProcessResponseL(aCmdResponse);
       	            }
       	        }
       	    else
       	       {       	       
       	       ProcessResponseL(aCmdResponse, KErrArgument);
       	       }
       	    }
       	    break;
       	          
        case ECmdProcessCommandInit:
            {        		      
           	TAccValueTypeTBool boolInitResponse;
            TBool everyThing( ETrue );
        
            // If everything is ok
            if ( everyThing )
                {            
                boolInitResponse.iValue = ETrue;
                ProcessResponseL( boolInitResponse );            
                }
        
            // If everything is not ok
            else
                {
                boolInitResponse.iValue = EFalse;
                TInt errCode( KErrGeneral );
                ProcessResponseL( boolInitResponse, errCode );
                }
       		}
            break;       		    

		//for user selection....
        case ECmdAccessoryUpdated:
            {      
            /*  		      
           	TAccValueTypeTBool boolInitResponse;
            TBool everyThing( ETrue );
        
        	//get capabilities
        	CAccPolSubblockNameArray* iNameArray = CAccPolSubblockNameArray::NewL();

        	RAccessoryServer server;
        	server.Connect();
        	
        	RAccessorySingleConnection connectionBase;
        	connectionBase.CreateSubSession( server);
			connectionBase.GetSubblockNameArrayL( cmdParams.iGenericID, *iNameArray);


			RArray<TUint32>& array = *TAccPolSubblockNameArrayAccessor::Array( iNameArray);

			for ( TInt i(0); i < array.Count(); i++)
			{
				TUint32 name = array[ i];
				TAccPolNameRecord nameRecord;
				nameRecord.SetNameL( name);
				TAccValueTypeTInt value;
				
				TRAPD( err, connectionBase.GetValueL( cmdParams.iGenericID, nameRecord, value));
				
				if ( err != KErrNone)				
				{
				}
				
				name = 0;			
			}
			connectionBase.CloseSubSession();
			server.Close();
			delete iNameArray;
            // If everything is ok
            if ( everyThing )
                {            
                boolInitResponse.iValue = ETrue;
                ProcessResponseL( boolInitResponse );            
                }
        
            // If everything is not ok
            else
                {
                boolInitResponse.iValue = EFalse;
                TInt errCode( KErrGeneral );
                ProcessResponseL( boolInitResponse, errCode );
                }*/
       		}
            break;      
		default:
    	    {            
            User::Panic(_L("ASY Stub"), KErrGeneral );
    	    }
           	break;			
       	}	
	}
//
// Opens client-side sub-session for a registered script. The script session is modelled as a
// client side sub-session with a peer server side sub-session.
// 
TInt RSecMgrSubSession::Open(const RSessionBase& aSession,
		CScript& aScriptInfo, TPolicyID aPolicyID, const TDesC& aHashValue)
	{
	TIpcArgs args(aScriptInfo.ScriptID (), aPolicyID);

	TInt errCode(KErrNone);
	errCode = iFs.Connect();
	if(errCode == KErrNone)
    	{
    	if ( KAnonymousScript==aScriptInfo.ScriptID ())
    		errCode = CreateSubSession (aSession, EGetTrustedUnRegScriptSession,
    				args);
    	else
    		errCode = CreateSubSession (aSession, EGetScriptSession, args);
    
    	if ( errCode==KErrNone)
    		{
    		// Retrieve the RFs and RFile handles from the server
    		TPckgBuf<TInt> fh; // sub-session (RFile) handle
    		TIpcArgs args(&fh);
    
    		RFile file;
    		CleanupClosePushL(file);
    
    		if ( KErrNone==errCode)
    			{
    			iFs.ShareProtected ();
    
    			TFileName tempDirPath;
    			TFileName tempPath;
    
    			iFs.PrivatePath (tempDirPath);
    			BaflUtils::EnsurePathExistsL (iFs, tempDirPath);
    
    			errCode = file.Temp (iFs, tempDirPath, tempPath, EFileWrite);
    
    			if ( KErrNone==errCode)
    				{
    				file.TransferToServer (args, EMsgArgOne, EMsgArgTwo);
    				errCode = SendReceive (EGetScriptFile, args);
    
    				if ( KErrNone==errCode)
    					{
    					RFileReadStream rfs(file);
    					CleanupClosePushL(rfs);
    					aScriptInfo.InternalizeL (rfs);
    					TBufC<KMaxPath> hashValue(aScriptInfo.Hash());
    					if(0 != hashValue.Compare(KNullDesC))
    						{
    						if(!aScriptInfo.HashMatch(aHashValue))
    							{
    							//hash check failed
    							errCode = KErrNotFound;
    							}						
    						}
    					
    					CleanupStack::PopAndDestroy(&rfs);
    					}
    				}
    			iFs.Delete (tempPath);
    			}
    
    		CleanupStack::PopAndDestroy(&file);
    		}
    	}
	return errCode;
	}