Home | History | Annotate | Download | only in debug
      1 package fi.iki.elonen.debug;
      2 
      3 /*
      4  * #%L
      5  * NanoHttpd-Samples
      6  * %%
      7  * Copyright (C) 2012 - 2015 nanohttpd
      8  * %%
      9  * Redistribution and use in source and binary forms, with or without modification,
     10  * are permitted provided that the following conditions are met:
     11  *
     12  * 1. Redistributions of source code must retain the above copyright notice, this
     13  *    list of conditions and the following disclaimer.
     14  *
     15  * 2. Redistributions in binary form must reproduce the above copyright notice,
     16  *    this list of conditions and the following disclaimer in the documentation
     17  *    and/or other materials provided with the distribution.
     18  *
     19  * 3. Neither the name of the nanohttpd nor the names of its contributors
     20  *    may be used to endorse or promote products derived from this software without
     21  *    specific prior written permission.
     22  *
     23  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
     24  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
     25  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
     26  * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
     27  * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
     28  * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
     29  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
     30  * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
     31  * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
     32  * OF THE POSSIBILITY OF SUCH DAMAGE.
     33  * #L%
     34  */
     35 
     36 import java.util.HashMap;
     37 import java.util.List;
     38 import java.util.Map;
     39 
     40 import fi.iki.elonen.NanoHTTPD;
     41 import fi.iki.elonen.util.ServerRunner;
     42 
     43 public class DebugServer extends NanoHTTPD {
     44 
     45     public static void main(String[] args) {
     46         ServerRunner.run(DebugServer.class);
     47     }
     48 
     49     public DebugServer() {
     50         super(8080);
     51     }
     52 
     53     private void listItem(StringBuilder sb, Map.Entry<String, ? extends Object> entry) {
     54         sb.append("<li><code><b>").append(entry.getKey()).append("</b> = ").append(entry.getValue()).append("</code></li>");
     55     }
     56 
     57     @Override
     58     public Response serve(IHTTPSession session) {
     59         Map<String, List<String>> decodedQueryParameters = decodeParameters(session.getQueryParameterString());
     60 
     61         StringBuilder sb = new StringBuilder();
     62         sb.append("<html>");
     63         sb.append("<head><title>Debug Server</title></head>");
     64         sb.append("<body>");
     65         sb.append("<h1>Debug Server</h1>");
     66 
     67         sb.append("<p><blockquote><b>URI</b> = ").append(String.valueOf(session.getUri())).append("<br />");
     68 
     69         sb.append("<b>Method</b> = ").append(String.valueOf(session.getMethod())).append("</blockquote></p>");
     70 
     71         sb.append("<h3>Headers</h3><p><blockquote>").append(toString(session.getHeaders())).append("</blockquote></p>");
     72 
     73         sb.append("<h3>Parms</h3><p><blockquote>").append(toString(session.getParms())).append("</blockquote></p>");
     74 
     75         sb.append("<h3>Parms (multi values?)</h3><p><blockquote>").append(toString(decodedQueryParameters)).append("</blockquote></p>");
     76 
     77         try {
     78             Map<String, String> files = new HashMap<String, String>();
     79             session.parseBody(files);
     80             sb.append("<h3>Files</h3><p><blockquote>").append(toString(files)).append("</blockquote></p>");
     81         } catch (Exception e) {
     82             e.printStackTrace();
     83         }
     84 
     85         sb.append("</body>");
     86         sb.append("</html>");
     87         return newFixedLengthResponse(sb.toString());
     88     }
     89 
     90     private String toString(Map<String, ? extends Object> map) {
     91         if (map.size() == 0) {
     92             return "";
     93         }
     94         return unsortedList(map);
     95     }
     96 
     97     private String unsortedList(Map<String, ? extends Object> map) {
     98         StringBuilder sb = new StringBuilder();
     99         sb.append("<ul>");
    100         for (Map.Entry<String, ? extends Object> entry : map.entrySet()) {
    101             listItem(sb, entry);
    102         }
    103         sb.append("</ul>");
    104         return sb.toString();
    105     }
    106 }
    107