From ee6a3e9057bff6e30e6deff43100bcf2bf9bfba5 Mon Sep 17 00:00:00 2001
From: ulrich
Date: Sat, 27 Mar 2021 14:32:52 +0000
Subject: [PATCH] Anpassungen am FielHandler, Stop-Ablauf verfeinert

---
 src/de/uhilger/minsrv/handler/FileHandler.java       |    4 +++-
 src/de/uhilger/minsrv/handler/StopServerHandler.java |   34 ++++++++++++++++++++++------------
 src/de/uhilger/minsrv/Server.java                    |    2 +-
 3 files changed, 26 insertions(+), 14 deletions(-)

diff --git a/src/de/uhilger/minsrv/Server.java b/src/de/uhilger/minsrv/Server.java
index 89e425f..7db0ba5 100644
--- a/src/de/uhilger/minsrv/Server.java
+++ b/src/de/uhilger/minsrv/Server.java
@@ -85,7 +85,7 @@
     logger.info("Server starting on port " + port);
 
     HttpServer server = HttpServer.create(new InetSocketAddress(port), 0);
-    server.createContext(ctx + "/av", new FileHandler(App.getInitParameter(App.IP_WWW_DATA)));
+    server.createContext(ctx + STR_SLASH, new FileHandler(App.getInitParameter(App.IP_WWW_DATA)));
     server.createContext(ctx + "/server/stop", new StopServerHandler());
     server.setExecutor(Executors.newFixedThreadPool(20));
     server.start();
diff --git a/src/de/uhilger/minsrv/handler/FileHandler.java b/src/de/uhilger/minsrv/handler/FileHandler.java
index 190f7a5..570e4e2 100644
--- a/src/de/uhilger/minsrv/handler/FileHandler.java
+++ b/src/de/uhilger/minsrv/handler/FileHandler.java
@@ -57,6 +57,7 @@
   public static final String ACCEPT_RANGES_HEADER = "Accept-Ranges";
   public static final String LAST_MODIFIED_DATE_HEADER = "Last-Modified";
   public static final String CONTENT_TYPE = "Content-Type";
+  public static final String CONTENT_LENGTH = "Content-Length";
 
   /* Statuscodes */
   public static final int SC_OK = 200;
@@ -110,7 +111,7 @@
       if (headers.containsKey(RANGE_HEADER)) {
         serveFileParts(e, new File(fileBase, fName));
       } else {
-        if (fName.endsWith(Server.STR_SLASH)) {
+        if (fName.length() < 1 || fName.endsWith(Server.STR_SLASH)) {
           fName += WELCOME_FILE;
         }
         serveFile(e, new File(fileBase, fName));
@@ -143,6 +144,7 @@
   protected void serveFile(HttpExchange e, File file) throws IOException {
     if (file.exists()) {
       setHeaders(e, file);
+      e.getResponseHeaders().set(CONTENT_LENGTH, Long.toString(file.length()));
       e.sendResponseHeaders(SC_OK, file.length());
       if(HTTP_GET.equalsIgnoreCase(e.getRequestMethod())) {
         InputStream in = new FileInputStream(file);
diff --git a/src/de/uhilger/minsrv/handler/StopServerHandler.java b/src/de/uhilger/minsrv/handler/StopServerHandler.java
index e1960dd..400b0d2 100644
--- a/src/de/uhilger/minsrv/handler/StopServerHandler.java
+++ b/src/de/uhilger/minsrv/handler/StopServerHandler.java
@@ -14,8 +14,7 @@
 
   You should have received a copy of the GNU Affero General Public License
   along with this program.  If not, see <https://www.gnu.org/licenses/>.
-*/
-
+ */
 package de.uhilger.minsrv.handler;
 
 import com.sun.net.httpserver.HttpExchange;
@@ -23,28 +22,39 @@
 import de.uhilger.minsrv.App;
 import java.io.IOException;
 import java.io.OutputStream;
+import java.util.Timer;
+import java.util.TimerTask;
 import java.util.logging.Logger;
 
 /**
  * Ein HTTP-Handler zum Stoppen der Anwendung
- * 
+ *
  * @author Ulrich Hilger
  */
 public class StopServerHandler implements HttpHandler {
 
   @Override
-  public void handle(HttpExchange exchange) throws IOException {
-    Logger.getLogger(StopServerHandler.class.getName()).info(exchange.getRequestURI().toString());    
+  public void handle(HttpExchange e) throws IOException {
+    Logger.getLogger(StopServerHandler.class.getName()).info(e.getRequestURI().toString());
     String response = "Server stopped";
-    exchange.sendResponseHeaders(200, response.length());
-    OutputStream os = exchange.getResponseBody();
+    e.sendResponseHeaders(200, response.length());
+    OutputStream os = e.getResponseBody();
     os.write(response.getBytes());
     os.flush();
     os.close();
-    Logger.getLogger(StopServerHandler.class.getName()).info("stopping app.");    
-    App.stop();
-    //exchange.getHttpContext().getServer().stop(5);
+    Logger.getLogger(StopServerHandler.class.getName()).info("stopping server.");
+    e.getHttpContext().getServer().stop(1);
+    Timer timer = new Timer();
+    timer.schedule(new AppStopper(), 2000);
   }
-  
-  
+
+  class AppStopper extends TimerTask {
+
+    @Override
+    public void run() {
+      Logger.getLogger(StopServerHandler.class.getName()).info("Mini-Server beendet.");
+      App.stop();
+    }
+  }
+
 }

--
Gitblit v1.9.3