286 lines
5 KiB
C
286 lines
5 KiB
C
|
/*++
|
||
|
|
||
|
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;
|
||
|
}
|