/** Play Monument Handler for the server */
 @Override
 public void handle(HttpExchange exchange) throws IOException {
   exchange.getResponseHeaders().set("Content-type", "application/json");
   try {
     int gameID = checkCookie(exchange);
     if (gameID == -1) {
       System.err.print("\nInvalid Cookie. Thowing Error");
       throw new Exception("INVALID COOKIE!");
     }
     Gson gson = new Gson();
     StringWriter writer = new StringWriter();
     IOUtils.copy(exchange.getRequestBody(), writer);
     shared.communication.toServer.moves.Monument_ move =
         gson.fromJson(writer.toString(), Monument_.class);
     server.commands.Monument command = new server.commands.Monument(gameID);
     command.setParams(move);
     command.execute(server);
     this.addCommand(command, gameID);
     exchange.sendResponseHeaders(HttpURLConnection.HTTP_OK, 0);
     OutputStreamWriter output = new OutputStreamWriter(exchange.getResponseBody());
     output.write(server.getModel(gameID));
     output.flush();
     exchange.getResponseBody().close();
     exchange.close();
   } catch (Exception e) {
     exchange.sendResponseHeaders(HttpURLConnection.HTTP_BAD_REQUEST, -1);
     exchange.getResponseBody().close();
     exchange.close();
   }
 }
Example #2
0
 @Override
 public void handle(HttpExchange httpExchange) throws IOException {
   httpExchange.getResponseHeaders().set("Content-Type", "text/html");
   httpExchange.sendResponseHeaders(HTTP_OK, content.getBytes().length);
   httpExchange.getResponseBody().write(content.getBytes());
   httpExchange.close();
 }
Example #3
0
 @Override
 public void handle(HttpExchange httpExchange) throws IOException {
   // Return a simple text message that says pong.
   httpExchange.getResponseHeaders().set("Content-Type", "text/plain");
   String response = "pong\n";
   httpExchange.sendResponseHeaders(HTTP_OK, response.getBytes().length);
   httpExchange.getResponseBody().write(response.getBytes());
   httpExchange.close();
 }
Example #4
0
 protected void handleGet(HttpExchange exchange) throws IOException {
   try {
     InputStream in = exchange.getRequestBody();
     ByteArrayOutputStream bout = new ByteArrayOutputStream();
     byte[] buf = new byte[4096];
     int read;
     while ((read = in.read(buf)) >= 0) {
       bout.write(buf, 0, read);
     }
     in.close();
     InetSocketAddress source = exchange.getRemoteAddress();
     byte[] raw = source.getHostName().getBytes();
     exchange.sendResponseHeaders(200, raw.length);
     exchange.getResponseBody().write(raw);
     exchange.close();
   } catch (Exception e) {
     e.printStackTrace();
     exchange.sendResponseHeaders(400, 0);
     exchange.close();
   }
 }
 @Override
 public void handle(HttpExchange httpExchange) throws IOException {
   try {
     String method = httpExchange.getRequestMethod();
     if ("GET".equals(method)) {
       doGet(httpExchange);
     } else if ("POST".equals(method)) {
       doPost(httpExchange);
     }
   } catch (Exception e) {
     HawkException.catchException(e);
   } finally {
     httpExchange.close();
   }
 }
 @Override
 public void handle(HttpExchange httpExchange) throws IOException {
   ++testConnectionTimeoutCount;
   Logger.info(
       this,
       "testNoHttpResponseExceptionHandler testConnectionTimeoutCount: "
           + testConnectionTimeoutCount);
   try {
     Thread.sleep(3000);
   } catch (InterruptedException e) {
     throw new RuntimeException(e);
   }
   Logger.info(this, "==========testNoHttpResponseExceptionHandler sleep 3s after.");
   //            httpExchange.sendResponseHeaders(200, 0);//no response
   httpExchange.close();
 }
Example #7
0
 @Override
 public void handle(HttpExchange httpExchange) throws IOException {
   Map<String, String> urlParams = getURLParams(httpExchange.getRequestURI());
   httpExchange.getResponseHeaders().set("Content-Type", "text/plain");
   boolean doExit = false;
   String response = "Invalid shutdown key\n";
   if (urlParams.containsKey("key") && urlParams.get("key").equals(shutdownKey)) {
     response = "Shutdown successful!\n";
     doExit = true;
   }
   httpExchange.sendResponseHeaders(HTTP_OK, response.getBytes().length);
   httpExchange.getResponseBody().write(response.getBytes());
   httpExchange.close();
   if (doExit) {
     System.exit(0);
   }
 }
    @Override
    public void handle(HttpExchange httpExchange) throws IOException {
      ++testConnectionTimeoutCount;
      Logger.info(
          this,
          "testCommonResponseHandler testConnectionTimeoutCount: " + testConnectionTimeoutCount);

      Logger.info(
          this, String.format("request headers:%s", httpExchange.getRequestHeaders().entrySet()));
      Logger.info(this, String.format("request method:%s", httpExchange.getRequestMethod()));
      Logger.info(this, String.format("request uri:%s", httpExchange.getRequestURI()));
      Logger.info(this, String.format("request body:%s", httpExchange.getRequestBody()));

      String resp = "OK";
      httpExchange.sendResponseHeaders(200, resp.getBytes().length);
      httpExchange.getResponseBody().write(resp.getBytes());
      httpExchange.close();
    }
 @Override
 public void handle(HttpExchange t) throws IOException {
   try {
     Thread.currentThread()
         .setName("Cmd Thread " + Thread.currentThread().getId() + " " + t.getRemoteAddress());
     s_logger.info("CmdHandler " + t.getRequestURI());
     doHandle(t);
   } catch (Exception e) {
     s_logger.error(e.toString(), e);
     String response = "Not found";
     t.sendResponseHeaders(404, response.length());
     OutputStream os = t.getResponseBody();
     os.write(response.getBytes());
     os.close();
   } catch (OutOfMemoryError e) {
     s_logger.error("Unrecoverable OutOfMemory Error, exit and let it be re-launched");
     System.exit(1);
   } catch (Throwable e) {
     s_logger.error(e.toString(), e);
   } finally {
     t.close();
   }
 }
Example #10
0
  public void handleEvent(HttpExchange he) {
    try {
      CCActivityServer.logger.info("received something");
      final Headers headers = he.getResponseHeaders();
      for (List<String> list : headers.values())
        for (String s : list) CCActivityServer.logger.info(s);
      final String requestMethod = he.getRequestMethod().toUpperCase();
      CCActivityServer.logger.info(requestMethod);
      switch (requestMethod) {
        case METHOD_GET:
          final Map<String, List<String>> requestParameters =
              getRequestParameters(he.getRequestURI());
          for (String key : requestParameters.keySet()) {
            CCActivityServer.logger.info("Chiave: " + key + "\nvalori:");
            for (String s : requestParameters.get(key)) CCActivityServer.logger.info(s);
          }
          ClientServerResult result;
          CCActivityServer.logger.info(he.getHttpContext().getPath());

          switch (he.getHttpContext().getPath()) {
            case "/selectTest":
              try {
                result = DBManager.select(requestParameters, this);
              } catch (Exception e) {
                result = null;
                e.printStackTrace();
              }
              break;
            case API_PATH + API_FANTAPLAYERS:
              FootballParser fp = new FootballParser();
              System.out.println(
                  "parsing\t" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS").format(new Date()));
              fp.parse();
              System.out.println(
                  "parsed\t" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS").format(new Date()));
              fp.setToList(
                  requestParameters.get("options") != null
                      && requestParameters.get("options").contains("list"));
              Object players = fp.getPlayers(requestParameters.get("players"));
              try {
                result = ClientServerGenericResult.createResult(players);
                break;
              } catch (IllegalArgumentException ex) {
                ex.printStackTrace();
              }
            default:
              result = ClientServerGenericResult.createResult("");
              result.resultType = ClientServerResult.RESULTFAIL;
          }
          final String responseBody = JSonParser.getJSon(result, false);
          CCActivityServer.logger.info(responseBody);
          headers.set(HEADER_CONTENT_TYPE, String.format("application/json; charset=%s", CHARSET));
          final byte[] rawResponseBody = responseBody.getBytes(CHARSET);
          he.sendResponseHeaders(STATUS_OK, rawResponseBody.length);
          he.getResponseBody().write(rawResponseBody);
          System.out.println(
              "finito\t" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS").format(new Date()));
          break;
        case METHOD_OPTIONS:
          headers.set(HEADER_ALLOW, ALLOWED_METHODS);
          he.sendResponseHeaders(STATUS_OK, NO_RESPONSE_LENGTH);
          break;
        default:
          headers.set(HEADER_ALLOW, ALLOWED_METHODS);
          he.sendResponseHeaders(STATUS_METHOD_NOT_ALLOWED, NO_RESPONSE_LENGTH);
          break;
      }
    } catch (IOException e) {
      e.printStackTrace();
    } finally {
      he.close();
    }
  }
Example #11
0
    @Override
    public void handle(HttpExchange httpExchange) throws IOException {
      // Set common response headers
      httpExchange.getResponseHeaders().add("Access-Control-Allow-Origin", "*");

      Future<String> json =
          corenlpExecutor.submit(
              () -> {
                try {
                  // Get the document
                  Properties props =
                      new Properties() {
                        {
                          setProperty("annotators", "tokenize,ssplit,pos,lemma,ner,depparse");
                        }
                      };
                  Annotation doc = getDocument(props, httpExchange);
                  if (!doc.containsKey(CoreAnnotations.SentencesAnnotation.class)) {
                    StanfordCoreNLP pipeline = mkStanfordCoreNLP(props);
                    pipeline.annotate(doc);
                  }

                  // Construct the matcher
                  Map<String, String> params = getURLParams(httpExchange.getRequestURI());
                  // (get the pattern)
                  if (!params.containsKey("pattern")) {
                    respondError("Missing required parameter 'pattern'", httpExchange);
                    return "";
                  }
                  String pattern = params.get("pattern");
                  // (get whether to filter / find)
                  String filterStr = params.getOrDefault("filter", "false");
                  final boolean filter =
                      filterStr.trim().isEmpty()
                          || "true".equalsIgnoreCase(filterStr.toLowerCase());
                  // (create the matcher)
                  final SemgrexPattern regex = SemgrexPattern.compile(pattern);

                  // Run TokensRegex
                  return JSONOutputter.JSONWriter.objectToJSON(
                      (docWriter) -> {
                        if (filter) {
                          // Case: just filter sentences
                          docWriter.set(
                              "sentences",
                              doc.get(CoreAnnotations.SentencesAnnotation.class)
                                  .stream()
                                  .map(
                                      sentence ->
                                          regex
                                              .matcher(
                                                  sentence.get(
                                                      SemanticGraphCoreAnnotations
                                                          .CollapsedCCProcessedDependenciesAnnotation
                                                          .class))
                                              .matches())
                                  .collect(Collectors.toList()));
                        } else {
                          // Case: find matches
                          docWriter.set(
                              "sentences",
                              doc.get(CoreAnnotations.SentencesAnnotation.class)
                                  .stream()
                                  .map(
                                      sentence ->
                                          (Consumer<JSONOutputter.Writer>)
                                              (JSONOutputter.Writer sentWriter) -> {
                                                SemgrexMatcher matcher =
                                                    regex.matcher(
                                                        sentence.get(
                                                            SemanticGraphCoreAnnotations
                                                                .CollapsedCCProcessedDependenciesAnnotation
                                                                .class));
                                                int i = 0;
                                                while (matcher.find()) {
                                                  sentWriter.set(
                                                      Integer.toString(i),
                                                      (Consumer<JSONOutputter.Writer>)
                                                          (JSONOutputter.Writer matchWriter) -> {
                                                            IndexedWord match = matcher.getMatch();
                                                            matchWriter.set("text", match.word());
                                                            matchWriter.set(
                                                                "begin", match.index() - 1);
                                                            matchWriter.set("end", match.index());
                                                            for (String capture :
                                                                matcher.getNodeNames()) {
                                                              matchWriter.set(
                                                                  "$" + capture,
                                                                  (Consumer<JSONOutputter.Writer>)
                                                                      groupWriter -> {
                                                                        IndexedWord node =
                                                                            matcher.getNode(
                                                                                capture);
                                                                        groupWriter.set(
                                                                            "text", node.word());
                                                                        groupWriter.set(
                                                                            "begin",
                                                                            node.index() - 1);
                                                                        groupWriter.set(
                                                                            "end", node.index());
                                                                      });
                                                            }
                                                          });
                                                  i += 1;
                                                }
                                                sentWriter.set("length", i);
                                              }));
                        }
                      });
                } catch (Exception e) {
                  e.printStackTrace();
                  try {
                    respondError(e.getClass().getName() + ": " + e.getMessage(), httpExchange);
                  } catch (IOException ignored) {
                  }
                }
                return "";
              });

      // Send response
      byte[] response = new byte[0];
      try {
        response = json.get(5, TimeUnit.SECONDS).getBytes();
      } catch (InterruptedException | ExecutionException | TimeoutException e) {
        respondError("Timeout when executing Semgrex query", httpExchange);
      }
      if (response.length > 0) {
        httpExchange.getResponseHeaders().add("Content-Type", "text/json");
        httpExchange.getResponseHeaders().add("Content-Length", Integer.toString(response.length));
        httpExchange.sendResponseHeaders(HTTP_OK, response.length);
        httpExchange.getResponseBody().write(response);
        httpExchange.close();
      }
    }
Example #12
0
    @Override
    public void handle(HttpExchange httpExchange) throws IOException {
      // Set common response headers
      httpExchange.getResponseHeaders().add("Access-Control-Allow-Origin", "*");

      // Get sentence.
      Properties props;
      Annotation ann;
      StanfordCoreNLP.OutputFormat of;
      log("[" + httpExchange.getRemoteAddress() + "] Received message");
      try {
        props = getProperties(httpExchange);
        ann = getDocument(props, httpExchange);
        of =
            StanfordCoreNLP.OutputFormat.valueOf(
                props.getProperty("outputFormat", "json").toUpperCase());
        // Handle direct browser connections (i.e., not a POST request).
        if (ann.get(CoreAnnotations.TextAnnotation.class).length() == 0) {
          log("[" + httpExchange.getRemoteAddress() + "] Interactive connection");
          staticPageHandle.handle(httpExchange);
          return;
        }
        log("[" + httpExchange.getRemoteAddress() + "] API call");
      } catch (Exception e) {
        // Return error message.
        e.printStackTrace();
        String response = e.getMessage();
        httpExchange.getResponseHeaders().add("Content-Type", "text/plain");
        httpExchange.sendResponseHeaders(HTTP_BAD_INPUT, response.length());
        httpExchange.getResponseBody().write(response.getBytes());
        httpExchange.close();
        return;
      }

      try {
        // Annotate
        StanfordCoreNLP pipeline = mkStanfordCoreNLP(props);
        Future<Annotation> completedAnnotationFuture =
            corenlpExecutor.submit(
                () -> {
                  pipeline.annotate(ann);
                  return ann;
                });
        Annotation completedAnnotation = completedAnnotationFuture.get(5, TimeUnit.SECONDS);

        // Get output
        ByteArrayOutputStream os = new ByteArrayOutputStream();
        StanfordCoreNLP.createOutputter(props, AnnotationOutputter.getOptions(pipeline))
            .accept(completedAnnotation, os);
        os.close();
        byte[] response = os.toByteArray();

        httpExchange.getResponseHeaders().add("Content-Type", getContentType(props, of));
        httpExchange.getResponseHeaders().add("Content-Length", Integer.toString(response.length));
        httpExchange.sendResponseHeaders(HTTP_OK, response.length);
        httpExchange.getResponseBody().write(response);
        httpExchange.close();
      } catch (TimeoutException e) {
        respondError("CoreNLP request timed out", httpExchange);
      } catch (Exception e) {
        // Return error message.
        respondError(e.getClass().getName() + ": " + e.getMessage(), httpExchange);
      }
    }
Example #13
0
 /**
  * A helper function to respond to a request with an error.
  *
  * @param response The description of the error to send to the user.
  * @param httpExchange The exchange to send the error over.
  * @throws IOException Thrown if the HttpExchange cannot communicate the error.
  */
 private void respondError(String response, HttpExchange httpExchange) throws IOException {
   httpExchange.getResponseHeaders().add("Content-Type", "text/plain");
   httpExchange.sendResponseHeaders(HTTP_ERR, response.length());
   httpExchange.getResponseBody().write(response.getBytes());
   httpExchange.close();
 }
  @Override
  public void handle(HttpExchange he) throws IOException {

    try {

      String uri = he.getRequestURI().getPath();
      if (uri != null && uri.startsWith("/")) {
        // For the time being, the URI is split up this way:
        /* /s/play/My%20Song.mp3 =
           /s = context (1)
           /play = command (2)
           /100 = song id in internal db (3)
           /My%20Song.mp3 (4) // friendly name for players that can't read extended M3u info
        */
        String[] cmdargs = uri.split("/", 4);
        String context = cmdargs[1]; // TODO - should we do anything with this?
        String cmdStr = cmdargs[2];
        path = "";
        if (cmdargs.length > 3) {
          StringBuilder sb = new StringBuilder();
          for (int x = 3; x < cmdargs.length; x++) sb.append(cmdargs[x]);

          path = sb.toString();
        }

        if (cmdStr != null) {
          hr = he.getRequestHeaders();

          String remotehost = he.getRemoteAddress().getHostString();

          FilterAction fa = clientlist.filterActionFor(remotehost);
          action = clientlist.getDefaultAction();
          options = null;

          if (fa != null) {
            action = fa.getAction();
            options = fa.getOptions();
          }

          stats.countStat("CLIENT_ACTION", action.toString());
          stats.countStat("CLIENT", remotehost);

          final AbstractCommand cmd;
          if (allowedCommands != null) {
            Command.Type cmdStrType = Command.Type.get(cmdStr);
            if (Arrays.asList(allowedCommands).contains(cmdStrType)) {
              cmd = factory.create(cmdStrType, he, rootdir);
              handleAccess(he, cmd);
            } else {
              throw new IllegalArgumentException(
                  "This type of handler doesn't support the '" + cmdStr + "' command");
            }
          }
        }
      }

    } catch (Exception e) {
      LOG.log(Level.SEVERE, "Problem handling request", e);
    } finally {
      he.close();
    }
  }