bool PluginInfo::pluginSignInfoIsEqual(const PluginInfo& pluginInfo)
{
	return pluginName    == pluginInfo.getName() &&
	       pluginAuthor  == pluginInfo.getAuthor() &&
	       pluginVersion == pluginInfo.getVersion();
}
/*!
  Preload sequence, called when all the plugins are not yet loaded.
  \param server The server object to use.
  implementation it is a directory name.
 */
int
PluginsManager::preLoad (Server* server, string &resource)
{
  ReadDirectory fdir;
  ReadDirectory flib;
  string filename;
  string completeFileName;
  int ret;
  HashMap<string, bool> alreadyCkeched;

  loadOptions (server);
  filename.assign (resource);

  ret = fdir.findfirst (filename.c_str ());
  if (ret == -1)
    {
      server->log (MYSERVER_LOG_MSG_ERROR,
                   _("Invalid plugins source"));
      return ret;
    }

  ret = 0;
  do
    {
      string dirname (filename);

      dirname.append ("/");
      dirname.append (fdir.name);
      if (fdir.name[0] == '.' || !FilesUtility::isDirectory (dirname.c_str ()))
        continue;

      try
        {
          ret = flib.findfirst (dirname.c_str ());
        }
      catch (...)
        {
          continue;
        }

      do
        {
          string name (flib.name);
          if (flib.name[0] == '.')
            continue;

          if (!strstr (flib.name.c_str (), "plugin.xml"))
            continue;
          completeFileName.assign (filename);

          if ((fdir.name[0] != '/') && (fdir.name[0] != '\\'))
            completeFileName.append ("/");
          completeFileName.append (fdir.name);

          if ((flib.name[0] != '/') && (flib.name[0] != '\\'))
            completeFileName.append ("/");
          completeFileName.append (flib.name);

          string pname (fdir.name);

          if (alreadyCkeched.get (pname))
            continue;

          PluginInfo* pinfo = loadInfo (server, pname, completeFileName);
          alreadyCkeched.put (pname,true);
          if (!pinfo)
            {
              ret |= 1;
              continue;
            }
          string libname;
          libname.assign (dirname);

          libname.append ("/");
          libname.append (pinfo->getName ());
#ifdef WIN32
          libname.append (".dll");
#else
          libname.append (".so");
#endif

          ret |= loadFile (server, pname, libname, pinfo);
        }
      while (! flib.findnext ());
    }
  while (! fdir.findnext ());

  fdir.findclose ();
  flib.findclose ();
  return ret;
}