Author: cyberdo
Date: 2006-02-04 18:59:16 +0000 (Sat, 04 Feb 2006)
New Revision: 8004
Added:
trunk/freenet/src/snmplib/SNMPCounter32.java
trunk/freenet/src/snmplib/SNMPGauge32.java
trunk/freenet/src/snmplib/SNMPInteger32.java
trunk/freenet/src/snmplib/SNMPTypeWrapperNum.java
Modified:
trunk/freenet/src/freenet/node/Version.java
trunk/freenet/src/snmplib/BEREncoder.java
trunk/freenet/src/snmplib/DataConstantInt.java
trunk/freenet/src/snmplib/DataStatisticsInfo.java
trunk/freenet/src/snmplib/InfoSystem.java
trunk/freenet/src/snmplib/SNMPAgent.java
trunk/freenet/src/snmplib/SNMPTimeTicks.java
Log:
434:
All basic return values for SNMPv1 is now implemented.
Graphs can be properly mage with SNMP (the error wasn't SNMP's fault)
Still same OID:s implemented, but now return the proper type of their value.
Reorganized code to ease expanding of features.
Modified: trunk/freenet/src/freenet/node/Version.java
===================================================================
--- trunk/freenet/src/freenet/node/Version.java 2006-02-04 02:48:11 UTC (rev
8003)
+++ trunk/freenet/src/freenet/node/Version.java 2006-02-04 18:59:16 UTC (rev
8004)
@@ -20,7 +20,7 @@
public static final String protocolVersion = "1.0";
/** The build number of the current revision */
- private static final int buildNumber = 433;
+ private static final int buildNumber = 434;
/** Oldest build of Fred we will talk to */
private static final int lastGoodBuild = 403;
Modified: trunk/freenet/src/snmplib/BEREncoder.java
===================================================================
--- trunk/freenet/src/snmplib/BEREncoder.java 2006-02-04 02:48:11 UTC (rev
8003)
+++ trunk/freenet/src/snmplib/BEREncoder.java 2006-02-04 18:59:16 UTC (rev
8004)
@@ -1,5 +1,6 @@
package snmplib;
+import java.lang.reflect.InvocationTargetException;
import java.util.Stack;
import java.util.Vector;
@@ -45,11 +46,11 @@
offset += dlen;
offset += intToBERBytes(dlen, buf, offset);
buf[offset++] = 0x02;
- } else if (o instanceof SNMPTimeTicks) {
- int dlen =
intToBytes(((SNMPTimeTicks)o).timeValue(), buf, offset);
+ } else if (o instanceof SNMPTypeWrapperNum) {
+ int dlen =
intToBytes(((SNMPTypeWrapperNum)o).getValue(), buf, offset);
offset += dlen;
offset += intToBERBytes(dlen, buf, offset);
- buf[offset++] = 0x43;
+ buf[offset++] =
((SNMPTypeWrapperNum)o).getTypeID();
} else if (o instanceof IDVector) {
int dlen = vecToBytes((IDVector)o, buf, offset);
offset += dlen;
@@ -138,6 +139,9 @@
}
+ public void putSNMPTypeWrapperNum(SNMPTypeWrapperNum o) {
+ addToTop(o.clone());
+ }
/*public void putInteger(int i) {
addToTop(new Integer(i));
@@ -150,6 +154,10 @@
addToTop(new Long(i));
}
+ public void putCounter32(long i) {
+ addToTop(new SNMPCounter32(i));
+ }
+
public void putOctetString(byte buf[]) {
addToTop(new ByteArrWrapper((byte[])buf.clone(), (byte)0x04));
}
Modified: trunk/freenet/src/snmplib/DataConstantInt.java
===================================================================
--- trunk/freenet/src/snmplib/DataConstantInt.java 2006-02-04 02:48:11 UTC
(rev 8003)
+++ trunk/freenet/src/snmplib/DataConstantInt.java 2006-02-04 18:59:16 UTC
(rev 8004)
@@ -1,5 +1,6 @@
package snmplib;
+
public class DataConstantInt implements DataFetcher {
private String OID;
private int value;
Modified: trunk/freenet/src/snmplib/DataStatisticsInfo.java
===================================================================
--- trunk/freenet/src/snmplib/DataStatisticsInfo.java 2006-02-04 02:48:11 UTC
(rev 8003)
+++ trunk/freenet/src/snmplib/DataStatisticsInfo.java 2006-02-04 18:59:16 UTC
(rev 8004)
@@ -22,7 +22,7 @@
public Object getSNMPData() {
if (blocks == 0) {
long io[] = IOStatisticCollector.getTotalIO();
- return new Long(io[in?1:0]);
+ return new SNMPCounter32(io[in?1:0]);
}
// else sum all fields up to <blocks>
int res = 0;
Modified: trunk/freenet/src/snmplib/InfoSystem.java
===================================================================
--- trunk/freenet/src/snmplib/InfoSystem.java 2006-02-04 02:48:11 UTC (rev
8003)
+++ trunk/freenet/src/snmplib/InfoSystem.java 2006-02-04 18:59:16 UTC (rev
8004)
@@ -21,6 +21,10 @@
case 3: //SNMPv2-MIB::sysUpTime.0
return ".1.3.6.1.2.1.1.3.0";
+ case 4: //UCD-SNMP-MIB::memTotalReal.0
+ return ".1.3.6.1.4.1.2021.4.5";
+ case 5: //UCD-SNMP-MIB::memAvailReal.0
+ return ".1.3.6.1.4.1.2021.4.6";
}
@@ -30,14 +34,13 @@
public Object getSNMPData(String oid) {
Runtime r = Runtime.getRuntime();
- int oidhc = oid.hashCode();
//System.err.println("requesting: " + oid);
if (oid.equals(".1.3.6.1.2.1.1.3.0")) //SNMPv2-MIB::sysUpTime.0
return new SNMPTimeTicks(System.currentTimeMillis()/10
- created);
if (oid.equals(".1.3.6.1.4.1.2021.4.5.0"))
//UCD-SNMP-MIB::memTotalReal.0
- return new Long(r.totalMemory());
+ return new SNMPInteger32(r.totalMemory());
if (oid.equals(".1.3.6.1.4.1.2021.4.6.0"))
//UCD-SNMP-MIB::memAvailReal.0
- return new Long(r.freeMemory());
+ return new SNMPInteger32(r.freeMemory());
if (oid.equals(".1.3.6.1.2.1.1.5.0")) //SNMPv2-MIB::sysName.0
@@ -45,9 +48,9 @@
if (oid.equals(".1.3.6.1.4.1.2021.4.5"))
//UCD-SNMP-MIB::memTotalReal.0
- return new Long(r.totalMemory());
+ return new SNMPInteger32(r.totalMemory());
if (oid.equals(".1.3.6.1.4.1.2021.4.6"))
//UCD-SNMP-MIB::memAvailReal.0
- return new Long(r.freeMemory());
+ return new SNMPInteger32(r.freeMemory());
return null;
}
Modified: trunk/freenet/src/snmplib/SNMPAgent.java
===================================================================
--- trunk/freenet/src/snmplib/SNMPAgent.java 2006-02-04 02:48:11 UTC (rev
8003)
+++ trunk/freenet/src/snmplib/SNMPAgent.java 2006-02-04 18:59:16 UTC (rev
8004)
@@ -13,7 +13,7 @@
private int port = 4445;
/**
- * @param args
+ * @param args
*/
public static void main(String[] args) throws IOException {
SNMPAgent.getSNMPAgent().addFetcher(new
DataConstantInt("1.1.1", 10));
@@ -260,12 +260,12 @@
be.startSequence(); // value
be.putOID(splitToLong(aOID)); // oid
//System.err.println("Will reply with OID: " + rc.OID + " -> " + aOID);
- if (data instanceof Integer)
- be.putInteger(((Integer)data).intValue());
- else if (data instanceof Long)
- be.putInteger(((Long)data).longValue());
- else if (data instanceof SNMPTimeTicks)
- be.putTimeticks(((SNMPTimeTicks)data).timeValue());
+ if (data instanceof Number)
+ be.putInteger(((Number)data).longValue());
+ else if (data instanceof SNMPTypeWrapperNum)
+ be.putSNMPTypeWrapperNum((SNMPTypeWrapperNum)data);
+// else if (data instanceof SNMPCounter32)
+// be.putCunter32(((SNMPCounter32)data).getValue());
else if (data instanceof String) {
char[] charr = ((String)data).toCharArray();
byte[] byarr = new byte[charr.length];
Added: trunk/freenet/src/snmplib/SNMPCounter32.java
===================================================================
--- trunk/freenet/src/snmplib/SNMPCounter32.java 2006-02-04 02:48:11 UTC
(rev 8003)
+++ trunk/freenet/src/snmplib/SNMPCounter32.java 2006-02-04 18:59:16 UTC
(rev 8004)
@@ -0,0 +1,16 @@
+package snmplib;
+
+public class SNMPCounter32 extends SNMPTypeWrapperNum {
+ public SNMPCounter32() { super(); }
+ public SNMPCounter32(long value) { super(value); }
+
+ public void setValue(long value) {
+ // TODO: make it prettier!
+ this.value = new Long(value).intValue();
+ //System.err.println("Value cut from: " + value + " to " +
this.value);
+ }
+
+ protected void init() {
+ this.typeID = 0x41;
+ }
+}
Added: trunk/freenet/src/snmplib/SNMPGauge32.java
===================================================================
--- trunk/freenet/src/snmplib/SNMPGauge32.java 2006-02-04 02:48:11 UTC (rev
8003)
+++ trunk/freenet/src/snmplib/SNMPGauge32.java 2006-02-04 18:59:16 UTC (rev
8004)
@@ -0,0 +1,16 @@
+package snmplib;
+
+public class SNMPGauge32 extends SNMPTypeWrapperNum {
+ public SNMPGauge32() { super(); }
+ public SNMPGauge32(long value) { super(value); }
+
+ public void setValue(long value) {
+ // TODO: make it prettier!
+ this.value = new Long(value).intValue();
+ //System.err.println("Value cut from: " + value + " to " +
this.value);
+ }
+
+ protected void init() {
+ this.typeID = 0x42;
+ }
+}
Added: trunk/freenet/src/snmplib/SNMPInteger32.java
===================================================================
--- trunk/freenet/src/snmplib/SNMPInteger32.java 2006-02-04 02:48:11 UTC
(rev 8003)
+++ trunk/freenet/src/snmplib/SNMPInteger32.java 2006-02-04 18:59:16 UTC
(rev 8004)
@@ -0,0 +1,16 @@
+package snmplib;
+
+public class SNMPInteger32 extends SNMPTypeWrapperNum {
+ public SNMPInteger32() { super(); }
+ public SNMPInteger32(long value) { super(value); }
+
+ public void setValue(long value) {
+ // TODO: make it prettier!
+ this.value = new Long(value).intValue();
+ //System.err.println("Value cut from: " + value + " to " +
this.value);
+ }
+
+ protected void init() {
+ this.typeID = 0x02;
+ }
+}
Modified: trunk/freenet/src/snmplib/SNMPTimeTicks.java
===================================================================
--- trunk/freenet/src/snmplib/SNMPTimeTicks.java 2006-02-04 02:48:11 UTC
(rev 8003)
+++ trunk/freenet/src/snmplib/SNMPTimeTicks.java 2006-02-04 18:59:16 UTC
(rev 8004)
@@ -1,27 +1,24 @@
package snmplib;
-public class SNMPTimeTicks {
- private long ticks;
+public class SNMPTimeTicks extends SNMPTypeWrapperNum {
+ public SNMPTimeTicks() { super(); }
+ public SNMPTimeTicks(long value) { super(value); }
- public SNMPTimeTicks(long ticks) {
- this.ticks = ticks;
+ protected void init() {
+ this.typeID = 0x43;
}
- public long timeValue() {
- return ticks;
- }
-
public String toString() {
- long rest = ticks;
- long dec = ticks%100;
+ long rest = value;
+ long dec = rest%100;
rest = rest/100;
- long sec = ticks%60;
+ long sec = rest%60;
rest = rest/60;
- long min = ticks%60;
+ long min = rest%60;
rest = rest/60;
- long hour = ticks%24;
+ long hour = rest%24;
rest = rest/24;
- long day = ticks;
+ long day = rest;
return day + ":" + hour + ":" + min + ":" + sec + "." + dec;
}
}
Added: trunk/freenet/src/snmplib/SNMPTypeWrapperNum.java
===================================================================
--- trunk/freenet/src/snmplib/SNMPTypeWrapperNum.java 2006-02-04 02:48:11 UTC
(rev 8003)
+++ trunk/freenet/src/snmplib/SNMPTypeWrapperNum.java 2006-02-04 18:59:16 UTC
(rev 8004)
@@ -0,0 +1,58 @@
+package snmplib;
+
+public abstract class SNMPTypeWrapperNum {
+ protected long value;
+ protected byte typeID;
+
+ /**
+ * This methd is used to initialize for instance typeID;
+ */
+ protected abstract void init();
+
+ public SNMPTypeWrapperNum() {
+ this(0);
+ }
+
+ public SNMPTypeWrapperNum(long value) {
+ this.setValue(value);
+ init();
+ }
+
+ //public final byte typeID;
+ //= 0x02;
+ public byte getTypeID() {
+ System.err.println("Returning " + Integer.toHexString(typeID) +
" for a " + this.getClass().toString());
+ return typeID;
+ }
+
+ public long getValue() {
+ return value;
+ }
+
+ public void setValue(long value) {
+ this.value = value;
+ }
+
+ public Object clone() {
+ Object ret = null;
+ try {
+ ret = this.getClass().newInstance();
+ ((SNMPTypeWrapperNum)ret).setValue(getValue());
+ } catch (SecurityException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ } catch (InstantiationException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ } catch (IllegalAccessException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+ return ret;
+ }
+
+ public String toString() {
+ return Long.toString(value);
+ }
+
+}