Ejemplo n.º 1
0
  /**
   * Encodes a <code>Variable</code> to an <code>OutputStream</code>.
   *
   * @param outputStream an <code>OutputStream</code>.
   * @throws IOException if an error occurs while writing to the stream.
   */
  @Override
  public void encodeBER(OutputStream outputStream) throws IOException {
    BER.encodeHeader(outputStream, type, getBERPayloadLength());

    if (type == PDU.V1TRAP) {
      enterprise.encodeBER(outputStream);
      agentAddress.encodeBER(outputStream);
      genericTrap.encodeBER(outputStream);
      specificTrap.encodeBER(outputStream);
      timestamp.encodeBER(outputStream);
    } else {
      requestID.encodeBER(outputStream);
      errorStatus.encodeBER(outputStream);
      errorIndex.encodeBER(outputStream);
    }
    int vbLength = 0;
    for (VariableBinding variableBinding : variableBindings) {
      vbLength += variableBinding.getBERLength();
    }
    BER.encodeHeader(outputStream, BER.SEQUENCE, vbLength);
    for (VariableBinding vb : variableBindings) {
      if (!isVariableV1(vb.getVariable())) {
        throw new IOException("Cannot encode Counter64 into a SNMPv1 PDU");
      }
      vb.encodeBER(outputStream);
    }
  }
Ejemplo n.º 2
0
  // TODO return OpenMUC value
  private double getValue(SML_ListEntry entry) {
    double value = 0;

    ASNObject obj = entry.getValue().getChoice();
    if (obj.getClass().equals(Integer64.class)) {
      Integer64 val = (Integer64) obj;
      value = val.getVal();
    } else if (obj.getClass().equals(Integer32.class)) {
      Integer32 val = (Integer32) obj;
      value = val.getVal();
    } else if (obj.getClass().equals(Integer16.class)) {
      Integer16 val = (Integer16) obj;
      value = val.getVal();
    } else if (obj.getClass().equals(Integer8.class)) {
      Integer8 val = (Integer8) obj;
      value = val.getVal();
    } else if (obj.getClass().equals(Unsigned64.class)) {
      Unsigned64 val = (Unsigned64) obj;
      value = val.getVal();
    } else if (obj.getClass().equals(Unsigned32.class)) {
      Unsigned32 val = (Unsigned32) obj;
      value = val.getVal();
    } else if (obj.getClass().equals(Unsigned16.class)) {
      Unsigned16 val = (Unsigned16) obj;
      value = val.getVal();
    } else if (obj.getClass().equals(Unsigned8.class)) {
      Unsigned8 val = (Unsigned8) obj;
      value = val.getVal();
    } else {
      return Double.NaN;
    }

    byte scaler = entry.getScaler().getVal();
    return value * Math.pow(10, scaler);
  }
Ejemplo n.º 3
0
  /**
   * Decodes a <code>Variable</code> from an <code>InputStream</code>.
   *
   * @param inputStream an <code>InputStream</code> containing a BER encoded byte stream.
   * @throws IOException
   */
  @Override
  public void decodeBER(BERInputStream inputStream) throws IOException {
    MutableByte pduType = new MutableByte();
    int length = BER.decodeHeader(inputStream, pduType);
    int pduStartPos = (int) inputStream.getPosition();

    switch (pduType.getValue()) {
      case PDU.SET:
      case PDU.GET:
      case PDU.GETNEXT:
      case PDU.V1TRAP:
      case PDU.RESPONSE:
        break;
        // The following PDU types are not supported by the SNMPv1 standard!
      case PDU.NOTIFICATION:
      case PDU.INFORM:
        if (SNMP4JSettings.isAllowSNMPv2InV1()) {
          break;
        }
        // fall through
      default:
        throw new IOException("Unsupported PDU type: " + pduType.getValue());
    }
    this.setType(pduType.getValue());
    if (getType() == PDU.V1TRAP) {
      enterprise.decodeBER(inputStream);
      agentAddress.decodeBER(inputStream);
      genericTrap.decodeBER(inputStream);
      specificTrap.decodeBER(inputStream);
      timestamp.decodeBER(inputStream);
    } else {
      requestID.decodeBER(inputStream);
      errorStatus.decodeBER(inputStream);
      errorIndex.decodeBER(inputStream);
    }
    // reusing pduType here to save memory ;-)
    pduType = new BER.MutableByte();
    int vbLength = BER.decodeHeader(inputStream, pduType);
    if (pduType.getValue() != BER.SEQUENCE) {
      throw new IOException("Encountered invalid tag, SEQUENCE expected: " + pduType.getValue());
    }
    // rest read count
    int startPos = (int) inputStream.getPosition();
    variableBindings = new Vector<>();
    while (inputStream.getPosition() - startPos < vbLength) {
      VariableBinding vb = new VariableBinding();
      vb.decodeBER(inputStream);
      if (!isVariableV1(vb.getVariable())) {
        throw new MessageException("Counter64 encountered in SNMPv1 PDU " + "(RFC 2576 §4.1.2.1)");
      }
      variableBindings.add(vb);
    }
    if (BER.isCheckSequenceLength()) {
      BER.checkSequenceLength(vbLength, (int) inputStream.getPosition() - startPos, this);
      BER.checkSequenceLength(length, (int) inputStream.getPosition() - pduStartPos, this);
    }
  }
Ejemplo n.º 4
0
 @Override
 protected int getBERPayloadLengthPDU() {
   if (getType() != PDU.V1TRAP) {
     return super.getBERPayloadLengthPDU();
   } else {
     int length = 0;
     // length for all vbs
     for (VariableBinding variableBinding : variableBindings) {
       length += variableBinding.getBERLength();
     }
     length += BER.getBERLengthOfLength(length) + 1;
     length += agentAddress.getBERLength();
     length += enterprise.getBERLength();
     length += genericTrap.getBERLength();
     length += specificTrap.getBERLength();
     length += timestamp.getBERLength();
     return length;
   }
 }
Ejemplo n.º 5
0
 /**
  * Gets the specific trap ID. If this value is set, {@link #getGenericTrap()} must return
  * ENTERPRISE_SPECIFIC(6).
  *
  * @return an integer value > 0.
  * @throws UnsupportedOperationException if the type of this PDU is not {@link PDU#V1TRAP}.
  */
 public int getSpecificTrap() {
   checkV1TRAP();
   return specificTrap.getValue();
 }
Ejemplo n.º 6
0
 /**
  * Gets the generic trap ID. If this value is ENTERPRISE_SPECIFIC(6), then {@link
  * #getSpecificTrap()} will return the trap ID of the enterprise specific trap.
  *
  * @return an Integer32 instance with a value between 0 and 6.
  * @throws UnsupportedOperationException if the type of this PDU is not {@link PDU#V1TRAP}.
  */
 public int getGenericTrap() {
   checkV1TRAP();
   return genericTrap.getValue();
 }