if(infile.is_open()) {
infile >> buffer;
std::string hexString(buffer, strlen(buffer));
+ // Allow colon separator in hex string: we have to remove them before processing with 'fromHexString':
+ 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);
// Close file
infile.close();
}
a_burstActive = true;
- register int count;
+ int count;
for (count = 0; count < loadAmount; count++)
if (!sendBurstMessage()) break;
return -2;
}
- register int count;
+ int count;
for (count = 0; count < loadAmount; count++)
if (!sendBurstMessage(true /* anyway */)) break;
if (a_burstRepeat) {
a_burstCycle++;
- if (burstLogEnabled()) writeBurstLogFile(anna::functions::asString(("\nCompleted burst cycle. Starting again (repeat mode) on cycle %d.\n", a_burstCycle)));
+ if (burstLogEnabled()) writeBurstLogFile(anna::functions::asString("\nCompleted burst cycle. Starting again (repeat mode) on cycle %d.\n", a_burstCycle));
} else {
if (burstLogEnabled()) writeBurstLogFile("\nCompleted burst cycle. Burst finished (repeat mode disabled).\n");
result += "\nanswerxml|[source_file] Same as 'answerxml2c'.";
result += "\n List programmed answers if no parameter provided.";
result += "\n";
- result += "\nSame operations are available using hexadecimal content (hex formatted files) which also allow to test";
+ result += "\nSend operations are available using hexadecimal content (hex formatted files) which also allow to test";
result += "\nspecial scenarios (protocol errors):";
result += "\n";
result += "\nsendhex2e|<source_file> Sends hex source file (pathfile) through configured entity.";
result += "\nsendhex2c|<source_file> Sends hex source file (pathfile) to client.";
result += "\nsendhex|<source_file> Same as 'sendhex2e'.";
- result += "\nanswerhex2e|[source_file] Answer hex source file (pathfile) for corresponding request from entity.";
- result += "\nanswerhex2c|[source_file] Answer hex source file (pathfile) for corresponding request from client.";
- result += "\nanswerhex|[source_file] Same as 'answerhex2c'.";
- result += "\n List programmed answers if no parameter provided.";
result += "\n";
+ result += "\nAnswer programming in hexadecimal is not really neccessary (you could use send primitives) and also";
+ result += "\nis intended to be used with decoded messages in order to replace things like hop by hop, end to end,";
+ result += "\nsubscriber id, session id, etc.";
result += "\n";
- result += "\n";
- result += "\nIf a request is received, answer map (built with 'answerxml/hex<[2c] or 2e>' operations) will be";
+ result += "\nIf a request is received, answer map (built with 'answerxml<[2c] or 2e>' operations) will be";
result += "\n checked to find a corresponding programmed answer to be replied(*). If no ocurrence is found,";
result += "\n or answer message was received, the message is forwarded to the other side (entity or client),";
result += "\n or nothing but trace when no peer at that side is configured. Answer to client have sense when";
std::string address;
int port;
anna::functions::getAddressAndPortFromSocketLiteral(cl.getValue("httpServer"), address, port);
- //const anna::comm::Device* device = network.find(Device::asAddress(address)); // aqui hay que proporcionar una IP !
- const anna::comm::Device* device = *((network.resolve(address)->device_begin())); // ArtimaƱa para resolver (IP o hostname)
+ //const anna::comm::Device* device = network.find(Device::asAddress(address)); // here provide IP
+ const anna::comm::Device* device = *((network.resolve(address)->device_begin())); // trick to solve
a_httpServerSocket = new anna::comm::ServerSocket(anna::comm::INetAddress(device, port), cl.exists("httpServerShared") /* shared bind */, &anna::http::Transport::getFactory());
}
} else if (opType == "decode") {
// Get DataBlock from file with hex content:
if (!getDataBlockFromHexFile(param1, db_aux))
- throw anna::RuntimeException("Cannot interpret hexadecimal content from file provided", ANNA_FILE_LOCATION);
+ throw anna::RuntimeException("Error reading hex file provided", ANNA_FILE_LOCATION);
// Decode
try { G_codecMsg.decode(db_aux); } catch (anna::RuntimeException &ex) { ex.trace(); }
else {
// Get DataBlock from file with hex content:
if (!getDataBlockFromHexFile(param1, db_aux))
- throw anna::RuntimeException("Cannot interpret hexadecimal content from file provided", ANNA_FILE_LOCATION);
+ throw anna::RuntimeException("Error reading hex file provided", ANNA_FILE_LOCATION);
G_commMsgSent2e.setBody(db_aux);
}
throw anna::RuntimeException("Wrong body content format on HTTP Request for 'burst' operation (unexpected action parameter). See help", ANNA_FILE_LOCATION);
}
- } else if ((opType == "sendxml2c")||(opType == "sendhex2c")) {
+ } else if ((opType == "sendxml2c") || (opType == "sendhex2c")) {
anna::diameter::comm::LocalServer *localServer = getDiameterLocalServer();
if (!localServer) throw anna::RuntimeException("No local server configured to send the message", ANNA_FILE_LOCATION);
else {
// Get DataBlock from file with hex content:
if (!getDataBlockFromHexFile(param1, db_aux))
- throw anna::RuntimeException("Cannot interpret hexadecimal content from file provided", ANNA_FILE_LOCATION);
+ throw anna::RuntimeException("Error reading hex file provided", ANNA_FILE_LOCATION);
G_commMsgSent2c.setBody(db_aux);
}
response_content = "Programmed answers dumped on stdout\n";
return;
}
- } else if ((opType == "answerxml2e")) {
+ } else if (opType == "answerxml2e") {
anna::diameter::comm::Entity *entity = getEntity();
if (!entity)
response_content += param1;
response_content += "' programmed.";
response_content += "\n";
- } else if ((opType == "answerxml2e")) {
+ } else if (opType == "answerxml2e") {
response_content += "Answer to entity '";
response_content += param1;
response_content += "' programmed.";