[ARP] Replace some hard-coded strings by message resources

This commit is contained in:
Eric Kohl 2020-05-09 12:28:40 +02:00
parent 8523913a58
commit ac01e4cd72
5 changed files with 200 additions and 47 deletions

View file

@ -1,5 +1,6 @@
add_executable(arp arp.c arp.rc)
set_module_type(arp win32cui)
add_dependencies(arp arp_msg)
add_importlibs(arp iphlpapi ws2_32 shlwapi msvcrt kernel32)
add_cd_file(TARGET arp DESTINATION reactos/system32 FOR all)

View file

@ -60,7 +60,7 @@ VOID Usage(VOID);
*/
DWORD DoFormatMessage(VOID)
{
LPVOID lpMsgBuf;
LPTSTR lpMsgBuf;
DWORD RetVal;
DWORD ErrorCode = GetLastError();
@ -79,8 +79,7 @@ DWORD DoFormatMessage(VOID)
if (RetVal != 0)
{
_tprintf(_T("%s"), (LPTSTR)lpMsgBuf);
_putts(lpMsgBuf);
LocalFree(lpMsgBuf);
/* return number of TCHAR's stored in output buffer
* excluding '\0' - as FormatMessage does*/
@ -90,6 +89,56 @@ DWORD DoFormatMessage(VOID)
return 0;
}
VOID
PrintMessage(
DWORD dwMessage)
{
LPTSTR lpMsgBuf;
DWORD RetVal;
RetVal = FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER |
FORMAT_MESSAGE_FROM_HMODULE |
FORMAT_MESSAGE_IGNORE_INSERTS,
GetModuleHandleW(NULL),
dwMessage,
LANG_USER_DEFAULT,
(LPTSTR)&lpMsgBuf,
0,
NULL);
if (RetVal != 0)
{
_putts(lpMsgBuf);
LocalFree(lpMsgBuf);
}
}
VOID
PrintMessageV(
DWORD dwMessage,
...)
{
LPTSTR lpMsgBuf;
va_list args = NULL;
DWORD RetVal;
va_start(args, dwMessage);
RetVal = FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_HMODULE,
GetModuleHandleW(NULL),
dwMessage,
LANG_USER_DEFAULT,
(LPTSTR)&lpMsgBuf,
0,
&args);
va_end(args);
if (RetVal != 0)
{
_putts(lpMsgBuf);
LocalFree(lpMsgBuf);
}
}
/*
*
* Takes an ARP entry and prints the IP address,
@ -118,14 +167,21 @@ INT PrintEntries(PMIB_IPNETROW pIpAddRow)
/* print cache type */
switch (pIpAddRow->dwType)
{
case MIB_IPNET_TYPE_DYNAMIC : _tprintf(_T("dynamic\n"));
break;
case MIB_IPNET_TYPE_STATIC : _tprintf(_T("static\n"));
break;
case MIB_IPNET_TYPE_INVALID : _tprintf(_T("invalid\n"));
break;
case MIB_IPNET_TYPE_OTHER : _tprintf(_T("other\n"));
break;
case MIB_IPNET_TYPE_DYNAMIC:
PrintMessage(10007);
break;
case MIB_IPNET_TYPE_STATIC:
PrintMessage(10008);
break;
case MIB_IPNET_TYPE_INVALID:
PrintMessage(10006);
break;
case MIB_IPNET_TYPE_OTHER:
PrintMessage(10005);
break;
}
return EXIT_SUCCESS;
}
@ -173,7 +229,7 @@ INT DisplayArpEntries(PTCHAR pszInetAddr, PTCHAR pszIfAddr)
/* check there are entries in the table */
if (pIpNetTable->dwNumEntries == 0)
{
_tprintf(_T("No ARP entires found\n"));
PrintMessage(10018);
goto cleanup;
}
@ -213,8 +269,7 @@ INT DisplayArpEntries(PTCHAR pszInetAddr, PTCHAR pszIfAddr)
/* print header, including interface IP address and index number */
_tprintf(_T("\nInterface: %s --- 0x%lx \n"), szIntIpAddr, pIpNetTable->table[0].dwIndex);
_tprintf(_T(" Internet Address Physical Address Type\n"));
PrintMessageV(10003, szIntIpAddr, pIpNetTable->table[0].dwIndex);
/* go through all ARP entries */
for (i=0; i < pIpNetTable->dwNumEntries; i++)
@ -269,7 +324,7 @@ INT Addhost(PTCHAR pszInetAddr, PTCHAR pszEthAddr, PTCHAR pszIfAddr)
{
if ((dwIpAddr = inet_addr(pszInetAddr)) == INADDR_NONE)
{
_tprintf(_T("ARP: bad IP address: %s\n"), pszInetAddr);
PrintMessageV(10001, pszInetAddr);
return EXIT_FAILURE;
}
}
@ -282,7 +337,7 @@ INT Addhost(PTCHAR pszInetAddr, PTCHAR pszEthAddr, PTCHAR pszIfAddr)
/* check MAC address */
if (strlen(pszEthAddr) != 17)
{
_tprintf(_T("ARP: bad argument: %s\n"), pszEthAddr);
PrintMessageV(10002, pszEthAddr);
return EXIT_FAILURE;
}
for (i=0; i<17; i++)
@ -292,7 +347,7 @@ INT Addhost(PTCHAR pszInetAddr, PTCHAR pszEthAddr, PTCHAR pszIfAddr)
if (!isxdigit(pszEthAddr[i]))
{
_tprintf(_T("ARP: bad argument: %s\n"), pszEthAddr);
PrintMessageV(10002, pszEthAddr);
return EXIT_FAILURE;
}
}
@ -412,7 +467,7 @@ INT Deletehost(PTCHAR pszInetAddr, PTCHAR pszIfAddr)
bFlushTable = TRUE;
else if ((dwIpAddr = inet_addr(pszInetAddr)) == INADDR_NONE)
{
_tprintf(_T("ARP: bad IP address: %s\n"), pszInetAddr);
PrintMessageV(10001, pszInetAddr);
exit(EXIT_FAILURE);
}
}
@ -508,35 +563,7 @@ cleanup:
*/
VOID Usage(VOID)
{
_tprintf(_T("\nDisplays and modifies the IP-to-Physical address translation tables used by\n"
"address resolution protocol (ARP).\n"
"\n"
"ARP -s inet_addr eth_addr [if_addr]\n"
"ARP -d inet_addr [if_addr]\n"
"ARP -a [inet_addr] [-N if_addr]\n"
"\n"
" -a Displays current ARP entries by interrogating the current\n"
" protocol data. If inet_addr is specified, the IP and Physical\n"
" addresses for only the specified computer are displayed. If\n"
" more than one network interface uses ARP, entries for each ARP\n"
" table are displayed.\n"
" -g Same as -a.\n"
" inet_addr Specifies an internet address.\n"
" -N if_addr Displays the ARP entries for the network interface specified\n"
" by if_addr.\n"
" -d Deletes the host specified by inet_addr. inet_addr may be\n"
" wildcarded with * to delete all hosts.\n"
" -s Adds the host and associates the Internet address inet_addr\n"
" with the Physical address eth_addr. The Physical address is\n"
" given as 6 hexadecimal bytes separated by hyphens. The entry\n"
" is permanent.\n"
" eth_addr Specifies a physical address.\n"
" if_addr If present, this specifies the Internet address of the\n"
" interface whose address translation table should be modified.\n"
" If not present, the first applicable interface will be used.\n"
"Example:\n"
" > arp -s 157.55.85.212 00-aa-00-62-c6-09 .... Adds a static entry.\n"
" > arp -a .... Displays the arp table.\n\n"));
PrintMessage(10000);
}
/*

View file

@ -3,3 +3,4 @@
#define REACTOS_STR_ORIGINAL_FILENAME "arp.exe"
#define REACTOS_STR_ORIGINAL_COPYRIGHT "Ged Murphy (gedmurphy@gmail.com)"
#include <reactos/version.rc>
#include <arp_msg.rc>

View file

@ -3,6 +3,7 @@ list(APPEND ANSI_SOURCE
bugcodes.mc)
list(APPEND UNICODE_SOURCE
arp_msg.mc
errcodes.mc
net_msg.mc
neteventmsg.mc

View file

@ -0,0 +1,123 @@
MessageIdTypedef=DWORD
SeverityNames=(Success=0x0:STATUS_SEVERITY_SUCCESS
Informational=0x1:STATUS_SEVERITY_INFORMATIONAL
Warning=0x2:STATUS_SEVERITY_WARNING
Error=0x3:STATUS_SEVERITY_ERROR
)
FacilityNames=(System=0x0:FACILITY_SYSTEM
)
LanguageNames=(English=0x409:MSG00409
)
MessageId=10000
SymbolicName=MSG_ARP_SYNTAX
Severity=Success
Facility=System
Language=English
Displays and modifies the IP-to-Physical address translation tables used by
address resolution protocol (ARP).
ARP -s inet_addr eth_addr [if_addr]
ARP -d inet_addr [if_addr]
ARP -a [inet_addr] [-N if_addr]
-a Displays current ARP entries by interrogating the current
protocol data. If inet_addr is specified, the IP and Physical
addresses for only the specified computer are displayed. If
more than one network interface uses ARP, entries for each ARP
table are displayed.
-g Same as -a.
inet_addr Specifies an internet address.
-N if_addr Displays the ARP entries for the network interface specified
by if_addr.
-d Deletes the host specified by inet_addr. inet_addr may be
wildcarded with * to delete all hosts.
-s Adds the host and associates the Internet address inet_addr
with the Physical address eth_addr. The Physical address is
given as 6 hexadecimal bytes separated by hyphens. The entry
is permanent.
eth_addr Specifies a physical address.
if_addr If present, this specifies the Internet address of the
interface whose address translation table should be modified.
If not present, the first applicable interface will be used.
Example:
> arp -s 157.55.85.212 00-aa-00-62-c6-09 .... Adds a static entry.
> arp -a .... Displays the arp table.
.
MessageId=10001
SymbolicName=MSG_ARP_BAD_IP_ADDRESS
Severity=Success
Facility=System
Language=English
ARP: bad IP address: %1
.
MessageId=10002
SymbolicName=MSG_ARP_BAD_ARGUMENT
Severity=Success
Facility=System
Language=English
ARP: bad argument: %1
.
MessageId=10003
SymbolicName=MSG_ARP_INTERFACE
Severity=Success
Facility=System
Language=English
Interface: %1!s! --- 0x%2!lx!
Internet Address Physical Address Type
.
MessageId=10005
SymbolicName=MSG_ARP_OTHER
Severity=Success
Facility=System
Language=English
other%0
.
MessageId=10006
SymbolicName=MSG_ARP_INVALID
Severity=Success
Facility=System
Language=English
invalid%0
.
MessageId=10007
SymbolicName=MSG_ARP_DYNAMIC
Severity=Success
Facility=System
Language=English
dynamic%0
.
MessageId=10008
SymbolicName=MSG_ARP_STATIC
Severity=Success
Facility=System
Language=English
static%0
.
MessageId=10013
SymbolicName=MSG_ARP_ENTRY_FORMAT
Severity=Success
Facility=System
Language=English
%1!-20s! %2!-20s! %3!-10s!
.
MessageId=10018
SymbolicName=MSG_ARP_NO_ENTRIES
Severity=Success
Facility=System
Language=English
No ARP entires found
.