Patch level :

Files correlati     :
Ricompilazione Demo : [ ]
Commento            :
Aggiunta chiamata rpc_DongleYearActivate per permettere l'aggiornamento automatico dell'assistenza sul server di chiavi.
Aggiunta possibilità di riferirsri ai campi del report nelle query delle sottosezioni


git-svn-id: svn://10.65.10.50/branches/R_10_00@21358 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
guy 2010-12-23 09:24:46 +00:00
parent dcccd160b7
commit a0d4f678d9
8 changed files with 93 additions and 1214 deletions

View File

@ -317,7 +317,7 @@ TInfo_mask::TInfo_mask() : TProperty_sheet(TR("Informazioni"))
case _dongle_hardlock: prot = "Hardlock"; break;
case _dongle_eutron : prot = "Eutron"; break;
case _dongle_network : prot = dongle().server_name(); break;
case _dongle_hasp : prot = "Aladdin"; break;
case _dongle_aladdin : prot = "Aladdin"; break;
default : prot = TR("Nessuna"); break;
}

File diff suppressed because it is too large Load Diff

View File

@ -124,6 +124,9 @@ void TDongle::garble(word* data) const
case _dongle_eutron:
xvt_dongle_sl_crypt(data);
break;
case _dongle_aladdin:
// xvt_dongle_al_crypt(data);
break;
default:
break;
}
@ -367,6 +370,9 @@ bool TDongle::eutron_login(bool test_all_keys)
return ok;
}
bool TDongle::aladdin_login(bool test_all_dongles)
{ return false; }
bool TDongle::network_login(bool test_all_keys)
{
const char* appname = main_app().name();
@ -417,7 +423,7 @@ int TDongle::can_try_server() const
if (dongle.full())
return ini_get_int(CONFIG_INSTALL, "Main", "Type") == 3 ? 3 : 1;
return false;
return 0;
}
bool TDongle::login(bool test_all_keys)
@ -437,18 +443,11 @@ bool TDongle::login(bool test_all_keys)
}
switch(hw)
{
case _dongle_hardlock:
ok = hardlock_login(test_all_keys);
break;
case _dongle_eutron:
ok = eutron_login(test_all_keys);
break;
case _dongle_network:
ok = network_login(test_all_keys);
break;
default:
ok = false;
break;
case _dongle_hardlock: ok = hardlock_login(test_all_keys); break;
case _dongle_eutron : ok = eutron_login(test_all_keys); break;
case _dongle_network : ok = network_login(test_all_keys); break;
case _dongle_aladdin : ok = aladdin_login(test_all_keys); break;
default : ok = false; break;
}
if (!ok)
{
@ -460,6 +459,8 @@ bool TDongle::login(bool test_all_keys)
ok = eutron_login(test_all_keys);
if (!ok && hw != _dongle_hardlock)
ok = hardlock_login(test_all_keys);
if (!ok && hw != _dongle_aladdin)
ok = aladdin_login(test_all_keys);
}
if (ok)
@ -471,7 +472,7 @@ bool TDongle::login(bool test_all_keys)
_serno = 0xFFFF; //numero di serie più alto possibile (65535 in exadecimals: non sarà mai raggiunto da chiavi clienti...magari!)
_max_users = 1;
_last_update = TDate(TODAY);
_year_assist = 3000; //anno di assistenza a 3000 per non avere problemi con le versioni nei vari anni
_year_assist = 3000; // anno di assistenza a 3000 per non avere problemi con le versioni nei vari anni
_module.set(ENDAUT); // Last module on key
_module.set(); // Activate all modules
_shown.reset();
@ -494,6 +495,9 @@ bool TDongle::logout()
case _dongle_network:
rpc_UserLogout(main_app().name());
break;
case _dongle_aladdin:
// xvt_dongle_al_logout();
break;
default:
break;
}
@ -794,6 +798,11 @@ bool TDongle::burn_eutron()
return ok;
}
bool TDongle::burn_aladdin()
{
return false;
}
bool TDongle::burn()
{
bool ok = local() && _type == _user_dongle;
@ -804,6 +813,7 @@ bool TDongle::burn()
{
case _dongle_hardlock: ok = burn_hardlock(); break;
case _dongle_eutron : ok = burn_eutron(); break;
case _dongle_aladdin : ok = burn_aladdin(); break;
default : break;
}
}
@ -1034,6 +1044,26 @@ int Tdninst::parse_date(const TString& line, TString& key, TDate& datascad) cons
return 0;
}
bool Tdninst::compare_cmdline(const TString& cmdline, const TString& pattern) const
{
if (cmdline == pattern)
return true;
bool is_pattern = false;
if (pattern.len() > 2)
{
for (int i = 2; pattern[i]; i++)
{
if (pattern[i]=='*' || pattern[i] == '?')
is_pattern = true;
}
}
if (is_pattern)
return cmdline.match(pattern, true);
return false;
}
int Tdninst::test_cmdline(const TString& cmdline, bool key_must_exist, TString& msg) const
{
msg.cut(0);
@ -1070,9 +1100,9 @@ int Tdninst::test_cmdline(const TString& cmdline, bool key_must_exist, TString&
const int solar_year = oggi.year();
const int dongle_ass = don.year_assist();
const int dongle_year = assistance_year2solar(dongle_ass);
if (solar_year - dongle_year >= 2)
if (solar_year - dongle_year > 2)
{
msg << TR("Anno di assitenza non valido sulla chiave: ") << dongle_year;
msg << TR("Anno di assistenza non valido sulla chiave: ") << dongle_year;
return 3;
}
@ -1108,7 +1138,7 @@ int Tdninst::test_cmdline(const TString& cmdline, bool key_must_exist, TString&
return 7;
}
} else
if (key == cmdline)
if (compare_cmdline(cmdline, key))
{
bFound = true;
if (scaduto)

View File

@ -9,7 +9,7 @@
#include <strings.h>
#endif
enum TDongleHardware { _dongle_unknown, _dongle_hardlock, _dongle_eutron, _dongle_network, _dongle_hasp };
enum TDongleHardware { _dongle_unknown, _dongle_hardlock, _dongle_eutron, _dongle_network, _dongle_aladdin };
enum TDongleType { _no_dongle, _user_dongle, _developer_dongle, _aga_dongle };
class TDongle : public TObject
@ -34,10 +34,12 @@ protected:
void set_developer_permissions();
bool hardlock_login(bool test_all_dongles);
bool eutron_login(bool test_all_dongles);
bool network_login(bool test_all_dongles);
bool network_login(bool test_all_dongles);
bool aladdin_login(bool test_all_dongles);
bool burn_hardlock();
bool burn_eutron();
bool burn_aladdin();
int can_try_server() const;
const TString_array& info() const; // Array di coppie modulo|descrizione
@ -106,6 +108,7 @@ class Tdninst : public TObject
protected:
int assistance_year2solar(int ay) const;
int parse_date(const TString& line, TString& key, TDate& d) const;
bool compare_cmdline(const TString& cmdline, const TString& pattern) const;
public:
int assist_year() const { return _year_assist; }

View File

@ -364,16 +364,40 @@ bool rpc_UserLogout(const char* appname)
if (_connection)
{
const int session = xvt_sys_get_session_id();
_rpc_call.format("UserLogout(%s, %d, %s)", (const char*)user(), session, appname);
_rpc_call.format("UserLogout(%s,%d,%s)", (const char*)user(), session, appname);
//rpc_Call(_rpc_call); // Richiede il logout senza attendere la risposta
BoolCall(3); // Aspetta un po' in modo da permettere al server di esaminare la richiesta
_client->RemoveConnection(_connection); // Chiude la connessione
_connection = 0;
}
return true;
}
bool rpc_DongleModuleActivate(word mod, bool on)
{
TString16 password;
create_password(password);
_rpc_call.format("DongleModuleActivate(%d,%d,%s)", mod, on, (const char*)password);
return BoolCall();
}
bool rpc_DongleUsersActivate(word users)
{
TString16 password;
create_password(password);
_rpc_call.format("DongleUsersActivate(%d,%s)", users, (const char*)password);
return BoolCall();
}
bool rpc_DongleYearActivate(word year)
{
TString16 password;
create_password(password);
_rpc_call.format("DongleYearActivate(%d,%s)", year, (const char*)password);
return BoolCall();
}
bool http_isredirected_server(TString& server,
TFilename& remote_file,
const char* authorization)

View File

@ -13,7 +13,9 @@ bool rpc_DongleModules(TBit_array& ba);
unsigned rpc_DongleNumber();
unsigned rpc_DongleYear();
bool rpc_DongleInfo(word& number, word& year, TBit_array& ba);
bool rpc_DongleYearActivate(word year);
bool rpc_DongleUsersActivate(word users);
bool rpc_DongleModuleActivate(word mod, bool on);
bool rpc_UserLogin(const char* server, const char* user,
const char* password, const char* application);
bool rpc_UserLogout(const char* appname);

View File

@ -2422,7 +2422,6 @@ bool TReport::execute_dot(const TVariant& var)
return TAlex_virtual_machine::execute_dot(var);
}
bool TReport::execute_prescript()
{
bool ok = true;

View File

@ -3,7 +3,6 @@
#include <colors.h>
#include <config.h>
#include <defmask.h>
#include <diction.h>
#include <dongle.h>
#include <execp.h>
#include <modaut.h>
@ -2655,7 +2654,7 @@ bool TReport_book::init(TReport& rep)
const double colonne_pagina = pollici_pagina_x * cpi();
_logical_page_width = long(colonne_pagina*100.0);
const TReport_section& footer = _report->section('F',0);
const TReport_section& footer = _report->section('F', 0);
_logical_foot_pos = footer.pos().y;
if (_logical_foot_pos <= 0)
{
@ -2678,6 +2677,16 @@ void TReport_book::print_subsections(int father)
TRecordset* rex = rs->recordset();
if (rex != NULL)
{
const TString_array& variables = rex->variables();
FOR_EACH_ARRAY_ROW(variables, v, name) if (!name->starts_with("#PARENT"))
{
const TReport_field* fld = _report->field(*name);
if (fld != NULL)
{
const TVariant& val = fld->get();
rex->set_var(*name, val);
}
}
rex->requery();
if (rex->items() > 0)
{