mirror of
https://github.com/EQEmu/Server.git
synced 2026-03-24 20:02:27 +00:00
Back to ST profiling, wont bother profiling the common library for now.
This commit is contained in:
parent
444b652c4f
commit
2c6eba93ae
@ -62,6 +62,7 @@ SET(common_sources
|
|||||||
timeoutmgr.cpp
|
timeoutmgr.cpp
|
||||||
timer.cpp
|
timer.cpp
|
||||||
unix.cpp
|
unix.cpp
|
||||||
|
uuid.cpp
|
||||||
worldconn.cpp
|
worldconn.cpp
|
||||||
xml_parser.cpp
|
xml_parser.cpp
|
||||||
platform.cpp
|
platform.cpp
|
||||||
@ -181,6 +182,7 @@ SET(common_headers
|
|||||||
types.h
|
types.h
|
||||||
unix.h
|
unix.h
|
||||||
useperl.h
|
useperl.h
|
||||||
|
uuid.h
|
||||||
version.h
|
version.h
|
||||||
worldconn.h
|
worldconn.h
|
||||||
xml_parser.h
|
xml_parser.h
|
||||||
|
|||||||
@ -39,11 +39,9 @@ EQPacket::EQPacket(EmuOpcode op, const unsigned char *buf, uint32 len)
|
|||||||
: BasePacket(buf, len),
|
: BasePacket(buf, len),
|
||||||
emu_opcode(op)
|
emu_opcode(op)
|
||||||
{
|
{
|
||||||
_eqp_mt
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void EQPacket::build_raw_header_dump(char *buffer, uint16 seq) const {
|
void EQPacket::build_raw_header_dump(char *buffer, uint16 seq) const {
|
||||||
_eqp_mt
|
|
||||||
BasePacket::build_raw_header_dump(buffer, seq);
|
BasePacket::build_raw_header_dump(buffer, seq);
|
||||||
buffer += strlen(buffer);
|
buffer += strlen(buffer);
|
||||||
|
|
||||||
@ -52,20 +50,17 @@ void EQPacket::build_raw_header_dump(char *buffer, uint16 seq) const {
|
|||||||
|
|
||||||
void EQPacket::DumpRawHeader(uint16 seq, FILE *to) const
|
void EQPacket::DumpRawHeader(uint16 seq, FILE *to) const
|
||||||
{
|
{
|
||||||
_eqp_mt
|
|
||||||
char buff[196];
|
char buff[196];
|
||||||
build_raw_header_dump(buff, seq);
|
build_raw_header_dump(buff, seq);
|
||||||
fprintf(to, "%s", buff);
|
fprintf(to, "%s", buff);
|
||||||
}
|
}
|
||||||
|
|
||||||
void EQPacket::build_header_dump(char *buffer) const {
|
void EQPacket::build_header_dump(char *buffer) const {
|
||||||
_eqp_mt
|
|
||||||
sprintf(buffer, "[EmuOpCode 0x%04x Size=%u]", emu_opcode, size);
|
sprintf(buffer, "[EmuOpCode 0x%04x Size=%u]", emu_opcode, size);
|
||||||
}
|
}
|
||||||
|
|
||||||
void EQPacket::DumpRawHeaderNoTime(uint16 seq, FILE *to) const
|
void EQPacket::DumpRawHeaderNoTime(uint16 seq, FILE *to) const
|
||||||
{
|
{
|
||||||
_eqp_mt
|
|
||||||
if (src_ip) {
|
if (src_ip) {
|
||||||
std::string sIP,dIP;;
|
std::string sIP,dIP;;
|
||||||
sIP=long2ip(src_ip);
|
sIP=long2ip(src_ip);
|
||||||
@ -80,7 +75,6 @@ void EQPacket::DumpRawHeaderNoTime(uint16 seq, FILE *to) const
|
|||||||
|
|
||||||
void EQProtocolPacket::build_raw_header_dump(char *buffer, uint16 seq) const
|
void EQProtocolPacket::build_raw_header_dump(char *buffer, uint16 seq) const
|
||||||
{
|
{
|
||||||
_eqp_mt
|
|
||||||
BasePacket::build_raw_header_dump(buffer, seq);
|
BasePacket::build_raw_header_dump(buffer, seq);
|
||||||
buffer += strlen(buffer);
|
buffer += strlen(buffer);
|
||||||
|
|
||||||
@ -89,7 +83,6 @@ void EQProtocolPacket::build_raw_header_dump(char *buffer, uint16 seq) const
|
|||||||
|
|
||||||
void EQProtocolPacket::DumpRawHeader(uint16 seq, FILE *to) const
|
void EQProtocolPacket::DumpRawHeader(uint16 seq, FILE *to) const
|
||||||
{
|
{
|
||||||
_eqp_mt
|
|
||||||
char buff[196];
|
char buff[196];
|
||||||
build_raw_header_dump(buff, seq);
|
build_raw_header_dump(buff, seq);
|
||||||
fprintf(to, "%s", buff);
|
fprintf(to, "%s", buff);
|
||||||
@ -97,13 +90,11 @@ void EQProtocolPacket::DumpRawHeader(uint16 seq, FILE *to) const
|
|||||||
|
|
||||||
void EQProtocolPacket::build_header_dump(char *buffer) const
|
void EQProtocolPacket::build_header_dump(char *buffer) const
|
||||||
{
|
{
|
||||||
_eqp_mt
|
|
||||||
sprintf(buffer, "[ProtoOpCode 0x%04x Size=%u]",opcode,size);
|
sprintf(buffer, "[ProtoOpCode 0x%04x Size=%u]",opcode,size);
|
||||||
}
|
}
|
||||||
|
|
||||||
void EQProtocolPacket::DumpRawHeaderNoTime(uint16 seq, FILE *to) const
|
void EQProtocolPacket::DumpRawHeaderNoTime(uint16 seq, FILE *to) const
|
||||||
{
|
{
|
||||||
_eqp_mt
|
|
||||||
if (src_ip) {
|
if (src_ip) {
|
||||||
std::string sIP,dIP;;
|
std::string sIP,dIP;;
|
||||||
sIP=long2ip(src_ip);
|
sIP=long2ip(src_ip);
|
||||||
@ -118,7 +109,6 @@ void EQProtocolPacket::DumpRawHeaderNoTime(uint16 seq, FILE *to) const
|
|||||||
|
|
||||||
void EQApplicationPacket::build_raw_header_dump(char *buffer, uint16 seq) const
|
void EQApplicationPacket::build_raw_header_dump(char *buffer, uint16 seq) const
|
||||||
{
|
{
|
||||||
_eqp_mt
|
|
||||||
BasePacket::build_raw_header_dump(buffer, seq);
|
BasePacket::build_raw_header_dump(buffer, seq);
|
||||||
buffer += strlen(buffer);
|
buffer += strlen(buffer);
|
||||||
|
|
||||||
@ -131,7 +121,6 @@ void EQApplicationPacket::build_raw_header_dump(char *buffer, uint16 seq) const
|
|||||||
|
|
||||||
void EQApplicationPacket::DumpRawHeader(uint16 seq, FILE *to) const
|
void EQApplicationPacket::DumpRawHeader(uint16 seq, FILE *to) const
|
||||||
{
|
{
|
||||||
_eqp_mt
|
|
||||||
char buff[196];
|
char buff[196];
|
||||||
build_raw_header_dump(buff, seq);
|
build_raw_header_dump(buff, seq);
|
||||||
fprintf(to, "%s", buff);
|
fprintf(to, "%s", buff);
|
||||||
@ -139,7 +128,6 @@ void EQApplicationPacket::DumpRawHeader(uint16 seq, FILE *to) const
|
|||||||
|
|
||||||
void EQApplicationPacket::build_header_dump(char *buffer) const
|
void EQApplicationPacket::build_header_dump(char *buffer) const
|
||||||
{
|
{
|
||||||
_eqp_mt
|
|
||||||
#ifdef STATIC_OPCODE
|
#ifdef STATIC_OPCODE
|
||||||
sprintf(buffer, "[OpCode 0x%04x Size=%u]\n", emu_opcode,size);
|
sprintf(buffer, "[OpCode 0x%04x Size=%u]\n", emu_opcode,size);
|
||||||
#else
|
#else
|
||||||
@ -149,7 +137,6 @@ void EQApplicationPacket::build_header_dump(char *buffer) const
|
|||||||
|
|
||||||
void EQApplicationPacket::DumpRawHeaderNoTime(uint16 seq, FILE *to) const
|
void EQApplicationPacket::DumpRawHeaderNoTime(uint16 seq, FILE *to) const
|
||||||
{
|
{
|
||||||
_eqp_mt
|
|
||||||
if (src_ip) {
|
if (src_ip) {
|
||||||
std::string sIP,dIP;;
|
std::string sIP,dIP;;
|
||||||
sIP=long2ip(src_ip);
|
sIP=long2ip(src_ip);
|
||||||
@ -168,7 +155,6 @@ void EQApplicationPacket::DumpRawHeaderNoTime(uint16 seq, FILE *to) const
|
|||||||
|
|
||||||
void EQRawApplicationPacket::build_raw_header_dump(char *buffer, uint16 seq) const
|
void EQRawApplicationPacket::build_raw_header_dump(char *buffer, uint16 seq) const
|
||||||
{
|
{
|
||||||
_eqp_mt
|
|
||||||
BasePacket::build_raw_header_dump(buffer, seq);
|
BasePacket::build_raw_header_dump(buffer, seq);
|
||||||
buffer += strlen(buffer);
|
buffer += strlen(buffer);
|
||||||
|
|
||||||
@ -181,7 +167,6 @@ void EQRawApplicationPacket::build_raw_header_dump(char *buffer, uint16 seq) con
|
|||||||
|
|
||||||
void EQRawApplicationPacket::DumpRawHeader(uint16 seq, FILE *to) const
|
void EQRawApplicationPacket::DumpRawHeader(uint16 seq, FILE *to) const
|
||||||
{
|
{
|
||||||
_eqp_mt
|
|
||||||
char buff[196];
|
char buff[196];
|
||||||
build_raw_header_dump(buff, seq);
|
build_raw_header_dump(buff, seq);
|
||||||
fprintf(to, "%s", buff);
|
fprintf(to, "%s", buff);
|
||||||
@ -189,7 +174,6 @@ void EQRawApplicationPacket::DumpRawHeader(uint16 seq, FILE *to) const
|
|||||||
|
|
||||||
void EQRawApplicationPacket::build_header_dump(char *buffer) const
|
void EQRawApplicationPacket::build_header_dump(char *buffer) const
|
||||||
{
|
{
|
||||||
_eqp_mt
|
|
||||||
#ifdef STATIC_OPCODE
|
#ifdef STATIC_OPCODE
|
||||||
sprintf(buffer, "[OpCode 0x%04x (0x%04x) Size=%u]\n", emu_opcode, opcode,size);
|
sprintf(buffer, "[OpCode 0x%04x (0x%04x) Size=%u]\n", emu_opcode, opcode,size);
|
||||||
#else
|
#else
|
||||||
@ -199,7 +183,6 @@ void EQRawApplicationPacket::build_header_dump(char *buffer) const
|
|||||||
|
|
||||||
void EQRawApplicationPacket::DumpRawHeaderNoTime(uint16 seq, FILE *to) const
|
void EQRawApplicationPacket::DumpRawHeaderNoTime(uint16 seq, FILE *to) const
|
||||||
{
|
{
|
||||||
_eqp_mt
|
|
||||||
if (src_ip) {
|
if (src_ip) {
|
||||||
std::string sIP,dIP;;
|
std::string sIP,dIP;;
|
||||||
sIP=long2ip(src_ip);
|
sIP=long2ip(src_ip);
|
||||||
@ -218,7 +201,6 @@ void EQRawApplicationPacket::DumpRawHeaderNoTime(uint16 seq, FILE *to) const
|
|||||||
|
|
||||||
uint32 EQProtocolPacket::serialize(unsigned char *dest) const
|
uint32 EQProtocolPacket::serialize(unsigned char *dest) const
|
||||||
{
|
{
|
||||||
_eqp_mt
|
|
||||||
if (opcode>0xff) {
|
if (opcode>0xff) {
|
||||||
*(uint16 *)dest=opcode;
|
*(uint16 *)dest=opcode;
|
||||||
} else {
|
} else {
|
||||||
@ -232,7 +214,6 @@ uint32 EQProtocolPacket::serialize(unsigned char *dest) const
|
|||||||
|
|
||||||
uint32 EQApplicationPacket::serialize(uint16 opcode, unsigned char *dest) const
|
uint32 EQApplicationPacket::serialize(uint16 opcode, unsigned char *dest) const
|
||||||
{
|
{
|
||||||
_eqp_mt
|
|
||||||
uint8 OpCodeBytes = app_opcode_size;
|
uint8 OpCodeBytes = app_opcode_size;
|
||||||
|
|
||||||
if (app_opcode_size==1)
|
if (app_opcode_size==1)
|
||||||
@ -256,7 +237,6 @@ uint32 EQApplicationPacket::serialize(uint16 opcode, unsigned char *dest) const
|
|||||||
|
|
||||||
bool EQProtocolPacket::combine(const EQProtocolPacket *rhs)
|
bool EQProtocolPacket::combine(const EQProtocolPacket *rhs)
|
||||||
{
|
{
|
||||||
_eqp_mt
|
|
||||||
bool result=false;
|
bool result=false;
|
||||||
if (opcode==OP_Combined && size+rhs->size+5<256) {
|
if (opcode==OP_Combined && size+rhs->size+5<256) {
|
||||||
unsigned char *tmpbuffer=new unsigned char [size+rhs->size+3];
|
unsigned char *tmpbuffer=new unsigned char [size+rhs->size+3];
|
||||||
@ -288,7 +268,6 @@ bool EQProtocolPacket::combine(const EQProtocolPacket *rhs)
|
|||||||
|
|
||||||
bool EQProtocolPacket::ValidateCRC(const unsigned char *buffer, int length, uint32 Key)
|
bool EQProtocolPacket::ValidateCRC(const unsigned char *buffer, int length, uint32 Key)
|
||||||
{
|
{
|
||||||
_eqp_mt
|
|
||||||
bool valid=false;
|
bool valid=false;
|
||||||
// OP_SessionRequest, OP_SessionResponse, OP_OutOfSession are not CRC'd
|
// OP_SessionRequest, OP_SessionResponse, OP_OutOfSession are not CRC'd
|
||||||
if (buffer[0]==0x00 && (buffer[1]==OP_SessionRequest || buffer[1]==OP_SessionResponse || buffer[1]==OP_OutOfSession)) {
|
if (buffer[0]==0x00 && (buffer[1]==OP_SessionRequest || buffer[1]==OP_SessionResponse || buffer[1]==OP_OutOfSession)) {
|
||||||
@ -308,7 +287,6 @@ bool EQProtocolPacket::ValidateCRC(const unsigned char *buffer, int length, uint
|
|||||||
|
|
||||||
uint32 EQProtocolPacket::Decompress(const unsigned char *buffer, const uint32 length, unsigned char *newbuf, uint32 newbufsize)
|
uint32 EQProtocolPacket::Decompress(const unsigned char *buffer, const uint32 length, unsigned char *newbuf, uint32 newbufsize)
|
||||||
{
|
{
|
||||||
_eqp_mt
|
|
||||||
uint32 newlen=0;
|
uint32 newlen=0;
|
||||||
uint32 flag_offset=0;
|
uint32 flag_offset=0;
|
||||||
newbuf[0]=buffer[0];
|
newbuf[0]=buffer[0];
|
||||||
@ -334,7 +312,6 @@ uint32 EQProtocolPacket::Decompress(const unsigned char *buffer, const uint32 le
|
|||||||
}
|
}
|
||||||
|
|
||||||
uint32 EQProtocolPacket::Compress(const unsigned char *buffer, const uint32 length, unsigned char *newbuf, uint32 newbufsize) {
|
uint32 EQProtocolPacket::Compress(const unsigned char *buffer, const uint32 length, unsigned char *newbuf, uint32 newbufsize) {
|
||||||
_eqp_mt
|
|
||||||
uint32 flag_offset=1,newlength;
|
uint32 flag_offset=1,newlength;
|
||||||
//dump_message_column(buffer,length,"Before: ");
|
//dump_message_column(buffer,length,"Before: ");
|
||||||
newbuf[0]=buffer[0];
|
newbuf[0]=buffer[0];
|
||||||
@ -358,7 +335,6 @@ uint32 EQProtocolPacket::Compress(const unsigned char *buffer, const uint32 leng
|
|||||||
|
|
||||||
void EQProtocolPacket::ChatDecode(unsigned char *buffer, int size, int DecodeKey)
|
void EQProtocolPacket::ChatDecode(unsigned char *buffer, int size, int DecodeKey)
|
||||||
{
|
{
|
||||||
_eqp_mt
|
|
||||||
if ((size >= 2) && buffer[1]!=0x01 && buffer[0]!=0x02 && buffer[0]!=0x1d) {
|
if ((size >= 2) && buffer[1]!=0x01 && buffer[0]!=0x02 && buffer[0]!=0x1d) {
|
||||||
int Key=DecodeKey;
|
int Key=DecodeKey;
|
||||||
unsigned char *test=(unsigned char *)malloc(size);
|
unsigned char *test=(unsigned char *)malloc(size);
|
||||||
@ -384,7 +360,6 @@ void EQProtocolPacket::ChatDecode(unsigned char *buffer, int size, int DecodeKey
|
|||||||
|
|
||||||
void EQProtocolPacket::ChatEncode(unsigned char *buffer, int size, int EncodeKey)
|
void EQProtocolPacket::ChatEncode(unsigned char *buffer, int size, int EncodeKey)
|
||||||
{
|
{
|
||||||
_eqp_mt
|
|
||||||
if (buffer[1]!=0x01 && buffer[0]!=0x02 && buffer[0]!=0x1d) {
|
if (buffer[1]!=0x01 && buffer[0]!=0x02 && buffer[0]!=0x1d) {
|
||||||
int Key=EncodeKey;
|
int Key=EncodeKey;
|
||||||
char *test=(char*)malloc(size);
|
char *test=(char*)malloc(size);
|
||||||
@ -408,12 +383,10 @@ void EQProtocolPacket::ChatEncode(unsigned char *buffer, int size, int EncodeKey
|
|||||||
}
|
}
|
||||||
|
|
||||||
EQApplicationPacket *EQApplicationPacket::Copy() const {
|
EQApplicationPacket *EQApplicationPacket::Copy() const {
|
||||||
_eqp_mt
|
|
||||||
return(new EQApplicationPacket(*this));
|
return(new EQApplicationPacket(*this));
|
||||||
}
|
}
|
||||||
|
|
||||||
EQRawApplicationPacket *EQProtocolPacket::MakeAppPacket() const {
|
EQRawApplicationPacket *EQProtocolPacket::MakeAppPacket() const {
|
||||||
_eqp_mt
|
|
||||||
EQRawApplicationPacket *res = new EQRawApplicationPacket(opcode, pBuffer, size);
|
EQRawApplicationPacket *res = new EQRawApplicationPacket(opcode, pBuffer, size);
|
||||||
res->copyInfo(this);
|
res->copyInfo(this);
|
||||||
return(res);
|
return(res);
|
||||||
@ -423,12 +396,10 @@ EQRawApplicationPacket::EQRawApplicationPacket(uint16 opcode, const unsigned cha
|
|||||||
: EQApplicationPacket(OP_Unknown, buf, len),
|
: EQApplicationPacket(OP_Unknown, buf, len),
|
||||||
opcode(opcode)
|
opcode(opcode)
|
||||||
{
|
{
|
||||||
_eqp_mt
|
|
||||||
}
|
}
|
||||||
EQRawApplicationPacket::EQRawApplicationPacket(const unsigned char *buf, const uint32 len)
|
EQRawApplicationPacket::EQRawApplicationPacket(const unsigned char *buf, const uint32 len)
|
||||||
: EQApplicationPacket(OP_Unknown, buf+sizeof(uint16), len-sizeof(uint16))
|
: EQApplicationPacket(OP_Unknown, buf+sizeof(uint16), len-sizeof(uint16))
|
||||||
{
|
{
|
||||||
_eqp_mt
|
|
||||||
if(GetExecutablePlatform() != ExePlatformUCS) {
|
if(GetExecutablePlatform() != ExePlatformUCS) {
|
||||||
opcode = *((const uint16 *) buf);
|
opcode = *((const uint16 *) buf);
|
||||||
if(opcode == 0x0000)
|
if(opcode == 0x0000)
|
||||||
@ -462,7 +433,6 @@ EQRawApplicationPacket::EQRawApplicationPacket(const unsigned char *buf, const u
|
|||||||
}
|
}
|
||||||
|
|
||||||
void DumpPacket(const EQApplicationPacket* app, bool iShowInfo) {
|
void DumpPacket(const EQApplicationPacket* app, bool iShowInfo) {
|
||||||
_eqp_mt
|
|
||||||
if (iShowInfo) {
|
if (iShowInfo) {
|
||||||
std::cout << "Dumping Applayer: 0x" << std::hex << std::setfill('0') << std::setw(4) << app->GetOpcode() << std::dec;
|
std::cout << "Dumping Applayer: 0x" << std::hex << std::setfill('0') << std::setw(4) << app->GetOpcode() << std::dec;
|
||||||
std::cout << " size:" << app->size << std::endl;
|
std::cout << " size:" << app->size << std::endl;
|
||||||
|
|||||||
@ -49,7 +49,6 @@
|
|||||||
uint16 EQStream::MaxWindowSize=2048;
|
uint16 EQStream::MaxWindowSize=2048;
|
||||||
|
|
||||||
void EQStream::init(bool resetSession) {
|
void EQStream::init(bool resetSession) {
|
||||||
_eqp_mt
|
|
||||||
// we only reset these statistics if it is a 'new' connection
|
// we only reset these statistics if it is a 'new' connection
|
||||||
if ( resetSession )
|
if ( resetSession )
|
||||||
{
|
{
|
||||||
@ -92,7 +91,6 @@ void EQStream::init(bool resetSession) {
|
|||||||
|
|
||||||
EQRawApplicationPacket *EQStream::MakeApplicationPacket(EQProtocolPacket *p)
|
EQRawApplicationPacket *EQStream::MakeApplicationPacket(EQProtocolPacket *p)
|
||||||
{
|
{
|
||||||
_eqp_mt
|
|
||||||
EQRawApplicationPacket *ap=nullptr;
|
EQRawApplicationPacket *ap=nullptr;
|
||||||
Log.Out(Logs::Detail, Logs::Netcode, _L "Creating new application packet, length %d" __L, p->size);
|
Log.Out(Logs::Detail, Logs::Netcode, _L "Creating new application packet, length %d" __L, p->size);
|
||||||
// _raw(NET__APP_CREATE_HEX, 0xFFFF, p);
|
// _raw(NET__APP_CREATE_HEX, 0xFFFF, p);
|
||||||
@ -102,7 +100,6 @@ EQRawApplicationPacket *EQStream::MakeApplicationPacket(EQProtocolPacket *p)
|
|||||||
|
|
||||||
EQRawApplicationPacket *EQStream::MakeApplicationPacket(const unsigned char *buf, uint32 len)
|
EQRawApplicationPacket *EQStream::MakeApplicationPacket(const unsigned char *buf, uint32 len)
|
||||||
{
|
{
|
||||||
_eqp_mt
|
|
||||||
EQRawApplicationPacket *ap=nullptr;
|
EQRawApplicationPacket *ap=nullptr;
|
||||||
Log.Out(Logs::Detail, Logs::Netcode, _L "Creating new application packet, length %d" __L, len);
|
Log.Out(Logs::Detail, Logs::Netcode, _L "Creating new application packet, length %d" __L, len);
|
||||||
ap = new EQRawApplicationPacket(buf, len);
|
ap = new EQRawApplicationPacket(buf, len);
|
||||||
@ -110,7 +107,6 @@ EQRawApplicationPacket *EQStream::MakeApplicationPacket(const unsigned char *buf
|
|||||||
}
|
}
|
||||||
|
|
||||||
EQProtocolPacket *EQStream::MakeProtocolPacket(const unsigned char *buf, uint32 len) {
|
EQProtocolPacket *EQStream::MakeProtocolPacket(const unsigned char *buf, uint32 len) {
|
||||||
_eqp_mt
|
|
||||||
uint16 proto_opcode = ntohs(*(const uint16 *)buf);
|
uint16 proto_opcode = ntohs(*(const uint16 *)buf);
|
||||||
|
|
||||||
//advance over opcode.
|
//advance over opcode.
|
||||||
@ -122,7 +118,6 @@ EQProtocolPacket *EQStream::MakeProtocolPacket(const unsigned char *buf, uint32
|
|||||||
|
|
||||||
void EQStream::ProcessPacket(EQProtocolPacket *p)
|
void EQStream::ProcessPacket(EQProtocolPacket *p)
|
||||||
{
|
{
|
||||||
_eqp_mt
|
|
||||||
uint32 processed=0, subpacket_length=0;
|
uint32 processed=0, subpacket_length=0;
|
||||||
if (p == nullptr)
|
if (p == nullptr)
|
||||||
return;
|
return;
|
||||||
@ -520,7 +515,6 @@ void EQStream::ProcessPacket(EQProtocolPacket *p)
|
|||||||
|
|
||||||
void EQStream::QueuePacket(const EQApplicationPacket *p, bool ack_req)
|
void EQStream::QueuePacket(const EQApplicationPacket *p, bool ack_req)
|
||||||
{
|
{
|
||||||
_eqp_mt
|
|
||||||
if(p == nullptr)
|
if(p == nullptr)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
@ -532,7 +526,6 @@ void EQStream::QueuePacket(const EQApplicationPacket *p, bool ack_req)
|
|||||||
|
|
||||||
void EQStream::FastQueuePacket(EQApplicationPacket **p, bool ack_req)
|
void EQStream::FastQueuePacket(EQApplicationPacket **p, bool ack_req)
|
||||||
{
|
{
|
||||||
_eqp_mt
|
|
||||||
EQApplicationPacket *pack=*p;
|
EQApplicationPacket *pack=*p;
|
||||||
*p = nullptr; //clear caller's pointer.. effectively takes ownership
|
*p = nullptr; //clear caller's pointer.. effectively takes ownership
|
||||||
|
|
||||||
@ -562,7 +555,6 @@ void EQStream::FastQueuePacket(EQApplicationPacket **p, bool ack_req)
|
|||||||
|
|
||||||
void EQStream::SendPacket(uint16 opcode, EQApplicationPacket *p)
|
void EQStream::SendPacket(uint16 opcode, EQApplicationPacket *p)
|
||||||
{
|
{
|
||||||
_eqp_mt
|
|
||||||
uint32 chunksize,used;
|
uint32 chunksize,used;
|
||||||
uint32 length;
|
uint32 length;
|
||||||
|
|
||||||
@ -607,7 +599,6 @@ void EQStream::SendPacket(uint16 opcode, EQApplicationPacket *p)
|
|||||||
|
|
||||||
void EQStream::SequencedPush(EQProtocolPacket *p)
|
void EQStream::SequencedPush(EQProtocolPacket *p)
|
||||||
{
|
{
|
||||||
_eqp_mt
|
|
||||||
#ifdef COLLECTOR
|
#ifdef COLLECTOR
|
||||||
delete p;
|
delete p;
|
||||||
#else
|
#else
|
||||||
@ -636,7 +627,6 @@ if(NextSequencedSend > SequencedQueue.size()) {
|
|||||||
|
|
||||||
void EQStream::NonSequencedPush(EQProtocolPacket *p)
|
void EQStream::NonSequencedPush(EQProtocolPacket *p)
|
||||||
{
|
{
|
||||||
_eqp_mt
|
|
||||||
#ifdef COLLECTOR
|
#ifdef COLLECTOR
|
||||||
delete p;
|
delete p;
|
||||||
#else
|
#else
|
||||||
@ -649,7 +639,6 @@ void EQStream::NonSequencedPush(EQProtocolPacket *p)
|
|||||||
|
|
||||||
void EQStream::SendAck(uint16 seq)
|
void EQStream::SendAck(uint16 seq)
|
||||||
{
|
{
|
||||||
_eqp_mt
|
|
||||||
uint16 Seq=htons(seq);
|
uint16 Seq=htons(seq);
|
||||||
Log.Out(Logs::Detail, Logs::Netcode, _L "Sending ack with sequence %d" __L, seq);
|
Log.Out(Logs::Detail, Logs::Netcode, _L "Sending ack with sequence %d" __L, seq);
|
||||||
SetLastAckSent(seq);
|
SetLastAckSent(seq);
|
||||||
@ -658,7 +647,6 @@ void EQStream::SendAck(uint16 seq)
|
|||||||
|
|
||||||
void EQStream::SendOutOfOrderAck(uint16 seq)
|
void EQStream::SendOutOfOrderAck(uint16 seq)
|
||||||
{
|
{
|
||||||
_eqp_mt
|
|
||||||
Log.Out(Logs::Detail, Logs::Netcode, _L "Sending out of order ack with sequence %d" __L, seq);
|
Log.Out(Logs::Detail, Logs::Netcode, _L "Sending out of order ack with sequence %d" __L, seq);
|
||||||
uint16 Seq=htons(seq);
|
uint16 Seq=htons(seq);
|
||||||
NonSequencedPush(new EQProtocolPacket(OP_OutOfOrderAck,(unsigned char *)&Seq,sizeof(uint16)));
|
NonSequencedPush(new EQProtocolPacket(OP_OutOfOrderAck,(unsigned char *)&Seq,sizeof(uint16)));
|
||||||
@ -666,7 +654,6 @@ uint16 Seq=htons(seq);
|
|||||||
|
|
||||||
void EQStream::Write(int eq_fd)
|
void EQStream::Write(int eq_fd)
|
||||||
{
|
{
|
||||||
_eqp_mt
|
|
||||||
std::queue<EQProtocolPacket *> ReadyToSend;
|
std::queue<EQProtocolPacket *> ReadyToSend;
|
||||||
bool SeqEmpty=false, NonSeqEmpty=false;
|
bool SeqEmpty=false, NonSeqEmpty=false;
|
||||||
std::deque<EQProtocolPacket *>::iterator sitr;
|
std::deque<EQProtocolPacket *>::iterator sitr;
|
||||||
@ -862,7 +849,6 @@ void EQStream::Write(int eq_fd)
|
|||||||
|
|
||||||
void EQStream::WritePacket(int eq_fd, EQProtocolPacket *p)
|
void EQStream::WritePacket(int eq_fd, EQProtocolPacket *p)
|
||||||
{
|
{
|
||||||
_eqp_mt
|
|
||||||
uint32 length;
|
uint32 length;
|
||||||
sockaddr_in address;
|
sockaddr_in address;
|
||||||
address.sin_family = AF_INET;
|
address.sin_family = AF_INET;
|
||||||
@ -901,7 +887,6 @@ void EQStream::WritePacket(int eq_fd, EQProtocolPacket *p)
|
|||||||
|
|
||||||
void EQStream::SendSessionResponse()
|
void EQStream::SendSessionResponse()
|
||||||
{
|
{
|
||||||
_eqp_mt
|
|
||||||
EQProtocolPacket *out=new EQProtocolPacket(OP_SessionResponse,nullptr,sizeof(SessionResponse));
|
EQProtocolPacket *out=new EQProtocolPacket(OP_SessionResponse,nullptr,sizeof(SessionResponse));
|
||||||
SessionResponse *Response=(SessionResponse *)out->pBuffer;
|
SessionResponse *Response=(SessionResponse *)out->pBuffer;
|
||||||
Response->Session=htonl(Session);
|
Response->Session=htonl(Session);
|
||||||
@ -924,7 +909,6 @@ void EQStream::SendSessionResponse()
|
|||||||
|
|
||||||
void EQStream::SendSessionRequest()
|
void EQStream::SendSessionRequest()
|
||||||
{
|
{
|
||||||
_eqp_mt
|
|
||||||
EQProtocolPacket *out=new EQProtocolPacket(OP_SessionRequest,nullptr,sizeof(SessionRequest));
|
EQProtocolPacket *out=new EQProtocolPacket(OP_SessionRequest,nullptr,sizeof(SessionRequest));
|
||||||
SessionRequest *Request=(SessionRequest *)out->pBuffer;
|
SessionRequest *Request=(SessionRequest *)out->pBuffer;
|
||||||
memset(Request,0,sizeof(SessionRequest));
|
memset(Request,0,sizeof(SessionRequest));
|
||||||
@ -938,7 +922,6 @@ void EQStream::SendSessionRequest()
|
|||||||
|
|
||||||
void EQStream::_SendDisconnect()
|
void EQStream::_SendDisconnect()
|
||||||
{
|
{
|
||||||
_eqp_mt
|
|
||||||
if(GetState() == CLOSED)
|
if(GetState() == CLOSED)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
@ -951,7 +934,6 @@ void EQStream::_SendDisconnect()
|
|||||||
|
|
||||||
void EQStream::InboundQueuePush(EQRawApplicationPacket *p)
|
void EQStream::InboundQueuePush(EQRawApplicationPacket *p)
|
||||||
{
|
{
|
||||||
_eqp_mt
|
|
||||||
MInboundQueue.lock();
|
MInboundQueue.lock();
|
||||||
InboundQueue.push_back(p);
|
InboundQueue.push_back(p);
|
||||||
MInboundQueue.unlock();
|
MInboundQueue.unlock();
|
||||||
@ -959,7 +941,6 @@ void EQStream::InboundQueuePush(EQRawApplicationPacket *p)
|
|||||||
|
|
||||||
EQApplicationPacket *EQStream::PopPacket()
|
EQApplicationPacket *EQStream::PopPacket()
|
||||||
{
|
{
|
||||||
_eqp_mt
|
|
||||||
EQRawApplicationPacket *p=nullptr;
|
EQRawApplicationPacket *p=nullptr;
|
||||||
|
|
||||||
MInboundQueue.lock();
|
MInboundQueue.lock();
|
||||||
@ -987,7 +968,6 @@ EQApplicationPacket *EQStream::PopPacket()
|
|||||||
|
|
||||||
EQRawApplicationPacket *EQStream::PopRawPacket()
|
EQRawApplicationPacket *EQStream::PopRawPacket()
|
||||||
{
|
{
|
||||||
_eqp_mt
|
|
||||||
EQRawApplicationPacket *p=nullptr;
|
EQRawApplicationPacket *p=nullptr;
|
||||||
|
|
||||||
MInboundQueue.lock();
|
MInboundQueue.lock();
|
||||||
@ -1015,7 +995,6 @@ EQRawApplicationPacket *EQStream::PopRawPacket()
|
|||||||
|
|
||||||
EQRawApplicationPacket *EQStream::PeekPacket()
|
EQRawApplicationPacket *EQStream::PeekPacket()
|
||||||
{
|
{
|
||||||
_eqp_mt
|
|
||||||
EQRawApplicationPacket *p=nullptr;
|
EQRawApplicationPacket *p=nullptr;
|
||||||
|
|
||||||
MInboundQueue.lock();
|
MInboundQueue.lock();
|
||||||
@ -1030,7 +1009,6 @@ EQRawApplicationPacket *EQStream::PeekPacket()
|
|||||||
|
|
||||||
void EQStream::InboundQueueClear()
|
void EQStream::InboundQueueClear()
|
||||||
{
|
{
|
||||||
_eqp_mt
|
|
||||||
EQApplicationPacket *p=nullptr;
|
EQApplicationPacket *p=nullptr;
|
||||||
|
|
||||||
Log.Out(Logs::Detail, Logs::Netcode, _L "Clearing inbound queue" __L);
|
Log.Out(Logs::Detail, Logs::Netcode, _L "Clearing inbound queue" __L);
|
||||||
@ -1049,7 +1027,6 @@ void EQStream::InboundQueueClear()
|
|||||||
|
|
||||||
bool EQStream::HasOutgoingData()
|
bool EQStream::HasOutgoingData()
|
||||||
{
|
{
|
||||||
_eqp_mt
|
|
||||||
bool flag;
|
bool flag;
|
||||||
|
|
||||||
//once closed, we have nothing more to say
|
//once closed, we have nothing more to say
|
||||||
@ -1075,7 +1052,6 @@ bool EQStream::HasOutgoingData()
|
|||||||
|
|
||||||
void EQStream::OutboundQueueClear()
|
void EQStream::OutboundQueueClear()
|
||||||
{
|
{
|
||||||
_eqp_mt
|
|
||||||
EQProtocolPacket *p=nullptr;
|
EQProtocolPacket *p=nullptr;
|
||||||
|
|
||||||
Log.Out(Logs::Detail, Logs::Netcode, _L "Clearing outbound queue" __L);
|
Log.Out(Logs::Detail, Logs::Netcode, _L "Clearing outbound queue" __L);
|
||||||
@ -1098,7 +1074,6 @@ void EQStream::OutboundQueueClear()
|
|||||||
|
|
||||||
void EQStream::PacketQueueClear()
|
void EQStream::PacketQueueClear()
|
||||||
{
|
{
|
||||||
_eqp_mt
|
|
||||||
EQProtocolPacket *p=nullptr;
|
EQProtocolPacket *p=nullptr;
|
||||||
|
|
||||||
Log.Out(Logs::Detail, Logs::Netcode, _L "Clearing future packet queue" __L);
|
Log.Out(Logs::Detail, Logs::Netcode, _L "Clearing future packet queue" __L);
|
||||||
@ -1115,7 +1090,6 @@ void EQStream::PacketQueueClear()
|
|||||||
|
|
||||||
void EQStream::Process(const unsigned char *buffer, const uint32 length)
|
void EQStream::Process(const unsigned char *buffer, const uint32 length)
|
||||||
{
|
{
|
||||||
_eqp_mt
|
|
||||||
static unsigned char newbuffer[2048];
|
static unsigned char newbuffer[2048];
|
||||||
uint32 newlength=0;
|
uint32 newlength=0;
|
||||||
if (EQProtocolPacket::ValidateCRC(buffer,length,Key)) {
|
if (EQProtocolPacket::ValidateCRC(buffer,length,Key)) {
|
||||||
@ -1140,7 +1114,6 @@ void EQStream::Process(const unsigned char *buffer, const uint32 length)
|
|||||||
|
|
||||||
long EQStream::GetNextAckToSend()
|
long EQStream::GetNextAckToSend()
|
||||||
{
|
{
|
||||||
_eqp_mt
|
|
||||||
MAcks.lock();
|
MAcks.lock();
|
||||||
long l=NextAckToSend;
|
long l=NextAckToSend;
|
||||||
MAcks.unlock();
|
MAcks.unlock();
|
||||||
@ -1150,7 +1123,6 @@ long EQStream::GetNextAckToSend()
|
|||||||
|
|
||||||
long EQStream::GetLastAckSent()
|
long EQStream::GetLastAckSent()
|
||||||
{
|
{
|
||||||
_eqp_mt
|
|
||||||
MAcks.lock();
|
MAcks.lock();
|
||||||
long l=LastAckSent;
|
long l=LastAckSent;
|
||||||
MAcks.unlock();
|
MAcks.unlock();
|
||||||
@ -1160,7 +1132,6 @@ long EQStream::GetLastAckSent()
|
|||||||
|
|
||||||
void EQStream::AckPackets(uint16 seq)
|
void EQStream::AckPackets(uint16 seq)
|
||||||
{
|
{
|
||||||
_eqp_mt
|
|
||||||
std::deque<EQProtocolPacket *>::iterator itr, tmp;
|
std::deque<EQProtocolPacket *>::iterator itr, tmp;
|
||||||
|
|
||||||
MOutboundQueue.lock();
|
MOutboundQueue.lock();
|
||||||
@ -1215,7 +1186,6 @@ void EQStream::AckPackets(uint16 seq)
|
|||||||
|
|
||||||
void EQStream::SetNextAckToSend(uint32 seq)
|
void EQStream::SetNextAckToSend(uint32 seq)
|
||||||
{
|
{
|
||||||
_eqp_mt
|
|
||||||
MAcks.lock();
|
MAcks.lock();
|
||||||
Log.Out(Logs::Detail, Logs::Netcode, _L "Set Next Ack To Send to %lu" __L, (unsigned long)seq);
|
Log.Out(Logs::Detail, Logs::Netcode, _L "Set Next Ack To Send to %lu" __L, (unsigned long)seq);
|
||||||
NextAckToSend=seq;
|
NextAckToSend=seq;
|
||||||
@ -1224,7 +1194,6 @@ void EQStream::SetNextAckToSend(uint32 seq)
|
|||||||
|
|
||||||
void EQStream::SetLastAckSent(uint32 seq)
|
void EQStream::SetLastAckSent(uint32 seq)
|
||||||
{
|
{
|
||||||
_eqp_mt
|
|
||||||
MAcks.lock();
|
MAcks.lock();
|
||||||
Log.Out(Logs::Detail, Logs::Netcode, _L "Set Last Ack Sent to %lu" __L, (unsigned long)seq);
|
Log.Out(Logs::Detail, Logs::Netcode, _L "Set Last Ack Sent to %lu" __L, (unsigned long)seq);
|
||||||
LastAckSent=seq;
|
LastAckSent=seq;
|
||||||
@ -1233,7 +1202,6 @@ void EQStream::SetLastAckSent(uint32 seq)
|
|||||||
|
|
||||||
void EQStream::ProcessQueue()
|
void EQStream::ProcessQueue()
|
||||||
{
|
{
|
||||||
_eqp_mt
|
|
||||||
if(PacketQueue.empty()) {
|
if(PacketQueue.empty()) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -1249,7 +1217,6 @@ void EQStream::ProcessQueue()
|
|||||||
|
|
||||||
EQProtocolPacket *EQStream::RemoveQueue(uint16 seq)
|
EQProtocolPacket *EQStream::RemoveQueue(uint16 seq)
|
||||||
{
|
{
|
||||||
_eqp_mt
|
|
||||||
std::map<unsigned short,EQProtocolPacket *>::iterator itr;
|
std::map<unsigned short,EQProtocolPacket *>::iterator itr;
|
||||||
EQProtocolPacket *qp=nullptr;
|
EQProtocolPacket *qp=nullptr;
|
||||||
if ((itr=PacketQueue.find(seq))!=PacketQueue.end()) {
|
if ((itr=PacketQueue.find(seq))!=PacketQueue.end()) {
|
||||||
@ -1262,7 +1229,6 @@ EQProtocolPacket *EQStream::RemoveQueue(uint16 seq)
|
|||||||
|
|
||||||
void EQStream::SetStreamType(EQStreamType type)
|
void EQStream::SetStreamType(EQStreamType type)
|
||||||
{
|
{
|
||||||
_eqp_mt
|
|
||||||
Log.Out(Logs::Detail, Logs::Netcode, _L "Changing stream type from %s to %s" __L, StreamTypeString(StreamType), StreamTypeString(type));
|
Log.Out(Logs::Detail, Logs::Netcode, _L "Changing stream type from %s to %s" __L, StreamTypeString(StreamType), StreamTypeString(type));
|
||||||
StreamType=type;
|
StreamType=type;
|
||||||
switch (StreamType) {
|
switch (StreamType) {
|
||||||
@ -1293,7 +1259,6 @@ void EQStream::SetStreamType(EQStreamType type)
|
|||||||
|
|
||||||
const char *EQStream::StreamTypeString(EQStreamType t)
|
const char *EQStream::StreamTypeString(EQStreamType t)
|
||||||
{
|
{
|
||||||
_eqp_mt
|
|
||||||
switch (t) {
|
switch (t) {
|
||||||
case LoginStream:
|
case LoginStream:
|
||||||
return "Login";
|
return "Login";
|
||||||
@ -1323,7 +1288,6 @@ const char *EQStream::StreamTypeString(EQStreamType t)
|
|||||||
//returns SeqFuture if `seq` is later than `expected_seq`
|
//returns SeqFuture if `seq` is later than `expected_seq`
|
||||||
EQStream::SeqOrder EQStream::CompareSequence(uint16 expected_seq , uint16 seq)
|
EQStream::SeqOrder EQStream::CompareSequence(uint16 expected_seq , uint16 seq)
|
||||||
{
|
{
|
||||||
_eqp_mt
|
|
||||||
if (expected_seq==seq) {
|
if (expected_seq==seq) {
|
||||||
// Curent
|
// Curent
|
||||||
return SeqInOrder;
|
return SeqInOrder;
|
||||||
@ -1337,7 +1301,6 @@ EQStream::SeqOrder EQStream::CompareSequence(uint16 expected_seq , uint16 seq)
|
|||||||
}
|
}
|
||||||
|
|
||||||
void EQStream::SetState(EQStreamState state) {
|
void EQStream::SetState(EQStreamState state) {
|
||||||
_eqp_mt
|
|
||||||
MState.lock();
|
MState.lock();
|
||||||
Log.Out(Logs::Detail, Logs::Netcode, _L "Changing state from %d to %d" __L, State, state);
|
Log.Out(Logs::Detail, Logs::Netcode, _L "Changing state from %d to %d" __L, State, state);
|
||||||
State=state;
|
State=state;
|
||||||
@ -1346,7 +1309,6 @@ void EQStream::SetState(EQStreamState state) {
|
|||||||
|
|
||||||
|
|
||||||
void EQStream::CheckTimeout(uint32 now, uint32 timeout) {
|
void EQStream::CheckTimeout(uint32 now, uint32 timeout) {
|
||||||
_eqp_mt
|
|
||||||
bool outgoing_data = HasOutgoingData(); //up here to avoid recursive locking
|
bool outgoing_data = HasOutgoingData(); //up here to avoid recursive locking
|
||||||
|
|
||||||
EQStreamState orig_state = GetState();
|
EQStreamState orig_state = GetState();
|
||||||
@ -1385,7 +1347,6 @@ void EQStream::CheckTimeout(uint32 now, uint32 timeout) {
|
|||||||
|
|
||||||
void EQStream::Decay()
|
void EQStream::Decay()
|
||||||
{
|
{
|
||||||
_eqp_mt
|
|
||||||
MRate.lock();
|
MRate.lock();
|
||||||
uint32 rate=DecayRate;
|
uint32 rate=DecayRate;
|
||||||
MRate.unlock();
|
MRate.unlock();
|
||||||
@ -1398,7 +1359,6 @@ void EQStream::Decay()
|
|||||||
|
|
||||||
void EQStream::AdjustRates(uint32 average_delta)
|
void EQStream::AdjustRates(uint32 average_delta)
|
||||||
{
|
{
|
||||||
_eqp_mt
|
|
||||||
if(GetExecutablePlatform() == ExePlatformWorld || GetExecutablePlatform() == ExePlatformZone) {
|
if(GetExecutablePlatform() == ExePlatformWorld || GetExecutablePlatform() == ExePlatformZone) {
|
||||||
if (average_delta && (average_delta <= AVERAGE_DELTA_MAX)) {
|
if (average_delta && (average_delta <= AVERAGE_DELTA_MAX)) {
|
||||||
MRate.lock();
|
MRate.lock();
|
||||||
@ -1424,7 +1384,6 @@ void EQStream::AdjustRates(uint32 average_delta)
|
|||||||
}
|
}
|
||||||
|
|
||||||
void EQStream::Close() {
|
void EQStream::Close() {
|
||||||
_eqp_mt
|
|
||||||
if(HasOutgoingData()) {
|
if(HasOutgoingData()) {
|
||||||
//there is pending data, wait for it to go out.
|
//there is pending data, wait for it to go out.
|
||||||
Log.Out(Logs::Detail, Logs::Netcode, _L "Stream requested to Close(), but there is pending data, waiting for it." __L);
|
Log.Out(Logs::Detail, Logs::Netcode, _L "Stream requested to Close(), but there is pending data, waiting for it." __L);
|
||||||
@ -1441,7 +1400,6 @@ void EQStream::Close() {
|
|||||||
//this could be expanded to check more than the fitst opcode if
|
//this could be expanded to check more than the fitst opcode if
|
||||||
//we needed more complex matching
|
//we needed more complex matching
|
||||||
EQStream::MatchState EQStream::CheckSignature(const Signature *sig) {
|
EQStream::MatchState EQStream::CheckSignature(const Signature *sig) {
|
||||||
_eqp_mt
|
|
||||||
EQRawApplicationPacket *p = nullptr;
|
EQRawApplicationPacket *p = nullptr;
|
||||||
MatchState res = MatchNotReady;
|
MatchState res = MatchNotReady;
|
||||||
|
|
||||||
|
|||||||
@ -65,7 +65,6 @@ EQStreamFactory::EQStreamFactory(EQStreamType type, int port, uint32 timeout)
|
|||||||
|
|
||||||
void EQStreamFactory::Close()
|
void EQStreamFactory::Close()
|
||||||
{
|
{
|
||||||
_eqp_mt
|
|
||||||
Stop();
|
Stop();
|
||||||
|
|
||||||
#ifdef _WINDOWS
|
#ifdef _WINDOWS
|
||||||
@ -78,7 +77,6 @@ void EQStreamFactory::Close()
|
|||||||
|
|
||||||
bool EQStreamFactory::Open()
|
bool EQStreamFactory::Open()
|
||||||
{
|
{
|
||||||
_eqp_mt
|
|
||||||
struct sockaddr_in address;
|
struct sockaddr_in address;
|
||||||
#ifndef WIN32
|
#ifndef WIN32
|
||||||
pthread_t t1,t2;
|
pthread_t t1,t2;
|
||||||
@ -120,7 +118,6 @@ bool EQStreamFactory::Open()
|
|||||||
|
|
||||||
std::shared_ptr<EQStream> EQStreamFactory::Pop()
|
std::shared_ptr<EQStream> EQStreamFactory::Pop()
|
||||||
{
|
{
|
||||||
_eqp_mt
|
|
||||||
std::shared_ptr<EQStream> s = nullptr;
|
std::shared_ptr<EQStream> s = nullptr;
|
||||||
MNewStreams.lock();
|
MNewStreams.lock();
|
||||||
if (NewStreams.size()) {
|
if (NewStreams.size()) {
|
||||||
@ -135,7 +132,6 @@ std::shared_ptr<EQStream> EQStreamFactory::Pop()
|
|||||||
|
|
||||||
void EQStreamFactory::Push(std::shared_ptr<EQStream> s)
|
void EQStreamFactory::Push(std::shared_ptr<EQStream> s)
|
||||||
{
|
{
|
||||||
_eqp_mt
|
|
||||||
MNewStreams.lock();
|
MNewStreams.lock();
|
||||||
NewStreams.push(s);
|
NewStreams.push(s);
|
||||||
MNewStreams.unlock();
|
MNewStreams.unlock();
|
||||||
@ -220,7 +216,6 @@ void EQStreamFactory::ReaderLoop()
|
|||||||
|
|
||||||
void EQStreamFactory::CheckTimeout()
|
void EQStreamFactory::CheckTimeout()
|
||||||
{
|
{
|
||||||
_eqp_mt
|
|
||||||
//lock streams the entire time were checking timeouts, it should be fast.
|
//lock streams the entire time were checking timeouts, it should be fast.
|
||||||
MStreams.lock();
|
MStreams.lock();
|
||||||
|
|
||||||
|
|||||||
@ -89,7 +89,6 @@ EQEmuLogSys::~EQEmuLogSys()
|
|||||||
|
|
||||||
void EQEmuLogSys::LoadLogSettingsDefaults()
|
void EQEmuLogSys::LoadLogSettingsDefaults()
|
||||||
{
|
{
|
||||||
_eqp_mt
|
|
||||||
/* Get Executable platform currently running this code (Zone/World/etc) */
|
/* Get Executable platform currently running this code (Zone/World/etc) */
|
||||||
log_platform = GetExecutablePlatformInt();
|
log_platform = GetExecutablePlatformInt();
|
||||||
|
|
||||||
@ -124,7 +123,6 @@ void EQEmuLogSys::LoadLogSettingsDefaults()
|
|||||||
|
|
||||||
std::string EQEmuLogSys::FormatOutMessageString(uint16 log_category, const std::string &in_message)
|
std::string EQEmuLogSys::FormatOutMessageString(uint16 log_category, const std::string &in_message)
|
||||||
{
|
{
|
||||||
_eqp_mt
|
|
||||||
std::string category_string;
|
std::string category_string;
|
||||||
if (log_category > 0 && Logs::LogCategoryName[log_category])
|
if (log_category > 0 && Logs::LogCategoryName[log_category])
|
||||||
category_string = StringFormat("[%s] ", Logs::LogCategoryName[log_category]);
|
category_string = StringFormat("[%s] ", Logs::LogCategoryName[log_category]);
|
||||||
@ -133,7 +131,6 @@ std::string EQEmuLogSys::FormatOutMessageString(uint16 log_category, const std::
|
|||||||
|
|
||||||
void EQEmuLogSys::ProcessGMSay(uint16 debug_level, uint16 log_category, const std::string &message)
|
void EQEmuLogSys::ProcessGMSay(uint16 debug_level, uint16 log_category, const std::string &message)
|
||||||
{
|
{
|
||||||
_eqp_mt
|
|
||||||
/* Check if category enabled for process */
|
/* Check if category enabled for process */
|
||||||
if (log_settings[log_category].log_to_gmsay == 0)
|
if (log_settings[log_category].log_to_gmsay == 0)
|
||||||
return;
|
return;
|
||||||
@ -153,7 +150,6 @@ void EQEmuLogSys::ProcessGMSay(uint16 debug_level, uint16 log_category, const st
|
|||||||
|
|
||||||
void EQEmuLogSys::ProcessLogWrite(uint16 debug_level, uint16 log_category, const std::string &message)
|
void EQEmuLogSys::ProcessLogWrite(uint16 debug_level, uint16 log_category, const std::string &message)
|
||||||
{
|
{
|
||||||
_eqp_mt
|
|
||||||
if (log_category == Logs::Crash) {
|
if (log_category == Logs::Crash) {
|
||||||
char time_stamp[80];
|
char time_stamp[80];
|
||||||
EQEmuLogSys::SetCurrentTimeStamp(time_stamp);
|
EQEmuLogSys::SetCurrentTimeStamp(time_stamp);
|
||||||
@ -180,7 +176,6 @@ void EQEmuLogSys::ProcessLogWrite(uint16 debug_level, uint16 log_category, const
|
|||||||
}
|
}
|
||||||
|
|
||||||
uint16 EQEmuLogSys::GetWindowsConsoleColorFromCategory(uint16 log_category) {
|
uint16 EQEmuLogSys::GetWindowsConsoleColorFromCategory(uint16 log_category) {
|
||||||
_eqp_mt
|
|
||||||
switch (log_category) {
|
switch (log_category) {
|
||||||
case Logs::Status:
|
case Logs::Status:
|
||||||
case Logs::Normal:
|
case Logs::Normal:
|
||||||
@ -204,7 +199,6 @@ uint16 EQEmuLogSys::GetWindowsConsoleColorFromCategory(uint16 log_category) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
std::string EQEmuLogSys::GetLinuxConsoleColorFromCategory(uint16 log_category) {
|
std::string EQEmuLogSys::GetLinuxConsoleColorFromCategory(uint16 log_category) {
|
||||||
_eqp_mt
|
|
||||||
switch (log_category) {
|
switch (log_category) {
|
||||||
case Logs::Status:
|
case Logs::Status:
|
||||||
case Logs::Normal:
|
case Logs::Normal:
|
||||||
@ -228,7 +222,6 @@ std::string EQEmuLogSys::GetLinuxConsoleColorFromCategory(uint16 log_category) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
uint16 EQEmuLogSys::GetGMSayColorFromCategory(uint16 log_category) {
|
uint16 EQEmuLogSys::GetGMSayColorFromCategory(uint16 log_category) {
|
||||||
_eqp_mt
|
|
||||||
switch (log_category) {
|
switch (log_category) {
|
||||||
case Logs::Status:
|
case Logs::Status:
|
||||||
case Logs::Normal:
|
case Logs::Normal:
|
||||||
@ -253,7 +246,6 @@ uint16 EQEmuLogSys::GetGMSayColorFromCategory(uint16 log_category) {
|
|||||||
|
|
||||||
void EQEmuLogSys::ProcessConsoleMessage(uint16 debug_level, uint16 log_category, const std::string &message)
|
void EQEmuLogSys::ProcessConsoleMessage(uint16 debug_level, uint16 log_category, const std::string &message)
|
||||||
{
|
{
|
||||||
_eqp_mt
|
|
||||||
/* Check if category enabled for process */
|
/* Check if category enabled for process */
|
||||||
if (log_settings[log_category].log_to_console == 0)
|
if (log_settings[log_category].log_to_console == 0)
|
||||||
return;
|
return;
|
||||||
@ -281,7 +273,6 @@ void EQEmuLogSys::ProcessConsoleMessage(uint16 debug_level, uint16 log_category,
|
|||||||
|
|
||||||
void EQEmuLogSys::Out(Logs::DebugLevel debug_level, uint16 log_category, std::string message, ...)
|
void EQEmuLogSys::Out(Logs::DebugLevel debug_level, uint16 log_category, std::string message, ...)
|
||||||
{
|
{
|
||||||
_eqp_mt
|
|
||||||
const bool log_to_console = log_settings[log_category].log_to_console > 0;
|
const bool log_to_console = log_settings[log_category].log_to_console > 0;
|
||||||
const bool log_to_file = log_settings[log_category].log_to_file > 0;
|
const bool log_to_file = log_settings[log_category].log_to_file > 0;
|
||||||
const bool log_to_gmsay = log_settings[log_category].log_to_gmsay > 0;
|
const bool log_to_gmsay = log_settings[log_category].log_to_gmsay > 0;
|
||||||
@ -303,7 +294,6 @@ void EQEmuLogSys::Out(Logs::DebugLevel debug_level, uint16 log_category, std::st
|
|||||||
|
|
||||||
void EQEmuLogSys::SetCurrentTimeStamp(char* time_stamp)
|
void EQEmuLogSys::SetCurrentTimeStamp(char* time_stamp)
|
||||||
{
|
{
|
||||||
_eqp_mt
|
|
||||||
time_t raw_time;
|
time_t raw_time;
|
||||||
struct tm * time_info;
|
struct tm * time_info;
|
||||||
time(&raw_time);
|
time(&raw_time);
|
||||||
@ -313,7 +303,6 @@ void EQEmuLogSys::SetCurrentTimeStamp(char* time_stamp)
|
|||||||
|
|
||||||
void EQEmuLogSys::MakeDirectory(const std::string &directory_name)
|
void EQEmuLogSys::MakeDirectory(const std::string &directory_name)
|
||||||
{
|
{
|
||||||
_eqp_mt
|
|
||||||
#ifdef _WINDOWS
|
#ifdef _WINDOWS
|
||||||
struct _stat st;
|
struct _stat st;
|
||||||
if (_stat(directory_name.c_str(), &st) == 0) // exists
|
if (_stat(directory_name.c_str(), &st) == 0) // exists
|
||||||
@ -329,7 +318,6 @@ void EQEmuLogSys::MakeDirectory(const std::string &directory_name)
|
|||||||
|
|
||||||
void EQEmuLogSys::CloseFileLogs()
|
void EQEmuLogSys::CloseFileLogs()
|
||||||
{
|
{
|
||||||
_eqp_mt
|
|
||||||
if (process_log.is_open()) {
|
if (process_log.is_open()) {
|
||||||
process_log.close();
|
process_log.close();
|
||||||
}
|
}
|
||||||
@ -337,7 +325,6 @@ void EQEmuLogSys::CloseFileLogs()
|
|||||||
|
|
||||||
void EQEmuLogSys::StartFileLogs(const std::string &log_name)
|
void EQEmuLogSys::StartFileLogs(const std::string &log_name)
|
||||||
{
|
{
|
||||||
_eqp_mt
|
|
||||||
EQEmuLogSys::CloseFileLogs();
|
EQEmuLogSys::CloseFileLogs();
|
||||||
|
|
||||||
/* When loading settings, we must have been given a reason in category based logging to output to a file in order to even create or open one... */
|
/* When loading settings, we must have been given a reason in category based logging to output to a file in order to even create or open one... */
|
||||||
|
|||||||
44
common/uuid.cpp
Normal file
44
common/uuid.cpp
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
/*
|
||||||
|
EQEMu: Everquest Server Emulator
|
||||||
|
Copyright (C) 2001-2014 EQEMu Development Team (http://eqemulator.net)
|
||||||
|
|
||||||
|
This program is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; version 2 of the License.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY except by those people which sell it, which
|
||||||
|
are required to give you total support for your newly bought product;
|
||||||
|
without even the implied warranty of MERCHANTABILITY or FITNESS FOR
|
||||||
|
A PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with this program; if not, write to the Free Software
|
||||||
|
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "uuid.h"
|
||||||
|
|
||||||
|
#ifdef WIN32
|
||||||
|
#include <rpc.h>
|
||||||
|
#else
|
||||||
|
#include <uuid/uuid.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
std::string CreateUUID() {
|
||||||
|
#ifdef WIN32
|
||||||
|
UUID uuid;
|
||||||
|
UuidCreate(&uuid);
|
||||||
|
unsigned char *str = nullptr;
|
||||||
|
UuidToStringA(&uuid, &str);
|
||||||
|
std::string s((char*)str);
|
||||||
|
RpcStringFreeA(&str);
|
||||||
|
return s;
|
||||||
|
#else
|
||||||
|
char str[64] = { 0 };
|
||||||
|
uuid_t uuid;
|
||||||
|
uuid_generate_random(uuid);
|
||||||
|
uuid_unparse(uuid, str);
|
||||||
|
return str;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
26
common/uuid.h
Normal file
26
common/uuid.h
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
/*
|
||||||
|
EQEMu: Everquest Server Emulator
|
||||||
|
Copyright (C) 2001-2014 EQEMu Development Team (http://eqemulator.net)
|
||||||
|
|
||||||
|
This program is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; version 2 of the License.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY except by those people which sell it, which
|
||||||
|
are required to give you total support for your newly bought product;
|
||||||
|
without even the implied warranty of MERCHANTABILITY or FITNESS FOR
|
||||||
|
A PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with this program; if not, write to the Free Software
|
||||||
|
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
|
*/
|
||||||
|
#ifndef COMMON_UUID_H
|
||||||
|
#define COMMON_UUID_H
|
||||||
|
|
||||||
|
#include <string>
|
||||||
|
|
||||||
|
std::string CreateUUID();
|
||||||
|
|
||||||
|
#endif
|
||||||
@ -15,8 +15,6 @@ SET(eqperf_headers
|
|||||||
eqp_profiler_node.h
|
eqp_profiler_node.h
|
||||||
)
|
)
|
||||||
|
|
||||||
ADD_LIBRARY(eqperf SHARED ${eqperf_sources} ${eqperf_headers})
|
ADD_LIBRARY(eqperf ${eqperf_sources} ${eqperf_headers})
|
||||||
|
|
||||||
INSTALL(TARGETS eqperf RUNTIME DESTINATION ${CMAKE_INSTALL_PREFIX})
|
|
||||||
|
|
||||||
SET(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin)
|
SET(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin)
|
||||||
|
|||||||
@ -7,7 +7,7 @@ EQP::CPU::ST::Event::Event(const char *function_name) {
|
|||||||
name_ = nullptr;
|
name_ = nullptr;
|
||||||
start_ = GetCurrentTimer();
|
start_ = GetCurrentTimer();
|
||||||
|
|
||||||
EQP::CPU::ST::GetProfiler().EventStarted(function_name_, name_);
|
identifier_ = EQP::CPU::ST::GetProfiler().EventStarted(function_name_, name_);
|
||||||
}
|
}
|
||||||
|
|
||||||
EQP::CPU::ST::Event::Event(const char *function_name, const char *name) {
|
EQP::CPU::ST::Event::Event(const char *function_name, const char *name) {
|
||||||
@ -15,13 +15,13 @@ EQP::CPU::ST::Event::Event(const char *function_name, const char *name) {
|
|||||||
name_ = name;
|
name_ = name;
|
||||||
start_ = GetCurrentTimer();
|
start_ = GetCurrentTimer();
|
||||||
|
|
||||||
EQP::CPU::ST::GetProfiler().EventStarted(function_name_, name_);
|
identifier_ = EQP::CPU::ST::GetProfiler().EventStarted(function_name_, name_);
|
||||||
}
|
}
|
||||||
|
|
||||||
EQP::CPU::ST::Event::~Event() {
|
EQP::CPU::ST::Event::~Event() {
|
||||||
uint64_t end = GetCurrentTimer();
|
uint64_t end = GetCurrentTimer();
|
||||||
|
|
||||||
EQP::CPU::ST::GetProfiler().EventFinished(end - start_);
|
EQP::CPU::ST::GetProfiler().EventFinished(end - start_, identifier_);
|
||||||
}
|
}
|
||||||
|
|
||||||
EQP::CPU::MT::Event::Event(const char *function_name) {
|
EQP::CPU::MT::Event::Event(const char *function_name) {
|
||||||
@ -29,7 +29,7 @@ EQP::CPU::MT::Event::Event(const char *function_name) {
|
|||||||
name_ = nullptr;
|
name_ = nullptr;
|
||||||
start_ = GetCurrentTimer();
|
start_ = GetCurrentTimer();
|
||||||
|
|
||||||
EQP::CPU::MT::GetProfiler().EventStarted(function_name_, name_);
|
identifier_ = EQP::CPU::MT::GetProfiler().EventStarted(function_name_, name_);
|
||||||
}
|
}
|
||||||
|
|
||||||
EQP::CPU::MT::Event::Event(const char *function_name, const char *name) {
|
EQP::CPU::MT::Event::Event(const char *function_name, const char *name) {
|
||||||
@ -37,11 +37,11 @@ EQP::CPU::MT::Event::Event(const char *function_name, const char *name) {
|
|||||||
name_ = name;
|
name_ = name;
|
||||||
start_ = GetCurrentTimer();
|
start_ = GetCurrentTimer();
|
||||||
|
|
||||||
EQP::CPU::MT::GetProfiler().EventStarted(function_name_, name_);
|
identifier_ = EQP::CPU::MT::GetProfiler().EventStarted(function_name_, name_);
|
||||||
}
|
}
|
||||||
|
|
||||||
EQP::CPU::MT::Event::~Event() {
|
EQP::CPU::MT::Event::~Event() {
|
||||||
uint64_t end = GetCurrentTimer();
|
uint64_t end = GetCurrentTimer();
|
||||||
|
|
||||||
EQP::CPU::MT::GetProfiler().EventFinished(end - start_);
|
EQP::CPU::MT::GetProfiler().EventFinished(end - start_, identifier_);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,5 +1,6 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#include <string>
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include "eqp_profile_function.h"
|
#include "eqp_profile_function.h"
|
||||||
|
|
||||||
@ -19,6 +20,7 @@ namespace EQP
|
|||||||
const char *function_name_;
|
const char *function_name_;
|
||||||
const char *name_;
|
const char *name_;
|
||||||
uint64_t start_;
|
uint64_t start_;
|
||||||
|
std::string identifier_;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -34,6 +36,7 @@ namespace EQP
|
|||||||
const char *function_name_;
|
const char *function_name_;
|
||||||
const char *name_;
|
const char *name_;
|
||||||
uint64_t start_;
|
uint64_t start_;
|
||||||
|
std::string identifier_;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -9,7 +9,8 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef _MSC_VER
|
#ifdef _MSC_VER
|
||||||
#define EQP_EXPORT __declspec(dllexport)
|
//#define EQP_EXPORT __declspec(dllexport)
|
||||||
|
#define EQP_EXPORT
|
||||||
#else
|
#else
|
||||||
#define EQP_EXPORT
|
#define EQP_EXPORT
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@ -4,6 +4,7 @@
|
|||||||
#include <mutex>
|
#include <mutex>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
|
#include "../common/uuid.h"
|
||||||
|
|
||||||
EQP::CPU::ST::Profiler st_profiler;
|
EQP::CPU::ST::Profiler st_profiler;
|
||||||
EQP::CPU::MT::Profiler mt_profiler;
|
EQP::CPU::MT::Profiler mt_profiler;
|
||||||
@ -12,6 +13,7 @@ struct EQP::CPU::MT::Profiler::impl
|
|||||||
{
|
{
|
||||||
std::mutex lock_;
|
std::mutex lock_;
|
||||||
std::unordered_map<std::thread::id, ThreadInfo*> nodes_;
|
std::unordered_map<std::thread::id, ThreadInfo*> nodes_;
|
||||||
|
std::string identifier_;
|
||||||
};
|
};
|
||||||
|
|
||||||
EQP::CPU::ST::Profiler &EQP::CPU::ST::GetProfiler() {
|
EQP::CPU::ST::Profiler &EQP::CPU::ST::GetProfiler() {
|
||||||
@ -26,13 +28,14 @@ EQP::CPU::ST::Profiler::Profiler() {
|
|||||||
root_ = new ProfilerNode;
|
root_ = new ProfilerNode;
|
||||||
root_->SetParent(root_);
|
root_->SetParent(root_);
|
||||||
current_ = root_;
|
current_ = root_;
|
||||||
|
identifier_ = CreateUUID();
|
||||||
}
|
}
|
||||||
|
|
||||||
EQP::CPU::ST::Profiler::~Profiler() {
|
EQP::CPU::ST::Profiler::~Profiler() {
|
||||||
delete root_;
|
delete root_;
|
||||||
}
|
}
|
||||||
|
|
||||||
void EQP::CPU::ST::Profiler::EventStarted(const char *func, const char *name) {
|
std::string EQP::CPU::ST::Profiler::EventStarted(const char *func, const char *name) {
|
||||||
std::string cur_name = func;
|
std::string cur_name = func;
|
||||||
if(name) {
|
if(name) {
|
||||||
cur_name += " - ";
|
cur_name += " - ";
|
||||||
@ -48,9 +51,14 @@ void EQP::CPU::ST::Profiler::EventStarted(const char *func, const char *name) {
|
|||||||
current_->GetNodes()[cur_name] = t;
|
current_->GetNodes()[cur_name] = t;
|
||||||
current_ = t;
|
current_ = t;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return identifier_;
|
||||||
}
|
}
|
||||||
|
|
||||||
void EQP::CPU::ST::Profiler::EventFinished(uint64_t time) {
|
void EQP::CPU::ST::Profiler::EventFinished(uint64_t time, std::string ident) {
|
||||||
|
if(ident.compare(identifier_) != 0) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
current_->GetTime() += time;
|
current_->GetTime() += time;
|
||||||
current_->GetCount()++;
|
current_->GetCount()++;
|
||||||
current_ = current_->GetParent();
|
current_ = current_->GetParent();
|
||||||
@ -65,6 +73,7 @@ void EQP::CPU::ST::Profiler::Clear() {
|
|||||||
root_->SetTime(0);
|
root_->SetTime(0);
|
||||||
root_->SetCount(0);
|
root_->SetCount(0);
|
||||||
current_ = root_;
|
current_ = root_;
|
||||||
|
identifier_ = CreateUUID();
|
||||||
}
|
}
|
||||||
|
|
||||||
void EQP::CPU::ST::Profiler::Dump(std::ostream &stream, int num) {
|
void EQP::CPU::ST::Profiler::Dump(std::ostream &stream, int num) {
|
||||||
@ -84,13 +93,21 @@ void EQP::CPU::ST::Profiler::Dump(std::ostream &stream, int num) {
|
|||||||
std::sort(sorted_vec.begin(), sorted_vec.end(),
|
std::sort(sorted_vec.begin(), sorted_vec.end(),
|
||||||
[](const ProfilerNodeDump& a, const ProfilerNodeDump& b) { return a.node->GetTime() > b.node->GetTime(); });
|
[](const ProfilerNodeDump& a, const ProfilerNodeDump& b) { return a.node->GetTime() > b.node->GetTime(); });
|
||||||
|
|
||||||
|
std::streamsize p = stream.precision();
|
||||||
|
double m_cycles = total / 1000.0;
|
||||||
|
|
||||||
|
stream << std::fixed;
|
||||||
|
stream.precision(2);
|
||||||
|
stream << m_cycles << "k cycles" << std::endl;
|
||||||
|
stream.precision(p);
|
||||||
|
|
||||||
int i = 0;
|
int i = 0;
|
||||||
for(auto &iter : sorted_vec) {
|
for(auto &iter : sorted_vec) {
|
||||||
if(num > 0 && i >= num) {
|
if(num > 0 && i >= num) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
iter.node->Dump(stream, iter.name, total, 0, num);
|
iter.node->Dump(stream, iter.name, total, 1, num);
|
||||||
++i;
|
++i;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -107,13 +124,14 @@ EQP::CPU::MT::Profiler::ThreadInfo::~ThreadInfo() {
|
|||||||
|
|
||||||
EQP::CPU::MT::Profiler::Profiler() {
|
EQP::CPU::MT::Profiler::Profiler() {
|
||||||
imp_ = new impl;
|
imp_ = new impl;
|
||||||
|
imp_->identifier_ = CreateUUID();
|
||||||
}
|
}
|
||||||
|
|
||||||
EQP::CPU::MT::Profiler::~Profiler() {
|
EQP::CPU::MT::Profiler::~Profiler() {
|
||||||
delete imp_;
|
delete imp_;
|
||||||
}
|
}
|
||||||
|
|
||||||
void EQP::CPU::MT::Profiler::EventStarted(const char *func, const char *name) {
|
std::string EQP::CPU::MT::Profiler::EventStarted(const char *func, const char *name) {
|
||||||
std::string cur_name = func;
|
std::string cur_name = func;
|
||||||
if(name) {
|
if(name) {
|
||||||
cur_name += " - ";
|
cur_name += " - ";
|
||||||
@ -121,7 +139,7 @@ void EQP::CPU::MT::Profiler::EventStarted(const char *func, const char *name) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
ThreadInfo *ti = nullptr;
|
ThreadInfo *ti = nullptr;
|
||||||
imp_->lock_.lock();
|
std::lock_guard<std::mutex> lg(imp_->lock_);
|
||||||
auto ti_search = imp_->nodes_.find(std::this_thread::get_id());
|
auto ti_search = imp_->nodes_.find(std::this_thread::get_id());
|
||||||
if(ti_search == imp_->nodes_.end()) {
|
if(ti_search == imp_->nodes_.end()) {
|
||||||
ti = new ThreadInfo;
|
ti = new ThreadInfo;
|
||||||
@ -129,7 +147,6 @@ void EQP::CPU::MT::Profiler::EventStarted(const char *func, const char *name) {
|
|||||||
} else {
|
} else {
|
||||||
ti = ti_search->second;
|
ti = ti_search->second;
|
||||||
}
|
}
|
||||||
imp_->lock_.unlock();
|
|
||||||
|
|
||||||
auto search = ti->current_->GetNodes().find(cur_name);
|
auto search = ti->current_->GetNodes().find(cur_name);
|
||||||
if(search != ti->current_->GetNodes().end()) {
|
if(search != ti->current_->GetNodes().end()) {
|
||||||
@ -141,20 +158,24 @@ void EQP::CPU::MT::Profiler::EventStarted(const char *func, const char *name) {
|
|||||||
ti->current_->GetNodes()[cur_name] = t;
|
ti->current_->GetNodes()[cur_name] = t;
|
||||||
ti->current_ = t;
|
ti->current_ = t;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return imp_->identifier_;
|
||||||
}
|
}
|
||||||
|
|
||||||
void EQP::CPU::MT::Profiler::EventFinished(uint64_t time) {
|
void EQP::CPU::MT::Profiler::EventFinished(uint64_t time, std::string ident) {
|
||||||
ThreadInfo *ti = nullptr;
|
ThreadInfo *ti = nullptr;
|
||||||
imp_->lock_.lock();
|
std::lock_guard<std::mutex> lg(imp_->lock_);
|
||||||
|
if(ident.compare(imp_->identifier_) != 0) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
auto ti_search = imp_->nodes_.find(std::this_thread::get_id());
|
auto ti_search = imp_->nodes_.find(std::this_thread::get_id());
|
||||||
if(ti_search == imp_->nodes_.end()) {
|
if(ti_search == imp_->nodes_.end()) {
|
||||||
imp_->lock_.unlock();
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
ti = ti_search->second;
|
ti = ti_search->second;
|
||||||
}
|
}
|
||||||
imp_->lock_.unlock();
|
|
||||||
|
|
||||||
ti->current_->GetTime() += time;
|
ti->current_->GetTime() += time;
|
||||||
ti->current_->GetCount()++;
|
ti->current_->GetCount()++;
|
||||||
@ -162,19 +183,18 @@ void EQP::CPU::MT::Profiler::EventFinished(uint64_t time) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void EQP::CPU::MT::Profiler::Clear() {
|
void EQP::CPU::MT::Profiler::Clear() {
|
||||||
imp_->lock_.lock();
|
std::lock_guard<std::mutex> lg(imp_->lock_);
|
||||||
for(auto &iter : imp_->nodes_) {
|
for(auto &iter : imp_->nodes_) {
|
||||||
delete iter.second;
|
delete iter.second;
|
||||||
}
|
}
|
||||||
|
|
||||||
imp_->nodes_.clear();
|
imp_->nodes_.clear();
|
||||||
imp_->lock_.unlock();
|
imp_->identifier_ = CreateUUID();
|
||||||
}
|
}
|
||||||
|
|
||||||
void EQP::CPU::MT::Profiler::Dump(std::ostream &stream, int num) {
|
void EQP::CPU::MT::Profiler::Dump(std::ostream &stream, int num) {
|
||||||
imp_->lock_.lock();
|
std::lock_guard<std::mutex> lg(imp_->lock_);
|
||||||
for(auto &iter : imp_->nodes_) {
|
for(auto &iter : imp_->nodes_) {
|
||||||
stream << "Thread: " << iter.first << std::endl;
|
|
||||||
uint64_t total = 0;
|
uint64_t total = 0;
|
||||||
std::vector<ProfilerNodeDump> sorted_vec;
|
std::vector<ProfilerNodeDump> sorted_vec;
|
||||||
sorted_vec.reserve(iter.second->root_->GetNodes().size() + 1);
|
sorted_vec.reserve(iter.second->root_->GetNodes().size() + 1);
|
||||||
@ -191,6 +211,14 @@ void EQP::CPU::MT::Profiler::Dump(std::ostream &stream, int num) {
|
|||||||
std::sort(sorted_vec.begin(), sorted_vec.end(),
|
std::sort(sorted_vec.begin(), sorted_vec.end(),
|
||||||
[](const ProfilerNodeDump& a, const ProfilerNodeDump& b) { return a.node->GetTime() > b.node->GetTime(); });
|
[](const ProfilerNodeDump& a, const ProfilerNodeDump& b) { return a.node->GetTime() > b.node->GetTime(); });
|
||||||
|
|
||||||
|
std::streamsize p = stream.precision();
|
||||||
|
double m_cycles = total / 1000.0;
|
||||||
|
|
||||||
|
stream << std::fixed;
|
||||||
|
stream.precision(2);
|
||||||
|
stream << "Thread: " << iter.first << ", " << m_cycles << "k cycles" << std::endl;
|
||||||
|
stream.precision(p);
|
||||||
|
|
||||||
int i = 0;
|
int i = 0;
|
||||||
for(auto &t_iter : sorted_vec) {
|
for(auto &t_iter : sorted_vec) {
|
||||||
if(num > 0 && i >= num) {
|
if(num > 0 && i >= num) {
|
||||||
@ -202,6 +230,5 @@ void EQP::CPU::MT::Profiler::Dump(std::ostream &stream, int num) {
|
|||||||
|
|
||||||
stream << std::endl;
|
stream << std::endl;
|
||||||
}
|
}
|
||||||
imp_->lock_.unlock();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -26,13 +26,14 @@ namespace EQP
|
|||||||
Profiler();
|
Profiler();
|
||||||
~Profiler();
|
~Profiler();
|
||||||
|
|
||||||
void EventStarted(const char *func, const char *name);
|
std::string EventStarted(const char *func, const char *name);
|
||||||
void EventFinished(uint64_t time);
|
void EventFinished(uint64_t time, std::string ident);
|
||||||
void Clear();
|
|
||||||
void Dump(std::ostream &stream, int num = 0);
|
void Dump(std::ostream &stream, int num = 0);
|
||||||
|
void Clear();
|
||||||
private:
|
private:
|
||||||
Node *root_;
|
Node *root_;
|
||||||
Node *current_;
|
Node *current_;
|
||||||
|
std::string identifier_;
|
||||||
};
|
};
|
||||||
|
|
||||||
EQP_EXPORT Profiler &GetProfiler();
|
EQP_EXPORT Profiler &GetProfiler();
|
||||||
@ -54,10 +55,10 @@ namespace EQP
|
|||||||
Profiler();
|
Profiler();
|
||||||
~Profiler();
|
~Profiler();
|
||||||
|
|
||||||
void EventStarted(const char *func, const char *name);
|
std::string EventStarted(const char *func, const char *name);
|
||||||
void EventFinished(uint64_t time);
|
void EventFinished(uint64_t time, std::string ident);
|
||||||
void Clear();
|
|
||||||
void Dump(std::ostream &stream, int num = 0);
|
void Dump(std::ostream &stream, int num = 0);
|
||||||
|
void Clear();
|
||||||
private:
|
private:
|
||||||
struct impl;
|
struct impl;
|
||||||
impl *imp_;
|
impl *imp_;
|
||||||
|
|||||||
@ -21,7 +21,7 @@ void EQP::CPU::ProfilerNode::Dump(std::ostream &stream, const std::string &func,
|
|||||||
stream << std::setw(node_level * 2) << " ";
|
stream << std::setw(node_level * 2) << " ";
|
||||||
}
|
}
|
||||||
|
|
||||||
double m_cycles = time_ / 1000000.0;
|
double m_cycles = time_ / 1000.0;
|
||||||
double m_avg_cycles = m_cycles / count_;
|
double m_avg_cycles = m_cycles / count_;
|
||||||
double percentage = time_ * 100 / static_cast<double>(total_time);
|
double percentage = time_ * 100 / static_cast<double>(total_time);
|
||||||
|
|
||||||
@ -29,7 +29,7 @@ void EQP::CPU::ProfilerNode::Dump(std::ostream &stream, const std::string &func,
|
|||||||
|
|
||||||
stream << std::fixed;
|
stream << std::fixed;
|
||||||
stream.precision(2);
|
stream.precision(2);
|
||||||
stream << m_cycles << "M cycles, " << count_ << " calls, " << m_avg_cycles << "M cycles avg, ";
|
stream << m_cycles << "k cycles, " << count_ << " calls, " << m_avg_cycles << "k cycles avg, ";
|
||||||
stream << func.c_str() << " ";
|
stream << func.c_str() << " ";
|
||||||
stream << percentage << "%";
|
stream << percentage << "%";
|
||||||
stream << std::endl;
|
stream << std::endl;
|
||||||
|
|||||||
@ -6,7 +6,6 @@ SET(eqlogin_sources
|
|||||||
config.cpp
|
config.cpp
|
||||||
database_mysql.cpp
|
database_mysql.cpp
|
||||||
database_postgresql.cpp
|
database_postgresql.cpp
|
||||||
error_log.cpp
|
|
||||||
main.cpp
|
main.cpp
|
||||||
server_manager.cpp
|
server_manager.cpp
|
||||||
world_server.cpp
|
world_server.cpp
|
||||||
@ -26,7 +25,6 @@ SET(eqlogin_headers
|
|||||||
database_postgresql.h
|
database_postgresql.h
|
||||||
encryption.h
|
encryption.h
|
||||||
eq_crypto_api.h
|
eq_crypto_api.h
|
||||||
error_log.h
|
|
||||||
login_server.h
|
login_server.h
|
||||||
login_structures.h
|
login_structures.h
|
||||||
options.h
|
options.h
|
||||||
@ -48,6 +46,7 @@ TARGET_LINK_LIBRARIES(loginserver common ${PERF_LIBS} debug ${MySQL_LIBRARY_DEBU
|
|||||||
IF(MSVC)
|
IF(MSVC)
|
||||||
SET_TARGET_PROPERTIES(loginserver PROPERTIES LINK_FLAGS_RELEASE "/OPT:REF /OPT:ICF")
|
SET_TARGET_PROPERTIES(loginserver PROPERTIES LINK_FLAGS_RELEASE "/OPT:REF /OPT:ICF")
|
||||||
TARGET_LINK_LIBRARIES(loginserver "Ws2_32.lib")
|
TARGET_LINK_LIBRARIES(loginserver "Ws2_32.lib")
|
||||||
|
TARGET_LINK_LIBRARIES(loginserver "rpcrt4")
|
||||||
ENDIF(MSVC)
|
ENDIF(MSVC)
|
||||||
|
|
||||||
IF(MINGW)
|
IF(MINGW)
|
||||||
@ -62,6 +61,7 @@ IF(UNIX)
|
|||||||
TARGET_LINK_LIBRARIES(loginserver "rt")
|
TARGET_LINK_LIBRARIES(loginserver "rt")
|
||||||
ENDIF(NOT DARWIN)
|
ENDIF(NOT DARWIN)
|
||||||
TARGET_LINK_LIBRARIES(loginserver "pthread")
|
TARGET_LINK_LIBRARIES(loginserver "pthread")
|
||||||
|
TARGET_LINK_LIBRARIES(loginserver "uuid")
|
||||||
TARGET_LINK_LIBRARIES(loginserver "EQEmuAuthCrypto")
|
TARGET_LINK_LIBRARIES(loginserver "EQEmuAuthCrypto")
|
||||||
TARGET_LINK_LIBRARIES(loginserver "cryptopp")
|
TARGET_LINK_LIBRARIES(loginserver "cryptopp")
|
||||||
ADD_DEFINITIONS(-fPIC)
|
ADD_DEFINITIONS(-fPIC)
|
||||||
|
|||||||
@ -16,7 +16,6 @@
|
|||||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
*/
|
*/
|
||||||
#include "client.h"
|
#include "client.h"
|
||||||
#include "error_log.h"
|
|
||||||
#include "login_server.h"
|
#include "login_server.h"
|
||||||
#include "login_structures.h"
|
#include "login_structures.h"
|
||||||
#include "../common/misc_functions.h"
|
#include "../common/misc_functions.h"
|
||||||
@ -26,7 +25,7 @@ extern LoginServer server;
|
|||||||
|
|
||||||
Client::Client(std::shared_ptr<EQStream> c, LSClientVersion v)
|
Client::Client(std::shared_ptr<EQStream> c, LSClientVersion v)
|
||||||
{
|
{
|
||||||
_eqp_mt
|
_eqp
|
||||||
connection = c;
|
connection = c;
|
||||||
version = v;
|
version = v;
|
||||||
status = cs_not_sent_session_ready;
|
status = cs_not_sent_session_ready;
|
||||||
@ -37,7 +36,7 @@ Client::Client(std::shared_ptr<EQStream> c, LSClientVersion v)
|
|||||||
|
|
||||||
bool Client::Process()
|
bool Client::Process()
|
||||||
{
|
{
|
||||||
_eqp_mt
|
_eqp
|
||||||
EQApplicationPacket *app = connection->PopPacket();
|
EQApplicationPacket *app = connection->PopPacket();
|
||||||
while(app)
|
while(app)
|
||||||
{
|
{
|
||||||
@ -116,7 +115,7 @@ bool Client::Process()
|
|||||||
|
|
||||||
void Client::Handle_SessionReady(const char* data, unsigned int size)
|
void Client::Handle_SessionReady(const char* data, unsigned int size)
|
||||||
{
|
{
|
||||||
_eqp_mt
|
_eqp
|
||||||
if(status != cs_not_sent_session_ready)
|
if(status != cs_not_sent_session_ready)
|
||||||
{
|
{
|
||||||
Log.Out(Logs::General, Logs::Netcode, "Session ready received again after already being received.");
|
Log.Out(Logs::General, Logs::Netcode, "Session ready received again after already being received.");
|
||||||
@ -178,7 +177,7 @@ void Client::Handle_SessionReady(const char* data, unsigned int size)
|
|||||||
|
|
||||||
void Client::Handle_Login(const char* data, unsigned int size)
|
void Client::Handle_Login(const char* data, unsigned int size)
|
||||||
{
|
{
|
||||||
_eqp_mt
|
_eqp
|
||||||
if(status != cs_waiting_for_login)
|
if(status != cs_waiting_for_login)
|
||||||
{
|
{
|
||||||
Log.Out(Logs::General, Logs::Netcode, "Login received after already having logged in.");
|
Log.Out(Logs::General, Logs::Netcode, "Login received after already having logged in.");
|
||||||
@ -333,7 +332,7 @@ void Client::Handle_Login(const char* data, unsigned int size)
|
|||||||
|
|
||||||
void Client::Handle_Play(const char* data)
|
void Client::Handle_Play(const char* data)
|
||||||
{
|
{
|
||||||
_eqp_mt
|
_eqp
|
||||||
if(status != cs_logged_in)
|
if(status != cs_logged_in)
|
||||||
{
|
{
|
||||||
Log.Out(Logs::General, Logs::Error, "Client sent a play request when they either were not logged in, discarding.");
|
Log.Out(Logs::General, Logs::Error, "Client sent a play request when they either were not logged in, discarding.");
|
||||||
@ -357,7 +356,7 @@ void Client::Handle_Play(const char* data)
|
|||||||
|
|
||||||
void Client::SendServerListPacket()
|
void Client::SendServerListPacket()
|
||||||
{
|
{
|
||||||
_eqp_mt
|
_eqp
|
||||||
EQApplicationPacket *outapp = server.SM->CreateServerListPacket(this);
|
EQApplicationPacket *outapp = server.SM->CreateServerListPacket(this);
|
||||||
|
|
||||||
if(server.options.IsDumpOutPacketsOn())
|
if(server.options.IsDumpOutPacketsOn())
|
||||||
@ -371,7 +370,7 @@ void Client::SendServerListPacket()
|
|||||||
|
|
||||||
void Client::SendPlayResponse(EQApplicationPacket *outapp)
|
void Client::SendPlayResponse(EQApplicationPacket *outapp)
|
||||||
{
|
{
|
||||||
_eqp_mt
|
_eqp
|
||||||
if(server.options.IsTraceOn())
|
if(server.options.IsTraceOn())
|
||||||
{
|
{
|
||||||
Log.Out(Logs::Detail, Logs::Netcode, "Sending play response for %s.", GetAccountName().c_str());
|
Log.Out(Logs::Detail, Logs::Netcode, "Sending play response for %s.", GetAccountName().c_str());
|
||||||
@ -383,7 +382,7 @@ void Client::SendPlayResponse(EQApplicationPacket *outapp)
|
|||||||
|
|
||||||
void Client::GenerateKey()
|
void Client::GenerateKey()
|
||||||
{
|
{
|
||||||
_eqp_mt
|
_eqp
|
||||||
key.clear();
|
key.clear();
|
||||||
int count = 0;
|
int count = 0;
|
||||||
while(count < 10)
|
while(count < 10)
|
||||||
|
|||||||
@ -16,7 +16,6 @@
|
|||||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
*/
|
*/
|
||||||
#include "client_manager.h"
|
#include "client_manager.h"
|
||||||
#include "error_log.h"
|
|
||||||
#include "login_server.h"
|
#include "login_server.h"
|
||||||
#include "../common/eqemu_logsys.h"
|
#include "../common/eqemu_logsys.h"
|
||||||
|
|
||||||
@ -25,7 +24,7 @@ extern bool run_server;
|
|||||||
|
|
||||||
ClientManager::ClientManager()
|
ClientManager::ClientManager()
|
||||||
{
|
{
|
||||||
_eqp_mt
|
_eqp
|
||||||
int titanium_port = atoi(server.config->GetVariable("Titanium", "port").c_str());
|
int titanium_port = atoi(server.config->GetVariable("Titanium", "port").c_str());
|
||||||
titanium_stream = new EQStreamFactory(LoginStream, titanium_port);
|
titanium_stream = new EQStreamFactory(LoginStream, titanium_port);
|
||||||
titanium_ops = new RegularOpcodeManager;
|
titanium_ops = new RegularOpcodeManager;
|
||||||
@ -69,7 +68,7 @@ ClientManager::ClientManager()
|
|||||||
|
|
||||||
ClientManager::~ClientManager()
|
ClientManager::~ClientManager()
|
||||||
{
|
{
|
||||||
_eqp_mt
|
_eqp
|
||||||
if(titanium_stream)
|
if(titanium_stream)
|
||||||
{
|
{
|
||||||
titanium_stream->Close();
|
titanium_stream->Close();
|
||||||
@ -95,7 +94,7 @@ ClientManager::~ClientManager()
|
|||||||
|
|
||||||
void ClientManager::Process()
|
void ClientManager::Process()
|
||||||
{
|
{
|
||||||
_eqp_mt
|
_eqp
|
||||||
ProcessDisconnect();
|
ProcessDisconnect();
|
||||||
std::shared_ptr<EQStream> cur = titanium_stream->Pop();
|
std::shared_ptr<EQStream> cur = titanium_stream->Pop();
|
||||||
while(cur)
|
while(cur)
|
||||||
@ -141,7 +140,7 @@ void ClientManager::Process()
|
|||||||
|
|
||||||
void ClientManager::ProcessDisconnect()
|
void ClientManager::ProcessDisconnect()
|
||||||
{
|
{
|
||||||
_eqp_mt
|
_eqp
|
||||||
list<Client*>::iterator iter = clients.begin();
|
list<Client*>::iterator iter = clients.begin();
|
||||||
while(iter != clients.end())
|
while(iter != clients.end())
|
||||||
{
|
{
|
||||||
@ -161,7 +160,7 @@ void ClientManager::ProcessDisconnect()
|
|||||||
|
|
||||||
void ClientManager::UpdateServerList()
|
void ClientManager::UpdateServerList()
|
||||||
{
|
{
|
||||||
_eqp_mt
|
_eqp
|
||||||
list<Client*>::iterator iter = clients.begin();
|
list<Client*>::iterator iter = clients.begin();
|
||||||
while(iter != clients.end())
|
while(iter != clients.end())
|
||||||
{
|
{
|
||||||
@ -172,7 +171,7 @@ void ClientManager::UpdateServerList()
|
|||||||
|
|
||||||
void ClientManager::RemoveExistingClient(unsigned int account_id)
|
void ClientManager::RemoveExistingClient(unsigned int account_id)
|
||||||
{
|
{
|
||||||
_eqp_mt
|
_eqp
|
||||||
list<Client*>::iterator iter = clients.begin();
|
list<Client*>::iterator iter = clients.begin();
|
||||||
while(iter != clients.end())
|
while(iter != clients.end())
|
||||||
{
|
{
|
||||||
@ -191,7 +190,7 @@ void ClientManager::RemoveExistingClient(unsigned int account_id)
|
|||||||
|
|
||||||
Client *ClientManager::GetClient(unsigned int account_id)
|
Client *ClientManager::GetClient(unsigned int account_id)
|
||||||
{
|
{
|
||||||
_eqp_mt
|
_eqp
|
||||||
Client *cur = nullptr;
|
Client *cur = nullptr;
|
||||||
int count = 0;
|
int count = 0;
|
||||||
list<Client*>::iterator iter = clients.begin();
|
list<Client*>::iterator iter = clients.begin();
|
||||||
|
|||||||
@ -17,7 +17,6 @@
|
|||||||
*/
|
*/
|
||||||
#include "../common/global_define.h"
|
#include "../common/global_define.h"
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
#include "error_log.h"
|
|
||||||
#include "../common/eqemu_logsys.h"
|
#include "../common/eqemu_logsys.h"
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -27,7 +26,7 @@
|
|||||||
*/
|
*/
|
||||||
std::string Config::GetVariable(std::string title, std::string parameter)
|
std::string Config::GetVariable(std::string title, std::string parameter)
|
||||||
{
|
{
|
||||||
_eqp_mt
|
_eqp
|
||||||
std::map<std::string, std::map<std::string, std::string> >::iterator iter = vars.find(title);
|
std::map<std::string, std::map<std::string, std::string> >::iterator iter = vars.find(title);
|
||||||
if(iter != vars.end())
|
if(iter != vars.end())
|
||||||
{
|
{
|
||||||
@ -47,7 +46,7 @@ std::string Config::GetVariable(std::string title, std::string parameter)
|
|||||||
*/
|
*/
|
||||||
void Config::Parse(const char *file_name)
|
void Config::Parse(const char *file_name)
|
||||||
{
|
{
|
||||||
_eqp_mt
|
_eqp
|
||||||
if(file_name == nullptr)
|
if(file_name == nullptr)
|
||||||
{
|
{
|
||||||
Log.Out(Logs::Detail, Logs::Error, "Config::Parse(), file_name passed was null.");
|
Log.Out(Logs::Detail, Logs::Error, "Config::Parse(), file_name passed was null.");
|
||||||
@ -146,7 +145,7 @@ void Config::Parse(const char *file_name)
|
|||||||
*/
|
*/
|
||||||
void Config::Tokenize(FILE *input, std::list<std::string> &tokens)
|
void Config::Tokenize(FILE *input, std::list<std::string> &tokens)
|
||||||
{
|
{
|
||||||
_eqp_mt
|
_eqp
|
||||||
char c = fgetc(input);
|
char c = fgetc(input);
|
||||||
std::string lexeme;
|
std::string lexeme;
|
||||||
|
|
||||||
|
|||||||
@ -20,7 +20,6 @@
|
|||||||
|
|
||||||
#ifdef EQEMU_MYSQL_ENABLED
|
#ifdef EQEMU_MYSQL_ENABLED
|
||||||
#include "database_mysql.h"
|
#include "database_mysql.h"
|
||||||
#include "error_log.h"
|
|
||||||
#include "login_server.h"
|
#include "login_server.h"
|
||||||
#include "../common/eqemu_logsys.h"
|
#include "../common/eqemu_logsys.h"
|
||||||
|
|
||||||
@ -30,7 +29,7 @@ extern LoginServer server;
|
|||||||
|
|
||||||
DatabaseMySQL::DatabaseMySQL(string user, string pass, string host, string port, string name)
|
DatabaseMySQL::DatabaseMySQL(string user, string pass, string host, string port, string name)
|
||||||
{
|
{
|
||||||
_eqp_mt
|
_eqp
|
||||||
this->user = user;
|
this->user = user;
|
||||||
this->pass = pass;
|
this->pass = pass;
|
||||||
this->host = host;
|
this->host = host;
|
||||||
@ -56,7 +55,7 @@ DatabaseMySQL::DatabaseMySQL(string user, string pass, string host, string port,
|
|||||||
|
|
||||||
DatabaseMySQL::~DatabaseMySQL()
|
DatabaseMySQL::~DatabaseMySQL()
|
||||||
{
|
{
|
||||||
_eqp_mt
|
_eqp
|
||||||
if(db)
|
if(db)
|
||||||
{
|
{
|
||||||
mysql_close(db);
|
mysql_close(db);
|
||||||
@ -65,7 +64,7 @@ DatabaseMySQL::~DatabaseMySQL()
|
|||||||
|
|
||||||
bool DatabaseMySQL::GetLoginDataFromAccountName(string name, string &password, unsigned int &id)
|
bool DatabaseMySQL::GetLoginDataFromAccountName(string name, string &password, unsigned int &id)
|
||||||
{
|
{
|
||||||
_eqp_mt
|
_eqp
|
||||||
if(!db)
|
if(!db)
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
@ -104,7 +103,7 @@ bool DatabaseMySQL::GetLoginDataFromAccountName(string name, string &password, u
|
|||||||
bool DatabaseMySQL::GetWorldRegistration(string long_name, string short_name, unsigned int &id, string &desc, unsigned int &list_id,
|
bool DatabaseMySQL::GetWorldRegistration(string long_name, string short_name, unsigned int &id, string &desc, unsigned int &list_id,
|
||||||
unsigned int &trusted, string &list_desc, string &account, string &password)
|
unsigned int &trusted, string &list_desc, string &account, string &password)
|
||||||
{
|
{
|
||||||
_eqp_mt
|
_eqp
|
||||||
if(!db)
|
if(!db)
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
@ -180,7 +179,7 @@ bool DatabaseMySQL::GetWorldRegistration(string long_name, string short_name, un
|
|||||||
|
|
||||||
void DatabaseMySQL::UpdateLSAccountData(unsigned int id, string ip_address)
|
void DatabaseMySQL::UpdateLSAccountData(unsigned int id, string ip_address)
|
||||||
{
|
{
|
||||||
_eqp_mt
|
_eqp
|
||||||
if(!db)
|
if(!db)
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
@ -200,7 +199,7 @@ void DatabaseMySQL::UpdateLSAccountData(unsigned int id, string ip_address)
|
|||||||
|
|
||||||
void DatabaseMySQL::UpdateLSAccountInfo(unsigned int id, string name, string password, string email)
|
void DatabaseMySQL::UpdateLSAccountInfo(unsigned int id, string name, string password, string email)
|
||||||
{
|
{
|
||||||
_eqp_mt
|
_eqp
|
||||||
if(!db)
|
if(!db)
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
@ -220,7 +219,7 @@ void DatabaseMySQL::UpdateLSAccountInfo(unsigned int id, string name, string pas
|
|||||||
|
|
||||||
void DatabaseMySQL::UpdateWorldRegistration(unsigned int id, string long_name, string ip_address)
|
void DatabaseMySQL::UpdateWorldRegistration(unsigned int id, string long_name, string ip_address)
|
||||||
{
|
{
|
||||||
_eqp_mt
|
_eqp
|
||||||
if(!db)
|
if(!db)
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
@ -246,7 +245,7 @@ void DatabaseMySQL::UpdateWorldRegistration(unsigned int id, string long_name, s
|
|||||||
|
|
||||||
bool DatabaseMySQL::CreateWorldRegistration(string long_name, string short_name, unsigned int &id)
|
bool DatabaseMySQL::CreateWorldRegistration(string long_name, string short_name, unsigned int &id)
|
||||||
{
|
{
|
||||||
_eqp_mt
|
_eqp
|
||||||
if(!db)
|
if(!db)
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
|
|||||||
@ -30,7 +30,7 @@ extern LoginServer server;
|
|||||||
|
|
||||||
DatabasePostgreSQL::DatabasePostgreSQL(string user, string pass, string host, string port, string name)
|
DatabasePostgreSQL::DatabasePostgreSQL(string user, string pass, string host, string port, string name)
|
||||||
{
|
{
|
||||||
_eqp_mt_mt
|
_eqp_mt
|
||||||
db = nullptr;
|
db = nullptr;
|
||||||
db = PQsetdbLogin(host.c_str(), port.c_str(), nullptr, nullptr, name.c_str(), user.c_str(), pass.c_str());
|
db = PQsetdbLogin(host.c_str(), port.c_str(), nullptr, nullptr, name.c_str(), user.c_str(), pass.c_str());
|
||||||
if(!db)
|
if(!db)
|
||||||
@ -48,7 +48,7 @@ DatabasePostgreSQL::DatabasePostgreSQL(string user, string pass, string host, st
|
|||||||
|
|
||||||
DatabasePostgreSQL::~DatabasePostgreSQL()
|
DatabasePostgreSQL::~DatabasePostgreSQL()
|
||||||
{
|
{
|
||||||
_eqp_mt_mt
|
_eqp_mt
|
||||||
if(db)
|
if(db)
|
||||||
{
|
{
|
||||||
PQfinish(db);
|
PQfinish(db);
|
||||||
@ -57,7 +57,7 @@ DatabasePostgreSQL::~DatabasePostgreSQL()
|
|||||||
|
|
||||||
bool DatabasePostgreSQL::GetLoginDataFromAccountName(string name, string &password, unsigned int &id)
|
bool DatabasePostgreSQL::GetLoginDataFromAccountName(string name, string &password, unsigned int &id)
|
||||||
{
|
{
|
||||||
_eqp_mt_mt
|
_eqp_mt
|
||||||
if(!db)
|
if(!db)
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
@ -106,7 +106,7 @@ bool DatabasePostgreSQL::GetLoginDataFromAccountName(string name, string &passwo
|
|||||||
bool DatabasePostgreSQL::GetWorldRegistration(string long_name, string short_name, unsigned int &id, string &desc, unsigned int &list_id,
|
bool DatabasePostgreSQL::GetWorldRegistration(string long_name, string short_name, unsigned int &id, string &desc, unsigned int &list_id,
|
||||||
unsigned int &trusted, string &list_desc, string &account, string &password)
|
unsigned int &trusted, string &list_desc, string &account, string &password)
|
||||||
{
|
{
|
||||||
_eqp_mt_mt
|
_eqp_mt
|
||||||
if(!db)
|
if(!db)
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
@ -164,7 +164,7 @@ bool DatabasePostgreSQL::GetWorldRegistration(string long_name, string short_nam
|
|||||||
|
|
||||||
void DatabasePostgreSQL::UpdateLSAccountData(unsigned int id, string ip_address)
|
void DatabasePostgreSQL::UpdateLSAccountData(unsigned int id, string ip_address)
|
||||||
{
|
{
|
||||||
_eqp_mt_mt
|
_eqp_mt
|
||||||
if(!db)
|
if(!db)
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
@ -200,7 +200,7 @@ void DatabasePostgreSQL::UpdateLSAccountData(unsigned int id, string ip_address)
|
|||||||
|
|
||||||
void DatabasePostgreSQL::UpdateWorldRegistration(unsigned int id, string long_name, string ip_address)
|
void DatabasePostgreSQL::UpdateWorldRegistration(unsigned int id, string long_name, string ip_address)
|
||||||
{
|
{
|
||||||
_eqp_mt_mt
|
_eqp_mt
|
||||||
if(!db)
|
if(!db)
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
|
|||||||
@ -18,12 +18,11 @@
|
|||||||
#include "../common/global_define.h"
|
#include "../common/global_define.h"
|
||||||
#include "../common/eqemu_logsys.h"
|
#include "../common/eqemu_logsys.h"
|
||||||
#include "encryption.h"
|
#include "encryption.h"
|
||||||
#include "error_log.h"
|
|
||||||
#include <string>
|
#include <string>
|
||||||
|
|
||||||
bool Encryption::LoadCrypto(std::string name)
|
bool Encryption::LoadCrypto(std::string name)
|
||||||
{
|
{
|
||||||
_eqp_mt
|
_eqp
|
||||||
if(!Load(name.c_str()))
|
if(!Load(name.c_str()))
|
||||||
{
|
{
|
||||||
Log.Out(Logs::Detail, Logs::Error, "Failed to load %s from the operating system.", name.c_str());
|
Log.Out(Logs::Detail, Logs::Error, "Failed to load %s from the operating system.", name.c_str());
|
||||||
@ -58,7 +57,7 @@ bool Encryption::LoadCrypto(std::string name)
|
|||||||
|
|
||||||
char *Encryption::DecryptUsernamePassword(const char* encrypted_buffer, unsigned int buffer_size, int mode)
|
char *Encryption::DecryptUsernamePassword(const char* encrypted_buffer, unsigned int buffer_size, int mode)
|
||||||
{
|
{
|
||||||
_eqp_mt
|
_eqp
|
||||||
if(decrypt_func)
|
if(decrypt_func)
|
||||||
{
|
{
|
||||||
return decrypt_func(encrypted_buffer, buffer_size, mode);
|
return decrypt_func(encrypted_buffer, buffer_size, mode);
|
||||||
@ -68,7 +67,7 @@ char *Encryption::DecryptUsernamePassword(const char* encrypted_buffer, unsigned
|
|||||||
|
|
||||||
char *Encryption::Encrypt(const char* buffer, unsigned int buffer_size, unsigned int &out_size)
|
char *Encryption::Encrypt(const char* buffer, unsigned int buffer_size, unsigned int &out_size)
|
||||||
{
|
{
|
||||||
_eqp_mt
|
_eqp
|
||||||
if(encrypt_func)
|
if(encrypt_func)
|
||||||
{
|
{
|
||||||
return encrypt_func(buffer, buffer_size, out_size);
|
return encrypt_func(buffer, buffer_size, out_size);
|
||||||
@ -78,7 +77,7 @@ char *Encryption::Encrypt(const char* buffer, unsigned int buffer_size, unsigned
|
|||||||
|
|
||||||
void Encryption::DeleteHeap(char *buffer)
|
void Encryption::DeleteHeap(char *buffer)
|
||||||
{
|
{
|
||||||
_eqp_mt
|
_eqp
|
||||||
if(delete_func)
|
if(delete_func)
|
||||||
{
|
{
|
||||||
delete_func(buffer);
|
delete_func(buffer);
|
||||||
@ -87,7 +86,7 @@ void Encryption::DeleteHeap(char *buffer)
|
|||||||
|
|
||||||
bool Encryption::Load(const char *name)
|
bool Encryption::Load(const char *name)
|
||||||
{
|
{
|
||||||
_eqp_mt
|
_eqp
|
||||||
SetLastError(0);
|
SetLastError(0);
|
||||||
#ifdef UNICODE
|
#ifdef UNICODE
|
||||||
int name_length = strlen(name);
|
int name_length = strlen(name);
|
||||||
@ -115,7 +114,7 @@ bool Encryption::Load(const char *name)
|
|||||||
|
|
||||||
void Encryption::Unload()
|
void Encryption::Unload()
|
||||||
{
|
{
|
||||||
_eqp_mt
|
_eqp
|
||||||
if(h_dll)
|
if(h_dll)
|
||||||
{
|
{
|
||||||
FreeLibrary(h_dll);
|
FreeLibrary(h_dll);
|
||||||
@ -125,7 +124,7 @@ void Encryption::Unload()
|
|||||||
|
|
||||||
bool Encryption::GetSym(const char *name, void **sym)
|
bool Encryption::GetSym(const char *name, void **sym)
|
||||||
{
|
{
|
||||||
_eqp_mt
|
_eqp
|
||||||
if(Loaded())
|
if(Loaded())
|
||||||
{
|
{
|
||||||
*sym = GetProcAddress(h_dll, name);
|
*sym = GetProcAddress(h_dll, name);
|
||||||
@ -139,7 +138,7 @@ bool Encryption::GetSym(const char *name, void **sym)
|
|||||||
|
|
||||||
void *Encryption::GetSym(const char *name)
|
void *Encryption::GetSym(const char *name)
|
||||||
{
|
{
|
||||||
_eqp_mt
|
_eqp
|
||||||
if(Loaded())
|
if(Loaded())
|
||||||
{
|
{
|
||||||
return GetProcAddress(h_dll, name);
|
return GetProcAddress(h_dll, name);
|
||||||
|
|||||||
@ -1,214 +0,0 @@
|
|||||||
/* EQEMu: Everquest Server Emulator
|
|
||||||
Copyright (C) 2001-2010 EQEMu Development Team (http://eqemulator.net)
|
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
|
||||||
it under the terms of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation; version 2 of the License.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY except by those people which sell it, which
|
|
||||||
are required to give you total support for your newly bought product;
|
|
||||||
without even the implied warranty of MERCHANTABILITY or FITNESS FOR
|
|
||||||
A PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
|
||||||
along with this program; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
||||||
*/
|
|
||||||
#include <string.h>
|
|
||||||
#include "error_log.h"
|
|
||||||
|
|
||||||
const char *eqLogTypes[_log_largest_type] =
|
|
||||||
{
|
|
||||||
"Debug",
|
|
||||||
"Error",
|
|
||||||
"Database",
|
|
||||||
"Network",
|
|
||||||
"Network Trace",
|
|
||||||
"Network Error",
|
|
||||||
"World",
|
|
||||||
"World Error",
|
|
||||||
"Client",
|
|
||||||
"Client Error"
|
|
||||||
};
|
|
||||||
|
|
||||||
ErrorLog::ErrorLog(const char* file_name)
|
|
||||||
{
|
|
||||||
_eqp_mt
|
|
||||||
log_mutex = new Mutex();
|
|
||||||
error_log = fopen(file_name, "w");
|
|
||||||
}
|
|
||||||
|
|
||||||
ErrorLog::~ErrorLog()
|
|
||||||
{
|
|
||||||
_eqp_mt
|
|
||||||
log_mutex->lock();
|
|
||||||
if(error_log)
|
|
||||||
{
|
|
||||||
fclose(error_log);
|
|
||||||
}
|
|
||||||
log_mutex->unlock();
|
|
||||||
delete log_mutex;
|
|
||||||
}
|
|
||||||
|
|
||||||
void ErrorLog::Log(eqLogType type, const char *message, ...)
|
|
||||||
{
|
|
||||||
_eqp_mt
|
|
||||||
if(type >= _log_largest_type)
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
va_list argptr;
|
|
||||||
char *buffer = new char[4096];
|
|
||||||
va_start(argptr, message);
|
|
||||||
vsnprintf(buffer, 4096, message, argptr);
|
|
||||||
va_end(argptr);
|
|
||||||
|
|
||||||
time_t m_clock;
|
|
||||||
struct tm *m_time;
|
|
||||||
time(&m_clock);
|
|
||||||
m_time = localtime(&m_clock);
|
|
||||||
|
|
||||||
log_mutex->lock();
|
|
||||||
printf("[%s] [%02d.%02d.%02d - %02d:%02d:%02d] %s\n",
|
|
||||||
eqLogTypes[type],
|
|
||||||
m_time->tm_mon+1,
|
|
||||||
m_time->tm_mday,
|
|
||||||
m_time->tm_year%100,
|
|
||||||
m_time->tm_hour,
|
|
||||||
m_time->tm_min,
|
|
||||||
m_time->tm_sec,
|
|
||||||
buffer);
|
|
||||||
|
|
||||||
if(error_log)
|
|
||||||
{
|
|
||||||
fprintf(error_log, "[%s] [%02d.%02d.%02d - %02d:%02d:%02d] %s\n",
|
|
||||||
eqLogTypes[type],
|
|
||||||
m_time->tm_mon+1,
|
|
||||||
m_time->tm_mday,
|
|
||||||
m_time->tm_year%100,
|
|
||||||
m_time->tm_hour,
|
|
||||||
m_time->tm_min,
|
|
||||||
m_time->tm_sec,
|
|
||||||
buffer);
|
|
||||||
fflush(error_log);
|
|
||||||
}
|
|
||||||
|
|
||||||
log_mutex->unlock();
|
|
||||||
delete[] buffer;
|
|
||||||
}
|
|
||||||
|
|
||||||
void ErrorLog::LogPacket(eqLogType type, const char *data, size_t size)
|
|
||||||
{
|
|
||||||
_eqp_mt
|
|
||||||
if(type >= _log_largest_type)
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
log_mutex->lock();
|
|
||||||
time_t m_clock;
|
|
||||||
struct tm *m_time;
|
|
||||||
time(&m_clock);
|
|
||||||
m_time = localtime(&m_clock);
|
|
||||||
|
|
||||||
log_mutex->lock();
|
|
||||||
printf("[%s] [%02d.%02d.%02d - %02d:%02d:%02d] dumping packet of size %u:\n",
|
|
||||||
eqLogTypes[type],
|
|
||||||
m_time->tm_mon+1,
|
|
||||||
m_time->tm_mday,
|
|
||||||
m_time->tm_year%100,
|
|
||||||
m_time->tm_hour,
|
|
||||||
m_time->tm_min,
|
|
||||||
m_time->tm_sec,
|
|
||||||
(unsigned int)size);
|
|
||||||
|
|
||||||
if(error_log)
|
|
||||||
{
|
|
||||||
fprintf(error_log, "[%s] [%02d.%02d.%02d - %02d:%02d:%02d] dumping packet of size %u\n",
|
|
||||||
eqLogTypes[type],
|
|
||||||
m_time->tm_mon+1,
|
|
||||||
m_time->tm_mday,
|
|
||||||
m_time->tm_year%100,
|
|
||||||
m_time->tm_hour,
|
|
||||||
m_time->tm_min,
|
|
||||||
m_time->tm_sec,
|
|
||||||
(unsigned int)size);
|
|
||||||
}
|
|
||||||
|
|
||||||
char ascii[17]; //16 columns + 1 null term
|
|
||||||
memset(ascii, 0, 17);
|
|
||||||
|
|
||||||
size_t j = 0;
|
|
||||||
size_t i = 0;
|
|
||||||
for(; i < size; ++i)
|
|
||||||
{
|
|
||||||
if(i % 16 == 0)
|
|
||||||
{
|
|
||||||
if(i != 0)
|
|
||||||
{
|
|
||||||
printf(" | %s\n", ascii);
|
|
||||||
if(error_log)
|
|
||||||
{
|
|
||||||
fprintf(error_log, " | %s\n", ascii);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
printf("%.4u: ", (unsigned int)i);
|
|
||||||
memset(ascii, 0, 17);
|
|
||||||
j = 0;
|
|
||||||
}
|
|
||||||
else if(i % 8 == 0)
|
|
||||||
{
|
|
||||||
printf("- ");
|
|
||||||
if(error_log)
|
|
||||||
{
|
|
||||||
fprintf(error_log, "- ");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
printf("%02X ", (unsigned int)data[i]);
|
|
||||||
if(error_log)
|
|
||||||
{
|
|
||||||
fprintf(error_log, "%02X ", (unsigned int)data[i]);
|
|
||||||
}
|
|
||||||
|
|
||||||
if(data[i] >= 32 && data[i] < 127)
|
|
||||||
{
|
|
||||||
ascii[j++] = data[i];
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
ascii[j++] = '.';
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
size_t k = (i - 1) % 16;
|
|
||||||
if(k < 8)
|
|
||||||
{
|
|
||||||
printf(" ");
|
|
||||||
if(error_log)
|
|
||||||
{
|
|
||||||
fprintf(error_log, " ");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for(size_t h = k + 1; h < 16; ++h)
|
|
||||||
{
|
|
||||||
printf(" ");
|
|
||||||
if(error_log)
|
|
||||||
{
|
|
||||||
fprintf(error_log, " ");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
printf(" | %s\n", ascii);
|
|
||||||
if(error_log)
|
|
||||||
{
|
|
||||||
fprintf(error_log, " | %s\n", ascii);
|
|
||||||
fflush(error_log);
|
|
||||||
}
|
|
||||||
|
|
||||||
log_mutex->unlock();
|
|
||||||
}
|
|
||||||
|
|
||||||
@ -1,79 +0,0 @@
|
|||||||
/* EQEMu: Everquest Server Emulator
|
|
||||||
Copyright (C) 2001-2010 EQEMu Development Team (http://eqemulator.net)
|
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
|
||||||
it under the terms of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation; version 2 of the License.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY except by those people which sell it, which
|
|
||||||
are required to give you total support for your newly bought product;
|
|
||||||
without even the implied warranty of MERCHANTABILITY or FITNESS FOR
|
|
||||||
A PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
|
||||||
along with this program; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
||||||
*/
|
|
||||||
#ifndef EQEMU_ERROR_LOG_H
|
|
||||||
#define EQEMU_ERROR_LOG_H
|
|
||||||
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <stdarg.h>
|
|
||||||
#include <time.h>
|
|
||||||
#include <string>
|
|
||||||
|
|
||||||
#include "../common/mutex.h"
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Dictates the log type specified in ErrorLog for Log(...)
|
|
||||||
*/
|
|
||||||
enum eqLogType
|
|
||||||
{
|
|
||||||
log_debug,
|
|
||||||
log_error,
|
|
||||||
log_database,
|
|
||||||
log_network,
|
|
||||||
log_network_trace,
|
|
||||||
log_network_error,
|
|
||||||
log_world,
|
|
||||||
log_world_error,
|
|
||||||
log_client,
|
|
||||||
log_client_error,
|
|
||||||
_log_largest_type
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Basic error logging class.
|
|
||||||
* Thread safe logging class that records time and date to both a file and to console(if exists).
|
|
||||||
*/
|
|
||||||
class ErrorLog
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
/**
|
|
||||||
* Constructor: opens the log file for writing and creates our mutex for writing to the log.
|
|
||||||
*/
|
|
||||||
ErrorLog(const char* file_name);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Closes the file and destroys the mutex.
|
|
||||||
*/
|
|
||||||
~ErrorLog();
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Writes to the log system a variable message.
|
|
||||||
*/
|
|
||||||
void Log(eqLogType type, const char *message, ...);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Writes to the log system a packet.
|
|
||||||
*/
|
|
||||||
void LogPacket(eqLogType type, const char *data, size_t size);
|
|
||||||
|
|
||||||
protected:
|
|
||||||
Mutex *log_mutex;
|
|
||||||
FILE* error_log;
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
@ -18,7 +18,6 @@
|
|||||||
#ifndef EQEMU_LOGINSERVER_H
|
#ifndef EQEMU_LOGINSERVER_H
|
||||||
#define EQEMU_LOGINSERVER_H
|
#define EQEMU_LOGINSERVER_H
|
||||||
|
|
||||||
#include "error_log.h"
|
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
#include "database.h"
|
#include "database.h"
|
||||||
#include "database_mysql.h"
|
#include "database_mysql.h"
|
||||||
|
|||||||
@ -49,7 +49,7 @@ void CatchSignal(int sig_num)
|
|||||||
|
|
||||||
std::ofstream profile_out(prof_name, std::ofstream::out);
|
std::ofstream profile_out(prof_name, std::ofstream::out);
|
||||||
if(profile_out.good()) {
|
if(profile_out.good()) {
|
||||||
EQP::CPU::MT::GetProfiler().Dump(profile_out, 5);
|
EQP::CPU::ST::GetProfiler().Dump(profile_out, 10);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|||||||
@ -17,7 +17,6 @@
|
|||||||
*/
|
*/
|
||||||
#include "server_manager.h"
|
#include "server_manager.h"
|
||||||
#include "login_server.h"
|
#include "login_server.h"
|
||||||
#include "error_log.h"
|
|
||||||
#include "login_structures.h"
|
#include "login_structures.h"
|
||||||
#include "../common/eqemu_logsys.h"
|
#include "../common/eqemu_logsys.h"
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
@ -27,7 +26,7 @@ extern bool run_server;
|
|||||||
|
|
||||||
ServerManager::ServerManager()
|
ServerManager::ServerManager()
|
||||||
{
|
{
|
||||||
_eqp_mt
|
_eqp
|
||||||
char error_buffer[TCPConnection_ErrorBufferSize];
|
char error_buffer[TCPConnection_ErrorBufferSize];
|
||||||
|
|
||||||
int listen_port = atoi(server.config->GetVariable("options", "listen_port").c_str());
|
int listen_port = atoi(server.config->GetVariable("options", "listen_port").c_str());
|
||||||
@ -45,7 +44,7 @@ ServerManager::ServerManager()
|
|||||||
|
|
||||||
ServerManager::~ServerManager()
|
ServerManager::~ServerManager()
|
||||||
{
|
{
|
||||||
_eqp_mt
|
_eqp
|
||||||
if(tcps)
|
if(tcps)
|
||||||
{
|
{
|
||||||
tcps->Close();
|
tcps->Close();
|
||||||
@ -55,7 +54,7 @@ ServerManager::~ServerManager()
|
|||||||
|
|
||||||
void ServerManager::Process()
|
void ServerManager::Process()
|
||||||
{
|
{
|
||||||
_eqp_mt
|
_eqp
|
||||||
ProcessDisconnect();
|
ProcessDisconnect();
|
||||||
EmuTCPConnection *tcp_c = nullptr;
|
EmuTCPConnection *tcp_c = nullptr;
|
||||||
while(tcp_c = tcps->NewQueuePop())
|
while(tcp_c = tcps->NewQueuePop())
|
||||||
@ -97,7 +96,7 @@ void ServerManager::Process()
|
|||||||
|
|
||||||
void ServerManager::ProcessDisconnect()
|
void ServerManager::ProcessDisconnect()
|
||||||
{
|
{
|
||||||
_eqp_mt
|
_eqp
|
||||||
list<WorldServer*>::iterator iter = world_servers.begin();
|
list<WorldServer*>::iterator iter = world_servers.begin();
|
||||||
while(iter != world_servers.end())
|
while(iter != world_servers.end())
|
||||||
{
|
{
|
||||||
@ -120,7 +119,7 @@ void ServerManager::ProcessDisconnect()
|
|||||||
|
|
||||||
WorldServer* ServerManager::GetServerByAddress(unsigned int address)
|
WorldServer* ServerManager::GetServerByAddress(unsigned int address)
|
||||||
{
|
{
|
||||||
_eqp_mt
|
_eqp
|
||||||
list<WorldServer*>::iterator iter = world_servers.begin();
|
list<WorldServer*>::iterator iter = world_servers.begin();
|
||||||
while(iter != world_servers.end())
|
while(iter != world_servers.end())
|
||||||
{
|
{
|
||||||
@ -136,7 +135,7 @@ WorldServer* ServerManager::GetServerByAddress(unsigned int address)
|
|||||||
|
|
||||||
EQApplicationPacket *ServerManager::CreateServerListPacket(Client *c)
|
EQApplicationPacket *ServerManager::CreateServerListPacket(Client *c)
|
||||||
{
|
{
|
||||||
_eqp_mt
|
_eqp
|
||||||
unsigned int packet_size = sizeof(ServerListHeader_Struct);
|
unsigned int packet_size = sizeof(ServerListHeader_Struct);
|
||||||
unsigned int server_count = 0;
|
unsigned int server_count = 0;
|
||||||
in_addr in;
|
in_addr in;
|
||||||
@ -274,7 +273,7 @@ EQApplicationPacket *ServerManager::CreateServerListPacket(Client *c)
|
|||||||
|
|
||||||
void ServerManager::SendUserToWorldRequest(unsigned int server_id, unsigned int client_account_id)
|
void ServerManager::SendUserToWorldRequest(unsigned int server_id, unsigned int client_account_id)
|
||||||
{
|
{
|
||||||
_eqp_mt
|
_eqp
|
||||||
list<WorldServer*>::iterator iter = world_servers.begin();
|
list<WorldServer*>::iterator iter = world_servers.begin();
|
||||||
bool found = false;
|
bool found = false;
|
||||||
while(iter != world_servers.end())
|
while(iter != world_servers.end())
|
||||||
@ -305,7 +304,7 @@ void ServerManager::SendUserToWorldRequest(unsigned int server_id, unsigned int
|
|||||||
|
|
||||||
bool ServerManager::ServerExists(string l_name, string s_name, WorldServer *ignore)
|
bool ServerManager::ServerExists(string l_name, string s_name, WorldServer *ignore)
|
||||||
{
|
{
|
||||||
_eqp_mt
|
_eqp
|
||||||
list<WorldServer*>::iterator iter = world_servers.begin();
|
list<WorldServer*>::iterator iter = world_servers.begin();
|
||||||
while(iter != world_servers.end())
|
while(iter != world_servers.end())
|
||||||
{
|
{
|
||||||
@ -327,7 +326,7 @@ bool ServerManager::ServerExists(string l_name, string s_name, WorldServer *igno
|
|||||||
|
|
||||||
void ServerManager::DestroyServerByName(string l_name, string s_name, WorldServer *ignore)
|
void ServerManager::DestroyServerByName(string l_name, string s_name, WorldServer *ignore)
|
||||||
{
|
{
|
||||||
_eqp_mt
|
_eqp
|
||||||
list<WorldServer*>::iterator iter = world_servers.begin();
|
list<WorldServer*>::iterator iter = world_servers.begin();
|
||||||
while(iter != world_servers.end())
|
while(iter != world_servers.end())
|
||||||
{
|
{
|
||||||
|
|||||||
@ -16,7 +16,6 @@
|
|||||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
*/
|
*/
|
||||||
#include "world_server.h"
|
#include "world_server.h"
|
||||||
#include "error_log.h"
|
|
||||||
#include "login_server.h"
|
#include "login_server.h"
|
||||||
#include "login_structures.h"
|
#include "login_structures.h"
|
||||||
#include "../common/eqemu_logsys.h"
|
#include "../common/eqemu_logsys.h"
|
||||||
@ -25,7 +24,7 @@ extern LoginServer server;
|
|||||||
|
|
||||||
WorldServer::WorldServer(EmuTCPConnection *c)
|
WorldServer::WorldServer(EmuTCPConnection *c)
|
||||||
{
|
{
|
||||||
_eqp_mt
|
_eqp
|
||||||
connection = c;
|
connection = c;
|
||||||
zones_booted = 0;
|
zones_booted = 0;
|
||||||
players_online = 0;
|
players_online = 0;
|
||||||
@ -40,7 +39,7 @@ WorldServer::WorldServer(EmuTCPConnection *c)
|
|||||||
|
|
||||||
WorldServer::~WorldServer()
|
WorldServer::~WorldServer()
|
||||||
{
|
{
|
||||||
_eqp_mt
|
_eqp
|
||||||
if(connection)
|
if(connection)
|
||||||
{
|
{
|
||||||
connection->Free();
|
connection->Free();
|
||||||
@ -49,7 +48,7 @@ WorldServer::~WorldServer()
|
|||||||
|
|
||||||
void WorldServer::Reset()
|
void WorldServer::Reset()
|
||||||
{
|
{
|
||||||
_eqp_mt
|
_eqp
|
||||||
zones_booted = 0;
|
zones_booted = 0;
|
||||||
players_online = 0;
|
players_online = 0;
|
||||||
status = 0;
|
status = 0;
|
||||||
@ -62,7 +61,7 @@ void WorldServer::Reset()
|
|||||||
|
|
||||||
bool WorldServer::Process()
|
bool WorldServer::Process()
|
||||||
{
|
{
|
||||||
_eqp_mt
|
_eqp
|
||||||
ServerPacket *app = nullptr;
|
ServerPacket *app = nullptr;
|
||||||
while(app = connection->PopPacket())
|
while(app = connection->PopPacket())
|
||||||
{
|
{
|
||||||
@ -241,7 +240,7 @@ bool WorldServer::Process()
|
|||||||
|
|
||||||
void WorldServer::Handle_NewLSInfo(ServerNewLSInfo_Struct* i)
|
void WorldServer::Handle_NewLSInfo(ServerNewLSInfo_Struct* i)
|
||||||
{
|
{
|
||||||
_eqp_mt
|
_eqp
|
||||||
if(logged_in)
|
if(logged_in)
|
||||||
{
|
{
|
||||||
Log.Out(Logs::General, Logs::Netcode, "WorldServer::Handle_NewLSInfo called but the login server was already marked as logged in, aborting.");
|
Log.Out(Logs::General, Logs::Netcode, "WorldServer::Handle_NewLSInfo called but the login server was already marked as logged in, aborting.");
|
||||||
@ -506,7 +505,7 @@ void WorldServer::Handle_NewLSInfo(ServerNewLSInfo_Struct* i)
|
|||||||
|
|
||||||
void WorldServer::Handle_LSStatus(ServerLSStatus_Struct *s)
|
void WorldServer::Handle_LSStatus(ServerLSStatus_Struct *s)
|
||||||
{
|
{
|
||||||
_eqp_mt
|
_eqp
|
||||||
players_online = s->num_players;
|
players_online = s->num_players;
|
||||||
zones_booted = s->num_zones;
|
zones_booted = s->num_zones;
|
||||||
status = s->status;
|
status = s->status;
|
||||||
@ -514,7 +513,7 @@ void WorldServer::Handle_LSStatus(ServerLSStatus_Struct *s)
|
|||||||
|
|
||||||
void WorldServer::SendClientAuth(unsigned int ip, string account, string key, unsigned int account_id)
|
void WorldServer::SendClientAuth(unsigned int ip, string account, string key, unsigned int account_id)
|
||||||
{
|
{
|
||||||
_eqp_mt
|
_eqp
|
||||||
ServerPacket *outapp = new ServerPacket(ServerOP_LSClientAuth, sizeof(ServerLSClientAuth));
|
ServerPacket *outapp = new ServerPacket(ServerOP_LSClientAuth, sizeof(ServerLSClientAuth));
|
||||||
ServerLSClientAuth* slsca = (ServerLSClientAuth*)outapp->pBuffer;
|
ServerLSClientAuth* slsca = (ServerLSClientAuth*)outapp->pBuffer;
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user