/// <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(); }
/// <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(); }
//-------------------------------------------- // // 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); } } }
/// <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(); }
/// <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(); }