diff --git a/input/clientConf.json b/input/clientConf.json new file mode 100644 index 0000000000000000000000000000000000000000..68d3890f4a27f2f2bceda8ede1c3faaee931f600 --- /dev/null +++ b/input/clientConf.json @@ -0,0 +1,4 @@ +{ + "serviceID" : "localTest/doip.tcp", + "serviceAddr": "tcp://127.0.0.1:8001" +} \ No newline at end of file diff --git a/input/serverConf.json b/input/serverConf.json new file mode 100644 index 0000000000000000000000000000000000000000..9489ee669d163980539fc98c7edd1aec9d5a4688 --- /dev/null +++ b/input/serverConf.json @@ -0,0 +1,18 @@ +{ + "id": "localTest/doip.tcp", + "serviceDescription": "testTCPServer", + "publicKey": "{\"kty\":\"EC\",\"d\":\"VPvAXurYhEwCRbIuSCEPOaTyfUIbH6an4scA4BpdWCw\",\"use\":\"sig\",\"crv\":\"P-256\",\"kid\":\"86.5000.470\\/dou.TEST\",\"x\":\"IFVGcQ22vd7SEd1HsjcYuaLWUrfj4ochceom6YNCX4g\",\"y\":\"HSuB60fA_53vi4L30WiVQjouvAB0gSPAS8kf8Ny3RN0\"}", + "serviceName": "testTCPServer", + "listenerInfos": [ + { + "url": "tcp://127.0.0.1:8001", + "protocolVersion": "2.1" + }, + { + "url": "udp://127.0.0.1:8002", + "protocolVersion": "2.1" + } + ], + "owner": "86.5000.470/dou.TEST", + "repoType": "registry" +} \ No newline at end of file diff --git a/log/IntegratyTest.csv b/log/IntegratyTest.csv new file mode 100644 index 0000000000000000000000000000000000000000..45f04b1ad4ebc3384b34d6a9c83db39a83211aa3 --- /dev/null +++ b/log/IntegratyTest.csv @@ -0,0 +1,10 @@ +Number,Function,Result,Details +1,0.DOIP/Op.Hello,Pass,Success +2,0.DOIP/Op.Create,Pass,Success +3,0.DOIP/Op.ListOperations,Pass,Success +4,0.DOIP/Op.Retrieve,Pass,Success +5,0.DOIP/Op.Search,Pass,Success +6,0.DOIP/Op.Update,Pass,Success +7,0.DOIP/Op.Retrieve,Pass,Success +8,0.DOIP/Op.Delete,Pass,Success +9,0.DOIP/Op.Retrieve,Not Pass,DoNotFound diff --git a/src/main/java/org/bdware/doip/DoipV2Client.java b/src/main/java/org/bdware/doip/DoipV2Client.java index 85f691a8ee6eb49ca5a881df85139716e5bb28de..2488a50f2c24e45060bceebfead9e5ebf92e3065 100644 --- a/src/main/java/org/bdware/doip/DoipV2Client.java +++ b/src/main/java/org/bdware/doip/DoipV2Client.java @@ -12,14 +12,15 @@ import org.apache.logging.log4j.Logger; import org.bdware.doip.codec.DOIPVersion; import org.bdware.doip.codec.digitalObject.DoType; import org.bdware.doip.codec.doipMessage.DoipMessage; +import org.bdware.doip.codec.doipMessage.DoipResponseCode; import org.bdware.doip.codec.exception.DoDecodeException; import org.bdware.doip.codec.metadata.SearchParameter; import org.bdware.doip.endpoint.client.ClientConfig; -import org.bdware.doip.endpoint.client.DoipClientImpl; import org.bdware.doip.endpoint.client.DoipMessageCallback; import org.bdware.doip.endpoint.client.TLSClientConfig; import org.bdware.doip.codec.doipMessage.MessageBody; import org.junit.Test; +import org.bdware.doip.proxy.DoipClientImpl2; import java.io.IOException; import java.io.UnsupportedEncodingException; @@ -37,16 +38,16 @@ import javax.crypto.spec.PSource; public class DoipV2Client { - private static Logger LOGGER ; static Logger logger = LogManager.getLogger(DoipV2Client.class); public static boolean flag = true; - static Scanner input; - static ClientConfig config; - static DoipClientImpl client; - + public static Scanner input; + public static ClientConfig config; + public static DoipClientImpl2 client; + public static String serviceID; + public static String serviceAddr; static DigitalObject save_DO ; - public static void main(String[] args) throws InterruptedException { + public static void main(String[] args) { input = new Scanner(System.in); config(); @@ -167,7 +168,7 @@ public class DoipV2Client { return true; } - private static void printResponse(DoipMessage repMsg) { + private void printResponse(DoipMessage repMsg) { if(repMsg == null) { logger.info("response: NULL!!"); return; @@ -177,38 +178,54 @@ public class DoipV2Client { } public static void config() { //ClientConfig config = TLSClientConfig.getDefault("tls://127.0.0.1:8888"); + System.out.println("Please Enter serviceID:"); + String serviceid = "localTest/doip.tcp"; System.out.println("Please enter url:"); - String url = input.nextLine(); - client = new DoipClientImpl(); + //String url = input.nextLine(); + String url = "tls://127.0.0.1:8888"; + + serviceID = serviceid; + serviceAddr = url; + + client = new DoipClientImpl2(); config = TLSClientConfig.getDefault(url); config.protocolVersion = DOIPVersion.V2_0; - client.connect(config); +// client.connect(config); } public static void hello(String DOID) throws InterruptedException { - // For example : hello local/compatibilityTest - logger.debug("log mode: debug"); -// client.hello("local/compatibilityTest", msg -> { + // hello local/compatibilityTest + flag = true; + System.out.println("----- [SEND] Client->Proxy Hello -----"); + + client.connect(config); + + serviceID = DOID; client.hello(DOID, msg -> { + System.out.println("----- [RECEIVE] Proxy->Client Hello -----"); flag = false; - try { - logger.info(new Gson().toJson(msg.body.getDataAsDigitalObject())); - } catch (DoDecodeException e) { - e.printStackTrace(); - } catch (IOException e) { - e.printStackTrace(); + if(msg.header.parameters.response == DoipResponseCode.Success){ + System.out.println("----- [SUCCESS] Client & Proxy Hello -----"); + }else{ + System.out.println("----- [FAIL] Client & Proxy Hello -----"); } +// logger.info(new Gson().toJson(msg.body.getDataAsDigitalObject())); }); while(flag){ logger.debug("Wait For Response"); Thread.sleep(500); } + client.close(); } public static void listOperations(String DoID) throws InterruptedException { + // listOperations local/test flag = true; - final AtomicInteger total = new AtomicInteger(0); - final AtomicInteger correct = new AtomicInteger(0); + System.out.println("----- [SEND] Client->Proxy ListOperations -----"); + + client.connect(config); + client.listOperations(DoID,msg -> { + System.out.println("----- [RECEIVE] Proxy->Client ListOperations -----"); flag = false; String s_new; try { @@ -216,6 +233,12 @@ public class DoipV2Client { } catch (UnsupportedEncodingException e) { throw new RuntimeException(e); } + + if(msg.header.parameters.response == DoipResponseCode.Success){ + System.out.println("----- [SUCCESS] Client & Proxy ListOperations -----"); + }else{ + System.out.println("----- [FAIL] Client & Proxy ListOperations -----"); + } System.out.println("List Operations : "+ s_new); //logger.info(new Gson().toJson(msg.body.getDataAsDigitalObject())); }); @@ -224,12 +247,14 @@ public class DoipV2Client { logger.debug("Wait For Response"); Thread.sleep(500); } + client.close(); } public static void create(String dobjID,String dobjType,String propertyKey,String propertyValue,String elementID,String elePath) throws IOException, InterruptedException { + // create local/test DO name example file /home/syw/Desktop/test.pdf flag = true; - //logger.debug("log mode: debug"); DoType dotype ; DigitalObject dobj; + System.out.println("Client DOTYPE : "+dobjType); switch(dobjType){ case "DO" : dotype = DoType.DO; @@ -261,29 +286,51 @@ public class DoipV2Client { dobj.elements = new ArrayList<>(); dobj.addElements(el); save_DO = dobj; - client.create(dobjID,dobj,msg -> { + + System.out.println("----- [SEND] Client->Proxy Create -----"); + + client.connect(config); + + client.create(serviceID,dobj,msg -> { + System.out.println("----- [RECEIVE] Proxy->Client Create -----"); try { flag = false; - //System.out.println("----- Create Success ------"); - DigitalObject ret_DO = msg.body.getDataAsDigitalObject(); - System.out.println("- DOID : "+ret_DO.id); - System.out.println("- DoType : "+ret_DO.type); - logger.info(new Gson().toJson(msg.body.getDataAsDigitalObject())); + if(msg.header.parameters.response == DoipResponseCode.Success){ + DigitalObject ret_DO = msg.body.getDataAsDigitalObject(); + logger.info(new Gson().toJson(msg.body.getDataAsDigitalObject())); + }else if(msg.header.parameters.response == DoipResponseCode.DoAlreadyExist){ + logger.info("Do Already Exists"); + }else{ + logger.info("An unknown error has occurred"); + } } catch (DoDecodeException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } + + if(msg.header.parameters.response == DoipResponseCode.Success){ + System.out.println("----- [SUCCESS] Client & Proxy Create -----"); + }else{ + System.out.println("----- [FAIL] Client & Proxy Create -----"); + } }); while(flag){ logger.debug("Wait For Response"); Thread.sleep(500); } + client.close(); } public static void retrieve(String DOID) throws InterruptedException { + // retrieve local/test flag = true; + System.out.println("----- [SEND] Client->Proxy retrieve -----"); + + client.connect(config); + client.retrieve(DOID,"",false, msg -> { + System.out.println("----- [RECEIVE] Proxy->Client Retrieve -----"); try { flag = false; DigitalObject ret_DO = msg.body.getDataAsDigitalObject(); @@ -293,64 +340,98 @@ public class DoipV2Client { } catch (IOException e) { e.printStackTrace(); } + + if(msg.header.parameters.response == DoipResponseCode.Success){ + System.out.println("----- [SUCCESS] Client & Proxy Retrieve -----"); + }else{ + System.out.println("----- [FAIL] Client & Proxy Retrieve -----"); + } + }); while(flag){ logger.debug("Wait For Response"); Thread.sleep(500); } + client.close(); } public static void update(String DoID, String propertyKey, String propertyValue) throws InterruptedException { + // update local/test name test flag = true; - final DigitalObject[] dobj = new DigitalObject[1]; JsonObject content = new JsonObject(); content.addProperty(propertyKey,propertyValue); save_DO.attributes = new JsonObject(); save_DO.addAttribute("content",content); + System.out.println("----- [SEND] Client->Proxy Update -----"); + + client.connect(config); + client.update(save_DO,msg -> { + System.out.println("----- [RECEIVE] Proxy->Client Update -----"); try { flag = false; - //System.out.println("----- Update Success ------"); DigitalObject ret_DO = msg.body.getDataAsDigitalObject(); - System.out.println("- DOID : "+ret_DO.id); - System.out.println("- DoType : "+ret_DO.type); logger.info(new Gson().toJson(msg.body.getDataAsDigitalObject())); } catch (DoDecodeException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } + + if(msg.header.parameters.response == DoipResponseCode.Success){ + System.out.println("----- [SUCCESS] Client & Proxy Update -----"); + }else{ + System.out.println("----- [FAIL] Client & Proxy Update -----"); + } + }); while(flag){ logger.debug("Wait For RRRRResponse"); Thread.sleep(500); } + client.close(); } public static void delete(String DoID) throws InterruptedException { + // delete local/test flag = true; - int totalCount = 1; + System.out.println("----- [SEND] Client->Proxy Delete -----"); + + client.connect(config); + client.delete(DoID,msg -> { + System.out.println("----- [RECEIVE] Proxy->Client Delete -----"); + System.out.println("CLient Response : "+msg.header.parameters.response); flag = false; - System.out.println("----- Delete Success ------"); - //dDigitalObject ret_DO = msg.body.getDataAsDigitalObject(); - //System.out.println("- DOID : "+ret_DO.id); - //System.out.println("- DoType : "+ret_DO.type); - //logger.info(new Gson().toJson(msg.body.getDataAsDigitalObject())); + if(msg.header.parameters.response == DoipResponseCode.Success){ + System.out.println("----- [SUCCESS] Client & Proxy Delete -----"); + }else if(msg.header.parameters.response == DoipResponseCode.DoNotFound){ + System.out.println("----- [FAIL] Client & Proxy Delete - Do Not Found -----"); + }else{ + System.out.println("Delete Fail Reason : "+msg.header.parameters.response); + System.out.println("----- [FAIL] Client & Proxy Delete -----"); + } }); while(flag){ logger.debug("Wait For Response"); Thread.sleep(500); } + client.close(); } public static void search(String query,String DoID) throws InterruptedException { + // search name local/test flag = true; SearchParameter sp = new SearchParameter(query,0,10,"","DO"); + System.out.println("----- [SEND] Client->Proxy Search -----"); + + client.connect(config); + client.search(DoID,sp,msg -> { + System.out.println("----- [RECEIVE] Proxy->Client Search -----"); flag = false; String s_new; try { @@ -359,12 +440,19 @@ public class DoipV2Client { throw new RuntimeException(e); } System.out.println("Search Result : "+ s_new); + + if(msg.header.parameters.response == DoipResponseCode.Success){ + System.out.println("----- [SUCCESS] Client & Proxy Search -----"); + }else{ + System.out.println("----- [FAIL] Client & Proxy Search -----"); + } }); while(flag){ logger.debug("Wait For Response"); Thread.sleep(500); } + client.close(); } } diff --git a/src/main/java/org/bdware/doip/DoipV2Server.java b/src/main/java/org/bdware/doip/DoipV2Server.java index 32b26715be1387bf1abd036440eef638dd77f7ce..ad21ad77aba86d8880eba55354f33b61bfd82d3e 100644 --- a/src/main/java/org/bdware/doip/DoipV2Server.java +++ b/src/main/java/org/bdware/doip/DoipV2Server.java @@ -27,12 +27,8 @@ public class DoipV2Server { String certPath = "./input/keys/cacert.pem"; String skPath = "./input/keys/privkey_pkcs8.pem"; - Scanner input=new Scanner(System.in); - - - System.out.println("Please enter url:"); - String url = input.nextLine(); + String url = "tls://127.0.0.1:6666"; // TLSListenerInfo listenerConfig = new TLSListenerInfo( // "tls://127.0.0.1:8889",DOIPVersion.V2_0,new File(certPath),new File(skPath) // ); @@ -44,7 +40,7 @@ public class DoipV2Server { listenerConfigs.add(listenerConfig); DoipServiceInfo serviceInfo = new DoipServiceInfo( - "local/compatibilityTest","test","repository",listenerConfigs + "local/compatibility","test","repository",listenerConfigs ); DoipServer server = DoipServerImpl.createDoipServer(serviceInfo); diff --git a/src/main/java/org/bdware/doip/proxy/DoipClientImpl2.java b/src/main/java/org/bdware/doip/proxy/DoipClientImpl2.java new file mode 100644 index 0000000000000000000000000000000000000000..dd59a463310a0efa2b5437d1a246eb3bcd1a0338 --- /dev/null +++ b/src/main/java/org/bdware/doip/proxy/DoipClientImpl2.java @@ -0,0 +1,206 @@ +package org.bdware.doip.proxy; + +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +import org.bdware.doip.codec.digitalObject.DigitalObject; +import org.bdware.doip.codec.doipMessage.DoipMessage; +import org.bdware.doip.codec.doipMessage.DoipMessageFactory; +import org.bdware.doip.codec.exception.DoipConnectException; +import org.bdware.doip.codec.metadata.SearchParameter; +import org.bdware.doip.codec.operations.BasicOperations; +import org.bdware.doip.endpoint.EndpointFactory; +import org.bdware.doip.endpoint.client.ClientConfig; +import org.bdware.doip.endpoint.client.DoipClient; +import org.bdware.doip.endpoint.client.DoipClientChannel; +import org.bdware.doip.endpoint.client.DoipMessageCallback; + +import java.net.URISyntaxException; + +public class DoipClientImpl2 implements DoipClient { + + DoipClientChannel doipChannel; + String recipientID; + String serviceID; + String serverURL = null; + + Logger logger = LogManager.getLogger(org.bdware.doip.endpoint.client.DoipClientImpl.class); + + + @Override + public void hello(String id, DoipMessageCallback cb) { + DoipMessage msg = + new DoipMessageFactory.DoipMessageBuilder() + .createRequest(id, BasicOperations.Hello.getName()) + .create(); + sendMessage(msg, cb); + } + + @Override + public void listOperations(String id, DoipMessageCallback cb) { + DoipMessage msg = + new DoipMessageFactory.DoipMessageBuilder() + .createRequest(id, BasicOperations.ListOps.getName()) + .create(); + + sendMessage(msg, cb); + } + + @Override + public void retrieve(String id, String element, boolean includeElementData, DoipMessageCallback cb) { + DoipMessage msg = + new DoipMessageFactory.DoipMessageBuilder() + .createRequest(id, BasicOperations.Retrieve.getName()) + .create(); + if (element != null) msg.header.parameters.addAttribute("element", element); + if (includeElementData) msg.header.parameters.addAttribute("includeElementData", "true"); + + sendMessage(msg, cb); + } + + @Override + public void create(String targetDOIPServiceID, DigitalObject digitalObject, DoipMessageCallback cb) { + DoipMessage msg = + new DoipMessageFactory.DoipMessageBuilder() + .createRequest(targetDOIPServiceID, BasicOperations.Create.getName()) + .addAttributes("targetIP",serverURL) + .setBody(digitalObject) + .create(); + + sendMessage(msg, cb); + } + + @Override + public void update(DigitalObject digitalObject, DoipMessageCallback cb) { + DoipMessage msg = + new DoipMessageFactory.DoipMessageBuilder() + .createRequest(digitalObject.id, BasicOperations.Update.getName()) + .setBody(digitalObject) + .create(); + + sendMessage(msg, cb); + } + + @Override + public void delete(String id, DoipMessageCallback cb) { + DoipMessage msg = + new DoipMessageFactory.DoipMessageBuilder() + .createRequest(id, BasicOperations.Delete.getName()) + .create(); + + sendMessage(msg, cb); + } + + @Override + public void search(String id, SearchParameter sp, DoipMessageCallback cb) { + DoipMessage msg = + new DoipMessageFactory.DoipMessageBuilder() + .createRequest(id, BasicOperations.Search.getName()) + .addAttributes("query", sp.query) + .addAttributes("pageNum", sp.pageNum) + .addAttributes("pageSize", sp.pageSize) + .addAttributes("type", sp.type) + .create(); + + sendMessage(msg, cb); + } + + @Override + public void sendRawMessage(DoipMessage msg, DoipMessageCallback cb) { + sendMessage(msg, cb); + } + + @Override + public void close() { + doipChannel.close(); + doipChannel = null; + } + + + @Override + public void connect(ClientConfig config) { + try { + serverURL = config.url; + doipChannel = EndpointFactory.createDoipClientChannel(config); + if (doipChannel == null) return; + doipChannel.connect(serverURL); + } catch (URISyntaxException e) { + logger.error("UUUUUURISyntaxException Exception!"); + e.printStackTrace(); + } catch (InterruptedException e) { + logger.error("IIIIInterruped Exception!"); + throw new RuntimeException(e); + } + } + + @Override + public void reconnect() throws DoipConnectException { + if (serverURL == null) throw (new DoipConnectException("target URL not set, use .connect(url) first")); + ClientConfig clientConfig = ClientConfig.fromUrl(serverURL); + if (doipChannel == null) doipChannel = EndpointFactory.createDoipClientChannel(clientConfig); + if (doipChannel == null) return; + try { + doipChannel.connect(serverURL); + } catch (URISyntaxException | InterruptedException e) { + e.printStackTrace(); + } + } + + public void reconnect(String url) throws DoipConnectException { + serverURL = url; + if (serverURL == null) throw (new DoipConnectException("target URL not set, use .connect(url) first")); + ClientConfig clientConfig = ClientConfig.fromUrl(serverURL); + if (doipChannel == null) doipChannel = EndpointFactory.createDoipClientChannel(clientConfig); + if (doipChannel == null) return; + try { + doipChannel.connect(serverURL); + } catch (URISyntaxException | InterruptedException e) { + e.printStackTrace(); + } + } + + + @Override + public String getRepoUrl() { + return serverURL; + } + + @Override + public String getRecipientID() { + return recipientID; + } + + @Override + public void setRecipientID(String id) { + recipientID = id; + } + + @Override + public boolean isConnected() { + return doipChannel != null && doipChannel.isConnected(); + } + + public void waitForConnected() { + for (int i = 0; i < 10; i++) { + if (doipChannel == null || !doipChannel.isConnected()) { + try { + Thread.sleep(200); + } catch (InterruptedException e) { + throw new RuntimeException(e); + } + continue; + } + break; + } + } + + public void sendMessage(DoipMessage msg, DoipMessageCallback cb) { + if (doipChannel == null || !doipChannel.isConnected()) { + logger.warn("channel not connect yet! " + (doipChannel == null)); + DoipMessage resp = DoipMessageFactory.createConnectFailedResponse(msg.requestID); + cb.onResult(resp); + return; + } + msg.setRecipientID(recipientID); + doipChannel.sendMessage(msg, cb); + } +} \ No newline at end of file diff --git a/src/main/java/org/bdware/doip/proxy/DoipClientV2.java b/src/main/java/org/bdware/doip/proxy/DoipClientV2.java new file mode 100644 index 0000000000000000000000000000000000000000..574311626b16b302c0b854a645394b9cfbdb8e26 --- /dev/null +++ b/src/main/java/org/bdware/doip/proxy/DoipClientV2.java @@ -0,0 +1,284 @@ +package org.bdware.doip.proxy; +import com.alibaba.fastjson.JSONArray; +import com.google.gson.Gson; +import com.google.gson.JsonObject; +//import net.dona.doip.client.DigitalObject; +//import net.dona.doip.client.Element; +import net.dona.doip.client.AuthenticationInfo; +import net.dona.doip.client.ServiceInfo; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +import org.bdware.doip.codec.DOIPVersion; +import org.bdware.doip.codec.digitalObject.DoType; +import org.bdware.doip.codec.doipMessage.DoipMessage; +import org.bdware.doip.codec.doipMessage.DoipResponseCode; +import org.bdware.doip.codec.exception.DoDecodeException; +import org.bdware.doip.codec.metadata.SearchParameter; +import org.bdware.doip.endpoint.client.ClientConfig; +import org.bdware.doip.endpoint.client.DoipClientImpl; +import org.bdware.doip.endpoint.client.DoipMessageCallback; +import org.bdware.doip.endpoint.client.TLSClientConfig; +import org.bdware.doip.codec.doipMessage.MessageBody; +import org.junit.Test; + +import java.io.IOException; +import java.io.UnsupportedEncodingException; +import java.nio.file.Files; +import java.nio.file.Paths; +import java.sql.SQLOutput; +import java.util.ArrayList; +import java.util.List; +import java.util.Scanner; +import java.util.concurrent.atomic.AtomicInteger; + +import org.bdware.doip.codec.digitalObject.*; + +import javax.crypto.spec.PSource; + +public class DoipClientV2 { + public static DoipClientImpl doipClient = new DoipClientImpl(); + public String Destination_serviceAddr; // tls://127.0.0.1:6666 + public static DoipMessage response; + public static Logger LOGGER = LogManager.getLogger(DoipClientV2.class); + public boolean flag; + public static ClientConfig config; + public void config(String destination) { + String Destination_serviceAddr = destination; + config = TLSClientConfig.getDefault(Destination_serviceAddr); + config.protocolVersion = DOIPVersion.V2_0; +// doipClient.connect(config); + } + + public DoipMessage hello(DoipMessage request) throws InterruptedException { + // hello local/compatibilityTest + flag = true; + System.out.println("----- [SEND] Proxy->Server Hello -----"); + + doipClient.connect(config); + + String serviceID = request.header.parameters.id; + doipClient.hello(serviceID, msg -> { + System.out.println("----- [RECEIVE] Server->Proxy Hello -----"); + DoipClientV2.response = msg; + flag = false; + if(msg.header.parameters.response == DoipResponseCode.Success){ + System.out.println("----- [SUCCESS] Server & Proxy Hello -----"); + }else{ + System.out.println("----- [FAIL] Server & Proxy Hello -----"); + } + }); + + while(flag){ + LOGGER.debug("Wait For Response"); + Thread.sleep(500); + } + + doipClient.close(); + + return DoipClientV2.response; + } + public DoipMessage listOperations(DoipMessage request) throws InterruptedException { + // listOperations local/test + flag = true; + System.out.println("----- [SEND] Proxy->Server ListOperations -----"); + + doipClient.connect(config); + + String doid = request.header.parameters.id; + doipClient.listOperations(doid,msg -> { + System.out.println("----- [RECEIVE] Proxy->Server ListOperations -----"); + DoipClientV2.response = msg; + flag = false; + + if(msg.header.parameters.response == DoipResponseCode.Success){ + System.out.println("----- [SUCCESS] Server & Proxy ListOperations -----"); + }else{ + System.out.println("----- [FAIL] Server & Proxy ListOperations -----"); + } + }); + + while(flag){ + LOGGER.debug("Wait For Response"); + Thread.sleep(500); + } + + doipClient.close(); + + return DoipClientV2.response; + } +// public DoipMessage create(String dobjID,String dobjType,String propertyKey,String propertyValue,String elementID,String elePath) throws IOException, InterruptedException { + public DoipMessage create(DoipMessage request) throws IOException, InterruptedException, DoDecodeException { + // create local/test DO name example file /home/syw/Desktop/test.pdf + flag = true; + DigitalObject dobj = request.body.getDataAsDigitalObject(); + System.out.println("----- [SEND] Proxy->ServerCreate -----"); + + doipClient.connect(config); + + doipClient.create(DoipV21Proxy.ServerID,dobj,msg -> { + System.out.println("----- [RECEIVE] Proxy->Server Create -----"); + DoipClientV2.response = msg; + flag = false; + + if(msg.header.parameters.response == DoipResponseCode.Success){ + System.out.println("----- [SUCCESS] Server & Proxy Create -----"); + }else{ + System.out.println("----- [FAIL] Server & Proxy Create -----"); + } + }); + + while(flag){ + LOGGER.debug("Wait For Response"); + Thread.sleep(500); + } + + doipClient.close(); + + return DoipClientV2.response; + } + public DoipMessage retrieve(DoipMessage request) throws InterruptedException { + // retrieve local/test + flag = true; + System.out.println("----- [SEND] Proxy->Server retrieve -----"); + + doipClient.connect(config); + + String doid = request.header.parameters.id; + String element = ""; + boolean includeElementData = false; + if(request.header.parameters!=null && request.header.parameters.attributes!=null && request.header.parameters.attributes.has("includeElementData")) + includeElementData =Boolean.getBoolean(request.header.parameters.attributes.get("includeElementData").toString()); + if(request.header.parameters!=null && request.header.parameters.attributes!=null && request.header.parameters.attributes.has("element")) + element = request.header.parameters.attributes.get("element").toString(); + + doipClient.retrieve(doid,"",false, msg -> { + System.out.println("----- [RECEIVE] Proxy->Server Retrieve -----"); + DoipClientV2.response = msg; + flag = false; + + if(msg.header.parameters.response == DoipResponseCode.Success){ + System.out.println("----- [SUCCESS] Server & Proxy Retrieve -----"); + }else{ + System.out.println("----- [FAIL] Server & Proxy Retrieve -----"); + } + + }); + + while(flag){ + LOGGER.debug("Wait For Response"); + Thread.sleep(500); + } + + doipClient.close(); + + return DoipClientV2.response; + } + +// public DoipMessage update(String DoID, String propertyKey, String propertyValue) throws InterruptedException { + public DoipMessage update(DoipMessage request) throws InterruptedException, IOException, DoDecodeException { + // update local/test name test + flag = true; + DigitalObject dobj = request.body.getDataAsDigitalObject(); + + doipClient.connect(config); + + System.out.println("----- [SEND] Proxy->Server Update -----"); + doipClient.update(dobj,msg -> { + System.out.println("----- [RECEIVE] Proxy->Server Update -----"); + DoipClientV2.response = msg; + flag = false; + + if(msg.header.parameters.response == DoipResponseCode.Success){ + System.out.println("----- [SUCCESS] Server & Proxy Update -----"); + }else{ + System.out.println("----- [FAIL] Server & Proxy Update -----"); + } + }); + + while(flag){ + LOGGER.debug("Wait For Response"); + Thread.sleep(500); + } + + doipClient.close(); + + return DoipClientV2.response; + } + +// public DoipMessage delete(String DoID) throws InterruptedException { + public DoipMessage delete(DoipMessage request) throws InterruptedException { + // delete local/test + flag = true; + System.out.println("----- [SEND] Proxy->Server Delete -----"); + + doipClient.connect(config); + + String doid = request.header.parameters.id; + doipClient.delete(doid,msg -> { + System.out.println("----- [RECEIVE] Proxy->Server Delete -----"); + DoipClientV2.response = msg; + flag = false; + if(msg.header.parameters.response == DoipResponseCode.Success){ + System.out.println("----- [SUCCESS] Server & Proxy Delete -----"); + }else if(msg.header.parameters.response == DoipResponseCode.DoNotFound){ + System.out.println("----- [FAIL] Server & Proxy Delete - Do Not Found -----"); + }else{ + System.out.println("Delete Fail Reason : "+msg.header.parameters.response); + System.out.println("----- [FAIL] Server & Proxy Delete -----"); + } + }); + + while(flag){ + LOGGER.debug("Wait For Response"); + Thread.sleep(500); + } + + doipClient.close(); + + return DoipClientV2.response; + } + +// public DoipMessage search(String query,String DoID) throws InterruptedException { + public DoipMessage search(DoipMessage request) throws InterruptedException { + // search name local/test + flag = true; + String query = request.header.parameters.id; + int pageNum = 0; + int pageSize = 0; + String type = ""; + if(request.header.parameters!=null){ + if(request.header.parameters.attributes.has("pageNum")) + pageNum = Integer.valueOf(request.header.parameters.attributes.get("pageNum").toString()); + if(request.header.parameters.attributes.has("pageSize")) + pageSize = Integer.valueOf(request.header.parameters.attributes.get("pageSize").toString()); + if(request.header.parameters.attributes.has("type")) + type = request.header.parameters.attributes.get("type").toString(); + } + SearchParameter sp = new SearchParameter(query,pageNum,pageSize,"",type); + sp.query = query; + System.out.println("----- [SEND] Proxy->Server Search -----"); + + doipClient.connect(config); + + doipClient.search(query,sp,msg -> { + System.out.println("----- [RECEIVE] Proxy->Server Search -----"); + DoipClientV2.response = msg; + flag = false; + + if(msg.header.parameters.response == DoipResponseCode.Success){ + System.out.println("----- [SUCCESS] Server & Proxy Search -----"); + }else{ + System.out.println("----- [FAIL] Server & Proxy Search -----"); + } + }); + + while(flag){ + LOGGER.debug("Wait For Response"); + Thread.sleep(500); + } + + doipClient.close(); + + return DoipClientV2.response; + } +} \ No newline at end of file diff --git a/src/main/java/org/bdware/doip/proxy/DoipClientV21.java b/src/main/java/org/bdware/doip/proxy/DoipClientV21.java new file mode 100644 index 0000000000000000000000000000000000000000..94e0aefef204c5f3f1c760b0b1c745bddaa3952c --- /dev/null +++ b/src/main/java/org/bdware/doip/proxy/DoipClientV21.java @@ -0,0 +1,325 @@ +package org.bdware.doip.proxy; + +// ---------------------- import org.apache.log4j.PropertyConfigurator; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +import org.bdware.doip.codec.digitalObject.DigitalObject; +import org.bdware.doip.codec.doipMessage.DoipMessage; +import org.bdware.doip.codec.exception.DoDecodeException; +import org.bdware.doip.codec.metadata.SearchParameter; +import org.bdware.doip.endpoint.client.ClientConfig; + +import java.io.*; +import java.util.concurrent.atomic.AtomicInteger; + +public class DoipClientV21 { + final DoipClientImpl2 doipClient = new DoipClientImpl2(); + public static DoipMessage response; + + public static Logger LOGGER = LogManager.getLogger(DoipClientV21.class); + + public String Send_IP; + public DoipClientV21(){ + Send_IP = "tcp://127.0.0.1:8001"; + } + public void config(String targetIP) throws IOException { + Send_IP = targetIP; +// doipClient.connect(ClientConfig.fromUrl(Send_IP)); + } + + + public DoipMessage handleHello(DoipMessage request) throws InterruptedException { + System.out.println("----- [SEND] Proxy->Server Hello -----"); + + doipClient.connect(ClientConfig.fromUrl(Send_IP)); + + long start = System.currentTimeMillis(); + final AtomicInteger total = new AtomicInteger(0); + final AtomicInteger correct = new AtomicInteger(0); + int totalCount = 1; + String serviceID = request.header.parameters.id ; + + for (int i = 0; i < totalCount; i++) { + doipClient.hello(serviceID, msg -> { + System.out.println("----- [RECEIVE] Server->Proxy Hello -----"); + + DoipClientV21.response = msg; + correct.incrementAndGet(); + total.incrementAndGet(); + }); + } + + int circle = 0; + for (; total.get() < totalCount; ) { + if (++circle % 100 == 0) + LOGGER.info(String.format("%d/%d", correct.get(), total.get())); + Thread.sleep(10); + } + int dur = (int) (System.currentTimeMillis() - start); + LOGGER.info(String.format("Final Result:%d/%d dur:%d", correct.get(), total.get(), dur)); + Thread.sleep(20); + + return DoipClientV21.response; + } + + + public DoipMessage handleCreate(DoipMessage request) throws InterruptedException, IOException, DoDecodeException { + LOGGER.info("----- [SEND] Proxy->Server Create -----"); + + doipClient.connect(ClientConfig.fromUrl(Send_IP)); + + long start = System.currentTimeMillis(); + final AtomicInteger total = new AtomicInteger(0); + final AtomicInteger correct = new AtomicInteger(0); + int totalCount = 1; + + String serviceID = request.header.parameters.id; + DigitalObject dobj = request.body.getDataAsDigitalObject(); + for (int i = 0; i < totalCount; i++) { + doipClient.create(serviceID, dobj, msg -> { + System.out.println("----- [RECEIVE] Server->Proxy Create -----"); + response = msg; + correct.incrementAndGet(); + total.incrementAndGet(); + }); + } + + int circle = 0; + for (; total.get() < totalCount; ) { + if (++circle % 100 == 0) + LOGGER.info(String.format("%d/%d", correct.get(), total.get())); + Thread.sleep(10); + } + int dur = (int) (System.currentTimeMillis() - start); + LOGGER.info(String.format("Final Result:%d/%d dur:%d", correct.get(), total.get(), dur)); + Thread.sleep(20); + + doipClient.close(); + + return response; + } + + + public DoipMessage handleListOps(DoipMessage request) throws InterruptedException { + LOGGER.info("----- [SEND] Proxy->Server ListOps -----"); + + doipClient.connect(ClientConfig.fromUrl(Send_IP)); + + long start = System.currentTimeMillis(); + final AtomicInteger total = new AtomicInteger(0); + final AtomicInteger correct = new AtomicInteger(0); + int totalCount = 1; + + String doid = request.header.parameters.id; + + for (int i = 0; i < totalCount; i++) { + doipClient.listOperations("doid", msg -> { + System.out.println("----- [RECEIVE] Server->Proxy ListOps -----"); + response = msg; + correct.incrementAndGet(); + total.incrementAndGet(); + }); + } + + int circle = 0; + for (; total.get() < totalCount; ) { + if (++circle % 100 == 0) + LOGGER.info(String.format("%d/%d", correct.get(), total.get())); + Thread.sleep(10); + } + int dur = (int) (System.currentTimeMillis() - start); + LOGGER.info(String.format("Final Result:%d/%d dur:%d", correct.get(), total.get(), dur)); + Thread.sleep(20); + + doipClient.close(); + + return response; + } + + public DoipMessage handleUpdate(DoipMessage request) throws InterruptedException, IOException, DoDecodeException { + LOGGER.info("----- [SEND] Proxy->Server Update -----"); + + doipClient.connect(ClientConfig.fromUrl(Send_IP)); + + long start = System.currentTimeMillis(); + final AtomicInteger total = new AtomicInteger(0); + final AtomicInteger correct = new AtomicInteger(0); + int totalCount = 1; + + DigitalObject dobj = request.body.getDataAsDigitalObject(); + for (int i = 0; i < totalCount; i++) { + doipClient.update(dobj, msg -> { + System.out.println("----- [RECEIVE] Server->Proxy Update -----"); + response = msg; + correct.incrementAndGet(); + total.incrementAndGet(); + }); + } + + int circle = 0; + for (; total.get() < totalCount; ) { + if (++circle % 100 == 0) + LOGGER.info(String.format("%d/%d", correct.get(), total.get())); + Thread.sleep(10); + } + int dur = (int) (System.currentTimeMillis() - start); + LOGGER.info(String.format("Final Result:%d/%d dur:%d", correct.get(), total.get(), dur)); + Thread.sleep(20); + + doipClient.close(); + + return response; + } + + + public DoipMessage handleRetrieve(DoipMessage request) throws InterruptedException { + System.out.println("----- [SEND] Proxy->Server Retrieve -----"); + + doipClient.connect(ClientConfig.fromUrl(Send_IP)); + + long start = System.currentTimeMillis(); + final AtomicInteger total = new AtomicInteger(0); + final AtomicInteger correct = new AtomicInteger(0); + int totalCount = 1; + String doid = request.header.parameters.id; + String element; + if(request.header.parameters.attributes!=null && request.header.parameters.attributes.has("element")){ + element = request.header.parameters.attributes.get("element").toString(); + }else{ + element = null; + } + boolean includeElementData; + if(request.header.parameters.attributes!=null && request.header.parameters.attributes.has("includeElementData")){ + includeElementData= Boolean.parseBoolean(request.header.parameters.attributes.get("includeElementData").toString()); + }else + includeElementData= false; + + for (int i = 0; i < totalCount; i++) { + doipClient.retrieve(doid, element, includeElementData, msg -> { + System.out.println("----- [RECEIVE] Server->Proxy Retrieve -----"); + response = msg; + correct.incrementAndGet(); + total.incrementAndGet(); + }); + } + + int circle = 0; + for (; total.get() < totalCount; ) { + if (++circle % 100 == 0) + LOGGER.info(String.format("%d/%d", correct.get(), total.get())); + Thread.sleep(10); + } + int dur = (int) (System.currentTimeMillis() - start); + LOGGER.info(String.format("Final Result:%d/%d dur:%d", correct.get(), total.get(), dur)); + Thread.sleep(20); + + doipClient.close(); + + return response; + } + + public DoipMessage handleSearch(DoipMessage request) throws InterruptedException { + System.out.println("----- [SEND] Proxy->Server Search -----"); + + doipClient.connect(ClientConfig.fromUrl(Send_IP)); + + long start = System.currentTimeMillis(); + final AtomicInteger total = new AtomicInteger(0); + final AtomicInteger correct = new AtomicInteger(0); + int totalCount = 1; + String doid = request.header.parameters.id ; + String query = ""; + int pageNum = 0; + int pageSize = 0; + String type = ""; + if(request.header.parameters!=null && request.header.parameters.attributes!=null){ + if(request.header.parameters.attributes.has("query")){ + query = request.header.parameters.attributes.get("query").toString(); + } + + if(request.header.parameters.attributes.has("pageNum")){ + pageNum = Integer.parseInt(request.header.parameters.attributes.get("pageNum").toString()); + } + + if(request.header.parameters.attributes.has("pageSize")){ + pageSize = Integer.parseInt(request.header.parameters.attributes.get("pageSize").toString()); + } + if(request.header.parameters.attributes.has("type")) + type = request.header.parameters.attributes.get("type").toString(); + } + SearchParameter sp = new SearchParameter(query, pageNum, pageSize, "", type); + sp.query = query; + + for (int i = 0; i < totalCount; i++) { + doipClient.search(doid, sp, msg -> { + System.out.println("----- [RECEIVE] Server->Proxy Search -----"); + response = msg; + correct.incrementAndGet(); + total.incrementAndGet(); + }); + } + + int circle = 0; + for (; total.get() < totalCount; ) { + if (++circle % 100 == 0) + LOGGER.info(String.format("%d/%d", correct.get(), total.get())); + Thread.sleep(10); + } + int dur = (int) (System.currentTimeMillis() - start); + LOGGER.info(String.format("Final Result:%d/%d dur:%d", correct.get(), total.get(), dur)); + Thread.sleep(20); + + doipClient.close(); + + return response; + } + + public DoipMessage handleDelete(DoipMessage request) throws InterruptedException { + LOGGER.info("----- [SEND] Proxy->Server Delete -----"); + + doipClient.connect(ClientConfig.fromUrl(Send_IP)); + + long start = System.currentTimeMillis(); + final AtomicInteger total = new AtomicInteger(0); + final AtomicInteger correct = new AtomicInteger(0); + int totalCount = 1; + + String doid = request.header.parameters.id; + for (int i = 0; i < totalCount; i++) { + doipClient.delete(doid, msg -> { + System.out.println("----- [RECEIVE] Server->Proxy Delete -----"); + response = msg; + System.out.println("Proxy Client Response : "+msg.header.parameters.response); + correct.incrementAndGet(); + total.incrementAndGet(); + }); + } + + int circle = 0; + for (; total.get() < totalCount; ) { + if (++circle % 100 == 0) + LOGGER.info(String.format("%d/%d", correct.get(), total.get())); + Thread.sleep(10); + } + + int dur = (int) (System.currentTimeMillis() - start); + LOGGER.info(String.format("Final Result:%d/%d dur:%d", correct.get(), total.get(), dur)); + Thread.sleep(20); + + doipClient.close(); + + return response; + } + + public String escapeSpecialCharacters(String data) { + long start = System.currentTimeMillis(); + String escapedData = data.replaceAll("\\R", " "); + if (data.contains(",") || data.contains("\"") || data.contains("'")) { + data = data.replace("\"", "\"\""); + escapedData = "\"" + data + "\""; + } + return escapedData; + } +} + + diff --git a/src/main/java/org/bdware/doip/proxy/DoipProxy.java b/src/main/java/org/bdware/doip/proxy/DoipProxy.java deleted file mode 100644 index 974811bf17d808b7ffdb3e9505fa076d37f28122..0000000000000000000000000000000000000000 --- a/src/main/java/org/bdware/doip/proxy/DoipProxy.java +++ /dev/null @@ -1,4 +0,0 @@ -package org.bdware.doip.proxy; - -public class DoipProxy { -} diff --git a/src/main/java/org/bdware/doip/proxy/DoipProxyMain.java b/src/main/java/org/bdware/doip/proxy/DoipProxyMain.java new file mode 100644 index 0000000000000000000000000000000000000000..8a4eaf53bbf16dc6cb39d3e33e572170d958de7e --- /dev/null +++ b/src/main/java/org/bdware/doip/proxy/DoipProxyMain.java @@ -0,0 +1,17 @@ +package org.bdware.doip.proxy; + +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +import java.io.*; + +public class DoipProxyMain { + + Logger logger = LogManager.getLogger(DoipProxyMain.class); + public static boolean flag = true; + + public static void main(String[] arg) throws IOException { + DoipV2Proxy.start(); +// DoipV21Proxy.start(); + } +} diff --git a/src/main/java/org/bdware/doip/proxy/DoipV21Proxy.java b/src/main/java/org/bdware/doip/proxy/DoipV21Proxy.java new file mode 100644 index 0000000000000000000000000000000000000000..a15756b28f19ad80f448d351043149e91b3f7fc6 --- /dev/null +++ b/src/main/java/org/bdware/doip/proxy/DoipV21Proxy.java @@ -0,0 +1,45 @@ +package org.bdware.doip.proxy; + +import com.google.gson.Gson; +import com.google.gson.reflect.TypeToken; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +import org.bdware.doip.endpoint.server.DoipServer; +import org.bdware.doip.endpoint.server.DoipServerImpl; +import org.bdware.doip.endpoint.server.DoipServiceInfo; + +import java.awt.dnd.DragSource; +import java.io.FileNotFoundException; +import java.io.FileReader; +import java.io.Reader; +import java.util.Scanner; + +public class DoipV21Proxy { + public static boolean flag = true; + public static DoipClientV2 client = new DoipClientV2(); + public static Scanner input = new Scanner(System.in); + public static String ServerID; + public static String Destination_ServiceID; + public static void start() throws FileNotFoundException { + // V2.1 SERVER + Reader infoStrReader = new FileReader("./input/serverConf.json"); + DoipServiceInfo v21serviceInfo = new Gson().fromJson(infoStrReader, + new TypeToken(){}.getType()); + System.out.println("Please enter Server Address:"); + // tls://127.0.0.1:6666 + Destination_ServiceID = input.nextLine(); + + int si = v21serviceInfo.listenerInfos.size(); + while( si > 0 ){ + System.out.println("Listener"+si+" : "+ v21serviceInfo.listenerInfos.get(si - 1).url); + si--; + } + + ProxyV21Handler handler = new ProxyV21Handler(v21serviceInfo); + DoipServer server = new DoipServerImpl(v21serviceInfo); + client.config(Destination_ServiceID); + server.setRepositoryHandler(handler); + server.start(); + } +} + diff --git a/src/main/java/org/bdware/doip/proxy/DoipV2Proxy.java b/src/main/java/org/bdware/doip/proxy/DoipV2Proxy.java new file mode 100644 index 0000000000000000000000000000000000000000..ec48bcf6b93d02326acd8d26b3804c61ed251d9d --- /dev/null +++ b/src/main/java/org/bdware/doip/proxy/DoipV2Proxy.java @@ -0,0 +1,46 @@ +package org.bdware.doip.proxy; + +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +import org.bdware.doip.codec.DOIPVersion; +import org.bdware.doip.endpoint.server.*; + +import java.io.File; +import java.io.IOException; +import java.util.ArrayList; +import java.util.Scanner; +import java.util.concurrent.atomic.AtomicInteger; + +public class DoipV2Proxy { + Logger logger = LogManager.getLogger(DoipProxyMain.class); + public static DoipClientV21 client = new DoipClientV21(); + public static String Listen_IP; + public static Scanner input = new Scanner(System.in); + public static void start() throws IOException { + + String certPath = "./input/keys/cacert.pem"; + String skPath = "./input/keys/privkey_pkcs8.pem"; + + System.out.println("Please enter Listen Address : "); + Listen_IP = "tls://127.0.0.1:8888"; + TLSListenerInfo v2listenerConfig = new TLSListenerInfo( + Listen_IP, DOIPVersion.V2_0, new File(certPath), new File(skPath) + ); + + ArrayList v2listenerConfigs = new ArrayList<>(); + v2listenerConfigs.add(v2listenerConfig); + + DoipServiceInfo v2serviceInfo = new DoipServiceInfo( + "", "proxy", "", v2listenerConfigs + ); + + // v2.0 SERVER + DoipServer server = DoipServerImpl.createDoipServer(v2serviceInfo); + + final AtomicInteger count = new AtomicInteger(0); + ProxyV2Handler handler = new ProxyV2Handler(v2serviceInfo); + handler.count = count; + server.setRepositoryHandler(handler); + server.start(); + } +} diff --git a/src/main/java/org/bdware/doip/proxy/ProxyV21Handler.java b/src/main/java/org/bdware/doip/proxy/ProxyV21Handler.java new file mode 100644 index 0000000000000000000000000000000000000000..1e5cd60a103c7c20e0010d7476b87c824454a8c6 --- /dev/null +++ b/src/main/java/org/bdware/doip/proxy/ProxyV21Handler.java @@ -0,0 +1,285 @@ +package org.bdware.doip.proxy; + +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +import org.bdware.doip.codec.digitalObject.DigitalObject; +import org.bdware.doip.codec.digitalObject.DoType; +import org.bdware.doip.codec.digitalObject.Element; +import org.bdware.doip.codec.doipMessage.DoipMessage; +import org.bdware.doip.codec.doipMessage.DoipMessageFactory; +import org.bdware.doip.codec.doipMessage.DoipResponseCode; +import org.bdware.doip.codec.exception.DoDecodeException; +import org.bdware.doip.codec.metadata.SearchResult; +import org.bdware.doip.codec.operations.BasicOperations; +import org.bdware.doip.codec.utils.DoipGson; +import org.bdware.doip.endpoint.server.DoipServiceInfo; +import org.bdware.doip.endpoint.server.Op; +import org.bdware.doip.endpoint.server.RegistryHandlerBase; +import org.bdware.doip.proxy.DoipClientV2; +import java.io.IOException; +import java.sql.SQLOutput; +import java.util.HashMap; +import java.util.concurrent.atomic.AtomicInteger; + +public class ProxyV21Handler extends RegistryHandlerBase { + public AtomicInteger count = new AtomicInteger(0); + + public DoipMessage serverResponse; + + public ProxyV21Handler(DoipServiceInfo info) { + super(info); + } + + @Override + public DoipMessage handleHello(DoipMessage request) { + System.out.println("----- [RECEIVE] Client->Proxy Hello -----"); + + DoipMessageFactory.DoipMessageBuilder builder = new DoipMessageFactory.DoipMessageBuilder(); + DoipMessageFactory.DoipMessageBuilder resp ; + + try { + serverResponse = DoipV21Proxy.client.hello(request); + } catch (InterruptedException e) { + throw new RuntimeException(e); + } + + System.out.println("----- [SEND] Proxy->Client Hello -----"); + if(serverResponse.header.parameters.response == DoipResponseCode.Success){ + System.out.println("----- [SUCCESS] Proxy & Server Hello -----"); + resp = builder.createResponse(DoipResponseCode.Success, request); + try { + resp.setBody(serverResponse.body.getDataAsDigitalObject()); + } catch (DoDecodeException e) { + throw new RuntimeException(e); + } catch (IOException e) { + throw new RuntimeException(e); + } + }else{ + System.out.println("----- [FAIL] Proxy & Server Hello -----"); + resp = builder.createResponse(DoipResponseCode.Invalid, request); + } + resp.setRequestID(request.requestID); + count.incrementAndGet(); + DoipMessage msg = resp.create(); + + return msg; + } + + @Override + public DoipMessage handleListOps(DoipMessage request) { + // listOperations local/test + System.out.println("----- [RECEIVE] client->proxy ListOps -----"); + + DoipMessageFactory.DoipMessageBuilder builder = new DoipMessageFactory.DoipMessageBuilder(); + DoipMessageFactory.DoipMessageBuilder resp; + + try { + serverResponse = DoipV21Proxy.client.listOperations(request); + } catch (InterruptedException e) { + throw new RuntimeException(e); + } + + System.out.println("----- [SEND] Proxy->Client ListOps -----"); + + System.out.println("----- [SEND] Proxy->Client ListOps -----"); + + if(serverResponse.header.parameters.response == DoipResponseCode.Success){ + System.out.println("----- [SUCCESS] Proxy & Server ListOps -----"); + resp = builder.createResponse(DoipResponseCode.Success, request); + resp.setBody(serverResponse.body.getEncodedData()); + }else{ + System.out.println("----- [FAIL] Proxy & Server ListOps -----"); + resp = builder.createResponse(DoipResponseCode.DoNotFound, request); + } + resp.setRequestID(request.requestID); + count.incrementAndGet(); + DoipMessage msg = resp.create(); + + return msg; + } + + @Override + public synchronized DoipMessage handleCreate(DoipMessage request) { + // create local/test Document name example file /home/syw/Desktop/test.pdf + System.out.println("----- [RECEIVE] client->proxy Create -----"); + + DoipMessageFactory.DoipMessageBuilder builder = new DoipMessageFactory.DoipMessageBuilder(); + DoipMessageFactory.DoipMessageBuilder resp; + + try { + serverResponse = DoipV21Proxy.client.create(request); + } catch (InterruptedException | IOException | DoDecodeException e) { + throw new RuntimeException(e); + } + + System.out.println("----- [SEND] Proxy->Client Create -----"); + + if(serverResponse.header.parameters.response == DoipResponseCode.Success){ + System.out.println("----- [SUCCESS] Proxy & Server Create -----"); + resp = builder.createResponse(DoipResponseCode.Success, request); + try { + DigitalObject digitalObject = request.body.getDataAsDigitalObject(); + resp.setBody(digitalObject); + } catch (DoDecodeException e) { + throw new RuntimeException(e); + } catch (IOException e) { + throw new RuntimeException(e); + } + }else{ + System.out.println("----- [FAIL] Proxy & Server Create -----"); + resp = builder.createResponse(DoipResponseCode.DoAlreadyExist, request); + } + resp.setRequestID(request.requestID); + count.incrementAndGet(); + DoipMessage msg = resp.create(); + return msg; + } + + + @Override + public DoipMessage handleUpdate(DoipMessage request) { + // update local/test name test + System.out.println("----- [RECEIVE] client->proxy Update -----"); + + DoipMessageFactory.DoipMessageBuilder builder = new DoipMessageFactory.DoipMessageBuilder(); + DoipMessageFactory.DoipMessageBuilder resp; + + try { + serverResponse = DoipV21Proxy.client.update(request); + } catch (InterruptedException | IOException | DoDecodeException e) { + throw new RuntimeException(e); + } + + System.out.println("----- [SEND] Proxy->Client Update -----"); + + if(serverResponse.header.parameters.response == DoipResponseCode.Success){ + System.out.println("----- [SUCCESS] Proxy & Server Update -----"); + resp = builder.createResponse(DoipResponseCode.Success, request); + + try { + DigitalObject digitalObject = request.body.getDataAsDigitalObject(); + resp.setBody(digitalObject); + } catch (DoDecodeException e) { + throw new RuntimeException(e); + } catch (IOException e) { + throw new RuntimeException(e); + } + }else{ + System.out.println("----- [FAIL] Proxy & Server Update -----"); + resp = builder.createResponse(DoipResponseCode.DoNotFound, request); + } + resp.setRequestID(request.requestID); + count.incrementAndGet(); + DoipMessage msg = resp.create(); + return msg; + } + + @Override + public DoipMessage handleDelete(DoipMessage request) { + // delete local/test + System.out.println("----- [RECEIVE] client->proxy Delete -----"); + + DoipMessageFactory.DoipMessageBuilder builder = new DoipMessageFactory.DoipMessageBuilder(); + DoipMessageFactory.DoipMessageBuilder resp; + + try { + serverResponse = DoipV21Proxy.client.delete(request); +// System.out.println("Proxy Proxy1 Response : "+serverResponse.header.parameters.response); + } catch (InterruptedException e) { + throw new RuntimeException(e); + } + + System.out.println("----- [SEND] Proxy->Client Delete -----"); + + if(serverResponse.header.parameters.response == DoipResponseCode.Success){ + System.out.println("----- [SUCCESS] Proxy & Server Delete -----"); + resp = builder.createResponse(DoipResponseCode.Success, request); + resp.setBody(serverResponse.body.getEncodedData()); + }else{ + System.out.println("----- [FAIL] Proxy & Server Delete -----"); + resp = builder.createResponse(DoipResponseCode.DoNotFound, request); + } + resp.setRequestID(request.requestID); + count.incrementAndGet(); + DoipMessage msg = resp.create(); +// System.out.println("Proxy Proxy2 Response : "+msg.header.parameters.response); + return msg; + } + + @Override + public DoipMessage handleRetrieve(DoipMessage request) { + // retrieve local/test + System.out.println("----- [RECEIVE] client->proxy Retrieve -----"); + + DoipMessageFactory.DoipMessageBuilder builder = new DoipMessageFactory.DoipMessageBuilder(); + DoipMessageFactory.DoipMessageBuilder resp; + + try { + serverResponse = DoipV21Proxy.client.retrieve(request); + } catch (InterruptedException e) { + throw new RuntimeException(e); + } + + System.out.println("----- [SEND] Proxy->Client Retrieve -----"); + + if(serverResponse.header.parameters.response == DoipResponseCode.Success){ + System.out.println("----- [SUCCESS] Proxy & Server Retrieve -----"); + resp = builder.createResponse(DoipResponseCode.Success, request); + try { + resp.setBody(serverResponse.body.getDataAsDigitalObject()); + } catch (DoDecodeException e) { + throw new RuntimeException(e); + } catch (IOException e) { + throw new RuntimeException(e); + } + }else{ + System.out.println("----- [FAIL] Proxy & Server Retrieve -----"); + resp = builder.createResponse(DoipResponseCode.DoNotFound, request); + DigitalObject dobj = new DigitalObject("targetId", DoType.DO); + dobj.addAttribute("ResponseCode", "DoNotFound"); + resp.setBody(dobj); + } + resp.setRequestID(request.requestID); + count.incrementAndGet(); + DoipMessage msg = resp.create(); + return msg; + } + + @Override + public DoipMessage handleSearch(DoipMessage request) { + // search type:Schema local/test + System.out.println("----- [RECEIVE] client->proxy Search -----"); + + DoipMessageFactory.DoipMessageBuilder builder = new DoipMessageFactory.DoipMessageBuilder(); + DoipMessageFactory.DoipMessageBuilder resp = null; + + try { + serverResponse = DoipV21Proxy.client.search(request); + } catch (InterruptedException e) { + throw new RuntimeException(e); + } + + System.out.println("----- [SEND] Proxy->Client Search -----"); + + if(serverResponse.header.parameters.response == DoipResponseCode.Success){ + System.out.println("----- [SUCCESS] Proxy & Server Search -----"); + resp = builder.createResponse(DoipResponseCode.Success, request); + resp.setBody(serverResponse.body.getEncodedData()); + }else{ + System.out.println("----- [FAIL] Proxy & Server Search -----"); + resp = builder.createResponse(DoipResponseCode.DoNotFound, request); + DigitalObject dobj = new DigitalObject("targetId", DoType.DO); + dobj.addAttribute("ResponseCode", "DoNotFound"); + resp.setBody(dobj); + } + resp.setRequestID(request.requestID); + count.incrementAndGet(); + DoipMessage msg = resp.create(); + return msg; + } + @Op(op = BasicOperations.Extension, name="your_own_extension") + public DoipMessage handleOwnExtension(DoipMessage request) { + return null; + } +} + diff --git a/src/main/java/org/bdware/doip/proxy/ProxyV2Handler.java b/src/main/java/org/bdware/doip/proxy/ProxyV2Handler.java new file mode 100644 index 0000000000000000000000000000000000000000..a0a4e55924f4cb707b4604c60053d1a15191b9ac --- /dev/null +++ b/src/main/java/org/bdware/doip/proxy/ProxyV2Handler.java @@ -0,0 +1,329 @@ +package org.bdware.doip.proxy; + +import com.google.gson.Gson; +import com.google.gson.JsonObject; +import com.sun.org.apache.xml.internal.dtm.ref.sax2dtm.SAX2DTM2; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +import org.bdware.doip.codec.digitalObject.DigitalObject; +import org.bdware.doip.codec.digitalObject.DoType; +import org.bdware.doip.codec.doipMessage.DoipMessage; +import org.bdware.doip.codec.doipMessage.DoipMessageFactory; +import org.bdware.doip.codec.doipMessage.DoipResponseCode; +import org.bdware.doip.codec.exception.DoDecodeException; +import org.bdware.doip.codec.metadata.SearchParameter; +import org.bdware.doip.codec.operations.BasicOperations; +import org.bdware.doip.endpoint.client.DoipMessageCallback; +import org.bdware.doip.endpoint.server.DoipServiceInfo; +import org.bdware.doip.endpoint.server.Op; +import org.bdware.doip.endpoint.server.RegistryHandler; +import org.bdware.doip.endpoint.server.RepositoryHandler; + + +import java.io.IOException; +import java.nio.charset.StandardCharsets; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.concurrent.atomic.AtomicInteger; + +public class ProxyV2Handler implements RepositoryHandler, RegistryHandler { + public AtomicInteger count = new AtomicInteger(0); + public DoipServiceInfo si; + public DoipMessage serverResponse; + + + public ProxyV2Handler(DoipServiceInfo serviceInfo){ + si = serviceInfo; + } + + @Override + public DoipMessage handleHello(DoipMessage request) { + + System.out.println("----- [RECEIVE] client->proxy Hello -----"); + + DoipMessageFactory.DoipMessageBuilder builder = new DoipMessageFactory.DoipMessageBuilder(); + DoipMessageFactory.DoipMessageBuilder resp ; + + try { + serverResponse = DoipV2Proxy.client.handleHello(request); + } catch (InterruptedException e) { + throw new RuntimeException(e); + } + + System.out.println("----- [SEND] Proxy->Client Hello -----"); + if(serverResponse.header.parameters.response == DoipResponseCode.Success){ + System.out.println("----- [SUCCESS] Proxy & Server Hello -----"); + resp = builder.createResponse(DoipResponseCode.Success, request); + try { + resp.setBody(serverResponse.body.getDataAsDigitalObject()); + } catch (DoDecodeException e) { + throw new RuntimeException(e); + } catch (IOException e) { + throw new RuntimeException(e); + } + }else{ + System.out.println("----- [FAIL] Proxy & Server Hello -----"); + resp = builder.createResponse(DoipResponseCode.Invalid, request); + } + resp.setRequestID(request.requestID); + count.incrementAndGet(); + DoipMessage msg = resp.create(); + + return msg; + } + + @Override + public DoipMessage handleListOps(DoipMessage request) { + // listOperations local/test + System.out.println("----- [RECEIVE] client->proxy ListOps -----"); + + DoipMessageFactory.DoipMessageBuilder builder = new DoipMessageFactory.DoipMessageBuilder(); + DoipMessageFactory.DoipMessageBuilder resp; + + try { + serverResponse = DoipV2Proxy.client.handleListOps(request); + } catch (InterruptedException e) { + throw new RuntimeException(e); + } + + System.out.println("----- [SEND] Proxy->Client Hello -----"); + + if(serverResponse.header.parameters.response == DoipResponseCode.Success){ + System.out.println("----- [SUCCESS] Proxy & Server Hello -----"); + resp = builder.createResponse(DoipResponseCode.Success, request); + resp.setBody(serverResponse.body.getEncodedData()); + }else{ + System.out.println("----- [FAIL] Proxy & Server Hello -----"); + resp = builder.createResponse(DoipResponseCode.DoNotFound, request); + } + resp.setRequestID(request.requestID); + count.incrementAndGet(); + DoipMessage msg = resp.create(); + + return msg; + } + + @Override + public DoipMessage handleCreate(DoipMessage request) { + // create local/test Document name example file /home/syw/Desktop/test.pdf + DoipMessageFactory.DoipMessageBuilder builder = new DoipMessageFactory.DoipMessageBuilder(); + DoipMessageFactory.DoipMessageBuilder resp; + + try { + serverResponse = DoipV2Proxy.client.handleCreate(request); + } catch (InterruptedException | IOException | DoDecodeException e) { + throw new RuntimeException(e); + } + + System.out.println("----- [SEND] Proxy->Client Create -----"); + + if(serverResponse.header.parameters.response == DoipResponseCode.Success){ + System.out.println("----- [SUCCESS] Proxy & Server Create -----"); + resp = builder.createResponse(DoipResponseCode.Success, request); + try { + DigitalObject digitalObject = request.body.getDataAsDigitalObject(); + resp.setBody(digitalObject); + } catch (DoDecodeException e) { + throw new RuntimeException(e); + } catch (IOException e) { + throw new RuntimeException(e); + } + }else{ + System.out.println("----- [FAIL] Proxy & Server Create -----"); + resp = builder.createResponse(DoipResponseCode.DoAlreadyExist, request); + } + resp.setRequestID(request.requestID); + count.incrementAndGet(); + DoipMessage msg = resp.create(); + return msg; + } + + @Override + public DoipMessage handleUpdate(DoipMessage request) { + // update local/test name test + System.out.println("----- [RECEIVE] client->proxy Update -----"); + + DoipMessageFactory.DoipMessageBuilder builder = new DoipMessageFactory.DoipMessageBuilder(); + DoipMessageFactory.DoipMessageBuilder resp; + + try { + serverResponse = DoipV2Proxy.client.handleUpdate(request); + } catch (InterruptedException | IOException | DoDecodeException e) { + throw new RuntimeException(e); + } + + System.out.println("----- [SEND] Proxy->Client Update -----"); + + if(serverResponse.header.parameters.response == DoipResponseCode.Success){ + System.out.println("----- [SUCCESS] Proxy & Server Update -----"); + resp = builder.createResponse(DoipResponseCode.Success, request); + + try { + DigitalObject digitalObject = request.body.getDataAsDigitalObject(); + resp.setBody(digitalObject); + } catch (DoDecodeException e) { + throw new RuntimeException(e); + } catch (IOException e) { + throw new RuntimeException(e); + } + }else{ + System.out.println("----- [FAIL] Proxy & Server Update -----"); + resp = builder.createResponse(DoipResponseCode.DoNotFound, request); + } + resp.setRequestID(request.requestID); + count.incrementAndGet(); + DoipMessage msg = resp.create(); + return msg; + } + + @Override + public DoipMessage handleDelete(DoipMessage request) { + // delete local/test + System.out.println("----- [RECEIVE] client->proxy Delete -----"); + + DoipMessageFactory.DoipMessageBuilder builder = new DoipMessageFactory.DoipMessageBuilder(); + DoipMessageFactory.DoipMessageBuilder resp; + + try { + serverResponse = DoipV2Proxy.client.handleDelete(request); + } catch (InterruptedException e) { + throw new RuntimeException(e); + } + + System.out.println("----- [SEND] Proxy->Client Delete -----"); + + if(serverResponse.header.parameters.response == DoipResponseCode.Success){ + System.out.println("----- [SUCCESS] Proxy & Server Delete -----"); + resp = builder.createResponse(DoipResponseCode.Success, request); + resp.setBody(serverResponse.body.getEncodedData()); + }else{ + System.out.println("----- [FAIL] Proxy & Server Delete -----"); + resp = builder.createResponse(DoipResponseCode.DoNotFound, request); + } + resp.setRequestID(request.requestID); + count.incrementAndGet(); + DoipMessage msg = resp.create(); + return msg; + } + + @Override + public DoipMessage handleRetrieve(DoipMessage request) { + // retrieve local/test + System.out.println("----- [RECEIVE] client->proxy Retrieve -----"); + + DoipMessageFactory.DoipMessageBuilder builder = new DoipMessageFactory.DoipMessageBuilder(); + DoipMessageFactory.DoipMessageBuilder resp; + + try { + serverResponse = DoipV2Proxy.client.handleRetrieve(request); + } catch (InterruptedException e) { + throw new RuntimeException(e); + } + + System.out.println("----- [SEND] Proxy->Client Retrieve -----"); + + if(serverResponse.header.parameters.response == DoipResponseCode.Success){ + System.out.println("----- [SUCCESS] Proxy & Server Retrieve -----"); + resp = builder.createResponse(DoipResponseCode.Success, request); + try { + resp.setBody(serverResponse.body.getDataAsDigitalObject()); + } catch (DoDecodeException e) { + throw new RuntimeException(e); + } catch (IOException e) { + throw new RuntimeException(e); + } + }else{ + System.out.println("----- [FAIL] Proxy & Server Retrieve -----"); + resp = builder.createResponse(DoipResponseCode.DoNotFound, request); + DigitalObject dobj = new DigitalObject("targetId", DoType.DO); + dobj.addAttribute("ResponseCode", "DoNotFound"); + resp.setBody(dobj); + } + resp.setRequestID(request.requestID); + count.incrementAndGet(); + DoipMessage msg = resp.create(); + return msg; + } + + @Override + public DoipMessage handleSearch(DoipMessage request) { + // search type:Schema local/test + + DoipMessageFactory.DoipMessageBuilder builder = new DoipMessageFactory.DoipMessageBuilder(); + DoipMessageFactory.DoipMessageBuilder resp = null; + + try { + serverResponse = DoipV2Proxy.client.handleSearch(request); + } catch (InterruptedException e) { + throw new RuntimeException(e); + } + + System.out.println("----- [SEND] Proxy->Client Search -----"); + + if(serverResponse.header.parameters.response == DoipResponseCode.Success){ + System.out.println("----- [SUCCESS] Proxy & Server Search -----"); + resp = builder.createResponse(DoipResponseCode.Success, request); + resp.setBody(serverResponse.body.getEncodedData()); + }else{ + System.out.println("----- [FAIL] Proxy & Server Search -----"); + resp = builder.createResponse(DoipResponseCode.DoNotFound, request); + DigitalObject dobj = new DigitalObject("targetId", DoType.DO); + dobj.addAttribute("ResponseCode", "DoNotFound"); + resp.setBody(dobj); + } + resp.setRequestID(request.requestID); + count.incrementAndGet(); + DoipMessage msg = resp.create(); + return msg; + } + + @Op(op = BasicOperations.Extension, name="your_own_extension") + public DoipMessage handleOwnExtension(DoipMessage request) { + return null; + } + + + + public void printDoipMessage(DoipMessage msg) throws IOException, DoDecodeException { + System.out.println("----- Start to print DoipV2.0 Message -----"); + System.out.println("-- requestID : "+msg.requestID); + System.out.println("-- recipientID : "+msg.getRecipientID()); + System.out.println("----- HEADER -----"); + + System.out.println("-- IsRequest : "+msg.header.IsRequest); + System.out.println("-- flag : "+msg.header.getFlag()); + System.out.println("-- parameterLength : "+msg.header.parameterLength); + System.out.println("-- bodyLength : "+msg.header.bodyLength); + System.out.println("----- HEADER.PARAMETERS -----"); + System.out.println("---- id : "+msg.header.parameters.id); + System.out.println("---- operation : "+msg.header.parameters.operation); + System.out.println("---- response : "+msg.header.parameters.response); + System.out.println("---- attributes : "+msg.header.parameters.attributes); + System.out.println("-- isRequest : "+msg.header.isRequest()); + System.out.println("-- isCertified : "+msg.header.isCertified()); + System.out.println("-- isEncrypted : "+msg.header.isEncrypted()); + + System.out.println("----- BODY -----"); + DigitalObject dobj = msg.body.getDataAsDigitalObject(); + System.out.println("-- id : "+dobj.id); + System.out.println("-- type : "+dobj.type); + System.out.println("----- BODY.ATTRIBUTES -----"); + System.out.println("---- attributes : "+dobj.attributes); + System.out.println("----- BODY.ELEMENTS -----"); + for(int i=0;i