Esempio n. 1
0
  @Override
  public Response serve(IHTTPSession session) {
    Method method = session.getMethod();
    if (Method.POST.equals(method) && session.getUri().startsWith("/upload")) {
      Map<String, String> files = new HashMap<String, String>();
      try {
        session.parseBody(files);
        String fileHEX = JVMClassParser.fileHEX(files.get("JvmClass"));

        return new Response(Status.OK, MIME_HTML, fileHEX);
      } catch (Exception e) {
        e.printStackTrace();
      }
    }

    Response response = new Response(Status.OK, MIME_HTML, "error");
    try {
      response =
          new Response(Status.OK, MIME_HTML, new FileInputStream("target/classes/index.html"));
      if (null == session.getCookies().read("HTTPD_SESSION")) {
        response.addHeader("Set-Cookie", "HTTPD_SESSION=" + UUID.randomUUID());
      }
    } catch (Exception e) {
      e.printStackTrace();
    }

    return response;
  }
Esempio n. 2
0
  @Override
  public Response serve(IHTTPSession session) {
    Map<String, String> header = session.getHeaders();
    Map<String, String> parms = session.getParms();
    String uri = session.getUri();

    if (logRequests) {
      Log.i(TAG, session.getMethod() + " '" + uri + "' ");

      Iterator<String> e = header.keySet().iterator();
      while (e.hasNext()) {
        String value = e.next();
        Log.i(TAG, "  HDR: '" + value + "' = '" + header.get(value) + "'");
      }
      e = parms.keySet().iterator();
      while (e.hasNext()) {
        String value = e.next();
        Log.i(TAG, "  PRM: '" + value + "' = '" + parms.get(value) + "'");
      }
    }

    if (!webRoot.isDirectory()) {
      return createResponse(
          Response.Status.INTERNAL_ERROR,
          NanoHTTPD.MIME_PLAINTEXT,
          "INTERNAL ERRROR: given path is not a directory (" + webRoot + ").");
    }

    return respond(Collections.unmodifiableMap(header), uri);
  }
Esempio n. 3
0
  @Override
  public Response serve(IHTTPSession session) {
    Map<String, String> header = session.getHeaders();
    Map<String, String> parms = session.getParms();
    String uri = session.getUri();

    if (!this.quiet) {
      System.out.println(session.getMethod() + " '" + uri + "' ");

      Iterator<String> e = header.keySet().iterator();
      while (e.hasNext()) {
        String value = e.next();
        System.out.println("  HDR: '" + value + "' = '" + header.get(value) + "'");
      }
      e = parms.keySet().iterator();
      while (e.hasNext()) {
        String value = e.next();
        System.out.println("  PRM: '" + value + "' = '" + parms.get(value) + "'");
      }
    }

    for (File homeDir : this.rootDirs) {
      // Make sure we won't die of an exception later
      if (!homeDir.isDirectory()) {
        return getInternalErrorResponse("given path is not a directory (" + homeDir + ").");
      }
    }
    return respond(Collections.unmodifiableMap(header), session, uri);
  }
Esempio n. 4
0
  public Response serve(IHTTPSession session) {
    Map<String, String> header = session.getHeaders();
    Map<String, String> parms = session.getParms();
    String uri = session.getUri();

    if (!quiet) {
      System.out.println(session.getMethod() + " '" + uri + "' ");

      Iterator<String> e = header.keySet().iterator();
      while (e.hasNext()) {
        String value = e.next();
        System.out.println("  HDR: '" + value + "' = '" + header.get(value) + "'");
      }
      e = parms.keySet().iterator();
      while (e.hasNext()) {
        String value = e.next();
        System.out.println("  PRM: '" + value + "' = '" + parms.get(value) + "'");
      }
    }

    for (File homeDir : getRootDirs()) {
      // Make sure we won't die of an exception later
      if (!homeDir.isDirectory()) {
        return createResponse(
            Response.Status.INTERNAL_ERROR,
            NanoHTTPD.MIME_PLAINTEXT,
            "INTERNAL ERRROR: given path is not a directory (" + homeDir + ").");
      }
    }
    return respond(Collections.unmodifiableMap(header), uri);
  }
  public Response serve(IHTTPSession session) {
    Map<String, String> header = session.getHeaders();
    Map<String, String> parms = session.getParms();
    String uri = session.getUri();

    {
      if (uri.startsWith("/")) {
        int nextSlash = uri.indexOf("/", 1);
        String appName = uri.substring(1, nextSlash);

        StringBuilder b = new StringBuilder();
        b.append(session.getMethod()).append(" '").append(uri).append("' \n");

        Iterator<String> e = header.keySet().iterator();
        while (e.hasNext()) {
          String value = e.next();
          b.append("  HDR: '")
              .append(value)
              .append("' = '")
              .append(header.get(value))
              .append("'\n");
        }
        e = parms.keySet().iterator();
        while (e.hasNext()) {
          String value = e.next();
          b.append("  PRM: '")
              .append(value)
              .append("' = '")
              .append(header.get(value))
              .append("'\n");
        }
        WebLogger.getLogger(appName).i(t, b.toString());
      }
    }

    // Make sure we won't die of an exception later
    File root = new File(ODKFileUtils.getOdkFolder());
    try {
      ODKFileUtils.verifyExternalStorageAvailability();
      if (!root.exists() || !root.isDirectory()) {
        return getInternalErrorResponse(
            "given path is not a directory (" + root.getAbsolutePath() + ").");
      }
    } catch (Exception e) {
      return getInternalErrorResponse(
          "exception " + e.toString() + " accessing directory (" + root.getAbsolutePath() + ").");
    }
    return respond(Collections.unmodifiableMap(header), session, uri);
  }
Esempio n. 6
0
 protected boolean isWebsocketRequested(IHTTPSession session) {
   Map<String, String> headers = session.getHeaders();
   String upgrade = headers.get(NanoWebSocketServer.HEADER_UPGRADE);
   boolean isCorrectConnection = isWebSocketConnectionHeader(headers);
   boolean isUpgrade = NanoWebSocketServer.HEADER_UPGRADE_VALUE.equalsIgnoreCase(upgrade);
   return isUpgrade && isCorrectConnection;
 }
Esempio n. 7
0
  private Response respond(Map<String, String> headers, IHTTPSession session, String uri) {
    // First let's handle CORS OPTION query
    Response r;
    if (cors != null && Method.OPTIONS.equals(session.getMethod())) {
      r = new NanoHTTPD.Response(Response.Status.OK, MIME_PLAINTEXT, null, 0);
    } else {
      r = defaultRespond(headers, session, uri);
    }

    if (cors != null) {
      r = addCORSHeaders(headers, r, cors);
    }
    return r;
  }
Esempio n. 8
0
  @Override
  public Response serve(final IHTTPSession session) {
    Map<String, String> headers = session.getHeaders();
    if (isWebsocketRequested(session)) {
      if (!NanoWebSocketServer.HEADER_WEBSOCKET_VERSION_VALUE.equalsIgnoreCase(
          headers.get(NanoWebSocketServer.HEADER_WEBSOCKET_VERSION))) {
        return newFixedLengthResponse(
            Response.Status.BAD_REQUEST,
            NanoHTTPD.MIME_PLAINTEXT,
            "Invalid Websocket-Version "
                + headers.get(NanoWebSocketServer.HEADER_WEBSOCKET_VERSION));
      }

      if (!headers.containsKey(NanoWebSocketServer.HEADER_WEBSOCKET_KEY)) {
        return newFixedLengthResponse(
            Response.Status.BAD_REQUEST, NanoHTTPD.MIME_PLAINTEXT, "Missing Websocket-Key");
      }

      WebSocket webSocket = openWebSocket(session);
      Response handshakeResponse = webSocket.getHandshakeResponse();
      try {
        handshakeResponse.addHeader(
            NanoWebSocketServer.HEADER_WEBSOCKET_ACCEPT,
            makeAcceptKey(headers.get(NanoWebSocketServer.HEADER_WEBSOCKET_KEY)));
      } catch (NoSuchAlgorithmException e) {
        return newFixedLengthResponse(
            Response.Status.INTERNAL_ERROR,
            NanoHTTPD.MIME_PLAINTEXT,
            "The SHA-1 Algorithm required for websockets is not available on the server.");
      }

      if (headers.containsKey(NanoWebSocketServer.HEADER_WEBSOCKET_PROTOCOL)) {
        handshakeResponse.addHeader(
            NanoWebSocketServer.HEADER_WEBSOCKET_PROTOCOL,
            headers.get(NanoWebSocketServer.HEADER_WEBSOCKET_PROTOCOL).split(",")[0]);
      }

      return handshakeResponse;
    } else {
      return super.serve(session);
    }
  }
Esempio n. 9
0
  @Override
  public Response serve(IHTTPSession session) {
    Map<String, List<String>> decodedQueryParameters =
        decodeParameters(session.getQueryParameterString());

    StringBuilder sb = new StringBuilder();
    sb.append("<html>");
    sb.append("<head><title>Debug Server</title></head>");
    sb.append("<body>");
    sb.append("<h1>Debug Server</h1>");

    sb.append("<p><blockquote><b>URI</b> = ")
        .append(String.valueOf(session.getUri()))
        .append("<br />");

    sb.append("<b>Method</b> = ")
        .append(String.valueOf(session.getMethod()))
        .append("</blockquote></p>");

    sb.append("<h3>Headers</h3><p><blockquote>")
        .append(toString(session.getHeaders()))
        .append("</blockquote></p>");

    sb.append("<h3>Parms</h3><p><blockquote>")
        .append(toString(session.getParms()))
        .append("</blockquote></p>");

    sb.append("<h3>Parms (multi values?)</h3><p><blockquote>")
        .append(toString(decodedQueryParameters))
        .append("</blockquote></p>");

    try {
      Map<String, String> files = new HashMap<String, String>();
      session.parseBody(files);
      sb.append("<h3>Files</h3><p><blockquote>")
          .append(toString(files))
          .append("</blockquote></p>");
    } catch (Exception e) {
      e.printStackTrace();
    }

    sb.append("</body>");
    sb.append("</html>");
    return newFixedLengthResponse(sb.toString());
  }
Esempio n. 10
0
  /**
   * Override this to customize the server.
   *
   * <p>
   *
   * <p>(By default, this delegates to serveFile() and allows directory listing.)
   *
   * @param session The HTTP session
   * @return HTTP response, see class Response for details
   */
  public Response serve(IHTTPSession session) {
    Map<String, String> files = new HashMap<String, String>();
    Method method = session.getMethod();
    if (Method.PUT.equals(method) || Method.POST.equals(method)) {
      try {
        session.parseBody(files);
      } catch (IOException ioe) {
        return new Response(
            Response.Status.INTERNAL_ERROR,
            MIME_PLAINTEXT,
            "SERVER INTERNAL ERROR: IOException: " + ioe.getMessage());
      } catch (ResponseException re) {
        return new Response(re.getStatus(), MIME_PLAINTEXT, re.getMessage());
      }
    }

    Map<String, String> parms = session.getParms();
    parms.put(QUERY_STRING_PARAMETER, session.getQueryParameterString());
    return serve(session.getUri(), method, session.getHeaders(), parms, files);
  }