optimized resource usage, avoid unnecessary casts, formatting
This commit is contained in:
+36
-33
@@ -164,7 +164,6 @@ void MainLoop::run() {
|
|||||||
(*it)->start();
|
(*it)->start();
|
||||||
}
|
}
|
||||||
while (true) {
|
while (true) {
|
||||||
string result;
|
|
||||||
// pick the next message to handle
|
// pick the next message to handle
|
||||||
NetMessage* netMessage = m_netQueue.pop(taskDelay);
|
NetMessage* netMessage = m_netQueue.pop(taskDelay);
|
||||||
time(&now);
|
time(&now);
|
||||||
@@ -263,39 +262,37 @@ void MainLoop::run() {
|
|||||||
if (!listening) {
|
if (!listening) {
|
||||||
since = now;
|
since = now;
|
||||||
}
|
}
|
||||||
|
ostringstream ostream;
|
||||||
bool connected = true;
|
bool connected = true;
|
||||||
if (request.length() > 0) {
|
if (request.length() > 0) {
|
||||||
logDebug(lf_main, ">>> %s", request.c_str());
|
logDebug(lf_main, ">>> %s", request.c_str());
|
||||||
result = decodeMessage(request, netMessage->isHttp(), connected, listening, reload);
|
ostream << decodeMessage(request, netMessage->isHttp(), connected, listening, reload);
|
||||||
|
|
||||||
if (result.length() == 0 && !netMessage->isHttp()) {
|
if (ostream.tellp() == 0 && !netMessage->isHttp()) {
|
||||||
result = getResultCode(RESULT_EMPTY);
|
ostream << getResultCode(RESULT_EMPTY);
|
||||||
}
|
}
|
||||||
if (result.length() > 100) {
|
if (ostream.tellp() > 100) {
|
||||||
logDebug(lf_main, "<<< %s ...", result.substr(0, 100).c_str());
|
logDebug(lf_main, "<<< %s ...", ostream.str().substr(0, 100).c_str());
|
||||||
} else {
|
} else {
|
||||||
logDebug(lf_main, "<<< %s", result.c_str());
|
logDebug(lf_main, "<<< %s", ostream.str().c_str());
|
||||||
}
|
}
|
||||||
if (result.length() == 0) {
|
if (ostream.tellp() == 0) {
|
||||||
result = "\n"; // only for HTTP
|
ostream << "\n"; // only for HTTP
|
||||||
} else if (!netMessage->isHttp()) {
|
} else if (!netMessage->isHttp()) {
|
||||||
result += "\n\n";
|
ostream << "\n\n";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (listening) {
|
if (listening) {
|
||||||
messages = m_messages->findAll("", "", false, true, true, true, false, true, since, now);
|
messages = m_messages->findAll("", "", false, true, true, true, false, true, since, now);
|
||||||
updates.str("");
|
|
||||||
updates.clear();
|
|
||||||
for (deque<Message*>::iterator it = messages.begin(); it != messages.end(); it++) {
|
for (deque<Message*>::iterator it = messages.begin(); it != messages.end(); it++) {
|
||||||
Message* message = *it;
|
Message* message = *it;
|
||||||
updates << message->getCircuit() << " " << message->getName() << " = " << dec;
|
ostream << message->getCircuit() << " " << message->getName() << " = " << dec;
|
||||||
message->decodeLastData(updates);
|
message->decodeLastData(ostream);
|
||||||
updates << endl;
|
ostream << endl;
|
||||||
}
|
}
|
||||||
result += updates.str();
|
|
||||||
}
|
}
|
||||||
// send result to client
|
// send result to client
|
||||||
netMessage->setResult(result, listening, now, !connected);
|
netMessage->setResult(ostream.str(), listening, now, !connected);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1130,9 +1127,9 @@ string MainLoop::executeState(vector<string> &args) {
|
|||||||
if (m_busHandler->hasSignal()) {
|
if (m_busHandler->hasSignal()) {
|
||||||
ostringstream result;
|
ostringstream result;
|
||||||
result << "signal acquired, "
|
result << "signal acquired, "
|
||||||
<< static_cast<unsigned>(m_busHandler->getSymbolRate()) << " symbols/sec ("
|
<< m_busHandler->getSymbolRate() << " symbols/sec ("
|
||||||
<< static_cast<unsigned>(m_busHandler->getMaxSymbolRate()) << " max), "
|
<< m_busHandler->getMaxSymbolRate() << " max), "
|
||||||
<< static_cast<unsigned>(m_busHandler->getMasterCount()) << " masters";
|
<< m_busHandler->getMasterCount() << " masters";
|
||||||
return result.str();
|
return result.str();
|
||||||
}
|
}
|
||||||
return "no signal";
|
return "no signal";
|
||||||
@@ -1290,16 +1287,16 @@ string MainLoop::executeInfo(vector<string> &args) {
|
|||||||
result << "version: " << PACKAGE_STRING "." REVISION "\n";
|
result << "version: " << PACKAGE_STRING "." REVISION "\n";
|
||||||
if (m_busHandler->hasSignal()) {
|
if (m_busHandler->hasSignal()) {
|
||||||
result << "signal: acquired\n";
|
result << "signal: acquired\n";
|
||||||
result << "symbol rate: " << static_cast<unsigned>(m_busHandler->getSymbolRate()) << "\n";
|
result << "symbol rate: " << m_busHandler->getSymbolRate() << "\n";
|
||||||
} else {
|
} else {
|
||||||
result << "signal: no signal\n";
|
result << "signal: no signal\n";
|
||||||
}
|
}
|
||||||
result << "reconnects: " << static_cast<unsigned>(m_reconnectCount) << "\n";
|
result << "reconnects: " << m_reconnectCount << "\n";
|
||||||
result << "masters: " << static_cast<unsigned>(m_busHandler->getMasterCount()) << "\n";
|
result << "masters: " << m_busHandler->getMasterCount() << "\n";
|
||||||
result << "messages: " << static_cast<unsigned>(m_messages->size()) << "\n";
|
result << "messages: " << m_messages->size() << "\n";
|
||||||
result << "conditional: " << static_cast<unsigned>(m_messages->sizeConditional()) << "\n";
|
result << "conditional: " << m_messages->sizeConditional() << "\n";
|
||||||
result << "poll: " << static_cast<unsigned>(m_messages->sizePoll()) << "\n";
|
result << "poll: " << m_messages->sizePoll() << "\n";
|
||||||
result << "update: " << static_cast<unsigned>(m_messages->sizePassive());
|
result << "update: " << m_messages->sizePassive();
|
||||||
m_busHandler->formatSeenInfo(result);
|
m_busHandler->formatSeenInfo(result);
|
||||||
return result.str();
|
return result.str();
|
||||||
}
|
}
|
||||||
@@ -1398,13 +1395,15 @@ string MainLoop::executeGet(vector<string> &args, bool& connected) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
deque<Message*> messages = m_messages->findAll(circuit, name, exact, true, false, true);
|
|
||||||
|
|
||||||
bool first = true;
|
|
||||||
result << "{";
|
result << "{";
|
||||||
string lastCircuit = "";
|
string lastCircuit = "";
|
||||||
time_t maxLastUp = 0;
|
time_t maxLastUp = 0;
|
||||||
for (deque<Message*>::iterator it = messages.begin(); ret == RESULT_OK && it != messages.end();) {
|
if (ret == RESULT_OK) {
|
||||||
|
deque<Message *> messages = m_messages->findAll(circuit, name, exact, true, false, true);
|
||||||
|
|
||||||
|
bool first = true;
|
||||||
|
for (deque<Message*>::iterator it = messages.begin(); it != messages.end();) {
|
||||||
Message* message = *it++;
|
Message* message = *it++;
|
||||||
unsigned char dstAddress = message->getDstAddress();
|
unsigned char dstAddress = message->getDstAddress();
|
||||||
if (dstAddress == SYN) {
|
if (dstAddress == SYN) {
|
||||||
@@ -1465,7 +1464,6 @@ string MainLoop::executeGet(vector<string> &args, bool& connected) {
|
|||||||
result << "\n }";
|
result << "\n }";
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ret == RESULT_OK) {
|
|
||||||
if (lastCircuit.length() > 0) {
|
if (lastCircuit.length() > 0) {
|
||||||
result << "\n },";
|
result << "\n },";
|
||||||
}
|
}
|
||||||
@@ -1476,7 +1474,10 @@ string MainLoop::executeGet(vector<string> &args, bool& connected) {
|
|||||||
result << "\n}";
|
result << "\n}";
|
||||||
type = 6;
|
type = 6;
|
||||||
}
|
}
|
||||||
} else {
|
connected = false;
|
||||||
|
return formatHttpResult(ret, result, type);
|
||||||
|
} // request for "/data/..."
|
||||||
|
|
||||||
if (uri.length() < 1 || uri[0] != '/' || uri.find("//") != string::npos || uri.find("..") != string::npos) {
|
if (uri.length() < 1 || uri[0] != '/' || uri.find("//") != string::npos || uri.find("..") != string::npos) {
|
||||||
ret = RESULT_ERR_INVALID_ARG;
|
ret = RESULT_ERR_INVALID_ARG;
|
||||||
} else {
|
} else {
|
||||||
@@ -1516,8 +1517,11 @@ string MainLoop::executeGet(vector<string> &args, bool& connected) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
connected = false;
|
||||||
|
return formatHttpResult(ret, result, type);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
string MainLoop::formatHttpResult(result_t ret, ostringstream& result, int type) {
|
||||||
string data = ret == RESULT_OK ? result.str() : "";
|
string data = ret == RESULT_OK ? result.str() : "";
|
||||||
result.str("");
|
result.str("");
|
||||||
result.clear();
|
result.clear();
|
||||||
@@ -1564,7 +1568,6 @@ string MainLoop::executeGet(vector<string> &args, bool& connected) {
|
|||||||
}
|
}
|
||||||
result << "\r\nServer: " PACKAGE_NAME "/" PACKAGE_VERSION "\r\n\r\n";
|
result << "\r\nServer: " PACKAGE_NAME "/" PACKAGE_VERSION "\r\n\r\n";
|
||||||
result << data;
|
result << data;
|
||||||
connected = false;
|
|
||||||
return result.str();
|
return result.str();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -208,6 +208,15 @@ class MainLoop : public Thread, DeviceListener {
|
|||||||
*/
|
*/
|
||||||
string executeGet(vector<string> &args, bool& connected);
|
string executeGet(vector<string> &args, bool& connected);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Format the HTTP answer to the result string.
|
||||||
|
* @param ret the result code of handling the request.
|
||||||
|
* @param result the @a ostringstream containing the successful result.
|
||||||
|
* @param type the content type.
|
||||||
|
* @return the result string.
|
||||||
|
*/
|
||||||
|
string formatHttpResult(result_t ret, ostringstream& result, int type);
|
||||||
|
|
||||||
/** the @a Device instance. */
|
/** the @a Device instance. */
|
||||||
Device* m_device;
|
Device* m_device;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user