Exemplo n.º 1
0
static void debug_print(const char *dbg, const char *buf)
{
#if defined(ENABLE_NETWORK)
	if (_debug_socket != INVALID_SOCKET) {
		char buf2[1024 + 32];

		snprintf(buf2, lengthof(buf2), "%sdbg: [%s] %s\n", GetLogPrefix(), dbg, buf);
		send(_debug_socket, buf2, (int)strlen(buf2), 0);
		return;
	}
#endif /* ENABLE_NETWORK */
	if (strcmp(dbg, "desync") != 0) {
#if defined(WINCE)
		/* We need to do OTTD2FS twice, but as it uses a static buffer, we need to store one temporary */
		TCHAR tbuf[512];
		_sntprintf(tbuf, sizeof(tbuf), _T("%s"), OTTD2FS(dbg));
		NKDbgPrintfW(_T("dbg: [%s] %s\n"), tbuf, OTTD2FS(buf));
#else
		fprintf(stderr, "%sdbg: [%s] %s\n", GetLogPrefix(), dbg, buf);
#endif
		IConsoleDebug(dbg, buf);
	} else {
		static FILE *f = FioFOpenFile("commands-out.log", "wb", AUTOSAVE_DIR);
		if (f == NULL) return;

		fprintf(f, "%s%s\n", GetLogPrefix(), buf);
		fflush(f);
	}
}
Exemplo n.º 2
0
const char* EosUdpIn_Mac::RecvPacket(EosLog &log, unsigned int timeoutMS, unsigned int retryCount, int &len, void *addr, int *addrSize)
{
	if( IsInitialized() )
	{
		for(;;)
		{
			fd_set readfds;
			FD_ZERO(&readfds);
			FD_SET(m_Socket, &readfds);

			timeval timeout;
			timeout.tv_sec = timeoutMS/1000;
			timeout.tv_usec = ((timeoutMS - timeoutMS/1000) * 1000);

			int result = select(m_Socket+1, &readfds, 0, 0, &timeout);
			if(result > 0)
			{
				socklen_t fromSize = (addrSize ? static_cast<socklen_t>(*addrSize) : 0);
				len = recvfrom(m_Socket, m_RecvBuf, EOS_UDP_RECV_BUF_LEN, 0, static_cast<sockaddr*>(addr), (addr && addrSize) ? (&fromSize) : 0);
				if(len == -1)
				{
					char text[256];
					sprintf(text, "%s recvfrom failed with error %d", GetLogPrefix(m_LogPrefix), errno);
					log.AddError(text);
				}
				else if(len < 1)
				{
					char text[256];
					sprintf(text, "%s recvfrom failed, received %d bytes", GetLogPrefix(m_LogPrefix), len);
					log.AddWarning(text);
				}
				else
					return m_RecvBuf;
			}
			else if(result < 0)
			{
				char text[256];
				sprintf(text, "%s select failed with error %d", GetLogPrefix(m_LogPrefix), errno);
				log.AddError(text);
				break;
			}

			if(retryCount-- == 0)
				break;
		}
	}
	else
	{
		char text[256];
		sprintf(text, "%s RecvPacket failed, not initialized", GetLogPrefix(m_LogPrefix));
		log.AddError(text);
	}

	return 0;
}
Exemplo n.º 3
0
const char* EosUdpIn_Win::RecvPacket(EosLog &log, unsigned int timeoutMS, unsigned int retryCount, int &len, void *addr, int *addrSize)
{
	if( IsInitialized() )
	{
		for(;;)
		{
			fd_set readfds;
			readfds.fd_count = 1;
			readfds.fd_array[0] = m_Socket;

			TIMEVAL timeout;
			timeout.tv_sec = timeoutMS/1000;
			timeout.tv_usec = ((timeoutMS - timeoutMS/1000) * 1000);

			int result = select(0, &readfds, 0, 0, &timeout);
			if(result > 0)
			{
				len = recvfrom(m_Socket, m_RecvBuf, EOS_UDP_RECV_BUF_LEN, 0, static_cast<sockaddr*>(addr), addrSize);
				if(len == SOCKET_ERROR)
				{
					char text[256];
					sprintf(text, "%s recvfrom failed with error %d", GetLogPrefix(m_LogPrefix), WSAGetLastError());
					log.AddError(text);
				}
				else if(len < 1)
				{
					char text[256];
					sprintf(text, "%s recvfrom failed, received %d bytes", GetLogPrefix(m_LogPrefix), len);
					log.AddWarning(text);
				}
				else
					return m_RecvBuf;
			}
			else if(result < 0)
			{
				char text[256];
				sprintf(text, "%s select failed with error %d", GetLogPrefix(m_LogPrefix), WSAGetLastError());
				log.AddError(text);
				break;
			}

			if(retryCount-- == 0)
				break;
		}
	}
	else
	{
		char text[256];
		sprintf(text, "%s RecvPacket failed, not initialized", GetLogPrefix(m_LogPrefix));
		log.AddError(text);
	}

	return 0;
}
Exemplo n.º 4
0
/**
 * Handle the printing of text entered into the console or redirected there
 * by any other means. Text can be redirected to other clients in a network game
 * as well as to a logfile. If the network server is a dedicated server, all activities
 * are also logged. All lines to print are added to a temporary buffer which can be
 * used as a history to print them onscreen
 * @param colour_code the colour of the command. Red in case of errors, etc.
 * @param string the message entered or output on the console (notice, error, etc.)
 */
void IConsolePrint(ConsoleColour colour_code, const char *string)
{
	char *str;
#ifdef ENABLE_NETWORK
	if (_redirect_console_to_client != INVALID_CLIENT_ID) {
		/* Redirect the string to the client */
		NetworkServerSendRcon(_redirect_console_to_client, colour_code, string);
		return;
	}
#endif

	/* Create a copy of the string, strip if of colours and invalid
	 * characters and (when applicable) assign it to the console buffer */
	str = strdup(string);
	str_strip_colours(str);
	str_validate(str, str + strlen(str));

	if (_network_dedicated) {
		fprintf(stdout, "%s%s\n", GetLogPrefix(), str);
		fflush(stdout);
		IConsoleWriteToLogFile(str);
		free(str); // free duplicated string since it's not used anymore
		return;
	}

	IConsoleWriteToLogFile(str);
	IConsoleGUIPrint(colour_code, str);
}
Exemplo n.º 5
0
static void IConsoleWriteToLogFile(const char *string)
{
	if (_iconsole_output_file != NULL) {
		/* if there is an console output file ... also print it there */
		const char *header = GetLogPrefix();
		if ((strlen(header) != 0 && fwrite(header, strlen(header), 1, _iconsole_output_file) != 1) ||
				fwrite(string, strlen(string), 1, _iconsole_output_file) != 1 ||
				fwrite("\n", 1, 1, _iconsole_output_file) != 1) {
			fclose(_iconsole_output_file);
			_iconsole_output_file = NULL;
			IConsolePrintF(CC_DEFAULT, "cannot write to log file");
		}
	}
}
Exemplo n.º 6
0
bool EosUdpIn_Win::Initialize(EosLog &log, const char *ip, unsigned short port)
{
	if(	!IsInitialized() )
	{
		SetLogPrefix("udp in", ip, port, m_LogPrefix);

		if( ip )
		{
			WSADATA wsaData;
			int result = WSAStartup(MAKEWORD(2,2), &wsaData);
			if(result == 0)
			{
				m_Socket = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
				if(m_Socket != INVALID_SOCKET)
				{
					int optval = 1;
					if(setsockopt(m_Socket,SOL_SOCKET,SO_REUSEADDR,(const char*)&optval,sizeof(optval)) == SOCKET_ERROR)
					{
						char text[256];
						sprintf(text, "%s setsockopt(SO_REUSEADDR) failed with error %d", GetLogPrefix(m_LogPrefix), WSAGetLastError());
						log.AddWarning(text);
					}

					sockaddr_in addr;
					memset(&addr, 0, sizeof(addr));
					addr.sin_family = AF_INET;
					addr.sin_addr.S_un.S_addr = inet_addr(ip);
					addr.sin_port = htons(port);
					result = bind(m_Socket, reinterpret_cast<sockaddr*>(&addr), sizeof(addr));
					if(result != SOCKET_ERROR)
					{
						char text[256];
						sprintf(text, "%s socket intialized", GetLogPrefix(m_LogPrefix));
						log.AddInfo(text);
					}
					else
					{
						char text[256];
						sprintf(text, "%s bind failed with error %d", GetLogPrefix(m_LogPrefix), WSAGetLastError());
						log.AddError(text);
						closesocket(m_Socket);
						m_Socket = INVALID_SOCKET;
						WSACleanup();
					}
				}
				else
				{
					char text[256];
					sprintf(text, "%s socket failed with error %d", GetLogPrefix(m_LogPrefix), WSAGetLastError());
					log.AddError(text);
					WSACleanup();
				}
			}
			else
			{
				char text[256];
				sprintf(text, "%s WSAStartup failed with error %d", GetLogPrefix(m_LogPrefix), result);
				log.AddError(text);
				WSACleanup();
			}
		}
		else
		{
			char text[256];
			sprintf(text, "%s initialize failed, invalid arguments", GetLogPrefix(m_LogPrefix));
			log.AddError(text);
		}
	}
	else
	{
		char text[256];
		sprintf(text, "%s initialize failed, already initialized", GetLogPrefix(m_LogPrefix));
		log.AddWarning(text);
	}

	return IsInitialized();
}
Exemplo n.º 7
0
bool EosUdpIn_Mac::Initialize(EosLog &log, const char *ip, unsigned short port)
{
	if(	!IsInitialized() )
	{
		SetLogPrefix("udp input", ip, port, m_LogPrefix);
	
		if( ip )
		{
			m_Socket = socket(AF_INET, SOCK_DGRAM, 0);
			if(m_Socket != -1)
			{
				int optval = 1;
				if(setsockopt(m_Socket,SOL_SOCKET,SO_REUSEADDR,(const char*)&optval,sizeof(optval)) == -1)
				{
					char text[256];
					sprintf(text, "%s setsockopt(SO_REUSEADDR) failed with error %d", GetLogPrefix(m_LogPrefix), errno);
					log.AddWarning(text);
				}
				
				sockaddr_in addr;
				memset(&addr, 0, sizeof(addr));
				addr.sin_family = AF_INET;
				addr.sin_addr.s_addr = inet_addr(ip);
				addr.sin_port = htons(port);
				int result = bind(m_Socket, reinterpret_cast<sockaddr*>(&addr), static_cast<socklen_t>(sizeof(addr)));
				if(result != -1)
				{
					char text[256];
					sprintf(text, "%s socket intialized", GetLogPrefix(m_LogPrefix));
					log.AddInfo(text);
				}
				else
				{
					char text[256];
					sprintf(text, "%s bind failed with error %d", GetLogPrefix(m_LogPrefix), errno);
					log.AddError(text);
					close(m_Socket);
					m_Socket = -1;
				}
			}
			else
			{
				char text[256];
				sprintf(text, "%s socket failed with error %d", GetLogPrefix(m_LogPrefix), errno);
				log.AddError(text);
			}
		}
		else
		{
			char text[256];
			sprintf(text, "%s initialize failed, invalid arguments", GetLogPrefix(m_LogPrefix));
			log.AddError(text);
		}
	}
	else
	{
		char text[256];
		sprintf(text, "%s initialize failed, already initialized", GetLogPrefix(m_LogPrefix));
		log.AddWarning(text);
	}

	return IsInitialized();
}