1    | /***************************************
2    |   $Revision: 1.12 $
3    | 
4    |   Whois query (wh) - connects to a whois server and returns result
5    | 
6    |   Status: NOT REVIEWED, TESTED
7    |   
8    |   Design and implementation by: Marek Bukowy
9    |   
10   |   Note:  still not final. Probably SK calls should be moved to the
11   |          calling routine
12   |   
13   |   ******************/ /******************
14   |   Copyright (c) 1999                              RIPE NCC
15   |  
16   |   All Rights Reserved
17   |   
18   |   Permission to use, copy, modify, and distribute this software and its
19   |   documentation for any purpose and without fee is hereby granted,
20   |   provided that the above copyright notice appear in all copies and that
21   |   both that copyright notice and this permission notice appear in
22   |   supporting documentation, and that the name of the author not be
23   |   used in advertising or publicity pertaining to distribution of the
24   |   software without specific, written prior permission.
25   |   
26   |   THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
27   |   ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS; IN NO EVENT SHALL
28   |   AUTHOR BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY
29   |   DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN
30   |   AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
31   |   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
32   |   ***************************************/
33   | 
34   | #include <sys/types.h>
35   | #include <sys/socket.h>
36   | #include <netinet/in.h>
37   | #include <netdb.h>
38   | #include <stdio.h>
39   | 
40   | #include <erroutines.h>
41   | #include "sk.h"
42   | 
43   | 
44   | 
45   | /*+ as above - but with connection structures, timeouts, maxlines, etc.
46   |   +*/
47   | er_ret_t
48   | WH_cd_sock(sk_conn_st *out_cd, char *hostname, unsigned port, 
49   | 	char *query, unsigned maxlines, unsigned timeout)
50   | {
51   |   int s; 
52   |   int lines = 0;
53   |   er_ret_t err;
54   |   
55   |   if( (err = SK_connect(&s, hostname, port, timeout)) == SK_OK )
56   |   {
57   | #define MAX_LINE_SIZE 1024
58   | 
59   |     char reply[MAX_LINE_SIZE];
60   |     sk_conn_st peer_cd;
61   | 
62   |     SK_cd_make( &peer_cd, s, timeout );
63   |     
64   |     SK_cd_puts( &peer_cd, query);
65   |     SK_cd_puts( &peer_cd, "\r\n");
66   |   
67   |     do {
68   |       SK_cd_gets(&peer_cd, reply, MAX_LINE_SIZE);
69   |       SK_cd_puts(out_cd, reply);
70   |     }
71   |     while( ++lines <= maxlines && peer_cd.rtc == 0 );
72   |     
73   |     
74   |     switch(peer_cd.rtc) {
75   |     case 0:
76   |     case SK_DISCONNECT:      
77   |       /* OK */
78   |       break;
79   |     case SK_TIMEOUT:
80   |       err = SK_TIMEOUT;
81   |       break;
82   |     default: 
83   |       die; /* it should not happen - change here when allowing this */
84   |     }
85   | 
86   |     if( lines >= maxlines ) {
87   |       err = WH_MAXLINES;
88   |     }
89   |     
90   | 
91   |     SK_cd_close(&peer_cd);
92   |     SK_cd_free (&peer_cd);
93   |   } /* if OK */
94   | 
95   |   return err;
96   | }
97   |