ncbi_servicep.h
上传用户:yhdzpy8989
上传日期:2007-06-13
资源大小:13604k
文件大小:9k
源码类别:

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: ncbi_servicep.h,v $
  4.  * PRODUCTION Revision 1000.0  2003/10/29 16:39:59  gouriano
  5.  * PRODUCTION PRODUCTION: IMPORTED [ORIGINAL] Dev-tree R6.23
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. #ifndef CONNECT___NCBI_SERVICEP__H
  10. #define CONNECT___NCBI_SERVICEP__H
  11. /*  $Id: ncbi_servicep.h,v 1000.0 2003/10/29 16:39:59 gouriano Exp $
  12.  * ===========================================================================
  13.  *
  14.  *                            PUBLIC DOMAIN NOTICE
  15.  *               National Center for Biotechnology Information
  16.  *
  17.  *  This software/database is a "United States Government Work" under the
  18.  *  terms of the United States Copyright Act.  It was written as part of
  19.  *  the author's official duties as a United States Government employee and
  20.  *  thus cannot be copyrighted.  This software/database is freely available
  21.  *  to the public for use. The National Library of Medicine and the U.S.
  22.  *  Government have not placed any restriction on its use or reproduction.
  23.  *
  24.  *  Although all reasonable efforts have been taken to ensure the accuracy
  25.  *  and reliability of the software and data, the NLM and the U.S.
  26.  *  Government do not and cannot warrant the performance or results that
  27.  *  may be obtained by using this software or data. The NLM and the U.S.
  28.  *  Government disclaim all warranties, express or implied, including
  29.  *  warranties of performance, merchantability or fitness for any particular
  30.  *  purpose.
  31.  *
  32.  *  Please cite the author in any work or product based on this material.
  33.  *
  34.  * ===========================================================================
  35.  *
  36.  * Author:  Anton Lavrentiev, Denis Vakatov
  37.  *
  38.  * File Description:
  39.  *   Private API to define server iterator structure.
  40.  *
  41.  */
  42. #include "ncbi_server_infop.h"
  43. #include <connect/ncbi_service.h>
  44. #ifdef __cplusplus
  45. extern "C" {
  46. #endif
  47. /* Table of iterator "virtual functions"
  48.  */
  49. typedef struct {
  50.     void        (*Reset)(SERV_ITER iter);
  51.     SSERV_Info* (*GetNextInfo)(SERV_ITER iter, HOST_INFO* host_info);
  52.     int/*bool*/ (*Update)(SERV_ITER iter, TNCBI_Time now, const char* text);
  53.     int/*bool*/ (*Penalize)(SERV_ITER iter, double penalty);
  54.     void        (*Close)(SERV_ITER iter);
  55.     const char* name;
  56. } SSERV_VTable;
  57. /* Iterator structure
  58.  */
  59. struct SSERV_IterTag {
  60.     const char*  service;        /* requested service name                 */
  61.     TSERV_Type   type;           /* requested server type(s)               */
  62.     unsigned int preferred_host; /* preferred host to select, network b.o. */
  63.     double       preference;     /* range [0..100] %%                      */
  64.     SSERV_Info** skip;           /* servers to skip                        */
  65.     size_t       n_skip;         /* number of servers in the array         */
  66.     size_t       n_max_skip;     /* number of allocated slots in the array */
  67.     SSERV_Info*  last;           /* last server info taken out             */
  68.     const SSERV_VTable* op;      /* table of virtual functions             */
  69.     void*        data;           /* private data field                     */
  70.     int/*bool*/  external;       /* true for mapping of external requests  */
  71. };
  72. /* Modified 'fast track' routine for one-shot obtaining of a service info.
  73.  * Please see <connect/ncbi_service.h> for explanations [SERV_GetInfoEx()].
  74.  * For now, this call is to exclusively support MYgethostbyname() replacement
  75.  * of standard gethostbyname() libcall in apache Web daemon (see in daemons/).
  76.  *
  77.  * NOTE: Preference 0.0 does not prohibit the preferred_host to be selected;
  78.  *       nor preference 100.0 ultimately opts for the preferred_host; rather,
  79.  *       the preference is considered as an estimate for the selection
  80.  *       probability when all other conditions for favoring the host are
  81.  *       optimal, i.e. preference 0.0 actually means not to favor the preferred
  82.  *       host at all, while 100.0 means to opt for that as much as possible.
  83.  */
  84. SSERV_Info* SERV_GetInfoP
  85. (const char*         service,       /* service name                          */
  86.  TSERV_Type          types,         /* mask of type(s) of servers requested  */
  87.  unsigned int        preferred_host,/* preferred host to use service on, nbo */
  88.  double              preference,    /* [0=min..100=max] preference in %%     */
  89.  int/*bool*/         external       /* whether mapping is not local to NCBI  */
  90.  );
  91. /* same as above but creates an iterator to get services one by one */
  92. SERV_ITER SERV_OpenP
  93. (const char*         service,
  94.  TSERV_Type          type,
  95.  unsigned int        preferred_host,
  96.  double              preference,
  97.  int/*bool*/         external
  98.  );
  99. /* Private interface: update mapper information from the given text
  100.  * (<CR><LF> separated lines, usually taken from HTTP header).
  101.  */
  102. int/*bool*/ SERV_Update(SERV_ITER iter, const char* text);
  103. /* Private interface: print and return the HTTP-compliant header portion
  104.  * (<CR><LF> separated lines, including the last line) out of the information
  105.  * contained in the iterator; to be used in mapping requests to DISPD.
  106.  * Return value must be 'free'd.
  107.  */
  108. char* SERV_Print(SERV_ITER iter);
  109. /* Get name of underlying service mapper.
  110.  */
  111. const char* SERV_MapperName(SERV_ITER iter);
  112. /* Get final service name, using CONN_SERVICE_NAME_service environment
  113.  * variable, then (if not found) registry section [service] and a key
  114.  * CONN_SERVICE_NAME. Return resulting name (perhaps, an exact copy of
  115.  * "service" if no override name was found in environment/registry), which
  116.  * is to be freed by a caller when no longer needed. Return NULL on error.
  117.  * NOTE: This procedure does not detect cyclical redefinitions.
  118.  */
  119. char* SERV_ServiceName(const char* service);
  120. /* Get configuration file name. Returned ''-terminated string
  121.  * is to be free()'d by a caller when no longer needed.
  122.  * Return NULL if no configuration file name available.
  123.  */
  124. char* SERV_GetConfig(void);
  125. /* Given the status gap and wanted preference, calculate
  126.  * acceptable stretch for the gap (the number of candidates is n).
  127.  */
  128. double SERV_Preference(double pref, double gap, unsigned int n);
  129. #ifdef __cplusplus
  130. }  /* extern "C" */
  131. #endif
  132. /*
  133.  * --------------------------------------------------------------------------
  134.  * $Log: ncbi_servicep.h,v $
  135.  * Revision 1000.0  2003/10/29 16:39:59  gouriano
  136.  * PRODUCTION: IMPORTED [ORIGINAL] Dev-tree R6.23
  137.  *
  138.  * Revision 6.23  2003/06/26 15:19:56  lavr
  139.  * Additional parameter "external" for SERV_{Open|GetInfo}P()
  140.  *
  141.  * Revision 6.22  2003/06/09 19:53:11  lavr
  142.  * +SERV_OpenP()
  143.  *
  144.  * Revision 6.21  2003/03/07 22:21:55  lavr
  145.  * Explain what is "preference" for SERV_GetInfoP()
  146.  *
  147.  * Revision 6.20  2003/02/28 14:49:09  lavr
  148.  * SERV_Preference(): redeclare last argument 'unsigned'
  149.  *
  150.  * Revision 6.19  2003/02/13 21:37:28  lavr
  151.  * Comment SERV_Preference(), change last argument
  152.  *
  153.  * Revision 6.18  2003/01/31 21:19:41  lavr
  154.  * +SERV_Preference()
  155.  *
  156.  * Revision 6.17  2002/10/28 20:16:00  lavr
  157.  * Take advantage of host info API
  158.  *
  159.  * Revision 6.16  2002/10/11 19:48:25  lavr
  160.  * +SERV_GetConfig()
  161.  * const dropped in return value of SERV_ServiceName()
  162.  *
  163.  * Revision 6.15  2002/09/19 18:08:43  lavr
  164.  * Header file guard macro changed; log moved to end
  165.  *
  166.  * Revision 6.14  2002/05/06 19:17:04  lavr
  167.  * +SERV_ServiceName() - translation of service name
  168.  *
  169.  * Revision 6.13  2001/09/28 20:50:41  lavr
  170.  * Update VT method changed - now called on per-line basis
  171.  *
  172.  * Revision 6.12  2001/09/24 20:23:39  lavr
  173.  * Reset() method added to VT
  174.  *
  175.  * Revision 6.11  2001/06/25 15:38:00  lavr
  176.  * Heap of services is now not homogeneous, but can
  177.  * contain entries of different types. As of now,
  178.  * Service and Host entry types are introduced and defined
  179.  *
  180.  * Revision 6.10  2001/05/11 15:30:02  lavr
  181.  * Correction in comment
  182.  *
  183.  * Revision 6.9  2001/04/26 14:18:45  lavr
  184.  * SERV_MapperName moved to the private header
  185.  *
  186.  * Revision 6.8  2001/04/24 21:33:58  lavr
  187.  * Added members of mapper V-table: penalize(method) and name(data).
  188.  * Service iterator has got new field 'last' to keep the latest given info.
  189.  *
  190.  * Revision 6.7  2001/03/06 23:57:49  lavr
  191.  * Minor beautifications
  192.  *
  193.  * Revision 6.6  2000/12/29 18:12:51  lavr
  194.  * SERV_Print added to private interface
  195.  *
  196.  * Revision 6.5  2000/12/06 22:21:27  lavr
  197.  * SERV_Print added to private interface
  198.  *
  199.  * Revision 6.4  2000/10/20 17:22:55  lavr
  200.  * VTable changed to have 'Update' method
  201.  * 'SERV_Update' added to private interface
  202.  *
  203.  * Revision 6.3  2000/10/05 21:37:51  lavr
  204.  * Mapper-specific private data field added
  205.  *
  206.  * Revision 6.2  2000/05/22 16:53:12  lavr
  207.  * Rename service_info -> server_info everywhere (including
  208.  * file names) as the latter name is more relevant
  209.  *
  210.  * Revision 6.1  2000/05/12 18:38:16  lavr
  211.  * First working revision
  212.  *
  213.  * ==========================================================================
  214.  */
  215. #endif /* CONNECT___NCBI_SERVICEP__H */