package Legacy.plugins.CENO.Client;
import java.util.Date;
import java.util.Hashtable;
import java.util.concurrent.TimeUnit;
import freenet.support.Logger;
public class RequestSender {
private static RequestSender requestSender = null;
private Hashtable<String, Date> requestTable;
private String[] bridgeFreemails;
/**
* Time to wait since a request for a URL was originally received from CC before sending
* a freemail to the bridge.
*/
private static final long SHOULD_SEND_FREEMAIL = TimeUnit.MINUTES.toMillis(3);
/**
* Time to wait before sending a new freemail request for the same URL
*/
private static final long REQUEST_TIMEOUT = TimeUnit.MINUTES.toMillis(40);
private RequestSender(String[] bridgeFreemails) {
this.requestTable = new Hashtable<String, Date>();
this.bridgeFreemails = bridgeFreemails;
}
public static void init(String[] bridgeFreemails) {
synchronized (RequestSender.class) {
if (requestSender == null) {
requestSender = new RequestSender(bridgeFreemails);
}
}
}
public static void requestFromBridge(String url) {
if (url == null || url.isEmpty()) {
return;
}
if (shouldSendFreemail(url)) {
synchronized (requestSender.bridgeFreemails) {
if (CENOClient.nodeInterface.sendFreemail(CENOClient.CLIENT_FREEMAIL, requestSender.bridgeFreemails, url, "", "CENO")) {
Logger.normal(RequestSender.class, "Sent request to the bridge for URL: " + url);
} else {
Logger.error(RequestSender.class, "Excpetion while trying to signal Bridge for URL: " + url);
return;
}
}
requestSender.requestTable.put(url, new Date(new Date().getTime() + REQUEST_TIMEOUT - SHOULD_SEND_FREEMAIL));
}
}
public static boolean shouldSendFreemail(String url) {
if (url == null || url.isEmpty()) {
return false;
}
if (!requestSender.requestTable.containsKey(url)) {
requestSender.requestTable.put(url, new Date());
}
return (new Date().getTime() - requestSender.requestTable.get(url).getTime() > SHOULD_SEND_FREEMAIL);
}
}