import socket
import subprocess

print('--- SIM-PSK UDP transmit services.')
print('--- Special for RDRC (c) R3KEE 2024.\n')

print('--- read TCP port of personal.cfg')
f = open('personal.cfg', 'rb')
f.seek(1930)
addr = int.from_bytes(f.read(2),'little')
print('--- open receive socket in localhost:', addr)

SERVER_ADDRESS = ('localhost', addr)
address_to_send = ('213.129.114.147', 52001)

server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

try:
    # With the help of bind() function
    # binding host and port
    # soc.bind((HOST, PORT))
    server_socket.bind(SERVER_ADDRESS)

except socket.error as message:
    # if any error occurs then with the
    # help of sys.exit() exit from the program
    print('Bind failed. Error Code : '
          + str(message[0]) + ' Message '
          + message[1])
    sys.exit()

# print if Socket binding operation completed
print('Socket binding operation completed')



#server_socket.bind(SERVER_ADDRESS)
server_socket.listen(10)
#print('server is running, please, press ctrl+c to stop')

#run("sim_psk.exe")
print('--- Running sim_psk.exe')
proc = subprocess.Popen("sim_psk.exe", shell=True, stdin=None, stdout=None, stderr=None, close_fds=True)

print(proc)


while True:
	connection, address = server_socket.accept()
	print("new connection from {address}".format(address=address))

	data = connection.recv(1024)
#	print(str(data))
	print (data.decode("utf-8"))
	print ("=================================================")

#	client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
#	client.connect(address_to_send)
#	client.send(data)
#	client.close()

	clientudp = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
	clientudp.sendto(data, address_to_send)

	connection.close()
