aboutsummaryrefslogtreecommitdiff
path: root/lib/url.c
diff options
context:
space:
mode:
authorDaniel Stenberg <daniel@haxx.se>2010-08-10 00:56:45 +0200
committerDaniel Stenberg <daniel@haxx.se>2010-08-10 00:56:45 +0200
commitdc2157a0878f3a140fac07b97687b3c3da42616b (patch)
treefe5702bfb29378088813f28da35f4b8a4e964490 /lib/url.c
parent5d5dd08e775732beec24a1041f8cb9b62e311188 (diff)
parse_remote_port: fix ;type= URL suffix over HTTP proxy
Test 563 is enabled now and verifies that the combo FTP type=A URL, CURLOPT_PORT set and proxy work fine. As a bonus I managed to remove the somewhat odd FTP check in parse_remote_port() and instead converted it to a better and more generic 'slash_removed' struct field. Checking the ->protocol field isn't right since when an FTP:// URL is sent over a HTTP proxy, the protocol is HTTP but the URL was handled by the FTP code and thus slash_removed is set TRUE for this case.
Diffstat (limited to 'lib/url.c')
-rw-r--r--lib/url.c19
1 files changed, 12 insertions, 7 deletions
diff --git a/lib/url.c b/lib/url.c
index 228e35386..fd6443a59 100644
--- a/lib/url.c
+++ b/lib/url.c
@@ -4259,18 +4259,23 @@ static CURLcode parse_remote_port(struct SessionHandle *data,
if(conn->bits.httpproxy) {
/* we need to create new URL with the new port number */
char *url;
- /* FTPS connections have the FTP bit set too, so they match as well */
- bool isftp = (bool)(0 != (conn->protocol & PROT_FTP));
+ char type[12]="";
+
+ if(conn->bits.type_set)
+ snprintf(type, sizeof(type), ";type=%c",
+ data->set.prefer_ascii?'A':
+ (data->set.ftp_list_only?'D':'I'));
/*
- * This synthesized URL isn't always right--suffixes like ;type=A
- * are stripped off. It would be better to work directly from the
- * original URL and simply replace the port part of it.
+ * This synthesized URL isn't always right--suffixes like ;type=A are
+ * stripped off. It would be better to work directly from the original
+ * URL and simply replace the port part of it.
*/
- url = aprintf("%s://%s%s%s:%hu%s%s", conn->handler->scheme,
+ url = aprintf("%s://%s%s%s:%hu%s%s%s", conn->handler->scheme,
conn->bits.ipv6_ip?"[":"", conn->host.name,
conn->bits.ipv6_ip?"]":"", conn->remote_port,
- isftp?"/":"", data->state.path);
+ data->state.slash_removed?"/":"", data->state.path,
+ type);
if(!url)
return CURLE_OUT_OF_MEMORY;