feat: add TCP Server, UDP Server, and COM port forwarding modes

Extend Mode constants (3=TCPServer, 4=UDPServer, 5=COMPort) with
explicit values. Refactor Target to support multiple connection types
(listener+conns map, packetConn, serialPort). Add acceptLoop,
readLoopPacket, readLoopSerial. Mode-aware Broadcast dispatches to
all accepted conns (TCP-S), known remotes (UDP-S), or serial port.
Update flag help, command completions, and TUI panel hints.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
JiXieShi
2026-05-23 23:10:02 +08:00
parent d8fc9d7374
commit 30d6c2bc3c
6 changed files with 367 additions and 57 deletions
+3 -3
View File
@@ -103,10 +103,10 @@ func (m *Model) handleForwardPanelKey(key string) bool {
m.refreshPanel()
return true
case "a":
m.startPrompt("Add Forward", "tcp 127.0.0.1:12345", "", func(v string) {
m.startPrompt("Add Forward", "tcp 127.0.0.1:12345 (tcp|udp|tcp-s|udp-s|com)", "", func(v string) {
parts := strings.Fields(v)
if len(parts) < 2 {
m.panelError = "usage: <tcp|udp> <address>"
m.panelError = "usage: <tcp|udp|tcp-s|udp-s|com> <address>"
return
}
mode, ok := forward.ParseMode(parts[0])
@@ -158,7 +158,7 @@ func (m *Model) handleForwardPanelKey(key string) bool {
m.startPrompt("Update Forward #"+fmt.Sprint(sel.ID), "tcp 127.0.0.1:12345", fmt.Sprintf("%s %s", sel.Mode, sel.Address), func(v string) {
parts := strings.Fields(v)
if len(parts) < 2 {
m.panelError = "usage: <tcp|udp> <address>"
m.panelError = "usage: <tcp|udp|tcp-s|udp-s|com> <address>"
return
}
mode, ok := forward.ParseMode(parts[0])