#include #include #include #include #include #include #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 è 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 è accessibile")); return false; }