diff options
Diffstat (limited to 'mcs/class/Novell.Directory.Ldap/Novell.Directory.Ldap.Events.Edir/Novell.Directory.Ldap.Events.Edir.EventData/GeneralDSEventData.cs')
-rw-r--r-- | mcs/class/Novell.Directory.Ldap/Novell.Directory.Ldap.Events.Edir/Novell.Directory.Ldap.Events.Edir.EventData/GeneralDSEventData.cs | 254 |
1 files changed, 254 insertions, 0 deletions
diff --git a/mcs/class/Novell.Directory.Ldap/Novell.Directory.Ldap.Events.Edir/Novell.Directory.Ldap.Events.Edir.EventData/GeneralDSEventData.cs b/mcs/class/Novell.Directory.Ldap/Novell.Directory.Ldap.Events.Edir/Novell.Directory.Ldap.Events.Edir.EventData/GeneralDSEventData.cs new file mode 100644 index 00000000000..f81e88416c0 --- /dev/null +++ b/mcs/class/Novell.Directory.Ldap/Novell.Directory.Ldap.Events.Edir/Novell.Directory.Ldap.Events.Edir.EventData/GeneralDSEventData.cs @@ -0,0 +1,254 @@ +/****************************************************************************** +* The MIT License +* Copyright (c) 2003 Novell Inc. www.novell.com +* +* Permission is hereby granted, free of charge, to any person obtaining a copy +* of this software and associated documentation files (the Software), to deal +* in the Software without restriction, including without limitation the rights +* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +* copies of the Software, and to permit persons to whom the Software is +* furnished to do so, subject to the following conditions: +* +* The above copyright notice and this permission notice shall be included in +* all copies or substantial portions of the Software. +* +* THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +* SOFTWARE. +*******************************************************************************/ +// +// Novell.Directory.Ldap.Events.Edir.EventData.GeneralDSEventData.cs +// +// Author: +// Anil Bhatia (banil@novell.com) +// +// (C) 2003 Novell, Inc (http://www.novell.com) +// + +using System.IO; +using System.Text; + +using Novell.Directory.Ldap.Asn1; + +namespace Novell.Directory.Ldap.Events.Edir.EventData +{ + /// <summary> + /// The class represents the data for General DS Events. + /// </summary> + public class GeneralDSEventData : BaseEdirEventData + { + protected int ds_time; + public int DSTime + { + get + { + return ds_time; + } + } + + protected int milli_seconds; + public int MilliSeconds + { + get + { + return milli_seconds; + } + } + + protected int nVerb; + public int Verb + { + get + { + return nVerb; + } + } + + protected int current_process; + public int CurrentProcess + { + get + { + return current_process; + } + } + + protected string strPerpetratorDN; + public string PerpetratorDN + { + get + { + return strPerpetratorDN; + } + } + + protected int[] integer_values; + public int[] IntegerValues + { + get + { + return integer_values; + } + } + + protected string[] string_values; + public string[] StringValues + { + get + { + return string_values; + } + } + + public GeneralDSEventData(EdirEventDataType eventDataType, Asn1Object message) + : base(eventDataType, message) + { + int[] length = new int[1]; + + ds_time = getTaggedIntValue( + (Asn1Tagged) decoder.decode(decodedData, length), + GeneralEventField.EVT_TAG_GEN_DSTIME); + milli_seconds = getTaggedIntValue( + (Asn1Tagged) decoder.decode(decodedData, length), + GeneralEventField.EVT_TAG_GEN_MILLISEC); + + nVerb = getTaggedIntValue( + (Asn1Tagged) decoder.decode(decodedData, length), + GeneralEventField.EVT_TAG_GEN_VERB); + current_process = getTaggedIntValue( + (Asn1Tagged) decoder.decode(decodedData, length), + GeneralEventField.EVT_TAG_GEN_CURRPROC); + + strPerpetratorDN = getTaggedStringValue( + (Asn1Tagged) decoder.decode(decodedData, length), + GeneralEventField.EVT_TAG_GEN_PERP); + + Asn1Tagged temptaggedvalue = + ((Asn1Tagged) decoder.decode(decodedData, length)); + + if (temptaggedvalue.getIdentifier().Tag + == (int) GeneralEventField.EVT_TAG_GEN_INTEGERS) + { + //Integer List. + Asn1Sequence inteseq = getTaggedSequence(temptaggedvalue, GeneralEventField.EVT_TAG_GEN_INTEGERS); + Asn1Object[] intobject = inteseq.toArray(); + integer_values = new int[intobject.Length]; + + for (int i = 0; i < intobject.Length; i++) + { + integer_values[i] = ((Asn1Integer) intobject[i]).intValue(); + } + + //second decoding for Strings. + temptaggedvalue = ((Asn1Tagged) decoder.decode(decodedData, length)); + } + else + { + integer_values = null; + } + + if ((temptaggedvalue.getIdentifier().Tag + == (int) GeneralEventField.EVT_TAG_GEN_STRINGS) + && (temptaggedvalue.getIdentifier().Constructed)) + { + //String values. + Asn1Sequence inteseq = + getTaggedSequence(temptaggedvalue, GeneralEventField.EVT_TAG_GEN_STRINGS); + Asn1Object[] stringobject = inteseq.toArray(); + string_values = new string[stringobject.Length]; + + for (int i = 0; i < stringobject.Length; i++) + { + string_values[i] = + ((Asn1OctetString) stringobject[i]).stringValue(); + } + } + else + { + string_values = null; + } + + DataInitDone(); + } + + protected int getTaggedIntValue(Asn1Tagged tagvalue, GeneralEventField tagid) + { + Asn1Object obj = tagvalue.taggedValue(); + + if ((int)tagid != tagvalue.getIdentifier().Tag) + { + throw new IOException("Unknown Tagged Data"); + } + + byte[] dbytes = SupportClass.ToByteArray(((Asn1OctetString) obj).byteValue()); + MemoryStream data = new MemoryStream(dbytes); + + LBERDecoder dec = new LBERDecoder(); + + int length = dbytes.Length; + + return (int)(dec.decodeNumeric(data, length)); + } + + protected string getTaggedStringValue(Asn1Tagged tagvalue, GeneralEventField tagid) + { + Asn1Object obj = tagvalue.taggedValue(); + + if ((int)tagid != tagvalue.getIdentifier().Tag) + { + throw new IOException("Unknown Tagged Data"); + } + + byte[] dbytes = SupportClass.ToByteArray(((Asn1OctetString) obj).byteValue()); + MemoryStream data = new MemoryStream(dbytes); + + LBERDecoder dec = new LBERDecoder(); + + int length = dbytes.Length; + + return (string) dec.decodeCharacterString(data, length); + } + + protected Asn1Sequence getTaggedSequence(Asn1Tagged tagvalue, GeneralEventField tagid) + { + Asn1Object obj = tagvalue.taggedValue(); + + if ((int)tagid != tagvalue.getIdentifier().Tag) + { + throw new IOException("Unknown Tagged Data"); + } + + byte[] dbytes = SupportClass.ToByteArray(((Asn1OctetString) obj).byteValue()); + MemoryStream data = new MemoryStream(dbytes); + + LBERDecoder dec = new LBERDecoder(); + int length = dbytes.Length; + + return new Asn1Sequence(dec, data, length); + } + + /// <summary> + /// Returns a string representation of the object. + /// </summary> + public override string ToString() + { + StringBuilder buf = new StringBuilder(); + + buf.Append("[GeneralDSEventData"); + buf.AppendFormat("(DSTime={0})", ds_time); + buf.AppendFormat("(MilliSeconds={0})", milli_seconds); + buf.AppendFormat("(verb={0})",nVerb); + buf.AppendFormat("(currentProcess={0})", current_process); + buf.AppendFormat("(PerpetartorDN={0})", strPerpetratorDN); + buf.AppendFormat("(Integer Values={0})", integer_values); + buf.AppendFormat("(String Values={0})", string_values); + buf.Append("]"); + + return buf.ToString(); + } + } +} |