1 // NAME 2 // $RCSfile: AsnDecoderBase.java,v $ 3 // DESCRIPTION 4 // [given below in javadoc format] 5 // DELTA 6 // $Revision: 3.3 $ 7 // CREATED 8 // $Date: 2007/10/17 10:36:47 $ 9 // COPYRIGHT 10 // Westhawk Ltd 11 // TO DO 12 // 13 14 /* 15 * Copyright (C) 1995, 1996 by West Consulting BV 16 * 17 * Permission to use, copy, modify, and distribute this software 18 * for any purpose and without fee is hereby granted, provided 19 * that the above copyright notices appear in all copies and that 20 * both the copyright notice and this permission notice appear in 21 * supporting documentation. 22 * This software is provided "as is" without express or implied 23 * warranty. 24 * author <a href="mailto:snmp@westhawk.co.uk">Tim Panton</a> 25 * original version by hargrave@dellgate.us.dell.com (Jordan Hargrave) 26 */ 27 28 /* 29 * Copyright (C) 1996 - 2006 by Westhawk Ltd 30 * <a href="www.westhawk.co.uk">www.westhawk.co.uk</a> 31 * 32 * Permission to use, copy, modify, and distribute this software 33 * for any purpose and without fee is hereby granted, provided 34 * that the above copyright notices appear in all copies and that 35 * both the copyright notice and this permission notice appear in 36 * supporting documentation. 37 * This software is provided "as is" without express or implied 38 * warranty. 39 * author <a href="mailto:snmp@westhawk.co.uk">Tim Panton</a> 40 */ 41 42 package uk.co.westhawk.snmp.stack; 43 44 /*- 45 * ╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲ 46 * SNMP Java Client 47 * ჻჻჻჻჻჻ 48 * Copyright 2023 MetricsHub, Westhawk 49 * ჻჻჻჻჻჻ 50 * This program is free software: you can redistribute it and/or modify 51 * it under the terms of the GNU Lesser General Public License as 52 * published by the Free Software Foundation, either version 3 of the 53 * License, or (at your option) any later version. 54 * 55 * This program is distributed in the hope that it will be useful, 56 * but WITHOUT ANY WARRANTY; without even the implied warranty of 57 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 58 * GNU General Lesser Public License for more details. 59 * 60 * You should have received a copy of the GNU General Lesser Public 61 * License along with this program. If not, see 62 * <http://www.gnu.org/licenses/lgpl-3.0.html>. 63 * ╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱ 64 */ 65 66 import uk.co.westhawk.snmp.util.*; 67 import java.io.*; 68 import java.util.*; 69 70 /** 71 * This class contains the general methods to decode bytes into a Pdu. 72 * We split the original class AsnDecoder into four classes. 73 * 74 * @since 4_14 75 * @author <a href="mailto:snmp@westhawk.co.uk">Tim Panton</a> 76 * @version $Revision: 3.3 $ $Date: 2007/10/17 10:36:47 $ 77 */ 78 class AsnDecoderBase extends Object { 79 private static final String version_id = "@(#)$Id: AsnDecoderBase.java,v 3.3 2007/10/17 10:36:47 birgita Exp $ Copyright Westhawk Ltd"; 80 81 /** 82 * Reads the input into an asn sequence. 83 */ 84 AsnSequence getAsnSequence(InputStream in) 85 throws IOException, DecodingException { 86 AsnSequence asnTopSeq = null; 87 AsnSequence dummy = new AsnSequence(); 88 AsnObject obj = dummy.AsnReadHeader(in); 89 if (obj instanceof AsnSequence) { 90 asnTopSeq = (AsnSequence) obj; 91 } else { 92 String msg = "AsnSequence was expected"; 93 if (obj != null) { 94 msg += " instead of " + obj.getRespTypeString(); 95 } else { 96 msg += ", but is null"; 97 } 98 throw new DecodingException(msg); 99 } 100 return asnTopSeq; 101 } 102 103 /** 104 * Returns the SNMP version number of the asn sequence. 105 */ 106 int getSNMPVersion(AsnSequence asnTopSeq) throws DecodingException { 107 int version = -1; 108 AsnObject obj = asnTopSeq.getObj(0); 109 if (obj instanceof AsnInteger) { 110 AsnInteger v = (AsnInteger) obj; 111 version = v.getValue(); 112 } else { 113 String msg = "SNMP version should be of type AsnInteger" 114 + " instead of " + obj.getRespTypeString(); 115 throw new DecodingException(msg); 116 } 117 return version; 118 } 119 120 /** 121 * Returns the SNMP v1 and v2c community of the asn sequence. 122 */ 123 String getCommunity(AsnSequence asnTopSeq) throws DecodingException { 124 String comm = ""; 125 AsnObject obj = asnTopSeq.getObj(1); 126 if (obj instanceof AsnOctets) { 127 AsnOctets estat = (AsnOctets) obj; 128 comm = estat.getValue(); 129 } else { 130 String msg = "community should be of type AsnOctets" 131 + " instead of " + obj.getRespTypeString(); 132 throw new DecodingException(msg); 133 } 134 return comm; 135 } 136 137 AsnSequence getAsnHeaderData(AsnSequence asnTopSeq) throws DecodingException { 138 AsnSequence asnHeaderData = null; 139 AsnObject obj = asnTopSeq.getObj(1); 140 if (obj instanceof AsnSequence) { 141 asnHeaderData = (AsnSequence) obj; 142 } else { 143 String msg = "asnHeaderData should be of type AsnSequence" 144 + " instead of " + obj.getRespTypeString(); 145 throw new DecodingException(msg); 146 } 147 return asnHeaderData; 148 } 149 150 }