package jnet.lib.snmp;


import org.snmp4j.*;
import org.snmp4j.event.ResponseEvent;
import org.snmp4j.mp.SnmpConstants;
import org.snmp4j.smi.*;
import org.snmp4j.transport.*;

public class SNMPTester {

    private String address;
    private String community;
    private int version;

    public SNMPTester(String address, String port, String community, int version) {
        this.address = address+"/"+port;
        this.community = community;
        this.version = version;
    }
    
    public boolean testSnmp() {
        try {
            // Nastavení SNMP agenta
            TransportMapping transport = new DefaultUdpTransportMapping();
            Snmp snmp = new Snmp(transport);
            transport.listen();

            // Cílový hostitel a community string
            Target target = new CommunityTarget();
            ((CommunityTarget) target).setCommunity(new OctetString(this.community));
            target.setVersion(this.version);
            target.setAddress(new UdpAddress(this.address));
            target.setRetries(3); // Počet pokusů
            target.setTimeout(5000); // Timeout v milisekundách

            // Odeslání SNMP požadavku na systémovou OID (sysDescr)
            PDU request = new PDU();
            request.add(new VariableBinding(SnmpConstants.sysDescr)); // OID pro systémový popis
            request.setType(PDU.GET);

            // Odeslání požadavku
            ResponseEvent response = snmp.get(request, target);
            snmp.close(); // Ukončení SNMP komunikace

            // Zpracování odpovědi
            if (response != null && response.getResponse() != null) {
                PDU pdu = response.getResponse();
                return true; // Funkční SNMP
            } else {
                return false; // Nefunkční SNMP
            }
        } catch (Exception e) {
            return false; // Chyba komunikace
        }
    }
}