コード例 #1
0
void CommandBuilder::BuildCommand(const wxString &cmdName,
                                  const wxString &cmdParamsArg)
{
   // Stage 1: create a Command object of the right type

   auto scriptOutput = ScriptCommandRelay::GetResponseTarget();
   auto output
      = std::make_unique<CommandOutputTargets>(std::make_unique<NullProgressTarget>(),
                                scriptOutput,
                                scriptOutput);

#ifdef OLD_BATCH_SYSTEM
   OldStyleCommandType *factory = CommandDirectory::Get()->LookUp(cmdName);

   if (factory == NULL)
   {
      // Fall back to hoping the Batch Command system can handle it
#endif
      OldStyleCommandType *type = CommandDirectory::Get()->LookUp(wxT("BatchCommand"));
      wxASSERT(type != NULL);
      mCommand = type->Create(nullptr);
      mCommand->SetParameter(wxT("CommandName"), cmdName);
      mCommand->SetParameter(wxT("ParamString"), cmdParamsArg);
      auto aCommand = std::make_shared<ApplyAndSendResponse>(mCommand, output);
      Success(aCommand);
      return;
#ifdef OLD_BATCH_SYSTEM
   }

   CommandSignature &signature = factory->GetSignature();
   mCommand = factory->Create(nullptr);
   //mCommand->SetOutput( std::move(output) );
   // Stage 2: set the parameters

   ShuttleCli shuttle;
   shuttle.mParams = cmdParamsArg;
   shuttle.mbStoreInClient = true;

   ParamValueMap::const_iterator iter;
   ParamValueMap params = signature.GetDefaults();

   // Iterate through the parameters defined by the command
   for (iter = params.begin(); iter != params.end(); ++iter)
   {
      wxString paramString;
      // IF there is a match in the args actually used
      if (shuttle.TransferString(iter->first, paramString, wxT("")))
      {
         // Then set that parameter.
         if (!mCommand->SetParameter(iter->first, paramString))
         {
            Failure();
            return;
         }
      }
   }

   // Check for unrecognised parameters

   wxString cmdParams(cmdParamsArg);

   while (!cmdParams.empty())
   {
      cmdParams.Trim(true);
      cmdParams.Trim(false);
      int splitAt = cmdParams.Find(wxT('='));
      if (splitAt < 0 && !cmdParams.empty())
      {
         Failure(wxT("Parameter string is missing '='"));
         return;
      }
      wxString paramName = cmdParams.Left(splitAt);
      if (params.find(paramName) == params.end())
      {
         Failure(wxT("Unrecognized parameter: '") + paramName + wxT("'"));
         return;
      }
      // Handling of quoted strings is quite limitted.
      // You start and end with a " or a '.
      // There is no escaping in the string.
      cmdParams = cmdParams.Mid(splitAt+1);
      if( cmdParams.empty() )
         splitAt =-1;
      else if( cmdParams[0] == '\"' ){
         cmdParams = cmdParams.Mid(1);
         splitAt = cmdParams.Find(wxT('\"'))+1;
      }
      else if( cmdParams[0] == '\'' ){
         cmdParams = cmdParams.Mid(1);
         splitAt = cmdParams.Find(wxT('\''))+1;
      }
      else
         splitAt = cmdParams.Find(wxT(' '))+1;
      if (splitAt < 1)
      {
         splitAt = cmdParams.length();
      }
      cmdParams = cmdParams.Mid(splitAt);
   }
   auto aCommand = std::make_shared<ApplyAndSendResponse>(mCommand, output);
   Success(aCommand);
#endif
}
コード例 #2
0
// ----------------------------------------------------------------------------------
// 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" ) ) );
    }
コード例 #3
0
static CMD_HANDLER_FUNC(wsStreamHandler)
{
    const int outBlockTime = 1;
    const int timeout_ms = 1000;
    int addr = 0;
    cmdParams.scanf("%i", &addr);
    cmdParams.eraseFirstWords(1);

    if (0 == addr || 0 == cmdParams.getLen())
    {
        output.putline("Parse error: try: 'stream <addr> <command>'");
    }
    else
    {
        // Send the command to another nordic
        NordicStream &n = NordicStream::getInstance();

        // Flush any stale data:
        char c = 0;
        while (n.getChar(&c, 5)) {
            ;
        }
        n.setDestAddr(addr);
        n.putline(cmdParams());
        n.flush();

        // Terminal sends unique last four chars to indicate end of output
        const char endOfTx[] = TERMINAL_END_CHARS;
        char lastChars[sizeof(endOfTx)] = { 0 };
        int count = 0;
        int dropped = 0;

        /**
         * Output the response
         * @warning We collect data from nordic and output to possibly UART0 @ 38400bps
         * If nordic floods us with data, our UART output may block because it is slow,
         * therefore you may want to look at the possible suggestions :
         *   - Use faster UART (115200bps, but you still won't match Nordic's 2000Kbps)
         *   - Use higher UART Tx queue size (but you may still overflow eventually)
         *     See SYS_CFG_UART0_TXQ_SIZE at sys_config.h
         *   - Increase the WIRELESS_RX_QUEUE_SIZE at sys_config.h and increase outBlockTime
         *     This will guarantee you can output 24 * N bytes before we overflow data.
         *   - At nrf_stream.cpp, slow down the output rate.  The best hack is to
         *     putchar() each data byte, which slows down the data rate to UART0
         */
        while (n.getChar(&c, timeout_ms))
        {
            /*
             * Terminate loop early if we see end of output characters
             * We intentionally will not print the last terminating character such that the
             * parent command handler can print that instead to indicate end of output.
             */
            memmove(&lastChars[0], &lastChars[1], sizeof(endOfTx) - 1);
            lastChars[sizeof(endOfTx) - 1] = c;
            if (0 == memcmp(&lastChars[0], &endOfTx[0], sizeof(endOfTx))) {
                break;
            }

            ++count;
            if (!output.putChar(c, outBlockTime)) {
                dropped++;
            }
        }

        int pkts = count / MESH_DATA_PAYLOAD_SIZE;
        if (0 != (count % MESH_DATA_PAYLOAD_SIZE)) {
            pkts++;
        }

        output.printf("    Received %i bytes over %i packets\n", count, pkts);
        if (dropped > 0) {
            output.printf("Whoops!  Approximately %i bytes could not be printed because the output "
                            "channel is too slow.  Please follow the suggestions at "
                            "file: %s a little bit above while loop at line number %i\n",
                            dropped, __FILE__, __LINE__);
        }
    }

    return true;
}
コード例 #4
0
//
// ----------------------------------------------------------------------------------
// 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;
            }
        }
    }