[AGENT++] patch to add an optional parameter to Oidx::as_string(boolean withLength=TRUE)

Claus Klein claus.klein at arcormail.de
Wed Aug 17 21:55:14 CEST 2011


Hi Frank,

I would like to be able to get the original string back from an Oidx  
without the default added strlen value.

As example, it should be possible to build an Oidx from a string and  
back with full control of the containing or implied strlen:

     const char * firstTestString = "context";
     const char * otherTestString = "XY";
     const char * testOidString = "1.3.6.1.6.3.13.1.2.1";
     Agentpp::Oidx IpaddressIndex("127.0.0.1");

     Agentpp::Oidx StringIndex =  
Agentpp::Oidx::from_string(firstTestString, true);  // add the len,  
withLength = true
     assert(std::string(firstTestString) ==  
StringIndex.as_string(false).get_printable()); // get back without  
length!

     Agentpp::Oidx ImpliedStringIndex =  
Agentpp::Oidx::from_string(firstTestString, false);  // without  
Length, implied!
     assert(std::string(firstTestString) ==  
ImpliedStringIndex.as_string(true).get_printable()); //NOTE: the  
asymmetry!

     Agentpp::Oidx OidIndex(testOidString);
     assert(std::string(testOidString) == OidIndex.get_printable());

In my Opinion, it would be better to have the default parameter set to  
FALSE, but than the change would break the
existing APi.

With regards,
Claus

Here is my patch to fix it:
=== modified file 'agent++/include/agent_pp/snmp_pp_ext.h'
--- old/agent++/include/agent_pp/snmp_pp_ext.h	2010-10-31 08:30:19 +0000
+++ new/agent++/include/agent_pp/snmp_pp_ext.h	2011-08-17 06:27:20 +0000
@@ -286,9 +286,12 @@
  	 * interpreted as one char. Thus, all subidentifiers must be
  	 * between 0 and 255.
  	 *
+	 * @param withExplicitLength
+	 *    if FALSE there will be no preceeding subid containing
+	 *    the length of the string
  	 * @return An OctetStr.
  	 */
-	NS_SNMP OctetStr	as_string() const;
+	NS_SNMP OctetStr	as_string(boolean withLenght=TRUE) const;

  	/**
  	 * Return an object identifier from a string. The first

=== modified file 'agent++/src/snmp_pp_ext.cpp'
--- old/agent++/src/snmp_pp_ext.cpp	2010-10-31 08:30:19 +0000
+++ new/agent++/src/snmp_pp_ext.cpp	2011-08-17 06:55:27 +0000
@@ -728,10 +728,14 @@
  	return smival.value.oid.ptr[smival.value.oid.len-1];
  }

-OctetStr Oidx::as_string() const
+OctetStr Oidx::as_string(boolean withLength) const
  {
  	OctetStr str;
-	for (int i=0; i<(int)len(); i++) {
+
+	int i = 0;
+	if (!withLength)
+		i++;
+	for (; i<(int)len(); i++) {
  		str += (unsigned char)(*this)[i];
  	}
  	return str;




More information about the AGENTPP mailing list