2 * COPYRIGHT: See COPYING in the top level directory
3 * PROJECT: ReactOS TCP/IP protocol driver
5 * PURPOSE: Transmission Control Protocol definitions
11 (*PTCP_COMPLETION_ROUTINE
)( PVOID Context
, NTSTATUS Status
, ULONG Count
);
13 /* TCPv4 header structure */
15 typedef struct TCPv4_HEADER
{
16 USHORT SourcePort
; /* Source port */
17 USHORT DestinationPort
; /* Destination port */
18 ULONG SequenceNumber
; /* Sequence number */
19 ULONG AckNumber
; /* Acknowledgement number */
20 UCHAR DataOffset
; /* Data offset; 32-bit words (leftmost 4 bits) */
21 UCHAR Flags
; /* Control bits (rightmost 6 bits) */
22 USHORT Window
; /* Maximum acceptable receive window */
23 USHORT Checksum
; /* Checksum of segment */
24 USHORT Urgent
; /* Pointer to urgent data */
25 } TCPv4_HEADER
, *PTCPv4_HEADER
;
27 /* TCPv4 header flags */
36 #define TCPOPT_END_OF_LIST 0x0
37 #define TCPOPT_NO_OPERATION 0x1
38 #define TCPOPT_MAX_SEG_SIZE 0x2
40 #define TCPOPTLEN_MAX_SEG_SIZE 0x4
42 /* Data offset; 32-bit words (leftmost 4 bits); convert to bytes */
43 #define TCP_DATA_OFFSET(DataOffset)(((DataOffset) & 0xF0) >> (4-2))
46 /* TCPv4 pseudo header */
47 typedef struct TCPv4_PSEUDO_HEADER
{
48 ULONG SourceAddress
; /* Source address */
49 ULONG DestinationAddress
; /* Destination address */
50 UCHAR Zero
; /* Reserved */
51 UCHAR Protocol
; /* Protocol */
52 USHORT TCPLength
; /* Size of TCP segment */
53 } TCPv4_PSEUDO_HEADER
, *PTCPv4_PSEUDO_HEADER
;
56 typedef struct _SLEEPING_THREAD
{
60 } SLEEPING_THREAD
, *PSLEEPING_THREAD
;
62 /* Retransmission timeout constants */
64 /* Lower bound for retransmission timeout in TCP timer ticks */
65 #define TCP_MIN_RETRANSMISSION_TIMEOUT 1*1000 /* 1 tick */
67 /* Upper bound for retransmission timeout in TCP timer ticks */
68 #define TCP_MAX_RETRANSMISSION_TIMEOUT 1*60*1000 /* 1 tick */
70 /* Smoothing factor */
71 #define TCP_ALPHA_RETRANSMISSION_TIMEOUT(x)(((x)*8)/10) /* 0.8 */
73 /* Delay variance factor */
74 #define TCP_BETA_RETRANSMISSION_TIMEOUT(x)(((x)*16)/10) /* 1.6 */
77 /* Datagram/segment send request flags */
79 #define SRF_URG TCP_URG
80 #define SRF_ACK TCP_ACK
81 #define SRF_PSH TCP_PSH
82 #define SRF_RST TCP_RST
83 #define SRF_SYN TCP_SYN
84 #define SRF_FIN TCP_FIN
86 extern LONG TCP_IPIdentification
;
89 NTSTATUS
TCPServiceListeningSocket( PCONNECTION_ENDPOINT Listener
,
90 PCONNECTION_ENDPOINT Connection
,
91 PTDI_REQUEST_KERNEL Request
);
92 NTSTATUS
TCPListen( PCONNECTION_ENDPOINT Connection
, UINT Backlog
);
93 VOID
TCPAbortListenForSocket( PCONNECTION_ENDPOINT Listener
,
94 PCONNECTION_ENDPOINT Connection
);
96 ( PTDI_REQUEST Request
,
97 PCONNECTION_ENDPOINT Listener
,
98 PCONNECTION_ENDPOINT Connection
,
99 PTCP_COMPLETION_ROUTINE Complete
,
103 PCONNECTION_ENDPOINT
TCPAllocateConnectionEndpoint( PVOID ClientContext
);
104 VOID
TCPFreeConnectionEndpoint( PCONNECTION_ENDPOINT Connection
);
106 NTSTATUS
TCPSocket( PCONNECTION_ENDPOINT Connection
,
107 UINT Family
, UINT Type
, UINT Proto
);
109 PTCP_SEGMENT
TCPCreateSegment(
111 PTCPv4_HEADER TCPHeader
,
112 ULONG SegmentLength
);
115 PTCP_SEGMENT Segment
);
118 PCONNECTION_ENDPOINT Connection
,
119 PTCP_SEGMENT Segment
,
120 PULONG Acknowledged
);
123 PCONNECTION_ENDPOINT Connection
,
124 PTDI_CONNECTION_INFORMATION ConnInfo
,
125 PTDI_CONNECTION_INFORMATION ReturnInfo
,
126 PTCP_COMPLETION_ROUTINE Complete
,
129 NTSTATUS
TCPDisconnect(
130 PCONNECTION_ENDPOINT Connection
,
132 PTDI_CONNECTION_INFORMATION ConnInfo
,
133 PTDI_CONNECTION_INFORMATION ReturnInfo
,
134 PTCP_COMPLETION_ROUTINE Complete
,
137 NTSTATUS
TCPReceiveData(
138 PCONNECTION_ENDPOINT Connection
,
141 PULONG BytesReceived
,
143 PTCP_COMPLETION_ROUTINE Complete
,
146 NTSTATUS
TCPSendData(
147 PCONNECTION_ENDPOINT Connection
,
152 PTCP_COMPLETION_ROUTINE Complete
,
155 NTSTATUS
TCPClose( PCONNECTION_ENDPOINT Connection
);
157 NTSTATUS
TCPTranslateError( int OskitError
);
161 UINT
TCPAllocatePort( UINT HintPort
);
163 VOID
TCPFreePort( UINT Port
);
165 NTSTATUS TCPGetSockAddress
166 ( PCONNECTION_ENDPOINT Connection
,
167 PTRANSPORT_ADDRESS TransportAddress
,
168 BOOLEAN RemoteAddress
);
173 NTSTATUS
TCPShutdown(
176 VOID
TCPRemoveIRP( PCONNECTION_ENDPOINT Connection
, PIRP Irp
);