quickjs-tart

quickjs-based runtime for wallet-core logic
Log | Files | Refs | README | LICENSE

transfer.h (5915B)


      1 #ifndef HEADER_CURL_TRANSFER_H
      2 #define HEADER_CURL_TRANSFER_H
      3 /***************************************************************************
      4  *                                  _   _ ____  _
      5  *  Project                     ___| | | |  _ \| |
      6  *                             / __| | | | |_) | |
      7  *                            | (__| |_| |  _ <| |___
      8  *                             \___|\___/|_| \_\_____|
      9  *
     10  * Copyright (C) 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.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  * SPDX-License-Identifier: curl
     24  *
     25  ***************************************************************************/
     26 
     27 #define Curl_headersep(x) ((((x)==':') || ((x)==';')))
     28 char *Curl_checkheaders(const struct Curl_easy *data,
     29                         const char *thisheader,
     30                         const size_t thislen);
     31 
     32 void Curl_init_CONNECT(struct Curl_easy *data);
     33 
     34 CURLcode Curl_pretransfer(struct Curl_easy *data);
     35 
     36 CURLcode Curl_sendrecv(struct Curl_easy *data, struct curltime *nowp);
     37 int Curl_single_getsock(struct Curl_easy *data,
     38                         struct connectdata *conn, curl_socket_t *socks);
     39 CURLcode Curl_retry_request(struct Curl_easy *data, char **url);
     40 bool Curl_meets_timecondition(struct Curl_easy *data, time_t timeofdoc);
     41 
     42 /**
     43  * Write the transfer raw response bytes, as received from the connection.
     44  * Will handle all passed bytes or return an error. By default, this will
     45  * write the bytes as BODY to the client. Protocols may provide a
     46  * "write_resp" callback in their handler to add specific treatment. E.g.
     47  * HTTP parses response headers and passes them differently to the client.
     48  * @param data     the transfer
     49  * @param buf      the raw response bytes
     50  * @param blen     the amount of bytes in `buf`
     51  * @param is_eos   TRUE iff the connection indicates this to be the last
     52  *                 bytes of the response
     53  */
     54 CURLcode Curl_xfer_write_resp(struct Curl_easy *data,
     55                               const char *buf, size_t blen,
     56                               bool is_eos);
     57 
     58 bool Curl_xfer_write_is_paused(struct Curl_easy *data);
     59 
     60 /**
     61  * Write a single "header" line from a server response.
     62  * @param hd0      the null-terminated, single header line
     63  * @param hdlen    the length of the header line
     64  * @param is_eos   TRUE iff this is the end of the response
     65  */
     66 CURLcode Curl_xfer_write_resp_hd(struct Curl_easy *data,
     67                                  const char *hd0, size_t hdlen, bool is_eos);
     68 
     69 #define CURL_XFER_NOP     (0)
     70 #define CURL_XFER_RECV    (1<<(0))
     71 #define CURL_XFER_SEND    (1<<(1))
     72 #define CURL_XFER_SENDRECV (CURL_XFER_RECV|CURL_XFER_SEND)
     73 
     74 /**
     75  * The transfer is neither receiving nor sending now.
     76  */
     77 void Curl_xfer_setup_nop(struct Curl_easy *data);
     78 
     79 /**
     80  * The transfer will use socket 1 to send/recv. `recv_size` is
     81  * the amount to receive or -1 if unknown. `getheader` indicates
     82  * response header processing is expected.
     83  */
     84 void Curl_xfer_setup1(struct Curl_easy *data,
     85                       int send_recv,
     86                       curl_off_t recv_size,
     87                       bool getheader);
     88 
     89 /**
     90  * The transfer will use socket 2 to send/recv. `recv_size` is
     91  * the amount to receive or -1 if unknown. With `shutdown` being
     92  * set, the transfer is only allowed to either send OR receive
     93  * and the socket 2 connection will be shutdown at the end of
     94  * the transfer. An unclean shutdown will fail the transfer
     95  * unless `shutdown_err_ignore` is TRUE.
     96  */
     97 void Curl_xfer_setup2(struct Curl_easy *data,
     98                       int send_recv,
     99                       curl_off_t recv_size,
    100                       bool shutdown, bool shutdown_err_ignore);
    101 
    102 /**
    103  * Multi has set transfer to DONE. Last chance to trigger
    104  * missing response things like writing an EOS to the client.
    105  */
    106 CURLcode Curl_xfer_write_done(struct Curl_easy *data, bool premature);
    107 
    108 /**
    109  * Return TRUE iff transfer has pending data to send. Checks involved
    110  * connection filters.
    111  */
    112 bool Curl_xfer_needs_flush(struct Curl_easy *data);
    113 
    114 /**
    115  * Flush any pending send data on the transfer connection.
    116  */
    117 CURLcode Curl_xfer_flush(struct Curl_easy *data);
    118 
    119 /**
    120  * Send data on the socket/connection filter designated
    121  * for transfer's outgoing data.
    122  * Will return CURLE_OK on blocking with (*pnwritten == 0).
    123  */
    124 CURLcode Curl_xfer_send(struct Curl_easy *data,
    125                         const void *buf, size_t blen, bool eos,
    126                         size_t *pnwritten);
    127 
    128 /**
    129  * Receive data on the socket/connection filter designated
    130  * for transfer's incoming data.
    131  * Will return CURLE_AGAIN on blocking with (*pnrcvd == 0).
    132  */
    133 CURLcode Curl_xfer_recv(struct Curl_easy *data,
    134                         char *buf, size_t blen,
    135                         size_t *pnrcvd);
    136 
    137 CURLcode Curl_xfer_send_close(struct Curl_easy *data);
    138 CURLcode Curl_xfer_send_shutdown(struct Curl_easy *data, bool *done);
    139 
    140 /* Return TRUE if the transfer is not done, but further progress
    141  * is blocked. For example when it is only receiving and its writer
    142  * is PAUSED. */
    143 bool Curl_xfer_is_blocked(struct Curl_easy *data);
    144 
    145 /* Query if send/recv for transfer is paused. */
    146 bool Curl_xfer_send_is_paused(struct Curl_easy *data);
    147 bool Curl_xfer_recv_is_paused(struct Curl_easy *data);
    148 
    149 /* Enable/Disable pausing of send/recv for the transfer. */
    150 CURLcode Curl_xfer_pause_send(struct Curl_easy *data, bool enable);
    151 CURLcode Curl_xfer_pause_recv(struct Curl_easy *data, bool enable);
    152 
    153 
    154 #endif /* HEADER_CURL_TRANSFER_H */