Пример #1
0
/// 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;
}
Пример #2
0
// 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;
}