#ifndef __TCP_H
#define __TCP_H
-typedef VOID
+typedef VOID
(*PTCP_COMPLETION_ROUTINE)( PVOID Context, NTSTATUS Status, ULONG Count );
/* TCPv4 header structure */
#define TCPOPTLEN_MAX_SEG_SIZE 0x4
+#define TCP_CANCEL_DISCONNECT 0
+#define TCP_CANCEL_CLOSE 1
+
/* Data offset; 32-bit words (leftmost 4 bits); convert to bytes */
#define TCP_DATA_OFFSET(DataOffset)(((DataOffset) & 0xF0) >> (4-2))
KEVENT Event;
} SLEEPING_THREAD, *PSLEEPING_THREAD;
+typedef struct _CANCEL_REQUEST {
+ LIST_ENTRY Entry;
+ PVOID Context;
+ PIRP Irp;
+ UINT Flags, Type;
+} CANCEL_REQUEST, *PCANCEL_REQUEST;
+
/* Retransmission timeout constants */
/* Lower bound for retransmission timeout in TCP timer ticks */
PCONNECTION_ENDPOINT TCPAllocateConnectionEndpoint( PVOID ClientContext );
VOID TCPFreeConnectionEndpoint( PCONNECTION_ENDPOINT Connection );
-NTSTATUS TCPSocket( PCONNECTION_ENDPOINT Connection,
+NTSTATUS TCPSocket( PCONNECTION_ENDPOINT Connection,
UINT Family, UINT Type, UINT Proto );
PTCP_SEGMENT TCPCreateSegment(
PVOID Context);
NTSTATUS TCPReceiveData(
- PCONNECTION_ENDPOINT Connection,
+ PCONNECTION_ENDPOINT Connection,
PNDIS_BUFFER Buffer,
ULONG ReceiveLength,
PULONG BytesReceived,
PVOID TCPPrepareInterface( PIP_INTERFACE IF );
+VOID TCPDisposeInterfaceData( PVOID Data );
+
NTSTATUS TCPTranslateError( int OskitError );
VOID TCPTimeout();
VOID TCPFreePort( UINT Port );
+NTSTATUS TCPGetPeerAddress
+( PCONNECTION_ENDPOINT Connection,
+ PTRANSPORT_ADDRESS TransportAddress );
+
NTSTATUS TCPStartup(
VOID);
NTSTATUS TCPShutdown(
VOID);
+void TCPMarkForDisconnect(
+ PCONNECTION_ENDPOINT Connection, BOOLEAN Marked );
+
#endif /* __TCP_H */