1
0
mirror of https://github.com/moparisthebest/curl synced 2024-12-22 08:08:50 -05:00

Giaslas Georgios introduced CURLINFO_CONTENT_TYPE

This commit is contained in:
Daniel Stenberg 2002-01-29 10:49:32 +00:00
parent c341b11aaf
commit 76c53c690c
5 changed files with 43 additions and 2 deletions

View File

@ -666,7 +666,11 @@ typedef enum {
CURLINFO_STARTTRANSFER_TIME = CURLINFO_DOUBLE + 17, CURLINFO_STARTTRANSFER_TIME = CURLINFO_DOUBLE + 17,
CURLINFO_LASTONE = 18 CURLINFO_CONTENT_TYPE = CURLINFO_STRING + 18,
/* Fill in new entries here! */
CURLINFO_LASTONE = 19
} CURLINFO; } CURLINFO;
/* unfortunately, the easy.h include file needs the options and info stuff /* unfortunately, the easy.h include file needs the options and info stuff

View File

@ -48,9 +48,13 @@ CURLcode Curl_initinfo(struct SessionHandle *data)
info->httpcode = 0; info->httpcode = 0;
info->httpversion=0; info->httpversion=0;
info->filetime=-1; /* -1 is an illegal time and thus means unknown */ info->filetime=-1; /* -1 is an illegal time and thus means unknown */
if (info->contenttype)
free(info->contenttype);
info->contenttype = NULL;
info->header_size = 0; info->header_size = 0;
info->request_size = 0; info->request_size = 0;
return CURLE_OK; return CURLE_OK;
} }
@ -134,6 +138,9 @@ CURLcode Curl_getinfo(struct SessionHandle *data, CURLINFO info, ...)
case CURLINFO_CONTENT_LENGTH_UPLOAD: case CURLINFO_CONTENT_LENGTH_UPLOAD:
*param_doublep = data->progress.size_ul; *param_doublep = data->progress.size_ul;
break; break;
case CURLINFO_CONTENT_TYPE:
*param_charp = data->info.contenttype;
break;
default: default:
return CURLE_BAD_FUNCTION_ARGUMENT; return CURLE_BAD_FUNCTION_ARGUMENT;
} }

View File

@ -466,6 +466,31 @@ CURLcode Curl_readwrite(struct connectdata *conn,
conn->size = k->contentlength; conn->size = k->contentlength;
Curl_pgrsSetDownloadSize(data, k->contentlength); Curl_pgrsSetDownloadSize(data, k->contentlength);
} }
/* check for Content-Type: header lines to get the mime-type */
else if (strnequal("Content-Type:", k->p, 13)) {
char *start;
char *end;
int len;
/* Find the first non-space letter */
for(start=k->p+14;
*start && isspace((int)*start);
start++);
/* count all non-space letters following */
for(end=start+1, len=0;
*end && !isspace((int)*end);
end++, len++);
/* allocate memory of a cloned copy */
data->info.contenttype = malloc(len + 1);
if (NULL == data->info.contenttype)
return CURLE_OUT_OF_MEMORY;
/* copy the content-type string */
memcpy(data->info.contenttype, start, len);
data->info.contenttype[len] = 0; /* zero terminate */
}
else if((k->httpversion == 10) && else if((k->httpversion == 10) &&
conn->bits.httpproxy && conn->bits.httpproxy &&
compareheader(k->p, "Proxy-Connection:", "keep-alive")) { compareheader(k->p, "Proxy-Connection:", "keep-alive")) {

View File

@ -191,6 +191,9 @@ CURLcode Curl_close(struct SessionHandle *data)
/* free the connection cache */ /* free the connection cache */
free(data->state.connects); free(data->state.connects);
if(data->info.contenttype)
free(data->info.contenttype);
free(data); free(data);
return CURLE_OK; return CURLE_OK;
} }

View File

@ -432,6 +432,8 @@ struct PureInfo {
the time was unretrievable */ the time was unretrievable */
long header_size; /* size of read header(s) in bytes */ long header_size; /* size of read header(s) in bytes */
long request_size; /* the amount of bytes sent in the request(s) */ long request_size; /* the amount of bytes sent in the request(s) */
char *contenttype; /* the content type of the object */
}; };