+ anna::diameter::codec::Message diameterCER(getBaseProtocolCodecEngine());
+ try {
+ diameterCER.loadXMLFile(cerPathfile);
+ } catch(anna::RuntimeException &ex) {
+ anna::Logger::error("CER file not found or unable to parse. Nothing done !", ANNA_FILE_LOCATION);
+ return;
+ }
+
+ // Assignment for internal encoded version:
+ setClientCER(diameterCER.code());
+}
+
+void comm::Engine::setClientDWR(const std::string & dwrPathfile) noexcept(false) {
+
+ // Check for base protocol codec engine health:
+ assertBaseProtocolHealth();
+
+ anna::diameter::codec::Message diameterDWR(getBaseProtocolCodecEngine());
+ std::string OH = getOriginHostName();
+ std::string OR = getOriginRealmName();
+
+ if (!dwrPathfile.empty()) {
+ try {
+ diameterDWR.loadXMLFile(dwrPathfile);
+ } catch(anna::RuntimeException &ex) {
+ anna::Logger::error("DWR file not found or unable to parse. Nothing done !", ANNA_FILE_LOCATION);
+ return;
+ }
+ }
+
+ // DEFAULT VERSION:
+ // Build DWR
+ // <DWR> ::= < Diameter Header: 280, REQ >
+ // { Origin-Host }
+ // { Origin-Realm }
+ diameterDWR.setId(anna::diameter::helpers::base::COMMANDID__Device_Watchdog_Request);
+ diameterDWR.setApplicationId(0); // base protocol
+ diameterDWR.addAvp(anna::diameter::helpers::base::AVPID__Origin_Host)->getDiameterIdentity()->setValue(OH);
+ diameterDWR.addAvp(anna::diameter::helpers::base::AVPID__Origin_Realm)->getDiameterIdentity()->setValue(OR);
+
+ // Assignment for internal encoded version:
+ setClientDWR(diameterDWR.code());
+}
+
+void comm::Engine::setClientCER(const anna::U32 &applicationId) noexcept(false) {
+
+ // Check for base protocol codec engine health:
+ assertBaseProtocolHealth();
+
+ // Build CER
+ // <CER> ::= < Diameter Header: 257, REQ >
+ // { Origin-Host } 264 diameterIdentity
+ // { Origin-Realm } 296 idem
+ // 1* { Host-IP-Address } 257, address
+ // { Vendor-Id } 266 Unsigned32
+ // { Product-Name } 269 UTF8String
+ // [Origin-State-Id] 278 Unsigned32
+ // * [ Supported-Vendor-Id ] 265 Unsigned32
+ // * [ Auth-Application-Id ] 258 Unsigned32
+ // * [Acct-Application-Id] 259 Unsigned32
+ anna::diameter::codec::Message diameterCER(getBaseProtocolCodecEngine());
+ std::string OH = getOriginHostName();
+ std::string OR = getOriginRealmName();
+ std::string hostIP = anna::functions::getHostnameIP(); // Address
+ int vendorId = anna::diameter::helpers::VENDORID__tgpp; // Unsigned32
+ std::string productName = "ANNA Diameter Client"; // UTF8String
+
+ diameterCER.setId(anna::diameter::helpers::base::COMMANDID__Capabilities_Exchange_Request);
+ diameterCER.setApplicationId(0); // base protocol
+ diameterCER.addAvp(anna::diameter::helpers::base::AVPID__Origin_Host)->getDiameterIdentity()->setValue(OH);
+ diameterCER.addAvp(anna::diameter::helpers::base::AVPID__Origin_Realm)->getDiameterIdentity()->setValue(OR);
+ diameterCER.addAvp(anna::diameter::helpers::base::AVPID__Host_IP_Address)->getAddress()->fromPrintableString(hostIP.c_str()); // supported by Address class, anyway is better to provide "1|<ip address>"
+ diameterCER.addAvp(anna::diameter::helpers::base::AVPID__Vendor_Id)->getUnsigned32()->setValue(vendorId);
+ diameterCER.addAvp(anna::diameter::helpers::base::AVPID__Product_Name)->getUTF8String()->setValue(productName);
+ diameterCER.addAvp(anna::diameter::helpers::base::AVPID__Auth_Application_Id)->getUnsigned32()->setValue(applicationId);
+
+ // Assignment for internal encoded versions:
+ setClientCER(diameterCER.code());
+}
+
+void comm::Engine::setWatchdogPeriod(const anna::Millisecond & wp) noexcept(false) {