Synchronize with trunk revision 59636 (just before Alex's CreateProcess revamp).
[reactos.git] / lib / drivers / ip / transport / udp / udp.c
index 0dcf7b2..1629aad 100644 (file)
@@ -105,33 +105,37 @@ NTSTATUS BuildUDPPacket(
     Packet->TotalSize = sizeof(IPv4_HEADER) + sizeof(UDP_HEADER) + DataLen;
 
     /* Prepare packet */
-    Status = AllocatePacketWithBuffer( &Packet->NdisPacket,
-                                      NULL,
-                                      Packet->TotalSize );
+    Status = AllocatePacketWithBuffer(&Packet->NdisPacket,
+                                      NULL,
+                                      Packet->TotalSize );
 
-    if( !NT_SUCCESS(Status) ) return Status;
+    if( !NT_SUCCESS(Status) )
+    {
+        Packet->Free(Packet);
+        return Status;
+    }
 
     TI_DbgPrint(MID_TRACE, ("Allocated packet: %x\n", Packet->NdisPacket));
     TI_DbgPrint(MID_TRACE, ("Local Addr : %s\n", A2S(LocalAddress)));
     TI_DbgPrint(MID_TRACE, ("Remote Addr: %s\n", A2S(RemoteAddress)));
 
     switch (RemoteAddress->Type) {
-    case IP_ADDRESS_V4:
-       Status = AddUDPHeaderIPv4(AddrFile, RemoteAddress, RemotePort,
-                                 LocalAddress, LocalPort, Packet, DataBuffer, DataLen);
-       break;
-    case IP_ADDRESS_V6:
-       /* FIXME: Support IPv6 */
-       TI_DbgPrint(MIN_TRACE, ("IPv6 UDP datagrams are not supported.\n"));
-    default:
-       Status = STATUS_UNSUCCESSFUL;
-       break;
+        case IP_ADDRESS_V4:
+            Status = AddUDPHeaderIPv4(AddrFile, RemoteAddress, RemotePort,
+                                      LocalAddress, LocalPort, Packet, DataBuffer, DataLen);
+            break;
+        case IP_ADDRESS_V6:
+            /* FIXME: Support IPv6 */
+            TI_DbgPrint(MIN_TRACE, ("IPv6 UDP datagrams are not supported.\n"));
+        default:
+            Status = STATUS_UNSUCCESSFUL;
+            break;
     }
     if (!NT_SUCCESS(Status)) {
-       TI_DbgPrint(MIN_TRACE, ("Cannot add UDP header. Status = (0x%X)\n",
-                               Status));
-       FreeNdisPacket(Packet->NdisPacket);
-       return Status;
+        TI_DbgPrint(MIN_TRACE, ("Cannot add UDP header. Status = (0x%X)\n",
+                                Status));
+        Packet->Free(Packet);
+        return Status;
     }
 
     TI_DbgPrint(MID_TRACE, ("Displaying packet\n"));
@@ -143,11 +147,6 @@ NTSTATUS BuildUDPPacket(
     return STATUS_SUCCESS;
 }
 
-VOID UDPSendPacketComplete
-( PVOID Context, PNDIS_PACKET Packet, NDIS_STATUS Status ) {
-    FreeNdisPacket( Packet );
-}
-
 NTSTATUS UDPSendDatagram(
     PADDRESS_FILE AddrFile,
     PTDI_CONNECTION_INFORMATION ConnInfo,
@@ -201,17 +200,17 @@ NTSTATUS UDPSendDatagram(
          * interface we're sending over
          */
         if(!(NCE = RouteGetRouteToDestination( &RemoteAddress ))) {
-            UnlockObject(AddrFile, OldIrql);
-            return STATUS_NETWORK_UNREACHABLE;
+            UnlockObject(AddrFile, OldIrql);
+            return STATUS_NETWORK_UNREACHABLE;
         }
 
         LocalAddress = NCE->Interface->Unicast;
     }
     else
     {
-        if(!(NCE = NBLocateNeighbor( &LocalAddress ))) {
-            UnlockObject(AddrFile, OldIrql);
-            return STATUS_INVALID_PARAMETER;
+        if(!(NCE = NBLocateNeighbor( &LocalAddress, NULL ))) {
+            UnlockObject(AddrFile, OldIrql);
+            return STATUS_INVALID_PARAMETER;
         }
     }
 
@@ -229,11 +228,11 @@ NTSTATUS UDPSendDatagram(
     if( !NT_SUCCESS(Status) )
                return Status;
 
-    if (!NT_SUCCESS(Status = IPSendDatagram( &Packet, NCE, UDPSendPacketComplete, NULL )))
-    {
-        FreeNdisPacket(Packet.NdisPacket);
+    Status = IPSendDatagram(&Packet, NCE);
+    if (!NT_SUCCESS(Status))
         return Status;
-    }
+
+    *DataUsed = DataSize;
 
     return STATUS_SUCCESS;
 }