From b47f2f47661411aa59ea090cdae1c6c21dfe8c8d Mon Sep 17 00:00:00 2001 From: sunyiwen Date: Sun, 16 Oct 2022 20:30:01 -0700 Subject: [PATCH 1/2] protocol compatibility --- input/serverConf.json | 22 + .../java/org/bdware/doip/DoipV2Client.java | 3 +- .../java/org/bdware/doip/proxy/DoipProxy.java | 35 ++ .../org/bdware/doip/proxy/DoipV21Client.java | 529 ++++++++++++++++++ .../org/bdware/doip/proxy/DoipV21Proxy.java | 34 ++ .../org/bdware/doip/proxy/DoipV2Client.java | 4 + .../org/bdware/doip/proxy/DoipV2Proxy.java | 52 ++ .../bdware/doip/proxy/ProxyV21Handler.java | 242 ++++++++ .../org/bdware/doip/proxy/ProxyV2Handler.java | 269 +++++++++ 9 files changed, 1189 insertions(+), 1 deletion(-) create mode 100644 input/serverConf.json create mode 100644 src/main/java/org/bdware/doip/proxy/DoipV21Client.java create mode 100644 src/main/java/org/bdware/doip/proxy/DoipV21Proxy.java create mode 100644 src/main/java/org/bdware/doip/proxy/DoipV2Client.java create mode 100644 src/main/java/org/bdware/doip/proxy/DoipV2Proxy.java create mode 100644 src/main/java/org/bdware/doip/proxy/ProxyV21Handler.java create mode 100644 src/main/java/org/bdware/doip/proxy/ProxyV2Handler.java diff --git a/input/serverConf.json b/input/serverConf.json new file mode 100644 index 0000000..443537e --- /dev/null +++ b/input/serverConf.json @@ -0,0 +1,22 @@ +{ + "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" + }, + { + "url": "tls://127.0.0.1:8003", + "protocolVersion": "2.1" + } + ], + "owner": "86.5000.470/dou.TEST", + "repoType": "registry" +} \ No newline at end of file diff --git a/src/main/java/org/bdware/doip/DoipV2Client.java b/src/main/java/org/bdware/doip/DoipV2Client.java index 85f691a..1cc3910 100644 --- a/src/main/java/org/bdware/doip/DoipV2Client.java +++ b/src/main/java/org/bdware/doip/DoipV2Client.java @@ -178,7 +178,8 @@ public class DoipV2Client { public static void config() { //ClientConfig config = TLSClientConfig.getDefault("tls://127.0.0.1:8888"); System.out.println("Please enter url:"); - String url = input.nextLine(); + //String url = input.nextLine(); + String url = "tls://127.0.0.1:8888"; client = new DoipClientImpl(); config = TLSClientConfig.getDefault(url); config.protocolVersion = DOIPVersion.V2_0; diff --git a/src/main/java/org/bdware/doip/proxy/DoipProxy.java b/src/main/java/org/bdware/doip/proxy/DoipProxy.java index 974811b..2b5a0a9 100644 --- a/src/main/java/org/bdware/doip/proxy/DoipProxy.java +++ b/src/main/java/org/bdware/doip/proxy/DoipProxy.java @@ -1,4 +1,39 @@ 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.TestRepoHandler; +import org.bdware.doip.codec.DOIPVersion; +import org.bdware.doip.codec.exception.DoDecodeException; +import org.bdware.doip.endpoint.client.ClientConfig; +import org.bdware.doip.endpoint.client.DoipClientImpl; +import org.bdware.doip.endpoint.client.TLSClientConfig; +import org.bdware.doip.endpoint.server.*; +import org.junit.Test; + +import java.io.*; +import java.sql.SQLOutput; +import java.util.ArrayList; +import java.util.Scanner; +import java.util.concurrent.atomic.AtomicInteger; + +import org.bdware.doip.endpoint.server.DoipServer; +import org.bdware.doip.endpoint.server.DoipServerImpl; +import org.bdware.doip.endpoint.server.DoipServiceInfo; + +import java.io.FileNotFoundException; +import java.io.FileReader; +import java.io.Reader; + public class DoipProxy { + + Logger logger = LogManager.getLogger(org.bdware.doip.proxy.DoipProxy.class); + public static boolean flag = true; + + public static void main(String[] arg) throws FileNotFoundException { + DoipV2Proxy.start(); + DoipV21Proxy.start(); + } } diff --git a/src/main/java/org/bdware/doip/proxy/DoipV21Client.java b/src/main/java/org/bdware/doip/proxy/DoipV21Client.java new file mode 100644 index 0000000..b5d54a1 --- /dev/null +++ b/src/main/java/org/bdware/doip/proxy/DoipV21Client.java @@ -0,0 +1,529 @@ +package org.bdware.doip.proxy; + +import com.alibaba.fastjson.JSONObject; +import com.google.gson.Gson; +import org.apache.commons.io.FileUtils; +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.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 java.io.*; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Scanner; +import java.util.concurrent.atomic.AtomicInteger; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +public class DoipV21Client { + static Scanner input = new Scanner(System.in); + static String serviceID = null; + final static DoipClientImpl doipClient = new DoipClientImpl(); + static String serviceAddr = null; + static DigitalObject saveDo; + static File file; + public static List outData = new ArrayList<>(10); +// static FileHandler fh; + + public static Logger LOGGER = LogManager.getLogger(DoipV21Client.class); + public static PrintStream out = null; + public static int answer = 0; + public static boolean flag = true; + public static int logo = 0; + + public DoipV21Client(){ + + } + public void config() throws IOException { + PropertyConfigurator.configure ("log4j2.properties"); + String[] flagData = {"Number", "Function", "Result", "Details"}; // 不通过 + outData.add(flagData); + file = new File("./config/clientConf.json"); + String content = FileUtils.readFileToString(file, "UTF-8"); + JSONObject jsonObject = new JSONObject(content.isEmpty()); + serviceID = jsonObject.getString("serviceID"); + serviceAddr = jsonObject.getString("serviceAddr"); + out = new PrintStream("./log/doipClient.log"); +// System.setOut(out); + doipClient.connect(ClientConfig.fromUrl(serviceAddr)); + } + + + public void handleHelloTest() throws InterruptedException { + LOGGER.info("----- Hello Test -----"); + long start = System.currentTimeMillis(); + final AtomicInteger total = new AtomicInteger(0); + final AtomicInteger correct = new AtomicInteger(0); + int totalCount = 1; + + for (int i = 0; i < totalCount; i++) { + doipClient.hello(serviceID, new DoipMessageCallback() { + @Override + public void onResult(DoipMessage msg) { + logo++; + if (flag == false) { + String[] flagData = {logo + "", "0.DOIP/Op.Update", "NULL", "null"}; + outData.add(flagData); + } else { + if (msg.header.parameters.response != DoipResponseCode.Success) { + LOGGER.warn("----- Hello not Success -----"); + String[] flagData = {logo + "", "0.DOIP/Op.Hello", "Not Pass", msg.header.parameters.response.toString()}; // 不通过 + outData.add(flagData); + flag = false; + if (msg.header.parameters.response == DoipResponseCode.UnKnownError) { + LOGGER.error("----- Hello Time Out -----"); + } + } else { + answer++; + String[] flagData = {logo + "", "0.DOIP/Op.Hello", "Pass", msg.header.parameters.response.toString()}; // 不通过 + outData.add(flagData); + correct.incrementAndGet(); + + DigitalObject retDo; + try { + retDo = msg.body.getDataAsDigitalObject(); + LOGGER.info(new Gson().toJson(retDo)); + } catch (DoDecodeException e) { + throw new RuntimeException(e); + } catch (IOException e) { + throw new RuntimeException(e); + } + assert retDo.id.equals(serviceID); + LOGGER.info("----- Hello Assert Pass -----"); + } + } + 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); + } + + + public void handleCreateTest() throws InterruptedException { + LOGGER.info("----- Create Test -----"); + long start = System.currentTimeMillis(); + final AtomicInteger total = new AtomicInteger(0); + final AtomicInteger correct = new AtomicInteger(0); + int totalCount = 1; + DigitalObject dobj; + dobj = new DigitalObject("aibd", DoType.DO); + saveDo = dobj; + for (int i = 0; i < totalCount; i++) { + doipClient.create(serviceID, dobj, new DoipMessageCallback() { + @Override + public void onResult(DoipMessage msg) { + logo++; + if (flag == false) { + String[] flagData = {logo + "", "0.DOIP/Op.Create", "NULL", "null"}; + outData.add(flagData); + } else { + if (msg.header.parameters.response != DoipResponseCode.Success) { + LOGGER.warn("----- Create not Success -----"); + String[] flagData = {logo + "", "0.DOIP/Op.Create", "Not Pass", msg.header.parameters.response.toString()}; // 不通过 + outData.add(flagData); + flag = false; + if (msg.header.parameters.response == DoipResponseCode.UnKnownError) { + LOGGER.error("----- Create Time Out -----"); + } else if (msg.header.parameters.response == DoipResponseCode.DoAlreadyExist) { + LOGGER.warn("----- Do Already Exists -----"); + } + } else { + String[] flagData = {logo + "", "0.DOIP/Op.Create", "Pass", msg.header.parameters.response.toString()}; // 不通过 + outData.add(flagData); + answer++; + correct.incrementAndGet(); + DigitalObject retDo; + try { + //byte[] str =msg.body.encodedData; + retDo = msg.body.getDataAsDigitalObject(); + } catch (DoDecodeException e) { + throw new RuntimeException(e); + } catch (IOException e) { + throw new RuntimeException(e); + } + assert retDo != null; + LOGGER.info("----- Create Assert Pass -----"); + LOGGER.info(retDo); + } + } + 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); + } + + + public void handleListOpsTest() throws InterruptedException { + LOGGER.info("----- ListOps Test -----"); + long start = System.currentTimeMillis(); + final AtomicInteger total = new AtomicInteger(0); + final AtomicInteger correct = new AtomicInteger(0); + int totalCount = 1; + + for (int i = 0; i < totalCount; i++) { + doipClient.listOperations("aibd", new DoipMessageCallback() { + @Override + public void onResult(DoipMessage msg) { + logo++; + if (flag == false) { + String[] flagData = {logo + "", "0.DOIP/Op.ListOperations", "NULL", "null"}; + outData.add(flagData); + } else { + if (msg.header.parameters.response != DoipResponseCode.Success) { + String[] flagData = {logo + "", "0.DOIP/Op.ListOperations", "Not Pass", msg.header.parameters.response.toString()}; // 不通过 + outData.add(flagData); + flag = false; + LOGGER.warn("----- ListOperations not Success -----"); + if (msg.header.parameters.response == DoipResponseCode.UnKnownError) { + LOGGER.error("----- ListOperations Time Out -----"); + } else if (msg.header.parameters.response == DoipResponseCode.DoNotFound) { + LOGGER.error("----- Do Not Found -----"); + } + } else { + String[] flagData = {logo + "", "0.DOIP/Op.ListOperations", "Pass", msg.header.parameters.response.toString()}; // 不通过 + outData.add(flagData); + answer++; + correct.incrementAndGet(); + String Jstr; + String newJstr; + String[] listArray; + try { + Jstr = new String(msg.body.encodedData, "UTF-8"); + newJstr = Jstr.substring(1, Jstr.length() - 1); + LOGGER.info(newJstr); + listArray = newJstr.split(","); + } catch (UnsupportedEncodingException e) { + throw new RuntimeException(e); + } + assert Arrays.asList(listArray).contains("0.DOIP/Op.Create"); + assert Arrays.asList(listArray).contains("0.DOIP/Op.Retrieve"); + assert Arrays.asList(listArray).contains("0.DOIP/Op.Update"); + assert Arrays.asList(listArray).contains("0.DOIP/Op.Delete"); + assert Arrays.asList(listArray).contains("0.DOIP/Op.ListOperations"); + LOGGER.info("----- ListOps Assert Pass -----"); + } + } + 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); + } + + public void handleUpdateTest() throws InterruptedException { + LOGGER.info("----- Update Test -----"); + long start = System.currentTimeMillis(); + final AtomicInteger total = new AtomicInteger(0); + final AtomicInteger correct = new AtomicInteger(0); + int totalCount = 1; + DigitalObject dobj = new DigitalObject("aibd", DoType.DOIPServiceInfo); + dobj.addAttribute("syw", "aibd"); + saveDo = dobj; + for (int i = 0; i < totalCount; i++) { + doipClient.update(dobj, new DoipMessageCallback() { + @Override + public void onResult(DoipMessage msg) { + logo++; + if (flag == false) { + String[] flagData = {logo + "", "0.DOIP/Op.Update", "NULL", "null"}; + outData.add(flagData); + } else { + if (msg.header.parameters.response != DoipResponseCode.Success) { + String[] flagData = {logo + "", "0.DOIP/Op.Update", "Not Pass", msg.header.parameters.response.toString()}; // 不通过 + outData.add(flagData); + flag = false; + LOGGER.warn("----- Update not Success -----"); + if (msg.header.parameters.response == DoipResponseCode.UnKnownError) { + LOGGER.warn("----- Update Time Out -----"); + } else if (msg.header.parameters.response == DoipResponseCode.DoNotFound) { + LOGGER.error("----- Do Not Found -----"); + } + } else { + String[] flagData = {logo + "", "0.DOIP/Op.Update", "Pass", msg.header.parameters.response.toString()}; // 不通过 + outData.add(flagData); + answer++; + correct.incrementAndGet(); + DigitalObject retDo; + String jsonRetDo; + try { + //byte[] str =msg.body.encodedData; + retDo = msg.body.getDataAsDigitalObject(); + jsonRetDo = new Gson().toJson(retDo); + LOGGER.info(new Gson().toJson(retDo)); + } catch (DoDecodeException e) { + throw new RuntimeException(e); + } catch (IOException e) { + throw new RuntimeException(e); + } + assert saveDo.equals(retDo); + LOGGER.info("----- Update Assert Pass -----"); + } + } + 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); + } + + + public void handleRetrieveTest() throws InterruptedException { + LOGGER.info("----- Retrieve Test -----"); + long start = System.currentTimeMillis(); + final AtomicInteger total = new AtomicInteger(0); + final AtomicInteger correct = new AtomicInteger(0); + int totalCount = 1; + + for (int i = 0; i < totalCount; i++) { + doipClient.retrieve("aibd", null, false, new DoipMessageCallback() { + @Override + public void onResult(DoipMessage msg) { + logo++; + if (flag == false) { + String[] flagData = {logo + "", "0.DOIP/Op.Retrieve", "NULL", "null"}; + outData.add(flagData); + } else { + if (msg.header.parameters.response != DoipResponseCode.Success) { + String[] flagData = {logo + "", "0.DOIP/Op.Retrieve", "Not Pass", msg.header.parameters.response.toString()}; // 不通过 + outData.add(flagData); + flag = false; + LOGGER.warn("----- Retrieve not Success -----"); + if (msg.header.parameters.response == DoipResponseCode.UnKnownError) { + LOGGER.error("----- Retrieve Time Out -----"); + } else if (msg.header.parameters.response == DoipResponseCode.DoNotFound) { + LOGGER.error("----- Do Not Found -----"); + } + } else { + String[] flagData = {logo + "", "0.DOIP/Op.Retrieve", "Pass", msg.header.parameters.response.toString()}; // 不通过 + outData.add(flagData); + answer++; + correct.incrementAndGet(); + + DigitalObject retDo; + try { + retDo = msg.body.getDataAsDigitalObject(); + assert retDo.id.toString() == "aibd"; + assert saveDo.equals(retDo); + LOGGER.info("----- Retrieve Assert Pass -----"); + LOGGER.info(retDo.toString()); + } catch (DoDecodeException e) { + throw new RuntimeException(e); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + } + 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); + } + + public void handleSearchTest() throws InterruptedException { + LOGGER.info("----- Search Test -----"); + long start = System.currentTimeMillis(); + final AtomicInteger total = new AtomicInteger(0); + final AtomicInteger correct = new AtomicInteger(0); + int totalCount = 1; + String query = "aibd"; + SearchParameter sp = new SearchParameter(query, 10, 0, "", "DO"); + sp.query = query; + for (int i = 0; i < totalCount; i++) { + doipClient.search(query, sp, new DoipMessageCallback() { + @Override + public void onResult(DoipMessage msg) { + logo++; + if (flag == false) { + String[] flagData = {logo + "", "0.DOIP/Op.Search", "NULL", "null"}; + outData.add(flagData); + } else { + if (msg.header.parameters.response != DoipResponseCode.Success) { + String[] flagData = {logo + "", "0.DOIP/Op.Search", "Not Pass", msg.header.parameters.response.toString()}; // 不通过 + outData.add(flagData); + flag = false; + LOGGER.warn("----- Search not Success -----"); + if (msg.header.parameters.response == DoipResponseCode.UnKnownError) { + LOGGER.error("----- Search Time Out -----"); + } else if (msg.header.parameters.response == DoipResponseCode.DoNotFound) { + LOGGER.error("----- Do Not Found -----"); + } + } else { + String[] flagData = {logo + "", "0.DOIP/Op.Search", "Pass", msg.header.parameters.response.toString()}; // 不通过 + outData.add(flagData); + answer++; + correct.incrementAndGet(); + DigitalObject retDo; + try { + String s_new = new String(msg.body.encodedData, "UTF-8"); + LOGGER.info("Search Result : " + s_new); + LOGGER.info("----- Search Assert Pass -----"); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + } + 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); + } + + public void handleDeleteTest() throws InterruptedException { + LOGGER.info("----- Delete Test -----"); + long start = System.currentTimeMillis(); + final AtomicInteger total = new AtomicInteger(0); + final AtomicInteger correct = new AtomicInteger(0); + int totalCount = 1; + + for (int i = 0; i < totalCount; i++) { + doipClient.delete("aibd", new DoipMessageCallback() { + @Override + public void onResult(DoipMessage msg) { + logo++; + if (flag == false) { + String[] flagData = {logo + "", "0.DOIP/Op.Delete", "NULL", "null"}; + outData.add(flagData); + } else { + if (msg.header.parameters.response != DoipResponseCode.Success) { + LOGGER.warn("----- Delete not Success -----"); + String[] flagData = {logo + "", "0.DOIP/Op.Delete", "Not Pass", msg.header.parameters.response.toString()}; // 不通过 + outData.add(flagData); + flag = false; + if (msg.header.parameters.response == DoipResponseCode.UnKnownError) { + LOGGER.error("----- Delete Time Out -----"); + } else if (msg.header.parameters.response == DoipResponseCode.DoNotFound) { + LOGGER.error("----- Do Not Found -----"); + } + } else { + String[] flagData = {logo + "", "0.DOIP/Op.Delete", "Pass", msg.header.parameters.response.toString()}; // 不通过 + outData.add(flagData); + answer++; + correct.incrementAndGet(); + //LOGGER.info("Retrieved:" + str + //+ " respCode:" + msg.header.parameters.response); + + if (msg.header.parameters.response.toString() == "Success") { + assert msg.header.parameters.response.toString() == "Success"; + } else { + assert msg.header.parameters.response == DoipResponseCode.DoNotFound; + } + LOGGER.info("----- Delete Assert Pass -----"); + } + } + 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); + } + public String escapeSpecialCharacters(String data) { + String escapedData = data.replaceAll("\\R", " "); + if (data.contains(",") || data.contains("\"") || data.contains("'")) { + data = data.replace("\"", "\"\""); + escapedData = "\"" + data + "\""; + } + return escapedData; + } + + public String convertToCSV(String[] data) { + return Stream.of(data) + .map(this::escapeSpecialCharacters) + .collect(Collectors.joining(",")); + } + public void wirterCsv(String csvFileName, List data) + throws FileNotFoundException, UnsupportedEncodingException { + File csvOutputFile = new File(csvFileName); + try (PrintWriter pw = new PrintWriter(csvOutputFile, "GBK")) { + data.stream() + .map(this::convertToCSV) + .forEach(pw::println); + } + } + + public void checkTest() throws FileNotFoundException, UnsupportedEncodingException { + wirterCsv("./log/IntegratyTest.csv",outData); + if(answer == 8){ + LOGGER.info("----- All Integration Tests Pass! -----"); + }else{ + LOGGER.info("----- Not Pass , Please Check! -----"); + } + } +} + + 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 0000000..f8d517c --- /dev/null +++ b/src/main/java/org/bdware/doip/proxy/DoipV21Proxy.java @@ -0,0 +1,34 @@ +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.io.FileNotFoundException; +import java.io.FileReader; +import java.io.Reader; + +public class DoipV21Proxy { + 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()); + + int si = v21serviceInfo.listenerInfos.size(); + while( si > 0 ){ + System.out.println("Listener"+si+" : "+ v21serviceInfo.listenerInfos.get(si - 1).url); + si--; + } + + DoipServer server1 = new DoipServerImpl(v21serviceInfo); + server1.setRepositoryHandler(new ProxyV21Handler(v21serviceInfo)); + + server1.start(); + } +} + diff --git a/src/main/java/org/bdware/doip/proxy/DoipV2Client.java b/src/main/java/org/bdware/doip/proxy/DoipV2Client.java new file mode 100644 index 0000000..60ee2b2 --- /dev/null +++ b/src/main/java/org/bdware/doip/proxy/DoipV2Client.java @@ -0,0 +1,4 @@ +package org.bdware.doip.proxy; + +public class DoipV2Client { +} 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 0000000..2c1947b --- /dev/null +++ b/src/main/java/org/bdware/doip/proxy/DoipV2Proxy.java @@ -0,0 +1,52 @@ +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.FileNotFoundException; +import java.util.ArrayList; +import java.util.Scanner; +import java.util.concurrent.atomic.AtomicInteger; + +public class DoipV2Proxy { + Logger logger = LogManager.getLogger(org.bdware.doip.proxy.DoipProxy.class); + public static boolean flag = true; + + public static void start() throws FileNotFoundException { + + String certPath = "./input/keys/cacert.pem"; + String skPath = "./input/keys/privkey_pkcs8.pem"; + Scanner input = new Scanner(System.in); + + + System.out.println("Please enter DoipV2.0 url:"); + //String v2url = input.nextLine(); + String v2url = "tls://127.0.0.1:8888"; +// TLSListenerInfo listenerConfig = new TLSListenerInfo( +// "tls://127.0.0.1:8889",DOIPVersion.V2_0,new File(certPath),new File(skPath) +// ); + TLSListenerInfo v2listenerConfig = new TLSListenerInfo( + v2url, DOIPVersion.V2_0, new File(certPath), new File(skPath) + ); + + ArrayList v2listenerConfigs = new ArrayList<>(); + v2listenerConfigs.add(v2listenerConfig); + + DoipServiceInfo v2serviceInfo = new DoipServiceInfo( + "local/compatibilityTest", "test", "repository", v2listenerConfigs + ); + + + // v2.0 SERVER + DoipServer server2 = DoipServerImpl.createDoipServer(v2serviceInfo); + + final AtomicInteger count = new AtomicInteger(0); + ProxyV2Handler v2handler = new ProxyV2Handler(v2serviceInfo); + v2handler.count = count; + server2.setRepositoryHandler(v2handler); + server2.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 0000000..77585be --- /dev/null +++ b/src/main/java/org/bdware/doip/proxy/ProxyV21Handler.java @@ -0,0 +1,242 @@ +package org.bdware.doip.proxy; + +//import io.netty.channel.ChannelHandler; +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.Element; +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.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 java.io.IOException; +import java.util.HashMap; + + +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.Element; +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.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 java.io.IOException; +import java.util.HashMap; + +public class ProxyV21Handler extends RegistryHandlerBase { + static Logger LOGGER = LogManager.getLogger(ProxyV21Handler.class); + + static HashMap digitalObjectHashMap = new HashMap<>(); + + public ProxyV21Handler(DoipServiceInfo serviceInfo){ + super(serviceInfo); + } + + @Override + public DoipMessage handleHello(DoipMessage request) { + try { + System.out.println("----- Print Request Hello -----"); + printDoipMessage(request); + } catch (IOException e) { + throw new RuntimeException(e); + } catch (DoDecodeException e) { + throw new RuntimeException(e); + } + LOGGER.info(" handleHello "); + if(request.header.parameters.id.equals(serviceInfo.id)) + return replyDoipServiceInfo(request); + return replyStringWithStatus(request,"serviceID do not match", DoipResponseCode.Declined); + } + + @Override + public DoipMessage handleListOps(DoipMessage request) { + LOGGER.info(" handleListOps "); + return replyAllOperations(request); + } + + @Override + public synchronized DoipMessage handleCreate(DoipMessage request) { + LOGGER.info(" handleCreate "); + if(request.header.parameters.id.equals(serviceInfo.id)){ + DigitalObject digitalObject = null; + try { + digitalObject = request.body.getDataAsDigitalObject(); + } catch (DoDecodeException e) { + throw new RuntimeException(e); + } catch (IOException e) { + throw new RuntimeException(e); + } + if(digitalObjectHashMap.containsKey(digitalObject.id)){ + return replyStringWithStatus(request,"DO already exist", DoipResponseCode.DoAlreadyExist); + }else{ + try { + if(digitalObject.id == null || digitalObject.id.equals("")){ + digitalObject.id = generateID(); + } + digitalObjectHashMap.put(digitalObject.id,digitalObject); + DigitalObject retDO = new DigitalObject(digitalObject.id,digitalObject.type); + retDO.attributes = digitalObject.attributes; + return replyDO(request,retDO); + } catch (Exception e) { + return replyStringWithStatus(request,"can not get DO from message body", DoipResponseCode.Invalid); + } + } + }else{ + return replyStringWithStatus(request,"serviceID do not match", DoipResponseCode.Declined); + } + } + + private String generateID() { + String prefix = serviceInfo.id.split("/")[0]; + String suffix = "/do."+ digitalObjectHashMap.size(); + return prefix+suffix; + } + + @Override + public DoipMessage handleUpdate(DoipMessage request) { + LOGGER.info(" handleUpdate "); + String targetId = request.header.parameters.id; + if(!digitalObjectHashMap.containsKey(targetId)) { + return replyStringWithStatus(request,"do not found",DoipResponseCode.DoNotFound); + } + try { + DigitalObject digitalObject = request.body.getDataAsDigitalObject(); + if(!digitalObject.id.equals(targetId)){ + return replyStringWithStatus(request,"DO ID not match",DoipResponseCode.Invalid); + } + digitalObjectHashMap.put(digitalObject.id,digitalObject); + DigitalObject retDO = new DigitalObject(digitalObject.id,digitalObject.type); + retDO.attributes = digitalObject.attributes; + return replyDO(request,retDO); + }catch (Exception e){ + return replyStringWithStatus(request,"can not get DO from message body", DoipResponseCode.Invalid); + } + } + + @Override + public DoipMessage handleDelete(DoipMessage request) { + LOGGER.info(" handleDelete "); + String targetId = request.header.parameters.id; + if(!digitalObjectHashMap.containsKey(targetId)) { + return replyStringWithStatus(request,"do not found",DoipResponseCode.DoNotFound); + } + digitalObjectHashMap.remove(targetId); + return replyString(request,"success"); + } + + @Override + public DoipMessage handleRetrieve(DoipMessage request) { + LOGGER.info(" handleRetrieve "); + String targetId = request.header.parameters.id; + if(!digitalObjectHashMap.containsKey(targetId)) { + return replyStringWithStatus(request,"do not found",DoipResponseCode.DoNotFound); + } + DigitalObject digitalObject = digitalObjectHashMap.get(targetId); + + if(request.header.parameters == null || request.header.parameters.attributes == null){ + DigitalObject retDO = new DigitalObject(digitalObject.id,digitalObject.type); + retDO.attributes = digitalObject.attributes; + return replyDO(request,retDO); + } + + //request DO include element data + if(request.header.parameters.attributes.has("includeElementData")) + return replyDO(request, digitalObject); + //request target element + else if(request.header.parameters.attributes.has("element")){ + String elementID = request.header.parameters.attributes.get("element").getAsString(); + for (Element e:digitalObject.elements) { + if(e.id.equals(elementID)) return replyBytes(request,e.getData()); + } + return replyStringWithStatus(request,"element not found",DoipResponseCode.DoNotFound); + } + //request DO without element data + else{ + DigitalObject retDO = new DigitalObject(digitalObject.id,digitalObject.type); + retDO.attributes = digitalObject.attributes; + return replyDO(request,retDO); + } + } + + @Override + public DoipMessage handleSearch(DoipMessage request) { + LOGGER.info(" handleSearch "); + if(request.header.parameters == null || request.header.parameters.attributes == null || request.header.parameters.attributes.get("query") == null){ + LOGGER.info("invalid search request: attributes not found"); + return replyStringWithStatus(request, "invalid search request: attributes not found.", DoipResponseCode.Invalid); + } +// SearchParameter sp = new SearchParameter(request.header.parameters.attributes.get("query").getAsString(), +// !request.header.parameters.attributes.has("pageNum")?0:request.header.parameters.attributes.get("pageNum").getAsInt(), +// !request.header.parameters.attributes.has("pageSize")?0:request.header.parameters.attributes.get("pageSize").getAsInt(), +// !request.header.parameters.attributes.has("sortFields")?"":request.header.parameters.attributes.get("sortFields").getAsString(), +// !request.header.parameters.attributes.has("type")?null:request.header.parameters.attributes.get("type").getAsString()); + + //only support query by id + DigitalObject digitalObject = digitalObjectHashMap.get(request.header.parameters.attributes.get("query").getAsString()); + DigitalObject retDO = new DigitalObject(digitalObject.id,digitalObject.type); + retDO.attributes = digitalObject.attributes; + SearchResult sr = new SearchResult(); + sr.addItem(retDO); + return replyString(request, DoipGson.getDoipGson().toJson(sr)); + } + + @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.1 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 digitalObjectHashMap = new HashMap<>(); + public DoipServiceInfo si; + + public ProxyV2Handler(DoipServiceInfo serviceInfo){ + si = serviceInfo; + } + + @Override + public DoipMessage handleHello(DoipMessage request) { + try { + System.out.println("----- Print Reuquest Hello -----"); + printDoipMessage(request); + } catch (IOException e) { + throw new RuntimeException(e); + } catch (DoDecodeException e) { + throw new RuntimeException(e); + } + LOGGER.info(" handleHello "); + DoipMessageFactory.DoipMessageBuilder builder = new DoipMessageFactory.DoipMessageBuilder(); + DoipMessageFactory.DoipMessageBuilder resp; + if (request.header.parameters.id.equals(si.id)) { + resp = builder.createResponse(DoipResponseCode.Success, request); + resp.setBody(si.toDigitalObject()); + } else { + resp = builder.createResponse(DoipResponseCode.Invalid, request); + } + resp.setRequestID(request.requestID); + count.incrementAndGet(); + DoipMessage msg = resp.create(); + assert msg.requestID == request.requestID; + System.out.println("----- Print Resonse Hello -----"); + return msg; + } + + @Override + public DoipMessage handleListOps(DoipMessage request) { + LOGGER.info(" handleListOps "); + DoipMessageFactory.DoipMessageBuilder builder = new DoipMessageFactory.DoipMessageBuilder(); + DoipMessageFactory.DoipMessageBuilder resp; + String targetId = request.header.parameters.id; + if (digitalObjectHashMap.containsKey(targetId)) { + resp = builder.createResponse(DoipResponseCode.Success, request); + List operationIds = new ArrayList<>(); + operationIds.add("0.DOIP/Op.Hello"); + operationIds.add("0.DOIP/Op.Create"); + operationIds.add("0.DOIP/Op.Retrieve"); + operationIds.add("0.DOIP/Op.Update"); + operationIds.add("0.DOIP/Op.Delete"); + operationIds.add("0.DOIP/Op.Search"); + operationIds.add("0.DOIP/Op.ListOperations"); + + resp.setBody(new Gson().toJson(operationIds).getBytes(StandardCharsets.UTF_8)); + + } else { + resp = builder.createResponse(DoipResponseCode.DoNotFound, request); + } + resp.setRequestID(request.requestID); + count.incrementAndGet(); + DoipMessage msg = resp.create(); + assert msg.requestID == request.requestID; + return msg; + } + + @Override + public DoipMessage handleCreate(DoipMessage request) { + LOGGER.info(" handleCreate "); + DoipMessageFactory.DoipMessageBuilder builder = new DoipMessageFactory.DoipMessageBuilder(); + DoipMessageFactory.DoipMessageBuilder resp; + String targetId ; + try { + targetId = request.body.getDataAsDigitalObject().id; + if (digitalObjectHashMap.containsKey(targetId)) { + resp = builder.createResponse(DoipResponseCode.DoAlreadyExist, request); + } else { + resp = builder.createResponse(DoipResponseCode.Success, request); + DigitalObject digitalObject = request.body.getDataAsDigitalObject(); + resp.setBody(digitalObject); + digitalObjectHashMap.put(targetId, digitalObject); + } + resp.setRequestID(request.requestID); + count.incrementAndGet(); + DoipMessage msg = resp.create(); + assert msg.requestID == request.requestID; + return msg; + } catch (DoDecodeException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } + return null; + } + + @Override + public DoipMessage handleUpdate(DoipMessage request) { + LOGGER.info(" handleUpdate "); + LOGGER.info(new Gson().toJson(request)); + DoipMessageFactory.DoipMessageBuilder builder = new DoipMessageFactory.DoipMessageBuilder(); + DoipMessageFactory.DoipMessageBuilder resp; + String targetId = request.header.parameters.id; + if (!digitalObjectHashMap.containsKey(targetId)) { + resp = builder.createResponse(DoipResponseCode.DoNotFound, request); + } else { + resp = builder.createResponse(DoipResponseCode.Success, request); + DigitalObject digitalObject = null; + try { + digitalObject = request.body.getDataAsDigitalObject(); + } catch (DoDecodeException e) { + throw new RuntimeException(e); + } catch (IOException e) { + throw new RuntimeException(e); + } + resp.setBody(digitalObject); + digitalObjectHashMap.replace(targetId, digitalObject); + } + resp.setRequestID(request.requestID); + count.incrementAndGet(); + DoipMessage msg = resp.create(); + assert msg.requestID == request.requestID; + return msg; + } + + @Override + public DoipMessage handleDelete(DoipMessage request) { + LOGGER.info(" handleDelete "); + DoipMessageFactory.DoipMessageBuilder builder = new DoipMessageFactory.DoipMessageBuilder(); + DoipMessageFactory.DoipMessageBuilder resp; + String targetId = request.header.parameters.id; + if (!digitalObjectHashMap.keySet().contains(targetId)) { + resp = builder.createResponse(DoipResponseCode.DoNotFound, request); + } else { + resp = builder.createResponse(DoipResponseCode.Success, request); + resp.setBody(digitalObjectHashMap.get(targetId)); + digitalObjectHashMap.remove(targetId); + } + resp.setRequestID(request.requestID); + count.incrementAndGet(); + DoipMessage msg = resp.create(); + assert msg.requestID == request.requestID; + return msg; + } + + @Override + public DoipMessage handleRetrieve(DoipMessage request) { + LOGGER.info(" handleRetrieve "); + DoipMessageFactory.DoipMessageBuilder builder = new DoipMessageFactory.DoipMessageBuilder(); + DoipMessageFactory.DoipMessageBuilder resp; + String targetId = request.header.parameters.id; + if (!digitalObjectHashMap.containsKey(targetId)) { + resp = builder.createResponse(DoipResponseCode.DoNotFound, request); + DigitalObject dobj = new DigitalObject("targetId", DoType.DO); + dobj.addAttribute("ResponseCode", "DoNotFound"); + resp.setBody(dobj); + } else { + resp = builder.createResponse(DoipResponseCode.Success, request); + resp.setBody(digitalObjectHashMap.get(targetId)); + } + resp.setRequestID(request.requestID); + count.incrementAndGet(); + DoipMessage msg = resp.create(); + assert msg.requestID == request.requestID; + return msg; + } + + @Override + public DoipMessage handleSearch(DoipMessage request) { + DoipMessageFactory.DoipMessageBuilder builder = new DoipMessageFactory.DoipMessageBuilder(); + DoipMessageFactory.DoipMessageBuilder resp = null; + String targetId = request.header.parameters.id; + if (digitalObjectHashMap.containsKey(targetId)) { + JsonObject result = new JsonObject(); + List digitalObjectArrayList = new ArrayList<>(); + for (int i = 0; i < 20; i++) { + DigitalObject digitalObject = new DigitalObject("number_" + i, DoType.DO); + digitalObjectArrayList.add(digitalObject); + } + result.addProperty("size", 0); + result.add("results", new Gson().toJsonTree(digitalObjectArrayList)); + resp = builder.createResponse(DoipResponseCode.Success, request); + resp.setBody(new Gson().toJson(result).getBytes(StandardCharsets.UTF_8)); + } else { + 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(); + assert msg.requestID == request.requestID; + 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 Date: Thu, 20 Oct 2022 19:21:18 -0700 Subject: [PATCH 2/2] proxy finish --- input/clientConf.json | 4 + input/serverConf.json | 4 - log/IntegratyTest.csv | 10 + .../java/org/bdware/doip/DoipV2Client.java | 163 ++++-- .../java/org/bdware/doip/DoipV2Server.java | 8 +- .../bdware/doip/proxy/DoipClientImpl2.java | 206 +++++++ .../org/bdware/doip/proxy/DoipClientV2.java | 284 ++++++++++ .../org/bdware/doip/proxy/DoipClientV21.java | 325 +++++++++++ .../java/org/bdware/doip/proxy/DoipProxy.java | 39 -- .../org/bdware/doip/proxy/DoipProxyMain.java | 17 + .../org/bdware/doip/proxy/DoipV21Client.java | 529 ------------------ .../org/bdware/doip/proxy/DoipV21Proxy.java | 19 +- .../org/bdware/doip/proxy/DoipV2Client.java | 4 - .../org/bdware/doip/proxy/DoipV2Proxy.java | 36 +- .../bdware/doip/proxy/ProxyV21Handler.java | 373 ++++++------ .../org/bdware/doip/proxy/ProxyV2Handler.java | 238 +++++--- 16 files changed, 1360 insertions(+), 899 deletions(-) create mode 100644 input/clientConf.json create mode 100644 log/IntegratyTest.csv create mode 100644 src/main/java/org/bdware/doip/proxy/DoipClientImpl2.java create mode 100644 src/main/java/org/bdware/doip/proxy/DoipClientV2.java create mode 100644 src/main/java/org/bdware/doip/proxy/DoipClientV21.java delete mode 100644 src/main/java/org/bdware/doip/proxy/DoipProxy.java create mode 100644 src/main/java/org/bdware/doip/proxy/DoipProxyMain.java delete mode 100644 src/main/java/org/bdware/doip/proxy/DoipV21Client.java delete mode 100644 src/main/java/org/bdware/doip/proxy/DoipV2Client.java diff --git a/input/clientConf.json b/input/clientConf.json new file mode 100644 index 0000000..68d3890 --- /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 index 443537e..9489ee6 100644 --- a/input/serverConf.json +++ b/input/serverConf.json @@ -11,10 +11,6 @@ { "url": "udp://127.0.0.1:8002", "protocolVersion": "2.1" - }, - { - "url": "tls://127.0.0.1:8003", - "protocolVersion": "2.1" } ], "owner": "86.5000.470/dou.TEST", diff --git a/log/IntegratyTest.csv b/log/IntegratyTest.csv new file mode 100644 index 0000000..45f04b1 --- /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 1cc3910..2488a50 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,39 +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(); String url = "tls://127.0.0.1:8888"; - client = new DoipClientImpl(); + + 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 { @@ -217,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())); }); @@ -225,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; @@ -262,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(); @@ -294,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 { @@ -360,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 32b2671..ad21ad7 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 0000000..dd59a46 --- /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 0000000..5743116 --- /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 0000000..94e0aef --- /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 2b5a0a9..0000000 --- a/src/main/java/org/bdware/doip/proxy/DoipProxy.java +++ /dev/null @@ -1,39 +0,0 @@ -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.TestRepoHandler; -import org.bdware.doip.codec.DOIPVersion; -import org.bdware.doip.codec.exception.DoDecodeException; -import org.bdware.doip.endpoint.client.ClientConfig; -import org.bdware.doip.endpoint.client.DoipClientImpl; -import org.bdware.doip.endpoint.client.TLSClientConfig; -import org.bdware.doip.endpoint.server.*; -import org.junit.Test; - -import java.io.*; -import java.sql.SQLOutput; -import java.util.ArrayList; -import java.util.Scanner; -import java.util.concurrent.atomic.AtomicInteger; - -import org.bdware.doip.endpoint.server.DoipServer; -import org.bdware.doip.endpoint.server.DoipServerImpl; -import org.bdware.doip.endpoint.server.DoipServiceInfo; - -import java.io.FileNotFoundException; -import java.io.FileReader; -import java.io.Reader; - -public class DoipProxy { - - Logger logger = LogManager.getLogger(org.bdware.doip.proxy.DoipProxy.class); - public static boolean flag = true; - - public static void main(String[] arg) throws FileNotFoundException { - DoipV2Proxy.start(); - DoipV21Proxy.start(); - } -} 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 0000000..8a4eaf5 --- /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/DoipV21Client.java b/src/main/java/org/bdware/doip/proxy/DoipV21Client.java deleted file mode 100644 index b5d54a1..0000000 --- a/src/main/java/org/bdware/doip/proxy/DoipV21Client.java +++ /dev/null @@ -1,529 +0,0 @@ -package org.bdware.doip.proxy; - -import com.alibaba.fastjson.JSONObject; -import com.google.gson.Gson; -import org.apache.commons.io.FileUtils; -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.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 java.io.*; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import java.util.Scanner; -import java.util.concurrent.atomic.AtomicInteger; -import java.util.stream.Collectors; -import java.util.stream.Stream; - -public class DoipV21Client { - static Scanner input = new Scanner(System.in); - static String serviceID = null; - final static DoipClientImpl doipClient = new DoipClientImpl(); - static String serviceAddr = null; - static DigitalObject saveDo; - static File file; - public static List outData = new ArrayList<>(10); -// static FileHandler fh; - - public static Logger LOGGER = LogManager.getLogger(DoipV21Client.class); - public static PrintStream out = null; - public static int answer = 0; - public static boolean flag = true; - public static int logo = 0; - - public DoipV21Client(){ - - } - public void config() throws IOException { - PropertyConfigurator.configure ("log4j2.properties"); - String[] flagData = {"Number", "Function", "Result", "Details"}; // 不通过 - outData.add(flagData); - file = new File("./config/clientConf.json"); - String content = FileUtils.readFileToString(file, "UTF-8"); - JSONObject jsonObject = new JSONObject(content.isEmpty()); - serviceID = jsonObject.getString("serviceID"); - serviceAddr = jsonObject.getString("serviceAddr"); - out = new PrintStream("./log/doipClient.log"); -// System.setOut(out); - doipClient.connect(ClientConfig.fromUrl(serviceAddr)); - } - - - public void handleHelloTest() throws InterruptedException { - LOGGER.info("----- Hello Test -----"); - long start = System.currentTimeMillis(); - final AtomicInteger total = new AtomicInteger(0); - final AtomicInteger correct = new AtomicInteger(0); - int totalCount = 1; - - for (int i = 0; i < totalCount; i++) { - doipClient.hello(serviceID, new DoipMessageCallback() { - @Override - public void onResult(DoipMessage msg) { - logo++; - if (flag == false) { - String[] flagData = {logo + "", "0.DOIP/Op.Update", "NULL", "null"}; - outData.add(flagData); - } else { - if (msg.header.parameters.response != DoipResponseCode.Success) { - LOGGER.warn("----- Hello not Success -----"); - String[] flagData = {logo + "", "0.DOIP/Op.Hello", "Not Pass", msg.header.parameters.response.toString()}; // 不通过 - outData.add(flagData); - flag = false; - if (msg.header.parameters.response == DoipResponseCode.UnKnownError) { - LOGGER.error("----- Hello Time Out -----"); - } - } else { - answer++; - String[] flagData = {logo + "", "0.DOIP/Op.Hello", "Pass", msg.header.parameters.response.toString()}; // 不通过 - outData.add(flagData); - correct.incrementAndGet(); - - DigitalObject retDo; - try { - retDo = msg.body.getDataAsDigitalObject(); - LOGGER.info(new Gson().toJson(retDo)); - } catch (DoDecodeException e) { - throw new RuntimeException(e); - } catch (IOException e) { - throw new RuntimeException(e); - } - assert retDo.id.equals(serviceID); - LOGGER.info("----- Hello Assert Pass -----"); - } - } - 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); - } - - - public void handleCreateTest() throws InterruptedException { - LOGGER.info("----- Create Test -----"); - long start = System.currentTimeMillis(); - final AtomicInteger total = new AtomicInteger(0); - final AtomicInteger correct = new AtomicInteger(0); - int totalCount = 1; - DigitalObject dobj; - dobj = new DigitalObject("aibd", DoType.DO); - saveDo = dobj; - for (int i = 0; i < totalCount; i++) { - doipClient.create(serviceID, dobj, new DoipMessageCallback() { - @Override - public void onResult(DoipMessage msg) { - logo++; - if (flag == false) { - String[] flagData = {logo + "", "0.DOIP/Op.Create", "NULL", "null"}; - outData.add(flagData); - } else { - if (msg.header.parameters.response != DoipResponseCode.Success) { - LOGGER.warn("----- Create not Success -----"); - String[] flagData = {logo + "", "0.DOIP/Op.Create", "Not Pass", msg.header.parameters.response.toString()}; // 不通过 - outData.add(flagData); - flag = false; - if (msg.header.parameters.response == DoipResponseCode.UnKnownError) { - LOGGER.error("----- Create Time Out -----"); - } else if (msg.header.parameters.response == DoipResponseCode.DoAlreadyExist) { - LOGGER.warn("----- Do Already Exists -----"); - } - } else { - String[] flagData = {logo + "", "0.DOIP/Op.Create", "Pass", msg.header.parameters.response.toString()}; // 不通过 - outData.add(flagData); - answer++; - correct.incrementAndGet(); - DigitalObject retDo; - try { - //byte[] str =msg.body.encodedData; - retDo = msg.body.getDataAsDigitalObject(); - } catch (DoDecodeException e) { - throw new RuntimeException(e); - } catch (IOException e) { - throw new RuntimeException(e); - } - assert retDo != null; - LOGGER.info("----- Create Assert Pass -----"); - LOGGER.info(retDo); - } - } - 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); - } - - - public void handleListOpsTest() throws InterruptedException { - LOGGER.info("----- ListOps Test -----"); - long start = System.currentTimeMillis(); - final AtomicInteger total = new AtomicInteger(0); - final AtomicInteger correct = new AtomicInteger(0); - int totalCount = 1; - - for (int i = 0; i < totalCount; i++) { - doipClient.listOperations("aibd", new DoipMessageCallback() { - @Override - public void onResult(DoipMessage msg) { - logo++; - if (flag == false) { - String[] flagData = {logo + "", "0.DOIP/Op.ListOperations", "NULL", "null"}; - outData.add(flagData); - } else { - if (msg.header.parameters.response != DoipResponseCode.Success) { - String[] flagData = {logo + "", "0.DOIP/Op.ListOperations", "Not Pass", msg.header.parameters.response.toString()}; // 不通过 - outData.add(flagData); - flag = false; - LOGGER.warn("----- ListOperations not Success -----"); - if (msg.header.parameters.response == DoipResponseCode.UnKnownError) { - LOGGER.error("----- ListOperations Time Out -----"); - } else if (msg.header.parameters.response == DoipResponseCode.DoNotFound) { - LOGGER.error("----- Do Not Found -----"); - } - } else { - String[] flagData = {logo + "", "0.DOIP/Op.ListOperations", "Pass", msg.header.parameters.response.toString()}; // 不通过 - outData.add(flagData); - answer++; - correct.incrementAndGet(); - String Jstr; - String newJstr; - String[] listArray; - try { - Jstr = new String(msg.body.encodedData, "UTF-8"); - newJstr = Jstr.substring(1, Jstr.length() - 1); - LOGGER.info(newJstr); - listArray = newJstr.split(","); - } catch (UnsupportedEncodingException e) { - throw new RuntimeException(e); - } - assert Arrays.asList(listArray).contains("0.DOIP/Op.Create"); - assert Arrays.asList(listArray).contains("0.DOIP/Op.Retrieve"); - assert Arrays.asList(listArray).contains("0.DOIP/Op.Update"); - assert Arrays.asList(listArray).contains("0.DOIP/Op.Delete"); - assert Arrays.asList(listArray).contains("0.DOIP/Op.ListOperations"); - LOGGER.info("----- ListOps Assert Pass -----"); - } - } - 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); - } - - public void handleUpdateTest() throws InterruptedException { - LOGGER.info("----- Update Test -----"); - long start = System.currentTimeMillis(); - final AtomicInteger total = new AtomicInteger(0); - final AtomicInteger correct = new AtomicInteger(0); - int totalCount = 1; - DigitalObject dobj = new DigitalObject("aibd", DoType.DOIPServiceInfo); - dobj.addAttribute("syw", "aibd"); - saveDo = dobj; - for (int i = 0; i < totalCount; i++) { - doipClient.update(dobj, new DoipMessageCallback() { - @Override - public void onResult(DoipMessage msg) { - logo++; - if (flag == false) { - String[] flagData = {logo + "", "0.DOIP/Op.Update", "NULL", "null"}; - outData.add(flagData); - } else { - if (msg.header.parameters.response != DoipResponseCode.Success) { - String[] flagData = {logo + "", "0.DOIP/Op.Update", "Not Pass", msg.header.parameters.response.toString()}; // 不通过 - outData.add(flagData); - flag = false; - LOGGER.warn("----- Update not Success -----"); - if (msg.header.parameters.response == DoipResponseCode.UnKnownError) { - LOGGER.warn("----- Update Time Out -----"); - } else if (msg.header.parameters.response == DoipResponseCode.DoNotFound) { - LOGGER.error("----- Do Not Found -----"); - } - } else { - String[] flagData = {logo + "", "0.DOIP/Op.Update", "Pass", msg.header.parameters.response.toString()}; // 不通过 - outData.add(flagData); - answer++; - correct.incrementAndGet(); - DigitalObject retDo; - String jsonRetDo; - try { - //byte[] str =msg.body.encodedData; - retDo = msg.body.getDataAsDigitalObject(); - jsonRetDo = new Gson().toJson(retDo); - LOGGER.info(new Gson().toJson(retDo)); - } catch (DoDecodeException e) { - throw new RuntimeException(e); - } catch (IOException e) { - throw new RuntimeException(e); - } - assert saveDo.equals(retDo); - LOGGER.info("----- Update Assert Pass -----"); - } - } - 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); - } - - - public void handleRetrieveTest() throws InterruptedException { - LOGGER.info("----- Retrieve Test -----"); - long start = System.currentTimeMillis(); - final AtomicInteger total = new AtomicInteger(0); - final AtomicInteger correct = new AtomicInteger(0); - int totalCount = 1; - - for (int i = 0; i < totalCount; i++) { - doipClient.retrieve("aibd", null, false, new DoipMessageCallback() { - @Override - public void onResult(DoipMessage msg) { - logo++; - if (flag == false) { - String[] flagData = {logo + "", "0.DOIP/Op.Retrieve", "NULL", "null"}; - outData.add(flagData); - } else { - if (msg.header.parameters.response != DoipResponseCode.Success) { - String[] flagData = {logo + "", "0.DOIP/Op.Retrieve", "Not Pass", msg.header.parameters.response.toString()}; // 不通过 - outData.add(flagData); - flag = false; - LOGGER.warn("----- Retrieve not Success -----"); - if (msg.header.parameters.response == DoipResponseCode.UnKnownError) { - LOGGER.error("----- Retrieve Time Out -----"); - } else if (msg.header.parameters.response == DoipResponseCode.DoNotFound) { - LOGGER.error("----- Do Not Found -----"); - } - } else { - String[] flagData = {logo + "", "0.DOIP/Op.Retrieve", "Pass", msg.header.parameters.response.toString()}; // 不通过 - outData.add(flagData); - answer++; - correct.incrementAndGet(); - - DigitalObject retDo; - try { - retDo = msg.body.getDataAsDigitalObject(); - assert retDo.id.toString() == "aibd"; - assert saveDo.equals(retDo); - LOGGER.info("----- Retrieve Assert Pass -----"); - LOGGER.info(retDo.toString()); - } catch (DoDecodeException e) { - throw new RuntimeException(e); - } catch (IOException e) { - throw new RuntimeException(e); - } - } - } - 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); - } - - public void handleSearchTest() throws InterruptedException { - LOGGER.info("----- Search Test -----"); - long start = System.currentTimeMillis(); - final AtomicInteger total = new AtomicInteger(0); - final AtomicInteger correct = new AtomicInteger(0); - int totalCount = 1; - String query = "aibd"; - SearchParameter sp = new SearchParameter(query, 10, 0, "", "DO"); - sp.query = query; - for (int i = 0; i < totalCount; i++) { - doipClient.search(query, sp, new DoipMessageCallback() { - @Override - public void onResult(DoipMessage msg) { - logo++; - if (flag == false) { - String[] flagData = {logo + "", "0.DOIP/Op.Search", "NULL", "null"}; - outData.add(flagData); - } else { - if (msg.header.parameters.response != DoipResponseCode.Success) { - String[] flagData = {logo + "", "0.DOIP/Op.Search", "Not Pass", msg.header.parameters.response.toString()}; // 不通过 - outData.add(flagData); - flag = false; - LOGGER.warn("----- Search not Success -----"); - if (msg.header.parameters.response == DoipResponseCode.UnKnownError) { - LOGGER.error("----- Search Time Out -----"); - } else if (msg.header.parameters.response == DoipResponseCode.DoNotFound) { - LOGGER.error("----- Do Not Found -----"); - } - } else { - String[] flagData = {logo + "", "0.DOIP/Op.Search", "Pass", msg.header.parameters.response.toString()}; // 不通过 - outData.add(flagData); - answer++; - correct.incrementAndGet(); - DigitalObject retDo; - try { - String s_new = new String(msg.body.encodedData, "UTF-8"); - LOGGER.info("Search Result : " + s_new); - LOGGER.info("----- Search Assert Pass -----"); - } catch (IOException e) { - throw new RuntimeException(e); - } - } - } - 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); - } - - public void handleDeleteTest() throws InterruptedException { - LOGGER.info("----- Delete Test -----"); - long start = System.currentTimeMillis(); - final AtomicInteger total = new AtomicInteger(0); - final AtomicInteger correct = new AtomicInteger(0); - int totalCount = 1; - - for (int i = 0; i < totalCount; i++) { - doipClient.delete("aibd", new DoipMessageCallback() { - @Override - public void onResult(DoipMessage msg) { - logo++; - if (flag == false) { - String[] flagData = {logo + "", "0.DOIP/Op.Delete", "NULL", "null"}; - outData.add(flagData); - } else { - if (msg.header.parameters.response != DoipResponseCode.Success) { - LOGGER.warn("----- Delete not Success -----"); - String[] flagData = {logo + "", "0.DOIP/Op.Delete", "Not Pass", msg.header.parameters.response.toString()}; // 不通过 - outData.add(flagData); - flag = false; - if (msg.header.parameters.response == DoipResponseCode.UnKnownError) { - LOGGER.error("----- Delete Time Out -----"); - } else if (msg.header.parameters.response == DoipResponseCode.DoNotFound) { - LOGGER.error("----- Do Not Found -----"); - } - } else { - String[] flagData = {logo + "", "0.DOIP/Op.Delete", "Pass", msg.header.parameters.response.toString()}; // 不通过 - outData.add(flagData); - answer++; - correct.incrementAndGet(); - //LOGGER.info("Retrieved:" + str - //+ " respCode:" + msg.header.parameters.response); - - if (msg.header.parameters.response.toString() == "Success") { - assert msg.header.parameters.response.toString() == "Success"; - } else { - assert msg.header.parameters.response == DoipResponseCode.DoNotFound; - } - LOGGER.info("----- Delete Assert Pass -----"); - } - } - 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); - } - public String escapeSpecialCharacters(String data) { - String escapedData = data.replaceAll("\\R", " "); - if (data.contains(",") || data.contains("\"") || data.contains("'")) { - data = data.replace("\"", "\"\""); - escapedData = "\"" + data + "\""; - } - return escapedData; - } - - public String convertToCSV(String[] data) { - return Stream.of(data) - .map(this::escapeSpecialCharacters) - .collect(Collectors.joining(",")); - } - public void wirterCsv(String csvFileName, List data) - throws FileNotFoundException, UnsupportedEncodingException { - File csvOutputFile = new File(csvFileName); - try (PrintWriter pw = new PrintWriter(csvOutputFile, "GBK")) { - data.stream() - .map(this::convertToCSV) - .forEach(pw::println); - } - } - - public void checkTest() throws FileNotFoundException, UnsupportedEncodingException { - wirterCsv("./log/IntegratyTest.csv",outData); - if(answer == 8){ - LOGGER.info("----- All Integration Tests Pass! -----"); - }else{ - LOGGER.info("----- Not Pass , Please Check! -----"); - } - } -} - - diff --git a/src/main/java/org/bdware/doip/proxy/DoipV21Proxy.java b/src/main/java/org/bdware/doip/proxy/DoipV21Proxy.java index f8d517c..a15756b 100644 --- a/src/main/java/org/bdware/doip/proxy/DoipV21Proxy.java +++ b/src/main/java/org/bdware/doip/proxy/DoipV21Proxy.java @@ -8,16 +8,26 @@ 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 ){ @@ -25,10 +35,11 @@ public class DoipV21Proxy { si--; } - DoipServer server1 = new DoipServerImpl(v21serviceInfo); - server1.setRepositoryHandler(new ProxyV21Handler(v21serviceInfo)); - - server1.start(); + 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/DoipV2Client.java b/src/main/java/org/bdware/doip/proxy/DoipV2Client.java deleted file mode 100644 index 60ee2b2..0000000 --- a/src/main/java/org/bdware/doip/proxy/DoipV2Client.java +++ /dev/null @@ -1,4 +0,0 @@ -package org.bdware.doip.proxy; - -public class DoipV2Client { -} diff --git a/src/main/java/org/bdware/doip/proxy/DoipV2Proxy.java b/src/main/java/org/bdware/doip/proxy/DoipV2Proxy.java index 2c1947b..ec48bcf 100644 --- a/src/main/java/org/bdware/doip/proxy/DoipV2Proxy.java +++ b/src/main/java/org/bdware/doip/proxy/DoipV2Proxy.java @@ -6,47 +6,41 @@ import org.bdware.doip.codec.DOIPVersion; import org.bdware.doip.endpoint.server.*; import java.io.File; -import java.io.FileNotFoundException; +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(org.bdware.doip.proxy.DoipProxy.class); - public static boolean flag = true; - - public static void start() throws FileNotFoundException { + 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"; - Scanner input = new Scanner(System.in); - - System.out.println("Please enter DoipV2.0 url:"); - //String v2url = input.nextLine(); - String v2url = "tls://127.0.0.1:8888"; -// TLSListenerInfo listenerConfig = new TLSListenerInfo( -// "tls://127.0.0.1:8889",DOIPVersion.V2_0,new File(certPath),new File(skPath) -// ); + System.out.println("Please enter Listen Address : "); + Listen_IP = "tls://127.0.0.1:8888"; TLSListenerInfo v2listenerConfig = new TLSListenerInfo( - v2url, DOIPVersion.V2_0, new File(certPath), new File(skPath) + Listen_IP, DOIPVersion.V2_0, new File(certPath), new File(skPath) ); ArrayList v2listenerConfigs = new ArrayList<>(); v2listenerConfigs.add(v2listenerConfig); DoipServiceInfo v2serviceInfo = new DoipServiceInfo( - "local/compatibilityTest", "test", "repository", v2listenerConfigs + "", "proxy", "", v2listenerConfigs ); - // v2.0 SERVER - DoipServer server2 = DoipServerImpl.createDoipServer(v2serviceInfo); + DoipServer server = DoipServerImpl.createDoipServer(v2serviceInfo); final AtomicInteger count = new AtomicInteger(0); - ProxyV2Handler v2handler = new ProxyV2Handler(v2serviceInfo); - v2handler.count = count; - server2.setRepositoryHandler(v2handler); - server2.start(); + 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 index 77585be..1e5cd60 100644 --- a/src/main/java/org/bdware/doip/proxy/ProxyV21Handler.java +++ b/src/main/java/org/bdware/doip/proxy/ProxyV21Handler.java @@ -1,11 +1,12 @@ package org.bdware.doip.proxy; -//import io.netty.channel.ChannelHandler; 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; @@ -14,229 +15,271 @@ 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 java.io.IOException; -import java.util.HashMap; - - -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.Element; -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.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 { - static Logger LOGGER = LogManager.getLogger(ProxyV21Handler.class); + public AtomicInteger count = new AtomicInteger(0); - static HashMap digitalObjectHashMap = new HashMap<>(); + public DoipMessage serverResponse; - public ProxyV21Handler(DoipServiceInfo serviceInfo){ - super(serviceInfo); + 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 { - System.out.println("----- Print Request Hello -----"); - printDoipMessage(request); - } catch (IOException e) { - throw new RuntimeException(e); - } catch (DoDecodeException e) { + serverResponse = DoipV21Proxy.client.hello(request); + } catch (InterruptedException e) { throw new RuntimeException(e); } - LOGGER.info(" handleHello "); - if(request.header.parameters.id.equals(serviceInfo.id)) - return replyDoipServiceInfo(request); - return replyStringWithStatus(request,"serviceID do not match", DoipResponseCode.Declined); + + 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) { - LOGGER.info(" handleListOps "); - return replyAllOperations(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) { - LOGGER.info(" handleCreate "); - if(request.header.parameters.id.equals(serviceInfo.id)){ - DigitalObject digitalObject = null; + // 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 = request.body.getDataAsDigitalObject(); + DigitalObject digitalObject = request.body.getDataAsDigitalObject(); + resp.setBody(digitalObject); } catch (DoDecodeException e) { throw new RuntimeException(e); } catch (IOException e) { throw new RuntimeException(e); } - if(digitalObjectHashMap.containsKey(digitalObject.id)){ - return replyStringWithStatus(request,"DO already exist", DoipResponseCode.DoAlreadyExist); - }else{ - try { - if(digitalObject.id == null || digitalObject.id.equals("")){ - digitalObject.id = generateID(); - } - digitalObjectHashMap.put(digitalObject.id,digitalObject); - DigitalObject retDO = new DigitalObject(digitalObject.id,digitalObject.type); - retDO.attributes = digitalObject.attributes; - return replyDO(request,retDO); - } catch (Exception e) { - return replyStringWithStatus(request,"can not get DO from message body", DoipResponseCode.Invalid); - } - } }else{ - return replyStringWithStatus(request,"serviceID do not match", DoipResponseCode.Declined); + 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; } - private String generateID() { - String prefix = serviceInfo.id.split("/")[0]; - String suffix = "/do."+ digitalObjectHashMap.size(); - return prefix+suffix; - } @Override public DoipMessage handleUpdate(DoipMessage request) { - LOGGER.info(" handleUpdate "); - String targetId = request.header.parameters.id; - if(!digitalObjectHashMap.containsKey(targetId)) { - return replyStringWithStatus(request,"do not found",DoipResponseCode.DoNotFound); - } + // update local/test name test + System.out.println("----- [RECEIVE] client->proxy Update -----"); + + DoipMessageFactory.DoipMessageBuilder builder = new DoipMessageFactory.DoipMessageBuilder(); + DoipMessageFactory.DoipMessageBuilder resp; + try { - DigitalObject digitalObject = request.body.getDataAsDigitalObject(); - if(!digitalObject.id.equals(targetId)){ - return replyStringWithStatus(request,"DO ID not match",DoipResponseCode.Invalid); + 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); } - digitalObjectHashMap.put(digitalObject.id,digitalObject); - DigitalObject retDO = new DigitalObject(digitalObject.id,digitalObject.type); - retDO.attributes = digitalObject.attributes; - return replyDO(request,retDO); - }catch (Exception e){ - return replyStringWithStatus(request,"can not get DO from message body", DoipResponseCode.Invalid); + }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) { - LOGGER.info(" handleDelete "); - String targetId = request.header.parameters.id; - if(!digitalObjectHashMap.containsKey(targetId)) { - return replyStringWithStatus(request,"do not found",DoipResponseCode.DoNotFound); + // 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); } - digitalObjectHashMap.remove(targetId); - return replyString(request,"success"); + 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) { - LOGGER.info(" handleRetrieve "); - String targetId = request.header.parameters.id; - if(!digitalObjectHashMap.containsKey(targetId)) { - return replyStringWithStatus(request,"do not found",DoipResponseCode.DoNotFound); - } - DigitalObject digitalObject = digitalObjectHashMap.get(targetId); + // retrieve local/test + System.out.println("----- [RECEIVE] client->proxy Retrieve -----"); + + DoipMessageFactory.DoipMessageBuilder builder = new DoipMessageFactory.DoipMessageBuilder(); + DoipMessageFactory.DoipMessageBuilder resp; - if(request.header.parameters == null || request.header.parameters.attributes == null){ - DigitalObject retDO = new DigitalObject(digitalObject.id,digitalObject.type); - retDO.attributes = digitalObject.attributes; - return replyDO(request,retDO); + try { + serverResponse = DoipV21Proxy.client.retrieve(request); + } catch (InterruptedException e) { + throw new RuntimeException(e); } - //request DO include element data - if(request.header.parameters.attributes.has("includeElementData")) - return replyDO(request, digitalObject); - //request target element - else if(request.header.parameters.attributes.has("element")){ - String elementID = request.header.parameters.attributes.get("element").getAsString(); - for (Element e:digitalObject.elements) { - if(e.id.equals(elementID)) return replyBytes(request,e.getData()); + 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); } - return replyStringWithStatus(request,"element not found",DoipResponseCode.DoNotFound); - } - //request DO without element data - else{ - DigitalObject retDO = new DigitalObject(digitalObject.id,digitalObject.type); - retDO.attributes = digitalObject.attributes; - return replyDO(request,retDO); + }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) { - LOGGER.info(" handleSearch "); - if(request.header.parameters == null || request.header.parameters.attributes == null || request.header.parameters.attributes.get("query") == null){ - LOGGER.info("invalid search request: attributes not found"); - return replyStringWithStatus(request, "invalid search request: attributes not found.", DoipResponseCode.Invalid); + // 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); } -// SearchParameter sp = new SearchParameter(request.header.parameters.attributes.get("query").getAsString(), -// !request.header.parameters.attributes.has("pageNum")?0:request.header.parameters.attributes.get("pageNum").getAsInt(), -// !request.header.parameters.attributes.has("pageSize")?0:request.header.parameters.attributes.get("pageSize").getAsInt(), -// !request.header.parameters.attributes.has("sortFields")?"":request.header.parameters.attributes.get("sortFields").getAsString(), -// !request.header.parameters.attributes.has("type")?null:request.header.parameters.attributes.get("type").getAsString()); - - //only support query by id - DigitalObject digitalObject = digitalObjectHashMap.get(request.header.parameters.attributes.get("query").getAsString()); - DigitalObject retDO = new DigitalObject(digitalObject.id,digitalObject.type); - retDO.attributes = digitalObject.attributes; - SearchResult sr = new SearchResult(); - sr.addItem(retDO); - return replyString(request, DoipGson.getDoipGson().toJson(sr)); - } + 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.1 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 digitalObjectHashMap = new HashMap<>(); public DoipServiceInfo si; + public DoipMessage serverResponse; + public ProxyV2Handler(DoipServiceInfo serviceInfo){ si = serviceInfo; @@ -37,177 +39,234 @@ public class ProxyV2Handler implements RepositoryHandler, RegistryHandler { @Override public DoipMessage handleHello(DoipMessage request) { + + System.out.println("----- [RECEIVE] client->proxy Hello -----"); + + DoipMessageFactory.DoipMessageBuilder builder = new DoipMessageFactory.DoipMessageBuilder(); + DoipMessageFactory.DoipMessageBuilder resp ; + try { - System.out.println("----- Print Reuquest Hello -----"); - printDoipMessage(request); - } catch (IOException e) { - throw new RuntimeException(e); - } catch (DoDecodeException e) { + serverResponse = DoipV2Proxy.client.handleHello(request); + } catch (InterruptedException e) { throw new RuntimeException(e); } - LOGGER.info(" handleHello "); - DoipMessageFactory.DoipMessageBuilder builder = new DoipMessageFactory.DoipMessageBuilder(); - DoipMessageFactory.DoipMessageBuilder resp; - if (request.header.parameters.id.equals(si.id)) { + + 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(si.toDigitalObject()); - } else { + 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(); - assert msg.requestID == request.requestID; - System.out.println("----- Print Resonse Hello -----"); + return msg; } @Override public DoipMessage handleListOps(DoipMessage request) { - LOGGER.info(" handleListOps "); + // listOperations local/test + System.out.println("----- [RECEIVE] client->proxy ListOps -----"); + DoipMessageFactory.DoipMessageBuilder builder = new DoipMessageFactory.DoipMessageBuilder(); DoipMessageFactory.DoipMessageBuilder resp; - String targetId = request.header.parameters.id; - if (digitalObjectHashMap.containsKey(targetId)) { + + 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); - List operationIds = new ArrayList<>(); - operationIds.add("0.DOIP/Op.Hello"); - operationIds.add("0.DOIP/Op.Create"); - operationIds.add("0.DOIP/Op.Retrieve"); - operationIds.add("0.DOIP/Op.Update"); - operationIds.add("0.DOIP/Op.Delete"); - operationIds.add("0.DOIP/Op.Search"); - operationIds.add("0.DOIP/Op.ListOperations"); - - resp.setBody(new Gson().toJson(operationIds).getBytes(StandardCharsets.UTF_8)); - - } else { + 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(); - assert msg.requestID == request.requestID; + return msg; } @Override public DoipMessage handleCreate(DoipMessage request) { - LOGGER.info(" handleCreate "); + // create local/test Document name example file /home/syw/Desktop/test.pdf DoipMessageFactory.DoipMessageBuilder builder = new DoipMessageFactory.DoipMessageBuilder(); DoipMessageFactory.DoipMessageBuilder resp; - String targetId ; + try { - targetId = request.body.getDataAsDigitalObject().id; - if (digitalObjectHashMap.containsKey(targetId)) { - resp = builder.createResponse(DoipResponseCode.DoAlreadyExist, request); - } else { - resp = builder.createResponse(DoipResponseCode.Success, request); + 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); - digitalObjectHashMap.put(targetId, digitalObject); + } catch (DoDecodeException e) { + throw new RuntimeException(e); + } catch (IOException e) { + throw new RuntimeException(e); } - resp.setRequestID(request.requestID); - count.incrementAndGet(); - DoipMessage msg = resp.create(); - assert msg.requestID == request.requestID; - return msg; - } catch (DoDecodeException e) { - e.printStackTrace(); - } catch (IOException e) { - e.printStackTrace(); + }else{ + System.out.println("----- [FAIL] Proxy & Server Create -----"); + resp = builder.createResponse(DoipResponseCode.DoAlreadyExist, request); } - return null; + resp.setRequestID(request.requestID); + count.incrementAndGet(); + DoipMessage msg = resp.create(); + return msg; } @Override public DoipMessage handleUpdate(DoipMessage request) { - LOGGER.info(" handleUpdate "); - LOGGER.info(new Gson().toJson(request)); + // update local/test name test + System.out.println("----- [RECEIVE] client->proxy Update -----"); + DoipMessageFactory.DoipMessageBuilder builder = new DoipMessageFactory.DoipMessageBuilder(); DoipMessageFactory.DoipMessageBuilder resp; - String targetId = request.header.parameters.id; - if (!digitalObjectHashMap.containsKey(targetId)) { - resp = builder.createResponse(DoipResponseCode.DoNotFound, request); - } else { + + 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); - DigitalObject digitalObject = null; + try { - digitalObject = request.body.getDataAsDigitalObject(); + DigitalObject digitalObject = request.body.getDataAsDigitalObject(); + resp.setBody(digitalObject); } catch (DoDecodeException e) { throw new RuntimeException(e); } catch (IOException e) { throw new RuntimeException(e); } - resp.setBody(digitalObject); - digitalObjectHashMap.replace(targetId, digitalObject); + }else{ + System.out.println("----- [FAIL] Proxy & Server Update -----"); + resp = builder.createResponse(DoipResponseCode.DoNotFound, request); } resp.setRequestID(request.requestID); count.incrementAndGet(); DoipMessage msg = resp.create(); - assert msg.requestID == request.requestID; return msg; } @Override public DoipMessage handleDelete(DoipMessage request) { - LOGGER.info(" handleDelete "); + // delete local/test + System.out.println("----- [RECEIVE] client->proxy Delete -----"); + DoipMessageFactory.DoipMessageBuilder builder = new DoipMessageFactory.DoipMessageBuilder(); DoipMessageFactory.DoipMessageBuilder resp; - String targetId = request.header.parameters.id; - if (!digitalObjectHashMap.keySet().contains(targetId)) { - resp = builder.createResponse(DoipResponseCode.DoNotFound, request); - } else { + + 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(digitalObjectHashMap.get(targetId)); - digitalObjectHashMap.remove(targetId); + 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(); - assert msg.requestID == request.requestID; return msg; } @Override public DoipMessage handleRetrieve(DoipMessage request) { - LOGGER.info(" handleRetrieve "); + // retrieve local/test + System.out.println("----- [RECEIVE] client->proxy Retrieve -----"); + DoipMessageFactory.DoipMessageBuilder builder = new DoipMessageFactory.DoipMessageBuilder(); DoipMessageFactory.DoipMessageBuilder resp; - String targetId = request.header.parameters.id; - if (!digitalObjectHashMap.containsKey(targetId)) { + + 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); - } else { - resp = builder.createResponse(DoipResponseCode.Success, request); - resp.setBody(digitalObjectHashMap.get(targetId)); } resp.setRequestID(request.requestID); count.incrementAndGet(); DoipMessage msg = resp.create(); - assert msg.requestID == request.requestID; return msg; } @Override public DoipMessage handleSearch(DoipMessage request) { + // search type:Schema local/test + DoipMessageFactory.DoipMessageBuilder builder = new DoipMessageFactory.DoipMessageBuilder(); DoipMessageFactory.DoipMessageBuilder resp = null; - String targetId = request.header.parameters.id; - if (digitalObjectHashMap.containsKey(targetId)) { - JsonObject result = new JsonObject(); - List digitalObjectArrayList = new ArrayList<>(); - for (int i = 0; i < 20; i++) { - DigitalObject digitalObject = new DigitalObject("number_" + i, DoType.DO); - digitalObjectArrayList.add(digitalObject); - } - result.addProperty("size", 0); - result.add("results", new Gson().toJsonTree(digitalObjectArrayList)); + + 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(new Gson().toJson(result).getBytes(StandardCharsets.UTF_8)); - } else { + 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"); @@ -216,7 +275,6 @@ public class ProxyV2Handler implements RepositoryHandler, RegistryHandler { resp.setRequestID(request.requestID); count.incrementAndGet(); DoipMessage msg = resp.create(); - assert msg.requestID == request.requestID; return msg; } @@ -225,6 +283,8 @@ public class ProxyV2Handler implements RepositoryHandler, RegistryHandler { 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); -- Gitee