|
|
/*++
Copyright (c) 1995 Microsoft Corporation
Module Name:
nbifs.c
Abstract:
IPX Router Console Monitoring and Configuration tool. NBIPX Interface configuration and monitoring.
Author:
Vadim Eydelman 06/07/1996
--*/
#include "precomp.h"
#pragma hdrstop
DWORD MIBGetNbIpxIf( PWCHAR InterfaceNameW, HANDLE hFile );
DWORD CfgGetNbIpxIf ( LPWSTR InterfaceNameW, HANDLE hFile );
DWORD MIBEnumNbIpxIfs ( VOID );
DWORD CfgEnumNbIpxIfs ( VOID );
DWORD CfgSetNbIpxIf ( LPWSTR InterfaceNameW, PULONG pAccept OPTIONAL, PULONG pDeliver OPTIONAL );
DWORD AdmSetNbIpxIf ( LPWSTR InterfaceNameW, PULONG pAccept OPTIONAL, PULONG pDeliver OPTIONAL );
DWORD GetNbIpxClientIf ( PWCHAR InterfaceNameW, UINT msg, HANDLE hFile );
DWORD APIENTRY HelpNbIf ( IN int argc, IN WCHAR *argv[] ) { DisplayMessage (g_hModule, HLP_IPX_NBIF); return 0; }
DWORD APIENTRY ShowNbIf ( IN int argc, IN WCHAR *argv[], IN HANDLE hFile ) { WCHAR IfName[ MAX_INTERFACE_NAME_LEN ]; DWORD rc, dwSize = sizeof(IfName);
if (argc < 1) { if (g_hMIBServer) { rc = MIBEnumNbIpxIfs (); if (rc == NO_ERROR) { rc = GetNbIpxClientIf ( VAL_DIALINCLIENT, MSG_CLIENT_NBIF_MIB_TABLE_FMT, NULL ); } else { if ( !hFile ) { DisplayIPXMessage (g_hModule, MSG_REGISTRY_FALLBACK); } goto EnumerateThroughCfg; } } else { EnumerateThroughCfg:
rc = CfgEnumNbIpxIfs (); if (rc == NO_ERROR) { rc = GetNbIpxClientIf ( VAL_DIALINCLIENT, MSG_CLIENT_NBIF_CFG_TABLE_FMT, NULL ); } } }
else { unsigned count;
#define InterfaceNameW argv[0]
count = wcslen( InterfaceNameW );
if ( !_wcsicmp( argv[0], VAL_DIALINCLIENT ) ) { rc = GetNbIpxClientIf( VAL_DIALINCLIENT, MSG_CLIENT_NBIF_CFG_SCREEN_FMT, hFile ); } else if ((count > 0) && (count <= MAX_INTERFACE_NAME_LEN)) { if (g_hMIBServer) { //======================================
// Translate the Interface Name
//======================================
rc = IpmontrGetIfNameFromFriendlyName( InterfaceNameW, IfName, &dwSize );
if ( rc == NO_ERROR ) { rc = MIBGetNbIpxIf ( IfName, hFile ); if (rc != NO_ERROR) { if ( !hFile ) { DisplayIPXMessage (g_hModule, MSG_REGISTRY_FALLBACK); } goto GetIfFromCfg; } } else { if ( !hFile ) { DisplayError( g_hModule, rc ); } } } else { GetIfFromCfg: //======================================
// Translate the Interface Name
//======================================
rc = IpmontrGetIfNameFromFriendlyName( InterfaceNameW, IfName, &dwSize );
if ( rc == NO_ERROR ) { rc = CfgGetNbIpxIf ( IfName, hFile ); } else { if ( !hFile ) { DisplayError( g_hModule, rc ); } } } } else { if ( !hFile ) { DisplayIPXMessage (g_hModule, MSG_INVALID_INTERFACE_NAME); } rc = ERROR_INVALID_PARAMETER; } }
return rc; #undef InterfaceNameW
}
DWORD APIENTRY SetNbIf ( IN int argc, IN WCHAR *argv[] ) { LPWSTR InterfaceNameW; WCHAR IfName[ MAX_INTERFACE_NAME_LEN + 1 ]; DWORD rc, dwSize = sizeof(IfName);
if (argc >= 1) { unsigned count; BOOLEAN client = FALSE;
#define InterfaceNameW argv[0]
if ( !_wcsicmp( argv[0],VAL_DIALINCLIENT ) ) { client = TRUE; } else { count = wcslen (InterfaceNameW); }
if (client || ((count > 0) && (count <= MAX_INTERFACE_NAME_LEN))) { int i; ULONG accept, deliver; PULONG pAccept = NULL, pDeliver = NULL;
for ( i = 1; i < argc; i++ ) { if ( !_wcsicmp( argv[i], TOKEN_BCASTACCEPT ) ) { if ( (pAccept == NULL) && (i < argc - 1) && !MatchEnumTag( g_hModule, argv[i+1], NUM_TOKENS_IN_TABLE( AdminStates ), AdminStates, &accept ) ) { i += 1; pAccept = &accept; continue; } else { break; } } if ( !_wcsicmp( argv[i], TOKEN_BCASTDELIVER ) ) { if ( (pDeliver == NULL) && (i < argc - 1) && !MatchEnumTag (g_hModule, argv[i+1], NUM_TOKENS_IN_TABLE( NbDeliverStates ), NbDeliverStates, &deliver) ) { i += 1; pDeliver = &deliver; continue; } else { break; } } if (pAccept == NULL) { if ( !MatchEnumTag( g_hModule, argv[ i ], NUM_TOKENS_IN_TABLE( AdminStates ), AdminStates, &accept )) { pAccept = &accept; } else { break; } } else if (pDeliver == NULL) { if ( !MatchEnumTag( g_hModule, argv[i], NUM_TOKENS_IN_TABLE( NbDeliverStates ), NbDeliverStates, &deliver ) ) { pDeliver = &deliver; } else { break; } } else { break; } }
if (i == argc) { if (!client) { DWORD rc2; //======================================
// Translate the Interface Name
//======================================
rc = IpmontrGetIfNameFromFriendlyName( InterfaceNameW, IfName, &dwSize );
if ( rc == NO_ERROR ) { rc2 = CfgSetNbIpxIf( IfName, pAccept, pDeliver); if (rc2 == NO_ERROR) { if (g_hMprAdmin) { rc = AdmSetNbIpxIf( IfName, pAccept, pDeliver ); } } else { rc = rc2; } }
else { DisplayError( g_hModule, rc ); } } else { rc = CfgSetNbIpxIf (NULL, pAccept, pDeliver); if (rc == NO_ERROR) { if (g_hMprAdmin) { rc = AdmSetNbIpxIf (NULL, pAccept, pDeliver); } } } } else { DisplayMessage (g_hModule, HLP_IPX_NBIF); rc = ERROR_INVALID_PARAMETER; } }
else { DisplayIPXMessage (g_hModule, MSG_INVALID_INTERFACE_NAME); rc = ERROR_INVALID_PARAMETER; } }
else { DisplayMessage (g_hModule, HLP_IPX_NBIF); rc = ERROR_INVALID_PARAMETER; }
return rc; #undef InterfaceNameW
}
DWORD MIBGetNbIpxIf ( PWCHAR InterfaceNameW, HANDLE hFile ) { DWORD rc, i; DWORD sz; IPX_MIB_GET_INPUT_DATA MibGetInputData; PIPX_INTERFACE pIf; WCHAR IfName[ MAX_INTERFACE_NAME_LEN + 1 ]; DWORD dwSize = sizeof(IfName);
MibGetInputData.TableId = IPX_INTERFACE_TABLE; rc = GetIpxInterfaceIndex ( g_hMIBServer, InterfaceNameW, &MibGetInputData.MibIndex.InterfaceTableIndex.InterfaceIndex ); if (rc == NO_ERROR) { rc = MprAdminMIBEntryGet( g_hMIBServer, PID_IPX, IPX_PROTOCOL_BASE, &MibGetInputData, sizeof(IPX_MIB_GET_INPUT_DATA), (LPVOID * ) & pIf, &sz ); if (rc == NO_ERROR && pIf) { PWCHAR buffer[2];
//======================================
// Translate the Interface Name
//======================================
rc = IpmontrGetFriendlyNameFromIfName( InterfaceNameW, IfName, &dwSize );
if ( rc == NO_ERROR ) { buffer[ 0 ] = GetEnumString( g_hModule, pIf->NetbiosAccept, NUM_TOKENS_IN_TABLE( AdminStates ), AdminStates );
buffer[ 1 ] = GetEnumString( g_hModule, pIf->NetbiosDeliver, NUM_TOKENS_IN_TABLE( NbDeliverStates ), NbDeliverStates );
if ( buffer[ 0 ] && buffer[ 1 ] ) { if ( hFile ) { DisplayMessageT( DMP_IPX_NB_SET_INTERFACE, IfName, buffer[ 0 ], buffer[ 1 ] ); }
else { DisplayIPXMessage( g_hModule, MSG_NBIF_MIB_SCREEN_FMT, IfName, buffer[ 0 ], buffer[ 1 ], pIf->IfStats.NetbiosReceived, pIf->IfStats.NetbiosSent ); } } } MprAdminMIBBufferFree (pIf); } else { if ( !hFile ) { DisplayError( g_hModule, rc); } } }
else { if ( !hFile ) { DisplayError( g_hModule, rc); } } return rc; }
DWORD CfgGetNbIpxIf ( LPWSTR InterfaceNameW, HANDLE hFile ) { DWORD rc; DWORD sz; HANDLE hIfCfg; WCHAR IfName[ MAX_INTERFACE_NAME_LEN + 1 ]; DWORD dwSize = sizeof(IfName);
rc = MprConfigInterfaceGetHandle ( g_hMprConfig, InterfaceNameW, &hIfCfg ); if ( rc == NO_ERROR ) { HANDLE hIfTrCfg;
rc = MprConfigInterfaceTransportGetHandle ( g_hMprConfig, hIfCfg, PID_IPX, &hIfTrCfg ); if (rc == NO_ERROR) { LPBYTE pIfBlock; rc = MprConfigInterfaceTransportGetInfo ( g_hMprConfig, hIfCfg, hIfTrCfg, &pIfBlock, &sz ); if (rc == NO_ERROR) { PIPX_TOC_ENTRY pIpxToc;
pIpxToc = GetIPXTocEntry ( (PIPX_INFO_BLOCK_HEADER)pIfBlock, IPX_INTERFACE_INFO_TYPE); if (pIpxToc != NULL) { DWORD i; PIPX_IF_INFO pIpxInfo; PWCHAR buffer[2];
pIpxInfo = (PIPX_IF_INFO) (pIfBlock + pIpxToc->Offset);
//======================================
// Translate the Interface Name
//======================================
rc = IpmontrGetFriendlyNameFromIfName( InterfaceNameW, IfName, &dwSize );
if ( rc == NO_ERROR ) { buffer[ 0 ] = GetEnumString( g_hModule, pIpxInfo->NetbiosAccept, NUM_TOKENS_IN_TABLE( AdminStates ), AdminStates );
buffer[ 1 ] = GetEnumString( g_hModule, pIpxInfo->NetbiosDeliver, NUM_TOKENS_IN_TABLE( NbDeliverStates ), NbDeliverStates );
if ( buffer[ 0 ] && buffer[ 1 ] ) { if ( hFile ) { DisplayMessageT( DMP_IPX_NB_SET_INTERFACE, IfName, buffer[ 0 ], buffer[ 1 ] ); }
else { DisplayIPXMessage( g_hModule, MSG_NBIF_CFG_SCREEN_FMT, IfName, buffer[ 0 ], buffer[ 1 ] ); } } } } else { if ( !hFile ) { DisplayIPXMessage (g_hModule, MSG_INTERFACE_INFO_CORRUPTED); } rc = ERROR_INVALID_DATA; } } else if ((rc == ERROR_FILE_NOT_FOUND) || (rc == ERROR_NO_MORE_ITEMS)) { if ( !hFile ) { DisplayIPXMessage (g_hModule, MSG_NO_IPX_ON_INTERFACE_CFG); } } else { if ( !hFile ) { DisplayError( g_hModule, rc); } } } else { if ( !hFile ) { DisplayError( g_hModule, rc); } } }
else if ((rc == ERROR_FILE_NOT_FOUND) || (rc == ERROR_NO_MORE_ITEMS)) { if ( !hFile ) { DisplayError( g_hModule, ERROR_NO_SUCH_INTERFACE); } } else { if ( !hFile ) { DisplayError( g_hModule, rc); } }
return rc; }
DWORD GetNbIpxClientIf ( PWCHAR InterfaceName, UINT msg, HANDLE hFile ) { DWORD rc; LPBYTE pClBlock; HANDLE hTrCfg;
hTrCfg = NULL; if (g_hMprAdmin) { DWORD sz; rc = MprAdminTransportGetInfo( g_hMprAdmin, PID_IPX, NULL, NULL, &pClBlock, &sz ); if (rc == NO_ERROR) { } else { if ((rc == ERROR_FILE_NOT_FOUND) || (rc == ERROR_NO_MORE_ITEMS)) { if ( !hFile ) { DisplayIPXMessage (g_hModule, MSG_NO_IPX_IN_ROUTER_ADM); } } else { if ( !hFile ) { DisplayError( g_hModule, rc); } } if ( !hFile ) { DisplayIPXMessage (g_hModule, MSG_REGISTRY_FALLBACK); } goto GetFromCfg; } } else { GetFromCfg:
rc = MprConfigTransportGetHandle ( g_hMprConfig, PID_IPX, &hTrCfg ); if (rc == NO_ERROR) { DWORD sz;
rc = MprConfigTransportGetInfo ( g_hMprConfig, hTrCfg, NULL, NULL, &pClBlock, &sz, NULL ); if (rc == NO_ERROR) { NOTHING; } else { if ( !hFile ) { DisplayError( g_hModule, rc); } } } else { if ((rc == ERROR_FILE_NOT_FOUND) || (rc == ERROR_NO_MORE_ITEMS)) { if ( !hFile ) { DisplayIPXMessage (g_hModule, MSG_NO_IPX_IN_ROUTER_ADM); } } else { if ( !hFile ) { DisplayError( g_hModule, rc); } } } }
if (rc == NO_ERROR) { DWORD i; PIPX_TOC_ENTRY pIpxToc;
pIpxToc = GetIPXTocEntry( (PIPX_INFO_BLOCK_HEADER)pClBlock, IPX_INTERFACE_INFO_TYPE ); if (pIpxToc != NULL) { PIPX_IF_INFO pIpxInfo; PWCHAR buffer[2]; pIpxInfo = (PIPX_IF_INFO) (pClBlock + pIpxToc->Offset);
buffer[ 0 ] = GetEnumString( g_hModule, pIpxInfo->NetbiosAccept, NUM_TOKENS_IN_TABLE( AdminStates ), AdminStates );
buffer[ 1 ] = GetEnumString( g_hModule, pIpxInfo->NetbiosDeliver, NUM_TOKENS_IN_TABLE( NbDeliverStates ), NbDeliverStates );
if ( buffer[ 0 ] && buffer[ 1 ] ) { if ( hFile ) { DisplayMessageT( DMP_IPX_NB_SET_INTERFACE, InterfaceName, buffer[ 0 ], buffer[ 1 ] ); }
else { DisplayIPXMessage( g_hModule, msg, InterfaceName, buffer[ 0 ], buffer[ 1 ] ); } } } else { if ( !hFile ) { DisplayIPXMessage (g_hModule, MSG_INTERFACE_INFO_CORRUPTED); } rc = ERROR_INVALID_DATA; } if (hTrCfg != NULL) { MprConfigBufferFree (pClBlock); } else { MprAdminBufferFree (pClBlock); } } return rc; }
PIPX_IF_INFO GetIpxNbInterface( HANDLE hIf, LPBYTE *pIfBlock ) { DWORD dwSize; DWORD dwErr; PIPX_TOC_ENTRY pIpxToc;
dwErr = MprAdminInterfaceTransportGetInfo( g_hMprAdmin, hIf, PID_IPX, pIfBlock, &dwSize );
if (dwErr != NO_ERROR) { return NULL; }
pIpxToc = GetIPXTocEntry( (PIPX_INFO_BLOCK_HEADER)(*pIfBlock), IPX_INTERFACE_INFO_TYPE ); if (!pIpxToc) { return NULL; }
return (PIPX_IF_INFO)((*pIfBlock) + (pIpxToc->Offset));
// return (PIPX_IF_INFO)GetIPXTocEntry((PIPX_INFO_BLOCK_HEADER)(*pIfBlock),IPX_INTERFACE_INFO_TYPE);
}
DWORD MIBEnumNbIpxIfs( VOID ) { PMPR_INTERFACE_0 IfList = NULL;
DWORD dwErr = 0, dwRead, dwTot, i, j, rc;
PWCHAR buffer[4];
PIPX_IF_INFO pIpxInfo = NULL;
LPBYTE buf = NULL;
WCHAR IfName[ MAX_INTERFACE_NAME_LEN + 1 ]; DWORD dwSize = sizeof(IfName);
DisplayIPXMessage ( g_hModule, MSG_NBIF_MIB_TABLE_HDR );
dwErr = MprAdminInterfaceEnum( g_hMprAdmin, 0, (unsigned char **) & IfList, MAXULONG, &dwRead, &dwTot, NULL ); if (dwErr != NO_ERROR) { return dwErr; }
for (i = 0; i < dwRead; i++) { if ((pIpxInfo = GetIpxNbInterface(IfList[i].hInterface, &buf)) != NULL) { //======================================
// Translate the Interface Name
//======================================
rc = IpmontrGetFriendlyNameFromIfName( IfList[i].wszInterfaceName, IfName, &dwSize );
if ( rc == NO_ERROR ) { buffer[ 0 ] = GetEnumString( g_hModule, pIpxInfo->NetbiosAccept, NUM_TOKENS_IN_TABLE( AdminStates ), AdminStates );
buffer[ 1 ] = GetEnumString( g_hModule, pIpxInfo->NetbiosDeliver, NUM_TOKENS_IN_TABLE( NbDeliverStates ), NbDeliverStates );
if ( buffer[ 0 ] && buffer[ 1 ] ) { DisplayIPXMessage( g_hModule, MSG_NBIF_MIB_TABLE_FMT, IfName, buffer[ 0 ], buffer[ 1 ] ); } } } if (buf) { MprAdminBufferFree(buf); }
buf = NULL; }
return NO_ERROR; }
/*
DWORD MIBEnumNbIpxIfs ( VOID ) { DWORD rc; DWORD sz; IPX_MIB_GET_INPUT_DATA MibGetInputData; PIPX_INTERFACE pIf;
DisplayIPXMessage (g_hModule, MSG_NBIF_MIB_TABLE_HDR); MibGetInputData.TableId = IPX_INTERFACE_TABLE; rc = MprAdminMIBEntryGetFirst ( g_hMIBServer, PID_IPX, IPX_PROTOCOL_BASE, &MibGetInputData, sizeof(IPX_MIB_GET_INPUT_DATA), (LPVOID *)&pIf, &sz); while (rc==NO_ERROR) { WCHAR buffer[2][MAX_VALUE]; HANDLE hIfCfg; WCHAR InterfaceNameW[MAX_INTERFACE_NAME_LEN+1]; pIf->InterfaceName[47]=0; mbstowcs (InterfaceNameW, pIf->InterfaceName, sizeof (InterfaceNameW));
//======================================
// Translate the Interface Name
//======================================
if ((rc=(*(Params->IfName2DescA))(pIf->InterfaceName, Params->IfNamBufferA, &Params->IfNamBufferLength)) != NO_ERROR) { return rc; } //======================================
if (MprConfigInterfaceGetHandle ( g_hMprConfig, InterfaceNameW, &hIfCfg)==NO_ERROR) { DisplayIPXMessage (g_hModule, MSG_NBIF_MIB_TABLE_FMT, pIf->InterfaceName, //Params->IfNamBufferA,
GetValueString (g_hModule, Utils, AdminStates, pIf->NetbiosAccept, buffer[0]), GetValueString (g_hModule, Utils, NbDeliverStates, pIf->NetbiosDeliver, buffer[1]) ); } MibGetInputData.MibIndex.InterfaceTableIndex.InterfaceIndex = pIf->InterfaceIndex; MprAdminMIBBufferFree (pIf); rc = MprAdminMIBEntryGetNext ( g_hMIBServer, PID_IPX, IPX_PROTOCOL_BASE, &MibGetInputData, sizeof(IPX_MIB_GET_INPUT_DATA), (LPVOID *)&pIf, &sz); } if (rc==ERROR_NO_MORE_ITEMS) return NO_ERROR; else { if (rc==NO_ERROR) rc = ERROR_GEN_FAILURE; DisplayError( g_hModule, rc); return rc; } } */
DWORD CfgEnumNbIpxIfs ( VOID ) { DWORD rc = NO_ERROR; DWORD read, total, processed = 0, i, j; DWORD hResume = 0; DWORD sz; PMPR_INTERFACE_0 pRi0; WCHAR IfName[ MAX_INTERFACE_NAME_LEN + 1 ]; DWORD dwSize = sizeof(IfName);
DisplayIPXMessage (g_hModule, MSG_NBIF_CFG_TABLE_HDR); do { rc = MprConfigInterfaceEnum ( g_hMprConfig, 0, (LPBYTE * ) & pRi0, MAXULONG, &read, &total, &hResume ); if ( rc == NO_ERROR ) { for (i = 0; i < read; i++) { HANDLE hIfTrCfg;
rc = MprConfigInterfaceTransportGetHandle( g_hMprConfig, pRi0[i].hInterface, PID_IPX, &hIfTrCfg ); if (rc == NO_ERROR) { LPBYTE pIfBlock; rc = MprConfigInterfaceTransportGetInfo ( g_hMprConfig, pRi0[i].hInterface, hIfTrCfg, &pIfBlock, &sz ); if (rc == NO_ERROR) { PIPX_TOC_ENTRY pIpxToc;
pIpxToc = GetIPXTocEntry( (PIPX_INFO_BLOCK_HEADER)pIfBlock, IPX_INTERFACE_INFO_TYPE ); if (pIpxToc != NULL) { PIPX_IF_INFO pIpxInfo; PWCHAR buffer[2];
pIpxInfo = (PIPX_IF_INFO) (pIfBlock + pIpxToc->Offset);
//======================================
// Translate the Interface Name
//======================================
rc = IpmontrGetFriendlyNameFromIfName( pRi0[i].wszInterfaceName, IfName, &dwSize );
if ( rc == NO_ERROR ) { buffer[ 0 ] = GetEnumString( g_hModule, pIpxInfo->NetbiosAccept, NUM_TOKENS_IN_TABLE( AdminStates ), AdminStates );
buffer[ 1 ] = GetEnumString( g_hModule, pIpxInfo->NetbiosDeliver, NUM_TOKENS_IN_TABLE( NbDeliverStates ), NbDeliverStates );
if ( buffer[ 0 ] && buffer[ 1 ] ) { DisplayIPXMessage( g_hModule, MSG_NBIF_CFG_TABLE_FMT, IfName, buffer[ 0 ], buffer[ 1 ] ); } } } else { DisplayIPXMessage (g_hModule, MSG_INTERFACE_INFO_CORRUPTED); rc = ERROR_INVALID_DATA; } } else if (rc != ERROR_NO_MORE_ITEMS) { // No IPX installed
DisplayError( g_hModule, rc); } } else { //DisplayError( g_hModule, rc);
rc = NO_ERROR; } } processed += read; MprConfigBufferFree (pRi0); } else { DisplayError( g_hModule, rc); break; } } while (processed < total);
return rc; }
DWORD CfgSetNbIpxIf ( LPWSTR InterfaceNameW, PULONG pAccept OPTIONAL, PULONG pDeliver OPTIONAL ) { DWORD rc; DWORD sz; HANDLE hTrCfg; HANDLE hIfCfg; HANDLE hIfTrCfg; LPBYTE pIfBlock;
if (InterfaceNameW != NULL) { rc = MprConfigInterfaceGetHandle( g_hMprConfig, InterfaceNameW, &hIfCfg ); if (rc == NO_ERROR) { rc = MprConfigInterfaceTransportGetHandle ( g_hMprConfig, hIfCfg, PID_IPX, &hIfTrCfg ); if (rc == NO_ERROR) { rc = MprConfigInterfaceTransportGetInfo ( g_hMprConfig, hIfCfg, hIfTrCfg, &pIfBlock, &sz ); } } } else { rc = MprConfigTransportGetHandle ( g_hMprConfig, PID_IPX, &hTrCfg ); if (rc == NO_ERROR) { rc = MprConfigTransportGetInfo ( g_hMprConfig, hTrCfg, NULL, NULL, &pIfBlock, &sz, NULL ); } }
if (rc == NO_ERROR) { PIPX_TOC_ENTRY pIpxToc;
pIpxToc = GetIPXTocEntry ( (PIPX_INFO_BLOCK_HEADER)pIfBlock, IPX_INTERFACE_INFO_TYPE ); if (pIpxToc != NULL) { PIPX_IF_INFO pIpxInfo;
pIpxInfo = (PIPX_IF_INFO) (pIfBlock + pIpxToc->Offset);
if (ARGUMENT_PRESENT (pAccept)) { pIpxInfo->NetbiosAccept = *pAccept; } if (ARGUMENT_PRESENT (pDeliver)) { pIpxInfo->NetbiosDeliver = *pDeliver; }
if (InterfaceNameW != NULL) { rc = MprConfigInterfaceTransportSetInfo ( g_hMprConfig, hIfCfg, hIfTrCfg, pIfBlock, sz ); } else { rc = MprConfigTransportSetInfo ( g_hMprConfig, hTrCfg, NULL, 0, pIfBlock, sz, NULL ); } if (rc == NO_ERROR) { if (InterfaceNameW != NULL) { DisplayIPXMessage (g_hModule, MSG_NBIF_SET_CFG, InterfaceNameW ); } } else { DisplayIPXMessage (g_hModule, MSG_CLIENT_NBIF_SET_CFG ); } } else { DisplayIPXMessage (g_hModule, MSG_INTERFACE_INFO_CORRUPTED); rc = ERROR_INVALID_DATA; } MprConfigBufferFree (pIfBlock); } else { DisplayError( g_hModule, rc); }
return rc; }
DWORD AdmSetNbIpxIf ( LPWSTR InterfaceNameW, PULONG pAccept OPTIONAL, PULONG pDeliver OPTIONAL ) { DWORD rc; DWORD sz; HANDLE hIfAdm; LPBYTE pIfBlock;
if (InterfaceNameW != NULL) { rc = MprAdminInterfaceGetHandle ( g_hMprAdmin, InterfaceNameW, &hIfAdm, FALSE ); if (rc == NO_ERROR) { rc = MprAdminInterfaceTransportGetInfo ( g_hMprAdmin, hIfAdm, PID_IPX, &pIfBlock, &sz ); } } else { rc = MprAdminTransportGetInfo ( g_hMprAdmin, PID_IPX, NULL, NULL, &pIfBlock, &sz ); if (rc == NO_ERROR) { if (pIfBlock == NULL) return rc; } }
if (rc == NO_ERROR) { PIPX_TOC_ENTRY pIpxToc;
pIpxToc = GetIPXTocEntry ( (PIPX_INFO_BLOCK_HEADER)pIfBlock, IPX_INTERFACE_INFO_TYPE ); if (pIpxToc != NULL) { PIPX_IF_INFO pIpxInfo;
pIpxInfo = (PIPX_IF_INFO)(pIfBlock + pIpxToc->Offset);
if (ARGUMENT_PRESENT (pAccept)) { pIpxInfo->NetbiosAccept = *pAccept; } if (ARGUMENT_PRESENT (pDeliver)) { pIpxInfo->NetbiosDeliver = *pDeliver; }
if (InterfaceNameW != NULL) { rc = MprAdminInterfaceTransportSetInfo ( g_hMprAdmin, hIfAdm, PID_IPX, pIfBlock, ((PIPX_INFO_BLOCK_HEADER)pIfBlock)->Size ); } else { rc = MprAdminTransportSetInfo ( g_hMprAdmin, PID_IPX, NULL, 0, pIfBlock, ((PIPX_INFO_BLOCK_HEADER)pIfBlock)->Size ); }
if (rc == NO_ERROR) { if (InterfaceNameW != NULL) { DisplayIPXMessage ( g_hModule,MSG_NBIF_SET_ADM, InterfaceNameW ); } else { DisplayIPXMessage (g_hModule, MSG_CLIENT_NBIF_SET_ADM); } } else { DisplayError( g_hModule, rc); } } else { DisplayIPXMessage (g_hModule, MSG_INTERFACE_INFO_CORRUPTED); rc = ERROR_INVALID_DATA; } MprAdminBufferFree (pIfBlock); } else { DisplayError( g_hModule, rc); }
return rc; }
|