163 lines
4 KiB
C++
163 lines
4 KiB
C++
|
/*++
|
||
|
|
||
|
Copyright (C) Microsoft Corporation, 1991 - 1999
|
||
|
|
||
|
Module Name:
|
||
|
|
||
|
svrbind.hxx
|
||
|
|
||
|
Abstract:
|
||
|
|
||
|
We have got a problem. The DCE RPC runtime APIs are specified such
|
||
|
that RpcServerInqBindings returns a vector of binding handles. The
|
||
|
problem is that when a binding handle is created, you need to verify
|
||
|
whether or not the requested rpc protocol sequence is supported.
|
||
|
This requires that we check to see if the loadable transport interface
|
||
|
dll is available. So, rather than create a real binding handle,
|
||
|
we will create server binding handles which we will transform into
|
||
|
a client binding handle of the appropriate type if necessary.
|
||
|
|
||
|
This file contains the class definition of server binding handles.
|
||
|
|
||
|
Author:
|
||
|
|
||
|
Michael Montague (mikemon) 23-Nov-1991
|
||
|
|
||
|
Revision History:
|
||
|
|
||
|
--*/
|
||
|
|
||
|
#ifndef __SVRBIND_HXX__
|
||
|
#define __SVRBIND_HXX__
|
||
|
|
||
|
class SVR_BINDING_HANDLE : public BINDING_HANDLE
|
||
|
/*++
|
||
|
|
||
|
Class Description:
|
||
|
|
||
|
This class represents a binding handle as created by
|
||
|
RpcServerInqBindings. It is derived from the client class BINDING_HANDLE
|
||
|
because it must act like a binding handle, but we do not want
|
||
|
to create a full fledged client binding handle because it may
|
||
|
be expensive. If we ever need the full fledged binding handle,
|
||
|
will transform this instance into one.
|
||
|
|
||
|
Fields:
|
||
|
|
||
|
DceBinding - Contains the information necessary to construct a
|
||
|
full fledged binding handle. This information is an internalized
|
||
|
version of the stuff contained in the string binding.
|
||
|
|
||
|
RealBindingHandle - Contains a pointer to the real binding handle,
|
||
|
if we have transformed this binding handle into a real full
|
||
|
fledged binding handle, otherwise, it will be zero.
|
||
|
|
||
|
DynamicEndpoint - Objects of this class are created from an rpc
|
||
|
address. If the rpc address has a dynamic endpoint, we want
|
||
|
to create a partially bound binding handle. We also need to
|
||
|
know the dynamic endpoint when we register the binding handles
|
||
|
with the endpoing mapper. If the rpc address corresponding to
|
||
|
this binding handle has a dynamic endpoint, then this field will
|
||
|
contain the dynamic endpoint; otherwise, it will be zero.
|
||
|
|
||
|
--*/
|
||
|
{
|
||
|
private:
|
||
|
|
||
|
DCE_BINDING * DceBinding;
|
||
|
BINDING_HANDLE * RealBindingHandle;
|
||
|
RPC_CHAR PAPI * DynamicEndpoint;
|
||
|
int EndpointIsDynamic;
|
||
|
|
||
|
RPC_STATUS
|
||
|
InsureRealBindingHandle (
|
||
|
);
|
||
|
|
||
|
public:
|
||
|
|
||
|
SVR_BINDING_HANDLE (
|
||
|
IN DCE_BINDING * DceBinding,
|
||
|
IN RPC_CHAR * DynamicEndpoint,
|
||
|
IN OUT RPC_STATUS *Status
|
||
|
);
|
||
|
|
||
|
~SVR_BINDING_HANDLE (
|
||
|
);
|
||
|
|
||
|
HANDLE_TYPE
|
||
|
Type(
|
||
|
);
|
||
|
|
||
|
void
|
||
|
MakePartiallyBound(
|
||
|
);
|
||
|
|
||
|
virtual RPC_STATUS
|
||
|
SendReceive (
|
||
|
IN OUT PRPC_MESSAGE Message
|
||
|
);
|
||
|
|
||
|
virtual RPC_STATUS
|
||
|
NegotiateTransferSyntax (
|
||
|
IN OUT PRPC_MESSAGE Message
|
||
|
);
|
||
|
|
||
|
virtual RPC_STATUS
|
||
|
GetBuffer (
|
||
|
IN OUT PRPC_MESSAGE Message,
|
||
|
IN UUID *ObjectUuid
|
||
|
);
|
||
|
|
||
|
virtual void
|
||
|
FreeBuffer (
|
||
|
IN PRPC_MESSAGE Message
|
||
|
);
|
||
|
|
||
|
virtual RPC_STATUS
|
||
|
BindingCopy (
|
||
|
OUT BINDING_HANDLE * PAPI * DestinationBinding,
|
||
|
IN unsigned int MaintainContext
|
||
|
);
|
||
|
|
||
|
virtual RPC_STATUS
|
||
|
BindingFree (
|
||
|
);
|
||
|
|
||
|
virtual RPC_STATUS
|
||
|
ToStringBinding (
|
||
|
OUT RPC_CHAR PAPI * PAPI * StringBinding
|
||
|
);
|
||
|
|
||
|
RPC_STATUS
|
||
|
ToStaticStringBinding (
|
||
|
OUT RPC_CHAR PAPI * PAPI * StringBinding
|
||
|
);
|
||
|
|
||
|
virtual RPC_STATUS
|
||
|
InquireDynamicEndpoint (
|
||
|
OUT RPC_CHAR PAPI * PAPI * DynamicEndpoint
|
||
|
);
|
||
|
|
||
|
virtual RPC_STATUS
|
||
|
PrepareBindingHandle (
|
||
|
IN TRANS_INFO * TransportInterface,
|
||
|
IN DCE_BINDING * DceBinding
|
||
|
);
|
||
|
|
||
|
virtual RPC_STATUS
|
||
|
ResolveBinding (
|
||
|
IN PRPC_CLIENT_INTERFACE RpcClientInterface
|
||
|
);
|
||
|
|
||
|
virtual RPC_STATUS
|
||
|
BindingReset (
|
||
|
);
|
||
|
|
||
|
virtual RPC_STATUS
|
||
|
InquireTransportType(
|
||
|
OUT unsigned int PAPI *Type
|
||
|
);
|
||
|
};
|
||
|
|
||
|
#endif // __SVRBIND_HXX__
|