diff --git a/build.gradle b/build.gradle index 90cbe6f..681dfba 100644 --- a/build.gradle +++ b/build.gradle @@ -15,6 +15,7 @@ ext { user = 'joerg' name = 'net' description = 'Network classes for Java' + vendor = 'xbib.org' inceptionYear = '2016' url = 'https://xbib.org/' + user + '/' + name scmUrl = 'https://xbib.org/' + user + '/' + name diff --git a/gradle/compile/java.gradle b/gradle/compile/java.gradle index 25a53d9..e0002ed 100644 --- a/gradle/compile/java.gradle +++ b/gradle/compile/java.gradle @@ -11,9 +11,18 @@ java { jar { manifest { + attributes('Implementation-Name': project.name) attributes('Implementation-Version': project.version) + attributes('Implementation-Vendor': project.vendor) + attributes('X-Compile-Source-JDK': JavaLanguageVersion.of(21).toString()) + attributes('X-Compile-Target-JDK': JavaLanguageVersion.of(21).toString()) } duplicatesStrategy = DuplicatesStrategy.INCLUDE + from (project.file('.')) { + include 'LICENSE.txt' + include 'NOTICE.txt' + into 'META-INF' + } } tasks.withType(JavaCompile).configureEach { diff --git a/net-mail/LICENSE.txt b/net-mail/LICENSE.txt new file mode 100644 index 0000000..be144c4 --- /dev/null +++ b/net-mail/LICENSE.txt @@ -0,0 +1,637 @@ +# Eclipse Public License - v 2.0 + + THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE + PUBLIC LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION + OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT. + + 1. DEFINITIONS + + "Contribution" means: + + a) in the case of the initial Contributor, the initial content + Distributed under this Agreement, and + + b) in the case of each subsequent Contributor: + i) changes to the Program, and + ii) additions to the Program; + where such changes and/or additions to the Program originate from + and are Distributed by that particular Contributor. A Contribution + "originates" from a Contributor if it was added to the Program by + such Contributor itself or anyone acting on such Contributor's behalf. + Contributions do not include changes or additions to the Program that + are not Modified Works. + + "Contributor" means any person or entity that Distributes the Program. + + "Licensed Patents" mean patent claims licensable by a Contributor which + are necessarily infringed by the use or sale of its Contribution alone + or when combined with the Program. + + "Program" means the Contributions Distributed in accordance with this + Agreement. + + "Recipient" means anyone who receives the Program under this Agreement + or any Secondary License (as applicable), including Contributors. + + "Derivative Works" shall mean any work, whether in Source Code or other + form, that is based on (or derived from) the Program and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. + + "Modified Works" shall mean any work in Source Code or other form that + results from an addition to, deletion from, or modification of the + contents of the Program, including, for purposes of clarity any new file + in Source Code form that contains any contents of the Program. Modified + Works shall not include works that contain only declarations, + interfaces, types, classes, structures, or files of the Program solely + in each case in order to link to, bind by name, or subclass the Program + or Modified Works thereof. + + "Distribute" means the acts of a) distributing or b) making available + in any manner that enables the transfer of a copy. + + "Source Code" means the form of a Program preferred for making + modifications, including but not limited to software source code, + documentation source, and configuration files. + + "Secondary License" means either the GNU General Public License, + Version 2.0, or any later versions of that license, including any + exceptions or additional permissions as identified by the initial + Contributor. + + 2. GRANT OF RIGHTS + + a) Subject to the terms of this Agreement, each Contributor hereby + grants Recipient a non-exclusive, worldwide, royalty-free copyright + license to reproduce, prepare Derivative Works of, publicly display, + publicly perform, Distribute and sublicense the Contribution of such + Contributor, if any, and such Derivative Works. + + b) Subject to the terms of this Agreement, each Contributor hereby + grants Recipient a non-exclusive, worldwide, royalty-free patent + license under Licensed Patents to make, use, sell, offer to sell, + import and otherwise transfer the Contribution of such Contributor, + if any, in Source Code or other form. This patent license shall + apply to the combination of the Contribution and the Program if, at + the time the Contribution is added by the Contributor, such addition + of the Contribution causes such combination to be covered by the + Licensed Patents. The patent license shall not apply to any other + combinations which include the Contribution. No hardware per se is + licensed hereunder. + + c) Recipient understands that although each Contributor grants the + licenses to its Contributions set forth herein, no assurances are + provided by any Contributor that the Program does not infringe the + patent or other intellectual property rights of any other entity. + Each Contributor disclaims any liability to Recipient for claims + brought by any other entity based on infringement of intellectual + property rights or otherwise. As a condition to exercising the + rights and licenses granted hereunder, each Recipient hereby + assumes sole responsibility to secure any other intellectual + property rights needed, if any. For example, if a third party + patent license is required to allow Recipient to Distribute the + Program, it is Recipient's responsibility to acquire that license + before distributing the Program. + + d) Each Contributor represents that to its knowledge it has + sufficient copyright rights in its Contribution, if any, to grant + the copyright license set forth in this Agreement. + + e) Notwithstanding the terms of any Secondary License, no + Contributor makes additional grants to any Recipient (other than + those set forth in this Agreement) as a result of such Recipient's + receipt of the Program under the terms of a Secondary License + (if permitted under the terms of Section 3). + + 3. REQUIREMENTS + + 3.1 If a Contributor Distributes the Program in any form, then: + + a) the Program must also be made available as Source Code, in + accordance with section 3.2, and the Contributor must accompany + the Program with a statement that the Source Code for the Program + is available under this Agreement, and informs Recipients how to + obtain it in a reasonable manner on or through a medium customarily + used for software exchange; and + + b) the Contributor may Distribute the Program under a license + different than this Agreement, provided that such license: + i) effectively disclaims on behalf of all other Contributors all + warranties and conditions, express and implied, including + warranties or conditions of title and non-infringement, and + implied warranties or conditions of merchantability and fitness + for a particular purpose; + + ii) effectively excludes on behalf of all other Contributors all + liability for damages, including direct, indirect, special, + incidental and consequential damages, such as lost profits; + + iii) does not attempt to limit or alter the recipients' rights + in the Source Code under section 3.2; and + + iv) requires any subsequent distribution of the Program by any + party to be under a license that satisfies the requirements + of this section 3. + + 3.2 When the Program is Distributed as Source Code: + + a) it must be made available under this Agreement, or if the + Program (i) is combined with other material in a separate file or + files made available under a Secondary License, and (ii) the initial + Contributor attached to the Source Code the notice described in + Exhibit A of this Agreement, then the Program may be made available + under the terms of such Secondary Licenses, and + + b) a copy of this Agreement must be included with each copy of + the Program. + + 3.3 Contributors may not remove or alter any copyright, patent, + trademark, attribution notices, disclaimers of warranty, or limitations + of liability ("notices") contained within the Program from any copy of + the Program which they Distribute, provided that Contributors may add + their own appropriate notices. + + 4. COMMERCIAL DISTRIBUTION + + Commercial distributors of software may accept certain responsibilities + with respect to end users, business partners and the like. While this + license is intended to facilitate the commercial use of the Program, + the Contributor who includes the Program in a commercial product + offering should do so in a manner which does not create potential + liability for other Contributors. Therefore, if a Contributor includes + the Program in a commercial product offering, such Contributor + ("Commercial Contributor") hereby agrees to defend and indemnify every + other Contributor ("Indemnified Contributor") against any losses, + damages and costs (collectively "Losses") arising from claims, lawsuits + and other legal actions brought by a third party against the Indemnified + Contributor to the extent caused by the acts or omissions of such + Commercial Contributor in connection with its distribution of the Program + in a commercial product offering. The obligations in this section do not + apply to any claims or Losses relating to any actual or alleged + intellectual property infringement. In order to qualify, an Indemnified + Contributor must: a) promptly notify the Commercial Contributor in + writing of such claim, and b) allow the Commercial Contributor to control, + and cooperate with the Commercial Contributor in, the defense and any + related settlement negotiations. The Indemnified Contributor may + participate in any such claim at its own expense. + + For example, a Contributor might include the Program in a commercial + product offering, Product X. That Contributor is then a Commercial + Contributor. If that Commercial Contributor then makes performance + claims, or offers warranties related to Product X, those performance + claims and warranties are such Commercial Contributor's responsibility + alone. Under this section, the Commercial Contributor would have to + defend claims against the other Contributors related to those performance + claims and warranties, and if a court requires any other Contributor to + pay any damages as a result, the Commercial Contributor must pay + those damages. + + 5. NO WARRANTY + + EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT + PERMITTED BY APPLICABLE LAW, THE PROGRAM IS PROVIDED ON AN "AS IS" + BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR + IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF + TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR + PURPOSE. Each Recipient is solely responsible for determining the + appropriateness of using and distributing the Program and assumes all + risks associated with its exercise of rights under this Agreement, + including but not limited to the risks and costs of program errors, + compliance with applicable laws, damage to or loss of data, programs + or equipment, and unavailability or interruption of operations. + + 6. DISCLAIMER OF LIABILITY + + EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT + PERMITTED BY APPLICABLE LAW, NEITHER RECIPIENT NOR ANY CONTRIBUTORS + SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST + PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + POSSIBILITY OF SUCH DAMAGES. + + 7. GENERAL + + If any provision of this Agreement is invalid or unenforceable under + applicable law, it shall not affect the validity or enforceability of + the remainder of the terms of this Agreement, and without further + action by the parties hereto, such provision shall be reformed to the + minimum extent necessary to make such provision valid and enforceable. + + If Recipient institutes patent litigation against any entity + (including a cross-claim or counterclaim in a lawsuit) alleging that the + Program itself (excluding combinations of the Program with other software + or hardware) infringes such Recipient's patent(s), then such Recipient's + rights granted under Section 2(b) shall terminate as of the date such + litigation is filed. + + All Recipient's rights under this Agreement shall terminate if it + fails to comply with any of the material terms or conditions of this + Agreement and does not cure such failure in a reasonable period of + time after becoming aware of such noncompliance. If all Recipient's + rights under this Agreement terminate, Recipient agrees to cease use + and distribution of the Program as soon as reasonably practicable. + However, Recipient's obligations under this Agreement and any licenses + granted by Recipient relating to the Program shall continue and survive. + + Everyone is permitted to copy and distribute copies of this Agreement, + but in order to avoid inconsistency the Agreement is copyrighted and + may only be modified in the following manner. The Agreement Steward + reserves the right to publish new versions (including revisions) of + this Agreement from time to time. No one other than the Agreement + Steward has the right to modify this Agreement. The Eclipse Foundation + is the initial Agreement Steward. The Eclipse Foundation may assign the + responsibility to serve as the Agreement Steward to a suitable separate + entity. Each new version of the Agreement will be given a distinguishing + version number. The Program (including Contributions) may always be + Distributed subject to the version of the Agreement under which it was + received. In addition, after a new version of the Agreement is published, + Contributor may elect to Distribute the Program (including its + Contributions) under the new version. + + Except as expressly stated in Sections 2(a) and 2(b) above, Recipient + receives no rights or licenses to the intellectual property of any + Contributor under this Agreement, whether expressly, by implication, + estoppel or otherwise. All rights in the Program not expressly granted + under this Agreement are reserved. Nothing in this Agreement is intended + to be enforceable by any entity that is not a Contributor or Recipient. + No third-party beneficiary rights are created under this Agreement. + + Exhibit A - Form of Secondary Licenses Notice + + "This Source Code may also be made available under the following + Secondary Licenses when the conditions for such availability set forth + in the Eclipse Public License, v. 2.0 are satisfied: {name license(s), + version(s), and exceptions or additional permissions here}." + + Simply including a copy of this Agreement, including this Exhibit A + is not sufficient to license the Source Code under Secondary Licenses. + + 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. + +--- + +## The GNU General Public License (GPL) Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 51 Franklin Street, Fifth Floor + Boston, MA 02110-1335 + USA + + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your freedom to + share and change it. By contrast, the GNU General Public License is + intended to guarantee your freedom to share and change free software--to + make sure the software is free for all its users. This General Public + License applies to most of the Free Software Foundation's software and + to any other program whose authors commit to using it. (Some other Free + Software Foundation software is covered by the GNU Library General + Public License instead.) You can apply it to your programs, too. + + When we speak of free software, we are referring to freedom, not price. + Our General Public Licenses are designed to make sure that you have the + freedom to distribute copies of free software (and charge for this + service if you wish), that you receive source code or can get it if you + want it, that you can change the software or use pieces of it in new + free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid anyone + to deny you these rights or to ask you to surrender the rights. These + restrictions translate to certain responsibilities for you if you + distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether gratis + or for a fee, you must give the recipients all the rights that you have. + You must make sure that they, too, receive or can get the source code. + And you must show them these terms so they know their rights. + + We protect your rights with two steps: (1) copyright the software, and + (2) offer you this license which gives you legal permission to copy, + distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain + that everyone understands that there is no warranty for this free + software. If the software is modified by someone else and passed on, we + want its recipients to know that what they have is not the original, so + that any problems introduced by others will not reflect on the original + authors' reputations. + + Finally, any free program is threatened constantly by software patents. + We wish to avoid the danger that redistributors of a free program will + individually obtain patent licenses, in effect making the program + proprietary. To prevent this, we have made it clear that any patent must + be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and + modification follow. + + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains a + notice placed by the copyright holder saying it may be distributed under + the terms of this General Public License. The "Program", below, refers + to any such program or work, and a "work based on the Program" means + either the Program or any derivative work under copyright law: that is + to say, a work containing the Program or a portion of it, either + verbatim or with modifications and/or translated into another language. + (Hereinafter, translation is included without limitation in the term + "modification".) Each licensee is addressed as "you". + + Activities other than copying, distribution and modification are not + covered by this License; they are outside its scope. The act of running + the Program is not restricted, and the output from the Program is + covered only if its contents constitute a work based on the Program + (independent of having been made by running the Program). Whether that + is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's source + code as you receive it, in any medium, provided that you conspicuously + and appropriately publish on each copy an appropriate copyright notice + and disclaimer of warranty; keep intact all the notices that refer to + this License and to the absence of any warranty; and give any other + recipients of the Program a copy of this License along with the Program. + + You may charge a fee for the physical act of transferring a copy, and + you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion of + it, thus forming a work based on the Program, and copy and distribute + such modifications or work under the terms of Section 1 above, provided + that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any part + thereof, to be licensed as a whole at no charge to all third parties + under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a notice + that there is no warranty (or else, saying that you provide a + warranty) and that users may redistribute the program under these + conditions, and telling the user how to view a copy of this License. + (Exception: if the Program itself is interactive but does not + normally print such an announcement, your work based on the Program + is not required to print an announcement.) + + These requirements apply to the modified work as a whole. If + identifiable sections of that work are not derived from the Program, and + can be reasonably considered independent and separate works in + themselves, then this License, and its terms, do not apply to those + sections when you distribute them as separate works. But when you + distribute the same sections as part of a whole which is a work based on + the Program, the distribution of the whole must be on the terms of this + License, whose permissions for other licensees extend to the entire + whole, and thus to each and every part regardless of who wrote it. + + Thus, it is not the intent of this section to claim rights or contest + your rights to work written entirely by you; rather, the intent is to + exercise the right to control the distribution of derivative or + collective works based on the Program. + + In addition, mere aggregation of another work not based on the Program + with the Program (or with a work based on the Program) on a volume of a + storage or distribution medium does not bring the other work under the + scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, + under Section 2) in object code or executable form under the terms of + Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections 1 + and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your cost + of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer to + distribute corresponding source code. (This alternative is allowed + only for noncommercial distribution and only if you received the + program in object code or executable form with such an offer, in + accord with Subsection b above.) + + The source code for a work means the preferred form of the work for + making modifications to it. For an executable work, complete source code + means all the source code for all modules it contains, plus any + associated interface definition files, plus the scripts used to control + compilation and installation of the executable. However, as a special + exception, the source code distributed need not include anything that is + normally distributed (in either source or binary form) with the major + components (compiler, kernel, and so on) of the operating system on + which the executable runs, unless that component itself accompanies the + executable. + + If distribution of executable or object code is made by offering access + to copy from a designated place, then offering equivalent access to copy + the source code from the same place counts as distribution of the source + code, even though third parties are not compelled to copy the source + along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program + except as expressly provided under this License. Any attempt otherwise + to copy, modify, sublicense or distribute the Program is void, and will + automatically terminate your rights under this License. However, parties + who have received copies, or rights, from you under this License will + not have their licenses terminated so long as such parties remain in + full compliance. + + 5. You are not required to accept this License, since you have not + signed it. However, nothing else grants you permission to modify or + distribute the Program or its derivative works. These actions are + prohibited by law if you do not accept this License. Therefore, by + modifying or distributing the Program (or any work based on the + Program), you indicate your acceptance of this License to do so, and all + its terms and conditions for copying, distributing or modifying the + Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the + Program), the recipient automatically receives a license from the + original licensor to copy, distribute or modify the Program subject to + these terms and conditions. You may not impose any further restrictions + on the recipients' exercise of the rights granted herein. You are not + responsible for enforcing compliance by third parties to this License. + + 7. If, as a consequence of a court judgment or allegation of patent + infringement or for any other reason (not limited to patent issues), + conditions are imposed on you (whether by court order, agreement or + otherwise) that contradict the conditions of this License, they do not + excuse you from the conditions of this License. If you cannot distribute + so as to satisfy simultaneously your obligations under this License and + any other pertinent obligations, then as a consequence you may not + distribute the Program at all. For example, if a patent license would + not permit royalty-free redistribution of the Program by all those who + receive copies directly or indirectly through you, then the only way you + could satisfy both it and this License would be to refrain entirely from + distribution of the Program. + + If any portion of this section is held invalid or unenforceable under + any particular circumstance, the balance of the section is intended to + apply and the section as a whole is intended to apply in other + circumstances. + + It is not the purpose of this section to induce you to infringe any + patents or other property right claims or to contest validity of any + such claims; this section has the sole purpose of protecting the + integrity of the free software distribution system, which is implemented + by public license practices. Many people have made generous + contributions to the wide range of software distributed through that + system in reliance on consistent application of that system; it is up to + the author/donor to decide if he or she is willing to distribute + software through any other system and a licensee cannot impose that choice. + + This section is intended to make thoroughly clear what is believed to be + a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in + certain countries either by patents or by copyrighted interfaces, the + original copyright holder who places the Program under this License may + add an explicit geographical distribution limitation excluding those + countries, so that distribution is permitted only in or among countries + not thus excluded. In such case, this License incorporates the + limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new + versions of the General Public License from time to time. Such new + versions will be similar in spirit to the present version, but may + differ in detail to address new problems or concerns. + + Each version is given a distinguishing version number. If the Program + specifies a version number of this License which applies to it and "any + later version", you have the option of following the terms and + conditions either of that version or of any later version published by + the Free Software Foundation. If the Program does not specify a version + number of this License, you may choose any version ever published by the + Free Software Foundation. + + 10. If you wish to incorporate parts of the Program into other free + programs whose distribution conditions are different, write to the + author to ask for permission. For software which is copyrighted by the + Free Software Foundation, write to the Free Software Foundation; we + sometimes make exceptions for this. Our decision will be guided by the + two goals of preserving the free status of all derivatives of our free + software and of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO + WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. + EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR + OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, + EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE + ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH + YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL + NECESSARY SERVICING, REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN + WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY + AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR + DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL + DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM + (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED + INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF + THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR + OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest + possible use to the public, the best way to achieve this is to make it + free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest to + attach them to the start of each source file to most effectively convey + the exclusion of warranty; and each file should have at least the + "copyright" line and a pointer to where the full notice is found. + + One line to give the program's name and a brief idea of what it does. + Copyright (C) + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335 USA + + Also add information on how to contact you by electronic and paper mail. + + If the program is interactive, make it output a short notice like this + when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type + `show w'. This is free software, and you are welcome to redistribute + it under certain conditions; type `show c' for details. + + The hypothetical commands `show w' and `show c' should show the + appropriate parts of the General Public License. Of course, the commands + you use may be called something other than `show w' and `show c'; they + could even be mouse-clicks or menu items--whatever suits your program. + + You should also get your employer (if you work as a programmer) or your + school, if any, to sign a "copyright disclaimer" for the program, if + necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the + program `Gnomovision' (which makes passes at compilers) written by + James Hacker. + + signature of Ty Coon, 1 April 1989 + Ty Coon, President of Vice + + This General Public License does not permit incorporating your program + into proprietary programs. If your program is a subroutine library, you + may consider it more useful to permit linking proprietary applications + with the library. If this is what you want to do, use the GNU Library + General Public License instead of this License. + +--- + +## CLASSPATH EXCEPTION + + Linking this library statically or dynamically with other modules is + making a combined work based on this library. Thus, the terms and + conditions of the GNU General Public License version 2 cover the whole + combination. + + As a special exception, the copyright holders of this library give you + permission to link this library with independent modules to produce an + executable, regardless of the license terms of these independent + modules, and to copy and distribute the resulting executable under + terms of your choice, provided that you also meet, for each linked + independent module, the terms and conditions of the license of that + module. An independent module is a module which is not derived from or + based on this library. If you modify this library, you may extend this + exception to your version of the library, but you are not obligated to + do so. If you do not wish to do so, delete this exception statement + from your version. diff --git a/net-mail/src/main/java/jakarta/activation/DataHandler.java b/net-mail/src/main/java/jakarta/activation/DataHandler.java index ab60b8c..e3ad736 100644 --- a/net-mail/src/main/java/jakarta/activation/DataHandler.java +++ b/net-mail/src/main/java/jakarta/activation/DataHandler.java @@ -377,10 +377,7 @@ public class DataHandler { // if it's not set, set it... if (transferFlavors == emptyFlavors) transferFlavors = getDataContentHandler().getTransferDataFlavors(); - if (transferFlavors == emptyFlavors) - return transferFlavors; // no need to clone an empty array - else - return transferFlavors.clone(); + return transferFlavors; } /** diff --git a/net-mail/src/main/java/jakarta/mail/Flags.java b/net-mail/src/main/java/jakarta/mail/Flags.java index 5786d91..1df7909 100644 --- a/net-mail/src/main/java/jakarta/mail/Flags.java +++ b/net-mail/src/main/java/jakarta/mail/Flags.java @@ -103,8 +103,9 @@ public class Flags { @SuppressWarnings("unchecked") public Flags(Flags flags) { this.system_flags = flags.system_flags; - if (flags.user_flags != null) - this.user_flags = (Hashtable) flags.user_flags.clone(); + if (flags.user_flags != null) { + this.user_flags = flags.user_flags; + } } /** @@ -406,30 +407,12 @@ public class Flags { user_flags = null; } - /** - * Returns a clone of this Flags object. - */ - @SuppressWarnings("unchecked") - @Override - public Object clone() { - Flags f = null; - try { - f = (Flags) super.clone(); - } catch (CloneNotSupportedException cex) { - // ignore, can't happen - } - if (this.user_flags != null) - f.user_flags = (Hashtable) this.user_flags.clone(); - return f; - } - /** * Return a string representation of this Flags object. * Note that the exact format of the string is subject to change. */ public String toString() { StringBuilder sb = new StringBuilder(); - if ((system_flags & ANSWERED_BIT) != 0) sb.append("\\Answered "); if ((system_flags & DELETED_BIT) != 0) @@ -458,7 +441,7 @@ public class Flags { } } - if (first && sb.length() > 0) + if (first && !sb.isEmpty()) sb.setLength(sb.length() - 1); // smash trailing space return sb.toString(); @@ -550,7 +533,7 @@ public class Flags { System.out.println("fail"); // check clone with only system flags - fc = (Flags)f1.clone(); + fc = (Flags)f1; if (f1.equals(fc) && fc.equals(f1)) System.out.println("success"); else @@ -565,8 +548,8 @@ public class Flags { else System.out.println("fail"); - // check clone - fc = (Flags)f1.clone(); + // check + fc = (Flags)f1; if (f1.equals(fc) && fc.equals(f1)) System.out.println("success"); else diff --git a/net-mail/src/main/java/jakarta/mail/Folder.java b/net-mail/src/main/java/jakarta/mail/Folder.java index 64a5d72..4ac1a46 100644 --- a/net-mail/src/main/java/jakarta/mail/Folder.java +++ b/net-mail/src/main/java/jakarta/mail/Folder.java @@ -1623,8 +1623,7 @@ public abstract class Folder implements AutoCloseable { * of this event will not take effect until after the event is * delivered. */ - @SuppressWarnings("unchecked") - Vector v = (Vector) vector.clone(); + Vector v = new Vector<>(vector); q.enqueue(event, v); } diff --git a/net-mail/src/main/java/jakarta/mail/Service.java b/net-mail/src/main/java/jakarta/mail/Service.java index 0cce025..1b46d69 100644 --- a/net-mail/src/main/java/jakarta/mail/Service.java +++ b/net-mail/src/main/java/jakarta/mail/Service.java @@ -611,8 +611,7 @@ public abstract class Service implements AutoCloseable { * of this event will not take effect until after the event is * delivered. */ - @SuppressWarnings("unchecked") - Vector v = (Vector) vector.clone(); + Vector v = new Vector<>(vector); q.enqueue(event, v); } diff --git a/net-mail/src/main/java/jakarta/mail/internet/MimeMessage.java b/net-mail/src/main/java/jakarta/mail/internet/MimeMessage.java index 4182bb9..856fb66 100644 --- a/net-mail/src/main/java/jakarta/mail/internet/MimeMessage.java +++ b/net-mail/src/main/java/jakarta/mail/internet/MimeMessage.java @@ -2099,10 +2099,6 @@ public class MimeMessage extends Message implements MimePart { /** * Return a Flags object containing the flags for * this message.

- *

- * Note that a clone of the internal Flags object is returned, so - * modifying the returned Flags object will not affect the flags - * of this message. * * @return Flags object containing the flags for this message * @throws MessagingException for failures @@ -2110,7 +2106,7 @@ public class MimeMessage extends Message implements MimePart { */ @Override public synchronized Flags getFlags() throws MessagingException { - return (Flags) flags.clone(); + return flags; } /** diff --git a/net-mail/src/main/java/jakarta/mail/search/AndTerm.java b/net-mail/src/main/java/jakarta/mail/search/AndTerm.java index 4b5d0cd..28bc79e 100644 --- a/net-mail/src/main/java/jakarta/mail/search/AndTerm.java +++ b/net-mail/src/main/java/jakarta/mail/search/AndTerm.java @@ -63,7 +63,7 @@ public final class AndTerm extends SearchTerm { * @return the search terms */ public SearchTerm[] getTerms() { - return terms.clone(); + return terms; } /** diff --git a/net-mail/src/main/java/jakarta/mail/search/FlagTerm.java b/net-mail/src/main/java/jakarta/mail/search/FlagTerm.java index a682524..2ee67af 100644 --- a/net-mail/src/main/java/jakarta/mail/search/FlagTerm.java +++ b/net-mail/src/main/java/jakarta/mail/search/FlagTerm.java @@ -36,14 +36,14 @@ public final class FlagTerm extends SearchTerm { * * @serial */ - private boolean set; + private final boolean set; /** * Flags object containing the flags to test. * * @serial */ - private Flags flags; + private final Flags flags; /** * Constructor. @@ -62,7 +62,7 @@ public final class FlagTerm extends SearchTerm { * @return the flags */ public Flags getFlags() { - return (Flags) flags.clone(); + return flags; } /** @@ -82,7 +82,6 @@ public final class FlagTerm extends SearchTerm { */ @Override public boolean match(Message msg) { - try { Flags f = msg.getFlags(); if (set) { // This is easy @@ -99,23 +98,19 @@ public final class FlagTerm extends SearchTerm { Flags.Flag[] sf = flags.getSystemFlags(); // Check each flag in the passed in Flags object - for (int i = 0; i < sf.length; i++) { - if (f.contains(sf[i])) + for (Flags.Flag flag : sf) { + if (f.contains(flag)) // this flag IS set in this Message, get out. return false; } - String[] s = flags.getUserFlags(); - // Check each flag in the passed in Flags object - for (int i = 0; i < s.length; i++) { - if (f.contains(s[i])) + for (String string : s) { + if (f.contains(string)) // this flag IS set in this Message, get out. return false; } - return true; - } catch (MessagingException | RuntimeException e) { return false; } diff --git a/net-mail/src/main/java/jakarta/mail/search/OrTerm.java b/net-mail/src/main/java/jakarta/mail/search/OrTerm.java index 2ca5882..eafa445 100644 --- a/net-mail/src/main/java/jakarta/mail/search/OrTerm.java +++ b/net-mail/src/main/java/jakarta/mail/search/OrTerm.java @@ -62,7 +62,7 @@ public final class OrTerm extends SearchTerm { * @return the search terms */ public SearchTerm[] getTerms() { - return terms.clone(); + return terms; } /** diff --git a/net-mail/src/main/java/org/xbib/net/mail/imap/IMAPFolder.java b/net-mail/src/main/java/org/xbib/net/mail/imap/IMAPFolder.java index d09dfab..4a0384e 100644 --- a/net-mail/src/main/java/org/xbib/net/mail/imap/IMAPFolder.java +++ b/net-mail/src/main/java/org/xbib/net/mail/imap/IMAPFolder.java @@ -1621,9 +1621,7 @@ public class IMAPFolder extends Folder implements UIDFolder, ResponseHandler { */ @Override public synchronized Flags getPermanentFlags() { - if (permanentFlags == null) - return null; - return (Flags) (permanentFlags.clone()); + return permanentFlags; } /** @@ -3072,7 +3070,7 @@ public class IMAPFolder extends Folder implements UIDFolder, ResponseHandler { checkExists(); if (attributes == null) exists(); // do a LIST to set the attributes - return attributes == null ? new String[0] : attributes.clone(); + return attributes == null ? new String[0] : attributes; } /** diff --git a/net-mail/src/main/java/org/xbib/net/mail/imap/IMAPMessage.java b/net-mail/src/main/java/org/xbib/net/mail/imap/IMAPMessage.java index cab1e27..746fbde 100644 --- a/net-mail/src/main/java/org/xbib/net/mail/imap/IMAPMessage.java +++ b/net-mail/src/main/java/org/xbib/net/mail/imap/IMAPMessage.java @@ -346,7 +346,7 @@ public class IMAPMessage extends MimeMessage implements ReadableMime { */ if (a == null || a.length == 0) a = envelope.sender; - return aaclone(a); + return a; } @Override @@ -392,11 +392,11 @@ public class IMAPMessage extends MimeMessage implements ReadableMime { loadEnvelope(); if (type == Message.RecipientType.TO) - return aaclone(envelope.to); + return envelope.to; else if (type == Message.RecipientType.CC) - return aaclone(envelope.cc); + return envelope.cc; else if (type == Message.RecipientType.BCC) - return aaclone(envelope.bcc); + return envelope.bcc; else return super.getRecipients(type); } @@ -430,7 +430,7 @@ public class IMAPMessage extends MimeMessage implements ReadableMime { */ if (envelope.replyTo == null || envelope.replyTo.length == 0) return getFrom(); - return aaclone(envelope.replyTo); + return envelope.replyTo; } @Override @@ -568,10 +568,7 @@ public class IMAPMessage extends MimeMessage implements ReadableMime { if (bodyLoaded) return super.getContentLanguage(); loadBODYSTRUCTURE(); - if (bs.language != null) - return bs.language.clone(); - else - return null; + return bs.language; } @Override @@ -1693,16 +1690,6 @@ public class IMAPMessage extends MimeMessage implements ReadableMime { return sectionId + "." + what; } - /* - * Clone an array of InternetAddresses. - */ - private InternetAddress[] aaclone(InternetAddress[] aa) { - if (aa == null) - return null; - else - return aa.clone(); - } - private Flags _getFlags() { return flags; } diff --git a/net-mail/src/main/java/org/xbib/net/mail/imap/Utility.java b/net-mail/src/main/java/org/xbib/net/mail/imap/Utility.java index 572fb87..070ac5f 100644 --- a/net-mail/src/main/java/org/xbib/net/mail/imap/Utility.java +++ b/net-mail/src/main/java/org/xbib/net/mail/imap/Utility.java @@ -127,15 +127,15 @@ public final class Utility { * (with zero indicating the message doesn't satisfy the condition), * sort it, and then convert it to a MessageSet skipping all the zeroes. */ - msgs = msgs.clone(); - Arrays.sort(msgs, + Message[] msgCopy = Arrays.copyOf(msgs, msgs.length); + Arrays.sort(msgCopy, new Comparator() { @Override public int compare(Message msg1, Message msg2) { return msg1.getMessageNumber() - msg2.getMessageNumber(); } }); - return toMessageSet(msgs, cond); + return toMessageSet(msgCopy, cond); } /** diff --git a/net-mail/src/main/java/org/xbib/net/mail/imap/protocol/ENVELOPE.java b/net-mail/src/main/java/org/xbib/net/mail/imap/protocol/ENVELOPE.java index 0063e5b..d274705 100644 --- a/net-mail/src/main/java/org/xbib/net/mail/imap/protocol/ENVELOPE.java +++ b/net-mail/src/main/java/org/xbib/net/mail/imap/protocol/ENVELOPE.java @@ -16,7 +16,6 @@ package org.xbib.net.mail.imap.protocol; -import jakarta.mail.internet.AddressException; import jakarta.mail.internet.InternetAddress; import jakarta.mail.internet.MailDateFormat; import java.text.ParseException; @@ -217,9 +216,7 @@ class IMAPAddress extends InternetAddress { } @Override - public InternetAddress[] getGroup(boolean strict) throws AddressException { - if (grouplist == null) - return null; - return grouplist.clone(); + public InternetAddress[] getGroup(boolean strict) { + return grouplist; } } diff --git a/net-mail/src/main/java/org/xbib/net/mail/imap/protocol/SearchSequence.java b/net-mail/src/main/java/org/xbib/net/mail/imap/protocol/SearchSequence.java index 69e0e37..b4dac22 100644 --- a/net-mail/src/main/java/org/xbib/net/mail/imap/protocol/SearchSequence.java +++ b/net-mail/src/main/java/org/xbib/net/mail/imap/protocol/SearchSequence.java @@ -298,9 +298,7 @@ public class SearchSequence { protected Argument flag(FlagTerm term) throws SearchException { boolean set = term.getTestSet(); - Argument result = new Argument(); - Flags flags = term.getFlags(); Flags.Flag[] sf = flags.getSystemFlags(); String[] uf = flags.getUserFlags(); diff --git a/net-mail/src/main/java/org/xbib/net/mail/mbox/MboxMessage.java b/net-mail/src/main/java/org/xbib/net/mail/mbox/MboxMessage.java index bd6bc70..7e4c349 100644 --- a/net-mail/src/main/java/org/xbib/net/mail/mbox/MboxMessage.java +++ b/net-mail/src/main/java/org/xbib/net/mail/mbox/MboxMessage.java @@ -240,7 +240,7 @@ public class MboxMessage extends MimeMessage { */ public void setFlags(Flags newFlags, boolean set) throws MessagingException { - Flags oldFlags = (Flags) flags.clone(); + Flags oldFlags = new Flags(flags); super.setFlags(newFlags, set); if (!flags.equals(oldFlags)) { setHeadersFromFlags(this); diff --git a/net-mail/src/main/java/org/xbib/net/mail/pop3/POP3Message.java b/net-mail/src/main/java/org/xbib/net/mail/pop3/POP3Message.java index cea2d9f..c94107f 100644 --- a/net-mail/src/main/java/org/xbib/net/mail/pop3/POP3Message.java +++ b/net-mail/src/main/java/org/xbib/net/mail/pop3/POP3Message.java @@ -82,7 +82,7 @@ public class POP3Message extends MimeMessage implements ReadableMime { @Override public synchronized void setFlags(Flags newFlags, boolean set) throws MessagingException { - Flags oldFlags = (Flags) flags.clone(); + Flags oldFlags = new Flags(flags); super.setFlags(newFlags, set); if (!flags.equals(oldFlags)) folder.notifyMessageChangedListeners( diff --git a/net-mail/src/main/java/org/xbib/net/mail/smtp/SMTPTransport.java b/net-mail/src/main/java/org/xbib/net/mail/smtp/SMTPTransport.java index c0f481b..c6226ae 100644 --- a/net-mail/src/main/java/org/xbib/net/mail/smtp/SMTPTransport.java +++ b/net-mail/src/main/java/org/xbib/net/mail/smtp/SMTPTransport.java @@ -457,9 +457,7 @@ public class SMTPTransport extends Transport { saslMechanisms = new String[v.size()]; v.toArray(saslMechanisms); } - if (saslMechanisms == null) - return null; - return saslMechanisms.clone(); + return saslMechanisms; } /** @@ -471,8 +469,6 @@ public class SMTPTransport extends Transport { * @since JavaMail 1.4.4 */ public synchronized void setSASLMechanisms(String[] mechanisms) { - if (mechanisms != null) - mechanisms = mechanisms.clone(); this.saslMechanisms = mechanisms; } diff --git a/net-mail/src/main/java/org/xbib/net/mail/util/MailSSLSocketFactory.java b/net-mail/src/main/java/org/xbib/net/mail/util/MailSSLSocketFactory.java index 5c63e03..a37471a 100644 --- a/net-mail/src/main/java/org/xbib/net/mail/util/MailSSLSocketFactory.java +++ b/net-mail/src/main/java/org/xbib/net/mail/util/MailSSLSocketFactory.java @@ -137,14 +137,14 @@ public class MailSSLSocketFactory extends SSLSocketFactory { * @return the keyManagers */ public synchronized KeyManager[] getKeyManagers() { - return keyManagers.clone(); + return keyManagers; } /** * @param keyManagers the keyManagers to set */ public synchronized void setKeyManagers(KeyManager... keyManagers) throws KeyManagementException { - this.keyManagers = keyManagers.clone(); + this.keyManagers = keyManagers; newAdapteeFactory(); } @@ -196,20 +196,14 @@ public class MailSSLSocketFactory extends SSLSocketFactory { * @return the trusted hosts */ public synchronized String[] getTrustedHosts() { - if (trustedHosts == null) - return null; - else - return trustedHosts.clone(); + return trustedHosts; } /** * @param trustedHosts the hosts to trust */ public synchronized void setTrustedHosts(String... trustedHosts) { - if (trustedHosts == null) - this.trustedHosts = null; - else - this.trustedHosts = trustedHosts.clone(); + this.trustedHosts = trustedHosts; } /** diff --git a/net-mail/src/test/java/org/xbib/net/mail/test/imap/IMAPFolderTest.java b/net-mail/src/test/java/org/xbib/net/mail/test/imap/IMAPFolderTest.java index 3ce9bbe..6df6fa4 100644 --- a/net-mail/src/test/java/org/xbib/net/mail/test/imap/IMAPFolderTest.java +++ b/net-mail/src/test/java/org/xbib/net/mail/test/imap/IMAPFolderTest.java @@ -29,6 +29,9 @@ import org.xbib.net.mail.test.test.TestServer; import java.io.IOException; import java.util.Properties; import java.util.StringTokenizer; +import java.util.logging.Level; +import java.util.logging.Logger; + import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertTrue; @@ -39,17 +42,19 @@ import static org.junit.jupiter.api.Assertions.fail; * Test IMAPFolder methods. */ @Timeout(20) -public final class IMAPFolderTest { +class IMAPFolderTest { + + private static final Logger logger = Logger.getLogger(IMAPFolderTest.class.getName()); private static final String utf8Folder = "test\u03b1"; + private static final String utf7Folder = "test&A7E-"; public static abstract class IMAPTest { + public void init(Properties props) { } - ; - public abstract void test(Store store, IMAPHandler handler) throws Exception; } @@ -59,9 +64,8 @@ public final class IMAPFolderTest { * encoded name for the CREATE command. */ @Test - public void testUtf7FolderNameCreate() { - testWithHandler( - new IMAPTest() { + void testUtf7FolderNameCreate() { + testWithHandler(new IMAPTest() { @Override public void test(Store store, IMAPHandler handler) throws MessagingException, IOException { @@ -95,7 +99,7 @@ public final class IMAPFolderTest { * unencoded name for the CREATE command. */ @Test - public void testUtf8FolderNameCreate() { + void testUtf8FolderNameCreate() { testWithHandler( new IMAPTest() { @Override @@ -132,7 +136,7 @@ public final class IMAPFolderTest { * encoded name for the DELETE command. */ @Test - public void testUtf7FolderNameDelete() { + void testUtf7FolderNameDelete() { testWithHandler( new IMAPTest() { @Override @@ -162,7 +166,7 @@ public final class IMAPFolderTest { * unencoded name for the DELETE command. */ @Test - public void testUtf8FolderNameDelete() { + void testUtf8FolderNameDelete() { testWithHandler( new IMAPTest() { @Override @@ -192,7 +196,7 @@ public final class IMAPFolderTest { * encoded name for the SELECT command. */ @Test - public void testUtf7FolderNameSelect() { + void testUtf7FolderNameSelect() { testWithHandler( new IMAPTest() { @Override @@ -224,7 +228,7 @@ public final class IMAPFolderTest { * unencoded name for the SELECT command. */ @Test - public void testUtf8FolderNameSelect() { + void testUtf8FolderNameSelect() { testWithHandler( new IMAPTest() { @Override @@ -256,7 +260,7 @@ public final class IMAPFolderTest { * encoded name for the EXAMINE command. */ @Test - public void testUtf7FolderNameExamine() { + void testUtf7FolderNameExamine() { testWithHandler( new IMAPTest() { @Override @@ -288,7 +292,7 @@ public final class IMAPFolderTest { * unencoded name for the EXAMINE command. */ @Test - public void testUtf8FolderNameExamine() { + void testUtf8FolderNameExamine() { testWithHandler( new IMAPTest() { @Override @@ -320,7 +324,7 @@ public final class IMAPFolderTest { * encoded name for the STATUS command. */ @Test - public void testUtf7FolderNameStatus() { + void testUtf7FolderNameStatus() { testWithHandler( new IMAPTest() { @Override @@ -352,7 +356,7 @@ public final class IMAPFolderTest { * unencoded name for the STATUS command. */ @Test - public void testUtf8FolderNameStatus() { + void testUtf8FolderNameStatus() { testWithHandler( new IMAPTest() { @Override @@ -383,7 +387,7 @@ public final class IMAPFolderTest { * Test that UIDNOTSTICKY is false in the formal case. */ @Test - public void testUidNotStickyFalse() { + void testUidNotStickyFalse() { testWithHandler( new IMAPTest() { @Override @@ -405,7 +409,7 @@ public final class IMAPFolderTest { * Test that UIDNOTSTICKY is true when the untagged response is included. */ @Test - public void testUidNotStickyTrue() { + void testUidNotStickyTrue() { testWithHandler( new IMAPTest() { @Override @@ -434,7 +438,7 @@ public final class IMAPFolderTest { * are ignored. */ @Test - public void testExpungeOutOfRange() { + void testExpungeOutOfRange() { testWithHandler( new IMAPTest() { @Override @@ -479,14 +483,13 @@ public final class IMAPFolderTest { store.connect("test", "test"); test.test(store, handler); } catch (Exception ex) { - System.out.println(ex); - //ex.printStackTrace(); + logger.log(Level.SEVERE, ex.getMessage(), ex); fail(ex.toString()); } finally { store.close(); } } catch (final Exception e) { - e.printStackTrace(); + logger.log(Level.SEVERE, e.getMessage(), e); fail(e.getMessage()); } finally { if (server != null) { diff --git a/net-mail/src/test/java/org/xbib/net/mail/test/imap/IMAPHandler.java b/net-mail/src/test/java/org/xbib/net/mail/test/imap/IMAPHandler.java index fc751c6..4cc1d04 100644 --- a/net-mail/src/test/java/org/xbib/net/mail/test/imap/IMAPHandler.java +++ b/net-mail/src/test/java/org/xbib/net/mail/test/imap/IMAPHandler.java @@ -19,6 +19,8 @@ package org.xbib.net.mail.test.imap; import org.xbib.net.mail.test.test.ProtocolHandler; import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; import java.nio.charset.StandardCharsets; import java.util.Base64; import java.util.StringTokenizer; @@ -56,6 +58,11 @@ public class IMAPHandler extends ProtocolHandler { */ protected int numberOfRecentMessages = 0; + public IMAPHandler(InputStream inputStream, + OutputStream outputStream) { + super(inputStream, outputStream); + } + /** * Send greetings. * @@ -520,7 +527,7 @@ public class IMAPHandler extends ProtocolHandler { int len = data.length; int off = 0; int n; - while (len > 0 && (n = in.read(data, off, len)) > 0) { + while (len > 0 && (n = inputStream.read(data, off, len)) > 0) { off += n; len -= n; } diff --git a/net-mail/src/test/java/org/xbib/net/mail/test/pop3/POP3Handler.java b/net-mail/src/test/java/org/xbib/net/mail/test/pop3/POP3Handler.java index 6ac60a4..ae01828 100644 --- a/net-mail/src/test/java/org/xbib/net/mail/test/pop3/POP3Handler.java +++ b/net-mail/src/test/java/org/xbib/net/mail/test/pop3/POP3Handler.java @@ -19,6 +19,8 @@ package org.xbib.net.mail.test.pop3; import org.xbib.net.mail.test.test.ProtocolHandler; import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; import java.util.StringTokenizer; import java.util.logging.Level; @@ -69,6 +71,11 @@ public class POP3Handler extends ProtocolHandler { "\r\n" + "--xxx--\r\n"; + public POP3Handler(InputStream inputStream, + OutputStream outputStream) { + super(inputStream, outputStream); + } + /** * Send greetings. * diff --git a/net-mail/src/test/java/org/xbib/net/mail/test/smtp/SMTPHandler.java b/net-mail/src/test/java/org/xbib/net/mail/test/smtp/SMTPHandler.java index 62443fd..e241302 100644 --- a/net-mail/src/test/java/org/xbib/net/mail/test/smtp/SMTPHandler.java +++ b/net-mail/src/test/java/org/xbib/net/mail/test/smtp/SMTPHandler.java @@ -20,6 +20,8 @@ import org.xbib.net.mail.test.test.ProtocolHandler; import java.io.ByteArrayOutputStream; import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; import java.io.OutputStreamWriter; import java.io.PrintWriter; import java.nio.charset.StandardCharsets; @@ -50,6 +52,11 @@ public class SMTPHandler extends ProtocolHandler { */ protected Set extensions = new HashSet(); + public SMTPHandler(InputStream inputStream, + OutputStream outputStream) { + super(inputStream, outputStream); + } + /** * Send greetings. * @@ -228,7 +235,7 @@ public class SMTPHandler extends ProtocolHandler { int len = data.length; int off = 0; int n; - while (len > 0 && (n = in.read(data, off, len)) > 0) { + while (len > 0 && (n = inputStream.read(data, off, len)) > 0) { off += n; len -= n; } diff --git a/net-mail/src/test/java/org/xbib/net/mail/test/test/ProtocolHandler.java b/net-mail/src/test/java/org/xbib/net/mail/test/test/ProtocolHandler.java index bc6a931..2b48307 100644 --- a/net-mail/src/test/java/org/xbib/net/mail/test/test/ProtocolHandler.java +++ b/net-mail/src/test/java/org/xbib/net/mail/test/test/ProtocolHandler.java @@ -16,15 +16,13 @@ package org.xbib.net.mail.test.test; -import javax.net.ssl.SSLException; import java.io.BufferedInputStream; import java.io.IOException; import java.io.InputStream; +import java.io.OutputStream; import java.io.OutputStreamWriter; import java.io.PrintWriter; import java.io.PushbackInputStream; -import java.net.Socket; -import java.net.SocketException; import java.nio.charset.StandardCharsets; import java.util.logging.Level; import java.util.logging.Logger; @@ -37,18 +35,13 @@ import java.util.logging.Logger; * @author sbo * @author Bill Shannon */ -public abstract class ProtocolHandler implements Runnable, Cloneable { +public abstract class ProtocolHandler implements Runnable { /** * Logger for this class. */ protected final Logger LOGGER = Logger.getLogger(this.getClass().getName()); - /** - * Client socket. - */ - protected Socket clientSocket; - /** * Quit? */ @@ -62,19 +55,11 @@ public abstract class ProtocolHandler implements Runnable, Cloneable { /** * Input from socket. */ - protected InputStream in; + protected InputStream inputStream; - /** - * Sets the client socket. - * - * @param clientSocket the client socket - */ - public final void setClientSocket(final Socket clientSocket) - throws IOException { - this.clientSocket = clientSocket; - writer = new PrintWriter(new OutputStreamWriter( - clientSocket.getOutputStream(), StandardCharsets.UTF_8)); - in = new BufferedInputStream(clientSocket.getInputStream()); + public ProtocolHandler(InputStream inputStream, OutputStream outputStream) { + this.inputStream = new BufferedInputStream(inputStream); + this.writer = new PrintWriter(new OutputStreamWriter(outputStream, StandardCharsets.UTF_8)); } /** @@ -100,15 +85,15 @@ public abstract class ProtocolHandler implements Runnable, Cloneable { int offset = 0; int c; - while ((c = in.read()) != -1) { + while ((c = inputStream.read()) != -1) { if (c == '\n') { break; } else if (c == '\r') { - int c2 = in.read(); + int c2 = inputStream.read(); if ((c2 != '\n') && (c2 != -1)) { - if (!(in instanceof PushbackInputStream)) - this.in = new PushbackInputStream(in); - ((PushbackInputStream) in).unread(c2); + if (!(inputStream instanceof PushbackInputStream)) + this.inputStream = new PushbackInputStream(inputStream); + ((PushbackInputStream) inputStream).unread(c2); } break; } else { @@ -132,24 +117,21 @@ public abstract class ProtocolHandler implements Runnable, Cloneable { @Override public final void run() { try { - sendGreetings(); - while (!quit) { handleCommand(); } - - //clientSocket.close(); - } catch (SocketException sex) { + } catch (IOException sex) { // ignore it, often get "connection reset" when client closes - } catch (SSLException sex) { - // ignore it, often occurs when testing SSL } catch (Exception e) { LOGGER.log(Level.SEVERE, "Error", e); } finally { try { - if (clientSocket != null) - clientSocket.close(); + if (inputStream != null) + inputStream.close(); + if (writer != null) { + writer.close(); + } } catch (final IOException ioe) { LOGGER.log(Level.SEVERE, "Error", ioe); } @@ -162,24 +144,13 @@ public abstract class ProtocolHandler implements Runnable, Cloneable { public void exit() { quit = true; try { - if (clientSocket != null && !clientSocket.isClosed()) { - clientSocket.close(); - clientSocket = null; + if (inputStream != null) + inputStream.close(); + if (writer != null) { + writer.close(); } } catch (final IOException e) { LOGGER.log(Level.SEVERE, "Error", e); } } - - /** - * {@inheritDoc} - */ - @Override - public Object clone() { - try { - return super.clone(); - } catch (final CloneNotSupportedException e) { - throw new AssertionError(e); - } - } } diff --git a/net-mail/src/test/java/org/xbib/net/mail/test/test/TestSSLSocketFactory.java b/net-mail/src/test/java/org/xbib/net/mail/test/test/TestSSLSocketFactory.java index 58d6648..8b2d151 100644 --- a/net-mail/src/test/java/org/xbib/net/mail/test/test/TestSSLSocketFactory.java +++ b/net-mail/src/test/java/org/xbib/net/mail/test/test/TestSSLSocketFactory.java @@ -135,7 +135,7 @@ public class TestSSLSocketFactory extends SSLSocketFactory { @Override public synchronized String[] getDefaultCipherSuites() { if (suites != null) - return suites.clone(); + return suites; else return defaultFactory.getDefaultCipherSuites(); } diff --git a/net-mail/src/test/java/org/xbib/net/mail/test/test/TestServer.java b/net-mail/src/test/java/org/xbib/net/mail/test/test/TestServer.java index 7c070e4..32430ea 100644 --- a/net-mail/src/test/java/org/xbib/net/mail/test/test/TestServer.java +++ b/net-mail/src/test/java/org/xbib/net/mail/test/test/TestServer.java @@ -201,8 +201,7 @@ public final class TestServer extends Thread { while (keepOn) { try { final Socket clientSocket = serverSocket.accept(); - final ProtocolHandler pHandler = - (ProtocolHandler) handler.clone(); + final ProtocolHandler pHandler = handler; pHandler.setClientSocket(clientSocket); Thread t = new Thread(pHandler); synchronized (clients) { @@ -265,4 +264,11 @@ public final class TestServer extends Thread { } return false; } + + class WrappedProtocolHandler { + Socket clientSocket; + ProtocolHandler handler; + + + } } diff --git a/net-mail/src/test/java/org/xbib/net/mail/test/util/SocketFetcherTest.java b/net-mail/src/test/java/org/xbib/net/mail/test/util/SocketFetcherTest.java index 585def9..a7eaa5b 100644 --- a/net-mail/src/test/java/org/xbib/net/mail/test/util/SocketFetcherTest.java +++ b/net-mail/src/test/java/org/xbib/net/mail/test/util/SocketFetcherTest.java @@ -882,7 +882,7 @@ public final class SocketFetcherTest { @Override public void handleCommand() throws IOException { if (!http) { - int c = in.read(); + int c = inputStream.read(); if (c >= 0) { // any data means a real client connected connected = true;