[ros-diffs] [cgutman] 40933: - Set up the TCP interface data as needed in TCPFindInterface

cgutman at svn.reactos.org cgutman at svn.reactos.org
Sat May 16 03:24:22 CEST 2009


Author: cgutman
Date: Sat May 16 05:24:21 2009
New Revision: 40933

URL: http://svn.reactos.org/svn/reactos?rev=40933&view=rev
Log:
 - Set up the TCP interface data as needed in TCPFindInterface

Modified:
    trunk/reactos/drivers/network/tcpip/include/tcp.h
    trunk/reactos/lib/drivers/ip/network/ip.c
    trunk/reactos/lib/drivers/ip/transport/tcp/if.c

Modified: trunk/reactos/drivers/network/tcpip/include/tcp.h
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/network/tcpip/include/tcp.h?rev=40933&r1=40932&r2=40933&view=diff
==============================================================================
--- trunk/reactos/drivers/network/tcpip/include/tcp.h [iso-8859-1] (original)
+++ trunk/reactos/drivers/network/tcpip/include/tcp.h [iso-8859-1] Sat May 16 05:24:21 2009
@@ -158,10 +158,6 @@
 
 NTSTATUS TCPClose( PCONNECTION_ENDPOINT Connection );
 
-PVOID TCPPrepareInterface( PIP_INTERFACE IF );
-
-VOID TCPDisposeInterfaceData( PVOID Data );
-
 NTSTATUS TCPTranslateError( int OskitError );
 
 VOID TCPTimeout();

Modified: trunk/reactos/lib/drivers/ip/network/ip.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/lib/drivers/ip/network/ip.c?rev=40933&r1=40932&r2=40933&view=diff
==============================================================================
--- trunk/reactos/lib/drivers/ip/network/ip.c [iso-8859-1] (original)
+++ trunk/reactos/lib/drivers/ip/network/ip.c [iso-8859-1] Sat May 16 05:24:21 2009
@@ -219,6 +219,13 @@
 
     TcpipInitializeSpinLock(&IF->Lock);
 
+    IF->TCPContext = exAllocatePool
+	( NonPagedPool, sizeof(OSK_IFADDR) + 2 * sizeof( struct sockaddr_in ) );
+    if (!IF->TCPContext) {
+        exFreePool(IF);
+        return NULL;
+    }
+
 #ifdef __NTDRIVER__
     InsertTDIInterfaceEntity( IF );
 #endif
@@ -241,6 +248,7 @@
     RemoveTDIInterfaceEntity( IF );
 #endif
 
+    exFreePool(IF->TCPContext);
     exFreePool(IF);
 }
 
@@ -263,9 +271,6 @@
 	TI_DbgPrint(MIN_TRACE, ("Could not add route due to insufficient resources.\n"));
         return;
     }
-
-    /* Allow TCP to hang some configuration on this interface */
-    IF->TCPContext = TCPPrepareInterface( IF );
 }
 
 BOOLEAN IPRegisterInterface(
@@ -317,11 +322,6 @@
     NCE = NBLocateNeighbor(&IF->Unicast);
     if (NCE)
     {
-       if ( IF->TCPContext ) {
-           TCPDisposeInterfaceData( IF->TCPContext );
-           IF->TCPContext = NULL;
-       }
-
        TI_DbgPrint(DEBUG_IP,("Removing interface Addr %s\n", A2S(&IF->Unicast)));
        TI_DbgPrint(DEBUG_IP,("                   Mask %s\n", A2S(&IF->Netmask)));
 

Modified: trunk/reactos/lib/drivers/ip/transport/tcp/if.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/lib/drivers/ip/transport/tcp/if.c?rev=40933&r1=40932&r2=40933&view=diff
==============================================================================
--- trunk/reactos/lib/drivers/ip/transport/tcp/if.c [iso-8859-1] (original)
+++ trunk/reactos/lib/drivers/ip/transport/tcp/if.c [iso-8859-1] Sat May 16 05:24:21 2009
@@ -30,17 +30,20 @@
  * parameters.
  */
 
-PVOID TCPPrepareInterface( PIP_INTERFACE IF ) {
+POSK_IFADDR TCPGetInterfaceData( PIP_INTERFACE IF ) {
     NTSTATUS Status;
-    POSK_IFADDR ifaddr = exAllocatePool
-	( NonPagedPool, sizeof(*ifaddr) + 2 * sizeof( struct sockaddr_in ) );
-    if( !ifaddr ) return NULL;
+    POSK_IFADDR ifaddr = IF->TCPContext;
+    ASSERT(ifaddr);
+
+    RtlZeroMemory(ifaddr, sizeof(OSK_IFADDR) + 2 * sizeof( struct sockaddr_in ));
+
     struct sockaddr_in *addr_in = (struct sockaddr_in *)&ifaddr[1];
     struct sockaddr_in *dstaddr_in = (struct sockaddr_in *)&addr_in[1];
 
     TI_DbgPrint(DEBUG_TCPIF,("Called\n"));
 
     ifaddr->ifa_dstaddr = (struct sockaddr *)dstaddr_in;
+
     /* XXX - Point-to-point interfaces not supported yet */
     memset( &ifaddr->ifa_dstaddr, 0, sizeof( struct sockaddr ) );
 
@@ -49,10 +52,9 @@
 				      ADE_UNICAST,
 				      (PULONG)&addr_in->sin_addr.s_addr );
 
-    if( !NT_SUCCESS(Status) )
-	addr_in->sin_addr.s_addr = 0;
+    ASSERT(NT_SUCCESS(Status));
 
-    TI_DbgPrint(DEBUG_TCPIF,("Prepare interface %x : addr %x\n",
+    TI_DbgPrint(DEBUG_TCPIF,("interface %x : addr %x\n",
 			   IF, addr_in->sin_addr.s_addr));
 
     ifaddr->ifa_flags = 0; /* XXX what goes here? */
@@ -65,10 +67,6 @@
     return ifaddr;
 }
 
-VOID TCPDisposeInterfaceData( PVOID Ptr ) {
-    exFreePool( Ptr );
-}
-
 POSK_IFADDR TCPFindInterface( void *ClientData,
 			      OSK_UINT AddrType,
 			      OSK_UINT FindType,
@@ -77,6 +75,7 @@
     PIP_INTERFACE IF;
     IP_ADDRESS Destination;
     struct sockaddr_in *addr_in = (struct sockaddr_in *)ReqAddr;
+    POSK_IFADDR InterfaceData;
 
     TI_DbgPrint(DEBUG_TCPIF,("called for type %d\n", FindType));
 
@@ -91,19 +90,15 @@
     TI_DbgPrint(DEBUG_TCPIF,("Address is %x\n", addr_in->sin_addr.s_addr));
 
     IF = FindOnLinkInterface(&Destination);
+    if (!IF) return NULL;
 
-    if (!IF || !IF->TCPContext) {
-        /* TCPContext can be NULL if we don't have an IP address yet */
-        TI_DbgPrint(DEBUG_TCPIF, ("No interface or TCP context (%x) (%x)\n",
-                                  IF, IF ? IF->TCPContext : 0));
-        return NULL;
-    }
+    InterfaceData = TCPGetInterfaceData(IF);
 
     addr_in = (struct sockaddr_in *)
-	((POSK_IFADDR)IF->TCPContext)->ifa_addr;
+	InterfaceData->ifa_addr;
 
     TI_DbgPrint(DEBUG_TCPIF,("returning addr %x\n", addr_in->sin_addr.s_addr));
 
-    return IF->TCPContext;
+    return InterfaceData;
 }
 



More information about the Ros-diffs mailing list