/*++ Copyright (c) 1995 Microsoft Corporation Module Name: services.c Abstract: IPX Router Console Monitoring and Configuration tool. Service Table monitoring. Author: Vadim Eydelman 06/07/1996 --*/ #include "precomp.h" #pragma hdrstop DWORD APIENTRY HelpService ( IN int argc, IN WCHAR *argv[] ) { DisplayIPXMessage (g_hModule, MSG_IPX_HELP_SERVICE); return 0; } DWORD APIENTRY ShowService ( IN int argc, IN WCHAR *argv[] ) { DWORD rc; if (g_hMIBServer) { IPX_MIB_GET_INPUT_DATA MibGetInputData; PIPX_SERVICE pSv; DWORD sz; MibGetInputData.TableId = IPX_SERV_TABLE; if (argc <= 2) { if (argc > 0) { ULONG val; UINT n; if ( (swscanf (argv[0], L"%4x%n", &val, &n) == 1) && (n == wcslen (argv[0]))) { MibGetInputData.MibIndex.ServicesTableIndex.ServiceType = (USHORT)val; if (argc > 1) { UINT count; count = wcstombs( MibGetInputData.MibIndex.ServicesTableIndex.ServiceName, argv[1], sizeof (MibGetInputData.MibIndex.ServicesTableIndex.ServiceName) ); if ((count > 0) && (count < sizeof (MibGetInputData.MibIndex.ServicesTableIndex.ServiceName))) { rc = MprAdminMIBEntryGet( g_hMIBServer, PID_IPX, IPX_PROTOCOL_BASE, &MibGetInputData, sizeof(IPX_MIB_GET_INPUT_DATA), (LPVOID * ) & pSv, &sz ); if (rc == NO_ERROR && pSv) { WCHAR InterfaceName[ MAX_INTERFACE_NAME_LEN + 1 ]; WCHAR IfName[ MAX_INTERFACE_NAME_LEN + 1 ]; DWORD dwSize = sizeof(IfName); rc = GetIpxInterfaceName( g_hMIBServer, pSv->InterfaceIndex, InterfaceName ); if (rc == NO_ERROR) { PWCHAR buffer; //====================================== // Translate the Interface Name //====================================== rc = IpmontrGetFriendlyNameFromIfName( InterfaceName, IfName, &dwSize ); if ( rc != NO_ERROR ) { DisplayIPXMessage( g_hModule, MSG_SERVICE_SCREEN_FMT, pSv->Server.Type, pSv->Server.Name, IfName, pSv->Server.HopCount, pSv->Server.Network[0], pSv->Server.Network[1], pSv->Server.Network[2], pSv->Server.Network[3], pSv->Server.Node[0], pSv->Server.Node[1], pSv->Server.Node[2], pSv->Server.Node[3], pSv->Server.Node[4], pSv->Server.Node[5], pSv->Server.Socket[0], pSv->Server.Socket[1], GetEnumString( g_hModule, pSv->Protocol, NUM_TOKENS_IN_TABLE( IpxProtocols ), IpxProtocols ) ); } } else { DisplayError( g_hModule, rc); } } else { DisplayError( g_hModule, rc); } MprAdminMIBBufferFree (pSv); } else { rc = ERROR_INVALID_PARAMETER; DisplayIPXMessage (g_hModule, MSG_IPX_HELP_SERVICE); } goto Exit; } else { MibGetInputData.MibIndex.ServicesTableIndex.ServiceName[0] = 0; rc = MprAdminMIBEntryGetNext( g_hMIBServer, PID_IPX, IPX_PROTOCOL_BASE, &MibGetInputData, sizeof(IPX_MIB_GET_INPUT_DATA), (LPVOID * ) & pSv, &sz ); } } else { rc = ERROR_INVALID_PARAMETER; DisplayIPXMessage (g_hModule, MSG_IPX_HELP_SERVICE); goto Exit; } } else { rc = MprAdminMIBEntryGetFirst( g_hMIBServer, PID_IPX, IPX_PROTOCOL_BASE, &MibGetInputData, sizeof(IPX_MIB_GET_INPUT_DATA), (LPVOID * ) & pSv, &sz ); } DisplayIPXMessage (g_hModule, MSG_SERVICE_TABLE_HDR); while ( (pSv) && (rc == NO_ERROR) && ((argc == 0) || (MibGetInputData.MibIndex.ServicesTableIndex.ServiceType == pSv->Server.Type))) { WCHAR InterfaceName[ MAX_INTERFACE_NAME_LEN + 1 ]; WCHAR IfName[ MAX_INTERFACE_NAME_LEN + 1 ]; DWORD rc1, dwSize = sizeof(IfName); rc1 = GetIpxInterfaceName( g_hMIBServer, pSv->InterfaceIndex, InterfaceName ); if (rc1 == NO_ERROR) { PWCHAR buffer; rc1 = IpmontrGetFriendlyNameFromIfName( InterfaceName, IfName, &dwSize ); if ( rc1 == NO_ERROR ) { DisplayIPXMessage( g_hModule, MSG_SERVICE_TABLE_FMT, pSv->Server.Type, pSv->Server.Name, IfName, pSv->Server.HopCount, GetEnumString( g_hModule, pSv->Protocol, NUM_TOKENS_IN_TABLE( IpxProtocols ), IpxProtocols ) ); } } else { DisplayError( g_hModule, rc1); } MibGetInputData.MibIndex.ServicesTableIndex.ServiceType = pSv->Server.Type; strncpy( MibGetInputData.MibIndex.ServicesTableIndex.ServiceName, pSv->Server.Name, sizeof (MibGetInputData.MibIndex.ServicesTableIndex.ServiceName) ); MprAdminBufferFree (pSv); rc = MprAdminMIBEntryGetNext( g_hMIBServer, PID_IPX, IPX_PROTOCOL_BASE, &MibGetInputData, sizeof(IPX_MIB_GET_INPUT_DATA), (LPVOID * ) & pSv, &sz ); } if (rc == NO_ERROR) { NOTHING; } else if (rc == ERROR_NO_MORE_ITEMS) { rc = NO_ERROR; } else { DisplayError( g_hModule, rc); } } else { DisplayIPXMessage (g_hModule, MSG_IPX_HELP_SERVICE); rc = ERROR_INVALID_PARAMETER; } } else { rc = ERROR_ROUTER_STOPPED; DisplayError( g_hModule, rc); } Exit: return rc ; }