From 696bfbf264390221355dff818cf680cd422f734d Mon Sep 17 00:00:00 2001 From: Hiroki Tokunaga Date: Fri, 22 May 2026 17:46:43 +0900 Subject: [PATCH 1/4] feat(platform): decouple core from GUI prompts and logging Add UserPrompt and LogSink SPIs and remove direct core imports of gui and Swing from infrastructure on the monolithic source tree. Co-authored-by: Cursor --- .../core/packetproxy/DNSSpoofingIPGetter.java | 16 ++--- src/main/java/core/packetproxy/Duplex.java | 47 +++++++------- .../packetproxy/PPContextMenuManager.java | 6 +- .../packetproxy/common/ConfigHttpServer.java | 20 ++---- .../controller/ResendController.java | 51 +++++++++++---- .../controller/ResendProgressHandler.java | 25 ++++++++ .../{common => gui}/FilterTextParser.java | 3 +- .../core/packetproxy/gui/GUIBulkSender.java | 4 +- .../packetproxy/gui/GUIBulkSenderTable.java | 1 - .../java/core/packetproxy/gui/GUIHistory.java | 2 - .../java/core/packetproxy/gui/GUILogSink.java | 37 +++++++++++ .../java/core/packetproxy/gui/GUIMain.java | 9 +++ .../packetproxy/gui/GUIMainWindowAccess.java | 49 ++++++++++++++ .../gui/GUIOptionComponentBase.java | 1 - .../packetproxy/gui/GUIOptionHubServer.java | 2 +- .../packetproxy/gui/GUIOptionPrivateDNS.java | 8 +-- .../GUIOptionPrivateDNSSpoofingSource.java | 47 ++++++++++++++ .../gui/GUIRegexParamsTableDialog.java | 1 - .../core/packetproxy/gui/GUIResender.java | 2 +- .../packetproxy/gui/GUIVulCheckRecvTable.java | 1 - .../packetproxy/gui/GUIVulCheckSendTable.java | 1 - .../core/packetproxy/gui/GUIVulCheckTab.java | 4 +- .../{model => gui}/OptionTableModel.java | 2 +- .../gui/SwingConfigHttpUiActions.java | 64 +++++++++++++++++++ .../core/packetproxy/gui/SwingUserPrompt.java | 29 +++++++++ .../randomness/RandomnessExtension.java | 4 +- .../ppcontextmenu/PPContextMenu.java | 2 +- .../{ => gui}/ppcontextmenu/SampleItem.java | 2 +- .../packetproxy/model/ClientCertificates.java | 8 +-- .../core/packetproxy/model/Extensions.java | 9 ++- .../java/core/packetproxy/model/Filters.java | 6 +- .../packetproxy/model/InterceptOptions.java | 7 +- .../core/packetproxy/model/Modifications.java | 7 +- .../model/OpenVPNForwardPorts.java | 8 +-- .../java/core/packetproxy/model/Packets.java | 6 +- .../packetproxy/model/ResenderPackets.java | 7 +- .../packetproxy/model/SSLPassThroughs.java | 7 +- .../platform/ConfigHttpUiActions.java | 25 ++++++++ .../platform/ConsoleUserPrompt.java | 28 ++++++++ .../core/packetproxy/platform/LogSink.java | 24 +++++++ .../core/packetproxy/platform/LogSinks.java | 46 +++++++++++++ .../platform/MainWindowAccess.java | 31 +++++++++ .../packetproxy/platform/MainWindows.java | 34 ++++++++++ .../packetproxy/platform/PacketPredicate.java | 25 ++++++++ .../platform/SpoofingIPSource.java | 28 ++++++++ .../core/packetproxy/platform/UserPrompt.java | 27 ++++++++ .../packetproxy/platform/UserPrompts.java | 33 ++++++++++ .../JWTHeaderAddSpecifiedJKUGenerator.java | 19 +++--- .../JWTHeaderRS256toHS256Generator.java | 19 +++--- .../JWTSignWithAppleOtherTokenGenerator.java | 23 +++---- .../kotlin/core/packetproxy/AppInitializer.kt | 6 ++ .../kotlin/core/packetproxy/util/Logging.kt | 13 ++-- 52 files changed, 728 insertions(+), 158 deletions(-) create mode 100644 src/main/java/core/packetproxy/controller/ResendProgressHandler.java rename src/main/java/core/packetproxy/{common => gui}/FilterTextParser.java (99%) create mode 100644 src/main/java/core/packetproxy/gui/GUILogSink.java create mode 100644 src/main/java/core/packetproxy/gui/GUIMainWindowAccess.java create mode 100644 src/main/java/core/packetproxy/gui/GUIOptionPrivateDNSSpoofingSource.java rename src/main/java/core/packetproxy/{model => gui}/OptionTableModel.java (97%) create mode 100644 src/main/java/core/packetproxy/gui/SwingConfigHttpUiActions.java create mode 100644 src/main/java/core/packetproxy/gui/SwingUserPrompt.java rename src/main/java/core/packetproxy/{ => gui}/extensions/randomness/RandomnessExtension.java (99%) rename src/main/java/core/packetproxy/{ => gui}/ppcontextmenu/PPContextMenu.java (97%) rename src/main/java/core/packetproxy/{ => gui}/ppcontextmenu/SampleItem.java (97%) create mode 100644 src/main/java/core/packetproxy/platform/ConfigHttpUiActions.java create mode 100644 src/main/java/core/packetproxy/platform/ConsoleUserPrompt.java create mode 100644 src/main/java/core/packetproxy/platform/LogSink.java create mode 100644 src/main/java/core/packetproxy/platform/LogSinks.java create mode 100644 src/main/java/core/packetproxy/platform/MainWindowAccess.java create mode 100644 src/main/java/core/packetproxy/platform/MainWindows.java create mode 100644 src/main/java/core/packetproxy/platform/PacketPredicate.java create mode 100644 src/main/java/core/packetproxy/platform/SpoofingIPSource.java create mode 100644 src/main/java/core/packetproxy/platform/UserPrompt.java create mode 100644 src/main/java/core/packetproxy/platform/UserPrompts.java diff --git a/src/main/java/core/packetproxy/DNSSpoofingIPGetter.java b/src/main/java/core/packetproxy/DNSSpoofingIPGetter.java index 2e69a30f..85070edb 100644 --- a/src/main/java/core/packetproxy/DNSSpoofingIPGetter.java +++ b/src/main/java/core/packetproxy/DNSSpoofingIPGetter.java @@ -15,29 +15,29 @@ */ package packetproxy; -import packetproxy.gui.GUIOptionPrivateDNS; +import packetproxy.platform.SpoofingIPSource; public class DNSSpoofingIPGetter { - private final GUIOptionPrivateDNS gui; + private final SpoofingIPSource source; - public DNSSpoofingIPGetter(GUIOptionPrivateDNS gui) { - this.gui = gui; + public DNSSpoofingIPGetter(SpoofingIPSource source) { + this.source = source; } public boolean isAuto() { - return gui.isAutoSpoofing(); + return source.isAuto(); } public String get() { - return gui.getSpoofingIP(); + return source.get(); } public String get6() { - return gui.getSpoofingIP6(); + return source.get6(); } public String getInt() { - return gui.getBindInterface(); + return source.getInt(); } } diff --git a/src/main/java/core/packetproxy/Duplex.java b/src/main/java/core/packetproxy/Duplex.java index 9d9665f1..98f7d12f 100644 --- a/src/main/java/core/packetproxy/Duplex.java +++ b/src/main/java/core/packetproxy/Duplex.java @@ -22,10 +22,11 @@ import java.io.PipedInputStream; import java.io.PipedOutputStream; import java.util.EventListener; -import javax.swing.event.EventListenerList; +import java.util.List; +import java.util.concurrent.CopyOnWriteArrayList; public abstract class Duplex { - protected EventListenerList duplexEventListenerList = new EventListenerList(); + private final List duplexEventListeners = new CopyOnWriteArrayList<>(); private boolean flag_event_listener; private int PIPE_SIZE = 65536; private PipedOutputStream clientOutputForFlowControl; @@ -61,7 +62,7 @@ boolean isEnabledDuplexEventListener() { } public void addDuplexEventListener(DuplexEventListener listener) { - duplexEventListenerList.add(DuplexEventListener.class, listener); + duplexEventListeners.add(listener); enableDuplexEventListener(); } @@ -70,7 +71,7 @@ public int callOnClientPacketReceived(byte[] data) throws Exception { return data.length; } - for (DuplexEventListener listener : duplexEventListenerList.getListeners(DuplexEventListener.class)) { + for (DuplexEventListener listener : duplexEventListeners) { return listener.onClientPacketReceived(data); } @@ -82,7 +83,7 @@ public int callOnServerPacketReceived(byte[] data) throws Exception { return data.length; } - for (DuplexEventListener listener : duplexEventListenerList.getListeners(DuplexEventListener.class)) { + for (DuplexEventListener listener : duplexEventListeners) { return listener.onServerPacketReceived(data); } @@ -94,7 +95,7 @@ public void callOnClientChunkArrived(byte[] data) throws Exception { inputClientData.write(data); } - for (DuplexEventListener listener : duplexEventListenerList.getListeners(DuplexEventListener.class)) { + for (DuplexEventListener listener : duplexEventListeners) { listener.onClientChunkArrived(data); } @@ -105,7 +106,7 @@ public void callOnServerChunkArrived(byte[] data) throws Exception { inputServerData.write(data); } - for (DuplexEventListener listener : duplexEventListenerList.getListeners(DuplexEventListener.class)) { + for (DuplexEventListener listener : duplexEventListeners) { listener.onServerChunkArrived(data); } @@ -116,7 +117,7 @@ public byte[] callOnClientChunkPassThrough() throws Exception { return null; } - for (DuplexEventListener listener : duplexEventListenerList.getListeners(DuplexEventListener.class)) { + for (DuplexEventListener listener : duplexEventListeners) { return listener.onClientChunkPassThrough(); } @@ -128,7 +129,7 @@ public byte[] callOnServerChunkPassThrough() throws Exception { return null; } - for (DuplexEventListener listener : duplexEventListenerList.getListeners(DuplexEventListener.class)) { + for (DuplexEventListener listener : duplexEventListeners) { return listener.onServerChunkPassThrough(); } @@ -142,7 +143,7 @@ public byte[] callOnClientChunkAvailable() throws Exception { inputClientData.reset(); return ret; } - for (DuplexEventListener listener : duplexEventListenerList.getListeners(DuplexEventListener.class)) { + for (DuplexEventListener listener : duplexEventListeners) { return listener.onClientChunkAvailable(); } @@ -156,7 +157,7 @@ public byte[] callOnServerChunkAvailable() throws Exception { inputServerData.reset(); return ret; } - for (DuplexEventListener listener : duplexEventListenerList.getListeners(DuplexEventListener.class)) { + for (DuplexEventListener listener : duplexEventListeners) { return listener.onServerChunkAvailable(); } @@ -168,7 +169,7 @@ public byte[] callOnClientChunkReceived(byte[] data) throws Exception { return data; } - for (DuplexEventListener listener : duplexEventListenerList.getListeners(DuplexEventListener.class)) { + for (DuplexEventListener listener : duplexEventListeners) { return listener.onClientChunkReceived(data); } @@ -180,7 +181,7 @@ public byte[] callOnServerChunkReceived(byte[] data) throws Exception { return data; } - for (DuplexEventListener listener : duplexEventListenerList.getListeners(DuplexEventListener.class)) { + for (DuplexEventListener listener : duplexEventListeners) { return listener.onServerChunkReceived(data); } @@ -192,7 +193,7 @@ public byte[] callOnClientChunkSend(byte[] data) throws Exception { return data; } - for (DuplexEventListener listener : duplexEventListenerList.getListeners(DuplexEventListener.class)) { + for (DuplexEventListener listener : duplexEventListeners) { return listener.onClientChunkSend(data); } @@ -204,7 +205,7 @@ public byte[] callOnServerChunkSend(byte[] data) throws Exception { return data; } - for (DuplexEventListener listener : duplexEventListenerList.getListeners(DuplexEventListener.class)) { + for (DuplexEventListener listener : duplexEventListeners) { return listener.onServerChunkSend(data); } @@ -216,7 +217,7 @@ public byte[] callOnClientChunkSendForced(byte[] data) throws Exception { return data; } - for (DuplexEventListener listener : duplexEventListenerList.getListeners(DuplexEventListener.class)) { + for (DuplexEventListener listener : duplexEventListeners) { return listener.onClientChunkSendForced(data); } @@ -228,7 +229,7 @@ public byte[] callOnServerChunkSendForced(byte[] data) throws Exception { return data; } - for (DuplexEventListener listener : duplexEventListenerList.getListeners(DuplexEventListener.class)) { + for (DuplexEventListener listener : duplexEventListeners) { return listener.onServerChunkSendForced(data); } @@ -241,7 +242,7 @@ public void callOnClientChunkFlowControl(byte[] data) throws Exception { clientOutputForFlowControl.write(data); clientOutputForFlowControl.flush(); } - for (DuplexEventListener listener : duplexEventListenerList.getListeners(DuplexEventListener.class)) { + for (DuplexEventListener listener : duplexEventListeners) { listener.onClientChunkFlowControl(data); } @@ -252,7 +253,7 @@ public void closeOnClientChunkFlowControl() throws Exception { clientOutputForFlowControl.close(); } - for (DuplexEventListener listener : duplexEventListenerList.getListeners(DuplexEventListener.class)) { + for (DuplexEventListener listener : duplexEventListeners) { listener.closeClientChunkFlowControl(); } @@ -263,7 +264,7 @@ public InputStream getClientChunkFlowControlSink() throws Exception { return clientInputForFlowControl; } - for (DuplexEventListener listener : duplexEventListenerList.getListeners(DuplexEventListener.class)) { + for (DuplexEventListener listener : duplexEventListeners) { return listener.getClientChunkFlowControlSink(); } @@ -276,7 +277,7 @@ public void callOnServerChunkFlowControl(byte[] data) throws Exception { serverOutputForFlowControl.write(data); serverOutputForFlowControl.flush(); } - for (DuplexEventListener listener : duplexEventListenerList.getListeners(DuplexEventListener.class)) { + for (DuplexEventListener listener : duplexEventListeners) { listener.onServerChunkFlowControl(data); } @@ -287,7 +288,7 @@ public void closeOnServerChunkFlowControl() throws Exception { serverOutputForFlowControl.close(); } - for (DuplexEventListener listener : duplexEventListenerList.getListeners(DuplexEventListener.class)) { + for (DuplexEventListener listener : duplexEventListeners) { listener.closeServerChunkFlowControl(); } @@ -298,7 +299,7 @@ public InputStream getServerChunkFlowControlSink() throws Exception { return serverInputForFlowControl; } - for (DuplexEventListener listener : duplexEventListenerList.getListeners(DuplexEventListener.class)) { + for (DuplexEventListener listener : duplexEventListeners) { return listener.getServerChunkFlowControlSink(); } diff --git a/src/main/java/core/packetproxy/PPContextMenuManager.java b/src/main/java/core/packetproxy/PPContextMenuManager.java index 2b64c28e..e2466c52 100644 --- a/src/main/java/core/packetproxy/PPContextMenuManager.java +++ b/src/main/java/core/packetproxy/PPContextMenuManager.java @@ -30,14 +30,14 @@ import javax.tools.JavaFileObject; import javax.tools.StandardLocation; import javax.tools.ToolProvider; -import packetproxy.ppcontextmenu.PPContextMenu; +import packetproxy.gui.ppcontextmenu.PPContextMenu; public class PPContextMenuManager { private static PPContextMenuManager instance; private List module_list; - private static final String item_package = "packetproxy.ppcontextmenu"; - private static final Class item_class = packetproxy.ppcontextmenu.PPContextMenu.class; + private static final String item_package = "packetproxy.gui.ppcontextmenu"; + private static final Class item_class = packetproxy.gui.ppcontextmenu.PPContextMenu.class; public static PPContextMenuManager getInstance() throws Exception { if (instance == null) { diff --git a/src/main/java/core/packetproxy/common/ConfigHttpServer.java b/src/main/java/core/packetproxy/common/ConfigHttpServer.java index ca125627..8de7bf7d 100644 --- a/src/main/java/core/packetproxy/common/ConfigHttpServer.java +++ b/src/main/java/core/packetproxy/common/ConfigHttpServer.java @@ -7,13 +7,13 @@ import java.util.HashMap; import java.util.List; import java.util.Map; -import javax.swing.*; -import packetproxy.gui.GUIMain; import packetproxy.model.*; +import packetproxy.platform.ConfigHttpUiActions; public class ConfigHttpServer extends NanoHTTPD { private final String allowedAccessToken; + private final ConfigHttpUiActions uiActions; private static class DaoHub { @@ -30,9 +30,10 @@ private static class DaoHub { List sslPassThroughList; } - public ConfigHttpServer(String hostname, int port, String allowedAccessToken) { + public ConfigHttpServer(String hostname, int port, String allowedAccessToken, ConfigHttpUiActions uiActions) { super(hostname, port); this.allowedAccessToken = allowedAccessToken; + this.uiActions = uiActions; } private void fixUpServerList(Map serverMap, List serverList) { @@ -133,18 +134,9 @@ public Response serve(IHTTPSession session) { try { - GUIMain.getInstance().setAlwaysOnTop(true); - GUIMain.getInstance().setVisible(true); + uiActions.showOptionsTab(); - GUIMain.getInstance().getTabbedPane().setSelectedIndex(GUIMain.Panes.OPTIONS.ordinal()); - - int option = JOptionPane.showConfirmDialog(GUIMain.getInstance(), - I18nString.get("Do you want to overwrite config?"), I18nString.get("Loading config"), - JOptionPane.YES_NO_OPTION, JOptionPane.WARNING_MESSAGE); - - GUIMain.getInstance().setAlwaysOnTop(false); - - if (option == JOptionPane.NO_OPTION) { + if (!uiActions.confirmOverwriteConfig()) { return NanoHTTPD.newFixedLengthResponse(Response.Status.UNAUTHORIZED, MIME_HTML, null); } diff --git a/src/main/java/core/packetproxy/controller/ResendController.java b/src/main/java/core/packetproxy/controller/ResendController.java index f3d362ca..51ac4521 100644 --- a/src/main/java/core/packetproxy/controller/ResendController.java +++ b/src/main/java/core/packetproxy/controller/ResendController.java @@ -20,9 +20,13 @@ import java.net.SocketTimeoutException; import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.Future; import java.util.concurrent.TimeUnit; import java.util.function.Consumer; -import javax.swing.SwingWorker; import packetproxy.Duplex; import packetproxy.DuplexAsync; import packetproxy.DuplexFactory; @@ -38,6 +42,16 @@ public class ResendController { private static ResendController instance; + private static volatile ResendProgressHandler progressHandler = (worker, packets) -> {}; + private final ExecutorService executor = Executors.newCachedThreadPool(); + + public static void setProgressHandler(ResendProgressHandler handler) { + progressHandler = handler; + } + + static void notifyProgress(ResendWorker worker, OneShotPacket packet) { + progressHandler.onProgress(worker, Collections.singletonList(packet)); + } public static ResendController getInstance() throws Exception { if (instance == null) { @@ -62,15 +76,14 @@ public void resend(OneShotPacket oneshot, int count) throws Exception { /** レスポンスを受け取って処理する必要がないとき用 */ public void resend(OneShotPacket oneshot, int count, boolean wait) throws Exception { - SwingWorker worker; - worker = new ResendWorker(oneshot, count); - worker.execute(); + var worker = new ResendWorker(oneshot, count); + Future future = executor.submit(worker::runInBackground); if (wait && count != 1) { try { // InterceptでForward x 20した時に先に本体が処理されると困るので待つ - worker.get(20000, TimeUnit.MILLISECONDS); + future.get(20000, TimeUnit.MILLISECONDS); } catch (Exception e) { errWithStackTrace(e); @@ -85,10 +98,10 @@ public void resend(OneShotPacket oneshot, int count, boolean wait) throws Except * @param worker */ public void resend(ResendWorker worker) { - worker.execute(); + executor.submit(worker::runInBackground); } - public static class ResendWorker extends SwingWorker { + public static class ResendWorker { int count; OneShotPacket oneshot; @@ -108,8 +121,23 @@ public ResendWorker(OneShotPacket[] oneshots) { this.oneshots = oneshots; } - @Override - protected Object doInBackground() throws Exception { + protected void publish(OneShotPacket packet) { + ResendController.notifyProgress(this, packet); + } + + public void process(List packets) {} + + public void runInBackground() { + try { + + doInBackground(); + } catch (Exception e) { + + errWithStackTrace(e); + } + } + + protected void doInBackground() throws Exception { try { ArrayList list = new ArrayList(); @@ -134,7 +162,7 @@ protected Object doInBackground() throws Exception { } else { err("Resend packet is wrong!"); - return null; + return; } list.stream().filter(o -> o.isDirectSend()).forEach(sendData -> { @@ -161,13 +189,12 @@ protected Object doInBackground() throws Exception { err("Resend Connection is timeout!"); err("All resend packets are dropped."); errWithStackTrace(e); - return null; + return; } catch (Exception e) { errWithStackTrace(e); throw e; } - return null; } private class DataToBeSend { diff --git a/src/main/java/core/packetproxy/controller/ResendProgressHandler.java b/src/main/java/core/packetproxy/controller/ResendProgressHandler.java new file mode 100644 index 00000000..54c87a7a --- /dev/null +++ b/src/main/java/core/packetproxy/controller/ResendProgressHandler.java @@ -0,0 +1,25 @@ +/* + * Copyright 2026 DeNA Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package packetproxy.controller; + +import java.util.List; +import packetproxy.model.OneShotPacket; + +/** Resend 進捗を EDT 等へ渡す(通常は GUI が SwingUtilities で登録)。 */ +public interface ResendProgressHandler { + + void onProgress(ResendController.ResendWorker worker, List packets); +} diff --git a/src/main/java/core/packetproxy/common/FilterTextParser.java b/src/main/java/core/packetproxy/gui/FilterTextParser.java similarity index 99% rename from src/main/java/core/packetproxy/common/FilterTextParser.java rename to src/main/java/core/packetproxy/gui/FilterTextParser.java index 132d3901..08b52ff0 100644 --- a/src/main/java/core/packetproxy/common/FilterTextParser.java +++ b/src/main/java/core/packetproxy/gui/FilterTextParser.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package packetproxy.common; +package packetproxy.gui; import static packetproxy.util.Logging.errWithStackTrace; @@ -29,7 +29,6 @@ import javax.swing.RowFilter.ComparisonType; import javax.swing.table.DefaultTableModel; import org.apache.commons.collections4.map.HashedMap; -import packetproxy.gui.GUIHistory; import packetproxy.model.Packet; import packetproxy.model.Packets; diff --git a/src/main/java/core/packetproxy/gui/GUIBulkSender.java b/src/main/java/core/packetproxy/gui/GUIBulkSender.java index 928595df..ebc3d623 100644 --- a/src/main/java/core/packetproxy/gui/GUIBulkSender.java +++ b/src/main/java/core/packetproxy/gui/GUIBulkSender.java @@ -118,7 +118,7 @@ public void actionPerformed(ActionEvent e) { ResendController.getInstance().resend(new ResendWorker(oneshots) { @Override - protected void process(List oneshots) { + public void process(List oneshots) { try { for (OneShotPacket oneshot : oneshots) { @@ -159,7 +159,7 @@ public void run() { ResendController.getInstance().resend(new ResendWorker(sendOneshot, 1) { @Override - protected void process(List oneshots) { + public void process(List oneshots) { try { for (OneShotPacket oneshot : oneshots) { diff --git a/src/main/java/core/packetproxy/gui/GUIBulkSenderTable.java b/src/main/java/core/packetproxy/gui/GUIBulkSenderTable.java index 9bf3c295..1ba72f89 100644 --- a/src/main/java/core/packetproxy/gui/GUIBulkSenderTable.java +++ b/src/main/java/core/packetproxy/gui/GUIBulkSenderTable.java @@ -40,7 +40,6 @@ import javax.swing.table.TableCellRenderer; import packetproxy.common.Utils; import packetproxy.model.OneShotPacket; -import packetproxy.model.OptionTableModel; import packetproxy.model.RegexParam; public class GUIBulkSenderTable { diff --git a/src/main/java/core/packetproxy/gui/GUIHistory.java b/src/main/java/core/packetproxy/gui/GUIHistory.java index a1d13131..e7e8978a 100644 --- a/src/main/java/core/packetproxy/gui/GUIHistory.java +++ b/src/main/java/core/packetproxy/gui/GUIHistory.java @@ -69,14 +69,12 @@ import javax.swing.table.DefaultTableModel; import javax.swing.table.TableCellRenderer; import javax.swing.table.TableRowSorter; -import packetproxy.common.FilterTextParser; import packetproxy.common.FontManager; import packetproxy.common.I18nString; import packetproxy.common.Utils; import packetproxy.model.Database; import packetproxy.model.Database.DatabaseMessage; import packetproxy.model.Filters; -import packetproxy.model.OptionTableModel; import packetproxy.model.Packet; import packetproxy.model.Packets; import packetproxy.model.ResenderPackets; diff --git a/src/main/java/core/packetproxy/gui/GUILogSink.java b/src/main/java/core/packetproxy/gui/GUILogSink.java new file mode 100644 index 00000000..aca92415 --- /dev/null +++ b/src/main/java/core/packetproxy/gui/GUILogSink.java @@ -0,0 +1,37 @@ +/* + * Copyright 2026 DeNA Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package packetproxy.gui; + +import packetproxy.platform.LogSink; + +public class GUILogSink implements LogSink { + + private final GUILog guiLog; + + public GUILogSink(GUILog guiLog) { + this.guiLog = guiLog; + } + + @Override + public void append(String message) { + guiLog.append(message); + } + + @Override + public void appendErr(String message) { + guiLog.appendErr(message); + } +} diff --git a/src/main/java/core/packetproxy/gui/GUIMain.java b/src/main/java/core/packetproxy/gui/GUIMain.java index f91cac5e..b2b7e7ab 100644 --- a/src/main/java/core/packetproxy/gui/GUIMain.java +++ b/src/main/java/core/packetproxy/gui/GUIMain.java @@ -33,6 +33,10 @@ import packetproxy.common.FontManager; import packetproxy.common.I18nString; import packetproxy.model.InterceptModel; +import packetproxy.controller.ResendController; +import packetproxy.platform.LogSinks; +import packetproxy.platform.MainWindows; +import packetproxy.platform.UserPrompts; import packetproxy.util.PacketProxyUtility; public class GUIMain extends JFrame implements PropertyChangeListener { @@ -100,6 +104,10 @@ private String getPaneString(Panes num) { private GUIMain(String title) { try { + UserPrompts.set(new SwingUserPrompt()); + MainWindows.set(new GUIMainWindowAccess(this)); + ResendController.setProgressHandler( + (worker, packets) -> SwingUtilities.invokeLater(() -> worker.process(packets))); setIcon(); gui_history = initProjectAndHistory(); setLookandFeel(); @@ -117,6 +125,7 @@ private GUIMain(String title) { gui_extensions = GUIExtensions.getInstance(); gui_vulcheckhelper = GUIVulCheckHelper.getInstance(); gui_log = GUILog.getInstance(); + LogSinks.set(new GUILogSink(gui_log)); tabbedpane = new JTabbedPane(); diff --git a/src/main/java/core/packetproxy/gui/GUIMainWindowAccess.java b/src/main/java/core/packetproxy/gui/GUIMainWindowAccess.java new file mode 100644 index 00000000..cae32360 --- /dev/null +++ b/src/main/java/core/packetproxy/gui/GUIMainWindowAccess.java @@ -0,0 +1,49 @@ +/* + * Copyright 2026 DeNA Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package packetproxy.gui; + +import java.awt.Frame; +import java.awt.Rectangle; +import packetproxy.platform.MainWindowAccess; + +public class GUIMainWindowAccess implements MainWindowAccess { + + private final GUIMain main; + + public GUIMainWindowAccess(GUIMain main) { + this.main = main; + } + + @Override + public Frame getFrame() { + return main; + } + + @Override + public Rectangle getBounds() { + return main.getBounds(); + } + + @Override + public void setAlwaysOnTop(boolean onTop) { + main.setAlwaysOnTop(onTop); + } + + @Override + public void setVisible(boolean visible) { + main.setVisible(visible); + } +} diff --git a/src/main/java/core/packetproxy/gui/GUIOptionComponentBase.java b/src/main/java/core/packetproxy/gui/GUIOptionComponentBase.java index a75c18a9..f3036c33 100644 --- a/src/main/java/core/packetproxy/gui/GUIOptionComponentBase.java +++ b/src/main/java/core/packetproxy/gui/GUIOptionComponentBase.java @@ -35,7 +35,6 @@ import javax.swing.table.TableRowSorter; import packetproxy.common.FontManager; import packetproxy.common.I18nString; -import packetproxy.model.OptionTableModel; public abstract class GUIOptionComponentBase implements PropertyChangeListener { diff --git a/src/main/java/core/packetproxy/gui/GUIOptionHubServer.java b/src/main/java/core/packetproxy/gui/GUIOptionHubServer.java index eee56367..6e19510f 100644 --- a/src/main/java/core/packetproxy/gui/GUIOptionHubServer.java +++ b/src/main/java/core/packetproxy/gui/GUIOptionHubServer.java @@ -104,7 +104,7 @@ private void stopServer() { private void startServer() throws Exception { String accessToken = new ConfigString("SharingConfigsAccessToken").getString(); - this.server = new ConfigHttpServer("localhost", 32349, accessToken); + this.server = new ConfigHttpServer("localhost", 32349, accessToken, new SwingConfigHttpUiActions()); this.server.start(); } diff --git a/src/main/java/core/packetproxy/gui/GUIOptionPrivateDNS.java b/src/main/java/core/packetproxy/gui/GUIOptionPrivateDNS.java index 7bd21618..ad39c15f 100644 --- a/src/main/java/core/packetproxy/gui/GUIOptionPrivateDNS.java +++ b/src/main/java/core/packetproxy/gui/GUIOptionPrivateDNS.java @@ -285,7 +285,7 @@ private JButton createDnsPortSetButton() { if (port == null) { return; } - privateDNS.setPort(port, new DNSSpoofingIPGetter(this)); + privateDNS.setPort(port, new DNSSpoofingIPGetter(new GUIOptionPrivateDNSSpoofingSource(this))); }); return button; } @@ -390,7 +390,7 @@ private JCheckBox createCheckBox() { return; } - if (!privateDNS.start(new DNSSpoofingIPGetter(this))) { + if (!privateDNS.start(new DNSSpoofingIPGetter(new GUIOptionPrivateDNSSpoofingSource(this)))) { checkBox.setSelected(false); showPrivateDnsStartErrorDialog(); } @@ -437,7 +437,7 @@ public void updateState() { if (!checkBox.isSelected()) { return; } - if (!privateDNS.start(new DNSSpoofingIPGetter(this))) { + if (!privateDNS.start(new DNSSpoofingIPGetter(new GUIOptionPrivateDNSSpoofingSource(this)))) { checkBox.setSelected(false); showPrivateDnsStartErrorDialog(); } @@ -504,7 +504,7 @@ private void restartPrivateDnsForBindingInterfaceChange() { if (!privateDNS.isRunning()) { return; } - if (!privateDNS.restart(new DNSSpoofingIPGetter(this))) { + if (!privateDNS.restart(new DNSSpoofingIPGetter(new GUIOptionPrivateDNSSpoofingSource(this)))) { checkBox.setSelected(false); showPrivateDnsStartErrorDialog(); } diff --git a/src/main/java/core/packetproxy/gui/GUIOptionPrivateDNSSpoofingSource.java b/src/main/java/core/packetproxy/gui/GUIOptionPrivateDNSSpoofingSource.java new file mode 100644 index 00000000..b3840884 --- /dev/null +++ b/src/main/java/core/packetproxy/gui/GUIOptionPrivateDNSSpoofingSource.java @@ -0,0 +1,47 @@ +/* + * Copyright 2026 DeNA Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package packetproxy.gui; + +import packetproxy.platform.SpoofingIPSource; + +public class GUIOptionPrivateDNSSpoofingSource implements SpoofingIPSource { + + private final GUIOptionPrivateDNS gui; + + public GUIOptionPrivateDNSSpoofingSource(GUIOptionPrivateDNS gui) { + this.gui = gui; + } + + @Override + public boolean isAuto() { + return gui.isAutoSpoofing(); + } + + @Override + public String get() { + return gui.getSpoofingIP(); + } + + @Override + public String get6() { + return gui.getSpoofingIP6(); + } + + @Override + public String getInt() { + return gui.getBindInterface(); + } +} diff --git a/src/main/java/core/packetproxy/gui/GUIRegexParamsTableDialog.java b/src/main/java/core/packetproxy/gui/GUIRegexParamsTableDialog.java index ee45d6e0..0673bfd7 100644 --- a/src/main/java/core/packetproxy/gui/GUIRegexParamsTableDialog.java +++ b/src/main/java/core/packetproxy/gui/GUIRegexParamsTableDialog.java @@ -23,7 +23,6 @@ import javax.swing.JTable; import javax.swing.table.TableRowSorter; import packetproxy.common.FontManager; -import packetproxy.model.OptionTableModel; import packetproxy.model.RegexParam; public class GUIRegexParamsTableDialog extends JDialog { diff --git a/src/main/java/core/packetproxy/gui/GUIResender.java b/src/main/java/core/packetproxy/gui/GUIResender.java index c43aa7cb..34915cc2 100644 --- a/src/main/java/core/packetproxy/gui/GUIResender.java +++ b/src/main/java/core/packetproxy/gui/GUIResender.java @@ -249,7 +249,7 @@ public void actionPerformed(ActionEvent e) { ResendController.getInstance().resend(new ResendWorker(sendPacket, 1) { @Override - protected void process(List packets) { + public void process(List packets) { try { OneShotPacket recvPacket = packets.get(0); diff --git a/src/main/java/core/packetproxy/gui/GUIVulCheckRecvTable.java b/src/main/java/core/packetproxy/gui/GUIVulCheckRecvTable.java index 64430951..560cb60f 100644 --- a/src/main/java/core/packetproxy/gui/GUIVulCheckRecvTable.java +++ b/src/main/java/core/packetproxy/gui/GUIVulCheckRecvTable.java @@ -25,7 +25,6 @@ import javax.swing.event.ListSelectionEvent; import javax.swing.table.TableCellRenderer; import packetproxy.model.OneShotPacket; -import packetproxy.model.OptionTableModel; public class GUIVulCheckRecvTable { diff --git a/src/main/java/core/packetproxy/gui/GUIVulCheckSendTable.java b/src/main/java/core/packetproxy/gui/GUIVulCheckSendTable.java index 595855ab..5b9ee779 100644 --- a/src/main/java/core/packetproxy/gui/GUIVulCheckSendTable.java +++ b/src/main/java/core/packetproxy/gui/GUIVulCheckSendTable.java @@ -28,7 +28,6 @@ import javax.swing.event.ListSelectionEvent; import javax.swing.table.TableCellRenderer; import packetproxy.model.OneShotPacket; -import packetproxy.model.OptionTableModel; public class GUIVulCheckSendTable { diff --git a/src/main/java/core/packetproxy/gui/GUIVulCheckTab.java b/src/main/java/core/packetproxy/gui/GUIVulCheckTab.java index d80a51df..04c59fec 100644 --- a/src/main/java/core/packetproxy/gui/GUIVulCheckTab.java +++ b/src/main/java/core/packetproxy/gui/GUIVulCheckTab.java @@ -172,7 +172,7 @@ public void actionPerformed(ActionEvent e) { ResendController.getInstance().resend(new ResendWorker(packet, 1) { @Override - protected void process(List oneshots) { + public void process(List oneshots) { Date recvTime = new Date(); try { @@ -216,7 +216,7 @@ public void actionPerformed(ActionEvent e) { ResendController.getInstance().resend(new ResendWorker(packet, 1) { @Override - protected void process(List oneshots) { + public void process(List oneshots) { Date recvTime = new Date(); try { diff --git a/src/main/java/core/packetproxy/model/OptionTableModel.java b/src/main/java/core/packetproxy/gui/OptionTableModel.java similarity index 97% rename from src/main/java/core/packetproxy/model/OptionTableModel.java rename to src/main/java/core/packetproxy/gui/OptionTableModel.java index 8dc665cb..53fb5112 100644 --- a/src/main/java/core/packetproxy/model/OptionTableModel.java +++ b/src/main/java/core/packetproxy/gui/OptionTableModel.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package packetproxy.model; +package packetproxy.gui; import javax.swing.table.DefaultTableModel; import org.apache.commons.lang3.ObjectUtils.Null; diff --git a/src/main/java/core/packetproxy/gui/SwingConfigHttpUiActions.java b/src/main/java/core/packetproxy/gui/SwingConfigHttpUiActions.java new file mode 100644 index 00000000..fadcf844 --- /dev/null +++ b/src/main/java/core/packetproxy/gui/SwingConfigHttpUiActions.java @@ -0,0 +1,64 @@ +/* + * Copyright 2026 DeNA Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package packetproxy.gui; + +import javax.swing.JOptionPane; +import packetproxy.common.I18nString; +import packetproxy.platform.ConfigHttpUiActions; + +public class SwingConfigHttpUiActions implements ConfigHttpUiActions { + + @Override + public void showOptionsTab() { + try { + showOptionsTabInternal(); + } catch (Exception e) { + throw new IllegalStateException(e); + } + } + + private void showOptionsTabInternal() throws Exception { + var main = GUIMain.getInstance(); + main.setAlwaysOnTop(true); + main.setVisible(true); + main.getTabbedPane().setSelectedIndex(GUIMain.Panes.OPTIONS.ordinal()); + main.setAlwaysOnTop(false); + } + + @Override + public boolean confirmOverwriteConfig() { + try { + return confirmOverwriteConfigInternal(); + } catch (Exception e) { + throw new IllegalStateException(e); + } + } + + private boolean confirmOverwriteConfigInternal() throws Exception { + var main = GUIMain.getInstance(); + main.setAlwaysOnTop(true); + main.setVisible(true); + int option = + JOptionPane.showConfirmDialog( + main, + I18nString.get("Do you want to overwrite config?"), + I18nString.get("Loading config"), + JOptionPane.YES_NO_OPTION, + JOptionPane.WARNING_MESSAGE); + main.setAlwaysOnTop(false); + return option == JOptionPane.YES_OPTION; + } +} diff --git a/src/main/java/core/packetproxy/gui/SwingUserPrompt.java b/src/main/java/core/packetproxy/gui/SwingUserPrompt.java new file mode 100644 index 00000000..fafe3376 --- /dev/null +++ b/src/main/java/core/packetproxy/gui/SwingUserPrompt.java @@ -0,0 +1,29 @@ +/* + * Copyright 2026 DeNA Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package packetproxy.gui; + +import javax.swing.JOptionPane; +import packetproxy.platform.UserPrompt; + +public class SwingUserPrompt implements UserPrompt { + + @Override + public boolean confirmTableRecreate(String tableName, String message) { + int option = JOptionPane.showConfirmDialog(null, message, "テーブルの更新", JOptionPane.YES_NO_OPTION, + JOptionPane.WARNING_MESSAGE); + return option == JOptionPane.YES_OPTION; + } +} diff --git a/src/main/java/core/packetproxy/extensions/randomness/RandomnessExtension.java b/src/main/java/core/packetproxy/gui/extensions/randomness/RandomnessExtension.java similarity index 99% rename from src/main/java/core/packetproxy/extensions/randomness/RandomnessExtension.java rename to src/main/java/core/packetproxy/gui/extensions/randomness/RandomnessExtension.java index 2864af7a..8e35eab4 100644 --- a/src/main/java/core/packetproxy/extensions/randomness/RandomnessExtension.java +++ b/src/main/java/core/packetproxy/gui/extensions/randomness/RandomnessExtension.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package packetproxy.extensions.randomness; +package packetproxy.gui.extensions.randomness; import static packetproxy.util.Logging.errWithStackTrace; import static packetproxy.util.Logging.log; @@ -186,7 +186,7 @@ public void actionPerformed(ActionEvent event) { ResendController.getInstance().resend(new ResendController.ResendWorker(sendPacket, 1) { @Override - protected void process(List oneshots) { + public void process(List oneshots) { int id = requestProgressBar.getValue(); for (OneShotPacket oneshot : oneshots) { diff --git a/src/main/java/core/packetproxy/ppcontextmenu/PPContextMenu.java b/src/main/java/core/packetproxy/gui/ppcontextmenu/PPContextMenu.java similarity index 97% rename from src/main/java/core/packetproxy/ppcontextmenu/PPContextMenu.java rename to src/main/java/core/packetproxy/gui/ppcontextmenu/PPContextMenu.java index 91669671..d51450d3 100644 --- a/src/main/java/core/packetproxy/ppcontextmenu/PPContextMenu.java +++ b/src/main/java/core/packetproxy/gui/ppcontextmenu/PPContextMenu.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package packetproxy.ppcontextmenu; +package packetproxy.gui.ppcontextmenu; import static packetproxy.util.Logging.errWithStackTrace; import static packetproxy.util.Logging.log; diff --git a/src/main/java/core/packetproxy/ppcontextmenu/SampleItem.java b/src/main/java/core/packetproxy/gui/ppcontextmenu/SampleItem.java similarity index 97% rename from src/main/java/core/packetproxy/ppcontextmenu/SampleItem.java rename to src/main/java/core/packetproxy/gui/ppcontextmenu/SampleItem.java index 2ab25f8a..5e4631e9 100644 --- a/src/main/java/core/packetproxy/ppcontextmenu/SampleItem.java +++ b/src/main/java/core/packetproxy/gui/ppcontextmenu/SampleItem.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package packetproxy.ppcontextmenu; +package packetproxy.gui.ppcontextmenu; import java.io.File; import javax.swing.JFrame; diff --git a/src/main/java/core/packetproxy/model/ClientCertificates.java b/src/main/java/core/packetproxy/model/ClientCertificates.java index 948ce6e3..c77fd3f7 100644 --- a/src/main/java/core/packetproxy/model/ClientCertificates.java +++ b/src/main/java/core/packetproxy/model/ClientCertificates.java @@ -24,8 +24,8 @@ import java.beans.PropertyChangeListener; import java.beans.PropertyChangeSupport; import java.util.List; -import javax.swing.JOptionPane; import packetproxy.common.ClientKeyManager; +import packetproxy.platform.UserPrompts; import packetproxy.model.Database.DatabaseMessage; /** DAO for ClientCertificate */ @@ -168,10 +168,8 @@ private boolean isLatestVersion() throws Exception { } private void RecreateTable() throws Exception { - int option = JOptionPane.showConfirmDialog(null, - "client_certificatesテーブルの形式が更新されているため\n現在のテーブルを削除して再起動しても良いですか?", "テーブルの更新", JOptionPane.YES_NO_OPTION, - JOptionPane.WARNING_MESSAGE); - if (option == JOptionPane.YES_OPTION) { + if (UserPrompts.get().confirmTableRecreate("client_certificates", + "client_certificatesテーブルの形式が更新されているため\n現在のテーブルを削除して再起動しても良いですか?")) { database.dropTable(ClientCertificate.class); dao = database.createTable(ClientCertificate.class, this); diff --git a/src/main/java/core/packetproxy/model/Extensions.java b/src/main/java/core/packetproxy/model/Extensions.java index ef221d45..67ca0804 100644 --- a/src/main/java/core/packetproxy/model/Extensions.java +++ b/src/main/java/core/packetproxy/model/Extensions.java @@ -33,8 +33,8 @@ import java.util.Map; import java.util.jar.JarEntry; import java.util.jar.JarFile; -import javax.swing.JOptionPane; -import packetproxy.extensions.randomness.RandomnessExtension; +import packetproxy.gui.extensions.randomness.RandomnessExtension; +import packetproxy.platform.UserPrompts; import packetproxy.extensions.samplehttp.SampleEncoders; import packetproxy.extensions.securityheaders.SecurityHeadersExtension; import packetproxy.model.Database.DatabaseMessage; @@ -313,9 +313,8 @@ private boolean isLatestVersion() throws Exception { } private void RecreateTable() throws Exception { - int option = JOptionPane.showConfirmDialog(null, "Extensionsテーブルの形式が更新されているため\n現在のテーブルを削除して再起動しても良いですか?", - "テーブルの更新", JOptionPane.YES_NO_OPTION, JOptionPane.WARNING_MESSAGE); - if (option == JOptionPane.YES_OPTION) { + if (UserPrompts.get().confirmTableRecreate("Extensions", + "Extensionsテーブルの形式が更新されているため\n現在のテーブルを削除して再起動しても良いですか?")) { database.dropTable(Extension.class); dao = database.createTable(Extension.class, this); diff --git a/src/main/java/core/packetproxy/model/Filters.java b/src/main/java/core/packetproxy/model/Filters.java index 04cf19a3..cff8f48b 100644 --- a/src/main/java/core/packetproxy/model/Filters.java +++ b/src/main/java/core/packetproxy/model/Filters.java @@ -24,8 +24,8 @@ import java.beans.PropertyChangeListener; import java.beans.PropertyChangeSupport; import java.util.List; -import javax.swing.JOptionPane; import packetproxy.model.Database.DatabaseMessage; +import packetproxy.platform.UserPrompts; public class Filters implements PropertyChangeListener { @@ -145,9 +145,7 @@ private boolean isLatestVersion() throws Exception { } private void RecreateTable() throws Exception { - int option = JOptionPane.showConfirmDialog(null, "filtersテーブルの形式が更新されているため\n現在のテーブルを削除して再起動しても良いですか?", - "テーブルの更新", JOptionPane.YES_NO_OPTION, JOptionPane.WARNING_MESSAGE); - if (option == JOptionPane.YES_OPTION) { + if (UserPrompts.get().confirmTableRecreate("filters", "filtersテーブルの形式が更新されているため\n現在のテーブルを削除して再起動しても良いですか?")) { database.dropTable(Filter.class); dao = database.createTable(Filter.class, this); diff --git a/src/main/java/core/packetproxy/model/InterceptOptions.java b/src/main/java/core/packetproxy/model/InterceptOptions.java index 283e3395..719183d2 100644 --- a/src/main/java/core/packetproxy/model/InterceptOptions.java +++ b/src/main/java/core/packetproxy/model/InterceptOptions.java @@ -25,8 +25,8 @@ import java.beans.PropertyChangeSupport; import java.util.ArrayList; import java.util.List; -import javax.swing.JOptionPane; import packetproxy.model.Database.DatabaseMessage; +import packetproxy.platform.UserPrompts; import packetproxy.model.InterceptOption.Direction; public class InterceptOptions implements PropertyChangeListener { @@ -349,9 +349,8 @@ public boolean isEnabled() throws Exception { } private void RecreateTable() throws Exception { - int option = JOptionPane.showConfirmDialog(null, "InterceptOptionsテーブルの形式が更新されているため\n現在のテーブルを削除して再起動しても良いですか?", - "テーブルの更新", JOptionPane.YES_NO_OPTION, JOptionPane.WARNING_MESSAGE); - if (option == JOptionPane.YES_OPTION) { + if (UserPrompts.get().confirmTableRecreate("InterceptOptions", + "InterceptOptionsテーブルの形式が更新されているため\n現在のテーブルを削除して再起動しても良いですか?")) { database.dropTable(InterceptOption.class); dao = database.createTable(InterceptOption.class, this); diff --git a/src/main/java/core/packetproxy/model/Modifications.java b/src/main/java/core/packetproxy/model/Modifications.java index 7faa7a26..9f5f1d50 100644 --- a/src/main/java/core/packetproxy/model/Modifications.java +++ b/src/main/java/core/packetproxy/model/Modifications.java @@ -23,8 +23,8 @@ import java.beans.PropertyChangeListener; import java.beans.PropertyChangeSupport; import java.util.List; -import javax.swing.JOptionPane; import packetproxy.model.Database.DatabaseMessage; +import packetproxy.platform.UserPrompts; public class Modifications implements PropertyChangeListener { @@ -210,9 +210,8 @@ private boolean isLatestVersion() throws Exception { } private void RecreateTable() throws Exception { - int option = JOptionPane.showConfirmDialog(null, "Modificationsテーブルの形式が更新されているため\n現在のテーブルを削除して再起動しても良いですか?", - "テーブルの更新", JOptionPane.YES_NO_OPTION, JOptionPane.WARNING_MESSAGE); - if (option == JOptionPane.YES_OPTION) { + if (UserPrompts.get().confirmTableRecreate("Modifications", + "Modificationsテーブルの形式が更新されているため\n現在のテーブルを削除して再起動しても良いですか?")) { database.dropTable(Modification.class); dao = database.createTable(Modification.class, this); diff --git a/src/main/java/core/packetproxy/model/OpenVPNForwardPorts.java b/src/main/java/core/packetproxy/model/OpenVPNForwardPorts.java index b20ecd23..9697f183 100644 --- a/src/main/java/core/packetproxy/model/OpenVPNForwardPorts.java +++ b/src/main/java/core/packetproxy/model/OpenVPNForwardPorts.java @@ -24,8 +24,8 @@ import java.beans.PropertyChangeListener; import java.beans.PropertyChangeSupport; import java.util.List; -import javax.swing.JOptionPane; import packetproxy.model.Database.DatabaseMessage; +import packetproxy.platform.UserPrompts; public class OpenVPNForwardPorts implements PropertyChangeListener { @@ -176,10 +176,8 @@ private boolean isLatestVersion() throws Exception { } private void RecreateTable() throws Exception { - int option = JOptionPane.showConfirmDialog(null, - "OpenVPNForwardPortsテーブルの形式が更新されているため\n現在のテーブルを削除して再起動しても良いですか?", "テーブルの更新", JOptionPane.YES_NO_OPTION, - JOptionPane.WARNING_MESSAGE); - if (option == JOptionPane.YES_OPTION) { + if (UserPrompts.get().confirmTableRecreate("OpenVPNForwardPorts", + "OpenVPNForwardPortsテーブルの形式が更新されているため\n現在のテーブルを削除して再起動しても良いですか?")) { database.dropTable(OpenVPNForwardPort.class); dao = database.createTable(OpenVPNForwardPort.class, this); diff --git a/src/main/java/core/packetproxy/model/Packets.java b/src/main/java/core/packetproxy/model/Packets.java index f00e96da..849b52cd 100644 --- a/src/main/java/core/packetproxy/model/Packets.java +++ b/src/main/java/core/packetproxy/model/Packets.java @@ -27,8 +27,8 @@ import java.util.List; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; -import javax.swing.JOptionPane; import packetproxy.common.Logger; +import packetproxy.platform.UserPrompts; import packetproxy.model.Database.DatabaseMessage; public class Packets implements PropertyChangeListener { @@ -251,9 +251,7 @@ private boolean isLatestVersion() throws Exception { } private void RecreateTable() throws Exception { - int option = JOptionPane.showConfirmDialog(null, "packetsテーブルの形式が更新されているため\n現在のテーブルを削除して再起動しても良いですか?", - "テーブルの更新", JOptionPane.YES_NO_OPTION, JOptionPane.WARNING_MESSAGE); - if (option == JOptionPane.YES_OPTION) { + if (UserPrompts.get().confirmTableRecreate("packets", "packetsテーブルの形式が更新されているため\n現在のテーブルを削除して再起動しても良いですか?")) { database.dropTable(Packet.class); dao = database.createTable(Packet.class); diff --git a/src/main/java/core/packetproxy/model/ResenderPackets.java b/src/main/java/core/packetproxy/model/ResenderPackets.java index a8269019..3be892e9 100644 --- a/src/main/java/core/packetproxy/model/ResenderPackets.java +++ b/src/main/java/core/packetproxy/model/ResenderPackets.java @@ -10,8 +10,8 @@ import java.beans.PropertyChangeListener; import java.beans.PropertyChangeSupport; import java.util.List; -import javax.swing.JOptionPane; import packetproxy.model.Database.DatabaseMessage; +import packetproxy.platform.UserPrompts; public class ResenderPackets implements PropertyChangeListener { @@ -124,9 +124,8 @@ private boolean isLatestVersion() throws Exception { } private void RecreateTable() throws Exception { - int option = JOptionPane.showConfirmDialog(null, "resender_packetsテーブルの形式が更新されているため\n現在のテーブルを削除して再起動しても良いですか?", - "テーブルの更新", JOptionPane.YES_NO_OPTION, JOptionPane.WARNING_MESSAGE); - if (option == JOptionPane.YES_OPTION) { + if (UserPrompts.get().confirmTableRecreate("resender_packets", + "resender_packetsテーブルの形式が更新されているため\n現在のテーブルを削除して再起動しても良いですか?")) { database.dropTable(ResenderPacket.class); dao = database.createTable(ResenderPacket.class, this); diff --git a/src/main/java/core/packetproxy/model/SSLPassThroughs.java b/src/main/java/core/packetproxy/model/SSLPassThroughs.java index 80073b80..a0940fca 100644 --- a/src/main/java/core/packetproxy/model/SSLPassThroughs.java +++ b/src/main/java/core/packetproxy/model/SSLPassThroughs.java @@ -24,8 +24,8 @@ import java.beans.PropertyChangeListener; import java.beans.PropertyChangeSupport; import java.util.List; -import javax.swing.JOptionPane; import packetproxy.ListenPortManager; +import packetproxy.platform.UserPrompts; import packetproxy.model.Database.DatabaseMessage; public class SSLPassThroughs implements PropertyChangeListener { @@ -235,9 +235,8 @@ private boolean isLatestVersion() throws Exception { } private void RecreateTable() throws Exception { - int option = JOptionPane.showConfirmDialog(null, "SSLPassThroughsテーブルの形式が更新されているため\n現在のテーブルを削除して再起動しても良いですか?", - "テーブルの更新", JOptionPane.YES_NO_OPTION, JOptionPane.WARNING_MESSAGE); - if (option == JOptionPane.YES_OPTION) { + if (UserPrompts.get().confirmTableRecreate("SSLPassThroughs", + "SSLPassThroughsテーブルの形式が更新されているため\n現在のテーブルを削除して再起動しても良いですか?")) { database.dropTable(SSLPassThrough.class); dao = database.createTable(SSLPassThrough.class, this); diff --git a/src/main/java/core/packetproxy/platform/ConfigHttpUiActions.java b/src/main/java/core/packetproxy/platform/ConfigHttpUiActions.java new file mode 100644 index 00000000..a9f63de0 --- /dev/null +++ b/src/main/java/core/packetproxy/platform/ConfigHttpUiActions.java @@ -0,0 +1,25 @@ +/* + * Copyright 2026 DeNA Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package packetproxy.platform; + +/** リモート設定 HTTP API から必要な GUI 操作。 */ +public interface ConfigHttpUiActions { + + void showOptionsTab(); + + /** @return 設定上書きを許可する場合 true */ + boolean confirmOverwriteConfig(); +} diff --git a/src/main/java/core/packetproxy/platform/ConsoleUserPrompt.java b/src/main/java/core/packetproxy/platform/ConsoleUserPrompt.java new file mode 100644 index 00000000..d4faf02c --- /dev/null +++ b/src/main/java/core/packetproxy/platform/ConsoleUserPrompt.java @@ -0,0 +1,28 @@ +/* + * Copyright 2026 DeNA Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package packetproxy.platform; + +import static packetproxy.util.Logging.err; + +/** 非対話環境(Gulp 等)向け。確認は行わず、テーブル再作成は拒否する。 */ +public class ConsoleUserPrompt implements UserPrompt { + + @Override + public boolean confirmTableRecreate(String tableName, String message) { + err("Table schema mismatch for %s (recreate declined in non-interactive mode): %s", tableName, message); + return false; + } +} diff --git a/src/main/java/core/packetproxy/platform/LogSink.java b/src/main/java/core/packetproxy/platform/LogSink.java new file mode 100644 index 00000000..9e4153f7 --- /dev/null +++ b/src/main/java/core/packetproxy/platform/LogSink.java @@ -0,0 +1,24 @@ +/* + * Copyright 2026 DeNA Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package packetproxy.platform; + +/** GUI 等が実装する、アプリケーション内ログ表示の抽象化。 */ +public interface LogSink { + + void append(String message); + + void appendErr(String message); +} diff --git a/src/main/java/core/packetproxy/platform/LogSinks.java b/src/main/java/core/packetproxy/platform/LogSinks.java new file mode 100644 index 00000000..3c4f7e8c --- /dev/null +++ b/src/main/java/core/packetproxy/platform/LogSinks.java @@ -0,0 +1,46 @@ +/* + * Copyright 2026 DeNA Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package packetproxy.platform; + +/** {@link LogSink} の実行時登録先。 */ +public final class LogSinks { + + private static volatile LogSink sink; + + private LogSinks() {} + + public static void set(LogSink logSink) { + sink = logSink; + } + + public static void clear() { + sink = null; + } + + public static void append(String message) { + var current = sink; + if (current != null) { + current.append(message); + } + } + + public static void appendErr(String message) { + var current = sink; + if (current != null) { + current.appendErr(message); + } + } +} diff --git a/src/main/java/core/packetproxy/platform/MainWindowAccess.java b/src/main/java/core/packetproxy/platform/MainWindowAccess.java new file mode 100644 index 00000000..da008fbc --- /dev/null +++ b/src/main/java/core/packetproxy/platform/MainWindowAccess.java @@ -0,0 +1,31 @@ +/* + * Copyright 2026 DeNA Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package packetproxy.platform; + +import java.awt.Frame; +import java.awt.Rectangle; + +/** メインウィンドウへの参照(vulchecker 等が利用)。 */ +public interface MainWindowAccess { + + Frame getFrame(); + + Rectangle getBounds(); + + void setAlwaysOnTop(boolean onTop); + + void setVisible(boolean visible); +} diff --git a/src/main/java/core/packetproxy/platform/MainWindows.java b/src/main/java/core/packetproxy/platform/MainWindows.java new file mode 100644 index 00000000..6ee5f6dd --- /dev/null +++ b/src/main/java/core/packetproxy/platform/MainWindows.java @@ -0,0 +1,34 @@ +/* + * Copyright 2026 DeNA Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package packetproxy.platform; + +public final class MainWindows { + + private static volatile MainWindowAccess instance; + + private MainWindows() {} + + public static MainWindowAccess get() { + if (instance == null) { + throw new IllegalStateException("MainWindowAccess is not registered"); + } + return instance; + } + + public static void set(MainWindowAccess access) { + instance = access; + } +} diff --git a/src/main/java/core/packetproxy/platform/PacketPredicate.java b/src/main/java/core/packetproxy/platform/PacketPredicate.java new file mode 100644 index 00000000..5afc4866 --- /dev/null +++ b/src/main/java/core/packetproxy/platform/PacketPredicate.java @@ -0,0 +1,25 @@ +/* + * Copyright 2026 DeNA Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package packetproxy.platform; + +import packetproxy.model.Packet; + +/** パケット履歴フィルタの評価(Swing 非依存)。 */ +@FunctionalInterface +public interface PacketPredicate { + + boolean test(Packet packet); +} diff --git a/src/main/java/core/packetproxy/platform/SpoofingIPSource.java b/src/main/java/core/packetproxy/platform/SpoofingIPSource.java new file mode 100644 index 00000000..084586c7 --- /dev/null +++ b/src/main/java/core/packetproxy/platform/SpoofingIPSource.java @@ -0,0 +1,28 @@ +/* + * Copyright 2026 DeNA Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package packetproxy.platform; + +/** Private DNS のスプーフ IP 設定(GUI 実装が提供する)。 */ +public interface SpoofingIPSource { + + boolean isAuto(); + + String get(); + + String get6(); + + String getInt(); +} diff --git a/src/main/java/core/packetproxy/platform/UserPrompt.java b/src/main/java/core/packetproxy/platform/UserPrompt.java new file mode 100644 index 00000000..370a4d66 --- /dev/null +++ b/src/main/java/core/packetproxy/platform/UserPrompt.java @@ -0,0 +1,27 @@ +/* + * Copyright 2026 DeNA Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package packetproxy.platform; + +/** UI や CLI が実装する、ユーザー確認ダイアログの抽象化。 */ +public interface UserPrompt { + + /** + * スキーマ不一致時にテーブル再作成の可否をユーザーに尋ねる。 + * + * @return 再作成してよい場合は true + */ + boolean confirmTableRecreate(String tableName, String message); +} diff --git a/src/main/java/core/packetproxy/platform/UserPrompts.java b/src/main/java/core/packetproxy/platform/UserPrompts.java new file mode 100644 index 00000000..ff846064 --- /dev/null +++ b/src/main/java/core/packetproxy/platform/UserPrompts.java @@ -0,0 +1,33 @@ +/* + * Copyright 2026 DeNA Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package packetproxy.platform; + +/** {@link UserPrompt} の実行時登録先。起動モード(GUI / Gulp)に応じて実装を差し替える。 */ +public final class UserPrompts { + + private static volatile UserPrompt instance = new ConsoleUserPrompt(); + + private UserPrompts() { + } + + public static UserPrompt get() { + return instance; + } + + public static void set(UserPrompt prompt) { + instance = prompt; + } +} diff --git a/src/main/java/core/packetproxy/vulchecker/generator/JWTHeaderAddSpecifiedJKUGenerator.java b/src/main/java/core/packetproxy/vulchecker/generator/JWTHeaderAddSpecifiedJKUGenerator.java index 0fa21bb4..6fb67081 100644 --- a/src/main/java/core/packetproxy/vulchecker/generator/JWTHeaderAddSpecifiedJKUGenerator.java +++ b/src/main/java/core/packetproxy/vulchecker/generator/JWTHeaderAddSpecifiedJKUGenerator.java @@ -21,7 +21,7 @@ import java.awt.event.MouseEvent; import javax.swing.*; import org.apache.commons.codec.binary.Hex; -import packetproxy.gui.GUIMain; +import packetproxy.platform.MainWindows; public class JWTHeaderAddSpecifiedJKUGenerator extends Generator { @@ -41,9 +41,10 @@ public boolean generateOnStart() { public String generate(String inputData) throws Exception { cancelClicked = false; - JDialog dlg = new JDialog(GUIMain.getInstance()); + var mainWindow = MainWindows.get(); + JDialog dlg = new JDialog(mainWindow.getFrame()); - Rectangle rect = GUIMain.getInstance().getBounds(); + Rectangle rect = mainWindow.getBounds(); int width = 400; int height = 300; dlg.setBounds(rect.x + rect.width / 2 - width / 2, rect.y + rect.height / 2 - height / 2, width, @@ -82,12 +83,12 @@ public void mouseClicked(MouseEvent e) { }); buttons.add(cancel); - JPanel main = new JPanel(); - main.setLayout(new BoxLayout(main, BoxLayout.Y_AXIS)); - main.add(labels); - main.add(scrollpane); - main.add(buttons); - dlg.getContentPane().add(main); + JPanel content = new JPanel(); + content.setLayout(new BoxLayout(content, BoxLayout.Y_AXIS)); + content.add(labels); + content.add(scrollpane); + content.add(buttons); + dlg.getContentPane().add(content); dlg.setModal(true); dlg.setVisible(true); diff --git a/src/main/java/core/packetproxy/vulchecker/generator/JWTHeaderRS256toHS256Generator.java b/src/main/java/core/packetproxy/vulchecker/generator/JWTHeaderRS256toHS256Generator.java index 559885f0..de4cd84a 100644 --- a/src/main/java/core/packetproxy/vulchecker/generator/JWTHeaderRS256toHS256Generator.java +++ b/src/main/java/core/packetproxy/vulchecker/generator/JWTHeaderRS256toHS256Generator.java @@ -20,7 +20,7 @@ import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import javax.swing.*; -import packetproxy.gui.GUIMain; +import packetproxy.platform.MainWindows; public class JWTHeaderRS256toHS256Generator extends Generator { @@ -40,9 +40,10 @@ public boolean generateOnStart() { public String generate(String inputData) throws Exception { cancelClicked = false; - JDialog dlg = new JDialog(GUIMain.getInstance()); + var mainWindow = MainWindows.get(); + JDialog dlg = new JDialog(mainWindow.getFrame()); - Rectangle rect = GUIMain.getInstance().getBounds(); + Rectangle rect = mainWindow.getBounds(); int width = 400; int height = 300; dlg.setBounds(rect.x + rect.width / 2 - width / 2, rect.y + rect.height / 2 - height / 2, width, @@ -81,12 +82,12 @@ public void mouseClicked(MouseEvent e) { }); buttons.add(cancel); - JPanel main = new JPanel(); - main.setLayout(new BoxLayout(main, BoxLayout.Y_AXIS)); - main.add(labels); - main.add(scrollpane); - main.add(buttons); - dlg.getContentPane().add(main); + JPanel content = new JPanel(); + content.setLayout(new BoxLayout(content, BoxLayout.Y_AXIS)); + content.add(labels); + content.add(scrollpane); + content.add(buttons); + dlg.getContentPane().add(content); dlg.setModal(true); dlg.setVisible(true); diff --git a/src/main/java/core/packetproxy/vulchecker/generator/JWTSignWithAppleOtherTokenGenerator.java b/src/main/java/core/packetproxy/vulchecker/generator/JWTSignWithAppleOtherTokenGenerator.java index ab99b0e4..c8263260 100644 --- a/src/main/java/core/packetproxy/vulchecker/generator/JWTSignWithAppleOtherTokenGenerator.java +++ b/src/main/java/core/packetproxy/vulchecker/generator/JWTSignWithAppleOtherTokenGenerator.java @@ -24,7 +24,7 @@ import java.net.URI; import javax.swing.*; import packetproxy.common.TokenHttpServer; -import packetproxy.gui.GUIMain; +import packetproxy.platform.MainWindows; public class JWTSignWithAppleOtherTokenGenerator extends Generator { @@ -49,9 +49,10 @@ public String generate(String inputData) throws Exception { this.tokenFromBrowser = ""; this.cancelClicked = false; - JDialog dlg = new JDialog(GUIMain.getInstance()); + var mainWindow = MainWindows.get(); + JDialog dlg = new JDialog(mainWindow.getFrame()); - Rectangle rect = GUIMain.getInstance().getBounds(); + Rectangle rect = mainWindow.getBounds(); int width = 300; int height = 150; dlg.setBounds(rect.x + rect.width / 2 - width / 2, rect.y + rect.height / 2 - height / 2, width, @@ -105,11 +106,11 @@ public void mouseClicked(MouseEvent e) { } server.start(); - JPanel main = new JPanel(); - main.setLayout(new BoxLayout(main, BoxLayout.Y_AXIS)); - main.add(labels); - main.add(buttons); - dlg.getContentPane().add(main); + JPanel content = new JPanel(); + content.setLayout(new BoxLayout(content, BoxLayout.Y_AXIS)); + content.add(labels); + content.add(buttons); + dlg.getContentPane().add(content); dlg.setModal(true); dlg.setVisible(true); @@ -118,15 +119,15 @@ public void mouseClicked(MouseEvent e) { throw new Exception("cancel"); } - GUIMain.getInstance().setAlwaysOnTop(true); - GUIMain.getInstance().setVisible(true); + mainWindow.setAlwaysOnTop(true); + mainWindow.setVisible(true); // Need to wait for the server to finish sending the response data before // exiting Thread.sleep(100); server.stop(); - GUIMain.getInstance().setAlwaysOnTop(false); + mainWindow.setAlwaysOnTop(false); return tokenFromBrowser; } diff --git a/src/main/kotlin/core/packetproxy/AppInitializer.kt b/src/main/kotlin/core/packetproxy/AppInitializer.kt index d08aceed..6e57d11d 100644 --- a/src/main/kotlin/core/packetproxy/AppInitializer.kt +++ b/src/main/kotlin/core/packetproxy/AppInitializer.kt @@ -9,6 +9,8 @@ import packetproxy.common.ConfigIO import packetproxy.common.Utils import packetproxy.model.Database import packetproxy.model.Packets +import packetproxy.platform.ConsoleUserPrompt +import packetproxy.platform.UserPrompts import packetproxy.util.Logging object AppInitializer { @@ -30,6 +32,10 @@ object AppInitializer { fun initCore() { check(isCoreNotReady) { "initCore() has already been done !" } + if (isGulp) { + UserPrompts.set(ConsoleUserPrompt()) + } + // ログ機能のエラーについては標準エラー出力への出力を行い終了する try { Logging.init(isGulp) diff --git a/src/main/kotlin/core/packetproxy/util/Logging.kt b/src/main/kotlin/core/packetproxy/util/Logging.kt index 9b9ce0b2..4f8418c3 100644 --- a/src/main/kotlin/core/packetproxy/util/Logging.kt +++ b/src/main/kotlin/core/packetproxy/util/Logging.kt @@ -33,11 +33,10 @@ import kotlinx.coroutines.yield import org.jline.jansi.Ansi import org.jline.jansi.Ansi.Color.RED import org.slf4j.LoggerFactory -import packetproxy.gui.GUILog +import packetproxy.platform.LogSinks object Logging { private val dtf: DateTimeFormatter = DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss") - private val guiLog: GUILog = GUILog.getInstance() private val logger = LoggerFactory.getLogger("") private var isGulp: Boolean = false @@ -101,8 +100,9 @@ object Logging { // WARN未満は出力されないためwarnで出力する logger.warn(fs) - if (isGulp) return - guiLog.append(fs) + if (!isGulp) { + LogSinks.append(fs) + } } @JvmStatic @@ -111,8 +111,9 @@ object Logging { val fs = formatString(format, *args) logger.error(Ansi.ansi().fg(RED).a(fs).reset().toString()) - if (isGulp) return - guiLog.appendErr(fs) + if (!isGulp) { + LogSinks.appendErr(fs) + } } /** 別のログが挟まらないように一塊にした上で1度に出力する */ From e7463a7f103a8c751ef03c6090bfcd7cd6416d3f Mon Sep 17 00:00:00 2001 From: Hiroki Tokunaga Date: Fri, 22 May 2026 17:46:44 +0900 Subject: [PATCH 2/4] build: split into core, ui, gulp, and app subprojects Move sources into Gradle subprojects and add ArchUnit module boundary tests. Co-authored-by: Cursor --- .gitignore | 5 +- app/build.gradle | 72 +++ app/build.gradle.partial | 580 ++++++++++++++++++ .../java/core/packetproxy/PacketProxy.java | 0 build.gradle | 527 +--------------- core/build.gradle | 101 +++ .../common/StringSearchBenchmark.java | 0 .../core/packetproxy/CertCacheManager.java | 0 .../core/packetproxy/DNSSpoofingIPGetter.java | 0 .../main/java/core/packetproxy/Duplex.java | 0 .../java/core/packetproxy/DuplexAsync.java | 0 .../java/core/packetproxy/DuplexFactory.java | 0 .../java/core/packetproxy/DuplexManager.java | 0 .../java/core/packetproxy/DuplexSync.java | 0 .../java/core/packetproxy/EncoderManager.java | 0 .../main/java/core/packetproxy/Listen.java | 0 .../core/packetproxy/ListenPortManager.java | 0 .../main/java/core/packetproxy/OpenVPN.java | 0 .../java/core/packetproxy/PrivateDNS.java | 0 .../core/packetproxy/PrivateDNSClient.java | 0 .../PrivateDnsResponseBuilder.java | 0 .../main/java/core/packetproxy/Proxy.java | 0 .../java/core/packetproxy/ProxyForward.java | 0 .../main/java/core/packetproxy/ProxyHttp.java | 0 .../packetproxy/ProxyHttpTransparent.java | 0 .../core/packetproxy/ProxyQuicForward.java | 0 .../packetproxy/ProxyQuicTransparent.java | 0 .../core/packetproxy/ProxySSLForward.java | 0 .../core/packetproxy/ProxySSLTransparent.java | 0 .../core/packetproxy/ProxyUDPForward.java | 0 .../core/packetproxy/ProxyXmppSSLForward.java | 0 .../main/java/core/packetproxy/Simplex.java | 0 .../core/packetproxy/VulCheckerManager.java | 0 .../java/core/packetproxy/common/ARC4.java | 0 .../core/packetproxy/common/AmazonLexV2.java | 0 .../java/core/packetproxy/common/Binary.java | 0 .../core/packetproxy/common/BinaryBuffer.java | 0 .../core/packetproxy/common/BoyerMoore.java | 0 .../core/packetproxy/common/CamelCase.java | 0 .../packetproxy/common/ClientKeyManager.java | 0 .../packetproxy/common/ConfigHttpServer.java | 0 .../core/packetproxy/common/ConfigIO.java | 0 .../core/packetproxy/common/Connection.java | 0 .../core/packetproxy/common/CryptUtils.java | 0 .../java/core/packetproxy/common/Deflate.java | 0 .../core/packetproxy/common/Endpoint.java | 0 .../packetproxy/common/EndpointFactory.java | 0 .../core/packetproxy/common/FilterIO.java | 0 .../core/packetproxy/common/FontManager.java | 0 .../core/packetproxy/common/GRPCMessage.java | 0 .../java/core/packetproxy/common/Hex.java | 0 .../java/core/packetproxy/common/JWT.java | 0 .../core/packetproxy/common/JWTBase64.java | 0 .../common/JsonSyntaxHighlighter.java | 0 .../java/core/packetproxy/common/Logger.java | 0 .../core/packetproxy/common/MessagePack.java | 0 .../core/packetproxy/common/Parameter.java | 0 .../core/packetproxy/common/PipeEndpoint.java | 0 .../core/packetproxy/common/Protobuf3.java | 0 .../java/core/packetproxy/common/Range.java | 0 .../core/packetproxy/common/RawEndpoint.java | 0 .../common/RecentProjectsStore.java | 0 .../packetproxy/common/SSLCapabilities.java | 0 .../core/packetproxy/common/SSLExplorer.java | 0 .../packetproxy/common/SSLSocketEndpoint.java | 0 .../packetproxy/common/SocketEndpoint.java | 0 .../core/packetproxy/common/StringUtils.java | 0 .../packetproxy/common/TokenHttpServer.java | 0 .../java/core/packetproxy/common/UDPConn.java | 0 .../packetproxy/common/UDPConnManager.java | 0 .../packetproxy/common/UDPServerSocket.java | 0 .../packetproxy/common/UDPSocketEndpoint.java | 0 .../core/packetproxy/common/UniqueID.java | 0 .../java/core/packetproxy/common/Utils.java | 0 .../core/packetproxy/common/WrapEndpoint.java | 0 .../controller/MainWindowController.java | 0 .../controller/PacketsController.java | 0 .../controller/ResendController.java | 6 +- .../controller/ResendProgressHandler.java | 0 .../SinglePacketAttackController.java | 0 .../packetproxy/encode/EncodeAmazonLexV2.java | 0 .../core/packetproxy/encode/EncodeCBOR.java | 0 .../packetproxy/encode/EncodeFirebase.java | 0 .../packetproxy/encode/EncodeFirestore.java | 0 .../core/packetproxy/encode/EncodeGRPC.java | 0 .../encode/EncodeGRPCStreaming.java | 0 .../packetproxy/encode/EncodeGRPCWeb.java | 0 .../core/packetproxy/encode/EncodeHTTP.java | 0 .../packetproxy/encode/EncodeHTTPBase.java | 0 .../encode/EncodeHTTPStreamingResponse.java | 0 .../encode/EncodeHTTPWebSocket.java | 0 .../core/packetproxy/encode/EncodeMQTT.java | 0 .../encode/EncodeMQTTWebSocket.java | 0 .../packetproxy/encode/EncodeMsgPack.java | 0 .../packetproxy/encode/EncodeProtobuf.java | 0 .../core/packetproxy/encode/EncodeSample.java | 0 .../packetproxy/encode/EncodeSampleHTTP.java | 0 .../packetproxy/encode/EncodeSampleQuic.java | 0 .../encode/EncodeSampleUpperCase.java | 0 .../core/packetproxy/encode/EncodeXMPP.java | 0 .../java/core/packetproxy/encode/Encoder.java | 0 .../test/ApproximateEntropyTest.java | 0 .../extensions/randomness/test/CUsUMTest.java | 0 .../randomness/test/FrequencyTest.java | 0 .../randomness/test/LinearComplexityTest.java | 0 .../randomness/test/LongestRunOfOneTest.java | 0 .../randomness/test/RandomnessTest.java | 0 .../test/RandomnessTestManager.java | 0 .../extensions/randomness/test/RankTest.java | 0 .../extensions/randomness/test/RunsTest.java | 0 .../randomness/test/SerialTest.java | 0 .../extensions/samplehttp/SampleEncoders.java | 0 .../samplehttp/encoder/SampleHTTP.java | 0 .../core/packetproxy/http/HeaderField.java | 0 .../main/java/core/packetproxy/http/Http.java | 0 .../core/packetproxy/http/HttpHeader.java | 0 .../java/core/packetproxy/http/Https.java | 0 .../http/HttpsProxySocketEndpoint.java | 0 .../core/packetproxy/http/QueryParameter.java | 0 .../core/packetproxy/http/QueryString.java | 0 .../http1/Http1StreamingResponse.java | 0 .../core/packetproxy/http2/FlowControl.java | 0 .../packetproxy/http2/FlowControlManager.java | 0 .../core/packetproxy/http2/FrameManager.java | 0 .../core/packetproxy/http2/FramesBase.java | 0 .../java/core/packetproxy/http2/Grpc.java | 0 .../core/packetproxy/http2/GrpcStreaming.java | 0 .../java/core/packetproxy/http2/Http2.java | 0 .../http2/Http2StreamingResponse.java | 0 .../java/core/packetproxy/http2/Stream.java | 0 .../core/packetproxy/http2/StreamManager.java | 0 .../packetproxy/http2/frames/DataFrame.java | 0 .../core/packetproxy/http2/frames/Frame.java | 0 .../http2/frames/FrameFactory.java | 0 .../packetproxy/http2/frames/FrameUtils.java | 0 .../packetproxy/http2/frames/GoawayFrame.java | 0 .../http2/frames/HeadersFrame.java | 0 .../packetproxy/http2/frames/PingFrame.java | 0 .../http2/frames/RstStreamFrame.java | 0 .../http2/frames/SettingsFrame.java | 0 .../http2/frames/WindowUpdateFrame.java | 0 .../core/packetproxy/http3/service/Http3.java | 0 .../http3/service/Http3HeaderDecoder.java | 0 .../http3/service/Http3HeaderEncoder.java | 0 .../packetproxy/http3/service/HttpRaw.java | 0 .../http3/service/StreamsReader.java | 0 .../http3/service/StreamsWriter.java | 0 .../http3/service/frame/FrameParser.java | 0 .../service/stream/ControlReadStream.java | 0 .../service/stream/ControlWriteStream.java | 0 .../http3/service/stream/HttpReadStream.java | 0 .../service/stream/HttpWriteStreams.java | 0 .../http3/service/stream/QpackReadStream.java | 0 .../service/stream/QpackWriteStream.java | 0 .../http3/service/stream/ReadStream.java | 0 .../http3/service/stream/Stream.java | 0 .../http3/service/stream/WriteStream.java | 0 .../packetproxy/http3/utils/Constants.java | 0 .../core/packetproxy/http3/value/Setting.java | 0 .../packetproxy/http3/value/SettingParam.java | 0 .../http3/value/UniStreamHeader.java | 0 .../http3/value/frame/DataFrame.java | 0 .../http3/value/frame/DummyFrame.java | 0 .../packetproxy/http3/value/frame/Frame.java | 0 .../packetproxy/http3/value/frame/Frames.java | 0 .../http3/value/frame/GreaseFrame.java | 0 .../http3/value/frame/HeadersFrame.java | 0 .../http3/value/frame/RawFrame.java | 0 .../http3/value/frame/SettingsFrame.java | 0 .../core/packetproxy/model/CAFactory.java | 0 .../java/core/packetproxy/model/CAs/CA.java | 0 .../model/CAs/PacketProxyCAPerUser.java | 0 .../packetproxy/model/CAs/SelfSignedCA.java | 0 .../java/core/packetproxy/model/CharSet.java | 0 .../java/core/packetproxy/model/CharSets.java | 0 .../packetproxy/model/ClientCertificate.java | 0 .../packetproxy/model/ClientCertificates.java | 2 +- .../java/core/packetproxy/model/Config.java | 0 .../core/packetproxy/model/ConfigBoolean.java | 0 .../core/packetproxy/model/ConfigInteger.java | 0 .../core/packetproxy/model/ConfigString.java | 0 .../java/core/packetproxy/model/Configs.java | 0 .../core/packetproxy/model/Credential.java | 0 .../core/packetproxy/model/DaoQueryCache.java | 0 .../java/core/packetproxy/model/Database.java | 0 .../java/core/packetproxy/model/Diff.java | 0 .../java/core/packetproxy/model/DiffBase.java | 0 .../core/packetproxy/model/DiffBinary.java | 0 .../packetproxy/model/DiffEventAdapter.java | 0 .../packetproxy/model/DiffEventListener.java | 0 .../java/core/packetproxy/model/DiffJson.java | 0 .../java/core/packetproxy/model/DiffSet.java | 0 .../core/packetproxy/model/Extension.java | 0 .../core/packetproxy/model/Extensions.java | 10 +- .../java/core/packetproxy/model/Filter.java | 0 .../java/core/packetproxy/model/Filters.java | 0 .../packetproxy/model/InterceptModel.java | 0 .../packetproxy/model/InterceptOption.java | 0 .../packetproxy/model/InterceptOptions.java | 2 +- .../core/packetproxy/model/ListenPort.java | 0 .../core/packetproxy/model/ListenPorts.java | 0 .../core/packetproxy/model/Modification.java | 0 .../core/packetproxy/model/Modifications.java | 0 .../core/packetproxy/model/OneShotPacket.java | 0 .../packetproxy/model/OpenVPNForwardPort.java | 0 .../model/OpenVPNForwardPorts.java | 0 .../java/core/packetproxy/model/Packet.java | 0 .../core/packetproxy/model/PacketInfo.java | 0 .../java/core/packetproxy/model/Packets.java | 2 +- .../model/PropertyChangeEventType.java | 0 .../core/packetproxy/model/RegexParam.java | 0 .../packetproxy/model/ResenderPacket.java | 0 .../packetproxy/model/ResenderPackets.java | 0 .../core/packetproxy/model/Resolution.java | 0 .../core/packetproxy/model/Resolutions.java | 0 .../packetproxy/model/SSLPassThrough.java | 0 .../packetproxy/model/SSLPassThroughs.java | 2 +- .../java/core/packetproxy/model/Server.java | 0 .../java/core/packetproxy/model/Servers.java | 0 .../platform/ConfigHttpUiActions.java | 4 +- .../platform/ConsoleUserPrompt.java | 0 .../core/packetproxy/platform/LogSink.java | 0 .../core/packetproxy/platform/LogSinks.java | 3 +- .../platform/MainWindowAccess.java | 0 .../packetproxy/platform/MainWindows.java | 3 +- .../packetproxy/platform/PacketPredicate.java | 0 .../platform/SpoofingIPSource.java | 0 .../core/packetproxy/platform/UserPrompt.java | 0 .../packetproxy/platform/UserPrompts.java | 0 .../quic/service/LossDetection.java | 0 .../core/packetproxy/quic/service/Pto.java | 0 .../quic/service/RttEstimator.java | 0 .../service/connection/ClientConnection.java | 0 .../service/connection/ClientConnections.java | 0 .../quic/service/connection/Connection.java | 0 .../service/connection/ServerConnection.java | 0 .../connection/helper/AwaitingPackets.java | 0 .../quic/service/frame/FrameParser.java | 0 .../quic/service/frame/Frames.java | 0 .../quic/service/frame/FramesBuilder.java | 0 .../framegenerator/AckFrameGenerator.java | 0 .../CryptoFramesToMessages.java | 0 .../MessagesToCryptoFrames.java | 0 .../MessagesToStreamFrames.java | 0 .../StreamFramesToMessages.java | 0 .../helper/ContinuousStream.java | 0 .../framegenerator/helper/OneshotStream.java | 0 .../helper/ReceivedPacketNumbers.java | 0 .../service/handshake/ClientHandshake.java | 0 .../quic/service/handshake/Handshake.java | 0 .../service/handshake/HandshakeState.java | 0 .../service/handshake/ServerHandshake.java | 0 .../packetproxy/quic/service/key/Keys.java | 0 .../quic/service/key/RoleKeys.java | 0 .../service/packet/QuicPacketBuilder.java | 0 .../quic/service/packet/QuicPacketParser.java | 0 .../quic/service/pnspace/PnSpace.java | 0 .../quic/service/pnspace/PnSpaces.java | 0 .../service/pnspace/helper/LostPackets.java | 0 .../pnspace/helper/SendFrameQueue.java | 0 .../service/pnspace/helper/SentPackets.java | 0 .../pnspace/level/ApplicationDataPnSpace.java | 0 .../pnspace/level/HandshakePnSpace.java | 0 .../service/pnspace/level/InitialPnSpace.java | 0 .../TransportParameterParser.java | 0 .../TransportParameters.java | 0 .../quic/utils/AwaitingException.java | 0 .../packetproxy/quic/utils/Constants.java | 0 .../packetproxy/quic/utils/PacketNumbers.java | 0 .../quic/utils/ScheduledTimer.java | 0 .../packetproxy/quic/value/ConnectionId.java | 0 .../quic/value/ConnectionIdPair.java | 0 .../quic/value/FixedLengthPrecededBytes.java | 0 .../packetproxy/quic/value/PacketNumber.java | 0 .../packetproxy/quic/value/QuicMessage.java | 0 .../packetproxy/quic/value/QuicMessages.java | 0 .../packetproxy/quic/value/SentPacket.java | 0 .../packetproxy/quic/value/SimpleBytes.java | 0 .../core/packetproxy/quic/value/StreamId.java | 0 .../core/packetproxy/quic/value/Token.java | 0 .../quic/value/TruncatedPacketNumber.java | 0 .../quic/value/VariableLengthInteger.java | 0 .../value/VariableLengthPrecededBytes.java | 0 .../quic/value/frame/AckEcnFrame.java | 0 .../quic/value/frame/AckFrame.java | 0 .../value/frame/ConnectionCloseFrame.java | 0 .../quic/value/frame/CryptoFrame.java | 0 .../packetproxy/quic/value/frame/Frame.java | 0 .../quic/value/frame/HandshakeDoneFrame.java | 0 .../quic/value/frame/MaxDataFrame.java | 0 .../value/frame/NewConnectionIdFrame.java | 0 .../quic/value/frame/NewTokenFrame.java | 0 .../quic/value/frame/PaddingFrame.java | 0 .../quic/value/frame/PingFrame.java | 0 .../quic/value/frame/ResetStreamFrame.java | 0 .../quic/value/frame/StopSendingFrame.java | 0 .../value/frame/StreamDataBlockedFrame.java | 0 .../quic/value/frame/StreamFrame.java | 0 .../value/frame/StreamsBlockedBidiFrame.java | 0 .../value/frame/StreamsBlockedUniFrame.java | 0 .../quic/value/frame/UnknownFrame.java | 0 .../quic/value/frame/helper/AckRange.java | 0 .../quic/value/frame/helper/AckRanges.java | 0 .../core/packetproxy/quic/value/key/Key.java | 0 .../quic/value/key/level/ApplicationKey.java | 0 .../quic/value/key/level/HandshakeKey.java | 0 .../quic/value/key/level/InitialKey.java | 0 .../quic/value/key/level/ZeroRttKey.java | 0 .../quic/value/packet/PnSpacePacket.java | 0 .../quic/value/packet/QuicPacket.java | 0 .../packet/longheader/LongHeaderPacket.java | 0 .../longheader/LongHeaderPnSpacePacket.java | 0 .../value/packet/longheader/RetryPacket.java | 0 .../longheader/pnspace/HandshakePacket.java | 0 .../longheader/pnspace/InitialPacket.java | 0 .../longheader/pnspace/ZeroRttPacket.java | 0 .../packet/shortheader/ShortHeaderPacket.java | 0 .../TransportParameter.java | 0 .../transportparameter/UnknownParameter.java | 0 .../bool/DisableActiveMigrationParameter.java | 0 .../bool/ExpGreaseQuicBitParameter.java | 0 .../bytearray/InitSrcConnIdParameter.java | 0 .../bytearray/OrigDestConnIdParameter.java | 0 .../bytearray/RetrySrcConnIdParameter.java | 0 .../StatelessResetTokenParameter.java | 0 .../complex/PreferredAddressParameter.java | 0 .../number/AckDelayExponentParameter.java | 0 .../number/ActiveConnIdLimitParameter.java | 0 .../number/ExpMinAckDelayParameter.java | 0 .../number/InitMaxDataParameter.java | 0 .../number/InitMaxStreamBidiParameter.java | 0 .../InitMaxStreamDataBidiLocalParameter.java | 0 .../InitMaxStreamDataBidiRemoteParameter.java | 0 .../number/InitMaxStreamDataUniParameter.java | 0 .../number/InitMaxStreamUniParameter.java | 0 .../number/MaxAckDelayParameter.java | 0 .../number/MaxIdleTimeoutParameter.java | 0 .../number/MaxUdpPayloadSizeParameter.java | 0 .../number/OldMinAckDelayParameter.java | 0 .../number/OldTimestampParameter.java | 0 .../core/packetproxy/util/CharSetUtility.java | 0 .../packetproxy/util/PacketProxyUtility.java | 0 .../java/core/packetproxy/util/SearchBox.java | 0 .../java/core/packetproxy/util/Throwing.java | 0 .../packetproxy/util/ThrowingBiConsumer.java | 0 .../packetproxy/util/ThrowingConsumer.java | 0 .../packetproxy/util/ThrowingFunction.java | 0 .../packetproxy/util/ThrowingPredicate.java | 0 .../core/packetproxy/util/WithCounter.java | 0 .../packetproxy/vulchecker/JWTVulChecker.java | 0 .../vulchecker/NumberVulChecker.java | 0 .../vulchecker/VulCheckPattern.java | 0 .../packetproxy/vulchecker/VulChecker.java | 0 .../generator/DecimalsGenerator.java | 0 .../vulchecker/generator/Generator.java | 0 .../generator/IntegerOverflowGenerator.java | 0 .../IntegerOverflowMinusOneGenerator.java | 0 .../IntegerOverflowPlusOneGenerator.java | 0 .../vulchecker/generator/JWTAlgHS256.java | 0 .../vulchecker/generator/JWTAlgNone.java | 0 .../vulchecker/generator/JWTAlgRS256.java | 0 .../JWTHeaderAddSpecifiedJKUGenerator.java | 0 .../generator/JWTHeaderAlgNoneGenerator.java | 0 ...JWTHeaderJKUModifiedByAtmarkGenerator.java | 0 .../JWTHeaderJKUModifiedGenerator.java | 0 .../generator/JWTHeaderJWKGenerator.java | 0 .../generator/JWTHeaderModifiedGenerator.java | 0 .../JWTHeaderRS256toHS256Generator.java | 0 .../JWTPayloadModifiedGenerator.java | 0 .../JWTSignWithAppleOtherTokenGenerator.java | 0 .../generator/JWTSignatureUnmodified.java | 0 .../generator/LongOverflowGenerator.java | 0 .../LongOverflowMinusOneGenerator.java | 0 .../LongOverflowPlusOneGenerator.java | 0 .../generator/NegativeNumberGenerator.java | 0 .../vulchecker/generator/ZeroGenerator.java | 0 .../core/packetproxy/websocket/OpCode.java | 0 .../core/packetproxy/websocket/WebSocket.java | 0 .../packetproxy/websocket/WebSocketFrame.java | 0 .../kotlin/core/packetproxy/AppInitializer.kt | 0 .../kotlin/core/packetproxy/ProxyFactory.kt | 0 .../core/packetproxy/common/I18nString.kt | 0 .../controller/InterceptController.kt | 0 .../extensions/securityheaders/README.md | 0 .../securityheaders/SecurityCheck.kt | 0 .../securityheaders/SecurityCheckResult.kt | 0 .../checks/CacheControlCheck.kt | 0 .../checks/ContentTypeCheck.kt | 0 .../securityheaders/checks/CookieCheck.kt | 0 .../securityheaders/checks/CorsCheck.kt | 0 .../securityheaders/checks/CspCheck.kt | 0 .../securityheaders/checks/HstsCheck.kt | 0 .../checks/XssProtectionCheck.kt | 0 .../exclusion/ExclusionRule.kt | 0 .../exclusion/ExclusionRuleManager.kt | 0 .../exclusion/ExclusionRuleType.kt | 0 .../packetproxy/grpc/GrpcSchemaResolver.kt | 0 .../packetproxy/grpc/GrpcServiceRegistry.kt | 0 .../grpc/GrpcServiceRegistryStore.kt | 0 .../core/packetproxy/grpc/ProtoFileSet.kt | 0 .../core/packetproxy/grpc/ProtocRunner.kt | 0 .../core/packetproxy/util/Extensions.kt | 0 .../kotlin/core/packetproxy/util/Logging.kt | 0 .../src}/main/resources/certificates/user.ks | Bin .../src}/main/resources/log4j.properties | 0 .../xbill/DNS/windows/DNSServer.properties | 0 .../xbill/DNS/windows/DNSServer_de.properties | 0 .../xbill/DNS/windows/DNSServer_fr.properties | 0 .../xbill/DNS/windows/DNSServer_ja.properties | 0 .../xbill/DNS/windows/DNSServer_pl.properties | 0 .../src}/main/resources/strings_ja.properties | 0 core/src/main/resources/version | 1 + .../java/org/xbill/DNS/HTTPSRecordTest.java | 0 .../java/org/xbill/DNS/SVCBRecordTest.java | 0 .../CoreModuleArchitectureTest.java | 33 + .../packetproxy/PrivateDNSClientTest.java | 0 .../packetproxy/common/AmazonLexV2Test.java | 0 .../packetproxy/common/BoyerMooreTest.java | 0 .../common/CharSetUtilityTest.java | 0 .../java/packetproxy/common/GRPCTest.java | 0 .../packetproxy/common/Protobuf3Test.java | 0 .../packetproxy/common/StringUtilsTest.java | 0 .../common/UDPSocketEndpointTest.java | 0 .../encode/EncodeHTTPWebSocketOpCodeTest.java | 0 .../packetproxy/http2/FrameManagerTest.java | 0 .../packetproxy/http2/frames/FrameTest.java | 0 .../http2/frames/HeadersFrameTest.java | 0 .../http2/frames/SettingsFrameTest.java | 0 .../java/packetproxy/http3/QpackTest.java | 0 .../http3/helper/Http3TestHelper.java | 0 .../Http3HeaderEncoderDecoderTest.java | 0 .../packetproxy/http3/service/Http3Test.java | 0 .../http3/service/StreamsReaderTest.java | 0 .../http3/service/frame/FrameParserTest.java | 0 .../service/stream/ControlReadStreamTest.java | 0 .../stream/ControlWriteStreamTest.java | 0 .../service/stream/QpackReadStreamTest.java | 0 .../service/stream/QpackWriteStreamTest.java | 0 .../packetproxy/http3/value/SettingTest.java | 0 .../http3/value/frame/DummyFrameTest.java | 0 .../http3/value/frame/RawFrameTest.java | 0 .../http3/value/frame/SettingsFrameTest.java | 0 .../ackgenerator/AckFrameGeneratorTest.java | 0 .../ReceivedQuicPacketNumbersTest.java | 0 .../CryptoFramesToMessagesTest.java | 0 .../quic/service/pnspace/SentPacketsTest.java | 0 .../TransportParametersTest.java | 0 .../quic/value/ConnectionIdTest.java | 0 .../quic/value/QuicMessageTest.java | 0 .../quic/value/QuicMessagesTest.java | 0 .../quic/value/QuicPacketNumbersTest.java | 0 .../value/TruncatedQuicPacketNumberTest.java | 0 .../quic/value/VariableLengthIntegerTest.java | 0 .../quic/value/WriteStreamIdTest.java | 0 .../quic/value/frame/AckEcnFrameTest.java | 0 .../quic/value/frame/AckFrameTest.java | 0 .../quic/value/frame/CryptoFrameTest.java | 0 .../quic/value/frame/FramesTest.java | 0 .../value/frame/NewConnectionIdFrameTest.java | 0 .../quic/value/packet/InitialPacketTest.java | 0 .../quic/value/packet/helper/TestPacket.java | 0 .../shortheader/ShortHeaderPacketTest.java | 0 .../DisableActiveMigrationParameterTest.java | 0 .../grpc/GrpcServiceRegistryStoreTest.kt | 0 .../grpc/GrpcServiceRegistryTest.kt | 0 .../packetproxy/grpc/ProtoFileSetTest.kt | 0 .../grpc/proto/multidir/common.proto | 0 .../grpc/proto/multidir/multi.desc | Bin .../proto/multidir/multi_without_imports.desc | 0 .../grpc/proto/multidir/svc_a.proto | 0 .../grpc/proto/multidir/svc_b.proto | 0 .../packetproxy/grpc/proto/testsvc.desc | Bin .../packetproxy/grpc/proto/testsvc.proto | 0 gradle/app-release.gradle | 341 ++++++++++ gradle/module-common.gradle | 45 ++ gulp/build.gradle | 26 + .../core/packetproxy/gulp/CLIModeHandler.kt | 0 .../core/packetproxy/gulp/CommandContext.kt | 0 .../core/packetproxy/gulp/CommandParser.kt | 0 .../packetproxy/gulp/DecodeModeHandler.kt | 0 .../packetproxy/gulp/EncodeModeHandler.kt | 0 .../core/packetproxy/gulp/GulpTerminal.kt | 0 .../core/packetproxy/gulp/command/Command.kt | 0 .../packetproxy/gulp/command/EchoCommand.kt | 0 .../packetproxy/gulp/command/LogCommand.kt | 0 .../packetproxy/gulp/command/SourceCommand.kt | 0 .../packetproxy/gulp/input/ChainedSource.kt | 0 .../gulp/input/DynamicCompleter.kt | 0 .../gulp/input/FallBackTerminalSource.kt | 0 .../core/packetproxy/gulp/input/LineSource.kt | 0 .../packetproxy/gulp/input/ScriptSource.kt | 0 .../packetproxy/gulp/input/TerminalFactory.kt | 0 .../packetproxy/gulp/input/TerminalSource.kt | 0 .../packetproxy/gulp/output/BufferedOutput.kt | 0 .../packetproxy/gulp/output/CommandOutput.kt | 0 .../packetproxy/gulp/output/ConsoleOutput.kt | 0 .../packetproxy/gulp/output/OutputStyle.kt | 0 .../CommandOutputIntegrationTest.kt | 0 .../packetproxy/GulpModuleArchitectureTest.kt | 35 ++ .../packetproxy}/TerminalCoroutinesTest.kt | 0 .../packetproxy}/command/EchoCommandTest.kt | 0 .../packetproxy}/command/SourceCommandTest.kt | 0 .../packetproxy}/output/BufferedOutputTest.kt | 0 .../packetproxy}/output/OutputStyleTest.kt | 0 settings.gradle | 9 +- ui/build.gradle | 36 ++ .../core/packetproxy/gui/BinaryTextPane.java | 0 .../gui/CloseButtonTabbedPane.java | 0 .../packetproxy/gui/CustomParagraphView.java | 0 .../packetproxy/gui/CustomScrollPane.java | 0 .../packetproxy/gui/ExtendedTextPane.java | 0 .../gui/FilterComboBoxCellRenderer.java | 0 .../packetproxy/gui/FilterComboBoxEditor.java | 0 .../packetproxy/gui/FilterTextParser.java | 0 .../core/packetproxy/gui/GUIBulkSender.java | 0 .../packetproxy/gui/GUIBulkSenderData.java | 0 .../packetproxy/gui/GUIBulkSenderDataRaw.java | 0 .../packetproxy/gui/GUIBulkSenderTable.java | 0 .../java/core/packetproxy/gui/GUIData.java | 0 .../java/core/packetproxy/gui/GUIDataAll.java | 0 .../packetproxy/gui/GUIDecoderDialog.java | 0 .../core/packetproxy/gui/GUIDiffBase.java | 0 .../core/packetproxy/gui/GUIDiffBinary.java | 0 .../packetproxy/gui/GUIDiffDialogParent.java | 0 .../core/packetproxy/gui/GUIDiffJson.java | 0 .../java/core/packetproxy/gui/GUIDiffRaw.java | 0 .../core/packetproxy/gui/GUIExtensions.java | 0 .../core/packetproxy/gui/GUIFilterConfig.java | 0 .../gui/GUIFilterConfigAddDialog.java | 0 .../gui/GUIFilterConfigDialog.java | 0 .../gui/GUIFilterConfigEditDialog.java | 0 .../gui/GUIFilterDropDownList.java | 0 .../java/core/packetproxy/gui/GUIHexCalc.java | 0 .../java/core/packetproxy/gui/GUIHistory.java | 0 .../packetproxy/gui/GUIHistoryAutoScroll.java | 0 .../packetproxy/gui/GUIHistoryBinary.java | 0 .../gui/GUIHistoryContextMenuFactory.java | 0 .../core/packetproxy/gui/GUIHistoryPanel.java | 0 .../core/packetproxy/gui/GUIHistoryRaw.java | 0 .../core/packetproxy/gui/GUIIntercept.java | 0 .../java/core/packetproxy/gui/GUIJson.java | 0 .../java/core/packetproxy/gui/GUILog.java | 0 .../java/core/packetproxy/gui/GUILogSink.java | 0 .../java/core/packetproxy/gui/GUIMain.java | 7 +- .../packetproxy/gui/GUIMainWindowAccess.java | 0 .../java/core/packetproxy/gui/GUIMenu.java | 0 .../java/core/packetproxy/gui/GUIOption.java | 0 .../gui/GUIOptionCharSetDialog.java | 0 .../packetproxy/gui/GUIOptionCharSets.java | 0 .../gui/GUIOptionClientCertificate.java | 0 .../gui/GUIOptionClientCertificateDialog.java | 0 .../gui/GUIOptionComponentBase.java | 0 ...nExportCertificateAndPrivateKeyDialog.java | 0 .../packetproxy/gui/GUIOptionExtensions.java | 0 .../gui/GUIOptionExtensionsDialog.java | 0 .../core/packetproxy/gui/GUIOptionFonts.java | 0 .../core/packetproxy/gui/GUIOptionHttp.java | 0 .../packetproxy/gui/GUIOptionHubServer.java | 0 ...nImportCertificateAndPrivateKeyDialog.java | 0 .../gui/GUIOptionInterceptDialog.java | 0 .../GUIOptionInterceptEditOthersDialog.java | 0 .../packetproxy/gui/GUIOptionIntercepts.java | 0 .../gui/GUIOptionListenPortDialog.java | 0 .../packetproxy/gui/GUIOptionListenPorts.java | 0 .../gui/GUIOptionModificationDialog.java | 0 .../gui/GUIOptionModifications.java | 0 .../packetproxy/gui/GUIOptionOpenVPN.java | 0 .../gui/GUIOptionOpenVPNDialog.java | 0 .../packetproxy/gui/GUIOptionPrivateDNS.java | 0 .../GUIOptionPrivateDNSSpoofingSource.java | 0 .../gui/GUIOptionResolutionDialog.java | 0 .../packetproxy/gui/GUIOptionResolutions.java | 0 .../gui/GUIOptionSSLPassThrough.java | 0 .../gui/GUIOptionSSLPassThroughDialog.java | 0 .../gui/GUIOptionServerDialog.java | 0 .../packetproxy/gui/GUIOptionServers.java | 0 .../java/core/packetproxy/gui/GUIPacket.java | 0 .../core/packetproxy/gui/GUIPacketData.java | 0 .../gui/GUIProjectChooserDialog.java | 0 .../packetproxy/gui/GUIRegexParamDialog.java | 0 .../gui/GUIRegexParamsTableDialog.java | 0 .../core/packetproxy/gui/GUIResender.java | 0 .../packetproxy/gui/GUIServerNamePanel.java | 0 .../gui/GUITooltipDecodeMessage.java | 0 .../packetproxy/gui/GUIVulCheckHelper.java | 0 .../packetproxy/gui/GUIVulCheckManager.java | 0 .../packetproxy/gui/GUIVulCheckRecvTable.java | 0 .../packetproxy/gui/GUIVulCheckSendTable.java | 0 .../core/packetproxy/gui/GUIVulCheckTab.java | 0 .../packetproxy/gui/GuiExtensionPresets.java | 31 + .../core/packetproxy/gui/HintTextField.java | 0 .../core/packetproxy/gui/JFontChooser.java | 0 .../packetproxy/gui/NativeFileChooser.java | 0 .../packetproxy/gui/OptionTableModel.java | 0 .../gui}/PPContextMenuManager.java | 2 +- .../java/core/packetproxy/gui/Projects.java | 0 .../core/packetproxy/gui/RawTextPane.java | 0 .../java/core/packetproxy/gui/Splash.java | 0 .../gui/SwingConfigHttpUiActions.java | 9 +- .../core/packetproxy/gui/SwingUserPrompt.java | 0 .../java/core/packetproxy/gui/TabSet.java | 0 .../gui/TableCustomColorManager.java | 0 .../packetproxy/gui/TableHeaderStyle.java | 0 .../core/packetproxy/gui/WrapEditorKit.java | 0 .../gui/WriteFileChooserWrapper.java | 0 .../randomness/RandomnessExtension.java | 0 .../gui/ppcontextmenu/PPContextMenu.java | 0 .../gui/ppcontextmenu/SampleItem.java | 0 .../SecurityHeadersExtension.kt | 0 .../ui/ExclusionManagementDialog.kt | 0 .../ui/SecurityHeadersDetailPanel.kt | 0 .../ui/SecurityHeadersTableRenderer.kt | 0 .../ui/SecurityHeadersToolbar.kt | 0 .../securityheaders/ui/TextStyles.kt | 0 .../gui/GUIOptionGrpcDescriptorDialog.kt | 0 .../gui/GUIRequestResponsePanel.kt | 0 .../packetproxy/gui/PacketPairingService.kt | 0 {src => ui/src}/main/resources/gui/arrow.png | Bin .../resources/gui/auto_scroll_disabled.png | Bin .../resources/gui/auto_scroll_enabled.png | Bin {src => ui/src}/main/resources/gui/close.png | Bin .../main/resources/gui/close_mouseovered.png | Bin {src => ui/src}/main/resources/gui/config.png | Bin {src => ui/src}/main/resources/gui/icon.ico | Bin {src => ui/src}/main/resources/gui/icon.png | Bin .../main/resources/gui/installer_icon.png | Bin .../gui/installer_leftside_image.png | Bin {src => ui/src}/main/resources/gui/plus.png | Bin {src => ui/src}/main/resources/gui/splash.png | Bin .../packetproxy/UiModuleArchitectureTest.kt | 35 ++ .../extensions}/CacheControlCheckTest.kt | 0 .../extensions}/ContentTypeCheckTest.kt | 0 .../extensions}/CookieCheckTest.kt | 0 .../packetproxy/extensions}/CorsCheckTest.kt | 0 .../packetproxy/extensions}/CspCheckTest.kt | 0 .../extensions}/HighlightSegmentTest.kt | 0 .../packetproxy/extensions}/HstsCheckTest.kt | 0 .../extensions}/SecurityCheckResultTest.kt | 0 .../packetproxy/extensions}/TestHttpHeader.kt | 0 .../extensions}/XssProtectionCheckTest.kt | 0 .../gui/PacketPairingServiceTest.kt | 0 641 files changed, 1384 insertions(+), 545 deletions(-) create mode 100644 app/build.gradle create mode 100644 app/build.gradle.partial rename {src => app/src}/main/java/core/packetproxy/PacketProxy.java (100%) create mode 100644 core/build.gradle rename {src => core/src}/jmh/java/packetproxy/common/StringSearchBenchmark.java (100%) rename {src => core/src}/main/java/core/packetproxy/CertCacheManager.java (100%) rename {src => core/src}/main/java/core/packetproxy/DNSSpoofingIPGetter.java (100%) rename {src => core/src}/main/java/core/packetproxy/Duplex.java (100%) rename {src => core/src}/main/java/core/packetproxy/DuplexAsync.java (100%) rename {src => core/src}/main/java/core/packetproxy/DuplexFactory.java (100%) rename {src => core/src}/main/java/core/packetproxy/DuplexManager.java (100%) rename {src => core/src}/main/java/core/packetproxy/DuplexSync.java (100%) rename {src => core/src}/main/java/core/packetproxy/EncoderManager.java (100%) rename {src => core/src}/main/java/core/packetproxy/Listen.java (100%) rename {src => core/src}/main/java/core/packetproxy/ListenPortManager.java (100%) rename {src => core/src}/main/java/core/packetproxy/OpenVPN.java (100%) rename {src => core/src}/main/java/core/packetproxy/PrivateDNS.java (100%) rename {src => core/src}/main/java/core/packetproxy/PrivateDNSClient.java (100%) rename {src => core/src}/main/java/core/packetproxy/PrivateDnsResponseBuilder.java (100%) rename {src => core/src}/main/java/core/packetproxy/Proxy.java (100%) rename {src => core/src}/main/java/core/packetproxy/ProxyForward.java (100%) rename {src => core/src}/main/java/core/packetproxy/ProxyHttp.java (100%) rename {src => core/src}/main/java/core/packetproxy/ProxyHttpTransparent.java (100%) rename {src => core/src}/main/java/core/packetproxy/ProxyQuicForward.java (100%) rename {src => core/src}/main/java/core/packetproxy/ProxyQuicTransparent.java (100%) rename {src => core/src}/main/java/core/packetproxy/ProxySSLForward.java (100%) rename {src => core/src}/main/java/core/packetproxy/ProxySSLTransparent.java (100%) rename {src => core/src}/main/java/core/packetproxy/ProxyUDPForward.java (100%) rename {src => core/src}/main/java/core/packetproxy/ProxyXmppSSLForward.java (100%) rename {src => core/src}/main/java/core/packetproxy/Simplex.java (100%) rename {src => core/src}/main/java/core/packetproxy/VulCheckerManager.java (100%) rename {src => core/src}/main/java/core/packetproxy/common/ARC4.java (100%) rename {src => core/src}/main/java/core/packetproxy/common/AmazonLexV2.java (100%) rename {src => core/src}/main/java/core/packetproxy/common/Binary.java (100%) rename {src => core/src}/main/java/core/packetproxy/common/BinaryBuffer.java (100%) rename {src => core/src}/main/java/core/packetproxy/common/BoyerMoore.java (100%) rename {src => core/src}/main/java/core/packetproxy/common/CamelCase.java (100%) rename {src => core/src}/main/java/core/packetproxy/common/ClientKeyManager.java (100%) rename {src => core/src}/main/java/core/packetproxy/common/ConfigHttpServer.java (100%) rename {src => core/src}/main/java/core/packetproxy/common/ConfigIO.java (100%) rename {src => core/src}/main/java/core/packetproxy/common/Connection.java (100%) rename {src => core/src}/main/java/core/packetproxy/common/CryptUtils.java (100%) rename {src => core/src}/main/java/core/packetproxy/common/Deflate.java (100%) rename {src => core/src}/main/java/core/packetproxy/common/Endpoint.java (100%) rename {src => core/src}/main/java/core/packetproxy/common/EndpointFactory.java (100%) rename {src => core/src}/main/java/core/packetproxy/common/FilterIO.java (100%) rename {src => core/src}/main/java/core/packetproxy/common/FontManager.java (100%) rename {src => core/src}/main/java/core/packetproxy/common/GRPCMessage.java (100%) rename {src => core/src}/main/java/core/packetproxy/common/Hex.java (100%) rename {src => core/src}/main/java/core/packetproxy/common/JWT.java (100%) rename {src => core/src}/main/java/core/packetproxy/common/JWTBase64.java (100%) rename {src => core/src}/main/java/core/packetproxy/common/JsonSyntaxHighlighter.java (100%) rename {src => core/src}/main/java/core/packetproxy/common/Logger.java (100%) rename {src => core/src}/main/java/core/packetproxy/common/MessagePack.java (100%) rename {src => core/src}/main/java/core/packetproxy/common/Parameter.java (100%) rename {src => core/src}/main/java/core/packetproxy/common/PipeEndpoint.java (100%) rename {src => core/src}/main/java/core/packetproxy/common/Protobuf3.java (100%) rename {src => core/src}/main/java/core/packetproxy/common/Range.java (100%) rename {src => core/src}/main/java/core/packetproxy/common/RawEndpoint.java (100%) rename {src => core/src}/main/java/core/packetproxy/common/RecentProjectsStore.java (100%) rename {src => core/src}/main/java/core/packetproxy/common/SSLCapabilities.java (100%) rename {src => core/src}/main/java/core/packetproxy/common/SSLExplorer.java (100%) rename {src => core/src}/main/java/core/packetproxy/common/SSLSocketEndpoint.java (100%) rename {src => core/src}/main/java/core/packetproxy/common/SocketEndpoint.java (100%) rename {src => core/src}/main/java/core/packetproxy/common/StringUtils.java (100%) rename {src => core/src}/main/java/core/packetproxy/common/TokenHttpServer.java (100%) rename {src => core/src}/main/java/core/packetproxy/common/UDPConn.java (100%) rename {src => core/src}/main/java/core/packetproxy/common/UDPConnManager.java (100%) rename {src => core/src}/main/java/core/packetproxy/common/UDPServerSocket.java (100%) rename {src => core/src}/main/java/core/packetproxy/common/UDPSocketEndpoint.java (100%) rename {src => core/src}/main/java/core/packetproxy/common/UniqueID.java (100%) rename {src => core/src}/main/java/core/packetproxy/common/Utils.java (100%) rename {src => core/src}/main/java/core/packetproxy/common/WrapEndpoint.java (100%) rename {src => core/src}/main/java/core/packetproxy/controller/MainWindowController.java (100%) rename {src => core/src}/main/java/core/packetproxy/controller/PacketsController.java (100%) rename {src => core/src}/main/java/core/packetproxy/controller/ResendController.java (99%) rename {src => core/src}/main/java/core/packetproxy/controller/ResendProgressHandler.java (100%) rename {src => core/src}/main/java/core/packetproxy/controller/SinglePacketAttackController.java (100%) rename {src => core/src}/main/java/core/packetproxy/encode/EncodeAmazonLexV2.java (100%) rename {src => core/src}/main/java/core/packetproxy/encode/EncodeCBOR.java (100%) rename {src => core/src}/main/java/core/packetproxy/encode/EncodeFirebase.java (100%) rename {src => core/src}/main/java/core/packetproxy/encode/EncodeFirestore.java (100%) rename {src => core/src}/main/java/core/packetproxy/encode/EncodeGRPC.java (100%) rename {src => core/src}/main/java/core/packetproxy/encode/EncodeGRPCStreaming.java (100%) rename {src => core/src}/main/java/core/packetproxy/encode/EncodeGRPCWeb.java (100%) rename {src => core/src}/main/java/core/packetproxy/encode/EncodeHTTP.java (100%) rename {src => core/src}/main/java/core/packetproxy/encode/EncodeHTTPBase.java (100%) rename {src => core/src}/main/java/core/packetproxy/encode/EncodeHTTPStreamingResponse.java (100%) rename {src => core/src}/main/java/core/packetproxy/encode/EncodeHTTPWebSocket.java (100%) rename {src => core/src}/main/java/core/packetproxy/encode/EncodeMQTT.java (100%) rename {src => core/src}/main/java/core/packetproxy/encode/EncodeMQTTWebSocket.java (100%) rename {src => core/src}/main/java/core/packetproxy/encode/EncodeMsgPack.java (100%) rename {src => core/src}/main/java/core/packetproxy/encode/EncodeProtobuf.java (100%) rename {src => core/src}/main/java/core/packetproxy/encode/EncodeSample.java (100%) rename {src => core/src}/main/java/core/packetproxy/encode/EncodeSampleHTTP.java (100%) rename {src => core/src}/main/java/core/packetproxy/encode/EncodeSampleQuic.java (100%) rename {src => core/src}/main/java/core/packetproxy/encode/EncodeSampleUpperCase.java (100%) rename {src => core/src}/main/java/core/packetproxy/encode/EncodeXMPP.java (100%) rename {src => core/src}/main/java/core/packetproxy/encode/Encoder.java (100%) rename {src => core/src}/main/java/core/packetproxy/extensions/randomness/test/ApproximateEntropyTest.java (100%) rename {src => core/src}/main/java/core/packetproxy/extensions/randomness/test/CUsUMTest.java (100%) rename {src => core/src}/main/java/core/packetproxy/extensions/randomness/test/FrequencyTest.java (100%) rename {src => core/src}/main/java/core/packetproxy/extensions/randomness/test/LinearComplexityTest.java (100%) rename {src => core/src}/main/java/core/packetproxy/extensions/randomness/test/LongestRunOfOneTest.java (100%) rename {src => core/src}/main/java/core/packetproxy/extensions/randomness/test/RandomnessTest.java (100%) rename {src => core/src}/main/java/core/packetproxy/extensions/randomness/test/RandomnessTestManager.java (100%) rename {src => core/src}/main/java/core/packetproxy/extensions/randomness/test/RankTest.java (100%) rename {src => core/src}/main/java/core/packetproxy/extensions/randomness/test/RunsTest.java (100%) rename {src => core/src}/main/java/core/packetproxy/extensions/randomness/test/SerialTest.java (100%) rename {src => core/src}/main/java/core/packetproxy/extensions/samplehttp/SampleEncoders.java (100%) rename {src => core/src}/main/java/core/packetproxy/extensions/samplehttp/encoder/SampleHTTP.java (100%) rename {src => core/src}/main/java/core/packetproxy/http/HeaderField.java (100%) rename {src => core/src}/main/java/core/packetproxy/http/Http.java (100%) rename {src => core/src}/main/java/core/packetproxy/http/HttpHeader.java (100%) rename {src => core/src}/main/java/core/packetproxy/http/Https.java (100%) rename {src => core/src}/main/java/core/packetproxy/http/HttpsProxySocketEndpoint.java (100%) rename {src => core/src}/main/java/core/packetproxy/http/QueryParameter.java (100%) rename {src => core/src}/main/java/core/packetproxy/http/QueryString.java (100%) rename {src => core/src}/main/java/core/packetproxy/http1/Http1StreamingResponse.java (100%) rename {src => core/src}/main/java/core/packetproxy/http2/FlowControl.java (100%) rename {src => core/src}/main/java/core/packetproxy/http2/FlowControlManager.java (100%) rename {src => core/src}/main/java/core/packetproxy/http2/FrameManager.java (100%) rename {src => core/src}/main/java/core/packetproxy/http2/FramesBase.java (100%) rename {src => core/src}/main/java/core/packetproxy/http2/Grpc.java (100%) rename {src => core/src}/main/java/core/packetproxy/http2/GrpcStreaming.java (100%) rename {src => core/src}/main/java/core/packetproxy/http2/Http2.java (100%) rename {src => core/src}/main/java/core/packetproxy/http2/Http2StreamingResponse.java (100%) rename {src => core/src}/main/java/core/packetproxy/http2/Stream.java (100%) rename {src => core/src}/main/java/core/packetproxy/http2/StreamManager.java (100%) rename {src => core/src}/main/java/core/packetproxy/http2/frames/DataFrame.java (100%) rename {src => core/src}/main/java/core/packetproxy/http2/frames/Frame.java (100%) rename {src => core/src}/main/java/core/packetproxy/http2/frames/FrameFactory.java (100%) rename {src => core/src}/main/java/core/packetproxy/http2/frames/FrameUtils.java (100%) rename {src => core/src}/main/java/core/packetproxy/http2/frames/GoawayFrame.java (100%) rename {src => core/src}/main/java/core/packetproxy/http2/frames/HeadersFrame.java (100%) rename {src => core/src}/main/java/core/packetproxy/http2/frames/PingFrame.java (100%) rename {src => core/src}/main/java/core/packetproxy/http2/frames/RstStreamFrame.java (100%) rename {src => core/src}/main/java/core/packetproxy/http2/frames/SettingsFrame.java (100%) rename {src => core/src}/main/java/core/packetproxy/http2/frames/WindowUpdateFrame.java (100%) rename {src => core/src}/main/java/core/packetproxy/http3/service/Http3.java (100%) rename {src => core/src}/main/java/core/packetproxy/http3/service/Http3HeaderDecoder.java (100%) rename {src => core/src}/main/java/core/packetproxy/http3/service/Http3HeaderEncoder.java (100%) rename {src => core/src}/main/java/core/packetproxy/http3/service/HttpRaw.java (100%) rename {src => core/src}/main/java/core/packetproxy/http3/service/StreamsReader.java (100%) rename {src => core/src}/main/java/core/packetproxy/http3/service/StreamsWriter.java (100%) rename {src => core/src}/main/java/core/packetproxy/http3/service/frame/FrameParser.java (100%) rename {src => core/src}/main/java/core/packetproxy/http3/service/stream/ControlReadStream.java (100%) rename {src => core/src}/main/java/core/packetproxy/http3/service/stream/ControlWriteStream.java (100%) rename {src => core/src}/main/java/core/packetproxy/http3/service/stream/HttpReadStream.java (100%) rename {src => core/src}/main/java/core/packetproxy/http3/service/stream/HttpWriteStreams.java (100%) rename {src => core/src}/main/java/core/packetproxy/http3/service/stream/QpackReadStream.java (100%) rename {src => core/src}/main/java/core/packetproxy/http3/service/stream/QpackWriteStream.java (100%) rename {src => core/src}/main/java/core/packetproxy/http3/service/stream/ReadStream.java (100%) rename {src => core/src}/main/java/core/packetproxy/http3/service/stream/Stream.java (100%) rename {src => core/src}/main/java/core/packetproxy/http3/service/stream/WriteStream.java (100%) rename {src => core/src}/main/java/core/packetproxy/http3/utils/Constants.java (100%) rename {src => core/src}/main/java/core/packetproxy/http3/value/Setting.java (100%) rename {src => core/src}/main/java/core/packetproxy/http3/value/SettingParam.java (100%) rename {src => core/src}/main/java/core/packetproxy/http3/value/UniStreamHeader.java (100%) rename {src => core/src}/main/java/core/packetproxy/http3/value/frame/DataFrame.java (100%) rename {src => core/src}/main/java/core/packetproxy/http3/value/frame/DummyFrame.java (100%) rename {src => core/src}/main/java/core/packetproxy/http3/value/frame/Frame.java (100%) rename {src => core/src}/main/java/core/packetproxy/http3/value/frame/Frames.java (100%) rename {src => core/src}/main/java/core/packetproxy/http3/value/frame/GreaseFrame.java (100%) rename {src => core/src}/main/java/core/packetproxy/http3/value/frame/HeadersFrame.java (100%) rename {src => core/src}/main/java/core/packetproxy/http3/value/frame/RawFrame.java (100%) rename {src => core/src}/main/java/core/packetproxy/http3/value/frame/SettingsFrame.java (100%) rename {src => core/src}/main/java/core/packetproxy/model/CAFactory.java (100%) rename {src => core/src}/main/java/core/packetproxy/model/CAs/CA.java (100%) rename {src => core/src}/main/java/core/packetproxy/model/CAs/PacketProxyCAPerUser.java (100%) rename {src => core/src}/main/java/core/packetproxy/model/CAs/SelfSignedCA.java (100%) rename {src => core/src}/main/java/core/packetproxy/model/CharSet.java (100%) rename {src => core/src}/main/java/core/packetproxy/model/CharSets.java (100%) rename {src => core/src}/main/java/core/packetproxy/model/ClientCertificate.java (100%) rename {src => core/src}/main/java/core/packetproxy/model/ClientCertificates.java (100%) rename {src => core/src}/main/java/core/packetproxy/model/Config.java (100%) rename {src => core/src}/main/java/core/packetproxy/model/ConfigBoolean.java (100%) rename {src => core/src}/main/java/core/packetproxy/model/ConfigInteger.java (100%) rename {src => core/src}/main/java/core/packetproxy/model/ConfigString.java (100%) rename {src => core/src}/main/java/core/packetproxy/model/Configs.java (100%) rename {src => core/src}/main/java/core/packetproxy/model/Credential.java (100%) rename {src => core/src}/main/java/core/packetproxy/model/DaoQueryCache.java (100%) rename {src => core/src}/main/java/core/packetproxy/model/Database.java (100%) rename {src => core/src}/main/java/core/packetproxy/model/Diff.java (100%) rename {src => core/src}/main/java/core/packetproxy/model/DiffBase.java (100%) rename {src => core/src}/main/java/core/packetproxy/model/DiffBinary.java (100%) rename {src => core/src}/main/java/core/packetproxy/model/DiffEventAdapter.java (100%) rename {src => core/src}/main/java/core/packetproxy/model/DiffEventListener.java (100%) rename {src => core/src}/main/java/core/packetproxy/model/DiffJson.java (100%) rename {src => core/src}/main/java/core/packetproxy/model/DiffSet.java (100%) rename {src => core/src}/main/java/core/packetproxy/model/Extension.java (100%) rename {src => core/src}/main/java/core/packetproxy/model/Extensions.java (96%) rename {src => core/src}/main/java/core/packetproxy/model/Filter.java (100%) rename {src => core/src}/main/java/core/packetproxy/model/Filters.java (100%) rename {src => core/src}/main/java/core/packetproxy/model/InterceptModel.java (100%) rename {src => core/src}/main/java/core/packetproxy/model/InterceptOption.java (100%) rename {src => core/src}/main/java/core/packetproxy/model/InterceptOptions.java (100%) rename {src => core/src}/main/java/core/packetproxy/model/ListenPort.java (100%) rename {src => core/src}/main/java/core/packetproxy/model/ListenPorts.java (100%) rename {src => core/src}/main/java/core/packetproxy/model/Modification.java (100%) rename {src => core/src}/main/java/core/packetproxy/model/Modifications.java (100%) rename {src => core/src}/main/java/core/packetproxy/model/OneShotPacket.java (100%) rename {src => core/src}/main/java/core/packetproxy/model/OpenVPNForwardPort.java (100%) rename {src => core/src}/main/java/core/packetproxy/model/OpenVPNForwardPorts.java (100%) rename {src => core/src}/main/java/core/packetproxy/model/Packet.java (100%) rename {src => core/src}/main/java/core/packetproxy/model/PacketInfo.java (100%) rename {src => core/src}/main/java/core/packetproxy/model/Packets.java (100%) rename {src => core/src}/main/java/core/packetproxy/model/PropertyChangeEventType.java (100%) rename {src => core/src}/main/java/core/packetproxy/model/RegexParam.java (100%) rename {src => core/src}/main/java/core/packetproxy/model/ResenderPacket.java (100%) rename {src => core/src}/main/java/core/packetproxy/model/ResenderPackets.java (100%) rename {src => core/src}/main/java/core/packetproxy/model/Resolution.java (100%) rename {src => core/src}/main/java/core/packetproxy/model/Resolutions.java (100%) rename {src => core/src}/main/java/core/packetproxy/model/SSLPassThrough.java (100%) rename {src => core/src}/main/java/core/packetproxy/model/SSLPassThroughs.java (100%) rename {src => core/src}/main/java/core/packetproxy/model/Server.java (100%) rename {src => core/src}/main/java/core/packetproxy/model/Servers.java (100%) rename {src => core/src}/main/java/core/packetproxy/platform/ConfigHttpUiActions.java (92%) rename {src => core/src}/main/java/core/packetproxy/platform/ConsoleUserPrompt.java (100%) rename {src => core/src}/main/java/core/packetproxy/platform/LogSink.java (100%) rename {src => core/src}/main/java/core/packetproxy/platform/LogSinks.java (97%) rename {src => core/src}/main/java/core/packetproxy/platform/MainWindowAccess.java (100%) rename {src => core/src}/main/java/core/packetproxy/platform/MainWindows.java (97%) rename {src => core/src}/main/java/core/packetproxy/platform/PacketPredicate.java (100%) rename {src => core/src}/main/java/core/packetproxy/platform/SpoofingIPSource.java (100%) rename {src => core/src}/main/java/core/packetproxy/platform/UserPrompt.java (100%) rename {src => core/src}/main/java/core/packetproxy/platform/UserPrompts.java (100%) rename {src => core/src}/main/java/core/packetproxy/quic/service/LossDetection.java (100%) rename {src => core/src}/main/java/core/packetproxy/quic/service/Pto.java (100%) rename {src => core/src}/main/java/core/packetproxy/quic/service/RttEstimator.java (100%) rename {src => core/src}/main/java/core/packetproxy/quic/service/connection/ClientConnection.java (100%) rename {src => core/src}/main/java/core/packetproxy/quic/service/connection/ClientConnections.java (100%) rename {src => core/src}/main/java/core/packetproxy/quic/service/connection/Connection.java (100%) rename {src => core/src}/main/java/core/packetproxy/quic/service/connection/ServerConnection.java (100%) rename {src => core/src}/main/java/core/packetproxy/quic/service/connection/helper/AwaitingPackets.java (100%) rename {src => core/src}/main/java/core/packetproxy/quic/service/frame/FrameParser.java (100%) rename {src => core/src}/main/java/core/packetproxy/quic/service/frame/Frames.java (100%) rename {src => core/src}/main/java/core/packetproxy/quic/service/frame/FramesBuilder.java (100%) rename {src => core/src}/main/java/core/packetproxy/quic/service/framegenerator/AckFrameGenerator.java (100%) rename {src => core/src}/main/java/core/packetproxy/quic/service/framegenerator/CryptoFramesToMessages.java (100%) rename {src => core/src}/main/java/core/packetproxy/quic/service/framegenerator/MessagesToCryptoFrames.java (100%) rename {src => core/src}/main/java/core/packetproxy/quic/service/framegenerator/MessagesToStreamFrames.java (100%) rename {src => core/src}/main/java/core/packetproxy/quic/service/framegenerator/StreamFramesToMessages.java (100%) rename {src => core/src}/main/java/core/packetproxy/quic/service/framegenerator/helper/ContinuousStream.java (100%) rename {src => core/src}/main/java/core/packetproxy/quic/service/framegenerator/helper/OneshotStream.java (100%) rename {src => core/src}/main/java/core/packetproxy/quic/service/framegenerator/helper/ReceivedPacketNumbers.java (100%) rename {src => core/src}/main/java/core/packetproxy/quic/service/handshake/ClientHandshake.java (100%) rename {src => core/src}/main/java/core/packetproxy/quic/service/handshake/Handshake.java (100%) rename {src => core/src}/main/java/core/packetproxy/quic/service/handshake/HandshakeState.java (100%) rename {src => core/src}/main/java/core/packetproxy/quic/service/handshake/ServerHandshake.java (100%) rename {src => core/src}/main/java/core/packetproxy/quic/service/key/Keys.java (100%) rename {src => core/src}/main/java/core/packetproxy/quic/service/key/RoleKeys.java (100%) rename {src => core/src}/main/java/core/packetproxy/quic/service/packet/QuicPacketBuilder.java (100%) rename {src => core/src}/main/java/core/packetproxy/quic/service/packet/QuicPacketParser.java (100%) rename {src => core/src}/main/java/core/packetproxy/quic/service/pnspace/PnSpace.java (100%) rename {src => core/src}/main/java/core/packetproxy/quic/service/pnspace/PnSpaces.java (100%) rename {src => core/src}/main/java/core/packetproxy/quic/service/pnspace/helper/LostPackets.java (100%) rename {src => core/src}/main/java/core/packetproxy/quic/service/pnspace/helper/SendFrameQueue.java (100%) rename {src => core/src}/main/java/core/packetproxy/quic/service/pnspace/helper/SentPackets.java (100%) rename {src => core/src}/main/java/core/packetproxy/quic/service/pnspace/level/ApplicationDataPnSpace.java (100%) rename {src => core/src}/main/java/core/packetproxy/quic/service/pnspace/level/HandshakePnSpace.java (100%) rename {src => core/src}/main/java/core/packetproxy/quic/service/pnspace/level/InitialPnSpace.java (100%) rename {src => core/src}/main/java/core/packetproxy/quic/service/transportparameter/TransportParameterParser.java (100%) rename {src => core/src}/main/java/core/packetproxy/quic/service/transportparameter/TransportParameters.java (100%) rename {src => core/src}/main/java/core/packetproxy/quic/utils/AwaitingException.java (100%) rename {src => core/src}/main/java/core/packetproxy/quic/utils/Constants.java (100%) rename {src => core/src}/main/java/core/packetproxy/quic/utils/PacketNumbers.java (100%) rename {src => core/src}/main/java/core/packetproxy/quic/utils/ScheduledTimer.java (100%) rename {src => core/src}/main/java/core/packetproxy/quic/value/ConnectionId.java (100%) rename {src => core/src}/main/java/core/packetproxy/quic/value/ConnectionIdPair.java (100%) rename {src => core/src}/main/java/core/packetproxy/quic/value/FixedLengthPrecededBytes.java (100%) rename {src => core/src}/main/java/core/packetproxy/quic/value/PacketNumber.java (100%) rename {src => core/src}/main/java/core/packetproxy/quic/value/QuicMessage.java (100%) rename {src => core/src}/main/java/core/packetproxy/quic/value/QuicMessages.java (100%) rename {src => core/src}/main/java/core/packetproxy/quic/value/SentPacket.java (100%) rename {src => core/src}/main/java/core/packetproxy/quic/value/SimpleBytes.java (100%) rename {src => core/src}/main/java/core/packetproxy/quic/value/StreamId.java (100%) rename {src => core/src}/main/java/core/packetproxy/quic/value/Token.java (100%) rename {src => core/src}/main/java/core/packetproxy/quic/value/TruncatedPacketNumber.java (100%) rename {src => core/src}/main/java/core/packetproxy/quic/value/VariableLengthInteger.java (100%) rename {src => core/src}/main/java/core/packetproxy/quic/value/VariableLengthPrecededBytes.java (100%) rename {src => core/src}/main/java/core/packetproxy/quic/value/frame/AckEcnFrame.java (100%) rename {src => core/src}/main/java/core/packetproxy/quic/value/frame/AckFrame.java (100%) rename {src => core/src}/main/java/core/packetproxy/quic/value/frame/ConnectionCloseFrame.java (100%) rename {src => core/src}/main/java/core/packetproxy/quic/value/frame/CryptoFrame.java (100%) rename {src => core/src}/main/java/core/packetproxy/quic/value/frame/Frame.java (100%) rename {src => core/src}/main/java/core/packetproxy/quic/value/frame/HandshakeDoneFrame.java (100%) rename {src => core/src}/main/java/core/packetproxy/quic/value/frame/MaxDataFrame.java (100%) rename {src => core/src}/main/java/core/packetproxy/quic/value/frame/NewConnectionIdFrame.java (100%) rename {src => core/src}/main/java/core/packetproxy/quic/value/frame/NewTokenFrame.java (100%) rename {src => core/src}/main/java/core/packetproxy/quic/value/frame/PaddingFrame.java (100%) rename {src => core/src}/main/java/core/packetproxy/quic/value/frame/PingFrame.java (100%) rename {src => core/src}/main/java/core/packetproxy/quic/value/frame/ResetStreamFrame.java (100%) rename {src => core/src}/main/java/core/packetproxy/quic/value/frame/StopSendingFrame.java (100%) rename {src => core/src}/main/java/core/packetproxy/quic/value/frame/StreamDataBlockedFrame.java (100%) rename {src => core/src}/main/java/core/packetproxy/quic/value/frame/StreamFrame.java (100%) rename {src => core/src}/main/java/core/packetproxy/quic/value/frame/StreamsBlockedBidiFrame.java (100%) rename {src => core/src}/main/java/core/packetproxy/quic/value/frame/StreamsBlockedUniFrame.java (100%) rename {src => core/src}/main/java/core/packetproxy/quic/value/frame/UnknownFrame.java (100%) rename {src => core/src}/main/java/core/packetproxy/quic/value/frame/helper/AckRange.java (100%) rename {src => core/src}/main/java/core/packetproxy/quic/value/frame/helper/AckRanges.java (100%) rename {src => core/src}/main/java/core/packetproxy/quic/value/key/Key.java (100%) rename {src => core/src}/main/java/core/packetproxy/quic/value/key/level/ApplicationKey.java (100%) rename {src => core/src}/main/java/core/packetproxy/quic/value/key/level/HandshakeKey.java (100%) rename {src => core/src}/main/java/core/packetproxy/quic/value/key/level/InitialKey.java (100%) rename {src => core/src}/main/java/core/packetproxy/quic/value/key/level/ZeroRttKey.java (100%) rename {src => core/src}/main/java/core/packetproxy/quic/value/packet/PnSpacePacket.java (100%) rename {src => core/src}/main/java/core/packetproxy/quic/value/packet/QuicPacket.java (100%) rename {src => core/src}/main/java/core/packetproxy/quic/value/packet/longheader/LongHeaderPacket.java (100%) rename {src => core/src}/main/java/core/packetproxy/quic/value/packet/longheader/LongHeaderPnSpacePacket.java (100%) rename {src => core/src}/main/java/core/packetproxy/quic/value/packet/longheader/RetryPacket.java (100%) rename {src => core/src}/main/java/core/packetproxy/quic/value/packet/longheader/pnspace/HandshakePacket.java (100%) rename {src => core/src}/main/java/core/packetproxy/quic/value/packet/longheader/pnspace/InitialPacket.java (100%) rename {src => core/src}/main/java/core/packetproxy/quic/value/packet/longheader/pnspace/ZeroRttPacket.java (100%) rename {src => core/src}/main/java/core/packetproxy/quic/value/packet/shortheader/ShortHeaderPacket.java (100%) rename {src => core/src}/main/java/core/packetproxy/quic/value/transportparameter/TransportParameter.java (100%) rename {src => core/src}/main/java/core/packetproxy/quic/value/transportparameter/UnknownParameter.java (100%) rename {src => core/src}/main/java/core/packetproxy/quic/value/transportparameter/bool/DisableActiveMigrationParameter.java (100%) rename {src => core/src}/main/java/core/packetproxy/quic/value/transportparameter/bool/ExpGreaseQuicBitParameter.java (100%) rename {src => core/src}/main/java/core/packetproxy/quic/value/transportparameter/bytearray/InitSrcConnIdParameter.java (100%) rename {src => core/src}/main/java/core/packetproxy/quic/value/transportparameter/bytearray/OrigDestConnIdParameter.java (100%) rename {src => core/src}/main/java/core/packetproxy/quic/value/transportparameter/bytearray/RetrySrcConnIdParameter.java (100%) rename {src => core/src}/main/java/core/packetproxy/quic/value/transportparameter/bytearray/StatelessResetTokenParameter.java (100%) rename {src => core/src}/main/java/core/packetproxy/quic/value/transportparameter/complex/PreferredAddressParameter.java (100%) rename {src => core/src}/main/java/core/packetproxy/quic/value/transportparameter/number/AckDelayExponentParameter.java (100%) rename {src => core/src}/main/java/core/packetproxy/quic/value/transportparameter/number/ActiveConnIdLimitParameter.java (100%) rename {src => core/src}/main/java/core/packetproxy/quic/value/transportparameter/number/ExpMinAckDelayParameter.java (100%) rename {src => core/src}/main/java/core/packetproxy/quic/value/transportparameter/number/InitMaxDataParameter.java (100%) rename {src => core/src}/main/java/core/packetproxy/quic/value/transportparameter/number/InitMaxStreamBidiParameter.java (100%) rename {src => core/src}/main/java/core/packetproxy/quic/value/transportparameter/number/InitMaxStreamDataBidiLocalParameter.java (100%) rename {src => core/src}/main/java/core/packetproxy/quic/value/transportparameter/number/InitMaxStreamDataBidiRemoteParameter.java (100%) rename {src => core/src}/main/java/core/packetproxy/quic/value/transportparameter/number/InitMaxStreamDataUniParameter.java (100%) rename {src => core/src}/main/java/core/packetproxy/quic/value/transportparameter/number/InitMaxStreamUniParameter.java (100%) rename {src => core/src}/main/java/core/packetproxy/quic/value/transportparameter/number/MaxAckDelayParameter.java (100%) rename {src => core/src}/main/java/core/packetproxy/quic/value/transportparameter/number/MaxIdleTimeoutParameter.java (100%) rename {src => core/src}/main/java/core/packetproxy/quic/value/transportparameter/number/MaxUdpPayloadSizeParameter.java (100%) rename {src => core/src}/main/java/core/packetproxy/quic/value/transportparameter/number/OldMinAckDelayParameter.java (100%) rename {src => core/src}/main/java/core/packetproxy/quic/value/transportparameter/number/OldTimestampParameter.java (100%) rename {src => core/src}/main/java/core/packetproxy/util/CharSetUtility.java (100%) rename {src => core/src}/main/java/core/packetproxy/util/PacketProxyUtility.java (100%) rename {src => core/src}/main/java/core/packetproxy/util/SearchBox.java (100%) rename {src => core/src}/main/java/core/packetproxy/util/Throwing.java (100%) rename {src => core/src}/main/java/core/packetproxy/util/ThrowingBiConsumer.java (100%) rename {src => core/src}/main/java/core/packetproxy/util/ThrowingConsumer.java (100%) rename {src => core/src}/main/java/core/packetproxy/util/ThrowingFunction.java (100%) rename {src => core/src}/main/java/core/packetproxy/util/ThrowingPredicate.java (100%) rename {src => core/src}/main/java/core/packetproxy/util/WithCounter.java (100%) rename {src => core/src}/main/java/core/packetproxy/vulchecker/JWTVulChecker.java (100%) rename {src => core/src}/main/java/core/packetproxy/vulchecker/NumberVulChecker.java (100%) rename {src => core/src}/main/java/core/packetproxy/vulchecker/VulCheckPattern.java (100%) rename {src => core/src}/main/java/core/packetproxy/vulchecker/VulChecker.java (100%) rename {src => core/src}/main/java/core/packetproxy/vulchecker/generator/DecimalsGenerator.java (100%) rename {src => core/src}/main/java/core/packetproxy/vulchecker/generator/Generator.java (100%) rename {src => core/src}/main/java/core/packetproxy/vulchecker/generator/IntegerOverflowGenerator.java (100%) rename {src => core/src}/main/java/core/packetproxy/vulchecker/generator/IntegerOverflowMinusOneGenerator.java (100%) rename {src => core/src}/main/java/core/packetproxy/vulchecker/generator/IntegerOverflowPlusOneGenerator.java (100%) rename {src => core/src}/main/java/core/packetproxy/vulchecker/generator/JWTAlgHS256.java (100%) rename {src => core/src}/main/java/core/packetproxy/vulchecker/generator/JWTAlgNone.java (100%) rename {src => core/src}/main/java/core/packetproxy/vulchecker/generator/JWTAlgRS256.java (100%) rename {src => core/src}/main/java/core/packetproxy/vulchecker/generator/JWTHeaderAddSpecifiedJKUGenerator.java (100%) rename {src => core/src}/main/java/core/packetproxy/vulchecker/generator/JWTHeaderAlgNoneGenerator.java (100%) rename {src => core/src}/main/java/core/packetproxy/vulchecker/generator/JWTHeaderJKUModifiedByAtmarkGenerator.java (100%) rename {src => core/src}/main/java/core/packetproxy/vulchecker/generator/JWTHeaderJKUModifiedGenerator.java (100%) rename {src => core/src}/main/java/core/packetproxy/vulchecker/generator/JWTHeaderJWKGenerator.java (100%) rename {src => core/src}/main/java/core/packetproxy/vulchecker/generator/JWTHeaderModifiedGenerator.java (100%) rename {src => core/src}/main/java/core/packetproxy/vulchecker/generator/JWTHeaderRS256toHS256Generator.java (100%) rename {src => core/src}/main/java/core/packetproxy/vulchecker/generator/JWTPayloadModifiedGenerator.java (100%) rename {src => core/src}/main/java/core/packetproxy/vulchecker/generator/JWTSignWithAppleOtherTokenGenerator.java (100%) rename {src => core/src}/main/java/core/packetproxy/vulchecker/generator/JWTSignatureUnmodified.java (100%) rename {src => core/src}/main/java/core/packetproxy/vulchecker/generator/LongOverflowGenerator.java (100%) rename {src => core/src}/main/java/core/packetproxy/vulchecker/generator/LongOverflowMinusOneGenerator.java (100%) rename {src => core/src}/main/java/core/packetproxy/vulchecker/generator/LongOverflowPlusOneGenerator.java (100%) rename {src => core/src}/main/java/core/packetproxy/vulchecker/generator/NegativeNumberGenerator.java (100%) rename {src => core/src}/main/java/core/packetproxy/vulchecker/generator/ZeroGenerator.java (100%) rename {src => core/src}/main/java/core/packetproxy/websocket/OpCode.java (100%) rename {src => core/src}/main/java/core/packetproxy/websocket/WebSocket.java (100%) rename {src => core/src}/main/java/core/packetproxy/websocket/WebSocketFrame.java (100%) rename {src => core/src}/main/kotlin/core/packetproxy/AppInitializer.kt (100%) rename {src => core/src}/main/kotlin/core/packetproxy/ProxyFactory.kt (100%) rename {src => core/src}/main/kotlin/core/packetproxy/common/I18nString.kt (100%) rename {src => core/src}/main/kotlin/core/packetproxy/controller/InterceptController.kt (100%) rename {src => core/src}/main/kotlin/core/packetproxy/extensions/securityheaders/README.md (100%) rename {src => core/src}/main/kotlin/core/packetproxy/extensions/securityheaders/SecurityCheck.kt (100%) rename {src => core/src}/main/kotlin/core/packetproxy/extensions/securityheaders/SecurityCheckResult.kt (100%) rename {src => core/src}/main/kotlin/core/packetproxy/extensions/securityheaders/checks/CacheControlCheck.kt (100%) rename {src => core/src}/main/kotlin/core/packetproxy/extensions/securityheaders/checks/ContentTypeCheck.kt (100%) rename {src => core/src}/main/kotlin/core/packetproxy/extensions/securityheaders/checks/CookieCheck.kt (100%) rename {src => core/src}/main/kotlin/core/packetproxy/extensions/securityheaders/checks/CorsCheck.kt (100%) rename {src => core/src}/main/kotlin/core/packetproxy/extensions/securityheaders/checks/CspCheck.kt (100%) rename {src => core/src}/main/kotlin/core/packetproxy/extensions/securityheaders/checks/HstsCheck.kt (100%) rename {src => core/src}/main/kotlin/core/packetproxy/extensions/securityheaders/checks/XssProtectionCheck.kt (100%) rename {src => core/src}/main/kotlin/core/packetproxy/extensions/securityheaders/exclusion/ExclusionRule.kt (100%) rename {src => core/src}/main/kotlin/core/packetproxy/extensions/securityheaders/exclusion/ExclusionRuleManager.kt (100%) rename {src => core/src}/main/kotlin/core/packetproxy/extensions/securityheaders/exclusion/ExclusionRuleType.kt (100%) rename {src => core/src}/main/kotlin/core/packetproxy/grpc/GrpcSchemaResolver.kt (100%) rename {src => core/src}/main/kotlin/core/packetproxy/grpc/GrpcServiceRegistry.kt (100%) rename {src => core/src}/main/kotlin/core/packetproxy/grpc/GrpcServiceRegistryStore.kt (100%) rename {src => core/src}/main/kotlin/core/packetproxy/grpc/ProtoFileSet.kt (100%) rename {src => core/src}/main/kotlin/core/packetproxy/grpc/ProtocRunner.kt (100%) rename {src => core/src}/main/kotlin/core/packetproxy/util/Extensions.kt (100%) rename {src => core/src}/main/kotlin/core/packetproxy/util/Logging.kt (100%) rename {src => core/src}/main/resources/certificates/user.ks (100%) rename {src => core/src}/main/resources/log4j.properties (100%) rename {src => core/src}/main/resources/org/xbill/DNS/windows/DNSServer.properties (100%) rename {src => core/src}/main/resources/org/xbill/DNS/windows/DNSServer_de.properties (100%) rename {src => core/src}/main/resources/org/xbill/DNS/windows/DNSServer_fr.properties (100%) rename {src => core/src}/main/resources/org/xbill/DNS/windows/DNSServer_ja.properties (100%) rename {src => core/src}/main/resources/org/xbill/DNS/windows/DNSServer_pl.properties (100%) rename {src => core/src}/main/resources/strings_ja.properties (100%) create mode 100644 core/src/main/resources/version rename {src => core/src}/test/java/org/xbill/DNS/HTTPSRecordTest.java (100%) rename {src => core/src}/test/java/org/xbill/DNS/SVCBRecordTest.java (100%) create mode 100644 core/src/test/java/packetproxy/CoreModuleArchitectureTest.java rename {src => core/src}/test/java/packetproxy/PrivateDNSClientTest.java (100%) rename {src => core/src}/test/java/packetproxy/common/AmazonLexV2Test.java (100%) rename {src => core/src}/test/java/packetproxy/common/BoyerMooreTest.java (100%) rename {src => core/src}/test/java/packetproxy/common/CharSetUtilityTest.java (100%) rename {src => core/src}/test/java/packetproxy/common/GRPCTest.java (100%) rename {src => core/src}/test/java/packetproxy/common/Protobuf3Test.java (100%) rename {src => core/src}/test/java/packetproxy/common/StringUtilsTest.java (100%) rename {src => core/src}/test/java/packetproxy/common/UDPSocketEndpointTest.java (100%) rename {src => core/src}/test/java/packetproxy/encode/EncodeHTTPWebSocketOpCodeTest.java (100%) rename {src => core/src}/test/java/packetproxy/http2/FrameManagerTest.java (100%) rename {src => core/src}/test/java/packetproxy/http2/frames/FrameTest.java (100%) rename {src => core/src}/test/java/packetproxy/http2/frames/HeadersFrameTest.java (100%) rename {src => core/src}/test/java/packetproxy/http2/frames/SettingsFrameTest.java (100%) rename {src => core/src}/test/java/packetproxy/http3/QpackTest.java (100%) rename {src => core/src}/test/java/packetproxy/http3/helper/Http3TestHelper.java (100%) rename {src => core/src}/test/java/packetproxy/http3/service/Http3HeaderEncoderDecoderTest.java (100%) rename {src => core/src}/test/java/packetproxy/http3/service/Http3Test.java (100%) rename {src => core/src}/test/java/packetproxy/http3/service/StreamsReaderTest.java (100%) rename {src => core/src}/test/java/packetproxy/http3/service/frame/FrameParserTest.java (100%) rename {src => core/src}/test/java/packetproxy/http3/service/stream/ControlReadStreamTest.java (100%) rename {src => core/src}/test/java/packetproxy/http3/service/stream/ControlWriteStreamTest.java (100%) rename {src => core/src}/test/java/packetproxy/http3/service/stream/QpackReadStreamTest.java (100%) rename {src => core/src}/test/java/packetproxy/http3/service/stream/QpackWriteStreamTest.java (100%) rename {src => core/src}/test/java/packetproxy/http3/value/SettingTest.java (100%) rename {src => core/src}/test/java/packetproxy/http3/value/frame/DummyFrameTest.java (100%) rename {src => core/src}/test/java/packetproxy/http3/value/frame/RawFrameTest.java (100%) rename {src => core/src}/test/java/packetproxy/http3/value/frame/SettingsFrameTest.java (100%) rename {src => core/src}/test/java/packetproxy/quic/service/ackgenerator/AckFrameGeneratorTest.java (100%) rename {src => core/src}/test/java/packetproxy/quic/service/ackgenerator/ReceivedQuicPacketNumbersTest.java (100%) rename {src => core/src}/test/java/packetproxy/quic/service/framegenerator/CryptoFramesToMessagesTest.java (100%) rename {src => core/src}/test/java/packetproxy/quic/service/pnspace/SentPacketsTest.java (100%) rename {src => core/src}/test/java/packetproxy/quic/service/transportparameter/TransportParametersTest.java (100%) rename {src => core/src}/test/java/packetproxy/quic/value/ConnectionIdTest.java (100%) rename {src => core/src}/test/java/packetproxy/quic/value/QuicMessageTest.java (100%) rename {src => core/src}/test/java/packetproxy/quic/value/QuicMessagesTest.java (100%) rename {src => core/src}/test/java/packetproxy/quic/value/QuicPacketNumbersTest.java (100%) rename {src => core/src}/test/java/packetproxy/quic/value/TruncatedQuicPacketNumberTest.java (100%) rename {src => core/src}/test/java/packetproxy/quic/value/VariableLengthIntegerTest.java (100%) rename {src => core/src}/test/java/packetproxy/quic/value/WriteStreamIdTest.java (100%) rename {src => core/src}/test/java/packetproxy/quic/value/frame/AckEcnFrameTest.java (100%) rename {src => core/src}/test/java/packetproxy/quic/value/frame/AckFrameTest.java (100%) rename {src => core/src}/test/java/packetproxy/quic/value/frame/CryptoFrameTest.java (100%) rename {src => core/src}/test/java/packetproxy/quic/value/frame/FramesTest.java (100%) rename {src => core/src}/test/java/packetproxy/quic/value/frame/NewConnectionIdFrameTest.java (100%) rename {src => core/src}/test/java/packetproxy/quic/value/packet/InitialPacketTest.java (100%) rename {src => core/src}/test/java/packetproxy/quic/value/packet/helper/TestPacket.java (100%) rename {src => core/src}/test/java/packetproxy/quic/value/packet/shortheader/ShortHeaderPacketTest.java (100%) rename {src => core/src}/test/java/packetproxy/quic/value/transportparameter/bool/DisableActiveMigrationParameterTest.java (100%) rename {src => core/src}/test/kotlin/packetproxy/grpc/GrpcServiceRegistryStoreTest.kt (100%) rename {src => core/src}/test/kotlin/packetproxy/grpc/GrpcServiceRegistryTest.kt (100%) rename {src => core/src}/test/kotlin/packetproxy/grpc/ProtoFileSetTest.kt (100%) rename {src => core/src}/test/resources/packetproxy/grpc/proto/multidir/common.proto (100%) rename {src => core/src}/test/resources/packetproxy/grpc/proto/multidir/multi.desc (100%) rename {src => core/src}/test/resources/packetproxy/grpc/proto/multidir/multi_without_imports.desc (100%) rename {src => core/src}/test/resources/packetproxy/grpc/proto/multidir/svc_a.proto (100%) rename {src => core/src}/test/resources/packetproxy/grpc/proto/multidir/svc_b.proto (100%) rename {src => core/src}/test/resources/packetproxy/grpc/proto/testsvc.desc (100%) rename {src => core/src}/test/resources/packetproxy/grpc/proto/testsvc.proto (100%) create mode 100644 gradle/app-release.gradle create mode 100644 gradle/module-common.gradle create mode 100644 gulp/build.gradle rename {src => gulp/src}/main/kotlin/core/packetproxy/gulp/CLIModeHandler.kt (100%) rename {src => gulp/src}/main/kotlin/core/packetproxy/gulp/CommandContext.kt (100%) rename {src => gulp/src}/main/kotlin/core/packetproxy/gulp/CommandParser.kt (100%) rename {src => gulp/src}/main/kotlin/core/packetproxy/gulp/DecodeModeHandler.kt (100%) rename {src => gulp/src}/main/kotlin/core/packetproxy/gulp/EncodeModeHandler.kt (100%) rename {src => gulp/src}/main/kotlin/core/packetproxy/gulp/GulpTerminal.kt (100%) rename {src => gulp/src}/main/kotlin/core/packetproxy/gulp/command/Command.kt (100%) rename {src => gulp/src}/main/kotlin/core/packetproxy/gulp/command/EchoCommand.kt (100%) rename {src => gulp/src}/main/kotlin/core/packetproxy/gulp/command/LogCommand.kt (100%) rename {src => gulp/src}/main/kotlin/core/packetproxy/gulp/command/SourceCommand.kt (100%) rename {src => gulp/src}/main/kotlin/core/packetproxy/gulp/input/ChainedSource.kt (100%) rename {src => gulp/src}/main/kotlin/core/packetproxy/gulp/input/DynamicCompleter.kt (100%) rename {src => gulp/src}/main/kotlin/core/packetproxy/gulp/input/FallBackTerminalSource.kt (100%) rename {src => gulp/src}/main/kotlin/core/packetproxy/gulp/input/LineSource.kt (100%) rename {src => gulp/src}/main/kotlin/core/packetproxy/gulp/input/ScriptSource.kt (100%) rename {src => gulp/src}/main/kotlin/core/packetproxy/gulp/input/TerminalFactory.kt (100%) rename {src => gulp/src}/main/kotlin/core/packetproxy/gulp/input/TerminalSource.kt (100%) rename {src => gulp/src}/main/kotlin/core/packetproxy/gulp/output/BufferedOutput.kt (100%) rename {src => gulp/src}/main/kotlin/core/packetproxy/gulp/output/CommandOutput.kt (100%) rename {src => gulp/src}/main/kotlin/core/packetproxy/gulp/output/ConsoleOutput.kt (100%) rename {src => gulp/src}/main/kotlin/core/packetproxy/gulp/output/OutputStyle.kt (100%) rename {src/test/kotlin/packetproxy/gulp => gulp/src/test/kotlin/packetproxy}/CommandOutputIntegrationTest.kt (100%) create mode 100644 gulp/src/test/kotlin/packetproxy/GulpModuleArchitectureTest.kt rename {src/test/kotlin/packetproxy/gulp => gulp/src/test/kotlin/packetproxy}/TerminalCoroutinesTest.kt (100%) rename {src/test/kotlin/packetproxy/gulp => gulp/src/test/kotlin/packetproxy}/command/EchoCommandTest.kt (100%) rename {src/test/kotlin/packetproxy/gulp => gulp/src/test/kotlin/packetproxy}/command/SourceCommandTest.kt (100%) rename {src/test/kotlin/packetproxy/gulp => gulp/src/test/kotlin/packetproxy}/output/BufferedOutputTest.kt (100%) rename {src/test/kotlin/packetproxy/gulp => gulp/src/test/kotlin/packetproxy}/output/OutputStyleTest.kt (100%) create mode 100644 ui/build.gradle rename {src => ui/src}/main/java/core/packetproxy/gui/BinaryTextPane.java (100%) rename {src => ui/src}/main/java/core/packetproxy/gui/CloseButtonTabbedPane.java (100%) rename {src => ui/src}/main/java/core/packetproxy/gui/CustomParagraphView.java (100%) rename {src => ui/src}/main/java/core/packetproxy/gui/CustomScrollPane.java (100%) rename {src => ui/src}/main/java/core/packetproxy/gui/ExtendedTextPane.java (100%) rename {src => ui/src}/main/java/core/packetproxy/gui/FilterComboBoxCellRenderer.java (100%) rename {src => ui/src}/main/java/core/packetproxy/gui/FilterComboBoxEditor.java (100%) rename {src => ui/src}/main/java/core/packetproxy/gui/FilterTextParser.java (100%) rename {src => ui/src}/main/java/core/packetproxy/gui/GUIBulkSender.java (100%) rename {src => ui/src}/main/java/core/packetproxy/gui/GUIBulkSenderData.java (100%) rename {src => ui/src}/main/java/core/packetproxy/gui/GUIBulkSenderDataRaw.java (100%) rename {src => ui/src}/main/java/core/packetproxy/gui/GUIBulkSenderTable.java (100%) rename {src => ui/src}/main/java/core/packetproxy/gui/GUIData.java (100%) rename {src => ui/src}/main/java/core/packetproxy/gui/GUIDataAll.java (100%) rename {src => ui/src}/main/java/core/packetproxy/gui/GUIDecoderDialog.java (100%) rename {src => ui/src}/main/java/core/packetproxy/gui/GUIDiffBase.java (100%) rename {src => ui/src}/main/java/core/packetproxy/gui/GUIDiffBinary.java (100%) rename {src => ui/src}/main/java/core/packetproxy/gui/GUIDiffDialogParent.java (100%) rename {src => ui/src}/main/java/core/packetproxy/gui/GUIDiffJson.java (100%) rename {src => ui/src}/main/java/core/packetproxy/gui/GUIDiffRaw.java (100%) rename {src => ui/src}/main/java/core/packetproxy/gui/GUIExtensions.java (100%) rename {src => ui/src}/main/java/core/packetproxy/gui/GUIFilterConfig.java (100%) rename {src => ui/src}/main/java/core/packetproxy/gui/GUIFilterConfigAddDialog.java (100%) rename {src => ui/src}/main/java/core/packetproxy/gui/GUIFilterConfigDialog.java (100%) rename {src => ui/src}/main/java/core/packetproxy/gui/GUIFilterConfigEditDialog.java (100%) rename {src => ui/src}/main/java/core/packetproxy/gui/GUIFilterDropDownList.java (100%) rename {src => ui/src}/main/java/core/packetproxy/gui/GUIHexCalc.java (100%) rename {src => ui/src}/main/java/core/packetproxy/gui/GUIHistory.java (100%) rename {src => ui/src}/main/java/core/packetproxy/gui/GUIHistoryAutoScroll.java (100%) rename {src => ui/src}/main/java/core/packetproxy/gui/GUIHistoryBinary.java (100%) rename {src => ui/src}/main/java/core/packetproxy/gui/GUIHistoryContextMenuFactory.java (100%) rename {src => ui/src}/main/java/core/packetproxy/gui/GUIHistoryPanel.java (100%) rename {src => ui/src}/main/java/core/packetproxy/gui/GUIHistoryRaw.java (100%) rename {src => ui/src}/main/java/core/packetproxy/gui/GUIIntercept.java (100%) rename {src => ui/src}/main/java/core/packetproxy/gui/GUIJson.java (100%) rename {src => ui/src}/main/java/core/packetproxy/gui/GUILog.java (100%) rename {src => ui/src}/main/java/core/packetproxy/gui/GUILogSink.java (100%) rename {src => ui/src}/main/java/core/packetproxy/gui/GUIMain.java (98%) rename {src => ui/src}/main/java/core/packetproxy/gui/GUIMainWindowAccess.java (100%) rename {src => ui/src}/main/java/core/packetproxy/gui/GUIMenu.java (100%) rename {src => ui/src}/main/java/core/packetproxy/gui/GUIOption.java (100%) rename {src => ui/src}/main/java/core/packetproxy/gui/GUIOptionCharSetDialog.java (100%) rename {src => ui/src}/main/java/core/packetproxy/gui/GUIOptionCharSets.java (100%) rename {src => ui/src}/main/java/core/packetproxy/gui/GUIOptionClientCertificate.java (100%) rename {src => ui/src}/main/java/core/packetproxy/gui/GUIOptionClientCertificateDialog.java (100%) rename {src => ui/src}/main/java/core/packetproxy/gui/GUIOptionComponentBase.java (100%) rename {src => ui/src}/main/java/core/packetproxy/gui/GUIOptionExportCertificateAndPrivateKeyDialog.java (100%) rename {src => ui/src}/main/java/core/packetproxy/gui/GUIOptionExtensions.java (100%) rename {src => ui/src}/main/java/core/packetproxy/gui/GUIOptionExtensionsDialog.java (100%) rename {src => ui/src}/main/java/core/packetproxy/gui/GUIOptionFonts.java (100%) rename {src => ui/src}/main/java/core/packetproxy/gui/GUIOptionHttp.java (100%) rename {src => ui/src}/main/java/core/packetproxy/gui/GUIOptionHubServer.java (100%) rename {src => ui/src}/main/java/core/packetproxy/gui/GUIOptionImportCertificateAndPrivateKeyDialog.java (100%) rename {src => ui/src}/main/java/core/packetproxy/gui/GUIOptionInterceptDialog.java (100%) rename {src => ui/src}/main/java/core/packetproxy/gui/GUIOptionInterceptEditOthersDialog.java (100%) rename {src => ui/src}/main/java/core/packetproxy/gui/GUIOptionIntercepts.java (100%) rename {src => ui/src}/main/java/core/packetproxy/gui/GUIOptionListenPortDialog.java (100%) rename {src => ui/src}/main/java/core/packetproxy/gui/GUIOptionListenPorts.java (100%) rename {src => ui/src}/main/java/core/packetproxy/gui/GUIOptionModificationDialog.java (100%) rename {src => ui/src}/main/java/core/packetproxy/gui/GUIOptionModifications.java (100%) rename {src => ui/src}/main/java/core/packetproxy/gui/GUIOptionOpenVPN.java (100%) rename {src => ui/src}/main/java/core/packetproxy/gui/GUIOptionOpenVPNDialog.java (100%) rename {src => ui/src}/main/java/core/packetproxy/gui/GUIOptionPrivateDNS.java (100%) rename {src => ui/src}/main/java/core/packetproxy/gui/GUIOptionPrivateDNSSpoofingSource.java (100%) rename {src => ui/src}/main/java/core/packetproxy/gui/GUIOptionResolutionDialog.java (100%) rename {src => ui/src}/main/java/core/packetproxy/gui/GUIOptionResolutions.java (100%) rename {src => ui/src}/main/java/core/packetproxy/gui/GUIOptionSSLPassThrough.java (100%) rename {src => ui/src}/main/java/core/packetproxy/gui/GUIOptionSSLPassThroughDialog.java (100%) rename {src => ui/src}/main/java/core/packetproxy/gui/GUIOptionServerDialog.java (100%) rename {src => ui/src}/main/java/core/packetproxy/gui/GUIOptionServers.java (100%) rename {src => ui/src}/main/java/core/packetproxy/gui/GUIPacket.java (100%) rename {src => ui/src}/main/java/core/packetproxy/gui/GUIPacketData.java (100%) rename {src => ui/src}/main/java/core/packetproxy/gui/GUIProjectChooserDialog.java (100%) rename {src => ui/src}/main/java/core/packetproxy/gui/GUIRegexParamDialog.java (100%) rename {src => ui/src}/main/java/core/packetproxy/gui/GUIRegexParamsTableDialog.java (100%) rename {src => ui/src}/main/java/core/packetproxy/gui/GUIResender.java (100%) rename {src => ui/src}/main/java/core/packetproxy/gui/GUIServerNamePanel.java (100%) rename {src => ui/src}/main/java/core/packetproxy/gui/GUITooltipDecodeMessage.java (100%) rename {src => ui/src}/main/java/core/packetproxy/gui/GUIVulCheckHelper.java (100%) rename {src => ui/src}/main/java/core/packetproxy/gui/GUIVulCheckManager.java (100%) rename {src => ui/src}/main/java/core/packetproxy/gui/GUIVulCheckRecvTable.java (100%) rename {src => ui/src}/main/java/core/packetproxy/gui/GUIVulCheckSendTable.java (100%) rename {src => ui/src}/main/java/core/packetproxy/gui/GUIVulCheckTab.java (100%) create mode 100644 ui/src/main/java/core/packetproxy/gui/GuiExtensionPresets.java rename {src => ui/src}/main/java/core/packetproxy/gui/HintTextField.java (100%) rename {src => ui/src}/main/java/core/packetproxy/gui/JFontChooser.java (100%) rename {src => ui/src}/main/java/core/packetproxy/gui/NativeFileChooser.java (100%) rename {src => ui/src}/main/java/core/packetproxy/gui/OptionTableModel.java (100%) rename {src/main/java/core/packetproxy => ui/src/main/java/core/packetproxy/gui}/PPContextMenuManager.java (99%) rename {src => ui/src}/main/java/core/packetproxy/gui/Projects.java (100%) rename {src => ui/src}/main/java/core/packetproxy/gui/RawTextPane.java (100%) rename {src => ui/src}/main/java/core/packetproxy/gui/Splash.java (100%) rename {src => ui/src}/main/java/core/packetproxy/gui/SwingConfigHttpUiActions.java (87%) rename {src => ui/src}/main/java/core/packetproxy/gui/SwingUserPrompt.java (100%) rename {src => ui/src}/main/java/core/packetproxy/gui/TabSet.java (100%) rename {src => ui/src}/main/java/core/packetproxy/gui/TableCustomColorManager.java (100%) rename {src => ui/src}/main/java/core/packetproxy/gui/TableHeaderStyle.java (100%) rename {src => ui/src}/main/java/core/packetproxy/gui/WrapEditorKit.java (100%) rename {src => ui/src}/main/java/core/packetproxy/gui/WriteFileChooserWrapper.java (100%) rename {src => ui/src}/main/java/core/packetproxy/gui/extensions/randomness/RandomnessExtension.java (100%) rename {src => ui/src}/main/java/core/packetproxy/gui/ppcontextmenu/PPContextMenu.java (100%) rename {src => ui/src}/main/java/core/packetproxy/gui/ppcontextmenu/SampleItem.java (100%) rename {src => ui/src}/main/kotlin/core/packetproxy/extensions/securityheaders/SecurityHeadersExtension.kt (100%) rename {src => ui/src}/main/kotlin/core/packetproxy/extensions/securityheaders/ui/ExclusionManagementDialog.kt (100%) rename {src => ui/src}/main/kotlin/core/packetproxy/extensions/securityheaders/ui/SecurityHeadersDetailPanel.kt (100%) rename {src => ui/src}/main/kotlin/core/packetproxy/extensions/securityheaders/ui/SecurityHeadersTableRenderer.kt (100%) rename {src => ui/src}/main/kotlin/core/packetproxy/extensions/securityheaders/ui/SecurityHeadersToolbar.kt (100%) rename {src => ui/src}/main/kotlin/core/packetproxy/extensions/securityheaders/ui/TextStyles.kt (100%) rename {src => ui/src}/main/kotlin/core/packetproxy/gui/GUIOptionGrpcDescriptorDialog.kt (100%) rename {src => ui/src}/main/kotlin/core/packetproxy/gui/GUIRequestResponsePanel.kt (100%) rename {src => ui/src}/main/kotlin/core/packetproxy/gui/PacketPairingService.kt (100%) rename {src => ui/src}/main/resources/gui/arrow.png (100%) rename {src => ui/src}/main/resources/gui/auto_scroll_disabled.png (100%) rename {src => ui/src}/main/resources/gui/auto_scroll_enabled.png (100%) rename {src => ui/src}/main/resources/gui/close.png (100%) rename {src => ui/src}/main/resources/gui/close_mouseovered.png (100%) rename {src => ui/src}/main/resources/gui/config.png (100%) rename {src => ui/src}/main/resources/gui/icon.ico (100%) rename {src => ui/src}/main/resources/gui/icon.png (100%) rename {src => ui/src}/main/resources/gui/installer_icon.png (100%) rename {src => ui/src}/main/resources/gui/installer_leftside_image.png (100%) rename {src => ui/src}/main/resources/gui/plus.png (100%) rename {src => ui/src}/main/resources/gui/splash.png (100%) create mode 100644 ui/src/test/kotlin/packetproxy/UiModuleArchitectureTest.kt rename {src/test/kotlin/packetproxy/extensions/securityheaders => ui/src/test/kotlin/packetproxy/extensions}/CacheControlCheckTest.kt (100%) rename {src/test/kotlin/packetproxy/extensions/securityheaders => ui/src/test/kotlin/packetproxy/extensions}/ContentTypeCheckTest.kt (100%) rename {src/test/kotlin/packetproxy/extensions/securityheaders => ui/src/test/kotlin/packetproxy/extensions}/CookieCheckTest.kt (100%) rename {src/test/kotlin/packetproxy/extensions/securityheaders => ui/src/test/kotlin/packetproxy/extensions}/CorsCheckTest.kt (100%) rename {src/test/kotlin/packetproxy/extensions/securityheaders => ui/src/test/kotlin/packetproxy/extensions}/CspCheckTest.kt (100%) rename {src/test/kotlin/packetproxy/extensions/securityheaders => ui/src/test/kotlin/packetproxy/extensions}/HighlightSegmentTest.kt (100%) rename {src/test/kotlin/packetproxy/extensions/securityheaders => ui/src/test/kotlin/packetproxy/extensions}/HstsCheckTest.kt (100%) rename {src/test/kotlin/packetproxy/extensions/securityheaders => ui/src/test/kotlin/packetproxy/extensions}/SecurityCheckResultTest.kt (100%) rename {src/test/kotlin/packetproxy/extensions/securityheaders => ui/src/test/kotlin/packetproxy/extensions}/TestHttpHeader.kt (100%) rename {src/test/kotlin/packetproxy/extensions/securityheaders => ui/src/test/kotlin/packetproxy/extensions}/XssProtectionCheckTest.kt (100%) rename {src => ui/src}/test/kotlin/packetproxy/gui/PacketPairingServiceTest.kt (100%) diff --git a/.gitignore b/.gitignore index de0abcd0..fe41c558 100644 --- a/.gitignore +++ b/.gitignore @@ -5,8 +5,9 @@ /.settings/ # Gradle -/build/ -/.gradle +**/build/ +**/.gradle/ +buildSrc/build/ /src/main/resources/version # IntelliJ IDEA diff --git a/app/build.gradle b/app/build.gradle new file mode 100644 index 00000000..83aaff56 --- /dev/null +++ b/app/build.gradle @@ -0,0 +1,72 @@ +buildscript { + repositories { + mavenCentral() + } + dependencies { + classpath 'com.bmuschko:gradle-izpack-plugin:3.0' + } +} + +plugins { + id 'java' + id 'application' + id 'com.bmuschko.izpack' version '3.2' + id 'com.github.jk1.dependency-license-report' version '2.5' + id 'de.undercouch.download' version '5.6.0' +} + +apply from: rootProject.file('gradle/module-common.gradle') +apply from: rootProject.file('gradle/app-release.gradle') + +dependencies { + implementation project(':core') + implementation project(':ui') + implementation project(':gulp') + + izpack 'org.codehaus.izpack:izpack-dist:5.1.3' +} + +application { + mainClass = 'packetproxy.PacketProxy' +} + +sourceSets { + main { + java { + srcDirs = ['src/main/java/core'] + } + } +} + +licenseReport { + outputDir = "$buildDir/reports/licenses" + configurations = ['runtimeClasspath'] +} + +tasks.named('jar', Jar) { + archiveBaseName.set('PacketProxy') + duplicatesStrategy = DuplicatesStrategy.INCLUDE + doFirst { + def serviceDir = file("${buildDir}/META-INF/services") + serviceDir.deleteDir() + serviceDir.mkdirs() + for (file in configurations.runtimeClasspath) { + zipTree(file).matching { include 'META-INF/services/*' }.each { f -> + new File(serviceDir, f.name) << f.getText('UTF-8') << '\n' + } + } + } + manifest { + attributes( + 'Main-Class': 'packetproxy.PacketProxy', + 'Class-Path': configurations.runtimeClasspath.collect { it.name }.join(' ')) + } + from { + configurations.runtimeClasspath.collect { + it.isDirectory() ? it : zipTree(it).matching { exclude 'META-INF/**' } + } + } + from { + fileTree(buildDir).matching { include 'META-INF/services/*' } + } +} diff --git a/app/build.gradle.partial b/app/build.gradle.partial new file mode 100644 index 00000000..87f7b2cc --- /dev/null +++ b/app/build.gradle.partial @@ -0,0 +1,580 @@ +import com.bmuschko.gradle.izpack.CreateInstallerTask +import org.apache.tools.ant.taskdefs.condition.Os +import org.gradle.plugins.ide.eclipse.model.AccessRule + +buildscript { + dependencies { + classpath 'com.bmuschko:gradle-izpack-plugin:3.0' + } +} + +plugins { + id 'java' + id 'application' + id 'eclipse' + id 'me.champeau.jmh' version '0.7.3' + id 'com.bmuschko.izpack' version '3.2' + id 'com.github.jk1.dependency-license-report' version '2.5' + id "de.undercouch.download" version "5.6.0" + id "com.diffplug.spotless" version "7.1.0" + id 'org.jetbrains.kotlin.jvm' version '2.2.21' +} + +repositories { + mavenCentral() + maven { url = 'https://jitpack.io' } +} + +dependencies { + compileOnly 'org.projectlombok:lombok:1.18.42' + annotationProcessor 'org.projectlombok:lombok:1.18.42' + testCompileOnly 'org.projectlombok:lombok:1.18.42' + testAnnotationProcessor 'org.projectlombok:lombok:1.18.42' + + testImplementation 'org.junit.jupiter:junit-jupiter:6.0.0' + testRuntimeOnly 'org.junit.platform:junit-platform-launcher' + testRuntimeOnly 'org.jetbrains.kotlin:kotlin-reflect:2.2.21' + testImplementation 'org.assertj:assertj-core:3.23.1' + testImplementation 'org.mockito:mockito-core:4.7.0' + testImplementation 'org.projectlombok:lombok:1.18.42' + + // FlatLaf - Modern Look and Feel + implementation 'com.formdev:flatlaf:3.4.1' + implementation 'com.formdev:flatlaf-intellij-themes:3.4.1' + + implementation 'com.google.guava:guava:24.1-jre' + implementation 'commons-codec:commons-codec:1.6' + implementation 'commons-io:commons-io:2.4' + implementation 'org.apache.commons:commons-lang3:3.1' + implementation 'org.apache.commons:commons-collections4:4.0' + implementation 'org.xerial:sqlite-jdbc:3.7.2' + implementation 'com.j256.ormlite:ormlite-core:4.48' + implementation 'com.j256.ormlite:ormlite-jdbc:4.48' + implementation 'com.google.protobuf:protobuf-java:4.31.1' + implementation 'com.google.protobuf:protobuf-java-util:4.31.1' + implementation 'org.slf4j:slf4j-api:2.0.9' + implementation 'org.slf4j:slf4j-log4j12:1.7.25' + implementation 'org.jline:jline:3.25.1' + implementation 'org.jline:jline-terminal-jansi:3.25.1' + implementation 'ch.qos.logback:logback-classic:1.4.14' + implementation 'com.googlecode.java-diff-utils:diffutils:1.2.1' + implementation 'com.google.re2j:re2j:1.1' + implementation 'com.github.mobius-software-ltd:mqtt-parser:parser-1.0.3' + implementation 'net.arnx:jsonic:1.3.0' + implementation 'org.json:json:20180813' + implementation 'com.fasterxml.jackson.dataformat:jackson-dataformat-cbor:2.10.0' + implementation 'com.fasterxml.jackson.core:jackson-databind:2.10.0' + implementation 'org.msgpack:jackson-dataformat-msgpack:0.8.18' + implementation 'org.bouncycastle:bcpkix-jdk15on:1.64' + implementation 'commons-net:commons-net:3.6' + implementation 'org.nanohttpd:nanohttpd:2.3.1' + implementation 'com.google.code.gson:gson:2.13.1' + implementation 'org.apache.commons:commons-math3:3.0' + implementation 'org.jfree:jfreechart:1.5.3' + implementation 'org.ejml:ejml-all:0.41' + implementation 'at.favre.lib:hkdf:1.1.0' + implementation 'org.eclipse.jetty.http2:http2-hpack:11.0.11' + implementation 'org.eclipse.jetty.http3:http3-qpack:11.0.11' + implementation 'com.github.docker-java:docker-java:3.3.0' + implementation 'com.github.docker-java:docker-java-transport-httpclient5:3.3.0' + implementation 'org.apache.commons:commons-compress:1.28.0' + implementation 'com.github.luben:zstd-jni:1.5.6-3' + implementation 'org.brotli:dec:0.1.2' + implementation 'dnsjava:dnsjava:3.6.4' + implementation files('libs/agent15.jar') + implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8" + implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:1.8.1" + implementation "io.arrow-kt:arrow-core:2.1.2" + + izpack 'org.codehaus.izpack:izpack-dist:5.1.3' + + // load additional Internal modules if it exists + eachInternalEntry('libraries.gradle') { dir, lib -> implementation lib } +} + +licenseReport { + outputDir = "$buildDir/reports/licenses" + configurations = ['runtimeClasspath'] +} + +tasks.withType(JavaCompile) { + options.encoding = "UTF-8" +} + +tasks.withType(Test) { + systemProperty "file.encoding", "UTF-8" +} + +test { + useJUnitPlatform() +} + +/** + * 内部ディレクトリ配下に存在する filename の内容を Eval.me で評価し、 + * 各エントリと元ディレクトリを action(dir, entry) の形で渡す汎用イテレータ + */ +def eachInternalEntry(String filename, Closure action) { + ['dena/', 'denaN/', 'denaL/'].each { def dir -> + def f = file(dir + filename) + if (f.exists()) { + Eval.me(f.text).each { action(dir, it) } + } + } +} + +/** + * 内部ディレクトリ配下に存在する filename の内容を Eval.me で評価し、 + * 実在するソースディレクトリパスの一覧を返す + */ +def collectInternalSrcDirs(String filename) { + def result = [] + eachInternalEntry(filename) { dir, src -> + if (file(dir + src).exists()) { + result << dir + src + } + } + return result +} + +def spotlessTarget = { String pattern -> + fileTree('.') { + include pattern + // dena/ は対象に含めたい + exclude 'bin/**', 'build/**', '.gradle/**', 'denaN/**', 'denaL/**' + } +} + +spotless { + java { + target spotlessTarget('**/*.java') + + cleanthat() + googleJavaFormat() + + eclipse().configFile('eclipse-format-settings.xml') + + formatAnnotations() + } + + kotlin { + target spotlessTarget('**/*.kt') + + ktfmt().googleStyle() + trimTrailingWhitespace() + endWithNewline() + } + + groovy { + target spotlessTarget('**/*.gradle') + + greclipse() + leadingTabsToSpaces(2) + trimTrailingWhitespace() + endWithNewline() + } + + flexmark { + target spotlessTarget('**/*.md') + + flexmark() + } +} + +application { + mainClass = "packetproxy.PacketProxy" +} + +def shell(String command) { + ["sh", "-c", command].execute().waitForProcessOutput(System.out, System.err) +} + +def gitVersion = "git describe --tags --abbrev=0".execute().text.replace("\n", "") +new File("${projectDir}/src/main/resources/version").text = gitVersion + +project.ext { + nameInstaller = "PacketProxy-${gitVersion}-Installer.jar" + nameMacInstallApp = "PacketProxy-${gitVersion}-Installer-Mac.app" + nameMacRelease = "PacketProxy-${gitVersion}-Installer-Mac.zip" + nameMacSignedReleaseJPackage = "PacketProxy-${gitVersion}.dmg" + nameMacSignedRelease = "PacketProxy-${gitVersion}-Installer-Mac-Signed.dmg" + nameWin32Release = "PacketProxy-${gitVersion}-Installer-Win32.jar" + nameWin64Release = "PacketProxy-${gitVersion}-Installer-Win64.jar" + nameLinuxReleaseDir = "PacketProxy-${gitVersion}-Linux" + nameLinuxRelease = "PacketProxy-${gitVersion}-Installer-Linux.jar" + // path + pathInstaller = "${buildDir}/distributions/${nameInstaller}" + pathWorkDir = "${buildDir}/distributions" + // Mac + pathMacWorkDir = "${buildDir}/distributions/mac" + pathMacTarget = "${pathMacWorkDir}/target" + pathMacInstaller = "${pathMacWorkDir}/${nameInstaller}" + pathMacInstallApp = "${pathMacWorkDir}/${nameMacInstallApp}" + pathMacRelease = "${pathMacWorkDir}/${nameMacRelease}" + pathMacSignedReleaseJPackage = "${pathMacWorkDir}/${nameMacSignedReleaseJPackage}" + pathMacSignedRelease = "${pathMacWorkDir}/${nameMacSignedRelease}" + // Win32 + pathWin32WorkDir = "${buildDir}/distributions/win32" + pathWin32Target = "${pathWin32WorkDir}/target" + pathWin32Installer = "${pathWin32WorkDir}/${nameInstaller}" + pathWin32Release = "${pathWin32WorkDir}/${nameWin32Release}" + // Win64 + pathWin64WorkDir = "${buildDir}/distributions/win64" + pathWin64Target = "${pathWin64WorkDir}/target" + pathWin64Installer = "${pathWin64WorkDir}/${nameInstaller}" + pathWin64Release = "${pathWin64WorkDir}/${nameWin64Release}" + // Linux + pathLinuxWorkDir = "${buildDir}/distributions/Linux" + pathLinuxTarget = "${pathLinuxWorkDir}/target" + pathLinuxInstaller = "${pathLinuxWorkDir}/${nameInstaller}" + pathLinuxReleaseDir = "${pathLinuxWorkDir}/${nameLinuxReleaseDir}" + pathLinuxRelease = "${pathLinuxWorkDir}/${nameLinuxRelease}" +} + +project.ext { + appleId = "test@example.com" + applePasswd = "xxxx-xxxx-xxxx-xxxx" + signedKey = "Developer ID Application: YYYYYYYY (ZZZZZZZZ)" + teamId = "ZZZZZZZZ" +} + +eclipse { + classpath { + file { + whenMerged { + def jre = entries.find { it.path.contains 'org.eclipse.jdt.launching.JRE_CONTAINER' } + jre.accessRules.add(new AccessRule('accessible', 'com/**')) + jre.accessRules.add(new AccessRule('accessible', 'sun/**')) + } + } + } +} + +sourceSets { + main { + java { + srcDirs = ['src/main/java/core'] + collectInternalSrcDirs('sources.gradle') + } + resources { + srcDirs = ['src/main/resources'] + collectInternalSrcDirs('resources.gradle') + } + } + test { + java { + srcDirs = [ + 'src/test/java', + 'src/test/kotlin' + ] + collectInternalSrcDirs('tests.gradle') + } + } +} + +jmh { + fork = 2 +} + +jar { + duplicatesStrategy = DuplicatesStrategy.INCLUDE + doFirst { + def serviceDir = file("${buildDir}/META-INF/services") + serviceDir.deleteDir() + serviceDir.mkdirs() + for (file in configurations.runtimeClasspath) { + zipTree(file).matching { include 'META-INF/services/*' }.each { f -> + new File(serviceDir, f.name) << f.getText("UTF-8") << "\n" + } + } + } + manifest { + attributes( + "Main-Class": "packetproxy/PacketProxy", + "Class-Path": configurations.runtimeClasspath.collect { it.getName() }.join(' ') + ) + } + from { + configurations.runtimeClasspath.collect { + it.isDirectory() ? it : zipTree(it).matching { + exclude "META-INF/**" + } + } + } + from { + fileTree(buildDir).matching { + include 'META-INF/services/*' + } + } +} + +task prepareJPackage(dependsOn: "jar") { + doLast { + def workDir = "${project.ext.pathMacWorkDir}" + delete "${workDir}" + new File("${workDir}").mkdirs() + def jdkUrl = "https://corretto.aws/downloads/resources/17.0.15.6.1/amazon-corretto-17.0.15.6.1-macosx-x64.tar.gz" + def destFile = file("${workDir}/OpenJDK17.tar.gz") + if (!destFile.exists()) { + ant.get(src: jdkUrl, dest: destFile, verbose: true) + } + copy { + from tarTree(resources.gzip("${workDir}/OpenJDK17.tar.gz")) + into file("${workDir}/OpenJDK17") + } + // create icon + copy { + from "${projectDir}/src/main/resources/gui/icon.png" + into "${workDir}/icon.iconset/" + } + shell("mv ${workDir}/icon.iconset/icon.png ${workDir}/icon.iconset/icon_256x256.png") + shell("iconutil -c icns --output ${workDir}/icon.icns ${workDir}/icon.iconset/") + } + onlyIf { Os.isFamily(Os.FAMILY_MAC) } +} + +class CreateWinTarget extends DefaultTask { + @Input + String workDir = '' + @Input + String targetDir = '' + @Input + String jdkUrl = '' + + @TaskAction + void start() { + project.delete { + delete "${workDir}" + } + new File("${workDir}").mkdirs() + new File("${targetDir}").mkdirs() + project.copy { + from "${project.buildDir}/reports/licenses/index.html" + into "${targetDir}/licenses" + } + project.copy { + from "${project.projectDir}/src/main/resources/gui/icon.ico" + into "${targetDir}" + rename('icon.ico', 'PacketProxy.ico') + } + project.copy { + from "${project.buildDir}/libs/PacketProxy.jar" + into "${targetDir}" + } + def destFile = project.file("${workDir}/OpenJDK17.zip") + if (!destFile.exists()) { + ant.get(src: jdkUrl, dest: destFile, verbose: true) + } + project.copy { + from project.zipTree("${workDir}/OpenJDK17.zip") + into project.file("${workDir}/OpenJDK17") + } + project.copy { + from project.file("${workDir}/OpenJDK17/jdk17.0.15_6") + into project.file("${targetDir}/OpenJDK17") + } + } +} + +task createWin64Target(type: CreateWinTarget, dependsOn: [ + 'jar', + 'generateLicenseReport' +]) { + workDir = project.ext.pathWin64WorkDir + targetDir = project.ext.pathWin64Target + jdkUrl = 'https://corretto.aws/downloads/resources/17.0.15.6.1/amazon-corretto-17.0.15.6.1-windows-x64-jdk.zip' +} + +task createLinuxTarget(dependsOn: [ + 'jar', + 'generateLicenseReport' +]) { + def workDir = project.ext.pathLinuxWorkDir + def targetDir = project.ext.pathLinuxTarget + def jdkUrl = 'https://corretto.aws/downloads/resources/17.0.15.6.1/amazon-corretto-17.0.15.6.1-linux-x64.tar.gz' + def buildDirectory = project.buildDir + def projectDirectory = project.projectDir + + doLast { + delete { + delete "${workDir}" + } + new File("${workDir}").mkdirs() + new File("${targetDir}").mkdirs() + copy { + from "${buildDirectory}/reports/licenses/index.html" + from "${projectDirectory}/LICENSES" + into "${targetDir}/share/packetproxy/licenses" + } + copy { + from "${projectDirectory}/src/main/resources/gui/icon.ico" + into "${targetDir}/share/packetproxy" + rename('icon.ico', 'PacketProxy.ico') + } + copy { + from "${buildDirectory}/libs/PacketProxy.jar" + into "${targetDir}/share/packetproxy" + } + def destFile = file("${workDir}/OpenJDK17.tar.gz") + if (!destFile.exists()) { + ant.get(src: jdkUrl, dest: destFile, verbose: true) + } + copy { + from tarTree(resources.gzip("${workDir}/OpenJDK17.tar.gz")) + into file("${workDir}/OpenJDK17") + } + copy { + from file("${workDir}/OpenJDK17/amazon-corretto-17.0.15.6.1-linux-x64") + into file("${targetDir}/share/packetproxy/OpenJDK17") + } + copy { + from "${projectDirectory}/installer/izpack/packetproxy" + into "${targetDir}/bin/" + } + } +} + +task preIzpack { + doLast { + copy { + from "${projectDir}/installer/izpack/shortcutSpec.xml" + into "${project.ext.pathWorkDir}" + } + copy { + from "${projectDir}/src/main/resources/gui/installer_leftside_image.png" + into "${project.ext.pathWorkDir}" + } + copy { + from "${projectDir}/src/main/resources/gui/installer_icon.png" + into "${project.ext.pathWorkDir}" + } + } +} + +task izpackWin64(type: CreateInstallerTask, dependsOn: [ + 'createWin64Target', + 'preIzpack' +]) { + baseDir = file(project.ext.pathWin64Target) + installFile = file("${projectDir}/installer/izpack/installer.xml") + outputFile = file(project.ext.pathWin64Installer) + compression = 'deflate' + compressionLevel = 9 + appProperties = ['app.group': 'PacketProxy', 'app.name': 'PacketProxy', 'app.title': 'PacketProxy', + 'app.version': gitVersion, 'app.subpath': "PacketProxy-${gitVersion}"] +} + +task izpackLinux(type: CreateInstallerTask, dependsOn: [ + 'createLinuxTarget', + 'preIzpack' +]) { + baseDir = file(project.ext.pathLinuxTarget) + installFile = file("${projectDir}/installer/izpack/installer.xml") + outputFile = file(project.ext.pathLinuxInstaller) + compression = 'deflate' + compressionLevel = 9 + appProperties = ['app.group': 'PacketProxy', 'app.name': 'PacketProxy', 'app.title': 'PacketProxy', + 'app.version': gitVersion, 'app.subpath': "PacketProxy-${gitVersion}"] +} + +task createMacJPackage(type: Exec, dependsOn: "prepareJPackage") { + workingDir "${projectDir}" + commandLine = [ + "/Library/Java/JavaVirtualMachines/amazon-corretto-17.jdk/Contents/Home/bin/jpackage", + "--verbose", + "-d", + "${project.ext.pathMacWorkDir}", + "-n", + "PacketProxy", + "-i", + "${buildDir}/libs/", + "--app-version", + gitVersion, + "--icon", + "${project.ext.pathMacWorkDir}/icon.icns", + "--main-jar", + "PacketProxy.jar", + "--mac-sign", + "--mac-signing-key-user-name", + "${project.ext.signedKey}" + ] + onlyIf { Os.isFamily(Os.FAMILY_MAC) } +} + +task resignMacJPackage(dependsOn: "createMacJPackage") { + doLast { + shell("hdiutil convert ${pathMacSignedReleaseJPackage} -format UDRW -o ${project.ext.pathMacWorkDir}/tmp.dmg") + shell("hdiutil mount ${project.ext.pathMacWorkDir}/tmp.dmg") + shell("rm -rf /tmp/packetproxy && mkdir /tmp/packetproxy && cd /tmp/packetproxy && jar xvf /Volumes/PacketProxy/PacketProxy.app/Contents/app/PacketProxy.jar") + shell("cd /tmp/packetproxy; for i in \$(find . -type f); do if file \$i | grep Mach-O > /dev/null; then codesign -fv --timestamp --options=runtime --deep -s \"${project.ext.signedKey}\" \$i; fi; done") + shell("cd /tmp/packetproxy; jar cvfm /Volumes/PacketProxy/PacketProxy.app/Contents/app/PacketProxy.jar META-INF/MANIFEST.MF *") + shell("cd /Volumes/PacketProxy/PacketProxy.app/Contents/; for i in \$(find . -type f); do if file \$i | grep Mach-O > /dev/null; then codesign -fv --timestamp --options=runtime --deep -s \"${project.ext.signedKey}\" \$i; fi; done") + shell("cd /Volumes/PacketProxy; codesign -fv --timestamp --options=runtime --deep -s \"${project.ext.signedKey}\" --entitlements ${projectDir}/assets/resign/entitlements.xml PacketProxy.app") + shell("hdiutil detach /Volumes/PacketProxy") + shell("rm ${pathMacSignedReleaseJPackage}; hdiutil convert ${project.ext.pathMacWorkDir}/tmp.dmg -format UDZO -o ${pathMacSignedReleaseJPackage}") + } + onlyIf { Os.isFamily(Os.FAMILY_MAC) } +} + +task createMacInstaller(type: Exec, dependsOn: "resignMacJPackage") { + workingDir "${projectDir}" + commandLine = [ + "mv", + project.ext.pathMacSignedReleaseJPackage, + project.ext.pathMacSignedRelease + ] + onlyIf { Os.isFamily(Os.FAMILY_MAC) } +} + +task notaryMacInstaller(type: Exec) { + workingDir "${projectDir}" + commandLine = [ + "xcrun", + "notarytool", + "submit", + "${project.ext.pathMacSignedRelease}", + "--apple-id", + "${project.ext.appleId}", + "--password", + "${project.ext.applePasswd}", + "--team-id", + "${project.ext.teamId}", + "--wait" + ] + onlyIf { Os.isFamily(Os.FAMILY_MAC) } +} + +task createWin64Release(type: Copy, dependsOn: 'izpackWin64') { + from "${project.ext.pathWin64Installer}" + into "${project.ext.pathWin64WorkDir}" + rename("${project.ext.nameInstaller}", "${project.ext.nameWin64Release}") +} + +task createLinuxInstaller(type: Copy, dependsOn: 'izpackLinux') { + from "${project.ext.pathLinuxInstaller}" + into "${project.ext.pathLinuxWorkDir}" + rename("${project.ext.nameInstaller}", "${project.ext.nameLinuxRelease}") +} + +task createMacRelease(dependsOn: 'createMacInstaller') { + /* do nothing */ +} + +task createWinRelease(dependsOn: 'createWin64Release') { + /* do nothing */ +} + +task createLinuxRelease(dependsOn: 'createLinuxInstaller') { + doLast { + file(project.ext.pathLinuxReleaseDir).mkdirs() + copy { + from "${projectDir}/installer/izpack/installer.sh" + from "${project.ext.pathLinuxInstaller}" + into "${project.ext.pathLinuxReleaseDir}" + } + shell("cd ${project.ext.pathLinuxWorkDir}; tar czvf ${project.ext.nameLinuxRelease} ${project.ext.nameLinuxReleaseDir}") + } +} + +task release(dependsOn: [ + 'createMacRelease', + 'createWinRelease', + 'createLinuxRelease' +]) { +} diff --git a/src/main/java/core/packetproxy/PacketProxy.java b/app/src/main/java/core/packetproxy/PacketProxy.java similarity index 100% rename from src/main/java/core/packetproxy/PacketProxy.java rename to app/src/main/java/core/packetproxy/PacketProxy.java diff --git a/build.gradle b/build.gradle index 87f7b2cc..cda5db66 100644 --- a/build.gradle +++ b/build.gradle @@ -1,145 +1,17 @@ -import com.bmuschko.gradle.izpack.CreateInstallerTask -import org.apache.tools.ant.taskdefs.condition.Os import org.gradle.plugins.ide.eclipse.model.AccessRule -buildscript { - dependencies { - classpath 'com.bmuschko:gradle-izpack-plugin:3.0' - } -} - plugins { - id 'java' - id 'application' id 'eclipse' - id 'me.champeau.jmh' version '0.7.3' - id 'com.bmuschko.izpack' version '3.2' - id 'com.github.jk1.dependency-license-report' version '2.5' - id "de.undercouch.download" version "5.6.0" - id "com.diffplug.spotless" version "7.1.0" - id 'org.jetbrains.kotlin.jvm' version '2.2.21' + id 'com.diffplug.spotless' version '7.1.0' } repositories { mavenCentral() - maven { url = 'https://jitpack.io' } -} - -dependencies { - compileOnly 'org.projectlombok:lombok:1.18.42' - annotationProcessor 'org.projectlombok:lombok:1.18.42' - testCompileOnly 'org.projectlombok:lombok:1.18.42' - testAnnotationProcessor 'org.projectlombok:lombok:1.18.42' - - testImplementation 'org.junit.jupiter:junit-jupiter:6.0.0' - testRuntimeOnly 'org.junit.platform:junit-platform-launcher' - testRuntimeOnly 'org.jetbrains.kotlin:kotlin-reflect:2.2.21' - testImplementation 'org.assertj:assertj-core:3.23.1' - testImplementation 'org.mockito:mockito-core:4.7.0' - testImplementation 'org.projectlombok:lombok:1.18.42' - - // FlatLaf - Modern Look and Feel - implementation 'com.formdev:flatlaf:3.4.1' - implementation 'com.formdev:flatlaf-intellij-themes:3.4.1' - - implementation 'com.google.guava:guava:24.1-jre' - implementation 'commons-codec:commons-codec:1.6' - implementation 'commons-io:commons-io:2.4' - implementation 'org.apache.commons:commons-lang3:3.1' - implementation 'org.apache.commons:commons-collections4:4.0' - implementation 'org.xerial:sqlite-jdbc:3.7.2' - implementation 'com.j256.ormlite:ormlite-core:4.48' - implementation 'com.j256.ormlite:ormlite-jdbc:4.48' - implementation 'com.google.protobuf:protobuf-java:4.31.1' - implementation 'com.google.protobuf:protobuf-java-util:4.31.1' - implementation 'org.slf4j:slf4j-api:2.0.9' - implementation 'org.slf4j:slf4j-log4j12:1.7.25' - implementation 'org.jline:jline:3.25.1' - implementation 'org.jline:jline-terminal-jansi:3.25.1' - implementation 'ch.qos.logback:logback-classic:1.4.14' - implementation 'com.googlecode.java-diff-utils:diffutils:1.2.1' - implementation 'com.google.re2j:re2j:1.1' - implementation 'com.github.mobius-software-ltd:mqtt-parser:parser-1.0.3' - implementation 'net.arnx:jsonic:1.3.0' - implementation 'org.json:json:20180813' - implementation 'com.fasterxml.jackson.dataformat:jackson-dataformat-cbor:2.10.0' - implementation 'com.fasterxml.jackson.core:jackson-databind:2.10.0' - implementation 'org.msgpack:jackson-dataformat-msgpack:0.8.18' - implementation 'org.bouncycastle:bcpkix-jdk15on:1.64' - implementation 'commons-net:commons-net:3.6' - implementation 'org.nanohttpd:nanohttpd:2.3.1' - implementation 'com.google.code.gson:gson:2.13.1' - implementation 'org.apache.commons:commons-math3:3.0' - implementation 'org.jfree:jfreechart:1.5.3' - implementation 'org.ejml:ejml-all:0.41' - implementation 'at.favre.lib:hkdf:1.1.0' - implementation 'org.eclipse.jetty.http2:http2-hpack:11.0.11' - implementation 'org.eclipse.jetty.http3:http3-qpack:11.0.11' - implementation 'com.github.docker-java:docker-java:3.3.0' - implementation 'com.github.docker-java:docker-java-transport-httpclient5:3.3.0' - implementation 'org.apache.commons:commons-compress:1.28.0' - implementation 'com.github.luben:zstd-jni:1.5.6-3' - implementation 'org.brotli:dec:0.1.2' - implementation 'dnsjava:dnsjava:3.6.4' - implementation files('libs/agent15.jar') - implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8" - implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:1.8.1" - implementation "io.arrow-kt:arrow-core:2.1.2" - - izpack 'org.codehaus.izpack:izpack-dist:5.1.3' - - // load additional Internal modules if it exists - eachInternalEntry('libraries.gradle') { dir, lib -> implementation lib } -} - -licenseReport { - outputDir = "$buildDir/reports/licenses" - configurations = ['runtimeClasspath'] -} - -tasks.withType(JavaCompile) { - options.encoding = "UTF-8" -} - -tasks.withType(Test) { - systemProperty "file.encoding", "UTF-8" -} - -test { - useJUnitPlatform() -} - -/** - * 内部ディレクトリ配下に存在する filename の内容を Eval.me で評価し、 - * 各エントリと元ディレクトリを action(dir, entry) の形で渡す汎用イテレータ - */ -def eachInternalEntry(String filename, Closure action) { - ['dena/', 'denaN/', 'denaL/'].each { def dir -> - def f = file(dir + filename) - if (f.exists()) { - Eval.me(f.text).each { action(dir, it) } - } - } -} - -/** - * 内部ディレクトリ配下に存在する filename の内容を Eval.me で評価し、 - * 実在するソースディレクトリパスの一覧を返す - */ -def collectInternalSrcDirs(String filename) { - def result = [] - eachInternalEntry(filename) { dir, src -> - if (file(dir + src).exists()) { - result << dir + src - } - } - return result } def spotlessTarget = { String pattern -> fileTree('.') { include pattern - // dena/ は対象に含めたい exclude 'bin/**', 'build/**', '.gradle/**', 'denaN/**', 'denaL/**' } } @@ -147,96 +19,30 @@ def spotlessTarget = { String pattern -> spotless { java { target spotlessTarget('**/*.java') - cleanthat() googleJavaFormat() - eclipse().configFile('eclipse-format-settings.xml') - formatAnnotations() } - kotlin { target spotlessTarget('**/*.kt') - ktfmt().googleStyle() trimTrailingWhitespace() endWithNewline() } - groovy { target spotlessTarget('**/*.gradle') - greclipse() leadingTabsToSpaces(2) trimTrailingWhitespace() endWithNewline() } - flexmark { target spotlessTarget('**/*.md') - flexmark() } } -application { - mainClass = "packetproxy.PacketProxy" -} - -def shell(String command) { - ["sh", "-c", command].execute().waitForProcessOutput(System.out, System.err) -} - -def gitVersion = "git describe --tags --abbrev=0".execute().text.replace("\n", "") -new File("${projectDir}/src/main/resources/version").text = gitVersion - -project.ext { - nameInstaller = "PacketProxy-${gitVersion}-Installer.jar" - nameMacInstallApp = "PacketProxy-${gitVersion}-Installer-Mac.app" - nameMacRelease = "PacketProxy-${gitVersion}-Installer-Mac.zip" - nameMacSignedReleaseJPackage = "PacketProxy-${gitVersion}.dmg" - nameMacSignedRelease = "PacketProxy-${gitVersion}-Installer-Mac-Signed.dmg" - nameWin32Release = "PacketProxy-${gitVersion}-Installer-Win32.jar" - nameWin64Release = "PacketProxy-${gitVersion}-Installer-Win64.jar" - nameLinuxReleaseDir = "PacketProxy-${gitVersion}-Linux" - nameLinuxRelease = "PacketProxy-${gitVersion}-Installer-Linux.jar" - // path - pathInstaller = "${buildDir}/distributions/${nameInstaller}" - pathWorkDir = "${buildDir}/distributions" - // Mac - pathMacWorkDir = "${buildDir}/distributions/mac" - pathMacTarget = "${pathMacWorkDir}/target" - pathMacInstaller = "${pathMacWorkDir}/${nameInstaller}" - pathMacInstallApp = "${pathMacWorkDir}/${nameMacInstallApp}" - pathMacRelease = "${pathMacWorkDir}/${nameMacRelease}" - pathMacSignedReleaseJPackage = "${pathMacWorkDir}/${nameMacSignedReleaseJPackage}" - pathMacSignedRelease = "${pathMacWorkDir}/${nameMacSignedRelease}" - // Win32 - pathWin32WorkDir = "${buildDir}/distributions/win32" - pathWin32Target = "${pathWin32WorkDir}/target" - pathWin32Installer = "${pathWin32WorkDir}/${nameInstaller}" - pathWin32Release = "${pathWin32WorkDir}/${nameWin32Release}" - // Win64 - pathWin64WorkDir = "${buildDir}/distributions/win64" - pathWin64Target = "${pathWin64WorkDir}/target" - pathWin64Installer = "${pathWin64WorkDir}/${nameInstaller}" - pathWin64Release = "${pathWin64WorkDir}/${nameWin64Release}" - // Linux - pathLinuxWorkDir = "${buildDir}/distributions/Linux" - pathLinuxTarget = "${pathLinuxWorkDir}/target" - pathLinuxInstaller = "${pathLinuxWorkDir}/${nameInstaller}" - pathLinuxReleaseDir = "${pathLinuxWorkDir}/${nameLinuxReleaseDir}" - pathLinuxRelease = "${pathLinuxWorkDir}/${nameLinuxRelease}" -} - -project.ext { - appleId = "test@example.com" - applePasswd = "xxxx-xxxx-xxxx-xxxx" - signedKey = "Developer ID Application: YYYYYYYY (ZZZZZZZZ)" - teamId = "ZZZZZZZZ" -} - eclipse { classpath { file { @@ -249,332 +55,21 @@ eclipse { } } -sourceSets { - main { - java { - srcDirs = ['src/main/java/core'] + collectInternalSrcDirs('sources.gradle') - } - resources { - srcDirs = ['src/main/resources'] + collectInternalSrcDirs('resources.gradle') - } - } - test { - java { - srcDirs = [ - 'src/test/java', - 'src/test/kotlin' - ] + collectInternalSrcDirs('tests.gradle') - } - } +tasks.register('test') { + dependsOn subprojects.collect { it.tasks.named('test') } } -jmh { - fork = 2 +tasks.register('run') { + dependsOn ':app:run' } -jar { - duplicatesStrategy = DuplicatesStrategy.INCLUDE - doFirst { - def serviceDir = file("${buildDir}/META-INF/services") - serviceDir.deleteDir() - serviceDir.mkdirs() - for (file in configurations.runtimeClasspath) { - zipTree(file).matching { include 'META-INF/services/*' }.each { f -> - new File(serviceDir, f.name) << f.getText("UTF-8") << "\n" - } - } - } - manifest { - attributes( - "Main-Class": "packetproxy/PacketProxy", - "Class-Path": configurations.runtimeClasspath.collect { it.getName() }.join(' ') - ) - } - from { - configurations.runtimeClasspath.collect { - it.isDirectory() ? it : zipTree(it).matching { - exclude "META-INF/**" - } - } - } - from { - fileTree(buildDir).matching { - include 'META-INF/services/*' - } - } -} - -task prepareJPackage(dependsOn: "jar") { - doLast { - def workDir = "${project.ext.pathMacWorkDir}" - delete "${workDir}" - new File("${workDir}").mkdirs() - def jdkUrl = "https://corretto.aws/downloads/resources/17.0.15.6.1/amazon-corretto-17.0.15.6.1-macosx-x64.tar.gz" - def destFile = file("${workDir}/OpenJDK17.tar.gz") - if (!destFile.exists()) { - ant.get(src: jdkUrl, dest: destFile, verbose: true) - } - copy { - from tarTree(resources.gzip("${workDir}/OpenJDK17.tar.gz")) - into file("${workDir}/OpenJDK17") - } - // create icon - copy { - from "${projectDir}/src/main/resources/gui/icon.png" - into "${workDir}/icon.iconset/" - } - shell("mv ${workDir}/icon.iconset/icon.png ${workDir}/icon.iconset/icon_256x256.png") - shell("iconutil -c icns --output ${workDir}/icon.icns ${workDir}/icon.iconset/") - } - onlyIf { Os.isFamily(Os.FAMILY_MAC) } -} - -class CreateWinTarget extends DefaultTask { - @Input - String workDir = '' - @Input - String targetDir = '' - @Input - String jdkUrl = '' - - @TaskAction - void start() { - project.delete { - delete "${workDir}" - } - new File("${workDir}").mkdirs() - new File("${targetDir}").mkdirs() - project.copy { - from "${project.buildDir}/reports/licenses/index.html" - into "${targetDir}/licenses" - } - project.copy { - from "${project.projectDir}/src/main/resources/gui/icon.ico" - into "${targetDir}" - rename('icon.ico', 'PacketProxy.ico') - } - project.copy { - from "${project.buildDir}/libs/PacketProxy.jar" - into "${targetDir}" - } - def destFile = project.file("${workDir}/OpenJDK17.zip") - if (!destFile.exists()) { - ant.get(src: jdkUrl, dest: destFile, verbose: true) - } - project.copy { - from project.zipTree("${workDir}/OpenJDK17.zip") - into project.file("${workDir}/OpenJDK17") - } - project.copy { - from project.file("${workDir}/OpenJDK17/jdk17.0.15_6") - into project.file("${targetDir}/OpenJDK17") - } - } -} - -task createWin64Target(type: CreateWinTarget, dependsOn: [ - 'jar', - 'generateLicenseReport' -]) { - workDir = project.ext.pathWin64WorkDir - targetDir = project.ext.pathWin64Target - jdkUrl = 'https://corretto.aws/downloads/resources/17.0.15.6.1/amazon-corretto-17.0.15.6.1-windows-x64-jdk.zip' -} - -task createLinuxTarget(dependsOn: [ - 'jar', - 'generateLicenseReport' -]) { - def workDir = project.ext.pathLinuxWorkDir - def targetDir = project.ext.pathLinuxTarget - def jdkUrl = 'https://corretto.aws/downloads/resources/17.0.15.6.1/amazon-corretto-17.0.15.6.1-linux-x64.tar.gz' - def buildDirectory = project.buildDir - def projectDirectory = project.projectDir - - doLast { - delete { - delete "${workDir}" - } - new File("${workDir}").mkdirs() - new File("${targetDir}").mkdirs() - copy { - from "${buildDirectory}/reports/licenses/index.html" - from "${projectDirectory}/LICENSES" - into "${targetDir}/share/packetproxy/licenses" - } - copy { - from "${projectDirectory}/src/main/resources/gui/icon.ico" - into "${targetDir}/share/packetproxy" - rename('icon.ico', 'PacketProxy.ico') - } - copy { - from "${buildDirectory}/libs/PacketProxy.jar" - into "${targetDir}/share/packetproxy" - } - def destFile = file("${workDir}/OpenJDK17.tar.gz") - if (!destFile.exists()) { - ant.get(src: jdkUrl, dest: destFile, verbose: true) - } - copy { - from tarTree(resources.gzip("${workDir}/OpenJDK17.tar.gz")) - into file("${workDir}/OpenJDK17") - } - copy { - from file("${workDir}/OpenJDK17/amazon-corretto-17.0.15.6.1-linux-x64") - into file("${targetDir}/share/packetproxy/OpenJDK17") - } - copy { - from "${projectDirectory}/installer/izpack/packetproxy" - into "${targetDir}/bin/" - } - } -} - -task preIzpack { - doLast { - copy { - from "${projectDir}/installer/izpack/shortcutSpec.xml" - into "${project.ext.pathWorkDir}" - } - copy { - from "${projectDir}/src/main/resources/gui/installer_leftside_image.png" - into "${project.ext.pathWorkDir}" - } - copy { - from "${projectDir}/src/main/resources/gui/installer_icon.png" - into "${project.ext.pathWorkDir}" - } - } -} - -task izpackWin64(type: CreateInstallerTask, dependsOn: [ - 'createWin64Target', - 'preIzpack' -]) { - baseDir = file(project.ext.pathWin64Target) - installFile = file("${projectDir}/installer/izpack/installer.xml") - outputFile = file(project.ext.pathWin64Installer) - compression = 'deflate' - compressionLevel = 9 - appProperties = ['app.group': 'PacketProxy', 'app.name': 'PacketProxy', 'app.title': 'PacketProxy', - 'app.version': gitVersion, 'app.subpath': "PacketProxy-${gitVersion}"] -} - -task izpackLinux(type: CreateInstallerTask, dependsOn: [ - 'createLinuxTarget', - 'preIzpack' -]) { - baseDir = file(project.ext.pathLinuxTarget) - installFile = file("${projectDir}/installer/izpack/installer.xml") - outputFile = file(project.ext.pathLinuxInstaller) - compression = 'deflate' - compressionLevel = 9 - appProperties = ['app.group': 'PacketProxy', 'app.name': 'PacketProxy', 'app.title': 'PacketProxy', - 'app.version': gitVersion, 'app.subpath': "PacketProxy-${gitVersion}"] -} - -task createMacJPackage(type: Exec, dependsOn: "prepareJPackage") { - workingDir "${projectDir}" - commandLine = [ - "/Library/Java/JavaVirtualMachines/amazon-corretto-17.jdk/Contents/Home/bin/jpackage", - "--verbose", - "-d", - "${project.ext.pathMacWorkDir}", - "-n", - "PacketProxy", - "-i", - "${buildDir}/libs/", - "--app-version", - gitVersion, - "--icon", - "${project.ext.pathMacWorkDir}/icon.icns", - "--main-jar", - "PacketProxy.jar", - "--mac-sign", - "--mac-signing-key-user-name", - "${project.ext.signedKey}" - ] - onlyIf { Os.isFamily(Os.FAMILY_MAC) } -} - -task resignMacJPackage(dependsOn: "createMacJPackage") { - doLast { - shell("hdiutil convert ${pathMacSignedReleaseJPackage} -format UDRW -o ${project.ext.pathMacWorkDir}/tmp.dmg") - shell("hdiutil mount ${project.ext.pathMacWorkDir}/tmp.dmg") - shell("rm -rf /tmp/packetproxy && mkdir /tmp/packetproxy && cd /tmp/packetproxy && jar xvf /Volumes/PacketProxy/PacketProxy.app/Contents/app/PacketProxy.jar") - shell("cd /tmp/packetproxy; for i in \$(find . -type f); do if file \$i | grep Mach-O > /dev/null; then codesign -fv --timestamp --options=runtime --deep -s \"${project.ext.signedKey}\" \$i; fi; done") - shell("cd /tmp/packetproxy; jar cvfm /Volumes/PacketProxy/PacketProxy.app/Contents/app/PacketProxy.jar META-INF/MANIFEST.MF *") - shell("cd /Volumes/PacketProxy/PacketProxy.app/Contents/; for i in \$(find . -type f); do if file \$i | grep Mach-O > /dev/null; then codesign -fv --timestamp --options=runtime --deep -s \"${project.ext.signedKey}\" \$i; fi; done") - shell("cd /Volumes/PacketProxy; codesign -fv --timestamp --options=runtime --deep -s \"${project.ext.signedKey}\" --entitlements ${projectDir}/assets/resign/entitlements.xml PacketProxy.app") - shell("hdiutil detach /Volumes/PacketProxy") - shell("rm ${pathMacSignedReleaseJPackage}; hdiutil convert ${project.ext.pathMacWorkDir}/tmp.dmg -format UDZO -o ${pathMacSignedReleaseJPackage}") - } - onlyIf { Os.isFamily(Os.FAMILY_MAC) } -} - -task createMacInstaller(type: Exec, dependsOn: "resignMacJPackage") { - workingDir "${projectDir}" - commandLine = [ - "mv", - project.ext.pathMacSignedReleaseJPackage, - project.ext.pathMacSignedRelease - ] - onlyIf { Os.isFamily(Os.FAMILY_MAC) } -} - -task notaryMacInstaller(type: Exec) { - workingDir "${projectDir}" - commandLine = [ - "xcrun", - "notarytool", - "submit", - "${project.ext.pathMacSignedRelease}", - "--apple-id", - "${project.ext.appleId}", - "--password", - "${project.ext.applePasswd}", - "--team-id", - "${project.ext.teamId}", - "--wait" - ] - onlyIf { Os.isFamily(Os.FAMILY_MAC) } -} - -task createWin64Release(type: Copy, dependsOn: 'izpackWin64') { - from "${project.ext.pathWin64Installer}" - into "${project.ext.pathWin64WorkDir}" - rename("${project.ext.nameInstaller}", "${project.ext.nameWin64Release}") -} - -task createLinuxInstaller(type: Copy, dependsOn: 'izpackLinux') { - from "${project.ext.pathLinuxInstaller}" - into "${project.ext.pathLinuxWorkDir}" - rename("${project.ext.nameInstaller}", "${project.ext.nameLinuxRelease}") -} - -task createMacRelease(dependsOn: 'createMacInstaller') { - /* do nothing */ -} - -task createWinRelease(dependsOn: 'createWin64Release') { - /* do nothing */ -} - -task createLinuxRelease(dependsOn: 'createLinuxInstaller') { - doLast { - file(project.ext.pathLinuxReleaseDir).mkdirs() - copy { - from "${projectDir}/installer/izpack/installer.sh" - from "${project.ext.pathLinuxInstaller}" - into "${project.ext.pathLinuxReleaseDir}" - } - shell("cd ${project.ext.pathLinuxWorkDir}; tar czvf ${project.ext.nameLinuxRelease} ${project.ext.nameLinuxReleaseDir}") - } -} - -task release(dependsOn: [ +[ + 'release', 'createMacRelease', 'createWinRelease', 'createLinuxRelease' -]) { +].each { taskName -> + tasks.register(taskName) { + dependsOn ":app:${taskName}" + } } diff --git a/core/build.gradle b/core/build.gradle new file mode 100644 index 00000000..ba3d90e4 --- /dev/null +++ b/core/build.gradle @@ -0,0 +1,101 @@ +plugins { + id 'java-library' + id 'org.jetbrains.kotlin.jvm' + id 'me.champeau.jmh' +} + +apply from: rootProject.file('gradle/module-common.gradle') + +def gitVersion = 'git describe --tags --abbrev=0'.execute().text.replace('\n', '') +new File("${projectDir}/src/main/resources/version").text = gitVersion + +dependencies { + compileOnly 'org.projectlombok:lombok:1.18.42' + annotationProcessor 'org.projectlombok:lombok:1.18.42' + testCompileOnly 'org.projectlombok:lombok:1.18.42' + testAnnotationProcessor 'org.projectlombok:lombok:1.18.42' + + testImplementation 'org.junit.jupiter:junit-jupiter:6.0.0' + testRuntimeOnly 'org.junit.platform:junit-platform-launcher' + testRuntimeOnly 'org.jetbrains.kotlin:kotlin-reflect:2.2.21' + testImplementation 'org.assertj:assertj-core:3.23.1' + testImplementation 'org.mockito:mockito-core:4.7.0' + testImplementation 'com.tngtech.archunit:archunit-junit5:1.4.1' + testImplementation 'org.ejml:ejml-all:0.41' + + api 'com.google.guava:guava:24.1-jre' + api 'commons-codec:commons-codec:1.6' + api 'commons-io:commons-io:2.4' + api 'org.apache.commons:commons-lang3:3.1' + api 'org.apache.commons:commons-collections4:4.0' + api 'org.xerial:sqlite-jdbc:3.7.2' + api 'com.j256.ormlite:ormlite-core:4.48' + api 'com.j256.ormlite:ormlite-jdbc:4.48' + api 'com.google.protobuf:protobuf-java:4.31.1' + api 'com.google.protobuf:protobuf-java-util:4.31.1' + api 'org.jline:jline:3.25.1' + api 'org.jline:jline-terminal-jansi:3.25.1' + api 'org.slf4j:slf4j-api:2.0.9' + api 'org.slf4j:slf4j-log4j12:1.7.25' + api 'ch.qos.logback:logback-classic:1.4.14' + api 'com.googlecode.java-diff-utils:diffutils:1.2.1' + api 'com.google.re2j:re2j:1.1' + api 'com.github.mobius-software-ltd:mqtt-parser:parser-1.0.3' + api 'net.arnx:jsonic:1.3.0' + api 'org.json:json:20180813' + api 'com.fasterxml.jackson.dataformat:jackson-dataformat-cbor:2.10.0' + api 'com.fasterxml.jackson.core:jackson-databind:2.10.0' + api 'org.msgpack:jackson-dataformat-msgpack:0.8.18' + api 'org.bouncycastle:bcpkix-jdk15on:1.64' + api 'commons-net:commons-net:3.6' + api 'org.nanohttpd:nanohttpd:2.3.1' + api 'com.google.code.gson:gson:2.13.1' + api 'org.apache.commons:commons-math3:3.0' + api 'org.ejml:ejml-all:0.41' + api 'at.favre.lib:hkdf:1.1.0' + api 'org.eclipse.jetty.http2:http2-hpack:11.0.11' + api 'org.eclipse.jetty.http3:http3-qpack:11.0.11' + api 'com.github.docker-java:docker-java:3.3.0' + api 'com.github.docker-java:docker-java-transport-httpclient5:3.3.0' + api 'org.apache.commons:commons-compress:1.28.0' + api 'com.github.luben:zstd-jni:1.5.6-3' + api 'org.brotli:dec:0.1.2' + api 'dnsjava:dnsjava:3.6.4' + api files("${rootProject.projectDir}/libs/agent15.jar") + api 'org.jetbrains.kotlin:kotlin-stdlib-jdk8' + api 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.8.1' + api 'io.arrow-kt:arrow-core:2.1.2' + + eachInternalEntry('libraries.gradle') { dir, lib -> api lib } +} + +sourceSets { + main { + java { + srcDirs = ['src/main/java/core'] + collectInternalSrcDirs('sources.gradle') + } + resources { + srcDirs = ['src/main/resources'] + collectInternalSrcDirs('resources.gradle') + } + } + test { + java { + srcDirs = ['src/test/java'] + collectInternalSrcDirs('tests.gradle') + } + kotlin { + srcDirs = ['src/test/kotlin'] + } + resources { + srcDirs = ['src/test/resources'] + } + } + jmh { + java { + srcDirs = ['src/jmh/java'] + } + } +} + +jmh { + fork = 2 +} diff --git a/src/jmh/java/packetproxy/common/StringSearchBenchmark.java b/core/src/jmh/java/packetproxy/common/StringSearchBenchmark.java similarity index 100% rename from src/jmh/java/packetproxy/common/StringSearchBenchmark.java rename to core/src/jmh/java/packetproxy/common/StringSearchBenchmark.java diff --git a/src/main/java/core/packetproxy/CertCacheManager.java b/core/src/main/java/core/packetproxy/CertCacheManager.java similarity index 100% rename from src/main/java/core/packetproxy/CertCacheManager.java rename to core/src/main/java/core/packetproxy/CertCacheManager.java diff --git a/src/main/java/core/packetproxy/DNSSpoofingIPGetter.java b/core/src/main/java/core/packetproxy/DNSSpoofingIPGetter.java similarity index 100% rename from src/main/java/core/packetproxy/DNSSpoofingIPGetter.java rename to core/src/main/java/core/packetproxy/DNSSpoofingIPGetter.java diff --git a/src/main/java/core/packetproxy/Duplex.java b/core/src/main/java/core/packetproxy/Duplex.java similarity index 100% rename from src/main/java/core/packetproxy/Duplex.java rename to core/src/main/java/core/packetproxy/Duplex.java diff --git a/src/main/java/core/packetproxy/DuplexAsync.java b/core/src/main/java/core/packetproxy/DuplexAsync.java similarity index 100% rename from src/main/java/core/packetproxy/DuplexAsync.java rename to core/src/main/java/core/packetproxy/DuplexAsync.java diff --git a/src/main/java/core/packetproxy/DuplexFactory.java b/core/src/main/java/core/packetproxy/DuplexFactory.java similarity index 100% rename from src/main/java/core/packetproxy/DuplexFactory.java rename to core/src/main/java/core/packetproxy/DuplexFactory.java diff --git a/src/main/java/core/packetproxy/DuplexManager.java b/core/src/main/java/core/packetproxy/DuplexManager.java similarity index 100% rename from src/main/java/core/packetproxy/DuplexManager.java rename to core/src/main/java/core/packetproxy/DuplexManager.java diff --git a/src/main/java/core/packetproxy/DuplexSync.java b/core/src/main/java/core/packetproxy/DuplexSync.java similarity index 100% rename from src/main/java/core/packetproxy/DuplexSync.java rename to core/src/main/java/core/packetproxy/DuplexSync.java diff --git a/src/main/java/core/packetproxy/EncoderManager.java b/core/src/main/java/core/packetproxy/EncoderManager.java similarity index 100% rename from src/main/java/core/packetproxy/EncoderManager.java rename to core/src/main/java/core/packetproxy/EncoderManager.java diff --git a/src/main/java/core/packetproxy/Listen.java b/core/src/main/java/core/packetproxy/Listen.java similarity index 100% rename from src/main/java/core/packetproxy/Listen.java rename to core/src/main/java/core/packetproxy/Listen.java diff --git a/src/main/java/core/packetproxy/ListenPortManager.java b/core/src/main/java/core/packetproxy/ListenPortManager.java similarity index 100% rename from src/main/java/core/packetproxy/ListenPortManager.java rename to core/src/main/java/core/packetproxy/ListenPortManager.java diff --git a/src/main/java/core/packetproxy/OpenVPN.java b/core/src/main/java/core/packetproxy/OpenVPN.java similarity index 100% rename from src/main/java/core/packetproxy/OpenVPN.java rename to core/src/main/java/core/packetproxy/OpenVPN.java diff --git a/src/main/java/core/packetproxy/PrivateDNS.java b/core/src/main/java/core/packetproxy/PrivateDNS.java similarity index 100% rename from src/main/java/core/packetproxy/PrivateDNS.java rename to core/src/main/java/core/packetproxy/PrivateDNS.java diff --git a/src/main/java/core/packetproxy/PrivateDNSClient.java b/core/src/main/java/core/packetproxy/PrivateDNSClient.java similarity index 100% rename from src/main/java/core/packetproxy/PrivateDNSClient.java rename to core/src/main/java/core/packetproxy/PrivateDNSClient.java diff --git a/src/main/java/core/packetproxy/PrivateDnsResponseBuilder.java b/core/src/main/java/core/packetproxy/PrivateDnsResponseBuilder.java similarity index 100% rename from src/main/java/core/packetproxy/PrivateDnsResponseBuilder.java rename to core/src/main/java/core/packetproxy/PrivateDnsResponseBuilder.java diff --git a/src/main/java/core/packetproxy/Proxy.java b/core/src/main/java/core/packetproxy/Proxy.java similarity index 100% rename from src/main/java/core/packetproxy/Proxy.java rename to core/src/main/java/core/packetproxy/Proxy.java diff --git a/src/main/java/core/packetproxy/ProxyForward.java b/core/src/main/java/core/packetproxy/ProxyForward.java similarity index 100% rename from src/main/java/core/packetproxy/ProxyForward.java rename to core/src/main/java/core/packetproxy/ProxyForward.java diff --git a/src/main/java/core/packetproxy/ProxyHttp.java b/core/src/main/java/core/packetproxy/ProxyHttp.java similarity index 100% rename from src/main/java/core/packetproxy/ProxyHttp.java rename to core/src/main/java/core/packetproxy/ProxyHttp.java diff --git a/src/main/java/core/packetproxy/ProxyHttpTransparent.java b/core/src/main/java/core/packetproxy/ProxyHttpTransparent.java similarity index 100% rename from src/main/java/core/packetproxy/ProxyHttpTransparent.java rename to core/src/main/java/core/packetproxy/ProxyHttpTransparent.java diff --git a/src/main/java/core/packetproxy/ProxyQuicForward.java b/core/src/main/java/core/packetproxy/ProxyQuicForward.java similarity index 100% rename from src/main/java/core/packetproxy/ProxyQuicForward.java rename to core/src/main/java/core/packetproxy/ProxyQuicForward.java diff --git a/src/main/java/core/packetproxy/ProxyQuicTransparent.java b/core/src/main/java/core/packetproxy/ProxyQuicTransparent.java similarity index 100% rename from src/main/java/core/packetproxy/ProxyQuicTransparent.java rename to core/src/main/java/core/packetproxy/ProxyQuicTransparent.java diff --git a/src/main/java/core/packetproxy/ProxySSLForward.java b/core/src/main/java/core/packetproxy/ProxySSLForward.java similarity index 100% rename from src/main/java/core/packetproxy/ProxySSLForward.java rename to core/src/main/java/core/packetproxy/ProxySSLForward.java diff --git a/src/main/java/core/packetproxy/ProxySSLTransparent.java b/core/src/main/java/core/packetproxy/ProxySSLTransparent.java similarity index 100% rename from src/main/java/core/packetproxy/ProxySSLTransparent.java rename to core/src/main/java/core/packetproxy/ProxySSLTransparent.java diff --git a/src/main/java/core/packetproxy/ProxyUDPForward.java b/core/src/main/java/core/packetproxy/ProxyUDPForward.java similarity index 100% rename from src/main/java/core/packetproxy/ProxyUDPForward.java rename to core/src/main/java/core/packetproxy/ProxyUDPForward.java diff --git a/src/main/java/core/packetproxy/ProxyXmppSSLForward.java b/core/src/main/java/core/packetproxy/ProxyXmppSSLForward.java similarity index 100% rename from src/main/java/core/packetproxy/ProxyXmppSSLForward.java rename to core/src/main/java/core/packetproxy/ProxyXmppSSLForward.java diff --git a/src/main/java/core/packetproxy/Simplex.java b/core/src/main/java/core/packetproxy/Simplex.java similarity index 100% rename from src/main/java/core/packetproxy/Simplex.java rename to core/src/main/java/core/packetproxy/Simplex.java diff --git a/src/main/java/core/packetproxy/VulCheckerManager.java b/core/src/main/java/core/packetproxy/VulCheckerManager.java similarity index 100% rename from src/main/java/core/packetproxy/VulCheckerManager.java rename to core/src/main/java/core/packetproxy/VulCheckerManager.java diff --git a/src/main/java/core/packetproxy/common/ARC4.java b/core/src/main/java/core/packetproxy/common/ARC4.java similarity index 100% rename from src/main/java/core/packetproxy/common/ARC4.java rename to core/src/main/java/core/packetproxy/common/ARC4.java diff --git a/src/main/java/core/packetproxy/common/AmazonLexV2.java b/core/src/main/java/core/packetproxy/common/AmazonLexV2.java similarity index 100% rename from src/main/java/core/packetproxy/common/AmazonLexV2.java rename to core/src/main/java/core/packetproxy/common/AmazonLexV2.java diff --git a/src/main/java/core/packetproxy/common/Binary.java b/core/src/main/java/core/packetproxy/common/Binary.java similarity index 100% rename from src/main/java/core/packetproxy/common/Binary.java rename to core/src/main/java/core/packetproxy/common/Binary.java diff --git a/src/main/java/core/packetproxy/common/BinaryBuffer.java b/core/src/main/java/core/packetproxy/common/BinaryBuffer.java similarity index 100% rename from src/main/java/core/packetproxy/common/BinaryBuffer.java rename to core/src/main/java/core/packetproxy/common/BinaryBuffer.java diff --git a/src/main/java/core/packetproxy/common/BoyerMoore.java b/core/src/main/java/core/packetproxy/common/BoyerMoore.java similarity index 100% rename from src/main/java/core/packetproxy/common/BoyerMoore.java rename to core/src/main/java/core/packetproxy/common/BoyerMoore.java diff --git a/src/main/java/core/packetproxy/common/CamelCase.java b/core/src/main/java/core/packetproxy/common/CamelCase.java similarity index 100% rename from src/main/java/core/packetproxy/common/CamelCase.java rename to core/src/main/java/core/packetproxy/common/CamelCase.java diff --git a/src/main/java/core/packetproxy/common/ClientKeyManager.java b/core/src/main/java/core/packetproxy/common/ClientKeyManager.java similarity index 100% rename from src/main/java/core/packetproxy/common/ClientKeyManager.java rename to core/src/main/java/core/packetproxy/common/ClientKeyManager.java diff --git a/src/main/java/core/packetproxy/common/ConfigHttpServer.java b/core/src/main/java/core/packetproxy/common/ConfigHttpServer.java similarity index 100% rename from src/main/java/core/packetproxy/common/ConfigHttpServer.java rename to core/src/main/java/core/packetproxy/common/ConfigHttpServer.java diff --git a/src/main/java/core/packetproxy/common/ConfigIO.java b/core/src/main/java/core/packetproxy/common/ConfigIO.java similarity index 100% rename from src/main/java/core/packetproxy/common/ConfigIO.java rename to core/src/main/java/core/packetproxy/common/ConfigIO.java diff --git a/src/main/java/core/packetproxy/common/Connection.java b/core/src/main/java/core/packetproxy/common/Connection.java similarity index 100% rename from src/main/java/core/packetproxy/common/Connection.java rename to core/src/main/java/core/packetproxy/common/Connection.java diff --git a/src/main/java/core/packetproxy/common/CryptUtils.java b/core/src/main/java/core/packetproxy/common/CryptUtils.java similarity index 100% rename from src/main/java/core/packetproxy/common/CryptUtils.java rename to core/src/main/java/core/packetproxy/common/CryptUtils.java diff --git a/src/main/java/core/packetproxy/common/Deflate.java b/core/src/main/java/core/packetproxy/common/Deflate.java similarity index 100% rename from src/main/java/core/packetproxy/common/Deflate.java rename to core/src/main/java/core/packetproxy/common/Deflate.java diff --git a/src/main/java/core/packetproxy/common/Endpoint.java b/core/src/main/java/core/packetproxy/common/Endpoint.java similarity index 100% rename from src/main/java/core/packetproxy/common/Endpoint.java rename to core/src/main/java/core/packetproxy/common/Endpoint.java diff --git a/src/main/java/core/packetproxy/common/EndpointFactory.java b/core/src/main/java/core/packetproxy/common/EndpointFactory.java similarity index 100% rename from src/main/java/core/packetproxy/common/EndpointFactory.java rename to core/src/main/java/core/packetproxy/common/EndpointFactory.java diff --git a/src/main/java/core/packetproxy/common/FilterIO.java b/core/src/main/java/core/packetproxy/common/FilterIO.java similarity index 100% rename from src/main/java/core/packetproxy/common/FilterIO.java rename to core/src/main/java/core/packetproxy/common/FilterIO.java diff --git a/src/main/java/core/packetproxy/common/FontManager.java b/core/src/main/java/core/packetproxy/common/FontManager.java similarity index 100% rename from src/main/java/core/packetproxy/common/FontManager.java rename to core/src/main/java/core/packetproxy/common/FontManager.java diff --git a/src/main/java/core/packetproxy/common/GRPCMessage.java b/core/src/main/java/core/packetproxy/common/GRPCMessage.java similarity index 100% rename from src/main/java/core/packetproxy/common/GRPCMessage.java rename to core/src/main/java/core/packetproxy/common/GRPCMessage.java diff --git a/src/main/java/core/packetproxy/common/Hex.java b/core/src/main/java/core/packetproxy/common/Hex.java similarity index 100% rename from src/main/java/core/packetproxy/common/Hex.java rename to core/src/main/java/core/packetproxy/common/Hex.java diff --git a/src/main/java/core/packetproxy/common/JWT.java b/core/src/main/java/core/packetproxy/common/JWT.java similarity index 100% rename from src/main/java/core/packetproxy/common/JWT.java rename to core/src/main/java/core/packetproxy/common/JWT.java diff --git a/src/main/java/core/packetproxy/common/JWTBase64.java b/core/src/main/java/core/packetproxy/common/JWTBase64.java similarity index 100% rename from src/main/java/core/packetproxy/common/JWTBase64.java rename to core/src/main/java/core/packetproxy/common/JWTBase64.java diff --git a/src/main/java/core/packetproxy/common/JsonSyntaxHighlighter.java b/core/src/main/java/core/packetproxy/common/JsonSyntaxHighlighter.java similarity index 100% rename from src/main/java/core/packetproxy/common/JsonSyntaxHighlighter.java rename to core/src/main/java/core/packetproxy/common/JsonSyntaxHighlighter.java diff --git a/src/main/java/core/packetproxy/common/Logger.java b/core/src/main/java/core/packetproxy/common/Logger.java similarity index 100% rename from src/main/java/core/packetproxy/common/Logger.java rename to core/src/main/java/core/packetproxy/common/Logger.java diff --git a/src/main/java/core/packetproxy/common/MessagePack.java b/core/src/main/java/core/packetproxy/common/MessagePack.java similarity index 100% rename from src/main/java/core/packetproxy/common/MessagePack.java rename to core/src/main/java/core/packetproxy/common/MessagePack.java diff --git a/src/main/java/core/packetproxy/common/Parameter.java b/core/src/main/java/core/packetproxy/common/Parameter.java similarity index 100% rename from src/main/java/core/packetproxy/common/Parameter.java rename to core/src/main/java/core/packetproxy/common/Parameter.java diff --git a/src/main/java/core/packetproxy/common/PipeEndpoint.java b/core/src/main/java/core/packetproxy/common/PipeEndpoint.java similarity index 100% rename from src/main/java/core/packetproxy/common/PipeEndpoint.java rename to core/src/main/java/core/packetproxy/common/PipeEndpoint.java diff --git a/src/main/java/core/packetproxy/common/Protobuf3.java b/core/src/main/java/core/packetproxy/common/Protobuf3.java similarity index 100% rename from src/main/java/core/packetproxy/common/Protobuf3.java rename to core/src/main/java/core/packetproxy/common/Protobuf3.java diff --git a/src/main/java/core/packetproxy/common/Range.java b/core/src/main/java/core/packetproxy/common/Range.java similarity index 100% rename from src/main/java/core/packetproxy/common/Range.java rename to core/src/main/java/core/packetproxy/common/Range.java diff --git a/src/main/java/core/packetproxy/common/RawEndpoint.java b/core/src/main/java/core/packetproxy/common/RawEndpoint.java similarity index 100% rename from src/main/java/core/packetproxy/common/RawEndpoint.java rename to core/src/main/java/core/packetproxy/common/RawEndpoint.java diff --git a/src/main/java/core/packetproxy/common/RecentProjectsStore.java b/core/src/main/java/core/packetproxy/common/RecentProjectsStore.java similarity index 100% rename from src/main/java/core/packetproxy/common/RecentProjectsStore.java rename to core/src/main/java/core/packetproxy/common/RecentProjectsStore.java diff --git a/src/main/java/core/packetproxy/common/SSLCapabilities.java b/core/src/main/java/core/packetproxy/common/SSLCapabilities.java similarity index 100% rename from src/main/java/core/packetproxy/common/SSLCapabilities.java rename to core/src/main/java/core/packetproxy/common/SSLCapabilities.java diff --git a/src/main/java/core/packetproxy/common/SSLExplorer.java b/core/src/main/java/core/packetproxy/common/SSLExplorer.java similarity index 100% rename from src/main/java/core/packetproxy/common/SSLExplorer.java rename to core/src/main/java/core/packetproxy/common/SSLExplorer.java diff --git a/src/main/java/core/packetproxy/common/SSLSocketEndpoint.java b/core/src/main/java/core/packetproxy/common/SSLSocketEndpoint.java similarity index 100% rename from src/main/java/core/packetproxy/common/SSLSocketEndpoint.java rename to core/src/main/java/core/packetproxy/common/SSLSocketEndpoint.java diff --git a/src/main/java/core/packetproxy/common/SocketEndpoint.java b/core/src/main/java/core/packetproxy/common/SocketEndpoint.java similarity index 100% rename from src/main/java/core/packetproxy/common/SocketEndpoint.java rename to core/src/main/java/core/packetproxy/common/SocketEndpoint.java diff --git a/src/main/java/core/packetproxy/common/StringUtils.java b/core/src/main/java/core/packetproxy/common/StringUtils.java similarity index 100% rename from src/main/java/core/packetproxy/common/StringUtils.java rename to core/src/main/java/core/packetproxy/common/StringUtils.java diff --git a/src/main/java/core/packetproxy/common/TokenHttpServer.java b/core/src/main/java/core/packetproxy/common/TokenHttpServer.java similarity index 100% rename from src/main/java/core/packetproxy/common/TokenHttpServer.java rename to core/src/main/java/core/packetproxy/common/TokenHttpServer.java diff --git a/src/main/java/core/packetproxy/common/UDPConn.java b/core/src/main/java/core/packetproxy/common/UDPConn.java similarity index 100% rename from src/main/java/core/packetproxy/common/UDPConn.java rename to core/src/main/java/core/packetproxy/common/UDPConn.java diff --git a/src/main/java/core/packetproxy/common/UDPConnManager.java b/core/src/main/java/core/packetproxy/common/UDPConnManager.java similarity index 100% rename from src/main/java/core/packetproxy/common/UDPConnManager.java rename to core/src/main/java/core/packetproxy/common/UDPConnManager.java diff --git a/src/main/java/core/packetproxy/common/UDPServerSocket.java b/core/src/main/java/core/packetproxy/common/UDPServerSocket.java similarity index 100% rename from src/main/java/core/packetproxy/common/UDPServerSocket.java rename to core/src/main/java/core/packetproxy/common/UDPServerSocket.java diff --git a/src/main/java/core/packetproxy/common/UDPSocketEndpoint.java b/core/src/main/java/core/packetproxy/common/UDPSocketEndpoint.java similarity index 100% rename from src/main/java/core/packetproxy/common/UDPSocketEndpoint.java rename to core/src/main/java/core/packetproxy/common/UDPSocketEndpoint.java diff --git a/src/main/java/core/packetproxy/common/UniqueID.java b/core/src/main/java/core/packetproxy/common/UniqueID.java similarity index 100% rename from src/main/java/core/packetproxy/common/UniqueID.java rename to core/src/main/java/core/packetproxy/common/UniqueID.java diff --git a/src/main/java/core/packetproxy/common/Utils.java b/core/src/main/java/core/packetproxy/common/Utils.java similarity index 100% rename from src/main/java/core/packetproxy/common/Utils.java rename to core/src/main/java/core/packetproxy/common/Utils.java diff --git a/src/main/java/core/packetproxy/common/WrapEndpoint.java b/core/src/main/java/core/packetproxy/common/WrapEndpoint.java similarity index 100% rename from src/main/java/core/packetproxy/common/WrapEndpoint.java rename to core/src/main/java/core/packetproxy/common/WrapEndpoint.java diff --git a/src/main/java/core/packetproxy/controller/MainWindowController.java b/core/src/main/java/core/packetproxy/controller/MainWindowController.java similarity index 100% rename from src/main/java/core/packetproxy/controller/MainWindowController.java rename to core/src/main/java/core/packetproxy/controller/MainWindowController.java diff --git a/src/main/java/core/packetproxy/controller/PacketsController.java b/core/src/main/java/core/packetproxy/controller/PacketsController.java similarity index 100% rename from src/main/java/core/packetproxy/controller/PacketsController.java rename to core/src/main/java/core/packetproxy/controller/PacketsController.java diff --git a/src/main/java/core/packetproxy/controller/ResendController.java b/core/src/main/java/core/packetproxy/controller/ResendController.java similarity index 99% rename from src/main/java/core/packetproxy/controller/ResendController.java rename to core/src/main/java/core/packetproxy/controller/ResendController.java index 51ac4521..e7274f94 100644 --- a/src/main/java/core/packetproxy/controller/ResendController.java +++ b/core/src/main/java/core/packetproxy/controller/ResendController.java @@ -42,7 +42,8 @@ public class ResendController { private static ResendController instance; - private static volatile ResendProgressHandler progressHandler = (worker, packets) -> {}; + private static volatile ResendProgressHandler progressHandler = (worker, packets) -> { + }; private final ExecutorService executor = Executors.newCachedThreadPool(); public static void setProgressHandler(ResendProgressHandler handler) { @@ -125,7 +126,8 @@ protected void publish(OneShotPacket packet) { ResendController.notifyProgress(this, packet); } - public void process(List packets) {} + public void process(List packets) { + } public void runInBackground() { try { diff --git a/src/main/java/core/packetproxy/controller/ResendProgressHandler.java b/core/src/main/java/core/packetproxy/controller/ResendProgressHandler.java similarity index 100% rename from src/main/java/core/packetproxy/controller/ResendProgressHandler.java rename to core/src/main/java/core/packetproxy/controller/ResendProgressHandler.java diff --git a/src/main/java/core/packetproxy/controller/SinglePacketAttackController.java b/core/src/main/java/core/packetproxy/controller/SinglePacketAttackController.java similarity index 100% rename from src/main/java/core/packetproxy/controller/SinglePacketAttackController.java rename to core/src/main/java/core/packetproxy/controller/SinglePacketAttackController.java diff --git a/src/main/java/core/packetproxy/encode/EncodeAmazonLexV2.java b/core/src/main/java/core/packetproxy/encode/EncodeAmazonLexV2.java similarity index 100% rename from src/main/java/core/packetproxy/encode/EncodeAmazonLexV2.java rename to core/src/main/java/core/packetproxy/encode/EncodeAmazonLexV2.java diff --git a/src/main/java/core/packetproxy/encode/EncodeCBOR.java b/core/src/main/java/core/packetproxy/encode/EncodeCBOR.java similarity index 100% rename from src/main/java/core/packetproxy/encode/EncodeCBOR.java rename to core/src/main/java/core/packetproxy/encode/EncodeCBOR.java diff --git a/src/main/java/core/packetproxy/encode/EncodeFirebase.java b/core/src/main/java/core/packetproxy/encode/EncodeFirebase.java similarity index 100% rename from src/main/java/core/packetproxy/encode/EncodeFirebase.java rename to core/src/main/java/core/packetproxy/encode/EncodeFirebase.java diff --git a/src/main/java/core/packetproxy/encode/EncodeFirestore.java b/core/src/main/java/core/packetproxy/encode/EncodeFirestore.java similarity index 100% rename from src/main/java/core/packetproxy/encode/EncodeFirestore.java rename to core/src/main/java/core/packetproxy/encode/EncodeFirestore.java diff --git a/src/main/java/core/packetproxy/encode/EncodeGRPC.java b/core/src/main/java/core/packetproxy/encode/EncodeGRPC.java similarity index 100% rename from src/main/java/core/packetproxy/encode/EncodeGRPC.java rename to core/src/main/java/core/packetproxy/encode/EncodeGRPC.java diff --git a/src/main/java/core/packetproxy/encode/EncodeGRPCStreaming.java b/core/src/main/java/core/packetproxy/encode/EncodeGRPCStreaming.java similarity index 100% rename from src/main/java/core/packetproxy/encode/EncodeGRPCStreaming.java rename to core/src/main/java/core/packetproxy/encode/EncodeGRPCStreaming.java diff --git a/src/main/java/core/packetproxy/encode/EncodeGRPCWeb.java b/core/src/main/java/core/packetproxy/encode/EncodeGRPCWeb.java similarity index 100% rename from src/main/java/core/packetproxy/encode/EncodeGRPCWeb.java rename to core/src/main/java/core/packetproxy/encode/EncodeGRPCWeb.java diff --git a/src/main/java/core/packetproxy/encode/EncodeHTTP.java b/core/src/main/java/core/packetproxy/encode/EncodeHTTP.java similarity index 100% rename from src/main/java/core/packetproxy/encode/EncodeHTTP.java rename to core/src/main/java/core/packetproxy/encode/EncodeHTTP.java diff --git a/src/main/java/core/packetproxy/encode/EncodeHTTPBase.java b/core/src/main/java/core/packetproxy/encode/EncodeHTTPBase.java similarity index 100% rename from src/main/java/core/packetproxy/encode/EncodeHTTPBase.java rename to core/src/main/java/core/packetproxy/encode/EncodeHTTPBase.java diff --git a/src/main/java/core/packetproxy/encode/EncodeHTTPStreamingResponse.java b/core/src/main/java/core/packetproxy/encode/EncodeHTTPStreamingResponse.java similarity index 100% rename from src/main/java/core/packetproxy/encode/EncodeHTTPStreamingResponse.java rename to core/src/main/java/core/packetproxy/encode/EncodeHTTPStreamingResponse.java diff --git a/src/main/java/core/packetproxy/encode/EncodeHTTPWebSocket.java b/core/src/main/java/core/packetproxy/encode/EncodeHTTPWebSocket.java similarity index 100% rename from src/main/java/core/packetproxy/encode/EncodeHTTPWebSocket.java rename to core/src/main/java/core/packetproxy/encode/EncodeHTTPWebSocket.java diff --git a/src/main/java/core/packetproxy/encode/EncodeMQTT.java b/core/src/main/java/core/packetproxy/encode/EncodeMQTT.java similarity index 100% rename from src/main/java/core/packetproxy/encode/EncodeMQTT.java rename to core/src/main/java/core/packetproxy/encode/EncodeMQTT.java diff --git a/src/main/java/core/packetproxy/encode/EncodeMQTTWebSocket.java b/core/src/main/java/core/packetproxy/encode/EncodeMQTTWebSocket.java similarity index 100% rename from src/main/java/core/packetproxy/encode/EncodeMQTTWebSocket.java rename to core/src/main/java/core/packetproxy/encode/EncodeMQTTWebSocket.java diff --git a/src/main/java/core/packetproxy/encode/EncodeMsgPack.java b/core/src/main/java/core/packetproxy/encode/EncodeMsgPack.java similarity index 100% rename from src/main/java/core/packetproxy/encode/EncodeMsgPack.java rename to core/src/main/java/core/packetproxy/encode/EncodeMsgPack.java diff --git a/src/main/java/core/packetproxy/encode/EncodeProtobuf.java b/core/src/main/java/core/packetproxy/encode/EncodeProtobuf.java similarity index 100% rename from src/main/java/core/packetproxy/encode/EncodeProtobuf.java rename to core/src/main/java/core/packetproxy/encode/EncodeProtobuf.java diff --git a/src/main/java/core/packetproxy/encode/EncodeSample.java b/core/src/main/java/core/packetproxy/encode/EncodeSample.java similarity index 100% rename from src/main/java/core/packetproxy/encode/EncodeSample.java rename to core/src/main/java/core/packetproxy/encode/EncodeSample.java diff --git a/src/main/java/core/packetproxy/encode/EncodeSampleHTTP.java b/core/src/main/java/core/packetproxy/encode/EncodeSampleHTTP.java similarity index 100% rename from src/main/java/core/packetproxy/encode/EncodeSampleHTTP.java rename to core/src/main/java/core/packetproxy/encode/EncodeSampleHTTP.java diff --git a/src/main/java/core/packetproxy/encode/EncodeSampleQuic.java b/core/src/main/java/core/packetproxy/encode/EncodeSampleQuic.java similarity index 100% rename from src/main/java/core/packetproxy/encode/EncodeSampleQuic.java rename to core/src/main/java/core/packetproxy/encode/EncodeSampleQuic.java diff --git a/src/main/java/core/packetproxy/encode/EncodeSampleUpperCase.java b/core/src/main/java/core/packetproxy/encode/EncodeSampleUpperCase.java similarity index 100% rename from src/main/java/core/packetproxy/encode/EncodeSampleUpperCase.java rename to core/src/main/java/core/packetproxy/encode/EncodeSampleUpperCase.java diff --git a/src/main/java/core/packetproxy/encode/EncodeXMPP.java b/core/src/main/java/core/packetproxy/encode/EncodeXMPP.java similarity index 100% rename from src/main/java/core/packetproxy/encode/EncodeXMPP.java rename to core/src/main/java/core/packetproxy/encode/EncodeXMPP.java diff --git a/src/main/java/core/packetproxy/encode/Encoder.java b/core/src/main/java/core/packetproxy/encode/Encoder.java similarity index 100% rename from src/main/java/core/packetproxy/encode/Encoder.java rename to core/src/main/java/core/packetproxy/encode/Encoder.java diff --git a/src/main/java/core/packetproxy/extensions/randomness/test/ApproximateEntropyTest.java b/core/src/main/java/core/packetproxy/extensions/randomness/test/ApproximateEntropyTest.java similarity index 100% rename from src/main/java/core/packetproxy/extensions/randomness/test/ApproximateEntropyTest.java rename to core/src/main/java/core/packetproxy/extensions/randomness/test/ApproximateEntropyTest.java diff --git a/src/main/java/core/packetproxy/extensions/randomness/test/CUsUMTest.java b/core/src/main/java/core/packetproxy/extensions/randomness/test/CUsUMTest.java similarity index 100% rename from src/main/java/core/packetproxy/extensions/randomness/test/CUsUMTest.java rename to core/src/main/java/core/packetproxy/extensions/randomness/test/CUsUMTest.java diff --git a/src/main/java/core/packetproxy/extensions/randomness/test/FrequencyTest.java b/core/src/main/java/core/packetproxy/extensions/randomness/test/FrequencyTest.java similarity index 100% rename from src/main/java/core/packetproxy/extensions/randomness/test/FrequencyTest.java rename to core/src/main/java/core/packetproxy/extensions/randomness/test/FrequencyTest.java diff --git a/src/main/java/core/packetproxy/extensions/randomness/test/LinearComplexityTest.java b/core/src/main/java/core/packetproxy/extensions/randomness/test/LinearComplexityTest.java similarity index 100% rename from src/main/java/core/packetproxy/extensions/randomness/test/LinearComplexityTest.java rename to core/src/main/java/core/packetproxy/extensions/randomness/test/LinearComplexityTest.java diff --git a/src/main/java/core/packetproxy/extensions/randomness/test/LongestRunOfOneTest.java b/core/src/main/java/core/packetproxy/extensions/randomness/test/LongestRunOfOneTest.java similarity index 100% rename from src/main/java/core/packetproxy/extensions/randomness/test/LongestRunOfOneTest.java rename to core/src/main/java/core/packetproxy/extensions/randomness/test/LongestRunOfOneTest.java diff --git a/src/main/java/core/packetproxy/extensions/randomness/test/RandomnessTest.java b/core/src/main/java/core/packetproxy/extensions/randomness/test/RandomnessTest.java similarity index 100% rename from src/main/java/core/packetproxy/extensions/randomness/test/RandomnessTest.java rename to core/src/main/java/core/packetproxy/extensions/randomness/test/RandomnessTest.java diff --git a/src/main/java/core/packetproxy/extensions/randomness/test/RandomnessTestManager.java b/core/src/main/java/core/packetproxy/extensions/randomness/test/RandomnessTestManager.java similarity index 100% rename from src/main/java/core/packetproxy/extensions/randomness/test/RandomnessTestManager.java rename to core/src/main/java/core/packetproxy/extensions/randomness/test/RandomnessTestManager.java diff --git a/src/main/java/core/packetproxy/extensions/randomness/test/RankTest.java b/core/src/main/java/core/packetproxy/extensions/randomness/test/RankTest.java similarity index 100% rename from src/main/java/core/packetproxy/extensions/randomness/test/RankTest.java rename to core/src/main/java/core/packetproxy/extensions/randomness/test/RankTest.java diff --git a/src/main/java/core/packetproxy/extensions/randomness/test/RunsTest.java b/core/src/main/java/core/packetproxy/extensions/randomness/test/RunsTest.java similarity index 100% rename from src/main/java/core/packetproxy/extensions/randomness/test/RunsTest.java rename to core/src/main/java/core/packetproxy/extensions/randomness/test/RunsTest.java diff --git a/src/main/java/core/packetproxy/extensions/randomness/test/SerialTest.java b/core/src/main/java/core/packetproxy/extensions/randomness/test/SerialTest.java similarity index 100% rename from src/main/java/core/packetproxy/extensions/randomness/test/SerialTest.java rename to core/src/main/java/core/packetproxy/extensions/randomness/test/SerialTest.java diff --git a/src/main/java/core/packetproxy/extensions/samplehttp/SampleEncoders.java b/core/src/main/java/core/packetproxy/extensions/samplehttp/SampleEncoders.java similarity index 100% rename from src/main/java/core/packetproxy/extensions/samplehttp/SampleEncoders.java rename to core/src/main/java/core/packetproxy/extensions/samplehttp/SampleEncoders.java diff --git a/src/main/java/core/packetproxy/extensions/samplehttp/encoder/SampleHTTP.java b/core/src/main/java/core/packetproxy/extensions/samplehttp/encoder/SampleHTTP.java similarity index 100% rename from src/main/java/core/packetproxy/extensions/samplehttp/encoder/SampleHTTP.java rename to core/src/main/java/core/packetproxy/extensions/samplehttp/encoder/SampleHTTP.java diff --git a/src/main/java/core/packetproxy/http/HeaderField.java b/core/src/main/java/core/packetproxy/http/HeaderField.java similarity index 100% rename from src/main/java/core/packetproxy/http/HeaderField.java rename to core/src/main/java/core/packetproxy/http/HeaderField.java diff --git a/src/main/java/core/packetproxy/http/Http.java b/core/src/main/java/core/packetproxy/http/Http.java similarity index 100% rename from src/main/java/core/packetproxy/http/Http.java rename to core/src/main/java/core/packetproxy/http/Http.java diff --git a/src/main/java/core/packetproxy/http/HttpHeader.java b/core/src/main/java/core/packetproxy/http/HttpHeader.java similarity index 100% rename from src/main/java/core/packetproxy/http/HttpHeader.java rename to core/src/main/java/core/packetproxy/http/HttpHeader.java diff --git a/src/main/java/core/packetproxy/http/Https.java b/core/src/main/java/core/packetproxy/http/Https.java similarity index 100% rename from src/main/java/core/packetproxy/http/Https.java rename to core/src/main/java/core/packetproxy/http/Https.java diff --git a/src/main/java/core/packetproxy/http/HttpsProxySocketEndpoint.java b/core/src/main/java/core/packetproxy/http/HttpsProxySocketEndpoint.java similarity index 100% rename from src/main/java/core/packetproxy/http/HttpsProxySocketEndpoint.java rename to core/src/main/java/core/packetproxy/http/HttpsProxySocketEndpoint.java diff --git a/src/main/java/core/packetproxy/http/QueryParameter.java b/core/src/main/java/core/packetproxy/http/QueryParameter.java similarity index 100% rename from src/main/java/core/packetproxy/http/QueryParameter.java rename to core/src/main/java/core/packetproxy/http/QueryParameter.java diff --git a/src/main/java/core/packetproxy/http/QueryString.java b/core/src/main/java/core/packetproxy/http/QueryString.java similarity index 100% rename from src/main/java/core/packetproxy/http/QueryString.java rename to core/src/main/java/core/packetproxy/http/QueryString.java diff --git a/src/main/java/core/packetproxy/http1/Http1StreamingResponse.java b/core/src/main/java/core/packetproxy/http1/Http1StreamingResponse.java similarity index 100% rename from src/main/java/core/packetproxy/http1/Http1StreamingResponse.java rename to core/src/main/java/core/packetproxy/http1/Http1StreamingResponse.java diff --git a/src/main/java/core/packetproxy/http2/FlowControl.java b/core/src/main/java/core/packetproxy/http2/FlowControl.java similarity index 100% rename from src/main/java/core/packetproxy/http2/FlowControl.java rename to core/src/main/java/core/packetproxy/http2/FlowControl.java diff --git a/src/main/java/core/packetproxy/http2/FlowControlManager.java b/core/src/main/java/core/packetproxy/http2/FlowControlManager.java similarity index 100% rename from src/main/java/core/packetproxy/http2/FlowControlManager.java rename to core/src/main/java/core/packetproxy/http2/FlowControlManager.java diff --git a/src/main/java/core/packetproxy/http2/FrameManager.java b/core/src/main/java/core/packetproxy/http2/FrameManager.java similarity index 100% rename from src/main/java/core/packetproxy/http2/FrameManager.java rename to core/src/main/java/core/packetproxy/http2/FrameManager.java diff --git a/src/main/java/core/packetproxy/http2/FramesBase.java b/core/src/main/java/core/packetproxy/http2/FramesBase.java similarity index 100% rename from src/main/java/core/packetproxy/http2/FramesBase.java rename to core/src/main/java/core/packetproxy/http2/FramesBase.java diff --git a/src/main/java/core/packetproxy/http2/Grpc.java b/core/src/main/java/core/packetproxy/http2/Grpc.java similarity index 100% rename from src/main/java/core/packetproxy/http2/Grpc.java rename to core/src/main/java/core/packetproxy/http2/Grpc.java diff --git a/src/main/java/core/packetproxy/http2/GrpcStreaming.java b/core/src/main/java/core/packetproxy/http2/GrpcStreaming.java similarity index 100% rename from src/main/java/core/packetproxy/http2/GrpcStreaming.java rename to core/src/main/java/core/packetproxy/http2/GrpcStreaming.java diff --git a/src/main/java/core/packetproxy/http2/Http2.java b/core/src/main/java/core/packetproxy/http2/Http2.java similarity index 100% rename from src/main/java/core/packetproxy/http2/Http2.java rename to core/src/main/java/core/packetproxy/http2/Http2.java diff --git a/src/main/java/core/packetproxy/http2/Http2StreamingResponse.java b/core/src/main/java/core/packetproxy/http2/Http2StreamingResponse.java similarity index 100% rename from src/main/java/core/packetproxy/http2/Http2StreamingResponse.java rename to core/src/main/java/core/packetproxy/http2/Http2StreamingResponse.java diff --git a/src/main/java/core/packetproxy/http2/Stream.java b/core/src/main/java/core/packetproxy/http2/Stream.java similarity index 100% rename from src/main/java/core/packetproxy/http2/Stream.java rename to core/src/main/java/core/packetproxy/http2/Stream.java diff --git a/src/main/java/core/packetproxy/http2/StreamManager.java b/core/src/main/java/core/packetproxy/http2/StreamManager.java similarity index 100% rename from src/main/java/core/packetproxy/http2/StreamManager.java rename to core/src/main/java/core/packetproxy/http2/StreamManager.java diff --git a/src/main/java/core/packetproxy/http2/frames/DataFrame.java b/core/src/main/java/core/packetproxy/http2/frames/DataFrame.java similarity index 100% rename from src/main/java/core/packetproxy/http2/frames/DataFrame.java rename to core/src/main/java/core/packetproxy/http2/frames/DataFrame.java diff --git a/src/main/java/core/packetproxy/http2/frames/Frame.java b/core/src/main/java/core/packetproxy/http2/frames/Frame.java similarity index 100% rename from src/main/java/core/packetproxy/http2/frames/Frame.java rename to core/src/main/java/core/packetproxy/http2/frames/Frame.java diff --git a/src/main/java/core/packetproxy/http2/frames/FrameFactory.java b/core/src/main/java/core/packetproxy/http2/frames/FrameFactory.java similarity index 100% rename from src/main/java/core/packetproxy/http2/frames/FrameFactory.java rename to core/src/main/java/core/packetproxy/http2/frames/FrameFactory.java diff --git a/src/main/java/core/packetproxy/http2/frames/FrameUtils.java b/core/src/main/java/core/packetproxy/http2/frames/FrameUtils.java similarity index 100% rename from src/main/java/core/packetproxy/http2/frames/FrameUtils.java rename to core/src/main/java/core/packetproxy/http2/frames/FrameUtils.java diff --git a/src/main/java/core/packetproxy/http2/frames/GoawayFrame.java b/core/src/main/java/core/packetproxy/http2/frames/GoawayFrame.java similarity index 100% rename from src/main/java/core/packetproxy/http2/frames/GoawayFrame.java rename to core/src/main/java/core/packetproxy/http2/frames/GoawayFrame.java diff --git a/src/main/java/core/packetproxy/http2/frames/HeadersFrame.java b/core/src/main/java/core/packetproxy/http2/frames/HeadersFrame.java similarity index 100% rename from src/main/java/core/packetproxy/http2/frames/HeadersFrame.java rename to core/src/main/java/core/packetproxy/http2/frames/HeadersFrame.java diff --git a/src/main/java/core/packetproxy/http2/frames/PingFrame.java b/core/src/main/java/core/packetproxy/http2/frames/PingFrame.java similarity index 100% rename from src/main/java/core/packetproxy/http2/frames/PingFrame.java rename to core/src/main/java/core/packetproxy/http2/frames/PingFrame.java diff --git a/src/main/java/core/packetproxy/http2/frames/RstStreamFrame.java b/core/src/main/java/core/packetproxy/http2/frames/RstStreamFrame.java similarity index 100% rename from src/main/java/core/packetproxy/http2/frames/RstStreamFrame.java rename to core/src/main/java/core/packetproxy/http2/frames/RstStreamFrame.java diff --git a/src/main/java/core/packetproxy/http2/frames/SettingsFrame.java b/core/src/main/java/core/packetproxy/http2/frames/SettingsFrame.java similarity index 100% rename from src/main/java/core/packetproxy/http2/frames/SettingsFrame.java rename to core/src/main/java/core/packetproxy/http2/frames/SettingsFrame.java diff --git a/src/main/java/core/packetproxy/http2/frames/WindowUpdateFrame.java b/core/src/main/java/core/packetproxy/http2/frames/WindowUpdateFrame.java similarity index 100% rename from src/main/java/core/packetproxy/http2/frames/WindowUpdateFrame.java rename to core/src/main/java/core/packetproxy/http2/frames/WindowUpdateFrame.java diff --git a/src/main/java/core/packetproxy/http3/service/Http3.java b/core/src/main/java/core/packetproxy/http3/service/Http3.java similarity index 100% rename from src/main/java/core/packetproxy/http3/service/Http3.java rename to core/src/main/java/core/packetproxy/http3/service/Http3.java diff --git a/src/main/java/core/packetproxy/http3/service/Http3HeaderDecoder.java b/core/src/main/java/core/packetproxy/http3/service/Http3HeaderDecoder.java similarity index 100% rename from src/main/java/core/packetproxy/http3/service/Http3HeaderDecoder.java rename to core/src/main/java/core/packetproxy/http3/service/Http3HeaderDecoder.java diff --git a/src/main/java/core/packetproxy/http3/service/Http3HeaderEncoder.java b/core/src/main/java/core/packetproxy/http3/service/Http3HeaderEncoder.java similarity index 100% rename from src/main/java/core/packetproxy/http3/service/Http3HeaderEncoder.java rename to core/src/main/java/core/packetproxy/http3/service/Http3HeaderEncoder.java diff --git a/src/main/java/core/packetproxy/http3/service/HttpRaw.java b/core/src/main/java/core/packetproxy/http3/service/HttpRaw.java similarity index 100% rename from src/main/java/core/packetproxy/http3/service/HttpRaw.java rename to core/src/main/java/core/packetproxy/http3/service/HttpRaw.java diff --git a/src/main/java/core/packetproxy/http3/service/StreamsReader.java b/core/src/main/java/core/packetproxy/http3/service/StreamsReader.java similarity index 100% rename from src/main/java/core/packetproxy/http3/service/StreamsReader.java rename to core/src/main/java/core/packetproxy/http3/service/StreamsReader.java diff --git a/src/main/java/core/packetproxy/http3/service/StreamsWriter.java b/core/src/main/java/core/packetproxy/http3/service/StreamsWriter.java similarity index 100% rename from src/main/java/core/packetproxy/http3/service/StreamsWriter.java rename to core/src/main/java/core/packetproxy/http3/service/StreamsWriter.java diff --git a/src/main/java/core/packetproxy/http3/service/frame/FrameParser.java b/core/src/main/java/core/packetproxy/http3/service/frame/FrameParser.java similarity index 100% rename from src/main/java/core/packetproxy/http3/service/frame/FrameParser.java rename to core/src/main/java/core/packetproxy/http3/service/frame/FrameParser.java diff --git a/src/main/java/core/packetproxy/http3/service/stream/ControlReadStream.java b/core/src/main/java/core/packetproxy/http3/service/stream/ControlReadStream.java similarity index 100% rename from src/main/java/core/packetproxy/http3/service/stream/ControlReadStream.java rename to core/src/main/java/core/packetproxy/http3/service/stream/ControlReadStream.java diff --git a/src/main/java/core/packetproxy/http3/service/stream/ControlWriteStream.java b/core/src/main/java/core/packetproxy/http3/service/stream/ControlWriteStream.java similarity index 100% rename from src/main/java/core/packetproxy/http3/service/stream/ControlWriteStream.java rename to core/src/main/java/core/packetproxy/http3/service/stream/ControlWriteStream.java diff --git a/src/main/java/core/packetproxy/http3/service/stream/HttpReadStream.java b/core/src/main/java/core/packetproxy/http3/service/stream/HttpReadStream.java similarity index 100% rename from src/main/java/core/packetproxy/http3/service/stream/HttpReadStream.java rename to core/src/main/java/core/packetproxy/http3/service/stream/HttpReadStream.java diff --git a/src/main/java/core/packetproxy/http3/service/stream/HttpWriteStreams.java b/core/src/main/java/core/packetproxy/http3/service/stream/HttpWriteStreams.java similarity index 100% rename from src/main/java/core/packetproxy/http3/service/stream/HttpWriteStreams.java rename to core/src/main/java/core/packetproxy/http3/service/stream/HttpWriteStreams.java diff --git a/src/main/java/core/packetproxy/http3/service/stream/QpackReadStream.java b/core/src/main/java/core/packetproxy/http3/service/stream/QpackReadStream.java similarity index 100% rename from src/main/java/core/packetproxy/http3/service/stream/QpackReadStream.java rename to core/src/main/java/core/packetproxy/http3/service/stream/QpackReadStream.java diff --git a/src/main/java/core/packetproxy/http3/service/stream/QpackWriteStream.java b/core/src/main/java/core/packetproxy/http3/service/stream/QpackWriteStream.java similarity index 100% rename from src/main/java/core/packetproxy/http3/service/stream/QpackWriteStream.java rename to core/src/main/java/core/packetproxy/http3/service/stream/QpackWriteStream.java diff --git a/src/main/java/core/packetproxy/http3/service/stream/ReadStream.java b/core/src/main/java/core/packetproxy/http3/service/stream/ReadStream.java similarity index 100% rename from src/main/java/core/packetproxy/http3/service/stream/ReadStream.java rename to core/src/main/java/core/packetproxy/http3/service/stream/ReadStream.java diff --git a/src/main/java/core/packetproxy/http3/service/stream/Stream.java b/core/src/main/java/core/packetproxy/http3/service/stream/Stream.java similarity index 100% rename from src/main/java/core/packetproxy/http3/service/stream/Stream.java rename to core/src/main/java/core/packetproxy/http3/service/stream/Stream.java diff --git a/src/main/java/core/packetproxy/http3/service/stream/WriteStream.java b/core/src/main/java/core/packetproxy/http3/service/stream/WriteStream.java similarity index 100% rename from src/main/java/core/packetproxy/http3/service/stream/WriteStream.java rename to core/src/main/java/core/packetproxy/http3/service/stream/WriteStream.java diff --git a/src/main/java/core/packetproxy/http3/utils/Constants.java b/core/src/main/java/core/packetproxy/http3/utils/Constants.java similarity index 100% rename from src/main/java/core/packetproxy/http3/utils/Constants.java rename to core/src/main/java/core/packetproxy/http3/utils/Constants.java diff --git a/src/main/java/core/packetproxy/http3/value/Setting.java b/core/src/main/java/core/packetproxy/http3/value/Setting.java similarity index 100% rename from src/main/java/core/packetproxy/http3/value/Setting.java rename to core/src/main/java/core/packetproxy/http3/value/Setting.java diff --git a/src/main/java/core/packetproxy/http3/value/SettingParam.java b/core/src/main/java/core/packetproxy/http3/value/SettingParam.java similarity index 100% rename from src/main/java/core/packetproxy/http3/value/SettingParam.java rename to core/src/main/java/core/packetproxy/http3/value/SettingParam.java diff --git a/src/main/java/core/packetproxy/http3/value/UniStreamHeader.java b/core/src/main/java/core/packetproxy/http3/value/UniStreamHeader.java similarity index 100% rename from src/main/java/core/packetproxy/http3/value/UniStreamHeader.java rename to core/src/main/java/core/packetproxy/http3/value/UniStreamHeader.java diff --git a/src/main/java/core/packetproxy/http3/value/frame/DataFrame.java b/core/src/main/java/core/packetproxy/http3/value/frame/DataFrame.java similarity index 100% rename from src/main/java/core/packetproxy/http3/value/frame/DataFrame.java rename to core/src/main/java/core/packetproxy/http3/value/frame/DataFrame.java diff --git a/src/main/java/core/packetproxy/http3/value/frame/DummyFrame.java b/core/src/main/java/core/packetproxy/http3/value/frame/DummyFrame.java similarity index 100% rename from src/main/java/core/packetproxy/http3/value/frame/DummyFrame.java rename to core/src/main/java/core/packetproxy/http3/value/frame/DummyFrame.java diff --git a/src/main/java/core/packetproxy/http3/value/frame/Frame.java b/core/src/main/java/core/packetproxy/http3/value/frame/Frame.java similarity index 100% rename from src/main/java/core/packetproxy/http3/value/frame/Frame.java rename to core/src/main/java/core/packetproxy/http3/value/frame/Frame.java diff --git a/src/main/java/core/packetproxy/http3/value/frame/Frames.java b/core/src/main/java/core/packetproxy/http3/value/frame/Frames.java similarity index 100% rename from src/main/java/core/packetproxy/http3/value/frame/Frames.java rename to core/src/main/java/core/packetproxy/http3/value/frame/Frames.java diff --git a/src/main/java/core/packetproxy/http3/value/frame/GreaseFrame.java b/core/src/main/java/core/packetproxy/http3/value/frame/GreaseFrame.java similarity index 100% rename from src/main/java/core/packetproxy/http3/value/frame/GreaseFrame.java rename to core/src/main/java/core/packetproxy/http3/value/frame/GreaseFrame.java diff --git a/src/main/java/core/packetproxy/http3/value/frame/HeadersFrame.java b/core/src/main/java/core/packetproxy/http3/value/frame/HeadersFrame.java similarity index 100% rename from src/main/java/core/packetproxy/http3/value/frame/HeadersFrame.java rename to core/src/main/java/core/packetproxy/http3/value/frame/HeadersFrame.java diff --git a/src/main/java/core/packetproxy/http3/value/frame/RawFrame.java b/core/src/main/java/core/packetproxy/http3/value/frame/RawFrame.java similarity index 100% rename from src/main/java/core/packetproxy/http3/value/frame/RawFrame.java rename to core/src/main/java/core/packetproxy/http3/value/frame/RawFrame.java diff --git a/src/main/java/core/packetproxy/http3/value/frame/SettingsFrame.java b/core/src/main/java/core/packetproxy/http3/value/frame/SettingsFrame.java similarity index 100% rename from src/main/java/core/packetproxy/http3/value/frame/SettingsFrame.java rename to core/src/main/java/core/packetproxy/http3/value/frame/SettingsFrame.java diff --git a/src/main/java/core/packetproxy/model/CAFactory.java b/core/src/main/java/core/packetproxy/model/CAFactory.java similarity index 100% rename from src/main/java/core/packetproxy/model/CAFactory.java rename to core/src/main/java/core/packetproxy/model/CAFactory.java diff --git a/src/main/java/core/packetproxy/model/CAs/CA.java b/core/src/main/java/core/packetproxy/model/CAs/CA.java similarity index 100% rename from src/main/java/core/packetproxy/model/CAs/CA.java rename to core/src/main/java/core/packetproxy/model/CAs/CA.java diff --git a/src/main/java/core/packetproxy/model/CAs/PacketProxyCAPerUser.java b/core/src/main/java/core/packetproxy/model/CAs/PacketProxyCAPerUser.java similarity index 100% rename from src/main/java/core/packetproxy/model/CAs/PacketProxyCAPerUser.java rename to core/src/main/java/core/packetproxy/model/CAs/PacketProxyCAPerUser.java diff --git a/src/main/java/core/packetproxy/model/CAs/SelfSignedCA.java b/core/src/main/java/core/packetproxy/model/CAs/SelfSignedCA.java similarity index 100% rename from src/main/java/core/packetproxy/model/CAs/SelfSignedCA.java rename to core/src/main/java/core/packetproxy/model/CAs/SelfSignedCA.java diff --git a/src/main/java/core/packetproxy/model/CharSet.java b/core/src/main/java/core/packetproxy/model/CharSet.java similarity index 100% rename from src/main/java/core/packetproxy/model/CharSet.java rename to core/src/main/java/core/packetproxy/model/CharSet.java diff --git a/src/main/java/core/packetproxy/model/CharSets.java b/core/src/main/java/core/packetproxy/model/CharSets.java similarity index 100% rename from src/main/java/core/packetproxy/model/CharSets.java rename to core/src/main/java/core/packetproxy/model/CharSets.java diff --git a/src/main/java/core/packetproxy/model/ClientCertificate.java b/core/src/main/java/core/packetproxy/model/ClientCertificate.java similarity index 100% rename from src/main/java/core/packetproxy/model/ClientCertificate.java rename to core/src/main/java/core/packetproxy/model/ClientCertificate.java diff --git a/src/main/java/core/packetproxy/model/ClientCertificates.java b/core/src/main/java/core/packetproxy/model/ClientCertificates.java similarity index 100% rename from src/main/java/core/packetproxy/model/ClientCertificates.java rename to core/src/main/java/core/packetproxy/model/ClientCertificates.java index c77fd3f7..c93c5dd2 100644 --- a/src/main/java/core/packetproxy/model/ClientCertificates.java +++ b/core/src/main/java/core/packetproxy/model/ClientCertificates.java @@ -25,8 +25,8 @@ import java.beans.PropertyChangeSupport; import java.util.List; import packetproxy.common.ClientKeyManager; -import packetproxy.platform.UserPrompts; import packetproxy.model.Database.DatabaseMessage; +import packetproxy.platform.UserPrompts; /** DAO for ClientCertificate */ public class ClientCertificates implements PropertyChangeListener { diff --git a/src/main/java/core/packetproxy/model/Config.java b/core/src/main/java/core/packetproxy/model/Config.java similarity index 100% rename from src/main/java/core/packetproxy/model/Config.java rename to core/src/main/java/core/packetproxy/model/Config.java diff --git a/src/main/java/core/packetproxy/model/ConfigBoolean.java b/core/src/main/java/core/packetproxy/model/ConfigBoolean.java similarity index 100% rename from src/main/java/core/packetproxy/model/ConfigBoolean.java rename to core/src/main/java/core/packetproxy/model/ConfigBoolean.java diff --git a/src/main/java/core/packetproxy/model/ConfigInteger.java b/core/src/main/java/core/packetproxy/model/ConfigInteger.java similarity index 100% rename from src/main/java/core/packetproxy/model/ConfigInteger.java rename to core/src/main/java/core/packetproxy/model/ConfigInteger.java diff --git a/src/main/java/core/packetproxy/model/ConfigString.java b/core/src/main/java/core/packetproxy/model/ConfigString.java similarity index 100% rename from src/main/java/core/packetproxy/model/ConfigString.java rename to core/src/main/java/core/packetproxy/model/ConfigString.java diff --git a/src/main/java/core/packetproxy/model/Configs.java b/core/src/main/java/core/packetproxy/model/Configs.java similarity index 100% rename from src/main/java/core/packetproxy/model/Configs.java rename to core/src/main/java/core/packetproxy/model/Configs.java diff --git a/src/main/java/core/packetproxy/model/Credential.java b/core/src/main/java/core/packetproxy/model/Credential.java similarity index 100% rename from src/main/java/core/packetproxy/model/Credential.java rename to core/src/main/java/core/packetproxy/model/Credential.java diff --git a/src/main/java/core/packetproxy/model/DaoQueryCache.java b/core/src/main/java/core/packetproxy/model/DaoQueryCache.java similarity index 100% rename from src/main/java/core/packetproxy/model/DaoQueryCache.java rename to core/src/main/java/core/packetproxy/model/DaoQueryCache.java diff --git a/src/main/java/core/packetproxy/model/Database.java b/core/src/main/java/core/packetproxy/model/Database.java similarity index 100% rename from src/main/java/core/packetproxy/model/Database.java rename to core/src/main/java/core/packetproxy/model/Database.java diff --git a/src/main/java/core/packetproxy/model/Diff.java b/core/src/main/java/core/packetproxy/model/Diff.java similarity index 100% rename from src/main/java/core/packetproxy/model/Diff.java rename to core/src/main/java/core/packetproxy/model/Diff.java diff --git a/src/main/java/core/packetproxy/model/DiffBase.java b/core/src/main/java/core/packetproxy/model/DiffBase.java similarity index 100% rename from src/main/java/core/packetproxy/model/DiffBase.java rename to core/src/main/java/core/packetproxy/model/DiffBase.java diff --git a/src/main/java/core/packetproxy/model/DiffBinary.java b/core/src/main/java/core/packetproxy/model/DiffBinary.java similarity index 100% rename from src/main/java/core/packetproxy/model/DiffBinary.java rename to core/src/main/java/core/packetproxy/model/DiffBinary.java diff --git a/src/main/java/core/packetproxy/model/DiffEventAdapter.java b/core/src/main/java/core/packetproxy/model/DiffEventAdapter.java similarity index 100% rename from src/main/java/core/packetproxy/model/DiffEventAdapter.java rename to core/src/main/java/core/packetproxy/model/DiffEventAdapter.java diff --git a/src/main/java/core/packetproxy/model/DiffEventListener.java b/core/src/main/java/core/packetproxy/model/DiffEventListener.java similarity index 100% rename from src/main/java/core/packetproxy/model/DiffEventListener.java rename to core/src/main/java/core/packetproxy/model/DiffEventListener.java diff --git a/src/main/java/core/packetproxy/model/DiffJson.java b/core/src/main/java/core/packetproxy/model/DiffJson.java similarity index 100% rename from src/main/java/core/packetproxy/model/DiffJson.java rename to core/src/main/java/core/packetproxy/model/DiffJson.java diff --git a/src/main/java/core/packetproxy/model/DiffSet.java b/core/src/main/java/core/packetproxy/model/DiffSet.java similarity index 100% rename from src/main/java/core/packetproxy/model/DiffSet.java rename to core/src/main/java/core/packetproxy/model/DiffSet.java diff --git a/src/main/java/core/packetproxy/model/Extension.java b/core/src/main/java/core/packetproxy/model/Extension.java similarity index 100% rename from src/main/java/core/packetproxy/model/Extension.java rename to core/src/main/java/core/packetproxy/model/Extension.java diff --git a/src/main/java/core/packetproxy/model/Extensions.java b/core/src/main/java/core/packetproxy/model/Extensions.java similarity index 96% rename from src/main/java/core/packetproxy/model/Extensions.java rename to core/src/main/java/core/packetproxy/model/Extensions.java index 67ca0804..edae6d20 100644 --- a/src/main/java/core/packetproxy/model/Extensions.java +++ b/core/src/main/java/core/packetproxy/model/Extensions.java @@ -33,11 +33,9 @@ import java.util.Map; import java.util.jar.JarEntry; import java.util.jar.JarFile; -import packetproxy.gui.extensions.randomness.RandomnessExtension; -import packetproxy.platform.UserPrompts; import packetproxy.extensions.samplehttp.SampleEncoders; -import packetproxy.extensions.securityheaders.SecurityHeadersExtension; import packetproxy.model.Database.DatabaseMessage; +import packetproxy.platform.UserPrompts; public class Extensions implements PropertyChangeListener { @@ -55,12 +53,14 @@ public static Extensions getInstance() throws Exception { private static Map> presetExtensions = new HashMap<>() { { - put((new RandomnessExtension()).getName(), RandomnessExtension.class); put((new SampleEncoders()).getName(), SampleEncoders.class); - put((new SecurityHeadersExtension()).getName(), SecurityHeadersExtension.class); } }; + public static void registerPresetExtension(String name, Class clazz) { + presetExtensions.put(name, clazz); + } + // Extensionではなく、継承先のインスタンスを保持する必要がある // enabledになっている際にのみext_instancesに保持されるようにする private Map ext_instances; diff --git a/src/main/java/core/packetproxy/model/Filter.java b/core/src/main/java/core/packetproxy/model/Filter.java similarity index 100% rename from src/main/java/core/packetproxy/model/Filter.java rename to core/src/main/java/core/packetproxy/model/Filter.java diff --git a/src/main/java/core/packetproxy/model/Filters.java b/core/src/main/java/core/packetproxy/model/Filters.java similarity index 100% rename from src/main/java/core/packetproxy/model/Filters.java rename to core/src/main/java/core/packetproxy/model/Filters.java diff --git a/src/main/java/core/packetproxy/model/InterceptModel.java b/core/src/main/java/core/packetproxy/model/InterceptModel.java similarity index 100% rename from src/main/java/core/packetproxy/model/InterceptModel.java rename to core/src/main/java/core/packetproxy/model/InterceptModel.java diff --git a/src/main/java/core/packetproxy/model/InterceptOption.java b/core/src/main/java/core/packetproxy/model/InterceptOption.java similarity index 100% rename from src/main/java/core/packetproxy/model/InterceptOption.java rename to core/src/main/java/core/packetproxy/model/InterceptOption.java diff --git a/src/main/java/core/packetproxy/model/InterceptOptions.java b/core/src/main/java/core/packetproxy/model/InterceptOptions.java similarity index 100% rename from src/main/java/core/packetproxy/model/InterceptOptions.java rename to core/src/main/java/core/packetproxy/model/InterceptOptions.java index 719183d2..87c2d227 100644 --- a/src/main/java/core/packetproxy/model/InterceptOptions.java +++ b/core/src/main/java/core/packetproxy/model/InterceptOptions.java @@ -26,8 +26,8 @@ import java.util.ArrayList; import java.util.List; import packetproxy.model.Database.DatabaseMessage; -import packetproxy.platform.UserPrompts; import packetproxy.model.InterceptOption.Direction; +import packetproxy.platform.UserPrompts; public class InterceptOptions implements PropertyChangeListener { diff --git a/src/main/java/core/packetproxy/model/ListenPort.java b/core/src/main/java/core/packetproxy/model/ListenPort.java similarity index 100% rename from src/main/java/core/packetproxy/model/ListenPort.java rename to core/src/main/java/core/packetproxy/model/ListenPort.java diff --git a/src/main/java/core/packetproxy/model/ListenPorts.java b/core/src/main/java/core/packetproxy/model/ListenPorts.java similarity index 100% rename from src/main/java/core/packetproxy/model/ListenPorts.java rename to core/src/main/java/core/packetproxy/model/ListenPorts.java diff --git a/src/main/java/core/packetproxy/model/Modification.java b/core/src/main/java/core/packetproxy/model/Modification.java similarity index 100% rename from src/main/java/core/packetproxy/model/Modification.java rename to core/src/main/java/core/packetproxy/model/Modification.java diff --git a/src/main/java/core/packetproxy/model/Modifications.java b/core/src/main/java/core/packetproxy/model/Modifications.java similarity index 100% rename from src/main/java/core/packetproxy/model/Modifications.java rename to core/src/main/java/core/packetproxy/model/Modifications.java diff --git a/src/main/java/core/packetproxy/model/OneShotPacket.java b/core/src/main/java/core/packetproxy/model/OneShotPacket.java similarity index 100% rename from src/main/java/core/packetproxy/model/OneShotPacket.java rename to core/src/main/java/core/packetproxy/model/OneShotPacket.java diff --git a/src/main/java/core/packetproxy/model/OpenVPNForwardPort.java b/core/src/main/java/core/packetproxy/model/OpenVPNForwardPort.java similarity index 100% rename from src/main/java/core/packetproxy/model/OpenVPNForwardPort.java rename to core/src/main/java/core/packetproxy/model/OpenVPNForwardPort.java diff --git a/src/main/java/core/packetproxy/model/OpenVPNForwardPorts.java b/core/src/main/java/core/packetproxy/model/OpenVPNForwardPorts.java similarity index 100% rename from src/main/java/core/packetproxy/model/OpenVPNForwardPorts.java rename to core/src/main/java/core/packetproxy/model/OpenVPNForwardPorts.java diff --git a/src/main/java/core/packetproxy/model/Packet.java b/core/src/main/java/core/packetproxy/model/Packet.java similarity index 100% rename from src/main/java/core/packetproxy/model/Packet.java rename to core/src/main/java/core/packetproxy/model/Packet.java diff --git a/src/main/java/core/packetproxy/model/PacketInfo.java b/core/src/main/java/core/packetproxy/model/PacketInfo.java similarity index 100% rename from src/main/java/core/packetproxy/model/PacketInfo.java rename to core/src/main/java/core/packetproxy/model/PacketInfo.java diff --git a/src/main/java/core/packetproxy/model/Packets.java b/core/src/main/java/core/packetproxy/model/Packets.java similarity index 100% rename from src/main/java/core/packetproxy/model/Packets.java rename to core/src/main/java/core/packetproxy/model/Packets.java index 849b52cd..1cdc83bb 100644 --- a/src/main/java/core/packetproxy/model/Packets.java +++ b/core/src/main/java/core/packetproxy/model/Packets.java @@ -28,8 +28,8 @@ import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import packetproxy.common.Logger; -import packetproxy.platform.UserPrompts; import packetproxy.model.Database.DatabaseMessage; +import packetproxy.platform.UserPrompts; public class Packets implements PropertyChangeListener { diff --git a/src/main/java/core/packetproxy/model/PropertyChangeEventType.java b/core/src/main/java/core/packetproxy/model/PropertyChangeEventType.java similarity index 100% rename from src/main/java/core/packetproxy/model/PropertyChangeEventType.java rename to core/src/main/java/core/packetproxy/model/PropertyChangeEventType.java diff --git a/src/main/java/core/packetproxy/model/RegexParam.java b/core/src/main/java/core/packetproxy/model/RegexParam.java similarity index 100% rename from src/main/java/core/packetproxy/model/RegexParam.java rename to core/src/main/java/core/packetproxy/model/RegexParam.java diff --git a/src/main/java/core/packetproxy/model/ResenderPacket.java b/core/src/main/java/core/packetproxy/model/ResenderPacket.java similarity index 100% rename from src/main/java/core/packetproxy/model/ResenderPacket.java rename to core/src/main/java/core/packetproxy/model/ResenderPacket.java diff --git a/src/main/java/core/packetproxy/model/ResenderPackets.java b/core/src/main/java/core/packetproxy/model/ResenderPackets.java similarity index 100% rename from src/main/java/core/packetproxy/model/ResenderPackets.java rename to core/src/main/java/core/packetproxy/model/ResenderPackets.java diff --git a/src/main/java/core/packetproxy/model/Resolution.java b/core/src/main/java/core/packetproxy/model/Resolution.java similarity index 100% rename from src/main/java/core/packetproxy/model/Resolution.java rename to core/src/main/java/core/packetproxy/model/Resolution.java diff --git a/src/main/java/core/packetproxy/model/Resolutions.java b/core/src/main/java/core/packetproxy/model/Resolutions.java similarity index 100% rename from src/main/java/core/packetproxy/model/Resolutions.java rename to core/src/main/java/core/packetproxy/model/Resolutions.java diff --git a/src/main/java/core/packetproxy/model/SSLPassThrough.java b/core/src/main/java/core/packetproxy/model/SSLPassThrough.java similarity index 100% rename from src/main/java/core/packetproxy/model/SSLPassThrough.java rename to core/src/main/java/core/packetproxy/model/SSLPassThrough.java diff --git a/src/main/java/core/packetproxy/model/SSLPassThroughs.java b/core/src/main/java/core/packetproxy/model/SSLPassThroughs.java similarity index 100% rename from src/main/java/core/packetproxy/model/SSLPassThroughs.java rename to core/src/main/java/core/packetproxy/model/SSLPassThroughs.java index a0940fca..d1798782 100644 --- a/src/main/java/core/packetproxy/model/SSLPassThroughs.java +++ b/core/src/main/java/core/packetproxy/model/SSLPassThroughs.java @@ -25,8 +25,8 @@ import java.beans.PropertyChangeSupport; import java.util.List; import packetproxy.ListenPortManager; -import packetproxy.platform.UserPrompts; import packetproxy.model.Database.DatabaseMessage; +import packetproxy.platform.UserPrompts; public class SSLPassThroughs implements PropertyChangeListener { diff --git a/src/main/java/core/packetproxy/model/Server.java b/core/src/main/java/core/packetproxy/model/Server.java similarity index 100% rename from src/main/java/core/packetproxy/model/Server.java rename to core/src/main/java/core/packetproxy/model/Server.java diff --git a/src/main/java/core/packetproxy/model/Servers.java b/core/src/main/java/core/packetproxy/model/Servers.java similarity index 100% rename from src/main/java/core/packetproxy/model/Servers.java rename to core/src/main/java/core/packetproxy/model/Servers.java diff --git a/src/main/java/core/packetproxy/platform/ConfigHttpUiActions.java b/core/src/main/java/core/packetproxy/platform/ConfigHttpUiActions.java similarity index 92% rename from src/main/java/core/packetproxy/platform/ConfigHttpUiActions.java rename to core/src/main/java/core/packetproxy/platform/ConfigHttpUiActions.java index a9f63de0..a00d1d8f 100644 --- a/src/main/java/core/packetproxy/platform/ConfigHttpUiActions.java +++ b/core/src/main/java/core/packetproxy/platform/ConfigHttpUiActions.java @@ -20,6 +20,8 @@ public interface ConfigHttpUiActions { void showOptionsTab(); - /** @return 設定上書きを許可する場合 true */ + /** + * @return 設定上書きを許可する場合 true + */ boolean confirmOverwriteConfig(); } diff --git a/src/main/java/core/packetproxy/platform/ConsoleUserPrompt.java b/core/src/main/java/core/packetproxy/platform/ConsoleUserPrompt.java similarity index 100% rename from src/main/java/core/packetproxy/platform/ConsoleUserPrompt.java rename to core/src/main/java/core/packetproxy/platform/ConsoleUserPrompt.java diff --git a/src/main/java/core/packetproxy/platform/LogSink.java b/core/src/main/java/core/packetproxy/platform/LogSink.java similarity index 100% rename from src/main/java/core/packetproxy/platform/LogSink.java rename to core/src/main/java/core/packetproxy/platform/LogSink.java diff --git a/src/main/java/core/packetproxy/platform/LogSinks.java b/core/src/main/java/core/packetproxy/platform/LogSinks.java similarity index 97% rename from src/main/java/core/packetproxy/platform/LogSinks.java rename to core/src/main/java/core/packetproxy/platform/LogSinks.java index 3c4f7e8c..9938b114 100644 --- a/src/main/java/core/packetproxy/platform/LogSinks.java +++ b/core/src/main/java/core/packetproxy/platform/LogSinks.java @@ -20,7 +20,8 @@ public final class LogSinks { private static volatile LogSink sink; - private LogSinks() {} + private LogSinks() { + } public static void set(LogSink logSink) { sink = logSink; diff --git a/src/main/java/core/packetproxy/platform/MainWindowAccess.java b/core/src/main/java/core/packetproxy/platform/MainWindowAccess.java similarity index 100% rename from src/main/java/core/packetproxy/platform/MainWindowAccess.java rename to core/src/main/java/core/packetproxy/platform/MainWindowAccess.java diff --git a/src/main/java/core/packetproxy/platform/MainWindows.java b/core/src/main/java/core/packetproxy/platform/MainWindows.java similarity index 97% rename from src/main/java/core/packetproxy/platform/MainWindows.java rename to core/src/main/java/core/packetproxy/platform/MainWindows.java index 6ee5f6dd..4b686b47 100644 --- a/src/main/java/core/packetproxy/platform/MainWindows.java +++ b/core/src/main/java/core/packetproxy/platform/MainWindows.java @@ -19,7 +19,8 @@ public final class MainWindows { private static volatile MainWindowAccess instance; - private MainWindows() {} + private MainWindows() { + } public static MainWindowAccess get() { if (instance == null) { diff --git a/src/main/java/core/packetproxy/platform/PacketPredicate.java b/core/src/main/java/core/packetproxy/platform/PacketPredicate.java similarity index 100% rename from src/main/java/core/packetproxy/platform/PacketPredicate.java rename to core/src/main/java/core/packetproxy/platform/PacketPredicate.java diff --git a/src/main/java/core/packetproxy/platform/SpoofingIPSource.java b/core/src/main/java/core/packetproxy/platform/SpoofingIPSource.java similarity index 100% rename from src/main/java/core/packetproxy/platform/SpoofingIPSource.java rename to core/src/main/java/core/packetproxy/platform/SpoofingIPSource.java diff --git a/src/main/java/core/packetproxy/platform/UserPrompt.java b/core/src/main/java/core/packetproxy/platform/UserPrompt.java similarity index 100% rename from src/main/java/core/packetproxy/platform/UserPrompt.java rename to core/src/main/java/core/packetproxy/platform/UserPrompt.java diff --git a/src/main/java/core/packetproxy/platform/UserPrompts.java b/core/src/main/java/core/packetproxy/platform/UserPrompts.java similarity index 100% rename from src/main/java/core/packetproxy/platform/UserPrompts.java rename to core/src/main/java/core/packetproxy/platform/UserPrompts.java diff --git a/src/main/java/core/packetproxy/quic/service/LossDetection.java b/core/src/main/java/core/packetproxy/quic/service/LossDetection.java similarity index 100% rename from src/main/java/core/packetproxy/quic/service/LossDetection.java rename to core/src/main/java/core/packetproxy/quic/service/LossDetection.java diff --git a/src/main/java/core/packetproxy/quic/service/Pto.java b/core/src/main/java/core/packetproxy/quic/service/Pto.java similarity index 100% rename from src/main/java/core/packetproxy/quic/service/Pto.java rename to core/src/main/java/core/packetproxy/quic/service/Pto.java diff --git a/src/main/java/core/packetproxy/quic/service/RttEstimator.java b/core/src/main/java/core/packetproxy/quic/service/RttEstimator.java similarity index 100% rename from src/main/java/core/packetproxy/quic/service/RttEstimator.java rename to core/src/main/java/core/packetproxy/quic/service/RttEstimator.java diff --git a/src/main/java/core/packetproxy/quic/service/connection/ClientConnection.java b/core/src/main/java/core/packetproxy/quic/service/connection/ClientConnection.java similarity index 100% rename from src/main/java/core/packetproxy/quic/service/connection/ClientConnection.java rename to core/src/main/java/core/packetproxy/quic/service/connection/ClientConnection.java diff --git a/src/main/java/core/packetproxy/quic/service/connection/ClientConnections.java b/core/src/main/java/core/packetproxy/quic/service/connection/ClientConnections.java similarity index 100% rename from src/main/java/core/packetproxy/quic/service/connection/ClientConnections.java rename to core/src/main/java/core/packetproxy/quic/service/connection/ClientConnections.java diff --git a/src/main/java/core/packetproxy/quic/service/connection/Connection.java b/core/src/main/java/core/packetproxy/quic/service/connection/Connection.java similarity index 100% rename from src/main/java/core/packetproxy/quic/service/connection/Connection.java rename to core/src/main/java/core/packetproxy/quic/service/connection/Connection.java diff --git a/src/main/java/core/packetproxy/quic/service/connection/ServerConnection.java b/core/src/main/java/core/packetproxy/quic/service/connection/ServerConnection.java similarity index 100% rename from src/main/java/core/packetproxy/quic/service/connection/ServerConnection.java rename to core/src/main/java/core/packetproxy/quic/service/connection/ServerConnection.java diff --git a/src/main/java/core/packetproxy/quic/service/connection/helper/AwaitingPackets.java b/core/src/main/java/core/packetproxy/quic/service/connection/helper/AwaitingPackets.java similarity index 100% rename from src/main/java/core/packetproxy/quic/service/connection/helper/AwaitingPackets.java rename to core/src/main/java/core/packetproxy/quic/service/connection/helper/AwaitingPackets.java diff --git a/src/main/java/core/packetproxy/quic/service/frame/FrameParser.java b/core/src/main/java/core/packetproxy/quic/service/frame/FrameParser.java similarity index 100% rename from src/main/java/core/packetproxy/quic/service/frame/FrameParser.java rename to core/src/main/java/core/packetproxy/quic/service/frame/FrameParser.java diff --git a/src/main/java/core/packetproxy/quic/service/frame/Frames.java b/core/src/main/java/core/packetproxy/quic/service/frame/Frames.java similarity index 100% rename from src/main/java/core/packetproxy/quic/service/frame/Frames.java rename to core/src/main/java/core/packetproxy/quic/service/frame/Frames.java diff --git a/src/main/java/core/packetproxy/quic/service/frame/FramesBuilder.java b/core/src/main/java/core/packetproxy/quic/service/frame/FramesBuilder.java similarity index 100% rename from src/main/java/core/packetproxy/quic/service/frame/FramesBuilder.java rename to core/src/main/java/core/packetproxy/quic/service/frame/FramesBuilder.java diff --git a/src/main/java/core/packetproxy/quic/service/framegenerator/AckFrameGenerator.java b/core/src/main/java/core/packetproxy/quic/service/framegenerator/AckFrameGenerator.java similarity index 100% rename from src/main/java/core/packetproxy/quic/service/framegenerator/AckFrameGenerator.java rename to core/src/main/java/core/packetproxy/quic/service/framegenerator/AckFrameGenerator.java diff --git a/src/main/java/core/packetproxy/quic/service/framegenerator/CryptoFramesToMessages.java b/core/src/main/java/core/packetproxy/quic/service/framegenerator/CryptoFramesToMessages.java similarity index 100% rename from src/main/java/core/packetproxy/quic/service/framegenerator/CryptoFramesToMessages.java rename to core/src/main/java/core/packetproxy/quic/service/framegenerator/CryptoFramesToMessages.java diff --git a/src/main/java/core/packetproxy/quic/service/framegenerator/MessagesToCryptoFrames.java b/core/src/main/java/core/packetproxy/quic/service/framegenerator/MessagesToCryptoFrames.java similarity index 100% rename from src/main/java/core/packetproxy/quic/service/framegenerator/MessagesToCryptoFrames.java rename to core/src/main/java/core/packetproxy/quic/service/framegenerator/MessagesToCryptoFrames.java diff --git a/src/main/java/core/packetproxy/quic/service/framegenerator/MessagesToStreamFrames.java b/core/src/main/java/core/packetproxy/quic/service/framegenerator/MessagesToStreamFrames.java similarity index 100% rename from src/main/java/core/packetproxy/quic/service/framegenerator/MessagesToStreamFrames.java rename to core/src/main/java/core/packetproxy/quic/service/framegenerator/MessagesToStreamFrames.java diff --git a/src/main/java/core/packetproxy/quic/service/framegenerator/StreamFramesToMessages.java b/core/src/main/java/core/packetproxy/quic/service/framegenerator/StreamFramesToMessages.java similarity index 100% rename from src/main/java/core/packetproxy/quic/service/framegenerator/StreamFramesToMessages.java rename to core/src/main/java/core/packetproxy/quic/service/framegenerator/StreamFramesToMessages.java diff --git a/src/main/java/core/packetproxy/quic/service/framegenerator/helper/ContinuousStream.java b/core/src/main/java/core/packetproxy/quic/service/framegenerator/helper/ContinuousStream.java similarity index 100% rename from src/main/java/core/packetproxy/quic/service/framegenerator/helper/ContinuousStream.java rename to core/src/main/java/core/packetproxy/quic/service/framegenerator/helper/ContinuousStream.java diff --git a/src/main/java/core/packetproxy/quic/service/framegenerator/helper/OneshotStream.java b/core/src/main/java/core/packetproxy/quic/service/framegenerator/helper/OneshotStream.java similarity index 100% rename from src/main/java/core/packetproxy/quic/service/framegenerator/helper/OneshotStream.java rename to core/src/main/java/core/packetproxy/quic/service/framegenerator/helper/OneshotStream.java diff --git a/src/main/java/core/packetproxy/quic/service/framegenerator/helper/ReceivedPacketNumbers.java b/core/src/main/java/core/packetproxy/quic/service/framegenerator/helper/ReceivedPacketNumbers.java similarity index 100% rename from src/main/java/core/packetproxy/quic/service/framegenerator/helper/ReceivedPacketNumbers.java rename to core/src/main/java/core/packetproxy/quic/service/framegenerator/helper/ReceivedPacketNumbers.java diff --git a/src/main/java/core/packetproxy/quic/service/handshake/ClientHandshake.java b/core/src/main/java/core/packetproxy/quic/service/handshake/ClientHandshake.java similarity index 100% rename from src/main/java/core/packetproxy/quic/service/handshake/ClientHandshake.java rename to core/src/main/java/core/packetproxy/quic/service/handshake/ClientHandshake.java diff --git a/src/main/java/core/packetproxy/quic/service/handshake/Handshake.java b/core/src/main/java/core/packetproxy/quic/service/handshake/Handshake.java similarity index 100% rename from src/main/java/core/packetproxy/quic/service/handshake/Handshake.java rename to core/src/main/java/core/packetproxy/quic/service/handshake/Handshake.java diff --git a/src/main/java/core/packetproxy/quic/service/handshake/HandshakeState.java b/core/src/main/java/core/packetproxy/quic/service/handshake/HandshakeState.java similarity index 100% rename from src/main/java/core/packetproxy/quic/service/handshake/HandshakeState.java rename to core/src/main/java/core/packetproxy/quic/service/handshake/HandshakeState.java diff --git a/src/main/java/core/packetproxy/quic/service/handshake/ServerHandshake.java b/core/src/main/java/core/packetproxy/quic/service/handshake/ServerHandshake.java similarity index 100% rename from src/main/java/core/packetproxy/quic/service/handshake/ServerHandshake.java rename to core/src/main/java/core/packetproxy/quic/service/handshake/ServerHandshake.java diff --git a/src/main/java/core/packetproxy/quic/service/key/Keys.java b/core/src/main/java/core/packetproxy/quic/service/key/Keys.java similarity index 100% rename from src/main/java/core/packetproxy/quic/service/key/Keys.java rename to core/src/main/java/core/packetproxy/quic/service/key/Keys.java diff --git a/src/main/java/core/packetproxy/quic/service/key/RoleKeys.java b/core/src/main/java/core/packetproxy/quic/service/key/RoleKeys.java similarity index 100% rename from src/main/java/core/packetproxy/quic/service/key/RoleKeys.java rename to core/src/main/java/core/packetproxy/quic/service/key/RoleKeys.java diff --git a/src/main/java/core/packetproxy/quic/service/packet/QuicPacketBuilder.java b/core/src/main/java/core/packetproxy/quic/service/packet/QuicPacketBuilder.java similarity index 100% rename from src/main/java/core/packetproxy/quic/service/packet/QuicPacketBuilder.java rename to core/src/main/java/core/packetproxy/quic/service/packet/QuicPacketBuilder.java diff --git a/src/main/java/core/packetproxy/quic/service/packet/QuicPacketParser.java b/core/src/main/java/core/packetproxy/quic/service/packet/QuicPacketParser.java similarity index 100% rename from src/main/java/core/packetproxy/quic/service/packet/QuicPacketParser.java rename to core/src/main/java/core/packetproxy/quic/service/packet/QuicPacketParser.java diff --git a/src/main/java/core/packetproxy/quic/service/pnspace/PnSpace.java b/core/src/main/java/core/packetproxy/quic/service/pnspace/PnSpace.java similarity index 100% rename from src/main/java/core/packetproxy/quic/service/pnspace/PnSpace.java rename to core/src/main/java/core/packetproxy/quic/service/pnspace/PnSpace.java diff --git a/src/main/java/core/packetproxy/quic/service/pnspace/PnSpaces.java b/core/src/main/java/core/packetproxy/quic/service/pnspace/PnSpaces.java similarity index 100% rename from src/main/java/core/packetproxy/quic/service/pnspace/PnSpaces.java rename to core/src/main/java/core/packetproxy/quic/service/pnspace/PnSpaces.java diff --git a/src/main/java/core/packetproxy/quic/service/pnspace/helper/LostPackets.java b/core/src/main/java/core/packetproxy/quic/service/pnspace/helper/LostPackets.java similarity index 100% rename from src/main/java/core/packetproxy/quic/service/pnspace/helper/LostPackets.java rename to core/src/main/java/core/packetproxy/quic/service/pnspace/helper/LostPackets.java diff --git a/src/main/java/core/packetproxy/quic/service/pnspace/helper/SendFrameQueue.java b/core/src/main/java/core/packetproxy/quic/service/pnspace/helper/SendFrameQueue.java similarity index 100% rename from src/main/java/core/packetproxy/quic/service/pnspace/helper/SendFrameQueue.java rename to core/src/main/java/core/packetproxy/quic/service/pnspace/helper/SendFrameQueue.java diff --git a/src/main/java/core/packetproxy/quic/service/pnspace/helper/SentPackets.java b/core/src/main/java/core/packetproxy/quic/service/pnspace/helper/SentPackets.java similarity index 100% rename from src/main/java/core/packetproxy/quic/service/pnspace/helper/SentPackets.java rename to core/src/main/java/core/packetproxy/quic/service/pnspace/helper/SentPackets.java diff --git a/src/main/java/core/packetproxy/quic/service/pnspace/level/ApplicationDataPnSpace.java b/core/src/main/java/core/packetproxy/quic/service/pnspace/level/ApplicationDataPnSpace.java similarity index 100% rename from src/main/java/core/packetproxy/quic/service/pnspace/level/ApplicationDataPnSpace.java rename to core/src/main/java/core/packetproxy/quic/service/pnspace/level/ApplicationDataPnSpace.java diff --git a/src/main/java/core/packetproxy/quic/service/pnspace/level/HandshakePnSpace.java b/core/src/main/java/core/packetproxy/quic/service/pnspace/level/HandshakePnSpace.java similarity index 100% rename from src/main/java/core/packetproxy/quic/service/pnspace/level/HandshakePnSpace.java rename to core/src/main/java/core/packetproxy/quic/service/pnspace/level/HandshakePnSpace.java diff --git a/src/main/java/core/packetproxy/quic/service/pnspace/level/InitialPnSpace.java b/core/src/main/java/core/packetproxy/quic/service/pnspace/level/InitialPnSpace.java similarity index 100% rename from src/main/java/core/packetproxy/quic/service/pnspace/level/InitialPnSpace.java rename to core/src/main/java/core/packetproxy/quic/service/pnspace/level/InitialPnSpace.java diff --git a/src/main/java/core/packetproxy/quic/service/transportparameter/TransportParameterParser.java b/core/src/main/java/core/packetproxy/quic/service/transportparameter/TransportParameterParser.java similarity index 100% rename from src/main/java/core/packetproxy/quic/service/transportparameter/TransportParameterParser.java rename to core/src/main/java/core/packetproxy/quic/service/transportparameter/TransportParameterParser.java diff --git a/src/main/java/core/packetproxy/quic/service/transportparameter/TransportParameters.java b/core/src/main/java/core/packetproxy/quic/service/transportparameter/TransportParameters.java similarity index 100% rename from src/main/java/core/packetproxy/quic/service/transportparameter/TransportParameters.java rename to core/src/main/java/core/packetproxy/quic/service/transportparameter/TransportParameters.java diff --git a/src/main/java/core/packetproxy/quic/utils/AwaitingException.java b/core/src/main/java/core/packetproxy/quic/utils/AwaitingException.java similarity index 100% rename from src/main/java/core/packetproxy/quic/utils/AwaitingException.java rename to core/src/main/java/core/packetproxy/quic/utils/AwaitingException.java diff --git a/src/main/java/core/packetproxy/quic/utils/Constants.java b/core/src/main/java/core/packetproxy/quic/utils/Constants.java similarity index 100% rename from src/main/java/core/packetproxy/quic/utils/Constants.java rename to core/src/main/java/core/packetproxy/quic/utils/Constants.java diff --git a/src/main/java/core/packetproxy/quic/utils/PacketNumbers.java b/core/src/main/java/core/packetproxy/quic/utils/PacketNumbers.java similarity index 100% rename from src/main/java/core/packetproxy/quic/utils/PacketNumbers.java rename to core/src/main/java/core/packetproxy/quic/utils/PacketNumbers.java diff --git a/src/main/java/core/packetproxy/quic/utils/ScheduledTimer.java b/core/src/main/java/core/packetproxy/quic/utils/ScheduledTimer.java similarity index 100% rename from src/main/java/core/packetproxy/quic/utils/ScheduledTimer.java rename to core/src/main/java/core/packetproxy/quic/utils/ScheduledTimer.java diff --git a/src/main/java/core/packetproxy/quic/value/ConnectionId.java b/core/src/main/java/core/packetproxy/quic/value/ConnectionId.java similarity index 100% rename from src/main/java/core/packetproxy/quic/value/ConnectionId.java rename to core/src/main/java/core/packetproxy/quic/value/ConnectionId.java diff --git a/src/main/java/core/packetproxy/quic/value/ConnectionIdPair.java b/core/src/main/java/core/packetproxy/quic/value/ConnectionIdPair.java similarity index 100% rename from src/main/java/core/packetproxy/quic/value/ConnectionIdPair.java rename to core/src/main/java/core/packetproxy/quic/value/ConnectionIdPair.java diff --git a/src/main/java/core/packetproxy/quic/value/FixedLengthPrecededBytes.java b/core/src/main/java/core/packetproxy/quic/value/FixedLengthPrecededBytes.java similarity index 100% rename from src/main/java/core/packetproxy/quic/value/FixedLengthPrecededBytes.java rename to core/src/main/java/core/packetproxy/quic/value/FixedLengthPrecededBytes.java diff --git a/src/main/java/core/packetproxy/quic/value/PacketNumber.java b/core/src/main/java/core/packetproxy/quic/value/PacketNumber.java similarity index 100% rename from src/main/java/core/packetproxy/quic/value/PacketNumber.java rename to core/src/main/java/core/packetproxy/quic/value/PacketNumber.java diff --git a/src/main/java/core/packetproxy/quic/value/QuicMessage.java b/core/src/main/java/core/packetproxy/quic/value/QuicMessage.java similarity index 100% rename from src/main/java/core/packetproxy/quic/value/QuicMessage.java rename to core/src/main/java/core/packetproxy/quic/value/QuicMessage.java diff --git a/src/main/java/core/packetproxy/quic/value/QuicMessages.java b/core/src/main/java/core/packetproxy/quic/value/QuicMessages.java similarity index 100% rename from src/main/java/core/packetproxy/quic/value/QuicMessages.java rename to core/src/main/java/core/packetproxy/quic/value/QuicMessages.java diff --git a/src/main/java/core/packetproxy/quic/value/SentPacket.java b/core/src/main/java/core/packetproxy/quic/value/SentPacket.java similarity index 100% rename from src/main/java/core/packetproxy/quic/value/SentPacket.java rename to core/src/main/java/core/packetproxy/quic/value/SentPacket.java diff --git a/src/main/java/core/packetproxy/quic/value/SimpleBytes.java b/core/src/main/java/core/packetproxy/quic/value/SimpleBytes.java similarity index 100% rename from src/main/java/core/packetproxy/quic/value/SimpleBytes.java rename to core/src/main/java/core/packetproxy/quic/value/SimpleBytes.java diff --git a/src/main/java/core/packetproxy/quic/value/StreamId.java b/core/src/main/java/core/packetproxy/quic/value/StreamId.java similarity index 100% rename from src/main/java/core/packetproxy/quic/value/StreamId.java rename to core/src/main/java/core/packetproxy/quic/value/StreamId.java diff --git a/src/main/java/core/packetproxy/quic/value/Token.java b/core/src/main/java/core/packetproxy/quic/value/Token.java similarity index 100% rename from src/main/java/core/packetproxy/quic/value/Token.java rename to core/src/main/java/core/packetproxy/quic/value/Token.java diff --git a/src/main/java/core/packetproxy/quic/value/TruncatedPacketNumber.java b/core/src/main/java/core/packetproxy/quic/value/TruncatedPacketNumber.java similarity index 100% rename from src/main/java/core/packetproxy/quic/value/TruncatedPacketNumber.java rename to core/src/main/java/core/packetproxy/quic/value/TruncatedPacketNumber.java diff --git a/src/main/java/core/packetproxy/quic/value/VariableLengthInteger.java b/core/src/main/java/core/packetproxy/quic/value/VariableLengthInteger.java similarity index 100% rename from src/main/java/core/packetproxy/quic/value/VariableLengthInteger.java rename to core/src/main/java/core/packetproxy/quic/value/VariableLengthInteger.java diff --git a/src/main/java/core/packetproxy/quic/value/VariableLengthPrecededBytes.java b/core/src/main/java/core/packetproxy/quic/value/VariableLengthPrecededBytes.java similarity index 100% rename from src/main/java/core/packetproxy/quic/value/VariableLengthPrecededBytes.java rename to core/src/main/java/core/packetproxy/quic/value/VariableLengthPrecededBytes.java diff --git a/src/main/java/core/packetproxy/quic/value/frame/AckEcnFrame.java b/core/src/main/java/core/packetproxy/quic/value/frame/AckEcnFrame.java similarity index 100% rename from src/main/java/core/packetproxy/quic/value/frame/AckEcnFrame.java rename to core/src/main/java/core/packetproxy/quic/value/frame/AckEcnFrame.java diff --git a/src/main/java/core/packetproxy/quic/value/frame/AckFrame.java b/core/src/main/java/core/packetproxy/quic/value/frame/AckFrame.java similarity index 100% rename from src/main/java/core/packetproxy/quic/value/frame/AckFrame.java rename to core/src/main/java/core/packetproxy/quic/value/frame/AckFrame.java diff --git a/src/main/java/core/packetproxy/quic/value/frame/ConnectionCloseFrame.java b/core/src/main/java/core/packetproxy/quic/value/frame/ConnectionCloseFrame.java similarity index 100% rename from src/main/java/core/packetproxy/quic/value/frame/ConnectionCloseFrame.java rename to core/src/main/java/core/packetproxy/quic/value/frame/ConnectionCloseFrame.java diff --git a/src/main/java/core/packetproxy/quic/value/frame/CryptoFrame.java b/core/src/main/java/core/packetproxy/quic/value/frame/CryptoFrame.java similarity index 100% rename from src/main/java/core/packetproxy/quic/value/frame/CryptoFrame.java rename to core/src/main/java/core/packetproxy/quic/value/frame/CryptoFrame.java diff --git a/src/main/java/core/packetproxy/quic/value/frame/Frame.java b/core/src/main/java/core/packetproxy/quic/value/frame/Frame.java similarity index 100% rename from src/main/java/core/packetproxy/quic/value/frame/Frame.java rename to core/src/main/java/core/packetproxy/quic/value/frame/Frame.java diff --git a/src/main/java/core/packetproxy/quic/value/frame/HandshakeDoneFrame.java b/core/src/main/java/core/packetproxy/quic/value/frame/HandshakeDoneFrame.java similarity index 100% rename from src/main/java/core/packetproxy/quic/value/frame/HandshakeDoneFrame.java rename to core/src/main/java/core/packetproxy/quic/value/frame/HandshakeDoneFrame.java diff --git a/src/main/java/core/packetproxy/quic/value/frame/MaxDataFrame.java b/core/src/main/java/core/packetproxy/quic/value/frame/MaxDataFrame.java similarity index 100% rename from src/main/java/core/packetproxy/quic/value/frame/MaxDataFrame.java rename to core/src/main/java/core/packetproxy/quic/value/frame/MaxDataFrame.java diff --git a/src/main/java/core/packetproxy/quic/value/frame/NewConnectionIdFrame.java b/core/src/main/java/core/packetproxy/quic/value/frame/NewConnectionIdFrame.java similarity index 100% rename from src/main/java/core/packetproxy/quic/value/frame/NewConnectionIdFrame.java rename to core/src/main/java/core/packetproxy/quic/value/frame/NewConnectionIdFrame.java diff --git a/src/main/java/core/packetproxy/quic/value/frame/NewTokenFrame.java b/core/src/main/java/core/packetproxy/quic/value/frame/NewTokenFrame.java similarity index 100% rename from src/main/java/core/packetproxy/quic/value/frame/NewTokenFrame.java rename to core/src/main/java/core/packetproxy/quic/value/frame/NewTokenFrame.java diff --git a/src/main/java/core/packetproxy/quic/value/frame/PaddingFrame.java b/core/src/main/java/core/packetproxy/quic/value/frame/PaddingFrame.java similarity index 100% rename from src/main/java/core/packetproxy/quic/value/frame/PaddingFrame.java rename to core/src/main/java/core/packetproxy/quic/value/frame/PaddingFrame.java diff --git a/src/main/java/core/packetproxy/quic/value/frame/PingFrame.java b/core/src/main/java/core/packetproxy/quic/value/frame/PingFrame.java similarity index 100% rename from src/main/java/core/packetproxy/quic/value/frame/PingFrame.java rename to core/src/main/java/core/packetproxy/quic/value/frame/PingFrame.java diff --git a/src/main/java/core/packetproxy/quic/value/frame/ResetStreamFrame.java b/core/src/main/java/core/packetproxy/quic/value/frame/ResetStreamFrame.java similarity index 100% rename from src/main/java/core/packetproxy/quic/value/frame/ResetStreamFrame.java rename to core/src/main/java/core/packetproxy/quic/value/frame/ResetStreamFrame.java diff --git a/src/main/java/core/packetproxy/quic/value/frame/StopSendingFrame.java b/core/src/main/java/core/packetproxy/quic/value/frame/StopSendingFrame.java similarity index 100% rename from src/main/java/core/packetproxy/quic/value/frame/StopSendingFrame.java rename to core/src/main/java/core/packetproxy/quic/value/frame/StopSendingFrame.java diff --git a/src/main/java/core/packetproxy/quic/value/frame/StreamDataBlockedFrame.java b/core/src/main/java/core/packetproxy/quic/value/frame/StreamDataBlockedFrame.java similarity index 100% rename from src/main/java/core/packetproxy/quic/value/frame/StreamDataBlockedFrame.java rename to core/src/main/java/core/packetproxy/quic/value/frame/StreamDataBlockedFrame.java diff --git a/src/main/java/core/packetproxy/quic/value/frame/StreamFrame.java b/core/src/main/java/core/packetproxy/quic/value/frame/StreamFrame.java similarity index 100% rename from src/main/java/core/packetproxy/quic/value/frame/StreamFrame.java rename to core/src/main/java/core/packetproxy/quic/value/frame/StreamFrame.java diff --git a/src/main/java/core/packetproxy/quic/value/frame/StreamsBlockedBidiFrame.java b/core/src/main/java/core/packetproxy/quic/value/frame/StreamsBlockedBidiFrame.java similarity index 100% rename from src/main/java/core/packetproxy/quic/value/frame/StreamsBlockedBidiFrame.java rename to core/src/main/java/core/packetproxy/quic/value/frame/StreamsBlockedBidiFrame.java diff --git a/src/main/java/core/packetproxy/quic/value/frame/StreamsBlockedUniFrame.java b/core/src/main/java/core/packetproxy/quic/value/frame/StreamsBlockedUniFrame.java similarity index 100% rename from src/main/java/core/packetproxy/quic/value/frame/StreamsBlockedUniFrame.java rename to core/src/main/java/core/packetproxy/quic/value/frame/StreamsBlockedUniFrame.java diff --git a/src/main/java/core/packetproxy/quic/value/frame/UnknownFrame.java b/core/src/main/java/core/packetproxy/quic/value/frame/UnknownFrame.java similarity index 100% rename from src/main/java/core/packetproxy/quic/value/frame/UnknownFrame.java rename to core/src/main/java/core/packetproxy/quic/value/frame/UnknownFrame.java diff --git a/src/main/java/core/packetproxy/quic/value/frame/helper/AckRange.java b/core/src/main/java/core/packetproxy/quic/value/frame/helper/AckRange.java similarity index 100% rename from src/main/java/core/packetproxy/quic/value/frame/helper/AckRange.java rename to core/src/main/java/core/packetproxy/quic/value/frame/helper/AckRange.java diff --git a/src/main/java/core/packetproxy/quic/value/frame/helper/AckRanges.java b/core/src/main/java/core/packetproxy/quic/value/frame/helper/AckRanges.java similarity index 100% rename from src/main/java/core/packetproxy/quic/value/frame/helper/AckRanges.java rename to core/src/main/java/core/packetproxy/quic/value/frame/helper/AckRanges.java diff --git a/src/main/java/core/packetproxy/quic/value/key/Key.java b/core/src/main/java/core/packetproxy/quic/value/key/Key.java similarity index 100% rename from src/main/java/core/packetproxy/quic/value/key/Key.java rename to core/src/main/java/core/packetproxy/quic/value/key/Key.java diff --git a/src/main/java/core/packetproxy/quic/value/key/level/ApplicationKey.java b/core/src/main/java/core/packetproxy/quic/value/key/level/ApplicationKey.java similarity index 100% rename from src/main/java/core/packetproxy/quic/value/key/level/ApplicationKey.java rename to core/src/main/java/core/packetproxy/quic/value/key/level/ApplicationKey.java diff --git a/src/main/java/core/packetproxy/quic/value/key/level/HandshakeKey.java b/core/src/main/java/core/packetproxy/quic/value/key/level/HandshakeKey.java similarity index 100% rename from src/main/java/core/packetproxy/quic/value/key/level/HandshakeKey.java rename to core/src/main/java/core/packetproxy/quic/value/key/level/HandshakeKey.java diff --git a/src/main/java/core/packetproxy/quic/value/key/level/InitialKey.java b/core/src/main/java/core/packetproxy/quic/value/key/level/InitialKey.java similarity index 100% rename from src/main/java/core/packetproxy/quic/value/key/level/InitialKey.java rename to core/src/main/java/core/packetproxy/quic/value/key/level/InitialKey.java diff --git a/src/main/java/core/packetproxy/quic/value/key/level/ZeroRttKey.java b/core/src/main/java/core/packetproxy/quic/value/key/level/ZeroRttKey.java similarity index 100% rename from src/main/java/core/packetproxy/quic/value/key/level/ZeroRttKey.java rename to core/src/main/java/core/packetproxy/quic/value/key/level/ZeroRttKey.java diff --git a/src/main/java/core/packetproxy/quic/value/packet/PnSpacePacket.java b/core/src/main/java/core/packetproxy/quic/value/packet/PnSpacePacket.java similarity index 100% rename from src/main/java/core/packetproxy/quic/value/packet/PnSpacePacket.java rename to core/src/main/java/core/packetproxy/quic/value/packet/PnSpacePacket.java diff --git a/src/main/java/core/packetproxy/quic/value/packet/QuicPacket.java b/core/src/main/java/core/packetproxy/quic/value/packet/QuicPacket.java similarity index 100% rename from src/main/java/core/packetproxy/quic/value/packet/QuicPacket.java rename to core/src/main/java/core/packetproxy/quic/value/packet/QuicPacket.java diff --git a/src/main/java/core/packetproxy/quic/value/packet/longheader/LongHeaderPacket.java b/core/src/main/java/core/packetproxy/quic/value/packet/longheader/LongHeaderPacket.java similarity index 100% rename from src/main/java/core/packetproxy/quic/value/packet/longheader/LongHeaderPacket.java rename to core/src/main/java/core/packetproxy/quic/value/packet/longheader/LongHeaderPacket.java diff --git a/src/main/java/core/packetproxy/quic/value/packet/longheader/LongHeaderPnSpacePacket.java b/core/src/main/java/core/packetproxy/quic/value/packet/longheader/LongHeaderPnSpacePacket.java similarity index 100% rename from src/main/java/core/packetproxy/quic/value/packet/longheader/LongHeaderPnSpacePacket.java rename to core/src/main/java/core/packetproxy/quic/value/packet/longheader/LongHeaderPnSpacePacket.java diff --git a/src/main/java/core/packetproxy/quic/value/packet/longheader/RetryPacket.java b/core/src/main/java/core/packetproxy/quic/value/packet/longheader/RetryPacket.java similarity index 100% rename from src/main/java/core/packetproxy/quic/value/packet/longheader/RetryPacket.java rename to core/src/main/java/core/packetproxy/quic/value/packet/longheader/RetryPacket.java diff --git a/src/main/java/core/packetproxy/quic/value/packet/longheader/pnspace/HandshakePacket.java b/core/src/main/java/core/packetproxy/quic/value/packet/longheader/pnspace/HandshakePacket.java similarity index 100% rename from src/main/java/core/packetproxy/quic/value/packet/longheader/pnspace/HandshakePacket.java rename to core/src/main/java/core/packetproxy/quic/value/packet/longheader/pnspace/HandshakePacket.java diff --git a/src/main/java/core/packetproxy/quic/value/packet/longheader/pnspace/InitialPacket.java b/core/src/main/java/core/packetproxy/quic/value/packet/longheader/pnspace/InitialPacket.java similarity index 100% rename from src/main/java/core/packetproxy/quic/value/packet/longheader/pnspace/InitialPacket.java rename to core/src/main/java/core/packetproxy/quic/value/packet/longheader/pnspace/InitialPacket.java diff --git a/src/main/java/core/packetproxy/quic/value/packet/longheader/pnspace/ZeroRttPacket.java b/core/src/main/java/core/packetproxy/quic/value/packet/longheader/pnspace/ZeroRttPacket.java similarity index 100% rename from src/main/java/core/packetproxy/quic/value/packet/longheader/pnspace/ZeroRttPacket.java rename to core/src/main/java/core/packetproxy/quic/value/packet/longheader/pnspace/ZeroRttPacket.java diff --git a/src/main/java/core/packetproxy/quic/value/packet/shortheader/ShortHeaderPacket.java b/core/src/main/java/core/packetproxy/quic/value/packet/shortheader/ShortHeaderPacket.java similarity index 100% rename from src/main/java/core/packetproxy/quic/value/packet/shortheader/ShortHeaderPacket.java rename to core/src/main/java/core/packetproxy/quic/value/packet/shortheader/ShortHeaderPacket.java diff --git a/src/main/java/core/packetproxy/quic/value/transportparameter/TransportParameter.java b/core/src/main/java/core/packetproxy/quic/value/transportparameter/TransportParameter.java similarity index 100% rename from src/main/java/core/packetproxy/quic/value/transportparameter/TransportParameter.java rename to core/src/main/java/core/packetproxy/quic/value/transportparameter/TransportParameter.java diff --git a/src/main/java/core/packetproxy/quic/value/transportparameter/UnknownParameter.java b/core/src/main/java/core/packetproxy/quic/value/transportparameter/UnknownParameter.java similarity index 100% rename from src/main/java/core/packetproxy/quic/value/transportparameter/UnknownParameter.java rename to core/src/main/java/core/packetproxy/quic/value/transportparameter/UnknownParameter.java diff --git a/src/main/java/core/packetproxy/quic/value/transportparameter/bool/DisableActiveMigrationParameter.java b/core/src/main/java/core/packetproxy/quic/value/transportparameter/bool/DisableActiveMigrationParameter.java similarity index 100% rename from src/main/java/core/packetproxy/quic/value/transportparameter/bool/DisableActiveMigrationParameter.java rename to core/src/main/java/core/packetproxy/quic/value/transportparameter/bool/DisableActiveMigrationParameter.java diff --git a/src/main/java/core/packetproxy/quic/value/transportparameter/bool/ExpGreaseQuicBitParameter.java b/core/src/main/java/core/packetproxy/quic/value/transportparameter/bool/ExpGreaseQuicBitParameter.java similarity index 100% rename from src/main/java/core/packetproxy/quic/value/transportparameter/bool/ExpGreaseQuicBitParameter.java rename to core/src/main/java/core/packetproxy/quic/value/transportparameter/bool/ExpGreaseQuicBitParameter.java diff --git a/src/main/java/core/packetproxy/quic/value/transportparameter/bytearray/InitSrcConnIdParameter.java b/core/src/main/java/core/packetproxy/quic/value/transportparameter/bytearray/InitSrcConnIdParameter.java similarity index 100% rename from src/main/java/core/packetproxy/quic/value/transportparameter/bytearray/InitSrcConnIdParameter.java rename to core/src/main/java/core/packetproxy/quic/value/transportparameter/bytearray/InitSrcConnIdParameter.java diff --git a/src/main/java/core/packetproxy/quic/value/transportparameter/bytearray/OrigDestConnIdParameter.java b/core/src/main/java/core/packetproxy/quic/value/transportparameter/bytearray/OrigDestConnIdParameter.java similarity index 100% rename from src/main/java/core/packetproxy/quic/value/transportparameter/bytearray/OrigDestConnIdParameter.java rename to core/src/main/java/core/packetproxy/quic/value/transportparameter/bytearray/OrigDestConnIdParameter.java diff --git a/src/main/java/core/packetproxy/quic/value/transportparameter/bytearray/RetrySrcConnIdParameter.java b/core/src/main/java/core/packetproxy/quic/value/transportparameter/bytearray/RetrySrcConnIdParameter.java similarity index 100% rename from src/main/java/core/packetproxy/quic/value/transportparameter/bytearray/RetrySrcConnIdParameter.java rename to core/src/main/java/core/packetproxy/quic/value/transportparameter/bytearray/RetrySrcConnIdParameter.java diff --git a/src/main/java/core/packetproxy/quic/value/transportparameter/bytearray/StatelessResetTokenParameter.java b/core/src/main/java/core/packetproxy/quic/value/transportparameter/bytearray/StatelessResetTokenParameter.java similarity index 100% rename from src/main/java/core/packetproxy/quic/value/transportparameter/bytearray/StatelessResetTokenParameter.java rename to core/src/main/java/core/packetproxy/quic/value/transportparameter/bytearray/StatelessResetTokenParameter.java diff --git a/src/main/java/core/packetproxy/quic/value/transportparameter/complex/PreferredAddressParameter.java b/core/src/main/java/core/packetproxy/quic/value/transportparameter/complex/PreferredAddressParameter.java similarity index 100% rename from src/main/java/core/packetproxy/quic/value/transportparameter/complex/PreferredAddressParameter.java rename to core/src/main/java/core/packetproxy/quic/value/transportparameter/complex/PreferredAddressParameter.java diff --git a/src/main/java/core/packetproxy/quic/value/transportparameter/number/AckDelayExponentParameter.java b/core/src/main/java/core/packetproxy/quic/value/transportparameter/number/AckDelayExponentParameter.java similarity index 100% rename from src/main/java/core/packetproxy/quic/value/transportparameter/number/AckDelayExponentParameter.java rename to core/src/main/java/core/packetproxy/quic/value/transportparameter/number/AckDelayExponentParameter.java diff --git a/src/main/java/core/packetproxy/quic/value/transportparameter/number/ActiveConnIdLimitParameter.java b/core/src/main/java/core/packetproxy/quic/value/transportparameter/number/ActiveConnIdLimitParameter.java similarity index 100% rename from src/main/java/core/packetproxy/quic/value/transportparameter/number/ActiveConnIdLimitParameter.java rename to core/src/main/java/core/packetproxy/quic/value/transportparameter/number/ActiveConnIdLimitParameter.java diff --git a/src/main/java/core/packetproxy/quic/value/transportparameter/number/ExpMinAckDelayParameter.java b/core/src/main/java/core/packetproxy/quic/value/transportparameter/number/ExpMinAckDelayParameter.java similarity index 100% rename from src/main/java/core/packetproxy/quic/value/transportparameter/number/ExpMinAckDelayParameter.java rename to core/src/main/java/core/packetproxy/quic/value/transportparameter/number/ExpMinAckDelayParameter.java diff --git a/src/main/java/core/packetproxy/quic/value/transportparameter/number/InitMaxDataParameter.java b/core/src/main/java/core/packetproxy/quic/value/transportparameter/number/InitMaxDataParameter.java similarity index 100% rename from src/main/java/core/packetproxy/quic/value/transportparameter/number/InitMaxDataParameter.java rename to core/src/main/java/core/packetproxy/quic/value/transportparameter/number/InitMaxDataParameter.java diff --git a/src/main/java/core/packetproxy/quic/value/transportparameter/number/InitMaxStreamBidiParameter.java b/core/src/main/java/core/packetproxy/quic/value/transportparameter/number/InitMaxStreamBidiParameter.java similarity index 100% rename from src/main/java/core/packetproxy/quic/value/transportparameter/number/InitMaxStreamBidiParameter.java rename to core/src/main/java/core/packetproxy/quic/value/transportparameter/number/InitMaxStreamBidiParameter.java diff --git a/src/main/java/core/packetproxy/quic/value/transportparameter/number/InitMaxStreamDataBidiLocalParameter.java b/core/src/main/java/core/packetproxy/quic/value/transportparameter/number/InitMaxStreamDataBidiLocalParameter.java similarity index 100% rename from src/main/java/core/packetproxy/quic/value/transportparameter/number/InitMaxStreamDataBidiLocalParameter.java rename to core/src/main/java/core/packetproxy/quic/value/transportparameter/number/InitMaxStreamDataBidiLocalParameter.java diff --git a/src/main/java/core/packetproxy/quic/value/transportparameter/number/InitMaxStreamDataBidiRemoteParameter.java b/core/src/main/java/core/packetproxy/quic/value/transportparameter/number/InitMaxStreamDataBidiRemoteParameter.java similarity index 100% rename from src/main/java/core/packetproxy/quic/value/transportparameter/number/InitMaxStreamDataBidiRemoteParameter.java rename to core/src/main/java/core/packetproxy/quic/value/transportparameter/number/InitMaxStreamDataBidiRemoteParameter.java diff --git a/src/main/java/core/packetproxy/quic/value/transportparameter/number/InitMaxStreamDataUniParameter.java b/core/src/main/java/core/packetproxy/quic/value/transportparameter/number/InitMaxStreamDataUniParameter.java similarity index 100% rename from src/main/java/core/packetproxy/quic/value/transportparameter/number/InitMaxStreamDataUniParameter.java rename to core/src/main/java/core/packetproxy/quic/value/transportparameter/number/InitMaxStreamDataUniParameter.java diff --git a/src/main/java/core/packetproxy/quic/value/transportparameter/number/InitMaxStreamUniParameter.java b/core/src/main/java/core/packetproxy/quic/value/transportparameter/number/InitMaxStreamUniParameter.java similarity index 100% rename from src/main/java/core/packetproxy/quic/value/transportparameter/number/InitMaxStreamUniParameter.java rename to core/src/main/java/core/packetproxy/quic/value/transportparameter/number/InitMaxStreamUniParameter.java diff --git a/src/main/java/core/packetproxy/quic/value/transportparameter/number/MaxAckDelayParameter.java b/core/src/main/java/core/packetproxy/quic/value/transportparameter/number/MaxAckDelayParameter.java similarity index 100% rename from src/main/java/core/packetproxy/quic/value/transportparameter/number/MaxAckDelayParameter.java rename to core/src/main/java/core/packetproxy/quic/value/transportparameter/number/MaxAckDelayParameter.java diff --git a/src/main/java/core/packetproxy/quic/value/transportparameter/number/MaxIdleTimeoutParameter.java b/core/src/main/java/core/packetproxy/quic/value/transportparameter/number/MaxIdleTimeoutParameter.java similarity index 100% rename from src/main/java/core/packetproxy/quic/value/transportparameter/number/MaxIdleTimeoutParameter.java rename to core/src/main/java/core/packetproxy/quic/value/transportparameter/number/MaxIdleTimeoutParameter.java diff --git a/src/main/java/core/packetproxy/quic/value/transportparameter/number/MaxUdpPayloadSizeParameter.java b/core/src/main/java/core/packetproxy/quic/value/transportparameter/number/MaxUdpPayloadSizeParameter.java similarity index 100% rename from src/main/java/core/packetproxy/quic/value/transportparameter/number/MaxUdpPayloadSizeParameter.java rename to core/src/main/java/core/packetproxy/quic/value/transportparameter/number/MaxUdpPayloadSizeParameter.java diff --git a/src/main/java/core/packetproxy/quic/value/transportparameter/number/OldMinAckDelayParameter.java b/core/src/main/java/core/packetproxy/quic/value/transportparameter/number/OldMinAckDelayParameter.java similarity index 100% rename from src/main/java/core/packetproxy/quic/value/transportparameter/number/OldMinAckDelayParameter.java rename to core/src/main/java/core/packetproxy/quic/value/transportparameter/number/OldMinAckDelayParameter.java diff --git a/src/main/java/core/packetproxy/quic/value/transportparameter/number/OldTimestampParameter.java b/core/src/main/java/core/packetproxy/quic/value/transportparameter/number/OldTimestampParameter.java similarity index 100% rename from src/main/java/core/packetproxy/quic/value/transportparameter/number/OldTimestampParameter.java rename to core/src/main/java/core/packetproxy/quic/value/transportparameter/number/OldTimestampParameter.java diff --git a/src/main/java/core/packetproxy/util/CharSetUtility.java b/core/src/main/java/core/packetproxy/util/CharSetUtility.java similarity index 100% rename from src/main/java/core/packetproxy/util/CharSetUtility.java rename to core/src/main/java/core/packetproxy/util/CharSetUtility.java diff --git a/src/main/java/core/packetproxy/util/PacketProxyUtility.java b/core/src/main/java/core/packetproxy/util/PacketProxyUtility.java similarity index 100% rename from src/main/java/core/packetproxy/util/PacketProxyUtility.java rename to core/src/main/java/core/packetproxy/util/PacketProxyUtility.java diff --git a/src/main/java/core/packetproxy/util/SearchBox.java b/core/src/main/java/core/packetproxy/util/SearchBox.java similarity index 100% rename from src/main/java/core/packetproxy/util/SearchBox.java rename to core/src/main/java/core/packetproxy/util/SearchBox.java diff --git a/src/main/java/core/packetproxy/util/Throwing.java b/core/src/main/java/core/packetproxy/util/Throwing.java similarity index 100% rename from src/main/java/core/packetproxy/util/Throwing.java rename to core/src/main/java/core/packetproxy/util/Throwing.java diff --git a/src/main/java/core/packetproxy/util/ThrowingBiConsumer.java b/core/src/main/java/core/packetproxy/util/ThrowingBiConsumer.java similarity index 100% rename from src/main/java/core/packetproxy/util/ThrowingBiConsumer.java rename to core/src/main/java/core/packetproxy/util/ThrowingBiConsumer.java diff --git a/src/main/java/core/packetproxy/util/ThrowingConsumer.java b/core/src/main/java/core/packetproxy/util/ThrowingConsumer.java similarity index 100% rename from src/main/java/core/packetproxy/util/ThrowingConsumer.java rename to core/src/main/java/core/packetproxy/util/ThrowingConsumer.java diff --git a/src/main/java/core/packetproxy/util/ThrowingFunction.java b/core/src/main/java/core/packetproxy/util/ThrowingFunction.java similarity index 100% rename from src/main/java/core/packetproxy/util/ThrowingFunction.java rename to core/src/main/java/core/packetproxy/util/ThrowingFunction.java diff --git a/src/main/java/core/packetproxy/util/ThrowingPredicate.java b/core/src/main/java/core/packetproxy/util/ThrowingPredicate.java similarity index 100% rename from src/main/java/core/packetproxy/util/ThrowingPredicate.java rename to core/src/main/java/core/packetproxy/util/ThrowingPredicate.java diff --git a/src/main/java/core/packetproxy/util/WithCounter.java b/core/src/main/java/core/packetproxy/util/WithCounter.java similarity index 100% rename from src/main/java/core/packetproxy/util/WithCounter.java rename to core/src/main/java/core/packetproxy/util/WithCounter.java diff --git a/src/main/java/core/packetproxy/vulchecker/JWTVulChecker.java b/core/src/main/java/core/packetproxy/vulchecker/JWTVulChecker.java similarity index 100% rename from src/main/java/core/packetproxy/vulchecker/JWTVulChecker.java rename to core/src/main/java/core/packetproxy/vulchecker/JWTVulChecker.java diff --git a/src/main/java/core/packetproxy/vulchecker/NumberVulChecker.java b/core/src/main/java/core/packetproxy/vulchecker/NumberVulChecker.java similarity index 100% rename from src/main/java/core/packetproxy/vulchecker/NumberVulChecker.java rename to core/src/main/java/core/packetproxy/vulchecker/NumberVulChecker.java diff --git a/src/main/java/core/packetproxy/vulchecker/VulCheckPattern.java b/core/src/main/java/core/packetproxy/vulchecker/VulCheckPattern.java similarity index 100% rename from src/main/java/core/packetproxy/vulchecker/VulCheckPattern.java rename to core/src/main/java/core/packetproxy/vulchecker/VulCheckPattern.java diff --git a/src/main/java/core/packetproxy/vulchecker/VulChecker.java b/core/src/main/java/core/packetproxy/vulchecker/VulChecker.java similarity index 100% rename from src/main/java/core/packetproxy/vulchecker/VulChecker.java rename to core/src/main/java/core/packetproxy/vulchecker/VulChecker.java diff --git a/src/main/java/core/packetproxy/vulchecker/generator/DecimalsGenerator.java b/core/src/main/java/core/packetproxy/vulchecker/generator/DecimalsGenerator.java similarity index 100% rename from src/main/java/core/packetproxy/vulchecker/generator/DecimalsGenerator.java rename to core/src/main/java/core/packetproxy/vulchecker/generator/DecimalsGenerator.java diff --git a/src/main/java/core/packetproxy/vulchecker/generator/Generator.java b/core/src/main/java/core/packetproxy/vulchecker/generator/Generator.java similarity index 100% rename from src/main/java/core/packetproxy/vulchecker/generator/Generator.java rename to core/src/main/java/core/packetproxy/vulchecker/generator/Generator.java diff --git a/src/main/java/core/packetproxy/vulchecker/generator/IntegerOverflowGenerator.java b/core/src/main/java/core/packetproxy/vulchecker/generator/IntegerOverflowGenerator.java similarity index 100% rename from src/main/java/core/packetproxy/vulchecker/generator/IntegerOverflowGenerator.java rename to core/src/main/java/core/packetproxy/vulchecker/generator/IntegerOverflowGenerator.java diff --git a/src/main/java/core/packetproxy/vulchecker/generator/IntegerOverflowMinusOneGenerator.java b/core/src/main/java/core/packetproxy/vulchecker/generator/IntegerOverflowMinusOneGenerator.java similarity index 100% rename from src/main/java/core/packetproxy/vulchecker/generator/IntegerOverflowMinusOneGenerator.java rename to core/src/main/java/core/packetproxy/vulchecker/generator/IntegerOverflowMinusOneGenerator.java diff --git a/src/main/java/core/packetproxy/vulchecker/generator/IntegerOverflowPlusOneGenerator.java b/core/src/main/java/core/packetproxy/vulchecker/generator/IntegerOverflowPlusOneGenerator.java similarity index 100% rename from src/main/java/core/packetproxy/vulchecker/generator/IntegerOverflowPlusOneGenerator.java rename to core/src/main/java/core/packetproxy/vulchecker/generator/IntegerOverflowPlusOneGenerator.java diff --git a/src/main/java/core/packetproxy/vulchecker/generator/JWTAlgHS256.java b/core/src/main/java/core/packetproxy/vulchecker/generator/JWTAlgHS256.java similarity index 100% rename from src/main/java/core/packetproxy/vulchecker/generator/JWTAlgHS256.java rename to core/src/main/java/core/packetproxy/vulchecker/generator/JWTAlgHS256.java diff --git a/src/main/java/core/packetproxy/vulchecker/generator/JWTAlgNone.java b/core/src/main/java/core/packetproxy/vulchecker/generator/JWTAlgNone.java similarity index 100% rename from src/main/java/core/packetproxy/vulchecker/generator/JWTAlgNone.java rename to core/src/main/java/core/packetproxy/vulchecker/generator/JWTAlgNone.java diff --git a/src/main/java/core/packetproxy/vulchecker/generator/JWTAlgRS256.java b/core/src/main/java/core/packetproxy/vulchecker/generator/JWTAlgRS256.java similarity index 100% rename from src/main/java/core/packetproxy/vulchecker/generator/JWTAlgRS256.java rename to core/src/main/java/core/packetproxy/vulchecker/generator/JWTAlgRS256.java diff --git a/src/main/java/core/packetproxy/vulchecker/generator/JWTHeaderAddSpecifiedJKUGenerator.java b/core/src/main/java/core/packetproxy/vulchecker/generator/JWTHeaderAddSpecifiedJKUGenerator.java similarity index 100% rename from src/main/java/core/packetproxy/vulchecker/generator/JWTHeaderAddSpecifiedJKUGenerator.java rename to core/src/main/java/core/packetproxy/vulchecker/generator/JWTHeaderAddSpecifiedJKUGenerator.java diff --git a/src/main/java/core/packetproxy/vulchecker/generator/JWTHeaderAlgNoneGenerator.java b/core/src/main/java/core/packetproxy/vulchecker/generator/JWTHeaderAlgNoneGenerator.java similarity index 100% rename from src/main/java/core/packetproxy/vulchecker/generator/JWTHeaderAlgNoneGenerator.java rename to core/src/main/java/core/packetproxy/vulchecker/generator/JWTHeaderAlgNoneGenerator.java diff --git a/src/main/java/core/packetproxy/vulchecker/generator/JWTHeaderJKUModifiedByAtmarkGenerator.java b/core/src/main/java/core/packetproxy/vulchecker/generator/JWTHeaderJKUModifiedByAtmarkGenerator.java similarity index 100% rename from src/main/java/core/packetproxy/vulchecker/generator/JWTHeaderJKUModifiedByAtmarkGenerator.java rename to core/src/main/java/core/packetproxy/vulchecker/generator/JWTHeaderJKUModifiedByAtmarkGenerator.java diff --git a/src/main/java/core/packetproxy/vulchecker/generator/JWTHeaderJKUModifiedGenerator.java b/core/src/main/java/core/packetproxy/vulchecker/generator/JWTHeaderJKUModifiedGenerator.java similarity index 100% rename from src/main/java/core/packetproxy/vulchecker/generator/JWTHeaderJKUModifiedGenerator.java rename to core/src/main/java/core/packetproxy/vulchecker/generator/JWTHeaderJKUModifiedGenerator.java diff --git a/src/main/java/core/packetproxy/vulchecker/generator/JWTHeaderJWKGenerator.java b/core/src/main/java/core/packetproxy/vulchecker/generator/JWTHeaderJWKGenerator.java similarity index 100% rename from src/main/java/core/packetproxy/vulchecker/generator/JWTHeaderJWKGenerator.java rename to core/src/main/java/core/packetproxy/vulchecker/generator/JWTHeaderJWKGenerator.java diff --git a/src/main/java/core/packetproxy/vulchecker/generator/JWTHeaderModifiedGenerator.java b/core/src/main/java/core/packetproxy/vulchecker/generator/JWTHeaderModifiedGenerator.java similarity index 100% rename from src/main/java/core/packetproxy/vulchecker/generator/JWTHeaderModifiedGenerator.java rename to core/src/main/java/core/packetproxy/vulchecker/generator/JWTHeaderModifiedGenerator.java diff --git a/src/main/java/core/packetproxy/vulchecker/generator/JWTHeaderRS256toHS256Generator.java b/core/src/main/java/core/packetproxy/vulchecker/generator/JWTHeaderRS256toHS256Generator.java similarity index 100% rename from src/main/java/core/packetproxy/vulchecker/generator/JWTHeaderRS256toHS256Generator.java rename to core/src/main/java/core/packetproxy/vulchecker/generator/JWTHeaderRS256toHS256Generator.java diff --git a/src/main/java/core/packetproxy/vulchecker/generator/JWTPayloadModifiedGenerator.java b/core/src/main/java/core/packetproxy/vulchecker/generator/JWTPayloadModifiedGenerator.java similarity index 100% rename from src/main/java/core/packetproxy/vulchecker/generator/JWTPayloadModifiedGenerator.java rename to core/src/main/java/core/packetproxy/vulchecker/generator/JWTPayloadModifiedGenerator.java diff --git a/src/main/java/core/packetproxy/vulchecker/generator/JWTSignWithAppleOtherTokenGenerator.java b/core/src/main/java/core/packetproxy/vulchecker/generator/JWTSignWithAppleOtherTokenGenerator.java similarity index 100% rename from src/main/java/core/packetproxy/vulchecker/generator/JWTSignWithAppleOtherTokenGenerator.java rename to core/src/main/java/core/packetproxy/vulchecker/generator/JWTSignWithAppleOtherTokenGenerator.java diff --git a/src/main/java/core/packetproxy/vulchecker/generator/JWTSignatureUnmodified.java b/core/src/main/java/core/packetproxy/vulchecker/generator/JWTSignatureUnmodified.java similarity index 100% rename from src/main/java/core/packetproxy/vulchecker/generator/JWTSignatureUnmodified.java rename to core/src/main/java/core/packetproxy/vulchecker/generator/JWTSignatureUnmodified.java diff --git a/src/main/java/core/packetproxy/vulchecker/generator/LongOverflowGenerator.java b/core/src/main/java/core/packetproxy/vulchecker/generator/LongOverflowGenerator.java similarity index 100% rename from src/main/java/core/packetproxy/vulchecker/generator/LongOverflowGenerator.java rename to core/src/main/java/core/packetproxy/vulchecker/generator/LongOverflowGenerator.java diff --git a/src/main/java/core/packetproxy/vulchecker/generator/LongOverflowMinusOneGenerator.java b/core/src/main/java/core/packetproxy/vulchecker/generator/LongOverflowMinusOneGenerator.java similarity index 100% rename from src/main/java/core/packetproxy/vulchecker/generator/LongOverflowMinusOneGenerator.java rename to core/src/main/java/core/packetproxy/vulchecker/generator/LongOverflowMinusOneGenerator.java diff --git a/src/main/java/core/packetproxy/vulchecker/generator/LongOverflowPlusOneGenerator.java b/core/src/main/java/core/packetproxy/vulchecker/generator/LongOverflowPlusOneGenerator.java similarity index 100% rename from src/main/java/core/packetproxy/vulchecker/generator/LongOverflowPlusOneGenerator.java rename to core/src/main/java/core/packetproxy/vulchecker/generator/LongOverflowPlusOneGenerator.java diff --git a/src/main/java/core/packetproxy/vulchecker/generator/NegativeNumberGenerator.java b/core/src/main/java/core/packetproxy/vulchecker/generator/NegativeNumberGenerator.java similarity index 100% rename from src/main/java/core/packetproxy/vulchecker/generator/NegativeNumberGenerator.java rename to core/src/main/java/core/packetproxy/vulchecker/generator/NegativeNumberGenerator.java diff --git a/src/main/java/core/packetproxy/vulchecker/generator/ZeroGenerator.java b/core/src/main/java/core/packetproxy/vulchecker/generator/ZeroGenerator.java similarity index 100% rename from src/main/java/core/packetproxy/vulchecker/generator/ZeroGenerator.java rename to core/src/main/java/core/packetproxy/vulchecker/generator/ZeroGenerator.java diff --git a/src/main/java/core/packetproxy/websocket/OpCode.java b/core/src/main/java/core/packetproxy/websocket/OpCode.java similarity index 100% rename from src/main/java/core/packetproxy/websocket/OpCode.java rename to core/src/main/java/core/packetproxy/websocket/OpCode.java diff --git a/src/main/java/core/packetproxy/websocket/WebSocket.java b/core/src/main/java/core/packetproxy/websocket/WebSocket.java similarity index 100% rename from src/main/java/core/packetproxy/websocket/WebSocket.java rename to core/src/main/java/core/packetproxy/websocket/WebSocket.java diff --git a/src/main/java/core/packetproxy/websocket/WebSocketFrame.java b/core/src/main/java/core/packetproxy/websocket/WebSocketFrame.java similarity index 100% rename from src/main/java/core/packetproxy/websocket/WebSocketFrame.java rename to core/src/main/java/core/packetproxy/websocket/WebSocketFrame.java diff --git a/src/main/kotlin/core/packetproxy/AppInitializer.kt b/core/src/main/kotlin/core/packetproxy/AppInitializer.kt similarity index 100% rename from src/main/kotlin/core/packetproxy/AppInitializer.kt rename to core/src/main/kotlin/core/packetproxy/AppInitializer.kt diff --git a/src/main/kotlin/core/packetproxy/ProxyFactory.kt b/core/src/main/kotlin/core/packetproxy/ProxyFactory.kt similarity index 100% rename from src/main/kotlin/core/packetproxy/ProxyFactory.kt rename to core/src/main/kotlin/core/packetproxy/ProxyFactory.kt diff --git a/src/main/kotlin/core/packetproxy/common/I18nString.kt b/core/src/main/kotlin/core/packetproxy/common/I18nString.kt similarity index 100% rename from src/main/kotlin/core/packetproxy/common/I18nString.kt rename to core/src/main/kotlin/core/packetproxy/common/I18nString.kt diff --git a/src/main/kotlin/core/packetproxy/controller/InterceptController.kt b/core/src/main/kotlin/core/packetproxy/controller/InterceptController.kt similarity index 100% rename from src/main/kotlin/core/packetproxy/controller/InterceptController.kt rename to core/src/main/kotlin/core/packetproxy/controller/InterceptController.kt diff --git a/src/main/kotlin/core/packetproxy/extensions/securityheaders/README.md b/core/src/main/kotlin/core/packetproxy/extensions/securityheaders/README.md similarity index 100% rename from src/main/kotlin/core/packetproxy/extensions/securityheaders/README.md rename to core/src/main/kotlin/core/packetproxy/extensions/securityheaders/README.md diff --git a/src/main/kotlin/core/packetproxy/extensions/securityheaders/SecurityCheck.kt b/core/src/main/kotlin/core/packetproxy/extensions/securityheaders/SecurityCheck.kt similarity index 100% rename from src/main/kotlin/core/packetproxy/extensions/securityheaders/SecurityCheck.kt rename to core/src/main/kotlin/core/packetproxy/extensions/securityheaders/SecurityCheck.kt diff --git a/src/main/kotlin/core/packetproxy/extensions/securityheaders/SecurityCheckResult.kt b/core/src/main/kotlin/core/packetproxy/extensions/securityheaders/SecurityCheckResult.kt similarity index 100% rename from src/main/kotlin/core/packetproxy/extensions/securityheaders/SecurityCheckResult.kt rename to core/src/main/kotlin/core/packetproxy/extensions/securityheaders/SecurityCheckResult.kt diff --git a/src/main/kotlin/core/packetproxy/extensions/securityheaders/checks/CacheControlCheck.kt b/core/src/main/kotlin/core/packetproxy/extensions/securityheaders/checks/CacheControlCheck.kt similarity index 100% rename from src/main/kotlin/core/packetproxy/extensions/securityheaders/checks/CacheControlCheck.kt rename to core/src/main/kotlin/core/packetproxy/extensions/securityheaders/checks/CacheControlCheck.kt diff --git a/src/main/kotlin/core/packetproxy/extensions/securityheaders/checks/ContentTypeCheck.kt b/core/src/main/kotlin/core/packetproxy/extensions/securityheaders/checks/ContentTypeCheck.kt similarity index 100% rename from src/main/kotlin/core/packetproxy/extensions/securityheaders/checks/ContentTypeCheck.kt rename to core/src/main/kotlin/core/packetproxy/extensions/securityheaders/checks/ContentTypeCheck.kt diff --git a/src/main/kotlin/core/packetproxy/extensions/securityheaders/checks/CookieCheck.kt b/core/src/main/kotlin/core/packetproxy/extensions/securityheaders/checks/CookieCheck.kt similarity index 100% rename from src/main/kotlin/core/packetproxy/extensions/securityheaders/checks/CookieCheck.kt rename to core/src/main/kotlin/core/packetproxy/extensions/securityheaders/checks/CookieCheck.kt diff --git a/src/main/kotlin/core/packetproxy/extensions/securityheaders/checks/CorsCheck.kt b/core/src/main/kotlin/core/packetproxy/extensions/securityheaders/checks/CorsCheck.kt similarity index 100% rename from src/main/kotlin/core/packetproxy/extensions/securityheaders/checks/CorsCheck.kt rename to core/src/main/kotlin/core/packetproxy/extensions/securityheaders/checks/CorsCheck.kt diff --git a/src/main/kotlin/core/packetproxy/extensions/securityheaders/checks/CspCheck.kt b/core/src/main/kotlin/core/packetproxy/extensions/securityheaders/checks/CspCheck.kt similarity index 100% rename from src/main/kotlin/core/packetproxy/extensions/securityheaders/checks/CspCheck.kt rename to core/src/main/kotlin/core/packetproxy/extensions/securityheaders/checks/CspCheck.kt diff --git a/src/main/kotlin/core/packetproxy/extensions/securityheaders/checks/HstsCheck.kt b/core/src/main/kotlin/core/packetproxy/extensions/securityheaders/checks/HstsCheck.kt similarity index 100% rename from src/main/kotlin/core/packetproxy/extensions/securityheaders/checks/HstsCheck.kt rename to core/src/main/kotlin/core/packetproxy/extensions/securityheaders/checks/HstsCheck.kt diff --git a/src/main/kotlin/core/packetproxy/extensions/securityheaders/checks/XssProtectionCheck.kt b/core/src/main/kotlin/core/packetproxy/extensions/securityheaders/checks/XssProtectionCheck.kt similarity index 100% rename from src/main/kotlin/core/packetproxy/extensions/securityheaders/checks/XssProtectionCheck.kt rename to core/src/main/kotlin/core/packetproxy/extensions/securityheaders/checks/XssProtectionCheck.kt diff --git a/src/main/kotlin/core/packetproxy/extensions/securityheaders/exclusion/ExclusionRule.kt b/core/src/main/kotlin/core/packetproxy/extensions/securityheaders/exclusion/ExclusionRule.kt similarity index 100% rename from src/main/kotlin/core/packetproxy/extensions/securityheaders/exclusion/ExclusionRule.kt rename to core/src/main/kotlin/core/packetproxy/extensions/securityheaders/exclusion/ExclusionRule.kt diff --git a/src/main/kotlin/core/packetproxy/extensions/securityheaders/exclusion/ExclusionRuleManager.kt b/core/src/main/kotlin/core/packetproxy/extensions/securityheaders/exclusion/ExclusionRuleManager.kt similarity index 100% rename from src/main/kotlin/core/packetproxy/extensions/securityheaders/exclusion/ExclusionRuleManager.kt rename to core/src/main/kotlin/core/packetproxy/extensions/securityheaders/exclusion/ExclusionRuleManager.kt diff --git a/src/main/kotlin/core/packetproxy/extensions/securityheaders/exclusion/ExclusionRuleType.kt b/core/src/main/kotlin/core/packetproxy/extensions/securityheaders/exclusion/ExclusionRuleType.kt similarity index 100% rename from src/main/kotlin/core/packetproxy/extensions/securityheaders/exclusion/ExclusionRuleType.kt rename to core/src/main/kotlin/core/packetproxy/extensions/securityheaders/exclusion/ExclusionRuleType.kt diff --git a/src/main/kotlin/core/packetproxy/grpc/GrpcSchemaResolver.kt b/core/src/main/kotlin/core/packetproxy/grpc/GrpcSchemaResolver.kt similarity index 100% rename from src/main/kotlin/core/packetproxy/grpc/GrpcSchemaResolver.kt rename to core/src/main/kotlin/core/packetproxy/grpc/GrpcSchemaResolver.kt diff --git a/src/main/kotlin/core/packetproxy/grpc/GrpcServiceRegistry.kt b/core/src/main/kotlin/core/packetproxy/grpc/GrpcServiceRegistry.kt similarity index 100% rename from src/main/kotlin/core/packetproxy/grpc/GrpcServiceRegistry.kt rename to core/src/main/kotlin/core/packetproxy/grpc/GrpcServiceRegistry.kt diff --git a/src/main/kotlin/core/packetproxy/grpc/GrpcServiceRegistryStore.kt b/core/src/main/kotlin/core/packetproxy/grpc/GrpcServiceRegistryStore.kt similarity index 100% rename from src/main/kotlin/core/packetproxy/grpc/GrpcServiceRegistryStore.kt rename to core/src/main/kotlin/core/packetproxy/grpc/GrpcServiceRegistryStore.kt diff --git a/src/main/kotlin/core/packetproxy/grpc/ProtoFileSet.kt b/core/src/main/kotlin/core/packetproxy/grpc/ProtoFileSet.kt similarity index 100% rename from src/main/kotlin/core/packetproxy/grpc/ProtoFileSet.kt rename to core/src/main/kotlin/core/packetproxy/grpc/ProtoFileSet.kt diff --git a/src/main/kotlin/core/packetproxy/grpc/ProtocRunner.kt b/core/src/main/kotlin/core/packetproxy/grpc/ProtocRunner.kt similarity index 100% rename from src/main/kotlin/core/packetproxy/grpc/ProtocRunner.kt rename to core/src/main/kotlin/core/packetproxy/grpc/ProtocRunner.kt diff --git a/src/main/kotlin/core/packetproxy/util/Extensions.kt b/core/src/main/kotlin/core/packetproxy/util/Extensions.kt similarity index 100% rename from src/main/kotlin/core/packetproxy/util/Extensions.kt rename to core/src/main/kotlin/core/packetproxy/util/Extensions.kt diff --git a/src/main/kotlin/core/packetproxy/util/Logging.kt b/core/src/main/kotlin/core/packetproxy/util/Logging.kt similarity index 100% rename from src/main/kotlin/core/packetproxy/util/Logging.kt rename to core/src/main/kotlin/core/packetproxy/util/Logging.kt diff --git a/src/main/resources/certificates/user.ks b/core/src/main/resources/certificates/user.ks similarity index 100% rename from src/main/resources/certificates/user.ks rename to core/src/main/resources/certificates/user.ks diff --git a/src/main/resources/log4j.properties b/core/src/main/resources/log4j.properties similarity index 100% rename from src/main/resources/log4j.properties rename to core/src/main/resources/log4j.properties diff --git a/src/main/resources/org/xbill/DNS/windows/DNSServer.properties b/core/src/main/resources/org/xbill/DNS/windows/DNSServer.properties similarity index 100% rename from src/main/resources/org/xbill/DNS/windows/DNSServer.properties rename to core/src/main/resources/org/xbill/DNS/windows/DNSServer.properties diff --git a/src/main/resources/org/xbill/DNS/windows/DNSServer_de.properties b/core/src/main/resources/org/xbill/DNS/windows/DNSServer_de.properties similarity index 100% rename from src/main/resources/org/xbill/DNS/windows/DNSServer_de.properties rename to core/src/main/resources/org/xbill/DNS/windows/DNSServer_de.properties diff --git a/src/main/resources/org/xbill/DNS/windows/DNSServer_fr.properties b/core/src/main/resources/org/xbill/DNS/windows/DNSServer_fr.properties similarity index 100% rename from src/main/resources/org/xbill/DNS/windows/DNSServer_fr.properties rename to core/src/main/resources/org/xbill/DNS/windows/DNSServer_fr.properties diff --git a/src/main/resources/org/xbill/DNS/windows/DNSServer_ja.properties b/core/src/main/resources/org/xbill/DNS/windows/DNSServer_ja.properties similarity index 100% rename from src/main/resources/org/xbill/DNS/windows/DNSServer_ja.properties rename to core/src/main/resources/org/xbill/DNS/windows/DNSServer_ja.properties diff --git a/src/main/resources/org/xbill/DNS/windows/DNSServer_pl.properties b/core/src/main/resources/org/xbill/DNS/windows/DNSServer_pl.properties similarity index 100% rename from src/main/resources/org/xbill/DNS/windows/DNSServer_pl.properties rename to core/src/main/resources/org/xbill/DNS/windows/DNSServer_pl.properties diff --git a/src/main/resources/strings_ja.properties b/core/src/main/resources/strings_ja.properties similarity index 100% rename from src/main/resources/strings_ja.properties rename to core/src/main/resources/strings_ja.properties diff --git a/core/src/main/resources/version b/core/src/main/resources/version new file mode 100644 index 00000000..cc6612c3 --- /dev/null +++ b/core/src/main/resources/version @@ -0,0 +1 @@ +2.3.0 \ No newline at end of file diff --git a/src/test/java/org/xbill/DNS/HTTPSRecordTest.java b/core/src/test/java/org/xbill/DNS/HTTPSRecordTest.java similarity index 100% rename from src/test/java/org/xbill/DNS/HTTPSRecordTest.java rename to core/src/test/java/org/xbill/DNS/HTTPSRecordTest.java diff --git a/src/test/java/org/xbill/DNS/SVCBRecordTest.java b/core/src/test/java/org/xbill/DNS/SVCBRecordTest.java similarity index 100% rename from src/test/java/org/xbill/DNS/SVCBRecordTest.java rename to core/src/test/java/org/xbill/DNS/SVCBRecordTest.java diff --git a/core/src/test/java/packetproxy/CoreModuleArchitectureTest.java b/core/src/test/java/packetproxy/CoreModuleArchitectureTest.java new file mode 100644 index 00000000..1a2d3a54 --- /dev/null +++ b/core/src/test/java/packetproxy/CoreModuleArchitectureTest.java @@ -0,0 +1,33 @@ +/* + * Copyright 2026 DeNA Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package packetproxy; + +import static com.tngtech.archunit.lang.syntax.ArchRuleDefinition.noClasses; + +import com.tngtech.archunit.core.domain.JavaClasses; +import com.tngtech.archunit.core.importer.ClassFileImporter; +import org.junit.jupiter.api.Test; + +class CoreModuleArchitectureTest { + + private final JavaClasses classes = new ClassFileImporter().importPackages("packetproxy"); + + @Test + void coreMustNotDependOnUiOrGulp() { + noClasses().that().resideInAPackage("packetproxy..").should().dependOnClassesThat() + .resideInAnyPackage("packetproxy.gui..", "packetproxy.gulp..", "packetproxy.cli..").check(classes); + } +} diff --git a/src/test/java/packetproxy/PrivateDNSClientTest.java b/core/src/test/java/packetproxy/PrivateDNSClientTest.java similarity index 100% rename from src/test/java/packetproxy/PrivateDNSClientTest.java rename to core/src/test/java/packetproxy/PrivateDNSClientTest.java diff --git a/src/test/java/packetproxy/common/AmazonLexV2Test.java b/core/src/test/java/packetproxy/common/AmazonLexV2Test.java similarity index 100% rename from src/test/java/packetproxy/common/AmazonLexV2Test.java rename to core/src/test/java/packetproxy/common/AmazonLexV2Test.java diff --git a/src/test/java/packetproxy/common/BoyerMooreTest.java b/core/src/test/java/packetproxy/common/BoyerMooreTest.java similarity index 100% rename from src/test/java/packetproxy/common/BoyerMooreTest.java rename to core/src/test/java/packetproxy/common/BoyerMooreTest.java diff --git a/src/test/java/packetproxy/common/CharSetUtilityTest.java b/core/src/test/java/packetproxy/common/CharSetUtilityTest.java similarity index 100% rename from src/test/java/packetproxy/common/CharSetUtilityTest.java rename to core/src/test/java/packetproxy/common/CharSetUtilityTest.java diff --git a/src/test/java/packetproxy/common/GRPCTest.java b/core/src/test/java/packetproxy/common/GRPCTest.java similarity index 100% rename from src/test/java/packetproxy/common/GRPCTest.java rename to core/src/test/java/packetproxy/common/GRPCTest.java diff --git a/src/test/java/packetproxy/common/Protobuf3Test.java b/core/src/test/java/packetproxy/common/Protobuf3Test.java similarity index 100% rename from src/test/java/packetproxy/common/Protobuf3Test.java rename to core/src/test/java/packetproxy/common/Protobuf3Test.java diff --git a/src/test/java/packetproxy/common/StringUtilsTest.java b/core/src/test/java/packetproxy/common/StringUtilsTest.java similarity index 100% rename from src/test/java/packetproxy/common/StringUtilsTest.java rename to core/src/test/java/packetproxy/common/StringUtilsTest.java diff --git a/src/test/java/packetproxy/common/UDPSocketEndpointTest.java b/core/src/test/java/packetproxy/common/UDPSocketEndpointTest.java similarity index 100% rename from src/test/java/packetproxy/common/UDPSocketEndpointTest.java rename to core/src/test/java/packetproxy/common/UDPSocketEndpointTest.java diff --git a/src/test/java/packetproxy/encode/EncodeHTTPWebSocketOpCodeTest.java b/core/src/test/java/packetproxy/encode/EncodeHTTPWebSocketOpCodeTest.java similarity index 100% rename from src/test/java/packetproxy/encode/EncodeHTTPWebSocketOpCodeTest.java rename to core/src/test/java/packetproxy/encode/EncodeHTTPWebSocketOpCodeTest.java diff --git a/src/test/java/packetproxy/http2/FrameManagerTest.java b/core/src/test/java/packetproxy/http2/FrameManagerTest.java similarity index 100% rename from src/test/java/packetproxy/http2/FrameManagerTest.java rename to core/src/test/java/packetproxy/http2/FrameManagerTest.java diff --git a/src/test/java/packetproxy/http2/frames/FrameTest.java b/core/src/test/java/packetproxy/http2/frames/FrameTest.java similarity index 100% rename from src/test/java/packetproxy/http2/frames/FrameTest.java rename to core/src/test/java/packetproxy/http2/frames/FrameTest.java diff --git a/src/test/java/packetproxy/http2/frames/HeadersFrameTest.java b/core/src/test/java/packetproxy/http2/frames/HeadersFrameTest.java similarity index 100% rename from src/test/java/packetproxy/http2/frames/HeadersFrameTest.java rename to core/src/test/java/packetproxy/http2/frames/HeadersFrameTest.java diff --git a/src/test/java/packetproxy/http2/frames/SettingsFrameTest.java b/core/src/test/java/packetproxy/http2/frames/SettingsFrameTest.java similarity index 100% rename from src/test/java/packetproxy/http2/frames/SettingsFrameTest.java rename to core/src/test/java/packetproxy/http2/frames/SettingsFrameTest.java diff --git a/src/test/java/packetproxy/http3/QpackTest.java b/core/src/test/java/packetproxy/http3/QpackTest.java similarity index 100% rename from src/test/java/packetproxy/http3/QpackTest.java rename to core/src/test/java/packetproxy/http3/QpackTest.java diff --git a/src/test/java/packetproxy/http3/helper/Http3TestHelper.java b/core/src/test/java/packetproxy/http3/helper/Http3TestHelper.java similarity index 100% rename from src/test/java/packetproxy/http3/helper/Http3TestHelper.java rename to core/src/test/java/packetproxy/http3/helper/Http3TestHelper.java diff --git a/src/test/java/packetproxy/http3/service/Http3HeaderEncoderDecoderTest.java b/core/src/test/java/packetproxy/http3/service/Http3HeaderEncoderDecoderTest.java similarity index 100% rename from src/test/java/packetproxy/http3/service/Http3HeaderEncoderDecoderTest.java rename to core/src/test/java/packetproxy/http3/service/Http3HeaderEncoderDecoderTest.java diff --git a/src/test/java/packetproxy/http3/service/Http3Test.java b/core/src/test/java/packetproxy/http3/service/Http3Test.java similarity index 100% rename from src/test/java/packetproxy/http3/service/Http3Test.java rename to core/src/test/java/packetproxy/http3/service/Http3Test.java diff --git a/src/test/java/packetproxy/http3/service/StreamsReaderTest.java b/core/src/test/java/packetproxy/http3/service/StreamsReaderTest.java similarity index 100% rename from src/test/java/packetproxy/http3/service/StreamsReaderTest.java rename to core/src/test/java/packetproxy/http3/service/StreamsReaderTest.java diff --git a/src/test/java/packetproxy/http3/service/frame/FrameParserTest.java b/core/src/test/java/packetproxy/http3/service/frame/FrameParserTest.java similarity index 100% rename from src/test/java/packetproxy/http3/service/frame/FrameParserTest.java rename to core/src/test/java/packetproxy/http3/service/frame/FrameParserTest.java diff --git a/src/test/java/packetproxy/http3/service/stream/ControlReadStreamTest.java b/core/src/test/java/packetproxy/http3/service/stream/ControlReadStreamTest.java similarity index 100% rename from src/test/java/packetproxy/http3/service/stream/ControlReadStreamTest.java rename to core/src/test/java/packetproxy/http3/service/stream/ControlReadStreamTest.java diff --git a/src/test/java/packetproxy/http3/service/stream/ControlWriteStreamTest.java b/core/src/test/java/packetproxy/http3/service/stream/ControlWriteStreamTest.java similarity index 100% rename from src/test/java/packetproxy/http3/service/stream/ControlWriteStreamTest.java rename to core/src/test/java/packetproxy/http3/service/stream/ControlWriteStreamTest.java diff --git a/src/test/java/packetproxy/http3/service/stream/QpackReadStreamTest.java b/core/src/test/java/packetproxy/http3/service/stream/QpackReadStreamTest.java similarity index 100% rename from src/test/java/packetproxy/http3/service/stream/QpackReadStreamTest.java rename to core/src/test/java/packetproxy/http3/service/stream/QpackReadStreamTest.java diff --git a/src/test/java/packetproxy/http3/service/stream/QpackWriteStreamTest.java b/core/src/test/java/packetproxy/http3/service/stream/QpackWriteStreamTest.java similarity index 100% rename from src/test/java/packetproxy/http3/service/stream/QpackWriteStreamTest.java rename to core/src/test/java/packetproxy/http3/service/stream/QpackWriteStreamTest.java diff --git a/src/test/java/packetproxy/http3/value/SettingTest.java b/core/src/test/java/packetproxy/http3/value/SettingTest.java similarity index 100% rename from src/test/java/packetproxy/http3/value/SettingTest.java rename to core/src/test/java/packetproxy/http3/value/SettingTest.java diff --git a/src/test/java/packetproxy/http3/value/frame/DummyFrameTest.java b/core/src/test/java/packetproxy/http3/value/frame/DummyFrameTest.java similarity index 100% rename from src/test/java/packetproxy/http3/value/frame/DummyFrameTest.java rename to core/src/test/java/packetproxy/http3/value/frame/DummyFrameTest.java diff --git a/src/test/java/packetproxy/http3/value/frame/RawFrameTest.java b/core/src/test/java/packetproxy/http3/value/frame/RawFrameTest.java similarity index 100% rename from src/test/java/packetproxy/http3/value/frame/RawFrameTest.java rename to core/src/test/java/packetproxy/http3/value/frame/RawFrameTest.java diff --git a/src/test/java/packetproxy/http3/value/frame/SettingsFrameTest.java b/core/src/test/java/packetproxy/http3/value/frame/SettingsFrameTest.java similarity index 100% rename from src/test/java/packetproxy/http3/value/frame/SettingsFrameTest.java rename to core/src/test/java/packetproxy/http3/value/frame/SettingsFrameTest.java diff --git a/src/test/java/packetproxy/quic/service/ackgenerator/AckFrameGeneratorTest.java b/core/src/test/java/packetproxy/quic/service/ackgenerator/AckFrameGeneratorTest.java similarity index 100% rename from src/test/java/packetproxy/quic/service/ackgenerator/AckFrameGeneratorTest.java rename to core/src/test/java/packetproxy/quic/service/ackgenerator/AckFrameGeneratorTest.java diff --git a/src/test/java/packetproxy/quic/service/ackgenerator/ReceivedQuicPacketNumbersTest.java b/core/src/test/java/packetproxy/quic/service/ackgenerator/ReceivedQuicPacketNumbersTest.java similarity index 100% rename from src/test/java/packetproxy/quic/service/ackgenerator/ReceivedQuicPacketNumbersTest.java rename to core/src/test/java/packetproxy/quic/service/ackgenerator/ReceivedQuicPacketNumbersTest.java diff --git a/src/test/java/packetproxy/quic/service/framegenerator/CryptoFramesToMessagesTest.java b/core/src/test/java/packetproxy/quic/service/framegenerator/CryptoFramesToMessagesTest.java similarity index 100% rename from src/test/java/packetproxy/quic/service/framegenerator/CryptoFramesToMessagesTest.java rename to core/src/test/java/packetproxy/quic/service/framegenerator/CryptoFramesToMessagesTest.java diff --git a/src/test/java/packetproxy/quic/service/pnspace/SentPacketsTest.java b/core/src/test/java/packetproxy/quic/service/pnspace/SentPacketsTest.java similarity index 100% rename from src/test/java/packetproxy/quic/service/pnspace/SentPacketsTest.java rename to core/src/test/java/packetproxy/quic/service/pnspace/SentPacketsTest.java diff --git a/src/test/java/packetproxy/quic/service/transportparameter/TransportParametersTest.java b/core/src/test/java/packetproxy/quic/service/transportparameter/TransportParametersTest.java similarity index 100% rename from src/test/java/packetproxy/quic/service/transportparameter/TransportParametersTest.java rename to core/src/test/java/packetproxy/quic/service/transportparameter/TransportParametersTest.java diff --git a/src/test/java/packetproxy/quic/value/ConnectionIdTest.java b/core/src/test/java/packetproxy/quic/value/ConnectionIdTest.java similarity index 100% rename from src/test/java/packetproxy/quic/value/ConnectionIdTest.java rename to core/src/test/java/packetproxy/quic/value/ConnectionIdTest.java diff --git a/src/test/java/packetproxy/quic/value/QuicMessageTest.java b/core/src/test/java/packetproxy/quic/value/QuicMessageTest.java similarity index 100% rename from src/test/java/packetproxy/quic/value/QuicMessageTest.java rename to core/src/test/java/packetproxy/quic/value/QuicMessageTest.java diff --git a/src/test/java/packetproxy/quic/value/QuicMessagesTest.java b/core/src/test/java/packetproxy/quic/value/QuicMessagesTest.java similarity index 100% rename from src/test/java/packetproxy/quic/value/QuicMessagesTest.java rename to core/src/test/java/packetproxy/quic/value/QuicMessagesTest.java diff --git a/src/test/java/packetproxy/quic/value/QuicPacketNumbersTest.java b/core/src/test/java/packetproxy/quic/value/QuicPacketNumbersTest.java similarity index 100% rename from src/test/java/packetproxy/quic/value/QuicPacketNumbersTest.java rename to core/src/test/java/packetproxy/quic/value/QuicPacketNumbersTest.java diff --git a/src/test/java/packetproxy/quic/value/TruncatedQuicPacketNumberTest.java b/core/src/test/java/packetproxy/quic/value/TruncatedQuicPacketNumberTest.java similarity index 100% rename from src/test/java/packetproxy/quic/value/TruncatedQuicPacketNumberTest.java rename to core/src/test/java/packetproxy/quic/value/TruncatedQuicPacketNumberTest.java diff --git a/src/test/java/packetproxy/quic/value/VariableLengthIntegerTest.java b/core/src/test/java/packetproxy/quic/value/VariableLengthIntegerTest.java similarity index 100% rename from src/test/java/packetproxy/quic/value/VariableLengthIntegerTest.java rename to core/src/test/java/packetproxy/quic/value/VariableLengthIntegerTest.java diff --git a/src/test/java/packetproxy/quic/value/WriteStreamIdTest.java b/core/src/test/java/packetproxy/quic/value/WriteStreamIdTest.java similarity index 100% rename from src/test/java/packetproxy/quic/value/WriteStreamIdTest.java rename to core/src/test/java/packetproxy/quic/value/WriteStreamIdTest.java diff --git a/src/test/java/packetproxy/quic/value/frame/AckEcnFrameTest.java b/core/src/test/java/packetproxy/quic/value/frame/AckEcnFrameTest.java similarity index 100% rename from src/test/java/packetproxy/quic/value/frame/AckEcnFrameTest.java rename to core/src/test/java/packetproxy/quic/value/frame/AckEcnFrameTest.java diff --git a/src/test/java/packetproxy/quic/value/frame/AckFrameTest.java b/core/src/test/java/packetproxy/quic/value/frame/AckFrameTest.java similarity index 100% rename from src/test/java/packetproxy/quic/value/frame/AckFrameTest.java rename to core/src/test/java/packetproxy/quic/value/frame/AckFrameTest.java diff --git a/src/test/java/packetproxy/quic/value/frame/CryptoFrameTest.java b/core/src/test/java/packetproxy/quic/value/frame/CryptoFrameTest.java similarity index 100% rename from src/test/java/packetproxy/quic/value/frame/CryptoFrameTest.java rename to core/src/test/java/packetproxy/quic/value/frame/CryptoFrameTest.java diff --git a/src/test/java/packetproxy/quic/value/frame/FramesTest.java b/core/src/test/java/packetproxy/quic/value/frame/FramesTest.java similarity index 100% rename from src/test/java/packetproxy/quic/value/frame/FramesTest.java rename to core/src/test/java/packetproxy/quic/value/frame/FramesTest.java diff --git a/src/test/java/packetproxy/quic/value/frame/NewConnectionIdFrameTest.java b/core/src/test/java/packetproxy/quic/value/frame/NewConnectionIdFrameTest.java similarity index 100% rename from src/test/java/packetproxy/quic/value/frame/NewConnectionIdFrameTest.java rename to core/src/test/java/packetproxy/quic/value/frame/NewConnectionIdFrameTest.java diff --git a/src/test/java/packetproxy/quic/value/packet/InitialPacketTest.java b/core/src/test/java/packetproxy/quic/value/packet/InitialPacketTest.java similarity index 100% rename from src/test/java/packetproxy/quic/value/packet/InitialPacketTest.java rename to core/src/test/java/packetproxy/quic/value/packet/InitialPacketTest.java diff --git a/src/test/java/packetproxy/quic/value/packet/helper/TestPacket.java b/core/src/test/java/packetproxy/quic/value/packet/helper/TestPacket.java similarity index 100% rename from src/test/java/packetproxy/quic/value/packet/helper/TestPacket.java rename to core/src/test/java/packetproxy/quic/value/packet/helper/TestPacket.java diff --git a/src/test/java/packetproxy/quic/value/packet/shortheader/ShortHeaderPacketTest.java b/core/src/test/java/packetproxy/quic/value/packet/shortheader/ShortHeaderPacketTest.java similarity index 100% rename from src/test/java/packetproxy/quic/value/packet/shortheader/ShortHeaderPacketTest.java rename to core/src/test/java/packetproxy/quic/value/packet/shortheader/ShortHeaderPacketTest.java diff --git a/src/test/java/packetproxy/quic/value/transportparameter/bool/DisableActiveMigrationParameterTest.java b/core/src/test/java/packetproxy/quic/value/transportparameter/bool/DisableActiveMigrationParameterTest.java similarity index 100% rename from src/test/java/packetproxy/quic/value/transportparameter/bool/DisableActiveMigrationParameterTest.java rename to core/src/test/java/packetproxy/quic/value/transportparameter/bool/DisableActiveMigrationParameterTest.java diff --git a/src/test/kotlin/packetproxy/grpc/GrpcServiceRegistryStoreTest.kt b/core/src/test/kotlin/packetproxy/grpc/GrpcServiceRegistryStoreTest.kt similarity index 100% rename from src/test/kotlin/packetproxy/grpc/GrpcServiceRegistryStoreTest.kt rename to core/src/test/kotlin/packetproxy/grpc/GrpcServiceRegistryStoreTest.kt diff --git a/src/test/kotlin/packetproxy/grpc/GrpcServiceRegistryTest.kt b/core/src/test/kotlin/packetproxy/grpc/GrpcServiceRegistryTest.kt similarity index 100% rename from src/test/kotlin/packetproxy/grpc/GrpcServiceRegistryTest.kt rename to core/src/test/kotlin/packetproxy/grpc/GrpcServiceRegistryTest.kt diff --git a/src/test/kotlin/packetproxy/grpc/ProtoFileSetTest.kt b/core/src/test/kotlin/packetproxy/grpc/ProtoFileSetTest.kt similarity index 100% rename from src/test/kotlin/packetproxy/grpc/ProtoFileSetTest.kt rename to core/src/test/kotlin/packetproxy/grpc/ProtoFileSetTest.kt diff --git a/src/test/resources/packetproxy/grpc/proto/multidir/common.proto b/core/src/test/resources/packetproxy/grpc/proto/multidir/common.proto similarity index 100% rename from src/test/resources/packetproxy/grpc/proto/multidir/common.proto rename to core/src/test/resources/packetproxy/grpc/proto/multidir/common.proto diff --git a/src/test/resources/packetproxy/grpc/proto/multidir/multi.desc b/core/src/test/resources/packetproxy/grpc/proto/multidir/multi.desc similarity index 100% rename from src/test/resources/packetproxy/grpc/proto/multidir/multi.desc rename to core/src/test/resources/packetproxy/grpc/proto/multidir/multi.desc diff --git a/src/test/resources/packetproxy/grpc/proto/multidir/multi_without_imports.desc b/core/src/test/resources/packetproxy/grpc/proto/multidir/multi_without_imports.desc similarity index 100% rename from src/test/resources/packetproxy/grpc/proto/multidir/multi_without_imports.desc rename to core/src/test/resources/packetproxy/grpc/proto/multidir/multi_without_imports.desc diff --git a/src/test/resources/packetproxy/grpc/proto/multidir/svc_a.proto b/core/src/test/resources/packetproxy/grpc/proto/multidir/svc_a.proto similarity index 100% rename from src/test/resources/packetproxy/grpc/proto/multidir/svc_a.proto rename to core/src/test/resources/packetproxy/grpc/proto/multidir/svc_a.proto diff --git a/src/test/resources/packetproxy/grpc/proto/multidir/svc_b.proto b/core/src/test/resources/packetproxy/grpc/proto/multidir/svc_b.proto similarity index 100% rename from src/test/resources/packetproxy/grpc/proto/multidir/svc_b.proto rename to core/src/test/resources/packetproxy/grpc/proto/multidir/svc_b.proto diff --git a/src/test/resources/packetproxy/grpc/proto/testsvc.desc b/core/src/test/resources/packetproxy/grpc/proto/testsvc.desc similarity index 100% rename from src/test/resources/packetproxy/grpc/proto/testsvc.desc rename to core/src/test/resources/packetproxy/grpc/proto/testsvc.desc diff --git a/src/test/resources/packetproxy/grpc/proto/testsvc.proto b/core/src/test/resources/packetproxy/grpc/proto/testsvc.proto similarity index 100% rename from src/test/resources/packetproxy/grpc/proto/testsvc.proto rename to core/src/test/resources/packetproxy/grpc/proto/testsvc.proto diff --git a/gradle/app-release.gradle b/gradle/app-release.gradle new file mode 100644 index 00000000..3ce7aea9 --- /dev/null +++ b/gradle/app-release.gradle @@ -0,0 +1,341 @@ +buildscript { + repositories { + mavenCentral() + } + dependencies { + classpath 'com.bmuschko:gradle-izpack-plugin:3.0' + } +} + +import com.bmuschko.gradle.izpack.CreateInstallerTask +import org.apache.tools.ant.taskdefs.condition.Os + +def guiResourcesDir = rootProject.file("ui/src/main/resources/gui") + +def shell(String command) { + ["sh", "-c", command].execute().waitForProcessOutput(System.out, System.err) +} + +def gitVersion = "git describe --tags --abbrev=0".execute().text.replace("\n", "") +new File("${rootProject.projectDir}/core/src/main/resources/version").text = gitVersion + +project.ext { + nameInstaller = "PacketProxy-${gitVersion}-Installer.jar" + nameMacInstallApp = "PacketProxy-${gitVersion}-Installer-Mac.app" + nameMacRelease = "PacketProxy-${gitVersion}-Installer-Mac.zip" + nameMacSignedReleaseJPackage = "PacketProxy-${gitVersion}.dmg" + nameMacSignedRelease = "PacketProxy-${gitVersion}-Installer-Mac-Signed.dmg" + nameWin32Release = "PacketProxy-${gitVersion}-Installer-Win32.jar" + nameWin64Release = "PacketProxy-${gitVersion}-Installer-Win64.jar" + nameLinuxReleaseDir = "PacketProxy-${gitVersion}-Linux" + nameLinuxRelease = "PacketProxy-${gitVersion}-Installer-Linux.jar" + // path + pathInstaller = "${buildDir}/distributions/${nameInstaller}" + pathWorkDir = "${buildDir}/distributions" + // Mac + pathMacWorkDir = "${buildDir}/distributions/mac" + pathMacTarget = "${pathMacWorkDir}/target" + pathMacInstaller = "${pathMacWorkDir}/${nameInstaller}" + pathMacInstallApp = "${pathMacWorkDir}/${nameMacInstallApp}" + pathMacRelease = "${pathMacWorkDir}/${nameMacRelease}" + pathMacSignedReleaseJPackage = "${pathMacWorkDir}/${nameMacSignedReleaseJPackage}" + pathMacSignedRelease = "${pathMacWorkDir}/${nameMacSignedRelease}" + // Win32 + pathWin32WorkDir = "${buildDir}/distributions/win32" + pathWin32Target = "${pathWin32WorkDir}/target" + pathWin32Installer = "${pathWin32WorkDir}/${nameInstaller}" + pathWin32Release = "${pathWin32WorkDir}/${nameWin32Release}" + // Win64 + pathWin64WorkDir = "${buildDir}/distributions/win64" + pathWin64Target = "${pathWin64WorkDir}/target" + pathWin64Installer = "${pathWin64WorkDir}/${nameInstaller}" + pathWin64Release = "${pathWin64WorkDir}/${nameWin64Release}" + // Linux + pathLinuxWorkDir = "${buildDir}/distributions/Linux" + pathLinuxTarget = "${pathLinuxWorkDir}/target" + pathLinuxInstaller = "${pathLinuxWorkDir}/${nameInstaller}" + pathLinuxReleaseDir = "${pathLinuxWorkDir}/${nameLinuxReleaseDir}" + pathLinuxRelease = "${pathLinuxWorkDir}/${nameLinuxRelease}" +} + +project.ext { + appleId = "test@example.com" + applePasswd = "xxxx-xxxx-xxxx-xxxx" + signedKey = "Developer ID Application: YYYYYYYY (ZZZZZZZZ)" + teamId = "ZZZZZZZZ" +} + +task prepareJPackage(dependsOn: "jar") { + doLast { + def workDir = "${project.ext.pathMacWorkDir}" + delete "${workDir}" + new File("${workDir}").mkdirs() + def jdkUrl = "https://corretto.aws/downloads/resources/17.0.15.6.1/amazon-corretto-17.0.15.6.1-macosx-x64.tar.gz" + def destFile = file("${workDir}/OpenJDK17.tar.gz") + if (!destFile.exists()) { + ant.get(src: jdkUrl, dest: destFile, verbose: true) + } + copy { + from tarTree(resources.gzip("${workDir}/OpenJDK17.tar.gz")) + into file("${workDir}/OpenJDK17") + } + // create icon + copy { + from "${guiResourcesDir}/icon.png" + into "${workDir}/icon.iconset/" + } + shell("mv ${workDir}/icon.iconset/icon.png ${workDir}/icon.iconset/icon_256x256.png") + shell("iconutil -c icns --output ${workDir}/icon.icns ${workDir}/icon.iconset/") + } + onlyIf { Os.isFamily(Os.FAMILY_MAC) } +} + +class CreateWinTarget extends DefaultTask { + @Input + String workDir = '' + @Input + String targetDir = '' + @Input + String jdkUrl = '' + + @TaskAction + void start() { + project.delete { + delete "${workDir}" + } + new File("${workDir}").mkdirs() + new File("${targetDir}").mkdirs() + project.copy { + from "${project.buildDir}/reports/licenses/index.html" + into "${targetDir}/licenses" + } + project.copy { + from "${guiResourcesDir}/icon.ico" + into "${targetDir}" + rename('icon.ico', 'PacketProxy.ico') + } + project.copy { + from "${project.buildDir}/libs/PacketProxy.jar" + into "${targetDir}" + } + def destFile = project.file("${workDir}/OpenJDK17.zip") + if (!destFile.exists()) { + ant.get(src: jdkUrl, dest: destFile, verbose: true) + } + project.copy { + from project.zipTree("${workDir}/OpenJDK17.zip") + into project.file("${workDir}/OpenJDK17") + } + project.copy { + from project.file("${workDir}/OpenJDK17/jdk17.0.15_6") + into project.file("${targetDir}/OpenJDK17") + } + } +} + +task createWin64Target(type: CreateWinTarget, dependsOn: [ + 'jar', + 'generateLicenseReport' +]) { + workDir = project.ext.pathWin64WorkDir + targetDir = project.ext.pathWin64Target + jdkUrl = 'https://corretto.aws/downloads/resources/17.0.15.6.1/amazon-corretto-17.0.15.6.1-windows-x64-jdk.zip' +} + +task createLinuxTarget(dependsOn: [ + 'jar', + 'generateLicenseReport' +]) { + def workDir = project.ext.pathLinuxWorkDir + def targetDir = project.ext.pathLinuxTarget + def jdkUrl = 'https://corretto.aws/downloads/resources/17.0.15.6.1/amazon-corretto-17.0.15.6.1-linux-x64.tar.gz' + def buildDirectory = project.buildDir + def projectDirectory = rootProject.projectDir + + doLast { + delete { + delete "${workDir}" + } + new File("${workDir}").mkdirs() + new File("${targetDir}").mkdirs() + copy { + from "${buildDirectory}/reports/licenses/index.html" + from "${projectDirectory}/LICENSES" + into "${targetDir}/share/packetproxy/licenses" + } + copy { + from "${guiResourcesDir}/icon.ico" + into "${targetDir}/share/packetproxy" + rename('icon.ico', 'PacketProxy.ico') + } + copy { + from "${buildDirectory}/libs/PacketProxy.jar" + into "${targetDir}/share/packetproxy" + } + def destFile = file("${workDir}/OpenJDK17.tar.gz") + if (!destFile.exists()) { + ant.get(src: jdkUrl, dest: destFile, verbose: true) + } + copy { + from tarTree(resources.gzip("${workDir}/OpenJDK17.tar.gz")) + into file("${workDir}/OpenJDK17") + } + copy { + from file("${workDir}/OpenJDK17/amazon-corretto-17.0.15.6.1-linux-x64") + into file("${targetDir}/share/packetproxy/OpenJDK17") + } + copy { + from "${projectDirectory}/installer/izpack/packetproxy" + into "${targetDir}/bin/" + } + } +} + +task preIzpack { + doLast { + copy { + from "${rootProject.projectDir}/installer/izpack/shortcutSpec.xml" + into "${project.ext.pathWorkDir}" + } + copy { + from "${guiResourcesDir}/installer_leftside_image.png" + into "${project.ext.pathWorkDir}" + } + copy { + from "${guiResourcesDir}/installer_icon.png" + into "${project.ext.pathWorkDir}" + } + } +} + +task izpackWin64(type: CreateInstallerTask, dependsOn: [ + 'createWin64Target', + 'preIzpack' +]) { + baseDir = file(project.ext.pathWin64Target) + installFile = file("${rootProject.projectDir}/installer/izpack/installer.xml") + outputFile = file(project.ext.pathWin64Installer) + compression = 'deflate' + compressionLevel = 9 + appProperties = ['app.group': 'PacketProxy', 'app.name': 'PacketProxy', 'app.title': 'PacketProxy', + 'app.version': gitVersion, 'app.subpath': "PacketProxy-${gitVersion}"] +} + +task izpackLinux(type: CreateInstallerTask, dependsOn: [ + 'createLinuxTarget', + 'preIzpack' +]) { + baseDir = file(project.ext.pathLinuxTarget) + installFile = file("${rootProject.projectDir}/installer/izpack/installer.xml") + outputFile = file(project.ext.pathLinuxInstaller) + compression = 'deflate' + compressionLevel = 9 + appProperties = ['app.group': 'PacketProxy', 'app.name': 'PacketProxy', 'app.title': 'PacketProxy', + 'app.version': gitVersion, 'app.subpath': "PacketProxy-${gitVersion}"] +} + +task createMacJPackage(type: Exec, dependsOn: "prepareJPackage") { + workingDir rootProject.projectDir + commandLine = [ + "/Library/Java/JavaVirtualMachines/amazon-corretto-17.jdk/Contents/Home/bin/jpackage", + "--verbose", + "-d", + "${project.ext.pathMacWorkDir}", + "-n", + "PacketProxy", + "-i", + "${buildDir}/libs/", + "--app-version", + gitVersion, + "--icon", + "${project.ext.pathMacWorkDir}/icon.icns", + "--main-jar", + "PacketProxy.jar", + "--mac-sign", + "--mac-signing-key-user-name", + "${project.ext.signedKey}" + ] + onlyIf { Os.isFamily(Os.FAMILY_MAC) } +} + +task resignMacJPackage(dependsOn: "createMacJPackage") { + doLast { + shell("hdiutil convert ${pathMacSignedReleaseJPackage} -format UDRW -o ${project.ext.pathMacWorkDir}/tmp.dmg") + shell("hdiutil mount ${project.ext.pathMacWorkDir}/tmp.dmg") + shell("rm -rf /tmp/packetproxy && mkdir /tmp/packetproxy && cd /tmp/packetproxy && jar xvf /Volumes/PacketProxy/PacketProxy.app/Contents/app/PacketProxy.jar") + shell("cd /tmp/packetproxy; for i in \$(find . -type f); do if file \$i | grep Mach-O > /dev/null; then codesign -fv --timestamp --options=runtime --deep -s \"${project.ext.signedKey}\" \$i; fi; done") + shell("cd /tmp/packetproxy; jar cvfm /Volumes/PacketProxy/PacketProxy.app/Contents/app/PacketProxy.jar META-INF/MANIFEST.MF *") + shell("cd /Volumes/PacketProxy/PacketProxy.app/Contents/; for i in \$(find . -type f); do if file \$i | grep Mach-O > /dev/null; then codesign -fv --timestamp --options=runtime --deep -s \"${project.ext.signedKey}\" \$i; fi; done") + shell("cd /Volumes/PacketProxy; codesign -fv --timestamp --options=runtime --deep -s \"${project.ext.signedKey}\" --entitlements ${rootProject.projectDir}/assets/resign/entitlements.xml PacketProxy.app") + shell("hdiutil detach /Volumes/PacketProxy") + shell("rm ${pathMacSignedReleaseJPackage}; hdiutil convert ${project.ext.pathMacWorkDir}/tmp.dmg -format UDZO -o ${pathMacSignedReleaseJPackage}") + } + onlyIf { Os.isFamily(Os.FAMILY_MAC) } +} + +task createMacInstaller(type: Exec, dependsOn: "resignMacJPackage") { + workingDir rootProject.projectDir + commandLine = [ + "mv", + project.ext.pathMacSignedReleaseJPackage, + project.ext.pathMacSignedRelease + ] + onlyIf { Os.isFamily(Os.FAMILY_MAC) } +} + +task notaryMacInstaller(type: Exec) { + workingDir rootProject.projectDir + commandLine = [ + "xcrun", + "notarytool", + "submit", + "${project.ext.pathMacSignedRelease}", + "--apple-id", + "${project.ext.appleId}", + "--password", + "${project.ext.applePasswd}", + "--team-id", + "${project.ext.teamId}", + "--wait" + ] + onlyIf { Os.isFamily(Os.FAMILY_MAC) } +} + +task createWin64Release(type: Copy, dependsOn: 'izpackWin64') { + from "${project.ext.pathWin64Installer}" + into "${project.ext.pathWin64WorkDir}" + rename("${project.ext.nameInstaller}", "${project.ext.nameWin64Release}") +} + +task createLinuxInstaller(type: Copy, dependsOn: 'izpackLinux') { + from "${project.ext.pathLinuxInstaller}" + into "${project.ext.pathLinuxWorkDir}" + rename("${project.ext.nameInstaller}", "${project.ext.nameLinuxRelease}") +} + +task createMacRelease(dependsOn: 'createMacInstaller') { + /* do nothing */ +} + +task createWinRelease(dependsOn: 'createWin64Release') { + /* do nothing */ +} + +task createLinuxRelease(dependsOn: 'createLinuxInstaller') { + doLast { + file(project.ext.pathLinuxReleaseDir).mkdirs() + copy { + from "${rootProject.projectDir}/installer/izpack/installer.sh" + from "${project.ext.pathLinuxInstaller}" + into "${project.ext.pathLinuxReleaseDir}" + } + shell("cd ${project.ext.pathLinuxWorkDir}; tar czvf ${project.ext.nameLinuxRelease} ${project.ext.nameLinuxReleaseDir}") + } +} + +task release(dependsOn: [ + 'createMacRelease', + 'createWinRelease', + 'createLinuxRelease' +]) { +} diff --git a/gradle/module-common.gradle b/gradle/module-common.gradle new file mode 100644 index 00000000..ed18f52d --- /dev/null +++ b/gradle/module-common.gradle @@ -0,0 +1,45 @@ +ext { + eachInternalEntry = { String filename, Closure action -> + ['dena/', 'denaN/', 'denaL/'].each { def dir -> + def f = rootProject.file(dir + filename) + if (f.exists()) { + Eval.me(f.text).each { action(dir, it) } + } + } + } + collectInternalSrcDirs = { String filename -> + def result = [] + eachInternalEntry(filename) { dir, src -> + if (rootProject.file(dir + src).exists()) { + result << rootProject.file(dir + src) + } + } + return result + } +} + +repositories { + mavenCentral() + maven { url = 'https://jitpack.io' } +} + +java { + toolchain { + languageVersion = JavaLanguageVersion.of(17) + } +} + +tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).configureEach { + compilerOptions { + jvmTarget.set(org.jetbrains.kotlin.gradle.dsl.JvmTarget.JVM_17) + } +} + +tasks.withType(JavaCompile).configureEach { + options.encoding = 'UTF-8' +} + +tasks.withType(Test).configureEach { + systemProperty 'file.encoding', 'UTF-8' + useJUnitPlatform() +} diff --git a/gulp/build.gradle b/gulp/build.gradle new file mode 100644 index 00000000..30cd3e11 --- /dev/null +++ b/gulp/build.gradle @@ -0,0 +1,26 @@ +plugins { + id 'java-library' + id 'org.jetbrains.kotlin.jvm' +} + +apply from: rootProject.file('gradle/module-common.gradle') + +dependencies { + api project(':core') + implementation 'org.jline:jline:3.25.1' + implementation 'org.jline:jline-terminal-jansi:3.25.1' + + testImplementation 'org.junit.jupiter:junit-jupiter:6.0.0' + testRuntimeOnly 'org.junit.platform:junit-platform-launcher' + testRuntimeOnly 'org.jetbrains.kotlin:kotlin-reflect:2.2.21' + testImplementation 'org.assertj:assertj-core:3.23.1' + testImplementation 'com.tngtech.archunit:archunit-junit5:1.4.1' +} + +sourceSets { + test { + kotlin { + srcDirs = ['src/test/kotlin'] + } + } +} diff --git a/src/main/kotlin/core/packetproxy/gulp/CLIModeHandler.kt b/gulp/src/main/kotlin/core/packetproxy/gulp/CLIModeHandler.kt similarity index 100% rename from src/main/kotlin/core/packetproxy/gulp/CLIModeHandler.kt rename to gulp/src/main/kotlin/core/packetproxy/gulp/CLIModeHandler.kt diff --git a/src/main/kotlin/core/packetproxy/gulp/CommandContext.kt b/gulp/src/main/kotlin/core/packetproxy/gulp/CommandContext.kt similarity index 100% rename from src/main/kotlin/core/packetproxy/gulp/CommandContext.kt rename to gulp/src/main/kotlin/core/packetproxy/gulp/CommandContext.kt diff --git a/src/main/kotlin/core/packetproxy/gulp/CommandParser.kt b/gulp/src/main/kotlin/core/packetproxy/gulp/CommandParser.kt similarity index 100% rename from src/main/kotlin/core/packetproxy/gulp/CommandParser.kt rename to gulp/src/main/kotlin/core/packetproxy/gulp/CommandParser.kt diff --git a/src/main/kotlin/core/packetproxy/gulp/DecodeModeHandler.kt b/gulp/src/main/kotlin/core/packetproxy/gulp/DecodeModeHandler.kt similarity index 100% rename from src/main/kotlin/core/packetproxy/gulp/DecodeModeHandler.kt rename to gulp/src/main/kotlin/core/packetproxy/gulp/DecodeModeHandler.kt diff --git a/src/main/kotlin/core/packetproxy/gulp/EncodeModeHandler.kt b/gulp/src/main/kotlin/core/packetproxy/gulp/EncodeModeHandler.kt similarity index 100% rename from src/main/kotlin/core/packetproxy/gulp/EncodeModeHandler.kt rename to gulp/src/main/kotlin/core/packetproxy/gulp/EncodeModeHandler.kt diff --git a/src/main/kotlin/core/packetproxy/gulp/GulpTerminal.kt b/gulp/src/main/kotlin/core/packetproxy/gulp/GulpTerminal.kt similarity index 100% rename from src/main/kotlin/core/packetproxy/gulp/GulpTerminal.kt rename to gulp/src/main/kotlin/core/packetproxy/gulp/GulpTerminal.kt diff --git a/src/main/kotlin/core/packetproxy/gulp/command/Command.kt b/gulp/src/main/kotlin/core/packetproxy/gulp/command/Command.kt similarity index 100% rename from src/main/kotlin/core/packetproxy/gulp/command/Command.kt rename to gulp/src/main/kotlin/core/packetproxy/gulp/command/Command.kt diff --git a/src/main/kotlin/core/packetproxy/gulp/command/EchoCommand.kt b/gulp/src/main/kotlin/core/packetproxy/gulp/command/EchoCommand.kt similarity index 100% rename from src/main/kotlin/core/packetproxy/gulp/command/EchoCommand.kt rename to gulp/src/main/kotlin/core/packetproxy/gulp/command/EchoCommand.kt diff --git a/src/main/kotlin/core/packetproxy/gulp/command/LogCommand.kt b/gulp/src/main/kotlin/core/packetproxy/gulp/command/LogCommand.kt similarity index 100% rename from src/main/kotlin/core/packetproxy/gulp/command/LogCommand.kt rename to gulp/src/main/kotlin/core/packetproxy/gulp/command/LogCommand.kt diff --git a/src/main/kotlin/core/packetproxy/gulp/command/SourceCommand.kt b/gulp/src/main/kotlin/core/packetproxy/gulp/command/SourceCommand.kt similarity index 100% rename from src/main/kotlin/core/packetproxy/gulp/command/SourceCommand.kt rename to gulp/src/main/kotlin/core/packetproxy/gulp/command/SourceCommand.kt diff --git a/src/main/kotlin/core/packetproxy/gulp/input/ChainedSource.kt b/gulp/src/main/kotlin/core/packetproxy/gulp/input/ChainedSource.kt similarity index 100% rename from src/main/kotlin/core/packetproxy/gulp/input/ChainedSource.kt rename to gulp/src/main/kotlin/core/packetproxy/gulp/input/ChainedSource.kt diff --git a/src/main/kotlin/core/packetproxy/gulp/input/DynamicCompleter.kt b/gulp/src/main/kotlin/core/packetproxy/gulp/input/DynamicCompleter.kt similarity index 100% rename from src/main/kotlin/core/packetproxy/gulp/input/DynamicCompleter.kt rename to gulp/src/main/kotlin/core/packetproxy/gulp/input/DynamicCompleter.kt diff --git a/src/main/kotlin/core/packetproxy/gulp/input/FallBackTerminalSource.kt b/gulp/src/main/kotlin/core/packetproxy/gulp/input/FallBackTerminalSource.kt similarity index 100% rename from src/main/kotlin/core/packetproxy/gulp/input/FallBackTerminalSource.kt rename to gulp/src/main/kotlin/core/packetproxy/gulp/input/FallBackTerminalSource.kt diff --git a/src/main/kotlin/core/packetproxy/gulp/input/LineSource.kt b/gulp/src/main/kotlin/core/packetproxy/gulp/input/LineSource.kt similarity index 100% rename from src/main/kotlin/core/packetproxy/gulp/input/LineSource.kt rename to gulp/src/main/kotlin/core/packetproxy/gulp/input/LineSource.kt diff --git a/src/main/kotlin/core/packetproxy/gulp/input/ScriptSource.kt b/gulp/src/main/kotlin/core/packetproxy/gulp/input/ScriptSource.kt similarity index 100% rename from src/main/kotlin/core/packetproxy/gulp/input/ScriptSource.kt rename to gulp/src/main/kotlin/core/packetproxy/gulp/input/ScriptSource.kt diff --git a/src/main/kotlin/core/packetproxy/gulp/input/TerminalFactory.kt b/gulp/src/main/kotlin/core/packetproxy/gulp/input/TerminalFactory.kt similarity index 100% rename from src/main/kotlin/core/packetproxy/gulp/input/TerminalFactory.kt rename to gulp/src/main/kotlin/core/packetproxy/gulp/input/TerminalFactory.kt diff --git a/src/main/kotlin/core/packetproxy/gulp/input/TerminalSource.kt b/gulp/src/main/kotlin/core/packetproxy/gulp/input/TerminalSource.kt similarity index 100% rename from src/main/kotlin/core/packetproxy/gulp/input/TerminalSource.kt rename to gulp/src/main/kotlin/core/packetproxy/gulp/input/TerminalSource.kt diff --git a/src/main/kotlin/core/packetproxy/gulp/output/BufferedOutput.kt b/gulp/src/main/kotlin/core/packetproxy/gulp/output/BufferedOutput.kt similarity index 100% rename from src/main/kotlin/core/packetproxy/gulp/output/BufferedOutput.kt rename to gulp/src/main/kotlin/core/packetproxy/gulp/output/BufferedOutput.kt diff --git a/src/main/kotlin/core/packetproxy/gulp/output/CommandOutput.kt b/gulp/src/main/kotlin/core/packetproxy/gulp/output/CommandOutput.kt similarity index 100% rename from src/main/kotlin/core/packetproxy/gulp/output/CommandOutput.kt rename to gulp/src/main/kotlin/core/packetproxy/gulp/output/CommandOutput.kt diff --git a/src/main/kotlin/core/packetproxy/gulp/output/ConsoleOutput.kt b/gulp/src/main/kotlin/core/packetproxy/gulp/output/ConsoleOutput.kt similarity index 100% rename from src/main/kotlin/core/packetproxy/gulp/output/ConsoleOutput.kt rename to gulp/src/main/kotlin/core/packetproxy/gulp/output/ConsoleOutput.kt diff --git a/src/main/kotlin/core/packetproxy/gulp/output/OutputStyle.kt b/gulp/src/main/kotlin/core/packetproxy/gulp/output/OutputStyle.kt similarity index 100% rename from src/main/kotlin/core/packetproxy/gulp/output/OutputStyle.kt rename to gulp/src/main/kotlin/core/packetproxy/gulp/output/OutputStyle.kt diff --git a/src/test/kotlin/packetproxy/gulp/CommandOutputIntegrationTest.kt b/gulp/src/test/kotlin/packetproxy/CommandOutputIntegrationTest.kt similarity index 100% rename from src/test/kotlin/packetproxy/gulp/CommandOutputIntegrationTest.kt rename to gulp/src/test/kotlin/packetproxy/CommandOutputIntegrationTest.kt diff --git a/gulp/src/test/kotlin/packetproxy/GulpModuleArchitectureTest.kt b/gulp/src/test/kotlin/packetproxy/GulpModuleArchitectureTest.kt new file mode 100644 index 00000000..e5053eb0 --- /dev/null +++ b/gulp/src/test/kotlin/packetproxy/GulpModuleArchitectureTest.kt @@ -0,0 +1,35 @@ +/* + * Copyright 2026 DeNA Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package packetproxy + +import com.tngtech.archunit.core.importer.ClassFileImporter +import com.tngtech.archunit.lang.syntax.ArchRuleDefinition.noClasses +import org.junit.jupiter.api.Test + +class GulpModuleArchitectureTest { + private val classes = ClassFileImporter().importPackages("packetproxy") + + @Test + fun gulpMustNotDependOnGuiOrSwing() { + noClasses() + .that() + .resideInAnyPackage("packetproxy.gulp..", "packetproxy.cli..", "core.packetproxy.gulp..") + .should() + .dependOnClassesThat() + .resideInAnyPackage("packetproxy.gui..", "javax.swing..", "java.awt..") + .check(classes) + } +} diff --git a/src/test/kotlin/packetproxy/gulp/TerminalCoroutinesTest.kt b/gulp/src/test/kotlin/packetproxy/TerminalCoroutinesTest.kt similarity index 100% rename from src/test/kotlin/packetproxy/gulp/TerminalCoroutinesTest.kt rename to gulp/src/test/kotlin/packetproxy/TerminalCoroutinesTest.kt diff --git a/src/test/kotlin/packetproxy/gulp/command/EchoCommandTest.kt b/gulp/src/test/kotlin/packetproxy/command/EchoCommandTest.kt similarity index 100% rename from src/test/kotlin/packetproxy/gulp/command/EchoCommandTest.kt rename to gulp/src/test/kotlin/packetproxy/command/EchoCommandTest.kt diff --git a/src/test/kotlin/packetproxy/gulp/command/SourceCommandTest.kt b/gulp/src/test/kotlin/packetproxy/command/SourceCommandTest.kt similarity index 100% rename from src/test/kotlin/packetproxy/gulp/command/SourceCommandTest.kt rename to gulp/src/test/kotlin/packetproxy/command/SourceCommandTest.kt diff --git a/src/test/kotlin/packetproxy/gulp/output/BufferedOutputTest.kt b/gulp/src/test/kotlin/packetproxy/output/BufferedOutputTest.kt similarity index 100% rename from src/test/kotlin/packetproxy/gulp/output/BufferedOutputTest.kt rename to gulp/src/test/kotlin/packetproxy/output/BufferedOutputTest.kt diff --git a/src/test/kotlin/packetproxy/gulp/output/OutputStyleTest.kt b/gulp/src/test/kotlin/packetproxy/output/OutputStyleTest.kt similarity index 100% rename from src/test/kotlin/packetproxy/gulp/output/OutputStyleTest.kt rename to gulp/src/test/kotlin/packetproxy/output/OutputStyleTest.kt diff --git a/settings.gradle b/settings.gradle index 7134954f..d429f561 100644 --- a/settings.gradle +++ b/settings.gradle @@ -1,9 +1,14 @@ pluginManagement { plugins { - id 'org.jetbrains.kotlin.jvm' version '2.2.0' + id 'org.jetbrains.kotlin.jvm' version '2.2.21' + id 'me.champeau.jmh' version '0.7.3' } } plugins { id 'org.gradle.toolchains.foojay-resolver-convention' version '0.8.0' + id 'org.jetbrains.kotlin.jvm' version '2.2.21' apply false } -rootProject.name = "PacketProxy" + +rootProject.name = 'PacketProxy' + +include 'core', 'ui', 'gulp', 'app' diff --git a/ui/build.gradle b/ui/build.gradle new file mode 100644 index 00000000..2ba96513 --- /dev/null +++ b/ui/build.gradle @@ -0,0 +1,36 @@ +plugins { + id 'java-library' + id 'org.jetbrains.kotlin.jvm' +} + +apply from: rootProject.file('gradle/module-common.gradle') + +dependencies { + api project(':core') + + implementation 'com.formdev:flatlaf:3.4.1' + implementation 'com.formdev:flatlaf-intellij-themes:3.4.1' + implementation 'org.jfree:jfreechart:1.5.3' + implementation 'org.ejml:ejml-all:0.41' + + testImplementation 'org.junit.jupiter:junit-jupiter:6.0.0' + testRuntimeOnly 'org.junit.platform:junit-platform-launcher' + testImplementation 'org.assertj:assertj-core:3.23.1' + testImplementation 'com.tngtech.archunit:archunit-junit5:1.4.1' +} + +sourceSets { + main { + java { + srcDirs = ['src/main/java/core'] + } + resources { + srcDirs = ['src/main/resources'] + } + } + test { + kotlin { + srcDirs = ['src/test/kotlin'] + } + } +} diff --git a/src/main/java/core/packetproxy/gui/BinaryTextPane.java b/ui/src/main/java/core/packetproxy/gui/BinaryTextPane.java similarity index 100% rename from src/main/java/core/packetproxy/gui/BinaryTextPane.java rename to ui/src/main/java/core/packetproxy/gui/BinaryTextPane.java diff --git a/src/main/java/core/packetproxy/gui/CloseButtonTabbedPane.java b/ui/src/main/java/core/packetproxy/gui/CloseButtonTabbedPane.java similarity index 100% rename from src/main/java/core/packetproxy/gui/CloseButtonTabbedPane.java rename to ui/src/main/java/core/packetproxy/gui/CloseButtonTabbedPane.java diff --git a/src/main/java/core/packetproxy/gui/CustomParagraphView.java b/ui/src/main/java/core/packetproxy/gui/CustomParagraphView.java similarity index 100% rename from src/main/java/core/packetproxy/gui/CustomParagraphView.java rename to ui/src/main/java/core/packetproxy/gui/CustomParagraphView.java diff --git a/src/main/java/core/packetproxy/gui/CustomScrollPane.java b/ui/src/main/java/core/packetproxy/gui/CustomScrollPane.java similarity index 100% rename from src/main/java/core/packetproxy/gui/CustomScrollPane.java rename to ui/src/main/java/core/packetproxy/gui/CustomScrollPane.java diff --git a/src/main/java/core/packetproxy/gui/ExtendedTextPane.java b/ui/src/main/java/core/packetproxy/gui/ExtendedTextPane.java similarity index 100% rename from src/main/java/core/packetproxy/gui/ExtendedTextPane.java rename to ui/src/main/java/core/packetproxy/gui/ExtendedTextPane.java diff --git a/src/main/java/core/packetproxy/gui/FilterComboBoxCellRenderer.java b/ui/src/main/java/core/packetproxy/gui/FilterComboBoxCellRenderer.java similarity index 100% rename from src/main/java/core/packetproxy/gui/FilterComboBoxCellRenderer.java rename to ui/src/main/java/core/packetproxy/gui/FilterComboBoxCellRenderer.java diff --git a/src/main/java/core/packetproxy/gui/FilterComboBoxEditor.java b/ui/src/main/java/core/packetproxy/gui/FilterComboBoxEditor.java similarity index 100% rename from src/main/java/core/packetproxy/gui/FilterComboBoxEditor.java rename to ui/src/main/java/core/packetproxy/gui/FilterComboBoxEditor.java diff --git a/src/main/java/core/packetproxy/gui/FilterTextParser.java b/ui/src/main/java/core/packetproxy/gui/FilterTextParser.java similarity index 100% rename from src/main/java/core/packetproxy/gui/FilterTextParser.java rename to ui/src/main/java/core/packetproxy/gui/FilterTextParser.java diff --git a/src/main/java/core/packetproxy/gui/GUIBulkSender.java b/ui/src/main/java/core/packetproxy/gui/GUIBulkSender.java similarity index 100% rename from src/main/java/core/packetproxy/gui/GUIBulkSender.java rename to ui/src/main/java/core/packetproxy/gui/GUIBulkSender.java diff --git a/src/main/java/core/packetproxy/gui/GUIBulkSenderData.java b/ui/src/main/java/core/packetproxy/gui/GUIBulkSenderData.java similarity index 100% rename from src/main/java/core/packetproxy/gui/GUIBulkSenderData.java rename to ui/src/main/java/core/packetproxy/gui/GUIBulkSenderData.java diff --git a/src/main/java/core/packetproxy/gui/GUIBulkSenderDataRaw.java b/ui/src/main/java/core/packetproxy/gui/GUIBulkSenderDataRaw.java similarity index 100% rename from src/main/java/core/packetproxy/gui/GUIBulkSenderDataRaw.java rename to ui/src/main/java/core/packetproxy/gui/GUIBulkSenderDataRaw.java diff --git a/src/main/java/core/packetproxy/gui/GUIBulkSenderTable.java b/ui/src/main/java/core/packetproxy/gui/GUIBulkSenderTable.java similarity index 100% rename from src/main/java/core/packetproxy/gui/GUIBulkSenderTable.java rename to ui/src/main/java/core/packetproxy/gui/GUIBulkSenderTable.java diff --git a/src/main/java/core/packetproxy/gui/GUIData.java b/ui/src/main/java/core/packetproxy/gui/GUIData.java similarity index 100% rename from src/main/java/core/packetproxy/gui/GUIData.java rename to ui/src/main/java/core/packetproxy/gui/GUIData.java diff --git a/src/main/java/core/packetproxy/gui/GUIDataAll.java b/ui/src/main/java/core/packetproxy/gui/GUIDataAll.java similarity index 100% rename from src/main/java/core/packetproxy/gui/GUIDataAll.java rename to ui/src/main/java/core/packetproxy/gui/GUIDataAll.java diff --git a/src/main/java/core/packetproxy/gui/GUIDecoderDialog.java b/ui/src/main/java/core/packetproxy/gui/GUIDecoderDialog.java similarity index 100% rename from src/main/java/core/packetproxy/gui/GUIDecoderDialog.java rename to ui/src/main/java/core/packetproxy/gui/GUIDecoderDialog.java diff --git a/src/main/java/core/packetproxy/gui/GUIDiffBase.java b/ui/src/main/java/core/packetproxy/gui/GUIDiffBase.java similarity index 100% rename from src/main/java/core/packetproxy/gui/GUIDiffBase.java rename to ui/src/main/java/core/packetproxy/gui/GUIDiffBase.java diff --git a/src/main/java/core/packetproxy/gui/GUIDiffBinary.java b/ui/src/main/java/core/packetproxy/gui/GUIDiffBinary.java similarity index 100% rename from src/main/java/core/packetproxy/gui/GUIDiffBinary.java rename to ui/src/main/java/core/packetproxy/gui/GUIDiffBinary.java diff --git a/src/main/java/core/packetproxy/gui/GUIDiffDialogParent.java b/ui/src/main/java/core/packetproxy/gui/GUIDiffDialogParent.java similarity index 100% rename from src/main/java/core/packetproxy/gui/GUIDiffDialogParent.java rename to ui/src/main/java/core/packetproxy/gui/GUIDiffDialogParent.java diff --git a/src/main/java/core/packetproxy/gui/GUIDiffJson.java b/ui/src/main/java/core/packetproxy/gui/GUIDiffJson.java similarity index 100% rename from src/main/java/core/packetproxy/gui/GUIDiffJson.java rename to ui/src/main/java/core/packetproxy/gui/GUIDiffJson.java diff --git a/src/main/java/core/packetproxy/gui/GUIDiffRaw.java b/ui/src/main/java/core/packetproxy/gui/GUIDiffRaw.java similarity index 100% rename from src/main/java/core/packetproxy/gui/GUIDiffRaw.java rename to ui/src/main/java/core/packetproxy/gui/GUIDiffRaw.java diff --git a/src/main/java/core/packetproxy/gui/GUIExtensions.java b/ui/src/main/java/core/packetproxy/gui/GUIExtensions.java similarity index 100% rename from src/main/java/core/packetproxy/gui/GUIExtensions.java rename to ui/src/main/java/core/packetproxy/gui/GUIExtensions.java diff --git a/src/main/java/core/packetproxy/gui/GUIFilterConfig.java b/ui/src/main/java/core/packetproxy/gui/GUIFilterConfig.java similarity index 100% rename from src/main/java/core/packetproxy/gui/GUIFilterConfig.java rename to ui/src/main/java/core/packetproxy/gui/GUIFilterConfig.java diff --git a/src/main/java/core/packetproxy/gui/GUIFilterConfigAddDialog.java b/ui/src/main/java/core/packetproxy/gui/GUIFilterConfigAddDialog.java similarity index 100% rename from src/main/java/core/packetproxy/gui/GUIFilterConfigAddDialog.java rename to ui/src/main/java/core/packetproxy/gui/GUIFilterConfigAddDialog.java diff --git a/src/main/java/core/packetproxy/gui/GUIFilterConfigDialog.java b/ui/src/main/java/core/packetproxy/gui/GUIFilterConfigDialog.java similarity index 100% rename from src/main/java/core/packetproxy/gui/GUIFilterConfigDialog.java rename to ui/src/main/java/core/packetproxy/gui/GUIFilterConfigDialog.java diff --git a/src/main/java/core/packetproxy/gui/GUIFilterConfigEditDialog.java b/ui/src/main/java/core/packetproxy/gui/GUIFilterConfigEditDialog.java similarity index 100% rename from src/main/java/core/packetproxy/gui/GUIFilterConfigEditDialog.java rename to ui/src/main/java/core/packetproxy/gui/GUIFilterConfigEditDialog.java diff --git a/src/main/java/core/packetproxy/gui/GUIFilterDropDownList.java b/ui/src/main/java/core/packetproxy/gui/GUIFilterDropDownList.java similarity index 100% rename from src/main/java/core/packetproxy/gui/GUIFilterDropDownList.java rename to ui/src/main/java/core/packetproxy/gui/GUIFilterDropDownList.java diff --git a/src/main/java/core/packetproxy/gui/GUIHexCalc.java b/ui/src/main/java/core/packetproxy/gui/GUIHexCalc.java similarity index 100% rename from src/main/java/core/packetproxy/gui/GUIHexCalc.java rename to ui/src/main/java/core/packetproxy/gui/GUIHexCalc.java diff --git a/src/main/java/core/packetproxy/gui/GUIHistory.java b/ui/src/main/java/core/packetproxy/gui/GUIHistory.java similarity index 100% rename from src/main/java/core/packetproxy/gui/GUIHistory.java rename to ui/src/main/java/core/packetproxy/gui/GUIHistory.java diff --git a/src/main/java/core/packetproxy/gui/GUIHistoryAutoScroll.java b/ui/src/main/java/core/packetproxy/gui/GUIHistoryAutoScroll.java similarity index 100% rename from src/main/java/core/packetproxy/gui/GUIHistoryAutoScroll.java rename to ui/src/main/java/core/packetproxy/gui/GUIHistoryAutoScroll.java diff --git a/src/main/java/core/packetproxy/gui/GUIHistoryBinary.java b/ui/src/main/java/core/packetproxy/gui/GUIHistoryBinary.java similarity index 100% rename from src/main/java/core/packetproxy/gui/GUIHistoryBinary.java rename to ui/src/main/java/core/packetproxy/gui/GUIHistoryBinary.java diff --git a/src/main/java/core/packetproxy/gui/GUIHistoryContextMenuFactory.java b/ui/src/main/java/core/packetproxy/gui/GUIHistoryContextMenuFactory.java similarity index 100% rename from src/main/java/core/packetproxy/gui/GUIHistoryContextMenuFactory.java rename to ui/src/main/java/core/packetproxy/gui/GUIHistoryContextMenuFactory.java diff --git a/src/main/java/core/packetproxy/gui/GUIHistoryPanel.java b/ui/src/main/java/core/packetproxy/gui/GUIHistoryPanel.java similarity index 100% rename from src/main/java/core/packetproxy/gui/GUIHistoryPanel.java rename to ui/src/main/java/core/packetproxy/gui/GUIHistoryPanel.java diff --git a/src/main/java/core/packetproxy/gui/GUIHistoryRaw.java b/ui/src/main/java/core/packetproxy/gui/GUIHistoryRaw.java similarity index 100% rename from src/main/java/core/packetproxy/gui/GUIHistoryRaw.java rename to ui/src/main/java/core/packetproxy/gui/GUIHistoryRaw.java diff --git a/src/main/java/core/packetproxy/gui/GUIIntercept.java b/ui/src/main/java/core/packetproxy/gui/GUIIntercept.java similarity index 100% rename from src/main/java/core/packetproxy/gui/GUIIntercept.java rename to ui/src/main/java/core/packetproxy/gui/GUIIntercept.java diff --git a/src/main/java/core/packetproxy/gui/GUIJson.java b/ui/src/main/java/core/packetproxy/gui/GUIJson.java similarity index 100% rename from src/main/java/core/packetproxy/gui/GUIJson.java rename to ui/src/main/java/core/packetproxy/gui/GUIJson.java diff --git a/src/main/java/core/packetproxy/gui/GUILog.java b/ui/src/main/java/core/packetproxy/gui/GUILog.java similarity index 100% rename from src/main/java/core/packetproxy/gui/GUILog.java rename to ui/src/main/java/core/packetproxy/gui/GUILog.java diff --git a/src/main/java/core/packetproxy/gui/GUILogSink.java b/ui/src/main/java/core/packetproxy/gui/GUILogSink.java similarity index 100% rename from src/main/java/core/packetproxy/gui/GUILogSink.java rename to ui/src/main/java/core/packetproxy/gui/GUILogSink.java diff --git a/src/main/java/core/packetproxy/gui/GUIMain.java b/ui/src/main/java/core/packetproxy/gui/GUIMain.java similarity index 98% rename from src/main/java/core/packetproxy/gui/GUIMain.java rename to ui/src/main/java/core/packetproxy/gui/GUIMain.java index b2b7e7ab..3f0b65e5 100644 --- a/src/main/java/core/packetproxy/gui/GUIMain.java +++ b/ui/src/main/java/core/packetproxy/gui/GUIMain.java @@ -32,8 +32,8 @@ import javax.swing.text.Keymap; import packetproxy.common.FontManager; import packetproxy.common.I18nString; -import packetproxy.model.InterceptModel; import packetproxy.controller.ResendController; +import packetproxy.model.InterceptModel; import packetproxy.platform.LogSinks; import packetproxy.platform.MainWindows; import packetproxy.platform.UserPrompts; @@ -105,9 +105,10 @@ private GUIMain(String title) { try { UserPrompts.set(new SwingUserPrompt()); + GuiExtensionPresets.register(); MainWindows.set(new GUIMainWindowAccess(this)); - ResendController.setProgressHandler( - (worker, packets) -> SwingUtilities.invokeLater(() -> worker.process(packets))); + ResendController + .setProgressHandler((worker, packets) -> SwingUtilities.invokeLater(() -> worker.process(packets))); setIcon(); gui_history = initProjectAndHistory(); setLookandFeel(); diff --git a/src/main/java/core/packetproxy/gui/GUIMainWindowAccess.java b/ui/src/main/java/core/packetproxy/gui/GUIMainWindowAccess.java similarity index 100% rename from src/main/java/core/packetproxy/gui/GUIMainWindowAccess.java rename to ui/src/main/java/core/packetproxy/gui/GUIMainWindowAccess.java diff --git a/src/main/java/core/packetproxy/gui/GUIMenu.java b/ui/src/main/java/core/packetproxy/gui/GUIMenu.java similarity index 100% rename from src/main/java/core/packetproxy/gui/GUIMenu.java rename to ui/src/main/java/core/packetproxy/gui/GUIMenu.java diff --git a/src/main/java/core/packetproxy/gui/GUIOption.java b/ui/src/main/java/core/packetproxy/gui/GUIOption.java similarity index 100% rename from src/main/java/core/packetproxy/gui/GUIOption.java rename to ui/src/main/java/core/packetproxy/gui/GUIOption.java diff --git a/src/main/java/core/packetproxy/gui/GUIOptionCharSetDialog.java b/ui/src/main/java/core/packetproxy/gui/GUIOptionCharSetDialog.java similarity index 100% rename from src/main/java/core/packetproxy/gui/GUIOptionCharSetDialog.java rename to ui/src/main/java/core/packetproxy/gui/GUIOptionCharSetDialog.java diff --git a/src/main/java/core/packetproxy/gui/GUIOptionCharSets.java b/ui/src/main/java/core/packetproxy/gui/GUIOptionCharSets.java similarity index 100% rename from src/main/java/core/packetproxy/gui/GUIOptionCharSets.java rename to ui/src/main/java/core/packetproxy/gui/GUIOptionCharSets.java diff --git a/src/main/java/core/packetproxy/gui/GUIOptionClientCertificate.java b/ui/src/main/java/core/packetproxy/gui/GUIOptionClientCertificate.java similarity index 100% rename from src/main/java/core/packetproxy/gui/GUIOptionClientCertificate.java rename to ui/src/main/java/core/packetproxy/gui/GUIOptionClientCertificate.java diff --git a/src/main/java/core/packetproxy/gui/GUIOptionClientCertificateDialog.java b/ui/src/main/java/core/packetproxy/gui/GUIOptionClientCertificateDialog.java similarity index 100% rename from src/main/java/core/packetproxy/gui/GUIOptionClientCertificateDialog.java rename to ui/src/main/java/core/packetproxy/gui/GUIOptionClientCertificateDialog.java diff --git a/src/main/java/core/packetproxy/gui/GUIOptionComponentBase.java b/ui/src/main/java/core/packetproxy/gui/GUIOptionComponentBase.java similarity index 100% rename from src/main/java/core/packetproxy/gui/GUIOptionComponentBase.java rename to ui/src/main/java/core/packetproxy/gui/GUIOptionComponentBase.java diff --git a/src/main/java/core/packetproxy/gui/GUIOptionExportCertificateAndPrivateKeyDialog.java b/ui/src/main/java/core/packetproxy/gui/GUIOptionExportCertificateAndPrivateKeyDialog.java similarity index 100% rename from src/main/java/core/packetproxy/gui/GUIOptionExportCertificateAndPrivateKeyDialog.java rename to ui/src/main/java/core/packetproxy/gui/GUIOptionExportCertificateAndPrivateKeyDialog.java diff --git a/src/main/java/core/packetproxy/gui/GUIOptionExtensions.java b/ui/src/main/java/core/packetproxy/gui/GUIOptionExtensions.java similarity index 100% rename from src/main/java/core/packetproxy/gui/GUIOptionExtensions.java rename to ui/src/main/java/core/packetproxy/gui/GUIOptionExtensions.java diff --git a/src/main/java/core/packetproxy/gui/GUIOptionExtensionsDialog.java b/ui/src/main/java/core/packetproxy/gui/GUIOptionExtensionsDialog.java similarity index 100% rename from src/main/java/core/packetproxy/gui/GUIOptionExtensionsDialog.java rename to ui/src/main/java/core/packetproxy/gui/GUIOptionExtensionsDialog.java diff --git a/src/main/java/core/packetproxy/gui/GUIOptionFonts.java b/ui/src/main/java/core/packetproxy/gui/GUIOptionFonts.java similarity index 100% rename from src/main/java/core/packetproxy/gui/GUIOptionFonts.java rename to ui/src/main/java/core/packetproxy/gui/GUIOptionFonts.java diff --git a/src/main/java/core/packetproxy/gui/GUIOptionHttp.java b/ui/src/main/java/core/packetproxy/gui/GUIOptionHttp.java similarity index 100% rename from src/main/java/core/packetproxy/gui/GUIOptionHttp.java rename to ui/src/main/java/core/packetproxy/gui/GUIOptionHttp.java diff --git a/src/main/java/core/packetproxy/gui/GUIOptionHubServer.java b/ui/src/main/java/core/packetproxy/gui/GUIOptionHubServer.java similarity index 100% rename from src/main/java/core/packetproxy/gui/GUIOptionHubServer.java rename to ui/src/main/java/core/packetproxy/gui/GUIOptionHubServer.java diff --git a/src/main/java/core/packetproxy/gui/GUIOptionImportCertificateAndPrivateKeyDialog.java b/ui/src/main/java/core/packetproxy/gui/GUIOptionImportCertificateAndPrivateKeyDialog.java similarity index 100% rename from src/main/java/core/packetproxy/gui/GUIOptionImportCertificateAndPrivateKeyDialog.java rename to ui/src/main/java/core/packetproxy/gui/GUIOptionImportCertificateAndPrivateKeyDialog.java diff --git a/src/main/java/core/packetproxy/gui/GUIOptionInterceptDialog.java b/ui/src/main/java/core/packetproxy/gui/GUIOptionInterceptDialog.java similarity index 100% rename from src/main/java/core/packetproxy/gui/GUIOptionInterceptDialog.java rename to ui/src/main/java/core/packetproxy/gui/GUIOptionInterceptDialog.java diff --git a/src/main/java/core/packetproxy/gui/GUIOptionInterceptEditOthersDialog.java b/ui/src/main/java/core/packetproxy/gui/GUIOptionInterceptEditOthersDialog.java similarity index 100% rename from src/main/java/core/packetproxy/gui/GUIOptionInterceptEditOthersDialog.java rename to ui/src/main/java/core/packetproxy/gui/GUIOptionInterceptEditOthersDialog.java diff --git a/src/main/java/core/packetproxy/gui/GUIOptionIntercepts.java b/ui/src/main/java/core/packetproxy/gui/GUIOptionIntercepts.java similarity index 100% rename from src/main/java/core/packetproxy/gui/GUIOptionIntercepts.java rename to ui/src/main/java/core/packetproxy/gui/GUIOptionIntercepts.java diff --git a/src/main/java/core/packetproxy/gui/GUIOptionListenPortDialog.java b/ui/src/main/java/core/packetproxy/gui/GUIOptionListenPortDialog.java similarity index 100% rename from src/main/java/core/packetproxy/gui/GUIOptionListenPortDialog.java rename to ui/src/main/java/core/packetproxy/gui/GUIOptionListenPortDialog.java diff --git a/src/main/java/core/packetproxy/gui/GUIOptionListenPorts.java b/ui/src/main/java/core/packetproxy/gui/GUIOptionListenPorts.java similarity index 100% rename from src/main/java/core/packetproxy/gui/GUIOptionListenPorts.java rename to ui/src/main/java/core/packetproxy/gui/GUIOptionListenPorts.java diff --git a/src/main/java/core/packetproxy/gui/GUIOptionModificationDialog.java b/ui/src/main/java/core/packetproxy/gui/GUIOptionModificationDialog.java similarity index 100% rename from src/main/java/core/packetproxy/gui/GUIOptionModificationDialog.java rename to ui/src/main/java/core/packetproxy/gui/GUIOptionModificationDialog.java diff --git a/src/main/java/core/packetproxy/gui/GUIOptionModifications.java b/ui/src/main/java/core/packetproxy/gui/GUIOptionModifications.java similarity index 100% rename from src/main/java/core/packetproxy/gui/GUIOptionModifications.java rename to ui/src/main/java/core/packetproxy/gui/GUIOptionModifications.java diff --git a/src/main/java/core/packetproxy/gui/GUIOptionOpenVPN.java b/ui/src/main/java/core/packetproxy/gui/GUIOptionOpenVPN.java similarity index 100% rename from src/main/java/core/packetproxy/gui/GUIOptionOpenVPN.java rename to ui/src/main/java/core/packetproxy/gui/GUIOptionOpenVPN.java diff --git a/src/main/java/core/packetproxy/gui/GUIOptionOpenVPNDialog.java b/ui/src/main/java/core/packetproxy/gui/GUIOptionOpenVPNDialog.java similarity index 100% rename from src/main/java/core/packetproxy/gui/GUIOptionOpenVPNDialog.java rename to ui/src/main/java/core/packetproxy/gui/GUIOptionOpenVPNDialog.java diff --git a/src/main/java/core/packetproxy/gui/GUIOptionPrivateDNS.java b/ui/src/main/java/core/packetproxy/gui/GUIOptionPrivateDNS.java similarity index 100% rename from src/main/java/core/packetproxy/gui/GUIOptionPrivateDNS.java rename to ui/src/main/java/core/packetproxy/gui/GUIOptionPrivateDNS.java diff --git a/src/main/java/core/packetproxy/gui/GUIOptionPrivateDNSSpoofingSource.java b/ui/src/main/java/core/packetproxy/gui/GUIOptionPrivateDNSSpoofingSource.java similarity index 100% rename from src/main/java/core/packetproxy/gui/GUIOptionPrivateDNSSpoofingSource.java rename to ui/src/main/java/core/packetproxy/gui/GUIOptionPrivateDNSSpoofingSource.java diff --git a/src/main/java/core/packetproxy/gui/GUIOptionResolutionDialog.java b/ui/src/main/java/core/packetproxy/gui/GUIOptionResolutionDialog.java similarity index 100% rename from src/main/java/core/packetproxy/gui/GUIOptionResolutionDialog.java rename to ui/src/main/java/core/packetproxy/gui/GUIOptionResolutionDialog.java diff --git a/src/main/java/core/packetproxy/gui/GUIOptionResolutions.java b/ui/src/main/java/core/packetproxy/gui/GUIOptionResolutions.java similarity index 100% rename from src/main/java/core/packetproxy/gui/GUIOptionResolutions.java rename to ui/src/main/java/core/packetproxy/gui/GUIOptionResolutions.java diff --git a/src/main/java/core/packetproxy/gui/GUIOptionSSLPassThrough.java b/ui/src/main/java/core/packetproxy/gui/GUIOptionSSLPassThrough.java similarity index 100% rename from src/main/java/core/packetproxy/gui/GUIOptionSSLPassThrough.java rename to ui/src/main/java/core/packetproxy/gui/GUIOptionSSLPassThrough.java diff --git a/src/main/java/core/packetproxy/gui/GUIOptionSSLPassThroughDialog.java b/ui/src/main/java/core/packetproxy/gui/GUIOptionSSLPassThroughDialog.java similarity index 100% rename from src/main/java/core/packetproxy/gui/GUIOptionSSLPassThroughDialog.java rename to ui/src/main/java/core/packetproxy/gui/GUIOptionSSLPassThroughDialog.java diff --git a/src/main/java/core/packetproxy/gui/GUIOptionServerDialog.java b/ui/src/main/java/core/packetproxy/gui/GUIOptionServerDialog.java similarity index 100% rename from src/main/java/core/packetproxy/gui/GUIOptionServerDialog.java rename to ui/src/main/java/core/packetproxy/gui/GUIOptionServerDialog.java diff --git a/src/main/java/core/packetproxy/gui/GUIOptionServers.java b/ui/src/main/java/core/packetproxy/gui/GUIOptionServers.java similarity index 100% rename from src/main/java/core/packetproxy/gui/GUIOptionServers.java rename to ui/src/main/java/core/packetproxy/gui/GUIOptionServers.java diff --git a/src/main/java/core/packetproxy/gui/GUIPacket.java b/ui/src/main/java/core/packetproxy/gui/GUIPacket.java similarity index 100% rename from src/main/java/core/packetproxy/gui/GUIPacket.java rename to ui/src/main/java/core/packetproxy/gui/GUIPacket.java diff --git a/src/main/java/core/packetproxy/gui/GUIPacketData.java b/ui/src/main/java/core/packetproxy/gui/GUIPacketData.java similarity index 100% rename from src/main/java/core/packetproxy/gui/GUIPacketData.java rename to ui/src/main/java/core/packetproxy/gui/GUIPacketData.java diff --git a/src/main/java/core/packetproxy/gui/GUIProjectChooserDialog.java b/ui/src/main/java/core/packetproxy/gui/GUIProjectChooserDialog.java similarity index 100% rename from src/main/java/core/packetproxy/gui/GUIProjectChooserDialog.java rename to ui/src/main/java/core/packetproxy/gui/GUIProjectChooserDialog.java diff --git a/src/main/java/core/packetproxy/gui/GUIRegexParamDialog.java b/ui/src/main/java/core/packetproxy/gui/GUIRegexParamDialog.java similarity index 100% rename from src/main/java/core/packetproxy/gui/GUIRegexParamDialog.java rename to ui/src/main/java/core/packetproxy/gui/GUIRegexParamDialog.java diff --git a/src/main/java/core/packetproxy/gui/GUIRegexParamsTableDialog.java b/ui/src/main/java/core/packetproxy/gui/GUIRegexParamsTableDialog.java similarity index 100% rename from src/main/java/core/packetproxy/gui/GUIRegexParamsTableDialog.java rename to ui/src/main/java/core/packetproxy/gui/GUIRegexParamsTableDialog.java diff --git a/src/main/java/core/packetproxy/gui/GUIResender.java b/ui/src/main/java/core/packetproxy/gui/GUIResender.java similarity index 100% rename from src/main/java/core/packetproxy/gui/GUIResender.java rename to ui/src/main/java/core/packetproxy/gui/GUIResender.java diff --git a/src/main/java/core/packetproxy/gui/GUIServerNamePanel.java b/ui/src/main/java/core/packetproxy/gui/GUIServerNamePanel.java similarity index 100% rename from src/main/java/core/packetproxy/gui/GUIServerNamePanel.java rename to ui/src/main/java/core/packetproxy/gui/GUIServerNamePanel.java diff --git a/src/main/java/core/packetproxy/gui/GUITooltipDecodeMessage.java b/ui/src/main/java/core/packetproxy/gui/GUITooltipDecodeMessage.java similarity index 100% rename from src/main/java/core/packetproxy/gui/GUITooltipDecodeMessage.java rename to ui/src/main/java/core/packetproxy/gui/GUITooltipDecodeMessage.java diff --git a/src/main/java/core/packetproxy/gui/GUIVulCheckHelper.java b/ui/src/main/java/core/packetproxy/gui/GUIVulCheckHelper.java similarity index 100% rename from src/main/java/core/packetproxy/gui/GUIVulCheckHelper.java rename to ui/src/main/java/core/packetproxy/gui/GUIVulCheckHelper.java diff --git a/src/main/java/core/packetproxy/gui/GUIVulCheckManager.java b/ui/src/main/java/core/packetproxy/gui/GUIVulCheckManager.java similarity index 100% rename from src/main/java/core/packetproxy/gui/GUIVulCheckManager.java rename to ui/src/main/java/core/packetproxy/gui/GUIVulCheckManager.java diff --git a/src/main/java/core/packetproxy/gui/GUIVulCheckRecvTable.java b/ui/src/main/java/core/packetproxy/gui/GUIVulCheckRecvTable.java similarity index 100% rename from src/main/java/core/packetproxy/gui/GUIVulCheckRecvTable.java rename to ui/src/main/java/core/packetproxy/gui/GUIVulCheckRecvTable.java diff --git a/src/main/java/core/packetproxy/gui/GUIVulCheckSendTable.java b/ui/src/main/java/core/packetproxy/gui/GUIVulCheckSendTable.java similarity index 100% rename from src/main/java/core/packetproxy/gui/GUIVulCheckSendTable.java rename to ui/src/main/java/core/packetproxy/gui/GUIVulCheckSendTable.java diff --git a/src/main/java/core/packetproxy/gui/GUIVulCheckTab.java b/ui/src/main/java/core/packetproxy/gui/GUIVulCheckTab.java similarity index 100% rename from src/main/java/core/packetproxy/gui/GUIVulCheckTab.java rename to ui/src/main/java/core/packetproxy/gui/GUIVulCheckTab.java diff --git a/ui/src/main/java/core/packetproxy/gui/GuiExtensionPresets.java b/ui/src/main/java/core/packetproxy/gui/GuiExtensionPresets.java new file mode 100644 index 00000000..23e1ef01 --- /dev/null +++ b/ui/src/main/java/core/packetproxy/gui/GuiExtensionPresets.java @@ -0,0 +1,31 @@ +/* + * Copyright 2026 DeNA Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package packetproxy.gui; + +import packetproxy.extensions.securityheaders.SecurityHeadersExtension; +import packetproxy.gui.extensions.randomness.RandomnessExtension; +import packetproxy.model.Extensions; + +public final class GuiExtensionPresets { + + private GuiExtensionPresets() { + } + + public static void register() throws Exception { + Extensions.registerPresetExtension(new RandomnessExtension().getName(), RandomnessExtension.class); + Extensions.registerPresetExtension(new SecurityHeadersExtension().getName(), SecurityHeadersExtension.class); + } +} diff --git a/src/main/java/core/packetproxy/gui/HintTextField.java b/ui/src/main/java/core/packetproxy/gui/HintTextField.java similarity index 100% rename from src/main/java/core/packetproxy/gui/HintTextField.java rename to ui/src/main/java/core/packetproxy/gui/HintTextField.java diff --git a/src/main/java/core/packetproxy/gui/JFontChooser.java b/ui/src/main/java/core/packetproxy/gui/JFontChooser.java similarity index 100% rename from src/main/java/core/packetproxy/gui/JFontChooser.java rename to ui/src/main/java/core/packetproxy/gui/JFontChooser.java diff --git a/src/main/java/core/packetproxy/gui/NativeFileChooser.java b/ui/src/main/java/core/packetproxy/gui/NativeFileChooser.java similarity index 100% rename from src/main/java/core/packetproxy/gui/NativeFileChooser.java rename to ui/src/main/java/core/packetproxy/gui/NativeFileChooser.java diff --git a/src/main/java/core/packetproxy/gui/OptionTableModel.java b/ui/src/main/java/core/packetproxy/gui/OptionTableModel.java similarity index 100% rename from src/main/java/core/packetproxy/gui/OptionTableModel.java rename to ui/src/main/java/core/packetproxy/gui/OptionTableModel.java diff --git a/src/main/java/core/packetproxy/PPContextMenuManager.java b/ui/src/main/java/core/packetproxy/gui/PPContextMenuManager.java similarity index 99% rename from src/main/java/core/packetproxy/PPContextMenuManager.java rename to ui/src/main/java/core/packetproxy/gui/PPContextMenuManager.java index e2466c52..fe8e0b17 100644 --- a/src/main/java/core/packetproxy/PPContextMenuManager.java +++ b/ui/src/main/java/core/packetproxy/gui/PPContextMenuManager.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package packetproxy; +package packetproxy.gui; import static packetproxy.util.Logging.errWithStackTrace; diff --git a/src/main/java/core/packetproxy/gui/Projects.java b/ui/src/main/java/core/packetproxy/gui/Projects.java similarity index 100% rename from src/main/java/core/packetproxy/gui/Projects.java rename to ui/src/main/java/core/packetproxy/gui/Projects.java diff --git a/src/main/java/core/packetproxy/gui/RawTextPane.java b/ui/src/main/java/core/packetproxy/gui/RawTextPane.java similarity index 100% rename from src/main/java/core/packetproxy/gui/RawTextPane.java rename to ui/src/main/java/core/packetproxy/gui/RawTextPane.java diff --git a/src/main/java/core/packetproxy/gui/Splash.java b/ui/src/main/java/core/packetproxy/gui/Splash.java similarity index 100% rename from src/main/java/core/packetproxy/gui/Splash.java rename to ui/src/main/java/core/packetproxy/gui/Splash.java diff --git a/src/main/java/core/packetproxy/gui/SwingConfigHttpUiActions.java b/ui/src/main/java/core/packetproxy/gui/SwingConfigHttpUiActions.java similarity index 87% rename from src/main/java/core/packetproxy/gui/SwingConfigHttpUiActions.java rename to ui/src/main/java/core/packetproxy/gui/SwingConfigHttpUiActions.java index fadcf844..b75bcd35 100644 --- a/src/main/java/core/packetproxy/gui/SwingConfigHttpUiActions.java +++ b/ui/src/main/java/core/packetproxy/gui/SwingConfigHttpUiActions.java @@ -51,13 +51,8 @@ private boolean confirmOverwriteConfigInternal() throws Exception { var main = GUIMain.getInstance(); main.setAlwaysOnTop(true); main.setVisible(true); - int option = - JOptionPane.showConfirmDialog( - main, - I18nString.get("Do you want to overwrite config?"), - I18nString.get("Loading config"), - JOptionPane.YES_NO_OPTION, - JOptionPane.WARNING_MESSAGE); + int option = JOptionPane.showConfirmDialog(main, I18nString.get("Do you want to overwrite config?"), + I18nString.get("Loading config"), JOptionPane.YES_NO_OPTION, JOptionPane.WARNING_MESSAGE); main.setAlwaysOnTop(false); return option == JOptionPane.YES_OPTION; } diff --git a/src/main/java/core/packetproxy/gui/SwingUserPrompt.java b/ui/src/main/java/core/packetproxy/gui/SwingUserPrompt.java similarity index 100% rename from src/main/java/core/packetproxy/gui/SwingUserPrompt.java rename to ui/src/main/java/core/packetproxy/gui/SwingUserPrompt.java diff --git a/src/main/java/core/packetproxy/gui/TabSet.java b/ui/src/main/java/core/packetproxy/gui/TabSet.java similarity index 100% rename from src/main/java/core/packetproxy/gui/TabSet.java rename to ui/src/main/java/core/packetproxy/gui/TabSet.java diff --git a/src/main/java/core/packetproxy/gui/TableCustomColorManager.java b/ui/src/main/java/core/packetproxy/gui/TableCustomColorManager.java similarity index 100% rename from src/main/java/core/packetproxy/gui/TableCustomColorManager.java rename to ui/src/main/java/core/packetproxy/gui/TableCustomColorManager.java diff --git a/src/main/java/core/packetproxy/gui/TableHeaderStyle.java b/ui/src/main/java/core/packetproxy/gui/TableHeaderStyle.java similarity index 100% rename from src/main/java/core/packetproxy/gui/TableHeaderStyle.java rename to ui/src/main/java/core/packetproxy/gui/TableHeaderStyle.java diff --git a/src/main/java/core/packetproxy/gui/WrapEditorKit.java b/ui/src/main/java/core/packetproxy/gui/WrapEditorKit.java similarity index 100% rename from src/main/java/core/packetproxy/gui/WrapEditorKit.java rename to ui/src/main/java/core/packetproxy/gui/WrapEditorKit.java diff --git a/src/main/java/core/packetproxy/gui/WriteFileChooserWrapper.java b/ui/src/main/java/core/packetproxy/gui/WriteFileChooserWrapper.java similarity index 100% rename from src/main/java/core/packetproxy/gui/WriteFileChooserWrapper.java rename to ui/src/main/java/core/packetproxy/gui/WriteFileChooserWrapper.java diff --git a/src/main/java/core/packetproxy/gui/extensions/randomness/RandomnessExtension.java b/ui/src/main/java/core/packetproxy/gui/extensions/randomness/RandomnessExtension.java similarity index 100% rename from src/main/java/core/packetproxy/gui/extensions/randomness/RandomnessExtension.java rename to ui/src/main/java/core/packetproxy/gui/extensions/randomness/RandomnessExtension.java diff --git a/src/main/java/core/packetproxy/gui/ppcontextmenu/PPContextMenu.java b/ui/src/main/java/core/packetproxy/gui/ppcontextmenu/PPContextMenu.java similarity index 100% rename from src/main/java/core/packetproxy/gui/ppcontextmenu/PPContextMenu.java rename to ui/src/main/java/core/packetproxy/gui/ppcontextmenu/PPContextMenu.java diff --git a/src/main/java/core/packetproxy/gui/ppcontextmenu/SampleItem.java b/ui/src/main/java/core/packetproxy/gui/ppcontextmenu/SampleItem.java similarity index 100% rename from src/main/java/core/packetproxy/gui/ppcontextmenu/SampleItem.java rename to ui/src/main/java/core/packetproxy/gui/ppcontextmenu/SampleItem.java diff --git a/src/main/kotlin/core/packetproxy/extensions/securityheaders/SecurityHeadersExtension.kt b/ui/src/main/kotlin/core/packetproxy/extensions/securityheaders/SecurityHeadersExtension.kt similarity index 100% rename from src/main/kotlin/core/packetproxy/extensions/securityheaders/SecurityHeadersExtension.kt rename to ui/src/main/kotlin/core/packetproxy/extensions/securityheaders/SecurityHeadersExtension.kt diff --git a/src/main/kotlin/core/packetproxy/extensions/securityheaders/ui/ExclusionManagementDialog.kt b/ui/src/main/kotlin/core/packetproxy/extensions/securityheaders/ui/ExclusionManagementDialog.kt similarity index 100% rename from src/main/kotlin/core/packetproxy/extensions/securityheaders/ui/ExclusionManagementDialog.kt rename to ui/src/main/kotlin/core/packetproxy/extensions/securityheaders/ui/ExclusionManagementDialog.kt diff --git a/src/main/kotlin/core/packetproxy/extensions/securityheaders/ui/SecurityHeadersDetailPanel.kt b/ui/src/main/kotlin/core/packetproxy/extensions/securityheaders/ui/SecurityHeadersDetailPanel.kt similarity index 100% rename from src/main/kotlin/core/packetproxy/extensions/securityheaders/ui/SecurityHeadersDetailPanel.kt rename to ui/src/main/kotlin/core/packetproxy/extensions/securityheaders/ui/SecurityHeadersDetailPanel.kt diff --git a/src/main/kotlin/core/packetproxy/extensions/securityheaders/ui/SecurityHeadersTableRenderer.kt b/ui/src/main/kotlin/core/packetproxy/extensions/securityheaders/ui/SecurityHeadersTableRenderer.kt similarity index 100% rename from src/main/kotlin/core/packetproxy/extensions/securityheaders/ui/SecurityHeadersTableRenderer.kt rename to ui/src/main/kotlin/core/packetproxy/extensions/securityheaders/ui/SecurityHeadersTableRenderer.kt diff --git a/src/main/kotlin/core/packetproxy/extensions/securityheaders/ui/SecurityHeadersToolbar.kt b/ui/src/main/kotlin/core/packetproxy/extensions/securityheaders/ui/SecurityHeadersToolbar.kt similarity index 100% rename from src/main/kotlin/core/packetproxy/extensions/securityheaders/ui/SecurityHeadersToolbar.kt rename to ui/src/main/kotlin/core/packetproxy/extensions/securityheaders/ui/SecurityHeadersToolbar.kt diff --git a/src/main/kotlin/core/packetproxy/extensions/securityheaders/ui/TextStyles.kt b/ui/src/main/kotlin/core/packetproxy/extensions/securityheaders/ui/TextStyles.kt similarity index 100% rename from src/main/kotlin/core/packetproxy/extensions/securityheaders/ui/TextStyles.kt rename to ui/src/main/kotlin/core/packetproxy/extensions/securityheaders/ui/TextStyles.kt diff --git a/src/main/kotlin/core/packetproxy/gui/GUIOptionGrpcDescriptorDialog.kt b/ui/src/main/kotlin/core/packetproxy/gui/GUIOptionGrpcDescriptorDialog.kt similarity index 100% rename from src/main/kotlin/core/packetproxy/gui/GUIOptionGrpcDescriptorDialog.kt rename to ui/src/main/kotlin/core/packetproxy/gui/GUIOptionGrpcDescriptorDialog.kt diff --git a/src/main/kotlin/core/packetproxy/gui/GUIRequestResponsePanel.kt b/ui/src/main/kotlin/core/packetproxy/gui/GUIRequestResponsePanel.kt similarity index 100% rename from src/main/kotlin/core/packetproxy/gui/GUIRequestResponsePanel.kt rename to ui/src/main/kotlin/core/packetproxy/gui/GUIRequestResponsePanel.kt diff --git a/src/main/kotlin/core/packetproxy/gui/PacketPairingService.kt b/ui/src/main/kotlin/core/packetproxy/gui/PacketPairingService.kt similarity index 100% rename from src/main/kotlin/core/packetproxy/gui/PacketPairingService.kt rename to ui/src/main/kotlin/core/packetproxy/gui/PacketPairingService.kt diff --git a/src/main/resources/gui/arrow.png b/ui/src/main/resources/gui/arrow.png similarity index 100% rename from src/main/resources/gui/arrow.png rename to ui/src/main/resources/gui/arrow.png diff --git a/src/main/resources/gui/auto_scroll_disabled.png b/ui/src/main/resources/gui/auto_scroll_disabled.png similarity index 100% rename from src/main/resources/gui/auto_scroll_disabled.png rename to ui/src/main/resources/gui/auto_scroll_disabled.png diff --git a/src/main/resources/gui/auto_scroll_enabled.png b/ui/src/main/resources/gui/auto_scroll_enabled.png similarity index 100% rename from src/main/resources/gui/auto_scroll_enabled.png rename to ui/src/main/resources/gui/auto_scroll_enabled.png diff --git a/src/main/resources/gui/close.png b/ui/src/main/resources/gui/close.png similarity index 100% rename from src/main/resources/gui/close.png rename to ui/src/main/resources/gui/close.png diff --git a/src/main/resources/gui/close_mouseovered.png b/ui/src/main/resources/gui/close_mouseovered.png similarity index 100% rename from src/main/resources/gui/close_mouseovered.png rename to ui/src/main/resources/gui/close_mouseovered.png diff --git a/src/main/resources/gui/config.png b/ui/src/main/resources/gui/config.png similarity index 100% rename from src/main/resources/gui/config.png rename to ui/src/main/resources/gui/config.png diff --git a/src/main/resources/gui/icon.ico b/ui/src/main/resources/gui/icon.ico similarity index 100% rename from src/main/resources/gui/icon.ico rename to ui/src/main/resources/gui/icon.ico diff --git a/src/main/resources/gui/icon.png b/ui/src/main/resources/gui/icon.png similarity index 100% rename from src/main/resources/gui/icon.png rename to ui/src/main/resources/gui/icon.png diff --git a/src/main/resources/gui/installer_icon.png b/ui/src/main/resources/gui/installer_icon.png similarity index 100% rename from src/main/resources/gui/installer_icon.png rename to ui/src/main/resources/gui/installer_icon.png diff --git a/src/main/resources/gui/installer_leftside_image.png b/ui/src/main/resources/gui/installer_leftside_image.png similarity index 100% rename from src/main/resources/gui/installer_leftside_image.png rename to ui/src/main/resources/gui/installer_leftside_image.png diff --git a/src/main/resources/gui/plus.png b/ui/src/main/resources/gui/plus.png similarity index 100% rename from src/main/resources/gui/plus.png rename to ui/src/main/resources/gui/plus.png diff --git a/src/main/resources/gui/splash.png b/ui/src/main/resources/gui/splash.png similarity index 100% rename from src/main/resources/gui/splash.png rename to ui/src/main/resources/gui/splash.png diff --git a/ui/src/test/kotlin/packetproxy/UiModuleArchitectureTest.kt b/ui/src/test/kotlin/packetproxy/UiModuleArchitectureTest.kt new file mode 100644 index 00000000..9e8ebcb6 --- /dev/null +++ b/ui/src/test/kotlin/packetproxy/UiModuleArchitectureTest.kt @@ -0,0 +1,35 @@ +/* + * Copyright 2026 DeNA Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package packetproxy + +import com.tngtech.archunit.core.importer.ClassFileImporter +import com.tngtech.archunit.lang.syntax.ArchRuleDefinition.noClasses +import org.junit.jupiter.api.Test + +class UiModuleArchitectureTest { + private val classes = ClassFileImporter().importPackages("packetproxy") + + @Test + fun uiMustNotDependOnGulp() { + noClasses() + .that() + .resideInAnyPackage("packetproxy.gui..", "packetproxy.extensions..") + .should() + .dependOnClassesThat() + .resideInAnyPackage("packetproxy.gulp..", "packetproxy.cli..", "core.packetproxy.gulp..") + .check(classes) + } +} diff --git a/src/test/kotlin/packetproxy/extensions/securityheaders/CacheControlCheckTest.kt b/ui/src/test/kotlin/packetproxy/extensions/CacheControlCheckTest.kt similarity index 100% rename from src/test/kotlin/packetproxy/extensions/securityheaders/CacheControlCheckTest.kt rename to ui/src/test/kotlin/packetproxy/extensions/CacheControlCheckTest.kt diff --git a/src/test/kotlin/packetproxy/extensions/securityheaders/ContentTypeCheckTest.kt b/ui/src/test/kotlin/packetproxy/extensions/ContentTypeCheckTest.kt similarity index 100% rename from src/test/kotlin/packetproxy/extensions/securityheaders/ContentTypeCheckTest.kt rename to ui/src/test/kotlin/packetproxy/extensions/ContentTypeCheckTest.kt diff --git a/src/test/kotlin/packetproxy/extensions/securityheaders/CookieCheckTest.kt b/ui/src/test/kotlin/packetproxy/extensions/CookieCheckTest.kt similarity index 100% rename from src/test/kotlin/packetproxy/extensions/securityheaders/CookieCheckTest.kt rename to ui/src/test/kotlin/packetproxy/extensions/CookieCheckTest.kt diff --git a/src/test/kotlin/packetproxy/extensions/securityheaders/CorsCheckTest.kt b/ui/src/test/kotlin/packetproxy/extensions/CorsCheckTest.kt similarity index 100% rename from src/test/kotlin/packetproxy/extensions/securityheaders/CorsCheckTest.kt rename to ui/src/test/kotlin/packetproxy/extensions/CorsCheckTest.kt diff --git a/src/test/kotlin/packetproxy/extensions/securityheaders/CspCheckTest.kt b/ui/src/test/kotlin/packetproxy/extensions/CspCheckTest.kt similarity index 100% rename from src/test/kotlin/packetproxy/extensions/securityheaders/CspCheckTest.kt rename to ui/src/test/kotlin/packetproxy/extensions/CspCheckTest.kt diff --git a/src/test/kotlin/packetproxy/extensions/securityheaders/HighlightSegmentTest.kt b/ui/src/test/kotlin/packetproxy/extensions/HighlightSegmentTest.kt similarity index 100% rename from src/test/kotlin/packetproxy/extensions/securityheaders/HighlightSegmentTest.kt rename to ui/src/test/kotlin/packetproxy/extensions/HighlightSegmentTest.kt diff --git a/src/test/kotlin/packetproxy/extensions/securityheaders/HstsCheckTest.kt b/ui/src/test/kotlin/packetproxy/extensions/HstsCheckTest.kt similarity index 100% rename from src/test/kotlin/packetproxy/extensions/securityheaders/HstsCheckTest.kt rename to ui/src/test/kotlin/packetproxy/extensions/HstsCheckTest.kt diff --git a/src/test/kotlin/packetproxy/extensions/securityheaders/SecurityCheckResultTest.kt b/ui/src/test/kotlin/packetproxy/extensions/SecurityCheckResultTest.kt similarity index 100% rename from src/test/kotlin/packetproxy/extensions/securityheaders/SecurityCheckResultTest.kt rename to ui/src/test/kotlin/packetproxy/extensions/SecurityCheckResultTest.kt diff --git a/src/test/kotlin/packetproxy/extensions/securityheaders/TestHttpHeader.kt b/ui/src/test/kotlin/packetproxy/extensions/TestHttpHeader.kt similarity index 100% rename from src/test/kotlin/packetproxy/extensions/securityheaders/TestHttpHeader.kt rename to ui/src/test/kotlin/packetproxy/extensions/TestHttpHeader.kt diff --git a/src/test/kotlin/packetproxy/extensions/securityheaders/XssProtectionCheckTest.kt b/ui/src/test/kotlin/packetproxy/extensions/XssProtectionCheckTest.kt similarity index 100% rename from src/test/kotlin/packetproxy/extensions/securityheaders/XssProtectionCheckTest.kt rename to ui/src/test/kotlin/packetproxy/extensions/XssProtectionCheckTest.kt diff --git a/src/test/kotlin/packetproxy/gui/PacketPairingServiceTest.kt b/ui/src/test/kotlin/packetproxy/gui/PacketPairingServiceTest.kt similarity index 100% rename from src/test/kotlin/packetproxy/gui/PacketPairingServiceTest.kt rename to ui/src/test/kotlin/packetproxy/gui/PacketPairingServiceTest.kt From 1eb4f59c8ed31b7bd701d73416d84f93c2063f18 Mon Sep 17 00:00:00 2001 From: Hiroki Tokunaga Date: Fri, 22 May 2026 17:46:44 +0900 Subject: [PATCH 3/4] refactor: move Swing, AWT, and UI libraries out of core Relocate UI widgets and JWT tooling to ui, replace EventListenerList, split Extension UI hooks, and keep UI dependencies off core classpath. Co-authored-by: Cursor --- core/build.gradle | 5 +- .../main/java/core/packetproxy/Simplex.java | 16 +++--- .../core/packetproxy/common/ConfigIO.java | 1 - .../test/RandomnessTestManager.java | 52 +++++++------------ .../java/core/packetproxy/model/DiffBase.java | 2 - .../core/packetproxy/model/Extension.java | 12 ----- .../platform/MainWindowAccess.java | 7 +-- .../packetproxy/platform/WindowBounds.java | 31 +++++++++++ .../core/packetproxy/util/ListenerList.java | 46 ++++++++++++++++ .../kotlin/core/packetproxy/util/Logging.kt | 4 +- .../CoreModuleArchitectureTest.java | 11 +++- .../core/packetproxy/common/FontManager.java | 0 .../common/JsonSyntaxHighlighter.java | 0 .../core/packetproxy/gui/GUIExtensions.java | 11 ++-- .../packetproxy/gui/GUIMainWindowAccess.java | 12 ++--- .../gui/extensions/GuiExtension.java | 40 ++++++++++++++ .../randomness/RandomnessExtension.java | 9 ++-- .../java/core/packetproxy/util/SearchBox.java | 0 .../packetproxy/vulchecker/JWTVulChecker.java | 0 .../JWTHeaderAddSpecifiedJKUGenerator.java | 11 ++-- .../JWTHeaderRS256toHS256Generator.java | 11 ++-- .../JWTSignWithAppleOtherTokenGenerator.java | 12 ++--- .../SecurityHeadersExtension.kt | 4 +- 23 files changed, 192 insertions(+), 105 deletions(-) create mode 100644 core/src/main/java/core/packetproxy/platform/WindowBounds.java create mode 100644 core/src/main/java/core/packetproxy/util/ListenerList.java rename {core => ui}/src/main/java/core/packetproxy/common/FontManager.java (100%) rename {core => ui}/src/main/java/core/packetproxy/common/JsonSyntaxHighlighter.java (100%) create mode 100644 ui/src/main/java/core/packetproxy/gui/extensions/GuiExtension.java rename {core => ui}/src/main/java/core/packetproxy/util/SearchBox.java (100%) rename {core => ui}/src/main/java/core/packetproxy/vulchecker/JWTVulChecker.java (100%) rename {core => ui}/src/main/java/core/packetproxy/vulchecker/generator/JWTHeaderAddSpecifiedJKUGenerator.java (95%) rename {core => ui}/src/main/java/core/packetproxy/vulchecker/generator/JWTHeaderRS256toHS256Generator.java (90%) rename {core => ui}/src/main/java/core/packetproxy/vulchecker/generator/JWTSignWithAppleOtherTokenGenerator.java (92%) diff --git a/core/build.gradle b/core/build.gradle index ba3d90e4..2d5def6b 100644 --- a/core/build.gradle +++ b/core/build.gradle @@ -21,7 +21,7 @@ dependencies { testImplementation 'org.assertj:assertj-core:3.23.1' testImplementation 'org.mockito:mockito-core:4.7.0' testImplementation 'com.tngtech.archunit:archunit-junit5:1.4.1' - testImplementation 'org.ejml:ejml-all:0.41' + implementation 'org.ejml:ejml-all:0.41' api 'com.google.guava:guava:24.1-jre' api 'commons-codec:commons-codec:1.6' @@ -33,8 +33,6 @@ dependencies { api 'com.j256.ormlite:ormlite-jdbc:4.48' api 'com.google.protobuf:protobuf-java:4.31.1' api 'com.google.protobuf:protobuf-java-util:4.31.1' - api 'org.jline:jline:3.25.1' - api 'org.jline:jline-terminal-jansi:3.25.1' api 'org.slf4j:slf4j-api:2.0.9' api 'org.slf4j:slf4j-log4j12:1.7.25' api 'ch.qos.logback:logback-classic:1.4.14' @@ -51,7 +49,6 @@ dependencies { api 'org.nanohttpd:nanohttpd:2.3.1' api 'com.google.code.gson:gson:2.13.1' api 'org.apache.commons:commons-math3:3.0' - api 'org.ejml:ejml-all:0.41' api 'at.favre.lib:hkdf:1.1.0' api 'org.eclipse.jetty.http2:http2-hpack:11.0.11' api 'org.eclipse.jetty.http3:http3-qpack:11.0.11' diff --git a/core/src/main/java/core/packetproxy/Simplex.java b/core/src/main/java/core/packetproxy/Simplex.java index 07de3a38..1f9d7d04 100644 --- a/core/src/main/java/core/packetproxy/Simplex.java +++ b/core/src/main/java/core/packetproxy/Simplex.java @@ -30,8 +30,8 @@ import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeoutException; import javax.net.ssl.SSLException; -import javax.swing.event.EventListenerList; import org.apache.commons.lang3.ArrayUtils; +import packetproxy.util.ListenerList; class Simplex extends Thread { @@ -43,7 +43,7 @@ class Simplex extends Thread { private boolean flag_close = true; private final byte[] input_data; - protected EventListenerList simplexEventListenerList = new EventListenerList(); + protected ListenerList simplexEventListenerList = new ListenerList(); public interface SimplexEventListener extends EventListener { @@ -118,7 +118,7 @@ public int callOnPacketReceived(byte[] data) throws Exception { return data.length; } - for (SimplexEventListener listener : simplexEventListenerList.getListeners(SimplexEventListener.class)) { + for (SimplexEventListener listener : simplexEventListenerList.listeners(SimplexEventListener.class)) { return listener.onPacketReceived(data); } @@ -130,7 +130,7 @@ public void callOnChunkArrived(byte[] data) throws Exception { return; } - for (SimplexEventListener listener : simplexEventListenerList.getListeners(SimplexEventListener.class)) { + for (SimplexEventListener listener : simplexEventListenerList.listeners(SimplexEventListener.class)) { listener.onChunkArrived(data); } @@ -141,7 +141,7 @@ public byte[] callOnChunkPassThrough() throws Exception { return null; } - for (SimplexEventListener listener : simplexEventListenerList.getListeners(SimplexEventListener.class)) { + for (SimplexEventListener listener : simplexEventListenerList.listeners(SimplexEventListener.class)) { return listener.onChunkPassThrough(); } @@ -153,7 +153,7 @@ public byte[] callOnChunkAvailable() throws Exception { return null; } - for (SimplexEventListener listener : simplexEventListenerList.getListeners(SimplexEventListener.class)) { + for (SimplexEventListener listener : simplexEventListenerList.listeners(SimplexEventListener.class)) { return listener.onChunkAvailable(); } @@ -165,7 +165,7 @@ public byte[] callOnChunkReceived(byte[] data) throws Exception { return data; } - for (SimplexEventListener listener : simplexEventListenerList.getListeners(SimplexEventListener.class)) { + for (SimplexEventListener listener : simplexEventListenerList.listeners(SimplexEventListener.class)) { return listener.onChunkReceived(data); } @@ -177,7 +177,7 @@ public byte[] callOnChunkSend(byte[] data) throws Exception { return data; } - for (SimplexEventListener listener : simplexEventListenerList.getListeners(SimplexEventListener.class)) { + for (SimplexEventListener listener : simplexEventListenerList.listeners(SimplexEventListener.class)) { return listener.onChunkSend(data); } diff --git a/core/src/main/java/core/packetproxy/common/ConfigIO.java b/core/src/main/java/core/packetproxy/common/ConfigIO.java index bb5c10e4..0e3170f2 100644 --- a/core/src/main/java/core/packetproxy/common/ConfigIO.java +++ b/core/src/main/java/core/packetproxy/common/ConfigIO.java @@ -6,7 +6,6 @@ import java.util.HashMap; import java.util.List; import java.util.Map; -import javax.swing.*; import packetproxy.model.*; public class ConfigIO { diff --git a/core/src/main/java/core/packetproxy/extensions/randomness/test/RandomnessTestManager.java b/core/src/main/java/core/packetproxy/extensions/randomness/test/RandomnessTestManager.java index fdbfef21..55a9f5a7 100644 --- a/core/src/main/java/core/packetproxy/extensions/randomness/test/RandomnessTestManager.java +++ b/core/src/main/java/core/packetproxy/extensions/randomness/test/RandomnessTestManager.java @@ -19,14 +19,15 @@ import java.util.ArrayList; import java.util.HashMap; +import java.util.List; import java.util.Map; import java.util.stream.DoubleStream; -import javax.swing.JComboBox; public class RandomnessTestManager { private static RandomnessTestManager instance; private final Map testMap = new HashMap<>(); + private final List testNames = new ArrayList<>(); private final double[] x; public static RandomnessTestManager getInstance() { @@ -43,42 +44,25 @@ public static RandomnessTestManager getInstance() { x[i] = Math.pow(10.0, x[i]); } + registerTest("Frequency", new FrequencyTest()); + registerTest("Runs", new RunsTest()); + registerTest("LongestRunOfOne", new LongestRunOfOneTest()); + registerTest("MatrixRank", new RankTest()); + registerTest("LinearComplexity with 8bit", new LinearComplexityTest(8)); + registerTest("LinearComplexity with 32bit", new LinearComplexityTest(32)); + registerTest("Serial with 8bit", new SerialTest(8)); + registerTest("ApproximateEntropy with 8bit", new ApproximateEntropyTest(8)); + registerTest("CUsUM with forward", new CUsUMTest(0)); + registerTest("CUsUM with backward", new CUsUMTest(1)); } - public JComboBox createTestList() { - JComboBox testList = new JComboBox<>(); - - testList.addItem("Frequency"); - testMap.put("Frequency", new FrequencyTest()); - - testList.addItem("Runs"); - testMap.put("Runs", new RunsTest()); - - testList.addItem("LongestRunOfOne"); - testMap.put("LongestRunOfOne", new LongestRunOfOneTest()); - - testList.addItem("MatrixRank"); - testMap.put("MatrixRank", new RankTest()); - - testList.addItem("LinearComplexity with 8bit"); - testMap.put("LinearComplexity with 8bit", new LinearComplexityTest(8)); - - testList.addItem("LinearComplexity with 32bit"); - testMap.put("LinearComplexity with 32bit", new LinearComplexityTest(32)); - - testList.addItem("Serial with 8bit"); - testMap.put("Serial with 8bit", new SerialTest(8)); - - testList.addItem("ApproximateEntropy with 8bit"); - testMap.put("ApproximateEntropy with 8bit", new ApproximateEntropyTest(8)); - - testList.addItem("CUsUM with forward"); - testMap.put("CUsUM with forward", new CUsUMTest(0)); - - testList.addItem("CUsUM with backward"); - testMap.put("CUsUM with backward", new CUsUMTest(1)); + public List getTestNames() { + return List.copyOf(testNames); + } - return testList; + private void registerTest(String name, RandomnessTest test) { + testMap.put(name, test); + testNames.add(name); } // return list of (x, y) diff --git a/core/src/main/java/core/packetproxy/model/DiffBase.java b/core/src/main/java/core/packetproxy/model/DiffBase.java index aaf0da1d..7f231a7d 100644 --- a/core/src/main/java/core/packetproxy/model/DiffBase.java +++ b/core/src/main/java/core/packetproxy/model/DiffBase.java @@ -17,7 +17,6 @@ import difflib.Chunk; import java.util.List; -import javax.swing.event.EventListenerList; public abstract class DiffBase { @@ -49,7 +48,6 @@ public abstract class DiffBase { public DiffBase() { } - protected EventListenerList diffEventListenerList = new EventListenerList(); protected byte[] orig = null; protected DiffSet set; diff --git a/core/src/main/java/core/packetproxy/model/Extension.java b/core/src/main/java/core/packetproxy/model/Extension.java index 24aaeb06..ce6dfd3a 100644 --- a/core/src/main/java/core/packetproxy/model/Extension.java +++ b/core/src/main/java/core/packetproxy/model/Extension.java @@ -19,8 +19,6 @@ import com.j256.ormlite.table.DatabaseTable; import java.util.HashMap; import java.util.Map; -import javax.swing.JComponent; -import javax.swing.JMenuItem; @DatabaseTable(tableName = "extensions") public class Extension { @@ -67,16 +65,6 @@ public void setPath(String s) { this.path = s; } - public JComponent createPanel() throws Exception { - // Please override this - return null; - } - - public JMenuItem historyClickHandler() { - // Please override this - return null; - } - public Map> getEncoders() { // Please override this return new HashMap<>(); diff --git a/core/src/main/java/core/packetproxy/platform/MainWindowAccess.java b/core/src/main/java/core/packetproxy/platform/MainWindowAccess.java index da008fbc..af5fba99 100644 --- a/core/src/main/java/core/packetproxy/platform/MainWindowAccess.java +++ b/core/src/main/java/core/packetproxy/platform/MainWindowAccess.java @@ -15,15 +15,10 @@ */ package packetproxy.platform; -import java.awt.Frame; -import java.awt.Rectangle; - /** メインウィンドウへの参照(vulchecker 等が利用)。 */ public interface MainWindowAccess { - Frame getFrame(); - - Rectangle getBounds(); + WindowBounds getBounds(); void setAlwaysOnTop(boolean onTop); diff --git a/core/src/main/java/core/packetproxy/platform/WindowBounds.java b/core/src/main/java/core/packetproxy/platform/WindowBounds.java new file mode 100644 index 00000000..2c7af20b --- /dev/null +++ b/core/src/main/java/core/packetproxy/platform/WindowBounds.java @@ -0,0 +1,31 @@ +/* + * Copyright 2026 DeNA Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package packetproxy.platform; + +/** + * Main window position and size without depending on + * {@code java.awt.Rectangle}. + */ +public record WindowBounds(int x, int y, int width, int height) { + + public int centeredDialogX(int dialogWidth) { + return x + width / 2 - dialogWidth / 2; + } + + public int centeredDialogY(int dialogHeight) { + return y + height / 2 - dialogHeight / 2; + } +} diff --git a/core/src/main/java/core/packetproxy/util/ListenerList.java b/core/src/main/java/core/packetproxy/util/ListenerList.java new file mode 100644 index 00000000..1832964f --- /dev/null +++ b/core/src/main/java/core/packetproxy/util/ListenerList.java @@ -0,0 +1,46 @@ +/* + * Copyright 2026 DeNA Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package packetproxy.util; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * Type-safe listener list without depending on + * {@code javax.swing.event.EventListenerList}. + */ +public final class ListenerList { + + private final Map, List> listenersByType = new HashMap<>(); + + public void add(Class listenerType, T listener) { + listenersByType.computeIfAbsent(listenerType, key -> new ArrayList<>()).add(listener); + } + + public List listeners(Class listenerType) { + var raw = listenersByType.get(listenerType); + if (raw == null) { + return List.of(); + } + var result = new ArrayList(raw.size()); + for (var listener : raw) { + result.add(listenerType.cast(listener)); + } + return result; + } +} diff --git a/core/src/main/kotlin/core/packetproxy/util/Logging.kt b/core/src/main/kotlin/core/packetproxy/util/Logging.kt index 4f8418c3..afa13a2e 100644 --- a/core/src/main/kotlin/core/packetproxy/util/Logging.kt +++ b/core/src/main/kotlin/core/packetproxy/util/Logging.kt @@ -30,8 +30,6 @@ import java.time.format.DateTimeFormatter import java.util.* import kotlinx.coroutines.delay import kotlinx.coroutines.yield -import org.jline.jansi.Ansi -import org.jline.jansi.Ansi.Color.RED import org.slf4j.LoggerFactory import packetproxy.platform.LogSinks @@ -110,7 +108,7 @@ object Logging { fun err(format: Any, vararg args: Any?) { val fs = formatString(format, *args) - logger.error(Ansi.ansi().fg(RED).a(fs).reset().toString()) + logger.error(fs) if (!isGulp) { LogSinks.appendErr(fs) } diff --git a/core/src/test/java/packetproxy/CoreModuleArchitectureTest.java b/core/src/test/java/packetproxy/CoreModuleArchitectureTest.java index 1a2d3a54..165030aa 100644 --- a/core/src/test/java/packetproxy/CoreModuleArchitectureTest.java +++ b/core/src/test/java/packetproxy/CoreModuleArchitectureTest.java @@ -19,15 +19,24 @@ import com.tngtech.archunit.core.domain.JavaClasses; import com.tngtech.archunit.core.importer.ClassFileImporter; +import com.tngtech.archunit.core.importer.ImportOption; import org.junit.jupiter.api.Test; class CoreModuleArchitectureTest { - private final JavaClasses classes = new ClassFileImporter().importPackages("packetproxy"); + private final JavaClasses classes = new ClassFileImporter() + .withImportOption(ImportOption.Predefined.DO_NOT_INCLUDE_TESTS) + .withImportOption(location -> location.contains("/core/build/classes/")).importPackages("packetproxy"); @Test void coreMustNotDependOnUiOrGulp() { noClasses().that().resideInAPackage("packetproxy..").should().dependOnClassesThat() .resideInAnyPackage("packetproxy.gui..", "packetproxy.gulp..", "packetproxy.cli..").check(classes); } + + @Test + void coreMustNotDependOnSwingOrAwt() { + noClasses().that().resideInAPackage("packetproxy..").should().dependOnClassesThat() + .resideInAnyPackage("javax.swing..", "java.awt..").check(classes); + } } diff --git a/core/src/main/java/core/packetproxy/common/FontManager.java b/ui/src/main/java/core/packetproxy/common/FontManager.java similarity index 100% rename from core/src/main/java/core/packetproxy/common/FontManager.java rename to ui/src/main/java/core/packetproxy/common/FontManager.java diff --git a/core/src/main/java/core/packetproxy/common/JsonSyntaxHighlighter.java b/ui/src/main/java/core/packetproxy/common/JsonSyntaxHighlighter.java similarity index 100% rename from core/src/main/java/core/packetproxy/common/JsonSyntaxHighlighter.java rename to ui/src/main/java/core/packetproxy/common/JsonSyntaxHighlighter.java diff --git a/ui/src/main/java/core/packetproxy/gui/GUIExtensions.java b/ui/src/main/java/core/packetproxy/gui/GUIExtensions.java index 41991c9b..6cd973c6 100644 --- a/ui/src/main/java/core/packetproxy/gui/GUIExtensions.java +++ b/ui/src/main/java/core/packetproxy/gui/GUIExtensions.java @@ -37,6 +37,7 @@ import javax.swing.event.ChangeListener; import packetproxy.EncoderManager; import packetproxy.encode.Encoder; +import packetproxy.gui.extensions.GuiExtension; import packetproxy.model.Extension; import packetproxy.model.Extensions; @@ -158,15 +159,19 @@ public void addExtension(Extension ext) throws Exception { } } + if (!(ext instanceof GuiExtension guiExt)) { + return; + } + // extension page - JComponent component = ext.createPanel(); + JComponent component = guiExt.createPanel(); if (component != null) { - tabs.addTab(ext.getName(), ext.createPanel()); + tabs.addTab(ext.getName(), component); } // history right click - JMenuItem extensionItem = ext.historyClickHandler(); + JMenuItem extensionItem = guiExt.historyClickHandler(); if (extensionItem != null) { GUIHistory.getInstance().addMenu(extensionItem); diff --git a/ui/src/main/java/core/packetproxy/gui/GUIMainWindowAccess.java b/ui/src/main/java/core/packetproxy/gui/GUIMainWindowAccess.java index cae32360..842946f2 100644 --- a/ui/src/main/java/core/packetproxy/gui/GUIMainWindowAccess.java +++ b/ui/src/main/java/core/packetproxy/gui/GUIMainWindowAccess.java @@ -15,9 +15,9 @@ */ package packetproxy.gui; -import java.awt.Frame; import java.awt.Rectangle; import packetproxy.platform.MainWindowAccess; +import packetproxy.platform.WindowBounds; public class GUIMainWindowAccess implements MainWindowAccess { @@ -28,13 +28,9 @@ public GUIMainWindowAccess(GUIMain main) { } @Override - public Frame getFrame() { - return main; - } - - @Override - public Rectangle getBounds() { - return main.getBounds(); + public WindowBounds getBounds() { + Rectangle rect = main.getBounds(); + return new WindowBounds(rect.x, rect.y, rect.width, rect.height); } @Override diff --git a/ui/src/main/java/core/packetproxy/gui/extensions/GuiExtension.java b/ui/src/main/java/core/packetproxy/gui/extensions/GuiExtension.java new file mode 100644 index 00000000..889c2b7b --- /dev/null +++ b/ui/src/main/java/core/packetproxy/gui/extensions/GuiExtension.java @@ -0,0 +1,40 @@ +/* + * Copyright 2026 DeNA Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package packetproxy.gui.extensions; + +import javax.swing.JComponent; +import javax.swing.JMenuItem; +import packetproxy.model.Extension; + +/** Swing UI hooks for {@link Extension} implementations in the ui module. */ +public abstract class GuiExtension extends Extension { + + public GuiExtension() { + super(); + } + + public GuiExtension(String name, String path) throws Exception { + super(name, path); + } + + public JComponent createPanel() throws Exception { + return null; + } + + public JMenuItem historyClickHandler() { + return null; + } +} diff --git a/ui/src/main/java/core/packetproxy/gui/extensions/randomness/RandomnessExtension.java b/ui/src/main/java/core/packetproxy/gui/extensions/randomness/RandomnessExtension.java index 8e35eab4..e0a6674a 100644 --- a/ui/src/main/java/core/packetproxy/gui/extensions/randomness/RandomnessExtension.java +++ b/ui/src/main/java/core/packetproxy/gui/extensions/randomness/RandomnessExtension.java @@ -65,11 +65,11 @@ import packetproxy.extensions.randomness.test.RandomnessTestManager; import packetproxy.gui.GUIBulkSenderData; import packetproxy.gui.GUIPacket; -import packetproxy.model.Extension; +import packetproxy.gui.extensions.GuiExtension; import packetproxy.model.OneShotPacket; import packetproxy.model.Packet; -public class RandomnessExtension extends Extension { +public class RandomnessExtension extends GuiExtension { private static JFrame owner; @@ -294,7 +294,10 @@ private JComponent createResultPanel() throws Exception { testPanel.setBackground(Color.WHITE); testPanel.setLayout(new BoxLayout(testPanel, BoxLayout.X_AXIS)); testPanel.add(new JLabel("testing method:")); - testMethods = RandomnessTestManager.getInstance().createTestList(); + testMethods = new JComboBox<>(); + for (var testName : RandomnessTestManager.getInstance().getTestNames()) { + testMethods.addItem(testName); + } testPanel.add(testMethods); JButton analyzeButton = new JButton("Start analysis"); diff --git a/core/src/main/java/core/packetproxy/util/SearchBox.java b/ui/src/main/java/core/packetproxy/util/SearchBox.java similarity index 100% rename from core/src/main/java/core/packetproxy/util/SearchBox.java rename to ui/src/main/java/core/packetproxy/util/SearchBox.java diff --git a/core/src/main/java/core/packetproxy/vulchecker/JWTVulChecker.java b/ui/src/main/java/core/packetproxy/vulchecker/JWTVulChecker.java similarity index 100% rename from core/src/main/java/core/packetproxy/vulchecker/JWTVulChecker.java rename to ui/src/main/java/core/packetproxy/vulchecker/JWTVulChecker.java diff --git a/core/src/main/java/core/packetproxy/vulchecker/generator/JWTHeaderAddSpecifiedJKUGenerator.java b/ui/src/main/java/core/packetproxy/vulchecker/generator/JWTHeaderAddSpecifiedJKUGenerator.java similarity index 95% rename from core/src/main/java/core/packetproxy/vulchecker/generator/JWTHeaderAddSpecifiedJKUGenerator.java rename to ui/src/main/java/core/packetproxy/vulchecker/generator/JWTHeaderAddSpecifiedJKUGenerator.java index 6fb67081..65221658 100644 --- a/core/src/main/java/core/packetproxy/vulchecker/generator/JWTHeaderAddSpecifiedJKUGenerator.java +++ b/ui/src/main/java/core/packetproxy/vulchecker/generator/JWTHeaderAddSpecifiedJKUGenerator.java @@ -21,7 +21,9 @@ import java.awt.event.MouseEvent; import javax.swing.*; import org.apache.commons.codec.binary.Hex; +import packetproxy.gui.GUIMain; import packetproxy.platform.MainWindows; +import packetproxy.platform.WindowBounds; public class JWTHeaderAddSpecifiedJKUGenerator extends Generator { @@ -41,14 +43,11 @@ public boolean generateOnStart() { public String generate(String inputData) throws Exception { cancelClicked = false; - var mainWindow = MainWindows.get(); - JDialog dlg = new JDialog(mainWindow.getFrame()); - - Rectangle rect = mainWindow.getBounds(); + WindowBounds bounds = MainWindows.get().getBounds(); int width = 400; int height = 300; - dlg.setBounds(rect.x + rect.width / 2 - width / 2, rect.y + rect.height / 2 - height / 2, width, - height); /* ド真ん中 */ + JDialog dlg = new JDialog(GUIMain.getInstance()); + dlg.setBounds(bounds.centeredDialogX(width), bounds.centeredDialogY(height), width, height); JPanel labels = new JPanel(); labels.setLayout(new BoxLayout(labels, BoxLayout.X_AXIS)); diff --git a/core/src/main/java/core/packetproxy/vulchecker/generator/JWTHeaderRS256toHS256Generator.java b/ui/src/main/java/core/packetproxy/vulchecker/generator/JWTHeaderRS256toHS256Generator.java similarity index 90% rename from core/src/main/java/core/packetproxy/vulchecker/generator/JWTHeaderRS256toHS256Generator.java rename to ui/src/main/java/core/packetproxy/vulchecker/generator/JWTHeaderRS256toHS256Generator.java index de4cd84a..0f8101d6 100644 --- a/core/src/main/java/core/packetproxy/vulchecker/generator/JWTHeaderRS256toHS256Generator.java +++ b/ui/src/main/java/core/packetproxy/vulchecker/generator/JWTHeaderRS256toHS256Generator.java @@ -20,7 +20,9 @@ import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import javax.swing.*; +import packetproxy.gui.GUIMain; import packetproxy.platform.MainWindows; +import packetproxy.platform.WindowBounds; public class JWTHeaderRS256toHS256Generator extends Generator { @@ -40,14 +42,11 @@ public boolean generateOnStart() { public String generate(String inputData) throws Exception { cancelClicked = false; - var mainWindow = MainWindows.get(); - JDialog dlg = new JDialog(mainWindow.getFrame()); - - Rectangle rect = mainWindow.getBounds(); + WindowBounds bounds = MainWindows.get().getBounds(); int width = 400; int height = 300; - dlg.setBounds(rect.x + rect.width / 2 - width / 2, rect.y + rect.height / 2 - height / 2, width, - height); /* ド真ん中 */ + JDialog dlg = new JDialog(GUIMain.getInstance()); + dlg.setBounds(bounds.centeredDialogX(width), bounds.centeredDialogY(height), width, height); JPanel labels = new JPanel(); labels.setLayout(new BoxLayout(labels, BoxLayout.X_AXIS)); diff --git a/core/src/main/java/core/packetproxy/vulchecker/generator/JWTSignWithAppleOtherTokenGenerator.java b/ui/src/main/java/core/packetproxy/vulchecker/generator/JWTSignWithAppleOtherTokenGenerator.java similarity index 92% rename from core/src/main/java/core/packetproxy/vulchecker/generator/JWTSignWithAppleOtherTokenGenerator.java rename to ui/src/main/java/core/packetproxy/vulchecker/generator/JWTSignWithAppleOtherTokenGenerator.java index c8263260..01029009 100644 --- a/core/src/main/java/core/packetproxy/vulchecker/generator/JWTSignWithAppleOtherTokenGenerator.java +++ b/ui/src/main/java/core/packetproxy/vulchecker/generator/JWTSignWithAppleOtherTokenGenerator.java @@ -24,7 +24,9 @@ import java.net.URI; import javax.swing.*; import packetproxy.common.TokenHttpServer; +import packetproxy.gui.GUIMain; import packetproxy.platform.MainWindows; +import packetproxy.platform.WindowBounds; public class JWTSignWithAppleOtherTokenGenerator extends Generator { @@ -49,14 +51,11 @@ public String generate(String inputData) throws Exception { this.tokenFromBrowser = ""; this.cancelClicked = false; - var mainWindow = MainWindows.get(); - JDialog dlg = new JDialog(mainWindow.getFrame()); - - Rectangle rect = mainWindow.getBounds(); + WindowBounds bounds = MainWindows.get().getBounds(); int width = 300; int height = 150; - dlg.setBounds(rect.x + rect.width / 2 - width / 2, rect.y + rect.height / 2 - height / 2, width, - height); /* ド真ん中 */ + JDialog dlg = new JDialog(GUIMain.getInstance()); + dlg.setBounds(bounds.centeredDialogX(width), bounds.centeredDialogY(height), width, height); JPanel labels = new JPanel(); labels.setLayout(new BoxLayout(labels, BoxLayout.X_AXIS)); @@ -119,6 +118,7 @@ public void mouseClicked(MouseEvent e) { throw new Exception("cancel"); } + var mainWindow = MainWindows.get(); mainWindow.setAlwaysOnTop(true); mainWindow.setVisible(true); diff --git a/ui/src/main/kotlin/core/packetproxy/extensions/securityheaders/SecurityHeadersExtension.kt b/ui/src/main/kotlin/core/packetproxy/extensions/securityheaders/SecurityHeadersExtension.kt index e1a5b850..943625fd 100644 --- a/ui/src/main/kotlin/core/packetproxy/extensions/securityheaders/SecurityHeadersExtension.kt +++ b/ui/src/main/kotlin/core/packetproxy/extensions/securityheaders/SecurityHeadersExtension.kt @@ -38,9 +38,9 @@ import packetproxy.extensions.securityheaders.exclusion.ExclusionRuleType import packetproxy.extensions.securityheaders.ui.SecurityHeadersDetailPanel import packetproxy.extensions.securityheaders.ui.SecurityHeadersTableRenderer import packetproxy.extensions.securityheaders.ui.SecurityHeadersToolbar +import packetproxy.gui.extensions.GuiExtension import packetproxy.http.Http import packetproxy.http.HttpHeader -import packetproxy.model.Extension import packetproxy.model.Packet import packetproxy.model.Packets @@ -52,7 +52,7 @@ import packetproxy.model.Packets * To add a new security check: 1. Create a new class implementing SecurityCheck interface 2. Add * the check to the SECURITY_CHECKS list in this class */ -class SecurityHeadersExtension : Extension() { +class SecurityHeadersExtension : GuiExtension() { // ===== Registered Security Checks ===== // Add new checks here to extend functionality companion object { From 4e10a465bdc83250fc22f15ca3a384c256cd4dce Mon Sep 17 00:00:00 2001 From: Hiroki Tokunaga Date: Fri, 22 May 2026 17:46:44 +0900 Subject: [PATCH 4/4] build: migrate Gradle scripts to Kotlin DSL Replace Groovy build scripts with Kotlin DSL across root and subprojects. Co-authored-by: Cursor --- .gitignore | 1 - app/build.gradle | 72 ---- app/build.gradle.kts | 397 ++++++++++++++++++++++ app/build.gradle.partial | 580 -------------------------------- build.gradle | 75 ----- build.gradle.kts | 72 ++++ core/build.gradle | 98 ------ core/build.gradle.kts | 119 +++++++ gradle/app-release.gradle | 341 ------------------- gradle/module-common.gradle | 45 --- gradle/module-common.gradle.kts | 27 ++ gulp/build.gradle | 26 -- gulp/build.gradle.kts | 20 ++ settings.gradle | 14 - settings.gradle.kts | 15 + ui/build.gradle | 36 -- ui/build.gradle.kts | 28 ++ 17 files changed, 678 insertions(+), 1288 deletions(-) delete mode 100644 app/build.gradle create mode 100644 app/build.gradle.kts delete mode 100644 app/build.gradle.partial delete mode 100644 build.gradle create mode 100644 build.gradle.kts delete mode 100644 core/build.gradle create mode 100644 core/build.gradle.kts delete mode 100644 gradle/app-release.gradle delete mode 100644 gradle/module-common.gradle create mode 100644 gradle/module-common.gradle.kts delete mode 100644 gulp/build.gradle create mode 100644 gulp/build.gradle.kts delete mode 100644 settings.gradle create mode 100644 settings.gradle.kts delete mode 100644 ui/build.gradle create mode 100644 ui/build.gradle.kts diff --git a/.gitignore b/.gitignore index fe41c558..51ffcfb7 100644 --- a/.gitignore +++ b/.gitignore @@ -7,7 +7,6 @@ # Gradle **/build/ **/.gradle/ -buildSrc/build/ /src/main/resources/version # IntelliJ IDEA diff --git a/app/build.gradle b/app/build.gradle deleted file mode 100644 index 83aaff56..00000000 --- a/app/build.gradle +++ /dev/null @@ -1,72 +0,0 @@ -buildscript { - repositories { - mavenCentral() - } - dependencies { - classpath 'com.bmuschko:gradle-izpack-plugin:3.0' - } -} - -plugins { - id 'java' - id 'application' - id 'com.bmuschko.izpack' version '3.2' - id 'com.github.jk1.dependency-license-report' version '2.5' - id 'de.undercouch.download' version '5.6.0' -} - -apply from: rootProject.file('gradle/module-common.gradle') -apply from: rootProject.file('gradle/app-release.gradle') - -dependencies { - implementation project(':core') - implementation project(':ui') - implementation project(':gulp') - - izpack 'org.codehaus.izpack:izpack-dist:5.1.3' -} - -application { - mainClass = 'packetproxy.PacketProxy' -} - -sourceSets { - main { - java { - srcDirs = ['src/main/java/core'] - } - } -} - -licenseReport { - outputDir = "$buildDir/reports/licenses" - configurations = ['runtimeClasspath'] -} - -tasks.named('jar', Jar) { - archiveBaseName.set('PacketProxy') - duplicatesStrategy = DuplicatesStrategy.INCLUDE - doFirst { - def serviceDir = file("${buildDir}/META-INF/services") - serviceDir.deleteDir() - serviceDir.mkdirs() - for (file in configurations.runtimeClasspath) { - zipTree(file).matching { include 'META-INF/services/*' }.each { f -> - new File(serviceDir, f.name) << f.getText('UTF-8') << '\n' - } - } - } - manifest { - attributes( - 'Main-Class': 'packetproxy.PacketProxy', - 'Class-Path': configurations.runtimeClasspath.collect { it.name }.join(' ')) - } - from { - configurations.runtimeClasspath.collect { - it.isDirectory() ? it : zipTree(it).matching { exclude 'META-INF/**' } - } - } - from { - fileTree(buildDir).matching { include 'META-INF/services/*' } - } -} diff --git a/app/build.gradle.kts b/app/build.gradle.kts new file mode 100644 index 00000000..b8bc8c83 --- /dev/null +++ b/app/build.gradle.kts @@ -0,0 +1,397 @@ +import com.bmuschko.gradle.izpack.CreateInstallerTask +import org.apache.tools.ant.taskdefs.condition.Os +import org.gradle.api.DefaultTask +import org.gradle.api.tasks.Input +import org.gradle.api.tasks.TaskAction + +plugins { + java + application + id("com.bmuschko.izpack") version "3.2" + id("com.github.jk1.dependency-license-report") version "2.5" + id("de.undercouch.download") version "5.6.0" +} + +apply(from = rootProject.file("gradle/module-common.gradle.kts")) + +dependencies { + implementation(project(":core")) + implementation(project(":ui")) + implementation(project(":gulp")) + + izpack("org.codehaus.izpack:izpack-dist:5.1.3") +} + +application { mainClass.set("packetproxy.PacketProxy") } + +sourceSets { main { java.setSrcDirs(listOf("src/main/java/core")) } } + +licenseReport { + outputDir = layout.buildDirectory.dir("reports/licenses").get().asFile.path + configurations = arrayOf("runtimeClasspath") +} + +tasks.named("jar") { + dependsOn(":core:jar", ":ui:jar", ":gulp:jar") + archiveBaseName.set("PacketProxy") + duplicatesStrategy = DuplicatesStrategy.INCLUDE + doFirst { + val serviceDir = layout.buildDirectory.dir("META-INF/services").get().asFile + serviceDir.deleteRecursively() + serviceDir.mkdirs() + configurations.runtimeClasspath.get().forEach { artifact -> + zipTree(artifact) + .matching { include("META-INF/services/*") } + .forEach { file -> + File(serviceDir, file.name).appendText(file.readText(Charsets.UTF_8) + "\n") + } + } + } + manifest { + attributes( + "Main-Class" to "packetproxy.PacketProxy", + "Class-Path" to configurations.runtimeClasspath.get().joinToString(" ") { it.name }, + ) + } + from({ + configurations.runtimeClasspath.get().map { dependency -> + if (dependency.isDirectory) { + dependency + } else { + zipTree(dependency).matching { exclude("META-INF/**") } + } + } + }) + from({ fileTree(layout.buildDirectory).matching { include("META-INF/services/*") } }) +} + +fun runShell(command: String) { + ProcessBuilder("sh", "-c", command).inheritIO().start().waitFor() +} + +fun runCommand(command: String): String = + ProcessBuilder("sh", "-c", command).start().inputStream.bufferedReader().readText().trim() + +val guiResourcesDir = rootProject.file("ui/src/main/resources/gui") + +val gitVersion = runCommand("git describe --tags --abbrev=0") + +File("${rootProject.projectDir}/core/src/main/resources/version").writeText(gitVersion) + +val nameInstaller = "PacketProxy-${gitVersion}-Installer.jar" +val nameMacInstallApp = "PacketProxy-${gitVersion}-Installer-Mac.app" +val nameMacRelease = "PacketProxy-${gitVersion}-Installer-Mac.zip" +val nameMacSignedReleaseJPackage = "PacketProxy-${gitVersion}.dmg" +val nameMacSignedRelease = "PacketProxy-${gitVersion}-Installer-Mac-Signed.dmg" +val nameWin32Release = "PacketProxy-${gitVersion}-Installer-Win32.jar" +val nameWin64Release = "PacketProxy-${gitVersion}-Installer-Win64.jar" +val nameLinuxReleaseDir = "PacketProxy-${gitVersion}-Linux" +val nameLinuxRelease = "PacketProxy-${gitVersion}-Installer-Linux.jar" + +val pathWorkDir = "${layout.buildDirectory.get()}/distributions" +val pathMacWorkDir = "${layout.buildDirectory.get()}/distributions/mac" +val pathMacTarget = "${pathMacWorkDir}/target" +val pathMacSignedReleaseJPackagePath = "${pathMacWorkDir}/${nameMacSignedReleaseJPackage}" +val pathMacSignedReleasePath = "${pathMacWorkDir}/${nameMacSignedRelease}" +val pathWin64WorkDir = "${layout.buildDirectory.get()}/distributions/win64" +val pathWin64Target = "${pathWin64WorkDir}/target" +val pathWin64Installer = "${pathWin64WorkDir}/${nameInstaller}" +val pathWin64Release = "${pathWin64WorkDir}/${nameWin64Release}" +val pathLinuxWorkDir = "${layout.buildDirectory.get()}/distributions/Linux" +val pathLinuxTarget = "${pathLinuxWorkDir}/target" +val pathLinuxInstaller = "${pathLinuxWorkDir}/${nameInstaller}" +val pathLinuxReleaseDir = "${pathLinuxWorkDir}/${nameLinuxReleaseDir}" +val pathLinuxRelease = "${pathLinuxWorkDir}/${nameLinuxRelease}" + +extra["appleId"] = "test@example.com" + +extra["applePasswd"] = "xxxx-xxxx-xxxx-xxxx" + +extra["signedKey"] = "Developer ID Application: YYYYYYYY (ZZZZZZZZ)" + +extra["teamId"] = "ZZZZZZZZ" + +tasks.register("prepareJPackage") { + dependsOn("jar") + onlyIf { Os.isFamily(Os.FAMILY_MAC) } + doLast { + val workDir = pathMacWorkDir + delete(workDir) + File(workDir).mkdirs() + val jdkUrl = + "https://corretto.aws/downloads/resources/17.0.15.6.1/amazon-corretto-17.0.15.6.1-macosx-x64.tar.gz" + val destFile = file("${workDir}/OpenJDK17.tar.gz") + if (!destFile.exists()) { + ant.withGroovyBuilder { "get"("src" to jdkUrl, "dest" to destFile, "verbose" to true) } + } + copy { + from(tarTree(resources.gzip("${workDir}/OpenJDK17.tar.gz"))) + into(file("${workDir}/OpenJDK17")) + } + copy { + from("${guiResourcesDir}/icon.png") + into("${workDir}/icon.iconset/") + } + runShell("mv ${workDir}/icon.iconset/icon.png ${workDir}/icon.iconset/icon_256x256.png") + runShell("iconutil -c icns --output ${workDir}/icon.icns ${workDir}/icon.iconset/") + } +} + +abstract class CreateWinTarget : DefaultTask() { + @get:Input var workDir: String = "" + + @get:Input var targetDir: String = "" + + @get:Input var jdkUrl: String = "" + + @TaskAction + fun start() { + val guiDir = project.rootProject.file("ui/src/main/resources/gui") + project.delete { delete(workDir) } + File(workDir).mkdirs() + File(targetDir).mkdirs() + project.copy { + from("${project.layout.buildDirectory.get()}/reports/licenses/index.html") + into("${targetDir}/licenses") + } + project.copy { + from("${guiDir}/icon.ico") + into(targetDir) + rename("icon.ico", "PacketProxy.ico") + } + project.copy { + from("${project.layout.buildDirectory.get()}/libs/PacketProxy.jar") + into(targetDir) + } + val destFile = project.file("${workDir}/OpenJDK17.zip") + if (!destFile.exists()) { + project.ant.withGroovyBuilder { + "get"("src" to jdkUrl, "dest" to destFile, "verbose" to true) + } + } + project.copy { + from(project.zipTree("${workDir}/OpenJDK17.zip")) + into(project.file("${workDir}/OpenJDK17")) + } + project.copy { + from(project.file("${workDir}/OpenJDK17/jdk17.0.15_6")) + into(project.file("${targetDir}/OpenJDK17")) + } + } +} + +tasks.register("createWin64Target") { + dependsOn("jar", "generateLicenseReport") + workDir = pathWin64WorkDir + targetDir = pathWin64Target + jdkUrl = + "https://corretto.aws/downloads/resources/17.0.15.6.1/amazon-corretto-17.0.15.6.1-windows-x64-jdk.zip" +} + +tasks.register("createLinuxTarget") { + dependsOn("jar", "generateLicenseReport") + doLast { + delete(pathLinuxWorkDir) + File(pathLinuxWorkDir).mkdirs() + File(pathLinuxTarget).mkdirs() + copy { + from("${layout.buildDirectory.get()}/reports/licenses/index.html") + from("${rootProject.projectDir}/LICENSES") + into("${pathLinuxTarget}/share/packetproxy/licenses") + } + copy { + from("${guiResourcesDir}/icon.ico") + into("${pathLinuxTarget}/share/packetproxy") + rename("icon.ico", "PacketProxy.ico") + } + copy { + from("${layout.buildDirectory.get()}/libs/PacketProxy.jar") + into("${pathLinuxTarget}/share/packetproxy") + } + val destFile = file("${pathLinuxWorkDir}/OpenJDK17.tar.gz") + val jdkUrl = + "https://corretto.aws/downloads/resources/17.0.15.6.1/amazon-corretto-17.0.15.6.1-linux-x64.tar.gz" + if (!destFile.exists()) { + ant.withGroovyBuilder { "get"("src" to jdkUrl, "dest" to destFile, "verbose" to true) } + } + copy { + from(tarTree(resources.gzip("${pathLinuxWorkDir}/OpenJDK17.tar.gz"))) + into(file("${pathLinuxWorkDir}/OpenJDK17")) + } + copy { + from(file("${pathLinuxWorkDir}/OpenJDK17/amazon-corretto-17.0.15.6.1-linux-x64")) + into(file("${pathLinuxTarget}/share/packetproxy/OpenJDK17")) + } + copy { + from("${rootProject.projectDir}/installer/izpack/packetproxy") + into("${pathLinuxTarget}/bin/") + } + } +} + +tasks.register("preIzpack") { + doLast { + copy { + from("${rootProject.projectDir}/installer/izpack/shortcutSpec.xml") + into(pathWorkDir) + } + copy { + from("${guiResourcesDir}/installer_leftside_image.png") + into(pathWorkDir) + } + copy { + from("${guiResourcesDir}/installer_icon.png") + into(pathWorkDir) + } + } +} + +tasks.register("izpackWin64") { + dependsOn("createWin64Target", "preIzpack") + baseDir = file(pathWin64Target) + installFile = file("${rootProject.projectDir}/installer/izpack/installer.xml") + outputFile = file(pathWin64Installer) + compression = "deflate" + compressionLevel = 9 + appProperties = + mapOf( + "app.group" to "PacketProxy", + "app.name" to "PacketProxy", + "app.title" to "PacketProxy", + "app.version" to gitVersion, + "app.subpath" to "PacketProxy-${gitVersion}", + ) +} + +tasks.register("izpackLinux") { + dependsOn("createLinuxTarget", "preIzpack") + baseDir = file(pathLinuxTarget) + installFile = file("${rootProject.projectDir}/installer/izpack/installer.xml") + outputFile = file(pathLinuxInstaller) + compression = "deflate" + compressionLevel = 9 + appProperties = + mapOf( + "app.group" to "PacketProxy", + "app.name" to "PacketProxy", + "app.title" to "PacketProxy", + "app.version" to gitVersion, + "app.subpath" to "PacketProxy-${gitVersion}", + ) +} + +tasks.register("createMacJPackage") { + dependsOn("prepareJPackage") + onlyIf { Os.isFamily(Os.FAMILY_MAC) } + workingDir = rootProject.projectDir + commandLine( + "/Library/Java/JavaVirtualMachines/amazon-corretto-17.jdk/Contents/Home/bin/jpackage", + "--verbose", + "-d", + pathMacWorkDir, + "-n", + "PacketProxy", + "-i", + "${layout.buildDirectory.get()}/libs/", + "--app-version", + gitVersion, + "--icon", + "${pathMacWorkDir}/icon.icns", + "--main-jar", + "PacketProxy.jar", + "--mac-sign", + "--mac-signing-key-user-name", + extra["signedKey"] as String, + ) +} + +tasks.register("resignMacJPackage") { + dependsOn("createMacJPackage") + onlyIf { Os.isFamily(Os.FAMILY_MAC) } + doLast { + val signedKey = extra["signedKey"] as String + runShell( + "hdiutil convert ${pathMacSignedReleaseJPackagePath} -format UDRW -o ${pathMacWorkDir}/tmp.dmg" + ) + runShell("hdiutil mount ${pathMacWorkDir}/tmp.dmg") + runShell( + "rm -rf /tmp/packetproxy && mkdir /tmp/packetproxy && cd /tmp/packetproxy && jar xvf /Volumes/PacketProxy/PacketProxy.app/Contents/app/PacketProxy.jar" + ) + runShell( + "cd /tmp/packetproxy; for i in \$(find . -type f); do if file \$i | grep Mach-O > /dev/null; then codesign -fv --timestamp --options=runtime --deep -s \"${signedKey}\" \$i; fi; done" + ) + runShell( + "cd /tmp/packetproxy; jar cvfm /Volumes/PacketProxy/PacketProxy.app/Contents/app/PacketProxy.jar META-INF/MANIFEST.MF *" + ) + runShell( + "cd /Volumes/PacketProxy/PacketProxy.app/Contents/; for i in \$(find . -type f); do if file \$i | grep Mach-O > /dev/null; then codesign -fv --timestamp --options=runtime --deep -s \"${signedKey}\" \$i; fi; done" + ) + runShell( + "cd /Volumes/PacketProxy; codesign -fv --timestamp --options=runtime --deep -s \"${signedKey}\" --entitlements ${rootProject.projectDir}/assets/resign/entitlements.xml PacketProxy.app" + ) + runShell("hdiutil detach /Volumes/PacketProxy") + runShell( + "rm ${pathMacSignedReleaseJPackagePath}; hdiutil convert ${pathMacWorkDir}/tmp.dmg -format UDZO -o ${pathMacSignedReleaseJPackagePath}" + ) + } +} + +tasks.register("createMacInstaller") { + dependsOn("resignMacJPackage") + onlyIf { Os.isFamily(Os.FAMILY_MAC) } + workingDir = rootProject.projectDir + commandLine("mv", pathMacSignedReleaseJPackagePath, pathMacSignedReleasePath) +} + +tasks.register("notaryMacInstaller") { + onlyIf { Os.isFamily(Os.FAMILY_MAC) } + workingDir = rootProject.projectDir + commandLine( + "xcrun", + "notarytool", + "submit", + pathMacSignedReleasePath, + "--apple-id", + extra["appleId"] as String, + "--password", + extra["applePasswd"] as String, + "--team-id", + extra["teamId"] as String, + "--wait", + ) +} + +tasks.register("createWin64Release") { + dependsOn("izpackWin64") + from(pathWin64Installer) + into(pathWin64WorkDir) + rename(nameInstaller, nameWin64Release) +} + +tasks.register("createLinuxInstaller") { + dependsOn("izpackLinux") + from(pathLinuxInstaller) + into(pathLinuxWorkDir) + rename(nameInstaller, nameLinuxRelease) +} + +tasks.register("createMacRelease") { dependsOn("createMacInstaller") } + +tasks.register("createWinRelease") { dependsOn("createWin64Release") } + +tasks.register("createLinuxRelease") { + dependsOn("createLinuxInstaller") + doLast { + file(pathLinuxReleaseDir).mkdirs() + copy { + from("${rootProject.projectDir}/installer/izpack/installer.sh") + from(pathLinuxInstaller) + into(pathLinuxReleaseDir) + } + runShell("cd ${pathLinuxWorkDir}; tar czvf ${nameLinuxRelease} ${nameLinuxReleaseDir}") + } +} + +tasks.register("release") { + dependsOn("createMacRelease", "createWinRelease", "createLinuxRelease") +} diff --git a/app/build.gradle.partial b/app/build.gradle.partial deleted file mode 100644 index 87f7b2cc..00000000 --- a/app/build.gradle.partial +++ /dev/null @@ -1,580 +0,0 @@ -import com.bmuschko.gradle.izpack.CreateInstallerTask -import org.apache.tools.ant.taskdefs.condition.Os -import org.gradle.plugins.ide.eclipse.model.AccessRule - -buildscript { - dependencies { - classpath 'com.bmuschko:gradle-izpack-plugin:3.0' - } -} - -plugins { - id 'java' - id 'application' - id 'eclipse' - id 'me.champeau.jmh' version '0.7.3' - id 'com.bmuschko.izpack' version '3.2' - id 'com.github.jk1.dependency-license-report' version '2.5' - id "de.undercouch.download" version "5.6.0" - id "com.diffplug.spotless" version "7.1.0" - id 'org.jetbrains.kotlin.jvm' version '2.2.21' -} - -repositories { - mavenCentral() - maven { url = 'https://jitpack.io' } -} - -dependencies { - compileOnly 'org.projectlombok:lombok:1.18.42' - annotationProcessor 'org.projectlombok:lombok:1.18.42' - testCompileOnly 'org.projectlombok:lombok:1.18.42' - testAnnotationProcessor 'org.projectlombok:lombok:1.18.42' - - testImplementation 'org.junit.jupiter:junit-jupiter:6.0.0' - testRuntimeOnly 'org.junit.platform:junit-platform-launcher' - testRuntimeOnly 'org.jetbrains.kotlin:kotlin-reflect:2.2.21' - testImplementation 'org.assertj:assertj-core:3.23.1' - testImplementation 'org.mockito:mockito-core:4.7.0' - testImplementation 'org.projectlombok:lombok:1.18.42' - - // FlatLaf - Modern Look and Feel - implementation 'com.formdev:flatlaf:3.4.1' - implementation 'com.formdev:flatlaf-intellij-themes:3.4.1' - - implementation 'com.google.guava:guava:24.1-jre' - implementation 'commons-codec:commons-codec:1.6' - implementation 'commons-io:commons-io:2.4' - implementation 'org.apache.commons:commons-lang3:3.1' - implementation 'org.apache.commons:commons-collections4:4.0' - implementation 'org.xerial:sqlite-jdbc:3.7.2' - implementation 'com.j256.ormlite:ormlite-core:4.48' - implementation 'com.j256.ormlite:ormlite-jdbc:4.48' - implementation 'com.google.protobuf:protobuf-java:4.31.1' - implementation 'com.google.protobuf:protobuf-java-util:4.31.1' - implementation 'org.slf4j:slf4j-api:2.0.9' - implementation 'org.slf4j:slf4j-log4j12:1.7.25' - implementation 'org.jline:jline:3.25.1' - implementation 'org.jline:jline-terminal-jansi:3.25.1' - implementation 'ch.qos.logback:logback-classic:1.4.14' - implementation 'com.googlecode.java-diff-utils:diffutils:1.2.1' - implementation 'com.google.re2j:re2j:1.1' - implementation 'com.github.mobius-software-ltd:mqtt-parser:parser-1.0.3' - implementation 'net.arnx:jsonic:1.3.0' - implementation 'org.json:json:20180813' - implementation 'com.fasterxml.jackson.dataformat:jackson-dataformat-cbor:2.10.0' - implementation 'com.fasterxml.jackson.core:jackson-databind:2.10.0' - implementation 'org.msgpack:jackson-dataformat-msgpack:0.8.18' - implementation 'org.bouncycastle:bcpkix-jdk15on:1.64' - implementation 'commons-net:commons-net:3.6' - implementation 'org.nanohttpd:nanohttpd:2.3.1' - implementation 'com.google.code.gson:gson:2.13.1' - implementation 'org.apache.commons:commons-math3:3.0' - implementation 'org.jfree:jfreechart:1.5.3' - implementation 'org.ejml:ejml-all:0.41' - implementation 'at.favre.lib:hkdf:1.1.0' - implementation 'org.eclipse.jetty.http2:http2-hpack:11.0.11' - implementation 'org.eclipse.jetty.http3:http3-qpack:11.0.11' - implementation 'com.github.docker-java:docker-java:3.3.0' - implementation 'com.github.docker-java:docker-java-transport-httpclient5:3.3.0' - implementation 'org.apache.commons:commons-compress:1.28.0' - implementation 'com.github.luben:zstd-jni:1.5.6-3' - implementation 'org.brotli:dec:0.1.2' - implementation 'dnsjava:dnsjava:3.6.4' - implementation files('libs/agent15.jar') - implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8" - implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:1.8.1" - implementation "io.arrow-kt:arrow-core:2.1.2" - - izpack 'org.codehaus.izpack:izpack-dist:5.1.3' - - // load additional Internal modules if it exists - eachInternalEntry('libraries.gradle') { dir, lib -> implementation lib } -} - -licenseReport { - outputDir = "$buildDir/reports/licenses" - configurations = ['runtimeClasspath'] -} - -tasks.withType(JavaCompile) { - options.encoding = "UTF-8" -} - -tasks.withType(Test) { - systemProperty "file.encoding", "UTF-8" -} - -test { - useJUnitPlatform() -} - -/** - * 内部ディレクトリ配下に存在する filename の内容を Eval.me で評価し、 - * 各エントリと元ディレクトリを action(dir, entry) の形で渡す汎用イテレータ - */ -def eachInternalEntry(String filename, Closure action) { - ['dena/', 'denaN/', 'denaL/'].each { def dir -> - def f = file(dir + filename) - if (f.exists()) { - Eval.me(f.text).each { action(dir, it) } - } - } -} - -/** - * 内部ディレクトリ配下に存在する filename の内容を Eval.me で評価し、 - * 実在するソースディレクトリパスの一覧を返す - */ -def collectInternalSrcDirs(String filename) { - def result = [] - eachInternalEntry(filename) { dir, src -> - if (file(dir + src).exists()) { - result << dir + src - } - } - return result -} - -def spotlessTarget = { String pattern -> - fileTree('.') { - include pattern - // dena/ は対象に含めたい - exclude 'bin/**', 'build/**', '.gradle/**', 'denaN/**', 'denaL/**' - } -} - -spotless { - java { - target spotlessTarget('**/*.java') - - cleanthat() - googleJavaFormat() - - eclipse().configFile('eclipse-format-settings.xml') - - formatAnnotations() - } - - kotlin { - target spotlessTarget('**/*.kt') - - ktfmt().googleStyle() - trimTrailingWhitespace() - endWithNewline() - } - - groovy { - target spotlessTarget('**/*.gradle') - - greclipse() - leadingTabsToSpaces(2) - trimTrailingWhitespace() - endWithNewline() - } - - flexmark { - target spotlessTarget('**/*.md') - - flexmark() - } -} - -application { - mainClass = "packetproxy.PacketProxy" -} - -def shell(String command) { - ["sh", "-c", command].execute().waitForProcessOutput(System.out, System.err) -} - -def gitVersion = "git describe --tags --abbrev=0".execute().text.replace("\n", "") -new File("${projectDir}/src/main/resources/version").text = gitVersion - -project.ext { - nameInstaller = "PacketProxy-${gitVersion}-Installer.jar" - nameMacInstallApp = "PacketProxy-${gitVersion}-Installer-Mac.app" - nameMacRelease = "PacketProxy-${gitVersion}-Installer-Mac.zip" - nameMacSignedReleaseJPackage = "PacketProxy-${gitVersion}.dmg" - nameMacSignedRelease = "PacketProxy-${gitVersion}-Installer-Mac-Signed.dmg" - nameWin32Release = "PacketProxy-${gitVersion}-Installer-Win32.jar" - nameWin64Release = "PacketProxy-${gitVersion}-Installer-Win64.jar" - nameLinuxReleaseDir = "PacketProxy-${gitVersion}-Linux" - nameLinuxRelease = "PacketProxy-${gitVersion}-Installer-Linux.jar" - // path - pathInstaller = "${buildDir}/distributions/${nameInstaller}" - pathWorkDir = "${buildDir}/distributions" - // Mac - pathMacWorkDir = "${buildDir}/distributions/mac" - pathMacTarget = "${pathMacWorkDir}/target" - pathMacInstaller = "${pathMacWorkDir}/${nameInstaller}" - pathMacInstallApp = "${pathMacWorkDir}/${nameMacInstallApp}" - pathMacRelease = "${pathMacWorkDir}/${nameMacRelease}" - pathMacSignedReleaseJPackage = "${pathMacWorkDir}/${nameMacSignedReleaseJPackage}" - pathMacSignedRelease = "${pathMacWorkDir}/${nameMacSignedRelease}" - // Win32 - pathWin32WorkDir = "${buildDir}/distributions/win32" - pathWin32Target = "${pathWin32WorkDir}/target" - pathWin32Installer = "${pathWin32WorkDir}/${nameInstaller}" - pathWin32Release = "${pathWin32WorkDir}/${nameWin32Release}" - // Win64 - pathWin64WorkDir = "${buildDir}/distributions/win64" - pathWin64Target = "${pathWin64WorkDir}/target" - pathWin64Installer = "${pathWin64WorkDir}/${nameInstaller}" - pathWin64Release = "${pathWin64WorkDir}/${nameWin64Release}" - // Linux - pathLinuxWorkDir = "${buildDir}/distributions/Linux" - pathLinuxTarget = "${pathLinuxWorkDir}/target" - pathLinuxInstaller = "${pathLinuxWorkDir}/${nameInstaller}" - pathLinuxReleaseDir = "${pathLinuxWorkDir}/${nameLinuxReleaseDir}" - pathLinuxRelease = "${pathLinuxWorkDir}/${nameLinuxRelease}" -} - -project.ext { - appleId = "test@example.com" - applePasswd = "xxxx-xxxx-xxxx-xxxx" - signedKey = "Developer ID Application: YYYYYYYY (ZZZZZZZZ)" - teamId = "ZZZZZZZZ" -} - -eclipse { - classpath { - file { - whenMerged { - def jre = entries.find { it.path.contains 'org.eclipse.jdt.launching.JRE_CONTAINER' } - jre.accessRules.add(new AccessRule('accessible', 'com/**')) - jre.accessRules.add(new AccessRule('accessible', 'sun/**')) - } - } - } -} - -sourceSets { - main { - java { - srcDirs = ['src/main/java/core'] + collectInternalSrcDirs('sources.gradle') - } - resources { - srcDirs = ['src/main/resources'] + collectInternalSrcDirs('resources.gradle') - } - } - test { - java { - srcDirs = [ - 'src/test/java', - 'src/test/kotlin' - ] + collectInternalSrcDirs('tests.gradle') - } - } -} - -jmh { - fork = 2 -} - -jar { - duplicatesStrategy = DuplicatesStrategy.INCLUDE - doFirst { - def serviceDir = file("${buildDir}/META-INF/services") - serviceDir.deleteDir() - serviceDir.mkdirs() - for (file in configurations.runtimeClasspath) { - zipTree(file).matching { include 'META-INF/services/*' }.each { f -> - new File(serviceDir, f.name) << f.getText("UTF-8") << "\n" - } - } - } - manifest { - attributes( - "Main-Class": "packetproxy/PacketProxy", - "Class-Path": configurations.runtimeClasspath.collect { it.getName() }.join(' ') - ) - } - from { - configurations.runtimeClasspath.collect { - it.isDirectory() ? it : zipTree(it).matching { - exclude "META-INF/**" - } - } - } - from { - fileTree(buildDir).matching { - include 'META-INF/services/*' - } - } -} - -task prepareJPackage(dependsOn: "jar") { - doLast { - def workDir = "${project.ext.pathMacWorkDir}" - delete "${workDir}" - new File("${workDir}").mkdirs() - def jdkUrl = "https://corretto.aws/downloads/resources/17.0.15.6.1/amazon-corretto-17.0.15.6.1-macosx-x64.tar.gz" - def destFile = file("${workDir}/OpenJDK17.tar.gz") - if (!destFile.exists()) { - ant.get(src: jdkUrl, dest: destFile, verbose: true) - } - copy { - from tarTree(resources.gzip("${workDir}/OpenJDK17.tar.gz")) - into file("${workDir}/OpenJDK17") - } - // create icon - copy { - from "${projectDir}/src/main/resources/gui/icon.png" - into "${workDir}/icon.iconset/" - } - shell("mv ${workDir}/icon.iconset/icon.png ${workDir}/icon.iconset/icon_256x256.png") - shell("iconutil -c icns --output ${workDir}/icon.icns ${workDir}/icon.iconset/") - } - onlyIf { Os.isFamily(Os.FAMILY_MAC) } -} - -class CreateWinTarget extends DefaultTask { - @Input - String workDir = '' - @Input - String targetDir = '' - @Input - String jdkUrl = '' - - @TaskAction - void start() { - project.delete { - delete "${workDir}" - } - new File("${workDir}").mkdirs() - new File("${targetDir}").mkdirs() - project.copy { - from "${project.buildDir}/reports/licenses/index.html" - into "${targetDir}/licenses" - } - project.copy { - from "${project.projectDir}/src/main/resources/gui/icon.ico" - into "${targetDir}" - rename('icon.ico', 'PacketProxy.ico') - } - project.copy { - from "${project.buildDir}/libs/PacketProxy.jar" - into "${targetDir}" - } - def destFile = project.file("${workDir}/OpenJDK17.zip") - if (!destFile.exists()) { - ant.get(src: jdkUrl, dest: destFile, verbose: true) - } - project.copy { - from project.zipTree("${workDir}/OpenJDK17.zip") - into project.file("${workDir}/OpenJDK17") - } - project.copy { - from project.file("${workDir}/OpenJDK17/jdk17.0.15_6") - into project.file("${targetDir}/OpenJDK17") - } - } -} - -task createWin64Target(type: CreateWinTarget, dependsOn: [ - 'jar', - 'generateLicenseReport' -]) { - workDir = project.ext.pathWin64WorkDir - targetDir = project.ext.pathWin64Target - jdkUrl = 'https://corretto.aws/downloads/resources/17.0.15.6.1/amazon-corretto-17.0.15.6.1-windows-x64-jdk.zip' -} - -task createLinuxTarget(dependsOn: [ - 'jar', - 'generateLicenseReport' -]) { - def workDir = project.ext.pathLinuxWorkDir - def targetDir = project.ext.pathLinuxTarget - def jdkUrl = 'https://corretto.aws/downloads/resources/17.0.15.6.1/amazon-corretto-17.0.15.6.1-linux-x64.tar.gz' - def buildDirectory = project.buildDir - def projectDirectory = project.projectDir - - doLast { - delete { - delete "${workDir}" - } - new File("${workDir}").mkdirs() - new File("${targetDir}").mkdirs() - copy { - from "${buildDirectory}/reports/licenses/index.html" - from "${projectDirectory}/LICENSES" - into "${targetDir}/share/packetproxy/licenses" - } - copy { - from "${projectDirectory}/src/main/resources/gui/icon.ico" - into "${targetDir}/share/packetproxy" - rename('icon.ico', 'PacketProxy.ico') - } - copy { - from "${buildDirectory}/libs/PacketProxy.jar" - into "${targetDir}/share/packetproxy" - } - def destFile = file("${workDir}/OpenJDK17.tar.gz") - if (!destFile.exists()) { - ant.get(src: jdkUrl, dest: destFile, verbose: true) - } - copy { - from tarTree(resources.gzip("${workDir}/OpenJDK17.tar.gz")) - into file("${workDir}/OpenJDK17") - } - copy { - from file("${workDir}/OpenJDK17/amazon-corretto-17.0.15.6.1-linux-x64") - into file("${targetDir}/share/packetproxy/OpenJDK17") - } - copy { - from "${projectDirectory}/installer/izpack/packetproxy" - into "${targetDir}/bin/" - } - } -} - -task preIzpack { - doLast { - copy { - from "${projectDir}/installer/izpack/shortcutSpec.xml" - into "${project.ext.pathWorkDir}" - } - copy { - from "${projectDir}/src/main/resources/gui/installer_leftside_image.png" - into "${project.ext.pathWorkDir}" - } - copy { - from "${projectDir}/src/main/resources/gui/installer_icon.png" - into "${project.ext.pathWorkDir}" - } - } -} - -task izpackWin64(type: CreateInstallerTask, dependsOn: [ - 'createWin64Target', - 'preIzpack' -]) { - baseDir = file(project.ext.pathWin64Target) - installFile = file("${projectDir}/installer/izpack/installer.xml") - outputFile = file(project.ext.pathWin64Installer) - compression = 'deflate' - compressionLevel = 9 - appProperties = ['app.group': 'PacketProxy', 'app.name': 'PacketProxy', 'app.title': 'PacketProxy', - 'app.version': gitVersion, 'app.subpath': "PacketProxy-${gitVersion}"] -} - -task izpackLinux(type: CreateInstallerTask, dependsOn: [ - 'createLinuxTarget', - 'preIzpack' -]) { - baseDir = file(project.ext.pathLinuxTarget) - installFile = file("${projectDir}/installer/izpack/installer.xml") - outputFile = file(project.ext.pathLinuxInstaller) - compression = 'deflate' - compressionLevel = 9 - appProperties = ['app.group': 'PacketProxy', 'app.name': 'PacketProxy', 'app.title': 'PacketProxy', - 'app.version': gitVersion, 'app.subpath': "PacketProxy-${gitVersion}"] -} - -task createMacJPackage(type: Exec, dependsOn: "prepareJPackage") { - workingDir "${projectDir}" - commandLine = [ - "/Library/Java/JavaVirtualMachines/amazon-corretto-17.jdk/Contents/Home/bin/jpackage", - "--verbose", - "-d", - "${project.ext.pathMacWorkDir}", - "-n", - "PacketProxy", - "-i", - "${buildDir}/libs/", - "--app-version", - gitVersion, - "--icon", - "${project.ext.pathMacWorkDir}/icon.icns", - "--main-jar", - "PacketProxy.jar", - "--mac-sign", - "--mac-signing-key-user-name", - "${project.ext.signedKey}" - ] - onlyIf { Os.isFamily(Os.FAMILY_MAC) } -} - -task resignMacJPackage(dependsOn: "createMacJPackage") { - doLast { - shell("hdiutil convert ${pathMacSignedReleaseJPackage} -format UDRW -o ${project.ext.pathMacWorkDir}/tmp.dmg") - shell("hdiutil mount ${project.ext.pathMacWorkDir}/tmp.dmg") - shell("rm -rf /tmp/packetproxy && mkdir /tmp/packetproxy && cd /tmp/packetproxy && jar xvf /Volumes/PacketProxy/PacketProxy.app/Contents/app/PacketProxy.jar") - shell("cd /tmp/packetproxy; for i in \$(find . -type f); do if file \$i | grep Mach-O > /dev/null; then codesign -fv --timestamp --options=runtime --deep -s \"${project.ext.signedKey}\" \$i; fi; done") - shell("cd /tmp/packetproxy; jar cvfm /Volumes/PacketProxy/PacketProxy.app/Contents/app/PacketProxy.jar META-INF/MANIFEST.MF *") - shell("cd /Volumes/PacketProxy/PacketProxy.app/Contents/; for i in \$(find . -type f); do if file \$i | grep Mach-O > /dev/null; then codesign -fv --timestamp --options=runtime --deep -s \"${project.ext.signedKey}\" \$i; fi; done") - shell("cd /Volumes/PacketProxy; codesign -fv --timestamp --options=runtime --deep -s \"${project.ext.signedKey}\" --entitlements ${projectDir}/assets/resign/entitlements.xml PacketProxy.app") - shell("hdiutil detach /Volumes/PacketProxy") - shell("rm ${pathMacSignedReleaseJPackage}; hdiutil convert ${project.ext.pathMacWorkDir}/tmp.dmg -format UDZO -o ${pathMacSignedReleaseJPackage}") - } - onlyIf { Os.isFamily(Os.FAMILY_MAC) } -} - -task createMacInstaller(type: Exec, dependsOn: "resignMacJPackage") { - workingDir "${projectDir}" - commandLine = [ - "mv", - project.ext.pathMacSignedReleaseJPackage, - project.ext.pathMacSignedRelease - ] - onlyIf { Os.isFamily(Os.FAMILY_MAC) } -} - -task notaryMacInstaller(type: Exec) { - workingDir "${projectDir}" - commandLine = [ - "xcrun", - "notarytool", - "submit", - "${project.ext.pathMacSignedRelease}", - "--apple-id", - "${project.ext.appleId}", - "--password", - "${project.ext.applePasswd}", - "--team-id", - "${project.ext.teamId}", - "--wait" - ] - onlyIf { Os.isFamily(Os.FAMILY_MAC) } -} - -task createWin64Release(type: Copy, dependsOn: 'izpackWin64') { - from "${project.ext.pathWin64Installer}" - into "${project.ext.pathWin64WorkDir}" - rename("${project.ext.nameInstaller}", "${project.ext.nameWin64Release}") -} - -task createLinuxInstaller(type: Copy, dependsOn: 'izpackLinux') { - from "${project.ext.pathLinuxInstaller}" - into "${project.ext.pathLinuxWorkDir}" - rename("${project.ext.nameInstaller}", "${project.ext.nameLinuxRelease}") -} - -task createMacRelease(dependsOn: 'createMacInstaller') { - /* do nothing */ -} - -task createWinRelease(dependsOn: 'createWin64Release') { - /* do nothing */ -} - -task createLinuxRelease(dependsOn: 'createLinuxInstaller') { - doLast { - file(project.ext.pathLinuxReleaseDir).mkdirs() - copy { - from "${projectDir}/installer/izpack/installer.sh" - from "${project.ext.pathLinuxInstaller}" - into "${project.ext.pathLinuxReleaseDir}" - } - shell("cd ${project.ext.pathLinuxWorkDir}; tar czvf ${project.ext.nameLinuxRelease} ${project.ext.nameLinuxReleaseDir}") - } -} - -task release(dependsOn: [ - 'createMacRelease', - 'createWinRelease', - 'createLinuxRelease' -]) { -} diff --git a/build.gradle b/build.gradle deleted file mode 100644 index cda5db66..00000000 --- a/build.gradle +++ /dev/null @@ -1,75 +0,0 @@ -import org.gradle.plugins.ide.eclipse.model.AccessRule - -plugins { - id 'eclipse' - id 'com.diffplug.spotless' version '7.1.0' -} - -repositories { - mavenCentral() -} - -def spotlessTarget = { String pattern -> - fileTree('.') { - include pattern - exclude 'bin/**', 'build/**', '.gradle/**', 'denaN/**', 'denaL/**' - } -} - -spotless { - java { - target spotlessTarget('**/*.java') - cleanthat() - googleJavaFormat() - eclipse().configFile('eclipse-format-settings.xml') - formatAnnotations() - } - kotlin { - target spotlessTarget('**/*.kt') - ktfmt().googleStyle() - trimTrailingWhitespace() - endWithNewline() - } - groovy { - target spotlessTarget('**/*.gradle') - greclipse() - leadingTabsToSpaces(2) - trimTrailingWhitespace() - endWithNewline() - } - flexmark { - target spotlessTarget('**/*.md') - flexmark() - } -} - -eclipse { - classpath { - file { - whenMerged { - def jre = entries.find { it.path.contains 'org.eclipse.jdt.launching.JRE_CONTAINER' } - jre.accessRules.add(new AccessRule('accessible', 'com/**')) - jre.accessRules.add(new AccessRule('accessible', 'sun/**')) - } - } - } -} - -tasks.register('test') { - dependsOn subprojects.collect { it.tasks.named('test') } -} - -tasks.register('run') { - dependsOn ':app:run' -} - -[ - 'release', - 'createMacRelease', - 'createWinRelease', - 'createLinuxRelease' -].each { taskName -> - tasks.register(taskName) { - dependsOn ":app:${taskName}" - } -} diff --git a/build.gradle.kts b/build.gradle.kts new file mode 100644 index 00000000..1844d1d9 --- /dev/null +++ b/build.gradle.kts @@ -0,0 +1,72 @@ +import org.gradle.plugins.ide.eclipse.model.AbstractClasspathEntry +import org.gradle.plugins.ide.eclipse.model.AccessRule +import org.gradle.plugins.ide.eclipse.model.Classpath + +plugins { + eclipse + id("com.diffplug.spotless") version "7.1.0" +} + +repositories { mavenCentral() } + +fun spotlessTarget(pattern: String): FileTree = + fileTree(".") { + include(pattern) + exclude("bin/**", "build/**", ".gradle/**", "denaN/**", "denaL/**") + } + +spotless { + java { + target(spotlessTarget("**/*.java")) + cleanthat() + googleJavaFormat() + eclipse().configFile("eclipse-format-settings.xml") + formatAnnotations() + } + kotlin { + target(spotlessTarget("**/*.kt"), spotlessTarget("**/*.gradle.kts")) + ktfmt().googleStyle() + trimTrailingWhitespace() + endWithNewline() + } + groovy { + target( + spotlessTarget("dena/**/*.gradle"), + spotlessTarget("denaN/**/*.gradle"), + spotlessTarget("denaL/**/*.gradle"), + ) + greclipse() + leadingTabsToSpaces(2) + trimTrailingWhitespace() + endWithNewline() + } + flexmark { + target(spotlessTarget("**/*.md")) + flexmark() + } +} + +eclipse { + classpath { + file { + whenMerged { + val classpath = this as Classpath + val jre = + classpath.entries.filterIsInstance().find { + it.path.contains("org.eclipse.jdt.launching.JRE_CONTAINER") + } + jre?.accessRules?.add(AccessRule("accessible", "com/**")) + jre?.accessRules?.add(AccessRule("accessible", "sun/**")) + } + } + } +} + +tasks.register("test") { dependsOn(subprojects.map { it.tasks.named("test") }) } + +tasks.register("run") { dependsOn(":app:run") } + +listOf("release", "createMacRelease", "createWinRelease", "createLinuxRelease").forEach { taskName + -> + tasks.register(taskName) { dependsOn(":app:$taskName") } +} diff --git a/core/build.gradle b/core/build.gradle deleted file mode 100644 index 2d5def6b..00000000 --- a/core/build.gradle +++ /dev/null @@ -1,98 +0,0 @@ -plugins { - id 'java-library' - id 'org.jetbrains.kotlin.jvm' - id 'me.champeau.jmh' -} - -apply from: rootProject.file('gradle/module-common.gradle') - -def gitVersion = 'git describe --tags --abbrev=0'.execute().text.replace('\n', '') -new File("${projectDir}/src/main/resources/version").text = gitVersion - -dependencies { - compileOnly 'org.projectlombok:lombok:1.18.42' - annotationProcessor 'org.projectlombok:lombok:1.18.42' - testCompileOnly 'org.projectlombok:lombok:1.18.42' - testAnnotationProcessor 'org.projectlombok:lombok:1.18.42' - - testImplementation 'org.junit.jupiter:junit-jupiter:6.0.0' - testRuntimeOnly 'org.junit.platform:junit-platform-launcher' - testRuntimeOnly 'org.jetbrains.kotlin:kotlin-reflect:2.2.21' - testImplementation 'org.assertj:assertj-core:3.23.1' - testImplementation 'org.mockito:mockito-core:4.7.0' - testImplementation 'com.tngtech.archunit:archunit-junit5:1.4.1' - implementation 'org.ejml:ejml-all:0.41' - - api 'com.google.guava:guava:24.1-jre' - api 'commons-codec:commons-codec:1.6' - api 'commons-io:commons-io:2.4' - api 'org.apache.commons:commons-lang3:3.1' - api 'org.apache.commons:commons-collections4:4.0' - api 'org.xerial:sqlite-jdbc:3.7.2' - api 'com.j256.ormlite:ormlite-core:4.48' - api 'com.j256.ormlite:ormlite-jdbc:4.48' - api 'com.google.protobuf:protobuf-java:4.31.1' - api 'com.google.protobuf:protobuf-java-util:4.31.1' - api 'org.slf4j:slf4j-api:2.0.9' - api 'org.slf4j:slf4j-log4j12:1.7.25' - api 'ch.qos.logback:logback-classic:1.4.14' - api 'com.googlecode.java-diff-utils:diffutils:1.2.1' - api 'com.google.re2j:re2j:1.1' - api 'com.github.mobius-software-ltd:mqtt-parser:parser-1.0.3' - api 'net.arnx:jsonic:1.3.0' - api 'org.json:json:20180813' - api 'com.fasterxml.jackson.dataformat:jackson-dataformat-cbor:2.10.0' - api 'com.fasterxml.jackson.core:jackson-databind:2.10.0' - api 'org.msgpack:jackson-dataformat-msgpack:0.8.18' - api 'org.bouncycastle:bcpkix-jdk15on:1.64' - api 'commons-net:commons-net:3.6' - api 'org.nanohttpd:nanohttpd:2.3.1' - api 'com.google.code.gson:gson:2.13.1' - api 'org.apache.commons:commons-math3:3.0' - api 'at.favre.lib:hkdf:1.1.0' - api 'org.eclipse.jetty.http2:http2-hpack:11.0.11' - api 'org.eclipse.jetty.http3:http3-qpack:11.0.11' - api 'com.github.docker-java:docker-java:3.3.0' - api 'com.github.docker-java:docker-java-transport-httpclient5:3.3.0' - api 'org.apache.commons:commons-compress:1.28.0' - api 'com.github.luben:zstd-jni:1.5.6-3' - api 'org.brotli:dec:0.1.2' - api 'dnsjava:dnsjava:3.6.4' - api files("${rootProject.projectDir}/libs/agent15.jar") - api 'org.jetbrains.kotlin:kotlin-stdlib-jdk8' - api 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.8.1' - api 'io.arrow-kt:arrow-core:2.1.2' - - eachInternalEntry('libraries.gradle') { dir, lib -> api lib } -} - -sourceSets { - main { - java { - srcDirs = ['src/main/java/core'] + collectInternalSrcDirs('sources.gradle') - } - resources { - srcDirs = ['src/main/resources'] + collectInternalSrcDirs('resources.gradle') - } - } - test { - java { - srcDirs = ['src/test/java'] + collectInternalSrcDirs('tests.gradle') - } - kotlin { - srcDirs = ['src/test/kotlin'] - } - resources { - srcDirs = ['src/test/resources'] - } - } - jmh { - java { - srcDirs = ['src/jmh/java'] - } - } -} - -jmh { - fork = 2 -} diff --git a/core/build.gradle.kts b/core/build.gradle.kts new file mode 100644 index 00000000..9f30694a --- /dev/null +++ b/core/build.gradle.kts @@ -0,0 +1,119 @@ +import groovy.util.Eval +import java.io.File +import org.gradle.api.file.FileCollection + +plugins { + id("java-library") + id("org.jetbrains.kotlin.jvm") + id("me.champeau.jmh") +} + +fun eachInternalEntry(filename: String, action: (dir: String, entry: Any) -> Unit) { + listOf("dena/", "denaN/", "denaL/").forEach { dir -> + val file = rootProject.file(dir + filename) + if (file.exists()) { + @Suppress("UNCHECKED_CAST") val entries = Eval.me(file.readText()) as Iterable + entries.forEach { action(dir, it) } + } + } +} + +fun collectInternalSrcDirs(filename: String): List { + val result = mutableListOf() + eachInternalEntry(filename) { dir, src -> + val path = rootProject.file(dir + src.toString()) + if (path.exists()) { + result.add(path) + } + } + return result +} + +fun runCommand(command: String): String = + ProcessBuilder("sh", "-c", command).start().inputStream.bufferedReader().readText().trim() + +fun addInternalApiDependency(entry: Any) { + when (entry) { + is File -> dependencies.add("api", files(entry)) + is FileCollection -> dependencies.add("api", entry) + else -> dependencies.add("api", entry.toString()) + } +} + +apply(from = rootProject.file("gradle/module-common.gradle.kts")) + +val gitVersion = runCommand("git describe --tags --abbrev=0") + +layout.projectDirectory.file("src/main/resources/version").asFile.writeText(gitVersion) + +dependencies { + compileOnly("org.projectlombok:lombok:1.18.42") + annotationProcessor("org.projectlombok:lombok:1.18.42") + testCompileOnly("org.projectlombok:lombok:1.18.42") + testAnnotationProcessor("org.projectlombok:lombok:1.18.42") + + testImplementation("org.junit.jupiter:junit-jupiter:6.0.0") + testRuntimeOnly("org.junit.platform:junit-platform-launcher") + testRuntimeOnly("org.jetbrains.kotlin:kotlin-reflect:2.2.21") + testImplementation("org.assertj:assertj-core:3.23.1") + testImplementation("org.mockito:mockito-core:4.7.0") + testImplementation("com.tngtech.archunit:archunit-junit5:1.4.1") + implementation("org.ejml:ejml-all:0.41") + + api("com.google.guava:guava:24.1-jre") + api("commons-codec:commons-codec:1.6") + api("commons-io:commons-io:2.4") + api("org.apache.commons:commons-lang3:3.1") + api("org.apache.commons:commons-collections4:4.0") + api("org.xerial:sqlite-jdbc:3.7.2") + api("com.j256.ormlite:ormlite-core:4.48") + api("com.j256.ormlite:ormlite-jdbc:4.48") + api("com.google.protobuf:protobuf-java:4.31.1") + api("com.google.protobuf:protobuf-java-util:4.31.1") + api("org.slf4j:slf4j-api:2.0.9") + api("org.slf4j:slf4j-log4j12:1.7.25") + api("ch.qos.logback:logback-classic:1.4.14") + api("com.googlecode.java-diff-utils:diffutils:1.2.1") + api("com.google.re2j:re2j:1.1") + api("com.github.mobius-software-ltd:mqtt-parser:parser-1.0.3") + api("net.arnx:jsonic:1.3.0") + api("org.json:json:20180813") + api("com.fasterxml.jackson.dataformat:jackson-dataformat-cbor:2.10.0") + api("com.fasterxml.jackson.core:jackson-databind:2.10.0") + api("org.msgpack:jackson-dataformat-msgpack:0.8.18") + api("org.bouncycastle:bcpkix-jdk15on:1.64") + api("commons-net:commons-net:3.6") + api("org.nanohttpd:nanohttpd:2.3.1") + api("com.google.code.gson:gson:2.13.1") + api("org.apache.commons:commons-math3:3.0") + api("at.favre.lib:hkdf:1.1.0") + api("org.eclipse.jetty.http2:http2-hpack:11.0.11") + api("org.eclipse.jetty.http3:http3-qpack:11.0.11") + api("com.github.docker-java:docker-java:3.3.0") + api("com.github.docker-java:docker-java-transport-httpclient5:3.3.0") + api("org.apache.commons:commons-compress:1.28.0") + api("com.github.luben:zstd-jni:1.5.6-3") + api("org.brotli:dec:0.1.2") + api("dnsjava:dnsjava:3.6.4") + api(files("${rootProject.projectDir}/libs/agent15.jar")) + api("org.jetbrains.kotlin:kotlin-stdlib-jdk8") + api("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.8.1") + api("io.arrow-kt:arrow-core:2.1.2") +} + +eachInternalEntry("libraries.gradle") { _: String, lib: Any -> addInternalApiDependency(lib) } + +sourceSets { + main { + java.setSrcDirs(listOf("src/main/java/core") + collectInternalSrcDirs("sources.gradle")) + resources.setSrcDirs(listOf("src/main/resources") + collectInternalSrcDirs("resources.gradle")) + } + test { + java.setSrcDirs(listOf("src/test/java") + collectInternalSrcDirs("tests.gradle")) + kotlin.setSrcDirs(listOf("src/test/kotlin")) + resources.setSrcDirs(listOf("src/test/resources")) + } + named("jmh") { java.setSrcDirs(listOf("src/jmh/java")) } +} + +jmh { fork.set(2) } diff --git a/gradle/app-release.gradle b/gradle/app-release.gradle deleted file mode 100644 index 3ce7aea9..00000000 --- a/gradle/app-release.gradle +++ /dev/null @@ -1,341 +0,0 @@ -buildscript { - repositories { - mavenCentral() - } - dependencies { - classpath 'com.bmuschko:gradle-izpack-plugin:3.0' - } -} - -import com.bmuschko.gradle.izpack.CreateInstallerTask -import org.apache.tools.ant.taskdefs.condition.Os - -def guiResourcesDir = rootProject.file("ui/src/main/resources/gui") - -def shell(String command) { - ["sh", "-c", command].execute().waitForProcessOutput(System.out, System.err) -} - -def gitVersion = "git describe --tags --abbrev=0".execute().text.replace("\n", "") -new File("${rootProject.projectDir}/core/src/main/resources/version").text = gitVersion - -project.ext { - nameInstaller = "PacketProxy-${gitVersion}-Installer.jar" - nameMacInstallApp = "PacketProxy-${gitVersion}-Installer-Mac.app" - nameMacRelease = "PacketProxy-${gitVersion}-Installer-Mac.zip" - nameMacSignedReleaseJPackage = "PacketProxy-${gitVersion}.dmg" - nameMacSignedRelease = "PacketProxy-${gitVersion}-Installer-Mac-Signed.dmg" - nameWin32Release = "PacketProxy-${gitVersion}-Installer-Win32.jar" - nameWin64Release = "PacketProxy-${gitVersion}-Installer-Win64.jar" - nameLinuxReleaseDir = "PacketProxy-${gitVersion}-Linux" - nameLinuxRelease = "PacketProxy-${gitVersion}-Installer-Linux.jar" - // path - pathInstaller = "${buildDir}/distributions/${nameInstaller}" - pathWorkDir = "${buildDir}/distributions" - // Mac - pathMacWorkDir = "${buildDir}/distributions/mac" - pathMacTarget = "${pathMacWorkDir}/target" - pathMacInstaller = "${pathMacWorkDir}/${nameInstaller}" - pathMacInstallApp = "${pathMacWorkDir}/${nameMacInstallApp}" - pathMacRelease = "${pathMacWorkDir}/${nameMacRelease}" - pathMacSignedReleaseJPackage = "${pathMacWorkDir}/${nameMacSignedReleaseJPackage}" - pathMacSignedRelease = "${pathMacWorkDir}/${nameMacSignedRelease}" - // Win32 - pathWin32WorkDir = "${buildDir}/distributions/win32" - pathWin32Target = "${pathWin32WorkDir}/target" - pathWin32Installer = "${pathWin32WorkDir}/${nameInstaller}" - pathWin32Release = "${pathWin32WorkDir}/${nameWin32Release}" - // Win64 - pathWin64WorkDir = "${buildDir}/distributions/win64" - pathWin64Target = "${pathWin64WorkDir}/target" - pathWin64Installer = "${pathWin64WorkDir}/${nameInstaller}" - pathWin64Release = "${pathWin64WorkDir}/${nameWin64Release}" - // Linux - pathLinuxWorkDir = "${buildDir}/distributions/Linux" - pathLinuxTarget = "${pathLinuxWorkDir}/target" - pathLinuxInstaller = "${pathLinuxWorkDir}/${nameInstaller}" - pathLinuxReleaseDir = "${pathLinuxWorkDir}/${nameLinuxReleaseDir}" - pathLinuxRelease = "${pathLinuxWorkDir}/${nameLinuxRelease}" -} - -project.ext { - appleId = "test@example.com" - applePasswd = "xxxx-xxxx-xxxx-xxxx" - signedKey = "Developer ID Application: YYYYYYYY (ZZZZZZZZ)" - teamId = "ZZZZZZZZ" -} - -task prepareJPackage(dependsOn: "jar") { - doLast { - def workDir = "${project.ext.pathMacWorkDir}" - delete "${workDir}" - new File("${workDir}").mkdirs() - def jdkUrl = "https://corretto.aws/downloads/resources/17.0.15.6.1/amazon-corretto-17.0.15.6.1-macosx-x64.tar.gz" - def destFile = file("${workDir}/OpenJDK17.tar.gz") - if (!destFile.exists()) { - ant.get(src: jdkUrl, dest: destFile, verbose: true) - } - copy { - from tarTree(resources.gzip("${workDir}/OpenJDK17.tar.gz")) - into file("${workDir}/OpenJDK17") - } - // create icon - copy { - from "${guiResourcesDir}/icon.png" - into "${workDir}/icon.iconset/" - } - shell("mv ${workDir}/icon.iconset/icon.png ${workDir}/icon.iconset/icon_256x256.png") - shell("iconutil -c icns --output ${workDir}/icon.icns ${workDir}/icon.iconset/") - } - onlyIf { Os.isFamily(Os.FAMILY_MAC) } -} - -class CreateWinTarget extends DefaultTask { - @Input - String workDir = '' - @Input - String targetDir = '' - @Input - String jdkUrl = '' - - @TaskAction - void start() { - project.delete { - delete "${workDir}" - } - new File("${workDir}").mkdirs() - new File("${targetDir}").mkdirs() - project.copy { - from "${project.buildDir}/reports/licenses/index.html" - into "${targetDir}/licenses" - } - project.copy { - from "${guiResourcesDir}/icon.ico" - into "${targetDir}" - rename('icon.ico', 'PacketProxy.ico') - } - project.copy { - from "${project.buildDir}/libs/PacketProxy.jar" - into "${targetDir}" - } - def destFile = project.file("${workDir}/OpenJDK17.zip") - if (!destFile.exists()) { - ant.get(src: jdkUrl, dest: destFile, verbose: true) - } - project.copy { - from project.zipTree("${workDir}/OpenJDK17.zip") - into project.file("${workDir}/OpenJDK17") - } - project.copy { - from project.file("${workDir}/OpenJDK17/jdk17.0.15_6") - into project.file("${targetDir}/OpenJDK17") - } - } -} - -task createWin64Target(type: CreateWinTarget, dependsOn: [ - 'jar', - 'generateLicenseReport' -]) { - workDir = project.ext.pathWin64WorkDir - targetDir = project.ext.pathWin64Target - jdkUrl = 'https://corretto.aws/downloads/resources/17.0.15.6.1/amazon-corretto-17.0.15.6.1-windows-x64-jdk.zip' -} - -task createLinuxTarget(dependsOn: [ - 'jar', - 'generateLicenseReport' -]) { - def workDir = project.ext.pathLinuxWorkDir - def targetDir = project.ext.pathLinuxTarget - def jdkUrl = 'https://corretto.aws/downloads/resources/17.0.15.6.1/amazon-corretto-17.0.15.6.1-linux-x64.tar.gz' - def buildDirectory = project.buildDir - def projectDirectory = rootProject.projectDir - - doLast { - delete { - delete "${workDir}" - } - new File("${workDir}").mkdirs() - new File("${targetDir}").mkdirs() - copy { - from "${buildDirectory}/reports/licenses/index.html" - from "${projectDirectory}/LICENSES" - into "${targetDir}/share/packetproxy/licenses" - } - copy { - from "${guiResourcesDir}/icon.ico" - into "${targetDir}/share/packetproxy" - rename('icon.ico', 'PacketProxy.ico') - } - copy { - from "${buildDirectory}/libs/PacketProxy.jar" - into "${targetDir}/share/packetproxy" - } - def destFile = file("${workDir}/OpenJDK17.tar.gz") - if (!destFile.exists()) { - ant.get(src: jdkUrl, dest: destFile, verbose: true) - } - copy { - from tarTree(resources.gzip("${workDir}/OpenJDK17.tar.gz")) - into file("${workDir}/OpenJDK17") - } - copy { - from file("${workDir}/OpenJDK17/amazon-corretto-17.0.15.6.1-linux-x64") - into file("${targetDir}/share/packetproxy/OpenJDK17") - } - copy { - from "${projectDirectory}/installer/izpack/packetproxy" - into "${targetDir}/bin/" - } - } -} - -task preIzpack { - doLast { - copy { - from "${rootProject.projectDir}/installer/izpack/shortcutSpec.xml" - into "${project.ext.pathWorkDir}" - } - copy { - from "${guiResourcesDir}/installer_leftside_image.png" - into "${project.ext.pathWorkDir}" - } - copy { - from "${guiResourcesDir}/installer_icon.png" - into "${project.ext.pathWorkDir}" - } - } -} - -task izpackWin64(type: CreateInstallerTask, dependsOn: [ - 'createWin64Target', - 'preIzpack' -]) { - baseDir = file(project.ext.pathWin64Target) - installFile = file("${rootProject.projectDir}/installer/izpack/installer.xml") - outputFile = file(project.ext.pathWin64Installer) - compression = 'deflate' - compressionLevel = 9 - appProperties = ['app.group': 'PacketProxy', 'app.name': 'PacketProxy', 'app.title': 'PacketProxy', - 'app.version': gitVersion, 'app.subpath': "PacketProxy-${gitVersion}"] -} - -task izpackLinux(type: CreateInstallerTask, dependsOn: [ - 'createLinuxTarget', - 'preIzpack' -]) { - baseDir = file(project.ext.pathLinuxTarget) - installFile = file("${rootProject.projectDir}/installer/izpack/installer.xml") - outputFile = file(project.ext.pathLinuxInstaller) - compression = 'deflate' - compressionLevel = 9 - appProperties = ['app.group': 'PacketProxy', 'app.name': 'PacketProxy', 'app.title': 'PacketProxy', - 'app.version': gitVersion, 'app.subpath': "PacketProxy-${gitVersion}"] -} - -task createMacJPackage(type: Exec, dependsOn: "prepareJPackage") { - workingDir rootProject.projectDir - commandLine = [ - "/Library/Java/JavaVirtualMachines/amazon-corretto-17.jdk/Contents/Home/bin/jpackage", - "--verbose", - "-d", - "${project.ext.pathMacWorkDir}", - "-n", - "PacketProxy", - "-i", - "${buildDir}/libs/", - "--app-version", - gitVersion, - "--icon", - "${project.ext.pathMacWorkDir}/icon.icns", - "--main-jar", - "PacketProxy.jar", - "--mac-sign", - "--mac-signing-key-user-name", - "${project.ext.signedKey}" - ] - onlyIf { Os.isFamily(Os.FAMILY_MAC) } -} - -task resignMacJPackage(dependsOn: "createMacJPackage") { - doLast { - shell("hdiutil convert ${pathMacSignedReleaseJPackage} -format UDRW -o ${project.ext.pathMacWorkDir}/tmp.dmg") - shell("hdiutil mount ${project.ext.pathMacWorkDir}/tmp.dmg") - shell("rm -rf /tmp/packetproxy && mkdir /tmp/packetproxy && cd /tmp/packetproxy && jar xvf /Volumes/PacketProxy/PacketProxy.app/Contents/app/PacketProxy.jar") - shell("cd /tmp/packetproxy; for i in \$(find . -type f); do if file \$i | grep Mach-O > /dev/null; then codesign -fv --timestamp --options=runtime --deep -s \"${project.ext.signedKey}\" \$i; fi; done") - shell("cd /tmp/packetproxy; jar cvfm /Volumes/PacketProxy/PacketProxy.app/Contents/app/PacketProxy.jar META-INF/MANIFEST.MF *") - shell("cd /Volumes/PacketProxy/PacketProxy.app/Contents/; for i in \$(find . -type f); do if file \$i | grep Mach-O > /dev/null; then codesign -fv --timestamp --options=runtime --deep -s \"${project.ext.signedKey}\" \$i; fi; done") - shell("cd /Volumes/PacketProxy; codesign -fv --timestamp --options=runtime --deep -s \"${project.ext.signedKey}\" --entitlements ${rootProject.projectDir}/assets/resign/entitlements.xml PacketProxy.app") - shell("hdiutil detach /Volumes/PacketProxy") - shell("rm ${pathMacSignedReleaseJPackage}; hdiutil convert ${project.ext.pathMacWorkDir}/tmp.dmg -format UDZO -o ${pathMacSignedReleaseJPackage}") - } - onlyIf { Os.isFamily(Os.FAMILY_MAC) } -} - -task createMacInstaller(type: Exec, dependsOn: "resignMacJPackage") { - workingDir rootProject.projectDir - commandLine = [ - "mv", - project.ext.pathMacSignedReleaseJPackage, - project.ext.pathMacSignedRelease - ] - onlyIf { Os.isFamily(Os.FAMILY_MAC) } -} - -task notaryMacInstaller(type: Exec) { - workingDir rootProject.projectDir - commandLine = [ - "xcrun", - "notarytool", - "submit", - "${project.ext.pathMacSignedRelease}", - "--apple-id", - "${project.ext.appleId}", - "--password", - "${project.ext.applePasswd}", - "--team-id", - "${project.ext.teamId}", - "--wait" - ] - onlyIf { Os.isFamily(Os.FAMILY_MAC) } -} - -task createWin64Release(type: Copy, dependsOn: 'izpackWin64') { - from "${project.ext.pathWin64Installer}" - into "${project.ext.pathWin64WorkDir}" - rename("${project.ext.nameInstaller}", "${project.ext.nameWin64Release}") -} - -task createLinuxInstaller(type: Copy, dependsOn: 'izpackLinux') { - from "${project.ext.pathLinuxInstaller}" - into "${project.ext.pathLinuxWorkDir}" - rename("${project.ext.nameInstaller}", "${project.ext.nameLinuxRelease}") -} - -task createMacRelease(dependsOn: 'createMacInstaller') { - /* do nothing */ -} - -task createWinRelease(dependsOn: 'createWin64Release') { - /* do nothing */ -} - -task createLinuxRelease(dependsOn: 'createLinuxInstaller') { - doLast { - file(project.ext.pathLinuxReleaseDir).mkdirs() - copy { - from "${rootProject.projectDir}/installer/izpack/installer.sh" - from "${project.ext.pathLinuxInstaller}" - into "${project.ext.pathLinuxReleaseDir}" - } - shell("cd ${project.ext.pathLinuxWorkDir}; tar czvf ${project.ext.nameLinuxRelease} ${project.ext.nameLinuxReleaseDir}") - } -} - -task release(dependsOn: [ - 'createMacRelease', - 'createWinRelease', - 'createLinuxRelease' -]) { -} diff --git a/gradle/module-common.gradle b/gradle/module-common.gradle deleted file mode 100644 index ed18f52d..00000000 --- a/gradle/module-common.gradle +++ /dev/null @@ -1,45 +0,0 @@ -ext { - eachInternalEntry = { String filename, Closure action -> - ['dena/', 'denaN/', 'denaL/'].each { def dir -> - def f = rootProject.file(dir + filename) - if (f.exists()) { - Eval.me(f.text).each { action(dir, it) } - } - } - } - collectInternalSrcDirs = { String filename -> - def result = [] - eachInternalEntry(filename) { dir, src -> - if (rootProject.file(dir + src).exists()) { - result << rootProject.file(dir + src) - } - } - return result - } -} - -repositories { - mavenCentral() - maven { url = 'https://jitpack.io' } -} - -java { - toolchain { - languageVersion = JavaLanguageVersion.of(17) - } -} - -tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).configureEach { - compilerOptions { - jvmTarget.set(org.jetbrains.kotlin.gradle.dsl.JvmTarget.JVM_17) - } -} - -tasks.withType(JavaCompile).configureEach { - options.encoding = 'UTF-8' -} - -tasks.withType(Test).configureEach { - systemProperty 'file.encoding', 'UTF-8' - useJUnitPlatform() -} diff --git a/gradle/module-common.gradle.kts b/gradle/module-common.gradle.kts new file mode 100644 index 00000000..f0812e5d --- /dev/null +++ b/gradle/module-common.gradle.kts @@ -0,0 +1,27 @@ +import org.gradle.api.plugins.JavaPlugin +import org.gradle.api.plugins.JavaPluginExtension +import org.gradle.jvm.toolchain.JavaLanguageVersion +import org.jetbrains.kotlin.gradle.dsl.JvmTarget +import org.jetbrains.kotlin.gradle.tasks.KotlinCompile + +repositories { + mavenCentral() + maven(url = "https://jitpack.io") +} + +plugins.withType().configureEach { + extensions.configure { + toolchain { languageVersion.set(JavaLanguageVersion.of(17)) } + } +} + +tasks.withType().configureEach { + compilerOptions { jvmTarget.set(JvmTarget.JVM_17) } +} + +tasks.withType().configureEach { options.encoding = "UTF-8" } + +tasks.withType().configureEach { + systemProperty("file.encoding", "UTF-8") + useJUnitPlatform() +} diff --git a/gulp/build.gradle b/gulp/build.gradle deleted file mode 100644 index 30cd3e11..00000000 --- a/gulp/build.gradle +++ /dev/null @@ -1,26 +0,0 @@ -plugins { - id 'java-library' - id 'org.jetbrains.kotlin.jvm' -} - -apply from: rootProject.file('gradle/module-common.gradle') - -dependencies { - api project(':core') - implementation 'org.jline:jline:3.25.1' - implementation 'org.jline:jline-terminal-jansi:3.25.1' - - testImplementation 'org.junit.jupiter:junit-jupiter:6.0.0' - testRuntimeOnly 'org.junit.platform:junit-platform-launcher' - testRuntimeOnly 'org.jetbrains.kotlin:kotlin-reflect:2.2.21' - testImplementation 'org.assertj:assertj-core:3.23.1' - testImplementation 'com.tngtech.archunit:archunit-junit5:1.4.1' -} - -sourceSets { - test { - kotlin { - srcDirs = ['src/test/kotlin'] - } - } -} diff --git a/gulp/build.gradle.kts b/gulp/build.gradle.kts new file mode 100644 index 00000000..a3d3407d --- /dev/null +++ b/gulp/build.gradle.kts @@ -0,0 +1,20 @@ +plugins { + id("java-library") + id("org.jetbrains.kotlin.jvm") +} + +apply(from = rootProject.file("gradle/module-common.gradle.kts")) + +dependencies { + api(project(":core")) + implementation("org.jline:jline:3.25.1") + implementation("org.jline:jline-terminal-jansi:3.25.1") + + testImplementation("org.junit.jupiter:junit-jupiter:6.0.0") + testRuntimeOnly("org.junit.platform:junit-platform-launcher") + testRuntimeOnly("org.jetbrains.kotlin:kotlin-reflect:2.2.21") + testImplementation("org.assertj:assertj-core:3.23.1") + testImplementation("com.tngtech.archunit:archunit-junit5:1.4.1") +} + +sourceSets { test { kotlin.setSrcDirs(listOf("src/test/kotlin")) } } diff --git a/settings.gradle b/settings.gradle deleted file mode 100644 index d429f561..00000000 --- a/settings.gradle +++ /dev/null @@ -1,14 +0,0 @@ -pluginManagement { - plugins { - id 'org.jetbrains.kotlin.jvm' version '2.2.21' - id 'me.champeau.jmh' version '0.7.3' - } -} -plugins { - id 'org.gradle.toolchains.foojay-resolver-convention' version '0.8.0' - id 'org.jetbrains.kotlin.jvm' version '2.2.21' apply false -} - -rootProject.name = 'PacketProxy' - -include 'core', 'ui', 'gulp', 'app' diff --git a/settings.gradle.kts b/settings.gradle.kts new file mode 100644 index 00000000..a3b799f1 --- /dev/null +++ b/settings.gradle.kts @@ -0,0 +1,15 @@ +pluginManagement { + plugins { + id("org.jetbrains.kotlin.jvm") version "2.2.21" + id("me.champeau.jmh") version "0.7.3" + } +} + +plugins { + id("org.gradle.toolchains.foojay-resolver-convention") version "0.8.0" + id("org.jetbrains.kotlin.jvm") version "2.2.21" apply false +} + +rootProject.name = "PacketProxy" + +include("core", "ui", "gulp", "app") diff --git a/ui/build.gradle b/ui/build.gradle deleted file mode 100644 index 2ba96513..00000000 --- a/ui/build.gradle +++ /dev/null @@ -1,36 +0,0 @@ -plugins { - id 'java-library' - id 'org.jetbrains.kotlin.jvm' -} - -apply from: rootProject.file('gradle/module-common.gradle') - -dependencies { - api project(':core') - - implementation 'com.formdev:flatlaf:3.4.1' - implementation 'com.formdev:flatlaf-intellij-themes:3.4.1' - implementation 'org.jfree:jfreechart:1.5.3' - implementation 'org.ejml:ejml-all:0.41' - - testImplementation 'org.junit.jupiter:junit-jupiter:6.0.0' - testRuntimeOnly 'org.junit.platform:junit-platform-launcher' - testImplementation 'org.assertj:assertj-core:3.23.1' - testImplementation 'com.tngtech.archunit:archunit-junit5:1.4.1' -} - -sourceSets { - main { - java { - srcDirs = ['src/main/java/core'] - } - resources { - srcDirs = ['src/main/resources'] - } - } - test { - kotlin { - srcDirs = ['src/test/kotlin'] - } - } -} diff --git a/ui/build.gradle.kts b/ui/build.gradle.kts new file mode 100644 index 00000000..33a74c98 --- /dev/null +++ b/ui/build.gradle.kts @@ -0,0 +1,28 @@ +plugins { + id("java-library") + id("org.jetbrains.kotlin.jvm") +} + +apply(from = rootProject.file("gradle/module-common.gradle.kts")) + +dependencies { + api(project(":core")) + + implementation("com.formdev:flatlaf:3.4.1") + implementation("com.formdev:flatlaf-intellij-themes:3.4.1") + implementation("org.jfree:jfreechart:1.5.3") + implementation("org.ejml:ejml-all:0.41") + + testImplementation("org.junit.jupiter:junit-jupiter:6.0.0") + testRuntimeOnly("org.junit.platform:junit-platform-launcher") + testImplementation("org.assertj:assertj-core:3.23.1") + testImplementation("com.tngtech.archunit:archunit-junit5:1.4.1") +} + +sourceSets { + main { + java.setSrcDirs(listOf("src/main/java/core")) + resources.setSrcDirs(listOf("src/main/resources")) + } + test { kotlin.setSrcDirs(listOf("src/test/kotlin")) } +}