home *** CD-ROM | disk | FTP | other *** search
/ Media Share 9 / MEDIASHARE_09.ISO / hamradio / wattcp.zip / PH.C < prev    next >
C/C++ Source or Header  |  1992-03-09  |  4KB  |  174 lines

  1. /*
  2.  * PH.EXE - CSO NameServer Client
  3.  *
  4.  * Don Genner (acddon@vm.uoguelph.ca) wrote this clever little CSO
  5.  * client.  You may wish to use it and a DOS batch file to set up a
  6.  * simple phonebook command:
  7.  
  8.  *  eg.     ph  localserver  "query name=%1"
  9.  *
  10.  * or something much more complex.
  11.  *
  12.  * To get more details on the protocol and local features, use something
  13.  * like:    ph  localserver  "help"
  14.  *
  15.  *
  16.  * Syntax:  Stand-alone:    PH  CSO-NameServer Request
  17.  *                          --------------------------
  18.  *
  19.  *   eg:  PH csaserver.uoguelph.ca "query name=genner return name email"
  20.  *               {Results}
  21.  *
  22.  *        PH csaserver.uoguelph.ca "query name=g*"
  23.  *              {Results}
  24.  *
  25.  *        PH csaserver.uoguelph.ca "query g*"
  26.  *              {Results}
  27.  *
  28.  *
  29.  * Syntax:  Conversational:   PH  CSO-NameServer
  30.  *                            ------------------
  31.  *
  32.  *   or:  PH csaserver.uoguelph.ca
  33.  *            Server : csaserver.uoguelph.ca
  34.  *              {Results}
  35.  *
  36.  *           Request : query genner
  37.  *              {Results}
  38.  *
  39.  *           Request : siteinfo
  40.  *              {Results}
  41.  *
  42.  *           Request : fields
  43.  *              {Results}
  44.  *
  45.  *           Request : quit
  46.  *              {Results}
  47.  *
  48.  *
  49.  *
  50.  */
  51.  
  52. #include <stdio.h>
  53. #include <string.h>
  54. #include <tcp.h>
  55.  
  56. #define PH_PORT 105
  57.  
  58. tcp_Socket  phsock;
  59. char        buffer[515];
  60.  
  61. ph(cmd, host, hoststring)
  62.     char       *cmd,
  63.            *hoststring;
  64.     longword        host;
  65. {
  66.     tcp_Socket     *s;
  67.     int         status;
  68.     int         len,
  69.             prsw,
  70.             crsw,
  71.             i;
  72.  
  73.  
  74.     s = &phsock;
  75.     if (!tcp_open(s, 0, host, PH_PORT, NULL)) {
  76.         puts("Sorry, unable to connect to that machine right now!");
  77.         return;
  78.     }
  79.  
  80.     printf("waiting...\r");
  81.     sock_wait_established(s, sock_delay, NULL, &status);
  82.  
  83.     strcpy(buffer, cmd);
  84.     rip(buffer);
  85.     strcat(buffer, "\r\n");
  86.  
  87.     sock_puts(s, buffer);
  88.  
  89.     prsw = -1;
  90.     crsw = -1;
  91.     while (prsw) {
  92.         sock_wait_input(s, 30, NULL, &status);
  93.         len = sock_fastread(s, buffer, 512);
  94.         for (i = 0; i < len; i++) {
  95.             if (crsw && (buffer[i] != '-'))
  96.             putchar(' ');
  97.             if (crsw && (buffer[i] >= '2')) {
  98.                 prsw = 0;
  99.             }
  100.             putchar(buffer[i]);
  101.             crsw = 0;
  102.             if (buffer[i] == 0x0a) crsw = -1;
  103.         }
  104.     }
  105.     sock_close( s );
  106.     sock_wait_closed( s, sock_delay, NULL, &status );
  107.  
  108.   sock_err:
  109.     switch (status)
  110.     {
  111.     case 1:         /* foreign host closed */
  112.             break;
  113.     case -1:            /* timeout */
  114.             printf("ERROR: %s\n", sockerr(s));
  115.     break;
  116.     }
  117.     printf("\n");
  118. }
  119.  
  120.  
  121. main(int argc, char **argv)
  122. {
  123.     char       *cmd,
  124.            *server;
  125.     char        lcmd[255];
  126.     longword        host;
  127.     int         status;
  128.  
  129.     sock_init();
  130.  
  131.     if ((argc < 2) || (argc > 3))
  132.     {
  133.     puts("   Usage: PH server [request]");
  134.     exit(3);
  135.     }
  136.  
  137.     server = cmd = NULL;
  138.  
  139.     server = argv[1];
  140.     if (host = resolve(server))
  141.     {
  142.     printf(" Server  : %s\n\n", server);
  143.     }else{
  144.     printf("Could not resolve host '%s'\n", server);
  145.     exit(0);
  146.     }
  147.  
  148.     if (argc == 3)
  149.     {
  150.     cmd = argv[2];
  151.     status = ph(cmd, host, server);
  152.     }
  153.     else
  154.     {
  155.     while(1)
  156.     {
  157.         printf(" Request : ");
  158.         gets(cmd = lcmd);
  159.         if (!*cmd)
  160.         {
  161.         puts("No command given\n");
  162.         exit(2);
  163.         }
  164.         status = ph(cmd, host, server);
  165.         if(strncmp(cmd , "quit" , 4) == 0)break;
  166.         if(strncmp(cmd , "stop" , 4) == 0)break;
  167.         if(strncmp(cmd , "exit" , 4) == 0)break;
  168.  
  169.     }
  170.     }
  171.  
  172.     exit(status);
  173. }
  174.