forked from MirrorHub/authlib-injector
[nanohttpd]crop
This commit is contained in:
parent
e31f1f7392
commit
090c7df79a
|
@ -87,22 +87,10 @@ import java.util.logging.Logger;
|
|||
*/
|
||||
public abstract class NanoHTTPD {
|
||||
|
||||
/**
|
||||
* Pluggable strategy for asynchronously executing requests.
|
||||
*/
|
||||
public interface AsyncRunner {
|
||||
|
||||
void closeAll();
|
||||
|
||||
void closed(ClientHandler clientHandler);
|
||||
|
||||
void exec(ClientHandler code);
|
||||
}
|
||||
|
||||
/**
|
||||
* The runnable that will be used for every new client connection.
|
||||
*/
|
||||
public class ClientHandler implements Runnable {
|
||||
private class ClientHandler implements Runnable {
|
||||
|
||||
private final InputStream inputStream;
|
||||
|
||||
|
@ -156,20 +144,12 @@ public abstract class NanoHTTPD {
|
|||
* number. The name is useful when profiling the application.
|
||||
* </p>
|
||||
*/
|
||||
public static class DefaultAsyncRunner implements AsyncRunner {
|
||||
private static class AsyncRunner {
|
||||
|
||||
private long requestCount;
|
||||
|
||||
private final List<ClientHandler> running = Collections.synchronizedList(new ArrayList<NanoHTTPD.ClientHandler>());
|
||||
|
||||
/**
|
||||
* @return a list with currently running clients.
|
||||
*/
|
||||
public List<ClientHandler> getRunning() {
|
||||
return running;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void closeAll() {
|
||||
// copy of the list for concurrency
|
||||
for (ClientHandler clientHandler : new ArrayList<>(this.running)) {
|
||||
|
@ -177,12 +157,10 @@ public abstract class NanoHTTPD {
|
|||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void closed(ClientHandler clientHandler) {
|
||||
this.running.remove(clientHandler);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void exec(ClientHandler clientHandler) {
|
||||
++this.requestCount;
|
||||
Thread t = new Thread(clientHandler);
|
||||
|
@ -193,24 +171,10 @@ public abstract class NanoHTTPD {
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a normal ServerSocket for TCP connections
|
||||
*/
|
||||
public static class DefaultServerSocketFactory implements ServerSocketFactory {
|
||||
|
||||
@Override
|
||||
public ServerSocket create() throws IOException {
|
||||
return new ServerSocket();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
protected class HTTPSession implements IHTTPSession {
|
||||
private class HTTPSession implements IHTTPSession {
|
||||
|
||||
public static final int BUFSIZE = 8192;
|
||||
|
||||
public static final int MAX_HEADER_SIZE = 1024;
|
||||
|
||||
private final OutputStream outputStream;
|
||||
|
||||
private final BufferedInputStream inputStream;
|
||||
|
@ -242,11 +206,6 @@ public abstract class NanoHTTPD {
|
|||
private boolean isServing;
|
||||
private final Object servingLock = new Object();
|
||||
|
||||
public HTTPSession(InputStream inputStream, OutputStream outputStream) {
|
||||
this.inputStream = new BufferedInputStream(inputStream, HTTPSession.BUFSIZE);
|
||||
this.outputStream = outputStream;
|
||||
}
|
||||
|
||||
public HTTPSession(InputStream inputStream, OutputStream outputStream, InetAddress inetAddress) {
|
||||
this.inputStream = new BufferedInputStream(inputStream, HTTPSession.BUFSIZE);
|
||||
this.outputStream = outputStream;
|
||||
|
@ -553,19 +512,6 @@ public abstract class NanoHTTPD {
|
|||
return this.uri;
|
||||
}
|
||||
|
||||
/**
|
||||
* Deduce body length in bytes. Either from "content-length" header or
|
||||
* read bytes.
|
||||
*/
|
||||
public long getBodySize() {
|
||||
if (this.headers.containsKey("content-length")) {
|
||||
return Long.parseLong(this.headers.get("content-length"));
|
||||
} else if (this.splitbyte < this.rlen) {
|
||||
return this.rlen - this.splitbyte;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getRemoteIpAddress() {
|
||||
return this.remoteIp;
|
||||
|
@ -580,7 +526,7 @@ public abstract class NanoHTTPD {
|
|||
/**
|
||||
* The runnable that will be used for the main listening thread.
|
||||
*/
|
||||
public class ServerRunnable implements Runnable {
|
||||
private class ServerRunnable implements Runnable {
|
||||
|
||||
private final int timeout;
|
||||
|
||||
|
@ -610,7 +556,7 @@ public abstract class NanoHTTPD {
|
|||
}
|
||||
@SuppressWarnings("resource")
|
||||
final InputStream inputStream = finalAccept.getInputStream();
|
||||
NanoHTTPD.this.asyncRunner.exec(createClientHandler(finalAccept, inputStream));
|
||||
NanoHTTPD.this.asyncRunner.exec(new ClientHandler(inputStream, finalAccept));
|
||||
} catch (IOException e) {
|
||||
NanoHTTPD.LOG.log(Level.FINE, "Communication with the client broken", e);
|
||||
}
|
||||
|
@ -618,15 +564,6 @@ public abstract class NanoHTTPD {
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Factory to create ServerSocketFactories.
|
||||
*/
|
||||
public interface ServerSocketFactory {
|
||||
|
||||
public ServerSocket create() throws IOException;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Maximum time to wait on Socket.getInputStream().read() (in milliseconds)
|
||||
* This is required as the Keep-Alive HTTP connections would otherwise block
|
||||
|
@ -673,14 +610,9 @@ public abstract class NanoHTTPD {
|
|||
|
||||
private volatile ServerSocket myServerSocket;
|
||||
|
||||
private ServerSocketFactory serverSocketFactory = new DefaultServerSocketFactory();
|
||||
|
||||
private Thread myThread;
|
||||
|
||||
/**
|
||||
* Pluggable strategy for asynchronously executing requests.
|
||||
*/
|
||||
protected AsyncRunner asyncRunner;
|
||||
private AsyncRunner asyncRunner = new AsyncRunner();
|
||||
|
||||
/**
|
||||
* Constructs an HTTP server on given port.
|
||||
|
@ -703,7 +635,6 @@ public abstract class NanoHTTPD {
|
|||
public NanoHTTPD(String hostname, int port) {
|
||||
this.hostname = hostname;
|
||||
this.myPort = port;
|
||||
setAsyncRunner(new DefaultAsyncRunner());
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -713,32 +644,6 @@ public abstract class NanoHTTPD {
|
|||
stop();
|
||||
}
|
||||
|
||||
/**
|
||||
* create a instance of the client handler, subclasses can return a subclass
|
||||
* of the ClientHandler.
|
||||
*
|
||||
* @param finalAccept
|
||||
* the socket the cleint is connected to
|
||||
* @param inputStream
|
||||
* the input stream
|
||||
* @return the client handler
|
||||
*/
|
||||
protected ClientHandler createClientHandler(final Socket finalAccept, final InputStream inputStream) {
|
||||
return new ClientHandler(inputStream, finalAccept);
|
||||
}
|
||||
|
||||
/**
|
||||
* Instantiate the server runnable, can be overwritten by subclasses to
|
||||
* provide a subclass of the ServerRunnable.
|
||||
*
|
||||
* @param timeout
|
||||
* the socet timeout to use.
|
||||
* @return the server runnable.
|
||||
*/
|
||||
protected ServerRunnable createServerRunnable(final int timeout) {
|
||||
return new ServerRunnable(timeout);
|
||||
}
|
||||
|
||||
/**
|
||||
* Decode percent encoded <code>String</code> values.
|
||||
*
|
||||
|
@ -765,14 +670,6 @@ public abstract class NanoHTTPD {
|
|||
return wasStarted() && !this.myServerSocket.isClosed() && this.myThread.isAlive();
|
||||
}
|
||||
|
||||
public ServerSocketFactory getServerSocketFactory() {
|
||||
return serverSocketFactory;
|
||||
}
|
||||
|
||||
public void setServerSocketFactory(ServerSocketFactory serverSocketFactory) {
|
||||
this.serverSocketFactory = serverSocketFactory;
|
||||
}
|
||||
|
||||
public String getHostname() {
|
||||
return hostname;
|
||||
}
|
||||
|
@ -791,16 +688,6 @@ public abstract class NanoHTTPD {
|
|||
return Response.newFixedLength(Status.NOT_FOUND, NanoHTTPD.MIME_PLAINTEXT, "Not Found");
|
||||
}
|
||||
|
||||
/**
|
||||
* Pluggable strategy for asynchronously executing requests.
|
||||
*
|
||||
* @param asyncRunner
|
||||
* new strategy for handling threads.
|
||||
*/
|
||||
public void setAsyncRunner(AsyncRunner asyncRunner) {
|
||||
this.asyncRunner = asyncRunner;
|
||||
}
|
||||
|
||||
/**
|
||||
* Start the server.
|
||||
*
|
||||
|
@ -829,10 +716,10 @@ public abstract class NanoHTTPD {
|
|||
* if the socket is in use.
|
||||
*/
|
||||
public void start(final int timeout, boolean daemon) throws IOException {
|
||||
this.myServerSocket = this.getServerSocketFactory().create();
|
||||
this.myServerSocket = new ServerSocket();
|
||||
this.myServerSocket.setReuseAddress(true);
|
||||
|
||||
ServerRunnable serverRunnable = createServerRunnable(timeout);
|
||||
ServerRunnable serverRunnable = new ServerRunnable(timeout);
|
||||
this.myThread = new Thread(serverRunnable);
|
||||
this.myThread.setDaemon(daemon);
|
||||
this.myThread.setName("NanoHttpd Main Listener");
|
||||
|
|
Loading…
Reference in a new issue