From 58ac4567a402d383c3edb0749b9f2fb88b8422d6 Mon Sep 17 00:00:00 2001 From: George Hazan Date: Sun, 25 Jan 2015 19:54:43 +0000 Subject: less pointers, less memory problems git-svn-id: http://svn.miranda-ng.org/main/trunk@11906 1316c22d-e87f-b044-9b9b-93d7a3e3ba9c --- .../WhatsApp/src/WhatsAPI++/BinTreeNodeWriter.cpp | 26 +++++++++------------- 1 file changed, 11 insertions(+), 15 deletions(-) (limited to 'protocols/WhatsApp/src/WhatsAPI++/BinTreeNodeWriter.cpp') diff --git a/protocols/WhatsApp/src/WhatsAPI++/BinTreeNodeWriter.cpp b/protocols/WhatsApp/src/WhatsAPI++/BinTreeNodeWriter.cpp index d4387278e1..a4f79baf17 100644 --- a/protocols/WhatsApp/src/WhatsAPI++/BinTreeNodeWriter.cpp +++ b/protocols/WhatsApp/src/WhatsAPI++/BinTreeNodeWriter.cpp @@ -10,15 +10,15 @@ #include "BinTreeNodeWriter.h" #include "utilities.h" -BinTreeNodeWriter::BinTreeNodeWriter(WAConnection* conn, ISocketConnection* connection, - const char** dictionary, const int dictionarysize, IMutex* mutex) +BinTreeNodeWriter::BinTreeNodeWriter(WAConnection* conn, ISocketConnection* connection, IMutex* mutex) { + this->bLoggedIn = false; this->mutex = mutex; this->conn = conn; this->out = new ByteArrayOutputStream(2048); this->realOut = connection; - for (int i = 0; i < dictionarysize; i++) { - std::string token(dictionary[i]); + for (int i = 0; i < WAConnection::DICTIONARY_LEN; i++) { + std::string token(WAConnection::dictionary[i]); if (token.compare("") != 0) this->tokenMap[token] = i; } @@ -34,26 +34,23 @@ void BinTreeNodeWriter::writeDummyHeader() this->out->setPosition(num2); } - void BinTreeNodeWriter::processBuffer() { - bool flag = this->conn->outputKey != NULL; unsigned int num = 0u; - if (flag) { + if (bLoggedIn) { long num2 = (long)this->out->getLength() + 4L; this->out->setLength(num2); this->out->setPosition(num2); num |= 1u; } long num3 = (long)this->out->getLength() - 3L - (long) this->dataBegin; - if (num3 >= 1048576L) { + if (num3 >= 1048576L) throw WAException("Buffer too large: " + num3, WAException::CORRUPT_STREAM_EX, 0); - } std::vector* buffer = this->out->getBuffer(); - if (flag) { + if (bLoggedIn) { int num4 = (int)num3 - 4; - this->conn->outputKey->encodeMessage(buffer->data(), this->dataBegin + 3 + num4, this->dataBegin + 3, num4); + this->conn->outputKey.encodeMessage(buffer->data(), this->dataBegin + 3 + num4, this->dataBegin + 3, num4); } (*buffer)[this->dataBegin] = (unsigned char)((unsigned long)((unsigned long)num << 4) | (unsigned long)((num3 & 16711680L) >> 16)); (*buffer)[this->dataBegin + 1] = (unsigned char)((num3 & 65280L) >> 8); @@ -156,12 +153,11 @@ void BinTreeNodeWriter::writeString(const std::string& tag) void BinTreeNodeWriter::writeJid(std::string* user, const std::string& server) { this->out->write(250); - if (user != NULL && !user->empty()) { + if (user != NULL && !user->empty()) writeString(*user); - } - else { + else writeToken(0); - } + writeString(server); } -- cgit v1.2.3