SIPSorcery.Net.DNSManager.ProcessLookups C# (CSharp) Méthode

ProcessLookups() private static méthode

private static ProcessLookups ( ) : void
Résultat void
        private static void ProcessLookups()
        {
            string hostname = null;

            try
            {
                string threadName = Thread.CurrentThread.Name;
                //logger.Debug("DNS Lookup Thread " + threadName + " started.");

                while (!m_close)
                {
                    int lookups = 0;
                    while (m_queuedLookups.Count > 0 && !m_close)
                    {
                        LookupRequest lookupRequest = LookupRequest.Empty;
                        string queryType = null;
                        //string hostname = null;
                        DNSResponse dnsResponse = null;
                        DateTime startLookupTime = DateTime.Now;

                        try
                        {
                            lock (m_queuedLookups)
                            {
                                if (m_queuedLookups.Count > 0)
                                {
                                    lookupRequest = m_queuedLookups.Dequeue();
                                    hostname = lookupRequest.Hostname;
                                    queryType = lookupRequest.QueryType.ToString();
                                }
                                else
                                {
                                    // Another thread got in ahead of this one to do the lookup.
                                    continue;
                                }
                            }

                            lookups++;
                            logger.Debug("DNSManager thread " + threadName + " looking up " + queryType + " " + lookupRequest.Hostname + ".");

                            //dnsEntry = new DNSEntry(hostname);
                            //dnsEntry.LastLookup = DateTime.Now;

                            //IPHostEntry ipHostEntry = Dns.GetHostEntry(hostname);
                            if (lookupRequest.DNSServers == null)
                            {
                                dnsResponse = m_resolver.Query(lookupRequest.Hostname, lookupRequest.QueryType, lookupRequest.Timeout);
                            }
                            else
                            {
                                dnsResponse = m_resolver.Query(lookupRequest.Hostname, lookupRequest.QueryType, lookupRequest.Timeout, lookupRequest.DNSServers);
                            }

                            if (dnsResponse == null)
                            {
                                logger.Warn("DNSManager resolution error for " + lookupRequest.QueryType + " " + lookupRequest.Hostname + " no response was returned. Time taken=" + DateTime.Now.Subtract(startLookupTime).TotalMilliseconds + "ms.");
                            }
                            else if (dnsResponse.Error != null)
                            {
                                logger.Warn("DNSManager resolution error for " + lookupRequest.QueryType + " " + lookupRequest.Hostname + ". " + dnsResponse.Error + ". Time taken=" + DateTime.Now.Subtract(startLookupTime).TotalMilliseconds + "ms.");
                            }
                            else if (lookupRequest.QueryType == DNSQType.A)
                            {
                                if (dnsResponse.RecordsA != null && dnsResponse.RecordsA.Length > 0)
                                {
                                    logger.Debug("DNSManager resolved A record for " + lookupRequest.Hostname + " to " + dnsResponse.RecordsA[0].Address.ToString() + " in " + DateTime.Now.Subtract(startLookupTime).TotalMilliseconds + "ms.");
                                }
                                else
                                {
                                    logger.Warn("DNSManager could not resolve A record for " + lookupRequest.Hostname + " in " + DateTime.Now.Subtract(startLookupTime).TotalMilliseconds + "ms.");
                                }
                            }
                            else if (lookupRequest.QueryType == DNSQType.SRV)
                            {
                                logger.Debug("DNSManager resolve time for " + lookupRequest.Hostname + " " + lookupRequest.QueryType + " " + DateTime.Now.Subtract(startLookupTime).TotalMilliseconds + "ms.");
                                if (dnsResponse.RecordsRR == null || dnsResponse.RecordsRR.Length == 0)
                                {
                                    logger.Debug(" no SRV resource records found for " + lookupRequest.Hostname + ".");
                                }
                                else
                                {
                                    foreach (RecordSRV srvRecord in dnsResponse.RecordSRV)
                                    {
                                        logger.Debug(" result: priority=" + srvRecord.Priority + ", weight=" + srvRecord.Weight + ", port=" + srvRecord.Port + ", target=" + srvRecord.Target + ".");
                                    }
                                }
                            }
                            else
                            {
                                logger.Debug("DNSManager resolve time for " + lookupRequest.Hostname + " " + lookupRequest.QueryType + " " + DateTime.Now.Subtract(startLookupTime).TotalMilliseconds + "ms.");
                            }
                        }
                        catch (Exception lookupExcp)
                        {
                            //dnsEntry.Unresolvable = true;
                            dnsResponse.Error = "Exception lookup. " + lookupExcp.Message;
                            logger.Error("Exception DNSManager ProcessLookups Lookup (thread, " + threadName + ", hostname=" + hostname + "). " + lookupExcp.GetType().ToString() + "-" + lookupExcp.Message);
                        }
                        finally
                        {
                            try
                            {
                                if (dnsResponse != null)
                                {
                                    if (lookupRequest.CompleteEvent != null)
                                    {
                                        lookupRequest.CompleteEvent.Set();
                                    }

                                    // Mark any requests for the same hostname complete and fire the completed lookup event where required.
                                    if (lookupRequest.Duplicates != null)
                                    {
                                        foreach (LookupRequest duplicateRequest in lookupRequest.Duplicates)
                                        {
                                            duplicateRequest.CompleteEvent.Set();
                                        }
                                    }
                                }

                                lock (m_inProgressLookups)
                                {
                                    m_inProgressLookups.Remove(lookupRequest);
                                }
                            }
                            catch (Exception excp)
                            {
                                logger.Error("Exception DNSManager ProcessLookup Adding DNS Response. " + excp.Message);
                            }
                        }
                    }

                    // No more lookups outstanding, put thread to sleep until a new lookup is required.
                    m_lookupARE.WaitOne();
                }

                //logger.Debug("Thread " + threadName + " shutdown.");
            }
            catch (Exception excp)
            {
                logger.Error("Exception DNSManager ProcessLookups. " + excp.Message);
            }
            finally
            {
                if (m_close)
                {
                    m_lookupARE.Set();
                }

                logger.Debug("DNSManager thread shutdown.");
            }
        }