/// <summary> /// Five Types of supported indexes: /// 1. single digit /// 2. string values separated by '&' /// 3. JobId that signals using the SNMP Get Next /// 4. string with more than 1 digit /// 5. empty string /// </summary> /// <param name="oi">OidInfo</param> /// <param name="supportedIdx">string</param> private void ParseSupportedIndexes(OidInfo oi, string supportedIdx) { string value = supportedIdx.Trim(); if (value.Length == 1) { oi.SupportedIndexes.Add(value); } else if (value.Contains('&')) { GetIndexes(oi.SupportedIndexes, value); } else if (value.ToUpper().Contains("JOBID")) { GetJobIdIndex(oi, value); } else if (value.Length > 0) { oi.SupportedIndexes.Add(value); } else // no index to add to OID but empty string required for processing { oi.SupportedIndexes.Add(""); } }
/// <summary> /// does the initial work of parsing the input file /// </summary> /// <param name="lstOidInfo">OidInfoList</param> private void ProcessFile(OidInfoList lstOidInfo) { FileStream fs = null; // NAME, OID, INDEXES_SUPPORTED, INDEXES_NOT_SUPPORTED, EXPECTED_VALUE,READABLE, WRITABLE, DATA_TYPE, VALID_SET_VALUE, INVALID_SET_VALUE, IMPLEMENTATION, CAPABILITY try { fs = new FileStream(FileName, FileMode.Open, FileAccess.Read); StreamReader sr = new StreamReader(fs); if (IsHeaderLine(sr.ReadLine())) { while (sr.Peek() != -1) { string line = sr.ReadLine(); string[] buffer = line.Split(','); if (buffer.Length == (int)SNMP_TITLES.Count) { OidInfo oi = new OidInfo(); oi.NameOid = buffer[(int)SNMP_TITLES.Name]; oi.OIDValue = buffer[(int)SNMP_TITLES.OID]; ParseSupportedIndexes(oi, buffer[(int)SNMP_TITLES.SupportedIndexes]); ParseNonSupportedIndexes(oi, buffer[(int)SNMP_TITLES.NonSupportedIndexes]); oi.ExpectedValue = buffer[(int)SNMP_TITLES.ExpectedValues]; oi.IsReadable = GetIsReadWriteable(buffer[(int)SNMP_TITLES.Readable]); oi.IsWriteable = GetIsReadWriteable(buffer[(int)SNMP_TITLES.Writeable]); oi.DataType = GetDataType(buffer[(int)SNMP_TITLES.DataType]); ParseValidSetValues(oi, buffer[(int)SNMP_TITLES.ValidSetValue]); oi.InvalidSetValue = buffer[(int)SNMP_TITLES.InvalidSetValue]; oi.Implementation = buffer[(int)SNMP_TITLES.Implementation]; oi.Capability = GetCapability(buffer[(int)SNMP_TITLES.Capability]); if (!IsError) { lstOidInfo.Add(oi); } } } } } catch (FileNotFoundException fe) { GetLastError = fe.JoinAllErrorMessages(); } catch (DirectoryNotFoundException fe) { GetLastError = fe.JoinAllErrorMessages(); } catch (IOException e) { GetLastError = e.JoinAllErrorMessages(); } finally { if (fs != null) { fs.Close(); } } }
/// <summary> /// GetNext calls start with an index of JobID.0 /// </summary> /// <param name="oi">OidInfo</param> /// <param name="value">string</param> private void GetJobIdIndex(OidInfo oi, string value) { string[] indexes = value.Split('.'); if (indexes.Count() == 2) { oi.SnmpCallType = SNMP_CALL.GetNext; oi.SupportedIndexes.Add(indexes[1]); } else { GetLastError = "GetJobIdIndex: Unexpected number of values for JobID: " + indexes.Count().ToString(); } }
/// <summary> /// Four types of non supported indexes /// 1. Single digit /// 2. String values separated by '&' /// 4. string with more than one digit /// 3. empty string /// </summary> /// <param name="oi">OidInfo</param> /// <param name="nonSupportedIdx">string</param> private void ParseNonSupportedIndexes(OidInfo oi, string nonSupportedIdx) { string value = nonSupportedIdx.Trim(); if (value.Length == 1) { oi.NonSupportedIndexes.Add(value); } else if (value.Contains('&')) { GetIndexes(oi.NonSupportedIndexes, value); } else if (value.Length > 0) { oi.NonSupportedIndexes.Add(value); } }
/// <summary> /// parses the valid set of values to be used for the SNMP set call /// </summary> /// <param name="oi"></param> /// <param name="validSet"></param> private void ParseValidSetValues(OidInfo oi, string validSet) { string value = validSet.Trim(); if (value.Length == 1) { oi.ValidSetValues.Add(value); } else if (value.Contains('&')) { GetIndexes(oi.ValidSetValues, value); } else if (value.Length > 0) { oi.ValidSetValues.Add(value); } }
public OidInfo(OidInfo oi) { // TODO: Complete member initialization this.NameOid = oi.NameOid; this.OIDValue = oi.OIDValue; this.ExpectedValue = oi.ExpectedValue; this.InvalidSetValue = oi.InvalidSetValue; this.Implementation = oi.Implementation; this.SupportedIndexes = SetStringList(oi.SupportedIndexes); this.NonSupportedIndexes = SetStringList(oi.NonSupportedIndexes); this.ValidSetValues = SetStringList(oi.ValidSetValues); this.IsReadable = oi.IsReadable; this.IsWriteable = oi.IsWriteable; this.DataType = oi.DataType; this.SnmpCallType = oi.SnmpCallType; }