2020-09-30 17:12:29 +02:00

90 lines
2.8 KiB
C

/********************************************************************/
/** Microsoft LAN Manager **/
/** Copyright(c) Microsoft Corp., 1990-1993 **/
/********************************************************************/
/* :ts=4 */
//** DGRAM.H - Common datagram protocol definitions.
//
// This file contains definitions for the functions common to
// both UDP and Raw IP.
//
#ifndef _DGRAM_INCLUDED_
#define _DGRAM_INCLUDED_ 1
//* Structure used for maintaining DG send requests.
#define dsr_signature 0x20525338
struct DGSendReq {
#ifdef DEBUG
ulong dsr_sig;
#endif
Queue dsr_q; // Queue linkage when pending.
IPAddr dsr_addr; // Remote IPAddr.
PNDIS_BUFFER dsr_buffer; // Buffer of data to send.
PNDIS_BUFFER dsr_header; // Pointer to header buffer.
CTEReqCmpltRtn dsr_rtn; // Completion routine.
PVOID dsr_context; // User context.
ushort dsr_size; // Size of buffer.
ushort dsr_port; // Remote port.
}; /* DGSendReq */
typedef struct DGSendReq DGSendReq;
//* Structure used for maintaining DG receive requests.
#define drr_signature 0x20525238
struct DGRcvReq {
#ifdef DEBUG
ulong drr_sig;
#endif
Queue drr_q; // Queue linkage on AddrObj.
IPAddr drr_addr; // Remote IPAddr acceptable.
PNDIS_BUFFER drr_buffer; // Buffer to be filled in.
PTDI_CONNECTION_INFORMATION drr_conninfo; // Pointer to conn. info.
CTEReqCmpltRtn drr_rtn; // Completion routine.
PVOID drr_context; // User context.
ushort drr_size; // Size of buffer.
ushort drr_port; // Remote port acceptable.
}; /* DGRcvReq */
typedef struct DGRcvReq DGRcvReq;
//* External definition of exported variables.
EXTERNAL_LOCK(DGSendReqLock)
EXTERNAL_LOCK(DGRcvReqFreeLock)
extern CTEEvent DGDelayedEvent;
//* External definition of exported functions.
extern void DGSendComplete(void *Context, PNDIS_BUFFER BufferChain);
extern TDI_STATUS TdiSendDatagram(PTDI_REQUEST Request,
PTDI_CONNECTION_INFORMATION ConnInfo, uint DataSize,
uint *BytesSent, PNDIS_BUFFER Buffer);
extern TDI_STATUS TdiReceiveDatagram(PTDI_REQUEST Request,
PTDI_CONNECTION_INFORMATION ConnInfo,
PTDI_CONNECTION_INFORMATION ReturnInfo, uint RcvSize,
uint *BytesRcvd, PNDIS_BUFFER Buffer);
extern IP_STATUS DGRcv(void *IPContext, IPAddr Dest, IPAddr Src, IPAddr LocalAddr,
IPRcvBuf *RcvBuf, uint Size, uchar IsBCast, uchar Protocol,
IPOptInfo *OptInfo);
extern void FreeDGRcvReq(DGRcvReq *RcvReq);
extern void FreeDGSendReq(DGSendReq *SendReq);
extern int InitDG(uint MaxHeaderSize);
extern _inline PNDIS_BUFFER GetDGHeader(void);
extern void FreeDGHeader(PNDIS_BUFFER FreedBuffer);
extern void PutPendingQ(AddrObj *QueueingAO);
#endif // ifndef _DGRAM_INCLUDED_