Home | History | Annotate | Download | only in src
      1 #ifndef HEADER_CURL_TOOL_SDECLS_H
      2 #define HEADER_CURL_TOOL_SDECLS_H
      3 /***************************************************************************
      4  *                                  _   _ ____  _
      5  *  Project                     ___| | | |  _ \| |
      6  *                             / __| | | | |_) | |
      7  *                            | (__| |_| |  _ <| |___
      8  *                             \___|\___/|_| \_\_____|
      9  *
     10  * Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel (at) 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 #include "tool_setup.h"
     25 #ifdef USE_METALINK
     26 #  include <metalink/metalink.h>
     27 #endif /* USE_METALINK */
     28 
     29 /*
     30  * OutStruct variables keep track of information relative to curl's
     31  * output writing, which may take place to a standard stream or a file.
     32  *
     33  * 'filename' member is either a pointer to a file name string or NULL
     34  * when dealing with a standard stream.
     35  *
     36  * 'alloc_filename' member is TRUE when string pointed by 'filename' has been
     37  * dynamically allocated and 'belongs' to this OutStruct, otherwise FALSE.
     38  *
     39  * 'is_cd_filename' member is TRUE when string pointed by 'filename' has been
     40  * set using a server-specified Content-Disposition filename, otherwise FALSE.
     41  *
     42  * 's_isreg' member is TRUE when output goes to a regular file, this also
     43  * implies that output is 'seekable' and 'appendable' and also that member
     44  * 'filename' points to file name's string. For any standard stream member
     45  * 's_isreg' will be FALSE.
     46  *
     47  * 'fopened' member is TRUE when output goes to a regular file and it
     48  * has been fopen'ed, requiring it to be closed later on. In any other
     49  * case this is FALSE.
     50  *
     51  * 'stream' member is a pointer to a stream controlling object as returned
     52  * from a 'fopen' call or a standard stream.
     53  *
     54  * 'config' member is a pointer to associated 'OperationConfig' struct.
     55  *
     56  * 'bytes' member represents amount written so far.
     57  *
     58  * 'init' member holds original file size or offset at which truncation is
     59  * taking place. Always zero unless appending to a non-empty regular file.
     60  *
     61  * 'metalink_parser' member is a pointer to Metalink XML parser
     62  * context.
     63  */
     64 
     65 struct OutStruct {
     66   char *filename;
     67   bool alloc_filename;
     68   bool is_cd_filename;
     69   bool s_isreg;
     70   bool fopened;
     71   FILE *stream;
     72   struct OperationConfig *config;
     73   curl_off_t bytes;
     74   curl_off_t init;
     75 #ifdef USE_METALINK
     76   metalink_parser_context_t *metalink_parser;
     77 #endif /* USE_METALINK */
     78 };
     79 
     80 
     81 /*
     82  * InStruct variables keep track of information relative to curl's
     83  * input reading, which may take place from stdin or from some file.
     84  *
     85  * 'fd' member is either 'stdin' file descriptor number STDIN_FILENO
     86  * or a file descriptor as returned from an 'open' call for some file.
     87  *
     88  * 'config' member is a pointer to associated 'OperationConfig' struct.
     89  */
     90 
     91 struct InStruct {
     92   int fd;
     93   struct OperationConfig *config;
     94 };
     95 
     96 
     97 /*
     98  * A linked list of these 'getout' nodes contain URL's to fetch,
     99  * as well as information relative to where URL contents should
    100  * be stored or which file should be uploaded.
    101  */
    102 
    103 struct getout {
    104   struct getout *next;      /* next one */
    105   char          *url;       /* the URL we deal with */
    106   char          *outfile;   /* where to store the output */
    107   char          *infile;    /* file to upload, if GETOUT_UPLOAD is set */
    108   int            flags;     /* options - composed of GETOUT_* bits */
    109 };
    110 
    111 #define GETOUT_OUTFILE    (1<<0)  /* set when outfile is deemed done */
    112 #define GETOUT_URL        (1<<1)  /* set when URL is deemed done */
    113 #define GETOUT_USEREMOTE  (1<<2)  /* use remote file name locally */
    114 #define GETOUT_UPLOAD     (1<<3)  /* if set, -T has been used */
    115 #define GETOUT_NOUPLOAD   (1<<4)  /* if set, -T "" has been used */
    116 #define GETOUT_METALINK   (1<<5)  /* set when Metalink download */
    117 
    118 /*
    119  * 'trace' enumeration represents curl's output look'n feel possibilities.
    120  */
    121 
    122 typedef enum {
    123   TRACE_NONE,  /* no trace/verbose output at all */
    124   TRACE_BIN,   /* tcpdump inspired look */
    125   TRACE_ASCII, /* like *BIN but without the hex output */
    126   TRACE_PLAIN  /* -v/--verbose type */
    127 } trace;
    128 
    129 
    130 /*
    131  * 'HttpReq' enumeration represents HTTP request types.
    132  */
    133 
    134 typedef enum {
    135   HTTPREQ_UNSPEC,  /* first in list */
    136   HTTPREQ_GET,
    137   HTTPREQ_HEAD,
    138   HTTPREQ_MIMEPOST,
    139   HTTPREQ_SIMPLEPOST
    140 } HttpReq;
    141 
    142 
    143 /*
    144  * Complete struct declarations which have OperationConfig struct members,
    145  * just in case this header is directly included in some source file.
    146  */
    147 
    148 #include "tool_cfgable.h"
    149 
    150 #endif /* HEADER_CURL_TOOL_SDECLS_H */
    151 
    152