home *** CD-ROM | disk | FTP | other *** search
/ Freelog 42 / Freelog042.iso / Alu / Ancestrologie / Sources / InterBase_WI-V6.0.1-server.ZIP / examples / services / query_database_info.c < prev    next >
Encoding:
C/C++ Source or Header  |  2001-01-05  |  2.6 KB  |  115 lines

  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <malloc.h>
  4. #include "/usr/interbase/include/ibase.h"
  5.  
  6. #define RESPBUF    256
  7.  
  8. int main (argc, argv)
  9. int    argc;
  10. char    *argv[];
  11. {
  12. char    *user = "SYSDBA",
  13.         *pass = "masterkey";
  14.  
  15. char sendbuf[] = {isc_info_svc_svr_db_info};
  16. long    status [20];
  17. long    *svc_handle = NULL;
  18. char    svc_name[RESPBUF], spb_buff[RESPBUF], thd_buff[RESPBUF];
  19. char    respbuf[RESPBUF], *p = respbuf, *spb = spb_buff, *thd = thd_buff,*x, item = 9;
  20. short    spblen, thdlen;
  21. int    i = 0, cnt=0;
  22. int finished = 0;
  23.  
  24. *spb++ = isc_spb_version;
  25. *spb++ = isc_spb_current_version;
  26.  
  27. *spb++ = isc_spb_user_name;
  28. *spb++ = strlen (user);
  29. for (x = user; *x;)
  30.   *spb++ = *x++;
  31.  
  32. *spb++ = isc_spb_password;
  33. *spb++ = strlen (pass);
  34. for (x = pass; *x;)
  35.   *spb++ = *x++;
  36.  
  37. sprintf (svc_name, "typhoon:service_mgr");
  38.  
  39. spblen = spb - spb_buff;
  40.  
  41. if (isc_service_attach (status, 0, svc_name, &svc_handle, spblen, spb_buff))
  42.     {
  43.     isc_print_status (status);
  44.     exit (1);
  45.     }
  46.  
  47. printf ("Attach succeed\n");
  48.  
  49. if (isc_service_query (status, &svc_handle, NULL, 0, NULL, sizeof (sendbuf), sendbuf, RESPBUF, respbuf))
  50.     {
  51.     isc_print_status (status);
  52.     isc_service_detach (status, &svc_handle);
  53.     return;
  54.     }
  55. else
  56.     {
  57.     ISC_USHORT len = 0, chTmp = 0;
  58.     ISC_ULONG  num;
  59.  
  60.     p = respbuf;
  61.     item = *p++;   /* remove the sendbuf flag */
  62.     if (item != isc_info_svc_svr_db_info)
  63.     {
  64.     printf ("Expected isc_info_svc_svr_db_info, got <%d>", item);
  65.     return(1);
  66.     }
  67.     while (1)
  68.     {
  69.     switch (*p)
  70.         {
  71.         case isc_spb_dbname:
  72.         len = (ISC_USHORT)isc_vax_integer(++p, sizeof(ISC_USHORT));
  73.         p += sizeof (ISC_USHORT);
  74.         printf ("isc_spb_dbname <");
  75.         for (chTmp = 0; chTmp < len; chTmp++)
  76.             printf ("%c", p[chTmp]);
  77.         printf (">\n");
  78.         p += len;
  79.         break;
  80.         case isc_spb_num_db:
  81.         num = (ISC_ULONG) isc_vax_integer (++p, sizeof(ISC_ULONG));
  82.         printf ("isc_spb_num_db <%d>\n", num);
  83.         p += sizeof (ISC_ULONG);
  84.         break;
  85.         case isc_spb_num_att:
  86.         num = (ISC_ULONG) isc_vax_integer (++p, sizeof(ISC_ULONG));
  87.         printf ("isc_spb_num_att <%d>\n", num);
  88.         p += sizeof (ISC_ULONG);
  89.         break;
  90.         case isc_info_end:
  91.         printf ("isc_info_end, finished OK\n");
  92.         isc_service_detach(status, &svc_handle);
  93.         return (0);
  94.         break;
  95.         case isc_info_truncated:
  96.         printf ("isc_info_truncated, finished OK\n");
  97.         isc_service_detach(status, &svc_handle);
  98.         return (0);
  99.         break;
  100.         case isc_info_flag_end:
  101.         printf ("isc_info_flag_end, finished OK\n");
  102.         isc_service_detach(status, &svc_handle);
  103.         return (0);
  104.         break;
  105.         default:
  106.         printf ("***Internal error, got <%d>\n", *p);
  107.         p++;
  108.         break;
  109.         }
  110.         }
  111.     }
  112.  
  113. isc_service_detach(status, &svc_handle);
  114. }
  115.