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;
}
}
}