From 46fc9909719899c24df197aedcee6b7804bd0e10 Mon Sep 17 00:00:00 2001 From: Daniel Collins Date: Sat, 2 Sep 2023 15:04:21 +0100 Subject: [PATCH] Fix registration with DOSBox IPX server. --- src/router.c | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/src/router.c b/src/router.c index 9d4d4e9..cb0e090 100644 --- a/src/router.c +++ b/src/router.c @@ -1,5 +1,5 @@ /* IPXWrapper - Router code - * Copyright (C) 2011-2021 Daniel Collins + * Copyright (C) 2011-2023 Daniel Collins * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 as published by @@ -31,6 +31,8 @@ #include "addrcache.h" #include "ethernet.h" +#define IPX_SOCK_ECHO 2 + static bool router_running = false; static WSAEVENT router_event = WSA_INVALID_EVENT; static HANDLE router_thread = NULL; @@ -140,6 +142,8 @@ void router_init(void) { /* TODO: Support DNS. Do this async somewhere within router_main. */ + _init_socket(&private_socket, 0, FALSE, FALSE); + dosbox_server_addr.sin_family = AF_INET; dosbox_server_addr.sin_addr.s_addr = inet_addr(main_config.dosbox_server_addr); dosbox_server_addr.sin_port = htons(main_config.dosbox_server_port); @@ -153,8 +157,6 @@ void router_init(void) _send_dosbox_registration_request(); dosbox_state = DOSBOX_REGISTERING; - - _init_socket(&private_socket, 0, FALSE, FALSE); } else{ _init_socket(&shared_socket, main_config.udp_port, TRUE, TRUE); @@ -503,8 +505,8 @@ static void _handle_dosbox_registration_response(novell_ipx_packet *packet, size { if(packet_size < sizeof(novell_ipx_packet) || ntohs(packet->length) != packet_size - || ntohs(packet->checksum) != 0xFFFF - || ntohs(packet->type) != 2) + || ntohs(packet->checksum) != 0xFFFF) + /* || packet->type != 2) */ { /* Doesn't look valid. */ log_printf(LOG_ERROR, "Got invalid registration response from DOSBox server!"); @@ -683,11 +685,11 @@ static void _send_dosbox_registration_request(void) memset(reg_pkt.dest_net, 0, sizeof(reg_pkt.dest_net)); memset(reg_pkt.dest_node, 0, sizeof(reg_pkt.dest_node)); - reg_pkt.dest_socket = 0; + reg_pkt.dest_socket = htons(IPX_SOCK_ECHO); memset(reg_pkt.src_net, 0, sizeof(reg_pkt.src_net)); memset(reg_pkt.src_node, 0, sizeof(reg_pkt.src_node)); - reg_pkt.src_socket = 0; + reg_pkt.src_socket = htons(IPX_SOCK_ECHO); if(send(private_socket, (const void*)(®_pkt), sizeof(reg_pkt), 0) < 0) {