I need a small TCP relay that sits between an existing client-server pair, forwarding traffic transparently while modifying only the data that leaves the relay toward the client. The change is a straightforward “find this exact phrase and replace it with that one” operation—no regular expressions or conditional logic are required. Core behavior • Accept a configurable bind address/port, connect to a configurable upstream host/port, and pass traffic in both directions. • Scan only the incoming stream (server ► client). • When the exact phrase I supply is detected, replace it with the replacement string before the data is written to the socket. • Leave every other byte untouched and forward everything. Program name Will be "satin-tcp-relay.exe" Version number will be of the form "1.0.0.1", Incrementing the last digit on each delivery iteration during testing and acceptance process. INI file name will be "satin-tcp-relay.ini". INI file will be stored in the same folder as the program executable file. Configuration The relay can read its settings (listen address, destination address, search phrase, replacement phrase) from a simple INI file, in a form similar to: listen on port=6000 server ip=192.168.0.100 server port=2300 replace="~" replacement="username" log file=c:\satin\log\tcp-relay.txt console mode=true Command line No command line parameters are necessary. Program will find the INI file and read the settings from it. Screen display Normally the program will have no visible window nor display. If INI file contains "console mode=true", then open a simple text based console display and write lots of information to it that you feel would be useful for debugging or monitoring during initial set-up of the program on a PC. This would include all TCP content and program actions. Usage expectations Will run on a Windows 10 or later environment. It will be started by autoexec.bat file or Windows Scheduler etc on Windows start. Your program will sit between a Telephone PABX (TCP server) and my monitoring application (TCP client, on the same Windows computer as your program). Data volume is very low. Only a few KB a day. In bursts of about a hundred bytes at a time. The program must not time out, it should just run continuously awaiting occasional packets. Logging Each line written to the log file should start with the local date and time in the format: YYYY-MM-DD HH:MM:SS ... Events such as program start, replacement done should be logged. The TCP packet content may be logged also. It is just lines of ASCII text. A whole ASCII line from the TCP content would be logged on a single line in the log file. Path to the required log file is given the INI, but you should default to: .\log\tcp-relay.txt if necessary. Connections Concurrency for multiple simultaneous connections is not required. When the client opens a TCP connection, this program should follow by opening its TCP connection to the server. When the client closes the TCP connection, this program should follow by closing its TCP connection to the server. Reliability and language choice This program will run unattended in the background for very long periods of time. Expect many months between restarts. So it should not consume unnecessary resources. It should not exit on error, but be resilient and just keep going. This last requirement basically excludes C# as a language option! But if you have to use the Microsoft system for generating errors, you must ensure that all errors are caught. Dot net framework 4.6.1 or later will be available. Apart from that the language choice is entirely at your option. What ever makes it easy for you to write a very reliable program. Deliverables 1. EXE file 2. Source code files for archive here and for me to read. 3. Project file for storage on github. Copyright I own the copyright. I grant to you unlimited rights to re-use any and all of the program elements that you write for me. If you already have a suitable snippet or library in mind (e.g., asyncio, Boost.Asio, netty, etc.), feel free to leverage it as long as dependencies stay manageable. I prefer that library routines are linked into the EXE file rather than using a DLL if possible. Let me know which language you prefer and roughly how long you’d need; I’m ready to get this running right away.