Files correlati : ba0 ba1 Ricompilazione Demo : [ ] Commento : Migliorata gestione dninst.zip git-svn-id: svn://10.65.10.50/trunk@19861 c028cbd2-c16b-5b4b-a496-9718f37d4682
		
			
				
	
	
		
			124 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			124 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
#include <applicat.h>
 | 
						||
#include <config.h>
 | 
						||
#include <dongle.h>
 | 
						||
#include <modaut.h>
 | 
						||
#include <scanner.h>
 | 
						||
#include <utility.h>
 | 
						||
 | 
						||
#include "ba1500.h"
 | 
						||
 | 
						||
const char* split_ass(const int ass_year)
 | 
						||
{
 | 
						||
	int year = ass_year, number = 0;
 | 
						||
	if (ass_year >= 2009)
 | 
						||
	{
 | 
						||
		year = (ass_year/1000)*1000 + (ass_year%1000)/10;
 | 
						||
		number = ass_year%10;
 | 
						||
	}
 | 
						||
 | 
						||
	TString& tmp = get_tmp_string();
 | 
						||
	tmp << year;
 | 
						||
	if (number > 0)
 | 
						||
		tmp << '/' << number;
 | 
						||
	return tmp;
 | 
						||
}
 | 
						||
 | 
						||
HIDDEN bool show_error(const char* str)
 | 
						||
{
 | 
						||
  int app_year, dum1, dum2, dum3;
 | 
						||
  TApplication::get_version_info(app_year, dum1, dum2, dum3);
 | 
						||
  
 | 
						||
  TString msg;
 | 
						||
  msg << TR("Impossibile aggiornare automaticamente l'assistenza ") 
 | 
						||
      << split_ass(app_year) << ":\n" << str << '.';
 | 
						||
  return error_box(msg);
 | 
						||
}
 | 
						||
 | 
						||
// Copia il file dninst.zip dal CD/server alla cartella corrente
 | 
						||
bool update_dninst(bool force)
 | 
						||
{                             
 | 
						||
	//legge dal diskpath di install.ini la directory da cui aggiornarsi;se il dninst.zip di tale..
 | 
						||
	//..directory e' piu' nuovo di quello in locale -> lo copia in locale
 | 
						||
	const TFilename local_name = "setup/dninst.zip";
 | 
						||
  TConfig ini("install.ini", "Main");
 | 
						||
  TFilename remote_name = ini.get("DiskPath");
 | 
						||
  remote_name.add(local_name);
 | 
						||
  if (remote_name.exist())
 | 
						||
	{
 | 
						||
		if (!force)
 | 
						||
		{
 | 
						||
			force = !local_name.exist();
 | 
						||
			if (!force)
 | 
						||
			{
 | 
						||
				const long local_date = xvt_fsys_file_attr(local_name, XVT_FILE_ATTR_MTIME);
 | 
						||
				const long remote_date = xvt_fsys_file_attr(remote_name, XVT_FILE_ATTR_MTIME);
 | 
						||
				force = remote_date > local_date;
 | 
						||
			}
 | 
						||
		}
 | 
						||
		if (force)
 | 
						||
    {
 | 
						||
      make_dir(local_name.path());
 | 
						||
			fcopy(remote_name, local_name);
 | 
						||
    }
 | 
						||
	}
 | 
						||
  return true;
 | 
						||
}
 | 
						||
 | 
						||
bool update_assistance_year()
 | 
						||
{
 | 
						||
  TDongle& donkey = dongle();
 | 
						||
  if (donkey.hardware() == _dongle_network)
 | 
						||
    return show_error(TR("Il server di autorizzazioni deve essere disattivato"));
 | 
						||
 | 
						||
  update_dninst(true);
 | 
						||
 | 
						||
  Tdninst dninst;
 | 
						||
  const int dninst_year = dninst.assist_year();
 | 
						||
  if (dninst_year > 0)
 | 
						||
  {
 | 
						||
    //se l'anno di assistenza della versione (dninst.zip) e' piu' grande di quello attualmente registrato sulla...
 | 
						||
    //...chiavetta controlla se il serialnumber della chiavetta e' presente nella lista dei codici...
 | 
						||
    //...validi dentro il dninst.zip
 | 
						||
    if (dninst_year > donkey.year_assist())
 | 
						||
    {
 | 
						||
      const int serno = get_serial_number();
 | 
						||
      TToken_string to_be_killed;
 | 
						||
      if (dninst.find_killed(to_be_killed))
 | 
						||
      {
 | 
						||
        donkey.set_year_assist(dninst_year);
 | 
						||
        FOR_EACH_TOKEN(to_be_killed, mod)
 | 
						||
        {
 | 
						||
          if (strlen(mod) == 2)
 | 
						||
          {
 | 
						||
            const word aut = donkey.module_name2code(mod);
 | 
						||
            if (aut > BAAUT && aut < ENDAUT)
 | 
						||
              donkey.deactivate(aut);
 | 
						||
          }
 | 
						||
        }
 | 
						||
        if (donkey.burn())
 | 
						||
          return true;  // Complimenti,la chiavetta e' presente nella lista e sara' aggiornato l'anno di assistenza
 | 
						||
        else
 | 
						||
          return show_error(FR("Errore di scrittura sulla chiave di protezione"));
 | 
						||
      } //if(sn==serno...
 | 
						||
      else
 | 
						||
      {
 | 
						||
        //Non e' riuscito a trovare la chiavetta nell'elenco, non puo' aggiornare automaticamente
 | 
						||
        show_error(TR("Il numero di serie di questa postazione non <20> presente sul database"));
 | 
						||
      }
 | 
						||
    }
 | 
						||
    else  //if(ass_year>dongle...
 | 
						||
    {
 | 
						||
      //Se l'anno di assistenza sulla chiave e' maggiore di quello sul dninst segnala l'incongruenza e poi?
 | 
						||
      if (dninst_year < donkey.year_assist())
 | 
						||
        show_error(TR("L'anno di assistenza sul database e' inferiore a quello registrato sulla chiave di protezione"));
 | 
						||
      //Se l'anno di assistenza coincide con quello sulla chiave -> la chiave ha gia' l'assistenza...
 | 
						||
      //...corretta abilitata e puo' proseguire l'aggiornamento
 | 
						||
      else
 | 
						||
        return true;  //ok, sei abilitato a proseguire!
 | 
						||
    }
 | 
						||
  }
 | 
						||
  else
 | 
						||
    show_error(TR("Il database dei numeri di serie non <20> accessibile"));
 | 
						||
  return false;
 | 
						||
}
 |