Source File modules/wh/wh_queries.c

    1    | #include <sys/types.h>
    2    | #include <sys/socket.h>
    3    | #include <netinet/in.h>
    4    | #include <netdb.h>
    5    | #include <stdio.h>
    6    |
    7    | #include <erroutines.h>
    8    |
    9    |
    10   | int
    11   | WH_sock(int sock, char *hostname, int port,
    12   | 	char *query, int maxlines, int timeout)
    13   | {
    14   |   char log_str[256];
    15   |   FILE *sfi;
    16   |   FILE *sfo;
    17   |   struct sockaddr_in sin;
    18   |   struct hostent *hp;
    19   |   int ch;
    20   |   int s;
    21   |
    22   |   sprintf(log_str, "would perform query >%s< to %s:%d  \n"
    23   | 	  "limits: line %d tmout %d and print on socket %d\n",
    24   | 	  query,hostname,port, maxlines,timeout,sock );
    25   |   log_inst_print(log_str);
    26   |
    27   |   if ( (hp = gethostbyname(hostname)) == NULL) {
    28   |     return WH_BADHOST;
    29   |   }
    30   |
    31   |   s = socket(AF_INET, SOCK_STREAM, 0);
    32   |   if (s < 0) {
    33   |     return WH_SOCKET;
    34   |   }
    35   |
    36   |   bzero((caddr_t)&sin, sizeof (sin));
    37   |   sin.sin_family = hp->h_addrtype;
    38   |   if (bind(s, (struct sockaddr *)&sin, sizeof(sin)) < 0) {
    39   |     close(s);
    40   |     return WH_BIND;
    41   |   }
    42   |   bcopy(hp->h_addr, (char *)&sin.sin_addr, hp->h_length);
    43   |   sin.sin_port=port;
    44   |
    45   |   if (connect(s, (struct sockaddr *)&sin, sizeof(sin)) < 0) {
    46   |     close(s);
    47   |     return WH_CONNECT;
    48   |   }
    49   |
    50   | #if 1
    51   |   sfi = fdopen(s, "r");
    52   |   sfo = fdopen(s, "w");
    53   |   if (sfi == NULL || sfo == NULL) {
    54   |     (void)close(s);
    55   |     return WH_OPEN;
    56   |   }
    57   |
    58   |   fprintf(sfo, "%s\r\n", query);
    59   |   fflush(sfo);
    60   |
    61   |   while ((ch = getc(sfi)) != EOF) {
    62   |     int ret = SK_putc(sock,ch);
    63   |   }
    64   |
    65   |   fclose(sfo);
    66   |   fclose(sfi);
    67   | #else
    68   |   SK_puts(s, query);
    69   |   SK_puts(s, "\r\n");
    70   |
    71   |   while( (ch = SK_getc(s)) != EOF ) {
    72   |     SK_putc(sock,ch);
    73   |   }
    74   | #endif
    75   |   close(s);
    76   | }
    77   |