]> git.proxmox.com Git - mirror_edk2.git/blob - AppPkg/Applications/Sockets/GetNameInfo/GetNameInfo.c
c9292e1fa70d588025480ec1332b79b59ad0721a
[mirror_edk2.git] / AppPkg / Applications / Sockets / GetNameInfo / GetNameInfo.c
1 /** @file
2 Test the getnameinfo API
3
4 Copyright (c) 2011, Intel Corporation
5 All rights reserved. This program and the accompanying materials
6 are licensed and made available under the terms and conditions of the BSD License
7 which accompanies this distribution. The full text of the license may be found at
8 http://opensource.org/licenses/bsd-license.php
9
10 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
11 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
12
13 **/
14
15 #include <errno.h>
16 #include <netdb.h>
17 #include <string.h>
18 #include <stdio.h>
19 #include <Uefi.h>
20 #include <unistd.h>
21
22 #include <netinet/in.h>
23
24 #include <sys/socket.h>
25
26 char mBuffer[65536];
27 char mHostName[256];
28 char mServiceName[256];
29
30 /**
31 Test the getnameinfo API
32
33 @param [in] Argc The number of arguments
34 @param [in] Argv The argument value array
35
36 @retval 0 The application exited normally.
37 @retval Other An error occurred.
38 **/
39 int
40 main (
41 IN int Argc,
42 IN char **Argv
43 )
44 {
45 int AppStatus;
46 struct addrinfo * pAddrInfo;
47 char * pHostName;
48 struct addrinfo * pInfo;
49 char * pServerName;
50
51 //
52 // Determine if the host name is specified
53 //
54 AppStatus = 0;
55 if ( 1 == Argc ) {
56 printf ( "%s <host address> <server name>\r\n", Argv[0]);
57 }
58 else {
59 //
60 // Translate the host name
61 //
62 pHostName = Argv[1];
63 pServerName = NULL;
64 if ( 2 < Argc ) {
65 pServerName = Argv[2];
66 }
67 AppStatus = getaddrinfo ( pHostName,
68 pServerName,
69 NULL,
70 &pAddrInfo );
71 if ( 0 != AppStatus ) {
72 printf ( "ERROR - address info not found, errno: %d\r\n", AppStatus );
73 }
74 if ( NULL == pAddrInfo ) {
75 printf ( "ERROR - No address info structure allocated\r\n" );
76 }
77 else {
78 //
79 // Walk the list of names
80 //
81 pInfo = pAddrInfo;
82 while ( NULL != pInfo ) {
83 //
84 // Get the name info
85 //
86 AppStatus = getnameinfo ((struct sockaddr *)pInfo->ai_addr,
87 pInfo->ai_addrlen,
88 &mHostName[0],
89 sizeof ( mHostName ),
90 &mServiceName[0],
91 sizeof ( mServiceName ),
92 0 );
93 if ( 0 != AppStatus ) {
94 break;
95 }
96
97 //
98 // Display this entry
99 //
100 printf ( "%s: HostName\r\n", mHostName[0]);
101 printf ( "%s: Service Name\r\n", &mServiceName[0]);
102
103 //
104 // Set the next entry
105 //
106 pInfo = pInfo->ai_next;
107 }
108
109 //
110 // Done with this structures
111 //
112 freeaddrinfo ( pAddrInfo );
113 }
114 }
115
116 //
117 // All done
118 //
119 return AppStatus;
120 }