windows-nt/Source/XPSP1/NT/net/tcpip/driver/inc/tcpsend.h
2020-09-26 16:20:57 +08:00

90 lines
3.5 KiB
C

/********************************************************************/
/** Microsoft LAN Manager **/
/** Copyright(c) Microsoft Corp., 1990-2000 **/
/********************************************************************/
/* :ts=4 */
//** TCPSEND.H - TCP send protocol definitions.
//
// This file contains the definitions of TCP send protocol things.
//
#pragma once
#define NUM_TCP_BUFFERS 150
#ifdef SEND_DEBUG
#define SEND_TICKS 10
EXTERNAL_LOCK(SendUseLock)
extern struct TCPSendReq *SendUseList;
#endif
//* Structure of a TCP send request.
#define tsr_signature 0x20525354 // 'TSR '
typedef struct TCPSendReq {
struct TCPReq tsr_req; // General request structure.
#if DBG
ulong tsr_sig;
#endif
uint tsr_size; // Size in bytes of data in send.
long tsr_refcnt; // Reference count for this send.
ulong tsr_flags; // Flags for this send.
uint tsr_unasize; // Number of bytes unacked.
uint tsr_offset; // Offset into first buffer in chain
// of start of unacked data.
PNDIS_BUFFER tsr_buffer; // Pointer to start of unacked buffer
// chain.
PNDIS_BUFFER tsr_lastbuf; // Pointer to last buffer in chain.
// Valid iff we've sent directly from
// the buffer chain w/o doing an
// NdisCopyBuffer.
uint tsr_time; // TCP time this was received.
#ifdef SEND_DEBUG
struct TCPSendReq *tsr_next; // Debug next field.
uint tsr_timer; // Timer field.
uint tsr_cmplt; // Who completed it.
#endif
} TCPSendReq;
#define TSR_FLAG_URG 0x01 // Urgent data.
#define TSR_FLAG_SEND_AND_DISC 0x02 // Send and disconnect
//* Structure defining the context received during a send completes.
#define scc_signature 0x20434353 // 'SCC '
typedef struct SendCmpltContext {
#if DBG
ulong scc_sig;
#endif
ulong scc_SendSize;
ulong scc_ByteSent;
TCB *scc_LargeSend;
TCPSendReq *scc_firstsend; // First send in this context.
uint scc_count; // Number of sends in count.
ushort scc_ubufcount; // Number of 'user' buffers in send.
ushort scc_tbufcount; // Number of transport buffers in send.
} SendCmpltContext;
extern void InitSendState(struct TCB *NewTCB);
extern void SendSYN(struct TCB *SYNTcb, CTELockHandle);
extern void SendKA(struct TCB *KATCB, CTELockHandle Handle);
extern void SendRSTFromHeader(struct TCPHeader UNALIGNED *TCPH, uint Length,
IPAddr Dest, IPAddr Src, IPOptInfo *OptInfo);
extern void SendACK(struct TCB *ACKTcb);
extern void SendRSTFromTCB(struct TCB *RSTTcb, RouteCacheEntry* RCE);
extern void GoToEstab(struct TCB *EstabTCB);
extern void FreeSendReq(TCPSendReq *FreedReq);
extern void FreeTCPHeader(PNDIS_BUFFER FreedBuffer);
extern int InitTCPSend(void);
extern void UnInitTCPSend(void);
extern void TCPSend(struct TCB *SendTCB, CTELockHandle Handle);
extern TDI_STATUS TdiSend(PTDI_REQUEST Request, ushort Flags, uint SendLength,
PNDIS_BUFFER SendBuffer);
extern uint RcvWin(struct TCB *WinTCB);