also store derived scan messages with circuit name extended by address on success

This commit is contained in:
john30
2016-01-03 11:23:26 +01:00
parent eb88c990f4
commit 62317ea47b
2 changed files with 32 additions and 12 deletions
+21 -10
View File
@@ -378,15 +378,25 @@ result_t Message::create(vector<string>::iterator& it, const vector<string>::ite
return RESULT_OK; return RESULT_OK;
} }
Message* Message::derive(const unsigned char dstAddress, unsigned char srcAddress) Message* Message::derive(const unsigned char dstAddress, const unsigned char srcAddress, const string circuit)
{ {
return new Message(m_circuit, m_name, m_isWrite, return new Message(circuit.length()==0 ? m_circuit : circuit, m_name,
m_isPassive, m_comment, m_isWrite, m_isPassive, m_comment,
srcAddress==SYN ? m_srcAddress : srcAddress, dstAddress, srcAddress==SYN ? m_srcAddress : srcAddress, dstAddress,
m_id, m_data, false, m_id, m_data, false,
m_pollPriority, m_condition); m_pollPriority, m_condition);
} }
Message* Message::derive(const unsigned char dstAddress, const bool extendCircuit)
{
if (extendCircuit) {
ostringstream out;
out << m_circuit << '.' << hex << setw(2) << setfill('0') << static_cast<unsigned>(dstAddress);
return derive(dstAddress, SYN, out.str());
}
return derive(dstAddress);
}
bool Message::checkIdPrefix(vector<unsigned char>& id) bool Message::checkIdPrefix(vector<unsigned char>& id)
{ {
if (id.size() > m_id.size()) if (id.size() > m_id.size())
@@ -746,11 +756,12 @@ ChainedMessage::~ChainedMessage()
free(m_lastSlaveUpdateTimes); free(m_lastSlaveUpdateTimes);
} }
Message* ChainedMessage::derive(const unsigned char dstAddress, unsigned char srcAddress) Message* ChainedMessage::derive(const unsigned char dstAddress, const unsigned char srcAddress, const string circuit)
{ {
return new ChainedMessage(m_circuit, m_name, m_isWrite, return new ChainedMessage(circuit.length()==0 ? m_circuit : circuit, m_name,
m_comment, srcAddress==SYN ? m_srcAddress : srcAddress, dstAddress, m_id, m_isWrite, m_comment,
m_ids, m_lengths, m_data, false, srcAddress==SYN ? m_srcAddress : srcAddress, dstAddress,
m_id, m_ids, m_lengths, m_data, false,
m_pollPriority, m_condition); m_pollPriority, m_condition);
} }
@@ -1075,7 +1086,7 @@ result_t SimpleCondition::resolve(MessageMap* messages, ostringstream& errorMess
unsigned long long key = message->getDerivedKey(m_dstAddress); unsigned long long key = message->getDerivedKey(m_dstAddress);
vector<Message*>* derived = messages->getByKey(key); vector<Message*>* derived = messages->getByKey(key);
if (derived==NULL) { if (derived==NULL) {
message = message->derive(m_dstAddress); message = message->derive(m_dstAddress, true);
messages->add(message); messages->add(message);
} else { } else {
message = getFirstAvailable(*derived, *message); message = getFirstAvailable(*derived, *message);
@@ -1349,8 +1360,8 @@ Message* MessageMap::getScanMessage(const unsigned char dstAddress)
vector<Message*>* msgs = getByKey(key); vector<Message*>* msgs = getByKey(key);
if (msgs!=NULL) if (msgs!=NULL)
return msgs->front(); return msgs->front();
Message* message = m_scanMessage->derive(dstAddress); Message* message = m_scanMessage->derive(dstAddress, true);
add(message, false); add(message);
return message; return message;
} }
+11 -2
View File
@@ -143,9 +143,18 @@ public:
* Derive a new @a Message from this message. * Derive a new @a Message from this message.
* @param dstAddress the new destination address. * @param dstAddress the new destination address.
* @param srcAddress the new source address, or @a SYN to keep the current source address. * @param srcAddress the new source address, or @a SYN to keep the current source address.
* @param circuit the new circuit name, or empty to use the current circuit name.
* @return the derived @a Message instance. * @return the derived @a Message instance.
*/ */
virtual Message* derive(const unsigned char dstAddress, unsigned char srcAddress=SYN); virtual Message* derive(const unsigned char dstAddress, const unsigned char srcAddress=SYN, const string circuit="");
/**
* Derive a new @a Message from this message.
* @param dstAddress the new destination address.
* @param extendCircuit whether to extend the current circuit name with a dot and the new destination address in hex.
* @return the derived @a Message instance.
*/
Message* derive(const unsigned char dstAddress, const bool extendCircuit);
/** /**
* Get the optional circuit name. * Get the optional circuit name.
@@ -548,7 +557,7 @@ public:
virtual ~ChainedMessage(); virtual ~ChainedMessage();
// @copydoc // @copydoc
virtual Message* derive(const unsigned char dstAddress, unsigned char srcAddress=SYN); virtual Message* derive(const unsigned char dstAddress, const unsigned char srcAddress=SYN, const string circuit="");
// @copydoc // @copydoc
virtual unsigned char getIdLength() const { return (unsigned char)(m_ids[0].size() - 2); } virtual unsigned char getIdLength() const { return (unsigned char)(m_ids[0].size() - 2); }