1 /***************************************************************************
3 * Project ___| | | | _ \| |
5 * | (__| |_| | _ <| |___
6 * \___|\___/|_| \_\_____|
8 * Copyright (C) 1998 - 2006, 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 */
42 * This is supposed to be called in the beginning of a perform() session
43 * and should reset all session-info variables
45 CURLcode Curl_initinfo(struct SessionHandle *data)
47 struct Progress *pro = &data->progress;
48 struct PureInfo *info =&data->info;
52 pro->t_pretransfer = 0;
53 pro->t_starttransfer = 0;
59 info->filetime=-1; /* -1 is an illegal time and thus means unknown */
61 if (info->contenttype)
62 free(info->contenttype);
63 info->contenttype = NULL;
65 info->header_size = 0;
66 info->request_size = 0;
67 info->numconnects = 0;
71 CURLcode Curl_getinfo(struct SessionHandle *data, CURLINFO info, ...)
74 long *param_longp=NULL;
75 double *param_doublep=NULL;
76 char **param_charp=NULL;
77 struct curl_slist **param_slistp=NULL;
80 switch(info&CURLINFO_TYPEMASK) {
82 return CURLE_BAD_FUNCTION_ARGUMENT;
84 param_charp = va_arg(arg, char **);
85 if(NULL == param_charp)
86 return CURLE_BAD_FUNCTION_ARGUMENT;
89 param_longp = va_arg(arg, long *);
90 if(NULL == param_longp)
91 return CURLE_BAD_FUNCTION_ARGUMENT;
94 param_doublep = va_arg(arg, double *);
95 if(NULL == param_doublep)
96 return CURLE_BAD_FUNCTION_ARGUMENT;
99 param_slistp = va_arg(arg, struct curl_slist **);
100 if(NULL == param_slistp)
101 return CURLE_BAD_FUNCTION_ARGUMENT;
106 case CURLINFO_EFFECTIVE_URL:
107 *param_charp = data->change.url?data->change.url:(char *)"";
109 case CURLINFO_RESPONSE_CODE:
110 *param_longp = data->info.httpcode;
112 case CURLINFO_HTTP_CONNECTCODE:
113 *param_longp = data->info.httpproxycode;
115 case CURLINFO_FILETIME:
116 *param_longp = data->info.filetime;
118 case CURLINFO_HEADER_SIZE:
119 *param_longp = data->info.header_size;
121 case CURLINFO_REQUEST_SIZE:
122 *param_longp = data->info.request_size;
124 case CURLINFO_TOTAL_TIME:
125 *param_doublep = data->progress.timespent;
127 case CURLINFO_NAMELOOKUP_TIME:
128 *param_doublep = data->progress.t_nslookup;
130 case CURLINFO_CONNECT_TIME:
131 *param_doublep = data->progress.t_connect;
133 case CURLINFO_PRETRANSFER_TIME:
134 *param_doublep = data->progress.t_pretransfer;
136 case CURLINFO_STARTTRANSFER_TIME:
137 *param_doublep = data->progress.t_starttransfer;
139 case CURLINFO_SIZE_UPLOAD:
140 *param_doublep = (double)data->progress.uploaded;
142 case CURLINFO_SIZE_DOWNLOAD:
143 *param_doublep = (double)data->progress.downloaded;
145 case CURLINFO_SPEED_DOWNLOAD:
146 *param_doublep = (double)data->progress.dlspeed;
148 case CURLINFO_SPEED_UPLOAD:
149 *param_doublep = (double)data->progress.ulspeed;
151 case CURLINFO_SSL_VERIFYRESULT:
152 *param_longp = data->set.ssl.certverifyresult;
154 case CURLINFO_CONTENT_LENGTH_DOWNLOAD:
155 *param_doublep = (double)data->progress.size_dl;
157 case CURLINFO_CONTENT_LENGTH_UPLOAD:
158 *param_doublep = (double)data->progress.size_ul;
160 case CURLINFO_REDIRECT_TIME:
161 *param_doublep = data->progress.t_redirect;
163 case CURLINFO_REDIRECT_COUNT:
164 *param_longp = data->set.followlocation;
166 case CURLINFO_CONTENT_TYPE:
167 *param_charp = data->info.contenttype;
169 case CURLINFO_PRIVATE:
170 *param_charp = data->set.private_data;
172 case CURLINFO_HTTPAUTH_AVAIL:
173 *param_longp = data->info.httpauthavail;
175 case CURLINFO_PROXYAUTH_AVAIL:
176 *param_longp = data->info.proxyauthavail;
178 case CURLINFO_OS_ERRNO:
179 *param_longp = data->state.os_errno;
181 case CURLINFO_NUM_CONNECTS:
182 *param_longp = data->info.numconnects;
184 case CURLINFO_SSL_ENGINES:
185 *param_slistp = Curl_ssl_engines_list(data);
187 case CURLINFO_COOKIELIST:
188 *param_slistp = Curl_cookie_list(data);
190 case CURLINFO_LASTSOCKET:
191 if((data->state.lastconnect != -1) &&
192 (data->state.connects[data->state.lastconnect] != NULL))
193 *param_longp = data->state.connects[data->state.lastconnect]->
199 return CURLE_BAD_FUNCTION_ARGUMENT;