Add Jetty project to external/jetty.

Bug: 14441587
Change-Id: If3dfb53d94a1d098f2eb0422934b52d855cda6be
diff --git a/.classpath b/.classpath
new file mode 100644
index 0000000..3b09b70
--- /dev/null
+++ b/.classpath
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry excluding="org/eclipse/jetty/jmx/|org/eclipse/jetty/util/log/jmx/|org/eclipse/jetty/server/handler/jmx/|org/eclipse/jetty/server/jmx/|org/eclipse/jetty/server/session/jmx/|org/eclipse/jetty/servlet/jmx/|org/eclipse/jetty/security/SpnegoLoginService.java|org/eclipse/jetty/security/SpnegoUserIdentity.java|org/eclipse/jetty/security/SpnegoUserPrincipal.java|org/eclipse/jetty/server/session/JDBCSessionIdManager.java|org/eclipse/jetty/server/session/JDBCSessionManager.java|org/eclipse/jetty/util/preventers/AppContextLeakPreventer.java|org/eclipse/jetty/util/preventers/AWTLeakPreventer.java" including="**/*.java" kind="src" path="src/java"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+	<classpathentry kind="lib" path="lib/javax.servlet-3.0.0.v201112011016.jar" sourcepath="lib/javax.servlet-3.0.0.v201112011016-sources.jar"/>
+	<classpathentry kind="lib" path="lib/slf4j-api-1.6.1.jar"/>
+	<classpathentry kind="lib" path="lib/slf4j-jdk14-1.6.1.jar"/>
+	<classpathentry kind="lib" path="lib/jetty-util-6.1.26.jar"/>
+	<classpathentry kind="output" path="bin/classes"/>
+</classpath>
diff --git a/.project b/.project
new file mode 100644
index 0000000..612c8cd
--- /dev/null
+++ b/.project
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+  <name>jetty</name>
+  <projects>
+  </projects>
+  <buildSpec>
+    <buildCommand>
+      <name>org.eclipse.jdt.core.javabuilder</name>
+    </buildCommand>
+  </buildSpec>
+  <natures>
+    <nature>org.eclipse.jdt.core.javanature</nature>
+  </natures>
+</projectDescription>
diff --git a/.settings/org.eclipse.jdt.core.prefs b/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..7341ab1
--- /dev/null
+++ b/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,11 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=1.7
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.7
diff --git a/Android.mk b/Android.mk
new file mode 100644
index 0000000..f7ed668
--- /dev/null
+++ b/Android.mk
@@ -0,0 +1,55 @@
+LOCAL_PATH := $(call my-dir)
+include $(CLEAR_VARS)
+
+NON_ANDROID_SRC := \
+	src/java/org/eclipse/jetty/jmx/ConnectorServer.java \
+	src/java/org/eclipse/jetty/jmx/MBeanContainer.java \
+	src/java/org/eclipse/jetty/jmx/ObjectMBean.java \
+	src/java/org/eclipse/jetty/servlet/jmx/ServletMappingMBean.java \
+	src/java/org/eclipse/jetty/servlet/jmx/FilterMappingMBean.java \
+	src/java/org/eclipse/jetty/servlet/jmx/HolderMBean.java \
+	src/java/org/eclipse/jetty/util/log/jmx/LogMBean.java \
+	src/java/org/eclipse/jetty/server/jmx/ServerMBean.java \
+	src/java/org/eclipse/jetty/server/handler/jmx/AbstractHandlerMBean.java \
+	src/java/org/eclipse/jetty/server/handler/jmx/ContextHandlerMBean.java \
+	src/java/org/eclipse/jetty/servlet/StatisticsServlet.java \
+	src/java/org/eclipse/jetty/server/session/jmx/AbstractSessionManagerMBean.java \
+	src/java/org/eclipse/jetty/security/SpnegoUserIdentity.java \
+	src/java/org/eclipse/jetty/security/SpnegoUserPrincipal.java \
+	src/java/org/eclipse/jetty/security/SpnegoLoginService.java \
+	src/java/org/eclipse/jetty/server/session/JDBCSessionIdManager.java \
+	src/java/org/eclipse/jetty/util/preventers/AppContextLeakPreventer.java \
+	src/java/org/eclipse/jetty/util/preventers/AWTLeakPreventer.java \
+	src/java/org/eclipse/jetty/servlet/listener/IntrospectorCleaner.java \
+	src/java/org/eclipse/jetty/util/preventers/AppContextLeakPreventer.java \
+	src/java/org/eclipse/jetty/util/preventers/AWTLeakPreventer.java \
+	src/java/org/eclipse/jetty/server/session/JDBCSessionManager.java
+
+LOCAL_SRC_FILES := $(filter-out $(NON_ANDROID_SRC), \
+	$(call all-java-files-under, src))
+
+LOCAL_MODULE := jetty
+LOCAL_MODULE_TAGS := optional
+LOCAL_SDK_VERSION := current
+
+LOCAL_STATIC_JAVA_LIBRARIES := \
+	jetty-util \
+	servlet-api \
+	slf4j-api \
+	slf4j-jdk14
+
+include $(BUILD_STATIC_JAVA_LIBRARY)
+
+#############################################################
+# Pre-built dependency jars
+#############################################################
+
+include $(CLEAR_VARS)
+
+LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES := \
+	servlet-api:lib/javax.servlet-3.0.0.v201112011016.jar \
+	jetty-util:lib/jetty-util-6.1.26.jar \
+	slf4j-api:lib/slf4j-api-1.6.1.jar \
+	slf4j-jdk14:lib/slf4j-jdk14-1.6.1.jar \
+
+include $(BUILD_MULTI_PREBUILT)
diff --git a/MODULE_LICENSE_APACHE2 b/MODULE_LICENSE_APACHE2
new file mode 100644
index 0000000..d645695
--- /dev/null
+++ b/MODULE_LICENSE_APACHE2
@@ -0,0 +1,202 @@
+
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+   APPENDIX: How to apply the Apache License to your work.
+
+      To apply the Apache License to your work, attach the following
+      boilerplate notice, with the fields enclosed by brackets "[]"
+      replaced with your own identifying information. (Don't include
+      the brackets!)  The text should be enclosed in the appropriate
+      comment syntax for the file format. We also recommend that a
+      file or class name and description of purpose be included on the
+      same "printed page" as the copyright notice for easier
+      identification within third-party archives.
+
+   Copyright [yyyy] [name of copyright owner]
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
diff --git a/MODULE_LICENSE_ECLIPSE1 b/MODULE_LICENSE_ECLIPSE1
new file mode 100644
index 0000000..79e486c
--- /dev/null
+++ b/MODULE_LICENSE_ECLIPSE1
@@ -0,0 +1,70 @@
+Eclipse Public License - v 1.0
+
+THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE PUBLIC LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT.
+
+1. DEFINITIONS
+
+"Contribution" means:
+
+a) in the case of the initial Contributor, the initial code and documentation distributed under this Agreement, and
+b) in the case of each subsequent Contributor:
+i) changes to the Program, and
+ii) additions to the Program;
+where such changes and/or additions to the Program originate from and are distributed by that particular Contributor. A Contribution 'originates' from a Contributor if it was added to the Program by such Contributor itself or anyone acting on such Contributor's behalf. Contributions do not include additions to the Program which: (i) are separate modules of software distributed in conjunction with the Program under their own license agreement, and (ii) are not derivative works of the Program.
+"Contributor" means any person or entity that distributes the Program.
+
+"Licensed Patents" mean patent claims licensable by a Contributor which are necessarily infringed by the use or sale of its Contribution alone or when combined with the Program.
+
+"Program" means the Contributions distributed in accordance with this Agreement.
+
+"Recipient" means anyone who receives the Program under this Agreement, including all Contributors.
+
+2. GRANT OF RIGHTS
+
+a) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide, royalty-free copyright license to reproduce, prepare derivative works of, publicly display, publicly perform, distribute and sublicense the Contribution of such Contributor, if any, and such derivative works, in source code and object code form.
+b) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide, royalty-free patent license under Licensed Patents to make, use, sell, offer to sell, import and otherwise transfer the Contribution of such Contributor, if any, in source code and object code form. This patent license shall apply to the combination of the Contribution and the Program if, at the time the Contribution is added by the Contributor, such addition of the Contribution causes such combination to be covered by the Licensed Patents. The patent license shall not apply to any other combinations which include the Contribution. No hardware per se is licensed hereunder.
+c) Recipient understands that although each Contributor grants the licenses to its Contributions set forth herein, no assurances are provided by any Contributor that the Program does not infringe the patent or other intellectual property rights of any other entity. Each Contributor disclaims any liability to Recipient for claims brought by any other entity based on infringement of intellectual property rights or otherwise. As a condition to exercising the rights and licenses granted hereunder, each Recipient hereby assumes sole responsibility to secure any other intellectual property rights needed, if any. For example, if a third party patent license is required to allow Recipient to distribute the Program, it is Recipient's responsibility to acquire that license before distributing the Program.
+d) Each Contributor represents that to its knowledge it has sufficient copyright rights in its Contribution, if any, to grant the copyright license set forth in this Agreement.
+3. REQUIREMENTS
+
+A Contributor may choose to distribute the Program in object code form under its own license agreement, provided that:
+
+a) it complies with the terms and conditions of this Agreement; and
+b) its license agreement:
+i) effectively disclaims on behalf of all Contributors all warranties and conditions, express and implied, including warranties or conditions of title and non-infringement, and implied warranties or conditions of merchantability and fitness for a particular purpose;
+ii) effectively excludes on behalf of all Contributors all liability for damages, including direct, indirect, special, incidental and consequential damages, such as lost profits;
+iii) states that any provisions which differ from this Agreement are offered by that Contributor alone and not by any other party; and
+iv) states that source code for the Program is available from such Contributor, and informs licensees how to obtain it in a reasonable manner on or through a medium customarily used for software exchange.
+When the Program is made available in source code form:
+
+a) it must be made available under this Agreement; and
+b) a copy of this Agreement must be included with each copy of the Program.
+Contributors may not remove or alter any copyright notices contained within the Program.
+
+Each Contributor must identify itself as the originator of its Contribution, if any, in a manner that reasonably allows subsequent Recipients to identify the originator of the Contribution.
+
+4. COMMERCIAL DISTRIBUTION
+
+Commercial distributors of software may accept certain responsibilities with respect to end users, business partners and the like. While this license is intended to facilitate the commercial use of the Program, the Contributor who includes the Program in a commercial product offering should do so in a manner which does not create potential liability for other Contributors. Therefore, if a Contributor includes the Program in a commercial product offering, such Contributor ("Commercial Contributor") hereby agrees to defend and indemnify every other Contributor ("Indemnified Contributor") against any losses, damages and costs (collectively "Losses") arising from claims, lawsuits and other legal actions brought by a third party against the Indemnified Contributor to the extent caused by the acts or omissions of such Commercial Contributor in connection with its distribution of the Program in a commercial product offering. The obligations in this section do not apply to any claims or Losses relating to any actual or alleged intellectual property infringement. In order to qualify, an Indemnified Contributor must: a) promptly notify the Commercial Contributor in writing of such claim, and b) allow the Commercial Contributor to control, and cooperate with the Commercial Contributor in, the defense and any related settlement negotiations. The Indemnified Contributor may participate in any such claim at its own expense.
+
+For example, a Contributor might include the Program in a commercial product offering, Product X. That Contributor is then a Commercial Contributor. If that Commercial Contributor then makes performance claims, or offers warranties related to Product X, those performance claims and warranties are such Commercial Contributor's responsibility alone. Under this section, the Commercial Contributor would have to defend claims against the other Contributors related to those performance claims and warranties, and if a court requires any other Contributor to pay any damages as a result, the Commercial Contributor must pay those damages.
+
+5. NO WARRANTY
+
+EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely responsible for determining the appropriateness of using and distributing the Program and assumes all risks associated with its exercise of rights under this Agreement , including but not limited to the risks and costs of program errors, compliance with applicable laws, damage to or loss of data, programs or equipment, and unavailability or interruption of operations.
+
+6. DISCLAIMER OF LIABILITY
+
+EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), 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 OR DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
+7. GENERAL
+
+If any provision of this Agreement is invalid or unenforceable under applicable law, it shall not affect the validity or enforceability of the remainder of the terms of this Agreement, and without further action by the parties hereto, such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable.
+
+If Recipient institutes patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Program itself (excluding combinations of the Program with other software or hardware) infringes such Recipient's patent(s), then such Recipient's rights granted under Section 2(b) shall terminate as of the date such litigation is filed.
+
+All Recipient's rights under this Agreement shall terminate if it fails to comply with any of the material terms or conditions of this Agreement and does not cure such failure in a reasonable period of time after becoming aware of such noncompliance. If all Recipient's rights under this Agreement terminate, Recipient agrees to cease use and distribution of the Program as soon as reasonably practicable. However, Recipient's obligations under this Agreement and any licenses granted by Recipient relating to the Program shall continue and survive.
+
+Everyone is permitted to copy and distribute copies of this Agreement, but in order to avoid inconsistency the Agreement is copyrighted and may only be modified in the following manner. The Agreement Steward reserves the right to publish new versions (including revisions) of this Agreement from time to time. No one other than the Agreement Steward has the right to modify this Agreement. The Eclipse Foundation is the initial Agreement Steward. The Eclipse Foundation may assign the responsibility to serve as the Agreement Steward to a suitable separate entity. Each new version of the Agreement will be given a distinguishing version number. The Program (including Contributions) may always be distributed subject to the version of the Agreement under which it was received. In addition, after a new version of the Agreement is published, Contributor may elect to distribute the Program (including its Contributions) under the new version. Except as expressly stated in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to the intellectual property of any Contributor under this Agreement, whether expressly, by implication, estoppel or otherwise. All rights in the Program not expressly granted under this Agreement are reserved.
+
+This Agreement is governed by the laws of the State of New York and the intellectual property laws of the United States of America. No party to this Agreement will bring a legal action under this Agreement more than one year after the cause of action arose. Each party waives its rights to a jury trial in any resulting litigation.
diff --git a/MODULE_LICENSE_SLF4J b/MODULE_LICENSE_SLF4J
new file mode 100644
index 0000000..37050c9
--- /dev/null
+++ b/MODULE_LICENSE_SLF4J
@@ -0,0 +1,21 @@
+ Copyright (c) 2004-2013 QOS.ch
+ All rights reserved.
+
+ Permission is hereby granted, free  of charge, to any person obtaining
+ a  copy  of this  software  and  associated  documentation files  (the
+ "Software"), to  deal in  the Software without  restriction, including
+ without limitation  the rights to  use, copy, modify,  merge, publish,
+ distribute,  sublicense, and/or sell  copies of  the Software,  and to
+ permit persons to whom the Software  is furnished to do so, subject to
+ the following conditions:
+ 
+ The  above  copyright  notice  and  this permission  notice  shall  be
+ included in all copies or substantial portions of the Software.
+ 
+ THE  SOFTWARE IS  PROVIDED  "AS  IS", WITHOUT  WARRANTY  OF ANY  KIND,
+ EXPRESS OR  IMPLIED, INCLUDING  BUT NOT LIMITED  TO THE  WARRANTIES OF
+ MERCHANTABILITY,    FITNESS    FOR    A   PARTICULAR    PURPOSE    AND
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+ OF CONTRACT, TORT OR OTHERWISE,  ARISING FROM, OUT OF OR IN CONNECTION
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/NOTICE b/NOTICE
new file mode 100644
index 0000000..66eeea2
--- /dev/null
+++ b/NOTICE
@@ -0,0 +1,56 @@
+==============================================================
+ Jetty Web Container
+ Copyright 1995-2014 Mort Bay Consulting Pty Ltd.
+==============================================================
+
+The Jetty Web Container is Copyright Mort Bay Consulting Pty Ltd
+unless otherwise noted.
+
+Jetty is dual licensed under both
+
+  * The Apache 2.0 License
+    http://www.apache.org/licenses/LICENSE-2.0.html
+
+      and
+
+  * The Eclipse Public 1.0 License
+    http://www.eclipse.org/legal/epl-v10.html
+
+Jetty may be distributed under either license.
+
+The javax.servlet package used was sourced from the Apache
+Software Foundation and is distributed under the apache 2.0
+license.
+
+The UnixCrypt.java code implements the one way cryptography used by
+Unix systems for simple password protection.  Copyright 1996 Aki Yoshida,
+modified April 2001  by Iris Van den Broeke, Daniel Deville.
+Permission to use, copy, modify and distribute UnixCrypt
+for non-commercial or commercial purposes and without fee is
+granted provided that the copyright notice appears in all copies.
+
+==============================================================
+ SLF4J
+ Copyright (c) 2004-2013 QOS.ch
+==============================================================
+ Copyright (c) 2004-2013 QOS.ch
+ All rights reserved.
+
+ Permission is hereby granted, free  of charge, to any person obtaining
+ a  copy  of this  software  and  associated  documentation files  (the
+ "Software"), to  deal in  the Software without  restriction, including
+ without limitation  the rights to  use, copy, modify,  merge, publish,
+ distribute,  sublicense, and/or sell  copies of  the Software,  and to
+ permit persons to whom the Software  is furnished to do so, subject to
+ the following conditions:
+ 
+ The  above  copyright  notice  and  this permission  notice  shall  be
+ included in all copies or substantial portions of the Software.
+ 
+ THE  SOFTWARE IS  PROVIDED  "AS  IS", WITHOUT  WARRANTY  OF ANY  KIND,
+ EXPRESS OR  IMPLIED, INCLUDING  BUT NOT LIMITED  TO THE  WARRANTIES OF
+ MERCHANTABILITY,    FITNESS    FOR    A   PARTICULAR    PURPOSE    AND
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+ OF CONTRACT, TORT OR OTHERWISE,  ARISING FROM, OUT OF OR IN CONNECTION
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/README.android b/README.android
new file mode 100644
index 0000000..012a796
--- /dev/null
+++ b/README.android
@@ -0,0 +1,48 @@
+URL: http://www.eclipse.org/jetty/
+Version: 8.1.15.v20140411
+License: Apache 2 or Eclipse 1.0 (see NOTICE file for information on licensing for dependencies)
+
+Description
+-------------------
+Jetty is a lightweight, servlet container implementation in Java.
+
+The pom.xml_saved file is included as a reference for bringing down the complete, original source
+code and dependencies using maven. Note, the file structure generated with pom.xml_saved will
+not match the current file structure, as noted in the Local Modifcations section. Furthermore, not
+all of the original sources are compatible with the android runtime. Incompatible source files are
+listed in the Android.mk file under "NON_ANDROID_SRC".
+
+Local Modifcations
+-------------------
+The complete original source code was downloaded using pom.xml_saved. The pom file creates a separate
+directory for each jetty package. the src directory of the relevant packages were merged into a single
+src directory. The relevant packages which were merged into the single src directory are:
+-jetty-client
+-jetty-continuation
+-jetty-http
+-jetty-io
+-jetty-security
+-jetty-server
+-jetty-servlet
+-jetty-servlets
+-jetty-util
+-jetty-webapp
+-jetty-websocket
+-jetty-xml
+
+All other packages were discarded. Prebuilt dependencies (SLF4J, the servlet api and jetty utils)
+were copied from the maven repository into the lib directory. pom files and sha1 files are included
+with the prebuilt dependencies for reference.
+
+The eclipse files were created manually. The .classpath file includes the prebuilt dependencies in the
+lib directory and excludes the sources files that are not compatible with the android runtime (see
+"NON_ANDROID_SRC" in the Android.mk file). the .project file was copied from one of the .project
+files created by maven.
+
+Updating this Project
+-------------------
+To update this project, the updated packages should be fetched from maven and their src directories should
+be merged with the local src directory. Any new or updated prebuilt dependencies should be copied into
+the lib directory. The Android.mk file (.classpath file for eclipse) should be updated accordingly. It
+may be necessary to add more files to "NON_ANDROID_SRC" in the Android.mk file (the excluding element
+in .classpath for eclipse).
diff --git a/VERSION.txt b/VERSION.txt
new file mode 100644
index 0000000..c41d18f
--- /dev/null
+++ b/VERSION.txt
@@ -0,0 +1,6209 @@
+jetty-8.1.15.v20140411 - 11 April 2014
+ + 397167 Remote Access documentation is wrong
+ + 419799 complete after exceptions thrown from async error pages
+ + 420776 complete error pages after startAsync
+ + 421197 fix method comment and ensure close synchronized
+ + 422137 Added maxQueued to QueuedThreadPool MBean
+ + 424180 improve bad message errors
+ + 425038 WebSocketClient leaks file handles when exceptions are thrown from
+   open()
+ + 425551 Memory Leak in SelectConnector$ConnectTimeout.expired.
+ + 426658 backport Bug 425930 to jetty-8
+ + 427761 allow endpoints to be interrupted
+ + 428708 JDBCSessionIdManager when clearing expired sessions failed, jetty
+   should still be able to startup
+ + 428710 JDBCSession(Id)Manager use 'read committed isolation level'
+ + 430968 Use wrapped response with async dispatch
+ + 432452 ConnectHandler does not timeout sockets in FIN_WAIT2.
+
+jetty-8.1.14.v20131031 - 31 October 2013
+ + 417772 fixed low resources idle timeout
+ + 418636 Name anonymous filter and holders with classname-hashcode
+ + 419432 Allow to override the SslContextFactory on a per-destination basis.
+ + 420048 DefaultServlet alias checks configured resourceBase
+ + 420530 AbstractLoginModule never fails a login
+
+jetty-7.6.14.v20131031 - 31 October 2013
+ + 417772 fixed low resources idle timeout
+ + 418636 Name anonymous filter and holders with classname-hashcode
+ + 419432 Allow to override the SslContextFactory on a per-destination basis.
+ + 420048 DefaultServlet alias checks configured resourceBase
+ + 420530 AbstractLoginModule never fails a login
+
+jetty-8.1.13.v20130916 - 16 September 2013
+ + 412629 PropertyFileLoginModule doesn't cache user configuration file even
+   for refreshInterval=0
+ + 413484 setAttribute in nosql session management better handles _dirty status
+ + 413684 deprecated unsafe alias checkers
+ + 414235 RequestLogHandler configured on a context fails to handle forwarded
+   requests
+ + 414393 StringIndexOutofBoundsException with > 8k multipart content without
+   CR or LF
+ + 414431 Avoid debug NPE race
+ + 414507 Ensure AnnotationParser ignores parent dir hierarchy when checking
+   for hidden dirnames
+ + 414652 WebSocket's sendMessage() may hang on congested connections.
+ + 415192 <jsp-file> maps to JspPropertyGroupServlet instead of JspServlet
+ + 415401 Add XmlConfiguration.initializeDefaults that allows to set default
+   values for any XmlConfiguration that may be overridden in the config file
+ + 416266 HttpServletResponse.encodeURL() encodes on first request when only
+   SessionTrackingMode.COOKIE is used
+ + 416585 WebInfConfiguration examines webapp classloader first instead of its
+   parent when looking for container jars
+ + 416787 StringIndexOutOfBounds with a pathMap of ""
+ + 416990 JMX names statically unique
+
+jetty-7.6.13.v20130916 - 16 September 2013
+ + 412629 PropertyFileLoginModule doesn't cache user configuration file even
+   for refreshInterval=0
+ + 413484 setAttribute in nosql session management better handles _dirty status
+ + 413684 deprecated unsafe alias checkers
+ + 414235 RequestLogHandler configured on a context fails to handle forwarded
+   requests
+ + 414393 StringIndexOutofBoundsException with > 8k multipart content without
+   CR or LF
+ + 414431 Avoid debug NPE race
+ + 414507 Ensure AnnotationParser ignores parent dir hierarchy when checking
+   for hidden dirnames
+ + 414652 WebSocket's sendMessage() may hang on congested connections.
+ + 415192 <jsp-file> maps to JspPropertyGroupServlet instead of JspServlet
+ + 415401 Add XmlConfiguration.initializeDefaults that allows to set default
+   values for any XmlConfiguration that may be overridden in the config file
+ + 416585 WebInfConfiguration examines webapp classloader first instead of its
+   parent when looking for container jars
+ + 416990 JMX names statically unique
+
+jetty-8.1.12.v20130726 - 26 July 2013
+ + 396706 CGI support parameters
+ + 397193 MongoSessionManager refresh updates last access time
+ + 407342 ReloadedSessionMissingClassTest uses class compiled with jdk7
+ + 408529 Etags set in 304 response
+ + 408600 set correct jetty.url in all pom files
+ + 408642 setContentType from addHeader
+ + 408662 In pax-web servlet services requests even if init() has not finished
+   running
+ + 408806 getParameter returns null on Multipart request if called before
+   request.getPart()/getParts()
+ + 408909 GzipFilter setting of headers when reset and/or not compressed
+ + 409028 Jetty HttpClient does not work with proxy CONNECT method.
+ + 409133 Empty <welcome-file> causes StackOverflowError
+ + 409436 NPE on context restart using dynamic servlet registration
+ + 409449 Ensure servlets, filters and listeners added via dynamic
+   registration, annotations or descriptors are cleaned on context restarts
+ + 409556 FileInputStream not closed in DirectNIOBuffer
+ + 410405 Avoid NPE for requestDispatcher(../)
+ + 410630 MongoSessionManager conflicting session update op
+ + 410750 NoSQLSessions: implement session context data persistence across
+   server restarts
+ + 410893 async support defaults to false for spec created servlets and filters
+ + 411135 HttpClient may send proxied https requests to the proxy instead of
+   the target server.
+ + 411216 RequestLogHandler handles async completion
+ + 411458 MultiPartFilter getParameterMap doesn't preserve multivalued
+   parameters 411459  MultiPartFilter.Wrapper getParameter should use charset
+   encoding of part
+ + 411755 MultiPartInputStreamParser fails on base64 encoded content
+ + 411909 GzipFilter flushbuffer() results in erroneous finish() call
+ + 412712 HttpClient does not send the terminal chunk after partial writes.
+ + 412750 HttpClient close expired connections fix
+ + 413371 Default JSON.Converters for List and Set.
+ + 413372 JSON Enum uses name rather than toString()
+ + 413684 Trailing slash shows JSP source
+ + 413812 Make RateTracker serializable
+
+jetty-7.6.12.v20130726 - 26 July 2013
+ + 396706 CGI support parameters
+ + 397193 MongoSessionManager refresh updates last access time
+ + 407342 ReloadedSessionMissingClassTest uses class compiled with jdk7
+ + 408529 Etags set in 304 response
+ + 408600 set correct jetty.url in all pom files
+ + 408642 setContentType from addHeader
+ + 408662 In pax-web servlet services requests even if init() has not finished
+   running
+ + 408909 GzipFilter setting of headers when reset and/or not compressed
+ + 409028 Jetty HttpClient does not work with proxy CONNECT method.
+ + 409133 Empty <welcome-file> causes StackOverflowError
+ + 409556 FileInputStream not closed in DirectNIOBuffer
+ + 410630 MongoSessionManager conflicting session update op
+ + 410750 NoSQLSessions: implement session context data persistence across
+   server restarts
+ + 411135 HttpClient may send proxied https requests to the proxy instead of
+   the target server.
+ + 411216 RequestLogHandler handles async completion
+ + 411458 MultiPartFilter getParameterMap doesn't preserve multivalued
+   parameters 411459  MultiPartFilter.Wrapper getParameter should use charset
+   encoding of part
+ + 411755 MultiPartInputStreamParser fails on base64 encoded content
+ + 411909 GzipFilter flushbuffer() results in erroneous finish() call
+ + 412712 HttpClient does not send the terminal chunk after partial writes.
+ + 412750 HttpClient close expired connections fix
+ + 413371 Default JSON.Converters for List and Set.
+ + 413372 JSON Enum uses name rather than toString()
+ + 413684 Trailing slash shows JSP source
+ + 413812 Make RateTracker serializable
+
+jetty-8.1.11.v20130520 - 20 May 2013
+ + 402844 STOP.PORT & STOP.KEY behaviour has changed
+ + 403281 jetty.sh waits for started or failure before returning
+ + 403513 jetty:run goal cannot be executed twice during the maven build
+ + 403570 Asynchronous Request Logging
+ + 404010 fix cast exception in mongodb session manager
+ + 404128 Add Vary headers rather than set them
+ + 404283 org.eclipse.jetty.util.Scanner.scanFile() dies with an NPE if
+   listFiles() returns null
+ + 404325 data constraint redirection does send default port
+ + 404517 Close connection if request received after half close
+ + 404789 Support IPv6 addresses in DoSFilter white list.
+ + 404958 Fixed Resource.newSystemResource striped / handling
+ + 405281 allow filemappedbuffers to not be used
+ + 405537 NPE in rendering JSP using SPDY and wrapped ServletRequest
+ + 406437 Digest Auth supports out of order nc
+ + 406618 Jetty startup in OSGi Equinox fails when using option
+   jetty.home.bundle=org.eclipse.jetty.osgi.boot
+ + 406923 CR line termination
+ + 407136 @PreDestroy called after Servlet.destroy()
+ + 407173 java.lang.IllegalStateException: null when using JDBCSessionManager
+ + 407931 Add toggle for failing on servlet availability
+ + 407976 JDBCSessionIdManager potentially leaves server in bad state after
+   startup
+ + 408077 HashSessionManager leaves file handles open after being stopped
+ + 408446 Multipart parsing issue with boundry and charset in ContentType
+   header
+
+jetty-8.1.10.v20130312 - 12 March 2013
+ + 376273 Early EOF because of SSL Protocol Error on
+   https://api-3t.paypal.com/nvp.
+ + 381521 allow compress methods to be configured
+ + 392129 fixed handling of timeouts after startAsync
+ + 394064 ensure that JarFile instances are closed on JarFileResource.release()
+ + 398649 ServletContextListener.contextDestroyed() is not called on
+   ContextHandler unregistration
+ + 399703 made encoding error handling consistent
+ + 399799 do not hold lock while calling invalidation listeners
+ + 399967 Shutdown hook calls destroy
+ + 400040 NullPointerException in HttpGenerator.prepareBuffers
+ + 400142 ConcurrentModificationException in JDBC SessionManger
+ + 400144 When loading a session fails the JDBCSessionManger produces duplicate
+   session IDs
+ + 400312 ServletContextListener.contextInitialized() is not called when added
+   in ServletContainerInitializer.onStartup
+ + 400457 Thread context classloader hierarchy not searched when finding
+   webapp's java:comp/env
+ + 400859 limit max size of writes from cached content
+ + 401211 Remove requirement for jetty-websocket.jar in WEB-INF/lib
+ + 401317 Make Safari 5.x websocket support minVersion level error more clear
+ + 401382 Prevent parseAvailable from parsing next chunk when previous has not
+   been consumed. Handle no content-type in chunked request.
+ + 401474 Performance problem in org.eclipse.jetty.annotation.AnnotationParser
+ + 401485 zip file closed exception
+ + 401531 StringIndexOutOfBoundsException for "/*" <url-pattern> of
+   <jsp-property-group> fix for multiple mappings to *.jsp
+ + 401908 Enhance DosFilter to allow dynamic configuration of attributes.
+ + 402048 org.eclipse.jetty.server.ShutdownMonitor doesn't stop after the jetty
+   server is stopped
+ + 402485 reseed secure random
+ + 402735 jetty.sh to support status which is == check
+ + 402833 Test harness for global error page and hide exception message from
+   reason string
+
+jetty-7.6.11.v20130520 - 20 May 2013
+ + 402844 STOP.PORT & STOP.KEY behaviour has changed
+ + 403281 jetty.sh waits for started or failure before returning
+ + 403513 jetty:run goal cannot be executed twice during the maven build
+ + 403570 Asynchronous Request Logging
+ + 404010 fix cast exception in mongodb session manager
+ + 404128 Add Vary headers rather than set them
+ + 404283 org.eclipse.jetty.util.Scanner.scanFile() dies with an NPE if
+   listFiles() returns null
+ + 404325 data constraint redirection does send default port
+ + 404517 Close connection if request received after half close
+ + 404789 Support IPv6 addresses in DoSFilter white list.
+ + 404958 Fixed Resource.newSystemResource striped / handling
+ + 405281 allow filemappedbuffers to not be used
+ + 405537 NPE in rendering JSP using SPDY and wrapped ServletRequest
+ + 406437 Digest Auth supports out of order nc
+ + 406923 CR line termination
+ + 407136 @PreDestroy called after Servlet.destroy()
+ + 407173 java.lang.IllegalStateException: null when using JDBCSessionManager
+ + 407976 JDBCSessionIdManager potentially leaves server in bad state after
+   startup
+ + 408077 HashSessionManager leaves file handles open after being stopped
+ + 408446 Multipart parsing issue with boundry and charset in ContentType
+   header
+
+jetty-7.6.10.v20130312 - 12 March 2013
+ + 376273 Early EOF because of SSL Protocol Error on
+   https://api-3t.paypal.com/nvp.
+ + 381521 allow compress methods to be configured
+ + 394064 ensure that JarFile instances are closed on JarFileResource.release()
+ + 398649 ServletContextListener.contextDestroyed() is not called on
+   ContextHandler unregistration
+ + 399703 made encoding error handling consistent
+ + 399799 do not hold lock while calling invalidation listeners
+ + 399967 Shutdown hook calls destroy
+ + 400040 NullPointerException in HttpGenerator.prepareBuffers
+ + 400142 ConcurrentModificationException in JDBC SessionManger
+ + 400144 When loading a session fails the JDBCSessionManger produces duplicate
+   session IDs
+ + 400457 Thread context classloader hierarchy not searched when finding
+   webapp's java:comp/env
+ + 400859 limit max size of writes from cached content
+ + 401211 Remove requirement for jetty-websocket.jar in WEB-INF/lib
+ + 401317 Make Safari 5.x websocket support minVersion level error more clear
+ + 401382 Prevent parseAvailable from parsing next chunk when previous has not
+   been consumed. Handle no content-type in chunked request.
+ + 401474 Performance problem in org.eclipse.jetty.annotation.AnnotationParser
+ + 401531 StringIndexOutOfBoundsException for "/*" <url-pattern> of
+   <jsp-property-group> fix for multiple mappings to *.jsp
+ + 401908 Enhance DosFilter to allow dynamic configuration of attributes.
+ + 402048 org.eclipse.jetty.server.ShutdownMonitor doesn't stop after the jetty
+   server is stopped
+ + 402485 reseed secure random
+ + 402735 jetty.sh to support status which is == check
+ + 402833 Test harness for global error page and hide exception message from
+   reason string
+
+jetty-8.1.9.v20130131 - 31 January 2013
+ + 362226 HttpConnection "wait" call causes thread resource exhaustion
+ + 367638 throw exception for excess form keys
+ + 381521 Only set Vary header when content could be compressed
+ + 382237 support non java JSON classes
+ + 391248 fixing localhost checking in statistics servlet
+ + 391249 fix for invalid XML node dispatchedTimeMean in statistics servlet
+ + 391345 fix missing br tag in statistics servlet
+ + 391623 Add option to --stop to wait for target jetty to stop
+ + 392417 Prevent Cookie parsing interpreting unicode chars
+ + 392492 expect headers only examined for requests>=HTTP/1.1
+ + 393075 1xx 204 and 304 ignore all headers suggesting content
+ + 393158 java.lang.IllegalStateException when sending an empty InputStream
+ + 393220 remove dead code from ServletHandler and log ServletExceptions in
+   warn instead of debug
+ + 393947 additional tests
+ + 393968 fix typo in javadoc
+ + 394294 A web-bundle started before jetty-osgi should be deployed as a webapp
+   when jetty-osgi starts
+ + 394514 Preserve URI parameters in sendRedirect
+ + 394541 remove continuation jar from distro, add as dep to test-jetty-webapp
+ + 394719 remove regex from classpath matching
+ + 394811 Make JAASLoginService log login failures to DEBUG instead of WARN.
+   Same for some other exceptions.
+ + 394829 Session can not be restored after SessionManager.setIdleSavePeriod
+   has saved the session
+ + 394839 Allow multipart mime with no boundary
+ + 394870 Make enablement of remote access to test webapp configurable in
+   override-web.xml
+ + 395215 Multipart mime with just LF and no CRLF
+ + 395380 add ValidUrlRule to jetty-rewrite
+ + 395394 allow logging from boot classloader
+ + 396253 FilterRegistration wrong order
+ + 396459 Log specific message for empty request body for multipart mime
+   requests
+ + 396500 HttpClient Exchange takes forever to complete when less content sent
+   than Content-Length
+ + 396574 add JETTY_HOME as a location for pid to be found
+ + 396886 MultiPartFilter strips bad escaping on filename="..."
+ + 397110 Accept %uXXXX encodings in URIs
+ + 397111 Tolerate empty or excessive whitespace preceeding MultiParts
+ + 397112 Requests with byte-range throws NPE if requested file has no mimetype
+   (eg no file extension)
+ + 397130 maxFormContentSize set in jetty.xml is ignored
+ + 397190 improve ValidUrlRule to iterate on codepoints
+ + 397321 Wrong condition in default start.config for annotations
+ + 397535 Support pluggable alias checking to support symbolic links
+ + 398337 UTF-16 percent encoding in UTF-16 form content
+ + 399132 check parent dir of session store against file to be removed
+ + JETTY-1533 handle URL with no path
+
+jetty-7.6.9.v20130131 - 31 January 2013
+ + 362226 HttpConnection "wait" call causes thread resource exhaustion
+ + 367638 throw exception for excess form keys
+ + 381521 Only set Vary header when content could be compressed
+ + 382237 support non java JSON classes
+ + 391248 fixing localhost checking in statistics servlet
+ + 391249 fix for invalid XML node dispatchedTimeMean in statistics servlet
+ + 391345 fix missing br tag in statistics servlet
+ + 391623 Add option to --stop to wait for target jetty to stop
+ + 392417 Prevent Cookie parsing interpreting unicode chars
+ + 392492 expect headers only examined for requests>=HTTP/1.1
+ + 393075 1xx 204 and 304 ignore all headers suggesting content
+ + 393220 remove dead code from ServletHandler and log ServletExceptions in
+   warn instead of debug
+ + 393947 additional tests
+ + 393968 fix typo in javadoc
+ + 394514 Preserve URI parameters in sendRedirect
+ + 394541 remove continuation jar from distro, add as dep to test-jetty-webapp
+ + 394719 remove regex from classpath matching
+ + 394811 Make JAASLoginService log login failures to DEBUG instead of WARN.
+   Same for some other exceptions.
+ + 394829 Session can not be restored after SessionManager.setIdleSavePeriod
+   has saved the session
+ + 394839 Allow multipart mime with no boundary
+ + 395215 Multipart mime with just LF and no CRLF
+ + 395380 add ValidUrlRule to jetty-rewrite
+ + 395394 allow logging from boot classloader
+ + 396459 Log specific message for empty request body for multipart mime
+   requests
+ + 396500 HttpClient Exchange takes forever to complete when less content sent
+   than Content-Length
+ + 396574 add JETTY_HOME as a location for pid to be found
+ + 396886 MultiPartFilter strips bad escaping on filename="..."
+ + 397110 Accept %uXXXX encodings in URIs
+ + 397111 Tolerate empty or excessive whitespace preceeding MultiParts
+ + 397112 Requests with byte-range throws NPE if requested file has no mimetype
+   (eg no file extension)
+ + 397130 maxFormContentSize set in jetty.xml is ignored
+ + 397190 improve ValidUrlRule to iterate on codepoints
+ + 397321 Wrong condition in default start.config for annotations
+ + 397535 Support pluggable alias checking to support symbolic links
+ + 398337 UTF-16 percent encoding in UTF-16 form content
+ + 399132 check parent dir of session store against file to be removed
+ + JETTY-1533 handle URL with no path
+
+jetty-8.1.8.v20121106 - 06 November 2012
+ + 371170 MongoSessionManager LastAccessTimeTest fails
+ + 388675 Non utf8 encoded query strings not decoded to parameter map using
+   queryEncoding
+ + 388706 Avoid unnecessary indirection through Charset.name
+ + 389390 AnnotationConfiguration is ignored if the metadata-complete attribute
+   is present in an override descriptor regardless of the value
+ + 389452 if web-fragment metadata-complete==true still scan its related jar if
+   there there is a ServletContainerInitializer, ensure webapp restarts work
+ + 389686 Fix reference to org.eclipse.jetty.util.log.stderr.LONG system
+   property in javadoc for StdErrLog
+ + 389956 Bad __context set in WebAppContext.start sequence with respect to ENC
+   setup
+ + 389965 OPTIONS should allow spaces in comma separated list
+ + 390108 Servlet 3.0 API for programmatic login doesn't appear to work
+ + 390161 Apply DeferredAuthentication fix to jaspi
+ + 390163 Implement ServletRegistration.Dynamic.setServletSecurity
+ + 390503 http-method-omission element not being processed
+ + 390560 The method AnnotationParser.getAnnotationHandlers(String) always
+   returns a empty collection.
+ + 391080 Multipart temp files can be left on disk from Request.getPart and
+   getParts
+ + 391082 No exception if multipart input stream incomplete
+ + 391188 Files written with Request.getPart().write(filename) should not be
+   auto-deleted
+ + 391483 fix bad javadoc example in shutdown handler
+ + 391622 Be lenient on RFC6265 restriction on duplicate cookie names in same
+   response
+ + 391623 Add option to --stop to wait for target jetty to stop
+ + 391877 org.eclipse.jetty.webapp.FragmentDescriptor incorrectly reporting
+   duplicate others for after ordering
+ + 392239 Allow no error-code or exception for error-pages
+ + 392525 Add option to --stop-wait to specify timeout
+ + 392641 JDBC Sessions not scavenged if expired during downtime
+ + 392812 MongoSessionIDManager never purges old sessions
+ + 393014 Mongodb purgevalid using query for purgeinvalid
+ + 393015 Mongodb purge not rescheduled
+ + 393075 Jetty WebSocket client cannot connect to Tomcat WebSocket Server
+ + 393218 add xsd=application/xml mime mapping to defaults
+ + 393363 Use Locale.ENGLISH for all toUpperCase and toLowerCase calls
+ + 393368 min websocket version
+ + 393383 delay onClose call until closeOut is done
+ + 393494 HashSessionManager can't delete unrestorable sessions on Windows
+ + JETTY-1547 Jetty does not honor web.xml
+   web-app/jsp-config/jsp-property-group/default-content-type
+
+jetty-7.6.8.v20121106 - 06 November 2012
+ + 371170 MongoSessionManager LastAccessTimeTest fails
+ + 388675 Non utf8 encoded query strings not decoded to parameter map using
+   queryEncoding
+ + 389686 Fix reference to org.eclipse.jetty.util.log.stderr.LONG system
+   property in javadoc for StdErrLog
+ + 389956 Bad __context set in WebAppContext.start sequence with respect to ENC
+   setup
+ + 389965 OPTIONS should allow spaces in comma separated list
+ + 390161 Apply DeferredAuthentication fix to jaspi
+ + 390560 The method AnnotationParser.getAnnotationHandlers(String) always
+   returns a empty collection.
+ + 391483 fix bad javadoc example in shutdown handler
+ + 391622 Be lenient on RFC6265 restriction on duplicate cookie names in same
+   response
+ + 391623 Add option to --stop to wait for target jetty to stop
+ + 392239 Allow no error-code or exception for error-pages
+ + 392525 Add option to --stop-wait to specify timeout
+ + 392641 JDBC Sessions not scavenged if expired during downtime
+ + 392812 MongoSessionIDManager never purges old sessions
+ + 393014 Mongodb purgevalid using query for purgeinvalid
+ + 393015 Mongodb purge not rescheduled
+ + 393075 Jetty WebSocket client cannot connect to Tomcat WebSocket Server
+ + 393218 add xsd=application/xml mime mapping to defaults
+ + 393363 Use Locale.ENGLISH for all toUpperCase and toLowerCase calls
+ + 393368 min websocket version
+ + 393383 delay onClose call until closeOut is done
+ + 393494 HashSessionManager can't delete unrestorable sessions on Windows
+
+jetty-8.1.7.v20120910 - 10 September 2012
+ + 388895 Update dependencies for jetty-jndi
+ + fix busy logging statement re: sessions
+
+jetty-8.1.6.v20120903 - 03 September 2012
+ + 347130 Empty getResourcePaths due to ZipFileClosedException
+ + 367591 Support Env variables in XmlConfiguration.
+ + 377055 Prevent webapp classloader leaks
+ + 379207 backported fixes from jetty-9 to make hierarchy work
+ + 379423 Jetty URL Decoding fails for certain international characters
+ + 383304 Reset PrintWriter on response recycle
+ + 384847 better name
+ + 385049 fix issue with pipelined connections when switching protocols
+ + 385651 Message 'Address already in use' not specific enough
+ + 386010 JspRuntimeContext rewraps System.err
+ + 386591 add UnixCrypt note to about.html
+ + 386714 used deferred auth for form login and error pages
+ + 387896 populate session in SessionAuthentication as a valueBound in addition
+   to activation so it is populate when needed
+ + 387943 Catch CNFE when no jstl jars are installed
+ + 387953 jstl does not work with jetty-7 in osgi
+ + 388072 GZipFilter incorrectly gzips when Accept-Encoding: gzip; q=0
+ + 388073 null session id from cookie causes NPE fixed
+ + 388102 Jetty HttpClient memory leaks when sending larger files
+ + 388393 WebAppProvider doesn't work alongside OSGi deployer
+ + 388502 handle earlyEOF with 500
+ + 388652 Do not flush on handle return if request is suspended
+ + JETTY-1501 Setting custom error response message changes page title
+ + JETTY-1515 Include cookies on 304 responses from DefaultServlet.
+ + JETTY-1527 handle requests with URIs like http://host  (ie no / )
+ + JETTY-1529 Ensure new session that has just been authenticated does not get
+   renewed
+ + JETTY-1532 HTTP headers decoded with platform's default encoding
+ + JETTY-1541 fixed different behaviour for single byte writes
+ + 385925 make SslContextFactory.setProtocols and
+   SslContextFactory.setCipherSuites preserve the order of the given parameters
+
+jetty-8.1.5.v20120716 - 16 June 2012
+ + 376717 Balancer Servlet with round robin support, contribution, added
+   missing license
+ + 379250 Server is added to shutdown hook twice
+ + 380866 maxIdleTime set to 0 after session migration
+ + 381399 Unable to stop a jetty instance that has not finished starting
+ + 381401 Print log warning when stop attempt made with incorrect STOP.KEY
+ + 381402 Make ContextHandler take set of protected directories
+ + 381521 set Vary:Accept-Encoding header for content that might be compressed
+ + 381639 CrossOriginFilter does not support Access-Control-Expose-Headers.
+ + 381712 Support all declared servlets that implement
+   org.apache.jasper.servlet.JspServlet
+ + 381825 leave URI params in forwarded requestURI
+ + 381876 Monitor should wait for child to finish before exiting.
+ + 382343 Jetty XML support for Map is broken.
+ + 383251 500 for SocketExceptions
+ + 383881 WebSocketHandler sets request as handled
+ + 384254 revert change to writable when not dispatched
+ + 384280 Implement preliminary ServletRegistrations
+ + 384847 CrossOriginFilter is not working.
+ + 384896 JDBCSessionManager fails to load existing sessions on oracle when
+   contextPath is /
+ + 384980 Jetty client unable to recover from Time outs when connection count
+   per address hits max.
+ + 385138 add getter for session path and max cookie age that seemed to
+   disappear in a merge long ago
+ + JETTY-1523 It is imposible to map servlet to "/" using
+   WebApplicationInitializer
+ + JETTY-1525 Show handle status in response debug message
+ + JETTY-1530 refine search control on ldap login module
+
+jetty-8.1.4.v20120524 - 24 May 2012
+ + 367608 ignore the aysncrequestreadtest as it is known to fail and is waiting
+   for a fix
+ + 371853 Support bundleentry: protocol for webapp embedded as directory in
+   osgi bundle
+ + 373620 Add ch.qos.logback.access.jetty to the Import-Package for
+   jetty-osgi-boot-logback bundle
+ + 376152 apply context resources recursively
+ + 376801 Make JAAS login modules useable without jetty infrastructure
+ + 377323 Request#getParts() throws ServletException when it should be throwing
+   IllegalStateException
+ + 377391 Manifest updates to jetty-osgi-boot-logback
+ + 377492 NPE if jsp taglibs bundle not deployed
+ + 377550 set charset when content type is set
+ + 377587 ConnectHandler write will block on partial write
+ + 377610 New session not timed out if an old session is invalidated in scope
+   of same request
+ + 377709 Support for RequestParameterCallback missing
+ + 378242 Re-extract war on restart if incomplete extraction
+ + 378273 Remove default Bundle-Localization header
+ + 378487 Null out contextPath on Request.recycle
+ + 379015 Use factored jetty xml config files for defaults
+ + 379046 avoid closing idle connections from selector thread
+ + 379089 DefaultServlet ignores its resourceBase and uses context's
+   ResourceCollection when listing diretories
+ + 379194 ProxyServlet enhancement to enable easy creation of alternative
+   HttpClient implementations
+ + 379909 FormAuthenticator Rembers only the URL of first Request before
+   authentication
+ + 380034 last modified times taken from JarEntry for JarFile resources
+ + 380212 Clear buffer if parsing fails due to full buffer
+ + 380222 JettyPolicyRuntimeTest failure
+
+jetty-8.1.3.v20120416 - 16 April 2012
+ + 349110 MultiPartFilter records the content-type in request params
+ + 367172 Remove detection for slf4j NOPLogger
+ + 372678 Embedded Examples need updates for new LoginService requirement
+ + 373269 Make ServletHandler.notFound() method impl do nothing - override to
+   send back 404.
+ + 373421 address potential race condition related to the nonce queue removing
+   the same nonce twice
+ + 373952 bind called too frequently on refresh
+ + 374018 correctly handle requestperminuted underflow
+ + 374152 jetty-all-server MANIFEST contains wrong import:
+   javax.servlet.annotation;version="[2.6,3)"
+ + 374252 SslConnection.onClose() does not forward to nested connection.
+ + 374258 SPDY leaks SSLEngines. Made the test more reliable.
+ + 374367 NPE in QueuedThreadPool.dump() with early java6 jvms
+ + 374475 Response.sendRedirect does not encode UTF-8 characters properly
+ + 374881 Set copyWebInf to false by default
+ + 374891 enhancement to how ProxyServlet determines the proxy target
+ + 375009 Filter initialization error will throw MultiException
+ + 375083 Flow control should take in account window size changes from
+   concurrent SETTINGS
+ + 375096 If starting a server instance fails in osgi it is cleaned up.
+ + 375490 NPE with --help on command line
+ + 375509 Stalled stream stalls other streams or session control frames. Now
+   using a "death pill" instead of a boolean in order to avoid race conditions
+   where DataInfos were read from the queue (but the boolean not updated yet),
+   and viceversa.
+ + 375594 fixed SSL tests so they are not order dependent
+ + 375709 Ensure resolveTempDirectory failure does not deadlock; improve error
+   message
+ + 375906 Part.getHeader method not case insensitive
+ + 375970 HttpServletRequest.getRemoteAddr() returns null when HTTP is over
+   SPDY.
+ + 376201 HalfClosed state not handled properly. Addendum to restore previous
+   behavior, where a closed stream was also half closed.
+ + 376324 <max-file-size> is not respected in <multipart-config>
+ + JETTY-1495 Ensure dynamic servlet addition does not cause servlets to be
+   inited.
+ + JETTY-1500 form parameters from multipart request not available via
+   request.getParameter
+ + JETTY-1504 HttpServletResponseWrapper ignored when using asyncContext?
+
+jetty-8.1.2.v20120308 - 08 March 2012
+ + 370387 SafariWebsocketDraft0Test failure during build.
+ + 371168 Update ClientCrossContextSessionTest
+ + 372093 handle quotes in Require-Bundle manifest string
+ + 372457 Big response + slow clients + pipelined requests cause Jetty spinning
+   and eventually closing connections. Added a TODO for a method renaming that
+   will happen in the next major release (to avoid break implementers).
+ + 372487 JDBCSessionManager does not work with Oracle
+ + 372806 Command line should accept relative paths for xml config files
+ + 373037 jetty.server.Response.setContentLength(int) should not close a Writer
+   when length=0
+ + 373162 add improved implementation for getParameterMap(), needs a test
+   though and the existing setup doesn't seem like it would easily support the
+   needed test so need to do that still
+ + 373306 Set default user agent extraction pattern for UserAgentFilter
+ + 373567 cert validation issue with ocsp and crldp always being enabled when
+   validating turned on fixed
+ + 373603 NullPointer in WebServletAnnotation
+ + JETTY-1409 GzipFilter will double-compress application/x-gzip content
+ + JETTY-1489 WebAppProvider attempts to deploy .svn folder
+ + JETTY-1494 .
+
+jetty-8.1.1.v20120215 - 15 February 2012
+ + 369121 simplified test
+ + 370120 jvm arguments added via start.ini and --exec are missing spaces
+ + 370137 SslContextFactory does not respect order for
+   [included|excluded]Protocols() and [included|excluded]CipherSuites().
+ + 370368 resolve stack overflow in mongo db session manager
+ + 370386 Remove META-INF from jetty distro
+ + 371040 nosqlsession needs to call correct super contructor for new sessions
+ + 371041 valid was not being set to new mongo db sessions, and the call to
+   mongodb api was wrong in isIdInUse
+ + 371162 NPE protection for nested security handlers
+ + JETTY-1484 Add option for HashSessionManager to delete session files if it
+   can't restore them
+
+jetty-8.1.0.v20120127 - 27 January 2012
+ + 368773 allow authentication to be set by non securityHandler handlers
+ + 368992 avoid update key while flushing during a write
+ + 369216 turned off the shared resource cache
+ + 369349 replace quotes with a space escape method
+
+jetty-8.1.0.RC5 - 20 January 2012
+ + 359329 Prevent reinvocation of LoginModule.login with jaspi for already
+   authed user
+ + 368632 Remove superfluous removal of org.apache.catalina.jsp_file
+ + 368633 fixed configure.dtd resource mappings
+ + 368635 moved lifecycle state reporting from toString to dump
+ + 368773 process data constraints without realm
+ + 368787 always set token view to new header buffers in httpparser
+ + 368821 improved test harness
+ + 368920 JettyAwareLogger always formats the arguments.
+ + 368948 POM for jetty-jndi references unknown version for javax.activation.
+ + 368992 NPE in HttpGenerator.prepareBuffers() test case.
+ + JETTY-1475 made output state fields volatile to provide memory barrier for
+   non dispatched thread IO
+
+jetty-8.1.0.RC4 - 13 January 2012
+ + 365048 jetty Http client does not send proxy authentication when requesting
+   a Https-resource through a web-proxy.
+ + 366774 removed XSS vulnerbility
+ + 367099 Upgrade jetty-websocket for RFC 6455 - Addendum.
+ + 367433 added tests to investigate
+ + 367435 improved D00 test harness
+ + 367485 HttpExchange canceled before response do not release connection.
+ + 367502 WebSocket connections should be closed when application context is
+   stopped.
+ + 367548 jetty-osgi-boot must not import the nested package twice
+ + 367591 corrected configuration.xml version to 7.6
+ + 367635 Added support for start.d directory
+ + 367716 simplified maxIdleTime logic
+ + 368035 WebSocketClientFactory does not invoke super.doStop().
+ + 368060 do not encode sendRedirect URLs
+ + 368112 NPE on <jsp-config><taglib> element parsing web.xml
+ + 368113 Support servlet mapping to ""
+ + 368114 Protect against non-Strings in System properties for Log
+ + 368189 WebSocketClientFactory should not manage external thread pool. 368240
+   - Improve AggregateLifeCycle handling of shared lifecycles
+ + 368215 Remove debug from jaspi
+ + 368240 Better handling of locally created ThreadPool. Forgot to null out
+   field.
+ + 368291 Change warning to info for NoSuchFieldException on
+   BeanELResolver.properties
+ + 367638 limit number of form parameters to avoid DOS
+ + JETTY-1467 close half closed when idle
+
+jetty-8.1.0.RC2 - 22 December 2011
+ + 359329 jetty-jaspi must exports its packages. jetty-plus must import
+   javax.security
+ + 364638 HttpParser closes if data received while seeking EOF. Tests fixed to
+   cope
+ + 364921 Made test less time sensitive
+ + 364936 use Resource for opening URL streams
+ + 365267 NullPointerException in bad Address
+ + 365375 ResourceHandler should be a HandlerWrapper
+ + 365750 Support WebSocket over SSL, aka wss://
+ + 365932 Produce jetty-websocket aggregate jar for android use
+ + 365947 Set headers for Auth failure and retry in http-spi
+ + 366316 Superfluous printStackTrace on 404
+ + 366342 Dont persist DosFilter trackers in http session
+ + 366730 pass the time idle to onIdleExpire
+ + 367048 test harness for guard on suspended requests
+ + 367175 SSL 100% CPU spin in case of blocked write and RST.
+ + 367219 WebSocketClient.open() fails when URI uses default ports.
+ + 367383 jsp-config element must be returned for
+   ServletContext.getJspConfigDescriptor
+ + JETTY-1460 suppress PrintWriter exceptions
+ + JETTY-1463 websocket D0 parser should return progress even if no fill done
+ + JETTY-1465 NPE in ContextHandler.toString
+
+jetty-8.1.0.RC1 - 06 December 2011
+ + 360245 The version of the javax.servlet packages to import is 2.6 instead of
+   3.0
+ + 365370 ServletHandler can fall through to nested handler
+
+jetty-8.1.0.RC0 - 30 November 2011
+ + 352565 cookie httponly flag ignored
+ + 353285 ServletSecurity annotation ignored
+ + 357163 jetty 8 ought to proxy jetty8 javadocs
+ + 357209 JSP tag listeners not called
+ + 360051 SocketConnectionTest.testServerClosedConnection is excluded.
+ + 361135 Allow session cookies to NEVER be marked as secure, even on HTTPS
+   requests.
+ + 362249 update shell scripts to jetty8
+ + 363878 Add ecj compiler to jetty-8 for jsp
+ + 364283 can't parse the servlet multipart-config for the web.xml
+ + 364430 Support web.xml enabled state for servlets
+
+jetty-7.6.0.RC5 - 20 January 2012
+ + 359329 Prevent reinvocation of LoginModule.login with jaspi for already
+   authed user
+ + 368632 Remove superfluous removal of org.apache.catalina.jsp_file
+ + 368633 fixed configure.dtd resource mappings
+ + 368635 moved lifecycle state reporting from toString to dump
+ + 368773 process data constraints without realm
+ + 368787 always set token view to new header buffers in httpparser
+ + 368821 improved test harness
+ + 368920 JettyAwareLogger always formats the arguments.
+ + 368948 POM for jetty-jndi references unknown version for javax.activation.
+ + 368992 avoid non-blocking flush when writing to avoid setting !_writable
+   without _writeblocked
+ + JETTY-1475 made output state fields volatile to provide memory barrier for
+   non dispatched thread IO
+
+jetty-7.6.0.RC4 - 13 January 2012
+ + 365048 jetty Http client does not send proxy authentication when requesting
+   a Https-resource through a web-proxy.
+ + 366774 removed XSS vulnerbility
+ + 367099 Upgrade jetty-websocket for RFC 6455 - Addendum.
+ + 367716 simplified maxIdleTime logic
+ + 368035 WebSocketClientFactory does not invoke super.doStop().
+ + 368060 do not encode sendRedirect URLs
+ + 368114 Protect against non-Strings in System properties for Log
+ + 368189 WebSocketClientFactory should not manage external thread pool.
+ + 368215 Remove debug from jaspi
+ + 368240 Improve AggregateLifeCycle handling of shared lifecycles
+ + 368291 Change warning to info for NoSuchFieldException on
+   BeanELResolver.properties
+
+jetty-7.6.0.RC3 - 05 January 2012
+ + 367433 added tests to investigate
+ + 367435 improved D00 test harness
+ + 367485 HttpExchange canceled before response do not release connection.
+ + 367502 WebSocket connections should be closed when application context is
+   stopped.
+ + 367591 corrected configuration.xml version to 7.6
+ + 367635 Added support for start.d directory
+ + 367638 limit number of form parameters to avoid DOS
+ + JETTY-1467 close half closed when idle
+
+jetty-7.6.0.RC2 - 22 December 2011
+ + 364638 HttpParser closes if data received while seeking EOF. Tests fixed to
+   cope
+ + 364921 Made test less time sensitive for ssl
+ + 364936 use Resource for opening URL streams
+ + 365267 NullPointerException in bad Address
+ + 365375 ResourceHandler should be a HandlerWrapper
+ + 365750 Support WebSocket over SSL, aka wss://
+ + 365932 Produce jetty-websocket aggregate jar for android use
+ + 365947 Set headers for Auth failure and retry in http-spi
+ + 366316 Superfluous printStackTrace on 404
+ + 366342 Dont persist DosFilter trackers in http session
+ + 366730 pass the time idle to onIdleExpire
+ + 367048 test harness for guard on suspended requests
+ + 367175 SSL 100% CPU spin in case of blocked write and RST.
+ + 367219 WebSocketClient.open() fails when URI uses default ports.
+ + JETTY-1460 suppress PrintWriter exceptions
+ + JETTY-1463 websocket D0 parser should return progress even if no fill done
+ + JETTY-1465 NPE in ContextHandler.toString
+
+jetty-7.6.0.RC1 - 04 December 2011
+ + 352565 cookie httponly flag ignored
+ + 353285 ServletSecurity annotation ignored
+ + 357163 jetty 8 ought to proxy jetty8 javadocs
+ + 357209 JSP tag listeners not called
+ + 360051 SocketConnectionTest.testServerClosedConnection is excluded.
+ + 361135 Allow session cookies to NEVER be marked as secure, even on HTTPS
+   requests.
+ + 362249 update shell scripts to jetty8
+ + 363878 Add ecj compiler to jetty-8 for jsp
+ + 364283 can't parse the servlet multipart-config for the web.xml
+ + 364430 Support web.xml enabled state for servlets
+ + 365370 ServletHandler can fall through to nested handler
+
+jetty-7.6.0.RC0 - 29 November 2011
+ + Refactored NIO layer for better half close handling
+ + 349110 fixed bypass chunk handling
+ + 360546 handle set count exceeding max integer
+ + 362111 StdErrLog.isDebugEnabled() returns true too often
+ + 362113 Improve Test Coverage of org.eclipse.jetty.util.log classes
+ + 362407 setTrustStore(Resource) -> setTrustStoreResource(R)
+ + 362447 add setMaxNonceAge() to DigestAuthenticator
+ + 362468 NPE at line org.eclipse.jetty.io.BufferUtil.putHexInt
+ + 362614 NPE in accepting connection
+ + 362626 IllegalStateException thrown when SslContextFactory preconfigured
+   with SSLContext
+ + 362696 expand virtual host configuration options to ContextHandler and add
+   associated test case for new behavior
+ + 362742 improved UTF8 exception reason
+ + 363124 improved websocket close handling
+ + 363381 Throw IllegalStateException if Request uri is null on getServerName
+ + 363408 GzipFilter should not attempt to compress HTTP status 204
+ + 363488 ShutdownHandler use stopper thread
+ + 363718 Setting java.rmi.server.hostname in jetty-jmx.xml
+ + 363757 partial fix
+ + 363785 StdErrLog must use system-dependent EOL.
+ + 363943 ignore null attribute values
+ + 363993 EOFException parsing HEAD response in HttpTester
+ + 364638 SCEP does idle timestamp checking. New setCheckForIdle method
+   controls onIdleExpired callback. 364921 a second onIdleExpired callback will
+   result in close rather than a shutdown output.
+ + 364657 Support HTTP only cookies from standard API
+ + JETTY-1442 add _hostHeader setter for ProxyRule
+
+jetty-8.0.4.v20111024 - 24 October 2011
+ + 358263 JDBCSessionIdManager add setDatasource(DataSource) method
+ + 358649 Replace existing StdErrLog system properties for DEBUG/IGNORED with
+   LEVEL instead.
+ + 360836 Accept parameters with bad UTF-8. Use replacement character
+ + 360912 CrossOriginFilter does not send Access-Control-Allow-Origin on
+   responses. 355103 Make allowCredentials default to true in
+   CrossOriginFilter.
+ + 360938 Connections closed after a while.
+ + 361135 secure cookies for sessions
+ + 361319 Log initialization does not catch correct exceptions on all jvms
+ + 361325 359292 Allow KeyStore to be set
+ + 361456 release timer task on connection failed
+ + 361655 ExecutorThreadPool.isLowOnThreads() returns wrong value.
+ + JETTY-1444 start threadpool before selector manager
+
+jetty-7.5.4.v20111024 - 24 October 2011
+ + 358263 JDBCSessionIdManager add setDatasource(DataSource) method
+ + 358649 Replace existing StdErrLog system properties for DEBUG/IGNORED with
+   LEVEL instead.
+ + 360836 Accept parameters with bad UTF-8. Use replacement character
+ + 360912 CrossOriginFilter does not send Access-Control-Allow-Origin on
+   responses. 355103 Make allowCredentials default to true in
+   CrossOriginFilter.
+ + 360938 Connections closed after a while.
+ + 361319 Log initialization does not catch correct exceptions on all jvms
+ + 361325 359292 Allow KeyStore to be set
+ + 361456 release timer task on connection failed
+ + 361655 ExecutorThreadPool.isLowOnThreads() returns wrong value.
+ + JETTY-1444 start threadpool before selector manager
+
+jetty-8.0.3.v20111011 - 11 October 2011
+ + 348978 migrate jetty-http-spi
+ + 358649 StdErrLog system properties for package/class logging LEVEL.
+
+jetty-8.0.2.v20111006 - 06 October 2011
+ + 336443 add missing comma in DigestAuthenticator string
+ + 342161 ScannerTest fails intermittently on Mac OS X
+ + 346419 testing HttpClient FDs
+ + 353267 Request._parameters initialization bug
+ + 353509 jetty-client unit tests are running too long
+ + 353627 Basic Auth checks that Basic method has been send
+ + 356144 Allow SelectorManager thread priority to be set
+ + 356274 Start SSL socket factory in call to open()
+ + 357163 jetty 8 ought to proxy jetty8 javadocs
+ + 357178 websockets draft 14 support
+ + 357188 Send content buffer directly
+ + 357209 JSP tag listeners not called
+ + 357216 Logging via Log4J does not expand braces in format strings
+ + 357240 more half close refinements
+ + 357338 remove debug
+ + 357672 resolve issue with serializing pojos with mongodb session manager,
+   thanks to john simone for the discovery and fix
+ + 357959 Include javadoc in distribution
+ + 358027 NullPointerException in ResourceHandler with jetty-stylesheet.css
+ + 358035 idle time only active if > 0
+ + 358147 Add catch for UnknownHostException to fix leaky file descriptor in
+   client
+ + 358164 Dispatch from servlet to handler
+ + 358263 add method for osgi users to register a driver as Class.forName does
+   not work for them
+ + 358649 StdErrLog system properties for package/class logging LEVEL.
+ + 358674 Still allows sslv3 for now
+ + 358687 Updated jsp does not scan for system tlds Fixed pattern.
+ + 358784 JSP broken on Java 1.5
+ + 358925 bit more javadoc on usage
+ + 358959 File descriptor leak with UnresolvedAddressException
+ + 359309 adjust previous test for servletPath to include pathInfo
+ + 359673 updated websocket version handling
+ + 359675 Principal != String, fix for issue in property file login manager
+ + 360051 SocketConnectionTest.testServerClosedConnection is excluded.
+ + 360066 jsps referenced in web.xml <jsp-file> elements do not compile
+ + JETTY-1130 Access Sessions from HashSessionIdManager
+ + JETTY-1277 Fixed sendRedirect encoding of relative locations
+ + JETTY-1322 idle sweeper checks for closed endp
+ + JETTY-1377 extra logging for busy selector
+ + JETTY-1378 new sys property for the latest jsp-impl to force the use of the
+   JDTCompiler when running in OSGi.
+ + JETTY-1414 applied to PropertyUserStore
+ + JETTY-1415 Start/Stop Server and Client only once in test, code format
+ + JETTY-1420 Set Host header for new request in RedirectListener
+ + JETTY-1421 Implement RedirectListener.onException,onConnectionFailed
+ + JETTY-1423 force connection to be closed returned
+ + JETTY-1430 local JNDI contexts don't carry environment
+ + JETTY-1434 Add a jsp that exercises jstl.
+ + JETTY-1439 space in directory installation path causes classloader problem
+
+jetty-7.5.3.v20111011 - 11 October 2011
+ + 348978 migrate jetty-http-spi
+ + 358649 StdErrLog system properties for package/class logging LEVEL.
+
+jetty-7.5.2.v20111006 - 06 October 2011
+ + 336443 check nonce count is increasing
+ + 342161 ScannerTest fails intermittently on Mac OS X
+ + 346419 testing HttpClient FDs
+ + 353267 Request._parameters initialization bug
+ + 353509 jetty-client unit tests are running too long
+ + 353627 Basic Auth checks that Basic method has been send
+ + 356144 Allow SelectorManager thread priority to be set
+ + 356274 Start SSL socket factory in call to open()
+ + 357178 websockets draft 14 support
+ + 357188 Send content buffer directly
+ + 357209 JSP tag listeners not called
+ + 357216 Logging via Log4J does not expand braces in format strings
+ + 357240 more half close refinements
+ + 357338 remove debug
+ + 357672 resolve issue with serializing pojos with mongodb session manager,
+   thanks to john simone for the discovery and fix
+ + 357959 Include javadoc in distribution
+ + 358027 NullPointerException in ResourceHandler with jetty-stylesheet.css
+ + 358035 idle time only active if > 0
+ + 358147 Add catch for UnknownHostException to fix leaky file descriptor in
+   client
+ + 358164 Dispatch from servlet to handler
+ + 358263 add method for osgi users to register a driver as Class.forName does
+   not work for them
+ + 358649 StdErrLog system properties for package/class logging LEVEL.
+ + 358674 Still allows sslv3 for now
+ + 358687 Updated jsp does not scan for system tlds Fixed pattern.
+ + 358784 JSP broken on Java 1.5
+ + 358925 bit more javadoc on usage
+ + 358959 File descriptor leak with UnresolvedAddressException
+ + 359309 adjust previous test for servletPath to include pathInfo
+ + 359673 updated websocket version handling
+ + 359675 Principal != String, fix for issue in property file login manager
+ + 360051 SocketConnectionTest.testServerClosedConnection is excluded.
+ + 360066 jsps referenced in web.xml <jsp-file> elements do not compile
+ + JETTY-1130 Access Sessions from HashSessionIdManager
+ + JETTY-1277 Fixed sendRedirect encoding of relative locations
+ + JETTY-1322 idle sweeper checks for closed endp
+ + JETTY-1377 extra logging for busy selector
+ + JETTY-1378 new sys property for the latest jsp-impl to force the use of the
+   JDTCompiler when running in OSGi.
+ + JETTY-1414 applied to PropertyUserStore
+ + JETTY-1415 Start/Stop Server and Client only once in test, code format
+ + JETTY-1420 Set Host header for new request in RedirectListener
+ + JETTY-1421 Implement RedirectListener.onException,onConnectionFailed
+ + JETTY-1423 force connection to be closed returned
+ + JETTY-1430 local JNDI contexts don't carry environment
+ + JETTY-1434 Add a jsp that exercises jstl.
+ + JETTY-1439 space in directory installation path causes classloader problem
+
+jetty-8.0.1.v20110908 - 08 September 2011
+ + 350634 Added Resource.newResource(File)
+ + 356190 fix monodb tests  for changed test api
+ + 356428 removed timed waits from test
+ + 356693 reduce visibility to webapp of websocket implementations
+ + 356695 jetty server jars are provided for websockets
+ + 356726 Instead of the sessionDestroyed called sessionCreated after
+   invalidate session
+ + 356751 Add null protection to ServletContextHandler.doStop
+ + 356823 correctly decode close codes.  Send not utf-8 close code.
+ + 357058 Acceptor thread blocking
+
+jetty-7.5.1.v20110908 - 08 September 2011
+ + 350634 Added Resource.newResource(File)
+ + 356190 fix monodb tests  for changed test api
+ + 356428 removed timed waits from test
+ + 356693 reduce visibility to webapp of websocket implementations
+ + 356695 jetty server jars are provided for websockets
+ + 356726 Instead of the sessionDestroyed called sessionCreated after
+   invalidate session
+ + 356751 Add null protection to ServletContextHandler.doStop
+ + 356823 correctly decode close codes.  Send not utf-8 close code.
+ + 357058 Acceptor thread blocking
+
+jetty-8.0.0.v20110901 - 01 September 2011
+ + 352565 cookie httponly flag ignored
+ + 353073 better warnings
+ + 353285 ServletSecurity annotation ignored
+ + 356421 Upgraded websocket to draft 13 support
+
+jetty-7.5.0.v20110901 - 01 September 2011
+ + 356421 Upgraded websocket to draft 13 support
+ + 353073 better warnings
+
+jetty-7.5.0.RC2 - 30 August 2011
+ + 293739 Hide stacks in named log testing. Various other minor log cleanups in
+   output.
+ + 352188 TestClient correctly processes --host option in jetty-websocket
+ + 352222 Moved JmxMonitor functionality from Codehaus
+ + 353014 TimeoutExchangeTest run time reduced
+ + 353073 deprecated non factory method for websocket clients
+ + 353192 Better warning for classes of wrong type
+ + 353623 Added new methods to HttpExchange
+ + 353624 HttpURI accepts java.net.URI object in constructor
+ + 354080 ServletContextHandler allows to replace any subordinate handler when
+   restarted
+ + 355478 set public to HashedSession, looks like honest mistake and not by
+   design to be this way
+ + 355854 remove automatic conversion in favor of issuing a warning for
+   jetty-web.xml that can't be processed
+ + 356128 Moved integration tests from jetty-monitor to test-integration module
+ + 356137 Upgrade to jsp implementation version 2.1.3-b10
+ + 356144 added SelectorManager.setSelectorPriorityDelta(int)
+ + JETTY-1410 handle 1xx in similar fashion to 401s and 302s
+
+jetty-7.5.0.RC1 - 19 August 2011
+ + 276670 SLF4J loggers show correct location information
+ + 335001 Eliminate expected exceptions from log when running in JBoss
+ + 355103 Make allowCredentials default to true in CrossOriginFilter
+ + 355162 Allow creating an empty resource collection
+ + JETTY-1410 HTTP client handles CONTINUE 100 response correctly
+ + JETTY-1414 HashLoginService doesn't refresh realm if specified config
+   filename is not an absolute platform specific value
+
+jetty-8.0.0.RC0 - 16 August 2011
+ + Merge from jetty-7.4.3
+ + Enable annotations by default
+ + 352565 cookie httponly flag ignored
+ + 353285 ServletSecurity annotation ignored
+
+jetty-8.0.0.M3 - 27 May 2011
+ + 324505 Implement API login
+ + 335500 request.getParts() throws a NullPointerException
+ + 343472 isUserInRole does not prevent subsequent login call.
+ + 346180 jsp-2.2 support
+ + Updated to jetty-7.4.2.v20110526
+
+jetty-7.5.0.RC0 - 15 August 2011
+ + 298502 Handle 200 Connect responses with no content-length
+ + 347484 / - > ${/} in some paths in grant codebases
+ + 349005 add javadoc detailing the convenience hack of removing leading /'s
+ + 351516 Refactored sessions to better support nosql session managers
+ + 351576 Do not use deprecated method File.toURL()
+ + 352046 Need try/catch around features set in XmlParser
+ + 352133 Generally resolve java 1.5isms
+ + 352176 xml parsing on startElement should be more flexible on using qName or
+   localName
+ + 352421 HttpURI paths beginning with '.'
+ + 352684 Implemented spinning thread analyzer
+ + 352786 GzipFilter fails to pass parameters to GzipResponseWrapper
+ + 352999 ExpireTest running too long
+ + 353073 WebSocketClient
+ + 353095 maven-jetty-plugin: PermGen leak due to javax.el.BeanELResolver
+ + 353165 addJars can follow symbolic link jar files
+ + 353210 Bundle-Version in o.e.j.o.boot.logback fix
+ + 353465 JAASLoginService ignores callbackHandlerClass
+ + 353563 HttpDestinationQueueTest too slow
+ + 353862 Improve performance of QuotedStringTokenizer.quote()
+ + 354014 Content-Length is passed to wrapped response in GZipFilter
+ + 354204 Charset encodings property file not used
+ + 354397 RewriteRegexRule handles special characters in regex group
+ + 354466 Typo in example config of jetty-plus.xml
+
+jetty-7.4.5.v20110725 - 25 July 2011
+ + 347484 / - > ${/} in some paths in grant codebases
+ + 352133 resolve some 1.5isms
+ + 352421 HttpURI paths beginning with '.'
+ + 352786 GzipFilter fails to pass parameters to GzipResponseWrapper
+
+jetty-7.4.4.v20110707 - 07 July 2011
+ + 308851 Converted all jetty-client module tests to JUnit 4
+ + 345268 JDBCSessionManager does not work with maxInactiveInterval = -1
+ + 350397 SelectChannelConnector does not shutdown gracefully
+ + 350634 Reverted FileResource constructor changes
+ + 351039 Forward dispatch should retain locale
+ + 351199 HttpServletResponse.encodeURL() wrongly encodes an url without path
+   when cookies are disabled
+ + JETTY-1153 Default charset/encoding of HTTP POST requests
+ + JETTY-1380 Jetty Rewrite example does not work in Hightide
+
+jetty-7.4.3.v20110701 - 01 July 2011
+ + 295832 ProxyServlet more extensible and configurable
+ + 302566 GZIP handler for embedded Jetty servers
+ + 308851 Converted HttpExchangeTest and related tests to JUnit 4
+ + 324704 JDBC Session Manager reloading session
+ + 332200 Eliminate expected exceptions from log while using
+   org.eclipse.jetty.jmx bundle
+ + 347468 o.e.j.deploy.binding.GlobalWebappConfigBindingTest fails on Windows
+   platform
+ + 347617 Dynamically install/update/remove OSGi bundles discovered in the
+   contexts folder
+ + 347717 start.jar destroys dependent child of --exec
+ + 347889 OSGi should follow directive visibility:=reexport for
+   META-INF/web-fragments and resources
+ + 347898 Close channel on JVM exceptions
+ + 348652 jetty.sh starts two unix processes
+ + 348935 Close A tag in directory listing
+ + 349344 Passing empty query string to UrlEncoded#decodeTo(String, MultiMap,
+   String) does not yield an empty map
+ + 349738 set buffer sizes for http client in proxy servlet
+ + 349870 proxy servlet protect continuation against fast failing exchanges
+ + 349896 SCEP supports zero maxIdleTime
+ + 349897 draft -09 websockets
+ + 349997 MBeanContainer uses weak references
+ + 350533 Add "Origin" to the list of allowed headers in CrossOriginFilter
+ + 350634 Cleanup FileResource construction
+ + 350642 Don't close SCEP during NIOBuffer manipulation
+ + JETTY-1342 Recreate selector in change task
+ + JETTY-1385 NPE in jetty client's
+   HTttpExchange.setRequestContentSource(InputStream)
+ + JETTY-1390 RewriteHandler handles encoded URIs
+
+jetty-7.4.2.v20110526
+ + 334443 Improve the ability to specify extra class paths using the Jetty
+   Maven Plugin
+ + 336220 tmp directory is not set if you reload a webapp with
+   jetty-maven-plugin
+ + 338364 Fixed expires header for set cookies
+ + 345729 binding for managing server and system classes globally
+ + 345615 Enable SSL Session caching
+ + 345763 Source file is updated during the build
+ + 345873 Update jetty-ssl.xml to new style
+ + 345900 Handle IPv6 with default port
+ + 346014 Fixed full HttpGenerator
+ + 346124 ServletContext resources paths not resolved correctly when using UNC
+   shares
+ + 346179 o.e.j.util.ScannerTest fails on MacOS X platform
+ + 346181 o.e.j.server.StressTest stalls on MacOS X platform
+ + 346998 AbstractLifeCycle.isRunning() returns false if state changes from
+   STARTING to STARTED during call
+ + 346614 HttpConnection.handle() spins in case of SSL truncation attacks
+ + 346764 OrderedGroupBinding deployment binding
+ + 347137 Allow SSL renegotiations by default in HttpClient
+ + 374174 Consistent mbean names
+ + JETTY-1146 Encode jsessionid in sendRedirect
+ + JETTY-1342 Recreate selector if wakeup throws JVM bug
+
+jetty-7.4.1.v20110513
+ + 288563 remove unsupported and deprecated --secure option
+ + 332907 Add context property to ObjectName of JMX MBeans
+ + 336056 Ability to override the computation of the ContextHandler to deploy
+   the DefaultServlet on the HttpService
+ + 340040 Support for a total timeout
+ + 343083 Set nested dispatch type and connection
+ + 343172 Check package implementor for version
+ + 343277 add support for a context white list
+ + 343352 make sure that jetty.osgi.boot is activated when a WAB is registered
+ + 343482 refactored overlay deployer layout to use WAR layout
+ + 343567 HttpClient does not limit the destination's exchange queue
+ + 343680 Handle OSGi bundle jars not ending in ".war"
+ + 343707 'REQUEST' is printed on console for each incoming HTTP request
+ + 343923 flush timeouts applied to outer loop
+ + 343936 Session idle calls unbind and remove listeners
+ + 344059 Websockets draft-07
+ + 344067 Add support for OSGi fragment bundles to add static resources to
+   web-bundles
+ + 344513 Attempting to set ConfigurationClasses in jetty-web.xml causes NPE
+ + 344529 Ability to customize the error handling of the OSGi HttpService
+ + 345047 Readded deprecated ScanningAppDeployer#setMonitoredDir
+ + 345290 Weak references from SessionIdManager. HashSessionManager cleanup.
+ + 345543 Always close endpoint on SSLException
+ + 345656 Disambiguate SslContextFactory#validateCerts property
+ + 345679 Allow setting an initialized KeyStore as keystore/truststore of
+   SslContextFactory
+ + 345704 jetty-nested works with forwarded SSL in cloudfoundry
+ + JETTY-954 WebAppContext eats any start exceptions instead of stopping the
+   server load
+ + JETTY-1314 Handle bad URI encodings
+ + JETTY-1324 Tested not using CESU-8 instead of UTF-8
+ + JETTY-1326 Invoker names not hashCode based
+ + JETTY-1343 IllegalArgumentException for bad % encodings
+ + JETTY-1347 Updated ServletHander javadoc
+
+jetty-7.4.0.v20110414
+ + 342504 Scanner Listener
+ + 342700 refine websocket API for anticipated changes
+ + JETTY-1362 Set root cause of UnavailableException
+ + Various test harness cleanups to avoid random failures
+
+jetty-7.4.0.RC0
+ + 324110 Added test harnesses for merging of QueryStrings.
+ + 337685 Update websocket API in preparation for draft -07
+ + 338627 HashSessionManager.getIdleSavePeriod returns milliseconds instead of
+   seconds
+ + 338807 Ignore content length in 1xx, 204, 304 responses
+ + 338819 Externally control Deployment Manager application lifecycle
+ + 339084 Fixed NPE with servlet 3.0 async listener
+ + 339150 Validate client certificate when it is used for authentication
+ + 339187 In the OSGi manifest of the jetty-all-server aggregate, mark
+   javax.annotation as optional
+ + 339543 Add configuration options for Certificate Revocation checking
+ + 340265 Improve handling of io shutdown in SSL
+ + 340621 Added SizedThreadPool interface
+ + 340636 HashSessionManager lazy loads all sessions
+ + 340838 Update ConnectHandler to perform half closes properly
+ + 340878 Integrations should be able to load their own keystores
+ + 340920 Dynamically assign RMI registry port for integration testing
+ + 340949 Scanner delays file notifications until files are stable
+ + 341006 Move inner enums out into separate file
+ + 341105 Stack trace is printed for an ignored exception
+ + 341145 WebAppContext MBean attribute serverClasses returns empty value
+ + 341171 Locking in HttpDestination blocks all requests to the same address
+ + 341206 Stop order is wrong in HandlerWrapper
+ + 341255 org.eclipse.http usage in AJP/SessionId linkage
+ + 341386 Remote close not detected by HttpClient
+ + 341394 Remove 'Unavailable' JMX attributes of WebAppContext MBean
+ + 341439 Blocking HttpClient does not use soTimeout for timeouts
+ + 341561 Exception when adding o.e.j.s.DoSFilter as managed attribute
+ + 341692 Fixed deadlock if stopped while starting
+ + 341736 Split jetty-nested out of war module
+ + 341726 JSONPojoConverter handles characters
+ + 341992 Overlayed context deployer
+ + 341694 Disable AJP buffer resizing
+ + 341850 Protect QTP dump from bad stacks
+ + JETTY-1245 Pooled Buffers implementation
+ + JETTY-1354 Added jetty-nested
+ + Ensure generated fragment names are unique
+ + Added extra session removal test
+
+jetty-8.0.0.M2 - 16 November 2010
+ + 320073 Reconsile configuration mechanism
+ + 321068 JSF2 fails to initialize
+ + 324493 Registration init parameter handling null check, setInitParameters
+   additive
+ + 324505 Request.login method must throw ServletException if it cant login
+ + 324872 allow disabling listener restriction from using *Registration
+   interfaces
+ + 327416 Change meaning of @HandlesTypes in line with latest interpretation by
+   JSR315
+ + 327489 Change meaning of @MultipartConfig to match servlet spec 3.0
+   maintenance release 3.0a
+ + 328008 Handle update to Servlet Spec 3 Section 8.2.3.h.ii
+ + 330188 Reject web-fragment.xml with same <name> as another already loaded
+   one
+ + 330208 Support new wording on servlet-mapping and filter-mapping merging
+   from servlet3.0a
+ + 330292 request.getParts() returns only one part when the name is the same
+ + Update to jetty-7.2.1.v20101111
+
+jetty-7.3.1.v20110307 - 07 March 2011
+ + 316382 Support a more strict SSL option with certificates
+ + 333481 Handle UCS-4 codepoints in decode and encode
+ + 335329 Moved blocking timeout handling to outside try catch
+ + 336668 policy supports cert validation
+ + 336691 Possible wrong length returned by ChannelEndPoint.flush() in case of
+   RandomAccessFileBuffer
+ + 336781 If xml parser is not validating, turn off external dtd resolution
+ + 336793 Tee data filled and flushed from endpoint
+ + 337258 Scanner start and end cycle notification
+ + 337268 Allow specifying alias of a certificate to be used by SSL connector
+ + 337270 Shared Timer for session management
+ + 337271 Flush SSL endpoint when dispatch thread held forever
+ + 337678 Readded optional async connection mode for HttpClient
+ + 337685 Work in progress on draft 6 websockets
+ + 337746 Fixed Session deIdle recursion
+ + 337784 Improve HashSessionManager for session migrations
+ + 337878 Extra tests of security constraints
+ + 337896 HttpExchange.timeout does not override HttpClient.timeout
+ + 337898 set client HttpConnection max idle time from exchange timeout
+ + 338035 Default acceptors 0.25*CPUs and improved selector/acceptor thread
+   names.
+ + 338068 Leaking ConstraintMappings on redeploy
+ + 338092 ProxyServlet leaks memory
+ + 338607 Removed managed attributes when context is stopped
+ + 338819 Externally control Deployment Manager application lifecycle
+ + JETTY-1304 Allow quoted boundaries in Multipart filter
+ + JETTY-1317 More elegent handling of bad URIs in requests
+ + JETTY-1331 Allow alternate XML configuration processors (eg spring)
+ + JETTY-1335 HttpClient's SelectConnector clean-up
+ + JETTY-1333 HttpClient _timeout and _soTimeout is messed up
+ + JETTY-1337 Workname cannot contain '.'
+ + JETTY-1338 Trust default SecureRandom seed
+
+jetty-7.3.0.v20110203 - 03 February 2011
+ + JETTY-1259 NullPointerException in JDBCSessionIdManager when invalidating
+   session (further update)
+ + 296978 standardizing various Testing Util Classes to jetty-test-helper
+ + 319178 test failure fix in jetty-util on windows
+ + 320457 add SPNEGO support
+ + 324505 Implement API login
+ + 328872 Multi Jetty xml files not loading if directory is referenced in
+   jetty.conf
+ + 329746 client option to set just truststore and use strict ssl context
+ + 331803 Update XML configuration files to use proper arguments for startup
+   command in examples
+ + 332179 Fixed formatting of negative dates
+ + 332432 Scanner.java now always scanning the canonical form of File
+ + 332517 Improved DefaultServlet debug
+ + 332703 Cleanup context scope JNDI at stop
+ + 332796 Annotations inheritance does not work with jetty7
+ + 332799 100% CPU on redeploy session invalidation
+ + 332937 Added Destroyable Dumpable interfaces and reworked dependent
+   lifecycles, specially of JNDI
+ + 333247 fix api compat issue in ConstraintSecurityHandler
+ + 333415 wired up HttpInput.available and added test harnesses
+ + 333481 Handle UTF-32 codepoints in decode and encode
+ + 333608 tlds defined in web.xml are not picked up
+ + 333679 Refactored jetty-jmx. Moved mbeans to modules
+ + 333717 HttpExchange able to return local address used
+ + 333771 System properties are not available inside XML configuration file by
+   using the 'property' tag
+ + 333875 Monitor public constructor
+ + 333892 Improved JVM bug detection
+ + 334062 It should be possible to embed in the jetty.home.bundle the ssl
+   keystore files
+ + 334229 javax-security needs to import the package javax.security.cert in its
+   OSGi manifest
+ + 334311 fix buffer reuse issue in CachedExchange
+ + 335329 Stop SSL spin during handshake and renogotiate
+ + 335361 Fixed 'jetty.sh check' to show current PID when JETTY_PID env.
+   variable is set
+ + 335641 Cleaned up dispatch handling to avoid key.interestOps==0 when
+   undispatched
+ + 335681 Improve ChannelEndPoint.close() to avoid spinning
+ + 335836 Race when updating SelectChannelEndPoint._dispatched
+
+jetty-7.2.2.v20101205 - 05 December 2010
+ + JETTY-1308 327109 (re)fixed AJP handling of empty packets
+ + 331703 Fixed failing OSGI test TestJettyOSGiBootWithJsp.java on MacOSX
+ + 331567 IPAccessHandlerTest failed on MacOS fix
+ + 328789 Clean up tmp files from test harnesses
+ + 331230 Fixed low thread warnings when acceptors>threadpool
+ + 331461 Fixed idle timeout for unflushed HTTP/1.0
+ + JETTY-1307 Check that JarFileResource directories end with /
+ + 330210 Improve performance of writing large bytes arrays
+ + 330208 Support new wording on servlet-mapping and filter-mapping merging
+   from servlet3.0a
+ + 330188 Reject web-fragment.xml with same <name> as another already loaded
+   one
+ + 330229 Jetty tries to parse META-INF/*.tld when jsp-api is not on classpath,
+   causing DTD entity resoluton to fail
+ + 330265 start.jar --stop kills --exec subprocess
+ + 330417 Atomic PUT in PutFilter
+ + 330419 Reloading webapp duplicates StandardDescriptorProcessor
+ + 330686 OSGi: Make org.eclipse.jetty.jsp-2.1 a fragment of
+   org.apache.jasper.glassfish
+ + 330732 Removed System.err debugging
+ + 330764 Command line properties passed to start.jar --exec
+ + JETTY-1297 Improved matching of vhosts so that a vhost match has priority
+
+jetty-7.2.1.v20101111 - 11 November 2010
+ + 324679 Fixed dedection of write before static content
+ + 328199 Ensure blocking connectors always close socket
+ + 328205 Improved SelectManager stopping
+ + 328306 Serialization of FormAuthentication
+ + 328332 Response.getContentType works with setHeader
+ + 328523 Fixed overloaded setters in AppProvider
+ + 328008 Handle update to Servlet Spec 3 Section 8.2.3.h.ii
+ + 328778 Improved javadoc for secure session cookies
+ + 328782 allow per connection max idle time to be set
+ + 328885 web overrides do not override
+ + 328988 Idle saving of session values
+ + 329180 Spin check for Selector to stop
+ + 329410 Enforce XmlConfiguration properties as Map<String,String>
+ + 329602 only clear ServletContext attributes on doStop
+ + 329642 Concurrent modification exception in Deployment Manager
+ + 329643 Improved deployment of resource collections
+ + JETTY-748 Prevent race close of socket by old acceptor threads
+ + JETTY-1291 Extract query parameters even if POST content consumed
+ + JETTY-1295 Contexts mixed up when hot-deploying on virtual hosts
+ + JETTY-1297 Make ServletContext.getContext(String) virtual host aware
+
+jetty-6.1.26 - 10 November 2010
+ + JETTY-748 Prevent race close of socket by old acceptor threads
+ + JETTY-1239 HTAccessHandler [allow from 127.0.0.1] does not work
+ + JETTY-1291 Extract query parameters even if POST content consumed
+ + JETTY-1293 Avoid usage of String.split
+ + JETTY-1296 Always clear changes list in selectManager
+
+jetty-6.1.26.RC0 - 20 October 2010
+ + JETTY-547 Improved usage of shutdownOutput before close.
+ + JETTY-912 add per exchange timeout
+ + JETTY-1051 offer jetty.skip flag for maven plugin
+ + JETTY-1096 exclude maven and plexus classes from jetty plugin
+ + JETTY-1248 Infinite loop creating temp MultiPart files
+ + JETTY-1264 Idle timer deadlock
+ + JETTY-1271 Handle unavailable request
+ + JETTY-1278 J2se6 SPI filter handling fix
+ + JETTY-1283 Allow JSONPojoConvertorFactory to set fromJSON
+ + JETTY-1287 rewrite handler thread safe issue resolved
+ + JETTY-1288 info when atypical classloader set to WebAppContext
+ + JETTY-1289 MRU cache for filter chains
+ + JETTY-1292 close input streams after keystore.load()
+ + 325468 Clean work webapp dir before unpack
+ + 327109 Fixed AJP handling of empty packets
+ + 327562 Implement all X-Forwarded headers in ProxyServlet
+
+jetty-7.2.0.v20101020 - 20 October 2010
+ + 289540 added javadoc into distribution
+ + 297154 add source distribution artifact
+ + 323985 Xmlconfiguration pulls start.jar config properties
+ + 324369 Improved handling of multiple versions of
+   draft-ietf-hybi-thewebsocketprotocol
+ + 326734 Configure Digest maxNonceAge with Security handler init param
+ + 327109 Fixed AJP handling of empty packets
+ + 327183 Allow better configurability of HttpClient for TLS/SSL
+ + 327469 removed needless java6 dependencies
+ + 327562 Implement all X-Forwarded headers in ProxyServlet
+ + 327601 Multipart Filter handles quoted tokens
+ + 327725 Nested ResourceCaches
+ + 328199 Ensure blocking connectors always close socket
+ + 328205 Improved SelectManager stopping
+ + 328273 Added serializable to default user identity
+ + JETTY-1288 Info statement when atypical classloader set on WebAppContext
+ + JETTY-1289 LRU cache for filter chains
+
+jetty-7.2.0.RC0 - 01 October 2010
+ + 314087 Simplified SelectorManager
+ + 319334 Concurrent, sharable ResourceCache
+ + 319370 WebAppClassLoader.Context
+ + 319444 Two nulls are appended to log statements from ContextHanler$Context
+ + 320073 Reconsile configuration mechanism
+ + 320112 Websocket in aggregate jars
+ + 320264 Removed duplicate mime.property entries
+ + 320457 Added rfc2045 support to B64Code
+ + 321232 BasicAuthenticator ignores bad Authorization header.
+ + 321307 HashSessionManager calls passivation listeners.
+ + 321730 SelectChannelEndPoint prints to System.err
+ + 321735 HttpClient onException called for buffer overflow.
+ + 322448 Added jetty-dir.css for directory listings
+ + 322575 NPE in HotSwapHandler if old handler null
+ + 322683 RewriteHandler thread safety
+ + 323196 org.mortbay properties to org.eclipse
+ + 323435 MovedContextHandler permanent redirection
+ + 323464 IPv6 localhost with no Host header
+ + 324110 Merge async dispatch parameters
+ + 324158 Durable download or Orbit jars
+ + 324260 Jetty-6 continuations handle complete calls
+ + 324359 illegal actions on AsyncContext should not change its state.
+ + 324360 validate input on getResource since loop logic obscures subclass
+   input validation.
+ + 324369 Implement draft-ietf-hybi-thewebsocketprotocol-01
+ + 324377 Allow dispatch of ServletRequest and ServletResponse
+ + 324379 Change content type after getWriter
+ + 324501 Fire RequestListener.requestDestroyed in last-to-first order.
+ + 324601 Check session expiry on access
+ + 324679 Allow filter to write before static content
+ + 324811 NPE in Server.dump
+ + 324812 restore WebAppContext constructor used by geronimo integration
+ + 325072 include to DefaultServlet of missing file throws
+   FileNotFoundException
+ + 325105 websocket ondisconnect fixed
+ + 325128 websocket send during onConnect
+ + 325468 Clean work webapp dir before unpack
+ + 326612 Handle X-Forwarded-Proto header
+ + JETTY-912 added per exchange timeout api
+ + JETTY-1063 Plugin problems with spaces in classpath resource references
+ + JETTY-1245 Do not use direct buffers with NIO SSL
+ + JETTY-1249 Apply max idle time to all connectors
+ + JETTY-1250 Parallel start of HandlerCollection
+ + JETTY-1256 annotation and jta jars from Orbit
+ + JETTY-1259 NullPointerException in JDBCSessionIdManager when invalidating
+   session
+ + JETTY-1261 errant listener usage in StandardDescriptorProcessor
+ + JETTY-1263 JDBCSessionIdManager table creation fails on Oracle
+ + JETTY-1265 Reason field option in client response
+ + JETTY-1266 Destroy sessions before filters/servlets
+ + JETTY-1268 Form Auth saves POST data
+ + JETTY-1269 Improve log multithreadedness
+ + JETTY-1270 Websocket closed endp protection
+ + JETTY-1271 handled unavailable exception
+ + JETTY-1279 Make jetty-plus.xml enable plus features for all webapps by
+   default
+ + JETTY-1281 Create new session after authentication
+ + JETTY-1283 JSONPojoConvertorFactory can turn off fromJSON
+ + Fix jetty-plus.xml for new configuration names
+ + Added ignore to Logger interface
+ + Improved debug dump
+
+jetty-7.1.6.v20100715
+ + 319519 Warn about duplicate configuration files
+ + 319655 Reset HEAD status
+ + JETTY-1247 synchronize recylcing of SSL NIO buffers
+ + JETTY-1248 fix parsing of bad multiparts
+ + JETTY-1249 Apply max idle time to all connectors
+ + JETTY-1251 Replace then close selector for JVM bugs
+
+jetty-8.0.0.M1 - 12 July 2010
+ + 306350 Ensure jars excluded by ordering are not scanned for annotations
+ + JETTY-1224 Change jetty-8 merge rules for fragment descriptors and
+   annotations
+ + Ensure <absolute-ordering> in web.xml overrides relative <ordering> in
+   fragments
+ + Ensure empty <absolute-ordering> implies exclusion of all fragments
+ + Ensure servlet-api jar class inheritance hierarchy is scanned
+
+jetty-7.1.5.v20100705
+ + Update ecj to 3.6 Helios release drop
+ + 288194 Add blacklist/whitelist to ProxyServlet and ProxyHandler
+ + 296570 EOFException for HttpExchange when HttpClient.stop called.
+ + 311550 The WebAppProvider should allow setTempDirectory
+ + 316449 Websocket disconnect fix
+ + 316584 Exception on startup if temp path has spaces and extractWAR=false
+ + 316597 Removed null check and fixed name in Resource#hrefEncodeURI
+ + 316970 jetty.sh fails to find JETTY_HOME in standard directories
+ + 316973 jetty.sh claims java installation is invalid
+ + 316976 removed quotes of JAVA_OPTIONS in jetty.sh
+ + 317019 Date HTTP header not sent for HTTP/1.0 requests
+ + 317759 Allow roles and constraints to be added after init
+ + 317906 OPTIONS correctly handles TRACE
+ + 318308 Correct quoting of unicode control characters
+ + 318470 unboxing NPE protection in HttpConnection
+ + 318551 Optional uncheck Printwriter
+ + JETTY-1237 Save local/remote address to be available after close
+ + 317007 Unable to run Jetty OSGi when
+   -Dosgi.compatibility.bootdelegation=false
+ + 316909 CNFE: org.xml.sax.SAXException on org.eclipse.jetty.osgi.boot start
+   with jsp fragment
+ + 317231 Ability to configure jetty with a fragment bundle that contains
+   etc/jetty.xml
+ + 319060 Support web-bundles that are not expanded (bundle is zipped)
+
+jetty-6.1.25 - 26 July 2010
+ + Jetty-6 is now in maintenance mode.
+ + JETTY-1212 Long content lengths
+ + JETTY-1214 Avoid ISE when scavenging invalid session
+ + JETTY-1223 DefaultServlet: NPE when setting relativeResourceBase and
+   resourceBase is not set
+ + JETTY-1226 javax.activation needs to be listed in the system classes
+ + JETTY-1237 Remember local/remote details of endpoint
+ + JETTY-1251 protected against closed selector
+ + COMETD-112 if two threads create the same channel, then create events may
+   occur after subscribe events
+ + 320264 Removed duplicate mime.property entries
+
+jetty-7.1.4.v20100610
+ + 298551 SslSocketConnector does not need keystore stream
+ + 295715 AbstractSessionManager decoupled from Context
+ + 292326 Stop continuations if server is stopped.
+ + 292814 Make QoSFilter and DoSFilter JMX manageable
+ + 293222 Improve request log to handle/show asynchronous latency
+ + 294212 Can not customize session cookie path
+ + 301608 Deregister shutdown hooks
+ + 302350 org.eclipse.jetty.server.NCSARequestLog is missing JavaDoc
+ + 303661 jetty.sh failes if JETTY_HOME is not writeable
+ + 304100 Better document JMX setup in jetty-jmx.xml
+ + 305300 AsyncContext.start dispatches runnable
+ + 314299 Create test harness for JDBCLoginService
+ + 314581 Implement the Sec-Websocket handshake
+ + 315190 CrossOriginFilter avoid headers not understood by WebSocket
+ + 315687 included init script fails to test for JETTY_HOME as empty
+ + 315715 Improved Cookie version handling. Server.setMaxCookieVersion
+ + 315744 Fixed STOP.PORT and STOP.KEY in start.jar
+ + 315748 Removed --fromDaemon from start.jar (replaced with --daemon)
+ + 315925 Improved context xml configuration handling
+ + 315995 Incorrect package name in system classes list
+ + 316119 Fixed maxIdleTime for SocketEndPoint
+ + 316254 Implement @DeclareRoles
+ + 316334 Breaking change on org.eclipse.jetty.client.HttpExchange
+ + 316399 Debug output in MultiPartFilter
+ + 316413 Restarting webapp for packed war fails
+ + 316557 OSGi HttpService failure due to undeployed context handlers
+ + JETTY-547 Delay close after shutdown until request read
+ + JETTY-1231 Support context request log handler
+
+jetty-7.1.3.v20100526
+ + 296567 HttpClient RedirectListener handles new HttpDestination
+ + 297598 JDBCLoginService uses hardcoded credential class
+ + 305898 Websocket handles query string in URI
+ + 307457 Exchanges are left unhandled when connection is lost
+ + 313205 Unable to run test-jdbc-sessions tests
+ + 314177 JSTL support is broken
+ + 314009 jetty.xml configuration file on command line
+ + 314459 support maven3 for builds
+
+jetty-7.1.2.v20100523
+ + 308866 Update test suite to JUnit4 - Module jetty-util
+ + 312948 Recycle SSL crypto buffers
+ + 313196 randomly allocate ports for session test.
+ + 313278 Implement octet ranges in IPAccessHandler
+ + 313336 secure websockets
+ + 314009 updated README.txt
+ + Update links to jetty website and wiki on test webapp
+
+jetty-7.1.1.v20100517
+ + 302344 Make the list of available contexts if root context is not configured
+   optional
+ + 304803 Remove TypeUtil Integer and Long caches
+ + 306226 HttpClient should allow changing the keystore and truststore type
+ + 308857 Update test suite to JUnit4 - Module jetty-jndi
+ + 308856 Update test suite to JUnit4 - Module jetty-jmx
+ + 308860 Update test suite to JUnit4 - Module jetty-rewrite
+ + 308850 Update test suite to JUnit4 - Module jetty-annotations
+ + 308853 Update test suite to JUnit4 - Module jetty-deploy
+ + 308854 Update test suite to JUnit4 - Module jetty-http
+ + 308859 Update test suite to JUnit4 - Module jetty-policy
+ + 308858 Update test suite to JUnit4 - Module jetty-plus
+ + 308863 Update test suite to JUnit4 - Module jetty-servlet
+ + 308855 Update test suite to JUnit4 - Module jetty-io
+ + 308862 Update test suite to JUnit4 - Module jetty-server
+ + 308867 Update test suite to JUnit4 - Module jetty-webapp
+ + 310918 Fixed write blocking for client HttpConnection
+ + 312526 Protect shutdown thread initialization during shutdown
+
+jetty-7.1.0 - 05 May 2010
+ + 306353 fixed cross context dispatch to root context.
+ + 311154 Added deprecated StringBuffer API for backwards compatibility
+ + 311554 Protect shutdown thread from Server#doStop
+ + 312243 Optimized timeout handling
+
+jetty-7.1.0.RC1 - 05 May 2010
+ + 286889 Allow System and Server classes to be set on Server instance and when
+   applied to all webapps
+ + 291448 SessionManager has isCheckingRemoteSessionIdEncoding
+ + 296650 JETTY-1198 reset idle timeout on request body chunks
+ + 297104 HTTP CONNECT does not work correct with SSL destinations
+ + 306782 Close connection when expected 100 continues is not sent
+ + 308848 Update test suite to JUnit4 - Module jetty-ajp
+ + 308861 Update test suite to JUnit4 - Module jetty-security
+ + 308864 Update test suite to JUnit4 - Module jetty-servlets
+ + 308865 Update test suite to JUnit4 - Module jetty-start
+ + 308868 Update test suite to JUnit4 - Module jetty-websocket
+ + 308869 Update test suite to JUnit4 - Module jetty-xml
+ + 309153 Hide extracted WEB-INF/lib when running a non-extracted war
+ + 309369 Added WebSocketLoadTest
+ + 309686 Fixed response buffers usage
+ + 310094 Improved start.jar options handling and configs
+ + 310382 NPE protection when WAR is not a file
+ + 310562 SslSocketConnector fails to start if excludeCipherSuites is set
+ + 310634 Get the localport when opening a server socket.
+ + 310703 Update test suite to JUnit4 - Module tests/test-integration
+ + 310918 Synchronize content exchange
+ + 311154 Use Appendable in preference to StringBuilder/StringBuffer in APIs
+ + 311362 Optional org.eclipse.jetty.util.log.stderr.SOURCE
+ + JETTY-1030 Improve jetty.sh script
+ + JETTY-1142 Replace Set-Cookies with same name
+
+jetty-7.1.0.RC0 - 27 April 2010
+ + 294563 Websocket client connection
+ + 297104 Improve handling of CONNECT method
+ + 306349 ProxyServlet does not work unless deployed at /
+ + 307294 Add AbstractLifeCycle.AbstractLifeCycleListener implementation
+ + 307847 Fixed combining mime type parameters
+ + 307898 Handle large/async websocket messages
+ + 308009 ObjectMBean incorrectly casts getTargetException() to Exception
+ + 308420 convert jetty-plus.xml to use DeploymentManager
+ + 308925 Protect the test webapp from remote access
+ + 309466 Removed synchronization from StdErrLog
+ + 309765 Added JSP module
+ + 310051 _configurationClasses now defaults to null in WebAppContext
+ + 310094 Improved start.jar usage and config files
+ + 310431 Default ErrorHandler as server Bean
+ + 310467 Allow SocketConnector to create generic Connection objects
+ + 310603 Make Logger interface consistent
+ + 310605 Make a clean room implementation of the JSP logger bridge
+ + Add AnnotationConfiguration to jetty-plus.xml
+ + Fix jetty-plus.xml reference to addLifeCycle
+ + JETTY-1200 SSL NIO Endpoint wraps non NIO buffers
+ + JETTY-1202 Use platform default algorithm for SecureRandom
+ + Merged 7.0.2.v20100331
+ + Add NPE protection to ContainerInitializerConfiguration
+ + Temporarily remove jetty-osgi module to clarify jsp version compatibility
+ + JETTY-1212 handle long content lengths
+ + JETTY-1214 avoid ISE when scavenging invalid session
+ + JETTY-903 Stop both caches
+
+jetty-7.0.2.v20100331 - 31 March 2010
+ + 297552 Don't call Continuation timeouts from acceptor tick
+ + 298236 Additional unit tests for jetty-client
+ + 306783 NPE in StdErrLog when Throwable is null
+ + 306840 Suppress content-length in requests with no content
+ + 306880 Support for UPGRADE in HttpClient
+ + 306884 Suspend with timeout <=0 never expires
+ + 306782 httpbis interpretation of 100 continues. Body never skipped
+ + 307589 updated servlet 3.0 continuations for final API
+ + Take excess logging statements out of startup
+ + Ensure webapps with no WEB-INF don't scan WEB-INF/lib
+ + Allow Configuration array to be set on Server instance for all web apps
+
+jetty-6.1.24 - 21 April 2010
+ + JETTY-903 Stop both caches
+ + JETTY-1198 reset idle timeout on request body chunks
+ + JETTY-1200 SSL NIO Endpoint wraps non NIO buffers
+ + JETTY-1211 SetUID loadlibrary name and debug
+ + 308925 Protect the test webapp from remote access
+ + COMETD-99 ClientImpl logs exceptions in listeners with "debug" level
+ + COMETD-100 ClientImpl logs "null" as clientId
+ + COMETD-107 Reloading the application with reload extension does not fire
+   /meta/connect handlers until long poll timeout expires
+ + Upgraded to cometd 1.1.1 client
+
+jetty-6.1.23 - 02 April 2010
+ + JSON parses NaN as null
+ + Updated JSP to 2.1.v20091210
+ + COMETD-28 Improved concurrency usage in Bayeux and channel handling
+ + COMETD-46 reset ContentExchange content on resend
+ + COMETD-58 Extension.rcv() return null causes NPE in
+   AbstractBayeux.PublishHandler.publish
+ + COMETD-59 AcknowledgeExtension does not handle null channel in Message
+ + COMETD-62 Delay add listeners until after client construction
+ + 296569 removeLifeCycleListener() has no effect
+ + 292800 ContextDeployer - recursive setting is undone by FilenameFilter
+ + 300178 HttpClients opens too many connections that are immediately closed
+ + 304658 Inconsistent Expires date format in Set-Cookie headers with maxAge=0
+ + 304698 org.eclipse.jetty.http.HttpFields$DateGenerator.formatCookieDate()
+   uses wrong (?) date format
+ + 306331 Session manager is kept after call to doScope
+ + 306840 suppress content-length in requests without content
+ + Remove references to old content in HttpClient client tests for www.sun.com
+ + JETTY-875 Allow setting of advice field in response to Handshake
+ + JETTY-983 Range handling cleanup
+ + JETTY-1133 Handle multiple URL ; parameters
+ + JETTY-1134 BayeuxClient: Connect msg should be sent as array
+ + JETTY-1149 transient should be volatile in AbstractLifeCycle
+ + JETTY-1153 System property for UrlEncoded charset
+ + JETTY-1155 HttpConnection.close notifies HttpExchange
+ + JETTY-1156 SSL blocking close with JVM Bug busy key fix
+ + JETTY-1157 Don't hold array passed in write(byte[])
+ + JETTY-1158 NPE in StdErrLog when Throwable is null
+ + JETTY-1161 An Extension that measures round-trip delay for cometd messages.
+ + JETTY-1162 Add support for async/sync message delivery to BayeuxClient
+ + JETTY-1163 AJP13 forces 8859-1 encoding
+ + JETTY-1168 Don't hold sessionIdManager lock when invalidating sessions
+ + JETTY-1170 NPE on client when server-side extension returns null
+ + JETTY-1174 Close rather than finish Gzipstreams to avoid JVM leak
+ + JETTY-1175 NPE in TimesyncExtension
+ + JETTY-1176 NPE in StatisticsExtension if client is null
+ + JETTY-1177 Allow error handler to set cacheControl
+ + JETTY-1178 Make continuation servlet to log the incoming JSON in case of
+   parsing errors
+ + JETTY-1180 Extension methods are wrongly called
+ + JETTY-1182 COMETD-76 do not lock client while sending messages.
+ + JETTY-1183 AcknowledgedMessagesClientExtension does not handle correctly
+   message resend when client long polls again
+ + JETTY-1186 Better document JMX setup in jetty-jmx.xml
+ + JETTY-1188 Null old jobs in QueuedThreadPool
+ + JETTY-1191 Limit size of ChannelId cache
+ + JETTY-1192 Fixed Digested POST and HttpExchange onRetry
+ + JETTY-1193 Exception details are lost in AbstractCometdServlet.getMessages
+ + JETTY-1195 Coalesce buffers in ChannelEndPoint.flush()
+ + JETTY-1196 Enable TCP_NODELAY by default in client connectors
+ + JETTY-1197 SetUID module test fails when using Java 1.6 to build
+ + JETTY-1199 FindBugs cleanups
+ + JETTY-1205 Memory leak in browser-to-client mapping
+ + JETTY-1207 NPE protection in FormAuthenticator
+ + JETTY-1202 Use platfrom default algorithm for SecureRandom
+
+jetty-7.0.2.RC0
+ + JSON parses NaN as null
+ + 290765 Reset input for HttpExchange retry.
+ + 292799 WebAppDeployer - start a started context?
+ + 292800 ContextDeployer - recursive setting is undone by FilenameFilter
+ + 294799 when configuring a webapp, don't look for WEB-INF/jetty6-web.xml
+ + 296569 removeLifeCycleListener() has no effect
+ + 296765 JMX Connector Server and ShutdownThread
+ + 297421 Hide server/system classes from WebAppClassLoader.getResources
+ + 297783 Handle HEAD reponses in HttpClient
+ + 298144 Unit test for jetty-client connecting to a server that uses Basic
+   Auth
+ + 298145 Reorganized test harness to separate the HTTP PUT and HTTP GET test
+   URLs
+ + 298234 Unit test for jetty-client handling different HTTP error codes
+ + 298667 DeploymentManager uses ContextProvider and WebAppProvider
+ + 299455 Enum support in JSONPojoConvertor
+ + 300178 HttpClients opens too many connections that are immediately closed
+ + 300733 Jars from lib/ext are not visible for my web application
+ + 300933 AbstractConnector uses concurrent objects for stats
+ + 301089 Improve statistics available in StatisticsHandler and
+   AbstractConnector
+ + 302018 Improve statistics available in AbstractSessionHandler
+ + 302198 Rename HttpClient authorization classes to Authentication
+ + 302244 invalid configuration boolean conversion in FormAuthenticator
+ + 302246 redirect loop using form authenticator
+ + 302556 CrossOriginFilter does not work correctly when
+   Access-Control-Request-Headers header is not present
+ + 302669 WebInfConfiguration.unpack() unpacks WEB-INF/* from a
+   ResourceCollection, breaking JSP reloading with ResourceCollections
+ + 303526 Added include cyphers
+ + 304307 Handle ;jsessionid in FROM Auth
+ + 304532 Skip some tests on IBM JVMs until resolved
+ + 304658 Inconsistent Expires date format in Set-Cookie headers with maxAge=0
+ + 304698 org.eclipse.jetty.http.HttpFields$DateGenerator.formatCookieDate()
+   uses wrong (?) date format
+ + 304781 Reset HttpExchange timeout on slow request content.
+ + 304801 SSL connections FULL fix
+ + 306330 Flush filter chain cache after Invoker servlet
+ + 306331 Session manager is kept after call to doScope
+ + JETTY-776 Make new session-tests module to concentrate all reusable session
+   clustering test code
+ + JETTY-910 Allow request listeners to access session
+ + JETTY-983 Range handling cleanup
+ + JETTY-1151 JETTY-1098 allow UTF-8 with 0 carry bits
+ + JETTY-1153 System property for UrlEncoded charset
+ + JETTY-1155 HttpConnection.close notifies HttpExchange
+ + JETTY-1156 SSL blocking close with JVM Bug busy key fix
+ + JETTY-1157 Don't hold array passed in write(byte[])
+ + JETTY-1163 AJP13 forces 8859-1 encoding
+ + JETTY-1177 Allow error handler to set cacheControl
+ + JETTY-1179 Persistant session tables created on MySQL use wrong datatype
+ + JETTY-1184 shrink thread pool even with frequent small jobs
+ + JETTY-1133 Handle multiple URL ; parameters
+ + JETTY-1174 Close rather than finish Gzipstreams to avoid JVM leak
+ + JETTY-1192 Fixed Digested POST
+ + JETTY-1199 FindBugs cleanups
+ + COMETD-46 reset ContentExchange response content on resend
+ + Added IPAccessHandler
+ + Updated Servlet3Continuation to final 3.0.20100224
+ + 305997 Coalesce buffers in ChannelEndPoint.flush()
+ + 306028 Enable TCP_NODELAY by default in client connectors
+
+jetty-8.0.0.M0 - 28 February 2010
+ + Updated servlet 3.0 spec 20100224
+ + Merged 7.0.1.v20091116
+ + Updated to cometd 1.0.1
+
+jetty-7.0.1.v20091125 - 25 November 2009
+ + 274251 DefaultServlet supports exact match mode.
+ + 288401 HttpExchange.cancel() Method Unimplemented
+ + 289027 deobfuscate HttpClient SSL passwords
+ + 289265 Test harness for async input
+ + 289959 Improved ContextDeployer configuration
+ + 289960 start.jar assumes command line args are configs
+ + 291019 Fix default DEBUG option; "-D.DEBUG=true" now works
+ + 291340 Race condition in onException() notifications
+ + 291543 make bin/*.sh scripts executable in distribution
+ + 291589 Update jetty-rewrite demo
+ + 292642 Fix errors in embedded Jetty examples
+ + 292825 Continuations ISE rather than ignore bad transitions
+ + 292546 Proactively enforce HttpClient idle timeout
+ + 293222 Improved StatisticsHandler for async
+ + 293506 Unable to use jconsole with Jetty when running with security manager
+ + 293557 Add "jad" mime mapping
+ + 294154 Patched jetty-osgi
+ + 294224 HttpClient timeout setting has no effect when connecting to host
+ + 294345 Support for HTTP/301 + HTTP/302 response codes
+ + 294563 Initial websocket implementation
+ + JETTY-937 More JVM bug work arounds. Insert pause if all else fails
+ + JETTY-983 Send content-length with multipart ranges
+ + JETTY-1114 unsynchronised WebAppClassloader.getResource(String)
+ + JETTY-1121 Merge Multipart query parameters
+ + JETTY-1122 Handle multi-byte utf that causes buffer overflow
+ + JETTY-1125 TransparentProxy incorrectly configured for test webapp
+ + JETTY-1129 Filter control characters out of StdErrLog
+ + JETTY-1135 Handle connection closed before accepted during JVM bug work
+   around
+ + JETTY-1144 fixed multi-byte character overflow
+ + JETTY-1148 Reset partially read request reader.
+ + COMETD-34 Support Baeyux MBean
+ + Fixed XSS issue in CookieDump demo servlet.
+ + Improved start.jar usage text for properties
+ + Promoted Jetty Centralized Logging from Sandbox
+ + Promoted Jetty WebApp Verifier from Sandbox
+ + Refactored continuation test harnessess
+ + Fixed client abort asocciation
+ + CQ-3581 jetty OSGi contribution
+ + Moved centralized logging and verifier back to sandbox
+ + CVE-2009-3555 Prevent SSL renegotiate for SSL vulnerability
+ + 295421 Cannot reset() a newly created HttpExchange: IllegalStateException 0
+   => 0
+ + 295562 CrossOriginFilter does not work with default values in Chrome and
+   Safari
+
+jetty-7.0.0.v20091005 - 05 October 2009
+ + 291340 Race condition in onException() notifications
+
+jetty-6.1.21 - 22 September 2009
+ + JETTY-719 Document state machine of jetty http client
+ + JETTY-933 State == HEADER in client
+ + JETTY-936 Improved servlet matching and optimized
+ + JETTY-1038 ChannelId.isParentOf returns the wrong result
+ + JETTY-1061 Catch exceptions from cometd listeners
+ + JETTY-1072 maven plugin handles context path not as documented
+ + JETTY-1080 modified previous fix for windows
+ + JETTY-1084 HEAD command not setting content-type in response under certain
+   circumstances
+ + JETTY-1090 resolve inifinte loop condition for webdav listener
+ + JETTY-1092 MultiPartFilter can be pushed into infinite loop
+ + JETTY-1093 Request.toString throws exception when size exceeds 4k
+ + JETTY-1098 Default form encoding is UTF8
+ + JETTY-1099 Improve cookie handling in BayeuxClient
+ + JETTY-1100 extend setuid feature to allow setting max open file descriptors
+ + JETTY-1102 Wrong usage of deliver() in private chat messages
+ + JETTY-1108 SSL EOF detection
+ + JETTY-1109 Improper handling of cookies in Terracotta tests
+ + JETTY-1112 Response fails if header exceeds buffer size
+ + JETTY-1113 IllegalStateException when adding servlet filters
+   programmatically
+ + JETTY-1114 Unsynchronize webapp classloader getResource
+ + 282543 HttpClient SSL buffer size fix
+ + 288055 fix jetty-client for failed listener state machine
+ + 288153 reset exchange when resending
+ + 288182 PUT request fails during retry
+ + Fix DefaultServletTest for windows
+ + Update Jetty implementation of com.sun.net.httpserver.*
+ + Include tmp directory sweeper in build
+ + Streamline jetty-jboss build, update sar to QueuedThreadPool
+
+jetty-7.0.0.RC6 - 21 September 2009
+ + Fixed XSS issue in CookieDump demo servlet.
+ + 289958 StatisticsServlet incorrectly adds StatisticsHandler
+ + 289960 start.jar assumes command line args are configs
+ + 290081 Eager consume LF after CR
+ + 290761 HttpExchange isDone handles intercepted events.
+ + JETTY-719 Document state machine of jetty http client
+ + JETTY-780 CNFE during startup of webapp with spring-context >= 2.5.1
+ + JETTY-936 274251 Improved servlet matching and optimized'
+ + JETTY-1080 modify previous fix to work on windows
+ + JETTY-1084 HEAD command not setting content-type in response under certain
+   circumstances
+ + JETTY-1086 Use UncheckedPrintWriter & cleaned up HttpStatus.Code usage
+ + JETTY-1090 resolve potential infinite loop with webdav listener
+ + JETTY-1092 MultiPartFilter can be pushed into infinite loop
+ + JETTY-1093 Request.toString throws exception when size exceeds 4k
+ + JETTY-1098 Default form encoding is UTF8
+ + JETTY-1101 Updated servlet3 continuation constructor
+ + JETTY-1105 Custom error pages aren't working
+ + JETTY-1108 SSL EOF detection
+ + JETTY-1112 Response fails if header exceeds buffer size
+ + JETTY-1113 IllegalStateException when adding servlet filters
+   programmatically
+ + 280723 Add non blocking statistics handler
+ + 282543 HttpClient SSL buffer size fix
+ + 283357 org.eclipse.jetty.server.HttpConnectionTest exceptions
+ + 288055 jetty-client fails to resolve failed resolution attempts correctly
+ + 288153 jetty-client resend doesn't reset exchange
+ + 288466 LocalConnector is not thread safe
+ + 288514 AbstractConnector does not handle InterruptedExceptions on shutdown
+ + 288772 Failure to connect does not set status to EXCEPTED
+ + 289146 formalize reload policy functionality
+ + 289156 jetty-client: no longer throw runtime exception for bad authn details
+ + 288182 PUT request fails during retry
+ + 289221 HttpExchange does not timeout when using blocking connector
+ + 289285 org.eclipse.jetty.continuation 7.0.0.RC5 imports the
+   org.mortbay.util.ajax package
+ + 289686 HttpExchange.setStatus() has too coarse synchronization
+ + Tweak DefaultServletTest under windows
+ + Copy VERSION.txt to distro
+ + Remove printlns from jetty-plus
+
+jetty-6.1.20 - 27 August 2009
+ + JETTY-838 Don't log and throw
+ + JETTY-874 Better error on full header.
+ + JETTY-960 Support ldaps
+ + JETTY-1046 maven-jetty-jspc-plugin keepSources takes affect only in
+   packageRoot
+ + JETTY-1057 XSS error page
+ + JETTY-1065 Add RedirectRegexRule to provide match/replace/group redirect
+   support
+ + JETTY-1066 Send 400 error for request URI parse exceptions
+ + JETTY-1068 Avoid busy flush of async SSL
+ + JETTY-1069 Adjust Bayeux Java client backoff algorithm
+ + JETTY-1070 Java Bayeux Client not sending /meta/disconnect on stop
+ + JETTY-1074 JMX thread manipulation
+ + JETTY-1077 HashSSORealm shares Principals between UserRealms
+ + JETTY-1078 Automatic JSON Pojo Conversion
+ + JETTY-1079 ResourceCollection.toString() can throw IllegalStateException
+ + JETTY-1080 Ignore files that would be extracted outside the destination
+   directory when unpacking WARs
+ + JETTY-1081 Handle null content type in GzipFilter
+ + JETTY-1084 Disable GzipFilter for HEAD requests
+ + JETTY-1085 Allow url sessionID if cookie invalid
+ + JETTY-1086 Added UncheckedPrintWriter to avoid ignored EOFs
+ + JETTY-1087 Chunked SSL non blocking input
+ + JETTY-1098 Upgrade jsp to SJSAS-9_1_1-B60F-07_Jan_2009
+ + 283513 Check endp.isOpen when blocking read
+ + 283818 fixed merge of forward parameters
+ + 285006 Fixed NPE in AbstractConnector during shutdown
+ + 286535 ContentExchange status code
+ + 286911 Clean out cache when recycling HTTP fields
+ + COMETD-7 max latency config for lazy messages
+ + Added getSubscriptions to cometd client
+ + Made unSubscribeAll public on cometd client
+ + Removed clearing of queue in unSubscribeAll for cometd client
+ + Update test-jndi and test-annotation examples for atomikos 3.5.5
+ + Clarified cometd interval timeout and allow per client intervals
+ + Update Main.main method to call setWar
+ + Added DebugHandler
+
+jetty-7.0.0.RC5 - 27 August 2009
+ + 286911 Clean out cache when recycling HTTP fields
+ + JETTY-838 Don't log and throw
+ + JETTY-874 Better header full warnings
+ + JETTY-960 Support for ldaps
+ + JETTY-1081 Handle null content type in GzipFilter
+ + JETTY-1084 Disable GzipFilter for HEAD requests
+ + JETTY-1085 Allow url sessionID if cookie invalid
+ + JETTY-1086 Added UncheckedPrintWriter to avoid ignored EOFs
+ + JETTY-1087 Chunked SSL non blocking input
+ + 287496 Use start.ini always and added --exec
+ + 287632 FilterContinuations for blocking jetty6
+
+jetty-6.1.19 - 01 July 2009
+ + JETTY-799 shell script for jetty on cygwin
+ + JETTY-863 Non blocking stats handler
+ + JETTY-937 Further Improvements for sun JVM selector bugs
+ + JETTY-970 BayeuxLoadGenerator latency handling
+ + JETTY-1011 Grizzly uses queued thread pool
+ + JETTY-1028 jetty:run plugin should check for the web.xml from the overlays
+   if not found in src/main/webapp/WEB-INF/
+ + JETTY-1029 Handle quoted cookie paths
+ + JETTY-1031 Handle large pipeline
+ + JETTY-1033 jetty-plus compiled with jdk1.5
+ + JETTY-1034 Cookie parsing
+ + JETTY-1037 reimplemented channel doRemove
+ + JETTY-1040 jetty.client.HttpConnection does not handle non IOExceptions
+ + JETTY-1042 Avoid cookie reuse on shared connection
+ + JETTY-1044 add commons-daemon support as contrib/start-daemon module
+ + JETTY-1045 Handle the case where request.PathInfo() should be "/*"
+ + JETTY-1046 maven-jetty-jspc-plugin keepSources takes affect only in
+   packageRoot
+ + JETTY-1047 Cometd client can grow cookie headers
+ + JETTY-1048 Default servlet can handle partially filtered large static
+   content
+ + JETTY-1049 Improved transparent proxy usability
+ + JETTY-1054 Avoid double deploys
+ + JETTY-1055 Cookie quoting
+ + JETTY-1057 Error page stack trace XSS
+ + JETTY-1058 Handle trailing / with aliases on
+ + JETTY-1062 Don't filter cometd message without data
+
+jetty-7.0.0.RC4 - 18 August 2009
+ + 286185 Implement ability for JSON implementation to automatically register
+   convertors
+ + Added discoverable start options
+ + 286535 ContentExchange status code
+ + 285891 SessionAuthentication is serializable
+ + JETTY-1079 ResourceCollection.toString
+ + 279820 Fixed HotSwapHandler
+ + JETTY-1080 Ignore files that would be extracted outside the destination
+   directory when unpacking WARs
+ + JETTY-1057 XSS error page
+
+jetty-7.0.0.RC3 - 07 August 2009
+ + 277403 remove system properties
+ + JETTY-1074 JMX thread manipulation
+ + Improved deferred authentication handling
+ + 285697 extract parameters if dispatch has query
+ + 282447 concurrent destinations in HttpClient
+ + 283172 fix Windows build, broken on directory creation with the
+   DefaultServlet
+ + 283375 additional error-checking on SSL connector passwords to prevent NPE
+ + 283513 Check endp.isOpen when blocking read
+
+jetty-7.0.0.RC2 - 29 June 2009
+ + 283844 Webapp / TLD errors are not clear
+ + 283375 improved extensibility of SSL connectors
+ + 283818 fixed merge of forward parameters
+ + backport jetty-8 annotation parsing to jetty-7
+ + Disassociate method on IdentityService
+ + 284510 Enhance jetty-start for diagnosis and unit testing
+ + 284475 update jetty.sh for new OPTIONS syntax
+ + Added DebugHandler
+ + Added JavaUtilLog for Jetty logging to java.util.logging framework
+ + 284981 Implement a cross-origin filter
+ + Improved handling of overlays and resourceCollections
+ + 285006 fix AbstractConnector NPE during shutdown.
+
+jetty-7.0.0.RC1 - 15 June 2009
+ + JETTY-1066 283357 400 response for bad URIs
+ + JETTY-1068 Avoid busy flush of async SSL
+ + 283344 Startup on windows is broken
+
+jetty-7.0.0.RC0 - 08 June 2009
+ + JETTY-967 create standalone build for PKCS12Import at codehaus
+ + JETTY-1056 update jetty-ant module for Jetty 7 at codehaus trunk
+ + JETTY-1058 Handle trailing / with aliases
+ + 280843 Buffer pool uses isHeader
+ + 271535 Adding integration tests, and enabling RFC2616 tests
+ + 281287 Handle date headers before 1 Jan 1970
+ + 282807 Better handling of 100 continues if response committed.
+
+jetty-7.0.0.M4 - 01 June 2009
+ + 281059 NPE in QTP with debug on
+ + JETTY-799 shell script for jetty on cygwin
+ + JETTY-1031 Handle large pipeline
+ + JETTY-1034 Cookie parsing
+ + JETTY-1042 Prevent cookie leak between shared connection
+ + JETTY-1048 Fix for large partially filtered static content
+ + JETTY-1049 Improved transparent proxy usability
+ + JETTY-1054 Avoid double deploys
+ + JETTY-1055 Cookie quoting
+ + JETTY-1057 Error page stack trace XSS
+
+jetty-7.0.0.M3 - 20 June 2009
+ + fixed race with expired async listeners
+ + refactored configuration mechanism
+ + added WebAppContext.setConfigurationDiscovered for servlet 3.0 features
+ + 274251 Allow dispatch to welcome files that are servlets (configurable)
+ + 277403 Cleanup system property usage.
+ + 277798 Denial of Service Filter
+ + Portable continuations for jetty6 and servlet3
+ + Refactored continuations to only support response wrapping
+ + Added ContinuationThrowable
+ + 276545 Quoted cookie paths
+ + 279725 Support 100 and 102 expectations
+ + Refactored AbstractBuffers to HttpBuffers for performance
+ + Numerous cleanups from static code analysis
+ + 280707 client.HttpConnection does not catch and handle non-IOExceptions
+ + 281470 Handle the case where request.PathInfo() should be "/*"
+
+jetty-7.0.0.M2 - 18 May 2009
+ + JETTY-937 Work around Sun JVM bugs
+ + JETTY-941 Linux chkconfig hint
+ + JETTY-959 CGI servlet doesn't kill the CGI in case the client disconnects
+ + JETTY-980 Fixed ResourceHandler ? handling, and bad URI creation in listings
+ + JETTY-996 Make start-stop-daemon optional
+ + 273767 Update to use geronimo annotations spec 1.1.1
+ + JETTY-1003 java.lang.IllegalArgumentException: timeout can't be negative
+ + JETTY-1004 CERT VU#402580 Canonical path handling includes ? in path segment
+ + JETTY-1013 MySql Error with JDBCUserRealm
+ + JETTY-1014 Enable start-stop-daemon by default on jetty.sh
+   (START_STOP_DAEMON=1)
+ + JETTY-1015 Reduce BayeuxClient and HttpClient lock contention
+ + JETTY-1020 ZipException in org.mortbay.jetty.webapp.TagLibConfiguration
+   prevents all contexts from being loaded
+ + 275396 Added ScopedHandler to set servlet scope before security handler
+
+jetty-6.1.18 - 16 May 2009
+ + JETTY-937 Improved work around sun JVM selector bugs
+ + JETTY-1004 CERT VU#402580 Canonical path handling includes ? in path segment
+ + JETTY-1008 ContinuationBayeux destroy is called
+ + JETTY-1013 MySql Error with JDBCUserRealm
+ + JETTY-1014 Enable start-stop-daemon by default on jetty.sh
+   (START_STOP_DAEMON=1)
+ + JETTY-1015 Reduce BayeuxClient and HttpClient lock contention
+ + JETTY-1017 HttpDestination has too coarse locking
+ + JETTY-1018 Denial of Service Filter
+ + JETTY-1020 ZipException in org.mortbay.jetty.webapp.TagLibConfiguration
+   prevents all contexts from being loaded
+ + JETTY-1022 Removed several 1.5isms
+
+jetty-5.1.15 - 18 May 2009
+ + JETTY-418 synchronized load class
+ + JETTY-1004 CERT VU402580 Canonical path handling includes ? in path segment
+ + Fixes for CERT438616-CERT237888-CERT21284
+
+jetty-6.1.17 - 30 April 2009
+ + JETTY-936 Make optional dispatching to welcome files as servlets
+ + JETTY-937 Work around sun JVM selector bugs
+ + JETTY-941 Linux chkconfig hint
+ + JETTY-957 Reduce hardcoded versions
+ + JETTY-980 Security / Directory Listing XSS present
+ + JETTY-982 Make test-jaas-webapp run with jetty:run
+ + JETTY-983 Default Servlet sets accept-ranges for cached/gzipped content
+ + JETTY-988 X-Forwarded-Host has precedence over X-Forwarded-Server
+ + JETTY-989 GzipFilter handles addHeader
+ + JETTY-990 Async HttpClient connect
+ + JETTY-992 URIUtil.encodePath encodes markup characters
+ + JETTY-996 Make start-stop-daemon optional
+ + JETTY-997 Remove jpackage-utils dependency on rpm install
+ + JETTY-985 Allow listeners to implement both interfaces
+ + JETTY-1000 Avoided needless 1.5 dependency
+ + JETTY-1002 cometd-api to 1.0.beta8
+ + JETTY-1003 java.lang.IllegalArgumentException: timeout can't be negative
+ + JETTY-1004 CERT VU#402580 Canonical path handling includes ? in path segment
+ + JETTY-1006 Resume meta connect on all XD messages
+
+jetty-7.0.0.M1 - 22 April 2009
+ + 271258 FORM Authentication dispatch handling avoids caching
+ + Initial support for LoginService.logout
+ + Removed HTTPConnection specifics from connection dispatching
+ + JETTY-695 Handler dump
+ + Reworked authentication for deferred authentication
+ + Reworked JMX for new layout
+ + JETTY-983 DefaultServlet generates accept-ranges for cached/gzip content
+ + 273011 JETTY-980 JETTY-992 Security / Directory Listing XSS present
+ + 271536 Add support to IO for quietly closing Readers / Writers
+ + 273101 Fix DefaultServletTest XSS test case
+ + 273153 Test for Nested references in DispatchServlet
+
+jetty-6.1.16 - 01 April 2009
+ + JETTY-702 Create "jetty-tasks.xml" for the Ant plugin
+ + JETTY-899 Standardize location for configuration files which go into etc
+ + JETTY-936 Allow dispatch to welcome files that are servlets
+ + JETTY-944 Lazy messages don't prevent long polls waiting
+ + JETTY-946 Redeploys with maven jetty plugin of webapps with overlays don't
+   work
+ + JETTY-947 Exception stops terracotta session scavenger
+ + JETTY-948 ConcurrentModificationException in TerracottaSessionManager
+   scavenger
+ + JETTY-949 Move cometd source to cometd.org project
+ + JETTY-953 SSL keystore file input stream is not being closed directly
+ + JETTY-956 SslSelectChannelConnector - password should be the default value
+   of keyPassword if not specified
+ + JETTY-959 CGI servlet doesn't kill the CGI in case the client disconnects
+ + JETTY-964 Typo in Jetty 6.1.15 Manifest - Bundle-RequiredExcutionEnvironment
+ + JETTY-972 Move cometd code back from cometd.org project (temporarily)
+ + JETTY-973 Deliver same message to a collection of cometd Clients
+
+jetty-7.0.0.M0 - 27 March 2009
+ + JETTY-496 Support inetd/xinetd through use of System.inheritedChannel()
+ + JETTY-540 Merged 3.0 Public Review changes
+ + JETTY-567 Delay in initial TLS Handshake With FireFox 3 beta5 and
+   SslSelectChannelConnector
+ + JETTY-600 Automated tests of WADI integration + upgrade to WADI 2.0
+ + JETTY-691 System.getProperty() calls ... wrap them in doPrivileged
+ + JETTY-713 Expose additional AbstractConnector methods via MBean
+ + JETTY-731 Completed DeliverListener for cometd
+ + JETTY-748 RandomAccessFileBuffer for hadoop optimization
+ + JETTY-749 Improved ArrayQueue
+ + JETTY-765 ensure stop mojo works for all execution phases
+ + JETTY-774 Improved caching of mime types with charsets
+ + JETTY-775 AbstractSessionTest remove timing related test
+ + JETTY-778 handle granular windows timer in lifecycle test
+ + JETTY-779 Fixed line feed in request log
+ + JETTY-781 Add "mvn jetty:deploy-war" for deploying a pre-assembled war
+ + JETTY-782 Implement interval advice for BayeuxClient
+ + JETTY-783 Update jetty self-signed certificate
+ + JETTY-784 TerracottaSessionManager leaks sessions scavenged in other nodes
+ + JETTY-786 Allow DataSourceUserRealm to create tables
+ + JETTY-787 Handle MSIE7 mixed encoding
+ + JETTY-788 Fix jotm for scoped jndi naming
+ + JETTY-790 WaitingContinuations can change mutex if not pending
+ + JETTY-792 TerracottaSessionManager does not unlock new session with
+   requested id
+ + JETTY-793 Fixed DataCache millisecond rounding
+ + JETTY-794 WADI integration tests fail intermittently.
+ + JETTY-795 NullPointerException in SocketConnector.java
+ + JETTY-801 Bring back 2 arg EnvEntry constructor
+ + JETTY-802 Modify the default error pages to make association with Jetty
+   clearer
+ + JETTY-804 HttpClient timeout does not always work
+ + JETTY-805 Fix jetty-jaas.xml for new UserRealm package
+ + JETTY-806 Timeout related Deadlocks in HTTP Client
+ + JETTY-807 HttpTester to handle charsets
+ + JETTY-808 cometd client demo run.sh
+ + JETTY-809 Need a way to customize WEB-INF/lib file extensions that are added
+   to the classpath
+ + JETTY-811 Allow configuration of system properties for the maven plugin
+   using a file
+ + JETTY-813 Simplify NCSARequestLog.java
+ + JETTY-814 Add org.eclipse.jetty.client.Address.toString()
+ + JETTY-816 Implement reconnect on java bayeux client
+ + JETTY-817 Aborted SSL connections may cause jetty to hang with full cpu
+ + JETTY-818 Support javax.servlet.request.ssl_session_id
+ + JETTY-821 Allow lazy loading of persistent sessions
+ + JETTY-822 Commit when autocommit=true causes error with mysql
+ + JETTY-823 Extend start.config profiles
+ + JETTY-824 Access to inbound byte statistics
+ + JETTY-825 URL decoding of spaces (+) fails for encoding not utf8
+ + JETTY-830 Add ability to reserve connections on http client
+ + JETTY-831 Add ability to stop java bayeux client
+ + JETTY-832 More UrlDecoded handling in relation to JETTY-825
+ + JETTY-834 Configure DTD does not allow <Map> children
+ + JETTY-837 Response headers set via filter are ignored for static resources
+ + JETTY-840 add default mime types to *.htc and *.pps
+ + JETTY-841 Duplicate messages when sending private message to yourself with
+   cometd chat demo
+ + JETTY-842 NPE in jetty client when no path component
+ + JETTY-843 META-INF/MANIFEST.MF is not present in unpacked webapp
+ + JETTY-844 Replace reflection with direct invocation in Slf4jLog
+ + JETTY-848 Temporary folder not fully cleanup after stop (via Sweeper)
+ + JETTY-854 JNDI scope does not work with applications in a .war
+ + JETTY-859 MultiPartFilter ignores the query string parameters
+ + JETTY-861 switched buffer pools to ThreadLocal implementation
+ + JETTY-862 EncodedHttpURI ignores given encoding in constructor
+ + JETTY-866 jetty-client test case fix
+ + JETTY-869 NCSARequestLog locale config
+ + JETTY-870 NullPointerException in Response when performing redirect to wrong
+   relative URL
+ + JETTY-871 jetty-client expires() NPE race condition fixed
+ + JETTY-876 Added new BlockingArrayQueue and new QueuedThreadPool
+ + JETTY-894 Add android .apk to mime types
+ + JETTY-897 Remove swing dependency in GzipFilter
+ + JETTY-898 Allow jetty debs to start with custom java args provided by users
+ + JETTY-899 Standardize location and build process for configuration files
+   which go into etc
+ + JETTY-890 merge jaspi branch to trunk
+ + JETTY-909 Update useragents cache
+ + JETTY-917 Change for JETTY-811 breaks systemProperties config parameter in
+   maven-jetty-plugin
+ + JETTY-922 Fixed NPE on getRemoteHost when socket closed
+ + JETTY-923 Client supports attributes
+ + JETTY-926 default location for generatedClasses of jspc plugin is incorrect
+ + JETTY-939 NPE in AbstractConfiguration.callPreDestroyCallbacks
+ + JETTY-938 Deadlock in the TerracottaSessionManager
+ + JETTY-946 Redeploys with maven jetty plugin of webapps with overlays don't
+   work
+ + JETTY-950 Fix double-printing of request URI in request log
+ + JETTY-953 SSL keystore file input stream is not being closed directly
+ + JETTY-956 SslSelectChannelConnector - password should be the default value
+   of keyPassword if not specified
+ + moved to org.eclipse packages
+ + simplified HandlerContainer API
+
+jetty-6.1.15 - 04 March 2009
+ + JETTY-931 Fix issue with jetty-rewrite.xml
+ + JETTY-934 fixed stop/start of Bayeux Client
+ + JETTY-938 Deadlock in the TerracottaSessionManager
+ + JETTY-939 NPE in AbstractConfiguration.callPreDestroyCallbacks
+ + JETTY-923 BayeuxClient uses message pools to reduce memory footprint
+ + JETTY-924 Improved BayeuxClient disconnect handling
+ + JETTY-925 Lazy bayeux messages
+ + JETTY-926 default location for generatedClasses of jspc plugin is incorrect
+
+jetty-6.1.15 - 02 March 2009
+ + JETTY-923 BayeuxClient uses message pools to reduce memory footprint
+ + JETTY-924 Improved BayeuxClient disconnect handling
+ + JETTY-925 Lazy bayeux messages
+ + JETTY-926 default location for generatedClasses of jspc plugin is incorrect
+
+jetty-6.1.15.rc4 - 19 February 2009
+ + JETTY-496 Support inetd/xinetd through use of System.inheritedChannel()
+ + JETTY-713 Expose additional AbstractConnector methods via MBean
+ + JETTY-749 Improved ack extension
+ + JETTY-811 Allow configuration of system properties for the maven plugin
+   using a file
+ + JETTY-840 add default mime types to *.htc and *.pps
+ + JETTY-848 Temporary folder not fully cleanup after stop (via Sweeper)
+ + JETTY-872 Handshake handler calls wrong extension callback
+ + JETTY-879 Support extra properties in jQuery comet implementation
+ + JETTY-802 Modify the default error pages to make association with Jetty
+   clearer
+ + JETTY-869 NCSARequestLog locale config
+ + JETTY-870 NullPointerException in Response when performing redirect to wrong
+   relative URL
+ + JETTY-878 Removed printStackTrace from WaitingContinuation
+ + JETTY-882 ChannelBayeuxListener called too many times
+ + JETTY-884 Use hashcode for threadpool ID
+ + JETTY-815 Add comet support to jQuery javascript library
+ + JETTY-887 Split configuration and handshaking in jquery comet
+ + JETTY-888 Fix abort in case of multiple outstanding connections
+ + JETTY-894 Add android .apk to mime types
+ + JETTY-898 Allow jetty debs to start with custom java args provided by users
+ + JETTY-909 Update useragents cache
+
+jetty-6.1.15.rc3 - 28 January 2009
+ + JETTY-691 System.getProperty() calls ... wrap them in doPrivileged
+ + JETTY-844 Replace reflection with direct invocation in Slf4jLog
+ + JETTY-861 switched buffer pools to ThreadLocal implementation
+ + JETTY-866 jetty-client test case fix
+
+jetty-6.1.15.rc2 - 23 January 2009
+ + adjustment to jetty-client assembly packaging
+ + JETTY-567 Delay in initial TLS Handshake With FireFox 3 beta5 and
+   SslSelectChannelConnector
+
+jetty-6.1.15.pre0 - 20 January 2009
+ + JETTY-600 Automated tests of WADI integration + upgrade to WADI 2.0
+ + JETTY-749 Reliable message delivery
+ + JETTY-794 WADI integration tests fail intermittently.
+ + JETTY-781 Add "mvn jetty:deploy-war" for deploying a pre-assembled war
+ + JETTY-795 NullPointerException in SocketConnector.java
+ + JETTY-798 Jboss session manager incompatible with LifeCycle.Listener
+ + JETTY-801 Bring back 2 arg EnvEntry constructor
+ + JETTY-802 Modify the default error pages to make association with Jetty very
+   clear
+ + JETTY-804 HttpClient timeout does not always work
+ + JETTY-806 Timeout related Deadlocks in HTTP Client
+ + JETTY-807 HttpTester to handle charsets
+ + JETTY-808 cometd client demo run.sh
+ + JETTY-809 Need a way to customize WEB-INF/lib file extensions that are added
+   to the classpath
+ + JETTY-814 Add org.eclipse.jetty.client.Address.toString()
+ + JETTY-816 Implement reconnect on java bayeux client
+ + JETTY-817 Aborted SSL connections may cause jetty to hang with full cpu
+ + JETTY-819 Jetty Plus no more jre 1.4
+ + JETTY-821 Allow lazy loading of persistent sessions
+ + JETTY-824 Access to inbound byte statistics
+ + JETTY-825 URL decoding of spaces (+) fails for encoding not utf8
+ + JETTY-827 Externalize servlet api
+ + JETTY-830 Add ability to reserve connections on http client
+ + JETTY-831 Add ability to stop java bayeux client
+ + JETTY-832 More UrlDecoded handling in relation to JETTY-825
+ + JETTY-833 Update debian and rpm packages for new jsp-2.1-glassfish jars and
+   servlet-api jar
+ + JETTY-834 Configure DTD does not allow <Map> children
+ + JETTY-837 Response headers set via filter are ignored for static resources
+ + JETTY-841 Duplicate messages when sending private message to yourself with
+   cometd chat demo
+ + JETTY-842 NPE in jetty client when no path component
+ + JETTY-843 META-INF/MANIFEST.MF is not present in unpacked webapp
+ + JETTY-852 Ensure handshake and connect retried on failure for jquery-cometd
+ + JETTY-854 JNDI scope does not work with applications in a .war
+ + JETTY-855 jetty-client uber assembly support
+ + JETTY-858 ContentExchange provides bytes
+ + JETTY-859 MultiPartFilter ignores the query string parameters
+ + JETTY-862 EncodedHttpURI ignores given encoding in constructor
+
+jetty-6.1.14 - 14 November 2008
+ + JETTY-630 jetty6-plus rpm is missing the jetty6-plus jar
+ + JETTY-748 Reduced flushing of large content
+ + JETTY-765 ensure stop mojo works for all execution phases
+ + JETTY-777 include util5 on the jetty debs
+ + JETTY-778 handle granular windows timer in lifecycle test
+ + JETTY-779 Fixed line feed in request log
+ + JETTY-782 Implement interval advice for BayeuxClient
+ + JETTY-783 Update jetty self-signed certificate
+ + JETTY-784 TerracottaSessionManager leaks sessions scavenged in other nodes
+ + JETTY-787 Handle MSIE7 mixed encoding
+ + JETTY-788 Fix jotm for new scoped jndi
+ + JETTY-790 WaitingContinuations can change mutex if not pending
+ + JETTY-791 Ensure jdk1.4 compatibility for jetty-6
+ + JETTY-792 TerracottaSessionManager does not unlock new session with
+   requested id
+ + JETTY-793 Fixed DataCache millisecond rounding
+
+jetty-6.1.12 - 04 November 2008
+ + JETTY-731 Completed DeliverListener for cometd
+ + JETTY-772 Increased default threadpool size to 250
+ + JETTY-774 Cached text/json content type
+ + JETTY-775 fix port of openspaces to jetty-6
+
+jetty-7.0.0.pre5 - 30 October 2008
+ + JETTY-766 Fix npe
+ + JETTY-767 Fixed SSL Client no progress handshake bug
+ + JETTY-768 Remove EnvEntry overloaded constructors
+ + JETTY-769 jquery example error
+ + JETTY-771 Ensure NamingEntryUtil is jdk1.4 compliant
+ + JETTY-772 Increased default threadpool size to 250
+
+jetty-6.1.12.rc5 - 30 October 2008
+ + JETTY-703 maxStopTimeMs added to QueuedThreadPool
+ + JETTY-762 improved QueuedThreadPool idle death handling
+ + JETTY-763 Fixed AJP13 constructor
+ + JETTY-766 Ensure SystemProperties set early on jetty-maven-plugin
+ + JETTY-767 Fixed SSL Client no progress handshake bug
+ + JETTY-768 Remove EnvEntry overloaded constructors
+ + JETTY-771 Ensure NamingEntryUtil jdk1.4 compliant
+
+jetty-7.0.0.pre4 - 28 October 2008
+ + JETTY-241 Support for web application overlays in rapid application
+   development (jetty:run)
+ + JETTY-319 improved passing of exception when webapp unavailable
+ + JETTY-331 SecureRandom hangs on systems with low entropy (connectors slow to
+   start)
+ + JETTY-591 No server classes for jetty-web.xml
+ + JETTY-604 AbstractSession.setSessionURL
+ + JETTY-670 $JETTY_HOME/bin/jetty.sh not worked in Solaris, because of
+   /usr/bin/which has no error-code
+ + JETTY-676 ResourceHandler doesn't support HTTP HEAD requests
+ + JETTY-677 GWT serialization issue
+ + JETTY-680 Can't configure the ResourceCollection with maven
+ + JETTY-681 JETTY-692 MultiPartFilter is slow for file uploads
+ + JETTY-682 Added listeners and queue methods to cometd
+ + JETTY-686 LifeCycle.Listener
+ + JETTY-687 Issue with servlet-mapping in dynamic servlet invoker
+ + JETTY-688 Cookie causes NumberFormatException
+ + JETTY-689 processing of non-servlet related annotations
+ + JETTY-690 Updated XBean dependencies to XBean version 3.4.3 and Spring
+   2.0.5.
+ + JETTY-696 jetty.sh restart not working
+ + JETTY-698 org.eclipse.resource.JarResource.extract does not close
+   JarInputStream jin
+ + JETTY-699 Optimized cometd sending of 1 message to many many clients
+ + JETTY-700 unit test for unread request data
+ + JETTY-703 maxStopTimeMs added to QueuedThreadPool
+ + JETTY-708 allow 3 scopes for jndi resources: jvm, server or webapp
+ + JETTY-709 Jetty plugin's WebAppConfig configured properties gets overridden
+   by AbstractJettyRunMojo even when already set
+ + JETTY-710 Worked around poor implementation of File.toURL()
+ + JETTY-711 DataSourceUserRealm implementation
+ + JETTY-712 HttpClient does not handle request complete after response
+   complete
+ + JETTY-715 AJP Key size as Integer
+ + JETTY-716 Fixed NPE on empty cometd message
+ + JETTY-718 during ssl unwrap, return true if some bytes were read, even if
+   underflow
+ + JETTY-720 fix HttpExchange.waitForStatus
+ + JETTY-721 Support wildcard in VirtualHosts configuration
+ + JETTY-723 jetty.sh does not check if TMP already is set
+ + JETTY-724 better handle EBCDIC default JVM encoding
+ + JETTY-728 Improve Terracotta integration and performances
+ + JETTY-730 Set SAX parse features to defaults
+ + JETTY-731 DeliverListener for cometd
+ + JETTY-732 Case Sensitive Basic Authentication Response Header
+   Implementations
+ + JETTY-733 Expose ssl connectors with xbean
+ + JETTY-735 Wrong default jndi name on DataSourceUserRealm
+ + JETTY-736 Client Specific cometd advice
+ + JETTY-737 refactored jetty.jar into jetty, xml, security, ssl, webapp and
+   deploy jars
+ + JETTY-738 If jetty.sh finds a pid file is does not check to see if a process
+   with that pid is still running
+ + JETTY-739 Race in QueuedThreadPool
+ + JETTY-741 HttpClient connects slowly due to reverse address lookup by
+   InetAddress.getHostName()
+ + JETTY-742 Private messages in cometd chat demo
+ + JETTY-747 Handle HttpClient exceptions better
+ + JETTY-755 Optimized HttpParser and buffers for few busy connections
+ + JETTY-757 Unhide JAAS classes
+ + JETTY-758 Update JSP to glassfish tag SJSAS-9_1_1-B51-18_Sept_2008
+ + JETTY-759 Fixed JSON small negative real numbers
+ + JETTY-760 Handle wildcard VirtualHost and normalize hostname in
+   ContextHandlerCollection
+ + JETTY-762 improved QueuedThreadPool idle death handling
+ + JETTY-763 Fixed AJP13 constructor
+ + JETTY-766 Ensure SystemProperties set early on jetty-maven-plugin
+
+jetty-6.1.12.rc4 - 21 October 2008
+ + JETTY-319 improved passing of exception when webapp unavailable
+ + JETTY-729 Backport Terracotta integration to Jetty6.1 branch
+ + JETTY-744 Backport of JETTY-741: HttpClient connects slowly due to reverse
+   address lookup by InetAddress.getHostName()
+ + JETTY-747 Handle exceptions better in HttpClient
+ + JETTY-755 Optimized HttpParser and buffers for few busy connections
+ + JETTY-758 Update JSP 2.1 to glassfish tag SJSAS-9_1_1-B51-18_Sept_2008
+ + JETTY-759 Fixed JSON small negative real numbers
+ + JETTY-760 Handle wildcard VirtualHost and normalize hostname in
+   ContextHandlerCollection
+
+jetty-6.1.12.rc3 - 10 October 2008
+ + JETTY-241 Support for web application overlays in rapid application
+   development (jetty:run)
+ + JETTY-686 LifeCycle.Listener
+ + JETTY-715 AJP key size
+ + JETTY-716 NPE for empty cometd message
+ + JETTY-718 during ssl unwrap, return true if some bytes were read, even if
+   underflow
+ + JETTY-720 fix HttpExchange.waitForStatus
+ + JETTY-721 Support wildcard in VirtualHosts configuration
+ + JETTY-722 jndi related threadlocal not cleared after deploying webapp
+ + JETTY-723 jetty.sh does not check if TMP already is set
+ + JETTY-725 port JETTY-708 (jndi scoping) to jetty-6
+ + JETTY-730 set SAX parser features to defaults
+ + JETTY-731 DeliverListener for cometd
+ + JETTY-732 Case Sensitive Basic Authentication Response Header
+   Implementations
+ + JETTY-736 Client Specific cometd advice
+ + JETTY-738 If jetty.sh finds a pid file is does not check to see if a process
+   with that pid is still running
+ + JETTY-739 Race in QueuedThreadPool
+ + JETTY-742 Private messages in cometd chat demo
+
+jetty-6.1.12rc2 - 12 September 2008
+ + JETTY-282 Support manually-triggered reloading
+ + JETTY-331 SecureRandom hangs on systems with low entropy (connectors slow to
+   startup)
+ + JETTY-591 No server classes for jetty-web.xml
+ + JETTY-670 $JETTY_HOME/bin/jetty.sh not worked in Solaris, because of
+   /usr/bin/which has no error-code
+ + JETTY-671 Configure DTD does not allow <Property> children
+ + JETTY-672 Utf8StringBuffer doesn't properly handle null characters (char
+   with byte value 0)
+ + JETTY-676 ResourceHandler doesn't support HTTP HEAD requests
+ + JETTY-677 GWT serialization issue
+ + JETTY-680 Can't configure the ResourceCollection with maven
+ + JETTY-681 JETTY-692 MultiPartFilter is slow for file uploads
+ + JETTY-682 Added listeners and queue methods to cometd
+ + JETTY-683 ResourceCollection works for jsp files but does not work for
+   static resources under DefaultServlet
+ + JETTY-687 Issue with servlet-mapping in dynamic servlet invoker
+ + JETTY-688 Cookie causes NumberFormatException
+ + JETTY-696 ./jetty.sh restart not working
+ + JETTY-698 org.eclipse.resource.JarResource.extract does not close
+   JarInputStream jin
+ + JETTY-699 Optimize cometd sending of 1 message to many many clients
+ + JETTY-709 Jetty plugin's WebAppConfig configured properties gets overridden
+   by AbstractJettyRunMojo even when already set
+ + JETTY-710 Worked around poor implementation of File.toURL()
+ + JETTY-712 HttpClient does not handle request complete after response
+   complete
+
+jetty-7.0.0pre3 - 06 August 2008
+ + Upgrade jsp 2.1 to SJSAS-9_1_02-B04-11_Apr_2008
+ + JETTY-30 Externalize servlet-api to own project
+ + JETTY-182 Support setting explicit system classpath for jasper
+   Jsr199JavaCompiler
+ + JETTY-319 Get unavailable exception and added startWithUnavailable option
+ + JETTY-381 JETTY-622 Multiple Web Application Source Directory
+ + JETTY-442 Accessors for mimeType on ResourceHandler
+ + JETTY-502 forward of an include should hide include attributes
+ + JETTY-562 RewriteHandler support for virtual hosts
+ + JETTY-563 JETTY-482 OpenRemoteServiceServlet for GWT1.5M2+
+ + JETTY-564 Consider optionally importing org.apache.jasper.servlet
+ + JETTY-571 SelectChannelConnector throws Exception on close on Windows
+ + JETTY-608 Suspend/Resume/Complete request listeners
+ + JETTY-621 Improved LazyList javadoc
+ + JETTY-626 Null protect reading the dtd resource from classloader
+ + JETTY-628 Rewrite rule for rewriting scheme
+ + JETTY-629 Don't hold timeout lock during expiry call.
+ + JETTY-632 OSGi tags for Jetty client
+ + JETTY-633 Default form encoding 8859_1 rather than utf-8
+ + JETTY-635 Correctly merge request parameters when doing forward
+ + JETTY-636 Separate lifeycle of jsp build
+ + JETTY-637 empty date headers throw IllegalArgumentException
+ + JETTY-641 JDBC Realm purge cache problem
+ + JETTY-642 NPE in LdapLoginModule
+ + JETTY-644 LdapLoginModule uses proper filters when searching
+ + JETTY-645 Do not provide jetty-util to the webapps
+ + JETTY-646 Should set Cache-Control header when sending errors to avoid
+   caching
+ + JETTY-647 suspended POSTs with binary data do too many resumes
+ + JETTY-650 Parse "*" URI for HTTP OPTIONS request
+ + JETTY-651 Release resources during destroy
+ + JETTY-653 Upgrade jta api specs to more recent version
+ + JETTY-654 Allow Cometd Bayeux object to be JMX manageable
+ + JETTY-655 Support parsing application/x-www-form-urlencoded parameters via
+   http PUT
+ + JETTY-656 HttpClient defaults to async mode
+ + JETTY-659 ContentExchange and missing headers in HttpClient
+ + JETTY-663 AbstractDatabaseLoginModule handle not found UserInfo and userName
+ + JETTY-665 Support merging class directories
+ + JETTY-666 scanTargetPatterns override the values already being set by
+   scanTarget
+ + JETTY-667 HttpClient handles chunked content
+ + JETTY-669 Http methods other than GET and POST should not have error page
+   content
+ + JETTY-671 Configure DTD does not allow <Property> children
+ + JETTY-672 Utf8StringBuffer doesn't properly handle null characters (char
+   with byte value 0)
+ + JETTY-675 ServletContext.getRealPath("") returns null instead of returning
+   the root dir of the webapp
+
+jetty-6.1.12rc1 - 01 August 2008
+ + Upgrade jsp 2.1 to SJSAS-9_1_02-B04-11_Apr_2008
+ + JETTY-319 Get unavailable exception and added startWithUnavailable option
+ + JETTY-381 JETTY-622 Multiple Web Application Source Directory
+ + JETTY-442 Accessors for mimeType on ResourceHandler
+ + JETTY-502 forward of an include should hide include attributes
+ + JETTY-562 RewriteHandler support for virtual hosts
+ + JETTY-563 GWT OpenRemoteServiceServlet GWT1.5M2+
+ + JETTY-564 Consider optionally importing org.apache.jasper.servlet
+ + JETTY-571 SelectChannelConnector throws Exception on close on Windows
+ + JETTY-596 Proxy authorization support in HttpClient
+ + JETTY-599 handle buffers consistently handle invalid index for poke
+ + JETTY-603 Handle IPv6 in HttpURI
+ + JETTY-605 Added optional threadpool to BayeuxService
+ + JETTY-606 better writeTo impl for BIO
+ + JETTY-607 Add GigaSpaces session clustering
+ + JETTY-610 jetty.class.path not being interpreted
+ + JETTY-613 website module now generates site-component for jetty-site
+ + JETTY-614 scanner allocated hashmap on every scan
+ + JETTY-623 ServletContext.getServerInfo() non compliant
+ + JETTY-626 Null protect reading the dtd resource from classloader
+ + JETTY-628 Rewrite rule for rewriting scheme
+ + JETTY-629 Don't hold timeout lock during expiry call.
+ + JETTY-632 OSGi tags for Jetty client
+ + JETTY-633 Default form encoding 8859_1 rather than utf-8
+ + JETTY-635 Correctly merge request parameters when doing forward
+ + JETTY-637 empty date headers throw IllegalArgumentException
+ + JETTY-641 JDBC Realm purge cache problem
+ + JETTY-642 NPE in LdapLoginModule
+ + JETTY-644 LdapLoginModule uses proper filters when searching
+ + JETTY-646 Should set Cache-Control header when sending errors to avoid
+   caching
+ + JETTY-647 suspended POSTs with binary data do too many resumes
+ + JETTY-650 Parse "*" URI for HTTP OPTIONS request
+ + JETTY-651 Release resources during destroy
+ + JETTY-654 Allow Cometd Bayeux object to be JMX manageable
+ + JETTY-655 Support parsing application/x-www-form-urlencoded parameters via
+   http PUT
+ + JETTY-656 HttpClient defaults to async mode
+ + JETTY-657 Backport jetty-7 sslengine
+ + JETTY-658 backport latest HttpClient from jetty-7 to jetty-6
+ + JETTY-659 ContentExchange and missing headers in HttpClient
+ + JETTY-660 Backported QoSFilter
+ + JETTY-663 AbstractDatabaseLoginModule handle not found UserInfo and userName
+ + JETTY-665 Support merging class directories
+ + JETTY-666 scanTargetPatterns override the values already being set by
+   scanTarget
+ + JETTY-667 HttpClient handles chunked content
+ + JETTY-669 Http methods other than GET and POST should not have error page
+   content
+
+jetty-7.0.0pre2 - 30 June 2008
+ + JETTY-336 413 error for header buffer full
+ + JETTY-425 race in stopping SelectManager
+ + JETTY-568 Avoid freeing DirectBuffers. New locking NIO ResourceCache.
+ + JETTY-569 Stats for suspending requests
+ + JETTY-576 servlet dtds and xsds not being loaded locally
+ + JETTY-572 Unique cometd client ID
+ + JETTY-578 OSGI Bundle-RequiredExcutionEnvironment set to J2SE-1.5
+ + JETTY-579 OSGI resolved management and servlet.resources import error
+ + JETTY-580 Fixed SSL shutdown
+ + JETTY-581 ContextPath constructor
+ + JETTY-582 final ISO_8859_1
+ + JETTY-584 handle null contextPath
+ + JETTY-587 persist sessions to database
+ + JETTY-588 handle Retry in ServletException
+ + JETTY-589 Added Statistics Servlet
+ + JETTY-590 Digest auth domain for root context
+ + JETTY-592 expired timeout callback without synchronization
+ + JETTY-595 SessionHandler only deals with base request session
+ + JETTY-596 proxy support in HttpClient
+ + JETTY-598 Added more reliable cometd message flush option
+ + JETTY-599 handle buffers consistently handle invalid index for poke
+ + JETTY-603 Handle IPv6 in HttpURI
+ + JETTY-605 Added optional threadpool to BayeuxService
+ + JETTY-606 better writeTo impl for BIO
+ + JETTY-607 Add GigaSpaces session clustering
+ + JETTY-609 jetty-client improvements for http conversations
+ + JETTY-610 jetty.class.path not being interpreted
+ + JETTY-611 make general purpose jar scanning mechanism
+ + JETTY-612 scan for web.xml fragments
+ + JETTY-613 various distribution related changes
+ + JETTY-614 scanner allocates hashmap on every iteration
+ + JETTY-615 Replaced CDDL servlet.jar with Apache-2.0 licensed version
+ + JETTY-623 ServletContext.getServerInfo() non compliant
+
+jetty-6.1.11 - 06 June 2008
+ + JETTY-336 413 error for full header buffer
+ + JETTY-425 race in stopping SelectManager
+ + JETTY-580 Fixed SSL shutdown
+ + JETTY-581 ContextPath constructor
+ + JETTY-582 final ISO_8859_1
+ + JETTY-584 handle null contextPath
+ + JETTY-588 handle Retry in ServletException
+ + JETTY-590 Digest auth domain for root context
+ + JETTY-592 expired timeout callback without synchronization
+ + JETTY-595 SessionHandler only deals with base request session
+ + JETTY-596 Proxy support in HttpClient
+ + JETTY-598 Added more reliable cometd message flush option
+
+jetty-6.1.10 - 20 May 2008
+ + Use QueuedThreadPool as default
+ + JETTY-440 allow file name patterns for jsp compilation for jspc plugin
+ + JETTY-529 CNFE when deserializing Array from session resolved
+ + JETTY-537 JSON handles Locales
+ + JETTY-547 Shutdown SocketEndpoint output before close
+ + JETTY-550 Reading 0 bytes corrupts ServletInputStream
+ + JETTY-551 Upgraded to Wadi 2.0-M10
+ + JETTY-556 Encode all URI fragments
+ + JETTY-557 Allow ServletContext.setAttribute before start
+ + JETTY-558 optional handling of X-Forwarded-For/Host/Server
+ + JETTY-566 allow for non-blocking behavior in jetty maven plugin
+ + JETTY-572 unique cometd client ID
+ + JETTY-579 osgi fixes with management and servlet resources
+
+jetty-7.0.0pre1 - 03 May 2008
+ + Allow annotations example to be built regularly, copy to contexts-available
+ + Make annotations example consistent with servlet 3.0
+ + Refactor JNDI impl to simplify
+ + Improved suspend examples
+ + address osgi bundling issue relating to build resources
+ + JETTY-529 CNFE when deserializing Array from session resolved
+ + JETTY-558 optional handling of X-Forwarded-For/Host/Server
+ + JETTY-559 ignore unsupported shutdownOutput
+ + JETTY-566 allow for non-blocking behavior in jetty maven plugin
+ + JETTY-440 allow file name patterns for jsp compilation for jspc plugin
+
+jetty-7.0.0pre0 - 21 April 2008
+ + Jetty-6.1.8 Changes
+ + Refactor of Continuation towards servlet 3.0 proposal
+ + JETTY-282 Support manually-triggered reloading by maven plugin
+ + QueuedThreadPool default
+ + RetryRequest exception now extends ThreadDeath
+ + Added option to dispatch to suspended requests.
+ + Delay 100 continues until getInputStream
+ + HttpClient supports pipelined request
+ + BayeuxClient use a single connection for polling
+ + Make javax.servlet.jsp optional osgi import for jetty module
+ + Ensure Jotm tx mgr can be found in jetty-env.xml
+ + Renamed modules management and naming to jmx and jndi.
+ + JETTY-341 100-Continues sent only after getInputStream called.
+ + JETTY-386 backout fix and replaced with
+   ContextHandler.setCompactPath(boolean)
+ + JETTY-399 update OpenRemoteServiceServlet to gwt 1.4
+ + JETTY-467 allow URL rewriting to be disabled.
+ + JETTY-468 unique holder names for addServletWithMapping
+ + JETTY-471 LDAP JAAS Realm
+ + JETTY-474 Fixed case sensitivity issue with HttpFields
+ + JETTY-475 AJP connector in RPMs
+ + JETTY-486 Improved jetty.sh script
+ + JETTY-487 Handle empty chunked request
+ + JETTY-494 Client side session replication
+ + JETTY-519 HttpClient does not recycle closed connection.
+ + JETTY-522 Add build profile for macos for setuid
+ + JETTY-523 Default servlet uses ServletContext.getResource
+ + JETTY-524 Don't synchronize session event listener calls
+ + JETTY-525 Fixed decoding for long strings
+ + JETTY-526 Fixed MMBean fields on JMX MBeans
+ + JETTY-528 Factor our cookie parsing to CookieCutter
+ + JETTY-530 Improved JMX MBeanContainer lifecycle
+ + JETTY-531 Optional expires on MovedContextHandler
+ + JETTY-532 MBean properties for QueuedThreadPool
+ + JETTY-535 Fixed Bayeux server side client memory leak
+ + JETTY-537 JSON handles Locales
+ + JETTY-538 test harness fix for windows
+ + JETTY-540 Servlet-3.0 & java5 support (work in progress)
+ + JETTY-543 Atomic batch get and put of files.
+ + JETTY-545 Rewrite handler
+ + JETTY-546 Webapp runner. All in one jar to run a webapps
+ + JETTY-547 Shutdown SocketEndpoint output before close
+ + JETTY-550 Reading 0 bytes corrupts ServletInputStream
+ + JETTY-551 Wadi 2.0-M10
+ + JETTY-553 Fixed customize override
+ + JETTY-556 Encode all URI fragments
+ + JETTY-557 Allow ServletContext.setAttribute before start
+ + JETTY-560 Allow decoupling of jndi names in web.xml
+
+jetty-6.1.9 - 26 March 2008
+ + Make javax.servlet.jsp optional osgi import for jetty module
+ + Ensure Jotm tx mgr can be found in jetty-env.xml
+ + JETTY-399 update OpenRemoteServiceServlet to gwt 1.4
+ + JETTY-471 LDAP JAAS Realm
+ + JETTY-475 AJP connector in RPMs
+ + JETTY-482 update to JETTY-399
+ + JETTY-519 HttpClient does not recycle closed connection.
+ + JETTY-522 Add build profile for macos for setuid
+ + JETTY-525 Fixed decoding for long strings
+ + JETTY-526 Fixed MMBean fields on JMX MBeans
+ + JETTY-532 MBean properties for QueuedThreadPool
+ + JETTY-535 Fixed Bayeux server side client memory leak
+ + JETTY-538 test harness fix for windows
+ + JETTY-541 Cometd per client timeouts
+
+jetty-6.1.8 - 28 February 2008
+ + Added QueuedThreadPool
+ + Optimized QuotedStringTokenizer.quote()
+ + further Optimizations and improvements of Cometd
+ + Optimizations and improvements of Cometd, more pooled objects
+ + Improved Cometd timeout handling
+ + Added BayeuxService
+ + Cookie support in BayeuxClient
+ + Improved Bayeux API
+ + add removeHandler(Handler) method to HandlerContainer interface
+ + Added JSON.Convertor and non static JSON instances
+ + Long cache for JSON
+ + Fixed JSON negative numbers
+ + JSON unquotes /
+ + Add "mvn jetty:stop"
+ + allow sessions to be periodically persisted to disk
+ + grizzly fixed for posts
+ + Remove duplicate commons-logging jars and include sslengine in jboss sar
+ + Allow code ranges on ErrorPageErrorHandler
+ + AJP handles bad mod_jk methods
+ + JETTY-350 log ssl errors on SslSocketConnector
+ + JETTY-417 JETTY_LOGS environment variable not queried by jetty.sh
+ + JETTY-433 ContextDeployer constructor fails unnecessarily when using a
+   security manager if jetty.home not set
+ + JETTY-434 ContextDeployer scanning of sub-directories should be optional
+ + JETTY-481 Handle empty Bayeux response
+ + JETTY-489 Improve doco on the jetty.port property for plugin
+ + JETTY-490 Fixed JSONEnumConvertor
+ + JETTY-491 opendocument mime types
+ + JETTY-492 Null pointer in HashSSORealm
+ + JETTY-493 JSON handles BigDecimals
+ + JETTY-498 Improved cookie parsing
+ + JETTY-507 Fixed encoding from JETTY-388 and test case
+ + JETTY-508 Extensible cometd handlers
+ + JETTY-509 Fixed JSONP transport for changing callback names
+ + JETTY-511 jetty.sh mishandled JETTY_HOME when launched from a relative path
+ + JETTY-512 add slf4j as optional to manifest
+ + JETTY-513 Terracotta session replication does not work when the initial page
+   on each server does not set any attributes
+ + JETTY-515 Timer is missing scavenging Task in HashSessionManager
+
+jetty-6.1.7 - 22 December 2007
+ + Added BayeuxService
+ + Added JSON.Convertor and non static JSON instances
+ + Add "mvn jetty:stop"
+ + allow sessions to be periodically persisted to disk
+ + Cookie support in BayeuxClient
+ + grizzly fixed for posts
+ + jetty-6.1 branch created from 6.1.6 and r593 of jetty-contrib trunk
+ + Optimizations and improvements of Cometd, more pooled objects
+ + Update java5 patch
+ + JETTY-386 CERT-553235 backout fix and replaced with
+   ContextHandler.setCompactPath(boolean)
+ + JETTY-467 allow URL rewriting to be disabled.
+ + JETTY-468 unique holder names for addServletWithMapping
+ + JETTY-474 Fixed case sensitivity issue with HttpFields
+ + JETTY-486 Improved jetty.sh script
+ + JETTY-487 Handle empty chunked request
+
+jetty-6.1.6 - 18 November 2007
+ + rudimentary debian packaging
+ + updated grizzly connector to 1.6.1
+ + JETTY-455 Optional cometd id
+ + JETTY-459 Unable to deploy from Eclipse into the root context
+ + JETTY-461 fixed cometd unknown channel
+ + JETTY-464 typo in ErrorHandler
+ + JETTY-465 System.exit() in constructor exception for MultiPartOutputStream
+
+jetty-6.1.6rc1 - 05 November 2007
+ + Upgrade jsp 2.1 to SJSAS-9_1-B58G-FCS-08_Sept_2007
+ + Housekeeping on poms
+ + CERT VU#38616 handle single quotes in cookie names.
+ + Improved JSON parsing from Readers
+ + Moved some impl classes from jsp-api-2.1 to jsp-2.1
+ + Added configuration file for capturing stderr and stdout
+ + Updated for dojo 1.0(rc) cometd
+ + Give bayeux timer name
+ + Give Terracotta session scavenger a name
+ + Jetty Eclipse Plugin 1.0.1: force copy of context file on redeploy
+ + JETTY-388 Handle utf-16 and other multibyte non-utf-8 form content.
+ + JETTY-409 String params that denote files changed to File
+ + JETTY-438 handle trailing . in vhosts
+ + JETTY-439 Fixed 100 continues clash with Connection:close
+ + JETTY-451 Concurrent modification of session during invalidate
+ + JETTY-443 windows bug causes Acceptor thread to die
+ + JETTY-445 removed test code
+ + JETTY-448 added setReuseAddress on AbstractConnector
+ + JETTY-450 Bad request for response sent to server
+ + JETTY-452 CERT VU#237888 Dump Servlet - prevent cross site scripting
+ + JETTY-453 updated Wadi to 2.0-M7
+ + JETTY-454 handle exceptions with themselves as root cause
+ + JETTY-456 allow null keystore for osX
+ + JETTY-457 AJP certificate chains
+
+jetty-6.1.6rc0 - 03 October 2007
+ + Added jetty.lib system property to start.config
+ + AJP13 Fix on chunked post
+ + Fix cached header optimization for extra characters
+ + SetUID option to support setgid
+ + Make mx4j used only if runtime uses jdk<1.5
+ + Moved Grizzly to contrib
+ + Give deployment file Scanner threads a unique name
+ + Fix Host header for async client
+ + Fix typo in async client onResponsetHeader method name
+ + Tweak OSGi manifests to remove unneeded imports
+ + Allow scan interval to be set after Scanner started
+ + Add jetty.host system property
+ + Allow properties files on the XmlConfiguration command line.
+ + Prevent infinite loop on stopping with temp dir
+ + Ensure session is completed only when leaving context.
+ + Update terracotta to 2.4.1 and exclude ssl classes
+ + Update jasper2.1 to tag SJSAS-9_1-B58C-FCS-22_Aug_2007
+ + Removal of unneeded dependencies from management, maven-plugin, naming &
+   plus poms
+ + Adding setUsername,setGroupname to setuid and mavenizing native build
+ + UTF-8 for bayeux client
+ + CVE-2007-5615 Added protection for response splitting with bad headers.
+ + Cached user agents strings in the /org/mortbay/jetty/useragents resource
+ + Make default time format for RequestLog match NCSA default
+ + Use terracotta repo for build; make jetty a terracotta module
+ + Fix patch for java5 to include cometd module
+ + Added ConcatServlet to combine javascript and css
+ + Add ability to persist sessions with HashSessionManager
+ + Avoid FULL exception in window between blockForOutput and remote close
+ + Added JPackage RPM support
+ + Added JSON.Convertable
+ + Updated README, test index.html file and jetty-plus.xml file
+ + JETTY-259 SystemRoot set for windows CGI
+ + JETTY-311 avoid json keywords
+ + JETTY-376 allow anything but CRLF in reason string
+ + JETTY-398 Allow same WADI Dispatcher to be used across multiple web-app
+   contexts
+ + JETTY-400 consume CGI stderr
+ + JETTY-402 keep HashUserRealm in sync with file
+ + JETTY-403 Allow long content length for range requests
+ + JETTY-404 WebAppDeployer sometimes deploys duplicate webapp
+ + JETTY-405 Default date formate for reqest log
+ + JETTY-407 AJP handles unknown content length
+ + JETTY-413 Make rolloveroutputstream timer daemon
+ + JETTY-422 Allow <Property> values to be null in config files
+ + JETTY-423 Ensure javax.servlet.forward parameters are latched on first
+   forward
+ + JETTY-425 Handle duplicate stop calls better
+ + JETTY-430 improved cometd logging
+ + JETTY-431 HttpClient soTimeout
+
+jetty-6.1.5 - 19 July 2007
+ + Upgrade to Jasper 2.1 tag SJSAS-9_1-B50G-BETA3-27_June_2007
+ + Fixed GzipFilter for dispatchers
+ + Fixed reset of reason
+ + JETTY-392 updated LikeJettyXml example
+
+jetty-6.1.5rc0 - 15 July 0200
+ + update terracotta session clustering to terracotta 2.4
+ + SetUID option to only open connectors before setUID.
+ + Protect SslSelectChannelConnector from exceptions during close
+ + Improved Request log configuration options
+ + Added GzipFilter and UserAgentFilter
+ + make OSGi manifests for jetty jars
+ + update terracotta configs for tc 2.4 stable1
+ + remove call to open connectors in jetty.xml
+ + update links on website
+ + make jetty plus example webapps use ContextDeployer
+ + Dispatch SslEngine expiry (non atomic)
+ + Make SLF4JLog impl public, add mbean descriptors
+ + SPR-3682 - dont hide forward attr in include.
+ + Upgrade to Jasper 2.1 tag SJSAS-9_1-B50G-BETA3-27_June_2007
+ + JETTY-253 Improved graceful shutdown
+ + JETTY-373 Stop all dependent lifecycles
+ + JETTY-374 HttpTesters handles large requests/responses
+ + JETTY-375 IllegalStateException when committed.
+ + JETTY-376 allow spaces in reason string
+ + JETTY-377 allow sessions to be wrapped with
+   AbstractSesssionManager.SessionIf
+ + JETTY-378 handle JVMs with non ISO/UTF default encodings
+ + JETTY-380 handle pipelines of more than 4 requests!
+ + JETTY-385 EncodeURL for new sessions from dispatch
+ + JETTY-386 Allow // in file resources
+
+jetty-6.1.4 - 15 June 2007
+ + fixed early open() call in NIO connectors
+ + JETTY-370 ensure maxIdleTime<=0 means connections never expire
+ + JETTY-371 Fixed chunked HEAD response
+ + JETTY-372 make test for cookie caching more rigorous
+
+jetty-6.1.4rc1 - 10 June 2007
+ + Work around IBM JVM socket close issue
+ + moved documentation for jetty and jspc maven plugins to wiki
+ + async client improvements
+ + fixed handling of large streamed files
+ + Fixed synchronization conflict SslSelectChannel and SelectChannel
+ + Optional static content cache
+ + JETTY-310 better exception when no filter file for cometd servlet
+ + JETTY-323 handle htaccess without a user realm
+ + JETTY-346 add wildcard support to extra scan targets for maven plugin
+ + JETTY-355 extensible SslSelectChannelConnector
+ + JETTY-357 cleaned up ssl buffering
+ + JETTY-360 allow connectors, userRealms to be added from a <jettyConfig> for
+   maven plugin
+ + JETTY-361 prevent url encoding of dir listings for non-link text
+ + JETTY-362 More object locks
+ + JETTY-365 make needClientAuth work on SslSelectChannelConnector
+ + JETTY-366 JETTY-368 Improved bayeux disconnect
+
+jetty-6.1.4rc0 - 01 June 2007
+ + Reorganized import of contrib modules
+ + Unified JMX configuration
+ + Updated slf4j version to 1.3.1
+ + Updated junit to 3.8.2
+ + Allow XmlConfiguration properties to be configured
+ + Add (commented out) jspc precompile to test-webapp
+ + Add slf4j-api for upgraded version
+ + Change scope of fields for Session
+ + Add ability to run cometd webapps to maven plugin
+ + Delay ssl handshake until after dispatch in sslSocketConnector
+ + Set so_timeout during ssl handshake as an option on SslSocketConnector
+ + Optional send Date header. Server.setSendDateHeader(boolean)
+ + update etc/jetty-ssl.xml with new handshake timeout setting
+ + fixed JSP close handling
+ + improved date header handling
+ + fixed waiting continuation reset
+ + JETTY-257 fixed comet cross domain
+ + JETTY-309 fix applied to sslEngine
+ + JETTY-317 rollback inclusion of cometd jar for maven plugin
+ + JETTY-318 Prevent meta channels being created
+ + JETTY-330 Allow dependencies with scope provided for jspc plugin
+ + JETTY-335 SslEngine overflow fix
+ + JETTY-337 deprecated get/setCipherSuites and added
+   get/setExcludeCipherSuites
+ + JETTY-338 protect isMoreInBuffer from destroy
+ + JETTY-339 MultiPartFiler deletes temp files on IOException
+ + JETTY-340 FormAuthentication works with null response
+ + JETTY-344 gready fill in ByteArrayBuffer.readFrom
+ + JETTY-345 fixed lost content with blocked NIO.
+ + JETTY-347 Fixed type util init
+ + JETTY-352 Object locks
+
+jetty-6.1.3 - 04 May 2007
+ + Handle CRLF for content in header optimization
+ + JETTY-309 don't clear writable status until dispatch
+ + JETTY-315 suppressed warning
+ + JETTY-322 AJP13 cping and keep alive
+
+jetty-6.1.2 - 01 May 2007
+ + Improved unavailabile handling
+ + sendError resets output state
+ + Fixed session invalidation error in WadiSessionManager
+ + Updated Wadi to version 2.0-M3
+ + Added static member definition in WadiSessionManager
+ + JETTY-322 fix ajp cpong response and close handling
+ + JETTY-324 fix ant plugin
+ + JETTY-328 updated jboss
+
+jetty-6.1.2rc5 - 24 April 2007
+ + set default keystore for SslSocketConnector
+ + removed some compile warnings
+ + Allow jsp-file to be / or /*
+ + JETTY-305 delayed connection destroy
+ + JETTY-309 handle close in multivalue connection fields.
+ + JETTY-314 fix for possible NPE in Request.isRequestedSessionIdValid
+
+jetty-6.1.2rc4 - 19 April 2007
+ + JETTY-294 Fixed authentication reset
+ + JETTY-299 handle win32 paths for object naming
+ + JETTY-300 removed synchronized on dispatch
+ + JETTY-302 correctly parse quoted content encodings
+ + JETTY-303 fixed dual reset of generator
+ + JETTY-304 Fixed authentication reset
+
+jetty-6.1.2rc3 - 16 April 2007
+ + Improved performance and exclusions for TLD scanning
+ + MBean properties assume writeable unless marked RO
+ + refactor of SessionManager and SessionIdManager for clustering
+ + Improvements to allow simple setting of Cache-Control headers
+ + AJP redirects https requests correctly
+ + Fixed writes of unencoded char arrays.
+ + JETTY-283 Parse 206 and 304 responses in client
+ + JETTY-285 enable jndi for mvn jetty:run-war and jetty:run-exploded
+ + JETTY-289 fixed javax.net.ssl.SSLException on binary file upload
+ + JETTY-292 Fixed error page handler error pages
+ + JETTY-293 fixed NPE on fast init
+ + JETTY-294 Response.reset() resets headers as well as content
+ + JETTY-295 Optional support of authenticated welcome files
+ + JETTY-296 Close direct content inputstreams
+ + JETTY-297 Recreate tmp dir on stop/start
+ + JETTY-298 Names in JMX ObjectNames for context, servlets and filters
+
+jetty-6.1.2rc2 - 27 March 2007
+ + Enable the SharedStoreContextualiser for the WadiSessionManager(Database
+   store for clustering)
+ + AJP13 CPING request and CPONG response implemented
+ + AJP13 Shutdown Request from peer implemented
+ + AJP13 remoteUser, contextPath, servletPath requests implemented
+ + Change some JNDI logging to debug level instead of info
+ + Update jasper to glassfish tag SJSAS-9_1-B39-RC-14_Mar_2007
+ + Optimized multi threaded init on startup servlets
+ + Removed unneeded specialized TagLibConfiguration class from maven plugin
+ + Refactor Scanner to increase code reuse with maven/ant plugins
+ + Added RestFilter for PUT and DELETE from Aleksi Kallio
+ + Make annotations work for maven plugin
+ + JETTY-125 maven plugin: ensure test dependencies on classpath for
+   <useTestClasspath>
+ + JETTY-246 path encode cookies rather than quote
+ + JETTY-254 prevent close of jar entry by bad JVMs
+ + JETTY-256 fixed isResumed and work around JVM bug
+ + JETTY-258 duplicate log message in ServletHandler
+ + JETTY-260 Close connector before stop
+ + JETTY-262 Allow acceptor thread priority to be adjusted
+ + JETTY-263 Added implementation for authorizationType Packets
+ + JETTY-265 Only quote cookie values if needed
+ + JETTY-266 Fix deadlock with shutdown
+ + JETTY-271 ResourceHandler uses resource for MimeType mapping
+ + JETTY-272 Activate and Passivate events for sessions
+ + JETTY-274 Improve flushing at end of request for blocking
+ + JETTY-276 Partial fix for reset/close race
+ + JETTY-277 Improved ContextHandlerCollection
+ + JETTY-278 Session invalidation delay until no requests
+ + JETTY-280 Fixed deadlock with two flushing threads
+ + JETTY-284 Fixed stop connector race
+ + JETTY-286 isIntegral and isConfidential methods overridden in
+   SslSelectChannelConnector
+
+jetty-6.1.2rc1 - 08 March 2007
+ + TagLibConfiguration uses resource input stream
+ + Improved handling of early close in AJP
+ + add ajp connector jar to jetty-jboss sar
+ + Improved Context setters for wadi support
+ + fix Dump servlet to handle primitive array types
+ + handle comma separated values for the Connection: header
+ + Added option to allow null pathInfo within context
+ + BoundedThreadPool queues rather than blocks excess jobs.
+ + Support null pathInfo option for webservices deployed to jetty/jboss
+ + Workaround to call SecurityAssocation.clear() for jboss webservices calls to
+   ejbs
+ + Ensure jetty/jboss uses servlet-spec classloading order
+ + call preDestroy() after servlet/filter destroy()
+ + Fix constructor for Constraint to detect wildcard role
+ + Added support for lowResourcesIdleTime to SelectChannelConnector
+ + JETTY-157 make CGI handle binary data
+ + JETTY-175 JDBCUserRealm use getInt instead of getObject
+ + JETTY-188 Use timer for session scavaging
+ + JETTY-235 default realm name
+ + JETTY-242 fix race condition with scavenging sessions when stopping
+ + JETTY-243 FULL
+ + JETTY-244 Fixed UTF-8 buffer overflow
+ + JETTY-245 Client API improvements
+ + JETTY-246 spaces in cookies
+ + JETTY-248 setContentLength after content written
+ + JETTY-250 protect attribute enumerations from modification
+ + JETTY-252 Fixed stats handling of close connection
+ + JETTY-254 prevent close of jar file by bad JVMs
+
+jetty-6.1.2rc0 - 15 February 2007
+ + JETTY-223 Fix disassociate of UserPrincipal on dispatches
+ + JETTY-226 Fixed SSLEngine close issue
+ + JETTY-232 Fixed use of override web.xml
+ + JETTY-236 Buffer leak
+ + JETTY-237 AJPParser Buffer Data Handling
+ + JETTY-238 prevent form truncation
+ + Patches from sybase for ClientCertAuthenticator
+ + Coma separated cookies
+ + Cometd timeout clients
+
+jetty-6.1.2pre1 - 05 February 2007
+ + JETTY-224 run build up to process-test before invoking jetty:run
+ + Added error handling for incorrect keystore/truststore password in
+   SslSelectChannelConnector
+ + fixed bug with virtual host handling in ContextHandlerCollection
+ + added win32service to standard build
+ + refactored cometd to be continuation independent
+ + allow ResourceHandler to use resource base from an enclosing ContextHandler
+
+jetty-6.1.2pre0 - 01 February 2007
+ + Fixed 1.4 method in jetty plus
+ + Fixed generation of errors during jsp compilation for jsp-2.1
+ + Added cometd jsonp transport from aabeling
+ + Added terracotta cluster support for cometd
+ + JETTY-213 request.isUserInRole(String) fixed
+ + JETTY-215 exclude more transitive dependencies from tomcat jars for jsp-2.0
+ + JETTY-216 handle AJP packet fragmentation
+ + JETTY-218 handle AJP ssl key size and integer
+ + JETTY-219 fixed trailing encoded chars in cookies
+ + JETTY-220 fixed AJP content
+ + JETTY-222 fix problem parsing faces-config.xml
+ + add support for Annotations in servlet, filter and listener sources
+ + improved writer buffering
+ + moved JSON parser to util to support reuse
+ + handle virtual hosts in ContextHandlerCollection
+ + enable SslSelectChannelConnector to modify the SslEngine's client
+   authentication settings
+
+jetty-6.1.1 - 15 January 2007
+
+jetty-6.1.1rc1 - 12 January 2007
+ + Use timers for Rollover logs and scanner
+ + JETTY-210 Build jsp-api-2.0 for java 1.4
+
+jetty-6.1.1rc0 - 10 January 2007
+ + Fixed unpacking WAR
+ + extras/win32service download only if no JavaServiceWrapper exist
+ + MultiPartFilter deleteFiles option
+ + CGI servlet fails without exception
+ + JETTY-209 Added ServletTester.createSocketConnector
+ + JETTY-210 Build servlet-api-2.5 for java 1.4
+ + JETTY-211 fixed jboss build
+ + ensure response headers on AjaxFilter messsages turn off caching
+ + start webapps on deployment with jboss, use isDistributed() method from
+   WebAppContext
+ + simplified chat demo
+
+jetty-6.1.0 - 09 January 2007
+ + Fixed unpacking WAR
+
+jetty-6.1.0 - 05 January 2007
+ + Improved config of java5 threadpool
+ + Protect context deployer from Errors
+ + Added WebAppContext.setCopyWebDir to avoid JVM jar caching issues.
+ + GERONIMO-2677 refactor of session id handling for clustering
+ + ServletTester sets content length
+ + Added extras/win32service
+ + JETTY-206 fixed AJP getServerPort and getRemotePort
+
+jetty-6.1.0rc3 - 02 January 2007
+ + JETTY-195 fixed ajp ssl_cert handling
+ + JETTY-197 fixed getRemoteHost
+ + JETTY-203 initialize ServletHandler if no Context instance
+ + JETTY-204 setuid fix
+ + setLocale does not use default content type
+ + Use standard releases of servlet and jsp APIs.
+ + implement resource injection and lifecycle callbacks declared in web.xml
+ + extras/servlet-tester
+
+jetty-6.1.0rc2 - 20 December 2006
+ + AJP13Parser, throw IllegalStateException on unimplemented AJP13 Requests
+ + ContextHandlerCollection is noop with no handlers
+ + ensure servlets initialized if only using ServletHandler
+ + fixed Jetty-197 AJP13 getRemoteHost()
+ + Refactored AbstractSessionManager for ehcache
+ + ensure classpath passed to jspc contains file paths not urls
+ + JETTY-194 doubles slashes are significant in URIs
+ + JETTY-167 cometd refactor
+ + remove code to remove SecurityHandler if no constraints present
+ + JETTY-201 make run-as work for both web container and ejb container in jboss
+ + ensure com.sun.el.Messages.properties included in jsp-2.1 jar
+
+jetty-6.1.0rc1 - 14 December 2006
+ + simplified idle timeout handling
+ + JETTY-193 MailSessionReference without authentication
+ + JETTY-199 newClassPathResource
+ + ensure unique name for ServletHolder instances
+ + added cache session manager(pre-alpha)
+
+jetty-6.1.0rc0 - 08 December 2006
+ + JETTY-181 Allow injection of a java:comp Context
+ + JETTY-182 Optionally set JSP classpath initparameter
+ + Dispatcher does not protect javax.servlet attributes
+ + DefaultHandler links virtual hosts.
+ + Fixed cachesize on invalidate
+ + Optimization of writers
+ + ServletHandler allows non REQUEST exceptions to propogate
+ + TCK fixes from Sybase:
+ + Handle request content encodings
+ + forward query attribute fix
+ + session attribute listener
+ + Servlet role ref
+ + flush if content-length written
+ + 403 for BASIC authorization failure
+ + null for unknown named dispatches
+ + JETTY-184 cometd connect non blocking
+ + Support for RFC2518 102-processing response
+ + JETTY-123 fix improved
+ + Added org.mortbay.thread.concurrent.ThreadPool
+ + Added extras/gwt
+ + Fixed idle timeout
+ + JETTY-189 ProxyConnection
+ + Added spring ejb3 demo example
+ + update jasper to glassfish SJSAS-9_1-B27-EA-07_Dec_2006
+ + JETTY-185 tmp filename generation
+
+jetty-6.1.0pre3 - 22 November 2006
+ + fixed NIO endpoint flush. Avoid duplicate sends
+ + CVE-2006-6969 Upgraded session ID generation to use SecureRandom
+ + updated glassfish jasper to tag SJSAS-9_1-B25-EA-08_Nov_2006
+ + Support TLS_DHE_RSA_WITH_AES_256_CBC_SHA
+ + JETTY-180 XBean support for context deploy
+ + JETTY-154 Cookies are double quotes only
+ + Expose isResumed on Continuations
+ + Refactored AJP generator
+
+jetty-6.0.2 - 22 November 2006
+ + Moved all modules updates from 6.1pre2 to 6.0
+ + Added concept of bufferred endpoint
+ + Added conversion Object -> ObjectName for the result of method calls made on
+   MBeans
+ + Added DataFilter configuration to cometd
+ + added examples/test-jaas-webapp
+ + Added extraClassPath to WebAppContext
+ + Added hierarchical destroy of mbeans
+ + Added ID constructor to AbstractSessionManager.Session
+ + added isStopped() in LifeCycle and AbstractLifeCycle
+ + Added override descriptor for deployment of RO webapps
+ + add <Property> replacement in jetty xml config files
+ + alternate optimizations of writer (use -Dbuffer.writers=true)
+ + Allow session cookie to be refreshed
+ + Apply queryEncoding to getQueryString
+ + CGI example in test webapp
+ + change examples/test-jndi-webapp so it can be regularly built
+ + Default soLinger is -1 (disabled)
+ + ensure "" returned for ServletContext.getContextPath() for root context
+ + ensure sessions nulled out on request recycle; ensure session null after
+   invalidate
+ + ensure setContextPath() works when invoked from jetty-web.xml
+ + fixed NIO endpoint flush. Avoid duplicate sends
+ + Fixed NPE in bio.SocketEndPoint.getRemoteAddr()
+ + Fixed resource cache flushing
+ + Fixed tld parsing for maven plugin
+ + HttpGenerator can generate requests
+ + Improved *-mbean.properties files and specialized some MBean
+ + JETTY-118 ignore extra content after close.
+ + JETTY-119 cleanedup Security optimizatoin
+ + JETTY-123 handle windows UNC paths
+ + JETTY-126 handle content > Integer.MAX_VALUE
+ + JETTY-129 ServletContextListeners called after servlets are initialized
+ + JETTY-151 Idle timeout only applies to blocking operations
+ + JETTY-154 Cookies are double quotes only
+ + JETTY-171 Fixed filter mapping
+ + JETTY-172 use getName() instead of toString
+ + JETTY-173 restore servletpath after dispatch
+ + Major refactor of SelectChannel EndPoint for client selector
+ + make .tag files work in packed wars
+ + Plugin shutdown context before stopping it.
+ + Refactored session lifecycle and additional tests
+ + release resource lookup in Default servlet
+ + (re)make JAAS classes available to webapp classloader
+ + Reverted UnixCrypt to use coersions (that effected results)
+ + Session IDs can change worker ID
+ + Simplified ResourceCache and Default servlet
+ + SocketConnector closes all connections in doStop
+ + Upgraded session ID generation to use SecureRandom
+ + updated glassfish jasper to tag SJSAS-9_1-B25-EA-08_Nov_2006
+ + Support TLS_DHE_RSA_WITH_AES_256_CBC_SHA
+
+jetty-5.1.14 - 09 August 2007
+ + patched with correct version
+ + JETTY-155 force close with content length.
+ + JETTY-369 failed state in Container
+
+jetty-5.1.13
+ + Sourceforge 1648335: problem setting version for AJP13
+
+jetty-5.1.12 - 22 November 2006
+ + Added support for TLS_DHE_RSA_WITH_AES_256_CBC_SHA
+ + Upgraded session ID generation to use SecureRandom
+ + Quote single quotes in cookies
+ + AJP protected against bad requests from mod_jk
+ + JETTY-154 Cookies ignore single quotes
+
+jetty-4.2.27 - 22 November 2006
+ + Upgraded session ID generation to use SecureRandom
+ + AJP protected against bad requests from mod_jk
+
+jetty-6.1.0pre2 - 20 November 2006
+ + Added extraClassPath to WebAppContext
+ + Fixed resource cache flushing
+ + Clean up jboss module licensing
+
+jetty-6.1.0pre1 - 19 November 2006
+ + Use ContextDeployer as main deployer in jetty.xml
+ + Added extras/jboss
+ + Major refactor of SelectChannel EndPoint for client selector
+ + Fixed NPE in bio.SocketEndPoint.getRemoteAddr()
+ + Reverted UnixCrypt to use coersions (that effected results)
+ + JETTY-151 Idle timeout only applies to blocking operations
+ + alternate optimizations of writer (use -Dbuffer.writers=true)
+ + JETTY-171 Fixed filter mapping
+ + JETTY-172 use getName() instead of toString
+ + JETTY-173 restore servletpath after dispatch
+ + release resource lookup in Default servlet
+ + Simplified ResourceCache and Default servlet
+ + Added override descriptor for deployment of RO webapps
+ + Added hierarchical destroy of mbeans
+
+jetty-6.1.0pre0 - 21 October 2006
+ + add <Property> replacement in jetty xml config files
+ + make .tag files work in packed wars
+ + add hot deployment capability
+ + ensure setContextPath() works when invoked from jetty-web.xml
+ + ensure sessions nulled out on request recycle; ensure session null after
+   invalidate
+ + ensure "" returned for ServletContext.getContextPath() for root context
+ + Fixed tld parsing for maven plugin
+ + Improved *-mbean.properties files and specialized some MBean
+ + Added conversion Object -> ObjectName for the result of method calls made on
+   MBeans
+ + JETTY-129 ServletContextListeners called after servlets are initialized
+ + change examples/test-jndi-webapp so it can be regularly built
+ + added isStopped() in LifeCycle and AbstractLifeCycle
+ + fixed isUserInRole checking for JAASUserRealm
+ + fixed ClassCastException in JAASUserRealm.setRoleClassNames(String[])
+ + add a maven-jetty-jspc-plugin to do jspc precompilation
+ + added examples/test-jaas-webapp
+ + (re)make JAAS classes available to webapp classloader
+ + CGI example in test webapp
+ + Plugin shutdown context before stopping it.
+ + Added concept of bufferred endpoint
+ + Factored ErrorPageErrorHandler out of WebAppContext
+ + Refactored ErrorHandler to avoid statics
+ + Transforming classloader does not transform resources.
+ + SocketConnector closes all connections in doStop
+ + Improved charset handling in URLs
+ + minor optimization of bytes to UTF8 strings
+ + JETTY-112 ContextHandler checks if started
+ + JETTY-113 support optional query char encoding on requests
+ + JETTY-114 removed utf8 characters from code
+ + JETTY-115 Fixed addHeader
+ + added cometd chat demo
+ + JETTY-119 cleanedup Security optimizatoin
+ + Refactored session lifecycle and additional tests
+ + JETTY-121 init not called on externally constructed servlets
+ + JETTY-124 always initialize filter caches
+ + JETTY-126 handle content > Integer.MAX_VALUE
+ + JETTY-123 handle windows UNC paths
+ + JETYY-120 SelectChannelConnector closes all connections on stop
+ + Added ID constructor to AbstractSessionManager.Session
+ + Allow session cookie to be refreshed
+ + Added DataFilter configuration to cometd
+ + Added extras/setuid to support start as root
+ + Apply queryEncoding to getQueryString
+ + JETTY-118 ignore extra content after close.
+ + HttpGenerator can generate requests
+ + Ported HtAccessHandler
+ + Start of a client API
+ + Session IDs can change worker ID
+ + Default soLinger is -1 (disabled)
+ + AJP Connector
+
+jetty-5.1.11 - 08 October 2006
+ + fixed ByteBufferOutputStream capacity calculation
+ + Fixed AJP handling of certificate length (1494939)
+ + Fixed AJP chunk header (1507377)
+ + Fixed order of destruction event calls
+ + Fix to HttpOutputStream from M.Traverso
+ + Default servlet only uses setContentLength on wrapped responses
+
+jetty-4.2.26 - 08 October 2006
+ + Backport of AJP fixes
+
+jetty-6.0.1 - 24 September 2006
+ + fixed isUserInRole checking for JAASUserRealm
+ + fixed ClassCastException in JAASUserRealm.setRoleClassNames(String[])
+ + Improved charset handling in URLs
+ + Factored ErrorPageErrorHandler out of WebAppContext
+ + Refactored ErrorHandler to avoid statics
+ + JETTY-112 ContextHandler checks if started
+ + JETTY-114 removed utf8 characters from code
+ + JETTY-115 Fixed addHeader
+ + JETTY-121 init not called on externally constructed servlets
+ + minor optimization of bytes to UTF8 strings
+ + JETTY-113 support optional query char encoding on requests
+ + JETTY-124 always initialize filter caches
+ + JETYY-120 SelectChannelConnector closes all connections on stop
+
+jetty-6.0.0 - 10 September 2006
+ + SocketConnector closes all connections in doStop
+ + Conveniance builder methods for listeners and filters
+ + Transforming classloader does not transform resources.
+ + Plugin shutdown context before stopping it.
+
+jetty-6.0.0rc4 - 05 September 2006
+ + bind jetty-env.xml entries to java:comp/env
+ + JETTY-107 Poor cast in SessionDump demo.
+ + Set charset on error pages
+
+jetty-6.0.0rc3 - 01 September 2006
+ + pulled 6.0.0 branch
+ + JETTY-103
+ + Move MailSessionReference to org.mortbay.naming.factories
+ + Less verbose handling of BadResources from bad URLs
+ + Avoid double error handling of Bad requests
+ + don't warn for content length on head requests
+ + JETTY-104 (raised glassfish ISSUE-1044) hide JSP forced path attribute
+ + JETTY-68 Complete request after sendRedirect
+ + Transferred the sslengine patch from the patches directory to extras
+
+jetty-6.0.0rc2 - 25 August 2006
+ + use mvn -Dslf4j=false jetty:run to disable use of slf4j logging with
+   jdk1.4/jsp2.0
+ + added org.apache.commons.logging package to system classes that can't be
+   overridden by a webapp classloader
+ + mvn -Djetty.port=x jetty:run uses port number given for the default
+   connector
+ + Fixed NPE when no resource cache
+ + Refactored WebXmlConfiguration to allow custom web.xml resource
+ + Moved more utility packagtes to the util jar
+ + Direct buffer useage is optional
+ + Destroy HttpConnection to improve buffer pooling
+ + Timestamp in StdErrLog
+
+jetty-6.0.0rc1 - 16 August 2006
+ + Support for binding References and Referenceables and javax.mail.Sessions in
+   JNDI
+ + Added TransformingWebAppClassLoader for spring 2.0 byte code modification
+   support
+ + JETTY-90
+ + Fixed FD leak for bad TCP acks. JETTY-63
+ + JETTY-87
+ + Change path mapping so that a path spec of /foo/* does not match /foo.bar :
+   JETTY-88
+ + add <requestLog> config param to jetty plugin
+ + JETTY-85 JETTY-86 (TrustManager and SecureRandom are now configurable;
+   better handling of null/default values)
+ + parse jsp-property-group in web.xml for additional JSP servlet mappings
+ + protected setContentType from being set during include
+ + JETTY-91
+ + added modules/spring with XmlBeanFactory configuration
+ + removed support for lowResources from SelectChannelConnector
+ + added start of cometd implementation (JSON only)
+ + added start of grizzly connector
+ + removed org.mortbay. from context system classes configuration
+ + -DSTOP.PORT must be specified.
+ + moved optional modules to extras
+ + fixed bug that caused Response.setStatus to ignore the provided message
+ + refactored resource cache
+ + Allow direct filling of buffers for uncached static content.
+ + Added simple ResourceHandler and FileServer example
+
+jetty-6.0.0rc0 - 07 July 2006
+ + change prefix from "jetty6" to just "jetty" for plugin: eg is now mvn
+   jetty:run
+ + allow <key> or <name> in <systemProperty> for plugin
+ + simplified jetty.xml with new constructor injections
+ + added setters and getters on SessionManager API for session related config:
+   cookie name, url parameter name, domain, max age and path.
+ + add ability to have a lib/ext dir from which to recursively add all jars and
+   zips to the classpath
+ + patch to allow Jetty to use JSP2.1 from Glassfish instead of Jasper from
+   Tomcat
+ + fixed classesDirectory param for maven plugin to be configurable
+ + ensure explicitly set tmp directory called "work" is not deleted on exit
+ + ensure war is only unpacked if war is newer than "work" directory
+ + change name of generated tmp directory to be
+   "Jetty_"+host+"_"+port+"_"+contextpath+"_"+virtualhost
+ + Cleaned up idle expiry.
+ + Ssl algorithm taken from system property
+ + Added 8 random letters&digits to Jetty-generated tmp work dir name to ensure
+   uniqueness
+ + Simplify runtime resolution of JSP library for plugin
+ + Ensure mvn clean cleans the build
+ + Do not wrap EofException with EofException
+ + reverse order for destroy event listeners
+ + added StatisticsHandler and statistics on Connector.
+ + Simplified Servlet Context API
+ + Added maximum limit to filter chain cache.
+ + refactor HttpChannelEndPoint in preparation for SslEngine
+ + ContextHandlerCollection addContext and setContextClass
+ + Discard excess bytes in header buffer if connection is closing
+ + Updated javax code from
+   http://svn.apache.org/repos/asf/tomcat/tc6.0.x/trunk/java/javax@417727
+ + Threadpool does not need to be a LifeCycle
+ + support graceful shutdown
+ + Added WebAppContextClassLoader.newInstance to better support exensible
+   loaders.
+ + immutable getParameterMap()
+ + support <load-on-startup> for SingleThreadModel
+ + changed ServletContext.getResourcePaths()  to not return paths containing
+   double slashes
+ + fixed HttpGenerator convertion of non UTF-8: JETTY-82
+ + added html module from jetty 5 - but deprecated until maintainer found
+
+jetty-6.0.0beta17 - 01 June 2006
+ + Added config to disable file memory mapped buffers for windows
+ + Added Request.isHandled()
+ + Refactored Synchronization of SelectChannelConnector
+ + Recovered repository from Codehaus crash
+ + ContextHandler.setConnectors replace setHosts
+ + Connector lowResourceMaxIdleTime  implemented.
+ + Default servlet checks for aliases resources
+ + Added clover reports and enough tests to get >50% coverage
+ + Fixed IE SSL issue.
+ + Implemented runAs on servlets
+ + Flush will flush all bytes rather than just some.
+ + Protected WEB-INF and META-INF
+ + don't reset headers during forward
+ + BoundedThreadPool.doStop waits for threads to complete
+
+jetty-6.0.0beta16 - 12 May 2006
+ + remove a couple of System.err.printlns
+ + replace backwards compativle API in UrlEncoded
+
+jetty-6.0.0beta15 - 11 May 2006
+ + Added Server attribute org.mortbay.jetty.Request.maxFormContentSize
+ + Renamed NotFoundHandler to DefaultHandler
+ + Added automatic scan of all WEB-INF/jetty-*.xml files for plugin
+ + Added <scanTargets> parameter to allow other locations to scan for plugin
+ + Major refactor to simplify Server and handler hierarchy
+ + setSendServerVersion method added to Server to control sending of Server:
+   http header
+ + removed SelectBlockingChannelConnector (unmaintained)
+ + Improved HttpException
+ + Moved more resources to resources
+ + Added ThrottlingFilter and fixed race in Continuations
+ + Added taglib resources to 2.1 jsp api jar
+ + Reset of timer task clears expiry
+ + improved MBeanContainer object removal
+ + ContextHandler.setContextPath can be called after start.
+ + Fixed handling of params after forward
+ + Added --version to start.jar
+ + Added embedded examples
+ + Simplified DefaultServlet static content buffering
+ + readded BoundedThreadPool shrinking (and then fixed resulting deadlock)
+ + improved MBean names
+ + improved support for java5 jconsole
+ + Session scavenger threads from threadpool
+ + Thread names include URI if debug set
+ + don't accept partial authority in request line.
+ + enforce 204 and 304 have no content
+
+jetty-6.0.0beta14 - 09 April 2006
+ + ignore dirs and files that don't exist in plugin scanner
+ + added support for stopping jetty using "java -jar start.jar --stop"
+ + added configurability for webdefault.xml in maven plugin
+ + adding InvokerServlet
+ + added ProxyServlet
+ + stop JDBCUserRealm coercing all credentials to String
+ + Change tmp dir of plugin to work to be in line with jetty convention
+ + Modify plugin to select JSP impl at runtime
+ + Use start.config to select which JSP impl at runtime based on jdk version
+ + Added JSP 2.1 APIs from apache
+ + Added Jasper 2.1 as jesper (jasper without JCL)
+ + Started readding logging to jesper using jdk logging
+ + fixed priority of port from url over host header
+ + implemented request.isUserInRole
+ + securityHandler removed if not used.
+ + moved test webapps to examples directory
+ + improved contentType handling and test harness
+ + fixed forward bug (treated as include)
+ + fixed HttpField iterator
+ + added jetty-util.jar module
+ + added reset to Continuation
+
+jetty-6.0.0beta12 - 16 March 2006
+ + Fixed maven plugin JNDI for redeploys
+ + Fixed tld discovery for plugin (search dependencies)
+ + Fixed JettyPlus for root contexts
+ + Fixed error handling in error page
+ + Added JSP2.0 demos to test webapp
+ + Upgraded jasper to 5.5.15
+ + Added provider support to SslListener
+ + Log ERROR for runtimeExceptions
+
+jetty-6.0.0beta11 - 14 March 2006
+ + added JAAS
+ + added webapp-specific JNDI entries
+ + added missing Configurations for maven plugin
+ + fixed FORM authentication
+ + moved dtd and xsd to standard javax location
+ + added patch to use joda-time
+ + refactored session ID management
+ + refactored configuration files and start()
+ + fixed ; decoding in URIs
+ + Added HttpURI and improved UTF-8 parsing.
+ + refactored writers and improved UTF-8 generation.
+
+jetty-6.0.0beta10 - 25 February 2006
+ + Added support for java:comp/env
+ + Added support for pluggable transaction manager
+ + Forward masks include attributes and vice versa
+ + Fixed default servlet handling of includes
+ + Additional accessors for request logging
+ + added getLocalPort() to connector
+ + Fixed content-type for range requests
+ + Fix for sf1435795 30sec delay from c taylor
+ + Fix for myfaces and include with close
+ + Fix sf1431936 don't chunk the chunk
+ + Fix http://jira.codehaus.org/browse/JETTY-6. hi byte reader
+ + Updates javax to MR2 release
+
+jetty-6.0.0beta9 - 09 February 2006
+ + PathMap for direct context mapping.
+ + Refactored chat demo and upgraded prototype.js
+ + Continuation cleanup
+ + Fixed unraw decoding of query string
+ + Fixed dispatch of wrapped requests.
+ + Fixed double flush of short content.
+ + Added request log.
+ + Added CGI servlet.
+ + Force a tempdir to be set.
+ + Force jasper scratch dir.
+ + fixed setLocale bug sf1426940
+ + Added TLD tag listener handling.
+
+jetty-6.0.0beta8 - 24 January 2006
+ + fixed dispatch of new session problem. sf:1407090
+ + reinstated rfc2616 test harness
+ + Handle pipeline requests without hangs
+ + Removed queue from thread pool.
+ + improved caching of content types
+ + fixed bug in overloaded write method on HttpConnection (reported against
+   Tapestry4.0)
+ + hid org.apache.commons.logging and org.slf4j packages from webapp
+ + maven-jetty6-plugin stopped transitive inclusion of log4j and
+   commons-logging from commons-el for jasper
+ + patch to remove spurious ; in HttpFields
+ + improve buffer return mechanism.
+ + conveniance addHandler removeHandler methods
+ + maven-jetty6-plugin: ensure compile is done before invoking jetty
+ + maven-jetty6-plugin: support all types of artifact dependencies
+
+jetty-6.0.0Beta7
+ + Fixed infinite loop with chunk handling
+ + Faster header name lookup
+ + removed singleton Container
+ + reduced info verbosity
+ + null dispatch attributes not in names
+ + maven-jetty6-plugin added tmpDirectory property
+ + maven-jetty6-plugin stopped throwing an error if there is no target/classes
+   directory
+
+jetty-6.0.0Beta6
+ + Fixed issue with blocking reads
+ + Fixed issue with unknown headers
+ + optimizations
+
+jetty-6.0.0Beta5
+ + Moved to SVN
+ + Fixed writer char[] creations
+ + Added management module for mbeans
+
+jetty-6.0.0Beta4
+ + System property support in plugin
+ + CVE-2006-2758 Fixed JSP visibility security issue.
+ + Improved jetty-web.xml access to org.mortbay classes.
+ + Jasper 5.5.12
+
+jetty-6.0.0Beta3
+ + Fixed error in block read
+ + Named dispatch.
+ + Fixed classloader issue with server classes
+
+jetty-6.0.0Beta2
+ + merged util jar back into jetty jar
+ + Simpler continuation API
+ + loosely coupled with JSP servlet
+ + loosely coupled with SLF4J
+ + Improved reuse of HttpField values and cookies.
+ + Improved buffer return
+
+jetty-6.0.0Beta1
+ + Servlet 2.5 API
+ + SSL connector
+ + maven2 plugin
+ + shutdown hook
+ + refactored start/stop
+ + Implemented all listeners
+ + Error pages
+ + Virtual hosts
+ + Multiple select sets
+
+jetty-6.0.0Beta0
+ + Maven 2 build
+ + Dispatcher parameters
+ + UTF-8 encoding for URLs
+ + Fixed blocking read
+
+jetty-6.0.0APLPA3
+ + Added demo for Continuations
+ + Jasper and associated libraries.
+
+jetty-6.0.0ALPHA2
+ + Continuations - way cool way to suspend a request and retry later.
+ + Dispatchers
+ + Security
+
+jetty-6.0.0ALPHA1
+ + Filters
+ + web.xml handling
+
+jetty-6.0.0ALPHA0
+ + Totally rearchitected and rebuilt, so 10 years of cruft could be removed!
+ + Improved "dependancy injection" and "inversion of control" design of
+   components
+ + Improved "interceptor" design of handlers
+ + Smart split buffer design allows large buffers to only be allocated to
+   active connections. The resulting memory savings allow very large buffers to
+   be used, which increases the chance of efficient asynchronous flushing and
+   of avoiding chunking.
+ + Optional use of NIO Buffering so that efficient direct buffers and memory
+   mapped files can be used.
+ + Optional use of NIO non-blocking scheduling so that threads are not
+   allocated per connection.
+ + Optional use of NIO gather writes, so that for example a HTTP header and a
+   memory mapped
+ + file may be sent as sent is a single operation.
+ + Missing Security
+ + Missing Request Dispatchers
+ + Missing web.xml based configuration
+ + Missing war support
+
+jetty-5.1.11RC0 - 05 April 2006
+ + stop JDBCUserRealm forcing all credentials to be String
+ + force close with shutdownOutput for win32
+ + NPE protection if desirable client certificates
+ + Added provider support to SslListener
+ + logging improvements for servlet and runtime exceptions
+ + Fixed AJP handling of ;jsessionid.
+ + improved contentType param handling
+
+jetty-5.1.10 - 05 January 2006
+ + Fixed path aliasing with // on windows.
+ + Fix for AJP13 with multiple headers
+ + Fix for AJP13 with encoded path
+ + Remove null dispatch attributes from getAttributeNames
+ + Put POST content default back to iso_8859_1. GET is UTF-8 still
+
+jetty-4.2.25 - 04 January 2006
+ + Fixed aliasing of // for win32
+
+jetty-5.1.9 - 07 December 2005
+ + Fixed wantClientAuth(false) overriding netClientAuth(true)
+
+jetty-6.0.0betaX
+ + See http://jetty.mortbay.org/jetty6 for 6.0 releases
+
+jetty-5.1.8 - 07 December 2005
+ + Fixed space in URL issued created in 5.1.6
+
+jetty-5.1.7 - 07 December 2005
+
+jetty-5.1.7rc0 - 06 December 2005
+ + improved server stats
+ + char encoding for MultiPartRequest
+ + fixed merging of POST params in dispatch query string.
+ + protect from NPE in dispatcher getValues
+ + Updated to 2.6.2 xerces
+ + JSP file servlet mappings copy JspServlet init params.
+ + Prefix servlet context logs with org.mortbay.jetty.context
+ + better support for URI character encodings
+ + use commons logging jar instead of api jar.
+
+jetty-5.1.6 - 18 November 2005
+ + CVE-2006-2758 Fixed JSP visibility security issue.
+ + Improved jetty-web.xml access to org.mortbay classes.
+
+jetty-5.1.5 - 10 November 2005
+ + Improved shutdown hook
+ + Improved URL Decoding
+ + Improved mapping of JSP files.
+
+jetty-5.1.5rc2 - 07 October 2005
+ + Reverted dispatcher params to RI rather than spec behaviour.
+ + ProxyHandler can handle chained proxies
+ + unsynchronized ContextLoader
+ + ReFixed merge of Dispatcher params
+ + public ServerMBean constructor
+ + UTF-8 encoding for URLs
+ + Response.setLocale will set locale even if getWriter called.
+
+jetty-5.1.5rc1 - 23 August 2005
+ + upgraded to commons logging 1.0.4
+ + Release commons logging factories when stopping context.
+ + Fixed illegal state with chunks and 100 continue - Tony Seebregts
+ + Fixed PKCS12Import input string method
+ + Fixed merge of Dispatcher parameters
+ + Encoded full path in ResourceHandler directory listing
+ + handle extra params after charset in header
+ + Fixed 100-continues with chunking and early commit
+
+jetty-5.1.5rc0 - 16 August 2005
+ + Fixed component remove memory leak for stop/start cycles
+ + Facade over commons LogFactory so that discovery may be avoided.
+ + Applied ciphersuite patch from tonyj
+ + Authenticators use servlet sendError
+ + CGI sets SCRIPT_FILENAME
+ + HttpTunnel timeout
+ + NPE protection for double stop in ThreadedServer
+ + Expect continues only sent if input is read.
+
+jetty-5.1.4 - 05 June 2005
+ + Fixed FTP close issue.
+ + setup MX4J with JDK1.5 in start.config
+ + set classloader during webapp doStop
+ + NPE protection in ThreadedServer
+ + ModelMBean handles null signatures
+ + Change JAAS impl to be more flexible on finding roles
+
+jetty-5.1.4rc0 - 19 April 2005
+ + ServletHttpContext correctly calls super.doStop.
+ + HttpServer delegates component handling to Container.
+ + Allow ServletHandler in normal HttpContext again.
+ + Stop start.jar putting current directory on classpath.
+ + More protection from null classloaders.
+ + Turn off web.xml validation for JBoss.
+
+jetty-5.1.3 - 07 April 2005
+ + Some minor code janitorial services
+
+jetty-4.2.24 - 07 April 2005
+
+jetty-5.1.3rc4 - 31 March 2005
+ + Moved servlet request wrapping to enterContextScope for geronimo security
+ + refixed / mapping for filters
+ + Allow XmlConfiguration to start with no object.
+ + updated to mx4j 3.0.1
+ + rework InitialContextFactory to use static 'default' namespace
+ + make java:comp/env immutable for webapps as per J2EE spec
+
+jetty-5.1.3rc3 - 20 March 2005
+ + removed accidental enablement of DEBUG for JettyPlus jndi in
+   log4j.properties
+ + fixed "No getter or setter found" mbean errors
+
+jetty-5.1.3rc2 - 16 March 2005
+ + Updated JSR154Filter for ERROR dispatch
+ + Fixed context to _context refactory error
+
+jetty-5.1.3rc1 - 13 March 2005
+ + Fixed typo in context-param handling.
+ + update to demo site look and feel.
+ + Fixed principal naming in FormAuthenticator
+ + JettyPlus updated to JOTM 2.0.5, XAPool 1.4.2
+
+jetty-4.2.24rc1
+ + Fixed principal naming in FormAuthenticator
+
+jetty-5.1.3rc0 - 08 March 2005
+ + Flush filter chain caches on servlet/filter change
+ + Fixed rollover filename format bug
+ + Fixed JSR154 error dispatch with explicit pass of type.
+ + Allow system and server classes to be configured for context loader.
+ + IOException if EOF read during chunk.
+ + Fixed HTAccess crypt salt handling.
+ + Added simple xpath support to XmlParser
+ + Added TagLibConfiguration to search for listeners in TLDs.
+ + Added SslListener for 1.4 JSSE API.
+ + Fixed moderate load preventing ThreadPool shrinking.
+ + Added logCookie and logLatency support to NCSARequestLog
+ + Added new JAAS callback to allow extra login form fields in authentication
+
+jetty-4.2.24rc0 - 08 March 2005
+ + Back ported Jetty 5 ThreadedServer and ThreadPool
+ + Added logCookie and logLatency support to NCSARequestLog
+
+jetty-5.1.2 - 18 January 2005
+ + Added id and ref support to XmlConfiguration
+ + Cleaned up AbstractSessionManager synchronization.
+ + Fixed potential concurrent login problem with JAAS
+ + Apply patch #1103953
+
+jetty-4.2.23 - 16 January 2005
+ + Cleaned up AbstractSessionManager synchronization.
+ + Fixed potential concurrent login problem with JAAS
+
+jetty-5.1.2pre0 - 22 December 2004
+ + Fixed case of Cookie parameters
+ + Support Secure and HttpOnly in session cookies
+ + Modified useRequestedID handling to only use IDs from other contexts
+ + Added global invalidation to AbstractSessionManager
+ + UnavailableException handling from handle
+ + Fixed suffix filters
+
+jetty-4.2.23RC0 - 17 December 2004
+ + LineInput handles readers with small internal buffer
+ + Added LogStream to capture stderr and stdout to logging
+ + Support Secure and HttpOnly in session cookies
+ + Build unsealed jars
+
+jetty-5.1.1 - 01 December 2004
+
+jetty-5.1.1RC1
+ + Some minor findbugs code cleanups
+ + Made more WebApplicationHandle configuration methods public.
+ + Fixed ordering of filters with multiple interleaved mappings.
+ + Allow double // within URIs
+ + Applied patch for MD5 hashed credentials for MD5
+
+jetty-5.1.1RC0 - 17 November 2004
+ + fix for adding recognized EventListeners
+ + fix commons logging imports to IbmJsseListener
+ + added new contributed shell start/stop script
+ + excluded ErrorPageHandler from standard build in extra/jdk1.2 build
+
+jetty-5.1.0 - 14 November 2004
+
+jetty-5.1.RC1 - 24 October 2004
+ + Allow JSSE listener to be just confidential or just integral.
+ + Fixed NPE for null contenttype
+ + improved clean targets
+ + when committed setHeader is a noop rather than IllegalStateException
+ + Partially flush writers on every write so content length can be detected.
+ + Build unsealed jars
+ + default / mapping does not apply to Filters
+ + many minor cleanups suggested from figbug utility
+ + Allow multiple accepting threads
+
+jetty-5.1.RC0 - 11 October 2004
+ + Fixed many minor issues from J2EE 1.4 TCK testing See sf.net bugs 1031520 -
+   1032205
+ + Refactored, simplified and optimized HttpOutputStream
+ + LineInput handles readers with small internal buffer
+ + Added LogStream to capture stderr and stdout to logging
+ + Added filter chain cache
+ + Added JSR77 servlet statistic support
+ + Refactored webapp context configurations
+ + Added LifeCycle events and generic container.
+ + Upgraded to ant-1.6 for jasper
+ + Fixed HTAccessHandler
+ + JBoss 4.0.0 support
+
+jetty-5.0.0 - 10 September 2004
+
+jetty-5.0.RC4 - 05 September 2004
+ + Fixed configuration of URL alias checking
+ + JettyJBoss: Use realm-name from web.xml if present, otherwise use
+   security-domain from jboss-web.xml
+
+jetty-5.0.RC3 - 28 August 2004
+ + DIGEST auth handles qop, stale and maxNonceAge.
+ + Less verbose warning for non validating xml parser.
+ + fixed jaas logout for jetty-jboss
+ + fixed deployment of ejb-link elements in web.xml with jboss
+ + Update to jasper 5.0.27
+ + Added parameters for acceptQueueSize and lowResources level.
+ + Changed default URI encoding to UTF-8
+ + Fixes to work with java 1.5
+ + JettyPlus upgrade to XAPool 1.3.3. and HSQLDB 1.7.2
+ + JettyPlus addition of pluggable DataSources
+ + Always say close for HTTP/1.0 non keep alive.
+
+jetty-4.2.22
+ + fixed jaas logout for jetty-jboss integration
+ + fixed deployment of ejb-link elements in web.xml for jboss
+ + Added parameters for acceptQueueSize and lowResources level.
+
+jetty-5.0.RC2 - 02 July 2004
+ + Fixed DIGEST challenge delimiters
+ + HTAccess calls UnixCrypt correctly
+ + integrated jetty-jboss with jboss-3.2.4
+ + Error dispatchers are always GET requests.
+ + OPTIONS works for all URLs on default servlet
+ + add JMX support for JettyPlus
+ + add listing of java:comp/env for webapp with JMX
+ + make choice of override of JNDI ENC entries: config.xml or web.xml
+ + Default servlet may use only pathInfo for resource
+ + Fixed session leak in j2ee
+ + Fixed no-role security constraint combination.
+ + Fix to use runas roles during servlet init and destroy
+ + Fixed JAAS logout
+ + HttpContext sendError for authentication errors
+
+jetty-4.2.21 - 02 July 2004
+ + integrated jetty-jboss with jboss-3.2.4
+ + add JMX support for JettyPlus
+ + add listing of java:comp/env for webapp with JMX
+ + make choice of override of JNDI ENC entries: config.xml or web.xml
+ + Fixed JAAS logout
+
+jetty-5.0.RC1 - 24 May 2004
+ + Changed to apache 2.0 license
+ + added extra/etc/start-plus.config to set up main.class for jettyplus
+ + maxFormContentLength may be unlimited with <0 value
+ + Fixed HTTP tunnel timeout setting.
+ + Improved handling of exception from servlet init.
+ + FORM auth redirects to context on a re-auth
+ + Handle multiple virutal hosts from JBoss 3.2.4RC2
+
+jetty-4.2.20 - 22 May 2004
+ + maxFormContentLength may be unlimited with <0 value
+ + Fixed HTTP tunnel timeout setting.
+ + Improved handling of exception from servlet init.
+ + FORM auth redirects to context on a re-auth
+
+jetty-5.0.0RC0 - 07 April 2004
+ + Updated JettyPlus to JOTM 1.4.3 (carol-1.5.2, xapool-1.3.1)
+ + ServletContext attributes wrap HttpContext attributes.
+ + Factored out XML based config from WebApplicationContext
+ + Improved RequestLog performance
+ + Fixed j2se 1.3 problem with HttpFields
+ + Default servlet respectes servlet path
+ + Fixed setCharacterEncoding for parameters.
+ + Fixed DOS problem
+ + Worked around bad jboss URL handler in XMLParser
+ + Forced close of connections over stop/start
+ + ProxiedFor field support added to NCSARequestLog
+ + Fixed Default servlet for non empty servlet paths
+ + Updated mx4j to V2
+ + Updated jasper to 5.0.19
+ + Changed dist naming convention to lowercase
+
+jetty-4.2.20RC0 - 07 April 2004
+ + Worked around bad jboss URL handler in XMLParser
+ + Forced close of connections over stop/start
+ + HttpFields protected headers
+ + ProxiedFor field support added to NCSARequestLog
+ + Fixed Default servlet for non empty servlet paths
+ + Changed dist naming convention to lowercase
+
+jetty-4.2.19 - 19 March 2004
+ + Fixed DOS attack problem
+
+jetty-5.0.beta2 - 12 February 2004
+ + Added skeleton JMX MBean for jetty plus
+ + Fixed HEAD with empty chunk bug.
+ + Fixed jetty.home/work handling
+ + Fixed setDate thread safety
+ + Fixed SessionManager init
+ + Improved low thread handling
+ + FileResource better handles non sun JVM
+ + Monitor closes socket before exit
+ + Updated to Japser 5.0.16
+ + RequestDispatcher uses request encoding for query params
+ + Fixed busy loop in threadpool run
+ + Reorganized ServletHolder init
+ + Added log4j context repository to jettyplus
+ + NPE guard for no-listener junit deployment
+ + Added experimental NIO listeners again.
+ + fixed filter dispatch configuration.
+ + fixed lazy authentication with FORMs
+
+jetty-4.2.18 - 01 March 2004
+ + Added log4j context repository to jettyplus
+ + NPE guard for no-listener junit deployment
+ + Improved log performance
+ + Fixed j2se 1.3 problem with HttpFields
+ + Suppress some more IOExceptions
+ + Default servlet respectes servlet path
+
+jetty-4.2.17 - 01 February 2004
+ + Fixed busy loop in threadpool run
+ + Reorganized ServletHolder init
+
+jetty-4.2.16 - 30 January 2004
+ + Fixed setDate multi-cpu race
+ + Improved low thread handling
+ + FileResource better handles non sun JVM
+ + Fixed HttpTunnel for JDK 1.2
+ + Monitor closes socket before exit
+ + RequestDispatcher uses request encoding for query params
+ + Update jasper to 4.1.29
+
+jetty-5.0.beta1 - 24 December 2003
+ + SecurityConstraints not reset by stop() on custom context
+ + Fixed UnixCrypt handling in HTAccessHandler
+ + Added patch for JBoss realm single sign on
+ + Reorganized FAQ
+ + Env variables for CGI
+ + Removed support for old JBoss clustering
+
+jetty-4.2.15 - 24 December 2003
+ + SecurityConstraints not reset by stop() on custom context
+ + Fixed UnixCrypt handling in HTAccessHandler
+ + Added patch for JBoss realm single sign on
+ + Environment variables for CGI
+ + Removed support for old JBoss clustering
+
+jetty-5.0.beta0 - 22 November 2003
+ + Removed support for HTTP trailers
+ + PathMap uses own Map.Entry impl for IBM JVMs
+ + Use ${jetty.home}/work or WEB-INF/work for temp directories if present
+ + Protect ThreadPool.run() from interrupted exceptions
+ + Added org.mortbay.http.ErrorHandler for error pages.
+ + Fixed init race in HttpFields cache
+ + Allow per listener handlers
+ + Added MsieSslHandler to handle browsers that don't grok persistent SSL (msie
+   5)
+ + Respect content length when decoding form content.
+ + JBoss integration uses writer rather than stream for XML config handling
+ + Expire pages that contain set-cookie as per RFC2109 recommendation
+ + Updated jasper to 5.0.14beta
+ + Removed the CMR/CMP distributed session implementation
+
+jetty-4.2.15rc0 - 22 November 2003
+ + PathMap uses own Map.Entry impl for IBM JVMs
+ + Race in HttpFields cache
+ + Use ${jetty.home}/work or WEB-INF/work for temp directories if present
+ + Protect ThreadPool.run() from interrupted exceptions
+ + Added org.mortbay.http.ErrorHandler for error pages.
+ + JsseListener checks UserAgent for browsers that can't grok persistent SSL
+   (msie5)
+ + Removed the CMR/CMP distributed session implementation
+
+jetty-4.2.14 - 04 November 2003
+ + respect content length when decoding form content.
+ + JBoss integration uses writer rather than stream for XML config handling
+ + Fixed NPE in SSO
+ + Expire pages that contain set-cookie as per RFC2109 recommendation
+
+jetty-5.0.alpha3 - 19 October 2003
+ + Reworked Dispatcher to better support cross context sessions.
+ + Use File.toURI().toURL() when jdk 1.2 alternative is available.
+ + Priority added to ThreadPool
+ + replaced win32 service with http://wrapper.tanukisoftware.org
+ + FileClassPath derived from walk of classloader hierarchy.
+ + Implemented security constraint combinations
+ + Set TransactionManager on JettyPlus datasources and pools
+ + Fixed null pointer if no sevices configured for JettyPlus
+ + Updated jasper and examples to 5.0.12
+ + Lazy authentication if no auth constraint.
+ + Restore servlet handler after dispatch
+ + Allow customization of HttpConnections
+ + Failed requests excluded from duration stats
+
+jetty-4.2.14RC1 - 19 October 2003
+ + Reworked Dispatcher to better support cross context sessions.
+ + Added UserRealm.logout and arrange for form auth
+ + Allow customization of HttpConnections
+ + Failed requests excluded from
+
+jetty-4.2.14RC0 - 07 October 2003
+ + Correctly setup context classloader in cross context dispatch.
+ + Put a semi busy loop into proxy tunnels for IE problems
+ + Fixed handling of error pages for IO and Servlet exceptions
+ + updated extra/j2ee to jboss 3.2.1+
+ + Use File.toURI().toURL() when jdk 1.2 alternative is available.
+ + cookie timestamps are in GMT
+ + Priority on ThreadedServer
+ + replaced win32 service with http://wrapper.tanukisoftware.org
+ + Build fileclasspath from a walk of the classloaders
+ + Set TransactionManager on JettyPlus datasources and pools
+ + Fixed null pointer if no sevices configured for JettyPlus
+ + Fixed comments with embedded double dashes on jettyplus.xml file
+
+jetty-5.0.alpha2 - 19 September 2003
+ + Use commons logging.
+ + Use log4j if extra is present.
+ + Improved JMX start.
+ + Update jakarta examples
+ + Correctly setup context classloader in cross context dispatch.
+ + Turn off validation without non-xerces errors
+ + minor doco updates.
+ + moved mailing lists to sourceforge.
+ + Put a semi busy loop into proxy tunnels for IE problems
+ + MultipartRequest supports multi value headers.
+ + XML entity resolution uses URLs not Resources
+ + Implemented ServletRequestListeners as optional filter.
+ + Moved error page mechanism to be webapp only.
+ + Fixed error page handling of IO and Servlet exceptions.
+
+jetty-5.0.alpha1 - 12 August 2003
+ + Switched to mx4j
+ + Improve combinations of Security Constraints
+ + Implemented locale encoding mapping.
+ + Synced with 4.2.12
+ + Updated to Jasper 5.0.7
+ + Server javadoc from war
+
+jetty-5.0.alpha0 - 16 July 2003
+ + Compiled against 2.4 servlet spec.
+ + Implemented remote/local addr/port methods
+ + Updated authentication so that a normal Principal is used.
+ + updated to jasper 5.0.3
+ + Implemented setCharaterEncoding
+ + Implemented filter-mapping <dispatcher> element
+ + Implemented Dispatcher forward attributes.
+
+jetty-4.2.12 - 12 August 2003
+ + Restore max inactive interval for session manager
+ + Removed protection of org.mortbay.http attributes
+ + Fixed parameter ordering for a forward request.
+ + Fixed up HTAccessHandler
+ + Improved error messages from ProxyHandler
+ + Added missing S to some OPTIONS strings
+ + Added open method to threaded server.
+ + FORMAuthenticator does 403 with empty error page.
+ + Fixed MIME types for chemicals
+ + Padding for IE in RootNotFoundHandler
+
+jetty-4.2.11 - 12 July 2003
+ + Fixed race in servlet initialization code.
+ + Cookie params all in lower case.
+ + Simplified AJP13 connection handling.
+ + Prevent AJP13 from reordering query.
+ + Support separate Monitor class for start
+ + Branched for Jetty 5 development.
+
+jetty-4.2.10 - 07 July 2003
+ + Updates to JettyPlus documentation
+ + Updates to Jetty tutorial for start.jar, jmx etc
+
+jetty-4.2.10pre2 - 04 July 2003
+ + Improvement to JettyPlus config of datasources and connection pools
+ + Addition of mail service for JettyPlus
+ + Move to Service-based architecture for JettyPlus features
+ + Re-implementation of JNDI
+ + Many improvements in JettyPlus java:comp handling
+ + Allow multiple security-role-ref elements per servlet.
+ + Handle Proxy-Connection better
+ + Cleaned up alias handling.
+ + Confidential redirection includes query
+ + handle multiple security role references
+ + Fixed cookie handling for old cookies and safari
+ + Restricted ports in ProxyHandler.
+ + URI always encodes %
+ + Session statistics
+ + XmlConfiguration can get/set fields.
+
+jetty-4.2.10pre1 - 02 June 2003
+ + Fixed JSP code visibility problem introduced in Jetty-4.2.10pre0
+ + Added stop.jar
+ + Added SSO implementation for FORM authentication.
+ + WebApplicationContext does not reassign defaults descriptor value.
+ + Fixed AJP13 protocol so that request/response header enums are correct.
+ + Fixed form auth success redirect after retry, introduced in 4.2.9rc1
+ + Trace support is now optional (in AbstractHttpHandler).
+ + Deprecated forced chunking.
+ + Form authentication remembers URL over 403
+ + ProxyHandler has improved test for request content
+ + Removed support of org.mortbay.http.User role.
+ + Fixed problem with shared session for inter context dispatching.
+
+jetty-4.2.10pre0 - 05 May 2003
+ + Moved Log4JLogSink into JettyPlus
+ + Added ability to override jetty startup class by using -Djetty.server on
+   runline
+ + Incorporate JettyPlus jotm etc into build.
+ + Massive reorg of the CVS tree.
+ + Incorporate jetty extra and plus into build
+ + Integrate with JAAS
+ + Apply the append flag of RolloverFileOutputStream constructor.
+ + RolloverFileOutputStream manages Rollover thread.
+ + New look and feel for www site.
+ + Fixed table refs in JDBCUserRealm.
+ + Allow params in form auth URLs
+ + Updated to jasper jars from tomcat 4.1.24
+ + Allow query params in error page URL.
+ + ProxyHandler checks black and white lists for Connect.
+ + Merge multivalued parameters in dispatcher.
+ + Fixed CRLF bug in MultiPartRequest
+ + Warn if max form content size is reached.
+ + getAuthType returns CLIENT_CERT instead of CLIENT-CERT.
+ + getAuthType maps the HttpServletRequest final strings.
+ + FORM Authentication is serializable for session distribution.
+
+jetty-4.2.9 - 19 March 2003
+ + Conditional headers check after /dir to /dir/ redirection.
+
+jetty-4.2.9rc2 - 16 March 2003
+ + Fixed build.xml for source release
+ + Made rfc2068 PUT/POST Continues support optional.
+ + Defaults descriptor has context classloader set.
+ + Allow dispatch to j_security_check
+ + Added X-Forwarded-For header in ProxyHandler
+ + Updated included jmx jars
+
+jetty-4.2.9rc1 - 06 March 2003
+ + Work around URLClassloader not handling leading /
+ + Dump servlet can load resources for testing now.
+ + Added trust manager support to SunJsseListener.
+ + Added support for client certs to AJP13.
+ + Cleaned up includes
+ + Removed checking for single valued headers.
+ + Optional 2.4 behaviour for sessionDestroyed notification.
+ + Stop proxy url from doing user interaction.
+ + Turn request log buffering off by default.
+ + Reduced default context cache sizes (Total 1MB file 100KB).
+ + ProxyHandler has black and white host list.
+ + Added requestlog to HttpContext.
+ + Allow delegated creation of WebApplication derivations.
+ + Check Data contraints before Auth constraints
+
+jetty-4.2.8_01 - 18 February 2003
+ + Patched first release of 4.2.8 with correct version number
+ + Fixed CGI servlet to handle multiple headers.
+ + Added a SetResponseHeadersHandler, can set P3P headers etc.
+ + ProxyHandler can handle multiple cookies.
+ + Fixed AdminServlet to handle changed getServletPath better.
+ + Default servlet can have own resourceBase.
+ + Rolled back SocketChannelListener to 4.2.5 version
+ + Added option to resolve remote hostnames.  Defaults to off.
+ + Added MBeans for Servlets and Filters
+ + Moved ProxyHandler to the src1.4 tree
+
+jetty-4.2.7 - 04 February 2003
+ + Upgraded to JSSE 1.0.3_01 to fix security problem.
+ + Fixed proxy tunnel for non persistent connections.
+ + Relative sendRedirect handles trailing / correctly.
+ + Changed PathMap to conform to / getServletPath handling.
+
+jetty-4.2.6 - 24 January 2003
+ + Improved synchronization on AbstractSessionManager.
+ + Allow AJP13 buffers to be resized.
+ + Fixed LineInput problem with expanded buffers.
+ + ClientCertAuthentication updates request.
+ + Fixed rel sendRedirects for root context.
+ + Added HttpContext.setHosts to restrict context by real interface.
+ + Added MBeans for session managers
+ + Improved SocketChannelListener contributed.
+ + Added version to HttpServerMBean.
+
+jetty-4.2.5 - 14 January 2003
+ + Fixed pathParam bug for ;jsessionid
+ + Don't process conditional headers and ranges for includes
+ + Added Log4jSink in the contrib directory.
+ + Fixed requestedSessionId null bug.
+
+jetty-4.2.4 - 04 January 2003
+ + Fixed stop/start handling of servlet context
+ + Reuse empty LogSink slots.
+ + HTAccessHandler checks realm as well as htpassword.
+ + Clear context listeners after stop.
+ + Clear context attributes after stop.
+ + Use requestedSessionId as default session ID.
+ + Added MBeans for handlers
+ + Upgraded jasper to 4.1.18
+
+jetty-4.2.4rc0 - 12 December 2002
+ + Simplified ThreadedServer
+ + Use ThreadLocals for ByteArrayPool to avoid synchronization.
+ + Use Version to reset HttpFields
+ + Cheap clear for HttpFields
+ + Fixed setBufferSize NPE.
+ + Cleaned up some unused listener throws.
+ + Handle chunked form data.
+ + Allow empty host header.
+ + Avoid optional 100 continues.
+ + Limit form content size.
+ + Handle = in param values.
+ + Added HttpContext.flushCache
+ + Configurable root context.
+ + RootNotFoundHandler to help when no context found.
+ + Update jasper to 4.1.16beta
+ + Fixed dir listing from jars.
+ + Dir listings in UTF8
+ + Character encoding handling for GET requests.
+ + Removed container transfer encoding handling.
+ + Improved setBufferSize handling
+ + Code logs objects rather than strings.
+ + Better access to session manager.
+ + Fixed isSecure and getScheme for SSL over AJP13
+ + Improved ProxyHandler to the point is works well for non SSL.
+ + Implemented RFC2817 CONNECT in ProxyHandler
+ + Added gzip content encoding support to Default and ResourceHandler
+
+jetty-4.2.3 - 02 December 2002
+ + Removed aggressive threadpool shrinkage to avoid deadlock on SMP machines.
+ + Fixed some typos
+ + Added links to Jetty Powered page
+ + Clean up of ThreadedServer.stop()
+ + Updated bat scripts
+ + Added PKCS12Import class to import PKCS12 key directly
+ + removed old HttpContext.setDirAllowed()
+ + added main() to org.mortbay.http.Version
+ + Check form authentication config for leading /
+ + Cleaner servlet stop to avoid extra synchronization on handle
+ + org.mortbay.http.HttpContext.FileClassPathAttribute
+
+jetty-4.2.2 - 20 November 2002
+ + Fixed sendRedirect for non http URLS
+ + Fixed URI query recycling for persistent connections
+ + Fixed handling of empty headers
+ + Added EOFException to reduce log verbosity on closed connections.
+ + Avoided bad buffer status after closed connection.
+
+jetty-4.2.1 - 18 November 2002
+ + Fixed bad optimization in UrlEncoding
+ + Re-enabled UrlEncoding test harnesses
+
+jetty-4.2.0 - 16 November 2002
+ + Fixed AJP13 buffer size.
+ + Fixed remove listener bug.
+ + Fixed include of Invoker servlet.
+ + Restrict 304 responses to seconds time resolution.
+ + Use IE date formatting for speed.
+ + Removed jasper source and just include jars from 4.1.12
+ + Worked around JVM1.3 bug for JSPs
+ + Lowercase jsessionid for URLs only.
+ + Made NCSARequestLog easier to extend.
+ + Added definitions for RFC2518 WebDav response codes.
+ + Removed remaining non portable getBytes() calls
+ + Added upload demo to dump servlet.
+ + Many more optimizations.
+
+jetty-4.1.4 - 16 November 2002
+ + Fixed ContextLoader parent delegation bug
+ + Fixed remove SocketListener bug.
+ + Fixed Invoker servlet for RD.include
+ + Use IE date formatting for last-modified efficiency
+ + Last modified handling uses second resolution.
+ + Made NCSARequestLog simpler to extend.
+
+jetty-4.2.0rc1 - 02 November 2002
+ + Support default mime mapping defined by *
+ + Recycling of HttpFields class.
+ + Renamed Filter application methods.
+ + Fixed firstWrite after commit.
+ + Fixed ContextLoader parent delegation bug.
+ + Fixed problem setting the size of chunked buffers.
+ + Removed unused Servlet and Servlet-Engine headers.
+ + Fixed servletpath on invoker for named servlets.
+ + Fixed directory resource bug in JarFileResource.
+ + Improved handling of 2 byte encoded characters within forms.
+
+jetty-4.2.0rc0 - 24 October 2002
+ + Greg's birthday release!
+ + Added embedded iso8859 writer to HttpOutputStream.
+ + Removed duplicate classes from jar
+ + Fixed RolloverFileOutputStream without date.
+ + Fixed SessionManager initialization
+ + Added authenticator to admin.xml
+ + Fixed Session timeout NPE.
+
+jetty-4.1.3 - 24 October 2002
+ + Fixed RolloverFileOutputStream without date.
+ + Fixed SessionManager initialization
+ + Added authenticator to admin.xml
+ + Fixed Session timeout NPE.
+
+jetty-4.0.6 - 24 October 2002
+ + Clear interrupted status in ThreadPool
+ + Fixed forward query string handling
+ + fixed forward attribute handling for jsp-file servlets
+ + Fixed setCharacterEncoding to work with getReader
+ + Fixed handling of relative sendRedirect after forward.
+ + Fixed virtual hosts temp directories.
+
+jetty-4.2.0beta0 - 13 October 2002
+ + New ThreadPool implementation.
+ + New Buffering implementation.
+ + New AJP13 implementation.
+ + Removed Dispatcher dependancy on ServletHttpContext
+ + getNamedDispatcher(null) returns containers default servlet.
+ + unquote charset in content type
+ + Stop/Start filters in declaration order.
+ + Use "standard" names for default,jsp & invoker servlets.
+ + Fixed caching of directories to avoid shared buffers.
+ + Fixed bad log dir detection
+ + Fix Session invalidation bug
+ + Build without jmx
+ + 404 instead of 403 for WEB-INF requests
+ + FORM authentication sets 403 error page
+ + Allow %3B encoded ; in URLs
+ + Allow anonymous realm
+ + Update jasper to 4.1.12 tag
+
+jetty-4.1.2 - 13 October 2002
+ + Some AJP13 optimizations.
+ + getNamedDispatcher(null) returns containers default servlet.
+ + unquote charset in content type
+ + Stop/Start filters in declaration order.
+ + Use "standard" names for default,jsp & invoker servlets.
+ + Fixed caching of directories to avoid shared buffers.
+ + Fixed bad log dir detection
+ + Fix Session invalidation bug
+ + Build without jmx
+ + 404 instead of 403 for WEB-INF requests
+ + FORM authentication sets 403 error page
+ + Allow %3B encoded ; in URLs
+ + Allow anonymous realm
+ + Update jasper to 4.1.12 tag
+
+jetty-4.1.1 - 30 September 2002
+ + Fixed client scripting vulnerability with jasper2.
+ + Merged LimitedNCSARequestLog into NCSARequestLog
+ + Fixed space in resource name handling for jdk1.4
+ + Moved launcher/src to src/org/mortbay/start
+ + Fixed infinite recursion in JDBCUserRealm
+ + Avoid setting sotimeout for optimization.
+ + String comparison of If-Modified-Since headers.
+ + Touch files when expanding jars
+ + Deprecated maxReadTime.
+ + Cache directory listings.
+
+jetty-4.1.0 - 22 September 2002
+ + Fixed CGI+windows security hole.
+ + Fixed AJP13 handling of mod_jk loadbalancing.
+ + Stop servlets in opposite order to start.
+ + NCSARequest log buffered default
+ + WEB-INF/classes before WEB-INF/lib
+ + Sorted directory listings.
+ + Handle unremovable tempdir.
+ + Context Initparams to control session cookie domain, path and age.
+ + ClientCertAuthenticator protected from null subjectDN
+ + Added LimitedNCSARequestLog
+ + Use javac -target 1.2 for normal classes
+
+jetty-4.1.0RC6 - 14 September 2002
+ + Don't URL encode FileURLS.
+ + Improved HashUserRealm doco
+ + FormAuthenticator uses normal redirections now.
+ + Encode URLs of Authentication redirections.
+ + Added logon.jsp for no cookie form authentication.
+ + Extended Session API to pass request for jvmRoute handling
+ + Fixed problem with AJP 304 responses.
+ + Improved look and feel of demo
+ + Cleaned up old debug.
+ + Added redirect to welcome file option.
+
+jetty-4.1.0RC5 - 08 September 2002
+ + AJP13Listener caught up with HttpConnection changes.
+ + Added commandPrefix init param to CGI
+ + More cleanup in ThreadPool for idle death.
+ + Improved errors for misconfigured realms.
+ + Implemented security-role-ref for isUserInRole.
+
+jetty-4.1.0RC4 - 30 August 2002
+ + Included IbmJsseListener in the contrib directory.
+ + Updated jasper2 to 4.1.10 tag.
+ + Reverted to 302 for all redirections as all clients do not understand 303
+ + Created statsLock sync objects to avoid deadlock when stopping.
+
+jetty-4.1.0RC3 - 28 August 2002
+ + Fixed security problem for suffix matching with trailing "/"
+ + addWebApplications encodes paths to allow for spaces in file names.
+ + Improved handling of PUT,DELETE & MOVE.
+ + Improved handling of path encoding in Resources for bad JVMs
+ + Added buffering to request log
+ + Created and integrated the Jetty Launcher
+ + Made Resource canonicalize it's base path for directories
+ + Allow WebApplicationHandler to be used with other handlers.
+ + Added defaults descriptor to addWebApplications.
+ + Allow FORM auth pages to be within security constraint.
+
+jetty-4.1.0RC2 - 20 August 2002
+ + Conveninace setClassLoaderJava2Compliant method.
+ + Clear interrupted status in ThreadPool
+ + Fixed HttpFields cache overflow
+ + Improved ByteArrayPool to handle multiple sizes.
+ + Added HttpListener.bufferReserve
+ + Use system line separator for log files.
+ + Updated to Jasper2 (4_1_9 tag)
+ + Build ant, src and zip versions with the release
+
+jetty-4.1.0RC1 - 11 August 2002
+ + Fixed forward query string handling
+ + Fixed setCharacterEncoding to work with getReader
+ + Fixed getContext to use canonical contextPathSpec
+ + Improved the return codes for PUT
+ + Made HttpServer serializable
+ + Updated international URI doco
+ + Updated jasper to CVS snapshot 200208011920
+ + Fixed forward to jsp-file servlet
+ + Fixed handling of relative sendRedirect after forward.
+
+jetty-4.1.0RC0 - 31 July 2002
+ + Fixed getRealPath for packed war files.
+ + Changed URI default charset back to ISO_8859_1
+ + Restructured Password into Password and Credentials
+ + Added DigestAuthenticator
+ + Added link to a Jetty page in Korean.
+ + Added ExpiryHandler which can set a default Expires header.
+
+jetty-4.0.5 - 31 July 2002
+ + Fixed getRealPath for packed war files.
+ + Reversed order of ServletContextListener.contextDestroyed calls
+ + Fixed getRequestURI for RD.forward to return new URI.
+
+jetty-4.1.B1 - 19 July 2002
+ + Updated mini.http.jar target
+ + CGI Servlet, pass all HTTP headers through.
+ + CGI Servlet, catch and report program invocation failure status.
+ + CGI Servlet, fixed suffix mapping problem.
+ + CGI Servlet, set working directory for exec
+ + Support HTTP/0.9 requests again
+ + Reversed order of ServletContextListener.contextDestroyed calls
+ + Moved dynamic servlet handling to Invoker servlet.
+ + Moved webapp resource handling to Default servlet.
+ + Sessions create attribute map lazily.
+ + Added PUT,DELETE,MOVE support to webapps.
+ + Added 2.4 Filter dispatching support.
+
+jetty-3.1.9 - 15 July 2002
+ + Allow doHead requests to be forwarded.
+ + Fixed race in ThreadPool for minThreads <= CPUs
+
+jetty-4.1.B0 - 13 July 2002
+ + Added work around of JDK1.4 bug with NIO listener
+ + Moved 3rd party jars to $JETTY_HOME/ext
+ + Fixed ThreadPool bug when minThreads <= CPUs
+ + close rather than disable stream after forward
+ + Allow filter init to access servlet context methods.
+ + Keep notFoundContext out of context mapping lists.
+ + mod_jk FAQ
+ + Fixed close problem with load balancer.
+ + Stopped RD.includes closing response.
+ + RD.forward changes getRequestURI.
+ + NCSARequestLog can log to stderr
+
+jetty-4.1.D2 - 24 June 2002
+ + Support trusted external authenticators.
+ + Moved jmx classes from JettyExtra to here.
+ + Set contextloader during webapplicationcontext.start
+ + Added AJP13 listener for apache integration.
+ + Fixed ChunkableOutputStream close propagation
+ + Better recycling of HttpRequests.
+ + Protect session.getAttributeNames from concurrent modifications.
+ + Allow comma separated cookies and headers
+ + Back out Don't chunk 30x empty responses.
+ + Conditional header tested against welcome file not directory.
+ + Improved ThreadedServer stopping on bad networks
+ + Use ThreadLocals to avoid unwrapping in Dispatcher.
+
+jetty-4.0.4 - 23 June 2002
+ + Back out change: Don't chunk 30x empty responses.
+ + Conditional header tested against welcome file not directory.
+ + Improved ThreadedServer stopping on bad networks
+
+jetty-4.0.3 - 20 June 2002
+ + WebapplicationContext.start sets context loader
+ + Fixed close propagation of on-chunked output streams
+ + Force security disassociation.
+ + Better recycling of HttpRequests.
+ + Protect session.getAttributeNames from concurrent modifications.
+ + Allow session manager to be initialized when set.
+ + Fixed japanese locale
+ + Allow comma separated cookies and headers
+
+jetty-4.1.D1 - 08 June 2002
+ + Recycle servlet requests and responses
+ + Added simple buffer pool.
+ + Reworked output buffering to keep constant sized buffers.
+ + Don't chunk 30x empty responses.
+ + Fixed "" contextPaths in Dispatcher.
+ + Removed race for the starting of session scavaging
+ + Fixed /foo/../bar// bug in canonical path.
+ + Merged ResourceBase and SecurityBase into HttpContext
+
+jetty-4.0.2 - 06 June 2002
+ + Fixed web.dtd references.
+ + Fixed handler/context start order.
+ + Added OptimizeIt plug
+ + Fixed /foo/../bar// bug in canonical path.
+ + Don't chunk 30x empty responses.
+ + Fixed "" contextPaths in Dispatcher.
+ + Removed race for the starting of session scavaging
+
+jetty-3.1.8 - 06 June 2002
+ + Made SecurityConstraint.addRole() require authentication.
+ + Fixed singled threaded dynamic servlets
+ + Fixed no slash context redirection.
+ + Fixed /foo/../bar// bug in canonical path.
+
+jetty-4.1.D0 - 05 June 2002
+ + The 4.1 Series started looking for even more performance within the 2.3
+   specification.
+ + Removed the HttpMessage facade mechanism
+ + BRAND NEW WebApplicationHandler & WebApplicationContext
+ + Added TypeUtil to reduce Integer creation.
+ + General clean up of the API for for MBean getters/setters.
+ + Experimental CLIENT-CERT Authenticator
+ + Restructured ResourceHandler into ResourceBase
+ + Fixed web.dtd references.
+ + Fixed handler/context start order.
+ + Added OptimizeIt plug.
+
+jetty-4.0.1 - 22 May 2002
+ + Fixed contextclassloader on ServletContextEvents.
+ + Support graceful stopping of context and server.
+ + Fixed "null" return from getRealPath
+ + OutputStreamLogSink config improvements
+ + Updated jasper to 16 May snapshot
+
+jetty-4.0.1RC2 - 14 May 2002
+ + Better error for jre1.3 with 1.4 classes
+ + Cleaned up RD query string regeneration.
+ + 3DES Keylength was being reported as 0. Now reports 168 bits.
+ + Implemented the run-as servlet tag.
+ + Added confidential and integral redirections to HttpListener
+ + Fixed ServletResponse.reset() to resetBuffer.
+
+jetty-4.0.1RC1 - 29 April 2002
+ + Improved flushing of chunked responses
+ + Better handling if no realm configured.
+ + Expand ByteBuffer full limit with capacity.
+ + Fixed double filtering of welcome files.
+ + Fixed FORM authentication auth of login page bug.
+ + Fixed setTempDirectory creation bug
+ + Avoid flushes during RequestDispatcher.includes
+
+jetty-4.0.1RC0 - 18 April 2002
+ + Updated Jasper to CVS snapshot from Apr 18 18:50:59 BST 2002
+ + Pass pathParams via welcome file forward for jsessionid
+ + Extended facade interfaces to HttpResponse.sendError
+ + Moved basic auth handling to HttpRequest
+ + AbstractSessionManager sets contextClassLoader for scavanging
+ + Set thread context classloader for webapp load-on-startup inits
+ + Added extract arg to addWebApplications
+ + Fixed delayed response bug: Stopped HttpConnection consuming input from
+   timedout connection.
+ + DTD allows static "Get" and "Set" methods to be invoked.
+
+jetty-4.0.0 - 22 March 2002
+ + Updated tutorial configure version
+ + Added IPAddressHandler for IP restrictions
+ + Updated contributors.
+ + Minor documentation updates.
+ + Jetty.sh cygwin support
+
+jetty-4.0.RC3 - 20 March 2002
+ + Fixed ZZZ offset format to +/-HHMM
+ + Updated history
+ + JDBCUserRealm instantiates JDBC driver
+ + ContextInitialized notified before load-on-startup servlets.
+ + Suppress WriterOutputStream warning.
+ + Changed html attribute order for mozilla quirk.
+
+jetty-4.0.RC2 - 12 March 2002
+ + Fixed security constraint problem with //
+ + Fixed version for String XmlConfigurations
+ + Fixed empty referrer in NCSA log.
+ + Dont try to extract directories
+ + Added experimental nio SocketChannelListener
+ + Added skeleton load balancer
+ + Fixed column name in JDBCUserRealm
+ + Remove last of the Class.forName calls.
+ + Removed redundant sessionID check.
+ + Security FAQ
+ + Disabled the Password EXEC mechanism by default
+
+jetty-3.1.7 - 12 March 2002
+ + Fixed security problem with constraints being bypassed with // in URLs
+
+jetty-4.0.RC1 - 06 March 2002
+ + Added ContentEncodingHandler for compression.
+ + Fixed filter vs forward bug.
+ + Improved efficiency of quality list handling
+ + Simplified filter API to chunkable streams
+ + XmlParser is validating by default. use o.m.x.XmlParser.NotValidating
+   property to change.
+ + contextDestroyed event sent before destruction.
+ + Minor changes to make HttpServer work on J2ME CVM
+ + Warn if jdk 1.4 classes used on JVM <1.4
+ + WebApplication will use ContextLoader even without WEB-INF directory.
+ + FileResource depends less on FilePermissions.
+ + Call response.flushBuffer after service to flush wrappers.
+ + Empty suffix for temp directory.
+ + Contributors list as an image to prevent SPAM!
+ + Fixed recursive DEBUG loop in Logging.
+ + Updated jetty.sh to always respect arguments.
+
+jetty-3.1.6 - 28 February 2002
+ + Implemented 2.3 clarifications to security constraint semantics PLEASE
+   REVIEW YOUR SECURITY CONSTRAINTS (see README).
+ + Empty suffix for temp directory.
+ + Fixed HttpFields remove bug
+ + Set Listeners default scheme
+ + LineInput can handle any sized marks
+ + HttpResponse.sendError makes a better attempt at finding an error page.
+ + Dispatcher.forward dispatches directly to ServletHolder to avoid premature
+   exception handling.
+
+jetty-4.0.B2 - 25 February 2002
+ + Minor Jasper updates
+ + Improve handling of unknown URL protocols.
+ + Improved default jetty.xml
+ + Adjust servlet facades for welcome redirection
+ + User / mapping rather than /* for servlet requests to static content
+ + Accept jetty-web.xml or web-jetty.xml in WEB-INF
+ + Added optional JDK 1.4 src tree
+ + o.m.u.Frame uses JDK1.4 stack frame handling
+ + Added LoggerLogSink to direct Jetty Logs to JDK1.4 Log.
+ + Start ServletHandler as part of the FilterHandler start.
+ + Simplified addWebApplication
+ + Added String constructor to XmlConfiguration.
+ + Added org.mortbay.http.JDBCUserRealm
+ + Init classloader for JspServlet
+ + Slightly more agressive eating unused input from non persistent connection.
+
+jetty-4.0.B1 - 13 February 2002
+ + WriterOutputStream so JSPs can include static resources.
+ + Suppress error only for IOExceptions not derivitives.
+ + HttpConnection always eats unused bodies
+ + Merged HttpMessage and Message
+ + LineInput waits for LF after CF if seen CRLF before.
+ + Added setClassLoader and moved getFileClassPath to HttpContext
+ + Updated examples webapp from tomcat
+ + getRequestURI returns encoded path
+ + Servlet request destined for static content returns paths as default servlet
+
+jetty-4.0.B0 - 04 February 2002
+ + Implemented 2.3 security constraint semantics PLEASE REVIEW YOUR SECURITY
+   CONSTRAINTS (see README).
+ + Stop and remove NotFound context for HttpServer
+ + HttpContext destroy
+ + Release process builds JettyExtra
+ + Welcome files may be relative
+ + Fixed HttpFields remove bug
+ + Added Array element to XMLConfiguration
+ + Allow listener schemes to be set.
+ + Added index links to tutorial
+ + Renamed getHttpServers and added setAnonymous
+ + Updated crimson to 1.1.3
+ + Added hack for compat tests in watchdog for old tomcat stuff
+ + Added AbstractSessionManager
+ + Support Random Session IDs in HashSessionManager.
+ + Common handling of TRACE
+ + Updated tutorial and FAQ
+ + Reduce object count and add hash width to StringMap
+ + Factor out RolloverFileOutputStream from OutputStreamLogSink
+ + Remove request logSink and replace with RequestLog using
+   RolloverFileOutputStream
+ + Handle special characters in resource file names better.
+ + Welcome file dispatch sets requestURI.
+ + Removed triggers from Code.
+
+jetty-4.0.D4 - 14 January 2002
+ + Prevent output after forward
+ + Handle ServletRequestWrappers for Generic Servlets
+ + Improved handling of UnavailableException
+ + Extract WAR files to standard temp directory
+ + URI uses UTF8 for % encodings.
+ + Added BlueRibbon campaign.
+ + RequestDispatcher uses cached resources for include
+ + Improved HttpResponsse.sendError error page matching.
+ + Fixed noaccess auth demo.
+ + FORM auth caches UserPrincipal
+ + Added isAuthenticated to UserPrincipal
+
+jetty-4.0.D3 - 31 December 2001
+ + Fixed cached filter wrapping.
+ + Fixed getLocale again
+ + Patch jasper to 20011229101000
+ + Removed limits on mark in LineInput.
+ + Corrected name to HTTP_REFERER in CGI Servlet.
+ + Fixed UrlEncoding for % + combination.
+ + Generalized temp file handling
+ + Fixed ContextLoader lib handling.
+ + DateCache handles misses better.
+ + HttpFields uses DateCache more.
+ + Moved admin port to 8081 to avoid JBuilder
+ + Made Frame members private and fixed test harness
+ + cookies with maxAge==0 expire on 1 jan 1970
+ + setCookie always has equals
+
+jetty-3.1.5 - 11 December 2001
+ + setCookie always has equals for cookie value
+ + cookies with maxage==0 expired 1 jan 1970
+ + Fixed formatting of redirectURLs for NS4.08
+ + Fixed ChunableInputStream.resetStream bug.
+ + Ignore IO errors when trying to persist connections.
+ + Allow POSTs to static resources.
+ + stopJob/killStop in ThreadPool to improve stopping ThreadedServer on some
+   platforms.
+ + Branched at Jetty_3_1
+
+jetty-4.0.D2 - 02 December 2001
+ + Removed most of the old doco, which needs to be rewritten and added again.
+ + Restructured for demo and test hierarchies
+ + Fixed formatting of redirect URLs.
+ + Removed ForwardHandler.
+ + Removed Demo.java (until updated).
+ + Made the root context a webapplication.
+ + Moved demo docroot/servlets to demo directory
+ + added addWebApplications auto discovery
+ + Disabled last forwarding by setPath()
+ + Removed Request set methods (will be replaced)
+ + New event model to decouple from beans container.
+ + Better handling of charset in form encoding.
+ + Allow POSTs to static resources.
+ + Fixed ChunableInputStream.resetStream bug.
+ + Ignore IO errors when trying to persist connections.
+ + stopJob/killStop in ThreadPool to improve stopping ThreadedServer on some
+   platforms.
+
+jetty-4.0.D1 - 14 November 2001
+ + Fixed ServletHandler with no servlets
+ + Fixed bug with request dispatcher parameters
+ + New ContextLoader implementation.
+ + New Dispatcher implementation
+ + Added Context and Session Event Handling
+ + Added FilterHolder
+ + Added FilterHandler
+ + Changed HandlerContext to HttpContext
+ + Simplified ServletHandler
+ + Removed destroy methods
+ + Simplified MultiMap
+
+jetty-4.0.D0 - 06 November 2001
+ + Branched from Jetty_3_1 == Jetty_3_1_4
+ + 2.3 Servlet API
+ + 1.2 JSP API
+ + Jasper from tomcat4
+ + Start SessionManager abstraction.
+ + Added examples webapp from tomcat4
+ + Branched at Jetty_3_1
+
+jetty-3.1.4 - 06 November 2001
+ + Added RequestLogFormat to allow extensible request logs.
+ + Support the ZZZ timezone offset format in DateCache
+ + HTAccessHandler made stricter on misconfiguration
+ + Generate session unbind events on a context.stop()
+ + Default PathMap separator changed to ":,"
+ + PathMap now ignores paths after ; or ? characters.
+ + Remove old stuff from contrib that had been moved to extra
+ + getRealPath accepts \ URI separator on platforms using \ file separator.
+
+jetty-3.1.3 - 26 October 2001
+ + Fix security problem with trailing special characters. Trailing %00 enabled
+   JSP source to be viewed or other servlets to be bypassed.
+ + Fixed several problems with external role authentication. Role
+   authentication in JBoss was not working correctly and there were possible
+   object leaks. The fix required an API change to UserPrinciple and UserRealm.
+ + Allow a per context UserRealm instance.
+ + Upgraded JSSE to 1.0.2
+ + Improved FORM auth handling of role failure.
+ + Improved Jasper debug output.
+ + Improved ThreadedServer timeout defaults
+ + Fixed binary files in CVS
+ + Fixed Virtual hosts to case insensitive.
+ + PathMap spec separator changed from ',' to ':'. May be set with
+   org.mortbay.http.PathMap.separators system property.
+ + Correct dispatch to error pages with javax attributes set.
+
+jetty-3.1.2 - 13 October 2001
+ + Fixed double entry on PathMap.getMatches
+ + Fixed servlet handling of non session url params.
+ + Fixed attr handling in XmlParser.toString
+ + Fixed request log date formatting
+ + Fixed NotFoundHandler handling of unknown methods
+ + Fixed FORM Authentication username.
+ + Fixed authentication role handling in FORM auth.
+ + FORM authentication passes query params.
+ + Added short delay to shutdown hook for JVM bug.
+ + Added ServletHandler.sessionCount()
+ + Added run target to ant
+ + Changed 304 responses for Opera browser.
+ + Changed JSESSIONID to jsessionid
+ + Log OK state after thread low warnings.
+ + Changed unsatisfiable range warnings to debug.
+ + Further improvements in handling of shutdown.
+
+jetty-3.1.1 - 27 September 2001
+ + Fixed jar manifest format - patched 28 Sep 2001
+ + Removed JDK 1.3 dependancy
+ + Fixed ServletRequest.getLocale().
+ + Removed incorrect warning for WEB-INF/lib jar files.
+ + Handle requestdispatcher during init.
+ + Use lowercase tags in html package to be XHTML-like.
+ + Correctly ignore auth-constraint descriptions.
+ + Reduced verbosity of bad URL errors from IIS virus attacks
+
+jetty-3.1.0 - 21 September 2001
+ + Added long overdue Tutorial documentation.
+ + Improved some other documentation.
+ + Fix ResourceHandler cache invalidate.
+ + Fix ServletResponse.setLocale()
+ + Fix reuse of Resource
+ + Fix Jetty.bat for spaces.
+ + Fix .. handling in URI
+ + Fix REFFERER in CGI
+ + Fix FORM authentication on exact patterns
+ + Fix flush on stop bug in logs.
+ + Fix param reading on CGI servlet
+ + New simplified jetty.bat
+ + Improved closing of listeners.
+ + Optimized List creation
+ + Removed win32 service.exe
+ + Added HandlerContext.registerHost
+
+jetty-3.1.rc9 - 02 September 2001
+ + Added bin/orgPackage.sh script to change package names.
+ + Changed to org.mortbay domain names.
+ + Form auth login and error pages relative to context path.
+ + Fixed handling of rel form authentication URLs
+ + Added support for Nonblocking listener.
+ + Added lowResourcePersistTimeMs for more graceful degradation when we run out
+   of threads.
+ + Patched Jasper to 3.2.3.
+ + Added handlerContext.setClassPaths
+ + Fixed bug with non cookie sessions.
+ + Format cookies in HttpFields.
+
+jetty-3.1.rc8 - 22 August 2001
+ + Support WEB-INF/web-jetty.xml configuration extension for webapps
+ + Allow per context log files.
+ + Updated sponsors page
+ + Added HttpServer statistics
+ + Don't add notfound context.
+ + Many major and minor optimizations:
+ + ISO8859 conversion
+ + Buffer allocation
+ + URI pathAdd
+ + StringMap
+ + URI canonicalPath
+ + OutputStreamLogSink replaces WriterLogSink
+ + Separation of URL params in HttpHandler API.
+ + Fixed handling of default mime types
+ + Allow contextpaths without leading /
+ + Removed race from dynamic servlet initialization.
+
+jetty-3.1.rc7 - 09 August 2001
+ + Fix bug in sendRedirect for HTTP/1.1
+ + Added doco for Linux port redirection.
+ + Don't persist connections if low on threads.
+ + Added shutdown hooks to Jetty.Server to trap Ctl-C
+ + Fixed bug with session ID generation.
+ + Added FORM authentication.
+ + Remove old context path specs
+ + Added UML diagrams to Jetty architecture documentation.
+ + Use Enumerations to reduce conversions for servlet API.
+ + Optimized HttpField handling to reduce object creatiyon.
+ + ServletRequest SSL attributes in line with 2.2 and 2.3 specs.
+ + Dump Servlet displays cert chains
+ + Fixed redirect handling by the CGI Servlet.
+ + Fixed request.getPort for redirections from 80
+ + Added utility methods to ServletHandler for wrapping req/res pairs.
+ + Added method handling to HTAccessHandler.
+ + ServletResponse.sendRedirect puts URLs into absolute format.
+
+jetty-3.1.rc6 - 10 July 2001
+ + Avoid script vulnerability in error pages.
+ + Close persistent HTTP/1.0 connections on missing Content-Length
+ + Use exec for jetty.sh run
+ + Improved SSL debugging information.
+ + KeyPairTool can now load cert chains.
+ + KeyPairTool is more robust to provider setup.
+ + Fixed bug in B64Code. Optimised B64Code.
+ + Added Client authentication to the JsseListener
+ + Fixed a problem with Netscape and the acrobat plugin.
+ + Improved debug output for IOExceptions.
+ + Updated to JSSE-1.0.2, giving full strength crypto.
+ + Win32 Service uses Jetty.Server instead of HttpServer.
+ + Added getResource to HandleContext.
+ + WebApps initialize resourceBase before start.
+ + Fixed XmlParser to handle xerces1.3 OK
+ + Added Get element to the XmlConfiguration class.
+ + Added Static calls to the XmlConfiguration class.
+ + Added debug and logging config example to demo.xml
+ + Moved mime types and encodings to property bundles.
+ + RequestDispatch.forward() uses normal HandlerContext.handle() path if
+   possible.
+ + Cleaned up destroy handling of listeners and contexts.
+ + Removed getConfiguration from LifeCycleThread to avoid JMX clash.
+ + Cleaned up Win32 Service server creation.
+ + Moved gimp image files to Jetty3Extra
+
+jetty-3.1.rc5 - 01 May 2001
+ + Added build target for mini.jetty.jar - see README.
+ + Major restructing of packages to separate servlet dependancies. c.m.XML  -
+   moved XML dependant classes from c.m.Util c.m.HTTP - No servlet or XML
+   dependant classes: c.m.Jetty.Servlet - moved from c.m.HTTP.Handler.Servlet
+   c.m.Servlet - received some servlet dependant classes from HTTP.
+ + Added UnixCrypt support to c.m.U.Password
+ + Added HTaccessHandler to authenitcate against apache .htaccess files.
+ + Added query param handling to ForwardHandler
+ + Added ServletHandler().setUsingCookies().
+ + Optimized canonical path calculations.
+ + Warn and close connections if content-length is incorrectly set.
+ + Request log contains bytes actually returned.
+ + Fixed handling of empty responses at header commit.
+ + Fixed ResourceHandler handling of ;JSESSIONID
+ + Fixed forwarding to null pathInfo requests.
+ + Fixed handling of multiple cookies.
+ + Fixed EOF handling in MultiPartRequest.
+ + Fixed sync of ThreadPool idleSet.
+ + Fixed jetty.bat classpath problems.
+
+jetty-3.0.6 - 26 April 2001
+ + Fixed handling of empty responses at header commit.
+ + Fixed ResourceHandler handling of ;JSESSIONID
+ + Fixed forwarding to null pathInfo requests.
+ + Fixed EOF handlding in MultiPartRequest.
+ + Fixed sync of ThreadPool idleSet.
+ + Load-on-startup the JspServlet so that precompiled servlets work.
+
+jetty-3.1.rc4 - 14 April 2001
+ + Include full versions of JAXP and Crimson
+ + Added idle thread getter to ThreadPool.
+ + Load-on-startup the JspServlet so that precompiled servlets work.
+ + Removed stray debug println from the Frame class.
+
+jetty-3.0.5 - 14 April 2001
+ + Branched from 3.1 trunk to fix major errors
+ + Fixed LineInput bug EOF
+ + Improved flush ordering for forwarded requests.
+ + Turned off range handling by default until bugs resolved
+ + Don't chunk if content length is known.
+ + fixed getLocales handling of quality params
+ + Created better random session ID
+ + Resource handler strips URL params like JSESSION.
+ + Fixed session invalidation unbind notification to conform with spec
+ + Load-on-startup the JspServlet so that precompiled servlets work.
+
+jetty-3.1.rc3 - 09 April 2001
+ + Implemented multi-part ranges so that acrobat is happy.
+ + Simplified multipart response class.
+ + Improved flush ordering for forwarded requests.
+ + Improved ThreadPool stop handling
+ + Frame handles more JIT stacks.
+ + Cleaned up handling of exceptions thrown by servlets.
+ + Handle zero length POSTs
+ + Start session scavenger if needed.
+ + Added ContentHandler Observer to XmlParser.
+ + Allow webapp XmlParser to be observed for ejb-ref tags etc.
+ + Created better random session ID
+
+jetty-3.1.rc2 - 30 March 2001
+ + Lifecycle.start() may throw Exception
+ + Added MultiException to throw multiple nested exceptions.
+ + Improved logging of nested exceptions.
+ + Only one instance of default MIME map.
+ + Use reference JAXP1.1 for XML parsing.y
+ + Version 1.1 of configuration dtd supports New objects.
+ + Improved handling of Primitive classes in XmlConfig
+ + Renamed getConnection to getHttpConnection
+ + fixed getLocales handling of quality params
+ + fixed getParameter(name) handling for multiple values.
+ + added options to turn off ranges and chunking to support acrobat requests.
+
+jetty-3.1.rc1 - 18 March 2001
+ + Moved JMX and SASL handling to Jetty3Extra release
+ + Fixed problem with ServletContext.getContext(uri)
+ + Added Jetty documentation pages from JettyWiki
+ + Cleaned up build.xml script
+ + Minimal handling of Servlet.log before initialization.
+ + Various SSL cleanups
+ + Resource handler strips URL params like JSESSION.
+
+jetty-3.1.rc0 - 23 February 2001
+ + Added JMX management framework.
+ + Use Thread context classloader as default context loader parent.
+ + Fixed init order for unnamed servlets.
+ + Fixed session invalidation unbind notification to conform with spec
+ + Improved handling of primitives in utilities.
+ + Socket made available via HttpConnection.
+ + Improved InetAddrPort and ThreadedServer to reduce DNS lookups.
+ + Dynamic servlets may be restricted to Context classloader.
+ + Reoganized packages to allowed sealed Jars
+ + Changed getter and setter methods that did not conform to beans API.
+
+jetty-3.0.4 - 23 February 2001
+ + Fixed LineInput bug with split CRLF.
+
+jetty-3.0.3 - 03 February 2001
+ + Fixed pipelined request buffer bug.
+ + Handle empty form content without exception.
+ + Allow Log to be disabled before initialization.
+ + Included new Jetty Logo
+ + Implemented web.xml servlet mapping to a JSP
+ + Fixed handling of directories without trailing /
+
+jetty-3.0.2 - 13 January 2001
+ + Replaced ResourceHandler FIFO cache with LRU cache.
+ + Greatly improved buffering in ChunkableOutputStream
+ + Padded error bodies for IE bug.
+ + Improved HTML.Block efficiency
+ + Improved jetty.bat
+ + Improved jetty.sh
+ + Handle unknown status reasons in HttpResponse
+ + Ignore included response updates rather than IllegalStateException
+ + Removed classloading stats which were causing circular class loading
+   problems.
+ + Allow '+' in path portion of a URL.
+ + Try ISO8859_1 encoding if can't find ISO-8859-1
+ + Restructured demo site pages.
+ + Context specific security permissions.
+ + Added etc/jetty.policy as example policy file.
+
+jetty-3.0.1 - 20 December 2000
+ + Fixed value unbind notification for session invalidation.
+ + Removed double null check possibility from ServletHolder
+
+jetty-3.0.0 - 17 December 2000
+ + Improved jetty.sh logging
+ + Improved dtd resolution in XML parser.
+ + Fixed taglib parsing
+ + Fixed rel path handling in default configurations.
+ + Optional extract war files.
+ + Fixed WriterLogSink init bug
+ + Use inner class to avoid double null check sync problems
+ + Fixed rollover bug in WriterLogSink
+
+jetty-3.0.0.rc8 - 13 December 2000
+ + Optional alias checking added to FileResource.  Turned on by default on all
+   platforms without the "/" file separator.
+ + Mapped *.jsp,*.jsP,*.jSp,*.jSP,*.Jsp,*.JsP,*.JSp,*.JSP
+ + Tidied handling of ".", ".." and "//" in resource paths
+ + Protected META-INF as well as WEB-INF in web applications.
+ + Jetty.Server catches init exceptions per server
+ + getSecurityHandler creates handler at position 0.
+ + SysV unix init script
+ + Improved exit admin handling
+ + Change PathMap handling of /* to give precedence over suffix mapping.
+ + Forward to welcome pages rather than redirect.
+ + Removed special characters from source.
+ + Default log options changed if in debug mode.
+ + Removed some unused variables.
+ + Added ForwardHandler
+ + Removed security constraint on demo admin server.
+ + Patched jasper to tomcat 3.2.1
+
+jetty-3.0.0.rc7 - 02 December 2000
+ + Fixed security problem with lowercase WEB-INF uris on windows.
+ + Extended security constraints (see README and WebApp Demo).
+ + Set thread context classloader during handler start/stop calls.
+ + Don't set MIME-Version in response.
+ + Allow dynamic servlets to be served from /
+ + Handle multiple inits of same servlet class.
+ + Auto add a NotFoundHandler if needed.
+ + Added NotFoundServlet
+ + Added range handling to ResourceHandler.
+ + CGI servlet handles not found better.
+ + WEB-INF protected by NotFoundServlet rather than security constraint.
+ + PUT, MOVE disabled in WebApplication unless defaults file is passed.
+ + Conditionals apply to puts, dels and moves in ResourceHandler.
+ + URIs accept all characters < 0xff.
+ + Set the AcceptRanges header.
+ + Depreciated RollOverLogSink and moved functionality to an improved
+   WriterLogSink.
+ + Changed log options to less verbose defaults.
+ + ThreadedServer.forceStop() now makes a connection to itself to handle
+   non-premptive close.
+ + Double null lock checks use ThreadPool.__nullLockChecks.
+ + Split Debug servlet out of Admin Servlet.
+ + Added Com.mortbay.HTTP.Handler.Servlet.Context.LogSink attribute to Servlet
+   Context. If set, it is used in preference to the system log.
+
+jetty-3.0.0.rc6 - 20 November 2000
+ + RequestDispatcher.forward() only resets buffer, not headers.
+ + Added ServletWriter that can be disabled.
+ + Resource gets systemresources from it's own classloader.
+ + don't include classes in release.
+ + Allow load-on-startup with no content.
+ + Fixed RollOverFileLogSink bug with extra log files.
+ + Improved Log defaults
+ + Don't start HttpServer log sink on add.
+ + Admin servlet uses unique links for IE.
+ + Added Win32 service support
+ + Reduced risk of double null check sync problem.
+ + Don't set connection:close for normal HTTP/1.0 responses.
+ + RequestDispatcher new queries params replace old.
+ + Servlet init order may be negative.
+ + Corrected a few of the many spelling mistakes.
+ + Javadoc improvements.
+ + Webapps serve dynamics servlets by default.
+ + Warn for missing WEB-INF or web.xml
+ + Sessions try version 1 cookies in set-cookie2 header.
+ + Session cookies are given context path
+ + Put extra server and servlet info in header.
+ + Version details in header can be suppressed with System property
+   java.com.mortbay.HTTP.Version.paranoid
+ + Prevent reloading dynamic servlets at different paths.
+ + Implemented resource aliases in HandlerContext - used by Servlet Context
+ + Map tablib configuration to resource aliases.
+ + Implemented customizable error pages.
+ + Simple stats in ContextLoader.
+ + Allow HttpMessage state to be manipulated.
+ + Allow multiple set cookies.
+
+jetty-3.0.0.rc5 - 12 November 2000
+ + Default writer encoding set by mime type if not explicitly set.
+ + Relax webapp rules, accept no web.xml or no WEB-INF
+ + Pass flush through ServletOut
+ + Avoid jprobe race warnings in DateCache
+ + Allow null cookie values
+ + Servlet exceptions cause 503 unavailable rather than 500 server error
+ + RequestDispatcher can dispatch static resources.
+ + Merged DynamicHandler into ServletHandler.
+ + Added debug form to Admin servlet.
+ + Implemented servlet load ordering.
+ + Moved JSP classpath hack to ServletHolder
+ + Removed Makefile build system.
+ + Many javadoc cleanups.
+
+jetty-2.4.9 - 12 November 2000
+ + HttpListener ignore InterruptedIOExceptions
+ + HttpListener default max idle time = 20s
+ + HtmlFilter handles non default encodings
+ + Writing HttpRequests encodes path
+ + HttpRequest.write uses ISO8859_1 encoding.
+
+jetty-3.0.0.rc4 - 06 November 2000
+ + Provide default JettyIndex.properties
+ + Fixed mis-synchronization in ThreadPool.stop()
+ + Fixed mime type mapping bug introduced in RC3
+ + Ignore more IOExceptions (still visible with debug).
+
+jetty-3.0.0.rc3 - 05 November 2000
+ + Changed ThreadPool.stop for IBM 1.3 JVM
+ + Added bin/jetty.sh run script.
+ + upgraded build.xml to ant v1.2
+ + Set MaxReadTimeMs in all examples
+ + Further clean up of the connection close actions
+ + Moved unused classes from com.mortbay.Util to com.mortbay.Tools in new
+   distribution package.
+ + Handle mime suffixes containing dots.
+ + Added gz tgz tar.gz .z mime mappings.
+ + Fixed default mimemap initialization bug
+ + Optimized persistent connections by recycling objects
+ + Added HandlerContext.setHttpServerAccess for trusted contexts.
+ + Set the thread context class loader in HandlerContext.handle
+ + Prevent servlet setAttribute calls to protected context attributes.
+ + Removed redundant context attributes.
+ + Implemented mime mapping in webapplications.
+ + Strip ./ from relative resources.
+ + Added context class path dynamic servlet demo
+
+jetty-3.0.0.rc2 - 29 October 2000
+ + Replaced ISO-8859-1 literals with StringUtil static
+ + Pass file based classpath to JspServlet (see README).
+ + Prevented multiple init of ServletHolder
+ + ErlEncoding treats params without values as empty rather than null.
+ + Accept public DTD for XmlConfiguration (old style still supported).
+ + Cleaned up non persistent connection close.
+ + Accept HTTP/1. as HTTP/1.0 (for netscape bug).
+ + Fixed thread name problem in ThreadPool
+
+jetty-3.0.0.rc1 - 22 October 2000
+ + Added simple admin servlet.
+ + Added CGI to demo
+ + Added HashUserRealm and cleaned up security constraints
+ + Added Multipart request and response classes from Jetty2
+ + Moved and simplified ServletLoader to ContextLoader.
+ + Initialize JSP with classloader.
+ + All attributes in javax. java. and com.mortbay. name spaces to be set.
+ + Partial handling of 0.9 requests.
+ + removed Thread.destroy() calls.
+ + Cleaned up exception handling.
+
+jetty-2.4.8 - 23 October 2000
+ + Fixed bug with 304 replies with bodies.
+ + Improved win32 make files.
+ + Fixed closing socket problem
+
+jetty-3.0.B05 - 18 October 2000
+ + Improved null returns to get almost clean watchdog test.
+ + Cleaned up response committing and flushing
+ + Handler RFC2109 cookies (like any browser handles them!)
+ + Added default webapp servlet mapping /servlet/name/*
+ + Improved path spec interpretation by looking at 2.3 spec
+ + Implemented security-role-ref for servlets
+ + Protected servletConfig from downcast security problems
+ + Made test harnesses work with ant.
+ + improved ant documentation.
+ + Removed most deprecation warnings
+ + Fixed JarFileResource to handle jar files without directories.
+ + Implemented war file support
+ + Java2 style classloading
+ + Improved default log format for clarity.
+ + Separated context attributes and initParams.
+
+jetty-3.0.B04 - 12 October 2000
+ + Restricted context mapping to simple model for servlets.
+ + Fixed problem with session ID in paths
+ + Added modified version of JasperB3.2 for JSP
+ + Moved FileBase to docroot
+ + Merged and renamed third party jars.
+ + Do not try multiple servlets for a request.
+ + Implemented Context.getContext(uri)
+ + Added webdefault.xml for web applications.
+ + Redirect to index files, so index.jsp works.
+ + Filthy hack to teach jasper JspServer Jetty classpath
+
+jetty-3.0.B03 - 09 October 2000
+ + Expanded import package.*; lines
+ + Expanded leading tabs to spaces
+ + Improved Context to Handler contract.
+ + Parse but not handler startup ordering in web applications.
+ + Send request log via a LogSink
+ + Added append mode in RolloverFileLogSink
+ + Made LogSink a Lifecycle interface
+ + Improved handler toString
+ + Redirect context only paths.
+ + Pass object to LogSink
+ + Implemented request dispatching.
+ + Redo dynamic servlets handling
+ + Improved Log rollover.
+ + Simplified path translation and real path calculation.
+ + Catch stop and destroy exceptions in HttpServer.stop()
+ + Handle ignorable spaces in XmlConfiguration
+ + Handle ignorable spaces in WebApplication
+ + Warn about explicit sets of WebApplication
+ + Remove 411 checks as IE breaks this rule after redirect.
+ + Removed last remnants JDK 1.1 support
+ + Added release script
+
+jetty-2.4.7 - 06 October 2000
+ + Allow Objects to be passed to LogSink
+ + Set content length on errors for keep alive.
+ + Added encode methods to URI
+ + Improved win32 build
+ + fixes to SSL doco
+ + Support key and keystore passwords
+ + Various improvements to  ServletDispatch, PropertyTree and associated
+   classes.
+
+jetty-3.0.B02 - 24 August 2000
+ + Fixed LineInput bug with SSL giving CR pause LF.
+ + Fixed HTTP/1.0 input close bug
+ + Fixed bug in TestRFC2616
+ + Improved ThreadedServer stop and destroy
+ + Use resources in WebApplication
+ + Added CGI servlet
+
+jetty-3.0.B01 - 21 August 2000
+ + SSL implemented with JsseListener
+ + Partial implementation of webapp securitycontraints
+ + Implemented more webapp configuration
+ + Switched to the aelfred XML parser from microstar, which is only partially
+   validating, but small and lightweight
+
+jetty-2.4.6 - 16 August 2000
+ + Turn Linger off before closing sockets, to allow restart.
+ + JsseListener & SunJsseListener added and documented
+ + com.mortbay.Util.KeyPairTool added to handle openSSL SSL keys.
+ + Minor changes to compile with jikes.
+ + Added passive mode methods to FTP
+
+jetty-3.0.A99 - 10 August 2000
+ + Implemented jetty.xml configuration
+ + Added Xmlconfiguration utility
+ + ServletLoader simplied and uses ResourcePath
+ + Replaced FileHandler with ResourceHandler
+ + Use SAX XML parsing instead of DOM for space saving.
+ + Removed FileBase. Now use ResourceBase instead
+ + Added Resource abstraction
+ + Make it compile cleanly with jikes.
+ + Re-added commented out imports for JDK-1.1 compile
+
+jetty-3.0.A98 - 20 July 2000
+ + Implemented Jetty demos and Site as Web Application.
+ + Implemented WebApplicationContext
+ + Switched to JDK1.2 only
+ + ServletRequest.getServerPort() returns 80 rather than 0
+ + Fixed constructor to RolloverFileLogSink
+ + Improved synchronization on LogSink
+ + Allow HttpRequest.toString() handles bad requests.
+
+jetty-3.0.A97 - 13 July 2000
+ + Tempory request log implementation
+ + Less verbose debug
+ + Better tuned SocketListener parameters
+ + Started RequestDispatcher implementation.
+ + Added WML mappings
+ + Fixed makefiles for BSD ls
+ + Fixed persistent commits with no content (eg redirect+keep-alive).
+ + Implemented servlet isSecure().
+ + Implemented servlet getLocale(s).
+ + Formatted version in server info string.
+ + Protect setContentLength from a late set in default servlet HEAD handling.
+ + Added error handling to LifeCycleThread
+ + implemented removeAttribute on requests
+
+jetty-2.4.5 - 09 July 2000
+ + Don't mark a session invalid until after values unbound.
+ + Formatted version in server info.
+ + Added HtmlExpireFilter and removed response cache revention from HtmlFilter.
+ + Fixed transaction handling in JDBC wrappers
+
+jetty-3.0.A96 - 27 June 2000
+ + Fixed bug with HTTP/1.1 Head reqests to servlets.
+ + Supressed un-needed chunking EOF indicators.
+
+jetty-3.0.A95 - 24 June 2000
+ + Fixed getServletPath for default "/"
+ + Handle spaces in file names in FileHandler.
+
+jetty-3.0.A94 - 19 June 2000
+ + Implemented Sessions.
+ + PathMap exact matches can terminate with ; or # for URL sessions and
+   targets.
+ + Added HandlerContext to allow grouping of handlers into units with the same
+   file, resource and class configurations.
+ + Cleaned up commit() and added complete() to HttpResponse
+ + Updated license to clarify that commercial usage IS OK!
+
+jetty-3.0.A93 - 14 June 2000
+ + Major rethink! Moved to 2.2 servlet API
+ + Lots of changes and probably unstable
+
+jetty-3.0.A92 - 07 June 2000
+ + Added HTML classes to jar
+ + Fixed redirection bug in FileHandler
+
+jetty-2.4.4 - 03 June 2000
+ + Many debug call optimizations
+ + Added RolloverFileLogSink
+ + Improved LogSink configuration
+ + Support System.property expansions in PropertyTrees.
+ + Added uk.org.gosnell.Servlets.CgiServlet to contrib
+ + HttpRequest.setRequestPath does not null pathInfo.
+ + BasicAuthHandler uses getResourcePath so it can be used behind request
+   dispatching
+ + Added HTML.Composite.replace
+ + FileHandler implements IfModifiedSince on index files.
+ + Added build-win32.mak
+
+jetty-3.0.A91 - 03 June 2000
+ + Improved LogSink mechanism
+ + Implemented realPath and getResource methods for servlets.
+ + Abstracted ServletHandler
+ + Simplified HttpServer configuration methods and arguments
+ + Simplified class loading
+ + Added HTML classes from Jetty2
+
+jetty-3.0.A9 - 07 May 2000
+ + Improvided finally handling of output end game.
+ + Fixed double chunking bug in SocketListener.
+ + File handler checks modified headers on directory indexes.
+ + ServletLoader tries unix then platform separator for zip separator.
+
+jetty-3.0.A8 - 04 May 2000
+ + Servlet2_1 class loading re-acrchitected. See README.
+ + Moved Sevlet2_1 handler to com.mortbay.Servlet2_1
+ + addCookie takes an int maxAge rather than a expires date.
+ + Added LogSink extensible log architecture.
+ + Code.ignore only outputs when debug is verbose.
+ + Added Tenlet class for reverse telnet.
+
+jetty-2.4.3 - 04 May 2000
+ + Pass Cookies with 0 max age to browser.
+ + Allow CRLF in UrlEncoded
+
+jetty-2.4.2 - 23 April 2000
+ + Added LogSink and FileLogSink classes to allow extensible Log handling.
+ + Handle nested RequestDispatcher includes.
+ + Modified GNUJSP to prevent close in nested requests.
+ + Added GNUJSP to JettyServer.prp file.
+
+jetty-3.0.A7 - 15 April 2000
+ + Include java 1.2 source hierarchy
+ + removed excess ';' from source
+ + fixed flush problem with chunked output for IE5
+ + Added InetGateway to help debug IE5 problems
+ + added removeValue method to MultiMap
+
+jetty-2.4.1 - 09 April 2000
+ + Removed debug println from ServletHolder.
+ + Set encoding before exception in FileHandler.
+ + Fixed bug in HtmlFilter for tags split between writes.
+
+jetty-3.0.A6 - 09 April 2000
+ + Integrated skeleton 2.1 Servlet container
+ + Improved portability of Frame and Debug.
+ + Dates forced to use US locale
+ + Removed Converter utilities and InetGateway.
+ + added bin/useJava2Collections to convert to JDK1.2
+
+jetty-2.4.0 - 24 March 2000
+ + Upgraded to gnujsp 1.0.0
+ + Added per servlet resourceBase configuration.
+ + Absolute URIs are returned by getRequestURI (if sent by browser).
+ + Improved parsing of stack trace in debug mode.
+ + Implemented full handling of cookie max age.
+ + Moved SetUID native code to contrib hierarchy
+ + Form parameters only decoded for POSTs
+ + RequestDispatcher handles URI parameters
+ + Fixed bug with RequestDispatcher.include()
+ + Fixed caste problem in UrlEncoded
+ + Fixed null pointer in ThreadedServer with stopAll
+ + Added VirtualHostHandler for virtual host handling
+ + Added doc directory with a small start
+
+jetty-2.3.5 - 25 January 2000
+ + Fixed nasty bug with HTTP/1.1 redirects.
+ + ProxyHandler sends content for POSTs etc.
+ + Force locale of date formats to US.
+ + Fixed expires bug in Cookies
+ + Added configuration option to turn off Keep-Alive in HTTP/1.0
+ + Allow configured servlets to be auto reloaded.
+ + Allow properties to be configured for dynamic servlets.
+ + Added contrib/com/kiwiconsulting/jetty JSSE SSL adaptor to release.
+
+jetty-2.3.4 - 18 January 2000
+ + include from linux rather than genunix for native builds
+ + Fixed IllegalStateException handling in DefaultExceptionHandler
+ + MethodTag.invoke() is now public.
+ + Improved HtmlFilter.activate header modifications.
+ + Cookie map keyed on domain as well as name and path.
+ + DictionaryConverter handles null values.
+ + URI decodes applies URL decoding to the path.
+ + Servlet properties allow objects to be stored.
+ + Fixed interaction with resourcePaths and proxy demo.
+
+jetty-3.0.A5 - 19 October 1999
+ + Use ISO8859_1 instead of UTF8 for headers etc.
+ + Use char array in UrlEncoded.decode
+ + Do our own URL string encoding with 8859-1
+ + Replaced LF wait in LineInput with state boolean.
+
+jetty-2.3.3 - 19 October 1999
+ + Replaced UTF8 encoding with ISO-8859-1 for headers.
+ + Use UrlEncoded for form parameters.
+ + Do our own URL encoding with ISO-8859-1
+ + HTTP.HTML.EmbedUrl uses contents encoding.
+
+jetty-2.3.2 - 17 October 1999
+ + Fixed getReader bug with HttpRequest.
+ + Updated UrlEncoded with Jetty3 version.
+
+jetty-3.0.A4 - 16 October 1999
+ + Request attributes
+ + Basic Authentication Handler.
+ + Added LF wait after CR to LineInput.
+ + UTF8 in UrlDecoded.decodeString.
+
+jetty-2.3.1 - 14 October 1999
+ + Force UTF8 for FTP commands
+ + Force UTF8 for HTML
+ + Changed demo servlets to use writers in preference to outputstreams
+ + NullHandler/Server default name.name.PROPERTIES to load
+   prefix/name.name.properties
+ + Use UTF8 in HTTP headers
+ + Added Oracle DB adapter
+ + Added assert with no message to Code
+ + ThreadedServer calls setSoTimeout(_maxThreadIdleMs) on accepted sockets.
+   Idle reads will timeout.
+ + Prevented thread churn on idle server.
+ + HTTP/1.0 Keep-Alive (about time!).
+ + Fixed GNUJSP 1.0 resource bug.
+
+jetty-3.0.A3 - 14 October 1999
+ + Added LifeCycle interface to Utils implemented by ThreadPool,
+   ThreadedServer, HttpListener & HttpHandler
+ + StartAll, stopAll and destroyAll methods added to HttpServer.
+ + MaxReadTimeMs added to ThreadedServer.
+ + Added service method to HttpConnection for specialization.
+
+jetty-3.0.A2 - 13 October 1999
+ + UTF8 handling on raw output stream.
+ + Reduced flushing on writing response.
+ + Fixed LineInput problem with repeated CRs
+ + Cleaned up Util TestHarness.
+ + Prevent entity content for responses 100-199,203,304
+ + Added cookie support and demo.
+ + HTTP/1.0 Keep-alive (about time!)
+ + Virtual Hosts.
+ + NotFound Handler
+ + OPTION * Handling.
+ + TRACE handling.
+ + HEAD handling.
+
+jetty-3.0.A1 - 12 October 1999
+ + LineInput uses own buffering and uses character encodings.
+ + Added MultiMap for common handling of multiple valued parameters.
+ + Added parameters to HttpRequest
+ + Quick port of FileHandler
+ + Setup demo pages.
+ + Added PathMap implementing mapping as defined in the 2.2 API specification
+   (ie. /exact, /prefix/*, *.extention & default ).
+ + Added HttpHandler interface with start/stop/destroy lifecycle
+ + Updated HttpListener is start/stop/destroy lifecycle.
+ + Implemented simple extension architecture in HttpServer.
+
+jetty-3.0.A0 - 09 October 1999
+ + Started fresh repository in CVS
+ + Moved com.mortbay.Base classes to com.mortbay.Util
+ + Cleanup of UrlEncoded, using 1.2 Collections.
+ + Cleanup of URI, using 1.2 Collections.
+ + Extended URI to handle absolute URLs
+ + Cleanup of LineInput, using 1.2 Collections.
+ + Moved HttpInput/OutputStream to ChunkableInput/OutputStream.
+ + Cleaned up chunking code to use LineInput and reduce buffering.
+ + Added support for transfer and content encoding filters.
+ + Added support for servlet 2.2 outbut buffer control.
+ + Generalized notification of outputStream events.
+ + Split HttpHeader into HttpFields and HttpMessage.
+ + HttpMessage supports chunked trailers.
+ + HttpMessage supports message states.
+ + Added generalized HTTP Connection.
+ + Cleanup of HttpRequest and decoupled from Servlet API
+ + Cleanup and abstraction of ThreadPool.
+ + ThreadedServer based on ThreadPool.
+ + Cleanup of HttpResponse and decoupled from Servlet API
+ + Created RFC2616 test harness.
+ + gzip and deflate request transfer encodings
+ + TE field coding and trailer handler
+ + HttpExceptions now produce error pages with specific detail of the
+   exception.
+
+jetty-2.3.0 - 05 October 1999
+ + Added SetUID class with native Unix call to set the effective User ID.
+ + FTP closes files after put/get.
+ + FTP uses InetAddress of command socket for data socket.
+
+jetty-2.3.0A - 22 September 1999
+ + Added GNUJSP 1.0 for the JSP 1.0 API.
+ + Use javax.servlet classes from JWSDK1.0
+ + Added "Powered by Jetty" button.
+ + ServerContext available to HtmlFilters via context param
+ + Made session IDs less predictable and removed race.
+ + Added BuildJetty.java file.
+ + Expanded tabs to spaces in source.
+
+jetty-2.2.8 - 15 September 1999
+ + Fixed bug in Element.attribute with empty string values.
+ + Made translation of getRequestURI() optional.
+ + Removed recursion from TranslationHandler
+ + Added disableLog() to turn off logging.
+ + Allow default table attributes to be overriden.
+ + Improved quoting in HTML element values
+
+jetty-2.2.7 - 09 September 1999
+ + Reverted semantics of getRequestURI() to return untranslated URI.
+ + Added GzipFilter for content encoding.
+ + Added default row, head and cell elements to Table.
+ + FileHandler passes POST request through if the file does not exist.
+
+jetty-2.2.6 - 05 September 1999
+ + New implementation of ThreadPool, avoids a thread leak problem.
+ + Fixed Cookie max age order of magnitude bug.
+ + Cookies always available from getCookies.
+ + Cookies parameter renamed to CookiesAsParameters
+ + HttpRequest.getSession() always returns a session as per the latest API
+   spec.
+ + Added destroy() method on all HttpHandlers.
+ + ServletHandler.destroy destroys all servlets.
+ + FileHandler does not server files ending in '/'
+ + Ignore duplicate single valued headers, rather than reply with bad request,
+   as IE4 breaks the rules.
+ + Allow the handling of getPathTranslated to be configured in ServletHandler.
+ + Removed JRUN options from ServletHandler configuration.
+ + Added ServletRunnerHandler to the contrib directories.
+ + Updated HTML package to better support CSS:
+ + cssClass, cssID and style methods added to element.
+ + SPAN added to Block
+ + media added to Style
+ + class StyleLink added.
+
+jetty-2.2.5 - 19 August 1999
+ + Fixed bug with closing connections in ThreadedServer
+ + Made start and stop non final in ThreadedServer
+ + Better default handling of ServletExceptions
+ + Always close connection after a bad request.
+ + Set Expires header in HtmlFilter.
+ + Don't override the cookie as parameter option.
+ + Limited growth in MultiPartResponse boundary.
+ + Improved error messages from Jetty.Server.
+ + Close loaded class files so Win32 can overwrite them before GC (what a silly
+   file system!).
+
+jetty-2.2.4 - 02 August 1999
+ + ThreadedServer can use subclasses of Thread.
+ + Better help on Jetty.Server
+ + HttpRequests may be passed to HttpFilter constructors.
+ + HtmlFilter blanks IfModifiedSince headers on construction
+ + Fixed bugs in HtmlFilter parser and added TestHarness.
+ + Improved cfg RCS script.
+
+jetty-2.2.3 - 27 July 1999
+ + Fixed parser bug in HtmlFilter
+ + Made setInitialize public in ServletHolder
+ + Improved performance of com.mortbay.HTML.Heading
+ + Added stop call to HttpServer, used by Exit Servlet.
+ + Simplified JDBC connection handling so that it works with Java1.2 - albeit
+   less efficiently.
+ + FileHandler defaults to allowing directory access.
+ + JDBC tests modified to use cloudscape as DB.
+
+jetty-2.2.2 - 22 July 1999
+ + Fixed bug in HtmlFilter that prevented single char buffers from being
+   written.
+ + Implemented getResourceAsStream in FileJarServletLoader
+ + Fixed bug with CLASSPATH in FileJarServletLoader after attempt to load from
+   a jar.
+ + Fixed bug in com.mortbay.Util.IO with thread routines.
+ + Moved more test harnesses out of classes.
+ + File handler passes through not allowed options for non existant files.
+ + NotFoundHandler can repond with SC_METHOD_NOT_ALLOWED.
+ + Improved com.mortbay.Base.Log handling of different JVMs
+ + Minor fixes to README
+
+jetty-2.2.1 - 18 July 1999
+ + Comma separate header fields.
+ + Protect against duplicate single valued headers.
+ + Less verbose debug in PropertyTree
+ + Ignore IOException in ThreadedServer.run() when closing.
+ + Limit maximum line length in HttpInputStream.
+ + Response with SC_BAD_REQUEST rather than close in more circumstances
+ + Handle continuation lines in HttpHeader.
+ + HtmlFilter resets last-modified and content-length headers.
+ + Implemented com.mortbay.Util.IO as a ThreadPool
+ + Decoupled ExceptionHandler configuration from Handler stacks. Old config
+   style will produce warning and Default behavior. See new config file format
+   for changes.
+ + Added TerseExceptionHandler
+ + Added optional resourceBase property to HttpConfiguration. This is used as a
+   URL prefix in the getResource API and was suggested by the JSERV and Tomcat
+   implementors.
+
+jetty-2.2.0 - 01 July 1999
+ + Improved feature description page.
+ + Added Protekt SSL HttpListener
+ + Moved GNUJSP and Protekt listener to a contrib hierarchy.
+ + ThreadedServer.stop() closes socket before interrupting threads.
+ + Exit servlet improved (a little).
+ + Fixed some of the javadoc formatting.
+
+jetty-2.2.Beta4 - 29 June 1999
+ + FileHandler flushes files from cache in DELETE method.
+ + ThreadedServer.stop() now waits until all threads are stopped.
+ + Options "allowDir" added to FileHandler.
+ + Added getGlobalProperty to Jetty.Server and used this to configure default
+   page type.
+ + Updated README.txt
+ + Restructured com.mortbay.Jetty.Server for better clarity and documentation.
+ + Added comments to configuration files.
+ + Made ServerSocket and accept call generic in ThreadedServer for SSL
+   listeners.
+ + Altered meaning of * in PropertyTree to assist in abbreviated configuration
+   files.
+ + Added JettyMinimalDemo.prp as an example of an abbreviated configuration.
+ + Expanded Mime.prp file
+ + Added property handling to ServletHandler to read JRUN servlet configuration
+   files.
+
+jetty-2.2.Beta3 - 22 June 1999
+ + Re-implemented ThreadedServer to improve and balance performance.
+ + Added file cache to FileHandler
+ + Implemented efficient version of ServletContext.getResourceAsStream() that
+   does not open a new socket connection (as does getResource()).
+ + LookAndFeelServlet uses getResourceAsStream to get the file to wrap. This
+   allows it to benefit from any caching done and to wrap arbitrary content
+   (not just files).
+ + Restructure demo so that LookAndFeel content comes from simple handler
+   stack.
+ + Fixed file and socket leaks in Include and Embed tags.
+ + Ran dos2unix on all text files
+ + Applied contributed patch of spelling and typo corrections
+ + Added alternate constructors to HTML.Include for InputStream.
+ + Server.shutdown() clears configuration so that server may be restarted in
+   same virtual machine.
+ + Improved Block.write.
+ + Fixed bug in HttpResponse flush.
+
+jetty-2.2.Beta2 - 12 June 1999
+ + Added all write methods to HttpOutputStream$SwitchOutputStream
+ + Added com.mortbay.Jetty.Server.shutdown() for gentler shutdown of server.
+   Called from Exit servlet
+ + HttpRequest.getParameterNames() no longer alters the order returned by
+   getQueryString().
+ + Handle  path info of a dynamic loaded servlets and correctly set the servlet
+   path.
+ + Standardized date format in persistent cookies.
+
+jetty-2.2.Beta1 - 07 June 1999
+ + Defined abstract ServletLoader, derivations of which can be specified in
+   HttpConfiguration properties.
+ + Implemented all HttpServer attribute methods by mapping to the
+   HttpConfiguration properties.  Dynamic reconfiguration is NOT supported by
+   these methods (but we are thinking about it).
+ + Close files after use to avoid "file leak" under heavy load.
+ + Fixed missing copyright messages from some contributions
+ + Fixed incorrect version numbers in a few places.
+ + Improved ThreadPool synchronization and added minThreads.
+ + Allow configuration of MinListenerThreads, MaxListenerThreads,
+   MaxListenerThreadIdleMs
+ + HtmlFilter optimized for being called by a buffered writer.
+ + Don't warn about IOExceptions unless Debug is on.
+ + Limit the job queue only grow to the max number of threads.
+ + Included GNUJSP 0.9.9
+ + Optional use of DateCache in log file format
+ + Fixed cache in FileJarServletLoader
+ + Destroy requests and responses to help garbage collector.
+ + Restructure ThreadedServer to reduce object creation.
+
+jetty-2.2.Beta0 - 31 May 1999
+ + Servlet loader handles jar files with different files separator.
+ + ThreadedServer gently shuts down.
+ + Handle malformed % characters in URLs.
+ + Included and improved version of ThreadPool for significant performance
+   improvement under high load.
+ + HttpRequest.getCookies returns empty array rather than null for no cookies.
+ + Added HttpResponse.requestHandled() method to avoid bug with servlet doHead
+   method.
+ + Added Page.rewind() method to allow a page to be written multiple times
+ + Added "Initialize" attribute to servlet configuration to allow servlet to be
+   initialized when loaded.
+ + LogHandler changed to support only a single outfile and optional append.
+ + Included contributed com.mortbay.Jetty.StressTester class
+ + Token effort to keep test files out of the jar
+ + Removed support for STF
+
+jetty-2.2.Alpha1 - 07 May 1999
+ + ServletHolder can auto reload servlets
+ + Dynamic servlets can have autoReload configured
+ + Wait for requests to complete before reloading.
+ + Call destroy on old servlets when reloading.
+ + Made capitalization of config file more consistent(ish)
+ + Fixed bug in SessionDump
+
+jetty-2.2.Alpha0 - 06 May 1999
+ + Improved PropertyTree implementation
+ + Old Jetty.Server class renamed to Jetty.Server21
+ + New Server class using PropertyTree for configuration
+ + HttpHandlers given setProperties method to configure via Properties.
+ + HttpListener class can be configured
+ + Mime suffix mapping can be configured.
+ + Removed historic API from sessions
+ + Improved SessionDump servlet
+ + Fixed date overflow in Cookies
+ + HttpResponse.sendError avoids IllegalStateException
+ + Added ServletLoader implementation if ClassLoader.
+ + Dynamic loading of servlets.
+ + Added reload method to ServletHolder, but no way to call it yet.
+ + Changed options for FileServer
+ + Implemented ServletServer
+ + Removed SimpleServletServer
+
+jetty-2.1.7 - 22 April 1999
+ + Fixed showstopper bug with getReader and getWriter in requests and
+   responses.
+ + HttpFilter uses package interface to get HttpOutputStream
+
+jetty-2.1.6 - 21 April 1999
+ + Reduced initial size of most hashtables to reduce default memory overheads.
+ + Throw IllegalStateException as required from gets of
+   input/output/reader/writer in requests/responses.
+ + New simpler version of PropertyTree
+ + Updated PropertyTreeEditor
+ + Return EOF from HttpInputStream that has a content length.
+ + Added additional date formats for HttpHeader.getDateHeader
+
+jetty-2.1.5 - 15 April 1999
+ + Session URL encoding fixed for relative URLs.
+ + Reduced session memory overhead of sessions
+ + Form parameters protected against multiple decodes when redirected.
+ + Added setType methods to com.mortbay.FTP.Ftp
+ + Fixed bugs with invalid sessions
+ + Page factory requires response for session encoding
+ + Moved SessionHandler to front of stacks
+ + HtmlFilter now expands <!=SESSION> to the URL encoded session if required.
+ + Instrumented most of the demo to support URL session encoding.
+ + Implemented HttpRequest.getReader()
+ + Servlet log has been diverted to com.mortbay.Base.Log.event() Thus debug
+   does not need to be turned on to see servlet logs.
+ + Fixed alignment bug in TableForm
+ + Removed RFCs from package
+ + Fixed bug in ServletDispatch for null pathInfo
+
+jetty-2.1.4 - 26 March 1999
+ + Fixed problem compiling PathMap under some JDKs.
+ + Reduced HTML dependence in HTTP package to allow minimal configuration
+ + Tightened license agreement so that binary distributions are required to
+   include the license file.
+ + HttpRequest attributes implemented.
+ + Session max idle time implemented.
+ + pathInfo returns null for zero length pathInfo (as per spec). Sorry if this
+   breaks your servlets - it is a pain!
+ + fixed bug in getRealPath
+ + getPathTranslated now call getRealPath with pathInfo (as per spec).
+
+jetty-2.1.3 - 19 March 1999
+ + Added support for suffixes to PathMap
+ + Included GNUJSP implementation of Java Server Pages
+ + Use Java2 javadoc
+
+jetty-2.1.2 - 09 March 1999
+ + JSDK 2.1.1
+ + API documentation for JSDK 2.1.1
+ + Cascading style sheet HTML element added.
+ + Fixed trailing / bug in FileHandler (again!).
+ + Converted most servlets to HttpServlets using do Methods.
+
+jetty-2.1.1 - 05 March 1999
+ + Reduced number of calls to getRemoteHost for optimization
+ + Faster version of HttpInputStream.readLine().
+ + com.mortbay.Base.DateCache class added and used to speed date handling.
+ + Handle '.' in configured paths (temp fix until PropertyTrees)
+ + Fast char buffer handling in HttpInputStream
+ + Faster version of HttpHeader.read()
+ + Faster version of HttpRequest
+ + Size all StringBuffers
+
+jetty-2.1.0 - 22 February 1999
+ + Session URL Encoding
+ + PropertyTrees (see new Demo page)
+ + ServletDispatch (see new Demo page)
+ + image/jpg -> image/jpeg
+ + Deprecated com.mortbay.Util.STF
+ + getServlet methods return null.
+
+jetty-2.1.B1 - 13 February 1999
+ + Fixed bug with if-modified-since in FileHandler
+ + Added video/quicktime to default MIME types.
+ + Fixed bug with MultipartRequest.
+ + Updated DefaultExceptionHandler.
+ + Updated InetAddrPort.
+ + Updated URI.
+ + Implemented Handler translations and getRealPath.
+ + Improved handling of File.separator in FileHandler.
+ + Implemented RequestDispatcher (NOT Tested!).
+ + Implemented getResource and getResourceAsStream (NOT Tested!).
+ + Replace package com.mortbay.Util.Gateway with class
+   com.mortbay.Util.InetGateway
+
+jetty-2.1.B0 - 30 January 1999
+ + Uses JSDK2.1 API, but not all methods implemented.
+ + Added support for PUT, MOVE, DELETE in FileHandler
+ + FileHandler now sets content length.
+ + Added plug gateway classes com.mortbay.Util.Gateway
+ + Fixed command line bug with SimpleServletConfig
+ + Minor changes to support MS J++ and its non standard language extensions -
+   MMMmmm should have left it unchanged!
+
+jetty-2.0.5 - 15 December 1998
+ + Temp fix to getCharacterEncoding
+ + added getHeaderNoParams
+
+jetty-2.0.4 - 10 December 1998
+ + Use real release of JSDK2.0 (rather than beta).
+ + Portability issues solved for Apple's
+ + Improved error code returns
+ + Removed MORTBAY_HOME support from Makefiles
+ + Improved default Makefile behaviour
+ + Implement getCharacterEncoding
+
+jetty-2.0.3 - 13 November 1998
+ + Limit threads in ThreadedServer and low priority listener option greatly
+   improve performance under worse case loads.
+ + Fix bug with index files for Jetty.Server. Previously servers configured
+   with com.mortbay.Jetty.Server would not handle index.html files.  Need to
+   make this configurable in the prp file.
+ + Fixed errors in README file: com.mortbay.Jetty.Server was called
+   com.mortbay.HTTP.Server
+
+jetty-2.0.2 - 01 November 1998
+ + Use JETTY_HOME rather than MORTBAY_HOME for build environment
+ + Add thread pool to threaded server for significant performance improvement.
+ + Buffer files during configuration
+ + Buffer HTTP Response headers.
+
+jetty-2.0.1 - 27 October 1998
+ + Released under an Open Source license.
+
+jetty-2.0.0 - 25 October 1998
+ + Removed exceptional case from FileHandler redirect.
+ + Removed Chat demo (too many netscape dependencies).
+ + Fixed Code.formatObject handling of null objects.
+ + Added multipart/form-data demo.
+
+jetty-2.0.Beta3 - 29 September 1998
+ + Send 301 for directories without trailing / in FileHandler
+ + Ignore exception from HttpListener
+ + Properly implemented multiple listening addresses
+ + Added com.mortbay.Jetty.Server (see README.Jetty)
+ + Demo converted to an instance of com.mortbay.Jetty.Server
+ + Fixed Log Handler again.
+ + Added com.mortbay.HTTP.MultiPartRequest to handle file uploads
+
+jetty-2.0Beta2 - 01 July 1998
+ + Fixed Log Handler for HTTP/1.1
+ + Slight improvement in READMEEs
+
+jetty-2.0Beta1 - 01 June 1998
+ + Improved performance of Code.debug() calls, significantly in the case of non
+   matching debug patterns.
+ + Fixed bug with calls to service during initialization of servlet
+ + Provided addSection on com.mortbay.HTML.Page
+ + Provided reset on com.mortbay.HTML.Composite.
+ + Proxy demo in different server instance
+ + Handle full URLs in HTTP requests (to some extent)
+ + Improved performance with special asciiToLowerCase
+ + Warn if MSIE used for multi part MIME.
+
+jetty-2.0Alpha2 - 01 May 1998
+ + JDK1.2 javax.servlet API
+ + Added date format to Log
+ + Added timezone to Log
+ + Handle params in getIntHeader and getDateHeader
+ + Removed HttpRequest.getByteContent
+ + Use javax.servlet.http.HttpUtils.parsePostData
+ + Use javax.servlet.http.Cookie
+ + Use javax.servlet.http.HttpSession
+ + Handle Single Threaded servlets with servlet pool
+
+jetty-1.3.5 - 01 May 1998
+ + Fixed socket inet bug in FTP
+ + Debug triggers added to com.mortbay.Base.Code
+ + Added date format to Log
+ + Correct handling of multiple parameters
+
+jetty-2.0Alpha1 - 08 April 1998
+ + Fixed forward bug with no port number
+ + Removed HttpRequestHeader class
+ + Debug triggers added to com.mortbay.Base.Code
+ + Handle HTTP/1.1 Host: header
+ + Correct formatting of Date HTTP headers
+ + HttpTests test harness
+ + Add HTTP/1.1 Date: header
+ + Handle file requests with If-Modified-Since: or If-Unmodified-Since:
+ + Handle HEAD properly
+ + Send Connection: close
+ + Requires Host: header for 1.1 requests
+ + Sends chunked data for 1.1 responses of unknown length.
+ + handle extra spaces in HTTP headers
+ + Really fixed handling of multiple parameters
+ + accept chunked data
+ + Send 100 Continue for HTTP/1.1 requests (concerned about push???)
+ + persistent connections
+
+jetty-1.3.4 - 15 March 1998
+ + Fixed handling of multiple parameters in query and form content.
+   "?A=1%2C2&A=C%2CD" now returns two values ("1,2" & "C,D") rather than 4.
+ + ServletHandler now takes an optional file base directory name which is used
+   to set the translated path for pathInfo in servlet requests.
+ + Dump servlet enhanced to exercise these changes.
+
+jetty-1.3.3
+ + Fixed TableForm.addButtonArea bug.
+ + TableForm.extendRow() uses existing cell
+ + Closed exception window in HttpListener.java
+
+jetty-1.3.2
+ + Fixed proxy bug with no port number
+ + Added per Table cell composite factories
+
+jetty-1.3.1
+ + Minor fixes in SmtpMail
+ + ForwardHandler only forwards as http/1.0 (from Tobias.Miller)
+ + Improved parsing of stack traces
+ + Better handling of InvocationTargetException in debug
+ + Minor release adjustments for Tracker
+
+jetty-1.3.0
+ + Added DbAdaptor to JDBC wrappers
+ + Beta release of Tracker
+
+jetty-1.2.0
+ + Reintroduced STF
+ + Fixed install bug for nested classes
+ + Better Debug configuration
+ + DebugServlet
+ + Alternate look and feel for Jetty
+
+jetty-1.1.1
+ + Improved documentation
+
+jetty-1.1
+ + Improved connection caching in java.mortbay.JDBC
+ + Moved HttpCode to com.mortbay.Util
+
+jetty-1.0.1
+ + Bug fixes
+
+jetty-1.0
+ + First release in com.mortbay package structure
+ + Included Util, JDBC, HTML, HTTP, Jetty
+
diff --git a/lib/javax.servlet-3.0.0.v201112011016-sources.jar b/lib/javax.servlet-3.0.0.v201112011016-sources.jar
new file mode 100644
index 0000000..2baa97b
--- /dev/null
+++ b/lib/javax.servlet-3.0.0.v201112011016-sources.jar
Binary files differ
diff --git a/lib/javax.servlet-3.0.0.v201112011016-sources.jar.sha1 b/lib/javax.servlet-3.0.0.v201112011016-sources.jar.sha1
new file mode 100644
index 0000000..aea41c3
--- /dev/null
+++ b/lib/javax.servlet-3.0.0.v201112011016-sources.jar.sha1
@@ -0,0 +1 @@
+15c914135cf30177b83c321250c458396289cd37
\ No newline at end of file
diff --git a/lib/javax.servlet-3.0.0.v201112011016.jar b/lib/javax.servlet-3.0.0.v201112011016.jar
new file mode 100644
index 0000000..b135409
--- /dev/null
+++ b/lib/javax.servlet-3.0.0.v201112011016.jar
Binary files differ
diff --git a/lib/javax.servlet-3.0.0.v201112011016.jar.sha1 b/lib/javax.servlet-3.0.0.v201112011016.jar.sha1
new file mode 100644
index 0000000..2603fb9
--- /dev/null
+++ b/lib/javax.servlet-3.0.0.v201112011016.jar.sha1
@@ -0,0 +1 @@
+0aaaa85845fb5c59da00193f06b8e5278d8bf3f8
\ No newline at end of file
diff --git a/lib/javax.servlet-3.0.0.v201112011016.pom b/lib/javax.servlet-3.0.0.v201112011016.pom
new file mode 100644
index 0000000..2bcfad6
--- /dev/null
+++ b/lib/javax.servlet-3.0.0.v201112011016.pom
@@ -0,0 +1,17 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+  <parent>
+    <groupId>org.eclipse.jetty.orbit</groupId>
+    <artifactId>jetty-orbit</artifactId>
+    <version>1</version>
+  </parent>
+  <modelVersion>4.0.0</modelVersion>
+  <groupId>org.eclipse.jetty.orbit</groupId>
+  <artifactId>javax.servlet</artifactId>
+  <version>3.0.0.v201112011016</version>
+  <name>Jetty Orbit :: Servlet API</name>
+  <description>
+    This artifact originates from the Orbit Project at Eclipse, 
+    it is an osgi bundle and is signed as well.
+  </description>
+  <packaging>orbit</packaging>
+</project>
diff --git a/lib/javax.servlet-3.0.0.v201112011016.pom.sha1 b/lib/javax.servlet-3.0.0.v201112011016.pom.sha1
new file mode 100644
index 0000000..787a813
--- /dev/null
+++ b/lib/javax.servlet-3.0.0.v201112011016.pom.sha1
@@ -0,0 +1 @@
+b23491173f52c804489f6625a661f4ba946f4e51
\ No newline at end of file
diff --git a/lib/jetty-util-6.1.26.jar b/lib/jetty-util-6.1.26.jar
new file mode 100644
index 0000000..cd23752
--- /dev/null
+++ b/lib/jetty-util-6.1.26.jar
Binary files differ
diff --git a/lib/jetty-util-6.1.26.jar.sha1 b/lib/jetty-util-6.1.26.jar.sha1
new file mode 100644
index 0000000..e00b3a8
--- /dev/null
+++ b/lib/jetty-util-6.1.26.jar.sha1
@@ -0,0 +1 @@
+e5642fe0399814e1687d55a3862aa5a3417226a9
\ No newline at end of file
diff --git a/lib/jetty-util-6.1.26.pom b/lib/jetty-util-6.1.26.pom
new file mode 100644
index 0000000..fb52f3b
--- /dev/null
+++ b/lib/jetty-util-6.1.26.pom
@@ -0,0 +1,111 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+  <parent>
+    <artifactId>project</artifactId>
+    <groupId>org.mortbay.jetty</groupId>
+    <version>6.1.26</version>
+    <relativePath>../../pom.xml</relativePath>
+  </parent>
+  <modelVersion>4.0.0</modelVersion>
+  <groupId>org.mortbay.jetty</groupId>
+  <artifactId>jetty-util</artifactId>
+  <name>Jetty Utilities</name>
+  <description>Utility classes for Jetty</description>
+  <build>
+    <testResources>
+      <testResource>
+        <directory>src/test/java</directory>
+        <includes>
+          <include>**/*Test.java</include>
+          <include>org/mortbay/**/*.xml</include>
+        </includes>
+        <excludes>
+          <exclude>**/Abstract*.java</exclude>
+        </excludes>
+      </testResource>
+    </testResources>
+    <plugins>
+      <plugin>
+        <artifactId>maven-antrun-plugin</artifactId>
+        <executions>
+          <execution>
+            <id>clean</id>
+            <phase>clean</phase>
+            <goals>
+              <goal>run</goal>
+            </goals>
+            <configuration>
+              <tasks>
+                <delete failonerror="false" file="../../lib/${project.artifactId}-${project.version}.${project.packaging}" />
+                <delete failonerror="false" file="../../etc/jetty-logging.xml" />
+              </tasks>
+            </configuration>
+          </execution>
+          <execution>
+            <id>copyjar</id>
+            <phase>install</phase>
+            <goals>
+              <goal>run</goal>
+            </goals>
+            <configuration>
+              <tasks>
+                <copy failonerror="false" file="target/${project.artifactId}-${project.version}.${project.packaging}" todir="../../lib/" />
+                <copy failonerror="false" file="src/main/config/etc/jetty-logging.xml" todir="../../etc" />
+              </tasks>
+            </configuration>
+          </execution>
+        </executions>
+      </plugin>
+      <plugin>
+        <groupId>org.apache.felix</groupId>
+        <artifactId>maven-bundle-plugin</artifactId>
+        <version>${maven-bundle-plugin-version}</version>
+        <extensions>true</extensions>
+        <executions>
+          <execution>
+            <goals>
+              <goal>manifest</goal>
+            </goals>
+            <configuration>
+              <instructions>
+                <Bundle-SymbolicName>org.mortbay.jetty.util</Bundle-SymbolicName>
+                <Bundle-RequiredExecutionEnvironment>J2SE-1.4</Bundle-RequiredExecutionEnvironment>
+                <Import-Package>!org.mortbay.*,org.slf4j;resolution:=optional,*</Import-Package>
+                <Bundle-DocURL>http://jetty.mortbay.org</Bundle-DocURL>
+              </instructions>
+            </configuration>
+           </execution>
+        </executions>
+      </plugin>
+      <plugin>
+        <!--
+        Required for OSGI
+        -->
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-jar-plugin</artifactId>
+        <configuration>
+          <archive>               
+            <manifestFile>${project.build.outputDirectory}/META-INF/MANIFEST.MF</manifestFile>
+          </archive>
+        </configuration>
+      </plugin>
+    </plugins>
+  </build>
+  <dependencies>
+    <dependency>
+      <groupId>junit</groupId>
+      <artifactId>junit</artifactId>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.mortbay.jetty</groupId>
+      <artifactId>servlet-api</artifactId>
+      <version>${servlet-version}</version>
+      <scope>provided</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.slf4j</groupId>
+      <artifactId>slf4j-api</artifactId>
+      <optional>true</optional>
+    </dependency>
+  </dependencies>
+</project>
diff --git a/lib/jetty-util-6.1.26.pom.sha1 b/lib/jetty-util-6.1.26.pom.sha1
new file mode 100644
index 0000000..c4edc57
--- /dev/null
+++ b/lib/jetty-util-6.1.26.pom.sha1
@@ -0,0 +1 @@
+392748d8f7f97d4b37576ac710fceffa58ba294e
\ No newline at end of file
diff --git a/lib/slf4j-api-1.6.1.jar b/lib/slf4j-api-1.6.1.jar
new file mode 100644
index 0000000..f1f4fdd
--- /dev/null
+++ b/lib/slf4j-api-1.6.1.jar
Binary files differ
diff --git a/lib/slf4j-api-1.6.1.jar.sha1 b/lib/slf4j-api-1.6.1.jar.sha1
new file mode 100644
index 0000000..3f1a76e
--- /dev/null
+++ b/lib/slf4j-api-1.6.1.jar.sha1
@@ -0,0 +1 @@
+6f3b8a24bf970f17289b234284c94f43eb42f0e4
\ No newline at end of file
diff --git a/lib/slf4j-api-1.6.1.pom b/lib/slf4j-api-1.6.1.pom
new file mode 100644
index 0000000..e7e09ff
--- /dev/null
+++ b/lib/slf4j-api-1.6.1.pom
@@ -0,0 +1,101 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0"

+  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

+  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">

+

+  <parent>

+    <groupId>org.slf4j</groupId>

+    <artifactId>slf4j-parent</artifactId>

+    <version>1.6.1</version>

+  </parent>

+

+  <modelVersion>4.0.0</modelVersion>

+

+  <groupId>org.slf4j</groupId>

+  <artifactId>slf4j-api</artifactId>

+  <packaging>jar</packaging>

+  <name>SLF4J API Module</name>

+

+  <url>http://www.slf4j.org</url>

+  <description>The slf4j API</description>

+

+  <dependencies>

+

+  </dependencies> 

+

+  <build>

+    <plugins>

+      <plugin>

+        <groupId>org.apache.maven.plugins</groupId>

+        <artifactId>maven-surefire-plugin</artifactId>

+        <configuration>

+          <forkMode>once</forkMode>

+          <reportFormat>plain</reportFormat>

+          <trimStackTrace>false</trimStackTrace>

+          <excludes>

+            <exclude>**/AllTest.java</exclude>

+            <exclude>**/PackageTest.java</exclude>

+          </excludes>

+        </configuration>

+      </plugin>

+

+      <plugin>

+        <groupId>org.apache.maven.plugins</groupId>

+        <artifactId>maven-jar-plugin</artifactId>

+        <configuration>

+          <archive>

+            <manifestEntries>

+              <Bundle-Version>${parsedVersion.osgiVersion}</Bundle-Version>

+              <Bundle-Description>${project.description}</Bundle-Description>

+              <Implementation-Version>${project.version}</Implementation-Version>

+            </manifestEntries>

+            <manifestFile>${project.build.outputDirectory}/META-INF/MANIFEST.MF</manifestFile>

+          </archive>

+        </configuration>

+        <executions>

+          <execution>

+            <id>bundle-test-jar</id>

+            <phase>package</phase>

+            <goals>

+              <goal>jar</goal>

+              <goal>test-jar</goal>

+            </goals>

+          </execution>

+        </executions>

+      </plugin>

+

+      <plugin>

+        <groupId>org.apache.maven.plugins</groupId>

+        <artifactId>maven-antrun-plugin</artifactId>

+        <executions>

+          <execution>

+            <phase>process-classes</phase>

+            <goals>

+             <goal>run</goal>

+            </goals>

+          </execution>

+        </executions>

+        <configuration>

+          <tasks>

+            <echo>Removing slf4j-api's dummy StaticLoggerBinder and StaticMarkerBinder</echo>

+            <delete dir="target/classes/org/slf4j/impl"/>

+          </tasks>

+        </configuration>

+      </plugin>

+

+    </plugins>

+

+  </build>

+  

+  <reporting>

+    <plugins>

+      <plugin>

+        <groupId>org.codehaus.mojo</groupId>

+        <artifactId>clirr-maven-plugin</artifactId>

+        <configuration>

+          <comparisonVersion>1.5.6</comparisonVersion>

+        </configuration>

+      </plugin>

+    </plugins>

+  </reporting>

+

+</project>
\ No newline at end of file
diff --git a/lib/slf4j-api-1.6.1.pom.sha1 b/lib/slf4j-api-1.6.1.pom.sha1
new file mode 100644
index 0000000..2ff79af
--- /dev/null
+++ b/lib/slf4j-api-1.6.1.pom.sha1
@@ -0,0 +1 @@
+bd86aca3b3779fa5aa5e4442a5db2ebf4035365c
\ No newline at end of file
diff --git a/lib/slf4j-jdk14-1.6.1.jar b/lib/slf4j-jdk14-1.6.1.jar
new file mode 100644
index 0000000..6eb6367
--- /dev/null
+++ b/lib/slf4j-jdk14-1.6.1.jar
Binary files differ
diff --git a/lib/slf4j-jdk14-1.6.1.jar.sha1 b/lib/slf4j-jdk14-1.6.1.jar.sha1
new file mode 100644
index 0000000..2e18640
--- /dev/null
+++ b/lib/slf4j-jdk14-1.6.1.jar.sha1
@@ -0,0 +1 @@
+251899d8c17e29ed4c53d98c88e54241a14d9591
\ No newline at end of file
diff --git a/lib/slf4j-jdk14-1.6.1.pom b/lib/slf4j-jdk14-1.6.1.pom
new file mode 100644
index 0000000..50df72b
--- /dev/null
+++ b/lib/slf4j-jdk14-1.6.1.pom
@@ -0,0 +1,69 @@
+<project 

+  xmlns="http://maven.apache.org/POM/4.0.0" 

+  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 

+  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">

+

+	<parent>

+		<groupId>org.slf4j</groupId>

+		<artifactId>slf4j-parent</artifactId>

+    	<version>1.6.1</version>

+	</parent>

+	

+	<modelVersion>4.0.0</modelVersion>

+

+	<groupId>org.slf4j</groupId>

+	<artifactId>slf4j-jdk14</artifactId>

+

+	<packaging>jar</packaging>

+	<name>SLF4J JDK14 Binding</name>

+

+	<url>http://www.slf4j.org</url>

+	<description>

+		The slf4j JDK14 binding

+	</description>

+

+  <dependencies>

+	  <dependency>

+      <groupId>org.slf4j</groupId>

+      <artifactId>slf4j-api</artifactId>

+		</dependency>

+

+    <dependency>

+      <groupId>org.slf4j</groupId>

+      <artifactId>slf4j-api</artifactId>

+      <type>test-jar</type>

+      <version>${project.version}</version>

+      <scope>test</scope>

+    </dependency>

+  </dependencies>

+

+  <build>

+		<plugins>

+

+			<plugin>

+				<groupId>org.apache.maven.plugins</groupId>

+				<artifactId>maven-compiler-plugin</artifactId>

+				<configuration>

+					<source>1.4</source>

+					<target>1.4</target>

+				</configuration>

+			</plugin>

+

+			<plugin>

+			  <groupId>org.apache.maven.plugins</groupId>

+        <artifactId>maven-jar-plugin</artifactId>

+        <configuration>

+          <archive>

+            <manifestEntries>

+              <Bundle-Version>${parsedVersion.osgiVersion}</Bundle-Version>

+              <Bundle-Description>${project.description}</Bundle-Description>

+              <Implementation-Version>${project.version}</Implementation-Version>

+            </manifestEntries>

+            <manifestFile>${project.build.outputDirectory}/META-INF/MANIFEST.MF</manifestFile>

+          </archive>

+        </configuration>			

+      </plugin>

+    </plugins>

+  </build>

+

+</project>
\ No newline at end of file
diff --git a/lib/slf4j-jdk14-1.6.1.pom.sha1 b/lib/slf4j-jdk14-1.6.1.pom.sha1
new file mode 100644
index 0000000..169a426
--- /dev/null
+++ b/lib/slf4j-jdk14-1.6.1.pom.sha1
@@ -0,0 +1 @@
+6f0ca912337d5b0d1711f8e0f4f283cd13ec518d
\ No newline at end of file
diff --git a/pom.xml_saved b/pom.xml_saved
new file mode 100644
index 0000000..04141b4
--- /dev/null
+++ b/pom.xml_saved
@@ -0,0 +1,779 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <parent>
+    <groupId>org.eclipse.jetty</groupId>
+    <artifactId>jetty-parent</artifactId>
+    <version>20</version>
+  </parent>
+  <artifactId>jetty-project</artifactId>
+  <version>8.1.15.v20140411</version>
+  <name>Jetty :: Project</name>
+  <url>http://www.eclipse.org/jetty</url>
+  <packaging>pom</packaging>
+  <properties>
+    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+    <jetty.url>http://www.eclipse.org/jetty</jetty.url>
+    <orbit-servlet-api-version>3.0.0.v201112011016</orbit-servlet-api-version>
+    <build-support-version>1.1</build-support-version>
+    <slf4j-version>1.6.1</slf4j-version>
+    <jetty-test-policy-version>1.2</jetty-test-policy-version>
+  </properties>
+  <scm>
+    <connection>scm:git:http://git.eclipse.org/gitroot/jetty/org.eclipse.jetty.project.git</connection>
+    <developerConnection>scm:git:ssh://git.eclipse.org/gitroot/jetty/org.eclipse.jetty.project.git</developerConnection>
+    <url>http://git.eclipse.org/c/jetty/org.eclipse.jetty.project.git/tree</url>
+  </scm>
+  <build>
+    <defaultGoal>install</defaultGoal>
+    <plugins>
+      <plugin>
+        <artifactId>maven-compiler-plugin</artifactId>
+        <configuration>
+          <source>1.6</source>
+          <target>1.6</target>
+          <verbose>false</verbose>
+        </configuration>
+      </plugin>
+      <plugin>
+        <artifactId>maven-release-plugin</artifactId>
+        <configuration>
+          <autoVersionSubmodules>true</autoVersionSubmodules>
+        </configuration>
+      </plugin>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-remote-resources-plugin</artifactId>
+        <executions>
+          <execution>
+            <phase>generate-resources</phase>
+            <goals>
+              <goal>process</goal>
+            </goals>
+            <configuration>
+              <resourceBundles>
+                <resourceBundle>org.eclipse.jetty.toolchain:jetty-artifact-remote-resources:1.1</resourceBundle>
+              </resourceBundles>
+            </configuration>
+          </execution>
+        </executions>
+      </plugin>
+      <!-- source maven plugin creates the source bundle and adds manifest -->
+      <plugin>
+        <inherited>true</inherited>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-source-plugin</artifactId>
+        <executions>
+          <execution>
+            <id>attach-sources</id>
+            <phase>process-classes</phase>
+            <goals>
+              <goal>jar</goal>
+            </goals>
+            <configuration>
+              <archive>
+                <manifestEntries>
+                  <Bundle-ManifestVersion>2</Bundle-ManifestVersion>
+                  <Bundle-Name>${project.name}</Bundle-Name>
+                  <Bundle-SymbolicName>${bundle-symbolic-name}.source;singleton:=true</Bundle-SymbolicName>
+                  <Bundle-Vendor>Eclipse.org - Jetty</Bundle-Vendor>
+                  <Bundle-Version>${parsedVersion.osgiVersion}</Bundle-Version>
+                  <Eclipse-SourceBundle>${bundle-symbolic-name};version="${parsedVersion.osgiVersion}";roots:="."</Eclipse-SourceBundle>
+                </manifestEntries>
+              </archive>
+            </configuration>
+          </execution>
+        </executions>
+      </plugin>
+      <!-- Build helper maven plugin sets the parsedVersion.osgiVersion property -->
+      <plugin>
+        <groupId>org.codehaus.mojo</groupId>
+        <artifactId>build-helper-maven-plugin</artifactId>
+        <executions>
+          <execution>
+            <id>set-osgi-version</id>
+            <phase>validate</phase>
+            <goals>
+              <goal>parse-version</goal>
+            </goals>
+          </execution>
+        </executions>
+      </plugin>
+      <plugin>
+        <groupId>org.eclipse.jetty.toolchain</groupId>
+        <artifactId>jetty-version-maven-plugin</artifactId>
+        <executions>
+          <execution>
+            <id>attach-version</id>
+            <phase>process-resources</phase>
+            <goals>
+              <goal>attach-version-text</goal>
+            </goals>
+          </execution>
+        </executions>
+      </plugin>
+      <!-- Enforcer Plugin -->
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-enforcer-plugin</artifactId>
+        <executions>
+          <execution>
+            <id>enforce-java</id>
+            <goals>
+              <goal>enforce</goal>
+            </goals>
+            <configuration>
+              <rules>
+                <requireMavenVersion>
+                  <version>[2.0.6,)</version>
+                </requireMavenVersion>
+                <requireJavaVersion>
+                  <version>[1.5,)</version>
+                </requireJavaVersion>
+                <versionTxtRule implementation="org.eclipse.jetty.toolchain.enforcer.rules.VersionTxtRule" />
+                <versionOsgiRule implementation="org.eclipse.jetty.toolchain.enforcer.rules.RequireOsgiCompatibleVersionRule" />
+                <versionRedhatRule implementation="org.eclipse.jetty.toolchain.enforcer.rules.RequireRedhatCompatibleVersionRule" />
+                <versionDebianRule implementation="org.eclipse.jetty.toolchain.enforcer.rules.RequireDebianCompatibleVersionRule" />
+             </rules>
+            </configuration>
+          </execution>
+          <execution>
+            <id>enforce-orbit-deps</id>
+            <goals>
+              <goal>enforce</goal>
+            </goals>
+            <configuration>
+              <rules>
+                <!-- Banned Dependencies (should use Orbit based versions now) -->
+                <bannedDependencies>
+                  <includes>
+                    <include>javax.servlet</include>
+                    <include>org.apache.geronimo.specs</include>
+                    <include>javax.mail</include>
+                    <include>javax.activation</include>
+                  </includes>
+                  <searchTransitive>true</searchTransitive>
+                  <message>This dependency is banned, use the ORBIT provided dependency instead.</message>
+                </bannedDependencies>
+              </rules>
+              <fail>true</fail>
+            </configuration>
+          </execution>
+        </executions>
+        <dependencies>
+           <dependency>
+             <groupId>org.eclipse.jetty.toolchain</groupId>
+             <artifactId>jetty-build-support</artifactId>
+             <version>${build-support-version}</version>
+           </dependency>
+        </dependencies>
+      </plugin>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-pmd-plugin</artifactId>
+        <executions>
+          <execution>
+            <id>named-logging-enforcement</id>
+            <phase>compile</phase>
+            <goals>
+              <goal>check</goal>
+            </goals>
+            <configuration>
+              <verbose>true</verbose>
+            </configuration>
+          </execution>
+        </executions>
+        <configuration>
+          <targetJdk>1.6</targetJdk>
+          <rulesets>
+            <ruleset>jetty/pmd_logging_ruleset.xml</ruleset>
+          </rulesets>
+        </configuration>
+        <dependencies>
+          <dependency>
+            <groupId>org.eclipse.jetty.toolchain</groupId>
+            <artifactId>jetty-build-support</artifactId>
+            <version>${build-support-version}</version>
+          </dependency>
+        </dependencies>
+      </plugin>
+      <plugin>
+        <inherited>false</inherited>
+        <groupId>com.mycila.maven-license-plugin</groupId>
+        <artifactId>maven-license-plugin</artifactId>
+        <version>1.10.b1</version>
+        <configuration>
+          <header>header-template.txt</header>
+          <failIfMissing>true</failIfMissing>
+          <aggregate>true</aggregate>
+          <strictCheck>true</strictCheck>
+          <properties>
+             <copyright-range>${project.inceptionYear}-2014</copyright-range>
+          </properties>
+          <mapping>
+            <java>DOUBLESLASH_STYLE</java>
+          </mapping>
+          <includes>
+            <include>**/*.java</include>
+          </includes>
+          <excludes>
+            <exclude>jetty-util/src/main/java/org/eclipse/jetty/util/security/UnixCrypt.java</exclude>
+            <exclude>jetty-policy/src/main/java/org/eclipse/jetty/policy/loader/DefaultPolicyLoader.java</exclude>
+            <exclude>jetty-policy/src/main/java/org/eclipse/jetty/policy/loader/PolicyFileScanner.java</exclude>
+          </excludes>
+        </configuration>
+        <executions>
+          <execution>
+            <id>check-headers</id>
+            <phase>verify</phase>
+            <goals>
+              <goal>check</goal>
+            </goals>
+          </execution>
+        </executions>
+      </plugin>
+    </plugins>
+    <pluginManagement>
+      <plugins>
+        <plugin>
+          <groupId>org.eclipse.jetty.toolchain</groupId>
+          <artifactId>jetty-version-maven-plugin</artifactId>
+          <version>1.0.10</version>
+        </plugin>
+        <plugin>
+          <groupId>org.apache.maven.plugins</groupId>
+          <artifactId>maven-jar-plugin</artifactId>
+          <configuration>
+            <archive>
+              <manifestEntries>
+                <Implementation-Version>${project.version}</Implementation-Version>
+                <Implementation-Vendor>Eclipse.org - Jetty</Implementation-Vendor>
+                <url>${jetty.url}</url>
+              </manifestEntries>
+            </archive>
+          </configuration>
+        </plugin>
+        <plugin>
+          <groupId>org.apache.maven.plugins</groupId>
+          <artifactId>maven-surefire-plugin</artifactId>
+          <configuration>
+            <failIfNoTests>false</failIfNoTests>
+            <!--systemProperties>
+              <property>
+                <name>org.eclipse.jetty.io.AbstractBuffer.boundsChecking</name>
+                <value>true</value>
+              </property>
+            </systemProperties-->
+          </configuration>
+        </plugin>
+        <plugin>
+          <groupId>org.apache.felix</groupId>
+          <artifactId>maven-bundle-plugin</artifactId>
+          <extensions>true</extensions>
+          <configuration>
+            <instructions>
+              <Bundle-RequiredExecutionEnvironment>J2SE-1.5</Bundle-RequiredExecutionEnvironment>
+              <Bundle-DocURL>${jetty.url}</Bundle-DocURL>
+              <Bundle-Vendor>Eclipse Jetty Project</Bundle-Vendor>
+              <Bundle-Classpath>.</Bundle-Classpath>
+              <Export-Package>${bundle-symbolic-name}.*;version="${parsedVersion.majorVersion}.${parsedVersion.minorVersion}.${parsedVersion.incrementalVersion}"</Export-Package>
+              <Bundle-Copyright>Copyright (c) 2008-2014 Mort Bay Consulting Pty. Ltd.</Bundle-Copyright>
+              <_versionpolicy>[$(version;==;$(@)),$(version;+;$(@)))</_versionpolicy>
+            </instructions>
+          </configuration>
+        </plugin>
+        <plugin>
+          <groupId>org.apache.maven.plugins</groupId>
+          <artifactId>maven-assembly-plugin</artifactId>
+          <dependencies>
+            <dependency>
+              <groupId>org.eclipse.jetty.toolchain</groupId>
+              <artifactId>jetty-assembly-descriptors</artifactId>
+              <version>1.0</version>
+            </dependency>
+          </dependencies>
+        </plugin>
+        <plugin>
+          <groupId>org.codehaus.mojo</groupId>
+          <artifactId>findbugs-maven-plugin</artifactId>
+          <configuration>
+            <findbugsXmlOutput>true</findbugsXmlOutput>
+            <xmlOutput>true</xmlOutput>
+            <effort>Max</effort>
+            <onlyAnalyze>org.eclipse.jetty.*</onlyAnalyze>
+          </configuration>
+        </plugin>
+        <plugin>
+          <groupId>org.apache.maven.plugins</groupId>
+          <artifactId>maven-dependency-plugin</artifactId>
+        </plugin>
+        <plugin>
+          <groupId>org.apache.maven.plugins</groupId>
+          <artifactId>maven-jxr-plugin</artifactId>
+        </plugin>
+        <plugin>
+          <groupId>org.apache.maven.plugins</groupId>
+          <artifactId>maven-javadoc-plugin</artifactId>
+          <configuration>
+            <docfilessubdirs>true</docfilessubdirs>
+            <detectLinks>false</detectLinks>
+            <detectJavaApiLink>true</detectJavaApiLink>
+            <excludePackageNames>org.slf4j.*;org.mortbay.*</excludePackageNames>
+            <links>
+              <link>http://download.eclipse.org/jetty/stable-7/apidocs/</link>
+            </links>
+            <tags>
+              <tag>
+                <name>org.apache.xbean.XBean</name>
+                <placement>a</placement>
+                <head>Apache XBean:</head>
+              </tag>
+            </tags>
+            </configuration>
+        </plugin>
+        <plugin>
+          <groupId>org.apache.maven.plugins</groupId>
+          <artifactId>maven-pmd-plugin</artifactId>
+        </plugin>
+      </plugins>
+    </pluginManagement>
+  </build>
+  <reporting>
+    <plugins>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-jxr-plugin</artifactId>
+        <version>2.1</version>
+      </plugin>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-javadoc-plugin</artifactId>
+        <version>2.8</version>
+        <configuration>
+          <maxmemory>512m</maxmemory>
+          <docfilessubdirs>true</docfilessubdirs>
+          <detectLinks>true</detectLinks>
+          <detectJavaApiLink>true</detectJavaApiLink>
+        </configuration>
+      </plugin>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-pmd-plugin</artifactId>
+        <version>2.7.1</version>
+        <configuration>
+          <targetJdk>1.5</targetJdk>
+          <rulesets>
+            <ruleset>jetty/pmd_ruleset.xml</ruleset>
+          </rulesets>
+        </configuration>
+      </plugin>
+      <plugin>
+        <groupId>org.codehaus.mojo</groupId>
+        <artifactId>findbugs-maven-plugin</artifactId>
+        <version>2.3.2</version>
+      </plugin>
+    </plugins>
+  </reporting>
+<!--
+  <repositories>
+    <repository>
+      <snapshots>
+        <enabled>true</enabled>
+      </snapshots>
+      <id>sonatype-snapshots</id>
+      <name>Sonatype Jetty Snapshots</name>
+      <url>http://oss.sonatype.org/content/groups/jetty</url>
+    </repository>
+  </repositories>
+-->
+  <modules>
+    <module>jetty-util</module>
+    <module>jetty-jmx</module>
+    <module>jetty-io</module>
+    <module>jetty-http</module>
+    <module>jetty-websocket</module>
+    <module>jetty-continuation</module>
+    <module>jetty-server</module>
+    <module>jetty-client</module>
+    <module>jetty-xml</module>
+    <module>jetty-security</module>
+    <module>jetty-jaspi</module>
+    <module>jetty-servlet</module>
+    <module>jetty-webapp</module>
+    <module>jetty-servlets</module>
+    <module>jetty-deploy</module>
+    <module>jetty-ajp</module>
+    <module>jetty-jndi</module>
+    <module>jetty-annotations</module>
+    <module>jetty-plus</module>
+    <module>jetty-rewrite</module>
+    <module>jetty-policy</module>
+    <module>jetty-monitor</module>
+    <module>jetty-start</module>
+    <module>jetty-nested</module>
+    <module>jetty-overlay-deployer</module>
+    <module>jetty-nosql</module>
+    <module>jetty-http-spi</module>
+    <module>jetty-jsp</module>
+    <module>jetty-distribution</module>
+    <!--module>test-continuation-jetty6</module-->
+  </modules>
+  <dependencyManagement>
+    <dependencies>
+      <!-- Orbit Deps -->
+      <dependency>
+        <groupId>org.eclipse.jetty.orbit</groupId>
+        <artifactId>javax.servlet</artifactId>
+        <version>${orbit-servlet-api-version}</version>
+      </dependency>
+      <dependency>
+        <groupId>org.eclipse.jetty.orbit</groupId>
+        <artifactId>javax.annotation</artifactId>
+        <version>1.1.0.v201108011116</version>
+      </dependency>
+      <dependency>
+        <groupId>org.eclipse.jetty.orbit</groupId>
+        <artifactId>org.objectweb.asm</artifactId>
+        <version>3.1.0.v200803061910</version>
+      </dependency>
+      <dependency>
+        <groupId>org.eclipse.jetty.orbit</groupId>
+        <artifactId>javax.activation</artifactId>
+        <version>1.1.0.v201105071233</version>
+      </dependency>
+      <dependency>
+        <groupId>org.eclipse.jetty.orbit</groupId>
+        <artifactId>javax.mail.glassfish</artifactId>
+        <version>1.4.1.v201005082020</version>
+      </dependency>
+      <dependency>
+        <groupId>org.eclipse.jetty.orbit</groupId>
+        <artifactId>javax.transaction</artifactId>
+        <version>1.1.1.v201105210645</version>
+      </dependency>
+      <dependency>
+        <groupId>org.eclipse.jetty.orbit</groupId>
+        <artifactId>javax.security.auth.message</artifactId>
+        <version>1.0.0.v201108011116</version>
+      </dependency>
+      <!--
+      <dependency>
+        <groupId>org.eclipse.jetty.orbit</groupId>
+        <artifactId>javax.servlet.jsp</artifactId>
+        <version>2.1.0.v201105211820</version>
+      </dependency>
+      <dependency>
+        <groupId>org.eclipse.jetty.orbit</groupId>
+        <artifactId>javax.servlet.jsp.jstl</artifactId>
+        <version>1.2.0.v201105211821</version>
+      </dependency>
+      <dependency>
+        <groupId>org.eclipse.jetty.orbit</groupId>
+        <artifactId>javax.el</artifactId>
+        <version>2.1.0.v201105211819</version>
+      </dependency>
+      <dependency>
+        <groupId>org.eclipse.jetty.orbit</groupId>
+        <artifactId>com.sun.el</artifactId>
+        <version>1.0.0.v201105211818</version>
+      </dependency>
+      <dependency>
+        <groupId>org.eclipse.jetty.orbit</groupId>
+        <artifactId>org.apache.jasper.glassfish</artifactId>
+        <version>2.1.0.v201110031002</version>
+      </dependency>
+      <dependency>
+        <groupId>org.eclipse.jetty.orbit</groupId>
+        <artifactId>org.apache.taglibs.standard.glassfish</artifactId>
+        <version>1.2.0.v201112081803</version>
+      </dependency>
+      <dependency>
+        <groupId>org.eclipse.jetty.orbit</groupId>
+        <artifactId>org.eclipse.jdt.core</artifactId>
+        <version>3.7.1</version>
+      </dependency>
+        -->
+
+      <!-- Old Deps -->
+      <dependency>
+        <groupId>org.apache.maven</groupId>
+        <artifactId>maven-plugin-tools-api</artifactId>
+        <version>2.0</version>
+      </dependency>
+      <dependency>
+        <groupId>org.eclipse.jetty.toolchain</groupId>
+        <artifactId>jetty-test-helper</artifactId>
+        <version>2.5</version>
+      </dependency>
+      <dependency>
+        <groupId>org.slf4j</groupId>
+        <artifactId>jcl104-over-slf4j</artifactId>
+        <version>${slf4j-version}</version>
+      </dependency>
+      <dependency>
+        <groupId>org.slf4j</groupId>
+        <artifactId>log4j-over-slf4j</artifactId>
+        <version>${slf4j-version}</version>
+      </dependency>
+      <dependency>
+        <groupId>org.slf4j</groupId>
+        <artifactId>slf4j-api</artifactId>
+        <version>${slf4j-version}</version>
+      </dependency>
+      <dependency>
+        <groupId>junit</groupId>
+        <artifactId>junit</artifactId>
+        <version>4.11</version>
+      </dependency>
+      <dependency>
+        <groupId>org.hamcrest</groupId>
+        <artifactId>hamcrest-core</artifactId>
+        <version>1.3</version>
+      </dependency>
+      <dependency>
+        <groupId>org.hamcrest</groupId>
+        <artifactId>hamcrest-library</artifactId>
+        <version>1.3</version>
+      </dependency>
+      <dependency>
+        <groupId>org.mockito</groupId>
+        <artifactId>mockito-core</artifactId>
+        <version>1.9.5</version>
+      </dependency>
+    </dependencies>
+  </dependencyManagement>
+  <!--
+    Usage:
+    configure settings.xml for jetty.eclipse.website server entry
+    > mvn -Paggregate-site javadoc:aggregate jxr:jxr
+    > mvn -N site:deploy
+    or
+    > mvn -N site:sshdeploy     (for ssh users w/passphrase and ssh-agent)
+   -->
+  <profiles>
+    <profile>
+      <!-- Modules that are only for JDK7+ builds -->
+      <id>JDK7-plus-modules</id>
+      <activation>
+        <jdk>[1.7,)</jdk>
+      </activation>
+      <modules>
+        <module>jetty-spdy</module>
+      </modules>
+    </profile>
+    <profile>
+      <id>eclipse-release</id>
+   <build>
+    <plugins>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-enforcer-plugin</artifactId>
+        <executions>
+          <execution>
+            <id>enforce-java</id>
+            <goals>
+              <goal>enforce</goal>
+            </goals>
+            <configuration>
+              <rules>
+                <requireJavaVersion>
+                  <version>[1.7,)</version>
+                </requireJavaVersion>
+              </rules>    
+            </configuration>
+          </execution>
+        </executions>
+      </plugin>
+    </plugins>
+  </build>
+    </profile>
+    <profile>
+      <!--
+        Moves the jetty-aggregate build tree to a profile called 'aggregates'.
+        It is active by default, but being in a profile allows it to be
+        disabled via the "-P-aggregates" command line on maven.
+        (Useful for running site plugin with deep reporting and avoiding
+         duplicate hits on aggregated classes) -->
+      <id>aggregates</id>
+      <activation>
+        <activeByDefault>true</activeByDefault>
+        <file>
+          <exists>${basedir}/pom.xml</exists>
+        </file>
+      </activation>
+      <modules>
+        <module>jetty-aggregate</module>
+      </modules>
+    </profile>
+    <profile>
+      <!--
+        Moves the jetty-osgi build tree to a profile called 'osgi'.
+        It is active by default, but being in a profile allows it to be
+        disabled via the "-P-osgi" command line on maven (if need be).
+        -->
+      <id>osgi</id>
+      <activation>
+        <activeByDefault>true</activeByDefault>
+        <file>
+          <exists>${basedir}/pom.xml</exists>
+        </file>
+      </activation>
+      <modules>
+        <module>jetty-osgi</module>
+      </modules>
+    </profile>
+    <profile>
+      <id>update-version</id>
+      <build>
+        <plugins>
+          <plugin>
+            <groupId>org.eclipse.jetty.toolchain</groupId>
+            <artifactId>jetty-version-maven-plugin</artifactId>
+            <executions>
+              <execution>
+                <id>gen-versiontxt</id>
+                <phase>generate-resources</phase>
+                <goals>
+                  <goal>update-version-text</goal>
+                </goals>
+                <configuration>
+                  <refreshTags>true</refreshTags>
+                  <copyGenerated>true</copyGenerated>
+                  <attachArtifact>false</attachArtifact>
+                  <updateDate>true</updateDate>
+                </configuration>
+              </execution>
+            </executions>
+          </plugin>
+        </plugins>
+      </build>
+    </profile>
+    <profile>
+      <id>cobertura</id>
+      <reporting>
+        <plugins>
+          <plugin>
+            <groupId>org.codehaus.mojo</groupId>
+            <artifactId>cobertura-maven-plugin</artifactId>
+            <configuration>
+              <maxmem>512m</maxmem>
+            </configuration>
+          </plugin>
+          <plugin>
+            <groupId>org.apache.maven.plugins</groupId>
+            <artifactId>maven-javadoc-plugin</artifactId>
+            <reportSets>
+              <reportSet>
+                <id>just-javadoc-no-aggregate</id>
+                <reports>
+                  <report>javadoc</report>
+                </reports>
+                <inherited>true</inherited>
+                <configuration>
+                  <minmemory>256m</minmemory>
+                  <maxmemory>1g</maxmemory>
+                  <excludePackageNames>com.acme</excludePackageNames>
+                  <links>
+                    <link>http://java.sun.com/j2se/1.5.0/docs/api</link>
+                    <link>http://java.sun.com/javaee/5/docs/api</link>
+                    <link>http://junit.sourceforge.net/javadoc/</link>
+                  </links>
+                  <tags>
+                    <tag>
+                      <name>org.apache.xbean.XBean</name>
+                      <placement>X</placement>
+                      <head />
+                    </tag>
+                  </tags>
+                </configuration>
+              </reportSet>
+            </reportSets>
+          </plugin>
+         </plugins>
+      </reporting>
+      <build>
+        <pluginManagement>
+          <plugins>
+            <plugin>
+              <groupId>org.apache.maven.plugins</groupId>
+              <artifactId>maven-surefire-plugin</artifactId>
+              <configuration>
+                <testFailureIgnore>true</testFailureIgnore>
+              </configuration>
+            </plugin>
+          </plugins>
+        </pluginManagement>
+      </build>
+    </profile>
+    <profile>
+      <id>maven-3</id>
+      <activation>
+        <file>
+          <!--  This employs that the basedir expression is only recognized by Maven 3.x (see MNG-2363) -->
+          <exists>${basedir}</exists>
+        </file>
+      </activation>
+      <build>
+        <plugins>
+          <plugin>
+            <artifactId>maven-site-plugin</artifactId>
+            <executions>
+              <execution>
+                <id>attach-descriptor</id>
+                <goals>
+                  <goal>attach-descriptor</goal>
+                </goals>
+              </execution>
+            </executions>
+          </plugin>
+        </plugins>
+      </build>
+    </profile>
+    <profile>
+      <id>aggregate-site</id>
+      <build>
+        <plugins>
+          <plugin>
+            <groupId>org.apache.maven.plugins</groupId>
+            <artifactId>maven-jxr-plugin</artifactId>
+            <configuration>
+              <aggregate>true</aggregate>
+            </configuration>
+          </plugin>
+          <plugin>
+            <groupId>org.apache.maven.plugins</groupId>
+            <artifactId>maven-javadoc-plugin</artifactId>
+            <configuration>
+              <excludePackageNames>com.acme</excludePackageNames>
+              <links>
+                <link>http://java.sun.com/javase/6/docs/api/</link>
+                <link>http://java.sun.com/javaee/6/docs/api</link>
+                <link>http://junit.sourceforge.net/javadoc/</link>
+              </links>
+              <tags>
+                <tag>
+                  <name>org.apache.xbean.XBean</name>
+                  <placement>X</placement>
+                  <head />
+                </tag>
+              </tags>
+              <header>
+                <![CDATA[
+                    <script type="text/javascript">
+                      var _gaq = _gaq || [];
+                      _gaq.push(['_setAccount', 'UA-1149868-7']);
+                      _gaq.push(['_trackPageview']);
+                      (function() {
+                        var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+                        ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+                        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+                      })();
+                   </script>
+                ]]>
+              </header>           
+            </configuration>
+          </plugin>
+        </plugins>
+      </build>
+    </profile>
+  </profiles>
+</project>
diff --git a/src/assembly/config.xml b/src/assembly/config.xml
new file mode 100644
index 0000000..b0592ae
--- /dev/null
+++ b/src/assembly/config.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<assembly>
+  <id>config</id>
+  <includeBaseDirectory>false</includeBaseDirectory>
+  <formats>
+    <format>jar</format>
+  </formats>
+  <fileSets>
+
+    <fileSet>
+      <directory>src/main/config</directory>
+      <outputDirectory></outputDirectory>
+      <includes>
+        <include>**</include>
+      </includes>
+    </fileSet>
+  </fileSets>
+
+</assembly>
+
diff --git a/src/assembly/site-component.xml b/src/assembly/site-component.xml
new file mode 100644
index 0000000..7c48a5b
--- /dev/null
+++ b/src/assembly/site-component.xml
@@ -0,0 +1,15 @@
+<assembly>
+  <id>site-component</id>
+  <formats>
+    <format>jar</format>
+  </formats>
+  <fileSets>
+    <fileSet>
+      <directory>${basedir}</directory>
+      <outputDirectory>jetty-xml</outputDirectory>
+      <includes>
+        <include>src/main/resources/org/eclipse/**</include>
+      </includes>
+    </fileSet>
+  </fileSets>
+</assembly>
diff --git a/src/config/etc/README.spnego b/src/config/etc/README.spnego
new file mode 100644
index 0000000..0b4cc5b
--- /dev/null
+++ b/src/config/etc/README.spnego
@@ -0,0 +1,62 @@
+This setup will enable you to authenticate a user via spnego into your 
+webapp.
+
+To run with spengo enabled the following command line options are required:
+
+-Djava.security.krb5.conf=/path/to/jetty/etc/krb5.ini
+-Djava.security.auth.login.config=/path/to/jetty/etc/spnego.conf 
+-Djavax.security.auth.useSubjectCredsOnly=false
+
+The easiest place to put these lines are in the start.ini file.
+
+For debugging the spengo authentication the following options are helpful:
+
+-Dorg.eclipse.jetty.LEVEL=debug
+-Dsun.security.spnego.debug=true
+
+
+Spengo Authentication is enabled in the webapp with the following setup.
+
+  <security-constraint>
+    <web-resource-collection>
+      <web-resource-name>Secure Area</web-resource-name>
+      <url-pattern>/secure/me/*</url-pattern>
+    </web-resource-collection>
+    <auth-constraint>
+      <role-name>MORTBAY.ORG</role-name>  <-- this is the domain that the user is a member of
+    </auth-constraint>
+  </security-constraint>
+
+  <login-config>
+    <auth-method>SPNEGO</auth-method>
+    <realm-name>Test Realm</realm-name>
+    (optionally to add custom error page)
+    <spnego-login-config>
+      <spengo-error-page>/loginError.html?param=foo</spnego-error-page>
+    </spnego-login-config>
+  </login-config>
+   
+A corresponding UserRealm needs to be created either programmatically if 
+embedded, via the jetty.xml or in a context file for the webapp.
+
+(in the jetty.xml)
+
+   <Call name="addBean">
+      <Arg>
+        <New class="org.eclipse.jetty.security.SpnegoLoginService">
+          <Set name="name">Test Realm</Set>
+          <Set name="config"><Property name="jetty.home" default="."/>/etc/spnego.properties</Set>
+        </New>
+      </Arg>
+    </Call>
+
+(context file)
+  <Get name="securityHandler">
+    <Set name="loginService">
+      <New class="org.eclipse.jetty.security.SpnegoLoginService">
+	    <Set name="name">Test Realm</Set>
+	    <Set name="config"><SystemProperty name="jetty.home" default="."/>/etc/spnego.properties</Set>
+      </New>
+    </Set>
+    <Set name="checkWelcomeFiles">true</Set>
+  </Get>
\ No newline at end of file
diff --git a/src/config/etc/jdbcRealm.properties b/src/config/etc/jdbcRealm.properties
new file mode 100644
index 0000000..48104d8
--- /dev/null
+++ b/src/config/etc/jdbcRealm.properties
@@ -0,0 +1,72 @@
+# 
+# This is a sample properties file for the org.eclipse.jetty.security.JDBCLoginService
+# implemtation of the UserRealm interface.  This allows Jetty users authentication 
+# to work from a database.
+#
+#   +-------+      +------------+      +-------+
+#   | users |      | user_roles |      | roles |
+#   +-------+      +------------+      +-------+
+#   | id    |     /| user_id    |\     | id    |
+#   | user  -------| role_id    |------- role  |
+#   | pwd   |     \|            |/     |       |
+#   +-------+      +------------+      +-------+
+#   
+# 
+# 'cachetime' is a time in seconds to cache positive database
+# lookups in internal hash table. Set to 0 to disable caching.
+# 
+#
+# For MySQL:
+# create a MYSQL user called "jetty" with password "jetty"
+#
+# Create the tables:
+# create table users 
+# (
+#     id integer primary key,
+#     username varchar(100) not null unique key,
+#     pwd varchar(20) not null
+# );
+# 
+# create table roles
+# (
+#     id integer primary key,
+#     role varchar(100) not null unique key
+# );    
+#
+# create table user_roles
+# (
+#     user_id integer not null,
+#     role_id integer not null,
+#     unique key (user_id, role_id),
+#     index(user_id)
+# );
+#
+# I'm not sure unique key with a first component of user_id will be
+# user by MySQL in query, so additional index wouldn't hurt.
+#
+# To test JDBC implementation:
+#
+# mysql> insert into users values (1, 'admin', 'password');
+# mysql> insert into roles values (1, 'server-administrator');
+# mysql> insert into roles values (2, 'content-administrator');
+# mysql> insert into user_roles values (1, 1);
+# mysql> insert into user_roles values (1, 2);
+#
+# Replace HashUserRealm in etc/admin.xml with JDBCUserRealm and
+# set path to properties file.
+#
+jdbcdriver = org.gjt.mm.mysql.Driver
+url = jdbc:mysql://localhost/jetty
+username = jetty
+password = jetty
+usertable = users
+usertablekey = id
+usertableuserfield = username
+usertablepasswordfield = pwd
+roletable = roles
+roletablekey = id
+roletablerolefield = role
+userroletable = user_roles
+userroletableuserkey = user_id
+userroletablerolekey = role_id
+cachetime = 300
diff --git a/src/config/etc/jetty-bio-ssl.xml b/src/config/etc/jetty-bio-ssl.xml
new file mode 100644
index 0000000..3386b7b
--- /dev/null
+++ b/src/config/etc/jetty-bio-ssl.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0"?>
+<!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "http://www.eclipse.org/jetty/configure.dtd">
+
+<!-- =============================================================== -->
+<!-- Configure SSL for the Jetty Server                              -->
+<!-- this configuration file should be used in combination with      -->
+<!-- other configuration files.  e.g.                                -->
+<!--    java -jar start.jar etc/jetty-ssl.xml                        -->
+<!-- =============================================================== -->
+<Configure id="Server" class="org.eclipse.jetty.server.Server">
+
+  <Call name="addConnector">
+    <Arg>
+      <New class="org.eclipse.jetty.server.ssl.SslSocketConnector">
+	<Set name="Port">9443</Set>
+	<Set name="maxIdleTime">30000</Set>
+	<Set name="Keystore"><Property name="jetty.home" default="." />/etc/keystore</Set>
+	<Set name="Password">OBF:1vny1zlo1x8e1vnw1vn61x8g1zlu1vn4</Set>
+	<Set name="KeyPassword">OBF:1u2u1wml1z7s1z7a1wnl1u2g</Set>
+        <Set name="truststore"><Property name="jetty.home" default="." />/etc/keystore</Set>
+        <Set name="trustPassword">OBF:1vny1zlo1x8e1vnw1vn61x8g1zlu1vn4</Set>
+      </New>
+    </Arg>
+  </Call>
+</Configure>
diff --git a/src/config/etc/jetty-bio.xml b/src/config/etc/jetty-bio.xml
new file mode 100644
index 0000000..66950ee
--- /dev/null
+++ b/src/config/etc/jetty-bio.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0"?>
+<!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "http://www.eclipse.org/jetty/configure.dtd">
+
+<!-- =============================================================== -->
+<!-- Mixin configuration for Block socket connector                  -->
+<!--                                                                 -->
+<!-- =============================================================== -->
+
+
+<Configure id="Server" class="org.eclipse.jetty.server.Server">
+
+    <!-- Use this connector if NIO is not available.  -->
+    <Call name="addConnector">
+      <Arg>
+          <New class="org.eclipse.jetty.server.bio.SocketConnector">
+            <Set name="port"><Property name="jetty.bio.port" default="8081"/></Set>
+            <Set name="maxIdleTime">50000</Set>
+            <Set name="lowResourceMaxIdleTime">1500</Set>
+          </New>
+      </Arg>
+    </Call>
+
+</Configure>
diff --git a/src/config/etc/jetty-debug.xml b/src/config/etc/jetty-debug.xml
new file mode 100644
index 0000000..6d66953
--- /dev/null
+++ b/src/config/etc/jetty-debug.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0"?>
+<!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "http://www.eclipse.org/jetty/configure.dtd">
+
+<!-- =============================================================== -->
+<!-- Mixin the DebugHandler                                          -->
+<!-- =============================================================== -->
+
+
+<Configure id="Server" class="org.eclipse.jetty.server.Server">
+    <Get id="oldhandler" name="handler"/>
+    <Set name="handler">
+      <New id="DebugHandler" class="org.eclipse.jetty.server.handler.DebugHandler">
+        <Set name="handler"><Ref id="oldhandler"/></Set>
+	<Set name="outputStream">
+	  <New class="org.eclipse.jetty.util.RolloverFileOutputStream">
+	    <Arg type="String"><Property name="jetty.logs" default="./logs"/>/yyyy_mm_dd.debug.log</Arg>
+	    <Arg type="boolean">true</Arg> <!-- append -->
+	    <Arg type="int">90</Arg> <!-- retain days -->
+	  </New>
+	</Set>
+      </New>
+    </Set>
+</Configure>
diff --git a/src/config/etc/jetty-fileserver.xml b/src/config/etc/jetty-fileserver.xml
new file mode 100644
index 0000000..de15b38
--- /dev/null
+++ b/src/config/etc/jetty-fileserver.xml
@@ -0,0 +1,37 @@
+<?xml version="1.0"?>
+<!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "http://www.eclipse.org/jetty/configure.dtd">
+
+
+<Configure id="FileServer" class="org.eclipse.jetty.server.Server">
+
+    <Call name="addConnector">
+      <Arg>
+          <New class="org.eclipse.jetty.server.nio.SelectChannelConnector">
+            <Set name="port">8080</Set>
+          </New>
+      </Arg>
+    </Call>
+
+    <Set name="handler">
+      <New class="org.eclipse.jetty.server.handler.HandlerList">
+        <Set name="handlers">
+	  <Array type="org.eclipse.jetty.server.Handler">
+	    <Item>
+	      <New class="org.eclipse.jetty.server.handler.ResourceHandler">
+	        <Set name="directoriesListed">true</Set>
+		<Set name="welcomeFiles">
+		  <Array type="String"><Item>index.html</Item></Array>
+		</Set>
+	        <Set name="resourceBase">.</Set>
+	      </New>
+	    </Item>
+	    <Item>
+	      <New class="org.eclipse.jetty.server.handler.DefaultHandler">
+	      </New>
+	    </Item>
+	  </Array>
+        </Set>
+      </New>
+    </Set>
+    
+</Configure>
diff --git a/src/config/etc/jetty-ipaccess.xml b/src/config/etc/jetty-ipaccess.xml
new file mode 100644
index 0000000..d5fb5f8
--- /dev/null
+++ b/src/config/etc/jetty-ipaccess.xml
@@ -0,0 +1,31 @@
+<?xml version="1.0"?>
+<!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "http://www.eclipse.org/jetty/configure.dtd">
+
+<!-- =============================================================== -->
+<!-- Mixin the Statistics Handler                                    -->
+<!-- =============================================================== -->
+
+
+<Configure id="Server" class="org.eclipse.jetty.server.Server">
+
+    <Get id="oldhandler" name="handler"/>
+
+    <Set name="handler">
+     <New id="IPAccessHandler" class="org.eclipse.jetty.server.handler.IPAccessHandler">
+      <Set name="handler"><Ref id="oldhandler"/></Set>
+      <Set name="white">
+        <Array type="String">
+	  <Item>127.0.0.1</Item>
+	  <Item>127.0.0.2/*.html</Item>
+	</Array>
+      </Set>
+      <Set name="black">
+        <Array type="String">
+	  <Item>127.0.0.1/blacklisted</Item>
+	  <Item>127.0.0.2/black.html</Item>
+	</Array>
+      </Set>
+     </New>
+    </Set>
+    
+</Configure>
diff --git a/src/config/etc/jetty-jmx.xml b/src/config/etc/jetty-jmx.xml
new file mode 100644
index 0000000..4db0dbb
--- /dev/null
+++ b/src/config/etc/jetty-jmx.xml
@@ -0,0 +1,103 @@
+<?xml version="1.0"?>
+<!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "http://www.eclipse.org/jetty/configure.dtd">
+
+<!-- ============================================================================ -->
+<!-- To correctly start Jetty with JMX module enabled, this configuration         -->
+<!-- file must appear first in the list of the configuration files.               -->
+<!-- The simplest way to achieve this is to add etc/jetty-jmx.xml as the          -->
+<!-- first file in configuration file list at the end of start.ini file.          -->
+<!-- ============================================================================ -->
+<Configure id="Server" class="org.eclipse.jetty.server.Server">
+
+  <!-- =========================================================== -->
+  <!-- Set the java.rmi.server.hostname property in case you've    -->
+  <!-- got a misconfigured /etc/hosts entry or the like.           -->
+  <!-- =========================================================== -->
+  <!-- 
+  <Call class="java.lang.System" name="setProperty">
+    <Arg>java.rmi.server.hostname</Arg>
+    <Arg>127.0.0.1</Arg>
+  </Call>
+  -->
+  
+  <!-- =========================================================== -->
+  <!-- Initialize an mbean server                                  -->
+  <!-- =========================================================== -->
+  <Call id="MBeanServer" class="java.lang.management.ManagementFactory"
+    name="getPlatformMBeanServer" />
+
+  <!-- =========================================================== -->
+  <!-- Initialize the Jetty MBean container                        -->
+  <!-- =========================================================== -->
+  <New id="MBeanContainer" class="org.eclipse.jetty.jmx.MBeanContainer">
+    <Arg><Ref id="MBeanServer" /></Arg>
+    <Call name="start"/>
+  </New>
+
+  <!-- Add to the Server to listen for object events -->
+  <Get id="Container" name="container">
+    <Call name="addEventListener">
+      <Arg><Ref id="MBeanContainer" /></Arg>
+    </Call>
+  </Get>
+
+  <!-- Add to the Server as a managed lifecycle -->
+  <Call name="addBean">
+    <Arg><Ref id="MBeanContainer"/></Arg>
+    <Arg type="boolean">true</Arg>
+  </Call>
+
+  <!-- Add the static log -->
+  <Ref id="MBeanContainer">
+    <Call name="addBean">
+      <Arg>
+        <New class="org.eclipse.jetty.util.log.Log"/>
+      </Arg>
+    </Call>
+  </Ref>
+  
+  <!-- In order to connect to the JMX server remotely from a different
+       process, possibly running on a different host, Jetty JMX module
+       can create a remote JMX connector. It requires RMI registry to
+       be started prior to creating the connector server because the
+       JMX specification uses RMI to facilitate connections.        
+   -->
+
+  <!-- Optionally start the RMI registry. Normally RMI registry runs on
+       port 1099. The argument below can be changed in order to comply
+       with the firewall requirements.
+  -->
+  <!--
+  <Call name="createRegistry" class="java.rmi.registry.LocateRegistry">
+    <Arg type="java.lang.Integer"><SystemProperty name="jetty.jmxrmiport" default="1099"/></Arg>
+    <Call name="sleep" class="java.lang.Thread">
+       <Arg type="java.lang.Integer">1000</Arg>
+    </Call>
+  </Call>
+  -->
+ 
+  <!-- Optionally add a remote JMX connector. The parameters of the constructor
+       below specify the JMX service URL, and the object name string for the
+       connector server bean. The parameters of the JMXServiceURL constructor 
+       specify the protocol that clients will use to connect to the remote JMX
+       connector (RMI), the hostname of the server (local hostname), port number
+       (automatically assigned), and the URL path. Note that URL path contains
+       the RMI registry hostname and port number, that may need to be modified
+       in order to comply with the firewall requirements. 
+  -->
+  <!--
+  <New id="ConnectorServer" class="org.eclipse.jetty.jmx.ConnectorServer">
+    <Arg>
+      <New class="javax.management.remote.JMXServiceURL">
+        <Arg type="java.lang.String">rmi</Arg>
+        <Arg type="java.lang.String" />
+        <Arg type="java.lang.Integer"><SystemProperty name="jetty.jmxrmiport" default="1099"/></Arg>
+        <Arg type="java.lang.String">/jndi/rmi://<SystemProperty name="jetty.jmxrmihost" default="localhost"/>:<SystemProperty name="jetty.jmxrmiport" default="1099"/>/jmxrmi</Arg>
+      </New>
+    </Arg>
+    <Arg>org.eclipse.jetty.jmx:name=rmiconnectorserver</Arg>
+    <Call name="start" />
+  </New>
+  -->
+</Configure>
+
diff --git a/src/config/etc/jetty-logging.xml b/src/config/etc/jetty-logging.xml
new file mode 100644
index 0000000..2060a22
--- /dev/null
+++ b/src/config/etc/jetty-logging.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0"?>
+<!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "http://www.eclipse.org/jetty/configure.dtd">
+
+
+<!-- =============================================================== -->
+<!-- Configure stderr and stdout to a Jetty rollover log file        -->
+<!-- this configuration file should be used in combination with      -->
+<!-- other configuration files.  e.g.                                -->
+<!--    java -jar start.jar etc/jetty-logging.xml                    -->
+<!-- =============================================================== -->
+<Configure id="Server" class="org.eclipse.jetty.server.Server">
+
+    <New id="ServerLog" class="java.io.PrintStream">
+      <Arg>
+        <New class="org.eclipse.jetty.util.RolloverFileOutputStream">
+          <Arg><Property name="jetty.logs" default="./logs"/>/yyyy_mm_dd.stderrout.log</Arg>
+          <Arg type="boolean">false</Arg>
+          <Arg type="int">90</Arg>
+          <Arg><Call class="java.util.TimeZone" name="getTimeZone"><Arg>GMT</Arg></Call></Arg>
+          <Get id="ServerLogName" name="datedFilename"/>
+        </New>
+      </Arg>
+    </New>
+
+    <Call class="org.eclipse.jetty.util.log.Log" name="info"><Arg>Redirecting stderr/stdout to <Ref id="ServerLogName"/></Arg></Call>
+    <Call class="java.lang.System" name="setErr"><Arg><Ref id="ServerLog"/></Arg></Call>
+    <Call class="java.lang.System" name="setOut"><Arg><Ref id="ServerLog"/></Arg></Call>
+
+</Configure>
+
+
+
diff --git a/src/config/etc/jetty-proxy.xml b/src/config/etc/jetty-proxy.xml
new file mode 100644
index 0000000..5bc46c3
--- /dev/null
+++ b/src/config/etc/jetty-proxy.xml
@@ -0,0 +1,64 @@
+<?xml version="1.0"?>
+<!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "http://www.eclipse.org/jetty/configure.dtd">
+
+<!-- =============================================================== -->
+<!-- Configure the Jetty Server                                      -->
+<!--                                                                 -->
+<!-- Documentation of this file format can be found at:              -->
+<!-- http://docs.codehaus.org/display/JETTY/jetty.xml                -->
+<!--                                                                 -->
+<!-- =============================================================== -->
+
+
+<Configure id="Proxy" class="org.eclipse.jetty.server.Server">
+
+    <!-- =========================================================== -->
+    <!-- Server Thread Pool                                          -->
+    <!-- =========================================================== -->
+    <Set name="ThreadPool">
+      <!-- Default queued blocking threadpool 
+      -->
+      <New class="org.eclipse.jetty.util.thread.QueuedThreadPool">
+        <Set name="minThreads">10</Set>
+        <Set name="maxThreads">50</Set>
+      </New>
+    </Set>
+
+
+    <!-- =========================================================== -->
+    <!-- Set connectors                                              -->
+    <!-- =========================================================== -->
+
+    <Call name="addConnector">
+      <Arg>
+          <New class="org.eclipse.jetty.server.nio.SelectChannelConnector">
+            <Set name="host"><Property name="jetty.host" /></Set>
+            <Set name="port"><Property name="jetty.port" default="8888"/></Set>
+            <Set name="maxIdleTime">300000</Set>
+            <Set name="Acceptors">2</Set>
+            <Set name="statsOn">false</Set>
+	    <Set name="lowResourcesConnections">20000</Set>
+	    <Set name="lowResourcesMaxIdleTime">5000</Set>
+          </New>
+      </Arg>
+    </Call>
+
+    <!-- =========================================================== -->
+    <Set name="handler">
+      <New id="Servlets" class="org.eclipse.jetty.servlet.ServletHandler">
+        <Call name="addServletWithMapping">
+	  <Arg>org.eclipse.jetty.servlets.ProxyServlet</Arg>
+	  <Arg>/</Arg>
+	</Call>
+      </New>
+    </Set>
+    
+    <!-- =========================================================== -->
+    <!-- extra options                                               -->
+    <!-- =========================================================== -->
+    <Set name="stopAtShutdown">true</Set>
+    <Set name="sendServerVersion">true</Set>
+    <Set name="sendDateHeader">true</Set>
+    <Set name="gracefulShutdown">1000</Set>
+
+</Configure>
diff --git a/src/config/etc/jetty-requestlog.xml b/src/config/etc/jetty-requestlog.xml
new file mode 100644
index 0000000..45d3aab
--- /dev/null
+++ b/src/config/etc/jetty-requestlog.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0"?>
+<!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "http://www.eclipse.org/jetty/configure.dtd">
+
+<!-- =============================================================== -->
+<!-- Configure the Jetty Request Log                                 -->
+<!-- =============================================================== -->
+
+<Configure id="Server" class="org.eclipse.jetty.server.Server">
+
+    <!-- =========================================================== -->
+    <!-- Configure Request Log                                       -->
+    <!-- =========================================================== -->
+    <Ref id="Handlers">
+      <Call name="addHandler">
+        <Arg>
+          <New id="RequestLog" class="org.eclipse.jetty.server.handler.RequestLogHandler">
+	    <Set name="requestLog">
+	      <!-- Use AsyncNCSARequestLog for improved request latency -->
+	      <New id="RequestLogImpl" class="org.eclipse.jetty.server.NCSARequestLog">
+		<Set name="filename"><Property name="jetty.logs" default="./logs"/>/yyyy_mm_dd.request.log</Set>
+		<Set name="filenameDateFormat">yyyy_MM_dd</Set>
+		<Set name="retainDays">90</Set>
+		<Set name="append">true</Set>
+		<Set name="extended">false</Set>
+		<Set name="logCookies">false</Set>
+		<Set name="LogTimeZone">GMT</Set>
+	      </New>
+	    </Set>
+	  </New>
+        </Arg>
+      </Call>
+    </Ref>
+
+</Configure>
diff --git a/src/config/etc/jetty-ssl.xml b/src/config/etc/jetty-ssl.xml
new file mode 100644
index 0000000..4c0c9ff
--- /dev/null
+++ b/src/config/etc/jetty-ssl.xml
@@ -0,0 +1,35 @@
+<?xml version="1.0"?>
+<!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "http://www.eclipse.org/jetty/configure.dtd">
+
+<!-- =============================================================== -->
+<!-- Configure SSL for the Jetty Server                              -->
+<!-- this configuration file should be used in combination with      -->
+<!-- other configuration files.  e.g.                                -->
+<!--    java -jar start.jar etc/jetty-ssl.xml                        -->
+<!--                                                                 -->
+<!--  alternately, add to the start.ini for easier usage             -->
+<!-- =============================================================== -->
+<Configure id="Server" class="org.eclipse.jetty.server.Server">
+
+  <!-- if NIO is not available, use org.eclipse.jetty.server.ssl.SslSocketConnector -->
+  
+  <New id="sslContextFactory" class="org.eclipse.jetty.http.ssl.SslContextFactory">
+    <Set name="KeyStore"><Property name="jetty.home" default="." />/etc/keystore</Set>
+    <Set name="KeyStorePassword">OBF:1vny1zlo1x8e1vnw1vn61x8g1zlu1vn4</Set>
+    <Set name="KeyManagerPassword">OBF:1u2u1wml1z7s1z7a1wnl1u2g</Set>
+    <Set name="TrustStore"><Property name="jetty.home" default="." />/etc/keystore</Set>
+    <Set name="TrustStorePassword">OBF:1vny1zlo1x8e1vnw1vn61x8g1zlu1vn4</Set>
+  </New>
+
+  <Call name="addConnector">
+    <Arg>
+      <New class="org.eclipse.jetty.server.ssl.SslSelectChannelConnector">
+        <Arg><Ref id="sslContextFactory" /></Arg>
+        <Set name="Port">8443</Set>
+        <Set name="maxIdleTime">30000</Set>
+        <Set name="Acceptors">2</Set>
+        <Set name="AcceptQueueSize">100</Set>
+      </New>
+    </Arg>
+  </Call>
+</Configure>
diff --git a/src/config/etc/jetty-stats.xml b/src/config/etc/jetty-stats.xml
new file mode 100644
index 0000000..e0a0c7f
--- /dev/null
+++ b/src/config/etc/jetty-stats.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0"?>
+<!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "http://www.eclipse.org/jetty/configure.dtd">
+
+<!-- =============================================================== -->
+<!-- Mixin the Statistics Handler                                    -->
+<!-- =============================================================== -->
+
+
+<Configure id="Server" class="org.eclipse.jetty.server.Server">
+
+    <Get id="oldhandler" name="handler"/>
+
+    <Set name="handler">
+     <New id="StatsHandler" class="org.eclipse.jetty.server.handler.StatisticsHandler">
+      <Set name="handler"><Ref id="oldhandler"/></Set>
+     </New>
+    </Set>
+    
+</Configure>
diff --git a/src/config/etc/jetty-xinetd.xml b/src/config/etc/jetty-xinetd.xml
new file mode 100644
index 0000000..c2fbaa2
--- /dev/null
+++ b/src/config/etc/jetty-xinetd.xml
@@ -0,0 +1,56 @@
+<?xml version="1.0"?>
+<!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "http://www.eclipse.org/jetty/configure.dtd">
+
+<!-- =============================================================== -->
+<!-- Configuration for starting up Jetty using inetd/xinetd          -->
+<!-- This feature requires at least Java 5                           -->
+<!--                                                                 -->
+<!-- Making it a mixin for convenience, but note that if used        -->
+<!-- with jetty.xml, Jetty will use multiple connectors              -->
+<!-- =============================================================== -->
+
+<!-- Sample xinetd configuration (restart xinetd after adding the configuration file)
+
+service jetty
+{
+    disable     = no
+
+    id          = jetty
+    type        = UNLISTED     
+    wait        = yes          
+    socket_type = stream
+
+    # change this
+    user        = username
+    group       = groupname
+    port        = 2001
+
+    # sample script for running jetty as a service
+    # replace $JETTY_HOME with /path/to/jetty_home/
+    server      = $JETTY_HOME/bin/jetty-xinetd.sh
+}
+
+-->
+
+<Configure id="Server" class="org.eclipse.jetty.server.Server">
+    <Call name="addConnector">
+      <Arg>
+          <!-- Inherited channel (from inetd/xinetd) -->
+          <New class="org.eclipse.jetty.server.nio.InheritedChannelConnector">
+
+
+            <!-- Optional. Fallback in case System.inheritedChannel() does not give a ServerSocketChannel 
+            <Set name="port"><Property name="jetty.service.port" default="8082"/></Set>
+            -->
+
+            <!-- sane defaults -->
+            <Set name="maxIdleTime">300000</Set>
+            <Set name="Acceptors">2</Set>
+            <Set name="statsOn">false</Set>
+      	    <Set name="lowResourcesConnections">20000</Set>
+	        <Set name="lowResourcesMaxIdleTime">5000</Set>
+          </New>
+      </Arg>
+    </Call>
+</Configure>
+
diff --git a/src/config/etc/jetty.xml b/src/config/etc/jetty.xml
new file mode 100644
index 0000000..153514d
--- /dev/null
+++ b/src/config/etc/jetty.xml
@@ -0,0 +1,79 @@
+<?xml version="1.0"?>
+<!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "http://www.eclipse.org/jetty/configure.dtd">
+
+<!-- =============================================================== -->
+<!-- Configure the Jetty Server                                      -->
+<!--                                                                 -->
+<!-- Documentation of this file format can be found at:              -->
+<!-- http://wiki.eclipse.org/Jetty/Reference/jetty.xml_syntax        -->
+<!--                                                                 -->
+<!-- Additional configuration files are available in $JETTY_HOME/etc -->
+<!-- and can be mixed in.  For example:                              -->
+<!--   java -jar start.jar etc/jetty-ssl.xml                         -->
+<!--                                                                 -->
+<!-- See start.ini file for the default configuraton files           -->
+<!-- =============================================================== -->
+
+
+<Configure id="Server" class="org.eclipse.jetty.server.Server">
+
+    <!-- =========================================================== -->
+    <!-- Server Thread Pool                                          -->
+    <!-- =========================================================== -->
+    <Set name="ThreadPool">
+      <!-- Default queued blocking threadpool -->
+      <New class="org.eclipse.jetty.util.thread.QueuedThreadPool">
+        <Set name="minThreads">10</Set>
+        <Set name="maxThreads">200</Set>
+        <Set name="detailedDump">false</Set>
+      </New>
+    </Set>
+
+    <!-- =========================================================== -->
+    <!-- Set connectors                                              -->
+    <!-- =========================================================== -->
+
+    <Call name="addConnector">
+      <Arg>
+          <New class="org.eclipse.jetty.server.nio.SelectChannelConnector">
+            <Set name="host"><Property name="jetty.host" /></Set>
+            <Set name="port"><Property name="jetty.port" default="8080"/></Set>
+            <Set name="maxIdleTime">300000</Set>
+            <Set name="Acceptors">2</Set>
+            <Set name="statsOn">false</Set>
+            <Set name="confidentialPort">8443</Set>
+	    <Set name="lowResourcesConnections">20000</Set>
+	    <Set name="lowResourcesMaxIdleTime">5000</Set>
+          </New>
+      </Arg>
+    </Call>
+
+    <!-- =========================================================== -->
+    <!-- Set handler Collection Structure                            --> 
+    <!-- =========================================================== -->
+    <Set name="handler">
+      <New id="Handlers" class="org.eclipse.jetty.server.handler.HandlerCollection">
+        <Set name="handlers">
+         <Array type="org.eclipse.jetty.server.Handler">
+           <Item>
+             <New id="Contexts" class="org.eclipse.jetty.server.handler.ContextHandlerCollection"/>
+           </Item>
+           <Item>
+             <New id="DefaultHandler" class="org.eclipse.jetty.server.handler.DefaultHandler"/>
+           </Item>
+         </Array>
+        </Set>
+      </New>
+    </Set>
+
+    <!-- =========================================================== -->
+    <!-- extra options                                               -->
+    <!-- =========================================================== -->
+    <Set name="stopAtShutdown">true</Set>
+    <Set name="sendServerVersion">true</Set>
+    <Set name="sendDateHeader">true</Set>
+    <Set name="gracefulShutdown">1000</Set>
+    <Set name="dumpAfterStart">false</Set>
+    <Set name="dumpBeforeStop">false</Set>
+
+</Configure>
diff --git a/src/config/etc/keystore b/src/config/etc/keystore
new file mode 100644
index 0000000..08f6cda
--- /dev/null
+++ b/src/config/etc/keystore
Binary files differ
diff --git a/src/config/etc/krb5.ini b/src/config/etc/krb5.ini
new file mode 100644
index 0000000..9cea63c
--- /dev/null
+++ b/src/config/etc/krb5.ini
@@ -0,0 +1,23 @@
+[libdefaults]
+default_realm = MORTBAY.ORG
+default_keytab_name = FILE:/path/to/jetty/etc/krb5.keytab
+permitted_enctypes = aes128-cts aes256-cts arcfour-hmac-md5 
+default_tgs_enctypes = aes128-cts aes256-cts arcfour-hmac-md5 
+default_tkt_enctypes = aes128-cts aes256-cts arcfour-hmac-md5 
+
+
+
+[realms]
+MORTBAY.ORG = {
+ 		kdc = 192.168.2.30
+ 		admin_server = 192.168.2.30
+ 		default_domain = MORTBAY.ORG
+}
+
+[domain_realm]
+mortbay.org= MORTBAY.ORG
+.mortbay.org = MORTBAY.ORG
+
+[appdefaults]
+autologin = true
+forwardable = true
diff --git a/src/config/etc/spnego.conf b/src/config/etc/spnego.conf
new file mode 100644
index 0000000..3d5caf8
--- /dev/null
+++ b/src/config/etc/spnego.conf
@@ -0,0 +1,19 @@
+com.sun.security.jgss.initiate {
+     com.sun.security.auth.module.Krb5LoginModule required
+     principal="HTTP/vm.mortbay.org@MORTBAY.ORG" 
+     keyTab="/path/to/jetty/etc/krb5.keytab" 
+     useKeyTab=true
+     storeKey=true 
+     debug=true 
+     isInitiator=false;
+};
+ 
+com.sun.security.jgss.accept {
+     com.sun.security.auth.module.Krb5LoginModule required
+     principal="HTTP/vm.mortbay.org@MORTBAY.ORG" 
+     useKeyTab=true
+     keyTab="/path/to/jetty/etc/krb5.keytab" 
+     storeKey=true 
+     debug=true 
+     isInitiator=false;
+};
diff --git a/src/config/etc/spnego.properties b/src/config/etc/spnego.properties
new file mode 100644
index 0000000..86862ea
--- /dev/null
+++ b/src/config/etc/spnego.properties
@@ -0,0 +1 @@
+targetName = HTTP/vm.mortbay.org
\ No newline at end of file
diff --git a/src/config/etc/webdefault.xml b/src/config/etc/webdefault.xml
new file mode 100644
index 0000000..213138b
--- /dev/null
+++ b/src/config/etc/webdefault.xml
@@ -0,0 +1,527 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+  <!-- ===================================================================== -->
+  <!-- This file contains the default descriptor for web applications.       -->
+  <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
+  <!-- The intent of this descriptor is to include jetty specific or common  -->
+  <!-- configuration for all webapps.   If a context has a webdefault.xml    -->
+  <!-- descriptor, it is applied before the contexts own web.xml file        -->
+  <!--                                                                       -->
+  <!-- A context may be assigned a default descriptor by:                    -->
+  <!--  + Calling WebApplicationContext.setDefaultsDescriptor                -->
+  <!--  + Passed an arg to addWebApplications                                -->
+  <!--                                                                       -->
+  <!-- This file is used both as the resource within the jetty.jar (which is -->
+  <!-- used as the default if no explicit defaults descriptor is set) and it -->
+  <!-- is copied to the etc directory of the Jetty distro and explicitly     -->
+  <!-- by the jetty.xml file.                                                -->
+  <!--                                                                       -->
+  <!-- ===================================================================== -->
+<web-app
+  xmlns="http://java.sun.com/xml/ns/javaee"
+  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
+  metadata-complete="true"
+  version="2.5"
+>
+
+  <description>
+    Default web.xml file.  
+    This file is applied to a Web application before it's own WEB_INF/web.xml file
+  </description>
+
+  <!-- ==================================================================== -->
+  <!-- Removes static references to beans from javax.el.BeanELResolver to   -->
+  <!-- ensure webapp classloader can be released on undeploy                -->
+  <!-- ==================================================================== -->
+  <listener>
+   <listener-class>org.eclipse.jetty.servlet.listener.ELContextCleaner</listener-class>
+  </listener>
+  
+  <!-- ==================================================================== -->
+  <!-- Removes static cache of Methods from java.beans.Introspector to      -->
+  <!-- ensure webapp classloader can be released on undeploy                -->
+  <!-- ==================================================================== -->  
+  <listener>
+   <listener-class>org.eclipse.jetty.servlet.listener.IntrospectorCleaner</listener-class>
+  </listener>
+  
+
+  <!-- ==================================================================== -->
+  <!-- Context params to control Session Cookies                            -->
+  <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  -->
+  <!--
+    UNCOMMENT TO ACTIVATE <context-param> <param-name>org.eclipse.jetty.servlet.SessionDomain</param-name> <param-value>127.0.0.1</param-value> </context-param> <context-param>
+    <param-name>org.eclipse.jetty.servlet.SessionPath</param-name> <param-value>/</param-value> </context-param> <context-param> <param-name>org.eclipse.jetty.servlet.MaxAge</param-name>
+    <param-value>-1</param-value> </context-param>
+  -->
+
+  <!-- ==================================================================== -->
+  <!-- The default servlet.                                                 -->
+  <!-- This servlet, normally mapped to /, provides the handling for static -->
+  <!-- content, OPTIONS and TRACE methods for the context.                  -->
+  <!-- The following initParameters are supported:                          -->
+  <!--  
+ *  acceptRanges      If true, range requests and responses are
+ *                    supported
+ *
+ *  dirAllowed        If true, directory listings are returned if no
+ *                    welcome file is found. Else 403 Forbidden.
+ *
+ *  welcomeServlets   If true, attempt to dispatch to welcome files
+ *                    that are servlets, but only after no matching static
+ *                    resources could be found. If false, then a welcome
+ *                    file must exist on disk. If "exact", then exact
+ *                    servlet matches are supported without an existing file.
+ *                    Default is true.
+ *
+ *                    This must be false if you want directory listings,
+ *                    but have index.jsp in your welcome file list.
+ *
+ *  redirectWelcome   If true, welcome files are redirected rather than
+ *                    forwarded to.
+ *
+ *  gzip              If set to true, then static content will be served as
+ *                    gzip content encoded if a matching resource is
+ *                    found ending with ".gz"
+ *
+ *  resourceBase      Set to replace the context resource base
+ *
+ *  resourceCache     If set, this is a context attribute name, which the servlet 
+ *                    will use to look for a shared ResourceCache instance. 
+ *                        
+ *  relativeResourceBase
+ *                    Set with a pathname relative to the base of the
+ *                    servlet context root. Useful for only serving static content out
+ *                    of only specific subdirectories.
+ *
+ *  aliases           If True, aliases of resources are allowed (eg. symbolic
+ *                    links and caps variations). May bypass security constraints.
+ *
+ *  maxCacheSize      The maximum total size of the cache or 0 for no cache.
+ *  maxCachedFileSize The maximum size of a file to cache
+ *  maxCachedFiles    The maximum number of files to cache
+ *
+ *  useFileMappedBuffer
+ *                    If set to true, it will use mapped file buffer to serve static content
+ *                    when using NIO connector. Setting this value to false means that
+ *                    a direct buffer will be used instead of a mapped file buffer.
+ *                    By default, this is set to true.
+ *
+ *  cacheControl      If set, all static content will have this value set as the cache-control
+ *                    header.
+ -->
+ 
+ 
+  <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  -->
+  <servlet>
+    <servlet-name>default</servlet-name>
+    <servlet-class>org.eclipse.jetty.servlet.DefaultServlet</servlet-class>
+    <init-param>
+      <param-name>aliases</param-name>
+      <param-value>false</param-value>
+    </init-param>
+    <init-param>
+      <param-name>acceptRanges</param-name>
+      <param-value>true</param-value>
+    </init-param>
+    <init-param>
+      <param-name>dirAllowed</param-name>
+      <param-value>true</param-value>
+    </init-param>
+    <init-param>
+      <param-name>welcomeServlets</param-name>
+      <param-value>false</param-value>
+    </init-param>
+    <init-param>
+      <param-name>redirectWelcome</param-name>
+      <param-value>false</param-value>
+    </init-param>
+    <init-param>
+      <param-name>maxCacheSize</param-name>
+      <param-value>256000000</param-value>
+    </init-param>
+    <init-param>
+      <param-name>maxCachedFileSize</param-name>
+      <param-value>200000000</param-value>
+    </init-param>
+    <init-param>
+      <param-name>maxCachedFiles</param-name>
+      <param-value>2048</param-value>
+    </init-param>
+    <init-param>
+      <param-name>gzip</param-name>
+      <param-value>true</param-value>
+    </init-param>
+    <init-param>
+      <param-name>useFileMappedBuffer</param-name>
+      <param-value>true</param-value>
+    </init-param>
+    <!--
+    <init-param>
+      <param-name>resourceCache</param-name>
+      <param-value>resourceCache</param-value>
+    </init-param>
+    -->
+    <!--
+    <init-param>
+      <param-name>cacheControl</param-name>
+      <param-value>max-age=3600,public</param-value>
+    </init-param>
+    -->
+    <load-on-startup>0</load-on-startup>
+  </servlet>
+
+  <servlet-mapping>
+    <servlet-name>default</servlet-name>
+    <url-pattern>/</url-pattern>
+  </servlet-mapping>
+
+
+  <!-- ==================================================================== -->
+  <!-- JSP Servlet                                                          -->
+  <!-- This is the jasper JSP servlet from the jakarta project              -->
+  <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  -->
+  <!-- The JSP page compiler and execution servlet, which is the mechanism  -->
+  <!-- used by Glassfish to support JSP pages.  Traditionally, this servlet -->
+  <!-- is mapped to URL patterh "*.jsp".  This servlet supports the         -->
+  <!-- following initialization parameters (default values are in square    -->
+  <!-- brackets):                                                           -->
+  <!--                                                                      -->
+  <!--   checkInterval       If development is false and reloading is true, -->
+  <!--                       background compiles are enabled. checkInterval -->
+  <!--                       is the time in seconds between checks to see   -->
+  <!--                       if a JSP page needs to be recompiled. [300]    -->
+  <!--                                                                      -->
+  <!--   compiler            Which compiler Ant should use to compile JSP   -->
+  <!--                       pages.  See the Ant documenation for more      -->
+  <!--                       information. [javac]                           -->
+  <!--                                                                      -->
+  <!--   classdebuginfo      Should the class file be compiled with         -->
+  <!--                       debugging information?  [true]                 -->
+  <!--                                                                      -->
+  <!--   classpath           What class path should I use while compiling   -->
+  <!--                       generated servlets?  [Created dynamically      -->
+  <!--                       based on the current web application]          -->
+  <!--                       Set to ? to make the container explicitly set  -->
+  <!--                       this parameter.                                -->
+  <!--                                                                      -->
+  <!--   development         Is Jasper used in development mode (will check -->
+  <!--                       for JSP modification on every access)?  [true] -->
+  <!--                                                                      -->
+  <!--   enablePooling       Determines whether tag handler pooling is      -->
+  <!--                       enabled  [true]                                -->
+  <!--                                                                      -->
+  <!--   fork                Tell Ant to fork compiles of JSP pages so that -->
+  <!--                       a separate JVM is used for JSP page compiles   -->
+  <!--                       from the one Tomcat is running in. [true]      -->
+  <!--                                                                      -->
+  <!--   ieClassId           The class-id value to be sent to Internet      -->
+  <!--                       Explorer when using <jsp:plugin> tags.         -->
+  <!--                       [clsid:8AD9C840-044E-11D1-B3E9-00805F499D93]   -->
+  <!--                                                                      -->
+  <!--   javaEncoding        Java file encoding to use for generating java  -->
+  <!--                       source files. [UTF-8]                          -->
+  <!--                                                                      -->
+  <!--   keepgenerated       Should we keep the generated Java source code  -->
+  <!--                       for each page instead of deleting it? [true]   -->
+  <!--                                                                      -->
+  <!--   logVerbosityLevel   The level of detailed messages to be produced  -->
+  <!--                       by this servlet.  Increasing levels cause the  -->
+  <!--                       generation of more messages.  Valid values are -->
+  <!--                       FATAL, ERROR, WARNING, INFORMATION, and DEBUG. -->
+  <!--                       [WARNING]                                      -->
+  <!--                                                                      -->
+  <!--   mappedfile          Should we generate static content with one     -->
+  <!--                       print statement per input line, to ease        -->
+  <!--                       debugging?  [false]                            -->
+  <!--                                                                      -->
+  <!--                                                                      -->
+  <!--   reloading           Should Jasper check for modified JSPs?  [true] -->
+  <!--                                                                      -->
+  <!--   suppressSmap        Should the generation of SMAP info for JSR45   -->
+  <!--                       debugging be suppressed?  [false]              -->
+  <!--                                                                      -->
+  <!--   dumpSmap            Should the SMAP info for JSR45 debugging be    -->
+  <!--                       dumped to a file? [false]                      -->
+  <!--                       False if suppressSmap is true                  -->
+  <!--                                                                      -->
+  <!--   scratchdir          What scratch directory should we use when      -->
+  <!--                       compiling JSP pages?  [default work directory  -->
+  <!--                       for the current web application]               -->
+  <!--                                                                      -->
+  <!--   tagpoolMaxSize      The maximum tag handler pool size  [5]         -->
+  <!--                                                                      -->
+  <!--   xpoweredBy          Determines whether X-Powered-By response       -->
+  <!--                       header is added by generated servlet  [false]  -->
+  <!--                                                                      -->
+  <!-- If you wish to use Jikes to compile JSP pages:                       -->
+  <!--   Set the init parameter "compiler" to "jikes".  Define              -->
+  <!--   the property "-Dbuild.compiler.emacs=true" when starting Jetty     -->
+  <!--   to cause Jikes to emit error messages in a format compatible with  -->
+  <!--   Jasper.                                                            -->
+  <!--   If you get an error reporting that jikes can't use UTF-8 encoding, -->
+  <!--   try setting the init parameter "javaEncoding" to "ISO-8859-1".     -->
+  <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  -->
+  <servlet
+    id="jsp"
+  >
+    <servlet-name>jsp</servlet-name>
+    <servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>
+    <init-param>
+      <param-name>logVerbosityLevel</param-name>
+      <param-value>DEBUG</param-value>
+    </init-param>
+    <init-param>
+      <param-name>fork</param-name>
+      <param-value>false</param-value>
+    </init-param>
+    <init-param>
+      <param-name>xpoweredBy</param-name>
+      <param-value>false</param-value>
+    </init-param>
+    <!--  
+    <init-param>
+        <param-name>classpath</param-name>
+        <param-value>?</param-value>
+    </init-param>
+    -->
+    <load-on-startup>0</load-on-startup>
+  </servlet>
+
+  <servlet-mapping>
+    <servlet-name>jsp</servlet-name>
+    <url-pattern>*.jsp</url-pattern>
+    <url-pattern>*.jspf</url-pattern>
+    <url-pattern>*.jspx</url-pattern>
+    <url-pattern>*.xsp</url-pattern>
+    <url-pattern>*.JSP</url-pattern>
+    <url-pattern>*.JSPF</url-pattern>
+    <url-pattern>*.JSPX</url-pattern>
+    <url-pattern>*.XSP</url-pattern>
+  </servlet-mapping>
+
+  <!-- ==================================================================== -->
+  <!-- Dynamic Servlet Invoker.                                             -->
+  <!-- This servlet invokes anonymous servlets that have not been defined   -->
+  <!-- in the web.xml or by other means. The first element of the pathInfo  -->
+  <!-- of a request passed to the envoker is treated as a servlet name for  -->
+  <!-- an existing servlet, or as a class name of a new servlet.            -->
+  <!-- This servlet is normally mapped to /servlet/*                        -->
+  <!-- This servlet support the following initParams:                       -->
+  <!--                                                                      -->
+  <!--  nonContextServlets       If false, the invoker can only load        -->
+  <!--                           servlets from the contexts classloader.    -->
+  <!--                           This is false by default and setting this  -->
+  <!--                           to true may have security implications.    -->
+  <!--                                                                      -->
+  <!--  verbose                  If true, log dynamic loads                 -->
+  <!--                                                                      -->
+  <!--  *                        All other parameters are copied to the     -->
+  <!--                           each dynamic servlet as init parameters    -->
+  <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  -->
+  <!--
+    Uncomment for dynamic invocation <servlet> <servlet-name>invoker</servlet-name> <servlet-class>org.eclipse.jetty.servlet.Invoker</servlet-class> <init-param> <param-name>verbose</param-name>
+    <param-value>false</param-value> </init-param> <init-param> <param-name>nonContextServlets</param-name> <param-value>false</param-value> </init-param> <init-param>
+    <param-name>dynamicParam</param-name> <param-value>anyValue</param-value> </init-param> <load-on-startup>0</load-on-startup> </servlet> <servlet-mapping> <servlet-name>invoker</servlet-name>
+    <url-pattern>/servlet/*</url-pattern> </servlet-mapping>
+  -->
+
+
+
+  <!-- ==================================================================== -->
+  <session-config>
+    <session-timeout>30</session-timeout>
+  </session-config>
+
+  <!-- ==================================================================== -->
+  <!-- Default MIME mappings                                                -->
+  <!-- The default MIME mappings are provided by the mime.properties        -->
+  <!-- resource in the org.eclipse.jetty.server.jar file.  Additional or modified  -->
+  <!-- mappings may be specified here                                       -->
+  <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  -->
+  <!-- UNCOMMENT TO ACTIVATE
+  <mime-mapping>
+    <extension>mysuffix</extension>
+    <mime-type>mymime/type</mime-type>
+  </mime-mapping>
+  -->
+
+  <!-- ==================================================================== -->
+  <welcome-file-list>
+    <welcome-file>index.html</welcome-file>
+    <welcome-file>index.htm</welcome-file>
+    <welcome-file>index.jsp</welcome-file>
+  </welcome-file-list>
+
+  <!-- ==================================================================== -->
+  <locale-encoding-mapping-list>
+    <locale-encoding-mapping>
+      <locale>ar</locale>
+      <encoding>ISO-8859-6</encoding>
+    </locale-encoding-mapping>
+    <locale-encoding-mapping>
+      <locale>be</locale>
+      <encoding>ISO-8859-5</encoding>
+    </locale-encoding-mapping>
+    <locale-encoding-mapping>
+      <locale>bg</locale>
+      <encoding>ISO-8859-5</encoding>
+    </locale-encoding-mapping>
+    <locale-encoding-mapping>
+      <locale>ca</locale>
+      <encoding>ISO-8859-1</encoding>
+    </locale-encoding-mapping>
+    <locale-encoding-mapping>
+      <locale>cs</locale>
+      <encoding>ISO-8859-2</encoding>
+    </locale-encoding-mapping>
+    <locale-encoding-mapping>
+      <locale>da</locale>
+      <encoding>ISO-8859-1</encoding>
+    </locale-encoding-mapping>
+    <locale-encoding-mapping>
+      <locale>de</locale>
+      <encoding>ISO-8859-1</encoding>
+    </locale-encoding-mapping>
+    <locale-encoding-mapping>
+      <locale>el</locale>
+      <encoding>ISO-8859-7</encoding>
+    </locale-encoding-mapping>
+    <locale-encoding-mapping>
+      <locale>en</locale>
+      <encoding>ISO-8859-1</encoding>
+    </locale-encoding-mapping>
+    <locale-encoding-mapping>
+      <locale>es</locale>
+      <encoding>ISO-8859-1</encoding>
+    </locale-encoding-mapping>
+    <locale-encoding-mapping>
+      <locale>et</locale>
+      <encoding>ISO-8859-1</encoding>
+    </locale-encoding-mapping>
+    <locale-encoding-mapping>
+      <locale>fi</locale>
+      <encoding>ISO-8859-1</encoding>
+    </locale-encoding-mapping>
+    <locale-encoding-mapping>
+      <locale>fr</locale>
+      <encoding>ISO-8859-1</encoding>
+    </locale-encoding-mapping>
+    <locale-encoding-mapping>
+      <locale>hr</locale>
+      <encoding>ISO-8859-2</encoding>
+    </locale-encoding-mapping>
+    <locale-encoding-mapping>
+      <locale>hu</locale>
+      <encoding>ISO-8859-2</encoding>
+    </locale-encoding-mapping>
+    <locale-encoding-mapping>
+      <locale>is</locale>
+      <encoding>ISO-8859-1</encoding>
+    </locale-encoding-mapping>
+    <locale-encoding-mapping>
+      <locale>it</locale>
+      <encoding>ISO-8859-1</encoding>
+    </locale-encoding-mapping>
+    <locale-encoding-mapping>
+      <locale>iw</locale>
+      <encoding>ISO-8859-8</encoding>
+    </locale-encoding-mapping>
+    <locale-encoding-mapping>
+      <locale>ja</locale>
+      <encoding>Shift_JIS</encoding>
+    </locale-encoding-mapping>
+    <locale-encoding-mapping>
+      <locale>ko</locale>
+      <encoding>EUC-KR</encoding>
+    </locale-encoding-mapping>
+    <locale-encoding-mapping>
+      <locale>lt</locale>
+      <encoding>ISO-8859-2</encoding>
+    </locale-encoding-mapping>
+    <locale-encoding-mapping>
+      <locale>lv</locale>
+      <encoding>ISO-8859-2</encoding>
+    </locale-encoding-mapping>
+    <locale-encoding-mapping>
+      <locale>mk</locale>
+      <encoding>ISO-8859-5</encoding>
+    </locale-encoding-mapping>
+    <locale-encoding-mapping>
+      <locale>nl</locale>
+      <encoding>ISO-8859-1</encoding>
+    </locale-encoding-mapping>
+    <locale-encoding-mapping>
+      <locale>no</locale>
+      <encoding>ISO-8859-1</encoding>
+    </locale-encoding-mapping>
+    <locale-encoding-mapping>
+      <locale>pl</locale>
+      <encoding>ISO-8859-2</encoding>
+    </locale-encoding-mapping>
+    <locale-encoding-mapping>
+      <locale>pt</locale>
+      <encoding>ISO-8859-1</encoding>
+    </locale-encoding-mapping>
+    <locale-encoding-mapping>
+      <locale>ro</locale>
+      <encoding>ISO-8859-2</encoding>
+    </locale-encoding-mapping>
+    <locale-encoding-mapping>
+      <locale>ru</locale>
+      <encoding>ISO-8859-5</encoding>
+    </locale-encoding-mapping>
+    <locale-encoding-mapping>
+      <locale>sh</locale>
+      <encoding>ISO-8859-5</encoding>
+    </locale-encoding-mapping>
+    <locale-encoding-mapping>
+      <locale>sk</locale>
+      <encoding>ISO-8859-2</encoding>
+    </locale-encoding-mapping>
+    <locale-encoding-mapping>
+      <locale>sl</locale>
+      <encoding>ISO-8859-2</encoding>
+    </locale-encoding-mapping>
+    <locale-encoding-mapping>
+      <locale>sq</locale>
+      <encoding>ISO-8859-2</encoding>
+    </locale-encoding-mapping>
+    <locale-encoding-mapping>
+      <locale>sr</locale>
+      <encoding>ISO-8859-5</encoding>
+    </locale-encoding-mapping>
+    <locale-encoding-mapping>
+      <locale>sv</locale>
+      <encoding>ISO-8859-1</encoding>
+    </locale-encoding-mapping>
+    <locale-encoding-mapping>
+      <locale>tr</locale>
+      <encoding>ISO-8859-9</encoding>
+    </locale-encoding-mapping>
+    <locale-encoding-mapping>
+      <locale>uk</locale>
+      <encoding>ISO-8859-5</encoding>
+    </locale-encoding-mapping>
+    <locale-encoding-mapping>
+      <locale>zh</locale>
+      <encoding>GB2312</encoding>
+    </locale-encoding-mapping>
+    <locale-encoding-mapping>
+      <locale>zh_TW</locale>
+      <encoding>Big5</encoding>
+    </locale-encoding-mapping>
+  </locale-encoding-mapping-list>
+
+  <security-constraint>
+    <web-resource-collection>
+      <web-resource-name>Disable TRACE</web-resource-name>
+      <url-pattern>/</url-pattern>
+      <http-method>TRACE</http-method>
+    </web-resource-collection>
+    <auth-constraint/>
+  </security-constraint>
+
+</web-app>
+
diff --git a/src/java/org/eclipse/jetty/client/AbstractHttpConnection.java b/src/java/org/eclipse/jetty/client/AbstractHttpConnection.java
new file mode 100644
index 0000000..0e0042c
--- /dev/null
+++ b/src/java/org/eclipse/jetty/client/AbstractHttpConnection.java
@@ -0,0 +1,571 @@
+//
+//  ========================================================================
+//  Copyright (c) 1995-2014 Mort Bay Consulting Pty. Ltd.
+//  ------------------------------------------------------------------------
+//  All rights reserved. This program and the accompanying materials
+//  are made available under the terms of the Eclipse Public License v1.0
+//  and Apache License v2.0 which accompanies this distribution.
+//
+//      The Eclipse Public License is available at
+//      http://www.eclipse.org/legal/epl-v10.html
+//
+//      The Apache License v2.0 is available at
+//      http://www.opensource.org/licenses/apache2.0.php
+//
+//  You may elect to redistribute this code under either of these licenses.
+//  ========================================================================
+//
+
+package org.eclipse.jetty.client;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.Collections;
+import java.util.concurrent.atomic.AtomicBoolean;
+
+import org.eclipse.jetty.client.security.Authentication;
+import org.eclipse.jetty.http.HttpFields;
+import org.eclipse.jetty.http.HttpGenerator;
+import org.eclipse.jetty.http.HttpHeaderValues;
+import org.eclipse.jetty.http.HttpHeaders;
+import org.eclipse.jetty.http.HttpMethods;
+import org.eclipse.jetty.http.HttpParser;
+import org.eclipse.jetty.http.HttpSchemes;
+import org.eclipse.jetty.http.HttpStatus;
+import org.eclipse.jetty.http.HttpVersions;
+import org.eclipse.jetty.io.AbstractConnection;
+import org.eclipse.jetty.io.Buffer;
+import org.eclipse.jetty.io.Buffers;
+import org.eclipse.jetty.io.Connection;
+import org.eclipse.jetty.io.EndPoint;
+import org.eclipse.jetty.io.EofException;
+import org.eclipse.jetty.io.View;
+import org.eclipse.jetty.util.component.AggregateLifeCycle;
+import org.eclipse.jetty.util.component.Dumpable;
+import org.eclipse.jetty.util.log.Log;
+import org.eclipse.jetty.util.log.Logger;
+import org.eclipse.jetty.util.thread.Timeout;
+
+/**
+ *
+ * @version $Revision: 879 $ $Date: 2009-09-11 16:13:28 +0200 (Fri, 11 Sep 2009) $
+ */
+public abstract class AbstractHttpConnection extends AbstractConnection implements Dumpable
+{
+    private static final Logger LOG = Log.getLogger(AbstractHttpConnection.class);
+
+    protected HttpDestination _destination;
+    protected HttpGenerator _generator;
+    protected HttpParser _parser;
+    protected boolean _http11 = true;
+    protected int _status;
+    protected Buffer _connectionHeader;
+    protected boolean _reserved;
+
+    // The current exchange waiting for a response
+    protected volatile HttpExchange _exchange;
+    protected HttpExchange _pipeline;
+    private final Timeout.Task _idleTimeout = new ConnectionIdleTask();
+    private AtomicBoolean _idle = new AtomicBoolean(false);
+
+
+    AbstractHttpConnection(Buffers requestBuffers, Buffers responseBuffers, EndPoint endp)
+    {
+        super(endp);
+
+        _generator = new HttpGenerator(requestBuffers,endp);
+        _parser = new HttpParser(responseBuffers,endp,new Handler());
+    }
+
+    public void setReserved (boolean reserved)
+    {
+        _reserved = reserved;
+    }
+
+    public boolean isReserved()
+    {
+        return _reserved;
+    }
+
+    public HttpDestination getDestination()
+    {
+        return _destination;
+    }
+
+    public void setDestination(HttpDestination destination)
+    {
+        _destination = destination;
+    }
+
+    public boolean send(HttpExchange ex) throws IOException
+    {
+        LOG.debug("Send {} on {}",ex,this);
+        synchronized (this)
+        {
+            if (_exchange != null)
+            {
+                if (_pipeline != null)
+                    throw new IllegalStateException(this + " PIPELINED!!!  _exchange=" + _exchange);
+                _pipeline = ex;
+                return true;
+            }
+
+            _exchange = ex;
+            _exchange.associate(this);
+
+            // The call to associate() may have closed the connection, check if it's the case
+            if (!_endp.isOpen())
+            {
+                _exchange.disassociate();
+                _exchange = null;
+                return false;
+            }
+
+            _exchange.setStatus(HttpExchange.STATUS_WAITING_FOR_COMMIT);
+
+            adjustIdleTimeout();
+
+            return true;
+        }
+    }
+
+    private void adjustIdleTimeout() throws IOException
+    {
+        // Adjusts the idle timeout in case the default or exchange timeout
+        // are greater. This is needed for long polls, where one wants an
+        // aggressive releasing of idle connections (so idle timeout is small)
+        // but still allow long polls to complete normally
+
+        long timeout = _exchange.getTimeout();
+        if (timeout <= 0)
+            timeout = _destination.getHttpClient().getTimeout();
+
+        long endPointTimeout = _endp.getMaxIdleTime();
+
+        if (timeout > 0 && timeout > endPointTimeout)
+        {
+            // Make it larger than the exchange timeout so that there are
+            // no races between the idle timeout and the exchange timeout
+            // when trying to close the endpoint
+            _endp.setMaxIdleTime(2 * (int)timeout);
+        }
+    }
+
+    public abstract Connection handle() throws IOException;
+
+
+    public boolean isIdle()
+    {
+        synchronized (this)
+        {
+            return _exchange == null;
+        }
+    }
+
+    public boolean isSuspended()
+    {
+        return false;
+    }
+
+    public void onClose()
+    {
+    }
+
+    /**
+     * @throws IOException
+     */
+    protected void commitRequest() throws IOException
+    {
+        synchronized (this)
+        {
+            _status=0;
+            if (_exchange.getStatus() != HttpExchange.STATUS_WAITING_FOR_COMMIT)
+                throw new IllegalStateException();
+
+            _exchange.setStatus(HttpExchange.STATUS_SENDING_REQUEST);
+            _generator.setVersion(_exchange.getVersion());
+
+            String method=_exchange.getMethod();
+            String uri = _exchange.getRequestURI();
+            if (_destination.isProxied())
+            {
+                if (!HttpMethods.CONNECT.equals(method) && uri.startsWith("/"))
+                {
+                    boolean secure = _destination.isSecure();
+                    String host = _destination.getAddress().getHost();
+                    int port = _destination.getAddress().getPort();
+                    StringBuilder absoluteURI = new StringBuilder();
+                    absoluteURI.append(secure ? HttpSchemes.HTTPS : HttpSchemes.HTTP);
+                    absoluteURI.append("://");
+                    absoluteURI.append(host);
+                    // Avoid adding default ports
+                    if (!(secure && port == 443 || !secure && port == 80))
+                        absoluteURI.append(":").append(port);
+                    absoluteURI.append(uri);
+                    uri = absoluteURI.toString();
+                }
+                Authentication auth = _destination.getProxyAuthentication();
+                if (auth != null)
+                    auth.setCredentials(_exchange);
+            }
+
+            _generator.setRequest(method, uri);
+            _parser.setHeadResponse(HttpMethods.HEAD.equalsIgnoreCase(method));
+
+            HttpFields requestHeaders = _exchange.getRequestFields();
+            if (_exchange.getVersion() >= HttpVersions.HTTP_1_1_ORDINAL)
+            {
+                if (!requestHeaders.containsKey(HttpHeaders.HOST_BUFFER))
+                    requestHeaders.add(HttpHeaders.HOST_BUFFER,_destination.getHostHeader());
+            }
+
+            Buffer requestContent = _exchange.getRequestContent();
+            if (requestContent != null)
+            {
+                requestHeaders.putLongField(HttpHeaders.CONTENT_LENGTH, requestContent.length());
+                _generator.completeHeader(requestHeaders,false);
+                _generator.addContent(new View(requestContent),true);
+                _exchange.setStatus(HttpExchange.STATUS_WAITING_FOR_RESPONSE);
+            }
+            else
+            {
+                InputStream requestContentStream = _exchange.getRequestContentSource();
+                if (requestContentStream != null)
+                {
+                    _generator.completeHeader(requestHeaders, false);
+                }
+                else
+                {
+                    requestHeaders.remove(HttpHeaders.CONTENT_LENGTH);
+                    _generator.completeHeader(requestHeaders, true);
+                    _exchange.setStatus(HttpExchange.STATUS_WAITING_FOR_RESPONSE);
+                }
+            }
+        }
+    }
+
+    protected void reset() throws IOException
+    {
+        _connectionHeader = null;
+        _parser.reset();
+        _generator.reset();
+        _http11 = true;
+    }
+
+
+    private class Handler extends HttpParser.EventHandler
+    {
+        @Override
+        public void startRequest(Buffer method, Buffer url, Buffer version) throws IOException
+        {
+            // System.out.println( method.toString() + "///" + url.toString() +
+            // "///" + version.toString() );
+            // TODO validate this is acceptable, the <!DOCTYPE goop was coming
+            // out here
+            // throw new IllegalStateException();
+        }
+
+        @Override
+        public void startResponse(Buffer version, int status, Buffer reason) throws IOException
+        {
+            HttpExchange exchange = _exchange;
+            if (exchange==null)
+            {
+                LOG.warn("No exchange for response");
+                _endp.close();
+                return;
+            }
+
+            switch(status)
+            {
+                case HttpStatus.CONTINUE_100:
+                case HttpStatus.PROCESSING_102:
+                    // TODO check if appropriate expect was sent in the request.
+                    exchange.setEventListener(new NonFinalResponseListener(exchange));
+                    break;
+
+                case HttpStatus.OK_200:
+                    // handle special case for CONNECT 200 responses
+                    if (HttpMethods.CONNECT.equalsIgnoreCase(exchange.getMethod()))
+                        _parser.setHeadResponse(true);
+                    break;
+            }
+
+            _http11 = HttpVersions.HTTP_1_1_BUFFER.equals(version);
+            _status=status;
+            exchange.getEventListener().onResponseStatus(version,status,reason);
+            exchange.setStatus(HttpExchange.STATUS_PARSING_HEADERS);
+
+        }
+
+        @Override
+        public void parsedHeader(Buffer name, Buffer value) throws IOException
+        {
+            HttpExchange exchange = _exchange;
+            if (exchange!=null)
+            {
+                if (HttpHeaders.CACHE.getOrdinal(name) == HttpHeaders.CONNECTION_ORDINAL)
+                {
+                    _connectionHeader = HttpHeaderValues.CACHE.lookup(value);
+                }
+                exchange.getEventListener().onResponseHeader(name,value);
+            }
+        }
+
+        @Override
+        public void headerComplete() throws IOException
+        {
+            HttpExchange exchange = _exchange;
+            if (exchange!=null)
+            {
+                exchange.setStatus(HttpExchange.STATUS_PARSING_CONTENT);
+                if (HttpMethods.CONNECT.equalsIgnoreCase(exchange.getMethod()))
+                    _parser.setPersistent(true);
+            }
+        }
+
+        @Override
+        public void content(Buffer ref) throws IOException
+        {
+            HttpExchange exchange = _exchange;
+            if (exchange!=null)
+                exchange.getEventListener().onResponseContent(ref);
+        }
+
+        @Override
+        public void messageComplete(long contextLength) throws IOException
+        {
+            HttpExchange exchange = _exchange;
+            if (exchange!=null)
+                exchange.setStatus(HttpExchange.STATUS_COMPLETED);
+        }
+
+        @Override
+        public void earlyEOF()
+        {
+            HttpExchange exchange = _exchange;
+            if (exchange!=null)
+            {
+                if (!exchange.isDone())
+                {
+                    if (exchange.setStatus(HttpExchange.STATUS_EXCEPTED))
+                        exchange.getEventListener().onException(new EofException("early EOF"));
+                }
+            }
+        }
+    }
+
+    @Override
+    public String toString()
+    {
+        return String.format("%s %s g=%s p=%s",
+                super.toString(),
+                _destination == null ? "?.?.?.?:??" : _destination.getAddress(),
+                _generator,
+                _parser);
+    }
+
+    public String toDetailString()
+    {
+        return toString() + " ex=" + _exchange + " idle for " + _idleTimeout.getAge();
+    }
+
+    public void close() throws IOException
+    {
+        //if there is a live, unfinished exchange, set its status to be
+        //excepted and wake up anyone waiting on waitForDone()
+
+        HttpExchange exchange = _exchange;
+        if (exchange != null && !exchange.isDone())
+        {
+            switch (exchange.getStatus())
+            {
+                case HttpExchange.STATUS_CANCELLED:
+                case HttpExchange.STATUS_CANCELLING:
+                case HttpExchange.STATUS_COMPLETED:
+                case HttpExchange.STATUS_EXCEPTED:
+                case HttpExchange.STATUS_EXPIRED:
+                    break;
+                case HttpExchange.STATUS_PARSING_CONTENT:
+                    if (_endp.isInputShutdown() && _parser.isState(HttpParser.STATE_EOF_CONTENT))
+                        break;
+                default:
+                    String exch= exchange.toString();
+                    String reason = _endp.isOpen()?(_endp.isInputShutdown()?"half closed: ":"local close: "):"closed: ";
+                    if (exchange.setStatus(HttpExchange.STATUS_EXCEPTED))
+                        exchange.getEventListener().onException(new EofException(reason+exch));
+            }
+        }
+
+        if (_endp.isOpen())
+        {
+            _endp.close();
+            _destination.returnConnection(this, true);
+        }
+    }
+
+    public void setIdleTimeout()
+    {
+        synchronized (this)
+        {
+            if (_idle.compareAndSet(false, true))
+                _destination.getHttpClient().scheduleIdle(_idleTimeout);
+            else
+                throw new IllegalStateException();
+        }
+    }
+
+    public boolean cancelIdleTimeout()
+    {
+        synchronized (this)
+        {
+            if (_idle.compareAndSet(true, false))
+            {
+                _destination.getHttpClient().cancel(_idleTimeout);
+                return true;
+            }
+        }
+
+        return false;
+    }
+
+    protected void exchangeExpired(HttpExchange exchange)
+    {
+        synchronized (this)
+        {
+            // We are expiring an exchange, but the exchange is pending
+            // Cannot reuse the connection because the reply may arrive, so close it
+            if (_exchange == exchange)
+            {
+                try
+                {
+                    _destination.returnConnection(this, true);
+                }
+                catch (IOException x)
+                {
+                    LOG.ignore(x);
+                }
+            }
+        }
+    }
+
+    /* ------------------------------------------------------------ */
+    /**
+     * @see org.eclipse.jetty.util.component.Dumpable#dump()
+     */
+    public String dump()
+    {
+        return AggregateLifeCycle.dump(this);
+    }
+
+    /* ------------------------------------------------------------ */
+    /**
+     * @see org.eclipse.jetty.util.component.Dumpable#dump(java.lang.Appendable, java.lang.String)
+     */
+    public void dump(Appendable out, String indent) throws IOException
+    {
+        synchronized (this)
+        {
+            out.append(String.valueOf(this)).append("\n");
+            AggregateLifeCycle.dump(out,indent,Collections.singletonList(_endp));
+        }
+    }
+
+    /* ------------------------------------------------------------ */
+    private class ConnectionIdleTask extends Timeout.Task
+    {
+        /* ------------------------------------------------------------ */
+        @Override
+        public void expired()
+        {
+            // Connection idle, close it
+            if (_idle.compareAndSet(true, false))
+            {
+                _destination.returnIdleConnection(AbstractHttpConnection.this);
+            }
+        }
+    }
+
+
+    /* ------------------------------------------------------------ */
+    private class NonFinalResponseListener implements HttpEventListener
+    {
+        final HttpExchange _exchange;
+        final HttpEventListener _next;
+
+        /* ------------------------------------------------------------ */
+        public NonFinalResponseListener(HttpExchange exchange)
+        {
+            _exchange=exchange;
+            _next=exchange.getEventListener();
+        }
+
+        /* ------------------------------------------------------------ */
+        public void onRequestCommitted() throws IOException
+        {
+        }
+
+        /* ------------------------------------------------------------ */
+        public void onRequestComplete() throws IOException
+        {
+        }
+
+        /* ------------------------------------------------------------ */
+        public void onResponseStatus(Buffer version, int status, Buffer reason) throws IOException
+        {
+        }
+
+        /* ------------------------------------------------------------ */
+        public void onResponseHeader(Buffer name, Buffer value) throws IOException
+        {
+            _next.onResponseHeader(name,value);
+        }
+
+        /* ------------------------------------------------------------ */
+        public void onResponseHeaderComplete() throws IOException
+        {
+            _next.onResponseHeaderComplete();
+        }
+
+        /* ------------------------------------------------------------ */
+        public void onResponseContent(Buffer content) throws IOException
+        {
+        }
+
+        /* ------------------------------------------------------------ */
+        public void onResponseComplete() throws IOException
+        {
+            _exchange.setEventListener(_next);
+            _exchange.setStatus(HttpExchange.STATUS_WAITING_FOR_RESPONSE);
+            _parser.reset();
+        }
+
+        /* ------------------------------------------------------------ */
+        public void onConnectionFailed(Throwable ex)
+        {
+            _exchange.setEventListener(_next);
+            _next.onConnectionFailed(ex);
+        }
+
+        /* ------------------------------------------------------------ */
+        public void onException(Throwable ex)
+        {
+            _exchange.setEventListener(_next);
+            _next.onException(ex);
+        }
+
+        /* ------------------------------------------------------------ */
+        public void onExpire()
+        {
+            _exchange.setEventListener(_next);
+            _next.onExpire();
+        }
+
+        /* ------------------------------------------------------------ */
+        public void onRetry()
+        {
+            _exchange.setEventListener(_next);
+            _next.onRetry();
+        }
+    }
+}
diff --git a/src/java/org/eclipse/jetty/client/Address.java b/src/java/org/eclipse/jetty/client/Address.java
new file mode 100644
index 0000000..5ea7f04
--- /dev/null
+++ b/src/java/org/eclipse/jetty/client/Address.java
@@ -0,0 +1,96 @@
+//
+//  ========================================================================
+//  Copyright (c) 1995-2014 Mort Bay Consulting Pty. Ltd.
+//  ------------------------------------------------------------------------
+//  All rights reserved. This program and the accompanying materials
+//  are made available under the terms of the Eclipse Public License v1.0
+//  and Apache License v2.0 which accompanies this distribution.
+//
+//      The Eclipse Public License is available at
+//      http://www.eclipse.org/legal/epl-v10.html
+//
+//      The Apache License v2.0 is available at
+//      http://www.opensource.org/licenses/apache2.0.php
+//
+//  You may elect to redistribute this code under either of these licenses.
+//  ========================================================================
+//
+
+package org.eclipse.jetty.client;
+
+import java.net.InetSocketAddress;
+
+/**
+ * @version $Revision: 4135 $ $Date: 2008-12-02 11:57:07 +0100 (Tue, 02 Dec 2008) $
+ */
+public class Address
+{
+    private final String host;
+    private final int port;
+
+    public static Address from(String hostAndPort)
+    {
+        String host;
+        int port;
+        int colon = hostAndPort.indexOf(':');
+        if (colon >= 0)
+        {
+            host = hostAndPort.substring(0, colon);
+            port = Integer.parseInt(hostAndPort.substring(colon + 1));
+        }
+        else
+        {
+            host = hostAndPort;
+            port = 0;
+        }
+        return new Address(host, port);
+    }
+
+    public Address(String host, int port)
+    {
+        if (host == null)
+            throw new IllegalArgumentException("Host is null");
+        
+        this.host = host.trim();
+        this.port = port;
+    }
+
+    @Override
+    public boolean equals(Object obj)
+    {
+        if (this == obj) return true;
+        if (obj == null || getClass() != obj.getClass()) return false;
+        Address that = (Address)obj;
+        if (!host.equals(that.host)) return false;
+        return port == that.port;
+    }
+
+    @Override
+    public int hashCode()
+    {
+        int result = host.hashCode();
+        result = 31 * result + port;
+        return result;
+    }
+
+    public String getHost()
+    {
+        return host;
+    }
+
+    public int getPort()
+    {
+        return port;
+    }
+
+    public InetSocketAddress toSocketAddress()
+    {
+        return new InetSocketAddress(getHost(), getPort());
+    }
+
+    @Override
+    public String toString()
+    {
+        return host + ":" + port;
+    }
+}
diff --git a/src/java/org/eclipse/jetty/client/AsyncHttpConnection.java b/src/java/org/eclipse/jetty/client/AsyncHttpConnection.java
new file mode 100644
index 0000000..8af1fea
--- /dev/null
+++ b/src/java/org/eclipse/jetty/client/AsyncHttpConnection.java
@@ -0,0 +1,269 @@
+//
+//  ========================================================================
+//  Copyright (c) 1995-2014 Mort Bay Consulting Pty. Ltd.
+//  ------------------------------------------------------------------------
+//  All rights reserved. This program and the accompanying materials
+//  are made available under the terms of the Eclipse Public License v1.0
+//  and Apache License v2.0 which accompanies this distribution.
+//
+//      The Eclipse Public License is available at
+//      http://www.eclipse.org/legal/epl-v10.html
+//
+//      The Apache License v2.0 is available at
+//      http://www.opensource.org/licenses/apache2.0.php
+//
+//  You may elect to redistribute this code under either of these licenses.
+//  ========================================================================
+//
+
+package org.eclipse.jetty.client;
+
+import java.io.IOException;
+
+import org.eclipse.jetty.http.AbstractGenerator;
+import org.eclipse.jetty.http.HttpStatus;
+import org.eclipse.jetty.io.AsyncEndPoint;
+import org.eclipse.jetty.io.Buffer;
+import org.eclipse.jetty.io.Buffers;
+import org.eclipse.jetty.io.Connection;
+import org.eclipse.jetty.io.EndPoint;
+import org.eclipse.jetty.io.nio.AsyncConnection;
+import org.eclipse.jetty.util.log.Log;
+import org.eclipse.jetty.util.log.Logger;
+
+
+
+/* ------------------------------------------------------------ */
+/** Asynchronous Client HTTP Connection
+ */
+public class AsyncHttpConnection extends AbstractHttpConnection implements AsyncConnection
+{
+    private static final Logger LOG = Log.getLogger(AsyncHttpConnection.class);
+
+    private boolean _requestComplete;
+    private Buffer _requestContentChunk;
+    private final AsyncEndPoint _asyncEndp;
+
+    AsyncHttpConnection(Buffers requestBuffers, Buffers responseBuffers, EndPoint endp)
+    {
+        super(requestBuffers,responseBuffers,endp);
+        _asyncEndp=(AsyncEndPoint)endp;
+    }
+
+    protected void reset() throws IOException
+    {
+        _requestComplete = false;
+        super.reset();
+    }
+
+    public Connection handle() throws IOException
+    {
+        Connection connection = this;
+        boolean progress=true;
+
+        try
+        {
+            boolean failed = false;
+
+            // While we are making progress and have not changed connection
+            while (progress && connection==this)
+            {
+                LOG.debug("while open={} more={} progress={}",_endp.isOpen(),_parser.isMoreInBuffer(),progress);
+
+                progress=false;
+                HttpExchange exchange=_exchange;
+
+                LOG.debug("exchange {} on {}",exchange,this);
+
+                try
+                {
+                    // Should we commit the request?
+                    if (!_generator.isCommitted() && exchange!=null && exchange.getStatus() == HttpExchange.STATUS_WAITING_FOR_COMMIT)
+                    {
+                        LOG.debug("commit {}",exchange);
+                        progress=true;
+                        commitRequest();
+                    }
+
+                    // Generate output
+                    if (_generator.isCommitted() && !_generator.isComplete())
+                    {
+                        if (_generator.flushBuffer()>0)
+                        {
+                            LOG.debug("flushed");
+                            progress=true;
+                        }
+
+                        // Is there more content to send or should we complete the generator
+                        if (_generator.isState(AbstractGenerator.STATE_CONTENT))
+                        {
+                            // Look for more content to send.
+                            if (_requestContentChunk==null)
+                                _requestContentChunk = exchange.getRequestContentChunk(null);
+
+                            if (_requestContentChunk==null)
+                            {
+                                LOG.debug("complete {}",exchange);
+                                progress=true;
+                                _generator.complete();
+                                if (exchange.getStatus() < HttpExchange.STATUS_WAITING_FOR_RESPONSE)
+                                    exchange.setStatus(HttpExchange.STATUS_WAITING_FOR_RESPONSE);
+                            }
+                            else if (_generator.isEmpty())
+                            {
+                                LOG.debug("addChunk");
+                                progress=true;
+                                Buffer chunk=_requestContentChunk;
+                                _requestContentChunk=exchange.getRequestContentChunk(null);
+                                _generator.addContent(chunk,_requestContentChunk==null);
+                                if (_requestContentChunk==null)
+                                    exchange.setStatus(HttpExchange.STATUS_WAITING_FOR_RESPONSE);
+                            }
+                        }
+                    }
+
+                    // Signal request completion
+                    if (_generator.isComplete() && !_requestComplete)
+                    {
+                        LOG.debug("requestComplete {}",exchange);
+                        progress=true;
+                        _requestComplete = true;
+                        exchange.getEventListener().onRequestComplete();
+                    }
+
+                    // Read any input that is available
+                    if (!_parser.isComplete() && _parser.parseAvailable())
+                    {
+                        LOG.debug("parsed {}",exchange);
+                        progress=true;
+                    }
+
+                    // Flush output
+                    _endp.flush();
+
+                    // Has any IO been done by the endpoint itself since last loop
+                    if (_asyncEndp.hasProgressed())
+                    {
+                        LOG.debug("hasProgressed {}",exchange);
+                        progress=true;
+                    }
+                }
+                catch (Throwable e)
+                {
+                    LOG.debug("Failure on " + _exchange, e);
+
+                    failed = true;
+
+                    synchronized (this)
+                    {
+                        if (exchange != null)
+                        {
+                            // Cancelling the exchange causes an exception as we close the connection,
+                            // but we don't report it as it is normal cancelling operation
+                            if (exchange.getStatus() != HttpExchange.STATUS_CANCELLING &&
+                                    exchange.getStatus() != HttpExchange.STATUS_CANCELLED &&
+                                    !exchange.isDone())
+                            {
+                                if (exchange.setStatus(HttpExchange.STATUS_EXCEPTED))
+                                    exchange.getEventListener().onException(e);
+                            }
+                        }
+                        else
+                        {
+                            if (e instanceof IOException)
+                                throw (IOException)e;
+                            if (e instanceof Error)
+                                throw (Error)e;
+                            if (e instanceof RuntimeException)
+                                throw (RuntimeException)e;
+                            throw new RuntimeException(e);
+                        }
+                    }
+                }
+                finally
+                {
+                    LOG.debug("finally {} on {} progress={} {}",exchange,this,progress,_endp);
+
+                    boolean complete = failed || _generator.isComplete() && _parser.isComplete();
+
+                    if (complete)
+                    {
+                        boolean persistent = !failed && _parser.isPersistent() && _generator.isPersistent();
+                        _generator.setPersistent(persistent);
+                        reset();
+                        if (persistent)
+                            _endp.setMaxIdleTime((int)_destination.getHttpClient().getIdleTimeout());
+
+                        synchronized (this)
+                        {
+                            exchange=_exchange;
+                            _exchange = null;
+
+                            // Cancel the exchange
+                            if (exchange!=null)
+                            {
+                                exchange.cancelTimeout(_destination.getHttpClient());
+
+                                // TODO should we check the exchange is done?
+                            }
+
+                            // handle switched protocols
+                            if (_status==HttpStatus.SWITCHING_PROTOCOLS_101)
+                            {
+                                Connection switched=exchange.onSwitchProtocol(_endp);
+                                if (switched!=null)
+                                {
+                                    // switched protocol!
+                                    if (_pipeline!=null)
+                                    {
+                                        _destination.send(_pipeline);
+                                    }
+                                    _pipeline = null;
+
+                                    connection=switched;
+                                }
+                            }
+
+                            // handle pipelined requests
+                            if (_pipeline!=null)
+                            {
+                                if (!persistent || connection!=this)
+                                    _destination.send(_pipeline);
+                                else
+                                    _exchange=_pipeline;
+                                _pipeline=null;
+                            }
+
+                            if (_exchange==null && !isReserved())  // TODO how do we return switched connections?
+                                _destination.returnConnection(this, !persistent);
+                        }
+
+                    }
+                }
+            }
+        }
+        finally
+        {
+            _parser.returnBuffers();
+            _generator.returnBuffers();
+            LOG.debug("unhandle {} on {}",_exchange,_endp);
+        }
+
+        return connection;
+    }
+
+    public void onInputShutdown() throws IOException
+    {
+        if (_generator.isIdle())
+            _endp.shutdownOutput();
+    }
+
+    @Override
+    public boolean send(HttpExchange ex) throws IOException
+    {
+        boolean sent=super.send(ex);
+        if (sent)
+            _asyncEndp.asyncDispatch();
+        return sent;
+    }
+}
diff --git a/src/java/org/eclipse/jetty/client/BlockingHttpConnection.java b/src/java/org/eclipse/jetty/client/BlockingHttpConnection.java
new file mode 100644
index 0000000..94d163b
--- /dev/null
+++ b/src/java/org/eclipse/jetty/client/BlockingHttpConnection.java
@@ -0,0 +1,314 @@
+//
+//  ========================================================================
+//  Copyright (c) 1995-2014 Mort Bay Consulting Pty. Ltd.
+//  ------------------------------------------------------------------------
+//  All rights reserved. This program and the accompanying materials
+//  are made available under the terms of the Eclipse Public License v1.0
+//  and Apache License v2.0 which accompanies this distribution.
+//
+//      The Eclipse Public License is available at
+//      http://www.eclipse.org/legal/epl-v10.html
+//
+//      The Apache License v2.0 is available at
+//      http://www.opensource.org/licenses/apache2.0.php
+//
+//  You may elect to redistribute this code under either of these licenses.
+//  ========================================================================
+//
+
+package org.eclipse.jetty.client;
+
+import java.io.IOException;
+import java.io.InterruptedIOException;
+
+import org.eclipse.jetty.http.AbstractGenerator;
+import org.eclipse.jetty.http.HttpStatus;
+import org.eclipse.jetty.io.Buffer;
+import org.eclipse.jetty.io.Buffers;
+import org.eclipse.jetty.io.Connection;
+import org.eclipse.jetty.io.EndPoint;
+import org.eclipse.jetty.util.log.Log;
+import org.eclipse.jetty.util.log.Logger;
+
+
+/* ------------------------------------------------------------ */
+/** Blocking HTTP Connection
+ */
+public class BlockingHttpConnection extends AbstractHttpConnection
+{
+    private static final Logger LOG = Log.getLogger(BlockingHttpConnection.class);
+
+    private boolean _requestComplete;
+    private Buffer _requestContentChunk;
+    private boolean _expired=false;
+
+    BlockingHttpConnection(Buffers requestBuffers, Buffers responseBuffers, EndPoint endPoint)
+    {
+        super(requestBuffers, responseBuffers, endPoint);
+    }
+
+    protected void reset() throws IOException
+    {
+        _requestComplete = false;
+        _expired = false;
+        super.reset();
+    }
+    
+    
+    @Override
+    protected void exchangeExpired(HttpExchange exchange)
+    {
+        synchronized (this)
+        {
+           super.exchangeExpired(exchange);
+           _expired = true;
+           this.notifyAll();
+        }
+    }
+    
+    
+
+    @Override
+    public void onIdleExpired(long idleForMs)
+    {
+        try
+        {
+            LOG.debug("onIdleExpired {}ms {} {}",idleForMs,this,_endp);
+            _expired = true;
+            _endp.close();
+        }
+        catch(IOException e)
+        {
+            LOG.ignore(e);
+
+            try
+            {
+                _endp.close();
+            }
+            catch(IOException e2)
+            {
+                LOG.ignore(e2);
+            }
+        }
+
+        synchronized(this)
+        {
+            this.notifyAll();
+        }
+    }
+
+    @Override
+    public Connection handle() throws IOException
+    {
+        Connection connection = this;
+
+        try
+        {
+            boolean failed = false;
+
+
+            // While we are making progress and have not changed connection
+            while (_endp.isOpen() && connection==this)
+            {
+                LOG.debug("open={} more={}",_endp.isOpen(),_parser.isMoreInBuffer());
+
+                HttpExchange exchange;
+                synchronized (this)
+                {
+                    exchange=_exchange;
+                    while (exchange == null)
+                    {
+                        try
+                        {
+                            this.wait();
+                            exchange=_exchange;
+                            if (_expired)
+                            {
+                                failed = true;
+                                throw new InterruptedException();
+                            }
+
+                        }
+                        catch (InterruptedException e)
+                        {
+                            throw new InterruptedIOException();
+                        }
+                    }
+                }
+                LOG.debug("exchange {}",exchange);
+
+                try
+                {
+                    // Should we commit the request?
+                    if (!_generator.isCommitted() && exchange!=null && exchange.getStatus() == HttpExchange.STATUS_WAITING_FOR_COMMIT)
+                    {
+                        LOG.debug("commit");
+                        commitRequest();
+                    }
+
+                    // Generate output
+                    while (_generator.isCommitted() && !_generator.isComplete())
+                    {
+                        if (_generator.flushBuffer()>0)
+                        {
+                            LOG.debug("flushed");
+                        }
+
+                        // Is there more content to send or should we complete the generator
+                        if (_generator.isState(AbstractGenerator.STATE_CONTENT))
+                        {
+                            // Look for more content to send.
+                            if (_requestContentChunk==null)
+                                _requestContentChunk = exchange.getRequestContentChunk(null);
+
+                            if (_requestContentChunk==null)
+                            {
+                                LOG.debug("complete");
+                                _generator.complete();
+                            }
+                            else if (_generator.isEmpty())
+                            {
+                                LOG.debug("addChunk");
+                                Buffer chunk=_requestContentChunk;
+                                _requestContentChunk=exchange.getRequestContentChunk(null);
+                                _generator.addContent(chunk,_requestContentChunk==null);
+                                if (_requestContentChunk==null)
+                                    exchange.setStatus(HttpExchange.STATUS_WAITING_FOR_RESPONSE);
+                            }
+                        }
+                    }
+
+                    // Signal request completion
+                    if (_generator.isComplete() && !_requestComplete)
+                    {
+                        LOG.debug("requestComplete");
+                        _requestComplete = true;
+                        exchange.getEventListener().onRequestComplete();
+                    }
+
+                    // Read any input that is available
+                    if (!_parser.isComplete() && _parser.parseAvailable())
+                    {
+                        LOG.debug("parsed");
+                    }
+
+                    // Flush output
+                    _endp.flush();
+                }
+                catch (Throwable e)
+                {
+                    LOG.debug("Failure on " + _exchange, e);
+
+                    failed = true;
+
+                    synchronized (this)
+                    {
+                        if (exchange != null)
+                        {
+                            // Cancelling the exchange causes an exception as we close the connection,
+                            // but we don't report it as it is normal cancelling operation
+                            if (exchange.getStatus() != HttpExchange.STATUS_CANCELLING &&
+                                    exchange.getStatus() != HttpExchange.STATUS_CANCELLED &&
+                                    !exchange.isDone())
+                            {
+                                if(exchange.setStatus(HttpExchange.STATUS_EXCEPTED))
+                                    exchange.getEventListener().onException(e);
+                            }
+                        }
+                        else
+                        {
+                            if (e instanceof IOException)
+                                throw (IOException)e;
+                            if (e instanceof Error)
+                                throw (Error)e;
+                            if (e instanceof RuntimeException)
+                                throw (RuntimeException)e;
+                            throw new RuntimeException(e);
+                        }
+                    }
+                }
+                finally
+                {
+                    LOG.debug("{} {}",_generator, _parser);
+                    LOG.debug("{}",_endp);
+
+                    boolean complete = failed || _generator.isComplete() && _parser.isComplete();
+
+                    if (complete)
+                    {
+                        boolean persistent = !failed && _parser.isPersistent() && _generator.isPersistent();
+                        _generator.setPersistent(persistent);
+                        reset();
+                        if (persistent)
+                            _endp.setMaxIdleTime((int)_destination.getHttpClient().getIdleTimeout());
+
+                        synchronized (this)
+                        {
+                            exchange=_exchange;
+                            _exchange = null;
+
+                            // Cancel the exchange
+                            if (exchange!=null)
+                            {
+                                exchange.cancelTimeout(_destination.getHttpClient());
+
+                                // TODO should we check the exchange is done?
+                            }
+
+                            // handle switched protocols
+                            if (_status==HttpStatus.SWITCHING_PROTOCOLS_101)
+                            {
+                                Connection switched=exchange.onSwitchProtocol(_endp);
+                                if (switched!=null)
+                                    connection=switched;
+                                {
+                                    // switched protocol!
+                                    _pipeline = null;
+                                    if (_pipeline!=null)
+                                        _destination.send(_pipeline);
+                                    _pipeline = null;
+
+                                    connection=switched;
+                                }
+                            }
+
+                            // handle pipelined requests
+                            if (_pipeline!=null)
+                            {
+                                if (!persistent || connection!=this)
+                                    _destination.send(_pipeline);
+                                else
+                                    _exchange=_pipeline;
+                                _pipeline=null;
+                            }
+
+                            if (_exchange==null && !isReserved())  // TODO how do we return switched connections?
+                                _destination.returnConnection(this, !persistent);
+                        }
+                    }
+                }
+            }
+        }
+        finally
+        {
+            _parser.returnBuffers();
+            _generator.returnBuffers();
+        }
+
+        return connection;
+    }
+
+    @Override
+    public boolean send(HttpExchange ex) throws IOException
+    {
+        boolean sent=super.send(ex);
+        if (sent)
+        {
+            synchronized (this)
+            {
+                notifyAll();
+            }
+        }
+        return sent;
+    }
+}
diff --git a/src/java/org/eclipse/jetty/client/CachedExchange.java b/src/java/org/eclipse/jetty/client/CachedExchange.java
new file mode 100644
index 0000000..2643399
--- /dev/null
+++ b/src/java/org/eclipse/jetty/client/CachedExchange.java
@@ -0,0 +1,75 @@
+//
+//  ========================================================================
+//  Copyright (c) 1995-2014 Mort Bay Consulting Pty. Ltd.
+//  ------------------------------------------------------------------------
+//  All rights reserved. This program and the accompanying materials
+//  are made available under the terms of the Eclipse Public License v1.0
+//  and Apache License v2.0 which accompanies this distribution.
+//
+//      The Eclipse Public License is available at
+//      http://www.eclipse.org/legal/epl-v10.html
+//
+//      The Apache License v2.0 is available at
+//      http://www.opensource.org/licenses/apache2.0.php
+//
+//  You may elect to redistribute this code under either of these licenses.
+//  ========================================================================
+//
+
+package org.eclipse.jetty.client;
+
+import java.io.IOException;
+
+import org.eclipse.jetty.http.HttpFields;
+import org.eclipse.jetty.io.Buffer;
+
+/**
+ * An exchange that retains response status and response headers for later use.
+ */
+public class CachedExchange extends HttpExchange
+{
+    private final HttpFields _responseFields;
+    private volatile int _responseStatus;
+
+    /**
+     * Creates a new CachedExchange.
+     *
+     * @param cacheHeaders true to cache response headers, false to not cache them
+     */
+    public CachedExchange(boolean cacheHeaders)
+    {
+        _responseFields = cacheHeaders ? new HttpFields() : null;
+    }
+
+    public synchronized int getResponseStatus()
+    {
+        if (getStatus() < HttpExchange.STATUS_PARSING_HEADERS)
+            throw new IllegalStateException("Response not received yet");
+        return _responseStatus;
+    }
+
+    public synchronized HttpFields getResponseFields()
+    {
+        if (getStatus() < HttpExchange.STATUS_PARSING_CONTENT)
+            throw new IllegalStateException("Headers not completely received yet");
+        return _responseFields;
+    }
+
+    @Override
+    protected synchronized void onResponseStatus(Buffer version, int status, Buffer reason) throws IOException
+    {
+        _responseStatus = status;
+        super.onResponseStatus(version, status, reason);
+    }
+
+    @Override
+    protected synchronized void onResponseHeader(Buffer name, Buffer value) throws IOException
+    {
+        if (_responseFields != null)
+        {
+            _responseFields.add(name, value.asImmutableBuffer());
+        }
+        
+        super.onResponseHeader(name, value);
+    }
+}
diff --git a/src/java/org/eclipse/jetty/client/ContentExchange.java b/src/java/org/eclipse/jetty/client/ContentExchange.java
new file mode 100644
index 0000000..4cbbe9c
--- /dev/null
+++ b/src/java/org/eclipse/jetty/client/ContentExchange.java
@@ -0,0 +1,135 @@
+//
+//  ========================================================================
+//  Copyright (c) 1995-2014 Mort Bay Consulting Pty. Ltd.
+//  ------------------------------------------------------------------------
+//  All rights reserved. This program and the accompanying materials
+//  are made available under the terms of the Eclipse Public License v1.0
+//  and Apache License v2.0 which accompanies this distribution.
+//
+//      The Eclipse Public License is available at
+//      http://www.eclipse.org/legal/epl-v10.html
+//
+//      The Apache License v2.0 is available at
+//      http://www.opensource.org/licenses/apache2.0.php
+//
+//  You may elect to redistribute this code under either of these licenses.
+//  ========================================================================
+//
+
+package org.eclipse.jetty.client;
+
+import java.io.ByteArrayOutputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.UnsupportedEncodingException;
+
+import org.eclipse.jetty.http.HttpHeaders;
+import org.eclipse.jetty.io.Buffer;
+import org.eclipse.jetty.io.BufferUtil;
+import org.eclipse.jetty.util.StringUtil;
+
+/**
+ * A exchange that retains response content for later use.
+ */
+public class ContentExchange extends CachedExchange
+{
+    private int _bufferSize = 4096;
+    private String _encoding = "utf-8";
+    private ByteArrayOutputStream _responseContent;
+    private File _fileForUpload;
+
+    public ContentExchange()
+    {
+        super(false);
+    }
+
+    public ContentExchange(boolean cacheFields)
+    {
+        super(cacheFields);
+    }
+
+    public synchronized String getResponseContent() throws UnsupportedEncodingException
+    {
+        if (_responseContent != null)
+            return _responseContent.toString(_encoding);
+        return null;
+    }
+
+    public synchronized byte[] getResponseContentBytes()
+    {
+        if (_responseContent != null)
+            return _responseContent.toByteArray();
+        return null;
+    }
+
+    @Override
+    protected synchronized void onResponseStatus(Buffer version, int status, Buffer reason) throws IOException
+    {
+        if (_responseContent!=null)
+            _responseContent.reset();
+        super.onResponseStatus(version,status,reason);
+    }
+
+    @Override
+    protected synchronized void onResponseHeader(Buffer name, Buffer value) throws IOException
+    {
+        super.onResponseHeader(name, value);
+        int header = HttpHeaders.CACHE.getOrdinal(name);
+        switch (header)
+        {
+            case HttpHeaders.CONTENT_LENGTH_ORDINAL:
+                _bufferSize = BufferUtil.toInt(value);
+                break;
+            case HttpHeaders.CONTENT_TYPE_ORDINAL:
+                String mime = StringUtil.asciiToLowerCase(value.toString());
+                int i = mime.indexOf("charset=");
+                if (i > 0)
+                {
+                    _encoding = mime.substring(i + 8);
+                    i = _encoding.indexOf(';');
+                    if (i > 0)
+                        _encoding = _encoding.substring(0, i);
+                }
+                break;
+        }
+    }
+
+    @Override
+    protected synchronized void onResponseContent(Buffer content) throws IOException
+    {
+        super.onResponseContent(content);
+        if (_responseContent == null)
+            _responseContent = new ByteArrayOutputStream(_bufferSize);
+        content.writeTo(_responseContent);
+    }
+
+    @Override
+    protected synchronized void onRetry() throws IOException
+    {
+        if (_fileForUpload != null)
+        {
+            setRequestContent(null);
+            setRequestContentSource(getInputStream());
+        }
+        else
+            super.onRetry();
+    }
+
+    private synchronized InputStream getInputStream() throws IOException
+    {
+        return new FileInputStream(_fileForUpload);
+    }
+
+    public synchronized File getFileForUpload()
+    {
+        return _fileForUpload;
+    }
+
+    public synchronized void setFileForUpload(File fileForUpload) throws IOException
+    {
+        this._fileForUpload = fileForUpload;
+        setRequestContentSource(getInputStream());
+    }
+}
diff --git a/src/java/org/eclipse/jetty/client/HttpClient.java b/src/java/org/eclipse/jetty/client/HttpClient.java
new file mode 100644
index 0000000..80f5536
--- /dev/null
+++ b/src/java/org/eclipse/jetty/client/HttpClient.java
@@ -0,0 +1,911 @@
+//
+//  ========================================================================
+//  Copyright (c) 1995-2014 Mort Bay Consulting Pty. Ltd.
+//  ------------------------------------------------------------------------
+//  All rights reserved. This program and the accompanying materials
+//  are made available under the terms of the Eclipse Public License v1.0
+//  and Apache License v2.0 which accompanies this distribution.
+//
+//      The Eclipse Public License is available at
+//      http://www.eclipse.org/legal/epl-v10.html
+//
+//      The Apache License v2.0 is available at
+//      http://www.opensource.org/licenses/apache2.0.php
+//
+//  You may elect to redistribute this code under either of these licenses.
+//  ========================================================================
+//
+
+package org.eclipse.jetty.client;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.UnknownHostException;
+import java.util.Enumeration;
+import java.util.LinkedList;
+import java.util.Set;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentMap;
+import javax.net.ssl.SSLContext;
+
+import org.eclipse.jetty.client.security.Authentication;
+import org.eclipse.jetty.client.security.RealmResolver;
+import org.eclipse.jetty.client.security.SecurityListener;
+import org.eclipse.jetty.http.HttpBuffers;
+import org.eclipse.jetty.http.HttpBuffersImpl;
+import org.eclipse.jetty.http.HttpSchemes;
+import org.eclipse.jetty.io.Buffers;
+import org.eclipse.jetty.io.Buffers.Type;
+import org.eclipse.jetty.util.Attributes;
+import org.eclipse.jetty.util.AttributesMap;
+import org.eclipse.jetty.util.component.AggregateLifeCycle;
+import org.eclipse.jetty.util.component.Dumpable;
+import org.eclipse.jetty.util.component.LifeCycle;
+import org.eclipse.jetty.util.ssl.SslContextFactory;
+import org.eclipse.jetty.util.thread.QueuedThreadPool;
+import org.eclipse.jetty.util.thread.ThreadPool;
+import org.eclipse.jetty.util.thread.Timeout;
+
+/**
+ * Http Client.
+ * <p/>
+ * HttpClient is the main active component of the client API implementation.
+ * It is the opposite of the Connectors in standard Jetty, in that it listens
+ * for responses rather than requests.   Just like the connectors, there is a
+ * blocking socket version and a non-blocking NIO version (implemented as nested classes
+ * selected by {@link #setConnectorType(int)}).
+ * <p/>
+ * The an instance of {@link HttpExchange} is passed to the {@link #send(HttpExchange)} method
+ * to send a request.  The exchange contains both the headers and content (source) of the request
+ * plus the callbacks to handle responses.   A HttpClient can have many exchanges outstanding
+ * and they may be queued on the {@link HttpDestination} waiting for a {@link AbstractHttpConnection},
+ * queued in the {@link AbstractHttpConnection} waiting to be transmitted or pipelined on the actual
+ * TCP/IP connection waiting for a response.
+ * <p/>
+ * The {@link HttpDestination} class is an aggregation of {@link AbstractHttpConnection}s for the
+ * same host, port and protocol.   A destination may limit the number of connections
+ * open and they provide a pool of open connections that may be reused.   Connections may also
+ * be allocated from a destination, so that multiple request sources are not multiplexed
+ * over the same connection.
+ *
+ * @see HttpExchange
+ * @see HttpDestination
+ */
+public class HttpClient extends AggregateLifeCycle implements HttpBuffers, Attributes, Dumpable
+{
+    public static final int CONNECTOR_SOCKET = 0;
+    public static final int CONNECTOR_SELECT_CHANNEL = 2;
+
+    private int _connectorType = CONNECTOR_SELECT_CHANNEL;
+    private boolean _useDirectBuffers = true;
+    private boolean _connectBlocking = true;
+    private int _maxConnectionsPerAddress = Integer.MAX_VALUE;
+    private int _maxQueueSizePerAddress = Integer.MAX_VALUE;
+    private ConcurrentMap<Address, HttpDestination> _destinations = new ConcurrentHashMap<Address, HttpDestination>();
+    ThreadPool _threadPool;
+    Connector _connector;
+    private long _idleTimeout = 20000;
+    private long _timeout = 320000;
+    private int _connectTimeout = 75000;
+    private Timeout _timeoutQ = new Timeout();
+    private Timeout _idleTimeoutQ = new Timeout();
+    private Address _proxy;
+    private Authentication _proxyAuthentication;
+    private Set<String> _noProxy;
+    private int _maxRetries = 3;
+    private int _maxRedirects = 20;
+    private LinkedList<String> _registeredListeners;
+
+    private final SslContextFactory _sslContextFactory;
+
+    private RealmResolver _realmResolver;
+
+    private AttributesMap _attributes=new AttributesMap();
+
+    private final HttpBuffersImpl _buffers= new HttpBuffersImpl();
+
+    /* ------------------------------------------------------------------------------- */
+    private void setBufferTypes()
+    {
+        if (_connectorType==CONNECTOR_SOCKET)
+        {
+            _buffers.setRequestBufferType(Type.BYTE_ARRAY);
+            _buffers.setRequestHeaderType(Type.BYTE_ARRAY);
+            _buffers.setResponseBufferType(Type.BYTE_ARRAY);
+            _buffers.setResponseHeaderType(Type.BYTE_ARRAY);
+        }
+        else
+        {
+            _buffers.setRequestBufferType(Type.DIRECT);
+            _buffers.setRequestHeaderType(_useDirectBuffers?Type.DIRECT:Type.INDIRECT);
+            _buffers.setResponseBufferType(Type.DIRECT);
+            _buffers.setResponseHeaderType(_useDirectBuffers?Type.DIRECT:Type.INDIRECT);
+        }
+
+    }
+
+    /* ------------------------------------------------------------------------------- */
+    public HttpClient()
+    {
+        this(new SslContextFactory());
+    }
+
+    /* ------------------------------------------------------------------------------- */
+    public HttpClient(SslContextFactory sslContextFactory)
+    {
+        _sslContextFactory = sslContextFactory;
+        addBean(_sslContextFactory);
+        addBean(_buffers);
+    }
+
+    /* ------------------------------------------------------------------------------- */
+    /**
+     * @return True if connects will be in blocking mode.
+     */
+    public boolean isConnectBlocking()
+    {
+        return _connectBlocking;
+    }
+
+    /* ------------------------------------------------------------------------------- */
+    /**
+     * @param connectBlocking True if connects will be in blocking mode.
+     */
+    public void setConnectBlocking(boolean connectBlocking)
+    {
+        _connectBlocking = connectBlocking;
+    }
+
+    /* ------------------------------------------------------------------------------- */
+    public void send(HttpExchange exchange) throws IOException
+    {
+        boolean ssl = HttpSchemes.HTTPS_BUFFER.equalsIgnoreCase(exchange.getScheme());
+        HttpDestination destination = getDestination(exchange.getAddress(), ssl);
+        destination.send(exchange);
+    }
+
+    /* ------------------------------------------------------------ */
+    /**
+     * @return the threadpool
+     */
+    public ThreadPool getThreadPool()
+    {
+        return _threadPool;
+    }
+
+    /* ------------------------------------------------------------ */
+    /** Set the ThreadPool.
+     * The threadpool passed is added via {@link #addBean(Object)} so that
+     * it's lifecycle may be managed as a {@link AggregateLifeCycle}.
+     * @param threadPool the threadPool to set
+     */
+    public void setThreadPool(ThreadPool threadPool)
+    {
+        removeBean(_threadPool);
+        _threadPool = threadPool;
+        addBean(_threadPool);
+    }
+
+
+    /* ------------------------------------------------------------ */
+    /**
+     * @param name
+     * @return Attribute associated with client
+     */
+    public Object getAttribute(String name)
+    {
+        return _attributes.getAttribute(name);
+    }
+
+    /* ------------------------------------------------------------ */
+    /**
+     * @return names of attributes associated with client
+     */
+    public Enumeration getAttributeNames()
+    {
+        return _attributes.getAttributeNames();
+    }
+
+    /* ------------------------------------------------------------ */
+    /**
+     * @param name
+     */
+    public void removeAttribute(String name)
+    {
+        _attributes.removeAttribute(name);
+    }
+
+    /* ------------------------------------------------------------ */
+    /**
+     * Set an attribute on the HttpClient.
+     * Attributes are not used by the client, but are provided for
+     * so that users of a shared HttpClient may share other structures.
+     * @param name
+     * @param attribute
+     */
+    public void setAttribute(String name, Object attribute)
+    {
+        _attributes.setAttribute(name,attribute);
+    }
+
+    /* ------------------------------------------------------------ */
+    public void clearAttributes()
+    {
+        _attributes.clearAttributes();
+    }
+
+    /* ------------------------------------------------------------------------------- */
+    public HttpDestination getDestination(Address remote, boolean ssl) throws IOException
+    {
+        return getDestination(remote, ssl, getSslContextFactory());
+    }
+
+    /* ------------------------------------------------------------------------------- */
+    public HttpDestination getDestination(Address remote, boolean ssl, SslContextFactory sslContextFactory) throws IOException
+    {
+        if (remote == null)
+            throw new UnknownHostException("Remote socket address cannot be null.");
+
+        HttpDestination destination = _destinations.get(remote);
+        if (destination == null)
+        {
+            destination = new HttpDestination(this, remote, ssl, sslContextFactory);
+            if (_proxy != null && (_noProxy == null || !_noProxy.contains(remote.getHost())))
+            {
+                destination.setProxy(_proxy);
+                if (_proxyAuthentication != null)
+                    destination.setProxyAuthentication(_proxyAuthentication);
+            }
+            HttpDestination other =_destinations.putIfAbsent(remote, destination);
+            if (other!=null)
+                destination=other;
+        }
+        return destination;
+    }
+
+    /* ------------------------------------------------------------ */
+    public void schedule(Timeout.Task task)
+    {
+        _timeoutQ.schedule(task);
+    }
+
+    /* ------------------------------------------------------------ */
+    public void schedule(Timeout.Task task, long timeout)
+    {
+        _timeoutQ.schedule(task, timeout - _timeoutQ.getDuration());
+    }
+
+    /* ------------------------------------------------------------ */
+    public void scheduleIdle(Timeout.Task task)
+    {
+        _idleTimeoutQ.schedule(task);
+    }
+
+    /* ------------------------------------------------------------ */
+    public void cancel(Timeout.Task task)
+    {
+        task.cancel();
+    }
+
+    /* ------------------------------------------------------------ */
+    /**
+     * Get whether the connector can use direct NIO buffers.
+     */
+    public boolean getUseDirectBuffers()
+    {
+        return _useDirectBuffers;
+    }
+
+    /* ------------------------------------------------------------ */
+    /** Set a RealmResolver for client Authentication.
+     * If a realmResolver is set, then the HttpDestinations created by
+     * this client will instantiate a {@link SecurityListener} so that
+     * BASIC and DIGEST authentication can be performed.
+     * @param resolver
+     */
+    public void setRealmResolver(RealmResolver resolver)
+    {
+        _realmResolver = resolver;
+    }
+
+    /* ------------------------------------------------------------ */
+    /**
+     * returns the SecurityRealmResolver reg_realmResolveristered with the HttpClient or null
+     *
+     * @return the SecurityRealmResolver reg_realmResolveristered with the HttpClient or null
+     */
+    public RealmResolver getRealmResolver()
+    {
+        return _realmResolver;
+    }
+
+    /* ------------------------------------------------------------ */
+    public boolean hasRealms()
+    {
+        return _realmResolver == null ? false : true;
+    }
+
+
+    /* ------------------------------------------------------------ */
+    /**
+     * Registers a listener that can listen to the stream of execution between the client and the
+     * server and influence events.  Sequential calls to the method wrapper sequentially wrap the preceding
+     * listener in a delegation model.
+     * <p/>
+     * NOTE: the SecurityListener is a special listener which doesn't need to be added via this
+     * mechanic, if you register security realms then it will automatically be added as the top listener of the
+     * delegation stack.
+     *
+     * @param listenerClass
+     */
+    public void registerListener(String listenerClass)
+    {
+        if (_registeredListeners == null)
+        {
+            _registeredListeners = new LinkedList<String>();
+        }
+        _registeredListeners.add(listenerClass);
+    }
+
+    /* ------------------------------------------------------------ */
+    public LinkedList<String> getRegisteredListeners()
+    {
+        return _registeredListeners;
+    }
+
+
+    /* ------------------------------------------------------------ */
+    /**
+     * Set to use NIO direct buffers.
+     *
+     * @param direct If True (the default), the connector can use NIO direct
+     *               buffers. Some JVMs have memory management issues (bugs) with
+     *               direct buffers.
+     */
+    public void setUseDirectBuffers(boolean direct)
+    {
+        _useDirectBuffers = direct;
+        setBufferTypes();
+    }
+
+    /* ------------------------------------------------------------ */
+    /**
+     * Get the type of connector (socket, blocking or select) in use.
+     */
+    public int getConnectorType()
+    {
+        return _connectorType;
+    }
+
+    /* ------------------------------------------------------------ */
+    public void setConnectorType(int connectorType)
+    {
+        this._connectorType = connectorType;
+        setBufferTypes();
+    }
+
+    /* ------------------------------------------------------------ */
+    public int getMaxConnectionsPerAddress()
+    {
+        return _maxConnectionsPerAddress;
+    }
+
+    /* ------------------------------------------------------------ */
+    public void setMaxConnectionsPerAddress(int maxConnectionsPerAddress)
+    {
+        _maxConnectionsPerAddress = maxConnectionsPerAddress;
+    }
+
+    public int getMaxQueueSizePerAddress()
+    {
+        return _maxQueueSizePerAddress;
+    }
+
+    public void setMaxQueueSizePerAddress(int maxQueueSizePerAddress)
+    {
+        this._maxQueueSizePerAddress = maxQueueSizePerAddress;
+    }
+
+    /* ------------------------------------------------------------ */
+    @Override
+    protected void doStart() throws Exception
+    {
+        setBufferTypes();
+
+        _timeoutQ.setDuration(_timeout);
+        _timeoutQ.setNow();
+        _idleTimeoutQ.setDuration(_idleTimeout);
+        _idleTimeoutQ.setNow();
+
+        if (_threadPool==null)
+        {
+            QueuedThreadPool pool = new LocalQueuedThreadPool();
+            pool.setMaxThreads(16);
+            pool.setDaemon(true);
+            pool.setName("HttpClient");
+            _threadPool = pool;
+            addBean(_threadPool,true);
+        }
+
+        _connector=(_connectorType == CONNECTOR_SELECT_CHANNEL)?new SelectConnector(this):new SocketConnector(this);
+        addBean(_connector,true);
+
+        super.doStart();
+
+        _threadPool.dispatch(new Runnable()
+        {
+            public void run()
+            {
+                while (isRunning())
+                {
+                    _timeoutQ.tick(System.currentTimeMillis());
+                    _idleTimeoutQ.tick(_timeoutQ.getNow());
+                    try
+                    {
+                        Thread.sleep(200);
+                    }
+                    catch (InterruptedException ignored)
+                    {
+                    }
+                }
+            }
+        });
+    }
+
+    /* ------------------------------------------------------------ */
+    @Override
+    protected void doStop() throws Exception
+    {
+        for (HttpDestination destination : _destinations.values())
+            destination.close();
+
+        _timeoutQ.cancelAll();
+        _idleTimeoutQ.cancelAll();
+
+        super.doStop();
+
+        if (_threadPool instanceof LocalQueuedThreadPool)
+        {
+            removeBean(_threadPool);
+            _threadPool = null;
+        }
+
+        removeBean(_connector);
+    }
+
+    /* ------------------------------------------------------------ */
+    interface Connector extends LifeCycle
+    {
+        public void startConnection(HttpDestination destination) throws IOException;
+    }
+
+    /* ------------------------------------------------------------ */
+    /**
+     * if a keystore location has been provided then client will attempt to use it as the keystore,
+     * otherwise we simply ignore certificates and run with a loose ssl context.
+     *
+     * @return the SSL context
+     */
+    protected SSLContext getSSLContext()
+    {
+        return _sslContextFactory.getSslContext();
+    }
+
+    /* ------------------------------------------------------------ */
+    /**
+     * @return the instance of SslContextFactory associated with the client
+     */
+    public SslContextFactory getSslContextFactory()
+    {
+        return _sslContextFactory;
+    }
+
+    /* ------------------------------------------------------------ */
+    /**
+     * @return the period in milliseconds a {@link AbstractHttpConnection} can be idle for before it is closed.
+     */
+    public long getIdleTimeout()
+    {
+        return _idleTimeout;
+    }
+
+    /* ------------------------------------------------------------ */
+    /**
+     * @param ms the period in milliseconds a {@link AbstractHttpConnection} can be idle for before it is closed.
+     */
+    public void setIdleTimeout(long ms)
+    {
+        _idleTimeout = ms;
+    }
+
+    /* ------------------------------------------------------------ */
+    /**
+     * @return the period in ms that an exchange will wait for a response from the server.
+     * @deprecated use {@link #getTimeout()} instead.
+     */
+    @Deprecated
+    public int getSoTimeout()
+    {
+        return Long.valueOf(getTimeout()).intValue();
+    }
+
+    /* ------------------------------------------------------------ */
+    /**
+     * @deprecated use {@link #setTimeout(long)} instead.
+     * @param timeout the period in ms that an exchange will wait for a response from the server.
+     */
+    @Deprecated
+    public void setSoTimeout(int timeout)
+    {
+        setTimeout(timeout);
+    }
+
+    /* ------------------------------------------------------------ */
+    /**
+     * @return the period in ms that an exchange will wait for a response from the server.
+     */
+    public long getTimeout()
+    {
+        return _timeout;
+    }
+
+    /* ------------------------------------------------------------ */
+    /**
+     * @param timeout the period in ms that an exchange will wait for a response from the server.
+     */
+    public void setTimeout(long timeout)
+    {
+        _timeout = timeout;
+    }
+
+    /* ------------------------------------------------------------ */
+    /**
+     * @return the period in ms before timing out an attempt to connect
+     */
+    public int getConnectTimeout()
+    {
+        return _connectTimeout;
+    }
+
+    /* ------------------------------------------------------------ */
+    /**
+     * @param connectTimeout the period in ms before timing out an attempt to connect
+     */
+    public void setConnectTimeout(int connectTimeout)
+    {
+        this._connectTimeout = connectTimeout;
+    }
+
+    /* ------------------------------------------------------------ */
+    public Address getProxy()
+    {
+        return _proxy;
+    }
+
+    /* ------------------------------------------------------------ */
+    public void setProxy(Address proxy)
+    {
+        this._proxy = proxy;
+    }
+
+    /* ------------------------------------------------------------ */
+    public Authentication getProxyAuthentication()
+    {
+        return _proxyAuthentication;
+    }
+
+    /* ------------------------------------------------------------ */
+    public void setProxyAuthentication(Authentication authentication)
+    {
+        _proxyAuthentication = authentication;
+    }
+
+    /* ------------------------------------------------------------ */
+    public boolean isProxied()
+    {
+        return this._proxy != null;
+    }
+
+    /* ------------------------------------------------------------ */
+    public Set<String> getNoProxy()
+    {
+        return _noProxy;
+    }
+
+    /* ------------------------------------------------------------ */
+    public void setNoProxy(Set<String> noProxyAddresses)
+    {
+        _noProxy = noProxyAddresses;
+    }
+
+    /* ------------------------------------------------------------ */
+    public int maxRetries()
+    {
+        return _maxRetries;
+    }
+
+    /* ------------------------------------------------------------ */
+    public void setMaxRetries(int retries)
+    {
+        _maxRetries = retries;
+    }
+
+    /* ------------------------------------------------------------ */
+    public int maxRedirects()
+    {
+        return _maxRedirects;
+    }
+
+    /* ------------------------------------------------------------ */
+    public void setMaxRedirects(int redirects)
+    {
+        _maxRedirects = redirects;
+    }
+
+    public int getRequestBufferSize()
+    {
+        return _buffers.getRequestBufferSize();
+    }
+
+    public void setRequestBufferSize(int requestBufferSize)
+    {
+        _buffers.setRequestBufferSize(requestBufferSize);
+    }
+
+    public int getRequestHeaderSize()
+    {
+        return _buffers.getRequestHeaderSize();
+    }
+
+    public void setRequestHeaderSize(int requestHeaderSize)
+    {
+        _buffers.setRequestHeaderSize(requestHeaderSize);
+    }
+
+    public int getResponseBufferSize()
+    {
+        return _buffers.getResponseBufferSize();
+    }
+
+    public void setResponseBufferSize(int responseBufferSize)
+    {
+        _buffers.setResponseBufferSize(responseBufferSize);
+    }
+
+    public int getResponseHeaderSize()
+    {
+        return _buffers.getResponseHeaderSize();
+    }
+
+    public void setResponseHeaderSize(int responseHeaderSize)
+    {
+        _buffers.setResponseHeaderSize(responseHeaderSize);
+    }
+
+    public Type getRequestBufferType()
+    {
+        return _buffers.getRequestBufferType();
+    }
+
+    public Type getRequestHeaderType()
+    {
+        return _buffers.getRequestHeaderType();
+    }
+
+    public Type getResponseBufferType()
+    {
+        return _buffers.getResponseBufferType();
+    }
+
+    public Type getResponseHeaderType()
+    {
+        return _buffers.getResponseHeaderType();
+    }
+
+    public void setRequestBuffers(Buffers requestBuffers)
+    {
+        _buffers.setRequestBuffers(requestBuffers);
+    }
+
+    public void setResponseBuffers(Buffers responseBuffers)
+    {
+        _buffers.setResponseBuffers(responseBuffers);
+    }
+
+    public Buffers getRequestBuffers()
+    {
+        return _buffers.getRequestBuffers();
+    }
+
+    public Buffers getResponseBuffers()
+    {
+        return _buffers.getResponseBuffers();
+    }
+
+    public void setMaxBuffers(int maxBuffers)
+    {
+        _buffers.setMaxBuffers(maxBuffers);
+    }
+
+    public int getMaxBuffers()
+    {
+        return _buffers.getMaxBuffers();
+    }
+
+    /* ------------------------------------------------------------ */
+    @Deprecated
+    public String getTrustStoreLocation()
+    {
+        return _sslContextFactory.getTrustStore();
+    }
+
+    /* ------------------------------------------------------------ */
+    @Deprecated
+    public void setTrustStoreLocation(String trustStoreLocation)
+    {
+        _sslContextFactory.setTrustStore(trustStoreLocation);
+    }
+
+    /* ------------------------------------------------------------ */
+    @Deprecated
+    public InputStream getTrustStoreInputStream()
+    {
+        return _sslContextFactory.getTrustStoreInputStream();
+    }
+
+    /* ------------------------------------------------------------ */
+    @Deprecated
+    public void setTrustStoreInputStream(InputStream trustStoreInputStream)
+    {
+        _sslContextFactory.setTrustStoreInputStream(trustStoreInputStream);
+    }
+
+    /* ------------------------------------------------------------ */
+    @Deprecated
+    public String getKeyStoreLocation()
+    {
+        return _sslContextFactory.getKeyStorePath();
+    }
+
+    /* ------------------------------------------------------------ */
+    @Deprecated
+    public void setKeyStoreLocation(String keyStoreLocation)
+    {
+        _sslContextFactory.setKeyStorePath(keyStoreLocation);
+    }
+
+    @Deprecated
+    public InputStream getKeyStoreInputStream()
+    {
+        return _sslContextFactory.getKeyStoreInputStream();
+    }
+
+    @Deprecated
+    public void setKeyStoreInputStream(InputStream keyStoreInputStream)
+    {
+        _sslContextFactory.setKeyStoreInputStream(keyStoreInputStream);
+    }
+
+    /* ------------------------------------------------------------ */
+    @Deprecated
+    public void setKeyStorePassword(String keyStorePassword)
+    {
+        _sslContextFactory.setKeyStorePassword(keyStorePassword);
+    }
+
+    /* ------------------------------------------------------------ */
+    @Deprecated
+    public void setKeyManagerPassword(String keyManagerPassword)
+    {
+        _sslContextFactory.setKeyManagerPassword(keyManagerPassword);
+    }
+
+    /* ------------------------------------------------------------ */
+    @Deprecated
+    public void setTrustStorePassword(String trustStorePassword)
+    {
+        _sslContextFactory.setTrustStorePassword(trustStorePassword);
+    }
+
+    /* ------------------------------------------------------------ */
+    @Deprecated
+    public String getKeyStoreType()
+    {
+        return _sslContextFactory.getKeyStoreType();
+    }
+
+    /* ------------------------------------------------------------ */
+    @Deprecated
+    public void setKeyStoreType(String keyStoreType)
+    {
+        _sslContextFactory.setKeyStoreType(keyStoreType);
+    }
+
+    /* ------------------------------------------------------------ */
+    @Deprecated
+    public String getTrustStoreType()
+    {
+        return _sslContextFactory.getTrustStoreType();
+    }
+
+    /* ------------------------------------------------------------ */
+    @Deprecated
+    public void setTrustStoreType(String trustStoreType)
+    {
+        _sslContextFactory.setTrustStoreType(trustStoreType);
+    }
+
+    /* ------------------------------------------------------------ */
+    @Deprecated
+    public String getKeyManagerAlgorithm()
+    {
+        return _sslContextFactory.getSslKeyManagerFactoryAlgorithm();
+    }
+
+    /* ------------------------------------------------------------ */
+    @Deprecated
+    public void setKeyManagerAlgorithm(String keyManagerAlgorithm)
+    {
+        _sslContextFactory.setSslKeyManagerFactoryAlgorithm(keyManagerAlgorithm);
+    }
+
+    /* ------------------------------------------------------------ */
+    @Deprecated
+    public String getTrustManagerAlgorithm()
+    {
+        return _sslContextFactory.getTrustManagerFactoryAlgorithm();
+    }
+
+    /* ------------------------------------------------------------ */
+    @Deprecated
+    public void setTrustManagerAlgorithm(String trustManagerAlgorithm)
+    {
+        _sslContextFactory.setTrustManagerFactoryAlgorithm(trustManagerAlgorithm);
+    }
+
+    /* ------------------------------------------------------------ */
+    @Deprecated
+    public String getProtocol()
+    {
+        return _sslContextFactory.getProtocol();
+    }
+
+    /* ------------------------------------------------------------ */
+    @Deprecated
+    public void setProtocol(String protocol)
+    {
+        _sslContextFactory.setProtocol(protocol);
+    }
+
+    /* ------------------------------------------------------------ */
+    @Deprecated
+    public String getProvider()
+    {
+        return _sslContextFactory.getProvider();
+    }
+
+    /* ------------------------------------------------------------ */
+    @Deprecated
+    public void setProvider(String provider)
+    {
+        _sslContextFactory.setProvider(provider);
+    }
+
+    /* ------------------------------------------------------------ */
+    @Deprecated
+    public String getSecureRandomAlgorithm()
+    {
+        return _sslContextFactory.getSecureRandomAlgorithm();
+    }
+
+    /* ------------------------------------------------------------ */
+    @Deprecated
+    public void setSecureRandomAlgorithm(String secureRandomAlgorithm)
+    {
+        _sslContextFactory.setSecureRandomAlgorithm(secureRandomAlgorithm);
+    }
+
+    private static class LocalQueuedThreadPool extends QueuedThreadPool
+    {
+    }
+}
diff --git a/src/java/org/eclipse/jetty/client/HttpDestination.java b/src/java/org/eclipse/jetty/client/HttpDestination.java
new file mode 100644
index 0000000..4e551cd
--- /dev/null
+++ b/src/java/org/eclipse/jetty/client/HttpDestination.java
@@ -0,0 +1,751 @@
+//
+//  ========================================================================
+//  Copyright (c) 1995-2014 Mort Bay Consulting Pty. Ltd.
+//  ------------------------------------------------------------------------
+//  All rights reserved. This program and the accompanying materials
+//  are made available under the terms of the Eclipse Public License v1.0
+//  and Apache License v2.0 which accompanies this distribution.
+//
+//      The Eclipse Public License is available at
+//      http://www.eclipse.org/legal/epl-v10.html
+//
+//      The Apache License v2.0 is available at
+//      http://www.opensource.org/licenses/apache2.0.php
+//
+//  You may elect to redistribute this code under either of these licenses.
+//  ========================================================================
+//
+
+package org.eclipse.jetty.client;
+
+import java.io.IOException;
+import java.lang.reflect.Constructor;
+import java.net.ProtocolException;
+import java.util.ArrayList;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.concurrent.ArrayBlockingQueue;
+import java.util.concurrent.BlockingQueue;
+import java.util.concurrent.RejectedExecutionException;
+
+import org.eclipse.jetty.client.HttpClient.Connector;
+import org.eclipse.jetty.client.security.Authentication;
+import org.eclipse.jetty.client.security.SecurityListener;
+import org.eclipse.jetty.http.HttpCookie;
+import org.eclipse.jetty.http.HttpHeaders;
+import org.eclipse.jetty.http.HttpMethods;
+import org.eclipse.jetty.http.HttpStatus;
+import org.eclipse.jetty.http.PathMap;
+import org.eclipse.jetty.io.Buffer;
+import org.eclipse.jetty.io.ByteArrayBuffer;
+import org.eclipse.jetty.io.Connection;
+import org.eclipse.jetty.io.EndPoint;
+import org.eclipse.jetty.util.component.AggregateLifeCycle;
+import org.eclipse.jetty.util.component.Dumpable;
+import org.eclipse.jetty.util.log.Log;
+import org.eclipse.jetty.util.log.Logger;
+import org.eclipse.jetty.util.ssl.SslContextFactory;
+
+/**
+ * @version $Revision: 879 $ $Date: 2009-09-11 16:13:28 +0200 (Fri, 11 Sep 2009) $
+ */
+public class HttpDestination implements Dumpable
+{
+    private static final Logger LOG = Log.getLogger(HttpDestination.class);
+
+    private final List<HttpExchange> _exchanges = new LinkedList<HttpExchange>();
+    private final List<AbstractHttpConnection> _connections = new LinkedList<AbstractHttpConnection>();
+    private final BlockingQueue<Object> _reservedConnections = new ArrayBlockingQueue<Object>(10, true);
+    private final List<AbstractHttpConnection> _idleConnections = new ArrayList<AbstractHttpConnection>();
+    private final HttpClient _client;
+    private final Address _address;
+    private final boolean _ssl;
+    private final SslContextFactory _sslContextFactory;
+    private final ByteArrayBuffer _hostHeader;
+    private volatile int _maxConnections;
+    private volatile int _maxQueueSize;
+    private int _pendingConnections = 0;
+    private int _pendingReservedConnections = 0;
+    private volatile Address _proxy;
+    private Authentication _proxyAuthentication;
+    private PathMap _authorizations;
+    private List<HttpCookie> _cookies;
+
+    HttpDestination(HttpClient client, Address address, boolean ssl, SslContextFactory sslContextFactory)
+    {
+        _client = client;
+        _address = address;
+        _ssl = ssl;
+        _sslContextFactory = sslContextFactory;
+        _maxConnections = _client.getMaxConnectionsPerAddress();
+        _maxQueueSize = _client.getMaxQueueSizePerAddress();
+        String addressString = address.getHost();
+        if (address.getPort() != (_ssl ? 443 : 80))
+            addressString += ":" + address.getPort();
+        _hostHeader = new ByteArrayBuffer(addressString);
+    }
+
+    public HttpClient getHttpClient()
+    {
+        return _client;
+    }
+
+    public Address getAddress()
+    {
+        return _address;
+    }
+
+    public boolean isSecure()
+    {
+        return _ssl;
+    }
+
+    public SslContextFactory getSslContextFactory()
+    {
+        return _sslContextFactory;
+    }
+
+    public Buffer getHostHeader()
+    {
+        return _hostHeader;
+    }
+
+    public int getMaxConnections()
+    {
+        return _maxConnections;
+    }
+
+    public void setMaxConnections(int maxConnections)
+    {
+        this._maxConnections = maxConnections;
+    }
+
+    public int getMaxQueueSize()
+    {
+        return _maxQueueSize;
+    }
+
+    public void setMaxQueueSize(int maxQueueSize)
+    {
+        this._maxQueueSize = maxQueueSize;
+    }
+
+    public int getConnections()
+    {
+        synchronized (this)
+        {
+            return _connections.size();
+        }
+    }
+
+    public int getIdleConnections()
+    {
+        synchronized (this)
+        {
+            return _idleConnections.size();
+        }
+    }
+
+    public void addAuthorization(String pathSpec, Authentication authorization)
+    {
+        synchronized (this)
+        {
+            if (_authorizations == null)
+                _authorizations = new PathMap();
+            _authorizations.put(pathSpec, authorization);
+        }
+
+        // TODO query and remove methods
+    }
+
+    public void addCookie(HttpCookie cookie)
+    {
+        synchronized (this)
+        {
+            if (_cookies == null)
+                _cookies = new ArrayList<HttpCookie>();
+            _cookies.add(cookie);
+        }
+
+        // TODO query, remove and age methods
+    }
+
+    /**
+     * Get a connection. We either get an idle connection if one is available, or
+     * we make a new connection, if we have not yet reached maxConnections. If we
+     * have reached maxConnections, we wait until the number reduces.
+     *
+     * @param timeout max time prepared to block waiting to be able to get a connection
+     * @return a HttpConnection for this destination
+     * @throws IOException if an I/O error occurs
+     */
+    private AbstractHttpConnection getConnection(long timeout) throws IOException
+    {
+        AbstractHttpConnection connection = null;
+
+        while ((connection == null) && (connection = getIdleConnection()) == null && timeout > 0)
+        {
+            boolean startConnection = false;
+            synchronized (this)
+            {
+                int totalConnections = _connections.size() + _pendingConnections;
+                if (totalConnections < _maxConnections)
+                {
+                    _pendingReservedConnections++;
+                    startConnection = true;
+                }
+            }
+
+            if (startConnection)
+            {
+                startNewConnection();
+                try
+                {
+                    Object o = _reservedConnections.take();
+                    if (o instanceof AbstractHttpConnection)
+                    {
+                        connection = (AbstractHttpConnection)o;
+                    }
+                    else
+                        throw (IOException)o;
+                }
+                catch (InterruptedException e)
+                {
+                    LOG.ignore(e);
+                }
+            }
+            else
+            {
+                try
+                {
+                    Thread.currentThread();
+                    Thread.sleep(200);
+                    timeout -= 200;
+                }
+                catch (InterruptedException e)
+                {
+                    LOG.ignore(e);
+                }
+            }
+        }
+        return connection;
+    }
+
+    public AbstractHttpConnection reserveConnection(long timeout) throws IOException
+    {
+        AbstractHttpConnection connection = getConnection(timeout);
+        if (connection != null)
+            connection.setReserved(true);
+        return connection;
+    }
+
+    public AbstractHttpConnection getIdleConnection() throws IOException
+    {
+        AbstractHttpConnection connection = null;
+        while (true)
+        {
+            synchronized (this)
+            {
+                if (connection != null)
+                {
+                    _connections.remove(connection);
+                    connection.close();
+                    connection = null;
+                }
+                if (_idleConnections.size() > 0)
+                    connection = _idleConnections.remove(_idleConnections.size() - 1);
+            }
+
+            if (connection == null)
+            {
+                return null;
+            }
+
+            // Check if the connection was idle,
+            // but it expired just a moment ago
+            if (connection.cancelIdleTimeout())
+            {
+                return connection;
+            }
+        }
+    }
+
+    protected void startNewConnection()
+    {
+        try
+        {
+            synchronized (this)
+            {
+                _pendingConnections++;
+            }
+            final Connector connector = _client._connector;
+            if (connector != null)
+                connector.startConnection(this);
+        }
+        catch (Exception e)
+        {
+            LOG.debug(e);
+            onConnectionFailed(e);
+        }
+    }
+
+    public void onConnectionFailed(Throwable throwable)
+    {
+        Throwable connect_failure = null;
+
+        boolean startConnection = false;
+        synchronized (this)
+        {
+            _pendingConnections--;
+            if (_pendingReservedConnections > 0)
+            {
+                connect_failure = throwable;
+                _pendingReservedConnections--;
+            }
+            else if (_exchanges.size() > 0)
+            {
+                HttpExchange ex = _exchanges.remove(0);
+                if (ex.setStatus(HttpExchange.STATUS_EXCEPTED))
+                    ex.getEventListener().onConnectionFailed(throwable);
+
+                // Since an existing connection had failed, we need to create a
+                // connection if the  queue is not empty and client is running.
+                if (!_exchanges.isEmpty() && _client.isStarted())
+                    startConnection = true;
+            }
+        }
+
+        if (startConnection)
+            startNewConnection();
+
+        if (connect_failure != null)
+        {
+            try
+            {
+                _reservedConnections.put(connect_failure);
+            }
+            catch (InterruptedException e)
+            {
+                LOG.ignore(e);
+            }
+        }
+    }
+
+    public void onException(Throwable throwable)
+    {
+        synchronized (this)
+        {
+            _pendingConnections--;
+            if (_exchanges.size() > 0)
+            {
+                HttpExchange ex = _exchanges.remove(0);
+                if (ex.setStatus(HttpExchange.STATUS_EXCEPTED))
+                    ex.getEventListener().onException(throwable);
+            }
+        }
+    }
+
+    public void onNewConnection(final AbstractHttpConnection connection) throws IOException
+    {
+        Connection reservedConnection = null;
+
+        synchronized (this)
+        {
+            _pendingConnections--;
+            _connections.add(connection);
+
+            if (_pendingReservedConnections > 0)
+            {
+                reservedConnection = connection;
+                _pendingReservedConnections--;
+            }
+            else
+            {
+                // Establish the tunnel if needed
+                EndPoint endPoint = connection.getEndPoint();
+                if (isProxied() && endPoint instanceof SelectConnector.UpgradableEndPoint)
+                {
+                    SelectConnector.UpgradableEndPoint proxyEndPoint = (SelectConnector.UpgradableEndPoint)endPoint;
+                    ConnectExchange connect = new ConnectExchange(getAddress(), proxyEndPoint);
+                    connect.setAddress(getProxy());
+                    LOG.debug("Establishing tunnel to {} via {}", getAddress(), getProxy());
+                    send(connection, connect);
+                }
+                else
+                {
+                    // Another connection stole the exchange that caused the creation of this connection ?
+                    if (_exchanges.size() == 0)
+                    {
+                        LOG.debug("No exchanges for new connection {}", connection);
+                        connection.setIdleTimeout();
+                        _idleConnections.add(connection);
+                    }
+                    else
+                    {
+                        HttpExchange exchange = _exchanges.remove(0);
+                        send(connection, exchange);
+                    }
+                }
+            }
+        }
+
+        if (reservedConnection != null)
+        {
+            try
+            {
+                _reservedConnections.put(reservedConnection);
+            }
+            catch (InterruptedException e)
+            {
+                LOG.ignore(e);
+            }
+        }
+    }
+
+    public void returnConnection(AbstractHttpConnection connection, boolean close) throws IOException
+    {
+        if (connection.isReserved())
+            connection.setReserved(false);
+
+        if (close)
+        {
+            try
+            {
+                connection.close();
+            }
+            catch (IOException e)
+            {
+                LOG.ignore(e);
+            }
+        }
+
+        if (!_client.isStarted())
+            return;
+
+        if (!close && connection.getEndPoint().isOpen())
+        {
+            synchronized (this)
+            {
+                if (_exchanges.size() == 0)
+                {
+                    connection.setIdleTimeout();
+                    _idleConnections.add(connection);
+                }
+                else
+                {
+                    HttpExchange ex = _exchanges.remove(0);
+                    send(connection, ex);
+                }
+                this.notifyAll();
+            }
+        }
+        else
+        {
+            boolean startConnection = false;
+            synchronized (this)
+            {
+                _connections.remove(connection);
+                if (!_exchanges.isEmpty())
+                    startConnection = true;
+            }
+
+            if (startConnection)
+                startNewConnection();
+        }
+    }
+
+    public void returnIdleConnection(AbstractHttpConnection connection)
+    {
+        // TODO work out the real idle time;
+        long idleForMs = connection.getEndPoint() != null ? connection.getEndPoint().getMaxIdleTime() : -1;
+        connection.onIdleExpired(idleForMs);
+
+        boolean startConnection = false;
+        synchronized (this)
+        {
+            _idleConnections.remove(connection);
+            _connections.remove(connection);
+
+            if (!_exchanges.isEmpty() && _client.isStarted())
+                startConnection = true;
+        }
+
+        if (startConnection)
+            startNewConnection();
+    }
+
+    public void send(HttpExchange ex) throws IOException
+    {
+        ex.setStatus(HttpExchange.STATUS_WAITING_FOR_CONNECTION);
+
+        LinkedList<String> listeners = _client.getRegisteredListeners();
+        if (listeners != null)
+        {
+            // Add registered listeners, fail if we can't load them
+            for (int i = listeners.size(); i > 0; --i)
+            {
+                String listenerClass = listeners.get(i - 1);
+                try
+                {
+                    Class<?> listener = Class.forName(listenerClass);
+                    Constructor constructor = listener.getDeclaredConstructor(HttpDestination.class, HttpExchange.class);
+                    HttpEventListener elistener = (HttpEventListener)constructor.newInstance(this, ex);
+                    ex.setEventListener(elistener);
+                }
+                catch (final Exception e)
+                {
+                    throw new IOException("Unable to instantiate registered listener for destination: " + listenerClass)
+                    {
+                        {
+                            initCause(e);
+                        }
+                    };
+                }
+            }
+        }
+
+        // Security is supported by default and should be the first consulted
+        if (_client.hasRealms())
+        {
+            ex.setEventListener(new SecurityListener(this, ex));
+        }
+
+        doSend(ex);
+    }
+
+    public void resend(HttpExchange ex) throws IOException
+    {
+        ex.getEventListener().onRetry();
+        ex.reset();
+        doSend(ex);
+    }
+
+    protected void doSend(HttpExchange ex) throws IOException
+    {
+        // add cookies
+        // TODO handle max-age etc.
+        if (_cookies != null)
+        {
+            StringBuilder buf = null;
+            for (HttpCookie cookie : _cookies)
+            {
+                if (buf == null)
+                    buf = new StringBuilder();
+                else
+                    buf.append("; ");
+                buf.append(cookie.getName()); // TODO quotes
+                buf.append("=");
+                buf.append(cookie.getValue()); // TODO quotes
+            }
+            if (buf != null)
+                ex.addRequestHeader(HttpHeaders.COOKIE, buf.toString());
+        }
+
+        // Add any known authorizations
+        if (_authorizations != null)
+        {
+            Authentication auth = (Authentication)_authorizations.match(ex.getRequestURI());
+            if (auth != null)
+                (auth).setCredentials(ex);
+        }
+
+        // Schedule the timeout here, before we queue the exchange
+        // so that we count also the queue time in the timeout
+        ex.scheduleTimeout(this);
+
+        AbstractHttpConnection connection = getIdleConnection();
+        if (connection != null)
+        {
+            send(connection, ex);
+        }
+        else
+        {
+            boolean startConnection = false;
+            synchronized (this)
+            {
+                if (_exchanges.size() == _maxQueueSize)
+                    throw new RejectedExecutionException("Queue full for address " + _address);
+
+                _exchanges.add(ex);
+                if (_connections.size() + _pendingConnections < _maxConnections)
+                    startConnection = true;
+            }
+
+            if (startConnection)
+                startNewConnection();
+        }
+    }
+
+    protected void exchangeExpired(HttpExchange exchange)
+    {
+        // The exchange may expire while waiting in the
+        // destination queue, make sure it is removed
+        synchronized (this)
+        {
+            _exchanges.remove(exchange);
+        }
+    }
+
+    protected void send(AbstractHttpConnection connection, HttpExchange exchange) throws IOException
+    {
+        synchronized (this)
+        {
+            // If server closes the connection, put the exchange back
+            // to the exchange queue and recycle the connection
+            if (!connection.send(exchange))
+            {
+                if (exchange.getStatus() <= HttpExchange.STATUS_WAITING_FOR_CONNECTION)
+                    _exchanges.add(0, exchange);
+                returnIdleConnection(connection);
+            }
+        }
+    }
+
+    @Override
+    public synchronized String toString()
+    {
+        return String.format("HttpDestination@%x//%s:%d(%d/%d,%d,%d/%d)%n", hashCode(), _address.getHost(), _address.getPort(), _connections.size(), _maxConnections, _idleConnections.size(), _exchanges.size(), _maxQueueSize);
+    }
+
+    public synchronized String toDetailString()
+    {
+        StringBuilder b = new StringBuilder();
+        b.append(toString());
+        b.append('\n');
+        synchronized (this)
+        {
+            for (AbstractHttpConnection connection : _connections)
+            {
+                b.append(connection.toDetailString());
+                if (_idleConnections.contains(connection))
+                    b.append(" IDLE");
+                b.append('\n');
+            }
+        }
+        b.append("--");
+        b.append('\n');
+
+        return b.toString();
+    }
+
+    public void setProxy(Address proxy)
+    {
+        _proxy = proxy;
+    }
+
+    public Address getProxy()
+    {
+        return _proxy;
+    }
+
+    public Authentication getProxyAuthentication()
+    {
+        return _proxyAuthentication;
+    }
+
+    public void setProxyAuthentication(Authentication authentication)
+    {
+        _proxyAuthentication = authentication;
+    }
+
+    public boolean isProxied()
+    {
+        return _proxy != null;
+    }
+
+    public void close() throws IOException
+    {
+        synchronized (this)
+        {
+            for (AbstractHttpConnection connection : _connections)
+            {
+                connection.close();
+            }
+        }
+    }
+
+    public String dump()
+    {
+        return AggregateLifeCycle.dump(this);
+    }
+
+    public void dump(Appendable out, String indent) throws IOException
+    {
+        synchronized (this)
+        {
+            out.append(String.valueOf(this));
+            out.append("idle=");
+            out.append(String.valueOf(_idleConnections.size()));
+            out.append(" pending=");
+            out.append(String.valueOf(_pendingConnections));
+            out.append("\n");
+            AggregateLifeCycle.dump(out, indent, _connections);
+        }
+    }
+
+    private class ConnectExchange extends ContentExchange
+    {
+        private final SelectConnector.UpgradableEndPoint proxyEndPoint;
+
+        public ConnectExchange(Address serverAddress, SelectConnector.UpgradableEndPoint proxyEndPoint)
+        {
+            this.proxyEndPoint = proxyEndPoint;
+            setMethod(HttpMethods.CONNECT);
+            String serverHostAndPort = serverAddress.toString();
+            setRequestURI(serverHostAndPort);
+            addRequestHeader(HttpHeaders.HOST, serverHostAndPort);
+            addRequestHeader(HttpHeaders.PROXY_CONNECTION, "keep-alive");
+            addRequestHeader(HttpHeaders.USER_AGENT, "Jetty-Client");
+        }
+
+        @Override
+        protected void onResponseComplete() throws IOException
+        {
+            int responseStatus = getResponseStatus();
+            if (responseStatus == HttpStatus.OK_200)
+            {
+                proxyEndPoint.upgrade();
+            }
+            else if (responseStatus == HttpStatus.GATEWAY_TIMEOUT_504)
+            {
+                onExpire();
+            }
+            else
+            {
+                onException(new ProtocolException("Proxy: " + proxyEndPoint.getRemoteAddr() + ":" + proxyEndPoint.getRemotePort() + " didn't return http return code 200, but " + responseStatus));
+            }
+        }
+
+        @Override
+        protected void onConnectionFailed(Throwable x)
+        {
+            HttpDestination.this.onConnectionFailed(x);
+        }
+
+        @Override
+        protected void onException(Throwable x)
+        {
+            HttpExchange exchange = null;
+            synchronized (HttpDestination.this)
+            {
+                if (!_exchanges.isEmpty())
+                    exchange = _exchanges.remove(0);
+            }
+            if (exchange != null && exchange.setStatus(STATUS_EXCEPTED))
+                exchange.getEventListener().onException(x);
+        }
+
+        @Override
+        protected void onExpire()
+        {
+            HttpExchange exchange = null;
+            synchronized (HttpDestination.this)
+            {
+                if (!_exchanges.isEmpty())
+                    exchange = _exchanges.remove(0);
+            }
+            if (exchange != null && exchange.setStatus(STATUS_EXPIRED))
+                exchange.getEventListener().onExpire();
+        }
+    }
+}
diff --git a/src/java/org/eclipse/jetty/client/HttpEventListener.java b/src/java/org/eclipse/jetty/client/HttpEventListener.java
new file mode 100644
index 0000000..c38b048
--- /dev/null
+++ b/src/java/org/eclipse/jetty/client/HttpEventListener.java
@@ -0,0 +1,68 @@
+//
+//  ========================================================================
+//  Copyright (c) 1995-2014 Mort Bay Consulting Pty. Ltd.
+//  ------------------------------------------------------------------------
+//  All rights reserved. This program and the accompanying materials
+//  are made available under the terms of the Eclipse Public License v1.0
+//  and Apache License v2.0 which accompanies this distribution.
+//
+//      The Eclipse Public License is available at
+//      http://www.eclipse.org/legal/epl-v10.html
+//
+//      The Apache License v2.0 is available at
+//      http://www.opensource.org/licenses/apache2.0.php
+//
+//  You may elect to redistribute this code under either of these licenses.
+//  ========================================================================
+//
+
+package org.eclipse.jetty.client;
+
+
+import java.io.IOException;
+
+import org.eclipse.jetty.io.Buffer;
+
+/**
+ * 
+ * 
+ * 
+ */
+public interface HttpEventListener
+{
+
+    // TODO review the methods here, we can probably trim these down on what to expose
+    
+    public void onRequestCommitted() throws IOException;
+
+
+    public void onRequestComplete() throws IOException;
+
+
+    public void onResponseStatus(Buffer version, int status, Buffer reason) throws IOException;
+
+
+    public void onResponseHeader(Buffer name, Buffer value) throws IOException;
+
+    
+    public void onResponseHeaderComplete() throws IOException;
+
+    
+    public void onResponseContent(Buffer content) throws IOException;
+
+
+    public void onResponseComplete() throws IOException;
+
+
+    public void onConnectionFailed(Throwable ex);
+
+
+    public void onException(Throwable ex);
+
+
+    public void onExpire();
+    
+    public void onRetry();
+    
+
+}
diff --git a/src/java/org/eclipse/jetty/client/HttpEventListenerWrapper.java b/src/java/org/eclipse/jetty/client/HttpEventListenerWrapper.java
new file mode 100644
index 0000000..152444e
--- /dev/null
+++ b/src/java/org/eclipse/jetty/client/HttpEventListenerWrapper.java
@@ -0,0 +1,167 @@
+//
+//  ========================================================================
+//  Copyright (c) 1995-2014 Mort Bay Consulting Pty. Ltd.
+//  ------------------------------------------------------------------------
+//  All rights reserved. This program and the accompanying materials
+//  are made available under the terms of the Eclipse Public License v1.0
+//  and Apache License v2.0 which accompanies this distribution.
+//
+//      The Eclipse Public License is available at
+//      http://www.eclipse.org/legal/epl-v10.html
+//
+//      The Apache License v2.0 is available at
+//      http://www.opensource.org/licenses/apache2.0.php
+//
+//  You may elect to redistribute this code under either of these licenses.
+//  ========================================================================
+//
+
+
+package org.eclipse.jetty.client;
+
+import java.io.IOException;
+
+import org.eclipse.jetty.io.Buffer;
+
+public class HttpEventListenerWrapper implements HttpEventListener
+{
+    HttpEventListener _listener;
+    boolean _delegatingRequests;
+    boolean _delegatingResponses;
+    boolean _delegationResult = true;
+    private Buffer _version;
+    private int _status;
+    private Buffer _reason;
+
+    public HttpEventListenerWrapper()
+    {
+        _listener=null;
+        _delegatingRequests=false;
+        _delegatingResponses=false;
+    }
+    
+    public HttpEventListenerWrapper(HttpEventListener eventListener,boolean delegating)
+    {
+        _listener=eventListener;
+        _delegatingRequests=delegating;
+        _delegatingResponses=delegating;
+    }
+    
+    public HttpEventListener getEventListener()
+    {
+        return _listener;
+    }
+
+    public void setEventListener(HttpEventListener listener)
+    {
+        _listener = listener;
+    }
+
+    public boolean isDelegatingRequests()
+    {
+        return _delegatingRequests;
+    }
+    
+    public boolean isDelegatingResponses()
+    {
+        return _delegatingResponses;
+    }
+
+    public void setDelegatingRequests(boolean delegating)
+    {
+        _delegatingRequests = delegating;
+    }
+    
+    public void setDelegatingResponses(boolean delegating)
+    {
+        _delegatingResponses = delegating;
+    }
+    
+    public void setDelegationResult( boolean result )
+    {
+        _delegationResult = result;
+    }
+    
+    public void onConnectionFailed(Throwable ex)
+    {
+        if (_delegatingRequests)
+            _listener.onConnectionFailed(ex);
+    }
+
+    public void onException(Throwable ex)
+    {
+        if (_delegatingRequests||_delegatingResponses)
+            _listener.onException(ex);
+    }
+
+    public void onExpire()
+    {
+        if (_delegatingRequests||_delegatingResponses)
+            _listener.onExpire();
+    }
+
+    public void onRequestCommitted() throws IOException
+    {
+        if (_delegatingRequests)
+            _listener.onRequestCommitted();
+    }
+
+    public void onRequestComplete() throws IOException
+    {
+        if (_delegatingRequests)
+            _listener.onRequestComplete();
+    }
+
+    public void onResponseComplete() throws IOException
+    {
+        if (_delegatingResponses)
+        {
+            if (_delegationResult == false)
+            {
+                _listener.onResponseStatus(_version,_status,_reason);
+            }
+            _listener.onResponseComplete();
+        }
+    }
+
+    public void onResponseContent(Buffer content) throws IOException
+    {
+        if (_delegatingResponses)
+            _listener.onResponseContent(content);
+    }
+
+    public void onResponseHeader(Buffer name, Buffer value) throws IOException
+    {
+        if (_delegatingResponses)
+            _listener.onResponseHeader(name,value);
+    }
+
+    public void onResponseHeaderComplete() throws IOException
+    {
+        if (_delegatingResponses)
+            _listener.onResponseHeaderComplete();
+    }
+
+    public void onResponseStatus(Buffer version, int status, Buffer reason) throws IOException
+    {
+        if (_delegatingResponses)
+        {
+            _listener.onResponseStatus(version,status,reason);
+        }
+        else
+        {
+            _version = version;
+            _status = status;
+            _reason = reason;
+        }
+    }
+
+    public void onRetry()
+    {
+        if (_delegatingRequests)
+            _listener.onRetry();
+    }
+    
+    
+    
+}
diff --git a/src/java/org/eclipse/jetty/client/HttpExchange.java b/src/java/org/eclipse/jetty/client/HttpExchange.java
new file mode 100644
index 0000000..b97b9ff
--- /dev/null
+++ b/src/java/org/eclipse/jetty/client/HttpExchange.java
@@ -0,0 +1,1228 @@
+//
+//  ========================================================================
+//  Copyright (c) 1995-2014 Mort Bay Consulting Pty. Ltd.
+//  ------------------------------------------------------------------------
+//  All rights reserved. This program and the accompanying materials
+//  are made available under the terms of the Eclipse Public License v1.0
+//  and Apache License v2.0 which accompanies this distribution.
+//
+//      The Eclipse Public License is available at
+//      http://www.eclipse.org/legal/epl-v10.html
+//
+//      The Apache License v2.0 is available at
+//      http://www.opensource.org/licenses/apache2.0.php
+//
+//  You may elect to redistribute this code under either of these licenses.
+//  ========================================================================
+//
+
+package org.eclipse.jetty.client;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.URI;
+import java.util.concurrent.atomic.AtomicInteger;
+
+import org.eclipse.jetty.client.security.SecurityListener;
+import org.eclipse.jetty.http.HttpFields;
+import org.eclipse.jetty.http.HttpHeaders;
+import org.eclipse.jetty.http.HttpMethods;
+import org.eclipse.jetty.http.HttpSchemes;
+import org.eclipse.jetty.http.HttpURI;
+import org.eclipse.jetty.http.HttpVersions;
+import org.eclipse.jetty.io.Buffer;
+import org.eclipse.jetty.io.BufferCache.CachedBuffer;
+import org.eclipse.jetty.io.ByteArrayBuffer;
+import org.eclipse.jetty.io.Connection;
+import org.eclipse.jetty.io.EndPoint;
+import org.eclipse.jetty.util.log.Log;
+import org.eclipse.jetty.util.log.Logger;
+import org.eclipse.jetty.util.thread.Timeout;
+
+/**
+ * <p>
+ * An HTTP client API that encapsulates an exchange (a request and its response) with a HTTP server.
+ * </p>
+ *
+ * This object encapsulates:
+ * <ul>
+ * <li>The HTTP server address, see {@link #setAddress(Address)}, or {@link #setURI(URI)}, or {@link #setURL(String)})
+ * <li>The HTTP request method, URI and HTTP version (see {@link #setMethod(String)}, {@link #setRequestURI(String)}, and {@link #setVersion(int)})
+ * <li>The request headers (see {@link #addRequestHeader(String, String)} or {@link #setRequestHeader(String, String)})
+ * <li>The request content (see {@link #setRequestContent(Buffer)} or {@link #setRequestContentSource(InputStream)})
+ * <li>The status of the exchange (see {@link #getStatus()})
+ * <li>Callbacks to handle state changes (see the onXxx methods such as {@link #onRequestComplete()} or {@link #onResponseComplete()})
+ * <li>The ability to intercept callbacks (see {@link #setEventListener(HttpEventListener)}
+ * </ul>
+ *
+ * <p>
+ * The HttpExchange class is intended to be used by a developer wishing to have close asynchronous interaction with the the exchange.<br />
+ * Typically a developer will extend the HttpExchange class with a derived class that overrides some or all of the onXxx callbacks. <br />
+ * There are also some predefined HttpExchange subtypes that can be used as a basis, see {@link org.eclipse.jetty.client.ContentExchange} and
+ * {@link org.eclipse.jetty.client.CachedExchange}.
+ * </p>
+ *
+ * <p>
+ * Typically the HttpExchange is passed to the {@link HttpClient#send(HttpExchange)} method, which in turn selects a {@link HttpDestination} and calls its
+ * {@link HttpDestination#send(HttpExchange)}, which then creates or selects a {@link AbstractHttpConnection} and calls its {@link AbstractHttpConnection#send(HttpExchange)}. A
+ * developer may wish to directly call send on the destination or connection if they wish to bypass some handling provided (eg Cookie handling in the
+ * HttpDestination).
+ * </p>
+ *
+ * <p>
+ * In some circumstances, the HttpClient or HttpDestination may wish to retry a HttpExchange (eg. failed pipeline request, authentication retry or redirection).
+ * In such cases, the HttpClient and/or HttpDestination may insert their own HttpExchangeListener to intercept and filter the call backs intended for the
+ * HttpExchange.
+ * </p>
+ */
+public class HttpExchange
+{
+    static final Logger LOG = Log.getLogger(HttpExchange.class);
+
+    public static final int STATUS_START = 0;
+    public static final int STATUS_WAITING_FOR_CONNECTION = 1;
+    public static final int STATUS_WAITING_FOR_COMMIT = 2;
+    public static final int STATUS_SENDING_REQUEST = 3;
+    public static final int STATUS_WAITING_FOR_RESPONSE = 4;
+    public static final int STATUS_PARSING_HEADERS = 5;
+    public static final int STATUS_PARSING_CONTENT = 6;
+    public static final int STATUS_COMPLETED = 7;
+    public static final int STATUS_EXPIRED = 8;
+    public static final int STATUS_EXCEPTED = 9;
+    public static final int STATUS_CANCELLING = 10;
+    public static final int STATUS_CANCELLED = 11;
+
+    // HTTP protocol fields
+    private String _method = HttpMethods.GET;
+    private Buffer _scheme = HttpSchemes.HTTP_BUFFER;
+    private String _uri;
+    private int _version = HttpVersions.HTTP_1_1_ORDINAL;
+    private Address _address;
+    private final HttpFields _requestFields = new HttpFields();
+    private Buffer _requestContent;
+    private InputStream _requestContentSource;
+
+    private AtomicInteger _status = new AtomicInteger(STATUS_START);
+    private boolean _retryStatus = false;
+    // controls if the exchange will have listeners autoconfigured by the destination
+    private boolean _configureListeners = true;
+    private HttpEventListener _listener = new Listener();
+    private volatile AbstractHttpConnection _connection;
+
+    private Address _localAddress = null;
+
+    // a timeout for this exchange
+    private long _timeout = -1;
+    private volatile Timeout.Task _timeoutTask;
+    private long _lastStateChange=System.currentTimeMillis();
+    private long _sent=-1;
+    private int _lastState=-1;
+    private int _lastStatePeriod=-1;
+
+    boolean _onRequestCompleteDone;
+    boolean _onResponseCompleteDone;
+    boolean _onDone; // == onConnectionFail || onException || onExpired || onCancelled || onResponseCompleted && onRequestCompleted
+
+    protected void expire(HttpDestination destination)
+    {
+        AbstractHttpConnection connection = _connection;
+        if (getStatus() < HttpExchange.STATUS_COMPLETED)
+            setStatus(HttpExchange.STATUS_EXPIRED);
+        destination.exchangeExpired(this);
+        if (connection != null)
+            connection.exchangeExpired(this);
+    }
+
+    public int getStatus()
+    {
+        return _status.get();
+    }
+
+    /**
+     * @param status
+     *            the status to wait for
+     * @throws InterruptedException
+     *             if the waiting thread is interrupted
+     * @deprecated Use {@link #waitForDone()} instead
+     */
+    @Deprecated
+    public void waitForStatus(int status) throws InterruptedException
+    {
+        throw new UnsupportedOperationException();
+    }
+
+    /**
+     * Wait until the exchange is "done". Done is defined as when a final state has been passed to the HttpExchange via the associated onXxx call. Note that an
+     * exchange can transit a final state when being used as part of a dialog (eg {@link SecurityListener}. Done status is thus defined as:
+     *
+     * <pre>
+     * done == onConnectionFailed || onException || onExpire || onRequestComplete &amp;&amp; onResponseComplete
+     * </pre>
+     *
+     * @return the done status
+     * @throws InterruptedException
+     */
+    public int waitForDone() throws InterruptedException
+    {
+        synchronized (this)
+        {
+            while (!isDone())
+                this.wait();
+            return _status.get();
+        }
+    }
+
+    public void reset()
+    {
+        // TODO - this should do a cancel and wakeup everybody that was waiting.
+        // might need a version number concept
+        synchronized (this)
+        {
+            _timeoutTask = null;
+            _onRequestCompleteDone = false;
+            _onResponseCompleteDone = false;
+            _onDone = false;
+            setStatus(STATUS_START);
+        }
+    }
+
+    /* ------------------------------------------------------------ */
+    /**
+     * @param newStatus
+     * @return True if the status was actually set.
+     */
+    boolean setStatus(int newStatus)
+    {
+        boolean set = false;
+        try
+        {
+            int oldStatus = _status.get();
+            boolean ignored = false;
+            if (oldStatus != newStatus)
+            {
+                long now = System.currentTimeMillis();
+                _lastStatePeriod=(int)(now-_lastStateChange);
+                _lastState=oldStatus;
+                _lastStateChange=now;
+                if (newStatus==STATUS_SENDING_REQUEST)
+                    _sent=_lastStateChange;
+            }
+            
+            // State machine: from which old status you can go into which new status
+            switch (oldStatus)
+            {
+                case STATUS_START:
+                    switch (newStatus)
+                    {
+                        case STATUS_START:
+                        case STATUS_WAITING_FOR_CONNECTION:
+                        case STATUS_WAITING_FOR_COMMIT:
+                        case STATUS_CANCELLING:
+                        case STATUS_EXCEPTED:
+                            set = _status.compareAndSet(oldStatus,newStatus);
+                            break;
+                        case STATUS_EXPIRED:
+                            set = setStatusExpired(newStatus,oldStatus);
+                            break;
+                    }
+                    break;
+                case STATUS_WAITING_FOR_CONNECTION:
+                    switch (newStatus)
+                    {
+                        case STATUS_WAITING_FOR_COMMIT:
+                        case STATUS_CANCELLING:
+                        case STATUS_EXCEPTED:
+                            set = _status.compareAndSet(oldStatus,newStatus);
+                            break;
+                        case STATUS_EXPIRED:
+                            set = setStatusExpired(newStatus,oldStatus);
+                            break;
+                    }
+                    break;
+                case STATUS_WAITING_FOR_COMMIT:
+                    switch (newStatus)
+                    {
+                        case STATUS_SENDING_REQUEST:
+                        case STATUS_CANCELLING:
+                        case STATUS_EXCEPTED:
+                            set = _status.compareAndSet(oldStatus,newStatus);
+                            break;
+                        case STATUS_EXPIRED:
+                            set = setStatusExpired(newStatus,oldStatus);
+                            break;
+                    }
+                    break;
+                case STATUS_SENDING_REQUEST:
+                    switch (newStatus)
+                    {
+                        case STATUS_WAITING_FOR_RESPONSE:
+                            if (set = _status.compareAndSet(oldStatus,newStatus))
+                                getEventListener().onRequestCommitted();
+                            break;
+                        case STATUS_CANCELLING:
+                        case STATUS_EXCEPTED:
+                            set = _status.compareAndSet(oldStatus,newStatus);
+                            break;
+                        case STATUS_EXPIRED:
+                            set = setStatusExpired(newStatus,oldStatus);
+                            break;
+                    }
+                    break;
+                case STATUS_WAITING_FOR_RESPONSE:
+                    switch (newStatus)
+                    {
+                        case STATUS_PARSING_HEADERS:
+                        case STATUS_CANCELLING:
+                        case STATUS_EXCEPTED:
+                            set = _status.compareAndSet(oldStatus,newStatus);
+                            break;
+                        case STATUS_EXPIRED:
+                            set = setStatusExpired(newStatus,oldStatus);
+                            break;
+                    }
+                    break;
+                case STATUS_PARSING_HEADERS:
+                    switch (newStatus)
+                    {
+                        case STATUS_PARSING_CONTENT:
+                            if (set = _status.compareAndSet(oldStatus,newStatus))
+                                getEventListener().onResponseHeaderComplete();
+                            break;
+                        case STATUS_CANCELLING:
+                        case STATUS_EXCEPTED:
+                            set = _status.compareAndSet(oldStatus,newStatus);
+                            break;
+                        case STATUS_EXPIRED:
+                            set = setStatusExpired(newStatus,oldStatus);
+                            break;
+                    }
+                    break;
+                case STATUS_PARSING_CONTENT:
+                    switch (newStatus)
+                    {
+                        case STATUS_COMPLETED:
+                            if (set = _status.compareAndSet(oldStatus,newStatus))
+                                getEventListener().onResponseComplete();
+                            break;
+                        case STATUS_CANCELLING:
+                        case STATUS_EXCEPTED:
+                            set = _status.compareAndSet(oldStatus,newStatus);
+                            break;
+                        case STATUS_EXPIRED:
+                            set = setStatusExpired(newStatus,oldStatus);
+                            break;
+                    }
+                    break;
+                case STATUS_COMPLETED:
+                    switch (newStatus)
+                    {
+                        case STATUS_START:
+                        case STATUS_EXCEPTED:
+                        case STATUS_WAITING_FOR_RESPONSE:
+                            set = _status.compareAndSet(oldStatus,newStatus);
+                            break;
+                        case STATUS_CANCELLING:
+                        case STATUS_EXPIRED:
+                            // Don't change the status, it's too late
+                            ignored = true;
+                            break;
+                    }
+                    break;
+                case STATUS_CANCELLING:
+                    switch (newStatus)
+                    {
+                        case STATUS_EXCEPTED:
+                        case STATUS_CANCELLED:
+                            if (set = _status.compareAndSet(oldStatus,newStatus))
+                                done();
+                            break;
+                        default:
+                            // Ignore other statuses, we're cancelling
+                            ignored = true;
+                            break;
+                    }
+                    break;
+                case STATUS_EXCEPTED:
+                case STATUS_EXPIRED:
+                case STATUS_CANCELLED:
+                    switch (newStatus)
+                    {
+                        case STATUS_START:
+                            set = _status.compareAndSet(oldStatus,newStatus);
+                            break;
+                            
+                        case STATUS_COMPLETED:
+                            ignored = true;
+                            done();
+                            break; 
+                            
+                        default:
+                            ignored = true;
+                            break;
+                    }
+                    break;
+                default:
+                    // Here means I allowed to set a state that I don't recognize
+                    throw new AssertionError(oldStatus + " => " + newStatus);
+            }
+
+            if (!set && !ignored)
+                throw new IllegalStateException(toState(oldStatus) + " => " + toState(newStatus));
+            LOG.debug("setStatus {} {}",newStatus,this);
+        }
+        catch (IOException x)
+        {
+            LOG.warn(x);
+        }
+        return set;
+    }
+
+    private boolean setStatusExpired(int newStatus, int oldStatus)
+    {
+        boolean set;
+        if (set = _status.compareAndSet(oldStatus,newStatus))
+            getEventListener().onExpire();
+        return set;
+    }
+
+    public boolean isDone()
+    {
+        synchronized (this)
+        {
+            return _onDone;
+        }
+    }
+
+    /**
+     * @deprecated
+     */
+    @Deprecated
+    public boolean isDone(int status)
+    {
+        return isDone();
+    }
+
+    public HttpEventListener getEventListener()
+    {
+        return _listener;
+    }
+
+    public void setEventListener(HttpEventListener listener)
+    {
+        _listener = listener;
+    }
+
+    public void setTimeout(long timeout)
+    {
+        _timeout = timeout;
+    }
+
+    public long getTimeout()
+    {
+        return _timeout;
+    }
+
+    /**
+     * @param url
+     *            an absolute URL (for example 'http://localhost/foo/bar?a=1')
+     */
+    public void setURL(String url)
+    {
+        setURI(URI.create(url));
+    }
+
+    /**
+     * @param address
+     *            the address of the server
+     */
+    public void setAddress(Address address)
+    {
+        _address = address;
+    }
+
+    /**
+     * @return the address of the server
+     */
+    public Address getAddress()
+    {
+        return _address;
+    }
+
+    /**
+     * the local address used by the connection
+     *
+     * Note: this method will not be populated unless the exchange has been executed by the HttpClient
+     *
+     * @return the local address used for the running of the exchange if available, null otherwise.
+     */
+    public Address getLocalAddress()
+    {
+        return _localAddress;
+    }
+
+    /**
+     * @param scheme
+     *            the scheme of the URL (for example 'http')
+     */
+    public void setScheme(Buffer scheme)
+    {
+        _scheme = scheme;
+    }
+
+    /**
+     * @param scheme
+     *            the scheme of the URL (for example 'http')
+     */
+    public void setScheme(String scheme)
+    {
+        if (scheme != null)
+        {
+            if (HttpSchemes.HTTP.equalsIgnoreCase(scheme))
+                setScheme(HttpSchemes.HTTP_BUFFER);
+            else if (HttpSchemes.HTTPS.equalsIgnoreCase(scheme))
+                setScheme(HttpSchemes.HTTPS_BUFFER);
+            else
+                setScheme(new ByteArrayBuffer(scheme));
+        }
+    }
+
+    /**
+     * @return the scheme of the URL
+     */
+    public Buffer getScheme()
+    {
+        return _scheme;
+    }
+
+    /**
+     * @param version
+     *            the HTTP protocol version as integer, 9, 10 or 11 for 0.9, 1.0 or 1.1
+     */
+    public void setVersion(int version)
+    {
+        _version = version;
+    }
+
+    /**
+     * @param version
+     *            the HTTP protocol version as string
+     */
+    public void setVersion(String version)
+    {
+        CachedBuffer v = HttpVersions.CACHE.get(version);
+        if (v == null)
+            _version = 10;
+        else
+            _version = v.getOrdinal();
+    }
+
+    /**
+     * @return the HTTP protocol version as integer
+     * @see #setVersion(int)
+     */
+    public int getVersion()
+    {
+        return _version;
+    }
+
+    /**
+     * @param method
+     *            the HTTP method (for example 'GET')
+     */
+    public void setMethod(String method)
+    {
+        _method = method;
+    }
+
+    /**
+     * @return the HTTP method
+     */
+    public String getMethod()
+    {
+        return _method;
+    }
+
+    /**
+     * @return request URI
+     * @see #getRequestURI()
+     * @deprecated
+     */
+    @Deprecated
+    public String getURI()
+    {
+        return getRequestURI();
+    }
+
+    /**
+     * @return request URI
+     */
+    public String getRequestURI()
+    {
+        return _uri;
+    }
+
+    /**
+     * Set the request URI
+     *
+     * @param uri
+     *            new request URI
+     * @see #setRequestURI(String)
+     * @deprecated
+     */
+    @Deprecated
+    public void setURI(String uri)
+    {
+        setRequestURI(uri);
+    }
+
+    /**
+     * Set the request URI
+     *
+     * Per RFC 2616 sec5, Request-URI = "*" | absoluteURI | abs_path | authority<br/>
+     * where:<br/>
+     * <br/>
+     * "*" - request applies to server itself<br/>
+     * absoluteURI - required for proxy requests, e.g. http://localhost:8080/context<br/>
+     * (this form is generated automatically by HttpClient)<br/>
+     * abs_path - used for most methods, e.g. /context<br/>
+     * authority - used for CONNECT method only, e.g. localhost:8080<br/>
+     * <br/>
+     * For complete definition of URI components, see RFC 2396 sec3.<br/>
+     *
+     * @param uri
+     *            new request URI
+     */
+    public void setRequestURI(String uri)
+    {
+        _uri = uri;
+    }
+
+    /* ------------------------------------------------------------ */
+    /**
+     * @param uri
+     *            an absolute URI (for example 'http://localhost/foo/bar?a=1')
+     */
+    public void setURI(URI uri)
+    {
+        if (!uri.isAbsolute())
+            throw new IllegalArgumentException("!Absolute URI: " + uri);
+
+        if (uri.isOpaque())
+            throw new IllegalArgumentException("Opaque URI: " + uri);
+
+        if (LOG.isDebugEnabled())
+            LOG.debug("URI = {}",uri.toASCIIString());
+
+        String scheme = uri.getScheme();
+        int port = uri.getPort();
+        if (port <= 0)
+            port = "https".equalsIgnoreCase(scheme)?443:80;
+
+        setScheme(scheme);
+        setAddress(new Address(uri.getHost(),port));
+
+        HttpURI httpUri = new HttpURI(uri);
+        String completePath = httpUri.getCompletePath();
+        setRequestURI(completePath == null?"/":completePath);
+    }
+
+    /**
+     * Adds the specified request header
+     *
+     * @param name
+     *            the header name
+     * @param value
+     *            the header value
+     */
+    public void addRequestHeader(String name, String value)
+    {
+        getRequestFields().add(name,value);
+    }
+
+    /**
+     * Adds the specified request header
+     *
+     * @param name
+     *            the header name
+     * @param value
+     *            the header value
+     */
+    public void addRequestHeader(Buffer name, Buffer value)
+    {
+        getRequestFields().add(name,value);
+    }
+
+    /**
+     * Sets the specified request header
+     *
+     * @param name
+     *            the header name
+     * @param value
+     *            the header value
+     */
+    public void setRequestHeader(String name, String value)
+    {
+        getRequestFields().put(name,value);
+    }
+
+    /**
+     * Sets the specified request header
+     *
+     * @param name
+     *            the header name
+     * @param value
+     *            the header value
+     */
+    public void setRequestHeader(Buffer name, Buffer value)
+    {
+        getRequestFields().put(name,value);
+    }
+
+    /**
+     * @param value
+     *            the content type of the request
+     */
+    public void setRequestContentType(String value)
+    {
+        getRequestFields().put(HttpHeaders.CONTENT_TYPE_BUFFER,value);
+    }
+
+    /**
+     * @return the request headers
+     */
+    public HttpFields getRequestFields()
+    {
+        return _requestFields;
+    }
+
+    /**
+     * @param requestContent
+     *            the request content
+     */
+    public void setRequestContent(Buffer requestContent)
+    {
+        _requestContent = requestContent;
+    }
+
+    /**
+     * @param stream
+     *            the request content as a stream
+     */
+    public void setRequestContentSource(InputStream stream)
+    {
+        _requestContentSource = stream;
+        if (_requestContentSource != null && _requestContentSource.markSupported())
+            _requestContentSource.mark(Integer.MAX_VALUE);
+    }
+
+    /**
+     * @return the request content as a stream
+     */
+    public InputStream getRequestContentSource()
+    {
+        return _requestContentSource;
+    }
+
+    public Buffer getRequestContentChunk(Buffer buffer) throws IOException
+    {
+        synchronized (this)
+        {
+            if (_requestContentSource!=null)
+            {
+                if (buffer == null)
+                    buffer = new ByteArrayBuffer(8192); // TODO configure
+
+                int space = buffer.space();
+                int length = _requestContentSource.read(buffer.array(),buffer.putIndex(),space);
+                if (length >= 0)
+                {
+                    buffer.setPutIndex(buffer.putIndex()+length);
+                    return buffer;
+                }
+            }
+            return null;
+        }
+    }
+
+    /**
+     * @return the request content
+     */
+    public Buffer getRequestContent()
+    {
+        return _requestContent;
+    }
+
+    /**
+     * @return whether a retry will be attempted or not
+     */
+    public boolean getRetryStatus()
+    {
+        return _retryStatus;
+    }
+
+    /**
+     * @param retryStatus
+     *            whether a retry will be attempted or not
+     */
+    public void setRetryStatus(boolean retryStatus)
+    {
+        _retryStatus = retryStatus;
+    }
+
+    /**
+     * Initiates the cancelling of this exchange. The status of the exchange is set to {@link #STATUS_CANCELLING}. Cancelling the exchange is an asynchronous
+     * operation with respect to the request/response, and as such checking the request/response status of a cancelled exchange may return undefined results
+     * (for example it may have only some of the response headers being sent by the server). The cancelling of the exchange is completed when the exchange
+     * status (see {@link #getStatus()}) is {@link #STATUS_CANCELLED}, and this can be waited using {@link #waitForDone()}.
+     */
+    public void cancel()
+    {
+        setStatus(STATUS_CANCELLING);
+        abort();
+    }
+
+    private void done()
+    {
+        synchronized (this)
+        {
+            disassociate();
+            _onDone = true;
+            notifyAll();
+        }
+    }
+
+    private void abort()
+    {
+        AbstractHttpConnection httpConnection = _connection;
+        if (httpConnection != null)
+        {
+            try
+            {
+                // Closing the connection here will cause the connection
+                // to be returned in HttpConnection.handle()
+                httpConnection.close();
+            }
+            catch (IOException x)
+            {
+                LOG.debug(x);
+            }
+            finally
+            {
+                disassociate();
+            }
+        }
+    }
+
+    void associate(AbstractHttpConnection connection)
+    {
+        if (connection.getEndPoint().getLocalAddr() != null)
+            _localAddress = new Address(connection.getEndPoint().getLocalAddr(),connection.getEndPoint().getLocalPort());
+
+        _connection = connection;
+        if (getStatus() == STATUS_CANCELLING)
+            abort();
+    }
+
+    boolean isAssociated()
+    {
+        return this._connection != null;
+    }
+
+    AbstractHttpConnection disassociate()
+    {
+        AbstractHttpConnection result = _connection;
+        this._connection = null;
+        if (getStatus() == STATUS_CANCELLING)
+            setStatus(STATUS_CANCELLED);
+        return result;
+    }
+
+    public static String toState(int s)
+    {
+        String state;
+        switch (s)
+        {
+            case STATUS_START:
+                state = "START";
+                break;
+            case STATUS_WAITING_FOR_CONNECTION:
+                state = "CONNECTING";
+                break;
+            case STATUS_WAITING_FOR_COMMIT:
+                state = "CONNECTED";
+                break;
+            case STATUS_SENDING_REQUEST:
+                state = "SENDING";
+                break;
+            case STATUS_WAITING_FOR_RESPONSE:
+                state = "WAITING";
+                break;
+            case STATUS_PARSING_HEADERS:
+                state = "HEADERS";
+                break;
+            case STATUS_PARSING_CONTENT:
+                state = "CONTENT";
+                break;
+            case STATUS_COMPLETED:
+                state = "COMPLETED";
+                break;
+            case STATUS_EXPIRED:
+                state = "EXPIRED";
+                break;
+            case STATUS_EXCEPTED:
+                state = "EXCEPTED";
+                break;
+            case STATUS_CANCELLING:
+                state = "CANCELLING";
+                break;
+            case STATUS_CANCELLED:
+                state = "CANCELLED";
+                break;
+            default:
+                state = "UNKNOWN";
+        }
+        return state;
+    }
+
+    @Override
+    public String toString()
+    {
+        String state=toState(getStatus());
+        long now=System.currentTimeMillis();
+        long forMs = now -_lastStateChange;
+        String s= _lastState>=0
+            ?String.format("%s@%x=%s//%s%s#%s(%dms)->%s(%dms)",getClass().getSimpleName(),hashCode(),_method,_address,_uri,toState(_lastState),_lastStatePeriod,state,forMs)