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

125 lines
3.5 KiB
C++

//////////////////////////////////////////////////////////
//
// Copyright (c) 2001 Microsoft Corporation
//
// Module Name:
// send.cpp
//
// Abstract:
// This module contains code which implements send
// commands from the dll
//
//////////////////////////////////////////////////////////
#include "stdafx.h"
///////////////////////////////////////////////////////////////////////
// Public functions
///////////////////////////////////////////////////////////////////////
// --------------------------------------------------------------------
//
// Function: DoSendDatagram
//
// Arguments: TdiHandle -- handle of address object
// pTransportAddress -- TA to send data to
// pucBuffer -- data buffer to send
// ulBufferLength -- length of data buffer
//
// Returns: none
//
// Descript: This function causes the driver to send a datagram
//
//---------------------------------------------------------------------
VOID
DoSendDatagram(ULONG ulTdiHandle,
PTRANSPORT_ADDRESS pTransportAddress,
PUCHAR pucBuffer,
ULONG ulBufferLength)
{
RECEIVE_BUFFER ReceiveBuffer; // return info from command
SEND_BUFFER SendBuffer; // arguments for command
//
// set up arguments
//
SendBuffer.TdiHandle = ulTdiHandle;
memcpy(&SendBuffer.COMMAND_ARGS.SendArgs.TransAddr,
pTransportAddress,
(FIELD_OFFSET(TRANSPORT_ADDRESS, Address)
+ FIELD_OFFSET(TA_ADDRESS, Address)
+ pTransportAddress->Address[0].AddressLength));
SendBuffer.COMMAND_ARGS.SendArgs.ulBufferLength = ulBufferLength;
SendBuffer.COMMAND_ARGS.SendArgs.pucUserModeBuffer = pucBuffer;
//
// call the driver
//
NTSTATUS lStatus = TdiLibDeviceIO(ulSENDDATAGRAM,
&SendBuffer,
&ReceiveBuffer);
if (lStatus != STATUS_SUCCESS)
{
_tprintf(TEXT("DoSendDatagram: failure, status = %s\n"), TdiLibStatusMessage(lStatus));
}
}
// --------------------------------------------------------------------
//
// Function: DoSend
//
// Arguments: TdiHandle -- handle of endpoint
// pucBuffer -- data buffer to send
// ulBufferLength -- length of data buffer
// ulSendFlags -- send options
//
// Returns: none
//
// Descript: This function causes the driver to send data over
// a connection
//
//---------------------------------------------------------------------
VOID
DoSend(ULONG ulTdiHandle,
PUCHAR pucBuffer,
ULONG ulBufferLength,
ULONG ulSendFlags)
{
RECEIVE_BUFFER ReceiveBuffer; // return info from command
SEND_BUFFER SendBuffer; // arguments for command
//
// set up arguments
//
SendBuffer.TdiHandle = ulTdiHandle;
SendBuffer.COMMAND_ARGS.SendArgs.ulFlags = ulSendFlags;
SendBuffer.COMMAND_ARGS.SendArgs.ulBufferLength = ulBufferLength;
SendBuffer.COMMAND_ARGS.SendArgs.pucUserModeBuffer = pucBuffer;
//
// call the driver
//
NTSTATUS lStatus = TdiLibDeviceIO(ulSEND,
&SendBuffer,
&ReceiveBuffer);
if (lStatus != STATUS_SUCCESS)
{
_tprintf(TEXT("DoSend: failure, status = %s\n"), TdiLibStatusMessage(lStatus));
}
}
////////////////////////////////////////////////////////////////////
// end of file send.cpp
////////////////////////////////////////////////////////////////////