/////////////////////////////////////////////////////////////////////////////// //Telnet Win32 : an ANSI telnet client. //Copyright (C) 1998-2000 Paul Brannan //Copyright (C) 1998 I.Ioannou //Copyright (C) 1997 Brad Johnson // //This program is free software; you can redistribute it and/or //modify it under the terms of the GNU General Public License //as published by the Free Software Foundation; either version 2 //of the License, or (at your option) any later version. // //This program is distributed in the hope that it will be useful, //but WITHOUT ANY WARRANTY; without even the implied warranty of //MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the //GNU General Public License for more details. // //You should have received a copy of the GNU General Public License //along with this program; if not, write to the Free Software //Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. // //I.Ioannou //roryt@hol.gr // /////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////// // // Module: tnerror.cpp // // Contents: error reporting // // Product: telnet // // Revisions: June 15, 1998 Paul Brannan // May 15, 1998 Paul Brannan // 5.April.1997 jbj@nounname.com // 5.Dec.1996 jbj@nounname.com // Version 2.0 // // 02.Apr.1995 igor.milavec@uni-lj.si // Original code // /////////////////////////////////////////////////////////////////////////////// #include "tnerror.h" #include "ttelhndl.h" // Paul Brannan 5/25/98 #include "tnconfig.h" // Paul Brannan 5/25/98 #include #include #include #include #ifndef LANG_USER_DEFAULT #define LANG_USER_DEFAULT 400 #endif // This has been moved to tnconfig.cpp // int Telnet_Redir = 0; // Telnet_Redir is set to the value of the environment variable TELNET_REDIR // in main. int printit(const char * it){ DWORD numwritten; if (!ini.get_output_redir()) { if (!WriteConsole( GetStdHandle(STD_OUTPUT_HANDLE), // handle of a console screen buffer it, // address of buffer to write from strlen(it), // number of characters to write &numwritten, // address of number of characters written 0 // reserved )) return -1; // FIX ME!!! We need to tell the console that the cursor has moved. // Does this mean making Console global? // Paul Brannan 6/14/98 // Console.sync(); }else{ if (!WriteFile( GetStdHandle(STD_OUTPUT_HANDLE), // handle of a console screen buffer it, // address of buffer to write from strlen(it), // number of characters to write &numwritten, // address of number of characters written NULL // no overlapped I/O )) return -1; } return 0; } int printm(LPTSTR szModule, BOOL fSystem, DWORD dwMessageId, ...) { int Result = 0; HMODULE hModule = 0; if (szModule) hModule = LoadLibrary(szModule); va_list Ellipsis; va_start(Ellipsis, dwMessageId); LPTSTR pszMessage = 0; DWORD dwMessage = 0; if(fSystem) { dwMessage = FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM, hModule, dwMessageId, LANG_USER_DEFAULT, (LPTSTR)&pszMessage, 128, &Ellipsis); } else { // we will use a string table. char szString[256]; if(LoadString(0, dwMessageId, szString, sizeof(szString))) dwMessage = FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_STRING, szString, dwMessageId, LANG_USER_DEFAULT, (LPTSTR)&pszMessage, 256, &Ellipsis); } va_end(Ellipsis); if (szModule) FreeLibrary(hModule); if (dwMessage) { Result = printit(pszMessage); LocalFree(pszMessage); } return Result; } void LogErrorConsole(LPTSTR szError) { DWORD dwLastError = GetLastError(); const int cbLastError = 1024; TCHAR szLastError[cbLastError]; FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, 0, dwLastError, LANG_USER_DEFAULT, szLastError, cbLastError, 0); LPTSTR lpszStrings[2]; lpszStrings[0] = szError; lpszStrings[1] = szLastError; const int cbErrorString = 1024; TCHAR szErrorString[cbErrorString]; FormatMessage(FORMAT_MESSAGE_FROM_HMODULE| FORMAT_MESSAGE_ARGUMENT_ARRAY, 0, MSG_ERROR, LANG_USER_DEFAULT, szErrorString, cbErrorString, (va_list*)lpszStrings); time_t dwTime; time(&dwTime); char* szTime = ctime(&dwTime); szTime[19] = 0; // printf("E %s %s", szTime + 11, szErrorString); char * buf; buf = new char [ 3 + strlen(szTime) - 11 + strlen(szErrorString) + 5 ]; sprintf( buf,"E %s %s", szTime + 11, szErrorString); printit(buf); delete [] buf; } void LogWarningConsole(DWORD dwEvent, LPTSTR szWarning) { DWORD dwLastError = GetLastError(); const int cbLastError = 1024; TCHAR szLastError[cbLastError]; FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, 0, dwLastError, LANG_USER_DEFAULT, szLastError, cbLastError, 0); LPTSTR lpszStrings[2]; lpszStrings[0] = szWarning; lpszStrings[1] = szLastError; const int cbWarningString = 1024; TCHAR szWarningString[cbWarningString]; FormatMessage(FORMAT_MESSAGE_FROM_HMODULE| FORMAT_MESSAGE_ARGUMENT_ARRAY, 0, dwEvent, LANG_USER_DEFAULT, szWarningString, cbWarningString, (va_list*)lpszStrings); time_t dwTime; time(&dwTime); char* szTime = ctime(&dwTime); szTime[19] = 0; // printf("W %s %s", szTime + 11, szWarningString); char * buf; buf = new char [ 3 + strlen(szTime) - 11 + strlen(szWarningString) + 5 ]; sprintf(buf ,"W %s %s", szTime + 11, szWarningString); printit(buf); delete [] buf; } void LogInfoConsole(DWORD dwEvent, LPTSTR szInformation) { LPTSTR lpszStrings[1]; lpszStrings[0] = szInformation; const int cbInfoString = 1024; TCHAR szInfoString[cbInfoString]; FormatMessage(FORMAT_MESSAGE_FROM_HMODULE| FORMAT_MESSAGE_ARGUMENT_ARRAY, 0, dwEvent, LANG_USER_DEFAULT, szInfoString, cbInfoString, (va_list*)lpszStrings); time_t dwTime; time(&dwTime); char* szTime = ctime(&dwTime); szTime[19] = 0; // printf("I %s %s", szTime + 11, szInfoString); char * buf; buf = new char [ 3 + strlen(szTime) - 11 + strlen(szInfoString) + 5 ]; sprintf(buf,"I %s %s", szTime + 11, szInfoString); printit(buf); delete [] buf; }