+ add misphelper.jar to lib.

pull/1/head
Ivan Olexyn 5 years ago
parent fdfc137bd9
commit 16f047e15a

@ -2,34 +2,71 @@
cwd=$(pwd) cwd=$(pwd)
mispbridge_out='/out/production/mispbridge/com/olexyn/misp/bridge' # compile and distribute the misphelper.jar
mispbridge_wrapper='/mispbridge/war/wrapper'; cd "${cwd}/out/production/misphelper" || exit
jar -cvf misphelper.jar ./com/olexyn/misp/helper/*
a='misp'
b='bridge'
n="${a}${b}"
pkg="/com/olexyn/${a}/${b}"
out="/out/production/${n}${pkg}"
wrapper="/${n}/war/wrapper"
# copy misphelper.jar to wrapper/.../lib
cp "${cwd}/out/production/misphelper/misphelper.jar" "${cwd}${wrapper}/WEB-INF/lib"
# copy compiled code into the wrapper. # copy compiled code into the wrapper.
cp -r "${cwd}${mispbridge_out}" "${cwd}${mispbridge_wrapper}/WEB-INF/classes" cp -r "${cwd}${out}" "${cwd}${wrapper}/WEB-INF/classes/com/olexyn/${a}"
# compress .war # compress .war
cd "${cwd}${mispbridge_wrapper}" || exit cd "${cwd}${wrapper}" || exit
jar -cvf ../mispbridge.war * jar -cvf "../${n}.war" *
a='misp'
b='client'
mispclient_out='/out/production/mispclient/com/olexyn/misp/client' n="${a}${b}"
mispclient_wrapper='/mispclient/war/wrapper'; pkg="/com/olexyn/${a}/${b}"
out="/out/production/${n}${pkg}"
wrapper="/${n}/war/wrapper"
# copy misphelper.jar to wrapper/.../lib
cp "${cwd}/out/production/misphelper/misphelper.jar" "${cwd}${wrapper}/WEB-INF/lib"
# copy compiled code into the wrapper. # copy compiled code into the wrapper.
cp -r "${cwd}${mispclient_out}" "${cwd}${mispclient_wrapper}/WEB-INF/classes" cp -r "${cwd}${out}" "${cwd}${wrapper}/WEB-INF/classes/com/olexyn/${a}"
# compress .war # compress .war
cd "${cwd}${mispclient_wrapper}" || exit cd "${cwd}${wrapper}" || exit
jar -cvf ../mispclient.war * jar -cvf "../${n}.war" *
a='mirror'
pkg="/com/olexyn/${a}"
out="/out/production/${a}${pkg}"
wrapper="/${a}/war/wrapper"
mirror_out='/out/production/mirror/com/olexyn/mirror' # copy misphelper.jar to wrapper/.../lib
mirror_wrapper='/mirror/war/wrapper'; cp "${cwd}/out/production/misphelper/misphelper.jar" "${cwd}${wrapper}/WEB-INF/lib"
# copy compiled code into the wrapper. # copy compiled code into the wrapper.
cp -r "${cwd}${mirror_out}" "${cwd}${mirror_wrapper}/WEB-INF/classes" cp -r "${cwd}${out}" "${cwd}${wrapper}/WEB-INF/classes/com/olexyn"
# compress .war # compress .war
cd "${cwd}${mirror_wrapper}" || exit cd "${cwd}${wrapper}" || exit
jar -cvf ../mirror.war * jar -cvf "../${a}.war" *

@ -1,9 +1,8 @@
package com.olexyn.mirror; package com.olexyn.mirror;
import com.olexyn.misp.helper.Ride; import com.olexyn.misp.helper.Ride;
import com.olexyn.misp.helper.WebPrint;
import org.apache.commons.io.IOUtils; import org.apache.commons.io.IOUtils;
import org.json.JSONException;
import org.json.JSONObject;
import javax.servlet.ServletException; import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServlet;
@ -11,16 +10,20 @@ import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import java.io.IOException; import java.io.IOException;
import java.io.PrintWriter; import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
import java.util.List;
import java.util.Map; import java.util.Map;
public class Mirror extends HttpServlet { public class Mirror extends HttpServlet {
protected static final String MISP_CLIENT_URL = "http://localhost:9090/mispclient/core"; 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<>(); private final List<String> getList = new ArrayList<>();
public final Map<Long, Ride> loaded = new HashMap<>(); private final List<String> postList = new ArrayList<>();
private final List<String> putList = new ArrayList<>();
// ####### // #######
// //
@ -29,172 +32,46 @@ public class Mirror extends HttpServlet {
@Override @Override
public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException { public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
synchronized (getList) {
getList.add(IOUtils.toString(request.getReader()));
String payload = IOUtils.toString(request.getReader());
JSONObject obj = new JSONObject();
try {
obj = new JSONObject(payload);
}catch (JSONException jsonE){
int br = 0;
Thread handleGetUserRequestThread = new Thread(() -> {
try {
handleGetRequest(request, response);
} catch (IOException | InterruptedException e) {e.printStackTrace(); }
});
handleGetUserRequestThread.setName("handleGetUserRequestThread");
handleGetUserRequestThread.start();
}
Ride ridePayload = new Ride(payload);
boolean hasID = ridePayload.getID() != null;
boolean hasRequest = ridePayload.getRequest() != null;
boolean hasData = ridePayload.getData() != null;
if (hasID && hasRequest && hasData) {
Thread handleGetRideRequestDataThread = new Thread(() -> {
try {
handleGetRideRequestData(request, response);
} catch (IOException | InterruptedException e) { e.printStackTrace(); }
});
handleGetRideRequestDataThread.setName("handleGetRideRequestDataThread");
handleGetRideRequestDataThread.start();
} }
PrintWriter print = response.getWriter();
} print.println("<!DOCTYPE html>");
print.println("<html lang=\"en\">");
/** print.println("<head>");
* handle GET (Link) print.println("<meta charset=\"utf-8\">");
* remove Ride from AvailableRides print.println("<title>title</title>");
* add Ride to ReservedRides print.println("<link rel=\"stylesheet\" href=\"style.css\">");
* send OK (Ride) to mispclient print.println("<script src=\"script.js\"></script>");
* send OK (Ride) to public print.println("</head>");
*/ print.println("<body>");
protected void handleGetRequest(HttpServletRequest request, HttpServletResponse response) throws IOException, InterruptedException { synchronized (getList) {
final Ride ride; print.println(WebPrint.list(getList, "GET"));
String parsedRequest = IOUtils.toString(request.getReader());
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();
} }
print.println(" </body></html>");
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 @Override
public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException {
Thread handlePostRideThread = new Thread(() -> {
try {handlePostRide(request, response); } catch (IOException | InterruptedException e) { e.printStackTrace(); }
});
handlePostRideThread.setName("handlePostRideThread");
handlePostRideThread.start();
}
/** synchronized (postList) {
* handle POST (Ride) postList.add(IOUtils.toString(request.getReader()));
* 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) { @Override
//booked.notify(); public void doPut(HttpServletRequest request, HttpServletResponse response) throws IOException{
//booked.wait(); synchronized (putList){
ride.setRequest(booked.get(ride.getID()).getRequest()); putList.add(IOUtils.toString(request.getReader()));
} }
response.setStatus(200);
PrintWriter writer = response.getWriter();
writer.write(ride.json());
writer.flush();
writer.close();
} }
} }

Binary file not shown.

@ -4,19 +4,19 @@
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
version="2.4"> version="2.4">
<display-name>BridgeServlet, World Application</display-name> <display-name>Mirror</display-name>
<description> <description>
This is a simple web application with a source code organization This is a simple web application with a source code organization
based on the recommendations of the Application Developer's Guide. based on the recommendations of the Application Developer's Guide.
</description> </description>
<servlet> <servlet>
<servlet-name>BridgeServlet</servlet-name> <servlet-name>Mirror</servlet-name>
<servlet-class>core.BridgeServlet</servlet-class> <servlet-class>com.olexyn.mirror.Mirror</servlet-class>
</servlet> </servlet>
<servlet-mapping> <servlet-mapping>
<servlet-name>BridgeServlet</servlet-name> <servlet-name>Mirror</servlet-name>
<url-pattern>/core</url-pattern> <url-pattern>/core</url-pattern>
</servlet-mapping> </servlet-mapping>

@ -1,6 +1,6 @@
<html> <html>
<head> <head>
<title>BridgeServlet</title> <title>Mirror</title>
</head> </head>
<body bgcolor=white> <body bgcolor=white>
@ -10,7 +10,7 @@
<img src="images/tomcat.gif"> <img src="images/tomcat.gif">
</td> </td>
<td> <td>
<h1>BridgeServlet</h1> <h1>Mirror</h1>
</td> </td>
</tr> </tr>
</table> </table>
@ -18,7 +18,7 @@
<ul> <ul>
<p>This Servlet currently provides the following features: <p>This Servlet currently provides the following features:
<!--<li>To a <a href="hello.jsp">JSP page</a>.--> <!--<li>To a <a href="hello.jsp">JSP page</a>.-->
<li><a href="core">Tunnel</a> to hosted Application. <li><a href="core">Mirror</a> of all requests.
</ul> </ul>
</body> </body>

@ -23,7 +23,7 @@ public class Debug {
sb.append("<table style=\"width:100%\">"); sb.append("<table style=\"width:100%\">");
sb.append("<tr>"); sb.append("<tr>");
sb.append("<th>"); sb.append("<th>");
sb.append("Debug: "+ type); sb.append("WebPrint: "+ type);
sb.append("</th>"); sb.append("</th>");
sb.append("</tr>"); sb.append("</tr>");
synchronized (foo){ synchronized (foo){

Binary file not shown.

@ -12,7 +12,7 @@
<servlet> <servlet>
<servlet-name>BridgeServlet</servlet-name> <servlet-name>BridgeServlet</servlet-name>
<servlet-class>core.BridgeServlet</servlet-class> <servlet-class>com.olexyn.misp.bridge.BridgeServlet</servlet-class>
</servlet> </servlet>
<servlet-mapping> <servlet-mapping>

@ -11,7 +11,7 @@ public class Debug {
StringBuilder sb = new StringBuilder(); StringBuilder sb = new StringBuilder();
sb.append("<h1>Debug:</h1>"); sb.append("<h1>WebPrint:</h1>");
sb.append(mapTable(clientServlet.available, "available")); sb.append(mapTable(clientServlet.available, "available"));
sb.append(mapTable(clientServlet.booked, "booked")); sb.append(mapTable(clientServlet.booked, "booked"));
sb.append(mapTable(clientServlet.loaded, "loaded")); sb.append(mapTable(clientServlet.loaded, "loaded"));

Binary file not shown.

@ -12,7 +12,7 @@
<servlet> <servlet>
<servlet-name>ClientServlet</servlet-name> <servlet-name>ClientServlet</servlet-name>
<servlet-class>core.ClientServlet</servlet-class> <servlet-class>com.olexyn.misp.client.ClientServlet</servlet-class>
</servlet> </servlet>
<servlet-mapping> <servlet-mapping>

Loading…
Cancel
Save