[SNMP4J] SnmpEngineListener fired multiple time for same address
Hi, I'm using version 2.0.2 and in the process of implementing a SnmpEngineListener. From what I observe the even when I'm polling for the same Address the MPv3.addEngineID fires the listeners for every message sent. The if condition in MPv3.addEngineID to check with localEngineID does not appear to work well. The Address is available in the engineIDs map but the localEngineID does not match with the input engineID. The localengineID appears to default one. Is there a specific reason to check against the localEngineID before adding to the engineIDs map ? Could we not check if the Address is there in endingIDs map directly? (!Arrays.equals(this.localEngineID, engineID.getValue())) Christy ___ SNMP4J mailing list SNMP4J@agentpp.org http://lists.agentpp.org/mailman/listinfo/snmp4j
Re: [SNMP4J] SnmpEngineListener fired multiple time for same address
Hi Christy, This is indeed not optimal to fire the event, even if the engine ID did not change for an address. By replacing the method addEngineID in MPv3.java as follows you can improve the behavior: public boolean addEngineID(Address address, OctetString engineID) { if (!Arrays.equals(this.localEngineID, engineID.getValue())) { OctetString previousEngineID = engineIDs.put(address, engineID); if ((snmpEngineListeners != null) ((previousEngineID == null) || (!previousEngineID.equals(engineID { fireEngineChanged(new SnmpEngineEvent(this, SnmpEngineEvent.ADDED_ENGINE_ID, engineID, address)); } return true; } return false; } The next version of SNMP4J will include this patch. Best regards, Frank Am 25.09.2013 17:38, schrieb Christy Jones (christyj): Hi, I'm using version 2.0.2 and in the process of implementing a SnmpEngineListener. From what I observe the even when I'm polling for the same Address the MPv3.addEngineID fires the listeners for every message sent. The if condition in MPv3.addEngineID to check with localEngineID does not appear to work well. The Address is available in the engineIDs map but the localEngineID does not match with the input engineID. The localengineID appears to default one. Is there a specific reason to check against the localEngineID before adding to the engineIDs map ? Could we not check if the Address is there in endingIDs map directly? (!Arrays.equals(this.localEngineID, engineID.getValue())) Christy -- --- AGENT++ Maximilian-Kolbe-Str. 10 73257 Koengen, Germany https://agentpp.com Phone: +49 7024 8688230 Fax: +49 7024 8688231 ___ SNMP4J mailing list SNMP4J@agentpp.org http://lists.agentpp.org/mailman/listinfo/snmp4j
Re: [SNMP4J] SnmpEngineListener fired multiple time for same address
Thanks Frank, I also think splitting the conditions would help so that for a change in engineID the code can fire a remove event followed by add event. public boolean addEngineID(Address address, OctetString engineID) { if (!Arrays.equals(this.localEngineID, engineID.getValue())) { OctetString previousEngineID = engineIDs.put(address, engineID); if ((snmpEngineListeners != null)) { if ((previousEngineID == null)) { fireEngineChanged(new SnmpEngineEvent(this, SnmpEngineEvent.ADDED_ENGINE_ID,engineID, address)); } else if (!previousEngineID.equals(engineID)) { fireEngineChanged(new SnmpEngineEvent(this, SnmpEngineEvent.REMOVED_ENGINE_ID,previousEngineID, address)); fireEngineChanged(new SnmpEngineEvent(this, SnmpEngineEvent.ADDED_ENGINE_ID,engineID, address)); } } return true; } return false; } Regards Christy On 9/25/13 1:55 PM, Frank Fock f...@agentpp.com wrote: Hi Christy, This is indeed not optimal to fire the event, even if the engine ID did not change for an address. By replacing the method addEngineID in MPv3.java as follows you can improve the behavior: public boolean addEngineID(Address address, OctetString engineID) { if (!Arrays.equals(this.localEngineID, engineID.getValue())) { OctetString previousEngineID = engineIDs.put(address, engineID); if ((snmpEngineListeners != null) ((previousEngineID == null) || (!previousEngineID.equals(engineID { fireEngineChanged(new SnmpEngineEvent(this, SnmpEngineEvent.ADDED_ENGINE_ID, engineID, address)); } return true; } return false; } The next version of SNMP4J will include this patch. Best regards, Frank Am 25.09.2013 17:38, schrieb Christy Jones (christyj): Hi, I'm using version 2.0.2 and in the process of implementing a SnmpEngineListener. From what I observe the even when I'm polling for the same Address the MPv3.addEngineID fires the listeners for every message sent. The if condition in MPv3.addEngineID to check with localEngineID does not appear to work well. The Address is available in the engineIDs map but the localEngineID does not match with the input engineID. The localengineID appears to default one. Is there a specific reason to check against the localEngineID before adding to the engineIDs map ? Could we not check if the Address is there in endingIDs map directly? (!Arrays.equals(this.localEngineID, engineID.getValue())) Christy -- --- AGENT++ Maximilian-Kolbe-Str. 10 73257 Koengen, Germany https://agentpp.com Phone: +49 7024 8688230 Fax: +49 7024 8688231 ___ SNMP4J mailing list SNMP4J@agentpp.org http://lists.agentpp.org/mailman/listinfo/snmp4j