+ if(msg_or_hex) {
+ std::string diameterXml = anna::json::functions::json2xml(diameterJson_or_Hex, success);
+ if (!success) {
+ response += "json to xml failed, unable to send message !";
+ return false;
+ }
+ codecMsg.loadXMLString(diameterXml);
+ try {
+ my_app.updateOperatedOriginHostWithMessage(codecMsg);
+ msg = my_app.getOperatedHost()->createCommMessage();
+ msg->clearBody();
+ }
+ catch(anna::RuntimeException &ex) {
+ ex.trace();
+ response += "invalid operated host";
+ return false;
+ }
+ try { codecMsg.valid(); } catch(anna::RuntimeException &ex) { ex.trace(); } // at least we need to see validation errors although it will continue sending (see validation mode configured in launcher)
+ msg->setBody(codecMsg.code());
+ } else {
+ // Get DataBlock from hex content:
+ anna::DataBlock db_aux(true);
+ std::string hexString = diameterJson_or_Hex;
+ hexString.erase(std::remove(hexString.begin(), hexString.end(), ':'), hexString.end());
+ LOGDEBUG(
+ std::string msg = "Hex string (remove colons if exists): ";
+ msg += hexString;
+ anna::Logger::debug(msg, ANNA_FILE_LOCATION);
+ );
+ anna::functions::fromHexString(hexString, db_aux); // could launch exception
+ try {
+ my_app.updateOperatedOriginHostWithMessage(db_aux);
+ msg = my_app.getOperatedHost()->createCommMessage();
+ }
+ catch(anna::RuntimeException &ex) {
+ ex.trace();
+ response += "invalid operated host";
+ return false;
+ }
+ msg->setBody(db_aux);
+ try { if(my_app.getOperatedHost()->logEnabled()) codecMsg.decode(db_aux); } catch(anna::RuntimeException &ex) { ex.trace(); }
+ }