prerelease version + implemented logfile support
This commit is contained in:
parent
dda1afada0
commit
fa4385c74f
@ -158,9 +158,9 @@ bool VarSet::ReadVarsFromFile(std::string fn)
|
||||
vn=prefix+v;
|
||||
vv=line.substr(pos+1,line.length()-1);
|
||||
Set(vn,vv);
|
||||
#ifdef _DEBUG
|
||||
#ifdef _DEBUG
|
||||
printf("DEBUG: Var import [%s] = %s\n",vn.c_str(),vv.c_str());
|
||||
#endif
|
||||
#endif
|
||||
}
|
||||
// else invalid line, must have '='
|
||||
}
|
||||
|
||||
@ -22,7 +22,7 @@ bool DefScriptPackage::SCpause(CmdSet Set){
|
||||
bool DefScriptPackage::SCSendChatMessage(CmdSet Set){
|
||||
if(!(((PseuInstance*)parentMethod)->GetWSession() && ((PseuInstance*)parentMethod)->GetWSession()->IsValid()))
|
||||
{
|
||||
printf("Invalid Script call: SCSendChatMessage: WorldSession not valid\n");
|
||||
log("Invalid Script call: SCSendChatMessage: WorldSession not valid");
|
||||
return false;
|
||||
}
|
||||
std::stringstream ss;
|
||||
@ -64,7 +64,7 @@ bool DefScriptPackage::SCemote(CmdSet Set){
|
||||
return true;
|
||||
if(!(((PseuInstance*)parentMethod)->GetWSession() && ((PseuInstance*)parentMethod)->GetWSession()->IsValid()))
|
||||
{
|
||||
printf("Invalid Script call: SCEmote: WorldSession not valid\n");
|
||||
log("Invalid Script call: SCEmote: WorldSession not valid");
|
||||
return false;
|
||||
}
|
||||
uint32 id=atoi(Set.defaultarg.c_str());
|
||||
@ -103,7 +103,7 @@ void DefScriptPackage::My_LoadUserPermissions(VarSet &vs)
|
||||
{
|
||||
usr = variables[i].name.substr(strlen(prefix), variables[i].name.length() - strlen(prefix));
|
||||
my_usrPermissionMap[usr] = atoi(variables[i].value.c_str());
|
||||
DEBUG( printf("Player '%s' permission = %u\n",usr.c_str(),atoi(variables[i].value.c_str())); )
|
||||
DEBUG( log("Player '%s' permission = %u",usr.c_str(),atoi(variables[i].value.c_str())); )
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -68,6 +68,7 @@ PseuInstance::~PseuInstance()
|
||||
}
|
||||
|
||||
bool PseuInstance::Init(void) {
|
||||
log_prepare("logfile.txt",this);
|
||||
|
||||
if(_confdir.empty())
|
||||
_confdir="./conf/";
|
||||
@ -78,7 +79,7 @@ bool PseuInstance::Init(void) {
|
||||
RAND_set_rand_method(RAND_SSLeay()); // init openssl randomizer
|
||||
|
||||
if(SDL_Init(0)==-1) {
|
||||
printf("SDL_Init: %s\n", SDL_GetError());
|
||||
log("SDL_Init: %s", SDL_GetError());
|
||||
return false;
|
||||
}
|
||||
|
||||
@ -86,53 +87,57 @@ bool PseuInstance::Init(void) {
|
||||
_scp->SetParentMethod((void*)this);
|
||||
_conf=new PseuInstanceConf();
|
||||
|
||||
log("Reading PseuWoW.conf...");
|
||||
if(!_scp->variables.ReadVarsFromFile(_confdir + "PseuWoW.conf"))
|
||||
{
|
||||
printf("Error reading conf file [%s]",_confdir.append("PseuWoW.conf").c_str());
|
||||
log("Error reading conf file [%s]",_confdir.append("PseuWoW.conf").c_str());
|
||||
return false;
|
||||
}
|
||||
logdetail("Applying configuration...");
|
||||
_conf->ApplyFromVarSet(_scp->variables);
|
||||
|
||||
log("Reading user permissions...");
|
||||
if(_scp->variables.ReadVarsFromFile(_confdir + "users.conf"))
|
||||
{
|
||||
printf("-> Done reading users.\n");
|
||||
log("-> Done reading users.");
|
||||
}
|
||||
else
|
||||
{
|
||||
printf("Error reading conf file [%s] - NO PERMISSIONS SET!\n",_confdir.append("users.conf").c_str());
|
||||
log("Error reading conf file [%s] - NO PERMISSIONS SET!",_confdir.append("users.conf").c_str());
|
||||
}
|
||||
|
||||
|
||||
// //DEBUG1(printf("Main_Init: Setting up DefScripts path '%s'\n",defScpPath.c_str()););
|
||||
logdebug("Setting up DefScripts path '%s'",_scpdir.c_str());
|
||||
_scp->SetPath(_scpdir);
|
||||
|
||||
// //DEBUG1(printf("Main_Init: Setting up predefined DefScript macros...\n"););
|
||||
logdebug("Setting up predefined DefScript macros...");
|
||||
_scp->variables.Set("@version_short",_ver_short);
|
||||
_scp->variables.Set("@version",_ver);
|
||||
|
||||
logdetail("Applying user permissions...");
|
||||
_scp->My_LoadUserPermissions(_scp->variables);
|
||||
|
||||
|
||||
// //DEBUG1(printf("Main_Init: Loading DefScripts from folder '%s'\n",defScpPath.c_str()););
|
||||
log("Loading DefScripts from folder '%s'",_scpdir.c_str());
|
||||
if(!_scp->RunScript("_startup",NULL))
|
||||
{
|
||||
printf("Main_Init: Error executing '_startup.def'\n");
|
||||
printf("Error executing '_startup.def'");
|
||||
}
|
||||
|
||||
if(GetConf()->enablecli)
|
||||
{
|
||||
log("Starting CLI...");
|
||||
_cli = new CliRunnable(this);
|
||||
ZThread::Thread t(_cli);
|
||||
}
|
||||
|
||||
if(_stop){
|
||||
printf("Errors while initializing, proc halted!!\n");
|
||||
log("Errors while initializing, proc halted!!");
|
||||
if(GetConf()->exitonerror)
|
||||
exit(0);
|
||||
while(true)SDL_Delay(1000);
|
||||
}
|
||||
|
||||
// if(DEBUG)printf("Main_Init: Init complete.\n");
|
||||
log("Init complete.\n");
|
||||
_initialized=true;
|
||||
return true;
|
||||
}
|
||||
@ -167,10 +172,10 @@ void PseuInstance::Run(void)
|
||||
|
||||
if(_fastquit)
|
||||
{
|
||||
printf("Aborting Instance...\n");
|
||||
log("Aborting Instance...");
|
||||
return;
|
||||
}
|
||||
printf("Shutting down instance...\n");
|
||||
log("Shutting down instance...");
|
||||
|
||||
SaveAllCache();
|
||||
|
||||
@ -223,100 +228,6 @@ void PseuInstance::Sleep(uint32 msecs)
|
||||
|
||||
|
||||
|
||||
/*
|
||||
printf("%s\n",ver);
|
||||
for(unsigned int temp=0;temp<=strlen(ver);temp++)printf("~");printf("\n");
|
||||
printf("[Compiled on: %s , %s]\n\n",__DATE__,__TIME__);
|
||||
if (!initproc()) quitproc_error();
|
||||
|
||||
bool _auth_sent=false;
|
||||
bool _first_wpacket=true;
|
||||
clock_t ping_time=clock()-25000;
|
||||
|
||||
while (true) {
|
||||
|
||||
if(something_went_wrong){
|
||||
if(inworld){
|
||||
SendChatMessage(CHAT_MSG_YELL,0,"ERROR! Something went wrong, exiting...","");
|
||||
}
|
||||
printf("!!! Something went wrong, proc halted.!!!\n");
|
||||
ctrlCon.Close();
|
||||
worldCon.Close();
|
||||
realmCon.Close();
|
||||
if(exitonerror)quitproc();
|
||||
while(true)SDL_Delay(1000);
|
||||
}
|
||||
|
||||
if( !realmCon.IsConnected() && !worldCon.IsConnected() && !something_went_wrong){
|
||||
printf("Opening realm TCP connection <%s:%d>\n",realmlist,rs_port);
|
||||
while(!realmCon.ConnectTo(realmlist,rs_port));
|
||||
_auth_sent=false;
|
||||
}
|
||||
|
||||
if(realmCon.IsConnected() && !worldCon.IsConnected() && !something_went_wrong){
|
||||
if(!_auth_sent){
|
||||
CLIENT_LOGON_CHALLENGE(accname, accpass);
|
||||
_auth_sent=true;
|
||||
}
|
||||
}
|
||||
if(realmCon.HasData()){
|
||||
Buf buf;
|
||||
buf=realmCon.GetData();
|
||||
rs_parser(buf.str,buf.len); // TODO: change type to Buf (also the func arg!)
|
||||
}
|
||||
|
||||
|
||||
|
||||
while(worldCon.GetBufferLevel()>1){
|
||||
////DEBUG3(
|
||||
// printf("WS_IN, %d bytes. Buffer Level=%u\n",worldCon.GetKeepData().len,worldCon.GetBufferLevel());
|
||||
// printchex(worldCon.GetKeepData().str,worldCon.GetKeepData().len,true);
|
||||
//)
|
||||
//_first_wpacket=false;
|
||||
ByteBuffer pk2;
|
||||
pk2.append(worldCon.GetDataString());
|
||||
pk2.resize(pk2.size()-1);
|
||||
HandleWorldPacket(pk2);
|
||||
}
|
||||
|
||||
// this covers the first serverseed packet, which get sometimes merged into 1 packet instead of 2
|
||||
if(worldCon.HasData() && _first_wpacket && worldCon.GetKeepData().len==8){
|
||||
_first_wpacket=false;
|
||||
ByteBuffer pk2;
|
||||
pk2.append(worldCon.GetDataString());
|
||||
pk2.resize(pk2.size()-1);
|
||||
HandleWorldPacket(pk2);
|
||||
}
|
||||
|
||||
|
||||
if(!worldCon.IsConnected() && inworld){
|
||||
printf("Disconnected from World server!\n");
|
||||
inworld=false;
|
||||
_first_wpacket=true;
|
||||
_auth_sent=false;
|
||||
}
|
||||
|
||||
if(clock()-ping_time>30000)
|
||||
{
|
||||
ping_time=clock();
|
||||
SendPing(ping_time);
|
||||
}
|
||||
|
||||
|
||||
SDL_Delay(idleSleepTime);
|
||||
if (error)return error;
|
||||
|
||||
|
||||
|
||||
|
||||
void _SaveAllCache(void){
|
||||
bool result;
|
||||
result=plrNameCache.SaveToFile();
|
||||
// +++
|
||||
}
|
||||
*/
|
||||
|
||||
|
||||
PseuInstanceConf::PseuInstanceConf()
|
||||
{
|
||||
}
|
||||
|
||||
@ -3,6 +3,7 @@
|
||||
#define _PSEUWOW_H
|
||||
|
||||
#include "common.h"
|
||||
#include "log.h"
|
||||
#include "Auth/BigNumber.h"
|
||||
#include "DefScript/DefScript.h"
|
||||
#include "Network/SocketHandler.h"
|
||||
|
||||
@ -133,8 +133,6 @@ void RealmSocket::_HandleRealmList(void)
|
||||
uint8 cmd,count;
|
||||
realmbuf >> cmd >> len >> unk >> count;
|
||||
|
||||
printf("DEBUG: Realm cmd=%u, count=%u, size=%u, unk=%u\n",cmd,count,len,unk);
|
||||
|
||||
// no realm?
|
||||
if(count==0)
|
||||
return;
|
||||
@ -163,16 +161,13 @@ void RealmSocket::_HandleRealmList(void)
|
||||
{
|
||||
realmAddr=realms[i].addr_port;
|
||||
}
|
||||
printf("Realm: %s (%s)",realms[i].name.c_str(),realms[i].addr_port.c_str());
|
||||
printf("[chars:%d][population:%f][timezone:%d]",realms[i].chars_here,realms[i].population,realms[i].timezone);
|
||||
printf("\n");
|
||||
log("Realm: %s (%s)",realms[i].name.c_str(),realms[i].addr_port.c_str());
|
||||
logdetail(" [chars:%d][population:%f][timezone:%d]",realms[i].chars_here,realms[i].population,realms[i].timezone);
|
||||
}
|
||||
|
||||
// now setup where the woldserver is and how to login there
|
||||
if(realmAddr.empty()){
|
||||
printf("Realm \"%s\" was not found on the realmlist!\n",GetInstance()->GetConf()->realmname.c_str());
|
||||
//something_went_wrong=true;
|
||||
//realmCon.Close();
|
||||
log("Realm \"%s\" was not found on the realmlist!",GetInstance()->GetConf()->realmname.c_str());
|
||||
return;
|
||||
}
|
||||
|
||||
@ -196,7 +191,7 @@ void RealmSocket::OnRead(void)
|
||||
{
|
||||
TcpSocket::OnRead();
|
||||
bool known=false;
|
||||
printf("RealmSocket::OnRead() %u bytes\n",ibuf.GetLength());
|
||||
//printf("RealmSocket::OnRead() %u bytes\n",ibuf.GetLength());
|
||||
if(!ibuf.GetLength())
|
||||
return;
|
||||
uint8 cmd, i=0;
|
||||
@ -212,96 +207,17 @@ void RealmSocket::OnRead(void)
|
||||
}
|
||||
if(!known)
|
||||
{
|
||||
printf("RealmSocket: Got unknown packet, cmd=%u\n",cmd);
|
||||
log("RealmSocket: Got unknown packet, cmd=%u",cmd);
|
||||
}
|
||||
ibuf.Remove(ibuf.GetLength()); // if we have data crap left on the buf, delete it
|
||||
}
|
||||
|
||||
/*
|
||||
switch(rs_state){
|
||||
unsigned int i;
|
||||
case 1:{
|
||||
if(pkt[2]==4){
|
||||
printf("Realm Server did not find account \"%s\"!\n",accname);
|
||||
something_went_wrong=true;
|
||||
realmCon.Close();
|
||||
} else
|
||||
if(pkt[2]==6){
|
||||
printf("Account \"%s\" is already logged in!\n",accname);
|
||||
realmCon.Close();
|
||||
something_went_wrong=true;
|
||||
} else
|
||||
if(pkt[2]!=0){
|
||||
printf("Unknown realm server response! opcode=0x%x\n",(unsigned char)pkt[2]);
|
||||
something_went_wrong=true;
|
||||
realmCon.Close();
|
||||
} else
|
||||
if(pkt[2]==0){
|
||||
//DEBUG1(printf("Login successful, now calculating proof packet...\n"););
|
||||
ProcessClientLogonProof(pkt);
|
||||
rs_state=2; // 2=waiting for server proof
|
||||
}
|
||||
}break;
|
||||
|
||||
case 2:{
|
||||
if(pkt[1]==4){
|
||||
printf("Wrong password!\n");
|
||||
something_went_wrong=true;
|
||||
realmCon.Close();
|
||||
} else
|
||||
if(pkt[0]==1 && pkt[1]==0 && memcmp(&pkt[2],Auth_M2,20)!=0){
|
||||
printf("Something with Authenticating went wrong, although the password seems correct!\n");
|
||||
//DEBUG1(printf("-> expected M2=");printchex(Auth_M2,20,true);)
|
||||
//DEBUG1(printf("-> got M2=");printchex(&pkt[2],20,true);)
|
||||
something_went_wrong=true;
|
||||
realmCon.Close();
|
||||
} else
|
||||
if(pkt[0]==1 && pkt[1]==0 && memcmp(&pkt[2],Auth_M2,20)==0){
|
||||
printf("Password is correct!! Requesting Realmlist.\n");
|
||||
rs_state=3; // requesting realmlist
|
||||
// Request Realmlist
|
||||
char realmrequest[]={0x10,0,0,0,0}; // 0x10 is opcode, rest is an uint32, nulled
|
||||
realmCon.Send(realmrequest,5);
|
||||
}
|
||||
else {
|
||||
printf("Unknown ErrorID recieved, check the packet hexdump.\n");
|
||||
printf("-> IDs=");printchex(pkt,2,true);
|
||||
something_went_wrong=true;
|
||||
realmCon.Close();
|
||||
}
|
||||
}break;
|
||||
|
||||
case 3:{
|
||||
if(pkt[0]!=0x10){
|
||||
printf("Expected a realmlist packet, got something different. opcode=0x%x\n",(unsigned char)pkt[0]);
|
||||
something_went_wrong=true;
|
||||
realmCon.Close();
|
||||
}
|
||||
ByteBuffer bbuf;
|
||||
bbuf.append(pkt,size);
|
||||
if(HandleRealmList(bbuf)==true){
|
||||
printf("Connecting to realm \"%s\" at \"%s\", port %d\n",realmname,worldhost.c_str(),ws_port);
|
||||
while(!worldCon.IsConnected()){
|
||||
worldCon.ConnectTo((char*)worldhost.c_str(),ws_port); // init world server connection, we have all info we need to enter
|
||||
}
|
||||
realmCon.Close(); // close the realm server connection, its no longer needed now
|
||||
}
|
||||
}break;
|
||||
// more?
|
||||
default:{
|
||||
//...
|
||||
}
|
||||
}
|
||||
}
|
||||
*/
|
||||
|
||||
|
||||
|
||||
void RealmSocket::SendLogonChallenge(void)
|
||||
{
|
||||
if(!this->Ready())
|
||||
{
|
||||
printf("Error sending AUTH_LOGON_CHALLENGE, port is not ready!\n");
|
||||
log("Error sending AUTH_LOGON_CHALLENGE, port is not ready!\n");
|
||||
return;
|
||||
}
|
||||
std::string acc = stringToUpper(GetInstance()->GetConf()->accname);
|
||||
@ -322,8 +238,6 @@ void RealmSocket::SendLogonChallenge(void)
|
||||
packet << (uint8)acc.length(); // length of acc name without \0
|
||||
packet.append(acc.c_str(),acc.length()); // append accname, skip \0
|
||||
|
||||
packet.hexlike();
|
||||
|
||||
SendBuf((char*)packet.contents(),packet.size());
|
||||
|
||||
}
|
||||
@ -335,21 +249,21 @@ PseuInstance *RealmSocket::GetInstance(void)
|
||||
|
||||
void RealmSocket::_HandleLogonChallenge(void)
|
||||
{
|
||||
printf("RealmSocket: Got AUTH_LOGON_CHALLENGE [%u of %u bytes]\n",ibuf.GetLength(),sizeof(sAuthLogonChallenge_S));
|
||||
logdebug("RealmSocket: Got AUTH_LOGON_CHALLENGE [%u of %u bytes]",ibuf.GetLength(),sizeof(sAuthLogonChallenge_S));
|
||||
sAuthLogonChallenge_S lc;
|
||||
ibuf.Read((char*)&lc, sizeof(sAuthLogonChallenge_S));
|
||||
|
||||
switch (lc.error)
|
||||
{
|
||||
case 4:
|
||||
printf("Realm Server did not find account \"%s\"!\n",GetInstance()->GetConf()->accname.c_str());
|
||||
log("Realm Server did not find account \"%s\"!",GetInstance()->GetConf()->accname.c_str());
|
||||
break;
|
||||
case 6:
|
||||
printf("Account \"%s\" is already logged in!\n",GetInstance()->GetConf()->accname.c_str());
|
||||
log("Account \"%s\" is already logged in!",GetInstance()->GetConf()->accname.c_str());
|
||||
break;
|
||||
case 0:
|
||||
{
|
||||
printf("Login successful, now calculating proof packet...\n");
|
||||
logdetail("Login successful, now calculating proof packet...");
|
||||
|
||||
// now lets start calculating
|
||||
BigNumber N,A,B,a,u,x,v,S,salt,unk1,g,k(3); // init BNs, default k to 3
|
||||
@ -362,17 +276,6 @@ void RealmSocket::_HandleLogonChallenge(void)
|
||||
salt.SetBinary(lc.salt,32);
|
||||
unk1.SetBinary(lc.unk3,16);
|
||||
|
||||
/*
|
||||
// debug output
|
||||
//DEBUG3(printchex(B_str,BNLEN,true);)
|
||||
//DEBUG3(printchex(g_str,1,true);)
|
||||
//DEBUG3(printchex(N_str,BNLEN,true);)
|
||||
//DEBUG3(printchex(salt_str,BNLEN,true);)
|
||||
//DEBUG3(printchex(unk1_str,16,true);)
|
||||
*/
|
||||
|
||||
// client-side BN calculations:
|
||||
////DEBUG3(printf("--> k=%s\n",k.AsHexStr());)
|
||||
a.SetRand(19*8);
|
||||
Sha1Hash userhash,xhash,uhash;
|
||||
userhash.UpdateData(_authstr);
|
||||
@ -381,23 +284,23 @@ void RealmSocket::_HandleLogonChallenge(void)
|
||||
xhash.UpdateData(userhash.GetDigest(),userhash.GetLength());
|
||||
xhash.Finalize();
|
||||
x.SetBinary(xhash.GetDigest(),xhash.GetLength());
|
||||
////DEBUG3(printf("--> x=%s\n",x.AsHexStr());)
|
||||
logdebug("--> x=%s",x.AsHexStr());
|
||||
v=g.ModExp(x,N);
|
||||
////DEBUG3(printf("--> v=%s\n",v.AsHexStr());)
|
||||
logdebug("--> v=%s",v.AsHexStr());
|
||||
A=g.ModExp(a,N);
|
||||
////DEBUG3(printf("--> A=%s\n",A.AsHexStr());)
|
||||
logdebug("--> A=%s",A.AsHexStr());
|
||||
uhash.UpdateBigNumbers(&A, &B, NULL);
|
||||
uhash.Finalize();
|
||||
u.SetBinary(uhash.GetDigest(), 20);
|
||||
////DEBUG3(printf("--> u=%s\n",u.AsHexStr());)
|
||||
logdebug("--> u=%s",u.AsHexStr());
|
||||
S=(B - k*g.ModExp(x,N) ).ModExp((a + u * x),N);
|
||||
////DEBUG3(printf("--> S=%s\n",S.AsHexStr());)
|
||||
logdebug("--> S=%s",S.AsHexStr());
|
||||
|
||||
// calc M1 & M2
|
||||
unsigned int i=0;
|
||||
char S1[16+1],S2[16+1]; // 32/2=16 :) +1 for \0
|
||||
// split it into 2 seperate strings, interleaved
|
||||
for(i=0;i<=15;i++){
|
||||
for(i=0;i<16;i++){
|
||||
S1[i]=S.AsByteArray()[i*2];
|
||||
S2[i]=S.AsByteArray()[i*2+1];
|
||||
}
|
||||
@ -445,10 +348,8 @@ void RealmSocket::_HandleLogonChallenge(void)
|
||||
M2hash.Finalize();
|
||||
|
||||
|
||||
////DEBUG3(
|
||||
printf("--> M1=");printchex((char*)M1hash.GetDigest(),20,true);
|
||||
printf("--> M2=");printchex((char*)M2hash.GetDigest(),20,true);
|
||||
//)
|
||||
//logdebug("--> M1=");printchex((char*)M1hash.GetDigest(),20,true);
|
||||
//logdebug("--> M2=");printchex((char*)M2hash.GetDigest(),20,true);
|
||||
|
||||
// Calc CRC & CRC_hash
|
||||
// i don't know yet how to calc it, so set it to zero
|
||||
@ -475,7 +376,7 @@ void RealmSocket::_HandleLogonChallenge(void)
|
||||
break;
|
||||
|
||||
default:
|
||||
printf("Unknown realm server response! opcode=0x%x\n",(unsigned char)lc.error);
|
||||
log("Unknown realm server response! opcode=0x%x\n",(unsigned char)lc.error);
|
||||
break;
|
||||
}
|
||||
}
|
||||
@ -483,10 +384,10 @@ void RealmSocket::_HandleLogonChallenge(void)
|
||||
|
||||
void RealmSocket::_HandleLogonProof(void)
|
||||
{
|
||||
printf("RealmSocket: Got AUTH_LOGON_PROOF [%u of %u bytes]\n",ibuf.GetLength(),26);
|
||||
logdetail("RealmSocket: Got AUTH_LOGON_PROOF [%u of %u bytes]\n",ibuf.GetLength(),26);
|
||||
sAuthLogonProof_S lp;
|
||||
ibuf.Read((char*)&lp, 26); // the compiler didnt like 'sizeof(sAuthLogonProof_S)', said it was 28
|
||||
printchex((char*)&lp, sizeof(sAuthLogonProof_S),true);
|
||||
//printchex((char*)&lp, sizeof(sAuthLogonProof_S),true);
|
||||
if(!memcmp(lp.M2,this->_m2,20))
|
||||
{
|
||||
// auth successful
|
||||
@ -497,7 +398,7 @@ void RealmSocket::_HandleLogonProof(void)
|
||||
}
|
||||
else
|
||||
{
|
||||
printf("Auth failed, M2 differs!\n");
|
||||
log("Auth failed, M2 differs!");
|
||||
printf("My M2 :"); printchex((char*)_m2,20,true);
|
||||
printf("Srv M2:"); printchex((char*)lp.M2,20,true);
|
||||
|
||||
@ -506,12 +407,12 @@ void RealmSocket::_HandleLogonProof(void)
|
||||
|
||||
void RealmSocket::OnConnect()
|
||||
{
|
||||
printf("DEBUG: RealmSocket connected!\n");
|
||||
logdetail("RealmSocket connected!");
|
||||
SendLogonChallenge();
|
||||
}
|
||||
|
||||
void RealmSocket::OnConnectFailed(void)
|
||||
{
|
||||
printf("RealmSocket::OnConnectFailed()\n");
|
||||
log("Connecting to Realm failed!");
|
||||
}
|
||||
|
||||
|
||||
@ -17,7 +17,6 @@ void WorldSession::SendChatMessage(uint32 type, uint32 lang, std::string msg, st
|
||||
case CHAT_MSG_GUILD:
|
||||
case CHAT_MSG_OFFICER: // not sure about that
|
||||
packet<<msg;
|
||||
//DEBUG2(printf("W:CHAT->: \"%s\"\n",msg.c_str()););
|
||||
break;
|
||||
case CHAT_MSG_WHISPER:
|
||||
if(to.empty())
|
||||
@ -51,7 +50,7 @@ void WorldSession::SendPing(uint32 ping){
|
||||
packet << ping;
|
||||
packet.SetOpcode(CMSG_PING);
|
||||
SendWorldPacket(packet);
|
||||
//DEBUG2(printf("Sent CMSG_PING, clock=%u\n",ping););
|
||||
logdebug("Sent CMSG_PING, clock=%u",ping);
|
||||
}
|
||||
|
||||
void WorldSession::SendEmote(uint32 id){
|
||||
|
||||
@ -38,13 +38,13 @@ uint64 PlayerNameCache::GetGuid(std::string name){
|
||||
}
|
||||
|
||||
bool PlayerNameCache::SaveToFile(void){
|
||||
printf("Saving PlayerNameCache...\n");
|
||||
log("Saving PlayerNameCache...");
|
||||
char *fn="./cache/playernames.cache";
|
||||
std::fstream fh;
|
||||
fh.open(fn, std::ios_base::out | std::ios_base::binary);
|
||||
if(!fh)
|
||||
{
|
||||
printf("ERROR: could not write to file '%s'!\n",fn);
|
||||
log("ERROR: could not write to file '%s'!",fn);
|
||||
return false;
|
||||
}
|
||||
uint32 size=_cache.size();
|
||||
@ -59,22 +59,22 @@ bool PlayerNameCache::SaveToFile(void){
|
||||
len=(*i)->_name.length();
|
||||
fh.write( (char*)&len,sizeof(uint8) );
|
||||
fh.write( (char*)(*i)->_name.c_str(),len );
|
||||
DEBUG(printf( "PlayerNameCache << " I64FMT " -> %s\n", (*i)->_guid, (*i)->_name.c_str()););
|
||||
DEBUG(log( "PlayerNameCache << " I64FMT " -> %s", (*i)->_guid, (*i)->_name.c_str()););
|
||||
}
|
||||
fh.close();
|
||||
printf("PlayerNameCache saved successfully.\n");
|
||||
log("PlayerNameCache saved successfully.");
|
||||
return true;
|
||||
}
|
||||
|
||||
bool PlayerNameCache::ReadFromFile(void){
|
||||
char *fn="./cache/playernames.cache";
|
||||
printf("Loading PlayerNameCache...\n");
|
||||
log("Loading PlayerNameCache...");
|
||||
bool success=true;
|
||||
std::fstream fh;
|
||||
fh.open(fn, std::ios_base::in | std::ios_base::binary);
|
||||
if(!fh)
|
||||
{
|
||||
printf("ERROR: could not open file '%s'!\n",fn);
|
||||
log("ERROR: could not open file '%s'!",fn);
|
||||
return false;
|
||||
}
|
||||
uint32 size;
|
||||
@ -90,8 +90,8 @@ bool PlayerNameCache::ReadFromFile(void){
|
||||
fh.read((char*)&(cacheItem->_guid),sizeof(uint64));
|
||||
fh.read((char*)&len,sizeof(uint8));
|
||||
if(len>12 || len<2){
|
||||
printf("\nERROR: PlayerNameCache data seem corrupt [namelength=%d, should be <=12}]\n",len);
|
||||
printf("-> Clearing cache, creating new.\n");
|
||||
log("\nERROR: PlayerNameCache data seem corrupt [namelength=%d, should be <=12}]",len);
|
||||
log("-> Clearing cache, creating new.\n");
|
||||
_cache.clear();
|
||||
success=false;
|
||||
break;
|
||||
@ -106,7 +106,7 @@ bool PlayerNameCache::ReadFromFile(void){
|
||||
delete nameptr;
|
||||
fh.close();
|
||||
if(success)
|
||||
printf("PlayerNameCache successfully loaded.\n");
|
||||
log("PlayerNameCache successfully loaded.");
|
||||
return success;
|
||||
}
|
||||
|
||||
|
||||
@ -41,7 +41,7 @@ WorldSession::~WorldSession()
|
||||
|
||||
void WorldSession::Start(void)
|
||||
{
|
||||
printf("Connecting to '%s' on port %u\n",GetInstance()->GetConf()->worldhost.c_str(),GetInstance()->GetConf()->worldport);
|
||||
log("Connecting to '%s' on port %u",GetInstance()->GetConf()->worldhost.c_str(),GetInstance()->GetConf()->worldport);
|
||||
_socket->Open(GetInstance()->GetConf()->worldhost,GetInstance()->GetConf()->worldport);
|
||||
GetInstance()->GetRSession()->SetCloseAndDelete(); // realm socket is no longer needed
|
||||
_valid=true;
|
||||
@ -108,7 +108,7 @@ void WorldSession::Update(void)
|
||||
|| ((!known) && GetInstance()->GetConf()->showopcodes==2)
|
||||
|| (GetInstance()->GetConf()->showopcodes==3) )
|
||||
{
|
||||
printf(">> Opcode %u [%s]\n",packet->GetOpcode(),LookupName(packet->GetOpcode(),g_worldOpcodeNames));
|
||||
log(">> Opcode %u [%s]",packet->GetOpcode(),LookupName(packet->GetOpcode(),g_worldOpcodeNames));
|
||||
}
|
||||
|
||||
|
||||
@ -214,7 +214,7 @@ void WorldSession::_HandleAuthChallengeOpcode(WorldPacket& recvPacket)
|
||||
std::string acc = stringToUpper(GetInstance()->GetConf()->accname);
|
||||
uint32 serverseed;
|
||||
recvPacket >> serverseed;
|
||||
printf("W:auth: serverseed=0x%X\n",serverseed);
|
||||
logdebug("Auth: serverseed=0x%X",serverseed);
|
||||
Sha1Hash digest;
|
||||
digest.UpdateData(acc);
|
||||
uint32 unk=0;
|
||||
@ -235,10 +235,6 @@ void WorldSession::_HandleAuthChallengeOpcode(WorldPacket& recvPacket)
|
||||
auth<<(uint32)0; // no addons? no idea, but seems to work. MaNGOS doesnt accept without this.
|
||||
auth.SetOpcode(CMSG_AUTH_SESSION);
|
||||
|
||||
//DEBUG3(
|
||||
// printf("CMSG_AUTH_SESSION=");
|
||||
// printchex((char*)outpkt.contents(),outpkt.size(),true);
|
||||
//)
|
||||
SendWorldPacket(auth);
|
||||
|
||||
// note that if the sessionkey/auth is wrong or failed, the server sends the following packet UNENCRYPTED!
|
||||
@ -254,12 +250,12 @@ void WorldSession::_HandleAuthResponseOpcode(WorldPacket& recvPacket)
|
||||
uint8 errcode;
|
||||
recvPacket >> errcode;
|
||||
if(errcode==0xC){
|
||||
//DEBUG1(printf("World Authentication successful, preparing for char list request...\n"););
|
||||
logdetail("World Authentication successful, preparing for char list request...");
|
||||
WorldPacket pkt;
|
||||
pkt.SetOpcode(CMSG_CHAR_ENUM);
|
||||
SendWorldPacket(pkt);
|
||||
} else {
|
||||
printf("World Authentication failed, errcode=0x%X\n",(unsigned char)errcode);
|
||||
log("World Authentication failed, errcode=0x%X",(unsigned char)errcode);
|
||||
}
|
||||
}
|
||||
|
||||
@ -272,11 +268,11 @@ void WorldSession::_HandleCharEnumOpcode(WorldPacket& recvPacket)
|
||||
|
||||
recvPacket >> num;
|
||||
if(num==0){
|
||||
printf("W:No chars found!\n");
|
||||
log("No chars found!\n");
|
||||
GetInstance()->Stop();
|
||||
return;
|
||||
}
|
||||
printf("W: Chars in list: %u\n",num);
|
||||
logdetail("W: Chars in list: %u\n",num);
|
||||
for(unsigned int i=0;i<num;i++){
|
||||
recvPacket >> plr[i]._guid;
|
||||
recvPacket >> plr[i]._name;
|
||||
@ -308,10 +304,10 @@ void WorldSession::_HandleCharEnumOpcode(WorldPacket& recvPacket)
|
||||
}
|
||||
bool char_found=false;
|
||||
for(unsigned int i=0;i<num;i++){
|
||||
printf("## %s (%u) [%s/%s]\n",
|
||||
log("## %s (%u) [%s/%s]",
|
||||
plr[i]._name.c_str(),plr[i]._level,raceName[plr[i]._race],className[plr[i]._class]);
|
||||
//DEBUG1(printf("-> coords: map=%u zone=%u x=%f y=%f z=%f\n",
|
||||
// plr[i]._mapId,plr[i]._zoneId,plr[i]._x,plr[i]._y,plr[i]._z);)
|
||||
logdetail("-> coords: map=%u zone=%u x=%f y=%f z=%f",
|
||||
plr[i]._mapId,plr[i]._zoneId,plr[i]._x,plr[i]._y,plr[i]._z);
|
||||
if(plr[i]._name==GetInstance()->GetConf()->charname){
|
||||
char_found=true;
|
||||
_myGUID=plr[i]._guid;
|
||||
@ -319,11 +315,11 @@ void WorldSession::_HandleCharEnumOpcode(WorldPacket& recvPacket)
|
||||
|
||||
}
|
||||
if(!char_found){
|
||||
printf("W: Character \"%s\" was not found on char list!\n",GetInstance()->GetConf()->charname.c_str());
|
||||
log("Character \"%s\" was not found on char list!",GetInstance()->GetConf()->charname.c_str());
|
||||
GetInstance()->Stop();
|
||||
return;
|
||||
} else {
|
||||
printf("W: Entering World with Character \"%s\"...\n",GetInstance()->GetConf()->charname.c_str());
|
||||
log("Entering World with Character \"%s\"...",GetInstance()->GetConf()->charname.c_str());
|
||||
WorldPacket pkt;
|
||||
pkt.SetOpcode(CMSG_PLAYER_LOGIN);
|
||||
pkt << _myGUID;
|
||||
@ -377,11 +373,11 @@ void WorldSession::_HandleMessageChatOpcode(WorldPacket& recvPacket)
|
||||
|
||||
recvPacket >> msglen >> msg;
|
||||
if (type == CHAT_MSG_SYSTEM){
|
||||
printf("W:SYSMSG: \"%s\"\n",msg.c_str());
|
||||
log("SYSMSG: \"%s\"",msg.c_str());
|
||||
} else if (type==CHAT_MSG_WHISPER ){
|
||||
printf("W:WHISP: %s [%s]: %s\n",plrname.c_str(),LookupName(lang,langNames),msg.c_str());
|
||||
log("W:WHISP: %s [%s]: %s",plrname.c_str(),LookupName(lang,langNames),msg.c_str());
|
||||
} else {
|
||||
printf("W:CHAT: %s [%s]: %s\n",plrname.c_str(),LookupName(lang,langNames),msg.c_str());
|
||||
log("W:CHAT: %s [%s]: %s",plrname.c_str(),LookupName(lang,langNames),msg.c_str());
|
||||
}
|
||||
|
||||
if(target_guid!=_myGUID && msg.length()>1 && msg.at(0)=='-' && GetInstance()->GetConf()->allowgamecmd)
|
||||
@ -439,10 +435,9 @@ void WorldSession::_HandleNameQueryResponseOpcode(WorldPacket& recvPacket)
|
||||
// rest of the packet is not interesting for now
|
||||
if(plrNameCache.AddInfo(pguid,pname))
|
||||
{
|
||||
printf("CACHE: Assigned new player name: '%s'",pname.c_str());
|
||||
logdetail("CACHE: Assigned new player name: '%s' = " I64FMTD ,pname.c_str(),pguid);
|
||||
if(GetInstance()->GetConf()->debug > 1)
|
||||
SendChatMessage(CHAT_MSG_SAY,0,"Player "+pname+" added to cache.","");
|
||||
//DEBUG2(printf(" to guid "I64FMTD,pguid););
|
||||
printf("\n");
|
||||
}
|
||||
}
|
||||
|
||||
@ -450,7 +445,7 @@ void WorldSession::_HandlePongOpcode(WorldPacket& recvPacket)
|
||||
{
|
||||
uint32 pong;
|
||||
recvPacket >> pong;
|
||||
printf("Recieved Ping reply: %u ms latency.\n",clock()-pong);
|
||||
log("Recieved Ping reply: %u ms latency.",clock()-pong);
|
||||
}
|
||||
void WorldSession::_HandleTradeStatusOpcode(WorldPacket& recvPacket)
|
||||
{
|
||||
|
||||
@ -71,6 +71,7 @@ void abortproc(void)
|
||||
int main(int argc, char* argv[]) {
|
||||
try
|
||||
{
|
||||
printf("\n (C) 2006, Snowstorm Software\n\n\n");
|
||||
|
||||
_HookSignals();
|
||||
|
||||
|
||||
@ -159,6 +159,12 @@
|
||||
<File
|
||||
RelativePath=".\Client\DefScriptInterface.cpp">
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\Client\log.cpp">
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\Client\log.h">
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\Client\main.cpp">
|
||||
</File>
|
||||
|
||||
@ -26,6 +26,5 @@
|
||||
#include "DebugStuff.h"
|
||||
#include "tools.h"
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
@ -197,7 +197,7 @@ std::string getDateString(void)
|
||||
{
|
||||
time_t t = time(NULL);
|
||||
tm* aTm = localtime(&t);
|
||||
char str[19];
|
||||
char str[30];
|
||||
// YYYY year
|
||||
// MM month (2 digits 01-12)
|
||||
// DD day (2 digits 01-31)
|
||||
@ -207,3 +207,4 @@ std::string getDateString(void)
|
||||
sprintf(str,"%-4d-%02d-%02d %02d:%02d:%02d ",aTm->tm_year+1900,aTm->tm_mon+1,aTm->tm_mday,aTm->tm_hour,aTm->tm_min,aTm->tm_sec);
|
||||
return std::string(str);
|
||||
}
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user