- /*
 - * @(#)file SnmpPduFactoryBER.java
 - * @(#)author Sun Microsystems, Inc.
 - * @(#)version 3.30
 - * @(#)date 04/09/15
 - *
 - * Copyright 2004 Sun Microsystems, Inc. All rights reserved.
 - * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
 - *
 - */
 - package com.sun.jmx.snmp;
 - // java imports
 - //
 - import java.io.Serializable;
 - // jmx import
 - //
 - import com.sun.jmx.snmp.SnmpPduFactory;
 - import com.sun.jmx.snmp.SnmpMessage;
 - import com.sun.jmx.snmp.SnmpPduPacket;
 - import com.sun.jmx.snmp.SnmpPdu;
 - import com.sun.jmx.snmp.SnmpMsg;
 - import com.sun.jmx.snmp.SnmpStatusException;
 - import com.sun.jmx.snmp.SnmpTooBigException;
 - import com.sun.jmx.snmp.SnmpDefinitions;
 - // SNMP Runtime import
 - //
 - import com.sun.jmx.snmp.SnmpV3Message;
 - /**
 - * Default implementation of the {@link com.sun.jmx.snmp.SnmpPduFactory SnmpPduFactory} interface.
 - * <BR>It uses the BER (basic encoding rules) standardized encoding scheme associated with ASN.1.
 - * <P>
 - * This implementation of the <CODE>SnmpPduFactory</CODE> is very
 - * basic: it simply calls encoding and decoding methods from
 - * {@link com.sun.jmx.snmp.SnmpMsg}.
 - * <BLOCKQUOTE>
 - * <PRE>
 - * public SnmpPdu decodeSnmpPdu(SnmpMsg msg)
 - * throws SnmpStatusException {
 - * return msg.decodeSnmpPdu() ;
 - * }
 - *
 - * public SnmpMsg encodeSnmpPdu(SnmpPdu pdu, int maxPktSize)
 - * throws SnmpStatusException, SnmpTooBigException {
 - * SnmpMsg result = new SnmpMessage() ; // for SNMP v1/v2
 - * <I>or</I>
 - * SnmpMsg result = new SnmpV3Message() ; // for SNMP v3
 - * result.encodeSnmpPdu(pdu, maxPktSize) ;
 - * return result ;
 - * }
 - * </PRE>
 - * </BLOCKQUOTE>
 - * To implement your own object, you can implement <CODE>SnmpPduFactory</CODE>
 - * or extend <CODE>SnmpPduFactoryBER</CODE>.
 - * <p><b>This API is a Sun Microsystems internal API and is subject
 - * to change without notice.</b></p>
 - */
 - public class SnmpPduFactoryBER implements SnmpPduFactory, Serializable {
 - /**
 - * Calls {@link com.sun.jmx.snmp.SnmpMsg#decodeSnmpPdu SnmpMsg.decodeSnmpPdu}
 - * on the specified message and returns the resulting <CODE>SnmpPdu</CODE>.
 - *
 - * @param msg The SNMP message to be decoded.
 - * @return The resulting SNMP PDU packet.
 - * @exception SnmpStatusException If the encoding is invalid.
 - *
 - * @since 1.5
 - */
 - public SnmpPdu decodeSnmpPdu(SnmpMsg msg) throws SnmpStatusException {
 - return msg.decodeSnmpPdu();
 - }
 - /**
 - * Encodes the specified <CODE>SnmpPdu</CODE> and
 - * returns the resulting <CODE>SnmpMsg</CODE>. If this
 - * method returns null, the specified <CODE>SnmpPdu</CODE>
 - * will be dropped and the current SNMP request will be
 - * aborted.
 - *
 - * @param p The <CODE>SnmpPdu</CODE> to be encoded.
 - * @param maxDataLength The size limit of the resulting encoding.
 - * @return Null or a fully encoded <CODE>SnmpMsg</CODE>.
 - * @exception SnmpStatusException If <CODE>pdu</CODE> contains
 - * illegal values and cannot be encoded.
 - * @exception SnmpTooBigException If the resulting encoding does not
 - * fit into <CODE>maxPktSize</CODE> bytes.
 - *
 - * @since 1.5
 - */
 - public SnmpMsg encodeSnmpPdu(SnmpPdu p, int maxDataLength)
 - throws SnmpStatusException, SnmpTooBigException {
 - switch(p.version) {
 - case SnmpDefinitions.snmpVersionOne:
 - case SnmpDefinitions.snmpVersionTwo: {
 - SnmpMessage result = new SnmpMessage();
 - result.encodeSnmpPdu((SnmpPduPacket) p, maxDataLength);
 - return result;
 - }
 - case SnmpDefinitions.snmpVersionThree: {
 - SnmpV3Message result = new SnmpV3Message();
 - result.encodeSnmpPdu(p, maxDataLength);
 - return result;
 - }
 - default:
 - return null;
 - }
 - }
 - }