SendHeaders converted to QueryDatabase

This commit is contained in:
Arthur Ice 2014-08-23 21:47:59 -07:00
parent 6e7136ea18
commit 2bdc44dfb2

View File

@ -288,110 +288,93 @@ void Database::SetChannelOwner(std::string channelName, std::string owner) {
} }
void Database::SendHeaders(Client *c) { void Database::SendHeaders(Client *client) {
int UnknownField2 = 25015275; int unknownField2 = 25015275;
int UnknownField3 = 1; int unknownField3 = 1;
int characterID = FindCharacter(client->MailBoxName().c_str());
int CharacterID = FindCharacter(c->MailBoxName().c_str()); _log(UCS__TRACE, "Sendheaders for %s, CharID is %i", client->MailBoxName().c_str(), characterID);
_log(UCS__TRACE, "Sendheaders for %s, CharID is %i", c->MailBoxName().c_str(), CharacterID);
if(CharacterID <= 0) if(characterID <= 0)
return; return;
std::string query = StringFormat("SELECT `msgid`,`timestamp`, `from`, `subject`, `status` "
"FROM `mail` WHERE `charid`=%i", characterID);
auto results = QueryDatabase(query);
if (!results.Success())
return;
char errbuf[MYSQL_ERRMSG_SIZE]; char buffer[100];
char* query = 0;
MYSQL_RES *result;
MYSQL_ROW row;
if (!RunQuery(query,MakeAnyLenString(&query, "select `msgid`,`timestamp`,`from`,`subject`, `status` from `mail` " int headerCountPacketLength = 0;
"where `charid`=%i", CharacterID),errbuf,&result)){
safe_delete_array(query); sprintf(buffer, "%i", client->GetMailBoxNumber());
headerCountPacketLength += (strlen(buffer) + 1);
return ; sprintf(buffer, "%i", unknownField2);
} headerCountPacketLength += (strlen(buffer) + 1);
safe_delete_array(query); sprintf(buffer, "%i", unknownField3);
headerCountPacketLength += (strlen(buffer) + 1);
char Buf[100]; sprintf(buffer, "%i", results.RowCount());
headerCountPacketLength += (strlen(buffer) + 1);
uint32 NumRows = mysql_num_rows(result); EQApplicationPacket *outapp = new EQApplicationPacket(OP_MailHeaderCount, headerCountPacketLength);
int HeaderCountPacketLength = 0; char *packetBuffer = (char *)outapp->pBuffer;
sprintf(Buf, "%i", c->GetMailBoxNumber()); VARSTRUCT_ENCODE_INTSTRING(packetBuffer, client->GetMailBoxNumber());
HeaderCountPacketLength += (strlen(Buf) + 1); VARSTRUCT_ENCODE_INTSTRING(packetBuffer, unknownField2);
VARSTRUCT_ENCODE_INTSTRING(packetBuffer, unknownField3);
sprintf(Buf, "%i", UnknownField2); VARSTRUCT_ENCODE_INTSTRING(packetBuffer, results.RowCount());
HeaderCountPacketLength += (strlen(Buf) + 1);
sprintf(Buf, "%i", UnknownField3);
HeaderCountPacketLength += (strlen(Buf) + 1);
sprintf(Buf, "%i", NumRows);
HeaderCountPacketLength += (strlen(Buf) + 1);
EQApplicationPacket *outapp = new EQApplicationPacket(OP_MailHeaderCount, HeaderCountPacketLength);
char *PacketBuffer = (char *)outapp->pBuffer;
VARSTRUCT_ENCODE_INTSTRING(PacketBuffer, c->GetMailBoxNumber());
VARSTRUCT_ENCODE_INTSTRING(PacketBuffer, UnknownField2);
VARSTRUCT_ENCODE_INTSTRING(PacketBuffer, UnknownField3);
VARSTRUCT_ENCODE_INTSTRING(PacketBuffer, NumRows);
_pkt(UCS__PACKETS, outapp); _pkt(UCS__PACKETS, outapp);
c->QueuePacket(outapp); client->QueuePacket(outapp);
safe_delete(outapp); safe_delete(outapp);
int RowNum = 0; int rowIndex = 0;
for(auto row = results.begin(); row != results.end(); ++row, ++rowIndex) {
int headerPacketLength = 0;
while((row = mysql_fetch_row(result))) { sprintf(buffer, "%i", client->GetMailBoxNumber());
headerPacketLength += strlen(buffer) + 1;
sprintf(buffer, "%i", unknownField2);
headerPacketLength += strlen(buffer) + 1;
sprintf(buffer, "%i", rowIndex);
headerPacketLength += strlen(buffer) + 1;
headerPacketLength += strlen(row[0]) + 1;
headerPacketLength += strlen(row[1]) + 1;
headerPacketLength += strlen(row[4]) + 1;
headerPacketLength += GetMailPrefix().length() + strlen(row[2]) + 1;
headerPacketLength += strlen(row[3]) + 1;
int HeaderPacketLength = 0; outapp = new EQApplicationPacket(OP_MailHeader, headerPacketLength);
sprintf(Buf, "%i", c->GetMailBoxNumber()); packetBuffer = (char *)outapp->pBuffer;
HeaderPacketLength = HeaderPacketLength + strlen(Buf) + 1;
sprintf(Buf, "%i", UnknownField2);
HeaderPacketLength = HeaderPacketLength + strlen(Buf) + 1;
sprintf(Buf, "%i", RowNum);
HeaderPacketLength = HeaderPacketLength + strlen(Buf) + 1;
HeaderPacketLength = HeaderPacketLength + strlen(row[0]) + 1; VARSTRUCT_ENCODE_INTSTRING(packetBuffer, client->GetMailBoxNumber());
HeaderPacketLength = HeaderPacketLength + strlen(row[1]) + 1; VARSTRUCT_ENCODE_INTSTRING(packetBuffer, unknownField2);
HeaderPacketLength = HeaderPacketLength + strlen(row[4]) + 1; VARSTRUCT_ENCODE_INTSTRING(packetBuffer, rowIndex);
HeaderPacketLength = HeaderPacketLength + GetMailPrefix().length() + strlen(row[2]) + 1; VARSTRUCT_ENCODE_STRING(packetBuffer, row[0]);
HeaderPacketLength = HeaderPacketLength + strlen(row[3]) + 1; VARSTRUCT_ENCODE_STRING(packetBuffer, row[1]);
VARSTRUCT_ENCODE_STRING(packetBuffer, row[4]);
outapp = new EQApplicationPacket(OP_MailHeader, HeaderPacketLength); VARSTRUCT_ENCODE_STRING(packetBuffer, GetMailPrefix().c_str());
packetBuffer--;
PacketBuffer = (char *)outapp->pBuffer; VARSTRUCT_ENCODE_STRING(packetBuffer, row[2]);
VARSTRUCT_ENCODE_STRING(packetBuffer, row[3]);
VARSTRUCT_ENCODE_INTSTRING(PacketBuffer, c->GetMailBoxNumber());
VARSTRUCT_ENCODE_INTSTRING(PacketBuffer, UnknownField2);
VARSTRUCT_ENCODE_INTSTRING(PacketBuffer, RowNum);
VARSTRUCT_ENCODE_STRING(PacketBuffer, row[0]);
VARSTRUCT_ENCODE_STRING(PacketBuffer, row[1]);
VARSTRUCT_ENCODE_STRING(PacketBuffer, row[4]);
VARSTRUCT_ENCODE_STRING(PacketBuffer, GetMailPrefix().c_str()); PacketBuffer--;
VARSTRUCT_ENCODE_STRING(PacketBuffer, row[2]);
VARSTRUCT_ENCODE_STRING(PacketBuffer, row[3]);
_pkt(UCS__PACKETS, outapp); _pkt(UCS__PACKETS, outapp);
c->QueuePacket(outapp); client->QueuePacket(outapp);
safe_delete(outapp); safe_delete(outapp);
RowNum++;
} }
mysql_free_result(result);
} }
void Database::SendBody(Client *c, int MessageNumber) { void Database::SendBody(Client *c, int MessageNumber) {