177 lines
4.5 KiB
C
177 lines
4.5 KiB
C
/*++ BUILD Version: 0009 // Increment this if a change has global effects
|
||
Copyright (c) 1987-1993 Microsoft Corporation
|
||
|
||
Module Name:
|
||
|
||
srvcall.c
|
||
|
||
Abstract:
|
||
|
||
This module implements the routines for handling the creation/manipulation of
|
||
server entries in the connection engine database. It also contains the routines
|
||
for parsing the negotiate response from the server.
|
||
|
||
Author:
|
||
|
||
Balan Sethu Raman (SethuR) 06-Mar-95 Created
|
||
|
||
--*/
|
||
|
||
#include "precomp.h"
|
||
#pragma hdrstop
|
||
|
||
|
||
RXDT_DefineCategory(SRVCALL);
|
||
#define Dbg (DEBUG_TRACE_SRVCALL)
|
||
|
||
|
||
NTSTATUS
|
||
MRxProxyCreateSrvCall(
|
||
PMRX_SRV_CALL pSrvCall,
|
||
PMRX_SRVCALL_CALLBACK_CONTEXT pCallbackContext)
|
||
/*++
|
||
|
||
Routine Description:
|
||
|
||
This routine just rejects any MRxCreateSrvCalls that come down.
|
||
|
||
Arguments:
|
||
|
||
RxContext - Supplies the context of the original create/ioctl
|
||
|
||
CallBackContext - the call back context in RDBSS for continuation.
|
||
|
||
Return Value:
|
||
|
||
RXSTATUS - The return status for the operation
|
||
|
||
Notes:
|
||
|
||
|
||
--*/
|
||
{
|
||
PMRX_SRVCALL_CALLBACK_CONTEXT SCCBC = pCallbackContext;
|
||
PMRX_SRVCALLDOWN_STRUCTURE SrvCalldownStructure = (PMRX_SRVCALLDOWN_STRUCTURE)(pCallbackContext->SrvCalldownStructure);
|
||
|
||
ASSERT( pSrvCall );
|
||
ASSERT( NodeType(pSrvCall) == RDBSS_NTC_SRVCALL );
|
||
|
||
SCCBC->Status = (STATUS_BAD_NETWORK_PATH);
|
||
SrvCalldownStructure->CallBack(SCCBC);
|
||
|
||
return STATUS_PENDING;
|
||
}
|
||
|
||
NTSTATUS
|
||
MRxProxyFinalizeSrvCall(
|
||
PMRX_SRV_CALL pSrvCall,
|
||
BOOLEAN Force)
|
||
/*++
|
||
|
||
Routine Description:
|
||
|
||
This routine destroys a given server call instance
|
||
|
||
Arguments:
|
||
|
||
pSrvCall - the server call instance to be disconnected.
|
||
|
||
Force - TRUE if a disconnection is to be enforced immediately.
|
||
|
||
Return Value:
|
||
|
||
RXSTATUS - The return status for the operation
|
||
|
||
--*/
|
||
{
|
||
NTSTATUS Status = STATUS_SUCCESS;
|
||
#if 0
|
||
PPROXYCEDB_SERVER_ENTRY pServerEntry;
|
||
|
||
pServerEntry = ProxyCeGetAssociatedServerEntry(pSrvCall);
|
||
|
||
if (pServerEntry != NULL) {
|
||
ProxyCeAcquireResource();
|
||
|
||
ASSERT(pServerEntry->pRdbssSrvCall == pSrvCall);
|
||
|
||
pServerEntry->pRdbssSrvCall = NULL;
|
||
ProxyCeDereferenceServerEntry(pServerEntry);
|
||
|
||
ProxyCeReleaseResource();
|
||
}
|
||
#endif //0
|
||
pSrvCall->Context = NULL;
|
||
|
||
return Status;
|
||
}
|
||
|
||
NTSTATUS
|
||
MRxProxySrvCallWinnerNotify(
|
||
IN PMRX_SRV_CALL pSrvCall,
|
||
IN BOOLEAN ThisMinirdrIsTheWinner,
|
||
IN OUT PVOID pSrvCallContext)
|
||
/*++
|
||
|
||
Routine Description:
|
||
|
||
This routine finalizes the mini rdr context associated with an RDBSS Server call instance
|
||
|
||
Arguments:
|
||
|
||
pSrvCall - the Server Call
|
||
|
||
ThisMinirdrIsTheWinner - TRUE if this mini rdr is the choosen one.
|
||
|
||
pSrvCallContext - the server call context created by the mini redirector.
|
||
|
||
Return Value:
|
||
|
||
RXSTATUS - The return status for the operation
|
||
|
||
Notes:
|
||
|
||
The two phase construction protocol for Server calls is required because of parallel
|
||
initiation of a number of mini redirectors. The RDBSS finalizes the particular mini
|
||
redirector to be used in communicating with a given server based on quality of
|
||
service criterion.
|
||
|
||
--*/
|
||
{
|
||
NTSTATUS Status = STATUS_SUCCESS;
|
||
//PPROXYCEDB_SERVER_ENTRY pServerEntry;
|
||
|
||
//pServerEntry = (PPROXYCEDB_SERVER_ENTRY)pSrvCallContext;
|
||
|
||
#if 0
|
||
if (!ThisMinirdrIsTheWinner) {
|
||
// Some other mini rdr has been choosen to connect to the server. Destroy
|
||
// the data structures created for this mini redirector.
|
||
|
||
ProxyCeUpdateServerEntryState(pServerEntry,PROXYCEDB_MARKED_FOR_DELETION);
|
||
ProxyCeDereferenceServerEntry(pServerEntry);
|
||
} else {
|
||
pSrvCall->Context = pServerEntry;
|
||
pSrvCall->Flags |= SRVCALL_FLAG_CASE_INSENSITIVE_NETROOTS | SRVCALL_FLAG_CASE_INSENSITIVE_FILENAMES;
|
||
|
||
//check for loopback.....BUGBUG.ALA.RDR1
|
||
//since servers now respond to multiple names.....this doesn't really cut it....
|
||
{
|
||
UNICODE_STRING ServerName;
|
||
BOOLEAN CaseInsensitive = TRUE;
|
||
ASSERT (pServerEntry->pRdbssSrvCall == pSrvCall);
|
||
//DbgPrint("ServerName is %wZ\n", pSrvCall->pSrvCallName);
|
||
//DbgPrint("ComputerName is %wZ\n", &ProxyCeContext.ComputerName);
|
||
ServerName = *pSrvCall->pSrvCallName;
|
||
ServerName.Buffer++; ServerName.Length -= sizeof(WCHAR);
|
||
if (RtlEqualUnicodeString(&ServerName,&ProxyCeContext.ComputerName,CaseInsensitive)) {
|
||
//DbgPrint("LOOPBACK!!!!!\n");
|
||
pServerEntry->Server.IsLoopBack = TRUE;
|
||
}
|
||
}
|
||
}
|
||
#endif //0
|
||
return STATUS_SUCCESS;
|
||
}
|
||
|
||
|