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()); } }
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(); } } }