Revert my patch from yesterday. Need to take more time to work on it.
[reactos.git] / reactos / drivers / net / tcpip / include / tcp.h
index 949dee7..f56937b 100644 (file)
@@ -7,6 +7,9 @@
 #ifndef __TCP_H
 #define __TCP_H
 
+typedef VOID
+(*PTCP_COMPLETION_ROUTINE)( PVOID Context, NTSTATUS Status, ULONG Count );
+
 /* TCPv4 header structure */
 typedef struct TCPv4_HEADER {
   USHORT SourcePort;        /* Source port */
@@ -35,6 +38,9 @@ typedef struct TCPv4_HEADER {
 
 #define TCPOPTLEN_MAX_SEG_SIZE  0x4
 
+/* Data offset; 32-bit words (leftmost 4 bits); convert to bytes */
+#define TCP_DATA_OFFSET(DataOffset)(((DataOffset) & 0xF0) >> (4-2))
+
 
 /* TCPv4 pseudo header */
 typedef struct TCPv4_PSEUDO_HEADER {
@@ -45,6 +51,11 @@ typedef struct TCPv4_PSEUDO_HEADER {
   USHORT TCPLength;         /* Size of TCP segment */
 } __attribute__((packed)) TCPv4_PSEUDO_HEADER, *PTCPv4_PSEUDO_HEADER;
 
+typedef struct _SLEEPING_THREAD {
+    LIST_ENTRY Entry;
+    PVOID SleepToken;
+    KEVENT Event;
+} SLEEPING_THREAD, *PSLEEPING_THREAD;
 
 /* Retransmission timeout constants */
 
@@ -70,10 +81,36 @@ typedef struct TCPv4_PSEUDO_HEADER {
 #define SRF_SYN   TCP_SYN
 #define SRF_FIN   TCP_FIN
 
+extern LONG TCP_IPIdentification;
+extern LIST_ENTRY SignalledConnections;
+extern LIST_ENTRY SleepingThreadsList;
+extern FAST_MUTEX SleepingThreadsLock;
+extern RECURSIVE_MUTEX TCPLock;
+
+/* accept.c */
+NTSTATUS TCPServiceListeningSocket( PCONNECTION_ENDPOINT Listener,
+                                   PCONNECTION_ENDPOINT Connection,
+                                   PTDI_REQUEST_KERNEL Request );
+NTSTATUS TCPListen( PCONNECTION_ENDPOINT Connection, UINT Backlog );
+VOID TCPAbortListenForSocket( PCONNECTION_ENDPOINT Listener,
+                             PCONNECTION_ENDPOINT Connection );
+NTSTATUS TCPAccept
+( PTDI_REQUEST Request,
+  PCONNECTION_ENDPOINT Listener,
+  PCONNECTION_ENDPOINT Connection,
+  PTCP_COMPLETION_ROUTINE Complete,
+  PVOID Context );
+
+/* tcp.c */
+PCONNECTION_ENDPOINT TCPAllocateConnectionEndpoint( PVOID ClientContext );
+VOID TCPFreeConnectionEndpoint( PCONNECTION_ENDPOINT Connection );
+
+NTSTATUS TCPSocket( PCONNECTION_ENDPOINT Connection,
+                   UINT Family, UINT Type, UINT Proto );
 
 PTCP_SEGMENT TCPCreateSegment(
   PIP_PACKET IPPacket,
-  ULONG SequenceNumber,
+  PTCPv4_HEADER TCPHeader,
   ULONG SegmentLength);
 
 VOID TCPFreeSegment(
@@ -81,41 +118,57 @@ VOID TCPFreeSegment(
 
 VOID TCPAddSegment(
   PCONNECTION_ENDPOINT Connection,
-  PTCP_SEGMENT Segment);
-
-inline NTSTATUS TCPBuildSendRequest(
-    PTCP_SEND_REQUEST *SendRequest,
-    PDATAGRAM_SEND_REQUEST *DGSendRequest,
-    PCONNECTION_ENDPOINT Connection,
-    DATAGRAM_COMPLETION_ROUTINE Complete,
-    PVOID Context,
-    PNDIS_BUFFER Buffer,
-    DWORD BufferSize,
-    ULONG Flags);
-
-inline NTSTATUS TCPBuildAndTransmitSendRequest(
-    PCONNECTION_ENDPOINT Connection,
-    DATAGRAM_COMPLETION_ROUTINE Complete,
-    PVOID Context,
-    PNDIS_BUFFER Buffer,
-    DWORD BufferSize,
-    ULONG Flags);
+  PTCP_SEGMENT Segment,
+  PULONG Acknowledged);
 
 NTSTATUS TCPConnect(
-  PTDI_REQUEST Request,
+  PCONNECTION_ENDPOINT Connection,
   PTDI_CONNECTION_INFORMATION ConnInfo,
-  PTDI_CONNECTION_INFORMATION ReturnInfo);
+  PTDI_CONNECTION_INFORMATION ReturnInfo,
+  PTCP_COMPLETION_ROUTINE Complete,
+  PVOID Context);
 
-NTSTATUS TCPListen(
-  PTDI_REQUEST Request,
+NTSTATUS TCPDisconnect(
+  PCONNECTION_ENDPOINT Connection,
+  UINT Flags,
   PTDI_CONNECTION_INFORMATION ConnInfo,
-  PTDI_CONNECTION_INFORMATION ReturnInfo);
+  PTDI_CONNECTION_INFORMATION ReturnInfo,
+  PTCP_COMPLETION_ROUTINE Complete,
+  PVOID Context);
 
-NTSTATUS TCPSendDatagram(
-  PTDI_REQUEST Request,
-  PTDI_CONNECTION_INFORMATION ConnInfo,
+NTSTATUS TCPReceiveData(
+  PCONNECTION_ENDPOINT Connection,
   PNDIS_BUFFER Buffer,
-  ULONG DataSize);
+  ULONG ReceiveLength,
+  PULONG BytesReceived,
+  ULONG ReceiveFlags,
+  PTCP_COMPLETION_ROUTINE Complete,
+  PVOID Context);
+
+NTSTATUS TCPSendData(
+  PCONNECTION_ENDPOINT Connection,
+  PCHAR Buffer,
+  ULONG DataSize,
+  PULONG DataUsed,
+  ULONG Flags);
+
+NTSTATUS TCPClose( PCONNECTION_ENDPOINT Connection );
+
+PVOID TCPPrepareInterface( PIP_INTERFACE IF );
+
+VOID TCPDisposeInterfaceData( PVOID Data );
+
+NTSTATUS TCPTranslateError( int OskitError );
+
+VOID TCPTimeout();
+
+UINT TCPAllocatePort( UINT HintPort );
+
+VOID TCPFreePort( UINT Port );
+
+NTSTATUS TCPGetPeerAddress
+( PCONNECTION_ENDPOINT Connection,
+  PTRANSPORT_ADDRESS TransportAddress );
 
 NTSTATUS TCPStartup(
   VOID);