Package net.i2p.util
Class DNSOverHTTPS
- java.lang.Object
-
- net.i2p.util.DNSOverHTTPS
-
- All Implemented Interfaces:
EepGet.StatusListener
public class DNSOverHTTPS extends Object implements EepGet.StatusListener
Simple implemetation of DNS over HTTPS. Also sets the local clock from the received date header. Warning - not thread-safe. Create new instances as necessary. As of 0.9.49, this supports the RFC 8484 (DNS) format only. Does NOT support the JSON format (used prior to 0.9.49) or RFC 7858 (DNS over TLS). https://developers.google.com/speed/public-dns/docs/dns-over-https https://developers.cloudflare.com/1.1.1.1/dns-over-https/json-format/ https://github.com/curl/curl/wiki/DNS-over-HTTPS- Since:
- 0.9.35
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static class
DNSOverHTTPS.Type
-
Constructor Summary
Constructors Constructor Description DNSOverHTTPS(I2PAppContext context)
DNSOverHTTPS(I2PAppContext context, SSLEepGet.SSLState sslState)
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description void
attemptFailed(String url, long bytesTransferred, long bytesRemaining, int currentAttempt, int numRetries, Exception cause)
void
attempting(String url)
void
bytesTransferred(long alreadyTransferred, int currentWrite, long bytesTransferred, long bytesRemaining, String url)
Total length should be == alreadyTransferred + currentWrite + bytesRemaining for all callsstatic void
clearCaches()
void
headerReceived(String url, int attemptNum, String key, String val)
Use the Date header as a backup time source.String
lookup(String host)
V4_ONLYString
lookup(String host, DNSOverHTTPS.Type type)
Lookup in cache, then query serversstatic void
main(String[] args)
void
transferComplete(long alreadyTransferred, long bytesTransferred, long bytesRemaining, String url, String outputFile, boolean notModified)
void
transferFailed(String url, long bytesTransferred, long bytesRemaining, int currentAttempt)
-
-
-
Constructor Detail
-
DNSOverHTTPS
public DNSOverHTTPS(I2PAppContext context)
-
DNSOverHTTPS
public DNSOverHTTPS(I2PAppContext context, SSLEepGet.SSLState sslState)
-
-
Method Detail
-
lookup
public String lookup(String host, DNSOverHTTPS.Type type)
Lookup in cache, then query servers- Returns:
- null if not found
-
clearCaches
public static void clearCaches()
-
attemptFailed
public void attemptFailed(String url, long bytesTransferred, long bytesRemaining, int currentAttempt, int numRetries, Exception cause)
- Specified by:
attemptFailed
in interfaceEepGet.StatusListener
- See Also:
EepGet.StatusListener.bytesTransferred(long, int, long, long, java.lang.String)
-
bytesTransferred
public void bytesTransferred(long alreadyTransferred, int currentWrite, long bytesTransferred, long bytesRemaining, String url)
Description copied from interface:EepGet.StatusListener
Total length should be == alreadyTransferred + currentWrite + bytesRemaining for all calls- Specified by:
bytesTransferred
in interfaceEepGet.StatusListener
- Parameters:
alreadyTransferred
- total of all attempts, not including currentWrite If nonzero on the first call, a partial file of that length was found, _and_ the server supports resume. If zero on a subsequent call after some bytes are transferred (and presumably after an attemptFailed), the server does _not_ support resume and we had to start over. To track _actual_ transfer if the output file could already exist, the listener should keep its own counter, or subtract the initial alreadyTransferred value. And watch out for alreadyTransferred resetting if a resume failed...currentWrite
- since last call to the listenerbytesTransferred
- includes headers, retries, redirects, discarded partial downloads, ...bytesRemaining
- on this attempt only, currentWrite already subtracted - or -1 if chunked encoding or server does not return a length
-
transferComplete
public void transferComplete(long alreadyTransferred, long bytesTransferred, long bytesRemaining, String url, String outputFile, boolean notModified)
- Specified by:
transferComplete
in interfaceEepGet.StatusListener
outputFile
- null if unknown (output stream constructor)- See Also:
EepGet.StatusListener.bytesTransferred(long, int, long, long, java.lang.String)
-
transferFailed
public void transferFailed(String url, long bytesTransferred, long bytesRemaining, int currentAttempt)
- Specified by:
transferFailed
in interfaceEepGet.StatusListener
- See Also:
EepGet.StatusListener.bytesTransferred(long, int, long, long, java.lang.String)
-
attempting
public void attempting(String url)
- Specified by:
attempting
in interfaceEepGet.StatusListener
-
headerReceived
public void headerReceived(String url, int attemptNum, String key, String val)
Use the Date header as a backup time source. Code from Reseeder. We set the stratum to a lower (better) value than in Reseeder, as Cloudflare and Google probably have a better idea than our reseeds.- Specified by:
headerReceived
in interfaceEepGet.StatusListener
-
main
public static void main(String[] args)
-
-