Annotation of embedaddon/curl/lib/pingpong.h, revision 1.1

1.1     ! misho       1: #ifndef HEADER_CURL_PINGPONG_H
        !             2: #define HEADER_CURL_PINGPONG_H
        !             3: /***************************************************************************
        !             4:  *                                  _   _ ____  _
        !             5:  *  Project                     ___| | | |  _ \| |
        !             6:  *                             / __| | | | |_) | |
        !             7:  *                            | (__| |_| |  _ <| |___
        !             8:  *                             \___|\___/|_| \_\_____|
        !             9:  *
        !            10:  * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
        !            11:  *
        !            12:  * This software is licensed as described in the file COPYING, which
        !            13:  * you should have received as part of this distribution. The terms
        !            14:  * are also available at https://curl.haxx.se/docs/copyright.html.
        !            15:  *
        !            16:  * You may opt to use, copy, modify, merge, publish, distribute and/or sell
        !            17:  * copies of the Software, and permit persons to whom the Software is
        !            18:  * furnished to do so, under the terms of the COPYING file.
        !            19:  *
        !            20:  * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
        !            21:  * KIND, either express or implied.
        !            22:  *
        !            23:  ***************************************************************************/
        !            24: 
        !            25: #include "curl_setup.h"
        !            26: 
        !            27: #if !defined(CURL_DISABLE_IMAP) || !defined(CURL_DISABLE_FTP) || \
        !            28:   !defined(CURL_DISABLE_POP3) || !defined(CURL_DISABLE_SMTP)
        !            29: #define USE_PINGPONG
        !            30: #endif
        !            31: 
        !            32: /* forward-declaration, this is defined in urldata.h */
        !            33: struct connectdata;
        !            34: 
        !            35: typedef enum {
        !            36:   FTPTRANSFER_BODY, /* yes do transfer a body */
        !            37:   FTPTRANSFER_INFO, /* do still go through to get info/headers */
        !            38:   FTPTRANSFER_NONE, /* don't get anything and don't get info */
        !            39:   FTPTRANSFER_LAST  /* end of list marker, never used */
        !            40: } curl_pp_transfer;
        !            41: 
        !            42: /*
        !            43:  * 'pingpong' is the generic struct used for protocols doing server<->client
        !            44:  * conversations in a back-and-forth style such as FTP, IMAP, POP3, SMTP etc.
        !            45:  *
        !            46:  * It holds response cache and non-blocking sending data.
        !            47:  */
        !            48: struct pingpong {
        !            49:   char *cache;     /* data cache between getresponse()-calls */
        !            50:   size_t cache_size;  /* size of cache in bytes */
        !            51:   size_t nread_resp;  /* number of bytes currently read of a server response */
        !            52:   char *linestart_resp; /* line start pointer for the server response
        !            53:                            reader function */
        !            54:   bool pending_resp;  /* set TRUE when a server response is pending or in
        !            55:                          progress, and is cleared once the last response is
        !            56:                          read */
        !            57:   char *sendthis; /* allocated pointer to a buffer that is to be sent to the
        !            58:                      server */
        !            59:   size_t sendleft; /* number of bytes left to send from the sendthis buffer */
        !            60:   size_t sendsize; /* total size of the sendthis buffer */
        !            61:   struct curltime response; /* set to Curl_now() when a command has been sent
        !            62:                                off, used to time-out response reading */
        !            63:   long response_time; /* When no timeout is given, this is the amount of
        !            64:                          milliseconds we await for a server response. */
        !            65: 
        !            66:   struct connectdata *conn; /* points to the connectdata struct that this
        !            67:                                belongs to */
        !            68: 
        !            69:   /* Function pointers the protocols MUST implement and provide for the
        !            70:      pingpong layer to function */
        !            71: 
        !            72:   CURLcode (*statemach_act)(struct connectdata *conn);
        !            73: 
        !            74:   bool (*endofresp)(struct connectdata *conn, char *ptr, size_t len,
        !            75:                     int *code);
        !            76: };
        !            77: 
        !            78: /*
        !            79:  * Curl_pp_statemach()
        !            80:  *
        !            81:  * called repeatedly until done. Set 'wait' to make it wait a while on the
        !            82:  * socket if there's no traffic.
        !            83:  */
        !            84: CURLcode Curl_pp_statemach(struct pingpong *pp, bool block,
        !            85:                            bool disconnecting);
        !            86: 
        !            87: /* initialize stuff to prepare for reading a fresh new response */
        !            88: void Curl_pp_init(struct pingpong *pp);
        !            89: 
        !            90: /* Returns timeout in ms. 0 or negative number means the timeout has already
        !            91:    triggered */
        !            92: time_t Curl_pp_state_timeout(struct pingpong *pp, bool disconnecting);
        !            93: 
        !            94: 
        !            95: /***********************************************************************
        !            96:  *
        !            97:  * Curl_pp_sendf()
        !            98:  *
        !            99:  * Send the formatted string as a command to a pingpong server. Note that
        !           100:  * the string should not have any CRLF appended, as this function will
        !           101:  * append the necessary things itself.
        !           102:  *
        !           103:  * made to never block
        !           104:  */
        !           105: CURLcode Curl_pp_sendf(struct pingpong *pp,
        !           106:                        const char *fmt, ...);
        !           107: 
        !           108: /***********************************************************************
        !           109:  *
        !           110:  * Curl_pp_vsendf()
        !           111:  *
        !           112:  * Send the formatted string as a command to a pingpong server. Note that
        !           113:  * the string should not have any CRLF appended, as this function will
        !           114:  * append the necessary things itself.
        !           115:  *
        !           116:  * made to never block
        !           117:  */
        !           118: CURLcode Curl_pp_vsendf(struct pingpong *pp,
        !           119:                         const char *fmt,
        !           120:                         va_list args);
        !           121: 
        !           122: /*
        !           123:  * Curl_pp_readresp()
        !           124:  *
        !           125:  * Reads a piece of a server response.
        !           126:  */
        !           127: CURLcode Curl_pp_readresp(curl_socket_t sockfd,
        !           128:                           struct pingpong *pp,
        !           129:                           int *code, /* return the server code if done */
        !           130:                           size_t *size); /* size of the response */
        !           131: 
        !           132: 
        !           133: CURLcode Curl_pp_flushsend(struct pingpong *pp);
        !           134: 
        !           135: /* call this when a pingpong connection is disconnected */
        !           136: CURLcode Curl_pp_disconnect(struct pingpong *pp);
        !           137: 
        !           138: int Curl_pp_getsock(struct pingpong *pp, curl_socket_t *socks);
        !           139: 
        !           140: 
        !           141: /***********************************************************************
        !           142:  *
        !           143:  * Curl_pp_moredata()
        !           144:  *
        !           145:  * Returns whether there are still more data in the cache and so a call
        !           146:  * to Curl_pp_readresp() will not block.
        !           147:  */
        !           148: bool Curl_pp_moredata(struct pingpong *pp);
        !           149: 
        !           150: #endif /* HEADER_CURL_PINGPONG_H */

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>