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 {
|
||||
auto licenses = load_vector_file<License>(this->filename);
|
||||
for (const auto& read_license : licenses) {
|
||||
@@ -141,3 +141,38 @@ vector<License> LicenseManager::snapshot() const {
|
||||
}
|
||||
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);
|
||||
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:
|
||||
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));
|
||||
const auto* cmd = reinterpret_cast<const Cmd*>(data);
|
||||
|
||||
uint32_t serial_number = 0;
|
||||
sscanf(cmd->serial_number, "%8" PRIX32, &serial_number);
|
||||
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,
|
||||
cmd->password);
|
||||
} 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());
|
||||
c->should_disconnect = true;
|
||||
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));
|
||||
const auto* cmd = reinterpret_cast<const Cmd*>(data);
|
||||
|
||||
uint32_t serial_number = 0;
|
||||
sscanf(cmd->serial_number, "%8" PRIX32, &serial_number);
|
||||
try {
|
||||
uint32_t serial_number;
|
||||
sscanf(cmd->serial_number, "%8" PRIX32, &serial_number);
|
||||
if (c->version == GameVersion::GC) {
|
||||
c->license = s->license_manager->verify_gc(serial_number, cmd->access_key,
|
||||
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());
|
||||
c->should_disconnect = true;
|
||||
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);
|
||||
|
||||
uint32_t serial_number = 0;
|
||||
sscanf(cmd->serial_number, "%8" PRIX32, &serial_number);
|
||||
try {
|
||||
uint32_t serial_number;
|
||||
sscanf(cmd->serial_number, "%8" PRIX32, &serial_number);
|
||||
if (c->version == GameVersion::GC) {
|
||||
c->license = s->license_manager->verify_gc(serial_number, cmd->access_key,
|
||||
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());
|
||||
c->should_disconnect = true;
|
||||
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);
|
||||
|
||||
uint32_t serial_number = 0;
|
||||
sscanf(cmd->serial_number, "%8" PRIX32, &serial_number);
|
||||
try {
|
||||
uint32_t serial_number;
|
||||
sscanf(cmd->serial_number, "%8" PRIX32, &serial_number);
|
||||
if (c->version == GameVersion::GC) {
|
||||
c->license = s->license_manager->verify_gc(serial_number, cmd->access_key,
|
||||
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());
|
||||
c->should_disconnect = true;
|
||||
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