Example #1
0
 /// <summary>
 /// Reads data into this RR from the DNS wire format data in <paramref name="reader"/>
 /// </summary>
 /// <param name="reader">Reader in which wire format data for this RR is already buffered.</param>
 protected override void DeserializeRecordData(ref DnsBufferReader reader)
 {
     this.Priority = reader.ReadUShort();
     this.Weight   = reader.ReadUShort();
     this.Port     = reader.ReadUShort();
     this.Target   = reader.ReadDomainName();
 }
Example #2
0
        /// <summary>
        /// Reads data into this RR from the DNS wire format data in <paramref name="reader"/>
        /// </summary>
        /// <param name="reader">Reader in which wire format data for this RR is already buffered.</param>
        protected override void DeserializeRecordData(ref DnsBufferReader reader)
        {
            ushort certType = reader.ReadUShort();

            if (certType > (ushort)CertificateType.IACPKIK)
            {
                throw new DnsProtocolException(DnsProtocolError.InvalidCertRecord);
            }
            m_certType  = (CertificateType)certType;
            m_keyTag    = reader.ReadUShort();
            m_algorithm = reader.ReadByte();
            m_certData  = reader.ReadBytes(this.RecordDataLength - 5); // 5 == # of bytes we've already read (certType, keytag etc)

            this.EnsureDnsCert();
        }
Example #3
0
        //--------------------------------------------
        //
        // TCP Transport
        //
        //--------------------------------------------
        void ExecuteTCP()
        {
            using (Socket tcpSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp))
            {
                tcpSocket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.SendTimeout, this.TimeoutInMilliseconds);
                tcpSocket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReceiveTimeout, this.TimeoutInMilliseconds);

                tcpSocket.Connect(m_dnsServer);

                try
                {
                    m_lengthBuffer.Clear();
                    m_lengthBuffer.AddUshort((ushort)m_requestBuffer.Count);

                    tcpSocket.Send(m_lengthBuffer.Buffer, m_lengthBuffer.Count, SocketFlags.None);
                    tcpSocket.Send(m_requestBuffer.Buffer, m_requestBuffer.Count, SocketFlags.None);
                    //
                    // First, receive the response message length
                    //
                    m_lengthBuffer.Clear();
                    m_lengthBuffer.Count = this.ReadTcp(tcpSocket, m_lengthBuffer.Buffer, m_lengthBuffer.Capacity);
                    //
                    // Read length of the response to come
                    //
                    DnsBufferReader reader       = m_lengthBuffer.CreateReader();
                    ushort          responseSize = reader.ReadUShort();
                    m_responseBuffer.ReserveCapacity(responseSize);
                    //
                    // Now receive the real response
                    //
                    m_responseBuffer.Count = this.ReadTcp(tcpSocket, m_responseBuffer.Buffer, responseSize);
                }
                finally
                {
                    tcpSocket.Shutdown(SocketShutdown.Both);
                }
            }
        }
Example #4
0
 /// <summary>
 /// Reads data into this RR from the DNS wire format data in <paramref name="reader"/>
 /// </summary>
 /// <param name="reader">Reader in which wire format data for this RR is already buffered.</param>
 protected override void DeserializeRecordData(ref DnsBufferReader reader)
 {
     this.Priority = reader.ReadUShort();
     this.Weight = reader.ReadUShort();
     this.Port = reader.ReadUShort();
     this.Target = reader.ReadDomainName();
 }
Example #5
0
 /// <summary>
 /// Reads data into this RR from the DNS wire format data in <paramref name="reader"/>
 /// </summary>
 /// <param name="reader">Reader in which wire format data for this RR is already buffered.</param>
 protected override void DeserializeRecordData(ref DnsBufferReader reader)
 {
     ushort certType = reader.ReadUShort();
     if (certType > (ushort) CertificateType.IACPKIK)
     {
         throw new DnsProtocolException(DnsProtocolError.InvalidCertRecord);
     } 
     m_certType = (CertificateType) certType;
     m_keyTag = reader.ReadUShort();
     m_algorithm = reader.ReadByte();
     m_certData = reader.ReadBytes(this.RecordDataLength - 5); // 5 == # of bytes we've already read (certType, keytag etc)
     
     this.EnsureDnsCert();            
 }