public void AttributeWithSessionQNameIndex()
        {
            XmlDictionaryString    ds;
            XmlDictionary          dic = new XmlDictionary();
            XmlBinaryReaderSession ses = new XmlBinaryReaderSession();

            ses.Add(0, "SessionLookupValue");

            // <d a="QNameIndex(0x18,1)"></d>
            byte [] bytes = new byte [] { 0x40, 0x01, 0x64, 0x04, 0x01, 0x61, 0xbc, 0x18, 0x01, 0x01 };

            XmlDictionaryReader reader = XmlDictionaryReader.CreateBinaryReader(
                new MemoryStream(bytes), dic, new XmlDictionaryReaderQuotas(), ses);

            Assert.IsTrue(reader.Read(), "#1");
            AssertNode(XmlNodeType.Element, "d", "", "", 0, reader, "#2");
            reader.MoveToAttribute(0);
            if (reader.LocalName != "a")
            {
                reader.MoveToAttribute(1);
            }
            AssertNode(XmlNodeType.Attribute, "a", "", "y:SessionLookupValue", 1, reader, "#3");
            Assert.IsTrue(reader.ReadAttributeValue(), "#4");
            AssertNode(XmlNodeType.Text, "a", "", "y:SessionLookupValue", 2, reader, "#5");
            reader.MoveToContent();
            Assert.IsFalse(reader.ReadAttributeValue(), "#6");
        }
        public void AttributeXmlns()
        {
            // equivalent to WriteXmlnsAttribute()
            XmlDictionaryString ds;
            XmlDictionary       dic = new XmlDictionary();

            dic.Add("xmlns");
            dic.Add("http://www.w3.org/2000/xmlns/");

            byte [] bytes = new byte [] {
                // 40 (root) 04 (a) A8
                // 09 (foo) (urn:foo) 08 (urn:bar)
                0x40, 4, 0x72, 0x6F, 0x6F, 0x74,
                0x04, 1, 0x61, 0xA8,
                0x09, 3, 0x66, 0x6F, 0x6F, 7, 0x75, 0x72, 0x6E, 0x3A, 0x66, 0x6F, 0x6F,
                0x08, 7, 0x75, 0x72, 0x6E, 0x3A, 0x62, 0x61, 0x72, 1
            };

            Read(bytes);

            XmlDictionaryReader reader = XmlDictionaryReader.CreateBinaryReader(new MemoryStream(bytes), new XmlDictionaryReaderQuotas());

            Assert.IsTrue(reader.Read(), "#1-1");
            AssertNode(XmlNodeType.Element, "root", "urn:bar", "", 0, reader, "#1");
            reader.MoveToAttribute(0);
            if (reader.LocalName != "a")
            {
                reader.MoveToAttribute(1);
            }
            AssertNode(XmlNodeType.Attribute, "a", "", "", 1, reader, "#2");
            Assert.IsTrue(reader.ReadAttributeValue(), "#3");
            AssertNode(XmlNodeType.Text, "a", "", "", 2, reader, "#4");
            Assert.IsFalse(reader.ReadAttributeValue(), "#5");
        }
        public void AttributeWithLocalDictQNameIndex()
        {
            XmlDictionary dic = new XmlDictionary();

            dic.Add("xmlns");
            dic.Add("http://www.w3.org/2000/xmlns/");
            dic.Add("DictionaryValue");
            dic.Add("SomeDictionaryString");
            dic.Add("AdditionalDictionaryString");

            // <d a="QNameIndex(0,8)"></d>
            byte [] bytes = new byte [] { 0x40, 0x01, 0x64, 0x04, 0x01, 0x61, 0xbc, 0x00, 0x08, 0x01 };

            XmlDictionaryReader reader = XmlDictionaryReader.CreateBinaryReader(
                new MemoryStream(bytes), dic, new XmlDictionaryReaderQuotas());

            Assert.IsTrue(reader.Read(), "#1");
            AssertNode(XmlNodeType.Element, "d", "", "", 0, reader, "#2");
            reader.MoveToAttribute(0);
            if (reader.LocalName != "a")
            {
                reader.MoveToAttribute(1);
            }
            AssertNode(XmlNodeType.Attribute, "a", "", "a:AdditionalDictionaryString", 1, reader, "#3");
            Assert.IsTrue(reader.ReadAttributeValue(), "#4");
            AssertNode(XmlNodeType.Text, "a", "", "a:AdditionalDictionaryString", 2, reader, "#5");
            Assert.IsFalse(reader.ReadAttributeValue(), "#6");
        }
 public static  XmlAttributeHolder[] ReadAttributes(XmlDictionaryReader reader, ref int maxSizeOfHeaders)
 {
     if (reader.AttributeCount == 0)
     {
         return(emptyArray);
     }
     XmlAttributeHolder[] holderArray = new XmlAttributeHolder[reader.AttributeCount];
     reader.MoveToFirstAttribute();
     for (int i = 0; i < holderArray.Length; i++)
     {
         string namespaceURI = reader.NamespaceURI;
         string localName    = reader.LocalName;
         string prefix       = reader.Prefix;
         string s            = string.Empty;
         while (reader.ReadAttributeValue())
         {
             if (s.Length == 0)
             {
                 s = reader.Value;
             }
             else
             {
                 s = s + reader.Value;
             }
         }
         Deduct(prefix, ref maxSizeOfHeaders);
         Deduct(localName, ref maxSizeOfHeaders);
         Deduct(namespaceURI, ref maxSizeOfHeaders);
         Deduct(s, ref maxSizeOfHeaders);
         holderArray[i] = new XmlAttributeHolder(prefix, localName, namespaceURI, s);
         reader.MoveToNextAttribute();
     }
     reader.MoveToElement();
     return(holderArray);
 }
 public static XmlAttributeHolder[] ReadAttributes(XmlDictionaryReader reader, ref int maxSizeOfHeaders)
 {
     if (reader.AttributeCount == 0)
     {
         return(emptyArray);
     }
     XmlAttributeHolder[] attributes = new XmlAttributeHolder[reader.AttributeCount];
     reader.MoveToFirstAttribute();
     for (int i = 0; i < attributes.Length; i++)
     {
         string ns        = reader.NamespaceURI;
         string localName = reader.LocalName;
         string prefix    = reader.Prefix;
         string value     = string.Empty;
         while (reader.ReadAttributeValue())
         {
             if (value.Length == 0)
             {
                 value = reader.Value;
             }
             else
             {
                 value += reader.Value;
             }
         }
         Deduct(prefix, ref maxSizeOfHeaders);
         Deduct(localName, ref maxSizeOfHeaders);
         Deduct(ns, ref maxSizeOfHeaders);
         Deduct(value, ref maxSizeOfHeaders);
         attributes[i] = new XmlAttributeHolder(prefix, localName, ns, value);
         reader.MoveToNextAttribute();
     }
     reader.MoveToElement();
     return(attributes);
 }
예제 #6
0
 public void MoveToAttributeSimpleDummyRoot()
 {
     reader = CreateReader("1234");
     Assert.IsFalse(reader.MoveToFirstAttribute(), "#1");
     reader.Read();              // element
     Assert.IsTrue(reader.MoveToFirstAttribute(), "#2");
     Assert.AreEqual("type", reader.LocalName, "#3");
     Assert.AreEqual("number", reader.Value, "#4");
     Assert.IsTrue(reader.ReadAttributeValue(), "#5");
     Assert.AreEqual("number", reader.Value, "#6");
     Assert.IsFalse(reader.MoveToNextAttribute(), "#7");
     Assert.IsTrue(reader.MoveToFirstAttribute(), "#8");
     Assert.IsFalse(reader.MoveToNextAttribute(), "#9");
 }
예제 #7
0
 public void MoveToAttributeArray()
 {
     reader = CreateReader("[]");
     Assert.IsFalse(reader.MoveToFirstAttribute(), "#1");
     reader.Read();              // element
     Assert.IsTrue(reader.MoveToFirstAttribute(), "#2");
     Assert.AreEqual("type", reader.LocalName, "#3");
     Assert.AreEqual("array", reader.Value, "#4");
     Assert.IsTrue(reader.ReadAttributeValue(), "#5");
     Assert.AreEqual("array", reader.Value, "#6");
     Assert.IsFalse(reader.MoveToNextAttribute(), "#7");
     Assert.IsTrue(reader.MoveToFirstAttribute(), "#8");
     Assert.IsFalse(reader.MoveToNextAttribute(), "#9");
 }
예제 #8
0
        public void MoveToElementSimpleDummyRoot()
        {
            reader = CreateReader("1234");
            reader.Read();              // element
            Assert.IsTrue(reader.MoveToFirstAttribute(), "#1");
            Assert.IsTrue(reader.MoveToElement(), "#1-1");

            Assert.IsTrue(reader.MoveToFirstAttribute(), "#2");
            Assert.IsTrue(reader.ReadAttributeValue(), "#2-1");
            Assert.IsTrue(reader.MoveToElement(), "#2-2");

            Assert.IsTrue(reader.MoveToFirstAttribute(), "#3");
            Assert.IsFalse(reader.MoveToNextAttribute(), "#3-1");
            Assert.IsTrue(reader.MoveToElement(), "#3-2");
        }
예제 #9
0
        private void WriteElementNode(XmlDictionaryReader reader, bool defattr)
        {
            XmlDictionaryString localName;
            XmlDictionaryString namespaceUri;

            if (reader.TryGetLocalNameAsDictionaryString(out localName) && reader.TryGetNamespaceUriAsDictionaryString(out namespaceUri))
            {
                WriteStartElement(reader.Prefix, localName, namespaceUri);
            }
            else
            {
                WriteStartElement(reader.Prefix, reader.LocalName, reader.NamespaceURI);
            }
            if (defattr || !reader.IsDefault)
            {
                if (reader.MoveToFirstAttribute())
                {
                    do
                    {
                        if (reader.TryGetLocalNameAsDictionaryString(out localName) && reader.TryGetNamespaceUriAsDictionaryString(out namespaceUri))
                        {
                            WriteStartAttribute(reader.Prefix, localName, namespaceUri);
                        }
                        else
                        {
                            WriteStartAttribute(reader.Prefix, reader.LocalName, reader.NamespaceURI);
                        }
                        while (reader.ReadAttributeValue())
                        {
                            if (reader.NodeType == XmlNodeType.EntityReference)
                            {
                                WriteEntityRef(reader.Name);
                            }
                            else
                            {
                                WriteTextNode(reader, true);
                            }
                        }
                        WriteEndAttribute();
                    }while (reader.MoveToNextAttribute());
                    reader.MoveToElement();
                }
            }
            if (reader.IsEmptyElement)
            {
                WriteEndElement();
            }
        }
예제 #10
0
 public override bool ReadAttributeValue()
 {
     return(_reader.ReadAttributeValue());
 }
예제 #11
0
        protected override byte [] EncodeSecurityState(byte [] src)
        {
            foreach (byte b in src)
            {
                Console.Write("{0:X02} ", b);
            }
            Console.WriteLine();
            // this show how it is LAMESPEC.
            //Array.Reverse (src);
            XmlDictionary dic = new XmlDictionary();

            for (int i = 0; i < 60; i++)
            {
                dic.Add("n" + i);
            }
            XmlDictionaryReaderQuotas quotas =
                new XmlDictionaryReaderQuotas();
            XmlDictionaryReader cr = XmlDictionaryReader.CreateBinaryReader(src, 0, src.Length, dic, quotas);

            cr.Read();
            XmlWriter w = XmlWriter.Create(Console.Out);

            while (!cr.EOF)
            {
                switch (cr.NodeType)
                {
                case XmlNodeType.Element:
                    int dummy;
                    w.WriteStartElement(cr.Prefix, cr.LocalName, cr.NamespaceURI);
                    for (int i = 0; i < cr.AttributeCount; i++)
                    {
                        cr.MoveToAttribute(i);
                        w.WriteStartAttribute(cr.Prefix, cr.LocalName, cr.NamespaceURI);
                        bool b64 = cr.LocalName == "n41";
                        while (cr.ReadAttributeValue())
                        {
                            if (b64)
                            {
                                foreach (byte b in Convert.FromBase64String(cr.Value))
                                {
                                    w.WriteString(String.Format("{0:X02}-", b));
                                }
                            }
                            else
                            {
                                w.WriteString(cr.Value);
                            }
                        }
                        w.WriteEndAttribute();
                    }
                    //w.WriteAttributes (cr, false);
                    cr.MoveToElement();
                    if (cr.IsEmptyElement)
                    {
                        w.WriteEndElement();
                    }
                    cr.Read();
                    break;

                case XmlNodeType.EndElement:
                    w.WriteEndElement();
                    cr.Read();
                    break;

                default:
                    if (cr.TryGetBase64ContentLength(out dummy))
                    {
                        foreach (byte b in cr.ReadContentAsBase64())
                        {
                            w.WriteString(String.Format("{0:X02} ", b));
                        }
                    }
                    else
                    {
                        w.WriteNode(cr, false);
                    }
                    break;
                }
            }
            w.Close();

            return(src);
        }
예제 #12
0
        void GetCompactSignatureAttributes(out string schemeUri, out string keyId, out string refs, out string sig, out string inclusivePrefixesList)
        {
            schemeUri             = String.Empty;
            keyId                 = String.Empty;
            refs                  = String.Empty;
            sig                   = String.Empty;
            inclusivePrefixesList = null;

            XmlDictionaryReader reader = this.Message.Headers.GetReaderAtHeader(this.headerIndex);

            // reader.MoveToStartElement();
            if (reader.IsEmptyElement)
            {
                throw new CompactSignatureSecurityException("Security header doesn't contain a compact signature.");
            }

            // Move on d:Sig
            reader.ReadStartElement();
            reader.MoveToStartElement();

            while (true)
            {
                if (this.IsCompactSignatureElement(reader))
                {
                    // The d:Sig element was found
                    break;
                }

                // Skip over the children of the current node,
                // because Sig must be a direct child of the Security header.
                reader.Skip();

                if (this.IsEndSecurityElement(reader))
                {
                    // The end element of Security was reached.
                    throw new CompactSignatureSecurityException("The security header doesn't contain a compact signature");
                }
            }

            bool schemeFound            = false;
            bool keyIdFound             = false;
            bool refsFound              = false;
            bool sigFound               = false;
            bool inclusivePrefixesFound = false;

            int attributeCount = reader.AttributeCount;

            if (attributeCount != 0)
            {
                reader.MoveToFirstAttribute();
                for (int i = 0; i < attributeCount; i++)
                {
                    string attribLocalName = reader.LocalName;
                    string value           = string.Empty;
                    while (reader.ReadAttributeValue())
                    {
                        if (value.Length == 0)
                        {
                            value = reader.Value;
                        }
                        else
                        {
                            value += reader.Value;
                        }
                    }

                    if (!schemeFound && String.Compare(attribLocalName, ProtocolStrings.CompactSignatureSchemeAttribute, true) == 0)
                    {
                        // Scheme
                        schemeUri   = value;
                        schemeFound = true;
                    }
                    else if (!keyIdFound && String.Compare(attribLocalName, ProtocolStrings.CompactSignatureKeyIdAttribute, true) == 0)
                    {
                        // KeyId
                        keyId      = value;
                        keyIdFound = true;
                    }
                    else if (!refsFound && String.Compare(attribLocalName, ProtocolStrings.CompactSignatureRefsAttribute, true) == 0)
                    {
                        // Refs
                        refs      = value;
                        refsFound = true;
                    }
                    else if (!sigFound && String.Compare(attribLocalName, ProtocolStrings.CompactSignatureElementName, true) == 0)
                    {
                        // Sig
                        sig      = value;
                        sigFound = true;
                    }
                    else if (!inclusivePrefixesFound && String.Compare(attribLocalName, ProtocolStrings.PrefixListAttribute, true) == 0)
                    {
                        // PrefixList
                        inclusivePrefixesList  = value;
                        inclusivePrefixesFound = true;
                    }

                    reader.MoveToNextAttribute();
                }
            }

            reader.Close();
        }