feat(web): integrate embedded web server, REST/SSE APIs and modernize configuration

- Add embedded KLALBWebServer with REST API, SSE streaming (200ms) and SPA hosting
- Introduce enableTUN configuration flag with fallback and non-admin execution support
- Refactor LineTable and ConnectLineTable to openConnections and autoConnections
- Rename denyLineTableQuery/Broadcast to denyConnectionQuery/Broadcast with backwards compatibility
- Support runtime config hot-reloading and automatic persistence to klalb-config.json
- Update default Web API port to 4665 and update dashboard submodule reference
This commit is contained in:
2026-08-24 00:01:24 +08:00
parent 041cc31c5f
commit 6c7017bc75
12 changed files with 1148 additions and 72 deletions
@@ -210,7 +210,7 @@ public class KLALBController {
for (Iterator<IPMulticastDiscovery> iterator = ipmd.iterator(); iterator.hasNext(); ) {
IPMulticastDiscovery ipMulticastDiscovery = (IPMulticastDiscovery) iterator.next();
if (ipMulticastDiscovery.isClosed() || (!ipMulticastDiscovery.getInterface().isUp())
|| (configItem != null && configItem.isDenyLineTableBroadcast())) {
|| (configItem != null && configItem.isDenyConnectionBroadcast())) {
iterator.remove();
try {
ipMulticastDiscovery.close();
@@ -222,7 +222,7 @@ public class KLALBController {
}
}
if (configItem != null && configItem.isDenyLineTableBroadcast()) {
if (configItem != null && configItem.isDenyConnectionBroadcast()) {
} else {
List<NetworkInterface> interfaceList = networkInterfaceManager.getAllAvaliableNetworkInterface();
@@ -647,8 +647,9 @@ public class KLALBController {
rawPortBinder= new PortBinder(this.getSelf().getAddress());
System.out.println(" Loaded: SRv6 Stack");
String name=(configItem!=null)?configItem.getTUNName():CONST.KLALB_S_RV6;
boolean enableTUN = enableVirtualAdapter && (name != null) && !name.trim().isEmpty() && !name.trim().equalsIgnoreCase("null");
String name = (configItem != null && configItem.getTUNName() != null) ? configItem.getTUNName() : CONST.KLALB_S_RV6;
boolean isEnabled = configItem == null || configItem.isEnableTUN();
boolean enableTUN = enableVirtualAdapter && isEnabled && (name != null) && !name.trim().isEmpty() && !name.trim().equalsIgnoreCase("null");
if (enableTUN) {
Thread t=new Thread(()->{
try {
@@ -800,18 +801,18 @@ public class KLALBController {
getIpv6Router().setASN(vasn);
}
List<MultiProtocolSocketAddress> linele = configItem.getLineTable();
List<MultiProtocolSocketAddress> linele = configItem.getOpenConnections();
if (linele != null) {
getSelflineTable().addAll(linele);
}
List<MultiProtocolSocketAddress> linetoc = configItem.getConnectLineTable();
List<MultiProtocolSocketAddress> linetoc = configItem.getAutoConnections();
if (linetoc != null) {
linetoc.forEach((aline) -> {
addRemoteLines(aline);
});
}
List<MultiProtocolSocketAddress> ntps = configItem.getNtpServerTable();
List<MultiProtocolSocketAddress> ntps = configItem.getNtpServers();
if (ntps != null) {
getNTPTable().addAll(ntps);
}