TInt CSecMgrStore::ReadCounter(TExecutableID& aExecID)
	{
	HBufC *configFile = HBufC::NewLC(KMaxName);
	TPtr ptr(configFile->Des());
	TInt ret(GetConfigFile (ptr));

	if ( KErrNone==ret)
		{
		if ( !BaflUtils::FileExists(iFsSession,*configFile))
			{
			aExecID = (TExecutableID)KCRUIdSecMgr.iUid;
			BaflUtils::EnsurePathExistsL (iFsSession, *configFile);
			CleanupStack::PopAndDestroy (configFile);
			return WriteCounter (aExecID);
			}

		CFileStore* store = CPermanentFileStore::OpenLC (iFsSession,
				*configFile, EFileRead);

		RStoreReadStream instream;
		instream.OpenLC (*store, store->Root ());

		aExecID = instream.ReadInt32L ();

		CleanupStack::PopAndDestroy (&instream);
		CleanupStack::PopAndDestroy (store);
		}
	CleanupStack::PopAndDestroy (configFile);
	return ret;
	}
Example #2
0
	///
	/// Verifies material consumption.
	//
	int MaterialMonitorSim::UpdateConsumption(unsigned char ucCartridgeNum, unsigned int uiComsumption, unsigned int *uiNewVolume)
	{
		UniqueLock uniqueLock(m_mtx);

		try
		{
			int returnValue = IDTLIB_SUCCESS;
			if (uiNewVolume == NULL)
			{
				returnValue = CONSUMPTION_NULL_PARAMS;
				LOG_EXT(LEVEL_ERROR, "Invalid parameters (error code 0x" << hex << (short)returnValue << ").");
				return returnValue;
			}

			if (!m_bInitialized)
			{
				returnValue = HW_NOT_INITIALIZED;
				LOG_EXT(LEVEL_ERROR, "Hardware not initialized (error code 0x" << hex << (short)returnValue << ").");
				return returnValue;
			}

			int behaviorReturnValue = GetUpdateConsumptionBehavior(ucCartridgeNum, uiComsumption, uiNewVolume);

			LOG_EXT(LEVEL_INFO, "Cartridge #" << (unsigned short)ucCartridgeNum << " material consumption started...");
			if (!IsCartridgeOn(ucCartridgeNum, m_authenticated) ||
				behaviorReturnValue == CARTRIDGE_NOT_AUTHENTICATED)
			{
				returnValue = CARTRIDGE_NOT_AUTHENTICATED;
				LOG_EXT(LEVEL_ERROR, "Cartridge #"<< (unsigned short)ucCartridgeNum << " not authenticated (error code 0x" << hex << (short)returnValue << ").");
				return returnValue;
			}

			LOG_EXT(LEVEL_INFO, "Switching to cartridge #"<< (unsigned short)ucCartridgeNum << "...");
			if (((m_behavior != NULL) && !IsCartridgeOn(ucCartridgeNum, m_behavior->Status)) ||
				behaviorReturnValue == FCB_SELECT_CHANNEL_FAILED)
			{
				returnValue = FCB_SELECT_CHANNEL_FAILED;
				LOG_EXT(LEVEL_ERROR, "Error switching to cartridge #"<< (unsigned short)ucCartridgeNum << " (error code 0x" << hex << (short)returnValue << ").");
				return returnValue;
			}

			LOG_EXT(LEVEL_INFO, "Getting current volume...");
			returnValue = ReadCounter(ucCartridgeNum, uiNewVolume);
			if (returnValue != IDTLIB_SUCCESS)
			{
				if (returnValue == INVALID_VOLUME_SIGNATURE || behaviorReturnValue == INVALID_VOLUME_SIGNATURE)
				{
					LOG_EXT(LEVEL_ERROR, "Error verifying signature (error code 0x" << hex << (short)returnValue << ").");
				}
				else
				{
					LOG_EXT(LEVEL_ERROR, "Error reading counter (error code 0x" << hex << (short)returnValue << ").");
				}

				return returnValue;
			}

			if (*uiNewVolume < uiComsumption || behaviorReturnValue == MATERIAL_OVERCONSUMPTION)
			{
				returnValue = MATERIAL_OVERCONSUMPTION;
				LOG_EXT(LEVEL_ERROR, "Invalid consumption (error code 0x" << hex << (short)returnValue << ").");
				return returnValue;
			}

			returnValue = behaviorReturnValue;
			if (returnValue == IDTLIB_SUCCESS)
			{
				LOG_EXT(LEVEL_INFO, "Decreasing volume by " << uiComsumption << "...");
				*uiNewVolume -= uiComsumption;
				WriteCounter(ucCartridgeNum, *uiNewVolume);
				LOG_EXT(LEVEL_INFO, "Cartridge #" << (unsigned short)ucCartridgeNum << " material consumption ended successfully. Current volume: " << *uiNewVolume << ".");
			}
			else
			{
				LOG_EXT(LEVEL_ERROR, "Error updating consumption (error code 0x" << hex << (short)returnValue << ").");
			}

			return returnValue;
		}
		catch (exception& e)
		{
			LOG_EXT(LEVEL_ERROR, "Exception caught: " << e.what() << ".");
			return EXCEPTION_CAUGHT;
		}
	}