70 lines
1.7 KiB
Go
70 lines
1.7 KiB
Go
/*
|
|
* ============================================================================
|
|
* Projekt.....: rs2322tcp
|
|
* Datei.......: internal/client/device.go
|
|
* Copyright (C) 2026 Dieter Lang
|
|
*
|
|
* SPDX-License-Identifier: GPL-3.0-or-later
|
|
*
|
|
* Beschreibung:
|
|
* Zuordnung eines lokalen virtuellen Ports zu einem vom Server gemeldeten
|
|
* Remote-Gerät.
|
|
* ============================================================================
|
|
*/
|
|
package client
|
|
|
|
import (
|
|
"fmt"
|
|
|
|
"git.lang-dieter.de/rs2322tcp/internal/config"
|
|
"git.lang-dieter.de/rs2322tcp/internal/transport"
|
|
)
|
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
// Remote device lookup
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
|
|
// findRemoteDevice finds the server-provided device information matching
|
|
// the remote device ID configured for a local virtual port.
|
|
//
|
|
// The caller uses the returned RemoteDeviceInfo to open the session-specific
|
|
// TCP data connection.
|
|
func findRemoteDevice(
|
|
virtualPort config.VirtualPortConfig,
|
|
devices []transport.RemoteDeviceInfo,
|
|
) (transport.RemoteDeviceInfo, error) {
|
|
if virtualPort.RemoteDevice == "" {
|
|
return transport.RemoteDeviceInfo{}, fmt.Errorf(
|
|
"remote device is empty for virtual port %q",
|
|
virtualPort.Port,
|
|
)
|
|
}
|
|
|
|
var found *transport.RemoteDeviceInfo
|
|
|
|
for i := range devices {
|
|
device := &devices[i]
|
|
|
|
if device.ID != virtualPort.RemoteDevice {
|
|
continue
|
|
}
|
|
|
|
if found != nil {
|
|
return transport.RemoteDeviceInfo{}, fmt.Errorf(
|
|
"remote device %q is ambiguous",
|
|
virtualPort.RemoteDevice,
|
|
)
|
|
}
|
|
|
|
found = device
|
|
}
|
|
|
|
if found == nil {
|
|
return transport.RemoteDeviceInfo{}, fmt.Errorf(
|
|
"remote device %q not found",
|
|
virtualPort.RemoteDevice,
|
|
)
|
|
}
|
|
|
|
return *found, nil
|
|
}
|