git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@270035 13f79535-47bb-0310-9956-ffa450edef68master
@@ -0,0 +1,429 @@ | |||||
<html> | |||||
<head> | |||||
<title>Http Tasks</title> | |||||
</head> | |||||
<body> | |||||
<h2>Http Tasks</h2> | |||||
Tasks do to make the basic HTTP requests: get, post, head, put, with authentication. | |||||
There is also a task to configure the proxy settings of the http tasks. | |||||
<p> | |||||
These tasks significantly extend the basic <a | |||||
href="../CoreTasks/get.html">get task</a>, but are split off into the optional section | |||||
so that | |||||
<ol> | |||||
<li> The core ant file doesn't get so big | |||||
<li> this implementation can move to using an optional jar (HttpClient) to work around | |||||
limitations of the HTTP support built in to the Java platform. | |||||
</ol> | |||||
<h3>Core Functionality and Parameters</h3> | |||||
<p>Common functionality to the core tasks tasks is </p> | |||||
<ol> | |||||
<li>Ability to name the remote url which the target of the request.</li> | |||||
<li>Ability to name a local file as the local store of any returned | |||||
content.</li> | |||||
<li>Ability to name a property as the local store of any returned | |||||
content.</li> | |||||
<li>Ability to name a property to be set to "true" when a | |||||
request succeeds.</li> | |||||
<li>The option to list a number of parameters, each with a name and a | |||||
value. Some methods (HttpGet, HttpHead) attach these parameters to the | |||||
stated url to generate the url to actually fetch. Others (HttpPost) send | |||||
the parameters up in the standard representation of form data.</li> | |||||
<li>The option to state the authentication policy and then the username | |||||
and password. Currently only basic authentication is used, which is | |||||
utterly insecure except over an https link</li> | |||||
<li>A 'verbose' option which provides extra information and progess | |||||
information during a download.</li> | |||||
<li>Timestamp control, using the <i>usetimestamp</i> flag. When set the | |||||
timestamp of downloaded content is set to match that of the remote file | |||||
(Java 1.2 or later only), and the local timestamp of the destination | |||||
file (if it exists) used to set the if-modified-since header in the | |||||
request, which will trigger optional download only. </li> | |||||
</ol> | |||||
<h3>Parameters</h3> | |||||
<p> The <i>url</i> parameter specifies the URL to access. The optional | |||||
<i>dest</i> parameter specifies a destination to which the retrieved | |||||
page will be written. The optional <i>destinationproperty </i>parameter | |||||
specifies a name of a property to save the content to, instead of a | |||||
property. If neither <i>dest</i> nor <i>destinationproperty</i> | |||||
specified, the contents of the specified URL are discarded (this is | |||||
useful when accessing the URL for the purpose of causing some action on | |||||
the remote server).</p> | |||||
<p> When the <i>verbose</i> option is enabled, the task displays a '.' for every | |||||
64 KB retrieved. If the <i>blocksize</i> parameter is adjusted then files are | |||||
uploaded or downloaded in a different size block from this, and progress markers | |||||
appear appropriately. </p> | |||||
The <i>usetimestamp</i> option enables you to control downloads so that | |||||
the remote file is only fetched if newer than the local copy. If there | |||||
is no local copy, the download always takes place. When a file is | |||||
downloaded, the timestamp of the downloaded file is set to the remote | |||||
timestamp, if the JVM is Java1.2 or later. NB: This timestamp facility | |||||
only works on downloads using the HTTP protocol. | |||||
<p>The <i>authtype</i>, <i>username</i>, and <i>password</i> options enable support | |||||
for password protected pages. Currently only 'Basic' authentication is used, | |||||
which is notoriously insecure except over an encrypted https channel.</p> | |||||
<table border="1" cellpadding="2" cellspacing="0"> | |||||
<tr> | |||||
<td valign="top"><b>Attribute</b></td> | |||||
<td valign="top"><b>Description</b></td> | |||||
<td align="center" valign="top"><b>Required</b></td> | |||||
</tr> | |||||
<tr> | |||||
<td valign="top">authtype</td> | |||||
<td valign="top">the HTTP authentication protocol to use, <i>none</i> or <i>basic</i>.</td> | |||||
<td align="center" valign="top">No</td> | |||||
</tr> | |||||
<tr> | |||||
<td valign="top">blocksize</td> | |||||
<td valign="top">size (in kilobytes) of the data block used for upload and | |||||
download. Default: 64.<br> | |||||
Keep this to a multiple of the hard disk sector size for file IO performance.</td> | |||||
<td align="center" valign="top">No</td> | |||||
</tr> | |||||
<tr> | |||||
<td valign="top"><b>dest</b></td> | |||||
<td valign="top">the file where to store the retrieved file.</td> | |||||
<td align="center" valign="top">No</td> | |||||
</tr> | |||||
<tr> | |||||
<td valign="top">destinationProperty</td> | |||||
<td valign="top">the name of a property to fill with the returned content. | |||||
Ignored if <i>dest</i> is set</td> | |||||
<td align="center" valign="top">No</td> | |||||
</tr> | |||||
<tr> | |||||
<td valign="top">failonerror</td> | |||||
<td valign="top">stop the build if the request failed. default: true</td> | |||||
<td align="center" valign="top">No</td> | |||||
</tr> | |||||
<tr> | |||||
<td valign="top">password</td> | |||||
<td valign="top">the password for authentication.</td> | |||||
<td align="center" valign="top">No</td> | |||||
</tr> | |||||
<tr> | |||||
<td valign="top">successProperty</td> | |||||
<td valign="top">the name of a property to set to "true" if the | |||||
request succeeds.<br> | |||||
Set <i>failonerror</i> to false for this to be of use.</td> | |||||
<td align="center" valign="top">No</td> | |||||
</tr> | |||||
<tr> | |||||
<td valign="top"><b>url</b></td> | |||||
<td valign="top">the URL from which to retrieve a file.</td> | |||||
<td align="center" valign="top">Yes</td> | |||||
</tr> | |||||
<tr> | |||||
<td valign="top">usecaches</td> | |||||
<td valign="top">boolean to enable 'caching' of content during the fetch process. | |||||
default:false</td> | |||||
<td align="center" valign="top">No</td> | |||||
</tr> | |||||
<tr> | |||||
<td valign="top">useresponsecode</td> | |||||
<td valign="top">boolean to enable success/failure to be determined by result | |||||
of the received response code. HTTP only. default=true.</td> | |||||
<td align="center" valign="top"> </td> | |||||
</tr> | |||||
<tr> | |||||
<td valign="top">username</td> | |||||
<td valign="top">the user name for authentication.</td> | |||||
<td align="center" valign="top">No</td> | |||||
</tr> | |||||
<tr> | |||||
<td valign="top">usetimestamp</td> | |||||
<td valign="top">boolean flag to conditionally download a file based on the | |||||
timestamp of the local copy. HTTP only</td> | |||||
<td align="center" valign="top">No</td> | |||||
</tr> | |||||
<tr> | |||||
<td valign="top">verbose</td> | |||||
<td valign="top"> boolean flag to control progress information display.</td> | |||||
<td align="center" valign="top">No</td> | |||||
</tr> | |||||
</table> | |||||
<p> The <i>successProperty</i> names a property which will be set to "true" if | |||||
the request was deemed successful. For any non-http protocol, success is defined | |||||
as the request completing. For http and https, success is defined as the request | |||||
completing, and the response code from the serving being one of the 'success' | |||||
values -any number between 200 and 299 inclusive. The usual HTTP_OK (200) is | |||||
therefore a success, as is HTTP_ACCEPTED (202). But failures such as BAD_REQUEST | |||||
(400) and the ubiquitous HTTP_NOT_FOUND (404) are most definately errors. So | |||||
an attempt to access a missing url may result 'failure',even though some content | |||||
was download (such as, perhaps, the 'file not found' text). If this is not what | |||||
you desire, then set <i>useresponsecode</i>="false" for the system | |||||
to interpret any data back as a success. | |||||
<h3>Parameters specified as nested elements</h3> | |||||
<p><b>param</b></p> | |||||
<p>Specifies an HTTP request parameter to send as part of the request. | |||||
For <i>get</i> and <i>head</i> request methods the parameters are | |||||
encoded as part of the URL. For <i>post</i> request methods, the | |||||
parameters are sent as the POST request data.</p> | |||||
<table cellspacing="0" cellpadding="2" border="1"> | |||||
<tbody> | |||||
<tr> | |||||
<td valign="top"><b>Attribute</b></td> | |||||
<td valign="top"><b>Description</b></td> | |||||
<td valign="top" align="middle"><b>Required</b></td> | |||||
</tr> | |||||
<tr> | |||||
<td valign="top">name</td> | |||||
<td valign="top">the name of the request property to set.</td> | |||||
<td valign="top" align="middle">Yes</td> | |||||
</tr> | |||||
<tr> | |||||
<td valign="top">value</td> | |||||
<td valign="top">the value of the request property. You may alternatively | |||||
specify the value as text between the beginning and ending param tags.</td> | |||||
<td valign="center" align="middle">Yes</td> | |||||
</tr> | |||||
</tbody> | |||||
</table> | |||||
<p><b>header</b></p> | |||||
<p>Specifies an arbitrary HTTP request header that will be sent with the | |||||
request.</p> | |||||
<table cellspacing="0" cellpadding="2" border="1"> | |||||
<tr> | |||||
<td valign="top"><b>Attribute</b></td> | |||||
<td valign="top"><b>Description</b></td> | |||||
<td valign="top" align="middle"><b>Required</b></td> | |||||
</tr> | |||||
<tr> | |||||
<td valign="top">name</td> | |||||
<td valign="top">the name of the HTTP request header</td> | |||||
<td valign="top" align="middle">Yes</td> | |||||
</tr> | |||||
<tr> | |||||
<td valign="top">value</td> | |||||
<td valign="top">the value of the HTTP request header. You may alternatively | |||||
specify the value as text between the beginning and ending header tags.</td> | |||||
<td valign="center" align="middle">Yes</td> | |||||
</tr> | |||||
</table> | |||||
<h3>Quirky Limitations of java.net classes</h3> | |||||
Multiple HTTP headers can with the same name can <b>not</b> be set, even | |||||
though the protocol permits it. Java1.1 and Java 1.2 <i>may</i> permit multiple | |||||
cookies to be set, but this behaviour is explicitly not supported on Java1.3, | |||||
as someone went and change the code to stop this (Java bug ID #4242254). | |||||
You need to set multiple cookies in one go and hope the far end can handle it | |||||
<p> | |||||
Bug ID #4160499 covers another issue, to wit: some versions of Java throw | |||||
exceptions when an error code is greater than 400 and the dest file isn't | |||||
one of a few simple file types, but Java 1.2 and 1.3 do not. So there | |||||
is no way to get the error text when a jsp page throws some exception. | |||||
<p> | |||||
Also, although this isnt going to be filed until we have a short | |||||
test case, but if you recieve a short response with less content than | |||||
the content-length header promises, the library seems to silently | |||||
reduce the content length header to match, which seems the wrong action. | |||||
<h2><a name="httpget">HttpGet</a></h2> | |||||
<h3>Description</h3> | |||||
<p>Accesses a URL to retrieve a file or to cause some action on the server.</p> | |||||
<p> This task should be preferred above the <a href="#cvs">CVS task</a> when doing | |||||
automated builds. CVS is significantly slower than loading a compressed archive | |||||
with http/ftp. This task will also retrieve content using other supported protocols, | |||||
such as ftp: and file: | |||||
<p>All the attributes of httptask may be used. Note that a quirk of the implementation | |||||
of the http client in java makes it impossible to reliably fetch the response | |||||
details from any unsuccessful request against a URL which doesn't end in '.htm,.html | |||||
or .txt'. This means that if the task is used to compile jsp pages by issuing | |||||
request against them, the text details of any errors will not be picked up. | |||||
<h3>Examples</h3> | |||||
<pre> <httpget url="http://jakarta.apache.org/" dest="help/index.html"/></pre> | |||||
<p>Fetches the index page of http://jakarta.apache.org/, and stores it in the | |||||
file <code>help/index.html</code>. </p> | |||||
<pre> <httpget src="http://jakarta.apache.org/builds/tomcat/nightly/ant.zip" | |||||
dest="optional.jar" | |||||
verbose="true" | |||||
usetimestamp="true" | |||||
> | |||||
<header name="Cookie" value="someid=43ff2b"/> | |||||
</httpget></pre> | |||||
<p> Retrieves the nightly ant build from the tomcat distribution, if the local | |||||
copy is missing or out of date. Uses the verbose option for progress information. | |||||
A cookie is supplied for the server's benefit.</p> | |||||
<pre> <httpget url="https://www.pizzaservices.com/prices.jsp" | |||||
dest="pizza-prices.xml"> | |||||
<param name="zipcode">57340</param> | |||||
<param name="pizza">pepperoni</param> | |||||
</httpget></pre> | |||||
<p>Builds a URL by adding parameters ("?zipcode=57340&pizza=pepperoni") | |||||
to the base URL and then fetches the contents (fictional example)</p> | |||||
<h2><a name="httphead">HttpHead</a> </h2> | |||||
<p>The http HEAD request is similar to the normal GET request , except it, by | |||||
definition, returns no content, just a success code and http headers. Accordingly, | |||||
the destination properties of the base class -<i>dest</i> and -, <i>destinationpropertyname</i>) | |||||
are not supported -any attempt to use them will result in a build failure. Note | |||||
also that the http and https protocols are the only protocols supported. </p> | |||||
<p> | |||||
HttpHead is useful for triggering server side actions, but note that many servers | |||||
interpret a HEAD very differently from a GET. An HttpGet request with the | |||||
return data discarded is often a more reliable approach. | |||||
</p> | |||||
<p> Where head can be useful is in testing for the availability and reachability | |||||
of servers, such as in the following test for apache being reachable, which | |||||
sets a variable on success:- | |||||
<pre> | |||||
<httphead url="http://www.apache.org/" | |||||
failonerror="false" | |||||
successproperty="reachable.apache" | |||||
/> | |||||
</pre> | |||||
<p>Note that sometimes a missing file on a mis-configured server still generates | |||||
a successful '200' response to a GET request -and returns a 'missing' file page, | |||||
but a HEAD request will reliably pick up the 'missing file' error. </p> | |||||
<h2><a name="httppost">HttpPost</a></h2> | |||||
<p>This implements the POST request. Supplied parameter data is turned into form | |||||
data and sent as the body of the request, rather than appended to the URL. If | |||||
a file to upload is specified instead, using <i>uploadFile</i>, the parameter | |||||
values are ignored. Instead the content type of the file is sent in the header | |||||
-based on the <i>contentType</i> attribute or what the java runtime thinks the | |||||
content type is based on the file extension. The file is uploaded. </p> | |||||
<p>Like HttpGet, this command can return a content which can downloaded to a file, | |||||
to a property, or just ignored.</p> | |||||
<p>This task adds two new attributes to the base set. </p> | |||||
<table cellspacing="0" cellpadding="2" border="1"> | |||||
<tr> | |||||
<td valign="top" width="78"><b>Attribute</b></td> | |||||
<td valign="top" width="559"><b>Description</b></td> | |||||
<td valign="top" align="middle" width="62"><b>Required</b></td> | |||||
</tr> | |||||
<tr> | |||||
<td valign="top" width="78">uploadFile</td> | |||||
<td valign="top" width="559">a file to upload. when specified, all parameters | |||||
are ignored.</td> | |||||
<td valign="top" align="middle" width="62"> | |||||
<div align="center">no</div> | |||||
</td> | |||||
</tr> | |||||
<tr> | |||||
<td valign="top" width="78">contentType </td> | |||||
<td valign="top" width="559">the type of the content (text/html, text/xml, | |||||
application/binary, etc). Only of relevance when a file is being uploaded, | |||||
and still optional in that case. </td> | |||||
<td valign="center" align="middle" width="62"> | |||||
<div align="center">no</div> | |||||
</td> | |||||
</tr> | |||||
</table> | |||||
<h3></h3> | |||||
<pre> | |||||
<httppost url="http://www.example.com/servlet/docserver" | |||||
authtype="basic" username="joe" password="silly"> | |||||
<param name="action" value="getdoc"/> | |||||
<param name="ISBN">038550120X</param> | |||||
<param name="pages">19-20</param> | |||||
<header name="Accept-Language" value="en-us"/> | |||||
</httppost></pre> | |||||
<p>Accesses a server at www.foo.com, passing a request to some servlet asking it | |||||
to retrieve several pages from a stored book. An HTTP header specifying | |||||
acceptable languages for the returned contents is also sent. Basic | |||||
authentication is used with a user name of "joe" and a password of | |||||
"silly".</p> | |||||
<p> | |||||
<pre> <httppost url="https://www.pizzaservices.com" | |||||
uploadFile="pizza-order.xml" | |||||
contentType="text/xml"> | |||||
</pre> | |||||
<p>Sends a pre-prepared order for a pizza to a pizza vendor accepting orders using | |||||
xml-rpc requests. (NB: fictional example) </p> | |||||
<h2><a name="SetProxy"></a>SetProxy</h2> | |||||
<p>This task configures the proxy settings for all http tasks which follow it | |||||
in the build. That includes the original Get task, but not the telnet and FTP | |||||
tasks. The proxy settings remain in place until changed or the build finishes, | |||||
and will also hold for other ant build files invoked and even non-forked java | |||||
invocations, and even URL resolutions of XML parsers running in the same JVM | |||||
</p> | |||||
<table cellspacing="0" cellpadding="2" border="1"> | |||||
<tr> | |||||
<td valign="top" width="78"><b>Attribute</b></td> | |||||
<td valign="top" width="559"><b>Description</b></td> | |||||
<td valign="top" align="middle" width="62"><b>Required</b></td> | |||||
</tr> | |||||
<tr> | |||||
<td valign="top" width="78">proxyHost</td> | |||||
<td valign="top" width="559">hostname of a web/ftp proxy server</td> | |||||
<td valign="top" align="middle" width="62"> | |||||
<div align="center">no</div> | |||||
</td> | |||||
</tr> | |||||
<tr> | |||||
<td valign="top" width="78">proxyPort </td> | |||||
<td valign="top" width="559">integer; the port of the proxy server</td> | |||||
<td valign="center" align="middle" width="62"> | |||||
<div align="center">no</div> | |||||
</td> | |||||
</tr> | |||||
<tr> | |||||
<td valign="top" width="78">socksProxyHost</td> | |||||
<td valign="top" width="559">hostname of a SOCKS4 proxy server</td> | |||||
<td valign="center" align="middle" width="62"> | |||||
<div align="center">no</div> | |||||
</td> | |||||
</tr> | |||||
<tr> | |||||
<td valign="top" width="78">socksProxyPort</td> | |||||
<td valign="top" width="559">integer; port number of a SOCKS4 server (default=1080)</td> | |||||
<td valign="center" align="middle" width="62"> | |||||
<div align="center">no</div> | |||||
</td> | |||||
</tr> | |||||
</table> | |||||
<h3></h3> | |||||
<p>Turn off all proxies</p> | |||||
<pre> <setproxy proxyhost="" socksProxyHost="" /></pre> | |||||
<p>Set web proxy to 'web-proxy:80'; do not make any changes to existing socks | |||||
settings (if any)</p> | |||||
<pre> <setproxy proxyHost="web-proxy" proxyPort="80"/></pre> | |||||
<p>Turn on socks</p> | |||||
<pre> <setproxy socksProxyHost="socks-server" socksProxyPort="1080"/></pre> | |||||
<p>Do nothing</p> | |||||
<pre> <setproxy/></pre> | |||||
<hr> | |||||
<p align="center">Copyright © 2000,2001 Apache Software Foundation. All rights | |||||
Reserved.</p> | |||||
</body> | |||||
</html> | |||||
@@ -0,0 +1,115 @@ | |||||
/* | |||||
* The Apache Software License, Version 1.1 | |||||
* | |||||
* Copyright (c) 1999-2001 The Apache Software Foundation. All rights | |||||
* reserved. | |||||
* | |||||
* Redistribution and use in source and binary forms, with or without | |||||
* modification, are permitted provided that the following conditions | |||||
* are met: | |||||
* | |||||
* 1. Redistributions of source code must retain the above copyright | |||||
* notice, this list of conditions and the following disclaimer. | |||||
* | |||||
* 2. Redistributions in binary form must reproduce the above copyright | |||||
* notice, this list of conditions and the following disclaimer in | |||||
* the documentation and/or other materials provided with the | |||||
* distribution. | |||||
* | |||||
* 3. The end-user documentation included with the redistribution, if | |||||
* any, must include the following acknowlegement: | |||||
* "This product includes software developed by the | |||||
* Apache Software Foundation (http://www.apache.org/)." | |||||
* Alternately, this acknowlegement may appear in the software itself, | |||||
* if and wherever such third-party acknowlegements normally appear. | |||||
* | |||||
* 4. The names "The Jakarta Project", "Ant", and "Apache Software | |||||
* Foundation" must not be used to endorse or promote products derived | |||||
* from this software without prior written permission. For written | |||||
* permission, please contact apache@apache.org. | |||||
* | |||||
* 5. Products derived from this software may not be called "Apache" | |||||
* nor may "Apache" appear in their names without prior written | |||||
* permission of the Apache Group. | |||||
* | |||||
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED | |||||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES | |||||
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | |||||
* DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR | |||||
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | |||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | |||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF | |||||
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | |||||
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, | |||||
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT | |||||
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | |||||
* SUCH DAMAGE. | |||||
* ==================================================================== | |||||
* | |||||
* This software consists of voluntary contributions made by many | |||||
* individuals on behalf of the Apache Software Foundation. For more | |||||
* information on the Apache Software Foundation, please see | |||||
* <http://www.apache.org/>. | |||||
*/ | |||||
package org.apache.tools.ant.taskdefs.optional.http; | |||||
/** | |||||
* This code handles Base64 encoding for basic authentication | |||||
* and the like | |||||
* | |||||
* @author matth@pobox.com Matt Humphrey | |||||
* @author steve_l@iseran.com Steve Loughran | |||||
* @created 02 April 2001 | |||||
*/ | |||||
class Base64Encode { | |||||
/** | |||||
* the encode alphabet | |||||
*/ | |||||
private char[] alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=".toCharArray(); | |||||
/** | |||||
* Encode a block of binary data as base64 as specified in RFC1521. | |||||
* | |||||
* @param data the binary data to encode. | |||||
* @return An array of characters that represent the data encoded | |||||
* as Base64 | |||||
*/ | |||||
public char[] encodeBase64(byte[] data) { | |||||
char[] out = new char[((data.length + 2) / 3) * 4]; | |||||
// | |||||
// 3 bytes encode to 4 chars. Output is always an even | |||||
// multiple of 4 characters. | |||||
// | |||||
for (int i = 0, index = 0; i < data.length; i += 3, index += 4) { | |||||
boolean quad = false; | |||||
boolean triple = false; | |||||
//convert to unsigned byte | |||||
int val = (0xFF & (int) data[i]); | |||||
val <<= 8; | |||||
if ((i + 1) < data.length) { | |||||
val |= (0xFF & (int) data[i + 1]); | |||||
triple = true; | |||||
} | |||||
val <<= 8; | |||||
if ((i + 2) < data.length) { | |||||
val |= (0xFF & (int) data[i + 2]); | |||||
quad = true; | |||||
} | |||||
out[index + 3] = alphabet[(quad ? (val & 0x3F) : 64)]; | |||||
val >>= 6; | |||||
out[index + 2] = alphabet[(triple ? (val & 0x3F) : 64)]; | |||||
val >>= 6; | |||||
out[index + 1] = alphabet[val & 0x3F]; | |||||
val >>= 6; | |||||
out[index + 0] = alphabet[val & 0x3F]; | |||||
} | |||||
return out; | |||||
} | |||||
} | |||||
@@ -0,0 +1,100 @@ | |||||
/* | |||||
* The Apache Software License, Version 1.1 | |||||
* | |||||
* Copyright (c) 1999-2001 The Apache Software Foundation. All rights | |||||
* reserved. | |||||
* | |||||
* Redistribution and use in source and binary forms, with or without | |||||
* modification, are permitted provided that the following conditions | |||||
* are met: | |||||
* | |||||
* 1. Redistributions of source code must retain the above copyright | |||||
* notice, this list of conditions and the following disclaimer. | |||||
* | |||||
* 2. Redistributions in binary form must reproduce the above copyright | |||||
* notice, this list of conditions and the following disclaimer in | |||||
* the documentation and/or other materials provided with the | |||||
* distribution. | |||||
* | |||||
* 3. The end-user documentation included with the redistribution, if | |||||
* any, must include the following acknowlegement: | |||||
* "This product includes software developed by the | |||||
* Apache Software Foundation (http://www.apache.org/)." | |||||
* Alternately, this acknowlegement may appear in the software itself, | |||||
* if and wherever such third-party acknowlegements normally appear. | |||||
* | |||||
* 4. The names "The Jakarta Project", "Ant", and "Apache Software | |||||
* Foundation" must not be used to endorse or promote products derived | |||||
* from this software without prior written permission. For written | |||||
* permission, please contact apache@apache.org. | |||||
* | |||||
* 5. Products derived from this software may not be called "Apache" | |||||
* nor may "Apache" appear in their names without prior written | |||||
* permission of the Apache Group. | |||||
* | |||||
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED | |||||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES | |||||
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | |||||
* DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR | |||||
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | |||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | |||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF | |||||
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | |||||
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, | |||||
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT | |||||
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | |||||
* SUCH DAMAGE. | |||||
* ==================================================================== | |||||
* | |||||
* This software consists of voluntary contributions made by many | |||||
* individuals on behalf of the Apache Software Foundation. For more | |||||
* information on the Apache Software Foundation, please see | |||||
* <http://www.apache.org/>. | |||||
*/ | |||||
package org.apache.tools.ant.taskdefs.optional.http; | |||||
import java.io.IOException; | |||||
import java.net.*; | |||||
/** | |||||
* this is a class to work around the fact a function I want (guessContentTypeFromName) | |||||
* is protected. | |||||
* | |||||
* @author steve_l@iseran.com Steve Loughran | |||||
* @created March 17, 2001 | |||||
*/ | |||||
class ContentGuesser extends URLConnection { | |||||
/** | |||||
* stub Constructor for the ContentGuesser object | |||||
* | |||||
* @param url Description of Parameter | |||||
*/ | |||||
ContentGuesser(URL url) { | |||||
super(url); | |||||
} | |||||
/** | |||||
* this stub is needed for the build | |||||
* | |||||
* @exception IOException Description of Exception | |||||
*/ | |||||
public void connect() | |||||
throws IOException { | |||||
} | |||||
/** | |||||
* make a protected method public. | |||||
* This guesses file type from extension. It's ok for very | |||||
* well known types... | |||||
* @param filename file to guess type of | |||||
* @return what the system guessed | |||||
*/ | |||||
public static String guessContentType(String filename) { | |||||
return guessContentTypeFromName(filename); | |||||
} | |||||
} | |||||
@@ -0,0 +1,88 @@ | |||||
/* | |||||
* The Apache Software License, Version 1.1 | |||||
* | |||||
* Copyright (c) 1999-2001 The Apache Software Foundation. All rights | |||||
* reserved. | |||||
* | |||||
* Redistribution and use in source and binary forms, with or without | |||||
* modification, are permitted provided that the following conditions | |||||
* are met: | |||||
* | |||||
* 1. Redistributions of source code must retain the above copyright | |||||
* notice, this list of conditions and the following disclaimer. | |||||
* | |||||
* 2. Redistributions in binary form must reproduce the above copyright | |||||
* notice, this list of conditions and the following disclaimer in | |||||
* the documentation and/or other materials provided with the | |||||
* distribution. | |||||
* | |||||
* 3. The end-user documentation included with the redistribution, if | |||||
* any, must include the following acknowlegement: | |||||
* "This product includes software developed by the | |||||
* Apache Software Foundation (http://www.apache.org/)." | |||||
* Alternately, this acknowlegement may appear in the software itself, | |||||
* if and wherever such third-party acknowlegements normally appear. | |||||
* | |||||
* 4. The names "The Jakarta Project", "Ant", and "Apache Software | |||||
* Foundation" must not be used to endorse or promote products derived | |||||
* from this software without prior written permission. For written | |||||
* permission, please contact apache@apache.org. | |||||
* | |||||
* 5. Products derived from this software may not be called "Apache" | |||||
* nor may "Apache" appear in their names without prior written | |||||
* permission of the Apache Group. | |||||
* | |||||
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED | |||||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES | |||||
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | |||||
* DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR | |||||
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | |||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | |||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF | |||||
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | |||||
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, | |||||
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT | |||||
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | |||||
* SUCH DAMAGE. | |||||
* ==================================================================== | |||||
* | |||||
* This software consists of voluntary contributions made by many | |||||
* individuals on behalf of the Apache Software Foundation. For more | |||||
* information on the Apache Software Foundation, please see | |||||
* <http://www.apache.org/>. | |||||
*/ | |||||
package org.apache.tools.ant.taskdefs.optional.http; | |||||
import org.apache.tools.ant.BuildException; | |||||
import java.net.URLConnection; | |||||
/** | |||||
* this interface is for use by classes which authenticate connections. | |||||
* | |||||
* @author matth@pobox.com Matt Humphrey | |||||
* @author steve_l@iseran.com Steve Loughran | |||||
* @created 20 March 2001 | |||||
*/ | |||||
public interface HttpAuthenticationStrategy { | |||||
/** | |||||
* Sets the AuthenticationHeader attribute of the HttpAuthStrategy | |||||
* object | |||||
* | |||||
* @param requestConnection The current request | |||||
* @param responseConnection any previous request, which can contain a | |||||
* challenge for the next round. Will often be null | |||||
* @param user the current user name | |||||
* @param password the current password | |||||
*/ | |||||
public void setAuthenticationHeader(URLConnection requestConnection, | |||||
URLConnection responseConnection, | |||||
String user, String password) | |||||
throws BuildException ; | |||||
} | |||||
@@ -0,0 +1,109 @@ | |||||
/* | |||||
* The Apache Software License, Version 1.1 | |||||
* | |||||
* Copyright (c) 1999-2001 The Apache Software Foundation. All rights | |||||
* reserved. | |||||
* | |||||
* Redistribution and use in source and binary forms, with or without | |||||
* modification, are permitted provided that the following conditions | |||||
* are met: | |||||
* | |||||
* 1. Redistributions of source code must retain the above copyright | |||||
* notice, this list of conditions and the following disclaimer. | |||||
* | |||||
* 2. Redistributions in binary form must reproduce the above copyright | |||||
* notice, this list of conditions and the following disclaimer in | |||||
* the documentation and/or other materials provided with the | |||||
* distribution. | |||||
* | |||||
* 3. The end-user documentation included with the redistribution, if | |||||
* any, must include the following acknowlegement: | |||||
* "This product includes software developed by the | |||||
* Apache Software Foundation (http://www.apache.org/)." | |||||
* Alternately, this acknowlegement may appear in the software itself, | |||||
* if and wherever such third-party acknowlegements normally appear. | |||||
* | |||||
* 4. The names "The Jakarta Project", "Ant", and "Apache Software | |||||
* Foundation" must not be used to endorse or promote products derived | |||||
* from this software without prior written permission. For written | |||||
* permission, please contact apache@apache.org. | |||||
* | |||||
* 5. Products derived from this software may not be called "Apache" | |||||
* nor may "Apache" appear in their names without prior written | |||||
* permission of the Apache Group. | |||||
* | |||||
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED | |||||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES | |||||
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | |||||
* DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR | |||||
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | |||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | |||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF | |||||
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | |||||
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, | |||||
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT | |||||
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | |||||
* SUCH DAMAGE. | |||||
* ==================================================================== | |||||
* | |||||
* This software consists of voluntary contributions made by many | |||||
* individuals on behalf of the Apache Software Foundation. For more | |||||
* information on the Apache Software Foundation, please see | |||||
* <http://www.apache.org/>. | |||||
*/ | |||||
package org.apache.tools.ant.taskdefs.optional.http; | |||||
import java.io.*; | |||||
import java.net.*; | |||||
import java.util.*; | |||||
import org.apache.tools.ant.*; | |||||
import org.apache.tools.ant.taskdefs.Get; | |||||
/** | |||||
* this class implements basic auth, the one that shouldn't be used | |||||
* except over an encrypted link or trusted network. | |||||
* | |||||
* @author matth@pobox.com Matt Humphrey | |||||
* @author steve_l@iseran.com Steve Loughran | |||||
* @created 20 March 2001 | |||||
*/ | |||||
public class HttpBasicAuth implements HttpAuthenticationStrategy { | |||||
/** | |||||
* Sets the AuthenticationHeader attribute of the HttpAuthStrategy | |||||
* object | |||||
* | |||||
* @param requestConnection The current request | |||||
* @param responseConnection any previous request, which can contain a | |||||
* challenge for the next round. Will often be null | |||||
* @param user the current user name | |||||
* @param password the current password | |||||
*/ | |||||
public void setAuthenticationHeader(URLConnection requestConnection, | |||||
URLConnection responseConnection, | |||||
String username, String password) | |||||
throws BuildException { | |||||
if (username != null) { | |||||
password = username == null ? "" : password; | |||||
String encodeStr = username + ":" + password; | |||||
char[] encodedPass; | |||||
String encodedPassStr; | |||||
Base64Encode encoder = new Base64Encode(); | |||||
encodedPass = encoder.encodeBase64(encodeStr.getBytes()); | |||||
encodedPassStr= new String(encodedPass); | |||||
/* this uses the get task | |||||
Get.Base64Converter converter= new Get.Base64Converter(); | |||||
encodedPassStr = converter.encode(encodeStr); | |||||
*/ | |||||
String authStr = "BASIC " +encodedPassStr; | |||||
requestConnection.setRequestProperty("Authorization", authStr); | |||||
} | |||||
} | |||||
} | |||||
@@ -0,0 +1,100 @@ | |||||
/* | |||||
* The Apache Software License, Version 1.1 | |||||
* | |||||
* Copyright (c) 1999-2001 The Apache Software Foundation. All rights | |||||
* reserved. | |||||
* | |||||
* Redistribution and use in source and binary forms, with or without | |||||
* modification, are permitted provided that the following conditions | |||||
* are met: | |||||
* | |||||
* 1. Redistributions of source code must retain the above copyright | |||||
* notice, this list of conditions and the following disclaimer. | |||||
* | |||||
* 2. Redistributions in binary form must reproduce the above copyright | |||||
* notice, this list of conditions and the following disclaimer in | |||||
* the documentation and/or other materials provided with the | |||||
* distribution. | |||||
* | |||||
* 3. The end-user documentation included with the redistribution, if | |||||
* any, must include the following acknowlegement: | |||||
* "This product includes software developed by the | |||||
* Apache Software Foundation (http://www.apache.org/)." | |||||
* Alternately, this acknowlegement may appear in the software itself, | |||||
* if and wherever such third-party acknowlegements normally appear. | |||||
* | |||||
* 4. The names "The Jakarta Project", "Ant", and "Apache Software | |||||
* Foundation" must not be used to endorse or promote products derived | |||||
* from this software without prior written permission. For written | |||||
* permission, please contact apache@apache.org. | |||||
* | |||||
* 5. Products derived from this software may not be called "Apache" | |||||
* nor may "Apache" appear in their names without prior written | |||||
* permission of the Apache Group. | |||||
* | |||||
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED | |||||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES | |||||
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | |||||
* DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR | |||||
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | |||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | |||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF | |||||
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | |||||
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, | |||||
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT | |||||
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | |||||
* SUCH DAMAGE. | |||||
* ==================================================================== | |||||
* | |||||
* This software consists of voluntary contributions made by many | |||||
* individuals on behalf of the Apache Software Foundation. For more | |||||
* information on the Apache Software Foundation, please see | |||||
* <http://www.apache.org/>. | |||||
*/ | |||||
package org.apache.tools.ant.taskdefs.optional.http; | |||||
import java.io.*; | |||||
import java.net.*; | |||||
import java.util.*; | |||||
import org.apache.tools.ant.*; | |||||
/** | |||||
* this class implements basic auth, the one that shouldn't be used | |||||
* except over an encrypted link or trusted network. | |||||
* | |||||
* @author matth@pobox.com Matt Humphrey | |||||
* @author steve_l@iseran.com Steve Loughran | |||||
* @created 20 March 2001 | |||||
*/ | |||||
public class HttpDigestAuth implements HttpAuthenticationStrategy { | |||||
/** | |||||
* Sets the AuthenticationHeader attribute of the HttpAuthStrategy | |||||
* object | |||||
* | |||||
* @param requestConnection The current request | |||||
* @param responseConnection any previous request, which can contain a | |||||
* challenge for the next round. Will often be null | |||||
* @param user the current user name | |||||
* @param password the current password | |||||
*/ | |||||
public void setAuthenticationHeader(URLConnection requestConnection, | |||||
URLConnection responseConnection, | |||||
String username, String password) | |||||
throws BuildException { | |||||
if (username != null) { | |||||
password = username == null ? "" : password; | |||||
String encodeStr = username + ":" + password; | |||||
Base64Encode encoder = new Base64Encode(); | |||||
char[] encodedPass = encoder.encodeBase64(encodeStr.getBytes()); | |||||
String authStr = "BASIC " + new String(encodedPass); | |||||
requestConnection.setRequestProperty("Authorization", authStr); | |||||
} | |||||
} | |||||
} | |||||
@@ -0,0 +1,93 @@ | |||||
/* | |||||
* The Apache Software License, Version 1.1 | |||||
* | |||||
* Copyright (c) 1999-2001 The Apache Software Foundation. All rights | |||||
* reserved. | |||||
* | |||||
* Redistribution and use in source and binary forms, with or without | |||||
* modification, are permitted provided that the following conditions | |||||
* are met: | |||||
* | |||||
* 1. Redistributions of source code must retain the above copyright | |||||
* notice, this list of conditions and the following disclaimer. | |||||
* | |||||
* 2. Redistributions in binary form must reproduce the above copyright | |||||
* notice, this list of conditions and the following disclaimer in | |||||
* the documentation and/or other materials provided with the | |||||
* distribution. | |||||
* | |||||
* 3. The end-user documentation included with the redistribution, if | |||||
* any, must include the following acknowlegement: | |||||
* "This product includes software developed by the | |||||
* Apache Software Foundation (http://www.apache.org/)." | |||||
* Alternately, this acknowlegement may appear in the software itself, | |||||
* if and wherever such third-party acknowlegements normally appear. | |||||
* | |||||
* 4. The names "The Jakarta Project", "Ant", and "Apache Software | |||||
* Foundation" must not be used to endorse or promote products derived | |||||
* from this software without prior written permission. For written | |||||
* permission, please contact apache@apache.org. | |||||
* | |||||
* 5. Products derived from this software may not be called "Apache" | |||||
* nor may "Apache" appear in their names without prior written | |||||
* permission of the Apache Group. | |||||
* | |||||
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED | |||||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES | |||||
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | |||||
* DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR | |||||
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | |||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | |||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF | |||||
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | |||||
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, | |||||
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT | |||||
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | |||||
* SUCH DAMAGE. | |||||
* ==================================================================== | |||||
* | |||||
* This software consists of voluntary contributions made by many | |||||
* individuals on behalf of the Apache Software Foundation. For more | |||||
* information on the Apache Software Foundation, please see | |||||
* <http://www.apache.org/>. | |||||
*/ | |||||
package org.apache.tools.ant.taskdefs.optional.http; | |||||
import java.io.*; | |||||
import java.net.*; | |||||
import java.util.*; | |||||
import org.apache.tools.ant.*; | |||||
/** | |||||
* This class implements boring old HTTP1.0 get. It represents | |||||
* a refactoring of Get to HttpTask and then into a specific | |||||
* subclass. because almost everything is done by the parent, | |||||
* this class is almost completely empty | |||||
* @since ant1.5 | |||||
* @author costin@dnt.ro | |||||
* @author matth@pobox.com Matt Humphrey | |||||
* @author steve_l@iseran.com Steve Loughran | |||||
* @created March 17, 2001 | |||||
*/ | |||||
public class HttpGet extends HttpTask { | |||||
/** | |||||
* override of test | |||||
* @return true always | |||||
*/ | |||||
protected boolean areParamsAddedToUrl() { | |||||
return true; | |||||
} | |||||
/** | |||||
* this must be overridden by implementations | |||||
* to set the request method to GET, POST, whatever | |||||
* @return GET, obviously | |||||
*/ | |||||
public String getRequestMethod() { | |||||
return "GET"; | |||||
} | |||||
} |
@@ -0,0 +1,112 @@ | |||||
/* | |||||
* The Apache Software License, Version 1.1 | |||||
* | |||||
* Copyright (c) 1999-2001 The Apache Software Foundation. All rights | |||||
* reserved. | |||||
* | |||||
* Redistribution and use in source and binary forms, with or without | |||||
* modification, are permitted provided that the following conditions | |||||
* are met: | |||||
* | |||||
* 1. Redistributions of source code must retain the above copyright | |||||
* notice, this list of conditions and the following disclaimer. | |||||
* | |||||
* 2. Redistributions in binary form must reproduce the above copyright | |||||
* notice, this list of conditions and the following disclaimer in | |||||
* the documentation and/or other materials provided with the | |||||
* distribution. | |||||
* | |||||
* 3. The end-user documentation included with the redistribution, if | |||||
* any, must include the following acknowlegement: | |||||
* "This product includes software developed by the | |||||
* Apache Software Foundation (http://www.apache.org/)." | |||||
* Alternately, this acknowlegement may appear in the software itself, | |||||
* if and wherever such third-party acknowlegements normally appear. | |||||
* | |||||
* 4. The names "The Jakarta Project", "Ant", and "Apache Software | |||||
* Foundation" must not be used to endorse or promote products derived | |||||
* from this software without prior written permission. For written | |||||
* permission, please contact apache@apache.org. | |||||
* | |||||
* 5. Products derived from this software may not be called "Apache" | |||||
* nor may "Apache" appear in their names without prior written | |||||
* permission of the Apache Group. | |||||
* | |||||
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED | |||||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES | |||||
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | |||||
* DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR | |||||
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | |||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | |||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF | |||||
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | |||||
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, | |||||
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT | |||||
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | |||||
* SUCH DAMAGE. | |||||
* ==================================================================== | |||||
* | |||||
* This software consists of voluntary contributions made by many | |||||
* individuals on behalf of the Apache Software Foundation. For more | |||||
* information on the Apache Software Foundation, please see | |||||
* <http://www.apache.org/>. | |||||
*/ | |||||
package org.apache.tools.ant.taskdefs.optional.http; | |||||
import java.io.*; | |||||
import java.net.*; | |||||
import java.util.*; | |||||
import org.apache.tools.ant.*; | |||||
/** | |||||
* Head is a get with a different method and the notion of | |||||
* destination file missing. Why would anyone want to make a HEAD | |||||
* request? a) side effects on the server and b) polling for stuff | |||||
* @since ant1.5 | |||||
* @author costin@dnt.ro | |||||
* @author matth@pobox.com Matt Humphrey | |||||
* @author steve_l@iseran.com Steve Loughran | |||||
* @created March 17, 2001 | |||||
*/ | |||||
public class HttpHead extends HttpTask { | |||||
/** | |||||
* this must be overridden by implementations | |||||
* to set the request method to GET, POST, whatever | |||||
* @return HEAD always | |||||
*/ | |||||
public String getRequestMethod() { | |||||
return "HEAD"; | |||||
} | |||||
/** | |||||
* override of test | |||||
* @return true always | |||||
*/ | |||||
protected boolean areParamsAddedToUrl() { | |||||
return true; | |||||
} | |||||
/** | |||||
* add a check for all the destination settings being | |||||
* null; nothing else makes sense for a HEAD. | |||||
* | |||||
* @return true if everything is fine. false if we have encountered | |||||
* problems but arent allowed to fail on an error, | |||||
* @exception BuildException only throw this when the failonerror | |||||
* flag is true | |||||
*/ | |||||
protected void verifyArguments() | |||||
throws BuildException { | |||||
BuildException trouble = null; | |||||
if(getDest() != null || getDestinationProperty() !=null) { | |||||
throw new BuildException("destination properties must not be defined for a HEAD request"); | |||||
} | |||||
super.verifyArguments(); | |||||
} | |||||
} |
@@ -0,0 +1,224 @@ | |||||
/* | |||||
* The Apache Software License, Version 1.1 | |||||
* | |||||
* Copyright (c) 1999-2001 The Apache Software Foundation. All rights | |||||
* reserved. | |||||
* | |||||
* Redistribution and use in source and binary forms, with or without | |||||
* modification, are permitted provided that the following conditions | |||||
* are met: | |||||
* | |||||
* 1. Redistributions of source code must retain the above copyright | |||||
* notice, this list of conditions and the following disclaimer. | |||||
* | |||||
* 2. Redistributions in binary form must reproduce the above copyright | |||||
* notice, this list of conditions and the following disclaimer in | |||||
* the documentation and/or other materials provided with the | |||||
* distribution. | |||||
* | |||||
* 3. The end-user documentation included with the redistribution, if | |||||
* any, must include the following acknowlegement: | |||||
* "This product includes software developed by the | |||||
* Apache Software Foundation (http://www.apache.org/)." | |||||
* Alternately, this acknowlegement may appear in the software itself, | |||||
* if and wherever such third-party acknowlegements normally appear. | |||||
* | |||||
* 4. The names "The Jakarta Project", "Ant", and "Apache Software | |||||
* Foundation" must not be used to endorse or promote products derived | |||||
* from this software without prior written permission. For written | |||||
* permission, please contact apache@apache.org. | |||||
* | |||||
* 5. Products derived from this software may not be called "Apache" | |||||
* nor may "Apache" appear in their names without prior written | |||||
* permission of the Apache Group. | |||||
* | |||||
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED | |||||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES | |||||
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | |||||
* DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR | |||||
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | |||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | |||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF | |||||
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | |||||
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, | |||||
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT | |||||
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | |||||
* SUCH DAMAGE. | |||||
* ==================================================================== | |||||
* | |||||
* This software consists of voluntary contributions made by many | |||||
* individuals on behalf of the Apache Software Foundation. For more | |||||
* information on the Apache Software Foundation, please see | |||||
* <http://www.apache.org/>. | |||||
*/ | |||||
package org.apache.tools.ant.taskdefs.optional.http; | |||||
import java.io.*; | |||||
import java.net.*; | |||||
import java.util.*; | |||||
import org.apache.tools.ant.*; | |||||
/** | |||||
* this class does post of form content or raw files. you can have one | |||||
* or the other -as soon as a file is specified all the other properties | |||||
* are dropped on the floor. | |||||
* a file post will have content type determined from the extension, you can | |||||
* override it | |||||
* @since ant1.5 | |||||
* @author matth@pobox.com Matt Humphrey | |||||
* @author steve_l@iseran.com Steve Loughran | |||||
* @created March 17, 2001 | |||||
*/ | |||||
public class HttpPost extends HttpTask { | |||||
/** | |||||
* file to upload. Null is ok | |||||
*/ | |||||
protected File postFile=null; | |||||
/** | |||||
* set the file to post | |||||
*/ | |||||
public void setUploadFile(File postFile) { | |||||
this.postFile=postFile; | |||||
} | |||||
/** | |||||
* query the post file | |||||
* @return the file or null for 'not defined' | |||||
*/ | |||||
public File getUploadFile() { | |||||
return postFile; | |||||
} | |||||
/** | |||||
* content type. ignored when the file is null, | |||||
* and even then we guess it if aint specified | |||||
*/ | |||||
private String contentType; | |||||
/** | |||||
* set the content type. Recommended if a file is being uploaded | |||||
*/ | |||||
public void setContentType(String contentType) { | |||||
this.contentType=contentType; | |||||
} | |||||
/** | |||||
* query the content type | |||||
* @return the content type or null for 'not defined' | |||||
*/ | |||||
public String getContentType() { | |||||
return contentType; | |||||
} | |||||
/** | |||||
* override of test | |||||
* @return false always | |||||
*/ | |||||
protected boolean areParamsAddedToUrl() { | |||||
return false; | |||||
} | |||||
/** | |||||
* this override of the base connect pumps | |||||
* up the parameter vector as form data | |||||
* | |||||
* @param connection where to connect to | |||||
* @exception BuildException build trouble | |||||
* @exception IOException IO trouble | |||||
*/ | |||||
protected URLConnection doConnect(URLConnection connection) | |||||
throws BuildException, IOException { | |||||
if(postFile==null) { | |||||
return doConnectFormPost(connection); | |||||
} | |||||
else { | |||||
return doConnectFilePost(connection); | |||||
} | |||||
} | |||||
/** | |||||
* feed up the parameter vector as form data | |||||
* | |||||
* @param connection where to connect to | |||||
* @exception BuildException build trouble | |||||
* @exception IOException IO trouble | |||||
*/ | |||||
protected URLConnection doConnectFormPost(URLConnection connection) | |||||
throws BuildException, IOException { | |||||
log("Posting data as a form",Project.MSG_VERBOSE); | |||||
// Create the output payload | |||||
ByteArrayOutputStream byteStream = new ByteArrayOutputStream(256); | |||||
PrintWriter out = new PrintWriter(byteStream); | |||||
writePostData(out); | |||||
out.flush(); | |||||
out.close(); | |||||
byte[] data=byteStream.toByteArray(); | |||||
//send it | |||||
return doConnectWithUpload(connection, | |||||
"application/x-www-form-urlencoded", | |||||
byteStream.size(), | |||||
new ByteArrayInputStream(data)); | |||||
} | |||||
/** | |||||
* feed up the data file | |||||
* | |||||
* @param connection where to connect to | |||||
* @exception BuildException build trouble | |||||
* @exception IOException IO trouble | |||||
*/ | |||||
protected URLConnection doConnectFilePost(URLConnection connection) | |||||
throws BuildException, IOException { | |||||
int size=(int)postFile.length(); | |||||
log("Posting file "+postFile,Project.MSG_VERBOSE); | |||||
InputStream instream=new FileInputStream(postFile); | |||||
String type=contentType; | |||||
if(type==null) { | |||||
type=ContentGuesser.guessContentType(postFile.getName()); | |||||
} | |||||
return doConnectWithUpload(connection, | |||||
type, | |||||
size, | |||||
instream); | |||||
} | |||||
/** | |||||
* write out post data in form mode | |||||
* | |||||
* @param out Description of Parameter | |||||
*/ | |||||
protected void writePostData(PrintWriter out) { | |||||
HttpRequestParameter param; | |||||
Vector params=getRequestParameters(); | |||||
for (int i = 0; i < params.size(); i++) { | |||||
if (i > 0) { | |||||
out.print('&'); | |||||
} | |||||
param = (HttpRequestParameter) params.get(i); | |||||
out.print(param.toString()); | |||||
log("parameter : "+param.toString(),Project.MSG_DEBUG); | |||||
} | |||||
} | |||||
/** | |||||
* this must be overridden by implementations | |||||
* to set the request method to GET, POST, whatever | |||||
* @return the method string | |||||
*/ | |||||
public String getRequestMethod() { | |||||
return "POST"; | |||||
} | |||||
} |
@@ -0,0 +1,141 @@ | |||||
/* | |||||
* The Apache Software License, Version 1.1 | |||||
* | |||||
* Copyright (c) 1999-2001 The Apache Software Foundation. All rights | |||||
* reserved. | |||||
* | |||||
* Redistribution and use in source and binary forms, with or without | |||||
* modification, are permitted provided that the following conditions | |||||
* are met: | |||||
* | |||||
* 1. Redistributions of source code must retain the above copyright | |||||
* notice, this list of conditions and the following disclaimer. | |||||
* | |||||
* 2. Redistributions in binary form must reproduce the above copyright | |||||
* notice, this list of conditions and the following disclaimer in | |||||
* the documentation and/or other materials provided with the | |||||
* distribution. | |||||
* | |||||
* 3. The end-user documentation included with the redistribution, if | |||||
* any, must include the following acknowlegement: | |||||
* "This product includes software developed by the | |||||
* Apache Software Foundation (http://www.apache.org/)." | |||||
* Alternately, this acknowlegement may appear in the software itself, | |||||
* if and wherever such third-party acknowlegements normally appear. | |||||
* | |||||
* 4. The names "The Jakarta Project", "Ant", and "Apache Software | |||||
* Foundation" must not be used to endorse or promote products derived | |||||
* from this software without prior written permission. For written | |||||
* permission, please contact apache@apache.org. | |||||
* | |||||
* 5. Products derived from this software may not be called "Apache" | |||||
* nor may "Apache" appear in their names without prior written | |||||
* permission of the Apache Group. | |||||
* | |||||
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED | |||||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES | |||||
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | |||||
* DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR | |||||
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | |||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | |||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF | |||||
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | |||||
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, | |||||
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT | |||||
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | |||||
* SUCH DAMAGE. | |||||
* ==================================================================== | |||||
* | |||||
* This software consists of voluntary contributions made by many | |||||
* individuals on behalf of the Apache Software Foundation. For more | |||||
* information on the Apache Software Foundation, please see | |||||
* <http://www.apache.org/>. | |||||
*/ | |||||
package org.apache.tools.ant.taskdefs.optional.http; | |||||
import java.net.URLEncoder; | |||||
/** | |||||
* This class is used to store name-value pairs for request parameters | |||||
* and headers | |||||
* | |||||
* @author matth@pobox.com Matt Humphrey | |||||
* @author steve_l@iseran.com Steve Loughran | |||||
* @created March 17, 2001 | |||||
*/ | |||||
public class HttpRequestParameter { | |||||
/** | |||||
* request name | |||||
*/ | |||||
private String name; | |||||
/** | |||||
* request value | |||||
*/ | |||||
private String value; | |||||
/** | |||||
* Sets the Name attribute of the request parameter | |||||
* | |||||
* @param name The new Name value | |||||
*/ | |||||
public void setName(String name) { | |||||
this.name = name; | |||||
} | |||||
/** | |||||
* Sets the Value attribute of the request parameter | |||||
* | |||||
* @param value The new Value value | |||||
*/ | |||||
public void setValue(String value) { | |||||
this.value = value; | |||||
} | |||||
/** | |||||
* Gets the Name attribute of the request parameter | |||||
* | |||||
* @return The Name value | |||||
*/ | |||||
public String getName() { | |||||
return name; | |||||
} | |||||
/** | |||||
* Gets the Value attribute of the request parameter | |||||
* | |||||
* @return The Value | |||||
*/ | |||||
public String getValue() { | |||||
return value; | |||||
} | |||||
/** | |||||
* Adds a feature to the Text attribute of the request parameter | |||||
* | |||||
* @param text The feature to be added to the Text attribute | |||||
*/ | |||||
public void addText(String text) { | |||||
this.value = text; | |||||
} | |||||
/** | |||||
* simple stringifier returning name and value encoded for use in HTTP requests | |||||
* | |||||
* @return a string for informational purposes | |||||
*/ | |||||
public String toString() { | |||||
return URLEncoder.encode(getName())+ | |||||
'='+URLEncoder.encode(getValue()); | |||||
} | |||||
} | |||||
@@ -0,0 +1,106 @@ | |||||
/* | |||||
* The Apache Software License, Version 1.1 | |||||
* | |||||
* Copyright (c) 1999-2001 The Apache Software Foundation. All rights | |||||
* reserved. | |||||
* | |||||
* Redistribution and use in source and binary forms, with or without | |||||
* modification, are permitted provided that the following conditions | |||||
* are met: | |||||
* | |||||
* 1. Redistributions of source code must retain the above copyright | |||||
* notice, this list of conditions and the following disclaimer. | |||||
* | |||||
* 2. Redistributions in binary form must reproduce the above copyright | |||||
* notice, this list of conditions and the following disclaimer in | |||||
* the documentation and/or other materials provided with the | |||||
* distribution. | |||||
* | |||||
* 3. The end-user documentation included with the redistribution, if | |||||
* any, must include the following acknowlegement: | |||||
* "This product includes software developed by the | |||||
* Apache Software Foundation (http://www.apache.org/)." | |||||
* Alternately, this acknowlegement may appear in the software itself, | |||||
* if and wherever such third-party acknowlegements normally appear. | |||||
* | |||||
* 4. The names "The Jakarta Project", "Ant", and "Apache Software | |||||
* Foundation" must not be used to endorse or promote products derived | |||||
* from this software without prior written permission. For written | |||||
* permission, please contact apache@apache.org. | |||||
* | |||||
* 5. Products derived from this software may not be called "Apache" | |||||
* nor may "Apache" appear in their names without prior written | |||||
* permission of the Apache Group. | |||||
* | |||||
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED | |||||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES | |||||
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | |||||
* DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR | |||||
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | |||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | |||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF | |||||
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | |||||
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, | |||||
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT | |||||
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | |||||
* SUCH DAMAGE. | |||||
* ==================================================================== | |||||
* | |||||
* This software consists of voluntary contributions made by many | |||||
* individuals on behalf of the Apache Software Foundation. For more | |||||
* information on the Apache Software Foundation, please see | |||||
* <http://www.apache.org/>. | |||||
*/ | |||||
package org.apache.tools.ant.taskdefs.optional.http; | |||||
import java.io.OutputStream; | |||||
import java.io.IOException; | |||||
/** | |||||
* simple output stream which discards all write requests this should | |||||
* really be part of java.io, as it is sporadically invaluable | |||||
* | |||||
* @author slo | |||||
* @created March 17, 2001 | |||||
*/ | |||||
public class NullOutputStream extends OutputStream { | |||||
/** | |||||
* discard all incoming bytes | |||||
* | |||||
* @param b byte to write | |||||
* @exception IOException never throwable in this subclass | |||||
*/ | |||||
public void write(int b) | |||||
throws IOException { | |||||
} | |||||
/** | |||||
* discard all incoming bytes | |||||
* | |||||
* @param b byte array | |||||
* @exception IOException never throwable in this subclass | |||||
*/ | |||||
public void write(byte[] b) | |||||
throws IOException { | |||||
} | |||||
/** | |||||
* discard all incoming bytes | |||||
* | |||||
* @param b byte array | |||||
* @param off starting offset | |||||
* @param len length to write | |||||
* @exception IOException never throwable in this subclass | |||||
*/ | |||||
public void write(byte[] b, | |||||
int off, | |||||
int len) | |||||
throws IOException { | |||||
} | |||||
} | |||||
@@ -0,0 +1,240 @@ | |||||
/* | |||||
* The Apache Software License, Version 1.1 | |||||
* | |||||
* Copyright (c) 1999-2001 The Apache Software Foundation. All rights | |||||
* reserved. | |||||
* | |||||
* Redistribution and use in source and binary forms, with or without | |||||
* modification, are permitted provided that the following conditions | |||||
* are met: | |||||
* | |||||
* 1. Redistributions of source code must retain the above copyright | |||||
* notice, this list of conditions and the following disclaimer. | |||||
* | |||||
* 2. Redistributions in binary form must reproduce the above copyright | |||||
* notice, this list of conditions and the following disclaimer in | |||||
* the documentation and/or other materials provided with the | |||||
* distribution. | |||||
* | |||||
* 3. The end-user documentation included with the redistribution, if | |||||
* any, must include the following acknowlegement: | |||||
* "This product includes software developed by the | |||||
* Apache Software Foundation (http://www.apache.org/)." | |||||
* Alternately, this acknowlegement may appear in the software itself, | |||||
* if and wherever such third-party acknowlegements normally appear. | |||||
* | |||||
* 4. The names "The Jakarta Project", "Ant", and "Apache Software | |||||
* Foundation" must not be used to endorse or promote products derived | |||||
* from this software without prior written permission. For written | |||||
* permission, please contact apache@apache.org. | |||||
* | |||||
* 5. Products derived from this software may not be called "Apache" | |||||
* nor may "Apache" appear in their names without prior written | |||||
* permission of the Apache Group. | |||||
* | |||||
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED | |||||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES | |||||
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | |||||
* DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR | |||||
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | |||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | |||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF | |||||
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | |||||
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, | |||||
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT | |||||
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | |||||
* SUCH DAMAGE. | |||||
* ==================================================================== | |||||
* | |||||
* This software consists of voluntary contributions made by many | |||||
* individuals on behalf of the Apache Software Foundation. For more | |||||
* information on the Apache Software Foundation, please see | |||||
* <http://www.apache.org/>. | |||||
*/ | |||||
package org.apache.tools.ant.taskdefs.optional.http; | |||||
import java.io.*; | |||||
import java.net.*; | |||||
import java.util.*; | |||||
import java.lang.reflect.*; | |||||
import org.apache.tools.ant.*; | |||||
/** | |||||
* proxy definition task. This allows all web tasks in the build file | |||||
* executed after this task to access the web through a proxy server | |||||
* | |||||
* @author steve_l@iseran.com Steve Loughran | |||||
* @created March 17, 2001 | |||||
*/ | |||||
public class SetProxy extends Task { | |||||
/** | |||||
* proxy details | |||||
*/ | |||||
protected String proxyHost = null; | |||||
/** | |||||
* name of proxy port | |||||
*/ | |||||
protected int proxyPort = 80; | |||||
/** | |||||
* socks host. | |||||
*/ | |||||
private String socksProxyHost = null; | |||||
/** | |||||
* socks proxy port. 1080 is the default | |||||
*/ | |||||
private int socksProxyPort = 1080; | |||||
/** | |||||
* set a proxy host. the port should be defined too | |||||
* | |||||
* @param hostname the new proxy hostname | |||||
*/ | |||||
public void setProxyHost(String hostname) { | |||||
proxyHost = hostname; | |||||
} | |||||
/** | |||||
* set the proxy port number. | |||||
* | |||||
* @param port port number of the proxy | |||||
*/ | |||||
public void setProxyPort(int port) { | |||||
proxyPort = port; | |||||
} | |||||
/** | |||||
* accessor to proxy hostname | |||||
* | |||||
* @return the hostname or null | |||||
*/ | |||||
public String getProxyHost() { | |||||
return proxyHost; | |||||
} | |||||
/** | |||||
* accessor to proxy hostname | |||||
* | |||||
* @return the port number | |||||
*/ | |||||
public int getProxyPort() { | |||||
return proxyPort; | |||||
} | |||||
/** | |||||
* Set the SocksProxyHost attribute | |||||
* | |||||
* @param host The new SocksProxyHost value | |||||
*/ | |||||
public void setSocksProxyHost(String host) { | |||||
this.socksProxyHost = host; | |||||
} | |||||
/** | |||||
* Set the SocksProxyPort attribute | |||||
* | |||||
* @param port The new SocksProxyPort value | |||||
*/ | |||||
public void setSocksProxyPort(int port) { | |||||
this.socksProxyPort = port; | |||||
} | |||||
/** | |||||
* if the proxy port and host settings are not null, then the settings | |||||
* get applied these settings last beyond the life of the object and | |||||
* apply to all network connections | |||||
* | |||||
* @return true if the settings were applied | |||||
*/ | |||||
public void applyWebProxySettings() { | |||||
boolean settingsChanged=false; | |||||
Properties prop = System.getProperties(); | |||||
if (getProxyHost() != null) { | |||||
log("Setting proxy to " + getProxyHost() + ":" + getProxyPort(), | |||||
Project.MSG_VERBOSE); | |||||
prop.put("http.proxyHost", getProxyHost()); | |||||
prop.put("http.proxyPort", String.valueOf(getProxyPort())); | |||||
prop.put("https.proxyHost", getProxyHost()); | |||||
prop.put("https.proxyPort", String.valueOf(getProxyPort())); | |||||
prop.put("ftp.proxyHost", getProxyHost()); | |||||
prop.put("ftp.proxyPort", String.valueOf(getProxyPort())); | |||||
settingsChanged=true; | |||||
} | |||||
//socks | |||||
if (socksProxyHost != null) { | |||||
log("Setting proxy to " + getProxyHost() + ":" + getProxyPort(), | |||||
Project.MSG_VERBOSE); | |||||
prop.put("socksProxyHost", socksProxyHost); | |||||
prop.put("socksProxyPort", Integer.toString(socksProxyPort)); | |||||
settingsChanged=true; | |||||
} | |||||
//for Java1.1 we need to tell the system that the settings are new | |||||
if(settingsChanged && project.getJavaVersion() == Project.JAVA_1_1) { | |||||
prop.put("http.proxySet", "true"); | |||||
sun.net.www.http.HttpClient.resetProperties(); | |||||
} | |||||
legacyResetProxySettingsCall(); | |||||
} | |||||
/** | |||||
* make a call to sun.net.www.http.HttpClient.resetProperties(); | |||||
* this is only needed for java 1.1; reflection is used to stop the compiler | |||||
* whining, and in case cleanroom JVMs dont have the class. | |||||
* @return Description of the Returned Value | |||||
* @returns | |||||
*/ | |||||
protected boolean legacyResetProxySettingsCall() { | |||||
try { | |||||
Class c = Class.forName("sun.net.www.http.HttpClient"); | |||||
Method reset = c.getMethod("resetProperties", null); | |||||
reset.invoke(null, null); | |||||
return true; | |||||
} | |||||
catch (ClassNotFoundException cnfe) { | |||||
return false; | |||||
} | |||||
catch (NoSuchMethodException e) { | |||||
return false; | |||||
} | |||||
catch (IllegalAccessException e) { | |||||
return false; | |||||
} | |||||
catch (InvocationTargetException e) { | |||||
return false; | |||||
} | |||||
} | |||||
/** | |||||
* Does the work. | |||||
* | |||||
* @exception BuildException Thrown in unrecoverable error. | |||||
*/ | |||||
public void execute() | |||||
throws BuildException { | |||||
applyWebProxySettings(); | |||||
} | |||||
} | |||||