using System; using System.IO; namespace LipingShare.LCLib.Asn1Processor { /// /// Summary description for RelativeOid. /// internal class RelativeOid : Oid { /// /// Constructor. /// public RelativeOid() { } /// /// Encode relative OID string and put result into /// /// output stream. /// source OID string. public override void Encode(Stream bt, string oidStr) { string[] oidList = oidStr.Split('.'); ulong[] values = new ulong[oidList.Length]; for (int i = 0; i < oidList.Length; i++) { values[i] = Convert.ToUInt64(oidList[i]); } for (int i = 0; i < values.Length; i++) EncodeValue(bt, values[i]); } /// /// Decode relative OID and return OID string. /// /// source stream. /// result OID string. public override string Decode(Stream bt) { string retval = ""; ulong v = 0; bool isFirst = true; while (bt.Position < bt.Length) { try { DecodeValue(bt, ref v); if (isFirst) { retval = v.ToString(); isFirst = false; } else { retval += "." + v.ToString(); } } catch (Exception e) { throw new Exception("Failed to decode OID value: " + e.Message); } } return retval; } } }