From f5c0d5bbfc142582c24ea85c1cd5b698ec729288 Mon Sep 17 00:00:00 2001 From: Matt Jenkins Date: Sun, 21 Oct 2018 13:52:20 +0100 Subject: [PATCH] Dumped Sphinx and instead using Haven OnDemand speech API --- deps/commons-codec-1.10.jar | 3 + deps/commons-logging-1.2.jar | 3 + deps/fluent-hc-4.5.6.jar | 3 + deps/httpclient-4.5.6.jar | 3 + deps/httpclient-cache-4.5.6.jar | 3 + deps/httpclient-win-4.5.6.jar | 3 + deps/httpcore-4.4.10.jar | 3 + deps/httpmime-4.5.6.jar | 3 + deps/jna-4.4.0.jar | 3 + deps/jna-platform-4.4.0.jar | 3 + deps/json-20180813.jar | 3 + deps/sphinx4-core-5prealpha-SNAPSHOT.jar | 3 - deps/sphinx4-data-5prealpha-SNAPSHOT.jar | 3 - licenses/apache-commons/LICENSE.txt | 558 ++++ licenses/apache-commons/NOTICE.txt | 6 + licenses/apache-commons/README.txt | 77 + licenses/apache-commons/RELEASE_NOTES.txt | 2354 +++++++++++++++++ .../audiobookrecorder/AudiobookRecorder.java | 72 +- .../audiobookrecorder/BookTreeRenderer.java | 4 + .../majenko/audiobookrecorder/HavenQueue.java | 83 + .../co/majenko/audiobookrecorder/Options.java | 28 +- .../majenko/audiobookrecorder/Sentence.java | 231 +- 22 files changed, 3317 insertions(+), 135 deletions(-) create mode 100644 deps/commons-codec-1.10.jar create mode 100644 deps/commons-logging-1.2.jar create mode 100644 deps/fluent-hc-4.5.6.jar create mode 100644 deps/httpclient-4.5.6.jar create mode 100644 deps/httpclient-cache-4.5.6.jar create mode 100644 deps/httpclient-win-4.5.6.jar create mode 100644 deps/httpcore-4.4.10.jar create mode 100644 deps/httpmime-4.5.6.jar create mode 100644 deps/jna-4.4.0.jar create mode 100644 deps/jna-platform-4.4.0.jar create mode 100644 deps/json-20180813.jar delete mode 100644 deps/sphinx4-core-5prealpha-SNAPSHOT.jar delete mode 100644 deps/sphinx4-data-5prealpha-SNAPSHOT.jar create mode 100644 licenses/apache-commons/LICENSE.txt create mode 100644 licenses/apache-commons/NOTICE.txt create mode 100644 licenses/apache-commons/README.txt create mode 100644 licenses/apache-commons/RELEASE_NOTES.txt create mode 100644 src/uk/co/majenko/audiobookrecorder/HavenQueue.java diff --git a/deps/commons-codec-1.10.jar b/deps/commons-codec-1.10.jar new file mode 100644 index 0000000..35bedb3 --- /dev/null +++ b/deps/commons-codec-1.10.jar @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4241dfa94e711d435f29a4604a3e2de5c4aa3c165e23bd066be6fc1fc4309569 +size 284184 diff --git a/deps/commons-logging-1.2.jar b/deps/commons-logging-1.2.jar new file mode 100644 index 0000000..13ec090 --- /dev/null +++ b/deps/commons-logging-1.2.jar @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:daddea1ea0be0f56978ab3006b8ac92834afeefbd9b7e4e6316fca57df0fa636 +size 61829 diff --git a/deps/fluent-hc-4.5.6.jar b/deps/fluent-hc-4.5.6.jar new file mode 100644 index 0000000..d3252ab --- /dev/null +++ b/deps/fluent-hc-4.5.6.jar @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:325f18282c7bb229741a4683e9f440132dc8f6ed082d4f2f22a525ad39146295 +size 31528 diff --git a/deps/httpclient-4.5.6.jar b/deps/httpclient-4.5.6.jar new file mode 100644 index 0000000..423117d --- /dev/null +++ b/deps/httpclient-4.5.6.jar @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c03f813195e7a80e3608d0ddd8da80b21696a4c92a6a2298865bf149071551c7 +size 767140 diff --git a/deps/httpclient-cache-4.5.6.jar b/deps/httpclient-cache-4.5.6.jar new file mode 100644 index 0000000..73f1921 --- /dev/null +++ b/deps/httpclient-cache-4.5.6.jar @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5c986434db97241347613ff65759236248eb4a4acef9c0e801d18c2b8e082db6 +size 161574 diff --git a/deps/httpclient-win-4.5.6.jar b/deps/httpclient-win-4.5.6.jar new file mode 100644 index 0000000..893d6d6 --- /dev/null +++ b/deps/httpclient-win-4.5.6.jar @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:23b643d5155b22f127d16fa5815b5d0931656f4922342cc130e085a354f769a9 +size 17837 diff --git a/deps/httpcore-4.4.10.jar b/deps/httpcore-4.4.10.jar new file mode 100644 index 0000000..ca93c91 --- /dev/null +++ b/deps/httpcore-4.4.10.jar @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:78ba1096561957db1b55200a159b648876430342d15d461277e62360da19f6fd +size 326356 diff --git a/deps/httpmime-4.5.6.jar b/deps/httpmime-4.5.6.jar new file mode 100644 index 0000000..5d882cc --- /dev/null +++ b/deps/httpmime-4.5.6.jar @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0b2b1102c18d3c7e05a77214b9b7501a6f6056174ae5604e0e256776eda7553e +size 41794 diff --git a/deps/jna-4.4.0.jar b/deps/jna-4.4.0.jar new file mode 100644 index 0000000..11b569a --- /dev/null +++ b/deps/jna-4.4.0.jar @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c4dadeeecaa90c8847902082aee5eb107fcf59c5d0e63a17fcaf273c0e2d2bd1 +size 1091208 diff --git a/deps/jna-platform-4.4.0.jar b/deps/jna-platform-4.4.0.jar new file mode 100644 index 0000000..c26e47e --- /dev/null +++ b/deps/jna-platform-4.4.0.jar @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e9dda9e884fc107eb6367710540789a12dfa8ad28be9326b22ca6e352e325499 +size 2281814 diff --git a/deps/json-20180813.jar b/deps/json-20180813.jar new file mode 100644 index 0000000..5902e47 --- /dev/null +++ b/deps/json-20180813.jar @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:518080049ba83181914419d11a25d9bc9833a2d729b6a6e7469fa52851356da8 +size 64597 diff --git a/deps/sphinx4-core-5prealpha-SNAPSHOT.jar b/deps/sphinx4-core-5prealpha-SNAPSHOT.jar deleted file mode 100644 index 42c6a26..0000000 --- a/deps/sphinx4-core-5prealpha-SNAPSHOT.jar +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:a2f52e3499b6d54b04791895b7900f9a86fcf3f0884a942b1bac29a23fa81fcc -size 1259746 diff --git a/deps/sphinx4-data-5prealpha-SNAPSHOT.jar b/deps/sphinx4-data-5prealpha-SNAPSHOT.jar deleted file mode 100644 index ace1779..0000000 --- a/deps/sphinx4-data-5prealpha-SNAPSHOT.jar +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:5865a7591ebece3de20e49d0a4567a6dcdaf778bf532caf23149465abf434b30 -size 35644210 diff --git a/licenses/apache-commons/LICENSE.txt b/licenses/apache-commons/LICENSE.txt new file mode 100644 index 0000000..32f01ed --- /dev/null +++ b/licenses/apache-commons/LICENSE.txt @@ -0,0 +1,558 @@ + 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 + +========================================================================= + +This project includes Public Suffix List copied from + +licensed under the terms of the Mozilla Public License, v. 2.0 + +Full license text: + +Mozilla Public License Version 2.0 +================================== + +1. Definitions +-------------- + +1.1. "Contributor" + means each individual or legal entity that creates, contributes to + the creation of, or owns Covered Software. + +1.2. "Contributor Version" + means the combination of the Contributions of others (if any) used + by a Contributor and that particular Contributor's Contribution. + +1.3. "Contribution" + means Covered Software of a particular Contributor. + +1.4. "Covered Software" + means Source Code Form to which the initial Contributor has attached + the notice in Exhibit A, the Executable Form of such Source Code + Form, and Modifications of such Source Code Form, in each case + including portions thereof. + +1.5. "Incompatible With Secondary Licenses" + means + + (a) that the initial Contributor has attached the notice described + in Exhibit B to the Covered Software; or + + (b) that the Covered Software was made available under the terms of + version 1.1 or earlier of the License, but not also under the + terms of a Secondary License. + +1.6. "Executable Form" + means any form of the work other than Source Code Form. + +1.7. "Larger Work" + means a work that combines Covered Software with other material, in + a separate file or files, that is not Covered Software. + +1.8. "License" + means this document. + +1.9. "Licensable" + means having the right to grant, to the maximum extent possible, + whether at the time of the initial grant or subsequently, any and + all of the rights conveyed by this License. + +1.10. "Modifications" + means any of the following: + + (a) any file in Source Code Form that results from an addition to, + deletion from, or modification of the contents of Covered + Software; or + + (b) any new file in Source Code Form that contains any Covered + Software. + +1.11. "Patent Claims" of a Contributor + means any patent claim(s), including without limitation, method, + process, and apparatus claims, in any patent Licensable by such + Contributor that would be infringed, but for the grant of the + License, by the making, using, selling, offering for sale, having + made, import, or transfer of either its Contributions or its + Contributor Version. + +1.12. "Secondary License" + means either the GNU General Public License, Version 2.0, the GNU + Lesser General Public License, Version 2.1, the GNU Affero General + Public License, Version 3.0, or any later versions of those + licenses. + +1.13. "Source Code Form" + means the form of the work preferred for making modifications. + +1.14. "You" (or "Your") + means an individual or a legal entity exercising rights under this + License. For legal entities, "You" includes any entity that + controls, is controlled by, or is under common control with You. For + purposes of this definition, "control" means (a) the power, direct + or indirect, to cause the direction or management of such entity, + whether by contract or otherwise, or (b) ownership of more than + fifty percent (50%) of the outstanding shares or beneficial + ownership of such entity. + +2. License Grants and Conditions +-------------------------------- + +2.1. Grants + +Each Contributor hereby grants You a world-wide, royalty-free, +non-exclusive license: + +(a) under intellectual property rights (other than patent or trademark) + Licensable by such Contributor to use, reproduce, make available, + modify, display, perform, distribute, and otherwise exploit its + Contributions, either on an unmodified basis, with Modifications, or + as part of a Larger Work; and + +(b) under Patent Claims of such Contributor to make, use, sell, offer + for sale, have made, import, and otherwise transfer either its + Contributions or its Contributor Version. + +2.2. Effective Date + +The licenses granted in Section 2.1 with respect to any Contribution +become effective for each Contribution on the date the Contributor first +distributes such Contribution. + +2.3. Limitations on Grant Scope + +The licenses granted in this Section 2 are the only rights granted under +this License. No additional rights or licenses will be implied from the +distribution or licensing of Covered Software under this License. +Notwithstanding Section 2.1(b) above, no patent license is granted by a +Contributor: + +(a) for any code that a Contributor has removed from Covered Software; + or + +(b) for infringements caused by: (i) Your and any other third party's + modifications of Covered Software, or (ii) the combination of its + Contributions with other software (except as part of its Contributor + Version); or + +(c) under Patent Claims infringed by Covered Software in the absence of + its Contributions. + +This License does not grant any rights in the trademarks, service marks, +or logos of any Contributor (except as may be necessary to comply with +the notice requirements in Section 3.4). + +2.4. Subsequent Licenses + +No Contributor makes additional grants as a result of Your choice to +distribute the Covered Software under a subsequent version of this +License (see Section 10.2) or under the terms of a Secondary License (if +permitted under the terms of Section 3.3). + +2.5. Representation + +Each Contributor represents that the Contributor believes its +Contributions are its original creation(s) or it has sufficient rights +to grant the rights to its Contributions conveyed by this License. + +2.6. Fair Use + +This License is not intended to limit any rights You have under +applicable copyright doctrines of fair use, fair dealing, or other +equivalents. + +2.7. Conditions + +Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted +in Section 2.1. + +3. Responsibilities +------------------- + +3.1. Distribution of Source Form + +All distribution of Covered Software in Source Code Form, including any +Modifications that You create or to which You contribute, must be under +the terms of this License. You must inform recipients that the Source +Code Form of the Covered Software is governed by the terms of this +License, and how they can obtain a copy of this License. You may not +attempt to alter or restrict the recipients' rights in the Source Code +Form. + +3.2. Distribution of Executable Form + +If You distribute Covered Software in Executable Form then: + +(a) such Covered Software must also be made available in Source Code + Form, as described in Section 3.1, and You must inform recipients of + the Executable Form how they can obtain a copy of such Source Code + Form by reasonable means in a timely manner, at a charge no more + than the cost of distribution to the recipient; and + +(b) You may distribute such Executable Form under the terms of this + License, or sublicense it under different terms, provided that the + license for the Executable Form does not attempt to limit or alter + the recipients' rights in the Source Code Form under this License. + +3.3. Distribution of a Larger Work + +You may create and distribute a Larger Work under terms of Your choice, +provided that You also comply with the requirements of this License for +the Covered Software. If the Larger Work is a combination of Covered +Software with a work governed by one or more Secondary Licenses, and the +Covered Software is not Incompatible With Secondary Licenses, this +License permits You to additionally distribute such Covered Software +under the terms of such Secondary License(s), so that the recipient of +the Larger Work may, at their option, further distribute the Covered +Software under the terms of either this License or such Secondary +License(s). + +3.4. Notices + +You may not remove or alter the substance of any license notices +(including copyright notices, patent notices, disclaimers of warranty, +or limitations of liability) contained within the Source Code Form of +the Covered Software, except that You may alter any license notices to +the extent required to remedy known factual inaccuracies. + +3.5. Application of Additional Terms + +You may choose to offer, and to charge a fee for, warranty, support, +indemnity or liability obligations to one or more recipients of Covered +Software. However, You may do so only on Your own behalf, and not on +behalf of any Contributor. You must make it absolutely clear that any +such warranty, support, indemnity, or liability obligation is offered by +You alone, and You hereby agree to indemnify every Contributor for any +liability incurred by such Contributor as a result of warranty, support, +indemnity or liability terms You offer. You may include additional +disclaimers of warranty and limitations of liability specific to any +jurisdiction. + +4. Inability to Comply Due to Statute or Regulation +--------------------------------------------------- + +If it is impossible for You to comply with any of the terms of this +License with respect to some or all of the Covered Software due to +statute, judicial order, or regulation then You must: (a) comply with +the terms of this License to the maximum extent possible; and (b) +describe the limitations and the code they affect. Such description must +be placed in a text file included with all distributions of the Covered +Software under this License. Except to the extent prohibited by statute +or regulation, such description must be sufficiently detailed for a +recipient of ordinary skill to be able to understand it. + +5. Termination +-------------- + +5.1. The rights granted under this License will terminate automatically +if You fail to comply with any of its terms. However, if You become +compliant, then the rights granted under this License from a particular +Contributor are reinstated (a) provisionally, unless and until such +Contributor explicitly and finally terminates Your grants, and (b) on an +ongoing basis, if such Contributor fails to notify You of the +non-compliance by some reasonable means prior to 60 days after You have +come back into compliance. Moreover, Your grants from a particular +Contributor are reinstated on an ongoing basis if such Contributor +notifies You of the non-compliance by some reasonable means, this is the +first time You have received notice of non-compliance with this License +from such Contributor, and You become compliant prior to 30 days after +Your receipt of the notice. + +5.2. If You initiate litigation against any entity by asserting a patent +infringement claim (excluding declaratory judgment actions, +counter-claims, and cross-claims) alleging that a Contributor Version +directly or indirectly infringes any patent, then the rights granted to +You by any and all Contributors for the Covered Software under Section +2.1 of this License shall terminate. + +5.3. In the event of termination under Sections 5.1 or 5.2 above, all +end user license agreements (excluding distributors and resellers) which +have been validly granted by You or Your distributors under this License +prior to termination shall survive termination. + +************************************************************************ +* * +* 6. Disclaimer of Warranty * +* ------------------------- * +* * +* Covered Software is provided under this License on an "as is" * +* basis, without warranty of any kind, either expressed, implied, or * +* statutory, including, without limitation, warranties that the * +* Covered Software is free of defects, merchantable, fit for a * +* particular purpose or non-infringing. The entire risk as to the * +* quality and performance of the Covered Software is with You. * +* Should any Covered Software prove defective in any respect, You * +* (not any Contributor) assume the cost of any necessary servicing, * +* repair, or correction. This disclaimer of warranty constitutes an * +* essential part of this License. No use of any Covered Software is * +* authorized under this License except under this disclaimer. * +* * +************************************************************************ + +************************************************************************ +* * +* 7. Limitation of Liability * +* -------------------------- * +* * +* Under no circumstances and under no legal theory, whether tort * +* (including negligence), contract, or otherwise, shall any * +* Contributor, or anyone who distributes Covered Software as * +* permitted above, be liable to You for any direct, indirect, * +* special, incidental, or consequential damages of any character * +* including, without limitation, damages for lost profits, loss of * +* goodwill, work stoppage, computer failure or malfunction, or any * +* and all other commercial damages or losses, even if such party * +* shall have been informed of the possibility of such damages. This * +* limitation of liability shall not apply to liability for death or * +* personal injury resulting from such party's negligence to the * +* extent applicable law prohibits such limitation. Some * +* jurisdictions do not allow the exclusion or limitation of * +* incidental or consequential damages, so this exclusion and * +* limitation may not apply to You. * +* * +************************************************************************ + +8. Litigation +------------- + +Any litigation relating to this License may be brought only in the +courts of a jurisdiction where the defendant maintains its principal +place of business and such litigation shall be governed by laws of that +jurisdiction, without reference to its conflict-of-law provisions. +Nothing in this Section shall prevent a party's ability to bring +cross-claims or counter-claims. + +9. Miscellaneous +---------------- + +This License represents the complete agreement concerning the subject +matter hereof. If any provision of this License is held to be +unenforceable, such provision shall be reformed only to the extent +necessary to make it enforceable. Any law or regulation which provides +that the language of a contract shall be construed against the drafter +shall not be used to construe this License against a Contributor. + +10. Versions of the License +--------------------------- + +10.1. New Versions + +Mozilla Foundation is the license steward. Except as provided in Section +10.3, no one other than the license steward has the right to modify or +publish new versions of this License. Each version will be given a +distinguishing version number. + +10.2. Effect of New Versions + +You may distribute the Covered Software under the terms of the version +of the License under which You originally received the Covered Software, +or under the terms of any subsequent version published by the license +steward. + +10.3. Modified Versions + +If you create software not governed by this License, and you want to +create a new license for such software, you may create and use a +modified version of this License if you rename the license and remove +any references to the name of the license steward (except to note that +such modified license differs from this License). + +10.4. Distributing Source Code Form that is Incompatible With Secondary +Licenses + +If You choose to distribute Source Code Form that is Incompatible With +Secondary Licenses under the terms of this version of the License, the +notice described in Exhibit B of this License must be attached. + +Exhibit A - Source Code Form License Notice +------------------------------------------- + + This Source Code Form is subject to the terms of the Mozilla Public + License, v. 2.0. If a copy of the MPL was not distributed with this + file, You can obtain one at http://mozilla.org/MPL/2.0/. + +If it is not possible or desirable to put the notice in a particular +file, then You may include the notice in a location (such as a LICENSE +file in a relevant directory) where a recipient would be likely to look +for such a notice. + +You may add additional accurate notices of copyright ownership. + +Exhibit B - "Incompatible With Secondary Licenses" Notice +--------------------------------------------------------- + + This Source Code Form is "Incompatible With Secondary Licenses", as + defined by the Mozilla Public License, v. 2.0. diff --git a/licenses/apache-commons/NOTICE.txt b/licenses/apache-commons/NOTICE.txt new file mode 100644 index 0000000..8d4aa6d --- /dev/null +++ b/licenses/apache-commons/NOTICE.txt @@ -0,0 +1,6 @@ +Apache HttpComponents Client +Copyright 1999-2018 The Apache Software Foundation + +This product includes software developed at +The Apache Software Foundation (http://www.apache.org/). + diff --git a/licenses/apache-commons/README.txt b/licenses/apache-commons/README.txt new file mode 100644 index 0000000..eb7212a --- /dev/null +++ b/licenses/apache-commons/README.txt @@ -0,0 +1,77 @@ +Apache HttpComponents Client +============================ + +Welcome to the HttpClient component of the Apache HttpComponents project. + +Building Instructions +--------------------- + +For building from source instructions please refer to BUILDING.txt. + +Dependencies +------------ + +HttpClient main module requires Java 6 compatible runtime and +depends on the following external libraries: + +* Apache HttpComponents HttpCore +* Apache Commons Logging +* Apache Commons Codec + +(for detailed information on external dependencies please see pom.xml) + +HttpMime module is optional and requires Java 6 compatible runtime +and depends on the following external libraries: + +* Apache HttpComponents HttpCore +* Apache Commons Logging + +(for detailed information on external dependencies please see pom.xml) + +Licensing +--------- + +Apache HttpComponents Client is licensed under the Apache License 2.0. +See the files called LICENSE.txt and NOTICE.txt for more information. + +Cryptographic Software Notice +----------------------------- + +This distribution may include software that has been designed for use +with cryptographic software. The country in which you currently reside +may have restrictions on the import, possession, use, and/or re-export +to another country, of encryption software. BEFORE using any encryption +software, please check your country's laws, regulations and policies +concerning the import, possession, or use, and re-export of encryption +software, to see if this is permitted. See +for more information. + +The U.S. Government Department of Commerce, Bureau of Industry and +Security (BIS), has classified this software as Export Commodity +Control Number (ECCN) 5D002.C.1, which includes information security +software using or performing cryptographic functions with asymmetric +algorithms. The form and manner of this Apache Software Foundation +distribution makes it eligible for export under the License Exception +ENC Technology Software Unrestricted (TSU) exception (see the BIS +Export Administration Regulations, Section 740.13) for both object +code and source code. + +The following provides more details on the included software that +may be subject to export controls on cryptographic software: + + Apache HttpComponents Client interfaces with the + Java Secure Socket Extension (JSSE) API to provide + + - HTTPS support + + Apache HttpComponents Client does not include any + implementation of JSSE. + +Contact +------- + + o For general information visit the main project site at + http://hc.apache.org/ + + o For current status information visit the status page at + http://hc.apache.org/status.html diff --git a/licenses/apache-commons/RELEASE_NOTES.txt b/licenses/apache-commons/RELEASE_NOTES.txt new file mode 100644 index 0000000..0d96723 --- /dev/null +++ b/licenses/apache-commons/RELEASE_NOTES.txt @@ -0,0 +1,2354 @@ +Release 4.5.6 +------------------- + +This is a maintenance release that adds Automatic-Module-Name to the manifest for compatibility +with Java 9 Platform Module System and fixes a number of issues discovered since 4.5.5 + +Please note that as of 4.4 HttpClient requires Java 1.6 or newer. + +Changelog: +------------------- + +* [HTTPCLIENT-1882=: reset authentication state on I/O or runtime error for connection based + authentication schemes (such as NTLM) + Contributed by Oleg Kalnichevski + +* [HTTPCLIENT-1924]: HttpClient to shut down the connection manager if a fatal error occurs + in the course of a request execution. + Contributed by Oleg Kalnichevski + +* Add Automatic-Module-Name in manifest so Java9 modular applications can depend on this library + Contributed by Varun Nandi + +* [HTTPCLIENT-1923]: fixed incorrect connection close on shutdown + fixed corresponding test + Contributed by Aleksei Arsenev + +* [HTTPCLIENT-1906]: certificates containing alternative subject names other than DNS and IP + (such as RFC822) get rejected as invalid + Contributed by Oleg Kalnichevski + +* [HTTPCLIENT-1904]: check cookie domain for null + Contributed by Hans-Peter Keck + +* [HTTPCLIENT-1900]: proxy protocol processor does not post-process CONNECT response messages + Contributed by Oleg Kalnichevski + +* [HTTPCLIENT-1911]: Failing tests on Fedora 28 due to weak encryption algorithms in test + keystore. + Contributed by Gary Gregory and Michael Simacek + + +Release 4.5.5 +------------------- + +HttpClient 4.5.5 (GA) is a maintenance release that fixes a regression introduced +by the previous release causing a NPE in SystemDefaultCredentialsProvider. + +Please note that as of 4.4 HttpClient requires Java 1.6 or newer. + +Changelog: +------------------- + +* [HTTPCLIENT-1690] Avoid merging Content-Encoding headers coming with 304 status to cache entry. + Contributed by Sudheera Palihakkara + +* [HTTPCLIENT-1888] Regression in SystemDefaultCredentialsProvider#getCredentials causing NPE. + Contributed by Oleg Kalnichevski + +* [HTTPCLIENT-1886] Update HttpClient 4.5.x from HttpCore 4.4.7 to 4.4.9 + Contributed by Gary Gregory + +* [HTTPCLIENT-1889] org.apache.http.client.utils.URLEncodedUtils.parse() + should return a new ArrayList when there are no query parameters. + Contributed by Gary Gregory + + +Release 4.5.4 +------------------- + +HttpClient 4.5.4 (GA) is a maintenance release that fixes a number of defects found since 4.5.3. + +Please note that as of 4.4 HttpClient requires Java 1.6 or newer. + +Changelog: +------------------- + +* [HTTPCLIENT-1883] SystemDefaultCredentialsProvider to use https.proxy* system properties + for origins with port 443. + Contributed by Oleg Kalnichevski + +* [HTTPCLIENT-1881] Allow truncated NTLM packets to work with this client. + Contributed by Karl Wright + +* [HTTPCLIENT-1855] Disabled caching of DIGEST auth scheme instances due to unreliability of nonce counter + when the auth cache is shared by multiple sessions. + Contributed by Oleg Kalnichevski + +* BasicCookieStore uses a ReentrantReadWriteLock to avoid synchronization on #getCookies/#toString + while maintaining thread safety. + Contributed by Carter Kozak + +* [HTTPCLIENT-1865] DefaultServiceUnavailableRetryStrategy does not respect HttpEntity#isRepeatable. + Contributed by Tomas Celaya + +* [HTTPCLIENT-1859] Encode Content-Disposition name and filename elements appropriately. + Contributed by Karl Wright + +* Avoid fetching the cached entity twice on cache hit. + Contributed by Leandro Nunes + +* [HTTPCLIENT-1835] #evictExpiredConnections no longer causes the #evictIdleConnections behaviour + to be implicitly enabled. + Contributed by Oleg Kalnichevski + +* [HTTPCLIENT-1831= URIBuilder should not prepend a leading slash to relative URIs. + Contributed by Oleg Kalnichevski + +* [HTTPCLIENT-1833] Fix Windows Negotiate-NTLM handling of proxies. + Contributed by Roman Stoffel + +* [HTTPCLIENT-1817] Add a "Trust All" TrustStrategy implementation. + Contributed by Gary Gregory + +* [HTTPCLIENT-1816] Update Apache Commons Codec 1.9 to 1.10. + Contributed by Gary Gregory + +* [HTTPCLIENT-1836] DefaultHostnameVerifier#getSubjectAltNames(X509Certificate) throws java.lang.ClassCastException. + Contributed by Gary Gregory , Ilian Iliev + +* [HTTPCLIENT-1845]: Extract InputStreamFactory classes out of GzipDecompressingEntity and + DeflateDecompressingEntity for reuse and to create less garbage. + Contributed by Gary Gregory + +* [HTTPCLIENT-1847] Update Ehcache from 2.6.9 to 2.6.11. + Contributed by Gary Gregory + +* [HTTPCLIENT-1848] Update spymemcached from 2.11.4 to 2.12.3. + Contributed by Gary Gregory + +* [HTTPCLIENT-1849] Update JNA from 4.1.0 to 4.4.0. + Contributed by Gary Gregory + +* [HTTPCLIENT-1850] Update SLF4J from 1.7.6 to 1.7.25. + Contributed by Gary Gregory + + +Release 4.5.3 +------------------- + +HttpClient 4.5.3 (GA) is a maintenance release that fixes a number of defects found since 4.5.2. + +Please note that as of 4.4 HttpClient requires Java 1.6 or newer. + +Changelog: +------------------- + +* [HTTPCLIENT-1803] Improved handling of malformed paths by URIBuilder. + Contributed by Oleg Kalnichevski + +* [HTTPCLIENT-1802] Do not attempt to match SSL host to subject CN if subject alternative name of any type are given. + Contributed by Oleg Kalnichevski + +* [HTTPCLIENT-1788] RFC 6265 policy must not reject cookies with paths that are no prefix of the uri path. + Contributed by Oleg Kalnichevski + +* [HTTPCLIENT-1792] SSLConnectionSocketFactory to throw SSLPeerUnverifiedException with a better error message + when hostname verification fails. + Contributed by Oleg Kalnichevski + +* [HTTPCLIENT-1779] [OSGi] support NTLM proxy authentication. + Contributed by Julian Sedding + +* [HTTPCLIENT-1773] [OSGi] HttpProxyConfigurationActivator does not unregister HttpClientBuilderFactory. + Contributed by Julian Sedding + +* [HTTPCLIENT-1771] improve OSGi webconsole display for org.apache.http.proxyconfigurator. + Contributed by Julian Sedding + +* [HTTPCLIENT-1770] OSGi metatype for org.apache.http.proxyconfigurator missing factoryPid. + Contributed by Julian Sedding + +* [HTTPCLIENT-1767] Null pointer dereference in EofSensorInputStream and ResponseEntityProxy. + Contributed by Peter Ansell + +* Support changing system default ProxySelector. + Contributed by Robin Stevens + +* All services registered in the OSGi service registry provide the whole bundle header dictionary as vendor + property value. + Contributed by Christoph Fiehe + +* [HTTPCLIENT-1750] OSGi support for CachingHttpClientBuilder. + Contributed by Justin Edelson + +* [HTTPCLIENT-1749] OSGi client builder to use weak references to track HttpClient instances. + Contributed by Justin Edelson + +* [HTTPCLIENT-1747] apply RequestConfig defaults when using HttpParams values in backward compatibility mode. + Contributed by Oleg Kalnichevski + +* Override LaxRedirectStrategy's INSTANCE field. + Contributed by Eric Wu + +* [HTTPCLIENT-1736] do not request cred delegation by default when using Kerberos auth. + Contributed by Oleg Kalnichevski + +* [HTTPCLIENT-1744] normalize hostname and certificate CN when matching to CN. + Contributed by Oleg Kalnichevski + +* [HTTPCLIENT-1732] SystemDefaultCredentialsProvider to take http.proxyHost and http.proxyPort system + properties into account. + Contributed by Oleg Kalnichevski + +* Revert "HTTPCLIENT-1712: SPNego schemes to take service scheme into account when generating auth token". + Contributed by Oleg Kalnichevski + +* [HTTPCLIENT-1727] AbstractHttpClient#createClientConnectionManager does not account for context class loader. + Contributed by Charles Allen + +* [HTTPCLIENT-1726:] Copy the SNI fix from SSLConnectionSocketFactory to the deprecated SSLSocketFactory class. + Contributed by David Black + + +Release 4.5.2 +------------------- + +HttpClient 4.5.2 (GA) is a maintenance release that fixes a number of minor defects found since 4.5.1. + +Please note that as of 4.4 HttpClient requires Java 1.6 or newer. + +Changelog: +------------------- + +* [HTTPCLIENT-1710, HTTPCLIENT-1718, HTTPCLEINT-1719] OSGi container compatibility improvements. + Contributed by 212427891 + +* [HTTPCLIENT-1717] Make fluent API Content#Content(byte[], ContentType) public. + Contributed by Cash Costello + +* [HTTPCLIENT-1715] NTLMEngineImpl#Type1Message not thread safe but declared as a constant. + Contributed by Olivier Lafontaine , Gary Gregory + +* [HTTPCLIENT-1714] Add HttpClientBuilder#setDnsResolver(DnsResolver). + Contributed by Alexis Thaveau + +* [HTTPCLIENT-1712] SPNego schemes to take service scheme into account when generating auth token. + Contributed by Georg Romstorfer + +* [HTTPCLIENT-1700] Netscape draft, browser compatibility, RFC 2109, RFC 2965 and default cookie + specs to ignore cookies with empty name for consistency with RFC 6265 specs. + Contributed by Oleg Kalnichevski + +* [HTTPCLIENT-1704] IgnoreSpec#match to always return false. + Contributed by Oleg Kalnichevski + +* [HTTPCLIENT-1550] Fixed 'deflate' zlib header check. + Contributed by Oleg Kalnichevski + +* [HTTPCLIENT-1698] Fixed matching of IPv6 addresses by DefaultHostnameVerifier + Contributed by Oleg Kalnichevski + +* [HTTPCLIENT-1695] RFC 6265 compliant cookie spec to ignore cookies with empty name / missing + value. + Contributed by Oleg Kalnichevski + +* [HTTPCLIENT-1216] Removed ThreadLocal subclass from DateUtils. + Contributed by Jochen Kemnade + +* [HTTPCLIENT-1685] PublicSuffixDomainFilter to ignore local hosts and local domains. + Contributed by Oleg Kalnichevski + + + +Release 4.5.1 +------------------- + +HttpClient 4.5.1 (GA) is a maintenance release that fixes a number of minor defects found since 4.5. + +Please note that as of 4.4 HttpClient requires Java 1.6 or newer. + +Changelog: +------------------- + +* [HTTPCLIENT-1680] redirect of a POST request causes ClientProtocolException. + Contributed by Oleg Kalnichevski + +* [HTTPCLIENT-1673] org.apache.http.entity.mime.content.* missing from OSGi exports. + Contributed by Benson Margulies + +* [HTTPCLIENT-1668] Fluent request incorrectly handles connect timeout setting. + Contributed by Oleg Kalnichevski + +* [HTTPCLIENT-1667] RequestBuilder does not take charset into account when creating + UrlEncodedFormEntity. + Contributed by Sergey Smith + +* [HTTPCLIENT-1655] HttpClient sends RST instead of FIN ACK sequence when using non-persistant + connections. + Contributed by Oleg Kalnichevski + + + +Release 4.5 +------------------- + +HttpClient 4.5 (GA) is a minor feature release that includes several incremental enhancements +to the exisitng functionality such as support for private domains in the Mozilla Public Suffix List. + +Changelog: +------------------- + +* Reduced default validate after inactivity setting from 5 sec to 2 sec + Contributed by Oleg Kalnichevski + +* [HTTPCLIENT-1649] Fixed serialization of auth schemes + Contributed by Oleg Kalnichevski + +* [HTTPCLIENT-1645]: Fluent requests to inherit config parameters of the executor. + Contributed by Oleg Kalnichevski + +* [HTTPCLIENT-1640]: RFC6265 lax cookie policy fails to parse 'max-age' attribute. + Contributed by Oleg Kalnichevski + +* [HTTPCLIENT-1633]: RFC6265CookieSpecProvider compatibility level setting has no effect. + Contributed by Oleg Kalnichevski + +* [HTTPCLIENT-1613]: Support for private domains in Mozilla Public Suffix List. + Contributed by Oleg Kalnichevski + +* [HTTPCLIENT-1651]: Add ability to disable content compression on a request basis + Contributed by Michael Osipov + +* [HTTPCLIENT-1654]: Deprecate/remove RequestConfig#decompressionEnabled in favor of #contentCompressionEnabled + Contributed by Michael Osipov + + + +Release 4.4.1 +------------------- + +HttpClient 4.4.1 (GA) is a maintenance release that fixes a number of defects in new functionality +introduced in version 4.4. + +Users of HttpClient 4.4 are encouraged to upgrade. + +Please note that as of 4.4 HttpClient requires Java 1.6 or newer. + +Changelog: +------------------- + +* Marked RFC 2109, RFC 2965, Netscape draft cookie specs as obsolete + Contributed by Oleg Kalnichevski + +* [HTTPCLIENT-1633] RFC6265CookieSpecProvider compatibility level setting has no effect. + Contributed by Oleg Kalnichevski + +* [HTTPCLIENT-1628]: Auth cache can fail when domain name contains uppercase characters. + Contributed by Dennis Ju + +* [HTTPCLIENT-1609] Stale connection check in PoolingHttpClientConnectionManager has no effect. + Internal connection pool does not correctly implement connection validation. + Contributed by Charles Lip + + + +Release 4.4 Final +------------------- + +This is the first stable (GA) release of HttpClient 4.4. Notable features and enhancements included +in 4.4 series are: + +* Support for the latest HTTP state management specification (RFC 6265). Please note that the old +cookie policy is still used by default for compatibility reasons. RFC 6265 compliant cookie +policies need to be explicitly configured by the user. Please also note that as of next feature +release support for Netscape draft, RFC 2109 and RFC 2965 cookie policies will be deprecated +and disabled by default. It is recommended to use RFC 6265 compliant policies for new applications +unless compatibility with RFC 2109 and RFC 2965 is required and to migrate existing applications +to the default cookie policy. + +* Enhanced, redesigned and rewritten default SSL hostname verifier with improved RFC 2818 +compliance + +* Default SSL hostname verifier and default cookie policy now validate certificate identity +and cookie domain of origin against the public suffix list maintained by Mozilla.org + + +* More efficient stale connection checking: indiscriminate connection checking which results +in approximately 20 to 50 ms overhead per request has been deprecated in favor of conditional +connection state validation (persistent connections are to be re-validated only if a specified +period inactivity has elapsed) + +* Authentication cache thread-safety: authentication cache used by HttpClient is now thread-safe +and can be shared by multiple threads in order to re-use authentication state for subsequent +requests + +* Native Windows Negotiate and NTLM via SSPI through JNA: when running on Windows OS HttpClient +configured to use native NTLM or SPNEGO authentication schemes can make use of platform specific +functionality via JNA and current user credentials. This functionality is still considered +experimental, known to have compatibility issues and subject to change without prior notice. +Use at your discretion. + +This release also includes all fixes from the stable 4.3.x release branch. + +Please note that as of 4.4 HttpClient requires Java 1.6 or newer. + + +Changelog: +------------------- + +* Support for the latest HTTP state management specification (RFC 6265). + Contributed by Oleg Kalnichevski + +* [HTTPCLIENT-1515] Caching of responses to HEAD requests + Contributed by Tyrone Cutajar and + Francois-Xavier Bonnet + +* [HTTPCLIENT-1560] Native Windows auth improvements + Contributed by Michael Osipov + +* Update Apache Commons Logging version from 1.1.3 to 1.2. + Contributed by Gary Gregory + +* Update Apache Commons Codec version from 1.6 to 1.9. + Contributed by Gary Gregory + +* Update Ehcache version from 2.2.0 to 2.6.9. + Contributed by Gary Gregory + +* Update Ehcache version from 2.2.0 to 2.6.9. + Contributed by Gary Gregory + +* Update Spymemcached version from 2.6 to 2.11.4. + Contributed by Gary Gregory + +* Update SLF4J version from 1.5.11 to 1.7.7. + Contributed by Gary Gregory + + + + + +Release 4.4 BETA1 +------------------- + +This is the first BETA release of HttpClient 4.4. Notable features and enhancements included +in 4.4 series are: + +* Enhanced redesigned and rewritten default SSL hostname verifier with improved RFC 2818 +compliance + +* Default SSL hostname verifier and default cookie policy now validate certificate identity +and cookie domain of origin against the public suffix list maintained by Mozilla.org + + +* Native windows Negotiate/NTLM via JNA: when running on Windows OS HttpClient configured to use +native NTLM or SPNEGO authentication schemes can make use of platform specific functionality +via JNA and current user system credentials + +* More efficient stale connection checking: indiscriminate connection checking which results +in approximately 20 to 50 ms overhead per request has been deprecated in favor of conditional +connection state validation (persistent connections are to be re-validated only if a specified +period inactivity has elapsed) + +* Authentication cache thread-safety: authentication caches used by HttpClient is now thread-safe +and can be shared by multiple threads in order to re-use authentication state for subsequent +requests + +This release also includes all fixes from the stable 4.3.x release branch. + +Please note that as of 4.4 HttpClient requires Java 1.6 or newer. + + +Changelog: +------------------- + +* [HTTPCLIENT-1547] HttpClient OSGi bundle doesn't import the package "javax.naming". + Contributed by Willem Jiang + +* [HTTPCLIENT-1541] Use correct (HTTP/hostname) service principal name for Windows native + Negotiate/NTLM auth schemes. + Contributed by Ka-Lok Fung + +* Improved compliance with RFC 2818: default hostname verifier to ignore the common name of the + certificate subject if alternative subject names (dNSName or iPAddress) are present. + Contributed by Oleg Kalnichevski + +* [HTTPCLIENT-1540] Support delegated credentials (ISC_REQ_DELEGATE) by Native windows + native Negotiate/NTLM auth schemes. + Contributed by Ka-Lok Fung + + + +Release 4.4 ALPHA1 +------------------- + +This is the first ALPHA release of HttpClient 4.4. Notable features and enhancements included +in the 4.4 branch are: + +* More efficient stale connection checking: indiscriminate connection checking which results +in approximately 20 to 50 ms overhead per request has been deprecated in favor of conditional +connection state validation (persistent connections are to be re-validated only if a specified +period inactivity has elapsed) + +* Native windows Negotiate/NTLM via JNA: when running on Windows OS HttpClient configured to use +native NTLM or SPNEGO authentication schemes can make use of platform specific functionality +via JNA and current user system credentials + +* Authentication cache thread-safety: authentication caches used by HttpClient is now thread-safe +and can be shared by multiple threads in order to re-use authentication state for subsequent +requests + +This release also includes all fixes from the stable 4.3.x release branch. + +Please note that as of 4.4 HttpClient requires Java 1.6 or newer. + +Please note that new features included in this release are still considered experimental and +their API may change in the future 4.4 alpha and beta releases. + + +Changelog: +------------------- + +* [HTTPCLIENT-1493] Indiscriminate connection checking has been deprecated in favor of conditional + connection state validation. Persistent connections are to be re-validated only after a defined + period inactivity prior to being leased to the consumer. + Contributed by Oleg Kalnichevski + +* [HTTPCLIENT-1519] Use the original HttpHost instance passed as a parameter to + HttpClient#execute when generating 'Host' request header. + Contributed by Oleg Kalnichevski + +* [HTTPCLIENT-1491] Enable provision of Service Principal Name in Windows native + auth scheme. + Contributed by Malcolm Smith + +* [HTTPCLIENT-1403] Pluggable content decoders. + Contributed by Oleg Kalnichevski + +* [HTTPCLIENT-1466] FileBodyPart#generateContentType() ignores custom ContentType values. + Contributed by Oleg Kalnichevski + +* [HTTPCLIENT-1461] fixed performance degradation in gzip encoded content processing + introduced by HTTPCLIENT-1432. + Contributed by Oleg Kalnichevski + +* [HTTPCLIENT-1457] Incorrect handling of Windows (NT) credentials by + SystemDefaultCredentialsProvider. + Contributed by Oleg Kalnichevski + +* [HTTPCLIENT-1456] Request retrial after status 503 causes ClientProtocolException. + Contributed by Oleg Kalnichevski + +* [HTTPCLIENT-1454] Make connection operator APIs public. + Contributed by Tamas Cservenak + +* Update JUnit to version 4.11 from 4.9 + Contributed by Gary Gregory + + + +Release 4.3.4 +------------------- + +HttpClient 4.3.4 (GA) is a maintenance release that improves performance in high concurrency +scenarios. This version replaces dynamic proxies with custom proxy classes and eliminates thread +contention in java.reflect.Proxy.newInstance() when leasing connections from the connection pool +and processing response messages. + + +Changelog: +------------------- + +* Replaced dynamic proxies with custom proxy classes to reduce thread contention. + Contributed by Oleg Kalnichevski + +* [HTTPCLIENT-1484] GzipCompressingEntity should not close the underlying output stream + if the entity has not been fully written out due to an exception. + Contributed by Oleg Kalnichevski + +* [HTTPCLIENT-1474] Fixed broken entity enclosing requests in HC Fluent. + Contributed by Oleg Kalnichevski + +* [HTTPCLIENT-1470] CachingExec(ClientExecChain, HttpCache, CacheConfig, AsynchronousValidator) + throws NPE if config is null + + + + +Release 4.3.3 +------------------- + +HttpClient 4.3.3 (GA) is a bug fix release that fixes a regression introduced by the previous +release causing a significant performance degradation in compressed content processing. + +Users of HttpClient 4.3 are encouraged to upgrade. + +Changelog: +------------------- + +* [HTTPCLIENT-1466] FileBodyPart#generateContentType() ignores custom ContentType values. + Contributed by Oleg Kalnichevski + +* [HTTPCLIENT-1453] Thread safety regression in PoolingHttpClientConnectionManager + #closeExpiredConnections that can lead to ConcurrentModificationException. + Contributed by Oleg Kalnichevski + +* [HTTPCLIENT-1461] fixed performance degradation in compressed content processing + introduced by HTTPCLIENT-1432. + Contributed by Oleg Kalnichevski + +* [HTTPCLIENT-1457] Incorrect handling of Windows (NT) credentials by + SystemDefaultCredentialsProvider. + Contributed by Oleg Kalnichevski + +* [HTTPCLIENT-1456] Request retrial after status 503 causes ClientProtocolException. + Contributed by Oleg Kalnichevski + + +Release 4.3.2 +------------------- + +HttpClient 4.3.2 (GA) is a maintenance release that delivers a number of improvements +as well as bug fixes for issues reported since 4.3.1 release. SNI support for +Oracle JRE 1.7+ is being among the most notable improvements. + +Users of HttpClient 4.3 are encouraged to upgrade. + +Changelog: +------------------- + +* [HTTPCLIENT-1447] Clients created with HttpClients.createMinimal do not work with absolute URIs + Contributed by Joseph Walton + +* [HTTPCLIENT-1446] NTLM proxy + BASIC target auth fails with 'Unexpected state: + MSG_TYPE3_GENERATED'. + Contributed by Oleg Kalnichevski + +* [HTTPCLIENT-1443] HttpCache uses the physical host instead of the virtual host as a cache key. + Contributed by Francois-Xavier Bonnet + +* [HTTPCLIENT-1442] Authentication header set by the user gets removed in case + of proxy authentication (affects plan HTTP requests only). + Contributed by Oleg Kalnichevski + +* [HTTPCLIENT-1441] Caching AsynchronousValidationRequest leaks connections. + Contributed by Dominic Tootell + +* [HTTPCLIENT-1440] 'file' scheme in redirect location URI causes NPE. + Contributed by James Leigh + +* [HTTPCLIENT-1437] Made Executor#execute thread safe. + Contributed by Oleg Kalnichevski + +* [HTTPCLIENT-1119] SNI support (Oracle Java 1.7+ only). + Contributed by Bruno Harbulot + +* [HTTPCLIENT-1435] Fluent Executor ignores custom request properties. + Contributed by Oleg Kalnichevski + +* [HTTPCLIENT-1432] Lazy decompressing of HttpEntity#getContent() to avoid EOFException + in case of an empty response with 'Content-Encoding: gzip' header. + Contributed by Yihua Huang + +* [HTTPCLIENT-1431] (Regression) deprecated connection manager cannot be used with + a custom LayeredSchemeSocketFactory. + Contributed by Oleg Kalnichevski + +* [HTTPCLIENT-1425] Fixed socket closed exception thrown by caching HttpClient when the origin + server sends a long chunked response. + Contributed by James Leigh + +* [HTTPCLIENT-1417] Fixed NPE in BrowserCompatSpec#formatCookies caused by version 1 + cookies with null cookie value. + Contributed by Oleg Kalnichevski + +* [HTTPCLIENT-1416] Fixed NPE in CachingHttpClientBuilder#build(). + Contributed by Oleg Kalnichevski + + + +Release 4.3.1 +------------------- + +HttpClient 4.3.1 (GA) is a bug fix release that addresses a number of issues reported since +release 4.3. + +Users of HttpClient 4.3 are strongly encouraged to upgrade. + +Changelog +------------------- + +* [HTTPCLIENT-1410] Browser compatible hostname verifier no longer rejects + *.co., *.gov., *.info., etc as invalid. + Contributed by Oleg Kalnichevski + +* Ensure X509HostnameVerifier is never null. + Contributed by Oleg Kalnichevski + +* [HTTPCLIENT-1405] CONNECT HTTP/1.1 requests lack mandatory 'Host' header. + Contributed by Oleg Kalnichevski + +* [HTTPCLIENT-1402] Cache default User-Agent value. + Contributed by yuexiaojun + +* [HTTPCLIENT-1398] Fixed invalid OSGi metadata caused by corrupted Maven bundle plugin metadata. + Contributed by Oleg Kalnichevski + +* [HTTPCLIENT-1399] Fixed NPE in RequestBuilder. + Contributed by Oleg Kalnichevski + + + + +Release 4.3 Final +------------------- + +This is the first stable (GA) release of HttpClient 4.3. The most notable enhancements included +in this release are: + +* Support for Java 7 try-with-resources for resource management (connection release.) + +* Added fluent Builder classes for HttpEntity, HttpRequest, HttpClient and SSLContext instances. + +* Deprecation of preference and configuration API based on HttpParams interface in favor of +constructor injection and plain configuration objects. + +* Reliance on object immutability instead of access synchronization for thread safety. +Several old classes whose instances can be shared by multiple request exchanges have +been replaced by immutable equivalents. + +* DefaultHttpClient, DecompressingHttpClient, CachingHttpClient and similar classes are +deprecated in favor of builder classes that produce immutable HttpClient instances. + +* HttpClient builders now dynamically construct a request execution pipeline tailored +specifically to the user configuration by physically excluding unnecessary protocol components. + +* There is now an option to construct a minimal HttpClient implementation that can only execute +basic HTTP message exchanges without redirects, authentication, state management or proxy support. +This feature might be of particular use in web crawler development. + +* There is now option to avoid strict URI syntax for request URIs by executing HTTP requests +with an explicitly specified target host. HttpClient will no longer attempt to parse the request +URI if it does not need to extract the target host from it. + +This release also includes all fixes from the stable 4.2.x release branch. + + +Changelog +------------------- +* [HTTPCLIENT-1371] Weak ETag Validation is Useful On PUT With If-Match + Contributed by James Leigh + +* [HTTPCLIENT-1394] Support for Native windows Negotiate/NTLM via JNA + Contributed by Ryan McKinley + +* [HTTPCLIENT-1384] Expose CacheInvalidator interface. + Contributed by Nicolas Richeton + +* [HTTPCLIENT-1385] Fixed path normalization in CacheKeyGenerator + Contributed by James Leigh + +* [HTTPCLIENT-1370] Response to non-GET requests should never be cached with the default + ResponseCachingPolicy + Contributed by James Leigh + +* [HTTPCLIENT-1373] OPTIONS and TRACE should not invalidate cache + Contributed by James Leigh + +* [HTTPCLIENT-1383] HttpClient enters an infinite loop during NTLM authentication if the opposite + endpoint keeps responding with a type 2 NTLM response after type 3 MTLM message has already been + sent by the client. + Contributed by Oleg Kalnichevski + +* [HTTPCLIENT-1372] Refactor HttpMultipart, and add RFC6532 mode, so that headers in post + are no longer constrained to ASCII values. + Contributed by Karl Wright + +* [HTTPCLIENT-1377] User principal for non-NTLM authentication is incorrectly generated when using + user credentials are specified as NTCredentials + Contributed by Gary Gregory + + + +Release 4.3 BETA2 +------------------- + +This is the second BETA release of HttpClient 4.3. The most notable features and improvements +in the 4.3 branch are: Support for Java 7 try-with-resources for resource management (connection +release); fluent Builder classes for HttpEntity, HttpRequest and HttpClient instances, deprecation +of preference and configuration API based on HttpParams interface in favor of constructor injection +and plain configuration objects, reliance on object immutability instead of access synchronization +for thread safety. + +This release also includes all fixes from the stable 4.2.x release branch. + +Changelog +------------------- + + +* [HTTPCLIENT-1366] org.apache.http.client.utils.URLEncodedUtils should parse the semicolon as a query parameter separator. + Contributed by Gary Gregory + +* [HTTPCLIENT-1365] NPE when ManagedHttpClientConnectionFactory.create(ConnectionConfig) is called with null. + Contributed by Gary Gregory + +* [HTTPCLIENT-1362] Better error messages for connect timed out and connection refused + exceptions. + Contributed by Oleg Kalnichevski + +* [HTTPCLIENT-1360] separate out DeflateInputStream as an independent class, + so it can be used by others. + Contributed by Karl Wright + +* [HTTPCLIENT-1359] repeated requests using the same context fail if they redirect. + Contributed by James Leigh + +* [HTTPCLIENT-1354] do not quote algorithm parameter in DIGEST auth response. + Contributed by Oleg Kalnichevski + +* [HTTPCLIENT-1351] Added utility method to resolve final location from original request, + target host and a list of redirects. + Contributed by James Leigh + +* [HTTPCLIENT-1344] Userinfo credentials in URI should not default to preemptive BASIC + authentication. + Contributed by Oleg Kalnichevski + +* [HTTPCLIENT-1345] Useinfo credentials ignored in redirect location header. + Contributed by Oleg Kalnichevski + +* [HTTPCLIENT-1294] HttpClient to rewrite host name of the redirect location URI in order + to avoid circular redirect exception due to host name case mismatch. + Contributed by Oleg Kalnichevski + +* [HTTPCLIENT-1264] Add support for multiple levels of browser compatibility + to BrowserCompatSpec and BrowserCompatSpecFactory. Include constructor + argument for IE medium-security compatibility. + Contributed by Karl Wright (kwright at apache.org) + +* [HTTPCLIENT-1349] SSLSocketFactory incorrectly identifies key passed with keystore as + the keystore password. + Contributed by David Graff + +* [HTTPCLIENT-1346] Ensure propagation of SSL handshake exceptions. + Contributed by Pasi Eronen + +* [HTTPCLIENT-1343] SSLSocketFactory optional parameters for supported SSL protocols and cipher + suites. + Contributed by Oleg Kalnichevski + +* [HTTPCLIENT-1238] Contribute Bundle Activator And Central Proxy Configuration. + Contributed by Simone Tripodi + +* [HTTPCLIENT-1299] (regression) cache incorrectly disposes of the underlying cache resource + when storing variant entry. + Contributed by James Leigh + +* [HTTPCLIENT-1342] Redirects with underscore character in the location hostname cause + "java.lang.IllegalArgumentException: Host name may not be null". + Contributed by Oleg Kalnichevski + + + +Release 4.3 BETA1 +------------------- + +This is the first BETA release of HttpClient 4.3. The 4.3 branch enhances HttpClient in several +key areas and includes several notable features and improvements: Support for Java 7 +try-with-resources for resource management (connection release); fluent Builder classes for +HttpEntity, HttpRequest and HttpClient instances, deprecation of preference and configuration API +based on HttpParams interface in favor of constructor injection and plain configuration objects, +reliance on object immutability instead of access synchronization for thread safety. + +This release also includes all fixes from the stable 4.2.x release branch. + + +Changelog +------------------- + +* [HTTPCLIENT-1317] InetAddressUtils should handle IPv6 Addresses with Embedded IPv4 Addresses + Contributed Sebastian Bazley . + +* [HTTPCLIENT-1320] Leverage javax.net.ssl.SSLSocketFactory#getDefault() to initialize SSL context + based on system defaults instead of using an internal custom routine. + Contributed by Abe Backus and Oleg Kalnichevski + +* [HTTPCLIENT-1316] Certificate verification rejects IPv6 addresses which are not String-equal. + Contributed Sebastian Bazley . + +* [HTTPCLIENT-1307] Future based asynchronous request execution. + Contributed by Jilles van Gurp + +* [HTTPCLIENT-1313] Fixed IllegalStateException in deprecated ThreadSafeClientConnManager. + Contributed by Oleg Kalnichevski + +* [HTTPCLIENT-1298] Add AsynchronousValidator in HttpClientBuilder's list of closeable objects. + Contributed by Martin Meinhold + + + +Release 4.3 ALPHA1 +------------------- + +This is the first ALPHA release of HttpClient 4.3. The 4.3 branch enhances HttpClient in several +key areas and includes several notable features and improvements: Support for Java 7 +try-with-resources for resource management (connection release); fluent Builder classes for +HttpEntity, HttpRequest and HttpClient instances, deprecation of preference and configuration API +based on HttpParams interface in favor of constructor injection and plain configuration objects, +reliance on object immutability instead of access synchronization for thread safety. + +We are kindly asking all upstream projects to review API changes and help us improve +the APIs by providing feedback and sharing ideas on dev@hc.apache.org. + +This release also includes all fixes from the stable 4.2.x release branch. + +Please note that new features included in this release are still considered experimental and +their API may change in the future 4.3 alpha and beta releases. + + +Changelog +------------------- + +* [HTTPCLIENT-1250] Allow query string to be ignored when determining cacheability for + HTTP 1.0 responses. + Contributed by Don Brown + +* [HTTPCLIENT-1261] Make SystemDefaultHttpClient honor http.agent system property. + Contributed by Oleg Kalnichevski + +* [HTTPCLIENT-900] Don't enforce URI syntax for messages with an explicit target host. + Contributed by Oleg Kalnichevski + +* [HTTPCLIENT-1190] HttpClient cache does not support "Vary: Cookie" + Contributed by Oleg Kalnichevski + +* [HTTPCLIENT-1259] Calling #abort() on requests executed with DecompressingHttpClient has no + effect. + Contributed by Oleg Kalnichevski + +* [HTTPCLIENT-1253] URIBuilder setParameter() method could exceed the HTTP header size. + Contributed by Oleg Kalnichevski + +* [HTTPCLIENT-1216] Added method to force clean thread-local used by DateUtils. + Contributed by Oleg Kalnichevski + + +Release 4.2.3 +------------------- + +HttpClient 4.2.3 (GA) is a bug fix release that addresses a number of issues reported since +release 4.2.2. This release also includes a thoroughly reworked NTLM authentication engine +which should result in a better compatibility with the newest Microsoft products. + +Users of HttpClient 4.x are advised to upgrade. + +Changelog +------------------- + +* [HTTPCLIENT-1296] NPE gets thrown if you combine a default host with a virtual host + that has a -1 value for the port. + Contributed by Karl Wright + +* [HTTPCLIENT-1290] 304 cached response never reused with If-modified-since conditional + requests. + Contributed by Francois-Xavier Bonnet + +* [HTTPCLIENT-1291] Absolute request URIs without an explicitly specified path are rewritten + to have "/" path). + Contributed by Oleg Kalnichevski + +* [HTTPCLIENT-1286] Request URI rewriting is inconsistent - URI fragments are not removed + from absolute request URIs. + Contributed by Oleg Kalnichevski + +* [HTTPCLIENT-1284] HttpClient incorrectly generates Host header when physical connection + route differs from the host name specified in the request URI. + Contributed by Oleg Kalnichevski + +* [HTTPCLIENT-1293] Kerberos and SPNego auth schemes use incorrect authorization header name + when authenticating with a proxy. + Contributed by Oleg Kalnichevski + +* [HTTPCLIENT-1283] NTLM needs to use Locale-independent form of + toUpperCase(). + Contributed by Karl Wright + +* [HTTPCLIENT-1279] Target host responding with status 407 (proxy authentication required) + causes an NPE. + Contributed by Oleg Kalnichevski + +* [HTTPCLIENT-1281] GzipDecompressingEntity does not release InputStream when an IOException + occurs while reading the Gzip header + Contributed by Francois-Xavier Bonnet + +* [HTTPCLIENT-1277] Caching client sends a 304 to an unconditional request. + Contributed by Francois-Xavier Bonnet + +* [HTTPCLIENT-1278] Update NTLM documentation. + Contributed by Karl Wright + +* SystemDefaultHttpClient misinterprets 'http.keepAlive' default value and disables + connection persistence if the system property is not set. This causes connection + based authentication schemes such as NTLM to fail. + +* [HTTPCLIENT-1276] cache update on a 304 response causes NPE. + Contributed by Francois-Xavier Bonnet + +* [HTTPCLIENT-1273] DecompressingHttpClient does not automatically consume response + content in case of an i/o, HTTP or runtime exception thrown by the decompressing + protocol interceptor leading to a potential connection leak. + Contributed by Oleg Kalnichevski + +* [HTTPCLIENT-1268] NTLM engine refactor fix, to correct a buffer overrun, and get NTLMv2 + flags right. + Contributed by Karl Wright + +* [HTTPCLIENT-1266] NTLM engine refactoring and compatibility improvements. + Contributed by Karl Wright + +* [HTTPCLIENT-1263] BrowserCompatSpec: attribute values containing spaces or special characters + should be enclosed with quotes marks for version 1 cookies. + Contributed by Francois-Xavier Bonnet + +* [HTTPCLIENT-1263] CachingHttpClient fails to release connections back to the connection + manager for some type of HTTP response messages when used together with DecompressingHttpClient. + Contributed by Francois-Xavier Bonnet + +* [HTTPCLIENT-1258] Fixed NullPointerException in NTLMEngineImpl caused by null NT domain + attribute. + Contributed by Oleg Kalnichevski + +* [HTTPCLIENT-1254] Redirect with underscore in hostname causes ProtocolException. + Contributed by Oleg Kalnichevski + +* [HTTPCLIENT-1255] AbstractVerifier incorrectly parses certificate CN containing wildcard. + Contributed by Oleg Kalnichevski + + + +Release 4.2.2 +------------------- + +HttpClient 4.2.2 (GA) is a bug fix release that addresses a number of issues reported since +release 4.2.1. + +Users of HttpClient 4.2 are advised to upgrade. + +Changelog +------------------- + +* [HTTPCLIENT-1248] Default and lax redirect strategies should not convert requests redirected + with 307 status to GET method. + Contributed by Oleg Kalnichevski + +* [HTTPCLIENT-1215] BasicAuthCache does not take default ports into consideration when + looking up cached authentication details by HttpHost key. + Contributed by Oleg Kalnichevski + +* [HTTPCLIENT-1241] (regression) Preemptive BASIC authentication failure should be considered + final and no further attempts to re-authenticate using the same credentials should be made. + Contributed by Oleg Kalnichevski + +* [HTTPCLIENT-1229] Fixed NPE in BasicClientConnectionManager that can be triggered by releasing + connection after the connection manager has already been shut down. + Contributed by Oleg Kalnichevski + +* [HTTPCLIENT-1227] Date parsing in DateUtils made more efficient. + Contributed by Patrick Linskey + +* [HTTPCLIENT-1224] (regression) NTLM auth not retried after a redirect over a non-persistent + connection. + Contributed by Oleg Kalnichevski + +* [HTTPCLIENT-1223] Cache could be more aggressive on cache invalidations + from Content-Location. Contributed by Jon Moore . + Contributed by Jon Moore + +* [HTTPCLIENT-1217] AutoRetryHttpClient does not release connection used by the previous response + when request is retried + Contributed by Oleg Kalnichevski + + + +Release 4.2.1 +------------------- + +HttpClient 4.2.1 (GA) is a bug fix release that addresses a number of issues reported since +release 4.2. + +Users of HttpClient 4.2 are advised to upgrade. + +Changelog +------------------- + +* [HTTPCLIENT-1209] Redirect URIs are now normalized. + Contributed by Oleg Kalnichevski + +* [HTTPCLIENT-1202] ResponseCachingPolicy should honor explicit cache-control + directives for other status codes + Contributed by Jon Moore + +* [HTTPCLIENT-1199] DecompressingHttpClient strips content from entity enclosing requests + Contributed by Oleg Kalnichevski + +* [HTTPCLIENT-1198] HttpHost is not set in HttpContext in CachingHttpClient. + Contributed by Jon Moore + +* [HTTPCLIENT-1200] DecompressingHttpClient fails to generate correct HttpHost context attribute. + Contributed by Guillaume Castagnino + +* [HTTPCLIENT-1192] URIBuilder encodes query parameters twice. + Contributed by Oleg Kalnichevski and Sebastian Bazley . + +* [HTTPCLIENT-1196] Fixed NPE in UrlEncodedFormEntity constructor thrown if charset is null. + Contributed by Oleg Kalnichevski + +* [HTTPCLIENT-1193] Fixed regression in the route tracking logic of the default connection manager + causing cross-site redirect failures. + Contributed by Oleg Kalnichevski + +Release 4.2 +------------------- + +This is the first stable (GA) release of HttpClient 4.2. The most notable enhancements included +in this release are: + +* New facade API for HttpClient based on the concept of a fluent interface. The fluent API exposes + only the most fundamental functions of HttpClient and is intended for relatively simple use cases + that do not require the full flexibility of HttpClient. However, the fluent API almost fully + relieves the users from having to deal with connection management and resource deallocation. + +* Redesigned and rewritten connection management code. + +* Enhanced HTTP authentication API that enables HttpClient to handle more complex authentication + scenarios. HttpClient 4.2 is now capable of making use of multiple authentication challenges + and retry authentication with a fall-back scheme in case the primary one fails. This can be + important for compatibility with Microsoft products that are often configured to use + SPNEGO/Kerberos as the preferred authentication scheme. + + +Changelog +------------------- + +* [HTTPCLIENT-1187] If a revalidation response is deemed too old CachingHttpClient fails to + consume its content resulting in a connection leak. + Contributed by Oleg Kalnichevski + +* [HTTPCLIENT-1186] State of newly created connections in the connection pool is not always + correctly updated potentially allowing those connections to be leased to users with a different + security context. + Contributed by Ralf Poehlmann + +* [HTTPCLIENT-1179] Upgraded Commons Codec dependency to version 1.6 + Contributed by Oleg Kalnichevski + +* [HTTPCLIENT-1177] always remove fragments from request URIs + Contributed by Oleg Kalnichevski + +Incompatible changes +-------------------- +[Compared to release version 4.1.3] + +The following fields have been deprecated for some time now and have been deleted: + +org.apache.http.client.params.ClientPNames#CONNECTION_MANAGER_FACTORY +org.apache.http.impl.cookie.BrowserCompatSpec#DATE_PATTERNS + +The following methods have been deprecated for some time now and have been deleted: + +org.apache.http.client.params.ClientParamBean#setConnectionManagerFactory(org.apache.http.conn.ClientConnectionManagerFactory) +org.apache.http.client.protocol.ClientContextConfigurer#setAuthSchemePref(java.util.List) +org.apache.http.entity.mime.content.FileBody#writeTo(java.io.OutputStream, int) +org.apache.http.entity.mime.content.InputStreamBody#writeTo(java.io.OutputStream, int) +org.apache.http.entity.mime.content.StringBody#writeTo(java.io.OutputStream, int) + +The following classes have been deprecated for some while now and have been deleted: + +org.apache.http.impl.conn.tsccm.RefQueueHandler +org.apache.http.impl.conn.tsccm.AbstractConnPool no longer implements interface org.apache.http.impl.conn.tsccm.RefQueueHandler +org.apache.http.impl.conn.tsccm.ConnPoolByRoute no longer implements interface org.apache.http.impl.conn.tsccm.RefQueueHandler +org.apache.http.impl.conn.tsccm.RefQueueWorker + + + +Release 4.2 BETA1 +------------------- + +This is the first BETA release of HttpClient 4.2. This release completes development of several +notable enhancements in HttpClient: + +* New facade API for HttpClient based on the concept of a fluent interface. The fluent API exposes + only the most fundamental functions of HttpClient and is intended for relatively simple use cases + that do not require the full flexibility of HttpClient. However, the fluent API almost fully + relieves the users from having to deal with connection management and resource deallocation. + +* Redesigned and rewritten connection management code. As of release 4.2 HttpClient will be using + pooling connection manager per default. + +* Enhanced HTTP authentication API that enables HttpClient to handle more complex authentication + scenarios. HttpClient 4.2 is now capable of making use of multiple authentication challenges + and retry authentication with a fall-back scheme in case the primary one fails. This can be + important for compatibility with Microsoft products that are often configured to use + SPNEGO/Kerberos as the preferred authentication scheme. + + +Changelog +------------------- + +* [HTTPCLIENT-1164] Compressed entities are not being cached properly. + Contributed by Jon Moore . + +* [HTTPCLIENT-1154] MemcachedHttpCacheStorage should allow client to + specify custom prefix string for keys. + Contributed by Jon Moore . + +* [HTTPCLIENT-1153] MemcachedHttpCacheStorage uses URL as cache key; + shouldn't due to fixed maximum-length memcached keys. + Contributed by Jon Moore . + +* [HTTPCLIENT-1157] MemcachedHttpCacheStroage should throw IOExceptions + instead of RuntimeExceptions. + Contributed by James Miller . + +* [HTTPCLIENT-1152] MemcachedHttpCacheStorage should verify class of + returned object before casting. + Contributed by Rajika Kumarasiri . + +* [HTTPCLIENT-1155] CachingHttpClient fails to ensure that the response content gets fully consumed + when using a ResponseHandler, which can potentially lead to connection leaks. + Contributed by James Miller + +* [HTTPCLIENT-1147] When HttpClient-Cache cannot open cache file, should act like miss. + Contributed by Joe Campbell + +* [HTTPCLIENT-1137] Values for the Via header are cached and reused by httpclient-cache. + Contributed by Alin Vasile + +* [HTTPCLIENT-1142] Infinite loop on NTLM authentication failure. + Contributed by Oleg Kalnichevski + +* [HTTPCLIENT-1143] CachingHttpClient leaks connections with stale-if-error. + Contributed by James Miller + +Release 4.2 ALPHA1 +------------------- + +This is the first ALPHA release of HttpClient 4.2. The 4.2 branch enhances HttpClient in several +key areas and includes several notable features and improvements: + +* New facade API for HttpClient based on the concept of a fluent interface. The fluent API exposes + only the most fundamental functions of HttpClient and is intended for relatively simple use cases + that do not require the full flexibility of HttpClient. However, the fluent API almost fully + relieves the users from having to deal with connection management and resource deallocation. + +* Redesigned and rewritten connection management code. As of release 4.2 HttpClient will be using + pooling connection manager per default. + +* Enhanced HTTP authentication API that enables HttpClient to handle more complex authentication + scenarios. HttpClient 4.2 is now capable of making use of multiple authentication challenges + and retry authentication with a fall-back scheme in case the primary one fails. This can be + important for compatibility with Microsoft products that are often configured to use + SPNEGO/Kerberos as the preferred authentication scheme. + +Please note that new features included in this release are still considered experimental and +their API may change in the future ALPHA releases. + +Changelog +------------------- + +* [HTTPCLIENT-1128] SystemDefaultHttpClient (HttpClient implementation initialized using system + properties). + Contributed by Oleg Kalnichevski + +* [HTTPCLIENT-1135] RandomAccessFile mode 'w' used by HttpClientCache is not valid. + Contributed by Oleg Kalnichevski + +* [HTTPCLIENT-1131] HttpClient to authenticate preemptively using BASIC scheme if a userinfo + attribute is specified in the request URI. + Contributed by Oleg Kalnichevski + +* [HTTPCLIENT-1134] make BasicResponseHandler consume response content in case of an unsuccessful + result (status code >= 300). + Contributed by Oleg Kalnichevski + +* [HTTPCLIENT-1132] ProxyClient implementation. + Contributed by Oleg Kalnichevski + +* [HTTPCLIENT-1127] fixed dead-lock between SingleClientConnManager and AbstractPooledConnAdapter. + Contributed by Oleg Kalnichevski + +* [HTTPCLIENT-1107] Auth framework redesign. + Contributed by Oleg Kalnichevski + +* [HTTPCLIENT-1116] ResponseCachingPolicy uses integers for sizes + Contributed by Greg Bowyer + +* [HTTPCLIENT-1123] Support for pluggable DNS resolvers. + Contributed by Alin Vasile + +* [HTTPCLIENT-1120] DefaultHttpRequestRetryHandler#retryRequest should not retry aborted requests. + Contributed by Alin Vasile + +* Support for auth-int qop (quality of protection) option in Digest auth scheme. + Contributed by Oleg Kalnichevski + +* [HTTPCLIENT-1076] Fluent facade API (Google summer of code 2011 project). + Contributed by Xu Lilu + +* UriBuilder implementation. + Contributed by Xu Lilu + +* Redesign of connection management classes based on new pooling components from HttpCore. + Contributed by Oleg Kalnichevski + +* [HTTPCLIENT-1111] Added #prepareSocket method to SSLSocketFactory. + Contributed by Pasi Eronen + +* Added #reset() and #releaseConnection() methods to HttpRequestBase. + Contributed by Oleg Kalnichevski + +* [HTTPCLIENT-1105] AutoRetryHttpClient: built-in way to do auto-retry for certain status codes. + Contributed by Dan Checkoway + +* [HTTPCLIENT-1094] Digest auth scheme refactoring. + Contributed by Oleg Kalnichevski + +* Lax implementation of RedirectStrategy. + Contributed by Bartosz Firyn + +* [HTTPCLIENT-1044] HttpRequestRetryHandler implementation compliant with the definition of + idempotent methods given in the RFC 2616. + Contributed by Oleg Kalnichevski + + +Release 4.1.2 +------------------- + +The HttpClient 4.1.2 is a bug fix release that addresses a number of non-critical issues reported +since release 4.1.1. + +* [HTTPCLIENT-1100] Missing Content-Length header makes cached entry invalid + Contributed by Bart Robeyns + +* [HTTPCLIENT-1098] Avoid expensive reverse DNS lookup on connect timeout exception. + Contributed by Thomas Boettcher + +* [HTTPCLIENT-1097] BrowserCompatHostnameVerifier and StrictHostnameVerifier should handle + wildcards in SSL certificates better. + Contributed by Sebastian Bazley + +* [HTTPCLIENT-1092] If ClientPNames.VIRTUAL_HOST does not provide the port, derive it from the + current request. + Contributed by Sebastian Bazley + +* [HTTPCLIENT-1087] NTLM proxy authentication fails on retry if the underlying connection is closed + as a result of a target authentication failure. + Contributed by Oleg Kalnichevski + +* [HTTPCLIENT-1079] Fixed Kerberos cross-realm support + Contributed by Michael Osipov <1983-01-06 at gmx.net> + +* [HTTPCLIENT-1078] Decompressing entities (DeflateDecompressingEntity, GzipDecompressingEntity) + do not close content stream in #writeTo() method. + Contributed by Oleg Kalnichevski + +* [HTTPCLIENT-1075] Decompressing entities (DeflateDecompressingEntity, GzipDecompressingEntity) + do not correctly handle content streaming. + Contributed by James Abley + +* [HTTPCLIENT-1051] Avoid reverse DNS lookups when opening SSL connections by IP address. + Contributed by Oleg Kalnichevski + + +Release 4.1.1 +------------------- + +HttpClient v4.1.1 is a bug fix release that addresses a number of issues reported since +release 4.1, including one critical security issue (HTTPCLIENT-1061). All users of HttpClient 4.0.x +and 4.1 are strongly encouraged to upgrade. + +* [HTTPCLIENT-1069] HttpHostConnectException not correctly retried for direct and non-tunnelled + proxy connections. + Contributed by Oleg Kalnichevski + +* [HTTPCLIENT-1066] Changed the way URIUtils#rewriteURI handles multiple consecutive slashes in the + URI path component: multiple leading slashes will be replaced by one slash in order to avoid + confusion with the authority component. The remaining content of the path will not be modified. + (also see HTTPCLIENT-929). + Contributed by Oleg Kalnichevski + +* [HTTPCLIENT-1061] Fixed critical bug causing Proxy-Authorization header to be sent to the target + host when tunneling requests through a proxy server that requires authentication. + Contributed by Oleg Kalnichevski + +* [HTTPCLIENT-1056] Fixed bug causing the RequestAuthCache protocol interceptor to generate + an invalid AuthScope instance when looking up user credentials for preemptive authentication. + Contributed by Oleg Kalnichevski + +* [HTTPCLIENT-1053] Fixed the way DigestScheme generates nonce-count values. + Contributed by Oleg Kalnichevski + + +Release 4.1 +------------------- + +The HttpClient 4.1 release builds upon the stable foundation laid by HttpClient 4.0 and adds several +functional improvements and popular features. + +* Response caching conditionally compliant with HTTP/1.1 specification (full compliance with + MUST requirements, partial compliance with SHOULD requirements) + +* Full support for NTLMv1, NTLMv2, and NTLM2 Session authentication. The NTLM protocol code + was kindly contributed by the Lucene Connector Framework project. + +* Support for SPNEGO/Kerberos authentication. + +* Persistence of authentication data between request executions within the same execution context. + +* Support for preemptive authentication for BASIC and DIGEST schemes. + +* Support for transparent content encoding. Please note transparent content encoding is not + enabled per default in order to avoid conflicts with already existing custom content encoding + solutions. + +* Mechanism to bypass the standard certificate trust verification (useful when dealing with + self-signed certificates). + +* Simplified configuration for connection managers. + +* Transparent support for host multihoming. + +IMPORTANT: please note that the HttpClient 3.x branch is now officially END OF LIFE and is no longer +maintained and supported by the Apache HttpComponents project. + +Changelog +------------------- +* The public API for the caching module had a minor change between 4.1-beta and 4.1-GA to the + HttpCacheEntry class - the deprecated public Set getVariantURIs() method and constructor + public HttpCacheEntry(Date requestDate, Date responseDate, + StatusLine statusLine, Header[] responseHeaders, + Resource resource, Set variants) + were both removed. This will not affect you unless you are implementing new storage backends + that use the deprecated code and/or are implementing custom serializers for cache entries. + +* Changed Browser-Compatibility and Best-Match cookie policies to emulate the behaviour of FireFox + more closely when parsing Netscape style cookies. Comma will no longer be treated as a header + element separator if Set-Cookie does not contain a Version attribute mandated by the + RFC2109 / RFC 2965 cookie specifications. + Contributed by Oleg Kalnichevski + +* [HTTPCLIENT-1036] StringBody has incorrect default for characterset. (Default changed + to US-ASCII) + Contributed by Sebastian Bazley + +* [HTTPCLIENT-975] Support stale-if-error and stale-while-revalidate extension directive (RFC5861). + Contributed by Mohammed Azeem Uddin , + Michajlo Matijkiw , and + Matthew Hawthorne . + +* [HTTPCLIENT-1033] HttpRoute.equals(Object o) is quite inefficient, as it does not take full + advantage of shortcut logic. + Contributed by Sebastian Bazley + +* [HTTPCLIENT-1030] Implement "ignoreCookies" CookieSpec + Contributed by Sebastian Bazley + +Release 4.1 BETA1 +------------------- + +HttpClient 4.1 BETA1 finalizes the 4.1 API and brings a number of major improvements to the HTTP +caching module. This release also adds full support for NTLMv1, NTLMv2, and NTLM2 Session +authentication. The NTLM protocol code was kindly contributed by the Lucene Connector Framework +project. + +Changelog +------------------- +* [HTTPCLIENT-1015] Support only-if-cached directive. + Contributed by Michajlo Matijkiw + +* [HTTPCLIENT-990] Allow heuristic freshness caching. + Contributed by Michajlo Matijkiw + +* [HTTPCLIENT-919] Support for NTLMv1, NTLMv2, and NTLM2 Session authentication. + Contributed by Karl Wright + +* [HTTPCLIENT-1008] Send all variants' ETags on "variant miss". + Contributed by Michajlo Matijkiw and + Mohammed Azeem Uddin + +* [HTTPCLIENT-1011] Handling of IOExceptions thrown by cache components. + Contributed by Jonathan Moore + +* [HTTPCLIENT-1003] Handle conditional requests in cache. + Contributed by Michajlo Matijkiw and + Mohammed Azeem Uddin + +* [HTTPCLIENT-1002] Stale connection check fails if wire logging is on. + Contributed by Oleg Kalnichevski + +* [HTTPCLIENT-1000] Maximum connection lifetimes settings for ThreadSafeClientConnManager. + Contributed by Michajlo Matijkiw + +* [HTTPCLIENT-960] HttpMultipart doesn't generate Content-Type header for binary parts in + BROWSER_COMPATIBLE mode. + Contributed by Oleg Kalnichevski + +* [HTTPCLIENT-998] Cache should use both Last-Modified and ETag for validations when available. + Contributed by Jonathan Moore + +* [HTTPCLIENT-997] Cache module should handle out-of-order validations properly and unconditionally + refresh. + Contributed by Jonathan Moore + +* [HTTPCLIENT-994] Cache does not allow client to override origin-specified freshness using + max-stale. + Contributed by Jonathan Moore + +* [HTTPCLIENT-995] Cache returns cached responses even if validators not consistent with all + conditional headers. + Contributed by Jonathan Moore + +* [HTTPCLIENT-977] Memcached implementation for HttpCache. + Contributed by Mohammed Azeem Uddin + +* [HTTPCLIENT-992] cache should not generate stale responses to requests explicitly requesting + first-hand or fresh ones. + Contributed by Jonathan Moore + +* [HTTPCLIENT-991] cache module produces improperly formatted Warning header when revalidation + fails. + Contributed by Jonathan Moore + +* [HTTPCLIENT-989] DefaultHttpRequestRetryHandler no longer retries non-idempotent http methods + if NoHttpResponseException is thrown. + Contributed by Oleg Kalnichevski + +* [HTTPCLIENT-988] Cache module should strip 'Content-Encoding: identity' from responses + Contributed by Jonathan Moore + +* [HTTPCLIENT-987] cache module does not recognize equivalent URIs. + Contributed by Jonathan Moore + +* [HTTPCLIENT-986] cache module does not completely handle upstream Warning headers correctly + Contributed by Jonathan Moore + +* [HTTPCLIENT-985] cache module should populate Via header to capture upstream and downstream protocols + Contributed by Jonathan Moore + +* [HTTPCLIENT-984] Additional conditional compliance tests for the caching module for + Content-Encoding, Content-Location, Date, Expires, Server, Transfer-Encoding, and Vary headers. + Contributed by Jonathan Moore + +* [HTTPCLIENT-978] HTTP cache update exception handling + Contributed by Michajlo Matijkiw + +* [HTTPCLIENT-981] CachingHttpClient returns a 411 respones when executing a POST (HttpPost) + request. + Contributed by Joe Campbell + +* [HTTPCLIENT-980] CachingHttpClient returns a 503 response when the backend HttpClient produces + an IOException. + Contributed by Jonathan Moore + +* [HTTPCLIENT-978] Ehcache based HTTP cache implementation + Contributed by Michajlo Matijkiw + +* [HTTPCLIENT-967] support for non-shared (private) caches + Contributed by Jonathan Moore + +* [HTTPCLIENT-969] BasicCookieStore#getCookies() to return a copy of Cookie list + Contributed by David Smiley + +* [HTTPCLIENT-965] Fixed problem with cache not honoring must-revalidate or + proxy-revalidate Cache-Control directives. + Contributed by Jonathan Moore + +* [HTTPCLIENT-964] 'no-cache' directives with field names are no longer transmitted + downstream. + Contributed by Jonathan Moore + +* [HTTPCLIENT-963] Fixed handling of 'Cache-Control: no-store' on requests. + Contributed by Jonathan Moore + +* [HTTPCLIENT-962] Fixed handling of Authorization headers in shared cache mode. + Contributed by Jonathan Moore + +* [HTTPCLIENT-961] Not all applicable URIs are invalidated on PUT/POST/DELETEs + that pass through client cache. + Contributed by Jonathan Moore + +* [HTTPCLIENT-958] Client cache no longer allows incomplete responses to be + passed on to the client. + Contributed by Jonathan Moore + +* [HTTPCLIENT-951] Non-repeatable entity enclosing requests are not correctly + retried when 'expect-continue' handshake is active. + Contributed by Oleg Kalnichevski + +* [HTTPCLIENT-948] In rare circumstances the idle connection handling code + can leave closed connections in a inconsistent state. + Contributed by Oleg Kalnichevski + +* [HTTPCLIENT-953] IllegalStateException thrown by RouteSpecificPool. + Contributed by Guillaume + +* [HTTPCLIENT-952] Trust store parameter is ignored by SSLSocketFactory + (affects version 4.1-alpha2 only) + Contributed by Oleg Kalnichevski + +* [HTTPCLIENT-937] CacheEntry made immutable; now uses immutable HttpEntity + to store cached content. + Contributed by David Mays and + Oleg Kalnichevski + +Release 4.1 ALPHA2 +------------------- + +HttpClient 4.1 ALPHA2 fixes a number of non-severe bugs discovered since +the last release and introduces support for two frequently requested features: + +* HTTP/1.1 response caching + +* transparent support for host multihoming + +* a mechanism to bypass the standard certificate trust verification +(useful when dealing with self-signed certificates) + +Compatibility notes +------------------- +(1) Please note the HTTP caching module is still considered experimental and +its API may change significantly in the future releases. + +(2) This release eliminates Mime4J as a dependency for the HttpMime module. +HttpMime is no longer binary compatible with the previous releases. +Full API and binary compatibility between minor versions of HttpMime will be +maintained as of 4.1 GA release. + +Changelog +------------------- + +* [HTTPCLIENT-936] Fixed bug causing NPE or an infinite loop in + the authentication code in case of a SPNEGO authentication failure. + Contributed by Oleg Kalnichevski + +* [HTTPCLIENT-427] HTTP caching support + Contributed by Joe Campbell, David Cleaver, David Mays, Jon Moore, Brad Spenla + +* Dropped dependency on Mime4j for HttpMime. + Contributed by Oleg Kalnichevski + +* Extended SSLSocketFactory with a mechanism to bypass the standard certificate + trust verification (primarily to simplify dealing with self-signed + certificates) + Contributed by Oleg Kalnichevski + +* [HTTPCLIENT-898] Improved support for host multihoming + Contributed by Oleg Kalnichevski + +* [HTTPCLIENT-916] UsernamePasswordCredentials, NTUserPrincipal, + BasicClientCookie, BasicClientCookie2 and BasicCookieStore made Serializable. + Contributed by Oleg Kalnichevski + +* [HTTPCLIENT-914] Upgraded Commons Codec dependency to version 1.4 + Contributed by Oleg Kalnichevski + +* [HTTPCLIENT-903] Use ConcurrentHashMap instead of [Linked]HashMap for + thread-safety. Improve performance of AuthSchemeRegistry, CookieSpecRegistry + and SchemeRegistry classes. + Contributed by Sebastian Bazley + +* [HTTPCLIENT-902] HttpRequestRetryHandler not called on I/O exceptions + thrown when opening a new connection. + Contributed by Olivier Lamy and + Oleg Kalnichevski + +Release 4.1 ALPHA1 +------------------- + +HttpClient 4.1 ALPHA1 builds on the stable 4.0 release and adds several +functionality improvements and new features. + +* Simplified configuration of connection managers. + +* Persistence of authentication data between request executions within + the same execution context. + +* Support for SPNEGO/Kerberos authentication scheme + +* Support for transparent content encoding. Please note transparent content + encoding is not enabled per default in order to avoid conflicts with + already existing custom content encoding solutions. + +* 5 to 10% performance increase due to elimination of unnecessary Log object + lookups by short-lived components. + +Please note all methods and classes added in this release and marked as +4.1 are API unstable and can change in the future 4.1 ALPHA releases. + +Changelog +------------------- + +* [HTTPCLIENT-889] 'expect: continue' handshake disabled per default. + Contributed by Oleg Kalnichevski + +* [HTTPCLIENT-862] Extended client's redirect handling interface to allow + control of the content of the redirect. + Contributed by Oleg Kalnichevski + +* [HTTPCLIENT-872] HttpClient can now persist authentication data between request + executions as long as they share the same execution context. It has also become + much easier to make HttpClient authenticate preemptively by pre-populating + authentication data cache. + Contributed by Oleg Kalnichevski + +* [HTTPCLIENT-883] SO_TIMEOUT is not reset on persistent (re-used) connections. + Contributed by Oleg Kalnichevski + +* [HTTPCLIENT-832] Distinguish cookie format errors from violations of + restrictions imposed by a cookie specification. In the latter case + CookieRestrictionViolationException will be thrown. + Contributed by Oleg Kalnichevski + +* [HTTPCLIENT-523] Support for SPNEGO authentication scheme. + Contributed by Matthew Stevenson + +* Simplified configuration of connection managers. Total connection maximum + and maximum connection per route limits can be set using methods of + the class instead of HTTP parameters. + Contributed by Oleg Kalnichevski + +* Added parameters to define the order of preference for supported auth + schemes for target host and proxy authentication. + Contributed by Oleg Kalnichevski + +* [HTTPCLIENT-875] DefaultClientConnectionOperator#openConnection doesn't + update the connection state if the connection socket changed after + the call to SocketFactory#connectSocket(). + Contributed by Oleg Kalnichevski + +* [HTTPCLIENT-834] Transparent content encoding support. + Contributed by James Abley + +Release 4.0.1 +------------------- + +This is a bug fix release that addresses a number of issues discovered since +the previous stable release. None of the fixed bugs is considered critical. +Most notably this release eliminates eliminates dependency on JCIP annotations. + +This release is also expected to improve performance by 5 to 10% due to +elimination of unnecessary Log object lookups by short-lived components. + +Changelog +------------------- + +* [HTTPCLIENT-895] Eliminated Log lookups in short lived objects impairing + performance. + Contributed by Oleg Kalnichevski + +* [HTTPCLIENT-885] URLEncodedUtils now correctly parses form-url-encoded + entities that specify a charset. + Contributed by Oleg Kalnichevski + +* [HTTPCLIENT-884] UrlEncodedFormEntity now sets charset on the Content-Type + header. + Contributed by Jared Jacobs + +* [HTTPCLIENT-883] SO_TIMEOUT is not reset on persistent (re-used) connections. + Contributed by Oleg Kalnichevski + +* [HTTPCLIENT-882] Auth state is now correctly updated if a successful NTLM + authentication results in a redirect. This is a minor bug as HttpClient + manages to recover from the problem automatically. + Contributed by Oleg Kalnichevski + +* [HTTPCLIENT-881] Fixed race condition in AbstractClientConnAdapter that makes + it possible for an aborted connection to be returned to the pool. + Contributed by Tim Boemker and + Oleg Kalnichevski + +* [HTTPCLIENT-866] Removed dependency on jcip-annotations.jar. + Contributed by Oleg Kalnichevski + and Sebastian Bazley + + +Release 4.0 +------------------- + +HttpClient 4.0 represents a complete, ground-up redesign and almost a complete +rewrite of the HttpClient 3.x codeline. This release finally addresses several +design flaws that existed since the 1.0 release and could not be fixed without +a major code overhaul and breaking API compatibility. + + +Architectural changes +--------------------- + +* Redesign of the HttpClient internals addressing all known major + architectural shortcomings of the 3.x codeline. + +* Cleaner, more flexible and expressive API. + +* More modular structure. + +* Better performance and smaller memory footprint due to a more efficient HTTP + transport based on HttpCore. + +* Implementation of cross-cutting HTTP protocol aspects through protocol + interceptors. + +* Improved connection management, better handling of persistent connections, + support for stateful connections + +* Pluggable redirect and authentication handlers. + +* Improved support for sending requests via a proxy or a chain of proxies + +* More flexible SSL context customization + +* Reduced intermediate garbage in the process of generating HTTP requests + and parsing HTTP responses + + +Important notes +------------------- + +* Future releases of HttpMime module may be binary incompatible with this + release due to possible API changes in Apache Mime4J. Apache Mime4J is + still being actively developed and its API is considered unstable. + +* HttpClient 4.0 is not fully binary compatible with 4.0 BETA1 release. + Some protected variables in connection management class have been + made final in order to help ensure their thread safety: + + org.apache.http.conn.BasicEofSensorWatcher#attemptReuse + org.apache.http.conn.BasicEofSensorWatcher#managedConn + org.apache.http.impl.conn.DefaultClientConnectionOperator#schemeRegistry + org.apache.http.impl.conn.DefaultHttpRoutePlanner#schemeRegistry + org.apache.http.impl.conn.ProxySelectorRoutePlanner#schemeRegistry + org.apache.http.impl.conn.SingleClientConnManager#alwaysShutDown + org.apache.http.impl.conn.SingleClientConnManager#connOperator + org.apache.http.impl.conn.SingleClientConnManager#schemeRegistry + org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager#connOperator + org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager#schemeRegistry + + +Bug fixes since 4.0 BETA2 release +------------------- + +* [HTTPCLIENT-861] URIUtils#resolve is now compatible with all examples given + in RFC 3986. + Contributed by Johannes Koch + +* [HTTPCLIENT-860] HttpClient no longer converts redirects of PUT/POST to GET + for status codes 301, 302, 307, as required by the HTTP spec. + Contributed by Oleg Kalnichevski + +* [HTTPCLIENT-859] CookieIdentityComparator now takes path attribute into + consideration when comparing cookies. + Contributed by Oleg Kalnichevski + +* HttpClient will no longer send expired cookies back to the origin server. + Contributed by Oleg Kalnichevski + +* [HTTPCLIENT-856] Proxy NTLM authentication no longer fails on a redirect to + a different host. + Contributed by Oleg Kalnichevski + +* [HTTPCLIENT-841] Removed automatic connection release using garbage collection + due to a memory leak. + Contributed by Oleg Kalnichevski + +* [HTTPCLIENT-853] Fixed bug causing invalid cookie origin port to be selected + when the target is accessed on the default port and the connection is + established via a proxy. + Contributed by Oleg Kalnichevski + +* [HTTPCLIENT-852] Fixed bug causing automatically retried redirects fail with + CircularRedirectException. + Contributed by Oleg Kalnichevski + +* Fixed problem with the default HTTP response parser failing to handle garbage + preceding a valid HTTP response. + Contributed by Oleg Kalnichevski + +* NonRepeatableRequestExceptions now include the cause that the original + request failed. + Contributed by Sam Berlin + +* [HTTPCLIENT-837] Fixed problem with the wire log skipping zero byte values + if read one byte at a time. + Contributed by Kirill Safonov + +* [HTTPCLIENT-823] 'http.conn-manager.max-total' parameter can be adjusted + dynamically. However, the size of existing connection pools per route, + once allocated, will not be adjusted. + Contributed by Oleg Kalnichevski + +* [HTTPCLIENT-822] Default socket factories to rethrow SocketTimeoutException + as ConnectTimeoutException in case of connect failure due to a time out. + Contributed by Oleg Kalnichevski + +* [HTTPCLIENT-813] Fixed default port resolution. Invalid ports no longer + get replaced with the default port value. + Contributed by Oleg Kalnichevski + +Release 4.0 beta 2 +------------------- + +BETA2 is a maintenance release, which addresses a number of issues +discovered since the previous release. + +The only significant new feature is an addition of an OSGi compliant +bundle combining HttpClient and HttpMime jars. + +All upstream projects are strongly encouraged to upgrade. + +* Fixed NPE in DefaultRequestDirector thrown when retrying a failed + request over a proxied connection. + Contributed by Oleg Kalnichevski + +* [HTTPCLIENT-803] Fixed bug in SSL host verifier implementations + causing the SSL certificate to be rejected as invalid if the connection + is established using an IP address. + Contributed by Oleg Kalnichevski + +* [HTTPCLIENT-806] DefaultHttpMethodRetryHandler will no longer retry + on ConnectExceptions. + Contributed by Oleg Kalnichevski + +* DigestScheme can use an arbitrary digest algorithm requested by the + target server (such as SHA) as long as this algorithm is supported by + the Java runtime. + Contributed by Oleg Kalnichevski + +* Fixed parsing and validation of RFC2109 compliant Set-Cookie headers + by the Best-Match cookie spec. + Contributed by Oleg Kalnichevski + +* Fixed bug that can cause a managed connection to be returned from the + pool in an inconsistent state. + Contributed by Oleg Kalnichevski + + +4.0 Beta 1 +------------------- + +BETA1 release brings yet another round of API enhancements and +improvements in the area of connection management. Among the most notable +ones is the capability to handle stateful connections such as persistent +NTLM connections and private key authenticated SSL connections. + +This is the first API stable release of HttpClient 4.0. All further +releases in the 4.0 code line will maintain API compatibility with this +release. + +There has been a number of important bug fixes since ALPHA4. All upstream +projects are encouraged to upgrade to the latest release. + +Please note HttpClient currently provides only limited support for NTLM +authentication. For details please see NTLM_SUPPORT.txt. + +------------------- + +Changelog: +------------------- + +* [HTTPCLIENT-790] Protocol interceptors are now correctly invoked when + executing CONNECT methods. + Contributed by Oleg Kalnichevski + +* [HTTPCLIENT-668] Do not use static loggers. + Contributed by Oleg Kalnichevski + +* [HTTPCLIENT-781] Respect Keep-Alive header's timeout value. + Contributed by Sam Berlin + +* [HTTPCLIENT-779] Top-level classes (HttpClient, and HttpGet, HttpPut + and similar HttpMethods) throw fewer checked exceptions. + Contributed by Sam Berlin + +* HttpClient will throw an exception if an attempt is made to retry + a request with a non-repeatable request entity. + Contributed by Oleg Kalnichevski + +* Fixed request re-generation logic when retrying a failed request. + Auto-generated headers will no accumulate. + Contributed by Oleg Kalnichevski + +* [HTTPCLIENT-424] Preemptive authentication no longer limited to BASIC + scheme only. HttpClient can be customized to authenticate preemptively + with DIGEST scheme. + Contributed by Oleg Kalnichevski + +* [HTTPCLIENT-670] Pluggable hostname resolver. + Contributed by Oleg Kalnichevski + +* [HTTPCLIENT-719] Clone support for HTTP request and cookie objects. + Contributed by Oleg Kalnichevski + +* [HTTPCLIENT-776] Fixed concurrency issues with AbstractPoolEntry. + Contributed by Sam Berlin + +* Resolved a long standing problem with HttpClient not taking into account + the user context when pooling / re-using connections. HttpClient now + correctly handles stateful / user specific connections such as persistent + NTLM connections and SSL connections with client side authentication. + Contributed by Oleg Kalnichevski + +* [HTTPCLIENT-773] Improved handling of the 'expires' attribute by the + 'Best Match' cookie spec. + Contributed by Oleg Kalnichevski + +* Partial NTLM support (requires an external NTLM engine). For details see + NTLM_SUPPORT.txt + Contributed by Oleg Kalnichevski + +* Redesigned local execution context management. + Contributed by Oleg Kalnichevski + +-------------------------------------- + +Release 4.0 Alpha 4 +------------------- + +ALPHA4 marks the completion of the overhaul of the connection management +code in HttpClient. All known shortcomings of the old HttpClient 3.x +connection management API have been addressed. + +NTLM authentication remains the only missing major feature in the new +codeline that prevents us from moving awards the API freeze. + +There has been a number of important bug fixes since ALPHA3. All upstream +projects are encouraged to upgrade to the latest release. + +------------------- + +HttpClient 3.x features that have NOT yet been ported: +------------------- + +* NTLM authentication scheme + +------------------- + +Changelog: +------------------- + +* [HTTPCLIENT-765] String.toLowerCase() / toUpperCase() should specify + Locale.ENGLISH + Contributed by Sebastian Bazley + +* [HTTPCLIENT-769] Do not pool connection marked non-reusable. + Contributed by Oleg Kalnichevski + +* [HTTPCLIENT-763] Fixed problem with AbstractClientConnAdapter#abortConnection() + not releasing the connection if called from the main execution thread while + there is no blocking I/O operation. + Contributed by Oleg Kalnichevski + +* [HTTPCLIENT-652] Added optional state attribute to managed client connections. + This enables connection managers to correctly handle stateful connections. + Contributed by Oleg Kalnichevski + +* [HTTPCLIENT-673] Revised max connections per route configuration + Contributed by Oleg Kalnichevski + +* [HTTPCLIENT-753] Class Scheme and related classes moved to a separate package + Contributed by Oleg Kalnichevski + +* [HTTPCLIENT-757] Improved request wrapping in the DefaultClientRequestDirector. + This also fixed the problem with the default proxy set at the client level + having no effect. + Contributed by Oleg Kalnichevski + +* [HTTPCLIENT-734] Request abort will unblock the thread waiting for a connection + Contributed by Sam Berlin + +* [HTTPCLIENT-759] Ensure release of connections back to the connection manager + on exceptions. + Contributed by Sam Berlin + +* [HTTPCLIENT-758] Fixed the use of generics in AbstractHttpClient + #removeRequestInterceptorByClass and #removeResponseInterceptorByClass + Contributed by Johannes Koch + +* [HTTPCLIENT-749] HttpParams beans + Contributed by Stojce Dimski + +* [HTTPCLIENT-755] Workaround for known bugs in java.net.URI.resolve() + Bug ID: 4708535 + Contributed by Johannes Koch + +-------------------------------------- + +Release 4.0 Alpha 3 +------------------- + +ALPHA3 release brings another round of API refinements and improvements in +functionality. As of this release HttpClient requires Java 5 compatible +runtime environment and takes full advantage of generics and new concurrency +primitives. + +This release also introduces new default cookie policy that selects a cookie +specification depending on the format of cookies sent by the target host. +It is no longer necessary to know beforehand what kind of HTTP cookie support +the target host provides. HttpClient is now able to pick up either a lenient +or a strict cookie policy depending on the compliance level of the target host. + +Another notable improvement is a completely reworked support for multipart +entities based on Apache mime4j library. + +------------------- + +HttpClient 3.x features that have NOT yet been ported: +------------------- + +* NTLM authentication scheme + +------------------- + +Changelog: +------------------- + +* [HTTPCLIENT-742] common interface for HttpRoute and RouteTracker + Contributed by Roland Weber + +* [HTTPCLIENT-741] Fixed concurrency issues in AbstractClientConnAdapter. + Contributed by Oleg Kalnichevski + +* [HTTPCLIENT-726] testcase for spurious wakeups in ThreadSafeClientConnManager + Contributed by Roland Weber + +* [HTTPCLIENT-643] Automatic connect fail-over for multi-home remote servers. + Contributed by Oleg Kalnichevski + +* [HTTPCLIENT-735] unsetting of DEFAULT_PROXY and FORCED_ROUTE in hierarchies + Contributed by Roland Weber + +* [HTTPCLIENT-723] route planner based on java.net.ProxySelector + Contributed by Roland Weber + +* [HTTPCLIENT-740] don't start connection GC thread in pool constructor + Contributed by Roland Weber + +* [HTTPCLIENT-736] route planners use SchemeRegistry instead of ConnManager + Contributed by Roland Weber + +* [HTTPCLIENT-730] Fixed rewriting of URIs containing escaped characters + Contributed by Sam Berlin and + Oleg Kalnichevski + +* [HTTPCLIENT-667] Added 'Meta' cookie policy that selects a cookie + specification depending on the format of the cookie(s). + Contributed by Oleg Kalnichevski + +* [HTTPCLIENT-729] Move HttpRoute and related classes to routing package. + Contributed by Roland Weber + +* [HTTPCLIENT-725] Use TimeUnit arguments for timeouts in connection manager. + Contributed by Roland Weber + +* [HTTPCLIENT-677] Connection manager no longer uses Thread.interrupt(). + Contributed by Roland Weber + +* [HTTPCLIENT-716] Allow application-defined routes. + Contributed by Roland Weber + +* [HTTPCLIENT-712] Improve HttpRoute API + Contributed by Roland Weber + +* [HTTPCLIENT-711] Bad route computed for redirected requests + Contributed by Oleg Kalnichevski + +* [HTTPCLIENT-715] Remove RoutedRequest from API + Contributed by Roland Weber + +* [HTTPCLIENT-705] Fixed incorrect handling of URIs with null path component. + Contributed by Oleg Kalnichevski + +* [HTTPCLIENT-688] HttpOptions#getAllowedMethods can now handle multiple + Allow headers. + Contributed by Andrea Selva + +-------------------------------------- + +Release 4.0 Alpha 2 +------------------- + +ALPHA2 release is another milestone in the redesign of HttpClient. It includes +a number of improvements since ALPHA1, among which are improved connection +pooling, support for proxy chains, redesigned HTTP state and authentication +credentials management API, improved RFC 2965 cookie specification. + +------------------- + +HttpClient 3.x features that have NOT yet been ported +------------------- +* NTLM authentication scheme + +* Support for multipart MIME coded entities + +------------------- + +Changelog +------------------- + +* [HTTPCLIENT-698] Resolve non-absolute redirect URIs relative to + the request URI + Contributed by Johannes Koch + +* [HTTPCLIENT-697] Throw a more intelligible exception when connection + to a remote host cannot be established. + Contributed by Oleg Kalnichevski + +* [HTTPCLIENT-689] Caching of SimpleDateFormat in DateUtils + Contributed by Daniel Müller + +* [HTTPCLIENT-689] stackable parameters in AbstractHttpClient + Contributed by Roland Weber + +* [HTTPCLIENT-477] Use distinct instances of the authentication handler + interface for authentication with target and proxy hosts + Contributed by Oleg Kalnichevski + +* [HTTPCLIENT-690] ManagedClientConnection provides access to SSLSession + Contributed by Roland Weber + +* [HTTPCLIENT-692] ClientConnectionManager throws InterruptedException + Contributed by Roland Weber + +* [HTTPCORE-116] moved parameter names to interfaces + Contributed by Roland Weber + +* [HTTPCLIENT-649] support for proxy chains in HttpConn + Contributed by Roland Weber + +* [HTTPCLIENT-636] refactor ThreadSafeClientConnManager in separate package + Contributed by Roland Weber + +* [HTTPCLIENT-669] new HttpRoutePlanner interface and implementation + Contributed by Andrea Selva + +* [HTTPCLIENT-653] detached connection wrapper no longer prevents + garbage collection of ThreadSafeClientConnManager + Contributed by Roland Weber + +* [HTTPCLIENT-674] use org.apache.http.util.VersionInfo instead of a local one + Contributed by Roland Weber + +* [HTTPCLIENT-666] Replaced HttpState with CredentialsProvier and CookieStore interfaces + Contributed by Oleg Kalnichevski + +* [HTTPCORE-100] revised HttpContext hierarchy + Contributed by Roland Weber + +* [HTTPCLIENT-618] eliminate class HostConfiguration + Contributed by Roland Weber + +* [HTTPCLIENT-672] re-sync with API changes in core alpha6-SNAPSHOT + Contributed by Roland Weber + +-------------------------------------- + +Release 4.0 Alpha 1 +------------------- + +HttpClient 4.0 represents a complete, ground-up redesign and almost a complete +rewrite of the HttpClient 3.x codeline. This release finally addresses several +design flaws that existed since the 1.0 release and could not be fixed without +a major code overhaul and breaking API compatibility. + +The HttpClient 4.0 API is still very experimental and is bound to change +during the course of the ALPHA development phase. Several important features +have not yet been ported to the new API. + +Architectural changes +--------------------- + +* Redesign of the HttpClient internals addressing all known + major architectural shortcomings of the 3.x codeline + +* Cleaner, more flexible and expressive API + +* Better performance and smaller memory footprint due to a more + efficient HTTP transport based on HttpCore. HttpClient 4.0 is + expected to be 10% to 25% faster than HttpClient 3.x codeline + +* More modular structure + +* Pluggable redirect and authentication handlers + +* Support for protocol incerceptors + +* Improved connection management + +* Improved support for sending requests via a proxy or a chain of + proxies + +* Improved handling redirects of entity enclosing requests + +* More flexible SSL context customization + +* Reduced intermediate garbage in the process of + generating HTTP requests and parsing HTTP responses + +------------------- + +HttpClient 3.x features that have NOT yet been ported +------------------- +* NTLM authentication scheme + +* RFC2965 cookie policy (Cookie2) + +* Support for multipart MIME coded entities + +------------------- + +Changelog +------------------- + +The following is a list of contributions tracked in JIRA. +Note that this is not a complete list of contributions or changes. +Since the API was redesigned completely, tracking everything outside +of the source code repository would have been too burdensome. + +* [HTTPCLIENT-655] User-Agent string no longer violates RFC + Contributed by Oleg Kalnichevski + +* [HTTPCLIENT-541] Virtual host API redesign + Contributed by Oleg Kalnichevski + +* [HTTPCLIENT-614] Allow for different strategies when checking + CN of x509 certificates + Contributed by Julius Davies + +* [HTTPCLIENT-136] Fixed inadequate proxy support + Long standing architectural problem. Issue opened on 19/Dec/2002. + Contributed by Oleg Kalnichevski + +* [HTTPCLIENT-63] Support for pluggable redirect and authentication handlers + Long standing architectural problem. Issue opened on 15/Jul/2002. + Contributed by Oleg Kalnichevski + +* [HTTPCLIENT-245] Fixed redirect handling. HttpClient can now automatically + handle redirects of entity enclosing requests. + Long standing architectural problem. Issue opened on 14/Jul/2003. + Contributed by Oleg Kalnichevski + +* [HTTPCLIENT-613] HTTPS connections now verify CN of x509 certificates + Contributed by Julius Davies + +* [HTTPCLIENT-497] Wire/header logger names consistent with class loggers + Contributed by Oleg Kalnichevski + +* [HTTPCLIENT-484] AuthSSLProtocolSocketFactory in the main distribution + Contributed by Oleg Kalnichevski + +* [HTTPCLIENT-589] Do not consume the remaining response content if + the connection is to be closed + Contributed by Roland Weber + +* [HTTPCLIENT-475] Support for unconnected sockets. HTTP requests can now be + aborted while network socket is still being connected. + Contributed by Roland Weber + diff --git a/src/uk/co/majenko/audiobookrecorder/AudiobookRecorder.java b/src/uk/co/majenko/audiobookrecorder/AudiobookRecorder.java index df3ac5f..76a050f 100644 --- a/src/uk/co/majenko/audiobookrecorder/AudiobookRecorder.java +++ b/src/uk/co/majenko/audiobookrecorder/AudiobookRecorder.java @@ -13,9 +13,6 @@ import java.util.prefs.*; import java.io.*; import it.sauronsoftware.jave.*; import com.mpatric.mp3agic.*; -import edu.cmu.sphinx.api.*; -import edu.cmu.sphinx.decoder.adaptation.*; -import edu.cmu.sphinx.result.*; import java.nio.file.Files; import java.util.zip.*; import javax.swing.filechooser.*; @@ -90,30 +87,19 @@ public class AudiobookRecorder extends JFrame { SourceDataLine play = null; + public HavenQueue havenQueue = new HavenQueue(); + + public TargetDataLine microphone = null; public AudioInputStream microphoneStream = null; - public Configuration sphinxConfig; - public StreamSpeechRecognizer recognizer; - public static AudiobookRecorder window; - void initSphinx() { - sphinxConfig = new Configuration(); - - sphinxConfig.setAcousticModelPath("resource:/edu/cmu/sphinx/models/en-us/en-us"); - sphinxConfig.setDictionaryPath("resource:/edu/cmu/sphinx/models/en-us/cmudict-en-us.dict"); - sphinxConfig.setLanguageModelPath("resource:/edu/cmu/sphinx/models/en-us/en-us.lm.bin"); - - try { - recognizer = new StreamSpeechRecognizer(sphinxConfig); - } catch (Exception e) { - e.printStackTrace(); - } - } - void buildToolbar(Container ob) { toolBar = new MainToolBar(this); + toolBar.addSeparator(); + toolBar.add(Box.createHorizontalGlue()); + toolBar.add(havenQueue); ob.add(toolBar, BorderLayout.NORTH); } @@ -715,41 +701,6 @@ public class AudiobookRecorder extends JFrame { } } - class BatchConversionThread implements Runnable { - Chapter chapter; - - public BatchConversionThread(Chapter c) { - chapter = c; - } - public void run() { - try { - Configuration sphinxConfig = new Configuration(); - - sphinxConfig.setAcousticModelPath("resource:/edu/cmu/sphinx/models/en-us/en-us"); - sphinxConfig.setDictionaryPath("resource:/edu/cmu/sphinx/models/en-us/cmudict-en-us.dict"); - sphinxConfig.setLanguageModelPath("resource:/edu/cmu/sphinx/models/en-us/en-us.lm.bin"); - - sphinxConfig.setSampleRate((int)(book.getAudioFormat().getSampleRate() / 4f)); - - StreamSpeechRecognizer recognizer; - - recognizer = new StreamSpeechRecognizer(sphinxConfig); - - - for (Enumeration s = chapter.children(); s.hasMoreElements();) { - Sentence snt = (Sentence)s.nextElement(); - if (!snt.isLocked()) { - if (snt.getId().equals(snt.getText())) { - snt.doRecognition(recognizer); - } - } - } - } catch (Exception e) { - e.printStackTrace(); - } - } - } - @SuppressWarnings("unchecked") void treePopup(MouseEvent e) { @@ -771,7 +722,7 @@ public class AudiobookRecorder extends JFrame { JMenuObject o = (JMenuObject)e.getSource(); Sentence s = (Sentence)o.getObject(); if (!s.isLocked()) { - s.recognise(); + havenQueue.submit(s); } } }); @@ -1031,9 +982,12 @@ public class AudiobookRecorder extends JFrame { public void actionPerformed(ActionEvent e) { JMenuObject o = (JMenuObject)e.getSource(); Chapter c = (Chapter)o.getObject(); - BatchConversionThread r = new BatchConversionThread(c); - Thread t = new Thread(r); - t.start(); + for (Enumeration s = c.children(); s.hasMoreElements();) { + Sentence snt = (Sentence)s.nextElement(); + if (snt.getId().equals(snt.getText())) { + havenQueue.submit(snt); + } + } } }); diff --git a/src/uk/co/majenko/audiobookrecorder/BookTreeRenderer.java b/src/uk/co/majenko/audiobookrecorder/BookTreeRenderer.java index d5ba70a..f061202 100644 --- a/src/uk/co/majenko/audiobookrecorder/BookTreeRenderer.java +++ b/src/uk/co/majenko/audiobookrecorder/BookTreeRenderer.java @@ -11,6 +11,10 @@ public class BookTreeRenderer extends DefaultTreeCellRenderer { if (value instanceof Sentence) { Sentence s = (Sentence)value; + if (s.getOverrideText() != null) { + ret.setText(s.getOverrideText()); + } + if (s.getAttentionFlag()) { ret.setForeground(new Color(0xFF, 0xFF, 0x00)); ret.setIcon(Icons.attention); diff --git a/src/uk/co/majenko/audiobookrecorder/HavenQueue.java b/src/uk/co/majenko/audiobookrecorder/HavenQueue.java new file mode 100644 index 0000000..1ff0d04 --- /dev/null +++ b/src/uk/co/majenko/audiobookrecorder/HavenQueue.java @@ -0,0 +1,83 @@ +package uk.co.majenko.audiobookrecorder; + +import java.util.*; +import java.util.concurrent.*; +import javax.swing.*; +import java.awt.*; +import java.util.Timer; + +public class HavenQueue extends JPanel { + ConcurrentLinkedQueue sentenceList = new ConcurrentLinkedQueue(); + + Timer timer = new Timer(); + + Sentence currentSentence = null; + + JLabel count; + + public HavenQueue() { + timer.schedule(new TimerTask() { public void run() { processQueue(); }}, 30000); + count = new JLabel("Haven queue: 0"); + setLayout(new BorderLayout()); + add(count, BorderLayout.CENTER); + + count.setOpaque(false); + setOpaque(false); + count.setForeground(Color.WHITE); + } + + public void processQueue() { + + count.setText("Haven queue: " + sentenceList.size()); + + if (currentSentence == null) { + // Grab a new sentence to process. + currentSentence = sentenceList.poll(); + + if (currentSentence != null) { + if (!currentSentence.postHavenData()) { // Failed. Add to the end of the queue and wait a bit + submit(currentSentence); + currentSentence = null; + timer.schedule(new TimerTask() { public void run() { processQueue(); }}, 30000); + return; + } + timer.schedule(new TimerTask() { public void run() { processQueue(); }}, 5000); + return; + } + + timer.schedule(new TimerTask() { public void run() { processQueue(); }}, 5000); + return; + } + + if (currentSentence != null) { + currentSentence.processPendingHaven(); + int status = currentSentence.getHavenStatus(); + switch (status) { + case 0: // Um... not running...? + currentSentence = null; + timer.schedule(new TimerTask() { public void run() { processQueue(); }}, 30000); + return; + case 1: // Still processing... + timer.schedule(new TimerTask() { public void run() { processQueue(); }}, 5000); + return; + case 2: // Finished + currentSentence = null; + timer.schedule(new TimerTask() { public void run() { processQueue(); }}, 30000); + return; + case 3: // Failed + currentSentence = null; + timer.schedule(new TimerTask() { public void run() { processQueue(); }}, 30000); + return; + } + } + + timer.schedule(new TimerTask() { public void run() { processQueue(); }}, 30000); + } + + public void submit(Sentence s) { + s.setOverrideText("[queued...]"); + AudiobookRecorder.window.bookTreeModel.reload(s); + sentenceList.add(s); + count.setText("Haven queue: " + sentenceList.size()); + } +} diff --git a/src/uk/co/majenko/audiobookrecorder/Options.java b/src/uk/co/majenko/audiobookrecorder/Options.java index d747753..7636008 100644 --- a/src/uk/co/majenko/audiobookrecorder/Options.java +++ b/src/uk/co/majenko/audiobookrecorder/Options.java @@ -34,6 +34,8 @@ public class Options extends JDialog { JCheckBox enableParsing; JSpinner cacheSize; + JTextField havenApiKey; + Equaliser equaliser; JTextArea startupScript; @@ -98,6 +100,27 @@ public class Options extends JDialog { return o; } + JTextField addTextField(JPanel panel, String label, String def) { + JLabel l = new JLabel(label); + constraint.gridx = 0; + constraint.gridwidth = 1; + constraint.gridheight = 1; + constraint.anchor = GridBagConstraints.LINE_START; + panel.add(l, constraint); + + JTextField a = new JTextField(def); + constraint.gridx = 1; + + constraint.fill = GridBagConstraints.HORIZONTAL; + panel.add(a, constraint); + + constraint.fill = GridBagConstraints.NONE; + + constraint.gridy++; + return a; + } + + JTextField addFilePath(JPanel panel, String label, String path, boolean dironly) { JLabel l = new JLabel(label); constraint.gridx = 0; @@ -276,7 +299,8 @@ public class Options extends JDialog { addSeparator(optionsPanel); - enableParsing = addCheckBox(optionsPanel, "Enable automatic sphinx speech-to-text (**SLOW**)", getBoolean("process.sphinx")); + enableParsing = addCheckBox(optionsPanel, "Enable automatic speech-to-text submission", getBoolean("process.haven.auto")); + havenApiKey = addTextField(optionsPanel, "Haven OnDemand API Key", get("process.haven.apikey")); addSeparator(optionsPanel); @@ -463,6 +487,7 @@ public class Options extends JDialog { defaultPrefs.put("audio.export.samplerate", "44100"); defaultPrefs.put("process.sphinx", "false"); + defaultPrefs.put("process.haven.apikey", ""); defaultPrefs.put("cache.size", "100"); @@ -603,6 +628,7 @@ public class Options extends JDialog { set("audio.export.bitrate", ((KVPair)bitRate.getSelectedItem()).key); set("audio.export.samplerate", ((KVPair)exportRate.getSelectedItem()).key); set("process.sphinx", enableParsing.isSelected()); + set("process.haven.apikey", havenApiKey.getText()); set("cache.size", cacheSize.getValue()); for (int i = 0; i < 31; i++) { diff --git a/src/uk/co/majenko/audiobookrecorder/Sentence.java b/src/uk/co/majenko/audiobookrecorder/Sentence.java index 6048073..d86a734 100644 --- a/src/uk/co/majenko/audiobookrecorder/Sentence.java +++ b/src/uk/co/majenko/audiobookrecorder/Sentence.java @@ -9,12 +9,25 @@ import java.io.*; import java.nio.file.*; import javax.swing.tree.*; import javax.sound.sampled.*; -import edu.cmu.sphinx.api.*; -import edu.cmu.sphinx.decoder.adaptation.*; -import edu.cmu.sphinx.result.*; import davaguine.jeq.spi.EqualizerInputStream; import davaguine.jeq.core.IIRControls; +import org.apache.http.HttpEntity; +import org.apache.http.client.methods.CloseableHttpResponse; +import org.apache.http.client.methods.HttpPost; +import org.apache.http.entity.ContentType; +import org.apache.http.entity.mime.MultipartEntityBuilder; +import org.apache.http.entity.mime.content.FileBody; +import org.apache.http.entity.mime.content.StringBody; +import org.apache.http.impl.client.CloseableHttpClient; +import org.apache.http.impl.client.HttpClients; +import org.apache.http.util.EntityUtils; + +import org.json.*; + +import java.util.Timer; + + public class Sentence extends DefaultMutableTreeNode implements Cacheable { String text; @@ -34,6 +47,19 @@ public class Sentence extends DefaultMutableTreeNode implements Cacheable { boolean inSample; boolean attention = false; + String havenJobId = ""; + + // 0: Not processed + // 1: Submitted + // 2: Procesisng finished + // 3: Processing failed + int havenStatus = 0; + + String overrideText = null; + + public void setOverrideText(String s) { overrideText = s; } + public String getOverrideText() { return overrideText; } + TargetDataLine line; AudioInputStream inputStream; AudioFormat storedFormat = null; @@ -160,7 +186,7 @@ public class Sentence extends DefaultMutableTreeNode implements Cacheable { } else if (tm.equals("fft")) { autoTrimSampleFFT(); } - if (Options.getBoolean("process.sphinx")) { + if (Options.getBoolean("process.haven.auto")) { recognise(); } } @@ -330,6 +356,7 @@ public class Sentence extends DefaultMutableTreeNode implements Cacheable { } public void setText(String t) { + overrideText = null; text = t; } @@ -575,72 +602,8 @@ public class Sentence extends DefaultMutableTreeNode implements Cacheable { return null; } - public void doRecognition(StreamSpeechRecognizer recognizer) { - try { - setText("[recognising...]"); - AudiobookRecorder.window.bookTreeModel.reload(this); - - AudioFormat format = getAudioFormat(); - - byte[] inData = getRawAudioData(); - int inLength = inData.length; - int bps = format.getFrameSize(); - int inSamples = inLength / bps; - - int outSamples = inSamples / 4; - byte[] outData = new byte[outSamples * bps]; - - for (int i = 0; i < outSamples; i++) { - for (int j = 0; j < bps; j++) { - outData[i * bps + j] = inData[(i * 4) * bps + j]; - } - } - - ByteArrayInputStream bas = new ByteArrayInputStream(outData); - recognizer.startRecognition(bas); - SpeechResult result; - String res = ""; - while ((result = recognizer.getResult()) != null) { - res += result.getHypothesis(); - res += " "; - } - recognizer.stopRecognition(); - - text = res; - - AudiobookRecorder.window.bookTreeModel.reload(Sentence.this); - } catch (Exception e) { - e.printStackTrace(); - } - } - public void recognise() { - Thread t = new Thread(new Runnable() { - public void run() { - try { - Configuration sphinxConfig = new Configuration(); - - sphinxConfig.setAcousticModelPath("resource:/edu/cmu/sphinx/models/en-us/en-us"); - sphinxConfig.setDictionaryPath("resource:/edu/cmu/sphinx/models/en-us/cmudict-en-us.dict"); - sphinxConfig.setLanguageModelPath("resource:/edu/cmu/sphinx/models/en-us/en-us.lm.bin"); - - AudioInputStream s = AudioSystem.getAudioInputStream(getFile()); - AudioFormat format = getAudioFormat(); - - sphinxConfig.setSampleRate((int)(format.getSampleRate() / 4f)); - - StreamSpeechRecognizer recognizer; - - recognizer = new StreamSpeechRecognizer(sphinxConfig); - - doRecognition(recognizer); - } catch (Exception e) { - e.printStackTrace(); - } - } - }); - - t.start(); + AudiobookRecorder.window.havenQueue.submit(Sentence.this); } public void setLocked(boolean l) { @@ -741,4 +704,134 @@ public class Sentence extends DefaultMutableTreeNode implements Cacheable { public boolean getAttentionFlag() { return attention; } + + public String getHavenJobId() { + return havenJobId; + } + + public void setHavenJobId(String i) { + havenJobId = i; + } + + public int getHavenStatus() { + return havenStatus; + } + + public void setHavenStatus(int i) { + havenStatus = i; + } + + public boolean postHavenData() { + String apiKey = Options.get("process.haven.apikey"); + if (apiKey == null || apiKey.equals("")) return false; + + CloseableHttpClient httpclient = HttpClients.createDefault(); + + setOverrideText("[submitting...]"); + AudiobookRecorder.window.bookTreeModel.reload(this); + + try { + HttpPost httppost = new HttpPost("https://api.havenondemand.com/1/api/async/recognizespeech/v2?apikey=" + apiKey); + + FileBody bin = new FileBody(getFile()); + StringBody language = new StringBody("en-GB"); + + HttpEntity reqEntity = MultipartEntityBuilder.create() + .addPart("language_model", language) + .addPart("file", bin) + .build(); + + httppost.setEntity(reqEntity); + + CloseableHttpResponse response = httpclient.execute(httppost); + try { + if (response.getStatusLine().getStatusCode() != 200) { + System.err.println("Error posting data: " + response.getStatusLine().getStatusCode()); + return false; + } + + HttpEntity resEntity = response.getEntity(); + if (resEntity != null) { + JSONObject obj = new JSONObject(EntityUtils.toString(resEntity)); + havenJobId = obj.getString("jobID"); + System.err.println("Submitted new Haven OnDemand job #" + havenJobId); + havenStatus = 1; + } + EntityUtils.consume(resEntity); + } catch (Exception ex) { + ex.printStackTrace(); + return false; + } + } catch (Exception ex) { + ex.printStackTrace(); + return false; + } + + + return true; +// eddec91c-6018-4dcd-bd8d-5e96b23e334c --form "language_model=en-US" --form "file=@3e67460c-f298-4e2c-a412-d375d489e1b3.wav" + } + + public void processPendingHaven() { + if (havenStatus != 1) return; + + + String apiKey = Options.get("process.haven.apikey"); + if (apiKey == null || apiKey.equals("")) return; + + CloseableHttpClient httpclient = HttpClients.createDefault(); + + + try { + HttpPost httppost = new HttpPost("https://api.havenondemand.com/1/job/status/" + havenJobId + "?apikey=" + apiKey); + + HttpEntity reqEntity = MultipartEntityBuilder.create().build(); + httppost.setEntity(reqEntity); + + CloseableHttpResponse response = httpclient.execute(httppost); + try { + if (response.getStatusLine().getStatusCode() != 200) { + havenStatus = 3; + return; + } + + HttpEntity resEntity = response.getEntity(); + if (resEntity != null) { + JSONObject obj = new JSONObject(EntityUtils.toString(resEntity)); + + System.err.println(havenJobId + ": " + obj.getString("status")); + + if (obj.getString("status").equals("finished")) { + havenStatus = 2; + JSONArray textItems = obj.getJSONArray("actions").getJSONObject(0).getJSONObject("result").getJSONArray("items"); + + StringBuilder out = new StringBuilder(); + + for (int i = 0; i < textItems.length(); i++) { + out.append(textItems.getJSONObject(i).getString("text")); + out.append(" "); + } + String result = out.toString(); + setText(result.trim()); + AudiobookRecorder.window.bookTreeModel.reload(Sentence.this); + System.err.println(result); + } else if (obj.getString("status").equals("queued")) { + havenStatus = 1; + setOverrideText("[processing...]"); + AudiobookRecorder.window.bookTreeModel.reload(Sentence.this); + } else { + text = id; + AudiobookRecorder.window.bookTreeModel.reload(Sentence.this); + havenStatus = 3; + return; + } + } + EntityUtils.consume(resEntity); + } catch (Exception ex) { + ex.printStackTrace(); + } + } catch (Exception ex) { + ex.printStackTrace(); + } + } }