X-Git-Url: https://git.teslayout.com/public/public/public/?a=blobdiff_plain;f=example%2Fdiameter%2Ftme%2Fmain.cpp;h=fdfe996bbbbdaf8e9aebe15bf2e968ddb517c09c;hb=1f560cfaaea555f037a99a6790eade56434eb119;hp=567cf8aae580049c7ceee4e8aedc6044d0eea6db;hpb=884501d2411bc4fdfafae65948262c959e068d7d;p=anna.git diff --git a/example/diameter/tme/main.cpp b/example/diameter/tme/main.cpp index 567cf8a..fdfe996 100644 --- a/example/diameter/tme/main.cpp +++ b/example/diameter/tme/main.cpp @@ -1,3 +1,11 @@ +// ANNA - Anna is Not Nothingness Anymore // +// // +// (c) Copyright 2005-2015 Eduardo Ramos Testillano & Francisco Ruiz Rayo // +// // +// See project site at http://redmine.teslayout.com/projects/anna-suite // +// See accompanying file LICENSE or copy at http://www.teslayout.com/projects/public/anna.LICENSE // + + // Standard #include #include @@ -8,26 +16,36 @@ #include #include #include -#include #include #include +#include +#include + + +typedef anna::diameter::codec::tme::Message tmeMessage; +typedef anna::diameter::codec::tme::Avp tmeAvp; + void _exit(const std::string & msg) { - std::cout << std::endl << msg << std::endl; - exit(-1); + std::cout << std::endl << msg << std::endl; + exit(-1); } std::string exec_cmd(const char* cmd) { FILE* pipe = popen(cmd, "r"); - if (!pipe) return ""; + + if(!pipe) return ""; + char buffer[128]; std::string result = ""; + while(!feof(pipe)) { if(fgets(buffer, 128, pipe) != NULL) result += buffer; } + pclose(pipe); return result; } @@ -37,13 +55,13 @@ int main(int argc, char** argv) { Logger::initialize("tme", new TraceWriter("file.trace", 2048000)); anna::time::functions::initialize(); // before application instantiation (it have a anna::time object) anna::time::functions::setControlPoint(); // start control point (application lifetime) - anna::diameter::stack::Engine & engine = anna::diameter::stack::Engine::instantiate(); + anna::diameter::stack::Engine & stackEngine = anna::diameter::stack::Engine::instantiate(); anna::diameter::stack::Dictionary *dictionary; std::string exec = argv[0]; std::string param = argv[1] ? argv[1] : ""; - if (param == "") { - std::string msg = "Use: "; msg += exec; msg += " "; + if(argc < 2) { + std::string msg = "Usage: "; msg += exec; msg += " "; msg += "\n xml directory: contains the xml files needed, which are:"; msg += "\n"; msg += "\n avps_ietf.xml"; @@ -54,102 +72,77 @@ int main(int argc, char** argv) { msg += "\n"; msg += "\n For example: "; msg += exec; msg += " "; std::string projectRoot = exec_cmd("git rev-parse --show-toplevel"); - if (projectRoot != "") { + + if(projectRoot != "") { //projectRoot.resize(projectRoot.size()-1); - projectRoot.erase(projectRoot.size()-1); + projectRoot.erase(projectRoot.size() - 1); msg += projectRoot; msg += "/"; } msg += "source/diameter/stack/setups"; - _exit(msg); } try { - dictionary = engine.createDictionary(0 /* general unique stack id */); + dictionary = stackEngine.createDictionary(0 /* general unique stack id */); dictionary->allowUpdates(); dictionary->load(param + "/avps_ietf.xml"); dictionary->load(param + "/avps_etsi.xml"); dictionary->load(param + "/avps_tgpp.xml"); dictionary->load(param + "/avps_tme.xml"); dictionary->load(param + "/commands_dccaOCS-CS_HuaweiNGIN_de-es.xml"); - // Trace: - LOGINFORMATION(Logger::information(engine.asString(), ANNA_FILE_LOCATION)); + LOGINFORMATION(Logger::information(stackEngine.asString(), ANNA_FILE_LOCATION)); LOGDEBUG(Logger::debug(dictionary->asString(), ANNA_FILE_LOCATION)); - - } catch (anna::RuntimeException &ex) { + } catch(anna::RuntimeException &ex) { ex.trace(); std::cout << ex.getText() << std::endl; } - - anna::diameter::codec::Message ccr; - ccr.setId("Credit-Control-Request"); - - //LOGDEBUG(Logger::debug(ccr.asXMLString(), ANNA_FILE_LOCATION)); -/* - - tmeAvp *sid = (tmeAvp*)ccr.addAvp("Session-Id"); - tmeAvp *ohst = (tmeAvp*)ccr.addAvp("Origin-Host"); - tmeAvp *orlm = (tmeAvp*)ccr.addAvp("Origin-Realm"); - - sid->getUTF8String()->setValue("grump.example.com:33041;23432;893;0AF3B81"); + // Build CCA + anna::diameter::codec::Engine *codecEngine = new anna::diameter::codec::Engine("TME Engine", dictionary); + LOGDEBUG(Logger::debug(codecEngine->asString(), ANNA_FILE_LOCATION)); + tmeMessage cca(codecEngine); + cca.setId("Credit-Control-Answer"); + tmeAvp *sid = (tmeAvp*)cca.addAvp("Session-Id"); + tmeAvp *ohst = (tmeAvp*)cca.addAvp("Origin-Host"); + tmeAvp *orlm = (tmeAvp*)cca.addAvp("Origin-Realm"); + sid->getUTF8String()->setValue("grump.example.com:33041;23432;893;0AF3B81"); ohst->getDiameterIdentity()->setValue("c0-10-70-238-74-w5p1vepg1.vepc.ericsson.se"); orlm->getDiameterIdentity()->setValue("vepc.ericsson.se"); -*/ -/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*/ - - _exit("Open 'file.trace' in order to see the stacks loaded"); + int inRange = 65535; + int outRange = inRange + 1; + //((tmeAvp*)cca.addAvp("CS-Result-Code"))->getUnsigned16()->setValue(inRange); + ((tmeAvp*)cca.addAvp("CS-Result-Code"))->getUnsigned16()->setValue(outRange); // WILL BE 0 !! + /* + + + + + + + + + + + + + + + + + + + + + + + + + + */ + LOGDEBUG(Logger::debug(cca.asXMLString(), ANNA_FILE_LOCATION)); + _exit("Open 'file.trace' in order to see traces"); }