コード例 #1
0
        public void dnsCallback(object result)
        {
            DnsTransaction.ResourceRecord rr = result as DnsTransaction.ResourceRecord;
            IPAddress addr = new IPAddress(rr.data);

            try
            {
                tor.proxy.CreateConnectionAsyncCompleted += new EventHandler <CreateConnectionAsyncCompletedEventArgs>(onConnect);
                tor.proxy.CreateConnectionAsync(addr.ToString(), 43);
            }
            catch (SocketException e)
            {
                Debug.WriteLine(e.ToString());
            }
        }
コード例 #2
0
        public void cache(object obj)
        {
            uint source = 0; // source nameserver id?

            if (obj is DnsTransaction)
            {
                DnsTransaction t = obj as DnsTransaction;
                // cache question too? they're in the resource records....
                // there should be a table that indicates the question (request made, the time, the flags, the response code, etc)
                foreach (DnsTransaction.ResourceRecord rr in t.getRecords())
                {
                    cache(rr);
                }
            }
            if (obj is DnsTransaction.ResourceRecord)
            {
                DnsTransaction.ResourceRecord record = obj as DnsTransaction.ResourceRecord;
                uint         qid = getDnsQueryId(record.question);
                MySqlCommand sql = new MySqlCommand("SELECT id FROM records WHERE query=@query AND ttl > (now()-cached) ORDER BY cached DESC LIMIT 1", db);
                sql.Parameters.AddWithValue("@query", qid);

                sql.Prepare();
                object r = sql.ExecuteScalar();
                if (r == null)
                {
                    // Not in cache, or expired
                    sql.CommandText = "INSERT INTO records (query,ttl,data,source) VALUES (@query,@ttl,@data,@source)";
                    sql.Parameters.AddWithValue("@ttl", record.ttl);
                    sql.Parameters.AddWithValue("@data", record.data);
                    if (source != 0)
                    {
                        sql.Parameters.AddWithValue("@source", source);
                    }
                    else
                    {
                        sql.Parameters.AddWithValue("@source", null);
                    }
                    sql.ExecuteNonQuery();
                }
            }
        }