Source code of Windows XP (NT5)
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
/*++ 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; }
|