Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
80 changes: 41 additions & 39 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import org.gradle.plugins.ide.eclipse.model.AccessRule

buildscript {
dependencies {
classpath 'com.bmuschko:gradle-izpack-plugin:3.0'
classpath 'com.bmuschko:gradle-izpack-plugin:3.2'
}
}

Expand All @@ -14,9 +14,9 @@ plugins {
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 'com.github.jk1.dependency-license-report' version '3.0.1'
id "de.undercouch.download" version "5.6.0"
id "com.diffplug.spotless" version "7.1.0"
id "com.diffplug.spotless" version "8.1.0"
}

repositories {
Expand All @@ -30,50 +30,52 @@ dependencies {
annotationProcessor 'org.projectlombok:lombok:1.18.42'
testCompileOnly 'org.projectlombok:lombok:1.18.42'
testAnnotationProcessor 'org.projectlombok:lombok:1.18.42'
compileOnly 'org.jspecify:jspecify:0.3.0'
testCompileOnly 'org.jspecify:jspecify:0.3.0'

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 'org.mockito:mockito-core:4.7.0'
testImplementation 'org.junit.jupiter:junit-jupiter:6.1.0-M1'
testRuntimeOnly 'org.junit.platform:junit-platform-launcher:6.1.0-M1'
testImplementation 'org.assertj:assertj-core:4.0.0-M1'
testImplementation 'org.mockito:mockito-core:5.21.0'
testImplementation 'org.projectlombok:lombok:1.18.42'

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 'org.slf4j:slf4j-api:1.7.14'
implementation 'org.slf4j:slf4j-log4j12:1.7.25'
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 'com.google.guava:guava:33.5.0-jre'
implementation 'commons-codec:commons-codec:1.20.0'
implementation 'commons-io:commons-io:2.21.0'
implementation 'org.apache.commons:commons-lang3:3.20.0'
implementation 'org.apache.commons:commons-collections4:4.5.0'
implementation 'org.xerial:sqlite-jdbc:3.51.1.0'
implementation 'com.j256.ormlite:ormlite-core:6.1'
implementation 'com.j256.ormlite:ormlite-jdbc:6.1'
implementation 'com.google.protobuf:protobuf-java:4.33.2'
implementation 'org.slf4j:slf4j-api:2.1.0-alpha1'
implementation 'org.slf4j:slf4j-log4j12:2.1.0-alpha1'
implementation 'io.github.java-diff-utils:java-diff-utils:4.16'
implementation 'com.google.re2j:re2j:1.8'
implementation 'com.github.mobius-software-ltd:mqtt-parser:parser-1.0.6'
implementation 'net.arnx:jsonic:1.3.10'
implementation 'org.json:json:20250517'
implementation 'com.fasterxml.jackson.dataformat:jackson-dataformat-cbor:2.20.1'
implementation 'com.fasterxml.jackson.core:jackson-databind:2.20.1'
implementation 'org.msgpack:jackson-dataformat-msgpack:0.9.10'
implementation 'org.bouncycastle:bcpkix-jdk18on:1.83'
implementation 'commons-net:commons-net:3.12.0'
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 'com.google.code.gson:gson:2.13.2'
implementation 'org.apache.commons:commons-math3:3.6.1'
implementation 'org.jfree:jfreechart:1.5.6'
implementation 'org.ejml:ejml-all:0.44.0'
implementation 'at.favre.lib:hkdf:2.0.0'
implementation 'org.eclipse.jetty.http2:http2-hpack:11.0.26'
implementation 'org.eclipse.jetty.http3:http3-qpack:11.0.26'
implementation 'com.github.docker-java:docker-java:3.7.0'
implementation 'com.github.docker-java:docker-java-transport-httpclient5:3.7.0'
implementation 'org.apache.commons:commons-compress:1.28.0'
implementation 'com.github.luben:zstd-jni:1.5.6-3'
implementation 'com.github.luben:zstd-jni:1.5.7-6'
implementation 'org.brotli:dec:0.1.2'
implementation files('libs/agent15.jar')

izpack 'org.codehaus.izpack:izpack-dist:5.1.3'
izpack 'org.codehaus.izpack:izpack-dist:5.2.4'

// load additional dena modules if it exists
['dena/', 'denaN/', 'denaL/'].each { def dir ->
Expand Down
Binary file modified gradle/wrapper/gradle-wrapper.jar
Binary file not shown.
2 changes: 1 addition & 1 deletion gradle/wrapper/gradle-wrapper.properties
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-9.1.0-bin.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-9.2.1-bin.zip
networkTimeout=10000
validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME
Expand Down
5 changes: 1 addition & 4 deletions gradlew
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
#!/bin/sh

#
# Copyright © 2015-2021 the original authors.
# Copyright © 2015 the original authors.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
Expand Down Expand Up @@ -114,7 +114,6 @@ case "$( uname )" in #(
NONSTOP* ) nonstop=true ;;
esac

CLASSPATH="\\\"\\\""


# Determine the Java command to use to start the JVM.
Expand Down Expand Up @@ -172,7 +171,6 @@ fi
# For Cygwin or MSYS, switch paths to Windows format before running java
if "$cygwin" || "$msys" ; then
APP_HOME=$( cygpath --path --mixed "$APP_HOME" )
CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" )

JAVACMD=$( cygpath --unix "$JAVACMD" )

Expand Down Expand Up @@ -212,7 +210,6 @@ DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'

set -- \
"-Dorg.gradle.appname=$APP_BASE_NAME" \
-classpath "$CLASSPATH" \
-jar "$APP_HOME/gradle/wrapper/gradle-wrapper.jar" \
"$@"

Expand Down
3 changes: 1 addition & 2 deletions gradlew.bat
Original file line number Diff line number Diff line change
Expand Up @@ -70,11 +70,10 @@ goto fail
:execute
@rem Setup the command line

set CLASSPATH=


@rem Execute Gradle
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" -jar "%APP_HOME%\gradle\wrapper\gradle-wrapper.jar" %*
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -jar "%APP_HOME%\gradle\wrapper\gradle-wrapper.jar" %*

:end
@rem End local scope for the variables with windows NT shell
Expand Down
3 changes: 2 additions & 1 deletion src/main/java/core/packetproxy/ProxyFactory.java
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,8 @@ public static Proxy create(ListenPort listen_info) throws Exception {
listen_socket.setReuseAddress(true);
proxy = new ProxyXmppSSLForward(listen_socket, listen_info);

} else { /* FORWARDER */
} else {
/* FORWARDER */

ServerSocket listen_socket = new ServerSocket(listen_info.getPort());
listen_socket.setReuseAddress(true);
Expand Down
2 changes: 1 addition & 1 deletion src/main/java/core/packetproxy/common/MessagePack.java
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ public class MessagePack {
// 元々のMessagePackの型情報を保持する
public static class Key {

public static enum Type {
public enum Type {
Integer, UnsignedInteger, Float, Boolean, RawString, RawBinary, Map, Array, Extension, Nil, None;

public static Type fromString(String str) {
Expand Down
2 changes: 1 addition & 1 deletion src/main/java/core/packetproxy/common/Protobuf3.java
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ public class Protobuf3 {

public static class Key {

public static enum Type {
public enum Type {
Variant, Bit64, LengthDelimited, StartGroup, EndGroup, Bit32, None, Reserved
}

Expand Down
8 changes: 6 additions & 2 deletions src/main/java/core/packetproxy/http2/FrameManager.java
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@

public class FrameManager {

private HpackEncoder hpackEncoder = new HpackEncoder(4096, 65536);
private HpackEncoder hpackEncoder = new HpackEncoder();
private HpackDecoder hpackDecoder;
private List<Frame> headersDataFrames = new LinkedList<>();
private List<Frame> controlFrames = new LinkedList<>();
Expand All @@ -40,6 +40,8 @@ public class FrameManager {

public FrameManager() throws Exception {
flowControlManager = new FlowControlManager();
hpackEncoder.setMaxTableCapacity(65536);
hpackEncoder.setTableCapacity(4096);
}

public HpackDecoder getHpackDecoder() {
Expand Down Expand Up @@ -87,7 +89,9 @@ private void analyzeFrame(Frame frame) throws Exception {

int header_table_size = settingsFrame.get(SettingsFrameType.SETTINGS_HEADER_TABLE_SIZE);
int header_list_size = settingsFrame.get(SettingsFrameType.SETTINGS_MAX_HEADER_LIST_SIZE);
hpackDecoder = new HpackDecoder(header_table_size, header_list_size);
hpackDecoder = new HpackDecoder(header_list_size, System::nanoTime);
hpackDecoder.setMaxTableCapacity(header_table_size);
hpackDecoder.setMaxHeaderListSize(header_list_size);
flag_receive_peer_settings = true;
if (flag_send_end_settings == false && flag_send_settings == true) {

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ public class SettingsFrame extends Frame {

protected static Type TYPE = Type.SETTINGS;

public static enum SettingsFrameType {
public enum SettingsFrameType {
RESERVED, SETTINGS_HEADER_TABLE_SIZE, SETTINGS_ENABLE_PUSH, SETTINGS_MAX_CONCURRENT_STREAMS, SETTINGS_INITIAL_WINDOW_SIZE, SETTINGS_MAX_FRAME_SIZE, SETTINGS_MAX_HEADER_LIST_SIZE,
};

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,10 @@ public class Http3HeaderDecoder {
final QpackDecoder decoder;

public Http3HeaderDecoder() {
this.decoder = new QpackDecoder(instructions -> instructions.forEach(i -> i.encode(this.lease)), 1024 * 1024);
this.decoder = new QpackDecoder(instructions -> instructions.forEach(i -> i.encode(this.lease)));
this.decoder.setMaxHeadersSize(1024 * 1024);
this.decoder.setMaxTableCapacity(1024 * 1024);
this.decoder.setBeginNanoTimeSupplier(System::nanoTime);
}

/** デコーダに命令を入力する Note: デコーダの内部状態が変化します */
Expand All @@ -55,7 +58,7 @@ public byte[] getInstructions() {
/** エンコードされたヘッダをデコードする Note: デコーダの内部状態が変化します */
public List<MetaData> decode(long streamId, byte[] headerEncoded) throws QpackException {
List<MetaData> metaDataList = new ArrayList<>();
this.decoder.decode(streamId, ByteBuffer.wrap(headerEncoded), (sid, metadata) -> {
this.decoder.decode(streamId, ByteBuffer.wrap(headerEncoded), (sid, metadata, wasBlocked) -> {
metaDataList.add(metadata);
});
return metaDataList;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,8 +34,9 @@ public class Http3HeaderEncoder {
final QpackEncoder encoder;

public Http3HeaderEncoder(long capacity) {
this.encoder = new QpackEncoder(instructions -> instructions.forEach(i -> i.encode(this.lease)), 1024 * 1024);
this.encoder.setCapacity((int) capacity);
this.encoder = new QpackEncoder(instructions -> instructions.forEach(i -> i.encode(this.lease)));
this.encoder.setMaxTableCapacity((int) capacity);
this.encoder.setTableCapacity((int) capacity);
}

/** エンコーダに命令を入力する Note: エンコーダの内部状態が変化します */
Expand Down
13 changes: 7 additions & 6 deletions src/main/java/core/packetproxy/model/Database.java
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,8 @@
import com.j256.ormlite.dao.Dao;
import com.j256.ormlite.dao.DaoManager;
import com.j256.ormlite.jdbc.JdbcConnectionSource;
import com.j256.ormlite.logger.LocalLog;
import com.j256.ormlite.logger.Level;
import com.j256.ormlite.logger.Logger;
import com.j256.ormlite.support.ConnectionSource;
import com.j256.ormlite.support.DatabaseConnection;
import com.j256.ormlite.table.TableUtils;
Expand Down Expand Up @@ -74,9 +75,9 @@ private void createDB() throws Exception {
}
}

System.setProperty(LocalLog.LOCAL_LOG_LEVEL_PROPERTY, "error");
Logger.setGlobalLogLevel(Level.ERROR);
source = new JdbcConnectionSource(getDatabaseURL());
DatabaseConnection conn = source.getReadWriteConnection();
DatabaseConnection conn = source.getReadWriteConnection(null);
conn.executeStatement("pragma auto_vacuum = full", DatabaseConnection.DEFAULT_RESULT_FLAGS);
}

Expand Down Expand Up @@ -121,7 +122,7 @@ public void dropPacketTableFaster() throws Exception {
Path src = Paths.get(instance.databasePath.getParent().toAbsolutePath().toString() + "/tmp.sqlite3");
Path dst = instance.databasePath.toAbsolutePath();
firePropertyChange(DatabaseMessage.DISCONNECT_NOW);
DatabaseConnection conn = source.getReadWriteConnection();
DatabaseConnection conn = source.getReadWriteConnection(null);
conn.close();
Files.move(dst, src, StandardCopyOption.REPLACE_EXISTING);

Expand Down Expand Up @@ -175,7 +176,7 @@ private static void migrateTableWithoutHistory(Path srcDBPath, Path dstDBPath) {
try {

ConnectionSource source = new JdbcConnectionSource("jdbc:sqlite:" + srcDBPath);
DatabaseConnection conn = source.getReadWriteConnection();
DatabaseConnection conn = source.getReadWriteConnection(null);
conn.executeStatement("attach database '" + dstDBPath.toAbsolutePath() + "' as 'dstDB'",
DatabaseConnection.DEFAULT_RESULT_FLAGS);
conn.executeStatement("attach database '" + srcDBPath.toAbsolutePath() + "' as 'srcDB'",
Expand Down Expand Up @@ -260,7 +261,7 @@ public void saveWithoutLog(String path) throws Exception {
Path dest = FileSystems.getDefault().getPath(path);
Files.copy(src, dest, StandardCopyOption.REPLACE_EXISTING);
JdbcConnectionSource new_db = new JdbcConnectionSource("jdbc:sqlite:" + dest);
DatabaseConnection conn = new_db.getReadWriteConnection();
DatabaseConnection conn = new_db.getReadWriteConnection(null);
conn.executeStatement("delete from packets", DatabaseConnection.DEFAULT_RESULT_FLAGS);
conn.close();
new_db.close();
Expand Down
41 changes: 21 additions & 20 deletions src/main/java/core/packetproxy/model/Diff.java
Original file line number Diff line number Diff line change
Expand Up @@ -17,10 +17,11 @@

import static packetproxy.util.Logging.errWithStackTrace;

import difflib.Chunk;
import difflib.Delta;
import difflib.DiffUtils;
import difflib.Patch;
import com.github.difflib.DiffUtils;
import com.github.difflib.patch.AbstractDelta;
import com.github.difflib.patch.Chunk;
import com.github.difflib.patch.DeltaType;
import com.github.difflib.patch.Patch;
import java.util.Arrays;
import java.util.List;

Expand Down Expand Up @@ -70,24 +71,24 @@ public static void diffPerCharacter(DiffSet set, DiffEventListener original_even
List<String> listOrig = Arrays.asList(new String(set.getOriginal()).split(""));
List<String> listTarg = Arrays.asList(new String(set.getTarget()).split(""));

Patch diff = DiffUtils.diff(listOrig, listTarg);
Patch<String> diff = DiffUtils.diff(listOrig, listTarg);

List<Delta> deltas = diff.getDeltas();
for (Delta delta : deltas) {
List<AbstractDelta<String>> deltas = diff.getDeltas();
for (AbstractDelta<String> delta : deltas) {

Chunk chunkOrig = delta.getOriginal();
Chunk chunkTarg = delta.getRevised();
if (delta.getType() == Delta.TYPE.CHANGE) {
Chunk<String> chunkOrig = delta.getSource();
Chunk<String> chunkTarg = delta.getTarget();
if (delta.getType() == DeltaType.CHANGE) {

original_event.foundChgDelta(chunkPositionPerCharacter(listOrig, chunkOrig),
chunkLengthPerCharacter(chunkOrig));
target_event.foundChgDelta(chunkPositionPerCharacter(listTarg, chunkTarg),
chunkLengthPerCharacter(chunkTarg));
} else if (delta.getType() == Delta.TYPE.INSERT) {
} else if (delta.getType() == DeltaType.INSERT) {

target_event.foundInsDelta(chunkPositionPerCharacter(listTarg, chunkTarg),
chunkLengthPerCharacter(chunkTarg));
} else if (delta.getType() == Delta.TYPE.DELETE) {
} else if (delta.getType() == DeltaType.DELETE) {

original_event.foundDelDelta(chunkPositionPerCharacter(listOrig, chunkOrig),
chunkLengthPerCharacter(chunkOrig));
Expand All @@ -106,24 +107,24 @@ public static void diffPerLine(DiffSet set, DiffEventListener original_event, Di
List<String> listOrig = Arrays.asList(new String(set.getOriginal()).split("\n"));
List<String> listTarg = Arrays.asList(new String(set.getTarget()).split("\n"));

Patch diff = DiffUtils.diff(listOrig, listTarg);
Patch<String> diff = DiffUtils.diff(listOrig, listTarg);

List<Delta> deltas = diff.getDeltas();
for (Delta delta : deltas) {
List<AbstractDelta<String>> deltas = diff.getDeltas();
for (AbstractDelta<String> delta : deltas) {

Chunk chunkOrig = delta.getOriginal();
Chunk chunkTarg = delta.getRevised();
if (delta.getType() == Delta.TYPE.CHANGE) {
Chunk<String> chunkOrig = delta.getSource();
Chunk<String> chunkTarg = delta.getTarget();
if (delta.getType() == DeltaType.CHANGE) {

original_event.foundChgDelta(chunkPositionPerLine(listOrig, chunkOrig),
chunkLengthPerLine(chunkOrig));
target_event.foundChgDelta(chunkPositionPerLine(listTarg, chunkTarg),
chunkLengthPerLine(chunkTarg));
} else if (delta.getType() == Delta.TYPE.INSERT) {
} else if (delta.getType() == DeltaType.INSERT) {

target_event.foundInsDelta(chunkPositionPerLine(listTarg, chunkTarg),
chunkLengthPerLine(chunkTarg));
} else if (delta.getType() == Delta.TYPE.DELETE) {
} else if (delta.getType() == DeltaType.DELETE) {

original_event.foundDelDelta(chunkPositionPerLine(listOrig, chunkOrig),
chunkLengthPerLine(chunkOrig));
Expand Down
Loading