fe0ee8c5e2f370da2c9d3e3438aaa1535f7467de
[reactos.git] / reactos / drivers / net / afd / afd / event.c
1 /*
2 * COPYRIGHT: See COPYING in the top level directory
3 * PROJECT: ReactOS Ancillary Function Driver
4 * FILE: afd/event.c
5 * PURPOSE: TDI event handlers
6 * PROGRAMMERS: Casper S. Hornstrup (chorns@users.sourceforge.net)
7 * REVISIONS:
8 * CSH 01/09-2000 Created
9 */
10 #include <afd.h>
11
12 NTSTATUS AfdEventError(
13 IN PVOID TdiEventContext,
14 IN NTSTATUS Status)
15 {
16 AFD_DbgPrint(MAX_TRACE, ("Called.\n"));
17
18 return STATUS_SUCCESS;
19 }
20
21
22 NTSTATUS AfdEventDisconnect(
23 IN PVOID TdiEventContext,
24 IN CONNECTION_CONTEXT ConnectionContext,
25 IN LONG DisconnectDataLength,
26 IN PVOID DisconnectData,
27 IN LONG DisconnectInformationLength,
28 IN PVOID DisconnectInformation,
29 IN ULONG DisconnectFlags)
30 {
31 AFD_DbgPrint(MAX_TRACE, ("Called.\n"));
32
33 return STATUS_SUCCESS;
34 }
35
36
37 NTSTATUS AfdEventReceive(
38 IN PVOID TdiEventContext,
39 IN CONNECTION_CONTEXT ConnectionContext,
40 IN ULONG ReceiveFlags,
41 IN ULONG BytesIndicated,
42 IN ULONG BytesAvailable,
43 OUT ULONG *BytesTaken,
44 IN PVOID Tsdu,
45 OUT PIRP *IoRequestPacket)
46 {
47 AFD_DbgPrint(MAX_TRACE, ("Called.\n"));
48
49 return STATUS_SUCCESS;
50 }
51
52
53 TDI_STATUS ClientEventReceiveExpedited(
54 IN PVOID TdiEventContext,
55 IN CONNECTION_CONTEXT ConnectionContext,
56 IN ULONG ReceiveFlags,
57 IN ULONG BytesIndicated,
58 IN ULONG BytesAvailable,
59 OUT ULONG *BytesTaken,
60 IN PVOID Tsdu,
61 OUT PIRP *IoRequestPacket)
62 {
63 AFD_DbgPrint(MAX_TRACE, ("Called.\n"));
64
65 return STATUS_SUCCESS;
66 }
67
68
69 NTSTATUS ClientEventChainedReceive(
70 IN PVOID TdiEventContext,
71 IN CONNECTION_CONTEXT ConnectionContext,
72 IN ULONG ReceiveFlags,
73 IN ULONG ReceiveLength,
74 IN ULONG StartingOffset,
75 IN PMDL Tsdu,
76 IN PVOID TsduDescriptor)
77 {
78 AFD_DbgPrint(MAX_TRACE, ("Called.\n"));
79
80 return STATUS_SUCCESS;
81 }
82
83
84 NTSTATUS AfdEventReceiveDatagramHandler(
85 IN PVOID TdiEventContext,
86 IN LONG SourceAddressLength,
87 IN PVOID SourceAddress,
88 IN LONG OptionsLength,
89 IN PVOID Options,
90 IN ULONG ReceiveDatagramFlags,
91 IN ULONG BytesIndicated,
92 IN ULONG BytesAvailable,
93 OUT ULONG *BytesTaken,
94 IN PVOID Tsdu,
95 OUT PIRP *IoRequestPacket)
96 {
97 AFD_DbgPrint(MAX_TRACE, ("Called.\n"));
98
99 AFD_DbgPrint(MID_TRACE, ("Receiving (%d) bytes from (0x%X).\n",
100 BytesAvailable, *(PULONG)SourceAddress));
101
102 return STATUS_SUCCESS;
103 }
104
105
106 NTSTATUS AfdRegisterEventHandlers(
107 PAFDFCB FCB)
108 {
109 NTSTATUS Status;
110
111 Status = TdiSetEventHandler(FCB->TdiAddressObject,
112 TDI_EVENT_ERROR,
113 (PVOID)AfdEventError,
114 (PVOID)FCB);
115 if (!NT_SUCCESS(Status)) { return Status; }
116
117 switch (FCB->SocketType) {
118 case SOCK_STREAM:
119 Status = TdiSetEventHandler(FCB->TdiAddressObject,
120 TDI_EVENT_DISCONNECT,
121 (PVOID)AfdEventDisconnect,
122 (PVOID)FCB);
123 if (!NT_SUCCESS(Status)) { return Status; }
124
125 Status = TdiSetEventHandler(FCB->TdiAddressObject,
126 TDI_EVENT_RECEIVE,
127 (PVOID)AfdEventReceive,
128 (PVOID)FCB);
129 if (!NT_SUCCESS(Status)) { return Status; }
130
131 Status = TdiSetEventHandler(FCB->TdiAddressObject,
132 TDI_EVENT_RECEIVE_EXPEDITED,
133 (PVOID)ClientEventReceiveExpedited,
134 (PVOID)FCB);
135 if (!NT_SUCCESS(Status)) { return Status; }
136
137 Status = TdiSetEventHandler(FCB->TdiAddressObject,
138 TDI_EVENT_CHAINED_RECEIVE,
139 (PVOID)ClientEventChainedReceive,
140 (PVOID)FCB);
141 if (!NT_SUCCESS(Status)) { return Status; }
142 break;
143 case SOCK_DGRAM:
144 Status = TdiSetEventHandler(FCB->TdiAddressObject,
145 TDI_EVENT_RECEIVE_DATAGRAM,
146 (PVOID)AfdEventReceiveDatagramHandler,
147 (PVOID)FCB);
148 if (!NT_SUCCESS(Status)) { return Status; }
149 }
150 return STATUS_SUCCESS;
151 }
152
153
154 NTSTATUS AfdDeregisterEventHandlers(
155 PAFDFCB FCB)
156 {
157 NTSTATUS Status;
158
159 Status = TdiSetEventHandler(FCB->TdiAddressObject,
160 TDI_EVENT_ERROR,
161 NULL,
162 NULL);
163 if (!NT_SUCCESS(Status)) { return Status; }
164
165 switch (FCB->SocketType) {
166 case SOCK_STREAM:
167 Status = TdiSetEventHandler(FCB->TdiAddressObject,
168 TDI_EVENT_DISCONNECT,
169 NULL,
170 NULL);
171 if (!NT_SUCCESS(Status)) { return Status; }
172
173 Status = TdiSetEventHandler(FCB->TdiAddressObject,
174 TDI_EVENT_RECEIVE,
175 NULL,
176 NULL);
177 if (!NT_SUCCESS(Status)) { return Status; }
178
179 Status = TdiSetEventHandler(FCB->TdiAddressObject,
180 TDI_EVENT_RECEIVE_EXPEDITED,
181 NULL,
182 NULL);
183 if (!NT_SUCCESS(Status)) { return Status; }
184
185 Status = TdiSetEventHandler(FCB->TdiAddressObject,
186 TDI_EVENT_CHAINED_RECEIVE,
187 NULL,
188 NULL);
189 if (!NT_SUCCESS(Status)) { return Status; }
190 break;
191
192 case SOCK_DGRAM:
193 Status = TdiSetEventHandler(FCB->TdiAddressObject,
194 TDI_EVENT_RECEIVE_DATAGRAM,
195 NULL,
196 NULL);
197 if (!NT_SUCCESS(Status)) { return Status; }
198 }
199 return STATUS_SUCCESS;
200 }
201
202
203 /* EOF */