package freenet.clients.http.ajaxpush; import java.io.IOException; import java.net.URI; import freenet.client.HighLevelSimpleClient; import freenet.clients.http.RedirectException; import freenet.clients.http.SimpleToadletServer; import freenet.clients.http.Toadlet; import freenet.clients.http.ToadletContext; import freenet.clients.http.ToadletContextClosedException; import freenet.clients.http.updateableelements.PushDataManager; import freenet.clients.http.updateableelements.UpdaterConstants; import freenet.support.Base64; import freenet.support.Logger; import freenet.support.api.HTTPRequest; /** This toadlet provides notifications for clients. It will block until one is present. It requires the requestId parameter. */ public class PushNotificationToadlet extends Toadlet { private static volatile boolean logMINOR; static { Logger.registerClass(PushNotificationToadlet.class); } public PushNotificationToadlet(HighLevelSimpleClient client) { super(client); } public void handleMethodGET(URI uri, HTTPRequest req, ToadletContext ctx) throws ToadletContextClosedException, IOException, RedirectException { String requestId = req.getParam("requestId"); PushDataManager.UpdateEvent event = ((SimpleToadletServer) ctx.getContainer()).pushDataManager.getNextNotification(requestId); if (event != null) { String elementRequestId = event.getRequestId(); String elementId = event.getElementId(); writeHTMLReply(ctx, 200, "OK", UpdaterConstants.SUCCESS + ":" + Base64.encodeStandard(elementRequestId.getBytes("UTF-8")) + UpdaterConstants.SEPARATOR + elementId); if (logMINOR) { Logger.minor(this, "Notification got:" + event); } } else { writeHTMLReply(ctx, 200, "OK", UpdaterConstants.FAILURE); } } @Override public String path() { return UpdaterConstants.notificationPath; } }