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(); | |||||
| } | |||||
| } | |||||