tnerror.cpp
上传用户:tigerk9
上传日期:2020-03-10
资源大小:237k
文件大小:6k
源码类别:

Telnet客户端

开发平台:

Visual C++

  1. ///////////////////////////////////////////////////////////////////////////////
  2. //Telnet Win32 : an ANSI telnet client.
  3. //Copyright (C) 1998-2000 Paul Brannan
  4. //Copyright (C) 1998 I.Ioannou
  5. //Copyright (C) 1997 Brad Johnson
  6. //
  7. //This program is free software; you can redistribute it and/or
  8. //modify it under the terms of the GNU General Public License
  9. //as published by the Free Software Foundation; either version 2
  10. //of the License, or (at your option) any later version.
  11. //
  12. //This program is distributed in the hope that it will be useful,
  13. //but WITHOUT ANY WARRANTY; without even the implied warranty of
  14. //MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  15. //GNU General Public License for more details.
  16. //
  17. //You should have received a copy of the GNU General Public License
  18. //along with this program; if not, write to the Free Software
  19. //Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  20. //
  21. //I.Ioannou
  22. //roryt@hol.gr
  23. //
  24. ///////////////////////////////////////////////////////////////////////////
  25. ///////////////////////////////////////////////////////////////////////////////
  26. //
  27. // Module: tnerror.cpp
  28. //
  29. // Contents: error reporting
  30. //
  31. // Product: telnet
  32. //
  33. // Revisions: June 15, 1998 Paul Brannan <pbranna@clemson.edu>
  34. //            May 15, 1998 Paul Brannan
  35. //            5.April.1997 jbj@nounname.com
  36. //            5.Dec.1996 jbj@nounname.com
  37. //            Version 2.0
  38. //
  39. //            02.Apr.1995 igor.milavec@uni-lj.si
  40. //   Original code
  41. //
  42. ///////////////////////////////////////////////////////////////////////////////
  43. #include "tnerror.h"
  44. #include "ttelhndl.h" // Paul Brannan 5/25/98
  45. #include "tnconfig.h" // Paul Brannan 5/25/98
  46. #include <time.h>
  47. #include <stdio.h>
  48. #include <stdarg.h>
  49. #include <stdlib.h>
  50. #ifndef LANG_USER_DEFAULT
  51. #define LANG_USER_DEFAULT 400
  52. #endif
  53. // This has been moved to tnconfig.cpp
  54. // int Telnet_Redir = 0;
  55. // Telnet_Redir is set to the value of the environment variable TELNET_REDIR
  56. // in main.
  57. int printit(const char * it){
  58. DWORD numwritten;
  59. if (!ini.get_output_redir()) {
  60. if (!WriteConsole(
  61. GetStdHandle(STD_OUTPUT_HANDLE), // handle of a console screen buffer
  62. it, // address of buffer to write from
  63. strlen(it), // number of characters to write
  64. &numwritten, // address of number of characters written
  65. 0  // reserved
  66. )) return -1;
  67. // FIX ME!!! We need to tell the console that the cursor has moved.
  68. // Does this mean making Console global?
  69. // Paul Brannan 6/14/98
  70. // Console.sync();
  71. }else{
  72. if (!WriteFile(
  73. GetStdHandle(STD_OUTPUT_HANDLE), // handle of a console screen buffer
  74. it, // address of buffer to write from
  75. strlen(it), // number of characters to write
  76. &numwritten, // address of number of characters written
  77. NULL // no overlapped I/O
  78. )) return -1;
  79. }
  80. return 0;
  81. }
  82. int printm(LPTSTR szModule, BOOL fSystem, DWORD dwMessageId, ...)
  83. {
  84. int Result = 0;
  85. HMODULE hModule = 0;
  86. if (szModule)
  87. hModule = LoadLibrary(szModule);
  88. va_list Ellipsis;
  89. va_start(Ellipsis, dwMessageId);
  90. LPTSTR pszMessage = 0;
  91. DWORD dwMessage = 0;
  92. if(fSystem) {
  93. dwMessage = FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER |
  94. FORMAT_MESSAGE_FROM_SYSTEM, hModule, dwMessageId,
  95. LANG_USER_DEFAULT, (LPTSTR)&pszMessage, 128, &Ellipsis);
  96. } else {
  97. // we will use a string table.
  98. char szString[256];
  99. if(LoadString(0, dwMessageId, szString, sizeof(szString)))
  100. dwMessage = FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER |
  101. FORMAT_MESSAGE_FROM_STRING, szString, dwMessageId,
  102. LANG_USER_DEFAULT, (LPTSTR)&pszMessage, 256, &Ellipsis);
  103. }
  104. va_end(Ellipsis);
  105. if (szModule)
  106. FreeLibrary(hModule);
  107. if (dwMessage) {
  108. Result = printit(pszMessage);
  109. LocalFree(pszMessage);
  110. }
  111. return Result;
  112. }
  113. void LogErrorConsole(LPTSTR szError)
  114. {
  115. DWORD dwLastError = GetLastError();
  116. const int cbLastError = 1024;
  117. TCHAR szLastError[cbLastError];
  118. FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, 0, dwLastError, LANG_USER_DEFAULT,
  119. szLastError, cbLastError, 0);
  120. LPTSTR lpszStrings[2];
  121. lpszStrings[0] = szError;
  122. lpszStrings[1] = szLastError;
  123. const int cbErrorString = 1024;
  124. TCHAR szErrorString[cbErrorString];
  125. FormatMessage(FORMAT_MESSAGE_FROM_HMODULE| FORMAT_MESSAGE_ARGUMENT_ARRAY,
  126. 0, MSG_ERROR, LANG_USER_DEFAULT,
  127. szErrorString, cbErrorString, (va_list*)lpszStrings);
  128. time_t dwTime;
  129. time(&dwTime);
  130. char* szTime = ctime(&dwTime);
  131. szTime[19] = 0;
  132. // printf("E %s %s", szTime + 11, szErrorString);
  133. char * buf;
  134. buf = new char [ 3 + strlen(szTime) - 11 + strlen(szErrorString) + 5 ];
  135. sprintf( buf,"E %s %s", szTime + 11, szErrorString);
  136. printit(buf);
  137. delete [] buf;
  138. }
  139. void LogWarningConsole(DWORD dwEvent, LPTSTR szWarning)
  140. {
  141. DWORD dwLastError = GetLastError();
  142. const int cbLastError = 1024;
  143. TCHAR szLastError[cbLastError];
  144. FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, 0, dwLastError, LANG_USER_DEFAULT,
  145. szLastError, cbLastError, 0);
  146. LPTSTR lpszStrings[2];
  147. lpszStrings[0] = szWarning;
  148. lpszStrings[1] = szLastError;
  149. const int cbWarningString = 1024;
  150. TCHAR szWarningString[cbWarningString];
  151. FormatMessage(FORMAT_MESSAGE_FROM_HMODULE| FORMAT_MESSAGE_ARGUMENT_ARRAY,
  152. 0, dwEvent, LANG_USER_DEFAULT,
  153. szWarningString, cbWarningString, (va_list*)lpszStrings);
  154. time_t dwTime;
  155. time(&dwTime);
  156. char* szTime = ctime(&dwTime);
  157. szTime[19] = 0;
  158. // printf("W %s %s", szTime + 11, szWarningString);
  159. char * buf;
  160. buf = new char [ 3 + strlen(szTime) - 11 + strlen(szWarningString) + 5 ];
  161. sprintf(buf ,"W %s %s", szTime + 11, szWarningString);
  162. printit(buf);
  163. delete [] buf;
  164. }
  165. void LogInfoConsole(DWORD dwEvent, LPTSTR szInformation)
  166. {
  167. LPTSTR lpszStrings[1];
  168. lpszStrings[0] = szInformation;
  169. const int cbInfoString = 1024;
  170. TCHAR szInfoString[cbInfoString];
  171. FormatMessage(FORMAT_MESSAGE_FROM_HMODULE| FORMAT_MESSAGE_ARGUMENT_ARRAY,
  172. 0, dwEvent, LANG_USER_DEFAULT,
  173. szInfoString, cbInfoString, (va_list*)lpszStrings);
  174. time_t dwTime;
  175. time(&dwTime);
  176. char* szTime = ctime(&dwTime);
  177. szTime[19] = 0;
  178. // printf("I %s %s", szTime + 11, szInfoString);
  179. char * buf;
  180. buf = new char [ 3 + strlen(szTime) - 11 + strlen(szInfoString) + 5 ];
  181. sprintf(buf,"I %s %s", szTime + 11, szInfoString);
  182. printit(buf);
  183. delete [] buf;
  184. }