Skip to content

Commit 5d50855

Browse files
committedJul 20, 2024
[iocp] implement iocp and support windows msquic
1 parent 82b62da commit 5d50855

File tree

119 files changed

+8553
-899
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

119 files changed

+8553
-899
lines changed
 

‎Makefile

+27-5
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,13 @@ else ifeq ($(LINUX_ARCH),amd64)
2323
LINUX_ARCH := x86_64
2424
endif
2525

26+
IS_WIN = 0
27+
ifneq (,$(findstring MINGW,$(OS)))
28+
IS_WIN = 1
29+
else ifneq (,$(findstring Windows,$(OS)))
30+
IS_WIN = 1
31+
endif
32+
2633
DOCKER_PLUGIN_WORKDIR ?= "."
2734

2835
.PHONY: clean-jar
@@ -44,7 +51,7 @@ clean: clean-jar
4451
rm -f ./*.build_artifacts.txt
4552
rm -f ./module-info.class
4653
rm -rf ./io
47-
rm -rf ./submodules/msquic/build
54+
cd submodules/msquic && make clean
4855
rm -f ./*.so
4956
rm -f ./*.dylib
5057
rm -f ./*.dll
@@ -96,22 +103,25 @@ _add_linux_so_to_zip:
96103
./io/vproxy/libpni-$(LINUX_ARCH).so
97104
rm -r ./io
98105

106+
.PHONY: native-no-docker
107+
native-no-docker: libpni vfdposix quic fubuki
108+
cp ./submodules/msquic/build/bin/Release/libmsquic.2.2.4.dylib ./libmsquic.dylib
99109
.PHONY: native
100110
ifeq ($(OS),Linux)
101111
native: libpni vfdposix vpxdp quic-all fubuki
102112
else ifeq ($(OS),Darwin)
103113
native: libpni-linux libpni vfdposix-linux vfdposix vpxdp-linux quic-all fubuki-linux fubuki
104114
else
105-
native: libpni vfdwindows
115+
native: libpni vfdwindows quic fubuki
106116
endif
107117

108118
.PHONY: jar-with-lib
109119
ifeq ($(OS),Linux)
110120
jar-with-lib: clean jar native _add_linux_so_to_zip
111121
else
112-
jar-with-lib: clean jar native _add_linux_so_to_zip jar-with-lib-no-docker
122+
jar-with-lib: clean jar native _add_linux_so_to_zip jar-with-lib-skip-native
113123
.PHONY: jar-with-lib-no-docker
114-
jar-with-lib-no-docker: clean jar native jar-with-lib-skip-native
124+
jar-with-lib-no-docker: clean jar native-no-docker jar-with-lib-skip-native
115125
.PHONY: jar-with-lib-skip-native
116126
jar-with-lib-skip-native: clean-jar jar
117127
mkdir -p ./io/vproxy/
@@ -168,11 +178,19 @@ xdp-sample-kern:
168178
cd ./base/src/main/c/xdp && make kern
169179

170180
.PHONY: msquic-java
181+
ifeq (0,$(IS_WIN))
171182
msquic-java: libpni
172183
cd ./base/src/main/c && \
173184
MSQUIC_LD=../../../../submodules/msquic/build/bin/Release \
174185
MSQUIC_INC=../../../../submodules/msquic/src/inc \
175186
/usr/bin/env bash ./make-quic.sh
187+
else
188+
msquic-java: libpni
189+
cd ./base/src/main/c && \
190+
MSQUIC_LD=../../../../submodules/msquic/artifacts/bin/windows/x64_Release_openssl \
191+
MSQUIC_INC=../../../../submodules/msquic/src/inc \
192+
/usr/bin/env bash ./make-quic.sh
193+
endif
176194
.PHONY: msquic
177195
msquic:
178196
cd ./submodules/msquic/ && make
@@ -244,7 +262,11 @@ fubuki-linux:
244262
endif
245263

246264
.PHONY: quic
265+
ifeq (0,$(IS_WIN))
247266
quic: vfdposix msquic msquic-java
267+
else
268+
quic: vfdwindows msquic msquic-java
269+
endif
248270
.PHONY: quic-linux
249271
quic-linux: vfdposix-linux msquic-linux msquic-java-linux
250272
.PHONY: _quic-all-linux
@@ -263,7 +285,7 @@ quic-all: _quic-all-linux
263285
endif
264286

265287
.PHONY: vfdwindows
266-
vfdwindows:
288+
vfdwindows: libpni
267289
cd ./base/src/main/c && ./make-windows.sh
268290

269291
.PHONY: libpni

‎app/src/main/java/io/vproxy/app/app/Main.java

+5-4
Original file line numberDiff line numberDiff line change
@@ -8,15 +8,13 @@
88
import io.vproxy.app.vproxyx.Simple;
99
import io.vproxy.base.Config;
1010
import io.vproxy.base.dns.Resolver;
11-
import io.vproxy.base.util.LogType;
12-
import io.vproxy.base.util.Logger;
13-
import io.vproxy.base.util.MainUtils;
14-
import io.vproxy.base.util.Utils;
11+
import io.vproxy.base.util.*;
1512
import io.vproxy.base.util.callback.Callback;
1613
import io.vproxy.base.util.callback.JoinCallback;
1714
import io.vproxy.base.util.thread.VProxyThread;
1815
import io.vproxy.base.util.thread.VProxyThreadJsonParserCacheHolder;
1916
import io.vproxy.pni.graal.GraalUtils;
17+
import io.vproxy.r.org.graalvm.nativeimage.ImageInfoDelegate;
2018
import io.vproxy.vfd.IPPort;
2119
import io.vproxy.vproxyx.*;
2220
import vjson.parser.ParserUtils;
@@ -59,6 +57,9 @@ private static void beforeStart() {
5957
Utils.loadDynamicLibrary("pni");
6058
} catch (Throwable t) {
6159
Logger.warn(LogType.ALERT, "unable to load dynamic library: pni, native features cannot be used");
60+
if (ImageInfoDelegate.inImageCode() && OS.isWindows()) {
61+
Logger.warn(LogType.ALERT, "Tip: You may need MinGW UCRT64 (or libgcc_s_seh-1.dll,libwinpthread-1.dll) to make pni work");
62+
}
6263
}
6364
GraalUtils.init();
6465
ParserUtils.setParserCacheHolder(new VProxyThreadJsonParserCacheHolder());

0 commit comments

Comments
 (0)