2 Commits
Author SHA1 Message Date
SerinaNya cc803f47a7 feat(web): add /api/node-info endpoint for on-demand node detail queries
- Expose GET /api/node-info?address=<ipv6> endpoint in KLALBWebServer
- Return local deviceName and deviceDescription immediately for self node
- Perform asynchronous full node-info query (NODE_INFO_FULL_REQ) via
  KLALBRoutingProtocolAPIClient for remote nodes with 3s timeout fallback
2026-08-26 21:31:48 +08:00
KNEMC 3bb95988fc 增加enableTUN checkbox 2026-08-26 21:10:41 +08:00
4 changed files with 18 additions and 2 deletions
+2 -1
View File
@@ -115,4 +115,5 @@ multiscatter=Multi-Core - Spread Load Evenly (Optimized for multi-socket NUMA ar
webapisettings=Web API settings webapisettings=Web API settings
enablewebapi=Enable Web API enablewebapi=Enable Web API
weblistenaddr=Web API listen address weblistenaddr=Web API listen address
invaildweblistenaddr=Invalid Web API listen address invaildweblistenaddr=Invalid Web API listen address
enabletun=Enable TUN adapter
+1
View File
@@ -116,3 +116,4 @@ webapisettings=Web API 设置
enablewebapi=启用 Web API enablewebapi=启用 Web API
weblistenaddr=Web API 监听地址:端口 weblistenaddr=Web API 监听地址:端口
invaildweblistenaddr=无效的 Web API 监听地址:端口 invaildweblistenaddr=无效的 Web API 监听地址:端口
enabletun=启用TUN虚拟网卡
@@ -75,6 +75,7 @@ public class KLALBStateGUI3 extends XFrame {
private JTextField addressField; // 地址显示框 private JTextField addressField; // 地址显示框
private JTextField addressFieldSet; // 地址设置框 private JTextField addressFieldSet; // 地址设置框
private JTextField asnFieldSet; // ASN设置框 private JTextField asnFieldSet; // ASN设置框
private JCheckBox enableTUN; // 虚拟网卡启用禁用
private JTextField tunDeviceName; // 虚拟网卡名称设置框 private JTextField tunDeviceName; // 虚拟网卡名称设置框
private JTextField webListenSet; // Web API 监听地址设置框 private JTextField webListenSet; // Web API 监听地址设置框
private NetworkGraphPanel graph; // 网络图面板 private NetworkGraphPanel graph; // 网络图面板
@@ -822,6 +823,12 @@ public class KLALBStateGUI3 extends XFrame {
asnFieldSet = asn.getTextField(); asnFieldSet = asn.getTextField();
settings.getView().add(asn); settings.getView().add(asn);
//虚拟网卡
CheckBoxSettingItem enableTUNs = new CheckBoxSettingItem(UIEnv.getRsb().getString("enabletun"),
CONST.itemwidth, CONST.settingheight);
enableTUN=enableTUNs.getCheckBox();
settings.getView().add(enableTUNs);
TextSettingItem tunName = new TextSettingItem(UIEnv.getRsb().getString("tunname"), TextSettingItem tunName = new TextSettingItem(UIEnv.getRsb().getString("tunname"),
CONST.itemwidth, CONST.settingheight); CONST.itemwidth, CONST.settingheight);
tunDeviceName = tunName.getTextField(); tunDeviceName = tunName.getTextField();
@@ -1151,6 +1158,8 @@ public class KLALBStateGUI3 extends XFrame {
} }
} }
kck.setEnableTUN( enableTUN.isSelected());
String tunNameText=tunDeviceName.getText().trim(); String tunNameText=tunDeviceName.getText().trim();
if(tunNameText.equals("") || tunNameText.equalsIgnoreCase("null")) { if(tunNameText.equals("") || tunNameText.equalsIgnoreCase("null")) {
kck.setTUNName(null); kck.setTUNName(null);
@@ -1571,9 +1580,14 @@ public class KLALBStateGUI3 extends XFrame {
Long vasn = kck.getVirtualASN(); Long vasn = kck.getVirtualASN();
asnFieldSet.setText(vasn != null ? vasn.toString() : ""); asnFieldSet.setText(vasn != null ? vasn.toString() : "");
enableTUN.setSelected(kck.isEnableTUN());
String tunname=kck.getTUNName(); String tunname=kck.getTUNName();
tunDeviceName.setText(tunname!=null?tunname:""); tunDeviceName.setText(tunname!=null?tunname:"");
// 加载Web API设置 // 加载Web API设置
webApiEnabled.setSelected(kck.isWebUI()); webApiEnabled.setSelected(kck.isWebUI());
webListenSet.setText(kck.getWebListen() != null ? kck.getWebListen().toString() webListenSet.setText(kck.getWebListen() != null ? kck.getWebListen().toString()
@@ -164,7 +164,7 @@ public class NetworkGraphPanel extends GraphPanel {
return sb.toString(); return sb.toString();
} }
private double nsPerPixel=1000L; private double nsPerPixel=5000L;
private class InetGraphEdgeGroup extends GraphEdgeGroup{ private class InetGraphEdgeGroup extends GraphEdgeGroup{
public InetGraphEdgeGroup(GraphNode nodeA, GraphNode nodeB) { public InetGraphEdgeGroup(GraphNode nodeA, GraphNode nodeB) {
super(nodeA, nodeB); super(nodeA, nodeB);