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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: ncbi_server_info.h,v $
  4.  * PRODUCTION Revision 1000.0  2003/10/29 16:32:13  gouriano
  5.  * PRODUCTION PRODUCTION: IMPORTED [ORIGINAL] Dev-tree R6.37
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. #ifndef CONNECT___NCBI_SERVER_INFO__H
  10. #define CONNECT___NCBI_SERVER_INFO__H
  11. /*  $Id: ncbi_server_info.h,v 1000.0 2003/10/29 16:32:13 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.  *   NCBI server meta-address info
  40.  *   Note that all server meta-addresses are allocated as
  41.  *   single contiguous pieces of memory, which can be copied in whole
  42.  *   with the use of 'SERV_SizeOfInfo' call. Dynamically allocated
  43.  *   server infos can be freed with a direct call to 'free'.
  44.  *   Assumptions on the fields: all fields in the server info come in
  45.  *   host byte order except 'host', which comes in network byte order.
  46.  *
  47.  */
  48. #include <connect/ncbi_connutil.h>
  49. /** @addtogroup ServiceSupport
  50.  *
  51.  * @{
  52.  */
  53. #ifdef __cplusplus
  54. extern "C" {
  55. #endif
  56. /* Server types
  57.  */
  58. typedef enum {
  59.     fSERV_Ncbid      = 0x1,
  60.     fSERV_Standalone = 0x2,
  61.     fSERV_HttpGet    = 0x4,
  62.     fSERV_HttpPost   = 0x8,
  63.     fSERV_Http       = fSERV_HttpGet | fSERV_HttpPost,
  64.     fSERV_Firewall   = 0x10,
  65.     fSERV_Dns        = 0x20
  66. } ESERV_Type;
  67. #define fSERV_Any           0
  68. #define fSERV_StatelessOnly 0x80
  69. typedef unsigned int TSERV_Type;  /* bit-wise OR of "ESERV_Type" flags */
  70. /* Flags to specify the algorithm for selecting the most preferred
  71.  * server from the set of available servers
  72.  */
  73. typedef enum {
  74.     fSERV_Regular = 0x0,
  75.     fSERV_Blast   = 0x1
  76. } ESERV_Flags;
  77. #define SERV_DEFAULT_FLAG           fSERV_Regular
  78. #define SERV_MIME_TYPE_UNDEFINED    ((EMIME_Type)(-1))
  79. #define SERV_MIME_SUBTYPE_UNDEFINED ((EMIME_SubType)(-1))
  80.                                  
  81. /* Verbal representation of a server type (no internal spaces allowed)
  82.  */
  83. extern NCBI_XCONNECT_EXPORT const char* SERV_TypeStr
  84. (ESERV_Type type
  85.  );
  86. /* Read server info type.
  87.  * If successful, assign "type" and return pointer to the position
  88.  * in the "str" immediately following the type tag.
  89.  * On error, return NULL.
  90.  */
  91. extern NCBI_XCONNECT_EXPORT const char* SERV_ReadType
  92. (const char* str,
  93.  ESERV_Type* type
  94.  );
  95. /* Meta-addresses for various types of NCBI servers
  96.  */
  97. typedef struct {
  98.     TNCBI_Size     args;
  99. #define SERV_NCBID_ARGS(ui)     ((char*) (ui) + (ui)->args)
  100. } SSERV_NcbidInfo;
  101. typedef struct {
  102.     char           dummy;       /* placeholder, not used                     */
  103. } SSERV_StandaloneInfo;
  104. typedef struct {
  105.     TNCBI_Size     path;
  106.     TNCBI_Size     args;
  107. #define SERV_HTTP_PATH(ui)      ((char*) (ui) + (ui)->path)
  108. #define SERV_HTTP_ARGS(ui)      ((char*) (ui) + (ui)->args)
  109. } SSERV_HttpInfo;
  110. typedef struct {
  111.     ESERV_Type     type;        /* type of original server                   */
  112. } SSERV_FirewallInfo;
  113. typedef struct {
  114.     char         pad[8];        /* reserved for the future use, must be zero */
  115. } SSERV_DnsInfo;
  116. /* Generic NCBI server meta-address
  117.  */
  118. typedef union {
  119.     SSERV_NcbidInfo      ncbid;
  120.     SSERV_StandaloneInfo standalone;
  121.     SSERV_HttpInfo       http;
  122.     SSERV_FirewallInfo   firewall;
  123.     SSERV_DnsInfo        dns;
  124. } USERV_Info;
  125. typedef struct {
  126.     ESERV_Type            type; /* type of server                            */
  127.     unsigned int          host; /* host the server running on, network b.o.  */
  128.     unsigned short        port; /* port the server running on, host b.o.     */
  129.     unsigned char/*bool*/ sful; /* true for stateful-only server (default=no)*/
  130.     unsigned char/*bool*/ locl; /* true for local (LBSMD-only) server(def=no)*/
  131.     TNCBI_Time            time; /* relaxation period / expiration time       */
  132.     double                coef; /* bonus coefficient for server run locally  */
  133.     double                rate; /* rate of the server                        */
  134.     EMIME_Type          mime_t; /* type,                                     */
  135.     EMIME_SubType       mime_s; /*     subtype,                              */
  136.     EMIME_Encoding      mime_e; /*         and encoding for content-type     */
  137.     ESERV_Flags           flag; /* algorithm flag for the server             */
  138.     unsigned char reserved[14]; /* zeroed reserved area - do not use!        */
  139.     unsigned short      quorum; /* quorum required to override this entry    */
  140.     USERV_Info               u; /* server type-specific data/params          */
  141. } SSERV_Info;
  142. /* Constructors for the various types of NCBI server meta-addresses
  143.  */
  144. extern NCBI_XCONNECT_EXPORT SSERV_Info* SERV_CreateNcbidInfo
  145. (unsigned int   host,           /* network byte order                        */
  146.  unsigned short port,           /* host byte order                           */
  147.  const char*    args
  148.  );
  149. extern NCBI_XCONNECT_EXPORT SSERV_Info* SERV_CreateStandaloneInfo
  150. (unsigned int   host,           /* network byte order                        */
  151.  unsigned short port            /* host byte order                           */
  152.  );
  153. extern NCBI_XCONNECT_EXPORT SSERV_Info* SERV_CreateHttpInfo
  154. (ESERV_Type     type,           /* verified, must be one of fSERV_Http*      */
  155.  unsigned int   host,           /* network byte order                        */
  156.  unsigned short port,           /* host byte order                           */
  157.  const char*    path,
  158.  const char*    args
  159.  );
  160. extern NCBI_XCONNECT_EXPORT SSERV_Info* SERV_CreateFirewallInfo
  161. (unsigned int   host,           /* original server's host in net byte order  */
  162.  unsigned short port,           /* original server's port in host byte order */
  163.  ESERV_Type     type            /* type of original server, wrapped into     */
  164.  );
  165. extern NCBI_XCONNECT_EXPORT SSERV_Info* SERV_CreateDnsInfo
  166. (unsigned int   host            /* the only parameter                        */
  167.  );
  168. /* Dump server info to a string.
  169.  * The server type goes first, and it is followed by a single space.
  170.  * The returned string is ''-terminated, and must be deallocated by 'free()'.
  171.  */
  172. extern NCBI_XCONNECT_EXPORT char* SERV_WriteInfo
  173. (const SSERV_Info* info
  174.  );
  175. /* Server specification consists of the following:
  176.  * TYPE [host][:port] [server-specific_parameters] [tags]
  177.  *
  178.  * TYPE := { STANDALONE | NCBID | HTTP{|_GET|_POST} | FIREWALL | DNS }
  179.  *
  180.  * Host should be specified as either an IP address (in dotted notation),
  181.  * or as a host name (using domain notation if necessary).
  182.  * Port number must be preceded by a colon.
  183.  * Both host and port get their default values if not specified.
  184.  *
  185.  * Server-specific parameters:
  186.  *
  187.  *    Standalone servers: None
  188.  *                        Servers of this type do not take any arguments.
  189.  *
  190.  *    NCBID servers: Arguments to CGI in addition to specified by application.
  191.  *                   Empty additional arguments denoted as '' (double quotes).
  192.  *                   Note that arguments must not contain space characters.
  193.  *
  194.  *    HTTP* servers: Path (required) and args (optional) in the form
  195.  *                   path[?args] (here brackets denote the optional part).
  196.  *                   Note that no spaces allowed within this parameter.
  197.  *
  198.  *    FIREWALL servers: Servers of this type are converted real servers of
  199.  *                      the above types, when only accessible via FIREWALL
  200.  *                      mode of NCBI dispatcher. The purpose of this fake
  201.  *                      server type is just to let the client know that
  202.  *                      the service exists. Additional parameter the original
  203.  *                      type of the server before conversion. Note that servers
  204.  *                      of type FIREWALL cannot be configured in LBSMD.
  205.  *
  206.  *    DNS servers: Experimental (as of now) services for load-balancing
  207.  *                 DNS mapping at the NCBI Web entry point.
  208.  *                 Never exported to the outside world.
  209.  *
  210.  * Tags may follow in no particular order but no more than one instance
  211.  * of each flag is allowed:
  212.  *
  213.  *    Load average calculation for the server:
  214.  *       Regular        (default)
  215.  *       Blast
  216.  *
  217.  *    Bonus coefficient:
  218.  *       B=double       [0.0 = default]
  219.  *           specifies a multiplicative bonus given to a server run locally,
  220.  *           when calculating reachability rate.
  221.  *           Special rules apply to negative/zero values:
  222.  *           0.0 means not to use the described rate increase at all (default
  223.  *           rate calculation is used, which only slightly increases rates
  224.  *           of locally run servers).
  225.  *           Negative value denotes that locally run server should
  226.  *           be taken in first place, regardless of its rate, if that rate
  227.  *           is larger than percent of expressed by the absolute value
  228.  *           of this coefficient of the average rate coefficient of other
  229.  *           servers for the same service. That is -5 instructs to
  230.  *           ignore locally run server if its status is less than 5% of
  231.  *           average status of remaining servers for the same service.
  232.  *
  233.  *    Content type indication:
  234.  *       C=type/subtype [no default]
  235.  *           specification of Content-Type (including encoding), which server
  236.  *           accepts. The value of this flag gets added automatically to any
  237.  *           HTTP packet sent to the server by SERVICE connector. However,
  238.  *           in order to communicate, a client still has to know and generate
  239.  *           the data type accepted by the server, i.e. a protocol, which
  240.  *           server understands. This flag just helps insure that HTTP packets
  241.  *           all get proper content type, defined at service configuration.
  242.  *           This tag is not allowed in DNS server specifications.
  243.  *
  244.  *    Local server:
  245.  *       L=no           (default for non-DNS specs)
  246.  *       L=yes          (default for DNS specs)
  247.  *           Local servers are accessible only by local clients (from within
  248.  *           the Intranet) or direct clients of LBSMD, and are not accessible
  249.  *           by the outside users (i.e. via network dispatching).
  250.  *
  251.  *    Private server:
  252.  *       P=no           (default)
  253.  *       P=yes
  254.  *           specifies whether the server is private for the host.
  255.  *           Private server cannot be used from anywhere else but
  256.  *           this host. When non-private (default), the server lacks
  257.  *           'P=no' in verbal representation resulted from SERV_WriteInfo().
  258.  *           This tag is not allowed in DNS server specifications.
  259.  *
  260.  *    Quorum:
  261.  *       Q=integer      [0 = default]
  262.  *           specifies how many dynamic service entries have to be defined
  263.  *           by respective hosts in order for this entry to be INACTIVE.
  264.  *           Note that value 0 disables the quorum and the entry becomes
  265.  *           effective immediately. The quorum flag is to create a backup
  266.  *           configuration to be activated in case of multicast/daemon
  267.  *           malfunction.
  268.  *           Only static and non-FIREWALL server specs can have this tag.
  269.  *
  270.  *    Reachability base rate:
  271.  *       R=double       [0.0 = default]
  272.  *           specifies availability rate for the server, expressed as
  273.  *           a floating point number with 0.0 meaning the server is down
  274.  *           (unavailable) and 1000.0 meaning the server is up and running.
  275.  *           Intermediate or higher values can be used to make the server less
  276.  *           or more favorable for choosing by LBSM Daemon, as this coefficient
  277.  *           is directly used as a multiplier in the load-average calculation
  278.  *           for the entire family of servers for the same service.
  279.  *           (If equal to 0.0 then defaulted by the LBSM Daemon to 1000.0.)
  280.  *           Normally, LBSMD keeps track of server reachability, and
  281.  *           dynamically switches this rate to be maximal specified when
  282.  *           the server is up, and to be zero when the server is down.
  283.  *           Note that negative values are reserved for LBSMD private use.
  284.  *           To specify that a server as inactive in LBSMD configuration file,
  285.  *           one can use any negative number (note that value "0" in the config
  286.  *           file means "default" and gets replaced with the value 1000.0).
  287.  *
  288.  *    Stateful server:
  289.  *       S=no           (default)
  290.  *       S=yes
  291.  *           Indication of stateful server, which allows only dedicated socket
  292.  *           (stateful) connections.
  293.  *           This tag is not allowed for HTTP* and DNS servers.
  294.  *
  295.  *    Validity period:
  296.  *       T=integer      [0 = default]
  297.  *           specifies the time in seconds this server entry is valid
  298.  *           without update. (If equal to 0 then defaulted by
  299.  *           the LBSM Daemon to some reasonable value.)
  300.  *
  301.  *
  302.  * Note that optional arguments can be omitted along with all preceding
  303.  * optional arguments, that is the following 2 server specifications are
  304.  * both valid:
  305.  *
  306.  * NCBID ''
  307.  * and
  308.  * NCBID
  309.  *
  310.  * but they are not equal to the following specification:
  311.  *
  312.  * NCBID Regular
  313.  *
  314.  * because here 'Regular' is treated as an argument, not as a tag.
  315.  * To make the latter specification equivalent to the former two, one has
  316.  * to use the following form:
  317.  *
  318.  * NCBID '' Regular
  319.  */
  320. /* Read full server info (including type) from string "str"
  321.  * (e.g. composed by SERV_WriteInfo). Result can be later freed by 'free()'.
  322.  * If host is not found in the server specification, info->host is
  323.  * set to 0; if port is not found, type-specific default value is used.
  324.  */
  325. extern NCBI_XCONNECT_EXPORT SSERV_Info* SERV_ReadInfo
  326. (const char* info_str
  327.  );
  328. /* Return an actual size (in bytes) the server info occupies
  329.  * (to be used for copying info structures in whole).
  330.  */
  331. extern NCBI_XCONNECT_EXPORT size_t SERV_SizeOfInfo
  332. (const SSERV_Info* info
  333.  );
  334. /* Return 'true' if two server infos are equal.
  335.  */
  336. extern NCBI_XCONNECT_EXPORT int/*bool*/ SERV_EqualInfo
  337. (const SSERV_Info* info1,
  338.  const SSERV_Info* info2
  339.  );
  340. #ifdef __cplusplus
  341. }  /* extern "C" */
  342. #endif
  343. /* @} */
  344. /*
  345.  * --------------------------------------------------------------------------
  346.  * $Log: ncbi_server_info.h,v $
  347.  * Revision 1000.0  2003/10/29 16:32:13  gouriano
  348.  * PRODUCTION: IMPORTED [ORIGINAL] Dev-tree R6.37
  349.  *
  350.  * Revision 6.37  2003/04/09 19:05:48  siyan
  351.  * Added doxygen support
  352.  *
  353.  * Revision 6.36  2003/01/08 01:59:33  lavr
  354.  * DLL-ize CONNECT library for MSVC (add NCBI_XCONNECT_EXPORT)
  355.  *
  356.  * Revision 6.35  2002/11/01 20:10:40  lavr
  357.  * Note that FIREWALL server specs cannot have Q flag set
  358.  *
  359.  * Revision 6.34  2002/09/19 18:04:48  lavr
  360.  * Header file guard macro changed
  361.  *
  362.  * Revision 6.34  2002/09/19 18:01:24  lavr
  363.  * Header file guard macro changed; log moved to the end
  364.  *
  365.  * Revision 6.33  2002/09/17 15:39:07  lavr
  366.  * SSERV_Info::quorum moved past the reserved area
  367.  *
  368.  * Revision 6.32  2002/09/16 14:59:04  lavr
  369.  * Rename SSERV_DnsInfo to follow naming convention for other Info's
  370.  *
  371.  * Revision 6.31  2002/09/04 15:09:17  lavr
  372.  * Add quorum field to SSERV_Info::, log moved to end
  373.  *
  374.  * Revision 6.31  2002/08/16 17:52:27  lavr
  375.  * PUBSYNC, PUBSEEK* macros; SEEKOFF obsoleted; some formatting done
  376.  *
  377.  * Revision 6.30  2002/03/19 22:10:59  lavr
  378.  * Better description for flags 'P' and 'C'
  379.  *
  380.  * Revision 6.29  2002/03/11 21:51:18  lavr
  381.  * Modified server info to include MIME encoding and to prepare for
  382.  * BLAST dispatching to be phased out. Also, new DNS server type defined.
  383.  *
  384.  * Revision 6.28  2001/09/25 14:47:49  lavr
  385.  * TSERV_Flags reverted to 'int'
  386.  *
  387.  * Revision 6.27  2001/09/24 20:22:31  lavr
  388.  * TSERV_Flags changed from 'int' to 'unsigned int'
  389.  *
  390.  * Revision 6.26  2001/09/19 15:57:27  lavr
  391.  * Server descriptor flag "L=" documented more precisely
  392.  *
  393.  * Revision 6.25  2001/09/10 21:16:27  lavr
  394.  * FIREWALL server type added, documented
  395.  *
  396.  * Revision 6.24  2001/06/19 19:09:35  lavr
  397.  * Type change: size_t -> TNCBI_Size; time_t -> TNCBI_Time
  398.  *
  399.  * Revision 6.23  2001/06/12 20:45:23  lavr
  400.  * Less ambiguous comment for SSERV_Info::time
  401.  *
  402.  * Revision 6.22  2001/06/05 14:10:20  lavr
  403.  * SERV_MIME_UNDEFINED split into 2 (typed) constants:
  404.  * SERV_MIME_TYPE_UNDEFINED and SERV_MIME_SUBTYPE_UNDEFINED
  405.  *
  406.  * Revision 6.21  2001/06/04 16:59:56  lavr
  407.  * MIME type/subtype added to server descriptor
  408.  *
  409.  * Revision 6.20  2001/05/17 14:49:46  lavr
  410.  * Typos corrected
  411.  *
  412.  * Revision 6.19  2001/05/03 16:35:34  lavr
  413.  * Local bonus coefficient modified: meaning of negative value changed
  414.  *
  415.  * Revision 6.18  2001/04/24 21:24:05  lavr
  416.  * New server attributes added: locality and bonus coefficient
  417.  *
  418.  * Revision 6.17  2001/03/06 23:52:57  lavr
  419.  * SERV_ReadInfo can now consume either hostname or IP address
  420.  *
  421.  * Revision 6.16  2001/03/05 23:09:20  lavr
  422.  * SERV_WriteInfo & SERV_ReadInfo both take only one argument now
  423.  *
  424.  * Revision 6.15  2001/03/02 20:06:26  lavr
  425.  * Typos fixed
  426.  *
  427.  * Revision 6.14  2001/03/01 18:47:45  lavr
  428.  * Verbal representation of server info is wordly documented
  429.  *
  430.  * Revision 6.13  2000/12/29 17:39:42  lavr
  431.  * Pretty printed
  432.  *
  433.  * Revision 6.12  2000/12/06 22:17:02  lavr
  434.  * Binary host addresses are now explicitly stated to be in network byte
  435.  * order, whereas binary port addresses now use native (host) representation
  436.  *
  437.  * Revision 6.11  2000/10/20 17:05:48  lavr
  438.  * TSERV_Type made 'unsigned int'
  439.  *
  440.  * Revision 6.10  2000/10/05 21:25:45  lavr
  441.  * ncbiconf.h removed
  442.  *
  443.  * Revision 6.9  2000/10/05 21:10:11  lavr
  444.  * ncbiconf.h included
  445.  *
  446.  * Revision 6.8  2000/05/31 23:12:14  lavr
  447.  * First try to assemble things together to get working service mapper
  448.  *
  449.  * Revision 6.7  2000/05/23 19:02:47  lavr
  450.  * Server-info now includes rate; verbal representation changed
  451.  *
  452.  * Revision 6.6  2000/05/22 16:53:07  lavr
  453.  * Rename service_info -> server_info everywhere (including
  454.  * file names) as the latter name is more relevant
  455.  *
  456.  * Revision 6.5  2000/05/15 19:06:05  lavr
  457.  * Use home-made ANSI extensions (NCBI_***)
  458.  *
  459.  * Revision 6.4  2000/05/12 21:42:11  lavr
  460.  * SSERV_Info::  use ESERV_Type, ESERV_Flags instead of TSERV_Type, TSERV_Flags
  461.  *
  462.  * Revision 6.3  2000/05/12 18:31:48  lavr
  463.  * First working revision
  464.  *
  465.  * Revision 6.2  2000/05/09 15:31:29  lavr
  466.  * Minor changes
  467.  *
  468.  * Revision 6.1  2000/05/05 20:24:00  lavr
  469.  * Initial revision
  470.  *
  471.  * ==========================================================================
  472.  */
  473. #endif /* CONNECT___NCBI_SERVER_INFO__H */