private Asn1SetOf<AttributeValue> CreateAttributeValueSet(byte[][] values)
        {
            int length = (values != null) ? values.Length : 0;

            AttributeValue[] valueArray = new AttributeValue[length];
            for (int i = 0; i < length; i++)
            {
                valueArray[i] = new AttributeValue(System.Text.Encoding.UTF8.GetString(values[i]));
            }

            Asn1SetOf<AttributeValue> valueSet = new Asn1SetOf<AttributeValue>(valueArray);
            return valueSet;
        }
        /// <summary>
        /// Creates an AddRequest packet.
        /// </summary>
        /// <param name="context">The user context which contains message ID.</param>
        /// <param name="objectDn">The DN of the object to be added.</param>
        /// <param name="attributes">Attributes to be set.</param>
        /// <returns>The packet that contains the request.</returns>
        internal override AdtsAddRequestPacket CreateAddRequest(
            AdtsLdapContext context,
            string objectDn,
            params KeyValuePair<string, string[]>[] attributes)
        {
            int length = (attributes != null) ? attributes.Length : 0;

            AttributeList_element[] attributeArray = new AttributeList_element[length];
            for (int i = 0; i < length; i++)
            {
                AttributeValue[] attributeValues = new AttributeValue[attributes[i].Value.Length];
                for (int j = 0; j < attributes[i].Value.Length; i++)
                {
                    attributeValues[j] = new AttributeValue(attributes[i].Value[j]);
                }
                attributeArray[i] = new AttributeList_element(new AttributeDescription(attributes[i].Key), new Asn1SetOf<AttributeValue>(attributeValues));
            }

            AddRequest addRequest = new AddRequest(
                new LDAPDN(objectDn ?? string.Empty),
                new AttributeList(attributeArray));

            LDAPMessage_protocolOp operation = new LDAPMessage_protocolOp();
            operation.SetData(LDAPMessage_protocolOp.extendedReq, addRequest);

            LDAPMessage message = new LDAPMessage(new MessageID(context.MessageId), operation, null);

            AdtsAddRequestPacket packet = new AdtsAddRequestPacket();
            packet.ldapMessagev3 = message;
            packet.messageId = context.MessageId;

            return packet;
        }
        /// <summary>
        /// Creates a _SetOfAttributeValue instance that contains a set of values.
        /// </summary>
        /// <param name="values">The values to be added.</param>
        /// <returns>The _SetOfAttributeValue instance. If values is null, an empty set will be returned.</returns>
        private Asn1SetOf<AttributeValue> CreateAttributeValueSet(string[] values)
        {
            int length = (values != null) ? values.Length : 0;

            AttributeValue[] valueArray = new AttributeValue[length];
            for (int i = 0; i < length; i++)
            {
                valueArray[i] = new AttributeValue(values[i]);
            }

            Asn1SetOf<AttributeValue> valueSet = new Asn1SetOf<AttributeValue>(valueArray);
            return valueSet;
        }