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