enable allowing unregistered users to connect
This commit is contained in:
+36
-1
@@ -38,7 +38,7 @@ string License::str() const {
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
LicenseManager::LicenseManager(const std::string& filename) : filename(filename) {
|
LicenseManager::LicenseManager(const string& filename) : filename(filename) {
|
||||||
try {
|
try {
|
||||||
auto licenses = load_vector_file<License>(this->filename);
|
auto licenses = load_vector_file<License>(this->filename);
|
||||||
for (const auto& read_license : licenses) {
|
for (const auto& read_license : licenses) {
|
||||||
@@ -141,3 +141,38 @@ vector<License> LicenseManager::snapshot() const {
|
|||||||
}
|
}
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
shared_ptr<const License> LicenseManager::create_license_pc(
|
||||||
|
uint32_t serial_number,const char* access_key, const char* password) {
|
||||||
|
shared_ptr<License> l(new License());
|
||||||
|
memset(l.get(), 0, sizeof(License));
|
||||||
|
l->serial_number = serial_number;
|
||||||
|
strncpy(l->access_key, access_key, 8);
|
||||||
|
if (password) {
|
||||||
|
strncpy(l->gc_password, password, 8);
|
||||||
|
}
|
||||||
|
return l;
|
||||||
|
}
|
||||||
|
|
||||||
|
shared_ptr<const License> LicenseManager::create_license_gc(
|
||||||
|
uint32_t serial_number, const char* access_key, const char* password) {
|
||||||
|
shared_ptr<License> l(new License());
|
||||||
|
memset(l.get(), 0, sizeof(License));
|
||||||
|
l->serial_number = serial_number;
|
||||||
|
strncpy(l->access_key, access_key, 12);
|
||||||
|
if (password) {
|
||||||
|
strncpy(l->gc_password, password, 8);
|
||||||
|
}
|
||||||
|
return l;
|
||||||
|
}
|
||||||
|
|
||||||
|
shared_ptr<const License> LicenseManager::create_license_bb(
|
||||||
|
uint32_t serial_number, const char* username, const char* password) {
|
||||||
|
shared_ptr<License> l(new License());
|
||||||
|
memset(l.get(), 0, sizeof(License));
|
||||||
|
l->serial_number = serial_number;
|
||||||
|
strncpy(l->username, username, 19);
|
||||||
|
strncpy(l->bb_password, password, 19);
|
||||||
|
return l;
|
||||||
|
}
|
||||||
|
|||||||
@@ -57,6 +57,13 @@ public:
|
|||||||
void remove(uint32_t serial_number);
|
void remove(uint32_t serial_number);
|
||||||
std::vector<License> snapshot() const;
|
std::vector<License> snapshot() const;
|
||||||
|
|
||||||
|
static std::shared_ptr<const License> create_license_pc(
|
||||||
|
uint32_t serial_number, const char* access_key, const char* password);
|
||||||
|
static std::shared_ptr<const License> create_license_gc(
|
||||||
|
uint32_t serial_number, const char* access_key, const char* password);
|
||||||
|
static std::shared_ptr<const License> create_license_bb(
|
||||||
|
uint32_t serial_number, const char* username, const char* password);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void save() const;
|
void save() const;
|
||||||
|
|
||||||
|
|||||||
+35
-8
@@ -170,9 +170,9 @@ void process_verify_license_gc(shared_ptr<ServerState> s, shared_ptr<Client> c,
|
|||||||
check_size(size, sizeof(Cmd));
|
check_size(size, sizeof(Cmd));
|
||||||
const auto* cmd = reinterpret_cast<const Cmd*>(data);
|
const auto* cmd = reinterpret_cast<const Cmd*>(data);
|
||||||
|
|
||||||
|
uint32_t serial_number = 0;
|
||||||
|
sscanf(cmd->serial_number, "%8" PRIX32, &serial_number);
|
||||||
try {
|
try {
|
||||||
uint32_t serial_number;
|
|
||||||
sscanf(cmd->serial_number, "%8" PRIX32, &serial_number);
|
|
||||||
c->license = s->license_manager->verify_gc(serial_number, cmd->access_key,
|
c->license = s->license_manager->verify_gc(serial_number, cmd->access_key,
|
||||||
cmd->password);
|
cmd->password);
|
||||||
} catch (const exception& e) {
|
} catch (const exception& e) {
|
||||||
@@ -181,6 +181,9 @@ void process_verify_license_gc(shared_ptr<ServerState> s, shared_ptr<Client> c,
|
|||||||
send_message_box(c, message.c_str());
|
send_message_box(c, message.c_str());
|
||||||
c->should_disconnect = true;
|
c->should_disconnect = true;
|
||||||
return;
|
return;
|
||||||
|
} else {
|
||||||
|
c->license = LicenseManager::create_license_pc(serial_number,
|
||||||
|
cmd->access_key, cmd->password);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -198,9 +201,9 @@ void process_login_a_dc_pc_gc(shared_ptr<ServerState> s, shared_ptr<Client> c,
|
|||||||
check_size(size, sizeof(Cmd));
|
check_size(size, sizeof(Cmd));
|
||||||
const auto* cmd = reinterpret_cast<const Cmd*>(data);
|
const auto* cmd = reinterpret_cast<const Cmd*>(data);
|
||||||
|
|
||||||
|
uint32_t serial_number = 0;
|
||||||
|
sscanf(cmd->serial_number, "%8" PRIX32, &serial_number);
|
||||||
try {
|
try {
|
||||||
uint32_t serial_number;
|
|
||||||
sscanf(cmd->serial_number, "%8" PRIX32, &serial_number);
|
|
||||||
if (c->version == GameVersion::GC) {
|
if (c->version == GameVersion::GC) {
|
||||||
c->license = s->license_manager->verify_gc(serial_number, cmd->access_key,
|
c->license = s->license_manager->verify_gc(serial_number, cmd->access_key,
|
||||||
NULL);
|
NULL);
|
||||||
@@ -214,6 +217,14 @@ void process_login_a_dc_pc_gc(shared_ptr<ServerState> s, shared_ptr<Client> c,
|
|||||||
send_message_box(c, message.c_str());
|
send_message_box(c, message.c_str());
|
||||||
c->should_disconnect = true;
|
c->should_disconnect = true;
|
||||||
return;
|
return;
|
||||||
|
} else {
|
||||||
|
if (c->version == GameVersion::GC) {
|
||||||
|
c->license = LicenseManager::create_license_gc(serial_number,
|
||||||
|
cmd->access_key, NULL);
|
||||||
|
} else {
|
||||||
|
c->license = LicenseManager::create_license_pc(serial_number,
|
||||||
|
cmd->access_key, NULL);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -235,9 +246,9 @@ void process_login_c_dc_pc_gc(shared_ptr<ServerState> s, shared_ptr<Client> c,
|
|||||||
|
|
||||||
c->flags |= flags_for_version(c->version, cmd->sub_version);
|
c->flags |= flags_for_version(c->version, cmd->sub_version);
|
||||||
|
|
||||||
|
uint32_t serial_number = 0;
|
||||||
|
sscanf(cmd->serial_number, "%8" PRIX32, &serial_number);
|
||||||
try {
|
try {
|
||||||
uint32_t serial_number;
|
|
||||||
sscanf(cmd->serial_number, "%8" PRIX32, &serial_number);
|
|
||||||
if (c->version == GameVersion::GC) {
|
if (c->version == GameVersion::GC) {
|
||||||
c->license = s->license_manager->verify_gc(serial_number, cmd->access_key,
|
c->license = s->license_manager->verify_gc(serial_number, cmd->access_key,
|
||||||
cmd->password);
|
cmd->password);
|
||||||
@@ -251,6 +262,14 @@ void process_login_c_dc_pc_gc(shared_ptr<ServerState> s, shared_ptr<Client> c,
|
|||||||
send_message_box(c, message.c_str());
|
send_message_box(c, message.c_str());
|
||||||
c->should_disconnect = true;
|
c->should_disconnect = true;
|
||||||
return;
|
return;
|
||||||
|
} else {
|
||||||
|
if (c->version == GameVersion::GC) {
|
||||||
|
c->license = LicenseManager::create_license_gc(serial_number,
|
||||||
|
cmd->access_key, cmd->password);
|
||||||
|
} else {
|
||||||
|
c->license = LicenseManager::create_license_pc(serial_number,
|
||||||
|
cmd->access_key, cmd->password);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -276,9 +295,9 @@ void process_login_d_e_pc_gc(shared_ptr<ServerState> s, shared_ptr<Client> c,
|
|||||||
|
|
||||||
c->flags |= flags_for_version(c->version, cmd->sub_version);
|
c->flags |= flags_for_version(c->version, cmd->sub_version);
|
||||||
|
|
||||||
|
uint32_t serial_number = 0;
|
||||||
|
sscanf(cmd->serial_number, "%8" PRIX32, &serial_number);
|
||||||
try {
|
try {
|
||||||
uint32_t serial_number;
|
|
||||||
sscanf(cmd->serial_number, "%8" PRIX32, &serial_number);
|
|
||||||
if (c->version == GameVersion::GC) {
|
if (c->version == GameVersion::GC) {
|
||||||
c->license = s->license_manager->verify_gc(serial_number, cmd->access_key,
|
c->license = s->license_manager->verify_gc(serial_number, cmd->access_key,
|
||||||
NULL);
|
NULL);
|
||||||
@@ -292,6 +311,14 @@ void process_login_d_e_pc_gc(shared_ptr<ServerState> s, shared_ptr<Client> c,
|
|||||||
send_message_box(c, message.c_str());
|
send_message_box(c, message.c_str());
|
||||||
c->should_disconnect = true;
|
c->should_disconnect = true;
|
||||||
return;
|
return;
|
||||||
|
} else {
|
||||||
|
if (c->version == GameVersion::GC) {
|
||||||
|
c->license = LicenseManager::create_license_gc(serial_number,
|
||||||
|
cmd->access_key, NULL);
|
||||||
|
} else {
|
||||||
|
c->license = LicenseManager::create_license_pc(serial_number,
|
||||||
|
cmd->access_key, NULL);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user