diff --git a/.gitignore b/.gitignore index de0abcd0..51ffcfb7 100644 --- a/.gitignore +++ b/.gitignore @@ -5,8 +5,8 @@ /.settings/ # Gradle -/build/ -/.gradle +**/build/ +**/.gradle/ /src/main/resources/version # IntelliJ IDEA 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/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 deleted file mode 100644 index 87f7b2cc..00000000 --- a/build.gradle +++ /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.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.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/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/core/src/main/java/core/packetproxy/DNSSpoofingIPGetter.java b/core/src/main/java/core/packetproxy/DNSSpoofingIPGetter.java new file mode 100644 index 00000000..85070edb --- /dev/null +++ b/core/src/main/java/core/packetproxy/DNSSpoofingIPGetter.java @@ -0,0 +1,43 @@ +/* + * 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 packetproxy.platform.SpoofingIPSource; + +public class DNSSpoofingIPGetter { + + private final SpoofingIPSource source; + + public DNSSpoofingIPGetter(SpoofingIPSource source) { + this.source = source; + } + + public boolean isAuto() { + return source.isAuto(); + } + + public String get() { + return source.get(); + } + + public String get6() { + return source.get6(); + } + + public String getInt() { + return source.getInt(); + } +} diff --git a/src/main/java/core/packetproxy/Duplex.java b/core/src/main/java/core/packetproxy/Duplex.java similarity index 79% rename from src/main/java/core/packetproxy/Duplex.java rename to core/src/main/java/core/packetproxy/Duplex.java index 9d9665f1..98f7d12f 100644 --- a/src/main/java/core/packetproxy/Duplex.java +++ b/core/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/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 95% rename from src/main/java/core/packetproxy/Simplex.java rename to core/src/main/java/core/packetproxy/Simplex.java index 07de3a38..1f9d7d04 100644 --- a/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/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 89% rename from src/main/java/core/packetproxy/common/ConfigHttpServer.java rename to core/src/main/java/core/packetproxy/common/ConfigHttpServer.java index ca125627..8de7bf7d 100644 --- a/src/main/java/core/packetproxy/common/ConfigHttpServer.java +++ b/core/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/common/ConfigIO.java b/core/src/main/java/core/packetproxy/common/ConfigIO.java similarity index 99% rename from src/main/java/core/packetproxy/common/ConfigIO.java rename to core/src/main/java/core/packetproxy/common/ConfigIO.java index bb5c10e4..0e3170f2 100644 --- a/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/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/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/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 86% rename from src/main/java/core/packetproxy/controller/ResendController.java rename to core/src/main/java/core/packetproxy/controller/ResendController.java index f3d362ca..e7274f94 100644 --- a/src/main/java/core/packetproxy/controller/ResendController.java +++ b/core/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,17 @@ 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 +77,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 +99,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 +122,24 @@ 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 +164,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 +191,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/core/src/main/java/core/packetproxy/controller/ResendProgressHandler.java b/core/src/main/java/core/packetproxy/controller/ResendProgressHandler.java new file mode 100644 index 00000000..54c87a7a --- /dev/null +++ b/core/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/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 61% 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 index fdbfef21..55a9f5a7 100644 --- a/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/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 95% rename from src/main/java/core/packetproxy/model/ClientCertificates.java rename to core/src/main/java/core/packetproxy/model/ClientCertificates.java index 948ce6e3..c93c5dd2 100644 --- a/src/main/java/core/packetproxy/model/ClientCertificates.java +++ b/core/src/main/java/core/packetproxy/model/ClientCertificates.java @@ -24,9 +24,9 @@ import java.beans.PropertyChangeListener; import java.beans.PropertyChangeSupport; import java.util.List; -import javax.swing.JOptionPane; import packetproxy.common.ClientKeyManager; import packetproxy.model.Database.DatabaseMessage; +import packetproxy.platform.UserPrompts; /** DAO for ClientCertificate */ public class ClientCertificates implements PropertyChangeListener { @@ -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/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 96% rename from src/main/java/core/packetproxy/model/DiffBase.java rename to core/src/main/java/core/packetproxy/model/DiffBase.java index aaf0da1d..7f231a7d 100644 --- a/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/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 86% rename from src/main/java/core/packetproxy/model/Extension.java rename to core/src/main/java/core/packetproxy/model/Extension.java index 24aaeb06..ce6dfd3a 100644 --- a/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/src/main/java/core/packetproxy/model/Extensions.java b/core/src/main/java/core/packetproxy/model/Extensions.java similarity index 92% rename from src/main/java/core/packetproxy/model/Extensions.java rename to core/src/main/java/core/packetproxy/model/Extensions.java index ef221d45..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 javax.swing.JOptionPane; -import packetproxy.extensions.randomness.RandomnessExtension; 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; @@ -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/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 92% rename from src/main/java/core/packetproxy/model/Filters.java rename to core/src/main/java/core/packetproxy/model/Filters.java index 04cf19a3..cff8f48b 100644 --- a/src/main/java/core/packetproxy/model/Filters.java +++ b/core/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/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 96% rename from src/main/java/core/packetproxy/model/InterceptOptions.java rename to core/src/main/java/core/packetproxy/model/InterceptOptions.java index 283e3395..87c2d227 100644 --- a/src/main/java/core/packetproxy/model/InterceptOptions.java +++ b/core/src/main/java/core/packetproxy/model/InterceptOptions.java @@ -25,9 +25,9 @@ import java.beans.PropertyChangeSupport; import java.util.ArrayList; import java.util.List; -import javax.swing.JOptionPane; import packetproxy.model.Database.DatabaseMessage; import packetproxy.model.InterceptOption.Direction; +import packetproxy.platform.UserPrompts; 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/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 94% rename from src/main/java/core/packetproxy/model/Modifications.java rename to core/src/main/java/core/packetproxy/model/Modifications.java index 7faa7a26..9f5f1d50 100644 --- a/src/main/java/core/packetproxy/model/Modifications.java +++ b/core/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/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 95% rename from src/main/java/core/packetproxy/model/OpenVPNForwardPorts.java rename to core/src/main/java/core/packetproxy/model/OpenVPNForwardPorts.java index b20ecd23..9697f183 100644 --- a/src/main/java/core/packetproxy/model/OpenVPNForwardPorts.java +++ b/core/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/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 95% rename from src/main/java/core/packetproxy/model/Packets.java rename to core/src/main/java/core/packetproxy/model/Packets.java index f00e96da..1cdc83bb 100644 --- a/src/main/java/core/packetproxy/model/Packets.java +++ b/core/src/main/java/core/packetproxy/model/Packets.java @@ -27,9 +27,9 @@ import java.util.List; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; -import javax.swing.JOptionPane; import packetproxy.common.Logger; import packetproxy.model.Database.DatabaseMessage; +import packetproxy.platform.UserPrompts; 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/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 92% rename from src/main/java/core/packetproxy/model/ResenderPackets.java rename to core/src/main/java/core/packetproxy/model/ResenderPackets.java index a8269019..3be892e9 100644 --- a/src/main/java/core/packetproxy/model/ResenderPackets.java +++ b/core/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/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 94% rename from src/main/java/core/packetproxy/model/SSLPassThroughs.java rename to core/src/main/java/core/packetproxy/model/SSLPassThroughs.java index 80073b80..d1798782 100644 --- a/src/main/java/core/packetproxy/model/SSLPassThroughs.java +++ b/core/src/main/java/core/packetproxy/model/SSLPassThroughs.java @@ -24,9 +24,9 @@ import java.beans.PropertyChangeListener; import java.beans.PropertyChangeSupport; import java.util.List; -import javax.swing.JOptionPane; import packetproxy.ListenPortManager; import packetproxy.model.Database.DatabaseMessage; +import packetproxy.platform.UserPrompts; 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/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/core/src/main/java/core/packetproxy/platform/ConfigHttpUiActions.java b/core/src/main/java/core/packetproxy/platform/ConfigHttpUiActions.java new file mode 100644 index 00000000..a00d1d8f --- /dev/null +++ b/core/src/main/java/core/packetproxy/platform/ConfigHttpUiActions.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; + +/** リモート設定 HTTP API から必要な GUI 操作。 */ +public interface ConfigHttpUiActions { + + void showOptionsTab(); + + /** + * @return 設定上書きを許可する場合 true + */ + boolean confirmOverwriteConfig(); +} diff --git a/core/src/main/java/core/packetproxy/platform/ConsoleUserPrompt.java b/core/src/main/java/core/packetproxy/platform/ConsoleUserPrompt.java new file mode 100644 index 00000000..d4faf02c --- /dev/null +++ b/core/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/core/src/main/java/core/packetproxy/platform/LogSink.java b/core/src/main/java/core/packetproxy/platform/LogSink.java new file mode 100644 index 00000000..9e4153f7 --- /dev/null +++ b/core/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/core/src/main/java/core/packetproxy/platform/LogSinks.java b/core/src/main/java/core/packetproxy/platform/LogSinks.java new file mode 100644 index 00000000..9938b114 --- /dev/null +++ b/core/src/main/java/core/packetproxy/platform/LogSinks.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.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/core/src/main/java/core/packetproxy/platform/MainWindowAccess.java b/core/src/main/java/core/packetproxy/platform/MainWindowAccess.java new file mode 100644 index 00000000..af5fba99 --- /dev/null +++ b/core/src/main/java/core/packetproxy/platform/MainWindowAccess.java @@ -0,0 +1,26 @@ +/* + * 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; + +/** メインウィンドウへの参照(vulchecker 等が利用)。 */ +public interface MainWindowAccess { + + WindowBounds getBounds(); + + void setAlwaysOnTop(boolean onTop); + + void setVisible(boolean visible); +} diff --git a/core/src/main/java/core/packetproxy/platform/MainWindows.java b/core/src/main/java/core/packetproxy/platform/MainWindows.java new file mode 100644 index 00000000..4b686b47 --- /dev/null +++ b/core/src/main/java/core/packetproxy/platform/MainWindows.java @@ -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.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/core/src/main/java/core/packetproxy/platform/PacketPredicate.java b/core/src/main/java/core/packetproxy/platform/PacketPredicate.java new file mode 100644 index 00000000..5afc4866 --- /dev/null +++ b/core/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/core/src/main/java/core/packetproxy/platform/SpoofingIPSource.java b/core/src/main/java/core/packetproxy/platform/SpoofingIPSource.java new file mode 100644 index 00000000..084586c7 --- /dev/null +++ b/core/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/core/src/main/java/core/packetproxy/platform/UserPrompt.java b/core/src/main/java/core/packetproxy/platform/UserPrompt.java new file mode 100644 index 00000000..370a4d66 --- /dev/null +++ b/core/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/core/src/main/java/core/packetproxy/platform/UserPrompts.java b/core/src/main/java/core/packetproxy/platform/UserPrompts.java new file mode 100644 index 00000000..ff846064 --- /dev/null +++ b/core/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/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/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/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/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/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/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/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/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/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 97% rename from src/main/kotlin/core/packetproxy/AppInitializer.kt rename to core/src/main/kotlin/core/packetproxy/AppInitializer.kt index d08aceed..6e57d11d 100644 --- a/src/main/kotlin/core/packetproxy/AppInitializer.kt +++ b/core/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/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 94% rename from src/main/kotlin/core/packetproxy/util/Logging.kt rename to core/src/main/kotlin/core/packetproxy/util/Logging.kt index 9b9ce0b2..afa13a2e 100644 --- a/src/main/kotlin/core/packetproxy/util/Logging.kt +++ b/core/src/main/kotlin/core/packetproxy/util/Logging.kt @@ -30,14 +30,11 @@ 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.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 +98,9 @@ object Logging { // WARN未満は出力されないためwarnで出力する logger.warn(fs) - if (isGulp) return - guiLog.append(fs) + if (!isGulp) { + LogSinks.append(fs) + } } @JvmStatic @@ -110,9 +108,10 @@ object Logging { fun err(format: Any, vararg args: Any?) { val fs = formatString(format, *args) - logger.error(Ansi.ansi().fg(RED).a(fs).reset().toString()) - if (isGulp) return - guiLog.appendErr(fs) + logger.error(fs) + if (!isGulp) { + LogSinks.appendErr(fs) + } } /** 別のログが挟まらないように一塊にした上で1度に出力する */ 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..165030aa --- /dev/null +++ b/core/src/test/java/packetproxy/CoreModuleArchitectureTest.java @@ -0,0 +1,42 @@ +/* + * 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 com.tngtech.archunit.core.importer.ImportOption; +import org.junit.jupiter.api.Test; + +class CoreModuleArchitectureTest { + + 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/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/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.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/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 deleted file mode 100644 index 7134954f..00000000 --- a/settings.gradle +++ /dev/null @@ -1,9 +0,0 @@ -pluginManagement { - plugins { - id 'org.jetbrains.kotlin.jvm' version '2.2.0' - } -} -plugins { - id 'org.gradle.toolchains.foojay-resolver-convention' version '0.8.0' -} -rootProject.name = "PacketProxy" 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.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")) } +} diff --git a/src/main/java/core/packetproxy/common/FontManager.java b/ui/src/main/java/core/packetproxy/common/FontManager.java similarity index 100% rename from src/main/java/core/packetproxy/common/FontManager.java rename to ui/src/main/java/core/packetproxy/common/FontManager.java diff --git a/src/main/java/core/packetproxy/common/JsonSyntaxHighlighter.java b/ui/src/main/java/core/packetproxy/common/JsonSyntaxHighlighter.java similarity index 100% rename from src/main/java/core/packetproxy/common/JsonSyntaxHighlighter.java rename to ui/src/main/java/core/packetproxy/common/JsonSyntaxHighlighter.java 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/common/FilterTextParser.java b/ui/src/main/java/core/packetproxy/gui/FilterTextParser.java similarity index 99% rename from src/main/java/core/packetproxy/common/FilterTextParser.java rename to ui/src/main/java/core/packetproxy/gui/FilterTextParser.java index 132d3901..08b52ff0 100644 --- a/src/main/java/core/packetproxy/common/FilterTextParser.java +++ b/ui/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/ui/src/main/java/core/packetproxy/gui/GUIBulkSender.java similarity index 98% rename from src/main/java/core/packetproxy/gui/GUIBulkSender.java rename to ui/src/main/java/core/packetproxy/gui/GUIBulkSender.java index 928595df..ebc3d623 100644 --- a/src/main/java/core/packetproxy/gui/GUIBulkSender.java +++ b/ui/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/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 99% rename from src/main/java/core/packetproxy/gui/GUIBulkSenderTable.java rename to ui/src/main/java/core/packetproxy/gui/GUIBulkSenderTable.java index 9bf3c295..1ba72f89 100644 --- a/src/main/java/core/packetproxy/gui/GUIBulkSenderTable.java +++ b/ui/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/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 95% rename from src/main/java/core/packetproxy/gui/GUIExtensions.java rename to ui/src/main/java/core/packetproxy/gui/GUIExtensions.java index 41991c9b..6cd973c6 100644 --- a/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/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 99% rename from src/main/java/core/packetproxy/gui/GUIHistory.java rename to ui/src/main/java/core/packetproxy/gui/GUIHistory.java index a1d13131..e7e8978a 100644 --- a/src/main/java/core/packetproxy/gui/GUIHistory.java +++ b/ui/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/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/ui/src/main/java/core/packetproxy/gui/GUILogSink.java b/ui/src/main/java/core/packetproxy/gui/GUILogSink.java new file mode 100644 index 00000000..aca92415 --- /dev/null +++ b/ui/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/ui/src/main/java/core/packetproxy/gui/GUIMain.java similarity index 96% rename from src/main/java/core/packetproxy/gui/GUIMain.java rename to ui/src/main/java/core/packetproxy/gui/GUIMain.java index f91cac5e..3f0b65e5 100644 --- a/src/main/java/core/packetproxy/gui/GUIMain.java +++ b/ui/src/main/java/core/packetproxy/gui/GUIMain.java @@ -32,7 +32,11 @@ import javax.swing.text.Keymap; import packetproxy.common.FontManager; import packetproxy.common.I18nString; +import packetproxy.controller.ResendController; import packetproxy.model.InterceptModel; +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,11 @@ private String getPaneString(Panes num) { 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))); setIcon(); gui_history = initProjectAndHistory(); setLookandFeel(); @@ -117,6 +126,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/ui/src/main/java/core/packetproxy/gui/GUIMainWindowAccess.java b/ui/src/main/java/core/packetproxy/gui/GUIMainWindowAccess.java new file mode 100644 index 00000000..842946f2 --- /dev/null +++ b/ui/src/main/java/core/packetproxy/gui/GUIMainWindowAccess.java @@ -0,0 +1,45 @@ +/* + * 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.Rectangle; +import packetproxy.platform.MainWindowAccess; +import packetproxy.platform.WindowBounds; + +public class GUIMainWindowAccess implements MainWindowAccess { + + private final GUIMain main; + + public GUIMainWindowAccess(GUIMain main) { + this.main = main; + } + + @Override + public WindowBounds getBounds() { + Rectangle rect = main.getBounds(); + return new WindowBounds(rect.x, rect.y, rect.width, rect.height); + } + + @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/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 99% rename from src/main/java/core/packetproxy/gui/GUIOptionComponentBase.java rename to ui/src/main/java/core/packetproxy/gui/GUIOptionComponentBase.java index a75c18a9..f3036c33 100644 --- a/src/main/java/core/packetproxy/gui/GUIOptionComponentBase.java +++ b/ui/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/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 99% rename from src/main/java/core/packetproxy/gui/GUIOptionHubServer.java rename to ui/src/main/java/core/packetproxy/gui/GUIOptionHubServer.java index eee56367..6e19510f 100644 --- a/src/main/java/core/packetproxy/gui/GUIOptionHubServer.java +++ b/ui/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/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 97% rename from src/main/java/core/packetproxy/gui/GUIOptionPrivateDNS.java rename to ui/src/main/java/core/packetproxy/gui/GUIOptionPrivateDNS.java index 7bd21618..ad39c15f 100644 --- a/src/main/java/core/packetproxy/gui/GUIOptionPrivateDNS.java +++ b/ui/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/DNSSpoofingIPGetter.java b/ui/src/main/java/core/packetproxy/gui/GUIOptionPrivateDNSSpoofingSource.java similarity index 77% rename from src/main/java/core/packetproxy/DNSSpoofingIPGetter.java rename to ui/src/main/java/core/packetproxy/gui/GUIOptionPrivateDNSSpoofingSource.java index 2e69a30f..b3840884 100644 --- a/src/main/java/core/packetproxy/DNSSpoofingIPGetter.java +++ b/ui/src/main/java/core/packetproxy/gui/GUIOptionPrivateDNSSpoofingSource.java @@ -13,30 +13,34 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package packetproxy; +package packetproxy.gui; -import packetproxy.gui.GUIOptionPrivateDNS; +import packetproxy.platform.SpoofingIPSource; -public class DNSSpoofingIPGetter { +public class GUIOptionPrivateDNSSpoofingSource implements SpoofingIPSource { private final GUIOptionPrivateDNS gui; - public DNSSpoofingIPGetter(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/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 99% rename from src/main/java/core/packetproxy/gui/GUIRegexParamsTableDialog.java rename to ui/src/main/java/core/packetproxy/gui/GUIRegexParamsTableDialog.java index ee45d6e0..0673bfd7 100644 --- a/src/main/java/core/packetproxy/gui/GUIRegexParamsTableDialog.java +++ b/ui/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/ui/src/main/java/core/packetproxy/gui/GUIResender.java similarity index 99% rename from src/main/java/core/packetproxy/gui/GUIResender.java rename to ui/src/main/java/core/packetproxy/gui/GUIResender.java index c43aa7cb..34915cc2 100644 --- a/src/main/java/core/packetproxy/gui/GUIResender.java +++ b/ui/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/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 99% rename from src/main/java/core/packetproxy/gui/GUIVulCheckRecvTable.java rename to ui/src/main/java/core/packetproxy/gui/GUIVulCheckRecvTable.java index 64430951..560cb60f 100644 --- a/src/main/java/core/packetproxy/gui/GUIVulCheckRecvTable.java +++ b/ui/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/ui/src/main/java/core/packetproxy/gui/GUIVulCheckSendTable.java similarity index 99% rename from src/main/java/core/packetproxy/gui/GUIVulCheckSendTable.java rename to ui/src/main/java/core/packetproxy/gui/GUIVulCheckSendTable.java index 595855ab..5b9ee779 100644 --- a/src/main/java/core/packetproxy/gui/GUIVulCheckSendTable.java +++ b/ui/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/ui/src/main/java/core/packetproxy/gui/GUIVulCheckTab.java similarity index 98% rename from src/main/java/core/packetproxy/gui/GUIVulCheckTab.java rename to ui/src/main/java/core/packetproxy/gui/GUIVulCheckTab.java index d80a51df..04c59fec 100644 --- a/src/main/java/core/packetproxy/gui/GUIVulCheckTab.java +++ b/ui/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/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/model/OptionTableModel.java b/ui/src/main/java/core/packetproxy/gui/OptionTableModel.java similarity index 97% rename from src/main/java/core/packetproxy/model/OptionTableModel.java rename to ui/src/main/java/core/packetproxy/gui/OptionTableModel.java index 8dc665cb..53fb5112 100644 --- a/src/main/java/core/packetproxy/model/OptionTableModel.java +++ b/ui/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/PPContextMenuManager.java b/ui/src/main/java/core/packetproxy/gui/PPContextMenuManager.java similarity index 93% rename from src/main/java/core/packetproxy/PPContextMenuManager.java rename to ui/src/main/java/core/packetproxy/gui/PPContextMenuManager.java index 2b64c28e..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; @@ -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/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/ui/src/main/java/core/packetproxy/gui/SwingConfigHttpUiActions.java b/ui/src/main/java/core/packetproxy/gui/SwingConfigHttpUiActions.java new file mode 100644 index 00000000..b75bcd35 --- /dev/null +++ b/ui/src/main/java/core/packetproxy/gui/SwingConfigHttpUiActions.java @@ -0,0 +1,59 @@ +/* + * 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/ui/src/main/java/core/packetproxy/gui/SwingUserPrompt.java b/ui/src/main/java/core/packetproxy/gui/SwingUserPrompt.java new file mode 100644 index 00000000..fafe3376 --- /dev/null +++ b/ui/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/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/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/src/main/java/core/packetproxy/extensions/randomness/RandomnessExtension.java b/ui/src/main/java/core/packetproxy/gui/extensions/randomness/RandomnessExtension.java similarity index 97% rename from src/main/java/core/packetproxy/extensions/randomness/RandomnessExtension.java rename to ui/src/main/java/core/packetproxy/gui/extensions/randomness/RandomnessExtension.java index 2864af7a..e0a6674a 100644 --- a/src/main/java/core/packetproxy/extensions/randomness/RandomnessExtension.java +++ b/ui/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; @@ -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; @@ -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) { @@ -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/src/main/java/core/packetproxy/ppcontextmenu/PPContextMenu.java b/ui/src/main/java/core/packetproxy/gui/ppcontextmenu/PPContextMenu.java similarity index 97% rename from src/main/java/core/packetproxy/ppcontextmenu/PPContextMenu.java rename to ui/src/main/java/core/packetproxy/gui/ppcontextmenu/PPContextMenu.java index 91669671..d51450d3 100644 --- a/src/main/java/core/packetproxy/ppcontextmenu/PPContextMenu.java +++ b/ui/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/ui/src/main/java/core/packetproxy/gui/ppcontextmenu/SampleItem.java similarity index 97% rename from src/main/java/core/packetproxy/ppcontextmenu/SampleItem.java rename to ui/src/main/java/core/packetproxy/gui/ppcontextmenu/SampleItem.java index 2ab25f8a..5e4631e9 100644 --- a/src/main/java/core/packetproxy/ppcontextmenu/SampleItem.java +++ b/ui/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/util/SearchBox.java b/ui/src/main/java/core/packetproxy/util/SearchBox.java similarity index 100% rename from src/main/java/core/packetproxy/util/SearchBox.java rename to ui/src/main/java/core/packetproxy/util/SearchBox.java diff --git a/src/main/java/core/packetproxy/vulchecker/JWTVulChecker.java b/ui/src/main/java/core/packetproxy/vulchecker/JWTVulChecker.java similarity index 100% rename from src/main/java/core/packetproxy/vulchecker/JWTVulChecker.java rename to ui/src/main/java/core/packetproxy/vulchecker/JWTVulChecker.java diff --git a/src/main/java/core/packetproxy/vulchecker/generator/JWTHeaderAddSpecifiedJKUGenerator.java b/ui/src/main/java/core/packetproxy/vulchecker/generator/JWTHeaderAddSpecifiedJKUGenerator.java similarity index 92% rename from src/main/java/core/packetproxy/vulchecker/generator/JWTHeaderAddSpecifiedJKUGenerator.java rename to ui/src/main/java/core/packetproxy/vulchecker/generator/JWTHeaderAddSpecifiedJKUGenerator.java index 0fa21bb4..65221658 100644 --- a/src/main/java/core/packetproxy/vulchecker/generator/JWTHeaderAddSpecifiedJKUGenerator.java +++ b/ui/src/main/java/core/packetproxy/vulchecker/generator/JWTHeaderAddSpecifiedJKUGenerator.java @@ -22,6 +22,8 @@ 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,13 +43,11 @@ public boolean generateOnStart() { public String generate(String inputData) throws Exception { cancelClicked = false; - JDialog dlg = new JDialog(GUIMain.getInstance()); - - Rectangle rect = GUIMain.getInstance().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)); @@ -82,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/JWTHeaderRS256toHS256Generator.java b/ui/src/main/java/core/packetproxy/vulchecker/generator/JWTHeaderRS256toHS256Generator.java similarity index 84% rename from src/main/java/core/packetproxy/vulchecker/generator/JWTHeaderRS256toHS256Generator.java rename to ui/src/main/java/core/packetproxy/vulchecker/generator/JWTHeaderRS256toHS256Generator.java index 559885f0..0f8101d6 100644 --- a/src/main/java/core/packetproxy/vulchecker/generator/JWTHeaderRS256toHS256Generator.java +++ b/ui/src/main/java/core/packetproxy/vulchecker/generator/JWTHeaderRS256toHS256Generator.java @@ -21,6 +21,8 @@ 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,13 +42,11 @@ public boolean generateOnStart() { public String generate(String inputData) throws Exception { cancelClicked = false; - JDialog dlg = new JDialog(GUIMain.getInstance()); - - Rectangle rect = GUIMain.getInstance().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)); @@ -81,12 +81,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/ui/src/main/java/core/packetproxy/vulchecker/generator/JWTSignWithAppleOtherTokenGenerator.java similarity index 84% rename from src/main/java/core/packetproxy/vulchecker/generator/JWTSignWithAppleOtherTokenGenerator.java rename to ui/src/main/java/core/packetproxy/vulchecker/generator/JWTSignWithAppleOtherTokenGenerator.java index ab99b0e4..01029009 100644 --- a/src/main/java/core/packetproxy/vulchecker/generator/JWTSignWithAppleOtherTokenGenerator.java +++ b/ui/src/main/java/core/packetproxy/vulchecker/generator/JWTSignWithAppleOtherTokenGenerator.java @@ -25,6 +25,8 @@ 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,13 +51,11 @@ public String generate(String inputData) throws Exception { this.tokenFromBrowser = ""; this.cancelClicked = false; - JDialog dlg = new JDialog(GUIMain.getInstance()); - - Rectangle rect = GUIMain.getInstance().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)); @@ -105,11 +105,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 +118,16 @@ public void mouseClicked(MouseEvent e) { throw new Exception("cancel"); } - GUIMain.getInstance().setAlwaysOnTop(true); - GUIMain.getInstance().setVisible(true); + var mainWindow = MainWindows.get(); + 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/extensions/securityheaders/SecurityHeadersExtension.kt b/ui/src/main/kotlin/core/packetproxy/extensions/securityheaders/SecurityHeadersExtension.kt similarity index 99% rename from src/main/kotlin/core/packetproxy/extensions/securityheaders/SecurityHeadersExtension.kt rename to ui/src/main/kotlin/core/packetproxy/extensions/securityheaders/SecurityHeadersExtension.kt index e1a5b850..943625fd 100644 --- a/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 { 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