remove clone, fix test server
This commit is contained in:
parent
ee2b2e7db7
commit
d803fab767
28 changed files with 765 additions and 178 deletions
|
@ -15,6 +15,7 @@ ext {
|
||||||
user = 'joerg'
|
user = 'joerg'
|
||||||
name = 'net'
|
name = 'net'
|
||||||
description = 'Network classes for Java'
|
description = 'Network classes for Java'
|
||||||
|
vendor = 'xbib.org'
|
||||||
inceptionYear = '2016'
|
inceptionYear = '2016'
|
||||||
url = 'https://xbib.org/' + user + '/' + name
|
url = 'https://xbib.org/' + user + '/' + name
|
||||||
scmUrl = 'https://xbib.org/' + user + '/' + name
|
scmUrl = 'https://xbib.org/' + user + '/' + name
|
||||||
|
|
|
@ -11,9 +11,18 @@ java {
|
||||||
|
|
||||||
jar {
|
jar {
|
||||||
manifest {
|
manifest {
|
||||||
|
attributes('Implementation-Name': project.name)
|
||||||
attributes('Implementation-Version': project.version)
|
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
|
duplicatesStrategy = DuplicatesStrategy.INCLUDE
|
||||||
|
from (project.file('.')) {
|
||||||
|
include 'LICENSE.txt'
|
||||||
|
include 'NOTICE.txt'
|
||||||
|
into 'META-INF'
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
tasks.withType(JavaCompile).configureEach {
|
tasks.withType(JavaCompile).configureEach {
|
||||||
|
|
637
net-mail/LICENSE.txt
Normal file
637
net-mail/LICENSE.txt
Normal file
|
@ -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) <year> <name of author>
|
||||||
|
|
||||||
|
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.
|
|
@ -377,10 +377,7 @@ public class DataHandler {
|
||||||
// if it's not set, set it...
|
// if it's not set, set it...
|
||||||
if (transferFlavors == emptyFlavors)
|
if (transferFlavors == emptyFlavors)
|
||||||
transferFlavors = getDataContentHandler().getTransferDataFlavors();
|
transferFlavors = getDataContentHandler().getTransferDataFlavors();
|
||||||
if (transferFlavors == emptyFlavors)
|
return transferFlavors;
|
||||||
return transferFlavors; // no need to clone an empty array
|
|
||||||
else
|
|
||||||
return transferFlavors.clone();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -103,8 +103,9 @@ public class Flags {
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
public Flags(Flags flags) {
|
public Flags(Flags flags) {
|
||||||
this.system_flags = flags.system_flags;
|
this.system_flags = flags.system_flags;
|
||||||
if (flags.user_flags != null)
|
if (flags.user_flags != null) {
|
||||||
this.user_flags = (Hashtable<String, String>) flags.user_flags.clone();
|
this.user_flags = flags.user_flags;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -406,30 +407,12 @@ public class Flags {
|
||||||
user_flags = null;
|
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<String, String>) this.user_flags.clone();
|
|
||||||
return f;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Return a string representation of this Flags object.
|
* Return a string representation of this Flags object.
|
||||||
* Note that the exact format of the string is subject to change.
|
* Note that the exact format of the string is subject to change.
|
||||||
*/
|
*/
|
||||||
public String toString() {
|
public String toString() {
|
||||||
StringBuilder sb = new StringBuilder();
|
StringBuilder sb = new StringBuilder();
|
||||||
|
|
||||||
if ((system_flags & ANSWERED_BIT) != 0)
|
if ((system_flags & ANSWERED_BIT) != 0)
|
||||||
sb.append("\\Answered ");
|
sb.append("\\Answered ");
|
||||||
if ((system_flags & DELETED_BIT) != 0)
|
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
|
sb.setLength(sb.length() - 1); // smash trailing space
|
||||||
|
|
||||||
return sb.toString();
|
return sb.toString();
|
||||||
|
@ -550,7 +533,7 @@ public class Flags {
|
||||||
System.out.println("fail");
|
System.out.println("fail");
|
||||||
|
|
||||||
// check clone with only system flags
|
// check clone with only system flags
|
||||||
fc = (Flags)f1.clone();
|
fc = (Flags)f1;
|
||||||
if (f1.equals(fc) && fc.equals(f1))
|
if (f1.equals(fc) && fc.equals(f1))
|
||||||
System.out.println("success");
|
System.out.println("success");
|
||||||
else
|
else
|
||||||
|
@ -565,8 +548,8 @@ public class Flags {
|
||||||
else
|
else
|
||||||
System.out.println("fail");
|
System.out.println("fail");
|
||||||
|
|
||||||
// check clone
|
// check
|
||||||
fc = (Flags)f1.clone();
|
fc = (Flags)f1;
|
||||||
if (f1.equals(fc) && fc.equals(f1))
|
if (f1.equals(fc) && fc.equals(f1))
|
||||||
System.out.println("success");
|
System.out.println("success");
|
||||||
else
|
else
|
||||||
|
|
|
@ -1623,8 +1623,7 @@ public abstract class Folder implements AutoCloseable {
|
||||||
* of this event will not take effect until after the event is
|
* of this event will not take effect until after the event is
|
||||||
* delivered.
|
* delivered.
|
||||||
*/
|
*/
|
||||||
@SuppressWarnings("unchecked")
|
Vector<? extends EventListener> v = new Vector<>(vector);
|
||||||
Vector<? extends EventListener> v = (Vector<? extends EventListener>) vector.clone();
|
|
||||||
q.enqueue(event, v);
|
q.enqueue(event, v);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -611,8 +611,7 @@ public abstract class Service implements AutoCloseable {
|
||||||
* of this event will not take effect until after the event is
|
* of this event will not take effect until after the event is
|
||||||
* delivered.
|
* delivered.
|
||||||
*/
|
*/
|
||||||
@SuppressWarnings("unchecked")
|
Vector<? extends EventListener> v = new Vector<>(vector);
|
||||||
Vector<? extends EventListener> v = (Vector<? extends EventListener>) vector.clone();
|
|
||||||
q.enqueue(event, v);
|
q.enqueue(event, v);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -2099,10 +2099,6 @@ public class MimeMessage extends Message implements MimePart {
|
||||||
/**
|
/**
|
||||||
* Return a <code>Flags</code> object containing the flags for
|
* Return a <code>Flags</code> object containing the flags for
|
||||||
* this message. <p>
|
* this message. <p>
|
||||||
* <p>
|
|
||||||
* 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
|
* @return Flags object containing the flags for this message
|
||||||
* @throws MessagingException for failures
|
* @throws MessagingException for failures
|
||||||
|
@ -2110,7 +2106,7 @@ public class MimeMessage extends Message implements MimePart {
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public synchronized Flags getFlags() throws MessagingException {
|
public synchronized Flags getFlags() throws MessagingException {
|
||||||
return (Flags) flags.clone();
|
return flags;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -63,7 +63,7 @@ public final class AndTerm extends SearchTerm {
|
||||||
* @return the search terms
|
* @return the search terms
|
||||||
*/
|
*/
|
||||||
public SearchTerm[] getTerms() {
|
public SearchTerm[] getTerms() {
|
||||||
return terms.clone();
|
return terms;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -36,14 +36,14 @@ public final class FlagTerm extends SearchTerm {
|
||||||
*
|
*
|
||||||
* @serial
|
* @serial
|
||||||
*/
|
*/
|
||||||
private boolean set;
|
private final boolean set;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Flags object containing the flags to test.
|
* Flags object containing the flags to test.
|
||||||
*
|
*
|
||||||
* @serial
|
* @serial
|
||||||
*/
|
*/
|
||||||
private Flags flags;
|
private final Flags flags;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Constructor.
|
* Constructor.
|
||||||
|
@ -62,7 +62,7 @@ public final class FlagTerm extends SearchTerm {
|
||||||
* @return the flags
|
* @return the flags
|
||||||
*/
|
*/
|
||||||
public Flags getFlags() {
|
public Flags getFlags() {
|
||||||
return (Flags) flags.clone();
|
return flags;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -82,7 +82,6 @@ public final class FlagTerm extends SearchTerm {
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public boolean match(Message msg) {
|
public boolean match(Message msg) {
|
||||||
|
|
||||||
try {
|
try {
|
||||||
Flags f = msg.getFlags();
|
Flags f = msg.getFlags();
|
||||||
if (set) { // This is easy
|
if (set) { // This is easy
|
||||||
|
@ -99,23 +98,19 @@ public final class FlagTerm extends SearchTerm {
|
||||||
Flags.Flag[] sf = flags.getSystemFlags();
|
Flags.Flag[] sf = flags.getSystemFlags();
|
||||||
|
|
||||||
// Check each flag in the passed in Flags object
|
// Check each flag in the passed in Flags object
|
||||||
for (int i = 0; i < sf.length; i++) {
|
for (Flags.Flag flag : sf) {
|
||||||
if (f.contains(sf[i]))
|
if (f.contains(flag))
|
||||||
// this flag IS set in this Message, get out.
|
// this flag IS set in this Message, get out.
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
String[] s = flags.getUserFlags();
|
String[] s = flags.getUserFlags();
|
||||||
|
|
||||||
// Check each flag in the passed in Flags object
|
// Check each flag in the passed in Flags object
|
||||||
for (int i = 0; i < s.length; i++) {
|
for (String string : s) {
|
||||||
if (f.contains(s[i]))
|
if (f.contains(string))
|
||||||
// this flag IS set in this Message, get out.
|
// this flag IS set in this Message, get out.
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
} catch (MessagingException | RuntimeException e) {
|
} catch (MessagingException | RuntimeException e) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
|
@ -62,7 +62,7 @@ public final class OrTerm extends SearchTerm {
|
||||||
* @return the search terms
|
* @return the search terms
|
||||||
*/
|
*/
|
||||||
public SearchTerm[] getTerms() {
|
public SearchTerm[] getTerms() {
|
||||||
return terms.clone();
|
return terms;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -1621,9 +1621,7 @@ public class IMAPFolder extends Folder implements UIDFolder, ResponseHandler {
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public synchronized Flags getPermanentFlags() {
|
public synchronized Flags getPermanentFlags() {
|
||||||
if (permanentFlags == null)
|
return permanentFlags;
|
||||||
return null;
|
|
||||||
return (Flags) (permanentFlags.clone());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -3072,7 +3070,7 @@ public class IMAPFolder extends Folder implements UIDFolder, ResponseHandler {
|
||||||
checkExists();
|
checkExists();
|
||||||
if (attributes == null)
|
if (attributes == null)
|
||||||
exists(); // do a LIST to set the attributes
|
exists(); // do a LIST to set the attributes
|
||||||
return attributes == null ? new String[0] : attributes.clone();
|
return attributes == null ? new String[0] : attributes;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -346,7 +346,7 @@ public class IMAPMessage extends MimeMessage implements ReadableMime {
|
||||||
*/
|
*/
|
||||||
if (a == null || a.length == 0)
|
if (a == null || a.length == 0)
|
||||||
a = envelope.sender;
|
a = envelope.sender;
|
||||||
return aaclone(a);
|
return a;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -392,11 +392,11 @@ public class IMAPMessage extends MimeMessage implements ReadableMime {
|
||||||
loadEnvelope();
|
loadEnvelope();
|
||||||
|
|
||||||
if (type == Message.RecipientType.TO)
|
if (type == Message.RecipientType.TO)
|
||||||
return aaclone(envelope.to);
|
return envelope.to;
|
||||||
else if (type == Message.RecipientType.CC)
|
else if (type == Message.RecipientType.CC)
|
||||||
return aaclone(envelope.cc);
|
return envelope.cc;
|
||||||
else if (type == Message.RecipientType.BCC)
|
else if (type == Message.RecipientType.BCC)
|
||||||
return aaclone(envelope.bcc);
|
return envelope.bcc;
|
||||||
else
|
else
|
||||||
return super.getRecipients(type);
|
return super.getRecipients(type);
|
||||||
}
|
}
|
||||||
|
@ -430,7 +430,7 @@ public class IMAPMessage extends MimeMessage implements ReadableMime {
|
||||||
*/
|
*/
|
||||||
if (envelope.replyTo == null || envelope.replyTo.length == 0)
|
if (envelope.replyTo == null || envelope.replyTo.length == 0)
|
||||||
return getFrom();
|
return getFrom();
|
||||||
return aaclone(envelope.replyTo);
|
return envelope.replyTo;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -568,10 +568,7 @@ public class IMAPMessage extends MimeMessage implements ReadableMime {
|
||||||
if (bodyLoaded)
|
if (bodyLoaded)
|
||||||
return super.getContentLanguage();
|
return super.getContentLanguage();
|
||||||
loadBODYSTRUCTURE();
|
loadBODYSTRUCTURE();
|
||||||
if (bs.language != null)
|
return bs.language;
|
||||||
return bs.language.clone();
|
|
||||||
else
|
|
||||||
return null;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -1693,16 +1690,6 @@ public class IMAPMessage extends MimeMessage implements ReadableMime {
|
||||||
return sectionId + "." + what;
|
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() {
|
private Flags _getFlags() {
|
||||||
return flags;
|
return flags;
|
||||||
}
|
}
|
||||||
|
|
|
@ -127,15 +127,15 @@ public final class Utility {
|
||||||
* (with zero indicating the message doesn't satisfy the condition),
|
* (with zero indicating the message doesn't satisfy the condition),
|
||||||
* sort it, and then convert it to a MessageSet skipping all the zeroes.
|
* sort it, and then convert it to a MessageSet skipping all the zeroes.
|
||||||
*/
|
*/
|
||||||
msgs = msgs.clone();
|
Message[] msgCopy = Arrays.copyOf(msgs, msgs.length);
|
||||||
Arrays.sort(msgs,
|
Arrays.sort(msgCopy,
|
||||||
new Comparator<Message>() {
|
new Comparator<Message>() {
|
||||||
@Override
|
@Override
|
||||||
public int compare(Message msg1, Message msg2) {
|
public int compare(Message msg1, Message msg2) {
|
||||||
return msg1.getMessageNumber() - msg2.getMessageNumber();
|
return msg1.getMessageNumber() - msg2.getMessageNumber();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
return toMessageSet(msgs, cond);
|
return toMessageSet(msgCopy, cond);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -16,7 +16,6 @@
|
||||||
|
|
||||||
package org.xbib.net.mail.imap.protocol;
|
package org.xbib.net.mail.imap.protocol;
|
||||||
|
|
||||||
import jakarta.mail.internet.AddressException;
|
|
||||||
import jakarta.mail.internet.InternetAddress;
|
import jakarta.mail.internet.InternetAddress;
|
||||||
import jakarta.mail.internet.MailDateFormat;
|
import jakarta.mail.internet.MailDateFormat;
|
||||||
import java.text.ParseException;
|
import java.text.ParseException;
|
||||||
|
@ -217,9 +216,7 @@ class IMAPAddress extends InternetAddress {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public InternetAddress[] getGroup(boolean strict) throws AddressException {
|
public InternetAddress[] getGroup(boolean strict) {
|
||||||
if (grouplist == null)
|
return grouplist;
|
||||||
return null;
|
|
||||||
return grouplist.clone();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -298,9 +298,7 @@ public class SearchSequence {
|
||||||
|
|
||||||
protected Argument flag(FlagTerm term) throws SearchException {
|
protected Argument flag(FlagTerm term) throws SearchException {
|
||||||
boolean set = term.getTestSet();
|
boolean set = term.getTestSet();
|
||||||
|
|
||||||
Argument result = new Argument();
|
Argument result = new Argument();
|
||||||
|
|
||||||
Flags flags = term.getFlags();
|
Flags flags = term.getFlags();
|
||||||
Flags.Flag[] sf = flags.getSystemFlags();
|
Flags.Flag[] sf = flags.getSystemFlags();
|
||||||
String[] uf = flags.getUserFlags();
|
String[] uf = flags.getUserFlags();
|
||||||
|
|
|
@ -240,7 +240,7 @@ public class MboxMessage extends MimeMessage {
|
||||||
*/
|
*/
|
||||||
public void setFlags(Flags newFlags, boolean set)
|
public void setFlags(Flags newFlags, boolean set)
|
||||||
throws MessagingException {
|
throws MessagingException {
|
||||||
Flags oldFlags = (Flags) flags.clone();
|
Flags oldFlags = new Flags(flags);
|
||||||
super.setFlags(newFlags, set);
|
super.setFlags(newFlags, set);
|
||||||
if (!flags.equals(oldFlags)) {
|
if (!flags.equals(oldFlags)) {
|
||||||
setHeadersFromFlags(this);
|
setHeadersFromFlags(this);
|
||||||
|
|
|
@ -82,7 +82,7 @@ public class POP3Message extends MimeMessage implements ReadableMime {
|
||||||
@Override
|
@Override
|
||||||
public synchronized void setFlags(Flags newFlags, boolean set)
|
public synchronized void setFlags(Flags newFlags, boolean set)
|
||||||
throws MessagingException {
|
throws MessagingException {
|
||||||
Flags oldFlags = (Flags) flags.clone();
|
Flags oldFlags = new Flags(flags);
|
||||||
super.setFlags(newFlags, set);
|
super.setFlags(newFlags, set);
|
||||||
if (!flags.equals(oldFlags))
|
if (!flags.equals(oldFlags))
|
||||||
folder.notifyMessageChangedListeners(
|
folder.notifyMessageChangedListeners(
|
||||||
|
|
|
@ -457,9 +457,7 @@ public class SMTPTransport extends Transport {
|
||||||
saslMechanisms = new String[v.size()];
|
saslMechanisms = new String[v.size()];
|
||||||
v.toArray(saslMechanisms);
|
v.toArray(saslMechanisms);
|
||||||
}
|
}
|
||||||
if (saslMechanisms == null)
|
return saslMechanisms;
|
||||||
return null;
|
|
||||||
return saslMechanisms.clone();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -471,8 +469,6 @@ public class SMTPTransport extends Transport {
|
||||||
* @since JavaMail 1.4.4
|
* @since JavaMail 1.4.4
|
||||||
*/
|
*/
|
||||||
public synchronized void setSASLMechanisms(String[] mechanisms) {
|
public synchronized void setSASLMechanisms(String[] mechanisms) {
|
||||||
if (mechanisms != null)
|
|
||||||
mechanisms = mechanisms.clone();
|
|
||||||
this.saslMechanisms = mechanisms;
|
this.saslMechanisms = mechanisms;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -137,14 +137,14 @@ public class MailSSLSocketFactory extends SSLSocketFactory {
|
||||||
* @return the keyManagers
|
* @return the keyManagers
|
||||||
*/
|
*/
|
||||||
public synchronized KeyManager[] getKeyManagers() {
|
public synchronized KeyManager[] getKeyManagers() {
|
||||||
return keyManagers.clone();
|
return keyManagers;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param keyManagers the keyManagers to set
|
* @param keyManagers the keyManagers to set
|
||||||
*/
|
*/
|
||||||
public synchronized void setKeyManagers(KeyManager... keyManagers) throws KeyManagementException {
|
public synchronized void setKeyManagers(KeyManager... keyManagers) throws KeyManagementException {
|
||||||
this.keyManagers = keyManagers.clone();
|
this.keyManagers = keyManagers;
|
||||||
newAdapteeFactory();
|
newAdapteeFactory();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -196,20 +196,14 @@ public class MailSSLSocketFactory extends SSLSocketFactory {
|
||||||
* @return the trusted hosts
|
* @return the trusted hosts
|
||||||
*/
|
*/
|
||||||
public synchronized String[] getTrustedHosts() {
|
public synchronized String[] getTrustedHosts() {
|
||||||
if (trustedHosts == null)
|
return trustedHosts;
|
||||||
return null;
|
|
||||||
else
|
|
||||||
return trustedHosts.clone();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param trustedHosts the hosts to trust
|
* @param trustedHosts the hosts to trust
|
||||||
*/
|
*/
|
||||||
public synchronized void setTrustedHosts(String... trustedHosts) {
|
public synchronized void setTrustedHosts(String... trustedHosts) {
|
||||||
if (trustedHosts == null)
|
this.trustedHosts = trustedHosts;
|
||||||
this.trustedHosts = null;
|
|
||||||
else
|
|
||||||
this.trustedHosts = trustedHosts.clone();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -29,6 +29,9 @@ import org.xbib.net.mail.test.test.TestServer;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.Properties;
|
import java.util.Properties;
|
||||||
import java.util.StringTokenizer;
|
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.assertEquals;
|
||||||
import static org.junit.jupiter.api.Assertions.assertFalse;
|
import static org.junit.jupiter.api.Assertions.assertFalse;
|
||||||
import static org.junit.jupiter.api.Assertions.assertTrue;
|
import static org.junit.jupiter.api.Assertions.assertTrue;
|
||||||
|
@ -39,17 +42,19 @@ import static org.junit.jupiter.api.Assertions.fail;
|
||||||
* Test IMAPFolder methods.
|
* Test IMAPFolder methods.
|
||||||
*/
|
*/
|
||||||
@Timeout(20)
|
@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 utf8Folder = "test\u03b1";
|
||||||
|
|
||||||
private static final String utf7Folder = "test&A7E-";
|
private static final String utf7Folder = "test&A7E-";
|
||||||
|
|
||||||
public static abstract class IMAPTest {
|
public static abstract class IMAPTest {
|
||||||
|
|
||||||
public void init(Properties props) {
|
public void init(Properties props) {
|
||||||
}
|
}
|
||||||
|
|
||||||
;
|
|
||||||
|
|
||||||
public abstract void test(Store store, IMAPHandler handler)
|
public abstract void test(Store store, IMAPHandler handler)
|
||||||
throws Exception;
|
throws Exception;
|
||||||
}
|
}
|
||||||
|
@ -59,9 +64,8 @@ public final class IMAPFolderTest {
|
||||||
* encoded name for the CREATE command.
|
* encoded name for the CREATE command.
|
||||||
*/
|
*/
|
||||||
@Test
|
@Test
|
||||||
public void testUtf7FolderNameCreate() {
|
void testUtf7FolderNameCreate() {
|
||||||
testWithHandler(
|
testWithHandler(new IMAPTest() {
|
||||||
new IMAPTest() {
|
|
||||||
@Override
|
@Override
|
||||||
public void test(Store store, IMAPHandler handler)
|
public void test(Store store, IMAPHandler handler)
|
||||||
throws MessagingException, IOException {
|
throws MessagingException, IOException {
|
||||||
|
@ -95,7 +99,7 @@ public final class IMAPFolderTest {
|
||||||
* unencoded name for the CREATE command.
|
* unencoded name for the CREATE command.
|
||||||
*/
|
*/
|
||||||
@Test
|
@Test
|
||||||
public void testUtf8FolderNameCreate() {
|
void testUtf8FolderNameCreate() {
|
||||||
testWithHandler(
|
testWithHandler(
|
||||||
new IMAPTest() {
|
new IMAPTest() {
|
||||||
@Override
|
@Override
|
||||||
|
@ -132,7 +136,7 @@ public final class IMAPFolderTest {
|
||||||
* encoded name for the DELETE command.
|
* encoded name for the DELETE command.
|
||||||
*/
|
*/
|
||||||
@Test
|
@Test
|
||||||
public void testUtf7FolderNameDelete() {
|
void testUtf7FolderNameDelete() {
|
||||||
testWithHandler(
|
testWithHandler(
|
||||||
new IMAPTest() {
|
new IMAPTest() {
|
||||||
@Override
|
@Override
|
||||||
|
@ -162,7 +166,7 @@ public final class IMAPFolderTest {
|
||||||
* unencoded name for the DELETE command.
|
* unencoded name for the DELETE command.
|
||||||
*/
|
*/
|
||||||
@Test
|
@Test
|
||||||
public void testUtf8FolderNameDelete() {
|
void testUtf8FolderNameDelete() {
|
||||||
testWithHandler(
|
testWithHandler(
|
||||||
new IMAPTest() {
|
new IMAPTest() {
|
||||||
@Override
|
@Override
|
||||||
|
@ -192,7 +196,7 @@ public final class IMAPFolderTest {
|
||||||
* encoded name for the SELECT command.
|
* encoded name for the SELECT command.
|
||||||
*/
|
*/
|
||||||
@Test
|
@Test
|
||||||
public void testUtf7FolderNameSelect() {
|
void testUtf7FolderNameSelect() {
|
||||||
testWithHandler(
|
testWithHandler(
|
||||||
new IMAPTest() {
|
new IMAPTest() {
|
||||||
@Override
|
@Override
|
||||||
|
@ -224,7 +228,7 @@ public final class IMAPFolderTest {
|
||||||
* unencoded name for the SELECT command.
|
* unencoded name for the SELECT command.
|
||||||
*/
|
*/
|
||||||
@Test
|
@Test
|
||||||
public void testUtf8FolderNameSelect() {
|
void testUtf8FolderNameSelect() {
|
||||||
testWithHandler(
|
testWithHandler(
|
||||||
new IMAPTest() {
|
new IMAPTest() {
|
||||||
@Override
|
@Override
|
||||||
|
@ -256,7 +260,7 @@ public final class IMAPFolderTest {
|
||||||
* encoded name for the EXAMINE command.
|
* encoded name for the EXAMINE command.
|
||||||
*/
|
*/
|
||||||
@Test
|
@Test
|
||||||
public void testUtf7FolderNameExamine() {
|
void testUtf7FolderNameExamine() {
|
||||||
testWithHandler(
|
testWithHandler(
|
||||||
new IMAPTest() {
|
new IMAPTest() {
|
||||||
@Override
|
@Override
|
||||||
|
@ -288,7 +292,7 @@ public final class IMAPFolderTest {
|
||||||
* unencoded name for the EXAMINE command.
|
* unencoded name for the EXAMINE command.
|
||||||
*/
|
*/
|
||||||
@Test
|
@Test
|
||||||
public void testUtf8FolderNameExamine() {
|
void testUtf8FolderNameExamine() {
|
||||||
testWithHandler(
|
testWithHandler(
|
||||||
new IMAPTest() {
|
new IMAPTest() {
|
||||||
@Override
|
@Override
|
||||||
|
@ -320,7 +324,7 @@ public final class IMAPFolderTest {
|
||||||
* encoded name for the STATUS command.
|
* encoded name for the STATUS command.
|
||||||
*/
|
*/
|
||||||
@Test
|
@Test
|
||||||
public void testUtf7FolderNameStatus() {
|
void testUtf7FolderNameStatus() {
|
||||||
testWithHandler(
|
testWithHandler(
|
||||||
new IMAPTest() {
|
new IMAPTest() {
|
||||||
@Override
|
@Override
|
||||||
|
@ -352,7 +356,7 @@ public final class IMAPFolderTest {
|
||||||
* unencoded name for the STATUS command.
|
* unencoded name for the STATUS command.
|
||||||
*/
|
*/
|
||||||
@Test
|
@Test
|
||||||
public void testUtf8FolderNameStatus() {
|
void testUtf8FolderNameStatus() {
|
||||||
testWithHandler(
|
testWithHandler(
|
||||||
new IMAPTest() {
|
new IMAPTest() {
|
||||||
@Override
|
@Override
|
||||||
|
@ -383,7 +387,7 @@ public final class IMAPFolderTest {
|
||||||
* Test that UIDNOTSTICKY is false in the formal case.
|
* Test that UIDNOTSTICKY is false in the formal case.
|
||||||
*/
|
*/
|
||||||
@Test
|
@Test
|
||||||
public void testUidNotStickyFalse() {
|
void testUidNotStickyFalse() {
|
||||||
testWithHandler(
|
testWithHandler(
|
||||||
new IMAPTest() {
|
new IMAPTest() {
|
||||||
@Override
|
@Override
|
||||||
|
@ -405,7 +409,7 @@ public final class IMAPFolderTest {
|
||||||
* Test that UIDNOTSTICKY is true when the untagged response is included.
|
* Test that UIDNOTSTICKY is true when the untagged response is included.
|
||||||
*/
|
*/
|
||||||
@Test
|
@Test
|
||||||
public void testUidNotStickyTrue() {
|
void testUidNotStickyTrue() {
|
||||||
testWithHandler(
|
testWithHandler(
|
||||||
new IMAPTest() {
|
new IMAPTest() {
|
||||||
@Override
|
@Override
|
||||||
|
@ -434,7 +438,7 @@ public final class IMAPFolderTest {
|
||||||
* are ignored.
|
* are ignored.
|
||||||
*/
|
*/
|
||||||
@Test
|
@Test
|
||||||
public void testExpungeOutOfRange() {
|
void testExpungeOutOfRange() {
|
||||||
testWithHandler(
|
testWithHandler(
|
||||||
new IMAPTest() {
|
new IMAPTest() {
|
||||||
@Override
|
@Override
|
||||||
|
@ -479,14 +483,13 @@ public final class IMAPFolderTest {
|
||||||
store.connect("test", "test");
|
store.connect("test", "test");
|
||||||
test.test(store, handler);
|
test.test(store, handler);
|
||||||
} catch (Exception ex) {
|
} catch (Exception ex) {
|
||||||
System.out.println(ex);
|
logger.log(Level.SEVERE, ex.getMessage(), ex);
|
||||||
//ex.printStackTrace();
|
|
||||||
fail(ex.toString());
|
fail(ex.toString());
|
||||||
} finally {
|
} finally {
|
||||||
store.close();
|
store.close();
|
||||||
}
|
}
|
||||||
} catch (final Exception e) {
|
} catch (final Exception e) {
|
||||||
e.printStackTrace();
|
logger.log(Level.SEVERE, e.getMessage(), e);
|
||||||
fail(e.getMessage());
|
fail(e.getMessage());
|
||||||
} finally {
|
} finally {
|
||||||
if (server != null) {
|
if (server != null) {
|
||||||
|
|
|
@ -19,6 +19,8 @@ package org.xbib.net.mail.test.imap;
|
||||||
import org.xbib.net.mail.test.test.ProtocolHandler;
|
import org.xbib.net.mail.test.test.ProtocolHandler;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
import java.io.InputStream;
|
||||||
|
import java.io.OutputStream;
|
||||||
import java.nio.charset.StandardCharsets;
|
import java.nio.charset.StandardCharsets;
|
||||||
import java.util.Base64;
|
import java.util.Base64;
|
||||||
import java.util.StringTokenizer;
|
import java.util.StringTokenizer;
|
||||||
|
@ -56,6 +58,11 @@ public class IMAPHandler extends ProtocolHandler {
|
||||||
*/
|
*/
|
||||||
protected int numberOfRecentMessages = 0;
|
protected int numberOfRecentMessages = 0;
|
||||||
|
|
||||||
|
public IMAPHandler(InputStream inputStream,
|
||||||
|
OutputStream outputStream) {
|
||||||
|
super(inputStream, outputStream);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Send greetings.
|
* Send greetings.
|
||||||
*
|
*
|
||||||
|
@ -520,7 +527,7 @@ public class IMAPHandler extends ProtocolHandler {
|
||||||
int len = data.length;
|
int len = data.length;
|
||||||
int off = 0;
|
int off = 0;
|
||||||
int n;
|
int n;
|
||||||
while (len > 0 && (n = in.read(data, off, len)) > 0) {
|
while (len > 0 && (n = inputStream.read(data, off, len)) > 0) {
|
||||||
off += n;
|
off += n;
|
||||||
len -= n;
|
len -= n;
|
||||||
}
|
}
|
||||||
|
|
|
@ -19,6 +19,8 @@ package org.xbib.net.mail.test.pop3;
|
||||||
import org.xbib.net.mail.test.test.ProtocolHandler;
|
import org.xbib.net.mail.test.test.ProtocolHandler;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
import java.io.InputStream;
|
||||||
|
import java.io.OutputStream;
|
||||||
import java.util.StringTokenizer;
|
import java.util.StringTokenizer;
|
||||||
import java.util.logging.Level;
|
import java.util.logging.Level;
|
||||||
|
|
||||||
|
@ -69,6 +71,11 @@ public class POP3Handler extends ProtocolHandler {
|
||||||
"\r\n" +
|
"\r\n" +
|
||||||
"--xxx--\r\n";
|
"--xxx--\r\n";
|
||||||
|
|
||||||
|
public POP3Handler(InputStream inputStream,
|
||||||
|
OutputStream outputStream) {
|
||||||
|
super(inputStream, outputStream);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Send greetings.
|
* Send greetings.
|
||||||
*
|
*
|
||||||
|
|
|
@ -20,6 +20,8 @@ import org.xbib.net.mail.test.test.ProtocolHandler;
|
||||||
|
|
||||||
import java.io.ByteArrayOutputStream;
|
import java.io.ByteArrayOutputStream;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
import java.io.InputStream;
|
||||||
|
import java.io.OutputStream;
|
||||||
import java.io.OutputStreamWriter;
|
import java.io.OutputStreamWriter;
|
||||||
import java.io.PrintWriter;
|
import java.io.PrintWriter;
|
||||||
import java.nio.charset.StandardCharsets;
|
import java.nio.charset.StandardCharsets;
|
||||||
|
@ -50,6 +52,11 @@ public class SMTPHandler extends ProtocolHandler {
|
||||||
*/
|
*/
|
||||||
protected Set<String> extensions = new HashSet<String>();
|
protected Set<String> extensions = new HashSet<String>();
|
||||||
|
|
||||||
|
public SMTPHandler(InputStream inputStream,
|
||||||
|
OutputStream outputStream) {
|
||||||
|
super(inputStream, outputStream);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Send greetings.
|
* Send greetings.
|
||||||
*
|
*
|
||||||
|
@ -228,7 +235,7 @@ public class SMTPHandler extends ProtocolHandler {
|
||||||
int len = data.length;
|
int len = data.length;
|
||||||
int off = 0;
|
int off = 0;
|
||||||
int n;
|
int n;
|
||||||
while (len > 0 && (n = in.read(data, off, len)) > 0) {
|
while (len > 0 && (n = inputStream.read(data, off, len)) > 0) {
|
||||||
off += n;
|
off += n;
|
||||||
len -= n;
|
len -= n;
|
||||||
}
|
}
|
||||||
|
|
|
@ -16,15 +16,13 @@
|
||||||
|
|
||||||
package org.xbib.net.mail.test.test;
|
package org.xbib.net.mail.test.test;
|
||||||
|
|
||||||
import javax.net.ssl.SSLException;
|
|
||||||
import java.io.BufferedInputStream;
|
import java.io.BufferedInputStream;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
|
import java.io.OutputStream;
|
||||||
import java.io.OutputStreamWriter;
|
import java.io.OutputStreamWriter;
|
||||||
import java.io.PrintWriter;
|
import java.io.PrintWriter;
|
||||||
import java.io.PushbackInputStream;
|
import java.io.PushbackInputStream;
|
||||||
import java.net.Socket;
|
|
||||||
import java.net.SocketException;
|
|
||||||
import java.nio.charset.StandardCharsets;
|
import java.nio.charset.StandardCharsets;
|
||||||
import java.util.logging.Level;
|
import java.util.logging.Level;
|
||||||
import java.util.logging.Logger;
|
import java.util.logging.Logger;
|
||||||
|
@ -37,18 +35,13 @@ import java.util.logging.Logger;
|
||||||
* @author sbo
|
* @author sbo
|
||||||
* @author Bill Shannon
|
* @author Bill Shannon
|
||||||
*/
|
*/
|
||||||
public abstract class ProtocolHandler implements Runnable, Cloneable {
|
public abstract class ProtocolHandler implements Runnable {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Logger for this class.
|
* Logger for this class.
|
||||||
*/
|
*/
|
||||||
protected final Logger LOGGER = Logger.getLogger(this.getClass().getName());
|
protected final Logger LOGGER = Logger.getLogger(this.getClass().getName());
|
||||||
|
|
||||||
/**
|
|
||||||
* Client socket.
|
|
||||||
*/
|
|
||||||
protected Socket clientSocket;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Quit?
|
* Quit?
|
||||||
*/
|
*/
|
||||||
|
@ -62,19 +55,11 @@ public abstract class ProtocolHandler implements Runnable, Cloneable {
|
||||||
/**
|
/**
|
||||||
* Input from socket.
|
* Input from socket.
|
||||||
*/
|
*/
|
||||||
protected InputStream in;
|
protected InputStream inputStream;
|
||||||
|
|
||||||
/**
|
public ProtocolHandler(InputStream inputStream, OutputStream outputStream) {
|
||||||
* Sets the client socket.
|
this.inputStream = new BufferedInputStream(inputStream);
|
||||||
*
|
this.writer = new PrintWriter(new OutputStreamWriter(outputStream, StandardCharsets.UTF_8));
|
||||||
* @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());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -100,15 +85,15 @@ public abstract class ProtocolHandler implements Runnable, Cloneable {
|
||||||
int offset = 0;
|
int offset = 0;
|
||||||
int c;
|
int c;
|
||||||
|
|
||||||
while ((c = in.read()) != -1) {
|
while ((c = inputStream.read()) != -1) {
|
||||||
if (c == '\n') {
|
if (c == '\n') {
|
||||||
break;
|
break;
|
||||||
} else if (c == '\r') {
|
} else if (c == '\r') {
|
||||||
int c2 = in.read();
|
int c2 = inputStream.read();
|
||||||
if ((c2 != '\n') && (c2 != -1)) {
|
if ((c2 != '\n') && (c2 != -1)) {
|
||||||
if (!(in instanceof PushbackInputStream))
|
if (!(inputStream instanceof PushbackInputStream))
|
||||||
this.in = new PushbackInputStream(in);
|
this.inputStream = new PushbackInputStream(inputStream);
|
||||||
((PushbackInputStream) in).unread(c2);
|
((PushbackInputStream) inputStream).unread(c2);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
} else {
|
} else {
|
||||||
|
@ -132,24 +117,21 @@ public abstract class ProtocolHandler implements Runnable, Cloneable {
|
||||||
@Override
|
@Override
|
||||||
public final void run() {
|
public final void run() {
|
||||||
try {
|
try {
|
||||||
|
|
||||||
sendGreetings();
|
sendGreetings();
|
||||||
|
|
||||||
while (!quit) {
|
while (!quit) {
|
||||||
handleCommand();
|
handleCommand();
|
||||||
}
|
}
|
||||||
|
} catch (IOException sex) {
|
||||||
//clientSocket.close();
|
|
||||||
} catch (SocketException sex) {
|
|
||||||
// ignore it, often get "connection reset" when client closes
|
// ignore it, often get "connection reset" when client closes
|
||||||
} catch (SSLException sex) {
|
|
||||||
// ignore it, often occurs when testing SSL
|
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
LOGGER.log(Level.SEVERE, "Error", e);
|
LOGGER.log(Level.SEVERE, "Error", e);
|
||||||
} finally {
|
} finally {
|
||||||
try {
|
try {
|
||||||
if (clientSocket != null)
|
if (inputStream != null)
|
||||||
clientSocket.close();
|
inputStream.close();
|
||||||
|
if (writer != null) {
|
||||||
|
writer.close();
|
||||||
|
}
|
||||||
} catch (final IOException ioe) {
|
} catch (final IOException ioe) {
|
||||||
LOGGER.log(Level.SEVERE, "Error", ioe);
|
LOGGER.log(Level.SEVERE, "Error", ioe);
|
||||||
}
|
}
|
||||||
|
@ -162,24 +144,13 @@ public abstract class ProtocolHandler implements Runnable, Cloneable {
|
||||||
public void exit() {
|
public void exit() {
|
||||||
quit = true;
|
quit = true;
|
||||||
try {
|
try {
|
||||||
if (clientSocket != null && !clientSocket.isClosed()) {
|
if (inputStream != null)
|
||||||
clientSocket.close();
|
inputStream.close();
|
||||||
clientSocket = null;
|
if (writer != null) {
|
||||||
|
writer.close();
|
||||||
}
|
}
|
||||||
} catch (final IOException e) {
|
} catch (final IOException e) {
|
||||||
LOGGER.log(Level.SEVERE, "Error", e);
|
LOGGER.log(Level.SEVERE, "Error", e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* {@inheritDoc}
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
public Object clone() {
|
|
||||||
try {
|
|
||||||
return super.clone();
|
|
||||||
} catch (final CloneNotSupportedException e) {
|
|
||||||
throw new AssertionError(e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -135,7 +135,7 @@ public class TestSSLSocketFactory extends SSLSocketFactory {
|
||||||
@Override
|
@Override
|
||||||
public synchronized String[] getDefaultCipherSuites() {
|
public synchronized String[] getDefaultCipherSuites() {
|
||||||
if (suites != null)
|
if (suites != null)
|
||||||
return suites.clone();
|
return suites;
|
||||||
else
|
else
|
||||||
return defaultFactory.getDefaultCipherSuites();
|
return defaultFactory.getDefaultCipherSuites();
|
||||||
}
|
}
|
||||||
|
|
|
@ -201,8 +201,7 @@ public final class TestServer extends Thread {
|
||||||
while (keepOn) {
|
while (keepOn) {
|
||||||
try {
|
try {
|
||||||
final Socket clientSocket = serverSocket.accept();
|
final Socket clientSocket = serverSocket.accept();
|
||||||
final ProtocolHandler pHandler =
|
final ProtocolHandler pHandler = handler;
|
||||||
(ProtocolHandler) handler.clone();
|
|
||||||
pHandler.setClientSocket(clientSocket);
|
pHandler.setClientSocket(clientSocket);
|
||||||
Thread t = new Thread(pHandler);
|
Thread t = new Thread(pHandler);
|
||||||
synchronized (clients) {
|
synchronized (clients) {
|
||||||
|
@ -265,4 +264,11 @@ public final class TestServer extends Thread {
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class WrappedProtocolHandler {
|
||||||
|
Socket clientSocket;
|
||||||
|
ProtocolHandler handler;
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -882,7 +882,7 @@ public final class SocketFetcherTest {
|
||||||
@Override
|
@Override
|
||||||
public void handleCommand() throws IOException {
|
public void handleCommand() throws IOException {
|
||||||
if (!http) {
|
if (!http) {
|
||||||
int c = in.read();
|
int c = inputStream.read();
|
||||||
if (c >= 0) {
|
if (c >= 0) {
|
||||||
// any data means a real client connected
|
// any data means a real client connected
|
||||||
connected = true;
|
connected = true;
|
||||||
|
|
Loading…
Reference in a new issue