netstat: Parse command line arguments.
This commit is contained in:
parent
7357b65d62
commit
c25c7f8049
@ -24,7 +24,15 @@
|
|||||||
|
|
||||||
WINE_DEFAULT_DEBUG_CHANNEL(netstat);
|
WINE_DEFAULT_DEBUG_CHANNEL(netstat);
|
||||||
|
|
||||||
|
static const WCHAR ipW[] = {'I', 'P', 0};
|
||||||
|
static const WCHAR ipv6W[] = {'I', 'P', 'v', '6', 0};
|
||||||
|
static const WCHAR icmpW[] = {'I', 'C', 'M', 'P', 0};
|
||||||
|
static const WCHAR icmpv6W[] = {'I', 'C', 'M', 'P', 'v', '6', 0};
|
||||||
static const WCHAR tcpW[] = {'T', 'C', 'P', 0};
|
static const WCHAR tcpW[] = {'T', 'C', 'P', 0};
|
||||||
|
static const WCHAR tcpv6W[] = {'T', 'C', 'P', 'v', '6', 0};
|
||||||
|
static const WCHAR udpW[] = {'U', 'D', 'P', 0};
|
||||||
|
static const WCHAR udpv6W[] = {'U', 'D', 'P', 'v', '6', 0};
|
||||||
|
|
||||||
static const WCHAR fmtport[] = {'%', 'd', 0};
|
static const WCHAR fmtport[] = {'%', 'd', 0};
|
||||||
static const WCHAR fmtip[] = {'%', 'd', '.', '%', 'd', '.', '%', 'd', '.', '%', 'd', 0};
|
static const WCHAR fmtip[] = {'%', 'd', '.', '%', 'd', '.', '%', 'd', '.', '%', 'd', 0};
|
||||||
static const WCHAR fmtn[] = {'\n', 0};
|
static const WCHAR fmtn[] = {'\n', 0};
|
||||||
@ -181,26 +189,58 @@ static void NETSTAT_tcp_table(void)
|
|||||||
HeapFree(GetProcessHeap(), 0, table);
|
HeapFree(GetProcessHeap(), 0, table);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static NETSTATPROTOCOLS NETSTAT_get_protocol(WCHAR name[])
|
||||||
|
{
|
||||||
|
if (!strcmpiW(name, ipW)) return PROT_IP;
|
||||||
|
if (!strcmpiW(name, ipv6W)) return PROT_IPV6;
|
||||||
|
if (!strcmpiW(name, icmpW)) return PROT_ICMP;
|
||||||
|
if (!strcmpiW(name, icmpv6W)) return PROT_ICMPV6;
|
||||||
|
if (!strcmpiW(name, tcpW)) return PROT_TCP;
|
||||||
|
if (!strcmpiW(name, tcpv6W)) return PROT_TCPV6;
|
||||||
|
if (!strcmpiW(name, udpW)) return PROT_UDP;
|
||||||
|
if (!strcmpiW(name, udpv6W)) return PROT_UDPV6;
|
||||||
|
return PROT_UNKNOWN;
|
||||||
|
}
|
||||||
|
|
||||||
int wmain(int argc, WCHAR *argv[])
|
int wmain(int argc, WCHAR *argv[])
|
||||||
{
|
{
|
||||||
WSADATA wsa_data;
|
WSADATA wsa_data;
|
||||||
|
|
||||||
if (argc > 1)
|
|
||||||
{
|
|
||||||
int i;
|
|
||||||
WINE_FIXME("stub:");
|
|
||||||
for (i = 0; i < argc; i++)
|
|
||||||
WINE_FIXME(" %s", wine_dbgstr_w(argv[i]));
|
|
||||||
WINE_FIXME("\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (WSAStartup(MAKEWORD(2, 2), &wsa_data))
|
if (WSAStartup(MAKEWORD(2, 2), &wsa_data))
|
||||||
{
|
{
|
||||||
WINE_ERR("WSAStartup failed: %d\n", WSAGetLastError());
|
WINE_ERR("WSAStartup failed: %d\n", WSAGetLastError());
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (argc == 1)
|
||||||
|
{
|
||||||
|
/* No options */
|
||||||
NETSTAT_tcp_table();
|
NETSTAT_tcp_table();
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
while (argv[1] && argv[1][0] == '-')
|
||||||
|
{
|
||||||
|
switch (argv[1][1])
|
||||||
|
{
|
||||||
|
case 'p':
|
||||||
|
argv++; argc--;
|
||||||
|
if (argc == 1) return 1;
|
||||||
|
switch (NETSTAT_get_protocol(argv[1]))
|
||||||
|
{
|
||||||
|
case PROT_TCP:
|
||||||
|
NETSTAT_tcp_table();
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
WINE_FIXME("Protocol not yet implemented: %s\n", debugstr_w(argv[1]));
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
WINE_FIXME("Unknown option: %s\n", debugstr_w(argv[1]));
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
argv++; argc--;
|
||||||
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -18,6 +18,18 @@
|
|||||||
|
|
||||||
#include <windows.h>
|
#include <windows.h>
|
||||||
|
|
||||||
|
typedef enum _NETSTATPROTOCOLS {
|
||||||
|
PROT_UNKNOWN,
|
||||||
|
PROT_IP,
|
||||||
|
PROT_IPV6,
|
||||||
|
PROT_ICMP,
|
||||||
|
PROT_ICMPV6,
|
||||||
|
PROT_TCP,
|
||||||
|
PROT_TCPV6,
|
||||||
|
PROT_UDP,
|
||||||
|
PROT_UDPV6,
|
||||||
|
} NETSTATPROTOCOLS;
|
||||||
|
|
||||||
#define IDS_TCP_CLOSED 1
|
#define IDS_TCP_CLOSED 1
|
||||||
#define IDS_TCP_LISTENING 2
|
#define IDS_TCP_LISTENING 2
|
||||||
#define IDS_TCP_SYN_SENT 3
|
#define IDS_TCP_SYN_SENT 3
|
||||||
|
Loading…
x
Reference in New Issue
Block a user