Some work on winsock stack
[reactos.git] / reactos / drivers / net / afd / afd / event.c
diff --git a/reactos/drivers/net/afd/afd/event.c b/reactos/drivers/net/afd/afd/event.c
new file mode 100644 (file)
index 0000000..fe0ee8c
--- /dev/null
@@ -0,0 +1,203 @@
+/*
+ * 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 */