=?UTF-8?Q?Andr=C3=A9=20Hentschel=20?=: netstat: Parse command line arguments.
Alexandre Julliard
julliard at winehq.org
Thu Jan 3 13:31:12 CST 2013
Module: wine
Branch: master
Commit: c25c7f804988a782b2eb7f515f322b51b5557f67
URL: http://source.winehq.org/git/wine.git/?a=commit;h=c25c7f804988a782b2eb7f515f322b51b5557f67
Author: André Hentschel <nerv at dawncrow.de>
Date: Wed Jan 2 21:37:45 2013 +0100
netstat: Parse command line arguments.
---
programs/netstat/netstat.c | 60 ++++++++++++++++++++++++++++++++++++-------
programs/netstat/netstat.h | 12 +++++++++
2 files changed, 62 insertions(+), 10 deletions(-)
diff --git a/programs/netstat/netstat.c b/programs/netstat/netstat.c
index 999e409..dede96d 100644
--- a/programs/netstat/netstat.c
+++ b/programs/netstat/netstat.c
@@ -24,7 +24,15 @@
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 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 fmtip[] = {'%', 'd', '.', '%', 'd', '.', '%', 'd', '.', '%', 'd', 0};
static const WCHAR fmtn[] = {'\n', 0};
@@ -181,26 +189,58 @@ static void NETSTAT_tcp_table(void)
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[])
{
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))
{
WINE_ERR("WSAStartup failed: %d\n", WSAGetLastError());
return 1;
}
- NETSTAT_tcp_table();
+ if (argc == 1)
+ {
+ /* No options */
+ 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;
}
diff --git a/programs/netstat/netstat.h b/programs/netstat/netstat.h
index b51a81f..dc4fb1e 100644
--- a/programs/netstat/netstat.h
+++ b/programs/netstat/netstat.h
@@ -18,6 +18,18 @@
#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_LISTENING 2
#define IDS_TCP_SYN_SENT 3
More information about the wine-cvs
mailing list