--- /dev/null
+/*
+ * COPYRIGHT: See COPYING in the top level directory
+ * PROJECT: ReactOS Ancillary Function Driver
+ * FILE: afd/event.c
+ * PURPOSE: TDI event handlers
+ * PROGRAMMERS: Casper S. Hornstrup (chorns@users.sourceforge.net)
+ * REVISIONS:
+ * CSH 01/09-2000 Created
+ */
+#include <afd.h>
+
+NTSTATUS AfdEventError(
+ IN PVOID TdiEventContext,
+ IN NTSTATUS Status)
+{
+ AFD_DbgPrint(MAX_TRACE, ("Called.\n"));
+
+ return STATUS_SUCCESS;
+}
+
+
+NTSTATUS AfdEventDisconnect(
+ IN PVOID TdiEventContext,
+ IN CONNECTION_CONTEXT ConnectionContext,
+ IN LONG DisconnectDataLength,
+ IN PVOID DisconnectData,
+ IN LONG DisconnectInformationLength,
+ IN PVOID DisconnectInformation,
+ IN ULONG DisconnectFlags)
+{
+ AFD_DbgPrint(MAX_TRACE, ("Called.\n"));
+
+ return STATUS_SUCCESS;
+}
+
+
+NTSTATUS AfdEventReceive(
+ IN PVOID TdiEventContext,
+ IN CONNECTION_CONTEXT ConnectionContext,
+ IN ULONG ReceiveFlags,
+ IN ULONG BytesIndicated,
+ IN ULONG BytesAvailable,
+ OUT ULONG *BytesTaken,
+ IN PVOID Tsdu,
+ OUT PIRP *IoRequestPacket)
+{
+ AFD_DbgPrint(MAX_TRACE, ("Called.\n"));
+
+ return STATUS_SUCCESS;
+}
+
+
+TDI_STATUS ClientEventReceiveExpedited(
+ IN PVOID TdiEventContext,
+ IN CONNECTION_CONTEXT ConnectionContext,
+ IN ULONG ReceiveFlags,
+ IN ULONG BytesIndicated,
+ IN ULONG BytesAvailable,
+ OUT ULONG *BytesTaken,
+ IN PVOID Tsdu,
+ OUT PIRP *IoRequestPacket)
+{
+ AFD_DbgPrint(MAX_TRACE, ("Called.\n"));
+
+ return STATUS_SUCCESS;
+}
+
+
+NTSTATUS ClientEventChainedReceive(
+ IN PVOID TdiEventContext,
+ IN CONNECTION_CONTEXT ConnectionContext,
+ IN ULONG ReceiveFlags,
+ IN ULONG ReceiveLength,
+ IN ULONG StartingOffset,
+ IN PMDL Tsdu,
+ IN PVOID TsduDescriptor)
+{
+ AFD_DbgPrint(MAX_TRACE, ("Called.\n"));
+
+ return STATUS_SUCCESS;
+}
+
+
+NTSTATUS AfdEventReceiveDatagramHandler(
+ IN PVOID TdiEventContext,
+ IN LONG SourceAddressLength,
+ IN PVOID SourceAddress,
+ IN LONG OptionsLength,
+ IN PVOID Options,
+ IN ULONG ReceiveDatagramFlags,
+ IN ULONG BytesIndicated,
+ IN ULONG BytesAvailable,
+ OUT ULONG *BytesTaken,
+ IN PVOID Tsdu,
+ OUT PIRP *IoRequestPacket)
+{
+ AFD_DbgPrint(MAX_TRACE, ("Called.\n"));
+
+ AFD_DbgPrint(MID_TRACE, ("Receiving (%d) bytes from (0x%X).\n",
+ BytesAvailable, *(PULONG)SourceAddress));
+
+ return STATUS_SUCCESS;
+}
+
+
+NTSTATUS AfdRegisterEventHandlers(
+ PAFDFCB FCB)
+{
+ NTSTATUS Status;
+
+ Status = TdiSetEventHandler(FCB->TdiAddressObject,
+ TDI_EVENT_ERROR,
+ (PVOID)AfdEventError,
+ (PVOID)FCB);
+ if (!NT_SUCCESS(Status)) { return Status; }
+
+ switch (FCB->SocketType) {
+ case SOCK_STREAM:
+ Status = TdiSetEventHandler(FCB->TdiAddressObject,
+ TDI_EVENT_DISCONNECT,
+ (PVOID)AfdEventDisconnect,
+ (PVOID)FCB);
+ if (!NT_SUCCESS(Status)) { return Status; }
+
+ Status = TdiSetEventHandler(FCB->TdiAddressObject,
+ TDI_EVENT_RECEIVE,
+ (PVOID)AfdEventReceive,
+ (PVOID)FCB);
+ if (!NT_SUCCESS(Status)) { return Status; }
+
+ Status = TdiSetEventHandler(FCB->TdiAddressObject,
+ TDI_EVENT_RECEIVE_EXPEDITED,
+ (PVOID)ClientEventReceiveExpedited,
+ (PVOID)FCB);
+ if (!NT_SUCCESS(Status)) { return Status; }
+
+ Status = TdiSetEventHandler(FCB->TdiAddressObject,
+ TDI_EVENT_CHAINED_RECEIVE,
+ (PVOID)ClientEventChainedReceive,
+ (PVOID)FCB);
+ if (!NT_SUCCESS(Status)) { return Status; }
+ break;
+ case SOCK_DGRAM:
+ Status = TdiSetEventHandler(FCB->TdiAddressObject,
+ TDI_EVENT_RECEIVE_DATAGRAM,
+ (PVOID)AfdEventReceiveDatagramHandler,
+ (PVOID)FCB);
+ if (!NT_SUCCESS(Status)) { return Status; }
+ }
+ return STATUS_SUCCESS;
+}
+
+
+NTSTATUS AfdDeregisterEventHandlers(
+ PAFDFCB FCB)
+{
+ NTSTATUS Status;
+
+ Status = TdiSetEventHandler(FCB->TdiAddressObject,
+ TDI_EVENT_ERROR,
+ NULL,
+ NULL);
+ if (!NT_SUCCESS(Status)) { return Status; }
+
+ switch (FCB->SocketType) {
+ case SOCK_STREAM:
+ Status = TdiSetEventHandler(FCB->TdiAddressObject,
+ TDI_EVENT_DISCONNECT,
+ NULL,
+ NULL);
+ if (!NT_SUCCESS(Status)) { return Status; }
+
+ Status = TdiSetEventHandler(FCB->TdiAddressObject,
+ TDI_EVENT_RECEIVE,
+ NULL,
+ NULL);
+ if (!NT_SUCCESS(Status)) { return Status; }
+
+ Status = TdiSetEventHandler(FCB->TdiAddressObject,
+ TDI_EVENT_RECEIVE_EXPEDITED,
+ NULL,
+ NULL);
+ if (!NT_SUCCESS(Status)) { return Status; }
+
+ Status = TdiSetEventHandler(FCB->TdiAddressObject,
+ TDI_EVENT_CHAINED_RECEIVE,
+ NULL,
+ NULL);
+ if (!NT_SUCCESS(Status)) { return Status; }
+ break;
+
+ case SOCK_DGRAM:
+ Status = TdiSetEventHandler(FCB->TdiAddressObject,
+ TDI_EVENT_RECEIVE_DATAGRAM,
+ NULL,
+ NULL);
+ if (!NT_SUCCESS(Status)) { return Status; }
+ }
+ return STATUS_SUCCESS;
+}
+
+
+/* EOF */