Example #1
0
        public string Lookup(string query, string queryType, HeaderFlags queryOptions = HeaderFlags.RecursionDesired)
        {
            UdpClient udpChannel = null;
            try
            {
                udpChannel = new UdpClient(LOCAL_PORT);
                Message dnsRequest = new Message(queryOptions);
                dnsRequest.AddQuery(query, (RecordType) Enum.Parse(typeof (RecordType), queryType, true));
                byte[] requestDatagram = dnsRequest.AsByteArray();
                int sendResult = udpChannel.Send(requestDatagram, requestDatagram.Length, _serverEndpoint);
                    // Verify sendResult and throw exception if required..

                byte[] responseDatagram = udpChannel.Receive(ref _serverEndpoint);
                Message dnsResponse = new Message(responseDatagram);

                Debug.Assert(dnsResponse.IsForRequest(dnsRequest));
                    // Could make it an [if(isForRequest) ... else retry/throw] if required..

                return dnsResponse.AsString();
            }
            finally
            {
                if(udpChannel != null)
                    udpChannel.Close();
            }
        }
Example #2
0
 internal bool IsForRequest(Message dnsRequest)
 {
     return _header.Id == dnsRequest._header.Id;
 }