|
INET Framework for OMNeT++/OMNEST
|
#include <MessageChecker.h>
|
| void | initialize () override |
| |
| void | handleMessage (cMessage *msg) override |
| |
| void | checkMessage (cMessage *msg) |
| |
| void | forwardMessage (cMessage *msg) |
| |
| void | finish () override |
| |
| void | checkFields (any_ptr object, cClassDescriptor *descriptor, const cXMLElementList &msgPattern) const |
| |
| void | checkFieldValue (any_ptr object, cClassDescriptor *descriptor, int field, cXMLAttributeMap &attr, int i=0) const |
| |
| void | checkFieldObject (any_ptr object, cClassDescriptor *descriptor, int field, cXMLAttributeMap &attr, const cXMLElement &pattern, int i=0) const |
| |
| int | checkFieldArray (any_ptr object, cClassDescriptor *descriptor, int field, cXMLAttributeMap &attr) const |
| |
| void | checkFieldValueInArray (any_ptr object, cClassDescriptor *descriptor, int field, cXMLAttributeMap &attr) const |
| |
| void | checkFieldObjectInArray (any_ptr object, cClassDescriptor *descriptor, int field, cXMLAttributeMap &attr, const cXMLElement &pattern) const |
| |
| void | checkFieldType (any_ptr object, cClassDescriptor *descriptor, int field, cXMLAttributeMap &attrList, int i=0) const |
| |
| int | findFieldIndex (any_ptr object, cClassDescriptor *descriptor, const std::string &fieldName) const |
| |
◆ MessageChecker()
| inet::MessageChecker::MessageChecker |
( |
| ) |
|
◆ checkFieldArray()
| int inet::MessageChecker::checkFieldArray |
( |
any_ptr |
object, |
|
|
cClassDescriptor * |
descriptor, |
|
|
int |
field, |
|
|
cXMLAttributeMap & |
attr |
|
) |
| const |
|
protected |
132 if (!descriptor->getFieldIsArray(field))
133 throw cRuntimeError(
"The field \"%s\" in message %d isn't an array", attr[
"name"].data(),
forwardedMsg);
136 int size = atol(attr[
"size"].data());
137 int fieldSize = descriptor->getFieldArraySize(
object, field);
138 if (size != fieldSize)
139 throw cRuntimeError(
"Field array \"%s\" contains %d element(s) (and not %d) in message %d",
Referenced by checkFieldObjectInArray(), checkFields(), and checkFieldValueInArray().
◆ checkFieldObject()
| void inet::MessageChecker::checkFieldObject |
( |
any_ptr |
object, |
|
|
cClassDescriptor * |
descriptor, |
|
|
int |
field, |
|
|
cXMLAttributeMap & |
attr, |
|
|
const cXMLElement & |
pattern, |
|
|
int |
i = 0 |
|
) |
| const |
|
protected |
120 any_ptr obj = descriptor->getFieldStructValuePointer(
object, field, i);
123 cClassDescriptor *descr = descriptor->getFieldIsCObject(field) ?
124 cClassDescriptor::getDescriptorFor(fromAnyPtr<cObject>(obj)) :
125 cClassDescriptor::getDescriptorFor(descriptor->getFieldStructName(field));
Referenced by checkFieldObjectInArray(), and checkFields().
◆ checkFieldObjectInArray()
| void inet::MessageChecker::checkFieldObjectInArray |
( |
any_ptr |
object, |
|
|
cClassDescriptor * |
descriptor, |
|
|
int |
field, |
|
|
cXMLAttributeMap & |
attr, |
|
|
const cXMLElement & |
pattern |
|
) |
| const |
|
protected |
164 int i = atol(attr[
"index"].data());
167 throw cRuntimeError(
"Field \"%s\" in message %d has no entry for index %d", attr[
"name"].data(),
forwardedMsg, i);
Referenced by checkFields().
◆ checkFields()
| void inet::MessageChecker::checkFields |
( |
any_ptr |
object, |
|
|
cClassDescriptor * |
descriptor, |
|
|
const cXMLElementList & |
msgPattern |
|
) |
| const |
|
protected |
70 cXMLElementList::const_iterator iter = msgPattern.begin();
71 while (iter != msgPattern.end()) {
72 const cXMLElement& pattern = **iter;
73 cXMLAttributeMap attr = pattern.getAttributes();
74 std::string patternType(pattern.getTagName());
83 if (patternType ==
"fieldValue")
85 else if (patternType ==
"fieldObject")
87 else if (patternType ==
"fieldArray")
89 else if (patternType ==
"fieldValueInArray")
91 else if (patternType ==
"fieldObjectInArray")
Referenced by checkFieldObject(), and checkMessage().
◆ checkFieldType()
| void inet::MessageChecker::checkFieldType |
( |
any_ptr |
object, |
|
|
cClassDescriptor * |
descriptor, |
|
|
int |
field, |
|
|
cXMLAttributeMap & |
attrList, |
|
|
int |
i = 0 |
|
) |
| const |
|
protected |
177 if (descriptor->getFieldIsCObject(field))
178 type = fromAnyPtr<cObject>(descriptor->getFieldStructValuePointer(
object, field, i))->getClassName();
180 type = descriptor->getFieldTypeString(field);
182 if (
type != attr[
"type"])
183 throw cRuntimeError(
"Type mismatch for field \"%s\" in message %d (\"%s\" != \"%s\")",
Referenced by checkFields().
◆ checkFieldValue()
| void inet::MessageChecker::checkFieldValue |
( |
any_ptr |
object, |
|
|
cClassDescriptor * |
descriptor, |
|
|
int |
field, |
|
|
cXMLAttributeMap & |
attr, |
|
|
int |
i = 0 |
|
) |
| const |
|
protected |
101 std::string value = descriptor->getFieldValueAsString(
object, field, i);
104 if (descriptor->getFieldProperty(field,
"enum")) {
105 cEnum *enm =
cEnum::find(descriptor->getFieldProperty(field,
"enum"));
107 value = enm->getStringFor(atol(value.c_str()));
111 if (value.find(attr[
"value"]) != 0)
113 throw cRuntimeError(
"Mismatch: field \"%s\" in the message %d (\"%s\" != \"%s\")",
114 attr[
"name"].data(),
forwardedMsg, value.data(), attr[
"value"].data());
Referenced by checkFields(), and checkFieldValueInArray().
◆ checkFieldValueInArray()
| void inet::MessageChecker::checkFieldValueInArray |
( |
any_ptr |
object, |
|
|
cClassDescriptor * |
descriptor, |
|
|
int |
field, |
|
|
cXMLAttributeMap & |
attr |
|
) |
| const |
|
protected |
150 int i = atol(attr[
"index"].data());
153 throw cRuntimeError(
"Field \"%s\" in message %d has no entry for index %d", attr[
"name"].data(),
forwardedMsg, i);
Referenced by checkFields().
◆ checkMessage()
| void inet::MessageChecker::checkMessage |
( |
cMessage * |
msg | ) |
|
|
protected |
44 cXMLElement& messagePattern = **
m_iterChk;
46 if (std::string(messagePattern.getTagName()) ==
"message" && messagePattern.hasAttributes()) {
47 int occurence = atol(messagePattern.getAttribute(
"occurence"));
49 if (messagePattern.hasChildren())
53 std::ostringstream occur_str;
54 occur_str << occurence;
55 messagePattern.setAttribute(
"occurence", occur_str.str().data());
Referenced by handleMessage().
◆ findFieldIndex()
| int inet::MessageChecker::findFieldIndex |
( |
any_ptr |
object, |
|
|
cClassDescriptor * |
descriptor, |
|
|
const std::string & |
fieldName |
|
) |
| const |
|
protected |
189 std::ostringstream availableFields;
190 for (
int i = 0; i < descriptor->getFieldCount(); i++) {
191 availableFields << descriptor->getFieldName(i) <<
", ";
192 if (std::string(descriptor->getFieldName(i)) == fieldName)
196 throw cRuntimeError(
"Unknown field \"%s\" in message %d\nAvailable fields in \"%s\" are : %s"
197 , fieldName.data(),
forwardedMsg, descriptor->getClassName(), availableFields.str().data());
Referenced by checkFields().
◆ finish()
| void inet::MessageChecker::finish |
( |
| ) |
|
|
overrideprotected |
219 throw cRuntimeError(
"Several message(s) have to be checked");
◆ forwardMessage()
| void inet::MessageChecker::forwardMessage |
( |
cMessage * |
msg | ) |
|
|
protected |
203 cGate *gateOut = gate(
"out");
204 cChannel *channel = gateOut->getChannel();
205 simtime_t now = simTime();
206 simtime_t endTransmissionTime = channel->getTransmissionFinishTime();
207 simtime_t delayToWait = 0;
208 if (endTransmissionTime > now)
209 delayToWait = endTransmissionTime - now;
210 sendDelayed(msg, delayToWait,
"out");
Referenced by handleMessage().
◆ handleMessage()
| void inet::MessageChecker::handleMessage |
( |
cMessage * |
msg | ) |
|
|
overrideprotected |
◆ initialize()
| void inet::MessageChecker::initialize |
( |
| ) |
|
|
overrideprotected |
23 cXMLElement *root = par(
"config");
24 if (std::string(root->getTagName()) ==
"checker") {
◆ checkedMsg
| unsigned inet::MessageChecker::checkedMsg |
|
protected |
◆ forwardedMsg
| unsigned inet::MessageChecker::forwardedMsg |
|
protected |
◆ m_checkingInfo
| cXMLElementList inet::MessageChecker::m_checkingInfo |
|
protected |
◆ m_iterChk
| cXMLElementList::iterator inet::MessageChecker::m_iterChk |
|
protected |
The documentation for this class was generated from the following files:
int findFieldIndex(any_ptr object, cClassDescriptor *descriptor, const std::string &fieldName) const
Definition: MessageChecker.cc:187
void checkFieldValueInArray(any_ptr object, cClassDescriptor *descriptor, int field, cXMLAttributeMap &attr) const
Definition: MessageChecker.cc:145
std::vector< T >::iterator find(std::vector< T > &v, const Tk &a)
Definition: stlutils.h:44
void checkFieldObjectInArray(any_ptr object, cClassDescriptor *descriptor, int field, cXMLAttributeMap &attr, const cXMLElement &pattern) const
Definition: MessageChecker.cc:159
void checkFields(any_ptr object, cClassDescriptor *descriptor, const cXMLElementList &msgPattern) const
Definition: MessageChecker.cc:67
void checkFieldValue(any_ptr object, cClassDescriptor *descriptor, int field, cXMLAttributeMap &attr, int i=0) const
Definition: MessageChecker.cc:98
void checkFieldType(any_ptr object, cClassDescriptor *descriptor, int field, cXMLAttributeMap &attrList, int i=0) const
Definition: MessageChecker.cc:173
removed type
Definition: IUdp-gates.txt:7
void forwardMessage(cMessage *msg)
Definition: MessageChecker.cc:201
cXMLElementList::iterator m_iterChk
Definition: MessageChecker.h:40
any_ptr toAnyPtr(const inet::ClockTime *p)
Definition: common/ClockTime.h:351
unsigned checkedMsg
Definition: MessageChecker.h:42
unsigned forwardedMsg
Definition: MessageChecker.h:41
int checkFieldArray(any_ptr object, cClassDescriptor *descriptor, int field, cXMLAttributeMap &attr) const
Definition: MessageChecker.cc:130
void checkFieldObject(any_ptr object, cClassDescriptor *descriptor, int field, cXMLAttributeMap &attr, const cXMLElement &pattern, int i=0) const
Definition: MessageChecker.cc:117
void checkMessage(cMessage *msg)
Definition: MessageChecker.cc:41
cXMLElementList m_checkingInfo
Definition: MessageChecker.h:39
bool containsKey(const std::map< K, V, _C > &m, const Tk &a)
Definition: stlutils.h:80