support full DC NTE credentials

This commit is contained in:
Martin Michelsen
2024-02-24 22:49:37 -08:00
parent 70325793d9
commit 28cb1c52b5
8 changed files with 123 additions and 45 deletions
+8 -8
View File
@@ -465,9 +465,8 @@ static void on_88_DCNTE(shared_ptr<Client> c, uint16_t, uint32_t, string& data)
c->config.set_flags_for_version(c->version(), -1);
c->log.info("Game version changed to DC_NTE");
uint32_t serial_number = stoul(cmd.serial_number.decode(), nullptr, 16);
try {
shared_ptr<License> l = s->license_index->verify_v1_v2(serial_number, cmd.access_key.decode(), "");
shared_ptr<License> l = s->license_index->verify_dc_nte(cmd.serial_number.decode(), cmd.access_key.decode());
c->set_license(l);
send_command(c, 0x88, 0x00);
@@ -487,8 +486,9 @@ static void on_88_DCNTE(shared_ptr<Client> c, uint16_t, uint32_t, string& data)
} else {
c->config.set_flag(Client::Flag::LICENSE_WAS_CREATED);
auto l = s->license_index->create_license();
l->serial_number = serial_number;
l->access_key = cmd.access_key.decode();
l->dc_nte_serial_number = cmd.serial_number.decode();
l->dc_nte_access_key = cmd.access_key.decode();
l->serial_number = fnv1a32(l->dc_nte_serial_number) & 0x7FFFFFFF;
s->license_index->add(l);
if (!s->is_replay) {
l->save();
@@ -510,9 +510,8 @@ static void on_8B_DCNTE(shared_ptr<Client> c, uint16_t, uint32_t, string& data)
c->config.set_flags_for_version(c->version(), -1);
c->log.info("Game version changed to DC_NTE");
uint32_t serial_number = stoul(cmd.serial_number.decode(), nullptr, 16);
try {
shared_ptr<License> l = s->license_index->verify_v1_v2(serial_number, cmd.access_key.decode(), cmd.name.decode());
shared_ptr<License> l = s->license_index->verify_dc_nte(cmd.serial_number.decode(), cmd.access_key.decode());
c->set_license(l);
} catch (const LicenseIndex::no_username& e) {
@@ -531,8 +530,9 @@ static void on_8B_DCNTE(shared_ptr<Client> c, uint16_t, uint32_t, string& data)
} else {
c->config.set_flag(Client::Flag::LICENSE_WAS_CREATED);
auto l = s->license_index->create_license();
l->serial_number = serial_number;
l->access_key = cmd.access_key.decode();
l->dc_nte_serial_number = cmd.serial_number.decode();
l->dc_nte_access_key = cmd.access_key.decode();
l->serial_number = fnv1a32(l->dc_nte_serial_number) & 0x7FFFFFFF;
s->license_index->add(l);
if (!s->is_replay) {
l->save();