1 /***************************************************************************
3 * Project ___| | | | _ \| |
5 * | (__| |_| | _ <| |___
6 * \___|\___/|_| \_\_____|
8 * Copyright (C) 1998 - 2003, Daniel Stenberg, <daniel@haxx.se>, et al.
10 * This software is licensed as described in the file COPYING, which
11 * you should have received as part of this distribution. The terms
12 * are also available at http://curl.haxx.se/docs/copyright.html.
14 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
15 * copies of the Software, and permit persons to whom the Software is
16 * furnished to do so, under the terms of the COPYING file.
18 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
19 * KIND, either express or implied.
22 ***************************************************************************/
26 #include <curl/curl.h>
38 /* Make this the last #include */
46 * This is supposed to be called in the beginning of a permform() session
47 * and should reset all session-info variables
49 CURLcode Curl_initinfo(struct SessionHandle *data)
51 struct Progress *pro = &data->progress;
52 struct PureInfo *info =&data->info;
56 pro->t_pretransfer = 0;
57 pro->t_starttransfer = 0;
63 info->filetime=-1; /* -1 is an illegal time and thus means unknown */
65 if (info->contenttype)
66 free(info->contenttype);
67 info->contenttype = NULL;
69 info->header_size = 0;
70 info->request_size = 0;
74 CURLcode Curl_getinfo(struct SessionHandle *data, CURLINFO info, ...)
77 long *param_longp=NULL;
78 double *param_doublep=NULL;
79 char **param_charp=NULL;
82 switch(info&CURLINFO_TYPEMASK) {
84 return CURLE_BAD_FUNCTION_ARGUMENT;
86 param_charp = va_arg(arg, char **);
87 if(NULL == param_charp)
88 return CURLE_BAD_FUNCTION_ARGUMENT;
91 param_longp = va_arg(arg, long *);
92 if(NULL == param_longp)
93 return CURLE_BAD_FUNCTION_ARGUMENT;
96 param_doublep = va_arg(arg, double *);
97 if(NULL == param_doublep)
98 return CURLE_BAD_FUNCTION_ARGUMENT;
103 case CURLINFO_EFFECTIVE_URL:
104 *param_charp = data->change.url?data->change.url:(char *)"";
106 case CURLINFO_HTTP_CODE:
107 *param_longp = data->info.httpcode;
109 case CURLINFO_FILETIME:
110 *param_longp = data->info.filetime;
112 case CURLINFO_HEADER_SIZE:
113 *param_longp = data->info.header_size;
115 case CURLINFO_REQUEST_SIZE:
116 *param_longp = data->info.request_size;
118 case CURLINFO_TOTAL_TIME:
119 *param_doublep = data->progress.timespent;
121 case CURLINFO_NAMELOOKUP_TIME:
122 *param_doublep = data->progress.t_nslookup;
124 case CURLINFO_CONNECT_TIME:
125 *param_doublep = data->progress.t_connect;
127 case CURLINFO_PRETRANSFER_TIME:
128 *param_doublep = data->progress.t_pretransfer;
130 case CURLINFO_STARTTRANSFER_TIME:
131 *param_doublep = data->progress.t_starttransfer;
133 case CURLINFO_SIZE_UPLOAD:
134 *param_doublep = data->progress.uploaded;
136 case CURLINFO_SIZE_DOWNLOAD:
137 *param_doublep = data->progress.downloaded;
139 case CURLINFO_SPEED_DOWNLOAD:
140 *param_doublep = data->progress.dlspeed;
142 case CURLINFO_SPEED_UPLOAD:
143 *param_doublep = data->progress.ulspeed;
145 case CURLINFO_SSL_VERIFYRESULT:
146 *param_longp = data->set.ssl.certverifyresult;
148 case CURLINFO_CONTENT_LENGTH_DOWNLOAD:
149 *param_doublep = data->progress.size_dl;
151 case CURLINFO_CONTENT_LENGTH_UPLOAD:
152 *param_doublep = data->progress.size_ul;
154 case CURLINFO_REDIRECT_TIME:
155 *param_doublep = data->progress.t_redirect;
157 case CURLINFO_REDIRECT_COUNT:
158 *param_longp = data->set.followlocation;
160 case CURLINFO_CONTENT_TYPE:
161 *param_charp = data->info.contenttype;
163 case CURLINFO_PRIVATE:
164 *param_charp = data->set.private;
167 return CURLE_BAD_FUNCTION_ARGUMENT;