campo-sirio/ba/ba1501.cpp
luca ba44f93cfa Patch level :10.0 84
Files correlati     :
Ricompilazione Demo : [ ]
Commento            :
0000823: installazione client
Descrizione  se il client di rete ha una chiave che non si riabilita in automatico non viene data la possibilità di aggiornare il numero della chiave in quanto se mi collego mi apre in automatico l'installazione e non mi permette di cambiare la password. Sistema operativo Vista.

0000834: aggiornamenti da internet
Descrizione  Lo scaricamento delle ptf da internet (test100) segnala un errore window che comincia con 'can't enumerate...'

0000835: scarico ptf da internet
Descrizione  Dopo lo scarico delle ptf da internet, dopo la partenza della videata di setup l'applicazione si interrompe con il seguente errore:
Uscire dal programma CAMPO prima di procedere con l'aggiornamento/installazione.


git-svn-id: svn://10.65.10.50/trunk@16850 c028cbd2-c16b-5b4b-a496-9718f37d4682
2008-07-08 13:31:11 +00:00

201 lines
5.4 KiB
C++
Executable File
Raw Blame History

#include <applicat.h>
#include <config.h>
#include <scanner.h>
#include <utility.h>
#include "ba1500.h"
HIDDEN void build_key(char* dninst_key)
{
for (int i = 0; i < 8; i++)
dninst_key[i] = 'A'+ rand() % 26;
}
HIDDEN void decode_string(char* dninst_key, char* data)
{
build_key(dninst_key);
char tmp[1024];
int i;
for (i = 0; data[i]; i++)
tmp[i] = data[i] - (i < 8 ? dninst_key[i] : tmp[i - 8]);
tmp[i] = '\0';
strcpy(data, tmp);
}
#ifdef DBG
HIDDEN void encode_string(char* dninst_key, char* data)
{
build_key(dninst_key);
char tmp[1024];
int i;
for (i = 0; data[i]; i++)
tmp[i] = data[i] + (i < 8 ? dninst_key[i] : data[i - 8]);
tmp[i] = '\0';
strcpy(data, tmp);
}
HIDDEN bool build_dninst()
{
ifstream inf("dninst.txt", ios::in);
if (inf.good())
{
char dninst_key[8] = "";
ofstream ouf("dninst.zip", ios::out | ios::binary);
char line[256];
inf.getline(line, sizeof(line));
const int year = atoi(line);
CHECKD(year >= 2006 && year <= 3000, "Anno errato:", year);
srand(883); // Inizializza generatore numeri casuali per l'anno
encode_string(dninst_key, line);
ouf << line << '\n';
srand(year); // Inizializza generatore numeri casuali per i moduli
while (!inf.eof())
{
inf.getline(line, sizeof(line));
encode_string(dninst_key, line);
ouf << line << '\n';
}
return true;
}
return false;
}
#endif
const char* split_ass(const int ass_year)
{
int year = ass_year, number = 0;
if (ass_year > 2008)
{
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)
{
#ifdef DBG
if (force && main_app().argc() > 2 && strcmp(main_app().argv(2), "-dninst") == 0)
{
build_dninst();
return true;
}
#endif
//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()
{
if (dongle().hardware() == _dongle_network)
{
show_error(TR("Il server di autorizzazioni deve essere disattivato"));
return false;
}
update_dninst(true);
const TFilename dninst = "setup/dninst.zip";
if (dninst.exist())
{
char dninst_key[8] = "";
TScanner keys(dninst);
TString& anno = keys.line();
srand(883);
decode_string(dninst_key, anno.get_buffer());
const int ass_year = atoi(anno);
//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 (ass_year > dongle().year_assist())
{
const int serno = get_serial_number();
srand(ass_year);
while (!keys.eof())
{
TString& line = keys.line();
if (line.empty())
break;
decode_string(dninst_key, line.get_buffer());
const int sn = atoi(line);
if (sn == serno || line[0] == '*')
{
dongle().set_year_assist(ass_year);
if (dongle().burn())
{
return true; //Complimenti,la chiavetta e' presente nella lista e sara' aggiornato l'anno di assistenza
}
else
{
show_error(FR("Errore di scrittura sulla chiave di protezione"));
return false;
} //if(dongle().burn...
} //if(sn==serno...
} //while(!keys.eof()...
//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 (ass_year < dongle().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;
}