0f930a1600
Files correlati : Ricompilazione Demo : [ ] Commento : Attivata la possibilità di aggiornare l'anno di assistenza su di un server remoto git-svn-id: svn://10.65.10.50/branches/R_10_00@21359 c028cbd2-c16b-5b4b-a496-9718f37d4682
132 lines
3.9 KiB
C++
Executable File
132 lines
3.9 KiB
C++
Executable File
#include <applicat.h>
|
||
#include <config.h>
|
||
#include <dongle.h>
|
||
#include <isamrpc.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();
|
||
const bool remote = donkey.hardware() == _dongle_network;
|
||
|
||
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())
|
||
{
|
||
// Cerca il numero di serie e gli "eventuali" moduli da disattivare
|
||
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 (remote)
|
||
rpc_DongleModuleActivate(aut, false);
|
||
}
|
||
}
|
||
|
||
bool done = false;
|
||
if (remote)
|
||
done = rpc_DongleYearActivate(dninst_year);
|
||
else
|
||
done = donkey.burn();
|
||
|
||
if (done)
|
||
return true; // Complimenti, la chiavetta e' presente nella lista ed e' stato aggiornata l'assistenza
|
||
else
|
||
return show_error(TR("Errore di aggiornamento della 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;
|
||
}
|