diff --git a/java/socketd-transport-test/src/test/java/benchmark/BenchmarkTest.java b/java/socketd-transport-test/src/test/java/benchmark/BenchmarkTest.java index 5686d95c15cb02c6c09f07cb0a8615f4d6322fe7..77a3da4e8e35f7627444a06287c144e3b112b700 100644 --- a/java/socketd-transport-test/src/test/java/benchmark/BenchmarkTest.java +++ b/java/socketd-transport-test/src/test/java/benchmark/BenchmarkTest.java @@ -18,6 +18,7 @@ public class BenchmarkTest { "sd:tcp-smartsocket", "sd:ws-java", "sd:udp-java", + "sd:udp-neta", "sd:udp-netty", "sd:kcp-java", }; diff --git a/java/socketd-transport-test/src/test/java/benchmark/WrkServer.java b/java/socketd-transport-test/src/test/java/benchmark/WrkServer.java index c9276a052f0015e8bd42a972547713bc8ef1d018..e097e79bef205b8824578d9e5655e63ac068a41c 100644 --- a/java/socketd-transport-test/src/test/java/benchmark/WrkServer.java +++ b/java/socketd-transport-test/src/test/java/benchmark/WrkServer.java @@ -26,6 +26,7 @@ public class WrkServer implements LifecycleBean { "sd:tcp-smartsocket", "sd:ws-java", "sd:udp-java", + "sd:udp-neta", "sd:udp-netty", "sd:kcp-java", }; diff --git a/java/socketd-transport-test/src/test/java/features/CaseTest.java b/java/socketd-transport-test/src/test/java/features/CaseTest.java index 139c2d50f93c539c1121652077756c39e981ea8a..de394a3294c4763c26e49db5ba4e20b69ad12f97 100644 --- a/java/socketd-transport-test/src/test/java/features/CaseTest.java +++ b/java/socketd-transport-test/src/test/java/features/CaseTest.java @@ -12,11 +12,13 @@ import org.noear.solon.test.SolonTest; public class CaseTest { static final String[] schemas = new String[]{ "sd:tcp-java", + "sd:udp-neta", "sd:tcp-netty", "sd:tcp-smartsocket", "sd:tcp-neta", "sd:ws-java", "sd:udp-java", + "sd:udp-neta", "sd:udp-netty", "sd:kcp-java", }; diff --git a/java/socketd-transport-test/src/test/java/features/CaseTest2.java b/java/socketd-transport-test/src/test/java/features/CaseTest2.java index 644f93da72e9f18732a89e4f4304d52e57c9457b..7939c8a634d8e40858404e3c6f39cdf1a86d21d9 100644 --- a/java/socketd-transport-test/src/test/java/features/CaseTest2.java +++ b/java/socketd-transport-test/src/test/java/features/CaseTest2.java @@ -14,11 +14,12 @@ import org.noear.solon.test.SolonTest; public class CaseTest2 { static final String[] schemas = new String[]{ "sd:tcp-java", + "sd:tcp-neta", "sd:tcp-netty", "sd:tcp-smartsocket", - "sd:tcp-neta", "sd:ws-java", "sd:udp-java", + "sd:udp-neta", // "sd:udp-netty", "sd:kcp-java", }; diff --git a/java/socketd-transport-test/src/test/java/features/cases/TestCase14_fileUpload.java b/java/socketd-transport-test/src/test/java/features/cases/TestCase14_fileUpload.java index 7281daf5625774691cbe8ad7fc9868675471ad33..ea8ae482a609645030a1971fbeffcf55f682a42c 100644 --- a/java/socketd-transport-test/src/test/java/features/cases/TestCase14_fileUpload.java +++ b/java/socketd-transport-test/src/test/java/features/cases/TestCase14_fileUpload.java @@ -49,7 +49,7 @@ public class TestCase14_fileUpload extends BaseTestCase { if (fileName != null) { System.out.println(fileName); - File fileNew = new File("/Users/noear/Downloads/socketd-upload.mov"); + File fileNew = new File("/Users/yongchun.zyc/Downloads/socketd-upload.mov"); fileNew.delete(); fileNew.createNewFile(); @@ -78,7 +78,7 @@ public class TestCase14_fileUpload extends BaseTestCase { AtomicInteger fileCount = new AtomicInteger(); AtomicInteger fileTotal = new AtomicInteger(); - FileEntity fileEntity = new FileEntity(new File("/Users/noear/Movies/snack3-rce-poc.mov")); + FileEntity fileEntity = new FileEntity(new File("/Users/yongchun.zyc/Downloads/QQMusicMac10.4.0Build01.dmg")); clientSession.send("/user/upload", fileEntity).thenProgress((isSend, val, max) -> { if (isSend) { fileCount.incrementAndGet(); @@ -94,7 +94,7 @@ public class TestCase14_fileUpload extends BaseTestCase { System.out.println("fileCount: " + fileCount.get() + ", fileTotal: " + fileTotal.get()); Assertions.assertEquals(messageCounter.get(), 1, getSchema() + ":server 收的消息数量对不上"); - File file = new File("/Users/noear/Downloads/socketd-upload.mov"); + File file = new File("/Users/yongchun.zyc/Downloads/socketd-upload.mov"); assert file.length() > 1024 * 1024 * 10; //assert fileCount.get() > 0; //assert fileCount.get() == fileTotal.get(); diff --git a/java/socketd-transport-test/src/test/java/features/cases/TestCase22_ssl.java b/java/socketd-transport-test/src/test/java/features/cases/TestCase22_ssl.java index 47d7309e7d2aff74307c17bd1074f8510e4d45c3..90cd730bc8c47b524d3633ee5d3ad86209dc86a3 100644 --- a/java/socketd-transport-test/src/test/java/features/cases/TestCase22_ssl.java +++ b/java/socketd-transport-test/src/test/java/features/cases/TestCase22_ssl.java @@ -1,7 +1,7 @@ package features.cases; +import net.hasor.cobble.ResourcesUtils; import org.junit.jupiter.api.Assertions; -import org.noear.socketd.utils.SslContextBuilder; import org.noear.socketd.SocketD; import org.noear.socketd.transport.client.ClientSession; import org.noear.socketd.transport.core.Entity; @@ -10,12 +10,18 @@ import org.noear.socketd.transport.core.Session; import org.noear.socketd.transport.core.entity.StringEntity; import org.noear.socketd.transport.core.listener.SimpleListener; import org.noear.socketd.transport.server.Server; +import org.noear.socketd.utils.SslContextBuilder; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import javax.net.ssl.KeyManagerFactory; import javax.net.ssl.SSLContext; +import javax.net.ssl.TrustManager; +import javax.net.ssl.X509TrustManager; import java.io.IOException; import java.net.URL; +import java.security.KeyStore; +import java.security.cert.X509Certificate; import java.util.concurrent.atomic.AtomicInteger; /** @@ -31,61 +37,95 @@ public class TestCase22_ssl extends BaseTestCase { super(schema, port); } - private Server server; + private Server server; private ClientSession clientSession; - private AtomicInteger serverOnMessageCounter = new AtomicInteger(); + private AtomicInteger serverOnMessageCounter = new AtomicInteger(); private AtomicInteger clientSubscribeReplyCounter = new AtomicInteger(); private SSLContext getSSLContext() throws Exception { URL url = TestCase22_ssl.class.getClassLoader().getResource("ssl/demo_store.pfx"); - return new SslContextBuilder() - .keyManager(url.openStream(), "PKCS12", "1234") - .build(); + return new SslContextBuilder().keyManager(url.openStream(), "PKCS12", "1234").build(); + } + + public static SSLContext getSSLContext(String protocol) throws Exception { + char[] password = "123456".toCharArray(); + KeyStore jsk = KeyStore.getInstance("JKS"); + jsk.load(ResourcesUtils.getResourceAsStream("ssl/jks/keystore.jks"), password); + + // Set up key manager factory to use our key store + String keyAlgorithm = KeyManagerFactory.getDefaultAlgorithm(); + KeyManagerFactory kmf = KeyManagerFactory.getInstance(keyAlgorithm); + kmf.init(jsk, password); + + // SSL Server + SSLContext sslContext = SSLContext.getInstance(protocol); + sslContext.init(kmf.getKeyManagers(), new TrustManager[] { new MyTrustManager() }, null); + + return sslContext; + } + + static class MyTrustManager implements TrustManager, X509TrustManager { + public X509Certificate[] getAcceptedIssuers() { + return null; + } + + public boolean isServerTrusted(X509Certificate[] certs) { + return true; + } + + public boolean isClientTrusted(X509Certificate[] certs) { + return true; + } + + public void checkServerTrusted(X509Certificate[] certs, String authType) { + return; + } + + public void checkClientTrusted(X509Certificate[] certs, String authType) { + return; + } } @Override public void start() throws Exception { log.trace("..."); - SSLContext sslContext = getSSLContext(); + //SSLContext sslContext = getSSLContext(); + SSLContext sslContext = getSSLContext("TLSv1.2"); // SslProtocol see net.hasor.neta.handler.codec.ssl.SslProtocol super.start(); //server - server = SocketD.createServer(getSchema()) - .config(c -> c.port(getPort()).sslContext(sslContext)) - .listen(new SimpleListener() { - @Override - public void onMessage(Session session, Message message) throws IOException { - System.out.println("::" + message); - serverOnMessageCounter.incrementAndGet(); - - if (message.isRequest()) { - session.reply(message, new StringEntity("hi reply")); //这之后,无效了 - session.reply(message, new StringEntity("hi reply**")); - } - - if (message.isSubscribe()) { - session.reply(message, new StringEntity("hi reply")); - session.reply(message, new StringEntity("hi reply**")); - session.replyEnd(message, new StringEntity("hi reply****")); //这之后,无效了 - session.reply(message, new StringEntity("hi reply******")); - session.reply(message, new StringEntity("hi reply********")); - } - - session.send("demo", new StringEntity("test")); - } - }) - .start(); + server = SocketD.createServer(getSchema()).config(c -> c.port(getPort()).sslContext(sslContext)).listen(new SimpleListener() { + @Override + public void onMessage(Session session, Message message) throws IOException { + System.out.println("::" + message); + serverOnMessageCounter.incrementAndGet(); + + if (message.isRequest()) { + session.reply(message, new StringEntity("hi reply")); //这之后,无效了 + session.reply(message, new StringEntity("hi reply**")); + } + + if (message.isSubscribe()) { + session.reply(message, new StringEntity("hi reply")); + session.reply(message, new StringEntity("hi reply**")); + session.replyEnd(message, new StringEntity("hi reply****")); //这之后,无效了 + session.reply(message, new StringEntity("hi reply******")); + session.reply(message, new StringEntity("hi reply********")); + } + + session.send("demo", new StringEntity("test")); + } + }).start(); //休息下,启动可能要等会儿 Thread.sleep(1000); - //client String serverUrl = getSchema() + "://127.0.0.1:" + getPort() + "/path?u=a&p=2"; - clientSession = SocketD.createClient(serverUrl).config(c->c.sslContext(sslContext)).openOrThow(); + clientSession = SocketD.createClient(serverUrl).config(c -> c.sslContext(sslContext)).openOrThow(); clientSession.send("/user/created", new StringEntity("hi")); Entity response = clientSession.sendAndRequest("/user/get", new StringEntity("hi")).await(); diff --git a/java/socketd-transport-test/src/test/java/features/cases/TestCase24_bigFile_1g.java b/java/socketd-transport-test/src/test/java/features/cases/TestCase24_bigFile_1g.java index ef732c3275aa170c8f7683822906bf95e3c77071..633773a631d9b7e3e7a9d99c703ab00b5e5fce46 100644 --- a/java/socketd-transport-test/src/test/java/features/cases/TestCase24_bigFile_1g.java +++ b/java/socketd-transport-test/src/test/java/features/cases/TestCase24_bigFile_1g.java @@ -58,7 +58,7 @@ public class TestCase24_bigFile_1g extends BaseTestCase { if (fileName != null) { System.out.println(fileName); - File fileNew = new File("/Users/noear/Downloads/socketd-big-upload.mov"); + File fileNew = new File("/Users/yongchun.zyc/Downloads/socketd-big-upload.mov"); fileNew.delete(); fileNew.createNewFile(); @@ -87,7 +87,7 @@ public class TestCase24_bigFile_1g extends BaseTestCase { String serverUrl = getSchema() + "://127.0.0.1:" + getPort() + "/path?u=a&p=2"; clientSession = SocketD.createClient(serverUrl).openOrThow(); - FileEntity fileEntity = new FileEntity(new File("/Users/noear/Movies/[Socket.D 实战] 直播手写 FolkMQ (4).mov")); + FileEntity fileEntity = new FileEntity(new File("/Users/yongchun.zyc/Downloads/atlassian-confluence-7.17.1.zip")); clientSession.send("/user/upload", fileEntity); fileEntity.release(); @@ -99,7 +99,7 @@ public class TestCase24_bigFile_1g extends BaseTestCase { System.out.println("counter: " + messageCounter.get()); Assertions.assertEquals(messageCounter.get(), 1, getSchema() + ":server 收的消息数量对不上"); - File file = new File("/Users/noear/Downloads/socketd-big-upload.mov"); + File file = new File("/Users/yongchun.zyc/Downloads/socketd-big-upload.mov"); assert file.length() > 1024 * 1024 * 10; } diff --git a/java/socketd-transport-test/src/test/java/features/cases/TestCase27_smallFile.java b/java/socketd-transport-test/src/test/java/features/cases/TestCase27_smallFile.java index 0d2c77974b6c5f03f04bddb6045d95527476951a..1925e32f9ba8481025b9cd50f9e75c1392558004 100644 --- a/java/socketd-transport-test/src/test/java/features/cases/TestCase27_smallFile.java +++ b/java/socketd-transport-test/src/test/java/features/cases/TestCase27_smallFile.java @@ -54,7 +54,7 @@ public class TestCase27_smallFile extends BaseTestCase { if (fileName != null) { System.out.println(fileName); - File fileNew = new File("/Users/noear/Downloads/socketd-upload.png"); + File fileNew = new File("/Users/yongchun.zyc/Downloads/socketd-upload.png"); fileNew.delete(); fileNew.createNewFile(); @@ -80,7 +80,7 @@ public class TestCase27_smallFile extends BaseTestCase { clientSession = SocketD.createClient(serverUrl) .openOrThow(); - FileEntity fileEntity = new FileEntity(new File("/Users/noear/Movies/upload_test.png")); + FileEntity fileEntity = new FileEntity(new File("/Users/yongchun.zyc/Downloads/osc.zip")); clientSession.send("/user/upload", fileEntity); fileEntity.release(); @@ -90,7 +90,7 @@ public class TestCase27_smallFile extends BaseTestCase { System.out.println("counter: " + messageCounter.get()); Assertions.assertEquals(messageCounter.get(), 1, getSchema() + ":server 收的消息数量对不上"); - File file = new File("/Users/noear/Downloads/socketd-upload.png"); + File file = new File("/Users/yongchun.zyc/Downloads/socketd-upload.png"); assert file.length() > 1024; } diff --git a/java/socketd-transport-test/src/test/java/features/cases/TestCase29_downloadProgress.java b/java/socketd-transport-test/src/test/java/features/cases/TestCase29_downloadProgress.java index 2767245279aaf57d4c0ccbdaa93c9292b171870b..50282c457adc75d4a68b0254dc670fc2b4eaf7e4 100644 --- a/java/socketd-transport-test/src/test/java/features/cases/TestCase29_downloadProgress.java +++ b/java/socketd-transport-test/src/test/java/features/cases/TestCase29_downloadProgress.java @@ -42,7 +42,7 @@ public class TestCase29_downloadProgress extends BaseTestCase { .listen(new EventListener().doOn("/download", (s, m) -> { messageCounter.incrementAndGet(); if (m.isRequest()) { - FileEntity fileEntity = new FileEntity(new File("/Users/noear/Movies/snack3-rce-poc.mov")); + FileEntity fileEntity = new FileEntity(new File("/Users/yongchun.zyc/Downloads/atlassian-confluence-7.17.1.zip")); s.reply(m, fileEntity); } })) diff --git a/java/socketd-transport-test/src/test/java/labs/ClientTest.java b/java/socketd-transport-test/src/test/java/labs/ClientTest.java index dfc7eadf12f88e966061d5391ee6a843a5e1a2aa..079bba9dad2cabd1b374138c4dfb03e509ea03d1 100644 --- a/java/socketd-transport-test/src/test/java/labs/ClientTest.java +++ b/java/socketd-transport-test/src/test/java/labs/ClientTest.java @@ -5,13 +5,14 @@ import org.noear.socketd.SocketD; public class ClientTest { static final String[] schemas = new String[]{ "sd:tcp-java", + "sd:tcp-neta",//1 "sd:tcp-netty", "sd:tcp-smartsocket", - "sd:tcp-neta",//3 "sd:ws-java", "sd:udp-java",//5 + "sd:udp-neta", "sd:udp-netty", - "sd:kcp-java",//7 + "sd:kcp-java",//8 }; public static void main(String[] args) { diff --git a/java/socketd-transport-test/src/test/java/labs/DebugTest.java b/java/socketd-transport-test/src/test/java/labs/DebugTest.java index f44df1c7819d3d34901f76e3527ea979a97a3bd8..09cd84c2ae602e2e89af8b325c3e02be024fdb7f 100644 --- a/java/socketd-transport-test/src/test/java/labs/DebugTest.java +++ b/java/socketd-transport-test/src/test/java/labs/DebugTest.java @@ -8,13 +8,14 @@ import org.noear.solon.test.SolonTest; public class DebugTest { static final String[] schemas = new String[]{ "sd:tcp-java", + "sd:tcp-neta",//1 "sd:tcp-netty", "sd:tcp-smartsocket", - "sd:tcp-neta",//3 "sd:ws-java", "sd:udp-java",//5 + "sd:udp-neta", "sd:udp-netty", - "sd:kcp-java",//7 + "sd:kcp-java",//8 }; /** @@ -22,7 +23,7 @@ public class DebugTest { */ @Test public void main() throws Exception { - String s1 = schemas[4]; + String s1 = schemas[0]; BaseTestCase testCase = new TestCase22_ssl(s1, 8602); try { testCase.start(); diff --git a/java/socketd-transport-test/src/test/java/labs/ServerTest.java b/java/socketd-transport-test/src/test/java/labs/ServerTest.java index 44e9661aced68f84a9b67baab41696b9579f9429..b07f7030e9aac8913178c2d9d56b611104d30bc3 100644 --- a/java/socketd-transport-test/src/test/java/labs/ServerTest.java +++ b/java/socketd-transport-test/src/test/java/labs/ServerTest.java @@ -15,13 +15,14 @@ import java.io.File; public class ServerTest { static final String[] schemas = new String[]{ "sd:tcp-java", + "sd:tcp-neta",//1 "sd:tcp-netty", "sd:tcp-smartsocket", - "sd:tcp-neta",//3 "sd:ws-java", "sd:udp-java",//5 + "sd:udp-neta", "sd:udp-netty", - "sd:kcp-java",//7 + "sd:kcp-java",//8 }; /** diff --git a/java/socketd-transport-test/src/test/java/labs/StopTest.java b/java/socketd-transport-test/src/test/java/labs/StopTest.java index 5fbc2739b212c09f8e2ad7240e60b0a56d1e97df..10ce56c92099e6b10b125a43f61704712786332a 100644 --- a/java/socketd-transport-test/src/test/java/labs/StopTest.java +++ b/java/socketd-transport-test/src/test/java/labs/StopTest.java @@ -12,13 +12,14 @@ import org.noear.solon.Solon; public class StopTest { static final String[] schemas = new String[]{ "sd:tcp-java", + "sd:tcp-neta",//1 "sd:tcp-netty", "sd:tcp-smartsocket", - "sd:tcp-neta",//3 "sd:ws-java", "sd:udp-java",//5 + "sd:udp-neta", "sd:udp-netty", - "sd:kcp-java",//7 + "sd:kcp-java",//8 }; static int schemaIdx = 7;//6,5,4,3,2,1 diff --git a/java/socketd-transport-test/src/test/java/labs/cae01_bigupload/BigUploadClient.java b/java/socketd-transport-test/src/test/java/labs/cae01_bigupload/BigUploadClient.java index c7bf71cea8d0dd088d50466ceac2459e44bb9654..98bc0f37ab4e7989d059f62ebcf54a7e1ec8ee4f 100644 --- a/java/socketd-transport-test/src/test/java/labs/cae01_bigupload/BigUploadClient.java +++ b/java/socketd-transport-test/src/test/java/labs/cae01_bigupload/BigUploadClient.java @@ -16,7 +16,9 @@ public class BigUploadClient { "sd:tcp-netty", "sd:tcp-smartsocket", "sd:ws-java", - "sd:udp-java"}; + "sd:udp-java", + "sd:udp-neta", + }; static String getSchema() { return schemas[2]; diff --git a/java/socketd-transport-test/src/test/java/labs/cae01_bigupload/BigUploadServer.java b/java/socketd-transport-test/src/test/java/labs/cae01_bigupload/BigUploadServer.java index de178052e532480468dfbf1007145bc47f59f902..cefc1ed4a966ed22fd70e7b762c745609bc0cbd4 100644 --- a/java/socketd-transport-test/src/test/java/labs/cae01_bigupload/BigUploadServer.java +++ b/java/socketd-transport-test/src/test/java/labs/cae01_bigupload/BigUploadServer.java @@ -22,7 +22,9 @@ public class BigUploadServer { "sd:tcp-netty", "sd:tcp-smartsocket", "sd:ws-java", - "sd:udp-java"}; + "sd:udp-java", + "sd:udp-neta", + }; static String getSchema() { return schemas[2]; diff --git a/java/socketd-transport-test/src/test/resources/ssl/ca/ca.crt b/java/socketd-transport-test/src/test/resources/ssl/ca/ca.crt new file mode 100644 index 0000000000000000000000000000000000000000..f81efb3d5196c7367046976033b0367d0bc6c7b8 --- /dev/null +++ b/java/socketd-transport-test/src/test/resources/ssl/ca/ca.crt @@ -0,0 +1,27 @@ +-----BEGIN CERTIFICATE----- +MIIEqjCCApICCQCGJE6498YPOTANBgkqhkiG9w0BAQsFADAWMRQwEgYDVQQDDAsq +Lmhhc29yLm5ldDAgFw0yNDAxMjAwNTAwMjJaGA8zMDIzMDUyMzA1MDAyMlowFjEU +MBIGA1UEAwwLKi5oYXNvci5uZXQwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIK +AoICAQDUDYDTXJeyAycohMvsEUdYytMLsPQiRmOSxVu/jxNlbOoasXaKwLX0U6/f +/xfAWlR1VW3TU4TgRBFWGpXEXTnxiVaynddiVNzxt4Ja3G+IZ9YvOxR1kraWa6cj +6e9DIWPQYXC+HZgYwUGNUpxEzBhs4lGiZjBTOn/Ys9Xa9ylSFHpbvck5eS/cQMQL +Iw1EZBd75FV8vCZgzSGTP79OJCE/F1GHRlsg2KZVh3FTvH+bBqoQ7MCS9StDPffR +o7OwbFglFfOfi4IHlGASSSSssJuyJLDAbHTSFTaoTa3uhzFiYGJu1/TSGGJuHMun +lkLs14Y5OMYn1pMVRceTnVGnTmM53B0NwEPByNhjakqog0o86e9CJ8eELWKOxUQe +g5WOk3rjvgZCPO6eH9Ijtta0ZFLU+JhXyON1V8xXHZZFF0vBeLqsPubcBh0kqpYK +Hx3SEW74H/4pjCG0mM9lM5EYRrprQYHJBcTxGh6Sl7KXQYSZhdDyHG40x2hl3ugF +j6hP5iohZv7jjOlcRiLXLvXuSRk8Orf+avdYvbxQYz8Kgj9oJZf7zFMJ2vMix7v8 +GEGL6zjQz7NFzAQfHFmyXTUle0DMlJpXR3ICt/CQuVpQVLQANlw+/hjs6Or28c1U +0ofMkN6D6TIaZMIt2CbG/iqdgSEQYjYAZbmTxxFfJfab+DJvtwIDAQABMA0GCSqG +SIb3DQEBCwUAA4ICAQCye9ICWsrj5OGWIfhZPFriR53MewPcWeuUDSH2hOeujDRJ +qQm5Bv4HBfIOb8rCpL4JFtT3H3ATH/E4Sc7BVLdEAWtQqnCYmqMMjlPEW4GTzj5u +qmlAzKfW8lNRebHH/qKACa6Dbff8hny7n2fxC8rUdOtIVViQU0UrUhzugl7yCOeN +rpRJPQOO6+LhkxuJf6UdhjozOU9ZyPVzLLyMcn/UGmzqHW2kn3ASkMPk2DjCP5rU +OQvWC2/dWUjN/nl9yMO4PK0HS14ArxRNw1kb0X/ONgf11uIhvxurHXw3dIbOfDwR +nIFzYVtiwxgepZsdD0R8qqUm1x0LUo/bJGzTzouB6cqe1ZATDAaeSrDVxR65AbJ6 +SK9eSnI+Asr3hLG9hVnir8Eijis9IsBH4buXXwdtwOjgE2TAEdKTBv1m5NlNQTsP +BghqdAl8f9O69248bZtla1s2eL5BvR22wcDf/0b+cRzxaWaZDgaklz0zpuPVqwPo +nmzZK0mgx+Zrr2gxLmGbcSS4RqLgOyu1HzzZ5tDuZPZV4U1jsoGNXMZdVDVncI6B +gHwcapDaBqMdVH9kTE5sMT+4/UrlPyqAoL+w+1ix+n9dgluNSuFjPaiVby+MR40p +6/Wqid8/R9jZ1qKUyL6adkDLEMpd/8d2dEh1r3IiJVAeAylb0YKVjmZVSiEQdw== +-----END CERTIFICATE----- diff --git a/java/socketd-transport-test/src/test/resources/ssl/ca/ca.key b/java/socketd-transport-test/src/test/resources/ssl/ca/ca.key new file mode 100644 index 0000000000000000000000000000000000000000..eef59222df00650c5dd7580fd14794b3b266fa65 --- /dev/null +++ b/java/socketd-transport-test/src/test/resources/ssl/ca/ca.key @@ -0,0 +1,54 @@ +-----BEGIN RSA PRIVATE KEY----- +Proc-Type: 4,ENCRYPTED +DEK-Info: DES-EDE3-CBC,2AC749C255B79319 + +Znz0rOtir2b5yBNB0EKJqQ1MmMu+Vi2t9nQiGrhqsnAVGQnjHK58akbQH8/nG/PQ +izTJD8dOXcfnFkTbIZKgzJXj5EwBjyuyDOTrg/98ZvIHeOFYwz3TTlqY4+zJutHo +n91PtsM7rBZ2JqU6eIG7VClATGru2VwQVKRzRSJ+tTLE9QdGfE3BgXWQ1hh3uIK2 +l6uu+RDb6/SeVrXLweVR2rDB/4K7hA8BXS+TfYSTYJBWlWBSGuganM+gifPtWu9q +GhDArCmhKrxxCSXqGHxWAMwJL397qGrkc+UBMUfwUvv2SMOR2gZ1r7D/RMTeTD5L +L2yUPvRbDFUd+naVoqqJbKMbPy+WuyTet5cieNR4tXKl6Pq2As8AiunM/WVBZ7HM +0D/qVfJr5v++6lE8A4YFfPQer2M87J+r0TY9WpOGonzkaHAdH8tYQ4g3gGcd2LPe +gnUkouvGu+27pkWwm3VKRgBBUB+5tLh+GsaL+kfbaNrDlJsJWl8Q3j4QpLPKCV4l +qtr1pgx6TQbPAHiRxwHsR/K+jqqoi+l9EfBgIuS9hAg0P4O2gBOVuPHegT2MxdIy +a5zVvb7dJiBeelIcp5KeLBUjmny7Ewgy4NzrIYByK3/OOc/tbBJXeTAOMTfKvvFc +osUeDEJvYeR2u+UALhwLKxT5XJlizoCkQQXr9Yqxpa7oQNNCizqUKOpNbJCF38U1 +vQognTaosz1eadWUNa3zh1CzBt8yuk1rNdCGzPKPh1sX97bjzQZARPegDcD0iZmM +nE/0+n+ahA06gtskli+1cWTalxy9j3+P1J/QG9UPVBswxWGIHvJwdEOGIrDgk82b +rClPOiaL3Vcu1XxepdrrSYG3z/sKHoeIqf7Lz0nkfCogjAn9thuLxYQvrDCI2/b5 +pnsImHfTlS16frQUcpnkovbZZvT8SjLH/ocYusU8SNw/aqvP4fCyZUf6y8JqIkbK +qpJG08EUfIlJvRlfn1nCsVLLj1ti9n2vbgR4iuSgWQdnx1Xx4UI+W75cGBWEsOX1 ++E2ZdfGVtNawA6R2BdshW3rzgud2vM9zYq/CgGTdDcBzXuA4LHHr/VpPDP5Ml2RV +nK012SI2MG6kHcmi0eqTySXo5P8lo7Ht9PpZSgnrYArvKLb+tNJG1Oh27zjzQ0JU +JAerLquc0WbCxsA4Hc3LVB2w1uexUUSGUHAntCI+KmxVy7dDmzf79d9jTb3N+uCq +fFM9GmWX6QI/+5Fn+XKD0jZ8QqrZQDvMGOKozfzIcbvsnDVtKbdOb/NMUPTuvWpP +MY2Idp+TorWNyk3bjB+aqzbMb3kJs5tMI/ddDinbjCQMR0YN2N+JP96szNTtewhj +wRs0E9b3eekjhZCDQ+VH+ZO4gYQUKLGC0D2WCqV6Ns4Df1d78mlLm5W46m4OASpG +n6KSr/k/vnSF51IHvQDyJRaYZNVYWyWXfiW52viAcNBN3sJaFwbn8Ir/E+CXUZ2I +qGswwtUF+CBiLG9ZF1MGkM6zsJDCJTS//7CFLEQTpzjlfnccSVZBzh1drgduR0HY +gZaZYqgMyHR0iIUTfpb/ahF8YEDk2FIX2BVs8eJ6SOSF2wOn+nhSEoSPFAD9/pWs +eNOqjWo0CJvBE3gZiIRqP82D/mjRk8p2Ajfol0hqyeH1sFb/cmDTkp0AX9w402cI +h5P3e1WUELI3Wkkakyg4vQadG+OBU6023XLHk2X/pqsb833H4eG99B3H9T2trwfL +/XeXxHeDKwYQeAsVibS+wD+cOaqSbvVDoYGahkfpfC4x1vNcKE2k5pCzApytC0g0 +LfBwGiqkoAJXpH+iOcAlUy7hX0pqbcr1iGvblnFKRH/yMr16i8XWhr+uZednm/pG +04NW6GiOz4d5S95S+vXDpCbndFPCPZ9thkqjY35+JameSSwx+u2eihVTtBRNxI2j +9G0Q6ewL1T6ioZ8nydBf3Fjd3Q44xqEJIgsDd25VLLJ6XCn2rdBNBG7XSBC4tlJF +5xv/xfbwmBXtlgUPuPINnqXWjH/8w7mvaMCwCjEKvVYC5WliEMax8NZPWLLk0Y7v +WDVAd94K8g7fUPJB4tsq2ITVtlBIMFAhBKlGDQZApQ1bxHd7tYgL1c92k0H8Nkqd +bZ6f3yBD/ZqtCawsYPbRMXQ173FU6xwzJpIirPFGp92vC9JV9BBF9UTWkoYI81St +8e/cx+TbBkCm1u4Jaj7d2ukZvGH0qejes+XnbJOZk15+gkudBWOQUX/95YiXvFjp +wyxfITQjidbHbwqlE0NH1ghq7RRALMwO0ZFqxgFO8rAGQAMUtGcBp7CpeTVDekIG +2+GD83xEe23BeAOl8oiaqpltM0N2tm571IEQdTdmxcmIYCDkeTo/LgTKkl60euFv +CAhCX1FhHhIQUvHu/+K2EXHWPuNO7Wk/Q8qGYhLBToAZZUv3e5YPmdFyLO5Suo5v +QIKHjYfGeqQTUNYDq7V6jxSjRpzOr+eZozsIMsVflb+6Lf4VU1UljHhQbhjR90oQ +BKWjyvu0Z6tVvN9e2/PulA8eRDAgd8qRWykilPTYGaoY3hEu9MJ/TlPuhOPZgDcp +60jfdlbmLQTR+5Cb7x7QNBlDxW7vulCqeV/dHffy4jg3C9mMqcqwfrK1/xoW0z0x +iI2b1O4wsKCZf2JnKu+1Kp0Oo9yTkdhyZM1LY0mCE6JDaDWpODC8uOPUtUW9bpR7 +7R1Ppz/fds83CP7HKbBHnaFQFeYhLxVnzGhtA5tfgDq9Tvs3bAOBVZ5iwe0T5ymd +53+QtITtXzU09mJMub6HTEMt+8HgwpeCfchXgLph/6DJNA5w2rg3h0GugFCYJbpz +RsMK55EqcwQf4byK2WQxXnIwrLfv2NjageENfSsoMYG06kgeV7dWrh61bh83Meod +DCrAq2X3zPjzJjt8fAly2Jr01rY+Jegh14xURieyIUz3buvMsK96KuC4usqlAUi6 +W5K70gvra0jGFQBsNWa1TWbQ7OgyfNpfgoPY0TWGUcIAXljoXhNmkD3FEazFxqBI +ymB4hDOILIuU1dUZvqkaHxHglgYzWxb4RiNpI/VLa0qZIYgK5abvKE3NhoXA5XZS +LIPHdVLcVnkd9N5K2N30baO2G5X3mPc/2LKD2wSee5YUxMpbWdHHYVHdusH+y18Z +-----END RSA PRIVATE KEY----- diff --git a/java/socketd-transport-test/src/test/resources/ssl/ca/client.crt b/java/socketd-transport-test/src/test/resources/ssl/ca/client.crt new file mode 100644 index 0000000000000000000000000000000000000000..efd925efd30849403172ea08b4f3a1ac0a38dfb2 --- /dev/null +++ b/java/socketd-transport-test/src/test/resources/ssl/ca/client.crt @@ -0,0 +1,27 @@ +-----BEGIN CERTIFICATE----- +MIIEoDCCAogCAQEwDQYJKoZIhvcNAQELBQAwFjEUMBIGA1UEAwwLKi5oYXNvci5u +ZXQwIBcNMjQwMTIwMDUwMDI0WhgPMzAyMzA1MjMwNTAwMjRaMBQxEjAQBgNVBAMM +CWxvY2FsaG9zdDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAKNwHHWj +//ryfGh5iuS+9zUTlh4miThghV+mPWpDHb5xi4xYtx+e+OR9oWnaYfecRRnben8C +0qx/KIv5atGNQGZvn+opCiLYvHiLFOXO28XXgwbX5Sr6x4+ekc3nvRjm8SkgBJst +mclZ5203gIrluUnMbUk6OrmLtrrNNup4aT1ZLt87Ox2RjzgyN+g3Py1i7r3BaLGS +hIv4fc7epF4YIA4DNNcI79TLr73jovio0yj/ah+L5JpXjU5eeCWJFCMR/0OdaVL2 +KvoscUSxzG6G84+AzU4cQ8oyQwP5qeL7ocitbI93KBjZ4Reui/V9OlIw+Dw7FMPv +0DjFeKy0rmdS2yIbVf6Vuwue/02WLgjo86sZSAHo6AZSwhP7a4+sDsHQoiXZtazu +2H7Zyd7dVABQz5q6TbSDEHdGvQVgBlApeBCkmSpmlImNjad7IaR8z9M/JjrWKhoJ +KzZvMmmUAe990Y5NS2fkf/4FKk10El1nFtEL3ZIJtM2kQ45sTL7KmiOXbfsvHdzj +0tTOk22g+d3SungJcUyAY5750zoG+QNi2ysLyaNZ4yZ16oIxhTPVphmF0y73acBY +DUZj+Qkn3vze8EYqZQSYiLFGkXVzLsVrD6LQ+66VmhSvMGOuco4bsiD1mYqlsMYv ++uzo68DE/TT8bPuHGszyFhAcCQvkv3Me5ZgdAgMBAAEwDQYJKoZIhvcNAQELBQAD +ggIBAGYZuIpXa7Hhm75b8AUUM/CFPm6fEeQsUHKzJAX3xgCtiZgLW7J2YfBbtqBv +1mAseKkY8/ndyw4YHAr9czp7RzELL1AYieJcGTgdfTKJmESn/rLdyMLCcKhFt+fA +yXBi/oLbdeERsFXnvTXqb8ogHjXRXQMfrn0WukAKcxEakZJtqveU0K8WbJemQP6t +6GyVNtABOphN6FfdcniDgpGr46v4gjXi8T4DEozEOA2jdTBC8XhcPZTR5QZLD/ZO +Ut74TUhKgL2G28KYJA5eI2pZoomMBWREOoSwWlYQ0qw8yOVXYDUmWI/5WTXh5GfR +vfKZpCz4vVpMu0pgpAj5XyjX1DhkYK+HKtytOjT2FpphsAaJQht1yi89342nUfdR +mCSyT2dbTE+04BN3Xi+6ph5dVvs7bNn9psh/6HVZnjEvagf1qV1yTeIftS2kuuKd +jctX40QM2yUN2UrOASeAvY/WVCfvqoW4YBDUCYDcsLADxGtIj0Z1SLWSniKqniCN +/JVdWtbxogelKhdewPDoMznmH8fGOR3RDy+CZnroRfFN5aB51PmILyoInF1wttVD +SRNPXyc0jIF2PsqBBk92ZSl40my2cCpt30HLqnLd2WRbaJk/WoaKzjkvehqX6UPj +6pJa0axPnyzes5r3XDzhlyqZPOZXqFRzHloLGusRwr6tscmm +-----END CERTIFICATE----- diff --git a/java/socketd-transport-test/src/test/resources/ssl/ca/client.csr b/java/socketd-transport-test/src/test/resources/ssl/ca/client.csr new file mode 100644 index 0000000000000000000000000000000000000000..3403fecb2740fb4b3685409bf292c958012334a7 --- /dev/null +++ b/java/socketd-transport-test/src/test/resources/ssl/ca/client.csr @@ -0,0 +1,26 @@ +-----BEGIN CERTIFICATE REQUEST----- +MIIEWTCCAkECAQAwFDESMBAGA1UEAwwJbG9jYWxob3N0MIICIjANBgkqhkiG9w0B +AQEFAAOCAg8AMIICCgKCAgEAo3AcdaP/+vJ8aHmK5L73NROWHiaJOGCFX6Y9akMd +vnGLjFi3H5745H2hadph95xFGdt6fwLSrH8oi/lq0Y1AZm+f6ikKIti8eIsU5c7b +xdeDBtflKvrHj56Rzee9GObxKSAEmy2ZyVnnbTeAiuW5ScxtSTo6uYu2us026nhp +PVku3zs7HZGPODI36Dc/LWLuvcFosZKEi/h9zt6kXhggDgM01wjv1MuvveOi+KjT +KP9qH4vkmleNTl54JYkUIxH/Q51pUvYq+ixxRLHMbobzj4DNThxDyjJDA/mp4vuh +yK1sj3coGNnhF66L9X06UjD4PDsUw+/QOMV4rLSuZ1LbIhtV/pW7C57/TZYuCOjz +qxlIAejoBlLCE/trj6wOwdCiJdm1rO7YftnJ3t1UAFDPmrpNtIMQd0a9BWAGUCl4 +EKSZKmaUiY2Np3shpHzP0z8mOtYqGgkrNm8yaZQB733Rjk1LZ+R//gUqTXQSXWcW +0Qvdkgm0zaRDjmxMvsqaI5dt+y8d3OPS1M6TbaD53dK6eAlxTIBjnvnTOgb5A2Lb +KwvJo1njJnXqgjGFM9WmGYXTLvdpwFgNRmP5CSfe/N7wRiplBJiIsUaRdXMuxWsP +otD7rpWaFK8wY65yjhuyIPWZiqWwxi/67OjrwMT9NPxs+4cazPIWEBwJC+S/cx7l +mB0CAwEAAaAAMA0GCSqGSIb3DQEBCwUAA4ICAQAaFKq485ClGj16jr6cYRLXsULT +MRpa5k0bvMf5k98PwHrs22s/M8ydVlk8rjWb0uSYGvyYitT8cIqPH+i3rC/p3K2p +IN9H+l4sgv2dDV86HhBzYfOqBmQ1gz56kIHBL78BaF62pXNIZE1jHOhbZhlxdRnN +hukHWC3mRU3VsYDckzkiUmDpfrIpvA+PCf4JMPqyIxd7RHZ4lbFBWGk6x8a01EiO +SYOPBX370q9wZI5hbFwtu+DYRlfXu0M6EpRpP5XhwlsZNC4v7WtD1pbOpoiSRY0a +a8YWsqtO7inxI2SS9yDV+hOSNHuldfocvvvJxHcJpLetkSpowXcpwfzNVrDM1bbs +CZI7i2wzA6vFLQz+d2MvBT7errWlhPuQNy38MScrPoV8s21IEl2flu+s9uGs0HWh +CrYiuCQ01/Ow68krrlNSaQtcVqIu3BziNn1FSt9S/V5sebSvkR6kqEGRs9oB3AMg +eEwblh0f5UCd6TacWz2wy3rIGqmTQ2EA6X3g6sW/Fj+BUtpGwJIovnrnUrq6qI3Q +GrtP7NlRsZpXwDnk8hqlCd6yeNb6L+jAJvtj26/HhFz1/h1QILqNqIL5tiiX6mQE +CFub1HwR3AlUPq5OOKDFvjw8fTMaHORX7AEAUBmEqA75AExjzt+XACfku4OHFxdc +9SbC+D9hRkk2S5Xt5A== +-----END CERTIFICATE REQUEST----- diff --git a/java/socketd-transport-test/src/test/resources/ssl/ca/client.key b/java/socketd-transport-test/src/test/resources/ssl/ca/client.key new file mode 100644 index 0000000000000000000000000000000000000000..b5cac760a2d11d3f3a5dfc0ee0afe6c05be652f6 --- /dev/null +++ b/java/socketd-transport-test/src/test/resources/ssl/ca/client.key @@ -0,0 +1,51 @@ +-----BEGIN RSA PRIVATE KEY----- +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 +-----END RSA PRIVATE KEY----- diff --git a/java/socketd-transport-test/src/test/resources/ssl/ca/client.pem b/java/socketd-transport-test/src/test/resources/ssl/ca/client.pem new file mode 100644 index 0000000000000000000000000000000000000000..20cde98c60060c06b65eb306a6686188bd2cd236 --- /dev/null +++ b/java/socketd-transport-test/src/test/resources/ssl/ca/client.pem @@ -0,0 +1,52 @@ +-----BEGIN PRIVATE KEY----- +MIIJQwIBADANBgkqhkiG9w0BAQEFAASCCS0wggkpAgEAAoICAQCjcBx1o//68nxo +eYrkvvc1E5YeJok4YIVfpj1qQx2+cYuMWLcfnvjkfaFp2mH3nEUZ23p/AtKsfyiL ++WrRjUBmb5/qKQoi2Lx4ixTlztvF14MG1+Uq+sePnpHN570Y5vEpIASbLZnJWedt +N4CK5blJzG1JOjq5i7a6zTbqeGk9WS7fOzsdkY84MjfoNz8tYu69wWixkoSL+H3O +3qReGCAOAzTXCO/Uy6+946L4qNMo/2ofi+SaV41OXngliRQjEf9DnWlS9ir6LHFE +scxuhvOPgM1OHEPKMkMD+ani+6HIrWyPdygY2eEXrov1fTpSMPg8OxTD79A4xXis +tK5nUtsiG1X+lbsLnv9Nli4I6POrGUgB6OgGUsIT+2uPrA7B0KIl2bWs7th+2cne +3VQAUM+auk20gxB3Rr0FYAZQKXgQpJkqZpSJjY2neyGkfM/TPyY61ioaCSs2bzJp +lAHvfdGOTUtn5H/+BSpNdBJdZxbRC92SCbTNpEOObEy+ypojl237Lx3c49LUzpNt +oPnd0rp4CXFMgGOe+dM6BvkDYtsrC8mjWeMmdeqCMYUz1aYZhdMu92nAWA1GY/kJ +J9783vBGKmUEmIixRpF1cy7Faw+i0PuulZoUrzBjrnKOG7Ig9ZmKpbDGL/rs6OvA +xP00/Gz7hxrM8hYQHAkL5L9zHuWYHQIDAQABAoICAH+Ja9vtJ0LnWGeaeOU5k+Tq +LNnITooc39cc/Y3fY+WJ61CQpg3Z2vVKh9v3Wz2Cx3V/DJ7yT/3lmHlqH434gMmu +z4ZFkjBRGvmh5qPSATPokcmUTbN1UKblIXghHzHAfW4PGykQs5IpQuu6ROeejjFl +gd6DvvGtceFhZDohzlXeMzJloSLYxH8gyPm/quA69HxE4fK3mBE1zs7QdEks4E6u +99vZkHVooPI4IaOS8nxqm6CUZMaADbebBnyb9IfNcnmL63WevTjN13G4oQOa8ZMI ++qy6Z7fv8tW2THjgzYWwtydY34RM+VamkXb2yrz6k6tEm1au27iBeEKlF/du86nx +P3IMyw31NFumXgTdPXFffhMvt34q7j2SkqZeznW6wdupwqP8Cz08YA8zfCWVrMCD +HmwBRnUnPEDRSZ/Uy4SmJcYYbnEi3HmdkSrMO0c0QTvNhTxRxf5Rta12BG6SmLGK +p16diuEXLeZuUECHxUBO9tm7WM05GIhQc1H96wR5dC5ecPvYIcaJzN8+dBtQzApJ +9hbHse7AsJYu7xWCa5LxfJmSz+DDCmSqF3Jz3YydHCrVoeYgVSpyOnuwWOzL6vxO +FosK0aR4GveMQfrQcxMUaVYl4Yv2JW6i9iPS1qJE5xOL29Q2CvlDL5SZiwR8Wa7R ++xrIBKlIXA5vEl25C4OBAoIBAQDWSK5qb24lIZBQy6OH/JvRE3fIsnu/tI7qG0c6 +4ZKXvJkFcsO6XARTYL4Dc7okVQy825/V5dFLQkCcVBXCTYGInK6NVfrlEsNwLHJM +OSvLIVh3toW4o5dCWYsEpwJ/BDN7Q+NBng2f/6xYWe1NV1+aFc2slWyYrOwG7MOv +B3gMBXAY/Z6dKhj7iPBGlD7WVroOiFySb+YOafTJLXhpmfpWbLhjZ3uXkplL1rtC +wlDqKas/ldhRskCLFdX5dAfXZleDIsDW8VNNzNDXPOs2RhyUNLtdbxe7h82EgCGE +KUbl8hBTPrlctzVmgpwyQjeApbQBpT1fbmZRcrK0Z+DzUUX9AoIBAQDDQWgdkvQe +nUu6ABoBcD8MI4bMS0bk8fScsrd5BsHrkxumj+vFAbSrQbMztn2ZN6RAVonVPEbL +T+EBGEFPERUa+6WH1n6X1TKNlZvstbuVb3Y3LlhqXjQeSQ7MDj/cVMPep4QhkOri +L4WcS5K+0bLjh9cDptzDap3YiNIb+S0fHDx7lMLX27vuft0RGIIiFM5DjT4rtasp +HZlSF5aZepbvmjQBQ2PFoleNYlxN/YkxEge9wDwhbifvPRV7ojrpJ6XaphlcTRcN +ISGd+XStU6A4TMbIOG8zMd2oxjRNW1gEw9K/0I28BE1fDkYziFtPTmycWdmfYeQu +/H38UCiRBSShAoIBAQDGnZ2Up+4W2pJSYT4VSI4Ab6QCUXUkTq58zYXrTLO8kyHe +i+5haPLVeYEF4BlznaVt07/F2ftxX1pVzBZS/9YFkvyzojMoaojeC0Rx5Df0UtcW +NwahCnikFi0lxcspgfJZ2aXl5yLH34qWZdvvaQIC5xy5T9LVfMpU7NXAARNDSTMK +5uFC2YdIdjgHo1bPApn36GqtjKxXRdyPL+dBMmh3/NO3x24mIsqWIdV2XnfzY2YI +TNKxfqAWisnHKsYt3/1TXj4RvKMzJJmaNyvpJXlN4cadJuB/gLN8ker+/edqMUDy +d9wF1QbZGky+xON/CZfcQpWtQ73w1nhPgU1fGkDdAoIBADP7reRxw1yDNC4I6OOJ +Jr/slW6+e9loMV+mlQI7slUtjScDGhoRIjCWBUe3RikMj0Yxw/BpY8+tLJJGCt0q +Bxxv8tn/WSTDNfpL4n9awt4+FpMKW6+19No7SR06jfXy+1LD9oGZO2+Mh13dIOx8 +l8vL1oq6WfwM3olPo+CerkyiD9g2+sjNT3NngyOSCtNYBrIlYG/ypecEYlVgwk+K +O7T+sOnFL0Lmvbh+f2SkI2pVCoqSK3AbC7a95IJN5rE8RQO5RPc17vUn5PNR/qZG +pVlX13Rm0fQnSoQsgLA3qW9bUziOJa3w10h/XGFL5ENw9amKok20mjOINWJ/VM2H +OQECggEBALSyDT4dMoENmhgWlPYnQFk0ulYtBQxGb9GSd0Osd+JB/KYs2UMxJlyM +3dnaU2wc72kuwnPuUGE1ul9uhHmLX+j2AOFUHciLQN4ylBhgbKHa+KgBLhYE0Sil +6MIa+fcdR3bTafADBxQwNyvDb9VYTmvLeVmQtcqaH5YbAaVqLS8K+WE7KuI2JOpy +PlLnCg8O+BxCU15juQbAnzPGCbKx7gKiyM/iRotm4N3uhCP+MhP+hfv1nxPr2Dbh +qDhWpNM2cmLmNsQJ5OcLallWp05DUk9FeG6uuLnDT/F32gUMa8PJNr0XOOVjtDEY +sykZGEwIWilrL39xo49BS3lEuDdXkKI= +-----END PRIVATE KEY----- diff --git a/java/socketd-transport-test/src/test/resources/ssl/ca/gen_ca.sh b/java/socketd-transport-test/src/test/resources/ssl/ca/gen_ca.sh new file mode 100755 index 0000000000000000000000000000000000000000..20c09e13da6ecaa434685c9e43186ff4d4d759ea --- /dev/null +++ b/java/socketd-transport-test/src/test/resources/ssl/ca/gen_ca.sh @@ -0,0 +1,38 @@ +#!/bin/bash + +## reference https://stackoverflow.com/questions/37714558/how-to-enable-server-side-ssl-for-grpc +echo Generate CA key: +openssl genrsa -passout pass:123456 -des3 -out ca.key 4096 + +echo Generate CA certificate: +openssl req -passin pass:123456 -new -x509 -days 365000 -key ca.key -out ca.crt -subj "/CN=*.hasor.net" + +echo Generate server key: +openssl genrsa -passout pass:123456 -des3 -out server.key 4096 + +echo Generate server signing request: +openssl req -passin pass:123456 -new -key server.key -out server.csr -subj "/CN=*.hasor.net" + +echo Self-sign server certificate: +openssl x509 -req -passin pass:123456 -days 365000 -in server.csr -CA ca.crt -CAkey ca.key -set_serial 01 -out server.crt + +echo Remove passphrase from server key: +openssl rsa -passin pass:123456 -in server.key -out server.key + +# 单向认证,client不需要生成秘钥和证书,只要提供的 CA 证书即可 +echo Generate client key +openssl genrsa -passout pass:123456 -des3 -out client.key 4096 + +echo Generate client signing request: +openssl req -passin pass:123456 -new -key client.key -out client.csr -subj "/CN=localhost" + +echo Self-sign client certificate: +openssl x509 -passin pass:123456 -req -days 365000 -in client.csr -CA ca.crt -CAkey ca.key -set_serial 01 -out client.crt + +echo Remove passphrase from client key: +openssl rsa -passin pass:123456 -in client.key -out client.key + +echo Generate client pem file +openssl pkcs8 -topk8 -nocrypt -in client.key -out client.pem +echo Generate server pem file +openssl pkcs8 -topk8 -nocrypt -in server.key -out server.pem diff --git a/java/socketd-transport-test/src/test/resources/ssl/ca/server.crt b/java/socketd-transport-test/src/test/resources/ssl/ca/server.crt new file mode 100644 index 0000000000000000000000000000000000000000..915fd10b210fa4cd571d4a23d1aaddf9dae484e5 --- /dev/null +++ b/java/socketd-transport-test/src/test/resources/ssl/ca/server.crt @@ -0,0 +1,27 @@ +-----BEGIN CERTIFICATE----- +MIIEojCCAooCAQEwDQYJKoZIhvcNAQELBQAwFjEUMBIGA1UEAwwLKi5oYXNvci5u +ZXQwIBcNMjQwMTIwMDUwMDIzWhgPMzAyMzA1MjMwNTAwMjNaMBYxFDASBgNVBAMM +CyouaGFzb3IubmV0MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA2OV7 +MkwAsbEMo97GytJL84bJZQEv8U7DXbayQupK236nYePdtnx9swZubWN1XbR8w+ri +aY2S04ku8eP8z9/ldX6KiJ9oAmdYFoAF0pNDx47ZhEaHEDyPtccn8IpHj5mMtL5+ +d07jf+0YH8SOhDJXCWR8c+k+srDMsZnP6yP4+FFRJq/BOn+xwxg1L+yA2d9Qsir3 +1MKkfP68Qd7zOgDYz4t4o7EJvEyFePTJjbIOzo9d8EiR3lUpKlhE2/bKf7Up8WsK +zJySOYGWAHnqrE43L9fzXhkGGwrvyCHmklxZ8IAGnqZ5Lj6XYhKJX1z+wcbYMjzs +X2bH5tIqUyGh/zsV9MExSzhW5iXAZMfzlZZizRRKliaItWEwmN7mpvond630WYkR +8My0nVlabQrvPxNv8P7iVa6YliDfpFR1WHSbwmRsxV+J42Ap8jyyOjneU5dztQxU +bfRUCpVMQaz0X6SrY6t0JYiwJM0nHip8W+5eA/EBaG4Xcj9ieLkKnYaABjpG3TMg +7+wPmLwqtXlCMjVtY+vWWTkvmuTPh2+y8Z4s0pwNan5WQRU3SZKAU2xi24VfJwr8 +AkiTRzZ9gLCWMu38C5iY1p75AGUXyhynO1cJdcGB3G8uPlzw0s/6Bimr1LmKHrd+ +G55OaqLtQZVoSdsgbQXNVK95JsaZ5SEjasOhqMECAwEAATANBgkqhkiG9w0BAQsF +AAOCAgEAWc6SrlxgV2fqllmOq14zBMytyj9s4mny5FNPfUbgh08bXmoAAIiODhUj +qaJFpweC59Od6kl0PuFgHhQDdsc6xTvP8WvSXoyCad/en6uJdzG+4Cp0AxcIiETd +HmMY0WW51k5p6m7dshPbBpWZ4ESMmRhMO/A+G44KaFM4/lQSalRrTvZjVkF+GlV0 +dQbIP1/oVmuJIQGCmPxs062UHxSUM+XG0XstBZ+y66X1irOb2N6uHzZhBngYIaWy +IU8+IUxO9TVcbyo7zUuydE25qKrrW0A+Zeb6OSQZa9olnKJAU8KZh2Qz2u3tUAiY +TxkEi/IsADUNj5Oqfe/FcYXwWQjZj1ZJaztudoWqeXv8iGQOBsAsTSpvxi20TOil +HtIn10UoPTc6gIM/x/2JJu8xQ0NiAAy8g23KxJqBkGiHrfdyVxo0kBQpnSxnQjO+ +hO8zeYDbnAzINzsyjYlSdif+4ZtVdDJSUVvN3P1h6DbPZCHs+86gb9FVIQBZsN0I +appZbXqO/QgyzfVn0d6512dGEkeDHh8rCZZjbTehiWvD0v4iWqzfb8DxJMauIslD +na0afd2ZPeAWQFq9PIfk/xUc7BXW4XtnE0T6y57+gJy1OwfZSKKcM0KrsUYKQKku +UsqztUB8OPIKKeUJtefxE9q5BDjfih+3O6fjl7ritqol52BW1O4= +-----END CERTIFICATE----- diff --git a/java/socketd-transport-test/src/test/resources/ssl/ca/server.csr b/java/socketd-transport-test/src/test/resources/ssl/ca/server.csr new file mode 100644 index 0000000000000000000000000000000000000000..cd332858fe8a83baeea14157b348be232bc0f0db --- /dev/null +++ b/java/socketd-transport-test/src/test/resources/ssl/ca/server.csr @@ -0,0 +1,26 @@ +-----BEGIN CERTIFICATE REQUEST----- +MIIEWzCCAkMCAQAwFjEUMBIGA1UEAwwLKi5oYXNvci5uZXQwggIiMA0GCSqGSIb3 +DQEBAQUAA4ICDwAwggIKAoICAQDY5XsyTACxsQyj3sbK0kvzhsllAS/xTsNdtrJC +6krbfqdh4922fH2zBm5tY3VdtHzD6uJpjZLTiS7x4/zP3+V1foqIn2gCZ1gWgAXS +k0PHjtmERocQPI+1xyfwikePmYy0vn53TuN/7RgfxI6EMlcJZHxz6T6ysMyxmc/r +I/j4UVEmr8E6f7HDGDUv7IDZ31CyKvfUwqR8/rxB3vM6ANjPi3ijsQm8TIV49MmN +sg7Oj13wSJHeVSkqWETb9sp/tSnxawrMnJI5gZYAeeqsTjcv1/NeGQYbCu/IIeaS +XFnwgAaepnkuPpdiEolfXP7BxtgyPOxfZsfm0ipTIaH/OxX0wTFLOFbmJcBkx/OV +lmLNFEqWJoi1YTCY3uam+id3rfRZiRHwzLSdWVptCu8/E2/w/uJVrpiWIN+kVHVY +dJvCZGzFX4njYCnyPLI6Od5Tl3O1DFRt9FQKlUxBrPRfpKtjq3QliLAkzSceKnxb +7l4D8QFobhdyP2J4uQqdhoAGOkbdMyDv7A+YvCq1eUIyNW1j69ZZOS+a5M+Hb7Lx +nizSnA1qflZBFTdJkoBTbGLbhV8nCvwCSJNHNn2AsJYy7fwLmJjWnvkAZRfKHKc7 +Vwl1wYHcby4+XPDSz/oGKavUuYoet34bnk5qou1BlWhJ2yBtBc1Ur3kmxpnlISNq +w6GowQIDAQABoAAwDQYJKoZIhvcNAQELBQADggIBABjTPOBpuDmilc/h2SjZKAz/ +EltfxKyF8+HUSFitFViYZA2SYJvcRuyVNwrfDyl/E4Tq4eCcytdQPZDqQ8oU2Wre +9kFhxQaSlw0eSuW2bmmYfAsvdp5YZZpN0p9B7uSc15MQG4pN86Inoa6H570ugUal +2TK4uEmNlK2Tw6LJ6M20o4WCi+1zXwwtKT0kS7WIOAZE8raGa4/QlMkZevVf7huI +iTKxsDaaExQJwczUARftAMLQcr+yWNgAZtdfCGT5paO0RzHlBSeonhSChGxojzxE ++W6DpLEUKFsqxuJGuuuuctxLXsrHHzpUqfoA6VQ9s/2vpYiXz4bibbgD3vd6pPyg +Mxiwkfd6pQPJPY1wx5OEclfngdz+TQgs7UmAZKJhgddxR1JYfZK+2blzZiXL841n +4J8kQTCWskYX4eZDkJ1M/hPD4WEK+/hdGkS4pg7JlTZMtbh+oGNDeR8CotORn69g +7svfFy+lnVXdbhR6CuIVqPbePCf04T4lrRNd1J6MHXbps/W2goYWQ3F3J5VomedO ++G0vSrlGHfXgUOMhuxmvv6fQDf1nwthmluceZv7H+uDDB7OnnM0jebSvqWOfZzXq +1bIdpFSh2DGJ9+ktACgBOzhQSr6NdLF+UWOQtjCogAXp22hpp1jMYhJuzPADSztU +t6bApB1XIt8IvOeCITk3 +-----END CERTIFICATE REQUEST----- diff --git a/java/socketd-transport-test/src/test/resources/ssl/ca/server.key b/java/socketd-transport-test/src/test/resources/ssl/ca/server.key new file mode 100644 index 0000000000000000000000000000000000000000..9c3b50bdd00a0657759a26ebe7e5b238d3e35173 --- /dev/null +++ b/java/socketd-transport-test/src/test/resources/ssl/ca/server.key @@ -0,0 +1,51 @@ +-----BEGIN RSA PRIVATE KEY----- +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 +-----END RSA PRIVATE KEY----- diff --git a/java/socketd-transport-test/src/test/resources/ssl/ca/server.pem b/java/socketd-transport-test/src/test/resources/ssl/ca/server.pem new file mode 100644 index 0000000000000000000000000000000000000000..a7b5380558d8fb591b7ad510d978bfce16bfd8e3 --- /dev/null +++ b/java/socketd-transport-test/src/test/resources/ssl/ca/server.pem @@ -0,0 +1,52 @@ +-----BEGIN PRIVATE KEY----- +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 +2tXsl194s9W5Aloj40e9rFmCvzJ9DEaW +-----END PRIVATE KEY----- diff --git a/java/socketd-transport-test/src/test/resources/ssl/jks/gen_jks.sh b/java/socketd-transport-test/src/test/resources/ssl/jks/gen_jks.sh new file mode 100755 index 0000000000000000000000000000000000000000..73f9bf73e545747e9a23485df4687b79a8b7a800 --- /dev/null +++ b/java/socketd-transport-test/src/test/resources/ssl/jks/gen_jks.sh @@ -0,0 +1,18 @@ +#!/bin/bash + +echo Generate JKS: + +echo 'keyPass 123456' +echo 'storepass 123456' + +# gen KeyPair +keytool -genkeypair -alias certificateKey -keypass 123456 -storepass 123456 -keyalg RSA -validity 36500 -keystore keystore.jks + +# export public CER +keytool -export -alias certificateKey -storepass 123456 -keystore keystore.jks -rfc -file public.crt + +# gen Truststore, and import public CRT +Keytool -import -alias certificateKey -storepass 123456 -noprompt -file public.crt -keystore trustKeystore.jks + +# list trustKeystore +keytool -list -v -storepass 123456 -keystore trustKeystore.jks \ No newline at end of file diff --git a/java/socketd-transport-test/src/test/resources/ssl/jks/keystore.jks b/java/socketd-transport-test/src/test/resources/ssl/jks/keystore.jks new file mode 100644 index 0000000000000000000000000000000000000000..6e713eb89814317e42a3f8ee6c17907c5f7e977a Binary files /dev/null and b/java/socketd-transport-test/src/test/resources/ssl/jks/keystore.jks differ diff --git a/java/socketd-transport-test/src/test/resources/ssl/jks/public.crt b/java/socketd-transport-test/src/test/resources/ssl/jks/public.crt new file mode 100644 index 0000000000000000000000000000000000000000..69d595239ad0267793cf6a718087db5222c99fa0 --- /dev/null +++ b/java/socketd-transport-test/src/test/resources/ssl/jks/public.crt @@ -0,0 +1,21 @@ +-----BEGIN CERTIFICATE----- +MIIDeTCCAmGgAwIBAgIEVTiHlDANBgkqhkiG9w0BAQsFADBsMRAwDgYDVQQGEwdV +bmtub3duMRAwDgYDVQQIEwdVbmtub3duMRAwDgYDVQQHEwdVbmtub3duMRAwDgYD +VQQKEwdVbmtub3duMRAwDgYDVQQLEwdVbmtub3duMRAwDgYDVQQDEwdVbmtub3du +MCAXDTI0MDEyMDA1MTIyMFoYDzIxMjMxMjI3MDUxMjIwWjBsMRAwDgYDVQQGEwdV +bmtub3duMRAwDgYDVQQIEwdVbmtub3duMRAwDgYDVQQHEwdVbmtub3duMRAwDgYD +VQQKEwdVbmtub3duMRAwDgYDVQQLEwdVbmtub3duMRAwDgYDVQQDEwdVbmtub3du +MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAteS8hen5UuZoJZc3IZfO +/NcR5Dv5cXBy6ebuePVIGOteR8HTL6bZ98mpEwVqFEFBIemAaHsL2T8qs76cKtLO +VZmH6FMyzgDMQ+oJcBc9DOQTxxYB1jzQkupynihtbOZS1y1f9YvV36W6mtNAA4VE +noxlS38vpUnqGlde4MA0hO5MtwIzRAbv+3H9I1VM6m+WuLeS3f5j6yYdm8fcHRiN +A3shuCDFRU6Bw/yStl5Z/omueg6CFF9ZrNmSAvetg5FVWOjLYm4oVoQjltk4CIoA +MHLBP5OvNo2PgVrzj8y6aTLFAGZJSXvQBzLL2RKX1twhtuD51Ids1LEdzakgcjB2 +NQIDAQABoyEwHzAdBgNVHQ4EFgQUoHktJZ7RSvElHnhJsnz1uyKzkpwwDQYJKoZI +hvcNAQELBQADggEBAHY0fgpME02yYhk57xTqJtTmNjGe1+HmvW5O6Fp9T/n1X+zZ +b3g+IaZNm6T3PljHdWVdAL1Vf0y0CZKpz5sC1cfhDbeJIcfF+jswR3PZAHWRKQD1 +8beRoUbQ+eN7Do2rFHSsSWFYX151R+rUPt6NrZsMpodz8vSXeb6wSgt6PPzTHIgb +Mkfe2yHAf6hoLkUqhTFoYcNnakQe/be+AWxumsyz0vXdxX1V9L21mdMjHJC4NIsB +StsVXonHs+AKCVD7Nr8QF5O2ra1fhdyI33dDsQCOjmWkZu/1lrYGHnk/E/H9Sv+o +qhs9IEI0u/sS9k53kTVrwvKrhUl4Wq/V1DwOjmc= +-----END CERTIFICATE----- diff --git a/java/socketd-transport-test/src/test/resources/ssl/jks/trustKeystore.jks b/java/socketd-transport-test/src/test/resources/ssl/jks/trustKeystore.jks new file mode 100644 index 0000000000000000000000000000000000000000..1b2dc83a23bacef05746646bb15d73df20ecd7d9 Binary files /dev/null and b/java/socketd-transport-test/src/test/resources/ssl/jks/trustKeystore.jks differ diff --git a/java/socketd-transport/socketd-transport-neta/pom.xml b/java/socketd-transport/socketd-transport-neta/pom.xml index 767d4fd3da353e219ead9fce4d66c79c2a02f5fa..5b1f118eef10ae59727608b27a2faf91af75ca3d 100644 --- a/java/socketd-transport/socketd-transport-neta/pom.xml +++ b/java/socketd-transport/socketd-transport-neta/pom.xml @@ -28,7 +28,7 @@ net.hasor neta-all - 1.0.5 + 1.1.0 diff --git a/java/socketd-transport/socketd-transport-neta/src/main/java/org/noear/socketd/transport/neta/tcp/impl/BasedPipeHandler.java b/java/socketd-transport/socketd-transport-neta/src/main/java/org/noear/socketd/transport/neta/codec/BasedPipeHandler.java similarity index 92% rename from java/socketd-transport/socketd-transport-neta/src/main/java/org/noear/socketd/transport/neta/tcp/impl/BasedPipeHandler.java rename to java/socketd-transport/socketd-transport-neta/src/main/java/org/noear/socketd/transport/neta/codec/BasedPipeHandler.java index e9068b1cd5fa8dda2546669281035d43254534c6..1ed3745a8a09b9e402af1a50a2263e0ed86cd975 100644 --- a/java/socketd-transport/socketd-transport-neta/src/main/java/org/noear/socketd/transport/neta/tcp/impl/BasedPipeHandler.java +++ b/java/socketd-transport/socketd-transport-neta/src/main/java/org/noear/socketd/transport/neta/codec/BasedPipeHandler.java @@ -1,8 +1,8 @@ -package org.noear.socketd.transport.neta.tcp.impl; +package org.noear.socketd.transport.neta.codec; import net.hasor.neta.channel.NetChannel; import net.hasor.neta.channel.ProtoContext; -import net.hasor.neta.handler.ProtoHandler; +import net.hasor.neta.channel.ProtoHandler; import org.noear.socketd.transport.core.ChannelInternal; import org.noear.socketd.transport.core.ChannelSupporter; import org.noear.socketd.transport.core.Config; diff --git a/java/socketd-transport/socketd-transport-neta/src/main/java/org/noear/socketd/transport/neta/tcp/impl/ByteBufCodecReader.java b/java/socketd-transport/socketd-transport-neta/src/main/java/org/noear/socketd/transport/neta/codec/ByteBufCodecReader.java similarity index 95% rename from java/socketd-transport/socketd-transport-neta/src/main/java/org/noear/socketd/transport/neta/tcp/impl/ByteBufCodecReader.java rename to java/socketd-transport/socketd-transport-neta/src/main/java/org/noear/socketd/transport/neta/codec/ByteBufCodecReader.java index afd337eef944a2fc209f834ab7f16f07cf57ea25..5311ac2a6db8b5e5325e8f850a99a8d6fc9c17da 100644 --- a/java/socketd-transport/socketd-transport-neta/src/main/java/org/noear/socketd/transport/neta/tcp/impl/ByteBufCodecReader.java +++ b/java/socketd-transport/socketd-transport-neta/src/main/java/org/noear/socketd/transport/neta/codec/ByteBufCodecReader.java @@ -1,4 +1,4 @@ -package org.noear.socketd.transport.neta.tcp.impl; +package org.noear.socketd.transport.neta.codec; import net.hasor.neta.bytebuf.ByteBuf; import org.noear.socketd.transport.core.CodecReader; diff --git a/java/socketd-transport/socketd-transport-neta/src/main/java/org/noear/socketd/transport/neta/tcp/impl/ByteBufCodecWriter.java b/java/socketd-transport/socketd-transport-neta/src/main/java/org/noear/socketd/transport/neta/codec/ByteBufCodecWriter.java similarity index 93% rename from java/socketd-transport/socketd-transport-neta/src/main/java/org/noear/socketd/transport/neta/tcp/impl/ByteBufCodecWriter.java rename to java/socketd-transport/socketd-transport-neta/src/main/java/org/noear/socketd/transport/neta/codec/ByteBufCodecWriter.java index aaa0399897db0ff49805e9f8f91f6c683f370912..1ef52fd4445545af5f6bfa86147ecaee69ad1cfd 100644 --- a/java/socketd-transport/socketd-transport-neta/src/main/java/org/noear/socketd/transport/neta/tcp/impl/ByteBufCodecWriter.java +++ b/java/socketd-transport/socketd-transport-neta/src/main/java/org/noear/socketd/transport/neta/codec/ByteBufCodecWriter.java @@ -1,4 +1,4 @@ -package org.noear.socketd.transport.neta.tcp.impl; +package org.noear.socketd.transport.neta.codec; import net.hasor.neta.bytebuf.ByteBuf; import org.noear.socketd.transport.core.CodecWriter; diff --git a/java/socketd-transport/socketd-transport-neta/src/main/java/org/noear/socketd/transport/neta/tcp/impl/FrameDecoder.java b/java/socketd-transport/socketd-transport-neta/src/main/java/org/noear/socketd/transport/neta/codec/FrameDecoder.java similarity index 74% rename from java/socketd-transport/socketd-transport-neta/src/main/java/org/noear/socketd/transport/neta/tcp/impl/FrameDecoder.java rename to java/socketd-transport/socketd-transport-neta/src/main/java/org/noear/socketd/transport/neta/codec/FrameDecoder.java index 4d7740bca3fefc7087f21e294dc89c083f5e9dd6..6074af2fc6d8335e71227f55cc148307ccfe3973 100644 --- a/java/socketd-transport/socketd-transport-neta/src/main/java/org/noear/socketd/transport/neta/tcp/impl/FrameDecoder.java +++ b/java/socketd-transport/socketd-transport-neta/src/main/java/org/noear/socketd/transport/neta/codec/FrameDecoder.java @@ -1,11 +1,7 @@ -package org.noear.socketd.transport.neta.tcp.impl; +package org.noear.socketd.transport.neta.codec; import net.hasor.neta.bytebuf.ByteBuf; -import net.hasor.neta.channel.NetChannel; -import net.hasor.neta.channel.ProtoContext; -import net.hasor.neta.handler.ProtoRcvQueue; -import net.hasor.neta.handler.ProtoSndQueue; -import net.hasor.neta.handler.ProtoStatus; +import net.hasor.neta.channel.*; import org.noear.socketd.transport.core.ChannelSupporter; import org.noear.socketd.transport.core.Config; import org.noear.socketd.transport.core.Frame; @@ -34,6 +30,6 @@ public class FrameDecoder extends BasedPipeHandler { hasAny = true; } - return hasAny ? ProtoStatus.Next : ProtoStatus.Skip; + return hasAny ? ProtoStatus.Next : ProtoStatus.Stop; } } diff --git a/java/socketd-transport/socketd-transport-neta/src/main/java/org/noear/socketd/transport/neta/tcp/impl/FrameEncoder.java b/java/socketd-transport/socketd-transport-neta/src/main/java/org/noear/socketd/transport/neta/codec/FrameEncoder.java similarity index 78% rename from java/socketd-transport/socketd-transport-neta/src/main/java/org/noear/socketd/transport/neta/tcp/impl/FrameEncoder.java rename to java/socketd-transport/socketd-transport-neta/src/main/java/org/noear/socketd/transport/neta/codec/FrameEncoder.java index e2e59ed6ea0785fe3c077066a7fdd447b29c09c9..71a8b4b59bf617e24cde405711a29d4359cc91cc 100644 --- a/java/socketd-transport/socketd-transport-neta/src/main/java/org/noear/socketd/transport/neta/tcp/impl/FrameEncoder.java +++ b/java/socketd-transport/socketd-transport-neta/src/main/java/org/noear/socketd/transport/neta/codec/FrameEncoder.java @@ -1,12 +1,8 @@ -package org.noear.socketd.transport.neta.tcp.impl; +package org.noear.socketd.transport.neta.codec; import net.hasor.neta.bytebuf.ByteBuf; import net.hasor.neta.bytebuf.ByteBufAllocator; -import net.hasor.neta.channel.NetChannel; -import net.hasor.neta.channel.ProtoContext; -import net.hasor.neta.handler.ProtoRcvQueue; -import net.hasor.neta.handler.ProtoSndQueue; -import net.hasor.neta.handler.ProtoStatus; +import net.hasor.neta.channel.*; import org.noear.socketd.transport.core.ChannelSupporter; import org.noear.socketd.transport.core.Config; import org.noear.socketd.transport.core.Frame; @@ -40,6 +36,6 @@ public class FrameEncoder extends BasedPipeHandler { hasAny = true; } } - return hasAny ? ProtoStatus.Next : ProtoStatus.Skip; + return hasAny ? ProtoStatus.Next : ProtoStatus.Stop; } } diff --git a/java/socketd-transport/socketd-transport-neta/src/main/java/org/noear/socketd/transport/neta/tcp/impl/ClientPipeListener.java b/java/socketd-transport/socketd-transport-neta/src/main/java/org/noear/socketd/transport/neta/listener/ClientListener.java similarity index 43% rename from java/socketd-transport/socketd-transport-neta/src/main/java/org/noear/socketd/transport/neta/tcp/impl/ClientPipeListener.java rename to java/socketd-transport/socketd-transport-neta/src/main/java/org/noear/socketd/transport/neta/listener/ClientListener.java index 02c567c7702a57d9593a8bd39ecc67493e8c1136..df5edb659eae97cf5c96182c109a43ebb00debf1 100644 --- a/java/socketd-transport/socketd-transport-neta/src/main/java/org/noear/socketd/transport/neta/tcp/impl/ClientPipeListener.java +++ b/java/socketd-transport/socketd-transport-neta/src/main/java/org/noear/socketd/transport/neta/listener/ClientListener.java @@ -1,12 +1,15 @@ -package org.noear.socketd.transport.neta.tcp.impl; +package org.noear.socketd.transport.neta.listener; -import net.hasor.neta.channel.NetChannel; -import net.hasor.neta.channel.ProtoContext; +import net.hasor.neta.channel.PlayLoad; +import net.hasor.neta.channel.PlayLoadListener; import net.hasor.neta.channel.SoCloseException; import net.hasor.neta.channel.SoTimeoutException; -import net.hasor.neta.handler.*; import org.noear.socketd.transport.client.ClientHandshakeResult; -import org.noear.socketd.transport.core.*; +import org.noear.socketd.transport.client.ClientInternal; +import org.noear.socketd.transport.core.ChannelInternal; +import org.noear.socketd.transport.core.Flags; +import org.noear.socketd.transport.core.Frame; +import org.noear.socketd.transport.core.Processor; import java.util.concurrent.CompletableFuture; @@ -14,11 +17,11 @@ import java.util.concurrent.CompletableFuture; * @author noear * @since 2.3 */ -public class ClientPipeListener implements ProtoHandler { +public class ClientListener implements PlayLoadListener { private final Processor processor; private final CompletableFuture handshakeFuture = new CompletableFuture<>(); - public ClientPipeListener(ChannelSupporter supporter) { + public ClientListener(ClientInternal supporter) { this.processor = supporter.getProcessor(); } @@ -27,26 +30,25 @@ public class ClientPipeListener implements ProtoHandler { } @Override - public ProtoStatus onMessage(ProtoContext context, ProtoRcvQueue src, ProtoSndQueue dst) throws Throwable { - ChannelInternal channel = context.context(ChannelInternal.class); - - while (src.hasMore()) { - Frame frame = src.takeMessage(); - if (frame.flag() == Flags.Connack) { - channel.onOpenFuture((r, e) -> { - handshakeFuture.complete(new ClientHandshakeResult(channel, e)); - }); - } - - processor.reveFrame(channel, frame); + public void onEvent(PlayLoad data) { + ChannelInternal channel = data.getSource().findProtoContext(ChannelInternal.class); + if (data.isSuccess()) { + this.onData(channel, (Frame) data.getData()); + } else { + this.onError(channel, data.getError()); } - return ProtoStatus.Next; } - @Override - public ProtoStatus onError(ProtoContext context, Throwable e, ProtoExceptionHolder eh) throws Throwable { - ChannelInternal channel = context.context(ChannelInternal.class); + private void onData(ChannelInternal channel, Frame frame) { + if (frame.flag() == Flags.Connack) { + channel.onOpenFuture((r, e) -> { + handshakeFuture.complete(new ClientHandshakeResult(channel, e)); + }); + } + processor.reveFrame(channel, frame); + } + public void onError(ChannelInternal channel, Throwable e) { if (e instanceof SoCloseException) { processor.onClose(channel); } else if (e instanceof SoTimeoutException) { @@ -54,7 +56,5 @@ public class ClientPipeListener implements ProtoHandler { } else { processor.onError(channel, e); } - - return ProtoStatus.Next; } } diff --git a/java/socketd-transport/socketd-transport-neta/src/main/java/org/noear/socketd/transport/neta/tcp/impl/ServerPipeListener.java b/java/socketd-transport/socketd-transport-neta/src/main/java/org/noear/socketd/transport/neta/listener/ServerListener.java similarity index 38% rename from java/socketd-transport/socketd-transport-neta/src/main/java/org/noear/socketd/transport/neta/tcp/impl/ServerPipeListener.java rename to java/socketd-transport/socketd-transport-neta/src/main/java/org/noear/socketd/transport/neta/listener/ServerListener.java index e1d6a5c4276365d98d5e9e192b3f4512a0537d22..6f2c82133c1a0e186ae5e2f47e2d85f006afb757 100644 --- a/java/socketd-transport/socketd-transport-neta/src/main/java/org/noear/socketd/transport/neta/tcp/impl/ServerPipeListener.java +++ b/java/socketd-transport/socketd-transport-neta/src/main/java/org/noear/socketd/transport/neta/listener/ServerListener.java @@ -1,43 +1,37 @@ -package org.noear.socketd.transport.neta.tcp.impl; +package org.noear.socketd.transport.neta.listener; -import net.hasor.neta.channel.NetChannel; -import net.hasor.neta.channel.ProtoContext; -import net.hasor.neta.channel.SoCloseException; -import net.hasor.neta.channel.SoTimeoutException; -import net.hasor.neta.handler.*; +import net.hasor.neta.channel.*; import org.noear.socketd.transport.core.ChannelInternal; import org.noear.socketd.transport.core.ChannelSupporter; import org.noear.socketd.transport.core.Frame; import org.noear.socketd.transport.core.Processor; -import java.util.Objects; - /** * @author noear * @since 2.3 */ -public class ServerPipeListener implements ProtoHandler { +public class ServerListener implements PlayLoadListener { private final Processor processor; - public ServerPipeListener(ChannelSupporter supporter) { + public ServerListener(ChannelSupporter supporter) { this.processor = supporter.getProcessor(); } @Override - public ProtoStatus onMessage(ProtoContext context, ProtoRcvQueue src, ProtoSndQueue dst) throws Throwable { - ChannelInternal channel = context.context(ChannelInternal.class); - - while (src.hasMore()) { - processor.reveFrame(channel, src.takeMessage()); + public void onEvent(PlayLoad data) { + ChannelInternal channel = data.getSource().findProtoContext(ChannelInternal.class); + if (data.isSuccess()) { + this.onData(channel, (Frame) data.getData()); + } else { + this.onError(channel, data.getError()); } - - return ProtoStatus.Next; } - @Override - public ProtoStatus onError(ProtoContext context, Throwable e, ProtoExceptionHolder eh) throws Throwable { - ChannelInternal channel = Objects.requireNonNull(context.context(ChannelInternal.class)); + private void onData(ChannelInternal channel, Frame src) { + processor.reveFrame(channel, src); + } + private void onError(ChannelInternal channel, Throwable e) { if (e instanceof SoCloseException) { processor.onClose(channel); } else if (e instanceof SoTimeoutException) { @@ -45,7 +39,5 @@ public class ServerPipeListener implements ProtoHandler { } else { processor.onError(channel, e); } - - return ProtoStatus.Next; } } diff --git a/java/socketd-transport/socketd-transport-neta/src/main/java/org/noear/socketd/transport/neta/tcp/TcpAioChannelAssistant.java b/java/socketd-transport/socketd-transport-neta/src/main/java/org/noear/socketd/transport/neta/socket/AioChannelAssistant.java similarity index 89% rename from java/socketd-transport/socketd-transport-neta/src/main/java/org/noear/socketd/transport/neta/tcp/TcpAioChannelAssistant.java rename to java/socketd-transport/socketd-transport-neta/src/main/java/org/noear/socketd/transport/neta/socket/AioChannelAssistant.java index f45deea626807cff0e5a30addd812761482377a8..10caa52f861aa7f46700f011aaa8646147885617 100644 --- a/java/socketd-transport/socketd-transport-neta/src/main/java/org/noear/socketd/transport/neta/tcp/TcpAioChannelAssistant.java +++ b/java/socketd-transport/socketd-transport-neta/src/main/java/org/noear/socketd/transport/neta/socket/AioChannelAssistant.java @@ -1,4 +1,4 @@ -package org.noear.socketd.transport.neta.tcp; +package org.noear.socketd.transport.neta.socket; import net.hasor.neta.channel.NetChannel; import org.noear.socketd.transport.core.ChannelAssistant; @@ -13,7 +13,7 @@ import java.net.InetSocketAddress; * @author noear * @since 2.3 */ -public class TcpAioChannelAssistant implements ChannelAssistant { +public class AioChannelAssistant implements ChannelAssistant { @Override public void write(NetChannel target, Frame frame, ChannelInternal channel, IoCompletionHandler completionHandler) { try { @@ -40,12 +40,12 @@ public class TcpAioChannelAssistant implements ChannelAssistant { } @Override - public InetSocketAddress getRemoteAddress(NetChannel target) throws IOException { + public InetSocketAddress getRemoteAddress(NetChannel target) { return (InetSocketAddress) target.getRemoteAddr(); } @Override - public InetSocketAddress getLocalAddress(NetChannel target) throws IOException { + public InetSocketAddress getLocalAddress(NetChannel target) { return (InetSocketAddress) target.getLocalAddr(); } } diff --git a/java/socketd-transport/socketd-transport-neta/src/main/java/org/noear/socketd/transport/neta/tcp/TcpAioClient.java b/java/socketd-transport/socketd-transport-neta/src/main/java/org/noear/socketd/transport/neta/socket/AioClient.java similarity index 36% rename from java/socketd-transport/socketd-transport-neta/src/main/java/org/noear/socketd/transport/neta/tcp/TcpAioClient.java rename to java/socketd-transport/socketd-transport-neta/src/main/java/org/noear/socketd/transport/neta/socket/AioClient.java index 6b08241f4561d657b62413ba9705cb14909b756c..06aed17d37fab2e35d3ec1924c135e27b61b1e47 100644 --- a/java/socketd-transport/socketd-transport-neta/src/main/java/org/noear/socketd/transport/neta/tcp/TcpAioClient.java +++ b/java/socketd-transport/socketd-transport-neta/src/main/java/org/noear/socketd/transport/neta/socket/AioClient.java @@ -1,22 +1,16 @@ -package org.noear.socketd.transport.neta.tcp; +package org.noear.socketd.transport.neta.socket; import net.hasor.neta.channel.NetChannel; import org.noear.socketd.transport.client.ClientBase; import org.noear.socketd.transport.client.ClientConfig; -import org.noear.socketd.transport.client.ClientConnector; import org.noear.socketd.transport.core.ChannelSupporter; /** * @author noear * @since 2.3 */ -public class TcpAioClient extends ClientBase implements ChannelSupporter { - public TcpAioClient(ClientConfig clientConfig) { - super(clientConfig, new TcpAioChannelAssistant()); - } - - @Override - protected ClientConnector createConnector() { - return new TcpAioClientConnector(this); +public abstract class AioClient extends ClientBase implements ChannelSupporter { + public AioClient(ClientConfig clientConfig) { + super(clientConfig, new AioChannelAssistant()); } } diff --git a/java/socketd-transport/socketd-transport-neta/src/main/java/org/noear/socketd/transport/neta/socket/AioClientConfig.java b/java/socketd-transport/socketd-transport-neta/src/main/java/org/noear/socketd/transport/neta/socket/AioClientConfig.java new file mode 100644 index 0000000000000000000000000000000000000000..ace99eeed913b8a75156f86eff02bfde0cce1c57 --- /dev/null +++ b/java/socketd-transport/socketd-transport-neta/src/main/java/org/noear/socketd/transport/neta/socket/AioClientConfig.java @@ -0,0 +1,35 @@ +package org.noear.socketd.transport.neta.socket; + +import net.hasor.neta.channel.SoConfig; +import net.hasor.neta.handler.codec.ssl.SslConfig; +import org.noear.socketd.transport.client.ClientConfig; + +/** + * @author noear + * @since 2.3 + */ +public class AioClientConfig extends ClientConfig { + + private SoConfig soConfig = null; + private SslConfig sslConfig = null; + + public AioClientConfig(String schema) { + super(schema); + } + + public SoConfig getSoConfig() { + return soConfig; + } + + public void setSoConfig(SoConfig soConfig) { + this.soConfig = soConfig; + } + + public SslConfig getSslConfig() { + return sslConfig; + } + + public void setSslConfig(SslConfig sslConfig) { + this.sslConfig = sslConfig; + } +} \ No newline at end of file diff --git a/java/socketd-transport/socketd-transport-neta/src/main/java/org/noear/socketd/transport/neta/tcp/TcpAioClientConnector.java b/java/socketd-transport/socketd-transport-neta/src/main/java/org/noear/socketd/transport/neta/socket/AioClientConnector.java similarity index 60% rename from java/socketd-transport/socketd-transport-neta/src/main/java/org/noear/socketd/transport/neta/tcp/TcpAioClientConnector.java rename to java/socketd-transport/socketd-transport-neta/src/main/java/org/noear/socketd/transport/neta/socket/AioClientConnector.java index d5b8cbd2905970979b9323b9b88954cc748942c3..0e8f1d89ab982be24058ca69b078dc977855ce16 100644 --- a/java/socketd-transport/socketd-transport-neta/src/main/java/org/noear/socketd/transport/neta/tcp/TcpAioClientConnector.java +++ b/java/socketd-transport/socketd-transport-neta/src/main/java/org/noear/socketd/transport/neta/socket/AioClientConnector.java @@ -1,24 +1,21 @@ -package org.noear.socketd.transport.neta.tcp; +package org.noear.socketd.transport.neta.socket; import net.hasor.cobble.concurrent.future.Future; -import net.hasor.neta.channel.NetChannel; -import net.hasor.neta.channel.NetManager; -import net.hasor.neta.channel.ProtoInitializer; -import net.hasor.neta.channel.SoConfig; -import net.hasor.neta.handler.ProtoHelper; +import net.hasor.neta.channel.*; import net.hasor.neta.handler.codec.LengthFieldBasedFrameHandler; import org.noear.socketd.exception.SocketDConnectionException; import org.noear.socketd.transport.client.ClientConnectorBase; import org.noear.socketd.transport.client.ClientHandshakeResult; import org.noear.socketd.transport.core.ChannelInternal; import org.noear.socketd.transport.core.Constants; -import org.noear.socketd.transport.neta.tcp.impl.ClientPipeListener; -import org.noear.socketd.transport.neta.tcp.impl.FrameDecoder; -import org.noear.socketd.transport.neta.tcp.impl.FrameEncoder; +import org.noear.socketd.transport.neta.codec.FrameDecoder; +import org.noear.socketd.transport.neta.codec.FrameEncoder; +import org.noear.socketd.transport.neta.listener.ClientListener; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.io.IOException; +import java.net.InetSocketAddress; import java.nio.ByteOrder; import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeoutException; @@ -27,35 +24,44 @@ import java.util.concurrent.TimeoutException; * @author noear * @since 2.3 */ -public class TcpAioClientConnector extends ClientConnectorBase { - private static final Logger log = LoggerFactory.getLogger(TcpAioClientConnector.class); +public abstract class AioClientConnector extends ClientConnectorBase { + private static final Logger log = LoggerFactory.getLogger(AioClientConnector.class); private NetManager real; - public TcpAioClientConnector(TcpAioClient client) { + public AioClientConnector(AioClient client) { super(client); } + protected abstract Future connectTo(NetManager neta, InetSocketAddress remoteAddr, ProtoInitializer initializer); + @Override public ChannelInternal connect() throws IOException { //关闭之前的资源 close(); - FrameDecoder decoder = new FrameDecoder(client.getConfig(), client); - FrameEncoder encoder = new FrameEncoder(client.getConfig(), client); - ClientPipeListener pipeListener = new ClientPipeListener(client); - - ProtoInitializer initializer = ctx -> ProtoHelper.builder()// - .nextDecoder(new LengthFieldBasedFrameHandler(0, ByteOrder.BIG_ENDIAN, 4, 0, -4, Constants.MAX_SIZE_FRAME))// - .nextDuplex(decoder, encoder)// - .nextDecoder(pipeListener).build(); + ClientListener pipeListener = new ClientListener(client); + InetSocketAddress remoteAddr = new InetSocketAddress(getConfig().getHost(), getConfig().getPort()); + NetConfig netConfig = new NetConfig(); - SoConfig soConfig = new SoConfig(); - soConfig.setNetlog(true); - real = new NetManager(soConfig); + netConfig.setPrintLog(true); + real = new NetManager(netConfig); + real.subscribe(PlayLoad::isInbound, pipeListener); try { - Future connect = real.connect(getConfig().getHost(), getConfig().getPort(), initializer); + Future connect = this.connectTo(this.real, remoteAddr, ctx -> { + // ssl + if (AioSslHelper.isUsingSSL(getConfig())) { + ctx.addLast("SSL", AioSslHelper.createSSL(getConfig())); + } + // frame + ctx.addLastDecoder("Frame", new LengthFieldBasedFrameHandler(0, ByteOrder.BIG_ENDIAN, 4, 0, -4, Constants.MAX_SIZE_FRAME)); + // codec + FrameDecoder decoder = new FrameDecoder(client.getConfig(), client); + FrameEncoder encoder = new FrameEncoder(client.getConfig(), client); + ctx.addLast("Socket.D", decoder, encoder); + }); + connect.onCompleted(f -> { //开始握手 ChannelInternal channel = f.getResult().findProtoContext(ChannelInternal.class); diff --git a/java/socketd-transport/socketd-transport-neta/src/main/java/org/noear/socketd/transport/neta/tcp/TcpAioServer.java b/java/socketd-transport/socketd-transport-neta/src/main/java/org/noear/socketd/transport/neta/socket/AioServer.java similarity index 44% rename from java/socketd-transport/socketd-transport-neta/src/main/java/org/noear/socketd/transport/neta/tcp/TcpAioServer.java rename to java/socketd-transport/socketd-transport-neta/src/main/java/org/noear/socketd/transport/neta/socket/AioServer.java index 036942acd2b1d6094cf3700391efac4328d951ba..abf12e98975825e736e157e96189e1d0d018f010 100644 --- a/java/socketd-transport/socketd-transport-neta/src/main/java/org/noear/socketd/transport/neta/tcp/TcpAioServer.java +++ b/java/socketd-transport/socketd-transport-neta/src/main/java/org/noear/socketd/transport/neta/socket/AioServer.java @@ -1,17 +1,12 @@ -package org.noear.socketd.transport.neta.tcp; +package org.noear.socketd.transport.neta.socket; -import net.hasor.neta.channel.NetChannel; -import net.hasor.neta.channel.NetManager; -import net.hasor.neta.channel.ProtoInitializer; -import net.hasor.neta.channel.SoConfig; -import net.hasor.neta.handler.ProtoHelper; +import net.hasor.neta.channel.*; import net.hasor.neta.handler.codec.LengthFieldBasedFrameHandler; -import org.noear.socketd.SocketD; import org.noear.socketd.transport.core.ChannelSupporter; import org.noear.socketd.transport.core.Constants; -import org.noear.socketd.transport.neta.tcp.impl.FrameDecoder; -import org.noear.socketd.transport.neta.tcp.impl.FrameEncoder; -import org.noear.socketd.transport.neta.tcp.impl.ServerPipeListener; +import org.noear.socketd.transport.neta.codec.FrameDecoder; +import org.noear.socketd.transport.neta.codec.FrameEncoder; +import org.noear.socketd.transport.neta.listener.ServerListener; import org.noear.socketd.transport.server.Server; import org.noear.socketd.transport.server.ServerBase; import org.noear.socketd.transport.server.ServerConfig; @@ -20,24 +15,22 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.io.IOException; +import java.net.InetSocketAddress; import java.nio.ByteOrder; /** * @author noear * @since 2.3 */ -public class TcpAioServer extends ServerBase implements ChannelSupporter { - private static final Logger log = LoggerFactory.getLogger(TcpAioServer.class); +public abstract class AioServer extends ServerBase implements ChannelSupporter { + private static final Logger log = LoggerFactory.getLogger(AioServer.class); private NetManager server; - public TcpAioServer(ServerConfig config) { - super(config, new TcpAioChannelAssistant()); + public AioServer(ServerConfig config) { + super(config, new AioChannelAssistant()); } - @Override - public String getTitle() { - return "tcp/aio/neta 1.0/" + SocketD.version(); - } + protected abstract NetListen bindTo(NetManager neta, InetSocketAddress bindAddr, ProtoInitializer initializer) throws IOException; @Override public Server start() throws IOException { @@ -47,25 +40,24 @@ public class TcpAioServer extends ServerBase implements isStarted = true; } - FrameDecoder decoder = new FrameDecoder(this.getConfig(), this); - FrameEncoder encoder = new FrameEncoder(this.getConfig(), this); - ServerPipeListener listener = new ServerPipeListener(this); - - ProtoInitializer initializer = ctx -> ProtoHelper.builder()// - .nextDecoder(new LengthFieldBasedFrameHandler(0, ByteOrder.BIG_ENDIAN, 4, 0, -4, Constants.MAX_SIZE_FRAME))// - .nextDuplex(decoder, encoder)// - .nextDecoder(listener).build(); - - SoConfig soConfig = new SoConfig(); - soConfig.setSoKeepAlive(false); - soConfig.setNetlog(true); - server = new NetManager(soConfig); + InetSocketAddress bindAddr = StrUtils.isEmpty(getConfig().getHost()) ? new InetSocketAddress(getConfig().getPort()) : new InetSocketAddress(getConfig().getHost(), getConfig().getPort()); + NetConfig netConfig = new NetConfig(); + netConfig.setPrintLog(true); - if (StrUtils.isEmpty(getConfig().getHost())) { - server.listen(getConfig().getPort(), initializer); - } else { - server.listen(getConfig().getHost(), getConfig().getPort(), initializer); - } + server = new NetManager(netConfig); + server.subscribe(PlayLoad::isInbound, new ServerListener(this)); + this.bindTo(this.server, bindAddr, ctx -> { + // ssl + if (AioSslHelper.isUsingSSL(getConfig())) { + ctx.addLast("SSL", AioSslHelper.createSSL(getConfig())); + } + // frame + ctx.addLastDecoder(new LengthFieldBasedFrameHandler(0, ByteOrder.BIG_ENDIAN, 4, 0, -4, Constants.MAX_SIZE_FRAME)); + // codec + FrameDecoder decoder = new FrameDecoder(this.getConfig(), this); + FrameEncoder encoder = new FrameEncoder(this.getConfig(), this); + ctx.addLast(decoder, encoder); + }); log.info("Socket.D server started: {server=" + getConfig().getLocalUrl() + "}"); diff --git a/java/socketd-transport/socketd-transport-neta/src/main/java/org/noear/socketd/transport/neta/socket/AioServerConfig.java b/java/socketd-transport/socketd-transport-neta/src/main/java/org/noear/socketd/transport/neta/socket/AioServerConfig.java new file mode 100644 index 0000000000000000000000000000000000000000..29ed697b3034f2f7de153330630b53bc8298ac5e --- /dev/null +++ b/java/socketd-transport/socketd-transport-neta/src/main/java/org/noear/socketd/transport/neta/socket/AioServerConfig.java @@ -0,0 +1,35 @@ +package org.noear.socketd.transport.neta.socket; + +import net.hasor.neta.channel.SoConfig; +import net.hasor.neta.handler.codec.ssl.SslConfig; +import org.noear.socketd.transport.server.ServerConfig; + +/** + * @author noear + * @since 2.3 + */ +public class AioServerConfig extends ServerConfig { + + private SoConfig soConfig = null; + private SslConfig sslConfig = null; + + public AioServerConfig(String schema) { + super(schema); + } + + public SoConfig getSoConfig() { + return soConfig; + } + + public void setSoConfig(SoConfig soConfig) { + this.soConfig = soConfig; + } + + public SslConfig getSslConfig() { + return sslConfig; + } + + public void setSslConfig(SslConfig sslConfig) { + this.sslConfig = sslConfig; + } +} \ No newline at end of file diff --git a/java/socketd-transport/socketd-transport-neta/src/main/java/org/noear/socketd/transport/neta/socket/AioSslHelper.java b/java/socketd-transport/socketd-transport-neta/src/main/java/org/noear/socketd/transport/neta/socket/AioSslHelper.java new file mode 100644 index 0000000000000000000000000000000000000000..d3fe35920f1ca6428bc7633b31c90118571d426f --- /dev/null +++ b/java/socketd-transport/socketd-transport-neta/src/main/java/org/noear/socketd/transport/neta/socket/AioSslHelper.java @@ -0,0 +1,71 @@ +package org.noear.socketd.transport.neta.socket; + +import net.hasor.neta.bytebuf.ByteBuf; +import net.hasor.neta.channel.ProtoDuplexer; +import net.hasor.neta.handler.codec.ssl.SslConfig; +import net.hasor.neta.handler.codec.ssl.SslProtoDuplex; +import org.noear.socketd.transport.client.ClientConfig; +import org.noear.socketd.transport.server.ServerConfig; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.Objects; + +/** + * @author noear + * @since 2.3 + */ +class AioSslHelper { + private static final Logger log = LoggerFactory.getLogger(AioSslHelper.class); + + public static boolean isUsingSSL(ServerConfig config) { + if (config.getSslContext() != null) { + return true; + } else if (config instanceof AioServerConfig) { + SslConfig sslConfig = ((AioServerConfig) config).getSslConfig(); + return sslConfig != null; + } else { + return false; + } + } + + public static boolean isUsingSSL(ClientConfig config) { + if (config.getSslContext() != null) { + return true; + } else if (config instanceof AioClientConfig) { + SslConfig sslConfig = ((AioClientConfig) config).getSslConfig(); + return sslConfig != null; + } else { + return false; + } + } + + public static ProtoDuplexer createSSL(ServerConfig config) { + SslConfig sslConfig; + if (config.getSslContext() != null) { + log.info("use sslContext from ServerConfig."); + sslConfig = new SslConfig(); + sslConfig.setSslContext(config.getSslContext()); + } else if (config instanceof AioServerConfig) { + sslConfig = Objects.requireNonNull(((AioServerConfig) config).getSslConfig(), "sslConfig is null"); + } else { + throw new NullPointerException("sslConfig is null"); + } + return new SslProtoDuplex(sslConfig); + } + + public static ProtoDuplexer createSSL(ClientConfig config) { + SslConfig sslConfig; + if (config.getSslContext() != null) { + log.info("use sslContext from ClientConfig."); + sslConfig = new SslConfig(); + sslConfig.setSslContext(config.getSslContext()); + } else if (config instanceof AioClientConfig) { + sslConfig = Objects.requireNonNull(((AioClientConfig) config).getSslConfig(), "sslConfig is null"); + } else { + throw new NullPointerException("sslConfig is null"); + } + return new SslProtoDuplex(sslConfig); + } + +} diff --git a/java/socketd-transport/socketd-transport-neta/src/main/java/org/noear/socketd/transport/neta/socket/tcp/TcpAioClient.java b/java/socketd-transport/socketd-transport-neta/src/main/java/org/noear/socketd/transport/neta/socket/tcp/TcpAioClient.java new file mode 100644 index 0000000000000000000000000000000000000000..2f8935a66088a4afb96bb5913127a4962fa457b4 --- /dev/null +++ b/java/socketd-transport/socketd-transport-neta/src/main/java/org/noear/socketd/transport/neta/socket/tcp/TcpAioClient.java @@ -0,0 +1,54 @@ +package org.noear.socketd.transport.neta.socket.tcp; + +import net.hasor.cobble.concurrent.future.Future; +import net.hasor.neta.channel.NetChannel; +import net.hasor.neta.channel.NetManager; +import net.hasor.neta.channel.ProtoInitializer; +import net.hasor.neta.channel.SoConfig; +import net.hasor.neta.channel.tcp.TcpSoConfig; +import org.noear.socketd.transport.client.ClientConfig; +import org.noear.socketd.transport.client.ClientConnector; +import org.noear.socketd.transport.neta.socket.AioClient; +import org.noear.socketd.transport.neta.socket.AioClientConfig; +import org.noear.socketd.transport.neta.socket.AioClientConnector; + +import java.net.InetSocketAddress; + +/** + * @author noear + * @since 2.3 + */ +public class TcpAioClient extends AioClient { + public TcpAioClient(ClientConfig clientConfig) { + super(clientConfig); + } + + @Override + protected ClientConnector createConnector() { + return new AioClientConnector(this) { + @Override + protected Future connectTo(NetManager neta, InetSocketAddress remoteAddr, ProtoInitializer initializer) { + return tcpConnectTo(neta, remoteAddr, initializer); + } + }; + } + + protected Future tcpConnectTo(NetManager neta, InetSocketAddress remoteAddr, ProtoInitializer initializer) { + TcpSoConfig soConfig; + if (getConfig() instanceof AioClientConfig) { + SoConfig config = ((AioClientConfig) getConfig()).getSoConfig(); + if (config instanceof TcpSoConfig) { + soConfig = (TcpSoConfig) config; + } else { + throw new UnsupportedOperationException("only support TcpSoConfig."); + } + } else { + soConfig = SoConfig.TCP(); + } + + soConfig.setRcvSlotSize(getConfig().getReadBufferSize()); + soConfig.setSndSlotSize(getConfig().getWriteBufferSize()); + + return neta.connectAsync(remoteAddr, initializer, soConfig); + } +} diff --git a/java/socketd-transport/socketd-transport-neta/src/main/java/org/noear/socketd/transport/neta/tcp/TcpAioProvider.java b/java/socketd-transport/socketd-transport-neta/src/main/java/org/noear/socketd/transport/neta/socket/tcp/TcpAioProvider.java similarity index 94% rename from java/socketd-transport/socketd-transport-neta/src/main/java/org/noear/socketd/transport/neta/tcp/TcpAioProvider.java rename to java/socketd-transport/socketd-transport-neta/src/main/java/org/noear/socketd/transport/neta/socket/tcp/TcpAioProvider.java index cb9f2d75a5879c68158461bddd547d0458f9247f..95783fd5aa9540590dd99e70d2d29c2a9afb0cab 100644 --- a/java/socketd-transport/socketd-transport-neta/src/main/java/org/noear/socketd/transport/neta/tcp/TcpAioProvider.java +++ b/java/socketd-transport/socketd-transport-neta/src/main/java/org/noear/socketd/transport/neta/socket/tcp/TcpAioProvider.java @@ -1,4 +1,4 @@ -package org.noear.socketd.transport.neta.tcp; +package org.noear.socketd.transport.neta.socket.tcp; import org.noear.socketd.transport.client.Client; import org.noear.socketd.transport.client.ClientConfig; diff --git a/java/socketd-transport/socketd-transport-neta/src/main/java/org/noear/socketd/transport/neta/socket/tcp/TcpAioServer.java b/java/socketd-transport/socketd-transport-neta/src/main/java/org/noear/socketd/transport/neta/socket/tcp/TcpAioServer.java new file mode 100644 index 0000000000000000000000000000000000000000..3cc96864ee8ccab2ea5b2297b67a2712b68a5d8c --- /dev/null +++ b/java/socketd-transport/socketd-transport-neta/src/main/java/org/noear/socketd/transport/neta/socket/tcp/TcpAioServer.java @@ -0,0 +1,49 @@ +package org.noear.socketd.transport.neta.socket.tcp; + +import net.hasor.neta.channel.NetListen; +import net.hasor.neta.channel.NetManager; +import net.hasor.neta.channel.ProtoInitializer; +import net.hasor.neta.channel.SoConfig; +import net.hasor.neta.channel.tcp.TcpSoConfig; +import org.noear.socketd.SocketD; +import org.noear.socketd.transport.neta.socket.AioServer; +import org.noear.socketd.transport.neta.socket.AioServerConfig; +import org.noear.socketd.transport.server.ServerConfig; + +import java.io.IOException; +import java.net.InetSocketAddress; + +/** + * @author noear + * @since 2.3 + */ +public class TcpAioServer extends AioServer { + public TcpAioServer(ServerConfig config) { + super(config); + } + + @Override + public String getTitle() { + return "tcp/aio/neta 1.0/" + SocketD.version(); + } + + @Override + protected NetListen bindTo(NetManager neta, InetSocketAddress bindAddr, ProtoInitializer initializer) throws IOException { + TcpSoConfig soConfig; + if (getConfig() instanceof AioServerConfig) { + SoConfig config = ((AioServerConfig) getConfig()).getSoConfig(); + if (config instanceof TcpSoConfig) { + soConfig = (TcpSoConfig) config; + } else { + throw new UnsupportedOperationException("only support TcpSoConfig."); + } + } else { + soConfig = SoConfig.TCP(); + } + + soConfig.setRcvSlotSize(getConfig().getReadBufferSize()); + soConfig.setSndSlotSize(getConfig().getWriteBufferSize()); + soConfig.setSoKeepAlive(false); + return neta.bind(bindAddr, initializer, soConfig); + } +} \ No newline at end of file diff --git a/java/socketd-transport/socketd-transport-neta/src/main/java/org/noear/socketd/transport/neta/socket/udp/UdpAioClient.java b/java/socketd-transport/socketd-transport-neta/src/main/java/org/noear/socketd/transport/neta/socket/udp/UdpAioClient.java new file mode 100644 index 0000000000000000000000000000000000000000..1ba3d5596db62e7738e5e8807e2d0ba11e77f47e --- /dev/null +++ b/java/socketd-transport/socketd-transport-neta/src/main/java/org/noear/socketd/transport/neta/socket/udp/UdpAioClient.java @@ -0,0 +1,54 @@ +package org.noear.socketd.transport.neta.socket.udp; + +import net.hasor.cobble.NumberUtils; +import net.hasor.cobble.concurrent.future.Future; +import net.hasor.neta.channel.NetChannel; +import net.hasor.neta.channel.NetManager; +import net.hasor.neta.channel.ProtoInitializer; +import net.hasor.neta.channel.SoConfig; +import net.hasor.neta.channel.udp.UdpSoConfig; +import org.noear.socketd.transport.client.ClientConfig; +import org.noear.socketd.transport.client.ClientConnector; +import org.noear.socketd.transport.core.Constants; +import org.noear.socketd.transport.neta.socket.AioClient; +import org.noear.socketd.transport.neta.socket.AioClientConfig; +import org.noear.socketd.transport.neta.socket.AioClientConnector; + +import java.net.InetSocketAddress; + +/** + * @author noear + * @since 2.3 + */ +public class UdpAioClient extends AioClient { + public UdpAioClient(ClientConfig clientConfig) { + super(clientConfig); + } + + @Override + protected ClientConnector createConnector() { + return new AioClientConnector(this) { + @Override + protected Future connectTo(NetManager neta, InetSocketAddress remoteAddr, ProtoInitializer initializer) { + return tcpConnectTo(neta, remoteAddr, initializer); + } + }; + } + + protected Future tcpConnectTo(NetManager neta, InetSocketAddress remoteAddr, ProtoInitializer initializer) { + UdpSoConfig soConfig; + if (getConfig() instanceof AioClientConfig) { + SoConfig config = ((AioClientConfig) getConfig()).getSoConfig(); + if (config instanceof UdpSoConfig) { + soConfig = (UdpSoConfig) config; + } else { + throw new UnsupportedOperationException("only support UdpSoConfig."); + } + } else { + soConfig = SoConfig.UDP(); + } + + soConfig.setRcvPacketSize(NumberUtils.between(getConfig().getMaxUdpSize(), 2048, Constants.MAX_SIZE_FRAME)); + return neta.connectAsync(remoteAddr, initializer, soConfig); + } +} diff --git a/java/socketd-transport/socketd-transport-neta/src/main/java/org/noear/socketd/transport/neta/socket/udp/UdpAioProvider.java b/java/socketd-transport/socketd-transport-neta/src/main/java/org/noear/socketd/transport/neta/socket/udp/UdpAioProvider.java new file mode 100644 index 0000000000000000000000000000000000000000..c0776d2ddb01bae7daf71e2d7c847513eb5f586b --- /dev/null +++ b/java/socketd-transport/socketd-transport-neta/src/main/java/org/noear/socketd/transport/neta/socket/udp/UdpAioProvider.java @@ -0,0 +1,29 @@ +package org.noear.socketd.transport.neta.socket.udp; + +import org.noear.socketd.transport.client.Client; +import org.noear.socketd.transport.client.ClientConfig; +import org.noear.socketd.transport.client.ClientProvider; +import org.noear.socketd.transport.server.Server; +import org.noear.socketd.transport.server.ServerConfig; +import org.noear.socketd.transport.server.ServerProvider; + +/** + * @author noear + * @since 2.3 + */ +public class UdpAioProvider implements ClientProvider, ServerProvider { + @Override + public String[] schemas() { + return new String[] { "udp", "udps", "udp-neta", "sd:udp", "sd:udps", "sd:udp-neta" }; + } + + @Override + public Server createServer(ServerConfig serverConfig) { + return new UdpAioServer(serverConfig); + } + + @Override + public Client createClient(ClientConfig clientConfig) { + return new UdpAioClient(clientConfig); + } +} diff --git a/java/socketd-transport/socketd-transport-neta/src/main/java/org/noear/socketd/transport/neta/socket/udp/UdpAioServer.java b/java/socketd-transport/socketd-transport-neta/src/main/java/org/noear/socketd/transport/neta/socket/udp/UdpAioServer.java new file mode 100644 index 0000000000000000000000000000000000000000..e0f4ecf46c8bcf26d042d28f6c45f8fe333e35c3 --- /dev/null +++ b/java/socketd-transport/socketd-transport-neta/src/main/java/org/noear/socketd/transport/neta/socket/udp/UdpAioServer.java @@ -0,0 +1,49 @@ +package org.noear.socketd.transport.neta.socket.udp; + +import net.hasor.cobble.NumberUtils; +import net.hasor.neta.channel.NetListen; +import net.hasor.neta.channel.NetManager; +import net.hasor.neta.channel.ProtoInitializer; +import net.hasor.neta.channel.SoConfig; +import net.hasor.neta.channel.udp.UdpSoConfig; +import org.noear.socketd.SocketD; +import org.noear.socketd.transport.core.Constants; +import org.noear.socketd.transport.neta.socket.AioServer; +import org.noear.socketd.transport.neta.socket.AioServerConfig; +import org.noear.socketd.transport.server.ServerConfig; + +import java.io.IOException; +import java.net.InetSocketAddress; + +/** + * @author noear + * @since 2.3 + */ +public class UdpAioServer extends AioServer { + public UdpAioServer(ServerConfig config) { + super(config); + } + + @Override + public String getTitle() { + return "udp/aio/neta 1.0/" + SocketD.version(); + } + + @Override + protected NetListen bindTo(NetManager neta, InetSocketAddress bindAddr, ProtoInitializer initializer) throws IOException { + UdpSoConfig soConfig; + if (getConfig() instanceof AioServerConfig) { + SoConfig config = ((AioServerConfig) getConfig()).getSoConfig(); + if (config instanceof UdpSoConfig) { + soConfig = (UdpSoConfig) config; + } else { + throw new UnsupportedOperationException("only support UdpSoConfig."); + } + } else { + soConfig = SoConfig.UDP(); + } + + soConfig.setRcvPacketSize(NumberUtils.between(getConfig().getMaxUdpSize(), 2048, Constants.MAX_SIZE_FRAME)); + return neta.bind(bindAddr, initializer, soConfig); + } +} \ No newline at end of file diff --git a/java/socketd-transport/socketd-transport-neta/src/main/resources/META-INF/services/org.noear.socketd.transport.client.ClientProvider b/java/socketd-transport/socketd-transport-neta/src/main/resources/META-INF/services/org.noear.socketd.transport.client.ClientProvider index 94a9f88a5699bd2211cd3ddb9db4961bf5da7252..1e2f20b0d23f74148b7b8d8a0195333e20eb9755 100644 --- a/java/socketd-transport/socketd-transport-neta/src/main/resources/META-INF/services/org.noear.socketd.transport.client.ClientProvider +++ b/java/socketd-transport/socketd-transport-neta/src/main/resources/META-INF/services/org.noear.socketd.transport.client.ClientProvider @@ -1 +1,2 @@ -org.noear.socketd.transport.neta.tcp.TcpAioProvider \ No newline at end of file +org.noear.socketd.transport.neta.socket.tcp.TcpAioProvider +org.noear.socketd.transport.neta.socket.udp.UdpAioProvider \ No newline at end of file diff --git a/java/socketd-transport/socketd-transport-neta/src/main/resources/META-INF/services/org.noear.socketd.transport.server.ServerProvider b/java/socketd-transport/socketd-transport-neta/src/main/resources/META-INF/services/org.noear.socketd.transport.server.ServerProvider index 94a9f88a5699bd2211cd3ddb9db4961bf5da7252..1e2f20b0d23f74148b7b8d8a0195333e20eb9755 100644 --- a/java/socketd-transport/socketd-transport-neta/src/main/resources/META-INF/services/org.noear.socketd.transport.server.ServerProvider +++ b/java/socketd-transport/socketd-transport-neta/src/main/resources/META-INF/services/org.noear.socketd.transport.server.ServerProvider @@ -1 +1,2 @@ -org.noear.socketd.transport.neta.tcp.TcpAioProvider \ No newline at end of file +org.noear.socketd.transport.neta.socket.tcp.TcpAioProvider +org.noear.socketd.transport.neta.socket.udp.UdpAioProvider \ No newline at end of file