mirror of
https://github.com/EQEmu/Server.git
synced 2025-12-15 00:01:28 +00:00
Turn SendLoginInfoPacket handling into a method.
This commit is contained in:
parent
969f0c535e
commit
211248b50e
216
world/client.cpp
216
world/client.cpp
@ -368,6 +368,114 @@ void Client::SendPostEnterWorld() {
|
|||||||
safe_delete(outapp);
|
safe_delete(outapp);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool Client::HandleSendLoginInfoPacket(const EQApplicationPacket *app) {
|
||||||
|
if (app->size != sizeof(LoginInfo_Struct)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
LoginInfo_Struct *li=(LoginInfo_Struct *)app->pBuffer;
|
||||||
|
|
||||||
|
// Quagmire - max len for name is 18, pass 15
|
||||||
|
char name[19] = {0};
|
||||||
|
char password[16] = {0};
|
||||||
|
strn0cpy(name, (char*)li->login_info,18);
|
||||||
|
strn0cpy(password, (char*)&(li->login_info[strlen(name)+1]), 15);
|
||||||
|
|
||||||
|
if (strlen(password) <= 1) {
|
||||||
|
// TODO: Find out how to tell the client wrong username/password
|
||||||
|
clog(WORLD__CLIENT_ERR,"Login without a password");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
pZoning=(li->zoning==1);
|
||||||
|
|
||||||
|
#ifdef IPBASED_AUTH_HACK
|
||||||
|
struct in_addr tmpip;
|
||||||
|
tmpip.s_addr = ip;
|
||||||
|
#endif
|
||||||
|
uint32 id=0;
|
||||||
|
bool minilogin = loginserverlist.MiniLogin();
|
||||||
|
if(minilogin){
|
||||||
|
struct in_addr miniip;
|
||||||
|
miniip.s_addr = ip;
|
||||||
|
id = database.GetMiniLoginAccount(inet_ntoa(miniip));
|
||||||
|
}
|
||||||
|
else if(strncasecmp(name, "LS#", 3) == 0)
|
||||||
|
id=atoi(&name[3]);
|
||||||
|
else
|
||||||
|
id=atoi(name);
|
||||||
|
#ifdef IPBASED_AUTH_HACK
|
||||||
|
if ((cle = zoneserver_list.CheckAuth(inet_ntoa(tmpip), password)))
|
||||||
|
#else
|
||||||
|
if (loginserverlist.Connected() == false && !pZoning) {
|
||||||
|
clog(WORLD__CLIENT_ERR,"Error: Login server login while not connected to login server.");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if ((minilogin && (cle = client_list.CheckAuth(id,password,ip))) || (cle = client_list.CheckAuth(id, password)))
|
||||||
|
#endif
|
||||||
|
{
|
||||||
|
if (cle->AccountID() == 0 || (!minilogin && cle->LSID()==0)) {
|
||||||
|
clog(WORLD__CLIENT_ERR,"ID is 0. Is this server connected to minilogin?");
|
||||||
|
if(!minilogin)
|
||||||
|
clog(WORLD__CLIENT_ERR,"If so you forget the minilogin variable...");
|
||||||
|
else
|
||||||
|
clog(WORLD__CLIENT_ERR,"Could not find a minilogin account, verify ip address logging into minilogin is the same that is in your account table.");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
cle->SetOnline();
|
||||||
|
|
||||||
|
clog(WORLD__CLIENT,"Logged in. Mode=%s",pZoning ? "(Zoning)" : "(CharSel)");
|
||||||
|
|
||||||
|
if(minilogin){
|
||||||
|
WorldConfig::DisableStats();
|
||||||
|
clog(WORLD__CLIENT,"MiniLogin Account #%d",cle->AccountID());
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
clog(WORLD__CLIENT,"LS Account #%d",cle->LSID());
|
||||||
|
}
|
||||||
|
|
||||||
|
const WorldConfig *Config=WorldConfig::get();
|
||||||
|
|
||||||
|
if(Config->UpdateStats){
|
||||||
|
ServerPacket* pack = new ServerPacket;
|
||||||
|
pack->opcode = ServerOP_LSPlayerJoinWorld;
|
||||||
|
pack->size = sizeof(ServerLSPlayerJoinWorld_Struct);
|
||||||
|
pack->pBuffer = new uchar[pack->size];
|
||||||
|
memset(pack->pBuffer,0,pack->size);
|
||||||
|
ServerLSPlayerJoinWorld_Struct* join =(ServerLSPlayerJoinWorld_Struct*)pack->pBuffer;
|
||||||
|
strcpy(join->key,GetLSKey());
|
||||||
|
join->lsaccount_id = GetLSID();
|
||||||
|
loginserverlist.SendPacket(pack);
|
||||||
|
safe_delete(pack);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!pZoning)
|
||||||
|
SendGuildList();
|
||||||
|
SendLogServer();
|
||||||
|
SendApproveWorld();
|
||||||
|
SendEnterWorld(cle->name());
|
||||||
|
SendPostEnterWorld();
|
||||||
|
if (!pZoning) {
|
||||||
|
SendExpansionInfo();
|
||||||
|
SendCharInfo();
|
||||||
|
database.LoginIP(cle->AccountID(), long2ip(GetIP()).c_str());
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
// TODO: Find out how to tell the client wrong username/password
|
||||||
|
clog(WORLD__CLIENT_ERR,"Bad/Expired session key '%s'",name);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!cle)
|
||||||
|
return true;
|
||||||
|
|
||||||
|
cle->SetIP(GetIP());
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
bool Client::HandleNameApprovalPacket(const EQApplicationPacket *app) {
|
bool Client::HandleNameApprovalPacket(const EQApplicationPacket *app) {
|
||||||
|
|
||||||
if (GetAccountID() == 0) {
|
if (GetAccountID() == 0) {
|
||||||
@ -412,6 +520,7 @@ bool Client::HandleNameApprovalPacket(const EQApplicationPacket *app) {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
bool Client::HandlePacket(const EQApplicationPacket *app) {
|
bool Client::HandlePacket(const EQApplicationPacket *app) {
|
||||||
const WorldConfig *Config=WorldConfig::get();
|
const WorldConfig *Config=WorldConfig::get();
|
||||||
EmuOpcode opcode = app->GetOpcode();
|
EmuOpcode opcode = app->GetOpcode();
|
||||||
@ -449,112 +558,7 @@ bool Client::HandlePacket(const EQApplicationPacket *app) {
|
|||||||
break;
|
break;
|
||||||
case OP_SendLoginInfo:
|
case OP_SendLoginInfo:
|
||||||
{
|
{
|
||||||
if (app->size != sizeof(LoginInfo_Struct)) {
|
return HandleSendLoginInfoPacket(app);
|
||||||
ret = false;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
LoginInfo_Struct *li=(LoginInfo_Struct *)app->pBuffer;
|
|
||||||
|
|
||||||
// Quagmire - max len for name is 18, pass 15
|
|
||||||
char name[19] = {0};
|
|
||||||
char password[16] = {0};
|
|
||||||
strn0cpy(name, (char*)li->login_info,18);
|
|
||||||
strn0cpy(password, (char*)&(li->login_info[strlen(name)+1]), 15);
|
|
||||||
|
|
||||||
if (strlen(password) <= 1) {
|
|
||||||
// TODO: Find out how to tell the client wrong username/password
|
|
||||||
clog(WORLD__CLIENT_ERR,"Login without a password");
|
|
||||||
ret = false;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
pZoning=(li->zoning==1);
|
|
||||||
|
|
||||||
#ifdef IPBASED_AUTH_HACK
|
|
||||||
struct in_addr tmpip;
|
|
||||||
tmpip.s_addr = ip;
|
|
||||||
#endif
|
|
||||||
uint32 id=0;
|
|
||||||
bool minilogin = loginserverlist.MiniLogin();
|
|
||||||
if(minilogin){
|
|
||||||
struct in_addr miniip;
|
|
||||||
miniip.s_addr = ip;
|
|
||||||
id = database.GetMiniLoginAccount(inet_ntoa(miniip));
|
|
||||||
}
|
|
||||||
else if(strncasecmp(name, "LS#", 3) == 0)
|
|
||||||
id=atoi(&name[3]);
|
|
||||||
else
|
|
||||||
id=atoi(name);
|
|
||||||
#ifdef IPBASED_AUTH_HACK
|
|
||||||
if ((cle = zoneserver_list.CheckAuth(inet_ntoa(tmpip), password)))
|
|
||||||
#else
|
|
||||||
if (loginserverlist.Connected() == false && !pZoning) {
|
|
||||||
clog(WORLD__CLIENT_ERR,"Error: Login server login while not connected to login server.");
|
|
||||||
ret = false;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
if ((minilogin && (cle = client_list.CheckAuth(id,password,ip))) || (cle = client_list.CheckAuth(id, password)))
|
|
||||||
#endif
|
|
||||||
{
|
|
||||||
if (cle->AccountID() == 0 || (!minilogin && cle->LSID()==0)) {
|
|
||||||
clog(WORLD__CLIENT_ERR,"ID is 0. Is this server connected to minilogin?");
|
|
||||||
if(!minilogin)
|
|
||||||
clog(WORLD__CLIENT_ERR,"If so you forget the minilogin variable...");
|
|
||||||
else
|
|
||||||
clog(WORLD__CLIENT_ERR,"Could not find a minilogin account, verify ip address logging into minilogin is the same that is in your account table.");
|
|
||||||
ret = false;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
cle->SetOnline();
|
|
||||||
|
|
||||||
clog(WORLD__CLIENT,"Logged in. Mode=%s",pZoning ? "(Zoning)" : "(CharSel)");
|
|
||||||
|
|
||||||
if(minilogin){
|
|
||||||
WorldConfig::DisableStats();
|
|
||||||
clog(WORLD__CLIENT,"MiniLogin Account #%d",cle->AccountID());
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
clog(WORLD__CLIENT,"LS Account #%d",cle->LSID());
|
|
||||||
}
|
|
||||||
if(Config->UpdateStats){
|
|
||||||
ServerPacket* pack = new ServerPacket;
|
|
||||||
pack->opcode = ServerOP_LSPlayerJoinWorld;
|
|
||||||
pack->size = sizeof(ServerLSPlayerJoinWorld_Struct);
|
|
||||||
pack->pBuffer = new uchar[pack->size];
|
|
||||||
memset(pack->pBuffer,0,pack->size);
|
|
||||||
ServerLSPlayerJoinWorld_Struct* join =(ServerLSPlayerJoinWorld_Struct*)pack->pBuffer;
|
|
||||||
strcpy(join->key,GetLSKey());
|
|
||||||
join->lsaccount_id = GetLSID();
|
|
||||||
loginserverlist.SendPacket(pack);
|
|
||||||
safe_delete(pack);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!pZoning)
|
|
||||||
SendGuildList();
|
|
||||||
SendLogServer();
|
|
||||||
SendApproveWorld();
|
|
||||||
SendEnterWorld(cle->name());
|
|
||||||
SendPostEnterWorld();
|
|
||||||
if (!pZoning) {
|
|
||||||
SendExpansionInfo();
|
|
||||||
SendCharInfo();
|
|
||||||
database.LoginIP(cle->AccountID(), long2ip(GetIP()).c_str());
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
// TODO: Find out how to tell the client wrong username/password
|
|
||||||
clog(WORLD__CLIENT_ERR,"Bad/Expired session key '%s'",name);
|
|
||||||
ret = false;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!cle)
|
|
||||||
break;
|
|
||||||
cle->SetIP(GetIP());
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
case OP_ApproveName: //Name approval
|
case OP_ApproveName: //Name approval
|
||||||
{
|
{
|
||||||
|
|||||||
@ -99,6 +99,7 @@ private:
|
|||||||
bool realfirstlogin;
|
bool realfirstlogin;
|
||||||
bool HandlePacket(const EQApplicationPacket *app);
|
bool HandlePacket(const EQApplicationPacket *app);
|
||||||
bool HandleNameApprovalPacket(const EQApplicationPacket *app);
|
bool HandleNameApprovalPacket(const EQApplicationPacket *app);
|
||||||
|
bool HandleSendLoginInfoPacket(const EQApplicationPacket *app);
|
||||||
|
|
||||||
EQStreamInterface* const eqs;
|
EQStreamInterface* const eqs;
|
||||||
};
|
};
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user