// Home | Go Back //

/*
 * Copyright (c) 2002 iReasoning Networks. All Rights Reserved.
 * 
 * This SOURCE CODE FILE, which has been provided by iReasoning Networks as part
 * of an iReasoning Software product for use ONLY by licensed users of the product,
 * includes CONFIDENTIAL and PROPRIETARY information of iReasoning Networks.  
 *
 * USE OF THIS SOFTWARE IS GOVERNED BY THE TERMS AND CONDITIONS 
 * OF THE LICENSE STATEMENT AND LIMITED WARRANTY FURNISHED WITH
 * THE PRODUCT.
 *
 * IN PARTICULAR, YOU WILL INDEMNIFY AND HOLD IREASONING SOFTWARE, ITS
 * RELATED COMPANIES AND ITS SUPPLIERS, HARMLESS FROM AND AGAINST ANY
 * CLAIMS OR LIABILITIES ARISING OUT OF THE USE, REPRODUCTION, OR
 * DISTRIBUTION OF YOUR PROGRAMS, INCLUDING ANY CLAIMS OR LIABILITIES
 * ARISING OUT OF OR RESULTING FROM THE USE, MODIFICATION, OR
 * DISTRIBUTION OF PROGRAMS OR FILES CREATED FROM, BASED ON, AND/OR
 * DERIVED FROM THIS SOURCE CODE FILE.
 */


import com.ireasoning.protocol.TimeoutException;
import com.ireasoning.protocol.snmp.*;
import com.ireasoning.util.ParseArguments;
import java.io.IOException;

/**
 * This class demonstrates two different implementations of snmp get_next operation. 
 * <br>
 * 1. Use SnmpSession.snmpGetNextRequest. This is a more convinient way. <br>
 * 2. Use primitive SnmpSession.send <br>
 * <pre>
 * Example:
 * java snmpinform -s 10333 -q .1.3.6.1.2.1.2.2.1.1 localhost
 * java snmpinform -v 3 -u newUser -A abc12345 -X abc12345 -e 12345  -s 10333 -q .1.3.6.1.2.1.2.2.1.1 localhost
 * 
 * </pre>
 */
public class snmpinform extends snmp
{
    byte[]  _engineID ;
    long    _sysUpTime   = 0;
    String  _snmpTrapOID = ".1.3";

    //override superclass's _port variable, which is 161
    int     _port        = 162;

    public static void main(String[] args)
    {
        snmpinform s = new snmpinform();
        s.parseOptions(args, "snmpinform");
        // s.printOptions();
        s.inform();
    }
    
    /**
     * use SnmpSession.snmpGetNextRequest
     */
    private void inform()
    {
        try
        {
            SnmpSession session = new SnmpSession(_host, _port, _community,
                    _community, _version);
            if(_isSnmpV3)
            {
                session.setV3Params(_user, _authProtocol, _authPassword, _privProtocol, _privPassword);
            }
            
            SnmpPdu retPdu = session.snmpInformRequest(_sysUpTime, new SnmpOID(_snmpTrapOID), null);

            session.close();
        }
        catch(TimeoutException timeout)
        {
            System.out.println( "time out");
        }
        catch(IOException e)
        {
            System.out.println(e);
            e.printStackTrace();
        }
    }

    // ----------------------------------------------------------------------
    // Parsing command line options
    // ----------------------------------------------------------------------
    
    /**
     * Prints usage lines without explanation lines
     */
    protected void usage(String programName, boolean allowMulitpleOIDs)
    {
        System.out.println( "Usage: java " + programName + " [options...] <hostname>\n");
    }

    protected void moreOptions()
    {
        System.out.println( "-e <e>\tengine ID");
        System.out.println( "-s <s>\tsysUpTime or timestamp");
        System.out.println( "-q <o>\tsnmpTrapOID");
    }
    
    protected void printExample(String programName)
    {
        System.out.println( "java " + programName + 
                " -s 10333 -q .1.3.6.1.2.1.2.2.1.1 localhost" ); 
        System.out.println( "java " + programName + 
                " -v 3 -u newUser -A abc12345 -X abc12345 -e 12345  -s 10333 -q .1.3.6.1.2.1.2.2.1.1 " +
                "localhost" );
    }

    protected void parseOptions(String[] args, String program)
    {
        super.parseOptions(args, program);
        String engineID = _parseArgs.getOptionValue('e');
        if(engineID != null)
        {
            _engineID = engineID.getBytes();
        }
        _snmpTrapOID = _parseArgs.getOptionValue('q');
        _sysUpTime   = Integer.parseInt(_parseArgs.getOptionValue('s', "0"));
    }

    protected void printMoreOptions()
    {
        System.out.println( "engine ID =\t\t" + _parseArgs.getOptionValue('e'));
        System.out.println( "sysUpTime =\t\t" + _sysUpTime);
        System.out.println( "snmpTrapOID =\t\t" + _snmpTrapOID);
    }

    /**
     * Creates a new instance of ParseArguments
     */
    protected ParseArguments newParseArgumentsInstance(String[] args)
    {
        return new ParseArguments(args, "?ho", "uvaAXxcpmesq");
    }
    
}// end of class snmpinform