windows-nt/Source/XPSP1/NT/net/tdi/sample/lib/connect.cpp
2020-09-26 16:20:57 +08:00

182 lines
4.6 KiB
C++

//////////////////////////////////////////////////////////
//
// Copyright (c) 2001 Microsoft Corporation
//
// Module Name:
// connect.cpp
//
// Abstract:
// This module contains code which implements connection-related
// commands from the exe
//
//////////////////////////////////////////////////////////
#include "stdafx.h"
// --------------------------------------------------------------------
//
// Function: DoConnect
//
// Arguments: ulTdiEndpointHandle -- handle of endpoint
// pTransportAddress -- address to connect to
// ulTimeout -- how long to wait for connection
//
// Returns: Final status of connect
//
// Descript: This function causes the driver to try and connect to
// a remote address
//
//---------------------------------------------------------------------
NTSTATUS
DoConnect(ULONG ulTdiEndpointHandle,
PTRANSPORT_ADDRESS pTransportAddress,
ULONG ulTimeout)
{
RECEIVE_BUFFER ReceiveBuffer; // return info from command
SEND_BUFFER SendBuffer; // arguments for command
//
// set up arguments
//
SendBuffer.TdiHandle = ulTdiEndpointHandle;
SendBuffer.COMMAND_ARGS.ConnectArgs.ulTimeout = ulTimeout;
memcpy(&SendBuffer.COMMAND_ARGS.ConnectArgs.TransAddr,
pTransportAddress,
(FIELD_OFFSET(TRANSPORT_ADDRESS, Address)
+ FIELD_OFFSET(TA_ADDRESS, Address)
+ pTransportAddress->Address[0].AddressLength));
//
// call the driver
//
return TdiLibDeviceIO(ulCONNECT,
&SendBuffer,
&ReceiveBuffer);
}
// --------------------------------------------------------------------
//
// Function: DoDisconnect
//
// Arguments: TdiEndpointHandle -- handle of endpoint object
// ulFlags -- how to perform disconnect
//
// Returns: none
//
// Descript: This function causes the driver to disconnect the local
// endpoint from its connection with a remote endpoint
//
//---------------------------------------------------------------------
VOID
DoDisconnect(ULONG ulTdiEndpointHandle,
ULONG ulFlags)
{
RECEIVE_BUFFER ReceiveBuffer; // return info from command
SEND_BUFFER SendBuffer; // arguments for command
//
// set up arguments
//
SendBuffer.TdiHandle = ulTdiEndpointHandle;
SendBuffer.COMMAND_ARGS.ulFlags = ulFlags;
//
// call the driver
//
NTSTATUS lStatus = TdiLibDeviceIO(ulDISCONNECT,
&SendBuffer,
&ReceiveBuffer);
if (lStatus != STATUS_SUCCESS)
{
_tprintf(TEXT("DoDisconnect: failure, status = %s\n"), TdiLibStatusMessage(lStatus));
}
}
// --------------------------------------------------------------------
//
// Function: DoListen
//
// Arguments: TdiEndpointHandle -- handle of endpoint object
//
// Returns: final status of command
//
// Descript: This function causes the driver to listen for a connection
// request from a remote endpoint
//
//---------------------------------------------------------------------
NTSTATUS
DoListen(ULONG ulTdiEndpointHandle)
{
RECEIVE_BUFFER ReceiveBuffer; // return info from command
SEND_BUFFER SendBuffer; // arguments for command
//
// set up arguments
//
SendBuffer.TdiHandle = ulTdiEndpointHandle;
//
// call the driver
//
return TdiLibDeviceIO(ulLISTEN,
&SendBuffer,
&ReceiveBuffer);
}
// --------------------------------------------------------------------
//
// Function: DoIsConnected
//
// Arguments: TdiEndpointHandle -- handle of endpoint object
//
// Returns: TRUE if connected, FALSE if not
//
// Descript: This function causes the driver to check on the connect
// status of an endpoint
//
//---------------------------------------------------------------------
BOOLEAN
DoIsConnected(ULONG ulTdiEndpointHandle)
{
RECEIVE_BUFFER ReceiveBuffer; // return info from command
SEND_BUFFER SendBuffer; // arguments for command
//
// set up arguments
//
SendBuffer.TdiHandle = ulTdiEndpointHandle;
//
// call the driver
//
if (TdiLibDeviceIO(ulISCONNECTED,
&SendBuffer,
&ReceiveBuffer) == STATUS_SUCCESS)
{
return (BOOLEAN)ReceiveBuffer.RESULTS.ulReturnValue;
}
return FALSE;
}
////////////////////////////////////////////////////////////////////
// end of file connect.cpp
////////////////////////////////////////////////////////////////////