public void directory(String regex, final File directory, final boolean list) {
    assert directory.isDirectory();
    addAction(
        "GET",
        regex,
        new HttpServerRequestCallback() {
          @Override
          public void onRequest(
              AsyncHttpServerRequest request, final AsyncHttpServerResponse response) {
            String path = request.getMatcher().replaceAll("");
            File file = new File(directory, path);

            if (file.isDirectory() && list) {
              ArrayList<File> dirs = new ArrayList<File>();
              ArrayList<File> files = new ArrayList<File>();
              for (File f : file.listFiles()) {
                if (f.isDirectory()) dirs.add(f);
                else files.add(f);
              }

              Comparator<File> c =
                  new Comparator<File>() {
                    @Override
                    public int compare(File lhs, File rhs) {
                      return lhs.getName().compareTo(rhs.getName());
                    }
                  };

              Collections.sort(dirs, c);
              Collections.sort(files, c);

              files.addAll(0, dirs);

              return;
            }
            if (!file.isFile()) {
              response.responseCode(404);
              response.end();
              return;
            }
            try {
              FileInputStream is = new FileInputStream(file);
              response.responseCode(200);
              Util.pump(
                  is,
                  response,
                  new CompletedCallback() {
                    @Override
                    public void onCompleted(Exception ex) {
                      response.end();
                    }
                  });
            } catch (Exception ex) {
              response.responseCode(404);
              response.end();
              return;
            }
          }
        });
  }
 public void directory(Context context, String regex, final String assetPath) {
   final Context _context = context.getApplicationContext();
   addAction(
       AsyncHttpGet.METHOD,
       regex,
       new HttpServerRequestCallback() {
         @Override
         public void onRequest(
             AsyncHttpServerRequest request, final AsyncHttpServerResponse response) {
           String path = request.getMatcher().replaceAll("");
           android.util.Pair<Integer, InputStream> pair =
               getAssetStream(_context, assetPath + path);
           final InputStream is = pair.second;
           response.getHeaders().getHeaders().set("Content-Length", String.valueOf(pair.first));
           if (is == null) {
             response.responseCode(404);
             response.end();
             return;
           }
           response.responseCode(200);
           response
               .getHeaders()
               .getHeaders()
               .add("Content-Type", getContentType(assetPath + path));
           Util.pump(
               is,
               response,
               new CompletedCallback() {
                 @Override
                 public void onCompleted(Exception ex) {
                   response.end();
                   StreamUtility.closeQuietly(is);
                 }
               });
         }
       });
   addAction(
       AsyncHttpHead.METHOD,
       regex,
       new HttpServerRequestCallback() {
         @Override
         public void onRequest(
             AsyncHttpServerRequest request, final AsyncHttpServerResponse response) {
           String path = request.getMatcher().replaceAll("");
           android.util.Pair<Integer, InputStream> pair =
               getAssetStream(_context, assetPath + path);
           final InputStream is = pair.second;
           StreamUtility.closeQuietly(is);
           response.getHeaders().getHeaders().set("Content-Length", String.valueOf(pair.first));
           if (is == null) {
             response.responseCode(404);
             response.end();
             return;
           }
           response.responseCode(200);
           response
               .getHeaders()
               .getHeaders()
               .add("Content-Type", getContentType(assetPath + path));
           response.writeHead();
           response.end();
         }
       });
 }
 public void post(String regex, HttpServerRequestCallback callback) {
   addAction(AsyncHttpPost.METHOD, regex, callback);
 }