Пример #1
0
        public DnsTransaction.ResourceRecord lookup(DnsTransaction.QuestionRecord record)
        {
            uint qid = getDnsQueryId(record);

            using (MySqlCommand sql = new MySqlCommand("SELECT (ttl,data) FROM records WHERE query=@query ORDER BY cached DESC LIMIT 1", db))
            {
                sql.Parameters.AddWithValue("@query", qid);
                sql.Prepare();

                using (MySqlDataReader results = sql.ExecuteReader())
                {
                    byte[]       chunk = new byte[1024];
                    long         n     = 0;
                    long         r;
                    MemoryStream s = new MemoryStream();
                    do
                    {
                        r = results.GetBytes(1, n, chunk, 0, chunk.Length);
                        s.Write(chunk, 0, (int)r);
                    } while(r == chunk.Length);

                    return(new DnsTransaction.ResourceRecord(record, results.GetUInt32(0), s.ToArray()));
                }
            }
        }
Пример #2
0
        public uint getDnsQueryId(DnsTransaction.QuestionRecord query, uint labelId = 0)
        {
            if (labelId == 0)
            {
                labelId = getDnsLabelId(query.name);
            }


            MySqlCommand sql = new MySqlCommand("SELECT (id) FROM queries WHERE label=@label AND type=@type AND class=@class LIMIT 1", db);

            sql.Parameters.AddWithValue("@label", labelId.ToString());
            sql.Parameters.AddWithValue("@type", (uint)query._type);
            sql.Parameters.AddWithValue("@class", (uint)query._class);

            sql.Prepare();
            object r = sql.ExecuteScalar();

            if (r != null)
            {
                return((uint)r);
            }

            // Doesn't Exist, lets create
            sql.CommandText = "INSERT INTO queries (label,type,class) VALUES (@label,@type,@class)";
            sql.Prepare();
            sql.ExecuteNonQuery();
            return((uint)sql.LastInsertedId);
        }
Пример #3
0
 public DnsTask(DnsTransaction.QuestionRecord question)
 {
     this.resolver = new DnsTransaction(1, new DnsTransaction.DnsFlags(0x0100), question);
 }