ReactOS  0.4.12-dev-18-gf469aca
whois.c File Reference
#include <windef.h>
#include <winsock2.h>
#include <stdio.h>
#include <stdlib.h>
Include dependency graph for whois.c:

Go to the source code of this file.

Macros

#define WIN32_NO_STATUS
 
#define _INC_WINDOWS
 

Functions

static void usage ()
 
static void cleanup (int iExitCode)
 
void getwhoisserver (int argc, char **argv)
 
int main (int argc, char **argv)
 

Variables

static char NICHOST [] = "whois.internic.net"
 
charhost = NULL
 
int optset = 0
 

Macro Definition Documentation

◆ _INC_WINDOWS

#define _INC_WINDOWS

Definition at line 42 of file whois.c.

◆ WIN32_NO_STATUS

#define WIN32_NO_STATUS

Definition at line 40 of file whois.c.

Function Documentation

◆ cleanup()

static void cleanup ( int  iExitCode)
static

Definition at line 181 of file whois.c.

Referenced by main(), and usage().

182 {
183  WSACleanup();
184  exit(iExitCode);
185 }
INT WSAAPI WSACleanup(VOID)
Definition: startup.c:60
void exit(int exitcode)
Definition: _exit.c:33

◆ getwhoisserver()

void getwhoisserver ( int  argc,
char **  argv 
)

Definition at line 60 of file whois.c.

Referenced by main().

61 {
62  int i = 1;
63 
64  while(i < argc)
65  {
66  if (!strcmp(argv[i], "-h"))
67  {
68  if (i + 2 < argc)
69  {
70  host = argv[i +1];
71  optset = i + 1;
72  }
73  else
74  {
75  optset = argc;
76  }
77  return;
78  }
79  i++;
80  }
81  host = NICHOST;
82  optset = 1;
83 }
static int argc
Definition: ServiceArgs.c:12
char * host
Definition: whois.c:55
static char ** argv
Definition: ServiceArgs.c:11
GLenum GLclampf GLint i
Definition: glfuncs.h:14
int optset
Definition: whois.c:56
int strcmp(const char *String1, const char *String2)
Definition: utclib.c:469
static char NICHOST[]
Definition: whois.c:54

◆ main()

int main ( int argc  ,
char **  argv 
)

Definition at line 85 of file whois.c.

86 {
87  char ch;
88  struct sockaddr_in sin;
89  struct hostent *hp;
90  struct servent *sp;
91  SOCKET s;
92 
93  WORD wVersionRequested;
94  WSADATA wsaData;
95  int err;
96 
98  argc -= optset;
99  argv += optset;
100 
101  if (!host || !argc)
102  usage();
103 
104  /* Start winsock */
105  wVersionRequested = MAKEWORD( 1, 1 );
106  err = WSAStartup( wVersionRequested, &wsaData );
107  if ( err != 0 )
108  {
109  /* Tell the user that we couldn't find a usable */
110  /* WinSock DLL. */
111  perror("whois: WSAStartup failed");
112  cleanup(1);
113  }
114 
115  hp = gethostbyname(host);
116  if (hp == NULL) {
117  (void)fprintf(stderr, "whois: %s: ", host);
118  cleanup(1);
119  }
120  host = hp->h_name;
121 
122  s = socket(hp->h_addrtype, SOCK_STREAM, 0);
123  if (s == INVALID_SOCKET) {
124  perror("whois: socket");
125  cleanup(1);
126  }
127 
128  memset(/*(caddr_t)*/&sin, 0, sizeof(sin));
129  sin.sin_family = hp->h_addrtype;
130  if (bind(s, (struct sockaddr *)&sin, sizeof(sin)) < 0) {
131  perror("whois: bind");
132  cleanup(1);
133  }
134 
135  memcpy((char *)&sin.sin_addr, hp->h_addr, hp->h_length);
136  sp = getservbyname("nicname", "tcp");
137  if (sp == NULL) {
138  (void)fprintf(stderr, "whois: nicname/tcp: unknown service\n");
139  cleanup(1);
140  }
141 
142  sin.sin_port = sp->s_port;
143 
144  /* have network connection; identify the host connected with */
145  (void)printf("[%s]\n", hp->h_name);
146 
147  if (connect(s, (struct sockaddr *)&sin, sizeof(sin)) < 0) {
148  fprintf(stderr, "whois: connect error = %d\n", WSAGetLastError());
149  cleanup(1);
150  }
151 
152  /* WinSock doesn't allow using a socket as a file descriptor. */
153  /* Have to use send() and recv(). whois will drop connection. */
154 
155  /* For each request */
156  while (argc-- > 1)
157  {
158  /* Send the request */
159  send(s, *argv, strlen(*argv), 0);
160  send(s, " ", 1, 0);
161  argv++;
162  }
163  /* Send the last request */
164  send(s, *argv, strlen(*argv), 0);
165  send(s, "\r\n", 2, 0);
166 
167  /* Receive anything and print it */
168  while (recv(s, &ch, 1, 0) == 1)
169  putchar(ch);
170 
171  cleanup(0);
172  return 0;
173 }
static void usage()
Definition: whois.c:175
static int argc
Definition: ServiceArgs.c:12
struct png_info_def **typedef void(__cdecl typeof(png_destroy_read_struct))(struct png_struct_def **
Definition: typeof.h:47
SOCKET WSAAPI socket(IN INT af, IN INT type, IN INT protocol)
Definition: socklife.c:143
ACPI_SIZE strlen(const char *String)
Definition: utclib.c:269
#define MAKEWORD(a, b)
Definition: typedefs.h:247
INT WSAAPI bind(IN SOCKET s, IN CONST struct sockaddr *name, IN INT namelen)
Definition: socklife.c:36
char * h_name
Definition: winsock.h:134
char * host
Definition: whois.c:55
void getwhoisserver(int argc, char **argv)
Definition: whois.c:60
INT WSAAPI connect(IN SOCKET s, IN CONST struct sockaddr *name, IN INT namelen)
Definition: sockctrl.c:23
static char ** argv
Definition: ServiceArgs.c:11
_CRTIMP void __cdecl perror(_In_opt_z_ const char *_ErrMsg)
_Check_return_opt_ _CRTIMP int __cdecl fprintf(_Inout_ FILE *_File, _In_z_ _Printf_format_string_ const char *_Format,...)
int putchar(int c)
Definition: crtsupp.c:12
short h_length
Definition: winsock.h:137
INT WINAPI WSAStartup(IN WORD wVersionRequested, OUT LPWSADATA lpWSAData)
Definition: startup.c:113
smooth NULL
Definition: ftsmooth.c:416
int optset
Definition: whois.c:56
PHOSTENT WSAAPI gethostbyname(IN const char FAR *name)
Definition: getxbyxx.c:221
INT WSAAPI WSAGetLastError(VOID)
Definition: dllmain.c:112
PSERVENT WSAAPI getservbyname(IN const char FAR *name, IN const char FAR *proto)
Definition: getxbyxx.c:500
#define INVALID_SOCKET
Definition: winsock.h:332
INT WSAAPI send(IN SOCKET s, IN CONST CHAR FAR *buf, IN INT len, IN INT flags)
Definition: send.c:23
unsigned short WORD
Definition: ntddk_ex.h:93
#define memcpy(s1, s2, n)
Definition: mkisofs.h:878
GLdouble s
Definition: gl.h:2039
#define err(...)
static void cleanup(int iExitCode)
Definition: whois.c:181
short h_addrtype
Definition: winsock.h:136
short s_port
Definition: winsock.h:165
FILE * stderr
static const WCHAR sp[]
Definition: suminfo.c:288
UINT_PTR SOCKET
Definition: winsock.h:47
_STLP_DECLSPEC complex< float > _STLP_CALL sin(const complex< float > &)
#define SOCK_STREAM
Definition: tcpip.h:118
#define memset(x, y, z)
Definition: compat.h:39
INT WSAAPI recv(IN SOCKET s, OUT CHAR FAR *buf, IN INT len, IN INT flags)
Definition: recv.c:23
#define printf
Definition: config.h:203

◆ usage()

static void usage ( void  )
static

Definition at line 175 of file whois.c.

Referenced by main().

176 {
177  (void)fprintf(stderr, "usage: whois [-h hostname] name ...\n");
178  cleanup(1);
179 }
struct png_info_def **typedef void(__cdecl typeof(png_destroy_read_struct))(struct png_struct_def **
Definition: typeof.h:47
_Check_return_opt_ _CRTIMP int __cdecl fprintf(_Inout_ FILE *_File, _In_z_ _Printf_format_string_ const char *_Format,...)
static void cleanup(int iExitCode)
Definition: whois.c:181
FILE * stderr

Variable Documentation

◆ host

◆ NICHOST

char NICHOST[] = "whois.internic.net"
static

Definition at line 54 of file whois.c.

Referenced by getwhoisserver().

◆ optset

int optset = 0

Definition at line 56 of file whois.c.

Referenced by getwhoisserver(), and main().