https://git.reactos.org/?p=reactos.git;a=commitdiff;h=77d5f04f22fce0f4ba5108e21f8070d90b891177
commit 77d5f04f22fce0f4ba5108e21f8070d90b891177 Author: Pierre Schweitzer <pie...@reactos.org> AuthorDate: Sun Nov 18 16:17:50 2018 +0100 Commit: Pierre Schweitzer <pie...@reactos.org> CommitDate: Sun Nov 18 16:30:45 2018 +0100 [TCPIP] Implement returning TCP connections CORE-5401 --- drivers/network/tcpip/include/info.h | 8 ++++++++ drivers/network/tcpip/tcpip/info.c | 5 +++++ drivers/network/tcpip/tcpip/ninfo.c | 39 ++++++++++++++++++++++++++++++++++++ 3 files changed, 52 insertions(+) diff --git a/drivers/network/tcpip/include/info.h b/drivers/network/tcpip/include/info.h index 222f3d56a3..4d9d31e8cd 100644 --- a/drivers/network/tcpip/include/info.h +++ b/drivers/network/tcpip/include/info.h @@ -8,6 +8,10 @@ #pragma once #include <tcpioctl.h> +/* FIXME */ +#define DWORD ULONG +#include <in6addr.h> +#include <tcpmib.h> #define MAX_PHYSADDR_LEN 8 #define MAX_IFDESCR_LEN 256 @@ -109,6 +113,10 @@ TDI_STATUS InfoTdiQueryGetRouteTable( PIP_INTERFACE IF, PNDIS_BUFFER Buffer, PUINT BufferSize ); +TDI_STATUS InfoTdiQueryGetConnectionTcpTable( PADDRESS_FILE AddrFile, + PNDIS_BUFFER Buffer, + PUINT BufferSize); + TDI_STATUS InfoTdiSetRoute(PIP_INTERFACE IF, PVOID Buffer, UINT BufferSize); diff --git a/drivers/network/tcpip/tcpip/info.c b/drivers/network/tcpip/tcpip/info.c index 3dbe574a63..242b8112d9 100644 --- a/drivers/network/tcpip/tcpip/info.c +++ b/drivers/network/tcpip/tcpip/info.c @@ -285,6 +285,11 @@ TDI_STATUS InfoTdiQueryInformationEx( return InfoTdiQueryGetRouteTable(EntityListContext, Buffer, BufferSize); else return TDI_INVALID_PARAMETER; + else if (ID->toi_entity.tei_entity == CO_TL_ENTITY) + if ((EntityListContext = GetContext(ID->toi_entity))) + return InfoTdiQueryGetConnectionTcpTable(EntityListContext, Buffer, BufferSize); + else + return TDI_INVALID_PARAMETER; else return TDI_INVALID_PARAMETER; diff --git a/drivers/network/tcpip/tcpip/ninfo.c b/drivers/network/tcpip/tcpip/ninfo.c index 182af70564..280b894aae 100644 --- a/drivers/network/tcpip/tcpip/ninfo.c +++ b/drivers/network/tcpip/tcpip/ninfo.c @@ -177,6 +177,45 @@ TDI_STATUS InfoTdiQueryGetIPSnmpInfo( TDIEntityID ID, return Status; } +TDI_STATUS InfoTdiQueryGetConnectionTcpTable(PADDRESS_FILE AddrFile, + PNDIS_BUFFER Buffer, + PUINT BufferSize) +{ + MIB_TCPROW TcpRow; + PADDRESS_FILE EndPoint; + TDI_STATUS Status = TDI_INVALID_REQUEST; + + TI_DbgPrint(DEBUG_INFO, ("Called.\n")); + + EndPoint = NULL; + if (AddrFile->Connection != NULL) + EndPoint = AddrFile->Connection->AddressFile; + else if (AddrFile->Listener != NULL) + EndPoint = AddrFile->Listener->AddressFile; + + TcpRow.State = 0; /* FIXME */ + TcpRow.dwLocalAddr = AddrFile->Address.Address.IPv4Address; + TcpRow.dwLocalPort = AddrFile->Port; + + if (EndPoint != NULL) + { + TcpRow.dwRemoteAddr = EndPoint->Address.Address.IPv4Address; + TcpRow.dwRemotePort = EndPoint->Port; + } + else + { + TcpRow.dwRemoteAddr = 0; + TcpRow.dwRemotePort = 0; + } + + Status = InfoCopyOut( (PCHAR)&TcpRow, sizeof(TcpRow), + Buffer, BufferSize ); + + TI_DbgPrint(DEBUG_INFO, ("Returning %08x\n", Status)); + + return Status; +} + TDI_STATUS InfoTdiSetRoute(PIP_INTERFACE IF, PVOID Buffer, UINT BufferSize) { IP_ADDRESS Address, Netmask, Router;