/// Log files are resources too - this creates a log file resource FileResource* FileResource::logFileResource(const UtlString& logFilePath, SipxProcess* currentProcess) { // Check to see if it has already been declared as a resource. FileResourceManager* fileResourceMgr = FileResourceManager::getInstance(); FileResource* logFile; if ( !(logFile = fileResourceMgr->find(logFilePath, FileResourceManager::RequireExactFileMatch))) { // a log file resource is read-only and not required logFile = new FileResource(logFilePath.data()); logFile->usedBy(currentProcess); currentProcess->resourceIsOptional(logFile); // logs are never required logFile->mImplicitAccess = false; logFile->mAccess = ReadAccess; logFile->mFirstDefinition = false; fileResourceMgr->save(logFile); } return logFile; }
// Factory method that parses a 'file' or 'osconfig' resource description element. bool FileResource::parse(const TiXmlDocument& fileDefinitionDoc, ///< process definition document TiXmlElement* resourceElement, // 'file' or 'osconfig' element SipxProcess* currentProcess // whose resources are being read. ) { /* * This is called by SipxResource::parse with any 'file' or 'osconfig' child of * the 'resources' element in a process definition. * * @returns NULL if the element was in any way invalid. */ UtlString errorMsg; bool resourceIsValid; UtlString path; resourceIsValid = textContent(path, resourceElement); if (resourceIsValid) { if (!path.isNull()) { FileResourceManager* fileResourceMgr = FileResourceManager::getInstance(); FileResource* fileResource; if (!(fileResource = fileResourceMgr->find(path, FileResourceManager::RequireExactFileMatch))) { fileResource = new FileResource(path); } fileResource->usedBy(currentProcess); for ( const TiXmlAttribute* attribute = resourceElement->FirstAttribute(); resourceIsValid && attribute; attribute = attribute->Next() ) { if (!(resourceIsValid = fileResource->SipxResource::parseAttribute(fileDefinitionDoc, attribute, currentProcess) )) { Os::Logger::instance().log(FAC_SUPERVISOR, PRI_ERR, "FileResource::parse " "invalid attribute '%s'", attribute->Name()); } } if ( fileResource->mFirstDefinition ) // existing resources are in the manager already { if (resourceIsValid) { fileResource->mFirstDefinition = false; fileResourceMgr->save(fileResource); } else { currentProcess->resourceIsOptional(fileResource); // get off the required list delete fileResource; fileResource = NULL; } } } else { resourceIsValid = false; XmlErrorMsg(fileDefinitionDoc, errorMsg); Os::Logger::instance().log(FAC_SUPERVISOR, PRI_ERR, "FileResource::parse " "file element is empty %s", errorMsg.data()); } } else { XmlErrorMsg(fileDefinitionDoc, errorMsg); Os::Logger::instance().log(FAC_SUPERVISOR, PRI_ERR, "FileResource::parse " "invalid content in file element %s", errorMsg.data()); } return resourceIsValid; }