Add nlohmann/json parser
[anna.git] / include / anna / diameter / codec / Message.hpp
index e7edc85..41ebe0a 100644 (file)
@@ -223,7 +223,8 @@ public:
   /**
   * Destructor
   */
-  ~Message();
+  virtual ~Message();
+
   // Virtual destructors are useful when you can delete an instance of a derived class through a pointer to base class:
   // This destructor is not virtual, then a pointer to base class (even pointing to a children one) will invoke this destructor, not the derived one.
   // My current solution: virtualizing method 'clear'
@@ -553,7 +554,18 @@ public:
    *
    * @param xmlPathFile Complete path file to the xml document which represents the diameter message
    */
-  void loadXML(const std::string &xmlPathFile) throw(anna::RuntimeException);
+  void loadXMLFile(const std::string &xmlPathFile) throw(anna::RuntimeException);
+
+  /**
+   * Interpret a xml string in order to create a diameter message
+   * You could apply this multiple times over the same object. A basic cleanup is done respecting the codec engine.
+   *
+   * @see functions::messageXmlDocumentFromXmlString
+   * @see fromXML
+   *
+   * @param xmlString xml representation of the diameter message
+   */
+  void loadXMLString(const std::string &xmlString) throw(anna::RuntimeException);
 
 
   // getters
@@ -747,13 +759,13 @@ public:
      for example, the pattern '<avp name="Framed-IP-Address" hex-data="0a[A-Fa-f0-9][A-Fa-f0-9]0a0a"/>'
      matchs IP addresses for '10.x.10.10' where x = [0..255].
 
-     Note that string pattern could also be generated via #loadXML and then #asXML, that is to say, you
+     Note that string pattern could also be generated via #loadXMLFile/#loadXMLString and then #asXML, thus, you
      could get patterns through xml files which act as conditional triggers over message. In that case,
      it is not possible to specify regular expressions within xml 'hex-data' fields because parser will fail
      during hexadecimal read. Normally only printable 'data' fields are used for matching issues.
 
      For example, imagine a 'pattern.xml' file like:
-     <message version="1" name="Credit-Control-Request" application-id="16777236" hop-by-hop-id="0" end-by-end-id="0">
+     <message version="1" name="Credit-Control-Request" application-id="16777236" hop-by-hop-id="0" end-to-end-id="0">
         <avp name="Subscription-Id">
            <avp name="Subscription-Id-Type" data="0" alias="END_USER_E164"/>
            <avp name="Subscription-Id-Data" data="616[0-9]{6,6}"/>
@@ -763,7 +775,7 @@ public:
      Then you could do:
 
      anna::diameter::codec::Message patternMessage;
-     patternMessage.loadXML("pattern.xml");
+     patternMessage.loadXMLFile("pattern.xml");
      std::string pattern = patternMessage.getAvp("Subscription-Id")->getAvp("Subscription-Id-Type")->asXMLString();
      // Former is '<avp name="Subscription-Id-Data" data="616[0-9]{6,6}"/>'
      bool match = incomingMessage.isLike(pattern);