mirror of
https://github.com/reactos/reactos.git
synced 2025-08-06 23:02:59 +00:00
Fixes for bugs previously posted in bugzilla.
svn path=/trunk/; revision=7469
This commit is contained in:
parent
e2bc674743
commit
5662831f38
2 changed files with 60 additions and 12 deletions
|
@ -383,6 +383,31 @@ NTSTATUS AfdDispSendTo(
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
if (!FCB->TdiAddressObject) {
|
||||||
|
struct sockaddr_in BindName;
|
||||||
|
|
||||||
|
RtlZeroMemory(&BindName,sizeof(BindName));
|
||||||
|
BindName.sin_family = AF_INET;
|
||||||
|
|
||||||
|
Status = TdiOpenAddressFile
|
||||||
|
(&FCB->TdiDeviceName,
|
||||||
|
(SOCKADDR *)&BindName,
|
||||||
|
&FCB->TdiAddressObjectHandle,
|
||||||
|
&FCB->TdiAddressObject);
|
||||||
|
|
||||||
|
if (NT_SUCCESS(Status)) {
|
||||||
|
AfdRegisterEventHandlers(FCB);
|
||||||
|
FCB->State = SOCKET_STATE_BOUND;
|
||||||
|
Reply->Status = NO_ERROR;
|
||||||
|
} else {
|
||||||
|
//FIXME: WSAEADDRNOTAVAIL
|
||||||
|
Reply->Status = WSAEINVAL;
|
||||||
|
MmUnlockPages(Mdl);
|
||||||
|
IoFreeMdl(Mdl);
|
||||||
|
return Status;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Status = TdiSendDatagram(FCB->TdiAddressObject,
|
Status = TdiSendDatagram(FCB->TdiAddressObject,
|
||||||
&Request->To,
|
&Request->To,
|
||||||
Mdl,
|
Mdl,
|
||||||
|
|
|
@ -258,6 +258,8 @@ NTSTATUS TdiCall(
|
||||||
AFD_DbgPrint(MAX_TRACE, ("Called\n"));
|
AFD_DbgPrint(MAX_TRACE, ("Called\n"));
|
||||||
|
|
||||||
Status = IoCallDriver(DeviceObject, Irp);
|
Status = IoCallDriver(DeviceObject, Irp);
|
||||||
|
AFD_DbgPrint(MAX_TRACE, ("IoCallDriver: %08x\n", Status));
|
||||||
|
|
||||||
if ((Status == STATUS_PENDING) && (Event != NULL)) {
|
if ((Status == STATUS_PENDING) && (Event != NULL)) {
|
||||||
AFD_DbgPrint(MAX_TRACE, ("Waiting on transport.\n"));
|
AFD_DbgPrint(MAX_TRACE, ("Waiting on transport.\n"));
|
||||||
KeWaitForSingleObject(
|
KeWaitForSingleObject(
|
||||||
|
@ -1108,12 +1110,17 @@ NTSTATUS TdiSendDatagram(
|
||||||
KEVENT Event;
|
KEVENT Event;
|
||||||
PIRP Irp;
|
PIRP Irp;
|
||||||
|
|
||||||
|
AFD_DbgPrint(MAX_TRACE, ("Called.\n"));
|
||||||
|
|
||||||
DeviceObject = IoGetRelatedDeviceObject(TransportObject);
|
DeviceObject = IoGetRelatedDeviceObject(TransportObject);
|
||||||
if (!DeviceObject) {
|
if (!DeviceObject) {
|
||||||
AFD_DbgPrint(MIN_TRACE, ("Bad device object.\n"));
|
AFD_DbgPrint(MIN_TRACE, ("Bad device object.\n"));
|
||||||
return STATUS_INVALID_PARAMETER;
|
return STATUS_INVALID_PARAMETER;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
AFD_DbgPrint(MAX_TRACE,
|
||||||
|
("TdiSendDatagram: TansportObject = %08x\n", TransportObject));
|
||||||
|
|
||||||
TdiAddressSize = TdiAddressSizeFromName(Address);
|
TdiAddressSize = TdiAddressSizeFromName(Address);
|
||||||
|
|
||||||
ConnectInfo = (PTDI_CONNECTION_INFORMATION)
|
ConnectInfo = (PTDI_CONNECTION_INFORMATION)
|
||||||
|
@ -1123,18 +1130,28 @@ NTSTATUS TdiSendDatagram(
|
||||||
if (!ConnectInfo)
|
if (!ConnectInfo)
|
||||||
return STATUS_INSUFFICIENT_RESOURCES;
|
return STATUS_INSUFFICIENT_RESOURCES;
|
||||||
|
|
||||||
|
AFD_DbgPrint(MAX_TRACE,
|
||||||
|
("TdiAddressSize = %d, sizeof(TDI_CONNECTION_INFORMATION) = %d\n",
|
||||||
|
TdiAddressSize, sizeof(TDI_CONNECTION_INFORMATION)));
|
||||||
|
|
||||||
RtlZeroMemory(ConnectInfo,
|
RtlZeroMemory(ConnectInfo,
|
||||||
sizeof(TDI_CONNECTION_INFORMATION) +
|
sizeof(TDI_CONNECTION_INFORMATION) +
|
||||||
TdiAddressSize);
|
TdiAddressSize);
|
||||||
|
|
||||||
ConnectInfo->RemoteAddressLength = TdiAddressSize;
|
ConnectInfo->RemoteAddressLength = TdiAddressSize;
|
||||||
ConnectInfo->RemoteAddress = (PVOID)
|
ConnectInfo->RemoteAddress = (PVOID)
|
||||||
(ConnectInfo + sizeof(TDI_CONNECTION_INFORMATION));
|
(((PCHAR)ConnectInfo) + sizeof(TDI_CONNECTION_INFORMATION));
|
||||||
|
|
||||||
|
AFD_DbgPrint(MAX_TRACE, ("Point A\n"));
|
||||||
|
|
||||||
TdiBuildAddress(ConnectInfo->RemoteAddress, Address);
|
TdiBuildAddress(ConnectInfo->RemoteAddress, Address);
|
||||||
|
|
||||||
|
AFD_DbgPrint(MAX_TRACE, ("Point B\n"));
|
||||||
|
|
||||||
KeInitializeEvent(&Event, NotificationEvent, FALSE);
|
KeInitializeEvent(&Event, NotificationEvent, FALSE);
|
||||||
|
|
||||||
|
AFD_DbgPrint(MAX_TRACE, ("Point 0\n"));
|
||||||
|
|
||||||
Irp = TdiBuildInternalDeviceControlIrp(TDI_SEND_DATAGRAM, /* Sub function */
|
Irp = TdiBuildInternalDeviceControlIrp(TDI_SEND_DATAGRAM, /* Sub function */
|
||||||
DeviceObject, /* Device object */
|
DeviceObject, /* Device object */
|
||||||
TransportObject, /* File object */
|
TransportObject, /* File object */
|
||||||
|
@ -1146,6 +1163,8 @@ NTSTATUS TdiSendDatagram(
|
||||||
return STATUS_INSUFFICIENT_RESOURCES;
|
return STATUS_INSUFFICIENT_RESOURCES;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
AFD_DbgPrint(MAX_TRACE, ("Point 1\n"));
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
Mdl = IoAllocateMdl(Buffer, /* Virtual address of buffer */
|
Mdl = IoAllocateMdl(Buffer, /* Virtual address of buffer */
|
||||||
BufferSize, /* Length of buffer */
|
BufferSize, /* Length of buffer */
|
||||||
|
@ -1172,6 +1191,7 @@ NTSTATUS TdiSendDatagram(
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
AFD_DbgPrint(MAX_TRACE, ("TdiBuildSendDatagram()\n"));
|
||||||
TdiBuildSendDatagram(Irp, /* I/O Request Packet */
|
TdiBuildSendDatagram(Irp, /* I/O Request Packet */
|
||||||
DeviceObject, /* Device object */
|
DeviceObject, /* Device object */
|
||||||
TransportObject, /* File object */
|
TransportObject, /* File object */
|
||||||
|
@ -1180,8 +1200,10 @@ NTSTATUS TdiSendDatagram(
|
||||||
Mdl, /* Descriptor for data buffer */
|
Mdl, /* Descriptor for data buffer */
|
||||||
BufferSize, /* Size of data to send */
|
BufferSize, /* Size of data to send */
|
||||||
ConnectInfo); /* Connection information */
|
ConnectInfo); /* Connection information */
|
||||||
|
AFD_DbgPrint(MAX_TRACE, ("Returned from TdiBuildSendDatagram\n"));
|
||||||
|
|
||||||
Status = TdiCall(Irp, DeviceObject, &Event, &Iosb);
|
Status = TdiCall(Irp, DeviceObject, &Event, &Iosb);
|
||||||
|
AFD_DbgPrint(MAX_TRACE, ("Returned from TdiCall\n"));
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
MmUnlockPages(Mdl);
|
MmUnlockPages(Mdl);
|
||||||
|
@ -1190,6 +1212,7 @@ NTSTATUS TdiSendDatagram(
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
ExFreePool(ConnectInfo);
|
ExFreePool(ConnectInfo);
|
||||||
|
AFD_DbgPrint(MAX_TRACE, ("Leaving %08x.\n", Status));
|
||||||
|
|
||||||
return Status;
|
return Status;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue