⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ncbi_http_connector.h

📁 ncbi源码
💻 H
字号:
/* * =========================================================================== * PRODUCTION $Log: ncbi_http_connector.h,v $ * PRODUCTION Revision 1000.0  2003/10/29 16:31:14  gouriano * PRODUCTION PRODUCTION: IMPORTED [ORIGINAL] Dev-tree R6.13 * PRODUCTION * =========================================================================== */#ifndef CONNECT___HTTP_CONNECTOR__H#define CONNECT___HTTP_CONNECTOR__H/*  $Id: ncbi_http_connector.h,v 1000.0 2003/10/29 16:31:14 gouriano Exp $ * =========================================================================== * *                            PUBLIC DOMAIN NOTICE *               National Center for Biotechnology Information * *  This software/database is a "United States Government Work" under the *  terms of the United States Copyright Act.  It was written as part of *  the author's official duties as a United States Government employee and *  thus cannot be copyrighted.  This software/database is freely available *  to the public for use. The National Library of Medicine and the U.S. *  Government have not placed any restriction on its use or reproduction. * *  Although all reasonable efforts have been taken to ensure the accuracy *  and reliability of the software and data, the NLM and the U.S. *  Government do not and cannot warrant the performance or results that *  may be obtained by using this software or data. The NLM and the U.S. *  Government disclaim all warranties, express or implied, including *  warranties of performance, merchantability or fitness for any particular *  purpose. * *  Please cite the author in any work or product based on this material. * * =========================================================================== * * Author:  Denis Vakatov * * File Description: *   Implement CONNECTOR for the HTTP-based network connection * *   See in "ncbi_connector.h" for the detailed specification of the underlying *   connector("CONNECTOR", "SConnectorTag") methods and structures. * */#include <connect/ncbi_connutil.h>/** @addtogroup Connectors * * @{ */#ifdef __cplusplusextern "C" {#endif/* Create new CONNECTOR structure to hit the specified URL using HTTP * with either POST or GET method. * Use the configuration values recorded in "net_info". If "net_info" is NULL, * then use the default info (created by "ConnNetInfo_Create(0)"). * * In order to workaround some HTTP communication features, this code does: *  1) Accumulate all output data in an internal memory buffer until the *     first "Read" (or "Peek", or "Close", or "Wait" on read) is attempted. *  2) On the first "Read" (or "Peek", or "Close", or "Wait" on read), compose *     and send the whole HTTP request as: *        {POST|GET} <info->path>?<info->args> HTTP/1.0\r\n *        <user_header\r\n> *        Content-Length: <accumulated_data_length>\r\n *        \r\n *        <accumulated_data> *     NOTE: *       if <user->header> is neither a NULL pointer nor an empty string, then: *       - it must NOT contain "empty lines":  '\r\n\r\n'; *       - it must be terminated by a single '\r\n'; *       - it gets inserted to the HTTP header "as is", without any *         automatic checking or encoding. *     After the request has been sent, reply data from the peer *     CGI program are then can be actually read out. *  4) On any "Write" operation. which follows data reading, the connection *     to the peer CGI program is forcedly closed (the peer CGI process will *     presumably die if has not done yet so), and data to be written are *     again are stored in the buffer until next "Read" etc, see item 1). * *  *) If "fHCC_AutoReconnect" is set in "flags", then the connector makes *     an automatic reconnect to the same CGI program with just the *     same parameters, and micro-session steps (1,2,3) are repeated with *     another instance of the CGI program. * *     If "fHCC_AutoReconnect" is not set then only one *     "Write ... Write Read ... Read" micro-session is allowed, any *     following "Write" attempt fails with error status "eIO_Closed". * *  Other flags: * *  fHCC_SureFlush -- *       make the connector to send at least the HTTP header on "CLOSE" and *       re-"CONNECT", even if no data was written *  fHCC_KeepHeader -- *       do not strip HTTP header (i.e. everything up to the first "\r\n\r\n", *       including the "\r\n\r\n") from the CGI script's response *  fHCC_UrlDecodeInput -- *       strip the HTTP header from the input data;  assume the input *       data are single-part, URL-encoded;  perform the URL-decoding on read *       NOTE:  this flag disables the "fHCC_KeepHeader" flag *  fHCC_DropUnread -- *       do not collect incoming data in "Read" mode before switching into *       "Write" mode for storing output data in buffer; by default all *       data sent by the CGI program are stored even if not all requested *       before "Write" following "Read" was issued (stream emulation) *  fHCC_NoUpread -- *       do not do internal reading into temporary buffer while sending *       data to CGI program; by default any send operation tries to *       extract data(if any) coming back from the CGI program in order to *       prevent connection blocking * * NOTE: the URL encoding/decoding (in the "fHCC_Url_*" cases and "info->args") *       is performed by URL_Encode() and URL_Decode() -- "ncbi_connutil.[ch]". */typedef enum {    fHCC_AutoReconnect    = 0x1,  /* see (*) above                           */    fHCC_SureFlush        = 0x2,  /* always send HTTP request on CLOSE/RECONN*/    fHCC_KeepHeader       = 0x4,  /* dont strip HTTP header from CGI response*/    fHCC_UrlDecodeInput   = 0x8,  /* strip HTTP header, URL-decode content   */    fHCC_UrlEncodeOutput  = 0x10, /* URL-encode all output data              */    fHCC_UrlCodec         = 0x18, /* fHCC_UrlDecodeInput | ...EncodeOutput   */    fHCC_UrlEncodeArgs    = 0x20, /* URL-encode "info->args"                 */    fHCC_DropUnread       = 0x40, /* each microsession drops yet unread data */    fHCC_NoUpread         = 0x80  /* do not use SOCK_ReadWhileWrite() at all */} EHCC_Flags;typedef int THCC_Flags;  /* binary OR of "EHttpCreateConnectorFlags"         */extern NCBI_XCONNECT_EXPORT CONNECTOR HTTP_CreateConnector(const SConnNetInfo* net_info, const char*         user_header, THCC_Flags          flags );/* An extended version of URL_CreateConnector() to change the URL of the * server CGI "on-the-fly": *  -- "parse_http_hdr()" is called each time the HTTP header received *      from HTTP server and only if fHCC_KeepHeader is NOT set; false return *      value is equivalent of having an error from the HTTP server itself. *  -- "adjust_net_info()" is invoked each time before starting a *      new "HTTP micro-session" making a hit if the prior hit has failed; *      it is passed "net_info" stored in the connector, and the number of *      previously unsuccessful attempts since the connection was opened; *      false return value terminates retry attempts. *  -- "adjust_cleanup()" is called when the connector is being destroyed. */typedef int/*bool*/ (*FHttpParseHTTPHeader)(const char* http_header,           /* HTTP header to parse, '\0'-terminated */ void*       adjust_data,           /* supplemental user data                */ int/*bool*/ server_error           /* true if HTTP server reported an error */ );typedef int/*bool*/ (*FHttpAdjustNetInfo)(SConnNetInfo* net_info,            /* net_info to adjust (in place)         */ void*         adjust_data,         /* supplemental user data                */ unsigned int  failure_count        /* how many failures since open          */ );typedef void (*FHttpAdjustCleanup)(void* adjust_data                  /* supplemental user data for cleanup    */ );extern NCBI_XCONNECT_EXPORT CONNECTOR HTTP_CreateConnectorEx(const SConnNetInfo*  net_info, THCC_Flags           flags, FHttpParseHTTPHeader parse_http_hdr, /* may be NULL, then no addtl. parsing */ FHttpAdjustNetInfo   adjust_net_info,/* may be NULL, then no adjustments    */ void*                adjust_data,    /* for "adjust_info" & "adjust_cleanup"*/ FHttpAdjustCleanup   adjust_cleanup  /* may be NULL                         */);#ifdef __cplusplus}  /* extern "C" */#endif/* @} *//* * -------------------------------------------------------------------------- * $Log: ncbi_http_connector.h,v $ * Revision 1000.0  2003/10/29 16:31:14  gouriano * PRODUCTION: IMPORTED [ORIGINAL] Dev-tree R6.13 * * Revision 6.13  2003/05/29 20:13:15  lavr * -#include <connect/ncbi_connector.h> * * Revision 6.12  2003/04/09 19:05:44  siyan * Added doxygen support * * Revision 6.11  2003/01/08 01:59:32  lavr * DLL-ize CONNECT library for MSVC (add NCBI_XCONNECT_EXPORT) * * Revision 6.10  2002/09/19 18:06:39  lavr * Additional blank line inserted after inclusion of headers * * Revision 6.9  2002/09/06 15:41:13  lavr * Log moved to end * * Revision 6.8  2001/09/28 20:46:13  lavr * Comments revised; parameter names adjusted * * Revision 6.7  2001/09/10 21:15:48  lavr * Readability issue: FParseHTTPHdr -> FParseHTTPHeader * * Revision 6.6  2001/05/23 21:52:00  lavr * +fHCC_NoUpread * * Revision 6.5  2001/01/25 16:53:22  lavr * New flag for HTTP_CreateConnectorEx: fHCC_DropUnread * * Revision 6.4  2000/12/29 17:41:44  lavr * Pretty printed; HTTP_CreateConnectorEx constructor interface changed * * Revision 6.3  2000/10/03 21:20:34  lavr * Request method changed from POST to {GET|POST} * * Revision 6.2  2000/09/26 22:02:55  lavr * HTTP request method added * * Revision 6.1  2000/04/21 19:40:58  vakatov * Initial revision * * ========================================================================== */#endif /* CONNECT___HTTP_CONNECTOR__H */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -