mirror of
https://github.com/moparisthebest/curl
synced 2024-12-22 08:08:50 -05:00
David McCreedy added CURLINFO_FTP_ENTRY_PATH to export the FTP entry path
This commit is contained in:
parent
83367f67de
commit
598ffeea89
2
CHANGES
2
CHANGES
@ -7,6 +7,8 @@
|
|||||||
Changelog
|
Changelog
|
||||||
|
|
||||||
Daniel (21 March 2006)
|
Daniel (21 March 2006)
|
||||||
|
- David McCreedy added CURLINFO_FTP_ENTRY_PATH.
|
||||||
|
|
||||||
- Xavier Bouchoux made the SSL connection non-blocking for the multi interface
|
- Xavier Bouchoux made the SSL connection non-blocking for the multi interface
|
||||||
(when using OpenSSL).
|
(when using OpenSSL).
|
||||||
|
|
||||||
|
@ -11,6 +11,7 @@ Curl and libcurl 7.15.4
|
|||||||
|
|
||||||
This release includes the following changes:
|
This release includes the following changes:
|
||||||
|
|
||||||
|
o added CURLINFO_FTP_ENTRY_PATH
|
||||||
o less blocking for the multi interface during SSL connect negotiation
|
o less blocking for the multi interface during SSL connect negotiation
|
||||||
|
|
||||||
This release includes the following bugfixes:
|
This release includes the following bugfixes:
|
||||||
|
@ -21,7 +21,7 @@
|
|||||||
.\" * $Id$
|
.\" * $Id$
|
||||||
.\" **************************************************************************
|
.\" **************************************************************************
|
||||||
.\"
|
.\"
|
||||||
.TH curl 1 "21 Feb 2006" "Curl 7.15.2" "Curl Manual"
|
.TH curl 1 "21 Mar 2006" "Curl 7.15.4" "Curl Manual"
|
||||||
.SH NAME
|
.SH NAME
|
||||||
curl \- transfer a URL
|
curl \- transfer a URL
|
||||||
.SH SYNOPSIS
|
.SH SYNOPSIS
|
||||||
@ -1131,6 +1131,10 @@ Number of new connects made in the recent transfer. (Added in 7.12.3)
|
|||||||
.TP
|
.TP
|
||||||
.B num_redirects
|
.B num_redirects
|
||||||
Number of redirects that were followed in the request. (Added in 7.12.3)
|
Number of redirects that were followed in the request. (Added in 7.12.3)
|
||||||
|
.TP
|
||||||
|
.B ftp_entry_path
|
||||||
|
The initial path libcurl ended up in when logging on to the remote FTP
|
||||||
|
server. (Added in 7.15.4)
|
||||||
.RE
|
.RE
|
||||||
|
|
||||||
If this option is used several times, the last one will be used.
|
If this option is used several times, the last one will be used.
|
||||||
|
@ -1,8 +1,27 @@
|
|||||||
.\" You can view this file with:
|
.\" **************************************************************************
|
||||||
.\" nroff -man [file]
|
.\" * _ _ ____ _
|
||||||
.\" $Id$
|
.\" * Project ___| | | | _ \| |
|
||||||
|
.\" * / __| | | | |_) | |
|
||||||
|
.\" * | (__| |_| | _ <| |___
|
||||||
|
.\" * \___|\___/|_| \_\_____|
|
||||||
|
.\" *
|
||||||
|
.\" * Copyright (C) 1998 - 2006, 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 http://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.
|
||||||
|
.\" *
|
||||||
|
.\" * $Id$
|
||||||
|
.\" **************************************************************************
|
||||||
.\"
|
.\"
|
||||||
.TH curl_easy_getinfo 3 "6 Oct 2005" "libcurl 7.12.3" "libcurl Manual"
|
.TH curl_easy_getinfo 3 "21 Mar 2006" "libcurl 7.15.4" "libcurl Manual"
|
||||||
.SH NAME
|
.SH NAME
|
||||||
curl_easy_getinfo - extract information from a curl handle
|
curl_easy_getinfo - extract information from a curl handle
|
||||||
.SH SYNOPSIS
|
.SH SYNOPSIS
|
||||||
@ -148,6 +167,11 @@ working with the socket, you must call curl_easy_cleanup() as usual and let
|
|||||||
libcurl close the socket and cleanup other resources associated with the
|
libcurl close the socket and cleanup other resources associated with the
|
||||||
handle. This is typically used in combination with \fICURLOPT_CONNECT_ONLY\fP.
|
handle. This is typically used in combination with \fICURLOPT_CONNECT_ONLY\fP.
|
||||||
(Added in 7.15.2)
|
(Added in 7.15.2)
|
||||||
|
.IP CURLINFO_FTP_ENTRY_PATH
|
||||||
|
Pass a pointer to a 'char *' to receive a pointer to a string holding the path
|
||||||
|
of the entry path. That is the initial path libcurl ended up in when logging
|
||||||
|
on to the remote FTP server. This stores a NULL as pointer if something is
|
||||||
|
wrong. (Added in 7.15.4)
|
||||||
.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()
|
||||||
|
@ -1292,9 +1292,10 @@ typedef enum {
|
|||||||
CURLINFO_SSL_ENGINES = CURLINFO_SLIST + 27,
|
CURLINFO_SSL_ENGINES = CURLINFO_SLIST + 27,
|
||||||
CURLINFO_COOKIELIST = CURLINFO_SLIST + 28,
|
CURLINFO_COOKIELIST = CURLINFO_SLIST + 28,
|
||||||
CURLINFO_LASTSOCKET = CURLINFO_LONG + 29,
|
CURLINFO_LASTSOCKET = CURLINFO_LONG + 29,
|
||||||
|
CURLINFO_FTP_ENTRY_PATH = CURLINFO_STRING + 30,
|
||||||
/* Fill in new entries below here! */
|
/* Fill in new entries below here! */
|
||||||
|
|
||||||
CURLINFO_LASTONE = 29
|
CURLINFO_LASTONE = 30
|
||||||
} 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
|
||||||
|
@ -2530,6 +2530,8 @@ static CURLcode ftp_statemach_act(struct connectdata *conn)
|
|||||||
}
|
}
|
||||||
ftp->entrypath =dir; /* remember this */
|
ftp->entrypath =dir; /* remember this */
|
||||||
infof(data, "Entry path is '%s'\n", ftp->entrypath);
|
infof(data, "Entry path is '%s'\n", ftp->entrypath);
|
||||||
|
/* also save it where getinfo can access it: */
|
||||||
|
data->state.most_recent_ftp_entrypath = ftp->entrypath;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
/* couldn't get the path */
|
/* couldn't get the path */
|
||||||
@ -3423,8 +3425,12 @@ CURLcode Curl_ftp_disconnect(struct connectdata *conn)
|
|||||||
if(ftp) {
|
if(ftp) {
|
||||||
(void)ftp_quit(conn); /* ignore errors on the QUIT */
|
(void)ftp_quit(conn); /* ignore errors on the QUIT */
|
||||||
|
|
||||||
if(ftp->entrypath)
|
if(ftp->entrypath) {
|
||||||
|
struct SessionHandle *data = conn->data;
|
||||||
|
data->state.most_recent_ftp_entrypath = NULL;
|
||||||
free(ftp->entrypath);
|
free(ftp->entrypath);
|
||||||
|
ftp->entrypath = NULL;
|
||||||
|
}
|
||||||
if(ftp->cache) {
|
if(ftp->cache) {
|
||||||
free(ftp->cache);
|
free(ftp->cache);
|
||||||
ftp->cache = NULL;
|
ftp->cache = NULL;
|
||||||
|
@ -187,6 +187,14 @@ CURLcode Curl_getinfo(struct SessionHandle *data, CURLINFO info, ...)
|
|||||||
case CURLINFO_COOKIELIST:
|
case CURLINFO_COOKIELIST:
|
||||||
*param_slistp = Curl_cookie_list(data);
|
*param_slistp = Curl_cookie_list(data);
|
||||||
break;
|
break;
|
||||||
|
case CURLINFO_FTP_ENTRY_PATH:
|
||||||
|
/* Return the entrypath string from the most recent connection.
|
||||||
|
This pointer was copied from the connectdata structure by FTP.
|
||||||
|
The actual string may be free()ed by subsequent libcurl calls so
|
||||||
|
it must be copied to a safer area before the next libcurl call.
|
||||||
|
Callers must never free it themselves. */
|
||||||
|
*param_charp = data->state.most_recent_ftp_entrypath;
|
||||||
|
break;
|
||||||
case CURLINFO_LASTSOCKET:
|
case CURLINFO_LASTSOCKET:
|
||||||
if((data->state.lastconnect != -1) &&
|
if((data->state.lastconnect != -1) &&
|
||||||
(data->state.connects[data->state.lastconnect] != NULL))
|
(data->state.connects[data->state.lastconnect] != NULL))
|
||||||
|
@ -833,7 +833,7 @@ typedef enum {
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
* Values that are generated, temporary or calculated internally for a
|
* Values that are generated, temporary or calculated internally for a
|
||||||
* "session handle" must be defined within the 'struct urlstate'. This struct
|
* "session handle" must be defined within the 'struct UrlState'. This struct
|
||||||
* will be used within the SessionHandle struct. When the 'SessionHandle'
|
* will be used within the SessionHandle struct. When the 'SessionHandle'
|
||||||
* struct is cloned, this data MUST NOT be copied.
|
* struct is cloned, this data MUST NOT be copied.
|
||||||
*
|
*
|
||||||
@ -921,6 +921,10 @@ struct UrlState {
|
|||||||
#if defined(USE_SSLEAY) && defined(HAVE_OPENSSL_ENGINE_H)
|
#if defined(USE_SSLEAY) && defined(HAVE_OPENSSL_ENGINE_H)
|
||||||
ENGINE *engine;
|
ENGINE *engine;
|
||||||
#endif /* USE_SSLEAY */
|
#endif /* USE_SSLEAY */
|
||||||
|
|
||||||
|
/* a place to store the most recenlty set FTP entrypath */
|
||||||
|
char *most_recent_ftp_entrypath;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@ -950,7 +954,7 @@ struct DynamicStatic {
|
|||||||
* This 'UserDefined' struct must only contain data that is set once to go
|
* This 'UserDefined' struct must only contain data that is set once to go
|
||||||
* for many (perhaps) independent connections. Values that are generated or
|
* for many (perhaps) independent connections. Values that are generated or
|
||||||
* calculated internally for the "session handle" MUST be defined within the
|
* calculated internally for the "session handle" MUST be defined within the
|
||||||
* 'struct urlstate' instead. The only exceptions MUST note the changes in
|
* 'struct UrlState' instead. The only exceptions MUST note the changes in
|
||||||
* the 'DynamicStatic' struct.
|
* the 'DynamicStatic' struct.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@ -964,7 +968,7 @@ struct UserDefined {
|
|||||||
this. */
|
this. */
|
||||||
void *out; /* the fetched file goes here */
|
void *out; /* the fetched file goes here */
|
||||||
void *in; /* the uploaded file is read from here */
|
void *in; /* the uploaded file is read from here */
|
||||||
void *writeheader; /* write the header to this is non-NULL */
|
void *writeheader; /* write the header to this if non-NULL */
|
||||||
char *set_url; /* what original URL to work on */
|
char *set_url; /* what original URL to work on */
|
||||||
char *set_proxy; /* proxy to use */
|
char *set_proxy; /* proxy to use */
|
||||||
long use_port; /* which port to use (when not using default) */
|
long use_port; /* which port to use (when not using default) */
|
||||||
@ -1111,7 +1115,7 @@ struct UserDefined {
|
|||||||
* From now on, the 'SessionHandle' must only contain data that is set once to
|
* From now on, the 'SessionHandle' must only contain data that is set once to
|
||||||
* go for many (perhaps) independent connections. Values that are generated or
|
* go for many (perhaps) independent connections. Values that are generated or
|
||||||
* calculated internally for the "session handle" must be defined within the
|
* calculated internally for the "session handle" must be defined within the
|
||||||
* 'struct urlstate' instead. */
|
* 'struct UrlState' instead. */
|
||||||
|
|
||||||
struct SessionHandle {
|
struct SessionHandle {
|
||||||
struct curl_hash *hostcache;
|
struct curl_hash *hostcache;
|
||||||
|
@ -60,6 +60,7 @@ typedef enum {
|
|||||||
VAR_NUM_CONNECTS,
|
VAR_NUM_CONNECTS,
|
||||||
VAR_REDIRECT_TIME,
|
VAR_REDIRECT_TIME,
|
||||||
VAR_REDIRECT_COUNT,
|
VAR_REDIRECT_COUNT,
|
||||||
|
VAR_FTP_ENTRY_PATH,
|
||||||
VAR_NUM_OF_VARS /* must be the last */
|
VAR_NUM_OF_VARS /* must be the last */
|
||||||
} replaceid;
|
} replaceid;
|
||||||
|
|
||||||
@ -88,6 +89,7 @@ static const struct variable replacements[]={
|
|||||||
{"num_connects", VAR_NUM_CONNECTS},
|
{"num_connects", VAR_NUM_CONNECTS},
|
||||||
{"time_redirect", VAR_REDIRECT_TIME},
|
{"time_redirect", VAR_REDIRECT_TIME},
|
||||||
{"num_redirects", VAR_REDIRECT_COUNT},
|
{"num_redirects", VAR_REDIRECT_COUNT},
|
||||||
|
{"ftp_entry_path", VAR_FTP_ENTRY_PATH},
|
||||||
{NULL, VAR_NONE}
|
{NULL, VAR_NONE}
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -213,6 +215,13 @@ void ourWriteOut(CURL *curl, char *writeinfo)
|
|||||||
curl_easy_getinfo(curl, CURLINFO_CONTENT_TYPE, &stringp))
|
curl_easy_getinfo(curl, CURLINFO_CONTENT_TYPE, &stringp))
|
||||||
&& stringp)
|
&& stringp)
|
||||||
fputs(stringp, stream);
|
fputs(stringp, stream);
|
||||||
|
break;
|
||||||
|
case VAR_FTP_ENTRY_PATH:
|
||||||
|
if((CURLE_OK ==
|
||||||
|
curl_easy_getinfo(curl, CURLINFO_FTP_ENTRY_PATH, &stringp))
|
||||||
|
&& stringp)
|
||||||
|
fputs(stringp, stream);
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user