|
@@ -1,7 +1,7 @@
|
|
|
package com.acdp.transceivr;
|
|
|
|
|
|
import java.net.http.HttpClient;
|
|
|
-import java.nio.file.Paths;
|
|
|
+import java.nio.charset.StandardCharsets;
|
|
|
import java.util.concurrent.ConcurrentHashMap;
|
|
|
|
|
|
import com.eclipsesource.json.Json;
|
|
@@ -11,6 +11,10 @@ import io.undertow.Handlers;
|
|
|
import io.undertow.Undertow;
|
|
|
import io.undertow.server.HttpHandler;
|
|
|
import io.undertow.server.HttpServerExchange;
|
|
|
+import io.undertow.server.handlers.BlockingHandler;
|
|
|
+import io.undertow.server.handlers.form.EagerFormParsingHandler;
|
|
|
+import io.undertow.server.handlers.form.FormDataParser;
|
|
|
+import io.undertow.server.handlers.resource.ClassPathResourceManager;
|
|
|
import io.undertow.server.handlers.resource.PathResourceManager;
|
|
|
import io.undertow.util.Headers;
|
|
|
import org.slf4j.LoggerFactory;
|
|
@@ -21,47 +25,54 @@ public class WebServer {
|
|
|
private final static org.slf4j.Logger logger = LoggerFactory.getLogger(WebServer.class);
|
|
|
private final int port;
|
|
|
private Undertow server;
|
|
|
- private HttpClient client;
|
|
|
private int nextID=1;
|
|
|
private ConcurrentHashMap<Integer, Transfer> uploads=new ConcurrentHashMap();
|
|
|
|
|
|
public WebServer(int port, boolean debug) {
|
|
|
this.port = port;
|
|
|
- client= HttpClient.newBuilder()
|
|
|
- .followRedirects(HttpClient.Redirect.NORMAL)
|
|
|
- .build();
|
|
|
}
|
|
|
|
|
|
public void start() {
|
|
|
Undertow.Builder builder = Undertow.builder();
|
|
|
builder.addHttpListener(port, "0.0.0.0");
|
|
|
builder.setHandler(Handlers.routing()
|
|
|
- .post("/xfer", new HttpHandler() {
|
|
|
+ .post("/xfer", new BlockingHandler(new EagerFormParsingHandler(ex -> {
|
|
|
+ // var qParams=ex.getQueryParameters();
|
|
|
+ var pParams=ex.getAttachment(FormDataParser.FORM_DATA);
|
|
|
+ Transfer t=new Transfer(nextID++);
|
|
|
+ t.from=pParams.getFirst("from").getValue();
|
|
|
+ t.to=pParams.getFirst("to").getValue();
|
|
|
+ LoadTools.startTransfer(t);
|
|
|
+ uploads.put(t.id, t);
|
|
|
+ ex.getResponseSender().send("OK: "+t.id);
|
|
|
+ })))
|
|
|
+ .get("/zero",new HttpHandler() {
|
|
|
@Override
|
|
|
public void handleRequest(HttpServerExchange ex) throws Exception {
|
|
|
if(!dispatch(ex,this)) return;
|
|
|
- JsonObject value = Json.parse(new String(ex.getInputStream().readAllBytes())).asObject();
|
|
|
- Transfer t=new Transfer(nextID++);
|
|
|
- t.from=value.get("from").asString();
|
|
|
- t.to=value.get("to").asString();
|
|
|
- LoadTools.startTransfer(t);
|
|
|
- uploads.put(t.id, t);
|
|
|
- ex.getResponseSender().send("OK: "+t.id);
|
|
|
+ ex.startBlocking();
|
|
|
+ var ba=new byte[1024];
|
|
|
+ while(true)
|
|
|
+ ex.getOutputStream().write(ba);
|
|
|
}
|
|
|
})
|
|
|
- .get("/status", new HttpHandler() {
|
|
|
- @Override
|
|
|
- public void handleRequest(HttpServerExchange ex) throws Exception {
|
|
|
- if (!dispatch(ex, this)) return;
|
|
|
- JsonArray ja=new JsonArray();
|
|
|
- for(Transfer t:uploads.values()) {
|
|
|
- ja.add(t.toJSON());
|
|
|
- }
|
|
|
- ex.getResponseHeaders().put(Headers.CONTENT_TYPE, "application/json");
|
|
|
- ex.getResponseSender().send(ja.toString());
|
|
|
- }})
|
|
|
- .get("/*", resource(new PathResourceManager(Paths.get("webroot"), 100))
|
|
|
- .setDirectoryListingEnabled(true))
|
|
|
+ .post("/null",new BlockingHandler (ex -> {
|
|
|
+ var ba=new byte[1024];
|
|
|
+ while(true) {
|
|
|
+ ex.getInputStream().read(ba);
|
|
|
+ }
|
|
|
+ }))
|
|
|
+ .get("/status", ex -> {
|
|
|
+ JsonArray ja=new JsonArray();
|
|
|
+ for(Transfer t:uploads.values())
|
|
|
+ ja.add(t.toJSON());
|
|
|
+ ex.getResponseHeaders().put(Headers.CONTENT_TYPE, "application/json");
|
|
|
+ ex.getResponseSender().send(ja.toString());
|
|
|
+ })
|
|
|
+ .get("/*", resource(new ClassPathResourceManager(getClass().getClassLoader(),"webroot" ))
|
|
|
+ .setDirectoryListingEnabled(true))
|
|
|
+ // .get("/*", resource(new PathResourceManager(Paths.get("webroot"), 100))
|
|
|
+ // .setDirectoryListingEnabled(true))
|
|
|
);
|
|
|
server = builder.build();
|
|
|
server.start();
|