예제 #1
0
 /// <summary>
 /// Look up a DNS SRV record, returning the best host and port number to connect to.
 /// </summary>
 /// <param name="prefix">The SRV prefix, ending with a dot.  Example: "_xmpp-client._tcp."</param>
 /// <param name="domain">The domain to check</param>
 /// <param name="host">The host name to connect to</param>
 /// <param name="port">The port number to connect to</param>
 public static void LookupSRV(string prefix, string domain, ref string host, ref int port)
 {
     if (prefix == null)
     {
         throw new ArgumentNullException("prefix");
     }
     if (domain == null)
     {
         throw new ArgumentNullException("domain");
     }
     if (!prefix.EndsWith("."))
     {
         throw new ArgumentOutOfRangeException("Prefix must end in '.'", "prefix");
     }
     try
     {
         SRVRecord   record;
         DnsRequest  request  = new DnsRequest(prefix + domain);
         DnsResponse response = request.GetResponse(DnsRecordType.SRV);
         record = PickSRV(response.SRVRecords);
         host   = record.NameNext;
         port   = record.Port;
         Debug.WriteLine(string.Format("SRV found: {0}:{1}", host, port));
     }
     catch
     {
         host = domain;
     }
 }
예제 #2
0
        /// <summary>
        /// Look up a DNS TXT record.
        /// </summary>
        /// <param name="prefix">The prefix, ending in '.'.  Example: "_xmppconnect."</param>
        /// <param name="domain">The domain to search</param>
        /// <param name="attribute">The attribute name to look for.  Example: "_xmpp-client-xbosh"</param>
        /// <returns></returns>
        public static string LookupTXT(string prefix, string domain, string attribute)
        {
            if (prefix == null)
            {
                throw new ArgumentNullException("prefix");
            }
            if (domain == null)
            {
                throw new ArgumentNullException("domain");
            }
            if (attribute == null)
            {
                throw new ArgumentNullException("attribute");
            }
            if (!prefix.EndsWith("."))
            {
                throw new ArgumentOutOfRangeException("Prefix must end in '.'", "prefix");
            }

            try
            {
                if (Environment.OSVersion.Platform != PlatformID.Unix)
                {
                    DnsRequest  request  = new DnsRequest(prefix + domain);
                    DnsResponse response = request.GetResponse(DnsRecordType.TEXT);
                    string      attr     = attribute + "=";

                    foreach (TXTRecord txt in response.TXTRecords)
                    {
                        if (txt.StringArray.StartsWith(attr))
                        {
                            Debug.WriteLine(string.Format("TXT found: {0}", txt.StringArray));
                            return(txt.StringArray.Substring(attr.Length));
                        }
                    }
                }
                else
                {
                    // FIXME: Add TXT support to UnixDnsResolver...
                    throw new NotImplementedException();
                }
            }
            catch
            {
            }
            return(null);
        }
예제 #3
0
        /// <summary>
        /// Look up a DNS TXT record.
        /// </summary>
        /// <param name="prefix">The prefix, ending in '.'.  Example: "_xmppconnect."</param>
        /// <param name="domain">The domain to search</param>
        /// <param name="attribute">The attribute name to look for.  Example: "_xmpp-client-xbosh"</param>
        /// <returns></returns>
        public static string LookupTXT(string prefix, string domain, string attribute)
        {
            if (prefix == null)
            {
                throw new ArgumentNullException("prefix");
            }
            if (domain == null)
            {
                throw new ArgumentNullException("domain");
            }
            if (attribute == null)
            {
                throw new ArgumentNullException("attribute");
            }
            if (!prefix.EndsWith("."))
            {
                throw new ArgumentOutOfRangeException("Prefix must end in '.'", "prefix");
            }

            try
            {
                DnsRequest  request  = new DnsRequest(prefix + domain);
                DnsResponse response = request.GetResponse(DnsRecordType.TEXT);
                string      attr     = attribute + "=";
                foreach (TXTRecord txt in response.TXTRecords)
                {
                    if (txt.StringArray.StartsWith(attr))
                    {
                        Debug.WriteLine(string.Format("TXT found: {0}", txt.StringArray));
                        return(txt.StringArray.Substring(attr.Length));
                    }
                }
            }
            catch
            {
            }
            return(null);
        }