Cleaned Http handling a bit.

This commit is contained in:
FrozenCow 2011-03-04 21:31:16 +01:00
parent 9ce160f1b9
commit d1f280eb0f
11 changed files with 143 additions and 51 deletions

View file

@ -7,6 +7,7 @@ import java.util.Map;
import org.dynmap.web.HttpHandler;
import org.dynmap.web.HttpRequest;
import org.dynmap.web.HttpResponse;
import org.dynmap.web.HttpStatus;
import org.dynmap.web.Json;
public class ClientConfigurationHandler implements HttpHandler {
@ -29,6 +30,8 @@ public class ClientConfigurationHandler implements HttpHandler {
response.fields.put("Expires", "Thu, 01 Dec 1994 16:00:00 GMT");
response.fields.put("Last-modified", dateStr);
response.fields.put("Content-Length", Integer.toString(cachedConfiguration.length));
response.status = HttpStatus.OK;
BufferedOutputStream out = new BufferedOutputStream(response.getBody());
out.write(cachedConfiguration);
out.flush();

View file

@ -12,10 +12,11 @@ import org.bukkit.entity.Player;
import org.dynmap.Client;
import org.dynmap.MapManager;
import org.dynmap.PlayerList;
import org.dynmap.web.HttpErrorHandler;
import org.dynmap.web.HttpField;
import org.dynmap.web.HttpHandler;
import org.dynmap.web.HttpRequest;
import org.dynmap.web.HttpResponse;
import org.dynmap.web.HttpStatus;
import org.dynmap.web.Json;
public class ClientUpdateHandler implements HttpHandler {
@ -30,13 +31,14 @@ public class ClientUpdateHandler implements HttpHandler {
}
Pattern updatePathPattern = Pattern.compile("world/([a-zA-Z0-9_-\\.]+)/([0-9]*)");
private static final HttpStatus WorldNotFound = new HttpStatus(HttpStatus.NotFound.getCode(), "World Not Found");
@Override
public void handle(String path, HttpRequest request, HttpResponse response) throws Exception {
Matcher match = updatePathPattern.matcher(path);
if (!match.matches()) {
HttpErrorHandler.handleForbidden(response);
response.status = HttpStatus.Forbidden;
return;
}
@ -45,7 +47,7 @@ public class ClientUpdateHandler implements HttpHandler {
World world = server.getWorld(worldName);
if (world == null) {
HttpErrorHandler.handleNotFound(response);
response.status = WorldNotFound;
return;
}
@ -78,11 +80,13 @@ public class ClientUpdateHandler implements HttpHandler {
byte[] bytes = Json.stringifyJson(update).getBytes();
String dateStr = new Date().toString();
response.fields.put("Date", dateStr);
response.fields.put("Content-Type", "text/plain");
response.fields.put("Expires", "Thu, 01 Dec 1994 16:00:00 GMT");
response.fields.put("Last-modified", dateStr);
response.fields.put("Content-Length", Integer.toString(bytes.length));
response.fields.put(HttpField.Date, dateStr);
response.fields.put(HttpField.ContentType, "text/plain");
response.fields.put(HttpField.Expires, "Thu, 01 Dec 1994 16:00:00 GMT");
response.fields.put(HttpField.LastModified, dateStr);
response.fields.put(HttpField.ContentLength, Integer.toString(bytes.length));
response.status = HttpStatus.OK;
BufferedOutputStream out = new BufferedOutputStream(response.getBody());
out.write(bytes);
out.flush();

View file

@ -7,9 +7,11 @@ import java.util.HashMap;
import java.util.Map;
import java.util.logging.Logger;
import org.dynmap.web.HttpField;
import org.dynmap.web.HttpHandler;
import org.dynmap.web.HttpRequest;
import org.dynmap.web.HttpResponse;
import org.dynmap.web.HttpStatus;
public abstract class FileHandler implements HttpHandler {
protected static final Logger log = Logger.getLogger("Minecraft");
@ -64,17 +66,15 @@ public abstract class FileHandler implements HttpHandler {
path = formatPath(path);
fileInput = getFileInput(path, request, response);
if (fileInput == null) {
response.statusCode = 404;
response.statusMessage = "Not found";
response.fields.put("Content-Length", "0");
response.getBody();
response.status = HttpStatus.NotFound;
return;
}
String extension = getExtension(path);
String mimeType = getMimeTypeFromExtension(extension);
response.fields.put("Content-Type", mimeType);
response.fields.put(HttpField.ContentType, mimeType);
response.status = HttpStatus.OK;
OutputStream out = response.getBody();
try {
int readBytes;

View file

@ -5,6 +5,7 @@ import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;
import org.dynmap.web.HttpField;
import org.dynmap.web.HttpRequest;
import org.dynmap.web.HttpResponse;
@ -26,7 +27,7 @@ public class FilesystemHandler extends FileHandler {
} catch (FileNotFoundException e) {
return null;
}
response.fields.put("Content-Length", Long.toString(file.length()));
response.fields.put(HttpField.ContentLength, Long.toString(file.length()));
return result;
}
return null;

View file

@ -4,12 +4,12 @@ import java.io.InputStreamReader;
import java.util.logging.Logger;
import org.dynmap.Event;
import org.dynmap.web.HttpErrorHandler;
import org.dynmap.web.HttpField;
import org.dynmap.web.HttpHandler;
import org.dynmap.web.HttpMethods;
import org.dynmap.web.HttpMethod;
import org.dynmap.web.HttpRequest;
import org.dynmap.web.HttpResponse;
import org.dynmap.web.HttpStatus;
import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;
@ -20,8 +20,9 @@ public class SendMessageHandler implements HttpHandler {
public Event<Message> onMessageReceived = new Event<SendMessageHandler.Message>();
@Override
public void handle(String path, HttpRequest request, HttpResponse response) throws Exception {
if (!request.method.equals(HttpMethods.Post)) {
HttpErrorHandler.handleMethodNotAllowed(response);
if (!request.method.equals(HttpMethod.Post)) {
response.status = HttpStatus.MethodNotAllowed;
response.fields.put(HttpField.Accept, HttpMethod.Post);
return;
}
@ -34,7 +35,8 @@ public class SendMessageHandler implements HttpHandler {
onMessageReceived.trigger(message);
response.fields.put(HttpField.contentLength, "0");
response.fields.put(HttpField.ContentLength, "0");
response.status = HttpStatus.OK;
response.getBody();
}
public class Message {