// -*- mode: C++; tab-width: 4; indent-tabs-mode: nil -*- (for GNU Emacs) // // Copyright (c) 1985-2000 Microsoft Corporation // // This file is part of the Microsoft Research IPv6 Network Protocol Stack. // You should have received a copy of the Microsoft End-User License Agreement // for this software along with this release; see the file "license.txt". // If not, please see http://www.research.microsoft.com/msripv6/license.htm, // or write to Microsoft Research, One Microsoft Way, Redmond, WA 98052-6399. // // Abstract: // // Transmission Control Protocol receive module definitions. // #define CONN_REQUEST_COMPLETE 0x01 #define SEND_REQUEST_COMPLETE 0x02 #define IN_RCV_COMPLETE 0x10 #define ANY_REQUEST_COMPLETE (CONN_REQUEST_COMPLETE | SEND_REQUEST_COMPLETE) #define trh_signature 0x20485254 // 'TRH ' typedef struct TCPRAHdr { #if DBG ulong trh_sig; // Signature. #endif struct TCPRAHdr *trh_next; // Next pointer. SeqNum trh_start; // First sequence number. uint trh_size; // Size in bytes of data in this TRH. uint trh_flags; // Flags for this segment. uint trh_urg; // Urgent pointer from this seg. IPv6Packet *trh_buffer; // Head of buffer list for this TRH. IPv6Packet *trh_end; // Tail of buffer list for this TRH. } TCPRAHdr; // // Structure of a TCP receive request. // #define trr_signature 0x20525254 // 'TRR ' typedef struct TCPRcvReq { struct TCPRcvReq *trr_next; // Next in chain. #if DBG ulong trr_sig; // Signature. #endif RequestCompleteRoutine trr_rtn; // Completion routine. PVOID trr_context; // User context. uint trr_amt; // Number of bytes currently in buffer. uint trr_offset; // Offset into first buffer on chain // at which to start copying. uint trr_flags; // Flags for this receive. ushort *trr_uflags; // Pointer to user specifed flags. uint trr_size; // Total size of buffer chain. PNDIS_BUFFER trr_buffer; // Pointer to useable NDIS buffer chain. } TCPRcvReq; #define TRR_PUSHED 0x80000000 // This buffer has been pushed. extern uint RequestCompleteFlags; extern Queue SendCompleteQ; extern Queue TCBDelayQ; extern KSPIN_LOCK RequestCompleteLock; extern KSPIN_LOCK TCBDelayLock; extern void TCPRcvComplete(void); extern void FreePacketChain(IPv6Packet *Packet); extern void DelayAction(struct TCB *DelayTCB, uint Action); extern void ProcessTCBDelayQ(void); extern void AdjustRcvWin(struct TCB *WinTCB); extern ProtoRecvProc TCPReceive; extern ProtoControlRecvProc TCPControlReceive;