Source code of Windows XP (NT5)
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.
|
|
/********************************************************************/ /** 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);
|