void ScrShotsGenUtils::DumpJsFileL(CScrShotsSettings* scrShotsSettings) { CGetImei* getImei = CGetImei::NewL(); CleanupStack::PushL(getImei); RBuf8 formatBuf; formatBuf.Create(256); formatBuf.CleanupClosePushL(); TFileName infoFile; User::LeaveIfError(CEikonEnv::Static()->FsSession().PrivatePath(infoFile)); infoFile.Append( KDeviceJSFile ); TParsePtrC parse((CEikonEnv::Static()->EikAppUi()->Application())->AppFullName()); infoFile.Insert(0, KCDriveWithColon); RFs fsConn; User::LeaveIfError(fsConn.Connect()); CleanupClosePushL(fsConn); RFile jsFile; if(BaflUtils::FileExists(fsConn, infoFile)){ BaflUtils::DeleteFile(fsConn, infoFile); } //now create the file User::LeaveIfError(jsFile.Create(fsConn, infoFile, EFileWrite)); CleanupClosePushL(jsFile); // User::LeaveIfError(jsFile.Write(KFunctionBlockStart)); RBuf8 values; values.Create(256); for(int i = 0; i < KDeviceParamsCount ; i++){ formatBuf.Zero(); TInt sizeOfItem = User::StringLength((TText8 *)DeviceParams [i]); TPtr8 item((unsigned char*)DeviceParams [i],sizeOfItem ,sizeOfItem ); switch(i){ //device_model case 0:{ CDeviceTypeInformation* devInfo = SysUtil::GetDeviceTypeInfoL(); CleanupStack::PushL(devInfo); TPtrC manufName, modelCode, modelName; devInfo->GetManufacturerName(manufName); devInfo->GetModelCode(modelCode); devInfo->GetModelName(modelName); RBuf8 manufName8, modelName8, modelCode8; manufName8.Create(128); modelName8.Create(128); modelCode8.Create(128); manufName8.CleanupClosePushL(); modelName8.CleanupClosePushL(); modelCode8.CleanupClosePushL(); manufName8.Copy(manufName); modelName8.Copy(modelName); modelCode8.Copy(modelCode); values.Format(KModelNameFormatString, &manufName8, &modelName8, &modelCode8); CleanupStack::PopAndDestroy(4); break; } //firmware_version case 1:{ RBuf swVersion; swVersion.Create(128); SysUtil::GetSWVersion(swVersion); values.Copy(swVersion); TInt pos = 0; while((pos = values.Find(_L8("\n"))) != KErrNotFound){ //values.Delete(pos,1); values.Replace(pos,1,_L8("_")); } swVersion.Close(); break; } //ram_info case 2:{ TInt totalram= 0; HAL::Get(HALData::EMemoryRAM, totalram); totalram /= 1024; values.Num(totalram); break; } //uptime case 3:{ TTimeIntervalMicroSeconds32 iTickPeriod; UserHal::TickPeriod(iTickPeriod); TUint tickCount = User::TickCount(); TUint noOfTicksPerSecond = (1000 * 1000) / iTickPeriod.Int(); TInt noOfSecsSinceStartUp = tickCount / noOfTicksPerSecond;//noOfMicroSecsSinceStartup / (1000 * 1000); values.Num(noOfSecsSinceStartUp); break; } //scrshot count case 4:{ values.Num(scrShotsSettings->TotalScrShotCount()); break; } //symbian version case 5:{ TVersion epocver = User::Version(); values.Copy(epocver.Name()); break; } //series 60 version case 6:{ VersionInfo::TPlatformVersion platformVersion; VersionInfo::GetVersion(platformVersion); TInt aMajor = platformVersion.iMajorVersion; TInt aMinor = platformVersion.iMinorVersion; values.Format(_L8("%d.%d"),aMajor, aMinor); break; } //country code case 7:{ TLocale loc; int code = loc.CountryCode(); values.Num(code); break; } //imei hash case 8:{ TBuf8<256> inputimei; TBuf8<256> outimeihash; if(getImei->IsImeiFetched()){ getImei->GetImei(inputimei); GetWhirlPoolHash(outimeihash,inputimei); values.Copy(outimeihash); } } break; } formatBuf.Format(KStringVariableDeclaration, &item, &values); TRACE_ON(RDebug::Printf((const char*)formatBuf.PtrZ())); jsFile.Write(formatBuf); } values.Close(); CleanupStack::PopAndDestroy(4); //TODO: This code should be commented in final release build #if BRAHMA_DEBUG //code to copy the js file just created to the c:\ so that it can be analyzed _LIT(KTargetFileName, "c:\\device_info.js"); BaflUtils::CopyFile(CEikonEnv::Static()->FsSession(),infoFile, KTargetFileName); #endif }
// --------------------------------------------------------------------------------- // CUpnpTmFilteredAppList::ParseAppFilterStringL // Method parses the descriptor containing the filter string // It parses the comma-separated list of A_ARG_TYPE_AppList schema // elements, attributes and their values // eg: "name="*Audio*",description="*",icon@mimetype="*svg+xml*", remotingInfo@protocolID="*", // appInfo@appCategory="*",audioInfo@audioType="*",resourceStatus="free",signature="*"" // @param aAppFilter Buffer containing application filter string // @param aErr[out] Terminal Mode error code // --------------------------------------------------------------------------------- // void CUpnpTmFilteredAppList::ParseAppFilterStringL( const TDesC8& aAppFilter, TTerminalModeErrorCode& aErr ) { OstTraceFunctionEntry0( CUPNPTMFILTEREDAPPLIST_PARSEAPPFILTERSTRINGL_ENTRY ); // Validate the filter string aErr = ETerminalModeSuccess; TInt quotePos = aAppFilter.Locate( KQuote ); if ( ( quotePos != 0 ) || ( aAppFilter.Find(KDoubleQuote) == KErrNotFound )) { // corrupt filter string aErr = ETerminalModeInvalidArgument; OstTrace1( TRACE_ERROR, DUP2_CUPNPTMFILTEREDAPPLIST_PARSEAPPFILTERSTRINGL, "CUpnpTmFilteredAppList::ParseAppFilterStringL;quotePos=%d", quotePos ); return; } RBuf8 filterBuffer; CleanupClosePushL(filterBuffer); /* Create a buffer having the content of AppFilter buffer but without the leading quote(") */ filterBuffer.CreateL(aAppFilter.Mid(quotePos+1)); TInt equalToQuoteToken; while( ( equalToQuoteToken = filterBuffer.Find(Keq)) != KErrNotFound ) { // Fetch the full key string TPtrC8 key = filterBuffer.Left(equalToQuoteToken); // Check for the presence of sub element by checking the @ in the key string TInt atTokenPos = key.Find(KAtToken); TBool displayInfo(EFalse); if ( atTokenPos != KErrNotFound ) { // @ is found in the key string // Now extract the parent element TPtrC8 parentKey = key.Left(atTokenPos); //Remove any leading and trailing whitespaces in the parent element const TDesC8& parentKeyWithoutSpace = RemoveWhiteSpace(parentKey); // Check if the parent elemet is one of desired element or not. // It should be one of the following : // <1> icon <2> remotingInfo <3> appInfo <4> displayInfo <5> audioInfo if ( ( parentKeyWithoutSpace.Compare(KIconElement) != KErrNone ) && ( parentKeyWithoutSpace.Compare(KRemotingInfo) != KErrNone ) && ( parentKeyWithoutSpace.Compare(KAppInfo) != KErrNone ) && ( parentKeyWithoutSpace.Compare(KDisplayInfo) != KErrNone ) && ( parentKeyWithoutSpace.Compare(KAudioInfo) != KErrNone ) ) { // parent element is not proper aErr = ETerminalModeInvalidArgument; break; } if ( parentKeyWithoutSpace.Compare(KDisplayInfo) == KErrNone ) { // The parent key element is displayInfo displayInfo = ETrue; } // Fetch the actual key name ( child element ) key.Set(key.Mid(atTokenPos+1)); } //Remove any leading and trailing whitespaces in the key const TDesC8& keyWithoutSpace = RemoveWhiteSpace(key); if ( (filterBuffer.Mid(equalToQuoteToken) ).Locate(KQuote) != 1 ) { // Missing quote(") ahead of the value aErr = ETerminalModeInvalidArgument; break; } TPtrC8 bufPtr = filterBuffer.Mid(equalToQuoteToken+2); quotePos = bufPtr.Locate( KQuote ); if ( quotePos == KErrNotFound ) { // missing quote (") at the end of the value aErr = ETerminalModeInvalidArgument; break; } /* Add the filter info as key-value pairs. // Also check if the parent key is display info. If display info flag is true then use the method with non default parameter */ if ( displayInfo ) { iFilterInfo->SetFilterInfoL( keyWithoutSpace, bufPtr.Left(quotePos), aErr, ETrue ); } else { // Use the method with default parameter iFilterInfo->SetFilterInfoL( keyWithoutSpace, bufPtr.Left(quotePos), aErr ); } if ( aErr != ETerminalModeSuccess ) { // Return the error code in case the key element is not as per the schema aErr = ETerminalModeInvalidArgument; break; } // Skip the quote position and set the buffer bufPtr.Set(bufPtr.Mid(quotePos+1)); if ( ( bufPtr.Locate(KCommaSeparator) != 0 ) && ( bufPtr.Locate(KQuote) != 0 ) ) { // missing quote (") or comma (,) following the quote. // Expected to be something of this kind ( ", or "" ) aErr = ETerminalModeInvalidArgument; break; } //Copy the residual content skipping two characters(", or "" ) in the actual buffer filterBuffer.Copy(bufPtr.Mid(UpnpString::KLinefeedLength)); } CleanupStack::PopAndDestroy(&filterBuffer); OstTrace1( TRACE_FLOW, CUPNPTMFILTEREDAPPLIST_PARSEAPPFILTERSTRINGL, "CUpnpTmFilteredAppList::ParseAppFilterStringL;aErr=%d", aErr ); OstTraceFunctionExit0( CUPNPTMFILTEREDAPPLIST_PARSEAPPFILTERSTRINGL_EXIT ); }