parent
645f18a1f3
commit
42dc6f1236
@ -0,0 +1,5 @@
|
||||
#### About
|
||||
The `mirror` servlet. Prints the list of request it received.
|
||||
* `./src` the code.
|
||||
* `./war/wrapper` supplements needed for `.war`.
|
||||
* `./war/<name>.war` copy this to `tomcat/webapps`.
|
@ -0,0 +1,40 @@
|
||||
<?xml version="1.0" ?>
|
||||
<project name="mirror" basedir="." default="war">
|
||||
|
||||
<!-- DEFINE SOME VARS -->
|
||||
<property name="appname" value="mirror" />
|
||||
|
||||
|
||||
|
||||
<path id="compile.classpath">
|
||||
<fileset dir="lib">
|
||||
<include name="*.jar"/>
|
||||
</fileset>
|
||||
</path>
|
||||
|
||||
<!-- INIT -->
|
||||
<target name="init">
|
||||
<mkdir dir="build/classes"/>
|
||||
</target>
|
||||
|
||||
<!-- COMPILE -->
|
||||
<target name="compile" depends="init" >
|
||||
<javac destdir="build/classes" debug="true" srcdir="src">
|
||||
<classpath refid="compile.classpath"/>
|
||||
</javac>
|
||||
</target>
|
||||
|
||||
<!-- WAR -->
|
||||
<target name="war" depends="compile">
|
||||
<war destfile="${appname}A.war" webxml="web.xml">
|
||||
<fileset dir="web"/>
|
||||
<lib dir="lib"/>
|
||||
<classes dir="build/classes"/>
|
||||
</war>
|
||||
</target>
|
||||
|
||||
<target name="clean">
|
||||
<delete dir="build" />
|
||||
</target>
|
||||
|
||||
</project>
|
@ -0,0 +1,86 @@
|
||||
package com.olexyn.mirror;
|
||||
|
||||
import com.olexyn.misp.helper.Ride;
|
||||
import com.olexyn.misp.helper.WebPrint;
|
||||
import org.apache.commons.io.IOUtils;
|
||||
|
||||
import javax.servlet.ServletException;
|
||||
import javax.servlet.http.HttpServlet;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import java.io.IOException;
|
||||
import java.io.PrintWriter;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
public class Mirror extends HttpServlet {
|
||||
|
||||
protected static final String MISP_CLIENT_URL = "http://localhost:9090/mispclient/core";
|
||||
|
||||
|
||||
private final List<String> list = new ArrayList<>();
|
||||
|
||||
|
||||
|
||||
private void addRequest(HttpServletRequest request){
|
||||
synchronized (list) {
|
||||
StringBuffer sb = new StringBuffer();
|
||||
sb.append(request.getRequestURL().toString());
|
||||
sb.append(WebPrint.SPLIT);
|
||||
sb.append(request.getMethod());
|
||||
sb.append(WebPrint.SPLIT);
|
||||
sb.append(request.getQueryString());
|
||||
list.add(sb.toString());
|
||||
}
|
||||
}
|
||||
// #######
|
||||
//
|
||||
// #######
|
||||
|
||||
@Override
|
||||
public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
|
||||
|
||||
addRequest(request);
|
||||
|
||||
PrintWriter print = response.getWriter();
|
||||
|
||||
print.println("<!DOCTYPE html>");
|
||||
|
||||
print.println("<html lang=\"en\">");
|
||||
print.println("<head>");
|
||||
print.println("<meta charset=\"utf-8\">");
|
||||
print.println("<title>title</title>");
|
||||
print.println("<link rel=\"stylesheet\" href=\"style.css\">");
|
||||
print.println("<script src=\"script.js\"></script>");
|
||||
print.println("</head>");
|
||||
print.println("<body>");
|
||||
synchronized (list) {
|
||||
|
||||
print.println(WebPrint.requestList(list));
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
print.println(" </body></html>");
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void doPost(HttpServletRequest request, HttpServletResponse response) {
|
||||
|
||||
addRequest(request);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void doPut(HttpServletRequest request, HttpServletResponse response){
|
||||
addRequest(request);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -0,0 +1,23 @@
|
||||
<?xml version="1.0" encoding="ISO-8859-1"?>
|
||||
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
|
||||
version="2.4">
|
||||
|
||||
<display-name>Mirror</display-name>
|
||||
<description>
|
||||
This is a simple web application with a source code organization
|
||||
based on the recommendations of the Application Developer's Guide.
|
||||
</description>
|
||||
|
||||
<servlet>
|
||||
<servlet-name>Mirror</servlet-name>
|
||||
<servlet-class>com.olexyn.mirror.Mirror</servlet-class>
|
||||
</servlet>
|
||||
|
||||
<servlet-mapping>
|
||||
<servlet-name>Mirror</servlet-name>
|
||||
<url-pattern>/core</url-pattern>
|
||||
</servlet-mapping>
|
||||
|
||||
</web-app>
|
@ -0,0 +1,23 @@
|
||||
<html>
|
||||
<head>
|
||||
<title>Sample Application JSP Page</title>
|
||||
</head>
|
||||
<body bgcolor=white>
|
||||
|
||||
<table border="0">
|
||||
<tr>
|
||||
<td align=center>
|
||||
<img src="images/tomcat.gif">
|
||||
</td>
|
||||
<td>
|
||||
<h1>Sample Application JSP Page</h1>
|
||||
This is the output of a JSP page that is part of the Hello, World
|
||||
application.
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
<%= new String("Hello!") %>
|
||||
|
||||
</body>
|
||||
</html>
|
After Width: | Height: | Size: 1.4 KiB |
@ -0,0 +1,25 @@
|
||||
<html>
|
||||
<head>
|
||||
<title>Mirror</title>
|
||||
</head>
|
||||
<body bgcolor=white>
|
||||
|
||||
<table border="0">
|
||||
<tr>
|
||||
<td>
|
||||
<img src="images/tomcat.gif">
|
||||
</td>
|
||||
<td>
|
||||
<h1>Mirror</h1>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
<ul>
|
||||
<p>This Servlet currently provides the following features:
|
||||
<!--<li>To a <a href="hello.jsp">JSP page</a>.-->
|
||||
<li><a href="core">Mirror</a> of all requests.
|
||||
</ul>
|
||||
|
||||
</body>
|
||||
</html>
|
@ -0,0 +1,5 @@
|
||||
#### About
|
||||
The `mispbridge` servlet.
|
||||
* `./src` the code.
|
||||
* `./war/wrapper` supplements needed for `.war`.
|
||||
* `./war/<name>.war` copy this to `tomcat/webapps`.
|
@ -0,0 +1,10 @@
|
||||
#!/bin/bash
|
||||
version="0.1"
|
||||
file="target/misp-fwd-${version}.war"
|
||||
groupId="com.olexyn.misp.fwd"
|
||||
artifactId="misp-fwd"
|
||||
|
||||
|
||||
|
||||
mvn package
|
||||
mvn install:install-file -Dfile=${file} -DgroupId=${groupId} -DartifactId=${artifactId} -Dversion=${version} -Dpackaging=war -DgeneratePom=true
|
@ -0,0 +1,97 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
|
||||
<groupId>com.olexyn.misp.fwd</groupId>
|
||||
<artifactId>misp-fwd</artifactId>
|
||||
<version>0.1</version>
|
||||
<packaging>war</packaging>
|
||||
|
||||
<name>misp-fwd Maven Webapp</name>
|
||||
<!-- FIXME change it to the project's website -->
|
||||
<url>http://www.example.com</url>
|
||||
|
||||
<properties>
|
||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||
|
||||
</properties>
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>junit</groupId>
|
||||
<artifactId>junit</artifactId>
|
||||
<version>4.11</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.olexyn.misp.helper</groupId>
|
||||
<artifactId>misp-helper</artifactId>
|
||||
<version>0.1</version>
|
||||
<scope>compile</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>commons-io</groupId>
|
||||
<artifactId>commons-io</artifactId>
|
||||
<version>2.6</version>
|
||||
<scope>compile</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.eclipse.jetty.orbit</groupId>
|
||||
<artifactId>javax.servlet</artifactId>
|
||||
<version>3.0.0.v201112011016</version>
|
||||
<scope>compile</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.json</groupId>
|
||||
<artifactId>json</artifactId>
|
||||
<version>20190722</version>
|
||||
<scope>compile</scope>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
|
||||
<build>
|
||||
|
||||
<pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
|
||||
<plugins>
|
||||
<plugin>
|
||||
<artifactId>maven-clean-plugin</artifactId>
|
||||
<version>3.1.0</version>
|
||||
</plugin>
|
||||
<!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_war_packaging -->
|
||||
<plugin>
|
||||
<artifactId>maven-resources-plugin</artifactId>
|
||||
<version>3.0.2</version>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<artifactId>maven-compiler-plugin</artifactId>
|
||||
<version>3.8.0</version>
|
||||
<configuration>
|
||||
<!-- or whatever version you use -->
|
||||
<source>11</source>
|
||||
<target>11</target>
|
||||
<verbose>true</verbose>
|
||||
</configuration>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<artifactId>maven-surefire-plugin</artifactId>
|
||||
<version>2.22.1</version>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<artifactId>maven-war-plugin</artifactId>
|
||||
<version>3.2.2</version>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<artifactId>maven-install-plugin</artifactId>
|
||||
<version>2.5.2</version>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<artifactId>maven-deploy-plugin</artifactId>
|
||||
<version>2.8.2</version>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</pluginManagement>
|
||||
</build>
|
||||
</project>
|
@ -0,0 +1,217 @@
|
||||
package com.olexyn.misp.fwd;
|
||||
|
||||
import com.olexyn.misp.helper.JsonHelper;
|
||||
import com.olexyn.misp.helper.Ride;
|
||||
import org.apache.commons.io.IOUtils;
|
||||
|
||||
import javax.servlet.ServletException;
|
||||
import javax.servlet.http.HttpServlet;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import java.io.ByteArrayOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.ObjectOutputStream;
|
||||
import java.io.PrintWriter;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
public class FwdProxy extends HttpServlet {
|
||||
|
||||
protected static final String MISP_CLIENT_URL = "http://localhost:9090/mispclient/core";
|
||||
|
||||
public final Map<Long, Ride> available = new HashMap<>();
|
||||
public final Map<Long, Ride> booked = new HashMap<>();
|
||||
public final Map<Long, Ride> loaded = new HashMap<>();
|
||||
|
||||
// #######
|
||||
//
|
||||
// #######
|
||||
|
||||
@Override
|
||||
public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
|
||||
|
||||
|
||||
final String payload = IOUtils.toString(request.getReader());
|
||||
final boolean isJson = JsonHelper.isJson(payload);
|
||||
boolean hasID = false;
|
||||
boolean hasRequest = false;
|
||||
boolean hasData = false;
|
||||
|
||||
if (isJson) {
|
||||
final Ride ridePayload = new Ride(payload);
|
||||
hasID = ridePayload.getID() != null;
|
||||
hasRequest = ridePayload.getRequest() != null;
|
||||
hasData = ridePayload.getData() != null;
|
||||
}
|
||||
|
||||
|
||||
if (isJson && hasID && hasRequest && hasData) {
|
||||
Thread handleGetRideRequestDataThread = new Thread(() -> {
|
||||
try {
|
||||
handleGetRideRequestData(request, response);
|
||||
} catch (IOException | InterruptedException e) { e.printStackTrace(); }
|
||||
});
|
||||
handleGetRideRequestDataThread.setName("handleGetRideRequestDataThread");
|
||||
handleGetRideRequestDataThread.start();
|
||||
|
||||
} else {
|
||||
Thread handleGetRequestThread = new Thread(() -> {
|
||||
try {
|
||||
handleGetRequest(request, response);
|
||||
} catch (IOException | InterruptedException e) {e.printStackTrace(); }
|
||||
});
|
||||
handleGetRequestThread.setName("handleGetRequestThread");
|
||||
handleGetRequestThread.start();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* handle GET (Link)
|
||||
* remove Ride from AvailableRides
|
||||
* add Ride to ReservedRides
|
||||
* send OK (Ride) to mispclient
|
||||
* send OK (Ride) to public
|
||||
*/
|
||||
protected void handleGetRequest(HttpServletRequest request, HttpServletResponse response) throws IOException, InterruptedException {
|
||||
final Ride ride;
|
||||
|
||||
|
||||
|
||||
//final ServletInputStream in = request.getInputStream();
|
||||
final String parsedRequest = null; //new String(in.readAllBytes());
|
||||
byte[] foo =null;
|
||||
try{
|
||||
ByteArrayOutputStream byteOut = new ByteArrayOutputStream();
|
||||
ObjectOutputStream objOut = new ObjectOutputStream(byteOut);
|
||||
objOut.writeObject(request);
|
||||
int br =0;
|
||||
foo = byteOut.toByteArray();
|
||||
objOut.close();
|
||||
byteOut.close();
|
||||
br=1;
|
||||
|
||||
}catch (IOException e){
|
||||
int br =0;
|
||||
}
|
||||
int br =0;
|
||||
|
||||
|
||||
synchronized (available) {
|
||||
|
||||
while (available.size() < 1) {
|
||||
available.notify();
|
||||
available.wait();
|
||||
}
|
||||
// ride exists only locally, thus safe
|
||||
ride = available.entrySet().iterator().next().getValue();
|
||||
// ride exists only in "available", access through which is sync, thus safe
|
||||
available.remove(ride.getID());
|
||||
// needed because POST (Ride) wait()s
|
||||
available.notify();
|
||||
}
|
||||
|
||||
synchronized (booked) {
|
||||
// ride exists only locally, thus safe
|
||||
booked.put(ride.getID(), ride);
|
||||
// ride exists only in "booked", access through which is sync, thus safe
|
||||
ride.setRequest(parsedRequest);
|
||||
// POST (Ride) wait()s
|
||||
booked.notify();
|
||||
}
|
||||
|
||||
synchronized (loaded) {
|
||||
|
||||
while (!loaded.containsKey(ride.getID())) {
|
||||
loaded.notify();
|
||||
loaded.wait();
|
||||
}
|
||||
|
||||
|
||||
// CARE this is tricky
|
||||
// what if ride exists in another map, e.g. "available'
|
||||
// in that case illegal access is possible
|
||||
// be carefull to removing ride from all other references, when adding it to "loaded".
|
||||
ride.setData(loaded.remove(ride.getID()).getData());
|
||||
}
|
||||
|
||||
response.setStatus(200);
|
||||
final PrintWriter writer = response.getWriter();
|
||||
writer.write(ride.getData());
|
||||
writer.flush();
|
||||
writer.close();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* handle GET (Ride)(Data)
|
||||
* if Ride in ForwardedRequest
|
||||
* remove Ride from ForwardedRequest
|
||||
* add Ride to NewData
|
||||
* send OK (Ride)(Data)
|
||||
* remove Ride from NewData
|
||||
* add Ride to ForwardedData
|
||||
* send OK (EOL)
|
||||
* remove Ride from ForwardedData
|
||||
* add Ride to EOL
|
||||
*/
|
||||
protected void handleGetRideRequestData(HttpServletRequest request, HttpServletResponse response) throws IOException, InterruptedException {
|
||||
final String jsonPayload = IOUtils.toString(request.getReader());
|
||||
final Ride ride = new Ride(jsonPayload);
|
||||
|
||||
synchronized (booked) {
|
||||
booked.remove(ride.getID());
|
||||
}
|
||||
|
||||
synchronized (loaded) {
|
||||
loaded.put(ride.getID(), ride);
|
||||
loaded.notify();
|
||||
}
|
||||
}
|
||||
|
||||
// #######
|
||||
//
|
||||
// #######
|
||||
|
||||
@Override
|
||||
public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
|
||||
Thread handlePostRideThread = new Thread(() -> {
|
||||
try {handlePostRide(request, response); } catch (IOException | InterruptedException e) { e.printStackTrace(); }
|
||||
});
|
||||
handlePostRideThread.setName("handlePostRideThread");
|
||||
handlePostRideThread.start();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* handle POST (Ride)
|
||||
* add Ride to AvailableRides
|
||||
*/
|
||||
protected void handlePostRide(HttpServletRequest request, HttpServletResponse response) throws IOException, InterruptedException {
|
||||
String jsonPayload = IOUtils.toString(request.getReader());
|
||||
final Ride ride = new Ride(jsonPayload);
|
||||
|
||||
synchronized (available) {
|
||||
available.put(ride.getID(), ride);
|
||||
available.notify();
|
||||
}
|
||||
|
||||
// ID is final/threadsafe
|
||||
while (!(booked.containsKey(ride.getID()))) {
|
||||
|
||||
}
|
||||
|
||||
synchronized (booked) {
|
||||
//booked.notify();
|
||||
//booked.wait();
|
||||
ride.setRequest(booked.get(ride.getID()).getRequest());
|
||||
}
|
||||
|
||||
response.setStatus(200);
|
||||
PrintWriter writer = response.getWriter();
|
||||
writer.write(ride.json());
|
||||
writer.flush();
|
||||
writer.close();
|
||||
}
|
||||
}
|
@ -0,0 +1,22 @@
|
||||
<!DOCTYPE web-app PUBLIC
|
||||
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
|
||||
"http://java.sun.com/dtd/web-app_2_3.dtd" >
|
||||
|
||||
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
|
||||
version="2.4">
|
||||
|
||||
<display-name>misp-fwd</display-name>
|
||||
|
||||
<servlet>
|
||||
<servlet-name>misp-fwd</servlet-name>
|
||||
<servlet-class>com.olexyn.misp.fwd.FwdProxy</servlet-class>
|
||||
</servlet>
|
||||
|
||||
<servlet-mapping>
|
||||
<servlet-name>misp-fwd</servlet-name>
|
||||
<url-pattern>/core</url-pattern>
|
||||
</servlet-mapping>
|
||||
|
||||
</web-app>
|
After Width: | Height: | Size: 617 B |
@ -0,0 +1,20 @@
|
||||
<html>
|
||||
<head>
|
||||
<title>misp-fwd</title>
|
||||
</head>
|
||||
<body bgcolor=white>
|
||||
|
||||
<table border="0">
|
||||
<tr>
|
||||
<td align=center>
|
||||
<img src="images/io42630.png">
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<h1>misp-fwd</h1>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</body>
|
||||
</html>
|
@ -0,0 +1,10 @@
|
||||
#!/bin/bash
|
||||
version="0.1"
|
||||
file="target/misp-helper-${version}.jar"
|
||||
groupId="com.olexyn.misp.helper"
|
||||
artifactId="misp-helper"
|
||||
|
||||
|
||||
|
||||
mvn package
|
||||
mvn install:install-file -Dfile=${file} -DgroupId=${groupId} -DartifactId=${artifactId} -Dversion=${version} -Dpackaging=jar -DgeneratePom=true
|
@ -0,0 +1,87 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
|
||||
<groupId>com.olexyn.misp.helper</groupId>
|
||||
<artifactId>misp-helper</artifactId>
|
||||
<version>0.1</version>
|
||||
|
||||
<name>misp-helper</name>
|
||||
<description>A simple misp-helper.</description>
|
||||
<!-- FIXME change it to the project's website -->
|
||||
<url>http://www.example.com</url>
|
||||
|
||||
<properties>
|
||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||
<maven.compiler.source>1.11</maven.compiler.source>
|
||||
<maven.compiler.target>1.11</maven.compiler.target>
|
||||
</properties>
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>junit</groupId>
|
||||
<artifactId>junit</artifactId>
|
||||
<version>3.8.1</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.json</groupId>
|
||||
<artifactId>json</artifactId>
|
||||
<version>20190722</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
|
||||
<build>
|
||||
<pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
|
||||
<plugins>
|
||||
<plugin>
|
||||
<artifactId>maven-clean-plugin</artifactId>
|
||||
<version>3.1.0</version>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<artifactId>maven-site-plugin</artifactId>
|
||||
<version>3.7.1</version>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<artifactId>maven-project-info-reports-plugin</artifactId>
|
||||
<version>3.0.0</version>
|
||||
</plugin>
|
||||
<!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_jar_packaging -->
|
||||
<plugin>
|
||||
<artifactId>maven-resources-plugin</artifactId>
|
||||
<version>3.0.2</version>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<artifactId>maven-compiler-plugin</artifactId>
|
||||
<version>3.8.0</version>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<artifactId>maven-surefire-plugin</artifactId>
|
||||
<version>2.22.1</version>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<artifactId>maven-jar-plugin</artifactId>
|
||||
<version>3.0.2</version>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<artifactId>maven-install-plugin</artifactId>
|
||||
<version>2.5.2</version>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<artifactId>maven-deploy-plugin</artifactId>
|
||||
<version>2.8.2</version>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</pluginManagement>
|
||||
</build>
|
||||
|
||||
<reporting>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<artifactId>maven-project-info-reports-plugin</artifactId>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</reporting>
|
||||
</project>
|
@ -0,0 +1,21 @@
|
||||
package com.olexyn.misp.helper;
|
||||
|
||||
import org.json.JSONException;
|
||||
import org.json.JSONObject;
|
||||
|
||||
public class JsonHelper {
|
||||
|
||||
|
||||
|
||||
|
||||
public static boolean isJson(String string){
|
||||
|
||||
try{
|
||||
new JSONObject(string);
|
||||
}catch (JSONException | NullPointerException e){
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
@ -0,0 +1,139 @@
|
||||
package com.olexyn.misp.helper;
|
||||
|
||||
import org.json.JSONException;
|
||||
import org.json.JSONObject;
|
||||
|
||||
import java.util.Objects;
|
||||
|
||||
public class Ride {
|
||||
|
||||
private static long count = 0L;
|
||||
|
||||
final private Long id;
|
||||
private String request;
|
||||
private String data;
|
||||
|
||||
// FUTURE it might be possible to use a ride for many requests.
|
||||
// private List<String> requests = new ArrayList<>();
|
||||
// private Map<String,String> data = new HashMap<>();
|
||||
|
||||
|
||||
public Ride() {
|
||||
id = count++;
|
||||
}
|
||||
|
||||
public Ride(String jsonString) {
|
||||
|
||||
JSONObject obj = new JSONObject();
|
||||
try {
|
||||
obj = new JSONObject(jsonString);
|
||||
}catch (JSONException e){
|
||||
int br = 0;
|
||||
}
|
||||
|
||||
|
||||
long _id;
|
||||
|
||||
try {
|
||||
_id = obj.getLong("id");
|
||||
}catch (JSONException e){
|
||||
_id = count++;
|
||||
}
|
||||
id = _id;
|
||||
try{
|
||||
request = obj.getString("request");
|
||||
} catch (JSONException e){
|
||||
request = null;
|
||||
}
|
||||
try{
|
||||
data = obj.getString("data");
|
||||
}catch (JSONException e){
|
||||
data = null;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
public Ride(JSONObject obj){
|
||||
long _id;
|
||||
|
||||
try {
|
||||
_id = obj.getLong("id");
|
||||
}catch (JSONException e){
|
||||
_id = count++;
|
||||
}
|
||||
id = _id;
|
||||
try{
|
||||
request = obj.getString("request");
|
||||
} catch (JSONException e){
|
||||
request = null;
|
||||
}
|
||||
try{
|
||||
data = obj.getString("data");
|
||||
}catch (JSONException e){
|
||||
data = null;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
public void setRequest(String request) {
|
||||
this.request = request;
|
||||
}
|
||||
|
||||
public void setData(String data) {
|
||||
this.data = data;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
public String getRequest() {
|
||||
return this.request;
|
||||
}
|
||||
|
||||
public String getData() {
|
||||
return this.data;
|
||||
}
|
||||
|
||||
public Long getID() {
|
||||
return this.id;
|
||||
}
|
||||
|
||||
|
||||
|
||||
private String brace(String foo) {
|
||||
return "\"" + foo + "\"";
|
||||
}
|
||||
|
||||
private String unbrace(String foo) { return foo.replace("\"", ""); }
|
||||
|
||||
public String json() {
|
||||
JSONObject obj = new JSONObject();
|
||||
obj.put("id", id);
|
||||
obj.put("request", request);
|
||||
obj.put("data",data);
|
||||
return obj.toString();
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public boolean equals(Object o) {
|
||||
if (this == o) return true;
|
||||
if (o == null || getClass() != o.getClass()) return false;
|
||||
Ride ride = (Ride) o;
|
||||
return Objects.equals(id, ride.id) && Objects.equals(request, ride.request) && Objects.equals(data, ride.data);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
return Objects.hash(id, request, data);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
@ -0,0 +1,66 @@
|
||||
package com.olexyn.misp.helper;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public class WebPrint {
|
||||
|
||||
final static public String SPLIT = "io32413445353";
|
||||
|
||||
public static String list(List<String> list, String type) {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
sb.append("<table style=\"width:100%\">");
|
||||
sb.append("<tr>");
|
||||
sb.append("<th>");
|
||||
sb.append("List: ");
|
||||
sb.append(type);
|
||||
sb.append("</th>");
|
||||
sb.append("</tr>");
|
||||
|
||||
for (String entry : list) {
|
||||
sb.append("<tr><td>");
|
||||
sb.append(entry);
|
||||
sb.append("</td></tr>");
|
||||
}
|
||||
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
|
||||
public static String requestList(List<String> list) {
|
||||
|
||||
StringBuilder sb = new StringBuilder();
|
||||
sb.append("<table style=\"width:100%\">");
|
||||
sb.append("<tr>");
|
||||
sb.append("<th>");
|
||||
sb.append("URL");
|
||||
sb.append("</th>");
|
||||
sb.append("<th>");
|
||||
sb.append("Method");
|
||||
sb.append("</th>");
|
||||
sb.append("<th>");
|
||||
sb.append("Query");
|
||||
sb.append("</th>");
|
||||
sb.append("</tr>");
|
||||
|
||||
for (String entry : list) {
|
||||
String[] split = entry.split(SPLIT);
|
||||
sb.append("<tr>");
|
||||
sb.append("<td>");
|
||||
sb.append(split[0]);
|
||||
sb.append("</td>");
|
||||
sb.append("<td>");
|
||||
sb.append(split[1]);
|
||||
sb.append("</td>");
|
||||
sb.append("<td>");
|
||||
sb.append(split[2]);
|
||||
sb.append("</td>");
|
||||
sb.append("</tr>");
|
||||
}
|
||||
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
@ -0,0 +1,26 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
|
||||
<project name="misp-helper" xmlns="http://maven.apache.org/DECORATION/1.8.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/DECORATION/1.8.0 http://maven.apache.org/xsd/decoration-1.8.0.xsd">
|
||||
<bannerLeft>
|
||||
<name>misp-helper</name>
|
||||
<src>https://maven.apache.org/images/apache-maven-project.png</src>
|
||||
<href>https://www.apache.org/</href>
|
||||
</bannerLeft>
|
||||
|
||||
<bannerRight>
|
||||
<src>https://maven.apache.org/images/maven-logo-black-on-white.png</src>
|
||||
<href>https://maven.apache.org/</href>
|
||||
</bannerRight>
|
||||
|
||||
<skin>
|
||||
<groupId>org.apache.maven.skins</groupId>
|
||||
<artifactId>maven-fluido-skin</artifactId>
|
||||
<version>1.7</version>
|
||||
</skin>
|
||||
|
||||
<body>
|
||||
<menu ref="parent" />
|
||||
<menu ref="reports" />
|
||||
</body>
|
||||
</project>
|
@ -0,0 +1,10 @@
|
||||
#!/bin/bash
|
||||
version="0.1"
|
||||
file="target/misp-rev-${version}.war"
|
||||
groupId="com.olexyn.misp.rev"
|
||||
artifactId="misp-rev"
|
||||
|
||||
|
||||
|
||||
mvn package
|
||||
mvn install:install-file -Dfile=${file} -DgroupId=${groupId} -DartifactId=${artifactId} -Dversion=${version} -Dpackaging=war -DgeneratePom=true
|
@ -0,0 +1,90 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
|
||||
<groupId>com.olexyn.misp.rev</groupId>
|
||||
<artifactId>misp-rev</artifactId>
|
||||
<version>0.1</version>
|
||||
<packaging>war</packaging>
|
||||
|
||||
<name>misp-rev Maven Webapp</name>
|
||||
<!-- FIXME change it to the project's website -->
|
||||
<url>http://www.example.com</url>
|
||||
|
||||
<properties>
|
||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||
<maven.compiler.source>1.7</maven.compiler.source>
|
||||
<maven.compiler.target>1.7</maven.compiler.target>
|
||||
</properties>
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>junit</groupId>
|
||||
<artifactId>junit</artifactId>
|
||||
<version>4.11</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.olexyn.misp.helper</groupId>
|
||||
<artifactId>misp-helper</artifactId>
|
||||
<version>0.1</version>
|
||||
<scope>compile</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>commons-io</groupId>
|
||||
<artifactId>commons-io</artifactId>
|
||||
<version>2.6</version>
|
||||
<scope>compile</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.eclipse.jetty.orbit</groupId>
|
||||
<artifactId>javax.servlet</artifactId>
|
||||
<version>3.0.0.v201112011016</version>
|
||||
<scope>compile</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.json</groupId>
|
||||
<artifactId>json</artifactId>
|
||||
<version>20190722</version>
|
||||
<scope>compile</scope>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
<build>
|
||||
<pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
|
||||
<plugins>
|
||||
<plugin>
|
||||
<artifactId>maven-clean-plugin</artifactId>
|
||||
<version>3.1.0</version>
|
||||
</plugin>
|
||||
<!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_war_packaging -->
|
||||
<plugin>
|
||||
<artifactId>maven-resources-plugin</artifactId>
|
||||
<version>3.0.2</version>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<artifactId>maven-compiler-plugin</artifactId>
|
||||
<version>3.8.0</version>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<artifactId>maven-surefire-plugin</artifactId>
|
||||
<version>2.22.1</version>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<artifactId>maven-war-plugin</artifactId>
|
||||
<version>3.2.2</version>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<artifactId>maven-install-plugin</artifactId>
|
||||
<version>2.5.2</version>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<artifactId>maven-deploy-plugin</artifactId>
|
||||
<version>2.8.2</version>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</pluginManagement>
|
||||
</build>
|
||||
</project>
|
@ -0,0 +1,16 @@
|
||||
package com.olexyn.misp.rev;
|
||||
|
||||
import com.olexyn.misp.helper.Ride;
|
||||
|
||||
import java.io.BufferedReader;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStreamReader;
|
||||
import java.net.HttpURLConnection;
|
||||
import java.net.URL;
|
||||
import org.json.JSONObject;
|
||||
|
||||
public class ConnectionHelper {
|
||||
|
||||
|
||||
|
||||
}
|
@ -0,0 +1,12 @@
|
||||
package com.olexyn.misp.rev;
|
||||
|
||||
public class Main {
|
||||
|
||||
|
||||
|
||||
public static void main(String... args){
|
||||
new RevProxy();
|
||||
}
|
||||
|
||||
|
||||
}
|
@ -0,0 +1,169 @@
|
||||
package com.olexyn.misp.rev;
|
||||
|
||||
|
||||
import com.olexyn.misp.helper.Ride;
|
||||
|
||||
import java.io.BufferedReader;
|
||||
import java.io.DataOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStreamReader;
|
||||
import java.net.HttpURLConnection;
|
||||
import java.net.URL;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
|
||||
public class RevProxy {
|
||||
|
||||
protected static final String MISP_BRIDGE_URL = "http://localhost:9090/mispbridge/core";
|
||||
protected static final String APP_URL = "http://localhost:9090/mirror/core";
|
||||
|
||||
public static final int AVAILABLE_RIDES_OVERHEAD_TRIGGER = 4;
|
||||
public static final int AVAILABLE_RIDES_OVERHEAD = 8;
|
||||
|
||||
|
||||
public final Map<Long, Ride> available = new HashMap<>();
|
||||
public final Map<Long, Ride> booked = new HashMap<>();
|
||||
public final Map<Long, Ride> loaded = new HashMap<>();
|
||||
|
||||
|
||||
public RevProxy() {
|
||||
|
||||
Thread postRideThread = new Thread(new PostRideRunnable(this));
|
||||
postRideThread.setName("postRideThread");
|
||||
postRideThread.start();
|
||||
|
||||
Thread getRequestThread = new Thread(new GetRequestRunnable(this));
|
||||
getRequestThread.setName("getRequestThread");
|
||||
getRequestThread.start();
|
||||
|
||||
Thread getRideRequestDataThread = new Thread(new GetRideRequestDataRunnable(this));
|
||||
getRideRequestDataThread.setName("getRideRequestDataThread");
|
||||
getRideRequestDataThread.start();
|
||||
}
|
||||
|
||||
|
||||
void sendPostRide() throws IOException {
|
||||
|
||||
final Ride ride = new Ride();
|
||||
|
||||
synchronized (available) { available.put(ride.getID(), ride); }
|
||||
|
||||
final String result = send("POST", MISP_BRIDGE_URL, ride.json());
|
||||
|
||||
synchronized (available) {
|
||||
available.remove(ride.getID());
|
||||
ride.setRequest(new Ride(result).getRequest());
|
||||
}
|
||||
|
||||
synchronized (booked) { booked.put(ride.getID(), ride); }
|
||||
}
|
||||
|
||||
|
||||
void sendGetRequest(Ride ride) throws IOException {
|
||||
|
||||
synchronized (booked) {booked.remove(ride.getID()); }
|
||||
|
||||
final String result = send("GET", APP_URL, ride.getRequest());
|
||||
ride.setData(result);
|
||||
|
||||
synchronized (loaded) {loaded.put(ride.getID(), ride); }
|
||||
}
|
||||
|
||||
|
||||
void sendGetRideRequestData(Ride ride) throws IOException {
|
||||
|
||||
send("GET", MISP_BRIDGE_URL, ride.json());
|
||||
|
||||
synchronized (loaded) {loaded.remove(ride.getID()); }
|
||||
}
|
||||
|
||||
|
||||
private static String send(String method, String urlString, String body) throws IOException {
|
||||
|
||||
URL url = new URL(urlString);
|
||||
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
|
||||
connection.setRequestMethod(method);
|
||||
|
||||
connection.setDoOutput(true);
|
||||
DataOutputStream outputStream = new DataOutputStream(connection.getOutputStream());
|
||||
outputStream.writeBytes(body);
|
||||
outputStream.flush();
|
||||
outputStream.close();
|
||||
|
||||
BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
|
||||
String out;
|
||||
StringBuilder sb = new StringBuilder();
|
||||
while ((out = in.readLine()) != null) { sb.append(out); }
|
||||
in.close();
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
class PostRideRunnable implements Runnable {
|
||||
|
||||
final private RevProxy adapter;
|
||||
|
||||
public PostRideRunnable(RevProxy adapter) {
|
||||
this.adapter = adapter;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
while (true) {
|
||||
synchronized (adapter.available) {
|
||||
if (adapter.available.size() < RevProxy.AVAILABLE_RIDES_OVERHEAD_TRIGGER) {
|
||||
for (int i = 0; i < RevProxy.AVAILABLE_RIDES_OVERHEAD; i++) {
|
||||
try {adapter.sendPostRide();} catch (IOException ignored) {}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
class GetRequestRunnable implements Runnable {
|
||||
|
||||
final private RevProxy adapter;
|
||||
|
||||
public GetRequestRunnable(RevProxy adapter) {
|
||||
this.adapter = adapter;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
while (true) {
|
||||
synchronized (adapter.booked) {
|
||||
if (adapter.booked.size() > 0) {
|
||||
final Ride ride = adapter.booked.entrySet().iterator().next().getValue();
|
||||
try { adapter.sendGetRequest(ride); } catch (IOException ignored) {}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class GetRideRequestDataRunnable implements Runnable {
|
||||
|
||||
final private RevProxy adapter;
|
||||
|
||||
public GetRideRequestDataRunnable(RevProxy adapter) {
|
||||
this.adapter = adapter;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
while (true) {
|
||||
synchronized (adapter.loaded) {
|
||||
if (adapter.loaded.size() > 0) {
|
||||
final Ride ride = adapter.loaded.entrySet().iterator().next().getValue();
|
||||
try { adapter.sendGetRideRequestData(ride); } catch (IOException ignored) {}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,22 @@
|
||||
<!DOCTYPE web-app PUBLIC
|
||||
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
|
||||
"http://java.sun.com/dtd/web-app_2_3.dtd" >
|
||||
|
||||
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
|
||||
version="2.4">
|
||||
|
||||
<display-name>misp-fwd</display-name>
|
||||
|
||||
<servlet>
|
||||
<servlet-name>misp-rev</servlet-name>
|
||||
<servlet-class>com.olexyn.misp.rev.RevProxy</servlet-class>
|
||||
</servlet>
|
||||
|
||||
<servlet-mapping>
|
||||
<servlet-name>misp-rev</servlet-name>
|
||||
<url-pattern>/core</url-pattern>
|
||||
</servlet-mapping>
|
||||
|
||||
</web-app>
|
After Width: | Height: | Size: 617 B |
@ -0,0 +1,20 @@
|
||||
<html>
|
||||
<head>
|
||||
<title>misp-rev</title>
|
||||
</head>
|
||||
<body bgcolor=white>
|
||||
|
||||
<table border="0">
|
||||
<tr>
|
||||
<td align=center>
|
||||
<img src="images/io42630.png">
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<h1>misp-rev</h1>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</body>
|
||||
</html>
|
Loading…
Reference in new issue