- Merge aicom-network-fixes up to r36973
authorCameron Gutman <aicommander@gmail.com>
Sat, 25 Oct 2008 23:44:41 +0000 (23:44 +0000)
committerCameron Gutman <aicommander@gmail.com>
Sat, 25 Oct 2008 23:44:41 +0000 (23:44 +0000)
svn path=/trunk/; revision=36974

reactos/drivers/network/afd/afd/main.c
reactos/drivers/network/tcpip/datalink/lan.c
reactos/lib/drivers/ip/network/neighbor.c
reactos/lib/drivers/ip/transport/tcp/accept.c
reactos/lib/drivers/ip/transport/tcp/tcp.c

index 1fd1ef1..1a0cd72 100644 (file)
@@ -221,10 +221,6 @@ VOID DestroySocket( PAFD_FCB FCB ) {
        ExFreePool( FCB->LocalAddress );
     if( FCB->RemoteAddress )
        ExFreePool( FCB->RemoteAddress );
-    if( FCB->ListenIrp.ConnectionReturnInfo )
-       ExFreePool( FCB->ListenIrp.ConnectionReturnInfo );
-    if( FCB->ListenIrp.ConnectionCallInfo )
-       ExFreePool( FCB->ListenIrp.ConnectionCallInfo );
     if( FCB->TdiDeviceName.Buffer )
        ExFreePool(FCB->TdiDeviceName.Buffer);
 
index 49ab3eb..aaf32db 100644 (file)
@@ -628,6 +628,11 @@ VOID LANTransmit(
                ("Called( NdisPacket %x, Offset %d, Adapter %x )\n",
                 NdisPacket, Offset, Adapter));
 
+    if (Adapter->State != LAN_STATE_STARTED) {
+        ProtocolSendComplete(Context, NdisPacket, NDIS_STATUS_NOT_ACCEPTED);
+        return;
+    }
+
     TI_DbgPrint(DEBUG_DATALINK,
                ("Adapter Address [%02x %02x %02x %02x %02x %02x]\n",
                 Adapter->HWAddress[0] & 0xff,
@@ -643,7 +648,6 @@ VOID LANTransmit(
 
     LanChainCompletion( Adapter, NdisPacket );
 
-    if (Adapter->State == LAN_STATE_STARTED) {
         switch (Adapter->Media) {
         case NdisMedium802_3:
             EHeader = (PETH_HEADER)Data;
@@ -713,9 +717,6 @@ VOID LANTransmit(
         * the situation with IRPs. */
         if (NdisStatus != NDIS_STATUS_PENDING)
             ProtocolSendComplete((NDIS_HANDLE)Context, NdisPacket, NdisStatus);
-    } else {
-        ProtocolSendComplete((NDIS_HANDLE)Context, NdisPacket, NDIS_STATUS_CLOSED);
-    }
 }
 
 static NTSTATUS
index 3eee626..e9f13ff 100644 (file)
@@ -29,6 +29,9 @@ VOID NBSendPackets( PNEIGHBOR_CACHE_ENTRY NCE ) {
     PLIST_ENTRY PacketEntry;
     PNEIGHBOR_PACKET Packet;
 
+    if(!(NCE->State & NUD_CONNECTED))
+       return;
+
     /* Send any waiting packets */
     PacketEntry = ExInterlockedRemoveHeadList(&NCE->PacketQueue,
                                               &NCE->Table->Lock);
index 447d39b..2132b17 100644 (file)
@@ -87,13 +87,13 @@ NTSTATUS TCPListen( PCONNECTION_ENDPOINT Connection, UINT Backlog ) {
 
     TI_DbgPrint(DEBUG_TCP,("AddressToBind - %x:%x\n", AddressToBind.sin_addr, AddressToBind.sin_port));
 
-    OskitTCPBind( Connection->SocketContext,
-                 Connection,
-                 &AddressToBind,
-                 sizeof(AddressToBind) );
+    Status = TCPTranslateError( OskitTCPBind( Connection->SocketContext,
+                               Connection,
+                               &AddressToBind,
+                               sizeof(AddressToBind) ) );
 
-    Status = TCPTranslateError( OskitTCPListen( Connection->SocketContext,
-                                               Backlog ) );
+    if (NT_SUCCESS(Status))
+        Status = TCPTranslateError( OskitTCPListen( Connection->SocketContext, Backlog ) );
 
     TcpipRecursiveMutexLeave( &TCPLock );
 
index 7dff2cc..bdf7fd5 100644 (file)
@@ -577,21 +577,24 @@ NTSTATUS TCPConnect
     AddressToConnect.sin_family = AF_INET;
     AddressToBind = AddressToConnect;
 
-    OskitTCPBind( Connection->SocketContext,
+    Status = TCPTranslateError
+        ( OskitTCPBind( Connection->SocketContext,
                  Connection,
                  &AddressToBind,
-                 sizeof(AddressToBind) );
-
-    memcpy( &AddressToConnect.sin_addr,
-           &RemoteAddress.Address.IPv4Address,
-           sizeof(AddressToConnect.sin_addr) );
-    AddressToConnect.sin_port = RemotePort;
-
-    Status = TCPTranslateError
-       ( OskitTCPConnect( Connection->SocketContext,
-                          Connection,
-                          &AddressToConnect,
-                          sizeof(AddressToConnect) ) );
+                 sizeof(AddressToBind) ) );
+
+    if (NT_SUCCESS(Status)) {
+        memcpy( &AddressToConnect.sin_addr,
+               &RemoteAddress.Address.IPv4Address,
+               sizeof(AddressToConnect.sin_addr) );
+        AddressToConnect.sin_port = RemotePort;
+
+        Status = TCPTranslateError
+           ( OskitTCPConnect( Connection->SocketContext,
+                              Connection,
+                              &AddressToConnect,
+                              sizeof(AddressToConnect) ) );
+    }
 
     TcpipRecursiveMutexLeave( &TCPLock );