1 | /***************************************
2 | $Revision: 1.14 $
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,2000,2001,2002 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 "rip.h"
35 |
36 | #include <sys/types.h>
37 | #include <sys/socket.h>
38 | #include <netinet/in.h>
39 | #include <netdb.h>
40 | #include <stdio.h>
41 |
42 |
43 | /*+ as above - but with connection structures, timeouts, maxlines, etc.
44 | +*/
45 | er_ret_t
46 | WH_cd_sock(sk_conn_st *out_cd, char *hostname, unsigned port,
47 | char *query, unsigned maxlines, unsigned timeout)
48 | {
49 | int s;
50 | int lines = 0;
51 | er_ret_t err;
52 |
53 | if( (err = SK_connect(&s, hostname, port, timeout)) == SK_OK )
54 | {
55 | #define MAX_LINE_SIZE 1024
56 |
57 | char reply[MAX_LINE_SIZE];
58 | sk_conn_st peer_cd;
59 |
60 | SK_cd_make( &peer_cd, s, timeout );
61 |
62 | SK_cd_puts( &peer_cd, query);
63 | SK_cd_puts( &peer_cd, "\r\n");
64 |
65 | do {
66 | SK_cd_gets(&peer_cd, reply, MAX_LINE_SIZE);
67 | SK_cd_puts(out_cd, reply);
68 | }
69 | while( ++lines <= maxlines && peer_cd.rtc == 0 );
70 |
71 |
72 | switch(peer_cd.rtc) {
73 | case 0:
74 | case SK_DISCONNECT:
75 | /* OK */
76 | break;
77 | case SK_TIMEOUT:
78 | err = SK_TIMEOUT;
79 | break;
80 | default:
81 | die; /* it should not happen - change here when allowing this */
82 | }
83 |
84 | if( lines >= maxlines ) {
85 | err = WH_MAXLINES;
86 | }
87 |
88 |
89 | SK_cd_close(&peer_cd);
90 | SK_cd_free (&peer_cd);
91 | } /* if OK */
92 |
93 | return err;
94 | }
95 |