X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=src%2Fmain%2Fjava%2Fnet%2Fpterodactylus%2Fsone%2Fweb%2Fpage%2FPageToadlet.java;h=fc5833994556e7afbcd5cdd24be4a68770df85a8;hb=1deeb8285b1347baa98994b10322b548fd71a449;hp=2d1f35aa2344902c011dfb44cb17c8bed86ddc24;hpb=38cb6c5ec82298ee351d0eb15ddd8331db273af2;p=Sone.git diff --git a/src/main/java/net/pterodactylus/sone/web/page/PageToadlet.java b/src/main/java/net/pterodactylus/sone/web/page/PageToadlet.java index 2d1f35a..fc58339 100644 --- a/src/main/java/net/pterodactylus/sone/web/page/PageToadlet.java +++ b/src/main/java/net/pterodactylus/sone/web/page/PageToadlet.java @@ -1,5 +1,5 @@ /* - * Sone - PageToadlet.java - Copyright © 2010 David Roden + * Sone - PageToadlet.java - Copyright © 2010–2013 David Roden * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -18,14 +18,17 @@ package net.pterodactylus.sone.web.page; import java.io.IOException; +import java.io.OutputStream; import java.net.URI; import net.pterodactylus.util.web.Header; import net.pterodactylus.util.web.Method; import net.pterodactylus.util.web.Page; import net.pterodactylus.util.web.Response; + import freenet.client.HighLevelSimpleClient; import freenet.clients.http.LinkEnabledCallback; +import freenet.clients.http.LinkFilterExceptedToadlet; import freenet.clients.http.Toadlet; import freenet.clients.http.ToadletContext; import freenet.clients.http.ToadletContextClosedException; @@ -39,7 +42,7 @@ import freenet.support.io.Closer; * * @author David ‘Bombe’ Roden */ -public class PageToadlet extends Toadlet implements LinkEnabledCallback { +public class PageToadlet extends Toadlet implements LinkEnabledCallback, LinkFilterExceptedToadlet { /** The name of the menu item. */ private final String menuName; @@ -143,21 +146,28 @@ public class PageToadlet extends Toadlet implements LinkEnabledCallback { */ private void handleRequest(FreenetRequest pageRequest) throws IOException, ToadletContextClosedException { Bucket pageBucket = null; + OutputStream pageBucketOutputStream = null; + Response pageResponse; try { pageBucket = pageRequest.getToadletContext().getBucketFactory().makeBucket(-1); - Response pageResponse = new Response(pageBucket.getOutputStream()); - pageResponse = page.handleRequest(pageRequest, pageResponse); - MultiValueTable headers = new MultiValueTable(); - if (pageResponse.getHeaders() != null) { - for (Header header : pageResponse.getHeaders()) { - for (String value : header) { - headers.put(header.getName(), value); - } + pageBucketOutputStream = pageBucket.getOutputStream(); + pageResponse = page.handleRequest(pageRequest, new Response(pageBucketOutputStream)); + } catch (IOException ioe1) { + Closer.close(pageBucket); + throw ioe1; + } finally { + Closer.close(pageBucketOutputStream); + } + MultiValueTable headers = new MultiValueTable(); + if (pageResponse.getHeaders() != null) { + for (Header header : pageResponse.getHeaders()) { + for (String value : header) { + headers.put(header.getName(), value); } } + } + try { writeReply(pageRequest.getToadletContext(), pageResponse.getStatusCode(), pageResponse.getContentType(), pageResponse.getStatusText(), headers, pageBucket); - } catch (Throwable t1) { - writeInternalError(t1, pageRequest.getToadletContext()); } finally { Closer.close(pageBucket); } @@ -174,4 +184,16 @@ public class PageToadlet extends Toadlet implements LinkEnabledCallback { return true; } + // + // LINKFILTEREXCEPTEDTOADLET METHODS + // + + /** + * {@inheritDoc} + */ + @Override + public boolean isLinkExcepted(URI link) { + return (page instanceof FreenetPage) && ((FreenetPage) page).isLinkExcepted(link); + } + }