|
|
/*++
Copyright (c) 1995 Microsoft Corporation
Module Name:
mibserv.c
Abstract:
The MIB services handling functions
Author:
Stefan Solomon 03/22/1995
Revision History:
--*/
#include "precomp.h"
#pragma hdrstop
/*++
Function: MibGetService
Descr:
--*/
DWORD MibGetService(PIPX_MIB_INDEX mip, PIPX_SERVICE Svp, PULONG ServiceSize) { if((Svp == NULL) || (*ServiceSize < sizeof(IPX_SERVICE))) {
*ServiceSize = sizeof(IPX_SERVICE); return ERROR_INSUFFICIENT_BUFFER; }
if(IsService(mip->ServicesTableIndex.ServiceType, mip->ServicesTableIndex.ServiceName, Svp)) {
return NO_ERROR; } else { return ERROR_INVALID_PARAMETER; } }
/*++
Function: MibGetFirstService
Descr:
--*/
DWORD MibGetFirstService(PIPX_MIB_INDEX mip, PIPX_SERVICE Svp, PULONG ServiceSize) { if((Svp == NULL) || (*ServiceSize < sizeof(IPX_SERVICE))) {
*ServiceSize = sizeof(IPX_SERVICE); return ERROR_INSUFFICIENT_BUFFER; }
return(GetFirstService(STM_ORDER_BY_TYPE_AND_NAME, 0, Svp)); }
/*++
Function: MibGetNextService
Descr:
--*/
DWORD MibGetNextService(PIPX_MIB_INDEX mip, PIPX_SERVICE Svp, PULONG ServiceSize) { if((Svp == NULL) || (*ServiceSize < sizeof(IPX_SERVICE))) {
*ServiceSize = sizeof(IPX_SERVICE); return ERROR_INSUFFICIENT_BUFFER; }
Svp->Server.Type = mip->ServicesTableIndex.ServiceType; memcpy(Svp->Server.Name, mip->ServicesTableIndex.ServiceName, 48);
return(GetNextService(STM_ORDER_BY_TYPE_AND_NAME, 0, Svp)); }
/*++
Function: MibCreateStaticService Descr:
--*/
DWORD MibCreateStaticService(PIPX_MIB_ROW MibRowp) { PIPX_SERVICE StaticSvp; DWORD rc; PICB icbp;
StaticSvp = &MibRowp->Service;
ACQUIRE_DATABASE_LOCK;
// check the interface exists
if((icbp=GetInterfaceByIndex(StaticSvp->InterfaceIndex)) == NULL) {
RELEASE_DATABASE_LOCK; return ERROR_INVALID_PARAMETER; }
rc = CreateStaticService(icbp, &StaticSvp->Server);
RELEASE_DATABASE_LOCK; return rc; }
/*++
Function: DeleteStaticService
Descr:
--*/
DWORD MibDeleteStaticService(PIPX_MIB_ROW MibRowp) { PIPX_SERVICE StaticSvp; DWORD rc;
StaticSvp = &MibRowp->Service;
ACQUIRE_DATABASE_LOCK;
// check the interface exists
if(GetInterfaceByIndex(StaticSvp->InterfaceIndex) == NULL) {
RELEASE_DATABASE_LOCK; return ERROR_INVALID_PARAMETER; }
rc = DeleteStaticService(StaticSvp->InterfaceIndex, &StaticSvp->Server);
RELEASE_DATABASE_LOCK; return rc; }
/*++
Function: MibGetStaticService
Descr:
--*/
DWORD MibGetStaticService(PIPX_MIB_INDEX mip, PIPX_SERVICE Svp, PULONG ServiceSize) { if((Svp == NULL) || (*ServiceSize < sizeof(IPX_SERVICE))) {
*ServiceSize = sizeof(IPX_SERVICE); return ERROR_INSUFFICIENT_BUFFER; }
Svp->InterfaceIndex = mip->StaticServicesTableIndex.InterfaceIndex; Svp->Server.Type = mip->StaticServicesTableIndex.ServiceType; memcpy(Svp->Server.Name, mip->StaticServicesTableIndex.ServiceName, 48); Svp->Protocol = IPX_PROTOCOL_STATIC;
return(GetFirstService(STM_ORDER_BY_INTERFACE_TYPE_NAME, STM_ONLY_THIS_INTERFACE | STM_ONLY_THIS_TYPE | STM_ONLY_THIS_NAME | STM_ONLY_THIS_PROTOCOL, Svp)); }
/*++
Function: MibGetFirstStaticService
Descr:
--*/
DWORD MibGetFirstStaticService(PIPX_MIB_INDEX mip, PIPX_SERVICE Svp, PULONG ServiceSize) { if((Svp == NULL) || (*ServiceSize < sizeof(IPX_SERVICE))) {
*ServiceSize = sizeof(IPX_SERVICE); return ERROR_INSUFFICIENT_BUFFER; }
// set the static protocol
Svp->Protocol = IPX_PROTOCOL_STATIC;
return(GetFirstService(STM_ORDER_BY_INTERFACE_TYPE_NAME, STM_ONLY_THIS_PROTOCOL, Svp)); }
/*++
Function: MibGetNextStaticService
Descr:
--*/
DWORD MibGetNextStaticService(PIPX_MIB_INDEX mip, PIPX_SERVICE Svp, PULONG ServiceSize) { if((Svp == NULL) || (*ServiceSize < sizeof(IPX_SERVICE))) {
*ServiceSize = sizeof(IPX_SERVICE); return ERROR_INSUFFICIENT_BUFFER; }
Svp->InterfaceIndex = mip->StaticServicesTableIndex.InterfaceIndex; Svp->Server.Type = mip->StaticServicesTableIndex.ServiceType; memcpy(Svp->Server.Name, mip->StaticServicesTableIndex.ServiceName, 48); Svp->Protocol = IPX_PROTOCOL_STATIC;
return(GetNextService(STM_ORDER_BY_INTERFACE_TYPE_NAME, STM_ONLY_THIS_PROTOCOL, Svp)); }
/*++
Function: MibSetStaticService Descr:
--*/
DWORD MibSetStaticService(PIPX_MIB_ROW MibRowp) { PIPX_SERVICE StaticSvp; DWORD rc; PICB icbp;
StaticSvp = &MibRowp->Service;
ACQUIRE_DATABASE_LOCK;
// check the interface exists
if((icbp=GetInterfaceByIndex(StaticSvp->InterfaceIndex)) == NULL) {
RELEASE_DATABASE_LOCK; return ERROR_INVALID_PARAMETER; }
DeleteStaticService(StaticSvp->InterfaceIndex, &StaticSvp->Server);
rc = CreateStaticService(icbp, &StaticSvp->Server);
RELEASE_DATABASE_LOCK; return rc; }
|