fix m-m auto-answer response length and message search
This commit is contained in:
@@ -442,15 +442,17 @@ void BusHandler::notifyProtocolMessage(MessageDirection direction, const MasterS
|
|||||||
}
|
}
|
||||||
if (direction == md_answer) {
|
if (direction == md_answer) {
|
||||||
size_t idLen = command.getDataSize();
|
size_t idLen = command.getDataSize();
|
||||||
if (master && idLen >= response.size()) {
|
size_t resLen = response.getDataSize();
|
||||||
|
if (master && idLen >= resLen) {
|
||||||
// build MS auto-answer from MM with same ID
|
// build MS auto-answer from MM with same ID
|
||||||
SlaveSymbolString answer;
|
SlaveSymbolString answer;
|
||||||
answer.push_back(0); // room for length
|
answer.push_back(0); // room for length
|
||||||
idLen -= response.size();
|
idLen -= resLen;
|
||||||
for (size_t pos = idLen; pos < response.size(); pos++) {
|
for (size_t pos = idLen; pos < resLen; pos++) {
|
||||||
answer.push_back(command.dataAt(pos));
|
answer.push_back(command.dataAt(pos));
|
||||||
}
|
}
|
||||||
m_protocol->setAnswer(SYN, command[1], command[2], command[3], command.data() + 5, idLen, answer);
|
answer.adjustHeader();
|
||||||
|
m_protocol->setAnswer(SYN, getSlaveAddress(dstAddress), command[2], command[3], command.data() + 5, idLen, answer);
|
||||||
// TODO could use loaded messages for identifying MM/MS message pair
|
// TODO could use loaded messages for identifying MM/MS message pair
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1240,7 +1240,7 @@ result_t MainLoop::executeAnswer(const vector<string>& args, ostringstream* ostr
|
|||||||
if (answer.size() > 16) {
|
if (answer.size() > 16) {
|
||||||
return RESULT_ERR_INVALID_POS;
|
return RESULT_ERR_INVALID_POS;
|
||||||
}
|
}
|
||||||
answer[0] = (symbol_t)(answer.size()-1);
|
answer.adjustHeader();
|
||||||
}
|
}
|
||||||
if (argPos < args.size()) {
|
if (argPos < args.size()) {
|
||||||
argPos = 0; // print usage
|
argPos = 0; // print usage
|
||||||
|
|||||||
@@ -872,7 +872,7 @@ bool DirectProtocolHandler::getAnswer() {
|
|||||||
if (it != m_answerByKey.end()) {
|
if (it != m_answerByKey.end()) {
|
||||||
// found the answer
|
// found the answer
|
||||||
if (master) {
|
if (master) {
|
||||||
if (len+it->second.size() == m_command[4]) {
|
if (len+it->second.getDataSize() == m_command[4]) {
|
||||||
m_response = it->second; // copied for having the data size only
|
m_response = it->second; // copied for having the data size only
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@@ -881,7 +881,6 @@ bool DirectProtocolHandler::getAnswer() {
|
|||||||
m_response = it->second;
|
m_response = it->second;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
if (len == 0) {
|
if (len == 0) {
|
||||||
break;
|
break;
|
||||||
|
|||||||
Reference in New Issue
Block a user