mirror of
https://github.com/OpenTTD/OpenTTD.git
synced 2025-08-20 04:59:11 +00:00
(svn r8631) -Add: added parameter -l ip[:port] to ./openttd, which redirects DEBUG() to a remote connection over TCP
For example, launch on 192.168.0.1 with, say, netcat a listener: netcat -l -p 3982 Launch OpenTTD on a remote host (say, PSP): ./openttd -l 192.168.0.1 -d9 And you get all debug information on 192.168.0.1. Very useful for debugging Portable systems.
This commit is contained in:
@@ -17,6 +17,7 @@
|
||||
enum {
|
||||
NETWORK_MASTER_SERVER_PORT = 3978, ///< The default port of the master server (UDP)
|
||||
NETWORK_DEFAULT_PORT = 3979, ///< The default port of the game server (TCP & UDP)
|
||||
NETWORK_DEFAULT_DEBUGLOG_PORT = 3982, ///< The default port debug-log is sent too (TCP)
|
||||
|
||||
SEND_MTU = 1460, ///< Number of bytes we can pack in a single packet
|
||||
|
||||
|
@@ -1317,6 +1317,37 @@ static void NetworkGenerateUniqueId(void)
|
||||
snprintf(_network_unique_id, sizeof(_network_unique_id), "%s", hex_output);
|
||||
}
|
||||
|
||||
void NetworkStartDebugLog(const char *hostname, uint16 port)
|
||||
{
|
||||
extern SOCKET _debug_socket; // Comes from debug.c
|
||||
SOCKET s;
|
||||
struct sockaddr_in sin;
|
||||
|
||||
DEBUG(net, 0, "Redirecting DEBUG() to %s:%d", hostname, port);
|
||||
|
||||
s = socket(AF_INET, SOCK_STREAM, 0);
|
||||
if (s == INVALID_SOCKET) {
|
||||
DEBUG(net, 0, "Failed to open socket for redirection DEBUG()");
|
||||
return;
|
||||
}
|
||||
|
||||
if (!SetNoDelay(s)) DEBUG(net, 1, "Setting TCP_NODELAY failed");
|
||||
|
||||
sin.sin_family = AF_INET;
|
||||
sin.sin_addr.s_addr = NetworkResolveHost(hostname);
|
||||
sin.sin_port = htons(port);
|
||||
|
||||
if (connect(s, (struct sockaddr *)&sin, sizeof(sin)) != 0) {
|
||||
DEBUG(net, 0, "Failed to redirection DEBUG() to %s:%d", hostname, port);
|
||||
return;
|
||||
}
|
||||
|
||||
if (!SetNonBlocking(s)) DEBUG(net, 0, "Setting non-blocking mode failed");
|
||||
_debug_socket = s;
|
||||
|
||||
DEBUG(net, 0, "DEBUG() is now redirected");
|
||||
}
|
||||
|
||||
/** This tries to launch the network for a given OS */
|
||||
void NetworkStartUp(void)
|
||||
{
|
||||
|
@@ -166,6 +166,7 @@ bool NetworkChangeCompanyPassword(byte argc, char *argv[]);
|
||||
void NetworkPopulateCompanyInfo(void);
|
||||
void UpdateNetworkGameWindow(bool unselect);
|
||||
void CheckMinPlayers(void);
|
||||
void NetworkStartDebugLog(const char *hostname, uint16 port);
|
||||
|
||||
void NetworkStartUp(void);
|
||||
void NetworkUDPCloseAll();
|
||||
|
Reference in New Issue
Block a user