optimized resource usage, avoid unnecessary casts, formatting
This commit is contained in:
+36
-33
@@ -164,7 +164,6 @@ void MainLoop::run() {
|
||||
(*it)->start();
|
||||
}
|
||||
while (true) {
|
||||
string result;
|
||||
// pick the next message to handle
|
||||
NetMessage* netMessage = m_netQueue.pop(taskDelay);
|
||||
time(&now);
|
||||
@@ -263,39 +262,37 @@ void MainLoop::run() {
|
||||
if (!listening) {
|
||||
since = now;
|
||||
}
|
||||
ostringstream ostream;
|
||||
bool connected = true;
|
||||
if (request.length() > 0) {
|
||||
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()) {
|
||||
result = getResultCode(RESULT_EMPTY);
|
||||
if (ostream.tellp() == 0 && !netMessage->isHttp()) {
|
||||
ostream << getResultCode(RESULT_EMPTY);
|
||||
}
|
||||
if (result.length() > 100) {
|
||||
logDebug(lf_main, "<<< %s ...", result.substr(0, 100).c_str());
|
||||
if (ostream.tellp() > 100) {
|
||||
logDebug(lf_main, "<<< %s ...", ostream.str().substr(0, 100).c_str());
|
||||
} else {
|
||||
logDebug(lf_main, "<<< %s", result.c_str());
|
||||
logDebug(lf_main, "<<< %s", ostream.str().c_str());
|
||||
}
|
||||
if (result.length() == 0) {
|
||||
result = "\n"; // only for HTTP
|
||||
if (ostream.tellp() == 0) {
|
||||
ostream << "\n"; // only for HTTP
|
||||
} else if (!netMessage->isHttp()) {
|
||||
result += "\n\n";
|
||||
ostream << "\n\n";
|
||||
}
|
||||
}
|
||||
if (listening) {
|
||||
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++) {
|
||||
Message* message = *it;
|
||||
updates << message->getCircuit() << " " << message->getName() << " = " << dec;
|
||||
message->decodeLastData(updates);
|
||||
updates << endl;
|
||||
ostream << message->getCircuit() << " " << message->getName() << " = " << dec;
|
||||
message->decodeLastData(ostream);
|
||||
ostream << endl;
|
||||
}
|
||||
result += updates.str();
|
||||
}
|
||||
// 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()) {
|
||||
ostringstream result;
|
||||
result << "signal acquired, "
|
||||
<< static_cast<unsigned>(m_busHandler->getSymbolRate()) << " symbols/sec ("
|
||||
<< static_cast<unsigned>(m_busHandler->getMaxSymbolRate()) << " max), "
|
||||
<< static_cast<unsigned>(m_busHandler->getMasterCount()) << " masters";
|
||||
<< m_busHandler->getSymbolRate() << " symbols/sec ("
|
||||
<< m_busHandler->getMaxSymbolRate() << " max), "
|
||||
<< m_busHandler->getMasterCount() << " masters";
|
||||
return result.str();
|
||||
}
|
||||
return "no signal";
|
||||
@@ -1290,16 +1287,16 @@ string MainLoop::executeInfo(vector<string> &args) {
|
||||
result << "version: " << PACKAGE_STRING "." REVISION "\n";
|
||||
if (m_busHandler->hasSignal()) {
|
||||
result << "signal: acquired\n";
|
||||
result << "symbol rate: " << static_cast<unsigned>(m_busHandler->getSymbolRate()) << "\n";
|
||||
result << "symbol rate: " << m_busHandler->getSymbolRate() << "\n";
|
||||
} else {
|
||||
result << "signal: no signal\n";
|
||||
}
|
||||
result << "reconnects: " << static_cast<unsigned>(m_reconnectCount) << "\n";
|
||||
result << "masters: " << static_cast<unsigned>(m_busHandler->getMasterCount()) << "\n";
|
||||
result << "messages: " << static_cast<unsigned>(m_messages->size()) << "\n";
|
||||
result << "conditional: " << static_cast<unsigned>(m_messages->sizeConditional()) << "\n";
|
||||
result << "poll: " << static_cast<unsigned>(m_messages->sizePoll()) << "\n";
|
||||
result << "update: " << static_cast<unsigned>(m_messages->sizePassive());
|
||||
result << "reconnects: " << m_reconnectCount << "\n";
|
||||
result << "masters: " << m_busHandler->getMasterCount() << "\n";
|
||||
result << "messages: " << m_messages->size() << "\n";
|
||||
result << "conditional: " << m_messages->sizeConditional() << "\n";
|
||||
result << "poll: " << m_messages->sizePoll() << "\n";
|
||||
result << "update: " << m_messages->sizePassive();
|
||||
m_busHandler->formatSeenInfo(result);
|
||||
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 << "{";
|
||||
string lastCircuit = "";
|
||||
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++;
|
||||
unsigned char dstAddress = message->getDstAddress();
|
||||
if (dstAddress == SYN) {
|
||||
@@ -1465,7 +1464,6 @@ string MainLoop::executeGet(vector<string> &args, bool& connected) {
|
||||
result << "\n }";
|
||||
}
|
||||
|
||||
if (ret == RESULT_OK) {
|
||||
if (lastCircuit.length() > 0) {
|
||||
result << "\n },";
|
||||
}
|
||||
@@ -1476,7 +1474,10 @@ string MainLoop::executeGet(vector<string> &args, bool& connected) {
|
||||
result << "\n}";
|
||||
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) {
|
||||
ret = RESULT_ERR_INVALID_ARG;
|
||||
} 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() : "";
|
||||
result.str("");
|
||||
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 << data;
|
||||
connected = false;
|
||||
return result.str();
|
||||
}
|
||||
|
||||
|
||||
@@ -208,6 +208,15 @@ class MainLoop : public Thread, DeviceListener {
|
||||
*/
|
||||
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. */
|
||||
Device* m_device;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user