/* * ============================================================================ * 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 }