mirror of
https://github.com/moparisthebest/curl
synced 2024-12-22 08:08:50 -05:00
add CURLINFO_SCHEME, CURLINFO_PROTOCOL, and %{scheme}
Adds access to the effectively used protocol/scheme to both libcurl and curl, both in string and numeric (CURLPROTO_*) form. Note that the string form will be uppercase, as it is just the internal string. As these strings are declared internally as const, and all other strings returned by curl_easy_getinfo() are de-facto const as well, string handling in getinfo.c got const-ified. Closes #1137
This commit is contained in:
parent
54789f9444
commit
ba410f6c64
@ -2068,6 +2068,9 @@ IPv4 or IPv6 (Added in 7.29.0)
|
|||||||
.B remote_port
|
.B remote_port
|
||||||
The remote port number of the most recently done connection (Added in 7.29.0)
|
The remote port number of the most recently done connection (Added in 7.29.0)
|
||||||
.TP
|
.TP
|
||||||
|
.B scheme
|
||||||
|
The URL scheme (sometimes called protocol) that was effectively used (Added in 7.52.0)
|
||||||
|
.TP
|
||||||
.B size_download
|
.B size_download
|
||||||
The total amount of bytes that were downloaded.
|
The total amount of bytes that were downloaded.
|
||||||
.TP
|
.TP
|
||||||
|
@ -183,6 +183,12 @@ See \fICURLINFO_RTSP_SERVER_CSEQ(3)\fP
|
|||||||
.IP CURLINFO_RTSP_CSEQ_RECV
|
.IP CURLINFO_RTSP_CSEQ_RECV
|
||||||
RTSP CSeq last received.
|
RTSP CSeq last received.
|
||||||
See \fICURLINFO_RTSP_CSEQ_RECV(3)\fP
|
See \fICURLINFO_RTSP_CSEQ_RECV(3)\fP
|
||||||
|
.IP CURLINFO_PROTOCOL
|
||||||
|
The protocol used for the connection. (Added in 7.52.0)
|
||||||
|
See \fICURLINFO_PROTOCOL(3)\fP
|
||||||
|
.IP CURLINFO_SCHEME
|
||||||
|
The scheme used for the connection. (Added in 7.52.0)
|
||||||
|
See \fICURLINFO_SCHEME(3)\fP
|
||||||
.SH TIMES
|
.SH TIMES
|
||||||
.nf
|
.nf
|
||||||
An overview of the six time values available from curl_easy_getinfo()
|
An overview of the six time values available from curl_easy_getinfo()
|
||||||
|
55
docs/libcurl/opts/CURLINFO_PROTOCOL.3
Normal file
55
docs/libcurl/opts/CURLINFO_PROTOCOL.3
Normal file
@ -0,0 +1,55 @@
|
|||||||
|
.\" **************************************************************************
|
||||||
|
.\" * _ _ ____ _
|
||||||
|
.\" * Project ___| | | | _ \| |
|
||||||
|
.\" * / __| | | | |_) | |
|
||||||
|
.\" * | (__| |_| | _ <| |___
|
||||||
|
.\" * \___|\___/|_| \_\_____|
|
||||||
|
.\" *
|
||||||
|
.\" * Copyright (C) 1998 - 2016, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||||
|
.\" *
|
||||||
|
.\" * This software is licensed as described in the file COPYING, which
|
||||||
|
.\" * you should have received as part of this distribution. The terms
|
||||||
|
.\" * are also available at https://curl.haxx.se/docs/copyright.html.
|
||||||
|
.\" *
|
||||||
|
.\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell
|
||||||
|
.\" * copies of the Software, and permit persons to whom the Software is
|
||||||
|
.\" * furnished to do so, under the terms of the COPYING file.
|
||||||
|
.\" *
|
||||||
|
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
|
||||||
|
.\" * KIND, either express or implied.
|
||||||
|
.\" *
|
||||||
|
.\" **************************************************************************
|
||||||
|
.\"
|
||||||
|
.TH CURLINFO_PROTOCOL 3 "23 November 2016" "libcurl 7.52.0" "curl_easy_getinfo options"
|
||||||
|
.SH NAME
|
||||||
|
CURLINFO_PROTOCOL \- get the protocol used in the connection
|
||||||
|
.SH SYNOPSIS
|
||||||
|
#include <curl/curl.h>
|
||||||
|
|
||||||
|
CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_PROTOCOL, long *p);
|
||||||
|
.SH DESCRIPTION
|
||||||
|
Pass a pointer to a long to receive the version used in the last http connection.
|
||||||
|
The returned value will be one of the CURLPROTO_* values.
|
||||||
|
.SH PROTOCOLS
|
||||||
|
All
|
||||||
|
.SH EXAMPLE
|
||||||
|
.nf
|
||||||
|
CURL *curl = curl_easy_init();
|
||||||
|
if(curl) {
|
||||||
|
CURLcode res;
|
||||||
|
curl_easy_setopt(curl, CURLOPT_URL, "http://example.com");
|
||||||
|
res = curl_easy_perform(curl);
|
||||||
|
if(res == CURLE_OK) {
|
||||||
|
long protocol;
|
||||||
|
curl_easy_getinfo(curl, CURLINFO_PROTOCOL, &protocol);
|
||||||
|
}
|
||||||
|
curl_easy_cleanup(curl);
|
||||||
|
}
|
||||||
|
.fi
|
||||||
|
.SH AVAILABILITY
|
||||||
|
Added in 7.52.0
|
||||||
|
.SH RETURN VALUE
|
||||||
|
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
|
||||||
|
.SH "SEE ALSO"
|
||||||
|
.BR CURLINFO_RESPONSE_CODE "(3), "
|
||||||
|
.BR curl_easy_getinfo "(3), " curl_easy_setopt "(3), "
|
59
docs/libcurl/opts/CURLINFO_SCHEME.3
Normal file
59
docs/libcurl/opts/CURLINFO_SCHEME.3
Normal file
@ -0,0 +1,59 @@
|
|||||||
|
.\" **************************************************************************
|
||||||
|
.\" * _ _ ____ _
|
||||||
|
.\" * Project ___| | | | _ \| |
|
||||||
|
.\" * / __| | | | |_) | |
|
||||||
|
.\" * | (__| |_| | _ <| |___
|
||||||
|
.\" * \___|\___/|_| \_\_____|
|
||||||
|
.\" *
|
||||||
|
.\" * Copyright (C) 1998 - 2016, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||||
|
.\" *
|
||||||
|
.\" * This software is licensed as described in the file COPYING, which
|
||||||
|
.\" * you should have received as part of this distribution. The terms
|
||||||
|
.\" * are also available at https://curl.haxx.se/docs/copyright.html.
|
||||||
|
.\" *
|
||||||
|
.\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell
|
||||||
|
.\" * copies of the Software, and permit persons to whom the Software is
|
||||||
|
.\" * furnished to do so, under the terms of the COPYING file.
|
||||||
|
.\" *
|
||||||
|
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
|
||||||
|
.\" * KIND, either express or implied.
|
||||||
|
.\" *
|
||||||
|
.\" **************************************************************************
|
||||||
|
.\"
|
||||||
|
.TH CURLINFO_SCHEME 3 "23 November 2016" "libcurl 7.52.0" "curl_easy_getinfo options"
|
||||||
|
.SH NAME
|
||||||
|
CURLINFO_SCHEME \- get the URL scheme (sometimes called protocol) used in the connection
|
||||||
|
.SH SYNOPSIS
|
||||||
|
#include <curl/curl.h>
|
||||||
|
|
||||||
|
CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_SCHEME, long *p);
|
||||||
|
.SH DESCRIPTION
|
||||||
|
Pass a pointer to a char pointer to receive the pointer to a zero-terminated
|
||||||
|
string holding the URL scheme used for the most recent connection done with this
|
||||||
|
\fBcurl\fP handle.
|
||||||
|
|
||||||
|
The \fBid\fP pointer will be NULL or pointing to private read-only memory you
|
||||||
|
MUST NOT free or modify.
|
||||||
|
.SH PROTOCOLS
|
||||||
|
All
|
||||||
|
.SH EXAMPLE
|
||||||
|
.nf
|
||||||
|
CURL *curl = curl_easy_init();
|
||||||
|
if(curl) {
|
||||||
|
CURLcode res;
|
||||||
|
curl_easy_setopt(curl, CURLOPT_URL, "http://example.com");
|
||||||
|
res = curl_easy_perform(curl);
|
||||||
|
if(res == CURLE_OK) {
|
||||||
|
char * scheme;
|
||||||
|
curl_easy_getinfo(curl, CURLINFO_SCHEME, &scheme);
|
||||||
|
}
|
||||||
|
curl_easy_cleanup(curl);
|
||||||
|
}
|
||||||
|
.fi
|
||||||
|
.SH AVAILABILITY
|
||||||
|
Added in 7.52.0
|
||||||
|
.SH RETURN VALUE
|
||||||
|
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
|
||||||
|
.SH "SEE ALSO"
|
||||||
|
.BR CURLINFO_RESPONSE_CODE "(3), "
|
||||||
|
.BR curl_easy_getinfo "(3), " curl_easy_setopt "(3), "
|
@ -239,6 +239,7 @@ CURLINFO_PRETRANSFER_TIME 7.4.1
|
|||||||
CURLINFO_PRIMARY_IP 7.19.0
|
CURLINFO_PRIMARY_IP 7.19.0
|
||||||
CURLINFO_PRIMARY_PORT 7.21.0
|
CURLINFO_PRIMARY_PORT 7.21.0
|
||||||
CURLINFO_PRIVATE 7.10.3
|
CURLINFO_PRIVATE 7.10.3
|
||||||
|
CURLINFO_PROTOCOL 7.52.0
|
||||||
CURLINFO_PROXYAUTH_AVAIL 7.10.8
|
CURLINFO_PROXYAUTH_AVAIL 7.10.8
|
||||||
CURLINFO_PROXY_SSL_VERIFYRESULT 7.52.0
|
CURLINFO_PROXY_SSL_VERIFYRESULT 7.52.0
|
||||||
CURLINFO_REDIRECT_COUNT 7.9.7
|
CURLINFO_REDIRECT_COUNT 7.9.7
|
||||||
@ -250,6 +251,7 @@ CURLINFO_RTSP_CLIENT_CSEQ 7.20.0
|
|||||||
CURLINFO_RTSP_CSEQ_RECV 7.20.0
|
CURLINFO_RTSP_CSEQ_RECV 7.20.0
|
||||||
CURLINFO_RTSP_SERVER_CSEQ 7.20.0
|
CURLINFO_RTSP_SERVER_CSEQ 7.20.0
|
||||||
CURLINFO_RTSP_SESSION_ID 7.20.0
|
CURLINFO_RTSP_SESSION_ID 7.20.0
|
||||||
|
CURLINFO_SCHEME 7.52.0
|
||||||
CURLINFO_SIZE_DOWNLOAD 7.4.1
|
CURLINFO_SIZE_DOWNLOAD 7.4.1
|
||||||
CURLINFO_SIZE_UPLOAD 7.4.1
|
CURLINFO_SIZE_UPLOAD 7.4.1
|
||||||
CURLINFO_SLIST 7.12.3
|
CURLINFO_SLIST 7.12.3
|
||||||
|
@ -2277,9 +2277,11 @@ typedef enum {
|
|||||||
CURLINFO_TLS_SSL_PTR = CURLINFO_SLIST + 45,
|
CURLINFO_TLS_SSL_PTR = CURLINFO_SLIST + 45,
|
||||||
CURLINFO_HTTP_VERSION = CURLINFO_LONG + 46,
|
CURLINFO_HTTP_VERSION = CURLINFO_LONG + 46,
|
||||||
CURLINFO_PROXY_SSL_VERIFYRESULT = CURLINFO_LONG + 47,
|
CURLINFO_PROXY_SSL_VERIFYRESULT = CURLINFO_LONG + 47,
|
||||||
|
CURLINFO_PROTOCOL = CURLINFO_LONG + 48,
|
||||||
|
CURLINFO_SCHEME = CURLINFO_STRING + 49,
|
||||||
/* Fill in new entries below here! */
|
/* Fill in new entries below here! */
|
||||||
|
|
||||||
CURLINFO_LASTONE = 47
|
CURLINFO_LASTONE = 49
|
||||||
} CURLINFO;
|
} CURLINFO;
|
||||||
|
|
||||||
/* CURLINFO_RESPONSE_CODE is the new name for the option previously known as
|
/* CURLINFO_RESPONSE_CODE is the new name for the option previously known as
|
||||||
|
@ -601,6 +601,8 @@ void Curl_persistconninfo(struct connectdata *conn)
|
|||||||
{
|
{
|
||||||
memcpy(conn->data->info.conn_primary_ip, conn->primary_ip, MAX_IPADR_LEN);
|
memcpy(conn->data->info.conn_primary_ip, conn->primary_ip, MAX_IPADR_LEN);
|
||||||
memcpy(conn->data->info.conn_local_ip, conn->local_ip, MAX_IPADR_LEN);
|
memcpy(conn->data->info.conn_local_ip, conn->local_ip, MAX_IPADR_LEN);
|
||||||
|
conn->data->info.conn_scheme = conn->handler->scheme;
|
||||||
|
conn->data->info.conn_protocol = conn->handler->protocol;
|
||||||
conn->data->info.conn_primary_port = conn->primary_port;
|
conn->data->info.conn_primary_port = conn->primary_port;
|
||||||
conn->data->info.conn_local_port = conn->local_port;
|
conn->data->info.conn_local_port = conn->local_port;
|
||||||
}
|
}
|
||||||
|
@ -86,7 +86,7 @@ CURLcode Curl_initinfo(struct Curl_easy *data)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static CURLcode getinfo_char(struct Curl_easy *data, CURLINFO info,
|
static CURLcode getinfo_char(struct Curl_easy *data, CURLINFO info,
|
||||||
char **param_charp)
|
const char **param_charp)
|
||||||
{
|
{
|
||||||
switch(info) {
|
switch(info) {
|
||||||
case CURLINFO_EFFECTIVE_URL:
|
case CURLINFO_EFFECTIVE_URL:
|
||||||
@ -123,6 +123,9 @@ static CURLcode getinfo_char(struct Curl_easy *data, CURLINFO info,
|
|||||||
case CURLINFO_RTSP_SESSION_ID:
|
case CURLINFO_RTSP_SESSION_ID:
|
||||||
*param_charp = data->set.str[STRING_RTSP_SESSION_ID];
|
*param_charp = data->set.str[STRING_RTSP_SESSION_ID];
|
||||||
break;
|
break;
|
||||||
|
case CURLINFO_SCHEME:
|
||||||
|
*param_charp = data->info.conn_scheme;
|
||||||
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
return CURLE_UNKNOWN_OPTION;
|
return CURLE_UNKNOWN_OPTION;
|
||||||
@ -229,6 +232,9 @@ static CURLcode getinfo_long(struct Curl_easy *data, CURLINFO info,
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case CURLINFO_PROTOCOL:
|
||||||
|
*param_longp = data->info.conn_protocol;
|
||||||
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
return CURLE_UNKNOWN_OPTION;
|
return CURLE_UNKNOWN_OPTION;
|
||||||
@ -385,7 +391,7 @@ CURLcode Curl_getinfo(struct Curl_easy *data, CURLINFO info, ...)
|
|||||||
va_list arg;
|
va_list arg;
|
||||||
long *param_longp = NULL;
|
long *param_longp = NULL;
|
||||||
double *param_doublep = NULL;
|
double *param_doublep = NULL;
|
||||||
char **param_charp = NULL;
|
const char **param_charp = NULL;
|
||||||
struct curl_slist **param_slistp = NULL;
|
struct curl_slist **param_slistp = NULL;
|
||||||
curl_socket_t *param_socketp = NULL;
|
curl_socket_t *param_socketp = NULL;
|
||||||
int type;
|
int type;
|
||||||
@ -399,7 +405,7 @@ CURLcode Curl_getinfo(struct Curl_easy *data, CURLINFO info, ...)
|
|||||||
type = CURLINFO_TYPEMASK & (int)info;
|
type = CURLINFO_TYPEMASK & (int)info;
|
||||||
switch(type) {
|
switch(type) {
|
||||||
case CURLINFO_STRING:
|
case CURLINFO_STRING:
|
||||||
param_charp = va_arg(arg, char **);
|
param_charp = va_arg(arg, const char **);
|
||||||
if(param_charp)
|
if(param_charp)
|
||||||
result = getinfo_char(data, info, param_charp);
|
result = getinfo_char(data, info, param_charp);
|
||||||
break;
|
break;
|
||||||
|
@ -1174,6 +1174,9 @@ struct PureInfo {
|
|||||||
char conn_local_ip[MAX_IPADR_LEN];
|
char conn_local_ip[MAX_IPADR_LEN];
|
||||||
long conn_local_port;
|
long conn_local_port;
|
||||||
|
|
||||||
|
const char *conn_scheme;
|
||||||
|
unsigned int conn_protocol;
|
||||||
|
|
||||||
struct curl_certinfo certs; /* info about the certs, only populated in
|
struct curl_certinfo certs; /* info about the certs, only populated in
|
||||||
OpenSSL builds. Asked for with
|
OpenSSL builds. Asked for with
|
||||||
CURLOPT_CERTINFO / CURLINFO_CERTINFO */
|
CURLOPT_CERTINFO / CURLINFO_CERTINFO */
|
||||||
|
@ -59,6 +59,7 @@ typedef enum {
|
|||||||
VAR_LOCAL_IP,
|
VAR_LOCAL_IP,
|
||||||
VAR_LOCAL_PORT,
|
VAR_LOCAL_PORT,
|
||||||
VAR_HTTP_VERSION,
|
VAR_HTTP_VERSION,
|
||||||
|
VAR_SCHEME,
|
||||||
VAR_NUM_OF_VARS /* must be the last */
|
VAR_NUM_OF_VARS /* must be the last */
|
||||||
} replaceid;
|
} replaceid;
|
||||||
|
|
||||||
@ -99,6 +100,7 @@ static const struct variable replacements[]={
|
|||||||
{"local_ip", VAR_LOCAL_IP},
|
{"local_ip", VAR_LOCAL_IP},
|
||||||
{"local_port", VAR_LOCAL_PORT},
|
{"local_port", VAR_LOCAL_PORT},
|
||||||
{"http_version", VAR_HTTP_VERSION},
|
{"http_version", VAR_HTTP_VERSION},
|
||||||
|
{"scheme", VAR_SCHEME},
|
||||||
{NULL, VAR_NONE}
|
{NULL, VAR_NONE}
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -308,6 +310,12 @@ void ourWriteOut(CURL *curl, struct OutStruct *outs, const char *writeinfo)
|
|||||||
fprintf(stream, version);
|
fprintf(stream, version);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case VAR_SCHEME:
|
||||||
|
if(CURLE_OK ==
|
||||||
|
curl_easy_getinfo(curl, CURLINFO_SCHEME,
|
||||||
|
&stringp))
|
||||||
|
fprintf(stream, "%s", stringp);
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user