home *** CD-ROM | disk | FTP | other *** search
/ ftp.wwiv.com / ftp.wwiv.com.zip / ftp.wwiv.com / pub / CEREBRUM / WAT9609.ZIP / APPS / PH.C < prev    next >
Text File  |  1994-11-28  |  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 <stdlib.h>
  54. #include <string.h>
  55. #include <tcp.h>
  56.  
  57. #define PH_PORT 105
  58.  
  59. tcp_Socket  phsock;
  60. char        buffer[515];
  61.  
  62. int ph( char *cmd, longword host /*, char *hoststring*/)
  63. {
  64.     tcp_Socket     *s;
  65.     int         status;
  66.     int         len,
  67.             prsw,
  68.             crsw,
  69.             i;
  70.  
  71.  
  72.     s = &phsock;
  73.     if (!tcp_open(s, 0, host, PH_PORT, NULL)) {
  74.         puts("Sorry, unable to connect to that machine right now!");
  75.         return (1);
  76.     }
  77.  
  78.     printf("waiting...\r");
  79.     sock_wait_established(s, sock_delay, NULL, &status);
  80.  
  81.     strcpy(buffer, cmd);
  82.     rip(buffer);
  83.     strcat(buffer, "\r\n");
  84.  
  85.     sock_puts(s, buffer);
  86.  
  87.     prsw = -1;
  88.     crsw = -1;
  89.     while (prsw) {
  90.         sock_wait_input(s, 30, NULL, &status);
  91.         len = sock_fastread(s, buffer, 512);
  92.         for (i = 0; i < len; i++) {
  93.             if (crsw && (buffer[i] != '-'))
  94.             putchar(' ');
  95.             if (crsw && (buffer[i] >= '2')) {
  96.                 prsw = 0;
  97.             }
  98.             putchar(buffer[i]);
  99.             crsw = 0;
  100.             if (buffer[i] == 0x0a) crsw = -1;
  101.         }
  102.     }
  103.     sock_close( s );
  104.     sock_wait_closed( s, sock_delay, NULL, &status );
  105.  
  106.   sock_err:
  107.     switch (status)
  108.     {
  109.     case 1:         /* foreign host closed */
  110.             break;
  111.     case -1:            /* timeout */
  112.             printf("ERROR: %s\n", sockerr(s));
  113.     break;
  114.     }
  115.     printf("\n");
  116.     return ( (status == -1) ? 2 : status );
  117. }
  118.  
  119.  
  120. int main(int argc, char **argv)
  121. {
  122.     char       *cmd,
  123.            *server;
  124.     char        lcmd[255];
  125.     longword        host;
  126.     int         status;
  127.  
  128.     sock_init();
  129.  
  130.     if ((argc < 2) || (argc > 3))
  131.     {
  132.     puts("   Usage: PH server [request]");
  133.     exit(3);
  134.     }
  135.  
  136.     server = cmd = NULL;
  137.  
  138.     server = argv[1];
  139.     if ( (host = resolve(server)) != 0uL )
  140.     {
  141.     printf(" Server  : %s\n\n", server);
  142.     }else{
  143.     printf("Could not resolve host '%s'\n", server);
  144.     exit(0);
  145.     }
  146.  
  147.     if (argc == 3)
  148.     {
  149.     cmd = argv[2];
  150.     status = ph(cmd, host /*, server */);
  151.     }
  152.     else
  153.     {
  154.     while(1)
  155.     {
  156.         printf(" Request : ");
  157.         gets(cmd = lcmd);
  158.         if (!*cmd)
  159.         {
  160.         puts("No command given\n");
  161.         exit(2);
  162.         }
  163.         status = ph(cmd, host /*, server*/);
  164.         if(strncmp(cmd , "quit" , 4) == 0)break;
  165.         if(strncmp(cmd , "stop" , 4) == 0)break;
  166.         if(strncmp(cmd , "exit" , 4) == 0)break;
  167.  
  168.     }
  169.     }
  170.  
  171.     exit(status);
  172.     return (0);  /* not reached */
  173. }
  174.