mirror of
https://github.com/moparisthebest/curl
synced 2024-12-21 23:58:49 -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
|
||||
The remote port number of the most recently done connection (Added in 7.29.0)
|
||||
.TP
|
||||
.B scheme
|
||||
The URL scheme (sometimes called protocol) that was effectively used (Added in 7.52.0)
|
||||
.TP
|
||||
.B size_download
|
||||
The total amount of bytes that were downloaded.
|
||||
.TP
|
||||
|
@ -183,6 +183,12 @@ See \fICURLINFO_RTSP_SERVER_CSEQ(3)\fP
|
||||
.IP CURLINFO_RTSP_CSEQ_RECV
|
||||
RTSP CSeq last received.
|
||||
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
|
||||
.nf
|
||||
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_PORT 7.21.0
|
||||
CURLINFO_PRIVATE 7.10.3
|
||||
CURLINFO_PROTOCOL 7.52.0
|
||||
CURLINFO_PROXYAUTH_AVAIL 7.10.8
|
||||
CURLINFO_PROXY_SSL_VERIFYRESULT 7.52.0
|
||||
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_SERVER_CSEQ 7.20.0
|
||||
CURLINFO_RTSP_SESSION_ID 7.20.0
|
||||
CURLINFO_SCHEME 7.52.0
|
||||
CURLINFO_SIZE_DOWNLOAD 7.4.1
|
||||
CURLINFO_SIZE_UPLOAD 7.4.1
|
||||
CURLINFO_SLIST 7.12.3
|
||||
|
@ -2277,9 +2277,11 @@ typedef enum {
|
||||
CURLINFO_TLS_SSL_PTR = CURLINFO_SLIST + 45,
|
||||
CURLINFO_HTTP_VERSION = CURLINFO_LONG + 46,
|
||||
CURLINFO_PROXY_SSL_VERIFYRESULT = CURLINFO_LONG + 47,
|
||||
CURLINFO_PROTOCOL = CURLINFO_LONG + 48,
|
||||
CURLINFO_SCHEME = CURLINFO_STRING + 49,
|
||||
/* Fill in new entries below here! */
|
||||
|
||||
CURLINFO_LASTONE = 47
|
||||
CURLINFO_LASTONE = 49
|
||||
} CURLINFO;
|
||||
|
||||
/* 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_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_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,
|
||||
char **param_charp)
|
||||
const char **param_charp)
|
||||
{
|
||||
switch(info) {
|
||||
case CURLINFO_EFFECTIVE_URL:
|
||||
@ -123,6 +123,9 @@ static CURLcode getinfo_char(struct Curl_easy *data, CURLINFO info,
|
||||
case CURLINFO_RTSP_SESSION_ID:
|
||||
*param_charp = data->set.str[STRING_RTSP_SESSION_ID];
|
||||
break;
|
||||
case CURLINFO_SCHEME:
|
||||
*param_charp = data->info.conn_scheme;
|
||||
break;
|
||||
|
||||
default:
|
||||
return CURLE_UNKNOWN_OPTION;
|
||||
@ -229,6 +232,9 @@ static CURLcode getinfo_long(struct Curl_easy *data, CURLINFO info,
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case CURLINFO_PROTOCOL:
|
||||
*param_longp = data->info.conn_protocol;
|
||||
break;
|
||||
|
||||
default:
|
||||
return CURLE_UNKNOWN_OPTION;
|
||||
@ -385,7 +391,7 @@ CURLcode Curl_getinfo(struct Curl_easy *data, CURLINFO info, ...)
|
||||
va_list arg;
|
||||
long *param_longp = NULL;
|
||||
double *param_doublep = NULL;
|
||||
char **param_charp = NULL;
|
||||
const char **param_charp = NULL;
|
||||
struct curl_slist **param_slistp = NULL;
|
||||
curl_socket_t *param_socketp = NULL;
|
||||
int type;
|
||||
@ -399,7 +405,7 @@ CURLcode Curl_getinfo(struct Curl_easy *data, CURLINFO info, ...)
|
||||
type = CURLINFO_TYPEMASK & (int)info;
|
||||
switch(type) {
|
||||
case CURLINFO_STRING:
|
||||
param_charp = va_arg(arg, char **);
|
||||
param_charp = va_arg(arg, const char **);
|
||||
if(param_charp)
|
||||
result = getinfo_char(data, info, param_charp);
|
||||
break;
|
||||
|
@ -1174,6 +1174,9 @@ struct PureInfo {
|
||||
char conn_local_ip[MAX_IPADR_LEN];
|
||||
long conn_local_port;
|
||||
|
||||
const char *conn_scheme;
|
||||
unsigned int conn_protocol;
|
||||
|
||||
struct curl_certinfo certs; /* info about the certs, only populated in
|
||||
OpenSSL builds. Asked for with
|
||||
CURLOPT_CERTINFO / CURLINFO_CERTINFO */
|
||||
|
@ -59,6 +59,7 @@ typedef enum {
|
||||
VAR_LOCAL_IP,
|
||||
VAR_LOCAL_PORT,
|
||||
VAR_HTTP_VERSION,
|
||||
VAR_SCHEME,
|
||||
VAR_NUM_OF_VARS /* must be the last */
|
||||
} replaceid;
|
||||
|
||||
@ -99,6 +100,7 @@ static const struct variable replacements[]={
|
||||
{"local_ip", VAR_LOCAL_IP},
|
||||
{"local_port", VAR_LOCAL_PORT},
|
||||
{"http_version", VAR_HTTP_VERSION},
|
||||
{"scheme", VAR_SCHEME},
|
||||
{NULL, VAR_NONE}
|
||||
};
|
||||
|
||||
@ -308,6 +310,12 @@ void ourWriteOut(CURL *curl, struct OutStruct *outs, const char *writeinfo)
|
||||
fprintf(stream, version);
|
||||
}
|
||||
break;
|
||||
case VAR_SCHEME:
|
||||
if(CURLE_OK ==
|
||||
curl_easy_getinfo(curl, CURLINFO_SCHEME,
|
||||
&stringp))
|
||||
fprintf(stream, "%s", stringp);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user