Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

391 lines
8.7 KiB

  1. /*++
  2. Copyright (c) 1995 Microsoft Corporation
  3. Module Name:
  4. ripgl.c
  5. Abstract:
  6. IPX Router Console Monitoring and Configuration tool.
  7. RIP Global configuration.
  8. Author:
  9. Vadim Eydelman 06/07/1996
  10. --*/
  11. #include "precomp.h"
  12. #pragma hdrstop
  13. DWORD
  14. CfgSetRipGlInfo(
  15. IN DWORD *pLogLevel OPTIONAL
  16. );
  17. DWORD
  18. AdmSetRipGlInfo(
  19. IN DWORD *pLogLevel OPTIONAL
  20. );
  21. DWORD
  22. APIENTRY
  23. HelpRipGl (
  24. IN int argc,
  25. IN WCHAR *argv[]
  26. )
  27. {
  28. DisplayMessage (g_hModule, HLP_IPX_RIPGL );
  29. return 0;
  30. }
  31. DWORD
  32. APIENTRY
  33. ShowRipGl (
  34. IN int argc,
  35. IN WCHAR *argv[],
  36. IN HANDLE hFile
  37. )
  38. {
  39. DWORD rc;
  40. LPBYTE pGlBlock;
  41. DWORD sz;
  42. HANDLE hTrCfg = NULL;
  43. if (g_hMprAdmin)
  44. {
  45. rc = MprAdminTransportGetInfo(
  46. g_hMprAdmin, PID_IPX, &pGlBlock, &sz, NULL, NULL
  47. );
  48. if (rc == NO_ERROR)
  49. {
  50. }
  51. else
  52. {
  53. goto GetFromCfg;
  54. }
  55. }
  56. else
  57. {
  58. GetFromCfg:
  59. rc = MprConfigTransportGetHandle (
  60. g_hMprConfig, PID_IPX, &hTrCfg
  61. );
  62. if (rc == NO_ERROR)
  63. {
  64. rc = MprConfigTransportGetInfo (
  65. g_hMprConfig, hTrCfg, &pGlBlock, &sz,
  66. NULL, NULL, NULL
  67. );
  68. }
  69. }
  70. if (rc == NO_ERROR)
  71. {
  72. PIPX_TOC_ENTRY pRipGlToc;
  73. pRipGlToc = GetIPXTocEntry (
  74. (PIPX_INFO_BLOCK_HEADER)pGlBlock,
  75. IPX_PROTOCOL_RIP
  76. );
  77. if ( pRipGlToc != NULL )
  78. {
  79. PRIP_GLOBAL_INFO pRipGlInfo;
  80. PWCHAR buffer;
  81. pRipGlInfo = (PRIP_GLOBAL_INFO)
  82. (pGlBlock + pRipGlToc->Offset);
  83. buffer = GetEnumString(
  84. g_hModule, pRipGlInfo->EventLogMask,
  85. NUM_TOKENS_IN_TABLE( LogLevels ),
  86. LogLevels
  87. );
  88. if ( buffer )
  89. {
  90. if ( hFile )
  91. {
  92. DisplayMessageT( DMP_IPX_RIP_SET_GLOBAL, buffer );
  93. }
  94. else
  95. {
  96. DisplayIPXMessage(
  97. g_hModule, MSG_RIP_GLOBAL_FMT, buffer
  98. );
  99. }
  100. }
  101. else
  102. {
  103. rc = ERROR_NOT_ENOUGH_MEMORY;
  104. if ( !hFile )
  105. {
  106. DisplayError( g_hModule, rc );
  107. }
  108. }
  109. }
  110. else
  111. {
  112. rc = ERROR_INVALID_DATA;
  113. if ( !hFile )
  114. {
  115. DisplayIPXMessage (g_hModule, MSG_ROUTER_INFO_CORRUPTED);
  116. }
  117. }
  118. if (hTrCfg != NULL)
  119. {
  120. MprConfigBufferFree (pGlBlock);
  121. }
  122. else
  123. {
  124. MprAdminBufferFree (pGlBlock);
  125. }
  126. }
  127. else
  128. {
  129. if ( !hFile )
  130. {
  131. DisplayError( g_hModule, rc );
  132. }
  133. }
  134. return rc;
  135. }
  136. DWORD
  137. APIENTRY
  138. SetRipGl (
  139. IN int argc,
  140. IN WCHAR *argv[]
  141. )
  142. {
  143. DWORD rc;
  144. if (argc >= 1)
  145. {
  146. int i;
  147. unsigned n;
  148. DWORD logLevel;
  149. DWORD * pLogLevel = NULL;
  150. for (i = 0; i < argc; i++)
  151. {
  152. if ( !_wcsicmp( argv[i], TOKEN_LOGLEVEL ) )
  153. {
  154. if ( (pLogLevel == NULL)
  155. && (i < argc - 1)
  156. && !MatchEnumTag( g_hModule, argv[i+1],
  157. NUM_TOKENS_IN_TABLE( LogLevels ), LogLevels,
  158. &logLevel) )
  159. {
  160. i += 1;
  161. pLogLevel = &logLevel;
  162. continue;
  163. }
  164. else
  165. {
  166. break;
  167. }
  168. }
  169. if (pLogLevel == NULL)
  170. {
  171. if (!MatchEnumTag( g_hModule, argv[i],
  172. NUM_TOKENS_IN_TABLE( LogLevels ), LogLevels,
  173. &logLevel) )
  174. {
  175. pLogLevel = &logLevel;
  176. }
  177. }
  178. else
  179. {
  180. break;
  181. }
  182. }
  183. if (i == argc)
  184. {
  185. rc = CfgSetRipGlInfo (pLogLevel);
  186. if (rc == NO_ERROR)
  187. {
  188. if (g_hMprAdmin) { AdmSetRipGlInfo (pLogLevel); }
  189. }
  190. }
  191. else
  192. {
  193. DisplayMessage (g_hModule, HLP_IPX_RIPGL);
  194. rc = ERROR_INVALID_PARAMETER;
  195. }
  196. }
  197. else
  198. {
  199. DisplayMessage (g_hModule, HLP_IPX_RIPGL);
  200. rc = ERROR_INVALID_PARAMETER;
  201. }
  202. return rc;
  203. }
  204. DWORD
  205. CfgSetRipGlInfo (
  206. IN DWORD *pLogLevel OPTIONAL
  207. )
  208. {
  209. DWORD rc;
  210. HANDLE hTrCfg;
  211. rc = MprConfigTransportGetHandle(
  212. g_hMprConfig, PID_IPX, &hTrCfg
  213. );
  214. if (rc == NO_ERROR)
  215. {
  216. DWORD sz;
  217. LPBYTE pGlBlock;
  218. rc = MprConfigTransportGetInfo(
  219. g_hMprConfig, hTrCfg, &pGlBlock, &sz, NULL, NULL, NULL
  220. );
  221. if ( rc == NO_ERROR )
  222. {
  223. PIPX_TOC_ENTRY pRipGlToc;
  224. pRipGlToc = GetIPXTocEntry(
  225. (PIPX_INFO_BLOCK_HEADER)pGlBlock,
  226. IPX_PROTOCOL_RIP
  227. );
  228. if (pRipGlToc != NULL)
  229. {
  230. PRIP_GLOBAL_INFO pRipGlInfo;
  231. pRipGlInfo = (PRIP_GLOBAL_INFO)
  232. (pGlBlock + pRipGlToc->Offset);
  233. if (pLogLevel)
  234. {
  235. pRipGlInfo->EventLogMask = *pLogLevel;
  236. }
  237. rc = MprConfigTransportSetInfo(
  238. g_hMprConfig, hTrCfg, pGlBlock, sz, NULL, 0, NULL
  239. );
  240. if (rc == NO_ERROR)
  241. {
  242. DisplayIPXMessage(
  243. g_hModule, MSG_RIPGL_SET_CFG
  244. );
  245. }
  246. else
  247. {
  248. DisplayError( g_hModule, rc );
  249. }
  250. }
  251. else
  252. {
  253. DisplayIPXMessage (g_hModule, MSG_ROUTER_INFO_CORRUPTED);
  254. rc = ERROR_INVALID_DATA;
  255. }
  256. MprConfigBufferFree (pGlBlock);
  257. }
  258. else
  259. {
  260. DisplayError( g_hModule, rc);
  261. }
  262. }
  263. else
  264. {
  265. DisplayError( g_hModule, rc);
  266. }
  267. return rc;
  268. }
  269. DWORD
  270. AdmSetRipGlInfo (
  271. IN DWORD *pLogLevel OPTIONAL
  272. )
  273. {
  274. DWORD rc;
  275. LPBYTE pGlBlock;
  276. DWORD sz;
  277. rc = MprAdminTransportGetInfo(
  278. g_hMprAdmin, PID_IPX, &pGlBlock, &sz, NULL, NULL
  279. );
  280. if (rc == NO_ERROR)
  281. {
  282. PIPX_TOC_ENTRY pRipGlToc;
  283. pRipGlToc = GetIPXTocEntry(
  284. (PIPX_INFO_BLOCK_HEADER)pGlBlock,
  285. IPX_PROTOCOL_RIP
  286. );
  287. if ( pRipGlToc != NULL )
  288. {
  289. PRIP_GLOBAL_INFO pRipGlInfo;
  290. pRipGlInfo = (PRIP_GLOBAL_INFO)
  291. (pGlBlock + pRipGlToc->Offset);
  292. if (pLogLevel)
  293. {
  294. pRipGlInfo->EventLogMask = *pLogLevel;
  295. }
  296. rc = MprAdminTransportSetInfo(
  297. g_hMprAdmin, PID_IPX, pGlBlock, sz, NULL, 0
  298. );
  299. if (rc == NO_ERROR)
  300. {
  301. DisplayIPXMessage (g_hModule, MSG_RIPGL_SET_ADM );
  302. }
  303. else
  304. {
  305. DisplayError( g_hModule, rc);
  306. }
  307. }
  308. else
  309. {
  310. DisplayIPXMessage (g_hModule, MSG_ROUTER_INFO_CORRUPTED);
  311. rc = ERROR_INVALID_DATA;
  312. }
  313. MprConfigBufferFree (pGlBlock);
  314. }
  315. else
  316. {
  317. DisplayError( g_hModule, rc);
  318. }
  319. return rc;
  320. }