mirror of https://github.com/lianthony/NT4.0
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.
1663 lines
49 KiB
1663 lines
49 KiB
/*++
|
|
|
|
Copyright (c) 1991 Microsoft Corporation
|
|
|
|
Module Name:
|
|
|
|
rpctran.h
|
|
|
|
Abstract:
|
|
|
|
The interface to the loadable transport interface modules is described
|
|
in this file.
|
|
|
|
Author:
|
|
|
|
Steve Zeck (stevez) 06-May-1991
|
|
|
|
Revision History:
|
|
|
|
01-Mar-1992 mikemon
|
|
|
|
The shared state between the runtime and the transport interface
|
|
modules was removed. Status codes were specified for each routine,
|
|
and coding convensions were fixed.
|
|
|
|
27-Jul-1995 jroberts
|
|
|
|
Moved the datagram interface here, too.
|
|
|
|
--*/
|
|
|
|
#ifndef __RPCTRAN_H__
|
|
#define __RPCTRAN_H__
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
#define RPC_TRANSPORT_INTERFACE_VERSION 9
|
|
#define IDLE_SECONDS 60
|
|
#define RPC_BIND_TIMEOUT 30
|
|
|
|
typedef void PAPI * RPC_TRANSPORT_CONNECTION;
|
|
typedef void PAPI * RPC_TRANSPORT_ADDRESS;
|
|
|
|
#define RPC_TRANS_STATUS RPC_STATUS
|
|
|
|
#if defined(DOS) && !defined(WIN)
|
|
#pragma warning(disable:4147)
|
|
#endif
|
|
|
|
|
|
typedef RPC_TRANS_STATUS
|
|
(RPC_ENTRY * TRANS_SERVER_SETUPWITHENDPOINT) (
|
|
IN RPC_TRANSPORT_ADDRESS ThisAddress,
|
|
IN RPC_CHAR PAPI * Endpoint,
|
|
OUT RPC_CHAR PAPI * lNetworkAddress,
|
|
OUT unsigned int PAPI * NumNetworkAddress,
|
|
IN unsigned int NetworkAddressLength,
|
|
IN void PAPI * SecurityDescriptor, OPTIONAL
|
|
IN unsigned int PendingQueueSize,
|
|
IN RPC_CHAR PAPI * RpcProtocolSequence,
|
|
IN unsigned long EndpointFlags,
|
|
IN unsigned long NICFlags
|
|
);
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
We use this routine to setup and address with a know endpoint. Once
|
|
memory has been allocated for a transport address, either this routine
|
|
or SetupUnknownEndpoint will be called. Things must be setup so that
|
|
packets can be received when ReceiveAny is called.
|
|
|
|
Arguments:
|
|
|
|
ThisAddress - Supplies a pointer to memory reserved for the transport
|
|
interface module to place information about the address. The size
|
|
of this memory is specified by the SizeOfAddress field in the
|
|
structure returned by TransportLoad.
|
|
|
|
Endpoint - Supplies the endpoint for the address. The transport
|
|
interface module does not need to make a copy of this argument.
|
|
We will guarantee the endpoint will not be deallocated once
|
|
ReceiveAny has been called for the first time.
|
|
|
|
NetworkAddress - Returns the network address for this server. The
|
|
caller will have allocated a buffer to contain the network address.
|
|
If the buffer is not large enough, this routine must return
|
|
RPC_P_NETWORK_ADDRESS_TOO_SMALL; the caller will try again with
|
|
a larger buffer.
|
|
|
|
NetworkAddressLength - Supplies the length in characters of the network
|
|
address buffer. On systems which support unicode, each character
|
|
will be two bytes wide, otherwise, each character will be one byte
|
|
wide.
|
|
|
|
SecurityDescriptor - Optionally supplies a security descriptor to be
|
|
placed on the address. The semantics of the security descriptor
|
|
depend upon the particular transport interface involved.
|
|
|
|
PendinqQueueSize - Supplies the argument passed as MaxCalls to the
|
|
RpcServerUseProtseq* and RpcServerUseAllProtseqs* calls. This is
|
|
intended to specify the size of pending packet queue for sockets.
|
|
|
|
RpcProtocolSequence - Supplies the rpc protocol sequence for which we
|
|
want to setup an address. This argument is intended to allow a
|
|
single transport interface module support than one different rpc
|
|
protocol sequence.
|
|
|
|
Return Value:
|
|
|
|
RPC_S_OK - The address has been setup correctly. It is now ready
|
|
to start receiving packets (the ReceiveAny operation will be used
|
|
to do this).
|
|
|
|
RPC_S_INVALID_SECURITY_DESC - The supplied security descriptor is
|
|
invalid.
|
|
|
|
RPC_S_CANT_CREATE_ENDPOINT - The endpoint format is correct, but the
|
|
endpoint can not be created. This will likely occur because some
|
|
other server has already taken the endpoint.
|
|
|
|
RPC_S_INVALID_ENDPOINT_FORMAT - The endpoint is not a valid endpoint
|
|
for this particular transport interface.
|
|
|
|
RPC_S_OUT_OF_RESOURCES - Insufficient resources are available to
|
|
setup the address.
|
|
|
|
RPC_S_OUT_OF_MEMORY - Insufficient memory is available to setup the
|
|
address.
|
|
|
|
RPC_P_NETWORK_ADDRESS_TOO_SMALL - The supplied network address buffer
|
|
is too small to hold the network address. This status code indicates
|
|
that the caller should try again with a larger network address
|
|
buffer.
|
|
|
|
--*/
|
|
|
|
|
|
|
|
typedef RPC_TRANS_STATUS
|
|
(RPC_ENTRY * TRANS_SERVER_SETUPUNKNOWNENDPOINT) (
|
|
IN RPC_TRANSPORT_ADDRESS ThisAddress,
|
|
OUT RPC_CHAR PAPI * Endpoint,
|
|
IN unsigned int EndpointLength,
|
|
OUT RPC_CHAR PAPI * lNetworkAddress,
|
|
OUT unsigned int PAPI * NumNetworkAddress,
|
|
IN unsigned int NetworkAddressLength,
|
|
IN void PAPI * SecurityDescriptor, OPTIONAL
|
|
IN unsigned int PendingQueueSize,
|
|
IN RPC_CHAR PAPI * RpcProtocolSequence,
|
|
IN unsigned long EndpointFlags,
|
|
IN unsigned long NICFlags
|
|
);
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
We use this routine to setup and address with an unknow endpoint. Once
|
|
memory has been allocated for a transport address, either this routine
|
|
or SetupWithEndpoint will be called. A endpoint must be dynamically
|
|
created and setup. You can think of this routine as randomly creating
|
|
a syntactically valid endpoint and then calling SetupWithEndpoint. This
|
|
must be repeated until SetupWithEndpoint returns something other than
|
|
RPC_S_CANT_CREATE_ENDPOINT. Things must be setup so that packets can be
|
|
received when ReceiveAny is called.
|
|
|
|
Arguments:
|
|
|
|
ThisAddress - Supplies a pointer to memory reserved for the transport
|
|
interface module to place information about the address. The size
|
|
of this memory is specified by the SizeOfAddress field in the
|
|
structure returned by TransportLoad.
|
|
|
|
Endpoint - Returns the dynamic endpoint for the address. The transport
|
|
interface module does not need to make a copy of this argument.
|
|
We will guarantee the endpoint will not be deallocated once
|
|
ReceiveAny has been called for the first time. The caller wil
|
|
have allocated a buffer to contain the endpoint. If the buffer
|
|
is too small, this routine must return RPC_P_ENDPOINT_TOO_SMALL,
|
|
and the caller will try again with a larger buffer.
|
|
|
|
EndpointLength - Supplies the length in characters of the endpoint
|
|
buffer. On systems which support unicode, each character will
|
|
be two bytes wide, otherwise, each character will be one byte
|
|
wide.
|
|
|
|
NetworkAddress - Returns the network address for this server. The
|
|
caller will have allocated a buffer to contain the network address.
|
|
If the buffer is not large enough, this routine must return
|
|
RPC_P_NETWORK_ADDRESS_TOO_SMALL; the caller will try again with
|
|
a larger buffer.
|
|
|
|
NetworkAddressLength - Supplies the length in characters of the network
|
|
address buffer. On systems which support unicode, each character
|
|
will be two bytes wide, otherwise, each character will be one byte
|
|
wide.
|
|
|
|
SecurityDescriptor - Optionally supplies a security descriptor to be
|
|
placed on the address. The semantics of the security descriptor
|
|
depend upon the particular transport interface involved.
|
|
|
|
PendinqQueueSize - Supplies the argument passed as MaxCalls to the
|
|
RpcServerUseProtseq* and RpcServerUseAllProtseqs* calls. This is
|
|
intended to specify the size of pending packet queue for sockets.
|
|
|
|
RpcProtocolSequence - Supplies the rpc protocol sequence for which we
|
|
want to setup an address. This argument is intended to allow a
|
|
single transport interface module support than one different rpc
|
|
protocol sequence.
|
|
|
|
Return Value:
|
|
|
|
RPC_S_OK - The address has been setup correctly. It is now ready
|
|
to start receiving packets (the ReceiveAny operation will be used
|
|
to do this).
|
|
|
|
RPC_S_INVALID_SECURITY_DESC - The supplied security descriptor is
|
|
invalid.
|
|
|
|
RPC_S_OUT_OF_RESOURCES - Insufficient resources are available to
|
|
setup the address.
|
|
|
|
RPC_S_OUT_OF_MEMORY - Insufficient memory is available to setup the
|
|
address.
|
|
|
|
RPC_P_NETWORK_ADDRESS_TOO_SMALL - The supplied network address buffer
|
|
is too small to hold the network address. This status code indicates
|
|
that the caller should try again with a larger network address
|
|
buffer.
|
|
|
|
RPC_P_ENDPOINT_TOO_SMALL - The supplied endpoint buffer is too small
|
|
to hold the endpoint. This status code indicates that the caller
|
|
should try again with a larger endpoint buffer.
|
|
|
|
--*/
|
|
|
|
|
|
typedef void
|
|
(RPC_ENTRY * TRANS_SERVER_ABORTSETUPADDRESS) (
|
|
IN RPC_TRANSPORT_ADDRESS ThisAddress
|
|
);
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
There are failure scenerios in which the runtime will be unable to
|
|
complete adding an address. This routine is used to abort a transport
|
|
address; we guarantee to never call this routine after ReceiveAny has
|
|
been called at least once.
|
|
|
|
Arguments:
|
|
|
|
ThisAddress - Supplies a pointer to the transport interface module level
|
|
information about the address to be aborted.
|
|
|
|
--*/
|
|
|
|
|
|
typedef RPC_TRANS_STATUS
|
|
(RPC_ENTRY * TRANS_SERVER_CLOSE) (
|
|
IN RPC_TRANSPORT_CONNECTION ThisConnection
|
|
);
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
This entry point is used by the runtime to close a transport interface
|
|
module level connection. We guarantee that this routine will be called
|
|
at most once, and only if another routine did not return an error
|
|
indicating that the connection had been closed.
|
|
|
|
Arguments:
|
|
|
|
ThisConnection - Supplies the connection to be closed. The connection
|
|
is specified as a pointer to memory containing tranport interface
|
|
module level information about the connection.
|
|
|
|
Return Value:
|
|
|
|
RPC_S_OK - This value must always be returned.
|
|
|
|
--*/
|
|
|
|
|
|
typedef RPC_TRANS_STATUS
|
|
(RPC_ENTRY * TRANS_SERVER_SEND) (
|
|
IN RPC_TRANSPORT_CONNECTION ThisConnection,
|
|
IN void PAPI * Buffer,
|
|
IN unsigned int BufferLength
|
|
);
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
Arguments:
|
|
|
|
ThisConnection - Supplies the connection to be sent on. The
|
|
connection is specified as a pointer to memory containing tranport
|
|
interface module level information about the connection.
|
|
|
|
Buffer - Supplies a buffer containing the packet to be sent to the
|
|
client.
|
|
|
|
BufferLength - Supplies the length of the buffer in bytes.
|
|
|
|
Return Value:
|
|
|
|
RPC_S_OK - The packet was successfully sent to the client.
|
|
|
|
RPC_S_OUT_OF_MEMORY - Insufficient memory is available to perform the
|
|
operation. The connection will not have been closed if this error
|
|
occurs.
|
|
|
|
RPC_S_OUT_OF_RESOURCES - Insufficient resources are available to perform
|
|
the operation. The connection will not have been closed if this
|
|
error occurs.
|
|
|
|
RPC_P_SEND_FAILED - The send operation failed. The connection
|
|
will have been closed, so the close operation must not be performed
|
|
on the connection after this error code has been returned.
|
|
|
|
--*/
|
|
|
|
|
|
typedef RPC_TRANS_STATUS
|
|
(RPC_ENTRY * TRANS_SERVER_RECEIVEANY) (
|
|
IN RPC_TRANSPORT_ADDRESS ThisAddress,
|
|
OUT RPC_TRANSPORT_CONNECTION PAPI * SConnection,
|
|
IN OUT void PAPI * PAPI * Buffer,
|
|
OUT unsigned int PAPI * BufferLength,
|
|
IN long Timeout
|
|
);
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
This routine waits until a packet is received from any of the connections
|
|
connected to this address, or until one of the connections closes. At
|
|
that point, it returns. One a single thread will call this routine at
|
|
a time for each address.
|
|
|
|
Arguments:
|
|
|
|
ThisAddress - Supplies a pointer to the transport level address on which
|
|
to perform the receive any operation.
|
|
|
|
SConnection - Returns the connection which either closed or just had
|
|
a packet received from it.
|
|
|
|
Buffer - Supplies zero as the buffer, and returns a buffer containing a
|
|
packet received from the connection. Zero is supplied as the
|
|
buffer so that the runtime can determine on error whether or not
|
|
a buffer needs to be freed.
|
|
|
|
BufferLength - Returns the length of the buffer in bytes.
|
|
|
|
Timeout - Supplies a timeout value which indicates in milliseconds
|
|
how long to wait for either a packet to be received or a connection
|
|
to close before returning with RPC_P_TIMEOUT. A value of negative
|
|
one (-1) indicates to wait forever.
|
|
|
|
Return Value:
|
|
|
|
RPC_S_OK - A packet has successfully been received from one of the
|
|
connections on this address.
|
|
|
|
RPC_S_OUT_OF_MEMORY - Insufficient memory is available to complete the
|
|
operation. The address must continue to operate even if this error
|
|
code is returned.
|
|
|
|
RPC_S_OUT_OF_RESOURCES - Insufficient resources are available to complete
|
|
the operation. The address must continue to operate even if this
|
|
error code is returned.
|
|
|
|
RPC_P_CONNECTION_CLOSED - The connection returned by the SConnection
|
|
argument has closed.
|
|
|
|
RPC_P_TIMEOUT - The transport interface module timed out waiting for
|
|
a packet or a connection to close.
|
|
|
|
RPC_P_SERVER_TRANSPORT_ERROR - The transport got an unrecoverable error.
|
|
|
|
--*/
|
|
|
|
|
|
typedef RPC_TRANS_STATUS
|
|
(RPC_ENTRY * TRANS_SERVER_IMPERSONATECLIENT) (
|
|
IN RPC_TRANSPORT_CONNECTION ThisConnection
|
|
);
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
We need this routine in order for the server to beable to impersonate
|
|
the client in some situations. This is done in a transport specific
|
|
manner on transports which are actually session layers.
|
|
|
|
Arguments:
|
|
|
|
ThisConnection - Supplies a pointer to the transport interface module
|
|
level information about the transport connection.
|
|
|
|
Return Value:
|
|
|
|
RPC_S_OK - The thread which called this routine is now impersonating
|
|
the client.
|
|
|
|
RPC_S_NO_CONTEXT_AVAILABLE - No client security context is available
|
|
for the server thread to use for impersonation.
|
|
|
|
--*/
|
|
|
|
|
|
typedef RPC_TRANS_STATUS
|
|
(RPC_ENTRY * TRANS_SERVER_REVERTTOSELF) (
|
|
IN RPC_TRANSPORT_CONNECTION ThisConnection,
|
|
IN void PAPI * ThreadHandle
|
|
);
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
A server thread which has impersonated a client needs to go back to
|
|
having its original security context. This routine is used to do
|
|
that.
|
|
|
|
Arguments:
|
|
|
|
ThisConnection - Supplies a pointer to the transport interface module
|
|
level information about the transport connection which we no longer
|
|
wish to impersonate.
|
|
|
|
ThreadHandle - Supplies a handle to the thread opened before the thread
|
|
started impersonating the client. This is necessary on NT so that
|
|
the server thread can revert to self.
|
|
|
|
Return Value:
|
|
|
|
RPC_S_OK - This value will always be returned.
|
|
|
|
--*/
|
|
|
|
|
|
typedef struct _RPC_TRANSPORT_CLIENT_PROCESS
|
|
{
|
|
void * FirstPart;
|
|
void * SecondPart;
|
|
} RPC_CLIENT_PROCESS_IDENTIFIER;
|
|
|
|
|
|
typedef RPC_TRANS_STATUS
|
|
(RPC_ENTRY * TRANS_SERVER_QUERYCLIENTPROCESS) (
|
|
IN RPC_TRANSPORT_CONNECTION ThisConnection,
|
|
OUT RPC_CLIENT_PROCESS_IDENTIFIER * ClientProcess
|
|
);
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
This routine is only necessary for NT named pipes. All other transports
|
|
should supply zero for the pointer to this routine in the
|
|
RPC_SERVER_TRANSPORT_INFO.
|
|
|
|
For the really curious, we need this to make context handles secure.
|
|
|
|
--*/
|
|
|
|
|
|
typedef RPC_TRANS_STATUS
|
|
(RPC_ENTRY * TRANS_SERVER_RECEIVEDIRECT) (
|
|
IN RPC_TRANSPORT_CONNECTION ThisConnection,
|
|
IN OUT void PAPI * PAPI * Buffer,
|
|
OUT unsigned int PAPI * BufferLength
|
|
);
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
The receive direct operation is performed on a transport connection
|
|
using this operation. It will block until either a packet is received
|
|
or the connection closes.
|
|
|
|
Arguments:
|
|
|
|
ThisConnection - Supplies the receive direct transport connection to
|
|
receive from.
|
|
|
|
Buffer - Returns the buffer of data which we received.
|
|
|
|
BufferLength - Returns the length of the buffer in bytes.
|
|
|
|
Return Value:
|
|
|
|
RPC_S_OK - A packet has successfully been received from the connection.
|
|
|
|
RPC_S_OUT_OF_MEMORY - Insufficient memory is available to complete the
|
|
operation.
|
|
|
|
RPC_P_CONNECTION_CLOSED - The connection has closed.
|
|
|
|
--*/
|
|
|
|
|
|
typedef RPC_TRANS_STATUS
|
|
(RPC_ENTRY * TRANS_SERVER_QUERYCLIENTADDRESS) (
|
|
IN RPC_TRANSPORT_CONNECTION ThisConnection,
|
|
OUT RPC_CHAR PAPI * NetworkAddress,
|
|
IN unsigned int NetworkAddressLength
|
|
);
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
We use this routine to obtain the network address of the client at the
|
|
other end of this connection. This functionality is necessary to support
|
|
RpcBindingServerFromClient.
|
|
|
|
Arguments:
|
|
|
|
ThisConnection - Supplies a pointer to the connection for which we want
|
|
to perform the operation.
|
|
|
|
NetworkAddress - Returns the network address of the client. The caller
|
|
will have allocated a buffer to contain the network address. If the
|
|
buffer is not large enough, this routine must return
|
|
RPC_P_NETWORK_ADDRESS_TOO_SMALL; the caller will try again with a
|
|
larger buffer.
|
|
|
|
NetworkAddressLength - Supplies the length in characters of the network
|
|
address buffer. On systems which support unicode, each character
|
|
will be two bytes wide, otherwise, each character will be one byte
|
|
wide.
|
|
|
|
Return Value:
|
|
|
|
RPC_S_OK - The network address has successfully been obtained.
|
|
|
|
RPC_P_NETWORK_ADDRESS_TOO_SMALL - The supplied network address buffer
|
|
is too small to hold the network address. This status code indicates
|
|
that the caller should try again with a larger network address
|
|
buffer.
|
|
|
|
--*/
|
|
|
|
#if defined(NTENV) || defined(WIN96)
|
|
|
|
|
|
typedef RPC_TRANS_STATUS
|
|
(RPC_ENTRY * TRANS_SERVER_STARTLISTENING) (
|
|
IN RPC_TRANSPORT_ADDRESS ThisAddress
|
|
);
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
|
|
Arguments:
|
|
|
|
ThisConnection - Supplies a pointer to the connection for which we want
|
|
to perform the operation.
|
|
|
|
|
|
Return Value:
|
|
|
|
RPC_S_OK - The network address has successfully been obtained.
|
|
--*/
|
|
#endif
|
|
|
|
|
|
typedef struct _RPC_SERVER_TRANSPORT_INFO
|
|
{
|
|
unsigned short TransInterfaceVersion;
|
|
unsigned int MaximumPacketSize;
|
|
unsigned int SizeOfAddress;
|
|
unsigned int SizeOfConnection;
|
|
TRANS_SERVER_SETUPWITHENDPOINT SetupWithEndpoint;
|
|
TRANS_SERVER_SETUPUNKNOWNENDPOINT SetupUnknownEndpoint;
|
|
TRANS_SERVER_ABORTSETUPADDRESS AbortSetupAddress;
|
|
TRANS_SERVER_CLOSE Close;
|
|
TRANS_SERVER_SEND Send;
|
|
TRANS_SERVER_RECEIVEANY ReceiveAny;
|
|
TRANS_SERVER_IMPERSONATECLIENT ImpersonateClient;
|
|
TRANS_SERVER_REVERTTOSELF RevertToSelf;
|
|
TRANS_SERVER_QUERYCLIENTPROCESS QueryClientProcess;
|
|
TRANS_SERVER_RECEIVEDIRECT ReceiveDirect;
|
|
TRANS_SERVER_QUERYCLIENTADDRESS QueryClientAddress;
|
|
#if defined(NTENV) || defined(WIN96)
|
|
TRANS_SERVER_STARTLISTENING StartListening ;
|
|
#endif
|
|
} RPC_SERVER_TRANSPORT_INFO;
|
|
|
|
RPC_TRANSPORT_CONNECTION RPC_ENTRY
|
|
I_RpcTransServerNewConnection (
|
|
IN RPC_TRANSPORT_ADDRESS ThisAddress,
|
|
IN int ConnectionKey,
|
|
OUT unsigned int PAPI * ReceiveFlag
|
|
);
|
|
|
|
RPC_TRANSPORT_CONNECTION RPC_ENTRY
|
|
I_RpcTransServerFindConnection (
|
|
IN RPC_TRANSPORT_ADDRESS ThisAddress,
|
|
IN int ConnectionKey
|
|
);
|
|
|
|
unsigned short RPC_ENTRY
|
|
I_RpcTransServerMaxFrag (
|
|
IN RPC_TRANSPORT_CONNECTION ThisConnection
|
|
);
|
|
|
|
RPC_STATUS RPC_ENTRY
|
|
I_RpcTransServerReallocBuffer (
|
|
IN RPC_TRANSPORT_CONNECTION ThisConnection,
|
|
IN OUT void PAPI * PAPI * Buffer,
|
|
IN unsigned int OldBufferLength,
|
|
IN unsigned int NewBufferLength
|
|
);
|
|
|
|
void RPC_ENTRY
|
|
I_RpcTransServerFreeBuffer (
|
|
IN RPC_TRANSPORT_CONNECTION ThisConnection,
|
|
IN void PAPI * Buffer
|
|
);
|
|
|
|
void PAPI * RPC_ENTRY
|
|
I_RpcTransServerProtectThread (
|
|
void
|
|
);
|
|
|
|
void RPC_ENTRY
|
|
I_RpcTransServerUnprotectThread (
|
|
IN void PAPI * Thread
|
|
);
|
|
|
|
void RPC_ENTRY
|
|
I_RpcTransServerReceiveDirectReady (
|
|
IN RPC_TRANSPORT_CONNECTION ThisConnection
|
|
);
|
|
|
|
void RPC_ENTRY
|
|
I_RpcConnectionInqSockBuffSize2(
|
|
OUT unsigned long __RPC_FAR * RecvWindowSize
|
|
);
|
|
|
|
#if defined(NTENV) || defined(WIN96)
|
|
|
|
int RPC_ENTRY
|
|
I_RpcTransMaybeMakeReceiveDirect (
|
|
IN RPC_TRANSPORT_ADDRESS TransAddress,
|
|
IN RPC_TRANSPORT_CONNECTION ThisConnection
|
|
) ;
|
|
|
|
int RPC_ENTRY
|
|
I_RpcTransMaybeMakeReceiveAny (
|
|
IN RPC_TRANSPORT_CONNECTION ThisConnection
|
|
) ;
|
|
|
|
void RPC_ENTRY
|
|
I_RpcTransCancelMigration(
|
|
IN RPC_TRANSPORT_CONNECTION ThisConnection
|
|
) ;
|
|
#endif
|
|
|
|
RPC_STATUS RPC_ENTRY
|
|
I_RpcTransPingServer(
|
|
IN RPC_TRANSPORT_CONNECTION ThisConnection
|
|
) ;
|
|
|
|
|
|
typedef RPC_TRANS_STATUS
|
|
(RPC_ENTRY * TRANS_CLIENT_OPEN) (
|
|
IN RPC_TRANSPORT_CONNECTION ThisConnection,
|
|
IN RPC_CHAR PAPI * NetworkAddress,
|
|
IN RPC_CHAR PAPI * Endpoint,
|
|
IN RPC_CHAR PAPI * NetworkOptions,
|
|
IN RPC_CHAR PAPI * TransportAddress,
|
|
IN RPC_CHAR PAPI * RpcProtocolSequence,
|
|
IN unsigned int Timeout
|
|
);
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
Arguments:
|
|
|
|
ThisConnection - Supplies a pointer to memory reserved for the transport
|
|
interface module to place information about the connection. The size
|
|
of this memory is specified by the SizeOfConnection field in the
|
|
structure returned by TransportLoad.
|
|
|
|
NetworkAddress - Supplies the network address part of the string binding.
|
|
|
|
Endpoint - Supplies the endpoint part of the string binding.
|
|
|
|
NetworkOptions - Supplies the network options part of the string binding.
|
|
|
|
TransportAddress - Supplies the network address part of the string
|
|
binding concatenated with the endpoint part of the string binding.
|
|
Some transport interfaces want the network address seperate from
|
|
the endpoint, and others want them concatenated together.
|
|
|
|
RpcProtocolSequence - Supplies the rpc protocol sequence part of the
|
|
string binding. This parameter allows a single transport interface
|
|
module to support more than one rpc protocol sequence.
|
|
|
|
Timeout - Supplies a hint specifying how long to keep trying to establish
|
|
a connection. The timeout value is an integer value from zero to
|
|
ten; the values represent a relative amount of time to spend to
|
|
establish a connection with the server. For a more complete
|
|
description of this, see the documentation for RpcMgmtSetComTimeout.
|
|
The following constants are defined for the timeout values.
|
|
|
|
RPC_C_BINDING_INFINITE_TIMEOUT - This is defined to be ten; it means
|
|
to keep trying to establish communications forever. The runtime
|
|
will repeatedly call the transport if necessary to support this
|
|
functionality.
|
|
|
|
RPC_C_BINDING_MIN_TIMEOUT - This value of zero indicates to wait the
|
|
minimum amount of time for the network protocol being used.
|
|
|
|
RPC_C_BINDING_DEFAULT_TIMEOUT - You should try an average amount of
|
|
time for the network protocol being used. This is the default
|
|
value.
|
|
|
|
RPC_C_BINDING_MAX_TIMEOUT - This value of nine indicates that you
|
|
should try for the longest amount of time for the network
|
|
protocol being used.
|
|
|
|
Return Value:
|
|
|
|
RPC_S_OK - We successfully allocated a connection and connected
|
|
to the server.
|
|
|
|
RPC_S_SERVER_UNAVAILABLE - We were unable to connect with the server;
|
|
just because this status code is returned does not mean that
|
|
the server is not there.
|
|
|
|
RPC_S_OUT_OF_MEMORY - Insufficient memory is available to complete
|
|
the operation.
|
|
|
|
RPC_S_OUT_OF_RESOURCES - Insufficient resources, some as file system
|
|
handles or sockets are available to complete the operation.
|
|
|
|
RPC_S_SERVER_TOO_BUSY - The server is there, but it is too busy
|
|
to respond to our connect request. Not all transports will be
|
|
able to detect this condition; if they can not, can not connect
|
|
will be returned.
|
|
|
|
RPC_S_ACCESS_DENIED - The client is denied access for security
|
|
reasons to the server.
|
|
|
|
RPC_S_INVALID_NETWORK_OPTIONS - The specified network options are
|
|
invalid. See a description of the particular transport interface
|
|
module for what constitutes valid network options.
|
|
|
|
RPC_S_INVALID_ENDPOINT_FORMAT - The specified endpoint was an incorrect
|
|
format and invalid. The format is entirly dependent on the
|
|
transport being used.
|
|
|
|
--*/
|
|
|
|
|
|
typedef RPC_TRANS_STATUS
|
|
(RPC_ENTRY * TRANS_CLIENT_CLOSE) (
|
|
IN RPC_TRANSPORT_CONNECTION ThisConnection
|
|
);
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
This entry point is used by the runtime to close a transport interface
|
|
module level connection. We guarantee that this routine will be called
|
|
at most once, and only if another routine did not return an error
|
|
indicating that the connection had been closed.
|
|
|
|
Arguments:
|
|
|
|
ThisConnection - Supplies the connection to be closed. The connection
|
|
is specified as a pointer to memory containing tranport interface
|
|
module level information about the connection.
|
|
|
|
Return Value:
|
|
|
|
RPC_S_OK - This value must always be returned.
|
|
|
|
--*/
|
|
|
|
|
|
typedef RPC_TRANS_STATUS
|
|
(RPC_ENTRY * TRANS_CLIENT_SEND) (
|
|
IN RPC_TRANSPORT_CONNECTION ThisConnection,
|
|
IN void PAPI * Buffer,
|
|
IN unsigned int BufferLength
|
|
);
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
Arguments:
|
|
|
|
ThisConnection - Supplies the connection to be sent on. The
|
|
connection is specified as a pointer to memory containing tranport
|
|
interface module level information about the connection.
|
|
|
|
Buffer - Supplies a buffer containing the packet to be sent to the
|
|
server.
|
|
|
|
BufferLength - Supplies the length of the buffer in bytes.
|
|
|
|
Return Value:
|
|
|
|
RPC_S_OK - The packet was successfully sent to the server.
|
|
|
|
RPC_S_OUT_OF_MEMORY - Insufficient memory is available to perform the
|
|
operation. The connection will not have been closed if this error
|
|
occurs.
|
|
|
|
RPC_S_OUT_OF_RESOURCES - Insufficient resources are available to perform
|
|
the operation. The connection will not have been closed if this
|
|
error occurs.
|
|
|
|
RPC_P_SEND_FAILED - The send operation failed. The connection
|
|
will have been closed, so the close operation must not be performed
|
|
on the connection after this error code has been returned.
|
|
|
|
--*/
|
|
|
|
|
|
typedef RPC_TRANS_STATUS
|
|
(RPC_ENTRY * TRANS_CLIENT_RECEIVE) (
|
|
IN RPC_TRANSPORT_CONNECTION ThisConnection,
|
|
IN OUT void PAPI * PAPI * Buffer,
|
|
IN OUT unsigned int PAPI * BufferLength
|
|
);
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
Arguments:
|
|
|
|
ThisConnection - Supplies the connection to be received from. The
|
|
connection is specified as a pointer to memory containing tranport
|
|
interface module level information about the connection.
|
|
|
|
Buffer - Supplies a preallocated buffer to the receive the packet into
|
|
if it will fit. If the packet does not fit, the transport interface
|
|
module must allocate a larger buffer which will hold the entire
|
|
packet. The buffer will contain the packet upon return.
|
|
|
|
BufferLength - Supplies the length of the preallocated buffer in bytes
|
|
and returns the length of the received packet in bytes.
|
|
|
|
Return Value:
|
|
|
|
RPC_S_OK - A packet was successfully received from the server.
|
|
|
|
RPC_S_OUT_OF_MEMORY - Insufficient memory is available to allocate a
|
|
buffer to receive the packet into. The connection will not have
|
|
been closed if this error occurs.
|
|
|
|
RPC_S_OUT_OF_RESOURCES - Insufficient resources are available to perform
|
|
the operation. The connection will not have been closed if this
|
|
error occurs.
|
|
|
|
RPC_P_RECEIVE_FAILED - The receive operation failed. The connection
|
|
will have been closed, so the close operation must not be performed
|
|
on the connection after this error code has been returned.
|
|
|
|
--*/
|
|
|
|
|
|
typedef RPC_TRANS_STATUS
|
|
(RPC_ENTRY * TRANS_CLIENT_SET_TIMEOUT) (
|
|
IN RPC_TRANSPORT_CONNECTION ThisConnection,
|
|
IN long Timeout
|
|
);
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
Arguments:
|
|
|
|
ThisConnection - Supplies the connection to be received from. The
|
|
connection is specified as a pointer to memory containing tranport
|
|
interface module level information about the connection.
|
|
|
|
Timeout - Timeout value in seconds. !0, seconds,
|
|
RPC_C_CANCEL_INFINITE_TIMEOUT.
|
|
|
|
Return Value:
|
|
|
|
RPC_S_OK - success.
|
|
|
|
--*/
|
|
|
|
|
|
typedef RPC_TRANS_STATUS
|
|
(RPC_ENTRY * TRANS_CLIENT_SENDRECEIVE) (
|
|
IN RPC_TRANSPORT_CONNECTION ThisConnection,
|
|
IN void PAPI * SendBuffer,
|
|
IN unsigned int SendBufferLength,
|
|
IN OUT void PAPI * PAPI * ReceiveBuffer,
|
|
IN OUT unsigned int PAPI * ReceiveBufferLength
|
|
);
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
Arguments:
|
|
|
|
ThisConnection - Supplies the connection to be sent on and then received
|
|
from. The connection is specified as a pointer to memory containing
|
|
transport interface module level information about the connection.
|
|
|
|
SendBuffer - Supplies a buffer containing the packet to be sent to the
|
|
server.
|
|
|
|
SendBufferLength - Supplies the length of the send buffer in bytes.
|
|
|
|
ReceiveBuffer - Supplies a preallocated buffer to the receive the packet
|
|
into if it will fit. If the packet does not fit, the transport
|
|
interface module must allocate a larger buffer which will hold the
|
|
entire packet. The buffer will contain the packet upon return.
|
|
|
|
ReceiveBufferLength - Supplies the length of the preallocated receive
|
|
buffer in bytes and returns the length of the received packet in bytes.
|
|
|
|
Return Value:
|
|
|
|
RPC_S_OK - The packet was successfully sent to the server, and we
|
|
successfully received one back.
|
|
|
|
RPC_S_OUT_OF_MEMORY - Insufficient memory is available to perform the
|
|
operation. The connection will not have been closed if this error
|
|
occurs.
|
|
|
|
RPC_S_OUT_OF_RESOURCES - Insufficient resources are available to perform
|
|
the operation. The connection will not have been closed if this
|
|
error occurs.
|
|
|
|
RPC_P_SEND_FAILED - The send operation failed. The connection
|
|
will have been closed, so the close operation must not be performed
|
|
on the connection after this error code has been returned.
|
|
|
|
RPC_P_RECEIVE_FAILED - The receive operation failed. The connection
|
|
will have been closed, so the close operation must not be performed
|
|
on the connection after this error code has been returned.
|
|
|
|
--*/
|
|
|
|
|
|
typedef RPC_TRANS_STATUS
|
|
(RPC_ENTRY * TRANS_CLIENT_RECEIVE_WITH_TIMEOUT) (
|
|
IN RPC_TRANSPORT_CONNECTION ThisConnection,
|
|
IN OUT void PAPI * PAPI * Buffer,
|
|
IN OUT unsigned int PAPI * BufferLength,
|
|
IN unsigned long dwTimeout
|
|
);
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
Arguments:
|
|
|
|
ThisConnection - Supplies the connection to be received from. The
|
|
connection is specified as a pointer to memory containing tranport
|
|
interface module level information about the connection.
|
|
|
|
Buffer - Supplies a preallocated buffer to the receive the packet into
|
|
if it will fit. If the packet does not fit, the transport interface
|
|
module must allocate a larger buffer which will hold the entire
|
|
packet. The buffer will contain the packet upon return.
|
|
|
|
BufferLength - Supplies the length of the preallocated buffer in bytes
|
|
and returns the length of the received packet in bytes.
|
|
|
|
dwTimeout - Receive Timeout
|
|
|
|
Return Value:
|
|
|
|
RPC_S_OK - A packet was successfully received from the server.
|
|
|
|
RPC_S_OUT_OF_MEMORY - Insufficient memory is available to allocate a
|
|
buffer to receive the packet into. The connection will not have
|
|
been closed if this error occurs.
|
|
|
|
RPC_S_OUT_OF_RESOURCES - Insufficient resources are available to perform
|
|
the operation. The connection will not have been closed if this
|
|
error occurs.
|
|
|
|
RPC_P_RECEIVE_FAILED - The receive operation failed. The connection
|
|
will have been closed, so the close operation must not be performed
|
|
on the connection after this error code has been returned.
|
|
--*/
|
|
|
|
|
|
|
|
typedef RPC_TRANS_STATUS
|
|
(RPC_ENTRY * TRANS_CLIENT_SENDRECEIVE_WITH_TIMEOUT) (
|
|
IN RPC_TRANSPORT_CONNECTION ThisConnection,
|
|
IN void PAPI * SendBuffer,
|
|
IN unsigned int SendBufferLength,
|
|
IN OUT void PAPI * PAPI * ReceiveBuffer,
|
|
IN OUT unsigned int PAPI * ReceiveBufferLength,
|
|
IN unsigned long dwTimeout
|
|
);
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
Arguments:
|
|
|
|
ThisConnection - Supplies the connection to be sent on and then received
|
|
from. The connection is specified as a pointer to memory containing
|
|
transport interface module level information about the connection.
|
|
|
|
SendBuffer - Supplies a buffer containing the packet to be sent to the
|
|
server.
|
|
|
|
SendBufferLength - Supplies the length of the send buffer in bytes.
|
|
|
|
ReceiveBuffer - Supplies a preallocated buffer to the receive the packet
|
|
into if it will fit. If the packet does not fit, the transport
|
|
interface module must allocate a larger buffer which will hold the
|
|
entire packet. The buffer will contain the packet upon return.
|
|
|
|
ReceiveBufferLength - Supplies the length of the preallocated receive
|
|
buffer in bytes and returns the length of the received packet in bytes.
|
|
|
|
dwTimeout - Receive Timeout
|
|
|
|
Return Value:
|
|
|
|
RPC_S_OK - The packet was successfully sent to the server, and we
|
|
successfully received one back.
|
|
|
|
RPC_S_OUT_OF_MEMORY - Insufficient memory is available to perform the
|
|
operation. The connection will not have been closed if this error
|
|
occurs.
|
|
|
|
RPC_S_OUT_OF_RESOURCES - Insufficient resources are available to perform
|
|
the operation. The connection will not have been closed if this
|
|
error occurs.
|
|
|
|
RPC_P_SEND_FAILED - The send operation failed. The connection
|
|
will have been closed, so the close operation must not be performed
|
|
on the connection after this error code has been returned.
|
|
|
|
RPC_P_RECEIVE_FAILED - The receive operation failed. The connection
|
|
will have been closed, so the close operation must not be performed
|
|
on the connection after this error code has been returned.
|
|
|
|
--*/
|
|
|
|
|
|
|
|
typedef RPC_TRANS_STATUS
|
|
(RPC_ENTRY * TRANS_CLIENT_TOWERCONSTRUCT) (
|
|
IN char PAPI * Endpoint,
|
|
IN char PAPI * NetworkAddress,
|
|
OUT unsigned short PAPI * Floors,
|
|
OUT unsigned long PAPI * ByteCount,
|
|
OUT unsigned char PAPI * PAPI * Tower,
|
|
IN char PAPI * Protseq
|
|
);
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
Arguments:
|
|
|
|
Endpoint - Supplies the Endpoint that needs to be encoded into the tower
|
|
|
|
NetworkAddress - Supplies the Network Address that needs to be encoded into
|
|
the tower.
|
|
|
|
Floors - The transport will return the number of floors it encoded here.
|
|
|
|
ByteCount - This field specifies the size of the "upper-transport-specific"
|
|
tower that is encoded and returned by the transport.
|
|
|
|
Tower - The encoded "upper tower" that is returned by the transport. Memory
|
|
for this is allocated by the transport and must be freed by the
|
|
caller.
|
|
|
|
Return Value:
|
|
|
|
RPC_S_OK - The packet was successfully sent to the server, and we
|
|
successfully received one back.
|
|
|
|
RPC_S_OUT_OF_MEMORY - Insufficient memory is available to perform the
|
|
operation. The connection will not have been closed if this error
|
|
occurs.
|
|
|
|
--*/
|
|
|
|
|
|
typedef RPC_TRANS_STATUS
|
|
(RPC_ENTRY * TRANS_CLIENT_TOWEREXPLODE) (
|
|
IN unsigned char PAPI * Tower,
|
|
OUT char PAPI * PAPI * Protseq,
|
|
OUT char PAPI * PAPI * Endpoint,
|
|
OUT char PAPI * PAPI * NetworkAddress
|
|
);
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
Arguments:
|
|
|
|
|
|
Tower - The encoded "upper tower" that needs to be parsed by the transport.
|
|
|
|
Endpoint - ASCII Endpoint returned by the transport.
|
|
|
|
NetworkAddress - ASCII NW Addressed returned by the transport.
|
|
|
|
Return Value:
|
|
|
|
RPC_S_OK - The packet was successfully sent to the server, and we
|
|
successfully received one back.
|
|
|
|
RPC_S_OUT_OF_MEMORY - Insufficient memory is available to perform the
|
|
operation. The connection will not have been closed if this error
|
|
occurs.
|
|
|
|
--*/
|
|
|
|
|
|
typedef struct _RPC_CLIENT_TRANSPORT_INFO
|
|
{
|
|
unsigned short TransInterfaceVersion;
|
|
unsigned short TransId;
|
|
|
|
// BUGBUG
|
|
//
|
|
// TowerConstruct and TowerExplode must be at the same offset in both
|
|
// connection and datagram transport info structures. They are used
|
|
// by OsfTowerConstruct, which ignores the fact that c/o and DG use
|
|
// different structures.
|
|
//
|
|
TRANS_CLIENT_TOWERCONSTRUCT TowerConstruct;
|
|
TRANS_CLIENT_TOWEREXPLODE TowerExplode;
|
|
|
|
unsigned MaximumPacketSize;
|
|
unsigned SizeOfConnection;
|
|
|
|
TRANS_CLIENT_OPEN Open;
|
|
TRANS_CLIENT_CLOSE Close;
|
|
TRANS_CLIENT_SEND Send;
|
|
TRANS_CLIENT_RECEIVE Receive;
|
|
TRANS_CLIENT_SENDRECEIVE SendReceive;
|
|
TRANS_CLIENT_SET_TIMEOUT SetTimeout;
|
|
|
|
TRANS_CLIENT_RECEIVE_WITH_TIMEOUT ReceiveWithTimeout ;
|
|
TRANS_CLIENT_SENDRECEIVE_WITH_TIMEOUT SendReceiveWithTimeout ;
|
|
|
|
} RPC_CLIENT_TRANSPORT_INFO;
|
|
|
|
|
|
typedef RPC_STATUS (RPC_ENTRY * DG_TRANS_CLIENT_TRANSPORT_UNLOAD)();
|
|
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
Destructor for the server transport.
|
|
|
|
Arguments:
|
|
|
|
<none>
|
|
|
|
Return Value:
|
|
|
|
<none>
|
|
|
|
--*/
|
|
|
|
|
|
|
|
typedef RPC_STATUS (RPC_ENTRY * DG_TRANS_CLIENT_RECEIVE_PACKET) (
|
|
IN void __RPC_FAR * Endpoint,
|
|
IN void __RPC_FAR * Buffer,
|
|
IN unsigned long __RPC_FAR * BufferLength,
|
|
IN unsigned long Timeout,
|
|
IN void __RPC_FAR * ServerAddress
|
|
);
|
|
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
Receives a packet from the transport address the passed packet is
|
|
associated with.
|
|
|
|
Arguments:
|
|
|
|
pTransAddress - Server's transport address information.
|
|
|
|
LargestPacketSize - Size of largest packet we can accept.
|
|
|
|
pNcaPacketHeader - Pointer to buffer to place incoming pkt into.
|
|
|
|
pDataLength - Number of bytes read in.
|
|
|
|
pTimeReceived - Time the data was read in.
|
|
|
|
Timeout - Receive timeout in milliseconds.
|
|
|
|
ppFrom - Pointer to the client address structure.
|
|
|
|
|
|
Return Value:
|
|
|
|
RPC_S_OK
|
|
<return from MapStatusCode>
|
|
|
|
--*/
|
|
|
|
typedef RPC_STATUS (RPC_ENTRY * DG_TRANS_CLIENT_REGISTER_CALL) (
|
|
IN void __RPC_FAR * pClientCall,
|
|
IN RPC_CHAR __RPC_FAR * Server,
|
|
IN RPC_CHAR __RPC_FAR * Endpoint,
|
|
OUT void __RPC_FAR * __RPC_FAR* ppTransAddress
|
|
);
|
|
|
|
typedef RPC_STATUS (RPC_ENTRY * DG_TRANS_CLIENT_DEREGISTER_CALL) (
|
|
IN void __RPC_FAR * pTransAddress
|
|
);
|
|
|
|
typedef RPC_STATUS (RPC_ENTRY * DG_TRANS_CLIENT_SEND_PACKET) (
|
|
IN void __RPC_FAR * Endpoint,
|
|
IN void __RPC_FAR * Buffer,
|
|
IN unsigned long BufferLength,
|
|
IN BOOL Broadcast,
|
|
IN void __RPC_FAR * pTransAddress
|
|
);
|
|
|
|
typedef RPC_STATUS (RPC_ENTRY * DG_TRANS_CLIENT_ASSIGN_ENDPOINT) (
|
|
IN void __RPC_FAR * Endpoint
|
|
);
|
|
|
|
typedef RPC_STATUS (RPC_ENTRY * DG_TRANS_CLIENT_FREE_ENDPOINT) (
|
|
IN void __RPC_FAR * Endpoint
|
|
);
|
|
|
|
typedef RPC_STATUS (RPC_ENTRY * DG_TRANS_CLIENT_TRANSLATE_CLIENT_ENDPOINT)
|
|
(
|
|
IN void PAPI * pBinaryEndpoint,
|
|
OUT RPC_CHAR PAPI * pClientEndpoint
|
|
);
|
|
|
|
typedef RPC_STATUS (RPC_ENTRY * DG_TRANS_CLIENT_SET_BUFFER_LENGTH)
|
|
(
|
|
IN void PAPI * pBinaryEndpoint,
|
|
IN unsigned Length
|
|
);
|
|
|
|
typedef RPC_STATUS (RPC_ENTRY * DG_TRANS_CLIENT_INQ_BUFFER_LENGTH)
|
|
(
|
|
IN void __RPC_FAR * pBinaryEndpoint,
|
|
IN unsigned __RPC_FAR * Length
|
|
);
|
|
|
|
typedef RPC_STATUS (RPC_ENTRY * DG_TRANS_CLIENT_BEGIN_CALL)
|
|
(
|
|
IN void __RPC_FAR * Endpoint,
|
|
IN void __RPC_FAR * Connection
|
|
);
|
|
|
|
typedef void (RPC_ENTRY * DG_TRANS_CLIENT_END_CALL)
|
|
(
|
|
IN void __RPC_FAR * Endpoint
|
|
);
|
|
|
|
|
|
typedef struct _DG_RPC_CLIENT_TRANSPORT_INFO
|
|
{
|
|
unsigned short TransInterfaceVersion;
|
|
unsigned short TransId;
|
|
|
|
// BUGBUG
|
|
//
|
|
// TowerConstruct and TowerExplode must be at the same offset in both
|
|
// connection and datagram transport info structures. They are used
|
|
// by OsfTowerConstruct, which ignores the fact that c/o and DG use
|
|
// different structures.
|
|
//
|
|
TRANS_CLIENT_TOWERCONSTRUCT TowerConstruct;
|
|
TRANS_CLIENT_TOWEREXPLODE TowerExplode;
|
|
|
|
unsigned short AddressSize;
|
|
unsigned short EndpointSize;
|
|
unsigned short EndpointStringSize;
|
|
void __RPC_FAR *EndpointManager;
|
|
|
|
DG_TRANS_CLIENT_TRANSPORT_UNLOAD TransportUnload;
|
|
DG_TRANS_CLIENT_RECEIVE_PACKET ReceivePacket;
|
|
DG_TRANS_CLIENT_SEND_PACKET Send;
|
|
DG_TRANS_CLIENT_REGISTER_CALL RegisterCall;
|
|
DG_TRANS_CLIENT_DEREGISTER_CALL DeregisterCall;
|
|
DG_TRANS_CLIENT_ASSIGN_ENDPOINT AssignEndpoint;
|
|
DG_TRANS_CLIENT_FREE_ENDPOINT FreeEndpoint;
|
|
DG_TRANS_CLIENT_TRANSLATE_CLIENT_ENDPOINT GetEndpoint;
|
|
DG_TRANS_CLIENT_SET_BUFFER_LENGTH SetBufferLength;
|
|
DG_TRANS_CLIENT_INQ_BUFFER_LENGTH InqBufferLength;
|
|
|
|
DG_TRANS_CLIENT_BEGIN_CALL BeginCall;
|
|
DG_TRANS_CLIENT_END_CALL EndCall;
|
|
|
|
unsigned short BaselinePduSize;
|
|
unsigned short PreferredPduSize;
|
|
unsigned short MaxPduSize;
|
|
|
|
unsigned short MaxPacketSize;
|
|
|
|
unsigned DefaultBufferLength;
|
|
|
|
} DG_RPC_CLIENT_TRANSPORT_INFO;
|
|
|
|
typedef DG_RPC_CLIENT_TRANSPORT_INFO PAPI * PDG_RPC_CLIENT_TRANSPORT_INFO;
|
|
|
|
|
|
#define MAX_ANY_ENDPOINT_STRING 128
|
|
|
|
/*++
|
|
DG_SERVER_DG_TRANS_ADDRESS Description:
|
|
|
|
This structure represents a network address. It is used on the server side
|
|
to identify an endpoint; it is used on the client side to identify a
|
|
binding.
|
|
|
|
Fields:
|
|
|
|
pServerAddress - Pointer back to the DG_ADDRESS object that is associated
|
|
with this.
|
|
|
|
pTsap - The transport service access point we will receive on. IE: socket.
|
|
|
|
--*/
|
|
|
|
typedef struct
|
|
{
|
|
void * pServerAddress;
|
|
void * pTsap;
|
|
|
|
} DG_SERVER_TRANS_ADDRESS;
|
|
|
|
|
|
typedef DG_SERVER_TRANS_ADDRESS * PDG_SERVER_TRANS_ADDRESS;
|
|
|
|
|
|
/*++
|
|
DG_DG_TRANS_CLIENT_HANDLE Description:
|
|
|
|
This structure represents a network address. It is used on the server side
|
|
to identify an endpoint; it is used on the client side to identify a
|
|
binding.
|
|
|
|
Fields:
|
|
|
|
|
|
pTransAddress - The transport address that the client is talking on.
|
|
|
|
pFrom - The client port address we are receiveing from. IE: sockaddr
|
|
|
|
|
|
typedef struct _DG_DG_TRANS_CLIENT_HANDLE{
|
|
void * pTransAddress;
|
|
void * pFrom;
|
|
}DG_DG_TRANS_CLIENT_HANDLE;
|
|
|
|
|
|
--*/
|
|
|
|
|
|
|
|
typedef void * PDG_TRANS_CLIENT_ENDPOINT;
|
|
|
|
|
|
typedef RPC_STATUS (RPC_ENTRY * DG_TRANS_SERVER_TRANSPORT_UNLOAD)
|
|
(
|
|
);
|
|
|
|
typedef RPC_STATUS (RPC_ENTRY * DG_TRANS_SERVER_RECEIVE_PACKET)
|
|
(
|
|
IN void __RPC_FAR * pAddress,
|
|
PDG_SERVER_TRANS_ADDRESS pTransAddress,
|
|
unsigned long LargestPacketSize,
|
|
char * pNcaPacketHeader,
|
|
unsigned * pDataLength,
|
|
unsigned long Timeout,
|
|
void * pClientEndpoint
|
|
);
|
|
|
|
typedef RPC_STATUS (RPC_ENTRY * DG_TRANS_SERVER_FORWARD_PACKET)
|
|
(
|
|
IN PDG_SERVER_TRANS_ADDRESS pTransAddress,
|
|
IN char * pNcaPacketHeader,
|
|
IN unsigned long DataLength,
|
|
void * pEndpoint
|
|
);
|
|
|
|
typedef RPC_STATUS (RPC_ENTRY * DG_TRANS_SERVER_REGISTER_ENDPOINT)
|
|
(
|
|
IN void * pServerAddress,
|
|
IN RPC_CHAR * pEndpoint,
|
|
OUT PDG_SERVER_TRANS_ADDRESS * ppTransAddress,
|
|
OUT RPC_CHAR PAPI * lNetworkAddress,
|
|
OUT unsigned int PAPI * NumNetworkAddress,
|
|
IN unsigned int NetworkAddressLength,
|
|
IN unsigned long EndpointFlags,
|
|
IN unsigned long NICFlags
|
|
);
|
|
|
|
typedef RPC_STATUS (RPC_ENTRY * DG_TRANS_SERVER_DEREGISTER_ENDPOINT)
|
|
(
|
|
IN OUT PDG_SERVER_TRANS_ADDRESS * pServerTransAddress
|
|
);
|
|
|
|
typedef RPC_STATUS (RPC_ENTRY * DG_TRANS_SERVER_REGISTER_ANY_ENDPOINT)
|
|
(
|
|
IN void * pServerAddress,
|
|
OUT RPC_CHAR * pEndpointName,
|
|
OUT PDG_SERVER_TRANS_ADDRESS * ppServerTransAddress,
|
|
OUT RPC_CHAR PAPI * lNetworkAddress,
|
|
OUT unsigned int PAPI * NumNetworkAddress,
|
|
IN unsigned int NetworkAddressLength,
|
|
IN unsigned int EndpointLength,
|
|
IN unsigned long EndpointFlags,
|
|
IN unsigned long NICFlags
|
|
);
|
|
|
|
typedef RPC_STATUS (RPC_ENTRY * DG_TRANS_SERVER_SEND_PACKET_BACK)
|
|
(
|
|
IN PDG_SERVER_TRANS_ADDRESS pTransAddress,
|
|
IN char * pNcaPacketHeader,
|
|
IN unsigned DataLength,
|
|
void * pClientEndpoint
|
|
);
|
|
|
|
typedef void (RPC_ENTRY * DG_TRANS_SERVER_CLOSE_CLIENT_ENDPOINT)
|
|
(
|
|
IN void * pHandle
|
|
);
|
|
|
|
typedef RPC_STATUS (RPC_ENTRY * DG_TRANS_SERVER_TRANSLATE_CLIENT_ADDRESS)
|
|
(
|
|
IN void * pClientEndpoint,
|
|
OUT RPC_CHAR * pClientAddress
|
|
);
|
|
|
|
typedef RPC_STATUS (RPC_ENTRY * DG_TRANS_SERVER_TRANSLATE_CLIENT_ENDPOINT)
|
|
(
|
|
IN void * pBinaryEndpoint,
|
|
OUT RPC_CHAR * pClientEndpoint
|
|
);
|
|
|
|
typedef RPC_STATUS (RPC_ENTRY * TRANS_SERVER_START_LISTENING)
|
|
(
|
|
IN PDG_SERVER_TRANS_ADDRESS pTransAddress
|
|
);
|
|
|
|
typedef RPC_STATUS (RPC_ENTRY * DG_TRANS_SERVER_SET_BUFFER_LENGTH)
|
|
(
|
|
IN void PAPI * pBinaryEndpoint,
|
|
IN unsigned Length
|
|
);
|
|
|
|
typedef struct _DG_RPC_SERVER_TRANSPORT_INFO
|
|
{
|
|
unsigned short TransInterfaceVersion;
|
|
unsigned int SizeOfAddress;
|
|
unsigned int SizeOfConnection;
|
|
unsigned SizeOfAddressString;
|
|
unsigned SizeOfEndpointString;
|
|
DG_TRANS_SERVER_TRANSPORT_UNLOAD TransportUnload;
|
|
DG_TRANS_SERVER_RECEIVE_PACKET ReceivePacket;
|
|
DG_TRANS_SERVER_REGISTER_ENDPOINT RegisterEndpoint;
|
|
DG_TRANS_SERVER_DEREGISTER_ENDPOINT DeregisterEndpoint;
|
|
DG_TRANS_SERVER_REGISTER_ANY_ENDPOINT RegisterAnyEndpoint;
|
|
DG_TRANS_SERVER_SEND_PACKET_BACK SendPacketBack;
|
|
DG_TRANS_SERVER_FORWARD_PACKET ForwardPacket;
|
|
DG_TRANS_SERVER_CLOSE_CLIENT_ENDPOINT CloseClientEndpoint;
|
|
DG_TRANS_SERVER_TRANSLATE_CLIENT_ADDRESS TranslateClientAddress;
|
|
DG_TRANS_SERVER_TRANSLATE_CLIENT_ENDPOINT TranslateClientEndpoint;
|
|
TRANS_SERVER_START_LISTENING StartListening;
|
|
DG_TRANS_SERVER_SET_BUFFER_LENGTH SetBufferLength;
|
|
|
|
unsigned short BaselinePduSize;
|
|
unsigned short PreferredPduSize;
|
|
unsigned short MaxPduSize;
|
|
|
|
unsigned short MaxPacketSize;
|
|
|
|
} DG_RPC_SERVER_TRANSPORT_INFO;
|
|
|
|
typedef DG_RPC_SERVER_TRANSPORT_INFO PAPI * PDG_RPC_SERVER_TRANSPORT_INFO;
|
|
|
|
RPC_STATUS RPC_ENTRY
|
|
I_RpcTransClientReallocBuffer (
|
|
IN RPC_TRANSPORT_CONNECTION ThisConnection,
|
|
IN OUT void PAPI * PAPI * Buffer,
|
|
IN unsigned int OldBufferLength,
|
|
IN unsigned int NewBufferLength
|
|
);
|
|
|
|
unsigned short RPC_ENTRY
|
|
I_RpcTransClientMaxFrag (
|
|
IN RPC_TRANSPORT_CONNECTION ThisConnection
|
|
);
|
|
|
|
RPC_STATUS RPC_ENTRY
|
|
I_RpcIOAlerted(
|
|
IN RPC_TRANSPORT_CONNECTION TransportConnection
|
|
);
|
|
|
|
#ifdef NTENV
|
|
|
|
HANDLE RPC_ENTRY
|
|
I_RpcGetThreadEvent();
|
|
|
|
RPC_STATUS RPC_ENTRY
|
|
I_RpcServerAllocatePort(
|
|
IN unsigned long flags,
|
|
IN unsigned short *pport);
|
|
|
|
#endif
|
|
|
|
#ifdef __RPC_WIN16__
|
|
|
|
|
|
typedef RPC_STATUS
|
|
(RPC_ENTRY * RPC_TRANS_CLIENT_REALLOC_BUFFER) (
|
|
IN RPC_TRANSPORT_CONNECTION ThisConnection,
|
|
IN OUT void PAPI * PAPI * Buffer,
|
|
IN unsigned int OldBufferLength,
|
|
IN unsigned int NewBufferLength
|
|
);
|
|
|
|
typedef HANDLE
|
|
(PAPI PASCAL * RPC_WIN_ASYNC_CALL_BEGIN) (
|
|
IN LPVOID lpContext
|
|
);
|
|
|
|
typedef int
|
|
(PAPI PASCAL * RPC_WIN_ASYNC_CALL_WAIT) (
|
|
IN HANDLE hCall,
|
|
IN HWND hDallyWnd,
|
|
IN unsigned long Timeout
|
|
);
|
|
|
|
typedef void
|
|
(PAPI PASCAL * RPC_WIN_ASYNC_CALL_END) (
|
|
IN HANDLE hCall
|
|
);
|
|
|
|
typedef void
|
|
(PAPI PASCAL * RPC_WIN_ASYNC_CALL_COMPLETE) (
|
|
IN LPVOID lpContext
|
|
);
|
|
|
|
typedef __RPC_FAR *
|
|
(RPC_ENTRY * RPC_ALLOCATE) (
|
|
IN unsigned int Size
|
|
);
|
|
|
|
typedef void
|
|
(RPC_ENTRY * RPC_FREE) (
|
|
IN void __RPC_FAR * Object
|
|
);
|
|
|
|
typedef long
|
|
(__far __pascal * RPC_REG_CLOSE_KEY) (
|
|
void __far * Key
|
|
);
|
|
|
|
typedef long
|
|
(__far __pascal * RPC_REG_OPEN_KEY) (
|
|
void __far * Key,
|
|
const char __far * SubKey,
|
|
void __far * __far * Result
|
|
);
|
|
|
|
typedef long
|
|
(__far __pascal * RPC_REG_QUERY_VALUE) (
|
|
void __far * Key,
|
|
const char __far * SubKey,
|
|
const char __far * Value,
|
|
unsigned long __far * ValueLength
|
|
);
|
|
|
|
typedef unsigned
|
|
(__far __pascal * RPC_WIN_IS_TASK_YIELDING) (
|
|
IN HANDLE hCall
|
|
);
|
|
|
|
typedef BOOL
|
|
(PASCAL FAR * WIN_DLL_AT_EXIT) (
|
|
void * exitfunc
|
|
);
|
|
|
|
#define RPC_WIN_CALLBACK_INFO_VERSION 1
|
|
#define RPC_WIN_INFINITE_TIMEOUT (~0UL)
|
|
|
|
#define RPC_WIN_WAIT_ABORTED 0
|
|
#define RPC_WIN_WAIT_SUCCESS 1
|
|
#define RPC_WIN_WAIT_TIMEOUT 2
|
|
|
|
typedef struct _RPC_CLIENT_RUNTIME_INFO
|
|
{
|
|
unsigned Version;
|
|
RPC_TRANS_CLIENT_REALLOC_BUFFER ReallocBuffer;
|
|
RPC_WIN_ASYNC_CALL_BEGIN AsyncCallBegin;
|
|
RPC_WIN_ASYNC_CALL_WAIT AsyncCallWait;
|
|
RPC_WIN_ASYNC_CALL_END AsyncCallEnd;
|
|
RPC_WIN_ASYNC_CALL_COMPLETE AsyncCallComplete;
|
|
RPC_WIN_IS_TASK_YIELDING TaskYielding;
|
|
RPC_ALLOCATE Allocate;
|
|
RPC_FREE Free;
|
|
RPC_REG_OPEN_KEY RegOpenKey;
|
|
RPC_REG_CLOSE_KEY RegCloseKey;
|
|
RPC_REG_QUERY_VALUE RegQueryValue;
|
|
unsigned short TaskExiting;
|
|
WIN_DLL_AT_EXIT WinDLLAtExit ;
|
|
} RPC_CLIENT_RUNTIME_INFO;
|
|
|
|
typedef RPC_CLIENT_TRANSPORT_INFO PAPI *
|
|
(RPC_ENTRY * TRANS_CLIENT_INIT_ROUTINE) (
|
|
IN RPC_CHAR PAPI * RpcProtocolSequence,
|
|
IN RPC_CLIENT_RUNTIME_INFO PAPI * RpcRuntimeInfo
|
|
);
|
|
|
|
#else // __RPC_WIN16__
|
|
|
|
typedef RPC_CLIENT_TRANSPORT_INFO PAPI *
|
|
(RPC_ENTRY * TRANS_CLIENT_INIT_ROUTINE) (
|
|
IN RPC_CHAR PAPI * RpcProtocolSequence
|
|
);
|
|
|
|
#endif // __RPC_WIN16__
|
|
|
|
typedef RPC_SERVER_TRANSPORT_INFO PAPI *
|
|
(RPC_ENTRY * TRANS_SERVER_INIT_ROUTINE) (
|
|
IN RPC_CHAR PAPI * RpcProtocolSequence
|
|
);
|
|
|
|
#ifdef DOS
|
|
typedef int (*AT_EXIT)(void);
|
|
void RPC_ENTRY I_DosAtExit(AT_EXIT);
|
|
#endif // DOS
|
|
|
|
#if defined(DOS) && !defined(WIN)
|
|
#pragma warning(default:4147)
|
|
#endif
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif // __RPCTRAN_H__
|
|
|